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.98.2) (envelope-from ) id 1xBTKn-00000003DXn-48gg for pgsql-hackers@arkaria.postgresql.org; Tue, 29 Sep 2026 08:37:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.98.2) (envelope-from ) id 1xBTKn-0000000DrJm-02xY for pgsql-hackers@arkaria.postgresql.org; Tue, 29 Sep 2026 08:37:09 +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.98.2) (envelope-from ) id 1xBTKm-0000000DrJe-2jOU for pgsql-hackers@lists.postgresql.org; Tue, 29 Sep 2026 08:37:08 +0000 Received: from email.dnscdc.tech ([194.226.250.15]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1xBTKj-00000001taj-2Gm7 for pgsql-hackers@lists.postgresql.org; Tue, 29 Sep 2026 08:37:08 +0000 Received: with id 25744280F00; Tue, 29 Sep 2026 15:37:03 +0700 (+07) Received: with id CCF00280031; Tue, 29 Sep 2026 15:37:02 +0700 (+07) From: Grigorev Jurij To: Rahul Yadav CC: "pgsql-hackers@lists.postgresql.org" Subject: Re: BUG #19599: RestoreBlockImage: the decode cross-checks never bound hole_offset + hole_length against BLCKSZ Thread-Topic: BUG #19599: RestoreBlockImage: the decode cross-checks never bound hole_offset + hole_length against BLCKSZ Thread-Index: AQHdPEAamNcHbRVPaUWRhlpYNzs5kLbgwaWAgASXPOQ= Date: Tue, 29 Sep 2026 08:37:02 +0000 Message-ID: References: , In-Reply-To: Accept-Language: ru-RU, en-US Content-Language: ru-RU X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Content-Type: multipart/mixed; boundary="_003_cd00a0536c674fac9e5dd9f4e27ae868ftdataru_" MIME-Version: 1.0 X-KLMS-Rule-ID: 1 X-KLMS-Message-Action: clean X-KLMS-AntiSpam-Lua-Profiles: 206306 [Sep 29 2026] X-KLMS-AntiSpam-Version: 6.1.1.27 X-KLMS-AntiSpam-Envelope-From: ju.grigorev@ftdata.ru X-KLMS-AntiSpam-Rate: 0 X-KLMS-AntiSpam-Status: not_detected X-KLMS-AntiSpam-Method: none X-KLMS-AntiSpam-Auth: dkim=none X-MS-Exchange-Organization-SCL: -1 X-KLMS-AntiSpam-Interceptor-Info: scan successful X-KLMS-AntiPhishing: Clean, bases: 2026/09/29 07:58:00 X-KLMS-AntiVirus: Kaspersky Security for Linux Mail Server, version 8.0.3.30, bases: 2026/09/28 23:48:00 #28634467 X-KLMS-AntiVirus-Status: Clean, skipped List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_003_cd00a0536c674fac9e5dd9f4e27ae868ftdataru_ Content-Type: text/plain; charset="koi8-r" Content-Transfer-Encoding: quoted-printable Hi Rahul, Thank you very much for the thorough review and testing -- the crash-recove= ry matrix (pglz/lz4/zstd/off + consistency checking) and especially the cra= fted-record repro with pg_waldump --save-fullpage crashing without the patc= h are super convincing. And thanks for confirming the back-patch safety arg= ument. v2 attached, addressing all your points: Commit message now says uncompressed images are affected too. You are right= -- there hole_length is derived as BLCKSZ - bimg_len and hole_offset was u= nchecked against bimg_len; the new bound covers it (it amounts to hole_offs= et <=3D bimg_len there). Rebased onto current master (%d / %X/%08X). Sorry for the stale context in = v1 -- it was made against an older tree. v2 applies with git am. 3-4. Dropped the runtime re-check in RestoreBlockImage() in favor of Assert= ()s, as you suggested. Since DecodeXLogRecord() is the only filler of Decod= edBkpBlock, it cannot fail, and this also resolves the wrong format and the= duplicate message text. About back-patching: agreed, thanks for spelling out the XLogRecordAssemble= () condition -- no valid WAL can trip the new check. About the ReadRecPtr vs decoded-record LSN issue: good catch, thank you for= noticing while testing. And yes, please send that as a separate patch. About the frontend test: attached as 0002, since you said you'd like to see= it. It is a small src/test/modules/test_xlogreader harness that builds hol= e-image records in memory (valid CRC, compressed + uncompressed) and feeds = them to DecodeXLogRecord(), so it checks rejection happens at decode time, = before RestoreBlockImage() can touch the page: - valid compressed hole, hole ending exactly at BLCKSZ, - the BUG #19599 shape (hole_offset + hole_length > BLCKSZ), one byte past = the page, hole_offset past the page, - valid uncompressed hole and uncompressed hole_offset past the image. With v2 all valid cases are accepted and all malformed ones are rejected wi= th the existing BKPIMAGE_HAS_HOLE set message. I kept it as a separate patc= h to keep v2 small -- happy to squash if you prefer. And I'd still love to = see your crafting script, it sounds more end-to-end than mine. Thanks again, Yuriy= --_003_cd00a0536c674fac9e5dd9f4e27ae868ftdataru_ Content-Type: application/octet-stream; name="0001-Reject-WAL-block-images-whose-hole-does-not-fit-v2.patch" Content-Description: 0001-Reject-WAL-block-images-whose-hole-does-not-fit-v2.patch Content-Disposition: attachment; filename="0001-Reject-WAL-block-images-whose-hole-does-not-fit-v2.patch"; size=3673; creation-date="Tue, 29 Sep 2026 08:36:38 GMT"; modification-date="Tue, 29 Sep 2026 08:36:38 GMT" Content-Transfer-Encoding: base64 RnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBZdXJpeSBHcmlnb3J5ZXYgPGp1LmdyaWdvcmV2QGZ0ZGF0YS5y dT4KRGF0ZTogVHVlLCAyOSBTZXAgMjAyNiAwMDowMDowMCArMDcwMApTdWJqZWN0OiBbUEFUQ0gg djIgMS8yXSBSZWplY3QgV0FMIGJsb2NrIGltYWdlcyB3aG9zZSBob2xlIGRvZXMgbm90IGZpdAoK RGVjb2RlWExvZ1JlY29yZCgpIGNyb3NzLWNoZWNrZWQgYSBibG9jayBpbWFnZSB3aXRoIEJLUElN QUdFX0hBU19IT0xFCm9ubHkgZm9yIG5vbi16ZXJvIGhvbGVfb2Zmc2V0L2hvbGVfbGVuZ3RoIGFu ZCBiaW1nX2xlbiA8IEJMQ0tTWiwgYnV0Cm5ldmVyIGNoZWNrZWQgdGhhdCB0aGUgaG9sZSBpdHNl bGYgZml0cyBpbiB0aGUgcGFnZS4gIEJvdGggZmllbGRzIGFyZQp1aW50MTZzIHRha2VuIGZyb20g dGhlIHJlY29yZCwgc28gZS5nLiBob2xlX29mZnNldCA9IDgwMDAsCmhvbGVfbGVuZ3RoID0gODAw MCAoc3VtIDE2MDAwID4gQkxDS1NaKSB3aXRoIGEgdGlueSBiaW1nX2xlbiBwYXNzZWQKdmFsaWRh dGlvbi4gIFJlc3RvcmVCbG9ja0ltYWdlKCkgdGhlbiB1c2VkIHRoZW0gYXMgbWVtY3B5L01lbVNl dApsZW5ndGhzLCB3aXRoIHRoZSBsYXN0IGxlbmd0aCAoQkxDS1NaIC0gKGhvbGVfb2Zmc2V0ICsg aG9sZV9sZW5ndGgpKQp1bmRlcmZsb3dpbmcgdG8gYSBodWdlIHNpemVfdCwgYW5kIHRoZSBkZWNv bXByZXNzb3JzIHdlcmUgdG9sZCB0aGUKb3V0cHV0IGJ1ZmZlciB3YXMgQkxDS1NaIC0gaG9sZV9s ZW5ndGggYnl0ZXMuCgpUaGlzIGNvdmVycyBib3RoIHNoYXBlczogY29tcHJlc3NlZCBpbWFnZXMs IHdoZXJlIGhvbGVfbGVuZ3RoIGlzCnN0b3JlZCBpbiB0aGUgV0FMLCBhbmQgdW5jb21wcmVzc2Vk IGltYWdlcywgd2hlcmUgaG9sZV9sZW5ndGggaXMKZGVyaXZlZCBhcyBCTENLU1ogLSBiaW1nX2xl biBhbmQgbm90aGluZyBjaGVja2VkIGhvbGVfb2Zmc2V0IGFnYWluc3QKYmltZ19sZW4uICBGb3Ig dGhlIHVuY29tcHJlc3NlZCBjYXNlIHRoZSBuZXcgYm91bmQgYW1vdW50cyB0bwpyZXF1aXJpbmcg aG9sZV9vZmZzZXQgPD0gYmltZ19sZW4uCgpBZGQgdGhlIG1pc3NpbmcgYm91bmQgdG8gdGhlIGV4 aXN0aW5nIEhBU19IT0xFIGNoZWNrOgoKICAgIGhvbGVfb2Zmc2V0ID4gQkxDS1NaIHx8CiAgICBo b2xlX2xlbmd0aCA+IEJMQ0tTWiAtIGhvbGVfb2Zmc2V0Cgp1c2luZyBzdWJ0cmFjdGlvbiBzbyB0 aGUgdHdvIHVudHJ1c3RlZCB1aW50MTZzIGFyZSBuZXZlciBhZGRlZAp0b2dldGhlci4gIEEgYmFk IGhvbGUga2VlcHMgdGhlIGV4aXN0aW5nIEhBU19IT0xFIGVycm9yIG1lc3NhZ2UuCgpEZWNvZGVY TG9nUmVjb3JkKCkgaXMgdGhlIG9ubHkgcGxhY2UgdGhhdCBmaWxscyBpbiB0aGUgaW1hZ2UgZmll bGRzCm9mIERlY29kZWRCa3BCbG9jaywgc28gcmUtY2hlY2sgdGhlIHNhbWUgY29uZGl0aW9uIHdp dGggQXNzZXJ0cyBhdAp0aGUgc3RhcnQgb2YgUmVzdG9yZUJsb2NrSW1hZ2UoKSwgYmVmb3JlIGRl Y29tcHJlc3Npb24gb3IgbWVtY3B5LgoKWExvZ1JlY29yZEFzc2VtYmxlKCkgb25seSBjcmVhdGVz IGEgaG9sZSB3aGVuIHBkX2xvd2VyID49ClNpemVPZlBhZ2VIZWFkZXJEYXRhLCBwZF91cHBlciA+ IHBkX2xvd2VyIGFuZCBwZF91cHBlciA8PSBCTENLU1osIHNvCm5vIFdBTCB3cml0dGVuIGJ5IFBv c3RncmVTUUwgY2FuIGZhaWwgdGhlIG5ldyBjaGVjay4KClJlcG9ydGVkLWJ5OiBNaWNoYWVsIE1h bGlzIDxtYWxpc0BwZ3J1c3QuY29tPgpSZXZpZXdlZC1ieTogUmFodWwgWWFkYXYgPHJhaHVsQHJo eWFkYXYuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2NjMGE1ODg2ZDJhNzRm OTlhZTU4YzE2NDdlYTVlZDhiQGxvY2FsaG9zdC5sb2NhbGRvbWFpbgotLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2dyZWFkZXIuYyB8IDE1ICsrKysrKysrKysrKysrLQogMSBmaWxl IGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVhZGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9ncmVhZGVyLmMKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZ3JlYWRlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWFkZXIu YwpAQCAtMTg3NCwxMyArMTg3NCwxOCBAQAogCQkJCWRhdGF0b3RhbCArPSBibGstPmJpbWdfbGVu OwogCiAJCQkJLyoKLQkJCQkgKiBjcm9zcy1jaGVjayB0aGF0IGhvbGVfb2Zmc2V0ID4gMCwgaG9s ZV9sZW5ndGggPiAwIGFuZAotCQkJCSAqIGJpbWdfbGVuIDwgQkxDS1NaIGlmIHRoZSBIQVNfSE9M RSBmbGFnIGlzIHNldC4KKwkJCQkgKiBjcm9zcy1jaGVjayB0aGF0IGhvbGVfb2Zmc2V0ID4gMCwg aG9sZV9sZW5ndGggPiAwLAorCQkJCSAqIGJpbWdfbGVuIDwgQkxDS1NaLCBhbmQgdGhlIGhvbGUg Zml0cyBpbiB0aGUgcGFnZSBpZiB0aGUKKwkJCQkgKiBIQVNfSE9MRSBmbGFnIGlzIHNldC4gIENv bXBhcmUgaG9sZV9sZW5ndGggd2l0aAorCQkJCSAqIEJMQ0tTWiAtIGhvbGVfb2Zmc2V0IHNvIHRo ZSB0d28gdW50cnVzdGVkIGZpZWxkcyBhcmUgbmV2ZXIKKwkJCQkgKiBhZGRlZCB0b2dldGhlci4K IAkJCQkgKi8KIAkJCQlpZiAoKGJsay0+YmltZ19pbmZvICYgQktQSU1BR0VfSEFTX0hPTEUpICYm CiAJCQkJCShibGstPmhvbGVfb2Zmc2V0ID09IDAgfHwKIAkJCQkJIGJsay0+aG9sZV9sZW5ndGgg PT0gMCB8fAotCQkJCQkgYmxrLT5iaW1nX2xlbiA9PSBCTENLU1opKQorCQkJCQkgYmxrLT5iaW1n X2xlbiA9PSBCTENLU1ogfHwKKwkJCQkJIGJsay0+aG9sZV9vZmZzZXQgPiBCTENLU1ogfHwKKwkJ CQkJIGJsay0+aG9sZV9sZW5ndGggPiBCTENLU1ogLSBibGstPmhvbGVfb2Zmc2V0KSkKIAkJCQl7 CiAJCQkJCXJlcG9ydF9pbnZhbGlkX3JlY29yZChzdGF0ZSwKIAkJCQkJCQkJCQkgICJCS1BJTUFH RV9IQVNfSE9MRSBzZXQsIGJ1dCBob2xlIG9mZnNldCAlZCBsZW5ndGggJWQgYmxvY2sgaW1hZ2Ug bGVuZ3RoICVkIGF0ICVYLyUwOFgiLApAQCAtMjE0OSw2ICsyMTU0LDE1IEBACiAJYmtwYiA9ICZy ZWNvcmQtPnJlY29yZC0+YmxvY2tzW2Jsb2NrX2lkXTsKIAlwdHIgPSBia3BiLT5ia3BfaW1hZ2U7 CiAKKwkvKgorCSAqIFRoZSBob2xlIG11c3QgZml0IGluIHRoZSBwYWdlLiAgRGVjb2RlWExvZ1Jl Y29yZCgpIGFscmVhZHkgZW5mb3JjZXMKKwkgKiB0aGlzIGZvciBhbGwgcmVjb3JkcyB0aGF0IHJl YWNoIGhlcmUsIHNvIHRoaXMgY2Fubm90IGZhaWwuICBBc3NlcnQKKwkgKiBpdCBiZWZvcmUgdXNp bmcgdGhlIHZhbHVlcyBhcyBtZW1jcHkvTWVtU2V0IGxlbmd0aHMgb3IgYXMgdGhlCisJICogZGVj b21wcmVzc29yIG91dHB1dCBjYXBhY2l0eS4KKwkgKi8KKwlBc3NlcnQoYmtwYi0+aG9sZV9vZmZz ZXQgPD0gQkxDS1NaKTsKKwlBc3NlcnQoYmtwYi0+aG9sZV9sZW5ndGggPD0gQkxDS1NaIC0gYmtw Yi0+aG9sZV9vZmZzZXQpOworCiAJaWYgKEJLUElNQUdFX0NPTVBSRVNTRUQoYmtwYi0+YmltZ19p bmZvKSkKIAl7CiAJCS8qIElmIGEgYmFja3VwIGJsb2NrIGltYWdlIGlzIGNvbXByZXNzZWQsIGRl Y29tcHJlc3MgaXQgKi8KLS0KMi40My4wCg== --_003_cd00a0536c674fac9e5dd9f4e27ae868ftdataru_ Content-Type: application/octet-stream; name="0002-Add-test_xlogreader-for-malformed-FPI-hole-geometry.patch" Content-Description: 0002-Add-test_xlogreader-for-malformed-FPI-hole-geometry.patch Content-Disposition: attachment; filename="0002-Add-test_xlogreader-for-malformed-FPI-hole-geometry.patch"; size=11663; creation-date="Tue, 29 Sep 2026 08:36:43 GMT"; modification-date="Tue, 29 Sep 2026 08:36:43 GMT" Content-Transfer-Encoding: base64 RnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBZdXJpeSBHcmlnb3J5ZXYgPGp1LmdyaWdvcmV2QGZ0ZGF0YS5y dT4KRGF0ZTogVHVlLCAyOSBTZXAgMjAyNiAwMDowMTowMCArMDcwMApTdWJqZWN0OiBbUEFUQ0gg djIgMi8yXSBBZGQgYSBmcm9udGVuZCB0ZXN0IGZvciBtYWxmb3JtZWQgV0FMIGltYWdlIGhvbGUK IGdlb21ldHJ5LgoKQnVpbGQgaW4tbWVtb3J5IFdBTCByZWNvcmRzIHdpdGggY29tcHJlc3NlZCBh bmQgdW5jb21wcmVzc2VkIGZ1bGwtcGFnZQppbWFnZXMgYW5kIGZlZWQgdGhlbSB0byBEZWNvZGVY TG9nUmVjb3JkKCkuICBUaGUgc2VydmVyIGNhbm5vdCBlbWl0IHRoZQpCVUcgIzE5NTk5IHNoYXBl IGl0c2VsZiwgc28gYSBUQVAgdGVzdCBhZ2FpbnN0IGEgcnVubmluZyBpbnN0YW5jZSB3b3VsZApz dGlsbCBuZWVkIGEgc2VwYXJhdGUgV0FMIGdlbmVyYXRvci4KCkRpc2N1c3Npb246IGh0dHBzOi8v cG9zdGdyLmVzL20vY2MwYTU4ODZkMmE3NGY5OWFlNThjMTY0N2VhNWVkOGJAbG9jYWxob3N0Lmxv Y2FsZG9tYWluCi0tLQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3hsb2dyZWFk ZXIvLmdpdGlnbm9yZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF94bG9ncmVhZGVyLy5naXRpZ25v cmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjViOTBjYzhiN2FmCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3hsb2dyZWFkZXIvLmdpdGln bm9yZQpAQCAtMCwwICsxLDcgQEAKKyMgU291cmNlIGZpbGVzIGNvcGllZCBmcm9tIHNyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtLworL3hsb2dyZWFkZXIuYworCisvdGVzdF94bG9ncmVhZGVyCisK KyMgR2VuZXJhdGVkIGJ5IHRlc3Qgc3VpdGUKKy90bXBfY2hlY2svCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfeGxvZ3JlYWRlci9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF94bG9ncmVhZGVyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5kYzgwZWY0NjJmNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF94bG9ncmVhZGVyL01ha2VmaWxlCkBAIC0wLDAgKzEsMzQgQEAKKyMgc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X3hsb2dyZWFkZXIvTWFrZWZpbGUKKworUEdGSUxFREVTQyA9ICJzdGFuZGFsb25l IFhMb2dSZWFkZXIgZGVjb2RlciB0ZXN0ZXIiCitQR0FQUElDT04gPSB3aW4zMgorCitUQVBfVEVT VFMgPSAxCisKK09CSlMgPSBcCisJJChXSU4zMlJFUykgXAorCXRlc3RfeGxvZ3JlYWRlci5vIFwK Kwl4bG9ncmVhZGVyLm8KKworRVhUUkFfQ0xFQU4gPSB0ZXN0X3hsb2dyZWFkZXIkKFgpIHhsb2dy ZWFkZXIuYworCitpZmRlZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9 ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3Vi ZGlyID0gc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3hsb2dyZWFkZXIKK3RvcF9idWlsZGRpciA9IC4u Ly4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitp bmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKKwor b3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLURGUk9OVEVORCAtSSQobGlicHFfc3JjZGlyKSAkKENQUEZM QUdTKQorCithbGw6IHRlc3RfeGxvZ3JlYWRlciQoWCkKKworeGxvZ3JlYWRlci5jOiAlIDogJCh0 b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS8lCisJcm0gLWYgJEAgJiYgJChM Tl9TKSAkPCAuCisKK3Rlc3RfeGxvZ3JlYWRlciQoWCk6ICQoT0JKUykKKwkkKENDKSAkKENGTEFH UykgJF4gJChQR19MSUJTX0lOVEVSTkFMKSAkKExERkxBR1MpICQoTERGTEFHU19FWCkgJChQR19M SUJTKSAkKExJQlMpIC1vICRACmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfeGxv Z3JlYWRlci9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF94bG9ncmVhZGVyL21l c29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NGJkZGFl NGE2NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF94bG9ncmVhZGVy L21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI2LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit0ZXN0X3hsb2dyZWFkZXJfc291cmNl cyA9IGZpbGVzKAorICAndGVzdF94bG9ncmVhZGVyLmMnLAorKQordGVzdF94bG9ncmVhZGVyX3Nv dXJjZXMgKz0geGxvZ3JlYWRlcl9zb3VyY2VzCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dz JworICB0ZXN0X3hsb2dyZWFkZXJfc291cmNlcyArPSByY19iaW5fZ2VuLnByb2Nlc3Mod2luMzJ2 ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3Rlc3RfeGxvZ3JlYWRlcicsCisg ICAgJy0tRklMRURFU0MnLCAnc3RhbmRhbG9uZSBYTG9nUmVhZGVyIGRlY29kZXIgdGVzdGVyJywK KyAgXSkKK2VuZGlmCisKK3Rlc3RfeGxvZ3JlYWRlciA9IGV4ZWN1dGFibGUoJ3Rlc3RfeGxvZ3Jl YWRlcicsCisgIHRlc3RfeGxvZ3JlYWRlcl9zb3VyY2VzLAorICBkZXBlbmRlbmNpZXM6IFtmcm9u dGVuZF9jb2RlLCBsejQsIHpzdGRdLAorICBjX2FyZ3M6IFsnLURGUk9OVEVORCddLAorICBrd2Fy Z3M6IGRlZmF1bHRfYmluX2FyZ3MgKyB7CisgICAgJ2luc3RhbGwnOiBmYWxzZSwKKyAgfSwKKykK KwordGVzdHByZXBfdGFyZ2V0cyArPSB0ZXN0X3hsb2dyZWFkZXIKKwordGVzdHMgKz0geworICAn bmFtZSc6ICd0ZXN0X3hsb2dyZWFkZXInLAorICAnc2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9k aXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKKyAgJ3RhcCc6IHsKKyAg ICAndGVzdHMnOiBbCisgICAgICAndC8wMDFfaG9sZV9nZW9tZXRyeS5wbCcsCisgICAgXSwKKyAg ICAnZGVwcyc6IFsKKyAgICAgIHRlc3RfeGxvZ3JlYWRlciwKKyAgICBdLAorICB9LAorfQpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3hsb2dyZWFkZXIvdC8wMDFfaG9sZV9nZW9t ZXRyeS5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF94bG9ncmVhZGVyL3QvMDAxX2hvbGVfZ2Vv bWV0cnkucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ0MTU5Y2Q2 MmVjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3hsb2dyZWFkZXIv dC8wMDFfaG9sZV9nZW9tZXRyeS5wbApAQCAtMCwwICsxLDE0IEBACisjIENvcHlyaWdodCAoYykg MjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsK K3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0 aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK215ICgkc3Rkb3V0LCAkc3RkZXJyKSA9IHJ1bl9jb21t YW5kKFsndGVzdF94bG9ncmVhZGVyJ10pOworCitpcygkc3RkZXJyLCAnJywgJ25vIGVycm9yIG91 dHB1dCcpOworbGlrZSgkc3Rkb3V0LCBxci9BbGwgdGVzdHMgcGFzc2VkLywgJ21hbGZvcm1lZCBo b2xlIGdlb21ldHJ5IGlzIHJlamVjdGVkJyk7CisKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3hsb2dyZWFkZXIvdGVzdF94bG9ncmVhZGVyLmMgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfeGxvZ3JlYWRlci90ZXN0X3hsb2dyZWFkZXIuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDdhNzFkNTU0NWUKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfeGxvZ3JlYWRlci90ZXN0X3hsb2dyZWFkZXIu YwpAQCAtMCwwICsxLDI1MCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogdGVzdF94bG9n cmVhZGVyLmMKKyAqCQlGcm9udGVuZCBoYXJuZXNzIGZvciBEZWNvZGVYTG9nUmVjb3JkKCkgaG9s ZS1nZW9tZXRyeSBjaGVja3MKKyAqCisgKiBCdWlsZHMgaW4tbWVtb3J5IFdBTCByZWNvcmRzIHdp dGggZnVsbC1wYWdlIGltYWdlcyBhbmQgZmVlZHMgdGhlbSB0bworICogRGVjb2RlWExvZ1JlY29y ZCgpLiAgVXNlZCB0byBjaGVjayB0aGF0IG1hbGZvcm1lZCBob2xlIGdlb21ldHJ5IGlzCisgKiBy ZWplY3RlZCBkdXJpbmcgZGVjb2RlLCBiZWZvcmUgUmVzdG9yZUJsb2NrSW1hZ2UoKSBjYW4gdG91 Y2ggdGhlIHBhZ2UKKyAqIGJ1ZmZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjYsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAq CQlzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfeGxvZ3JlYWRlci90ZXN0X3hsb2dyZWFkZXIuYworICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBXZSBoYXZlIHRvIHVzZSBwb3N0Z3Jl cy5oIG5vdCBwb3N0Z3Jlc19mZS5oIGhlcmUsIGJlY2F1c2UgdGhlcmUncyBzbyBtdWNoCisgKiBi YWNrZW5kLW9ubHkgc3R1ZmYgaW4gdGhlIFhMT0cgaW5jbHVkZSBmaWxlcyB3ZSBuZWVkLiAgQnV0 IHdlIG5lZWQgYQorICogZnJvbnRlbmQtaXNoIGVudmlyb25tZW50IG90aGVyd2lzZS4gIEhlbmNl IHRoaXMgdWdseSBoYWNrLgorICovCisjZGVmaW5lIEZST05URU5EIDEKKyNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lu Y2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dfaW50ZXJuYWwu aCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlYWRlci5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9n cmVjb3JkLmgiCisjaW5jbHVkZSAiY29tbW9uL3JlbHBhdGguaCIKKyNpbmNsdWRlICJwb3J0L3Bn X2NyYzMyYy5oIgorCitzdGF0aWMgdm9pZAorYXBwZW5kX2J5dGVzKGNoYXIgKipkc3QsIGNvbnN0 IHZvaWQgKnNyYywgU2l6ZSBsZW4pCit7CisJbWVtY3B5KCpkc3QsIHNyYywgbGVuKTsKKwkqZHN0 ICs9IGxlbjsKK30KKworLyoKKyAqIEJ1aWxkIGEgb25lLWJsb2NrIFdBTCByZWNvcmQgY29udGFp bmluZyBhIGZ1bGwtcGFnZSBpbWFnZSB3aXRoIGEgaG9sZS4KKyAqCisgKiBJZiBjb21wcmVzc2Vk IGlzIHRydWUsIGhvbGVfbGVuZ3RoIGlzIHN0b3JlZCBvbiB0aGUgd2lyZSAoYXMgaW4gYQorICog Y29ycnVwdCBvciBoYW5kLWJ1aWx0IHJlY29yZCkuICBPdGhlcndpc2UgdGhlIGRlY29kZXIgZGVy aXZlcyBob2xlX2xlbmd0aCBhcworICogQkxDS1NaIC0gYmltZ19sZW4uCisgKgorICogQSB2YWxp ZCBDUkMgaXMgZmlsbGVkIGluLCBtYXRjaGluZyBWYWxpZFhMb2dSZWNvcmQoKSwgZXZlbiB0aG91 Z2gKKyAqIERlY29kZVhMb2dSZWNvcmQoKSBpdHNlbGYgZG9lcyBub3QgdmVyaWZ5IHRoZSBDUkMu CisgKi8KK3N0YXRpYyBYTG9nUmVjb3JkICoKK2J1aWxkX2hvbGVfaW1hZ2VfcmVjb3JkKGNoYXIg KmJ1ZiwgU2l6ZSBidWZsZW4sCisJCQkJCQl1aW50MTYgaG9sZV9vZmZzZXQsIHVpbnQxNiBob2xl X2xlbmd0aCwKKwkJCQkJCXVpbnQxNiBiaW1nX2xlbiwgYm9vbCBjb21wcmVzc2VkKQoreworCVhM b2dSZWNvcmQgKnJlY29yZDsKKwljaGFyCSAgICpwOworCXVpbnQ4CQlpZDsKKwl1aW50OAkJZm9y a19mbGFnczsKKwl1aW50OAkJYmltZ19pbmZvOworCXVpbnQxNgkJZGF0YV9sZW47CisJUmVsRmls ZUxvY2F0b3IgcmxvY2F0b3I7CisJQmxvY2tOdW1iZXIgYmxrbm87CisJcGdfY3JjMzJjCWNyYzsK KwljaGFyCQlpbWFnZVtCTENLU1pdOworCisJaWYgKGJpbWdfbGVuID4gQkxDS1NaIHx8CisJCWJ1 ZmxlbiA8IFNpemVPZlhMb2dSZWNvcmQgKyBNYXhTaXplT2ZYTG9nUmVjb3JkQmxvY2tIZWFkZXIg KyBiaW1nX2xlbikKKwl7CisJCWZwcmludGYoc3RkZXJyLCAiaW50ZXJuYWwgZXJyb3I6IGNhbm5v dCBidWlsZCBXQUwgaW1hZ2UgcmVjb3JkXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisKKwltZW1zZXQo YnVmLCAwLCBidWZsZW4pOworCW1lbXNldChpbWFnZSwgMHhBNSwgc2l6ZW9mKGltYWdlKSk7CisK KwlyZWNvcmQgPSAoWExvZ1JlY29yZCAqKSBidWY7CisJcCA9IGJ1ZiArIFNpemVPZlhMb2dSZWNv cmQ7CisKKwlpZCA9IDA7CisJZm9ya19mbGFncyA9IE1BSU5fRk9SS05VTSB8IEJLUEJMT0NLX0hB U19JTUFHRTsKKwlkYXRhX2xlbiA9IDA7CisJYXBwZW5kX2J5dGVzKCZwLCAmaWQsIHNpemVvZihp ZCkpOworCWFwcGVuZF9ieXRlcygmcCwgJmZvcmtfZmxhZ3MsIHNpemVvZihmb3JrX2ZsYWdzKSk7 CisJYXBwZW5kX2J5dGVzKCZwLCAmZGF0YV9sZW4sIHNpemVvZihkYXRhX2xlbikpOworCisJYmlt Z19pbmZvID0gQktQSU1BR0VfSEFTX0hPTEUgfCBCS1BJTUFHRV9BUFBMWTsKKwlpZiAoY29tcHJl c3NlZCkKKwkJYmltZ19pbmZvIHw9IEJLUElNQUdFX0NPTVBSRVNTX1BHTFo7CisKKwlhcHBlbmRf Ynl0ZXMoJnAsICZiaW1nX2xlbiwgc2l6ZW9mKGJpbWdfbGVuKSk7CisJYXBwZW5kX2J5dGVzKCZw LCAmaG9sZV9vZmZzZXQsIHNpemVvZihob2xlX29mZnNldCkpOworCWFwcGVuZF9ieXRlcygmcCwg JmJpbWdfaW5mbywgc2l6ZW9mKGJpbWdfaW5mbykpOworCWlmIChjb21wcmVzc2VkKQorCQlhcHBl bmRfYnl0ZXMoJnAsICZob2xlX2xlbmd0aCwgc2l6ZW9mKGhvbGVfbGVuZ3RoKSk7CisKKwlybG9j YXRvci5zcGNPaWQgPSAxNjYzOworCXJsb2NhdG9yLmRiT2lkID0gNTsKKwlybG9jYXRvci5yZWxO dW1iZXIgPSAxNjM4NDsKKwlibGtubyA9IDA7CisJYXBwZW5kX2J5dGVzKCZwLCAmcmxvY2F0b3Is IHNpemVvZihybG9jYXRvcikpOworCWFwcGVuZF9ieXRlcygmcCwgJmJsa25vLCBzaXplb2YoYmxr bm8pKTsKKwlhcHBlbmRfYnl0ZXMoJnAsIGltYWdlLCBiaW1nX2xlbik7CisKKwlyZWNvcmQtPnhs X3RvdF9sZW4gPSBwIC0gYnVmOworCXJlY29yZC0+eGxfeGlkID0gSW52YWxpZFRyYW5zYWN0aW9u SWQ7CisJcmVjb3JkLT54bF9wcmV2ID0gSW52YWxpZFhMb2dSZWNQdHI7CisJcmVjb3JkLT54bF9p bmZvID0gMDsKKwlyZWNvcmQtPnhsX3JtaWQgPSBSTV9YTE9HX0lEOworCisJSU5JVF9DUkMzMkMo Y3JjKTsKKwlDT01QX0NSQzMyQyhjcmMsIGJ1ZiArIFNpemVPZlhMb2dSZWNvcmQsCisJCQkJcmVj b3JkLT54bF90b3RfbGVuIC0gU2l6ZU9mWExvZ1JlY29yZCk7CisJQ09NUF9DUkMzMkMoY3JjLCBi dWYsIG9mZnNldG9mKFhMb2dSZWNvcmQsIHhsX2NyYykpOworCUZJTl9DUkMzMkMoY3JjKTsKKwly ZWNvcmQtPnhsX2NyYyA9IGNyYzsKKworCXJldHVybiByZWNvcmQ7Cit9CisKK3N0YXRpYyBib29s Cit0cnlfZGVjb2RlKFhMb2dSZWFkZXJTdGF0ZSAqc3RhdGUsIFhMb2dSZWNvcmQgKnJlY29yZCwg Y2hhciAqKmVycm9ybXNnKQoreworCURlY29kZWRYTG9nUmVjb3JkICpkZWNvZGVkOworCWJvb2wJ CW9rOworCisJZGVjb2RlZCA9IChEZWNvZGVkWExvZ1JlY29yZCAqKQorCQlwYWxsb2MoRGVjb2Rl WExvZ1JlY29yZFJlcXVpcmVkU3BhY2UocmVjb3JkLT54bF90b3RfbGVuKSk7CisJZGVjb2RlZC0+ b3ZlcnNpemVkID0gdHJ1ZTsKKwlzdGF0ZS0+UmVhZFJlY1B0ciA9IDB4Mjg7CisKKwlvayA9IERl Y29kZVhMb2dSZWNvcmQoc3RhdGUsIGRlY29kZWQsIHJlY29yZCwgc3RhdGUtPlJlYWRSZWNQdHIs IGVycm9ybXNnKTsKKwlwZnJlZShkZWNvZGVkKTsKKwlyZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBp bnQKK3J1bl9jYXNlKFhMb2dSZWFkZXJTdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJ CSB1aW50MTYgaG9sZV9vZmZzZXQsIHVpbnQxNiBob2xlX2xlbmd0aCwgdWludDE2IGJpbWdfbGVu LAorCQkgYm9vbCBjb21wcmVzc2VkLCBib29sIGV4cGVjdF9vaykKK3sKKwljaGFyCQlidWZbQkxD S1NaICsgNTEyXTsKKwlYTG9nUmVjb3JkICpyZWNvcmQ7CisJY2hhcgkgICAqZXJyb3Jtc2cgPSBO VUxMOworCWJvb2wJCW9rOworCisJcmVjb3JkID0gYnVpbGRfaG9sZV9pbWFnZV9yZWNvcmQoYnVm LCBzaXplb2YoYnVmKSwKKwkJCQkJCQkJCSBob2xlX29mZnNldCwgaG9sZV9sZW5ndGgsCisJCQkJ CQkJCQkgYmltZ19sZW4sIGNvbXByZXNzZWQpOworCW9rID0gdHJ5X2RlY29kZShzdGF0ZSwgcmVj b3JkLCAmZXJyb3Jtc2cpOworCisJaWYgKG9rICE9IGV4cGVjdF9vaykKKwl7CisJCWZwcmludGYo c3RkZXJyLAorCQkJCSJGQUlMOiAlczogaG9sZV9vZmZzZXQ9JXUgaG9sZV9sZW5ndGg9JXUgYmlt Z19sZW49JXUgY29tcHJlc3NlZD0lZDogZXhwZWN0ZWQgJXMsIGdvdCAlcyVzJXNcbiIsCisJCQkJ bmFtZSwKKwkJCQkodW5zaWduZWQgaW50KSBob2xlX29mZnNldCwKKwkJCQkodW5zaWduZWQgaW50 KSBob2xlX2xlbmd0aCwKKwkJCQkodW5zaWduZWQgaW50KSBiaW1nX2xlbiwKKwkJCQkoaW50KSBj b21wcmVzc2VkLAorCQkJCWV4cGVjdF9vayA/ICJhY2NlcHQiIDogInJlamVjdCIsCisJCQkJb2sg PyAiYWNjZXB0IiA6ICJyZWplY3QiLAorCQkJCWVycm9ybXNnID8gIjogIiA6ICIiLAorCQkJCWVy cm9ybXNnID8gZXJyb3Jtc2cgOiAiIik7CisJCXJldHVybiAxOworCX0KKworCWlmICghZXhwZWN0 X29rICYmCisJCShlcnJvcm1zZyA9PSBOVUxMIHx8IHN0cnN0cihlcnJvcm1zZywgIkJLUElNQUdF X0hBU19IT0xFIHNldCIpID09IE5VTEwpKQorCXsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkJIkZB SUw6ICVzOiByZWplY3RlZCwgYnV0IGVycm9yIGRpZCBub3QgbWVudGlvbiBob2xlIGdlb21ldHJ5 OiAlc1xuIiwKKwkJCQluYW1lLAorCQkJCWVycm9ybXNnID8gZXJyb3Jtc2cgOiAiKG51bGwpIik7 CisJCXJldHVybiAxOworCX0KKworCXByaW50Zigib2sgJXNcbiIsIG5hbWUpOworCXJldHVybiAw OworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlYTG9nUmVhZGVy U3RhdGUgKnN0YXRlOworCWludAkJCWZhaWxlZCA9IDA7CisJdWludDE2CQluZWFyX2VuZDsKKwor CSh2b2lkKSBhcmdjOworCSh2b2lkKSBhcmd2OworCisJc3RhdGUgPSBYTG9nUmVhZGVyQWxsb2Nh dGUoREVGQVVMVF9YTE9HX1NFR19TSVpFLCBOVUxMLAorCQkJCQkJCSAgIFhMX1JPVVRJTkUoLnBh Z2VfcmVhZCA9IE5VTEwsCisJCQkJCQkJCQkJICAuc2VnbWVudF9vcGVuID0gTlVMTCwKKwkJCQkJ CQkJCQkgIC5zZWdtZW50X2Nsb3NlID0gTlVMTCksCisJCQkJCQkJICAgTlVMTCk7CisJaWYgKHN0 YXRlID09IE5VTEwpCisJeworCQlmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnkgd2hpbGUg YWxsb2NhdGluZyBYTG9nUmVhZGVyXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogVXNlIHZh bHVlcyBuZWFyIHRoZSBlbmQgb2YgdGhlIHBhZ2UsIHNjYWxlZCB0byB0aGUgYnVpbGQncyBCTENL U1ouICovCisJbmVhcl9lbmQgPSAodWludDE2KSAoQkxDS1NaIC0gMTkyKTsKKworCS8qIFZhbGlk IGNvbXByZXNzZWQgaG9sZSBlbnRpcmVseSBpbnNpZGUgdGhlIHBhZ2UuICovCisJZmFpbGVkICs9 IHJ1bl9jYXNlKHN0YXRlLCAidmFsaWQgY29tcHJlc3NlZCBob2xlIiwKKwkJCQkJICAgMTAwLCAx MDAsIDE2LCB0cnVlLCB0cnVlKTsKKworCS8qIEhvbGUgZW5kcyBleGFjdGx5IGF0IEJMQ0tTWi4g Ki8KKwlmYWlsZWQgKz0gcnVuX2Nhc2Uoc3RhdGUsICJ2YWxpZCBjb21wcmVzc2VkIGhvbGUgdG8g ZW5kIG9mIHBhZ2UiLAorCQkJCQkgICBuZWFyX2VuZCwgMTkyLCAxNiwgdHJ1ZSwgdHJ1ZSk7CisK KwkvKiBCb3RoIGZpZWxkcyBsYXJnZSwgc3VtIHBhc3QgQkxDS1NaLiAqLworCWZhaWxlZCArPSBy dW5fY2FzZShzdGF0ZSwgIm92ZXJzaXplZCBjb21wcmVzc2VkIGhvbGUiLAorCQkJCQkgICBuZWFy X2VuZCwgbmVhcl9lbmQsIDE2LCB0cnVlLCBmYWxzZSk7CisKKwkvKiBKdXN0IG9uZSBieXRlIHBh c3QgdGhlIGVuZCBvZiB0aGUgcGFnZS4gKi8KKwlmYWlsZWQgKz0gcnVuX2Nhc2Uoc3RhdGUsICJj b21wcmVzc2VkIGhvbGUgb25lIGJ5dGUgcGFzdCBwYWdlIiwKKwkJCQkJICAgbmVhcl9lbmQsIDE5 MywgMTYsIHRydWUsIGZhbHNlKTsKKworCS8qIGhvbGVfb2Zmc2V0IGl0c2VsZiBwYXN0IHRoZSBw YWdlLiAqLworCWlmIChCTENLU1ogPCBQR19VSU5UMTZfTUFYKQorCQlmYWlsZWQgKz0gcnVuX2Nh c2Uoc3RhdGUsICJob2xlX29mZnNldCBwYXN0IHBhZ2UiLAorCQkJCQkJICAgKHVpbnQxNikgKEJM Q0tTWiArIDEpLCAxLCAxNiwgdHJ1ZSwgZmFsc2UpOworCisJLyoKKwkgKiBVbmNvbXByZXNzZWQg aW1hZ2VzIHN0b3JlIGhvbGVfb2Zmc2V0IG9uIHRoZSB3aXJlIGFuZCBkZXJpdmUKKwkgKiBob2xl X2xlbmd0aCBhcyBCTENLU1ogLSBiaW1nX2xlbi4gIEEgbGFyZ2UgaG9sZV9vZmZzZXQgc3RpbGwg aGFzIHRvCisJICogZml0IGluIHRoZSByZW1haW5pbmcgaW1hZ2UgYnl0ZXMuCisJICovCisJZmFp bGVkICs9IHJ1bl9jYXNlKHN0YXRlLCAidmFsaWQgdW5jb21wcmVzc2VkIGhvbGUiLAorCQkJCQkg ICAyNCwgMCwgMTAwLCBmYWxzZSwgdHJ1ZSk7CisJZmFpbGVkICs9IHJ1bl9jYXNlKHN0YXRlLCAi dW5jb21wcmVzc2VkIGhvbGVfb2Zmc2V0IHBhc3QgaW1hZ2UiLAorCQkJCQkgICBuZWFyX2VuZCwg MCwgMTYsIGZhbHNlLCBmYWxzZSk7CisKKwlYTG9nUmVhZGVyRnJlZShzdGF0ZSk7CisKKwlpZiAo ZmFpbGVkKQorCXsKKwkJZnByaW50ZihzdGRlcnIsICIlZCB0ZXN0KHMpIGZhaWxlZFxuIiwgZmFp bGVkKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcHJpbnRmKCJBbGwgdGVzdHMgcGFzc2VkXG4iKTsK KwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgYi9z cmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCi0tLSBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpAQCAtNDMsNyArNDMsOCBAQCBTVUJESVJT ID0gXAogCQkgIHRlc3Rfc2htX21xIFwKIAkJICB0ZXN0X3NscnUgXAogCQkgIHRlc3RfdGlkc3Rv cmUgXAogCQkgIHRlc3Rfd2FpdF9sc24gXAorCQkgIHRlc3RfeGxvZ3JlYWRlciBcCiAJCSAgdW5z YWZlX3Rlc3RzIFwKIAkJICB3b3JrZXJfc3BpIFwKIAkJICB4aWRfd3JhcGFyb3VuZApkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvbWVz b24uYnVpbGQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVz dC9tb2R1bGVzL21lc29uLmJ1aWxkCkBAIC00Miw3ICs0Miw4IEBAIHN1YmRpcigndGVzdF9ybHNf aG9va3MnKQogc3ViZGlyKCd0ZXN0X3NobV9tcScpCiBzdWJkaXIoJ3Rlc3Rfc2xydScpCiBzdWJk aXIoJ3Rlc3RfdGlkc3RvcmUnKQogc3ViZGlyKCd0ZXN0X3dhaXRfbHNuJykKK3N1YmRpcigndGVz dF94bG9ncmVhZGVyJykKIHN1YmRpcigndHlwY2FjaGUnKQogc3ViZGlyKCd1bnNhZmVfdGVzdHMn KQogc3ViZGlyKCd3b3JrZXJfc3BpJykKLS0gCjIuMzkuMgo= --_003_cd00a0536c674fac9e5dd9f4e27ae868ftdataru_--