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.94.2) (envelope-from ) id 1uoV4U-004wkj-18 for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Aug 2025 22:44:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uoV4T-00HTVW-9W for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Aug 2025 22:44:49 +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.94.2) (envelope-from ) id 1uoV4S-00HTVO-QH for pgsql-hackers@lists.postgresql.org; Tue, 19 Aug 2025 22:44:49 +0000 Received: from mail-vk1-xa31.google.com ([2607:f8b0:4864:20::a31]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uoV4Q-000nRR-2M for pgsql-hackers@postgresql.org; Tue, 19 Aug 2025 22:44:49 +0000 Received: by mail-vk1-xa31.google.com with SMTP id 71dfb90a1353d-53b17193865so1782094e0c.0 for ; Tue, 19 Aug 2025 15:44:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755643484; x=1756248284; 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=7RglyWlBa1AnPCSQgBcu9Ad4aqEysgBLBpMJuVuA928=; b=moiSxvtXWN+tnHLdeHJHLAXCPF2x1HeuSmkxKaJXQ11pgmED0/aHEuIc5o+1fo0AbQ P1vWsaGOlT/EjD9e6Za4Gq7L+Dab2elv4AVg+HjU7IxybptiDhZmNBNp3ZPnPe8DeAMR lVEuSsPZND3Jhh99qOqbKbAttVaV12d+oWh66wRHhLob8HtLf5F1kMY2f3dw6G5GNUn9 y3cfWVqePwVe47twuzPyrkb9KgH7x0NEMgOorbnyVM6d4x/CFsMLeY0kt6v+uMboCejD UyTh/pHVqRGBu+rZtRlLIV/9HuJpOvonM+8ohJ7UKbaaZcOyqjeaLYrVSi7mOJo6d79I XoJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755643484; x=1756248284; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=7RglyWlBa1AnPCSQgBcu9Ad4aqEysgBLBpMJuVuA928=; b=Uz9P9LGXkAibElSN8q7D4p+nNyAN4JNnXPircodTd0W5W7ehdOSlmycTOVtPV0+Q7J 679cEoxQ8qs9oCYjs2wbN88xiqYnKPsUHNfcyUq9928Iwy+xKvMTdzMuTEJ/CGymNmaa sct38asDXBugd/EHh3ojwtz+uFMlVwSPTV48geR/qYyrElIKovRtcUOuGzSofI0IMGY9 UiZOhxFiteM3zfz0kqWq/Lp/EVkciYhFrYYnwuAxpU0RB4tVteGi1Kr77sI/nVJ+LHXT UUTHzf7yA05gBs9adqDRikYlhg+Rjt/UhXp7eHOsUKs5ZQoSo7FU+dyuggyG3Gg/9bz5 UbQg== X-Forwarded-Encrypted: i=1; AJvYcCVWu37noTUAxfJBbKm61eEXde9UNf43eUutVUWeEtCYFHL30kkL1/gtqjKdLQLBakoekAbi2usxvJAnrgOI@postgresql.org X-Gm-Message-State: AOJu0YxylHJP6huZvDFN47wrmISyCJCxEo2gXoIhKEqa+IzLIEsWyWBj HketlgY0TS6FbsmTQg33CzpbtXkQwhxESzJn/IAsQNbJzylsH45IljQRm8SkmYzYhSkDzkyaSzN He5taIhyozM8z+Q6dAJWg0sEowRO7wyE= X-Gm-Gg: ASbGncsJ1OUKGTqc7WBVegfEhU10SOj/XTzhywJEDJDXT6Ey2b3EQ6j2eePDDVkTUk2 sNn5n0GuzTeZbUn5aCpJKsKtSF7mMe1MQvxPIUYgwdUACbGf/no6lTX1e7p55PfVPiZ2onGHI8n jg+o67NCoPiOCli6suXJTXs9EeRUCHGlB5+07asWW55MeAIpjwPFaqa2Tlz8b8VJDvl1SXVA3xY G66HoY= X-Google-Smtp-Source: AGHT+IFvYeCEER3T8AXp7PN8JMS3uW3BzHqcDN9iaOPBbu5kdr+y1zU1O+DFznO3x+MMQZatxzBr7KFZ4uFnBMJBehM= X-Received: by 2002:a05:6122:2a4f:b0:531:4041:c4c7 with SMTP id 71dfb90a1353d-53c6d572047mr314378e0c.7.1755643484492; Tue, 19 Aug 2025 15:44:44 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Mihail Nikalayeu Date: Wed, 20 Aug 2025 00:44:00 +0200 X-Gm-Features: Ac12FXxcOurRlkOW6rLx_jfPcUvljgCH-Sf0tpVylYooHnnAIpFb4_PCtAp8ngw Message-ID: Subject: Re: [BUG?] check_exclusion_or_unique_constraint false negative To: "Zhijie Hou (Fujitsu)" , Peter Geoghegan Cc: Amit Kapila , "Hayato Kuroda (Fujitsu)" , PostgreSQL Hackers , Andres Freund Content-Type: multipart/mixed; boundary="0000000000003f1335063cbf9a8e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003f1335063cbf9a8e Content-Type: text/plain; charset="UTF-8" Hello, everyone! Issue description is available at [0] (in few words - SnapshotDirty scan may miss tuple in index because of race condition with update of that tuple). But I have realised there are cases much more severe than invalid conflict messages for logical replication - lost delete/updates in logical replication. New tests with reproducers are included in the new patch version. Short description up issues: 1) Lost delete Setup: CREATE TABLE conf_tab(a int PRIMARY key, data text); CREATE INDEX data_index ON conf_tab(data); INSERT INTO conf_tab(a, data) VALUES (1,'frompub'); On publisher: DELETE FROM conf_tab WHERE a=1; On subscriber: UPDATE conf_tab SET data = 'fromsubnew' WHERE (a=1); Expected result: Tuple is deleted on both subscriber and publisher. Actual result: Either as expected, or: - Tuple is deleted on publisher, but 'fromsubnew' remains on subscriber. 2) Lost update Setup: On publisher: CREATE TABLE conf_tab(a int PRIMARY key, data text); INSERT INTO conf_tab(a, data) VALUES (1,'frompub'); On subscriber: -- note additional subscriber-only column - i CREATE TABLE conf_tab(a int PRIMARY key, data text, i int DEFAULT 0); CREATE INDEX i_index ON conf_tab(i); On publisher: UPDATE conf_tab SET data = 'frompubnew' WHERE (a=1); On subscriber: UPDATE conf_tab SET i = 1 WHERE (a=1); Expected result: On subscriber: tuple (a=1, data='frompubnew', i=1). Actual result: Either as expected, or: - Publisher update is lost, leaving (a=1, data='frompub', i=1) on subscriber. Best regards, Mikhail. [0]: https://www.postgresql.org/message-id/flat/CADzfLwWuXh8KO%3DOZvB71pZnQ8nH0NYXfuGbFU6FBiVZUbmuFGg%40mail.gmail.com#76f98a9ae3479bbaf5ee9262322d466e --0000000000003f1335063cbf9a8e Content-Type: application/octet-stream; name="v9-0002-Fix-btree-index-scan-concurrency-issues-with-dirt.patch" Content-Disposition: attachment; filename="v9-0002-Fix-btree-index-scan-concurrency-issues-with-dirt.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mej0fvxc1 RnJvbSA2MmEzZmNmNjExOGVkNTg1OGQyODk5ZjQwYTYxYjEwMWViZTg3MmQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAxNiBKdW4gMjAyNSAyMjoyMDozOCArMDIwMApTdWJqZWN0OiBb UEFUQ0ggdjkgMi8yXSBGaXggYnRyZWUgaW5kZXggc2NhbiBjb25jdXJyZW5jeSBpc3N1ZXMgd2l0 aCBkaXJ0eQogc25hcHNob3RzCgpUaGlzIHBhdGNoIGFkZHJlc3NlcyBhbiBpc3N1ZSB3aGVyZSBu b24tTVZDQyBpbmRleCBzY2FucyB1c2luZyBTbmFwc2hvdERpcnR5IG9yIFNuYXBzaG90U2VsZiBj b3VsZCBtaXNzIHR1cGxlcyBkdWUgdG8gY29uY3VycmVudCBtb2RpZmljYXRpb25zLiBUaGUgZml4 IHJldGFpbnMgcmVhZCBsb2NrcyBvbiBwYWdlcyBmb3IgdGhlc2Ugc3BlY2lhbCBzbmFwc2hvdCB0 eXBlcyB1bnRpbCB0aGUgc2NhbiBpcyBkb25lIHdpdGggdGhlIHBhZ2UncyB0dXBsZXMsIHByZXZl bnRpbmcgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGZyb20gY2F1c2luZyBpbmNvbnNpc3RlbnQg cmVzdWx0cy4KClVwZGF0ZWQgUkVBRE1FIHRvIGRvY3VtZW50IHRoaXMgc3BlY2lhbCBjYXNlIGlu IHRoZSBidHJlZSBsb2NraW5nIG1lY2hhbmlzbS4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL1JFQURNRSAgICAgICB8IDEzICsrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0cmVlLmMgICAgIHwgMTkgKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyAgfCAxNiArKysrKysrKysrKystLS0tCiBzcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMgICB8ICA0ICsrKy0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jIHwgIDggKysrKysrLS0KIHNyYy9pbmNsdWRlL2FjY2Vz cy9uYnRyZWUuaCAgICAgICAgICAgIHwgIDEgKwogNiBmaWxlcyBjaGFuZ2VkLCA1MiBpbnNlcnRp b25zKCspLCA5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvUkVBRE1FIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUKaW5kZXggNTNk NGE2MWRjM2YuLmE5MjgwNDE1NjMzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL1JFQURNRQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQpAQCAtODUs NyArODUsOCBAQCBtb3ZlIHJpZ2h0IHVudGlsIHdlIGZpbmQgYSBwYWdlIHdob3NlIHJpZ2h0LWxp bmsgbWF0Y2hlcyB0aGUgcGFnZSB3ZQogY2FtZSBmcm9tLiAgKEFjdHVhbGx5LCBpdCdzIGV2ZW4g aGFyZGVyIHRoYW4gdGhhdDsgc2VlIHBhZ2UgZGVsZXRpb24KIGRpc2N1c3Npb24gYmVsb3cuKQog Ci1QYWdlIHJlYWQgbG9ja3MgYXJlIGhlbGQgb25seSBmb3IgYXMgbG9uZyBhcyBhIHNjYW4gaXMg ZXhhbWluaW5nIGEgcGFnZS4KK1BhZ2UgcmVhZCBsb2NrcyBhcmUgaGVsZCBvbmx5IGZvciBhcyBs b25nIGFzIGEgc2NhbiBpcyBleGFtaW5pbmcgYSBwYWdlCisod2l0aCBleGNlcHRpb24gZm9yIFNu YXBzaG90RGlydHkgYW5kIFNuYXBzaG90U2VsZiBzY2FucyAtIHNlZSBiZWxvdykuCiBUbyBtaW5p bWl6ZSBsb2NrL3VubG9jayB0cmFmZmljLCBhbiBpbmRleCBzY2FuIGFsd2F5cyBzZWFyY2hlcyBh IGxlYWYgcGFnZQogdG8gaWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBhdCBvbmNlLCBj b3B5aW5nIHRoZWlyIGhlYXAgdHVwbGUgSURzCiBpbnRvIGJhY2tlbmQtbG9jYWwgc3RvcmFnZS4g IFRoZSBoZWFwIHR1cGxlIElEcyBhcmUgdGhlbiBwcm9jZXNzZWQgd2hpbGUKQEAgLTEwMyw2ICsx MDQsMTYgQEAgV2UgYWxzbyByZW1lbWJlciB0aGUgbGVmdC1saW5rLCBhbmQgZm9sbG93IGl0IHdo ZW4gdGhlIHNjYW4gbW92ZXMgYmFja3dhcmRzCiAodGhvdWdoIHRoaXMgcmVxdWlyZXMgZXh0cmEg aGFuZGxpbmcgdG8gYWNjb3VudCBmb3IgY29uY3VycmVudCBzcGxpdHMgb2YKIHRoZSBsZWZ0IHNp Ymxpbmc7IHNlZSBkZXRhaWxlZCBtb3ZlLWxlZnQgYWxnb3JpdGhtIGJlbG93KS4KIAorRGVzcGl0 ZSB0aGUgZGVzY3JpYmVkIG1lY2hhbmljcyBpbiBwbGFjZSwgaW5jb25zaXN0ZW50IHJlc3VsdHMg bWF5IHN0aWxsIG9jY3VyCitkdXJpbmcgbm9uLU1WQ0Mgc2NhbnMgKFNuYXBzaG90RGlydHkgYW5k IFNuYXBzaG90U2VsZikuIFRoaXMgaXNzdWUgY2FuIG9jY3VyIGlmIGEgCitjb25jdXJyZW50IHRy YW5zYWN0aW9uIGRlbGV0ZXMgYSB0dXBsZSBhbmQgaW5zZXJ0cyBhIG5ldyB0dXBsZSB3aXRoIGEg bmV3IFRJRCBpbiB0aGUgCitzYW1lIHBhZ2UuIElmIHRoZSBzY2FuIGhhcyBhbHJlYWR5IHZpc2l0 ZWQgdGhlIHBhZ2UgYW5kIGNhY2hlZCBpdHMgY29udGVudCBpbiB0aGUKK2JhY2tlbmQtbG9jYWwg c3RvcmFnZSwgaXQgbWlnaHQgc2tpcCB0aGUgb2xkIHR1cGxlIGR1ZSB0byBkZWxldGlvbiBhbmQg bWlzcyB0aGUgbmV3IAordHVwbGUgYmVjYXVzZSB0aGUgc2NhbiBkb2VzIG5vdCByZS1yZWFkIHRo ZSBwYWdlLiBUbyBhZGRyZXNzIHRoaXMgaXNzdWUsIGZvciAKK1NuYXBzaG90RGlydHkgYW5kIFNu YXBzaG90U2VsZiBzY2Fucywgd2UgcmV0YWluIHRoZSByZWFkIGxvY2sgb24gdGhlIHBhZ2UgdW50 aWwgCit3ZSdyZSBjb21wbGV0ZWx5IGRvbmUgcHJvY2Vzc2luZyBhbGwgdGhlIHR1cGxlcyBmcm9t IHRoYXQgcGFnZSwgcHJldmVudGluZyAKK2NvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyB0aGF0IGNv dWxkIGxlYWQgdG8gaW5jb25zaXN0ZW50IHJlc3VsdHMuCisKIEluIG1vc3QgY2FzZXMgd2UgcmVs ZWFzZSBvdXIgbG9jayBhbmQgcGluIG9uIGEgcGFnZSBiZWZvcmUgYXR0ZW1wdGluZwogdG8gYWNx dWlyZSBwaW4gYW5kIGxvY2sgb24gdGhlIHBhZ2Ugd2UgYXJlIG1vdmluZyB0by4gIEluIGEgZmV3 IHBsYWNlcwogaXQgaXMgbmVjZXNzYXJ5IHRvIGxvY2sgdGhlIG5leHQgcGFnZSBiZWZvcmUgcmVs ZWFzaW5nIHRoZSBjdXJyZW50IG9uZS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCmluZGV4 IGZkZmY5NjBjMTMwLi5iZGEyYjgyMWE1MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRyZWUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5j CkBAIC0zOTMsMTAgKzM5MywyMiBAQCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5L ZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBw YWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwogCQlpZiAoc28tPm51bUtpbGxlZCA+ IDApCiAJCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOworCQllbHNlIGlmICghc28tPmRyb3BMb2NrKSAv KiBfYnRfa2lsbGl0ZW1zIGFsd2F5cyByZWxlYXNlcyBsb2NrICovCisJCQlfYnRfdW5sb2NrYnVm KHNjYW4tPmluZGV4UmVsYXRpb24sIHNvLT5jdXJyUG9zLmJ1Zik7CiAJCUJUU2NhblBvc1VucGlu SWZQaW5uZWQoc28tPmN1cnJQb3MpOwogCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9z KTsKIAl9CiAKKwkvKgorCSAqIEZvciBTbmFwc2hvdERpcnR5IGFuZCBTbmFwc2hvdFNlbGYgc2Nh bnMsIHdlIGRvbid0IHVubG9jayB0aGUgYnVmZmVyCisJICogYW5kIGtlZXAgdGhlIGxvY2sgc2hv dWxkIGJlIHVudGlsIHdlJ3JlIGNvbXBsZXRlbHkgZG9uZSB3aXRoIHRoaXMgcGFnZS4KKwkgKiBU aGlzIHByZXZlbnRzIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBmcm9tIGNhdXNpbmcgaW5jb25z aXN0ZW50CisJICogcmVzdWx0cyBkdXJpbmcgbm9uLU1WQ0Mgc2NhbnMuCisJICoKKwkgKiBTZWUg bmJ0cmVlL1JFQURNRSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgU25hcHNob3REaXJ0eSBhbmQgU25h cHNob3RTZWxmLgorCSAqLworCXNvLT5kcm9wTG9jayA9IHNjYW4tPnhzX3NuYXBzaG90LT5zbmFw c2hvdF90eXBlICE9IFNOQVBTSE9UX0RJUlRZCisJCQkJCSYmIHNjYW4tPnhzX3NuYXBzaG90LT5z bmFwc2hvdF90eXBlICE9IFNOQVBTSE9UX1NFTEY7CiAJLyoKIAkgKiBXZSBwcmVmZXIgdG8gZWFn ZXJseSBkcm9wIGxlYWYgcGFnZSBwaW5zIGJlZm9yZSBidGdldHR1cGxlIHJldHVybnMuCiAJICog VGhpcyBhdm9pZHMgbWFraW5nIFZBQ1VVTSB3YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sg b24gdGhlIHBhZ2UuCkBAIC00MjAsNyArNDMyLDggQEAgYnRyZXNjYW4oSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJICoKIAkgKiBOb3RlOiBzby0+ ZHJvcFBpbiBzaG91bGQgbmV2ZXIgY2hhbmdlIGFjcm9zcyByZXNjYW5zLgogCSAqLwotCXNvLT5k cm9wUGluID0gKCFzY2FuLT54c193YW50X2l0dXAgJiYKKwlzby0+ZHJvcFBpbiA9IChzby0+ZHJv cExvY2sgJiYKKwkJCQkgICAhc2Nhbi0+eHNfd2FudF9pdHVwICYmCiAJCQkJICAgSXNNVkNDU25h cHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpICYmCiAJCQkJICAgUmVsYXRpb25OZWVkc1dBTChzY2Fu LT5pbmRleFJlbGF0aW9uKSAmJgogCQkJCSAgIHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsK QEAgLTQ3Nyw2ICs0OTAsOCBAQCBidGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCQkvKiBC ZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICov CiAJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKIAkJCV9idF9raWxsaXRlbXMoc2Nhbik7CisJCWVs c2UgaWYgKCFzby0+ZHJvcExvY2spIC8qIF9idF9raWxsaXRlbXMgYWx3YXlzIHJlbGVhc2VzIGxv Y2sgKi8KKwkJCV9idF91bmxvY2tidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc28tPmN1cnJQb3Mu YnVmKTsKIAkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7CiAJfQogCkBAIC01 NTcsNiArNTcyLDggQEAgYnRyZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJCQkvKiBCZWZv cmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCiAJ CQlpZiAoc28tPm51bUtpbGxlZCA+IDApCiAJCQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKKwkJCWVs c2UgaWYgKCFzby0+ZHJvcExvY2spIC8qIF9idF9raWxsaXRlbXMgYWx3YXlzIHJlbGVhc2VzIGxv Y2sgKi8KKwkJCQlfYnRfdW5sb2NrYnVmKHNjYW4tPmluZGV4UmVsYXRpb24sIHNvLT5jdXJyUG9z LmJ1Zik7CiAJCQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKIAkJfQogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwppbmRleCBkNjk3OTg3OTViNC4uZjkyZGJh MTdmYTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwpAQCAtNTcsMTIgKzU3 LDE0IEBAIHN0YXRpYyBib29sIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKTsKIC8qCiAgKglfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4oKQogICoK LSAqIFVubG9jayBzby0+Y3VyclBvcy5idWYuICBJZiBzY2FuIGlzIHNvLT5kcm9wUGluLCBkcm9w IHRoZSBwaW4sIHRvby4KKyAqIFVubG9jayBzby0+Y3VyclBvcy5idWYgaWYgc28tPmRyb3BMb2Nr LiBJZiBzY2FuIGlzIHNvLT5kcm9wUGluLCBkcm9wIHRoZSBwaW4sIHRvby4KICAqIERyb3BwaW5n IHRoZSBwaW4gcHJldmVudHMgVkFDVVVNIGZyb20gYmxvY2tpbmcgb24gYWNxdWlyaW5nIGEgY2xl YW51cCBsb2NrLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKIF9idF9kcm9wX2xvY2tfYW5kX21h eWJlX3BpbihSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbykKIHsKKwlpZiAoIXNvLT5kcm9w TG9jaykKKwkJcmV0dXJuOwogCWlmICghc28tPmRyb3BQaW4pCiAJewogCQkvKiBKdXN0IGRyb3Ag dGhlIGxvY2sgKG5vdCB0aGUgcGluKSAqLwpAQCAtMTU3OSw3ICsxNTgxLDggQEAgX2J0X2ZpcnN0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAgKglfYnRfbmV4dCgpIC0t IEdldCB0aGUgbmV4dCBpdGVtIGluIGEgc2Nhbi4KICAqCiAgKgkJT24gZW50cnksIHNvLT5jdXJy UG9zIGRlc2NyaWJlcyB0aGUgY3VycmVudCBwYWdlLCB3aGljaCBtYXkgYmUgcGlubmVkCi0gKgkJ YnV0IGlzIG5vdCBsb2NrZWQsIGFuZCBzby0+Y3VyclBvcy5pdGVtSW5kZXggaWRlbnRpZmllcyB3 aGljaCBpdGVtIHdhcworICoJCWJ1dCBpcyBub3QgbG9ja2VkIChleGNlcHQgZm9yIFNuYXBzaG90 RGlydHkgYW5kIFNuYXBzaG90U2VsZiBzY2Fucywgd2hlcmUKKyAqCQl0aGUgcGFnZSByZW1haW5z IGxvY2tlZCksIGFuZCBzby0+Y3VyclBvcy5pdGVtSW5kZXggaWRlbnRpZmllcyB3aGljaCBpdGVt IHdhcwogICoJCXByZXZpb3VzbHkgcmV0dXJuZWQuCiAgKgogICoJCU9uIHN1Y2Nlc3MgZXhpdCwg c28tPmN1cnJQb3MgaXMgdXBkYXRlZCBhcyBuZWVkZWQsIGFuZCBfYnRfcmV0dXJuaXRlbQpAQCAt MjE1OCw3ICsyMTYxLDkgQEAgX2J0X3JldHVybml0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFNj YW5PcGFxdWUgc28pCiAgKiBXcmFwcGVyIG9uIF9idF9yZWFkbmV4dHBhZ2UgdGhhdCBwZXJmb3Jt cyBmaW5hbCBzdGVwcyBmb3IgdGhlIGN1cnJlbnQgcGFnZS4KICAqCiAgKiBPbiBlbnRyeSwgc28t PmN1cnJQb3MgbXVzdCBiZSB2YWxpZC4gIEl0cyBidWZmZXIgd2lsbCBiZSBwaW5uZWQsIHRob3Vn aAotICogbmV2ZXIgbG9ja2VkLiAoQWN0dWFsbHksIHdoZW4gc28tPmRyb3BQaW4gdGhlcmUgd29u J3QgZXZlbiBiZSBhIHBpbiBoZWxkLAorICogbmV2ZXIgbG9ja2VkLCBleGNlcHQgZm9yIFNuYXBz aG90RGlydHkgYW5kIFNuYXBzaG90U2VsZiBzY2FucyB3aGVyZSB0aGUgYnVmZmVyCisgKiByZW1h aW5zIGxvY2tlZCB1bnRpbCB3ZSdyZSBkb25lIHdpdGggYWxsIHR1cGxlcyBmcm9tIHRoZSBwYWdl CisgKiAoQWN0dWFsbHksIHdoZW4gc28tPmRyb3BQaW4gdGhlcmUgd29uJ3QgZXZlbiBiZSBhIHBp biBoZWxkLAogICogdGhvdWdoIHNvLT5jdXJyUG9zLmN1cnJQYWdlIG11c3Qgc3RpbGwgYmUgc2V0 IHRvIGEgdmFsaWQgYmxvY2sgbnVtYmVyLikKICAqLwogc3RhdGljIGJvb2wKQEAgLTIxNzMsNiAr MjE3OCw4IEBAIF9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKQogCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxs ZWQgaXRlbXMgKi8KIAlpZiAoc28tPm51bUtpbGxlZCA+IDApCiAJCV9idF9raWxsaXRlbXMoc2Nh bik7CisJZWxzZSBpZiAoIXNvLT5kcm9wTG9jaykgLyogX2J0X2tpbGxpdGVtcyBhbHdheXMgcmVs ZWFzZXMgbG9jayAqLworCQlfYnRfdW5sb2NrYnVmKHNjYW4tPmluZGV4UmVsYXRpb24sIHNvLT5j dXJyUG9zLmJ1Zik7CiAKIAkvKgogCSAqIEJlZm9yZSB3ZSBtb2RpZnkgY3VyclBvcywgbWFrZSBh IGNvcHkgb2YgdGhlIHBhZ2UgZGF0YSBpZiB0aGVyZSB3YXMgYQpAQCAtMjMxMiw3ICsyMzE5LDgg QEAgX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBPZmZzZXROdW1iZXIgb2Zm bnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKIAl9CiAKIAkvKiBUaGVyZSdzIG5vIGFjdHVhbGx5LW1h dGNoaW5nIGRhdGEgb24gdGhlIHBhZ2UgaW4gc28tPmN1cnJQb3MuYnVmICovCi0JX2J0X3VubG9j a2J1ZihzY2FuLT5pbmRleFJlbGF0aW9uLCBzby0+Y3VyclBvcy5idWYpOworCWlmIChzby0+ZHJv cExvY2spCisJCV9idF91bmxvY2tidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc28tPmN1cnJQb3Mu YnVmKTsKIAogCS8qIENhbGwgX2J0X3JlYWRuZXh0cGFnZSB1c2luZyBpdHMgX2J0X3N0ZXBwYWdl IHdyYXBwZXIgZnVuY3Rpb24gKi8KIAlpZiAoIV9idF9zdGVwcGFnZShzY2FuLCBkaXIpKQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCmluZGV4IGVkZmVhMmFjYWZmLi41NmQ1YmY0NDc4 NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwpAQCAtMzI4Myw4ICszMjgzLDEw IEBAIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQkgKiBjb25jdXJyZW50IFZB Q1VVTXMgZnJvbSByZWN5Y2xpbmcgYW55IG9mIHRoZSBUSURzIG9uIHRoZSBwYWdlLgogCQkgKi8K IAkJQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7CisJCS8qIExvY2sgb25s eSBpZiB0aGUgbG9jayBpcyBkcm9wcGVkLiAqLwogCQlidWYgPSBzby0+Y3VyclBvcy5idWY7Ci0J CV9idF9sb2NrYnVmKHJlbCwgYnVmLCBCVF9SRUFEKTsKKwkJaWYgKHNvLT5kcm9wTG9jaykKKwkJ CV9idF9sb2NrYnVmKHJlbCwgYnVmLCBCVF9SRUFEKTsKIAl9CiAJZWxzZQogCXsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKaW5kZXggZGEwY2JmNDFkNmYuLmMyZjVhYTJiYTVj IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYworKysg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwpAQCAtMjA1LDEyICsyMDUs MTEgQEAgUmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJbmRleChSZWxhdGlvbiByZWwsIE9pZCBpZHhv aWQsCiAKIAkvKiBTdGFydCBhbiBpbmRleCBzY2FuLiAqLwogCXNjYW4gPSBpbmRleF9iZWdpbnNj YW4ocmVsLCBpZHhyZWwsICZzbmFwLCBOVUxMLCBza2V5X2F0dG9mZiwgMCk7CisJaW5kZXhfcmVz Y2FuKHNjYW4sIHNrZXksIHNrZXlfYXR0b2ZmLCBOVUxMLCAwKTsKIAogcmV0cnk6CiAJZm91bmQg PSBmYWxzZTsKIAotCWluZGV4X3Jlc2NhbihzY2FuLCBza2V5LCBza2V5X2F0dG9mZiwgTlVMTCwg MCk7Ci0KIAkvKiBUcnkgdG8gZmluZCB0aGUgdHVwbGUgKi8KIAl3aGlsZSAoaW5kZXhfZ2V0bmV4 dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKIAl7CkBAIC0yMzgs NiArMjM3LDggQEAgcmV0cnk6CiAJCSAqLwogCQlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQoeHdh aXQpKQogCQl7CisJCQkvKiBXZSBuZWVkIHRvIGNhbGwgcmVzY2FuIGJlZm9yZSB3YWl0IHRvIGVu c3VyZSB3ZSByZWxlYXNlIGFsbCB0aGUgaW5kZXggcGFnZSBsb2Nrcy4gKi8KKwkJCWluZGV4X3Jl c2NhbihzY2FuLCBza2V5LCBza2V5X2F0dG9mZiwgTlVMTCwgMCk7CiAJCQlYYWN0TG9ja1RhYmxl V2FpdCh4d2FpdCwgTlVMTCwgTlVMTCwgWExUV19Ob25lKTsKIAkJCWdvdG8gcmV0cnk7CiAJCX0K QEAgLTI2Niw3ICsyNjcsMTAgQEAgcmV0cnk6CiAJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAKIAkJ aWYgKHNob3VsZF9yZWZldGNoX3R1cGxlKHJlcywgJnRtZmQpKQorCQl7CisJCQlpbmRleF9yZXNj YW4oc2Nhbiwgc2tleSwgc2tleV9hdHRvZmYsIE5VTEwsIDApOwogCQkJZ290byByZXRyeTsKKwkJ fQogCX0KIAogCWluZGV4X2VuZHNjYW4oc2Nhbik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvbmJ0cmVlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKaW5kZXggOWFiNDY3 Y2I4ZmQuLjljMTA5MzFjOGUyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVl LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCkBAIC0xMDY5LDYgKzEwNjksNyBA QCB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVEYXRhCiAJLyogaW5mbyBhYm91dCBraWxsZWQg aXRlbXMgaWYgYW55IChraWxsZWRJdGVtcyBpcyBOVUxMIGlmIG5ldmVyIHVzZWQpICovCiAJaW50 CQkgICAqa2lsbGVkSXRlbXM7CS8qIGN1cnJQb3MuaXRlbXMgaW5kZXhlcyBvZiBraWxsZWQgaXRl bXMgKi8KIAlpbnQJCQludW1LaWxsZWQ7CQkvKiBudW1iZXIgb2YgY3VycmVudGx5IHN0b3JlZCBp dGVtcyAqLworCWJvb2wJCWRyb3BMb2NrOwkJLyogZHJvcCBsb2NrIG9uIGJlZm9yZSBidGdldHR1 cGxlIHJldHVybnM/ICovCiAJYm9vbAkJZHJvcFBpbjsJCS8qIGRyb3AgbGVhZiBwaW4gYmVmb3Jl IGJ0Z2V0dHVwbGUgcmV0dXJucz8gKi8KIAogCS8qCi0tIAoyLjQzLjAKCg== --0000000000003f1335063cbf9a8e Content-Type: application/octet-stream; name="v9-0001-This-patch-introduces-new-injection-points-and-TA.patch" Content-Disposition: attachment; filename="v9-0001-This-patch-introduces-new-injection-points-and-TA.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mej0fvx50 RnJvbSA0OGQ5ZDVjZTA5NWUxZGUxYWY1YTE0ZDIxMWZiNWRlNTBmYTlkNTEwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBua2V5IDxtaWNoYWlsLm5pa29sYWV2QGdtYWlsLmNvbT4KRGF0 ZTogU2F0LCAyMyBOb3YgMjAyNCAxMzoyNToxMSArMDEwMApTdWJqZWN0OiBbUEFUQ0ggdjkgMS8y XSBUaGlzIHBhdGNoIGludHJvZHVjZXMgbmV3IGluamVjdGlvbiBwb2ludHMgYW5kIFRBUAogdGVz dHMgdG8gcmVwcm9kdWNlIGFuZCB2ZXJpZnkgY29uZmxpY3QgZGV0ZWN0aW9uIGlzc3VlcyB0aGF0 IGFyaXNlIGR1cmluZwogU05BUFNIT1RfRElSVFkgaW5kZXggc2NhbnMgaW4gbG9naWNhbCByZXBs aWNhdGlvbiBhbmQKIGNoZWNrX2V4Y2x1c2lvbl9vcl91bmlxdWVfY29uc3RyYWludC4KCi0tLQog c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyAgICAgICAgICAgIHwgICA4ICsKIHNy Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jICAgICAgICAgICB8ICAgMyArCiBzcmMv dGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvTWFrZWZpbGUgICAgfCAgIDIgKy0KIC4uLi9l eHBlY3RlZC9kaXJ0eV9pbmRleF9zY2FuLm91dCAgICAgICAgICAgICB8ICAyNyArKysrCiBzcmMv dGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvbWVzb24uYnVpbGQgfCAgIDEgKwogLi4uL3Nw ZWNzL2RpcnR5X2luZGV4X3NjYW4uc3BlYyAgICAgICAgICAgICAgIHwgIDM3ICsrKysrCiBzcmMv dGVzdC9zdWJzY3JpcHRpb24vTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkICAgICAgICAgICAgIHwgICA3ICstCiAuLi4vc3Vi c2NyaXB0aW9uL3QvMDM2X2RlbGV0ZV9taXNzaW5nX3JhY2UucGwgfCAxMzUgKysrKysrKysrKysr KysrKysKIC4uLi9zdWJzY3JpcHRpb24vdC8wMzdfdXBkYXRlX21pc3NpbmdfcmFjZS5wbCB8IDEz NyArKysrKysrKysrKysrKysrKysKIDEwIGZpbGVzIGNoYW5nZWQsIDM1NiBpbnNlcnRpb25zKCsp LCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvaW5q ZWN0aW9uX3BvaW50cy9leHBlY3RlZC9kaXJ0eV9pbmRleF9zY2FuLm91dAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9zcGVjcy9kaXJ0eV9pbmRl eF9zY2FuLnNwZWMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8w MzZfZGVsZXRlX21pc3NpbmdfcmFjZS5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3N1 YnNjcmlwdGlvbi90LzAzN191cGRhdGVfbWlzc2luZ19yYWNlLnBsCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9pbmRleGFtLmMKaW5kZXggMWE0ZjM2ZmUwYTkuLjJlNjU3NTA5NzllIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9pbmRleC9pbmRleGFtLmMKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJ1dGlscy9ydWxl dXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lz Y2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKIAogCiAvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCkBAIC03NDEsNiArNzQyLDEzIEBAIGluZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCBUdXBsZVRhYmxlU2xvdCAqCiAJCSAqIHRo ZSBpbmRleC4KIAkJICovCiAJCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQoJnNjYW4tPnhzX2hl YXB0aWQpKTsKKyNpZmRlZiBVU0VfSU5KRUNUSU9OX1BPSU5UUworCQlpZiAoc2Nhbi0+eHNfc25h cHNob3QtPnNuYXBzaG90X3R5cGUgPT0gU05BUFNIT1RfRElSVFkpCisJCXsKKwkJCUlOSkVDVElP Tl9QT0lOVCgiaW5kZXhfZ2V0bmV4dF9zbG90X2JlZm9yZV9mZXRjaF9hcHBseV9kaXJ0eSIsIE5V TEwpOworCQl9CisjZW5kaWYKKwogCQlpZiAoaW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBzbG90KSkK IAkJCXJldHVybiB0cnVlOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNJbmRleGluZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKaW5kZXgg Y2EzM2E4NTQyNzguLmMwN2JhMjMwOTQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjSW5kZXhpbmcuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcu YwpAQCAtMTE3LDYgKzExNyw3IEBACiAjaW5jbHVkZSAidXRpbHMvbXVsdGlyYW5nZXR5cGVzLmgi CiAjaW5jbHVkZSAidXRpbHMvcmFuZ2V0eXBlcy5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3Iu aCIKKyNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKIAogLyogd2FpdE1vZGUgYXJn dW1lbnQgdG8gY2hlY2tfZXhjbHVzaW9uX29yX3VuaXF1ZV9jb25zdHJhaW50KCkgKi8KIHR5cGVk ZWYgZW51bQpAQCAtOTQzLDYgKzk0NCw4IEBAIHJldHJ5OgogCiAJRXhlY0Ryb3BTaW5nbGVUdXBs ZVRhYmxlU2xvdChleGlzdGluZ19zbG90KTsKIAorCWlmICghY29uZmxpY3QpCisJCUlOSkVDVElP Tl9QT0lOVCgiY2hlY2tfZXhjbHVzaW9uX29yX3VuaXF1ZV9jb25zdHJhaW50X25vX2NvbmZsaWN0 IiwgTlVMTCk7CiAJcmV0dXJuICFjb25mbGljdDsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmpl Y3Rpb25fcG9pbnRzL01ha2VmaWxlCmluZGV4IGZjODJjZDY3ZjZjLi4xNWY1ZTZkMjNkMCAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL01ha2VmaWxlCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9NYWtlZmlsZQpAQCAtMTQsNyArMTQs NyBAQCBQR0ZJTEVERVNDID0gImluamVjdGlvbl9wb2ludHMgLSBmYWNpbGl0eSBmb3IgaW5qZWN0 aW9uIHBvaW50cyIKIFJFR1JFU1MgPSBpbmplY3Rpb25fcG9pbnRzIGhhc2hhZ2cgcmVpbmRleF9j b25jIHZhY3V1bQogUkVHUkVTU19PUFRTID0gLS1kbHBhdGg9JCh0b3BfYnVpbGRkaXIpL3NyYy90 ZXN0L3JlZ3Jlc3MKIAotSVNPTEFUSU9OID0gYmFzaWMgaW5wbGFjZSBzeXNjYWNoZS11cGRhdGUt cHJ1bmVkCitJU09MQVRJT04gPSBiYXNpYyBpbnBsYWNlIHN5c2NhY2hlLXVwZGF0ZS1wcnVuZWQg ZGlydHlfaW5kZXhfc2NhbgogCiBUQVBfVEVTVFMgPSAxCiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9leHBlY3RlZC9kaXJ0eV9pbmRleF9zY2FuLm91dCBi L3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9leHBlY3RlZC9kaXJ0eV9pbmRleF9z Y2FuLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODJkNDYzOTdk NjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMv ZXhwZWN0ZWQvZGlydHlfaW5kZXhfc2Nhbi5vdXQKQEAgLTAsMCArMSwyNyBAQAorUGFyc2VkIHRl c3Qgc3BlYyB3aXRoIDMgc2Vzc2lvbnMKKworc3RhcnRpbmcgcGVybXV0YXRpb246IHMxX3MxIHMy X3MxIHMzX3MxCitpbmplY3Rpb25fcG9pbnRzX2F0dGFjaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAgICAgICAgICAgICAgICAgICAgICAgCisoMSByb3cpCisKK3N0ZXAgczFfczE6IElOU0VS VCBJTlRPIHRlc3QudGJsIFZBTFVFUyg0MiwgMSkgb24gY29uZmxpY3QoaSkgZG8gdXBkYXRlIHNl dCBuID0gRVhDTFVERUQubiArIDE7IDx3YWl0aW5nIC4uLj4KK3N0ZXAgczJfczE6IFVQREFURSB0 ZXN0LnRibCBTRVQgbiA9IG4gKyAxIFdIRVJFIGkgPSA0MjsgPHdhaXRpbmcgLi4uPgorc3RlcCBz M19zMTogCisJU0VMRUNUIGluamVjdGlvbl9wb2ludHNfZGV0YWNoKCdpbmRleF9nZXRuZXh0X3Ns b3RfYmVmb3JlX2ZldGNoX2FwcGx5X2RpcnR5Jyk7CisJU0VMRUNUIGluamVjdGlvbl9wb2ludHNf d2FrZXVwKCdpbmRleF9nZXRuZXh0X3Nsb3RfYmVmb3JlX2ZldGNoX2FwcGx5X2RpcnR5Jyk7Cisg PHdhaXRpbmcgLi4uPgorc3RlcCBzMV9zMTogPC4uLiBjb21wbGV0ZWQ+CitzdGVwIHMyX3MxOiA8 Li4uIGNvbXBsZXRlZD4KK3N0ZXAgczNfczE6IDwuLi4gY29tcGxldGVkPgoraW5qZWN0aW9uX3Bv aW50c19kZXRhY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAg ICAgIAorKDEgcm93KQorCitpbmplY3Rpb25fcG9pbnRzX3dha2V1cAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgCisoMSByb3cpCisKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0 L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9tZXNvbi5idWlsZAppbmRleCAyMDM5MGQ2YjRiZi4u YTEyNmZlMjBjMmQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50 cy9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvbWVz b24uYnVpbGQKQEAgLTQ4LDYgKzQ4LDcgQEAgdGVzdHMgKz0gewogICAgICAgJ2Jhc2ljJywKICAg ICAgICdpbnBsYWNlJywKICAgICAgICdzeXNjYWNoZS11cGRhdGUtcHJ1bmVkJywKKyAgICAgICdk aXJ0eV9pbmRleF9zY2FuJywKICAgICBdLAogICAgICdydW5uaW5nY2hlY2snOiBmYWxzZSwgIyBz ZWUgc3lzY2FjaGUtdXBkYXRlLXBydW5lZAogICB9LApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy9pbmplY3Rpb25fcG9pbnRzL3NwZWNzL2RpcnR5X2luZGV4X3NjYW4uc3BlYyBiL3NyYy90 ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9zcGVjcy9kaXJ0eV9pbmRleF9zY2FuLnNwZWMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjkxZDIwYWI0NjEyCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL3NwZWNzL2Rp cnR5X2luZGV4X3NjYW4uc3BlYwpAQCAtMCwwICsxLDM3IEBACitzZXR1cAoreworCUNSRUFURSBF WFRFTlNJT04gaW5qZWN0aW9uX3BvaW50czsKKwlDUkVBVEUgU0NIRU1BIHRlc3Q7CisJQ1JFQVRF IFVOTE9HR0VEIFRBQkxFIHRlc3QudGJsKGkgaW50IHByaW1hcnkga2V5LCBuIGludCk7CisJQ1JF QVRFIElOREVYIHRibF9uX2lkeCBPTiB0ZXN0LnRibChuKTsKKwlJTlNFUlQgSU5UTyB0ZXN0LnRi bCBWQUxVRVMoNDIsMSk7Cit9CisKK3RlYXJkb3duCit7CisJRFJPUCBTQ0hFTUEgdGVzdCBDQVND QURFOworCURST1AgRVhURU5TSU9OIGluamVjdGlvbl9wb2ludHM7Cit9CisKK3Nlc3Npb24gczEK K3NldHVwCXsKKwlTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19zZXRfbG9jYWwoKTsKKwlTRUxFQ1Qg aW5qZWN0aW9uX3BvaW50c19hdHRhY2goJ2NoZWNrX2V4Y2x1c2lvbl9vcl91bmlxdWVfY29uc3Ry YWludF9ub19jb25mbGljdCcsICdlcnJvcicpOworCVNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2F0 dGFjaCgnaW5kZXhfZ2V0bmV4dF9zbG90X2JlZm9yZV9mZXRjaF9hcHBseV9kaXJ0eScsICd3YWl0 Jyk7Cit9CisKK3N0ZXAgczFfczEJeyBJTlNFUlQgSU5UTyB0ZXN0LnRibCBWQUxVRVMoNDIsIDEp IG9uIGNvbmZsaWN0KGkpIGRvIHVwZGF0ZSBzZXQgbiA9IEVYQ0xVREVELm4gKyAxOyB9CisKK3Nl c3Npb24gczIKK3N0ZXAgczJfczEJeyBVUERBVEUgdGVzdC50YmwgU0VUIG4gPSBuICsgMSBXSEVS RSBpID0gNDI7IH0KKworc2Vzc2lvbiBzMworc3RlcCBzM19zMQkJeworCVNFTEVDVCBpbmplY3Rp b25fcG9pbnRzX2RldGFjaCgnaW5kZXhfZ2V0bmV4dF9zbG90X2JlZm9yZV9mZXRjaF9hcHBseV9k aXJ0eScpOworCVNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3dha2V1cCgnaW5kZXhfZ2V0bmV4dF9z bG90X2JlZm9yZV9mZXRjaF9hcHBseV9kaXJ0eScpOworfQorCitwZXJtdXRhdGlvbgorCXMxX3Mx CisJczJfczEoKikKKwlzM19zMShzMV9zMSkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vTWFrZWZpbGUgYi9zcmMvdGVzdC9zdWJz Y3JpcHRpb24vTWFrZWZpbGUKaW5kZXggNTBiNjVkOGY2ZWEuLjUxZDI4ZWNhMDkxIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3Qvc3Vic2Ny aXB0aW9uL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBAIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIp L3NyYy9NYWtlZmlsZS5nbG9iYWwKIEVYVFJBX0lOU1RBTEwgPSBjb250cmliL2hzdG9yZQogCiBl eHBvcnQgd2l0aF9pY3UKK2V4cG9ydCBlbmFibGVfaW5qZWN0aW9uX3BvaW50cwogCiBjaGVjazoK IAkkKHByb3ZlX2NoZWNrKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29u LmJ1aWxkIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkCmluZGV4IDU4NmZmYmE0 MzRlLi44ZWQzOGNlYzJkMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29u LmJ1aWxkCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi9tZXNvbi5idWlsZApAQCAtNSw3ICs1 LDEwIEBAIHRlc3RzICs9IHsKICAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCiAg ICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCiAgICd0YXAnOiB7Ci0gICAgJ2Vudic6 IHsnd2l0aF9pY3UnOiBpY3UuZm91bmQoKSA/ICd5ZXMnIDogJ25vJ30sCisgICAgJ2Vudic6IHsK KyAgICAgICd3aXRoX2ljdSc6IGljdS5mb3VuZCgpID8gJ3llcycgOiAnbm8nLAorICAgICAgJ2Vu YWJsZV9pbmplY3Rpb25fcG9pbnRzJzogZ2V0X29wdGlvbignaW5qZWN0aW9uX3BvaW50cycpID8g J3llcycgOiAnbm8nCisgICAgfSwKICAgICAndGVzdHMnOiBbCiAgICAgICAndC8wMDFfcmVwX2No YW5nZXMucGwnLAogICAgICAgJ3QvMDAyX3R5cGVzLnBsJywKQEAgLTQyLDYgKzQ1LDggQEAgdGVz dHMgKz0gewogICAgICAgJ3QvMDMzX3J1bl9hc190YWJsZV9vd25lci5wbCcsCiAgICAgICAndC8w MzRfdGVtcG9yYWwucGwnLAogICAgICAgJ3QvMDM1X2NvbmZsaWN0cy5wbCcsCisgICAgICAndC8w MzZfZGVsZXRlX21pc3NpbmdfcmFjZS5wbCcsCisgICAgICAndC8wMzdfdXBkYXRlX21pc3Npbmdf cmFjZS5wbCcsCiAgICAgICAndC8xMDBfYnVncy5wbCcsCiAgICAgXSwKICAgfSwKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzNl9kZWxldGVfbWlzc2luZ19yYWNlLnBsIGIv c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM2X2RlbGV0ZV9taXNzaW5nX3JhY2UucGwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ0NjAxMWZmNTRjCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM2X2RlbGV0ZV9taXNzaW5nX3JhY2Uu cGwKQEAgLTAsMCArMSwxMzUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFRlc3QgdGhlIGNvbmZsaWN0IGRldGVjdGlvbiBh bmQgcmVzb2x1dGlvbiBpbiBsb2dpY2FsIHJlcGxpY2F0aW9uCit1c2Ugc3RyaWN0OwordXNlIHdh cm5pbmdzIEZBVEFMID0+ICdhbGwnOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1 c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworaWYgKCRFTlZ7 ZW5hYmxlX2luamVjdGlvbl9wb2ludHN9IG5lICd5ZXMnKQoreworCXBsYW4gc2tpcF9hbGwgPT4g J0luamVjdGlvbiBwb2ludHMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJ1aWxkJzsKK30KKworIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFNldCBpdCB0byAwIHRvIG1ha2Ugc2V0IHN1Y2Nl c3M7IFRPRE86IGRlbGV0ZSB0aGF0IGZvciBjb21taXQKK215ICRzaW11bGF0ZV9yYWNlX2NvbmRp dGlvbiA9IDE7CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworIyBTZXR1cAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIworCisjIEluaXRpYWxpemUgcHVibGlzaGVyIG5vZGUKK215ICRub2RlX3B1Ymxpc2hlciA9 IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7Ciskbm9kZV9wdWJs aXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVfcHVibGlz aGVyLT5zdGFydDsKKworCisjIENyZWF0ZSBzdWJzY3JpYmVyIG5vZGUgd2l0aCB0cmFja19jb21t aXRfdGltZXN0YW1wIGVuYWJsZWQKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpU ZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQ7 Ciskbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwlxcSh0 cmFja19jb21taXRfdGltZXN0YW1wID0gb24pKTsKKyRub2RlX3N1YnNjcmliZXItPnN0YXJ0Owor CisKKyMgQ2hlY2sgaWYgdGhlIGV4dGVuc2lvbiBpbmplY3Rpb25fcG9pbnRzIGlzIGF2YWlsYWJs ZSwgYXMgaXQgbWF5IGJlCisjIHBvc3NpYmxlIHRoYXQgdGhpcyBzY3JpcHQgaXMgcnVuIHdpdGgg aW5zdGFsbGNoZWNrLCB3aGVyZSB0aGUgbW9kdWxlCisjIHdvdWxkIG5vdCBiZSBpbnN0YWxsZWQg YnkgZGVmYXVsdC4KK2lmICghJG5vZGVfc3Vic2NyaWJlci0+Y2hlY2tfZXh0ZW5zaW9uKCdpbmpl Y3Rpb25fcG9pbnRzJykpCit7CisJcGxhbiBza2lwX2FsbCA9PiAnRXh0ZW5zaW9uIGluamVjdGlv bl9wb2ludHMgbm90IGluc3RhbGxlZCc7Cit9CisKKyMgQ3JlYXRlIHRhYmxlIG9uIHB1Ymxpc2hl cgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRB QkxFIGNvbmZfdGFiKGEgaW50IFBSSU1BUlkga2V5LCBkYXRhIHRleHQpOyIpOworCisjIENyZWF0 ZSBzaW1pbGFyIHRhYmxlIG9uIHN1YnNjcmliZXIgd2l0aCBhZGRpdGlvbmFsIGluZGV4IHRvIGRp c2FibGUgSE9UIHVwZGF0ZXMKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgKKwkncG9zdGdy ZXMnLAorCSJDUkVBVEUgVEFCTEUgY29uZl90YWIoYSBpbnQgUFJJTUFSWSBrZXksIGRhdGEgdGV4 dCk7CisJIENSRUFURSBJTkRFWCBkYXRhX2luZGV4IE9OIGNvbmZfdGFiKGRhdGEpOyIpOworCisj IFNldCB1cCBleHRlbnNpb24gdG8gc2ltdWxhdGUgcmFjZSBjb25kaXRpb24KKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRFIEVYVEVOU0lPTiBpbmplY3Rpb25f cG9pbnRzOycpOworCisjIFNldHVwIGxvZ2ljYWwgcmVwbGljYXRpb24KK215ICRwdWJsaXNoZXJf Y29ubnN0ciA9ICRub2RlX3B1Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJuYW1lPXBvc3RncmVzJzsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNB VElPTiB0YXBfcHViIEZPUiBUQUJMRSBjb25mX3RhYiIpOworCisjIEluc2VydCByb3cgdG8gYmUg dXBkYXRlZCBsYXRlcgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki SU5TRVJUIElOVE8gY29uZl90YWIoYSwgZGF0YSkgVkFMVUVTICgxLCdmcm9tcHViJykiKTsKKwor IyBDcmVhdGUgdGhlIHN1YnNjcmlwdGlvbgorbXkgJGFwcG5hbWUgPSAndGFwX3N1Yic7Ciskbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQ VElPTiB0YXBfc3ViCisJIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlv bl9uYW1lPSRhcHBuYW1lJworCSBQVUJMSUNBVElPTiB0YXBfcHViIik7CisKKyMgV2FpdCBmb3Ig aW5pdGlhbCB0YWJsZSBzeW5jIHRvIGZpbmlzaAorJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3Jf c3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfcHVibGlzaGVyLCAkYXBwbmFtZSk7CisKKyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFJhY2UgY29uZGl0aW9uIGJl Y2F1c2Ugb2YgRGlydHlTbmFwc2hvdAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKworbXkgJHBzcWxfc2Vzc2lvbl9zdWJzY3JpYmVyID0gJG5vZGVfc3Vic2Ny aWJlci0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycpOworaWYgKCRzaW11bGF0ZV9yYWNlX2Nv bmRpdGlvbikKK3sKKwkkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJ IlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2F0dGFjaCgnaW5kZXhfZ2V0bmV4dF9zbG90X2JlZm9y ZV9mZXRjaF9hcHBseV9kaXJ0eScsICd3YWl0JykiKTsKK30KKworbXkgJGxvZ19vZmZzZXQgPSAt cyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisjIERlbGV0ZSB0dXBsZSBvbiBwdWJsaXNo ZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSBj b25mX3RhYiBXSEVSRSBhPTE7Iik7CisKK2lmICgkc2ltdWxhdGVfcmFjZV9jb25kaXRpb24pCit7 CisJIyBXYWl0IGFwcGx5IHdvcmtlciB0byBzdGFydCB0aGUgc2VhcmNoIGZvciB0aGUgdHVwbGUg dXNpbmcgaW5kZXgKKwkkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9ldmVudCgnbG9naWNhbCBy ZXBsaWNhdGlvbiBhcHBseSB3b3JrZXInLAorCQknaW5kZXhfZ2V0bmV4dF9zbG90X2JlZm9yZV9m ZXRjaF9hcHBseV9kaXJ0eScpOworfQorCisjIFVwZGF0ZXIgdHVwbGUgb24gc3Vic2NyaWJlcgor JHBzcWxfc2Vzc2lvbl9zdWJzY3JpYmVyLT5xdWVyeV91bnRpbCgKKwlxci9zdGFydC8sIHFxWwor CVxcZWNobyBzdGFydAorCVVQREFURSBjb25mX3RhYiBTRVQgZGF0YSA9ICdmcm9tc3VibmV3JyBX SEVSRSAoYT0xKTsKK10pOworCisKK2lmICgkc2ltdWxhdGVfcmFjZV9jb25kaXRpb24pCit7CisJ IyBXYWtlIHVwIGFwcGx5IHdvcmtlcgorCSRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCIKKwkJU0VMRUNUIGluamVjdGlvbl9wb2ludHNfZGV0YWNoKCdpbmRleF9nZXRuZXh0 X3Nsb3RfYmVmb3JlX2ZldGNoX2FwcGx5X2RpcnR5Jyk7CisJCVNFTEVDVCBpbmplY3Rpb25fcG9p bnRzX3dha2V1cCgnaW5kZXhfZ2V0bmV4dF9zbG90X2JlZm9yZV9mZXRjaF9hcHBseV9kaXJ0eScp OworCQkiKTsKK30KKworIyBUdXBsZSB3YXMgdXBkYXRlZCAtIHNvLCB3ZSBoYXZlIGNvbmZsaWN0 Ciskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCisJcXIvY29uZmxpY3QgZGV0ZWN0ZWQg b24gcmVsYXRpb24gXCJwdWJsaWMuY29uZl90YWJcIi8sCisJJGxvZ19vZmZzZXQpOworCisjIEJ1 dCB0dXBsZSBzaG91bGQgYmUgZGVsZXRlZCBvbiBzdWJzY3JpYmVyIGFueSB3YXkKK2lzKCRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnU0VMRUNUIGNvdW50KCopIGZyb20g Y29uZl90YWInKSwgMCwgJ3JlY29yZCBkZWxldGVkIG9uIHN1YnNjcmliZXInKTsKKworb2soISRu b2RlX3N1YnNjcmliZXItPmxvZ19jb250YWlucygKKwkJcXIvTE9HOiAgY29uZmxpY3QgZGV0ZWN0 ZWQgb24gcmVsYXRpb24gXCJwdWJsaWMuY29uZl90YWJcIjogY29uZmxpY3Q9ZGVsZXRlX21pc3Np bmcvLAorCQkkbG9nX29mZnNldCksICdpbnZhbGlkIGNvbmZsaWN0IGRldGVjdGVkJyk7CisKK29r KCRub2RlX3N1YnNjcmliZXItPmxvZ19jb250YWlucygKKwkJcXIvTE9HOiAgY29uZmxpY3QgZGV0 ZWN0ZWQgb24gcmVsYXRpb24gInB1YmxpYy5jb25mX3RhYiI6IGNvbmZsaWN0PWRlbGV0ZV9vcmln aW5fZGlmZmVycy8sCisJCSRsb2dfb2Zmc2V0KSwgJ2NvcnJlY3QgY29uZmxpY3QgZGV0ZWN0ZWQn KTsKKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMzdfdXBkYXRlX21pc3NpbmdfcmFjZS5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAz N191cGRhdGVfbWlzc2luZ19yYWNlLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5hY2QyYzg3NjAxYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlw dGlvbi90LzAzN191cGRhdGVfbWlzc2luZ19yYWNlLnBsCkBAIC0wLDAgKzEsMTM3IEBACisjIENv cHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwor IyBUZXN0IHRoZSBjb25mbGljdCBkZXRlY3Rpb24gYW5kIHJlc29sdXRpb24gaW4gbG9naWNhbCBy ZXBsaWNhdGlvbgordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKK3Vz ZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxz OwordXNlIFRlc3Q6Ok1vcmU7CisKK2lmICgkRU5We2VuYWJsZV9pbmplY3Rpb25fcG9pbnRzfSBu ZSAneWVzJykKK3sKKwlwbGFuIHNraXBfYWxsID0+ICdJbmplY3Rpb24gcG9pbnRzIG5vdCBzdXBw b3J0ZWQgYnkgdGhpcyBidWlsZCc7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyBTZXQgaXQgdG8gMCB0byBtYWtlIHNldCBzdWNjZXNzOyBUT0RPOiBkZWxldGUgdGhhdCBmb3Ig Y29tbWl0CitteSAkc2ltdWxhdGVfcmFjZV9jb25kaXRpb24gPSAxOworIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU2V0 dXAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBJbml0aWFsaXplIHB1Ymxp c2hlciBub2RlCitteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy LT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVfcHVibGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1p bmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1Ymxpc2hlci0+c3RhcnQ7CisKKworIyBDcmVhdGUg c3Vic2NyaWJlciBub2RlIHdpdGggdHJhY2tfY29tbWl0X3RpbWVzdGFtcCBlbmFibGVkCitteSAk bm9kZV9zdWJzY3JpYmVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdWJzY3Jp YmVyJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5pbml0OworJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5k X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJcXEodHJhY2tfY29tbWl0X3RpbWVzdGFtcCA9IG9u KSk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zdGFydDsKKworCisjIENoZWNrIGlmIHRoZSBleHRlbnNp b24gaW5qZWN0aW9uX3BvaW50cyBpcyBhdmFpbGFibGUsIGFzIGl0IG1heSBiZQorIyBwb3NzaWJs ZSB0aGF0IHRoaXMgc2NyaXB0IGlzIHJ1biB3aXRoIGluc3RhbGxjaGVjaywgd2hlcmUgdGhlIG1v ZHVsZQorIyB3b3VsZCBub3QgYmUgaW5zdGFsbGVkIGJ5IGRlZmF1bHQuCitpZiAoISRub2RlX3N1 YnNjcmliZXItPmNoZWNrX2V4dGVuc2lvbignaW5qZWN0aW9uX3BvaW50cycpKQoreworCXBsYW4g c2tpcF9hbGwgPT4gJ0V4dGVuc2lvbiBpbmplY3Rpb25fcG9pbnRzIG5vdCBpbnN0YWxsZWQnOwor fQorCisjIENyZWF0ZSB0YWJsZSBvbiBwdWJsaXNoZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKAorCSdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSBjb25mX3RhYihhIGludCBQUklNQVJZ IGtleSwgZGF0YSB0ZXh0KTsiKTsKKworIyBDcmVhdGUgc2ltaWxhciB0YWJsZSBvbiBzdWJzY3Jp YmVyIHdpdGggYWRkaXRpb25hbCBpbmRleCB0byBkaXNhYmxlIEhPVCB1cGRhdGVzIGFuZCBhZGRp dGlvbmFsIGNvbHVtbgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3Jlcycs CisJIkNSRUFURSBUQUJMRSBjb25mX3RhYihhIGludCBQUklNQVJZIGtleSwgZGF0YSB0ZXh0LCBp IGludCBERUZBVUxUIDApOworCSBDUkVBVEUgSU5ERVggaV9pbmRleCBPTiBjb25mX3RhYihpKTsi KTsKKworIyBTZXQgdXAgZXh0ZW5zaW9uIHRvIHNpbXVsYXRlIHJhY2UgY29uZGl0aW9uCiskbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBFWFRFTlNJT04gaW5q ZWN0aW9uX3BvaW50czsnKTsKKworIyBTZXR1cCBsb2dpY2FsIHJlcGxpY2F0aW9uCitteSAkcHVi bGlzaGVyX2Nvbm5zdHIgPSAkbm9kZV9wdWJsaXNoZXItPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0 Z3Jlcyc7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUg UFVCTElDQVRJT04gdGFwX3B1YiBGT1IgVEFCTEUgY29uZl90YWIiKTsKKworIyBJbnNlcnQgcm93 IHRvIGJlIHVwZGF0ZWQgbGF0ZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIklOU0VSVCBJTlRPIGNvbmZfdGFiKGEsIGRhdGEpIFZBTFVFUyAoMSwnZnJvbXB1Yicp Iik7CisKKyMgQ3JlYXRlIHRoZSBzdWJzY3JpcHRpb24KK215ICRhcHBuYW1lID0gJ3RhcF9zdWIn OworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsCisJIkNSRUFURSBT VUJTQ1JJUFRJT04gdGFwX3N1YgorCSBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBw bGljYXRpb25fbmFtZT0kYXBwbmFtZScKKwkgUFVCTElDQVRJT04gdGFwX3B1YiIpOworCisjIFdh aXQgZm9yIGluaXRpYWwgdGFibGUgc3luYyB0byBmaW5pc2gKKyRub2RlX3N1YnNjcmliZXItPndh aXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3B1Ymxpc2hlciwgJGFwcG5hbWUpOworCisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBSYWNlIGNvbmRp dGlvbiBiZWNhdXNlIG9mIERpcnR5U25hcHNob3QKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCisKK215ICRwc3FsX3Nlc3Npb25fc3Vic2NyaWJlciA9ICRub2Rl X3N1YnNjcmliZXItPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnKTsKK2lmICgkc2ltdWxhdGVf cmFjZV9jb25kaXRpb24pCit7CisJJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19hdHRhY2goJ2luZGV4X2dldG5leHRfc2xvdF9i ZWZvcmVfZmV0Y2hfYXBwbHlfZGlydHknLCAnd2FpdCcpIik7Cit9CisKK215ICRsb2dfb2Zmc2V0 ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworIyBVcGRhdGUgdHVwbGUgb24gcHVi bGlzaGVyCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJVUERBVEUg Y29uZl90YWIgU0VUIGRhdGEgPSAnZnJvbXB1Ym5ldycgV0hFUkUgKGE9MSk7Iik7CisKKworaWYg KCRzaW11bGF0ZV9yYWNlX2NvbmRpdGlvbikKK3sKKwkjIFdhaXQgYXBwbHkgd29ya2VyIHRvIHN0 YXJ0IHRoZSBzZWFyY2ggZm9yIHRoZSB0dXBsZSB1c2luZyBpbmRleAorCSRub2RlX3N1YnNjcmli ZXItPndhaXRfZm9yX2V2ZW50KCdsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlcicsICdp bmRleF9nZXRuZXh0X3Nsb3RfYmVmb3JlX2ZldGNoX2FwcGx5X2RpcnR5Jyk7Cit9CisKKyMgVXBk YXRlIGFkZGl0aW9uYWwoISkgY29sdW1uIG9uIHRoZSBzdWJzY3JpYmVyCiskcHNxbF9zZXNzaW9u X3N1YnNjcmliZXItPnF1ZXJ5X3VudGlsKAorCXFyL3N0YXJ0LywgcXFbCisJXFxlY2hvIHN0YXJ0 CisJVVBEQVRFIGNvbmZfdGFiIFNFVCBpID0gMSBXSEVSRSAoYT0xKTsKK10pOworCisKK2lmICgk c2ltdWxhdGVfcmFjZV9jb25kaXRpb24pCit7CisJIyBXYWtlIHVwIGFwcGx5IHdvcmtlcgorCSRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCIKKwkJU0VMRUNUIGluamVjdGlv bl9wb2ludHNfZGV0YWNoKCdpbmRleF9nZXRuZXh0X3Nsb3RfYmVmb3JlX2ZldGNoX2FwcGx5X2Rp cnR5Jyk7CisJCVNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3dha2V1cCgnaW5kZXhfZ2V0bmV4dF9z bG90X2JlZm9yZV9mZXRjaF9hcHBseV9kaXJ0eScpOworCQkiKTsKK30KKworIyBUdXBsZSB3YXMg dXBkYXRlZCAtIHNvLCB3ZSBoYXZlIGNvbmZsaWN0Ciskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zv cl9sb2coCisJcXIvY29uZmxpY3QgZGV0ZWN0ZWQgb24gcmVsYXRpb24gXCJwdWJsaWMuY29uZl90 YWJcIi8sCisJJGxvZ19vZmZzZXQpOworCisjIFdlIG5lZWQgbmV3IGNvbHVtbiB2YWx1ZSBiZSBz eW5jZWQgd2l0aCBzdWJzY3JpYmVyCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgJ1NFTEVDVCBkYXRhIGZyb20gY29uZl90YWIgV0hFUkUgYSA9IDEnKSwgJ2Zyb21w dWJuZXcnLCAncmVjb3JkIHVwZGF0ZWQgb24gc3Vic2NyaWJlcicpOworIyBBbmQgYWRkaXRpb25h bCBjb2x1bW4gbWFpbnRhaW4gdXBkYXRlZCB2YWx1ZQoraXMoJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICdTRUxFQ1QgaSBmcm9tIGNvbmZfdGFiIFdIRVJFIGEgPSAxJyks IDEsICdjb2x1bW4gcmVjb3JkIHVwZGF0ZWQgb24gc3Vic2NyaWJlcicpOworCitvayghJG5vZGVf c3Vic2NyaWJlci0+bG9nX2NvbnRhaW5zKAorCQlxci9MT0c6ICBjb25mbGljdCBkZXRlY3RlZCBv biByZWxhdGlvbiBcInB1YmxpYy5jb25mX3RhYlwiOiBjb25mbGljdD11cGRhdGVfbWlzc2luZy8s CisJCSRsb2dfb2Zmc2V0KSwgJ2ludmFsaWQgY29uZmxpY3QgZGV0ZWN0ZWQnKTsKKworb2soJG5v ZGVfc3Vic2NyaWJlci0+bG9nX2NvbnRhaW5zKAorCQlxci9MT0c6ICBjb25mbGljdCBkZXRlY3Rl ZCBvbiByZWxhdGlvbiAicHVibGljLmNvbmZfdGFiIjogY29uZmxpY3Q9dXBkYXRlX29yaWdpbl9k aWZmZXJzLywKKwkJJGxvZ19vZmZzZXQpLCAnY29ycmVjdCBjb25mbGljdCBkZXRlY3RlZCcpOwor Citkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNDMuMAoK --0000000000003f1335063cbf9a8e--