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 1wAPgN-002MQD-1J for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 09:58:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wAPgL-006Ra1-1Y for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 09:58:45 +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 1wAPgL-006RZs-06 for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 09:58:45 +0000 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wAPgJ-00000001HCD-05BG for pgsql-hackers@postgresql.org; Wed, 08 Apr 2026 09:58:45 +0000 Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-2a871daa98fso44867475ad.1 for ; Wed, 08 Apr 2026 02:58:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775642320; cv=none; d=google.com; s=arc-20240605; b=Bdyi81Lr7i5r1XUcsBgO/zkl1gLWW4M0Uaz5rwghqq5qdts+TFPLGNf/g3Bqqxluj3 OU0TaXso48KNMErV9QLoLY6wBY4zLi/GHyhQlHvw8NpHo3GTlFTuIL/oGmT7JCzcT+fU dvod1GoUYB0PLMTzOEqGaUQforqXhqWBIis/r1AMjydTvFiVskTVa8/TBVGwbn5A+dF8 1by7wc+CZra1NKnhHtKPJ0bEuPXLgaKe/GJ+vWnyl7HVPBV69zMMcVfFrVMEuRZrY4Iv nLPDxTKnUR/mh7VXw9kENFDQKnozgc6f7aZ7Ca2XknESyhEiFxrydFifDpFfPX7ox4TC XuHQ== 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=GTerUfSxJ+w9dzTAP5PufzM7maMgY0/rBLVDpMGb9qU=; fh=Wnw2+2BmbY5bDwDXOiULndM2ZgPQ4yU/F5ezZXkNd9o=; b=HOvh7T3a7mJC+0egZ8gmEBBQHDpD3GybKTpfQrSYoFMjE60KyUMIDhl/WXmN1kevj8 aMWbTYsOxh9mmJwNsFba9z04+Xbk4jjNMcdS0L2OafZKR1y2UUpQDwno+JGGUM/MUqC3 nvZy/uudhVdA0SeMSZ+UeZ/RTyqqCKTvDMRxDOmJBZhWPx+zBuRUPAM4l+wPSEWOTbp8 oVQt0J4EZDtwM1PyWrLx+k2AiGiYghuBvdGsN7ig55p5XsT4KcXY8L5asKseC8mnFL8L CegfC/qpwi3B5Tu2RZre/irNq2lj4ajwOYUVrdPFgXcqy7N5S+R6cDleZN6ORlRMF/4q zpTw==; darn=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=1775642320; x=1776247120; darn=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=GTerUfSxJ+w9dzTAP5PufzM7maMgY0/rBLVDpMGb9qU=; b=fLh2MebULsB5vHihEVIDDsM3XwRVD8NQSIDbRN1eoTXoH5I1SneU8h1P7rDr4O4IFI ZgllAN0wECqZp7vaPiVBAqAm9mrOWdCALyOiODd1ENtWiCi/kcZDKsZd5FBUioLoo8gA k26Ia+RlrxRROtIooncqdW/I4ZLT6Qr+/ftOvEiko4d78Kkz4FsBNJV3qVraSE0MPgOG RL0LzXR5Va4UnIj/8qGSdRrxXSi6xpAZBkCzSHCtT+20cZ5BzBOp4nJjE/lt89u7M0fi d3ukPBFwUs7brk4iPcvciqdFWHn6LeoC2gA0waYYbaTbydt8YJoSXVaepJns3y3DLdaA ctTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775642320; x=1776247120; 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=GTerUfSxJ+w9dzTAP5PufzM7maMgY0/rBLVDpMGb9qU=; b=DzjZDYNjuftrX8bk263YKT1dsAvZn70hVoBxTU9be4SckDlb7wc/7iwdnUySYpnPKc M0qqpiOzEbKLhKj9J8oKLjJhUqx9ggr6y1cy2Q+xMklaJ+i9BROnh2UgBIZ3P1mSQS4W sUWmAxGzDPLT6OcOFqdJT0LpgEwsWmSPWb5R4wkAO0caJO7qaFDRkKXouhj4aVnqE1NF +fh5KQJnEWU+wK5NQN0SwU9Ki/u9upl7VFkaehtTu/zNO7cEjNspaSPY8cSyOVKT0b+T mw2kRQj+iPO2cfbeb09VQcj2r98WCnmxL2cB2dwOu9YpAsskj6dC4EeFJeskwaYYDGyU rPdw== X-Gm-Message-State: AOJu0Yz6rhY2EwFqOgk/wKKSTY5O7Ma9j4h/6BHQjW7Ls1FbquzmrJUB EYXjLdd7ORuAT2v+e3iA1dWR5aWbYV095TDMvgp3Qa7ji2LndrwuQ8cqcQqY8MBsF+ipUoB1++Y 4DCJKJpxPXeNv2drKxeSbABukeKUD2EU= X-Gm-Gg: AeBDietTP0Uhs+7ZGaC+SNi8lj8JBgxMvK2kZdedfGdFB6CPmVRwgxzSjfwQzvLjYtV K8W/zVSAmyRUctss97E9N3Jy1hHI6E7IZ48hjz4UQVzA+7yT4a1j6X83zVi5X/cRAs5XQKwQF04 J1dGCaaNbkHI9e+wCIoiy9HffXrTBFagjepLi2jJwSmgFxXUwwLwuVZXa1cK+JFMtyVtZZYBN+a 1MdHK6Rjkdf+JU5z9e3Jkrw4AstB1xpBFCvQ6KDNbF8rZEIPaaZLieNodjS9vYBvCyhA9Hu1HNO esgJkaJf X-Received: by 2002:a17:903:1a68:b0:2b2:56bc:c6a5 with SMTP id d9443c01a7336-2b28188de3amr220537905ad.42.1775642320416; Wed, 08 Apr 2026 02:58:40 -0700 (PDT) MIME-Version: 1.0 References: <2BE661BA-D909-4093-BF78-DB9B0C099337@gmail.com> <77FA04FE-1F84-4DA1-8855-8BBFD8CC889A@gmail.com> <72AA2663-B642-4FB1-BDC2-5FAFF2D2DF15@gmail.com> In-Reply-To: From: Amit Langote Date: Wed, 8 Apr 2026 18:58:23 +0900 X-Gm-Features: AQROBzBIjH1fRYR9OBYP2QRQvXHIk_3Wcx2RtVtvdslz2aFanGe64QwHhFgbKRo Message-ID: Subject: Re: Eliminating SPI / SQL from some RI triggers - take 3 To: Evan Montgomery-Recht Cc: PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000c1cd0b064eeff19b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c1cd0b064eeff19b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Apr 8, 2026 at 10:23=E2=80=AFAM Amit Langote wrote: > On Tue, Apr 7, 2026 at 10:00=E2=80=AFPM Evan Montgomery-Recht > wrote: > > The patch also adds a test module (test_spi_func) with a C function > > that executes SQL via SPI_connect/SPI_execute/SPI_finish, since this > > crash cannot be triggered from PL/pgSQL. The test exercises the > > C-level SPI INSERT with multiple FK constraints, FK violations, and > > nested PL/pgSQL-calls-C-SPI (matching the PostGIS call pattern). I applied only the test module changes and it passes (without crashing) even without your proposed fix. It seems that's because the C function in test_spi_func calling SPI is using the same resource owner as the parent SELECT. I think you'd need to create a resource owner manually in the spi_exec() C function to reproduce the crash, as done in the attached 0001, which contains the src/test changes extracted from your patch modified as described, including renaming the C function to spi_exec_sql(). Also, the test cases that call spi_exec() (_sql()) directly from a SELECT don't actually exercise the crash path because there is no outer trigger-firing loop active. query_depth is 0 inside the inner SPI's AfterTriggerEndQuery, so the old guard wouldn't suppress the callback there anyway. The critical case requires spi_exec_sql() to be called from inside an AFTER trigger, where query_depth > 0 causes the guard to defer the callback past the inner resource owner's lifetime. I've added that test case. I kept your original test cases as they still provide useful coverage of C-level SPI FK behavior even if they don't exercise the crash path specifically. Maybe your original PostGIS test suite that hit the crash did have the right structure, but that's not reflected in the patch as far as I can tell. I've also renamed the module to test_spi_resowner to better reflect what it's about. For the fix, I have a different proposal. As you observed, the query_depth > 0 early return in FireAfterTriggerBatchCallbacks() means that the nested SPI's callbacks get called under the outer resource owner, which may not be the same as the one that SPI used. I think it was a mistake to have that early return in the first place. Instead we could remember for each callback what firing level it should be called at, so the nested SPI's callbacks fire before returning to the parent level and parent-level callbacks fire when the parent level completes. I have implemented that in the attached 0002 along with transaction boundary cleanup of callbacks, which passes the check-world for me, but I'll need to stare some more at it before committing. Let me know if this also fixes your own in-house test suite or if you have any other suggestions or if you think I am missing something. -- Thanks, Amit Langote --000000000000c1cd0b064eeff19b Content-Type: application/octet-stream; name="v2-0001-Modified-test-suite-from-Evan-s-patch.patch" Content-Disposition: attachment; filename="v2-0001-Modified-test-suite-from-Evan-s-patch.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnpv33z01 RnJvbSAyZGE3NDE0NmFhZmJkOWQ1MDVlOWUwZDkwMzgxMzhiYzQ2ZjBjZDA4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFdlZCwgOCBBcHIgMjAyNiAxMzo1MzowOCArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjIg MS8yXSBNb2RpZmllZCB0ZXN0IHN1aXRlIGZyb20gRXZhbidzIHBhdGNoCgpUaGUgQyBmdW5jdGlv biBpbiB0aGUgb3JpZ2luYWwgdGVzdCBtb2R1bGUgd2FzIHVzaW5nIHRoZSBzYW1lIHJlc291cmNl Cm93bmVyIGFzIHRoZSBwYXJlbnQgU0VMRUNULCBzbyB0aGUgY3Jhc2ggY291bGQgbm90IGJlIHJl cHJvZHVjZWQuCkFkZGVkIGEgZGVkaWNhdGVkIHJlc291cmNlIG93bmVyIGFyb3VuZCB0aGUgU1BJ IGNhbGwgdG8gZW5zdXJlIHRoZSBpbm5lcgpyZXNvdXJjZSBvd25lciBpcyByZWxlYXNlZCBiZWZv cmUgdGhlIG91dGVyIHRyaWdnZXItZmlyaW5nIGJhdGNoIGNhbGxiYWNrCmZpcmVzLCB3aGljaCBp cyBuZWNlc3NhcnkgdG8gdHJpZ2dlciB0aGUgY3Jhc2ggdGhpcyB0ZXN0IGlzIG1lYW50IHRvCmNv dmVyLgotLS0KIHNyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICB8 ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgfCAg IDEgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NwaV9yZXNvd25lci9NYWtlZmlsZSAgIHwgIDIz ICsrKysKIC4uLi9leHBlY3RlZC9yaV9mYXN0cGF0aC5vdXQgICAgICAgICAgICAgICAgICB8IDEx OCArKysrKysrKysrKysrKysrKysKIC4uLi9tb2R1bGVzL3Rlc3Rfc3BpX3Jlc293bmVyL21lc29u LmJ1aWxkICAgICB8ICAzMSArKysrKwogLi4uL3Rlc3Rfc3BpX3Jlc293bmVyL3NxbC9yaV9mYXN0 cGF0aC5zcWwgICAgIHwgMTA3ICsrKysrKysrKysrKysrKysKIC4uLi90ZXN0X3NwaV9yZXNvd25l ci0tMS4wLnNxbCAgICAgICAgICAgICAgICB8ICAgOSArKwogLi4uL3Rlc3Rfc3BpX3Jlc293bmVy L3Rlc3Rfc3BpX3Jlc293bmVyLmMgICAgIHwgIDcwICsrKysrKysrKysrCiAuLi4vdGVzdF9zcGlf cmVzb3duZXIuY29udHJvbCAgICAgICAgICAgICAgICAgfCAgIDQgKwogOSBmaWxlcyBjaGFuZ2Vk LCAzNjQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMv dGVzdF9zcGlfcmVzb3duZXIvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9t b2R1bGVzL3Rlc3Rfc3BpX3Jlc293bmVyL2V4cGVjdGVkL3JpX2Zhc3RwYXRoLm91dAogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9zcGlfcmVzb3duZXIvbWVzb24uYnVp bGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc3BpX3Jlc293bmVy L3NxbC9yaV9mYXN0cGF0aC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVz L3Rlc3Rfc3BpX3Jlc293bmVyL3Rlc3Rfc3BpX3Jlc293bmVyLS0xLjAuc3FsCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NwaV9yZXNvd25lci90ZXN0X3NwaV9yZXNv d25lci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NwaV9yZXNv d25lci90ZXN0X3NwaV9yZXNvd25lci5jb250cm9sCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKaW5kZXggMGE3NGFiNWM4 NmYuLjAxNmIzMjhjOGM1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCisr KyBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKQEAgLTUyLDYgKzUyLDcgQEAgU1VCRElSUyA9 IFwKIAkJICB0ZXN0X3NobWVtIFwKIAkJICB0ZXN0X3NobV9tcSBcCiAJCSAgdGVzdF9zbHJ1IFwK KwkJICB0ZXN0X3NwaV9yZXNvd25lciBcCiAJCSAgdGVzdF90aWRzdG9yZSBcCiAJCSAgdW5zYWZl X3Rlc3RzIFwKIAkJICB3b3JrZXJfc3BpIFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv bWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCmluZGV4IDRiY2E0MmJi MzcwLi4zY2E0NTQwNjRkMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWls ZAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCkBAIC01Myw2ICs1Myw3IEBAIHN1 YmRpcigndGVzdF9zYXNscHJlcCcpCiBzdWJkaXIoJ3Rlc3Rfc2htZW0nKQogc3ViZGlyKCd0ZXN0 X3NobV9tcScpCiBzdWJkaXIoJ3Rlc3Rfc2xydScpCitzdWJkaXIoJ3Rlc3Rfc3BpX3Jlc293bmVy JykKIHN1YmRpcigndGVzdF90aWRzdG9yZScpCiBzdWJkaXIoJ3R5cGNhY2hlJykKIHN1YmRpcign dW5zYWZlX3Rlc3RzJykKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zcGlfcmVz b3duZXIvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc3BpX3Jlc293bmVyL01ha2Vm aWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41YTY5ZTNhM2M0Mgot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zcGlfcmVzb3duZXIvTWFr ZWZpbGUKQEAgLTAsMCArMSwyMyBAQAorIyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc3BpX3Jlc293 bmVyL01ha2VmaWxlCisKK01PRFVMRV9iaWcgPSB0ZXN0X3NwaV9yZXNvd25lcgorT0JKUyA9IFwK KwkkKFdJTjMyUkVTKSBcCisJdGVzdF9zcGlfcmVzb3duZXIubworUEdGSUxFREVTQyA9ICJ0ZXN0 X3NwaV9yZXNvd25lciAtIFNRTC1jYWxsYWJsZSBDIFNQSSBmdW5jdGlvbiB1bmRlciBhIGRlZGlj YXRlZCBSZXNvdXJjZU93bmVyIgorCitFWFRFTlNJT04gPSB0ZXN0X3NwaV9yZXNvd25lcgorREFU QSA9IHRlc3Rfc3BpX3Jlc293bmVyLS0xLjAuc3FsCisKK1JFR1JFU1MgPSByaV9mYXN0cGF0aAor CitpZmRlZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwg JChQR19DT05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X3NwaV9yZXNvd25lcgordG9wX2J1aWxkZGlyID0gLi4vLi4vLi4v Li4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUg JCh0b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NwaV9yZXNvd25lci9leHBlY3RlZC9yaV9mYXN0cGF0 aC5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc3BpX3Jlc293bmVyL2V4cGVjdGVkL3JpX2Zh c3RwYXRoLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWQ2YjBm N2M5YjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc3BpX3Jlc293 bmVyL2V4cGVjdGVkL3JpX2Zhc3RwYXRoLm91dApAQCAtMCwwICsxLDExOCBAQAorLS0KKy0tIFRl c3QgUkkgZmFzdC1wYXRoIEZLIGNoZWNrIHVuZGVyIEMtbGV2ZWwgU1BJLgorLS0KKy0tIFRoZSBS SSBmYXN0LXBhdGggY2FjaGVzIFBLIHJlbGF0aW9uIHJlZmVyZW5jZXMgaW4gcmlfRmFzdFBhdGhH ZXRFbnRyeSgpCistLSB1bmRlciB0aGUgY3VycmVudCByZXNvdXJjZSBvd25lci4gIFdoZW4gRksg dHJpZ2dlcnMgZmlyZSBpbnNpZGUgYQorLS0gQy1sZXZlbCBTUEkgY29udGV4dCB0aGF0IGNyZWF0 ZXMgYSBkZWRpY2F0ZWQgc2hvcnQtbGl2ZWQgcmVzb3VyY2Ugb3duZXIsCistLSB0aG9zZSByZWZl cmVuY2VzIG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBpbm5lciByZXNvdXJjZSBvd25lciBp cworLS0gcmVsZWFzZWQuICBUaGUgZml4IGVuc3VyZXMgYmF0Y2ggY2FsbGJhY2tzIGZpcmUgYXQg dGhlIHNhbWUgZmlyaW5nIGRlcHRoCistLSBhdCB3aGljaCB0aGV5IHdlcmUgcmVnaXN0ZXJlZCwg d2hpbGUgdGhlIGNvcnJlc3BvbmRpbmcgcmVzb3VyY2Ugb3duZXIKKy0tIGlzIHN0aWxsIGFsaXZl LiAgV2l0aG91dCB0aGlzLCByaV9GYXN0UGF0aFRlYXJkb3duIHdvdWxkIGNyYXNoIHdpdGgKKy0t IEFzc2VydChyZWwtPnJkX3JlZmNudCA+IDApIGluIGluZGV4X2Nsb3NlLgorLS0KKy0tIFNpbXBs ZSBQTC9wZ1NRTCBkb2VzIG5vdCB0cmlnZ2VyIHRoaXMgYmVjYXVzZSBpdHMgU1BJIGNvbm5lY3Rp b24gc3BhbnMKKy0tIHRoZSBlbnRpcmUgZnVuY3Rpb24gY2FsbCwgc28gaXRzIHJlc291cmNlIG93 bmVyIG91dGxpdmVzIHRoZSBiYXRjaAorLS0gY2FsbGJhY2suICBUaGUgY3JpdGljYWwgdGVzdCBj YXNlIHJlcXVpcmVzIGEgQyBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYQorLS0gZGVkaWNhdGVkIHNo b3J0LWxpdmVkIHJlc291cmNlIG93bmVyIGFyb3VuZCBpdHMgU1BJIGNhbGwuCistLQorQ1JFQVRF IEVYVEVOU0lPTiB0ZXN0X3NwaV9yZXNvd25lcjsKK0NSRUFURSBUQUJMRSByaV9mcF9wazEgKGlk IHNlcmlhbCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgcmlfZnBfcGsyIChpZCBzZXJpYWwg UFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIHJpX2ZwX3BrMyAoaWQgc2VyaWFsIFBSSU1BUlkg S0VZKTsKK0lOU0VSVCBJTlRPIHJpX2ZwX3BrMSBWQUxVRVMgKDEpOworSU5TRVJUIElOVE8gcmlf ZnBfcGsyIFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyByaV9mcF9wazMgVkFMVUVTICgxKTsKK0NS RUFURSBUQUJMRSByaV9mcF9mayAoCisgICAgaWQgc2VyaWFsIFBSSU1BUlkgS0VZLAorICAgIGEg aW50IFJFRkVSRU5DRVMgcmlfZnBfcGsxKGlkKSwKKyAgICBiIGludCBSRUZFUkVOQ0VTIHJpX2Zw X3BrMihpZCksCisgICAgYyBpbnQgUkVGRVJFTkNFUyByaV9mcF9wazMoaWQpLAorICAgIGQgaW50 IFJFRkVSRU5DRVMgcmlfZnBfcGsxKGlkKSwKKyAgICBlIGludCBSRUZFUkVOQ0VTIHJpX2ZwX3Br MihpZCksCisgICAgZiBpbnQgUkVGRVJFTkNFUyByaV9mcF9wazMoaWQpCispOworLS0gQy1sZXZl bCBTUEkgSU5TRVJUOiB0aGUgY3JpdGljYWwgdGVzdCBjYXNlLgorLS0gV2l0aG91dCB0aGUgZml4 IHRoaXMgY3Jhc2hlcyB0aGUgc2VydmVyLgorU0VMRUNUIHNwaV9leGVjX3NxbCgKKyAgICAnSU5T RVJUIElOVE8gcmlfZnBfZmsgKGEsIGIsIGMsIGQsIGUsIGYpIFZBTFVFUyAoMSwgMSwgMSwgMSwg MSwgMSknKTsKKyBzcGlfZXhlY19zcWwgCistLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCist LSBBZGRpdGlvbmFsIEMtbGV2ZWwgU1BJIElOU0VSVHMgdG8gZXhlcmNpc2UgYmF0Y2ggcmV1c2Ug YWNyb3NzIGNhbGxzLgorLS0gVXNlIGRpZmZlcmVudCBjb2x1bW4gb3JkZXJpbmdzIHRvIGVuc3Vy ZSBlYWNoIGlzIGEgZGlzdGluY3Qgc3RhdGVtZW50LgorU0VMRUNUIHNwaV9leGVjX3NxbCgKKyAg ICAnSU5TRVJUIElOVE8gcmlfZnBfZmsgKGYsIGUsIGQsIGMsIGIsIGEpIFZBTFVFUyAoMSwgMSwg MSwgMSwgMSwgMSknKTsKKyBzcGlfZXhlY19zcWwgCistLS0tLS0tLS0tLS0tLQorIAorKDEgcm93 KQorCitTRUxFQ1Qgc3BpX2V4ZWNfc3FsKAorICAgICdJTlNFUlQgSU5UTyByaV9mcF9mayAoYSwg YywgZSwgYiwgZCwgZikgVkFMVUVTICgxLCAxLCAxLCAxLCAxLCAxKScpOworIHNwaV9leGVjX3Nx bCAKKy0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIEMtbGV2ZWwgU1BJIHdpdGggRksg dmlvbGF0aW9uOiBzaG91bGQgZXJyb3IsIG5vdCBjcmFzaAorU0VMRUNUIHNwaV9leGVjX3NxbCgK KyAgICAnSU5TRVJUIElOVE8gcmlfZnBfZmsgKGEsIGIsIGMsIGQsIGUsIGYpIFZBTFVFUyAoOTk5 LCAxLCAxLCAxLCAxLCAxKScpOworRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxlICJy aV9mcF9mayIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAicmlfZnBfZmtfYV9ma2V5 IgorREVUQUlMOiAgS2V5IChhKT0oOTk5KSBpcyBub3QgcHJlc2VudCBpbiB0YWJsZSAicmlfZnBf cGsxIi4KK0NPTlRFWFQ6ICBTUUwgc3RhdGVtZW50ICJJTlNFUlQgSU5UTyByaV9mcF9mayAoYSwg YiwgYywgZCwgZSwgZikgVkFMVUVTICg5OTksIDEsIDEsIDEsIDEsIDEpIgorLS0gTmVzdGVkOiBQ TC9wZ1NRTCBjYWxsaW5nIEMgU1BJIChtaW1pY3MgUG9zdEdJUyB0b1RvcG9HZW9tIHBhdHRlcm4p CitDUkVBVEUgRlVOQ1RJT04gcGxwZ3NxbF9jYWxsc19jX3NwaSgpIFJFVFVSTlMgdm9pZCBBUyAk JAorREVDTEFSRQorICAgIGluc19zdG10IHRleHQgOj0gJ0lOU0VSVCBJTlRPIHJpX2ZwX2ZrIChh LCBiLCBjLCBkLCBlLCBmKSBWQUxVRVMgKDEsIDEsIDEsIDEsIDEsIDEpJzsKK0JFR0lOCisgICAg UEVSRk9STSBzcGlfZXhlY19zcWwoaW5zX3N0bXQpOworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3Nx bDsKK1NFTEVDVCBwbHBnc3FsX2NhbGxzX2Nfc3BpKCk7CisgcGxwZ3NxbF9jYWxsc19jX3NwaSAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBBRlRFUiB0cmlnZ2VyIHRo YXQgdXNlcyBDLWxldmVsIFNQSSB0byBpbnNlcnQgaW50byBhbiBGSy1yZWZlcmVuY2luZyB0YWJs ZS4KKy0tIFRoZSBGSyBiYXRjaCBjYWxsYmFjayBpcyByZWdpc3RlcmVkIGF0IHRoZSBpbm5lciBT UEkncyBmaXJpbmcgZGVwdGggYW5kCistLSBtdXN0IGZpcmUgYmVmb3JlIHRoZSBpbm5lciByZXNv dXJjZSBvd25lciBpcyByZWxlYXNlZC4gIFRoaXMgZXhlcmNpc2VzCistLSB0aGUgZGVwdGgtbWF0 Y2hlZCBjYWxsYmFjayBmaXJpbmcgaW50cm9kdWNlZCB0byBmaXggdGhhdCBjcmFzaC4KK0NSRUFU RSBUQUJMRSByaV9mcF9vdXRlciAoaWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBy aV9mcF9pbm5lciAoaWQgaW50IFJFRkVSRU5DRVMgcmlfZnBfcGsxKGlkKSk7CitDUkVBVEUgRlVO Q1RJT04gb3V0ZXJfdHJpZ2dlcl9zcGlfb2soKSBSRVRVUk5TIHRyaWdnZXIgQVMgJCQKK0JFR0lO CisgICAgUEVSRk9STSBzcGlfZXhlY19zcWwoJ0lOU0VSVCBJTlRPIHJpX2ZwX2lubmVyIFZBTFVF UyAoMSknKTsKKyAgICBSRVRVUk4gTkVXOworRU5EICQkIExBTkdVQUdFIHBscGdzcWw7CitDUkVB VEUgVFJJR0dFUiBvdXRlcl90ZyBBRlRFUiBJTlNFUlQgT04gcmlfZnBfb3V0ZXIKKyAgICBGT1Ig RUFDSCBST1cgRVhFQ1VURSBGVU5DVElPTiBvdXRlcl90cmlnZ2VyX3NwaV9vaygpOworLS0gRmly ZXMgb3V0ZXJfdGcsIHdob3NlIFBML3BnU1FMIGJvZHkgY2FsbHMgc3BpX2V4ZWNfc3FsKCkuICBU aGUgQyBmdW5jdGlvbgorLS0gY3JlYXRlcyBhIGRlZGljYXRlZCByZXNvdXJjZSBvd25lcjsgdGhl IEZLIGJhdGNoIGNhbGxiYWNrIGZpcmVzIGF0IHRoZQorLS0gaW5uZXIgU1BJJ3MgZmlyaW5nIGRl cHRoIGJlZm9yZSB0aGF0IHJlc291cmNlIG93bmVyIGlzIHJlbGVhc2VkLgorSU5TRVJUIElOVE8g cmlfZnBfb3V0ZXIgVkFMVUVTICgxKTsKK0NSRUFURSBGVU5DVElPTiBvdXRlcl90cmlnZ2VyX3Nw aV9mYWlsKCkgUkVUVVJOUyB0cmlnZ2VyIEFTICQkCitCRUdJTgorICAgIFBFUkZPUk0gc3BpX2V4 ZWNfc3FsKCdJTlNFUlQgSU5UTyByaV9mcF9pbm5lciBWQUxVRVMgKDMpJyk7CisgICAgUkVUVVJO IE5FVzsKK0VORCAkJCBMQU5HVUFHRSBwbHBnc3FsOworRFJPUCBUUklHR0VSIG91dGVyX3RnIE9O IHJpX2ZwX291dGVyOworRFJPUCBGVU5DVElPTiBvdXRlcl90cmlnZ2VyX3NwaV9vaygpOworQ1JF QVRFIFRSSUdHRVIgb3V0ZXJfdGcgQUZURVIgSU5TRVJUIE9OIHJpX2ZwX291dGVyCisgICAgRk9S IEVBQ0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04gb3V0ZXJfdHJpZ2dlcl9zcGlfZmFpbCgpOworLS0g IExpa2UgYWJvdmUgYnV0IHRoZSBpbm5lciBpbnNlcnQgZmFpbHMuCitJTlNFUlQgSU5UTyByaV9m cF9vdXRlciBWQUxVRVMgKDIpOworRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxlICJy aV9mcF9pbm5lciIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAicmlfZnBfaW5uZXJf aWRfZmtleSIKK0RFVEFJTDogIEtleSAoaWQpPSgzKSBpcyBub3QgcHJlc2VudCBpbiB0YWJsZSAi cmlfZnBfcGsxIi4KK0NPTlRFWFQ6ICBTUUwgc3RhdGVtZW50ICJJTlNFUlQgSU5UTyByaV9mcF9p bm5lciBWQUxVRVMgKDMpIgorU1FMIHN0YXRlbWVudCAiU0VMRUNUIHNwaV9leGVjX3NxbCgnSU5T RVJUIElOVE8gcmlfZnBfaW5uZXIgVkFMVUVTICgzKScpIgorUEwvcGdTUUwgZnVuY3Rpb24gb3V0 ZXJfdHJpZ2dlcl9zcGlfZmFpbCgpIGxpbmUgMyBhdCBQRVJGT1JNCitEUk9QIFRSSUdHRVIgb3V0 ZXJfdGcgT04gcmlfZnBfb3V0ZXI7CitEUk9QIEZVTkNUSU9OIG91dGVyX3RyaWdnZXJfc3BpX2Zh aWwoKTsKK0RST1AgVEFCTEUgcmlfZnBfaW5uZXIsIHJpX2ZwX291dGVyOworLS0gQ2xlYW51cAor RFJPUCBUQUJMRSByaV9mcF9mazsKK0RST1AgVEFCTEUgcmlfZnBfcGszLCByaV9mcF9wazIsIHJp X2ZwX3BrMTsKK0RST1AgRVhURU5TSU9OIHRlc3Rfc3BpX3Jlc293bmVyOwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NwaV9yZXNvd25lci9tZXNvbi5idWlsZCBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9zcGlfcmVzb3duZXIvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZiYjAyN2UwNWM3Ci0tLSAvZGV2L251bGwKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X3NwaV9yZXNvd25lci9tZXNvbi5idWlsZApAQCAtMCwwICsxLDMx IEBACit0ZXN0X3NwaV9yZXNvd25lcl9zb3VyY2VzID0gZmlsZXMoCisgICd0ZXN0X3NwaV9yZXNv d25lci5jJywKKykKKworaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCisgIHRlc3Rfc3BpX3Jl c293bmVyX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9h cmdzOiBbCisgICAgJy0tTkFNRScsICd0ZXN0X3NwaV9yZXNvd25lcicsCisgICAgJy0tRklMRURF U0MnLCAndGVzdF9zcGlfcmVzb3duZXIgLSBTUUwtY2FsbGFibGUgQyBTUEkgZnVuY3Rpb24gdW5k ZXIgYSBkZWRpY2F0ZWQgUmVzb3VyY2VPd25lcicsXSkKK2VuZGlmCisKK3Rlc3Rfc3BpX3Jlc293 bmVyID0gc2hhcmVkX21vZHVsZSgndGVzdF9zcGlfcmVzb3duZXInLAorICB0ZXN0X3NwaV9yZXNv d25lcl9zb3VyY2VzLAorICBrd2FyZ3M6IHBnX3Rlc3RfbW9kX2FyZ3MsCispCit0ZXN0X2luc3Rh bGxfbGlicyArPSB0ZXN0X3NwaV9yZXNvd25lcgorCit0ZXN0X2luc3RhbGxfZGF0YSArPSBmaWxl cygKKyAgJ3Rlc3Rfc3BpX3Jlc293bmVyLmNvbnRyb2wnLAorICAndGVzdF9zcGlfcmVzb3duZXIt LTEuMC5zcWwnLAorKQorCit0ZXN0cyArPSB7CisgICduYW1lJzogJ3Rlc3Rfc3BpX3Jlc293bmVy JywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1 cnJlbnRfYnVpbGRfZGlyKCksCisgICdyZWdyZXNzJzogeworICAgICdzcWwnOiBbCisgICAgICAn cmlfZmFzdHBhdGgnLAorICAgIF0sCisgIH0sCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3Rfc3BpX3Jlc293bmVyL3NxbC9yaV9mYXN0cGF0aC5zcWwgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3Rfc3BpX3Jlc293bmVyL3NxbC9yaV9mYXN0cGF0aC5zcWwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ1MTdiMjQzN2M0Ci0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NwaV9yZXNvd25lci9zcWwvcmlfZmFzdHBhdGguc3FsCkBA IC0wLDAgKzEsMTA3IEBACistLQorLS0gVGVzdCBSSSBmYXN0LXBhdGggRksgY2hlY2sgdW5kZXIg Qy1sZXZlbCBTUEkuCistLQorLS0gVGhlIFJJIGZhc3QtcGF0aCBjYWNoZXMgUEsgcmVsYXRpb24g cmVmZXJlbmNlcyBpbiByaV9GYXN0UGF0aEdldEVudHJ5KCkKKy0tIHVuZGVyIHRoZSBjdXJyZW50 IHJlc291cmNlIG93bmVyLiAgV2hlbiBGSyB0cmlnZ2VycyBmaXJlIGluc2lkZSBhCistLSBDLWxl dmVsIFNQSSBjb250ZXh0IHRoYXQgY3JlYXRlcyBhIGRlZGljYXRlZCBzaG9ydC1saXZlZCByZXNv dXJjZSBvd25lciwKKy0tIHRob3NlIHJlZmVyZW5jZXMgbXVzdCBiZSByZWxlYXNlZCBiZWZvcmUg dGhlIGlubmVyIHJlc291cmNlIG93bmVyIGlzCistLSByZWxlYXNlZC4gIFRoZSBmaXggZW5zdXJl cyBiYXRjaCBjYWxsYmFja3MgZmlyZSBhdCB0aGUgc2FtZSBmaXJpbmcgZGVwdGgKKy0tIGF0IHdo aWNoIHRoZXkgd2VyZSByZWdpc3RlcmVkLCB3aGlsZSB0aGUgY29ycmVzcG9uZGluZyByZXNvdXJj ZSBvd25lcgorLS0gaXMgc3RpbGwgYWxpdmUuICBXaXRob3V0IHRoaXMsIHJpX0Zhc3RQYXRoVGVh cmRvd24gd291bGQgY3Jhc2ggd2l0aAorLS0gQXNzZXJ0KHJlbC0+cmRfcmVmY250ID4gMCkgaW4g aW5kZXhfY2xvc2UuCistLQorLS0gU2ltcGxlIFBML3BnU1FMIGRvZXMgbm90IHRyaWdnZXIgdGhp cyBiZWNhdXNlIGl0cyBTUEkgY29ubmVjdGlvbiBzcGFucworLS0gdGhlIGVudGlyZSBmdW5jdGlv biBjYWxsLCBzbyBpdHMgcmVzb3VyY2Ugb3duZXIgb3V0bGl2ZXMgdGhlIGJhdGNoCistLSBjYWxs YmFjay4gIFRoZSBjcml0aWNhbCB0ZXN0IGNhc2UgcmVxdWlyZXMgYSBDIGZ1bmN0aW9uIHRoYXQg Y3JlYXRlcyBhCistLSBkZWRpY2F0ZWQgc2hvcnQtbGl2ZWQgcmVzb3VyY2Ugb3duZXIgYXJvdW5k IGl0cyBTUEkgY2FsbC4KKy0tCitDUkVBVEUgRVhURU5TSU9OIHRlc3Rfc3BpX3Jlc293bmVyOwor CitDUkVBVEUgVEFCTEUgcmlfZnBfcGsxIChpZCBzZXJpYWwgUFJJTUFSWSBLRVkpOworQ1JFQVRF IFRBQkxFIHJpX2ZwX3BrMiAoaWQgc2VyaWFsIFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBy aV9mcF9wazMgKGlkIHNlcmlhbCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyByaV9mcF9wazEg VkFMVUVTICgxKTsKK0lOU0VSVCBJTlRPIHJpX2ZwX3BrMiBWQUxVRVMgKDEpOworSU5TRVJUIElO VE8gcmlfZnBfcGszIFZBTFVFUyAoMSk7CisKK0NSRUFURSBUQUJMRSByaV9mcF9mayAoCisgICAg aWQgc2VyaWFsIFBSSU1BUlkgS0VZLAorICAgIGEgaW50IFJFRkVSRU5DRVMgcmlfZnBfcGsxKGlk KSwKKyAgICBiIGludCBSRUZFUkVOQ0VTIHJpX2ZwX3BrMihpZCksCisgICAgYyBpbnQgUkVGRVJF TkNFUyByaV9mcF9wazMoaWQpLAorICAgIGQgaW50IFJFRkVSRU5DRVMgcmlfZnBfcGsxKGlkKSwK KyAgICBlIGludCBSRUZFUkVOQ0VTIHJpX2ZwX3BrMihpZCksCisgICAgZiBpbnQgUkVGRVJFTkNF UyByaV9mcF9wazMoaWQpCispOworCistLSBDLWxldmVsIFNQSSBJTlNFUlQ6IHRoZSBjcml0aWNh bCB0ZXN0IGNhc2UuCistLSBXaXRob3V0IHRoZSBmaXggdGhpcyBjcmFzaGVzIHRoZSBzZXJ2ZXIu CitTRUxFQ1Qgc3BpX2V4ZWNfc3FsKAorICAgICdJTlNFUlQgSU5UTyByaV9mcF9mayAoYSwgYiwg YywgZCwgZSwgZikgVkFMVUVTICgxLCAxLCAxLCAxLCAxLCAxKScpOworCistLSBBZGRpdGlvbmFs IEMtbGV2ZWwgU1BJIElOU0VSVHMgdG8gZXhlcmNpc2UgYmF0Y2ggcmV1c2UgYWNyb3NzIGNhbGxz LgorLS0gVXNlIGRpZmZlcmVudCBjb2x1bW4gb3JkZXJpbmdzIHRvIGVuc3VyZSBlYWNoIGlzIGEg ZGlzdGluY3Qgc3RhdGVtZW50LgorU0VMRUNUIHNwaV9leGVjX3NxbCgKKyAgICAnSU5TRVJUIElO VE8gcmlfZnBfZmsgKGYsIGUsIGQsIGMsIGIsIGEpIFZBTFVFUyAoMSwgMSwgMSwgMSwgMSwgMSkn KTsKK1NFTEVDVCBzcGlfZXhlY19zcWwoCisgICAgJ0lOU0VSVCBJTlRPIHJpX2ZwX2ZrIChhLCBj LCBlLCBiLCBkLCBmKSBWQUxVRVMgKDEsIDEsIDEsIDEsIDEsIDEpJyk7CisKKy0tIEMtbGV2ZWwg U1BJIHdpdGggRksgdmlvbGF0aW9uOiBzaG91bGQgZXJyb3IsIG5vdCBjcmFzaAorU0VMRUNUIHNw aV9leGVjX3NxbCgKKyAgICAnSU5TRVJUIElOVE8gcmlfZnBfZmsgKGEsIGIsIGMsIGQsIGUsIGYp IFZBTFVFUyAoOTk5LCAxLCAxLCAxLCAxLCAxKScpOworCistLSBOZXN0ZWQ6IFBML3BnU1FMIGNh bGxpbmcgQyBTUEkgKG1pbWljcyBQb3N0R0lTIHRvVG9wb0dlb20gcGF0dGVybikKK0NSRUFURSBG VU5DVElPTiBwbHBnc3FsX2NhbGxzX2Nfc3BpKCkgUkVUVVJOUyB2b2lkIEFTICQkCitERUNMQVJF CisgICAgaW5zX3N0bXQgdGV4dCA6PSAnSU5TRVJUIElOVE8gcmlfZnBfZmsgKGEsIGIsIGMsIGQs IGUsIGYpIFZBTFVFUyAoMSwgMSwgMSwgMSwgMSwgMSknOworQkVHSU4KKyAgICBQRVJGT1JNIHNw aV9leGVjX3NxbChpbnNfc3RtdCk7CitFTkQ7CiskJCBMQU5HVUFHRSBwbHBnc3FsOworCitTRUxF Q1QgcGxwZ3NxbF9jYWxsc19jX3NwaSgpOworCistLSBBRlRFUiB0cmlnZ2VyIHRoYXQgdXNlcyBD LWxldmVsIFNQSSB0byBpbnNlcnQgaW50byBhbiBGSy1yZWZlcmVuY2luZyB0YWJsZS4KKy0tIFRo ZSBGSyBiYXRjaCBjYWxsYmFjayBpcyByZWdpc3RlcmVkIGF0IHRoZSBpbm5lciBTUEkncyBmaXJp bmcgZGVwdGggYW5kCistLSBtdXN0IGZpcmUgYmVmb3JlIHRoZSBpbm5lciByZXNvdXJjZSBvd25l ciBpcyByZWxlYXNlZC4gIFRoaXMgZXhlcmNpc2VzCistLSB0aGUgZGVwdGgtbWF0Y2hlZCBjYWxs YmFjayBmaXJpbmcgaW50cm9kdWNlZCB0byBmaXggdGhhdCBjcmFzaC4KK0NSRUFURSBUQUJMRSBy aV9mcF9vdXRlciAoaWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSByaV9mcF9pbm5l ciAoaWQgaW50IFJFRkVSRU5DRVMgcmlfZnBfcGsxKGlkKSk7CisKK0NSRUFURSBGVU5DVElPTiBv dXRlcl90cmlnZ2VyX3NwaV9vaygpIFJFVFVSTlMgdHJpZ2dlciBBUyAkJAorQkVHSU4KKyAgICBQ RVJGT1JNIHNwaV9leGVjX3NxbCgnSU5TRVJUIElOVE8gcmlfZnBfaW5uZXIgVkFMVUVTICgxKScp OworICAgIFJFVFVSTiBORVc7CitFTkQgJCQgTEFOR1VBR0UgcGxwZ3NxbDsKKworQ1JFQVRFIFRS SUdHRVIgb3V0ZXJfdGcgQUZURVIgSU5TRVJUIE9OIHJpX2ZwX291dGVyCisgICAgRk9SIEVBQ0gg Uk9XIEVYRUNVVEUgRlVOQ1RJT04gb3V0ZXJfdHJpZ2dlcl9zcGlfb2soKTsKKworLS0gRmlyZXMg b3V0ZXJfdGcsIHdob3NlIFBML3BnU1FMIGJvZHkgY2FsbHMgc3BpX2V4ZWNfc3FsKCkuICBUaGUg QyBmdW5jdGlvbgorLS0gY3JlYXRlcyBhIGRlZGljYXRlZCByZXNvdXJjZSBvd25lcjsgdGhlIEZL IGJhdGNoIGNhbGxiYWNrIGZpcmVzIGF0IHRoZQorLS0gaW5uZXIgU1BJJ3MgZmlyaW5nIGRlcHRo IGJlZm9yZSB0aGF0IHJlc291cmNlIG93bmVyIGlzIHJlbGVhc2VkLgorSU5TRVJUIElOVE8gcmlf ZnBfb3V0ZXIgVkFMVUVTICgxKTsKKworQ1JFQVRFIEZVTkNUSU9OIG91dGVyX3RyaWdnZXJfc3Bp X2ZhaWwoKSBSRVRVUk5TIHRyaWdnZXIgQVMgJCQKK0JFR0lOCisgICAgUEVSRk9STSBzcGlfZXhl Y19zcWwoJ0lOU0VSVCBJTlRPIHJpX2ZwX2lubmVyIFZBTFVFUyAoMyknKTsKKyAgICBSRVRVUk4g TkVXOworRU5EICQkIExBTkdVQUdFIHBscGdzcWw7CisKK0RST1AgVFJJR0dFUiBvdXRlcl90ZyBP TiByaV9mcF9vdXRlcjsKK0RST1AgRlVOQ1RJT04gb3V0ZXJfdHJpZ2dlcl9zcGlfb2soKTsKKwor Q1JFQVRFIFRSSUdHRVIgb3V0ZXJfdGcgQUZURVIgSU5TRVJUIE9OIHJpX2ZwX291dGVyCisgICAg Rk9SIEVBQ0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04gb3V0ZXJfdHJpZ2dlcl9zcGlfZmFpbCgpOwor CistLSAgTGlrZSBhYm92ZSBidXQgdGhlIGlubmVyIGluc2VydCBmYWlscy4KK0lOU0VSVCBJTlRP IHJpX2ZwX291dGVyIFZBTFVFUyAoMik7CisKK0RST1AgVFJJR0dFUiBvdXRlcl90ZyBPTiByaV9m cF9vdXRlcjsKK0RST1AgRlVOQ1RJT04gb3V0ZXJfdHJpZ2dlcl9zcGlfZmFpbCgpOworRFJPUCBU QUJMRSByaV9mcF9pbm5lciwgcmlfZnBfb3V0ZXI7CisKKy0tIENsZWFudXAKK0RST1AgVEFCTEUg cmlfZnBfZms7CitEUk9QIFRBQkxFIHJpX2ZwX3BrMywgcmlfZnBfcGsyLCByaV9mcF9wazE7CitE Uk9QIEVYVEVOU0lPTiB0ZXN0X3NwaV9yZXNvd25lcjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9zcGlfcmVzb3duZXIvdGVzdF9zcGlfcmVzb3duZXItLTEuMC5zcWwgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3Rfc3BpX3Jlc293bmVyL3Rlc3Rfc3BpX3Jlc293bmVyLS0xLjAuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yOWVmNzBlZTBkYwotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zcGlfcmVzb3duZXIvdGVzdF9z cGlfcmVzb3duZXItLTEuMC5zcWwKQEAgLTAsMCArMSw5IEBACisvKiBzcmMvdGVzdC9tb2R1bGVz L3Rlc3Rfc3BpX3Jlc293bmVyL3Rlc3Rfc3BpX3Jlc293bmVyLS0xLjAuc3FsICovCisKKy0tIGNv bXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVB VEUgRVhURU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gdGVzdF9zcGlfcmVzb3du ZXIiIHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gc3BpX2V4ZWNf c3FsKHF1ZXJ5IHRleHQpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAnc3Bp X2V4ZWNfc3FsJworTEFOR1VBR0UgQyBTVFJJQ1Q7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3Rfc3BpX3Jlc293bmVyL3Rlc3Rfc3BpX3Jlc293bmVyLmMgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3Rfc3BpX3Jlc293bmVyL3Rlc3Rfc3BpX3Jlc293bmVyLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjAzMDYxMzliNWMwCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NwaV9yZXNvd25lci90ZXN0X3NwaV9yZXNvd25lci5jCkBA IC0wLDAgKzEsNzAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHRlc3Rfc3BpX3Jlc293 bmVyLmMKKyAqCQlTUUwtY2FsbGFibGUgQyBmdW5jdGlvbiB0aGF0IHVzZXMgU1BJIHRvIGV4ZWN1 dGUgYSBxdWVyeS4KKyAqCisgKgkJVXNlZnVsIGZvciB0ZXN0aW5nIGNvZGUgcGF0aHMgdGhhdCBv bmx5IHRyaWdnZXIgdW5kZXIgQy1sZXZlbAorICoJCVNQSSAobm90IFBML3BnU1FMKSwgc3VjaCBh cyByZXNvdXJjZSBvd25lciBpbnRlcmFjdGlvbnMgd2l0aAorICoJCVJJIGZhc3QtcGF0aCBGSyBj aGVja3MuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkJc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X3NwaV9yZXNvd25lci90ZXN0X3NwaV9yZXNvd25lci5jCisgKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiZXhlY3V0b3Iv c3BpLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKworUEdfTU9EVUxFX01BR0lDOwor CitQR19GVU5DVElPTl9JTkZPX1YxKHNwaV9leGVjX3NxbCk7CisKKy8qCisgKiBzcGlfZXhlY19z cWwocXVlcnkgdGV4dCkgLSBleGVjdXRlIGEgU1FMIHF1ZXJ5IHZpYSBTUEkuCisgKgorICogT3Bl bnMgYSBmcmVzaCBTUEkgY29ubmVjdGlvbiwgZXhlY3V0ZXMgdGhlIHF1ZXJ5LCBhbmQgY2xvc2Vz IHRoZQorICogY29ubmVjdGlvbi4gIENyZWF0ZXMgYSBkZWRpY2F0ZWQgY2hpbGQgcmVzb3VyY2Ug b3duZXIgYXJvdW5kIHRoZQorICogU1BJX2V4ZWN1dGUgY2FsbCBhbmQgcmVsZWFzZXMgaXQgYmVm b3JlIHJldHVybmluZywgZW5zdXJpbmcgdGhhdAorICogYW55IHJlc291cmNlcyByZWdpc3RlcmVk IHVuZGVyIGl0IChzdWNoIGFzIHJlbGF0aW9uIHJlZmVyZW5jZXMKKyAqIG9wZW5lZCBieSBSSSBm YXN0LXBhdGggRksgY2hlY2tzKSBhcmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBvdXRlcgorICogdHJp Z2dlci1maXJpbmcgYmF0Y2ggY2FsbGJhY2sgZmlyZXMuICBUaGlzIHJlcHJvZHVjZXMgdGhlIHJl c291cmNlCisgKiBvd25lciBtaXNtYXRjaCB0aGF0IG9jY3VycyB3aXRoIEMtbGFuZ3VhZ2UgZXh0 ZW5zaW9ucyBsaWtlIFBvc3RHSVMKKyAqIHRvcG9sb2d5IGZ1bmN0aW9ucywgd2hpY2ggY2Fubm90 IGJlIHRyaWdnZXJlZCBmcm9tIFBML3BnU1FMIHNpbmNlCisgKiBQTC9wZ1NRTCdzIFNQSSBjb25u ZWN0aW9uIHNwYW5zIHRoZSBlbnRpcmUgZnVuY3Rpb24gY2FsbC4KKyAqLworRGF0dW0KK3NwaV9l eGVjX3NxbChQR19GVU5DVElPTl9BUkdTKQoreworCWNvbnN0IGNoYXIgKnF1ZXJ5ID0gdGV4dF90 b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwlpbnQJCQlyZXQ7CisJUmVzb3VyY2VP d25lciBzYXZlID0gQ3VycmVudFJlc291cmNlT3duZXI7CisJUmVzb3VyY2VPd25lciBjaGlsZG93 bmVyID0gUmVzb3VyY2VPd25lckNyZWF0ZShzYXZlLCAidGVzdF9zcGkgaW5uZXIiKTsKKworCVNQ SV9jb25uZWN0KCk7CisKKwlDdXJyZW50UmVzb3VyY2VPd25lciA9IGNoaWxkb3duZXI7CisJcmV0 ID0gU1BJX2V4ZWN1dGUocXVlcnksIGZhbHNlLCAwKTsKKworCWlmIChyZXQgPCAwKQorCQllbG9n KEVSUk9SLCAiU1BJX2V4ZWN1dGUgZmFpbGVkOiBlcnJvciBjb2RlICVkIiwgcmV0KTsKKworCVNQ SV9maW5pc2goKTsKKworCUN1cnJlbnRSZXNvdXJjZU93bmVyID0gc2F2ZTsKKwlSZXNvdXJjZU93 bmVyUmVsZWFzZShjaGlsZG93bmVyLAorCQkJCQkJIFJFU09VUkNFX1JFTEVBU0VfQkVGT1JFX0xP Q0tTLAorCQkJCQkJIHRydWUsIGZhbHNlKTsKKwlSZXNvdXJjZU93bmVyUmVsZWFzZShjaGlsZG93 bmVyLAorCQkJCQkJIFJFU09VUkNFX1JFTEVBU0VfTE9DS1MsCisJCQkJCQkgdHJ1ZSwgZmFsc2Up OworCVJlc291cmNlT3duZXJSZWxlYXNlKGNoaWxkb3duZXIsCisJCQkJCQkgUkVTT1VSQ0VfUkVM RUFTRV9BRlRFUl9MT0NLUywKKwkJCQkJCSB0cnVlLCBmYWxzZSk7CisJUmVzb3VyY2VPd25lckRl bGV0ZShjaGlsZG93bmVyKTsKKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc3BpX3Jlc293bmVyL3Rlc3Rfc3BpX3Jlc293bmVyLmNvbnRy b2wgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc3BpX3Jlc293bmVyL3Rlc3Rfc3BpX3Jlc293bmVy LmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIxMjBhZTk0 NDJmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NwaV9yZXNvd25l ci90ZXN0X3NwaV9yZXNvd25lci5jb250cm9sCkBAIC0wLDAgKzEsNCBAQAorY29tbWVudCA9ICdU ZXN0IFNRTC1jYWxsYWJsZSBDIGZ1bmN0aW9uIHRoYXQgdXNlcyBTUEkgdXNpbmcgZGVkaWNhdGVk IFJlc291cmNlT3duZXInCitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1l ID0gJyRsaWJkaXIvdGVzdF9zcGlfcmVzb3duZXInCityZWxvY2F0YWJsZSA9IHRydWUKLS0gCjIu NDcuMwoK --000000000000c1cd0b064eeff19b Content-Type: application/octet-stream; name="v2-0002-Fix-RI-fast-path-crash-under-nested-C-level-SPI.patch" Content-Disposition: attachment; filename="v2-0002-Fix-RI-fast-path-crash-under-nested-C-level-SPI.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnpv33ys0 RnJvbSAzMTJmYWQxYzM2ZTA2NGFiOWU3ZGMxNzgwNTc1ZThjMDdmMzAwNzUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFdlZCwgOCBBcHIgMjAyNiAxODoxNzo0MCArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjIg Mi8yXSBGaXggUkkgZmFzdC1wYXRoIGNyYXNoIHVuZGVyIG5lc3RlZCBDLWxldmVsIFNQSQoKV2hl biBhIEMtbGFuZ3VhZ2UgZnVuY3Rpb24gdXNlcyBTUElfY29ubmVjdC9TUElfZXhlY3V0ZS9TUElf ZmluaXNoIHRvCklOU0VSVCBpbnRvIGEgdGFibGUgd2l0aCBGSyBjb25zdHJhaW50cywgdGhlIEZL IEFGVEVSIHRyaWdnZXJzCnJlZ2lzdGVyIHJpX0Zhc3RQYXRoRW5kQmF0Y2ggYXMgYSBiYXRjaCBj YWxsYmFjayBhbmQgb3BlbiBQSyByZWxhdGlvbnMKdW5kZXIgdGhlIFNQSSBwb3J0YWwncyByZXNv dXJjZSBvd25lci4gIEZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcwp3YXMgc3VwcHJlc3Nl ZCBhdCB0aGF0IHBvaW50IGJ5IHRoZSBxdWVyeV9kZXB0aCA+IDAgZ3VhcmQsIGRlZmVycmluZwp0 ZWFyZG93biB0byB0aGUgb3V0ZXIgcXVlcnkncyBBZnRlclRyaWdnZXJFbmRRdWVyeS4gIEJ5IHRo ZW4gdGhlIFNQSQpwb3J0YWwncyByZXNvdXJjZSBvd25lciBoYWQgYmVlbiByZWxlYXNlZCwgZGVj cmVtZW50aW5nIHRoZSBjYWNoZWQKcmVsYXRpb25zJyByZWZjb3VudHMgdG8gemVyby4gIHJpX0Zh c3RQYXRoVGVhcmRvd24gdGhlbiBjcmFzaGVkCmF0dGVtcHRpbmcgdG8gY2xvc2UgdGhlbToKCiAg VFJBUDogZmFpbGVkIEFzc2VydCgicmVsLT5yZF9yZWZjbnQgPiAwIikKCkZpeCBieSB0YWdnaW5n IGVhY2ggQWZ0ZXJUcmlnZ2VyQ2FsbGJhY2tJdGVtIHdpdGggdGhlCmFmdGVyVHJpZ2dlckZpcmlu Z0RlcHRoIChhZGRlZCBpbiA1YzU0YzNlZDFiOSkgYXQgcmVnaXN0cmF0aW9uIHRpbWUKYW5kIGZp cmluZyBvbmx5IGNhbGxiYWNrcyB3aG9zZSBkZXB0aCBtYXRjaGVzIHRoZSBjdXJyZW50IGRlcHRo LiAgVGhpcwpyZXBsYWNlcyB0aGUgcXVlcnlfZGVwdGggPiAwIHN1cHByZXNzaW9uIGd1YXJkLiBD YWxsYmFja3Mgbm93IGZpcmUgYXQKdGhlIHNhbWUgZmlyaW5nIGRlcHRoIGF0IHdoaWNoIHRoZXkg d2VyZSByZWdpc3RlcmVkLCB3aGlsZSB0aGUKcmVzb3VyY2Ugb3duZXIgdGhhdCB3YXMgYWN0aXZl IGR1cmluZyByZWdpc3RyYXRpb24gaXMgc3RpbGwgYWxpdmUsCmVsaW1pbmF0aW5nIHRoZSBtaXNt YXRjaC4KCldoaWxlIGF0IGl0LCBlbnN1cmUgY2FsbGJhY2tzIGFyZSBwcm9wZXJseSBhY2NvdW50 ZWQgZm9yIGF0IGFsbAp0cmFuc2FjdGlvbiBib3VuZGFyaWVzLCBhcyBjbGVhbnVwIG9mIGI3YjI3 ZWI0MWE1YzogYXNzZXJ0IG9uIGNvbW1pdAp0aGF0IG5vIGNhbGxiYWNrcyByZW1haW4gdW5maXJl ZCwgYW5kIGRpc2NhcmQgYW55IHJlbWFpbmluZyBjYWxsYmFja3MKb24gdHJhbnNhY3Rpb24gYWJv cnQuICBBbHNvIHJlc3RydWN0dXJlIEZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcygpCnRv IHVwZGF0ZSBhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcyBiZWZvcmUgaW52b2tpbmcgYW55 IGNhbGxiYWNrcywKc28gdGhhdCBpZiBhIGNhbGxiYWNrIHRocm93cyBhbiBFUlJPUiB0aGUgbGlz dCBpcyBhbHJlYWR5IGluIGEKY29uc2lzdGVudCBzdGF0ZS4KCk5vdGUgdGhhdCByaV9QZXJmb3Jt Q2hlY2soKSB1c2VzIGZpcmVfdHJpZ2dlcnM9ZmFsc2UsIHdoaWNoIHNraXBzCkFmdGVyVHJpZ2dl ckJlZ2luUXVlcnkvRW5kUXVlcnkgYW5kIHRodXMgbmV2ZXIgaW5jcmVtZW50cwphZnRlclRyaWdn ZXJGaXJpbmdEZXB0aDsgZXZlbnRzIHF1ZXVlZCB0aGVyZSBmaXJlIGF0IHRoZSBvdXRlcgpxdWVy eSdzIGRlcHRoIGFuZCBhcmUgdW5hZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4KClJlcG9ydGVkLWJ5 OiBFdmFuIE1vbnRnb21lcnktUmVjaHQgPG1vbnRnZUBtaWFuZXR3b3Jrcy5uZXQ+CkF1dGhvcjog RXZhbiBNb250Z29tZXJ5LVJlY2h0IDxtb250Z2VAbWlhbmV0d29ya3MubmV0PgpDby1hdXRob3Jl ZC1ieTogQW1pdCBMYW5nb3RlIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjog aHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUVnN3B3Y0tmMDFGbURxRkFmLUh6dV9wWW5NWVNjWV9PdGlk LXBlOXV3M0JKNmdxOWdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy90 cmlnZ2VyLmMgfCA1NCArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCiAxIGZpbGUg Y2hhbmdlZCwgNDMgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHJp Z2dlci5jCmluZGV4IGM0MTAwNWJhNDRlLi5mNTk1MzdmZTg2ZSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RyaWdn ZXIuYwpAQCAtMzkzNSw2ICszOTM1LDggQEAgc3RydWN0IEFmdGVyVHJpZ2dlcnNUYWJsZURhdGEK IHR5cGVkZWYgc3RydWN0IEFmdGVyVHJpZ2dlckNhbGxiYWNrSXRlbQogewogCUFmdGVyVHJpZ2dl ckJhdGNoQ2FsbGJhY2sgY2FsbGJhY2s7CisJaW50CQkJZmlyaW5nX2RlcHRoOwkvKiBhZnRlclRy aWdnZXJGaXJpbmdEZXB0aCB3aGVuIHJlZ2lzdGVyZWQ7CisJCQkJCQkJCSAqIGNhbGxiYWNrIGZp cmVzIG9ubHkgYXQgdGhpcyBkZXB0aCAqLwogCXZvaWQJICAgKmFyZzsKIH0gQWZ0ZXJUcmlnZ2Vy Q2FsbGJhY2tJdGVtOwogCkBAIC01NDE5LDYgKzU0MjEsMTUgQEAgQWZ0ZXJUcmlnZ2VyRW5kWGFj dChib29sIGlzQ29tbWl0KQogCWFmdGVyVHJpZ2dlcnMucXVlcnlfZGVwdGggPSAtMTsKIAogCWFm dGVyVHJpZ2dlckZpcmluZ0RlcHRoID0gMDsKKworCUFzc2VydChhZnRlclRyaWdnZXJzLmJhdGNo X2NhbGxiYWNrcyA9PSBOSUwgfHwgIWlzQ29tbWl0KTsKKworCS8qIE9uIGFib3J0LCBkaXNjYXJk IGFueSBwZW5kaW5nIGNhbGxiYWNrcyB3aXRob3V0IGZpcmluZyB0aGVtLiAqLworCWlmICghaXND b21taXQpCisJeworCQlsaXN0X2ZyZWVfZGVlcChhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNr cyk7CisJCWFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tzID0gTklMOworCX0KIH0KIAogLyoK QEAgLTY4MzAsNiArNjg0MSw3IEBAIFJlZ2lzdGVyQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjayhB ZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrIGNhbGxiYWNrLAogCW9sZGN4dCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhUb3BUcmFuc2FjdGlvbkNvbnRleHQpOwogCWl0ZW0gPSBwYWxsb2Moc2l6ZW9m KEFmdGVyVHJpZ2dlckNhbGxiYWNrSXRlbSkpOwogCWl0ZW0tPmNhbGxiYWNrID0gY2FsbGJhY2s7 CisJaXRlbS0+ZmlyaW5nX2RlcHRoID0gYWZ0ZXJUcmlnZ2VyRmlyaW5nRGVwdGg7CiAJaXRlbS0+ YXJnID0gYXJnOwogCWFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tzID0KIAkJbGFwcGVuZChh ZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcywgaXRlbSk7CkBAIC02ODM4LDMxICs2ODUwLDUx IEBAIFJlZ2lzdGVyQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjayhBZnRlclRyaWdnZXJCYXRjaENh bGxiYWNrIGNhbGxiYWNrLAogCiAvKgogICogRmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2tz Ci0gKgkJSW52b2tlIGFuZCBjbGVhciBhbGwgcmVnaXN0ZXJlZCBiYXRjaCBjYWxsYmFja3MuCisg KgkJSW52b2tlIGNhbGxiYWNrcyByZWdpc3RlcmVkIGF0IHRoZSBjdXJyZW50IGZpcmluZyBkZXB0 aC4KKyAqCisgKiBFYWNoIGNhbGxiYWNrIGlzIHRhZ2dlZCB3aXRoIHRoZSBhZnRlclRyaWdnZXJG aXJpbmdEZXB0aCBhdCByZWdpc3RyYXRpb24KKyAqIHRpbWUuICBPbmx5IGNhbGxiYWNrcyBtYXRj aGluZyB0aGUgY3VycmVudCBkZXB0aCBhcmUgaW52b2tlZDsgdGhlIHJlc3QKKyAqIGFyZSByZXRh aW5lZCBmb3Igd2hlbiB0aGVpciBvd24gZGVwdGggZmlyZXMuICBUaGlzIGVuc3VyZXMgdGhhdCBu ZXN0ZWQKKyAqIHRyaWdnZXItZmlyaW5nIGNvbnRleHRzIChlLmcuLCBTUEkgY2FsbHMgaW5zaWRl IEFGVEVSIHRyaWdnZXJzKSBvbmx5CisgKiBmaXJlIHRoZSBjYWxsYmFja3MgdGhleSByZWdpc3Rl cmVkLCBsZWF2aW5nIG91dGVyLWxldmVsIGNhbGxiYWNrcyBpbnRhY3QKKyAqIHVudGlsIHRoZWly IGZpcmluZyBkZXB0aCBpcyByZWFjaGVkLgogICoKLSAqIE9ubHkgZmlyZXMgYXQgdGhlIG91dGVy bW9zdCBxdWVyeSBsZXZlbCAocXVlcnlfZGVwdGggPT0gMCkgb3IgZnJvbQotICogdG9wLWxldmVs IG9wZXJhdGlvbnMgKHF1ZXJ5X2RlcHRoID09IC0xLCBlLmcuIEFmdGVyVHJpZ2dlckZpcmVEZWZl cnJlZAotICogYXQgQ09NTUlUKS4gIE5lc3RlZCBxdWVyaWVzIGZyb20gU1BJIGluc2lkZSBBRlRF UiB0cmlnZ2VycyBydW4gYXQKLSAqIGRlcHRoID4gMCBhbmQgbXVzdCBub3QgdGVhciBkb3duIHJl c291cmNlcyB0aGUgb3V0ZXIgYmF0Y2ggc3RpbGwgbmVlZHMuCisgKiBUaGUgbGlzdCBpcyB1cGRh dGVkIGJlZm9yZSBhbnkgY2FsbGJhY2tzIGFyZSBpbnZva2VkIHNvIHRoYXQgaWYgYQorICogY2Fs bGJhY2sgdGhyb3dzIGFuIEVSUk9SIHRoZSBsaXN0IGlzIGFscmVhZHkgaW4gYSBjb25zaXN0ZW50 IHN0YXRlLgogICovCiBzdGF0aWMgdm9pZAogRmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2tz KHZvaWQpCiB7CisJTGlzdAkgICAqcmVtYWluaW5nID0gTklMOworCUxpc3QJICAgKnRvX2ZpcmUg PSBOSUw7CiAJTGlzdENlbGwgICAqbGM7CiAKLQlpZiAoYWZ0ZXJUcmlnZ2Vycy5xdWVyeV9kZXB0 aCA+IDApCi0JCXJldHVybjsKKwkvKiByZW1haW5pbmcgYW5kIHRvX2ZpcmUgbGlzdHMgbXVzdCBz dXJ2aXZlIHVudGlsIGNhbGxiYWNrcyBjb21wbGV0ZSAqLworCU1lbW9yeUNvbnRleHQgb2xkY3h0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcFRyYW5zYWN0aW9uQ29udGV4dCk7CiAKLQlBc3Nl cnQoYWZ0ZXJUcmlnZ2VyRmlyaW5nRGVwdGggPiAwKTsKIAlmb3JlYWNoKGxjLCBhZnRlclRyaWdn ZXJzLmJhdGNoX2NhbGxiYWNrcykKIAl7CiAJCUFmdGVyVHJpZ2dlckNhbGxiYWNrSXRlbSAqaXRl bSA9IGxmaXJzdChsYyk7CiAKLQkJaXRlbS0+Y2FsbGJhY2soaXRlbS0+YXJnKTsKKwkJaWYgKGl0 ZW0tPmZpcmluZ19kZXB0aCA9PSBhZnRlclRyaWdnZXJGaXJpbmdEZXB0aCkKKwkJCXRvX2ZpcmUg PSBsYXBwZW5kKHRvX2ZpcmUsIGl0ZW0pOworCQllbHNlCisJCQlyZW1haW5pbmcgPSBsYXBwZW5k KHJlbWFpbmluZywgaXRlbSk7CiAJfQogCi0JbGlzdF9mcmVlX2RlZXAoYWZ0ZXJUcmlnZ2Vycy5i YXRjaF9jYWxsYmFja3MpOwotCWFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tzID0gTklMOwor CWxpc3RfZnJlZShhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcyk7CisJYWZ0ZXJUcmlnZ2Vy cy5iYXRjaF9jYWxsYmFja3MgPSByZW1haW5pbmc7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGN4dCk7CisKKwkvKiBOb3cgZmlyZTsgaWYgb25lIHRocm93cywgdGhlIGxpc3QgaXMgYWxyZWFk eSBjbGVhbiAqLworCWZvcmVhY2gobGMsIHRvX2ZpcmUpCisJeworCQlBZnRlclRyaWdnZXJDYWxs YmFja0l0ZW0gKml0ZW0gPSBsZmlyc3QobGMpOworCisJCWl0ZW0tPmNhbGxiYWNrKGl0ZW0tPmFy Zyk7CisJCXBmcmVlKGl0ZW0pOworCX0KKwlsaXN0X2ZyZWUodG9fZmlyZSk7CiB9CiAKIC8qCi0t IAoyLjQ3LjMKCg== --000000000000c1cd0b064eeff19b--