Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w6y19-004pRo-1k for pgsql-hackers@arkaria.postgresql.org; Sun, 29 Mar 2026 21:49:59 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w6y17-00HLbW-1l for pgsql-hackers@arkaria.postgresql.org; Sun, 29 Mar 2026 21:49:57 +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.96) (envelope-from ) id 1w6y16-00HLbN-2d for pgsql-hackers@lists.postgresql.org; Sun, 29 Mar 2026 21:49:57 +0000 Received: from mail-qt1-x831.google.com ([2607:f8b0:4864:20::831]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w6y15-00000001hko-1Cmo for pgsql-hackers@lists.postgresql.org; Sun, 29 Mar 2026 21:49:56 +0000 Received: by mail-qt1-x831.google.com with SMTP id d75a77b69052e-509062d829dso770741cf.1 for ; Sun, 29 Mar 2026 14:49:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774820994; cv=none; d=google.com; s=arc-20240605; b=O5JNikz1PtMRdd7+wxCq2HcP7QGXE0TQTpckfwBtTGQTdZ4acgaU0c9aPuFk3pXLOp o7f9afzIOYFuHPweH2YdfnltYhVweG4mjia5hVjx3FbOmcjyBVlG8jcMKfGqNqdCiRum Lp6ZgiKQWAlsVc6voQ05DI/Um8IssS75TGMEq09z4rovStwfHIt407mBipInX/9tNDXL wV5AyClf9hucInJ0jYvZbinhSB8WH8g9nCb57NePbGOKY4ug2zR8FdwOlc33sh26niv2 ili3ruYvHNcMADxbcFKLLsi0p1d8Fl3sccCVIngnXkvb/4N/aDab9GOGWxH0sZy7CHqg oS2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=Yb/7AjTt7XiYr6MBMElZYhxGdpZujdqckR4Xd7M65ho=; fh=d1lH0Bi2hjInLMJ6oI+ETIjvrstdFUxX1SS1zxGkKDk=; b=jCqdStCUw2b1xyX9BUlA5xlRNb6QafaucdKfgvfDvUt9Swodeglw1N+1AJs4324w+x TNi+X8P4pgrWWDq/mQ+1gonfgRqiXHcTXYo3u9aja3g1zoxXkPqJejj2bnGn1rS/Hh1M iDy1tomVu8jU8GjKV14UP2Zo7GdPTxR34Sut+gcvOOAhKT4crFcob2hwHCpNcb/o4Hpj vFrKFoRk1NC13c+/Sj5t0N4jR0Bofmo72Vqwn0Tgm1sFkfr4NfD6vnCoAnXB6Fzw6V+u cU2al6TaLeiFaZFRJ3FbmZm7XmfIgl7UNhpZeroTiitMUrddmq+dd5pPxB6H44ME2WC7 k4cg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1774820994; x=1775425794; 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=Yb/7AjTt7XiYr6MBMElZYhxGdpZujdqckR4Xd7M65ho=; b=CWmJDYt0JKSJSeTCJ/nOGYB4dz1q3uLI33ZYL5xiSY11z+mJUaamRFVrkvj7ZbWznp EIS9Tpq6SNXWuTOa5jEDZNk4EQnrCpE3l2YTkLVgQnIZFJM/ZxqVAIEpsLnbRWBQKBT/ vJEL2hJbj8nal4+XsgZrp1u52EzCl5MyJlXb2/YN1f0/YDY1barNaVEUlXMqW8L2b2yo F6HTVvtuexD5YsdJPHQTdTf+SvvWL+iuqUCv6OTMGnIzAFJ14Frn6png1t/O0sTtINgp dGFUNyCZS7gXcEumN5jL7j38kuAwOK027ArX8s3/Uvewhd/VVcCnGHbJsKgw6N5cLBy6 9jQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774820994; x=1775425794; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Yb/7AjTt7XiYr6MBMElZYhxGdpZujdqckR4Xd7M65ho=; b=X5IqyiarcncBMJ+WqmwAN+qS3Y+zfQX+4hpmXKk8dZ2DvcAk9UkLDrMs/dPAh/xu+p r0xD8zg7yN3bsKqdW+KhZHiTyPnNHN1SqooranL6nuOaYbdWDDv0nrQJ+SxNLCSukDvw Z77oPU2JzbHa6sfijQSQ4Pj6J7iCreqrglbbP7J2rIjrGhyVPGhReUBgW3l1MFuuSu0i keLIJPrZP2ajqFvSwTsQpjI7GemHq2wP0aeRC0qL2YR6lCE5xPIrZIJU0CqFlnm5XUN0 FMHhQEyug9OAE8e5bfEtE13jxlK3QAkvpTYjZDVbAKAnOGD2/qUoMBU7Per2qJu8H4qe Q9RA== X-Forwarded-Encrypted: i=1; AJvYcCWaCcJoE9C036Yy1AvTNlhQ93X17nEooGKT+cXyJEuqDFRHP0fiUMDPqNk2ijBv3t+4CT35JJBF02nxZkD8@lists.postgresql.org X-Gm-Message-State: AOJu0Yzqt8d2ZdLnIshaQpS5tr0Fs4ZtJiiDPGeHh1Ny7oGePFD74FDZ fpxhbaKnLBX6EYzFwuUK+fg5uVJGO9Jm4xBtJzU0KxDAX0F5eoc7eut2/kSkDan57sNroUOcsl4 JSSfYIVbjxJ5SeX5IDcx+MI0toYEs5c/rzAayUh2n X-Gm-Gg: ATEYQzyh21Eb1DrUCqfjd6udvy3bu4kGPoM9Mx5G3mS0dOgyRxHXqKOAvpS+v7McBcU fBCjBdbUhtnoHifGxzol7Vd42NhQ6M3e0OpOr42f3Ej1vSNZ71C/rre9Urw3/C4NJvuBkbPoSZ/ VgtY5K0qVrumdu4fh/bs4HLZh11/rgQY/XS5j5Z/cwojDXGbxQ4vUX3/Pzl8s0LWv+XjFfSqKZQ C5Xm437Wnbmj5jIOtRmplsbVDRKcW90zScDYnUbxsmflSUTiDx17ACA9VIC+vSg6iwkt6I0Yd+Y dHTfpGy6BKkgF4GnNLBalWmE9M3HyhDsGSMttZ8C X-Received: by 2002:ac8:45d2:0:b0:50b:beac:df1 with SMTP id d75a77b69052e-50bc4a9ad66mr6008951cf.16.1774820993457; Sun, 29 Mar 2026 14:49:53 -0700 (PDT) MIME-Version: 1.0 References: <69c7bad1.050a0220.346c9.c80cSMTPIN_ADDED_BROKEN@mx.google.com> In-Reply-To: From: Hannu Krosing Date: Sun, 29 Mar 2026 23:49:38 +0200 X-Gm-Features: AQROBzByayPohcSaixFk_et8rBngKWnmIZrtghoxaoOzhkMqxyu9zUtG6qqF26k Message-ID: Subject: Re: Patch: dumping tables data in multiple chunks in pg_dump To: Michael Banck Cc: David Rowley , Ashutosh Bapat , PostgreSQL Hackers , Nathan Bossart Content-Type: multipart/mixed; boundary="000000000000dbfeec064e30b687" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000dbfeec064e30b687 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Fixing a off-by-one error in copying over dependencies On Sat, Mar 28, 2026 at 4:33=E2=80=AFPM Hannu Krosing w= rote: > > The above > > "Or it can be almost 200 GB if the page has just pointers to 1GB TOAST it= ems." > > should read > > "Or it can be almost 200 GB *for a single page* if the page has just > pointers to 1GB TOAST items." > > > On Sat, Mar 28, 2026 at 4:32=E2=80=AFPM Hannu Krosing = wrote: > > > > The issue is that currently the value is given in "main table pages" > > and it would be somewhat deceptive, or at least confusing, to try to > > express this in any other unit. > > > > As I explained in the commit message: > > > > ---------8<-------------------8<-------------------8<---------------- > > This --max-table-segment-pages number specifically applies to main tabl= e > > pages which does not guarantee anything about output size. > > The output could be empty if there are no live tuples in the page range= . > > Or it can be almost 200 GB if the page has just pointers to 1GB TOAST i= tems. > > ---------8<-------------------8<-------------------8<---------------- > > > > And I can think of no cheap and reliable way to change that equation. > > > > I'll be very happy if you have any good ideas for either improving the > > flag name, or even propose a way to better estimate the resulting dump > > file size so we could give the chunk size in better units > > > > --- > > Hannu > > > > > > > > > > > > On Sat, Mar 28, 2026 at 12:26=E2=80=AFPM Michael Banck = wrote: > > > > > > Hi, > > > > > > On Tue, Jan 13, 2026 at 03:27:25PM +1300, David Rowley wrote: > > > > Perhaps --max-table-segment-pages is a better name than > > > > --huge-table-chunk-pages as it's quite subjective what the minimum > > > > number of pages required to make a table "huge". > > > > > > I'm not sure that's better - without looking at the documentation, > > > people might confuse segment here with the 1GB split of tables into > > > segments. As pg_dump is a very common and basic user tool, I don't th= ink > > > implementation details like pages/page sizes and blocks should be par= t > > > of its UX. > > > > > > Can't we just make it a storage size, like '10GB' and then rename it = to > > > --table-parallel-threshold or something? I agree it's bikeshedding, b= ut > > > I personally don't like either --max-table-segment-pages or > > > --huge-table-chunk-pages. > > > > > > > > > Michael --000000000000dbfeec064e30b687 Content-Type: application/x-patch; name="v15-0001-Add-max-table-segment-pages-option-to-pg.patch" Content-Disposition: attachment; filename="v15-0001-Add-max-table-segment-pages-option-to-pg.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mncakins0 RnJvbSBkOTQ0MmViNjQ3NmJhMjdlMGYzZGVlMDg1ZTQ4ZGUyZWZiYjQ0NWQ2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYW5udSBLcm9zaW5nIDxoYW5udWtAZ29vZ2xlLmNvbT4KRGF0 ZTogU2F0LCAyOCBNYXIgMjAyNiAxMTo1MzozOSArMDEwMApTdWJqZWN0OiBbUEFUQ0ggdjE0XSBT VUJKRUNUOiBBZGQgLS1tYXgtdGFibGUtc2VnbWVudC1wYWdlcyBvcHRpb24gdG8gcGdfZHVtcAog Zm9yIHBhcmFsbGVsIHRhYmxlIGR1bXBpbmcuCgpUaGlzIHBhdGNoIGludHJvZHVjZXMgdGhlIGFi aWxpdHkgdG8gc3BsaXQgbGFyZ2UgaGVhcCB0YWJsZXMgaW50byBzZWdtZW50cwpiYXNlZCBvbiBh IHNwZWNpZmllZCBudW1iZXIgb2YgcGFnZXMuIFRoZXNlIHNlZ21lbnRzIGNhbiB0aGVuIGJlIGR1 bXBlZCBpbgpwYXJhbGxlbCB1c2luZyB0aGUgZXhpc3Rpbmcgam9icyBpbmZyYXN0cnVjdHVyZSwg c2lnbmlmaWNhbnRseSByZWR1Y2luZwp0aGUgdGltZSByZXF1aXJlZCB0byBkdW1wIHZlcnkgbGFy Z2UgdGFibGVzLgoKVGhpcyAtLW1heC10YWJsZS1zZWdtZW50LXBhZ2VzIG51bWJlciBzcGVjaWZp Y2FsbHkgYXBwbGllcyB0byBtYWluIHRhYmxlCnBhZ2VzIHdoaWNoIGRvZXMgbm90IGd1YXJhbnRl ZSBhbnl0aGluZyBhYm91dCBvdXRwdXQgc2l6ZS4KVGhlIG91dHB1dCBjb3VsZCBiZSBlbXB0eSBp ZiB0aGVyZSBhcmUgbm8gbGl2ZSB0dXBsZXMgaW4gdGhlIHBhZ2UgcmFuZ2UuCk9yIGl0IGNhbiBi ZSBhbG1vc3QgMjAwIEdCIGlmIHRoZSBwYWdlIGhhcyBqdXN0IHBvaW50ZXJzIHRvIDFHQiBUT0FT VCBpdGVtcy4KClRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGN0aWQtYmFzZWQgcmFuZ2UgcXVlcmll cyAoZS5nLiwgV0hFUkUgY3RpZCA+PQonKHN0YXJ0UGFnZSwxKScgQU5EIGN0aWQgPCAnKGVuZFBh Z2UrMSwwKScpIHRvIGV4dHJhY3Qgc3BlY2lmaWMgY2h1bmtzIG9mCnRoZSByZWxhdGlvbi4KClRo aXMgaXMgb25seSBlZmZlY3RpdmVseSBzdXBwb3J0ZWQgZm9yIFBvc3RncmVTUUwgdmVyc2lvbiAx NCsgdGhvdWdoIGl0IGRvZXMKd29yayBpbmVmZmljaWVudGx5IG9uIGVhcmxpZXIgdmVyc2lvbnMK ClRoZSBwYXRjaCBvbmx5IHN1cHBvcnRzICJoZWFwIiBhY2Nlc3MgbWV0aG9kIGFzIG90aGVycyBt YXkgbm90IGV2ZW4gaGF2ZSB0aGUKY3RpZCBjb2x1bW4KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3Bn X2R1bXAuc2dtbCAgICAgICAgICAgICB8ICAyNCArKysKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXAuaCAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJj aGl2ZXIuYyAgICAgIHwgIDg0ICsrKysrKysrKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf YXJjaGl2ZXIuaCAgICAgIHwgIDEyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAg ICAgICAgICAgICB8IDE3NyArKysrKysrKysrKysrKysrKy0tLS0tCiBzcmMvYmluL3BnX2R1bXAv cGdfZHVtcC5oICAgICAgICAgICAgICAgICB8ICAyMiArKy0KIHNyYy9iaW4vcGdfZHVtcC90LzAw NF9wZ19kdW1wX3BhcmFsbGVsLnBsIHwgIDMxICsrKysKIHNyYy9mZV91dGlscy9vcHRpb25fdXRp bHMuYyAgICAgICAgICAgICAgIHwgIDU1ICsrKysrKysKIHNyYy9pbmNsdWRlL2ZlX3V0aWxzL29w dGlvbl91dGlscy5oICAgICAgIHwgICAzICsKIDkgZmlsZXMgY2hhbmdlZCwgMzY0IGluc2VydGlv bnMoKyksIDQ2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdf ZHVtcC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwKaW5kZXggN2Y1MzhlOTAx OTQuLjVmMDU2YmI0YWY2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbApAQCAtMTA2Niw2ICsxMDY2LDMw IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92 YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+ LS1tYXgtdGFibGUtc2VnbWVudC1wYWdlcz08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ bnBhZ2VzPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgPHBhcmE+CisgICAgICAgIER1bXAgZGF0YSBpbiBzZWdtZW50cyBiYXNlZCBvbiBudW1i ZXIgb2YgcGFnZXMgaW4gdGhlIG1haW4gcmVsYXRpb24uCisgICAgICAgIElmIHRoZSBudW1iZXIg b2YgZGF0YSBwYWdlcyBpbiB0aGUgcmVsYXRpb24gaXMgbW9yZSB0aGFuIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5ucGFnZXM8L3JlcGxhY2VhYmxlPiAKKyAgICAgICAgdGhlIGRhdGEg aXMgc3BsaXQgaW50byBzZWdtZW50cyBiYXNlZCBvbiB0aGF0IG51bWJlciBvZiBwYWdlcy4KKyAg ICAgICAgSW5kaXZpZHVhbCBzZWdtZW50cyBjYW4gYmUgZHVtcGVkIGluIHBhcmFsbGVsLgorICAg ICAgIDwvcGFyYT4KKworICAgICAgIDxub3RlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIFRo ZSBvcHRpb24gPG9wdGlvbj4tLW1heC10YWJsZS1zZWdtZW50LXBhZ2VzPC9vcHRpb24+IGlzIGFw cGxpZWQgdG8gb25seSBwYWdlcworICAgICAgICAgaW4gdGhlIG1haW4gaGVhcCBhbmQgaWYgdGhl IHRhYmxlIGhhcyBhIGxhcmdlIFRPQVNUZWQgcGFydCB0aGlzIGhhcyB0byBiZQorICAgICAgICAg dGFrZW4gaW50byBhY2NvdW50IHdoZW4gZGVjaWRpbmcgb24gdGhlIG51bWJlciBvZiBwYWdlcyB0 byB1c2UuCisgICAgICAgICBJbiB0aGUgZXh0cmVtZSBjYXNlIGEgc2luZ2xlIDhrQiBoZWFwIHBh Z2UgY2FuIGhhdmUgfjIwMCB0b2FzdCBwb2ludGVycyBlYWNoIAorICAgICAgICAgY29ycmVzcG9u ZGluZyB0byAxR0Igb2YgZGF0YS4gSWYgdGhpcyBkYXRhIGlzIGFsc28gbm9uLWNvbXByZXNzaWJs ZSB0aGVuIGEgCisgICAgICAgICBzaW5nbGUtcGFnZSBzZWdtZW50IGNhbiBkdW1wIGFzIDIwMEdC IGZpbGUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L25vdGU+CisKKyAgICAgIDwvbGlzdGl0 ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8 dGVybT48b3B0aW9uPi0tbm8tY29tbWVudHM8L29wdGlvbj48L3Rlcm0+CiAgICAgICA8bGlzdGl0 ZW0+CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggYi9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwLmgKaW5kZXggZmRhOTEyYmEwYTkuLjExODYzYTE5MTVmIDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29tbW9uL2ZpbGVfdXRpbHMu aCIKICNpbmNsdWRlICJmZV91dGlscy9zaW1wbGVfbGlzdC5oIgogI2luY2x1ZGUgImxpYnBxLWZl LmgiCisjaW5jbHVkZSAic3RvcmFnZS9ibG9jay5oIgogCiAKIHR5cGVkZWYgZW51bSB0cml2YWx1 ZQpAQCAtMTc5LDYgKzE4MCw3IEBAIHR5cGVkZWYgc3RydWN0IF9kdW1wT3B0aW9ucwogCWJvb2wJ CWFjbHNTa2lwOwogCWNvbnN0IGNoYXIgKmxvY2tXYWl0VGltZW91dDsKIAlpbnQJCQlkdW1wX2lu c2VydHM7CS8qIDAgPSBDT1BZLCBvdGhlcndpc2Ugcm93cyBwZXIgSU5TRVJUICovCisJQmxvY2tO dW1iZXIJbWF4X3RhYmxlX3NlZ21lbnRfcGFnZXM7IC8qIGNodW5rIHdoZW4gcmVscGFnZXMgaXMg YWJvdmUgdGhpcyAqLwogCiAJLyogZmxhZ3MgZm9yIHZhcmlvdXMgY29tbWFuZC1saW5lIGxvbmcg b3B0aW9ucyAqLwogCWludAkJCWRpc2FibGVfZG9sbGFyX3F1b3Rpbmc7CmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX2FyY2hpdmVyLmMKaW5kZXggMjcxYTJjM2U0ODEuLjM4NGFkZDA3MTNiIDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAi cGdfYmFja3VwX2FyY2hpdmVyLmgiCiAjaW5jbHVkZSAicGdfYmFja3VwX2RiLmgiCiAjaW5jbHVk ZSAicGdfYmFja3VwX3V0aWxzLmgiCisjaW5jbHVkZSAic3RvcmFnZS9ibG9jay5oIgogCiAjZGVm aW5lIFRFWFRfRFVNUF9IRUFERVIgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGR1bXBcbi0t XG5cbiIKICNkZWZpbmUgVEVYVF9EVU1QQUxMX0hFQURFUiAiLS1cbi0tIFBvc3RncmVTUUwgZGF0 YWJhc2UgY2x1c3RlciBkdW1wXG4tLVxuXG4iCkBAIC0xNTQsNiArMTU1LDcgQEAgSW5pdER1bXBP cHRpb25zKER1bXBPcHRpb25zICpvcHRzKQogCW9wdHMtPmR1bXBTY2hlbWEgPSB0cnVlOwogCW9w dHMtPmR1bXBEYXRhID0gdHJ1ZTsKIAlvcHRzLT5kdW1wU3RhdGlzdGljcyA9IGZhbHNlOworCW9w dHMtPm1heF90YWJsZV9zZWdtZW50X3BhZ2VzID0gSW52YWxpZEJsb2NrTnVtYmVyOwogfQogCiAv KgpAQCAtMTk5NSw2ICsxOTk3LDI4IEBAIF9tb3ZlQmVmb3JlKFRvY0VudHJ5ICpwb3MsIFRvY0Vu dHJ5ICp0ZSkKIAlwb3MtPnByZXYgPSB0ZTsKIH0KIAorLyoKKyAqIEFkZCBhIGRlcGVuZGVuY3kg aWQgdG8gYSBEZXBlbmRlbmN5TGlzdCBvYmplY3QKKyAqIFRoaXMgaXMgY3VycmVudGx5IHVzZWQg Zm9yIGNvbGxlY3RpbmcgcmV2ZXJzZSAKKyAqIGRlcGVuZGVuY2llcyBmb3IgY2h1bmtlZCBkYXRh IGR1bXAgCisgKgorICogTm90ZTogZHVwbGljYXRlIGRlcGVuZGVuY2llcyBhcmUgY3VycmVudGx5 IG5vdCBlbGltaW5hdGVkCisgKi8KK3ZvaWQKK2FkZFN0YW5kYWxvbmVEZXBlbmRlbmN5KERlcGVu ZGVuY3lMaXN0ICpkb2JqLCBEdW1wSWQgcmVmSWQpCit7CisJcGdfbG9nX3dhcm5pbmcoIkFkZGlu ZyBkZXA6IGxpc3QgJXAgKyBkZXAgJXUiLCAodm9pZCAqKSBkb2JqLT5kZXBlbmRlbmNpZXMsIHJl ZklkKTsKKwlpZiAoZG9iai0+bkRlcHMgPj0gZG9iai0+YWxsb2NEZXBzKQorCXsKKwkJZG9iai0+ YWxsb2NEZXBzID0gKGRvYmotPmFsbG9jRGVwcyA8PSAwKSA/IDE2IDogZG9iai0+YWxsb2NEZXBz ICogMjsKKwkJZG9iai0+ZGVwZW5kZW5jaWVzID0gcGdfcmVhbGxvY19hcnJheShkb2JqLT5kZXBl bmRlbmNpZXMsCisJCQkJCQkJCQkJCSAgRHVtcElkLCBkb2JqLT5hbGxvY0RlcHMpOworCQlwZ19s b2dfd2FybmluZygiUmVhbGxvY2VkIGxpc3QgJXAgdG8gc2l6ZSAlZCIsICh2b2lkICopIGRvYmot PmRlcGVuZGVuY2llcywgZG9iai0+YWxsb2NEZXBzKTsKKwl9CisJcGdfbG9nX3dhcm5pbmcoIkFk ZGVkIGRlcDogbGlzdCAlcCArIGRlcCAldSIsICh2b2lkICopIGRvYmotPmRlcGVuZGVuY2llcywg cmVmSWQpOworCWRvYmotPmRlcGVuZGVuY2llc1tkb2JqLT5uRGVwcysrXSA9IHJlZklkOworfQor CiAvKgogICogQnVpbGQgaW5kZXggYXJyYXlzIGZvciB0aGUgVE9DIGxpc3QKICAqCkBAIC0yMDE0 LDYgKzIwMzgsNyBAQCBidWlsZFRvY0VudHJ5QXJyYXlzKEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJ QUgtPnRvY3NCeUR1bXBJZCA9IHBnX21hbGxvYzBfYXJyYXkoVG9jRW50cnkgKiwgKG1heER1bXBJ ZCArIDEpKTsKIAlBSC0+dGFibGVEYXRhSWQgPSBwZ19tYWxsb2MwX2FycmF5KER1bXBJZCwgKG1h eER1bXBJZCArIDEpKTsKKwlBSC0+dGFibGVEYXRhQ2h1bmtJZHMgPSBwZ19tYWxsb2MwX2FycmF5 KERlcGVuZGVuY3lMaXN0LCAobWF4RHVtcElkICsgMSkpOwogCiAJZm9yICh0ZSA9IEFILT50b2Mt Pm5leHQ7IHRlICE9IEFILT50b2M7IHRlID0gdGUtPm5leHQpCiAJewpAQCAtMjAyOSw4ICsyMDU0 LDEyIEBAIGJ1aWxkVG9jRW50cnlBcnJheXMoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCSAqIFRPQyBl bnRyeSB0aGF0IGhhcyBhIERBVEEgaXRlbS4gIFdlIGNvbXB1dGUgdGhpcyBieSByZXZlcnNpbmcg dGhlCiAJCSAqIFRBQkxFIERBVEEgaXRlbSdzIGRlcGVuZGVuY3ksIGtub3dpbmcgdGhhdCBhIFRB QkxFIERBVEEgaXRlbSBoYXMKIAkJICoganVzdCBvbmUgZGVwZW5kZW5jeSBhbmQgaXQgaXMgdGhl IFRBQkxFIGl0ZW0uCisJCSAqCisJCSAqIEZvciBjaHVua2VkIHRhYmxlIGRhdGEsIHRoZSBUQUJM RSBEQVRBIGl0ZW0gaGFzIGEgZGVzY3JpcHRpb24gbGlrZQorCQkgKiAiVEFCTEUgREFUQSAocGFn ZXMgMTAwOjE5OSkiLCBhbmQgd2UgY29sbGVjdCBhbGwgc3VjaCBpdGVtcyBhcworCQkgKiByZXZl cnNlIGRlcGVuZGVuY2llcyBmb3IgdGhlIHBhcmVudCB0YWJsZSdzIGVudHJ5IGluIHRhYmxlRGF0 YUNodW5rSWRzLgogCQkgKi8KLQkJaWYgKHN0cmNtcCh0ZS0+ZGVzYywgIlRBQkxFIERBVEEiKSA9 PSAwICYmIHRlLT5uRGVwcyA+IDApCisJCWlmIChzdHJuY21wKHRlLT5kZXNjLCAiVEFCTEUgREFU QSIsIDEwKSA9PSAwICYmIHRlLT5uRGVwcyA+IDApCiAJCXsKIAkJCUR1bXBJZAkJdGFibGVJZCA9 IHRlLT5kZXBlbmRlbmNpZXNbMF07CiAKQEAgLTIwNDIsNyArMjA3MSwxNCBAQCBidWlsZFRvY0Vu dHJ5QXJyYXlzKEFyY2hpdmVIYW5kbGUgKkFIKQogCQkJaWYgKHRhYmxlSWQgPD0gMCB8fCB0YWJs ZUlkID4gbWF4RHVtcElkKQogCQkJCXBnX2ZhdGFsKCJiYWQgdGFibGUgZHVtcElkIGZvciBUQUJM RSBEQVRBIGl0ZW0iKTsKIAotCQkJQUgtPnRhYmxlRGF0YUlkW3RhYmxlSWRdID0gdGUtPmR1bXBJ ZDsKKwkJCWlmICh0ZS0+ZGVzY1sxMF0gPT0gJ1wwJykgLyogdGUtPmRlc2MgPT0gIlRBQkxFIERB VEEiICovCisJCQkJQUgtPnRhYmxlRGF0YUlkW3RhYmxlSWRdID0gdGUtPmR1bXBJZDsKKwkJCWVs c2UKKwkJCXsKKwkJCQkvKiBDaHVua2VkIHRhYmxlIGRhdGEsIHRoZSBkZXNjcmlwdGlvbiBpcyAi VEFCTEUgREFUQSAocGFnZXMgJXU6JXUpIiAqLworCQkJCWFkZFN0YW5kYWxvbmVEZXBlbmRlbmN5 KCYoQUgtPnRhYmxlRGF0YUNodW5rSWRzW3RhYmxlSWRdKSwgdGUtPmR1bXBJZCk7CisJCQkJcGdf bG9nX2RlYnVnKCJBZGRlZCBjaHVua2VkIHRhYmxlIGRhdGEgZGVwZW5kZW5jeTogdGFibGVJZCAl dSArIGNodW5rSWQgJXUiLAorCQkJCQkJCSB0YWJsZUlkLCB0ZS0+ZHVtcElkKTt9CiAJCX0KIAl9 CiB9CkBAIC01MDE3LDYgKzUwNTMsMTIgQEAgZml4X2RlcGVuZGVuY2llcyhBcmNoaXZlSGFuZGxl ICpBSCkKICAqIHRoYXQgcGFyYWxsZWwgcmVzdG9yZSB3aWxsIHByaW9yaXRpemUgbGFyZ2VyIGpv YnMgKGluZGV4IGJ1aWxkcywgRksKICAqIGNvbnN0cmFpbnQgY2hlY2tzLCBldGMpIG92ZXIgc21h bGxlciBvbmVzLCBhdm9pZGluZyBzaXR1YXRpb25zIHdoZXJlIHdlCiAgKiBlbmQgYSByZXN0b3Jl IHdpdGggb25seSBvbmUgYWN0aXZlIGpvYiB3b3JraW5nIG9uIGEgbGFyZ2UgdGFibGUuCisgKgor ICogSW4gY2FzZSBvZiBjaHVua2VkIGR1bXBzLCB3ZSBjaGFuZ2UgdGhlIGRlcGVuZW5jeSBvbiB0 YWJsZSB3aXRoIGRlcGVkZW5jeQorICogb24gdGhlIGZpcnN0IGNodW5rIG9mIGRhdGEgYW5kIGFk ZCB0aGUgcmVtYWluZ2kgY2h1bmsgaWRzLCBpZiBhbnksIHRvIHRoZSAKKyAqIGVuZCBvZiBkZXBl bmNlbmN5IGxpc3QKKyAqIHdlIGFsc28gY2FsY3VsYXRlIHRoZSBmdWxsRGF0YUxlbmd0aCBhcyB0 aGUgc3VtIG9mIHRoZSBsZW5ndGhzIG9mIGNodW5rCisgKiBkYXRhIGl0ZW1zIGFuZCB1c2UgdGhh dCB0byBzZXQgdGhlIGl0ZW0ncyBkYXRhTGVuZ3RoLgogICovCiBzdGF0aWMgdm9pZAogcmVwb2lu dF90YWJsZV9kZXBlbmRlbmNpZXMoQXJjaGl2ZUhhbmRsZSAqQUgpCkBAIC01MDMyLDggKzUwNzQs OSBAQCByZXBvaW50X3RhYmxlX2RlcGVuZGVuY2llcyhBcmNoaXZlSGFuZGxlICpBSCkKIAkJZm9y IChpID0gMDsgaSA8IHRlLT5uRGVwczsgaSsrKQogCQl7CiAJCQlvbGRkZXAgPSB0ZS0+ZGVwZW5k ZW5jaWVzW2ldOwotCQkJaWYgKG9sZGRlcCA8PSBBSC0+bWF4RHVtcElkICYmCi0JCQkJQUgtPnRh YmxlRGF0YUlkW29sZGRlcF0gIT0gMCkKKwkJCWlmIChvbGRkZXAgPiBBSC0+bWF4RHVtcElkKQor CQkJCWNvbnRpbnVlOworCQkJaWYgKEFILT50YWJsZURhdGFJZFtvbGRkZXBdICE9IDApCiAJCQl7 CiAJCQkJRHVtcElkCQl0YWJsZWRhdGFpZCA9IEFILT50YWJsZURhdGFJZFtvbGRkZXBdOwogCQkJ CVRvY0VudHJ5ICAgKnRhYmxlZGF0YXRlID0gQUgtPnRvY3NCeUR1bXBJZFt0YWJsZWRhdGFpZF07 CkBAIC01MDQzLDYgKzUwODYsMzkgQEAgcmVwb2ludF90YWJsZV9kZXBlbmRlbmNpZXMoQXJjaGl2 ZUhhbmRsZSAqQUgpCiAJCQkJcGdfbG9nX2RlYnVnKCJ0cmFuc2ZlcnJpbmcgZGVwZW5kZW5jeSAl ZCAtPiAlZCB0byAlZCIsCiAJCQkJCQkJIHRlLT5kdW1wSWQsIG9sZGRlcCwgdGFibGVkYXRhaWQp OwogCQkJfQorCQkJZWxzZSBpZiAoQUgtPnRhYmxlRGF0YUNodW5rSWRzW29sZGRlcF0ubkRlcHMg PiAwKQorCQkJeworCQkJCWludAkJCWo7CisJCQkJRHVtcElkCQljaHVua2RhdGFpZDsKKwkJCQl1 aW50NjQJCWZ1bGxEYXRhTGVuZ3RoOworCQkJCURlcGVuZGVuY3lMaXN0ICpkZXBsaXN0ID0gJkFI LT50YWJsZURhdGFDaHVua0lkc1tvbGRkZXBdOworCisJCQkJLyogZmlyc3QgaW4gbGlzdCByZXBs YWNlcyB0aGUgZGVwZW5kZW5jeSBvbiB0YWJsZSAqLworCQkJCWNodW5rZGF0YWlkID0gZGVwbGlz dC0+ZGVwZW5kZW5jaWVzWzBdOworCQkJCXRlLT5kZXBlbmRlbmNpZXNbaV0gPSBjaHVua2RhdGFp ZDsKKwkJCQlmdWxsRGF0YUxlbmd0aCA9IEFILT50b2NzQnlEdW1wSWRbY2h1bmtkYXRhaWRdLT5k YXRhTGVuZ3RoOworCQkJCXBnX2xvZ19kZWJ1ZygidHJhbnNmZXJyaW5nIGNodW5rIGxpc3QgJWQg LT4gJWQgdG8gJWQiLAorCQkJCQkJCSB0ZS0+ZHVtcElkLCBvbGRkZXAsIGNodW5rZGF0YWlkKTsK KworCQkJCWlmIChkZXBsaXN0LT5uRGVwcyA+IDEpCisJCQkJeworCQkJCQkvKiBtYWtlIHNwYWNl ICovCisJCQkJCXRlLT5kZXBlbmRlbmNpZXMgPSBwZ19yZWFsbG9jX2FycmF5KHRlLT5kZXBlbmRl bmNpZXMsCisJCQkJCQkJCQkJCQkgIER1bXBJZCwKKwkJCQkJCQkJCQkJCSAgdGUtPm5EZXBzICsg ZGVwbGlzdC0+bkRlcHMgLSAxKTsKKworCQkJCQkvKiB0aGUgcmVzdCBhcmUgYXBwZW5kZWQgdG8g ZGVwZW5kZW5jaWVzICovCisJCQkJCWZvciAoaiA9IDE7IGogPCBkZXBsaXN0LT5uRGVwczsgaisr KQorCQkJCQl7CisJCQkJCQljaHVua2RhdGFpZCA9IGRlcGxpc3QtPmRlcGVuZGVuY2llc1tqXTsK KwkJCQkJCXRlLT5kZXBlbmRlbmNpZXNbdGUtPm5EZXBzKytdID0gY2h1bmtkYXRhaWQ7CisJCQkJ CQlmdWxsRGF0YUxlbmd0aCArPSBBSC0+dG9jc0J5RHVtcElkW2NodW5rZGF0YWlkXS0+ZGF0YUxl bmd0aDsKKwkJCQkJCXBnX2xvZ19kZWJ1ZygiYWRkaW5nIGNodW5rIGxpc3QgJWQgLT4gJWQgdG8g JWQiLAorCQkJCQkJCQkJdGUtPmR1bXBJZCwgb2xkZGVwLCBjaHVua2RhdGFpZCk7CisJCQkJCX0K KwkJCQl9CisJCQkJdGUtPmRhdGFMZW5ndGggPSBNYXgodGUtPmRhdGFMZW5ndGgsIGZ1bGxEYXRh TGVuZ3RoKTsKKwkJCX0KIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfYXJjaGl2ZXIuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu aAppbmRleCAzNjUwNzNiM2VhZS4uY2ZhM2VhMWJiZDYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2FyY2hpdmVyLmgKQEAgLTE3OSw2ICsxNzksMTMgQEAgdHlwZWRlZiBlbnVtCiAJT1VUUFVUX09U SEVSREFUQSwJCQkvKiB3cml0aW5nIGRhdGEgYXMgSU5TRVJUIGNvbW1hbmRzICovCiB9IEFyY2hp dmVyT3V0cHV0OwogCit0eXBlZGVmIHN0cnVjdCBfRGVwZW5kZW5jeUxpc3QKK3sKKwlEdW1wSWQJ ICAgKmRlcGVuZGVuY2llczsJLyogZHVtcElkcyBvZiBvYmplY3RzIHRoaXMgb25lIGRlcGVuZHMg b24gKi8KKwlpbnQJCQluRGVwczsJCQkvKiBudW1iZXIgb2YgdmFsaWQgZGVwZW5kZW5jaWVzICov CisJaW50CQkJYWxsb2NEZXBzOwkJLyogYWxsb2NhdGVkIHNpemUgb2YgZGVwZW5kZW5jaWVzW10g Ki8KK30gRGVwZW5kZW5jeUxpc3Q7CisKIC8qCiAgKiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBB Q0wgaXRlbXMgYXJlIGludGVyc3BlcnNlZCB3aXRoIGV2ZXJ5dGhpbmcgZWxzZSBpbgogICogYSBk dW1wIGZpbGUncyBUT0M7IHR5cGljYWxseSB0aGV5J3JlIHJpZ2h0IGFmdGVyIHRoZSBvYmplY3Qg dGhleSdyZSBmb3IuCkBAIC0zMTEsNiArMzE4LDcgQEAgc3RydWN0IF9hcmNoaXZlSGFuZGxlCiAJ LyogYXJyYXlzIGNyZWF0ZWQgYWZ0ZXIgdGhlIFRPQyBsaXN0IGlzIGNvbXBsZXRlOiAqLwogCXN0 cnVjdCBfdG9jRW50cnkgKip0b2NzQnlEdW1wSWQ7CS8qIFRPQ3MgaW5kZXhlZCBieSBkdW1wSWQg Ki8KIAlEdW1wSWQJICAgKnRhYmxlRGF0YUlkOwkvKiBUQUJMRSBEQVRBIGlkcywgaW5kZXhlZCBi eSB0YWJsZSBkdW1wSWQgKi8KKwlEZXBlbmRlbmN5TGlzdCAqdGFibGVEYXRhQ2h1bmtJZHM7IC8q IGRlcGVuZGVuY2llcyBpbmRleGVkIGJ5IGR1bXBJZCAqLwogCiAJc3RydWN0IF90b2NFbnRyeSAq Y3VyclRvYzsJLyogVXNlZCB3aGVuIGR1bXBpbmcgZGF0YSAqLwogCXBnX2NvbXByZXNzX3NwZWNp ZmljYXRpb24gY29tcHJlc3Npb25fc3BlYzsgLyogUmVxdWVzdGVkIHNwZWNpZmljYXRpb24gZm9y CkBAIC0zNzcsNyArMzg1LDcgQEAgc3RydWN0IF90b2NFbnRyeQogCXNpemVfdAkJZGVmbkxlbjsJ CS8qIGxlbmd0aCBvZiBkdW1wZWQgZGVmaW5pdGlvbiAqLwogCiAJLyogd29ya2luZyBzdGF0ZSB3 aGlsZSBkdW1waW5nL3Jlc3RvcmluZyAqLwotCXBnb2ZmX3QJCWRhdGFMZW5ndGg7CQkvKiBpdGVt J3MgZGF0YSBzaXplOyAwIGlmIG5vbmUgb3IgdW5rbm93biAqLworCXVpbnQ2NAkJZGF0YUxlbmd0 aDsJCS8qIGl0ZW0ncyBkYXRhIHNpemU7IDAgaWYgbm9uZSBvciB1bmtub3duICovCiAJaW50CQkJ cmVxczsJCQkvKiBkbyB3ZSBuZWVkIHNjaGVtYSBhbmQvb3IgZGF0YSBvZiBvYmplY3QKIAkJCQkJ CQkJICogKFJFUV8qIGJpdCBtYXNrKSAqLwogCWJvb2wJCWNyZWF0ZWQ7CQkvKiBzZXQgZm9yIERB VEEgbWVtYmVyIGlmIFRBQkxFIHdhcyBjcmVhdGVkICovCkBAIC00MzcsNiArNDQ1LDggQEAgZXh0 ZXJuIGludAlUb2NJRFJlcXVpcmVkKEFyY2hpdmVIYW5kbGUgKkFILCBEdW1wSWQgaWQpOwogVG9j RW50cnkgICAqZ2V0VG9jRW50cnlCeUR1bXBJZChBcmNoaXZlSGFuZGxlICpBSCwgRHVtcElkIGlk KTsKIGV4dGVybiBib29sIGNoZWNrU2VlayhGSUxFICpmcCk7CiAKK2V4dGVybiB2b2lkIGFkZFN0 YW5kYWxvbmVEZXBlbmRlbmN5KERlcGVuZGVuY3lMaXN0ICpkb2JqLCBEdW1wSWQgcmVmSWQpOwor CiAjZGVmaW5lIGFwcGVuZFN0cmluZ0xpdGVyYWxBSFgoYnVmLHN0cixBSCkgXAogCWFwcGVuZFN0 cmluZ0xpdGVyYWwoYnVmLCBzdHIsIChBSCktPnB1YmxpYy5lbmNvZGluZywgKEFIKS0+cHVibGlj LnN0ZF9zdHJpbmdzKQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCA1ZDFmNzY4MmYxMS4uMWU3ZDlhM2Y3ZjMg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXAuYwpAQCAtNTM1LDYgKzUzNSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogCQl7ImV4Y2x1ZGUtZXh0ZW5zaW9uIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDE3 fSwKIAkJeyJzZXF1ZW5jZS1kYXRhIiwgbm9fYXJndW1lbnQsICZkb3B0LnNlcXVlbmNlX2RhdGEs IDF9LAogCQl7InJlc3RyaWN0LWtleSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAyNX0sCisJ CXsibWF4LXRhYmxlLXNlZ21lbnQtcGFnZXMiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMjZ9 LAogCiAJCXtOVUxMLCAwLCBOVUxMLCAwfQogCX07CkBAIC03OTksNiArODAwLDEyIEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWRvcHQucmVzdHJpY3Rfa2V5ID0gcGdfc3RyZHVw KG9wdGFyZyk7CiAJCQkJYnJlYWs7CiAKKwkJCWNhc2UgMjY6CisJCQkJaWYgKCFvcHRpb25fcGFy c2VfdWludDMyKG9wdGFyZywgIi0tbWF4LXRhYmxlLXNlZ21lbnQtcGFnZXMiLCAxLCBNYXhCbG9j a051bWJlciwKKwkJCQkJCQkJCSAgJmRvcHQubWF4X3RhYmxlX3NlZ21lbnRfcGFnZXMpKQorCQkJ CQlleGl0X25pY2VseSgxKTsKKwkJCQlicmVhazsKKwogCQkJZGVmYXVsdDoKIAkJCQkvKiBnZXRv cHRfbG9uZyBhbHJlYWR5IGVtaXR0ZWQgYSBjb21wbGFpbnQgKi8KIAkJCQlwZ19sb2dfZXJyb3Jf aGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUp OwpAQCAtMTM0NCw2ICsxMzUxLDkgQEAgaGVscChjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmlu dGYoXygiICAtLWV4dHJhLWZsb2F0LWRpZ2l0cz1OVU0gICAgIG92ZXJyaWRlIGRlZmF1bHQgc2V0 dGluZyBmb3IgZXh0cmFfZmxvYXRfZGlnaXRzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1maWx0ZXI9 RklMRU5BTUUgICAgICAgICAgICBpbmNsdWRlIG9yIGV4Y2x1ZGUgb2JqZWN0cyBhbmQgZGF0YSBm cm9tIGR1bXBcbiIKIAkJCSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9u IGV4cHJlc3Npb25zIGluIEZJTEVOQU1FXG4iKSk7CisJcHJpbnRmKF8oIiAgLS1tYXgtdGFibGUt c2VnbWVudC1wYWdlcz1OVU1QQUdFU1xuIgorCQkgICAgICIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnVtYmVyIG9mIG1haW4gdGFibGUgcGFnZXMgYWJvdmUgd2hpY2ggZGF0YSBpcyBc biIKKwkJCSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZCBvdXQgaW4gY2h1 bmtzLCBhbHNvIGRldGVybWluZXMgdGhlIGNodW5rIHNpemVcbiIpKTsKIAlwcmludGYoXygiICAt LWlmLWV4aXN0cyAgICAgICAgICAgICAgICAgIHVzZSBJRiBFWElTVFMgd2hlbiBkcm9wcGluZyBv YmplY3RzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1pbmNsdWRlLWZvcmVpZ24tZGF0YT1QQVRURVJO XG4iCiAJCQkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIGRhdGEgb2Yg Zm9yZWlnbiB0YWJsZXMgb24gZm9yZWlnblxuIgpAQCAtMjM5Niw3ICsyNDA2LDcgQEAgZHVtcFRh YmxlRGF0YV9jb3B5KEFyY2hpdmUgKmZvdXQsIGNvbnN0IHZvaWQgKmRjb250ZXh0KQogCSAqIGR1 bXBpbmcgYW4gb2xkIHBnX2xhcmdlb2JqZWN0X21ldGFkYXRhIGRlZmluZWQgV0lUSCBPSURTLiAg Rm9yIG90aGVyCiAJICogY2FzZXMgYSBzaW1wbGUgQ09QWSBzdWZmaWNlcy4KIAkgKi8KLQlpZiAo dGRpbmZvLT5maWx0ZXJjb25kIHx8IHRiaW5mby0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05f VEFCTEUgfHwKKwlpZiAodGRpbmZvLT5maWx0ZXJjb25kIHx8IGlzX3NlZ21lbnQodGRpbmZvKSB8 fCB0YmluZm8tPnJlbGtpbmQgPT0gUkVMS0lORF9GT1JFSUdOX1RBQkxFIHx8CiAJCShmb3V0LT5k b3B0LT5iaW5hcnlfdXBncmFkZSAmJiBmb3V0LT5yZW1vdGVWZXJzaW9uIDwgMTIwMDAwICYmCiAJ CSB0YmluZm8tPmRvYmouY2F0SWQub2lkID09IExhcmdlT2JqZWN0TWV0YWRhdGFSZWxhdGlvbklk KSkKIAl7CkBAIC0yNDE0LDkgKzI0MjQsMzcgQEAgZHVtcFRhYmxlRGF0YV9jb3B5KEFyY2hpdmUg KmZvdXQsIGNvbnN0IHZvaWQgKmRjb250ZXh0KQogCQllbHNlCiAJCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cihxLCAiKiAiKTsKIAotCQlhcHBlbmRQUUV4cEJ1ZmZlcihxLCAiRlJPTSAlcyAlcykgVE8g c3Rkb3V0OyIsCisJCWFwcGVuZFBRRXhwQnVmZmVyKHEsICJGUk9NICVzICVzIiwKIAkJCQkJCSAg Zm10UXVhbGlmaWVkRHVtcGFibGUodGJpbmZvKSwKIAkJCQkJCSAgdGRpbmZvLT5maWx0ZXJjb25k ID8gdGRpbmZvLT5maWx0ZXJjb25kIDogIiIpOworCQkvKiBJZiBpdCdzIGEgc2VnbWVudCwgd2Ug bmVlZCB0byBhZGQgYSBmaWx0ZXIgY29uZGl0aW9uIHRvIHNlbGVjdCB0aGUKKwkJICogcmlnaHQg cGFnZSByYW5nZSAKKwkJICogLSBmb3IgZmlyc3Qgc2VnbWVudCB3ZSBhZGQgImN0aWQgPCAoZW5k UGFnZSsxLCAwKSIgCisJCSAqICAgZmlyc3Qgc2VnbWVudCBpcyB0aGUgb25lIHdpdGggc3RhcnRQ YWdlID09IDAKKwkJICogLSBmb3IgbGFzdCBzZWdtZW50IHdlIGFkZCAiY3RpZCA+PSAoc3RhcnRQ YWdlLCAxKSIKKwkJICogICBsYXN0IHNlZ21lbnQgaXMgdGhlIG9uZSB3aXRoIGVuZFBhZ2UgPT0g SW52YWxpZEJsb2NrTnVtYmVyCisJCSAqICAgd2UgbGVhdmUgdG8gdXBwZXIgYm91bmQgb3BlbiBm b3IgdGhlIGNhc2Ugd2hlcmUgbW9yZSBwYWdlcyAKKwkJICogICB3ZXJlIGFkZGVkIGFmdGVyIHdl IG1lYXN1cmVkIAorCQkgKiAtIGZvciBtaWRkbGUgc2VnbWVudHMgd2UgYWRkIAorCQkgKiAgICJj dGlkID49IChzdGFydFBhZ2UsIDEpIEFORCBjdGlkIDwgKGVuZFBhZ2UrMSwgMCkiCisJCSAqCisJ CSAqICJjdGlkIDwgKGVuZFBhZ2UrMSwgMCkiIGluc3RlYWQgb2YgImN0aWQgPD0gKGVuZFBhZ2Us IG1heHR1cGxlKSIKKwkJICogd2FzIGNob3NlbiBhcyByYW5nZSBlbmQgc28gdGhhdCB3ZSBkbyBu b3QgaGF2ZSB0byBlc3RpbWF0ZSB0aGUgbWF4dHVwbGUKKwkJICogCisJCSAqLworCQlpZiAoaXNf c2VnbWVudCh0ZGluZm8pKQorCQl7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxLCB0ZGluZm8t PmZpbHRlcmNvbmQ/IiBBTkQgIjoiIFdIRVJFICIpOworCQkJaWYodGRpbmZvLT5zdGFydFBhZ2Ug PT0gMCkKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxLCAiY3RpZCA8ICcoJXUsMCknIiwgdGRpbmZv LT5lbmRQYWdlKzEpOwkJCQorCQkJZWxzZSBpZih0ZGluZm8tPmVuZFBhZ2UgIT0gSW52YWxpZEJs b2NrTnVtYmVyKQorCQkJCWFwcGVuZFBRRXhwQnVmZmVyKHEsICJjdGlkID49ICcoJXUsMSknIEFO RCBjdGlkIDwgJygldSwwKSciLAorCQkJCQkJCQkgdGRpbmZvLT5zdGFydFBhZ2UsIHRkaW5mby0+ ZW5kUGFnZSsxKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxLCAiY3RpZCA+PSAn KCV1LDEpJyIsIHRkaW5mby0+c3RhcnRQYWdlKTsKKwkJfQorCisJCWFwcGVuZFBRRXhwQnVmZmVy KHEsICIpIFRPIHN0ZG91dDsiKTsKIAl9CiAJZWxzZQogCXsKQEAgLTI0MjQsNiArMjQ2MiwxMCBA QCBkdW1wVGFibGVEYXRhX2NvcHkoQXJjaGl2ZSAqZm91dCwgY29uc3Qgdm9pZCAqZGNvbnRleHQp CiAJCQkJCQkgIGZtdFF1YWxpZmllZER1bXBhYmxlKHRiaW5mbyksCiAJCQkJCQkgIGNvbHVtbl9s aXN0KTsKIAl9CisKKwlpZiAoaXNfc2VnbWVudCh0ZGluZm8pKQorCQlwZ19sb2dfZGVidWcoIkNI VU5LSU5HOiBkYXRhIHF1ZXJ5OiAlcyIsIHEtPmRhdGEpOworCQogCXJlcyA9IEV4ZWN1dGVTcWxR dWVyeShmb3V0LCBxLT5kYXRhLCBQR1JFU19DT1BZX09VVCk7CiAJUFFjbGVhcihyZXMpOwogCWRl c3Ryb3lQUUV4cEJ1ZmZlcihjbGlzdEJ1Zik7CkBAIC0yOTE5LDQyICsyOTYxLDg5IEBAIGR1bXBU YWJsZURhdGEoQXJjaGl2ZSAqZm91dCwgY29uc3QgVGFibGVEYXRhSW5mbyAqdGRpbmZvKQogCXsK IAkJVG9jRW50cnkgICAqdGU7CiAKLQkJdGUgPSBBcmNoaXZlRW50cnkoZm91dCwgdGRpbmZvLT5k b2JqLmNhdElkLCB0ZGluZm8tPmRvYmouZHVtcElkLAotCQkJCQkJICBBUkNISVZFX09QVFMoLnRh ZyA9IHRiaW5mby0+ZG9iai5uYW1lLAotCQkJCQkJCQkJICAgLm5hbWVzcGFjZSA9IHRiaW5mby0+ ZG9iai5uYW1lc3BhY2UtPmRvYmoubmFtZSwKLQkJCQkJCQkJCSAgIC5vd25lciA9IHRiaW5mby0+ cm9sbmFtZSwKLQkJCQkJCQkJCSAgIC5kZXNjcmlwdGlvbiA9ICJUQUJMRSBEQVRBIiwKLQkJCQkJ CQkJCSAgIC5zZWN0aW9uID0gU0VDVElPTl9EQVRBLAotCQkJCQkJCQkJICAgLmNyZWF0ZVN0bXQg PSB0ZERlZm4sCi0JCQkJCQkJCQkgICAuY29weVN0bXQgPSBjb3B5U3RtdCwKLQkJCQkJCQkJCSAg IC5kZXBzID0gJih0YmluZm8tPmRvYmouZHVtcElkKSwKLQkJCQkJCQkJCSAgIC5uRGVwcyA9IDEs Ci0JCQkJCQkJCQkgICAuZHVtcEZuID0gZHVtcEZuLAotCQkJCQkJCQkJICAgLmR1bXBBcmcgPSB0 ZGluZm8pKTsKLQotCQkvKgotCQkgKiBTZXQgdGhlIFRvY0VudHJ5J3MgZGF0YUxlbmd0aCBpbiBj YXNlIHdlIGFyZSBkb2luZyBhIHBhcmFsbGVsIGR1bXAKLQkJICogYW5kIHdhbnQgdG8gb3JkZXIg ZHVtcCBqb2JzIGJ5IHRhYmxlIHNpemUuICBXZSBjaG9vc2UgdG8gbWVhc3VyZQotCQkgKiBkYXRh TGVuZ3RoIGluIHRhYmxlIHBhZ2VzIChpbmNsdWRpbmcgVE9BU1QgcGFnZXMpIGR1cmluZyBkdW1w LCBzbwotCQkgKiBubyBzY2FsaW5nIGlzIG5lZWRlZC4KLQkJICoKLQkJICogSG93ZXZlciwgcmVs cGFnZXMgaXMgZGVjbGFyZWQgYXMgImludGVnZXIiIGluIHBnX2NsYXNzLCBhbmQgaGVuY2UKLQkJ ICogYWxzbyBpbiBUYWJsZUluZm8sIGJ1dCBpdCdzIHJlYWxseSBCbG9ja051bWJlciBhL2svYSB1 bnNpZ25lZCBpbnQuCi0JCSAqIENhc3Qgc28gdGhhdCB3ZSBnZXQgdGhlIHJpZ2h0IGludGVycHJl dGF0aW9uIG9mIHRhYmxlIHNpemVzCi0JCSAqIGV4Y2VlZGluZyBJTlRfTUFYIHBhZ2VzLgorCQkv KiBkYXRhIGNodW5raW5nIHdvcmtzIG9mZiByZWxwYWdlcywgd2hpY2ggYXJlIGNvbXB1dGVkIGV4 YWN0bHkgdXNpbmcKKwkJICogcGdfcmVsYXRpb25fc2l6ZSgpIHdoZW4gLS1tYXgtdGFibGUtc2Vn bWVudC1wYWdlcyB3YXMgc2V0CisJCSAqIAorCQkgKiBXZSBhbHNvIGRvbid0IGNodW5rIGlmIHRh YmxlIGFjY2VzcyBtZXRob2QgaXMgbm90ICJoZWFwIgorCQkgKiBUT0RPOiB3ZSBtYXkgYWRkIGNo dW5raW5nIGZvciBvdGhlciBhY2Nlc3MgbWV0aG9kcyBsYXRlciwgbWF5YmUgCisJCSAqIGJhc2Vk IG9uIHByaW1hcnkga2V5IHRyYW5nZXMKIAkJICovCi0JCXRlLT5kYXRhTGVuZ3RoID0gKEJsb2Nr TnVtYmVyKSB0YmluZm8tPnJlbHBhZ2VzOwotCQl0ZS0+ZGF0YUxlbmd0aCArPSAoQmxvY2tOdW1i ZXIpIHRiaW5mby0+dG9hc3RwYWdlczsKKwkJaWYgKHRiaW5mby0+cmVscGFnZXMgPD0gZG9wdC0+ bWF4X3RhYmxlX3NlZ21lbnRfcGFnZXMgfHwgCisJCQlzdHJjbXAodGJpbmZvLT5hbW5hbWUsICJo ZWFwIikgIT0gMCkKKwkJeworCQkJdGUgPSBBcmNoaXZlRW50cnkoZm91dCwgdGRpbmZvLT5kb2Jq LmNhdElkLCB0ZGluZm8tPmRvYmouZHVtcElkLAorCQkJCQkJCUFSQ0hJVkVfT1BUUygudGFnID0g dGJpbmZvLT5kb2JqLm5hbWUsCisJCQkJCQkJCQkJLm5hbWVzcGFjZSA9IHRiaW5mby0+ZG9iai5u YW1lc3BhY2UtPmRvYmoubmFtZSwKKwkJCQkJCQkJCQkub3duZXIgPSB0YmluZm8tPnJvbG5hbWUs CisJCQkJCQkJCQkJLmRlc2NyaXB0aW9uID0gIlRBQkxFIERBVEEiLAorCQkJCQkJCQkJCS5zZWN0 aW9uID0gU0VDVElPTl9EQVRBLAorCQkJCQkJCQkJCS5jcmVhdGVTdG10ID0gdGREZWZuLAorCQkJ CQkJCQkJCS5jb3B5U3RtdCA9IGNvcHlTdG10LAorCQkJCQkJCQkJCS5kZXBzID0gJih0YmluZm8t PmRvYmouZHVtcElkKSwKKwkJCQkJCQkJCQkubkRlcHMgPSAxLAorCQkJCQkJCQkJCS5kdW1wRm4g PSBkdW1wRm4sCisJCQkJCQkJCQkJLmR1bXBBcmcgPSB0ZGluZm8pKTsKIAotCQkvKgotCQkgKiBJ ZiBwZ29mZl90IGlzIG9ubHkgMzIgYml0cyB3aWRlLCB0aGUgYWJvdmUgcmVmaW5lbWVudCBpcyB1 c2VsZXNzLAotCQkgKiBhbmQgaW5zdGVhZCB3ZSdkIGJldHRlciB3b3JyeSBhYm91dCBpbnRlZ2Vy IG92ZXJmbG93LiAgQ2xhbXAgdG8KLQkJICogSU5UX01BWCBpZiB0aGUgY29ycmVjdCByZXN1bHQg ZXhjZWVkcyB0aGF0LgotCQkgKi8KLQkJaWYgKHNpemVvZih0ZS0+ZGF0YUxlbmd0aCkgPT0gNCAm JgotCQkJKHRiaW5mby0+cmVscGFnZXMgPCAwIHx8IHRiaW5mby0+dG9hc3RwYWdlcyA8IDAgfHwK LQkJCSB0ZS0+ZGF0YUxlbmd0aCA8IDApKQotCQkJdGUtPmRhdGFMZW5ndGggPSBJTlRfTUFYOwor CQkJLyoKKwkJCSAqIFNldCB0aGUgVG9jRW50cnkncyBkYXRhTGVuZ3RoIGluIGNhc2Ugd2UgYXJl IGRvaW5nIGEgcGFyYWxsZWwgZHVtcAorCQkJICogYW5kIHdhbnQgdG8gb3JkZXIgZHVtcCBqb2Jz IGJ5IHRhYmxlIHNpemUuICBXZSBjaG9vc2UgdG8gbWVhc3VyZQorCQkJICogZGF0YUxlbmd0aCBp biB0YWJsZSBwYWdlcyAoaW5jbHVkaW5nIFRPQVNUIHBhZ2VzKSBkdXJpbmcgZHVtcCwgc28KKwkJ CSAqIG5vIHNjYWxpbmcgaXMgbmVlZGVkLgorCQkJICoKKwkJCSAqIFdoaWxlIHBnX2NsYXNzLnJl bHBhZ2VzIHdoaWNoIHN0b3JlcyBCbG9ja051bWJlciwgYS9rL2EgdW5zaWduZWQgaW50LAorCQkJ ICogaXMgZGVjbGFyZWQgYXMgImludGVnZXIiIHdlIGNvbnZlcnQgaXQgYmFjayBhbmQgc3RvcmUg aXQgYXMgCisJCQkgKiBCbG9ja051bWJlciBpbiBUYWJsZUluZm8uCisJCQkgKiBBbmQgZGF0YUxl bmdodCBpcyBwZ29mZl90IChsb25nIGludCkgc28gZG9lcyBub3cgb3ZlcmZsb3cgZm9yCisJCQkg KiAyIHggVUlOVDMyX01BWCAKKwkJCSAqLworCQkJdGUtPmRhdGFMZW5ndGggPSB0YmluZm8tPnJl bHBhZ2VzOworCQkJdGUtPmRhdGFMZW5ndGggKz0gdGJpbmZvLT50b2FzdHBhZ2VzOworCQl9CisJ CWVsc2UKKwkJeworCQkJdWludDY0IGN1cnJlbnRfY2h1bmtfc3RhcnQgPSAwOworCQkJUFFFeHBC dWZmZXIgY2h1bmtfZGVzYyA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJCXdoaWxlIChjdXJy ZW50X2NodW5rX3N0YXJ0IDwgdGJpbmZvLT5yZWxwYWdlcykKKwkJCXsKKwkJCQlUYWJsZURhdGFJ bmZvICpjaHVua190ZGluZm8gPSAoVGFibGVEYXRhSW5mbyAqKSBwZ19tYWxsb2Moc2l6ZW9mKFRh YmxlRGF0YUluZm8pKTsKKworCQkJCW1lbWNweShjaHVua190ZGluZm8sIHRkaW5mbywgc2l6ZW9m KFRhYmxlRGF0YUluZm8pKTsKKwkJCQlBc3NpZ25EdW1wSWQoJmNodW5rX3RkaW5mby0+ZG9iaik7 CisJCQkJYWRkT2JqZWN0RGVwZW5kZW5jeSgmY2h1bmtfdGRpbmZvLT5kb2JqLCB0YmluZm8tPmRv YmouZHVtcElkKTsKKwkJCQljaHVua190ZGluZm8tPnN0YXJ0UGFnZSA9IChCbG9ja051bWJlcikg Y3VycmVudF9jaHVua19zdGFydDsKKwkJCQljaHVua190ZGluZm8tPmVuZFBhZ2UgPSBjaHVua190 ZGluZm8tPnN0YXJ0UGFnZSArIGRvcHQtPm1heF90YWJsZV9zZWdtZW50X3BhZ2VzIC0gMTsKKwkJ CQkKKwkJCQljdXJyZW50X2NodW5rX3N0YXJ0ICs9IGRvcHQtPm1heF90YWJsZV9zZWdtZW50X3Bh Z2VzOworCQkJCWlmIChjdXJyZW50X2NodW5rX3N0YXJ0ID49IHRiaW5mby0+cmVscGFnZXMpCisJ CQkJCWNodW5rX3RkaW5mby0+ZW5kUGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgLyogbGFzdCBj aHVuayBpcyBmb3IgImFsbCB0aGUgcmVzdCIgKi8KKworCQkJCXByaW50ZlBRRXhwQnVmZmVyKGNo dW5rX2Rlc2MsICJUQUJMRSBEQVRBIChwYWdlcyAldToldSkiLCBjaHVua190ZGluZm8tPnN0YXJ0 UGFnZSwgY2h1bmtfdGRpbmZvLT5lbmRQYWdlKTsKKworCQkJCXRlID0gQXJjaGl2ZUVudHJ5KGZv dXQsIGNodW5rX3RkaW5mby0+ZG9iai5jYXRJZCwgY2h1bmtfdGRpbmZvLT5kb2JqLmR1bXBJZCwK KwkJCQkJCQlBUkNISVZFX09QVFMoLnRhZyA9IHRiaW5mby0+ZG9iai5uYW1lLAorCQkJCQkJCQkJ CS5uYW1lc3BhY2UgPSB0YmluZm8tPmRvYmoubmFtZXNwYWNlLT5kb2JqLm5hbWUsCisJCQkJCQkJ CQkJLm93bmVyID0gdGJpbmZvLT5yb2xuYW1lLAorCQkJCQkJCQkJCS5kZXNjcmlwdGlvbiA9IGNo dW5rX2Rlc2MtPmRhdGEsCisJCQkJCQkJCQkJLnNlY3Rpb24gPSBTRUNUSU9OX0RBVEEsCisJCQkJ CQkJCQkJLmNyZWF0ZVN0bXQgPSB0ZERlZm4sCisJCQkJCQkJCQkJLmNvcHlTdG10ID0gY29weVN0 bXQsCisJCQkJCQkJCQkJLmRlcHMgPSAmKHRiaW5mby0+ZG9iai5kdW1wSWQpLAorCQkJCQkJCQkJ CS5uRGVwcyA9IDEsCisJCQkJCQkJCQkJLmR1bXBGbiA9IGR1bXBGbiwKKwkJCQkJCQkJCQkuZHVt cEFyZyA9IGNodW5rX3RkaW5mbykpOworCisJCQkJaWYoY2h1bmtfdGRpbmZvLT5lbmRQYWdlID09 IEludmFsaWRCbG9ja051bWJlcikKKwkJCQkJdGUtPmRhdGFMZW5ndGggPSB0YmluZm8tPnJlbHBh Z2VzIC0gY2h1bmtfdGRpbmZvLT5zdGFydFBhZ2U7CisJCQkJZWxzZQorCQkJCQl0ZS0+ZGF0YUxl bmd0aCA9IGRvcHQtPm1heF90YWJsZV9zZWdtZW50X3BhZ2VzOworCQkJCS8qIGxldCdzIGFzc3Vt ZSB0b2FzdCBwYWdlcyBkaXN0cmlidXRlIGV2ZW5seSBhbW9uZyBjaHVua3MgKi8KKwkJCQlpZih0 YmluZm8tPnJlbHBhZ2VzKQorCQkJCQl0ZS0+ZGF0YUxlbmd0aCArPSB0ZS0+ZGF0YUxlbmd0aCAq IHRiaW5mby0+dG9hc3RwYWdlcyAvIHRiaW5mby0+cmVscGFnZXM7CisJCQl9CisKKwkJCWRlc3Ry b3lQUUV4cEJ1ZmZlcihjaHVua19kZXNjKTsKKwkJfQogCX0KIAogCWRlc3Ryb3lQUUV4cEJ1ZmZl cihjb3B5QnVmKTsKQEAgLTMwODEsNiArMzE3MCw4IEBAIG1ha2VUYWJsZURhdGFJbmZvKER1bXBP cHRpb25zICpkb3B0LCBUYWJsZUluZm8gKnRiaW5mbykKIAl0ZGluZm8tPmRvYmoubmFtZXNwYWNl ID0gdGJpbmZvLT5kb2JqLm5hbWVzcGFjZTsKIAl0ZGluZm8tPnRkdGFibGUgPSB0YmluZm87CiAJ dGRpbmZvLT5maWx0ZXJjb25kID0gTlVMTDsJLyogbWlnaHQgZ2V0IHNldCBsYXRlciAqLworCXRk aW5mby0+c3RhcnRQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyAvKiB3ZSB1c2UgdGhpcyBhcyBp bmRpY2F0aW9uIHRoYXQgbm8gY2h1bmtpbmcgaXMgbmVlZGVkICovCisJdGRpbmZvLT5lbmRQYWdl ID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCWFkZE9iamVjdERlcGVuZGVuY3koJnRkaW5mby0+ZG9i aiwgdGJpbmZvLT5kb2JqLmR1bXBJZCk7CiAKIAkvKiBBIFRhYmxlRGF0YUluZm8gY29udGFpbnMg ZGF0YSwgb2YgY291cnNlICovCkBAIC03MzQ3LDggKzc0MzgsMTYgQEAgZ2V0VGFibGVzKEFyY2hp dmUgKmZvdXQsIGludCAqbnVtVGFibGVzKQogCQkJCQkJICJjLnJlbG5hbWVzcGFjZSwgYy5yZWxr aW5kLCBjLnJlbHR5cGUsICIKIAkJCQkJCSAiYy5yZWxvd25lciwgIgogCQkJCQkJICJjLnJlbGNo ZWNrcywgIgotCQkJCQkJICJjLnJlbGhhc2luZGV4LCBjLnJlbGhhc3J1bGVzLCBjLnJlbHBhZ2Vz LCAiCi0JCQkJCQkgImMucmVsdHVwbGVzLCBjLnJlbGFsbHZpc2libGUsICIpOworCQkJCQkJICJj LnJlbGhhc2luZGV4LCBjLnJlbGhhc3J1bGVzLCAiKTsKKworCS8qIGZldGNoIGN1cnJlbnQgcmVs YXRpb24gc2l6ZSBpZiBjaHVua2luZyBpcyByZXF1ZXN0ZWQgKi8KKwlpZihkb3B0LT5tYXhfdGFi bGVfc2VnbWVudF9wYWdlcyAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpCisJCWFwcGVuZFBRRXhwQnVm ZmVyU3RyKHF1ZXJ5LCAicGdfcmVsYXRpb25fc2l6ZShjLm9pZCkvY3VycmVudF9zZXR0aW5nKCdi bG9ja19zaXplJyk6OmludCBBUyByZWxwYWdlcywgIik7CisJZWxzZQorCQkvKiBwZ19jbGFzcy5y ZWxwYWdlcyBzdG9yZXMgQmxvY2tOdW1iZXIgKHVpbnQzMikgaW4gYW4gaW50IGZpZWxkLCBjb252 ZXJ0IHRvIG9pZCB0byBnZXQgdW5zaWduZWQgaW50IG91dCAqLworCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cihxdWVyeSwgImMucmVscGFnZXM6Om9pZCwgIik7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0 cihxdWVyeSwgImMucmVsdHVwbGVzLCBjLnJlbGFsbHZpc2libGUsICIpOwogCiAJaWYgKGZvdXQt PnJlbW90ZVZlcnNpb24gPj0gMTgwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwg ImMucmVsYWxsZnJvemVuLCAiKTsKQEAgLTc1ODksNyArNzY4OCw3IEBAIGdldFRhYmxlcyhBcmNo aXZlICpmb3V0LCBpbnQgKm51bVRhYmxlcykKIAkJdGJsaW5mb1tpXS5uY2hlY2sgPSBhdG9pKFBR Z2V0dmFsdWUocmVzLCBpLCBpX3JlbGNoZWNrcykpOwogCQl0YmxpbmZvW2ldLmhhc2luZGV4ID0g KHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9yZWxoYXNpbmRleCksICJ0IikgPT0gMCk7CiAJ CXRibGluZm9baV0uaGFzcnVsZXMgPSAoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3JlbGhh c3J1bGVzKSwgInQiKSA9PSAwKTsKLQkJdGJsaW5mb1tpXS5yZWxwYWdlcyA9IGF0b2koUFFnZXR2 YWx1ZShyZXMsIGksIGlfcmVscGFnZXMpKTsKKwkJdGJsaW5mb1tpXS5yZWxwYWdlcyA9IHN0cnRv dWwoUFFnZXR2YWx1ZShyZXMsIGksIGlfcmVscGFnZXMpLCBOVUxMLCAxMCk7CiAJCWlmIChQUWdl dGlzbnVsbChyZXMsIGksIGlfdG9hc3RwYWdlcykpCiAJCQl0YmxpbmZvW2ldLnRvYXN0cGFnZXMg PSAwOwogCQllbHNlCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAppbmRleCA1YTY3MjZkOGIxMi4uODRlNjgyZDU4NWYgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuaApAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSAicGdfYmFja3VwLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9kLmgiCisjaW5jbHVkZSAic3RvcmFnZS9i bG9jay5oIgogCiAKICNkZWZpbmUgb2lkY21wKHgseSkgKCAoKHgpIDwgKHkpID8gLTEgOiAoKHgp ID4gKHkpKSA/ICAxIDogMCkgKQpAQCAtMzM1LDcgKzMzNiwxMSBAQCB0eXBlZGVmIHN0cnVjdCBf dGFibGVJbmZvCiAJT2lkCQkJb3duaW5nX3RhYjsJCS8qIE9JRCBvZiB0YWJsZSBvd25pbmcgc2Vx dWVuY2UgKi8KIAlpbnQJCQlvd25pbmdfY29sOwkJLyogYXR0ciAjIG9mIGNvbHVtbiBvd25pbmcg c2VxdWVuY2UgKi8KIAlib29sCQlpc19pZGVudGl0eV9zZXF1ZW5jZTsKLQlpbnQzMgkJcmVscGFn ZXM7CQkvKiB0YWJsZSdzIHNpemUgaW4gcGFnZXMgKGZyb20gcGdfY2xhc3MpICovCisJQmxvY2tO dW1iZXIJcmVscGFnZXM7CQkvKiB0YWJsZSdzIHNpemUgaW4gcGFnZXMgKGZyb20gcGdfY2xhc3Mp IAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBjb252ZXJ0ZWQgdG8gdW5zaWduZWQg aW50ZWdlcgorCQkJCQkJCQkgKiB3aGVuIC0tbWF4LXRhYmxlLXNlZ21lbnQtcGFnZXMgaXMgc2V0 CisJCQkJCQkJCSAqIHRoZSBjb21wdXRlZCBmcm9tIHBnX3JlbGF0aW9uX3NpemUoKQorCSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAlpbnQJCQl0b2FzdHBhZ2VzOwkJLyogdG9hc3Qg dGFibGUncyBzaXplIGluIHBhZ2VzLCBpZiBhbnkgKi8KIAogCWJvb2wJCWludGVyZXN0aW5nOwkv KiB0cnVlIGlmIG5lZWQgdG8gY29sbGVjdCBtb3JlIGRhdGEgKi8KQEAgLTQxMyw4ICs0MTgsMjEg QEAgdHlwZWRlZiBzdHJ1Y3QgX3RhYmxlRGF0YUluZm8KIAlEdW1wYWJsZU9iamVjdCBkb2JqOwog CVRhYmxlSW5mbyAgKnRkdGFibGU7CQkvKiBsaW5rIHRvIHRhYmxlIHRvIGR1bXAgKi8KIAljaGFy CSAgICpmaWx0ZXJjb25kOwkJLyogV0hFUkUgY29uZGl0aW9uIHRvIGxpbWl0IHJvd3MgZHVtcGVk ICovCisJLyogc3RhcnRQYWdlIGFuZCBlbmRQYWdlIHRvIHN1cHBvcnQgc2VnbWVudGVkIGR1bXAg Ki8KKwlCbG9ja051bWJlcglzdGFydFBhZ2U7CQkvKiBBcyB3ZSBhbHdheXMga25vdyB0aGUgbG93 ZXN0IHNlZ21lbnQgcGFnZQorCQkJCQkJCQkgKiBudW1iZXIgd2UgY2FuIHVzZSBJbnZhbGlkQmxv Y2tOdW1iZXIgaGVyZQorCQkJCQkJCQkgKiB0byByZWNvZ25pemUgbm8gc2VnbWVudGluZyBjYXNl LgorCQkJCQkJCQkgKiBXaGVuIDAgZm9yIHRoZSBmaXJzdCBwYWdlIG9mIGZpcnN0CisJCQkJCQkJ CSAqIHNlZ21lbnQgd2UgY2FuIG9taXQgaW4gcmFuZ2UgcXVlcnkgKi8KKwlCbG9ja051bWJlcgll bmRQYWdlOwkJLyogbGFzdCBwYWdlIGluIHNlZ21lbnQgZm9yIHBhZ2UtcmFuZ2UgZHVtcCwKKwkg ICAgICAgICAgICAgICAgICAgIAkJICogc3RhcnRQYWdlK21heF90YWJsZV9zZWdtZW50X3BhZ2Vz LTEgZm9yIAorCQkJCQkJCQkgKiBtb3N0IHNlZ21lbnRzLCBidXQgSW52YWxpZEJsb2NrTnVtYmVy IGZvcgorCQkJCQkJCQkgKiB0aGUgbGFzdCBvbmUgdG8gaW5kaWNhdGUgb3BlbiByYW5nZQorCQkJ CQkJCQkgKi8KIH0gVGFibGVEYXRhSW5mbzsKIAorI2RlZmluZSBpc19zZWdtZW50KHRkaXB0cikg KCh0ZGlwdHIpLT5zdGFydFBhZ2UgIT0gSW52YWxpZEJsb2NrTnVtYmVyKQorCiB0eXBlZGVmIHN0 cnVjdCBfaW5keEluZm8KIHsKIAlEdW1wYWJsZU9iamVjdCBkb2JqOwpAQCAtNDQ5LDcgKzQ2Nyw3 IEBAIHR5cGVkZWYgc3RydWN0IF9yZWxTdGF0c0luZm8KIHsKIAlEdW1wYWJsZU9iamVjdCBkb2Jq OwogCU9pZAkJCXJlbGlkOwotCWludDMyCQlyZWxwYWdlczsKKwlCbG9ja051bWJlcglyZWxwYWdl czsKIAljaGFyCSAgICpyZWx0dXBsZXM7CiAJaW50MzIJCXJlbGFsbHZpc2libGU7CiAJaW50MzIJ CXJlbGFsbGZyb3plbjsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwNF9wZ19kdW1w X3BhcmFsbGVsLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDA0X3BnX2R1bXBfcGFyYWxsZWwucGwK aW5kZXggNzM4ZjM0YjFjMWIuLjRmMzVhZWVkOWI5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvdC8wMDRfcGdfZHVtcF9wYXJhbGxlbC5wbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDRf cGdfZHVtcF9wYXJhbGxlbC5wbApAQCAtMTEsNiArMTEsNyBAQCB1c2UgVGVzdDo6TW9yZTsKIG15 ICRkYm5hbWUxID0gJ3JlZ3Jlc3Npb25fc3JjJzsKIG15ICRkYm5hbWUyID0gJ3JlZ3Jlc3Npb25f ZGVzdDEnOwogbXkgJGRibmFtZTMgPSAncmVncmVzc2lvbl9kZXN0Mic7CitteSAkZGJuYW1lNCA9 ICdyZWdyZXNzaW9uX2Rlc3QzJzsKIAogbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyLT5uZXcoJ21haW4nKTsKICRub2RlLT5pbml0OwpAQCAtMjEsNiArMjIsNyBAQCBteSAkYmFj a3VwZGlyID0gJG5vZGUtPmJhY2t1cF9kaXI7CiAkbm9kZS0+cnVuX2xvZyhbICdjcmVhdGVkYics ICRkYm5hbWUxIF0pOwogJG5vZGUtPnJ1bl9sb2coWyAnY3JlYXRlZGInLCAkZGJuYW1lMiBdKTsK ICRub2RlLT5ydW5fbG9nKFsgJ2NyZWF0ZWRiJywgJGRibmFtZTMgXSk7Ciskbm9kZS0+cnVuX2xv ZyhbICdjcmVhdGVkYicsICRkYm5hbWU0IF0pOwogCiAkbm9kZS0+c2FmZV9wc3FsKAogCSRkYm5h bWUxLApAQCAtODcsNCArODksMzMgQEAgJG5vZGUtPmNvbW1hbmRfb2soCiAJXSwKIAkncGFyYWxs ZWwgcmVzdG9yZSBhcyBpbnNlcnRzJyk7CiAKKyRub2RlLT5jb21tYW5kX29rKAorCVsKKwkJJ3Bn X2R1bXAnLAorCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQknLS1tYXgtdGFibGUtc2Vn bWVudC1wYWdlcycgPT4gMiwKKwkJJy0tbm8tc3luYycsCisJCSctLWpvYnMnID0+IDIsCisJCSct LWZpbGUnID0+ICIkYmFja3VwZGlyL2R1bXAzIiwKKwkJJG5vZGUtPmNvbm5zdHIoJGRibmFtZTEp LAorCV0sCisJJ3BhcmFsbGVsIGR1bXAgd2l0aCBjaHVua3Mgb2YgdHdvIGhlYXAgcGFnZXMnKTsK KworJG5vZGUtPmNvbW1hbmRfb2soCisJWworCQkncGdfcmVzdG9yZScsICctLXZlcmJvc2UnLAor CQknLS1kYm5hbWUnID0+ICRub2RlLT5jb25uc3RyKCRkYm5hbWU0KSwKKwkJJy0tam9icycgPT4g MywKKwkJIiRiYWNrdXBkaXIvZHVtcDMiLAorCV0sCisJJ3BhcmFsbGVsIHJlc3RvcmUgd2l0aCBj aHVua3Mgb2YgdHdvIGhlYXAgcGFnZXMnKTsKKworbXkgJHRhYmxlID0gJ3RwbGFpbic7CitteSAk dGFibGVoYXNoX3F1ZXJ5ID0gIlNFTEVDVCAnJHRhYmxlJywgc3VtKGhhc2h0ZXh0KHQ6OnRleHQp KSwgY291bnQoKikgRlJPTSAkdGFibGUgQVMgdCI7CisKK215ICRyZXN1bHRfMSA9ICRub2RlLT5z YWZlX3BzcWwoJGRibmFtZTEsICR0YWJsZWhhc2hfcXVlcnkpOworbXkgJHJlc3VsdF80ID0gJG5v ZGUtPnNhZmVfcHNxbCgkZGJuYW1lNCwgJHRhYmxlaGFzaF9xdWVyeSk7CisKK2lzKCRyZXN1bHRf NCwgJHJlc3VsdF8xLCAiSGFzaCBjaGVjayBmb3IgJHRhYmxlOiByZXN0b3JlZCBkYiAoJHJlc3Vs dF80KSB2cyBvcmlnaW5hbCBkYiAoJHJlc3VsdF8xKSIpOworCiBkb25lX3Rlc3RpbmcoKTsKZGlm ZiAtLWdpdCBhL3NyYy9mZV91dGlscy9vcHRpb25fdXRpbHMuYyBiL3NyYy9mZV91dGlscy9vcHRp b25fdXRpbHMuYwppbmRleCA4ZDA2NTljMTE2NC4uYTUxNmQ4Yzg2YTkgMTAwNjQ0Ci0tLSBhL3Ny Yy9mZV91dGlscy9vcHRpb25fdXRpbHMuYworKysgYi9zcmMvZmVfdXRpbHMvb3B0aW9uX3V0aWxz LmMKQEAgLTgzLDYgKzgzLDYxIEBAIG9wdGlvbl9wYXJzZV9pbnQoY29uc3QgY2hhciAqb3B0YXJn LCBjb25zdCBjaGFyICpvcHRuYW1lLAogCXJldHVybiB0cnVlOwogfQogCisvKgorICogb3B0aW9u X3BhcnNlX3VpbnQzMgorICoKKyAqIFBhcnNlIHVuc2lnbmVkIGludGVnZXIgdmFsdWUgZm9yIGFu IG9wdGlvbi4gIElmIHRoZSBwYXJzaW5nIGlzIHN1Y2Nlc3NmdWwsCisgKiByZXR1cm5zIHRydWUg YW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluICpyZXN1bHQgaWYgdGhhdCdzIGdpdmVuOworICogaWYg cGFyc2luZyBmYWlscywgcmV0dXJucyBmYWxzZS4KKyAqLworYm9vbAorb3B0aW9uX3BhcnNlX3Vp bnQzMihjb25zdCBjaGFyICpvcHRhcmcsIGNvbnN0IGNoYXIgKm9wdG5hbWUsCisJCQkJIHVpbnQz MiBtaW5fcmFuZ2UsIHVpbnQzMiBtYXhfcmFuZ2UsCisJCQkJIHVpbnQzMiAqcmVzdWx0KQorewor CWNoYXIJICAgCQkqZW5kcHRyOworCXVuc2lnbmVkIGxvbmcJdmFsOworCisJLyogRmFpbCBpZiB0 aGVyZSBpcyBhIG1pbnVzIHNpZ24gYXQgdGhlIHN0YXJ0IG9mIHZhbHVlICovCisJd2hpbGUoaXNz cGFjZSgodW5zaWduZWQgY2hhcikgKm9wdGFyZykpCisJCW9wdGFyZysrOworCWlmKCpvcHRhcmcg PT0gJy0nKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJ2YWx1ZSBcIiVzXCIgZm9yIG9wdGlvbiAlcyBj YW4gbm90IGJlIG5lZ2F0aXZlIiwKKwkJCQkJb3B0YXJnLCBvcHRuYW1lKTsKKwkJcmV0dXJuIGZh bHNlOworCX0KKworCWVycm5vID0gMDsKKwl2YWwgPSBzdHJ0b3VsKG9wdGFyZywgJmVuZHB0ciwg MTApOworCisJLyoKKwkgKiBTa2lwIGFueSB0cmFpbGluZyB3aGl0ZXNwYWNlOyBpZiBhbnl0aGlu ZyBidXQgd2hpdGVzcGFjZSByZW1haW5zIGJlZm9yZQorCSAqIHRoZSB0ZXJtaW5hdGluZyBjaGFy YWN0ZXIsIGZhaWwuCisJICovCisJd2hpbGUgKCplbmRwdHIgIT0gJ1wwJyAmJiBpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSAqZW5kcHRyKSkKKwkJZW5kcHRyKys7CisKKwlpZiAoKmVuZHB0ciAhPSAn XDAnKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJpbnZhbGlkIHZhbHVlIFwiJXNcIiBmb3Igb3B0aW9u ICVzIiwKKwkJCQkJIG9wdGFyZywgb3B0bmFtZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkv KiBhcyBtaW5fcmFuZ2UgYW5kIG1heF9yYW5nZSBhcmUgdWludDMyIHRoZW4gdGhlIHJhbmdlIGNo ZWNrIHdpbGwKKwkgKiBjYXRjaCB0aGUgY2FzZSB3aGVyZSB1bnNpZ25lZCBsb25nIHZhbCBpcyBv dXRzaWRlIDMyIGJpdCByYW5nZSAqLworCWlmIChlcnJubyA9PSBFUkFOR0UgfHwgdmFsIDwgbWlu X3JhbmdlIHx8IHZhbCA+IG1heF9yYW5nZSkKKwl7CisJCXBnX2xvZ19lcnJvcigiJXMgbm90IGlu IHJhbmdlICV1Li4ldSIsIG9wdG5hbWUsIG1pbl9yYW5nZSwgbWF4X3JhbmdlKTsKKwkJcmV0dXJu IGZhbHNlOworCX0KKworCWlmIChyZXN1bHQpCisJCSpyZXN1bHQgPSAodWludDMyKSB2YWw7CisJ cmV0dXJuIHRydWU7Cit9CisKIC8qCiAgKiBQcm92aWRlIHN0cmljdGx5IGhhcm1vbml6ZWQgaGFu ZGxpbmcgb2YgdGhlIC0tc3luYy1tZXRob2Qgb3B0aW9uLgogICovCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9mZV91dGlscy9vcHRpb25fdXRpbHMuaCBiL3NyYy9pbmNsdWRlL2ZlX3V0aWxzL29w dGlvbl91dGlscy5oCmluZGV4IGQ5NzVkYjc3YWYyLi42N2ZkMzY1MGQ3YSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvZmVf dXRpbHMvb3B0aW9uX3V0aWxzLmgKQEAgLTIyLDYgKzIyLDkgQEAgZXh0ZXJuIHZvaWQgaGFuZGxl X2hlbHBfdmVyc2lvbl9vcHRzKGludCBhcmdjLCBjaGFyICphcmd2W10sCiBleHRlcm4gYm9vbCBv cHRpb25fcGFyc2VfaW50KGNvbnN0IGNoYXIgKm9wdGFyZywgY29uc3QgY2hhciAqb3B0bmFtZSwK IAkJCQkJCQkgaW50IG1pbl9yYW5nZSwgaW50IG1heF9yYW5nZSwKIAkJCQkJCQkgaW50ICpyZXN1 bHQpOworZXh0ZXJuIGJvb2wgb3B0aW9uX3BhcnNlX3VpbnQzMihjb25zdCBjaGFyICpvcHRhcmcs IGNvbnN0IGNoYXIgKm9wdG5hbWUsCisJCQkJCQkJIHVpbnQzMiBtaW5fcmFuZ2UsIHVpbnQzMiBt YXhfcmFuZ2UsCisJCQkJCQkJIHVpbnQzMiAqcmVzdWx0KTsKIGV4dGVybiBib29sIHBhcnNlX3N5 bmNfbWV0aG9kKGNvbnN0IGNoYXIgKm9wdGFyZywKIAkJCQkJCQkgIERhdGFEaXJTeW5jTWV0aG9k ICpzeW5jX21ldGhvZCk7CiBleHRlcm4gdm9pZCBjaGVja19tdXRfZXhjbF9vcHRzX2ludGVybmFs KGludCBuLC4uLik7Ci0tIAoyLjQzLjAKCg== --000000000000dbfeec064e30b687--