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.94.2) (envelope-from ) id 1tprvn-00DUJq-BH for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Mar 2025 16:49:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tprvl-00GMRT-Pu for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Mar 2025 16:49:13 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tprvk-00GMNN-Rk for pgsql-hackers@lists.postgresql.org; Wed, 05 Mar 2025 16:49:13 +0000 Received: from mail-qt1-x830.google.com ([2607:f8b0:4864:20::830]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tprvi-0018hN-22 for pgsql-hackers@lists.postgresql.org; Wed, 05 Mar 2025 16:49:11 +0000 Received: by mail-qt1-x830.google.com with SMTP id d75a77b69052e-46c8474d8daso62293681cf.3 for ; Wed, 05 Mar 2025 08:49:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741193349; x=1741798149; 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=B9RNjCk3cM0huYCFOy2/DSdaHQo+wbg0JUCepqulHdQ=; b=X873sm6Rt/GeEk6Tfi9X9mwel+zyKwHQKxwWuG0J9ggsvcHVpyvAAMw7oJ84ztIa4L pBTWVyJG+1ntaR/zJEEWSuh3d62ush4RlFV3DTb9g+IxgSn9SCitdPrqPAePSVLrBWdT 2GTYXMutpQuPoye/NDi3sxHz4FFqo+SRv1AZ+wBclzsWbG1wl1VFZRifLr1QNMAMoL5x PPyeLTDrys/Op9RzMOEGfVZJOv0QyClVtFMnuUPcy0bld7Qm45K0i+bVWd9luWcaIBsu DdoRSmqgLjO3rb1LdCDmuCemhSObu5BZbdc09aAp8OSU4/zXf45k5JewgExgSb/nWmm5 p8Ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741193349; x=1741798149; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=B9RNjCk3cM0huYCFOy2/DSdaHQo+wbg0JUCepqulHdQ=; b=PYq0TuWk0gNqYhrVigTsMxsqJKbERrP1rdrhi8zulc3tlGQy4/n0StQ6yD1/blDSBv yzxWSxnE3ysDL5rzwDvRHiMmopfizmRWqqQqgEk9fFxY6SoHJEkw3tQ8+uHB/SKy5bxe eyYfRZdRHDfbqV3b8H++P39lPW7JpNrflWdPJcuj9XVExr8EmnGpFTUb3IdxegyFVci/ kkxZpmT3KdJNU0eqtVw8Djhc/lFsV6M7fpZHJxPA0ImXbZG8zIMhuAWTWkeG5r2Gq3Si eG+ur0P1Pnt6SpB75BuQJyMFAmF2rz4A4CrGwVrtkPOmDXSbQT1XBP4lZJXQenK3SLW2 nZwA== X-Forwarded-Encrypted: i=1; AJvYcCVekE3mzN3YLRimvkZXXtP9bcZkaXUdzqER53ICzU0aWOWu/y5yHfFSOVP7ohDjVpkMDZWqBtYiXDbKLOX8@lists.postgresql.org X-Gm-Message-State: AOJu0YyViFQkkTuLXB0dkTJM/6/+vHuF0MZLpWxUP0GwLmeLMMFlZW41 V7Sjm0hs413qJCr7J1fNWwZZNL5WB2IMDCytpJ/QOS6yGn4v+UO1MOQpZ087NWoC0joPigbdao8 qJO7Ew14G4FurtLyzleFiiKq6Ikw= X-Gm-Gg: ASbGncs4jYWHjvq6R43sJKII0LJG8ABPge1cwOB2p5v3ubTx+3rkQ3mGZnKJDE1fB8r rthbtPzZUyjGuL1y6FjDzhTl+ojTcjS9U4w3dQN4P+Zylv/oCwLu+FWIbyYeDV2U5ln7YNLjd1l 0x8SmO2CN8J/8j/fbRAC1ohbhUJYvmiU4WqNvrwGMiBM5x3/czSv/ZqoZhBc0= X-Google-Smtp-Source: AGHT+IEbLLk+nJE1aTlbSgAKDdxKbPdw6/B8GpiII943t5xG7A/CHOphOgEACaxu31NlZX1tKbEIIYGMexV62VQcXM4= X-Received: by 2002:a05:622a:60f:b0:472:17dd:9f39 with SMTP id d75a77b69052e-4750b444401mr56928311cf.21.1741193349211; Wed, 05 Mar 2025 08:49:09 -0800 (PST) MIME-Version: 1.0 References: <202503051512.tr7vcirldfns@alvherre.pgsql> In-Reply-To: <202503051512.tr7vcirldfns@alvherre.pgsql> From: Mahendra Singh Thalor Date: Wed, 5 Mar 2025 22:18:57 +0530 X-Gm-Features: AQ5f1Jq3Cn6fhU798TW8zry1FPJQmAlo0ypRtmttWNkgihrYQKhHkilmzDoZ3LQ Message-ID: Subject: Re: Non-text mode for pg_dumpall To: =?UTF-8?Q?=C3=81lvaro_Herrera?= Cc: jian he , Srinath Reddy , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000010d1f5062f9b2bba" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000010d1f5062f9b2bba Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks Alvaro for feedback and review. On Wed, 5 Mar 2025 at 20:42, =C3=81lvaro Herrera = wrote: > > Disclaimer: I didn't review these patches fully. > > On 2025-Mar-05, Mahendra Singh Thalor wrote: > > > On Wed, 5 Mar 2025 at 01:02, =C3=81lvaro Herrera wrote: > > > > > A database name containing a newline breaks things for this patch: > > > > > > CREATE DATABASE "foo > > > bar"; > > > I also reported this issue on 29-01-2025. This breaks even without this > > patch also. > > Okay, we should probably fix that, but I think the new map.dat file your > patch adds is going to make the problem worse, because it doesn't look > like you handled that case in any particular way that would make it not > fail. I think it would be good to avoid digging us up even deeper in > that hole. More generally, the pg_upgrade tests contain some code to > try database names with almost all possible ascii characters (see > generate_db in pg_upgrade/t/002_pg_upgrade.pl); it would be good to > ensure that this new functionality also works correctly for that -- > perhaps add an equivalent test to the pg_dumpall test suite. In the attached patch, I tried to solve the problem of the map.dat file. I will do more analysis based on dbnames in 002_pg_upgrade.pl file. > > Looking at 0001: > > I'm not sure that the whole common_dumpall_restore.c thing is properly > structured. First, the file name shouldn't presume which programs > exactly are going to use the funcionality there. Second, it looks like > there's another PQconnectdbParams() in pg_backup_db.c and I don't > understand what the reason is for that one to be separate. In my mind, > there should be a file maybe called connection.c or connectdb.c or > whatever that's in charge of establishing connection for all the > src/bin/pg_dump programs, for cleanliness sake. (This is probably also > the place where to put an on_exit callback that cleans up any leftover > connections.) Okay. I will do these changes. > > Looking at 0002 I see it mentions looking at the EXIT_NICELY macro for > documentation. No such macro exists. But also I think the addition > (and use) of reset_exit_nicely_list() is not a good idea. It seems to > assume that the only entries in that list are ones that can be cleared > and reinstated whenever. This makes too much of an assumption about how > the program works. It may work today, but it'll get in the way of any > other patch that wants to set up some different on-exit clean up. In > other words, we shouldn't reset the on_exit list at all. Also, this is > just a weird addition: I will do more study for this case and will update here. > > #define exit_nicely(code) exit(code) Okay. I will fix this. > > You added "A" as an option to the getopt_long() call in pg_restore, but > no handling for it is added. Fixed. > > I think the --globals-only option to pg_restore should be a separate > commit. Okay. > > -- > =C3=81lvaro Herrera 48=C2=B001'N 7=C2=B057'E =E2=80=94 ht= tps://www.EnterpriseDB.com/ Here, I am attaching updated patches for review and testing. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --00000000000010d1f5062f9b2bba Content-Type: application/octet-stream; name="v21_0002_pg_dumpall-with-non-text_format-5th_mar.patch" Content-Disposition: attachment; filename="v21_0002_pg_dumpall-with-non-text_format-5th_mar.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7w5jf8c1 RnJvbSA5NTBkYWYyODhjMTNiODg5YzY3MTE4NzcwMzczZjE1ZmNlZDYwM2M3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogV2VkLCA1IE1hciAyMDI1IDIyOjEwOjIyICswNTMwClN1YmplY3Q6IFtQQVRD SCAyLzJdIHBnX2R1bXBhbGwgd2l0aCBkaXJlY3Rvcnl8dGFyfGN1c3RvbSBmb3JtYXQgYW5kIHJl c3RvcmUgCiBpdCAgYnkgcGdfcmVzdG9yZQoKbmV3IG9wdGlvbiB0byBwZ19kdW1wYWxsOgotRiwg LS1mb3JtYXQ9ZHx0fGN8cCAgb3V0cHV0IGZpbGUgZm9ybWF0ICggcGxhaW4gdGV4dCAoZGVmYXVs dCkpCgpFeDoxIC4vcGdfZHVtcGFsbCAtLWZvcm1hdD1kaXJlY3RvcnkgLS1maWxlPWR1bXBEaXJO YW1lCkV4OjIgLi9wZ19kdW1wYWxsIC0tZm9ybWF0PXRhciAtLWZpbGU9ZHVtcERpck5hbWUKRXg6 MyAuL3BnX2R1bXBhbGwgLS1mb3JtYXQ9Y3VzdG9tIC0tZmlsZT1kdW1wRGlyTmFtZQpFeDo0IC4v cGdfZHVtcGFsbCAtLWZvcm1hdD1wbGFpbiAtLWZpbGU9ZHVtcERpck5hbWUKCmR1bXBzIGFyZSBh czoKZ2xvYmFsLmRhdCA6OjogZ2xvYmFsIHNxbCBjb21tYW5kcyBpbiBzaW1wbGUgcGxhaW4gZm9y bWF0Cm1hcC5kYXQuICAgOjo6IGRib2lkIGRibmFtZSAtLS1lbnRyaWVzIGZvciBhbGwgZGF0YWJh c2VzIGluIHNpbXBsZSB0ZXh0IGZvcm0KZGF0YWJhc2VzLiA6OjoKICAgICAgc3ViZGlyICAgICBk Ym9pZDEgIC0+IHRvYy5kYXQgYW5kIGRhdGEgZmlsZXMgaW4gYXJjaGl2ZSBmb3JtYXQKICAgICAg c3ViZGlyICAgICBkYm9pZDIuIC0+IHRvYy5kYXQgYW5kIGRhdGEgZmlsZXMgaW4gYXJjaGl2ZSBm b3JtYXQKICAgICAgICAgICAgICBldGMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk5PVEU6CmlmIG5lZWRl ZCwgcmVzdG9yZSBzaW5nbGUgZGIgYnkgcGFydGljdWxhciBzdWJkaXIKCkV4OiAuL3BnX3Jlc3Rv cmUgLS1mb3JtYXQ9ZGlyZWN0b3J5IC1kIHBvc3RncmVzIGR1bXBEaXJOYW1lL2RhdGFiYXNlcy81 CiAgIC0tIGhlcmUsIDUgaXMgdGhlIGRib2lkIG9mIHBvc3RncmVzIGRiCiAgIC0tIHRvIGdldCBk Ym9pZCwgcmVmZXIgZGJuYW1lIGluIG1hcC5maWxlCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpuZXcgb3B0 aW9ucyB0byBwZ19yZXN0b3JlOgotZywgLS1nbG9iYWxzLW9ubHkgICAgICAgICAgIHJlc3RvcmUg b25seSBnbG9iYWwgb2JqZWN0cywgbm8gZGF0YWJhc2VzCi0tZXhjbHVkZS1kYXRhYmFzZT1QQVRU RVJOICAgZXhjbHVkZSBkYXRhYmFzZSB3aG9zZSBuYW1lIG1hdGNoZXMgcGF0dGVybgoKV2hlbiB3 ZSBnaXZlIC1nLy0tZ2xvYmFscy1vbmx5IG9wdGlvbiwgdGhlbiBvbmx5IHJlc3RvcmUgZ2xvYmFs cywgbm8gZGIgcmVzdG9yaW5nLgoKRGVzaWduOgpXaGVuIC0tZm9ybWF0PWR8dHxjIGlzIHNwZWNp ZmllZCBhbmQgdGhlcmUgaXMgbm8gdG9jLmRhdCBpbiBtYWluIGRpcmVjdG9yeSwgdGhlbiBjaGVj awpmb3IgZ2xvYmFsLmRhdCB0byByZXN0b3JlIGFsbCBkYXRhYmFzZXMuIElmIGdsb2JhbC5kYXQg ZmlsZSBpcyBleGlzdCBpbiBkaXJlY3RvcnksCnRoZW4gZmlyc3QgcmVzdG9yZSBhbGwgZ2xvYmFs cyBmcm9tIGdsb2JhbC5kYXQgYW5kIHRoZW4gcmVzdG9yZSBhbGwgZGF0YWJhc2VzIG9uZSBieSBv bmUKZnJvbSBtYXAuZGF0IGxpc3QgKGlmIGV4aXN0KQoKZm9yIC0tZXhjbHVkZS1kYXRhYmFzZT1Q QVRURVJOIGZvciBwZ19yZXN0b3JlLgphcyBvZiBub3csIFNFTEVDVCAxIFdIRVJFIFhYWCBPUEVS QVRPUihwZ19jYXRhbG9nLn4pICdeKFBBVFRFUk4pJCcgQ09MTEFURSBwZ19jYXRhbG9nLmRlZmF1 bHQKaWYgbm8gZGIgY29ubmVjdGlvbiwgdGhlbiBQQVRURVJOPU5BTUUgbWF0Y2hpbmcgb25seQoK Zm9yIGVhY2ggZGF0YWJhc2UsIHdlIGFyZSBjbGVhbmluZyBvbl9leGl0X25pY2VseV9pbmRleCBs aXN0LgoKYXQgdGhlIGVuZCBvZiByZXN0b3JlLCB3ZSBhcmUgZ2l2aW5nIHdhcm5pbmcgd2l0aCB0 b3RhbCBudW1iZXIgb2YgZXJyb3JzIChpbmNsdWRpbmcgZ2xvYmFsLmRhdCwKYW5kIGVhY2ggZGF0 YWJhc2UgZXJyb3JzKSBhbmQgZm9yIGVhY2ggZGF0YWJhc2UsIHdlIGFyZSBwcmludGluZyB3YXJu aW5nIHdpdGggZGJuYW1lIGFuZCB0b3RhbAplcnJvcnMuCgp0aHJlYWQ6Cmh0dHBzOi8vd3d3LnBv c3RncmVzcWwub3JnL21lc3NhZ2UtaWQvZmxhdC9DQUtZdE5BcDl2T3R5ZFhMM19wbkdKJTJCVGV0 WnROJTNERllTblpTTUNxWGNlVTNta0hQeFBnJTQwbWFpbC5nbWFpbC5jb20jMDY2NDMzY2I1YWUw MDdjYmUzNWZlZmRkZjc5NmQ1MmYKLS0tCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxs LnNnbWwgICAgIHwgIDgwICsrLQogZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwgICAg IHwgIDQxICstCiBzcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDQgKy0K IHNyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwLmggICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuYyB8ICAyMCArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIu YyAgICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmMgICAgfCAg MjMgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuaCAgICB8ICAgMSArCiBzcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVt cC9wZ19kdW1wYWxsLmMgICAgICAgICB8IDI5MCArKysrKysrLS0KIHNyYy9iaW4vcGdfZHVtcC9w Z19yZXN0b3JlLmMgICAgICAgICB8IDg1MCArKysrKysrKysrKysrKysrKysrKysrKysrKy0KIHNy Yy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbCAgICAgICB8ICAgOSArCiBzcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdCAgICAgfCAgIDIgKwogMTQgZmlsZXMgY2hhbmdlZCwgMTI0OSBp bnNlcnRpb25zKCspLCA3OCBkZWxldGlvbnMoLSkKIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3 NTUgc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dt bAppbmRleCBjMmZhNWJlOTUxOS4uYzM2ODAyZTA2ZmQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9yZWYvcGdfZHVtcGFsbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5z Z21sCkBAIC0xNiw3ICsxNiw3IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogCiAgPHJlZm5h bWVkaXY+CiAgIDxyZWZuYW1lPnBnX2R1bXBhbGw8L3JlZm5hbWU+Ci0gIDxyZWZwdXJwb3NlPmV4 dHJhY3QgYSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNs dXN0ZXIgaW50byBhIHNjcmlwdCBmaWxlPC9yZWZwdXJwb3NlPgorICA8cmVmcHVycG9zZT5leHRy YWN0IGEgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVz dGVyIGJhc2VkIG9uIHNwZWNpZmllZCBkdW1wIGZvcm1hdCA8L3JlZnB1cnBvc2U+CiAgPC9yZWZu YW1lZGl2PgogCiAgPHJlZnN5bm9wc2lzZGl2PgpAQCAtMTIxLDcgKzEyMSw4MyBAQCBQb3N0Z3Jl U1FMIGRvY3VtZW50YXRpb24KICAgICAgICA8cGFyYT4KICAgICAgICAgU2VuZCBvdXRwdXQgdG8g dGhlIHNwZWNpZmllZCBmaWxlLiAgSWYgdGhpcyBpcyBvbWl0dGVkLCB0aGUKICAgICAgICAgc3Rh bmRhcmQgb3V0cHV0IGlzIHVzZWQuCi0gICAgICAgPC9wYXJhPgorICAgICAgICBOb3RlOiBUaGlz IG9wdGlvbiBjYW4gYmUgb21pdHRlZCBvbmx5IHdoZW4gPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9u PiBpcyBwbGFpbgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFy bGlzdGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1G IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0 aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1mb3JtYXQ9PHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAg ICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBTcGVjaWZ5IGZvcm1hdCBvZiBk dW1wIGZpbGVzLiAgSWYgd2Ugd2FudCB0byBkdW1wIGFsbCB0aGUgZGF0YWJhc2VzLAorICAgICAg ICB0aGVuIHBhc3MgdGhpcyBhcyBub24tcGxhaW4gc28gdGhhdCBkdW1wIG9mIGFsbCBkYXRhYmFz ZXMgY2FuIGJlIHRha2VuCisgICAgICAgIGluIHNlcGFyYXRlIHN1YmRpcmVjdG9yeSBpbiBhcmNo aXZlIGZvcm1hdC4KKyAgICAgICAgYnkgZGVmYXVsdCwgdGhpcyBpcyBwbGFpbiBmb3JtYXQuCisK KyAgICAgICAgSWYgbm9uLXBsYWluIG1vZGUgaXMgcGFzc2VkLCB0aGVuIGdsb2JhbC5kYXQgKGds b2JhbCBzcWwgY29tbWFuZHMpIGFuZAorICAgICAgICBtYXAuZGF0KGRib2lkIGFuZCBkYm5hbWVz IGxpc3Qgb2YgYWxsIHRoZSBkYXRhYmFzZXMpIGZpbGVzIHdpbGwgYmUgY3JlYXRlZC4KKyAgICAg ICAgQXBhcnQgZnJvbSB0aGVzZSBmaWxlcywgb25lIHN1YmRpcmVjdG9yeSB3aXRoIGRhdGFiYXNl cyBuYW1lIHdpbGwgYmUgY3JlYXRlZC4KKyAgICAgICAgVW5kZXIgdGhpcyBkYXRhYmFzZXMgc3Vi ZGlyZWN0b3J5LCB0aGVyZSB3aWxsIGJlIGZpbGVzIHdpdGggZGJvaWQgbmFtZSBmb3IgZWFjaAor ICAgICAgICBkYXRhYmFzZSBhbmQgaWYgPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBpcyBkaXJl Y3RvcnksIHRoZW4gdG9jLmRhdCBhbmQgb3RoZXIKKyAgICAgICAgZHVtcCBmaWxlcyB3aWxsIGJl IHVuZGVyIGRib2lkIHN1YmRpcmVjdG9yeS4KKworICAgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAg ICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5kPC9saXRlcmFsPjwv dGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmRpcmVjdG9yeTwvbGl0ZXJhbD48L3Rlcm0+ CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1 dCBhIGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19y ZXN0b3JlLiBVbmRlciBkYm9pZAorICAgICAgICAgICBzdWJkaXJlY3RvcnksIHRoaXMgd2lsbCBj cmVhdGUgYSBkaXJlY3Rvcnkgd2l0aCBvbmUgZmlsZSBmb3IgZWFjaCB0YWJsZSBhbmQgbGFyZ2UK KyAgICAgICAgICAgb2JqZWN0IGJlaW5nIGR1bXBlZCwgcGx1cyBhIHNvLWNhbGxlZCBUYWJsZSBv ZiBDb250ZW50cyBmaWxlIGRlc2NyaWJpbmcgdGhlIGR1bXBlZAorICAgICAgICAgICBvYmplY3Rz IGluIGEgbWFjaGluZS1yZWFkYWJsZSBmb3JtYXQgdGhhdCBwZ19yZXN0b3JlIGNhbiByZWFkLiBB IGRpcmVjdG9yeSBmb3JtYXQKKyAgICAgICAgICAgYXJjaGl2ZSBjYW4gYmUgbWFuaXB1bGF0ZWQg d2l0aCBzdGFuZGFyZCBVbml4IHRvb2xzOyBmb3IgZXhhbXBsZSwgZmlsZXMgaW4gYW4KKyAgICAg ICAgICAgdW5jb21wcmVzc2VkIGFyY2hpdmUgY2FuIGJlIGNvbXByZXNzZWQgd2l0aCB0aGUgZ3pp cCwgbHo0LCBvciB6c3RkIHRvb2xzLiBUaGlzCisgICAgICAgICAgIGZvcm1hdCBpcyBjb21wcmVz c2VkIGJ5IGRlZmF1bHQgdXNpbmcgZ3ppcCBhbmQgYWxzbyBzdXBwb3J0cyBwYXJhbGxlbCBkdW1w cy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zh cmxpc3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxp dGVyYWw+cDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5wbGFpbjwv bGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+Cisg ICAgICAgICAgIE91dHB1dCBhIHBsYWluLXRleHQgU1FMIHNjcmlwdCBmaWxlICh0aGUgZGVmYXVs dCkuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92 YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxs aXRlcmFsPmM8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+Y3VzdG9t PC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4K KyAgICAgICAgICAgT3V0cHV0IGEgY3VzdG9tLWZvcm1hdCBhcmNoaXZlIHN1aXRhYmxlIGZvciBp bnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRvZ2V0aGVyIHdpdGggdGhlCisgICAgICAgICAgIGRpcmVj dG9yeSBvdXRwdXQgZm9ybWF0LCB0aGlzIGlzIHRoZSBtb3N0IGZsZXhpYmxlIG91dHB1dCBmb3Jt YXQgaW4gdGhhdCBpdCBhbGxvd3MgbWFudWFsCisgICAgICAgICAgIHNlbGVjdGlvbiBhbmQgcmVv cmRlcmluZyBvZiBhcmNoaXZlZCBpdGVtcyBkdXJpbmcgcmVzdG9yZS4gVGhpcyBmb3JtYXQgaXMg YWxzbworICAgICAgICAgICBjb21wcmVzc2VkIGJ5IGRlZmF1bHQuCisgICAgICAgICAgPC9wYXJh PgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAg ICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD50PC9saXRlcmFsPjwv dGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnRhcjwvbGl0ZXJhbD48L3Rlcm0+CisgICAg ICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIHRh ci1mb3JtYXQgYXJjaGl2ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUg dGFyIGZvcm1hdCBpcworICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIGRpcmVjdG9yeSBm b3JtYXQ6IGV4dHJhY3RpbmcgYSB0YXItZm9ybWF0IGFyY2hpdmUgcHJvZHVjZXMgYSB2YWxpZAor ICAgICAgICAgICBkaXJlY3RvcnktZm9ybWF0IGFyY2hpdmUuIEhvd2V2ZXIsIHRoZSB0YXIgZm9y bWF0IGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24uIEFsc28sCisgICAgICAgICAgIHdoZW4g dXNpbmcgdGFyIGZvcm1hdCB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgdGFibGUgZGF0YSBpdGVtcyBj YW5ub3QgYmUgY2hhbmdlZCBkdXJpbmcgcmVzdG9yZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAg ICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8L3Zh cmlhYmxlbGlzdD4KKyAgICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92 YXJsaXN0ZW50cnk+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5z Z21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKaW5kZXggMTk5ZWEzMzQ1ZjMu LjQ2YmRiYzA5MmMzIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbApAQCAtMTgsOCArMTgsOSBA QCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgPHJlZm5hbWU+cGdfcmVzdG9yZTwvcmVmbmFt ZT4KIAogICA8cmVmcHVycG9zZT4KLSAgIHJlc3RvcmUgYSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNR TDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20gYW4KLSAgIGFyY2hpdmUgZmlsZSBjcmVhdGVk IGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4KKyAgIHJlc3RvcmUgPHByb2R1 Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBmcm9tIGFuCisgICBhcmNo aXZlIGZpbGUgY3JlYXRlZCBieSA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+IG9y CisgICA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+CiAgIDwvcmVmcHVycG9z ZT4KICA8L3JlZm5hbWVkaXY+CiAKQEAgLTM3LDkgKzM4LDEwIEBAIFBvc3RncmVTUUwgZG9jdW1l bnRhdGlvbgogICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgogCiAgIDxwYXJhPgotICAgPGFw cGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiBpcyBhIHV0aWxpdHkgZm9yIHJlc3Rv cmluZyBhCisgICA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IGlzIGEgdXRp bGl0eSBmb3IgcmVzdG9yaW5nCiAgICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5h bWU+IGRhdGFiYXNlIGZyb20gYW4gYXJjaGl2ZQotICAgY3JlYXRlZCBieSA8eHJlZiBsaW5rZW5k PSJhcHAtcGdkdW1wIi8+IGluIG9uZSBvZiB0aGUgbm9uLXBsYWluLXRleHQKKyAgIGNyZWF0ZWQg YnkgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBvcgorICAgPHhyZWYgbGlua2VuZD0iYXBw LXBnLWR1bXBhbGwiLz4gaW4gb25lIG9mIHRoZSBub24tcGxhaW4tdGV4dAogICAgZm9ybWF0cy4g IEl0IHdpbGwgaXNzdWUgdGhlIGNvbW1hbmRzIG5lY2Vzc2FyeSB0byByZWNvbnN0cnVjdCB0aGUK ICAgIGRhdGFiYXNlIHRvIHRoZSBzdGF0ZSBpdCB3YXMgaW4gYXQgdGhlIHRpbWUgaXQgd2FzIHNh dmVkLiAgVGhlCiAgICBhcmNoaXZlIGZpbGVzIGFsc28gYWxsb3cgPGFwcGxpY2F0aW9uPnBnX3Jl c3RvcmU8L2FwcGxpY2F0aW9uPiB0bwpAQCAtMTQwLDYgKzE0Miw4IEBAIFBvc3RncmVTUUwgZG9j dW1lbnRhdGlvbgogICAgICAgICBjb21tYW5kcyB0aGF0IG1lbnRpb24gdGhpcyBkYXRhYmFzZS4K ICAgICAgICAgQWNjZXNzIHByaXZpbGVnZXMgZm9yIHRoZSBkYXRhYmFzZSBpdHNlbGYgYXJlIGFs c28gcmVzdG9yZWQsCiAgICAgICAgIHVubGVzcyA8b3B0aW9uPi0tbm8tYWNsPC9vcHRpb24+IGlz IHNwZWNpZmllZC4KKyAgICAgICAgPG9wdGlvbj4tLWNyZWF0ZTwvb3B0aW9uPiBpcyByZXF1aXJl ZCB3aGVuIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMKKyAgICAgICAgZnJvbSBkdW1wIG9m IDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCiAgICAgICAgPC9wYXJhPgog CiAgICAgICAgPHBhcmE+CkBAIC0xNjYsNiArMTcwLDI1IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRh dGlvbgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZh cmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1leGNsdWRlLWRhdGFiYXNlPTxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT48L29wdGlvbj48 L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIERvIG5vdCBy ZXN0b3JlIGRhdGFiYXNlcyB3aG9zZSBuYW1lIG1hdGNoZXMKKyAgICAgICAgPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgTXVsdGlw bGUgcGF0dGVybnMgY2FuIGJlIGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgbXVsdGlwbGUKKyAgICAgICAg PG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U8L29wdGlvbj4gc3dpdGNoZXMuICBUaGUKKyAgICAg ICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPiBw YXJhbWV0ZXIgaXMKKyAgICAgICAgaW50ZXJwcmV0ZWQgYXMgYSBwYXR0ZXJuIGFjY29yZGluZyB0 byB0aGUgc2FtZSBydWxlcyB1c2VkIGJ5CisgICAgICAgIDxhcHBsaWNhdGlvbj5wc3FsPC9hcHBs aWNhdGlvbj4ncyA8bGl0ZXJhbD5cZDwvbGl0ZXJhbD4KKyAgICAgICAgY29tbWFuZHMgKHNlZSA8 eHJlZiBsaW5rZW5kPSJhcHAtcHNxbC1wYXR0ZXJucyIvPiksCisgICAgICAgIHNvIG11bHRpcGxl IGRhdGFiYXNlcyBjYW4gYWxzbyBiZSBleGNsdWRlZCBieSB3cml0aW5nIHdpbGRjYXJkCisgICAg ICAgIGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4uICBXaGVuIHVzaW5nIHdpbGRjYXJkcywgYmUg Y2FyZWZ1bCB0bworICAgICAgICBxdW90ZSB0aGUgcGF0dGVybiBpZiBuZWVkZWQgdG8gcHJldmVu dCBzaGVsbCB3aWxkY2FyZCBleHBhbnNpb24uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0 aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAg IDx0ZXJtPjxvcHRpb24+LWU8L29wdGlvbj48L3Rlcm0+CiAgICAgICA8dGVybT48b3B0aW9uPi0t ZXhpdC1vbi1lcnJvcjwvb3B0aW9uPjwvdGVybT4KQEAgLTMxNSw2ICszMzgsMTYgQEAgUG9zdGdy ZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRy eT4KIAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tZzwvb3B0aW9u PjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1nbG9iYWxzLW9ubHk8L29wdGlvbj48L3Rl cm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFJlc3RvcmUgb25s eSBnbG9iYWwgb2JqZWN0cyAocm9sZXMgYW5kIHRhYmxlc3BhY2VzKSwgbm8gZGF0YWJhc2VzLgor ICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5Pgor CiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1JIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5pbmRleDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgog ICAgICAgPHRlcm0+PG9wdGlvbj4tLWluZGV4PTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij5pbmRleDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL01ha2VmaWxlIGIvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCmluZGV4IDg2MDA2 ZDExMWMzLi5hNGU1NTdkNjJjNyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxl CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQpAQCAtNDcsOCArNDcsOCBAQCBhbGw6IHBn X2R1bXAgcGdfcmVzdG9yZSBwZ19kdW1wYWxsCiBwZ19kdW1wOiBwZ19kdW1wLm8gY29tbW9uLm8g cGdfZHVtcF9zb3J0Lm8gJChPQkpTKSB8IHN1Ym1ha2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQg c3VibWFrZS1saWJwZ2ZldXRpbHMKIAkkKENDKSAkKENGTEFHUykgcGdfZHVtcC5vIGNvbW1vbi5v IHBnX2R1bXBfc29ydC5vICQoT0JKUykgJChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykg LW8gJEAkKFgpCiAKLXBnX3Jlc3RvcmU6IHBnX3Jlc3RvcmUubyAkKE9CSlMpIHwgc3VibWFrZS1s aWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwotCSQoQ0MpICQoQ0ZM QUdTKSBwZ19yZXN0b3JlLm8gJChPQkpTKSAkKExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJT KSAtbyAkQCQoWCkKK3BnX3Jlc3RvcmU6IHBnX3Jlc3RvcmUubyBjb21tb25fZHVtcGFsbF9yZXN0 b3JlLm8gJChPQkpTKSB8IHN1Ym1ha2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1s aWJwZ2ZldXRpbHMKKwkkKENDKSAkKENGTEFHUykgcGdfcmVzdG9yZS5vIGNvbW1vbl9kdW1wYWxs X3Jlc3RvcmUubyAkKE9CSlMpICQoTERGTEFHUykgJChMREZMQUdTX0VYKSAkKExJQlMpIC1vICRA JChYKQogCiBwZ19kdW1wYWxsOiBwZ19kdW1wYWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gY29t bW9uX2R1bXBhbGxfcmVzdG9yZS5vICQoV0lOMzJSRVMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtl LWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwogCSQoQ0MpICQoQ0ZMQUdTKSBwZ19kdW1w YWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5vICQoV0lO MzJSRVMpICQoTERGTEFHUykgJChMREZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29u LmJ1aWxkCmluZGV4IDk3ZGJmYWViNjdmLi5kZGVjYWM1Y2YwOSAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19kdW1wL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZApA QCAtNjksNiArNjksNyBAQCBiaW5fdGFyZ2V0cyArPSBwZ19kdW1wYWxsCiAKIHBnX3Jlc3RvcmVf c291cmNlcyA9IGZpbGVzKAogICAncGdfcmVzdG9yZS5jJywKKyAgJ2NvbW1vbl9kdW1wYWxsX3Jl c3RvcmUuYycsCiApCiAKIGlmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJwpkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5o CmluZGV4IGU3ODNjYzY4ZDg5Li5jN2NlZDdhZGQxYiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaApAQCAtMzA5 LDcgKzMwOSw3IEBAIGV4dGVybiB2b2lkIFNldEFyY2hpdmVPcHRpb25zKEFyY2hpdmUgKkFILCBE dW1wT3B0aW9ucyAqZG9wdCwgUmVzdG9yZU9wdGlvbnMgKnJvCiAKIGV4dGVybiB2b2lkIFByb2Nl c3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2ZSAqQUhYKTsKIAotZXh0ZXJuIHZvaWQgUmVz dG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZlKEFy Y2hpdmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0YSk7CiAKIC8qIE9wZW4gYW4gZXhpc3RpbmcgYXJj aGl2ZSAqLwogZXh0ZXJuIEFyY2hpdmUgKk9wZW5BcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVj LCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmMKaW5kZXggNjMyMDc3MTEzYTQuLmZiMDcxMTUyN2JmIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF9hcmNoaXZlci5jCkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBpbnQJUmVzdG9yaW5nVG9EQihB cmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxl ICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1wVGltZXN0YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25z dCBjaGFyICptc2csIHRpbWVfdCB0aW0pOwogc3RhdGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVI YW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLQkJCQkJICBjb25zdCBwZ19jb21wcmVz c19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOworCQkJY29uc3QgcGdfY29tcHJlc3Nf c3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLCBib29sIGFwcGVuZF9kYXRhKTsKIHN0YXRp YyBDb21wcmVzc0ZpbGVIYW5kbGUgKlNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3Rh dGljIHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NGaWxlSGFu ZGxlICpzYXZlZE91dHB1dCk7CiAKQEAgLTMzNiw5ICszMzYsMTQgQEAgUHJvY2Vzc0FyY2hpdmVS ZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpBSFgpCiAJCVN0cmljdE5hbWVzQ2hlY2socm9wdCk7CiB9 CiAKLS8qIFB1YmxpYyAqLworLyoKKyAqIFJlc3RvcmVBcmNoaXZlCisgKgorICogSWYgYXBwZW5k X2RhdGEgaXMgc2V0LCB0aGVuIGFwcGVuZCBkYXRhIGludG8gZmlsZSBhcyB3ZSBhcmUgcmVzdG9y aW5nIGR1bXAKKyAqIG9mIG11bHRpcGxlIGRhdGFiYXNlcyB3aGljaCB3YXMgdGFrZW4gYnkgcGdf ZHVtcGFsbC4KKyAqLwogdm9pZAotUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQorUmVzdG9y ZUFyY2hpdmUoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhKQogewogCUFyY2hpdmVIYW5k bGUgKkFIID0gKEFyY2hpdmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0g QUgtPnB1YmxpYy5yb3B0OwpAQCAtNDU1LDcgKzQ2MCw3IEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hp dmUgKkFIWCkKIAkgKi8KIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5h bWUgfHwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05f Tk9ORSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Npb25f c3BlYyk7CisJCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9u X3NwZWMsIGFwcGVuZF9kYXRhKTsKIAogCWFocHJpbnRmKEFILCAiLS1cbi0tIFBvc3RncmVTUUwg ZGF0YWJhc2UgZHVtcFxuLS1cblxuIik7CiAKQEAgLTEyOTEsNyArMTI5Niw3IEBAIFByaW50VE9D U3VtbWFyeShBcmNoaXZlICpBSFgpCiAKIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9w dC0+ZmlsZW5hbWUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIG91dF9jb21wcmVz c2lvbl9zcGVjKTsKKwkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgb3V0X2NvbXByZXNz aW9uX3NwZWMsIGZhbHNlKTsKIAogCWlmIChzdHJmdGltZShzdGFtcF9zdHIsIHNpemVvZihzdGFt cF9zdHIpLCBQR0RVTVBfU1RSRlRJTUVfRk1ULAogCQkJCSBsb2NhbHRpbWUoJkFILT5jcmVhdGVE YXRlKSkgPT0gMCkKQEAgLTE2NzAsNyArMTY3NSw4IEBAIGFyY2hwcmludGYoQXJjaGl2ZSAqQUgs IGNvbnN0IGNoYXIgKmZtdCwuLi4pCiAKIHN0YXRpYyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhh bmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotCQkgIGNvbnN0IHBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKKwkJICBjb25zdCBwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCisJCSAgYm9vbCBhcHBlbmRfZGF0YSkKIHsKIAlD b21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAljb25zdCBjaGFyICptb2RlOwpAQCAtMTY5MCw3ICsx Njk2LDcgQEAgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFt ZSwKIAllbHNlCiAJCWZuID0gZmlsZW5vKHN0ZG91dCk7CiAKLQlpZiAoQUgtPm1vZGUgPT0gYXJj aE1vZGVBcHBlbmQpCisJaWYgKGFwcGVuZF9kYXRhIHx8IEFILT5tb2RlID09IGFyY2hNb2RlQXBw ZW5kKQogCQltb2RlID0gUEdfQklOQVJZX0E7CiAJZWxzZQogCQltb2RlID0gUEdfQklOQVJZX1c7 CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF90YXIuYwppbmRleCBiNWJhM2I0NmRkOS4uZDk0ZDBkZTJhNWQgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF90YXIuYwpAQCAtODI2LDcgKzgyNiw3IEBAIF9DbG9zZUFyY2hpdmUo QXJjaGl2ZUhhbmRsZSAqQUgpCiAJCXNhdlZlcmJvc2UgPSBBSC0+cHVibGljLnZlcmJvc2U7CiAJ CUFILT5wdWJsaWMudmVyYm9zZSA9IDA7CiAKLQkJUmVzdG9yZUFyY2hpdmUoKEFyY2hpdmUgKikg QUgpOworCQlSZXN0b3JlQXJjaGl2ZSgoQXJjaGl2ZSAqKSBBSCwgZmFsc2UpOwogCiAJCVNldEFy Y2hpdmVPcHRpb25zKChBcmNoaXZlICopIEFILCBzYXZEb3B0LCBzYXZSb3B0KTsKIApkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF91dGlscy5jCmluZGV4IDc5YWVjNWY1MTU4Li4wZjZhZDhiMjFkOCAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jCisrKyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfdXRpbHMuYwpAQCAtOTEsMTEgKzkxLDcgQEAgb25fZXhpdF9uaWNlbHko b25fZXhpdF9uaWNlbHlfY2FsbGJhY2sgZnVuY3Rpb24sIHZvaWQgKmFyZykKIHZvaWQKIGV4aXRf bmljZWx5KGludCBjb2RlKQogewotCWludAkJCWk7Ci0KLQlmb3IgKGkgPSBvbl9leGl0X25pY2Vs eV9pbmRleCAtIDE7IGkgPj0gMDsgaS0tKQotCQlvbl9leGl0X25pY2VseV9saXN0W2ldLmZ1bmN0 aW9uKGNvZGUsCi0JCQkJCQkJCQkJb25fZXhpdF9uaWNlbHlfbGlzdFtpXS5hcmcpOworCXJlc2V0 X2V4aXRfbmljZWx5X2xpc3QoY29kZSk7CiAKICNpZmRlZiBXSU4zMgogCWlmIChwYXJhbGxlbF9p bml0X2RvbmUgJiYgR2V0Q3VycmVudFRocmVhZElkKCkgIT0gbWFpblRocmVhZElkKQpAQCAtMTA0 LDMgKzEwMCwyMCBAQCBleGl0X25pY2VseShpbnQgY29kZSkKIAogCWV4aXQoY29kZSk7CiB9CisK Ky8qCisgKiByZXNldF9leGl0X25pY2VseV9saXN0CisgKgorICogY2xlYW5zIGluZGV4IG9mIGV4 aXRfbmljZWx5IGxpc3QuCisgKi8KK3ZvaWQKK3Jlc2V0X2V4aXRfbmljZWx5X2xpc3QoaW50IGNv ZGUpCit7CisJaW50ICAgICAgICAgaTsKKworCWZvciAoaSA9IG9uX2V4aXRfbmljZWx5X2luZGV4 IC0gMTsgaSA+PSAwOyBpLS0pCisJCW9uX2V4aXRfbmljZWx5X2xpc3RbaV0uZnVuY3Rpb24oY29k ZSwKKwkJCQlvbl9leGl0X25pY2VseV9saXN0W2ldLmFyZyk7CisKKwlvbl9leGl0X25pY2VseV9p bmRleCA9IDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxz LmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmgKaW5kZXggMzg1NTE5NDQ1MTMu LmMyMjQ5YTg4MTg1IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxz LmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5oCkBAIC0zMCw2ICszMCw3 IEBAIGV4dGVybiBjb25zdCBjaGFyICpwcm9nbmFtZTsKIGV4dGVybiB2b2lkIHNldF9kdW1wX3Nl Y3Rpb24oY29uc3QgY2hhciAqYXJnLCBpbnQgKmR1bXBTZWN0aW9ucyk7CiBleHRlcm4gdm9pZCBv bl9leGl0X25pY2VseShvbl9leGl0X25pY2VseV9jYWxsYmFjayBmdW5jdGlvbiwgdm9pZCAqYXJn KTsKIGV4dGVybiB2b2lkIGV4aXRfbmljZWx5KGludCBjb2RlKSBwZ19hdHRyaWJ1dGVfbm9yZXR1 cm4oKTsKK2V4dGVybiB2b2lkIHJlc2V0X2V4aXRfbmljZWx5X2xpc3QoaW50IGNvZGUpOwogCiAv KiBJbiBwZ19kdW1wLCB3ZSBtb2RpZnkgcGdfZmF0YWwgdG8gY2FsbCBleGl0X25pY2VseSBpbnN0 ZWFkIG9mIGV4aXQgKi8KICN1bmRlZiBwZ19mYXRhbApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggNGY0YWQyZWUx NTAuLmIzMTdkNmQ3MTIyIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTExODksNyArMTE4OSw3IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAqIHJpZ2h0IG5vdy4KIAkgKi8KIAlpZiAocGxhaW5U ZXh0KQotCQlSZXN0b3JlQXJjaGl2ZShmb3V0KTsKKwkJUmVzdG9yZUFyY2hpdmUoZm91dCwgZmFs c2UpOwogCiAJQ2xvc2VBcmNoaXZlKGZvdXQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcGFsbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwppbmRleCAxYTBj MWJiZWFlMy4uY2Q2MjM0MjA5ZDYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w YWxsLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwpAQCAtMTUsNiArMTUsNyBA QAogCiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAj aW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCkBAIC0yNSwxNCArMjYsMTYg QEAKICNpbmNsdWRlICJjb21tb24vaGFzaGZuX3Vuc3RhYmxlLmgiCiAjaW5jbHVkZSAiY29tbW9u L2xvZ2dpbmcuaCIKICNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29tbW9u X2R1bXBhbGxfcmVzdG9yZS5oIgogI2luY2x1ZGUgImR1bXB1dGlscy5oIgogI2luY2x1ZGUgImZl X3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdl dG9wdF9sb25nLmgiCi0jaW5jbHVkZSAicGdfYmFja3VwLmgiCisjaW5jbHVkZSAicGdfYmFja3Vw X2FyY2hpdmVyLmgiCiAKIC8qIHZlcnNpb24gc3RyaW5nIHdlIGV4cGVjdCBiYWNrIGZyb20gcGdf ZHVtcCAqLwogI2RlZmluZSBQR0RVTVBfVkVSU0lPTlNUUiAicGdfZHVtcCAoUG9zdGdyZVNRTCkg IiBQR19WRVJTSU9OICJcbiIKKyNkZWZpbmUgZXhpdF9uaWNlbHkoY29kZSkgZXhpdChjb2RlKQog CiB0eXBlZGVmIHN0cnVjdAogewpAQCAtNjUsOSArNjgsMTAgQEAgc3RhdGljIHZvaWQgZHJvcFRh Ymxlc3BhY2VzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVGFibGVzcGFjZXMoUEdj b25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGRyb3BEQnMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2 b2lkIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpOwot c3RhdGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pOworc3RhdGljIHZvaWQgZHVt cERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpOwog c3RhdGljIHZvaWQgZHVtcFRpbWVzdGFtcChjb25zdCBjaGFyICptc2cpOwotc3RhdGljIGludAly dW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cyk7Citz dGF0aWMgaW50CXJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0 ZV9vcHRzLAorCQljaGFyICpkYmZpbGUsIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpOwog c3RhdGljIHZvaWQgYnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4gKmNvbm4sCiAJCQkJCQkJIGNvbnN0 IGNoYXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAogCQkJCQkJCSBjb25zdCBjaGFyICpv Ymp0eXBlLCBjb25zdCBjaGFyICpvYmpuYW1lLApAQCAtNzYsNiArODAsOCBAQCBzdGF0aWMgdm9p ZCBleGVjdXRlQ29tbWFuZChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKIHN0YXRp YyB2b2lkIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLCBTaW1wbGVTdHJpbmdM aXN0ICpwYXR0ZXJucywKIAkJCQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCAqbmFtZXMpOwogc3Rh dGljIHZvaWQgcmVhZF9kdW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBs ZVN0cmluZ0xpc3QgKnBhdHRlcm4pOworc3RhdGljIHZvaWQgY3JlYXRlX29yX29wZW5fZGlyKGNv bnN0IGNoYXIgKmRpcm5hbWUpOworc3RhdGljIEFyY2hpdmVGb3JtYXQgcGFyc2VEdW1wRm9ybWF0 KGNvbnN0IGNoYXIgKmZvcm1hdCk7CiAKIHN0YXRpYyBjaGFyIHBnX2R1bXBfYmluW01BWFBHUEFU SF07CiBzdGF0aWMgY29uc3QgY2hhciAqcHJvZ25hbWU7CkBAIC0xMDUsNyArMTExLDcgQEAgc3Rh dGljIGludAlub19zdWJzY3JpcHRpb25zID0gMDsKIHN0YXRpYyBpbnQJbm9fdG9hc3RfY29tcHJl c3Npb24gPSAwOwogc3RhdGljIGludAlub191bmxvZ2dlZF90YWJsZV9kYXRhID0gMDsKIHN0YXRp YyBpbnQJbm9fcm9sZV9wYXNzd29yZHMgPSAwOwotc3RhdGljIGludAlzZXJ2ZXJfdmVyc2lvbjsK K3N0YXRpYyBpbnQgc2VydmVyX3ZlcnNpb247CiBzdGF0aWMgaW50CWxvYWRfdmlhX3BhcnRpdGlv bl9yb290ID0gMDsKIHN0YXRpYyBpbnQJb25fY29uZmxpY3RfZG9fbm90aGluZyA9IDA7CiBzdGF0 aWMgaW50CXN0YXRpc3RpY3Nfb25seSA9IDA7CkBAIC0xMjAsOCArMTI2LDYgQEAgc3RhdGljIGNo YXIgKmZpbGVuYW1lID0gTlVMTDsKIHN0YXRpYyBTaW1wbGVTdHJpbmdMaXN0IGRhdGFiYXNlX2V4 Y2x1ZGVfcGF0dGVybnMgPSB7TlVMTCwgTlVMTH07CiBzdGF0aWMgU2ltcGxlU3RyaW5nTGlzdCBk YXRhYmFzZV9leGNsdWRlX25hbWVzID0ge05VTEwsIE5VTEx9OwogCi0jZGVmaW5lIGV4aXRfbmlj ZWx5KGNvZGUpIGV4aXQoY29kZSkKLQogaW50CiBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p CiB7CkBAIC0xNDYsNiArMTUwLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQl7 InBhc3N3b3JkIiwgbm9fYXJndW1lbnQsIE5VTEwsICdXJ30sCiAJCXsibm8tcHJpdmlsZWdlcyIs IG5vX2FyZ3VtZW50LCBOVUxMLCAneCd9LAogCQl7Im5vLWFjbCIsIG5vX2FyZ3VtZW50LCBOVUxM LCAneCd9LAorCQl7ImZvcm1hdCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnRid9LAogCiAJ CS8qCiAJCSAqIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBkb24ndCBoYXZlIGFuIGVxdWl2YWxlbnQg c2hvcnQgb3B0aW9uIGxldHRlcgpAQCAtMTkxLDYgKzE5Niw4IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKIAljaGFyCSAgICpwZ2RiID0gTlVMTDsKIAljaGFyCSAgICp1c2Vfcm9sZSA9 IE5VTEw7CiAJY29uc3QgY2hhciAqZHVtcGVuY29kaW5nID0gTlVMTDsKKwlBcmNoaXZlRm9ybWF0 IGFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJY29uc3QgY2hhciAqZm9ybWF0TmFtZSA9ICJw IjsKIAl0cml2YWx1ZQlwcm9tcHRfcGFzc3dvcmQgPSBUUklfREVGQVVMVDsKIAlib29sCQlkYXRh X29ubHkgPSBmYWxzZTsKIAlib29sCQlnbG9iYWxzX29ubHkgPSBmYWxzZTsKQEAgLTI0MCw3ICsy NDcsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAlwZ2R1bXBvcHRzID0gY3Jl YXRlUFFFeHBCdWZmZXIoKTsKIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3Ys ICJhY2Q6RTpmOmdoOmw6T3A6cnNTOnRVOnZ3V3giLCBsb25nX29wdGlvbnMsICZvcHRpbmRleCkp ICE9IC0xKQorCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY2Q6RTpmOkY6 Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCiAJ ewogCQlzd2l0Y2ggKGMpCiAJCXsKQEAgLTI2OCw3ICsyNzUsOSBAQCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCiAJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0cywgIiAtZiAi KTsKIAkJCQlhcHBlbmRTaGVsbFN0cmluZyhwZ2R1bXBvcHRzLCBmaWxlbmFtZSk7CiAJCQkJYnJl YWs7Ci0KKwkJCWNhc2UgJ0YnOgorCQkJCWZvcm1hdE5hbWUgPSBwZ19zdHJkdXAob3B0YXJnKTsK KwkJCQlicmVhazsKIAkJCWNhc2UgJ2cnOgogCQkJCWdsb2JhbHNfb25seSA9IHRydWU7CiAJCQkJ YnJlYWs7CkBAIC00MTcsNiArNDI2LDIxIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK IAkJZXhpdF9uaWNlbHkoMSk7CiAJfQogCisJLyogR2V0IGZvcm1hdCBmb3IgZHVtcC4gKi8KKwlh cmNoRHVtcEZvcm1hdCA9IHBhcnNlRHVtcEZvcm1hdChmb3JtYXROYW1lKTsKKworCS8qCisJICog SWYgbm9uLXBsYWluIGZvcm1hdCBpcyBzcGVjaWZpZWQgdGhlbiB3ZSBtdXN0IHByb3ZpZGUgdGhl CisJICogZmlsZSBuYW1lIHRvIGNyZWF0ZSBvbmUgbWFpbiBkaXJlY3RvcnkuCisJICovCisJaWYg KGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsICYmCisJCQkoIWZpbGVuYW1lIHx8IHN0cmNtcChm aWxlbmFtZSwgIiIpID09IDApKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJvcHRpb25zIC1GLy0tZm9y bWF0PWR8Y3x0IHJlcXVpcmVzIG9wdGlvbiAtZi8tLWZpbGUgd2l0aCBub24tZW1wdHkgc3RyaW5n Iik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZv cm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXRfbmljZWx5KDEpOworCX0KKwogCS8qCiAJICog SWYgcGFzc3dvcmQgdmFsdWVzIGFyZSBub3QgcmVxdWlyZWQgaW4gdGhlIGR1bXAsIHN3aXRjaCB0 byB1c2luZwogCSAqIHBnX3JvbGVzIHdoaWNoIGlzIGVxdWFsbHkgdXNlZnVsLCBqdXN0IG1vcmUg bGlrZWx5IHRvIGhhdmUgdW5yZXN0cmljdGVkCkBAIC00NzEsNiArNDk1LDMzIEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpZiAoc3RhdGlzdGljc19vbmx5KQogCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC0tc3RhdGlzdGljcy1vbmx5Iik7CiAKKwkvKgorCSAq IE9wZW4gdGhlIG91dHB1dCBmaWxlIGlmIHJlcXVpcmVkLCBvdGhlcndpc2UgdXNlIHN0ZG91dC4g IElmIHJlcXVpcmVkLAorCSAqIHRoZW4gY3JlYXRlIG5ldyBkaXJlY3RvcnkgYW5kIGdsb2JhbC5k YXQgZmlsZS4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQlj aGFyCXRvY19wYXRoW01BWFBHUEFUSF07CisKKwkJLyogQ3JlYXRlIG5ldyBkaXJlY3Rvcnkgb3Ig YWNjZXB0IHRoZSBlbXB0eSBleGlzdGluZyBkaXJlY3RvcnkuICovCisJCWNyZWF0ZV9vcl9vcGVu X2RpcihmaWxlbmFtZSk7CisKKwkJc25wcmludGYodG9jX3BhdGgsIE1BWFBHUEFUSCwgIiVzL2ds b2JhbC5kYXQiLCBmaWxlbmFtZSk7CisKKwkJT1BGID0gZm9wZW4odG9jX3BhdGgsIFBHX0JJTkFS WV9XKTsKKwkJaWYgKCFPUEYpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZ2xvYmFsLmRh dCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJfQorCWVsc2UgaWYgKGZpbGVuYW1lKQor CXsKKwkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKKwkJaWYgKCFPUEYpCisJ CQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJ CSBmaWxlbmFtZSk7CisJfQorCWVsc2UKKwkJT1BGID0gc3Rkb3V0OworCiAJLyoKIAkgKiBJZiB0 aGVyZSB3YXMgYSBkYXRhYmFzZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgdXNlIHRo YXQsCiAJICogb3RoZXJ3aXNlIHRyeSB0byBjb25uZWN0IHRvIGRhdGFiYXNlICJwb3N0Z3JlcyIs IGFuZCBmYWlsaW5nIHRoYXQKQEAgLTUxMCwxOSArNTYxLDYgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCWV4cGFuZF9kYm5hbWVfcGF0dGVybnMoY29ubiwgJmRhdGFiYXNlX2V4Y2x1 ZGVfcGF0dGVybnMsCiAJCQkJCQkgICAmZGF0YWJhc2VfZXhjbHVkZV9uYW1lcyk7CiAKLQkvKgot CSAqIE9wZW4gdGhlIG91dHB1dCBmaWxlIGlmIHJlcXVpcmVkLCBvdGhlcndpc2UgdXNlIHN0ZG91 dAotCSAqLwotCWlmIChmaWxlbmFtZSkKLQl7Ci0JCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19C SU5BUllfVyk7Ci0JCWlmICghT1BGKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1 dCBmaWxlIFwiJXNcIjogJW0iLAotCQkJCQkgZmlsZW5hbWUpOwotCX0KLQllbHNlCi0JCU9QRiA9 IHN0ZG91dDsKLQogCS8qCiAJICogU2V0IHRoZSBjbGllbnQgZW5jb2RpbmcgaWYgcmVxdWVzdGVk LgogCSAqLwpAQCAtNjIyLDcgKzY2MCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK IAl9CiAKIAlpZiAoIWdsb2JhbHNfb25seSAmJiAhcm9sZXNfb25seSAmJiAhdGFibGVzcGFjZXNf b25seSkKLQkJZHVtcERhdGFiYXNlcyhjb25uKTsKKwkJZHVtcERhdGFiYXNlcyhjb25uLCBhcmNo RHVtcEZvcm1hdCk7CiAKIAlQUWZpbmlzaChjb25uKTsKIApAQCAtNjM1LDcgKzY3Myw3IEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJZmNsb3NlKE9QRik7CiAKIAkJLyogc3luYyB0 aGUgcmVzdWx0aW5nIGZpbGUsIGVycm9ycyBhcmUgbm90IGZhdGFsICovCi0JCWlmIChkb3N5bmMp CisJCWlmIChkb3N5bmMgJiYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKSkKIAkJCSh2b2lk KSBmc3luY19mbmFtZShmaWxlbmFtZSwgZmFsc2UpOwogCX0KIApAQCAtNjQ2LDEyICs2ODQsMTQg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogc3RhdGljIHZvaWQKIGhlbHAodm9pZCkK IHsKLQlwcmludGYoXygiJXMgZXh0cmFjdHMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIg aW50byBhbiBTUUwgc2NyaXB0IGZpbGUuXG5cbiIpLCBwcm9nbmFtZSk7CisJcHJpbnRmKF8oIiVz IGV4dHJhY3RzIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGJhc2VkIG9uIHNwZWNpZmll ZCBkdW1wIGZvcm1hdC5cblxuIiksIHByb2duYW1lKTsKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7 CiAJcHJpbnRmKF8oIiAgJXMgW09QVElPTl0uLi5cbiIpLCBwcm9nbmFtZSk7CiAKIAlwcmludGYo XygiXG5HZW5lcmFsIG9wdGlvbnM6XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWYsIC0tZmlsZT1GSUxF TkFNRSAgICAgICAgICBvdXRwdXQgZmlsZSBuYW1lXG4iKSk7CisJcHJpbnRmKF8oIiAgLUYsIC0t Zm9ybWF0PWN8ZHx0fHAgICAgICAgICBvdXRwdXQgZmlsZSBmb3JtYXQgKGN1c3RvbSwgZGlyZWN0 b3J5LCB0YXIsXG4iCisJCQkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbiB0 ZXh0IChkZWZhdWx0KSlcbiIpKTsKIAlwcmludGYoXygiICAtdiwgLS12ZXJib3NlICAgICAgICAg ICAgICAgIHZlcmJvc2UgbW9kZVxuIikpOwogCXByaW50ZihfKCIgIC1WLCAtLXZlcnNpb24gICAg ICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRoZW4gZXhpdFxuIikpOwog CXByaW50ZihfKCIgIC0tbG9jay13YWl0LXRpbWVvdXQ9VElNRU9VVCAgZmFpbCBhZnRlciB3YWl0 aW5nIFRJTUVPVVQgZm9yIGEgdGFibGUgbG9ja1xuIikpOwpAQCAtMTU1NCwxMCArMTU5NCwxMyBA QCBleHBhbmRfZGJuYW1lX3BhdHRlcm5zKFBHY29ubiAqY29ubiwKICAqIER1bXAgY29udGVudHMg b2YgZGF0YWJhc2VzLgogICovCiBzdGF0aWMgdm9pZAotZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNv bm4pCitkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZv cm1hdCkKIHsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJaTsKKwljaGFyCQlkYl9zdWJkaXJb TUFYUEdQQVRIXTsKKwljaGFyCQlkYmZpbGVwYXRoW01BWFBHUEFUSF07CisJRklMRSAgICAgICAq bWFwX2ZpbGUgPSBOVUxMOwogCiAJLyoKIAkgKiBTa2lwIGRhdGFiYXNlcyBtYXJrZWQgbm90IGRh dGFsbG93Y29ubiwgc2luY2Ugd2UnZCBiZSB1bmFibGUgdG8gY29ubmVjdApAQCAtMTU3MSw3ICsx NjE0LDcgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJICogZG9lc24ndCBoYXZlIHNv bWUgZmFpbHVyZSBtb2RlIHdpdGggLS1jbGVhbi4KIAkgKi8KIAlyZXMgPSBleGVjdXRlUXVlcnko Y29ubiwKLQkJCQkJICAgIlNFTEVDVCBkYXRuYW1lICIKKwkJCQkJICAgIlNFTEVDVCBkYXRuYW1l LCBvaWQgIgogCQkJCQkgICAiRlJPTSBwZ19kYXRhYmFzZSBkICIKIAkJCQkJICAgIldIRVJFIGRh dGFsbG93Y29ubiBBTkQgZGF0Y29ubmxpbWl0ICE9IC0yICIKIAkJCQkJICAgIk9SREVSIEJZIChk YXRuYW1lIDw+ICd0ZW1wbGF0ZTEnKSwgZGF0bmFtZSIpOwpAQCAtMTU3OSw5ICsxNjIyLDMzIEBA IGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCiAJ CWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlc1xuLS1cblxuIik7CiAKKwkvKgorCSAqIElm IGRpcmVjdG9yeS90YXIvY3VzdG9tIGZvcm1hdCBpcyBzcGVjaWZpZWQgdGhlbiBjcmVhdGUgYSBz dWJkaXJlY3RvcnkKKwkgKiB1bmRlciB0aGUgbWFpbiBkaXJlY3RvcnkgYW5kIGVhY2ggZGF0YWJh c2UgZHVtcCBmaWxlIHN1YmRpcmVjdG9yeSB3aWxsCisJICogYmUgY3JlYXRlZCB1bmRlciB0aGUg c3ViZGlyZWN0b3J5IGluIGFyY2hpdmUgbW9kZSBhcyBwZXIgc2luZ2xlIGRiIHBnX2R1bXAuCisJ ICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJY2hhcgltYXBfZmls ZV9wYXRoW01BWFBHUEFUSF07CisKKwkJc25wcmludGYoZGJfc3ViZGlyLCBNQVhQR1BBVEgsICIl cy9kYXRhYmFzZXMiLCBmaWxlbmFtZSk7CisKKwkJLyogQ3JlYXRlIGEgc3ViZGlyZWN0b3J5IHdp dGggJ2RhdGFiYXNlcycgbmFtZSB1bmRlciBtYWluIGRpcmVjdG9yeS4gKi8KKwkJaWYgKG1rZGly KGRiX3N1YmRpciwgMDc1NSkgIT0gMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIHN1 YmRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgZGJfc3ViZGlyKTsKKworCQlzbnByaW50ZihtYXBfZmls ZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9tYXAuZGF0IiwgZmlsZW5hbWUpOworCisJCS8qIENyZWF0 ZSBhIG1hcCBmaWxlICh0byBzdG9yZSBkYm9pZCBhbmQgZGJuYW1lKSAqLworCQltYXBfZmlsZSA9 IGZvcGVuKG1hcF9maWxlX3BhdGgsIFBHX0JJTkFSWV9XKTsKKwkJaWYgKCFtYXBfZmlsZSkKKwkJ CXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBtYXAgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykp OworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsKIAkJY2hh cgkgICAqZGJuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOworCQljaGFyCSAgICpvaWQgPSBQ UWdldHZhbHVlKHJlcywgaSwgMSk7CiAJCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzOwogCQlpbnQJ CQlyZXQ7CiAKQEAgLTE1OTYsNiArMTY2MywyMiBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29u bikKIAkJCWNvbnRpbnVlOwogCQl9CiAKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBub24tcGxhaW4g ZHVtcCBmb3JtYXQsIHRoZW4gYXBwZW5kIGRib2lkIGFuZCBkYm5hbWUgdG8KKwkJICogdGhlIG1h cC5kYXQgZmlsZS4KKwkJICovCisJCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJ eworCQkJc25wcmludGYoZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIiIsIGRi X3N1YmRpciwgb2lkKTsKKworCQkJLyoKKwkJCSAqIFB1dCB0d28gbGluZSBlbnRyeSBmb3IgZGJv aWQgYW5kIGRibmFtZSBpbiBtYXAgZmlsZS4gIEZpcnN0IGxpbmUKKwkJCSAqIHdpbGwgaGF2ZSBk Ym9pZCBhbmQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gZGJuYW1lIGFuZCBzZWNvbmQKKwkJCSAq IGxpbmUgd2lsbCBoYXZlIGFjdHVhbCBkYm5hbWUuCisJCQkgKi8KKwkJCWZwcmludGYobWFwX2Zp bGUsICIlcyAldVxuJXNcbiIsIG9pZCwgc3RybGVuKGRibmFtZSksIHBnX3N0cmR1cChkYm5hbWUp KTsKKwkJfQorCiAJCXBnX2xvZ19pbmZvKCJkdW1waW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRibmFt ZSk7CiAKIAkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1bXBcbi0tXG5c biIsIGRibmFtZSk7CkBAIC0xNjE0LDkgKzE2OTcsMTcgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4g KmNvbm4pCiAJCQkJY3JlYXRlX29wdHMgPSAiLS1jbGVhbiAtLWNyZWF0ZSI7CiAJCQllbHNlCiAJ CQl7Ci0JCQkJY3JlYXRlX29wdHMgPSAiIjsKIAkJCQkvKiBTaW5jZSBwZ19kdW1wIHdvbid0IGVt aXQgYSBcY29ubmVjdCBjb21tYW5kLCB3ZSBtdXN0ICovCi0JCQkJZnByaW50ZihPUEYsICJcXGNv bm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKKwkJCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51 bGwpCisJCQkJeworCQkJCQljcmVhdGVfb3B0cyA9ICIiOworCQkJCQlmcHJpbnRmKE9QRiwgIlxc Y29ubmVjdCAlc1xuXG4iLCBkYm5hbWUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkv KiBEdW1waW5nIGFsbCBkYXRhYmFzZXMgc28gYWRkIC0tY3JlYXRlIG9wdGlvbi4gKi8KKwkJCQkJ Y3JlYXRlX29wdHMgPSAiLS1jcmVhdGUiOworCQkJCX0KIAkJCX0KIAkJfQogCQllbHNlCkBAIC0x NjI1LDE5ICsxNzE2LDMwIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQlpZiAoZmls ZW5hbWUpCiAJCQlmY2xvc2UoT1BGKTsKIAotCQlyZXQgPSBydW5QZ0R1bXAoZGJuYW1lLCBjcmVh dGVfb3B0cyk7CisJCXJldCA9IHJ1blBnRHVtcChkYm5hbWUsIGNyZWF0ZV9vcHRzLCBkYmZpbGVw YXRoLCBhcmNoRHVtcEZvcm1hdCk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXBnX2ZhdGFsKCJwZ19k dW1wIGZhaWxlZCBvbiBkYXRhYmFzZSBcIiVzXCIsIGV4aXRpbmciLCBkYm5hbWUpOwogCiAJCWlm IChmaWxlbmFtZSkKIAkJewotCQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9BKTsK KwkJCWNoYXIJdG9jX3BhdGhbTUFYUEdQQVRIXTsKKworCQkJaWYgKGFyY2hEdW1wRm9ybWF0ICE9 IGFyY2hOdWxsKQorCQkJCXNucHJpbnRmKHRvY19wYXRoLCBNQVhQR1BBVEgsICIlcy9nbG9iYWwu ZGF0IiwgZmlsZW5hbWUpOworCQkJZWxzZQorCQkJCXNucHJpbnRmKHRvY19wYXRoLCBNQVhQR1BB VEgsICIlcyIsIGZpbGVuYW1lKTsKKworCQkJT1BGID0gZm9wZW4odG9jX3BhdGgsIFBHX0JJTkFS WV9BKTsKIAkJCWlmICghT1BGKQogCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmUtb3BlbiB0aGUg b3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCQkgZmlsZW5hbWUpOworCQkJCQkJIHRvY19w YXRoKTsKIAkJfQogCX0KIAorCS8qIENsb3NlIG1hcCBmaWxlICovCisJaWYgKGFyY2hEdW1wRm9y bWF0ICE9IGFyY2hOdWxsKQorCQlmY2xvc2UobWFwX2ZpbGUpOworCiAJUFFjbGVhcihyZXMpOwog fQogCkBAIC0xNjQ3LDcgKzE3NDksOCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKICAq IFJ1biBwZ19kdW1wIG9uIGRibmFtZSwgd2l0aCBzcGVjaWZpZWQgb3B0aW9ucy4KICAqLwogc3Rh dGljIGludAotcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRl X29wdHMpCitydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVf b3B0cywgY2hhciAqZGJmaWxlLAorCQlBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQogewog CVBRRXhwQnVmZmVyRGF0YSBjb25uc3RyYnVmOwogCVBRRXhwQnVmZmVyRGF0YSBjbWQ7CkBAIC0x NjU2LDE3ICsxNzU5LDM2IEBAIHJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNo YXIgKmNyZWF0ZV9vcHRzKQogCWluaXRQUUV4cEJ1ZmZlcigmY29ubnN0cmJ1Zik7CiAJaW5pdFBR RXhwQnVmZmVyKCZjbWQpOwogCi0JcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAlcyAl cyIsIHBnX2R1bXBfYmluLAotCQkJCQkgIHBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9vcHRzKTsK LQogCS8qCi0JICogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1c2UgdGhlIHVuZG9jdW1lbnRlZCBw bGFpbi1hcHBlbmQgcGdfZHVtcAotCSAqIGZvcm1hdC4KKwkgKiBJZiB0aGlzIGlzIG5vbi1wbGFp biBmb3JtYXQgZHVtcCwgdGhlbiBhcHBlbmQgZmlsZSBuYW1lIGFuZCBkdW1wCisJICogZm9ybWF0 IHRvIHRoZSBwZ19kdW1wIGNvbW1hbmQgdG8gZ2V0IGFyY2hpdmUgZHVtcC4KIAkgKi8KLQlpZiAo ZmlsZW5hbWUpCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIpOworCWlmIChh cmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQs ICJcIiVzXCIgLWYgJXMgJXMiLCBwZ19kdW1wX2JpbiwKKwkJCQkJCSAgZGJmaWxlLCBjcmVhdGVf b3B0cyk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hEaXJlY3RvcnkpCisJCQlhcHBl bmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD1kaXJlY3RvcnkgIik7CisJCWVsc2Ug aWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0b20pCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmY21kLCAiICAtLWZvcm1hdD1jdXN0b20gIik7CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hUYXIpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD10 YXIgIik7CisJfQogCWVsc2UKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRnAgIik7 CisJeworCQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wiICVzICVzIiwgcGdfZHVtcF9i aW4sCisJCQkJCQlwZ2R1bXBvcHRzLT5kYXRhLCBjcmVhdGVfb3B0cyk7CisKKwkJLyoKKwkJKiBJ ZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5kb2N1bWVudGVkIHBsYWluLWFwcGVuZCBw Z19kdW1wCisJCSogZm9ybWF0LgorCQkqLworCQlpZiAoZmlsZW5hbWUpCisJCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cigmY21kLCAiIC1GYSAiKTsKKwkJZWxzZQorCQkJYXBwZW5kUFFFeHBCdWZmZXJT dHIoJmNtZCwgIiAtRnAgIik7CisJfQogCiAJLyoKIAkgKiBBcHBlbmQgdGhlIGRhdGFiYXNlIG5h bWUgdG8gdGhlIGFscmVhZHktY29uc3RydWN0ZWQgc3RlbSBvZiBjb25uZWN0aW9uCkBAIC0xODEx LDMgKzE5MzMsOTEgQEAgcmVhZF9kdW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUs IFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4pCiAKIAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0K KworLyoKKyAqIGNyZWF0ZV9vcl9vcGVuX2RpcgorICoKKyAqIFRoaXMgd2lsbCBjcmVhdGUgYSBu ZXcgZGlyZWN0b3J5IHdpdGggZ2l2ZW4gbmFtZS4gIElmIHRoZXJlIGlzIGFscmVhZHkgc2FtZQor ICogZW1wdHkgZGlyZWN0b3J5IGV4aXN0LCB0aGVuIHVzZSBpdC4KKyAqLworc3RhdGljIHZvaWQK K2NyZWF0ZV9vcl9vcGVuX2Rpcihjb25zdCBjaGFyICpkaXJuYW1lKQoreworCXN0cnVjdCBzdGF0 CQlzdDsKKwlib29sCQkJaXNfZW1wdHkgPSBmYWxzZTsKKworCS8qIHdlIGFjY2VwdCBhbiBlbXB0 eSBleGlzdGluZyBkaXJlY3RvcnkgKi8KKwlpZiAoc3RhdChkaXJuYW1lLCAmc3QpID09IDAgJiYg U19JU0RJUihzdC5zdF9tb2RlKSkKKwl7CisJCURJUgkJKmRpciA9IG9wZW5kaXIoZGlybmFtZSk7 CisKKwkJaWYgKGRpcikKKwkJeworCQkJc3RydWN0IGRpcmVudAkqZDsKKworCQkJaXNfZW1wdHkg PSB0cnVlOworCisJCQl3aGlsZSAoZXJybm8gPSAwLCAoZCA9IHJlYWRkaXIoZGlyKSkpCisJCQl7 CisJCQkJaWYgKHN0cmNtcChkLT5kX25hbWUsICIuIikgIT0gMCAmJiBzdHJjbXAoZC0+ZF9uYW1l LCAiLi4iKSAhPSAwKQorCQkJCXsKKwkJCQkJaXNfZW1wdHkgPSBmYWxzZTsKKwkJCQkJYnJlYWs7 CisJCQkJfQorCQkJfQorCisJCQlpZiAoZXJybm8pCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBy ZWFkIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwKKwkJCQkJCWRpcm5hbWUpOworCisJCQlpZiAoY2xv c2VkaXIoZGlyKSkKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGRpcmVjdG9yeSBcIiVz XCI6ICVtIiwKKwkJCQkJCWRpcm5hbWUpOworCQl9CisKKwkJaWYoIWlzX2VtcHR5KQorCQl7CisJ CQlwZ19sb2dfZXJyb3IoImRpcmVjdG9yeSBcIiVzXCIgZXhpc3RzIGJ1dCBpcyBub3QgZW1wdHki LCBkaXJuYW1lKTsKKwkJCXBnX2xvZ19lcnJvcl9oaW50KCJJZiB5b3Ugd2FudCB0byBkdW1wIGRh dGEgb24gdGhpcyBkaXJlY3RvcnksIGVpdGhlciByZW1vdmUgb3IgZW1wdHkgIgorCQkJCQkJCSAg InRoaXMgZGlyZWN0b3J5IFwiJXNcIiBvciBydW4gJXMgIgorCQkJCQkJCSAgIndpdGggYW4gYXJn dW1lbnQgb3RoZXIgdGhhbiBcIiVzXCIuIiwKKwkJCQkJCQkgIGRpcm5hbWUsIHByb2duYW1lLCBk aXJuYW1lKTsKKwkJCWV4aXRfbmljZWx5KDEpOworCQl9CisJfQorCWVsc2UgaWYgKG1rZGlyKGRp cm5hbWUsIDA3MDApIDwgMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5 IFwiJXNcIjogJW0iLCBkaXJuYW1lKTsKK30KKworLyoKKyAqIHBhcnNlRHVtcEZvcm1hdAorICoK KyAqIFRoaXMgd2lsbCB2YWxpZGF0ZSBkdW1wIGZvcm1hdHMuCisgKi8KK3N0YXRpYyBBcmNoaXZl Rm9ybWF0CitwYXJzZUR1bXBGb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0KQoreworCUFyY2hpdmVG b3JtYXQJYXJjaER1bXBGb3JtYXQ7CisKKwlpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJjIikg PT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoQ3VzdG9tOworCWVsc2UgaWYgKHBnX3N0cmNh c2VjbXAoZm9ybWF0LCAiY3VzdG9tIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoQ3Vz dG9tOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiZCIpID09IDApCisJCWFyY2hE dW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1h dCwgImRpcmVjdG9yeSIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsK KwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInAiKSA9PSAwKQorCQlhcmNoRHVtcEZv cm1hdCA9IGFyY2hOdWxsOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicGxhaW4i KSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOworCWVsc2UgaWYgKHBnX3N0cmNh c2VjbXAoZm9ybWF0LCAidCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaFRhcjsKKwll bHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInRhciIpID09IDApCisJCWFyY2hEdW1wRm9y bWF0ID0gYXJjaFRhcjsKKwllbHNlCisJCXBnX2ZhdGFsKCJ1bnJlY29nbml6ZWQgYXJjaGl2ZSBm b3JtYXQgXCIlc1wiOyBwbGVhc2Ugc3BlY2lmeSBcImNcIiwgXCJkXCIsIFwicFwiLCBvciBcInRc IiIsCisJCQkJZm9ybWF0KTsKKworCXJldHVybiBhcmNoRHVtcEZvcm1hdDsKK30KZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVz dG9yZS5jCmluZGV4IDEzZTRkYzUwN2UwLi5kZTBmMzFjZjY5MyAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19kdW1wL3BnX3Jlc3RvcmUuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5j CkBAIC0yLDcgKzIsNyBAQAogICoKICAqIHBnX3Jlc3RvcmUuYwogICoJcGdfcmVzdG9yZSBpcyBh biB1dGlsaXR5IGV4dHJhY3RpbmcgcG9zdGdyZXMgZGF0YWJhc2UgZGVmaW5pdGlvbnMKLSAqCWZy b20gYSBiYWNrdXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAgdXNpbmcgdGhlIGFyY2hpdmVy CisgKglmcm9tIGEgYmFja3VwIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wL3BnX2R1bXBhbGwg dXNpbmcgdGhlIGFyY2hpdmVyCiAgKglpbnRlcmZhY2UuCiAgKgogICoJcGdfcmVzdG9yZSB3aWxs IHJlYWQgdGhlIGJhY2t1cCBhcmNoaXZlIGFuZApAQCAtNDEsMzAgKzQxLDc2IEBACiAjaW5jbHVk ZSAicG9zdGdyZXNfZmUuaCIKIAogI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3lzL3N0 YXQuaD4KICNpZmRlZiBIQVZFX1RFUk1JT1NfSAogI2luY2x1ZGUgPHRlcm1pb3MuaD4KICNlbmRp ZgogCisjaW5jbHVkZSAiY29tbW9uL2Nvbm5lY3QuaCIKKyNpbmNsdWRlICJjb21wcmVzc19pby5o IgorI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJjb21tb25fZHVtcGFsbF9y ZXN0b3JlLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmgiCisjaW5jbHVkZSAi ZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAiZmlsdGVyLmgiCiAjaW5jbHVkZSAi Z2V0b3B0X2xvbmcuaCIKICNpbmNsdWRlICJwYXJhbGxlbC5oIgorI2luY2x1ZGUgInBnX2JhY2t1 cF9hcmNoaXZlci5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgogCit0eXBlZGVmIHN0 cnVjdCBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCit7CisJc3RydWN0IFNpbXBsZURhdGFiYXNl T2lkTGlzdENlbGwJKm5leHQ7CisJT2lkCQkJCQkJCQkJZGJfb2lkOworCWNvbnN0IGNoYXIJCQkJ CQkJKmRiX25hbWU7Cit9IFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGw7CisKK3R5cGVkZWYgc3Ry dWN0IFNpbXBsZURhdGFiYXNlT2lkTGlzdAoreworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwg KmhlYWQ7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqdGFpbDsKK30gU2ltcGxlRGF0YWJh c2VPaWRMaXN0OworCiBzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSk7CiBz dGF0aWMgdm9pZCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVz dG9yZU9wdGlvbnMgKm9wdHMpOworc3RhdGljIGJvb2wgSXNGaWxlRXhpc3RzSW5EaXJlY3Rvcnko Y29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CitzdGF0aWMgaW50IHJlc3Rv cmVPbmVEYXRhYmFzZShjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAq b3B0cywKKwkJCQkJCQkgIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhKTsKK3N0YXRp YyBpbnQgUmVhZE9uZVN0YXRlbWVudChTdHJpbmdJbmZvIGluQnVmLCBGSUxFICpwZmlsZSk7Citz dGF0aWMgaW50IHJlc3RvcmVBbGxEYXRhYmFzZXMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpk dW1wZGlycGF0aCwKKwkJCQkJCQkgICBTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVy bnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVtV29ya2Vycyk7CitzdGF0aWMgaW50IHBy b2Nlc3NfZ2xvYmFsX3NxbF9jb21tYW5kcyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBk aXJwYXRoLAorCQkJCQkJCQkJCWNvbnN0IGNoYXIgKm91dGZpbGUpOworc3RhdGljIHZvaWQgY29w eV9vcl9wcmludF9nbG9iYWxfZmlsZShjb25zdCBjaGFyICpvdXRmaWxlLCBGSUxFICpwZmlsZSk7 CitzdGF0aWMgaW50IGdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQR2Nvbm4gKmNvbm4sCisJ CVNpbXBsZURhdGFiYXNlT2lkTGlzdCAqZGJuYW1lX29pZF9saXN0LAorCQlTaW1wbGVTdHJpbmdM aXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMpOworc3RhdGljIGludCBnZXRfZGJuYW1lX29pZF9saXN0 X2Zyb21fbWZpbGUoY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCQkJCQkJCQkJICBTaW1wbGVE YXRhYmFzZU9pZExpc3QgKmRibmFtZV9vaWRfbGlzdCk7CitzdGF0aWMgdm9pZCBzaW1wbGVfZGJf b2lkX2xpc3RfYXBwZW5kKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCwgT2lkIGRiX29pZCwK KwkJCQkJCQkJCSAgY29uc3QgY2hhciAqZGJuYW1lKTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9zdHJp bmdfZnVsbF9saXN0X2RlbGV0ZShTaW1wbGVTdHJpbmdMaXN0ICpsaXN0KTsKK3N0YXRpYyB2b2lk IHNpbXBsZV9kYl9vaWRfZnVsbF9saXN0X2RlbGV0ZShTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxp c3QpOworc3RhdGljIHZvaWQgc2ltcGxlX2RiX29pZF9saXN0X2RlbGV0ZShTaW1wbGVEYXRhYmFz ZU9pZExpc3QgKmxpc3QsCisJCQkJCQkJCQkgIFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwgKmNl bGwsCisJCQkJCQkJCQkgIFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwgKnByZXYpOworc3RhdGlj IHZvaWQgc2ltcGxlX2RiX29pZF9saXN0X2FwcGVuZChTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxp c3QsCisJCU9pZCBkYl9vaWQsIGNvbnN0IGNoYXIgKmRibmFtZSk7CitzdGF0aWMgc2l6ZV90IHF1 b3RlX2xpdGVyYWxfaW50ZXJuYWwoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBs ZW4pOworc3RhdGljIGNoYXIgKnF1b3RlX2xpdGVyYWxfY3N0cihjb25zdCBjaGFyICpyYXdzdHIp OwogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCVJlc3RvcmVPcHRpb25z ICpvcHRzOwogCWludAkJCWM7Ci0JaW50CQkJZXhpdF9jb2RlOwogCWludAkJCW51bVdvcmtlcnMg PSAxOwotCUFyY2hpdmUgICAgKkFIOwogCWNoYXIJICAgKmlucHV0RmlsZVNwZWM7CiAJYm9vbAkJ ZGF0YV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJc2NoZW1hX29ubHkgPSBmYWxzZTsKKwlpbnQJCQlu X2Vycm9ycyA9IDA7CisJYm9vbAkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CisJU2ltcGxlU3RyaW5n TGlzdAlkYl9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9OwogCXN0YXRpYyBpbnQJZGlz YWJsZV90cmlnZ2VycyA9IDA7CiAJc3RhdGljIGludAllbmFibGVfcm93X3NlY3VyaXR5ID0gMDsK IAlzdGF0aWMgaW50CWlmX2V4aXN0cyA9IDA7CkBAIC04Niw2ICsxMzIsNyBAQCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKIAkJeyJjbGVhbiIsIDAsIE5VTEwsICdjJ30sCiAJCXsiY3JlYXRl IiwgMCwgTlVMTCwgJ0MnfSwKIAkJeyJkYXRhLW9ubHkiLCAwLCBOVUxMLCAnYSd9LAorCQl7Imds b2JhbHMtb25seSIsIDAsIE5VTEwsICdnJ30sCiAJCXsiZGJuYW1lIiwgMSwgTlVMTCwgJ2QnfSwK IAkJeyJleGl0LW9uLWVycm9yIiwgMCwgTlVMTCwgJ2UnfSwKIAkJeyJleGNsdWRlLXNjaGVtYSIs IDEsIE5VTEwsICdOJ30sCkBAIC0xMzYsNiArMTgzLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJCXsibm8tc3RhdGlzdGljcyIsIG5vX2FyZ3VtZW50LCAmbm9fc3RhdGlzdGljcywg MX0sCiAJCXsic3RhdGlzdGljcy1vbmx5Iiwgbm9fYXJndW1lbnQsICZzdGF0aXN0aWNzX29ubHks IDF9LAogCQl7ImZpbHRlciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0fSwKKwkJeyJleGNs dWRlLWRhdGFiYXNlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDZ9LAogCiAJCXtOVUxMLCAw LCBOVUxMLCAwfQogCX07CkBAIC0xNjQsNyArMjEyLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJCX0KIAl9CiAKLQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAi YWNDZDplZjpGOmg6STpqOmxMOm46TjpPcDpQOlJzUzp0OlQ6VTp2d1d4MSIsCisJd2hpbGUgKChj ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjQ2Q6ZWY6RjpnaDpJOmo6bEw6bjpOOk9wOlA6 UnNTOnQ6VDpVOnZ3V3gxIiwKIAkJCQkJCQljbWRvcHRzLCBOVUxMKSkgIT0gLTEpCiAJewogCQlz d2l0Y2ggKGMpCkBAIC0xOTEsMTEgKzIzOSwxNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIAkJCQlpZiAoc3RybGVuKG9wdGFyZykgIT0gMCkKIAkJCQkJb3B0cy0+Zm9ybWF0TmFtZSA9 IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOworCQkJY2FzZSAnZyc6CisJCQkJLyogcmVz dG9yZSBvbmx5IGdsb2JhbC5kYXQgZmlsZSBmcm9tIGRpcmVjdG9yeSAqLworCQkJCWdsb2JhbHNf b25seSA9IHRydWU7CisJCQkJYnJlYWs7CiAJCQljYXNlICdoJzoKIAkJCQlpZiAoc3RybGVuKG9w dGFyZykgIT0gMCkKIAkJCQkJb3B0cy0+Y3BhcmFtcy5wZ2hvc3QgPSBwZ19zdHJkdXAob3B0YXJn KTsKIAkJCQlicmVhazsKLQogCQkJY2FzZSAnaic6CQkJLyogbnVtYmVyIG9mIHJlc3RvcmUgam9i cyAqLwogCQkJCWlmICghb3B0aW9uX3BhcnNlX2ludChvcHRhcmcsICItai8tLWpvYnMiLCAxLAog CQkJCQkJCQkJICBQR19NQVhfSk9CUywKQEAgLTMxMCw2ICszNjEsMTAgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiAJCQkJCWV4aXQoMSk7CiAJCQkJb3B0cy0+ZXhpdF9vbl9lcnJvciA9 IHRydWU7CiAJCQkJYnJlYWs7CisJCQljYXNlIDY6CisJCQkJLyogbGlzdCBvZiBkYXRhYmFzZXMg cGF0dGVybnMgdGhvc2UgbmVlZHMgdG8gc2tpcCB3aGlsZSByZXN0b3JpbmcgKi8KKwkJCQlzaW1w bGVfc3RyaW5nX2xpc3RfYXBwZW5kKCZkYl9leGNsdWRlX3BhdHRlcm5zLCBvcHRhcmcpOworCQkJ CWJyZWFrOwogCiAJCQlkZWZhdWx0OgogCQkJCS8qIGdldG9wdF9sb25nIGFscmVhZHkgZW1pdHRl ZCBhIGNvbXBsYWludCAqLwpAQCAtMzM3LDYgKzM5MiwxMyBAQCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKIAlpZiAoIW9wdHMtPmNwYXJhbXMuZGJuYW1lICYmICFvcHRzLT5maWxlbmFtZSAm JiAhb3B0cy0+dG9jU3VtbWFyeSkKIAkJcGdfZmF0YWwoIm9uZSBvZiAtZC8tLWRibmFtZSBhbmQg LWYvLS1maWxlIG11c3QgYmUgc3BlY2lmaWVkIik7CiAKKwlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJu cy5oZWFkICE9IE5VTEwgJiYgZ2xvYmFsc19vbmx5KQorCXsKKwkJcGdfbG9nX2Vycm9yKCJvcHRp b24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1n bG9iYWxzLW9ubHkiKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZv ciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQor CiAJLyogU2hvdWxkIGdldCBhdCBtb3N0IG9uZSBvZiAtZCBhbmQgLWYsIGVsc2UgdXNlciBpcyBj b25mdXNlZCAqLwogCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKIAl7CkBAIC00MTcsNiArNDc5 LDEwNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJIG9wdHMtPmZvcm1hdE5h bWUpOwogCX0KIAorCS8qCisJICogSWYgdG9jLmRhdCBmaWxlIGRvZXMgbm90IHByZXNlbnQgaW4g Y3VycmVudCBwYXRoLCB0aGVuIGNoZWNrIGZvcgorCSAqIGdsb2JhbC5kYXQuICBJZiBnbG9iYWwu ZGF0IGZpbGUgaXMgcHJlc2VudCwgdGhlbiByZXN0b3JlIGFsbCB0aGUKKwkgKiBkYXRhYmFzZXMg ZnJvbSBtYXAuZGF0KGlmIGV4aXN0KSBmaWxlIGxpc3QgYW5kIHNraXAgcmVzdG9yaW5nIGZvcgor CSAqIC0tZXhjbHVkZS1kYXRhYmFzZSBwYXR0ZXJucy4KKwkgKi8KKwlpZiAoaW5wdXRGaWxlU3Bl YyAhPSBOVUxMICYmICFJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShpbnB1dEZpbGVTcGVjLCAidG9j LmRhdCIpICYmCisJCQlJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShpbnB1dEZpbGVTcGVjLCAiZ2xv YmFsLmRhdCIpKQorCXsKKwkJUEdjb25uICAqY29ubiA9IE5VTEw7IC8qIENvbm5lY3Rpb24gdG8g cmVzdG9yZSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCisJCS8qCisJCSAqIFVzZXIgaXMgc3Vn Z2VzdGVkIHRvIHVzZSBzaW5nbGUgZGF0YWJhc2UgZHVtcCBmb3IgLS1saXN0IG9wdGlvbi4KKwkJ ICovCisJCWlmIChvcHRzLT50b2NTdW1tYXJ5KQorCQkJcGdfZmF0YWwoIm9wdGlvbiAtbC8tLWxp c3QgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzIGJ5IGFy Y2hpdmUgb2YgcGdfZHVtcGFsbCIpOworCisJCS8qCisJCSAqIFRvIHJlc3RvcmUgbXVsdGlwbGUg ZGF0YWJhc2VzLCAtQyAoY3JlYXRlIGRhdGFiYXNlKSBvcHRpb24gc2hvdWxkIGJlIHNwZWNpZmll ZC4KKwkJICogRXZlbiB0aGVyZSBpcyBzaW5nbGUgZGF0YWJhc2UgaW4gZHVtcCwgcmVwb3J0IGVy cm9yIGJlY2F1c2UgaXQgbWlnaHQgYmUgcG9zc2libGUKKwkJICogdGhhdCBkYXRhYmFzZSBoYXNu J3QgY3JlYXRlZCBzbyBiZXR0ZXIgd2UgcmVwb3J0IGVycm9yLgorCQkgKi8KKwkJaWYgKCFnbG9i YWxzX29ubHkgJiYgb3B0cy0+Y3JlYXRlREIgIT0gMSkKKwkJeworCQkJcGdfbG9nX2Vycm9yKCIt Qy8tLWNyZWF0ZSBvcHRpb24gc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlc3RvcmluZyBtdWx0 aXBsZSBkYXRhYmFzZXMgYnkgYXJjaGl2ZSBvZiBwZ19kdW1wYWxsIik7CisJCQlwZ19sb2dfZXJy b3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25h bWUpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIklmIGRiIGlzIGFscmVhZHkgY3JlYXRlZCBhbmQg ZHVtcCBoYXMgc2luZ2xlIGRiIGR1bXAsIHRoZW4gdXNlIHBhcnRpY3VsYXIgZHVtcCBmaWxlLiIp OworCQkJZXhpdF9uaWNlbHkoMSk7CisJCX0KKworCQkvKgorCQkgKiBDb25uZWN0IHRvIGRhdGFi YXNlIHRvIGV4ZWN1dGUgZ2xvYmFsIHNxbCBjb21tYW5kcyBmcm9tIGdsb2JhbC5kYXQgZmlsZS4K KwkJICovCisJCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKKwkJeworCQkJY29ubiA9IGNvbm5l Y3REYXRhYmFzZShvcHRzLT5jcGFyYW1zLmRibmFtZSwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hv c3QsCisJCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBU UklfREVGQVVMVCwKKwkJCQkJZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMKTsKKworCQkJaWYg KCFjb25uKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSBcIiVz XCIiLCBvcHRzLT5jcGFyYW1zLmRibmFtZSk7CisJCX0KKworCQkvKiBJZiBnbG9iYWxzLW9ubHks IHRoZW4gcmV0dXJuIGZyb20gaGVyZS4gKi8KKwkJaWYgKGdsb2JhbHNfb25seSkKKwkJeworCQkJ LyogT3BlbiBnbG9iYWwuZGF0IGZpbGUgYW5kIGV4ZWN1dGUvYXBwZW5kIGFsbCB0aGUgZ2xvYmFs IHNxbCBjb21tYW5kcy4gKi8KKwkJCW5fZXJyb3JzID0gcHJvY2Vzc19nbG9iYWxfc3FsX2NvbW1h bmRzKGNvbm4sIGlucHV0RmlsZVNwZWMsCisJCQkJCW9wdHMtPmZpbGVuYW1lKTsKKworCQkJaWYg KGNvbm4pCisJCQkJUFFmaW5pc2goY29ubik7CisKKwkJCXBnX2xvZ19pbmZvKCJkYXRhYmFzZXMg cmVzdG9yaW5nIGlzIHNraXBwZWQgYXMgLWcvLS1nbG9iYWxzLW9ubHkgb3B0aW9uIGlzIHNwZWNp ZmllZCIpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogTm93IHJlc3RvcmUgYWxsIHRoZSBkYXRh YmFzZXMgZnJvbSBtYXAuZGF0IGZpbGUuICovCisJCQluX2Vycm9ycyA9IHJlc3RvcmVBbGxEYXRh YmFzZXMoY29ubiwgaW5wdXRGaWxlU3BlYywgZGJfZXhjbHVkZV9wYXR0ZXJucywKKwkJCQkJb3B0 cywgbnVtV29ya2Vycyk7CisJCX0KKworCQkvKiBGcmVlIGRiIHBhdHRlcm4gbGlzdC4gKi8KKwkJ c2ltcGxlX3N0cmluZ19mdWxsX2xpc3RfZGVsZXRlKCZkYl9leGNsdWRlX3BhdHRlcm5zKTsKKwl9 CisJZWxzZSAvKiBwcm9jZXNzIGlmIGdsb2JhbC5kYXQgZmlsZSBkb2VzIG5vdCBleGlzdC4gKi8K Kwl7CisJCWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCkKKwkJCXBnX2ZhdGFs KCJvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbiBiZSB1c2VkIG9ubHkgd2hlbiByZXN0b3Jp bmcgbXVsdGlwbGUgZGF0YWJhc2VzIGJ5IGFyY2hpdmUgb2YgcGdfZHVtcGFsbCIpOworCisJCWlm IChnbG9iYWxzX29ubHkpCisJCQlwZ19mYXRhbCgib3B0aW9uIC1nLy0tZ2xvYmFscy1vbmx5IGNh biBiZSB1c2VkIG9ubHkgd2hlbiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzIGJ5IGFyY2hp dmUgb2YgcGdfZHVtcGFsbCIpOworCisJCW5fZXJyb3JzID0gcmVzdG9yZU9uZURhdGFiYXNlKGlu cHV0RmlsZVNwZWMsIG9wdHMsIG51bVdvcmtlcnMsIGZhbHNlKTsKKwl9CisKKwkvKiBEb25lLCBw cmludCBhIHN1bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMgZHVyaW5nIHJlc3RvcmUuICovCisJaWYg KG5fZXJyb3JzKQorCXsKKwkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9uIHJlc3Rv cmU6ICVkIiwgbl9lcnJvcnMpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor LyoKKyAqIHJlc3RvcmVPbmVEYXRhYmFzZQorICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIG9uZSBk YXRhYmFzZSB1c2luZyB0b2MuZGF0IGZpbGUuCisgKgorICogcmV0dXJucyB0aGUgbnVtYmVyIG9m IGVycm9ycyB3aGlsZSBkb2luZyByZXN0b3JlLgorICovCitzdGF0aWMgaW50CityZXN0b3JlT25l RGF0YWJhc2UoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMs CisJCQkJICAgaW50IG51bVdvcmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEpCit7CisJQXJjaGl2ZQkJ KkFIOworCWludAkJCW5fZXJyb3JzOworCiAJQUggPSBPcGVuQXJjaGl2ZShpbnB1dEZpbGVTcGVj LCBvcHRzLT5mb3JtYXQpOwogCiAJU2V0QXJjaGl2ZU9wdGlvbnMoQUgsIE5VTEwsIG9wdHMpOwpA QCAtNDQ2LDI1ICs2MDgsMjIgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJZWxzZQog CXsKIAkJUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBSCk7Ci0JCVJlc3RvcmVBcmNoaXZl KEFIKTsKKwkJUmVzdG9yZUFyY2hpdmUoQUgsIGFwcGVuZF9kYXRhKTsKIAl9CiAKLQkvKiBkb25l LCBwcmludCBhIHN1bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMgKi8KLQlpZiAoQUgtPm5fZXJyb3Jz KQotCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQgb24gcmVzdG9yZTogJWQiLCBBSC0+ bl9lcnJvcnMpOworCW5fZXJyb3JzID0gQUgtPm5fZXJyb3JzOwogCiAJLyogQUggbWF5IGJlIGZy ZWVkIGluIENsb3NlQXJjaGl2ZT8gKi8KLQlleGl0X2NvZGUgPSBBSC0+bl9lcnJvcnMgPyAxIDog MDsKLQogCUNsb3NlQXJjaGl2ZShBSCk7CiAKLQlyZXR1cm4gZXhpdF9jb2RlOworCXJldHVybiBu X2Vycm9yczsKIH0KIAogc3RhdGljIHZvaWQKIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQog ewotCXByaW50ZihfKCIlcyByZXN0b3JlcyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgZnJvbSBhbiBh cmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC5cblxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygi JXMgcmVzdG9yZXMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVk IGJ5IHBnX2R1bXAuXG4iCisJCQkJIklmIGFyY2hpdmUgaXMgY3JlYXRlZCBieSBwZ19kdW1wYWxs LCB0aGVuIHJlc3RvcmVzIG11bHRpcGxlIGRhdGFiYXNlcyBhbHNvLiBcblxuIiksIHByb2duYW1l KTsKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7CiAJcHJpbnRmKF8oIiAgJXMgW09QVElPTl0uLi4g W0ZJTEVdXG4iKSwgcHJvZ25hbWUpOwogCkBAIC00ODIsNiArNjQxLDcgQEAgdXNhZ2UoY29uc3Qg Y2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLWMsIC0tY2xlYW4gICAgICAgICAgICAgICAg ICBjbGVhbiAoZHJvcCkgZGF0YWJhc2Ugb2JqZWN0cyBiZWZvcmUgcmVjcmVhdGluZ1xuIikpOwog CXByaW50ZihfKCIgIC1DLCAtLWNyZWF0ZSAgICAgICAgICAgICAgICAgY3JlYXRlIHRoZSB0YXJn ZXQgZGF0YWJhc2VcbiIpKTsKIAlwcmludGYoXygiICAtZSwgLS1leGl0LW9uLWVycm9yICAgICAg ICAgIGV4aXQgb24gZXJyb3IsIGRlZmF1bHQgaXMgdG8gY29udGludWVcbiIpKTsKKwlwcmludGYo XygiICAtZywgLS1nbG9iYWxzLW9ubHkgICAgICAgICAgIHJlc3RvcmUgb25seSBnbG9iYWwgb2Jq ZWN0cywgbm8gZGF0YWJhc2VzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUksIC0taW5kZXg9TkFNRSAg ICAgICAgICAgICByZXN0b3JlIG5hbWVkIGluZGV4XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWosIC0t am9icz1OVU0gICAgICAgICAgICAgICB1c2UgdGhpcyBtYW55IHBhcmFsbGVsIGpvYnMgdG8gcmVz dG9yZVxuIikpOwogCXByaW50ZihfKCIgIC1MLCAtLXVzZS1saXN0PUZJTEVOQU1FICAgICAgdXNl IHRhYmxlIG9mIGNvbnRlbnRzIGZyb20gdGhpcyBmaWxlIGZvclxuIgpAQCAtNDk0LDYgKzY1NCw3 IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXByaW50ZihfKCIgIC1TLCAtLXN1cGVy dXNlcj1OQU1FICAgICAgICAgc3VwZXJ1c2VyIHVzZXIgbmFtZSB0byB1c2UgZm9yIGRpc2FibGlu ZyB0cmlnZ2Vyc1xuIikpOwogCXByaW50ZihfKCIgIC10LCAtLXRhYmxlPU5BTUUgICAgICAgICAg ICAgcmVzdG9yZSBuYW1lZCByZWxhdGlvbiAodGFibGUsIHZpZXcsIGV0Yy4pXG4iKSk7CiAJcHJp bnRmKF8oIiAgLVQsIC0tdHJpZ2dlcj1OQU1FICAgICAgICAgICByZXN0b3JlIG5hbWVkIHRyaWdn ZXJcbiIpKTsKKwlwcmludGYoXygiICAtLWV4Y2x1ZGUtZGF0YWJhc2U9UEFUVEVSTiAgIGV4Y2x1 ZGUgZGF0YWJhc2VzIHdob3NlIG5hbWUgbWF0Y2hlcyB3aXRoIHBhdHRlcm5cbiIpKTsKIAlwcmlu dGYoXygiICAteCwgLS1uby1wcml2aWxlZ2VzICAgICAgICAgIHNraXAgcmVzdG9yYXRpb24gb2Yg YWNjZXNzIHByaXZpbGVnZXMgKGdyYW50L3Jldm9rZSlcbiIpKTsKIAlwcmludGYoXygiICAtMSwg LS1zaW5nbGUtdHJhbnNhY3Rpb24gICAgIHJlc3RvcmUgYXMgYSBzaW5nbGUgdHJhbnNhY3Rpb25c biIpKTsKIAlwcmludGYoXygiICAtLWRpc2FibGUtdHJpZ2dlcnMgICAgICAgICAgIGRpc2FibGUg dHJpZ2dlcnMgZHVyaW5nIGRhdGEtb25seSByZXN0b3JlXG4iKSk7CkBAIC01MzAsOCArNjkxLDgg QEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLS1yb2xlPVJPTEVO QU1FICAgICAgICAgIGRvIFNFVCBST0xFIGJlZm9yZSByZXN0b3JlXG4iKSk7CiAKIAlwcmludGYo XygiXG4iCi0JCQkgIlRoZSBvcHRpb25zIC1JLCAtbiwgLU4sIC1QLCAtdCwgLVQsIGFuZCAtLXNl Y3Rpb24gY2FuIGJlIGNvbWJpbmVkIGFuZCBzcGVjaWZpZWRcbiIKLQkJCSAibXVsdGlwbGUgdGlt ZXMgdG8gc2VsZWN0IG11bHRpcGxlIG9iamVjdHMuXG4iKSk7CisJCQkgIlRoZSBvcHRpb25zIC1J LCAtbiwgLU4sIC1QLCAtdCwgLVQsIC0tc2VjdGlvbiwgYW5kIC0tZXhjbHVkZS1kYXRhYmFzZSBj YW4gYmUgY29tYmluZWRcbiIKKwkJCSAiYW5kIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyB0byBz ZWxlY3QgbXVsdGlwbGUgb2JqZWN0cy5cbiIpKTsKIAlwcmludGYoXygiXG5JZiBubyBpbnB1dCBm aWxlIG5hbWUgaXMgc3VwcGxpZWQsIHRoZW4gc3RhbmRhcmQgaW5wdXQgaXMgdXNlZC5cblxuIikp OwogCXByaW50ZihfKCJSZXBvcnQgYnVncyB0byA8JXM+LlxuIiksIFBBQ0tBR0VfQlVHUkVQT1JU KTsKIAlwcmludGYoXygiJXMgaG9tZSBwYWdlOiA8JXM+XG4iKSwgUEFDS0FHRV9OQU1FLCBQQUNL QUdFX1VSTCk7CkBAIC02MzYsMyArNzk3LDY2MiBAQCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25z dCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlvbnMgKm9wdHMpCiAKIAlmaWx0ZXJfZnJlZSgm ZnN0YXRlKTsKIH0KKworLyoKKyAqIElzRmlsZUV4aXN0c0luRGlyZWN0b3J5CisgKgorICogUmV0 dXJucyB0cnVlIGlmIGZpbGUgZXhpc3QgaW4gY3VycmVudCBkaXJlY3RvcnkuCisgKi8KK3N0YXRp YyBib29sCitJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNo YXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBzdGF0CQkJc3Q7CisJY2hhcgkJCQlidWZbTUFYUEdQ QVRIXTsKKworCWlmIChzbnByaW50ZihidWYsIE1BWFBHUEFUSCwgIiVzLyVzIiwgZGlyLCBmaWxl bmFtZSkgPj0gTUFYUEdQQVRIKQorCQlwZ19mYXRhbCgiZGlyZWN0b3J5IG5hbWUgdG9vIGxvbmc6 IFwiJXNcIiIsIGRpcik7CisKKwlyZXR1cm4gKHN0YXQoYnVmLCAmc3QpID09IDAgJiYgU19JU1JF RyhzdC5zdF9tb2RlKSk7Cit9CisKKy8qCisgKiBSZWFkT25lU3RhdGVtZW50CisgKgorICogVGhp cyB3aWxsIHN0YXJ0IHJlYWRpbmcgZnJvbSBwYXNzZWQgZmlsZSBwb2ludGVyIHVzaW5nIGZnZXRj IGFuZCByZWFkIHRpbGwKKyAqIHNlbWljb2xvbihzcWwgc3RhdGVtZW50IHRlcm1pbmF0b3IgZm9y IGdsb2JhbC5kYXQgZmlsZSkKKyAqCisgKiBFT0YgaXMgcmV0dXJuZWQgaWYgZW5kLW9mLWZpbGUg aW5wdXQgaXMgc2VlbjsgdGltZSB0byBzaHV0IGRvd24uCisgKi8KKworc3RhdGljIGludAorUmVh ZE9uZVN0YXRlbWVudChTdHJpbmdJbmZvIGluQnVmLCBGSUxFICpwZmlsZSkKK3sKKwlpbnQJCQlj OyAvKiBjaGFyYWN0ZXIgcmVhZCBmcm9tIGdldGMoKSAqLworCWludAkJCW07CisKKwlTdHJpbmdJ bmZvRGF0YQlxOworCWluaXRTdHJpbmdJbmZvKCZxKTsKKworCXJlc2V0U3RyaW5nSW5mbyhpbkJ1 Zik7CisKKwkvKgorCSAqIFJlYWQgY2hhcmFjdGVycyB1bnRpbCBFT0Ygb3IgdGhlIGFwcHJvcHJp YXRlIGRlbGltaXRlciBpcyBzZWVuLgorCSAqLworCXdoaWxlICgoYyA9IGZnZXRjKHBmaWxlKSkg IT0gRU9GKQorCXsKKwkJaWYgKGMgIT0gJ1wnJyAmJiBjICE9ICciJyAmJiBjICE9ICdcbicgJiYg YyAhPSAnOycpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGluQnVmLCAoY2hhcikgYyk7 CisJCQl3aGlsZSAoKGMgPSBmZ2V0YyhwZmlsZSkpICE9IEVPRikKKwkJCXsKKwkJCQlpZiAoYyAh PSAnXCcnICYmIGMgIT0gJyInICYmIGMgIT0gJzsnICYmIGMgIT0gJ1xuJykKKwkJCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoaW5CdWYsIChjaGFyKSBjKTsKKwkJCQllbHNlCisJCQkJCWJyZWFrOwor CQkJfQorCQl9CisKKwkJaWYgKGMgPT0gJ1wnJyB8fCBjID09ICciJykKKwkJeworCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoJnEsIChjaGFyKSBjKTsKKwkJCW0gPSBjOworCisJCQl3aGlsZSAoKGMg PSBmZ2V0YyhwZmlsZSkpICE9IEVPRikKKwkJCXsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigm cSwgKGNoYXIpIGMpOworCisJCQkJaWYoYyA9PSBtKQorCQkJCXsKKwkJCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhpbkJ1ZiwgcS5kYXRhKTsKKwkJCQkJcmVzZXRTdHJpbmdJbmZvKCZxKTsKKwkJ CQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKGMgPT0gJzsnKQorCQl7CisJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIpICc7Jyk7CisJCQlicmVhazsKKwkJfQor CisJCWlmIChjID09ICdcbicpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIp ICdcbicpOworCX0KKworCS8qIE5vIGlucHV0IGJlZm9yZSBFT0Ygc2lnbmFsIG1lYW5zIHRpbWUg dG8gcXVpdC4gKi8KKwlpZiAoYyA9PSBFT0YgJiYgaW5CdWYtPmxlbiA9PSAwKQorCQlyZXR1cm4g RU9GOworCisJLyogQWRkICdcMCcgdG8gbWFrZSBpdCBsb29rIHRoZSBzYW1lIGFzIG1lc3NhZ2Ug Y2FzZS4gKi8KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIpICdcMCcpOworCisJ cmV0dXJuICdRJzsKK30KKworLyoKKyAqIGdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZQorICoK KyAqIFRoaXMgd2lsbCByZW1vdmUgZW50cmllcyBmcm9tIGRibmFtZV9vaWRfbGlzdCB0aGF0IHBh dHRlcm4gbWF0Y2hpbmcgYW55CisgKiBpbiB0aGUgZGJfZXhjbHVkZV9wYXR0ZXJucyBsaXN0LiAg ZGJuYW1lX29pZF9saXN0IG1heWJlIGlucGxhY2UgbW9kaWZpZWQuCisgKgorICogcmV0dXJucywg bnVtYmVyIG9mIGRhdGFiYXNlIHdpbGwgYmUgcmVzdG9yZWQuCisgKgorICovCitzdGF0aWMgaW50 CitnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUoUEdjb25uICpjb25uLAorCQlTaW1wbGVEYXRh YmFzZU9pZExpc3QgKmRibmFtZV9vaWRfbGlzdCwKKwkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNs dWRlX3BhdHRlcm5zKQoreworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKmRib2lkX2NlbGwg PSBkYm5hbWVfb2lkX2xpc3QtPmhlYWQ7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkqZGJv aWRwcmVjZWxsID0gTlVMTDsKKwlpbnQJCQkJCQkJY291bnRfZGIgPSAwOworCVBRRXhwQnVmZmVy IHF1ZXJ5OworCVBHcmVzdWx0ICAgKnJlczsKKworCS8qIFJldHVybiAwIGlmIHRoZXJlIGlzIG5v IGRhdGFiYXNlIHRvIHJlc3RvcmUuICovCisJaWYgKGRib2lkX2NlbGwgPT0gTlVMTCkKKwkJcmV0 dXJuIDA7CisKKwlxdWVyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwlpZiAoIWNvbm4pCisJ CXBnX2xvZ19pbmZvKCJjb25zaWRlcmluZyBQQVRURVJOIGFzIE5BTUUgZm9yIC0tZXhjbHVkZS1k YXRhYmFzZSBvcHRpb24gYXMgbm8gZGIgY29ubmVjdGlvbiB3aGlsZSBkb2luZyBwZ19yZXN0b3Jl LiIpOworCisJLyoKKwkgKiBQcm9jZXNzIG9uZSBieSBvbmUgYWxsIGRibmFtZXMgYW5kIGlmIHNw ZWNpZmllZCB0byBza2lwIHJlc3RvcmluZywgdGhlbgorCSAqIHJlbW92ZSBkYm5hbWUgZnJvbSBs aXN0LgorCSAqLworCXdoaWxlIChkYm9pZF9jZWxsICE9IE5VTEwpCisJeworCQlib29sCQkJCQkJ c2tpcF9kYl9yZXN0b3JlID0gZmFsc2U7CisJCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKm5l eHQgPSBkYm9pZF9jZWxsLT5uZXh0OworCisJCWZvciAoU2ltcGxlU3RyaW5nTGlzdENlbGwgKmNl bGxkYiA9IGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZDsgY2VsbGRiOyBjZWxsZGIgPSBjZWxsZGIt Pm5leHQpCisJCXsKKwkJCS8qCisJCQkgKiB0aGUgY29uc3RydWN0IHBhdHRlcm4gbWF0Y2hpbmcg cXVlcnk6CisJCQkgKiBTRUxFQ1QgMSBXSEVSRSBYWFggT1BFUkFUT1IocGdfY2F0YWxvZy5+KSAn XihQQVRURVJOKSQnIENPTExBVEUKKwkJCSAqIHBnX2NhdGFsb2cuZGVmYXVsdAorCQkJICoKKwkJ CSAqIFhYWCByZXByZXNlbnRzIHRoZSBzdHJpbmcgbGl0ZXJhbCBkYXRhYmFzZSBuYW1lIGRlcml2 ZWQgZnJvbSB0aGUKKwkJCSAqIGRibmFtZV9vaWRfbGlzdCwgd2hpY2ggaXMgaW5pdGlhbGx5IGV4 dHJhY3RlZCBmcm9tIHRoZSBtYXAuZGF0CisJCQkgKiBmaWxlIGxvY2F0ZWQgaW4gdGhlIGJhY2t1 cCBkaXJlY3RvcnkuICB0aGF0J3Mgd2h5IHdlIG5lZWQKKwkJCSAqIHF1b3RlX2xpdGVyYWxfY3N0 ci4KKwkJCSAqCisJCQkgKiBJZiBubyBkYiBjb25uZWN0aW9uLCB0aGVuIGNvbnNpZGVyIFBBVFRF Uk4gYXMgTkFNRS4KKwkJCSAqLworCQkJaWYgKHBnX3N0cmNhc2VjbXAoZGJvaWRfY2VsbC0+ZGJf bmFtZSwgY2VsbGRiLT52YWwpID09IDApCisJCQkgICBza2lwX2RiX3Jlc3RvcmUgPSB0cnVlOwor CQkJZWxzZSBpZiAoY29ubikKKwkJCXsKKwkJCQlpbnQJZG90Y250OworCisJCQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIocXVlcnksICJTRUxFQ1QgMSAiKTsKKwkJCQlwcm9jZXNzU1FMTmFtZVBhdHRl cm4oY29ubiwgcXVlcnksIGNlbGxkYi0+dmFsLCBmYWxzZSwKKwkJCQkJCQkJCSAgZmFsc2UsIE5V TEwsIHF1b3RlX2xpdGVyYWxfY3N0cihkYm9pZF9jZWxsLT5kYl9uYW1lKSwKKwkJCQkJCQkJCSAg TlVMTCwgTlVMTCwgTlVMTCwgJmRvdGNudCk7CisKKwkJCQlpZiAoZG90Y250ID4gMCkKKwkJCQl7 CisJCQkJCXBnX2xvZ19lcnJvcigiaW1wcm9wZXIgcXVhbGlmaWVkIG5hbWUgKHRvbyBtYW55IGRv dHRlZCBuYW1lcyk6ICVzIiwKKwkJCQkJCQkJICBjZWxsZGItPnZhbCk7CisJCQkJCVBRZmluaXNo KGNvbm4pOworCQkJCQlleGl0X25pY2VseSgxKTsKKwkJCQl9CisKKwkJCQlyZXMgPSBleGVjdXRl UXVlcnkoY29ubiwgcXVlcnktPmRhdGEpOworCisJCQkJaWYgKChQUXJlc3VsdFN0YXR1cyhyZXMp ID09IFBHUkVTX1RVUExFU19PSykgJiYgUFFudHVwbGVzKHJlcykpCisJCQkJeworCQkJCQlza2lw X2RiX3Jlc3RvcmUgPSB0cnVlOworCQkJCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgXCIlc1wiIGlz IG1hdGNoaW5nIHdpdGggZXhjbHVkZSBwYXR0ZXJuOiBcIiVzXCIiLCBkYm9pZF9jZWxsLT5kYl9u YW1lLCBjZWxsZGItPnZhbCk7CisJCQkJfQorCisJCQkJUFFjbGVhcihyZXMpOworCQkJCXJlc2V0 UFFFeHBCdWZmZXIocXVlcnkpOworCQkJfQorCisJCQlpZiAoc2tpcF9kYl9yZXN0b3JlKQorCQkJ CWJyZWFrOworCQl9CisKKwkJLyogSW5jcmVtZW50IGNvdW50IGlmIGRhdGFiYXNlIG5lZWRzIHRv IGJlIHJlc3RvcmVkLiAqLworCQlpZiAoc2tpcF9kYl9yZXN0b3JlKQorCQl7CisJCQlwZ19sb2df aW5mbygiZXhjbHVkaW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRib2lkX2NlbGwtPmRiX25hbWUpOwor CQkJc2ltcGxlX2RiX29pZF9saXN0X2RlbGV0ZShkYm5hbWVfb2lkX2xpc3QsIGRib2lkX2NlbGws IGRib2lkcHJlY2VsbCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQljb3VudF9kYisrOworCQkJZGJv aWRwcmVjZWxsID0gZGJvaWRfY2VsbDsKKwkJfQorCisJCS8qIFByb2Nlc3MgbmV4dCBkYm5hbWUg ZnJvbSBkYm5hbWUgbGlzdC4gKi8KKwkJZGJvaWRfY2VsbCA9IG5leHQ7CisJfQorCisJcmV0dXJu IGNvdW50X2RiOworfQorCisvKgorICogZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlCisg KgorICogT3BlbiBtYXAuZGF0IGZpbGUgYW5kIHJlYWQgbGluZSBieSBsaW5lIGFuZCB0aGVuIHBy ZXBhcmUgYSBsaXN0IG9mIGRhdGFiYXNlCisgKiBuYW1lcyBhbmQgY29ycmVzcG9uZGluZyBkYl9v aWQuCisgKgorICogUmV0dXJucywgdG90YWwgbnVtYmVyIG9mIGRhdGFiYXNlIG5hbWVzIGluIG1h cC5kYXQgZmlsZS4KKyAqLworc3RhdGljIGludAorZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21m aWxlKGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLCBTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRibmFt ZV9vaWRfbGlzdCkKK3sKKwlGSUxFICAgICpwZmlsZTsKKwljaGFyICAgIG1hcF9maWxlX3BhdGhb TUFYUEdQQVRIXTsKKwljaGFyICAgIGxpbmVbTUFYUEdQQVRIXTsKKwlpbnQgICAgIGNvdW50ID0g MDsKKworCS8qCisJICogSWYgdGhlcmUgaXMgb25seSBnbG9iYWwuZGF0IGZpbGUgaW4gZHVtcCwg dGhlbiByZXR1cm4gZnJvbSBoZXJlIGFzIHRoZXJlCisJICogaXMgbm8gZGF0YWJhc2UgdG8gcmVz dG9yZS4KKwkgKi8KKwlpZiAoIUlzRmlsZUV4aXN0c0luRGlyZWN0b3J5KHBnX3N0cmR1cChkdW1w ZGlycGF0aCksICJtYXAuZGF0IikpCisJeworCQlwZ19sb2dfaW5mbygiZGF0YWJhc2VzIHJlc3Rv cmluZyBpcyBza2lwcGVkIGFzIG1hcC5kYXQgZmlsZSBpcyBub3QgcHJlc2VudCBpbiBcIiVzXCIi LCBkdW1wZGlycGF0aCk7CisJCXJldHVybiAwOworCX0KKworCXNucHJpbnRmKG1hcF9maWxlX3Bh dGgsIE1BWFBHUEFUSCwgIiVzL21hcC5kYXQiLCBkdW1wZGlycGF0aCk7CisKKwkvKiBPcGVuIG1h cC5kYXQgZmlsZS4gKi8KKwlwZmlsZSA9IGZvcGVuKG1hcF9maWxlX3BhdGgsIFBHX0JJTkFSWV9S KTsKKworCWlmIChwZmlsZSA9PSBOVUxMKQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gbWFw LmRhdCBmaWxlOiBcIiVzXCIiLCBtYXBfZmlsZV9wYXRoKTsKKworCS8qIEFwcGVuZCBhbGwgdGhl IGRibmFtZSBhbmQgZGJfb2lkIHRvIHRoZSBsaXN0LiAqLworCXdoaWxlKChmZ2V0cyhsaW5lLCBN QVhQR1BBVEgsIHBmaWxlKSkgIT0gTlVMTCkKKwl7CisJCU9pZCAgICAgICAgIGRiX29pZCA9IElu dmFsaWRPaWQ7CisJCXNpemVfdAkJZGJfbmFtZV9zaXplID0gMDsKKwkJY2hhciAgICAgICAgZGJu YW1lW01BWFBHUEFUSCArIDFdID0geydcMCd9OworCQlpbnQJCQlpID0gMDsKKwkJY2hhcgkJY2g7 CisJCWludCBrayA9IDE7CisJCXdoaWxlKGtrKTsKKworCQkvKiBFeHRyYWN0IGRib2lkIGFuZCBz aXplIG9mIGRibmFtZS4gKi8KKwkJc3NjYW5mKGxpbmUsICIldSAldSIgLCAmZGJfb2lkLCAmZGJf bmFtZV9zaXplKTsKKworCQkvKiBOb3cgY29weSBkYm5hbWUuICovCisJCXdoaWxlIChpIDwgZGJf bmFtZV9zaXplKQorCQkJZGJuYW1lW2krK10gPSBmZ2V0YyhwZmlsZSk7CisKKwkJY2ggPSBmZ2V0 YyhwZmlsZSk7CisKKwkJaWYgKGNoICE9ICdcbicpCisJCQlwZ19mYXRhbCgiaW52YWxpZCBlbnRy eSBpbiBtYXAuZGF0IGZpbGUgYXQgbGluZSA6ICVkIiwgMiAqIGNvdW50ICsgMik7CisKKwkJLyog QWRkIFwwIGluIHRoZSBlbmQuICovCisJCWRibmFtZVtpXSA9ICdcMCc7CisKKwkJcGdfbG9nX2lu Zm8oImZvdW5kIGRhdGFiYXNlIFwiJXNcIiAoT0lEOiAldSkgaW4gbWFwLmRhdCBmaWxlIHdoaWxl IHJlc3RvcmluZy4iLCBkYm5hbWUsIGRiX29pZCk7CisKKwkJLyogUmVwb3J0IGVycm9yIGFuZCBl eGl0IGlmIHRoZSBmaWxlIGhhcyBhbnkgY29ycnVwdGVkIGRhdGEuICovCisJCWlmICghT2lkSXNW YWxpZChkYl9vaWQpIHx8IHN0cmxlbihkYm5hbWUpID09IDApCisJCQlwZ19mYXRhbCgiaW52YWxp ZCBlbnRyeSBpbiBtYXAuZGF0IGZpbGUgYXQgbGluZSA6ICVkIiwgMiAqIGNvdW50ICsgMSk7CisK KwkJLyoKKwkJICogWFhYIDogYmVmb3JlIGFkZGluZyBkYm5hbWUgaW50byBsaXN0LCB3ZSBjYW4g dmVyaWZ5IHRoYXQgdGhpcyBkYgorCQkgKiBuZWVkcyB0byBza2lwcGVkIGZvciByZXN0b3JlIG9y IG5vdCBidXQgYXMgb2Ygbm93LCB3ZSBhcmUgbWFraW5nCisJCSAqIGEgbGlzdCBvZiBhbGwgdGhl IGRhdGFiYXNlcy4KKwkJICovCisJCXNpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQoZGJuYW1lX29p ZF9saXN0LCBkYl9vaWQsIGRibmFtZSk7CisJCWNvdW50Kys7CisJfQorCisJLyogQ2xvc2UgbWFw LmRhdCBmaWxlLiAqLworCWZjbG9zZShwZmlsZSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8q CisgKiByZXN0b3JlQWxsRGF0YWJhc2VzCisgKgorICogVGhpcyB3aWxsIHJlc3RvcmUgZGF0YWJh c2VzIHRob3NlIGR1bXBzIGFyZSBwcmVzZW50IGluCisgKiBkaXJlY3RvcnkgYmFzZWQgb24gbWFw LmRhdCBmaWxlIG1hcHBpbmcuCisgKgorICogVGhpcyB3aWxsIHNraXAgcmVzdG9yaW5nIGZvciBk YXRhYmFzZXMgdGhhdCBhcmUgc3BlY2lmaWVkIHdpdGgKKyAqIGV4Y2x1ZGUtZGF0YWJhc2Ugb3B0 aW9uLgorICoKKyAqIHJldHVybnMsIG51bWJlciBvZiBlcnJvcnMgd2hpbGUgZG9pbmcgcmVzdG9y ZS4KKyAqLworc3RhdGljIGludAorcmVzdG9yZUFsbERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIGNv bnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQkJCQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVf cGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQkJCQlpbnQgbnVtV29ya2VycykKK3sK KwlTaW1wbGVEYXRhYmFzZU9pZExpc3QJCQlkYm5hbWVfb2lkX2xpc3QgPSB7TlVMTCwgTlVMTH07 CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkJKmRib2lkX2NlbGw7CisJaW50CQkJCQkJCQlu dW1fZGJfcmVzdG9yZSA9IDA7CisJaW50CQkJCQkJCQludW1fdG90YWxfZGI7CisJaW50CQkJCQkJ CQluX2Vycm9yc190b3RhbDsKKworCW51bV90b3RhbF9kYiA9IGdldF9kYm5hbWVfb2lkX2xpc3Rf ZnJvbV9tZmlsZShkdW1wZGlycGF0aCwgJmRibmFtZV9vaWRfbGlzdCk7CisKKwkvKgorCSAqIElm IG1hcC5kYXQgaGFzIG5vIGVudHJ5LCByZXR1cm4gZnJvbSBoZXJlIGFmdGVyIHByb2Nlc3NpbmcK KwkgKiBnbG9iYWwuZGF0IGZpbGUuCisJICovCisJaWYgKGRibmFtZV9vaWRfbGlzdC5oZWFkID09 IE5VTEwpCisJCXJldHVybiBwcm9jZXNzX2dsb2JhbF9zcWxfY29tbWFuZHMoY29ubiwgZHVtcGRp cnBhdGgsIG9wdHMtPmZpbGVuYW1lKTsKKworCXBnX2xvZ19pbmZvKCJmb3VuZCB0b3RhbCAlZCBk YXRhYmFzZSBuYW1lcyBpbiBtYXAuZGF0IGZpbGUiLCBudW1fdG90YWxfZGIpOworCisJaWYgKCFj b25uKQorCXsKKwkJcGdfbG9nX2luZm8oInRyeWluZyB0byBjb25uZWN0IGRhdGFiYXNlIFwicG9z dGdyZXNcIiAgdG8gZHVtcCBpbnRvIG91dCBmaWxlIik7CisKKwkJY29ubiA9IGNvbm5lY3REYXRh YmFzZSgicG9zdGdyZXMiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCQkgICBv cHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQs CisJCQkJCQkJICAgZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMKTsKKworCQkvKiBUcnkgd2l0 aCB0ZW1wbGF0ZTEuICovCisJCWlmICghY29ubikKKwkJeworCQkJcGdfbG9nX2luZm8oInRyeWlu ZyB0byBjb25uZWN0IGRhdGFiYXNlIFwidGVtcGxhdGUxXCIgYXMgZmFpbGVkIHRvIGNvbm5lY3Qg dG8gZGF0YWJhc2UgXCJwb3N0Z3Jlc1wiIHRvIGR1bXAgaW50byBvdXQgZmlsZSIpOworCisJCQlj b25uID0gY29ubmVjdERhdGFiYXNlKCJ0ZW1wbGF0ZTEiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBn aG9zdCwKKwkJCQkJCQkJICAgb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNl cm5hbWUsIFRSSV9ERUZBVUxULAorCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5V TEwpOworCQl9CisJfQorCisJLyoKKwkgKiBwcm9jZXNzaW5nIHBnX3JldHNvcmUgLS1leGNsdWRl LWRhdGFiYXNlPVBBVFRFUk4vTkFNRSBpZiBubyBjb25uZWN0aW9uLgorCSAqLworCW51bV9kYl9y ZXN0b3JlID0gZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlKGNvbm4sICZkYm5hbWVfb2lkX2xp c3QsCisJCQlkYl9leGNsdWRlX3BhdHRlcm5zKTsKKworCS8qIE9wZW4gZ2xvYmFsLmRhdCBmaWxl IGFuZCBleGVjdXRlL2FwcGVuZCBhbGwgdGhlIGdsb2JhbCBzcWwgY29tbWFuZHMuICovCisJbl9l cnJvcnNfdG90YWwgPSBwcm9jZXNzX2dsb2JhbF9zcWxfY29tbWFuZHMoY29ubiwgZHVtcGRpcnBh dGgsIG9wdHMtPmZpbGVuYW1lKTsKKworCS8qIENsb3NlIHRoZSBkYiBjb25uZWN0aW9uIGFzIHdl IGFyZSBkb25lIHdpdGggZ2xvYmFscyBhbmQgcGF0dGVybnMuICovCisJaWYgKGNvbm4pCisJCVBR ZmluaXNoKGNvbm4pOworCisJLyogRXhpdCBpZiBubyBkYiBuZWVkcyB0byBiZSByZXN0b3JlZC4g Ki8KKwlpZiAoZGJuYW1lX29pZF9saXN0LmhlYWQgPT0gTlVMTCkKKwl7CisJCXBnX2xvZ19pbmZv KCJubyBkYXRhYmFzZSBuZWVkcyB0byByZXN0b3JlIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1f dG90YWxfZGIpOworCQlyZXR1cm4gbl9lcnJvcnNfdG90YWw7CisJfQorCisJcGdfbG9nX2luZm8o Im5lZWRzIHRvIHJlc3RvcmUgJWQgZGF0YWJhc2VzIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1f ZGJfcmVzdG9yZSwgbnVtX3RvdGFsX2RiKTsKKworCS8qCisJICogVGlsbCBub3csIHdlIG1hZGUg YSBsaXN0IG9mIGRhdGFiYXNlcywgdGhvc2UgbmVlZHMgdG8gYmUgcmVzdG9yZWQKKwkgKiBhZnRl ciBza2lwcGluZyBuYW1lcyBvZiBleGNsdWRlLWRhdGFiYXNlLiAgTm93IHdlIGNhbiBsYXVuY2gg cGFyYWxsZWwKKwkgKiB3b3JrZXJzIHRvIHJlc3RvcmUgdGhlc2UgZGF0YWJhc2VzLgorCSAqLwor CWRib2lkX2NlbGwgPSBkYm5hbWVfb2lkX2xpc3QuaGVhZDsKKworCXdoaWxlKGRib2lkX2NlbGwg IT0gTlVMTCkKKwl7CisJCWNoYXIJCXN1YmRpcnBhdGhbTUFYUEdQQVRIXTsKKwkJaW50CQkJbl9l cnJvcnM7CisKKwkJLyoKKwkJICogV2UgbmVlZCB0byByZXNldCBvdmVycmlkZV9kYm5hbWUgc28g dGhhdCBvYmplY3RzIGNhbiBiZSByZXN0b3JlZCBpbnRvCisJCSAqIGFscmVhZHkgY3JlYXRlZCBk YXRhYmFzZS4gKHVzZWQgd2l0aCAtZC8tLWRibmFtZSBvcHRpb24pCisJCSAqLworCQlpZiAob3B0 cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUpCisJCXsKKwkJCXBmcmVlKG9wdHMtPmNwYXJhbXMu b3ZlcnJpZGVfZGJuYW1lKTsKKwkJCW9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lID0gTlVM TDsKKwkJfQorCisJCXNucHJpbnRmKHN1YmRpcnBhdGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNl cy8ldSIsIGR1bXBkaXJwYXRoLCBkYm9pZF9jZWxsLT5kYl9vaWQpOworCisJCXBnX2xvZ19pbmZv KCJyZXN0b3JpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJvaWRfY2VsbC0+ZGJfbmFtZSk7CisKKwkJ LyogUmVzdG9yZSBzaW5nbGUgZGF0YWJhc2UuICovCisJCW5fZXJyb3JzID0gcmVzdG9yZU9uZURh dGFiYXNlKHN1YmRpcnBhdGgsIG9wdHMsIG51bVdvcmtlcnMsIHRydWUpOworCisJCS8qIFByaW50 IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyBkdXJpbmcgc2luZ2xlIGRhdGFiYXNlIHJlc3Rv cmUuICovCisJCWlmIChuX2Vycm9ycykKKwkJeworCQkJbl9lcnJvcnNfdG90YWwgKz0gbl9lcnJv cnM7CisJCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQgb24gZGF0YWJhc2UgXCIlc1wi IHJlc3RvcmU6ICVkIiwgZGJvaWRfY2VsbC0+ZGJfbmFtZSwgbl9lcnJvcnMpOworCQl9CisKKwkJ ZGJvaWRfY2VsbCA9IGRib2lkX2NlbGwtPm5leHQ7CisKKwkJLyoKKwkJICogV2UgbmVlZCB0byBy ZXNldCBvbl9leGl0X25pY2VseV9pbmRleCB3aXRoIGVhY2ggZGF0YWJhc2Ugc28gdGhhdCB3ZSBj YW4gcmVzdG9yZQorCQkgKiBtdWx0aXBsZSBkYXRhYmFzZXMgYnkgYXJjaGl2ZS4KKwkJICovCisJ CWlmIChkYm9pZF9jZWxsICE9IE5VTEwpCisJCQlyZXNldF9leGl0X25pY2VseV9saXN0KG5fZXJy b3JzID8gMSA6IDApOworCX0KKworCS8qIExvZyBudW1iZXIgb2YgcHJvY2Vzc2VkIGRhdGFiYXNl cy4qLworCXBnX2xvZ19pbmZvKCJudW1iZXIgb2YgcmVzdG9yZWQgZGF0YWJhc2VzIGFyZSAlZCIs IG51bV9kYl9yZXN0b3JlKTsKKworCS8qIEZyZWUgZGJuYW1lIGFuZCBkYm9pZCBsaXN0LiAqLwor CXNpbXBsZV9kYl9vaWRfZnVsbF9saXN0X2RlbGV0ZSgmZGJuYW1lX29pZF9saXN0KTsKKworCXJl dHVybiBuX2Vycm9yc190b3RhbDsKK30KKworLyoKKyAqIHByb2Nlc3NfZ2xvYmFsX3NxbF9jb21t YW5kcworICoKKyAqIFRoaXMgd2lsbCBvcGVuIGdsb2JhbC5kYXQgZmlsZSBhbmQgd2lsbCBleGVj dXRlIGFsbCBnbG9iYWwgc3FsIGNvbW1hbmRzIG9uZQorICogYnkgb25lIHN0YXRlbWVudC4KKyAq IFNlbWljb2xvbiBpcyBjb25zaWRlcmVkIGFzIHN0YXRlbWVudCB0ZXJtaW5hdG9yLiAgSWYgb3V0 ZmlsZSBpcyBwYXNzZWQsIHRoZW4KKyAqIHRoaXMgd2lsbCBjb3B5IGFsbCBzcWwgY29tbWFuZHMg aW50byBvdXRmaWxlIHJhdGhlciB0aGVuIGV4ZWN1dGluZyB0aGVtLgorICoKKyAqIHJldHVybnMg dGhlIG51bWJlciBvZiBlcnJvcnMgd2hpbGUgcHJvY2Vzc2luZyBnbG9iYWwuZGF0CisgKi8KK3N0 YXRpYyBpbnQKK3Byb2Nlc3NfZ2xvYmFsX3NxbF9jb21tYW5kcyhQR2Nvbm4gKmNvbm4sIGNvbnN0 IGNoYXIgKmR1bXBkaXJwYXRoLCBjb25zdCBjaGFyICpvdXRmaWxlKQoreworCWNoYXIgICAgICAg ICAgICBnbG9iYWxfZmlsZV9wYXRoW01BWFBHUEFUSF07CisJUEdyZXN1bHQJCSpyZXN1bHQ7CisJ U3RyaW5nSW5mb0RhdGEJc3Fsc3RhdGVtZW50OworCUZJTEUJCQkqcGZpbGU7CisJaW50CQkJCW5f ZXJyb3JzID0gMDsKKworCXNucHJpbnRmKGdsb2JhbF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVz L2dsb2JhbC5kYXQiLCBkdW1wZGlycGF0aCk7CisKKwkvKiBPcGVuIGdsb2JhbC5kYXQgZmlsZS4g Ki8KKwlwZmlsZSA9IGZvcGVuKGdsb2JhbF9maWxlX3BhdGgsIFBHX0JJTkFSWV9SKTsKKworCWlm IChwZmlsZSA9PSBOVUxMKQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZ2xvYmFsLmRhdCBm aWxlOiBcIiVzXCIiLCBnbG9iYWxfZmlsZV9wYXRoKTsKKworCS8qCisJICogSWYgb3V0ZmlsZSBp cyBnaXZlbiwgdGhlbiBqdXN0IGNvcHkgYWxsIGdsb2JhbC5kYXQgZmlsZSBkYXRhIGludG8KKwkg KiBvdXRmaWxlLgorCSAqLworCWlmIChvdXRmaWxlKQorCXsKKwkJY29weV9vcl9wcmludF9nbG9i YWxfZmlsZShvdXRmaWxlLCBwZmlsZSk7CisJCXJldHVybiAwOworCX0KKworCS8qIEluaXQgc3Fs c3RhdGVtZW50IHRvIGFwcGVuZCBjb21tYW5kcy4gKi8KKwlpbml0U3RyaW5nSW5mbygmc3Fsc3Rh dGVtZW50KTsKKworCS8qIFByb2Nlc3MgZmlsZSB0aWxsIEVPRiBhbmQgZXhlY3V0ZSBzcWwgc3Rh dGVtZW50cy4gKi8KKwl3aGlsZSAoUmVhZE9uZVN0YXRlbWVudCgmc3Fsc3RhdGVtZW50LCBwZmls ZSkgIT0gRU9GKQorCXsKKwkJcGdfbG9nX2luZm8oImV4ZWN1dGluZyBxdWVyeTogJXMiLCBzcWxz dGF0ZW1lbnQuZGF0YSk7CisJCXJlc3VsdCA9IFBRZXhlYyhjb25uLCBzcWxzdGF0ZW1lbnQuZGF0 YSk7CisKKwkJc3dpdGNoIChQUXJlc3VsdFN0YXR1cyhyZXN1bHQpKQorCQl7CisJCQljYXNlIFBH UkVTX0NPTU1BTkRfT0s6CisJCQljYXNlIFBHUkVTX1RVUExFU19PSzoKKwkJCWNhc2UgUEdSRVNf RU1QVFlfUVVFUlk6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCW5fZXJyb3JzKys7CisJ CQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgZXhlY3V0ZSBxdWVyeTogXCIlc1wiIFxuQ29tbWFu ZCB3YXM6IFwiJXNcIiIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pLCBzcWxzdGF0ZW1lbnQuZGF0YSk7 CisJCX0KKwkJUFFjbGVhcihyZXN1bHQpOworCX0KKworCS8qIFByaW50IGEgc3VtbWFyeSBvZiBp Z25vcmVkIGVycm9ycyBkdXJpbmcgZ2xvYmFsLmRhdC4gKi8KKwlpZiAobl9lcnJvcnMpCisJCXBn X2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiBnbG9iYWwuZGF0IGZpbGUgcmVzdG9yZTog JWQiLCBuX2Vycm9ycyk7CisKKwlmY2xvc2UocGZpbGUpOworCisJcmV0dXJuIG5fZXJyb3JzOwor fQorCisvKgorICogY29weV9vcl9wcmludF9nbG9iYWxfZmlsZQorICoKKyAqIFRoaXMgd2lsbCBj b3B5IGdsb2JhbC5kYXQgZmlsZSBpbnRvIG91dCBmaWxlLiAgSWYgIi0iIGlzIHVzZWQgYXMgb3V0 ZmlsZSwKKyAqIHRoZW4gcHJpbnQgY29tbWFuZHMgdG8gdGhlIHN0ZG91dC4KKyAqLworc3RhdGlj IHZvaWQKK2NvcHlfb3JfcHJpbnRfZ2xvYmFsX2ZpbGUoY29uc3QgY2hhciAqb3V0ZmlsZSwgRklM RSAqcGZpbGUpCit7CisJY2hhcglvdXRfZmlsZV9wYXRoW01BWFBHUEFUSF07CisJRklMRQkqT1BG OworCWludAkJYzsKKworCS8qICItIiBpcyB1c2VkIGZvciBzdGRvdXQuICovCisJaWYgKHN0cmNt cChvdXRmaWxlLCAiLSIpID09IDApCisJCU9QRiA9IHN0ZG91dDsKKwllbHNlCisJeworCQlzbnBy aW50ZihvdXRfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcyIsIG91dGZpbGUpOworCQlPUEYgPSBm b3BlbihvdXRfZmlsZV9wYXRoLCBQR19CSU5BUllfVyk7CisKKwkJaWYgKE9QRiA9PSBOVUxMKQor CQl7CisJCQlmY2xvc2UocGZpbGUpOworCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGU6 IFwiJXNcIiIsIG91dGZpbGUpOworCQl9CisJfQorCisJLyogQXBwZW5kIGdsb2JhbC5kYXQgaW50 byBvdXQgZmlsZSBvciBwcmludCB0byB0aGUgc3Rkb3V0LiAqLworCXdoaWxlICgoYyA9IGZnZXRj KHBmaWxlKSkgIT0gRU9GKQorCQlmcHV0YyhjLCBPUEYpOworCisJZmNsb3NlKHBmaWxlKTsKKwor CS8qIENsb3NlIG91dCBmaWxlLiAqLworCWlmIChzdHJjbXAob3V0ZmlsZSwgIi0iKSAhPSAwKQor CQlmY2xvc2UoT1BGKTsKK30KKworLyoKKyAqIHNpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQKKyAq CisgKiBhcHBlbmRzIGEgbm9kZSB0byB0aGUgbGlzdCBpbiB0aGUgZW5kLgorICovCitzdGF0aWMg dm9pZAorc2ltcGxlX2RiX29pZF9saXN0X2FwcGVuZChTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxp c3QsIE9pZCBkYl9vaWQsCisJCWNvbnN0IGNoYXIgKmRibmFtZSkKK3sKKwlTaW1wbGVEYXRhYmFz ZU9pZExpc3RDZWxsICpjZWxsOworCisJY2VsbCA9IHBnX21hbGxvY19vYmplY3QoU2ltcGxlRGF0 YWJhc2VPaWRMaXN0Q2VsbCk7CisKKwljZWxsLT5uZXh0ID0gTlVMTDsKKwljZWxsLT5kYl9vaWQg PSBkYl9vaWQ7CisJY2VsbC0+ZGJfbmFtZSA9IHBnX3N0cmR1cChkYm5hbWUpOworCisJaWYgKGxp c3QtPnRhaWwpCisJCWxpc3QtPnRhaWwtPm5leHQgPSBjZWxsOworCWVsc2UKKwkJbGlzdC0+aGVh ZCA9IGNlbGw7CisJbGlzdC0+dGFpbCA9IGNlbGw7Cit9CisKKy8qCisgKiBzaW1wbGVfZGJfb2lk X2Z1bGxfbGlzdF9kZWxldGUKKyAqCisgKiBkZWxldGUgYWxsIGNlbGwgZnJvbSBkYm5hbWUgYW5k IGRib2lkIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkCitzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9k ZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0KQoreworCVNpbXBsZURhdGFiYXNlT2lk TGlzdENlbGwJKmNlbGwgPSBsaXN0LT5oZWFkOworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJ Km5leHRjZWxsID0gTlVMTDsKKworCXdoaWxlIChjZWxsKQorCXsKKwkJbmV4dGNlbGwgPSBjZWxs LT5uZXh0OworCQlwZnJlZSAoY2VsbCk7CisJCWNlbGwgPSBuZXh0Y2VsbDsKKwl9CisKKwlsaXN0 LT5oZWFkID0gTlVMTDsKKwlsaXN0LT50YWlsID0gTlVMTDsKK30KKworLyoKKyAqIHNpbXBsZV9z dHJpbmdfZnVsbF9saXN0X2RlbGV0ZQorICoKKyAqIGRlbGV0ZSBhbGwgY2VsbCBmcm9tIHN0cmlu ZyBsaXN0LgorICovCitzdGF0aWMgdm9pZAorc2ltcGxlX3N0cmluZ19mdWxsX2xpc3RfZGVsZXRl KFNpbXBsZVN0cmluZ0xpc3QgKmxpc3QpCit7CisJU2ltcGxlU3RyaW5nTGlzdENlbGwJKmNlbGwg PSBsaXN0LT5oZWFkOworCVNpbXBsZVN0cmluZ0xpc3RDZWxsICAgICpjZWxsbmV4dCA9IE5VTEw7 CisKKwl3aGlsZSAoY2VsbCkKKwl7CisJCWNlbGxuZXh0ID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUo Y2VsbCk7CisJCWNlbGwgPSBjZWxsbmV4dDsKKwl9CisKKwlsaXN0LT5oZWFkID0gTlVMTDsKKwls aXN0LT50YWlsID0gTlVMTDsKK30KKworLyoKKyAqIHNpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUK KyAqCisgKiBkZWxldGUgY2VsbCBmcm9tIGRhdGFiYXNlIGFuZCBvaWQgbGlzdC4KKyAqLworc3Rh dGljIHZvaWQKK3NpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0 ICpsaXN0LAorCQlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpjZWxsLAorCQlTaW1wbGVEYXRh YmFzZU9pZExpc3RDZWxsICpwcmV2KQoreworCWlmIChwcmV2ID09IE5VTEwpCisJeworCQlsaXN0 LT5oZWFkID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUoY2VsbCk7CisJfQorCWVsc2UKKwl7CisJCXBy ZXYtPm5leHQgPSBjZWxsLT5uZXh0OworCQlwZnJlZShjZWxsKTsKKwl9Cit9CisKKy8qCisgKiBx dW90ZV9saXRlcmFsX2ludGVybmFsCisgKi8KK3N0YXRpYyBzaXplX3QKK3F1b3RlX2xpdGVyYWxf aW50ZXJuYWwoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4pCit7CisJY29u c3QgY2hhciAqczsKKwljaGFyCSAgICpzYXZlZHN0ID0gZHN0OworCisJZm9yIChzID0gc3JjOyBz IDwgc3JjICsgbGVuOyBzKyspCisJeworCQlpZiAoKnMgPT0gJ1xcJykKKwkJeworCQkJKmRzdCsr ID0gRVNDQVBFX1NUUklOR19TWU5UQVg7CisJCQlicmVhazsKKwkJfQorCX0KKworCSpkc3QrKyA9 ICdcJyc7CisJd2hpbGUgKGxlbi0tID4gMCkKKwl7CisJCWlmIChTUUxfU1RSX0RPVUJMRSgqc3Jj LCB0cnVlKSkKKwkJCSpkc3QrKyA9ICpzcmM7CisJCSpkc3QrKyA9ICpzcmMrKzsKKwl9CisJKmRz dCsrID0gJ1wnJzsKKworCXJldHVybiBkc3QgLSBzYXZlZHN0OworfQorCisvKgorICogcXVvdGVf bGl0ZXJhbF9jc3RyCisgKgorICoJICByZXR1cm5zIGEgcHJvcGVybHkgcXVvdGVkIGxpdGVyYWwK KyAqIGNvcGllZCBmcm9tIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9xdW90ZS5jCisgKi8KK3N0YXRp YyBjaGFyICoKK3F1b3RlX2xpdGVyYWxfY3N0cihjb25zdCBjaGFyICpyYXdzdHIpCit7CisJY2hh cgkgICAqcmVzdWx0OworCWludAkJCWxlbjsKKwlpbnQJCQluZXdsZW47CisKKwlsZW4gPSBzdHJs ZW4ocmF3c3RyKTsKKworCS8qIFdlIG1ha2UgYSB3b3JzdC1jYXNlIHJlc3VsdCBhcmVhOyB3YXN0 aW5nIGEgbGl0dGxlIHNwYWNlIGlzIE9LICovCisJcmVzdWx0ID0gcGdfbWFsbG9jKGxlbiAqIDIg KyAzICsgMSk7CisKKwluZXdsZW4gPSBxdW90ZV9saXRlcmFsX2ludGVybmFsKHJlc3VsdCwgcmF3 c3RyLCBsZW4pOworCXJlc3VsdFtuZXdsZW5dID0gJ1wwJzsKKworCXJldHVybiByZXN1bHQ7Cit9 CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3Bn X2R1bXAvdC8wMDFfYmFzaWMucGwKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRl eCAzN2Q4OTNkNWU2YS4uMGJiY2RiZTg0YTcKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jh c2ljLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbApAQCAtMjM3LDYgKzIz NywxMSBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJJ3BnX3Jlc3RvcmU6IG9wdGlvbnMgLUNcLy0t Y3JlYXRlIGFuZCAtMVwvLS1zaW5nbGUtdHJhbnNhY3Rpb24gY2Fubm90IGJlIHVzZWQgdG9nZXRo ZXInCiApOwogCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfcmVzdG9yZScsICctLWV4Y2x1 ZGUtZGF0YWJhc2U9Zm9vJywgJy0tZ2xvYmFscy1vbmx5JywgJy1kJywgJ3h4eCcgXSwKKwlxci9c UXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1 c2VkIHRvZ2V0aGVyIHdpdGggLWdcLy0tZ2xvYmFscy1vbmx5XEUvLAorCSdwZ19yZXN0b3JlOiBv cHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcv LS1nbG9iYWxzLW9ubHknKTsKKwogIyBhbHNvIGZhaWxzIGZvciAtciBhbmQgLXQsIGJ1dCBpdCBz ZWVtcyBwb2ludGxlc3MgdG8gYWRkIG1vcmUgdGVzdHMgZm9yIHRob3NlLgogY29tbWFuZF9mYWls c19saWtlKAogCVsgJ3BnX2R1bXBhbGwnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWds b2JhbHMtb25seScgXSwKQEAgLTI0NCw0ICsyNDksOCBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJ J3BnX2R1bXBhbGw6IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9n ZXRoZXIgd2l0aCAtZy8tLWdsb2JhbHMtb25seScKICk7CiAKK2NvbW1hbmRfZmFpbHNfbGlrZSgK KwlbICdwZ19kdW1wYWxsJywgJy0tZm9ybWF0JywgJ3gnIF0sCisJcXIvXFFwZ19kdW1wYWxsOiBl cnJvcjogdW5yZWNvZ25pemVkIGFyY2hpdmUgZm9ybWF0ICJ4IjtcRS8sCisJJ3BnX2R1bXBhbGw6 IHVucmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCcpOwogZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1n aXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CmluZGV4IDk4NDAwNjA5OTdmLi5iNDNhM2U0OGUzYiAxMDA2NDQKLS0t IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI2OTUsNiArMjY5NSw4IEBAIFNodXRkb3duTW9kZQogU2ln blRTVmVjdG9yCiBTaW1wbGVBY3Rpb25MaXN0CiBTaW1wbGVBY3Rpb25MaXN0Q2VsbAorU2ltcGxl RGF0YWJhc2VPaWRMaXN0CitTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCiBTaW1wbGVFY29udGV4 dFN0YWNrRW50cnkKIFNpbXBsZU9pZExpc3QKIFNpbXBsZU9pZExpc3RDZWxsCi0tIAoyLjM5LjMK Cg== --00000000000010d1f5062f9b2bba Content-Type: application/octet-stream; name="v21_0001_move-common-code-of-pg_dumpall-and-pg_restore-to-new_file.patch" Content-Disposition: attachment; filename="v21_0001_move-common-code-of-pg_dumpall-and-pg_restore-to-new_file.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7w5jf7r0 RnJvbSA3N2RhZDY4ZGUwZTU5Y2E3NDg5ZGE2ZTY5NWY1NDM2NzU5YmExN2VmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVGh1LCAyMCBGZWIgMjAyNSAxNjoyNzoxNyArMDUzMApTdWJqZWN0OiBbUEFU Q0ggMS8yXSBtb3ZlIGNvbW1vbiBjb2RlIG9mIHBnX2R1bXBhbGwgYW5kIHBnX3Jlc3RvcmUgdG8g bmV3IGZpbGUKCmNvbm5lY3REYXRhYmFzZSBpcyB1c2VkIGJ5IGJvdGggcGdfZHVtcGFsbCBhbmQg cGdfcmVzdG9yZSBzbwptb3ZlIGNvbW1vbiBjb2RlIHRvIG5ldyBmaWxlLgotLS0KIHNyYy9iaW4v cGdfZHVtcC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iaW4vcGdfZHVt cC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmMgfCAyODkgKysrKysrKysrKysrKysrKysrKysrKysK IHNyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmggfCAgMjQgKysKIHNyYy9i aW4vcGdfZHVtcC9tZXNvbi5idWlsZCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXBhbGwuYyAgICAgICAgICAgICB8IDI2OCArLS0tLS0tLS0tLS0tLS0tLS0tLS0K IDUgZmlsZXMgY2hhbmdlZCwgMzI0IGluc2VydGlvbnMoKyksIDI2MiBkZWxldGlvbnMoLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3Rv cmUuaAoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZSBiL3NyYy9iaW4vcGdf ZHVtcC9NYWtlZmlsZQppbmRleCAyMzNhZDE1Y2E3NS4uODYwMDZkMTExYzMgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQorKysgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUK QEAgLTUwLDggKzUwLDggQEAgcGdfZHVtcDogcGdfZHVtcC5vIGNvbW1vbi5vIHBnX2R1bXBfc29y dC5vICQoT0JKUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGcKIHBnX3Jlc3RvcmU6IHBn X3Jlc3RvcmUubyAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJt YWtlLWxpYnBnZmV1dGlscwogCSQoQ0MpICQoQ0ZMQUdTKSBwZ19yZXN0b3JlLm8gJChPQkpTKSAk KExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKIAotcGdfZHVtcGFsbDog cGdfZHVtcGFsbC5vIGR1bXB1dGlscy5vIGZpbHRlci5vICQoV0lOMzJSRVMpIHwgc3VibWFrZS1s aWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwotCSQoQ0MpICQoQ0ZM QUdTKSBwZ19kdW1wYWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gJChXSU4zMlJFUykgJChMREZM QUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCitwZ19kdW1wYWxsOiBwZ19kdW1w YWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5vICQoV0lO MzJSRVMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1 dGlscworCSQoQ0MpICQoQ0ZMQUdTKSBwZ19kdW1wYWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8g Y29tbW9uX2R1bXBhbGxfcmVzdG9yZS5vICQoV0lOMzJSRVMpICQoTERGTEFHUykgJChMREZMQUdT X0VYKSAkKExJQlMpIC1vICRAJChYKQogCiBpbnN0YWxsOiBhbGwgaW5zdGFsbGRpcnMKIAkkKElO U1RBTExfUFJPR1JBTSkgcGdfZHVtcCQoWCkgJyQoREVTVERJUikkKGJpbmRpciknL3BnX2R1bXAk KFgpCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5j IGIvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTJmNTJiNzIzOWEKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5jCkBAIC0wLDAgKzEsMjg5 IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21tb25fZHVtcGFsbF9yZXN0b3JlLmMK KyAqICAgIFRoaXMgaXMgYSBjb21tb24gZmlsZSBmb3IgcGdfZHVtcGFsbCBhbmQgcGdfcmVzdG9y ZS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwg UmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklD QVRJT04KKyAqICAgIHNyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmMKKyAq CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKwor I2luY2x1ZGUgImNvbW1vbi9jb25uZWN0LmgiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIK KyNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29tbW9uX2R1bXBhbGxfcmVz dG9yZS5oIgorI2luY2x1ZGUgImR1bXB1dGlscy5oIgorI2luY2x1ZGUgImZlX3V0aWxzL3N0cmlu Z191dGlscy5oIgorCitzdGF0aWMgY2hhciAqY29uc3RydWN0Q29ublN0cihjb25zdCBjaGFyICoq a2V5d29yZHMsIGNvbnN0IGNoYXIgKip2YWx1ZXMpOworI2RlZmluZSBleGl0X25pY2VseShjb2Rl KSBleGl0KGNvZGUpCisKKy8qCisgKiBjb25uZWN0RGF0YWJhc2UKKyAqCisgKiBNYWtlIGEgZGF0 YWJhc2UgY29ubmVjdGlvbiB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgQW4KKyAqIGludGVy YWN0aXZlIHBhc3N3b3JkIHByb21wdCBpcyBhdXRvbWF0aWNhbGx5IGlzc3VlZCBpZiByZXF1aXJl ZC4KKyAqCisgKiBJZiBmYWlsX29uX2Vycm9yIGlzIGZhbHNlLCB3ZSByZXR1cm4gTlVMTCB3aXRo b3V0IHByaW50aW5nIGFueSBtZXNzYWdlCisgKiBvbiBmYWlsdXJlLCBidXQgcHJlc2VydmUgYW55 IHByb21wdGVkIHBhc3N3b3JkIGZvciB0aGUgbmV4dCB0cnkuCisgKgorICogT24gc3VjY2Vzcywg dGhlICdjb25uc3RyJyBpcyBzZXQgdG8gYSBjb25uZWN0aW9uIHN0cmluZyBjb250YWluaW5nCisg KiB0aGUgb3B0aW9ucyB1c2VkIGFuZCAnc2VydmVyX3ZlcnNpb24nIGlzIHNldCB0byB2ZXJzaW9u IHNvIHRoYXQgY2FsbGVyCisgKiBjYW4gdXNlIHRoZW0uCisgKi8KK1BHY29ubiAqCitjb25uZWN0 RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmlu ZywKKwkJCQljb25zdCBjaGFyICpwZ2hvc3QsIGNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3QgY2hh ciAqcGd1c2VyLAorCQkJCXRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9vbCBmYWlsX29uX2Vy cm9yLCBjb25zdCBjaGFyICpwcm9nbmFtZSwKKwkJCQljb25zdCBjaGFyICoqY29ubnN0ciwgaW50 ICpzZXJ2ZXJfdmVyc2lvbikKK3sKKwlQR2Nvbm4JICAgKmNvbm47CisJYm9vbAkJbmV3X3Bhc3M7 CisJY29uc3QgY2hhciAqcmVtb3RldmVyc2lvbl9zdHI7CisJaW50CQkJbXlfdmVyc2lvbjsKKwlj b25zdCBjaGFyICoqa2V5d29yZHMgPSBOVUxMOworCWNvbnN0IGNoYXIgKip2YWx1ZXMgPSBOVUxM OworCVBRY29ubmluZm9PcHRpb24gKmNvbm5fb3B0cyA9IE5VTEw7CisJc3RhdGljIGNoYXIgKnBh c3N3b3JkID0gTlVMTDsKKwlpbnQJCQlzZXJ2ZXJfdmVyc2lvbl90ZW1wOworCisJaWYgKHByb21w dF9wYXNzd29yZCA9PSBUUklfWUVTICYmICFwYXNzd29yZCkKKwkJcGFzc3dvcmQgPSBzaW1wbGVf cHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOworCisJLyoKKwkgKiBTdGFydCB0aGUgY29ubmVj dGlvbi4gIExvb3AgdW50aWwgd2UgaGF2ZSBhIHBhc3N3b3JkIGlmIHJlcXVlc3RlZCBieQorCSAq IGJhY2tlbmQuCisJICovCisJZG8KKwl7CisJCWludAkJCWFyZ2NvdW50ID0gNjsKKwkJUFFjb25u aW5mb09wdGlvbiAqY29ubl9vcHQ7CisJCWNoYXIJICAgKmVycl9tc2cgPSBOVUxMOworCQlpbnQJ CQlpID0gMDsKKworCQlmcmVlKGtleXdvcmRzKTsKKwkJZnJlZSh2YWx1ZXMpOworCQlQUWNvbm5p bmZvRnJlZShjb25uX29wdHMpOworCisJCS8qCisJCSAqIE1lcmdlIHRoZSBjb25uZWN0aW9uIGlu Zm8gaW5wdXRzIGdpdmVuIGluIGZvcm0gb2YgY29ubmVjdGlvbiBzdHJpbmcKKwkJICogYW5kIG90 aGVyIG9wdGlvbnMuICBFeHBsaWNpdGx5IGRpc2NhcmQgYW55IGRibmFtZSB2YWx1ZSBpbiB0aGUK KwkJICogY29ubmVjdGlvbiBzdHJpbmc7IG90aGVyd2lzZSwgUFFjb25uZWN0ZGJQYXJhbXMoKSB3 b3VsZCBpbnRlcnByZXQKKwkJICogdGhhdCB2YWx1ZSBhcyBiZWluZyBpdHNlbGYgYSBjb25uZWN0 aW9uIHN0cmluZy4KKwkJICovCisJCWlmIChjb25uZWN0aW9uX3N0cmluZykKKwkJeworCQkJY29u bl9vcHRzID0gUFFjb25uaW5mb1BhcnNlKGNvbm5lY3Rpb25fc3RyaW5nLCAmZXJyX21zZyk7CisJ CQlpZiAoY29ubl9vcHRzID09IE5VTEwpCisJCQkJcGdfZmF0YWwoIiVzIiwgZXJyX21zZyk7CisK KwkJCWZvciAoY29ubl9vcHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7 IGNvbm5fb3B0KyspCisJCQl7CisJCQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25u X29wdC0+dmFsWzBdICE9ICdcMCcgJiYKKwkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAi ZGJuYW1lIikgIT0gMCkKKwkJCQkJYXJnY291bnQrKzsKKwkJCX0KKworCQkJa2V5d29yZHMgPSBw Z19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCprZXl3b3JkcykpOworCQkJdmFsdWVz ID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFsdWVzKSk7CisKKwkJCWZv ciAoY29ubl9vcHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNvbm5f b3B0KyspCisJCQl7CisJCQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25uX29wdC0+ dmFsWzBdICE9ICdcMCcgJiYKKwkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJuYW1l IikgIT0gMCkKKwkJCQl7CisJCQkJCWtleXdvcmRzW2ldID0gY29ubl9vcHQtPmtleXdvcmQ7CisJ CQkJCXZhbHVlc1tpXSA9IGNvbm5fb3B0LT52YWw7CisJCQkJCWkrKzsKKwkJCQl9CisJCQl9CisJ CX0KKwkJZWxzZQorCQl7CisJCQlrZXl3b3JkcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkg KiBzaXplb2YoKmtleXdvcmRzKSk7CisJCQl2YWx1ZXMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCAr IDEpICogc2l6ZW9mKCp2YWx1ZXMpKTsKKwkJfQorCisJCWlmIChwZ2hvc3QpCisJCXsKKwkJCWtl eXdvcmRzW2ldID0gImhvc3QiOworCQkJdmFsdWVzW2ldID0gcGdob3N0OworCQkJaSsrOworCQl9 CisJCWlmIChwZ3BvcnQpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gInBvcnQiOworCQkJdmFsdWVz W2ldID0gcGdwb3J0OworCQkJaSsrOworCQl9CisJCWlmIChwZ3VzZXIpCisJCXsKKwkJCWtleXdv cmRzW2ldID0gInVzZXIiOworCQkJdmFsdWVzW2ldID0gcGd1c2VyOworCQkJaSsrOworCQl9CisJ CWlmIChwYXNzd29yZCkKKwkJeworCQkJa2V5d29yZHNbaV0gPSAicGFzc3dvcmQiOworCQkJdmFs dWVzW2ldID0gcGFzc3dvcmQ7CisJCQlpKys7CisJCX0KKwkJaWYgKGRibmFtZSkKKwkJeworCQkJ a2V5d29yZHNbaV0gPSAiZGJuYW1lIjsKKwkJCXZhbHVlc1tpXSA9IGRibmFtZTsKKwkJCWkrKzsK KwkJfQorCQlrZXl3b3Jkc1tpXSA9ICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIjsKKwkJdmFs dWVzW2ldID0gcHJvZ25hbWU7CisJCWkrKzsKKworCQluZXdfcGFzcyA9IGZhbHNlOworCQljb25u ID0gUFFjb25uZWN0ZGJQYXJhbXMoa2V5d29yZHMsIHZhbHVlcywgdHJ1ZSk7CisKKwkJaWYgKCFj b25uKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIs IGRibmFtZSk7CisKKwkJaWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEICYmCisJ CQlQUWNvbm5lY3Rpb25OZWVkc1Bhc3N3b3JkKGNvbm4pICYmCisJCQkhcGFzc3dvcmQgJiYKKwkJ CXByb21wdF9wYXNzd29yZCAhPSBUUklfTk8pCisJCXsKKwkJCVBRZmluaXNoKGNvbm4pOworCQkJ cGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOworCQkJbmV3X3Bh c3MgPSB0cnVlOworCQl9CisJfSB3aGlsZSAobmV3X3Bhc3MpOworCisJLyogY2hlY2sgdG8gc2Vl IHRoYXQgdGhlIGJhY2tlbmQgY29ubmVjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IG1hZGUgKi8KKwlp ZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQpCisJeworCQlpZiAoZmFpbF9vbl9l cnJvcikKKwkJCXBnX2ZhdGFsKCIlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJZWxzZQor CQl7CisJCQlQUWZpbmlzaChjb25uKTsKKworCQkJZnJlZShrZXl3b3Jkcyk7CisJCQlmcmVlKHZh bHVlcyk7CisJCQlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOworCisJCQlyZXR1cm4gTlVMTDsK KwkJfQorCX0KKworCS8qCisJICogT2ssIGNvbm5lY3RlZCBzdWNjZXNzZnVsbHkuIElmIHJlcXVl c3RlZCwgcmVtZW1iZXIgdGhlIG9wdGlvbnMgdXNlZCwgaW4gdGhlCisJICogZm9ybSBvZiBhIGNv bm5lY3Rpb24gc3RyaW5nLgorCSAqLworCWlmIChjb25uc3RyKQorCQkqY29ubnN0ciA9IGNvbnN0 cnVjdENvbm5TdHIoa2V5d29yZHMsIHZhbHVlcyk7CisKKwlmcmVlKGtleXdvcmRzKTsKKwlmcmVl KHZhbHVlcyk7CisJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKKworCS8qIENoZWNrIHZlcnNp b24gKi8KKwlyZW1vdGV2ZXJzaW9uX3N0ciA9IFBRcGFyYW1ldGVyU3RhdHVzKGNvbm4sICJzZXJ2 ZXJfdmVyc2lvbiIpOworCWlmICghcmVtb3RldmVyc2lvbl9zdHIpCisJCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgZ2V0IHNlcnZlciB2ZXJzaW9uIik7CisKKwlzZXJ2ZXJfdmVyc2lvbl90ZW1wID0gUFFz ZXJ2ZXJWZXJzaW9uKGNvbm4pOworCWlmIChzZXJ2ZXJfdmVyc2lvbl90ZW1wID09IDApCisJCXBn X2ZhdGFsKCJjb3VsZCBub3QgcGFyc2Ugc2VydmVyIHZlcnNpb24gXCIlc1wiIiwKKwkJCQkgcmVt b3RldmVyc2lvbl9zdHIpOworCisJLyogSWYgcmVxdWVzdGVkLCB0aGVuIGNvcHkgc2VydmVyIHZl cnNpb24gdG8gb3V0IHZhcmlhYmxlLiAqLworCWlmIChzZXJ2ZXJfdmVyc2lvbikKKwkJKnNlcnZl cl92ZXJzaW9uID0gc2VydmVyX3ZlcnNpb25fdGVtcDsKKworCW15X3ZlcnNpb24gPSBQR19WRVJT SU9OX05VTTsKKworCS8qCisJICogV2UgYWxsb3cgdGhlIHNlcnZlciB0byBiZSBiYWNrIHRvIDku MiwgYW5kIHVwIHRvIGFueSBtaW5vciByZWxlYXNlIG9mCisJICogb3VyIG93biBtYWpvciB2ZXJz aW9uLiAgKFNlZSBhbHNvIHZlcnNpb24gY2hlY2sgaW4gcGdfZHVtcC5jLikKKwkgKi8KKwlpZiAo bXlfdmVyc2lvbiAhPSBzZXJ2ZXJfdmVyc2lvbl90ZW1wCisJCSYmIChzZXJ2ZXJfdmVyc2lvbl90 ZW1wIDwgOTAyMDAgfHwKKwkJCShzZXJ2ZXJfdmVyc2lvbl90ZW1wIC8gMTAwKSA+IChteV92ZXJz aW9uIC8gMTAwKSkpCisJeworCQlwZ19sb2dfZXJyb3IoImFib3J0aW5nIGJlY2F1c2Ugb2Ygc2Vy dmVyIHZlcnNpb24gbWlzbWF0Y2giKTsKKwkJcGdfbG9nX2Vycm9yX2RldGFpbCgic2VydmVyIHZl cnNpb246ICVzOyAlcyB2ZXJzaW9uOiAlcyIsCisJCQkJCQkJcmVtb3RldmVyc2lvbl9zdHIsIHBy b2duYW1lLCBQR19WRVJTSU9OKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCisJUFFjbGVhcihl eGVjdXRlUXVlcnkoY29ubiwgQUxXQVlTX1NFQ1VSRV9TRUFSQ0hfUEFUSF9TUUwpKTsKKworCXJl dHVybiBjb25uOworfQorCisvKgorICogY29uc3RydWN0Q29ublN0cgorICoKKyAqIENvbnN0cnVj dCBhIGNvbm5lY3Rpb24gc3RyaW5nIGZyb20gdGhlIGdpdmVuIGtleXdvcmQvdmFsdWUgcGFpcnMu IEl0IGlzCisgKiB1c2VkIHRvIHBhc3MgdGhlIGNvbm5lY3Rpb24gb3B0aW9ucyB0byB0aGUgcGdf ZHVtcCBzdWJwcm9jZXNzLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgZXhj bHVkZWQ6CisgKglkYm5hbWUJCS0gdmFyaWVzIGluIGVhY2ggcGdfZHVtcCBpbnZvY2F0aW9uCisg KglwYXNzd29yZAktIGl0J3Mgbm90IHNlY3VyZSB0byBwYXNzIGEgcGFzc3dvcmQgb24gdGhlIGNv bW1hbmQgbGluZQorICoJZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSAtIHdlJ2xsIGxldCBwZ19k dW1wIHNldCBpdAorICovCitzdGF0aWMgY2hhciAqCitjb25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNo YXIgKiprZXl3b3JkcywgY29uc3QgY2hhciAqKnZhbHVlcykKK3sKKwlQUUV4cEJ1ZmZlciBidWYg PSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCWNoYXIJICAgKmNvbm5zdHI7CisJaW50CQkJaTsKKwli b29sCQlmaXJzdGtleXdvcmQgPSB0cnVlOworCisJLyogQ29uc3RydWN0IGEgbmV3IGNvbm5lY3Rp b24gc3RyaW5nIGluIGtleT0ndmFsdWUnIGZvcm1hdC4gKi8KKwlmb3IgKGkgPSAwOyBrZXl3b3Jk c1tpXSAhPSBOVUxMOyBpKyspCisJeworCQlpZiAoc3RyY21wKGtleXdvcmRzW2ldLCAiZGJuYW1l IikgPT0gMCB8fAorCQkJc3RyY21wKGtleXdvcmRzW2ldLCAicGFzc3dvcmQiKSA9PSAwIHx8CisJ CQlzdHJjbXAoa2V5d29yZHNbaV0sICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIikgPT0gMCkK KwkJCWNvbnRpbnVlOworCisJCWlmICghZmlyc3RrZXl3b3JkKQorCQkJYXBwZW5kUFFFeHBCdWZm ZXJDaGFyKGJ1ZiwgJyAnKTsKKwkJZmlyc3RrZXl3b3JkID0gZmFsc2U7CisJCWFwcGVuZFBRRXhw QnVmZmVyKGJ1ZiwgIiVzPSIsIGtleXdvcmRzW2ldKTsKKwkJYXBwZW5kQ29ublN0clZhbChidWYs IHZhbHVlc1tpXSk7CisJfQorCisJY29ubnN0ciA9IHBnX3N0cmR1cChidWYtPmRhdGEpOworCWRl c3Ryb3lQUUV4cEJ1ZmZlcihidWYpOworCXJldHVybiBjb25uc3RyOworfQorCisvKgorICogZXhl Y3V0ZVF1ZXJ5CisgKgorICogUnVuIGEgcXVlcnksIHJldHVybiB0aGUgcmVzdWx0cywgZXhpdCBw cm9ncmFtIG9uIGZhaWx1cmUuCisgKi8KK1BHcmVzdWx0ICoKK2V4ZWN1dGVRdWVyeShQR2Nvbm4g KmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KQoreworCVBHcmVzdWx0ICAgKnJlczsKKworCXBnX2xv Z19pbmZvKCJleGVjdXRpbmcgJXMiLCBxdWVyeSk7CisKKwlyZXMgPSBQUWV4ZWMoY29ubiwgcXVl cnkpOworCWlmICghcmVzIHx8CisJCVBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVT X09LKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJxdWVyeSBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3Nh Z2UoY29ubikpOworCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJRdWVyeSB3YXM6ICVzIiwgcXVlcnkp OworCQlQUWZpbmlzaChjb25uKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCisJcmV0dXJuIHJl czsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3Jl LmggYi9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43ZmUxYzAwYWI3MQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmgKQEAgLTAsMCArMSwy NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5o CisgKiAgICAgIENvbW1vbiBoZWFkZXIgZmlsZSBmb3IgcGdfZHVtcGFsbCBhbmQgcGdfcmVzdG9y ZQorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBS ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNB VElPTgorICogICAgc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaAorICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIENPTU1PTl9EVU1QQUxMX1JFU1RPUkVf SAorI2RlZmluZSBDT01NT05fRFVNUEFMTF9SRVNUT1JFX0gKKworI2luY2x1ZGUgInBnX2JhY2t1 cC5oIgorCitleHRlcm4gUEdjb25uICpjb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1l LCBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmluZywgY29uc3QgY2hhciAqcGdob3N0LAorCQkJ CQkJCSAgIGNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2VyLAorCQkJCQkJCSAg IHRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9vbCBmYWlsX29uX2Vycm9yLAorCQkJCQkJCSAg IGNvbnN0IGNoYXIgKnByb2duYW1lLCBjb25zdCBjaGFyICoqY29ubnN0ciwgaW50ICpzZXJ2ZXJf dmVyc2lvbik7CitleHRlcm4gIFBHcmVzdWx0ICpleGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBj b25zdCBjaGFyICpxdWVyeSk7CisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENP TU1PTl9EVU1QQUxMX1JFU1RPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL21l c29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCmluZGV4IDYwM2JhNmNmYmYw Li45N2RiZmFlYjY3ZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZApAQCAtNDksNiArNDksNyBAQCBiaW5fdGFy Z2V0cyArPSBwZ19kdW1wCiAKIHBnX2R1bXBhbGxfc291cmNlcyA9IGZpbGVzKAogICAncGdfZHVt cGFsbC5jJywKKyAgJ2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYycsCiApCiAKIGlmIGhvc3Rfc3lz dGVtID09ICd3aW5kb3dzJwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwu YyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKaW5kZXggZTA4NjcyNDI1MjYuLjFhMGMx YmJlYWUzIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKQEAgLTIwLDYgKzIwLDcgQEAKIAogI2luY2x1ZGUg ImNhdGFsb2cvcGdfYXV0aGlkX2QuaCIKICNpbmNsdWRlICJjb21tb24vY29ubmVjdC5oIgorI2lu Y2x1ZGUgImNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaCIKICNpbmNsdWRlICJjb21tb24vZmlsZV91 dGlscy5oIgogI2luY2x1ZGUgImNvbW1vbi9oYXNoZm5fdW5zdGFibGUuaCIKICNpbmNsdWRlICJj b21tb24vbG9nZ2luZy5oIgpAQCAtNzEsMTIgKzcyLDYgQEAgc3RhdGljIHZvaWQgYnVpbGRTaFNl Y0xhYmVscyhQR2Nvbm4gKmNvbm4sCiAJCQkJCQkJIGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSwg T2lkIG9iamVjdElkLAogCQkJCQkJCSBjb25zdCBjaGFyICpvYmp0eXBlLCBjb25zdCBjaGFyICpv YmpuYW1lLAogCQkJCQkJCSBQUUV4cEJ1ZmZlciBidWZmZXIpOwotc3RhdGljIFBHY29ubiAqY29u bmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFtZSwKLQkJCQkJCQkgICBjb25zdCBjaGFyICpj b25uZWN0aW9uX3N0cmluZywgY29uc3QgY2hhciAqcGdob3N0LAotCQkJCQkJCSAgIGNvbnN0IGNo YXIgKnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2VyLAotCQkJCQkJCSAgIHRyaXZhbHVlIHByb21w dF9wYXNzd29yZCwgYm9vbCBmYWlsX29uX2Vycm9yKTsKLXN0YXRpYyBjaGFyICpjb25zdHJ1Y3RD b25uU3RyKGNvbnN0IGNoYXIgKiprZXl3b3JkcywgY29uc3QgY2hhciAqKnZhbHVlcyk7Ci1zdGF0 aWMgUEdyZXN1bHQgKmV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5 KTsKIHN0YXRpYyB2b2lkIGV4ZWN1dGVDb21tYW5kKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAq cXVlcnkpOwogc3RhdGljIHZvaWQgZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhQR2Nvbm4gKmNvbm4s IFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm5zLAogCQkJCQkJCQkgICBTaW1wbGVTdHJpbmdMaXN0 ICpuYW1lcyk7CkBAIC04NSw3ICs4MCw3IEBAIHN0YXRpYyB2b2lkIHJlYWRfZHVtcGFsbF9maWx0 ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJuCiBzdGF0 aWMgY2hhciBwZ19kdW1wX2JpbltNQVhQR1BBVEhdOwogc3RhdGljIGNvbnN0IGNoYXIgKnByb2du YW1lOwogc3RhdGljIFBRRXhwQnVmZmVyIHBnZHVtcG9wdHM7Ci1zdGF0aWMgY2hhciAqY29ubnN0 ciA9ICIiOworc3RhdGljIGNvbnN0IGNoYXIgKmNvbm5zdHIgPSAiIjsKIHN0YXRpYyBib29sIG91 dHB1dF9jbGVhbiA9IGZhbHNlOwogc3RhdGljIGJvb2wgc2tpcF9hY2xzID0gZmFsc2U7CiBzdGF0 aWMgYm9vbCB2ZXJib3NlID0gZmFsc2U7CkBAIC00ODQsNyArNDc5LDggQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCWlmIChwZ2RiKQogCXsKIAkJY29ubiA9IGNvbm5lY3REYXRhYmFz ZShwZ2RiLCBjb25uc3RyLCBwZ2hvc3QsIHBncG9ydCwgcGd1c2VyLAotCQkJCQkJCSAgIHByb21w dF9wYXNzd29yZCwgZmFsc2UpOworCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgZmFsc2UsCisJ CQkJCQkJICAgcHJvZ25hbWUsICZjb25uc3RyLCAmc2VydmVyX3ZlcnNpb24pOwogCiAJCWlmICgh Y29ubikKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIi LCBwZ2RiKTsKQEAgLTQ5MiwxMCArNDg4LDEyIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAllbHNlCiAJewogCQljb25uID0gY29ubmVjdERhdGFiYXNlKCJwb3N0Z3JlcyIsIGNvbm5z dHIsIHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIsCi0JCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCBm YWxzZSk7CisJCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCBmYWxzZSwKKwkJCQkJCQkgICBwcm9n bmFtZSwgJmNvbm5zdHIsICZzZXJ2ZXJfdmVyc2lvbik7CiAJCWlmICghY29ubikKIAkJCWNvbm4g PSBjb25uZWN0RGF0YWJhc2UoInRlbXBsYXRlMSIsIGNvbm5zdHIsIHBnaG9zdCwgcGdwb3J0LCBw Z3VzZXIsCi0JCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgdHJ1ZSk7CisJCQkJCQkJCSAgIHBy b21wdF9wYXNzd29yZCwgdHJ1ZSwKKwkJCQkJCQkJICAgcHJvZ25hbWUsICZjb25uc3RyLCAmc2Vy dmVyX3ZlcnNpb24pOwogCiAJCWlmICghY29ubikKIAkJewpAQCAtMTcxOCwyNTYgKzE3MTYsNiBA QCBidWlsZFNoU2VjTGFiZWxzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqY2F0YWxvZ19uYW1l LCBPaWQgb2JqZWN0SWQsCiAJZGVzdHJveVBRRXhwQnVmZmVyKHNxbCk7CiB9CiAKLS8qCi0gKiBN YWtlIGEgZGF0YWJhc2UgY29ubmVjdGlvbiB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgQW4K LSAqIGludGVyYWN0aXZlIHBhc3N3b3JkIHByb21wdCBpcyBhdXRvbWF0aWNhbGx5IGlzc3VlZCBp ZiByZXF1aXJlZC4KLSAqCi0gKiBJZiBmYWlsX29uX2Vycm9yIGlzIGZhbHNlLCB3ZSByZXR1cm4g TlVMTCB3aXRob3V0IHByaW50aW5nIGFueSBtZXNzYWdlCi0gKiBvbiBmYWlsdXJlLCBidXQgcHJl c2VydmUgYW55IHByb21wdGVkIHBhc3N3b3JkIGZvciB0aGUgbmV4dCB0cnkuCi0gKgotICogT24g c3VjY2VzcywgdGhlIGdsb2JhbCB2YXJpYWJsZSAnY29ubnN0cicgaXMgc2V0IHRvIGEgY29ubmVj dGlvbiBzdHJpbmcKLSAqIGNvbnRhaW5pbmcgdGhlIG9wdGlvbnMgdXNlZC4KLSAqLwotc3RhdGlj IFBHY29ubiAqCi1jb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFy ICpjb25uZWN0aW9uX3N0cmluZywKLQkJCQljb25zdCBjaGFyICpwZ2hvc3QsIGNvbnN0IGNoYXIg KnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2VyLAotCQkJCXRyaXZhbHVlIHByb21wdF9wYXNzd29y ZCwgYm9vbCBmYWlsX29uX2Vycm9yKQotewotCVBHY29ubgkgICAqY29ubjsKLQlib29sCQluZXdf cGFzczsKLQljb25zdCBjaGFyICpyZW1vdGV2ZXJzaW9uX3N0cjsKLQlpbnQJCQlteV92ZXJzaW9u OwotCWNvbnN0IGNoYXIgKiprZXl3b3JkcyA9IE5VTEw7Ci0JY29uc3QgY2hhciAqKnZhbHVlcyA9 IE5VTEw7Ci0JUFFjb25uaW5mb09wdGlvbiAqY29ubl9vcHRzID0gTlVMTDsKLQlzdGF0aWMgY2hh ciAqcGFzc3dvcmQgPSBOVUxMOwotCi0JaWYgKHByb21wdF9wYXNzd29yZCA9PSBUUklfWUVTICYm ICFwYXNzd29yZCkKLQkJcGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFs c2UpOwotCi0JLyoKLQkgKiBTdGFydCB0aGUgY29ubmVjdGlvbi4gIExvb3AgdW50aWwgd2UgaGF2 ZSBhIHBhc3N3b3JkIGlmIHJlcXVlc3RlZCBieQotCSAqIGJhY2tlbmQuCi0JICovCi0JZG8KLQl7 Ci0JCWludAkJCWFyZ2NvdW50ID0gNjsKLQkJUFFjb25uaW5mb09wdGlvbiAqY29ubl9vcHQ7Ci0J CWNoYXIJICAgKmVycl9tc2cgPSBOVUxMOwotCQlpbnQJCQlpID0gMDsKLQotCQlmcmVlKGtleXdv cmRzKTsKLQkJZnJlZSh2YWx1ZXMpOwotCQlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOwotCi0J CS8qCi0JCSAqIE1lcmdlIHRoZSBjb25uZWN0aW9uIGluZm8gaW5wdXRzIGdpdmVuIGluIGZvcm0g b2YgY29ubmVjdGlvbiBzdHJpbmcKLQkJICogYW5kIG90aGVyIG9wdGlvbnMuICBFeHBsaWNpdGx5 IGRpc2NhcmQgYW55IGRibmFtZSB2YWx1ZSBpbiB0aGUKLQkJICogY29ubmVjdGlvbiBzdHJpbmc7 IG90aGVyd2lzZSwgUFFjb25uZWN0ZGJQYXJhbXMoKSB3b3VsZCBpbnRlcnByZXQKLQkJICogdGhh dCB2YWx1ZSBhcyBiZWluZyBpdHNlbGYgYSBjb25uZWN0aW9uIHN0cmluZy4KLQkJICovCi0JCWlm IChjb25uZWN0aW9uX3N0cmluZykKLQkJewotCQkJY29ubl9vcHRzID0gUFFjb25uaW5mb1BhcnNl KGNvbm5lY3Rpb25fc3RyaW5nLCAmZXJyX21zZyk7Ci0JCQlpZiAoY29ubl9vcHRzID09IE5VTEwp Ci0JCQkJcGdfZmF0YWwoIiVzIiwgZXJyX21zZyk7Ci0KLQkJCWZvciAoY29ubl9vcHQgPSBjb25u X29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNvbm5fb3B0KyspCi0JCQl7Ci0JCQkJ aWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25uX29wdC0+dmFsWzBdICE9ICdcMCcgJiYK LQkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJuYW1lIikgIT0gMCkKLQkJCQkJYXJn Y291bnQrKzsKLQkJCX0KLQotCQkJa2V5d29yZHMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEp ICogc2l6ZW9mKCprZXl3b3JkcykpOwotCQkJdmFsdWVzID0gcGdfbWFsbG9jMCgoYXJnY291bnQg KyAxKSAqIHNpemVvZigqdmFsdWVzKSk7Ci0KLQkJCWZvciAoY29ubl9vcHQgPSBjb25uX29wdHM7 IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNvbm5fb3B0KyspCi0JCQl7Ci0JCQkJaWYgKGNv bm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25uX29wdC0+dmFsWzBdICE9ICdcMCcgJiYKLQkJCQkJ c3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJuYW1lIikgIT0gMCkKLQkJCQl7Ci0JCQkJCWtl eXdvcmRzW2ldID0gY29ubl9vcHQtPmtleXdvcmQ7Ci0JCQkJCXZhbHVlc1tpXSA9IGNvbm5fb3B0 LT52YWw7Ci0JCQkJCWkrKzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlrZXl3 b3JkcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKmtleXdvcmRzKSk7Ci0J CQl2YWx1ZXMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCp2YWx1ZXMpKTsK LQkJfQotCi0JCWlmIChwZ2hvc3QpCi0JCXsKLQkJCWtleXdvcmRzW2ldID0gImhvc3QiOwotCQkJ dmFsdWVzW2ldID0gcGdob3N0OwotCQkJaSsrOwotCQl9Ci0JCWlmIChwZ3BvcnQpCi0JCXsKLQkJ CWtleXdvcmRzW2ldID0gInBvcnQiOwotCQkJdmFsdWVzW2ldID0gcGdwb3J0OwotCQkJaSsrOwot CQl9Ci0JCWlmIChwZ3VzZXIpCi0JCXsKLQkJCWtleXdvcmRzW2ldID0gInVzZXIiOwotCQkJdmFs dWVzW2ldID0gcGd1c2VyOwotCQkJaSsrOwotCQl9Ci0JCWlmIChwYXNzd29yZCkKLQkJewotCQkJ a2V5d29yZHNbaV0gPSAicGFzc3dvcmQiOwotCQkJdmFsdWVzW2ldID0gcGFzc3dvcmQ7Ci0JCQlp Kys7Ci0JCX0KLQkJaWYgKGRibmFtZSkKLQkJewotCQkJa2V5d29yZHNbaV0gPSAiZGJuYW1lIjsK LQkJCXZhbHVlc1tpXSA9IGRibmFtZTsKLQkJCWkrKzsKLQkJfQotCQlrZXl3b3Jkc1tpXSA9ICJm YWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIjsKLQkJdmFsdWVzW2ldID0gcHJvZ25hbWU7Ci0JCWkr KzsKLQotCQluZXdfcGFzcyA9IGZhbHNlOwotCQljb25uID0gUFFjb25uZWN0ZGJQYXJhbXMoa2V5 d29yZHMsIHZhbHVlcywgdHJ1ZSk7Ci0KLQkJaWYgKCFjb25uKQotCQkJcGdfZmF0YWwoImNvdWxk IG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIGRibmFtZSk7Ci0KLQkJaWYgKFBRc3Rh dHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEICYmCi0JCQlQUWNvbm5lY3Rpb25OZWVkc1Bhc3N3 b3JkKGNvbm4pICYmCi0JCQkhcGFzc3dvcmQgJiYKLQkJCXByb21wdF9wYXNzd29yZCAhPSBUUklf Tk8pCi0JCXsKLQkJCVBRZmluaXNoKGNvbm4pOwotCQkJcGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0 KCJQYXNzd29yZDogIiwgZmFsc2UpOwotCQkJbmV3X3Bhc3MgPSB0cnVlOwotCQl9Ci0JfSB3aGls ZSAobmV3X3Bhc3MpOwotCi0JLyogY2hlY2sgdG8gc2VlIHRoYXQgdGhlIGJhY2tlbmQgY29ubmVj dGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IG1hZGUgKi8KLQlpZiAoUFFzdGF0dXMoY29ubikgPT0gQ09O TkVDVElPTl9CQUQpCi0JewotCQlpZiAoZmFpbF9vbl9lcnJvcikKLQkJCXBnX2ZhdGFsKCIlcyIs IFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKLQkJZWxzZQotCQl7Ci0JCQlQUWZpbmlzaChjb25uKTsK LQotCQkJZnJlZShrZXl3b3Jkcyk7Ci0JCQlmcmVlKHZhbHVlcyk7Ci0JCQlQUWNvbm5pbmZvRnJl ZShjb25uX29wdHMpOwotCi0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCX0KLQotCS8qCi0JICogT2ss IGNvbm5lY3RlZCBzdWNjZXNzZnVsbHkuIFJlbWVtYmVyIHRoZSBvcHRpb25zIHVzZWQsIGluIHRo ZSBmb3JtIG9mIGEKLQkgKiBjb25uZWN0aW9uIHN0cmluZy4KLQkgKi8KLQljb25uc3RyID0gY29u c3RydWN0Q29ublN0cihrZXl3b3JkcywgdmFsdWVzKTsKLQotCWZyZWUoa2V5d29yZHMpOwotCWZy ZWUodmFsdWVzKTsKLQlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOwotCi0JLyogQ2hlY2sgdmVy c2lvbiAqLwotCXJlbW90ZXZlcnNpb25fc3RyID0gUFFwYXJhbWV0ZXJTdGF0dXMoY29ubiwgInNl cnZlcl92ZXJzaW9uIik7Ci0JaWYgKCFyZW1vdGV2ZXJzaW9uX3N0cikKLQkJcGdfZmF0YWwoImNv dWxkIG5vdCBnZXQgc2VydmVyIHZlcnNpb24iKTsKLQlzZXJ2ZXJfdmVyc2lvbiA9IFBRc2VydmVy VmVyc2lvbihjb25uKTsKLQlpZiAoc2VydmVyX3ZlcnNpb24gPT0gMCkKLQkJcGdfZmF0YWwoImNv dWxkIG5vdCBwYXJzZSBzZXJ2ZXIgdmVyc2lvbiBcIiVzXCIiLAotCQkJCSByZW1vdGV2ZXJzaW9u X3N0cik7Ci0KLQlteV92ZXJzaW9uID0gUEdfVkVSU0lPTl9OVU07Ci0KLQkvKgotCSAqIFdlIGFs bG93IHRoZSBzZXJ2ZXIgdG8gYmUgYmFjayB0byA5LjIsIGFuZCB1cCB0byBhbnkgbWlub3IgcmVs ZWFzZSBvZgotCSAqIG91ciBvd24gbWFqb3IgdmVyc2lvbi4gIChTZWUgYWxzbyB2ZXJzaW9uIGNo ZWNrIGluIHBnX2R1bXAuYy4pCi0JICovCi0JaWYgKG15X3ZlcnNpb24gIT0gc2VydmVyX3ZlcnNp b24KLQkJJiYgKHNlcnZlcl92ZXJzaW9uIDwgOTAyMDAgfHwKLQkJCShzZXJ2ZXJfdmVyc2lvbiAv IDEwMCkgPiAobXlfdmVyc2lvbiAvIDEwMCkpKQotCXsKLQkJcGdfbG9nX2Vycm9yKCJhYm9ydGlu ZyBiZWNhdXNlIG9mIHNlcnZlciB2ZXJzaW9uIG1pc21hdGNoIik7Ci0JCXBnX2xvZ19lcnJvcl9k ZXRhaWwoInNlcnZlciB2ZXJzaW9uOiAlczsgJXMgdmVyc2lvbjogJXMiLAotCQkJCQkJCXJlbW90 ZXZlcnNpb25fc3RyLCBwcm9nbmFtZSwgUEdfVkVSU0lPTik7Ci0JCWV4aXRfbmljZWx5KDEpOwot CX0KLQotCVBRY2xlYXIoZXhlY3V0ZVF1ZXJ5KGNvbm4sIEFMV0FZU19TRUNVUkVfU0VBUkNIX1BB VEhfU1FMKSk7Ci0KLQlyZXR1cm4gY29ubjsKLX0KLQotLyogLS0tLS0tLS0tLQotICogQ29uc3Ry dWN0IGEgY29ubmVjdGlvbiBzdHJpbmcgZnJvbSB0aGUgZ2l2ZW4ga2V5d29yZC92YWx1ZSBwYWly cy4gSXQgaXMKLSAqIHVzZWQgdG8gcGFzcyB0aGUgY29ubmVjdGlvbiBvcHRpb25zIHRvIHRoZSBw Z19kdW1wIHN1YnByb2Nlc3MuCi0gKgotICogVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBl eGNsdWRlZDoKLSAqCWRibmFtZQkJLSB2YXJpZXMgaW4gZWFjaCBwZ19kdW1wIGludm9jYXRpb24K LSAqCXBhc3N3b3JkCS0gaXQncyBub3Qgc2VjdXJlIHRvIHBhc3MgYSBwYXNzd29yZCBvbiB0aGUg Y29tbWFuZCBsaW5lCi0gKglmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIC0gd2UnbGwgbGV0IHBn X2R1bXAgc2V0IGl0Ci0gKiAtLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyBjaGFyICoKLWNvbnN0cnVj dENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBjb25zdCBjaGFyICoqdmFsdWVzKQotewot CVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7Ci0JY2hhcgkgICAqY29ubnN0 cjsKLQlpbnQJCQlpOwotCWJvb2wJCWZpcnN0a2V5d29yZCA9IHRydWU7Ci0KLQkvKiBDb25zdHJ1 Y3QgYSBuZXcgY29ubmVjdGlvbiBzdHJpbmcgaW4ga2V5PSd2YWx1ZScgZm9ybWF0LiAqLwotCWZv ciAoaSA9IDA7IGtleXdvcmRzW2ldICE9IE5VTEw7IGkrKykKLQl7Ci0JCWlmIChzdHJjbXAoa2V5 d29yZHNbaV0sICJkYm5hbWUiKSA9PSAwIHx8Ci0JCQlzdHJjbXAoa2V5d29yZHNbaV0sICJwYXNz d29yZCIpID09IDAgfHwKLQkJCXN0cmNtcChrZXl3b3Jkc1tpXSwgImZhbGxiYWNrX2FwcGxpY2F0 aW9uX25hbWUiKSA9PSAwKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFmaXJzdGtleXdvcmQpCi0J CQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoYnVmLCAnICcpOwotCQlmaXJzdGtleXdvcmQgPSBmYWxz ZTsKLQkJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAiJXM9Iiwga2V5d29yZHNbaV0pOwotCQlhcHBl bmRDb25uU3RyVmFsKGJ1ZiwgdmFsdWVzW2ldKTsKLQl9Ci0KLQljb25uc3RyID0gcGdfc3RyZHVw KGJ1Zi0+ZGF0YSk7Ci0JZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7Ci0JcmV0dXJuIGNvbm5zdHI7 Ci19Ci0KLS8qCi0gKiBSdW4gYSBxdWVyeSwgcmV0dXJuIHRoZSByZXN1bHRzLCBleGl0IHByb2dy YW0gb24gZmFpbHVyZS4KLSAqLwotc3RhdGljIFBHcmVzdWx0ICoKLWV4ZWN1dGVRdWVyeShQR2Nv bm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KQotewotCVBHcmVzdWx0ICAgKnJlczsKLQotCXBn X2xvZ19pbmZvKCJleGVjdXRpbmcgJXMiLCBxdWVyeSk7Ci0KLQlyZXMgPSBQUWV4ZWMoY29ubiwg cXVlcnkpOwotCWlmICghcmVzIHx8Ci0JCVBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQ TEVTX09LKQotCXsKLQkJcGdfbG9nX2Vycm9yKCJxdWVyeSBmYWlsZWQ6ICVzIiwgUFFlcnJvck1l c3NhZ2UoY29ubikpOwotCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJRdWVyeSB3YXM6ICVzIiwgcXVl cnkpOwotCQlQUWZpbmlzaChjb25uKTsKLQkJZXhpdF9uaWNlbHkoMSk7Ci0JfQotCi0JcmV0dXJu IHJlczsKLX0KLQogLyoKICAqIEFzIGFib3ZlIGZvciBhIFNRTCBjb21tYW5kICh3aGljaCByZXR1 cm5zIG5vdGhpbmcpLgogICovCi0tIAoyLjM5LjMKCg== --00000000000010d1f5062f9b2bba--