Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vOYA0-00CKdw-2h for pgsql-hackers@arkaria.postgresql.org; Thu, 27 Nov 2025 09:19:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vOY9z-004y5D-1d for pgsql-hackers@arkaria.postgresql.org; Thu, 27 Nov 2025 09:19:31 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vOY9z-004y51-09 for pgsql-hackers@lists.postgresql.org; Thu, 27 Nov 2025 09:19:31 +0000 Received: from mail-qt1-x830.google.com ([2607:f8b0:4864:20::830]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vOY9w-001l6g-11 for pgsql-hackers@lists.postgresql.org; Thu, 27 Nov 2025 09:19:31 +0000 Received: by mail-qt1-x830.google.com with SMTP id d75a77b69052e-4ee553ba7b4so2692601cf.1 for ; Thu, 27 Nov 2025 01:19:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764235166; x=1764839966; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=9BB371FNUf6lMMb64Lai/45z79Yvvf0A5BKt+5zjoXM=; b=JZhwKR033JN71Wy5veJfKeN4FeAhehSPnOdJdouxedxZB9R2u4or4CAzFT1NUDQYWo AoRwZ447ored/cZLnRI3IOZ3SDB240novBjjDjoBkBBYgl4paoIhmuWv56T7i0OfvblN nC9O+iMI1jyQw2E1kuRLwPOZYmIqxoIulq7MbS1CpuiwBnY47LfQrUQxLp2YOU7NPu5F mP1h5rpX7YNG7v5I6mMVsYyeeOR1Es2XaypdK3hGbqov+TzeER4ezHrLYe0Z99PknZvh Ta523BbBTtric206oLvdjDciM3CYV963umD72Tfl0B/T5fBZ5rs3AiQf3tU5xKE6n8AY D9nQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764235166; x=1764839966; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=9BB371FNUf6lMMb64Lai/45z79Yvvf0A5BKt+5zjoXM=; b=wjIvtXPQ2Ng1KXFcjU43R/S5lgLwYyOg7xV2cDXrAfF7dm3teuqx1Kubmggn9x75kY 59FwkTiujA3n0gU32Lgthcj754WEkNies5/JReKOMebqe9sVmOYfaVfD/tepUhHEwdSq PWRBinDS4N1SZjTS6tmz5o2UKhozmLRa+XwX0k3Rh1fue6yKtlSbC2kMCr6RW9vXUflQ jG6EdJ4qJ8OKZJEAYw7YftvseZ3i+pxa0zRmFr2WLs/cmCBZ34sDOnE/4B8u7CxCRPaz VB0xtZqKPS5WhvOXBIhMMfjppR0wmjYVt5wq8FYGhkaAoMY5yqd71xqOLo/1vhWjxh2L 0JQQ== X-Gm-Message-State: AOJu0YyNnmawsIdCdHHOpzhOAELvnR+Z1yQyGjMybOubiJZPhbKtKSN2 /7bxv2Y0JZrPoaHtQ71uj7/0MXUd1vvrIDdpJPbJnnQ6b+SIoN3Jpuu+OR1RHi7JLXzFE1Eitq/ 3rG0tllp2MWwppkpaw5KpQsHOP4/RdWw= X-Gm-Gg: ASbGncvqiFU3PM7R3/cXpfpEagbCqfxOKI3eeICliXhkR4KDbHmgwnSneY8Y9gHD+VP ilhNARRRbgzQAvu5mm4yJ9WZUb8DC48+qW1tf96L0YZnHIz4wCU6VIPZQDqA6+c4Uynk00AzV3Y tX4tAN0VjN8SrHcRqF1wlOpOaOmkhQC7pKXwjDqSL94LOFPM/S/UiR6lcLwBOF9GhBCDYs+tcjH DYbMwBU4bOz/yUf+OBIKlQ02JjEL66EAc0RHrFlt0DiXdDvE9HpXdncUZ48ZTKilvrin8EM X-Google-Smtp-Source: AGHT+IFm5KrHHsCGGgawNZG1ja+qaha7zgaoud44RQvIYVRcMZsERpZk3OARqzyQjyZx9A3/K/AwBQLcnxNNhQ/6X+A= X-Received: by 2002:a05:622a:8a:b0:4ee:23d8:ce28 with SMTP id d75a77b69052e-4efbdad2735mr128601091cf.67.1764235165987; Thu, 27 Nov 2025 01:19:25 -0800 (PST) MIME-Version: 1.0 References: <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> <2bed001a-462c-42da-9a6b-3c7884502932@dunslane.net> <20250824010811.4d.nmisch@google.com> <82eb35b8-7f07-493b-b689-0934919e1dc3@dunslane.net> <17555e46-4fb2-4265-90e0-95cb8ed584a6@dunslane.net> In-Reply-To: From: Mahendra Singh Thalor Date: Thu, 27 Nov 2025 14:49:14 +0530 X-Gm-Features: AWmQ_bnVfOFatcOy5QKFLjbgfIPZMEKkc_QkioMLCY5P1ef2GJOLBbMHJ13_cmA Message-ID: Subject: Re: Non-text mode for pg_dumpall To: Vaibhav Dalvi Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000005e974706449002ac" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005e974706449002ac Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, 27 Nov 2025 at 13:45, Mahendra Singh Thalor wr= ote: > > Thanks Vaibhav for the review. > > On Tue, 18 Nov 2025 at 16:05, Vaibhav Dalvi > wrote: > > > > Hi Mahendra, > > > > Thanks Mahendra for working on this. > > > > Looks like my previous comment below is not addressed: > > 1. > > > >> ### Use of Dump Options Structure (dopt) > >> Please ensure consistency by utilizing the main dump options > >> structure (`dopt`) instead of declaring and using individual variables > >> where the structure already provides fields. For example, the > >> `output_clean` variable seems redundant here: > >> ```c > >> case 'c': > >> output_clean =3D true; > >> dopt.outputClean =3D 1; > >> break; > >> ``` > > > > Fixed. output_clean was a global variable because it was used in 2 > functions. Now I am passing dopt. output_clean as function argument > for another function. > > > > > I agree that the output_clean variable is not added by your patch > > but the introduction of dopt by your patch makes it redundant because > > dopt has dopt.outputClean. Please look at below code from pg_dump.c > > for the reference: > > > > case 'c': /* clean (i.e., drop) schema prior to create */ > > dopt.outputClean =3D 1; > > break; > > case 25: > > dopt.restrict_key =3D pg_strdup(optarg); > > break; > > > > 2. > > > >> ### 3\. Missing Example in SGML Documentation > >> The SGML documentation for `pg_dumpall` is missing an explicit > >> example demonstrating its use with non-text formats (e.g., directory f= ormat). > >> It would be beneficial to include a clear example for this new feature= . > > > > > > I think pg_dumpall should have separate examples similar to pg_dump > > rather than referencing the pg_dump example because pg_dumpall > > doesn't have to mention the database name without -l or --database > > in the command. > > > > Fixed. Added some examples. > > > 3. > >> > >> > 1. Is the following change in `src/bin/pg_dump/connectdb.c` intentio= nal? > >> > >> > > >> > ``` > >> > --- a/src/bin/pg_dump/connectdb.c > >> > +++ b/src/bin/pg_dump/connectdb.c > >> Yes, we need this. If there is any error, then we were trying to > >> disconnect the database in 2 places so we were getting a crash. I will > >> try to reproduce crashe without this patch and will respond. > > > > Have you added a test case in the regression suite which fails if we re= move > > this particular change and works well with the change? or if possible c= ould > > you please demonstrate here at least. > > Fixed. With AH(archive), we should not free pointers by this exec call > as we free this by exit_nicely hook. (we register AH by > on_exit_close_archive). > > > > > 4. The variable name append_data doesn't look meaningful to me. > > Instead we can use append_database/append_databases? > > because if this variable is set then we dump the databases along with > > global objects. In case of pg_dump, append_data or data_only does make > > sense to differentiate between schema and data but in case of pg_dumpal= l > > if this variable is set then we're dumping schema as well as data i.e. = in-short > > the databases. > > > > As of now, I am keeping this append_data as this was from an already > committed patch. > > > ------------------------------------ pg_dumpall.c ---------------------= ------------------- > > > > 5. The variable name formatName doesn't follow the naming convention of > > variables available around it. I think use of format_name/formatname wo= uld > > be better. > > > >> char *use_role =3D NULL; > >> const char *dumpencoding =3D NULL; > >> + const char *formatName =3D "p"; > >> trivalue prompt_password =3D TRI_DEFAULT; > >> bool data_only =3D false; > >> bool globals_only =3D false; > > > > Fixed. > > > > > ------------------------------------ pg_restore.c ---------------------= ------------------- > > > > 6. Fourth parameter (i.e. append_data) to function restore_global_objec= ts() is redundant. > > All the time value provided by all callers to this parameter is false. > > > > I would suggest removing this parameter and in the definition of this f= unction > > call function restore_one_database() with false as 4th argument. Find d= iff below: > > > > Fixed. > > > --- a/src/bin/pg_dump/pg_restore.c > > +++ b/src/bin/pg_dump/pg_restore.c > > @@ -64,8 +64,7 @@ static int restore_one_database(const char *inputF= ileSpec, RestoreOptions *opts, > > int nu= mWorkers, bool append_data, int num, > > bool g= lobals_only); > > static int restore_global_objects(const char *inputFileSpec, > > - RestoreOptions *opts, int numWorkers, bool append_data, > > - int num, bool globals_only); > > + RestoreOptions *opts, int numWorkers, int num, bool glo= bals_only); > > static int restore_all_databases(const char *inputFileSpec, > > SimpleStringList db_exclude_patterns, RestoreOptions *o= pts, int numWorkers); > > static int get_dbnames_list_to_restore(PGconn *conn, > > @@ -554,7 +553,7 @@ main(int argc, char **argv) > > > > /* Set path for toc.glo file. */ > > snprintf(global_path, MAXPGPATH, "%s/toc.glo", = inputFileSpec); > > - n_errors =3D restore_global_objects(global_path= , opts, numWorkers, false, 0, globals_only); > > + n_errors =3D restore_global_objects(global_path= , opts, numWorkers, 0, globals_only); > > > > pg_log_info("database restoring skipped because= option -g/--globals-only was specified"); > > } > > @@ -602,7 +601,7 @@ main(int argc, char **argv) > > * If globals_only is set, then skip DROP DATABASE commands from resto= re. > > */ > > static int restore_global_objects(const char *inputFileSpec, RestoreOp= tions *opts, > > - int numWorkers, bool append_data, int num, bool globals= _only) > > + int numWorkers, int num, bool globals_only) > > { > > int nerror; > > int format =3D opts->format; > > @@ -610,8 +609,8 @@ static int restore_global_objects(const char *input= FileSpec, RestoreOptions *opt > > /* Set format as custom so that toc.glo file can be read. */ > > opts->format =3D archCustom; > > > > - nerror =3D restore_one_database(inputFileSpec, opts, numWorkers= , > > - append_data, num, globals_only); > > + nerror =3D restore_one_database(inputFileSpec, opts, numWorkers= , false, num, > > + globa= ls_only); > > > > /* Reset format value. */ > > opts->format =3D format; > > @@ -1097,7 +1096,7 @@ restore_all_databases(const char *inputFileSpec, > > > > /* If map.dat has no entries, return after processing global co= mmands. */ > > if (dbname_oid_list.head =3D=3D NULL) > > - return restore_global_objects(global_path, opts, numWor= kers, false, 0, false); > > + return restore_global_objects(global_path, opts, numWor= kers, 0, false); > > > > pg_log_info(ngettext("found %d database name in \"%s\"", > > "found %d database nam= es in \"%s\"", > > @@ -1151,7 +1150,7 @@ restore_all_databases(const char *inputFileSpec, > > PQfinish(conn); > > > > /* Open toc.dat file and execute/append all the global sql comm= ands. */ > > - n_errors_total =3D restore_global_objects(global_path, opts, n= umWorkers, false, 0, false); > > + n_errors_total =3D restore_global_objects(global_path, opts, n= umWorkers, 0, false); > > > > Regression is successful with these changes. > > > > 7. Fix indentation: > >> > >> static int restore_global_objects(const char *inputFileSpec, > >> RestoreOptions *opts, int numWorkers, bool append_data, > >> int num, bool globals_only); > >> static int restore_all_databases(const char *inputFileSpec, > >> SimpleStringList db_exclude_patterns, RestoreOptions *opts, int numWor= kers); > > Fixed some. > > > > > > > 8. Remove extra line: > >> > >> + > >> static void usage(const char *progname); > > > > Fixed. > > > > > 9. Remove extra space after map.dat and before comma: > >> > >> + * databases from map.dat , but skip restoring those matching > > > > Fixed. > > > > > 10. Fix 80 char limits: > > > > + n_errors =3D restore_one_database(subdirpath, opts, numWorkers, true,= 1, false); > > > > + num_total_db =3D get_dbname_oid_list_from_mfile(inputFileSpec, &dbnam= e_oid_list); > > > > + return restore_global_objects(global_path, opts, numWorkers, false, 0= , false); > > > > + n_errors_total =3D restore_global_objects(global_path, opts, numWork= ers, false, 0, false); > > > > + pg_log_warning("errors ignored on database \"%s\" restore: %d", dbidn= ame->str, n_errors); > > > > Fixed some. > I will do some more cleanup in the coming versions. > > Here, I am attaching an updated patch for the review and testing. > > > > > > Regards, > > Vaibhav > > > > On Mon, Nov 17, 2025 at 10:45=E2=80=AFPM Mahendra Singh Thalor wrote: > >> > >> Thanks Andrew for the review. > >> On Tue, 11 Nov 2025 at 20:41, Andrew Dunstan wro= te: > >> > > >> > > >> > On 2025-11-11 Tu 12:59 AM, Mahendra Singh Thalor wrote: > >> > > > >> > > Hi, > >> > > Here, I am attaching an updated patch for the review and testing. > >> > > > >> > > FIX: as suggested by Vaibhav, added error for --restrict-key optio= n > >> > > with non-text format. > >> > > > >> > > >> > > >> > Regarding the name and format of the globals toc file, I'm inclined = to > >> > think we should always use custom format, regardless of whether the > >> > individual databases will be in custom, tar or directory formats, an= d > >> > that it should be called something distinguishable, e.g. toc.glo. > >> > > >> > >> I also agree with your point. Fixed. > >> > >> On Mon, 17 Nov 2025 at 19:38, tushar w= rote: > >> > > >> > > >> > > >> > On Tue, Nov 11, 2025 at 11:29=E2=80=AFAM Mahendra Singh Thalor wrote: > >> >> > >> >> On Thu, 6 Nov 2025 at 11:03, Mahendra Singh Thalor wrote: > >> >> > > >> >> > Thanks Vaibhav, Tushar and Andrew for the review and testing. > >> >> > >> > > >> > Thanks Mahendra, getting this error against v07 series patch > >> > > >> > [edb@1a1c15437e7c bin]$ ./pg_dumpall -Ft -f tar.dumpc -v > >> > pg_dumpall: executing SELECT pg_catalog.set_config('search_path', ''= , false); > >> > pg_dumpall: pg_dumpall.c:2256: createOneArchiveEntry: Assertion `fou= t !=3D ((void *)0)' failed. > >> > Aborted > >> > > >> > regards, > >> > >> Thanks Tushar for the report. Fixed. > >> > >> Here, I am attaching an updated patch for the review and testing. > >> > >> -- > >> Thanks and Regards > >> Mahendra Singh Thalor > >> EnterpriseDB: http://www.enterprisedb.com > > > -- > Thanks and Regards > Mahendra Singh Thalor > EnterpriseDB: http://www.enterprisedb.com Hi, CI was reporting an error for an unused variable. [08:37:07.338] user 0m14.312s [08:37:07.338] sys 0m9.155s [08:37:07.338] make -s -j${BUILD_JOBS} clean [08:37:07.850] time make -s -j${BUILD_JOBS} world-bin [08:37:17.443] pg_restore.c:1080:8: error: variable 'count' set but not used [-Werror,-Wunused-but-set-variable] [08:37:17.443] 1080 | int count =3D 0; [08:37:17.443] | ^ [08:37:17.443] 1 error generated. [08:37:17.443] make[3]: *** [: pg_restore.o] Error 1 [08:37:17.443] make[3]: *** Waiting for unfinished jobs.... [08:37:17.708] make[2]: *** [Makefile:45: all-pg_dump-recurse] Error 2 [08:37:17.709] make[1]: *** [Makefile:42: all-bin-recurse] Error 2 [08:37:17.709] mak Fixed. Here, I am attaching an updated patch for the review and testing. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --0000000000005e974706449002ac Content-Type: application/octet-stream; name="v10_27112025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Disposition: attachment; filename="v10_27112025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mih81yvh0 RnJvbSBhYjUwYmI1MmJmMmE5N2MyNDhkZWNmZDVlNWIzY2E2NGU5ZTI3ZDlkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVGh1LCAyNyBOb3YgMjAyNSAxNDo0MzoxNiArMDUzMApTdWJqZWN0OiBbUEFU Q0hdIE5vbiB0ZXh0IG1vZGVzIGZvciBwZ19kdW1wYWxsLCBjb3JyZXNwb25kaW5nbHkgY2hhbmdl IAogcGdfcmVzdG9yZQoKICAgIHBnX2R1bXBhbGwgYWNxdWlyZXMgYSBuZXcgLUYvLS1mb3JtYXQg b3B0aW9uLCB3aXRoIHRoZSBzYW1lIG1lYW5pbmdzIGFzCiAgICBwZ19kdW1wLiBUaGUgZGVmYXVs dCBpcyBwLCBtZWFuaW5nIHBsYWluIHRleHQuIEZvciBhbnkgb3RoZXIgdmFsdWUsIGEKICAgIGRp cmVjdG9yeSBpcyBjcmVhdGVkIGNvbnRhaW5pbmcgdHdvIGZpbGVzLCB0b2MuZ2xvIGFuZCBtYXAu ZGF0LiBUaGUKICAgIGZpcnN0IGNvbnRhaW5zIGNvbW1hbmRzIHJlc3RvcmluZyB0aGUgZ2xvYmFs IGRhdGEgaW4gY3VzdG9tIGZvcm1hdCwgYW5kIHRoZSBzZWNvbmQKICAgIGNvbnRhaW5zIGEgbWFw IGZyb20gb2lkcyB0byBkYXRhYmFzZSBuYW1lcyBpbiB0ZXh0IGZvcm1hdC4gSXQgd2lsbCBhbHNv IGNvbnRhaW4gYQogICAgc3ViZGlyZWN0b3J5IGNhbGxlZCBkYXRhYmFzZXMsIGluc2lkZSB3aGlj aCBpdCB3aWxsIGNyZWF0ZSBhcmNoaXZlcyBpbgogICAgdGhlIHNwZWNpZmllZCBmb3JtYXQsIG5h bWVkIHVzaW5nIHRoZSBkYXRhYmFzZSBvaWRzLgoKICAgIEluIHRoZXNlIGNhc2VzcyB0aGUgLWYg YXJndW1lbnQgaXMgcmVxdWlyZWQuCgogICAgSWYgcGdfcmVzdG9yZSBlbmNvdW50ZXJzIGEgZGly ZWN0b3J5IGNvbnRhaW5pbmcgbWFwLmRhdCBhbmQgdG9jLmdsbywKICAgIGl0IHJlc3RvcmVzIHRo ZSBnbG9iYWwgc2V0dGluZ3MgZnJvbSB0b2MuZ2xvIGlmIGV4aXN0LCBhbmQgdGhlbgogICAgcmVz dG9yZXMgZWFjaCBkYXRhYmFzZS4KCiAgICBwZ19yZXN0b3JlIGFjcXVpcmVzIHR3byBuZXcgb3B0 aW9uczogLWcvLS1nbG9iYWxzLW9ubHkgd2hpY2ggc3VwcHJlc3NlcwogICAgcmVzdG9yYXRpb24g b2YgYW55IGRhdGFiYXNlcywgYW5kIC0tZXhjbHVkZS1kYXRhYmFzZSB3aGljaCBpbmhpYml0cwog ICAgcmVzdG9yYXRpb24gb2YgcGFydGljdWFsciBkYXRhYmFzZShzKSBpbiB0aGUgc2FtZSB3YXkg dGhlIHNhbWUgb3B0aW9uCiAgICB3b3JrcyBpbiBwZ19kdW1wYWxsLgoKdjEwCi0tLQogZG9jL3Ny Yy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgICAgIHwgMTA0ICsrKystCiBkb2Mvc3JjL3NnbWwv cmVmL3BnX3Jlc3RvcmUuc2dtbCAgICAgfCAgNjYgKystCiBzcmMvYmluL3BnX2R1bXAvY29ubmVj dGRiLmMgICAgICAgICAgfCAgIDcgKy0KIHNyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuaCAgICAg ICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkICAgICAgICAgIHwgICAx ICsKIHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jICAgICAgICAgICB8ICAxMCArCiBzcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwLmggICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfYXJjaGl2ZXIuYyB8ICAyOSArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5oIHwgICAxICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgICAgICB8 ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgIHwgICAyICstCiBz cmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jICAgICAgICAgfCA2MTcgKysrKysrKysrKysrKysr KysrKysrLS0tLS0tCiBzcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jICAgICAgICAgfCA2MDIg KysrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5w bCAgICAgICB8ICAyNyArKwogc3JjL2Jpbi9wZ19kdW1wL3QvMDA3X3BnX2R1bXBhbGwucGwgIHwg Mzk2ICsrKysrKysrKysrKysrKysrCiAxNSBmaWxlcyBjaGFuZ2VkLCAxNzAyIGluc2VydGlvbnMo KyksIDE2NiBkZWxldGlvbnMoLSkKIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgc3JjL2Jp bi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3JjL2Jpbi9wZ19k dW1wL3QvMDA3X3BnX2R1bXBhbGwucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3Bn X2R1bXBhbGwuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCmluZGV4IDg4 MzRiN2VjMTQxLi43NWRlMWZlZTMzMCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19k dW1wYWxsLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKQEAgLTE2 LDcgKzE2LDEwIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogCiAgPHJlZm5hbWVkaXY+CiAg IDxyZWZuYW1lPnBnX2R1bXBhbGw8L3JlZm5hbWU+Ci0gIDxyZWZwdXJwb3NlPmV4dHJhY3QgYSA8 cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0ZXIgaW50 byBhIHNjcmlwdCBmaWxlPC9yZWZwdXJwb3NlPgorCisgIDxyZWZwdXJwb3NlPgorICAgZXhwb3J0 IGEgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVy IGFzIGFuIFNRTCBzY3JpcHQgb3IgdG8gb3RoZXIgZm9ybWF0cworICA8L3JlZnB1cnBvc2U+CiAg PC9yZWZuYW1lZGl2PgogCiAgPHJlZnN5bm9wc2lzZGl2PgpAQCAtMzMsNyArMzYsNyBAQCBQb3N0 Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgPHBhcmE+CiAgICA8YXBwbGljYXRpb24+cGdfZHVtcGFs bDwvYXBwbGljYXRpb24+IGlzIGEgdXRpbGl0eSBmb3Igd3JpdGluZyBvdXQKICAgICg8cXVvdGU+ ZHVtcGluZzwvcXVvdGU+KSBhbGwgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1l PiBkYXRhYmFzZXMKLSAgIG9mIGEgY2x1c3RlciBpbnRvIG9uZSBzY3JpcHQgZmlsZS4gIFRoZSBz Y3JpcHQgZmlsZSBjb250YWlucworICAgb2YgYSBjbHVzdGVyIGludG8gYW4gU1FMIHNjcmlwdCBm aWxlIG9yIGFuIGFyY2hpdmUuICBUaGUgb3V0cHV0IGNvbnRhaW5zCiAgICA8YWNyb255bT5TUUw8 L2Fjcm9ueW0+IGNvbW1hbmRzIHRoYXQgY2FuIGJlIHVzZWQgYXMgaW5wdXQgdG8gPHhyZWYKICAg IGxpbmtlbmQ9ImFwcC1wc3FsIi8+IHRvIHJlc3RvcmUgdGhlIGRhdGFiYXNlcy4gIEl0IGRvZXMg dGhpcyBieQogICAgY2FsbGluZyA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IGZvciBlYWNo IGRhdGFiYXNlIGluIHRoZSBjbHVzdGVyLgpAQCAtNTIsMTEgKzU1LDE2IEBAIFBvc3RncmVTUUwg ZG9jdW1lbnRhdGlvbgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGUgU1FMIHNjcmlwdCB3 aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gIFVzZSB0aGUKKyAgIFBsYWlu IHRleHQgU1FMIHNjcmlwdHMgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQu ICBVc2UgdGhlCiAgICA8b3B0aW9uPi1mPC9vcHRpb24+LzxvcHRpb24+LS1maWxlPC9vcHRpb24+ IG9wdGlvbiBvciBzaGVsbCBvcGVyYXRvcnMgdG8KICAgIHJlZGlyZWN0IGl0IGludG8gYSBmaWxl LgogICA8L3BhcmE+CiAKKyAgPHBhcmE+CisgICBBcmNoaXZlcyBpbiBvdGhlciBmb3JtYXRzIHdp bGwgYmUgcGxhY2VkIGluIGEgZGlyZWN0b3J5IG5hbWVkIHVzaW5nIHRoZQorICAgPG9wdGlvbj4t Zjwvb3B0aW9uPi88b3B0aW9uPi0tZmlsZTwvb3B0aW9uPiwgd2hpY2ggaXMgcmVxdWlyZWQgaW4g dGhpcyBjYXNlLgorICA8L3BhcmE+CisKICAgPHBhcmE+CiAgIDxhcHBsaWNhdGlvbj5wZ19kdW1w YWxsPC9hcHBsaWNhdGlvbj4gbmVlZHMgdG8gY29ubmVjdCBzZXZlcmFsCiAgIHRpbWVzIHRvIHRo ZSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHNlcnZlciAob25jZSBwZXIK QEAgLTEzMSwxMCArMTM5LDg1IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgIDxw YXJhPgogICAgICAgICBTZW5kIG91dHB1dCB0byB0aGUgc3BlY2lmaWVkIGZpbGUuICBJZiB0aGlz IGlzIG9taXR0ZWQsIHRoZQogICAgICAgICBzdGFuZGFyZCBvdXRwdXQgaXMgdXNlZC4KKyAgICAg ICAgTm90ZTogVGhpcyBvcHRpb24gY2FuIG9ubHkgYmUgb21pdHRlZCB3aGVuIDxvcHRpb24+LS1m b3JtYXQ8L29wdGlvbj4gaXMgcGxhaW4KICAgICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVt PgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRl cm0+PG9wdGlvbj4tRiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Zm9ybWF0PC9yZXBs YWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZm9ybWF0PTxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9u PjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgU3BlY2lm eSB0aGUgZm9ybWF0IG9mIGR1bXAgZmlsZXMuICBJbiBwbGFpbiBmb3JtYXQsIGFsbCB0aGUgZHVt cCBkYXRhIGlzCisgICAgICAgIHNlbnQgaW4gYSBzaW5nbGUgdGV4dCBzdHJlYW0uIFRoaXMgaXMg dGhlIGRlZmF1bHQuCisKKyAgICAgICAgSW4gYWxsIG90aGVyIG1vZGVzLCA8YXBwbGljYXRpb24+ cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+IGZpcnN0IGNyZWF0ZXMgdHdvIGZpbGVzOgorICAgICAg ICA8ZmlsZW5hbWU+dG9jLmRhdC90b2MuZG1wL3RvYy50YXI8L2ZpbGVuYW1lPiBhbmQgPGZpbGVu YW1lPm1hcC5kYXQ8L2ZpbGVuYW1lPiwgaW4gdGhlIGRpcmVjdG9yeQorICAgICAgICBzcGVjaWZp ZWQgYnkgPG9wdGlvbj4tLWZpbGU8L29wdGlvbj4uCisgICAgICAgIFRoZSBmaXJzdCBmaWxlIGNv bnRhaW5zIGdsb2JhbCBkYXRhLCBzdWNoIGFzIHJvbGVzIGFuZCB0YWJsZXNwYWNlcy4gVGhlIHNl Y29uZAorICAgICAgICBjb250YWlucyBhIG1hcHBpbmcgYmV0d2VlbiBkYXRhYmFzZSBvaWRzIGFu ZCBuYW1lcy4gVGhlc2UgZmlsZXMgYXJlIHVzZWQgYnkKKyAgICAgICAgPGFwcGxpY2F0aW9uPnBn X3Jlc3RvcmU8L2FwcGxpY2F0aW9uPi4gRGF0YSBmb3IgaW5kaXZpZHVhbCBkYXRhYmFzZXMgaXMg cGxhY2VkIGluCisgICAgICAgIDxmaWxlbmFtZT5kYXRhYmFzZXM8L2ZpbGVuYW1lPiBzdWJkaXJl Y3RvcnksIG5hbWVkIHVzaW5nIHRoZSBkYXRhYmFzZSdzIDx0eXBlPm9pZDwvdHlwZT4uCisKKyAg ICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRl cm0+PGxpdGVyYWw+ZDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5k aXJlY3Rvcnk8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAg IDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgZGlyZWN0b3J5LWZvcm1hdCBhcmNoaXZlcyBmb3Ig ZWFjaCBkYXRhYmFzZSwKKyAgICAgICAgICAgc3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVz dG9yZS4gVGhlIGRpcmVjdG9yeQorICAgICAgICAgICB3aWxsIGhhdmUgZGF0YWJhc2UgPHR5cGU+ b2lkPC90eXBlPiBhcyBpdHMgbmFtZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xp c3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+cDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8 dGVybT48bGl0ZXJhbD5wbGFpbjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+ CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIHBsYWluLXRleHQgU1FMIHNj cmlwdCBmaWxlICh0aGUgZGVmYXVsdCkuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9s aXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRy eT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmM8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAg PHRlcm0+PGxpdGVyYWw+Y3VzdG9tPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRl bT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgY3VzdG9tLWZvcm1hdCBh cmNoaXZlIGZvciBlYWNoIGRhdGFiYXNlLAorICAgICAgICAgICBzdWl0YWJsZSBmb3IgaW5wdXQg aW50byBwZ19yZXN0b3JlLiBUaGUgYXJjaGl2ZQorICAgICAgICAgICB3aWxsIGJlIG5hbWVkIDxm aWxlbmFtZT5kYm9pZC5kbXA8L2ZpbGVuYW1lPiB3aGVyZSA8dHlwZT5kYm9pZDwvdHlwZT4gaXMg dGhlCisgICAgICAgICAgIDx0eXBlPm9pZDwvdHlwZT4gb2YgdGhlIGRhdGFiYXNlLgorICAgICAg ICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5 PgorCisgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dDwv bGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD50YXI8L2xpdGVyYWw+PC90 ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBP dXRwdXQgYSB0YXItZm9ybWF0IGFyY2hpdmUgZm9yIGVhY2ggZGF0YWJhc2UsCisgICAgICAgICAg IHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRoZSBhcmNoaXZlCisgICAgICAg ICAgIHdpbGwgYmUgbmFtZWQgPGZpbGVuYW1lPmRib2lkLnRhcjwvZmlsZW5hbWU+IHdoZXJlIDx0 eXBlPmRib2lkPC90eXBlPiBpcyB0aGUKKyAgICAgICAgICAgPHR5cGU+b2lkPC90eXBlPiBvZiB0 aGUgZGF0YWJhc2UuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAg ICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisKKyAgICAg ICBOb3RlOiBzZWUgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBmb3IgZGV0YWlscworICAg ICAgIG9mIGhvdyB0aGUgdmFyaW91cyBub24gcGxhaW4gdGV4dCBhcmNoaXZlcyB3b3JrLgorCisg ICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5Pgor CiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1nPC9vcHRpb24+PC90 ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMtb25seTwvb3B0aW9uPjwvdGVybT4K QEAgLTkzNyw5ICsxMDIwLDEzIEBAIGV4Y2x1ZGUgZGF0YWJhc2UgPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPlBBVFRFUk48L3JlcGxhY2VhYmxlPgogICA8dGl0bGU+RXhhbXBsZXM8L3Rp dGxlPgogICA8cGFyYT4KICAgIFRvIGR1bXAgYWxsIGRhdGFiYXNlczoKLQorICAgSWYgZm9ybWF0 IGlzIGdpdmVuLCB0aGVuIGR1bXAgd2lsbCBiZSBiYXNlZCBvbiBmb3JtYXQsIGRlZmF1bHQgcGxh aW4uCiA8c2NyZWVuPgogPHByb21wdD4kPC9wcm9tcHQ+IDx1c2VyaW5wdXQ+cGdfZHVtcGFsbCAm Z3Q7IGRiLm91dDwvdXNlcmlucHV0PgorPC9zY3JlZW4+CisKKzxzY3JlZW4+Cis8cHJvbXB0PiQ8 L3Byb21wdD4gPHVzZXJpbnB1dD5wZ19kdW1wYWxsIC0tZm9ybWF0PWQvYS9jL3AgLWYgZGIub3V0 PC91c2VyaW5wdXQ+CiA8L3NjcmVlbj4KICAgPC9wYXJhPgogCkBAIC05NTYsNiArMTA0MywxNSBA QCBleGNsdWRlIGRhdGFiYXNlIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5QQVRURVJO PC9yZXBsYWNlYWJsZT4KICAgIHRoZSBzY3JpcHQgd2lsbCBhdHRlbXB0IHRvIGRyb3Agb3RoZXIg ZGF0YWJhc2VzIGltbWVkaWF0ZWx5LCBhbmQgdGhhdAogICAgd2lsbCBmYWlsIGZvciB0aGUgZGF0 YWJhc2UgeW91IGFyZSBjb25uZWN0ZWQgdG8uCiAgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgICBJ ZiBkdW1wIHdhcyB0YWtlbiBpbiBub24tdGV4dCBmb3JtYXQsIHRoZW4gdXNlIHBnX3Jlc3RvcmUg dG8gcmVzdG9yZSBhbGwgZGF0YWJhc2VzLgorPHNjcmVlbj4KKzxwcm9tcHQ+JDwvcHJvbXB0PiA8 dXNlcmlucHV0PnBnX3Jlc3RvcmUgZGIub3V0IC1kIHBvc3RncmVzIC1DPC91c2VyaW5wdXQ+Cis8 L3NjcmVlbj4KKyAgIFRoaXMgd2lsbCByZXN0b3JlIGFsbCB0aGUgZGF0YWJhc2VzLiBJZiB1c2Vy IGRvbid0IHdhbnQgdG8gcmVzdG9yZSBzb21lIGRhdGFiYXNlcywgdGhlbiB1c2UKKyAgIC0tZXhj bHVkZS1wYXR0ZXJuIHRvIHNraXAgdGhvc2UuCis8L3BhcmE+CiAgPC9yZWZzZWN0MT4KIAogIDxy ZWZzZWN0MT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKaW5kZXggYTQ2OGEzODM2MWEuLjc0OTdi NTI3YWU2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbApAQCAtMTgsOCArMTgsOSBAQCBQb3N0 Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgPHJlZm5hbWU+cGdfcmVzdG9yZTwvcmVmbmFtZT4KIAog ICA8cmVmcHVycG9zZT4KLSAgIHJlc3RvcmUgYSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJv ZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20gYW4KLSAgIGFyY2hpdmUgZmlsZSBjcmVhdGVkIGJ5IDxh cHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4KKyAgIHJlc3RvcmUgPHByb2R1Y3RuYW1l PlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZXMgZnJvbSBhcmNoaXZlcworICAgY3Jl YXRlZCBieSA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+IG9yCisgICA8YXBwbGlj YXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+CiAgIDwvcmVmcHVycG9zZT4KICA8L3JlZm5h bWVkaXY+CiAKQEAgLTM4LDEzICszOSwxNCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KIAog ICA8cGFyYT4KICAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gaXMgYSB1 dGlsaXR5IGZvciByZXN0b3JpbmcgYQotICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1 Y3RuYW1lPiBkYXRhYmFzZSBmcm9tIGFuIGFyY2hpdmUKLSAgIGNyZWF0ZWQgYnkgPHhyZWYgbGlu a2VuZD0iYXBwLXBnZHVtcCIvPiBpbiBvbmUgb2YgdGhlIG5vbi1wbGFpbi10ZXh0CisgICA8cHJv ZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIG9yIGNsdXN0ZXIgZnJv bSBhbiBhcmNoaXZlCisgICBjcmVhdGVkIGJ5IDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4g b3IKKyAgIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZy1kdW1wYWxsIi8+IGluIG9uZSBvZiB0aGUgbm9u LXBsYWluLXRleHQKICAgIGZvcm1hdHMuICBJdCB3aWxsIGlzc3VlIHRoZSBjb21tYW5kcyBuZWNl c3NhcnkgdG8gcmVjb25zdHJ1Y3QgdGhlCi0gICBkYXRhYmFzZSB0byB0aGUgc3RhdGUgaXQgd2Fz IGluIGF0IHRoZSB0aW1lIGl0IHdhcyBzYXZlZC4gIFRoZQotICAgYXJjaGl2ZSBmaWxlcyBhbHNv IGFsbG93IDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gdG8KKyAgIGRhdGFi YXNlIG9yIGNsdXN0ZXIgdG8gdGhlIHN0YXRlIGl0IHdhcyBpbiBhdCB0aGUgdGltZSBpdCB3YXMg c2F2ZWQuIFRoZQorICAgYXJjaGl2ZXMgYWxzbyBhbGxvdyA8YXBwbGljYXRpb24+cGdfcmVzdG9y ZTwvYXBwbGljYXRpb24+IHRvCiAgICBiZSBzZWxlY3RpdmUgYWJvdXQgd2hhdCBpcyByZXN0b3Jl ZCwgb3IgZXZlbiB0byByZW9yZGVyIHRoZSBpdGVtcwotICAgcHJpb3IgdG8gYmVpbmcgcmVzdG9y ZWQuIFRoZSBhcmNoaXZlIGZpbGVzIGFyZSBkZXNpZ25lZCB0byBiZQorICAgcHJpb3IgdG8gYmVp bmcgcmVzdG9yZWQuIFRoZSBhcmNoaXZlIGZvcm1hdHMgYXJlIGRlc2lnbmVkIHRvIGJlCiAgICBw b3J0YWJsZSBhY3Jvc3MgYXJjaGl0ZWN0dXJlcy4KICAgPC9wYXJhPgogCkBAIC01MiwxMCArNTQs MTcgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICA8YXBwbGljYXRpb24+cGdfcmVzdG9y ZTwvYXBwbGljYXRpb24+IGNhbiBvcGVyYXRlIGluIHR3byBtb2Rlcy4KICAgIElmIGEgZGF0YWJh c2UgbmFtZSBpcyBzcGVjaWZpZWQsIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlv bj4KICAgIGNvbm5lY3RzIHRvIHRoYXQgZGF0YWJhc2UgYW5kIHJlc3RvcmVzIGFyY2hpdmUgY29u dGVudHMgZGlyZWN0bHkgaW50bwotICAgdGhlIGRhdGFiYXNlLiAgT3RoZXJ3aXNlLCBhIHNjcmlw dCBjb250YWluaW5nIHRoZSBTUUwKLSAgIGNvbW1hbmRzIG5lY2Vzc2FyeSB0byByZWJ1aWxkIHRo ZSBkYXRhYmFzZSBpcyBjcmVhdGVkIGFuZCB3cml0dGVuCisgICB0aGUgZGF0YWJhc2UuCisgICBX aGVuIHJlc3RvcmluZyBmcm9tIGEgZHVtcCBtYWRlIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxs PC9hcHBsaWNhdGlvbj4sCisgICBlYWNoIGRhdGFiYXNlIHdpbGwgYmUgY3JlYXRlZCBhbmQgdGhl biB0aGUgcmVzdG9yYXRpb24gd2lsbCBiZSBydW4gaW4gdGhhdAorICAgZGF0YWJhc2UuCisKKyAg IE90aGVyd2lzZSwgd2hlbiBhIGRhdGFiYXNlIG5hbWUgaXMgbm90IHNwZWNpZmllZCwgYSBzY3Jp cHQgY29udGFpbmluZyB0aGUgU1FMCisgICBjb21tYW5kcyBuZWNlc3NhcnkgdG8gcmVidWlsZCB0 aGUgZGF0YWJhc2Ugb3IgY2x1c3RlciBpcyBjcmVhdGVkIGFuZCB3cml0dGVuCiAgICB0byBhIGZp bGUgb3Igc3RhbmRhcmQgb3V0cHV0LiAgVGhpcyBzY3JpcHQgb3V0cHV0IGlzIGVxdWl2YWxlbnQg dG8KLSAgIHRoZSBwbGFpbiB0ZXh0IG91dHB1dCBmb3JtYXQgb2YgPGFwcGxpY2F0aW9uPnBnX2R1 bXA8L2FwcGxpY2F0aW9uPi4KKyAgIHRoZSBwbGFpbiB0ZXh0IG91dHB1dCBmb3JtYXQgb2YgPGFw cGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPiBvcgorICAgPGFwcGxpY2F0aW9uPnBnX2R1 bXBhbGw8L2FwcGxpY2F0aW9uPi4KKwogICAgU29tZSBvZiB0aGUgb3B0aW9ucyBjb250cm9sbGlu ZyB0aGUgb3V0cHV0IGFyZSB0aGVyZWZvcmUgYW5hbG9nb3VzIHRvCiAgICA8YXBwbGljYXRpb24+ cGdfZHVtcDwvYXBwbGljYXRpb24+IG9wdGlvbnMuCiAgIDwvcGFyYT4KQEAgLTE1Miw2ICsxNjEs OCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICAgY29tbWFuZHMgdGhhdCBtZW50 aW9uIHRoaXMgZGF0YWJhc2UuCiAgICAgICAgIEFjY2VzcyBwcml2aWxlZ2VzIGZvciB0aGUgZGF0 YWJhc2UgaXRzZWxmIGFyZSBhbHNvIHJlc3RvcmVkLAogICAgICAgICB1bmxlc3MgPG9wdGlvbj4t LW5vLWFjbDwvb3B0aW9uPiBpcyBzcGVjaWZpZWQuCisgICAgICAgIDxvcHRpb24+LS1jcmVhdGU8 L29wdGlvbj4gaXMgcmVxdWlyZWQgd2hlbiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzCisg ICAgICAgIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxs PC9hcHBsaWNhdGlvbj4uCiAgICAgICAgPC9wYXJhPgogCiAgICAgICAgPHBhcmE+CkBAIC0yNDcs NiArMjU4LDE5IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgPC9saXN0aXRlbT4K ICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJt PjxvcHRpb24+LWc8L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZ2xvYmFs cy1vbmx5PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgor ICAgICAgICBSZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVjdHMgKHJvbGVzIGFuZCB0YWJsZXNwYWNl cyksIG5vIGRhdGFiYXNlcy4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAg IFRoaXMgb3B0aW9uIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiByZXN0b3JpbmcgZnJvbSBhbiBhcmNo aXZlIG1hZGUgdXNpbmcgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4KKyAg ICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwog ICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tSSA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+aW5kZXg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KICAg ICAgIDx0ZXJtPjxvcHRpb24+LS1pbmRleD08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ aW5kZXg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KQEAgLTU5MSw2ICs2MTUsMjggQEAg UG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxp c3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWV4 Y2x1ZGUtZGF0YWJhc2U9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3Jl cGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFy YT4KKyAgICAgICAgRG8gbm90IHJlc3RvcmUgZGF0YWJhc2VzIHdob3NlIG5hbWUgbWF0Y2hlcwor ICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFi bGU+LgorICAgICAgICBNdWx0aXBsZSBwYXR0ZXJucyBjYW4gYmUgZXhjbHVkZWQgYnkgd3JpdGlu ZyBtdWx0aXBsZQorICAgICAgICA8b3B0aW9uPi0tZXhjbHVkZS1kYXRhYmFzZTwvb3B0aW9uPiBz d2l0Y2hlcy4gIFRoZQorICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0 dGVybjwvcmVwbGFjZWFibGU+IHBhcmFtZXRlciBpcworICAgICAgICBpbnRlcnByZXRlZCBhcyBh IHBhdHRlcm4gYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzIHVzZWQgYnkKKyAgICAgICAgPGFw cGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPidzIDxsaXRlcmFsPlxkPC9saXRlcmFsPgorICAg ICAgICBjb21tYW5kcyAoc2VlIDx4cmVmIGxpbmtlbmQ9ImFwcC1wc3FsLXBhdHRlcm5zIi8+KSwK KyAgICAgICAgc28gbXVsdGlwbGUgZGF0YWJhc2VzIGNhbiBhbHNvIGJlIGV4Y2x1ZGVkIGJ5IHdy aXRpbmcgd2lsZGNhcmQKKyAgICAgICAgY2hhcmFjdGVycyBpbiB0aGUgcGF0dGVybi4gIFdoZW4g dXNpbmcgd2lsZGNhcmRzLCBiZSBjYXJlZnVsIHRvCisgICAgICAgIHF1b3RlIHRoZSBwYXR0ZXJu IGlmIG5lZWRlZCB0byBwcmV2ZW50IHNoZWxsIHdpbGRjYXJkIGV4cGFuc2lvbi4KKyAgICAgICA8 L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgb3B0aW9uIGlzIG9ubHkgcmVsZXZh bnQgd2hlbiByZXN0b3JpbmcgZnJvbSBhbiBhcmNoaXZlIG1hZGUgdXNpbmcgPGFwcGxpY2F0aW9u PnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3Rp dGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAg PHRlcm0+PG9wdGlvbj4tLWZpbHRlcj08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Zmls ZW5hbWU8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KICAgICAgIDxsaXN0aXRlbT4KZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYyBiL3NyYy9iaW4vcGdfZHVtcC9j b25uZWN0ZGIuYwppbmRleCBkNTVkNTNkYmVlYS4uZDNlOWUyNzAwM2UgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRi LmMKQEAgLTIyNSw3ICsyMjUsNyBAQCBDb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1l LCBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmluZywKIAkJZXhpdF9uaWNlbHkoMSk7CiAJfQog Ci0JUFFjbGVhcihleGVjdXRlUXVlcnkoY29ubiwgQUxXQVlTX1NFQ1VSRV9TRUFSQ0hfUEFUSF9T UUwpKTsKKwlQUWNsZWFyKGV4ZWN1dGVRdWVyeShjb25uLCBBTFdBWVNfU0VDVVJFX1NFQVJDSF9Q QVRIX1NRTCwgZmFsc2UpKTsKIAogCXJldHVybiBjb25uOwogfQpAQCAtMjc1LDcgKzI3NSw3IEBA IGNvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBjb25zdCBjaGFyICoqdmFs dWVzKQogICogUnVuIGEgcXVlcnksIHJldHVybiB0aGUgcmVzdWx0cywgZXhpdCBwcm9ncmFtIG9u IGZhaWx1cmUuCiAgKi8KIFBHcmVzdWx0ICoKLWV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNv bnN0IGNoYXIgKnF1ZXJ5KQorZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAq cXVlcnksIGJvb2wgaXNfYXJjaGl2ZSkKIHsKIAlQR3Jlc3VsdCAgICpyZXM7CiAKQEAgLTI4Nyw3 ICsyODcsOCBAQCBleGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSkK IAl7CiAJCXBnX2xvZ19lcnJvcigicXVlcnkgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNv bm4pKTsKIAkJcGdfbG9nX2Vycm9yX2RldGFpbCgiUXVlcnkgd2FzOiAlcyIsIHF1ZXJ5KTsKLQkJ UFFmaW5pc2goY29ubik7CisJCWlmICghaXNfYXJjaGl2ZSkKKwkJCVBRZmluaXNoKGNvbm4pOwog CQlleGl0X25pY2VseSgxKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb25u ZWN0ZGIuaCBiL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuaAppbmRleCA2YzFlMTk1NDc2OS4u MGI3NDFiNjhjYjEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuaAorKysg Yi9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmgKQEAgLTIyLDUgKzIyLDUgQEAgZXh0ZXJuIFBH Y29ubiAqQ29ubmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY29u bmVjdGlvbl9zdHJpbmcKIAkJCQkJCQkgICB0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wg ZmFpbF9vbl9lcnJvciwKIAkJCQkJCQkgICBjb25zdCBjaGFyICpwcm9nbmFtZSwgY29uc3QgY2hh ciAqKmNvbm5zdHIsIGludCAqc2VydmVyX3ZlcnNpb24sCiAJCQkJCQkJICAgY2hhciAqcGFzc3dv cmQsIGNoYXIgKm92ZXJyaWRlX2RibmFtZSk7Ci1leHRlcm4gUEdyZXN1bHQgKmV4ZWN1dGVRdWVy eShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKK2V4dGVybiBQR3Jlc3VsdCAqZXhl Y3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnksIGJvb2wgaXNfYXJjaGl2 ZSk7CiAjZW5kaWYJCQkJCQkJLyogQ09OTkVDVERCX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC9tZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCBm M2M2NjlmNDg0ZS4uM2UyMWFhZjU3ODAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNv bi5idWlsZAorKysgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTEwMyw2ICsxMDMs NyBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8wMDRfcGdfZHVtcF9wYXJhbGxlbC5wbCcsCiAgICAg ICAndC8wMDVfcGdfZHVtcF9maWx0ZXJmaWxlLnBsJywKICAgICAgICd0LzAwNl9wZ19kdW1wX2Nv bXByZXNzLnBsJywKKwkgICd0LzAwN19wZ19kdW1wYWxsLnBsJywKICAgICAgICd0LzAxMF9kdW1w X2Nvbm5zdHIucGwnLAogICAgIF0sCiAgIH0sCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv cGFyYWxsZWwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCmluZGV4IDA4NmFkY2RjNTAy Li41OTc0ZDY3MDZmZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKQEAgLTMzMyw2ICszMzMsMTYgQEAgb25fZXhp dF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAlvbl9leGl0X25pY2VseShhcmNoaXZlX2Ns b3NlX2Nvbm5lY3Rpb24sICZzaHV0ZG93bl9pbmZvKTsKIH0KIAorLyoKKyAqIFdoZW4gcGdfcmVz dG9yZSByZXN0b3JlcyBtdWx0aXBsZSBkYXRhYmFzZXMsIHRoZW4gdXBkYXRlIGFscmVhZHkgYWRk ZWQgZW50cnkKKyAqIGludG8gYXJyYXkgZm9yIGNsZWFudXAuCisgKi8KK3ZvaWQKK3JlcGxhY2Vf b25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCkKK3sKKwlzaHV0ZG93bl9pbmZvLkFI WCA9IEFIWDsKK30KKwogLyoKICAqIG9uX2V4aXRfbmljZWx5IGhhbmRsZXIgZm9yIHNodXR0aW5n IGRvd24gZGF0YWJhc2UgY29ubmVjdGlvbnMgYW5kCiAgKiB3b3JrZXIgcHJvY2Vzc2VzIGNsZWFu bHkuCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggYi9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwLmgKaW5kZXggZDkwNDFkYWQ3MjAuLmY2MzFkOTQ1NDcyIDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cC5oCkBAIC0zMTIsNyArMzEyLDcgQEAgZXh0ZXJuIHZvaWQgU2V0QXJjaGl2ZU9wdGlv bnMoQXJjaGl2ZSAqQUgsIER1bXBPcHRpb25zICpkb3B0LCBSZXN0b3JlT3B0aW9ucyAqcm8KIAog ZXh0ZXJuIHZvaWQgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpBSFgpOwog Ci1leHRlcm4gdm9pZCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpOworZXh0ZXJuIHZvaWQg UmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhLCBib29sIGdsb2Jh bHNfb25seSk7CiAKIC8qIE9wZW4gYW4gZXhpc3RpbmcgYXJjaGl2ZSAqLwogZXh0ZXJuIEFyY2hp dmUgKk9wZW5BcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0 IGZtdCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMg Yi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggYzg0YjAxN2YyMWIu LjViOGRkMjk1MDcwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC04Niw3 ICs4Niw3IEBAIHN0YXRpYyBpbnQJUmVzdG9yaW5nVG9EQihBcmNoaXZlSGFuZGxlICpBSCk7CiBz dGF0aWMgdm9pZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBk dW1wVGltZXN0YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2csIHRpbWVfdCB0 aW0pOwogc3RhdGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFy ICpmaWxlbmFtZSwKLQkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMpOworCQkJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJl c3Npb25fc3BlYywgYm9vbCBhcHBlbmRfZGF0YSk7CiBzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxl ICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIFJlc3RvcmVPdXRw dXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpOwog CkBAIC0zMzksOSArMzM5LDE0IEBAIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2 ZSAqQUhYKQogCQlTdHJpY3ROYW1lc0NoZWNrKHJvcHQpOwogfQogCi0vKiBQdWJsaWMgKi8KKy8q CisgKiBSZXN0b3JlQXJjaGl2ZQorICoKKyAqIElmIGFwcGVuZF9kYXRhIGlzIHNldCwgdGhlbiBh cHBlbmQgZGF0YSBpbnRvIGZpbGUgYXMgd2UgYXJlIHJlc3RvcmluZyBkdW1wCisgKiBvZiBtdWx0 aXBsZSBkYXRhYmFzZXMgd2hpY2ggd2FzIHRha2VuIGJ5IHBnX2R1bXBhbGwuCisgKi8KIHZvaWQK LVJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKK1Jlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFI WCwgYm9vbCBhcHBlbmRfZGF0YSwgYm9vbCBnbG9iYWxzX29ubHkpCiB7CiAJQXJjaGl2ZUhhbmRs ZSAqQUggPSAoQXJjaGl2ZUhhbmRsZSAqKSBBSFg7CiAJUmVzdG9yZU9wdGlvbnMgKnJvcHQgPSBB SC0+cHVibGljLnJvcHQ7CkBAIC00NTgsNyArNDYzLDcgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2 ZSAqQUhYKQogCSAqLwogCXNhdiA9IFNhdmVPdXRwdXQoQUgpOwogCWlmIChyb3B0LT5maWxlbmFt ZSB8fCByb3B0LT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSAhPSBQR19DT01QUkVTU0lPTl9O T05FKQotCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbl9z cGVjKTsKKwkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Npb25f c3BlYywgYXBwZW5kX2RhdGEpOwogCiAJYWhwcmludGYoQUgsICItLVxuLS0gUG9zdGdyZVNRTCBk YXRhYmFzZSBkdW1wXG4tLVxuXG4iKTsKIApAQCAtNzYxLDYgKzc2NiwxNSBAQCBSZXN0b3JlQXJj aGl2ZShBcmNoaXZlICpBSFgpCiAJCQlpZiAoKHRlLT5yZXFzICYgKFJFUV9TQ0hFTUEgfCBSRVFf REFUQSB8IFJFUV9TVEFUUykpID09IDApCiAJCQkJY29udGludWU7CQkvKiBpZ25vcmUgaWYgbm90 IHRvIGJlIGR1bXBlZCBhdCBhbGwgKi8KIAorCQkJLyogU2tpcCBEUk9QIERBVEFCQVNFIGlmIGds b2JhbHNfb25seS4gKi8KKwkJCWlmIChnbG9iYWxzX29ubHkgJiYgdGUgJiYgdGUtPnRhZyAmJiAo c3RyY21wKHRlLT50YWcsICJEUk9QX0RBVEFCQVNFIikgPT0gMCkpCisJCQkJY29udGludWU7CisK KwkJCS8qIFNraXAgZm9yIENPTk5FQ1QgbWV0YSBjb21tYW5kLiAqLworCQkJaWYgKCFyb3B0LT5m aWxlbmFtZSAmJiB0ZSAmJiB0ZS0+dGFnICYmCisJCQkJCShzdHJjbXAodGUtPnRhZywgIkNPTk5F Q1QiKSA9PSAwKSkKKwkJCQljb250aW51ZTsKKwogCQkJc3dpdGNoIChfdG9jRW50cnlSZXN0b3Jl UGFzcyh0ZSkpCiAJCQl7CiAJCQkJY2FzZSBSRVNUT1JFX1BBU1NfTUFJTjoKQEAgLTEzMTYsNyAr MTMzMCw3IEBAIFByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpCiAKIAlzYXYgPSBTYXZlT3V0 cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5hbWUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+Zmls ZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVjKTsKKwkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxl bmFtZSwgb3V0X2NvbXByZXNzaW9uX3NwZWMsIGZhbHNlKTsKIAogCWlmIChzdHJmdGltZShzdGFt cF9zdHIsIHNpemVvZihzdGFtcF9zdHIpLCBQR0RVTVBfU1RSRlRJTUVfRk1ULAogCQkJCSBsb2Nh bHRpbWUoJkFILT5jcmVhdGVEYXRlKSkgPT0gMCkKQEAgLTE2OTUsNyArMTcwOSw4IEBAIGFyY2hw cmludGYoQXJjaGl2ZSAqQUgsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCiAKIHN0YXRpYyB2b2lkCiBT ZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotCQkgIGNv bnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKKwkJICBjb25z dCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCisJCSAgYm9vbCBh cHBlbmRfZGF0YSkKIHsKIAlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAljb25zdCBjaGFyICpt b2RlOwpAQCAtMTcxNSw3ICsxNzMwLDcgQEAgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBj b25zdCBjaGFyICpmaWxlbmFtZSwKIAllbHNlCiAJCWZuID0gZmlsZW5vKHN0ZG91dCk7CiAKLQlp ZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCisJaWYgKGFwcGVuZF9kYXRhIHx8IEFILT5t b2RlID09IGFyY2hNb2RlQXBwZW5kKQogCQltb2RlID0gUEdfQklOQVJZX0E7CiAJZWxzZQogCQlt b2RlID0gUEdfQklOQVJZX1c7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2FyY2hpdmVyLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKaW5kZXgg MzI1YjUzZmM5YmQuLjM2NTA3M2IzZWFlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX2FyY2hpdmVyLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZl ci5oCkBAIC0zOTQsNiArMzk0LDcgQEAgc3RydWN0IF90b2NFbnRyeQogCiBleHRlcm4gaW50CXBh cmFsbGVsX3Jlc3RvcmUoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSk7CiBleHRlcm4g dm9pZCBvbl9leGl0X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIHJl cGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCk7CiAKIGV4dGVybiB2b2lk IHdhcm5fb3JfZXhpdF9ob3JyaWJseShBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZm10 LC4uLikgcGdfYXR0cmlidXRlX3ByaW50ZigyLCAzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF90YXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMK aW5kZXggYjViYTNiNDZkZDkuLjgxOGI4MGE5MzY5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX3Rhci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMK QEAgLTgyNiw3ICs4MjYsNyBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlz YXZWZXJib3NlID0gQUgtPnB1YmxpYy52ZXJib3NlOwogCQlBSC0+cHVibGljLnZlcmJvc2UgPSAw OwogCi0JCVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFIKTsKKwkJUmVzdG9yZUFyY2hpdmUo KEFyY2hpdmUgKikgQUgsIGZhbHNlLCBmYWxzZSk7CiAKIAkJU2V0QXJjaGl2ZU9wdGlvbnMoKEFy Y2hpdmUgKikgQUgsIHNhdkRvcHQsIHNhdlJvcHQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCBhMDA5MThi YWNiNC4uMTNlMTc2NGVjNzAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtMTI5Miw3ICsxMjkyLDcgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJICogcmlnaHQgbm93LgogCSAqLwogCWlmIChwbGFp blRleHQpCi0JCVJlc3RvcmVBcmNoaXZlKGZvdXQpOworCQlSZXN0b3JlQXJjaGl2ZShmb3V0LCBm YWxzZSwgZmFsc2UpOwogCiAJQ2xvc2VBcmNoaXZlKGZvdXQpOwogCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwpp bmRleCBiYjQ1MWMxYmFlMS4uNzI1MzY1ZjY1MTkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wYWxsLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwpAQCAtMzAs NiArMzAsNyBAQAogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUg ImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCisjaW5jbHVkZSAicGdfYmFja3Vw X2FyY2hpdmVyLmgiCiAKIC8qIHZlcnNpb24gc3RyaW5nIHdlIGV4cGVjdCBiYWNrIGZyb20gcGdf ZHVtcCAqLwogI2RlZmluZSBQR0RVTVBfVkVSU0lPTlNUUiAicGdfZHVtcCAoUG9zdGdyZVNRTCkg IiBQR19WRVJTSU9OICJcbiIKQEAgLTY1LDkgKzY2LDkgQEAgc3RhdGljIHZvaWQgZHJvcFRhYmxl c3BhY2VzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVGFibGVzcGFjZXMoUEdjb25u ICpjb25uKTsKIHN0YXRpYyB2b2lkIGRyb3BEQnMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lk IGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpOwotc3Rh dGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pOworc3RhdGljIHZvaWQgZHVtcERh dGFiYXNlcyhQR2Nvbm4gKmNvbm4sIGJvb2wgb3V0cHV0X2NsZWFuKTsKIHN0YXRpYyB2b2lkIGR1 bXBUaW1lc3RhbXAoY29uc3QgY2hhciAqbXNnKTsKLXN0YXRpYyBpbnQJcnVuUGdEdW1wKGNvbnN0 IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpOworc3RhdGljIGludCBydW5Q Z0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywgY2hhciAq ZGJmaWxlKTsKIHN0YXRpYyB2b2lkIGJ1aWxkU2hTZWNMYWJlbHMoUEdjb25uICpjb25uLAogCQkJ CQkJCSBjb25zdCBjaGFyICpjYXRhbG9nX25hbWUsIE9pZCBvYmplY3RJZCwKIAkJCQkJCQkgY29u c3QgY2hhciAqb2JqdHlwZSwgY29uc3QgY2hhciAqb2JqbmFtZSwKQEAgLTc2LDExICs3NywxMyBA QCBzdGF0aWMgdm9pZCBleGVjdXRlQ29tbWFuZChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1 ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLCBT aW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJucywKIAkJCQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCAq bmFtZXMpOwogc3RhdGljIHZvaWQgcmVhZF9kdW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmls ZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4pOworc3RhdGljIEFyY2hpdmVGb3JtYXQg cGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCk7CitzdGF0aWMgaW50IGNyZWF0ZUR1 bXBJZCh2b2lkKTsKK3N0YXRpYyB2b2lkIGNyZWF0ZU9uZUFyY2hpdmVFbnRyeShjb25zdCBjaGFy ICpxdWVyeSwgY29uc3QgY2hhciAqdGFnKTsKIAogc3RhdGljIGNoYXIgcGdfZHVtcF9iaW5bTUFY UEdQQVRIXTsKIHN0YXRpYyBQUUV4cEJ1ZmZlciBwZ2R1bXBvcHRzOwogc3RhdGljIGNvbnN0IGNo YXIgKmNvbm5zdHIgPSAiIjsKLXN0YXRpYyBib29sIG91dHB1dF9jbGVhbiA9IGZhbHNlOwogc3Rh dGljIGJvb2wgc2tpcF9hY2xzID0gZmFsc2U7CiBzdGF0aWMgYm9vbCB2ZXJib3NlID0gZmFsc2U7 CiBzdGF0aWMgYm9vbCBkb3N5bmMgPSB0cnVlOwpAQCAtMTIzLDYgKzEyNiwxMCBAQCBzdGF0aWMg U2ltcGxlU3RyaW5nTGlzdCBkYXRhYmFzZV9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9 Owogc3RhdGljIFNpbXBsZVN0cmluZ0xpc3QgZGF0YWJhc2VfZXhjbHVkZV9uYW1lcyA9IHtOVUxM LCBOVUxMfTsKIAogc3RhdGljIGNoYXIgKnJlc3RyaWN0X2tleTsKK3N0YXRpYyBBcmNoaXZlICpm b3V0ID0gTlVMTDsKK3N0YXRpYyBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWMgPSB7MH07CitzdGF0aWMgaW50IGR1bXBJZFZhbCA9IDA7CitzdGF0aWMgQXJjaGl2ZUZv cm1hdCBhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOwogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKQEAgLTE0OCw2ICsxNTUsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pCiAJCXsicGFzc3dvcmQiLCBub19hcmd1bWVudCwgTlVMTCwgJ1cnfSwKIAkJeyJuby1wcml2 aWxlZ2VzIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCiAJCXsibm8tYWNsIiwgbm9fYXJndW1l bnQsIE5VTEwsICd4J30sCisJCXsiZm9ybWF0IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdG J30sCiAKIAkJLyoKIAkJICogdGhlIGZvbGxvd2luZyBvcHRpb25zIGRvbid0IGhhdmUgYW4gZXF1 aXZhbGVudCBzaG9ydCBvcHRpb24gbGV0dGVyCkBAIC0xOTcsNiArMjA1LDcgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQogCWNoYXIJICAgKnBnZGIgPSBOVUxMOwogCWNoYXIJICAgKnVz ZV9yb2xlID0gTlVMTDsKIAljb25zdCBjaGFyICpkdW1wZW5jb2RpbmcgPSBOVUxMOworCWNvbnN0 IGNoYXIgKmZvcm1hdF9uYW1lID0gInAiOwogCXRyaXZhbHVlCXByb21wdF9wYXNzd29yZCA9IFRS SV9ERUZBVUxUOwogCWJvb2wJCWRhdGFfb25seSA9IGZhbHNlOwogCWJvb2wJCWdsb2JhbHNfb25s eSA9IGZhbHNlOwpAQCAtMjA4LDYgKzIxNyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAlpbnQJCQljLAogCQkJCXJldDsKIAlpbnQJCQlvcHRpbmRleDsKKwlEdW1wT3B0aW9ucyBk b3B0OwogCiAJcGdfbG9nZ2luZ19pbml0KGFyZ3ZbMF0pOwogCXBnX2xvZ2dpbmdfc2V0X2xldmVs KFBHX0xPR19XQVJOSU5HKTsKQEAgLTI0Niw3ICsyNTYsOSBAQCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCiAKIAlwZ2R1bXBvcHRzID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAotCXdoaWxl ICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY2Q6RTpmOmdoOmw6T3A6cnNTOnRVOnZ3 V3giLCBsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQorCUluaXREdW1wT3B0aW9ucygm ZG9wdCk7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNkOkU6ZjpG OmdoOmw6T3A6cnNTOnRVOnZ3V3giLCBsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQog CXsKIAkJc3dpdGNoIChjKQogCQl7CkBAIC0yNTYsNyArMjY4LDcgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQogCQkJCWJyZWFrOwogCiAJCQljYXNlICdjJzoKLQkJCQlvdXRwdXRfY2xl YW4gPSB0cnVlOworCQkJCWRvcHQub3V0cHV0Q2xlYW4gPSB0cnVlOwogCQkJCWJyZWFrOwogCiAJ CQljYXNlICdkJzoKQEAgLTI3NCw3ICsyODYsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pCiAJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0cywgIiAtZiAiKTsKIAkJCQlh cHBlbmRTaGVsbFN0cmluZyhwZ2R1bXBvcHRzLCBmaWxlbmFtZSk7CiAJCQkJYnJlYWs7Ci0KKwkJ CWNhc2UgJ0YnOgorCQkJCWZvcm1hdF9uYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJYnJl YWs7CiAJCQljYXNlICdnJzoKIAkJCQlnbG9iYWxzX29ubHkgPSB0cnVlOwogCQkJCWJyZWFrOwpA QCAtMzE0LDYgKzMyOCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCQkJY2Fz ZSAnVSc6CiAJCQkJcGd1c2VyID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJZG9wdC5jcGFyYW1z LnVzZXJuYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ3Yn OgpAQCAtNDE5LDcgKzQzNCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJZXhp dF9uaWNlbHkoMSk7CiAJfQogCi0JaWYgKGlmX2V4aXN0cyAmJiAhb3V0cHV0X2NsZWFuKQorCWlm IChpZl9leGlzdHMgJiYgIWRvcHQub3V0cHV0Q2xlYW4pCiAJCXBnX2ZhdGFsKCJvcHRpb24gLS1p Zi1leGlzdHMgcmVxdWlyZXMgb3B0aW9uIC1jLy0tY2xlYW4iKTsKIAogCWlmIChyb2xlc19vbmx5 ICYmIHRhYmxlc3BhY2VzX29ubHkpCkBAIC00MjksNiArNDQ0LDI1IEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkKIAkJZXhpdF9uaWNlbHkoMSk7CiAJfQogCisJLyogR2V0IGZvcm1hdCBm b3IgZHVtcC4gKi8KKwlhcmNoRHVtcEZvcm1hdCA9IHBhcnNlRHVtcEZvcm1hdChmb3JtYXRfbmFt ZSk7CisKKwkvKgorCSAqIElmIGEgbm9uLXBsYWluIGZvcm1hdCBpcyBzcGVjaWZpZWQsIGEgZmls ZSBuYW1lIGlzIGFsc28gcmVxdWlyZWQgYXMgdGhlCisJICogcGF0aCB0byB0aGUgbWFpbiBkaXJl Y3RvcnkuCisJICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsICYmCisJCSghZmls ZW5hbWUgfHwgc3RyY21wKGZpbGVuYW1lLCAiIikgPT0gMCkpCisJeworCQlwZ19sb2dfZXJyb3Io Im9wdGlvbiAtRi8tLWZvcm1hdD1kfGN8dCByZXF1aXJlcyBvcHRpb24gLWYvLS1maWxlIik7CisJ CXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlv bi4iLCBwcm9nbmFtZSk7CisJCWV4aXRfbmljZWx5KDEpOworCX0KKworCS8qIHJlc3RyaWN0LWtl eSBpcyBvbmx5IHN1cHBvcnRlZCB3aXRoIC0tZm9ybWF0PXBsYWluICovCisJaWYgKGFyY2hEdW1w Rm9ybWF0ICE9IGFyY2hOdWxsICYmIHJlc3RyaWN0X2tleSkKKwkJcGdfZmF0YWwoIm9wdGlvbiAt LXJlc3RyaWN0LWtleSBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1mb3JtYXQ9cGxhaW4iKTsKKwog CS8qCiAJICogSWYgcGFzc3dvcmQgdmFsdWVzIGFyZSBub3QgcmVxdWlyZWQgaW4gdGhlIGR1bXAs IHN3aXRjaCB0byB1c2luZwogCSAqIHBnX3JvbGVzIHdoaWNoIGlzIGVxdWFsbHkgdXNlZnVsLCBq dXN0IG1vcmUgbGlrZWx5IHRvIGhhdmUgdW5yZXN0cmljdGVkCkBAIC00ODksNiArNTIzLDI3IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpZiAoc2VxdWVuY2VfZGF0YSkKIAkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0cywgIiAtLXNlcXVlbmNlLWRhdGEiKTsKIAorCS8q CisJICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rk b3V0LiAgSWYgcmVxdWlyZWQsCisJICogdGhlbiBjcmVhdGUgbmV3IGRpcmVjdG9yeS4KKwkgKi8K KwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQlBc3NlcnQoZmlsZW5hbWUp OworCisJCS8qIENyZWF0ZSBuZXcgZGlyZWN0b3J5IG9yIGFjY2VwdCB0aGUgZW1wdHkgZXhpc3Rp bmcgZGlyZWN0b3J5LiAqLworCQljcmVhdGVfb3Jfb3Blbl9kaXIoZmlsZW5hbWUpOworCX0KKwll bHNlIGlmIChmaWxlbmFtZSkKKwl7CisJCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllf Vyk7CisJCWlmICghT1BGKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxl IFwiJXNcIjogJW0iLAorCQkJCQkgZmlsZW5hbWUpOworCX0KKwllbHNlCisJCU9QRiA9IHN0ZG91 dDsKKwogCS8qCiAJICogSWYgeW91IGRvbid0IHByb3ZpZGUgYSByZXN0cmljdCBrZXksIG9uZSB3 aWxsIGJlIGFwcG9pbnRlZCBmb3IgeW91LgogCSAqLwpAQCAtNTM4LDE5ICs1OTMsNiBAQCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhjb25uLCAm ZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucywKIAkJCQkJCSAgICZkYXRhYmFzZV9leGNsdWRlX25h bWVzKTsKIAotCS8qCi0JICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVy d2lzZSB1c2Ugc3Rkb3V0Ci0JICovCi0JaWYgKGZpbGVuYW1lKQotCXsKLQkJT1BGID0gZm9wZW4o ZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJaWYgKCFPUEYpCi0JCQlwZ19mYXRhbCgiY291bGQg bm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCSBmaWxlbmFtZSk7Ci0JfQot CWVsc2UKLQkJT1BGID0gc3Rkb3V0OwotCiAJLyoKIAkgKiBTZXQgdGhlIGNsaWVudCBlbmNvZGlu ZyBpZiByZXF1ZXN0ZWQuCiAJICovCkBAIC01ODUsMzcgKzYyNywxMTAgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCWlmIChxdW90ZV9hbGxfaWRlbnRpZmllcnMpCiAJCWV4ZWN1dGVD b21tYW5kKGNvbm4sICJTRVQgcXVvdGVfYWxsX2lkZW50aWZpZXJzID0gdHJ1ZSIpOwogCi0JZnBy aW50ZihPUEYsICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0tXG5c biIpOwotCWlmICh2ZXJib3NlKQorCWlmICh2ZXJib3NlICYmIGFyY2hEdW1wRm9ybWF0ID09IGFy Y2hOdWxsKQogCQlkdW1wVGltZXN0YW1wKCJTdGFydGVkIG9uIik7CiAKLQkvKgotCSAqIEVudGVy IHJlc3RyaWN0ZWQgbW9kZSB0byBibG9jayBhbnkgdW5leHBlY3RlZCBwc3FsIG1ldGEtY29tbWFu ZHMuICBBCi0JICogbWFsaWNpb3VzIHNvdXJjZSBtaWdodCB0cnkgdG8gaW5qZWN0IGEgdmFyaWV0 eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCi0JICogcmVzcG9uc2VzIHRvIHF1ZXJpZXMuICBXaGlsZSB3 ZSBjYW5ub3QgcHJldmVudCBzdWNoIHNvdXJjZXMgZnJvbQotCSAqIGFmZmVjdGluZyB0aGUgZGVz dGluYXRpb24gYXQgcmVzdG9yZSB0aW1lLCB3ZSBjYW4gYmxvY2sgcHNxbAotCSAqIG1ldGEtY29t bWFuZHMgc28gdGhhdCB0aGUgY2xpZW50IG1hY2hpbmUgdGhhdCBydW5zIHBzcWwgd2l0aCB0aGUg ZHVtcAotCSAqIG91dHB1dCByZW1haW5zIHVuYWZmZWN0ZWQuCi0JICovCi0JZnByaW50ZihPUEYs ICJcXHJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisJLyogY3JlYXRlIGEgYXJjaGl2 ZSBmaWxlIGZvciBnbG9iYWwgY29tbWFuZHMuICovCisJaWYgKGZpbGVuYW1lICYmIGFyY2hEdW1w Rm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJY2hhcglnbG9iYWxfcGF0aFtNQVhQR1BBVEhdOwog Ci0JLyoKLQkgKiBXZSB1c2VkIHRvIGVtaXQgXGNvbm5lY3QgcG9zdGdyZXMgaGVyZSwgYnV0IHRo YXQgc2VydmVkIG5vIHB1cnBvc2UKLQkgKiBvdGhlciB0aGFuIHRvIGJyZWFrIHRoaW5ncyBmb3Ig aW5zdGFsbGF0aW9ucyB3aXRob3V0IGEgcG9zdGdyZXMKLQkgKiBkYXRhYmFzZS4gIEV2ZXJ5dGhp bmcgd2UncmUgcmVzdG9yaW5nIGhlcmUgaXMgYSBnbG9iYWwsIHNvIHdoaWNoZXZlcgotCSAqIGRh dGFiYXNlIHdlJ3JlIGNvbm5lY3RlZCB0byBhdCB0aGUgbW9tZW50IGlzIGZpbmUuCi0JICovCisJ CS8qIFNldCBmaWxlIHBhdGggZm9yIGdsb2JhbCBzcWwgY29tbWFuZHMuICovCisJCXNucHJpbnRm KGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcy90b2MuZ2xvIiwgZmlsZW5hbWUpOwogCi0JLyog UmVzdG9yZSB3aWxsIG5lZWQgdG8gd3JpdGUgdG8gdGhlIHRhcmdldCBjbHVzdGVyICovCi0JZnBy aW50ZihPUEYsICJTRVQgZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7XG5cbiIp OworCQkvKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSAqLworCQlmb3V0ID0gQ3JlYXRlQXJjaGl2ZShn bG9iYWxfcGF0aCwgYXJjaEN1c3RvbSwgY29tcHJlc3Npb25fc3BlYywKKwkJCQlkb3N5bmMsIGFy Y2hNb2RlV3JpdGUsIE5VTEwsIERBVEFfRElSX1NZTkNfTUVUSE9EX0ZTWU5DKTsKKworCQkvKiBN YWtlIGR1bXAgb3B0aW9ucyBhY2Nlc3NpYmxlIHJpZ2h0IGF3YXkgKi8KKwkJU2V0QXJjaGl2ZU9w dGlvbnMoZm91dCwgJmRvcHQsIE5VTEwpOworCQkoKEFyY2hpdmVIYW5kbGUqKWZvdXQpLT5jb25u ZWN0aW9uID0gY29ubjsKKwkJKChBcmNoaXZlSGFuZGxlKilmb3V0KS0+cHVibGljLm51bVdvcmtl cnMgPSAxOworCisJCS8qIFJlZ2lzdGVyIHRoZSBjbGVhbnVwIGhvb2sgKi8KKwkJb25fZXhpdF9j bG9zZV9hcmNoaXZlKGZvdXQpOworCisJCS8qIExldCB0aGUgYXJjaGl2ZXIga25vdyBob3cgbm9p c3kgdG8gYmUgKi8KKwkJZm91dC0+dmVyYm9zZSA9IHZlcmJvc2U7CisKKwkJLyoKKwkJICogV2Ug YWxsb3cgdGhlIHNlcnZlciB0byBiZSBiYWNrIHRvIDkuMiwgYW5kIHVwIHRvIGFueSBtaW5vciBy ZWxlYXNlIG9mCisJCSAqIG91ciBvd24gbWFqb3IgdmVyc2lvbi4gIChTZWUgYWxzbyB2ZXJzaW9u IGNoZWNrIGluIHBnX2R1bXBhbGwuYy4pCisJCSAqLworCQlmb3V0LT5taW5SZW1vdGVWZXJzaW9u ID0gOTAyMDA7CisJCWZvdXQtPm1heFJlbW90ZVZlcnNpb24gPSAoUEdfVkVSU0lPTl9OVU0gLyAx MDApICogMTAwICsgOTk7CisJCWZvdXQtPm51bVdvcmtlcnMgPSAxOwogCi0JLyogUmVwbGljYXRl IGVuY29kaW5nIGFuZCBzdGRfc3RyaW5ncyBpbiBvdXRwdXQgKi8KLQlmcHJpbnRmKE9QRiwgIlNF VCBjbGllbnRfZW5jb2RpbmcgPSAnJXMnO1xuIiwKLQkJCXBnX2VuY29kaW5nX3RvX2NoYXIoZW5j b2RpbmcpKTsKLQlmcHJpbnRmKE9QRiwgIlNFVCBzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3Mg PSAlcztcbiIsIHN0ZF9zdHJpbmdzKTsKLQlpZiAoc3RyY21wKHN0ZF9zdHJpbmdzLCAib2ZmIikg PT0gMCkKLQkJZnByaW50ZihPUEYsICJTRVQgZXNjYXBlX3N0cmluZ193YXJuaW5nID0gb2ZmO1xu Iik7Ci0JZnByaW50ZihPUEYsICJcbiIpOworCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4t LSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcFxuLS1cblxuIiwgIkNPTU1FTlQiKTsK KworCQkvKiBkZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRfb25seSA9IG9mZiAqLworCQl7CisJCQlQ UUV4cEJ1ZmZlciBxcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCQlwZ19sb2dfaW5mbygi c2F2aW5nIGRlZmF1bHRfdHJhbnNhY3Rpb25fcmVhZF9vbmx5ID0gb2ZmIik7CisJCQlhcHBlbmRQ UUV4cEJ1ZmZlcihxcnksICJTRVQgZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7 XG4iKTsKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShxcnktPmRhdGEsICJERUZBVUxUX1RSQU5T QUNUSU9OX1JFQURfT05MWSIpOworCQkJZGVzdHJveVBRRXhwQnVmZmVyKHFyeSk7CisJCX0KKwor CQkvKiBkdW1wRW5jb2Rpbmc6IHB1dCB0aGUgY29ycmVjdCBlbmNvZGluZyBpbnRvIHRoZSBhcmNo aXZlICovCisJCXsKKwkJCVBRRXhwQnVmZmVyIHFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJ CQljb25zdCBjaGFyICplbmNuYW1lID0gcGdfZW5jb2RpbmdfdG9fY2hhcihlbmNvZGluZyk7CisK KwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHFyeSwgIlNFVCBjbGllbnRfZW5jb2RpbmcgPSAiKTsK KwkJCWFwcGVuZFN0cmluZ0xpdGVyYWxBSChxcnksIGVuY25hbWUsIGZvdXQpOworCQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIocXJ5LCAiO1xuIik7CisKKwkJCXBnX2xvZ19pbmZvKCJzYXZpbmcgZW5j b2RpbmcgPSAlcyIsIGVuY25hbWUpOworCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0 YSwgIkVOQ09ESU5HIik7CisJCQlkZXN0cm95UFFFeHBCdWZmZXIocXJ5KTsKKwkJfQorCisJCS8q IGR1bXBTdGRTdHJpbmdzOiBwdXQgdGhlIGNvcnJlY3QgZXNjYXBlIHN0cmluZyBiZWhhdmlvciBp bnRvIHRoZSBhcmNoaXZlICovCisJCXsKKwkJCWNvbnN0IGNoYXIgKnN0ZHN0cmluZ3MgPSBzdGRf c3RyaW5ncyA/ICJvbiIgOiAib2ZmIjsKKwkJCVBRRXhwQnVmZmVyIHFyeSA9IGNyZWF0ZVBRRXhw QnVmZmVyKCk7CisKKwkJCXBnX2xvZ19pbmZvKCJzYXZpbmcgXCJzdGFuZGFyZF9jb25mb3JtaW5n X3N0cmluZ3MgPSAlc1wiIiwgc3Rkc3RyaW5ncyk7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxcnks ICJTRVQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzID0gJyVzJztcbiIsCisJCQkJCXN0ZHN0 cmluZ3MpOworCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIlNURFNUUklOR1Mi KTsKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOworCQl9CisJfQorCWVsc2UKKwl7CisJCWZw cmludGYoT1BGLCAiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBkdW1wXG4tLVxu XG4iKTsKKworCQkvKgorCQkgKiBFbnRlciByZXN0cmljdGVkIG1vZGUgdG8gYmxvY2sgYW55IHVu ZXhwZWN0ZWQgcHNxbCBtZXRhLWNvbW1hbmRzLiAgQQorCQkgKiBtYWxpY2lvdXMgc291cmNlIG1p Z2h0IHRyeSB0byBpbmplY3QgYSB2YXJpZXR5IG9mIHRoaW5ncyB2aWEgYm9ndXMKKwkJICogcmVz cG9uc2VzIHRvIHF1ZXJpZXMuICBXaGlsZSB3ZSBjYW5ub3QgcHJldmVudCBzdWNoIHNvdXJjZXMg ZnJvbQorCQkgKiBhZmZlY3RpbmcgdGhlIGRlc3RpbmF0aW9uIGF0IHJlc3RvcmUgdGltZSwgd2Ug Y2FuIGJsb2NrIHBzcWwKKwkJICogbWV0YS1jb21tYW5kcyBzbyB0aGF0IHRoZSBjbGllbnQgbWFj aGluZSB0aGF0IHJ1bnMgcHNxbCB3aXRoIHRoZSBkdW1wCisJCSAqIG91dHB1dCByZW1haW5zIHVu YWZmZWN0ZWQuCisJCSAqLworCQlmcHJpbnRmKE9QRiwgIlxccmVzdHJpY3QgJXNcblxuIiwgcmVz dHJpY3Rfa2V5KTsKKworCQkvKgorCQkgKiBXZSB1c2VkIHRvIGVtaXQgXGNvbm5lY3QgcG9zdGdy ZXMgaGVyZSwgYnV0IHRoYXQgc2VydmVkIG5vIHB1cnBvc2UKKwkJICogb3RoZXIgdGhhbiB0byBi cmVhayB0aGluZ3MgZm9yIGluc3RhbGxhdGlvbnMgd2l0aG91dCBhIHBvc3RncmVzCisJCSAqIGRh dGFiYXNlLiAgRXZlcnl0aGluZyB3ZSdyZSByZXN0b3JpbmcgaGVyZSBpcyBhIGdsb2JhbCwgc28g d2hpY2hldmVyCisJCSAqIGRhdGFiYXNlIHdlJ3JlIGNvbm5lY3RlZCB0byBhdCB0aGUgbW9tZW50 IGlzIGZpbmUuCisJCSAqLworCisJCS8qIFJlc3RvcmUgd2lsbCBuZWVkIHRvIHdyaXRlIHRvIHRo ZSB0YXJnZXQgY2x1c3RlciAqLworCQlmcHJpbnRmKE9QRiwgIlNFVCBkZWZhdWx0X3RyYW5zYWN0 aW9uX3JlYWRfb25seSA9IG9mZjtcblxuIik7CisKKwkJLyogUmVwbGljYXRlIGVuY29kaW5nIGFu ZCBzdGRfc3RyaW5ncyBpbiBvdXRwdXQgKi8KKwkJZnByaW50ZihPUEYsICJTRVQgY2xpZW50X2Vu Y29kaW5nID0gJyVzJztcbiIsCisJCQkJcGdfZW5jb2RpbmdfdG9fY2hhcihlbmNvZGluZykpOwor CQlmcHJpbnRmKE9QRiwgIlNFVCBzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgPSAlcztcbiIs IHN0ZF9zdHJpbmdzKTsKKwkJaWYgKHN0cmNtcChzdGRfc3RyaW5ncywgIm9mZiIpID09IDApCisJ CQlmcHJpbnRmKE9QRiwgIlNFVCBlc2NhcGVfc3RyaW5nX3dhcm5pbmcgPSBvZmY7XG4iKTsKKwkJ ZnByaW50ZihPUEYsICJcbiIpOworCX0KIAogCWlmICghZGF0YV9vbmx5ICYmICFzdGF0aXN0aWNz X29ubHkgJiYgIW5vX3NjaGVtYSkKIAl7CkBAIC02MjUsNyArNzQwLDcgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCQkgKiBhbmQgdGFibGVzcGFjZXMgbmV2ZXIgZGVwZW5kIG9uIGVh Y2ggb3RoZXIuICBSb2xlcyBjb3VsZCBoYXZlCiAJCSAqIGdyYW50cyB0byBlYWNoIG90aGVyLCBi dXQgRFJPUCBST0xFIHdpbGwgY2xlYW4gdGhvc2UgdXAgc2lsZW50bHkuCiAJCSAqLwotCQlpZiAo b3V0cHV0X2NsZWFuKQorCQlpZiAoZG9wdC5vdXRwdXRDbGVhbikKIAkJewogCQkJaWYgKCFnbG9i YWxzX29ubHkgJiYgIXJvbGVzX29ubHkgJiYgIXRhYmxlc3BhY2VzX29ubHkpCiAJCQkJZHJvcERC cyhjb25uKTsKQEAgLTY1OSwyNyArNzc0LDQyIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAkJCWR1bXBUYWJsZXNwYWNlcyhjb25uKTsKIAl9CiAKLQkvKgotCSAqIEV4aXQgcmVzdHJp Y3RlZCBtb2RlIGp1c3QgYmVmb3JlIGR1bXBpbmcgdGhlIGRhdGFiYXNlcy4gIHBnX2R1bXAgd2ls bAotCSAqIGhhbmRsZSBlbnRlcmluZyByZXN0cmljdGVkIG1vZGUgYWdhaW4gYXMgYXBwcm9wcmlh dGUuCi0JICovCi0JZnByaW50ZihPUEYsICJcXHVucmVzdHJpY3QgJXNcblxuIiwgcmVzdHJpY3Rf a2V5KTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJeworCQkvKgorCQkgKiBF eGl0IHJlc3RyaWN0ZWQgbW9kZSBqdXN0IGJlZm9yZSBkdW1waW5nIHRoZSBkYXRhYmFzZXMuICBw Z19kdW1wIHdpbGwKKwkJICogaGFuZGxlIGVudGVyaW5nIHJlc3RyaWN0ZWQgbW9kZSBhZ2FpbiBh cyBhcHByb3ByaWF0ZS4KKwkJICovCisJCWZwcmludGYoT1BGLCAiXFx1bnJlc3RyaWN0ICVzXG5c biIsIHJlc3RyaWN0X2tleSk7CisJfQogCiAJaWYgKCFnbG9iYWxzX29ubHkgJiYgIXJvbGVzX29u bHkgJiYgIXRhYmxlc3BhY2VzX29ubHkpCi0JCWR1bXBEYXRhYmFzZXMoY29ubik7CisJCWR1bXBE YXRhYmFzZXMoY29ubiwgZG9wdC5vdXRwdXRDbGVhbik7CiAKLQlQUWZpbmlzaChjb25uKTsKLQot CWlmICh2ZXJib3NlKQorCWlmICh2ZXJib3NlICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxs KQogCQlkdW1wVGltZXN0YW1wKCJDb21wbGV0ZWQgb24iKTsKLQlmcHJpbnRmKE9QRiwgIi0tXG4t LSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBjb21wbGV0ZVxuLS1cblxuIik7CiAK LQlpZiAoZmlsZW5hbWUpCisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJp bnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBjb21wbGV0 ZVxuLS1cblxuIik7CisKKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQlS ZXN0b3JlT3B0aW9ucyAqcm9wdDsKKworCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBQ b3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBjb21wbGV0ZVxuLS1cblxuIiwgIkNPTU1F TlQiKTsKKwkJcm9wdCA9IE5ld1Jlc3RvcmVPcHRpb25zKCk7CisJCVNldEFyY2hpdmVPcHRpb25z KGZvdXQsICZkb3B0LCByb3B0KTsKKworCQkvKiBNYXJrIHdoaWNoIGVudHJpZXMgc2hvdWxkIGJl IG91dHB1dCAqLworCQlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKGZvdXQpOworCQlDbG9z ZUFyY2hpdmUoZm91dCk7CisJfQorCWVsc2UgaWYgKGZpbGVuYW1lKQogCXsKIAkJZmNsb3NlKE9Q Rik7CiAKIAkJLyogc3luYyB0aGUgcmVzdWx0aW5nIGZpbGUsIGVycm9ycyBhcmUgbm90IGZhdGFs ICovCi0JCWlmIChkb3N5bmMpCisJCWlmIChkb3N5bmMgJiYgKGFyY2hEdW1wRm9ybWF0ID09IGFy Y2hOdWxsKSkKIAkJCSh2b2lkKSBmc3luY19mbmFtZShmaWxlbmFtZSwgZmFsc2UpOwogCX0KIApA QCAtNjkwLDEyICs4MjAsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogc3RhdGlj IHZvaWQKIGhlbHAodm9pZCkKIHsKLQlwcmludGYoXygiJXMgZXhwb3J0cyBhIFBvc3RncmVTUUwg ZGF0YWJhc2UgY2x1c3RlciBhcyBhbiBTUUwgc2NyaXB0LlxuXG4iKSwgcHJvZ25hbWUpOworCXBy aW50ZihfKCIlcyBleHBvcnRzIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGFzIGFuIFNR TCBzY3JpcHQgb3IgdG8gb3RoZXIgZm9ybWF0cy5cblxuIiksIHByb2duYW1lKTsKIAlwcmludGYo XygiVXNhZ2U6XG4iKSk7CiAJcHJpbnRmKF8oIiAgJXMgW09QVElPTl0uLi5cbiIpLCBwcm9nbmFt ZSk7CiAKIAlwcmludGYoXygiXG5HZW5lcmFsIG9wdGlvbnM6XG4iKSk7CiAJcHJpbnRmKF8oIiAg LWYsIC0tZmlsZT1GSUxFTkFNRSAgICAgICAgICBvdXRwdXQgZmlsZSBuYW1lXG4iKSk7CisJcHJp bnRmKF8oIiAgLUYsIC0tZm9ybWF0PWN8ZHx0fHAgICAgICAgICBvdXRwdXQgZmlsZSBmb3JtYXQg KGN1c3RvbSwgZGlyZWN0b3J5LCB0YXIsXG4iCisJCQkgIiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwbGFpbiB0ZXh0IChkZWZhdWx0KSlcbiIpKTsKIAlwcmludGYoXygiICAtdiwgLS12 ZXJib3NlICAgICAgICAgICAgICAgIHZlcmJvc2UgbW9kZVxuIikpOwogCXByaW50ZihfKCIgIC1W LCAtLXZlcnNpb24gICAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRo ZW4gZXhpdFxuIikpOwogCXByaW50ZihfKCIgIC0tbG9jay13YWl0LXRpbWVvdXQ9VElNRU9VVCAg ZmFpbCBhZnRlciB3YWl0aW5nIFRJTUVPVVQgZm9yIGEgdGFibGUgbG9ja1xuIikpOwpAQCAtNzcw LDYgKzkwMiw3IEBAIHN0YXRpYyB2b2lkCiBkcm9wUm9sZXMoUEdjb25uICpjb25uKQogewogCVBR RXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJUFFFeHBCdWZmZXIgZGVsUXJ5 ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJaV9yb2xu YW1lOwogCWludAkJCWk7CkBAIC03ODYsMTIgKzkxOSwxNyBAQCBkcm9wUm9sZXMoUEdjb25uICpj b25uKQogCQkJCQkJICAiRlJPTSAlcyAiCiAJCQkJCQkgICJPUkRFUiBCWSAxIiwgcm9sZV9jYXRh bG9nKTsKIAotCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEpOworCXJlcyA9IGV4 ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCiAJaV9y b2xuYW1lID0gUFFmbnVtYmVyKHJlcywgInJvbG5hbWUiKTsKIAogCWlmIChQUW50dXBsZXMocmVz KSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3Agcm9sZXNcbi0tXG5cbiIpOworCXsK KwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxu LS0gRHJvcCByb2xlc1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRy eSgiLS1cbi0tIERyb3Agcm9sZXNcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJZm9yIChp ID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewpAQCAtNzk5LDE1ICs5MzcsMjEgQEAg ZHJvcFJvbGVzKFBHY29ubiAqY29ubikKIAogCQlyb2xlbmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBp LCBpX3JvbG5hbWUpOwogCi0JCWZwcmludGYoT1BGLCAiRFJPUCBST0xFICVzJXM7XG4iLAorCQlh cHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9QIFJPTEUgJXMlcztcbiIsCiAJCQkJaWZfZXhp c3RzID8gIklGIEVYSVNUUyAiIDogIiIsCiAJCQkJZm10SWQocm9sZW5hbWUpKTsKKworCQlpZiAo YXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVsUXJ5 LT5kYXRhKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGRlbFFyeS0+ZGF0YSwg ImRyb3BSb2xlcyIpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKIAlkZXN0cm95UFFFeHBCdWZmZXIo YnVmKTsKIAotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBh cmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIC8qCkBAIC04NzEsNyArMTAx NSw3IEBAIGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCQkgICJGUk9NICVzICIKIAkJCQkJ CSAgIk9SREVSIEJZIDIiLCByb2xlX2NhdGFsb2cpOwogCi0JcmVzID0gZXhlY3V0ZVF1ZXJ5KGNv bm4sIGJ1Zi0+ZGF0YSk7CisJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIGJ1Zi0+ZGF0YSwgZm91 dCA/IHRydWUgOiBmYWxzZSk7CiAKIAlpX29pZCA9IFBRZm51bWJlcihyZXMsICJvaWQiKTsKIAlp X3JvbG5hbWUgPSBQUWZudW1iZXIocmVzLCAicm9sbmFtZSIpOwpAQCAtODg5LDcgKzEwMzMsMTIg QEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikKIAlpX2lzX2N1cnJlbnRfdXNlciA9IFBRZm51bWJl cihyZXMsICJpc19jdXJyZW50X3VzZXIiKTsKIAogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0J CWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGVzXG4tLVxuXG4iKTsKKwl7CisJCWlmIChhcmNoRHVt cEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGVzXG4tLVxu XG4iKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gUm9sZXNcbi0t XG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMp OyBpKyspCiAJewpAQCAtOTkzLDcgKzExNDIsMTAgQEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikK IAkJCQkJCQkgIlJPTEUiLCByb2xlbmFtZSwKIAkJCQkJCQkgYnVmKTsKIAotCQlmcHJpbnRmKE9Q RiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQor CQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFy Y2hpdmVFbnRyeShidWYtPmRhdGEsICJkdW1wUm9sZXMiKTsKIAl9CiAKIAkvKgpAQCAtMTAwMSwx NSArMTE1MywxMyBAQCBkdW1wUm9sZXMoUEdjb25uICpjb25uKQogCSAqIFdlIGRvIGl0IHRoaXMg d2F5IGJlY2F1c2UgY29uZmlnIHNldHRpbmdzIGZvciByb2xlcyBjb3VsZCBtZW50aW9uIHRoZQog CSAqIG5hbWVzIG9mIG90aGVyIHJvbGVzLgogCSAqLwotCWlmIChQUW50dXBsZXMocmVzKSA+IDAp Ci0JCWZwcmludGYoT1BGLCAiXG4tLVxuLS0gVXNlciBDb25maWd1cmF0aW9uc1xuLS1cbiIpOwot CiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJCWR1bXBVc2VyQ29uZmln KGNvbm4sIFBRZ2V0dmFsdWUocmVzLCBpLCBpX3JvbG5hbWUpKTsKIAogCVBRY2xlYXIocmVzKTsK IAotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiAKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsK IH0KQEAgLTEwNzYsNyArMTIyNiw3IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4p CiAJCQkJCSAgIkxFRlQgSk9JTiAlcyB1ZyBvbiB1Zy5vaWQgPSBhLmdyYW50b3IgIgogCQkJCQkg ICJXSEVSRSBOT1QgKHVyLnJvbG5hbWUgfiAnXnBnXycgQU5EIHVtLnJvbG5hbWUgfiAnXnBnXycp IgogCQkJCQkgICJPUkRFUiBCWSAxLDIsMyIsIHJvbGVfY2F0YWxvZywgcm9sZV9jYXRhbG9nLCBy b2xlX2NhdGFsb2cpOwotCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEpOworCXJl cyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwog CWlfcm9sZSA9IFBRZm51bWJlcihyZXMsICJyb2xlIik7CiAJaV9tZW1iZXIgPSBQUWZudW1iZXIo cmVzLCAibWVtYmVyIik7CiAJaV9ncmFudG9yID0gUFFmbnVtYmVyKHJlcywgImdyYW50b3IiKTsK QEAgLTEwODgsNyArMTIzOCwxMiBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQog CWlfc2V0X29wdGlvbiA9IFBRZm51bWJlcihyZXMsICJzZXRfb3B0aW9uIik7CiAKIAlpZiAoUFFu dHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBSb2xlIG1lbWJlcnNoaXBz XG4tLVxuXG4iKTsKKwl7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZw cmludGYoT1BGLCAiLS1cbi0tIFJvbGUgbWVtYmVyc2hpcHNcbi0tXG5cbiIpOworCQllbHNlCisJ CQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBSb2xlIG1lbWJlcnNoaXBzXG4tLVxuXG4i LCAiQ09NTUVOVCIpOworCX0KIAogCS8qCiAJICogV2UgY2FuJ3QgZHVtcCB0aGVzZSBHUkFOVCBj b21tYW5kcyBpbiBhcmJpdHJhcnkgb3JkZXIsIGJlY2F1c2UgYSByb2xlCkBAIC0xMTY3LDYgKzEz MjIsNyBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQogCQkJCWNoYXIJICAgKmdy YW50b3I7CiAJCQkJY2hhcgkgICAqc2V0X29wdGlvbiA9ICJ0cnVlIjsKIAkJCQlib29sCQlmb3Vu ZDsKKwkJCQlQUUV4cEJ1ZmZlciBjcmVhUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAogCQkJ CS8qIElmIHdlIGFscmVhZHkgZGlkIHRoaXMgZ3JhbnQsIGRvbid0IGRvIGl0IGFnYWluLiAqLwog CQkJCWlmIChkb25lW2kgLSBzdGFydF0pCkBAIC0xMjIzLDggKzEzNzksOCBAQCBkdW1wUm9sZU1l bWJlcnNoaXAoUEdjb25uICpjb25uKQogCiAJCQkJLyogR2VuZXJhdGUgdGhlIGFjdHVhbCBHUkFO VCBzdGF0ZW1lbnQuICovCiAJCQkJcmVzZXRQUUV4cEJ1ZmZlcihvcHRidWYpOwotCQkJCWZwcmlu dGYoT1BGLCAiR1JBTlQgJXMiLCBmbXRJZChyb2xlKSk7Ci0JCQkJZnByaW50ZihPUEYsICIgVE8g JXMiLCBmbXRJZChtZW1iZXIpKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihjcmVhUXJ5LCAiR1JB TlQgJXMiLCBmbXRJZChyb2xlKSk7CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoY3JlYVFyeSwgIiBU TyAlcyIsIGZtdElkKG1lbWJlcikpOwogCQkJCWlmICgqYWRtaW5fb3B0aW9uID09ICd0JykKIAkJ CQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIob3B0YnVmLCAiQURNSU4gT1BUSU9OIik7CiAJCQkJaWYg KGR1bXBfZ3JhbnRfb3B0aW9ucykKQEAgLTEyNDUsMTAgKzE0MDEsMTUgQEAgZHVtcFJvbGVNZW1i ZXJzaGlwKFBHY29ubiAqY29ubikKIAkJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIob3B0YnVmLCAi U0VUIEZBTFNFIik7CiAJCQkJfQogCQkJCWlmIChvcHRidWYtPmRhdGFbMF0gIT0gJ1wwJykKLQkJ CQkJZnByaW50ZihPUEYsICIgV0lUSCAlcyIsIG9wdGJ1Zi0+ZGF0YSk7CisJCQkJCWFwcGVuZFBR RXhwQnVmZmVyKGNyZWFRcnksICIgV0lUSCAlcyIsIG9wdGJ1Zi0+ZGF0YSk7CiAJCQkJaWYgKGR1 bXBfZ3JhbnRvcnMpCi0JCQkJCWZwcmludGYoT1BGLCAiIEdSQU5URUQgQlkgJXMiLCBmbXRJZChn cmFudG9yKSk7Ci0JCQkJZnByaW50ZihPUEYsICI7XG4iKTsKKwkJCQkJYXBwZW5kUFFFeHBCdWZm ZXIoY3JlYVFyeSwgIiBHUkFOVEVEIEJZICVzIiwgZm10SWQoZ3JhbnRvcikpOworCQkJCWFwcGVu ZFBRRXhwQnVmZmVyKGNyZWFRcnksICI7XG4iKTsKKworCQkJCWlmIChhcmNoRHVtcEZvcm1hdCA9 PSBhcmNoTnVsbCkKKwkJCQkJZnByaW50ZihPUEYsICIlcyIsIGNyZWFRcnktPmRhdGEpOworCQkJ CWVsc2UKKwkJCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGNyZWFRcnktPmRhdGEsICJkdW1wUm9s ZU1lbWJlcnNoaXAiKTsKIAkJCX0KIAkJfQogCkBAIC0xMjYwLDcgKzE0MjEsOCBAQCBkdW1wUm9s ZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQogCVBRY2xlYXIocmVzKTsKIAlkZXN0cm95UFFFeHBC dWZmZXIoYnVmKTsKIAotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1h dCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIApAQCAtMTI4NSwx MCArMTQ0NywxNSBAQCBkdW1wUm9sZUdVQ1ByaXZzKFBHY29ubiAqY29ubikKIAkJCQkJICAgInBh cmFjbCwgIgogCQkJCQkgICAicGdfY2F0YWxvZy5hY2xkZWZhdWx0KCdwJywgIiBDcHBBc1N0cmlu ZzIoQk9PVFNUUkFQX1NVUEVSVVNFUklEKSAiKSBBUyBhY2xkZWZhdWx0ICIKIAkJCQkJICAgIkZS T00gcGdfY2F0YWxvZy5wZ19wYXJhbWV0ZXJfYWNsICIKLQkJCQkJICAgIk9SREVSIEJZIDEiKTsK KwkJCQkJICAgIk9SREVSIEJZIDEiLCBmb3V0ID8gdHJ1ZSA6IGZhbHNlKTsKIAogCWlmIChQUW50 dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGUgcHJpdmlsZWdlcyBv biBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1w Rm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZSBwcml2aWxl Z2VzIG9uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyc1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNy ZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIFJvbGUgcHJpdmlsZWdlcyBvbiBjb25maWd1cmF0 aW9uIHBhcmFtZXRlcnNcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJZm9yIChpID0gMDsg aSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewpAQCAtMTMxMiwxNCArMTQ3OSwxOSBAQCBkdW1w Um9sZUdVQ1ByaXZzKFBHY29ubiAqY29ubikKIAkJCWV4aXRfbmljZWx5KDEpOwogCQl9CiAKLQkJ ZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBh cmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQllbHNlCisJCQlj cmVhdGVPbmVBcmNoaXZlRW50cnkoYnVmLT5kYXRhLCAiZHVtcFJvbGVHVUNQcml2cyIpOwogCiAJ CWZyZWUoZnBhcm5hbWUpOwogCQlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIAl9CiAKIAlQUWNs ZWFyKHJlcyk7Ci0JZnByaW50ZihPUEYsICJcblxuIik7CisKKwlpZiAoYXJjaER1bXBGb3JtYXQg PT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQogCiAKQEAgLTEzMzEsNiAr MTUwMyw3IEBAIGRyb3BUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pCiB7CiAJUEdyZXN1bHQgICAq cmVzOwogCWludAkJCWk7CisJUFFFeHBCdWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIo KTsKIAogCS8qCiAJICogR2V0IGFsbCB0YWJsZXNwYWNlcyBleGNlcHQgYnVpbHQtaW4gb25lcyAo d2hpY2ggd2UgYXNzdW1lIGFyZSBuYW1lZApAQCAtMTMzOSwyMyArMTUxMiwzNCBAQCBkcm9wVGFi bGVzcGFjZXMoUEdjb25uICpjb25uKQogCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCAiU0VMRUNU IHNwY25hbWUgIgogCQkJCQkgICAiRlJPTSBwZ19jYXRhbG9nLnBnX3RhYmxlc3BhY2UgIgogCQkJ CQkgICAiV0hFUkUgc3BjbmFtZSAhfiAnXnBnXycgIgotCQkJCQkgICAiT1JERVIgQlkgMSIpOwor CQkJCQkgICAiT1JERVIgQlkgMSIsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCiAJaWYgKFBRbnR1 cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCB0YWJsZXNwYWNlc1xu LS1cblxuIik7CisJeworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJp bnRmKE9QRiwgIi0tXG4tLSBEcm9wIHRhYmxlc3BhY2VzXG4tLVxuXG4iKTsKKwkJZWxzZQorCQkJ Y3JlYXRlT25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gRHJvcCB0YWJsZXNwYWNlc1xuLS1cblxuIiwg IkNPTU1FTlQiKTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykK IAl7CiAJCWNoYXIJICAgKnNwY25hbWUgPSBQUWdldHZhbHVlKHJlcywgaSwgMCk7CiAKLQkJZnBy aW50ZihPUEYsICJEUk9QIFRBQkxFU1BBQ0UgJXMlcztcbiIsCisJCWFwcGVuZFBRRXhwQnVmZmVy KGRlbFFyeSwgIkRST1AgVEFCTEVTUEFDRSAlcyVzO1xuIiwKIAkJCQlpZl9leGlzdHMgPyAiSUYg RVhJU1RTICIgOiAiIiwKIAkJCQlmbXRJZChzcGNuYW1lKSk7CisKKwkJaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGRlbFFyeS0+ZGF0YSk7CisJ CWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShkZWxRcnktPmRhdGEsICJkcm9wVGFibGVz cGFjZXMiKTsKIAl9CiAKIAlQUWNsZWFyKHJlcyk7CiAKLQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsK KwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BGLCAiXG5cbiIp OwogfQogCiAvKgpAQCAtMTM3OSwxMCArMTU2MywxNSBAQCBkdW1wVGFibGVzcGFjZXMoUEdjb25u ICpjb25uKQogCQkJCQkgICAicGdfY2F0YWxvZy5zaG9ial9kZXNjcmlwdGlvbihvaWQsICdwZ190 YWJsZXNwYWNlJykgIgogCQkJCQkgICAiRlJPTSBwZ19jYXRhbG9nLnBnX3RhYmxlc3BhY2UgIgog CQkJCQkgICAiV0hFUkUgc3BjbmFtZSAhfiAnXnBnXycgIgotCQkJCQkgICAiT1JERVIgQlkgMSIp OworCQkJCQkgICAiT1JERVIgQlkgMSIsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCiAJaWYgKFBR bnR1cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gVGFibGVzcGFjZXNcbi0t XG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50 ZihPUEYsICItLVxuLS0gVGFibGVzcGFjZXNcbi0tXG5cbiIpOworCQllbHNlCisJCQljcmVhdGVP bmVBcmNoaXZlRW50cnkoIi0tXG4tLSBUYWJsZXNwYWNlc1xuLS1cblxuIiwgIkNPTU1FTlQiKTsK Kwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CkBAIC0xNDUx LDE0ICsxNjQwLDE5IEBAIGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCQkJICJU QUJMRVNQQUNFIiwgc3BjbmFtZSwKIAkJCQkJCQkgYnVmKTsKIAotCQlmcHJpbnRmKE9QRiwgIiVz IiwgYnVmLT5kYXRhKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnBy aW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVF bnRyeShidWYtPmRhdGEsICJkdW1wVGFibGVzcGFjZXMiKTsKIAogCQlmcmVlKGZzcGNuYW1lKTsK IAkJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAJfQogCiAJUFFjbGVhcihyZXMpOwotCWZwcmlu dGYoT1BGLCAiXG5cbiIpOworCisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlm cHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xNDc5LDEwICsxNjczLDE1IEBAIGRyb3BE QnMoUEdjb25uICpjb25uKQogCQkJCQkgICAiU0VMRUNUIGRhdG5hbWUgIgogCQkJCQkgICAiRlJP TSBwZ19kYXRhYmFzZSBkICIKIAkJCQkJICAgIldIRVJFIGRhdGFsbG93Y29ubiBBTkQgZGF0Y29u bmxpbWl0ICE9IC0yICIKLQkJCQkJICAgIk9SREVSIEJZIGRhdG5hbWUiKTsKKwkJCQkJICAgIk9S REVSIEJZIGRhdG5hbWUiLCBmb3V0ID8gdHJ1ZSA6IGZhbHNlKTsKIAogCWlmIChQUW50dXBsZXMo cmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3AgZGF0YWJhc2VzIChleGNlcHQg cG9zdGdyZXMgYW5kIHRlbXBsYXRlMSlcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCBkYXRhYmFzZXMg KGV4Y2VwdCBwb3N0Z3JlcyBhbmQgdGVtcGxhdGUxKVxuLS1cblxuIik7CisJCWVsc2UKKwkJCWNy ZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIERyb3AgZGF0YWJhc2VzIChleGNlcHQgcG9zdGdy ZXMgYW5kIHRlbXBsYXRlMSlcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJZm9yIChpID0g MDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewpAQCAtMTQ5NywxNSArMTY5NiwyMyBAQCBk cm9wREJzKFBHY29ubiAqY29ubikKIAkJCXN0cmNtcChkYm5hbWUsICJ0ZW1wbGF0ZTAiKSAhPSAw ICYmCiAJCQlzdHJjbXAoZGJuYW1lLCAicG9zdGdyZXMiKSAhPSAwKQogCQl7Ci0JCQlmcHJpbnRm KE9QRiwgIkRST1AgREFUQUJBU0UgJXMlcztcbiIsCisJCQlQUUV4cEJ1ZmZlciBkZWxRcnkgPSBj cmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9Q IERBVEFCQVNFICVzJXM7XG4iLAogCQkJCQlpZl9leGlzdHMgPyAiSUYgRVhJU1RTICIgOiAiIiwK IAkJCQkJZm10SWQoZGJuYW1lKSk7CisKKwkJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkKKwkJCQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVsUXJ5LT5kYXRhKTsKKwkJCWVsc2UKKwkJCQlj cmVhdGVPbmVBcmNoaXZlRW50cnkoZGVsUXJ5LT5kYXRhLCAiRFJPUF9EQVRBQkFTRSIpOwogCQl9 CiAJfQogCiAJUFFjbGVhcihyZXMpOwogCi0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFy Y2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAog CkBAIC0xNTI1LDE0ICsxNzMyLDI1IEBAIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29u c3QgY2hhciAqdXNlcm5hbWUpCiAJYXBwZW5kU3RyaW5nTGl0ZXJhbENvbm4oYnVmLCB1c2VybmFt ZSwgY29ubik7CiAJYXBwZW5kUFFFeHBCdWZmZXJDaGFyKGJ1ZiwgJyknKTsKIAotCXJlcyA9IGV4 ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEpOworCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBi dWYtPmRhdGEsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4g MCkKIAl7CiAJCWNoYXIJICAgKnNhbml0aXplZDsKIAogCQlzYW5pdGl6ZWQgPSBzYW5pdGl6ZV9s aW5lKHVzZXJuYW1lLCB0cnVlKTsKLQkJZnByaW50ZihPUEYsICJcbi0tXG4tLSBVc2VyIENvbmZp ZyBcIiVzXCJcbi0tXG5cbiIsIHNhbml0aXplZCk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICJcbi0tXG4tLSBVc2VyIENvbmZpZyBcIiVzXCJc bi0tXG5cbiIsIHNhbml0aXplZCk7CisJCWVsc2UKKwkJeworCQkJUFFFeHBCdWZmZXIJcXJ5ID0g Y3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiXG4tLVxu LS0gVXNlciBDb25maWcgXCIlc1wiXG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCQkJY3JlYXRlT25l QXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIkNPTU1FTlQiKTsKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZl cihxcnkpOworCQl9CisKIAkJZnJlZShzYW5pdGl6ZWQpOwogCX0KIApAQCAtMTU0Miw3ICsxNzYw LDExIEBAIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUp CiAJCW1ha2VBbHRlckNvbmZpZ0NvbW1hbmQoY29ubiwgUFFnZXR2YWx1ZShyZXMsIGksIDApLAog CQkJCQkJCSAgICJST0xFIiwgdXNlcm5hbWUsIE5VTEwsIE5VTEwsCiAJCQkJCQkJICAgYnVmKTsK LQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UK KwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShidWYtPmRhdGEsICJkdW1wVXNlckNvbmZpZyIpOwog CX0KIAogCVBRY2xlYXIocmVzKTsKQEAgLTE1OTEsNyArMTgxMyw3IEBAIGV4cGFuZF9kYm5hbWVf cGF0dGVybnMoUEdjb25uICpjb25uLAogCQkJZXhpdF9uaWNlbHkoMSk7CiAJCX0KIAotCQlyZXMg PSBleGVjdXRlUXVlcnkoY29ubiwgcXVlcnktPmRhdGEpOworCQlyZXMgPSBleGVjdXRlUXVlcnko Y29ubiwgcXVlcnktPmRhdGEsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCQlmb3IgKGludCBpID0g MDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJCXsKIAkJCXNpbXBsZV9zdHJpbmdfbGlzdF9h cHBlbmQobmFtZXMsIFBRZ2V0dmFsdWUocmVzLCBpLCAwKSk7CkBAIC0xNjA4LDEwICsxODMwLDEz IEBAIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLAogICogRHVtcCBjb250ZW50 cyBvZiBkYXRhYmFzZXMuCiAgKi8KIHN0YXRpYyB2b2lkCi1kdW1wRGF0YWJhc2VzKFBHY29ubiAq Y29ubikKK2R1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uLCBib29sIG91dHB1dF9jbGVhbikKIHsK IAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJaTsKKwljaGFyCQlkYl9zdWJkaXJbTUFYUEdQQVRI XTsKKwljaGFyCQlkYmZpbGVwYXRoW01BWFBHUEFUSF07CisJRklMRQkJKm1hcF9maWxlID0gTlVM TDsKIAogCS8qCiAJICogU2tpcCBkYXRhYmFzZXMgbWFya2VkIG5vdCBkYXRhbGxvd2Nvbm4sIHNp bmNlIHdlJ2QgYmUgdW5hYmxlIHRvIGNvbm5lY3QKQEAgLTE2MjUsMTkgKzE4NTAsNDkgQEAgZHVt cERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJICogZG9lc24ndCBoYXZlIHNvbWUgZmFpbHVyZSBt b2RlIHdpdGggLS1jbGVhbi4KIAkgKi8KIAlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwKLQkJCQkJ ICAgIlNFTEVDVCBkYXRuYW1lICIKKwkJCQkJICAgIlNFTEVDVCBkYXRuYW1lLCBvaWQgIgogCQkJ CQkgICAiRlJPTSBwZ19kYXRhYmFzZSBkICIKIAkJCQkJICAgIldIRVJFIGRhdGFsbG93Y29ubiBB TkQgZGF0Y29ubmxpbWl0ICE9IC0yICIKLQkJCQkJICAgIk9SREVSIEJZIChkYXRuYW1lIDw+ICd0 ZW1wbGF0ZTEnKSwgZGF0bmFtZSIpOworCQkJCQkgICAiT1JERVIgQlkgKGRhdG5hbWUgPD4gJ3Rl bXBsYXRlMScpLCBkYXRuYW1lIiwKKwkJCQkJICAgZm91dCA/IHRydWUgOiBmYWxzZSk7CiAKIAlp ZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZXNc bi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnBy aW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2VzXG4tLVxuXG4iKTsKKwkJZWxzZQorCQkJY3JlYXRl T25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gRGF0YWJhc2VzXG4tLVxuXG4iLCAiQ09NTUVOVCIpOwor CX0KKworCS8qCisJICogSWYgZGlyZWN0b3J5L3Rhci9jdXN0b20gZm9ybWF0IGlzIHNwZWNpZmll ZCwgY3JlYXRlIGEgc3ViZGlyZWN0b3J5CisJICogdW5kZXIgdGhlIG1haW4gZGlyZWN0b3J5IGFu ZCBlYWNoIGRhdGFiYXNlIGR1bXAgZmlsZSBvciBzdWJkaXJlY3RvcnkKKwkgKiB3aWxsIGJlIGNy ZWF0ZWQgaW4gdGhhdCBzdWJkaXJlY3RvcnkgYnkgcGdfZHVtcC4KKwkgKi8KKyAgIGlmIChhcmNo RHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKyAgIHsKKwkgICBjaGFyICAgICAgICBtYXBfZmlsZV9w YXRoW01BWFBHUEFUSF07CisKKwkgICBzbnByaW50ZihkYl9zdWJkaXIsIE1BWFBHUEFUSCwgIiVz L2RhdGFiYXNlcyIsIGZpbGVuYW1lKTsKKworCSAgIC8qIENyZWF0ZSBhIHN1YmRpcmVjdG9yeSB3 aXRoICdkYXRhYmFzZXMnIG5hbWUgdW5kZXIgbWFpbiBkaXJlY3RvcnkuICovCisJICAgaWYgKG1r ZGlyKGRiX3N1YmRpciwgcGdfZGlyX2NyZWF0ZV9tb2RlKSAhPSAwKQorCQkgICBwZ19mYXRhbCgi Y291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIGRiX3N1YmRpcik7CisKKwkg ICBzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9tYXAuZGF0IiwgZmlsZW5h bWUpOworCisJICAgLyogQ3JlYXRlIGEgbWFwIGZpbGUgKHRvIHN0b3JlIGRib2lkIGFuZCBkYm5h bWUpICovCisJICAgbWFwX2ZpbGUgPSBmb3BlbihtYXBfZmlsZV9wYXRoLCBQR19CSU5BUllfVyk7 CisJICAgaWYgKCFtYXBfZmlsZSkKKwkJICAgcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUg XCIlc1wiOiAlbSIsIG1hcF9maWxlX3BhdGgpOworICAgfQogCiAJZm9yIChpID0gMDsgaSA8IFBR bnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQljaGFyCSAgICpkYm5hbWUgPSBQUWdldHZhbHVlKHJl cywgaSwgMCk7CiAJCWNoYXIJICAgKnNhbml0aXplZDsKLQkJY29uc3QgY2hhciAqY3JlYXRlX29w dHM7CisJCWNoYXIgICAgICAgKm9pZCA9IFBRZ2V0dmFsdWUocmVzLCBpLCAxKTsKKwkJY29uc3Qg Y2hhciAqY3JlYXRlX29wdHMgPSAiIjsKIAkJaW50CQkJcmV0OwogCiAJCS8qIFNraXAgdGVtcGxh dGUwLCBldmVuIGlmIGl0J3Mgbm90IG1hcmtlZCAhZGF0YWxsb3djb25uLiAqLwpAQCAtMTY1NCw3 ICsxOTA5LDE4IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQlwZ19sb2dfaW5mbygi ZHVtcGluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYm5hbWUpOwogCiAJCXNhbml0aXplZCA9IHNhbml0 aXplX2xpbmUoZGJuYW1lLCB0cnVlKTsKLQkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2Ug XCIlc1wiIGR1bXBcbi0tXG5cbiIsIHNhbml0aXplZCk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1 bXBcbi0tXG5cbiIsIHNhbml0aXplZCk7CisJCWVsc2UKKwkJeworCQkJUFFFeHBCdWZmZXIgcXJ5 ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiLS1c bi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCQkJY3JlYXRl T25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIkNPTU1FTlQiKTsKKwkJCWRlc3Ryb3lQUUV4cEJ1 ZmZlcihxcnkpOworCQl9CisKIAkJZnJlZShzYW5pdGl6ZWQpOwogCiAJCS8qCkBAIC0xNjY5LDI0 ICsxOTM1LDQ2IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQl7CiAJCQlpZiAob3V0 cHV0X2NsZWFuKQogCQkJCWNyZWF0ZV9vcHRzID0gIi0tY2xlYW4gLS1jcmVhdGUiOworCQkJLyog U2luY2UgcGdfZHVtcCB3b24ndCBlbWl0IGEgXGNvbm5lY3QgY29tbWFuZCwgd2UgbXVzdCAqLwor CQkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQkJZnByaW50ZihPUEYs ICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKIAkJCWVsc2UKIAkJCXsKLQkJCQljcmVhdGVf b3B0cyA9ICIiOwotCQkJCS8qIFNpbmNlIHBnX2R1bXAgd29uJ3QgZW1pdCBhIFxjb25uZWN0IGNv bW1hbmQsIHdlIG11c3QgKi8KLQkJCQlmcHJpbnRmKE9QRiwgIlxcY29ubmVjdCAlc1xuXG4iLCBk Ym5hbWUpOworCQkJCVBRRXhwQnVmZmVyCXFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJ CQlhcHBlbmRQUUV4cEJ1ZmZlcihxcnksICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKKwkJ CQljcmVhdGVPbmVBcmNoaXZlRW50cnkocXJ5LT5kYXRhLCAiQ09OTkVDVCIpOworCQkJCWRlc3Ry b3lQUUV4cEJ1ZmZlcihxcnkpOwogCQkJfQogCQl9CiAJCWVsc2UKIAkJCWNyZWF0ZV9vcHRzID0g Ii0tY3JlYXRlIjsKIAotCQlpZiAoZmlsZW5hbWUpCisJCWlmIChmaWxlbmFtZSAmJiBhcmNoRHVt cEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJCWZjbG9zZShPUEYpOwogCi0JCXJldCA9IHJ1blBnRHVt cChkYm5hbWUsIGNyZWF0ZV9vcHRzKTsKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBub3QgYSBwbGFp biBmb3JtYXQgZHVtcCwgdGhlbiBhcHBlbmQgZGJvaWQgYW5kIGRibmFtZSB0bworCQkgKiB0aGUg bWFwLmRhdCBmaWxlLgorCQkgKi8KKwkJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQor CQl7CisJCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCQlzbnByaW50Zihk YmZpbGVwYXRoLCBNQVhQR1BBVEgsICJcIiVzXCIvXCIlc1wiLmRtcCIsIGRiX3N1YmRpciwgb2lk KTsKKwkJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hUYXIpCisJCQkJc25wcmludGYo ZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIi50YXIiLCBkYl9zdWJkaXIsIG9p ZCk7CisJCQllbHNlCisJCQkJc25wcmludGYoZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wi L1wiJXNcIiIsIGRiX3N1YmRpciwgb2lkKTsKKworCQkJLyogUHV0IG9uZSBsaW5lIGVudHJ5IGZv ciBkYm9pZCBhbmQgZGJuYW1lIGluIG1hcCBmaWxlLiAqLworCQkJZnByaW50ZihtYXBfZmlsZSwg IiVzICVzXG4iLCBvaWQsIGRibmFtZSk7CisJCX0KKworCQlyZXQgPSBydW5QZ0R1bXAoZGJuYW1l LCBjcmVhdGVfb3B0cywgZGJmaWxlcGF0aCk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXBnX2ZhdGFs KCJwZ19kdW1wIGZhaWxlZCBvbiBkYXRhYmFzZSBcIiVzXCIsIGV4aXRpbmciLCBkYm5hbWUpOwog Ci0JCWlmIChmaWxlbmFtZSkKKwkJaWYgKGZpbGVuYW1lICYmIGFyY2hEdW1wRm9ybWF0ID09IGFy Y2hOdWxsKQogCQl7CiAJCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX0EpOwogCQkJ aWYgKCFPUEYpCkBAIC0xNjk1LDYgKzE5ODMsMTAgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNv bm4pCiAJCX0KIAl9CiAKKwkvKiBDbG9zZSBtYXAgZmlsZSAqLworCWlmIChhcmNoRHVtcEZvcm1h dCAhPSBhcmNoTnVsbCkKKwkJZmNsb3NlKG1hcF9maWxlKTsKKwogCVBRY2xlYXIocmVzKTsKIH0K IApAQCAtMTcwNCw3ICsxOTk2LDcgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAgKiBS dW4gcGdfZHVtcCBvbiBkYm5hbWUsIHdpdGggc3BlY2lmaWVkIG9wdGlvbnMuCiAgKi8KIHN0YXRp YyBpbnQKLXJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9v cHRzKQorcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29w dHMsIGNoYXIgKmRiZmlsZSkKIHsKIAlQUUV4cEJ1ZmZlckRhdGEgY29ubnN0cmJ1ZjsKIAlQUUV4 cEJ1ZmZlckRhdGEgY21kOwpAQCAtMTcxMywxNyArMjAwNSwzNiBAQCBydW5QZ0R1bXAoY29uc3Qg Y2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cykKIAlpbml0UFFFeHBCdWZmZXIo JmNvbm5zdHJidWYpOwogCWluaXRQUUV4cEJ1ZmZlcigmY21kKTsKIAotCXByaW50ZlBRRXhwQnVm ZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1wX2JpbiwKLQkJCQkJICBwZ2R1bXBvcHRz LT5kYXRhLCBjcmVhdGVfb3B0cyk7Ci0KIAkvKgotCSAqIElmIHdlIGhhdmUgYSBmaWxlbmFtZSwg dXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4tYXBwZW5kIHBnX2R1bXAKLQkgKiBmb3JtYXQuCisJ ICogSWYgdGhpcyBpcyBub3QgYSBwbGFpbiBmb3JtYXQgZHVtcCwgdGhlbiBhcHBlbmQgZmlsZSBu YW1lIGFuZCBkdW1wCisJICogZm9ybWF0IHRvIHRoZSBwZ19kdW1wIGNvbW1hbmQgdG8gZ2V0IGFy Y2hpdmUgZHVtcC4KIAkgKi8KLQlpZiAoZmlsZW5hbWUpCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KCZjbWQsICIgLUZhICIpOworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJ CXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgLWYgJXMgJXMiLCBwZ19kdW1wX2JpbiwK KwkJCQkJCSAgZGJmaWxlLCBjcmVhdGVfb3B0cyk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hEaXJlY3RvcnkpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1h dD1kaXJlY3RvcnkgIik7CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0b20p CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD1jdXN0b20gIik7CisJ CWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hUYXIpCisJCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmY21kLCAiICAtLWZvcm1hdD10YXIgIik7CisJfQogCWVsc2UKLQkJYXBwZW5kUFFFeHBC dWZmZXJTdHIoJmNtZCwgIiAtRnAgIik7CisJeworCQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAi XCIlc1wiICVzICVzIiwgcGdfZHVtcF9iaW4sCisJCQkJCQkgIHBnZHVtcG9wdHMtPmRhdGEsIGNy ZWF0ZV9vcHRzKTsKKworCQkvKgorCQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUg dW5kb2N1bWVudGVkIHBsYWluLWFwcGVuZCBwZ19kdW1wCisJCSAqIGZvcm1hdC4KKwkJICovCisJ CWlmIChmaWxlbmFtZSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIpOwor CQllbHNlCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAiKTsKKwl9CiAKIAkv KgogCSAqIEFwcGVuZCB0aGUgZGF0YWJhc2UgbmFtZSB0byB0aGUgYWxyZWFkeS1jb25zdHJ1Y3Rl ZCBzdGVtIG9mIGNvbm5lY3Rpb24KQEAgLTE3NjYsNyArMjA3Nyw3IEBAIGJ1aWxkU2hTZWNMYWJl bHMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpjYXRhbG9nX25hbWUsIE9pZCBvYmplY3RJZCwK IAlQR3Jlc3VsdCAgICpyZXM7CiAKIAlidWlsZFNoU2VjTGFiZWxRdWVyeShjYXRhbG9nX25hbWUs IG9iamVjdElkLCBzcWwpOwotCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBzcWwtPmRhdGEpOwor CXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBzcWwtPmRhdGEsIGZvdXQgPyB0cnVlIDogZmFsc2Up OwogCWVtaXRTaFNlY0xhYmVscyhjb25uLCByZXMsIGJ1ZmZlciwgb2JqdHlwZSwgb2JqbmFtZSk7 CiAKIAlQUWNsZWFyKHJlcyk7CkBAIC0xODY4LDMgKzIxNzksNjcgQEAgcmVhZF9kdW1wYWxsX2Zp bHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4pCiAK IAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAqIHBhcnNlRHVtcEZvcm1hdAorICoK KyAqIFRoaXMgd2lsbCB2YWxpZGF0ZSBkdW1wIGZvcm1hdHMuCisgKi8KK3N0YXRpYyBBcmNoaXZl Rm9ybWF0CitwYXJzZUR1bXBGb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0KQoreworCUFyY2hpdmVG b3JtYXQgYXJjaER1bXBGb3JtYXQ7CisKKwlpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJjIikg PT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoQ3VzdG9tOworCWVsc2UgaWYgKHBnX3N0cmNh c2VjbXAoZm9ybWF0LCAiY3VzdG9tIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoQ3Vz dG9tOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiZCIpID09IDApCisJCWFyY2hE dW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1h dCwgImRpcmVjdG9yeSIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsK KwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInAiKSA9PSAwKQorCQlhcmNoRHVtcEZv cm1hdCA9IGFyY2hOdWxsOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicGxhaW4i KSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOworCWVsc2UgaWYgKHBnX3N0cmNh c2VjbXAoZm9ybWF0LCAidCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaFRhcjsKKwll bHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInRhciIpID09IDApCisJCWFyY2hEdW1wRm9y bWF0ID0gYXJjaFRhcjsKKwllbHNlCisJCXBnX2ZhdGFsKCJ1bnJlY29nbml6ZWQgb3V0cHV0IGZv cm1hdCBcIiVzXCI7IHBsZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgXCJwXCIsIG9yIFwidFwi IiwKKwkJCQkgZm9ybWF0KTsKKworCXJldHVybiBhcmNoRHVtcEZvcm1hdDsKK30KKworLyoKKyAq IGNyZWF0ZUR1bXBJZAorICoKKyAqIFRoaXMgd2lsbCByZXR1cm4gbmV4dCBsYXN0IHVzZWQgb2lk LgorICovCitzdGF0aWMgaW50CitjcmVhdGVEdW1wSWQodm9pZCkKK3sKKwlyZXR1cm4gKytkdW1w SWRWYWw7Cit9CisKKy8qCisgKiBjcmVhdGVPbmVBcmNoaXZlRW50cnkKKyAqCisgKiBUaGlzIGNy ZWF0ZXMgb25lIGFyY2hpdmUgZW50cnkgYmFzZWQgb24gZm9ybWF0LgorICovCitzdGF0aWMgdm9p ZAorY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGNvbnN0IGNoYXIgKnF1ZXJ5LCBjb25zdCBjaGFyICp0 YWcpCit7CisJQ2F0YWxvZ0lkIG5pbENhdGFsb2dJZCA9IHswLCAwfTsKKwlBc3NlcnQoZm91dCAh PSBOVUxMKTsKKworCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJbmlsQ2F0YWxvZ0lkLCAvKiBjYXRh bG9nIElEICovCisJCQljcmVhdGVEdW1wSWQoKSwgLyogZHVtcCBJRCAqLworCQkJQVJDSElWRV9P UFRTKC50YWcgPSB0YWcsCisJCQkJLmRlc2NyaXB0aW9uID0gdGFnLAorCQkJCS5zZWN0aW9uID0g U0VDVElPTl9QUkVfREFUQSwKKwkJCQkuY3JlYXRlU3RtdCA9IHF1ZXJ5KSk7Cit9CmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jl c3RvcmUuYwppbmRleCBjOTc3NjMwNmM1Yy4uOWVmODRlNWE5ZWMgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUu YwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBwZ19yZXN0b3JlLmMKICAqCXBnX3Jlc3RvcmUgaXMg YW4gdXRpbGl0eSBleHRyYWN0aW5nIHBvc3RncmVzIGRhdGFiYXNlIGRlZmluaXRpb25zCi0gKglm cm9tIGEgYmFja3VwIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wIHVzaW5nIHRoZSBhcmNoaXZl cgorICoJZnJvbSBhIGJhY2t1cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC9wZ19kdW1wYWxs IHVzaW5nIHRoZSBhcmNoaXZlcgogICoJaW50ZXJmYWNlLgogICoKICAqCXBnX3Jlc3RvcmUgd2ls bCByZWFkIHRoZSBiYWNrdXAgYXJjaGl2ZSBhbmQKQEAgLTQxLDEyICs0MSwxNiBAQAogI2luY2x1 ZGUgInBvc3RncmVzX2ZlLmgiCiAKICNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN5cy9z dGF0Lmg+CiAjaWZkZWYgSEFWRV9URVJNSU9TX0gKICNpbmNsdWRlIDx0ZXJtaW9zLmg+CiAjZW5k aWYKIAorI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJjb25uZWN0ZGIuaCIK ICNpbmNsdWRlICJkdW1wdXRpbHMuaCIKICNpbmNsdWRlICJmZV91dGlscy9vcHRpb25fdXRpbHMu aCIKKyNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJmaWx0ZXIu aCIKICNpbmNsdWRlICJnZXRvcHRfbG9uZy5oIgogI2luY2x1ZGUgInBhcmFsbGVsLmgiCkBAIC01 NCwxOCArNTgsNDMgQEAKIAogc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUp Owogc3RhdGljIHZvaWQgcmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUs IFJlc3RvcmVPcHRpb25zICpvcHRzKTsKK3N0YXRpYyBib29sIGZpbGVfZXhpc3RzX2luX2RpcmVj dG9yeShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK3N0YXRpYyBpbnQJ cmVzdG9yZV9vbmVfZGF0YWJhc2UoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9w dGlvbnMgKm9wdHMsCisJCQkJCQkJCSBpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSwg aW50IG51bSwKKwkJCQkJCQkJIGJvb2wgZ2xvYmFsc19vbmx5KTsKK3N0YXRpYyBpbnQgcmVzdG9y ZV9nbG9iYWxfb2JqZWN0cyhjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLAorCQlSZXN0b3JlT3B0 aW9ucyAqb3B0cywgaW50IG51bVdvcmtlcnMsCisJCWludCBudW0sIGJvb2wgZ2xvYmFsc19vbmx5 KTsKK3N0YXRpYyBpbnQJcmVzdG9yZV9hbGxfZGF0YWJhc2VzKGNvbnN0IGNoYXIgKmlucHV0Rmls ZVNwZWMsCisJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9w dGlvbnMgKm9wdHMsIGludCBudW1Xb3JrZXJzKTsKK3N0YXRpYyBpbnQJZ2V0X2RibmFtZXNfbGlz dF90b19yZXN0b3JlKFBHY29ubiAqY29ubiwKKwkJCQkJCQkJCQlTaW1wbGVQdHJMaXN0ICpkYm5h bWVfb2lkX2xpc3QsCisJCQkJCQkJCQkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRl cm5zKTsKK3N0YXRpYyBpbnQJZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0IGNo YXIgKmR1bXBkaXJwYXRoLAorCQkJCQkJCQkJCSAgIFNpbXBsZVB0ckxpc3QgKmRibmFtZV9vaWRf bGlzdCk7CisKKy8qCisgKiBTdG9yZXMgYSBkYXRhYmFzZSBPSUQgYW5kIHRoZSBjb3JyZXNwb25k aW5nIG5hbWUuCisgKi8KK3R5cGVkZWYgc3RydWN0IERiT2lkTmFtZQoreworCU9pZAkJCW9pZDsK KwljaGFyCQlzdHJbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsgLyogbnVsbC10ZXJtaW5hdGVkIHN0 cmluZyBoZXJlICovCit9IERiT2lkTmFtZTsKKwogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogewogCVJlc3RvcmVPcHRpb25zICpvcHRzOwogCWludAkJCWM7Ci0JaW50CQkJZXhp dF9jb2RlOwogCWludAkJCW51bVdvcmtlcnMgPSAxOwotCUFyY2hpdmUgICAgKkFIOwogCWNoYXIJ ICAgKmlucHV0RmlsZVNwZWM7CiAJYm9vbAkJZGF0YV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJc2No ZW1hX29ubHkgPSBmYWxzZTsKKwlpbnQJCQluX2Vycm9ycyA9IDA7CisJYm9vbAkJZ2xvYmFsc19v bmx5ID0gZmFsc2U7CisJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zID0ge05V TEwsIE5VTEx9OwogCXN0YXRpYyBpbnQJZGlzYWJsZV90cmlnZ2VycyA9IDA7CiAJc3RhdGljIGlu dAllbmFibGVfcm93X3NlY3VyaXR5ID0gMDsKIAlzdGF0aWMgaW50CWlmX2V4aXN0cyA9IDA7CkBA IC04OSw2ICsxMTgsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJeyJjbGVhbiIs IDAsIE5VTEwsICdjJ30sCiAJCXsiY3JlYXRlIiwgMCwgTlVMTCwgJ0MnfSwKIAkJeyJkYXRhLW9u bHkiLCAwLCBOVUxMLCAnYSd9LAorCQl7Imdsb2JhbHMtb25seSIsIDAsIE5VTEwsICdnJ30sCiAJ CXsiZGJuYW1lIiwgMSwgTlVMTCwgJ2QnfSwKIAkJeyJleGl0LW9uLWVycm9yIiwgMCwgTlVMTCwg J2UnfSwKIAkJeyJleGNsdWRlLXNjaGVtYSIsIDEsIE5VTEwsICdOJ30sCkBAIC0xNDIsNiArMTcy LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsic3RhdGlzdGljcy1vbmx5Iiwg bm9fYXJndW1lbnQsICZzdGF0aXN0aWNzX29ubHksIDF9LAogCQl7ImZpbHRlciIsIHJlcXVpcmVk X2FyZ3VtZW50LCBOVUxMLCA0fSwKIAkJeyJyZXN0cmljdC1rZXkiLCByZXF1aXJlZF9hcmd1bWVu dCwgTlVMTCwgNn0sCisJCXsiZXhjbHVkZS1kYXRhYmFzZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBO VUxMLCA3fSwKIAogCQl7TlVMTCwgMCwgTlVMTCwgMH0KIAl9OwpAQCAtMTcwLDcgKzIwMSw3IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9CiAJfQogCi0Jd2hpbGUgKChjID0gZ2V0 b3B0X2xvbmcoYXJnYywgYXJndiwgImFjQ2Q6ZWY6RjpoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpU OlU6dndXeDEiLAorCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVm OkY6Z2g6STpqOmxMOm46TjpPcDpQOlJzUzp0OlQ6VTp2d1d4MSIsCiAJCQkJCQkJY21kb3B0cywg TlVMTCkpICE9IC0xKQogCXsKIAkJc3dpdGNoIChjKQpAQCAtMTk3LDExICsyMjgsMTQgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJaWYgKHN0cmxlbihvcHRhcmcpICE9IDApCiAJ CQkJCW9wdHMtPmZvcm1hdE5hbWUgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKKwkJ CWNhc2UgJ2cnOgorCQkJCS8qIHJlc3RvcmUgb25seSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLwor CQkJCWdsb2JhbHNfb25seSA9IHRydWU7CisJCQkJYnJlYWs7CiAJCQljYXNlICdoJzoKIAkJCQlp ZiAoc3RybGVuKG9wdGFyZykgIT0gMCkKIAkJCQkJb3B0cy0+Y3BhcmFtcy5wZ2hvc3QgPSBwZ19z dHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKLQogCQkJY2FzZSAnaic6CQkJLyogbnVtYmVyIG9m IHJlc3RvcmUgam9icyAqLwogCQkJCWlmICghb3B0aW9uX3BhcnNlX2ludChvcHRhcmcsICItai8t LWpvYnMiLCAxLAogCQkJCQkJCQkJICBQR19NQVhfSk9CUywKQEAgLTMyMSw2ICszNTUsMTAgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJb3B0cy0+cmVzdHJpY3Rfa2V5ID0gcGdf c3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CiAKKwkJCWNhc2UgNzoJCQkJLyogZGF0YWJhc2Ug cGF0dGVybnMgdG8gc2tpcCAqLworCQkJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoJmRiX2V4 Y2x1ZGVfcGF0dGVybnMsIG9wdGFyZyk7CisJCQkJYnJlYWs7CisKIAkJCWRlZmF1bHQ6CiAJCQkJ LyogZ2V0b3B0X2xvbmcgYWxyZWFkeSBlbWl0dGVkIGEgY29tcGxhaW50ICovCiAJCQkJcGdfbG9n X2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHBy b2duYW1lKTsKQEAgLTM0Nyw2ICszODUsMTMgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJaWYgKCFvcHRzLT5jcGFyYW1zLmRibmFtZSAmJiAhb3B0cy0+ZmlsZW5hbWUgJiYgIW9wdHMt PnRvY1N1bW1hcnkpCiAJCXBnX2ZhdGFsKCJvbmUgb2YgLWQvLS1kYm5hbWUgYW5kIC1mLy0tZmls ZSBtdXN0IGJlIHNwZWNpZmllZCIpOwogCisJaWYgKGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAh PSBOVUxMICYmIGdsb2JhbHNfb25seSkKKwl7CisJCXBnX2xvZ19lcnJvcigib3B0aW9uIC0tZXhj bHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1v bmx5Iik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBp bmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXRfbmljZWx5KDEpOworCX0KKwogCS8qIFNo b3VsZCBnZXQgYXQgbW9zdCBvbmUgb2YgLWQgYW5kIC1mLCBlbHNlIHVzZXIgaXMgY29uZnVzZWQg Ki8KIAlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCiAJewpAQCAtNDcyLDYgKzUxNywxMjEgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCSBvcHRzLT5mb3JtYXROYW1lKTsKIAl9 CiAKKwkvKgorCSAqIElmIHRvYy5nbG8gZmlsZSBpcyBwcmVzZW50LCB0aGVuIHJlc3RvcmUgYWxs IHRoZQorCSAqIGRhdGFiYXNlcyBmcm9tIG1hcC5kYXQsIGJ1dCBza2lwIHJlc3RvcmluZyB0aG9z ZSBtYXRjaGluZworCSAqIC0tZXhjbHVkZS1kYXRhYmFzZSBwYXR0ZXJucy4KKwkgKi8KKwlpZiAo aW5wdXRGaWxlU3BlYyAhPSBOVUxMICYmCisJCQkoZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGlu cHV0RmlsZVNwZWMsICJ0b2MuZ2xvIikpKQorCXsKKwkJLyoKKwkJICogQ2FuIG9ubHkgdXNlIC0t bGlzdCBvciAtLXVzZS1saXN0IG9wdGlvbnMgd2l0aCBhIHNpbmdsZSBkYXRhYmFzZQorCQkgKiBk dW1wLgorCQkgKi8KKwkJaWYgKG9wdHMtPnRvY1N1bW1hcnkpCisJCQlwZ19mYXRhbCgib3B0aW9u IC1sLy0tbGlzdCBjYW5ub3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0 ZWQgYnkgcGdfZHVtcGFsbCIpOworCQllbHNlIGlmIChvcHRzLT50b2NGaWxlKQorCQkJcGdfZmF0 YWwoIm9wdGlvbiAtTC8tLXVzZS1saXN0IGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFu IGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIik7CisKKwkJLyoKKwkJICogVG8gcmVzdG9y ZSBmcm9tIGEgcGdfZHVtcGFsbCBhcmNoaXZlLCAtQyAoY3JlYXRlIGRhdGFiYXNlKSBvcHRpb24K KwkJICogbXVzdCBiZSBzcGVjaWZpZWQgdW5sZXNzIHdlIGFyZSBvbmx5IHJlc3RvcmluZyBnbG9i YWxzLgorCQkgKi8KKwkJaWYgKCFnbG9iYWxzX29ubHkgJiYgb3B0cy0+Y3JlYXRlREIgIT0gMSkK KwkJeworCQkJcGdfbG9nX2Vycm9yKCJvcHRpb24gLUMvLS1jcmVhdGUgbXVzdCBiZSBzcGVjaWZp ZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiKTsKKwkJ CXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlv bi4iLCBwcm9nbmFtZSk7CisJCQlwZ19sb2dfZXJyb3JfaGludCgiSW5kaXZpZHVhbCBkYXRhYmFz ZXMgY2FuIGJlIHJlc3RvcmVkIHVzaW5nIHRoZWlyIHNwZWNpZmljIGFyY2hpdmVzLiIpOworCQkJ ZXhpdF9uaWNlbHkoMSk7CisJCX0KKworCQkvKiBJZiBnbG9iYWxzLW9ubHksIHRoZW4gcmV0dXJu IGZyb20gaGVyZS4gKi8KKwkJaWYgKGdsb2JhbHNfb25seSkKKwkJeworCQkJY2hhcglnbG9iYWxf cGF0aFtNQVhQR1BBVEhdOworCisJCQkvKiBTZXQgcGF0aCBmb3IgdG9jLmdsbyBmaWxlLiAqLwor CQkJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1BWFBHUEFUSCwgIiVzL3RvYy5nbG8iLCBpbnB1dEZp bGVTcGVjKTsKKwkJCW5fZXJyb3JzID0gcmVzdG9yZV9nbG9iYWxfb2JqZWN0cyhnbG9iYWxfcGF0 aCwgb3B0cywgbnVtV29ya2VycywgMCwgZ2xvYmFsc19vbmx5KTsKKworCQkJcGdfbG9nX2luZm8o ImRhdGFiYXNlIHJlc3RvcmluZyBza2lwcGVkIGJlY2F1c2Ugb3B0aW9uIC1nLy0tZ2xvYmFscy1v bmx5IHdhcyBzcGVjaWZpZWQiKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIE5vdyByZXN0b3Jl IGFsbCB0aGUgZGF0YWJhc2VzIGZyb20gbWFwLmRhdCAqLworCQkJbl9lcnJvcnMgPSByZXN0b3Jl X2FsbF9kYXRhYmFzZXMoaW5wdXRGaWxlU3BlYywgZGJfZXhjbHVkZV9wYXR0ZXJucywKKwkJCQkJ CQkJCQkJIG9wdHMsIG51bVdvcmtlcnMpOworCQl9CisKKwkJLyogRnJlZSBkYiBwYXR0ZXJuIGxp c3QuICovCisJCXNpbXBsZV9zdHJpbmdfbGlzdF9kZXN0cm95KCZkYl9leGNsdWRlX3BhdHRlcm5z KTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxM KQorCQl7CisJCQlzaW1wbGVfc3RyaW5nX2xpc3RfZGVzdHJveSgmZGJfZXhjbHVkZV9wYXR0ZXJu cyk7CisJCQlwZ19mYXRhbCgib3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW4gYmUgdXNlZCBv bmx5IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIik7CisJ CX0KKworCQlpZiAoZ2xvYmFsc19vbmx5KQorCQkJcGdfZmF0YWwoIm9wdGlvbiAtZy8tLWdsb2Jh bHMtb25seSBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRl ZCBieSBwZ19kdW1wYWxsIik7CisKKwkJLyogUHJvY2VzcyBpZiB0b2MuZ2xvIGZpbGUgZG9lcyBu b3QgZXhpc3QuICovCisJCW5fZXJyb3JzID0gcmVzdG9yZV9vbmVfZGF0YWJhc2UoaW5wdXRGaWxl U3BlYywgb3B0cywKKwkJCQludW1Xb3JrZXJzLCBmYWxzZSwgMCwgZ2xvYmFsc19vbmx5KTsKKwl9 CisKKwkvKiBEb25lLCBwcmludCBhIHN1bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMgZHVyaW5nIHJl c3RvcmUuICovCisJaWYgKG5fZXJyb3JzKQorCXsKKwkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBp Z25vcmVkIG9uIHJlc3RvcmU6ICVkIiwgbl9lcnJvcnMpOworCQlyZXR1cm4gMTsKKwl9CisKKwly ZXR1cm4gMDsKK30KKworLyoKKyAqIHJlc3RvcmVfZ2xvYmFsX29iamVjdHMKKyAqCisgKiBUaGlz IHJlc3RvcmUgYWxsIGdsb2JhbCBvYmplY3RzLgorICoKKyAqIElmIGdsb2JhbHNfb25seSBpcyBz ZXQsIHRoZW4gc2tpcCBEUk9QIERBVEFCQVNFIGNvbW1hbmRzIGZyb20gcmVzdG9yZS4KKyAqLwor c3RhdGljIGludCByZXN0b3JlX2dsb2JhbF9vYmplY3RzKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNw ZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQlpbnQgbnVtV29ya2VycywgaW50IG51bSwgYm9v bCBnbG9iYWxzX29ubHkpCit7CisJaW50CW5lcnJvcjsKKwlpbnQJZm9ybWF0ID0gb3B0cy0+Zm9y bWF0OworCisJLyogU2V0IGZvcm1hdCBhcyBjdXN0b20gc28gdGhhdCB0b2MuZ2xvIGZpbGUgY2Fu IGJlIHJlYWQuICovCisJb3B0cy0+Zm9ybWF0ID0gYXJjaEN1c3RvbTsKKworCW5lcnJvciA9IHJl c3RvcmVfb25lX2RhdGFiYXNlKGlucHV0RmlsZVNwZWMsIG9wdHMsIG51bVdvcmtlcnMsCisJCQlm YWxzZSwgbnVtLCBnbG9iYWxzX29ubHkpOworCisJLyogUmVzZXQgZm9ybWF0IHZhbHVlLiAqLwor CW9wdHMtPmZvcm1hdCA9IGZvcm1hdDsKKworCXJldHVybiBuZXJyb3I7Cit9CisKKy8qCisgKiBy ZXN0b3JlX29uZV9kYXRhYmFzZQorICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIG9uZSBkYXRhYmFz ZSB1c2luZyB0b2MuZGF0IGZpbGUuCisgKgorICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGVycm9y cyB3aGlsZSBkb2luZyByZXN0b3JlLgorICovCitzdGF0aWMgaW50CityZXN0b3JlX29uZV9kYXRh YmFzZShjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJ CQkJIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLCBpbnQgbnVtLCBib29sIGdsb2Jh bHNfb25seSkKK3sKKwlBcmNoaXZlICAgICpBSDsKKwlpbnQJCQluX2Vycm9yczsKKwogCUFIID0g T3BlbkFyY2hpdmUoaW5wdXRGaWxlU3BlYywgb3B0cy0+Zm9ybWF0KTsKIAogCVNldEFyY2hpdmVP cHRpb25zKEFILCBOVUxMLCBvcHRzKTsKQEAgLTQ3OSw5ICs2MzksMTUgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiAJLyoKIAkgKiBXZSBkb24ndCBoYXZlIGEgY29ubmVjdGlvbiB5ZXQg YnV0IHRoYXQgZG9lc24ndCBtYXR0ZXIuIFRoZSBjb25uZWN0aW9uCiAJICogaXMgaW5pdGlhbGl6 ZWQgdG8gTlVMTCBhbmQgaWYgd2UgdGVybWluYXRlIHRocm91Z2ggZXhpdF9uaWNlbHkoKSB3aGls ZQotCSAqIGl0J3Mgc3RpbGwgTlVMTCwgdGhlIGNsZWFudXAgZnVuY3Rpb24gd2lsbCBqdXN0IGJl IGEgbm8tb3AuCisJICogaXQncyBzdGlsbCBOVUxMLCB0aGUgY2xlYW51cCBmdW5jdGlvbiB3aWxs IGp1c3QgYmUgYSBuby1vcC4gSWYgd2UgYXJlCisJICogcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFi YXNlcywgdGhlbiBvbmx5IHVwZGF0ZSBBWCBoYW5kbGUgZm9yIGNsZWFudXAgYXMKKwkgKiB0aGUg cHJldmlvdXMgZW50cnkgd2FzIGFscmVhZHkgaW4gdGhlIGFycmF5IGFuZCB3ZSBoYWQgY2xvc2Vk IHByZXZpb3VzCisJICogY29ubmVjdGlvbiwgc28gd2UgY2FuIHVzZSB0aGUgc2FtZSBhcnJheSBz bG90LgogCSAqLwotCW9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CisJaWYgKCFhcHBlbmRfZGF0 YSB8fCBudW0gPT0gMCkKKwkJb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKKwllbHNlCisJCXJl cGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKIAogCS8qIExldCB0aGUgYXJjaGl2ZXIg a25vdyBob3cgbm9pc3kgdG8gYmUgKi8KIAlBSC0+dmVyYm9zZSA9IG9wdHMtPnZlcmJvc2U7CkBA IC01MDEsMjUgKzY2NywyMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAllbHNlCiAJ ewogCQlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFIKTsKLQkJUmVzdG9yZUFyY2hpdmUo QUgpOworCQlSZXN0b3JlQXJjaGl2ZShBSCwgYXBwZW5kX2RhdGEsIGdsb2JhbHNfb25seSk7CiAJ fQogCi0JLyogZG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3JzICovCi0JaWYg KEFILT5uX2Vycm9ycykKLQkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9uIHJlc3Rv cmU6ICVkIiwgQUgtPm5fZXJyb3JzKTsKKwluX2Vycm9ycyA9IEFILT5uX2Vycm9yczsKIAogCS8q IEFIIG1heSBiZSBmcmVlZCBpbiBDbG9zZUFyY2hpdmU/ICovCi0JZXhpdF9jb2RlID0gQUgtPm5f ZXJyb3JzID8gMSA6IDA7Ci0KIAlDbG9zZUFyY2hpdmUoQUgpOwogCi0JcmV0dXJuIGV4aXRfY29k ZTsKKwlyZXR1cm4gbl9lcnJvcnM7CiB9CiAKIHN0YXRpYyB2b2lkCiB1c2FnZShjb25zdCBjaGFy ICpwcm9nbmFtZSkKIHsKLQlwcmludGYoXygiJXMgcmVzdG9yZXMgYSBQb3N0Z3JlU1FMIGRhdGFi YXNlIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAuXG5cbiIpLCBwcm9nbmFtZSk7 CisJcHJpbnRmKF8oIiVzIHJlc3RvcmVzIFBvc3RncmVTUUwgZGF0YWJhc2VzIGZyb20gYXJjaGl2 ZXMgY3JlYXRlZCBieSBwZ19kdW1wIG9yIHBnX2R1bXBhbGwuXG5cbiIpLCBwcm9nbmFtZSk7CiAJ cHJpbnRmKF8oIlVzYWdlOlxuIikpOwogCXByaW50ZihfKCIgICVzIFtPUFRJT05dLi4uIFtGSUxF XVxuIiksIHByb2duYW1lKTsKIApAQCAtNTM3LDYgKzY5OSw3IEBAIHVzYWdlKGNvbnN0IGNoYXIg KnByb2duYW1lKQogCXByaW50ZihfKCIgIC1jLCAtLWNsZWFuICAgICAgICAgICAgICAgICAgY2xl YW4gKGRyb3ApIGRhdGFiYXNlIG9iamVjdHMgYmVmb3JlIHJlY3JlYXRpbmdcbiIpKTsKIAlwcmlu dGYoXygiICAtQywgLS1jcmVhdGUgICAgICAgICAgICAgICAgIGNyZWF0ZSB0aGUgdGFyZ2V0IGRh dGFiYXNlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLWUsIC0tZXhpdC1vbi1lcnJvciAgICAgICAgICBl eGl0IG9uIGVycm9yLCBkZWZhdWx0IGlzIHRvIGNvbnRpbnVlXG4iKSk7CisJcHJpbnRmKF8oIiAg LWcsIC0tZ2xvYmFscy1vbmx5ICAgICAgICAgICByZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVjdHMs IG5vIGRhdGFiYXNlc1xuIikpOwogCXByaW50ZihfKCIgIC1JLCAtLWluZGV4PU5BTUUgICAgICAg ICAgICAgcmVzdG9yZSBuYW1lZCBpbmRleFxuIikpOwogCXByaW50ZihfKCIgIC1qLCAtLWpvYnM9 TlVNICAgICAgICAgICAgICAgdXNlIHRoaXMgbWFueSBwYXJhbGxlbCBqb2JzIHRvIHJlc3RvcmVc biIpKTsKIAlwcmludGYoXygiICAtTCwgLS11c2UtbGlzdD1GSUxFTkFNRSAgICAgIHVzZSB0YWJs ZSBvZiBjb250ZW50cyBmcm9tIHRoaXMgZmlsZSBmb3JcbiIKQEAgLTU1Myw2ICs3MTYsNyBAQCB1 c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtMSwgLS1zaW5nbGUtdHJh bnNhY3Rpb24gICAgIHJlc3RvcmUgYXMgYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiIpKTsKIAlwcmlu dGYoXygiICAtLWRpc2FibGUtdHJpZ2dlcnMgICAgICAgICAgIGRpc2FibGUgdHJpZ2dlcnMgZHVy aW5nIGRhdGEtb25seSByZXN0b3JlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1lbmFibGUtcm93LXNl Y3VyaXR5ICAgICAgICBlbmFibGUgcm93IHNlY3VyaXR5XG4iKSk7CisJcHJpbnRmKF8oIiAgLS1l eGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4gICBkbyBub3QgcmVzdG9yZSB0aGUgc3BlY2lmaWVkIGRh dGFiYXNlKHMpXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1maWx0ZXI9RklMRU5BTUUgICAgICAgICAg ICByZXN0b3JlIG9yIHNraXAgb2JqZWN0cyBiYXNlZCBvbiBleHByZXNzaW9uc1xuIgogCQkJICIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRklMRU5BTUVcbiIpKTsKIAlwcmludGYo XygiICAtLWlmLWV4aXN0cyAgICAgICAgICAgICAgICAgIHVzZSBJRiBFWElTVFMgd2hlbiBkcm9w cGluZyBvYmplY3RzXG4iKSk7CkBAIC01ODgsOCArNzUyLDggQEAgdXNhZ2UoY29uc3QgY2hhciAq cHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLS1yb2xlPVJPTEVOQU1FICAgICAgICAgIGRvIFNFVCBS T0xFIGJlZm9yZSByZXN0b3JlXG4iKSk7CiAKIAlwcmludGYoXygiXG4iCi0JCQkgIlRoZSBvcHRp b25zIC1JLCAtbiwgLU4sIC1QLCAtdCwgLVQsIGFuZCAtLXNlY3Rpb24gY2FuIGJlIGNvbWJpbmVk IGFuZCBzcGVjaWZpZWRcbiIKLQkJCSAibXVsdGlwbGUgdGltZXMgdG8gc2VsZWN0IG11bHRpcGxl IG9iamVjdHMuXG4iKSk7CisJCQkgIlRoZSBvcHRpb25zIC1JLCAtbiwgLU4sIC1QLCAtdCwgLVQs IC0tc2VjdGlvbiwgYW5kIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW4gYmVcbiIKKwkJCSAiY29tYmlu ZWQgYW5kIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3QgbXVsdGlwbGUgb2JqZWN0 cy5cbiIpKTsKIAlwcmludGYoXygiXG5JZiBubyBpbnB1dCBmaWxlIG5hbWUgaXMgc3VwcGxpZWQs IHRoZW4gc3RhbmRhcmQgaW5wdXQgaXMgdXNlZC5cblxuIikpOwogCXByaW50ZihfKCJSZXBvcnQg YnVncyB0byA8JXM+LlxuIiksIFBBQ0tBR0VfQlVHUkVQT1JUKTsKIAlwcmludGYoXygiJXMgaG9t ZSBwYWdlOiA8JXM+XG4iKSwgUEFDS0FHRV9OQU1FLCBQQUNLQUdFX1VSTCk7CkBAIC02OTQsMyAr ODU4LDQwNyBAQCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVz dG9yZU9wdGlvbnMgKm9wdHMpCiAKIAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAq IGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeQorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmls ZSBleGlzdHMgaW4gdGhlIGdpdmVuIGRpcmVjdG9yeS4KKyAqLworc3RhdGljIGJvb2wKK2ZpbGVf ZXhpc3RzX2luX2RpcmVjdG9yeShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1l KQoreworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIJCWJ1ZltNQVhQR1BBVEhdOworCisJaWYgKHNu cHJpbnRmKGJ1ZiwgTUFYUEdQQVRILCAiJXMvJXMiLCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQR1BB VEgpCisJCXBnX2ZhdGFsKCJkaXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwgZGlyKTsK KworCXJldHVybiAoc3RhdChidWYsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKTsK K30KKworLyoKKyAqIGdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZQorICoKKyAqIFRoaXMgd2ls bCBtYXJrIGZvciBza2lwcGluZyBhbnkgZW50cmllcyBmcm9tIGRibmFtZV9vaWRfbGlzdCB0aGF0 IHBhdHRlcm4gbWF0Y2ggYW4KKyAqIGVudHJ5IGluIHRoZSBkYl9leGNsdWRlX3BhdHRlcm5zIGxp c3QuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRhdGFiYXNlIHRvIGJlIHJlc3RvcmVk LgorICoKKyAqLworc3RhdGljIGludAorZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlKFBHY29u biAqY29ubiwKKwkJCQkJCQlTaW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QsCisJCQkJCQkJ U2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKQoreworCWludAkJCWNvdW50X2Ri ID0gMDsKKwlQUUV4cEJ1ZmZlciBxdWVyeTsKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwlxdWVyeSA9 IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwlpZiAoIWNvbm4gJiYgZGJfZXhjbHVkZV9wYXR0ZXJu cy5oZWFkICE9IE5VTEwpCisJCXBnX2xvZ19pbmZvKCJjb25zaWRlcmluZyBQQVRURVJOIGFzIE5B TUUgZm9yIC0tZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24gYXMgbm8gZGF0YWJhc2UgY29ubmVjdGlv biB3aGlsZSBkb2luZyBwZ19yZXN0b3JlIik7CisKKwkvKgorCSAqIFByb2Nlc3Mgb25lIGJ5IG9u ZSBhbGwgZGJuYW1lcyBhbmQgaWYgc3BlY2lmaWVkIHRvIHNraXAgcmVzdG9yaW5nLCB0aGVuCisJ ICogcmVtb3ZlIGRibmFtZSBmcm9tIGxpc3QuCisJICovCisJZm9yIChTaW1wbGVQdHJMaXN0Q2Vs bCAqZGJfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC0+aGVhZDsKKwkJIGRiX2NlbGw7IGRiX2NlbGwg PSBkYl9jZWxsLT5uZXh0KQorCXsKKwkJRGJPaWROYW1lICAqZGJpZG5hbWUgPSAoRGJPaWROYW1l ICopIGRiX2NlbGwtPnB0cjsKKwkJYm9vbAkJc2tpcF9kYl9yZXN0b3JlID0gZmFsc2U7CisJCVBR RXhwQnVmZmVyIGRiX2xpdCA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJYXBwZW5kU3RyaW5n TGl0ZXJhbENvbm4oZGJfbGl0LCBkYmlkbmFtZS0+c3RyLCBjb25uKTsKKworCQlmb3IgKFNpbXBs ZVN0cmluZ0xpc3RDZWxsICpwYXRfY2VsbCA9IGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZDsgcGF0 X2NlbGw7IHBhdF9jZWxsID0gcGF0X2NlbGwtPm5leHQpCisJCXsKKwkJCS8qCisJCQkgKiBJZiB0 aGVyZSBpcyBhbiBleGFjdCBtYXRjaCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gdHJ5IGEgcGF0dGVy bgorCQkJICogbWF0Y2gKKwkJCSAqLworCQkJaWYgKHBnX3N0cmNhc2VjbXAoZGJpZG5hbWUtPnN0 ciwgcGF0X2NlbGwtPnZhbCkgPT0gMCkKKwkJCQlza2lwX2RiX3Jlc3RvcmUgPSB0cnVlOworCQkJ LyogT3RoZXJ3aXNlLCB0cnkgYSBwYXR0ZXJuIG1hdGNoIGlmIHRoZXJlIGlzIGEgY29ubmVjdGlv biAqLworCQkJZWxzZSBpZiAoY29ubikKKwkJCXsKKwkJCQlpbnQJCQlkb3RjbnQ7CisKKwkJCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIlNFTEVDVCAxICIpOworCQkJCXByb2Nlc3NTUUxO YW1lUGF0dGVybihjb25uLCBxdWVyeSwgcGF0X2NlbGwtPnZhbCwgZmFsc2UsCisJCQkJCQkJCQkg IGZhbHNlLCBOVUxMLCBkYl9saXQtPmRhdGEsCisJCQkJCQkJCQkgIE5VTEwsIE5VTEwsIE5VTEws ICZkb3RjbnQpOworCisJCQkJaWYgKGRvdGNudCA+IDApCisJCQkJeworCQkJCQlwZ19sb2dfZXJy b3IoImltcHJvcGVyIHF1YWxpZmllZCBuYW1lICh0b28gbWFueSBkb3R0ZWQgbmFtZXMpOiAlcyIs CisJCQkJCQkJCSBkYmlkbmFtZS0+c3RyKTsKKwkJCQkJUFFmaW5pc2goY29ubik7CisJCQkJCWV4 aXRfbmljZWx5KDEpOworCQkJCX0KKworCQkJCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBxdWVy eS0+ZGF0YSwgZmFsc2UpOworCisJCQkJaWYgKChQUXJlc3VsdFN0YXR1cyhyZXMpID09IFBHUkVT X1RVUExFU19PSykgJiYgUFFudHVwbGVzKHJlcykpCisJCQkJeworCQkJCQlza2lwX2RiX3Jlc3Rv cmUgPSB0cnVlOworCQkJCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgbmFtZSBcIiVzXCIgbWF0Y2hl cyBleGNsdWRlIHBhdHRlcm4gXCIlc1wiIiwgZGJpZG5hbWUtPnN0ciwgcGF0X2NlbGwtPnZhbCk7 CisJCQkJfQorCisJCQkJUFFjbGVhcihyZXMpOworCQkJCXJlc2V0UFFFeHBCdWZmZXIocXVlcnkp OworCQkJfQorCisJCQlpZiAoc2tpcF9kYl9yZXN0b3JlKQorCQkJCWJyZWFrOworCQl9CisKKwkJ ZGVzdHJveVBRRXhwQnVmZmVyKGRiX2xpdCk7CisKKwkJLyoKKwkJICogTWFyayBkYiB0byBiZSBz a2lwcGVkIG9yIGluY3JlbWVudCB0aGUgY291bnRlciBvZiBkYnMgdG8gYmUKKwkJICogcmVzdG9y ZWQKKwkJICovCisJCWlmIChza2lwX2RiX3Jlc3RvcmUpCisJCXsKKwkJCXBnX2xvZ19pbmZvKCJl eGNsdWRpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJpZG5hbWUtPnN0cik7CisJCQlkYmlkbmFtZS0+ b2lkID0gSW52YWxpZE9pZDsKKwkJfQorCQllbHNlCisJCXsKKwkJCWNvdW50X2RiKys7CisJCX0K Kwl9CisKKwlkZXN0cm95UFFFeHBCdWZmZXIocXVlcnkpOworCisJcmV0dXJuIGNvdW50X2RiOwor fQorCisvKgorICogZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlCisgKgorICogT3BlbiBt YXAuZGF0IGZpbGUgYW5kIHJlYWQgbGluZSBieSBsaW5lIGFuZCB0aGVuIHByZXBhcmUgYSBsaXN0 IG9mIGRhdGFiYXNlCisgKiBuYW1lcyBhbmQgY29ycmVzcG9uZGluZyBkYl9vaWQuCisgKgorICog UmV0dXJucywgdG90YWwgbnVtYmVyIG9mIGRhdGFiYXNlIG5hbWVzIGluIG1hcC5kYXQgZmlsZS4K KyAqLworc3RhdGljIGludAorZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0IGNo YXIgKmR1bXBkaXJwYXRoLCBTaW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QpCit7CisJU3Ry aW5nSW5mb0RhdGEgbGluZWJ1ZjsKKwlGSUxFCSAgICpwZmlsZTsKKwljaGFyCQltYXBfZmlsZV9w YXRoW01BWFBHUEFUSF07CisJaW50CQkJY291bnQgPSAwOworCisKKwkvKgorCSAqIElmIHRoZXJl IGlzIG5vIG1hcC5kYXQgZmlsZSBpbiBkdW1wLCB0aGVuIHJldHVybiBmcm9tIGhlcmUgYXMKKwkg KiB0aGVyZSBpcyBubyBkYXRhYmFzZSB0byByZXN0b3JlLgorCSAqLworCWlmICghZmlsZV9leGlz dHNfaW5fZGlyZWN0b3J5KGR1bXBkaXJwYXRoLCAibWFwLmRhdCIpKQorCXsKKwkJcGdfbG9nX2lu Zm8oImRhdGFiYXNlIHJlc3RvcmluZyBpcyBza2lwcGVkIGJlY2F1c2UgZmlsZSBcIiVzXCIgZG9l cyBub3QgZXhpc3QgaW4gZGlyZWN0b3J5IFwiJXNcIiIsICJtYXAuZGF0IiwgZHVtcGRpcnBhdGgp OworCQlyZXR1cm4gMDsKKwl9CisKKwlzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgs ICIlcy9tYXAuZGF0IiwgZHVtcGRpcnBhdGgpOworCisJLyogT3BlbiBtYXAuZGF0IGZpbGUuICov CisJcGZpbGUgPSBmb3BlbihtYXBfZmlsZV9wYXRoLCBQR19CSU5BUllfUik7CisKKwlpZiAocGZp bGUgPT0gTlVMTCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIs IG1hcF9maWxlX3BhdGgpOworCisJaW5pdFN0cmluZ0luZm8oJmxpbmVidWYpOworCisJLyogQXBw ZW5kIGFsbCB0aGUgZGJuYW1lL2RiX29pZCBjb21iaW5hdGlvbnMgdG8gdGhlIGxpc3QuICovCisJ d2hpbGUgKHBnX2dldF9saW5lX2J1ZihwZmlsZSwgJmxpbmVidWYpKQorCXsKKwkJT2lkCQkJZGJf b2lkID0gSW52YWxpZE9pZDsKKwkJY2hhcgkgICAqZGJuYW1lOworCQlEYk9pZE5hbWUgICpkYmlk bmFtZTsKKwkJaW50CQkJbmFtZWxlbjsKKwkJY2hhcgkgICAqcCA9IGxpbmVidWYuZGF0YTsKKwor CQkvKiBFeHRyYWN0IGRib2lkLiAqLworCQl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikg KnApKQorCQkJcCsrOworCQlpZiAocCA+IGxpbmVidWYuZGF0YSAmJiAqcCA9PSAnICcpCisJCXsK KwkJCXNzY2FuZihsaW5lYnVmLmRhdGEsICIldSIsICZkYl9vaWQpOworCQkJcCsrOworCQl9CisK KwkJLyogZGJuYW1lIGlzIHRoZSByZXN0IG9mIHRoZSBsaW5lICovCisJCWRibmFtZSA9IHA7CisJ CW5hbWVsZW4gPSBzdHJsZW4oZGJuYW1lKTsKKworCQkvKiBSZXBvcnQgZXJyb3IgYW5kIGV4aXQg aWYgdGhlIGZpbGUgaGFzIGFueSBjb3JydXB0ZWQgZGF0YS4gKi8KKwkJaWYgKCFPaWRJc1ZhbGlk KGRiX29pZCkgfHwgbmFtZWxlbiA8PSAxKQorCQkJcGdfZmF0YWwoImludmFsaWQgZW50cnkgaW4g ZmlsZSBcIiVzXCIgb24gbGluZSAlZCIsIG1hcF9maWxlX3BhdGgsCisJCQkJCSBjb3VudCArIDEp OworCisJCXBnX2xvZ19pbmZvKCJmb3VuZCBkYXRhYmFzZSBcIiVzXCIgKE9JRDogJXUpIGluIGZp bGUgXCIlc1wiIiwKKwkJCQkJZGJuYW1lLCBkYl9vaWQsIG1hcF9maWxlX3BhdGgpOworCisJCWRi aWRuYW1lID0gcGdfbWFsbG9jKG9mZnNldG9mKERiT2lkTmFtZSwgc3RyKSArIG5hbWVsZW4gKyAx KTsKKwkJZGJpZG5hbWUtPm9pZCA9IGRiX29pZDsKKwkJc3RybGNweShkYmlkbmFtZS0+c3RyLCBk Ym5hbWUsIG5hbWVsZW4pOworCisJCXNpbXBsZV9wdHJfbGlzdF9hcHBlbmQoZGJuYW1lX29pZF9s aXN0LCBkYmlkbmFtZSk7CisJCWNvdW50Kys7CisJfQorCisJLyogQ2xvc2UgbWFwLmRhdCBmaWxl LiAqLworCWZjbG9zZShwZmlsZSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiByZXN0 b3JlX2FsbF9kYXRhYmFzZXMKKyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBkYXRhYmFzZXMgdGhv c2UgZHVtcHMgYXJlIHByZXNlbnQgaW4KKyAqIGRpcmVjdG9yeSBiYXNlZCBvbiBtYXAuZGF0IGZp bGUgbWFwcGluZy4KKyAqCisgKiBUaGlzIHdpbGwgc2tpcCByZXN0b3JpbmcgZm9yIGRhdGFiYXNl cyB0aGF0IGFyZSBzcGVjaWZpZWQgd2l0aAorICogZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24uCisg KgorICogcmV0dXJucywgbnVtYmVyIG9mIGVycm9ycyB3aGlsZSBkb2luZyByZXN0b3JlLgorICov CitzdGF0aWMgaW50CityZXN0b3JlX2FsbF9kYXRhYmFzZXMoY29uc3QgY2hhciAqaW5wdXRGaWxl U3BlYywKKwkJCQkJICBTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3Rv cmVPcHRpb25zICpvcHRzLAorCQkJCQkgIGludCBudW1Xb3JrZXJzKQoreworCVNpbXBsZVB0ckxp c3QgZGJuYW1lX29pZF9saXN0ID0ge05VTEwsIE5VTEx9OworCWludAkJCW51bV9kYl9yZXN0b3Jl ID0gMDsKKwlpbnQJCQludW1fdG90YWxfZGI7CisJaW50CQkJbl9lcnJvcnNfdG90YWw7CisJY2hh cgkgICAqY29ubmVjdGVkX2RiID0gTlVMTDsKKwlib29sCQlkdW1wRGF0YSA9IG9wdHMtPmR1bXBE YXRhOworCWJvb2wJCWR1bXBTY2hlbWEgPSBvcHRzLT5kdW1wU2NoZW1hOworCWJvb2wJCWR1bXBT dGF0aXN0aWNzID0gb3B0cy0+ZHVtcFNjaGVtYTsKKwlQR2Nvbm4gKmNvbm4gPSBOVUxMOworCWNo YXIJCWdsb2JhbF9wYXRoW01BWFBHUEFUSF07CisKKwkvKiBTZXQgcGF0aCBmb3IgdG9jLmdsbyBm aWxlLiAqLworCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcy90b2MuZ2xvIiwg aW5wdXRGaWxlU3BlYyk7CisKKwkvKiBTYXZlIGRiIG5hbWUgdG8gcmV1c2UgaXQgZm9yIGFsbCB0 aGUgZGF0YWJhc2UuICovCisJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQorCQljb25uZWN0ZWRf ZGIgPSBvcHRzLT5jcGFyYW1zLmRibmFtZTsKKworCW51bV90b3RhbF9kYiA9IGdldF9kYm5hbWVf b2lkX2xpc3RfZnJvbV9tZmlsZShpbnB1dEZpbGVTcGVjLCAmZGJuYW1lX29pZF9saXN0KTsKKwor CS8qIElmIG1hcC5kYXQgaGFzIG5vIGVudHJpZXMsIHJldHVybiBhZnRlciBwcm9jZXNzaW5nIGds b2JhbCBjb21tYW5kcy4gKi8KKwlpZiAoZGJuYW1lX29pZF9saXN0LmhlYWQgPT0gTlVMTCkKKwkJ cmV0dXJuIHJlc3RvcmVfZ2xvYmFsX29iamVjdHMoZ2xvYmFsX3BhdGgsIG9wdHMsIG51bVdvcmtl cnMsIDAsIGZhbHNlKTsKKworCXBnX2xvZ19pbmZvKG5nZXR0ZXh0KCJmb3VuZCAlZCBkYXRhYmFz ZSBuYW1lIGluIFwiJXNcIiIsCisJCQkJCQkgImZvdW5kICVkIGRhdGFiYXNlIG5hbWVzIGluIFwi JXNcIiIsCisJCQkJCQkgbnVtX3RvdGFsX2RiKSwKKwkJCQludW1fdG90YWxfZGIsICJtYXAuZGF0 Iik7CisKKwkvKgorCSAqIElmIGV4Y2x1ZGUtcGF0dGVybnMgaXMgZ2l2ZW4sIHRoZW4gY29ubmVj dCB0byB0aGUgZGF0YWJhc2UgdG8gcHJvY2VzcworCSAqIGl0LgorCSAqLworCWlmIChkYl9leGNs dWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCkKKwl7CisJCWlmIChvcHRzLT5jcGFyYW1zLmRibmFt ZSkKKwkJeworCQkJY29ubiA9IENvbm5lY3REYXRhYmFzZShvcHRzLT5jcGFyYW1zLmRibmFtZSwg TlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBv cHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJZmFsc2UsIHByb2duYW1l LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCQkJaWYgKCFjb25uKQorCQkJCXBnX2ZhdGFs KCJjb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCBvcHRzLT5jcGFyYW1zLmRi bmFtZSk7CisJCX0KKworCQlpZiAoIWNvbm4pCisJCXsKKwkJCXBnX2xvZ19pbmZvKCJ0cnlpbmcg dG8gY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCAicG9zdGdyZXMiKTsKKworCQkJY29ubiA9 IENvbm5lY3REYXRhYmFzZSgicG9zdGdyZXMiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwK KwkJCQkJb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9E RUZBVUxULAorCQkJCQlmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwor CisJCQkvKiBUcnkgd2l0aCB0ZW1wbGF0ZTEuICovCisJCQlpZiAoIWNvbm4pCisJCQl7CisJCQkJ cGdfbG9nX2luZm8oInRyeWluZyB0byBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsICJ0ZW1w bGF0ZTEiKTsKKworCQkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2UoInRlbXBsYXRlMSIsIE5VTEws IG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMt PmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULAorCQkJCQkJZmFsc2UsIHByb2duYW1lLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogZmlsdGVy IHRoZSBkYiBsaXN0IGFjY29yZGluZyB0byB0aGUgZXhjbHVkZSBwYXR0ZXJucworCSAqLworCW51 bV9kYl9yZXN0b3JlID0gZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlKGNvbm4sICZkYm5hbWVf b2lkX2xpc3QsCisJCQkJCQkJCQkJCQkgZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisKKwkvKiBDbG9z ZSB0aGUgZGIgY29ubmVjdGlvbiBhcyB3ZSBhcmUgZG9uZSB3aXRoIGdsb2JhbHMgYW5kIHBhdHRl cm5zLiAqLworCWlmIChjb25uKQorCQlQUWZpbmlzaChjb25uKTsKKworCS8qIE9wZW4gdG9jLmRh dCBmaWxlIGFuZCBleGVjdXRlL2FwcGVuZCBhbGwgdGhlIGdsb2JhbCBzcWwgY29tbWFuZHMuICov CisJbl9lcnJvcnNfdG90YWwgPSAgcmVzdG9yZV9nbG9iYWxfb2JqZWN0cyhnbG9iYWxfcGF0aCwg b3B0cywgbnVtV29ya2VycywgMCwgZmFsc2UpOworCisJLyogRXhpdCBpZiBubyBkYiBuZWVkcyB0 byBiZSByZXN0b3JlZC4gKi8KKwlpZiAoZGJuYW1lX29pZF9saXN0LmhlYWQgPT0gTlVMTCB8fCBu dW1fZGJfcmVzdG9yZSA9PSAwKQorCXsKKwkJcGdfbG9nX2luZm8obmdldHRleHQoIm5vIGRhdGFi YXNlIG5lZWRzIHJlc3RvcmluZyBvdXQgb2YgJWQgZGF0YWJhc2UiLAorCQkJCQkJCSAibm8gZGF0 YWJhc2UgbmVlZHMgcmVzdG9yaW5nIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fdG90YWxfZGIp LAorCQkJCQludW1fdG90YWxfZGIpOworCQlyZXR1cm4gbl9lcnJvcnNfdG90YWw7CisJfQorCisJ cGdfbG9nX2luZm8oIm5lZWQgdG8gcmVzdG9yZSAlZCBkYXRhYmFzZXMgb3V0IG9mICVkIGRhdGFi YXNlcyIsIG51bV9kYl9yZXN0b3JlLCBudW1fdG90YWxfZGIpOworCisJLyoKKwkgKiBXZSBoYXZl IGEgbGlzdCBvZiBkYXRhYmFzZXMgdG8gcmVzdG9yZSBhZnRlciBwcm9jZXNzaW5nIHRoZQorCSAq IGV4Y2x1ZGUtZGF0YWJhc2Ugc3dpdGNoKGVzKS4gIE5vdyB3ZSBjYW4gcmVzdG9yZSB0aGVtIG9u ZSBieSBvbmUuCisJICovCisJZm9yIChTaW1wbGVQdHJMaXN0Q2VsbCAqZGJfY2VsbCA9IGRibmFt ZV9vaWRfbGlzdC5oZWFkOworCQkgZGJfY2VsbDsgZGJfY2VsbCA9IGRiX2NlbGwtPm5leHQpCisJ eworCQlEYk9pZE5hbWUgICpkYmlkbmFtZSA9IChEYk9pZE5hbWUgKikgZGJfY2VsbC0+cHRyOwor CQljaGFyCQlzdWJkaXJwYXRoW01BWFBHUEFUSF07CisJCWNoYXIJCXN1YmRpcmRicGF0aFtNQVhQ R1BBVEhdOworCQljaGFyCQlkYmZpbGVuYW1lW01BWFBHUEFUSF07CisJCWludAkJCW5fZXJyb3Jz OworCisJCS8qIGlnbm9yZSBkYnMgbWFya2VkIGZvciBza2lwcGluZyAqLworCQlpZiAoZGJpZG5h bWUtPm9pZCA9PSBJbnZhbGlkT2lkKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogV2UgbmVl ZCB0byByZXNldCBvdmVycmlkZV9kYm5hbWUgc28gdGhhdCBvYmplY3RzIGNhbiBiZSByZXN0b3Jl ZAorCQkgKiBpbnRvIGFuIGFscmVhZHkgY3JlYXRlZCBkYXRhYmFzZS4gKHVzZWQgd2l0aCAtZC8t LWRibmFtZSBvcHRpb24pCisJCSAqLworCQlpZiAob3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5h bWUpCisJCXsKKwkJCXBmcmVlKG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lKTsKKwkJCW9w dHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lID0gTlVMTDsKKwkJfQorCisJCXNucHJpbnRmKHN1 YmRpcmRicGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzIiwgaW5wdXRGaWxlU3BlYyk7CisK KwkJLyoKKwkJICogTG9vayBmb3IgdGhlIGRhdGFiYXNlIGR1bXAgZmlsZS9kaXIuIElmIHRoZXJl IGlzIGFuIHtvaWR9LnRhciBvcgorCQkgKiB7b2lkfS5kbXAgZmlsZSwgdXNlIGl0LiBPdGhlcndp c2UgdHJ5IHRvIHVzZSBhIGRpcmVjdG9yeSBjYWxsZWQKKwkJICoge29pZH0KKwkJICovCisJCXNu cHJpbnRmKGRiZmlsZW5hbWUsIE1BWFBHUEFUSCwgIiV1LnRhciIsIGRiaWRuYW1lLT5vaWQpOwor CQlpZiAoZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KHN1YmRpcmRicGF0aCwgZGJmaWxlbmFtZSkp CisJCQlzbnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMvJXUudGFy IiwgaW5wdXRGaWxlU3BlYywgZGJpZG5hbWUtPm9pZCk7CisJCWVsc2UKKwkJeworCQkJc25wcmlu dGYoZGJmaWxlbmFtZSwgTUFYUEdQQVRILCAiJXUuZG1wIiwgZGJpZG5hbWUtPm9pZCk7CisKKwkJ CWlmIChmaWxlX2V4aXN0c19pbl9kaXJlY3Rvcnkoc3ViZGlyZGJwYXRoLCBkYmZpbGVuYW1lKSkK KwkJCQlzbnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMvJXUuZG1w IiwgaW5wdXRGaWxlU3BlYywgZGJpZG5hbWUtPm9pZCk7CisJCQllbHNlCisJCQkJc25wcmludGYo c3ViZGlycGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1IiwgaW5wdXRGaWxlU3BlYywg ZGJpZG5hbWUtPm9pZCk7CisJCX0KKworCQlwZ19sb2dfaW5mbygicmVzdG9yaW5nIGRhdGFiYXNl IFwiJXNcIiIsIGRiaWRuYW1lLT5zdHIpOworCisJCS8qIElmIGRhdGFiYXNlIGlzIGFscmVhZHkg Y3JlYXRlZCwgdGhlbiBkb24ndCBzZXQgY3JlYXRlREIgZmxhZy4gKi8KKwkJaWYgKG9wdHMtPmNw YXJhbXMuZGJuYW1lKQorCQl7CisJCQlQR2Nvbm4JICAgKnRlc3RfY29ubjsKKworCQkJdGVzdF9j b25uID0gQ29ubmVjdERhdGFiYXNlKGRiaWRuYW1lLT5zdHIsIE5VTEwsIG9wdHMtPmNwYXJhbXMu cGdob3N0LAorCQkJCQkJCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVz ZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJCQkJCQlmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwpOworCQkJaWYgKHRlc3RfY29ubikKKwkJCXsKKwkJCQlQUWZpbmlzaCh0 ZXN0X2Nvbm4pOworCisJCQkJLyogVXNlIGFscmVhZHkgY3JlYXRlZCBkYXRhYmFzZSBmb3IgY29u bmVjdGlvbi4gKi8KKwkJCQlvcHRzLT5jcmVhdGVEQiA9IDA7CisJCQkJb3B0cy0+Y3BhcmFtcy5k Ym5hbWUgPSBkYmlkbmFtZS0+c3RyOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qIHdlJ2xs IGhhdmUgdG8gY3JlYXRlIGl0ICovCisJCQkJb3B0cy0+Y3JlYXRlREIgPSAxOworCQkJCW9wdHMt PmNwYXJhbXMuZGJuYW1lID0gY29ubmVjdGVkX2RiOworCQkJfQorCQl9CisKKwkJLyoKKwkJICog UmVzZXQgZmxhZ3MgLSBtaWdodCBoYXZlIGJlZW4gcmVzZXQgaW4gcGdfYmFja3VwX2FyY2hpdmVy LmMgYnkgdGhlCisJCSAqIHByZXZpb3VzIHJlc3RvcmUuCisJCSAqLworCQlvcHRzLT5kdW1wRGF0 YSA9IGR1bXBEYXRhOworCQlvcHRzLT5kdW1wU2NoZW1hID0gZHVtcFNjaGVtYTsKKwkJb3B0cy0+ ZHVtcFN0YXRpc3RpY3MgPSBkdW1wU3RhdGlzdGljczsKKworCQkvKiBSZXN0b3JlIHRoZSBzaW5n bGUgZGF0YWJhc2UuICovCisJCW5fZXJyb3JzID0gcmVzdG9yZV9vbmVfZGF0YWJhc2Uoc3ViZGly cGF0aCwgb3B0cywgbnVtV29ya2VycywgdHJ1ZSwgMSwgZmFsc2UpOworCisJCS8qIFByaW50IGEg c3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyBkdXJpbmcgc2luZ2xlIGRhdGFiYXNlIHJlc3RvcmUu ICovCisJCWlmIChuX2Vycm9ycykKKwkJeworCQkJbl9lcnJvcnNfdG90YWwgKz0gbl9lcnJvcnM7 CisJCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQgb24gZGF0YWJhc2UgXCIlc1wiIHJl c3RvcmU6ICVkIiwgZGJpZG5hbWUtPnN0ciwgbl9lcnJvcnMpOworCQl9CisJfQorCisJLyogTG9n IG51bWJlciBvZiBwcm9jZXNzZWQgZGF0YWJhc2VzLiAqLworCXBnX2xvZ19pbmZvKCJudW1iZXIg b2YgcmVzdG9yZWQgZGF0YWJhc2VzIGlzICVkIiwgbnVtX2RiX3Jlc3RvcmUpOworCisJLyogRnJl ZSBkYm5hbWUgYW5kIGRib2lkIGxpc3QuICovCisJc2ltcGxlX3B0cl9saXN0X2Rlc3Ryb3koJmRi bmFtZV9vaWRfbGlzdCk7CisKKwlyZXR1cm4gbl9lcnJvcnNfdG90YWw7Cit9CmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFf YmFzaWMucGwKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAzN2Q4OTNkNWU2 YS4uMDgzZjVjNWJmOWQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCisrKyBi L3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbApAQCAtMjQ0LDQgKzI0NCwzMSBAQCBjb21t YW5kX2ZhaWxzX2xpa2UoCiAJJ3BnX2R1bXBhbGw6IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2Ug Y2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8tLWdsb2JhbHMtb25seScKICk7CiAKK2Nv bW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19kdW1wYWxsJywgJy0tZm9ybWF0JywgJ3gnIF0sCisJ cXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogdW5yZWNvZ25pemVkIG91dHB1dCBmb3JtYXQgIngiO1xF LywKKwkncGdfZHVtcGFsbDogdW5yZWNvZ25pemVkIG91dHB1dCBmb3JtYXQnKTsKKworY29tbWFu ZF9mYWlsc19saWtlKAorCVsgJ3BnX2R1bXBhbGwnLCAnLS1mb3JtYXQnLCAnZCcsICctLXJlc3Ry aWN0LWtleT11dScsICctZiBkdW1wZmlsZScgXSwKKwlxci9cUXBnX2R1bXBhbGw6IGVycm9yOiBv cHRpb24gLS1yZXN0cmljdC1rZXkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tZm9ybWF0PXBsYWlu XEUvLAorCSdwZ19kdW1wYWxsOiAtLXJlc3RyaWN0LWtleSBjYW4gb25seSBiZSB1c2VkIHdpdGgg cGxhaW4gZHVtcCBmb3JtYXQnKTsKKworY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jlc3Rv cmUnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWdsb2JhbHMtb25seScsICctZCcsICd4 eHgnIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFz ZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nXC8tLWdsb2JhbHMtb25seVxFLywKKwkn cGdfcmVzdG9yZTogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dl dGhlciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5JworKTsKKworY29tbWFuZF9mYWlsc19saWtlKAor CVsgJ3BnX3Jlc3RvcmUnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICctZCcsICd4eHgnLCAn ZHVtcGRpcicgXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLS1leGNsdWRlLWRh dGFiYXNlIGNhbiBiZSB1c2VkIG9ubHkgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVk IGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4gb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBpcyB1 c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXAnCispOworCitjb21tYW5kX2Zh aWxzX2xpa2UoCisJWyAncGdfcmVzdG9yZScsICctLWdsb2JhbHMtb25seScsICctZCcsICd4eHgn LCAnZHVtcGRpcicgXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLWdcLy0tZ2xv YmFscy1vbmx5IGNhbiBiZSB1c2VkIG9ubHkgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVh dGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4gb3B0aW9uIC0tZ2xvYmFscy1vbmx5IGlzIG5v dCB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXAnCispOwogZG9uZV90ZXN0 aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFsbC5wbCBi L3NyYy9iaW4vcGdfZHVtcC90LzAwN19wZ19kdW1wYWxsLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1 CmluZGV4IDAwMDAwMDAwMDAwLi4zYzdkMmFkN2M1MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9i aW4vcGdfZHVtcC90LzAwN19wZ19kdW1wYWxsLnBsCkBAIC0wLDAgKzEsMzk2IEBACisjIENvcHly aWdodCAoYykgMjAyMS0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBU ZXN0OjpNb3JlOworCitteSAkdGVtcGRpciA9IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1w ZGlyOworbXkgJHJ1bl9kYiA9ICdwb3N0Z3Jlcyc7CitteSAkc2VwID0gJHdpbmRvd3Nfb3MgPyAi XFwiIDogIi8iOworCisjIFRhYmxlc3BhY2UgbG9jYXRpb25zIHVzZWQgYnkgInJlc3RvcmVfdGFi bGVzcGFjZSIgdGVzdCBjYXNlLgorbXkgJHRhYmxlc3BhY2UxID0gIiR7dGVtcGRpcn0ke3NlcH10 YmwxIjsKK215ICR0YWJsZXNwYWNlMiA9ICIke3RlbXBkaXJ9JHtzZXB9dGJsMiI7Citta2Rpcigk dGFibGVzcGFjZTEpIHx8IGRpZSAibWtkaXIgJHRhYmxlc3BhY2UxICQhIjsKK21rZGlyKCR0YWJs ZXNwYWNlMikgfHwgZGllICJta2RpciAkdGFibGVzcGFjZTIgJCEiOworCisjIFNjYXBlIHRhYmxl c3BhY2UgbG9jYXRpb25zIG9uIFdpbmRvd3MuCiskdGFibGVzcGFjZTEgPSAkd2luZG93c19vcyA/ ICgkdGFibGVzcGFjZTEgPX4gcy9cXC9cXFxcL2dyKSA6ICR0YWJsZXNwYWNlMTsKKyR0YWJsZXNw YWNlMiA9ICR3aW5kb3dzX29zID8gKCR0YWJsZXNwYWNlMiA9fiBzL1xcL1xcXFwvZ3IpIDogJHRh Ymxlc3BhY2UyOworCisjIFdoZXJlIHBnX2R1bXBhbGwgd2lsbCBiZSBleGVjdXRlZC4KK215ICRu b2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdub2RlJyk7Ciskbm9kZS0+aW5p dDsKKyRub2RlLT5zdGFydDsKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVmaW5pdGlvbiBvZiB0aGUgcGdfZHVt cGFsbCB0ZXN0IGNhc2VzIHRvIHJ1bi4KKyMKKyMgRWFjaCBvZiB0aGVzZSB0ZXN0IGNhc2VzIGFy ZSBuYW1lZCBhbmQgdGhvc2UgbmFtZXMgYXJlIHVzZWQgZm9yIGZhaWwKKyMgcmVwb3J0aW5nIGFu ZCBhbHNvIHRvIHNhdmUgdGhlIGR1bXAgYW5kIHJlc3RvcmUgaW5mb3JtYXRpb24gbmVlZGVkIGZv ciB0aGUKKyMgdGVzdCB0byBhc3NlcnQuCisjCisjIFRoZSAic2V0dXBfc3FsIiBpcyBhIHBzcWwg dmFsaWQgc2NyaXB0IHRoYXQgY29udGFpbnMgU1FMIGNvbW1hbmRzIHRvIGV4ZWN1dGUKKyMgYmVm b3JlIG9mIGFjdHVhbGx5IGV4ZWN1dGUgdGhlIHRlc3RzLiBUaGUgc2V0dXBzIGFyZSBhbGwgZXhl Y3V0ZWQgYmVmb3JlIG9mCisjIGFueSB0ZXN0IGV4ZWN1dGlvbi4KKyMKKyMgVGhlICJkdW1wX2Nt ZCIgYW5kICJyZXN0b3JlX2NtZCIgYXJlIHRoZSBjb21tYW5kcyB0aGF0IHdpbGwgYmUgZXhlY3V0 ZWQuIFRoZQorIyAicmVzdG9yZV9jbWQiIG11c3QgaGF2ZSB0aGUgLS1maWxlIGZsYWcgdG8gc2F2 ZSB0aGUgcmVzdG9yZSBvdXRwdXQgc28gdGhhdCB3ZQorIyBjYW4gYXNzZXJ0IG9uIGl0LgorIwor IyBUaGUgImxpa2UiIGFuZCAidW5saWtlIiBpcyBhIHJlZ2V4cCB0aGF0IGlzIHVzZWQgdG8gbWF0 Y2ggdGhlIHBnX3Jlc3RvcmUKKyMgb3V0cHV0LiBJdCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIG9m IHRoZW4gZmlsbGVkIHBlciB0ZXN0IGNhc2VzIGJ1dCBpdCBhbHNvCisjIGNhbiBoYXZlIGJvdGgu IFNlZSAiZXhjbHVkaW5nX2RhdGFiYXNlcyIgdGVzdCBjYXNlIGZvciBleGFtcGxlLgorbXkgJXBn ZHVtcGFsbF9ydW5zID0gKAorCXJlc3RvcmVfcm9sZXMgPT4geworCQlzZXR1cF9zcWwgPT4gJwor CQlDUkVBVEUgUk9MRSBkdW1wYWxsIFdJVEggRU5DUllQVEVEIFBBU1NXT1JEIFwnYWRtaW5cJyBT VVBFUlVTRVI7CisJCUNSRUFURSBST0xFIGR1bXBhbGwyIFdJVEggUkVQTElDQVRJT04gQ09OTkVD VElPTiBMSU1JVCAxMDsnLAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQkn LS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3Rv cmVfcm9sZXMiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICct QycsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1w ZGlyL3Jlc3RvcmVfcm9sZXMuc3FsIiwKKwkJCSIkdGVtcGRpci9yZXN0b3JlX3JvbGVzIiwKKwkJ XSwKKwkJbGlrZSA9PiBxci8KKwkJCVxzKlxRQ1JFQVRFIFJPTEUgZHVtcGFsbDI7XEUKKwkJCVxz KlxRQUxURVIgUk9MRSBkdW1wYWxsMiBXSVRIIE5PU1VQRVJVU0VSIElOSEVSSVQgTk9DUkVBVEVS T0xFIE5PQ1JFQVRFREIgTk9MT0dJTiBSRVBMSUNBVElPTiBOT0JZUEFTU1JMUyBDT05ORUNUSU9O IExJTUlUIDEwO1xFCisJCS94bQorCX0sCisKKwlyZXN0b3JlX3RhYmxlc3BhY2UgPT4geworCQlz ZXR1cF9zcWwgPT4gIgorCQlDUkVBVEUgUk9MRSB0YXA7CisJCUNSRUFURSBUQUJMRVNQQUNFIHRi bDEgT1dORVIgdGFwIExPQ0FUSU9OICckdGFibGVzcGFjZTEnOworCQlDUkVBVEUgVEFCTEVTUEFD RSB0YmwyIE9XTkVSIHRhcCBMT0NBVElPTiAnJHRhYmxlc3BhY2UyJyBXSVRIIChzZXFfcGFnZV9j b3N0PTEuMCk7IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9y bWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3Rh Ymxlc3BhY2UiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICct QycsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1w ZGlyL3Jlc3RvcmVfdGFibGVzcGFjZS5zcWwiLAorCQkJIiR0ZW1wZGlyL3Jlc3RvcmVfdGFibGVz cGFjZSIsCisJCV0sCisJCSMgTWF0Y2ggIkUiIGFzIG9wdGlvbmFsIHNpbmNlIGl0IGlzIGFkZGVk IG9uIExPQ0FUSU9OIHdoZW4gcnVubmluZyBvbgorCQkjIFdpbmRvd3MuCisJCWxpa2UgPT4gcXIv XgorCQkJXG5cUUNSRUFURSBUQUJMRVNQQUNFIHRibDIgT1dORVIgdGFwIExPQ0FUSU9OIFxFKD86 RSk/XFEnJHRhYmxlc3BhY2UyJztcRQorCQkJXG5cUUFMVEVSIFRBQkxFU1BBQ0UgdGJsMiBTRVQg KHNlcV9wYWdlX2Nvc3Q9MS4wKTtcRQorCQkveG0sCisJfSwKKworCXJlc3RvcmVfZ3JhbnRzID0+ IHsKKwkJc2V0dXBfc3FsID0+ICIKKwkJQ1JFQVRFIERBVEFCQVNFIHRhcGdyYW50c2RiOworCQlD UkVBVEUgU0NIRU1BIHByaXZhdGU7CisJCUNSRUFURSBTRVFVRU5DRSBzZXJpYWwgU1RBUlQgMTAx OworCQlDUkVBVEUgRlVOQ1RJT04gZm4oKSBSRVRVUk5TIHZvaWQgQVMgXCRcJAorCQlCRUdJTgor CQlFTkQ7CisJCVwkXCQgTEFOR1VBR0UgcGxwZ3NxbDsKKwkJQ1JFQVRFIFJPTEUgc3VwZXI7CisJ CUNSRUFURSBST0xFIGdyYW50MTsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQyOworCQlDUkVBVEUgUk9M RSBncmFudDM7CisJCUNSRUFURSBST0xFIGdyYW50NDsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQ1Owor CQlDUkVBVEUgUk9MRSBncmFudDY7CisJCUNSRUFURSBST0xFIGdyYW50NzsKKwkJQ1JFQVRFIFJP TEUgZ3JhbnQ4OworCisJCUNSRUFURSBUQUJMRSB0IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0 IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJR1JBTlQgU0VMRUNUIE9OIFRBQkxFIHQg VE8gZ3JhbnQxOworCQlHUkFOVCBJTlNFUlQgT04gVEFCTEUgdCBUTyBncmFudDI7CisJCUdSQU5U IEFMTCBQUklWSUxFR0VTIE9OIFRBQkxFIHQgdG8gZ3JhbnQzOworCQlHUkFOVCBDT05ORUNULCBD UkVBVEUgT04gREFUQUJBU0UgdGFwZ3JhbnRzZGIgVE8gZ3JhbnQ0OworCQlHUkFOVCBVU0FHRSwg Q1JFQVRFIE9OIFNDSEVNQSBwcml2YXRlIFRPIGdyYW50NTsKKwkJR1JBTlQgVVNBR0UsIFNFTEVD VCwgVVBEQVRFIE9OIFNFUVVFTkNFIHNlcmlhbCBUTyBncmFudDY7CisJCUdSQU5UIHN1cGVyIFRP IGdyYW50NzsKKwkJR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBmbigpIFRPIGdyYW50ODsKKwkJ IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAn ZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX2dyYW50cyIsCisJ CV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZv cm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV9n cmFudHMuc3FsIiwKKwkJCSIkdGVtcGRpci9yZXN0b3JlX2dyYW50cyIsCisJCV0sCisJCWxpa2Ug PT4gcXIvXgorCQkJXG5cUUdSQU5UIHN1cGVyIFRPIGdyYW50NyBXSVRIIElOSEVSSVQgVFJVRSBH UkFOVEVEIEJZXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBBTEwgT04gU0NIRU1BIHByaXZh dGUgVE8gZ3JhbnQ1O1xFCisJCQkoLipcbikqCisJCQlcblxRR1JBTlQgQUxMIE9OIEZVTkNUSU9O IHB1YmxpYy5mbigpIFRPIGdyYW50ODtcRQorCQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIEFMTCBP TiBTRVFVRU5DRSBwdWJsaWMuc2VyaWFsIFRPIGdyYW50NjtcRQorCQkJKC4qXG4pKgorCQkJXG5c UUdSQU5UIFNFTEVDVCBPTiBUQUJMRSBwdWJsaWMudCBUTyBncmFudDE7XEUKKwkJCVxuXFFHUkFO VCBJTlNFUlQgT04gVEFCTEUgcHVibGljLnQgVE8gZ3JhbnQyO1xFCisJCQlcblxRR1JBTlQgQUxM IE9OIFRBQkxFIHB1YmxpYy50IFRPIGdyYW50MztcRQorCQkJKC4qXG4pKgorCQkJXG5cUUdSQU5U IENSRUFURSxDT05ORUNUIE9OIERBVEFCQVNFIHRhcGdyYW50c2RiIFRPIGdyYW50NDtcRQorCQkv eG0sCisJfSwKKworCWV4Y2x1ZGluZ19kYXRhYmFzZXMgPT4geworCQlzZXR1cF9zcWwgPT4gJ0NS RUFURSBEQVRBQkFTRSBkYjE7CisJCVxjIGRiMQorCQlDUkVBVEUgVEFCTEUgdDEgKGlkIGludCk7 CisJCUlOU0VSVCBJTlRPIHQxIFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBU QUJMRSB0MiAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDIgVkFMVUVTICgxKSwgKDIpLCAoMyks ICg0KTsKKworCQlDUkVBVEUgREFUQUJBU0UgZGIyOworCQlcYyBkYjIKKwkJQ1JFQVRFIFRBQkxF IHQzIChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0MyBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQp OworCQlDUkVBVEUgVEFCTEUgdDQgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ0IFZBTFVFUyAo MSksICgyKSwgKDMpLCAoNCk7CisKKwkJQ1JFQVRFIERBVEFCQVNFIGRiZXgzOworCQlcYyBkYmV4 MworCQlDUkVBVEUgVEFCTEUgdDUgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ1IFZBTFVFUyAo MSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0NiAoaWQgaW50KTsKKwkJSU5TRVJU IElOVE8gdDYgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKworCQlDUkVBVEUgREFUQUJBU0Ug ZGJleDQ7CisJCVxjIGRiZXg0CisJCUNSRUFURSBUQUJMRSB0NyAoaWQgaW50KTsKKwkJSU5TRVJU IElOVE8gdDcgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JFQVRFIFRBQkxFIHQ4IChp ZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0OCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCisJ CUNSRUFURSBEQVRBQkFTRSBkYjU7CisJCVxjIGRiNQorCQlDUkVBVEUgVEFCTEUgdDkgKGlkIGlu dCk7CisJCUlOU0VSVCBJTlRPIHQ5IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFU RSBUQUJMRSB0MTAgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQxMCBWQUxVRVMgKDEpLCAoMiks ICgzKSwgKDQpOworCQknLAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQkn LS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2V4Y2x1 ZGluZ19kYXRhYmFzZXMiLAorCQkJJy0tZXhjbHVkZS1kYXRhYmFzZScgPT4gJ2RiZXgqJywKKwkJ XSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9y bWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9leGNsdWRpbmdf ZGF0YWJhc2VzLnNxbCIsCisJCQknLS1leGNsdWRlLWRhdGFiYXNlJyA9PiAnZGI1JywKKwkJCSIk dGVtcGRpci9leGNsdWRpbmdfZGF0YWJhc2VzIiwKKwkJXSwKKwkJbGlrZSA9PiBxci9eCisJCQlc blxRQ1JFQVRFIERBVEFCQVNFIGRiMVxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxF IHB1YmxpYy50MSAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQy IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjJcRQorCQkJKC4qXG4p KgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDMgKFxFCisJCQkoLipcbikqCisJCQlcblxR Q1JFQVRFIFRBQkxFIHB1YmxpYy50NCAoL3htLAorCQl1bmxpa2UgPT4gcXIvXgorCQkJXG5cUUNS RUFURSBEQVRBQkFTRSBkYjNcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJs aWMudDUgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50NiAoXEUK KwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGI0XEUKKwkJCSguKlxuKSoKKwkJ CVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ3IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFU RSBUQUJMRSBwdWJsaWMudDggKFxFCisJCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRiNVxFCisJCQko LipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50OSAoXEUKKwkJCSguKlxuKSoKKwkJ CVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQxMCAoXEUKKwkJL3htLAorCX0sCisKKwlmb3JtYXRf ZGlyZWN0b3J5ID0+IHsKKwkJc2V0dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2RpcmVj dG9yeShhIGludCwgYiBib29sZWFuLCBjIHRleHQpOworCQlJTlNFUlQgSU5UTyBmb3JtYXRfZGly ZWN0b3J5IFZBTFVFUyAoMSwgdHJ1ZSwgJ25hbWUxJyksICgyLCBmYWxzZSwgJ25hbWUyJyk7IiwK KwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGly ZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfZGlyZWN0b3J5IiwKKwkJ XSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9y bWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfZGly ZWN0b3J5LnNxbCIsCisJCQkiJHRlbXBkaXIvZm9ybWF0X2RpcmVjdG9yeSIsCisJCV0sCisJCWxp a2UgPT4gcXIvXlxuXFFDT1BZIHB1YmxpYy5mb3JtYXRfZGlyZWN0b3J5IChhLCBiLCBjKSBGUk9N IHN0ZGluOy94bQorCX0sCisKKwlmb3JtYXRfdGFyID0+IHsKKwkJc2V0dXBfc3FsID0+ICJDUkVB VEUgVEFCTEUgZm9ybWF0X3RhcihhIGludCwgYiBib29sZWFuLCBjIHRleHQpOworCQlJTlNFUlQg SU5UTyBmb3JtYXRfdGFyIFZBTFVFUyAoMSwgZmFsc2UsICduYW1lMycpLCAoMiwgdHJ1ZSwgJ25h bWU0Jyk7IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0 JyA9PiAndGFyJywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfdGFyIiwKKwkJXSwK KwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0 JyA9PiAndGFyJywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfdGFyLnNxbCIsCisJ CQkiJHRlbXBkaXIvZm9ybWF0X3RhciIsCisJCV0sCisJCWxpa2UgPT4gcXIvXlxuXFFDT1BZIHB1 YmxpYy5mb3JtYXRfdGFyIChhLCBiLCBjKSBGUk9NIHN0ZGluOy94bQorCX0sCisKKwlmb3JtYXRf Y3VzdG9tID0+IHsKKwkJc2V0dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2N1c3RvbShh IGludCwgYiBib29sZWFuLCBjIHRleHQpOworCQlJTlNFUlQgSU5UTyBmb3JtYXRfY3VzdG9tIFZB TFVFUyAoMSwgZmFsc2UsICduYW1lNScpLCAoMiwgdHJ1ZSwgJ25hbWU2Jyk7IiwKKwkJZHVtcF9j bWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJ CSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwKKwkJXSwKKwkJcmVzdG9yZV9j bWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnY3VzdG9t JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfY3VzdG9tLnNxbCIsCisJCQkiJHRl bXBkaXIvZm9ybWF0X2N1c3RvbSIsCisJCV0sCisJCWxpa2UgPT4gcXIvXiBcblxRQ09QWSBwdWJs aWMuZm9ybWF0X2N1c3RvbSAoYSwgYiwgYykgRlJPTSBzdGRpbjsveG0KKwl9LAorCisJZHVtcF9n bG9iYWxzX29ubHkgPT4geworCQlzZXR1cF9zcWwgPT4gIkNSRUFURSBUQUJMRSBmb3JtYXRfZGly KGEgaW50LCBiIGJvb2xlYW4sIGMgdGV4dCk7CisJCUlOU0VSVCBJTlRPIGZvcm1hdF9kaXIgVkFM VUVTICgxLCBmYWxzZSwgJ25hbWU1JyksICgyLCB0cnVlLCAnbmFtZTYnKTsiLAorCQlkdW1wX2Nt ZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAor CQkJJy0tZ2xvYmFscy1vbmx5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9kdW1wX2dsb2Jh bHNfb25seSIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1D JywgJy0tZ2xvYmFscy1vbmx5JywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQkn LS1maWxlJyA9PiAiJHRlbXBkaXIvZHVtcF9nbG9iYWxzX29ubHkuc3FsIiwKKwkJCSIkdGVtcGRp ci9kdW1wX2dsb2JhbHNfb25seSIsCisJCV0sCisJCWxpa2UgPT4gcXIvCisgICAgICAgICAgICBe XHMqXFFDUkVBVEUgUk9MRSBkdW1wYWxsO1xFXHMqXG4KKwkJCS94bQorCX0sKTsKKworIyBGaXJz dCBleGVjdXRlIHRoZSBzZXR1cF9zcWwKK2ZvcmVhY2ggbXkgJHJ1biAoc29ydCBrZXlzICVwZ2R1 bXBhbGxfcnVucykKK3sKKwlpZiAoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57c2V0dXBfc3FsfSkK Kwl7CisJCSRub2RlLT5zYWZlX3BzcWwoJHJ1bl9kYiwgJHBnZHVtcGFsbF9ydW5zeyRydW59LT57 c2V0dXBfc3FsfSk7CisJfQorfQorCisjIEV4ZWN1dGUgdGhlIHRlc3RzCitmb3JlYWNoIG15ICRy dW4gKHNvcnQga2V5cyAlcGdkdW1wYWxsX3J1bnMpCit7CisJIyBDcmVhdGUgYSBuZXcgdGFyZ2V0 IGNsdXN0ZXIgdG8gcGdfcmVzdG9yZSBlYWNoIHRlc3QgY2FzZSBydW4gc28gdGhhdCB3ZQorCSMg ZG9uJ3QgbmVlZCB0byB0YWtlIGNhcmUgb2YgdGhlIGNsZWFudXAgZnJvbSB0aGUgdGFyZ2V0IGNs dXN0ZXIgYWZ0ZXIgZWFjaAorCSMgcnVuLgorCW15ICR0YXJnZXRfbm9kZSA9IFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXItPm5ldygidGFyZ2V0XyRydW4iKTsKKwkkdGFyZ2V0X25vZGUtPmluaXQ7 CisJJHRhcmdldF9ub2RlLT5zdGFydDsKKworCSMgRHVtcGFsbCBmcm9tIG5vZGUgY2x1c3Rlci4K Kwkkbm9kZS0+Y29tbWFuZF9vayhcQHsgJHBnZHVtcGFsbF9ydW5zeyRydW59LT57ZHVtcF9jbWR9 IH0sCisJCSIkcnVuOiBwZ19kdW1wYWxsIHJ1bnMiKTsKKworCSMgUmVzdG9yZSB0aGUgZHVtcCBv biAidGFyZ2V0X25vZGUiIGNsdXN0ZXIuCisJbXkgQHJlc3RvcmVfY21kID0gKAorCQlAeyAkcGdk dW1wYWxsX3J1bnN7JHJ1bn0tPntyZXN0b3JlX2NtZH0gfSwKKwkJJy0taG9zdCcsICR0YXJnZXRf bm9kZS0+aG9zdCwgJy0tcG9ydCcsICR0YXJnZXRfbm9kZS0+cG9ydCk7CisKKwlteSAoJHN0ZG91 dCwgJHN0ZGVycikgPSBydW5fY29tbWFuZChcQHJlc3RvcmVfY21kKTsKKworCSMgcGdfcmVzdG9y ZSAtLWZpbGUgb3V0cHV0IGZpbGUuCisJbXkgJG91dHB1dF9maWxlID0gc2x1cnBfZmlsZSgiJHRl bXBkaXIvJHtydW59LnNxbCIpOworCisJaWYgKCAgICEoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57 bGlrZX0pCisJCSYmICEoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57dW5saWtlfSkpCisJeworCQlk aWUgIm1pc3NpbmcgXCJsaWtlXCIgb3IgXCJ1bmxpa2VcIiBpbiB0ZXN0IFwiJHJ1blwiIjsKKwl9 CisKKwlpZiAoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57bGlrZX0pCisJeworCQlsaWtlKCRvdXRw dXRfZmlsZSwgJHBnZHVtcGFsbF9ydW5zeyRydW59LT57bGlrZX0sICJzaG91bGQgZHVtcCAkcnVu Iik7CisJfQorCisJaWYgKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3VubGlrZX0pCisJeworCQl1 bmxpa2UoCisJCQkkb3V0cHV0X2ZpbGUsCisJCQkkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPnt1bmxp a2V9LAorCQkJInNob3VsZCBub3QgZHVtcCAkcnVuIik7CisJfQorfQorCisjIFNvbWUgbmVnYXRp dmUgdGVzdCBjYXNlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsIGFuZCByZXN0b3JlIHVzaW5nIHBn X3Jlc3RvcmUKKyMgdGVzdCBjYXNlIDE6IHdoZW4gLUMgaXMgbm90IHVzZWQgaW4gcGdfcmVzdG9y ZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlb CisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLAorCQknLS1mb3Jt YXQnID0+ICdjdXN0b20nLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwi LAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC1DXC8tLWNyZWF0ZSBtdXN0 IGJlIHNwZWNpZmllZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVt cGFsbFxFLywKKwknV2hlbiAtQyBpcyBub3QgdXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBv ZiBwZ19kdW1wYWxsJyk7CisKKyMgdGVzdCBjYXNlIDI6IFdoZW4gLS1saXN0IG9wdGlvbiBpcyB1 c2VkIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsCiskbm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAor CVsKKwkJJ3BnX3Jlc3RvcmUnLAorCQkiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsICctQycsCisJ CSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCSctLWxpc3QnLAorCQknLS1maWxlJyA9PiAiJHRl bXBkaXIvZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0 aW9uIC1sXC8tLWxpc3QgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBj cmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4gLS1saXN0IGlzIHVzZWQgaW4gcGdfcmVz dG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcpOworCisjIHRlc3QgY2FzZSAzOiBXaGVuIG5v bi1leGlzdCBkYXRhYmFzZSBpcyBnaXZlbiB3aXRoIC1kIG9wdGlvbgorJG5vZGUtPmNvbW1hbmRf ZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0 b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLWQnID0+ICdkYnBxJywK KwldLAorCXFyL1xRRkFUQUw6ICBkYXRhYmFzZSAiZGJwcSIgZG9lcyBub3QgZXhpc3RcRS8sCisJ J1doZW4gbm9uLWV4aXN0ZW50IGRhdGFiYXNlIGlzIGdpdmVuIHdpdGggLWQgb3B0aW9uIGluIHBn X3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnCispOworCiskbm9kZS0+c3RvcCgnZmFz dCcpOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNDcuMwoK --0000000000005e974706449002ac--