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 1wQfQE-001l18-2k for pgsql-hackers@arkaria.postgresql.org; Sat, 23 May 2026 06:01:19 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wQfQB-00FIda-0o for pgsql-hackers@arkaria.postgresql.org; Sat, 23 May 2026 06:01:16 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wQfQA-00FIdR-2f for pgsql-hackers@lists.postgresql.org; Sat, 23 May 2026 06:01:15 +0000 Received: from mail-ua1-x92f.google.com ([2607:f8b0:4864:20::92f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wQfQ9-0000000109w-0MWk for pgsql-hackers@lists.postgresql.org; Sat, 23 May 2026 06:01:15 +0000 Received: by mail-ua1-x92f.google.com with SMTP id a1e0cc1a2514c-95673f7b5baso2282906241.1 for ; Fri, 22 May 2026 23:01:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779516071; cv=none; d=google.com; s=arc-20240605; b=Jo+bjB38OG73J+HS9DXAH/b0KrSZLgdBJl/rE3KGM+7To1r8OhlpDlXzNXh8meO7rS N5f/WkGnc55ZH9rycTbYDfXM5gg4IRyaEtslZFtZbV4WLr5Dw/Yuj20AsKxmutBJGxSm 3kbJ2rzFf5KagaUHHNtyP4bJxHhcsCfFb+/u04J75VMxQc1Zr4fT1t/qVvQ9G9WrC1pk NDUw38bjU7wd+PVPgCZgvmTSnM4FlYZ7LUPW3ONmHVDH6kFVeg08zn3km0tyJM67UQHH WsTcQNVgD4pc4YMIJdvS5ssT+EVn6QeD/JKcupMP++KqRvzgsMq65bIaebeOV6cYiHXU Z7zw== 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=Wm/03HC7I/i5DmaqqjJCqlRT62ipZ2ayTvbvtWIpQyY=; fh=S90uB5TGYMb1/JkPlLQ+wUU9jnXnwpV489BqhW145sw=; b=KkLcEsetiGMWi3S2jVRt39v9VTZLrU/Ep/5peXQrszTeJOKVfNA7x8lIu4Xj2sHPrR Gh+3wIFlgHbJwXXRs/asm1nkNWjPxx2w2PPSS8hCpEqw9K0dCx8xmMn4ppG0giBmzI+k jphzZsZz04oo7ICGn3O8mu86lJN4Uk0UBxlB4pAVwm+7+KF0N8jlVJPfs5x+libjLZGC xXMRH7wA3qoQnoA6dP+nRNxgHnI74wqdEiPmhzIIDJ2FZ/jbtejE0YM5kcq0cwKkqWPt xjeAVKIWYCmElCsyidDKHP1J3miWcrpLDgeY6bEbRO4nFjrhMOKo2Rv1+9+Z8qB5b3ha 9grg==; 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=20251104; t=1779516071; x=1780120871; 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=Wm/03HC7I/i5DmaqqjJCqlRT62ipZ2ayTvbvtWIpQyY=; b=AwLkyfYssTX/ZsLsLZtp+fsF+kdz/R9TktMahXq2m4+8JHZbws3cBuA4xsqf3dpcrv gpGqVfQfKePEn4E719qP+w+X5ARTIYAsDmNwqwLsDkJp1iOmzWxxdWyRSE0Oxw9v0PA8 0VZ7wTAbI38tDx7sTpjUTOiguzJOokH1Dhc6fDrJUQIxDj62UahzdaQM0r7HeKIXpoJ3 N5QDoeN1tzFgV95Y7X1MphVG7/iprfxx/bAC1ESf6SMpcUN7NTPAXK6SxTVcpNOzmVsP ksgHuqf9knFhRdrgERrYW6rUj+oKfvBLwYH1JzwlZOUD+XO356a3MJvZQTo6TZK4gVLQ 1GUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779516071; x=1780120871; 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=Wm/03HC7I/i5DmaqqjJCqlRT62ipZ2ayTvbvtWIpQyY=; b=SYb0N3n41KWh7iH02SfjTKA5QwmA9UejgOrYz4WdmhA33W4qV8M56AEGa6b5X1Y/Oo SsGkXIkSVbywDeR8F6/zZyr99jpW2aiWhCExPeeJHY3C3MqPlZHWPMDxLNxvhYWp5bET iZEb8BKzG36ROnLUni7A9U6kw4Iw0+E0Tq1rTGYWK3c3P04g08tEo5htfNKvggfVGJUd bZRciUwlofSbaxmvOfweGo3m1Ru2W7cojpkGbrSE0drtzPzO3M5eGyBBTowMifIJ/zjs cildURtdEMehxiG9Vd+cjQwpDSSYVDOXa4DM4L4WIW4wSrs4vvCUGHe1ASlkbMreutED D8Bg== X-Forwarded-Encrypted: i=1; AFNElJ8CpIHQYZnjmCAbHn2EYAAg+hP1PWZw0HIGRXB9YyZF8ZAgFULNIsmcO+JieWXl9jFoccCJ1RFhuqg12OLe@lists.postgresql.org X-Gm-Message-State: AOJu0YzWGH7KGEnVtzx+OOKFPmdLdoyWxZeVakIVkHATAuxpqYR6AxK6 lN2949m81V/ACZzIYexA6TCqEOleGWR2U5MY4QuhPygLmbOAjnMfZAerdguhv/dx9uZEI0KpPSv FKeknOZ6El4lcR3rIrqZ/fBdTK/UO/g== X-Gm-Gg: Acq92OE0BBDUemMN08QIjcPmD6XuX5fMBSd4SQuSej9jgbNGjVavvHWkoD31lVafBDg b3zVCoXegAD9I/RBBKTbr9UzldzVlv6ufc6dje0thdD8CerAsAtMpN9uTzZhKrgAUdv1t5pjP0V D3lVZPMa3texqdm9BhD7XAdcls5QXMDuRDuFxWEj9GU039sJgPfdGJec64fUryxt/bC/0MJ9TeQ t0rOrK3Un7n5744oZ1PwuM2o2+3CNC4rowushp66ef5b3P+iIQ/loDzgBy2ncw+SIM7xzp+DOaC lWo4pr+0KAcYfkOYvqZU553d4wM40VxH6hHhM4sYlls= X-Received: by 2002:a05:6102:1590:b0:60f:7499:9b6e with SMTP id ada2fe7eead31-67c854898d4mr3393002137.27.1779516070876; Fri, 22 May 2026 23:01:10 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Shinya Kato Date: Sat, 23 May 2026 15:00:33 +0900 X-Gm-Features: AVHnY4JsZ1m2YKqOW2LZmqZdhenygH1m6nBHWxpWiqs3SBXK0MbkU_BkmA2NESQ Message-ID: Subject: Re: Report oldest xmin source when autovacuum cannot remove tuples To: Japin Li Cc: wenhui qiu , Sami Imseih , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000477ecd065275dfd7" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000477ecd065275dfd7 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, May 23, 2026 at 2:22=E2=80=AFPM Shinya Kato wrote: > Additionally, I forgot to update meson.build, which caused the tests > to fail. I have fixed that in the attached patch. Oops, I made a slight mistake. Fixed. --=20 Best regards, Shinya Kato NTT OSS Center --000000000000477ecd065275dfd7 Content-Type: application/octet-stream; name="v5-0001-Report-oldest-xmin-blocker-when-VACUUM-cannot-rem.patch" Content-Disposition: attachment; filename="v5-0001-Report-oldest-xmin-blocker-when-VACUUM-cannot-rem.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mphxvsox0 RnJvbSAxNDJlNjU5OGQyZWI5Mzk1NzRlYzJmNjA3MjFmZjQ0YTc3Yjk3MjM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGlueWEgS2F0byA8c2hpbnlhMTEua2F0b0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjIgTWF5IDIwMjYgMjE6MzU6MTIgKzA5MDAKU3ViamVjdDogW1BBVENIIHY1 XSBSZXBvcnQgb2xkZXN0IHhtaW4gYmxvY2tlciB3aGVuIFZBQ1VVTSBjYW5ub3QgcmVtb3ZlCiB0 dXBsZXMKCldoZW4gVkFDVVVNIGVuY291bnRlcnMgcmVjZW50bHktZGVhZCB0dXBsZXMgdGhhdCBj YW5ub3QgYmUgcmVtb3ZlZCwKaXQgaXMgb2Z0ZW4gdW5jbGVhciB3aGF0IGlzIHByZXZlbnRpbmcg dGhlIHhpZCBob3Jpem9uIGZyb20gYWR2YW5jaW5nLgpUaGlzIHBhdGNoIGFkZHMgZGlhZ25vc3Rp YyBpbmZvcm1hdGlvbiB0byB0aGUgVkFDVVVNIFZFUkJPU0UgbG9nCm91dHB1dCBpZGVudGlmeWlu ZyB0aGUgYmxvY2tlciB0aGF0IGlzIGhvbGRpbmcgYmFjayBPbGRlc3RYbWluLgoKVGhlIG5ldyBH ZXRYaWRIb3Jpem9uQmxvY2tlcigpIGZ1bmN0aW9uIGluIHByb2NhcnJheS5jIHNlYXJjaGVzIGZv cgp0aGUgc291cmNlIG9mIHRoZSBob3Jpem9uOiBhY3RpdmUgdHJhbnNhY3Rpb25zLCBpZGxlLWlu LXRyYW5zYWN0aW9uCnNlc3Npb25zLCBwcmVwYXJlZCB0cmFuc2FjdGlvbnMsIGhvdCBzdGFuZGJ5 IGZlZWRiYWNrIHZpYSB3YWxzZW5kZXJzLAphbmQgbG9naWNhbCByZXBsaWNhdGlvbiBzbG90cy4g IFdoZW4gcmVjZW50bHlfZGVhZF90dXBsZXMgPiAwLCBWQUNVVU0KVkVSQk9TRSBub3cgcmVwb3J0 cyB0aGUgaGlnaGVzdC1wcmlvcml0eSBibG9ja2VyIHdpdGggaWRlbnRpZnlpbmcKZGV0YWlscyAo cGlkLCBwcmVwYXJlZCB0cmFuc2FjdGlvbiBHSUQsIHN0YW5kYnkgYXBwbGljYXRpb24gbmFtZSwg b3IKc2xvdCBuYW1lKS4KCkJlY2F1c2UgdGhlIGhvcml6b24gd2FzIGNvbXB1dGVkIGVhcmxpZXIs IHRoZSBvcmlnaW5hbCBibG9ja2VyIG1heQpoYXZlIGFscmVhZHkgY29tbWl0dGVkIGJ5IHRoZSB0 aW1lIHRoZSBjaGVjayBydW5zLiAgVGhlIHJlc3VsdCBpcwp0aGVyZWZvcmUgYmVzdC1lZmZvcnQ6 IGl0IG1heSByZXBvcnQgYSBkaWZmZXJlbnQgYmxvY2tlciBvciBub25lIGF0CmFsbC4KCkF1dGhv cjogU2hpbnlhIEthdG8gPHNoaW55YTExLmthdG9AZ21haWwuY29tPgpSZXZpZXdlZC1ieTogd2Vu aHVpIHFpdSA8cWl1d2VuaHVpZnhAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogRnVqaWkgTWFzYW8g PG1hc2FvLmZ1amlpQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IFNhbWkgSW1zZWloIDxzYW1pbXNl aWhAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogRGlsaXAgS3VtYXIgPGRpbGlwYmFsYXV0QGdtYWls LmNvbT4KUmV2aWV3ZWQtYnk6IEphcGluIExpIDxqYXBpbmxpQGhvdG1haWwuY29tPgpEaXNjdXNz aW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBT3pFdXJTZ3ktZ0R0d0ZtRWJqNStSOVBMMF9HM3FZ QjZubnpKdE5TdHl1Zjg3VlNWZ0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL3ZhY3V1bWxhenkuYyAgICAgICAgICB8ICA1OSArKysrCiBzcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS90d29waGFzZS5jICAgICAgICAgfCAgMzkgKysrCiBzcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9wcm9jYXJyYXkuYyAgICAgICAgICAgfCAyNjEgKysrKysrKysrKysrKysrCiBzcmMv aW5jbHVkZS9hY2Nlc3MvdHdvcGhhc2UuaCAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2lu Y2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaCAgICAgICAgICAgICAgIHwgIDQwICsrKwogc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQgICAgICAgIHwgICAxICsKIC4uLi90ZXN0 X21pc2MvdC8wMTRfbG9nX3ZhY3V1bV9ibG9ja2Vycy5wbCAgICB8IDMxNCArKysrKysrKysrKysr KysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAg MiArCiA4IGZpbGVzIGNoYW5nZWQsIDcxNyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMTRfbG9nX3ZhY3V1bV9ibG9ja2Vycy5w bAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwppbmRleCAzOTM5NWFlZDBkNS4uYTg0 MTIyNWJiNGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenku YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKQEAgLTE1MSw2ICsx NTEsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvZnJlZXNwYWNlLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9sYXRjaC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgorI2luY2x1ZGUgInN0b3JhZ2Uv cHJvY2FycmF5LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9yZWFkX3N0cmVhbS5oIgogI2luY2x1ZGUg InV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgpA QCAtMTA3NCw2ICsxMDc1LDY0IEBAIGhlYXBfdmFjdXVtX3JlbChSZWxhdGlvbiByZWwsIGNvbnN0 IFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCQkJCQkJCSB2YWNyZWwtPnR1cGxlc19kZWxldGVkLAog CQkJCQkJCSAoaW50NjQpIHZhY3JlbC0+bmV3X3JlbF90dXBsZXMsCiAJCQkJCQkJIHZhY3JlbC0+ cmVjZW50bHlfZGVhZF90dXBsZXMpOworCQkJaWYgKHZhY3JlbC0+cmVjZW50bHlfZGVhZF90dXBs ZXMgPiAwKQorCQkJeworCQkJCVhpZEhvcml6b25CbG9ja2VyIGJsb2NrZXI7CisKKwkJCQlpZiAo R2V0WGlkSG9yaXpvbkJsb2NrZXIodmFjcmVsLT5jdXRvZmZzLk9sZGVzdFhtaW4sICZibG9ja2Vy KSkKKwkJCQl7CisJCQkJCXN3aXRjaCAoYmxvY2tlci50eXBlKQorCQkJCQl7CisJCQkJCQljYXNl IFhIQl9BQ1RJVkVfVFJBTlNBQ1RJT046CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLAor CQkJCQkJCQkJCQkgXygib2xkZXN0IHhtaW4gYmxvY2tlcjogYWN0aXZlIHRyYW5zYWN0aW9uIChw aWQgPSAlZClcbiIpLAorCQkJCQkJCQkJCQkgYmxvY2tlci5waWQpOworCQkJCQkJCWJyZWFrOwor CQkJCQkJY2FzZSBYSEJfSURMRV9JTl9UUkFOU0FDVElPTjoKKwkJCQkJCQlhcHBlbmRTdHJpbmdJ bmZvKCZidWYsCisJCQkJCQkJCQkJCSBfKCJvbGRlc3QgeG1pbiBibG9ja2VyOiBpZGxlIGluIHRy YW5zYWN0aW9uIChwaWQgPSAlZClcbiIpLAorCQkJCQkJCQkJCQkgYmxvY2tlci5waWQpOworCQkJ CQkJCWJyZWFrOworCQkJCQkJY2FzZSBYSEJfWE1JTl9BQ1RJVkVfVFJBTlNBQ1RJT046CisJCQkJ CQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLAorCQkJCQkJCQkJCQkgXygib2xkZXN0IHhtaW4gYmxv Y2tlcjogYWN0aXZlIHRyYW5zYWN0aW9uIGhvbGRpbmcgc25hcHNob3QgKHBpZCA9ICVkKVxuIiks CisJCQkJCQkJCQkJCSBibG9ja2VyLnBpZCk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIFhI Ql9YTUlOX0lETEVfSU5fVFJBTlNBQ1RJT046CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVm LAorCQkJCQkJCQkJCQkgXygib2xkZXN0IHhtaW4gYmxvY2tlcjogaWRsZSBpbiB0cmFuc2FjdGlv biBob2xkaW5nIHNuYXBzaG90IChwaWQgPSAlZClcbiIpLAorCQkJCQkJCQkJCQkgYmxvY2tlci5w aWQpOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSBYSEJfUFJFUEFSRURfVFJBTlNBQ1RJT046 CisJCQkJCQkJaWYgKGJsb2NrZXIubmFtZVswXSAhPSAnXDAnKQorCQkJCQkJCQlhcHBlbmRTdHJp bmdJbmZvKCZidWYsCisJCQkJCQkJCQkJCQkgXygib2xkZXN0IHhtaW4gYmxvY2tlcjogcHJlcGFy ZWQgdHJhbnNhY3Rpb24gKGdpZCA9ICVzKVxuIiksCisJCQkJCQkJCQkJCQkgYmxvY2tlci5uYW1l KTsKKwkJCQkJCQllbHNlCisJCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwKKwkJCQkJCQkJ CQkJCSBfKCJvbGRlc3QgeG1pbiBibG9ja2VyOiBwcmVwYXJlZCB0cmFuc2FjdGlvblxuIikpOwor CQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSBYSEJfSE9UX1NUQU5EQllfRkVFREJBQ0s6CisJCQkJ CQkJaWYgKGJsb2NrZXIubmFtZVswXSAhPSAnXDAnKQorCQkJCQkJCQlhcHBlbmRTdHJpbmdJbmZv KCZidWYsCisJCQkJCQkJCQkJCQkgXygib2xkZXN0IHhtaW4gYmxvY2tlcjogaG90IHN0YW5kYnkg ZmVlZGJhY2sgKHN0YW5kYnkgbmFtZSA9ICVzLCBwaWQgPSAlZClcbiIpLAorCQkJCQkJCQkJCQkJ IGJsb2NrZXIubmFtZSwKKwkJCQkJCQkJCQkJCSBibG9ja2VyLnBpZCk7CisJCQkJCQkJZWxzZQor CQkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsCisJCQkJCQkJCQkJCQkgXygib2xkZXN0IHht aW4gYmxvY2tlcjogaG90IHN0YW5kYnkgZmVlZGJhY2sgKHBpZCA9ICVkKVxuIiksCisJCQkJCQkJ CQkJCQkgYmxvY2tlci5waWQpOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSBYSEJfUkVQTElD QVRJT05fU0xPVDoKKwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsCisJCQkJCQkJCQkJCSBf KCJvbGRlc3QgeG1pbiBibG9ja2VyOiBsb2dpY2FsIHJlcGxpY2F0aW9uIHNsb3QgKHNsb3QgbmFt ZSA9ICVzKVxuIiksCisJCQkJCQkJCQkJCSBibG9ja2VyLm5hbWUpOworCQkJCQkJCWJyZWFrOwor CQkJCQkJY2FzZSBYSEJfTk9ORToKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0K IAkJCWlmICh2YWNyZWwtPm1pc3NlZF9kZWFkX3R1cGxlcyA+IDApCiAJCQkJYXBwZW5kU3RyaW5n SW5mbygmYnVmLAogCQkJCQkJCQkgXygidHVwbGVzIG1pc3NlZDogJSIgUFJJZDY0ICIgZGVhZCBm cm9tICV1IHBhZ2VzIG5vdCByZW1vdmVkIGR1ZSB0byBjbGVhbnVwIGxvY2sgY29udGVudGlvblxu IiksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwppbmRleCAxMDM1ZThiM2ZjNy4u NjlkMWQ4MmIzNDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3Bo YXNlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwpAQCAtMjgy Miw2ICsyODIyLDQ1IEBAIExvb2t1cEdYYWN0QnlTdWJpZChPaWQgc3ViaWQpCiAJcmV0dXJuIGZv dW5kOwogfQogCisvKgorICogR2V0UHJlcGFyZWRUcmFuc2FjdGlvbkdpZAorICoJCUdldCB0aGUg R0lEIGZvciB0aGUgcHJlcGFyZWQgdHJhbnNhY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gWElELgorICoK KyAqIFJldHVybnMgdHJ1ZSB3aGVuIGEgbWF0Y2hpbmcgcHJlcGFyZWQgdHJhbnNhY3Rpb24gaXMg Zm91bmQuICBnaWQgd2lsbCBiZQorICogc2V0IHRvIGFuIGVtcHR5IHN0cmluZyB3aGVuIG5vIG1h dGNoIGlzIGZvdW5kLgorICovCitib29sCitHZXRQcmVwYXJlZFRyYW5zYWN0aW9uR2lkKFRyYW5z YWN0aW9uSWQgeGlkLCBjaGFyIGdpZFtHSURTSVpFXSkKK3sKKwlib29sCQlmb3VuZCA9IGZhbHNl OworCisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpOworCisJZ2lkWzBdID0gJ1ww JzsKKworCWlmIChtYXhfcHJlcGFyZWRfeGFjdHMgPT0gMCB8fCBUd29QaGFzZVN0YXRlID09IE5V TEwpCisJCXJldHVybiBmYWxzZTsKKworCUxXTG9ja0FjcXVpcmUoVHdvUGhhc2VTdGF0ZUxvY2ss IExXX1NIQVJFRCk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBUd29QaGFzZVN0YXRlLT5udW1QcmVw WGFjdHM7IGkrKykKKwl7CisJCUdsb2JhbFRyYW5zYWN0aW9uIGd4YWN0ID0gVHdvUGhhc2VTdGF0 ZS0+cHJlcFhhY3RzW2ldOworCisJCWlmICghZ3hhY3QtPnZhbGlkKQorCQkJY29udGludWU7CisK KwkJaWYgKCFUcmFuc2FjdGlvbklkRXF1YWxzKFhpZEZyb21GdWxsVHJhbnNhY3Rpb25JZChneGFj dC0+ZnhpZCksIHhpZCkpCisJCQljb250aW51ZTsKKworCQlzdHJsY3B5KGdpZCwgZ3hhY3QtPmdp ZCwgR0lEU0laRSk7CisJCWZvdW5kID0gdHJ1ZTsKKwkJYnJlYWs7CisJfQorCUxXTG9ja1JlbGVh c2UoVHdvUGhhc2VTdGF0ZUxvY2spOworCisJcmV0dXJuIGZvdW5kOworfQorCiAvKgogICogVHdv UGhhc2VHZXRPbGRlc3RYaWRJbkNvbW1pdAogICoJCVJldHVybiB0aGUgb2xkZXN0IHRyYW5zYWN0 aW9uIElEIGZyb20gcHJlcGFyZWQgdHJhbnNhY3Rpb25zIHRoYXQgYXJlCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3Byb2NhcnJheS5jCmluZGV4IDkyOTliY2ViYmRhLi5kODM2ZDI0ZDI1ZCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKKysrIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKQEAgLTU4LDExICs1OCwxMyBAQAogI2luY2x1ZGUgInBn c3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXIuaCIKICNpbmNsdWRlICJwb3J0 L3BnX2xmaW5kLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdC5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9wcm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCiAj aW5jbHVkZSAidXRpbHMvYWNsLmgiCisjaW5jbHVkZSAidXRpbHMvYmFja2VuZF9zdGF0dXMuaCIK ICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9w b2ludC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgpAQCAtMTk5OSw2ICsyMDAxLDI2 NSBAQCBHZXRSZXBsaWNhdGlvbkhvcml6b25zKFRyYW5zYWN0aW9uSWQgKnhtaW4sIFRyYW5zYWN0 aW9uSWQgKmNhdGFsb2dfeG1pbikKIAkqY2F0YWxvZ194bWluID0gaG9yaXpvbnMuc2xvdF9jYXRh bG9nX3htaW47CiB9CiAKKy8qCisgKiBGZXRjaCB0aGUgc3RhbmRieSdzIGFwcGxpY2F0aW9uX25h bWUgYXMgcmVwb3J0ZWQgYnkgdGhlIHdhbHNlbmRlciBiYWNrZW5kLgorICovCitzdGF0aWMgdm9p ZAorR2V0U3RhbmRieUFwcG5hbWUoaW50IHBpZCwgY2hhciAqbmFtZSwgU2l6ZSBsZW4pCit7CisJ aW50CQkJbmJhY2tlbmRzID0gcGdzdGF0X2ZldGNoX3N0YXRfbnVtYmFja2VuZHMoKTsKKworCW5h bWVbMF0gPSAnXDAnOworCisJZm9yIChpbnQgaSA9IDE7IGkgPD0gbmJhY2tlbmRzOyBpKyspCisJ eworCQlMb2NhbFBnQmFja2VuZFN0YXR1cyAqbG9jYWxfYmVlbnRyeTsKKwkJUGdCYWNrZW5kU3Rh dHVzICpiZWVudHJ5OworCisJCWxvY2FsX2JlZW50cnkgPSBwZ3N0YXRfZ2V0X2xvY2FsX2JlZW50 cnlfYnlfaW5kZXgoaSk7CisJCWlmIChsb2NhbF9iZWVudHJ5ID09IE5VTEwpCisJCQljb250aW51 ZTsKKworCQliZWVudHJ5ID0gJmxvY2FsX2JlZW50cnktPmJhY2tlbmRTdGF0dXM7CisJCWlmIChi ZWVudHJ5LT5zdF9wcm9jcGlkICE9IHBpZCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChiZWVudHJ5 LT5zdF9hcHBuYW1lICYmIGJlZW50cnktPnN0X2FwcG5hbWVbMF0gIT0gJ1wwJykKKwkJCXN0cmxj cHkobmFtZSwgYmVlbnRyeS0+c3RfYXBwbmFtZSwgbGVuKTsKKwkJcmV0dXJuOworCX0KK30KKwor LyoKKyAqIFJldHVybiBYaWRIb3Jpem9uQmxvY2tlclR5cGUgZm9yIGEgYmFja2VuZCB3aG9zZSB4 aWQgbWF0Y2hlcyB0aGUgaG9yaXpvbi4KKyAqLworc3RhdGljIGlubGluZSBYaWRIb3Jpem9uQmxv Y2tlclR5cGUKK1hpZEhvcml6b25CbG9ja2VyVHlwZUZvckJhY2tlbmQoY29uc3QgUEdQUk9DICpw cm9jKQoreworCWlmIChwcm9jLT53YWl0X2V2ZW50X2luZm8gPT0gV0FJVF9FVkVOVF9DTElFTlRf UkVBRCkKKwkJcmV0dXJuIFhIQl9JRExFX0lOX1RSQU5TQUNUSU9OOworCXJldHVybiBYSEJfQUNU SVZFX1RSQU5TQUNUSU9OOworfQorCisvKgorICogUmV0dXJuIFhpZEhvcml6b25CbG9ja2VyVHlw ZSBmb3IgYSBiYWNrZW5kIHdob3NlIHhtaW4gbWF0Y2hlcyB0aGUgaG9yaXpvbi4KKyAqLworc3Rh dGljIGlubGluZSBYaWRIb3Jpem9uQmxvY2tlclR5cGUKK1hpZEhvcml6b25CbG9ja2VyVHlwZUZv clhtaW5CYWNrZW5kKGNvbnN0IFBHUFJPQyAqcHJvYykKK3sKKwlpZiAocHJvYy0+d2FpdF9ldmVu dF9pbmZvID09IFdBSVRfRVZFTlRfQ0xJRU5UX1JFQUQpCisJCXJldHVybiBYSEJfWE1JTl9JRExF X0lOX1RSQU5TQUNUSU9OOworCXJldHVybiBYSEJfWE1JTl9BQ1RJVkVfVFJBTlNBQ1RJT047Cit9 CisKKy8qCisgKiBGaW5kIHRoZSBibG9ja2VycyB0aGF0IGFyZSBob2xkaW5nIGJhY2sgdGhlIGdp dmVuIHhpZCBob3Jpem9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgZm9yIHdoYXQg aXMgcHJldmVudGluZyB0aGUgZ2l2ZW4gaG9yaXpvbiBmcm9tIGJlaW5nCisgKiBhZHZhbmNlZCB0 byBhbGxvdyByZW1vdmFsIG9mIGRlYWQgdHVwbGVzLiBJdCBjaGVja3M6CisgKiAxLiBBY3RpdmUg dHJhbnNhY3Rpb25zIChydW5uaW5nIHN0YXRlbWVudHMpCisgKiAyLiBJZGxlLWluLXRyYW5zYWN0 aW9uIHNlc3Npb25zCisgKiAzLiBQcmVwYXJlZCB0cmFuc2FjdGlvbnMKKyAqIDQuIEhvdCBzdGFu ZGJ5IGZlZWRiYWNrCisgKiA1LiBMb2dpY2FsIHJlcGxpY2F0aW9uIHNsb3RzCisgKgorICogQmVj YXVzZSB0aGUgaG9yaXpvbiB3YXMgY29tcHV0ZWQgZWFybGllciwgdGhlIG9yaWdpbmFsIGJsb2Nr ZXIgbWF5IGhhdmUKKyAqIGFscmVhZHkgY29tbWl0dGVkIGJ5IHRoZSB0aW1lIHRoaXMgZnVuY3Rp b24gcnVucy4gIFRoZSByZXN1bHQgaXMgdGhlcmVmb3JlCisgKiBiZXN0LWVmZm9ydDogaXQgbWF5 IHJldHVybiBhIGRpZmZlcmVudCBibG9ja2VyLCBvciBubyBibG9ja2VyIGF0IGFsbC4KKyAqCisg KiBSZXR1cm5zIGEgcGFsbG9jJ2QgYXJyYXkgb2YgYmxvY2tlcnMgYW5kIHN0b3JlcyB0aGUgbnVt YmVyIG9mIGVudHJpZXMgaW4KKyAqICpuYmxvY2tlcnMuIFRoZSBhcnJheSBtYXkgYmUgZW1wdHkg aWYgbm8gYmxvY2tlciBpcyBmb3VuZC4KKyAqCisgKiBOb3RlOiB0aGUgc2FtZSB1bmRlcmx5aW5n IGNhdXNlIChlLmcuIGEgcGh5c2ljYWwgcmVwbGljYXRpb24gc2xvdCB3aXRoCisgKiBob3Rfc3Rh bmRieV9mZWVkYmFjaykgY2FuIGFwcGVhciBhcyBib3RoIGFuIFhIQl9IT1RfU1RBTkRCWV9GRUVE QkFDSyBlbnRyeQorICogKGZyb20gdGhlIHdhbHNlbmRlciBQR1BST0MpIGFuZCBhbiBYSEJfUkVQ TElDQVRJT05fU0xPVCBlbnRyeSAoZnJvbSB0aGUKKyAqIHNsb3QncyB4bWluKS4gIENhbGxlcnMg dGhhdCBjb25zdW1lIGFsbCBlbnRyaWVzIHNob3VsZCBiZSBwcmVwYXJlZCBmb3Igc3VjaAorICog ZHVwbGljYXRlcy4KKyAqLworc3RhdGljIFhpZEhvcml6b25CbG9ja2VyICoKK0dldFhpZEhvcml6 b25CbG9ja2VycyhUcmFuc2FjdGlvbklkIGhvcml6b24sIGludCAqbmJsb2NrZXJzKQoreworCVBy b2NBcnJheVN0cnVjdCAqYXJyYXlQID0gcHJvY0FycmF5OworCVRyYW5zYWN0aW9uSWQgKm90aGVy X3hpZHMgPSBQcm9jR2xvYmFsLT54aWRzOworCVhpZEhvcml6b25CbG9ja2VyICpyZXN1bHQ7CisJ aW50CQkJY291bnQgPSAwOworCWludAkJCW1heF9ibG9ja2VyczsKKworCUFzc2VydChUcmFuc2Fj dGlvbklkSXNWYWxpZChob3Jpem9uKSk7CisJQXNzZXJ0KG5ibG9ja2VycyAhPSBOVUxMKTsKKwor CS8qCisJICogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBldmVyeSBQR1BST0MgcGx1cyBhbGwg cmVwbGljYXRpb24gc2xvdHMuIFRoaXMKKwkgKiBpcyBhIGdlbmVyb3VzIHVwcGVyIGJvdW5kICh0 eXBpY2FsbHkgb25seSAwLTIgZW50cmllcyBhcmUgcmV0dXJuZWQpLAorCSAqIGJ1dCBrZWVwcyB0 aGUgbG9naWMgc2ltcGxlIGZvciBhIGRpYWdub3N0aWMgZnVuY3Rpb24gdGhhdCBydW5zCisJICog aW5mcmVxdWVudGx5LgorCSAqLworCW1heF9ibG9ja2VycyA9IGFycmF5UC0+bWF4UHJvY3MgKyBt YXhfcmVwbGljYXRpb25fc2xvdHM7CisJcmVzdWx0ID0gcGFsbG9jMF9hcnJheShYaWRIb3Jpem9u QmxvY2tlciwgbWF4X2Jsb2NrZXJzKTsKKworCUxXTG9ja0FjcXVpcmUoUHJvY0FycmF5TG9jaywg TFdfU0hBUkVEKTsKKworCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVBy b2NzOyBpbmRleCsrKQorCXsKKwkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tp bmRleF07CisJCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCWludDgJ CXN0YXR1c0ZsYWdzID0gUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3NbaW5kZXhdOworCQlUcmFuc2Fj dGlvbklkIHByb2NfeGlkOworCQlUcmFuc2FjdGlvbklkIHByb2NfeG1pbjsKKwkJWGlkSG9yaXpv bkJsb2NrZXJUeXBlIGNhbmRpZGF0ZV90eXBlID0gWEhCX05PTkU7CisJCWludAkJCWNhbmRpZGF0 ZV9waWQgPSAwOworCQlUcmFuc2FjdGlvbklkIGNhbmRpZGF0ZV94aWQgPSBJbnZhbGlkVHJhbnNh Y3Rpb25JZDsKKworCQkvKgorCQkgKiBTa2lwIG92ZXIgYmFja2VuZHMgZWl0aGVyIHZhY3V1bWlu ZyAod2hpY2ggaXMgb2sgd2l0aCByb3dzIGJlaW5nCisJCSAqIHJlbW92ZWQsIGFzIGxvbmcgYXMg cGdfc3VidHJhbnMgaXMgbm90IHRydW5jYXRlZCksIGRvaW5nIGxvZ2ljYWwKKwkJICogZGVjb2Rp bmcgKHdoaWNoIG1hbmFnZXMgeG1pbiBzZXBhcmF0ZWx5LCBjaGVjayBiZWxvdyksIG9yIG15c2Vs Zi4KKwkJICovCisJCWlmIChzdGF0dXNGbGFncyAmIChQUk9DX0lOX1ZBQ1VVTSB8IFBST0NfSU5f TE9HSUNBTF9ERUNPRElORykgfHwKKwkJCXByb2MgPT0gTXlQcm9jKQorCQkJY29udGludWU7CisK KwkJLyogRmV0Y2ggeGlkIGp1c3Qgb25jZSAtIHNlZSBHZXROZXdUcmFuc2FjdGlvbklkICovCisJ CXByb2NfeGlkID0gVUlOVDMyX0FDQ0VTU19PTkNFKG90aGVyX3hpZHNbaW5kZXhdKTsKKwkJcHJv Y194bWluID0gVUlOVDMyX0FDQ0VTU19PTkNFKHByb2MtPnhtaW4pOworCisJCS8qIENoZWNrIGlm IHRoaXMgcHJvYydzIHhpZCBtYXRjaGVzICovCisJCWlmIChUcmFuc2FjdGlvbklkRXF1YWxzKHBy b2NfeGlkLCBob3Jpem9uKSkKKwkJeworCQkJaWYgKHByb2MtPnBpZCA9PSAwKQorCQkJeworCQkJ CWNhbmRpZGF0ZV90eXBlID0gWEhCX1BSRVBBUkVEX1RSQU5TQUNUSU9OOworCQkJCWNhbmRpZGF0 ZV9waWQgPSAwOworCQkJCWNhbmRpZGF0ZV94aWQgPSBwcm9jX3hpZDsKKwkJCX0KKwkJCWVsc2UK KwkJCXsKKwkJCQljYW5kaWRhdGVfdHlwZSA9IFhpZEhvcml6b25CbG9ja2VyVHlwZUZvckJhY2tl bmQocHJvYyk7CisJCQkJY2FuZGlkYXRlX3BpZCA9IHByb2MtPnBpZDsKKwkJCQljYW5kaWRhdGVf eGlkID0gcHJvY194aWQ7CisJCQl9CisJCX0KKwkJLyogQ2hlY2sgaWYgdGhpcyBwcm9jJ3MgeG1p biBtYXRjaGVzICovCisJCWVsc2UgaWYgKFRyYW5zYWN0aW9uSWRFcXVhbHMocHJvY194bWluLCBo b3Jpem9uKSkKKwkJeworCQkJaWYgKHN0YXR1c0ZsYWdzICYgUFJPQ19BRkZFQ1RTX0FMTF9IT1JJ Wk9OUykKKwkJCXsKKwkJCQljYW5kaWRhdGVfdHlwZSA9IFhIQl9IT1RfU1RBTkRCWV9GRUVEQkFD SzsKKwkJCQljYW5kaWRhdGVfcGlkID0gcHJvYy0+cGlkOworCQkJCWNhbmRpZGF0ZV94aWQgPSBw cm9jX3htaW47CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJY2FuZGlkYXRlX3R5cGUgPSBYaWRI b3Jpem9uQmxvY2tlclR5cGVGb3JYbWluQmFja2VuZChwcm9jKTsKKwkJCQljYW5kaWRhdGVfcGlk ID0gcHJvYy0+cGlkOworCQkJCWNhbmRpZGF0ZV94aWQgPSBwcm9jX3htaW47CisJCQl9CisJCX0K KworCQkvKgorCQkgKiBJZiB3ZSBmb3VuZCBhIGNhbmRpZGF0ZSwgcmVjb3JkIGl0LiBDYW5kaWRh dGVzIGFyZSBjb2xsZWN0ZWQgaW4KKwkJICogUHJvY0FycmF5IG9yZGVyOyBjYWxsZXJzIGNhbiBy ZW9yZGVyIGlmIG5lZWRlZC4KKwkJICovCisJCWlmIChjYW5kaWRhdGVfdHlwZSAhPSBYSEJfTk9O RSkKKwkJeworCQkJWGlkSG9yaXpvbkJsb2NrZXIgKmRzdDsKKworCQkJZHN0ID0gJnJlc3VsdFtj b3VudCsrXTsKKwkJCWRzdC0+dHlwZSA9IGNhbmRpZGF0ZV90eXBlOworCQkJZHN0LT5waWQgPSBj YW5kaWRhdGVfcGlkOworCQkJZHN0LT54aWQgPSBjYW5kaWRhdGVfeGlkOworCQl9CisJfQorCisJ TFdMb2NrUmVsZWFzZShQcm9jQXJyYXlMb2NrKTsKKworCS8qCisJICogTm93IHRoYXQgUHJvY0Fy cmF5TG9jayBpcyByZWxlYXNlZCwgZmV0Y2ggYW55IGV4dHJhIGRldGFpbHMgd2Ugd2FudCB0bwor CSAqIGF0dGFjaCB0byBibG9ja2Vycywgc3VjaCBhcyBwcmVwYXJlZCB0cmFuc2FjdGlvbiBHSURz IGFuZCBzdGFuZGJ5CisJICogYXBwbGljYXRpb24gbmFtZXMuCisJICovCisJZm9yIChpbnQgaSA9 IDA7IGkgPCBjb3VudDsgaSsrKQorCXsKKwkJaWYgKHJlc3VsdFtpXS50eXBlID09IFhIQl9QUkVQ QVJFRF9UUkFOU0FDVElPTikKKwkJCUdldFByZXBhcmVkVHJhbnNhY3Rpb25HaWQocmVzdWx0W2ld LnhpZCwgcmVzdWx0W2ldLm5hbWUpOworCQllbHNlIGlmIChyZXN1bHRbaV0udHlwZSA9PSBYSEJf SE9UX1NUQU5EQllfRkVFREJBQ0spCisJCQlHZXRTdGFuZGJ5QXBwbmFtZShyZXN1bHRbaV0ucGlk LCByZXN1bHRbaV0ubmFtZSwKKwkJCQkJCQkgIHNpemVvZihyZXN1bHRbaV0ubmFtZSkpOworCX0K KworCS8qCisJICogQWxzbyBjaGVjayByZXBsaWNhdGlvbiBzbG90cy4KKwkgKi8KKwlpZiAobWF4 X3JlcGxpY2F0aW9uX3Nsb3RzID4gMCkKKwl7CisJCUxXTG9ja0FjcXVpcmUoUmVwbGljYXRpb25T bG90Q29udHJvbExvY2ssIExXX1NIQVJFRCk7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhf cmVwbGljYXRpb25fc2xvdHM7IGkrKykKKwkJeworCQkJUmVwbGljYXRpb25TbG90ICpzID0gJlJl cGxpY2F0aW9uU2xvdEN0bC0+cmVwbGljYXRpb25fc2xvdHNbaV07CisJCQlUcmFuc2FjdGlvbklk IHNsb3RfeG1pbjsKKwkJCVRyYW5zYWN0aW9uSWQgc2xvdF9jYXRhbG9nX3htaW47CisKKwkJCWlm ICghcy0+aW5fdXNlKQorCQkJCWNvbnRpbnVlOworCisJCQlTcGluTG9ja0FjcXVpcmUoJnMtPm11 dGV4KTsKKwkJCXNsb3RfeG1pbiA9IHMtPmRhdGEueG1pbjsKKwkJCXNsb3RfY2F0YWxvZ194bWlu ID0gcy0+ZGF0YS5jYXRhbG9nX3htaW47CisJCQlTcGluTG9ja1JlbGVhc2UoJnMtPm11dGV4KTsK KworCQkJaWYgKFRyYW5zYWN0aW9uSWRFcXVhbHMoc2xvdF94bWluLCBob3Jpem9uKSB8fAorCQkJ CVRyYW5zYWN0aW9uSWRFcXVhbHMoc2xvdF9jYXRhbG9nX3htaW4sIGhvcml6b24pKQorCQkJewor CQkJCVhpZEhvcml6b25CbG9ja2VyICpkc3Q7CisKKwkJCQlkc3QgPSAmcmVzdWx0W2NvdW50Kytd OworCQkJCWRzdC0+dHlwZSA9IFhIQl9SRVBMSUNBVElPTl9TTE9UOworCQkJCWRzdC0+cGlkID0g MDsKKwkJCQlkc3QtPnhpZCA9IFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHNsb3RfeG1pbikgPworCQkJ CQlzbG90X3htaW4gOgorCQkJCQlzbG90X2NhdGFsb2dfeG1pbjsKKwkJCQlzdHJsY3B5KGRzdC0+ bmFtZSwgTmFtZVN0cihzLT5kYXRhLm5hbWUpLCBzaXplb2YoZHN0LT5uYW1lKSk7CisJCQl9CisJ CX0KKworCQlMV0xvY2tSZWxlYXNlKFJlcGxpY2F0aW9uU2xvdENvbnRyb2xMb2NrKTsKKwl9CisK KwkqbmJsb2NrZXJzID0gY291bnQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEdldCB0 aGUgaGlnaGVzdC1wcmlvcml0eSBibG9ja2VyIGhvbGRpbmcgYmFjayB0aGUgeGlkIGhvcml6b24u CisgKgorICogUmV0dXJucyB0cnVlIGFuZCBzdG9yZXMgdGhlIGJsb2NrZXIgaW4gKmJsb2NrZXIg aWYgYW55IGFyZSBmb3VuZC4KKyAqLworYm9vbAorR2V0WGlkSG9yaXpvbkJsb2NrZXIoVHJhbnNh Y3Rpb25JZCBob3Jpem9uLCBYaWRIb3Jpem9uQmxvY2tlciAqYmxvY2tlcikKK3sKKwlYaWRIb3Jp em9uQmxvY2tlciAqYmxvY2tlcnM7CisJWGlkSG9yaXpvbkJsb2NrZXIgKmJlc3QgPSBOVUxMOwor CWludAkJCW5ibG9ja2VyczsKKworCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChob3Jpem9u KSk7CisJQXNzZXJ0KGJsb2NrZXIgIT0gTlVMTCk7CisKKwlibG9ja2VycyA9IEdldFhpZEhvcml6 b25CbG9ja2Vycyhob3Jpem9uLCAmbmJsb2NrZXJzKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG5i bG9ja2VyczsgaSsrKQorCXsKKwkJaWYgKGJlc3QgPT0gTlVMTCB8fCBibG9ja2Vyc1tpXS50eXBl IDwgYmVzdC0+dHlwZSkKKwkJCWJlc3QgPSAmYmxvY2tlcnNbaV07CisJfQorCisJaWYgKGJlc3Qg IT0gTlVMTCkKKwkJKmJsb2NrZXIgPSAqYmVzdDsKKworCXBmcmVlKGJsb2NrZXJzKTsKKworCXJl dHVybiAoYmVzdCAhPSBOVUxMKTsKK30KKwogLyoKICAqIEdldE1heFNuYXBzaG90WGlkQ291bnQg LS0gZ2V0IG1heCBzaXplIGZvciBzbmFwc2hvdCBYSUQgYXJyYXkKICAqCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9hY2Nlc3MvdHdvcGhhc2UuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90d29waGFz ZS5oCmluZGV4IDFkMmZmNDJjOWI3Li5mYzcyOTRhNGUyNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3R3b3BoYXNlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3R3b3BoYXNlLmgK QEAgLTcwLDYgKzcwLDcgQEAgZXh0ZXJuIHZvaWQgVHdvUGhhc2VUcmFuc2FjdGlvbkdpZChPaWQg c3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkLCBjaGFyICpnaWRfcmVzLAogCQkJCQkJCQkgICBpbnQg c3pnaWQpOwogZXh0ZXJuIGJvb2wgTG9va3VwR1hhY3RCeVN1YmlkKE9pZCBzdWJpZCk7CiAKK2V4 dGVybiBib29sIEdldFByZXBhcmVkVHJhbnNhY3Rpb25HaWQoVHJhbnNhY3Rpb25JZCB4aWQsIGNo YXIgZ2lkW0dJRFNJWkVdKTsKIGV4dGVybiBUcmFuc2FjdGlvbklkIFR3b1BoYXNlR2V0T2xkZXN0 WGlkSW5Db21taXQodm9pZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBUV09QSEFTRV9IICovCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oIGIvc3JjL2luY2x1ZGUvc3Rv cmFnZS9wcm9jYXJyYXkuaAppbmRleCBlYzg5YzQ0ODIyMC4uY2JkZTNiOTk3MjMgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgKKysrIGIvc3JjL2luY2x1ZGUvc3Rv cmFnZS9wcm9jYXJyYXkuaApAQCAtMTQsMTAgKzE0LDQ3IEBACiAjaWZuZGVmIFBST0NBUlJBWV9I CiAjZGVmaW5lIFBST0NBUlJBWV9ICiAKKyNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1 ZGUgInN0b3JhZ2UvbG9jay5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3RhbmRieS5oIgogI2luY2x1 ZGUgInV0aWxzL3JlbGNhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcHNob3QuaCIKIAorLyoK KyAqIFR5cGUgb2YgYmxvY2tlciB0aGF0IGlzIGhvbGRpbmcgYmFjayB0aGUgeGlkIGhvcml6b24u CisgKiBMaXN0ZWQgaW4gcHJpb3JpdHkgb3JkZXIgZnJvbSBoaWdoZXN0IHRvIGxvd2VzdC4gIEJs b2NrZXJzIHdob3NlIHhpZAorICogbWF0Y2hlcyB0aGUgaG9yaXpvbiAodGhlIHJvb3QgY2F1c2Up IGFyZSBsaXN0ZWQgYmVmb3JlIGJsb2NrZXJzIHdob3NlCisgKiB4bWluIG1hdGNoZXMgKGhlbGQg YmFjayBieSB0aGUgcm9vdCBjYXVzZSkuICBXaXRoaW4gZWFjaCBncm91cCwgYWN0aXZlCisgKiB0 cmFuc2FjdGlvbnMgYXJlIGxpc3RlZCBmaXJzdCBiZWNhdXNlIHRoZXkgYXJlIHRoZSBtb3N0IGFj dGlvbmFibGUgZm9yCisgKiB0aGUgREJBICh0aGUgcnVubmluZyBxdWVyeSBjYW4gYmUgaWRlbnRp ZmllZCBhbmQgY2FuY2VsbGVkKS4KKyAqLwordHlwZWRlZiBlbnVtIFhpZEhvcml6b25CbG9ja2Vy VHlwZQoreworCVhIQl9OT05FID0gMCwKKwkvKiB4aWQtbWF0Y2ggdHlwZXMgKGhvcml6b24gPT0g cHJvYydzIHhpZCkgKi8KKwlYSEJfQUNUSVZFX1RSQU5TQUNUSU9OLAkJLyogYmFja2VuZCBydW5u aW5nIGEgc3RhdGVtZW50ICovCisJWEhCX0lETEVfSU5fVFJBTlNBQ1RJT04sCS8qIGJhY2tlbmQg aWRsZSBpbiB0cmFuc2FjdGlvbiAqLworCVhIQl9QUkVQQVJFRF9UUkFOU0FDVElPTiwJLyogcHJl cGFyZWQgKHR3by1waGFzZSkgdHJhbnNhY3Rpb24gKi8KKwkvKiB4bWluLW1hdGNoIHR5cGVzICho b3Jpem9uID09IHByb2MncyB4bWluIG9yIHNsb3QncyB4bWluKSAqLworCVhIQl9YTUlOX0FDVElW RV9UUkFOU0FDVElPTiwJLyogYmFja2VuZCBydW5uaW5nIGEgc3RhdGVtZW50ICovCisJWEhCX1hN SU5fSURMRV9JTl9UUkFOU0FDVElPTiwJLyogYmFja2VuZCBpZGxlIGluIHRyYW5zYWN0aW9uICov CisJWEhCX0hPVF9TVEFOREJZX0ZFRURCQUNLLAkvKiB3YWxzZW5kZXIgd2l0aCBob3Rfc3RhbmRi eV9mZWVkYmFjayAqLworCVhIQl9SRVBMSUNBVElPTl9TTE9ULAkJLyogbG9naWNhbCByZXBsaWNh dGlvbiBzbG90ICovCit9IFhpZEhvcml6b25CbG9ja2VyVHlwZTsKKworLyoKKyAqIEluZm9ybWF0 aW9uIGFib3V0IGEgYmxvY2tlciB0aGF0IGlzIGhvbGRpbmcgYmFjayB0aGUgeGlkIGhvcml6b24u CisgKi8KK3R5cGVkZWYgc3RydWN0IFhpZEhvcml6b25CbG9ja2VyCit7CisJWGlkSG9yaXpvbkJs b2NrZXJUeXBlIHR5cGU7CisJVHJhbnNhY3Rpb25JZCB4aWQ7CQkJLyogdGhlIGJsb2NraW5nIHhp ZC94bWluICovCisJaW50CQkJcGlkOwkJCS8qIGJhY2tlbmQgcGlkICgwIGZvciBwcmVwYXJlZCB4 YWN0cyBhbmQKKwkJCQkJCQkJICogc2xvdHMpICovCisJLyogbGFyZ2UgZW5vdWdoIGZvciBwcmVw YXJlZC10eG4gR0lEIG9yIHJlcGxpY2F0aW9uIHNsb3QgbmFtZSAqLworCWNoYXIJCW5hbWVbTWF4 KEdJRFNJWkUsIE5BTUVEQVRBTEVOKV07Cit9IFhpZEhvcml6b25CbG9ja2VyOworCiAKIGV4dGVy biB2b2lkIFByb2NBcnJheUFkZChQR1BST0MgKnByb2MpOwogZXh0ZXJuIHZvaWQgUHJvY0FycmF5 UmVtb3ZlKFBHUFJPQyAqcHJvYywgVHJhbnNhY3Rpb25JZCBsYXRlc3RYaWQpOwpAQCAtOTgsNCAr MTM1LDcgQEAgZXh0ZXJuIHZvaWQgUHJvY0FycmF5U2V0UmVwbGljYXRpb25TbG90WG1pbihUcmFu c2FjdGlvbklkIHhtaW4sCiBleHRlcm4gdm9pZCBQcm9jQXJyYXlHZXRSZXBsaWNhdGlvblNsb3RY bWluKFRyYW5zYWN0aW9uSWQgKnhtaW4sCiAJCQkJCQkJCQkJCVRyYW5zYWN0aW9uSWQgKmNhdGFs b2dfeG1pbik7CiAKK2V4dGVybiBib29sIEdldFhpZEhvcml6b25CbG9ja2VyKFRyYW5zYWN0aW9u SWQgaG9yaXpvbiwKKwkJCQkJCQkJIFhpZEhvcml6b25CbG9ja2VyICpibG9ja2VyKTsKKwogI2Vu ZGlmCQkJCQkJCS8qIFBST0NBUlJBWV9IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfbWlzYy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29u LmJ1aWxkCmluZGV4IDk2OWU5MGIzOTZkLi4xNWVhZDM2N2ZiNSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X21pc2MvbWVzb24uYnVpbGQKQEAgLTIyLDYgKzIyLDcgQEAgdGVzdHMgKz0gewogICAgICAg J3QvMDExX2xvY2tfc3RhdHMucGwnLAogICAgICAgJ3QvMDEyX2RkbHV0aWxzLnBsJywKICAgICAg ICd0LzAxM190ZW1wX29ial9tdWx0aXNlc3Npb24ucGwnLAorICAgICAgJ3QvMDE0X2xvZ192YWN1 dW1fYmxvY2tlcnMucGwnLAogICAgIF0sCiAgICAgIyBUaGUgaW5qZWN0aW9uIHBvaW50cyBhcmUg Y2x1c3Rlci13aWRlLCBzbyBkaXNhYmxlIGluc3RhbGxjaGVjawogICAgICdydW5uaW5nY2hlY2sn OiBmYWxzZSwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDE0X2xv Z192YWN1dW1fYmxvY2tlcnMucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAxNF9s b2dfdmFjdXVtX2Jsb2NrZXJzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi4yZTI2ZjBmM2JlYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9taXNjL3QvMDE0X2xvZ192YWN1dW1fYmxvY2tlcnMucGwKQEAgLTAsMCArMSwzMTQgQEAKKyMg Q29weXJpZ2h0IChjKSAyMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor IworIyBWYWxpZGF0ZSB0aGF0IFZBQ1VVTSBsb2dzIGV4cGxhaW4gd2h5IGRlYWQgdHVwbGVzIGNv dWxkIG5vdCBiZSByZW1vdmVkLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FM OjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCisjIFNldCB1cCBhIGNsdXN0ZXIKK215 ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdtYWluJyk7Ciskbm9kZS0+ aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZS0+YXBwZW5kX2NvbmYo J3Bvc3RncmVzcWwuY29uZicsIHFbCittYXhfcHJlcGFyZWRfdHJhbnNhY3Rpb25zID0gNQorXSk7 Ciskbm9kZS0+c3RhcnQ7CisKKyMgQ3JlYXRlIHRoZSBob3Qgc3RhbmRieSB0ZXN0IHRhYmxlIGFu ZCBwcmVwYXJlIGJhY2t1cC9zdGFuZGJ5IGVhcmx5LCBiZWZvcmUKKyMgYW55IGJhY2tncm91bmQg cHNxbCBzZXNzaW9ucyBhcmUgc3RhcnRlZC4gIE9uIFdpbmRvd3MsIGJhY2tncm91bmQgcHNxbAor IyBzZXNzaW9ucyB0aGF0IGFyZSB0ZXJtaW5hdGVkIGR1cmluZyBlYXJsaWVyIHRlc3RzIGNhbiBs ZWF2ZSBmaWxlIGhhbmRsZXMKKyMgbGluZ2VyaW5nLCB3aGljaCBjYXVzZXMgcGdfY3RsIHN0YXJ0 IGZvciB0aGUgc3RhbmRieSB0byBmYWlsLiAgQnkgdGFraW5nCisjIHRoZSBiYWNrdXAgYW5kIGlu aXRpYWxpemluZyB0aGUgc3RhbmRieSBoZXJlLCB0aGUgc3RhbmRieSBzdGFydCBsYXRlciBvbmx5 CisjIG5lZWRzIHRvIGxhdW5jaCBwZ19jdGwgYWZ0ZXIgYWxsIHRob3NlIHNlc3Npb25zIGhhdmUg YmVlbiBmdWxseSBjbGVhbmVkIHVwLgorJG5vZGUtPmJhY2t1cCgnb2xkZXN0eG1pbl9ob3RzdGFu ZGJ5X2JrcCcpOworbXkgJHN0YW5kYnkgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco J29sZGVzdHhtaW5fc3RhbmRieScpOworJHN0YW5kYnktPmluaXRfZnJvbV9iYWNrdXAoJG5vZGUs ICdvbGRlc3R4bWluX2hvdHN0YW5kYnlfYmtwJywKKwloYXNfc3RyZWFtaW5nID0+IDEpOworJHN0 YW5kYnktPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCBxWworaG90X3N0YW5kYnlfZmVl ZGJhY2sgPSBvbgord2FsX3JlY2VpdmVyX3N0YXR1c19pbnRlcnZhbCA9IDEwMG1zCitdKTsKKwor CisjCisjIEFjdGl2ZSBzdGF0ZW1lbnQKKyMKK215ICRhY3RpdmVfdGFibGUgPSAnYmxvY2tlcl9h Y3RpdmUnOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsKK0NSRUFURSBUQUJMRSAk YWN0aXZlX3RhYmxlKGlkIGludCk7CitJTlNFUlQgSU5UTyAkYWN0aXZlX3RhYmxlIFZBTFVFUyAo MCk7CitdKTsKKworbXkgJGJsb2NrZXIgPSAkbm9kZS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3Jl cycpOworbXkgJGJsb2NrZXJfcGlkID0gJGJsb2NrZXItPnF1ZXJ5X3NhZmUoJ1NFTEVDVCBwZ19i YWNrZW5kX3BpZCgpOycpOworY2hvbXAoJGJsb2NrZXJfcGlkKTsKKworIyBTdGFydCBhIGxvbmct cnVubmluZyBxdWVyeSBpbiB0aGUgYmFja2dyb3VuZCB0aGF0IGFjY2Vzc2VzIGEgdGFibGUKKyMg VGhpcyBlbnN1cmVzIHhtaW4gaXMgc2V0IChwZ19zbGVlcCBhbG9uZSBkb2Vzbid0IHJlcXVpcmUg YSBzbmFwc2hvdCkKKyRibG9ja2VyLT5xdWVyeV91bnRpbChxci8vLCBxcVsKK0JFR0lOOworU0VM RUNUICogRlJPTSAkYWN0aXZlX3RhYmxlLCBwZ19zbGVlcCg2MCk7CitdKTsKKworIyBXYWl0IGZv ciB0aGUgYmxvY2tlciB0byBoYXZlIHhtaW4gc2V0Ciskbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgn cG9zdGdyZXMnLCBxcVsKK1NFTEVDVCBiYWNrZW5kX3htaW4gSVMgTk9UIE5VTEwKK0ZST00gcGdf c3RhdF9hY3Rpdml0eQorV0hFUkUgcGlkID0gJGJsb2NrZXJfcGlkOworXSk7CisKKyRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NICRhY3RpdmVfdGFibGU7Iik7CisKK215 ICRzdGRlcnIgPSAnJzsKKyRub2RlLT5wc3FsKCdwb3N0Z3JlcycsICJWQUNVVU0gKFZFUkJPU0Up ICRhY3RpdmVfdGFibGU7Iiwgc3RkZXJyID0+IFwkc3RkZXJyKTsKK2xpa2UoCisJJHN0ZGVyciwK Kwlxci9vbGRlc3QgeG1pbiBibG9ja2VyOiBhY3RpdmUgdHJhbnNhY3Rpb24gaG9sZGluZyBzbmFw c2hvdCBcKHBpZCA9ICRibG9ja2VyX3BpZFwpLywKKwknVkFDVVVNIFZFUkJPU0UgcmVwb3J0ZWQg YWN0aXZlIHRyYW5zYWN0aW9uIGhvbGRpbmcgc25hcHNob3QgYXMgb2xkZXN0IHhtaW4gYmxvY2tl cicpOworCisjIENsZWFudXAKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXFbCitTRUxF Q1QgcGdfdGVybWluYXRlX2JhY2tlbmQoJGJsb2NrZXJfcGlkKTsKK0RST1AgVEFCTEUgJGFjdGl2 ZV90YWJsZTsKK10pOworCisKKyMKKyMgSWRsZSBpbiB0cmFuc2FjdGlvbgorIworbXkgJGlkbGVf dGFibGUgPSAnYmxvY2tlcl9pZGxlJzsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXFb CitDUkVBVEUgVEFCTEUgJGlkbGVfdGFibGUoaWQgaW50KTsKK0lOU0VSVCBJTlRPICRpZGxlX3Rh YmxlIFZBTFVFUyAoMCk7CitdKTsKKworbXkgJGlkbGVfYmxvY2tlciA9ICRub2RlLT5iYWNrZ3Jv dW5kX3BzcWwoJ3Bvc3RncmVzJyk7CitteSAkaWRsZV9ibG9ja2VyX3BpZCA9ICRpZGxlX2Jsb2Nr ZXItPnF1ZXJ5X3NhZmUoJ1NFTEVDVCBwZ19iYWNrZW5kX3BpZCgpOycpOworY2hvbXAoJGlkbGVf YmxvY2tlcl9waWQpOworCisjIFNldCBpc29sYXRpb24gbGV2ZWwgdG8gUkVQRUFUQUJMRSBSRUFE IHRvIGVuc3VyZSB4bWluIGlzIHNldAorJGlkbGVfYmxvY2tlci0+cXVlcnlfc2FmZShxcVsKK0JF R0lOOworU0VUIFRSQU5TQUNUSU9OIElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7CitT RUxFQ1QgKiBGUk9NICRpZGxlX3RhYmxlOworXSk7CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRFTEVURSBGUk9NICRpZGxlX3RhYmxlOyIpOworCiskc3RkZXJyID0gJyc7Ciskbm9k ZS0+cHNxbCgncG9zdGdyZXMnLCAiVkFDVVVNIChWRVJCT1NFKSAkaWRsZV90YWJsZTsiLCBzdGRl cnIgPT4gXCRzdGRlcnIpOworbGlrZSgKKwkkc3RkZXJyLAorCXFyL29sZGVzdCB4bWluIGJsb2Nr ZXI6IGlkbGUgaW4gdHJhbnNhY3Rpb24gaG9sZGluZyBzbmFwc2hvdCBcKHBpZCA9ICRpZGxlX2Js b2NrZXJfcGlkXCkvLAorCSdWQUNVVU0gVkVSQk9TRSByZXBvcnRlZCBpZGxlIGluIHRyYW5zYWN0 aW9uIGhvbGRpbmcgc25hcHNob3QgYXMgb2xkZXN0IHhtaW4gYmxvY2tlcicpOworCisjIENsZWFu dXAKKyRpZGxlX2Jsb2NrZXItPnF1aXQ7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFRBQkxFICRpZGxlX3RhYmxlOyIpOworCisKKyMKKyMgU2VyaWFsaXphYmxlIHRyYW5zYWN0 aW9uIChpZGxlIGluIHRyYW5zYWN0aW9uKQorIworbXkgJHNlcmlhbGl6YWJsZV90YWJsZSA9ICdi bG9ja2VyX3NlcmlhbGl6YWJsZSc7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWwor Q1JFQVRFIFRBQkxFICRzZXJpYWxpemFibGVfdGFibGUoaWQgaW50KTsKK0lOU0VSVCBJTlRPICRz ZXJpYWxpemFibGVfdGFibGUgVkFMVUVTICgwKTsKK10pOworCitteSAkc2VyX2Jsb2NrZXIgPSAk bm9kZS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycpOworbXkgJHNlcl9ibG9ja2VyX3BpZCA9 ICRzZXJfYmxvY2tlci0+cXVlcnlfc2FmZSgnU0VMRUNUIHBnX2JhY2tlbmRfcGlkKCk7Jyk7Citj aG9tcCgkc2VyX2Jsb2NrZXJfcGlkKTsKKworJHNlcl9ibG9ja2VyLT5xdWVyeV9zYWZlKHFxWwor QkVHSU47CitTRVQgVFJBTlNBQ1RJT04gSVNPTEFUSU9OIExFVkVMIFNFUklBTElaQUJMRTsKK1NF TEVDVCAqIEZST00gJHNlcmlhbGl6YWJsZV90YWJsZTsKK10pOworCiskbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSAkc2VyaWFsaXphYmxlX3RhYmxlOyIpOworCiskc3Rk ZXJyID0gJyc7Ciskbm9kZS0+cHNxbCgncG9zdGdyZXMnLCAiVkFDVVVNIChWRVJCT1NFKSAkc2Vy aWFsaXphYmxlX3RhYmxlOyIsIHN0ZGVyciA9PiBcJHN0ZGVycik7CitsaWtlKAorCSRzdGRlcnIs CisJcXIvb2xkZXN0IHhtaW4gYmxvY2tlcjogaWRsZSBpbiB0cmFuc2FjdGlvbiBob2xkaW5nIHNu YXBzaG90IFwocGlkID0gJHNlcl9ibG9ja2VyX3BpZFwpLywKKwknVkFDVVVNIFZFUkJPU0UgcmVw b3J0ZWQgc2VyaWFsaXphYmxlIHRyYW5zYWN0aW9uIGFzIG9sZGVzdCB4bWluIGJsb2NrZXInKTsK KworIyBDbGVhbnVwCiskc2VyX2Jsb2NrZXItPnF1aXQ7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJEUk9QIFRBQkxFICRzZXJpYWxpemFibGVfdGFibGU7Iik7CisKKworIworIyBQcmVm ZXIgeGlkIG93bmVyIG92ZXIgeG1pbiBtYXRjaAorIworbXkgJHByZWZlcl90YWJsZSA9ICdibG9j a2VyX3ByZWZlcl94aWRfb3duZXInOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsK K0NSRUFURSBUQUJMRSAkcHJlZmVyX3RhYmxlKGlkIGludCk7CitJTlNFUlQgSU5UTyAkcHJlZmVy X3RhYmxlIFZBTFVFUyAoMCk7CitdKTsKKworbXkgJHhpZF9vd25lciA9ICRub2RlLT5iYWNrZ3Jv dW5kX3BzcWwoJ3Bvc3RncmVzJyk7CitteSAkeGlkX293bmVyX3BpZCA9ICR4aWRfb3duZXItPnF1 ZXJ5X3NhZmUoJ1NFTEVDVCBwZ19iYWNrZW5kX3BpZCgpOycpOworY2hvbXAoJHhpZF9vd25lcl9w aWQpOworCiskeGlkX293bmVyLT5xdWVyeV9zYWZlKHFxWworQkVHSU47CitTRUxFQ1QgcGdfY3Vy cmVudF94YWN0X2lkKCk7CitdKTsKKworJG5vZGUtPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVz JywgcXFbCitTRUxFQ1QgYmFja2VuZF94aWQgSVMgTk9UIE5VTEwKK0ZST00gcGdfc3RhdF9hY3Rp dml0eQorV0hFUkUgcGlkID0gJHhpZF9vd25lcl9waWQ7CitdKTsKKworbXkgJG93bmVyX3hpZCA9 ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXFbCitTRUxFQ1QgYmFja2VuZF94aWQKK0ZS T00gcGdfc3RhdF9hY3Rpdml0eQorV0hFUkUgcGlkID0gJHhpZF9vd25lcl9waWQ7CitdKTsKK2No b21wKCRvd25lcl94aWQpOworCitteSAkeG1pbl9ob2xkZXIgPSAkbm9kZS0+YmFja2dyb3VuZF9w c3FsKCdwb3N0Z3JlcycpOworbXkgJHhtaW5faG9sZGVyX3BpZCA9ICR4bWluX2hvbGRlci0+cXVl cnlfc2FmZSgnU0VMRUNUIHBnX2JhY2tlbmRfcGlkKCk7Jyk7CitjaG9tcCgkeG1pbl9ob2xkZXJf cGlkKTsKKworIyBTdGFydCBhIGxvbmctcnVubmluZyBxdWVyeSB0aGF0IHdpbGwgdGFrZSBhIHNu YXBzaG90IGFmdGVyIHhpZF9vd25lciBiZWdpbnMKKyR4bWluX2hvbGRlci0+cXVlcnlfdW50aWwo cXIvLywgcXFbCitCRUdJTjsKK1NFTEVDVCAqIEZST00gJHByZWZlcl90YWJsZSwgcGdfc2xlZXAo NjApOworXSk7CisKKyMgRW5zdXJlIHhtaW5faG9sZGVyJ3MgeG1pbiBpcyBoZWxkIGJhY2sgYnkg eGlkX293bmVyCiskbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLCBxcVsKK1NFTEVD VCBiYWNrZW5kX3htaW4gPSAnJG93bmVyX3hpZCc6OnhpZAorRlJPTSBwZ19zdGF0X2FjdGl2aXR5 CitXSEVSRSBwaWQgPSAkeG1pbl9ob2xkZXJfcGlkOworXSk7CisKKyRub2RlLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRFTEVURSBGUk9NICRwcmVmZXJfdGFibGU7Iik7CisKKyRzdGRlcnIgPSAn JzsKKyRub2RlLT5wc3FsKCdwb3N0Z3JlcycsICJWQUNVVU0gKFZFUkJPU0UpICRwcmVmZXJfdGFi bGU7Iiwgc3RkZXJyID0+IFwkc3RkZXJyKTsKK2xpa2UoCisJJHN0ZGVyciwKKwlxci9vbGRlc3Qg eG1pbiBibG9ja2VyOiBpZGxlIGluIHRyYW5zYWN0aW9uIFwocGlkID0gJHhpZF9vd25lcl9waWRc KS8sCisJJ1ZBQ1VVTSBWRVJCT1NFIHByZWZlcnJlZCB4aWQgb3duZXIgb3ZlciB4bWluIG1hdGNo Jyk7CisKKyMgQ2xlYW51cAorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsKK1NFTEVD VCBwZ190ZXJtaW5hdGVfYmFja2VuZCgkeG1pbl9ob2xkZXJfcGlkKTsKK1NFTEVDVCBwZ190ZXJt aW5hdGVfYmFja2VuZCgkeGlkX293bmVyX3BpZCk7CitEUk9QIFRBQkxFICRwcmVmZXJfdGFibGU7 CitdKTsKKworCisjCisjIFByZXBhcmVkIHRyYW5zYWN0aW9uCisjCitteSAkcHJlcGFyZWRfdGFi bGUgPSAnYmxvY2tlcl9wcmVwYXJlZCc7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFx WworQ1JFQVRFIFRBQkxFICRwcmVwYXJlZF90YWJsZShpZCBpbnQpOworSU5TRVJUIElOVE8gJHBy ZXBhcmVkX3RhYmxlIFZBTFVFUyAoMCk7CitCRUdJTjsKK1BSRVBBUkUgVFJBTlNBQ1RJT04gJ2d4 X3ZhY3V1bV94bWluJzsKK10pOworCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxF VEUgRlJPTSAkcHJlcGFyZWRfdGFibGU7Iik7CisKKyRzdGRlcnIgPSAnJzsKKyRub2RlLT5wc3Fs KCdwb3N0Z3JlcycsICJWQUNVVU0gKFZFUkJPU0UpICRwcmVwYXJlZF90YWJsZTsiLCBzdGRlcnIg PT4gXCRzdGRlcnIpOworbGlrZSgKKwkkc3RkZXJyLAorCXFyL29sZGVzdCB4bWluIGJsb2NrZXI6 IHByZXBhcmVkIHRyYW5zYWN0aW9uIFwoZ2lkID0gZ3hfdmFjdXVtX3htaW5cKS8sCisJJ1ZBQ1VV TSBWRVJCT1NFIHJlcG9ydGVkIHByZXBhcmVkIHRyYW5zYWN0aW9uIGFzIG9sZGVzdCB4bWluIGJs b2NrZXInKTsKKworIyBDbGVhbnVwCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWwor Uk9MTEJBQ0sgUFJFUEFSRUQgJ2d4X3ZhY3V1bV94bWluJzsKK0RST1AgVEFCTEUgJHByZXBhcmVk X3RhYmxlOworXSk7CisKKworIworIyBMb2dpY2FsIHJlcGxpY2F0aW9uIHNsb3QKKyMKK215ICRz bG90X3RhYmxlID0gJ2Jsb2NrZXJfc2xvdCc7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHFxWworQ1JFQVRFIFRBQkxFICRzbG90X3RhYmxlKGlkIGludCk7CitTRUxFQ1QgcGdfY3JlYXRl X2xvZ2ljYWxfcmVwbGljYXRpb25fc2xvdCgnbG9naWNhbF9zbG90JywgJ3Rlc3RfZGVjb2Rpbmcn KTsKK0RST1AgVEFCTEUgJHNsb3RfdGFibGU7CitdKTsKKworJHN0ZGVyciA9ICcnOworJG5vZGUt PnBzcWwoJ3Bvc3RncmVzJywgJ1ZBQ1VVTSAoVkVSQk9TRSkgcGdfY2xhc3M7Jywgc3RkZXJyID0+ IFwkc3RkZXJyKTsKK2xpa2UoCisJJHN0ZGVyciwKKwlxci9vbGRlc3QgeG1pbiBibG9ja2VyOiBs b2dpY2FsIHJlcGxpY2F0aW9uIHNsb3QgXChzbG90IG5hbWUgPSBsb2dpY2FsX3Nsb3RcKS8sCisJ J1ZBQ1VVTSBWRVJCT1NFIHJlcG9ydGVkIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdCBhcyBvbGRl c3QgeG1pbiBzb3VyY2UnKTsKKworIyBDbGVhbnVwCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIHFxWworU0VMRUNUIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCgnbG9naWNhbF9zbG90Jyk7 CitdKTsKKworCisjCisjIEhvdCBzdGFuZGJ5IGZlZWRiYWNrCisjCisjIFRoZSBzdGFuZGJ5IHdh cyBhbHJlYWR5IGluaXRpYWxpemVkIGZyb20gYSBiYWNrdXAgdGFrZW4gYWJvdmUuICBTdGFydCBp dAorIyBub3csIGFmdGVyIGFsbCBiYWNrZ3JvdW5kIHBzcWwgc2Vzc2lvbnMgZnJvbSBlYXJsaWVy IHRlc3RzIGhhdmUgYmVlbiBmdWxseQorIyBjbGVhbmVkIHVwLgorbXkgJGhzX3RhYmxlID0gJ2Js b2NrZXJfaG90c3RhbmRieSc7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWworQ1JF QVRFIFRBQkxFICRoc190YWJsZShpZCBpbnQpOworSU5TRVJUIElOVE8gJGhzX3RhYmxlIFZBTFVF UyAoMCk7CitdKTsKKworJHN0YW5kYnktPnN0YXJ0OworJG5vZGUtPndhaXRfZm9yX2NhdGNodXAo JHN0YW5kYnksICdyZXBsYXknLCAkbm9kZS0+bHNuKCdmbHVzaCcpKTsKKworbXkgJHN0YW5kYnlf cmVhZGVyID0gJHN0YW5kYnktPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnKTsKK215ICRzdGFu ZGJ5X3JlYWRlcl9waWQgPSAkc3RhbmRieV9yZWFkZXItPnF1ZXJ5X3NhZmUoJ1NFTEVDVCBwZ19i YWNrZW5kX3BpZCgpOycpOworY2hvbXAoJHN0YW5kYnlfcmVhZGVyX3BpZCk7CisKKyRzdGFuZGJ5 X3JlYWRlci0+cXVlcnlfdW50aWwocXIvLywgcXFbCitCRUdJTjsKK1NFTEVDVCAqIEZST00gJGhz X3RhYmxlLCBwZ19zbGVlcCg2MCk7CitdKTsKKworIyBXYWl0IGZvciBob3Qgc3RhbmRieSBmZWVk YmFjayB0byBiZSBzZW50Ciskbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLCBxWwor U0VMRUNUIGJhY2tlbmRfeG1pbiBJUyBOT1QgTlVMTAorRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9u CitXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJ29sZGVzdHhtaW5fc3RhbmRieSc7CitdKTsKKwor bXkgJGhzX2Jsb2NrZXJfcGlkID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxWworU0VM RUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24KK1dIRVJFIGFwcGxpY2F0aW9uX25hbWUg PSAnb2xkZXN0eG1pbl9zdGFuZGJ5JzsKK10pOworY2hvbXAoJGhzX2Jsb2NrZXJfcGlkKTsKKwor JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gJGhzX3RhYmxlOyIpOwor Ciskc3RkZXJyID0gJyc7Ciskbm9kZS0+cHNxbCgncG9zdGdyZXMnLCAiVkFDVVVNIChWRVJCT1NF KSAkaHNfdGFibGU7Iiwgc3RkZXJyID0+IFwkc3RkZXJyKTsKK2xpa2UoCisJJHN0ZGVyciwKKwlx ci9vbGRlc3QgeG1pbiBibG9ja2VyOiBob3Qgc3RhbmRieSBmZWVkYmFjayBcKHN0YW5kYnkgbmFt ZSA9IG9sZGVzdHhtaW5fc3RhbmRieSwgcGlkID0gJGhzX2Jsb2NrZXJfcGlkXCkvLAorCSdWQUNV VU0gVkVSQk9TRSByZXBvcnRlZCBob3Qgc3RhbmRieSBmZWVkYmFjayBhcyBvbGRlc3QgeG1pbiBi bG9ja2VyJyk7CisKKyMgQ2xlYW51cAorJHN0YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi U0VMRUNUIHBnX3Rlcm1pbmF0ZV9iYWNrZW5kKCRzdGFuZGJ5X3JlYWRlcl9waWQpOyIpOworJG5v ZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSAkaHNfdGFibGU7Iik7CisKKwor JHN0YW5kYnktPnN0b3A7Ciskbm9kZS0+c3RvcDsKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCA4Y2Y0MGM4NzA0My4uODNiODgwYjQyNmUgMTAwNjQ0Ci0tLSBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CkBAIC0zNTQ0LDYgKzM1NDQsOCBAQCBYYWN0TG9ja1RhYmxlV2FpdElu Zm8KIFhpZEJvdW5kc1Zpb2xhdGlvbgogWGlkQ2FjaGVTdGF0dXMKIFhpZENvbW1pdFN0YXR1cwor WGlkSG9yaXpvbkJsb2NrZXIKK1hpZEhvcml6b25CbG9ja2VyVHlwZQogWGlkU3RhdHVzCiBYbWxF eHByCiBYbWxFeHByT3AKLS0gCjIuNDcuMwoK --000000000000477ecd065275dfd7--