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 1w3AVa-000yCE-1D for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Mar 2026 10:21:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w3AVZ-0004yq-0f for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Mar 2026 10:21:41 +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 1w3AVY-0004yi-1F for pgsql-hackers@lists.postgresql.org; Thu, 19 Mar 2026 10:21:40 +0000 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w3AVU-00000000XWb-2iwz for pgsql-hackers@lists.postgresql.org; Thu, 19 Mar 2026 10:21:39 +0000 Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-35bb863824fso438314a91.1 for ; Thu, 19 Mar 2026 03:21:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773915697; cv=none; d=google.com; s=arc-20240605; b=MmK+0tY/Gx/IHwdkHlHlFe1K1LLmCRZWIcjyKBhu24w0YSnbGyY9uiHpabhKXrMVMy WdXbtttfAJ+bl/xjMJh0PrXXT15JaCnxnXITp3VvVqkJcg/Y1rz7skzPHydQrNgaZ8p/ TBcaH0dZ2CUcGio+OGBAs4pJoldG/D2BPjb0PcozlCbvKWGL6Fi/p8JKPEo7nbAqUM98 FL8F/9upDsifjojwZ78jHgi0JAJhXBp7EmZKwRWncfKXmwgdgSkZkUfJDqf92SYr7YRj VSlMM3ojHH3KdQqOPpeAczXYVLrBfVdgGywOQ+Ju4IFwau4KJF+NRw3qW5snFYXmd9lD eWGg== 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=YyahpvKRaj0FIkzH6HuZ+iZTTuPZX1JQNanMwztLHOY=; fh=Nx2v0oehuqYLMUxyVD9UO/6c1GYOlnIEjS5nl11xgVc=; b=C3dPRiI+k2kAUsLKWSeizwQxupiKwKrixM+zz1ag3jROoe9NUrVjU7CY9SJiWqVIg3 5KT1YnQh+5QrPb9XHnW58ndLU+JjA63MGJOi4Rm77PMPQ0A6EXDF7mxv0q+3AVIzGbf5 m6y/epwSFuK8NHyeEBtMtRY3CDebHOfPWmw8GtWAa+EpscKdLu5xsYzAYiIen7U7dVt+ ZhafJXmtXodsVcE3QbNlxUJ0sXuLJjrMZy4mhlp4LCkwjm6V+XhOR0hWMWAw6j68LqFP ExJcphbUaiOJRGD3ZqfurHg4wCxZuBoywObB2Q2pBT+nkDwiwdDsPFOblyS0Y95GPndN 13dA==; 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=gmail.com; s=20230601; t=1773915697; x=1774520497; 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=YyahpvKRaj0FIkzH6HuZ+iZTTuPZX1JQNanMwztLHOY=; b=jdCunOFoWEZf+a2h9pnJhS8n5/EfVGp/afAAv/JFJ5Pf0kp9rrqk/2Z4Z9+WiRz4n2 IgXLB1NYK8tO1lvrgYu6lgaVIlDV9cuTGaqXMTKWeCKCSjp2hdbZy0cAy9oQpbLzi7dr vvdVou2REKF3vJ8wDOemo8SjMiP8jH33ckUHd0NUCgaMpppCpo+YQ/CpF7z6WvNMwo0n ZPD2qwwVEP1SlmAudnF8LwPHS63MIXsi6vcA6NHve6riIQ9CsJqFxmiEA49ebvxUGihO 8ZVJcPZAEhqbJBvk5vlpr6dOxsX9d056HmzEvpaVc+yA88BLKG+LU2TjngbjsmmAigLa vLSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773915697; x=1774520497; 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=YyahpvKRaj0FIkzH6HuZ+iZTTuPZX1JQNanMwztLHOY=; b=gEHzKWHoNiEuONpVCB11FFiuyrgTT9CF+EF/5cSrez3+asBbSzO4WXYMKsc1UtxF27 3Kspgf4ZFZ7np9+tP6f2MzYutRwi2UXsVgcEFq5ZJT8Mkt+iDNNQ/I3vJUTSbmYGnI9g MFApb0mToUERaE4y+PJIBkmGQC+ZtFPCAG6O7BcaUcDG8WDM6b0klZl7rLOt0g5Iiqsq rmFHaXeDSNsLEMh2uvo867oFpbkH/VolQl+WJCHPK4nbnKbv+S/gkN1j4UeYS0rmLF6K oeKjC+PYHWQ3uE0m1gE8Dinpod0voHNZnCxASxPBoopXVHeXQ9vZeCP0b0M2vjx0fBKr Ujrw== X-Forwarded-Encrypted: i=1; AJvYcCXZL52zdkGGTpfIctO1FCLKxnzkvywaBb7doxv5z5bIVo6w1mayGWMDCp7a/AUiq8BvSMXt6oy3MFnfhvRu@lists.postgresql.org X-Gm-Message-State: AOJu0YxEfyQiTvdrepc7jjHTRSjm60y5aWQ6EFtek8C7whkzaURZsGF/ 04FraD8w8w6bK/6pD7kJgJdlvR7TO4Bx/5W22XxsTIavm4LAU24FDNk7k6KeIeB76IfpaYZqDAT 1xFSOpppSkxuLtwIhW04jI3iAgQWPZ0Y= X-Gm-Gg: ATEYQzwQBQ37ZI6O/enBx9MDtrR5JzOiv3Xaa7E+FJ7mViL+b7QwDvRtGQfjTK7IwJZ rc7Bx0jb6AoHFExhE1JHr+y4fwPeFK5dROmd1k2t9HmtI9JtK5M/PCUaA2S6g/9ufxgQon8mcGI yg+SP0C29w+HVNRy5lcdkI9MbMpFkjTWws+OJKOT8/VDCkDzbJlFl1ae6vVy2ZafcYOD2mm1ott TAnbkCVAkUb7IqknCfHMdWzZ7n4+UQojmWD/hY7l0xPNwKUtsXcafgVbSAqHe/aiT4HX4gBOQM+ dLTj6uSv X-Received: by 2002:a17:90b:2e45:b0:32e:a8b7:e9c with SMTP id 98e67ed59e1d1-35bb9f78952mr5793837a91.29.1773915697024; Thu, 19 Mar 2026 03:21:37 -0700 (PDT) MIME-Version: 1.0 References: <72973471-8946-40c7-8b2d-8f95540d90e2@dunslane.net> <401bf08a-c8f1-48e2-9a30-78deaa9fa7c5@dunslane.net> In-Reply-To: From: Amul Sul Date: Thu, 19 Mar 2026 15:50:59 +0530 X-Gm-Features: AaiRm53_-PL-aS3mU1vQMh7-jyUjCabyhBrhgyDqGBLDd3Bg2o9UtuivBlzVBLw Message-ID: Subject: Re: pg_waldump: support decoding of WAL inside tarfile To: Andrew Dunstan Cc: Robert Haas , Chao Li , Jakub Wartak , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000fbe6c0064d5deeae" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000fbe6c0064d5deeae Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Mar 18, 2026 at 8:46=E2=80=AFPM Amul Sul wrote: > > On Wed, Mar 18, 2026 at 5:15=E2=80=AFPM Amul Sul wrot= e: > > > > On Wed, Mar 11, 2026 at 10:38=E2=80=AFPM Andrew Dunstan wrote: > > > [...] > > > Looks pretty good. I have squashed them into three patches I think ar= e committable. Also attached is a diff showing what's changed - mainly this= : > > > > > > . --follow + tar archive rejected (pg_waldump.c) =E2=80=94 new valida= tion prevents a confusing pg_fatal when combining --follow with a tar archi= ve > > > . error messages split (archive_waldump.c) =E2=80=94 the single "coul= d not read file" error is now two distinct messages: "WAL segment is too sh= ort" (truncated file) vs "unexpected end of archive" (archive EOF) - Fixes = an issue raised in review > > > . hash table cleanup (archive_waldump.c) =E2=80=94 free_archive_reade= r now iterates and frees all remaining hash entries and destroys the table > > > > > > > The final squashed version looks good to me, thank you. But, I would > > like to propose splitting the 0001 patch into two separate commits: a > > preparatory refactoring of the pg_waldump code and a standalone commit > > that moves the tar archive detection and compression logic to a common > > location, as the latter is an independent improvement to the existing > > codebase. Additionally, since the test file refactoring was only kept > > separate to facilitate the review and has already been reviewed, I > > suggest merging those changes into the main feature patch i.e. 0002. > > All other elements should remain in a single preparatory refactoring > > patch for pg_waldump. > > > > Attached is the version that includes the proposed split. No > > additional changes to 0002 and 0003 patches. > > > > Added the two missing 'Reviewed-by' lines to the credit section of the > commit message and did a minor optimization in get_archive_wal_entry. > Attaching an updated version. It includes some tweaks to code comments, adds an assert inside get_archive_wal_entry(), moves the archive_read_buf_size declaration and usage into an assert-enabled check, and makes a minor change to precheck_tar_backup_file() to assign out-variables only after successful validation. Regards, Amul --000000000000fbe6c0064d5deeae Content-Type: application/x-patch; name="v20-0001-Move-tar-detection-and-compression-logic-to-comm.patch" Content-Disposition: attachment; filename="v20-0001-Move-tar-detection-and-compression-logic-to-comm.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxbd7vd0 RnJvbSBiYTczNjAxNDIyOGVhMjUwYjhlYjE1NWYyNzc2YmI4NmZlZWQyYjU1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbXVsIFN1bCA8c3VsYW11bEBnbWFpbC5jb20+CkRhdGU6IFRo dSwgMTkgTWFyIDIwMjYgMTU6NDM6MzAgKzA1MzAKU3ViamVjdDogW1BBVENIIHYyMCAxLzVdIE1v dmUgdGFyIGRldGVjdGlvbiBhbmQgY29tcHJlc3Npb24gbG9naWMgdG8gY29tbW9uLgoKQ29uc29s aWRhdGUgdGFyIGFyY2hpdmUgaWRlbnRpZmljYXRpb24gYW5kIGNvbXByZXNzaW9uLXR5cGUgZGV0 ZWN0aW9uCmxvZ2ljIGludG8gYSBzaGFyZWQgbG9jYXRpb24uIEN1cnJlbnRseSB1c2VkIGJ5IHBn X2Jhc2ViYWNrdXAgYW5kCnBnX3ZlcmlmeWJhY2t1cCwgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGFs c28gcmVxdWlyZWQgZm9yIHVwY29taW5nCnBnX3dhbGR1bXAgZW5oYW5jZW1lbnRzLgoKVGhpcyBj aGFuZ2UgcHJvbW90ZXMgY29kZSByZXVzZSBhbmQgc2ltcGxpZmllcyBtYWludGVuYW5jZSBhY3Jv c3MKZnJvbnRlbmQgdG9vbHMuCgpBdXRob3I6IEFtdWwgU3VsIDxzdWxhbXVsQGdtYWlsLmNvbT4K UmV2aWV3ZWQtYnk6IFJvYmVydCBIYWFzIDxyb2JlcnRtaGFhc0BnbWFpbC5jb20+ClJldmlld2Vk LWJ5OiBKYWt1YiBXYXJ0YWsgPGpha3ViLndhcnRha0BlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdl ZC1ieTogQ2hhbyBMaSA8bGkuZXZhbi5jaGFvQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEV1bGVy IFRhdmVpcmEgPGV1bGVyQGV1bGVydG8uY29tPgpSZXZpZXdlZC1ieTogQW5kcmV3IER1bnN0YW4g PGFuZHJld0BkdW5zbGFuZS5uZXQ+CmRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FB Sl9iOTRicWRXTjNoMkotUHp6elEyTnBid2N0NVpRSGdnbl9Rb1lHaEMycm4tPVdRQG1haWwuZ21h aWwuY29tCi0tLQogc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX2Jhc2ViYWNrdXAuYyAgICAgfCAz NiArKysrKysrLS0tLS0tLS0tLS0tLS0tLQogc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvcGdfdmVy aWZ5YmFja3VwLmMgfCAxMiArLS0tLS0tLQogc3JjL2NvbW1vbi9jb21wcmVzc2lvbi5jICAgICAg ICAgICAgICAgICAgfCAzMCArKysrKysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9jb21tb24v Y29tcHJlc3Npb24uaCAgICAgICAgICB8ICAyICsrCiA0IGZpbGVzIGNoYW5nZWQsIDQ0IGluc2Vy dGlvbnMoKyksIDM2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfYmFzZWJh Y2t1cC9wZ19iYXNlYmFja3VwLmMgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfYmFzZWJhY2t1 cC5jCmluZGV4IGZhMTY5YThkNjQyLi5jMWE0NjcyYWE2ZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19iYXNlYmFja3VwL3BnX2Jhc2ViYWNrdXAuYworKysgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAv cGdfYmFzZWJhY2t1cC5jCkBAIC0xMDcwLDEyICsxMDcwLDkgQEAgQ3JlYXRlQmFja3VwU3RyZWFt ZXIoY2hhciAqYXJjaGl2ZV9uYW1lLCBjaGFyICpzcGNsb2NhdGlvbiwKIAlhc3RyZWFtZXIgICpt YW5pZmVzdF9pbmplY3Rfc3RyZWFtZXIgPSBOVUxMOwogCWJvb2wJCWluamVjdF9tYW5pZmVzdDsK IAlib29sCQlpc190YXIsCi0JCQkJaXNfdGFyX2d6LAotCQkJCWlzX3Rhcl9sejQsCi0JCQkJaXNf dGFyX3pzdGQsCiAJCQkJaXNfY29tcHJlc3NlZF90YXI7CisJcGdfY29tcHJlc3NfYWxnb3JpdGht IGNvbXByZXNzZWRfdGFyX2FsZ29yaXRobTsKIAlib29sCQltdXN0X3BhcnNlX2FyY2hpdmU7Ci0J aW50CQkJYXJjaGl2ZV9uYW1lX2xlbiA9IHN0cmxlbihhcmNoaXZlX25hbWUpOwogCiAJLyoKIAkg KiBOb3JtYWxseSwgd2UgZW1pdCB0aGUgYmFja3VwIG1hbmlmZXN0IGFzIGEgc2VwYXJhdGUgZmls ZSwgYnV0IHdoZW4KQEAgLTEwODQsMjQgKzEwODEsMTMgQEAgQ3JlYXRlQmFja3VwU3RyZWFtZXIo Y2hhciAqYXJjaGl2ZV9uYW1lLCBjaGFyICpzcGNsb2NhdGlvbiwKIAkgKi8KIAlpbmplY3RfbWFu aWZlc3QgPSAoZm9ybWF0ID09ICd0JyAmJiBzdHJjbXAoYmFzZWRpciwgIi0iKSA9PSAwICYmIG1h bmlmZXN0KTsKIAotCS8qIElzIHRoaXMgYSB0YXIgYXJjaGl2ZT8gKi8KLQlpc190YXIgPSAoYXJj aGl2ZV9uYW1lX2xlbiA+IDQgJiYKLQkJCSAgc3RyY21wKGFyY2hpdmVfbmFtZSArIGFyY2hpdmVf bmFtZV9sZW4gLSA0LCAiLnRhciIpID09IDApOwotCi0JLyogSXMgdGhpcyBhIC50YXIuZ3ogYXJj aGl2ZT8gKi8KLQlpc190YXJfZ3ogPSAoYXJjaGl2ZV9uYW1lX2xlbiA+IDcgJiYKLQkJCQkgc3Ry Y21wKGFyY2hpdmVfbmFtZSArIGFyY2hpdmVfbmFtZV9sZW4gLSA3LCAiLnRhci5neiIpID09IDAp OwotCi0JLyogSXMgdGhpcyBhIC50YXIubHo0IGFyY2hpdmU/ICovCi0JaXNfdGFyX2x6NCA9IChh cmNoaXZlX25hbWVfbGVuID4gOCAmJgotCQkJCSAgc3RyY21wKGFyY2hpdmVfbmFtZSArIGFyY2hp dmVfbmFtZV9sZW4gLSA4LCAiLnRhci5sejQiKSA9PSAwKTsKLQotCS8qIElzIHRoaXMgYSAudGFy LnpzdCBhcmNoaXZlPyAqLwotCWlzX3Rhcl96c3RkID0gKGFyY2hpdmVfbmFtZV9sZW4gPiA4ICYm Ci0JCQkJICAgc3RyY21wKGFyY2hpdmVfbmFtZSArIGFyY2hpdmVfbmFtZV9sZW4gLSA4LCAiLnRh ci56c3QiKSA9PSAwKTsKKwkvKiBDaGVjayB3aGV0aGVyIGl0IGlzIGEgdGFyIGFyY2hpdmUgYW5k IGl0cyBjb21wcmVzc2lvbiB0eXBlICovCisJaXNfdGFyID0gcGFyc2VfdGFyX2NvbXByZXNzX2Fs Z29yaXRobShhcmNoaXZlX25hbWUsCisJCQkJCQkJCQkJICAmY29tcHJlc3NlZF90YXJfYWxnb3Jp dGhtKTsKIAogCS8qIElzIHRoaXMgYW55IGtpbmQgb2YgY29tcHJlc3NlZCB0YXI/ICovCi0JaXNf Y29tcHJlc3NlZF90YXIgPSBpc190YXJfZ3ogfHwgaXNfdGFyX2x6NCB8fCBpc190YXJfenN0ZDsK Kwlpc19jb21wcmVzc2VkX3RhciA9IChpc190YXIgJiYKKwkJCQkJCSBjb21wcmVzc2VkX3Rhcl9h bGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9ORSk7CiAKIAkvKgogCSAqIEluamVjdGluZyB0 aGUgbWFuaWZlc3QgaW50byBhIGNvbXByZXNzZWQgdGFyIGZpbGUgd291bGQgYmUgcG9zc2libGUg aWYKQEAgLTExMjgsNyArMTExNCw3IEBAIENyZWF0ZUJhY2t1cFN0cmVhbWVyKGNoYXIgKmFyY2hp dmVfbmFtZSwgY2hhciAqc3BjbG9jYXRpb24sCiAJCQkJCQkgIChzcGNsb2NhdGlvbiA9PSBOVUxM ICYmIHdyaXRlcmVjb3Zlcnljb25mKSk7CiAKIAkvKiBBdCBwcmVzZW50LCB3ZSBvbmx5IGtub3cg aG93IHRvIHBhcnNlIHRhciBhcmNoaXZlcy4gKi8KLQlpZiAobXVzdF9wYXJzZV9hcmNoaXZlICYm ICFpc190YXIgJiYgIWlzX2NvbXByZXNzZWRfdGFyKQorCWlmIChtdXN0X3BhcnNlX2FyY2hpdmUg JiYgIWlzX3RhcikKIAl7CiAJCXBnX2xvZ19lcnJvcigiY2Fubm90IHBhcnNlIGFyY2hpdmUgXCIl c1wiIiwgYXJjaGl2ZV9uYW1lKTsKIAkJcGdfbG9nX2Vycm9yX2RldGFpbCgiT25seSB0YXIgYXJj aGl2ZXMgY2FuIGJlIHBhcnNlZC4iKTsKQEAgLTEyNjMsMTMgKzEyNDksMTMgQEAgQ3JlYXRlQmFj a3VwU3RyZWFtZXIoY2hhciAqYXJjaGl2ZV9uYW1lLCBjaGFyICpzcGNsb2NhdGlvbiwKIAkgKiBJ ZiB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIGEgc2VydmVyIGNvbXByZXNzZWQgYXJjaGl2ZSBhbG9u ZyB3aXRoCiAJICogYXJjaGl2ZSBleHRyYWN0aW9uIGF0IGNsaWVudCB0aGVuIHdlIG5lZWQgdG8g ZGVjb21wcmVzcyBpdC4KIAkgKi8KLQlpZiAoZm9ybWF0ID09ICdwJykKKwlpZiAoZm9ybWF0ID09 ICdwJyAmJiBpc19jb21wcmVzc2VkX3RhcikKIAl7Ci0JCWlmIChpc190YXJfZ3opCisJCWlmIChj b21wcmVzc2VkX3Rhcl9hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKIAkJCXN0cmVh bWVyID0gYXN0cmVhbWVyX2d6aXBfZGVjb21wcmVzc29yX25ldyhzdHJlYW1lcik7Ci0JCWVsc2Ug aWYgKGlzX3Rhcl9sejQpCisJCWVsc2UgaWYgKGNvbXByZXNzZWRfdGFyX2FsZ29yaXRobSA9PSBQ R19DT01QUkVTU0lPTl9MWjQpCiAJCQlzdHJlYW1lciA9IGFzdHJlYW1lcl9sejRfZGVjb21wcmVz c29yX25ldyhzdHJlYW1lcik7Ci0JCWVsc2UgaWYgKGlzX3Rhcl96c3RkKQorCQllbHNlIGlmIChj b21wcmVzc2VkX3Rhcl9hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fWlNURCkKIAkJCXN0cmVh bWVyID0gYXN0cmVhbWVyX3pzdGRfZGVjb21wcmVzc29yX25ldyhzdHJlYW1lcik7CiAJfQogCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC9wZ192ZXJpZnliYWNrdXAuYyBiL3Ny Yy9iaW4vcGdfdmVyaWZ5YmFja3VwL3BnX3ZlcmlmeWJhY2t1cC5jCmluZGV4IGNiYzk0NDczODRm Li4zMWY2MDZjNDViMSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvcGdfdmVy aWZ5YmFja3VwLmMKKysrIGIvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvcGdfdmVyaWZ5YmFja3Vw LmMKQEAgLTk0MSwxNyArOTQxLDcgQEAgcHJlY2hlY2tfdGFyX2JhY2t1cF9maWxlKHZlcmlmaWVy X2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKnJlbHBhdGgsCiAJfQogCiAJLyogTm93LCBjaGVjayB0 aGUgY29tcHJlc3Npb24gdHlwZSBvZiB0aGUgdGFyICovCi0JaWYgKHN0cmNtcChzdWZmaXgsICIu dGFyIikgPT0gMCkKLQkJY29tcHJlc3NfYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsK LQllbHNlIGlmIChzdHJjbXAoc3VmZml4LCAiLnRneiIpID09IDApCi0JCWNvbXByZXNzX2FsZ29y aXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7Ci0JZWxzZSBpZiAoc3RyY21wKHN1ZmZpeCwgIi50 YXIuZ3oiKSA9PSAwKQotCQljb21wcmVzc19hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQ OwotCWVsc2UgaWYgKHN0cmNtcChzdWZmaXgsICIudGFyLmx6NCIpID09IDApCi0JCWNvbXByZXNz X2FsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0xaNDsKLQllbHNlIGlmIChzdHJjbXAoc3VmZml4 LCAiLnRhci56c3QiKSA9PSAwKQotCQljb21wcmVzc19hbGdvcml0aG0gPSBQR19DT01QUkVTU0lP Tl9aU1REOwotCWVsc2UKKwlpZiAoIXBhcnNlX3Rhcl9jb21wcmVzc19hbGdvcml0aG0oc3VmZml4 LCAmY29tcHJlc3NfYWxnb3JpdGhtKSkKIAl7CiAJCXJlcG9ydF9iYWNrdXBfZXJyb3IoY29udGV4 dCwKIAkJCQkJCQkiZmlsZSBcIiVzXCIgaXMgbm90IGV4cGVjdGVkIGluIGEgdGFyIGZvcm1hdCBi YWNrdXAiLApkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9jb21wcmVzc2lvbi5jIGIvc3JjL2NvbW1v bi9jb21wcmVzc2lvbi5jCmluZGV4IDkyY2Q0ZWM3YTBkLi5mZWZiZWQ2OGJlYSAxMDA2NDQKLS0t IGEvc3JjL2NvbW1vbi9jb21wcmVzc2lvbi5jCisrKyBiL3NyYy9jb21tb24vY29tcHJlc3Npb24u YwpAQCAtNDEsNiArNDEsMzYgQEAgc3RhdGljIGludAlleHBlY3RfaW50ZWdlcl92YWx1ZShjaGFy ICprZXl3b3JkLCBjaGFyICp2YWx1ZSwKIHN0YXRpYyBib29sIGV4cGVjdF9ib29sZWFuX3ZhbHVl KGNoYXIgKmtleXdvcmQsIGNoYXIgKnZhbHVlLAogCQkJCQkJCQkgcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiAqcmVzdWx0KTsKIAorLyoKKyAqIExvb2sgdXAgYSBjb21wcmVzc2lvbiBhbGdvcml0 aG0gYnkgYXJjaGl2ZSBmaWxlIGV4dGVuc2lvbi4gUmV0dXJucyB0cnVlIGFuZAorICogc2V0cyAq YWxnb3JpdGhtIGlmIHRoZSBleHRlbnNpb24gaXMgcmVjb2duaXplZC4gT3RoZXJ3aXNlIHJldHVy bnMgZmFsc2UuCisgKi8KK2Jvb2wKK3BhcnNlX3Rhcl9jb21wcmVzc19hbGdvcml0aG0oY29uc3Qg Y2hhciAqZm5hbWUsIHBnX2NvbXByZXNzX2FsZ29yaXRobSAqYWxnb3JpdGhtKQoreworCWludAkJ CWZuYW1lX2xlbiA9IHN0cmxlbihmbmFtZSk7CisKKwlpZiAoZm5hbWVfbGVuID49IDQgJiYKKwkJ c3RyY21wKGZuYW1lICsgZm5hbWVfbGVuIC0gNCwgIi50YXIiKSA9PSAwKQorCQkqYWxnb3JpdGht ID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKKwllbHNlIGlmIChmbmFtZV9sZW4gPj0gNCAmJgorCQkJ IHN0cmNtcChmbmFtZSArIGZuYW1lX2xlbiAtIDQsICIudGd6IikgPT0gMCkKKwkJKmFsZ29yaXRo bSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CisJZWxzZSBpZiAoZm5hbWVfbGVuID49IDcgJiYKKwkJ CSBzdHJjbXAoZm5hbWUgKyBmbmFtZV9sZW4gLSA3LCAiLnRhci5neiIpID09IDApCisJCSphbGdv cml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOworCWVsc2UgaWYgKGZuYW1lX2xlbiA+PSA4ICYm CisJCQkgc3RyY21wKGZuYW1lICsgZm5hbWVfbGVuIC0gOCwgIi50YXIubHo0IikgPT0gMCkKKwkJ KmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0xaNDsKKwllbHNlIGlmIChmbmFtZV9sZW4gPj0g OCAmJgorCQkJIHN0cmNtcChmbmFtZSArIGZuYW1lX2xlbiAtIDgsICIudGFyLnpzdCIpID09IDAp CisJCSphbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9aU1REOworCWVsc2UKKwkJcmV0dXJuIGZh bHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKIC8qCiAgKiBMb29rIHVwIGEgY29tcHJlc3Npb24g YWxnb3JpdGhtIGJ5IG5hbWUuIFJldHVybnMgdHJ1ZSBhbmQgc2V0cyAqYWxnb3JpdGhtCiAgKiBp ZiB0aGUgbmFtZSBpcyByZWNvZ25pemVkLiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS4KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1vbi9jb21wcmVzc2lvbi5oIGIvc3JjL2luY2x1ZGUvY29t bW9uL2NvbXByZXNzaW9uLmgKaW5kZXggNmM3NDViOTAwNjYuLmY5OWM3NDdjZGQzIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaAorKysgYi9zcmMvaW5jbHVkZS9j b21tb24vY29tcHJlc3Npb24uaApAQCAtNDEsNiArNDEsOCBAQCB0eXBlZGVmIHN0cnVjdCBwZ19j b21wcmVzc19zcGVjaWZpY2F0aW9uCiAKIGV4dGVybiB2b2lkIHBhcnNlX2NvbXByZXNzX29wdGlv bnMoY29uc3QgY2hhciAqb3B0aW9uLCBjaGFyICoqYWxnb3JpdGhtLAogCQkJCQkJCQkgICBjaGFy ICoqZGV0YWlsKTsKK2V4dGVybiBib29sIHBhcnNlX3Rhcl9jb21wcmVzc19hbGdvcml0aG0oY29u c3QgY2hhciAqZm5hbWUsCisJCQkJCQkJCQkJIHBnX2NvbXByZXNzX2FsZ29yaXRobSAqYWxnb3Jp dGhtKTsKIGV4dGVybiBib29sIHBhcnNlX2NvbXByZXNzX2FsZ29yaXRobShjaGFyICpuYW1lLCBw Z19jb21wcmVzc19hbGdvcml0aG0gKmFsZ29yaXRobSk7CiBleHRlcm4gY29uc3QgY2hhciAqZ2V0 X2NvbXByZXNzX2FsZ29yaXRobV9uYW1lKHBnX2NvbXByZXNzX2FsZ29yaXRobSBhbGdvcml0aG0p OwogCi0tIAoyLjQ3LjEKCg== --000000000000fbe6c0064d5deeae Content-Type: application/x-patch; name="v20-0002-pg_waldump-Preparatory-refactoring-for-tar-archi.patch" Content-Disposition: attachment; filename="v20-0002-pg_waldump-Preparatory-refactoring-for-tar-archi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxbdcjo1 RnJvbSA3YjM2ZjliZGViYWY5YmU3ZTVhZGI5YjhkYWMyNTM5NGNiNjExZDBiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbXVsIFN1bCA8c3VsYW11bEBnbWFpbC5jb20+CkRhdGU6IFRo dSwgMTkgTWFyIDIwMjYgMTU6NDM6MzkgKzA1MzAKU3ViamVjdDogW1BBVENIIHYyMCAyLzVdIHBn X3dhbGR1bXA6IFByZXBhcmF0b3J5IHJlZmFjdG9yaW5nIGZvciB0YXIgYXJjaGl2ZQogV0FMIGRl Y29kaW5nLgoKU2V2ZXJhbCByZWZhY3RvcmluZyBzdGVwcyBpbiBwcmVwYXJhdGlvbiBmb3IgYWRk aW5nIHRhciBhcmNoaXZlIFdBTApkZWNvZGluZyBzdXBwb3J0IHRvIHBnX3dhbGR1bXA6CgotIE1v dmUgWExvZ0R1bXBQcml2YXRlIGFuZCByZWxhdGVkIGRlY2xhcmF0aW9ucyBpbnRvIGEgbmV3IHBn X3dhbGR1bXAuaAogIGhlYWRlciwgYWxsb3dpbmcgYSBzZWNvbmQgc291cmNlIGZpbGUgdG8gc2hh cmUgdGhlbS4KCi0gRmFjdG9yIG91dCByZXF1aXJlZF9yZWFkX2xlbigpIHNvIHRoZSByZWFkLXNp emUgY2FsY3VsYXRpb24gY2FuIGJlCiAgcmV1c2VkIGZvciBib3RoIHJlZ3VsYXIgV0FMIGZpbGVz IGFuZCB0YXItYXJjaGl2ZWQgV0FMLgoKLSBNb3ZlIHRoZSBXQUwgc2VnbWVudCBzaXplIHZhcmlh YmxlIGludG8gWExvZ0R1bXBQcml2YXRlIGFuZCByZW5hbWUgaXQKICB0byBzZWdzaXplLCBtYWtp bmcgaXQgYWNjZXNzaWJsZSB0byB0aGUgYXJjaGl2ZSBzdHJlYW1lciBjb2RlLgoKQXV0aG9yOiBB bXVsIFN1bCA8c3VsYW11bEBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBSb2JlcnQgSGFhcyA8cm9i ZXJ0bWhhYXNAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogSmFrdWIgV2FydGFrIDxqYWt1Yi53YXJ0 YWtAZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IENoYW8gTGkgPGxpLmV2YW4uY2hhb0Bn bWFpbC5jb20+ClJldmlld2VkLWJ5OiBFdWxlciBUYXZlaXJhIDxldWxlckBldWxlcnRvLmNvbT4K UmV2aWV3ZWQtYnk6IEFuZHJldyBEdW5zdGFuIDxhbmRyZXdAZHVuc2xhbmUubmV0PgpkaXNjdXNz aW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBQUpfYjk0YnFkV04zaDJKLVB6enpRMk5wYndjdDVa UUhnZ25fUW9ZR2hDMnJuLT1XUUBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iaW4vcGdfd2FsZHVt cC9wZ193YWxkdW1wLmMgfCA3OCArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIHNy Yy9iaW4vcGdfd2FsZHVtcC9wZ193YWxkdW1wLmggfCAyNiArKysrKysrKysrKwogMiBmaWxlcyBj aGFuZ2VkLCA3MCBpbnNlcnRpb25zKCspLCAzNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvYmluL3BnX3dhbGR1bXAvcGdfd2FsZHVtcC5oCgpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ193YWxkdW1wL3BnX3dhbGR1bXAuYyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9wZ193YWxkdW1w LmMKaW5kZXggZjM0NDYzODVkNmEuLjVkMzFiMTVkYmQ4IDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X3dhbGR1bXAvcGdfd2FsZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9wZ193YWxkdW1w LmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgogI2luY2x1 ZGUgImNvbW1vbi9yZWxwYXRoLmgiCiAjaW5jbHVkZSAiZ2V0b3B0X2xvbmcuaCIKKyNpbmNsdWRl ICJwZ193YWxkdW1wLmgiCiAjaW5jbHVkZSAicm1ncmRlc2MuaCIKICNpbmNsdWRlICJzdG9yYWdl L2J1ZnBhZ2UuaCIKIApAQCAtNDMsMTQgKzQ0LDYgQEAgc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9t aWNfdCB0aW1lX3RvX3N0b3AgPSBmYWxzZTsKIAogc3RhdGljIGNvbnN0IFJlbEZpbGVMb2NhdG9y IGVtcHR5UmVsRmlsZUxvY2F0b3IgPSB7MCwgMCwgMH07CiAKLXR5cGVkZWYgc3RydWN0IFhMb2dE dW1wUHJpdmF0ZQotewotCVRpbWVMaW5lSUQJdGltZWxpbmU7Ci0JWExvZ1JlY1B0cglzdGFydHB0 cjsKLQlYTG9nUmVjUHRyCWVuZHB0cjsKLQlib29sCQllbmRwdHJfcmVhY2hlZDsKLX0gWExvZ0R1 bXBQcml2YXRlOwotCiB0eXBlZGVmIHN0cnVjdCBYTG9nRHVtcENvbmZpZwogewogCS8qIGRpc3Bs YXkgb3B0aW9ucyAqLwpAQCAtMzMzLDYgKzMyNiwzMiBAQCBpZGVudGlmeV90YXJnZXRfZGlyZWN0 b3J5KGNoYXIgKmRpcmVjdG9yeSwgY2hhciAqZm5hbWUsIGludCAqV2FsU2VnU3opCiAJcmV0dXJu IE5VTEw7CQkJCS8qIG5vdCByZWFjaGVkICovCiB9CiAKKy8qCisgKiBSZXR1cm5zIHRoZSBzaXpl IGluIGJ5dGVzIG9mIHRoZSBkYXRhIHRvIGJlIHJlYWQuIFJldHVybnMgLTEgaWYgdGhlIGVuZAor ICogcG9pbnQgaGFzIGFscmVhZHkgYmVlbiByZWFjaGVkLgorICovCitzdGF0aWMgaW5saW5lIGlu dAorcmVxdWlyZWRfcmVhZF9sZW4oWExvZ0R1bXBQcml2YXRlICpwcml2YXRlLCBYTG9nUmVjUHRy IHRhcmdldFBhZ2VQdHIsCisJCQkJICBpbnQgcmVxTGVuKQoreworCWludAkJCWNvdW50ID0gWExP R19CTENLU1o7CisKKwlpZiAoWExvZ1JlY1B0cklzVmFsaWQocHJpdmF0ZS0+ZW5kcHRyKSkKKwl7 CisJCWlmICh0YXJnZXRQYWdlUHRyICsgWExPR19CTENLU1ogPD0gcHJpdmF0ZS0+ZW5kcHRyKQor CQkJY291bnQgPSBYTE9HX0JMQ0tTWjsKKwkJZWxzZSBpZiAodGFyZ2V0UGFnZVB0ciArIHJlcUxl biA8PSBwcml2YXRlLT5lbmRwdHIpCisJCQljb3VudCA9IHByaXZhdGUtPmVuZHB0ciAtIHRhcmdl dFBhZ2VQdHI7CisJCWVsc2UKKwkJeworCQkJcHJpdmF0ZS0+ZW5kcHRyX3JlYWNoZWQgPSB0cnVl OworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCiAvKiBwZ193 YWxkdW1wJ3MgWExvZ1JlYWRlclJvdXRpbmUtPnNlZ21lbnRfb3BlbiBjYWxsYmFjayAqLwogc3Rh dGljIHZvaWQKIFdBTER1bXBPcGVuU2VnbWVudChYTG9nUmVhZGVyU3RhdGUgKnN0YXRlLCBYTG9n U2VnTm8gbmV4dFNlZ05vLApAQCAtMzkwLDIxICs0MDksMTIgQEAgV0FMRHVtcFJlYWRQYWdlKFhM b2dSZWFkZXJTdGF0ZSAqc3RhdGUsIFhMb2dSZWNQdHIgdGFyZ2V0UGFnZVB0ciwgaW50IHJlcUxl biwKIAkJCQlYTG9nUmVjUHRyIHRhcmdldFB0ciwgY2hhciAqcmVhZEJ1ZmYpCiB7CiAJWExvZ0R1 bXBQcml2YXRlICpwcml2YXRlID0gc3RhdGUtPnByaXZhdGVfZGF0YTsKLQlpbnQJCQljb3VudCA9 IFhMT0dfQkxDS1NaOworCWludAkJCWNvdW50ID0gcmVxdWlyZWRfcmVhZF9sZW4ocHJpdmF0ZSwg dGFyZ2V0UGFnZVB0ciwgcmVxTGVuKTsKIAlXQUxSZWFkRXJyb3IgZXJyaW5mbzsKIAotCWlmIChY TG9nUmVjUHRySXNWYWxpZChwcml2YXRlLT5lbmRwdHIpKQotCXsKLQkJaWYgKHRhcmdldFBhZ2VQ dHIgKyBYTE9HX0JMQ0tTWiA8PSBwcml2YXRlLT5lbmRwdHIpCi0JCQljb3VudCA9IFhMT0dfQkxD S1NaOwotCQllbHNlIGlmICh0YXJnZXRQYWdlUHRyICsgcmVxTGVuIDw9IHByaXZhdGUtPmVuZHB0 cikKLQkJCWNvdW50ID0gcHJpdmF0ZS0+ZW5kcHRyIC0gdGFyZ2V0UGFnZVB0cjsKLQkJZWxzZQot CQl7Ci0JCQlwcml2YXRlLT5lbmRwdHJfcmVhY2hlZCA9IHRydWU7Ci0JCQlyZXR1cm4gLTE7Ci0J CX0KLQl9CisJLyogQmFpbCBvdXQgaWYgdGhlIGNvdW50IHRvIGJlIHJlYWQgaXMgbm90IHZhbGlk ICovCisJaWYgKGNvdW50IDwgMCkKKwkJcmV0dXJuIC0xOwogCiAJaWYgKCFXQUxSZWFkKHN0YXRl LCByZWFkQnVmZiwgdGFyZ2V0UGFnZVB0ciwgY291bnQsIHByaXZhdGUtPnRpbWVsaW5lLAogCQkJ CSAmZXJyaW5mbykpCkBAIC04MDEsNyArODExLDYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCiAJWExvZ1JlY1B0cglmaXJzdF9yZWNvcmQ7CiAJY2hhcgkgICAqd2FsZGlyID0gTlVMTDsK IAljaGFyCSAgICplcnJvcm1zZzsKLQlpbnQJCQlXYWxTZWdTejsKIAogCXN0YXRpYyBzdHJ1Y3Qg b3B0aW9uIGxvbmdfb3B0aW9uc1tdID0gewogCQl7ImJrcC1kZXRhaWxzIiwgbm9fYXJndW1lbnQs IE5VTEwsICdiJ30sCkBAIC04NTUsNiArODY0LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCiAJbWVtc2V0KCZzdGF0cywgMCwgc2l6ZW9mKFhMb2dTdGF0cykpOwogCiAJcHJpdmF0ZS50 aW1lbGluZSA9IDE7CisJcHJpdmF0ZS5zZWdzaXplID0gMDsKIAlwcml2YXRlLnN0YXJ0cHRyID0g SW52YWxpZFhMb2dSZWNQdHI7CiAJcHJpdmF0ZS5lbmRwdHIgPSBJbnZhbGlkWExvZ1JlY1B0cjsK IAlwcml2YXRlLmVuZHB0cl9yZWFjaGVkID0gZmFsc2U7CkBAIC0xMTI4LDE4ICsxMTM4LDE4IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3Bl biBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIHdhbGRpcik7CiAJCX0KIAotCQl3YWxkaXIgPSBpZGVu dGlmeV90YXJnZXRfZGlyZWN0b3J5KHdhbGRpciwgZm5hbWUsICZXYWxTZWdTeik7CisJCXdhbGRp ciA9IGlkZW50aWZ5X3RhcmdldF9kaXJlY3Rvcnkod2FsZGlyLCBmbmFtZSwgJnByaXZhdGUuc2Vn c2l6ZSk7CiAJCWZkID0gb3Blbl9maWxlX2luX2RpcmVjdG9yeSh3YWxkaXIsIGZuYW1lKTsKIAkJ aWYgKGZkIDwgMCkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiIsIGZu YW1lKTsKIAkJY2xvc2UoZmQpOwogCiAJCS8qIHBhcnNlIHBvc2l0aW9uIGZyb20gZmlsZSAqLwot CQlYTG9nRnJvbUZpbGVOYW1lKGZuYW1lLCAmcHJpdmF0ZS50aW1lbGluZSwgJnNlZ25vLCBXYWxT ZWdTeik7CisJCVhMb2dGcm9tRmlsZU5hbWUoZm5hbWUsICZwcml2YXRlLnRpbWVsaW5lLCAmc2Vn bm8sIHByaXZhdGUuc2Vnc2l6ZSk7CiAKIAkJaWYgKCFYTG9nUmVjUHRySXNWYWxpZChwcml2YXRl LnN0YXJ0cHRyKSkKLQkJCVhMb2dTZWdOb09mZnNldFRvUmVjUHRyKHNlZ25vLCAwLCBXYWxTZWdT eiwgcHJpdmF0ZS5zdGFydHB0cik7Ci0JCWVsc2UgaWYgKCFYTEJ5dGVJblNlZyhwcml2YXRlLnN0 YXJ0cHRyLCBzZWdubywgV2FsU2VnU3opKQorCQkJWExvZ1NlZ05vT2Zmc2V0VG9SZWNQdHIoc2Vn bm8sIDAsIHByaXZhdGUuc2Vnc2l6ZSwgcHJpdmF0ZS5zdGFydHB0cik7CisJCWVsc2UgaWYgKCFY TEJ5dGVJblNlZyhwcml2YXRlLnN0YXJ0cHRyLCBzZWdubywgcHJpdmF0ZS5zZWdzaXplKSkKIAkJ ewogCQkJcGdfbG9nX2Vycm9yKCJzdGFydCBXQUwgbG9jYXRpb24gJVgvJTA4WCBpcyBub3QgaW5z aWRlIGZpbGUgXCIlc1wiIiwKIAkJCQkJCSBMU05fRk9STUFUX0FSR1MocHJpdmF0ZS5zdGFydHB0 ciksCkBAIC0xMTQ5LDcgKzExNTksNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAog CQkvKiBubyBzZWNvbmQgZmlsZSBzcGVjaWZpZWQsIHNldCBlbmQgcG9zaXRpb24gKi8KIAkJaWYg KCEob3B0aW5kICsgMSA8IGFyZ2MpICYmICFYTG9nUmVjUHRySXNWYWxpZChwcml2YXRlLmVuZHB0 cikpCi0JCQlYTG9nU2VnTm9PZmZzZXRUb1JlY1B0cihzZWdubyArIDEsIDAsIFdhbFNlZ1N6LCBw cml2YXRlLmVuZHB0cik7CisJCQlYTG9nU2VnTm9PZmZzZXRUb1JlY1B0cihzZWdubyArIDEsIDAs IHByaXZhdGUuc2Vnc2l6ZSwgcHJpdmF0ZS5lbmRwdHIpOwogCiAJCS8qIHBhcnNlIEVORFNFRyBp ZiBwYXNzZWQgKi8KIAkJaWYgKG9wdGluZCArIDEgPCBhcmdjKQpAQCAtMTE2NSwxNCArMTE3NSwx NCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCWNsb3NlKGZkKTsKIAogCQkJLyog cGFyc2UgcG9zaXRpb24gZnJvbSBmaWxlICovCi0JCQlYTG9nRnJvbUZpbGVOYW1lKGZuYW1lLCAm cHJpdmF0ZS50aW1lbGluZSwgJmVuZHNlZ25vLCBXYWxTZWdTeik7CisJCQlYTG9nRnJvbUZpbGVO YW1lKGZuYW1lLCAmcHJpdmF0ZS50aW1lbGluZSwgJmVuZHNlZ25vLCBwcml2YXRlLnNlZ3NpemUp OwogCiAJCQlpZiAoZW5kc2Vnbm8gPCBzZWdubykKIAkJCQlwZ19mYXRhbCgiRU5EU0VHICVzIGlz IGJlZm9yZSBTVEFSVFNFRyAlcyIsCiAJCQkJCQkgYXJndltvcHRpbmQgKyAxXSwgYXJndltvcHRp bmRdKTsKIAogCQkJaWYgKCFYTG9nUmVjUHRySXNWYWxpZChwcml2YXRlLmVuZHB0cikpCi0JCQkJ WExvZ1NlZ05vT2Zmc2V0VG9SZWNQdHIoZW5kc2Vnbm8gKyAxLCAwLCBXYWxTZWdTeiwKKwkJCQlY TG9nU2VnTm9PZmZzZXRUb1JlY1B0cihlbmRzZWdubyArIDEsIDAsIHByaXZhdGUuc2Vnc2l6ZSwK IAkJCQkJCQkJCQlwcml2YXRlLmVuZHB0cik7CiAKIAkJCS8qIHNldCBzZWdubyB0byBlbmRzZWdu byBmb3IgY2hlY2sgb2YgLS1lbmQgKi8KQEAgLTExODAsOCArMTE5MCw4IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogCQl9CiAKIAotCQlpZiAoIVhMQnl0ZUluU2VnKHByaXZhdGUuZW5k cHRyLCBzZWdubywgV2FsU2VnU3opICYmCi0JCQlwcml2YXRlLmVuZHB0ciAhPSAoc2Vnbm8gKyAx KSAqIFdhbFNlZ1N6KQorCQlpZiAoIVhMQnl0ZUluU2VnKHByaXZhdGUuZW5kcHRyLCBzZWdubywg cHJpdmF0ZS5zZWdzaXplKSAmJgorCQkJcHJpdmF0ZS5lbmRwdHIgIT0gKHNlZ25vICsgMSkgKiBw cml2YXRlLnNlZ3NpemUpCiAJCXsKIAkJCXBnX2xvZ19lcnJvcigiZW5kIFdBTCBsb2NhdGlvbiAl WC8lMDhYIGlzIG5vdCBpbnNpZGUgZmlsZSBcIiVzXCIiLAogCQkJCQkJIExTTl9GT1JNQVRfQVJH Uyhwcml2YXRlLmVuZHB0ciksCkBAIC0xMTkwLDcgKzEyMDAsNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAkJfQogCX0KIAllbHNlCi0JCXdhbGRpciA9IGlkZW50aWZ5X3RhcmdldF9k aXJlY3Rvcnkod2FsZGlyLCBOVUxMLCAmV2FsU2VnU3opOworCQl3YWxkaXIgPSBpZGVudGlmeV90 YXJnZXRfZGlyZWN0b3J5KHdhbGRpciwgTlVMTCwgJnByaXZhdGUuc2Vnc2l6ZSk7CiAKIAkvKiB3 ZSBkb24ndCBrbm93IHdoYXQgdG8gcHJpbnQgKi8KIAlpZiAoIVhMb2dSZWNQdHJJc1ZhbGlkKHBy aXZhdGUuc3RhcnRwdHIpKQpAQCAtMTIwMyw3ICsxMjEzLDcgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAKIAkvKiB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZCwgc3RhcnQgcmVhZGlu ZyAqLwogCXhsb2dyZWFkZXJfc3RhdGUgPQotCQlYTG9nUmVhZGVyQWxsb2NhdGUoV2FsU2VnU3os IHdhbGRpciwKKwkJWExvZ1JlYWRlckFsbG9jYXRlKHByaXZhdGUuc2Vnc2l6ZSwgd2FsZGlyLAog CQkJCQkJICAgWExfUk9VVElORSgucGFnZV9yZWFkID0gV0FMRHVtcFJlYWRQYWdlLAogCQkJCQkJ CQkJICAuc2VnbWVudF9vcGVuID0gV0FMRHVtcE9wZW5TZWdtZW50LAogCQkJCQkJCQkJICAuc2Vn bWVudF9jbG9zZSA9IFdBTER1bXBDbG9zZVNlZ21lbnQpLApAQCAtMTIyNCw3ICsxMjM0LDcgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJICogYSBzZWdtZW50IChlLmcuIHdlIHdlcmUg dXNlZCBpbiBmaWxlIG1vZGUpLgogCSAqLwogCWlmIChmaXJzdF9yZWNvcmQgIT0gcHJpdmF0ZS5z dGFydHB0ciAmJgotCQlYTG9nU2VnbWVudE9mZnNldChwcml2YXRlLnN0YXJ0cHRyLCBXYWxTZWdT eikgIT0gMCkKKwkJWExvZ1NlZ21lbnRPZmZzZXQocHJpdmF0ZS5zdGFydHB0ciwgcHJpdmF0ZS5z ZWdzaXplKSAhPSAwKQogCQlwZ19sb2dfaW5mbyhuZ2V0dGV4dCgiZmlyc3QgcmVjb3JkIGlzIGFm dGVyICVYLyUwOFgsIGF0ICVYLyUwOFgsIHNraXBwaW5nIG92ZXIgJXUgYnl0ZSIsCiAJCQkJCQkJ ICJmaXJzdCByZWNvcmQgaXMgYWZ0ZXIgJVgvJTA4WCwgYXQgJVgvJTA4WCwgc2tpcHBpbmcgb3Zl ciAldSBieXRlcyIsCiAJCQkJCQkJIChmaXJzdF9yZWNvcmQgLSBwcml2YXRlLnN0YXJ0cHRyKSks CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3dhbGR1bXAvcGdfd2FsZHVtcC5oIGIvc3JjL2Jpbi9w Z193YWxkdW1wL3BnX3dhbGR1bXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uMDEzYjA1MTUwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3dhbGR1bXAv cGdfd2FsZHVtcC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IHBnX3dhbGR1bXAuaCAtIGRlY29kZSBhbmQgZGlzcGxheSBXQUwKKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURF TlRJRklDQVRJT04KKyAqCQkgIHNyYy9iaW4vcGdfd2FsZHVtcC9wZ193YWxkdW1wLmgKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHX1dBTERVTVBfSAorI2RlZmluZSBQR19XQUxE VU1QX0gKKworI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgorCisvKiBDb250YWlucyB0aGUg bmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGRyaXZlIFdBTCBkZWNvZGluZyAqLwordHlwZWRlZiBz dHJ1Y3QgWExvZ0R1bXBQcml2YXRlCit7CisJVGltZUxpbmVJRAl0aW1lbGluZTsKKwlpbnQJCQlz ZWdzaXplOworCVhMb2dSZWNQdHIJc3RhcnRwdHI7CisJWExvZ1JlY1B0cgllbmRwdHI7CisJYm9v bAkJZW5kcHRyX3JlYWNoZWQ7Cit9IFhMb2dEdW1wUHJpdmF0ZTsKKworI2VuZGlmCQkJCQkJCS8q IFBHX1dBTERVTVBfSCAqLwotLSAKMi40Ny4xCgo= --000000000000fbe6c0064d5deeae Content-Type: application/x-patch; name="v20-0003-pg_waldump-Add-support-for-reading-WAL-from-tar-.patch" Content-Disposition: attachment; filename="v20-0003-pg_waldump-Add-support-for-reading-WAL-from-tar-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxbdgu02 RnJvbSA0YzE5MWIxY2JlZDdlYWExOWQ1ZWNmZjMwNzJjZTgwNzk0M2ZmZGYxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbXVsIFN1bCA8c3VsYW11bEBnbWFpbC5jb20+CkRhdGU6IFRo dSwgMTkgTWFyIDIwMjYgMTU6NDM6NDYgKzA1MzAKU3ViamVjdDogW1BBVENIIHYyMCAzLzVdIHBn X3dhbGR1bXA6IEFkZCBzdXBwb3J0IGZvciByZWFkaW5nIFdBTCBmcm9tIHRhcgogYXJjaGl2ZXMK CnBnX3dhbGR1bXAgY2FuIG5vdyBhY2NlcHQgdGhlIHBhdGggdG8gYSB0YXIgYXJjaGl2ZSAob3B0 aW9uYWxseQpjb21wcmVzc2VkIHdpdGggZ3ppcCwgbHo0LCBvciB6c3RkKSBjb250YWluaW5nIFdB TCBmaWxlcyBhbmQgZGVjb2RlCnRoZW0uICBUaGlzIHdhcyBhZGRlZCBwcmltYXJpbHkgZm9yIHBn X3ZlcmlmeWJhY2t1cCwgd2hpY2ggcHJldmlvdXNseQpoYWQgdG8gc2tpcCBXQUwgcGFyc2luZyBm b3IgdGFyLWZvcm1hdCBiYWNrdXBzLgoKVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIGV4aXN0 aW5nIGFyY2hpdmUgc3RyZWFtZXIgaW5mcmFzdHJ1Y3R1cmUKd2l0aCBhIGhhc2ggdGFibGUgdG8g dHJhY2sgV0FMIHNlZ21lbnRzIHJlYWQgZnJvbSB0aGUgYXJjaGl2ZS4gIElmIFdBTApmaWxlcyB3 aXRoaW4gdGhlIGFyY2hpdmUgYXJlIG5vdCBpbiBzZXF1ZW50aWFsIG9yZGVyLCBvdXQtb2Ytb3Jk ZXIKc2VnbWVudHMgYXJlIHdyaXR0ZW4gdG8gYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IChjcmVhdGVk IHZpYSBta2R0ZW1wIHVuZGVyCiRUTVBESVIgb3IgdGhlIGFyY2hpdmUncyBkaXJlY3RvcnkpIGFu ZCByZWFkIGJhY2sgd2hlbiBuZWVkZWQuICBBbgphdGV4aXQgY2FsbGJhY2sgZW5zdXJlcyB0aGUg dGVtcG9yYXJ5IGRpcmVjdG9yeSBpcyBjbGVhbmVkIHVwLgoKVGhlIC0tZm9sbG93IG9wdGlvbiBp cyBub3Qgc3VwcG9ydGVkIHdoZW4gcmVhZGluZyBmcm9tIGEgdGFyIGFyY2hpdmUuCgpBdXRob3I6 IEFtdWwgU3VsIDxzdWxhbXVsQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IFJvYmVydCBIYWFzIDxy b2JlcnRtaGFhc0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBKYWt1YiBXYXJ0YWsgPGpha3ViLndh cnRha0BlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1ieTogQ2hhbyBMaSA8bGkuZXZhbi5jaGFv QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEV1bGVyIFRhdmVpcmEgPGV1bGVyQGV1bGVydG8uY29t PgpSZXZpZXdlZC1ieTogQW5kcmV3IER1bnN0YW4gPGFuZHJld0BkdW5zbGFuZS5uZXQ+CmRpc2N1 c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FBSl9iOTRicWRXTjNoMkotUHp6elEyTnBid2N0 NVpRSGdnbl9Rb1lHaEMycm4tPVdRQG1haWwuZ21haWwuY29tCi0tLQogZG9jL3NyYy9zZ21sL3Jl Zi9wZ193YWxkdW1wLnNnbWwgICAgIHwgIDIzICstCiBzcmMvYmluL3BnX3dhbGR1bXAvTWFrZWZp bGUgICAgICAgICAgfCAgIDcgKy0KIHNyYy9iaW4vcGdfd2FsZHVtcC9hcmNoaXZlX3dhbGR1bXAu YyB8IDg0NyArKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iaW4vcGdfd2FsZHVtcC9t ZXNvbi5idWlsZCAgICAgICB8ICAgNCArLQogc3JjL2Jpbi9wZ193YWxkdW1wL3BnX3dhbGR1bXAu YyAgICAgIHwgMjkzICsrKysrKystLQogc3JjL2Jpbi9wZ193YWxkdW1wL3BnX3dhbGR1bXAuaCAg ICAgIHwgIDUwICsrCiBzcmMvYmluL3BnX3dhbGR1bXAvdC8wMDFfYmFzaWMucGwgICAgfCAyNDIg KysrKysrLS0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICB8ICAgNCArCiA4 IGZpbGVzIGNoYW5nZWQsIDEzNDIgaW5zZXJ0aW9ucygrKSwgMTI4IGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfd2FsZHVtcC9hcmNoaXZlX3dhbGR1bXAuYwoKZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfd2FsZHVtcC5zZ21sIGIvZG9jL3NyYy9zZ21s L3JlZi9wZ193YWxkdW1wLnNnbWwKaW5kZXggZDE3MTVmZjUxMjQuLjliYmI0YmQ1NzcyIDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3dhbGR1bXAuc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvcmVmL3BnX3dhbGR1bXAuc2dtbApAQCAtMTQxLDEzICsxNDEsMjEgQEAgUG9zdGdyZVNRTCBk b2N1bWVudGF0aW9uCiAgICAgICA8dGVybT48b3B0aW9uPi0tcGF0aD08cmVwbGFjZWFibGU+cGF0 aDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAgICAgPGxpc3RpdGVtPgogICAgICAg IDxwYXJhPgotICAgICAgICBTcGVjaWZpZXMgYSBkaXJlY3RvcnkgdG8gc2VhcmNoIGZvciBXQUwg c2VnbWVudCBmaWxlcyBvciBhCi0gICAgICAgIGRpcmVjdG9yeSB3aXRoIGEgPGxpdGVyYWw+cGdf d2FsPC9saXRlcmFsPiBzdWJkaXJlY3RvcnkgdGhhdAorICAgICAgICBTcGVjaWZpZXMgYSB0YXIg YXJjaGl2ZSBvciBhIGRpcmVjdG9yeSB0byBzZWFyY2ggZm9yIFdBTCBzZWdtZW50IGZpbGVzCisg ICAgICAgIG9yIGEgZGlyZWN0b3J5IHdpdGggYSA8bGl0ZXJhbD5wZ193YWw8L2xpdGVyYWw+IHN1 YmRpcmVjdG9yeSB0aGF0CiAgICAgICAgIGNvbnRhaW5zIHN1Y2ggZmlsZXMuICBUaGUgZGVmYXVs dCBpcyB0byBzZWFyY2ggaW4gdGhlIGN1cnJlbnQKICAgICAgICAgZGlyZWN0b3J5LCB0aGUgPGxp dGVyYWw+cGdfd2FsPC9saXRlcmFsPiBzdWJkaXJlY3Rvcnkgb2YgdGhlCiAgICAgICAgIGN1cnJl bnQgZGlyZWN0b3J5LCBhbmQgdGhlIDxsaXRlcmFsPnBnX3dhbDwvbGl0ZXJhbD4gc3ViZGlyZWN0 b3J5CiAgICAgICAgIG9mIDxlbnZhcj5QR0RBVEE8L2VudmFyPi4KICAgICAgICA8L3BhcmE+Cisg ICAgICAgPHBhcmE+CisgICAgICAgIElmIGEgdGFyIGFyY2hpdmUgaXMgcHJvdmlkZWQgYW5kIGl0 cyBXQUwgc2VnbWVudCBmaWxlcyBhcmUgbm90IGluCisgICAgICAgIHNlcXVlbnRpYWwgb3JkZXIs IHRob3NlIGZpbGVzIHdpbGwgYmUgd3JpdHRlbiB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkKKyAg ICAgICAgbmFtZWQgc3RhcnRpbmcgd2l0aCA8ZmlsZW5hbWU+d2FsZHVtcF90bXA8L2ZpbGVuYW1l Pi4gVGhpcyBkaXJlY3Rvcnkgd2lsbCBiZQorICAgICAgICBjcmVhdGVkIGluc2lkZSB0aGUgZGly ZWN0b3J5IHNwZWNpZmllZCBieSB0aGUgPGVudmFyPlRNUERJUjwvZW52YXI+CisgICAgICAgIGVu dmlyb25tZW50IHZhcmlhYmxlIGlmIGl0IGlzIHNldDsgb3RoZXJ3aXNlLCBpdCB3aWxsIGJlIGNy ZWF0ZWQgd2l0aGluCisgICAgICAgIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgdGFyIGFyY2hp dmUuCisgICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50 cnk+CiAKQEAgLTM4Myw2ICszOTEsMTcgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAg IDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJs aXN0ZW50cnk+CisgICAgPHRlcm0+PGVudmFyPlRNUERJUjwvZW52YXI+PC90ZXJtPgorICAgIDxs aXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBEaXJlY3RvcnkgaW4gd2hpY2ggdG8gY3JlYXRl IHRlbXBvcmFyeSBmaWxlcyB3aGVuIHJlYWRpbmcgV0FMIGZyb20gYQorICAgICAgdGFyIGFyY2hp dmUgd2l0aCBvdXQtb2Ytb3JkZXIgc2VnbWVudCBmaWxlcy4gSWYgbm90IHNldCwgdGhlIHRlbXBv cmFyeQorICAgICAgZGlyZWN0b3J5IGlzIGNyZWF0ZWQgd2l0aGluIHRoZSBzYW1lIGRpcmVjdG9y eSBhcyB0aGUgdGFyIGFyY2hpdmUuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAg PC92YXJsaXN0ZW50cnk+CiAgIDwvdmFyaWFibGVsaXN0PgogIDwvcmVmc2VjdDE+CiAKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfd2FsZHVtcC9NYWtlZmlsZSBiL3NyYy9iaW4vcGdfd2FsZHVtcC9N YWtlZmlsZQppbmRleCA0YzFlZTY0OTUwMS4uYWFiYjg3NTY2YTIgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfd2FsZHVtcC9NYWtlZmlsZQorKysgYi9zcmMvYmluL3BnX3dhbGR1bXAvTWFrZWZpbGUK QEAgLTMsNiArMyw5IEBACiBQR0ZJTEVERVNDID0gInBnX3dhbGR1bXAgLSBkZWNvZGUgYW5kIGRp c3BsYXkgV0FMIgogUEdBUFBJQ09OPXdpbjMyCiAKKyMgbWFrZSB0aGVzZSBhdmFpbGFibGUgdG8g VEFQIHRlc3Qgc2NyaXB0cworZXhwb3J0IFRBUgorCiBzdWJkaXIgPSBzcmMvYmluL3BnX3dhbGR1 bXAKIHRvcF9idWlsZGRpciA9IC4uLy4uLy4uCiBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMv TWFrZWZpbGUuZ2xvYmFsCkBAIC0xMCwxMyArMTMsMTUgQEAgaW5jbHVkZSAkKHRvcF9idWlsZGRp cikvc3JjL01ha2VmaWxlLmdsb2JhbAogT0JKUyA9IFwKIAkkKFJNR1JERVNDT0JKUykgXAogCSQo V0lOMzJSRVMpIFwKKwlhcmNoaXZlX3dhbGR1bXAubyBcCiAJY29tcGF0Lm8gXAogCXBnX3dhbGR1 bXAubyBcCiAJcm1ncmRlc2MubyBcCiAJeGxvZ3JlYWRlci5vIFwKIAl4bG9nc3RhdHMubwogCi1v dmVycmlkZSBDUFBGTEFHUyA6PSAtREZST05URU5EICQoQ1BQRkxBR1MpCitvdmVycmlkZSBDUFBG TEFHUyA6PSAtREZST05URU5EIC1JJChsaWJwcV9zcmNkaXIpICQoQ1BQRkxBR1MpCitMREZMQUdT X0lOVEVSTkFMICs9IC1MJCh0b3BfYnVpbGRkaXIpL3NyYy9mZV91dGlscyAtbHBnZmV1dGlscwog CiBSTUdSREVTQ1NPVVJDRVMgPSAkKHNvcnQgJChub3RkaXIgJCh3aWxkY2FyZCAkKHRvcF9zcmNk aXIpL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy8qZGVzYyouYykpKQogUk1HUkRFU0NPQkpT ID0gJChwYXRzdWJzdCAlLmMsJS5vLCQoUk1HUkRFU0NTT1VSQ0VTKSkKZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfd2FsZHVtcC9hcmNoaXZlX3dhbGR1bXAuYyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9h cmNoaXZlX3dhbGR1bXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u OWNiY2FlM2U4YWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3dhbGR1bXAvYXJjaGl2 ZV93YWxkdW1wLmMKQEAgLTAsMCArMSw4NDcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IGFyY2hpdmVfd2FsZHVtcC5jCisgKgkJQSBnZW5lcmljIGZhY2lsaXR5IGZvciByZWFkaW5nIFdB TCBkYXRhIGZyb20gdGFyIGFyY2hpdmVzIHZpYSBhcmNoaXZlCisgKgkJc3RyZWFtZXIuCisgKgor ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkJc3JjL2Jpbi9wZ193YWxkdW1w L2FyY2hpdmVfd2FsZHVtcC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1 ZGUgInBvc3RncmVzX2ZlLmgiCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImFj Y2Vzcy94bG9nX2ludGVybmFsLmgiCisjaW5jbHVkZSAiY29tbW9uL2ZpbGVfcGVybS5oIgorI2lu Y2x1ZGUgImNvbW1vbi9oYXNoZm4uaCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgorI2lu Y2x1ZGUgImZlX3V0aWxzL3NpbXBsZV9saXN0LmgiCisjaW5jbHVkZSAicGdfd2FsZHVtcC5oIgor CisvKgorICogSG93IG1hbnkgYnl0ZXMgc2hvdWxkIHdlIHRyeSB0byByZWFkIGZyb20gYSBmaWxl IGF0IG9uY2U/CisgKi8KKyNkZWZpbmUgUkVBRF9DSFVOS19TSVpFCQkJCSgxMjggKiAxMDI0KQor CisvKiBUZW1wb3JhcnkgZXhwb3J0ZWQgV0FMIGZpbGUgZGlyZWN0b3J5ICovCitjaGFyCSAgICpU bXBXYWxTZWdEaXIgPSBOVUxMOworCisvKgorICogQ2hlY2sgaWYgdGhlIHN0YXJ0IHNlZ21lbnQg bnVtYmVyIGlzIHplcm87IHRoaXMgaW5kaWNhdGVzIGEgcmVxdWVzdCB0byByZWFkCisgKiBhbnkg V0FMIGZpbGUuCisgKi8KKyNkZWZpbmUgUkVBRF9BTllfV0FMKHByaXZhdGVJbmZvKQkoKHByaXZh dGVJbmZvKS0+c3RhcnRfc2Vnbm8gPT0gMCkKKworLyoKKyAqIEhhc2ggZW50cnkgcmVwcmVzZW50 aW5nIGEgV0FMIHNlZ21lbnQgcmV0cmlldmVkIGZyb20gdGhlIGFyY2hpdmUuCisgKgorICogV2hp bGUgV0FMIHNlZ21lbnRzIGFyZSB0eXBpY2FsbHkgcmVhZCBzZXF1ZW50aWFsbHksIGluZGl2aWR1 YWwgZW50cmllcworICogbWFpbnRhaW4gdGhlaXIgb3duIGJ1ZmZlcnMgZm9yIHRoZSBmb2xsb3dp bmcgcmVhc29uczoKKyAqCisgKiAxLiBCb3VuZGFyeSBIYW5kbGluZzogVGhlIGFyY2hpdmUgc3Ry ZWFtZXIgcHJvdmlkZXMgYSBjb250aW51b3VzIGJ5dGUKKyAqIHN0cmVhbS4gQSBzaW5nbGUgc3Ry ZWFtaW5nIGNodW5rIG1heSBjb250YWluIHRoZSBlbmQgb2Ygb25lIFdBTCBzZWdtZW50CisgKiBh bmQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0LiBTZXBhcmF0ZSBidWZmZXJzIGFsbG93IHVzIHRvIGVh c2lseQorICogcGFydGl0aW9uIGFuZCB0cmFjayB0aGVzZSBieXRlcyBieSB0aGVpciByZXNwZWN0 aXZlIHNlZ21lbnRzLgorICoKKyAqIDIuIE91dC1vZi1PcmRlciBTdXBwb3J0OiBEZWRpY2F0ZWQg YnVmZmVycyBzaW1wbGlmeSBsb2dpYyB3aGVuIHNlZ21lbnRzCisgKiBhcmUgYXJjaGl2ZWQgb3Ig cmV0cmlldmVkIG91dCBvZiBzZXF1ZW5jZS4KKyAqCisgKiBUbyBtaW5pbWl6ZSB0aGUgbWVtb3J5 IGZvb3RwcmludCwgZW50cmllcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBidWZmZXJzIGFyZQorICog ZnJlZWQgaW1tZWRpYXRlbHkgb25jZSBjb25zdW1lZC4gU2luY2UgcGdfd2FsZHVtcCBkb2VzIG5v dCByZXF1ZXN0IHRoZSBzYW1lCisgKiBieXRlcyB0d2ljZSwgYSBzZWdtZW50IGlzIGRpc2NhcmRl ZCBhcyBzb29uIGFzIHBnX3dhbGR1bXAgbW92ZXMgcGFzdCBpdC4KKyAqLwordHlwZWRlZiBzdHJ1 Y3QgQXJjaGl2ZWRXQUxGaWxlCit7CisJdWludDMyCQlzdGF0dXM7CQkJLyogaGFzaCBzdGF0dXMg Ki8KKwljb25zdCBjaGFyICpmbmFtZTsJCQkvKiBoYXNoIGtleTogV0FMIHNlZ21lbnQgbmFtZSAq LworCisJU3RyaW5nSW5mbwlidWY7CQkJLyogaG9sZHMgV0FMIGJ5dGVzIHJlYWQgZnJvbSBhcmNo aXZlICovCisJYm9vbAkJc3BpbGxlZDsJCS8qIHRydWUgaWYgdGhlIFdBTCBkYXRhIHdhcyBzcGls bGVkIHRvIGEKKwkJCQkJCQkJICogdGVtcG9yYXJ5IGZpbGUgKi8KKworCWludAkJCXJlYWRfbGVu OwkJLyogdG90YWwgYnl0ZXMgb2YgYSBXQUwgcmVhZCBmcm9tIGFyY2hpdmUgKi8KK30gQXJjaGl2 ZWRXQUxGaWxlOworCitzdGF0aWMgdWludDMyIGhhc2hfc3RyaW5nX3BvaW50ZXIoY29uc3QgY2hh ciAqcyk7CisjZGVmaW5lIFNIX1BSRUZJWAkJCQlBcmNoaXZlZFdBTAorI2RlZmluZSBTSF9FTEVN RU5UX1RZUEUJCQlBcmNoaXZlZFdBTEZpbGUKKyNkZWZpbmUgU0hfS0VZX1RZUEUJCQkJY29uc3Qg Y2hhciAqCisjZGVmaW5lIFNIX0tFWQkJCQkJZm5hbWUKKyNkZWZpbmUgU0hfSEFTSF9LRVkodGIs IGtleSkJaGFzaF9zdHJpbmdfcG9pbnRlcihrZXkpCisjZGVmaW5lIFNIX0VRVUFMKHRiLCBhLCBi KQkJKHN0cmNtcChhLCBiKSA9PSAwKQorI2RlZmluZSBTSF9TQ09QRQkJCQlzdGF0aWMgaW5saW5l CisjZGVmaW5lIFNIX1JBV19BTExPQ0FUT1IJCXBnX21hbGxvYzAKKyNkZWZpbmUgU0hfREVDTEFS RQorI2RlZmluZSBTSF9ERUZJTkUKKyNpbmNsdWRlICJsaWIvc2ltcGxlaGFzaC5oIgorCit0eXBl ZGVmIHN0cnVjdCBhc3RyZWFtZXJfd2FsZHVtcAoreworCWFzdHJlYW1lcgliYXNlOworCVhMb2dE dW1wUHJpdmF0ZSAqcHJpdmF0ZUluZm87Cit9IGFzdHJlYW1lcl93YWxkdW1wOworCitzdGF0aWMg QXJjaGl2ZWRXQUxGaWxlICpnZXRfYXJjaGl2ZV93YWxfZW50cnkoY29uc3QgY2hhciAqZm5hbWUs CisJCQkJCQkJCQkJCSAgWExvZ0R1bXBQcml2YXRlICpwcml2YXRlSW5mbywKKwkJCQkJCQkJCQkJ ICBpbnQgV2FsU2VnU3opOworc3RhdGljIGludAlyZWFkX2FyY2hpdmVfZmlsZShYTG9nRHVtcFBy aXZhdGUgKnByaXZhdGVJbmZvLCBTaXplIGNvdW50KTsKK3N0YXRpYyB2b2lkIHNldHVwX3RtcHdh bF9kaXIoY29uc3QgY2hhciAqd2FsZGlyKTsKK3N0YXRpYyB2b2lkIGNsZWFudXBfdG1wd2FsX2Rp cl9hdGV4aXQodm9pZCk7CisKK3N0YXRpYyBGSUxFICpwcmVwYXJlX3RtcF93cml0ZShjb25zdCBj aGFyICpmbmFtZSk7CitzdGF0aWMgdm9pZCBwZXJmb3JtX3RtcF93cml0ZShjb25zdCBjaGFyICpm bmFtZSwgU3RyaW5nSW5mbyBidWYsIEZJTEUgKmZpbGUpOworCitzdGF0aWMgYXN0cmVhbWVyICph c3RyZWFtZXJfd2FsZHVtcF9uZXcoWExvZ0R1bXBQcml2YXRlICpwcml2YXRlSW5mbyk7CitzdGF0 aWMgdm9pZCBhc3RyZWFtZXJfd2FsZHVtcF9jb250ZW50KGFzdHJlYW1lciAqc3RyZWFtZXIsCisJ CQkJCQkJCQkgIGFzdHJlYW1lcl9tZW1iZXIgKm1lbWJlciwKKwkJCQkJCQkJCSAgY29uc3QgY2hh ciAqZGF0YSwgaW50IGxlbiwKKwkJCQkJCQkJCSAgYXN0cmVhbWVyX2FyY2hpdmVfY29udGV4dCBj b250ZXh0KTsKK3N0YXRpYyB2b2lkIGFzdHJlYW1lcl93YWxkdW1wX2ZpbmFsaXplKGFzdHJlYW1l ciAqc3RyZWFtZXIpOworc3RhdGljIHZvaWQgYXN0cmVhbWVyX3dhbGR1bXBfZnJlZShhc3RyZWFt ZXIgKnN0cmVhbWVyKTsKKworc3RhdGljIGJvb2wgbWVtYmVyX2lzX3dhbF9maWxlKGFzdHJlYW1l cl93YWxkdW1wICpteXN0cmVhbWVyLAorCQkJCQkJCSAgIGFzdHJlYW1lcl9tZW1iZXIgKm1lbWJl ciwKKwkJCQkJCQkgICBjaGFyICoqZm5hbWUpOworCitzdGF0aWMgY29uc3QgYXN0cmVhbWVyX29w cyBhc3RyZWFtZXJfd2FsZHVtcF9vcHMgPSB7CisJLmNvbnRlbnQgPSBhc3RyZWFtZXJfd2FsZHVt cF9jb250ZW50LAorCS5maW5hbGl6ZSA9IGFzdHJlYW1lcl93YWxkdW1wX2ZpbmFsaXplLAorCS5m cmVlID0gYXN0cmVhbWVyX3dhbGR1bXBfZnJlZQorfTsKKworLyoKKyAqIEluaXRpYWxpemVzIHRo ZSB0YXIgYXJjaGl2ZSByZWFkZXI6IG9wZW5zIHRoZSBhcmNoaXZlLCBidWlsZHMgYSBoYXNoIHRh YmxlCisgKiBmb3IgV0FMIGVudHJpZXMsIHJlYWRzIGFoZWFkIHVudGlsIGEgZnVsbCBXQUwgcGFn ZSBoZWFkZXIgaXMgYXZhaWxhYmxlIHRvCisgKiBkZXRlcm1pbmUgdGhlIFdBTCBzZWdtZW50IHNp emUsIGFuZCBjb21wdXRlcyBzdGFydC9lbmQgc2VnbWVudCBudW1iZXJzIGZvcgorICogZmlsdGVy aW5nLiAgSXQgYWxzbyBzZXRzIHVwIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3Igb3V0LW9mLW9y ZGVyIFdBTCBkYXRhCisgKiBhbmQgcmVnaXN0ZXJzIGFuIGF0ZXhpdCBjYWxsYmFjayB0byBjbGVh biBpdCB1cC4KKyAqLwordm9pZAoraW5pdF9hcmNoaXZlX3JlYWRlcihYTG9nRHVtcFByaXZhdGUg KnByaXZhdGVJbmZvLCBjb25zdCBjaGFyICp3YWxkaXIsCisJCQkJCWludCAqV2FsU2VnU3osIHBn X2NvbXByZXNzX2FsZ29yaXRobSBjb21wcmVzc2lvbikKK3sKKwlpbnQJCQlmZDsKKwlhc3RyZWFt ZXIgICpzdHJlYW1lcjsKKwlBcmNoaXZlZFdBTEZpbGUgKmVudHJ5ID0gTlVMTDsKKwlYTG9nTG9u Z1BhZ2VIZWFkZXIgbG9uZ2hkcjsKKwlYTG9nU2VnTm8Jc2Vnbm87CisJVGltZUxpbmVJRAl0aW1l bGluZTsKKworCS8qIE9wZW4gdGFyIGFyY2hpdmUgYW5kIHN0b3JlIGl0cyBmaWxlIGRlc2NyaXB0 b3IgKi8KKwlmZCA9IG9wZW5fZmlsZV9pbl9kaXJlY3Rvcnkod2FsZGlyLCBwcml2YXRlSW5mby0+ YXJjaGl2ZV9uYW1lKTsKKworCWlmIChmZCA8IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3Bl biBmaWxlIFwiJXNcIiIsIHByaXZhdGVJbmZvLT5hcmNoaXZlX25hbWUpOworCisJcHJpdmF0ZUlu Zm8tPmFyY2hpdmVfZmQgPSBmZDsKKworCXN0cmVhbWVyID0gYXN0cmVhbWVyX3dhbGR1bXBfbmV3 KHByaXZhdGVJbmZvKTsKKworCS8qIFdlIG11c3QgZmlyc3QgcGFyc2UgdGhlIHRhciBhcmNoaXZl LiAqLworCXN0cmVhbWVyID0gYXN0cmVhbWVyX3Rhcl9wYXJzZXJfbmV3KHN0cmVhbWVyKTsKKwor CS8qIElmIHRoZSBhcmNoaXZlIGlzIGNvbXByZXNzZWQsIGRlY29tcHJlc3MgYmVmb3JlIHBhcnNp bmcuICovCisJaWYgKGNvbXByZXNzaW9uID09IFBHX0NPTVBSRVNTSU9OX0daSVApCisJCXN0cmVh bWVyID0gYXN0cmVhbWVyX2d6aXBfZGVjb21wcmVzc29yX25ldyhzdHJlYW1lcik7CisJZWxzZSBp ZiAoY29tcHJlc3Npb24gPT0gUEdfQ09NUFJFU1NJT05fTFo0KQorCQlzdHJlYW1lciA9IGFzdHJl YW1lcl9sejRfZGVjb21wcmVzc29yX25ldyhzdHJlYW1lcik7CisJZWxzZSBpZiAoY29tcHJlc3Np b24gPT0gUEdfQ09NUFJFU1NJT05fWlNURCkKKwkJc3RyZWFtZXIgPSBhc3RyZWFtZXJfenN0ZF9k ZWNvbXByZXNzb3JfbmV3KHN0cmVhbWVyKTsKKworCXByaXZhdGVJbmZvLT5hcmNoaXZlX3N0cmVh bWVyID0gc3RyZWFtZXI7CisKKwkvKgorCSAqIEFsbG9jYXRlIGEgYnVmZmVyIGZvciByZWFkaW5n IHRoZSBhcmNoaXZlIGZpbGUgdG8gZmFjaWxpdGF0ZSBjb250ZW50CisJICogZGVjb2Rpbmc7IHJl YWQgcmVxdWVzdHMgbXVzdCBub3QgZXhjZWVkIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHNpemUuCisJ ICovCisJcHJpdmF0ZUluZm8tPmFyY2hpdmVfcmVhZF9idWYgPSBwZ19tYWxsb2MoUkVBRF9DSFVO S19TSVpFKTsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlwcml2YXRlSW5mby0+YXJj aGl2ZV9yZWFkX2J1Zl9zaXplID0gUkVBRF9DSFVOS19TSVpFOworI2VuZGlmCisKKwkvKgorCSAq IEhhc2ggdGFibGUgc3RvcmluZyBXQUwgZW50cmllcyByZWFkIGZyb20gdGhlIGFyY2hpdmUgd2l0 aCBhbiBhcmJpdHJhcnkKKwkgKiBpbml0aWFsIHNpemUuCisJICovCisJcHJpdmF0ZUluZm8tPmFy Y2hpdmVfd2FsX2h0YWIgPSBBcmNoaXZlZFdBTF9jcmVhdGUoOCwgTlVMTCk7CisKKwkvKgorCSAq IFJlYWQgdW50aWwgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgZnVsbCBXQUwgcGFnZSAoWExPR19CTENL U1ogYnl0ZXMpIGZyb20KKwkgKiB0aGUgZmlyc3QgV0FMIHNlZ21lbnQgaW4gdGhlIGFyY2hpdmUg c28gd2UgY2FuIGV4dHJhY3QgdGhlIFdBTCBzZWdtZW50CisJICogc2l6ZSBmcm9tIHRoZSBsb25n IHBhZ2UgaGVhZGVyLgorCSAqLworCXdoaWxlIChlbnRyeSA9PSBOVUxMIHx8IGVudHJ5LT5idWYt PmxlbiA8IFhMT0dfQkxDS1NaKQorCXsKKwkJaWYgKHJlYWRfYXJjaGl2ZV9maWxlKHByaXZhdGVJ bmZvLCBYTE9HX0JMQ0tTWikgPT0gMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgZmluZCBXQUwg aW4gYXJjaGl2ZSBcIiVzXCIiLAorCQkJCQkgcHJpdmF0ZUluZm8tPmFyY2hpdmVfbmFtZSk7CisK KwkJZW50cnkgPSBwcml2YXRlSW5mby0+Y3VyX2ZpbGU7CisJfQorCisJLyogU2V0IFdhbFNlZ1N6 IGlmIFdBTCBkYXRhIGlzIHN1Y2Nlc3NmdWxseSByZWFkICovCisJbG9uZ2hkciA9IChYTG9nTG9u Z1BhZ2VIZWFkZXIpIGVudHJ5LT5idWYtPmRhdGE7CisKKwlpZiAoIUlzVmFsaWRXYWxTZWdTaXpl KGxvbmdoZHItPnhscF9zZWdfc2l6ZSkpCisJeworCQlwZ19sb2dfZXJyb3IobmdldHRleHQoImlu dmFsaWQgV0FMIHNlZ21lbnQgc2l6ZSBpbiBXQUwgZmlsZSBmcm9tIGFyY2hpdmUgXCIlc1wiICgl ZCBieXRlKSIsCisJCQkJCQkJICAiaW52YWxpZCBXQUwgc2VnbWVudCBzaXplIGluIFdBTCBmaWxl IGZyb20gYXJjaGl2ZSBcIiVzXCIgKCVkIGJ5dGVzKSIsCisJCQkJCQkJICBsb25naGRyLT54bHBf c2VnX3NpemUpLAorCQkJCQkgcHJpdmF0ZUluZm8tPmFyY2hpdmVfbmFtZSwgbG9uZ2hkci0+eGxw X3NlZ19zaXplKTsKKwkJcGdfbG9nX2Vycm9yX2RldGFpbCgiVGhlIFdBTCBzZWdtZW50IHNpemUg bXVzdCBiZSBhIHBvd2VyIG9mIHR3byBiZXR3ZWVuIDEgTUIgYW5kIDEgR0IuIik7CisJCWV4aXQo MSk7CisJfQorCisJKldhbFNlZ1N6ID0gbG9uZ2hkci0+eGxwX3NlZ19zaXplOworCisJLyoKKwkg KiBXaXRoIHRoZSBXQUwgc2VnbWVudCBzaXplIGF2YWlsYWJsZSwgd2UgY2FuIG5vdyBpbml0aWFs aXplIHRoZQorCSAqIGRlcGVuZGVudCBzdGFydCBhbmQgZW5kIHNlZ21lbnQgbnVtYmVycy4KKwkg Ki8KKwlBc3NlcnQoIVhMb2dSZWNQdHJJc0ludmFsaWQocHJpdmF0ZUluZm8tPnN0YXJ0cHRyKSk7 CisJWExCeXRlVG9TZWcocHJpdmF0ZUluZm8tPnN0YXJ0cHRyLCBwcml2YXRlSW5mby0+c3RhcnRf c2Vnbm8sICpXYWxTZWdTeik7CisKKwlpZiAoIVhMb2dSZWNQdHJJc0ludmFsaWQocHJpdmF0ZUlu Zm8tPmVuZHB0cikpCisJCVhMQnl0ZVRvU2VnKHByaXZhdGVJbmZvLT5lbmRwdHIsIHByaXZhdGVJ bmZvLT5lbmRfc2Vnbm8sICpXYWxTZWdTeik7CisKKwkvKgorCSAqIFRoaXMgV0FMIHJlY29yZCB3 YXMgZmV0Y2hlZCBiZWZvcmUgdGhlIGZpbHRlcmluZyBwYXJhbWV0ZXJzCisJICogKHN0YXJ0X3Nl Z25vIGFuZCBlbmRfc2Vnbm8pIHdlcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIFBlcmZvcm0gdGhlCisJ ICogcmVsZXZhbmNlIGNoZWNrIGFnYWluc3QgdGhlIHVzZXItcHJvdmlkZWQgcmFuZ2Ugbm93OyBp ZiB0aGUgV0FMIGZhbGxzCisJICogb3V0c2lkZSB0aGlzIHJhbmdlLCByZW1vdmUgaXQgZnJvbSB0 aGUgaGFzaCB0YWJsZS4gU3Vic2VxdWVudCBXQUwgd2lsbAorCSAqIGJlIGZpbHRlcmVkIGF1dG9t YXRpY2FsbHkgYnkgdGhlIGFyY2hpdmUgc3RyZWFtZXIgdXNpbmcgdGhlIHVwZGF0ZWQKKwkgKiBz dGFydF9zZWdubyBhbmQgZW5kX3NlZ25vIHZhbHVlcy4KKwkgKi8KKwlYTG9nRnJvbUZpbGVOYW1l KGVudHJ5LT5mbmFtZSwgJnRpbWVsaW5lLCAmc2Vnbm8sIHByaXZhdGVJbmZvLT5zZWdzaXplKTsK KwlpZiAocHJpdmF0ZUluZm8tPnRpbWVsaW5lICE9IHRpbWVsaW5lIHx8CisJCXByaXZhdGVJbmZv LT5zdGFydF9zZWdubyA+IHNlZ25vIHx8CisJCXByaXZhdGVJbmZvLT5lbmRfc2Vnbm8gPCBzZWdu bykKKwkJZnJlZV9hcmNoaXZlX3dhbF9lbnRyeShlbnRyeS0+Zm5hbWUsIHByaXZhdGVJbmZvKTsK KworCS8qCisJICogU2V0dXAgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0byBzdG9yZSBXQUwgc2VnbWVu dHMgYW5kIHNldCB1cCBhbiBleGl0CisJICogY2FsbGJhY2sgdG8gcmVtb3ZlIGl0IHVwb24gY29t cGxldGlvbi4KKwkgKi8KKwlzZXR1cF90bXB3YWxfZGlyKHdhbGRpcik7CisJYXRleGl0KGNsZWFu dXBfdG1wd2FsX2Rpcl9hdGV4aXQpOworfQorCisvKgorICogUmVsZWFzZSB0aGUgYXJjaGl2ZSBz dHJlYW1lciBjaGFpbiBhbmQgY2xvc2UgdGhlIGFyY2hpdmUgZmlsZS4KKyAqLwordm9pZAorZnJl ZV9hcmNoaXZlX3JlYWRlcihYTG9nRHVtcFByaXZhdGUgKnByaXZhdGVJbmZvKQoreworCS8qCisJ ICogTkI6IE5vcm1hbGx5LCBhc3RyZWFtZXJfZmluYWxpemUoKSBpcyBjYWxsZWQgYmVmb3JlIGFz dHJlYW1lcl9mcmVlKCkgdG8KKwkgKiBmbHVzaCBhbnkgcmVtYWluaW5nIGJ1ZmZlcmVkIGRhdGEg b3IgdG8gZW5zdXJlIHRoZSBlbmQgb2YgdGhlIHRhcgorCSAqIGFyY2hpdmUgaXMgcmVhY2hlZC4g IEhvd2V2ZXIsIHdoZW4gZGVjb2RpbmcgV0FMLCBvbmNlIHdlIGhpdCB0aGUgZW5kCisJICogTFNO LCBhbnkgcmVtYWluaW5nIGJ1ZmZlcmVkIGRhdGEgb3IgdW5yZWFkIHBvcnRpb24gb2YgdGhlIGFy Y2hpdmUgY2FuCisJICogYmUgc2FmZWx5IGlnbm9yZWQuCisJICovCisJYXN0cmVhbWVyX2ZyZWUo cHJpdmF0ZUluZm8tPmFyY2hpdmVfc3RyZWFtZXIpOworCisJLyogRnJlZSBhbnkgcmVtYWluaW5n IGhhc2ggdGFibGUgZW50cmllcyBhbmQgdGhlaXIgYnVmZmVycy4gKi8KKwlpZiAocHJpdmF0ZUlu Zm8tPmFyY2hpdmVfd2FsX2h0YWIgIT0gTlVMTCkKKwl7CisJCUFyY2hpdmVkV0FMX2l0ZXJhdG9y IGl0ZXI7CisJCUFyY2hpdmVkV0FMRmlsZSAqZW50cnk7CisKKwkJQXJjaGl2ZWRXQUxfc3RhcnRf aXRlcmF0ZShwcml2YXRlSW5mby0+YXJjaGl2ZV93YWxfaHRhYiwgJml0ZXIpOworCQl3aGlsZSAo KGVudHJ5ID0gQXJjaGl2ZWRXQUxfaXRlcmF0ZShwcml2YXRlSW5mby0+YXJjaGl2ZV93YWxfaHRh YiwKKwkJCQkJCQkJCQkJJml0ZXIpKSAhPSBOVUxMKQorCQl7CisJCQlpZiAoZW50cnktPmJ1ZiAh PSBOVUxMKQorCQkJCWRlc3Ryb3lTdHJpbmdJbmZvKGVudHJ5LT5idWYpOworCQl9CisJCUFyY2hp dmVkV0FMX2Rlc3Ryb3kocHJpdmF0ZUluZm8tPmFyY2hpdmVfd2FsX2h0YWIpOworCQlwcml2YXRl SW5mby0+YXJjaGl2ZV93YWxfaHRhYiA9IE5VTEw7CisJfQorCisJLyogRnJlZSB0aGUgcmV1c2Fi bGUgcmVhZCBidWZmZXIuICovCisJaWYgKHByaXZhdGVJbmZvLT5hcmNoaXZlX3JlYWRfYnVmICE9 IE5VTEwpCisJeworCQlwZ19mcmVlKHByaXZhdGVJbmZvLT5hcmNoaXZlX3JlYWRfYnVmKTsKKwkJ cHJpdmF0ZUluZm8tPmFyY2hpdmVfcmVhZF9idWYgPSBOVUxMOworCX0KKworCS8qIENsb3NlIHRo ZSBmaWxlLiAqLworCWlmIChjbG9zZShwcml2YXRlSW5mby0+YXJjaGl2ZV9mZCkgIT0gMCkKKwkJ cGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY2xvc2UgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJIHBy aXZhdGVJbmZvLT5hcmNoaXZlX25hbWUpOworfQorCisvKgorICogQ29waWVzIHRoZSByZXF1ZXN0 ZWQgV0FMIGRhdGEgZnJvbSB0aGUgaGFzaCBlbnRyeSdzIGJ1ZmZlciBpbnRvIHJlYWRCdWZmLgor ICogSWYgdGhlIGJ1ZmZlciBkb2VzIG5vdCB5ZXQgY29udGFpbiB0aGUgbmVlZGVkIGJ5dGVzLCBm ZXRjaGVzIG1vcmUgZGF0YSBmcm9tCisgKiB0aGUgdGFyIGFyY2hpdmUgdmlhIHRoZSBhcmNoaXZl IHN0cmVhbWVyLgorICovCitpbnQKK3JlYWRfYXJjaGl2ZV93YWxfcGFnZShYTG9nRHVtcFByaXZh dGUgKnByaXZhdGVJbmZvLCBYTG9nUmVjUHRyIHRhcmdldFBhZ2VQdHIsCisJCQkJCSAgU2l6ZSBj b3VudCwgY2hhciAqcmVhZEJ1ZmYsIGludCBXYWxTZWdTeikKK3sKKwljaGFyCSAgICpwID0gcmVh ZEJ1ZmY7CisJU2l6ZQkJbmJ5dGVzID0gY291bnQ7CisJWExvZ1JlY1B0cglyZWNwdHIgPSB0YXJn ZXRQYWdlUHRyOworCVhMb2dTZWdObwlzZWdubzsKKwljaGFyCQlmbmFtZVtNQVhGTkFNRUxFTl07 CisJQXJjaGl2ZWRXQUxGaWxlICplbnRyeTsKKworCS8qIElkZW50aWZ5IHRoZSBzZWdtZW50IGFu ZCBsb2NhdGUgaXRzIGVudHJ5IGluIHRoZSBhcmNoaXZlIGhhc2ggKi8KKwlYTEJ5dGVUb1NlZyh0 YXJnZXRQYWdlUHRyLCBzZWdubywgV2FsU2VnU3opOworCVhMb2dGaWxlTmFtZShmbmFtZSwgcHJp dmF0ZUluZm8tPnRpbWVsaW5lLCBzZWdubywgV2FsU2VnU3opOworCWVudHJ5ID0gZ2V0X2FyY2hp dmVfd2FsX2VudHJ5KGZuYW1lLCBwcml2YXRlSW5mbywgV2FsU2VnU3opOworCisJd2hpbGUgKG5i eXRlcyA+IDApCisJeworCQljaGFyCSAgICpidWYgPSBlbnRyeS0+YnVmLT5kYXRhOworCQlpbnQJ CQlidWZMZW4gPSBlbnRyeS0+YnVmLT5sZW47CisJCVhMb2dSZWNQdHIJZW5kUHRyOworCQlYTG9n UmVjUHRyCXN0YXJ0UHRyOworCisJCS8qCisJCSAqIENhbGN1bGF0ZSB0aGUgTFNOIHJhbmdlIGN1 cnJlbnRseSByZXNpZGluZyBpbiB0aGUgYnVmZmVyLgorCQkgKgorCQkgKiByZWFkX2xlbiB0cmFj a3MgdG90YWwgYnl0ZXMgcmVjZWl2ZWQgZm9yIHRoaXMgc2VnbWVudCAoaW5jbHVkaW5nCisJCSAq IGFscmVhZHktZGlzY2FyZGVkIGRhdGEpLCBzbyBlbmRQdHIgaXMgdGhlIExTTiBqdXN0IHBhc3Qg dGhlIGxhc3QKKwkJICogYnVmZmVyZWQgYnl0ZSwgYW5kIHN0YXJ0UHRyIGlzIHRoZSBMU04gb2Yg dGhlIGZpcnN0IGJ1ZmZlcmVkIGJ5dGUuCisJCSAqLworCQlYTG9nU2VnTm9PZmZzZXRUb1JlY1B0 cihzZWdubywgZW50cnktPnJlYWRfbGVuLCBXYWxTZWdTeiwgZW5kUHRyKTsKKwkJc3RhcnRQdHIg PSBlbmRQdHIgLSBidWZMZW47CisKKwkJLyoKKwkJICogQ29weSB0aGUgcmVxdWVzdGVkIFdBTCBy ZWNvcmQgaWYgaXQgZXhpc3RzIGluIHRoZSBidWZmZXIuCisJCSAqLworCQlpZiAoYnVmTGVuID4g MCAmJiBzdGFydFB0ciA8PSByZWNwdHIgJiYgcmVjcHRyIDwgZW5kUHRyKQorCQl7CisJCQlpbnQJ CQljb3B5Qnl0ZXM7CisJCQlpbnQJCQlvZmZzZXQgPSByZWNwdHIgLSBzdGFydFB0cjsKKworCQkJ LyoKKwkJCSAqIEdpdmVuIHN0YXJ0UHRyIDw9IHJlY3B0ciA8IGVuZFB0ciBhbmQgYSB0b3RhbCBi dWZmZXIgc2l6ZQorCQkJICogJ2J1ZkxlbicsIHRoZSBvZmZzZXQgKHJlY3B0ciAtIHN0YXJ0UHRy KSB3aWxsIGFsd2F5cyBiZSBsZXNzCisJCQkgKiB0aGFuICdidWZMZW4nLgorCQkJICovCisJCQlB c3NlcnQob2Zmc2V0IDwgYnVmTGVuKTsKKworCQkJY29weUJ5dGVzID0gTWluKG5ieXRlcywgYnVm TGVuIC0gb2Zmc2V0KTsKKwkJCW1lbWNweShwLCBidWYgKyBvZmZzZXQsIGNvcHlCeXRlcyk7CisK KwkJCS8qIFVwZGF0ZSBzdGF0ZSBmb3IgcmVhZCAqLworCQkJcmVjcHRyICs9IGNvcHlCeXRlczsK KwkJCW5ieXRlcyAtPSBjb3B5Qnl0ZXM7CisJCQlwICs9IGNvcHlCeXRlczsKKwkJfQorCQllbHNl CisJCXsKKwkJCS8qCisJCQkgKiBCZWZvcmUgc3RhcnRpbmcgdGhlIGFjdHVhbCBkZWNvZGluZyBs b29wLCBwZ193YWxkdW1wIHRyaWVzIHRvCisJCQkgKiBsb2NhdGUgdGhlIGZpcnN0IHZhbGlkIHJl Y29yZCBmcm9tIHRoZSB1c2VyLXNwZWNpZmllZCBzdGFydAorCQkJICogcG9zaXRpb24sIHdoaWNo IG1pZ2h0IG5vdCBiZSB0aGUgc3RhcnQgb2YgYSBXQUwgcmVjb3JkIGFuZAorCQkJICogY291bGQg ZmFsbCBpbiB0aGUgbWlkZGxlIG9mIGEgcmVjb3JkIHRoYXQgc3BhbnMgbXVsdGlwbGUgcGFnZXMu CisJCQkgKiBDb25zZXF1ZW50bHksIHRoZSB2YWxpZCBzdGFydCBwb3NpdGlvbiB0aGUgZGVjb2Rl ciBpcyBsb29raW5nCisJCQkgKiBmb3IgY291bGQgYmUgZmFyIGF3YXkgZnJvbSB0aGF0IGluaXRp YWwgcG9zaXRpb24uCisJCQkgKgorCQkJICogVGhpcyBtYXkgaW52b2x2ZSByZWFkaW5nIGFjcm9z cyBtdWx0aXBsZSBwYWdlcywgYW5kIHRoaXMKKwkJCSAqIHByZS1yZWFkaW5nIGZldGNoZXMgZGF0 YSBpbiBtdWx0aXBsZSByb3VuZHMgZnJvbSB0aGUgYXJjaGl2ZQorCQkJICogc3RyZWFtZXI7IG5v cm1hbGx5LCB3ZSB3b3VsZCB0aHJvdyBhd2F5IGV4aXN0aW5nIGJ1ZmZlcgorCQkJICogY29udGVu dHMgdG8gZmV0Y2ggdGhlIG5leHQgc2V0IG9mIGRhdGEsIGJ1dCB0aGF0IGV4aXN0aW5nIGRhdGEK KwkJCSAqIG1pZ2h0IGJlIG5lZWRlZCBvbmNlIHRoZSBtYWluIGxvb3Agc3RhcnRzLiBCZWNhdXNl IHByZXZpb3VzbHkKKwkJCSAqIHJlYWQgZGF0YSBjYW5ub3QgYmUgcmUtcmVhZCBieSB0aGUgYXJj aGl2ZSBzdHJlYW1lciwgd2UgZGVsYXkKKwkJCSAqIHJlc2V0dGluZyB0aGUgYnVmZmVyIHVudGls IHRoZSBtYWluIGRlY29kaW5nIGxvb3AgaXMgZW50ZXJlZC4KKwkJCSAqCisJCQkgKiBPbmNlIHBn X3dhbGR1bXAgaGFzIGVudGVyZWQgdGhlIG1haW4gbG9vcCwgaXQgbWF5IHJlLXJlYWQgdGhlCisJ CQkgKiBjdXJyZW50bHkgYWN0aXZlIHBhZ2UsIGJ1dCBuZXZlciBhbiBvbGRlciBvbmU7IHRoZXJl Zm9yZSwgYW55CisJCQkgKiBmdWxseSBjb25zdW1lZCBXQUwgZGF0YSBwcmVjZWRpbmcgdGhlIGN1 cnJlbnQgcGFnZSBjYW4gdGhlbiBiZQorCQkJICogc2FmZWx5IGRpc2NhcmRlZC4KKwkJCSAqLwor CQkJaWYgKHByaXZhdGVJbmZvLT5kZWNvZGluZ19zdGFydGVkKQorCQkJeworCQkJCXJlc2V0U3Ry aW5nSW5mbyhlbnRyeS0+YnVmKTsKKworCQkJCS8qCisJCQkJICogUHVzaCBiYWNrIHRoZSBwYXJ0 aWFsIHBhZ2UgZGF0YSBmb3IgdGhlIGN1cnJlbnQgcGFnZSB0byB0aGUKKwkJCQkgKiBidWZmZXIs IGVuc3VyaW5nIGEgZnVsbCBwYWdlIHJlbWFpbnMgYXZhaWxhYmxlIGZvcgorCQkJCSAqIHJlLXJl YWRpbmcgaWYgcmVxdWVzdGVkLgorCQkJCSAqLworCQkJCWlmIChwID4gcmVhZEJ1ZmYpCisJCQkJ eworCQkJCQlBc3NlcnQoKGNvdW50IC0gbmJ5dGVzKSA+IDApOworCQkJCQlhcHBlbmRCaW5hcnlT dHJpbmdJbmZvKGVudHJ5LT5idWYsIHJlYWRCdWZmLCBjb3VudCAtIG5ieXRlcyk7CisJCQkJfQor CQkJfQorCisJCQkvKgorCQkJICogTm93LCBmZXRjaCBtb3JlIGRhdGEuICBSYWlzZSBhbiBlcnJv ciBpZiB0aGUgYXJjaGl2ZSBzdHJlYW1lcgorCQkJICogaGFzIG1vdmVkIHBhc3Qgb3VyIHNlZ21l bnQgKG1lYW5pbmcgdGhlIFdBTCBmaWxlIGluIHRoZSBhcmNoaXZlCisJCQkgKiBpcyBzaG9ydGVy IHRoYW4gZXhwZWN0ZWQpIG9yIGlmIHJlYWRpbmcgdGhlIGFyY2hpdmUgcmVhY2hlZAorCQkJICog RU9GLgorCQkJICovCisJCQlpZiAocHJpdmF0ZUluZm8tPmN1cl9maWxlICE9IGVudHJ5KQorCQkJ CXBnX2ZhdGFsKCJXQUwgc2VnbWVudCBcIiVzXCIgaW4gYXJjaGl2ZSBcIiVzXCIgaXMgdG9vIHNo b3J0OiByZWFkICVsbGQgb2YgJWxsZCBieXRlcyIsCisJCQkJCQkgZm5hbWUsIHByaXZhdGVJbmZv LT5hcmNoaXZlX25hbWUsCisJCQkJCQkgKGxvbmcgbG9uZyBpbnQpIChjb3VudCAtIG5ieXRlcyks CisJCQkJCQkgKGxvbmcgbG9uZyBpbnQpIGNvdW50KTsKKwkJCWlmIChyZWFkX2FyY2hpdmVfZmls ZShwcml2YXRlSW5mbywgUkVBRF9DSFVOS19TSVpFKSA9PSAwKQorCQkJCXBnX2ZhdGFsKCJ1bmV4 cGVjdGVkIGVuZCBvZiBhcmNoaXZlIFwiJXNcIiB3aGlsZSByZWFkaW5nIFwiJXNcIjogcmVhZCAl bGxkIG9mICVsbGQgYnl0ZXMiLAorCQkJCQkJIHByaXZhdGVJbmZvLT5hcmNoaXZlX25hbWUsIGZu YW1lLAorCQkJCQkJIChsb25nIGxvbmcgaW50KSAoY291bnQgLSBuYnl0ZXMpLAorCQkJCQkJIChs b25nIGxvbmcgaW50KSBjb3VudCk7CisJCX0KKwl9CisKKwkvKgorCSAqIFNob3VsZCBoYXZlIHN1 Y2Nlc3NmdWxseSByZWFkIGFsbCB0aGUgcmVxdWVzdGVkIGJ5dGVzIG9yIHJlcG9ydGVkIGEKKwkg KiBmYWlsdXJlIGJlZm9yZSB0aGlzIHBvaW50LgorCSAqLworCUFzc2VydChuYnl0ZXMgPT0gMCk7 CisKKwkvKgorCSAqIE5COiBXZSByZXR1cm4gY291bnQgdW5jaGFuZ2VkLiAgV2UgY291bGQgcmV0 dXJuIGEgYm9vbGVhbiBzaW5jZSB3ZQorCSAqIGVpdGhlciBzdWNjZXNzZnVsbHkgcmVhZCB0aGUg V0FMIHBhZ2Ugb3IgcmFpc2UgYW4gZXJyb3IsIGJ1dCB0aGUgY2FsbGVyCisJICogZXhwZWN0cyB0 aGlzIHZhbHVlIHRvIGJlIHJldHVybmVkLiAgVGhlIHJvdXRpbmUgdGhhdCByZWFkcyBXQUwgcGFn ZXMKKwkgKiBmcm9tIHBoeXNpY2FsIFdBTCBmaWxlcyBmb2xsb3dzIHRoZSBzYW1lIGNvbnZlbnRp b24uCisJICovCisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogUmVsZWFzZXMgdGhlIGJ1ZmZl ciBvZiBhIFdBTCBlbnRyeSB0aGF0IGlzIG5vIGxvbmdlciBuZWVkZWQsIHByZXZlbnRpbmcgdGhl CisgKiBhY2N1bXVsYXRpb24gb2YgaXJyZWxldmFudCBXQUwgZGF0YS4gIEFsc28gcmVtb3ZlcyBh bnkgYXNzb2NpYXRlZCB0ZW1wb3JhcnkKKyAqIGZpbGUgYW5kIGNsZWFycyBwcml2YXRlSW5mby0+ Y3VyX2ZpbGUgaWYgaXQgcG9pbnRzIHRvIHRoaXMgZW50cnksIHNvIHRoZQorICogYXJjaGl2ZSBz dHJlYW1lciBza2lwcyBzdWJzZXF1ZW50IGRhdGEgZm9yIGl0LgorICovCit2b2lkCitmcmVlX2Fy Y2hpdmVfd2FsX2VudHJ5KGNvbnN0IGNoYXIgKmZuYW1lLCBYTG9nRHVtcFByaXZhdGUgKnByaXZh dGVJbmZvKQoreworCUFyY2hpdmVkV0FMRmlsZSAqZW50cnk7CisKKwllbnRyeSA9IEFyY2hpdmVk V0FMX2xvb2t1cChwcml2YXRlSW5mby0+YXJjaGl2ZV93YWxfaHRhYiwgZm5hbWUpOworCisJaWYg KGVudHJ5ID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIERlc3Ryb3kgdGhlIGJ1ZmZlciAqLwor CWRlc3Ryb3lTdHJpbmdJbmZvKGVudHJ5LT5idWYpOworCWVudHJ5LT5idWYgPSBOVUxMOworCisJ LyogUmVtb3ZlIHRlbXBvcmFyeSBmaWxlIGlmIGFueSAqLworCWlmIChlbnRyeS0+c3BpbGxlZCkK Kwl7CisJCWNoYXIJCWZwYXRoW01BWFBHUEFUSF07CisKKwkJc25wcmludGYoZnBhdGgsIE1BWFBH UEFUSCwgIiVzLyVzIiwgVG1wV2FsU2VnRGlyLCBmbmFtZSk7CisKKwkJaWYgKHVubGluayhmcGF0 aCkgPT0gMCkKKwkJCXBnX2xvZ19kZWJ1ZygicmVtb3ZlZCBmaWxlIFwiJXNcIiIsIGZwYXRoKTsK Kwl9CisKKwkvKiBDbGVhciBjdXJfZmlsZSBpZiBpdCBwb2ludHMgdG8gdGhlIGVudHJ5IGJlaW5n IGZyZWVkICovCisJaWYgKHByaXZhdGVJbmZvLT5jdXJfZmlsZSA9PSBlbnRyeSkKKwkJcHJpdmF0 ZUluZm8tPmN1cl9maWxlID0gTlVMTDsKKworCUFyY2hpdmVkV0FMX2RlbGV0ZV9pdGVtKHByaXZh dGVJbmZvLT5hcmNoaXZlX3dhbF9odGFiLCBlbnRyeSk7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRo ZSBhcmNoaXZlZCBXQUwgZW50cnkgZnJvbSB0aGUgaGFzaCB0YWJsZSBpZiBpdCBhbHJlYWR5IGV4 aXN0cy4KKyAqIE90aGVyd2lzZSwgcmVhZHMgbW9yZSBkYXRhIGZyb20gdGhlIGFyY2hpdmUgdW50 aWwgdGhlIHJlcXVlc3RlZCBlbnRyeSBpcworICogZm91bmQuICBJZiB0aGUgYXJjaGl2ZSBzdHJl YW1lciBpcyByZWFkaW5nIGEgV0FMIGZpbGUgZnJvbSB0aGUgYXJjaGl2ZSB0aGF0CisgKiBpcyBu b3QgY3VycmVudGx5IG5lZWRlZCwgdGhhdCBkYXRhIGlzIHNwaWxsZWQgdG8gYSB0ZW1wb3Jhcnkg ZmlsZSBmb3IgbGF0ZXIKKyAqIHJldHJpZXZhbC4KKyAqLworc3RhdGljIEFyY2hpdmVkV0FMRmls ZSAqCitnZXRfYXJjaGl2ZV93YWxfZW50cnkoY29uc3QgY2hhciAqZm5hbWUsIFhMb2dEdW1wUHJp dmF0ZSAqcHJpdmF0ZUluZm8sCisJCQkJCSAgaW50IFdhbFNlZ1N6KQoreworCUFyY2hpdmVkV0FM RmlsZSAqZW50cnkgPSBOVUxMOworCUZJTEUJICAgKndyaXRlX2ZwID0gTlVMTDsKKworCS8qCisJ ICogU2VhcmNoIHRoZSBoYXNoIHRhYmxlIGZpcnN0LiBJZiB0aGUgZW50cnkgaXMgZm91bmQsIHJl dHVybiBpdC4KKwkgKiBPdGhlcndpc2UsIHRoZSByZXF1ZXN0ZWQgV0FMIGVudHJ5IGhhc24ndCBi ZWVuIHJlYWQgZnJvbSB0aGUgYXJjaGl2ZQorCSAqIHlldDsgaW52b2tlIHRoZSBhcmNoaXZlIHN0 cmVhbWVyIHRvIGZldGNoIGl0LgorCSAqLworCXdoaWxlICgxKQorCXsKKwkJLyoKKwkJICogU2Vh cmNoIGhhc2ggdGFibGUuCisJCSAqCisJCSAqIFdlIHBlcmZvcm0gdGhlIHNlYXJjaCBpbnNpZGUg dGhlIGxvb3AgYmVjYXVzZSBhIHNpbmdsZSBpdGVyYXRpb24gb2YKKwkJICogdGhlIGFyY2hpdmUg cmVhZGVyIG1heSBkZWNvbXByZXNzIGFuZCBleHRyYWN0IG11bHRpcGxlIGZpbGVzIGludG8KKwkJ ICogdGhlIGhhc2ggdGFibGUuIE9uZSBvZiB0aGVzZSBuZXdseSBhZGRlZCBmaWxlcyBjb3VsZCBi ZSB0aGUgb25lIHdlCisJCSAqIGFyZSBzZWVraW5nLgorCQkgKi8KKwkJZW50cnkgPSBBcmNoaXZl ZFdBTF9sb29rdXAocHJpdmF0ZUluZm8tPmFyY2hpdmVfd2FsX2h0YWIsIGZuYW1lKTsKKworCQlp ZiAoZW50cnkgIT0gTlVMTCkKKwkJCXJldHVybiBlbnRyeTsKKworCQkvKgorCQkgKiBUaGUgV0FM IGZpbGUgZW50cnkgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZCBtYXkgY2hhbmdlIGR1cmluZwor CQkgKiBhcmNoaXZlIHN0cmVhbWVyIGV4ZWN1dGlvbi4gVGhlcmVmb3JlLCBtYWludGFpbiBhIGxv Y2FsIHZhcmlhYmxlIHRvCisJCSAqIHJlZmVyZW5jZSB0aGUgcHJldmlvdXMgZW50cnksIGVuc3Vy aW5nIHRoYXQgYW55IHJlbWFpbmluZyBkYXRhIGluCisJCSAqIGl0cyBidWZmZXIgaXMgc3VjY2Vz c2Z1bGx5IGZsdXNoZWQgdG8gdGhlIHRlbXBvcmFyeSBmaWxlIGJlZm9yZQorCQkgKiBzd2l0Y2hp bmcgdG8gdGhlIG5leHQgV0FMIGVudHJ5LgorCQkgKi8KKwkJZW50cnkgPSBwcml2YXRlSW5mby0+ Y3VyX2ZpbGU7CisKKwkJLyoKKwkJICogRmV0Y2ggbW9yZSBkYXRhIGVpdGhlciB3aGVuIG5vIGN1 cnJlbnQgZmlsZSBpcyBiZWluZyB0cmFja2VkIG9yCisJCSAqIHdoZW4gaXRzIGJ1ZmZlciBoYXMg YmVlbiBmdWxseSBmbHVzaGVkIHRvIHRoZSB0ZW1wb3JhcnkgZmlsZS4KKwkJICovCisJCWlmIChl bnRyeSA9PSBOVUxMIHx8IGVudHJ5LT5idWYtPmxlbiA9PSAwKQorCQl7CisJCQlpZiAocmVhZF9h cmNoaXZlX2ZpbGUocHJpdmF0ZUluZm8sIFJFQURfQ0hVTktfU0laRSkgPT0gMCkKKwkJCQlicmVh azsJCQkvKiBhcmNoaXZlIGZpbGUgZW5kZWQgKi8KKwkJfQorCisJCS8qCisJCSAqIEFyY2hpdmUg c3RyZWFtZXIgaXMgcmVhZGluZyBhIG5vbi1XQUwgZmlsZSBvciBhbiBpcnJlbGV2YW50IFdBTAor CQkgKiBmaWxlLgorCQkgKi8KKwkJaWYgKGVudHJ5ID09IE5VTEwpCisJCQljb250aW51ZTsKKwor CQkvKgorCQkgKiBBcmNoaXZlIHN0cmVhbWVyIGlzIGN1cnJlbnRseSByZWFkaW5nIGEgZmlsZSB0 aGF0IGlzbid0IHRoZSBvbmUKKwkJICogYXNrZWQgZm9yLCBidXQgaXQncyByZXF1aXJlZCBpbiB0 aGUgZnV0dXJlLiBJdCBzaG91bGQgYmUgd3JpdHRlbiB0bworCQkgKiBhIHRlbXBvcmFyeSBsb2Nh dGlvbiBmb3IgcmV0cmlldmFsIHdoZW4gbmVlZGVkLgorCQkgKi8KKwkJQXNzZXJ0KHN0cmNtcChm bmFtZSwgZW50cnktPmZuYW1lKSAhPSAwKTsKKworCQkvKiBDcmVhdGUgYSB0ZW1wb3JhcnkgZmls ZSBpZiBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdCAqLworCQlpZiAoIWVudHJ5LT5zcGlsbGVk KQorCQl7CisJCQl3cml0ZV9mcCA9IHByZXBhcmVfdG1wX3dyaXRlKGVudHJ5LT5mbmFtZSk7CisJ CQllbnRyeS0+c3BpbGxlZCA9IHRydWU7CisJCX0KKworCQkvKiBGbHVzaCBkYXRhIGZyb20gdGhl IGJ1ZmZlciB0byB0aGUgZmlsZSAqLworCQlwZXJmb3JtX3RtcF93cml0ZShlbnRyeS0+Zm5hbWUs IGVudHJ5LT5idWYsIHdyaXRlX2ZwKTsKKwkJcmVzZXRTdHJpbmdJbmZvKGVudHJ5LT5idWYpOwor CisJCS8qCisJCSAqIFRoZSBjaGFuZ2UgaW4gdGhlIGN1cnJlbnQgc2VnbWVudCBlbnRyeSBpbmRp Y2F0ZXMgdGhhdCB0aGUgcmVhZGluZworCQkgKiBvZiB0aGlzIGZpbGUgaGFzIGVuZGVkLgorCQkg Ki8KKwkJaWYgKGVudHJ5ICE9IHByaXZhdGVJbmZvLT5jdXJfZmlsZSAmJiB3cml0ZV9mcCAhPSBO VUxMKQorCQl7CisJCQlmY2xvc2Uod3JpdGVfZnApOworCQkJd3JpdGVfZnAgPSBOVUxMOworCQl9 CisJfQorCisJLyogUmVxdWVzdGVkIFdBTCBzZWdtZW50IG5vdCBmb3VuZCAqLworCXBnX2ZhdGFs KCJjb3VsZCBub3QgZmluZCBXQUwgXCIlc1wiIGluIGFyY2hpdmUgXCIlc1wiIiwKKwkJCSBmbmFt ZSwgcHJpdmF0ZUluZm8tPmFyY2hpdmVfbmFtZSk7Cit9CisKKy8qCisgKiBSZWFkcyB0aGUgYXJj aGl2ZSBmaWxlIGFuZCBwYXNzZXMgaXQgdG8gdGhlIGFyY2hpdmUgc3RyZWFtZXIgZm9yCisgKiBk ZWNvbXByZXNzaW9uLgorICovCitzdGF0aWMgaW50CityZWFkX2FyY2hpdmVfZmlsZShYTG9nRHVt cFByaXZhdGUgKnByaXZhdGVJbmZvLCBTaXplIGNvdW50KQoreworCWludAkJCXJjOworCisJLyog VGhlIHJlYWQgcmVxdWVzdCBtdXN0IG5vdCBleGNlZWQgdGhlIGFsbG9jYXRlZCBidWZmZXIgc2l6 ZS4gKi8KKwlBc3NlcnQocHJpdmF0ZUluZm8tPmFyY2hpdmVfcmVhZF9idWZfc2l6ZSA+PSBjb3Vu dCk7CisKKwlyYyA9IHJlYWQocHJpdmF0ZUluZm8tPmFyY2hpdmVfZmQsIHByaXZhdGVJbmZvLT5h cmNoaXZlX3JlYWRfYnVmLCBjb3VudCk7CisJaWYgKHJjIDwgMCkKKwkJcGdfZmF0YWwoImNvdWxk IG5vdCByZWFkIGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJIHByaXZhdGVJbmZvLT5hcmNoaXZlX25h bWUpOworCisJLyoKKwkgKiBEZWNvbXByZXNzIChpZiByZXF1aXJlZCksIGFuZCB0aGVuIHBhcnNl IHRoZSBwcmV2aW91c2x5IHJlYWQgY29udGVudHMKKwkgKiBvZiB0aGUgdGFyIGZpbGUuCisJICov CisJaWYgKHJjID4gMCkKKwkJYXN0cmVhbWVyX2NvbnRlbnQocHJpdmF0ZUluZm8tPmFyY2hpdmVf c3RyZWFtZXIsIE5VTEwsCisJCQkJCQkgIHByaXZhdGVJbmZvLT5hcmNoaXZlX3JlYWRfYnVmLCBy YywKKwkJCQkJCSAgQVNUUkVBTUVSX1VOS05PV04pOworCisJcmV0dXJuIHJjOworfQorCisvKgor ICogU2V0IHVwIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0byB0ZW1wb3JhcmlseSBzdG9yZSBXQUwg c2VnbWVudHMuCisgKi8KK3N0YXRpYyB2b2lkCitzZXR1cF90bXB3YWxfZGlyKGNvbnN0IGNoYXIg KndhbGRpcikKK3sKKwljaGFyCSAgICp0ZW1wbGF0ZTsKKworCS8qCisJICogVXNlIHRoZSBkaXJl Y3Rvcnkgc3BlY2lmaWVkIGJ5IHRoZSBUTVBESVIgZW52aXJvbm1lbnQgdmFyaWFibGUuIElmIGl0 J3MKKwkgKiBub3Qgc2V0LCBmYWxsIGJhY2sgdG8gdGhlIHByb3ZpZGVkIFdBTCBkaXJlY3Rvcnkg dG8gc3RvcmUgV0FMIGZpbGVzCisJICogdGVtcG9yYXJpbHkuCisJICovCisJdGVtcGxhdGUgPSBw c3ByaW50ZigiJXMvd2FsZHVtcF90bXAtWFhYWFhYIiwKKwkJCQkJCWdldGVudigiVE1QRElSIikg PyBnZXRlbnYoIlRNUERJUiIpIDogd2FsZGlyKTsKKwlUbXBXYWxTZWdEaXIgPSBta2R0ZW1wKHRl bXBsYXRlKTsKKworCWlmIChUbXBXYWxTZWdEaXIgPT0gTlVMTCkKKwkJcGdfZmF0YWwoImNvdWxk IG5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJXNcIjogJW0iLCB0ZW1wbGF0ZSk7CisKKwljYW5vbmlj YWxpemVfcGF0aChUbXBXYWxTZWdEaXIpOworCisJcGdfbG9nX2RlYnVnKCJjcmVhdGVkIGRpcmVj dG9yeSBcIiVzXCIiLCBUbXBXYWxTZWdEaXIpOworfQorCisvKgorICogUmVtb3ZlIHRlbXBvcmFy eSBkaXJlY3RvcnkgYXQgZXhpdCwgaWYgYW55LgorICovCitzdGF0aWMgdm9pZAorY2xlYW51cF90 bXB3YWxfZGlyX2F0ZXhpdCh2b2lkKQoreworCXJtdHJlZShUbXBXYWxTZWdEaXIsIHRydWUpOwor fQorCisvKgorICogQ3JlYXRlIGFuIGVtcHR5IHBsYWNlaG9sZGVyIGZpbGUgYW5kIHJldHVybiBp dHMgaGFuZGxlLgorICovCitzdGF0aWMgRklMRSAqCitwcmVwYXJlX3RtcF93cml0ZShjb25zdCBj aGFyICpmbmFtZSkKK3sKKwljaGFyCQlmcGF0aFtNQVhQR1BBVEhdOworCUZJTEUJICAgKmZpbGU7 CisKKwlzbnByaW50ZihmcGF0aCwgTUFYUEdQQVRILCAiJXMvJXMiLCBUbXBXYWxTZWdEaXIsIGZu YW1lKTsKKworCS8qIENyZWF0ZSBhbiBlbXB0eSBwbGFjZWhvbGRlciAqLworCWZpbGUgPSBmb3Bl bihmcGF0aCwgUEdfQklOQVJZX1cpOworCWlmIChmaWxlID09IE5VTEwpCisJCXBnX2ZhdGFsKCJj b3VsZCBub3QgY3JlYXRlIGZpbGUgXCIlc1wiOiAlbSIsIGZwYXRoKTsKKworI2lmbmRlZiBXSU4z MgorCWlmIChjaG1vZChmcGF0aCwgcGdfZmlsZV9jcmVhdGVfbW9kZSkpCisJCXBnX2ZhdGFsKCJj b3VsZCBub3Qgc2V0IHBlcm1pc3Npb25zIG9uIGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJIGZwYXRo KTsKKyNlbmRpZgorCisJcGdfbG9nX2RlYnVnKCJzcGlsbGluZyB0byB0ZW1wb3JhcnkgZmlsZSBc IiVzXCIiLCBmcGF0aCk7CisKKwlyZXR1cm4gZmlsZTsKK30KKworLyoKKyAqIFdyaXRlIGJ1ZmZl ciBkYXRhIHRvIHRoZSBnaXZlbiBmaWxlIGhhbmRsZS4KKyAqLworc3RhdGljIHZvaWQKK3BlcmZv cm1fdG1wX3dyaXRlKGNvbnN0IGNoYXIgKmZuYW1lLCBTdHJpbmdJbmZvIGJ1ZiwgRklMRSAqZmls ZSkKK3sKKwlBc3NlcnQoZmlsZSk7CisKKwllcnJubyA9IDA7CisJaWYgKGJ1Zi0+bGVuID4gMCAm JiBmd3JpdGUoYnVmLT5kYXRhLCBidWYtPmxlbiwgMSwgZmlsZSkgIT0gMSkKKwl7CisJCS8qCisJ CSAqIElmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFzc3VtZSBwcm9ibGVtIGlzIG5vIGRpc2sg c3BhY2UKKwkJICovCisJCWlmIChlcnJubyA9PSAwKQorCQkJZXJybm8gPSBFTk9TUEM7CisJCXBn X2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgdG8gZmlsZSBcIiVzLyVzXCI6ICVtIiwgVG1wV2FsU2Vn RGlyLCBmbmFtZSk7CisJfQorfQorCisvKgorICogQ3JlYXRlIGFuIGFzdHJlYW1lciB0aGF0IGNh biByZWFkIFdBTCBmcm9tIHRhciBmaWxlLgorICovCitzdGF0aWMgYXN0cmVhbWVyICoKK2FzdHJl YW1lcl93YWxkdW1wX25ldyhYTG9nRHVtcFByaXZhdGUgKnByaXZhdGVJbmZvKQoreworCWFzdHJl YW1lcl93YWxkdW1wICpzdHJlYW1lcjsKKworCXN0cmVhbWVyID0gcGFsbG9jMF9vYmplY3QoYXN0 cmVhbWVyX3dhbGR1bXApOworCSooKGNvbnN0IGFzdHJlYW1lcl9vcHMgKiopICZzdHJlYW1lci0+ YmFzZS5iYnNfb3BzKSA9CisJCSZhc3RyZWFtZXJfd2FsZHVtcF9vcHM7CisKKwlzdHJlYW1lci0+ cHJpdmF0ZUluZm8gPSBwcml2YXRlSW5mbzsKKworCXJldHVybiAmc3RyZWFtZXItPmJhc2U7Cit9 CisKKy8qCisgKiBNYWluIGVudHJ5IHBvaW50IG9mIHRoZSBhcmNoaXZlIHN0cmVhbWVyIGZvciBy ZWFkaW5nIFdBTCBkYXRhIGZyb20gYSB0YXIKKyAqIGZpbGUuIElmIGEgbWVtYmVyIGlzIGlkZW50 aWZpZWQgYXMgYSB2YWxpZCBXQUwgZmlsZSwgYSBoYXNoIGVudHJ5IGlzIGNyZWF0ZWQKKyAqIGZv ciBpdCwgYW5kIGl0cyBjb250ZW50cyBhcmUgY29waWVkIGludG8gdGhhdCBlbnRyeSdzIGJ1ZmZl ciwgbWFraW5nIHRoZW0KKyAqIGFjY2Vzc2libGUgdG8gdGhlIGRlY29kaW5nIHJvdXRpbmUuCisg Ki8KK3N0YXRpYyB2b2lkCithc3RyZWFtZXJfd2FsZHVtcF9jb250ZW50KGFzdHJlYW1lciAqc3Ry ZWFtZXIsIGFzdHJlYW1lcl9tZW1iZXIgKm1lbWJlciwKKwkJCQkJCSAgY29uc3QgY2hhciAqZGF0 YSwgaW50IGxlbiwKKwkJCQkJCSAgYXN0cmVhbWVyX2FyY2hpdmVfY29udGV4dCBjb250ZXh0KQor eworCWFzdHJlYW1lcl93YWxkdW1wICpteXN0cmVhbWVyID0gKGFzdHJlYW1lcl93YWxkdW1wICop IHN0cmVhbWVyOworCVhMb2dEdW1wUHJpdmF0ZSAqcHJpdmF0ZUluZm8gPSBteXN0cmVhbWVyLT5w cml2YXRlSW5mbzsKKworCUFzc2VydChjb250ZXh0ICE9IEFTVFJFQU1FUl9VTktOT1dOKTsKKwor CXN3aXRjaCAoY29udGV4dCkKKwl7CisJCWNhc2UgQVNUUkVBTUVSX01FTUJFUl9IRUFERVI6CisJ CQl7CisJCQkJY2hhcgkgICAqZm5hbWUgPSBOVUxMOworCQkJCUFyY2hpdmVkV0FMRmlsZSAqZW50 cnk7CisJCQkJYm9vbAkJZm91bmQ7CisKKwkJCQlwZ19sb2dfZGVidWcoInJlYWRpbmcgXCIlc1wi IiwgbWVtYmVyLT5wYXRobmFtZSk7CisKKwkJCQlpZiAoIW1lbWJlcl9pc193YWxfZmlsZShteXN0 cmVhbWVyLCBtZW1iZXIsICZmbmFtZSkpCisJCQkJCWJyZWFrOworCisJCQkJLyoKKwkJCQkgKiBG dXJ0aGVyIGNoZWNrcyBhcmUgc2tpcHBlZCBpZiBhbnkgV0FMIGZpbGUgY2FuIGJlIHJlYWQuCisJ CQkJICogVGhpcyB0eXBpY2FsbHkgb2NjdXJzIGR1cmluZyBpbml0aWFsIHZlcmlmaWNhdGlvbi4K KwkJCQkgKi8KKwkJCQlpZiAoIVJFQURfQU5ZX1dBTChwcml2YXRlSW5mbykpCisJCQkJeworCQkJ CQlYTG9nU2VnTm8Jc2Vnbm87CisJCQkJCVRpbWVMaW5lSUQJdGltZWxpbmU7CisKKwkJCQkJLyoK KwkJCQkJICogU2tpcCB0aGUgc2VnbWVudCBpZiB0aGUgdGltZWxpbmUgZG9lcyBub3QgbWF0Y2gs IGlmIGl0CisJCQkJCSAqIGZhbGxzIG91dHNpZGUgdGhlIGNhbGxlci1zcGVjaWZpZWQgcmFuZ2Uu CisJCQkJCSAqLworCQkJCQlYTG9nRnJvbUZpbGVOYW1lKGZuYW1lLCAmdGltZWxpbmUsICZzZWdu bywgcHJpdmF0ZUluZm8tPnNlZ3NpemUpOworCQkJCQlpZiAocHJpdmF0ZUluZm8tPnRpbWVsaW5l ICE9IHRpbWVsaW5lIHx8CisJCQkJCQlwcml2YXRlSW5mby0+c3RhcnRfc2Vnbm8gPiBzZWdubyB8 fAorCQkJCQkJcHJpdmF0ZUluZm8tPmVuZF9zZWdubyA8IHNlZ25vKQorCQkJCQl7CisJCQkJCQlw ZnJlZShmbmFtZSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKworCQkJCWVudHJ5ID0g QXJjaGl2ZWRXQUxfaW5zZXJ0KHByaXZhdGVJbmZvLT5hcmNoaXZlX3dhbF9odGFiLAorCQkJCQkJ CQkJCSAgIGZuYW1lLCAmZm91bmQpOworCisJCQkJLyoKKwkJCQkgKiBTaG91bGRuJ3QgaGFwcGVu LCBidXQgaWYgaXQgZG9lcywgc2ltcGx5IGlnbm9yZSB0aGUKKwkJCQkgKiBkdXBsaWNhdGUgV0FM IGZpbGUuCisJCQkJICovCisJCQkJaWYgKGZvdW5kKQorCQkJCXsKKwkJCQkJcGdfbG9nX3dhcm5p bmcoImlnbm9yaW5nIGR1cGxpY2F0ZSBXQUwgXCIlc1wiIGZvdW5kIGluIGFyY2hpdmUgXCIlc1wi IiwKKwkJCQkJCQkJICAgbWVtYmVyLT5wYXRobmFtZSwgcHJpdmF0ZUluZm8tPmFyY2hpdmVfbmFt ZSk7CisJCQkJCXBmcmVlKGZuYW1lKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJZW50cnkt PmJ1ZiA9IG1ha2VTdHJpbmdJbmZvKCk7CisJCQkJZW50cnktPnNwaWxsZWQgPSBmYWxzZTsKKwkJ CQllbnRyeS0+cmVhZF9sZW4gPSAwOworCQkJCXByaXZhdGVJbmZvLT5jdXJfZmlsZSA9IGVudHJ5 OworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBBU1RSRUFNRVJfTUVNQkVSX0NPTlRFTlRTOgor CQkJaWYgKHByaXZhdGVJbmZvLT5jdXJfZmlsZSkKKwkJCXsKKwkJCQlhcHBlbmRCaW5hcnlTdHJp bmdJbmZvKHByaXZhdGVJbmZvLT5jdXJfZmlsZS0+YnVmLCBkYXRhLCBsZW4pOworCQkJCXByaXZh dGVJbmZvLT5jdXJfZmlsZS0+cmVhZF9sZW4gKz0gbGVuOworCQkJfQorCQkJYnJlYWs7CisKKwkJ Y2FzZSBBU1RSRUFNRVJfTUVNQkVSX1RSQUlMRVI6CisKKwkJCS8qCisJCQkgKiBFbmQgb2YgdGhp cyB0YXIgbWVtYmVyOyBtYXJrIGN1cl9maWxlIE5VTEwgc28gc3Vic2VxdWVudAorCQkJICogY29u dGVudCBjYWxsYmFja3MgKGlmIGFueSkga25vdyBubyBXQUwgZmlsZSBpcyBjdXJyZW50bHkKKwkJ CSAqIGFjdGl2ZS4KKwkJCSAqLworCQkJcHJpdmF0ZUluZm8tPmN1cl9maWxlID0gTlVMTDsKKwkJ CWJyZWFrOworCisJCWNhc2UgQVNUUkVBTUVSX0FSQ0hJVkVfVFJBSUxFUjoKKwkJCWJyZWFrOwor CisJCWRlZmF1bHQ6CisJCQkvKiBTaG91bGRuJ3QgaGFwcGVuLiAqLworCQkJcGdfZmF0YWwoInVu ZXhwZWN0ZWQgc3RhdGUgd2hpbGUgcGFyc2luZyB0YXIgZmlsZSIpOworCX0KK30KKworLyoKKyAq IEVuZC1vZi1zdHJlYW0gcHJvY2Vzc2luZyBmb3IgYW4gYXN0cmVhbWVyX3dhbGR1bXAgc3RyZWFt LiAgVGhpcyBpcyBhCisgKiB0ZXJtaW5hbCBzdHJlYW1lciBzbyBpdCBtdXN0IGhhdmUgbm8gc3Vj Y2Vzc29yLgorICovCitzdGF0aWMgdm9pZAorYXN0cmVhbWVyX3dhbGR1bXBfZmluYWxpemUoYXN0 cmVhbWVyICpzdHJlYW1lcikKK3sKKwlBc3NlcnQoc3RyZWFtZXItPmJic19uZXh0ID09IE5VTEwp OworfQorCisvKgorICogRnJlZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGFuIGFzdHJlYW1lcl93 YWxkdW1wIHN0cmVhbS4KKyAqLworc3RhdGljIHZvaWQKK2FzdHJlYW1lcl93YWxkdW1wX2ZyZWUo YXN0cmVhbWVyICpzdHJlYW1lcikKK3sKKwlBc3NlcnQoc3RyZWFtZXItPmJic19uZXh0ID09IE5V TEwpOworCXBmcmVlKHN0cmVhbWVyKTsKK30KKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUg YXJjaGl2ZSBtZW1iZXIgbmFtZSBtYXRjaGVzIHRoZSBXQUwgbmFtaW5nIGZvcm1hdC4gSWYKKyAq IHN1Y2Nlc3NmdWwsIGl0IGFsc28gb3V0cHV0cyB0aGUgV0FMIHNlZ21lbnQgbmFtZS4KKyAqLwor c3RhdGljIGJvb2wKK21lbWJlcl9pc193YWxfZmlsZShhc3RyZWFtZXJfd2FsZHVtcCAqbXlzdHJl YW1lciwgYXN0cmVhbWVyX21lbWJlciAqbWVtYmVyLAorCQkJCSAgIGNoYXIgKipmbmFtZSkKK3sK KwlpbnQJCQlwYXRobGVuOworCWNoYXIJCXBhdGhuYW1lW01BWFBHUEFUSF07CisJY2hhcgkgICAq ZmlsZW5hbWU7CisKKwkvKiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIG5vcm1hbCBmaWxlcyAq LworCWlmIChtZW1iZXItPmlzX2RpcmVjdG9yeSB8fCBtZW1iZXItPmlzX2xpbmspCisJCXJldHVy biBmYWxzZTsKKworCWlmIChzdHJsZW4obWVtYmVyLT5wYXRobmFtZSkgPCBYTE9HX0ZOQU1FX0xF TikKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBGb3IgYSBjb3JyZWN0IGNvbXBhcmlzb24s IHdlIG11c3QgcmVtb3ZlIGFueSAnLicgb3IgJy4uJyBjb21wb25lbnRzCisJICogZnJvbSB0aGUg bWVtYmVyIHBhdGhuYW1lLiBTaW1pbGFyIHRvIG1lbWJlcl92ZXJpZnlfaGVhZGVyKCksIHdlIHBy ZXBlbmQKKwkgKiAnLi8nIHRvIHRoZSBwYXRoIHNvIHRoYXQgY2Fub25pY2FsaXplX3BhdGgoKSBj YW4gcHJvcGVybHkgcmVzb2x2ZSBhbmQKKwkgKiBzdHJpcCB0aGVzZSByZWZlcmVuY2VzIGZyb20g dGhlIHRhciBtZW1iZXIgbmFtZS4KKwkgKi8KKwlzbnByaW50ZihwYXRobmFtZSwgTUFYUEdQQVRI LCAiLi8lcyIsIG1lbWJlci0+cGF0aG5hbWUpOworCWNhbm9uaWNhbGl6ZV9wYXRoKHBhdGhuYW1l KTsKKwlwYXRobGVuID0gc3RybGVuKHBhdGhuYW1lKTsKKworCS8qIFdBTCBmaWxlcyBmcm9tIHRo ZSB0b3AtbGV2ZWwgb3IgcGdfd2FsIGRpcmVjdG9yeSB3aWxsIGJlIGRlY29kZWQgKi8KKwlpZiAo cGF0aGxlbiA+IFhMT0dfRk5BTUVfTEVOICYmCisJCXN0cm5jbXAocGF0aG5hbWUsIFhMT0dESVIs IHN0cmxlbihYTE9HRElSKSkgIT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogV0FMIGZpbGUg bWF5IGFwcGVhciB3aXRoIGEgZnVsbCBwYXRoIChlLmcuLCBwZ193YWwvPG5hbWU+KSAqLworCWZp bGVuYW1lID0gcGF0aG5hbWUgKyAocGF0aGxlbiAtIFhMT0dfRk5BTUVfTEVOKTsKKwlpZiAoIUlz WExvZ0ZpbGVOYW1lKGZpbGVuYW1lKSkKKwkJcmV0dXJuIGZhbHNlOworCisJKmZuYW1lID0gcG5z dHJkdXAoZmlsZW5hbWUsIFhMT0dfRk5BTUVfTEVOKTsKKworCXJldHVybiB0cnVlOworfQorCisv KgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBXQUwgZmlsZSBoYXNoIHRhYmxlLgorICovCitzdGF0 aWMgdWludDMyCitoYXNoX3N0cmluZ19wb2ludGVyKGNvbnN0IGNoYXIgKnMpCit7CisJdW5zaWdu ZWQgY2hhciAqc3MgPSAodW5zaWduZWQgY2hhciAqKSBzOworCisJcmV0dXJuIGhhc2hfYnl0ZXMo c3MsIHN0cmxlbihzKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3dhbGR1bXAvbWVzb24u YnVpbGQgYi9zcmMvYmluL3BnX3dhbGR1bXAvbWVzb24uYnVpbGQKaW5kZXggNjMzYTk4NzRiYjUu LjUyOTZmMjFiODJjIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3dhbGR1bXAvbWVzb24uYnVpbGQK KysrIGIvc3JjL2Jpbi9wZ193YWxkdW1wL21lc29uLmJ1aWxkCkBAIC0xLDYgKzEsNyBAQAogIyBD b3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKIAogcGdfd2FsZHVtcF9zb3VyY2VzID0gZmlsZXMoCisgICdhcmNoaXZlX3dhbGR1bXAuYycs CiAgICdjb21wYXQuYycsCiAgICdwZ193YWxkdW1wLmMnLAogICAncm1ncmRlc2MuYycsCkBAIC0x OCw3ICsxOSw3IEBAIGVuZGlmCiAKIHBnX3dhbGR1bXAgPSBleGVjdXRhYmxlKCdwZ193YWxkdW1w JywKICAgcGdfd2FsZHVtcF9zb3VyY2VzLAotICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9jb2Rl LCBsejQsIHpzdGRdLAorICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9jb2RlLCBsaWJwcSwgbHo0 LCB6c3RkXSwKICAgY19hcmdzOiBbJy1ERlJPTlRFTkQnXSwgIyBuZWVkZWQgZm9yIHhsb2dyZWFk ZXIgZXQgYWwKICAga3dhcmdzOiBkZWZhdWx0X2Jpbl9hcmdzLAogKQpAQCAtMjksNiArMzAsNyBA QCB0ZXN0cyArPSB7CiAgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAogICAnYmQn OiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAogICAndGFwJzogeworICAgICdlbnYnOiB7J1RB Uic6IHRhci5mb3VuZCgpID8gdGFyLmZ1bGxfcGF0aCgpIDogJyd9LAogICAgICd0ZXN0cyc6IFsK ICAgICAgICd0LzAwMV9iYXNpYy5wbCcsCiAgICAgICAndC8wMDJfc2F2ZV9mdWxscGFnZS5wbCcs CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3dhbGR1bXAvcGdfd2FsZHVtcC5jIGIvc3JjL2Jpbi9w Z193YWxkdW1wL3BnX3dhbGR1bXAuYwppbmRleCA1ZDMxYjE1ZGJkOC4uZjI4MTUzMTY1ZTYgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfd2FsZHVtcC9wZ193YWxkdW1wLmMKKysrIGIvc3JjL2Jpbi9w Z193YWxkdW1wL3BnX3dhbGR1bXAuYwpAQCAtMTc2LDcgKzE3Niw3IEBAIHNwbGl0X3BhdGgoY29u c3QgY2hhciAqcGF0aCwgY2hhciAqKmRpciwgY2hhciAqKmZuYW1lKQogICoKICAqIHJldHVybiBh IHJlYWQgb25seSBmZAogICovCi1zdGF0aWMgaW50CitpbnQKIG9wZW5fZmlsZV9pbl9kaXJlY3Rv cnkoY29uc3QgY2hhciAqZGlyZWN0b3J5LCBjb25zdCBjaGFyICpmbmFtZSkKIHsKIAlpbnQJCQlm ZCA9IC0xOwpAQCAtMzI3LDggKzMyNyw4IEBAIGlkZW50aWZ5X3RhcmdldF9kaXJlY3RvcnkoY2hh ciAqZGlyZWN0b3J5LCBjaGFyICpmbmFtZSwgaW50ICpXYWxTZWdTeikKIH0KIAogLyoKLSAqIFJl dHVybnMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGRhdGEgdG8gYmUgcmVhZC4gUmV0dXJucyAt MSBpZiB0aGUgZW5kCi0gKiBwb2ludCBoYXMgYWxyZWFkeSBiZWVuIHJlYWNoZWQuCisgKiBSZXR1 cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBmb3IgdGhlIGdpdmVuIHBhZ2UuICBSZXR1 cm5zIC0xIGlmCisgKiB0aGUgcmVxdWVzdGVkIHJhbmdlIGhhcyBhbHJlYWR5IGJlZW4gcmVhY2hl ZCBvciBleGNlZWRlZC4KICAqLwogc3RhdGljIGlubGluZSBpbnQKIHJlcXVpcmVkX3JlYWRfbGVu KFhMb2dEdW1wUHJpdmF0ZSAqcHJpdmF0ZSwgWExvZ1JlY1B0ciB0YXJnZXRQYWdlUHRyLApAQCAt NDQwLDYgKzQ0MCwxMDYgQEAgV0FMRHVtcFJlYWRQYWdlKFhMb2dSZWFkZXJTdGF0ZSAqc3RhdGUs IFhMb2dSZWNQdHIgdGFyZ2V0UGFnZVB0ciwgaW50IHJlcUxlbiwKIAlyZXR1cm4gY291bnQ7CiB9 CiAKKy8qCisgKiBwZ193YWxkdW1wJ3MgWExvZ1JlYWRlclJvdXRpbmUtPnNlZ21lbnRfb3BlbiBj YWxsYmFjayB0byBzdXBwb3J0IGR1bXBpbmcgV0FMCisgKiBmaWxlcyBmcm9tIHRhciBhcmNoaXZl cy4gIFNlZ21lbnQgdHJhY2tpbmcgaXMgaGFuZGxlZCBieQorICogVGFyV0FMRHVtcFJlYWRQYWdl LCBzbyBubyBhY3Rpb24gaXMgbmVlZGVkIGhlcmUuCisgKi8KK3N0YXRpYyB2b2lkCitUYXJXQUxE dW1wT3BlblNlZ21lbnQoWExvZ1JlYWRlclN0YXRlICpzdGF0ZSwgWExvZ1NlZ05vIG5leHRTZWdO bywKKwkJCQkJICBUaW1lTGluZUlEICp0bGlfcCkKK3sKKwkvKiBObyBhY3Rpb24gbmVlZGVkICov Cit9CisKKy8qCisgKiBwZ193YWxkdW1wJ3MgWExvZ1JlYWRlclJvdXRpbmUtPnNlZ21lbnRfY2xv c2UgY2FsbGJhY2sgdG8gc3VwcG9ydCBkdW1waW5nCisgKiBXQUwgZmlsZXMgZnJvbSB0YXIgYXJj aGl2ZXMuICBTZWdtZW50IHRyYWNraW5nIGlzIGhhbmRsZWQgYnkKKyAqIFRhcldBTER1bXBSZWFk UGFnZSwgc28gbm8gYWN0aW9uIGlzIG5lZWRlZCBoZXJlLgorICovCitzdGF0aWMgdm9pZAorVGFy V0FMRHVtcENsb3NlU2VnbWVudChYTG9nUmVhZGVyU3RhdGUgKnN0YXRlKQoreworCS8qIE5vIGFj dGlvbiBuZWVkZWQgKi8KK30KKworLyoKKyAqIHBnX3dhbGR1bXAncyBYTG9nUmVhZGVyUm91dGlu ZS0+cGFnZV9yZWFkIGNhbGxiYWNrIHRvIHN1cHBvcnQgZHVtcGluZyBXQUwKKyAqIGZpbGVzIGZy b20gdGFyIGFyY2hpdmVzLgorICovCitzdGF0aWMgaW50CitUYXJXQUxEdW1wUmVhZFBhZ2UoWExv Z1JlYWRlclN0YXRlICpzdGF0ZSwgWExvZ1JlY1B0ciB0YXJnZXRQYWdlUHRyLCBpbnQgcmVxTGVu LAorCQkJCSAgIFhMb2dSZWNQdHIgdGFyZ2V0UHRyLCBjaGFyICpyZWFkQnVmZikKK3sKKwlYTG9n RHVtcFByaXZhdGUgKnByaXZhdGUgPSBzdGF0ZS0+cHJpdmF0ZV9kYXRhOworCWludAkJCWNvdW50 ID0gcmVxdWlyZWRfcmVhZF9sZW4ocHJpdmF0ZSwgdGFyZ2V0UGFnZVB0ciwgcmVxTGVuKTsKKwlp bnQJCQlXYWxTZWdTeiA9IHN0YXRlLT5zZWdjeHQud3Nfc2Vnc2l6ZTsKKwlYTG9nU2VnTm8JY3Vy U2VnTm87CisKKwkvKiBCYWlsIG91dCBpZiB0aGUgY291bnQgdG8gYmUgcmVhZCBpcyBub3QgdmFs aWQgKi8KKwlpZiAoY291bnQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIElmIHRoZSB0 YXJnZXQgcGFnZSBpcyBpbiBhIGRpZmZlcmVudCBzZWdtZW50LCBmcmVlIHRoZSBidWZmZXIgYW5k L29yCisJICogdGVtcG9yYXJ5IGZpbGUgZGlzayBzcGFjZSBvY2N1cGllZCBieSB0aGUgcHJldmlv dXMgc2VnbWVudCdzIGRhdGEuCisJICogU2luY2UgcGdfd2FsZHVtcCBuZXZlciByZXF1ZXN0cyB0 aGUgc2FtZSBXQUwgYnl0ZXMgdHdpY2UsIG1vdmluZyB0byBhCisJICogbmV3IHNlZ21lbnQgaW1w bGllcyB0aGUgcHJldmlvdXMgYnVmZmVyJ3MgZGF0YSBhbmQgdGhhdCBzZWdtZW50IHdpbGwKKwkg KiBub3QgYmUgbmVlZGVkIGFnYWluLgorCSAqCisJICogQWZ0ZXJ3YXJkLCBjaGVjayBmb3IgdGhl IG5leHQgcmVxdWlyZWQgV0FMIHNlZ21lbnQncyBwaHlzaWNhbCBleGlzdGVuY2UKKwkgKiBpbiB0 aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmaXJzdCBiZWZvcmUgaW52b2tpbmcgdGhlIGFyY2hpdmUg c3RyZWFtZXIuCisJICovCisJY3VyU2VnTm8gPSBzdGF0ZS0+c2VnLndzX3NlZ25vOworCWlmICgh WExCeXRlSW5TZWcodGFyZ2V0UGFnZVB0ciwgY3VyU2VnTm8sIFdhbFNlZ1N6KSkKKwl7CisJCWNo YXIJCWZuYW1lW01BWEZOQU1FTEVOXTsKKwkJWExvZ1NlZ05vCW5leHRTZWdObzsKKworCQkvKgor CQkgKiBDYWxjdWxhdGUgdGhlIG5leHQgV0FMIHNlZ21lbnQgdG8gYmUgZGVjb2RlZCBmcm9tIHRo ZSBnaXZlbiBwYWdlCisJCSAqIHBvaW50ZXIuCisJCSAqLworCQlYTEJ5dGVUb1NlZyh0YXJnZXRQ YWdlUHRyLCBuZXh0U2VnTm8sIFdhbFNlZ1N6KTsKKwkJc3RhdGUtPnNlZy53c190bGkgPSBwcml2 YXRlLT50aW1lbGluZTsKKwkJc3RhdGUtPnNlZy53c19zZWdubyA9IG5leHRTZWdObzsKKworCQkv KiBDbG9zZSB0aGUgV0FMIHNlZ21lbnQgZmlsZSBpZiBpdCBpcyBjdXJyZW50bHkgb3BlbiAqLwor CQlpZiAoc3RhdGUtPnNlZy53c19maWxlID49IDApCisJCXsKKwkJCWNsb3NlKHN0YXRlLT5zZWcu d3NfZmlsZSk7CisJCQlzdGF0ZS0+c2VnLndzX2ZpbGUgPSAtMTsKKwkJfQorCisJCS8qCisJCSAq IElmIGluIHByZS1yZWFkaW5nIG1vZGUgKHByaW9yIHRvIGFjdHVhbCBkZWNvZGluZyksIGRvIG5v dCBkZWxldGUKKwkJICogYW55IGVudHJpZXMgdGhhdCBtaWdodCBiZSByZXF1ZXN0ZWQgYWdhaW4g b25jZSB0aGUgZGVjb2RpbmcgbG9vcAorCQkgKiBzdGFydHMuIEZvciBtb3JlIGRldGFpbHMsIHNl ZSB0aGUgY29tbWVudHMgaW4KKwkJICogcmVhZF9hcmNoaXZlX3dhbF9wYWdlKCkuCisJCSAqLwor CQlpZiAocHJpdmF0ZS0+ZGVjb2Rpbmdfc3RhcnRlZCAmJiBjdXJTZWdObyA8IG5leHRTZWdObykK KwkJeworCQkJWExvZ0ZpbGVOYW1lKGZuYW1lLCBzdGF0ZS0+c2VnLndzX3RsaSwgY3VyU2VnTm8s IFdhbFNlZ1N6KTsKKwkJCWZyZWVfYXJjaGl2ZV93YWxfZW50cnkoZm5hbWUsIHByaXZhdGUpOwor CQl9CisKKwkJLyoKKwkJICogSWYgdGhlIG5leHQgc2VnbWVudCBleGlzdHMsIG9wZW4gaXQgYW5k IGNvbnRpbnVlIHJlYWRpbmcgZnJvbSB0aGVyZQorCQkgKi8KKwkJWExvZ0ZpbGVOYW1lKGZuYW1l LCBzdGF0ZS0+c2VnLndzX3RsaSwgbmV4dFNlZ05vLCBXYWxTZWdTeik7CisJCXN0YXRlLT5zZWcu d3NfZmlsZSA9IG9wZW5fZmlsZV9pbl9kaXJlY3RvcnkoVG1wV2FsU2VnRGlyLCBmbmFtZSk7CisJ fQorCisJLyogQ29udGludWUgcmVhZGluZyBmcm9tIHRoZSBvcGVuIFdBTCBzZWdtZW50LCBpZiBh bnkgKi8KKwlpZiAoc3RhdGUtPnNlZy53c19maWxlID49IDApCisJCXJldHVybiBXQUxEdW1wUmVh ZFBhZ2Uoc3RhdGUsIHRhcmdldFBhZ2VQdHIsIGNvdW50LCB0YXJnZXRQdHIsCisJCQkJCQkJICAg cmVhZEJ1ZmYpOworCisJLyogT3RoZXJ3aXNlLCByZWFkIHRoZSBXQUwgcGFnZSBmcm9tIHRoZSBh cmNoaXZlIHN0cmVhbWVyICovCisJcmV0dXJuIHJlYWRfYXJjaGl2ZV93YWxfcGFnZShwcml2YXRl LCB0YXJnZXRQYWdlUHRyLCBjb3VudCwgcmVhZEJ1ZmYsCisJCQkJCQkJCSBXYWxTZWdTeik7Cit9 CisKIC8qCiAgKiBCb29sZWFuIHRvIHJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBXQUwgcmVjb3Jk IG1hdGNoZXMgYSBzcGVjaWZpYyByZWxhdGlvbgogICogYW5kIG9wdGlvbmFsbHkgYmxvY2suCkBA IC03NzcsOCArODc3LDggQEAgdXNhZ2Uodm9pZCkKIAlwcmludGYoXygiICAtRiwgLS1mb3JrPUZP UksgICAgICAgIG9ubHkgc2hvdyByZWNvcmRzIHRoYXQgbW9kaWZ5IGJsb2NrcyBpbiBmb3JrIEZP Uks7XG4iCiAJCQkgIiAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCBuYW1lcyBhcmUgbWFp biwgZnNtLCB2bSwgaW5pdFxuIikpOwogCXByaW50ZihfKCIgIC1uLCAtLWxpbWl0PU4gICAgICAg ICAgbnVtYmVyIG9mIHJlY29yZHMgdG8gZGlzcGxheVxuIikpOwotCXByaW50ZihfKCIgIC1wLCAt LXBhdGg9UEFUSCAgICAgICAgZGlyZWN0b3J5IGluIHdoaWNoIHRvIGZpbmQgV0FMIHNlZ21lbnQg ZmlsZXMgb3IgYVxuIgotCQkJICIgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHdp dGggYSAuL3BnX3dhbCB0aGF0IGNvbnRhaW5zIHN1Y2ggZmlsZXNcbiIKKwlwcmludGYoXygiICAt cCwgLS1wYXRoPVBBVEggICAgICAgIGEgdGFyIGFyY2hpdmUgb3IgYSBkaXJlY3RvcnkgaW4gd2hp Y2ggdG8gZmluZCBXQUwgc2VnbWVudCBmaWxlcyBvclxuIgorCQkJICIgICAgICAgICAgICAgICAg ICAgICAgICAgYSBkaXJlY3Rvcnkgd2l0aCBhIHBnX3dhbCBzdWJkaXJlY3RvcnkgY29udGFpbmlu ZyBzdWNoIGZpbGVzXG4iCiAJCQkgIiAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdDog Y3VycmVudCBkaXJlY3RvcnksIC4vcGdfd2FsLCAkUEdEQVRBL3BnX3dhbClcbiIpKTsKIAlwcmlu dGYoXygiICAtcSwgLS1xdWlldCAgICAgICAgICAgIGRvIG5vdCBwcmludCBhbnkgb3V0cHV0LCBl eGNlcHQgZm9yIGVycm9yc1xuIikpOwogCXByaW50ZihfKCIgIC1yLCAtLXJtZ3I9Uk1HUiAgICAg ICAgb25seSBzaG93IHJlY29yZHMgZ2VuZXJhdGVkIGJ5IHJlc291cmNlIG1hbmFnZXIgUk1HUjtc biIKQEAgLTgxMCw3ICs5MTAsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlYTG9n UmVjb3JkICpyZWNvcmQ7CiAJWExvZ1JlY1B0cglmaXJzdF9yZWNvcmQ7CiAJY2hhcgkgICAqd2Fs ZGlyID0gTlVMTDsKKwljaGFyCSAgICp3YWxwYXRoID0gTlVMTDsKIAljaGFyCSAgICplcnJvcm1z ZzsKKwlwZ19jb21wcmVzc19hbGdvcml0aG0gY29tcHJlc3Npb24gPSBQR19DT01QUkVTU0lPTl9O T05FOwogCiAJc3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7CiAJCXsiYmtw LWRldGFpbHMiLCBub19hcmd1bWVudCwgTlVMTCwgJ2InfSwKQEAgLTg2OCw2ICs5NzAsMTAgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJcHJpdmF0ZS5zdGFydHB0ciA9IEludmFsaWRY TG9nUmVjUHRyOwogCXByaXZhdGUuZW5kcHRyID0gSW52YWxpZFhMb2dSZWNQdHI7CiAJcHJpdmF0 ZS5lbmRwdHJfcmVhY2hlZCA9IGZhbHNlOworCXByaXZhdGUuZGVjb2Rpbmdfc3RhcnRlZCA9IGZh bHNlOworCXByaXZhdGUuYXJjaGl2ZV9uYW1lID0gTlVMTDsKKwlwcml2YXRlLnN0YXJ0X3NlZ25v ID0gMDsKKwlwcml2YXRlLmVuZF9zZWdubyA9IFVJTlQ2NF9NQVg7CiAKIAljb25maWcucXVpZXQg PSBmYWxzZTsKIAljb25maWcuYmtwX2RldGFpbHMgPSBmYWxzZTsKQEAgLTk0Myw3ICsxMDQ5LDcg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJfQogCQkJCWJyZWFrOwogCQkJY2Fz ZSAncCc6Ci0JCQkJd2FsZGlyID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJd2FscGF0aCA9IHBn X3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAncSc6CiAJCQkJY29uZmlnLnF1 aWV0ID0gdHJ1ZTsKQEAgLTExMDcsMTIgKzEyMTMsMjEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJCWdvdG8gYmFkX2FyZ3VtZW50OwogCX0KIAotCWlmICh3YWxkaXIgIT0gTlVMTCkK KwlpZiAod2FscGF0aCAhPSBOVUxMKQogCXsKKwkJLyogdmFsaWRhdGUgcGF0aCBwb2ludHMgdG8g dGFyIGFyY2hpdmUgKi8KKwkJaWYgKHBhcnNlX3Rhcl9jb21wcmVzc19hbGdvcml0aG0od2FscGF0 aCwgJmNvbXByZXNzaW9uKSkKKwkJeworCQkJY2hhcgkgICAqZm5hbWUgPSBOVUxMOworCisJCQlz cGxpdF9wYXRoKHdhbHBhdGgsICZ3YWxkaXIsICZmbmFtZSk7CisKKwkJCXByaXZhdGUuYXJjaGl2 ZV9uYW1lID0gZm5hbWU7CisJCX0KIAkJLyogdmFsaWRhdGUgcGF0aCBwb2ludHMgdG8gZGlyZWN0 b3J5ICovCi0JCWlmICghdmVyaWZ5X2RpcmVjdG9yeSh3YWxkaXIpKQorCQllbHNlIGlmICghdmVy aWZ5X2RpcmVjdG9yeSh3YWxwYXRoKSkKIAkJewotCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3Qg b3BlbiBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIHdhbGRpcik7CisJCQlwZ19sb2dfZXJyb3IoImNv dWxkIG5vdCBvcGVuIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgd2FscGF0aCk7CiAJCQlnb3RvIGJh ZF9hcmd1bWVudDsKIAkJfQogCX0KQEAgLTExMjgsNiArMTI0MywxNyBAQCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKIAkJaW50CQkJZmQ7CiAJCVhMb2dTZWdObwlzZWdubzsKIAorCQkvKgor CQkgKiBJZiBhIHRhciBhcmNoaXZlIGlzIHBhc3NlZCB1c2luZyB0aGUgLS1wYXRoIG9wdGlvbiwg YWxsIG90aGVyCisJCSAqIGFyZ3VtZW50cyBiZWNvbWUgdW5uZWNlc3NhcnkuCisJCSAqLworCQlp ZiAocHJpdmF0ZS5hcmNoaXZlX25hbWUpCisJCXsKKwkJCXBnX2xvZ19lcnJvcigidW5uZWNlc3Nh cnkgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBzcGVjaWZpZWQgd2l0aCB0YXIgYXJjaGl2ZSAoZmly c3QgaXMgXCIlc1wiKSIsCisJCQkJCQkgYXJndltvcHRpbmRdKTsKKwkJCWdvdG8gYmFkX2FyZ3Vt ZW50OworCQl9CisKIAkJc3BsaXRfcGF0aChhcmd2W29wdGluZF0sICZkaXJlY3RvcnksICZmbmFt ZSk7CiAKIAkJaWYgKHdhbGRpciA9PSBOVUxMICYmIGRpcmVjdG9yeSAhPSBOVUxMKQpAQCAtMTEz OCw2OSArMTI2NCw3NSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlwZ19mYXRh bCgiY291bGQgbm90IG9wZW4gZGlyZWN0b3J5IFwiJXNcIjogJW0iLCB3YWxkaXIpOwogCQl9CiAK LQkJd2FsZGlyID0gaWRlbnRpZnlfdGFyZ2V0X2RpcmVjdG9yeSh3YWxkaXIsIGZuYW1lLCAmcHJp dmF0ZS5zZWdzaXplKTsKLQkJZmQgPSBvcGVuX2ZpbGVfaW5fZGlyZWN0b3J5KHdhbGRpciwgZm5h bWUpOwotCQlpZiAoZmQgPCAwKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIl c1wiIiwgZm5hbWUpOwotCQljbG9zZShmZCk7Ci0KLQkJLyogcGFyc2UgcG9zaXRpb24gZnJvbSBm aWxlICovCi0JCVhMb2dGcm9tRmlsZU5hbWUoZm5hbWUsICZwcml2YXRlLnRpbWVsaW5lLCAmc2Vn bm8sIHByaXZhdGUuc2Vnc2l6ZSk7Ci0KLQkJaWYgKCFYTG9nUmVjUHRySXNWYWxpZChwcml2YXRl LnN0YXJ0cHRyKSkKLQkJCVhMb2dTZWdOb09mZnNldFRvUmVjUHRyKHNlZ25vLCAwLCBwcml2YXRl LnNlZ3NpemUsIHByaXZhdGUuc3RhcnRwdHIpOwotCQllbHNlIGlmICghWExCeXRlSW5TZWcocHJp dmF0ZS5zdGFydHB0ciwgc2Vnbm8sIHByaXZhdGUuc2Vnc2l6ZSkpCisJCWlmIChmbmFtZSAhPSBO VUxMICYmIHBhcnNlX3Rhcl9jb21wcmVzc19hbGdvcml0aG0oZm5hbWUsICZjb21wcmVzc2lvbikp CiAJCXsKLQkJCXBnX2xvZ19lcnJvcigic3RhcnQgV0FMIGxvY2F0aW9uICVYLyUwOFggaXMgbm90 IGluc2lkZSBmaWxlIFwiJXNcIiIsCi0JCQkJCQkgTFNOX0ZPUk1BVF9BUkdTKHByaXZhdGUuc3Rh cnRwdHIpLAotCQkJCQkJIGZuYW1lKTsKLQkJCWdvdG8gYmFkX2FyZ3VtZW50OworCQkJcHJpdmF0 ZS5hcmNoaXZlX25hbWUgPSBmbmFtZTsKIAkJfQotCi0JCS8qIG5vIHNlY29uZCBmaWxlIHNwZWNp ZmllZCwgc2V0IGVuZCBwb3NpdGlvbiAqLwotCQlpZiAoIShvcHRpbmQgKyAxIDwgYXJnYykgJiYg IVhMb2dSZWNQdHJJc1ZhbGlkKHByaXZhdGUuZW5kcHRyKSkKLQkJCVhMb2dTZWdOb09mZnNldFRv UmVjUHRyKHNlZ25vICsgMSwgMCwgcHJpdmF0ZS5zZWdzaXplLCBwcml2YXRlLmVuZHB0cik7Ci0K LQkJLyogcGFyc2UgRU5EU0VHIGlmIHBhc3NlZCAqLwotCQlpZiAob3B0aW5kICsgMSA8IGFyZ2Mp CisJCWVsc2UKIAkJewotCQkJWExvZ1NlZ05vCWVuZHNlZ25vOwotCi0JCQkvKiBpZ25vcmUgZGly ZWN0b3J5LCBhbHJlYWR5IGhhdmUgdGhhdCAqLwotCQkJc3BsaXRfcGF0aChhcmd2W29wdGluZCAr IDFdLCAmZGlyZWN0b3J5LCAmZm5hbWUpOwotCisJCQl3YWxkaXIgPSBpZGVudGlmeV90YXJnZXRf ZGlyZWN0b3J5KHdhbGRpciwgZm5hbWUsICZwcml2YXRlLnNlZ3NpemUpOwogCQkJZmQgPSBvcGVu X2ZpbGVfaW5fZGlyZWN0b3J5KHdhbGRpciwgZm5hbWUpOwogCQkJaWYgKGZkIDwgMCkKIAkJCQlw Z19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIiLCBmbmFtZSk7CiAJCQljbG9zZShm ZCk7CiAKIAkJCS8qIHBhcnNlIHBvc2l0aW9uIGZyb20gZmlsZSAqLwotCQkJWExvZ0Zyb21GaWxl TmFtZShmbmFtZSwgJnByaXZhdGUudGltZWxpbmUsICZlbmRzZWdubywgcHJpdmF0ZS5zZWdzaXpl KTsKKwkJCVhMb2dGcm9tRmlsZU5hbWUoZm5hbWUsICZwcml2YXRlLnRpbWVsaW5lLCAmc2Vnbm8s IHByaXZhdGUuc2Vnc2l6ZSk7CiAKLQkJCWlmIChlbmRzZWdubyA8IHNlZ25vKQotCQkJCXBnX2Zh dGFsKCJFTkRTRUcgJXMgaXMgYmVmb3JlIFNUQVJUU0VHICVzIiwKLQkJCQkJCSBhcmd2W29wdGlu ZCArIDFdLCBhcmd2W29wdGluZF0pOworCQkJaWYgKCFYTG9nUmVjUHRySXNWYWxpZChwcml2YXRl LnN0YXJ0cHRyKSkKKwkJCQlYTG9nU2VnTm9PZmZzZXRUb1JlY1B0cihzZWdubywgMCwgcHJpdmF0 ZS5zZWdzaXplLCBwcml2YXRlLnN0YXJ0cHRyKTsKKwkJCWVsc2UgaWYgKCFYTEJ5dGVJblNlZyhw cml2YXRlLnN0YXJ0cHRyLCBzZWdubywgcHJpdmF0ZS5zZWdzaXplKSkKKwkJCXsKKwkJCQlwZ19s b2dfZXJyb3IoInN0YXJ0IFdBTCBsb2NhdGlvbiAlWC8lMDhYIGlzIG5vdCBpbnNpZGUgZmlsZSBc IiVzXCIiLAorCQkJCQkJCSBMU05fRk9STUFUX0FSR1MocHJpdmF0ZS5zdGFydHB0ciksCisJCQkJ CQkJIGZuYW1lKTsKKwkJCQlnb3RvIGJhZF9hcmd1bWVudDsKKwkJCX0KIAotCQkJaWYgKCFYTG9n UmVjUHRySXNWYWxpZChwcml2YXRlLmVuZHB0cikpCi0JCQkJWExvZ1NlZ05vT2Zmc2V0VG9SZWNQ dHIoZW5kc2Vnbm8gKyAxLCAwLCBwcml2YXRlLnNlZ3NpemUsCi0JCQkJCQkJCQkJcHJpdmF0ZS5l bmRwdHIpOworCQkJLyogbm8gc2Vjb25kIGZpbGUgc3BlY2lmaWVkLCBzZXQgZW5kIHBvc2l0aW9u ICovCisJCQlpZiAoIShvcHRpbmQgKyAxIDwgYXJnYykgJiYgIVhMb2dSZWNQdHJJc1ZhbGlkKHBy aXZhdGUuZW5kcHRyKSkKKwkJCQlYTG9nU2VnTm9PZmZzZXRUb1JlY1B0cihzZWdubyArIDEsIDAs IHByaXZhdGUuc2Vnc2l6ZSwgcHJpdmF0ZS5lbmRwdHIpOwogCi0JCQkvKiBzZXQgc2Vnbm8gdG8g ZW5kc2Vnbm8gZm9yIGNoZWNrIG9mIC0tZW5kICovCi0JCQlzZWdubyA9IGVuZHNlZ25vOwotCQl9 CisJCQkvKiBwYXJzZSBFTkRTRUcgaWYgcGFzc2VkICovCisJCQlpZiAob3B0aW5kICsgMSA8IGFy Z2MpCisJCQl7CisJCQkJWExvZ1NlZ05vCWVuZHNlZ25vOwogCisJCQkJLyogaWdub3JlIGRpcmVj dG9yeSwgYWxyZWFkeSBoYXZlIHRoYXQgKi8KKwkJCQlzcGxpdF9wYXRoKGFyZ3Zbb3B0aW5kICsg MV0sICZkaXJlY3RvcnksICZmbmFtZSk7CiAKLQkJaWYgKCFYTEJ5dGVJblNlZyhwcml2YXRlLmVu ZHB0ciwgc2Vnbm8sIHByaXZhdGUuc2Vnc2l6ZSkgJiYKLQkJCXByaXZhdGUuZW5kcHRyICE9IChz ZWdubyArIDEpICogcHJpdmF0ZS5zZWdzaXplKQotCQl7Ci0JCQlwZ19sb2dfZXJyb3IoImVuZCBX QUwgbG9jYXRpb24gJVgvJTA4WCBpcyBub3QgaW5zaWRlIGZpbGUgXCIlc1wiIiwKLQkJCQkJCSBM U05fRk9STUFUX0FSR1MocHJpdmF0ZS5lbmRwdHIpLAotCQkJCQkJIGFyZ3ZbYXJnYyAtIDFdKTsK LQkJCWdvdG8gYmFkX2FyZ3VtZW50OworCQkJCWZkID0gb3Blbl9maWxlX2luX2RpcmVjdG9yeSh3 YWxkaXIsIGZuYW1lKTsKKwkJCQlpZiAoZmQgPCAwKQorCQkJCQlwZ19mYXRhbCgiY291bGQgbm90 IG9wZW4gZmlsZSBcIiVzXCIiLCBmbmFtZSk7CisJCQkJY2xvc2UoZmQpOworCisJCQkJLyogcGFy c2UgcG9zaXRpb24gZnJvbSBmaWxlICovCisJCQkJWExvZ0Zyb21GaWxlTmFtZShmbmFtZSwgJnBy aXZhdGUudGltZWxpbmUsICZlbmRzZWdubywgcHJpdmF0ZS5zZWdzaXplKTsKKworCQkJCWlmIChl bmRzZWdubyA8IHNlZ25vKQorCQkJCQlwZ19mYXRhbCgiRU5EU0VHICVzIGlzIGJlZm9yZSBTVEFS VFNFRyAlcyIsCisJCQkJCQkJIGFyZ3Zbb3B0aW5kICsgMV0sIGFyZ3Zbb3B0aW5kXSk7CisKKwkJ CQlpZiAoIVhMb2dSZWNQdHJJc1ZhbGlkKHByaXZhdGUuZW5kcHRyKSkKKwkJCQkJWExvZ1NlZ05v T2Zmc2V0VG9SZWNQdHIoZW5kc2Vnbm8gKyAxLCAwLCBwcml2YXRlLnNlZ3NpemUsCisJCQkJCQkJ CQkJCXByaXZhdGUuZW5kcHRyKTsKKworCQkJCS8qIHNldCBzZWdubyB0byBlbmRzZWdubyBmb3Ig Y2hlY2sgb2YgLS1lbmQgKi8KKwkJCQlzZWdubyA9IGVuZHNlZ25vOworCQkJfQorCisJCQlpZiAo IVhMQnl0ZUluU2VnKHByaXZhdGUuZW5kcHRyLCBzZWdubywgcHJpdmF0ZS5zZWdzaXplKSAmJgor CQkJCXByaXZhdGUuZW5kcHRyICE9IChzZWdubyArIDEpICogcHJpdmF0ZS5zZWdzaXplKQorCQkJ eworCQkJCXBnX2xvZ19lcnJvcigiZW5kIFdBTCBsb2NhdGlvbiAlWC8lMDhYIGlzIG5vdCBpbnNp ZGUgZmlsZSBcIiVzXCIiLAorCQkJCQkJCSBMU05fRk9STUFUX0FSR1MocHJpdmF0ZS5lbmRwdHIp LAorCQkJCQkJCSBhcmd2W2FyZ2MgLSAxXSk7CisJCQkJZ290byBiYWRfYXJndW1lbnQ7CisJCQl9 CiAJCX0KIAl9Ci0JZWxzZQotCQl3YWxkaXIgPSBpZGVudGlmeV90YXJnZXRfZGlyZWN0b3J5KHdh bGRpciwgTlVMTCwgJnByaXZhdGUuc2Vnc2l6ZSk7CisJZWxzZSBpZiAoIXByaXZhdGUuYXJjaGl2 ZV9uYW1lKQorCQl3YWxkaXIgPSBpZGVudGlmeV90YXJnZXRfZGlyZWN0b3J5KHdhbHBhdGgsIE5V TEwsICZwcml2YXRlLnNlZ3NpemUpOwogCiAJLyogd2UgZG9uJ3Qga25vdyB3aGF0IHRvIHByaW50 ICovCiAJaWYgKCFYTG9nUmVjUHRySXNWYWxpZChwcml2YXRlLnN0YXJ0cHRyKSkKQEAgLTEyMDks MTUgKzEzNDEsNDYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWdvdG8gYmFkX2Fy Z3VtZW50OwogCX0KIAorCS8qIC0tZm9sbG93IGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCB0YXIgYXJj aGl2ZXMgKi8KKwlpZiAoY29uZmlnLmZvbGxvdyAmJiBwcml2YXRlLmFyY2hpdmVfbmFtZSkKKwl7 CisJCXBnX2xvZ19lcnJvcigiLS1mb2xsb3cgaXMgbm90IHN1cHBvcnRlZCB3aGVuIHJlYWRpbmcg ZnJvbSBhIHRhciBhcmNoaXZlIik7CisJCWdvdG8gYmFkX2FyZ3VtZW50OworCX0KKwogCS8qIGRv bmUgd2l0aCBhcmd1bWVudCBwYXJzaW5nLCBkbyB0aGUgYWN0dWFsIHdvcmsgKi8KIAogCS8qIHdl IGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkLCBzdGFydCByZWFkaW5nICovCi0JeGxvZ3JlYWRlcl9z dGF0ZSA9Ci0JCVhMb2dSZWFkZXJBbGxvY2F0ZShwcml2YXRlLnNlZ3NpemUsIHdhbGRpciwKLQkJ CQkJCSAgIFhMX1JPVVRJTkUoLnBhZ2VfcmVhZCA9IFdBTER1bXBSZWFkUGFnZSwKLQkJCQkJCQkJ CSAgLnNlZ21lbnRfb3BlbiA9IFdBTER1bXBPcGVuU2VnbWVudCwKLQkJCQkJCQkJCSAgLnNlZ21l bnRfY2xvc2UgPSBXQUxEdW1wQ2xvc2VTZWdtZW50KSwKLQkJCQkJCSAgICZwcml2YXRlKTsKKwlp ZiAocHJpdmF0ZS5hcmNoaXZlX25hbWUpCisJeworCQkvKgorCQkgKiBBIE5VTEwgV0FMIGRpcmVj dG9yeSBpbmRpY2F0ZXMgdGhhdCB0aGUgYXJjaGl2ZSBmaWxlIGlzIGxvY2F0ZWQgaW4KKwkJICog dGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisJCSAqLworCQlpZiAod2FsZGlyID09IE5V TEwpCisJCQl3YWxkaXIgPSBwZ19zdHJkdXAoIi4iKTsKKworCQkvKiBTZXQgdXAgZm9yIHJlYWRp bmcgdGFyIGZpbGUgKi8KKwkJaW5pdF9hcmNoaXZlX3JlYWRlcigmcHJpdmF0ZSwgd2FsZGlyLCAm cHJpdmF0ZS5zZWdzaXplLCBjb21wcmVzc2lvbik7CisKKwkJLyogUm91dGluZSB0byBkZWNvZGUg V0FMIGZpbGVzIGluIHRhciBhcmNoaXZlICovCisJCXhsb2dyZWFkZXJfc3RhdGUgPQorCQkJWExv Z1JlYWRlckFsbG9jYXRlKHByaXZhdGUuc2Vnc2l6ZSwgd2FsZGlyLAorCQkJCQkJCSAgIFhMX1JP VVRJTkUoLnBhZ2VfcmVhZCA9IFRhcldBTER1bXBSZWFkUGFnZSwKKwkJCQkJCQkJCQkgIC5zZWdt ZW50X29wZW4gPSBUYXJXQUxEdW1wT3BlblNlZ21lbnQsCisJCQkJCQkJCQkJICAuc2VnbWVudF9j bG9zZSA9IFRhcldBTER1bXBDbG9zZVNlZ21lbnQpLAorCQkJCQkJCSAgICZwcml2YXRlKTsKKwl9 CisJZWxzZQorCXsKKwkJeGxvZ3JlYWRlcl9zdGF0ZSA9CisJCQlYTG9nUmVhZGVyQWxsb2NhdGUo cHJpdmF0ZS5zZWdzaXplLCB3YWxkaXIsCisJCQkJCQkJICAgWExfUk9VVElORSgucGFnZV9yZWFk ID0gV0FMRHVtcFJlYWRQYWdlLAorCQkJCQkJCQkJCSAgLnNlZ21lbnRfb3BlbiA9IFdBTER1bXBP cGVuU2VnbWVudCwKKwkJCQkJCQkJCQkgIC5zZWdtZW50X2Nsb3NlID0gV0FMRHVtcENsb3NlU2Vn bWVudCksCisJCQkJCQkJICAgJnByaXZhdGUpOworCX0KKwogCWlmICgheGxvZ3JlYWRlcl9zdGF0 ZSkKIAkJcGdfZmF0YWwoIm91dCBvZiBtZW1vcnkgd2hpbGUgYWxsb2NhdGluZyBhIFdBTCByZWFk aW5nIHByb2Nlc3NvciIpOwogCkBAIC0xMjQ1LDYgKzE0MDgsOSBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAlpZiAoY29uZmlnLnN0YXRzID09IHRydWUgJiYgIWNvbmZpZy5xdWlldCkK IAkJc3RhdHMuc3RhcnRwdHIgPSBmaXJzdF9yZWNvcmQ7CiAKKwkvKiBGbGFnIGluZGljYXRpbmcg dGhhdCB0aGUgZGVjb2RpbmcgbG9vcCBoYXMgYmVlbiBlbnRlcmVkICovCisJcHJpdmF0ZS5kZWNv ZGluZ19zdGFydGVkID0gdHJ1ZTsKKwogCWZvciAoOzspCiAJewogCQlpZiAodGltZV90b19zdG9w KQpAQCAtMTMyNiw2ICsxNDkyLDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAKIAlY TG9nUmVhZGVyRnJlZSh4bG9ncmVhZGVyX3N0YXRlKTsKIAorCWlmIChwcml2YXRlLmFyY2hpdmVf bmFtZSkKKwkJZnJlZV9hcmNoaXZlX3JlYWRlcigmcHJpdmF0ZSk7CisKIAlyZXR1cm4gRVhJVF9T VUNDRVNTOwogCiBiYWRfYXJndW1lbnQ6CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3dhbGR1bXAv cGdfd2FsZHVtcC5oIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3BnX3dhbGR1bXAuaAppbmRleCAwMTNi MDUxNTA2Zi4uZmQyNTc5MmIzM2EgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfd2FsZHVtcC9wZ193 YWxkdW1wLmgKKysrIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3BnX3dhbGR1bXAuaApAQCAtMTIsNiAr MTIsMTQgQEAKICNkZWZpbmUgUEdfV0FMRFVNUF9ICiAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2Rl ZnMuaCIKKyNpbmNsdWRlICJmZV91dGlscy9hc3RyZWFtZXIuaCIKKworLyogRm9yd2FyZCBkZWNs YXJhdGlvbiAqLworc3RydWN0IEFyY2hpdmVkV0FMRmlsZTsKK3N0cnVjdCBBcmNoaXZlZFdBTF9o YXNoOworCisvKiBUZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBzcGlsbGluZyBvdXQtb2Ytb3JkZXIg V0FMIHNlZ21lbnRzIGZyb20gYXJjaGl2ZXMgKi8KK2V4dGVybiBjaGFyICpUbXBXYWxTZWdEaXI7 CiAKIC8qIENvbnRhaW5zIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gZHJpdmUgV0FMIGRl Y29kaW5nICovCiB0eXBlZGVmIHN0cnVjdCBYTG9nRHVtcFByaXZhdGUKQEAgLTIxLDYgKzI5LDQ4 IEBAIHR5cGVkZWYgc3RydWN0IFhMb2dEdW1wUHJpdmF0ZQogCVhMb2dSZWNQdHIJc3RhcnRwdHI7 CiAJWExvZ1JlY1B0cgllbmRwdHI7CiAJYm9vbAkJZW5kcHRyX3JlYWNoZWQ7CisJYm9vbAkJZGVj b2Rpbmdfc3RhcnRlZDsKKworCS8qIEZpZWxkcyByZXF1aXJlZCB0byByZWFkIFdBTCBmcm9tIGFy Y2hpdmUgKi8KKwljaGFyCSAgICphcmNoaXZlX25hbWU7CS8qIHRhciBhcmNoaXZlIGZpbGVuYW1l ICovCisJaW50CQkJYXJjaGl2ZV9mZDsJCS8qIEZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIG9wZW4g dGFyIGZpbGUgKi8KKworCWFzdHJlYW1lciAgKmFyY2hpdmVfc3RyZWFtZXI7CisJY2hhcgkgICAq YXJjaGl2ZV9yZWFkX2J1ZjsJLyogUmV1c2FibGUgcmVhZCBidWZmZXIgZm9yIGFyY2hpdmUgSS9P ICovCisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJU2l6ZQkJYXJjaGl2ZV9yZWFkX2J1 Zl9zaXplOworI2VuZGlmCisKKwkvKiBXaGF0IHRoZSBhcmNoaXZlIHN0cmVhbWVyIGlzIGN1cnJl bnRseSByZWFkaW5nICovCisJc3RydWN0IEFyY2hpdmVkV0FMRmlsZSAqY3VyX2ZpbGU7CisKKwkv KgorCSAqIEhhc2ggdGFibGUgb2YgYWxsIFdBTCBmaWxlcyB0aGF0IHRoZSBhcmNoaXZlIHN0cmVh bSBoYXMgcmVhZCwgaW5jbHVkaW5nCisJICogdGhlIG9uZSBjdXJyZW50bHkgaW4gcHJvZ3Jlc3Mu CisJICovCisJc3RydWN0IEFyY2hpdmVkV0FMX2hhc2ggKmFyY2hpdmVfd2FsX2h0YWI7CisKKwkv KgorCSAqIFByZS1jb21wdXRlZCBzZWdtZW50IG51bWJlcnMgZGVyaXZlZCBmcm9tIHN0YXJ0cHRy IGFuZCBlbmRwdHIuIENhY2hpbmcKKwkgKiB0aGVtIGF2b2lkcyByZXBlYXRlZCBYTEJ5dGVUb1Nl ZygpIGNhbGxzIHdoZW4gZmlsdGVyaW5nIGVhY2ggYXJjaGl2ZQorCSAqIG1lbWJlciBhZ2FpbnN0 IHRoZSByZXF1ZXN0ZWQgV0FMIHJhbmdlLgorCSAqLworCVhMb2dTZWdObwlzdGFydF9zZWdubzsK KwlYTG9nU2VnTm8JZW5kX3NlZ25vOwogfSBYTG9nRHVtcFByaXZhdGU7CiAKK2V4dGVybiBpbnQJ b3Blbl9maWxlX2luX2RpcmVjdG9yeShjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGNoYXIg KmZuYW1lKTsKKworZXh0ZXJuIHZvaWQgaW5pdF9hcmNoaXZlX3JlYWRlcihYTG9nRHVtcFByaXZh dGUgKnByaXZhdGVJbmZvLAorCQkJCQkJCQljb25zdCBjaGFyICp3YWxkaXIsIGludCAqV2FsU2Vn U3osCisJCQkJCQkJCXBnX2NvbXByZXNzX2FsZ29yaXRobSBjb21wcmVzc2lvbik7CitleHRlcm4g dm9pZCBmcmVlX2FyY2hpdmVfcmVhZGVyKFhMb2dEdW1wUHJpdmF0ZSAqcHJpdmF0ZUluZm8pOwor ZXh0ZXJuIGludAlyZWFkX2FyY2hpdmVfd2FsX3BhZ2UoWExvZ0R1bXBQcml2YXRlICpwcml2YXRl SW5mbywKKwkJCQkJCQkJICBYTG9nUmVjUHRyIHRhcmdldFBhZ2VQdHIsCisJCQkJCQkJCSAgU2l6 ZSBjb3VudCwgY2hhciAqcmVhZEJ1ZmYsCisJCQkJCQkJCSAgaW50IFdhbFNlZ1N6KTsKK2V4dGVy biB2b2lkIGZyZWVfYXJjaGl2ZV93YWxfZW50cnkoY29uc3QgY2hhciAqZm5hbWUsCisJCQkJCQkJ CSAgIFhMb2dEdW1wUHJpdmF0ZSAqcHJpdmF0ZUluZm8pOworCiAjZW5kaWYJCQkJCQkJLyogUEdf V0FMRFVNUF9IICovCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3dhbGR1bXAvdC8wMDFfYmFzaWMu cGwgYi9zcmMvYmluL3BnX3dhbGR1bXAvdC8wMDFfYmFzaWMucGwKaW5kZXggNWRiNWQyMDEzNmYu Ljk0YzU4MTg3NDEyIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3dhbGR1bXAvdC8wMDFfYmFzaWMu cGwKKysrIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3QvMDAxX2Jhc2ljLnBsCkBAIC0zLDkgKzMsMTMg QEAKIAogdXNlIHN0cmljdDsKIHVzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKK3VzZSBDd2Q7 CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpV dGlsczsKIHVzZSBUZXN0OjpNb3JlOwordXNlIExpc3Q6OlV0aWwgcXcoc2h1ZmZsZSk7CisKK215 ICR0YXIgPSAkRU5We1RBUn07CiAKIHByb2dyYW1faGVscF9vaygncGdfd2FsZHVtcCcpOwogcHJv Z3JhbV92ZXJzaW9uX29rKCdwZ193YWxkdW1wJyk7CkBAIC0xNjIsNiArMTY2LDQyIEBAIENSRUFU RSBUQUJMRVNQQUNFIHRzMSBMT0NBVElPTiAnJHRibHNwY19wYXRoJzsKIERST1AgVEFCTEVTUEFD RSB0czE7CiB9KTsKIAorIyBUZXN0OiBEZWNvZGUgYSBjb250aW51YXRpb24gcmVjb3JkIChjb250 cmVjb3JkKSB0aGF0IHNwYW5zIG11bHRpcGxlIFdBTAorIyBzZWdtZW50cy4KKyMKKyMgTm93IGNv bnN1bWUgYWxsIHJlbWFpbmluZyByb29tIGluIHRoZSBjdXJyZW50IFdBTCBzZWdtZW50LCBsZWF2 aW5nCisjIHNwYWNlIGVub3VnaCBvbmx5IGZvciB0aGUgc3RhcnQgb2YgYSBsYXJnaXNoIHJlY29y ZC4KKyRub2RlLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXsKK0RPICQkCitERUNMQVJFCisg ICAgd2FsX3NlZ3NpemUgaW50IDo9IHNldHRpbmc6OmludCBGUk9NIHBnX3NldHRpbmdzIFdIRVJF IG5hbWUgPSAnd2FsX3NlZ21lbnRfc2l6ZSc7CisgICAgcmVtYWluIGludDsKKyAgICBpdGVycyAg aW50IDo9IDA7CitCRUdJTgorICAgIExPT1AKKyAgICAgICAgSU5TRVJUIGludG8gdDEoYikKKyAg ICAgICAgc2VsZWN0IHJlcGVhdChlbmNvZGUoc2hhMjU2KGc6OnRleHQ6OmJ5dGVhKSwgJ2hleCcp LCAocmFuZG9tKCkgKiAxNSArIDEpOjppbnQpCisgICAgICAgIGZyb20gZ2VuZXJhdGVfc2VyaWVz KDEsIDEwKSBnOworCisgICAgICAgIHJlbWFpbiA6PSB3YWxfc2Vnc2l6ZSAtIChwZ19jdXJyZW50 X3dhbF9pbnNlcnRfbHNuKCkgLSAnMC8wJykgJSB3YWxfc2Vnc2l6ZTsKKyAgICAgICAgSUYgcmVt YWluIDwgMiAqIHNldHRpbmc6OmludCBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgPSAnYmxv Y2tfc2l6ZScgVEhFTgorICAgICAgICAgICAgUkFJU0UgbG9nICdleGl0aW5nIGFmdGVyICUgaXRl cmF0aW9ucywgJSBieXRlcyB0byBlbmQgb2YgV0FMIHNlZ21lbnQnLCBpdGVycywgcmVtYWluOwor ICAgICAgICAgICAgRVhJVDsKKyAgICAgICAgRU5EIElGOworICAgICAgICBpdGVycyA6PSBpdGVy cyArIDE7CisgICAgRU5EIExPT1A7CitFTkQKKyQkOworfSk7CisKK215ICRjb250cmVjb3JkX2xz biA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwknU0VMRUNUIHBnX2N1cnJlbnRfd2Fs X2luc2VydF9sc24oKScpOworIyBHZW5lcmF0ZSBjb250cmVjb3JkIHJlY29yZAorJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCXFxe1NFTEVDVCBwZ19sb2dpY2FsX2VtaXRfbWVzc2FnZSh0 cnVlLCAndGVzdCAwMjYnLCByZXBlYXQoJ3h5enh6JywgMTIzNDU2KSl9CispOworCiBteSAoJGVu ZF9sc24sICRlbmRfd2FsZmlsZSkgPSBzcGxpdCAvXHwvLAogICAkbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCiAJcXtTRUxFQ1QgcGdfY3VycmVudF93YWxfaW5zZXJ0X2xzbigpLCBwZ193YWxm aWxlX25hbWUocGdfY3VycmVudF93YWxfaW5zZXJ0X2xzbigpKX0KQEAgLTE5OCwyOCArMjM4LDYg QEAgY29tbWFuZF9saWtlKAogCV0sCiAJcXIvLi8sCiAJJ3J1bnMgd2l0aCBzdGFydCBhbmQgZW5k IHNlZ21lbnQgc3BlY2lmaWVkJyk7Ci1jb21tYW5kX2ZhaWxzX2xpa2UoCi0JWyAncGdfd2FsZHVt cCcsICctLXBhdGgnID0+ICRub2RlLT5kYXRhX2RpciBdLAotCXFyL2Vycm9yOiBubyBzdGFydCBX QUwgbG9jYXRpb24gZ2l2ZW4vLAotCSdwYXRoIG9wdGlvbiByZXF1aXJlcyBzdGFydCBsb2NhdGlv bicpOwotY29tbWFuZF9saWtlKAotCVsKLQkJJ3BnX3dhbGR1bXAnLAotCQknLS1wYXRoJyA9PiAk bm9kZS0+ZGF0YV9kaXIsCi0JCSctLXN0YXJ0JyA9PiAkc3RhcnRfbHNuLAotCQknLS1lbmQnID0+ ICRlbmRfbHNuLAotCV0sCi0JcXIvLi8sCi0JJ3J1bnMgd2l0aCBwYXRoIG9wdGlvbiBhbmQgc3Rh cnQgYW5kIGVuZCBsb2NhdGlvbnMnKTsKLWNvbW1hbmRfZmFpbHNfbGlrZSgKLQlbCi0JCSdwZ193 YWxkdW1wJywKLQkJJy0tcGF0aCcgPT4gJG5vZGUtPmRhdGFfZGlyLAotCQknLS1zdGFydCcgPT4g JHN0YXJ0X2xzbiwKLQldLAotCXFyL2Vycm9yOiBlcnJvciBpbiBXQUwgcmVjb3JkIGF0LywKLQkn ZmFsbGluZyBvZmYgdGhlIGVuZCBvZiB0aGUgV0FMIHJlc3VsdHMgaW4gYW4gZXJyb3InKTsKLQog Y29tbWFuZF9saWtlKAogCVsKIAkJJ3BnX3dhbGR1bXAnLCAnLS1xdWlldCcsCkBAIC0yMjcsMjIg KzI0NSwxNiBAQCBjb21tYW5kX2xpa2UoCiAJXSwKIAlxci9eJC8sCiAJJ25vIG91dHB1dCB3aXRo IC0tcXVpZXQgb3B0aW9uJyk7Ci1jb21tYW5kX2ZhaWxzX2xpa2UoCi0JWwotCQkncGdfd2FsZHVt cCcsICctLXF1aWV0JywKLQkJJy0tcGF0aCcgPT4gJG5vZGUtPmRhdGFfZGlyLAotCQknLS1zdGFy dCcgPT4gJHN0YXJ0X2xzbgotCV0sCi0JcXIvZXJyb3I6IGVycm9yIGluIFdBTCByZWNvcmQgYXQv LAotCSdlcnJvcnMgYXJlIHNob3duIHdpdGggLS1xdWlldCcpOwotCiAKICMgVGVzdCBmb3I6IERp c3BsYXkgYSBtZXNzYWdlIHRoYXQgd2UncmUgc2tpcHBpbmcgZGF0YSBpZiBgZnJvbWAKICMgd2Fz bid0IGEgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgYSByZWNvcmQuCitzdWIgdGVzdF9wZ193YWxk dW1wX3NraXBfYnl0ZXMKIHsKKwlteSAoJHBhdGgsICRzdGFydGxzbiwgJGVuZGxzbikgPSBAXzsK KwogCSMgQ29uc3RydWN0IGEgbmV3IExTTiB0aGF0IGlzIG9uZSBieXRlIHBhc3QgdGhlIG9yaWdp bmFsCiAJIyBzdGFydF9sc24uCi0JbXkgKCRwYXJ0MSwgJHBhcnQyKSA9IHNwbGl0IHFyey99LCAk c3RhcnRfbHNuOworCW15ICgkcGFydDEsICRwYXJ0MikgPSBzcGxpdCBxcnsvfSwgJHN0YXJ0bHNu OwogCW15ICRsc24yID0gaGV4ICRwYXJ0MjsKIAkkbHNuMisrOwogCW15ICRuZXdfc3RhcnQgPSBz cHJpbnRmKCIlcy8lWCIsICRwYXJ0MSwgJGxzbjIpOwpAQCAtMjUyLDcgKzI2NCw4IEBAIGNvbW1h bmRfZmFpbHNfbGlrZSgKIAlteSAkcmVzdWx0ID0gSVBDOjpSdW46OnJ1biBbCiAJCSdwZ193YWxk dW1wJywKIAkJJy0tc3RhcnQnID0+ICRuZXdfc3RhcnQsCi0JCSRub2RlLT5kYXRhX2RpciAuICcv cGdfd2FsLycgLiAkc3RhcnRfd2FsZmlsZQorCQknLS1lbmQnID0+ICRlbmRsc24sCisJCSctLXBh dGgnID0+ICRwYXRoLAogCSAgXSwKIAkgICc+JyA9PiBcJHN0ZG91dCwKIAkgICcyPicgPT4gXCRz dGRlcnI7CkBAIC0yNjYsMTUgKzI3OSwxNSBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiBzdWIgdGVz dF9wZ193YWxkdW1wCiB7CiAJbG9jYWwgJFRlc3Q6OkJ1aWxkZXI6OkxldmVsID0gJFRlc3Q6OkJ1 aWxkZXI6OkxldmVsICsgMTsKLQlteSBAb3B0cyA9IEBfOworCW15ICgkcGF0aCwgJHN0YXJ0bHNu LCAkZW5kbHNuLCBAb3B0cykgPSBAXzsKIAogCW15ICgkc3Rkb3V0LCAkc3RkZXJyKTsKIAogCW15 ICRyZXN1bHQgPSBJUEM6OlJ1bjo6cnVuIFsKIAkJJ3BnX3dhbGR1bXAnLAotCQknLS1wYXRoJyA9 PiAkbm9kZS0+ZGF0YV9kaXIsCi0JCSctLXN0YXJ0JyA9PiAkc3RhcnRfbHNuLAotCQknLS1lbmQn ID0+ICRlbmRfbHNuLAorCQknLS1zdGFydCcgPT4gJHN0YXJ0bHNuLAorCQknLS1lbmQnID0+ICRl bmRsc24sCisJCSctLXBhdGgnID0+ICRwYXRoLAogCQlAb3B0cwogCSAgXSwKIAkgICc+JyA9PiBc JHN0ZG91dCwKQEAgLTI4Niw0MCArMjk5LDE0NSBAQCBzdWIgdGVzdF9wZ193YWxkdW1wCiAJcmV0 dXJuIEBsaW5lczsKIH0KIAotbXkgQGxpbmVzOworIyBDcmVhdGUgYSB0YXIgYXJjaGl2ZSwgc2h1 ZmZsZSB0aGUgZmlsZSBvcmRlcgorc3ViIGdlbmVyYXRlX2FyY2hpdmUKK3sKKwlteSAoJGFyY2hp dmUsICRkaXJlY3RvcnksICRjb21wcmVzc2lvbl9mbGFncykgPSBAXzsKIAotQGxpbmVzID0gdGVz dF9wZ193YWxkdW1wOwotaXMoZ3JlcCghL15ybWdyOiBcdy8sIEBsaW5lcyksIDAsICdhbGwgb3V0 cHV0IGxpbmVzIGFyZSBybWdyIGxpbmVzJyk7CisJbXkgQGZpbGVzOworCW9wZW5kaXIgbXkgJGRo LCAkZGlyZWN0b3J5IG9yIGRpZSAib3BlbmRpcjogJCEiOworCXdoaWxlIChteSAkZW50cnkgPSBy ZWFkZGlyICRkaCkgeworCQkjIFNraXAgJy4nIGFuZCAnLi4nCisJCW5leHQgaWYgJGVudHJ5IGVx ICcuJyB8fCAkZW50cnkgZXEgJy4uJzsKKwkJcHVzaCBAZmlsZXMsICRlbnRyeTsKKwl9CisJY2xv c2VkaXIgJGRoOwogCi1AbGluZXMgPSB0ZXN0X3BnX3dhbGR1bXAoJy0tbGltaXQnID0+IDYpOwot aXMoQGxpbmVzLCA2LCAnbGltaXQgb3B0aW9uIG9ic2VydmVkJyk7CisJQGZpbGVzID0gc2h1ZmZs ZSBAZmlsZXM7CiAKLUBsaW5lcyA9IHRlc3RfcGdfd2FsZHVtcCgnLS1mdWxscGFnZScpOwotaXMo Z3JlcCghL15ybWdyOi4qXGJGUFdcYi8sIEBsaW5lcyksIDAsICdhbGwgb3V0cHV0IGxpbmVzIGFy ZSBGUFcnKTsKKwkjIG1vdmUgaW50byB0aGUgV0FMIGRpcmVjdG9yeSBiZWZvcmUgYXJjaGl2aW5n IGZpbGVzCisJbXkgJGN3ZCA9IGdldGN3ZDsKKwljaGRpcigkZGlyZWN0b3J5KSB8fCBkaWUgImNo ZGlyOiAkISI7CisJY29tbWFuZF9vayhbJHRhciwgJGNvbXByZXNzaW9uX2ZsYWdzLCAkYXJjaGl2 ZSwgQGZpbGVzXSk7CisJY2hkaXIoJGN3ZCkgfHwgZGllICJjaGRpcjogJCEiOworfQogCi1AbGlu ZXMgPSB0ZXN0X3BnX3dhbGR1bXAoJy0tc3RhdHMnKTsKLWxpa2UoJGxpbmVzWzBdLCBxci9XQUwg c3RhdGlzdGljcy8sICJzdGF0aXN0aWNzIG9uIHN0ZG91dCIpOwotaXMoZ3JlcCgvXnJtZ3I6Lywg QGxpbmVzKSwgMCwgJ25vIHJtZ3IgbGluZXMgb3V0cHV0Jyk7CitteSAkdG1wX2RpciA9IFBvc3Rn cmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyX3Nob3J0KCk7CiAKLUBsaW5lcyA9IHRlc3RfcGdf d2FsZHVtcCgnLS1zdGF0cz1yZWNvcmQnKTsKLWxpa2UoJGxpbmVzWzBdLCBxci9XQUwgc3RhdGlz dGljcy8sICJzdGF0aXN0aWNzIG9uIHN0ZG91dCIpOwotaXMoZ3JlcCgvXnJtZ3I6LywgQGxpbmVz KSwgMCwgJ25vIHJtZ3IgbGluZXMgb3V0cHV0Jyk7CitteSBAc2NlbmFyaW9zID0gKAorCXsKKwkJ J3BhdGgnID0+ICRub2RlLT5kYXRhX2RpciwKKwkJJ2lzX2FyY2hpdmUnID0+IDAsCisJCSdlbmFi bGVkJyA9PiAxCisJfSwKKwl7CisJCSdwYXRoJyA9PiAiJHRtcF9kaXIvcGdfd2FsLnRhciIsCisJ CSdjb21wcmVzc2lvbl9tZXRob2QnID0+ICdub25lJywKKwkJJ2NvbXByZXNzaW9uX2ZsYWdzJyA9 PiAnLWNmJywKKwkJJ2lzX2FyY2hpdmUnID0+IDEsCisJCSdlbmFibGVkJyA9PiAxCisJfSwKKwl7 CisJCSdwYXRoJyA9PiAiJHRtcF9kaXIvcGdfd2FsLnRhci5neiIsCisJCSdjb21wcmVzc2lvbl9t ZXRob2QnID0+ICdnemlwJywKKwkJJ2NvbXByZXNzaW9uX2ZsYWdzJyA9PiAnLWN6ZicsCisJCSdp c19hcmNoaXZlJyA9PiAxLAorCQknZW5hYmxlZCcgPT4gY2hlY2tfcGdfY29uZmlnKCIjZGVmaW5l IEhBVkVfTElCWiAxIikKKwl9KTsKIAotQGxpbmVzID0gdGVzdF9wZ193YWxkdW1wKCctLXJtZ3In ID0+ICdCdHJlZScpOwotaXMoZ3JlcCghL15ybWdyOiBCdHJlZS8sIEBsaW5lcyksIDAsICdvbmx5 IEJ0cmVlIGxpbmVzJyk7Citmb3IgbXkgJHNjZW5hcmlvIChAc2NlbmFyaW9zKQoreworCW15ICRw YXRoID0gJHNjZW5hcmlvLT57J3BhdGgnfTsKIAotQGxpbmVzID0gdGVzdF9wZ193YWxkdW1wKCct LWZvcmsnID0+ICdpbml0Jyk7Ci1pcyhncmVwKCEvZm9yayBpbml0LywgQGxpbmVzKSwgMCwgJ29u bHkgaW5pdCBmb3JrIGxpbmVzJyk7CisJU0tJUDoKKwl7CisJCXNraXAgInRhciBjb21tYW5kIGlz IG5vdCBhdmFpbGFibGUiLCA1NgorCQkgIGlmICFkZWZpbmVkICR0YXIgJiYgJHNjZW5hcmlvLT57 J2lzX2FyY2hpdmUnfTsKKwkJc2tpcCAiJHNjZW5hcmlvLT57J2NvbXByZXNzaW9uX21ldGhvZCd9 IGNvbXByZXNzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBidWlsZCIsIDU2CisJCSAgaWYgISRz Y2VuYXJpby0+eydlbmFibGVkJ30gJiYgJHNjZW5hcmlvLT57J2lzX2FyY2hpdmUnfTsKIAotQGxp bmVzID0gdGVzdF9wZ193YWxkdW1wKAotCSctLXJlbGF0aW9uJyA9PiAiJGRlZmF1bHRfdHNfb2lk LyRwb3N0Z3Jlc19kYl9vaWQvJHJlbF90MV9vaWQiKTsKLWlzKGdyZXAoIS9yZWwgJGRlZmF1bHRf dHNfb2lkXC8kcG9zdGdyZXNfZGJfb2lkXC8kcmVsX3QxX29pZC8sIEBsaW5lcyksCi0JMCwgJ29u bHkgbGluZXMgZm9yIHNlbGVjdGVkIHJlbGF0aW9uJyk7CisJCSAgIyBjcmVhdGUgcGdfd2FsIGFy Y2hpdmUKKwkJICBpZiAoJHNjZW5hcmlvLT57J2lzX2FyY2hpdmUnfSkKKwkJICB7CisJCQkgIGdl bmVyYXRlX2FyY2hpdmUoJHBhdGgsCisJCQkJICAkbm9kZS0+ZGF0YV9kaXIgLiAnL3BnX3dhbCcs CisJCQkJICAkc2NlbmFyaW8tPnsnY29tcHJlc3Npb25fZmxhZ3MnfSk7CisJCSAgfQogCi1AbGlu ZXMgPSB0ZXN0X3BnX3dhbGR1bXAoCi0JJy0tcmVsYXRpb24nID0+ICIkZGVmYXVsdF90c19vaWQv JHBvc3RncmVzX2RiX29pZC8kcmVsX2kxYV9vaWQiLAotCSctLWJsb2NrJyA9PiAxKTsKLWlzKGdy ZXAoIS9cYmJsayAxXGIvLCBAbGluZXMpLCAwLCAnb25seSBsaW5lcyBmb3Igc2VsZWN0ZWQgYmxv Y2snKTsKKwkJY29tbWFuZF9mYWlsc19saWtlKAorCQkJWyAncGdfd2FsZHVtcCcsICctLXBhdGgn ID0+ICRwYXRoIF0sCisJCQlxci9lcnJvcjogbm8gc3RhcnQgV0FMIGxvY2F0aW9uIGdpdmVuLywK KwkJCSdwYXRoIG9wdGlvbiByZXF1aXJlcyBzdGFydCBsb2NhdGlvbicpOworCQljb21tYW5kX2xp a2UoCisJCQlbCisJCQkJJ3BnX3dhbGR1bXAnLAorCQkJCSctLXBhdGgnID0+ICRwYXRoLAorCQkJ CSctLXN0YXJ0JyA9PiAkc3RhcnRfbHNuLAorCQkJCSctLWVuZCcgPT4gJGVuZF9sc24sCisJCQld LAorCQkJcXIvLi8sCisJCQkncnVucyB3aXRoIHBhdGggb3B0aW9uIGFuZCBzdGFydCBhbmQgZW5k IGxvY2F0aW9ucycpOworCQljb21tYW5kX2ZhaWxzX2xpa2UoCisJCQlbCisJCQkJJ3BnX3dhbGR1 bXAnLAorCQkJCSctLXBhdGgnID0+ICRwYXRoLAorCQkJCSctLXN0YXJ0JyA9PiAkc3RhcnRfbHNu LAorCQkJXSwKKwkJCXFyL2Vycm9yOiBlcnJvciBpbiBXQUwgcmVjb3JkIGF0LywKKwkJCSdmYWxs aW5nIG9mZiB0aGUgZW5kIG9mIHRoZSBXQUwgcmVzdWx0cyBpbiBhbiBlcnJvcicpOwogCisJCWNv bW1hbmRfZmFpbHNfbGlrZSgKKwkJCVsKKwkJCQkncGdfd2FsZHVtcCcsICctLXF1aWV0JywKKwkJ CQknLS1wYXRoJyA9PiAkcGF0aCwKKwkJCQknLS1zdGFydCcgPT4gJHN0YXJ0X2xzbgorCQkJXSwK KwkJCXFyL2Vycm9yOiBlcnJvciBpbiBXQUwgcmVjb3JkIGF0LywKKwkJCSdlcnJvcnMgYXJlIHNo b3duIHdpdGggLS1xdWlldCcpOworCisJCXRlc3RfcGdfd2FsZHVtcF9za2lwX2J5dGVzKCRwYXRo LCAkc3RhcnRfbHNuLCAkZW5kX2xzbik7CisKKwkJbXkgQGxpbmVzID0gdGVzdF9wZ193YWxkdW1w KCRwYXRoLCAkc3RhcnRfbHNuLCAkZW5kX2xzbik7CisJCWlzKGdyZXAoIS9ecm1ncjogXHcvLCBA bGluZXMpLCAwLCAnYWxsIG91dHB1dCBsaW5lcyBhcmUgcm1nciBsaW5lcycpOworCisJCUBsaW5l cyA9IHRlc3RfcGdfd2FsZHVtcCgkcGF0aCwgJGNvbnRyZWNvcmRfbHNuLCAkZW5kX2xzbik7CisJ CWlzKGdyZXAoIS9ecm1ncjogXHcvLCBAbGluZXMpLCAwLCAnYWxsIG91dHB1dCBsaW5lcyBhcmUg cm1nciBsaW5lcycpOworCisJCXRlc3RfcGdfd2FsZHVtcF9za2lwX2J5dGVzKCRwYXRoLCAkY29u dHJlY29yZF9sc24sICRlbmRfbHNuKTsKKworCQlAbGluZXMgPSB0ZXN0X3BnX3dhbGR1bXAoJHBh dGgsICRzdGFydF9sc24sICRlbmRfbHNuLCAnLS1saW1pdCcgPT4gNik7CisJCWlzKEBsaW5lcywg NiwgJ2xpbWl0IG9wdGlvbiBvYnNlcnZlZCcpOworCisJCUBsaW5lcyA9IHRlc3RfcGdfd2FsZHVt cCgkcGF0aCwgJHN0YXJ0X2xzbiwgJGVuZF9sc24sICctLWZ1bGxwYWdlJyk7CisJCWlzKGdyZXAo IS9ecm1ncjouKlxiRlBXXGIvLCBAbGluZXMpLCAwLCAnYWxsIG91dHB1dCBsaW5lcyBhcmUgRlBX Jyk7CisKKwkJQGxpbmVzID0gdGVzdF9wZ193YWxkdW1wKCRwYXRoLCAkc3RhcnRfbHNuLCAkZW5k X2xzbiwgJy0tc3RhdHMnKTsKKwkJbGlrZSgkbGluZXNbMF0sIHFyL1dBTCBzdGF0aXN0aWNzLywg InN0YXRpc3RpY3Mgb24gc3Rkb3V0Iik7CisJCWlzKGdyZXAoL15ybWdyOi8sIEBsaW5lcyksIDAs ICdubyBybWdyIGxpbmVzIG91dHB1dCcpOworCisJCUBsaW5lcyA9IHRlc3RfcGdfd2FsZHVtcCgk cGF0aCwgJHN0YXJ0X2xzbiwgJGVuZF9sc24sICctLXN0YXRzPXJlY29yZCcpOworCQlsaWtlKCRs aW5lc1swXSwgcXIvV0FMIHN0YXRpc3RpY3MvLCAic3RhdGlzdGljcyBvbiBzdGRvdXQiKTsKKwkJ aXMoZ3JlcCgvXnJtZ3I6LywgQGxpbmVzKSwgMCwgJ25vIHJtZ3IgbGluZXMgb3V0cHV0Jyk7CisK KwkJQGxpbmVzID0gdGVzdF9wZ193YWxkdW1wKCRwYXRoLCAkc3RhcnRfbHNuLCAkZW5kX2xzbiwg Jy0tcm1ncicgPT4gJ0J0cmVlJyk7CisJCWlzKGdyZXAoIS9ecm1ncjogQnRyZWUvLCBAbGluZXMp LCAwLCAnb25seSBCdHJlZSBsaW5lcycpOworCisJCUBsaW5lcyA9IHRlc3RfcGdfd2FsZHVtcCgk cGF0aCwgJHN0YXJ0X2xzbiwgJGVuZF9sc24sICctLWZvcmsnID0+ICdpbml0Jyk7CisJCWlzKGdy ZXAoIS9mb3JrIGluaXQvLCBAbGluZXMpLCAwLCAnb25seSBpbml0IGZvcmsgbGluZXMnKTsKKwor CQlAbGluZXMgPSB0ZXN0X3BnX3dhbGR1bXAoJHBhdGgsICRzdGFydF9sc24sICRlbmRfbHNuLAor CQkJJy0tcmVsYXRpb24nID0+ICIkZGVmYXVsdF90c19vaWQvJHBvc3RncmVzX2RiX29pZC8kcmVs X3QxX29pZCIpOworCQlpcyhncmVwKCEvcmVsICRkZWZhdWx0X3RzX29pZFwvJHBvc3RncmVzX2Ri X29pZFwvJHJlbF90MV9vaWQvLCBAbGluZXMpLAorCQkJMCwgJ29ubHkgbGluZXMgZm9yIHNlbGVj dGVkIHJlbGF0aW9uJyk7CisKKwkJQGxpbmVzID0gdGVzdF9wZ193YWxkdW1wKCRwYXRoLCAkc3Rh cnRfbHNuLCAkZW5kX2xzbiwKKwkJCSctLXJlbGF0aW9uJyA9PiAiJGRlZmF1bHRfdHNfb2lkLyRw b3N0Z3Jlc19kYl9vaWQvJHJlbF9pMWFfb2lkIiwKKwkJCSctLWJsb2NrJyA9PiAxKTsKKwkJaXMo Z3JlcCghL1xiYmxrIDFcYi8sIEBsaW5lcyksIDAsICdvbmx5IGxpbmVzIGZvciBzZWxlY3RlZCBi bG9jaycpOworCisJCSMgQ2xlYW51cC4KKwkJdW5saW5rICRwYXRoIGlmICRzY2VuYXJpby0+eydp c19hcmNoaXZlJ307CisJfQorfQogCiBkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKaW5kZXggMTc0ZTI3OTg0NDMuLjNlMmZjNzExYTNlIDEwMDY0NAotLS0gYS9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdApAQCAtMTQ3LDYgKzE0Nyw5IEBAIEFyY2hpdmVPcHRzCiBBcmNoaXZlU2h1dGRvd25D QgogQXJjaGl2ZVN0YXJ0dXBDQgogQXJjaGl2ZVN0cmVhbVN0YXRlCitBcmNoaXZlZFdBTEZpbGUK K0FyY2hpdmVkV0FMX2hhc2gKK0FyY2hpdmVkV0FMX2l0ZXJhdG9yCiBBcmNoaXZlck91dHB1dAog QXJjaGl2ZXJTdGFnZQogQXJyYXlBbmFseXplRXh0cmFEYXRhCkBAIC0zNTQyLDYgKzM1NDUsNyBA QCBhc3RyZWFtZXJfcmVjb3ZlcnlfaW5qZWN0b3IKIGFzdHJlYW1lcl90YXJfYXJjaGl2ZXIKIGFz dHJlYW1lcl90YXJfcGFyc2VyCiBhc3RyZWFtZXJfdmVyaWZ5Cithc3RyZWFtZXJfd2FsZHVtcAog YXN0cmVhbWVyX3pzdGRfZnJhbWUKIGF1dGhfcGFzc3dvcmRfaG9va190eXAKIGF1dG92YWNfdGFi bGUKLS0gCjIuNDcuMQoK --000000000000fbe6c0064d5deeae Content-Type: application/x-patch; name="v20-0004-pg_verifybackup-Enable-WAL-parsing-for-tar-forma.patch" Content-Disposition: attachment; filename="v20-0004-pg_verifybackup-Enable-WAL-parsing-for-tar-forma.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxbdlwy3 RnJvbSBjY2NiMTQ5ZjU3YmQzMzIzNTA2ZDQ1OWQwMDVjNzU1MmMxOWFhMDdkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5lLm5ldD4K RGF0ZTogVGh1LCAxOSBNYXIgMjAyNiAxNTo0Mzo1MyArMDUzMApTdWJqZWN0OiBbUEFUQ0ggdjIw IDQvNV0gcGdfdmVyaWZ5YmFja3VwOiBFbmFibGUgV0FMIHBhcnNpbmcgZm9yIHRhci1mb3JtYXQK IGJhY2t1cHMKCk5vdyB0aGF0IHBnX3dhbGR1bXAgc3VwcG9ydHMgcmVhZGluZyBXQUwgZnJvbSB0 YXIgYXJjaGl2ZXMsIHJlbW92ZSB0aGUKcmVzdHJpY3Rpb24gdGhhdCBmb3JjZWQgLS1uby1wYXJz ZS13YWwgZm9yIHRhci1mb3JtYXQgYmFja3Vwcy4KCnBnX3ZlcmlmeWJhY2t1cCBub3cgYXV0b21h dGljYWxseSBsb2NhdGVzIHRoZSBXQUwgYXJjaGl2ZTogaXQgbG9va3MgZm9yCmEgc2VwYXJhdGUg cGdfd2FsLnRhciBmaXJzdCwgdGhlbiBmYWxscyBiYWNrIHRvIHRoZSBtYWluIGJhc2UudGFyLiAg QQpuZXcgLS13YWwtcGF0aCBvcHRpb24gKHJlcGxhY2luZyB0aGUgb2xkIC0td2FsLWRpcmVjdG9y eSwgd2hpY2ggaXMga2VwdAphcyBhIHNpbGVudCBhbGlhcykgYWNjZXB0cyBlaXRoZXIgYSBkaXJl Y3Rvcnkgb3IgYSB0YXIgYXJjaGl2ZSBwYXRoLgoKVGhlIGRlZmF1bHQgV0FMIGRpcmVjdG9yeSBw cmVwYXJhdGlvbiBpcyBkZWZlcnJlZCB1bnRpbCB0aGUgYmFja3VwCmZvcm1hdCBpcyBrbm93biwg c2luY2UgdGFyLWZvcm1hdCBiYWNrdXBzIHJlc29sdmUgdGhlIFdBTCBwYXRoCmRpZmZlcmVudGx5 IGZyb20gcGxhaW4tZm9ybWF0IG9uZXMuCgpBdXRob3I6IEFtdWwgU3VsIDxzdWxhbXVsQGdtYWls LmNvbT4KUmV2aWV3ZWQtYnk6IFJvYmVydCBIYWFzIDxyb2JlcnRtaGFhc0BnbWFpbC5jb20+ClJl dmlld2VkLWJ5OiBKYWt1YiBXYXJ0YWsgPGpha3ViLndhcnRha0BlbnRlcnByaXNlZGIuY29tPgpS ZXZpZXdlZC1ieTogQ2hhbyBMaSA8bGkuZXZhbi5jaGFvQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6 IEV1bGVyIFRhdmVpcmEgPGV1bGVyQGV1bGVydG8uY29tPgpSZXZpZXdlZC1ieTogQW5kcmV3IER1 bnN0YW4gPGFuZHJld0BkdW5zbGFuZS5uZXQ+CmRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vQ0FBSl9iOTRicWRXTjNoMkotUHp6elEyTnBid2N0NVpRSGdnbl9Rb1lHaEMycm4tPVdRQG1h aWwuZ21haWwuY29tCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9wZ192ZXJpZnliYWNrdXAuc2dtbCAg ICAgICAgIHwgMTQgKystCiBzcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC9wZ192ZXJpZnliYWNrdXAu YyAgICAgfCA5NiArKysrKysrKysrKystLS0tLS0tCiBzcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC90 LzAwMl9hbGdvcml0aG0ucGwgICAgfCAgNCAtCiBzcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC90LzAw M19jb3JydXB0aW9uLnBsICAgfCAgNCArLQogc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvdC8wMDdf d2FsLnBsICAgICAgICAgIHwgMjAgKysrLQogc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvdC8wMDhf dW50YXIucGwgICAgICAgIHwgIDUgKy0KIHNyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL3QvMDEwX2Ns aWVudF91bnRhci5wbCB8ICA1ICstCiA3IGZpbGVzIGNoYW5nZWQsIDkxIGluc2VydGlvbnMoKyks IDU3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfdmVyaWZ5 YmFja3VwLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3ZlcmlmeWJhY2t1cC5zZ21sCmluZGV4 IDYxYzEyOTc1ZTRhLi4xNjk1Y2ZlOTFjOCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9w Z192ZXJpZnliYWNrdXAuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3ZlcmlmeWJhY2t1 cC5zZ21sCkBAIC0zNiwxMCArMzYsNyBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgIDxs aXRlcmFsPmJhY2t1cF9tYW5pZmVzdDwvbGl0ZXJhbD4gZ2VuZXJhdGVkIGJ5IHRoZSBzZXJ2ZXIg YXQgdGhlIHRpbWUKICAgIG9mIHRoZSBiYWNrdXAuIFRoZSBiYWNrdXAgbWF5IGJlIHN0b3JlZCBl aXRoZXIgaW4gdGhlICJwbGFpbiIgb3IgdGhlICJ0YXIiCiAgICBmb3JtYXQ7IHRoaXMgaW5jbHVk ZXMgdGFyLWZvcm1hdCBiYWNrdXBzIGNvbXByZXNzZWQgd2l0aCBhbnkgYWxnb3JpdGhtCi0gICBz dXBwb3J0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2Jhc2ViYWNrdXA8L2FwcGxpY2F0aW9uPi4gSG93 ZXZlciwgYXQgcHJlc2VudCwKLSAgIDxsaXRlcmFsPldBTDwvbGl0ZXJhbD4gdmVyaWZpY2F0aW9u IGlzIHN1cHBvcnRlZCBvbmx5IGZvciBwbGFpbi1mb3JtYXQKLSAgIGJhY2t1cHMuIFRoZXJlZm9y ZSwgaWYgdGhlIGJhY2t1cCBpcyBzdG9yZWQgaW4gdGFyLWZvcm1hdCwgdGhlCi0gICA8bGl0ZXJh bD4tbiwgLS1uby1wYXJzZS13YWw8L2xpdGVyYWw+IG9wdGlvbiBzaG91bGQgYmUgdXNlZC4KKyAg IHN1cHBvcnRlZCBieSA8YXBwbGljYXRpb24+cGdfYmFzZWJhY2t1cDwvYXBwbGljYXRpb24+Lgog ICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC0yNjEsMTIgKzI1OCwxMyBAQCBQb3N0Z3JlU1FMIGRv Y3VtZW50YXRpb24KIAogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4t dyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0aDwvcmVwbGFjZWFibGU+PC9vcHRp b24+PC90ZXJtPgotICAgICAgPHRlcm0+PG9wdGlvbj4tLXdhbC1kaXJlY3Rvcnk9PHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdGg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4K KyAgICAgIDx0ZXJtPjxvcHRpb24+LS13YWwtcGF0aD08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+cGF0aDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAgICAgPGxpc3RpdGVt PgogICAgICAgIDxwYXJhPgotICAgICAgICBUcnkgdG8gcGFyc2UgV0FMIGZpbGVzIHN0b3JlZCBp biB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwgcmF0aGVyIHRoYW4KLSAgICAgICAgaW4gPGxpdGVy YWw+cGdfd2FsPC9saXRlcmFsPi4gVGhpcyBtYXkgYmUgdXNlZnVsIGlmIHRoZSBiYWNrdXAgaXMK LSAgICAgICAgc3RvcmVkIGluIGEgc2VwYXJhdGUgbG9jYXRpb24gZnJvbSB0aGUgV0FMIGFyY2hp dmUuCisgICAgICAgIFRyeSB0byBwYXJzZSBXQUwgZmlsZXMgc3RvcmVkIGluIHRoZSBzcGVjaWZp ZWQgZGlyZWN0b3J5IG9yIHRhcgorICAgICAgICBhcmNoaXZlLCByYXRoZXIgdGhhbiBpbiA8bGl0 ZXJhbD5wZ193YWw8L2xpdGVyYWw+LiBUaGlzIG1heSBiZQorICAgICAgICB1c2VmdWwgaWYgdGhl IGJhY2t1cCBpcyBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBsb2NhdGlvbiBmcm9tIHRoZSBXQUwKKyAg ICAgICAgYXJjaGl2ZS4KICAgICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8 L3Zhcmxpc3RlbnRyeT4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL3BnX3Zl cmlmeWJhY2t1cC5jIGIvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvcGdfdmVyaWZ5YmFja3VwLmMK aW5kZXggMzFmNjA2YzQ1YjEuLmI2MGFiODczOWQ1IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Zl cmlmeWJhY2t1cC9wZ192ZXJpZnliYWNrdXAuYworKysgYi9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1 cC9wZ192ZXJpZnliYWNrdXAuYwpAQCAtNzQsNyArNzQsOSBAQCBwZ19ub3JldHVybiBzdGF0aWMg dm9pZCByZXBvcnRfbWFuaWZlc3RfZXJyb3IoSnNvbk1hbmlmZXN0UGFyc2VDb250ZXh0ICpjb250 ZXh0LAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmZtdCwuLi4pCiAJCQlwZ19hdHRyaWJ1dGVf cHJpbnRmKDIsIDMpOwogCi1zdGF0aWMgdm9pZCB2ZXJpZnlfdGFyX2JhY2t1cCh2ZXJpZmllcl9j b250ZXh0ICpjb250ZXh0LCBESVIgKmRpcik7CitzdGF0aWMgdm9pZCB2ZXJpZnlfdGFyX2JhY2t1 cCh2ZXJpZmllcl9jb250ZXh0ICpjb250ZXh0LCBESVIgKmRpciwKKwkJCQkJCQkgIGNoYXIgKipi YXNlX2FyY2hpdmVfcGF0aCwKKwkJCQkJCQkgIGNoYXIgKip3YWxfYXJjaGl2ZV9wYXRoKTsKIHN0 YXRpYyB2b2lkIHZlcmlmeV9wbGFpbl9iYWNrdXBfZGlyZWN0b3J5KHZlcmlmaWVyX2NvbnRleHQg KmNvbnRleHQsCiAJCQkJCQkJCQkJICBjaGFyICpyZWxwYXRoLCBjaGFyICpmdWxscGF0aCwKIAkJ CQkJCQkJCQkgIERJUiAqZGlyKTsKQEAgLTgzLDcgKzg1LDkgQEAgc3RhdGljIHZvaWQgdmVyaWZ5 X3BsYWluX2JhY2t1cF9maWxlKHZlcmlmaWVyX2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKnJlbHBh dGgsCiBzdGF0aWMgdm9pZCB2ZXJpZnlfY29udHJvbF9maWxlKGNvbnN0IGNoYXIgKmNvbnRyb2xw YXRoLAogCQkJCQkJCQl1aW50NjQgbWFuaWZlc3Rfc3lzdGVtX2lkZW50aWZpZXIpOwogc3RhdGlj IHZvaWQgcHJlY2hlY2tfdGFyX2JhY2t1cF9maWxlKHZlcmlmaWVyX2NvbnRleHQgKmNvbnRleHQs IGNoYXIgKnJlbHBhdGgsCi0JCQkJCQkJCQkgY2hhciAqZnVsbHBhdGgsIFNpbXBsZVB0ckxpc3Qg KnRhcmZpbGVzKTsKKwkJCQkJCQkJCSBjaGFyICpmdWxscGF0aCwgU2ltcGxlUHRyTGlzdCAqdGFy ZmlsZXMsCisJCQkJCQkJCQkgY2hhciAqKmJhc2VfYXJjaGl2ZV9wYXRoLAorCQkJCQkJCQkJIGNo YXIgKip3YWxfYXJjaGl2ZV9wYXRoKTsKIHN0YXRpYyB2b2lkIHZlcmlmeV90YXJfZmlsZSh2ZXJp Zmllcl9jb250ZXh0ICpjb250ZXh0LCBjaGFyICpyZWxwYXRoLAogCQkJCQkJCWNoYXIgKmZ1bGxw YXRoLCBhc3RyZWFtZXIgKnN0cmVhbWVyKTsKIHN0YXRpYyB2b2lkIHJlcG9ydF9leHRyYV9iYWNr dXBfZmlsZXModmVyaWZpZXJfY29udGV4dCAqY29udGV4dCk7CkBAIC05Myw3ICs5Nyw3IEBAIHN0 YXRpYyB2b2lkIHZlcmlmeV9maWxlX2NoZWNrc3VtKHZlcmlmaWVyX2NvbnRleHQgKmNvbnRleHQs CiAJCQkJCQkJCSB1aW50OCAqYnVmZmVyKTsKIHN0YXRpYyB2b2lkIHBhcnNlX3JlcXVpcmVkX3dh bCh2ZXJpZmllcl9jb250ZXh0ICpjb250ZXh0LAogCQkJCQkJCSAgIGNoYXIgKnBnX3dhbGR1bXBf cGF0aCwKLQkJCQkJCQkgICBjaGFyICp3YWxfZGlyZWN0b3J5KTsKKwkJCQkJCQkgICBjaGFyICp3 YWxfcGF0aCk7CiBzdGF0aWMgYXN0cmVhbWVyICpjcmVhdGVfYXJjaGl2ZV92ZXJpZmllcih2ZXJp Zmllcl9jb250ZXh0ICpjb250ZXh0LAogCQkJCQkJCQkJCSAgY2hhciAqYXJjaGl2ZV9uYW1lLAog CQkJCQkJCQkJCSAgT2lkIHRibHNwY19vaWQsCkBAIC0xMjYsNyArMTMwLDggQEAgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCiAJCXsicHJvZ3Jlc3MiLCBub19hcmd1bWVudCwgTlVMTCwgJ1An fSwKIAkJeyJxdWlldCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncSd9LAogCQl7InNraXAtY2hlY2tz dW1zIiwgbm9fYXJndW1lbnQsIE5VTEwsICdzJ30sCi0JCXsid2FsLWRpcmVjdG9yeSIsIHJlcXVp cmVkX2FyZ3VtZW50LCBOVUxMLCAndyd9LAorCQl7IndhbC1wYXRoIiwgcmVxdWlyZWRfYXJndW1l bnQsIE5VTEwsICd3J30sCisJCXsid2FsLWRpcmVjdG9yeSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBO VUxMLCAndyd9LAkvKiBkZXByZWNhdGVkICovCiAJCXtOVUxMLCAwLCBOVUxMLCAwfQogCX07CiAK QEAgLTEzNSw3ICsxNDAsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAljaGFyCSAg ICptYW5pZmVzdF9wYXRoID0gTlVMTDsKIAlib29sCQlub19wYXJzZV93YWwgPSBmYWxzZTsKIAli b29sCQlxdWlldCA9IGZhbHNlOwotCWNoYXIJICAgKndhbF9kaXJlY3RvcnkgPSBOVUxMOworCWNo YXIJICAgKndhbF9wYXRoID0gTlVMTDsKKwljaGFyCSAgICpiYXNlX2FyY2hpdmVfcGF0aCA9IE5V TEw7CisJY2hhcgkgICAqd2FsX2FyY2hpdmVfcGF0aCA9IE5VTEw7CiAJY2hhcgkgICAqcGdfd2Fs ZHVtcF9wYXRoID0gTlVMTDsKIAlESVIJCSAgICpkaXI7CiAKQEAgLTIyMSw4ICsyMjgsOCBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQljb250ZXh0LnNraXBfY2hlY2tzdW1zID0g dHJ1ZTsKIAkJCQlicmVhazsKIAkJCWNhc2UgJ3cnOgotCQkJCXdhbF9kaXJlY3RvcnkgPSBwc3Ry ZHVwKG9wdGFyZyk7Ci0JCQkJY2Fub25pY2FsaXplX3BhdGgod2FsX2RpcmVjdG9yeSk7CisJCQkJ d2FsX3BhdGggPSBwc3RyZHVwKG9wdGFyZyk7CisJCQkJY2Fub25pY2FsaXplX3BhdGgod2FsX3Bh dGgpOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQkvKiBnZXRvcHRfbG9uZyBhbHJlYWR5 IGVtaXR0ZWQgYSBjb21wbGFpbnQgKi8KQEAgLTI4NSwxMCArMjkyLDYgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiAJCW1hbmlmZXN0X3BhdGggPSBwc3ByaW50ZigiJXMvYmFja3VwX21h bmlmZXN0IiwKIAkJCQkJCQkJIGNvbnRleHQuYmFja3VwX2RpcmVjdG9yeSk7CiAKLQkvKiBCeSBk ZWZhdWx0LCBsb29rIGZvciB0aGUgV0FMIGluIHRoZSBiYWNrdXAgZGlyZWN0b3J5LCB0b28uICov Ci0JaWYgKHdhbF9kaXJlY3RvcnkgPT0gTlVMTCkKLQkJd2FsX2RpcmVjdG9yeSA9IHBzcHJpbnRm KCIlcy9wZ193YWwiLCBjb250ZXh0LmJhY2t1cF9kaXJlY3RvcnkpOwotCiAJLyoKIAkgKiBUcnkg dG8gcmVhZCB0aGUgbWFuaWZlc3QuIFdlIHRyZWF0IGFueSBlcnJvcnMgZW5jb3VudGVyZWQgd2hp bGUgcGFyc2luZwogCSAqIHRoZSBtYW5pZmVzdCBhcyBmYXRhbDsgdGhlcmUgZG9lc24ndCBzZWVt IHRvIGJlIG11Y2ggcG9pbnQgaW4gdHJ5aW5nIHRvCkBAIC0zMzEsMTcgKzMzNCw2IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlwZnJlZShwYXRoKTsKIAl9CiAKLQkvKgotCSAqIFhY WDogSW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkIGNvbnNpZGVyIGVuaGFuY2luZyBwZ193YWxkdW1w IHRvIHJlYWQgV0FMCi0JICogZmlsZXMgZnJvbSBhbiBhcmNoaXZlLgotCSAqLwotCWlmICghbm9f cGFyc2Vfd2FsICYmIGNvbnRleHQuZm9ybWF0ID09ICd0JykKLQl7Ci0JCXBnX2xvZ19lcnJvcigi cGdfd2FsZHVtcCBjYW5ub3QgcmVhZCB0YXIgZmlsZXMiKTsKLQkJcGdfbG9nX2Vycm9yX2hpbnQo IllvdSBtdXN0IHVzZSAtbi8tLW5vLXBhcnNlLXdhbCB3aGVuIHZlcmlmeWluZyBhIHRhci1mb3Jt YXQgYmFja3VwLiIpOwotCQlleGl0KDEpOwotCX0KLQogCS8qCiAJICogUGVyZm9ybSB0aGUgYXBw cm9wcmlhdGUgdHlwZSBvZiB2ZXJpZmljYXRpb24gYXBwcm9wcmlhdGUgYmFzZWQgb24gdGhlCiAJ ICogYmFja3VwIGZvcm1hdC4gVGhpcyB3aWxsIGNsb3NlICdkaXInLgpAQCAtMzUwLDcgKzM0Miw3 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl2ZXJpZnlfcGxhaW5fYmFja3VwX2Rp cmVjdG9yeSgmY29udGV4dCwgTlVMTCwgY29udGV4dC5iYWNrdXBfZGlyZWN0b3J5LAogCQkJCQkJ CQkJICBkaXIpOwogCWVsc2UKLQkJdmVyaWZ5X3Rhcl9iYWNrdXAoJmNvbnRleHQsIGRpcik7CisJ CXZlcmlmeV90YXJfYmFja3VwKCZjb250ZXh0LCBkaXIsICZiYXNlX2FyY2hpdmVfcGF0aCwgJndh bF9hcmNoaXZlX3BhdGgpOwogCiAJLyoKIAkgKiBUaGUgIm1hdGNoZWQiIGZsYWcgc2hvdWxkIG5v dyBiZSBzZXQgb24gZXZlcnkgZW50cnkgaW4gdGhlIGhhc2ggdGFibGUuCkBAIC0zNjgsMTIgKzM2 MCwzNSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpZiAoY29udGV4dC5mb3JtYXQg PT0gJ3AnICYmICFjb250ZXh0LnNraXBfY2hlY2tzdW1zKQogCQl2ZXJpZnlfYmFja3VwX2NoZWNr c3VtcygmY29udGV4dCk7CiAKKwkvKgorCSAqIEJ5IGRlZmF1bHQsIFdBTCBmaWxlcyBhcmUgZXhw ZWN0ZWQgdG8gYmUgZm91bmQgaW4gdGhlIGJhY2t1cCBkaXJlY3RvcnkKKwkgKiBmb3IgcGxhaW4t Zm9ybWF0IGJhY2t1cHMuIEluIHRoZSBjYXNlIG9mIHRhci1mb3JtYXQgYmFja3VwcywgaWYgYQor CSAqIHNlcGFyYXRlIFdBTCBhcmNoaXZlIGlzIG5vdCBmb3VuZCwgdGhlIFdBTCBmaWxlcyBhcmUg bW9zdCBsaWtlbHkKKwkgKiBpbmNsdWRlZCB3aXRoaW4gdGhlIG1haW4gZGF0YSBkaXJlY3Rvcnkg YXJjaGl2ZS4KKwkgKi8KKwlpZiAod2FsX3BhdGggPT0gTlVMTCkKKwl7CisJCWlmIChjb250ZXh0 LmZvcm1hdCA9PSAncCcpCisJCQl3YWxfcGF0aCA9IHBzcHJpbnRmKCIlcy9wZ193YWwiLCBjb250 ZXh0LmJhY2t1cF9kaXJlY3RvcnkpOworCQllbHNlIGlmICh3YWxfYXJjaGl2ZV9wYXRoKQorCQkJ d2FsX3BhdGggPSB3YWxfYXJjaGl2ZV9wYXRoOworCQllbHNlIGlmIChiYXNlX2FyY2hpdmVfcGF0 aCkKKwkJCXdhbF9wYXRoID0gYmFzZV9hcmNoaXZlX3BhdGg7CisJCWVsc2UKKwkJeworCQkJcGdf bG9nX2Vycm9yKCJXQUwgYXJjaGl2ZSBub3QgZm91bmQiKTsKKwkJCXBnX2xvZ19lcnJvcl9oaW50 KCJTcGVjaWZ5IHRoZSBjb3JyZWN0IHBhdGggdXNpbmcgdGhlIG9wdGlvbiAtdy8tLXdhbC1wYXRo LiAgIgorCQkJCQkJCSAgIk9yIHlvdSBtdXN0IHVzZSAtbi8tLW5vLXBhcnNlLXdhbCB3aGVuIHZl cmlmeWluZyBhIHRhci1mb3JtYXQgYmFja3VwLiIpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwog CS8qCiAJICogVHJ5IHRvIHBhcnNlIHRoZSByZXF1aXJlZCByYW5nZXMgb2YgV0FMIHJlY29yZHMs IHVubGVzcyB3ZSB3ZXJlIHRvbGQKIAkgKiBub3QgdG8gZG8gc28uCiAJICovCiAJaWYgKCFub19w YXJzZV93YWwpCi0JCXBhcnNlX3JlcXVpcmVkX3dhbCgmY29udGV4dCwgcGdfd2FsZHVtcF9wYXRo LCB3YWxfZGlyZWN0b3J5KTsKKwkJcGFyc2VfcmVxdWlyZWRfd2FsKCZjb250ZXh0LCBwZ193YWxk dW1wX3BhdGgsIHdhbF9wYXRoKTsKIAogCS8qCiAJICogSWYgZXZlcnl0aGluZyBsb29rcyBPSywg dGVsbCB0aGUgdXNlciB0aGlzLCB1bmxlc3Mgd2Ugd2VyZSBhc2tlZCB0bwpAQCAtNzg3LDcgKzgw Miw4IEBAIHZlcmlmeV9jb250cm9sX2ZpbGUoY29uc3QgY2hhciAqY29udHJvbHBhdGgsIHVpbnQ2 NCBtYW5pZmVzdF9zeXN0ZW1faWRlbnRpZmllcikKICAqIGNsb3NlIHdoZW4gd2UncmUgZG9uZSB3 aXRoIGl0LgogICovCiBzdGF0aWMgdm9pZAotdmVyaWZ5X3Rhcl9iYWNrdXAodmVyaWZpZXJfY29u dGV4dCAqY29udGV4dCwgRElSICpkaXIpCit2ZXJpZnlfdGFyX2JhY2t1cCh2ZXJpZmllcl9jb250 ZXh0ICpjb250ZXh0LCBESVIgKmRpciwgY2hhciAqKmJhc2VfYXJjaGl2ZV9wYXRoLAorCQkJCSAg Y2hhciAqKndhbF9hcmNoaXZlX3BhdGgpCiB7CiAJc3RydWN0IGRpcmVudCAqZGlyZW50OwogCVNp bXBsZVB0ckxpc3QgdGFyZmlsZXMgPSB7TlVMTCwgTlVMTH07CkBAIC04MTYsNyArODMyLDggQEAg dmVyaWZ5X3Rhcl9iYWNrdXAodmVyaWZpZXJfY29udGV4dCAqY29udGV4dCwgRElSICpkaXIpCiAJ CQljaGFyCSAgICpmdWxscGF0aDsKIAogCQkJZnVsbHBhdGggPSBwc3ByaW50ZigiJXMvJXMiLCBj b250ZXh0LT5iYWNrdXBfZGlyZWN0b3J5LCBmaWxlbmFtZSk7Ci0JCQlwcmVjaGVja190YXJfYmFj a3VwX2ZpbGUoY29udGV4dCwgZmlsZW5hbWUsIGZ1bGxwYXRoLCAmdGFyZmlsZXMpOworCQkJcHJl Y2hlY2tfdGFyX2JhY2t1cF9maWxlKGNvbnRleHQsIGZpbGVuYW1lLCBmdWxscGF0aCwgJnRhcmZp bGVzLAorCQkJCQkJCQkJIGJhc2VfYXJjaGl2ZV9wYXRoLCB3YWxfYXJjaGl2ZV9wYXRoKTsKIAkJ CXBmcmVlKGZ1bGxwYXRoKTsKIAkJfQogCX0KQEAgLTg3NSwxNyArODkyLDIxIEBAIHZlcmlmeV90 YXJfYmFja3VwKHZlcmlmaWVyX2NvbnRleHQgKmNvbnRleHQsIERJUiAqZGlyKQogICoKICAqIFRo ZSBhcmd1bWVudHMgdG8gdGhpcyBmdW5jdGlvbiBhcmUgbW9zdGx5IHRoZSBzYW1lIGFzIHRoZQog ICogdmVyaWZ5X3BsYWluX2JhY2t1cF9maWxlLiBUaGUgYWRkaXRpb25hbCBhcmd1bWVudCBvdXRw dXRzIGEgbGlzdCBvZiB2YWxpZAotICogdGFyIGZpbGVzLgorICogdGFyIGZpbGVzLCBhbG9uZyB3 aXRoIHRoZSBmdWxsIHBhdGhzIHRvIHRoZSBtYWluIGFyY2hpdmUgYW5kIHRoZSBXQUwKKyAqIGRp cmVjdG9yeSBhcmNoaXZlLgogICovCiBzdGF0aWMgdm9pZAogcHJlY2hlY2tfdGFyX2JhY2t1cF9m aWxlKHZlcmlmaWVyX2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKnJlbHBhdGgsCi0JCQkJCQkgY2hh ciAqZnVsbHBhdGgsIFNpbXBsZVB0ckxpc3QgKnRhcmZpbGVzKQorCQkJCQkJIGNoYXIgKmZ1bGxw YXRoLCBTaW1wbGVQdHJMaXN0ICp0YXJmaWxlcywKKwkJCQkJCSBjaGFyICoqYmFzZV9hcmNoaXZl X3BhdGgsIGNoYXIgKip3YWxfYXJjaGl2ZV9wYXRoKQogewogCXN0cnVjdCBzdGF0IHNiOwogCU9p ZAkJCXRibHNwY19vaWQgPSBJbnZhbGlkT2lkOwogCXBnX2NvbXByZXNzX2FsZ29yaXRobSBjb21w cmVzc19hbGdvcml0aG07CiAJdGFyX2ZpbGUgICAqdGFyOwogCWNoYXIJICAgKnN1ZmZpeCA9IE5V TEw7CisJYm9vbAkJaXNfYmFzZV9hcmNoaXZlID0gZmFsc2U7CisJYm9vbAkJaXNfd2FsX2FyY2hp dmUgPSBmYWxzZTsKIAogCS8qIFNob3VsZCBiZSB0YXIgZm9ybWF0IGJhY2t1cCAqLwogCUFzc2Vy dChjb250ZXh0LT5mb3JtYXQgPT0gJ3QnKTsKQEAgLTkxOCw5ICs5MzksMTUgQEAgcHJlY2hlY2tf dGFyX2JhY2t1cF9maWxlKHZlcmlmaWVyX2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKnJlbHBhdGgs CiAJICogZXh0ZW5zaW9uIHN1Y2ggYXMgLmd6LCAubHo0LCBvciAuenN0LgogCSAqLwogCWlmIChz dHJuY21wKCJiYXNlIiwgcmVscGF0aCwgNCkgPT0gMCkKKwl7CiAJCXN1ZmZpeCA9IHJlbHBhdGgg KyA0OworCQlpc19iYXNlX2FyY2hpdmUgPSB0cnVlOworCX0KIAllbHNlIGlmIChzdHJuY21wKCJw Z193YWwiLCByZWxwYXRoLCA2KSA9PSAwKQorCXsKIAkJc3VmZml4ID0gcmVscGF0aCArIDY7CisJ CWlzX3dhbF9hcmNoaXZlID0gdHJ1ZTsKKwl9CiAJZWxzZQogCXsKIAkJLyogRXhwZWN0ZWQgYSA8 dGFibGVzcGFjZW9pZD4udGFyIGZpbGUgaGVyZS4gKi8KQEAgLTk1Myw4ICs5ODAsMTMgQEAgcHJl Y2hlY2tfdGFyX2JhY2t1cF9maWxlKHZlcmlmaWVyX2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKnJl bHBhdGgsCiAJICogSWdub3JlIFdBTHMsIGFzIHJlYWRpbmcgYW5kIHZlcmlmaWNhdGlvbiB3aWxs IGJlIGhhbmRsZWQgdGhyb3VnaAogCSAqIHBnX3dhbGR1bXAuCiAJICovCi0JaWYgKHN0cm5jbXAo InBnX3dhbCIsIHJlbHBhdGgsIDYpID09IDApCisJaWYgKGlzX3dhbF9hcmNoaXZlKQorCXsKKwkJ KndhbF9hcmNoaXZlX3BhdGggPSBwc3RyZHVwKGZ1bGxwYXRoKTsKIAkJcmV0dXJuOworCX0KKwll bHNlIGlmIChpc19iYXNlX2FyY2hpdmUpCisJCSpiYXNlX2FyY2hpdmVfcGF0aCA9IHBzdHJkdXAo ZnVsbHBhdGgpOwogCiAJLyoKIAkgKiBBcHBlbmQgdGhlIGluZm9ybWF0aW9uIHRvIHRoZSBsaXN0 IGZvciBjb21wbGV0ZSB2ZXJpZmljYXRpb24gYXQgYSBsYXRlcgpAQCAtMTE4OCw3ICsxMjIwLDcg QEAgdmVyaWZ5X2ZpbGVfY2hlY2tzdW0odmVyaWZpZXJfY29udGV4dCAqY29udGV4dCwgbWFuaWZl c3RfZmlsZSAqbSwKICAqLwogc3RhdGljIHZvaWQKIHBhcnNlX3JlcXVpcmVkX3dhbCh2ZXJpZmll cl9jb250ZXh0ICpjb250ZXh0LCBjaGFyICpwZ193YWxkdW1wX3BhdGgsCi0JCQkJICAgY2hhciAq d2FsX2RpcmVjdG9yeSkKKwkJCQkgICBjaGFyICp3YWxfcGF0aCkKIHsKIAltYW5pZmVzdF9kYXRh ICptYW5pZmVzdCA9IGNvbnRleHQtPm1hbmlmZXN0OwogCW1hbmlmZXN0X3dhbF9yYW5nZSAqdGhp c193YWxfcmFuZ2UgPSBtYW5pZmVzdC0+Zmlyc3Rfd2FsX3JhbmdlOwpAQCAtMTE5OCw3ICsxMjMw LDcgQEAgcGFyc2VfcmVxdWlyZWRfd2FsKHZlcmlmaWVyX2NvbnRleHQgKmNvbnRleHQsIGNoYXIg KnBnX3dhbGR1bXBfcGF0aCwKIAkJY2hhcgkgICAqcGdfd2FsZHVtcF9jbWQ7CiAKIAkJcGdfd2Fs ZHVtcF9jbWQgPSBwc3ByaW50ZigiXCIlc1wiIC0tcXVpZXQgLS1wYXRoPVwiJXNcIiAtLXRpbWVs aW5lPSV1IC0tc3RhcnQ9JVgvJTA4WCAtLWVuZD0lWC8lMDhYXG4iLAotCQkJCQkJCQkgIHBnX3dh bGR1bXBfcGF0aCwgd2FsX2RpcmVjdG9yeSwgdGhpc193YWxfcmFuZ2UtPnRsaSwKKwkJCQkJCQkJ ICBwZ193YWxkdW1wX3BhdGgsIHdhbF9wYXRoLCB0aGlzX3dhbF9yYW5nZS0+dGxpLAogCQkJCQkJ CQkgIExTTl9GT1JNQVRfQVJHUyh0aGlzX3dhbF9yYW5nZS0+c3RhcnRfbHNuKSwKIAkJCQkJCQkJ ICBMU05fRk9STUFUX0FSR1ModGhpc193YWxfcmFuZ2UtPmVuZF9sc24pKTsKIAkJZmZsdXNoKE5V TEwpOwpAQCAtMTM2Niw3ICsxMzk4LDcgQEAgdXNhZ2Uodm9pZCkKIAlwcmludGYoXygiICAtUCwg LS1wcm9ncmVzcyAgICAgICAgICAgICAgc2hvdyBwcm9ncmVzcyBpbmZvcm1hdGlvblxuIikpOwog CXByaW50ZihfKCIgIC1xLCAtLXF1aWV0ICAgICAgICAgICAgICAgICBkbyBub3QgcHJpbnQgYW55 IG91dHB1dCwgZXhjZXB0IGZvciBlcnJvcnNcbiIpKTsKIAlwcmludGYoXygiICAtcywgLS1za2lw LWNoZWNrc3VtcyAgICAgICAgc2tpcCBjaGVja3N1bSB2ZXJpZmljYXRpb25cbiIpKTsKLQlwcmlu dGYoXygiICAtdywgLS13YWwtZGlyZWN0b3J5PVBBVEggICAgdXNlIHNwZWNpZmllZCBwYXRoIGZv ciBXQUwgZmlsZXNcbiIpKTsKKwlwcmludGYoXygiICAtdywgLS13YWwtcGF0aD1QQVRIICAgICAg ICAgdXNlIHNwZWNpZmllZCBwYXRoIGZvciBXQUwgZmlsZXNcbiIpKTsKIAlwcmludGYoXygiICAt ViwgLS12ZXJzaW9uICAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRo ZW4gZXhpdFxuIikpOwogCXByaW50ZihfKCIgIC0/LCAtLWhlbHAgICAgICAgICAgICAgICAgICBz aG93IHRoaXMgaGVscCwgdGhlbiBleGl0XG4iKSk7CiAJcHJpbnRmKF8oIlxuUmVwb3J0IGJ1Z3Mg dG8gPCVzPi5cbiIpLCBQQUNLQUdFX0JVR1JFUE9SVCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X3ZlcmlmeWJhY2t1cC90LzAwMl9hbGdvcml0aG0ucGwgYi9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1 cC90LzAwMl9hbGdvcml0aG0ucGwKaW5kZXggMDU1NjE5MWVjOWQuLmVkYzUxNWQ1OTA0IDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC90LzAwMl9hbGdvcml0aG0ucGwKKysrIGIv c3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvdC8wMDJfYWxnb3JpdGhtLnBsCkBAIC0zMCwxMCArMzAs NiBAQCBzdWIgdGVzdF9jaGVja3N1bXMKIAl7CiAJCSMgQWRkIHN3aXRjaCB0byBnZXQgYSB0YXIt Zm9ybWF0IGJhY2t1cAogCQlwdXNoIEBiYWNrdXAsICgnLS1mb3JtYXQnID0+ICd0YXInKTsKLQot CQkjIEFkZCBzd2l0Y2ggdG8gc2tpcCBXQUwgdmVyaWZpY2F0aW9uLCB3aGljaCBpcyBub3QgeWV0 IHN1cHBvcnRlZCBmb3IKLQkJIyB0YXItZm9ybWF0IGJhY2t1cHMKLQkJcHVzaCBAdmVyaWZ5LCAo Jy0tbm8tcGFyc2Utd2FsJyk7CiAJfQogCiAJIyBBIGJhY2t1cCB3aXRoIGEgYm9ndXMgYWxnb3Jp dGhtIHNob3VsZCBmYWlsLgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvdC8w MDNfY29ycnVwdGlvbi5wbCBiL3NyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL3QvMDAzX2NvcnJ1cHRp b24ucGwKaW5kZXggYjFkNjViOGFhMGYuLjg4MmQ3NWQ5ZGMyIDEwMDY0NAotLS0gYS9zcmMvYmlu L3BnX3ZlcmlmeWJhY2t1cC90LzAwM19jb3JydXB0aW9uLnBsCisrKyBiL3NyYy9iaW4vcGdfdmVy aWZ5YmFja3VwL3QvMDAzX2NvcnJ1cHRpb24ucGwKQEAgLTE5MywxMCArMTkzLDggQEAgZm9yIG15 ICRzY2VuYXJpbyAoQHNjZW5hcmlvKQogCQkJY29tbWFuZF9vayhbICR0YXIsICctY2YnID0+ICIk dGFyX2JhY2t1cF9wYXRoL2Jhc2UudGFyIiwgJy4nIF0pOwogCQkJY2hkaXIoJGN3ZCkgfHwgZGll ICJjaGRpcjogJCEiOwogCi0JCQkjIE5vdyBjaGVjayB0aGF0IHRoZSBiYWNrdXAgbm8gbG9uZ2Vy IHZlcmlmaWVzLiBXZSBtdXN0IHVzZSAtbgotCQkJIyBoZXJlLCBiZWNhdXNlIHBnX3dhbGR1bXAg Y2FuJ3QgeWV0IHJlYWQgV0FMIGZyb20gYSB0YXJmaWxlLgogCQkJY29tbWFuZF9mYWlsc19saWtl KAotCQkJCVsgJ3BnX3ZlcmlmeWJhY2t1cCcsICctLW5vLXBhcnNlLXdhbCcsICR0YXJfYmFja3Vw X3BhdGggXSwKKwkJCQlbICdwZ192ZXJpZnliYWNrdXAnLCAkdGFyX2JhY2t1cF9wYXRoIF0sCiAJ CQkJJHNjZW5hcmlvLT57J2ZhaWxzX2xpa2UnfSwKIAkJCQkiY29ycnVwdCBiYWNrdXAgZmFpbHMg dmVyaWZpY2F0aW9uOiAkbmFtZSIpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3ZlcmlmeWJh Y2t1cC90LzAwN193YWwucGwgYi9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC90LzAwN193YWwucGwK aW5kZXggNzkwODdhMWY2YmUuLjBlMDM3N2JmYWNjIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Zl cmlmeWJhY2t1cC90LzAwN193YWwucGwKKysrIGIvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvdC8w MDdfd2FsLnBsCkBAIC00MiwxMCArNDIsMTAgQEAgY29tbWFuZF9vayhbICdwZ192ZXJpZnliYWNr dXAnLCAnLS1uby1wYXJzZS13YWwnLCAkYmFja3VwX3BhdGggXSwKIGNvbW1hbmRfb2soCiAJWwog CQkncGdfdmVyaWZ5YmFja3VwJywKLQkJJy0td2FsLWRpcmVjdG9yeScgPT4gJHJlbG9jYXRlZF9w Z193YWwsCisJCSctLXdhbC1wYXRoJyA9PiAkcmVsb2NhdGVkX3BnX3dhbCwKIAkJJGJhY2t1cF9w YXRoCiAJXSwKLQknLS13YWwtZGlyZWN0b3J5IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgV0FMIGRp cmVjdG9yeScpOworCSctLXdhbC1wYXRoIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgV0FMIGRpcmVj dG9yeScpOwogCiAjIE1vdmUgZGlyZWN0b3J5IGJhY2sgdG8gb3JpZ2luYWwgbG9jYXRpb24uCiBy ZW5hbWUoJHJlbG9jYXRlZF9wZ193YWwsICRvcmlnaW5hbF9wZ193YWwpIHx8IGRpZSAicmVuYW1l IHBnX3dhbCBiYWNrOiAkISI7CkBAIC05MCw0ICs5MCwyMCBAQCBjb21tYW5kX29rKAogCVsgJ3Bn X3ZlcmlmeWJhY2t1cCcsICRiYWNrdXBfcGF0aDIgXSwKIAkndmFsaWQgYmFzZSBiYWNrdXAgd2l0 aCB0aW1lbGluZSA+IDEnKTsKIAorIyBUZXN0IFdBTCB2ZXJpZmljYXRpb24gZm9yIGEgdGFyLWZv cm1hdCBiYWNrdXAgd2l0aCBhIHNlcGFyYXRlIHBnX3dhbC50YXIsCisjIGFzIHByb2R1Y2VkIGJ5 IHBnX2Jhc2ViYWNrdXAgLS1mb3JtYXQ9dGFyIC0td2FsLW1ldGhvZD1zdHJlYW0uCitteSAkYmFj a3VwX3BhdGgzID0gJHByaW1hcnktPmJhY2t1cF9kaXIgLiAnL3Rlc3RfdGFyX3dhbCc7CiskcHJp bWFyeS0+Y29tbWFuZF9vaygKKwlbCisJCSdwZ19iYXNlYmFja3VwJywKKwkJJy0tcGdkYXRhJyA9 PiAkYmFja3VwX3BhdGgzLAorCQknLS1uby1zeW5jJywKKwkJJy0tZm9ybWF0JyA9PiAndGFyJywK KwkJJy0tY2hlY2twb2ludCcgPT4gJ2Zhc3QnCisJXSwKKwkidGFyIGJhY2t1cCB3aXRoIHNlcGFy YXRlIHBnX3dhbC50YXIiKTsKK2NvbW1hbmRfb2soCisJWyAncGdfdmVyaWZ5YmFja3VwJywgJGJh Y2t1cF9wYXRoMyBdLAorCSdXQUwgdmVyaWZpY2F0aW9uIHN1Y2NlZWRzIHdpdGggc2VwYXJhdGUg cGdfd2FsLnRhcicpOworCiBkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf dmVyaWZ5YmFja3VwL3QvMDA4X3VudGFyLnBsIGIvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvdC8w MDhfdW50YXIucGwKaW5kZXggYWU2N2FlODVhMzEuLjE2MWMwOGMxOTBkIDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX3ZlcmlmeWJhY2t1cC90LzAwOF91bnRhci5wbAorKysgYi9zcmMvYmluL3BnX3Zl cmlmeWJhY2t1cC90LzAwOF91bnRhci5wbApAQCAtNDcsNyArNDcsNiBAQCBteSAkdHNvaWQgPSAk cHJpbWFyeS0+c2FmZV9wc3FsKAogCQlTRUxFQ1Qgb2lkIEZST00gcGdfdGFibGVzcGFjZSBXSEVS RSBzcGNuYW1lID0gJ3JlZ3Jlc3NfdHMxJykpOwogCiBteSAkYmFja3VwX3BhdGggPSAkcHJpbWFy eS0+YmFja3VwX2RpciAuICcvc2VydmVyLWJhY2t1cCc7Ci1teSAkZXh0cmFjdF9wYXRoID0gJHBy aW1hcnktPmJhY2t1cF9kaXIgLiAnL2V4dHJhY3RlZC1iYWNrdXAnOwogCiBteSBAdGVzdF9jb25m aWd1cmF0aW9uID0gKAogCXsKQEAgLTEyMywxNCArMTIyLDEyIEBAIGZvciBteSAkdGMgKEB0ZXN0 X2NvbmZpZ3VyYXRpb24pCiAJCSMgVmVyaWZ5IHRhciBiYWNrdXAuCiAJCSRwcmltYXJ5LT5jb21t YW5kX29rKAogCQkJWwotCQkJCSdwZ192ZXJpZnliYWNrdXAnLCAnLS1uby1wYXJzZS13YWwnLAot CQkJCSctLWV4aXQtb24tZXJyb3InLCAkYmFja3VwX3BhdGgsCisJCQkJJ3BnX3ZlcmlmeWJhY2t1 cCcsICctLWV4aXQtb24tZXJyb3InLCAkYmFja3VwX3BhdGgsCiAJCQldLAogCQkJInZlcmlmeSBi YWNrdXAsIGNvbXByZXNzaW9uICRtZXRob2QiKTsKIAogCQkjIENsZWFudXAuCiAJCXJtdHJlZSgk YmFja3VwX3BhdGgpOwotCQlybXRyZWUoJGV4dHJhY3RfcGF0aCk7CiAJfQogfQogCmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC90LzAxMF9jbGllbnRfdW50YXIucGwgYi9zcmMv YmluL3BnX3ZlcmlmeWJhY2t1cC90LzAxMF9jbGllbnRfdW50YXIucGwKaW5kZXggMWFjN2I1ZGI3 NWEuLjk2NzBmYmU0ZmRhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC90LzAx MF9jbGllbnRfdW50YXIucGwKKysrIGIvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvdC8wMTBfY2xp ZW50X3VudGFyLnBsCkBAIC0zMiw3ICszMiw2IEBAIHByaW50ICRqZiAkanVua19kYXRhOwogY2xv c2UgJGpmOwogCiBteSAkYmFja3VwX3BhdGggPSAkcHJpbWFyeS0+YmFja3VwX2RpciAuICcvY2xp ZW50LWJhY2t1cCc7Ci1teSAkZXh0cmFjdF9wYXRoID0gJHByaW1hcnktPmJhY2t1cF9kaXIgLiAn L2V4dHJhY3RlZC1iYWNrdXAnOwogCiBteSBAdGVzdF9jb25maWd1cmF0aW9uID0gKAogCXsKQEAg LTEzNywxMyArMTM2LDExIEBAIGZvciBteSAkdGMgKEB0ZXN0X2NvbmZpZ3VyYXRpb24pCiAJCSMg VmVyaWZ5IHRhciBiYWNrdXAuCiAJCSRwcmltYXJ5LT5jb21tYW5kX29rKAogCQkJWwotCQkJCSdw Z192ZXJpZnliYWNrdXAnLCAnLS1uby1wYXJzZS13YWwnLAotCQkJCSctLWV4aXQtb24tZXJyb3In LCAkYmFja3VwX3BhdGgsCisJCQkJJ3BnX3ZlcmlmeWJhY2t1cCcsICctLWV4aXQtb24tZXJyb3In LCAkYmFja3VwX3BhdGgsCiAJCQldLAogCQkJInZlcmlmeSBiYWNrdXAsIGNvbXByZXNzaW9uICRt ZXRob2QiKTsKIAogCQkjIENsZWFudXAuCi0JCXJtdHJlZSgkZXh0cmFjdF9wYXRoKTsKIAkJcm10 cmVlKCRiYWNrdXBfcGF0aCk7CiAJfQogfQotLSAKMi40Ny4xCgo= --000000000000fbe6c0064d5deeae--