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 1wAkwq-000IJ0-0g for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Apr 2026 08:41:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wAkwo-004ZMr-1x for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Apr 2026 08:41:11 +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 1wAkwo-004ZMj-0l for pgsql-hackers@lists.postgresql.org; Thu, 09 Apr 2026 08:41:11 +0000 Received: from mail-pg1-x52e.google.com ([2607:f8b0:4864:20::52e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wAkwm-000000009HW-2JGT for pgsql-hackers@postgresql.org; Thu, 09 Apr 2026 08:41:10 +0000 Received: by mail-pg1-x52e.google.com with SMTP id 41be03b00d2f7-c76bc3e8de3so334175a12.2 for ; Thu, 09 Apr 2026 01:41:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775724066; cv=none; d=google.com; s=arc-20240605; b=JswlT35iMbQwgytgnkl8BDUAv+CAVT8PfXb1+wdiHmCa2E0Sewi/k7XwydL3jBps0E qJYbNeGX4T298Zrkqo8A/SR9dJ9JtM6CdT00m+WmCCHaHhhVLmFSQXCooU2GZ/JjrD87 /TADOvsgQ2PDwson1mAQc9EyeGvNpk9KFx2f9D51Jf0m2LEroQUdkhaqEJvqJJbxlEY1 QbQw65jt4sC2DoTTE/MJZi3MXRhmazAL+V8zWMXEAgLrvz9EtQKsKyhaTwEcAQwCdc21 rP0Kl1Sj/pR89SNSF3RK8xB+ewde1eDS0QlspWd9nh7wS74d39vWQYV/Arz/slgU5LW5 2wLQ== 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=3qPyEiL9q2xmeDiIOAYxdeKdS+jVUU8Y3Ebaa8QcKoY=; fh=DOGQwzcczFXYjYtTzY9ikvO2NEtBLLPOPpiT0BTcyVA=; b=Wxt/b0+UsqsGOLwmzKsquwAtuzzHxIWES1CBF9LaqZGs7Q4wtQ0kQumPrCqh/dcXxO nSwbTun6v5lOt8+WdQv/SfvQgtHw0hGWumPCQnVAIDxgco3LyzSFCXRDCyG1F4iSvlfq f3lcojsWmN18fX+vg6wqeD2je4DO9Zg0GpLZfO1exPuLVwAVFpmg0562NwbEz181hlQ/ qkDxXPpKsb+Fh9jLH4tXR8OhZpfC/ZxD5Biw/PyO9lRthEeu6C71tCWvkL995R5zE/33 Fwn+drc6Q7HPeOuZ2Nh1+kfiUBz7JMp4s2p9unqOtxprl1WrYBLAzl5eajwZ+yNZeLlf IR4g==; 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=1775724066; x=1776328866; 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=3qPyEiL9q2xmeDiIOAYxdeKdS+jVUU8Y3Ebaa8QcKoY=; b=mbDvlHBtXCa8t7jvFSbVx3KejW9yfWpivLKSkh6MF64tKU+EzVwqNigOFMm1V1Yyyq WX4hK9QEpoyCR+J821xZ8OwanFsB2+2DmGZNq0kjWMegScsZiS2pcO285N3tu32cGQJ1 Gj9F2Os3IEqL6hRQJzwhm1fkTlt6iB5WCu8fPN/UbamZ3KFp2sPW4NHjPWqZgaX1PUWh LZG0REjUgr73jkSvnvjEL3roMUehiREsJpm95N4ZYP+74FlPNrNHJ3f0Yb/5+8wk5858 56xGnNtNyXDEQDoqAnr27NQuOBb+qmEIEN4SlPOK+ND4iTn3O/W17BF5KMRy0gzwhOaX c0Pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775724066; x=1776328866; 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=3qPyEiL9q2xmeDiIOAYxdeKdS+jVUU8Y3Ebaa8QcKoY=; b=sna5GiwwHMXNzzzJGrz9uqPg81nzoWcmkItKqSB1EVrTXWFI8kcJv5T+G6sSOUO+hP z78DAk0Sfx5p9DeCbtL9x3RZyOYsruWs2XEdhx3cJ1fWJ9KZYMjruPEMCOVSwPPXI/e6 G/JdOMsMhpLOgXQf1eTGHccx8dG5EBccgXyyqmsIgOlOfrhq02rM6QEvoZMQyC+8lxqS OBp+XTHdU2vaqHJy0TR+aBGwl0VN4ivxjDAtI9nT21R/5IgSmTsDioeMJ4a73ewl2rkQ WEgTB3K2GNtqbfHU6eNMASnSod5XH7f7gJQ9yddQAKbssO8BTRjE3/WixDiVcyiMFrzD n9kg== X-Forwarded-Encrypted: i=1; AJvYcCWvtbSJXhvwVdKtBZIDM5AIQ5hWEF6Gj9A6GhsGgHBveuegf5rWKgETNSR3GTuRqptzGHyqrIDy11dN7bIq@postgresql.org X-Gm-Message-State: AOJu0YzTwU//cqUi2DbfpeuMW2aPH4LBPvARX2Ix9OU/s7/+TD1ypr0K B5foI2q41FBc1qoXqRM5zYAkSUy1MntqJaAy2ykMViE/x5ipXiaakfc8ekyotTgPTObWxGevIaI b7wVFLVCTle6OWaOH4sQBGvlX9hvPFug= X-Gm-Gg: AeBDiev7bilhtNw4/n4kPD6iGDUxX4/8Pv5dTlegTbquNJCFTgTHfIM4N4TxjzKzo26 cY1jhsgZW+eXbGZYwcAjXB5Q65GeApjUcwA08al6tMl8IatP/vBKMxtrUjg7amatkDzf8aXKZac 76PODZ6OyGJtjwasayeWQmW/W0/yg4FsgyPx49bO9nqL5nxy1NRUvjkm4gn1U68oNypmpNgd8Ey YzgUqGxGUSGWykE15CyEEFc0/U6dbtgdHbGiP4zCNSOaFvY2kULhcmvKqRrO5B9VbuASE/TUDDx B4WKRKuX4jWpJSsEJjvTWDBVfVJfxUO8+gMMa2mD7mjrL+EL6ZrYB/BvYBRfKLtf X-Received: by 2002:a05:6a20:958e:b0:398:b499:44f1 with SMTP id adf61e73a8af0-39f2f2c99b0mr23920599637.58.1775724066220; Thu, 09 Apr 2026 01:41:06 -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> <8561287B-19F1-421E-959D-99F4593CFF54@gmail.com> In-Reply-To: <8561287B-19F1-421E-959D-99F4593CFF54@gmail.com> From: Amit Langote Date: Thu, 9 Apr 2026 17:40:49 +0900 X-Gm-Features: AQROBzBe9XPWAekR1t64OlS0KUNK56qIB119ghz8M5lkIDIGc8XoEnpgiIdyq5I Message-ID: Subject: Re: Eliminating SPI / SQL from some RI triggers - take 3 To: Chao Li Cc: Evan Montgomery-Recht , PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000002fe097064f02face" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002fe097064f02face Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Thu, Apr 9, 2026 at 4:40=E2=80=AFPM Chao Li wro= te: > > On Apr 8, 2026, at 22:26, Amit Langote wrote: > > On Wed, Apr 8, 2026 at 6:58=E2=80=AFPM Amit Langote wrote: > >> 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. > > > > One more cleanup patch attached as 0003: afterTriggerFiringDepth was > > added by commit 5c54c3ed1 as a file-static variable, which in > > hindsight should have been a field in AfterTriggersData alongside the > > other per-transaction after-trigger state. This patch makes that > > correction. > > > > One alternative design worth considering for 0002: storing > > batch_callbacks per query level in AfterTriggersQueryData rather than > > as a single list in AfterTriggersData, so callbacks naturally live at > > the query level where they were registered and get cleaned up with > > AfterTriggerFreeQuery on abort. Deferred constraints still need a > > top-level list in AfterTriggersData since they fire outside any query > > level. FireAfterTriggerBatchCallbacks() takes a list parameter and the > > caller passes either the query-level or top-level list as appropriate. > > This eliminates the need for firing_depth-matched firing entirely. I > > did that in 0004. I think I like it over 0002. Will look more > > closely tomorrow morning. > A few comments on v3: Thanks for the review. > 1 - 0002 > ``` > static void > FireAfterTriggerBatchCallbacks(void) > { > + List *remaining =3D NIL; > + List *to_fire =3D NIL; > ListCell *lc; > > - if (afterTriggers.query_depth > 0) > - return; > + /* remaining and to_fire lists must survive until callbacks compl= ete */ > + MemoryContext oldcxt =3D MemoryContextSwitchTo(TopTransactionCont= ext); > ``` > > I think remaining and to_fire should stay in the same context of afterTri= ggers.batch_callbacks, so instead of hard coding TopTransactionContext, we = can use GetMemoryChunkContext(afterTriggers.batch_callbacks), which makes t= he intention explicit. I'm dropping 0002 or have merged 0004 into it so this memory context switch is no longer present. > 2 - 0004, I noticed one potential problem, although I am not sure whether= it can really happen in practice. This version stores callback items at th= e individual query depth, and FireAfterTriggerBatchCallbacks() now iterates= the callback list for that depth and invokes each callback directly. My co= ncern is that if one of those callbacks needs to register a new callback, t= hat would append a new item to the same list while it is being iterated. Th= at seems unsafe to me, because list append may create a new list structure = underneath. If that happens, we may end up modifying the list being travers= ed, which does not look safe. > > This problem doesn=E2=80=99t exist in 0002, because 0002 splits afterTrig= gers.batch_callbacks into remaining and to_fire, and reset afterTriggers.ba= tch_callbacks =3D remaining before running callbacks. But the problem is, i= f a callback registers a new callback, the new callback goes to afterTrigge= rs.batch_callbacks, so it won=E2=80=99t get executed. > > From this perspective, I would assume a callback should not be allowed to= register a new callback. Can you please help confirm? Good point on the re-entrant registration concern. I've added a firing_batch_callbacks flag to AfterTriggersData that prevents callbacks from registering new callbacks during FireAfterTriggerBatchCallbacks(), with an Assert in RegisterAfterTriggerBatchCallback() to enforce it. That should keep the list being iterated from being modified. The attached patches are updated accordingly. 0001 is the main fix incorporating the per-query-level storage design, the transaction boundary cleanup, and the firing_batch_callbacks guard. 0002 is a followup that moves afterTriggerFiringDepth into AfterTriggersData as a minor cleanup of 5c54c3ed1b9. Barring further feedback I plan to commit 0001 and 0002 shortly. For 0003, I need to check on the policy around adding new test modules during feature freeze before committing it. --=20 Thanks, Amit Langote --0000000000002fe097064f02face Content-Type: application/octet-stream; name="v4-0002-Move-afterTriggerFiringDepth-into-AfterTriggersDa.patch" Content-Disposition: attachment; filename="v4-0002-Move-afterTriggerFiringDepth-into-AfterTriggersDa.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnr88k991 RnJvbSA0YmQxZGVkMmM4MGQxYzEyOTRhZjVlNmExOTBkZWJhZmQ0ODY2Y2ViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgOSBBcHIgMjAyNiAxMzo0Njo0NSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjQg Mi8zXSBNb3ZlIGFmdGVyVHJpZ2dlckZpcmluZ0RlcHRoIGludG8gQWZ0ZXJUcmlnZ2Vyc0RhdGEK ClRoZSBzdGF0aWMgdmFyaWFibGUgYWZ0ZXJUcmlnZ2VyRmlyaW5nRGVwdGggaW50cm9kdWNlZCBi eSBjb21taXQKNWM1NGMzZWQxYjkgaXMgbG9naWNhbGx5IHBhcnQgb2YgdGhlIGFmdGVyLXRyaWdn ZXIgc3RhdGUuICBNb3ZlIGl0CmludG8gQWZ0ZXJUcmlnZ2Vyc0RhdGEgYXMgZmlyaW5nX2RlcHRo LCBhbG9uZ3NpZGUgcXVlcnlfZGVwdGggYW5kCnRoZSBvdGhlciBwZXItdHJhbnNhY3Rpb24gYWZ0 ZXItdHJpZ2dlciBzdGF0ZS4gIEFsc28gdXBkYXRlIGl0cwpjb21tZW50IHRvIGFjY3VyYXRlbHkg cmVmbGVjdCBpdHMgc29sZSByZW1haW5pbmcgcHVycG9zZTogc2lnbmFsaW5nCnRvIEFmdGVyVHJp Z2dlcklzQWN0aXZlKCkgdGhhdCBhZnRlci10cmlnZ2VyIGZpcmluZyBpcyBhY3RpdmUuCgpEaXNj dXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBK0hpd3FGdDROR1ROazdCaW5Pc0hITTQ4RTl6 R0FhODUydkNmR29TZTFiYkw9Sk5GUUBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL3RyaWdnZXIuYyB8IDM2ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0K IDEgZmlsZSBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy90cmlnZ2VyLmMKaW5kZXggOWM2MTI1NjIzZTAuLjI4MTg3ZmU4YzA2IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvdHJpZ2dlci5jCkBAIC0zODk4LDYgKzM4OTgsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgQWZ0ZXJU cmlnZ2Vyc0RhdGEKIAkJCQkJCQkJCSAqIGZvciBkZWZlcnJlZCBjb25zdHJhaW50cyAqLwogCWJv b2wJCWZpcmluZ19iYXRjaF9jYWxsYmFja3M7CS8qIHRydWUgd2hlbiBpbgogCQkJCQkJCQkJCSAq IEZpcmVBZnRlclRyaWdnZXJzQmF0Y2hDYWxsYmFja3MoKSAqLworCisJLyoKKwkgKiBJbmNyZW1l bnRlZCBhcm91bmQgdGhlIHRyaWdnZXItZmlyaW5nIGxvb3BzIGluIEFmdGVyVHJpZ2dlckVuZFF1 ZXJ5LAorCSAqIEFmdGVyVHJpZ2dlckZpcmVEZWZlcnJlZCwgYW5kIEFmdGVyVHJpZ2dlclNldFN0 YXRlLiAgVXNlZCBieQorCSAqIEFmdGVyVHJpZ2dlcklzQWN0aXZlKCkgdG8gc2lnbmFsIHRoYXQg YWZ0ZXItdHJpZ2dlciBmaXJpbmcgaXMgYWN0aXZlLgorCSAqLworCWludAkJCWZpcmluZ19kZXB0 aDsKIH0gQWZ0ZXJUcmlnZ2Vyc0RhdGE7CiAKIHN0cnVjdCBBZnRlclRyaWdnZXJzUXVlcnlEYXRh CkBAIC0zOTQ0LDEzICszOTUxLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQWZ0ZXJUcmlnZ2VyQ2FsbGJh Y2tJdGVtCiAKIHN0YXRpYyBBZnRlclRyaWdnZXJzRGF0YSBhZnRlclRyaWdnZXJzOwogCi0vKgot ICogSW5jcmVtZW50ZWQgYmVmb3JlIGludm9raW5nIGFmdGVyVHJpZ2dlckludm9rZUV2ZW50cygp LiAgVXNlZCBieQotICogQWZ0ZXJUcmlnZ2VySXNBY3RpdmUoKSB0byBkZXRlcm1pbmUgd2hldGhl ciBiYXRjaCBjYWxsYmFja3Mgd2lsbCBmaXJlLAotICogc28gdGhhdCBSSSB0cmlnZ2VyIGZ1bmN0 aW9ucyBjYW4gdGFrZSB0aGUgYmF0Y2hlZCBmYXN0IHBhdGguCi0gKi8KLXN0YXRpYyBpbnQJYWZ0 ZXJUcmlnZ2VyRmlyaW5nRGVwdGggPSAwOwotCiBzdGF0aWMgdm9pZCBBZnRlclRyaWdnZXJFeGVj dXRlKEVTdGF0ZSAqZXN0YXRlLAogCQkJCQkJCQlBZnRlclRyaWdnZXJFdmVudCBldmVudCwKIAkJ CQkJCQkJUmVzdWx0UmVsSW5mbyAqcmVsSW5mbywKQEAgLTUxMTAsNiArNTExMCw3IEBAIEFmdGVy VHJpZ2dlckJlZ2luWGFjdCh2b2lkKQogCSAqLwogCWFmdGVyVHJpZ2dlcnMuZmlyaW5nX2NvdW50 ZXIgPSAoQ29tbWFuZElkKSAxOwkvKiBtdXN0bid0IGJlIDAgKi8KIAlhZnRlclRyaWdnZXJzLnF1 ZXJ5X2RlcHRoID0gLTE7CisJYWZ0ZXJUcmlnZ2Vycy5maXJpbmdfZGVwdGggPSAwOwogCWFmdGVy VHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tzID0gTklMOwogCWFmdGVyVHJpZ2dlcnMuZmlyaW5nX2Jh dGNoX2NhbGxiYWNrcyA9IGZhbHNlOwogCkBAIC01MTI1LDcgKzUxMjYsNiBAQCBBZnRlclRyaWdn ZXJCZWdpblhhY3Qodm9pZCkKIAlBc3NlcnQoYWZ0ZXJUcmlnZ2Vycy5ldmVudHMuaGVhZCA9PSBO VUxMKTsKIAlBc3NlcnQoYWZ0ZXJUcmlnZ2Vycy50cmFuc19zdGFjayA9PSBOVUxMKTsKIAlBc3Nl cnQoYWZ0ZXJUcmlnZ2Vycy5tYXh0cmFuc2RlcHRoID09IDApOwotCUFzc2VydChhZnRlclRyaWdn ZXJGaXJpbmdEZXB0aCA9PSAwKTsKIH0KIAogCkBAIC01MTk3LDcgKzUxOTcsNyBAQCBBZnRlclRy aWdnZXJFbmRRdWVyeShFU3RhdGUgKmVzdGF0ZSkKIAkgKi8KIAlxcyA9ICZhZnRlclRyaWdnZXJz LnF1ZXJ5X3N0YWNrW2FmdGVyVHJpZ2dlcnMucXVlcnlfZGVwdGhdOwogCi0JYWZ0ZXJUcmlnZ2Vy RmlyaW5nRGVwdGgrKzsKKwlhZnRlclRyaWdnZXJzLmZpcmluZ19kZXB0aCsrOwogCWZvciAoOzsp CiAJewogCQlpZiAoYWZ0ZXJUcmlnZ2VyTWFya0V2ZW50cygmcXMtPmV2ZW50cywgJmFmdGVyVHJp Z2dlcnMuZXZlbnRzLCB0cnVlKSkKQEAgLTUyNDYsNyArNTI0Niw3IEBAIEFmdGVyVHJpZ2dlckVu ZFF1ZXJ5KEVTdGF0ZSAqZXN0YXRlKQogCUFmdGVyVHJpZ2dlckZyZWVRdWVyeSgmYWZ0ZXJUcmln Z2Vycy5xdWVyeV9zdGFja1thZnRlclRyaWdnZXJzLnF1ZXJ5X2RlcHRoXSk7CiAKIAlhZnRlclRy aWdnZXJzLnF1ZXJ5X2RlcHRoLS07Ci0JYWZ0ZXJUcmlnZ2VyRmlyaW5nRGVwdGgtLTsKKwlhZnRl clRyaWdnZXJzLmZpcmluZ19kZXB0aC0tOwogfQogCiAKQEAgLTUzNDUsNyArNTM0NSw3IEBAIEFm dGVyVHJpZ2dlckZpcmVEZWZlcnJlZCh2b2lkKQogCSAqIFJ1biBhbGwgdGhlIHJlbWFpbmluZyB0 cmlnZ2Vycy4gIExvb3AgdW50aWwgdGhleSBhcmUgYWxsIGdvbmUsIGluIGNhc2UKIAkgKiBzb21l IHRyaWdnZXIgcXVldWVzIG1vcmUgZm9yIHVzIHRvIGRvLgogCSAqLwotCWFmdGVyVHJpZ2dlckZp cmluZ0RlcHRoKys7CisJYWZ0ZXJUcmlnZ2Vycy5maXJpbmdfZGVwdGgrKzsKIAl3aGlsZSAoYWZ0 ZXJUcmlnZ2VyTWFya0V2ZW50cyhldmVudHMsIE5VTEwsIGZhbHNlKSkKIAl7CiAJCUNvbW1hbmRJ ZAlmaXJpbmdfaWQgPSBhZnRlclRyaWdnZXJzLmZpcmluZ19jb3VudGVyKys7CkBAIC01MzU3LDcg KzUzNTcsNyBAQCBBZnRlclRyaWdnZXJGaXJlRGVmZXJyZWQodm9pZCkKIAkvKiBGbHVzaCBhbnkg ZmFzdC1wYXRoIGJhdGNoZXMgYWNjdW11bGF0ZWQgYnkgdGhlIHRyaWdnZXJzIGp1c3QgZmlyZWQu ICovCiAJRmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2tzKGFmdGVyVHJpZ2dlcnMuYmF0Y2hf Y2FsbGJhY2tzKTsKIAotCWFmdGVyVHJpZ2dlckZpcmluZ0RlcHRoLS07CisJYWZ0ZXJUcmlnZ2Vy cy5maXJpbmdfZGVwdGgtLTsKIAogCS8qCiAJICogV2UgZG9uJ3QgYm90aGVyIGZyZWVpbmcgdGhl IGV2ZW50IGxpc3Qgb3IgYmF0Y2hfY2FsbGJhY2tzLCBzaW5jZQpAQCAtNTQyNSw3ICs1NDI1LDcg QEAgQWZ0ZXJUcmlnZ2VyRW5kWGFjdChib29sIGlzQ29tbWl0KQogCS8qIE5vIG1vcmUgYWZ0ZXJU cmlnZ2VycyBtYW5pcHVsYXRpb24gdW50aWwgbmV4dCB0cmFuc2FjdGlvbiBzdGFydHMuICovCiAJ YWZ0ZXJUcmlnZ2Vycy5xdWVyeV9kZXB0aCA9IC0xOwogCi0JYWZ0ZXJUcmlnZ2VyRmlyaW5nRGVw dGggPSAwOworCWFmdGVyVHJpZ2dlcnMuZmlyaW5nX2RlcHRoID0gMDsKIAogCWxpc3RfZnJlZV9k ZWVwKGFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tzKTsKIAlhZnRlclRyaWdnZXJzLmJhdGNo X2NhbGxiYWNrcyA9IE5JTDsKQEAgLTYwODMsNyArNjA4Myw3IEBAIEFmdGVyVHJpZ2dlclNldFN0 YXRlKENvbnN0cmFpbnRzU2V0U3RtdCAqc3RtdCkKIAkJQWZ0ZXJUcmlnZ2VyRXZlbnRMaXN0ICpl dmVudHMgPSAmYWZ0ZXJUcmlnZ2Vycy5ldmVudHM7CiAJCWJvb2wJCXNuYXBzaG90X3NldCA9IGZh bHNlOwogCi0JCWFmdGVyVHJpZ2dlckZpcmluZ0RlcHRoKys7CisJCWFmdGVyVHJpZ2dlcnMuZmly aW5nX2RlcHRoKys7CiAJCXdoaWxlIChhZnRlclRyaWdnZXJNYXJrRXZlbnRzKGV2ZW50cywgTlVM TCwgdHJ1ZSkpCiAJCXsKIAkJCUNvbW1hbmRJZAlmaXJpbmdfaWQgPSBhZnRlclRyaWdnZXJzLmZp cmluZ19jb3VudGVyKys7CkBAIC02MTE3LDcgKzYxMTcsNyBAQCBBZnRlclRyaWdnZXJTZXRTdGF0 ZShDb25zdHJhaW50c1NldFN0bXQgKnN0bXQpCiAJCSAqIEZsdXNoIGFueSBmYXN0LXBhdGggYmF0 Y2hlcyBhY2N1bXVsYXRlZCBieSB0aGUgdHJpZ2dlcnMganVzdCBmaXJlZC4KIAkJICovCiAJCUZp cmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcyhhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNr cyk7Ci0JCWFmdGVyVHJpZ2dlckZpcmluZ0RlcHRoLS07CisJCWFmdGVyVHJpZ2dlcnMuZmlyaW5n X2RlcHRoLS07CiAJCWxpc3RfZnJlZV9kZWVwKGFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tz KTsKIAkJYWZ0ZXJUcmlnZ2Vycy5iYXRjaF9jYWxsYmFja3MgPSBOSUw7CiAKQEAgLTY4NDMsNyAr Njg0Myw3IEBAIFJlZ2lzdGVyQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjayhBZnRlclRyaWdnZXJC YXRjaENhbGxiYWNrIGNhbGxiYWNrLAogCSAqIE11c3QgYmUgY2FsbGVkIHdoaWxlIGFmdGVyVHJp Z2dlcnMgaXMgYWN0aXZlOyBjYWxsYmFja3MgcmVnaXN0ZXJlZAogCSAqIG91dHNpZGUgYSB0cmln Z2VyLWZpcmluZyBjb250ZXh0IHdvdWxkIG5ldmVyIGZpcmUuCiAJICovCi0JQXNzZXJ0KGFmdGVy VHJpZ2dlckZpcmluZ0RlcHRoID4gMCk7CisJQXNzZXJ0KGFmdGVyVHJpZ2dlcnMuZmlyaW5nX2Rl cHRoID4gMCk7CiAJQXNzZXJ0KCFhZnRlclRyaWdnZXJzLmZpcmluZ19iYXRjaF9jYWxsYmFja3Mp OwogCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BUcmFuc2FjdGlvbkNvbnRleHQp OwogCWl0ZW0gPSBwYWxsb2Moc2l6ZW9mKEFmdGVyVHJpZ2dlckNhbGxiYWNrSXRlbSkpOwpAQCAt Njg3NCw3ICs2ODc0LDcgQEAgRmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2tzKExpc3QgKmNh bGxiYWNrcykKIHsKIAlMaXN0Q2VsbCAgICpsYzsKIAotCUFzc2VydChhZnRlclRyaWdnZXJGaXJp bmdEZXB0aCA+IDApOworCUFzc2VydChhZnRlclRyaWdnZXJzLmZpcmluZ19kZXB0aCA+IDApOwog CWFmdGVyVHJpZ2dlcnMuZmlyaW5nX2JhdGNoX2NhbGxiYWNrcyA9IHRydWU7CiAJZm9yZWFjaChs YywgY2FsbGJhY2tzKQogCXsKQEAgLTY4OTYsNSArNjg5Niw1IEBAIEZpcmVBZnRlclRyaWdnZXJC YXRjaENhbGxiYWNrcyhMaXN0ICpjYWxsYmFja3MpCiBib29sCiBBZnRlclRyaWdnZXJJc0FjdGl2 ZSh2b2lkKQogewotCXJldHVybiBhZnRlclRyaWdnZXJGaXJpbmdEZXB0aCA+IDA7CisJcmV0dXJu IGFmdGVyVHJpZ2dlcnMuZmlyaW5nX2RlcHRoID4gMDsKIH0KLS0gCjIuNDcuMwoK --0000000000002fe097064f02face Content-Type: application/octet-stream; name="v4-0001-Fix-RI-fast-path-crash-under-nested-C-level-SPI.patch" Content-Disposition: attachment; filename="v4-0001-Fix-RI-fast-path-crash-under-nested-C-level-SPI.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnr88k9f2 RnJvbSAyMzQzYTkwMDIwY2YyNDQ1ZGQ1NzRkN2NhNDNlYTRkNDYwODIwYTc0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgOSBBcHIgMjAyNiAxNzozOToyNSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjQg MS8zXSBGaXggUkkgZmFzdC1wYXRoIGNyYXNoIHVuZGVyIG5lc3RlZCBDLWxldmVsIFNQSQoKV2hl biBhIEMtbGFuZ3VhZ2UgZnVuY3Rpb24gdXNlcyBTUElfY29ubmVjdC9TUElfZXhlY3V0ZS9TUElf ZmluaXNoIHRvCklOU0VSVCBpbnRvIGEgdGFibGUgd2l0aCBGSyBjb25zdHJhaW50cywgdGhlIEZL IEFGVEVSIHRyaWdnZXJzCnJlZ2lzdGVyIHJpX0Zhc3RQYXRoRW5kQmF0Y2ggYXMgYSBiYXRjaCBj YWxsYmFjayBhbmQgb3BlbiBQSyByZWxhdGlvbnMKdW5kZXIgdGhlIFNQSSBwb3J0YWwncyByZXNv dXJjZSBvd25lci4gIEZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcwp3YXMgc3VwcHJlc3Nl ZCBhdCB0aGF0IHBvaW50IGJ5IHRoZSBxdWVyeV9kZXB0aCA+IDAgZ3VhcmQsIGRlZmVycmluZwp0 ZWFyZG93biB0byB0aGUgb3V0ZXIgcXVlcnkncyBBZnRlclRyaWdnZXJFbmRRdWVyeS4gIEJ5IHRo ZW4gdGhlIFNQSQpwb3J0YWwncyByZXNvdXJjZSBvd25lciBoYWQgYmVlbiByZWxlYXNlZCwgZGVj cmVtZW50aW5nIHRoZSBjYWNoZWQKcmVsYXRpb25zJyByZWZjb3VudHMgdG8gemVyby4gIHJpX0Zh c3RQYXRoVGVhcmRvd24gdGhlbiBjcmFzaGVkCmF0dGVtcHRpbmcgdG8gY2xvc2UgdGhlbToKCiAg VFJBUDogZmFpbGVkIEFzc2VydCgicmVsLT5yZF9yZWZjbnQgPiAwIikKCkZpeCBieSBzdG9yaW5n IGJhdGNoIGNhbGxiYWNrcyBhdCB0aGUgbGV2ZWwgd2hlcmUgdGhleSBzaG91bGQgZmlyZToKaW4g QWZ0ZXJUcmlnZ2Vyc1F1ZXJ5RGF0YS5iYXRjaF9jYWxsYmFja3MgZm9yIGltbWVkaWF0ZSBjb25z dHJhaW50cwooZmlyZWQgYnkgQWZ0ZXJUcmlnZ2VyRW5kUXVlcnkpIGFuZCBpbiBBZnRlclRyaWdn ZXJzRGF0YS5iYXRjaF9jYWxsYmFja3MKZm9yIGRlZmVycmVkIGNvbnN0cmFpbnRzIChmaXJlZCBi eSBBZnRlclRyaWdnZXJGaXJlRGVmZXJyZWQgYW5kCkFmdGVyVHJpZ2dlclNldFN0YXRlKS4gIFJl Z2lzdGVyQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjaygpIHJvdXRlcyB0aGUKY2FsbGJhY2sgdG8g dGhlIGN1cnJlbnQgcXVlcnktbGV2ZWwgbGlzdCB3aGVuIHF1ZXJ5X2RlcHRoID49IDAsIGFuZCB0 bwp0aGUgdG9wLWxldmVsIGxpc3Qgb3RoZXJ3aXNlLiAgRmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2Fs bGJhY2tzKCkgdGFrZXMgYQpsaXN0IHBhcmFtZXRlciBhbmQgc2ltcGx5IGl0ZXJhdGVzIGFuZCBp bnZva2VzIGl0OyBtZW1vcnkgY2xlYW51cCBpcwpoYW5kbGVkIGJ5IHRoZSBjYWxsZXIuICBUaGlz IHJlcGxhY2VzIHRoZSBxdWVyeV9kZXB0aCA+IDAgZ3VhcmQgYW5kCnRoZSBmaXJpbmdfZGVwdGgg ZmllbGQgaW4gQWZ0ZXJUcmlnZ2VyQ2FsbGJhY2tJdGVtIHdpdGggbmF0dXJhbApsaXN0LWxldmVs IHNjb3BpbmcuICBUaGUgZmlyaW5nX2RlcHRoIGNvdW50ZXIgaW4gQWZ0ZXJUcmlnZ2Vyc0RhdGEg aXMKcmV0YWluZWQgc29sZWx5IGZvciBBZnRlclRyaWdnZXJJc0FjdGl2ZSgpLgoKQWxzbyBhZGQg ZmlyaW5nX2JhdGNoX2NhbGxiYWNrcyB0byBBZnRlclRyaWdnZXJzRGF0YSB0byBkZXRlY3QgYW5k CnByZXZlbnQgcmUtZW50cmFudCBjYWxsYmFjayByZWdpc3RyYXRpb24gZHVyaW5nCkZpcmVBZnRl clRyaWdnZXJCYXRjaENhbGxiYWNrcygpLCB3aGljaCB3b3VsZCBiZSB1bnNhZmUgYXMgaXQgY291 bGQKbW9kaWZ5IHRoZSBsaXN0IGJlaW5nIGl0ZXJhdGVkLiAgVGhlIGZsYWcgaXMgcmVzZXQgYXQg dHJhbnNhY3Rpb24gYW5kCnN1YnRyYW5zYWN0aW9uIGJvdW5kYXJpZXMgdG8gaGFuZGxlIGNhc2Vz IHdoZXJlIGFuIGVycm9yIHRocm93biBieSBhCmNhbGxiYWNrIGlzIGNhdWdodCBhbmQgdGhlIHN1 YnRyYW5zYWN0aW9uIGlzIHJvbGxlZCBiYWNrLgoKV2hpbGUgYXQgaXQsIGVuc3VyZSBjYWxsYmFj a3MgYXJlIHByb3Blcmx5IGFjY291bnRlZCBmb3IgYXQgYWxsCnRyYW5zYWN0aW9uIGJvdW5kYXJp ZXMsIGFzIGNsZWFudXAgb2YgYjdiMjdlYjQxYTVjOiBkaXNjYXJkIGFueQpyZW1haW5pbmcgdG9w LWxldmVsIGNhbGxiYWNrcyBvbiBib3RoIGNvbW1pdCBhbmQgYWJvcnQgaW4KQWZ0ZXJUcmlnZ2Vy RW5kWGFjdCgpLCBhbmQgY2xlYW4gdXAgcXVlcnktbGV2ZWwgY2FsbGJhY2tzIGluCkFmdGVyVHJp Z2dlckZyZWVRdWVyeSgpLgoKTm90ZSB0aGF0IHJpX1BlcmZvcm1DaGVjaygpIGNhbGxzIFNQSSB3 aXRoIGZpcmVfdHJpZ2dlcnM9ZmFsc2UsIHdoaWNoCnNraXBzIEFmdGVyVHJpZ2dlckJlZ2luUXVl cnkvRW5kUXVlcnkgZm9yIHRoYXQgU1BJIGNvbW1hbmQuICBBbnkKY2FsbGJhY2tzIHJlZ2lzdGVy ZWQgYnkgdHJpZ2dlcnMgZmlyZWQgZHVyaW5nIHRoYXQgU1BJIGNvbW1hbmQgbGFuZCBhdAp0aGUg b3V0ZXIgcXVlcnkncyBsZXZlbCBhbmQgZmlyZSB3aGVuIHRoZSBvdXRlciBxdWVyeSBjb21wbGV0 ZXMsIHdoaWNoCmlzIHRoZSBjb3JyZWN0IGJlaGF2aW9yLgoKUmVwb3J0ZWQtYnk6IEV2YW4gTW9u dGdvbWVyeS1SZWNodCA8bW9udGdlQG1pYW5ldHdvcmtzLm5ldD4KQW5hbHl6ZWQtYnk6IEV2YW4g TW9udGdvbWVyeS1SZWNodCA8bW9udGdlQG1pYW5ldHdvcmtzLm5ldD4KQXV0aG9yOiBBbWl0IExh bmdvdGUgPGFtaXRsYW5nb3RlMDlAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogQ2hhbyBMaSA8bGku ZXZhbi5jaGFvQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUVn N3B3Y0tmMDFGbURxRkFmLUh6dV9wWW5NWVNjWV9PdGlkLXBlOXV3M0JKNmdxOWdAbWFpbC5nbWFp bC5jb20KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMgfCA3MCArKysrKysrKysr KysrKysrKysrKysrLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNDUgaW5zZXJ0aW9ucygr KSwgMjUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHJp Z2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jCmluZGV4IGM0MTAwNWJhNDRl Li45YzYxMjU2MjNlMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RyaWdnZXIuYwpAQCAtMzg5NCw3ICszODk0LDEw IEBAIHR5cGVkZWYgc3RydWN0IEFmdGVyVHJpZ2dlcnNEYXRhCiAJQWZ0ZXJUcmlnZ2Vyc1RyYW5z RGF0YSAqdHJhbnNfc3RhY2s7CS8qIGFycmF5IG9mIHN0cnVjdHMgc2hvd24gYmVsb3cgKi8KIAlp bnQJCQltYXh0cmFuc2RlcHRoOwkvKiBhbGxvY2F0ZWQgbGVuIG9mIGFib3ZlIGFycmF5ICovCiAK LQlMaXN0CSAgICpiYXRjaF9jYWxsYmFja3M7CS8qIExpc3Qgb2YgQWZ0ZXJUcmlnZ2VyQ2FsbGJh Y2tJdGVtICovCisJTGlzdAkgICAqYmF0Y2hfY2FsbGJhY2tzOwkvKiBMaXN0IG9mIEFmdGVyVHJp Z2dlckNhbGxiYWNrSXRlbTsKKwkJCQkJCQkJCSAqIGZvciBkZWZlcnJlZCBjb25zdHJhaW50cyAq LworCWJvb2wJCWZpcmluZ19iYXRjaF9jYWxsYmFja3M7CS8qIHRydWUgd2hlbiBpbgorCQkJCQkJ CQkJCSAqIEZpcmVBZnRlclRyaWdnZXJzQmF0Y2hDYWxsYmFja3MoKSAqLwogfSBBZnRlclRyaWdn ZXJzRGF0YTsKIAogc3RydWN0IEFmdGVyVHJpZ2dlcnNRdWVyeURhdGEKQEAgLTM5MDIsNiArMzkw NSw3IEBAIHN0cnVjdCBBZnRlclRyaWdnZXJzUXVlcnlEYXRhCiAJQWZ0ZXJUcmlnZ2VyRXZlbnRM aXN0IGV2ZW50czsJLyogZXZlbnRzIHBlbmRpbmcgZnJvbSB0aGlzIHF1ZXJ5ICovCiAJVHVwbGVz dG9yZXN0YXRlICpmZHdfdHVwbGVzdG9yZTsJLyogZm9yZWlnbiB0dXBsZXMgZm9yIHNhaWQgZXZl bnRzICovCiAJTGlzdAkgICAqdGFibGVzOwkJCS8qIGxpc3Qgb2YgQWZ0ZXJUcmlnZ2Vyc1RhYmxl RGF0YSwgc2VlIGJlbG93ICovCisJTGlzdCAgICAgICAqYmF0Y2hfY2FsbGJhY2tzOyAgICAvKiBM aXN0IG9mIEFmdGVyVHJpZ2dlckNhbGxiYWNrSXRlbSAqLwogfTsKIAogc3RydWN0IEFmdGVyVHJp Z2dlcnNUcmFuc0RhdGEKQEAgLTM5ODAsNyArMzk4NCw3IEBAIHN0YXRpYyBTZXRDb25zdHJhaW50 U3RhdGUgU2V0Q29uc3RyYWludFN0YXRlQWRkSXRlbShTZXRDb25zdHJhaW50U3RhdGUgc3RhdGUs CiAJCQkJCQkJCQkJCQkJT2lkIHRnb2lkLCBib29sIHRnaXNkZWZlcnJlZCk7CiBzdGF0aWMgdm9p ZCBjYW5jZWxfcHJpb3Jfc3RtdF90cmlnZ2VycyhPaWQgcmVsaWQsIENtZFR5cGUgY21kVHlwZSwg aW50IHRnZXZlbnQpOwogCi1zdGF0aWMgdm9pZCBGaXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFj a3Modm9pZCk7CitzdGF0aWMgdm9pZCBGaXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3MoTGlz dCAqY2FsbGJhY2tzKTsKIAogLyoKICAqIEdldCB0aGUgRkRXIHR1cGxlc3RvcmUgZm9yIHRoZSBj dXJyZW50IHRyaWdnZXIgcXVlcnkgbGV2ZWwsIGNyZWF0aW5nIGl0CkBAIC01MTA3LDYgKzUxMTEs NyBAQCBBZnRlclRyaWdnZXJCZWdpblhhY3Qodm9pZCkKIAlhZnRlclRyaWdnZXJzLmZpcmluZ19j b3VudGVyID0gKENvbW1hbmRJZCkgMTsJLyogbXVzdG4ndCBiZSAwICovCiAJYWZ0ZXJUcmlnZ2Vy cy5xdWVyeV9kZXB0aCA9IC0xOwogCWFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tzID0gTklM OworCWFmdGVyVHJpZ2dlcnMuZmlyaW5nX2JhdGNoX2NhbGxiYWNrcyA9IGZhbHNlOwogCiAJLyoK IAkgKiBWZXJpZnkgdGhhdCB0aGVyZSBpcyBubyBsZWZ0b3ZlciBzdGF0ZSByZW1haW5pbmcuICBJ ZiB0aGVzZSBhc3NlcnRpb25zCkBAIC01MjMzLDExICs1MjM4LDkgQEAgQWZ0ZXJUcmlnZ2VyRW5k UXVlcnkoRVN0YXRlICplc3RhdGUpCiAJLyoKIAkgKiBGaXJlIGJhdGNoIGNhbGxiYWNrcyBiZWZv cmUgcmVsZWFzaW5nIHF1ZXJ5LWxldmVsIHN0b3JhZ2UgYW5kIGJlZm9yZQogCSAqIGRlY3JlbWVu dGluZyBxdWVyeV9kZXB0aC4gIENhbGxiYWNrcyBtYXkgZG8gcmVhbCB3b3JrIChpbmRleCBwcm9i ZXMsCi0JICogZXJyb3IgcmVwb3J0aW5nKSBhbmQgcmVseSBvbiBxdWVyeV9kZXB0aCBzdGlsbCBy ZWZsZWN0aW5nIHRoZSBjdXJyZW50Ci0JICogYmF0Y2ggbGV2ZWwgc28gdGhhdCBuZXN0ZWQgY2Fs bHMgZnJvbSBTUEkgaW5zaWRlIEFGVEVSIHRyaWdnZXJzIGFyZQotCSAqIGNvcnJlY3RseSBzdXBw cmVzc2VkIGJ5IEZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcydzIGRlcHRoIGd1YXJkLgor CSAqIGVycm9yIHJlcG9ydGluZykuCiAJICovCi0JRmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJh Y2tzKCk7CisJRmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2tzKHFzLT5iYXRjaF9jYWxsYmFj a3MpOwogCiAJLyogUmVsZWFzZSBxdWVyeS1sZXZlbC1sb2NhbCBzdG9yYWdlLCBpbmNsdWRpbmcg dHVwbGVzdG9yZXMgaWYgYW55ICovCiAJQWZ0ZXJUcmlnZ2VyRnJlZVF1ZXJ5KCZhZnRlclRyaWdn ZXJzLnF1ZXJ5X3N0YWNrW2FmdGVyVHJpZ2dlcnMucXVlcnlfZGVwdGhdKTsKQEAgLTUzMDAsNiAr NTMwMyw5IEBAIEFmdGVyVHJpZ2dlckZyZWVRdWVyeShBZnRlclRyaWdnZXJzUXVlcnlEYXRhICpx cykKIAkgKi8KIAlxcy0+dGFibGVzID0gTklMOwogCWxpc3RfZnJlZV9kZWVwKHRhYmxlcyk7CisK KwlsaXN0X2ZyZWVfZGVlcChxcy0+YmF0Y2hfY2FsbGJhY2tzKTsKKwlxcy0+YmF0Y2hfY2FsbGJh Y2tzID0gTklMOwogfQogCiAKQEAgLTUzNDksMTMgKzUzNTUsMTQgQEAgQWZ0ZXJUcmlnZ2VyRmly ZURlZmVycmVkKHZvaWQpCiAJfQogCiAJLyogRmx1c2ggYW55IGZhc3QtcGF0aCBiYXRjaGVzIGFj Y3VtdWxhdGVkIGJ5IHRoZSB0cmlnZ2VycyBqdXN0IGZpcmVkLiAqLwotCUZpcmVBZnRlclRyaWdn ZXJCYXRjaENhbGxiYWNrcygpOworCUZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcyhhZnRl clRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcyk7CiAKIAlhZnRlclRyaWdnZXJGaXJpbmdEZXB0aC0t OwogCiAJLyoKLQkgKiBXZSBkb24ndCBib3RoZXIgZnJlZWluZyB0aGUgZXZlbnQgbGlzdCwgc2lu Y2UgaXQgd2lsbCBnbyBhd2F5IGFueXdheQotCSAqIChhbmQgbW9yZSBlZmZpY2llbnRseSB0aGFu IHZpYSBwZnJlZSkgaW4gQWZ0ZXJUcmlnZ2VyRW5kWGFjdC4KKwkgKiBXZSBkb24ndCBib3RoZXIg ZnJlZWluZyB0aGUgZXZlbnQgbGlzdCBvciBiYXRjaF9jYWxsYmFja3MsIHNpbmNlCisJICogdGhl eSB3aWxsIGdvIGF3YXkgYW55d2F5IChhbmQgbW9yZSBlZmZpY2llbnRseSB0aGFuIHZpYSBwZnJl ZSkgaW4KKwkgKiBBZnRlclRyaWdnZXJFbmRYYWN0LgogCSAqLwogCiAJaWYgKHNuYXBfcHVzaGVk KQpAQCAtNTQxOSw2ICs1NDI2LDEwIEBAIEFmdGVyVHJpZ2dlckVuZFhhY3QoYm9vbCBpc0NvbW1p dCkKIAlhZnRlclRyaWdnZXJzLnF1ZXJ5X2RlcHRoID0gLTE7CiAKIAlhZnRlclRyaWdnZXJGaXJp bmdEZXB0aCA9IDA7CisKKwlsaXN0X2ZyZWVfZGVlcChhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxi YWNrcyk7CisJYWZ0ZXJUcmlnZ2Vycy5iYXRjaF9jYWxsYmFja3MgPSBOSUw7CisJYWZ0ZXJUcmln Z2Vycy5maXJpbmdfYmF0Y2hfY2FsbGJhY2tzID0gZmFsc2U7CiB9CiAKIC8qCkBAIC01NTY1LDYg KzU1NzYsOSBAQCBBZnRlclRyaWdnZXJFbmRTdWJYYWN0KGJvb2wgaXNDb21taXQpCiAJCQl9CiAJ CX0KIAl9CisKKwkvKiBSZXNldCBpbiBjYXNlIGEgY2FsbGJhY2sgdGhyZXcgYW4gZXJyb3Igd2hp bGUgZmlyaW5nLiAqLworCWFmdGVyVHJpZ2dlcnMuZmlyaW5nX2JhdGNoX2NhbGxiYWNrcyA9IGZh bHNlOwogfQogCiAvKgpAQCAtNTcxOSw2ICs1NzMzLDcgQEAgQWZ0ZXJUcmlnZ2VyRW5sYXJnZVF1 ZXJ5U3RhdGUodm9pZCkKIAkJcXMtPmV2ZW50cy50YWlsZnJlZSA9IE5VTEw7CiAJCXFzLT5mZHdf dHVwbGVzdG9yZSA9IE5VTEw7CiAJCXFzLT50YWJsZXMgPSBOSUw7CisJCXFzLT5iYXRjaF9jYWxs YmFja3MgPSBOSUw7CiAKIAkJKytpbml0X2RlcHRoOwogCX0KQEAgLTYxMDEsOCArNjExNiwxMCBA QCBBZnRlclRyaWdnZXJTZXRTdGF0ZShDb25zdHJhaW50c1NldFN0bXQgKnN0bXQpCiAJCS8qCiAJ CSAqIEZsdXNoIGFueSBmYXN0LXBhdGggYmF0Y2hlcyBhY2N1bXVsYXRlZCBieSB0aGUgdHJpZ2dl cnMganVzdCBmaXJlZC4KIAkJICovCi0JCUZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcygp OworCQlGaXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3MoYWZ0ZXJUcmlnZ2Vycy5iYXRjaF9j YWxsYmFja3MpOwogCQlhZnRlclRyaWdnZXJGaXJpbmdEZXB0aC0tOworCQlsaXN0X2ZyZWVfZGVl cChhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcyk7CisJCWFmdGVyVHJpZ2dlcnMuYmF0Y2hf Y2FsbGJhY2tzID0gTklMOwogCiAJCWlmIChzbmFwc2hvdF9zZXQpCiAJCQlQb3BBY3RpdmVTbmFw c2hvdCgpOwpAQCAtNjgyNyw0MiArNjg0NCw0NSBAQCBSZWdpc3RlckFmdGVyVHJpZ2dlckJhdGNo Q2FsbGJhY2soQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjayBjYWxsYmFjaywKIAkgKiBvdXRzaWRl IGEgdHJpZ2dlci1maXJpbmcgY29udGV4dCB3b3VsZCBuZXZlciBmaXJlLgogCSAqLwogCUFzc2Vy dChhZnRlclRyaWdnZXJGaXJpbmdEZXB0aCA+IDApOworCUFzc2VydCghYWZ0ZXJUcmlnZ2Vycy5m aXJpbmdfYmF0Y2hfY2FsbGJhY2tzKTsKIAlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8o VG9wVHJhbnNhY3Rpb25Db250ZXh0KTsKIAlpdGVtID0gcGFsbG9jKHNpemVvZihBZnRlclRyaWdn ZXJDYWxsYmFja0l0ZW0pKTsKIAlpdGVtLT5jYWxsYmFjayA9IGNhbGxiYWNrOwogCWl0ZW0tPmFy ZyA9IGFyZzsKLQlhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcyA9Ci0JCWxhcHBlbmQoYWZ0 ZXJUcmlnZ2Vycy5iYXRjaF9jYWxsYmFja3MsIGl0ZW0pOworCWlmIChhZnRlclRyaWdnZXJzLnF1 ZXJ5X2RlcHRoID49IDApCisJeworCQlBZnRlclRyaWdnZXJzUXVlcnlEYXRhICpxcyA9CisJCQkm YWZ0ZXJUcmlnZ2Vycy5xdWVyeV9zdGFja1thZnRlclRyaWdnZXJzLnF1ZXJ5X2RlcHRoXTsKKwkJ cXMtPmJhdGNoX2NhbGxiYWNrcyA9IGxhcHBlbmQocXMtPmJhdGNoX2NhbGxiYWNrcywgaXRlbSk7 CisJfQorCWVsc2UKKwkJYWZ0ZXJUcmlnZ2Vycy5iYXRjaF9jYWxsYmFja3MgPQorCQkJbGFwcGVu ZChhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcywgaXRlbSk7CiAJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGN4dCk7CiB9CiAKIC8qCiAgKiBGaXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFj a3MKLSAqCQlJbnZva2UgYW5kIGNsZWFyIGFsbCByZWdpc3RlcmVkIGJhdGNoIGNhbGxiYWNrcy4K KyAqCQlJbnZva2UgYWxsIGNhbGxiYWNrcyBpbiB0aGUgZ2l2ZW4gbGlzdC4KICAqCi0gKiBPbmx5 IGZpcmVzIGF0IHRoZSBvdXRlcm1vc3QgcXVlcnkgbGV2ZWwgKHF1ZXJ5X2RlcHRoID09IDApIG9y IGZyb20KLSAqIHRvcC1sZXZlbCBvcGVyYXRpb25zIChxdWVyeV9kZXB0aCA9PSAtMSwgZS5nLiBB ZnRlclRyaWdnZXJGaXJlRGVmZXJyZWQKLSAqIGF0IENPTU1JVCkuICBOZXN0ZWQgcXVlcmllcyBm cm9tIFNQSSBpbnNpZGUgQUZURVIgdHJpZ2dlcnMgcnVuIGF0Ci0gKiBkZXB0aCA+IDAgYW5kIG11 c3Qgbm90IHRlYXIgZG93biByZXNvdXJjZXMgdGhlIG91dGVyIGJhdGNoIHN0aWxsIG5lZWRzLgor ICogTWVtb3J5IGNsZWFudXAgb2YgdGhlIGxpc3QgYW5kIGl0cyBpdGVtcyBpcyBoYW5kbGVkIGJ5 IHRoZSBjYWxsZXIKKyAqIChBZnRlclRyaWdnZXJGcmVlUXVlcnkgZm9yIHF1ZXJ5LWxldmVsIGNh bGxiYWNrcywgQWZ0ZXJUcmlnZ2VyRW5kWGFjdAorICogZm9yIHRvcC1sZXZlbCBkZWZlcnJlZCBj YWxsYmFja3MpLgogICovCiBzdGF0aWMgdm9pZAotRmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJh Y2tzKHZvaWQpCitGaXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3MoTGlzdCAqY2FsbGJhY2tz KQogewogCUxpc3RDZWxsICAgKmxjOwogCi0JaWYgKGFmdGVyVHJpZ2dlcnMucXVlcnlfZGVwdGgg PiAwKQotCQlyZXR1cm47Ci0KIAlBc3NlcnQoYWZ0ZXJUcmlnZ2VyRmlyaW5nRGVwdGggPiAwKTsK LQlmb3JlYWNoKGxjLCBhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcykKKwlhZnRlclRyaWdn ZXJzLmZpcmluZ19iYXRjaF9jYWxsYmFja3MgPSB0cnVlOworCWZvcmVhY2gobGMsIGNhbGxiYWNr cykKIAl7CiAJCUFmdGVyVHJpZ2dlckNhbGxiYWNrSXRlbSAqaXRlbSA9IGxmaXJzdChsYyk7CiAK IAkJaXRlbS0+Y2FsbGJhY2soaXRlbS0+YXJnKTsKIAl9Ci0KLQlsaXN0X2ZyZWVfZGVlcChhZnRl clRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcyk7Ci0JYWZ0ZXJUcmlnZ2Vycy5iYXRjaF9jYWxsYmFj a3MgPSBOSUw7CisJYWZ0ZXJUcmlnZ2Vycy5maXJpbmdfYmF0Y2hfY2FsbGJhY2tzID0gZmFsc2U7 CiB9CiAKIC8qCi0tIAoyLjQ3LjMKCg== --0000000000002fe097064f02face Content-Type: application/octet-stream; name="v4-0003-Add-test-module-for-RI-fast-path-FK-checks-under-.patch" Content-Disposition: attachment; filename="v4-0003-Add-test-module-for-RI-fast-path-FK-checks-under-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnr88k8r0 RnJvbSAwY2ZkM2UyYWI0NGJjZDVmY2RkYWQzMTczZTM3ZGU2MmJmZDFhODQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgOSBBcHIgMjAyNiAxNDo0NDo1MSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjQg My8zXSBBZGQgdGVzdCBtb2R1bGUgZm9yIFJJIGZhc3QtcGF0aCBGSyBjaGVja3MgdW5kZXIKIEMt bGV2ZWwgU1BJCgpBZGQgdGVzdF9zcGlfcmVzb3duZXIsIGEgdGVzdCBtb2R1bGUgcHJvdmlkaW5n IGEgU1FMLWNhbGxhYmxlIEMgZnVuY3Rpb24KdGhhdCBleGVjdXRlcyBTUUwgdmlhIFNQSSB3aXRo IGEgZGVkaWNhdGVkIHNob3J0LWxpdmVkIHJlc291cmNlIG93bmVyLgpUaGlzIHJlcHJvZHVjZXMg dGhlIGNyYXNoIHNjZW5hcmlvIGZpeGVkIGJ5IHRoZSBwcmV2aW91cyBjb21taXQgdGhhdApjYW5u b3QgYmUgdHJpZ2dlcmVkIGZyb20gUEwvcGdTUUwsIHNpbmNlIFBML3BnU1FMJ3MgU1BJIGNvbm5l Y3Rpb24gc3BhbnMKdGhlIGVudGlyZSBmdW5jdGlvbiBjYWxsIGFuZCBpdHMgcmVzb3VyY2Ugb3du ZXIgb3V0bGl2ZXMgdGhlIGJhdGNoCmNhbGxiYWNrLgoKVGhlIGNyaXRpY2FsIHRlc3QgY2FzZSBj YWxscyBzcGlfZXhlY19zcWwoKSBmcm9tIGluc2lkZSBhbiBBRlRFUiB0cmlnZ2VyLAp3aGVyZSB0 aGUgRksgY2hlY2tzIGZpcmUgdW5kZXIgYSBuZXN0ZWQgU1BJIGNvbnRleHQgd2hpbGUgdGhlIG91 dGVyCnRyaWdnZXItZmlyaW5nIGxvb3AgaXMgYWN0aXZlLiAgVGhlIGRlZGljYXRlZCByZXNvdXJj ZSBvd25lciBlbnN1cmVzIGl0IGlzCnJlbGVhc2VkIGJlZm9yZSB0aGUgb3V0ZXIgYmF0Y2ggY2Fs bGJhY2sgZmlyZXMsIHJlcHJvZHVjaW5nIHRoZSByZXNvdXJjZQpvd25lciBtaXNtYXRjaCB0aGF0 IHByZXZpb3VzbHkgY2F1c2VkIGEgY3Jhc2guICBBZGRpdGlvbmFsIHRlc3QgY2FzZXMKZXhlcmNp c2UgbXVsdGlwbGUgRksgY29uc3RyYWludHMsIEZLIHZpb2xhdGlvbnMsIGFuZCBQTC9wZ1NRTCBj YWxsaW5nIHRoZQpDIFNQSSBmdW5jdGlvbiwgbWF0Y2hpbmcgdGhlIFBvc3RHSVMgdG9Ub3BvR2Vv bSgpIGNhbGwgcGF0dGVybiByZXBvcnRlZApieSBFdmFuIE1vbnRnb21lcnktUmVjaHQuCgpSZXBv cnRlZC1ieTogRXZhbiBNb250Z29tZXJ5LVJlY2h0IDxtb250Z2VAbWlhbmV0d29ya3MubmV0PgpB dXRob3I6IEV2YW4gTW9udGdvbWVyeS1SZWNodCA8bW9udGdlQG1pYW5ldHdvcmtzLm5ldD4KQ28t YXV0aG9yZWQtYnk6IEFtaXQgTGFuZ290ZSA8YW1pdGxhbmdvdGUwOUBnbWFpbC5jb20+CkRpc2N1 c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FFZzdwd2NLZjAxRm1EcUZBZi1IenVfcFluTVlT Y1lfT3RpZC1wZTl1dzNCSjZncTlnQG1haWwuZ21haWwuY29tCi0tLQogc3JjL3Rlc3QvbW9kdWxl cy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L21vZHVsZXMv bWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rl c3Rfc3BpX3Jlc293bmVyL01ha2VmaWxlICAgfCAgMjMgKysrKwogLi4uL2V4cGVjdGVkL3JpX2Zh c3RwYXRoLm91dCAgICAgICAgICAgICAgICAgIHwgMTE2ICsrKysrKysrKysrKysrKysrKwogLi4u L21vZHVsZXMvdGVzdF9zcGlfcmVzb3duZXIvbWVzb24uYnVpbGQgICAgIHwgIDMxICsrKysrCiAu Li4vdGVzdF9zcGlfcmVzb3duZXIvc3FsL3JpX2Zhc3RwYXRoLnNxbCAgICAgfCAxMDUgKysrKysr KysrKysrKysrKwogLi4uL3Rlc3Rfc3BpX3Jlc293bmVyLS0xLjAuc3FsICAgICAgICAgICAgICAg IHwgICA5ICsrCiAuLi4vdGVzdF9zcGlfcmVzb3duZXIvdGVzdF9zcGlfcmVzb3duZXIuYyAgICAg fCAgNzAgKysrKysrKysrKysKIC4uLi90ZXN0X3NwaV9yZXNvd25lci5jb250cm9sICAgICAgICAg ICAgICAgICB8ICAgNCArCiA5IGZpbGVzIGNoYW5nZWQsIDM2MCBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NwaV9yZXNvd25lci9NYWtlZmls ZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9zcGlfcmVzb3duZXIv ZXhwZWN0ZWQvcmlfZmFzdHBhdGgub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X3NwaV9yZXNvd25lci9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9zcGlfcmVzb3duZXIvc3FsL3JpX2Zhc3RwYXRoLnNxbAogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9zcGlfcmVzb3duZXIvdGVzdF9z cGlfcmVzb3duZXItLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVz L3Rlc3Rfc3BpX3Jlc293bmVyL3Rlc3Rfc3BpX3Jlc293bmVyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc3BpX3Jlc293bmVyL3Rlc3Rfc3BpX3Jlc293bmVyLmNv bnRyb2wKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlIGIvc3JjL3Rlc3Qv bW9kdWxlcy9NYWtlZmlsZQppbmRleCAwYTc0YWI1Yzg2Zi4uMDE2YjMyOGM4YzUgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtl ZmlsZQpAQCAtNTIsNiArNTIsNyBAQCBTVUJESVJTID0gXAogCQkgIHRlc3Rfc2htZW0gXAogCQkg IHRlc3Rfc2htX21xIFwKIAkJICB0ZXN0X3NscnUgXAorCQkgIHRlc3Rfc3BpX3Jlc293bmVyIFwK IAkJICB0ZXN0X3RpZHN0b3JlIFwKIAkJICB1bnNhZmVfdGVzdHMgXAogCQkgIHdvcmtlcl9zcGkg XApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21v ZHVsZXMvbWVzb24uYnVpbGQKaW5kZXggNGJjYTQyYmIzNzAuLjNjYTQ1NDA2NGQwIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv bWVzb24uYnVpbGQKQEAgLTUzLDYgKzUzLDcgQEAgc3ViZGlyKCd0ZXN0X3Nhc2xwcmVwJykKIHN1 YmRpcigndGVzdF9zaG1lbScpCiBzdWJkaXIoJ3Rlc3Rfc2htX21xJykKIHN1YmRpcigndGVzdF9z bHJ1JykKK3N1YmRpcigndGVzdF9zcGlfcmVzb3duZXInKQogc3ViZGlyKCd0ZXN0X3RpZHN0b3Jl JykKIHN1YmRpcigndHlwY2FjaGUnKQogc3ViZGlyKCd1bnNhZmVfdGVzdHMnKQpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NwaV9yZXNvd25lci9NYWtlZmlsZSBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9zcGlfcmVzb3duZXIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjVhNjllM2EzYzQyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X3NwaV9yZXNvd25lci9NYWtlZmlsZQpAQCAtMCwwICsxLDIzIEBACisj IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9zcGlfcmVzb3duZXIvTWFrZWZpbGUKKworTU9EVUxFX2Jp ZyA9IHRlc3Rfc3BpX3Jlc293bmVyCitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwl0ZXN0X3Nw aV9yZXNvd25lci5vCitQR0ZJTEVERVNDID0gInRlc3Rfc3BpX3Jlc293bmVyIC0gU1FMLWNhbGxh YmxlIEMgU1BJIGZ1bmN0aW9uIHVuZGVyIGEgZGVkaWNhdGVkIFJlc291cmNlT3duZXIiCisKK0VY VEVOU0lPTiA9IHRlc3Rfc3BpX3Jlc293bmVyCitEQVRBID0gdGVzdF9zcGlfcmVzb3duZXItLTEu MC5zcWwKKworUkVHUkVTUyA9IHJpX2Zhc3RwYXRoCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05G SUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5j bHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc3BpX3Jl c293bmVyCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRp cikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29u dHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf c3BpX3Jlc293bmVyL2V4cGVjdGVkL3JpX2Zhc3RwYXRoLm91dCBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9zcGlfcmVzb3duZXIvZXhwZWN0ZWQvcmlfZmFzdHBhdGgub3V0Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMzk4NGNhODkyZQotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zcGlfcmVzb3duZXIvZXhwZWN0ZWQvcmlfZmFzdHBhdGgu b3V0CkBAIC0wLDAgKzEsMTE2IEBACistLQorLS0gVGVzdCBSSSBmYXN0LXBhdGggRksgY2hlY2sg dW5kZXIgQy1sZXZlbCBTUEkuCistLQorLS0gVGhlIFJJIGZhc3QtcGF0aCBjYWNoZXMgUEsgcmVs YXRpb24gcmVmZXJlbmNlcyBpbiByaV9GYXN0UGF0aEdldEVudHJ5KCkKKy0tIHVuZGVyIHRoZSBj dXJyZW50IHJlc291cmNlIG93bmVyLiAgV2hlbiBGSyB0cmlnZ2VycyBmaXJlIGluc2lkZSBhCist LSBDLWxldmVsIFNQSSBjb250ZXh0IHRoYXQgY3JlYXRlcyBhIGRlZGljYXRlZCBzaG9ydC1saXZl ZCByZXNvdXJjZSBvd25lciwKKy0tIHRob3NlIHJlZmVyZW5jZXMgbXVzdCBiZSByZWxlYXNlZCBi ZWZvcmUgdGhlIGlubmVyIHJlc291cmNlIG93bmVyIGlzCistLSByZWxlYXNlZC4gIFRoZSBmaXgg ZW5zdXJlcyBiYXRjaCBjYWxsYmFja3MgZmlyZSBhdCB0aGUgc2FtZSBmaXJpbmcgZGVwdGgKKy0t IGF0IHdoaWNoIHRoZXkgd2VyZSByZWdpc3RlcmVkLCB3aGlsZSB0aGUgY29ycmVzcG9uZGluZyBy ZXNvdXJjZSBvd25lcgorLS0gaXMgc3RpbGwgYWxpdmUuICBXaXRob3V0IHRoaXMsIHJpX0Zhc3RQ YXRoVGVhcmRvd24gd291bGQgY3Jhc2ggd2l0aAorLS0gQXNzZXJ0KHJlbC0+cmRfcmVmY250ID4g MCkgaW4gaW5kZXhfY2xvc2UuCistLQorLS0gU2ltcGxlIFBML3BnU1FMIGRvZXMgbm90IHRyaWdn ZXIgdGhpcyBiZWNhdXNlIGl0cyBTUEkgY29ubmVjdGlvbiBzcGFucworLS0gdGhlIGVudGlyZSBm dW5jdGlvbiBjYWxsLCBzbyBpdHMgcmVzb3VyY2Ugb3duZXIgb3V0bGl2ZXMgdGhlIGJhdGNoCist LSBjYWxsYmFjay4gIFRoZSBjcml0aWNhbCB0ZXN0IGNhc2UgcmVxdWlyZXMgYSBDIGZ1bmN0aW9u IHRoYXQgY3JlYXRlcyBhCistLSBkZWRpY2F0ZWQgc2hvcnQtbGl2ZWQgcmVzb3VyY2Ugb3duZXIg YXJvdW5kIGl0cyBTUEkgY2FsbC4KKy0tCitDUkVBVEUgRVhURU5TSU9OIHRlc3Rfc3BpX3Jlc293 bmVyOworQ1JFQVRFIFRBQkxFIHJpX2ZwX3BrMSAoaWQgc2VyaWFsIFBSSU1BUlkgS0VZKTsKK0NS RUFURSBUQUJMRSByaV9mcF9wazIgKGlkIHNlcmlhbCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFC TEUgcmlfZnBfcGszIChpZCBzZXJpYWwgUFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8gcmlfZnBf cGsxIFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyByaV9mcF9wazIgVkFMVUVTICgxKTsKK0lOU0VS VCBJTlRPIHJpX2ZwX3BrMyBWQUxVRVMgKDEpOworQ1JFQVRFIFRBQkxFIHJpX2ZwX2ZrICgKKyAg ICBpZCBzZXJpYWwgUFJJTUFSWSBLRVksCisgICAgYSBpbnQgUkVGRVJFTkNFUyByaV9mcF9wazEo aWQpLAorICAgIGIgaW50IFJFRkVSRU5DRVMgcmlfZnBfcGsyKGlkKSwKKyAgICBjIGludCBSRUZF UkVOQ0VTIHJpX2ZwX3BrMyhpZCksCisgICAgZCBpbnQgUkVGRVJFTkNFUyByaV9mcF9wazEoaWQp LAorICAgIGUgaW50IFJFRkVSRU5DRVMgcmlfZnBfcGsyKGlkKSwKKyAgICBmIGludCBSRUZFUkVO Q0VTIHJpX2ZwX3BrMyhpZCkKKyk7CistLSBDLWxldmVsIFNQSSBJTlNFUlQ6IHRoZSBjcml0aWNh bCB0ZXN0IGNhc2UuCitTRUxFQ1Qgc3BpX2V4ZWNfc3FsKAorICAgICdJTlNFUlQgSU5UTyByaV9m cF9mayAoYSwgYiwgYywgZCwgZSwgZikgVkFMVUVTICgxLCAxLCAxLCAxLCAxLCAxKScpOworIHNw aV9leGVjX3NxbCAKKy0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIEFkZGl0aW9uYWwg Qy1sZXZlbCBTUEkgSU5TRVJUcyB0byBleGVyY2lzZSBiYXRjaCByZXVzZSBhY3Jvc3MgY2FsbHMu CistLSBVc2UgZGlmZmVyZW50IGNvbHVtbiBvcmRlcmluZ3MgdG8gZW5zdXJlIGVhY2ggaXMgYSBk aXN0aW5jdCBzdGF0ZW1lbnQuCitTRUxFQ1Qgc3BpX2V4ZWNfc3FsKAorICAgICdJTlNFUlQgSU5U TyByaV9mcF9mayAoZiwgZSwgZCwgYywgYiwgYSkgVkFMVUVTICgxLCAxLCAxLCAxLCAxLCAxKScp OworIHNwaV9leGVjX3NxbCAKKy0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBz cGlfZXhlY19zcWwoCisgICAgJ0lOU0VSVCBJTlRPIHJpX2ZwX2ZrIChhLCBjLCBlLCBiLCBkLCBm KSBWQUxVRVMgKDEsIDEsIDEsIDEsIDEsIDEpJyk7Cisgc3BpX2V4ZWNfc3FsIAorLS0tLS0tLS0t LS0tLS0KKyAKKygxIHJvdykKKworLS0gQy1sZXZlbCBTUEkgd2l0aCBGSyB2aW9sYXRpb246IHNo b3VsZCBlcnJvcgorU0VMRUNUIHNwaV9leGVjX3NxbCgKKyAgICAnSU5TRVJUIElOVE8gcmlfZnBf ZmsgKGEsIGIsIGMsIGQsIGUsIGYpIFZBTFVFUyAoOTk5LCAxLCAxLCAxLCAxLCAxKScpOworRVJS T1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxlICJyaV9mcF9mayIgdmlvbGF0ZXMgZm9yZWln biBrZXkgY29uc3RyYWludCAicmlfZnBfZmtfYV9ma2V5IgorREVUQUlMOiAgS2V5IChhKT0oOTk5 KSBpcyBub3QgcHJlc2VudCBpbiB0YWJsZSAicmlfZnBfcGsxIi4KK0NPTlRFWFQ6ICBTUUwgc3Rh dGVtZW50ICJJTlNFUlQgSU5UTyByaV9mcF9mayAoYSwgYiwgYywgZCwgZSwgZikgVkFMVUVTICg5 OTksIDEsIDEsIDEsIDEsIDEpIgorLS0gTmVzdGVkOiBQTC9wZ1NRTCBjYWxsaW5nIEMgU1BJICht aW1pY3MgUG9zdEdJUyB0b1RvcG9HZW9tIHBhdHRlcm4pCitDUkVBVEUgRlVOQ1RJT04gcGxwZ3Nx bF9jYWxsc19jX3NwaSgpIFJFVFVSTlMgdm9pZCBBUyAkJAorREVDTEFSRQorICAgIGluc19zdG10 IHRleHQgOj0gJ0lOU0VSVCBJTlRPIHJpX2ZwX2ZrIChhLCBiLCBjLCBkLCBlLCBmKSBWQUxVRVMg KDEsIDEsIDEsIDEsIDEsIDEpJzsKK0JFR0lOCisgICAgUEVSRk9STSBzcGlfZXhlY19zcWwoaW5z X3N0bXQpOworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbDsKK1NFTEVDVCBwbHBnc3FsX2NhbGxz X2Nfc3BpKCk7CisgcGxwZ3NxbF9jYWxsc19jX3NwaSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IAorKDEgcm93KQorCistLSBBRlRFUiB0cmlnZ2VyIHRoYXQgdXNlcyBDLWxldmVsIFNQSSB0byBp bnNlcnQgaW50byBhbiBGSy1yZWZlcmVuY2luZyB0YWJsZS4KKy0tIFRoZSBGSyBiYXRjaCBjYWxs YmFjayBpcyByZWdpc3RlcmVkIGF0IHRoZSBpbm5lciBTUEkncyBxdWVyeSBsZXZlbCBhbmQKKy0t IG11c3QgZmlyZSBiZWZvcmUgdGhlIGlubmVyIHJlc291cmNlIG93bmVyIGlzIHJlbGVhc2VkLgor Q1JFQVRFIFRBQkxFIHJpX2ZwX291dGVyIChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRB QkxFIHJpX2ZwX2lubmVyIChpZCBpbnQgUkVGRVJFTkNFUyByaV9mcF9wazEoaWQpKTsKK0NSRUFU RSBGVU5DVElPTiBvdXRlcl90cmlnZ2VyX3NwaV9vaygpIFJFVFVSTlMgdHJpZ2dlciBBUyAkJAor QkVHSU4KKyAgICBQRVJGT1JNIHNwaV9leGVjX3NxbCgnSU5TRVJUIElOVE8gcmlfZnBfaW5uZXIg VkFMVUVTICgxKScpOworICAgIFJFVFVSTiBORVc7CitFTkQgJCQgTEFOR1VBR0UgcGxwZ3NxbDsK K0NSRUFURSBUUklHR0VSIG91dGVyX3RnIEFGVEVSIElOU0VSVCBPTiByaV9mcF9vdXRlcgorICAg IEZPUiBFQUNIIFJPVyBFWEVDVVRFIEZVTkNUSU9OIG91dGVyX3RyaWdnZXJfc3BpX29rKCk7Cist LSBGaXJlcyBvdXRlcl90Zywgd2hvc2UgUEwvcGdTUUwgYm9keSBjYWxscyBzcGlfZXhlY19zcWwo KS4gIFRoZSBDIGZ1bmN0aW9uCistLSBjcmVhdGVzIGEgZGVkaWNhdGVkIHJlc291cmNlIG93bmVy IHRoYXQgaXMgcmVsZWFzZWQgYWZ0ZXIgdGhlIEZLIGJhdGNoCistLSBjYWxsYmFjayBmaXJlcy4K K0lOU0VSVCBJTlRPIHJpX2ZwX291dGVyIFZBTFVFUyAoMSk7CitDUkVBVEUgRlVOQ1RJT04gb3V0 ZXJfdHJpZ2dlcl9zcGlfZmFpbCgpIFJFVFVSTlMgdHJpZ2dlciBBUyAkJAorQkVHSU4KKyAgICBQ RVJGT1JNIHNwaV9leGVjX3NxbCgnSU5TRVJUIElOVE8gcmlfZnBfaW5uZXIgVkFMVUVTICgzKScp OworICAgIFJFVFVSTiBORVc7CitFTkQgJCQgTEFOR1VBR0UgcGxwZ3NxbDsKK0RST1AgVFJJR0dF UiBvdXRlcl90ZyBPTiByaV9mcF9vdXRlcjsKK0RST1AgRlVOQ1RJT04gb3V0ZXJfdHJpZ2dlcl9z cGlfb2soKTsKK0NSRUFURSBUUklHR0VSIG91dGVyX3RnIEFGVEVSIElOU0VSVCBPTiByaV9mcF9v dXRlcgorICAgIEZPUiBFQUNIIFJPVyBFWEVDVVRFIEZVTkNUSU9OIG91dGVyX3RyaWdnZXJfc3Bp X2ZhaWwoKTsKKy0tICBMaWtlIGFib3ZlIGJ1dCB0aGUgaW5uZXIgaW5zZXJ0IGZhaWxzLgorSU5T RVJUIElOVE8gcmlfZnBfb3V0ZXIgVkFMVUVTICgyKTsKK0VSUk9SOiAgaW5zZXJ0IG9yIHVwZGF0 ZSBvbiB0YWJsZSAicmlfZnBfaW5uZXIiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQg InJpX2ZwX2lubmVyX2lkX2ZrZXkiCitERVRBSUw6ICBLZXkgKGlkKT0oMykgaXMgbm90IHByZXNl bnQgaW4gdGFibGUgInJpX2ZwX3BrMSIuCitDT05URVhUOiAgU1FMIHN0YXRlbWVudCAiSU5TRVJU IElOVE8gcmlfZnBfaW5uZXIgVkFMVUVTICgzKSIKK1NRTCBzdGF0ZW1lbnQgIlNFTEVDVCBzcGlf ZXhlY19zcWwoJ0lOU0VSVCBJTlRPIHJpX2ZwX2lubmVyIFZBTFVFUyAoMyknKSIKK1BML3BnU1FM IGZ1bmN0aW9uIG91dGVyX3RyaWdnZXJfc3BpX2ZhaWwoKSBsaW5lIDMgYXQgUEVSRk9STQorRFJP UCBUUklHR0VSIG91dGVyX3RnIE9OIHJpX2ZwX291dGVyOworRFJPUCBGVU5DVElPTiBvdXRlcl90 cmlnZ2VyX3NwaV9mYWlsKCk7CitEUk9QIFRBQkxFIHJpX2ZwX2lubmVyLCByaV9mcF9vdXRlcjsK Ky0tIENsZWFudXAKK0RST1AgVEFCTEUgcmlfZnBfZms7CitEUk9QIFRBQkxFIHJpX2ZwX3BrMywg cmlfZnBfcGsyLCByaV9mcF9wazE7CitEUk9QIEVYVEVOU0lPTiB0ZXN0X3NwaV9yZXNvd25lcjsK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zcGlfcmVzb3duZXIvbWVzb24uYnVp bGQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc3BpX3Jlc293bmVyL21lc29uLmJ1aWxkCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mYmIwMjdlMDVjNwotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zcGlfcmVzb3duZXIvbWVzb24uYnVpbGQK QEAgLTAsMCArMSwzMSBAQAordGVzdF9zcGlfcmVzb3duZXJfc291cmNlcyA9IGZpbGVzKAorICAn dGVzdF9zcGlfcmVzb3duZXIuYycsCispCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJwor ICB0ZXN0X3NwaV9yZXNvd25lcl9zb3VyY2VzICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZl cl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUnLCAndGVzdF9zcGlfcmVzb3duZXInLAor ICAgICctLUZJTEVERVNDJywgJ3Rlc3Rfc3BpX3Jlc293bmVyIC0gU1FMLWNhbGxhYmxlIEMgU1BJ IGZ1bmN0aW9uIHVuZGVyIGEgZGVkaWNhdGVkIFJlc291cmNlT3duZXInLF0pCitlbmRpZgorCit0 ZXN0X3NwaV9yZXNvd25lciA9IHNoYXJlZF9tb2R1bGUoJ3Rlc3Rfc3BpX3Jlc293bmVyJywKKyAg dGVzdF9zcGlfcmVzb3duZXJfc291cmNlcywKKyAga3dhcmdzOiBwZ190ZXN0X21vZF9hcmdzLAor KQordGVzdF9pbnN0YWxsX2xpYnMgKz0gdGVzdF9zcGlfcmVzb3duZXIKKwordGVzdF9pbnN0YWxs X2RhdGEgKz0gZmlsZXMoCisgICd0ZXN0X3NwaV9yZXNvd25lci5jb250cm9sJywKKyAgJ3Rlc3Rf c3BpX3Jlc293bmVyLS0xLjAuc3FsJywKKykKKwordGVzdHMgKz0geworICAnbmFtZSc6ICd0ZXN0 X3NwaV9yZXNvd25lcicsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAorICAn YmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAncmVncmVzcyc6IHsKKyAgICAnc3Fs JzogWworICAgICAgJ3JpX2Zhc3RwYXRoJywKKyAgICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NwaV9yZXNvd25lci9zcWwvcmlfZmFzdHBhdGguc3FsIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NwaV9yZXNvd25lci9zcWwvcmlfZmFzdHBhdGguc3FsCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xMWE1NjFhMDZhYwotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zcGlfcmVzb3duZXIvc3FsL3JpX2Zh c3RwYXRoLnNxbApAQCAtMCwwICsxLDEwNSBAQAorLS0KKy0tIFRlc3QgUkkgZmFzdC1wYXRoIEZL IGNoZWNrIHVuZGVyIEMtbGV2ZWwgU1BJLgorLS0KKy0tIFRoZSBSSSBmYXN0LXBhdGggY2FjaGVz IFBLIHJlbGF0aW9uIHJlZmVyZW5jZXMgaW4gcmlfRmFzdFBhdGhHZXRFbnRyeSgpCistLSB1bmRl ciB0aGUgY3VycmVudCByZXNvdXJjZSBvd25lci4gIFdoZW4gRksgdHJpZ2dlcnMgZmlyZSBpbnNp ZGUgYQorLS0gQy1sZXZlbCBTUEkgY29udGV4dCB0aGF0IGNyZWF0ZXMgYSBkZWRpY2F0ZWQgc2hv cnQtbGl2ZWQgcmVzb3VyY2Ugb3duZXIsCistLSB0aG9zZSByZWZlcmVuY2VzIG11c3QgYmUgcmVs ZWFzZWQgYmVmb3JlIHRoZSBpbm5lciByZXNvdXJjZSBvd25lciBpcworLS0gcmVsZWFzZWQuICBU aGUgZml4IGVuc3VyZXMgYmF0Y2ggY2FsbGJhY2tzIGZpcmUgYXQgdGhlIHNhbWUgZmlyaW5nIGRl cHRoCistLSBhdCB3aGljaCB0aGV5IHdlcmUgcmVnaXN0ZXJlZCwgd2hpbGUgdGhlIGNvcnJlc3Bv bmRpbmcgcmVzb3VyY2Ugb3duZXIKKy0tIGlzIHN0aWxsIGFsaXZlLiAgV2l0aG91dCB0aGlzLCBy aV9GYXN0UGF0aFRlYXJkb3duIHdvdWxkIGNyYXNoIHdpdGgKKy0tIEFzc2VydChyZWwtPnJkX3Jl ZmNudCA+IDApIGluIGluZGV4X2Nsb3NlLgorLS0KKy0tIFNpbXBsZSBQTC9wZ1NRTCBkb2VzIG5v dCB0cmlnZ2VyIHRoaXMgYmVjYXVzZSBpdHMgU1BJIGNvbm5lY3Rpb24gc3BhbnMKKy0tIHRoZSBl bnRpcmUgZnVuY3Rpb24gY2FsbCwgc28gaXRzIHJlc291cmNlIG93bmVyIG91dGxpdmVzIHRoZSBi YXRjaAorLS0gY2FsbGJhY2suICBUaGUgY3JpdGljYWwgdGVzdCBjYXNlIHJlcXVpcmVzIGEgQyBm dW5jdGlvbiB0aGF0IGNyZWF0ZXMgYQorLS0gZGVkaWNhdGVkIHNob3J0LWxpdmVkIHJlc291cmNl IG93bmVyIGFyb3VuZCBpdHMgU1BJIGNhbGwuCistLQorQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X3Nw aV9yZXNvd25lcjsKKworQ1JFQVRFIFRBQkxFIHJpX2ZwX3BrMSAoaWQgc2VyaWFsIFBSSU1BUlkg S0VZKTsKK0NSRUFURSBUQUJMRSByaV9mcF9wazIgKGlkIHNlcmlhbCBQUklNQVJZIEtFWSk7CitD UkVBVEUgVEFCTEUgcmlfZnBfcGszIChpZCBzZXJpYWwgUFJJTUFSWSBLRVkpOworSU5TRVJUIElO VE8gcmlfZnBfcGsxIFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyByaV9mcF9wazIgVkFMVUVTICgx KTsKK0lOU0VSVCBJTlRPIHJpX2ZwX3BrMyBWQUxVRVMgKDEpOworCitDUkVBVEUgVEFCTEUgcmlf ZnBfZmsgKAorICAgIGlkIHNlcmlhbCBQUklNQVJZIEtFWSwKKyAgICBhIGludCBSRUZFUkVOQ0VT IHJpX2ZwX3BrMShpZCksCisgICAgYiBpbnQgUkVGRVJFTkNFUyByaV9mcF9wazIoaWQpLAorICAg IGMgaW50IFJFRkVSRU5DRVMgcmlfZnBfcGszKGlkKSwKKyAgICBkIGludCBSRUZFUkVOQ0VTIHJp X2ZwX3BrMShpZCksCisgICAgZSBpbnQgUkVGRVJFTkNFUyByaV9mcF9wazIoaWQpLAorICAgIGYg aW50IFJFRkVSRU5DRVMgcmlfZnBfcGszKGlkKQorKTsKKworLS0gQy1sZXZlbCBTUEkgSU5TRVJU OiB0aGUgY3JpdGljYWwgdGVzdCBjYXNlLgorU0VMRUNUIHNwaV9leGVjX3NxbCgKKyAgICAnSU5T RVJUIElOVE8gcmlfZnBfZmsgKGEsIGIsIGMsIGQsIGUsIGYpIFZBTFVFUyAoMSwgMSwgMSwgMSwg MSwgMSknKTsKKworLS0gQWRkaXRpb25hbCBDLWxldmVsIFNQSSBJTlNFUlRzIHRvIGV4ZXJjaXNl IGJhdGNoIHJldXNlIGFjcm9zcyBjYWxscy4KKy0tIFVzZSBkaWZmZXJlbnQgY29sdW1uIG9yZGVy aW5ncyB0byBlbnN1cmUgZWFjaCBpcyBhIGRpc3RpbmN0IHN0YXRlbWVudC4KK1NFTEVDVCBzcGlf ZXhlY19zcWwoCisgICAgJ0lOU0VSVCBJTlRPIHJpX2ZwX2ZrIChmLCBlLCBkLCBjLCBiLCBhKSBW QUxVRVMgKDEsIDEsIDEsIDEsIDEsIDEpJyk7CitTRUxFQ1Qgc3BpX2V4ZWNfc3FsKAorICAgICdJ TlNFUlQgSU5UTyByaV9mcF9mayAoYSwgYywgZSwgYiwgZCwgZikgVkFMVUVTICgxLCAxLCAxLCAx LCAxLCAxKScpOworCistLSBDLWxldmVsIFNQSSB3aXRoIEZLIHZpb2xhdGlvbjogc2hvdWxkIGVy cm9yCitTRUxFQ1Qgc3BpX2V4ZWNfc3FsKAorICAgICdJTlNFUlQgSU5UTyByaV9mcF9mayAoYSwg YiwgYywgZCwgZSwgZikgVkFMVUVTICg5OTksIDEsIDEsIDEsIDEsIDEpJyk7CisKKy0tIE5lc3Rl ZDogUEwvcGdTUUwgY2FsbGluZyBDIFNQSSAobWltaWNzIFBvc3RHSVMgdG9Ub3BvR2VvbSBwYXR0 ZXJuKQorQ1JFQVRFIEZVTkNUSU9OIHBscGdzcWxfY2FsbHNfY19zcGkoKSBSRVRVUk5TIHZvaWQg QVMgJCQKK0RFQ0xBUkUKKyAgICBpbnNfc3RtdCB0ZXh0IDo9ICdJTlNFUlQgSU5UTyByaV9mcF9m ayAoYSwgYiwgYywgZCwgZSwgZikgVkFMVUVTICgxLCAxLCAxLCAxLCAxLCAxKSc7CitCRUdJTgor ICAgIFBFUkZPUk0gc3BpX2V4ZWNfc3FsKGluc19zdG10KTsKK0VORDsKKyQkIExBTkdVQUdFIHBs cGdzcWw7CisKK1NFTEVDVCBwbHBnc3FsX2NhbGxzX2Nfc3BpKCk7CisKKy0tIEFGVEVSIHRyaWdn ZXIgdGhhdCB1c2VzIEMtbGV2ZWwgU1BJIHRvIGluc2VydCBpbnRvIGFuIEZLLXJlZmVyZW5jaW5n IHRhYmxlLgorLS0gVGhlIEZLIGJhdGNoIGNhbGxiYWNrIGlzIHJlZ2lzdGVyZWQgYXQgdGhlIGlu bmVyIFNQSSdzIHF1ZXJ5IGxldmVsIGFuZAorLS0gbXVzdCBmaXJlIGJlZm9yZSB0aGUgaW5uZXIg cmVzb3VyY2Ugb3duZXIgaXMgcmVsZWFzZWQuCitDUkVBVEUgVEFCTEUgcmlfZnBfb3V0ZXIgKGlk IGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgcmlfZnBfaW5uZXIgKGlkIGludCBSRUZF UkVOQ0VTIHJpX2ZwX3BrMShpZCkpOworCitDUkVBVEUgRlVOQ1RJT04gb3V0ZXJfdHJpZ2dlcl9z cGlfb2soKSBSRVRVUk5TIHRyaWdnZXIgQVMgJCQKK0JFR0lOCisgICAgUEVSRk9STSBzcGlfZXhl Y19zcWwoJ0lOU0VSVCBJTlRPIHJpX2ZwX2lubmVyIFZBTFVFUyAoMSknKTsKKyAgICBSRVRVUk4g TkVXOworRU5EICQkIExBTkdVQUdFIHBscGdzcWw7CisKK0NSRUFURSBUUklHR0VSIG91dGVyX3Rn IEFGVEVSIElOU0VSVCBPTiByaV9mcF9vdXRlcgorICAgIEZPUiBFQUNIIFJPVyBFWEVDVVRFIEZV TkNUSU9OIG91dGVyX3RyaWdnZXJfc3BpX29rKCk7CisKKy0tIEZpcmVzIG91dGVyX3RnLCB3aG9z ZSBQTC9wZ1NRTCBib2R5IGNhbGxzIHNwaV9leGVjX3NxbCgpLiAgVGhlIEMgZnVuY3Rpb24KKy0t IGNyZWF0ZXMgYSBkZWRpY2F0ZWQgcmVzb3VyY2Ugb3duZXIgdGhhdCBpcyByZWxlYXNlZCBhZnRl ciB0aGUgRksgYmF0Y2gKKy0tIGNhbGxiYWNrIGZpcmVzLgorSU5TRVJUIElOVE8gcmlfZnBfb3V0 ZXIgVkFMVUVTICgxKTsKKworQ1JFQVRFIEZVTkNUSU9OIG91dGVyX3RyaWdnZXJfc3BpX2ZhaWwo KSBSRVRVUk5TIHRyaWdnZXIgQVMgJCQKK0JFR0lOCisgICAgUEVSRk9STSBzcGlfZXhlY19zcWwo J0lOU0VSVCBJTlRPIHJpX2ZwX2lubmVyIFZBTFVFUyAoMyknKTsKKyAgICBSRVRVUk4gTkVXOwor RU5EICQkIExBTkdVQUdFIHBscGdzcWw7CisKK0RST1AgVFJJR0dFUiBvdXRlcl90ZyBPTiByaV9m cF9vdXRlcjsKK0RST1AgRlVOQ1RJT04gb3V0ZXJfdHJpZ2dlcl9zcGlfb2soKTsKKworQ1JFQVRF IFRSSUdHRVIgb3V0ZXJfdGcgQUZURVIgSU5TRVJUIE9OIHJpX2ZwX291dGVyCisgICAgRk9SIEVB Q0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04gb3V0ZXJfdHJpZ2dlcl9zcGlfZmFpbCgpOworCistLSAg TGlrZSBhYm92ZSBidXQgdGhlIGlubmVyIGluc2VydCBmYWlscy4KK0lOU0VSVCBJTlRPIHJpX2Zw X291dGVyIFZBTFVFUyAoMik7CisKK0RST1AgVFJJR0dFUiBvdXRlcl90ZyBPTiByaV9mcF9vdXRl cjsKK0RST1AgRlVOQ1RJT04gb3V0ZXJfdHJpZ2dlcl9zcGlfZmFpbCgpOworRFJPUCBUQUJMRSBy aV9mcF9pbm5lciwgcmlfZnBfb3V0ZXI7CisKKy0tIENsZWFudXAKK0RST1AgVEFCTEUgcmlfZnBf Zms7CitEUk9QIFRBQkxFIHJpX2ZwX3BrMywgcmlfZnBfcGsyLCByaV9mcF9wazE7CitEUk9QIEVY VEVOU0lPTiB0ZXN0X3NwaV9yZXNvd25lcjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9zcGlfcmVzb3duZXIvdGVzdF9zcGlfcmVzb3duZXItLTEuMC5zcWwgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3Rfc3BpX3Jlc293bmVyL3Rlc3Rfc3BpX3Jlc293bmVyLS0xLjAuc3FsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yOWVmNzBlZTBkYwotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zcGlfcmVzb3duZXIvdGVzdF9zcGlfcmVz b3duZXItLTEuMC5zcWwKQEAgLTAsMCArMSw5IEBACisvKiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf c3BpX3Jlc293bmVyL3Rlc3Rfc3BpX3Jlc293bmVyLS0xLjAuc3FsICovCisKKy0tIGNvbXBsYWlu IGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhU RU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gdGVzdF9zcGlfcmVzb3duZXIiIHRv IGxvYWQgdGhpcyBmaWxlLiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gc3BpX2V4ZWNfc3FsKHF1 ZXJ5IHRleHQpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAnc3BpX2V4ZWNf c3FsJworTEFOR1VBR0UgQyBTVFJJQ1Q7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rl c3Rfc3BpX3Jlc293bmVyL3Rlc3Rfc3BpX3Jlc293bmVyLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3Rfc3BpX3Jlc293bmVyL3Rlc3Rfc3BpX3Jlc293bmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjAzMDYxMzliNWMwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X3NwaV9yZXNvd25lci90ZXN0X3NwaV9yZXNvd25lci5jCkBAIC0wLDAg KzEsNzAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHRlc3Rfc3BpX3Jlc293bmVyLmMK KyAqCQlTUUwtY2FsbGFibGUgQyBmdW5jdGlvbiB0aGF0IHVzZXMgU1BJIHRvIGV4ZWN1dGUgYSBx dWVyeS4KKyAqCisgKgkJVXNlZnVsIGZvciB0ZXN0aW5nIGNvZGUgcGF0aHMgdGhhdCBvbmx5IHRy aWdnZXIgdW5kZXIgQy1sZXZlbAorICoJCVNQSSAobm90IFBML3BnU1FMKSwgc3VjaCBhcyByZXNv dXJjZSBvd25lciBpbnRlcmFjdGlvbnMgd2l0aAorICoJCVJJIGZhc3QtcGF0aCBGSyBjaGVja3Mu CisgKgorICogQ29weXJpZ2h0IChjKSAyMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkJc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X3NwaV9yZXNvd25lci90ZXN0X3NwaV9yZXNvd25lci5jCisgKgorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiZXhlY3V0b3Ivc3BpLmgi CisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKworUEdfTU9EVUxFX01BR0lDOworCitQR19G VU5DVElPTl9JTkZPX1YxKHNwaV9leGVjX3NxbCk7CisKKy8qCisgKiBzcGlfZXhlY19zcWwocXVl cnkgdGV4dCkgLSBleGVjdXRlIGEgU1FMIHF1ZXJ5IHZpYSBTUEkuCisgKgorICogT3BlbnMgYSBm cmVzaCBTUEkgY29ubmVjdGlvbiwgZXhlY3V0ZXMgdGhlIHF1ZXJ5LCBhbmQgY2xvc2VzIHRoZQor ICogY29ubmVjdGlvbi4gIENyZWF0ZXMgYSBkZWRpY2F0ZWQgY2hpbGQgcmVzb3VyY2Ugb3duZXIg YXJvdW5kIHRoZQorICogU1BJX2V4ZWN1dGUgY2FsbCBhbmQgcmVsZWFzZXMgaXQgYmVmb3JlIHJl dHVybmluZywgZW5zdXJpbmcgdGhhdAorICogYW55IHJlc291cmNlcyByZWdpc3RlcmVkIHVuZGVy IGl0IChzdWNoIGFzIHJlbGF0aW9uIHJlZmVyZW5jZXMKKyAqIG9wZW5lZCBieSBSSSBmYXN0LXBh dGggRksgY2hlY2tzKSBhcmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBvdXRlcgorICogdHJpZ2dlci1m aXJpbmcgYmF0Y2ggY2FsbGJhY2sgZmlyZXMuICBUaGlzIHJlcHJvZHVjZXMgdGhlIHJlc291cmNl CisgKiBvd25lciBtaXNtYXRjaCB0aGF0IG9jY3VycyB3aXRoIEMtbGFuZ3VhZ2UgZXh0ZW5zaW9u cyBsaWtlIFBvc3RHSVMKKyAqIHRvcG9sb2d5IGZ1bmN0aW9ucywgd2hpY2ggY2Fubm90IGJlIHRy aWdnZXJlZCBmcm9tIFBML3BnU1FMIHNpbmNlCisgKiBQTC9wZ1NRTCdzIFNQSSBjb25uZWN0aW9u IHNwYW5zIHRoZSBlbnRpcmUgZnVuY3Rpb24gY2FsbC4KKyAqLworRGF0dW0KK3NwaV9leGVjX3Nx bChQR19GVU5DVElPTl9BUkdTKQoreworCWNvbnN0IGNoYXIgKnF1ZXJ5ID0gdGV4dF90b19jc3Ry aW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwlpbnQJCQlyZXQ7CisJUmVzb3VyY2VPd25lciBz YXZlID0gQ3VycmVudFJlc291cmNlT3duZXI7CisJUmVzb3VyY2VPd25lciBjaGlsZG93bmVyID0g UmVzb3VyY2VPd25lckNyZWF0ZShzYXZlLCAidGVzdF9zcGkgaW5uZXIiKTsKKworCVNQSV9jb25u ZWN0KCk7CisKKwlDdXJyZW50UmVzb3VyY2VPd25lciA9IGNoaWxkb3duZXI7CisJcmV0ID0gU1BJ X2V4ZWN1dGUocXVlcnksIGZhbHNlLCAwKTsKKworCWlmIChyZXQgPCAwKQorCQllbG9nKEVSUk9S LCAiU1BJX2V4ZWN1dGUgZmFpbGVkOiBlcnJvciBjb2RlICVkIiwgcmV0KTsKKworCVNQSV9maW5p c2goKTsKKworCUN1cnJlbnRSZXNvdXJjZU93bmVyID0gc2F2ZTsKKwlSZXNvdXJjZU93bmVyUmVs ZWFzZShjaGlsZG93bmVyLAorCQkJCQkJIFJFU09VUkNFX1JFTEVBU0VfQkVGT1JFX0xPQ0tTLAor CQkJCQkJIHRydWUsIGZhbHNlKTsKKwlSZXNvdXJjZU93bmVyUmVsZWFzZShjaGlsZG93bmVyLAor CQkJCQkJIFJFU09VUkNFX1JFTEVBU0VfTE9DS1MsCisJCQkJCQkgdHJ1ZSwgZmFsc2UpOworCVJl c291cmNlT3duZXJSZWxlYXNlKGNoaWxkb3duZXIsCisJCQkJCQkgUkVTT1VSQ0VfUkVMRUFTRV9B RlRFUl9MT0NLUywKKwkJCQkJCSB0cnVlLCBmYWxzZSk7CisJUmVzb3VyY2VPd25lckRlbGV0ZShj aGlsZG93bmVyKTsKKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3Rfc3BpX3Jlc293bmVyL3Rlc3Rfc3BpX3Jlc293bmVyLmNvbnRyb2wgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc3BpX3Jlc293bmVyL3Rlc3Rfc3BpX3Jlc293bmVyLmNvbnRy b2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIxMjBhZTk0NDJmCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NwaV9yZXNvd25lci90ZXN0 X3NwaV9yZXNvd25lci5jb250cm9sCkBAIC0wLDAgKzEsNCBAQAorY29tbWVudCA9ICdUZXN0IFNR TC1jYWxsYWJsZSBDIGZ1bmN0aW9uIHRoYXQgdXNlcyBTUEkgdXNpbmcgZGVkaWNhdGVkIFJlc291 cmNlT3duZXInCitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1lID0gJyRs aWJkaXIvdGVzdF9zcGlfcmVzb3duZXInCityZWxvY2F0YWJsZSA9IHRydWUKLS0gCjIuNDcuMwoK --0000000000002fe097064f02face--