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 1wD7Km-002cpy-0B for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Apr 2026 20:59:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wD7Kl-002BXt-0x for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Apr 2026 20:59:39 +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 1wD7Kk-002BXl-2X for pgsql-hackers@lists.postgresql.org; Wed, 15 Apr 2026 20:59:39 +0000 Received: from mail-oo1-xc2c.google.com ([2607:f8b0:4864:20::c2c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wD7Ki-00000001I01-00kG for pgsql-hackers@lists.postgresql.org; Wed, 15 Apr 2026 20:59:38 +0000 Received: by mail-oo1-xc2c.google.com with SMTP id 006d021491bc7-682fce74c06so6041204eaf.3 for ; Wed, 15 Apr 2026 13:59:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776286774; cv=none; d=google.com; s=arc-20240605; b=A34wJMe9v4/RB19KuRsF+cB4HeATiYwWSRezvRpFm3hEIe0JSwLg9LUnZfhgSMBPAF bVOg2f9EDqWcMKRiK0k771+RTEBBDPzfK+TEsaoWiudFbOcu/6qrH3y5QZ4aY6z/Mg33 V4Tt/7mC3AOKJ8m9DS34NxWI4S2I1pgt3GddgT2V/qYQcZlJi2PJlHPHNKhIbraJy+hZ ACms/lHw8Sf48ZF83DdKSBXF0RZmZFDH5HF6hMj0Up6k4lmcC/lym+vwkqUv5Jw9Iq0m KwWcWVRJIj6LMP2M6Q7BlnYBSk5X7oV/PSsmVBgE4aVO42k925C94YVGIQzb7f/HtF4v NGvA== 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=VdhCVPzuJdnGHPaHMh3EmGLEmQAbEKJrr25z+gi4n9A=; fh=OgOKg8SQsoDEOfd5PKJomx9PE8SJi3DED7z8A2zE99I=; b=ZwqoduXrPV1NnhyGCyxYxwdKcCOCpllpyft1sxyN8wNF5mqouB2/0JGiu3XBsO1ND1 Q11dhcdFvPxv8BnfU0eNYTgwnNsk2pKFYWeFibcJZtReuMOzXm6T9sgjdXCqkdKdBVrZ ryCGqg1PItHhf6yZwgPqqcZpWVm7BzptEZ5bKBEiAeL6BiiT3JR801Htq5v3XozZWEd+ Bv1yjvjYc+dSTivOYrr0gaV8j3yQb5e1cL+4HP9zUGQGQOyiTOD4S0J/jCDey810JIlc Kt02U67RYWvln4q7dxez3BTVbwxnohk1dVo2QsgCAifEfKn5HTnL+h8NqndHIpu8k03L ghkg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=illuminatedcomputing-com.20251104.gappssmtp.com; s=20251104; t=1776286774; x=1776891574; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=VdhCVPzuJdnGHPaHMh3EmGLEmQAbEKJrr25z+gi4n9A=; b=SMAqQdtQIZObSeU0frFEjWWOHFlFU5WksV+xoM51amLcs/CRRqpR6cbzWlA5Cvjz24 cnixXNmY+C7N7qrPDDaAwUtTQW3WK/nJVvLcFD8EYYnOvOAQ61/a2Dzz9wnm5KjF1Ied XmKwf7rNf4pPsTqLrmDjhvGt0WKvrLRBVaBeX9WWTDG6R1X9xhPdvU+6UqieNHiGw8Tx EGK0iOFRdcx1pESJpsSzqRc5Fa4aXy6oo4rw63ftKgnRbsaytBThRSDBrTFrsGhOsQf0 IXVZjYM8U1ypFGsSD2bH5phl14Ys9CGULV111pq60qNnHruCCuafMJ+pcUv+NJmhjJLK cVgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776286774; x=1776891574; 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=VdhCVPzuJdnGHPaHMh3EmGLEmQAbEKJrr25z+gi4n9A=; b=crIQlU6uQ2XbrJiMSdkaN1Qsdi/UE5635OLCEz8JGVPGXv1qQIHhDiB6xWhFEQoGix ZhD/WvbjWj67agearq16ld+Kob+fAURmFFOphwGVQgVhMA2kXlcTouNjA+I8OO3hOMjc 8V65YioqorfZjOYbkcxinoku2inC8xRe+EVhQcDZEcOZaWlM17DEAzH3R/BnAiASQczy hLkmHVAKo/XRWUY3St4tV/7oon9lEPlNV3fkGsYASFvtNa6VUBRTlbK9yhbeef/2cDs3 qyX3/JLcuYNH6mj7hx+WyS77qp6suLbqkMd4cE9HhhIpLDxWLl9+fBogGsa4kwBjK1pJ AXFg== X-Forwarded-Encrypted: i=1; AFNElJ8lE0bYnQl3I/tDqN1NoW/VILUzsFxPOIaQ2kmTHwpLzglLyOZeW0tfOoAG4vHm+lhDIvVuTLSSSALTOkXJ@lists.postgresql.org X-Gm-Message-State: AOJu0Yz2mdkOXk7n7DWPK7jxU63OFo77KSVQCmtgs1onO0IBK1ImhQvA ieppM359+KBjZFeJSvNni6PmOq6po7y9ib4ARQgT4Vpw+wXHOwyEonNyqHcyNNC6cNsI4HTQD1C u65vFTQDWFvTc9svmzf/z1Pc+0jpnyrIB4d77f7vOu1N9jPyljhF0madH9A== X-Gm-Gg: AeBDiet24b58ubR8cpnZvnkm8XkLoDDWP9pphJ0KYGQoo1qgv20K4fPzRBvFbQgpKDO KJqfxCW+teRq0nR8bwStsztekoUApczdiIfQna+hqKRugekfrzFNp3pZbu+na2rs993CB7i88Ce 3btqmiXdI8FuuNvgibSpdXZSRB09rGbVSpTwKROBe8gg14fmXt4KeDPGq/RtV3St0phGR9LPdhz XLuoSduoHHk3jYzHHu2d5AJrDU4GH+53Ktlvbc0stGs2tHp+qMDLUEbc7L3xLaWViIXpxBuwTLe XOZkU07ixc46jzCx5IccWH0iWA== X-Received: by 2002:a05:6820:81c5:b0:688:c232:dac6 with SMTP id 006d021491bc7-68be5e56f9emr13227662eaf.19.1776286774043; Wed, 15 Apr 2026 13:59:34 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Paul A Jungwirth Date: Wed, 15 Apr 2026 13:59:21 -0700 X-Gm-Features: AQROBzCMooO-FAGaUtMuswJdPLtF5eFeJDfZnoqqbr91iayUQN9eE7Uy0rqNre8 Message-ID: Subject: Re: FOR PORTION OF does not recompute GENERATED STORED columns that depend on the range column To: SATYANARAYANA NARLAPURAM Cc: jian he , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000002ffc3d064f85fe87" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002ffc3d064f85fe87 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Apr 10, 2026 at 3:01=E2=80=AFPM SATYANARAYANA NARLAPURAM wrote: > >> I've combined all these changes into a single patch for now, as they >> seem closely related. >> >> [1]: https://postgr.es/m/CACJufxHALFKca5SMn5DNnbrX2trPamVL6napn_nm35p15y= w+rg@mail.gmail.com > > I applied your patch and tested. The following scenarios are now passing:= (1) table inheritance issue I reported in [1], (2) issue reported in this= thread. They look good to me too. I read through the patch and made some stylistic changes, as well as some grammar/typo fixes. In ExecInitForPortionOf I tried to group things for each case more closely, instead of separate disconnected branches. I also added/moved some comments. Please see the attached. There's something I think we could still improve: we omit the valid-time in updatedCols, since that bitmapset is for permissions checking (at least originally), but now other features are using it as well. Our fix adds special logic to consider the valid-at column for GENERATED column dependencies and more special logic for UPDATE OF triggers. Perhaps we should add the attno to updatedCols after all, and put the special logic in the permissions check instead? That seems simpler and more robust. Or maybe it's time to have separate bitmapsets, one for permissions and another for everything else? What do you think? I'm not sure we should be consolidating these fixes into one patch. But I tried to call out all the issues in my commit message. > Following are still failing: > > (1) instead of triggers + views, mentioned in the thread [2], it has both= the test case and the fix. I'll follow up there. > (2) For Portion Of DELETE loses rows when a BEFORE INSERT trigger returns= NULL > > ... > > (3) FPO UPDATE loses leftovers the same way I agree with jian that this is the correct behavior. The inserts are supposed to fire triggers, and if a trigger signals to cancel the insert, that's what we should do. Yours, --=20 Paul ~{:-) pj@illuminatedcomputing.com --0000000000002ffc3d064f85fe87 Content-Type: application/octet-stream; name="v3-0001-Fix-some-problems-with-UPDATE-FOR-PORTION-OF.patch" Content-Disposition: attachment; filename="v3-0001-Fix-some-problems-with-UPDATE-FOR-PORTION-OF.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo0j7dol0 RnJvbSAxYjcwNTE2OGE5YmJjZjcxNDY0YTE1OGNjODRmNDdiOWU1MGRkZTNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTAgQXByIDIwMjYgMTc6MDE6MTIgKzA4MDAKU3ViamVjdDogW1BBVENIIHYz XSBGaXggc29tZSBwcm9ibGVtcyB3aXRoIFVQREFURSBGT1IgUE9SVElPTiBPRgoKLSBGaXhlZCBp bnNlcnRpbmcgbGVmdG92ZXJzIHdpdGggdHJhZGl0aW9uYWwgdGFibGUgaW5oZXJpdGFuY2UuIFNp bmNlIHRoZXJlIGlzCiAgbm8gdHVwbGUgcm91dGluZywgd2UgbXVzdCBhZGQgdGhlbSBkaXJlY3Rs eSB0byB0aGUgY2hpbGQgdGFibGUuIEFsc28gdGhpcwogIHByZXNlcnZlcyBleHRyYSBjb2x1bW5z IGluIHRoYXQgdGFibGUuCi0gQWRkZWQgRXhlY0luaXRGb3JQb3J0aW9uT2YuIFRoaXMgc2V0cyB1 cCBleGVjdXRvciBzdGF0ZSBmb3IgY2hpbGQgcGFydGl0aW9ucy4KICBQcmV2aW91c2x5IHdlIGRp ZCB0aGlzIGluIEV4ZWNGb3JQb3J0aW9uT2ZMZWZ0b3ZlcnMsIGJ1dCBkb2luZyBpdCBlYXJsaWVy IGxldHMKICB1cyB1c2UgdGhlIGNoaWxkLT5wYXJlbnQgYXR0ciBtYXBwaW5nIGluIHRoZSBmaXhl cyBiZWxvdy4KLSBNYWRlIHN1cmUgR0VORVJBVEVEIFNUT1JFRCBjb2x1bW5zIHRoYXQgZGVwZW5k IG9uIHRoZSBhcHBsaWNhdGlvbi10aW1lIGNvbHVtbgogIGdldCB1cGRhdGVkLiBXZSBleGNsdWRl IHRoYXQgY29sdW1uIGZyb20gdGhlIHVwZGF0ZWRDb2xzIGJpdG1hcHNldCwgYmVjYXVzZSBpdAog IGRvZXMgbm90IHJlcXVpcmUgcGVybWlzc2lvbnMuIEJ1dCB0aGVuIHdlIG11c3QgcmVtZW1iZXIg dG8gY29uc2lkZXIgaXQgbGF0ZXIuCi0gTWFkZSBhIHNpbWlsYXIgZml4IGZvciBVUERBVEUgT0Yg dHJpZ2dlcnMuCi0gQ2xhcmlmaWVkIGEgY29tbWVudCBhYm91dCB0aGUgcmFuZ2V0eXBlIHN0b3Jl ZCBpbiBGb3JQb3J0aW9uT2ZTdGF0ZS4KCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20v Q0FIZytRRGNkPXQ2OWdMZjl5UWV4TzA3RUoybXgwWjcwTkZIbzZoOTRYMUVEQT1oTTBnQG1haWwu Z21haWwuY29tCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIZytRRGNzWHNVVmFa K0p3TTAyeURSUUVpPWNMX3JUSF9ST0xEWWdPeDAwNHNRdTdBQG1haWwuZ21haWwuY29tCi0tLQog c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMgICAgICAgICAgICAgfCAgMjIgKysrCiBz cmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyAgICAgICB8IDE2MCArKysrKysr KysrKysrLS0tLS0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgICAg ICB8ICAgMyArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JfcG9ydGlvbl9vZi5vdXQg fCAxMjMgKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zvcl9wb3J0aW9uX29m LnNxbCAgICAgIHwgIDg0ICsrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgMzQ0IGluc2VydGlv bnMoKyksIDQ4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNVdGlscy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKaW5kZXggMWVi NmI5ZjFmNDAuLjVkZjdmMmVkZjg1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjVXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVXRpbHMuYwpAQCAtMTQz MCw3ICsxNDMwLDI5IEBAIEV4ZWNHZXRFeHRyYVVwZGF0ZWRDb2xzKFJlc3VsdFJlbEluZm8gKnJl bGluZm8sIEVTdGF0ZSAqZXN0YXRlKQogewogCS8qIENvbXB1dGUgdGhlIGluZm8gaWYgd2UgZGlk bid0IGFscmVhZHkgKi8KIAlpZiAoIXJlbGluZm8tPnJpX2V4dHJhVXBkYXRlZENvbHNfdmFsaWQp CisJeworCQlpZiAocmVsaW5mby0+cmlfZm9yUG9ydGlvbk9mKQorCQl7CisJCQlNZW1vcnlDb250 ZXh0IG9sZENvbnRleHQ7CisKKwkJCUF0dHJOdW1iZXIJcmFuZ2VBdHRubyA9IHJlbGluZm8tPnJp X2ZvclBvcnRpb25PZi0+ZnBfcmFuZ2VBdHRubzsKKworCQkJb2xkQ29udGV4dCA9IE1lbW9yeUNv bnRleHRTd2l0Y2hUbyhlc3RhdGUtPmVzX3F1ZXJ5X2N4dCk7CisKKwkJCS8qCisJCQkgKiBGb3Ig VVBEQVRFIC4uLiBGT1IgUE9SVElPTiBPRiwgdGhlIHJhbmdlIGNvbHVtbiBpcyBhY3R1YWxseQor CQkJICogYmVpbmcgbW9kaWZpZWQgKG5hcnJvd2VkIHZpYSBpbnRlcnNlY3Rpb24pLCBidXQgaXQg aXMgbm90CisJCQkgKiBpbmNsdWRlZCBpbiB1cGRhdGVkQ29scyBiZWNhdXNlIHRoZSB1c2VyIGRv ZXMgbm90IG5lZWQgVVBEQVRFCisJCQkgKiBwZXJtaXNzaW9uIG9uIGl0LiBTbyB3ZSBuZWVkIHRv IGFkZCBpdCB0byByaV9leHRyYVVwZGF0ZWRDb2xzCisJCQkgKi8KKwkJCXJlbGluZm8tPnJpX2V4 dHJhVXBkYXRlZENvbHMgPQorCQkJCWJtc19hZGRfbWVtYmVyKHJlbGluZm8tPnJpX2V4dHJhVXBk YXRlZENvbHMsIHJhbmdlQXR0bm8gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVy KTsKKworCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZENvbnRleHQpOworCQl9CisKIAkJRXhl Y0luaXRHZW5lcmF0ZWQocmVsaW5mbywgZXN0YXRlLCBDTURfVVBEQVRFKTsKKwl9CiAJcmV0dXJu IHJlbGluZm8tPnJpX2V4dHJhVXBkYXRlZENvbHM7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZU1vZGlmeVRhYmxlLmMKaW5kZXggZWYyYTZiYzZlOWQuLjQzOTUwODk1NjVmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwpAQCAtMTk3LDYgKzE5Nyw4IEBAIHN0YXRpYyBU dXBsZVRhYmxlU2xvdCAqRXhlY01lcmdlTm90TWF0Y2hlZChNb2RpZnlUYWJsZUNvbnRleHQgKmNv bnRleHQsCiBzdGF0aWMgdm9pZCBFeGVjU2V0dXBUcmFuc2l0aW9uQ2FwdHVyZVN0YXRlKE1vZGlm eVRhYmxlU3RhdGUgKm10c3RhdGUsIEVTdGF0ZSAqZXN0YXRlKTsKIHN0YXRpYyB2b2lkIGZpcmVC U1RyaWdnZXJzKE1vZGlmeVRhYmxlU3RhdGUgKm5vZGUpOwogc3RhdGljIHZvaWQgZmlyZUFTVHJp Z2dlcnMoTW9kaWZ5VGFibGVTdGF0ZSAqbm9kZSk7CitzdGF0aWMgdm9pZCBFeGVjSW5pdEZvclBv cnRpb25PZihNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKKwkJCQkJ CQkJIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8pOwogCiAKIC8qCkBAIC00NzUsNiArNDc3 LDIxIEBAIEV4ZWNJbml0R2VuZXJhdGVkKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJ ZWxzZQogCQl1cGRhdGVkQ29scyA9IE5VTEw7CiAKKwkvKgorCSAqIEZvciBVUERBVEUgLi4uIEZP UiBQT1JUSU9OIE9GLCB0aGUgcmFuZ2UgY29sdW1uIGlzIGFsc28gYmVpbmcgbW9kaWZpZWQKKwkg KiAobmFycm93ZWQgdmlhIGludGVyc2VjdGlvbiksIGJ1dCBpdCBpcyBub3QgaW5jbHVkZWQgaW4g dXBkYXRlZENvbHMKKwkgKiBiZWNhdXNlIHRoZSB1c2VyIGRvZXMgbm90IG5lZWQgVVBEQVRFIHBl cm1pc3Npb24gb24gaXQuICBXZSBtdXN0CisJICogYWNjb3VudCBmb3IgaXQgaGVyZSBzbyB0aGF0 IGdlbmVyYXRlZCBjb2x1bW5zIHJlZmVyZW5jaW5nIHRoZSByYW5nZQorCSAqIGNvbHVtbiBhcmUg cmVjb21wdXRlZC4KKwkgKi8KKwlpZiAocmVzdWx0UmVsSW5mby0+cmlfZm9yUG9ydGlvbk9mKQor CXsKKwkJQXR0ck51bWJlcglyYW5nZUF0dG5vID0gcmVzdWx0UmVsSW5mby0+cmlfZm9yUG9ydGlv bk9mLT5mcF9yYW5nZUF0dG5vOworCisJCXVwZGF0ZWRDb2xzID0gYm1zX2FkZF9tZW1iZXIoYm1z X2NvcHkodXBkYXRlZENvbHMpLAorCQkJCQkJCQkJIHJhbmdlQXR0bm8gLSBGaXJzdExvd0ludmFs aWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKwl9CisKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGVzZSBk YXRhIHN0cnVjdHVyZXMgYXJlIGJ1aWx0IGluIHRoZSBwZXItcXVlcnkgbWVtb3J5CiAJICogY29u dGV4dCBzbyB0aGV5J2xsIHN1cnZpdmUgdGhyb3VnaG91dCB0aGUgcXVlcnkuCkBAIC0xNDA4LDcg KzE0MjUsNiBAQCBFeGVjRm9yUG9ydGlvbk9mTGVmdG92ZXJzKE1vZGlmeVRhYmxlQ29udGV4dCAq Y29udGV4dCwKIAlNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRlID0gY29udGV4dC0+bXRzdGF0ZTsK IAlNb2RpZnlUYWJsZSAqbm9kZSA9IChNb2RpZnlUYWJsZSAqKSBtdHN0YXRlLT5wcy5wbGFuOwog CUZvclBvcnRpb25PZkV4cHIgKmZvclBvcnRpb25PZiA9IChGb3JQb3J0aW9uT2ZFeHByICopIG5v ZGUtPmZvclBvcnRpb25PZjsKLQlBdHRyTnVtYmVyCXJhbmdlQXR0bm87CiAJRGF0dW0JCW9sZFJh bmdlOwogCVR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZTsKIAlGb3JQb3J0aW9uT2ZTdGF0ZSAqZnBv U3RhdGU7CkBAIC0xNDIyLDM3ICsxNDM4LDEwIEBAIEV4ZWNGb3JQb3J0aW9uT2ZMZWZ0b3ZlcnMo TW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogCVJldHVyblNldEluZm8gcnNpOwogCWJvb2wJ CWRpZEluaXQgPSBmYWxzZTsKIAlib29sCQlzaG91bGRGcmVlID0gZmFsc2U7CisJUmVzdWx0UmVs SW5mbyAqcm9vdFJlbEluZm8gPSBtdHN0YXRlLT5yb290UmVzdWx0UmVsSW5mbzsKIAogCUxPQ0FM X0ZDSU5GTyhmY2luZm8sIDIpOwogCi0JaWYgKCFyZXN1bHRSZWxJbmZvLT5yaV9mb3JQb3J0aW9u T2YpCi0JewotCQkvKgotCQkgKiBJZiB3ZSBkb24ndCBoYXZlIGEgRm9yUG9ydGlvbk9mU3RhdGUg eWV0LCB3ZSBtdXN0IGJlIGEgcGFydGl0aW9uCi0JCSAqIGNoaWxkIGJlaW5nIGhpdCBmb3IgdGhl IGZpcnN0IHRpbWUuIE1ha2UgYSBjb3B5IGZyb20gdGhlIHJvb3QsIHdpdGgKLQkJICogb3VyIG93 biB0dXBsZVRhYmxlU2xvdC4gV2UgZG8gdGhpcyBsYXppbHkgc28gdGhhdCB3ZSBkb24ndCBwYXkg dGhlCi0JCSAqIHByaWNlIG9mIHVudXNlZCBwYXJ0aXRpb25zLgotCQkgKi8KLQkJRm9yUG9ydGlv bk9mU3RhdGUgKmxlYWZTdGF0ZSA9IG1ha2VOb2RlKEZvclBvcnRpb25PZlN0YXRlKTsKLQotCQlp ZiAoIW10c3RhdGUtPnJvb3RSZXN1bHRSZWxJbmZvKQotCQkJZWxvZyhFUlJPUiwgIm5vIHJvb3Qg cmVsYXRpb24gYnV0IHJpX2ZvclBvcnRpb25PZiBpcyB1bmluaXRpYWxpemVkIik7Ci0KLQkJZnBv U3RhdGUgPSBtdHN0YXRlLT5yb290UmVzdWx0UmVsSW5mby0+cmlfZm9yUG9ydGlvbk9mOwotCQlB c3NlcnQoZnBvU3RhdGUpOwotCi0JCWxlYWZTdGF0ZS0+ZnBfcmFuZ2VOYW1lID0gZnBvU3RhdGUt PmZwX3JhbmdlTmFtZTsKLQkJbGVhZlN0YXRlLT5mcF9yYW5nZVR5cGUgPSBmcG9TdGF0ZS0+ZnBf cmFuZ2VUeXBlOwotCQlsZWFmU3RhdGUtPmZwX3JhbmdlQXR0bm8gPSBmcG9TdGF0ZS0+ZnBfcmFu Z2VBdHRubzsKLQkJbGVhZlN0YXRlLT5mcF90YXJnZXRSYW5nZSA9IGZwb1N0YXRlLT5mcF90YXJn ZXRSYW5nZTsKLQkJbGVhZlN0YXRlLT5mcF9MZWZ0b3ZlciA9IGZwb1N0YXRlLT5mcF9MZWZ0b3Zl cjsKLQkJLyogRWFjaCBwYXJ0aXRpb24gbmVlZHMgYSBzbG90IG1hdGNoaW5nIGl0cyB0dXBsZSBk ZXNjcmlwdG9yICovCi0JCWxlYWZTdGF0ZS0+ZnBfRXhpc3RpbmcgPQotCQkJdGFibGVfc2xvdF9j cmVhdGUocmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLAotCQkJCQkJCSAgJm10c3RhdGUt PnBzLnN0YXRlLT5lc190dXBsZVRhYmxlKTsKLQotCQlyZXN1bHRSZWxJbmZvLT5yaV9mb3JQb3J0 aW9uT2YgPSBsZWFmU3RhdGU7Ci0JfQogCWZwb1N0YXRlID0gcmVzdWx0UmVsSW5mby0+cmlfZm9y UG9ydGlvbk9mOwogCW9sZHR1cGxlU2xvdCA9IGZwb1N0YXRlLT5mcF9FeGlzdGluZzsKIAlsZWZ0 b3ZlclNsb3QgPSBmcG9TdGF0ZS0+ZnBfTGVmdG92ZXI7CkBAIC0xNDczLDIxICsxNDYyLDEzIEBA IEV4ZWNGb3JQb3J0aW9uT2ZMZWZ0b3ZlcnMoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAog CWlmICghdGFibGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24ocmVzdWx0UmVsSW5mby0+cmlfUmVs YXRpb25EZXNjLCB0dXBsZWlkLCBTbmFwc2hvdEFueSwgb2xkdHVwbGVTbG90KSkKIAkJZWxvZyhF UlJPUiwgImZhaWxlZCB0byBmZXRjaCB0dXBsZSBmb3IgRk9SIFBPUlRJT04gT0YiKTsKIAotCS8q Ci0JICogR2V0IHRoZSBvbGQgcmFuZ2Ugb2YgdGhlIHJlY29yZCBiZWluZyB1cGRhdGVkL2RlbGV0 ZWQuIE11c3QgcmVhZCB3aXRoCi0JICogdGhlIGF0dG5vIG9mIHRoZSBsZWFmIHBhcnRpdGlvbiBi ZWluZyB1cGRhdGVkLgotCSAqLwotCi0JcmFuZ2VBdHRubyA9IGZvclBvcnRpb25PZi0+cmFuZ2VW YXItPnZhcmF0dG5vOwotCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9Sb290UmVzdWx0UmVsSW5mbykK LQkJbWFwID0gRXhlY0dldENoaWxkVG9Sb290TWFwKHJlc3VsdFJlbEluZm8pOwotCWlmIChtYXAg IT0gTlVMTCkKLQkJcmFuZ2VBdHRubyA9IG1hcC0+YXR0ck1hcC0+YXR0bnVtc1tyYW5nZUF0dG5v IC0gMV07CiAJc2xvdF9nZXRhbGxhdHRycyhvbGR0dXBsZVNsb3QpOwogCi0JaWYgKG9sZHR1cGxl U2xvdC0+dHRzX2lzbnVsbFtyYW5nZUF0dG5vIC0gMV0pCisJLyogR2V0IHRoZSBvbGQgcmFuZ2Ug b2YgdGhlIHJlY29yZCBiZWluZyB1cGRhdGVkL2RlbGV0ZWQuICovCisKKwlpZiAob2xkdHVwbGVT bG90LT50dHNfaXNudWxsW2Zwb1N0YXRlLT5mcF9yYW5nZUF0dG5vIC0gMV0pCiAJCWVsb2coRVJS T1IsICJmb3VuZCBhIE5VTEwgcmFuZ2UgaW4gYSB0ZW1wb3JhbCB0YWJsZSIpOwotCW9sZFJhbmdl ID0gb2xkdHVwbGVTbG90LT50dHNfdmFsdWVzW3JhbmdlQXR0bm8gLSAxXTsKKwlvbGRSYW5nZSA9 IG9sZHR1cGxlU2xvdC0+dHRzX3ZhbHVlc1tmcG9TdGF0ZS0+ZnBfcmFuZ2VBdHRubyAtIDFdOwog CiAJLyoKIAkgKiBHZXQgdGhlIHJhbmdlJ3MgdHlwZSBjYWNoZSBlbnRyeS4gVGhpcyBpcyB3b3J0 aCBjYWNoaW5nIGZvciB0aGUgd2hvbGUKQEAgLTE1MjQsMTIgKzE1MDUsMjAgQEAgRXhlY0ZvclBv cnRpb25PZkxlZnRvdmVycyhNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJZmNpbmZvLT5h cmdzWzFdLmlzbnVsbCA9IGZhbHNlOwogCiAJLyoKLQkgKiBJZiB0aGVyZSBhcmUgcGFydGl0aW9u cywgd2UgbXVzdCBpbnNlcnQgaW50byB0aGUgcm9vdCB0YWJsZSwgc28gd2UgZ2V0Ci0JICogdHVw bGUgcm91dGluZy4gV2UgYWxyZWFkeSBzZXQgdXAgbGVmdG92ZXJTbG90IHdpdGggdGhlIHJvb3Qg dHVwbGUKLQkgKiBkZXNjcmlwdG9yLgorCSAqIEZvciBwYXJ0aXRpb25lZCB0YWJsZXMsIHdlIG11 c3QgcmVhZCBsZWZ0b3ZlcnMgd2l0aCB0aGUgdHVwbGUgZGVzY3JpcHRvcgorCSAqIG9mIHRoZSBj aGlsZCB0YWJsZSwgYnV0IGluc2VydCBpbnRvIHRoZSByb290IHRhYmxlIHRvIGVuYWJsZSB0dXBs ZQorCSAqIHJvdXRpbmcuICBTbyBsZWZ0b3ZlclNsb3QgaXMgY29uZmlndXJlZCB3aXRoIHRoZSBy b290J3MgdHVwbGUKKwkgKiBkZXNjcmlwdG9yLiAgSG93ZXZlciwgZm9yIHRyYWRpdGlvbmFsIHRh YmxlIGluaGVyaXRhbmNlLCB3ZSBkb24ndCBuZWVkCisJICogdHVwbGUgcm91dGluZyBhbmQganVz dCBpbnNlcnQgZGlyZWN0bHkgaW50byB0aGUgY2hpbGQgdGFibGUgdG8gcHJlc2VydmUKKwkgKiBj aGlsZC1zcGVjaWZpYyBjb2x1bW5zLiAgSW4gdGhhdCBjYXNlLCBsZWZ0b3ZlclNsb3QgdXNlcyB0 aGUgY2hpbGQncworCSAqIChyZXN1bHRSZWxJbmZvKSB0dXBsZSBkZXNjcmlwdG9yLgogCSAqLwot CWlmIChyZXN1bHRSZWxJbmZvLT5yaV9Sb290UmVzdWx0UmVsSW5mbykKKwlpZiAocm9vdFJlbElu Zm8gJiYKKwkJcm9vdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYy0+cmRfcmVsLT5yZWxraW5kID09 IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJeworCQltYXAgPSBFeGVjR2V0Q2hpbGRUb1Jv b3RNYXAocmVzdWx0UmVsSW5mbyk7CiAJCXJlc3VsdFJlbEluZm8gPSByZXN1bHRSZWxJbmZvLT5y aV9Sb290UmVzdWx0UmVsSW5mbzsKKwl9CiAKIAkvKgogCSAqIEluc2VydCBhIGxlZnRvdmVyIGZv ciBlYWNoIHZhbHVlIHJldHVybmVkIGJ5IHRoZSB3aXRob3V0X3BvcnRpb24gaGVscGVyCkBAIC0x NTg1LDggKzE1NzQsOSBAQCBFeGVjRm9yUG9ydGlvbk9mTGVmdG92ZXJzKE1vZGlmeVRhYmxlQ29u dGV4dCAqY29udGV4dCwKIAkJCWRpZEluaXQgPSB0cnVlOwogCQl9CiAKLQkJbGVmdG92ZXJTbG90 LT50dHNfdmFsdWVzW2ZvclBvcnRpb25PZi0+cmFuZ2VWYXItPnZhcmF0dG5vIC0gMV0gPSBsZWZ0 b3ZlcjsKLQkJbGVmdG92ZXJTbG90LT50dHNfaXNudWxsW2ZvclBvcnRpb25PZi0+cmFuZ2VWYXIt PnZhcmF0dG5vIC0gMV0gPSBmYWxzZTsKKwkJbGVmdG92ZXJTbG90LT50dHNfdmFsdWVzW3Jlc3Vs dFJlbEluZm8tPnJpX2ZvclBvcnRpb25PZi0+ZnBfcmFuZ2VBdHRubyAtIDFdID0gbGVmdG92ZXI7 CisJCWxlZnRvdmVyU2xvdC0+dHRzX2lzbnVsbFtyZXN1bHRSZWxJbmZvLT5yaV9mb3JQb3J0aW9u T2YtPmZwX3JhbmdlQXR0bm8gLSAxXSA9IGZhbHNlOworCiAJCUV4ZWNNYXRlcmlhbGl6ZVNsb3Qo bGVmdG92ZXJTbG90KTsKIAogCQkvKgpAQCAtNDc2MSw2ICs0NzUxLDE4IEBAIEV4ZWNNb2RpZnlU YWJsZShQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJCQkJCQkJCQkJCQkJIGZhbHNlLCB0cnVlKTsKIAkJ fQogCisJCS8qCisJCSAqIElmIHdlIGRvbid0IGhhdmUgYSBGb3JQb3J0aW9uT2ZTdGF0ZSB5ZXQs IHdlIG11c3QgYmUgYSBwYXJ0aXRpb24KKwkJICogY2hpbGQgYmVpbmcgaGl0IGZvciB0aGUgZmly c3QgdGltZS4gTWFrZSBhIGNvcHkgZnJvbSB0aGUgcm9vdCwgd2l0aAorCQkgKiBvdXIgb3duIHR1 cGxlVGFibGVTbG90LiBXZSBkbyB0aGlzIGxhemlseSBzbyB0aGF0IHdlIGRvbid0IHBheSB0aGUK KwkJICogcHJpY2Ugb2YgdW51c2VkIHBhcnRpdGlvbnMuCisJCSAqLworCQlpZiAoKCgoTW9kaWZ5 VGFibGUgKikgY29udGV4dC5tdHN0YXRlLT5wcy5wbGFuKS0+Zm9yUG9ydGlvbk9mKSAmJgorCQkJ IXJlc3VsdFJlbEluZm8tPnJpX2ZvclBvcnRpb25PZikKKwkJeworCQkJRXhlY0luaXRGb3JQb3J0 aW9uT2YoY29udGV4dC5tdHN0YXRlLCBlc3RhdGUsIHJlc3VsdFJlbEluZm8pOworCQl9CisKIAkJ LyoKIAkJICogSWYgcmVzdWx0UmVsSW5mby0+cmlfdXNlc0Zkd0RpcmVjdE1vZGlmeSBpcyB0cnVl LCBhbGwgd2UgbmVlZCB0byBkbwogCQkgKiBoZXJlIGlzIGNvbXB1dGUgdGhlIFJFVFVSTklORyBl eHByZXNzaW9ucy4KQEAgLTU4NDQsMyArNTg0Niw2NyBAQCBFeGVjUmVTY2FuTW9kaWZ5VGFibGUo TW9kaWZ5VGFibGVTdGF0ZSAqbm9kZSkKIAkgKi8KIAllbG9nKEVSUk9SLCAiRXhlY1JlU2Nhbk1v ZGlmeVRhYmxlIGlzIG5vdCBpbXBsZW1lbnRlZCIpOwogfQorCisvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJRXhl Y0luaXRGb3JQb3J0aW9uT2YKKyAqCisgKgkJSW5pdGlhbGl6ZXMgcmVzdWx0UmVsSW5mby0+cmlf Zm9yUG9ydGlvbk9mIGZvciBjaGlsZCB0YWJsZXMuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2 b2lkCitFeGVjSW5pdEZvclBvcnRpb25PZihNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRlLCBFU3Rh dGUgKmVzdGF0ZSwgUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbykKK3sKKwlNZW1vcnlDb250 ZXh0IG9sZGN4dDsKKwlGb3JQb3J0aW9uT2ZTdGF0ZSAqbGVhZlN0YXRlOworCVJlc3VsdFJlbElu Zm8gKnJvb3RSZWxJbmZvID0gbXRzdGF0ZS0+cm9vdFJlc3VsdFJlbEluZm87CisJRm9yUG9ydGlv bk9mU3RhdGUgKmZwb1N0YXRlOworCisJaWYgKCFyb290UmVsSW5mbykKKwkJZWxvZyhFUlJPUiwg Im5vIHJvb3QgcmVsYXRpb24gYnV0IHJpX2ZvclBvcnRpb25PZiBpcyB1bmluaXRpYWxpemVkIik7 CisKKwlmcG9TdGF0ZSA9IG10c3RhdGUtPnJvb3RSZXN1bHRSZWxJbmZvLT5yaV9mb3JQb3J0aW9u T2Y7CisKKwkvKiBUaGluZ3MgYnVpbHQgaGVyZSBoYXZlIHRvIGxhc3QgZm9yIHRoZSBxdWVyeSBk dXJhdGlvbi4gKi8KKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZXN0YXRlLT5lc19x dWVyeV9jeHQpOworCisJbGVhZlN0YXRlID0gbWFrZU5vZGUoRm9yUG9ydGlvbk9mU3RhdGUpOwor CisJbGVhZlN0YXRlLT5mcF9yYW5nZU5hbWUgPSBmcG9TdGF0ZS0+ZnBfcmFuZ2VOYW1lOworCWxl YWZTdGF0ZS0+ZnBfcmFuZ2VUeXBlID0gZnBvU3RhdGUtPmZwX3JhbmdlVHlwZTsKKwlsZWFmU3Rh dGUtPmZwX3RhcmdldFJhbmdlID0gZnBvU3RhdGUtPmZwX3RhcmdldFJhbmdlOworCisJLyoKKwkg KiBGb3IgcGFydGl0aW9uZWQgdGFibGVzIHdlIG11c3QgcmVhZCB0aGUgbGVmdG92ZXJzIHVzaW5n IHRoZSBjaGlsZCB0YWJsZSdzCisJICogdHVwbGUgZGVzY3JpcHRvciwgYnV0IHRoZW4gaW5zZXJ0 IHRoZW0gaW50byB0aGUgcm9vdCB0YWJsZSAodXNpbmcgaXRzCisJICogdHVwbGUgZGVzY3JpcHRv cikgc28gd2UgZ2V0IHR1cGxlIHJvdXRpbmcuCisJICoKKwkgKiBGb3IgdHJhZGl0aW9uYWwgdGFi bGUgaW5oZXJpdGFuY2UsIHdlIHJlYWQgYW5kIGluc2VydCBkaXJlY3RseSBpbnRvIHRoaXMKKwkg KiByZXN1bHRSZWxJbmZvOyBubyB0dXBsZSByb3V0aW5nIHRvIHRoZSBwYXJlbnQgaXMgcmVxdWly ZWQuCisJICovCisJaWYgKHJvb3RSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MtPnJkX3JlbC0+cmVs a2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCXsKKwkJVHVwbGVDb252ZXJzaW9u TWFwICptYXAgPSBFeGVjR2V0Q2hpbGRUb1Jvb3RNYXAocmVzdWx0UmVsSW5mbyk7CisJCWlmICht YXApCisJCQlsZWFmU3RhdGUtPmZwX3JhbmdlQXR0bm8gPSBtYXAtPmF0dHJNYXAtPmF0dG51bXNb ZnBvU3RhdGUtPmZwX3JhbmdlQXR0bm8gLSAxXTsKKwkJZWxzZQorCQkJbGVhZlN0YXRlLT5mcF9y YW5nZUF0dG5vID0gZnBvU3RhdGUtPmZwX3JhbmdlQXR0bm87CisJCWxlYWZTdGF0ZS0+ZnBfTGVm dG92ZXIgPSBmcG9TdGF0ZS0+ZnBfTGVmdG92ZXI7CisJfQorCWVsc2UKKwl7CisJCWxlYWZTdGF0 ZS0+ZnBfcmFuZ2VBdHRubyA9IGZwb1N0YXRlLT5mcF9yYW5nZUF0dG5vOworCQlsZWFmU3RhdGUt PmZwX0xlZnRvdmVyID0KKwkJCUV4ZWNJbml0RXh0cmFUdXBsZVNsb3QobXRzdGF0ZS0+cHMuc3Rh dGUsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0RGVzY3IocmVzdWx0UmVsSW5mby0+cmlfUmVsYXRp b25EZXNjKSwKKwkJCQkJCQkJICAgJlRUU09wc1ZpcnR1YWwpOworCX0KKworCS8qIEVhY2ggcGFy dGl0aW9uIG5lZWRzIGEgc2xvdCBtYXRjaGluZyBpdHMgdHVwbGUgZGVzY3JpcHRvciAqLworCWxl YWZTdGF0ZS0+ZnBfRXhpc3RpbmcgPQorCQl0YWJsZV9zbG90X2NyZWF0ZShyZXN1bHRSZWxJbmZv LT5yaV9SZWxhdGlvbkRlc2MsCisJCQkJCQkgICZtdHN0YXRlLT5wcy5zdGF0ZS0+ZXNfdHVwbGVU YWJsZSk7CisKKwlyZXN1bHRSZWxJbmZvLT5yaV9mb3JQb3J0aW9uT2YgPSBsZWFmU3RhdGU7CisK KwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5k ZXggMTMzNTkxODBkMjUuLjUzYzEzODMxMGRiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtNDc3 LDcgKzQ3Nyw4IEBAIHR5cGVkZWYgc3RydWN0IEZvclBvcnRpb25PZlN0YXRlCiAJTm9kZVRhZwkJ dHlwZTsKIAogCWNoYXIJICAgKmZwX3JhbmdlTmFtZTsJLyogdGhlIGNvbHVtbiBuYW1lZCBpbiBG T1IgUE9SVElPTiBPRiAqLwotCU9pZAkJCWZwX3JhbmdlVHlwZTsJLyogdGhlIHR5cGUgb2YgdGhl IEZPUiBQT1JUSU9OIE9GIGV4cHJlc3Npb24gKi8KKwlPaWQJCQlmcF9yYW5nZVR5cGU7CS8qIHRo ZSBiYXNlIHR5cGUgKG5vdCBkb21haW4pIG9mIHRoZSBGT1IKKwkJCQkJCQkJICogUE9SVElPTiBP RiBleHByZXNzaW9uICovCiAJaW50CQkJZnBfcmFuZ2VBdHRubzsJLyogdGhlIGF0dG5vIG9mIHRo ZSByYW5nZSBjb2x1bW4gKi8KIAlEYXR1bQkJZnBfdGFyZ2V0UmFuZ2U7IC8qIHRoZSByYW5nZS9t dWx0aXJhbmdlIGZyb20gRk9SIFBPUlRJT04gT0YgKi8KIAlUeXBlQ2FjaGVFbnRyeSAqZnBfbGVm dG92ZXJzdHlwY2FjaGU7CS8qIHR5cGUgY2FjaGUgZW50cnkgb2YgdGhlIHJhbmdlICovCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Zvcl9wb3J0aW9uX29mLm91dCBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yX3BvcnRpb25fb2Yub3V0CmluZGV4IDMxZjc3MmM3 MjNkLi40NDA1ZTg4YzljYyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9m b3JfcG9ydGlvbl9vZi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JfcG9y dGlvbl9vZi5vdXQKQEAgLTEzNjUsNiArMTM2NSw5IEBAICQkOwogQ1JFQVRFIFRSSUdHRVIgZnBv X2JlZm9yZV9zdG10CiAgIEJFRk9SRSBJTlNFUlQgT1IgVVBEQVRFIE9SIERFTEVURSBPTiBmb3Jf cG9ydGlvbl9vZl90ZXN0CiAgIEZPUiBFQUNIIFNUQVRFTUVOVCBFWEVDVVRFIFBST0NFRFVSRSBk dW1wX3RyaWdnZXIoZmFsc2UsIGZhbHNlKTsKK0NSRUFURSBUUklHR0VSIGZwb19iZWZvcmVfc3Rt dDEKKyAgQkVGT1JFIFVQREFURSBPRiB2YWxpZF9hdCBPTiBmb3JfcG9ydGlvbl9vZl90ZXN0Cisg IEZPUiBFQUNIIFNUQVRFTUVOVCBFWEVDVVRFIFBST0NFRFVSRSBkdW1wX3RyaWdnZXIoZmFsc2Us IGZhbHNlKTsKIENSRUFURSBUUklHR0VSIGZwb19hZnRlcl9pbnNlcnRfc3RtdAogICBBRlRFUiBJ TlNFUlQgT04gZm9yX3BvcnRpb25fb2ZfdGVzdAogICBGT1IgRUFDSCBTVEFURU1FTlQgRVhFQ1VU RSBQUk9DRURVUkUgZHVtcF90cmlnZ2VyKGZhbHNlLCBmYWxzZSk7CkBAIC0xMzc4LDYgKzEzODEs OSBAQCBDUkVBVEUgVFJJR0dFUiBmcG9fYWZ0ZXJfZGVsZXRlX3N0bXQKIENSRUFURSBUUklHR0VS IGZwb19iZWZvcmVfcm93CiAgIEJFRk9SRSBJTlNFUlQgT1IgVVBEQVRFIE9SIERFTEVURSBPTiBm b3JfcG9ydGlvbl9vZl90ZXN0CiAgIEZPUiBFQUNIIFJPVyBFWEVDVVRFIFBST0NFRFVSRSBkdW1w X3RyaWdnZXIoZmFsc2UsIGZhbHNlKTsKK0NSRUFURSBUUklHR0VSIGZwb19iZWZvcmVfcm93MQor ICBCRUZPUkUgVVBEQVRFIE9GIHZhbGlkX2F0IE9OIGZvcl9wb3J0aW9uX29mX3Rlc3QKKyAgRk9S IEVBQ0ggUk9XIEVYRUNVVEUgUFJPQ0VEVVJFIGR1bXBfdHJpZ2dlcihmYWxzZSwgZmFsc2UpOwog Q1JFQVRFIFRSSUdHRVIgZnBvX2FmdGVyX2luc2VydF9yb3cKICAgQUZURVIgSU5TRVJUIE9OIGZv cl9wb3J0aW9uX29mX3Rlc3QKICAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgUFJPQ0VEVVJFIGR1bXBf dHJpZ2dlcihmYWxzZSwgZmFsc2UpOwpAQCAtMTM5NCw5ICsxNDAwLDE1IEBAIFVQREFURSBmb3Jf cG9ydGlvbl9vZl90ZXN0CiBOT1RJQ0U6ICBmcG9fYmVmb3JlX3N0bXQ6IEJFRk9SRSBVUERBVEUg U1RBVEVNRU5UOgogTk9USUNFOiAgICBvbGQ6IDxOVUxMPgogTk9USUNFOiAgICBuZXc6IDxOVUxM PgorTk9USUNFOiAgZnBvX2JlZm9yZV9zdG10MTogQkVGT1JFIFVQREFURSBTVEFURU1FTlQ6CitO T1RJQ0U6ICAgIG9sZDogPE5VTEw+CitOT1RJQ0U6ICAgIG5ldzogPE5VTEw+CiBOT1RJQ0U6ICBm cG9fYmVmb3JlX3JvdzogQkVGT1JFIFVQREFURSBST1c6CiBOT1RJQ0U6ICAgIG9sZDogWzIwMTkt MDEtMDEsMjAzMC0wMS0wMSkKIE5PVElDRTogICAgbmV3OiBbMjAyMS0wMS0wMSwyMDIyLTAxLTAx KQorTk9USUNFOiAgZnBvX2JlZm9yZV9yb3cxOiBCRUZPUkUgVVBEQVRFIFJPVzoKK05PVElDRTog ICAgb2xkOiBbMjAxOS0wMS0wMSwyMDMwLTAxLTAxKQorTk9USUNFOiAgICBuZXc6IFsyMDIxLTAx LTAxLDIwMjItMDEtMDEpCiBOT1RJQ0U6ICBmcG9fYmVmb3JlX3N0bXQ6IEJFRk9SRSBJTlNFUlQg U1RBVEVNRU5UOgogTk9USUNFOiAgICBvbGQ6IDxOVUxMPgogTk9USUNFOiAgICBuZXc6IDxOVUxM PgpAQCAtMjA5Nyw0ICsyMTA5LDExNSBAQCBTRUxFQ1QgKiBGUk9NIHRlbXBvcmFsX3BhcnRpdGlv bmVkXzUgT1JERVIgQlkgaWQsIHZhbGlkX2F0OwogKDQgcm93cykKIAogRFJPUCBUQUJMRSB0ZW1w b3JhbF9wYXJ0aXRpb25lZDsKKy0tIFVQREFURSBGT1IgUE9SVElPTiBPRiB3aXRoIGdlbmVyYXRl ZCBzdG9yZWQgY29sdW1ucworLS0gVGhlIGdlbmVyYXRlZCBjb2x1bW4gZGVwZW5kcyBvbiB0aGUg cmFuZ2UgY29sdW1uLCBzbyBpdCBtdXN0IGJlCistLSByZWNvbXB1dGVkIHdoZW4gRk9SIFBPUlRJ T04gT0YgbmFycm93cyB0aGUgcmFuZ2UuCitDUkVBVEUgVEFCTEUgZnBvX2dlbmVyYXRlZCAoCisg IGlkIGludCwKKyAgdmFsaWRfYXQgaW50NHJhbmdlLAorICByYW5nZV9sZW4gaW50IEdFTkVSQVRF RCBBTFdBWVMgQVMgKHVwcGVyKHZhbGlkX2F0KSAtIGxvd2VyKHZhbGlkX2F0KSkgU1RPUkVELAor ICByYW5nZV9sZW52IGludCBHRU5FUkFURUQgQUxXQVlTIEFTICh1cHBlcih2YWxpZF9hdCkgLSBs b3dlcih2YWxpZF9hdCkpCispOworSU5TRVJUIElOVE8gZnBvX2dlbmVyYXRlZCAoaWQsIHZhbGlk X2F0KSBWQUxVRVMgKDEsICdbMTAsMTAwKScpOworU0VMRUNUICogRlJPTSBmcG9fZ2VuZXJhdGVk IE9SREVSIEJZIHZhbGlkX2F0OworIGlkIHwgdmFsaWRfYXQgfCByYW5nZV9sZW4gfCByYW5nZV9s ZW52IAorLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorICAxIHwgWzEw LDEwMCkgfCAgICAgICAgOTAgfCAgICAgICAgIDkwCisoMSByb3cpCisKK0NSRUFURSBUUklHR0VS IGZwb19iZWZvcmVfcm93MQorICBCRUZPUkUgVVBEQVRFIE9GIHZhbGlkX2F0IE9OIGZwb19nZW5l cmF0ZWQKKyAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgUFJPQ0VEVVJFIGR1bXBfdHJpZ2dlcihmYWxz ZSwgZmFsc2UpOworQ1JFQVRFIFRSSUdHRVIgZnBvX2JlZm9yZV9yb3cyCisgIEJFRk9SRSBVUERB VEUgT0YgdmFsaWRfYXQgT04gZnBvX2dlbmVyYXRlZAorICBGT1IgRUFDSCBTVEFURU1FTlQgRVhF Q1VURSBQUk9DRURVUkUgZHVtcF90cmlnZ2VyKGZhbHNlLCBmYWxzZSk7CistLSBBZnRlciB0aGUg Rk9SIFBPUlRJT04gT0YgKEZQTykgdXBkYXRlLCBhbGwgdGhyZWUgcmVzdWx0aW5nIHJvd3MKKy0t IChsZWZ0b3Zlci1iZWZvcmUsIHVwZGF0ZWQsIGFuZCBsZWZ0b3Zlci1hZnRlcikgbXVzdCBjb250 YWluIHRoZSBjb3JyZWN0CistLSB2YWx1ZXMgZm9yIHJhbmdlX2xlbiBhbmQgcmFuZ2VfbGVudi4K Ky0tIFRyaWdnZXJzIGZwb19iZWZvcmVfcm93MSBhbmQgZnBvX2JlZm9yZV9yb3cyIHNob3VsZCBh bHNvIGJlIGZpcmVkLgorVVBEQVRFIGZwb19nZW5lcmF0ZWQKKyAgRk9SIFBPUlRJT04gT0YgdmFs aWRfYXQgRlJPTSAzMCBUTyA3MAorICBTRVQgaWQgPSAyOworTk9USUNFOiAgZnBvX2JlZm9yZV9y b3cyOiBCRUZPUkUgVVBEQVRFIFNUQVRFTUVOVDoKK05PVElDRTogICAgb2xkOiA8TlVMTD4KK05P VElDRTogICAgbmV3OiA8TlVMTD4KK05PVElDRTogIGZwb19iZWZvcmVfcm93MTogQkVGT1JFIFVQ REFURSBST1c6CitOT1RJQ0U6ICAgIG9sZDogWzEwLDEwMCkKK05PVElDRTogICAgbmV3OiBbMzAs NzApCitTRUxFQ1QgKiBGUk9NIGZwb19nZW5lcmF0ZWQgT1JERVIgQlkgdmFsaWRfYXQ7CisgaWQg fCB2YWxpZF9hdCB8IHJhbmdlX2xlbiB8IHJhbmdlX2xlbnYgCistLS0tKy0tLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgIDEgfCBbMTAsMzApICB8ICAgICAgICAyMCB8ICAgICAg ICAgMjAKKyAgMiB8IFszMCw3MCkgIHwgICAgICAgIDQwIHwgICAgICAgICA0MAorICAxIHwgWzcw LDEwMCkgfCAgICAgICAgMzAgfCAgICAgICAgIDMwCisoMyByb3dzKQorCistLSBBbHNvIHRlc3Qg d2l0aCBhIGdlbmVyYXRlZCBjb2x1bW4gdGhhdCByZWZlcmVuY2VzIGJvdGggYSBTRVQgY29sdW1u CistLSBhbmQgdGhlIHJhbmdlIGNvbHVtbi4KK0RST1AgVEFCTEUgZnBvX2dlbmVyYXRlZDsKK0NS RUFURSBUQUJMRSBmcG9fZ2VuZXJhdGVkICgKKyAgaWQgaW50LAorICB2YWxpZF9hdCBpbnQ0cmFu Z2UsCisgIGlkX3BsdXNfbGVuIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChpZCArIHVwcGVyKHZh bGlkX2F0KSAtIGxvd2VyKHZhbGlkX2F0KSkgU1RPUkVELAorICBpZF9wbHVzX2xlbnYgaW50IEdF TkVSQVRFRCBBTFdBWVMgQVMgKGlkICsgdXBwZXIodmFsaWRfYXQpIC0gbG93ZXIodmFsaWRfYXQp KQorKTsKK0lOU0VSVCBJTlRPIGZwb19nZW5lcmF0ZWQgKGlkLCB2YWxpZF9hdCkgVkFMVUVTICgx LCAnWzEwLDEwMCknKTsKK1NFTEVDVCAqIEZST00gZnBvX2dlbmVyYXRlZCBPUkRFUiBCWSB2YWxp ZF9hdDsKKyBpZCB8IHZhbGlkX2F0IHwgaWRfcGx1c19sZW4gfCBpZF9wbHVzX2xlbnYgCistLS0t Ky0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLQorICAxIHwgWzEwLDEwMCkg fCAgICAgICAgICA5MSB8ICAgICAgICAgICA5MQorKDEgcm93KQorCitVUERBVEUgZnBvX2dlbmVy YXRlZAorICBGT1IgUE9SVElPTiBPRiB2YWxpZF9hdCBGUk9NIDMwIFRPIDcwCisgIFNFVCBpZCA9 IDI7CitTRUxFQ1QgKiBGUk9NIGZwb19nZW5lcmF0ZWQgT1JERVIgQlkgdmFsaWRfYXQ7CisgaWQg fCB2YWxpZF9hdCB8IGlkX3BsdXNfbGVuIHwgaWRfcGx1c19sZW52IAorLS0tLSstLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0KKyAgMSB8IFsxMCwzMCkgIHwgICAgICAgICAg MjEgfCAgICAgICAgICAgMjEKKyAgMiB8IFszMCw3MCkgIHwgICAgICAgICAgNDIgfCAgICAgICAg ICAgNDIKKyAgMSB8IFs3MCwxMDApIHwgICAgICAgICAgMzEgfCAgICAgICAgICAgMzEKKygzIHJv d3MpCisKK0RST1AgVEFCTEUgZnBvX2dlbmVyYXRlZDsKKy0tIFVQREFURSBGT1IgUE9SVElPTiBP RiB3aXRoIHRhYmxlIGluaGVyaXRhbmNlCistLSBMZWZ0b3ZlciByb3dzIG11c3Qgc3RheSBpbiB0 aGUgY2hpbGQgdGFibGUsIHByZXNlcnZpbmcgY2hpbGQtc3BlY2lmaWMgY29sdW1ucy4KK0NSRUFU RSBUQUJMRSBmcG9faW5oX3BhcmVudCAoCisgIGlkIGludDRyYW5nZSwKKyAgdmFsaWRfYXQgZGF0 ZXJhbmdlLAorICBuYW1lIHRleHQKKyk7CitDUkVBVEUgVEFCTEUgZnBvX2luaF9jaGlsZCAoCisg IGRlc2NyaXB0aW9uIHRleHQKKykgSU5IRVJJVFMgKGZwb19pbmhfcGFyZW50KTsKK0lOU0VSVCBJ TlRPIGZwb19pbmhfY2hpbGQgKGlkLCB2YWxpZF9hdCwgbmFtZSwgZGVzY3JpcHRpb24pIFZBTFVF UworICAoJ1sxLDIpJywgJ1syMDE4LTAxLTAxLDIwMTktMDEtMDEpJywgJ29uZScsICdpbml0aWFs Jyk7CistLSBVcGRhdGUgdGFyZ2V0cyB0aGUgcGFyZW50OyB0aGUgbWF0Y2hpbmcgcm93IGxpdmVz IGluIHRoZSBjaGlsZC4KK1VQREFURSBmcG9faW5oX3BhcmVudCBGT1IgUE9SVElPTiBPRiB2YWxp ZF9hdCBGUk9NICcyMDE4LTA0LTAxJyBUTyAnMjAxOC0xMC0wMScKKyAgU0VUIG5hbWUgPSAnb25l XjEnOworLS0gQWxsIHRocmVlIHJvd3Mgc2hvdWxkIGJlIGluIHRoZSBjaGlsZCwgd2l0aCBkZXNj cmlwdGlvbiBwcmVzZXJ2ZWQuCitTRUxFQ1QgdGFibGVvaWQ6OnJlZ2NsYXNzLCAqIEZST00gZnBv X2luaF9wYXJlbnQgT1JERVIgQlkgdmFsaWRfYXQ7CisgICB0YWJsZW9pZCAgICB8ICBpZCAgIHwg ICAgICAgIHZhbGlkX2F0ICAgICAgICAgfCBuYW1lICAKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLQorIGZwb19pbmhfY2hpbGQgfCBbMSwy KSB8IFsyMDE4LTAxLTAxLDIwMTgtMDQtMDEpIHwgb25lCisgZnBvX2luaF9jaGlsZCB8IFsxLDIp IHwgWzIwMTgtMDQtMDEsMjAxOC0xMC0wMSkgfCBvbmVeMQorIGZwb19pbmhfY2hpbGQgfCBbMSwy KSB8IFsyMDE4LTEwLTAxLDIwMTktMDEtMDEpIHwgb25lCisoMyByb3dzKQorCitTRUxFQ1QgKiBG Uk9NIGZwb19pbmhfY2hpbGQgT1JERVIgQlkgdmFsaWRfYXQ7CisgIGlkICAgfCAgICAgICAgdmFs aWRfYXQgICAgICAgICB8IG5hbWUgIHwgZGVzY3JpcHRpb24gCistLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgWzEsMikgfCBbMjAxOC0wMS0w MSwyMDE4LTA0LTAxKSB8IG9uZSAgIHwgaW5pdGlhbAorIFsxLDIpIHwgWzIwMTgtMDQtMDEsMjAx OC0xMC0wMSkgfCBvbmVeMSB8IGluaXRpYWwKKyBbMSwyKSB8IFsyMDE4LTEwLTAxLDIwMTktMDEt MDEpIHwgb25lICAgfCBpbml0aWFsCisoMyByb3dzKQorCistLSBObyByb3dzIHNob3VsZCBoYXZl IGxlYWtlZCBpbnRvIHRoZSBwYXJlbnQuCitTRUxFQ1QgKiBGUk9NIE9OTFkgZnBvX2luaF9wYXJl bnQgT1JERVIgQlkgdmFsaWRfYXQ7CisgaWQgfCB2YWxpZF9hdCB8IG5hbWUgCistLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisoMCByb3dzKQorCitEUk9QIFRBQkxFIGZwb19pbmhfcGFyZW50IENBU0NB REU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGZwb19pbmhfY2hpbGQKIFJFU0VU IGRhdGVzdHlsZTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zvcl9wb3J0aW9u X29mLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zvcl9wb3J0aW9uX29mLnNxbAppbmRleCBk NDA2MmFjZjFkMS4uOTVlZmE2NDAzODkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2Zvcl9wb3J0aW9uX29mLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JfcG9ydGlv bl9vZi5zcWwKQEAgLTkxMyw2ICs5MTMsMTAgQEAgQ1JFQVRFIFRSSUdHRVIgZnBvX2JlZm9yZV9z dG10CiAgIEJFRk9SRSBJTlNFUlQgT1IgVVBEQVRFIE9SIERFTEVURSBPTiBmb3JfcG9ydGlvbl9v Zl90ZXN0CiAgIEZPUiBFQUNIIFNUQVRFTUVOVCBFWEVDVVRFIFBST0NFRFVSRSBkdW1wX3RyaWdn ZXIoZmFsc2UsIGZhbHNlKTsKIAorQ1JFQVRFIFRSSUdHRVIgZnBvX2JlZm9yZV9zdG10MQorICBC RUZPUkUgVVBEQVRFIE9GIHZhbGlkX2F0IE9OIGZvcl9wb3J0aW9uX29mX3Rlc3QKKyAgRk9SIEVB Q0ggU1RBVEVNRU5UIEVYRUNVVEUgUFJPQ0VEVVJFIGR1bXBfdHJpZ2dlcihmYWxzZSwgZmFsc2Up OworCiBDUkVBVEUgVFJJR0dFUiBmcG9fYWZ0ZXJfaW5zZXJ0X3N0bXQKICAgQUZURVIgSU5TRVJU IE9OIGZvcl9wb3J0aW9uX29mX3Rlc3QKICAgRk9SIEVBQ0ggU1RBVEVNRU5UIEVYRUNVVEUgUFJP Q0VEVVJFIGR1bXBfdHJpZ2dlcihmYWxzZSwgZmFsc2UpOwpAQCAtOTMxLDYgKzkzNSwxMCBAQCBD UkVBVEUgVFJJR0dFUiBmcG9fYmVmb3JlX3JvdwogICBCRUZPUkUgSU5TRVJUIE9SIFVQREFURSBP UiBERUxFVEUgT04gZm9yX3BvcnRpb25fb2ZfdGVzdAogICBGT1IgRUFDSCBST1cgRVhFQ1VURSBQ Uk9DRURVUkUgZHVtcF90cmlnZ2VyKGZhbHNlLCBmYWxzZSk7CiAKK0NSRUFURSBUUklHR0VSIGZw b19iZWZvcmVfcm93MQorICBCRUZPUkUgVVBEQVRFIE9GIHZhbGlkX2F0IE9OIGZvcl9wb3J0aW9u X29mX3Rlc3QKKyAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgUFJPQ0VEVVJFIGR1bXBfdHJpZ2dlcihm YWxzZSwgZmFsc2UpOworCiBDUkVBVEUgVFJJR0dFUiBmcG9fYWZ0ZXJfaW5zZXJ0X3JvdwogICBB RlRFUiBJTlNFUlQgT04gZm9yX3BvcnRpb25fb2ZfdGVzdAogICBGT1IgRUFDSCBST1cgRVhFQ1VU RSBQUk9DRURVUkUgZHVtcF90cmlnZ2VyKGZhbHNlLCBmYWxzZSk7CkBAIC0xMzY1LDQgKzEzNzMs ODAgQEAgU0VMRUNUICogRlJPTSB0ZW1wb3JhbF9wYXJ0aXRpb25lZF81IE9SREVSIEJZIGlkLCB2 YWxpZF9hdDsKIAogRFJPUCBUQUJMRSB0ZW1wb3JhbF9wYXJ0aXRpb25lZDsKIAorLS0gVVBEQVRF IEZPUiBQT1JUSU9OIE9GIHdpdGggZ2VuZXJhdGVkIHN0b3JlZCBjb2x1bW5zCistLSBUaGUgZ2Vu ZXJhdGVkIGNvbHVtbiBkZXBlbmRzIG9uIHRoZSByYW5nZSBjb2x1bW4sIHNvIGl0IG11c3QgYmUK Ky0tIHJlY29tcHV0ZWQgd2hlbiBGT1IgUE9SVElPTiBPRiBuYXJyb3dzIHRoZSByYW5nZS4KK0NS RUFURSBUQUJMRSBmcG9fZ2VuZXJhdGVkICgKKyAgaWQgaW50LAorICB2YWxpZF9hdCBpbnQ0cmFu Z2UsCisgIHJhbmdlX2xlbiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAodXBwZXIodmFsaWRfYXQp IC0gbG93ZXIodmFsaWRfYXQpKSBTVE9SRUQsCisgIHJhbmdlX2xlbnYgaW50IEdFTkVSQVRFRCBB TFdBWVMgQVMgKHVwcGVyKHZhbGlkX2F0KSAtIGxvd2VyKHZhbGlkX2F0KSkKKyk7CitJTlNFUlQg SU5UTyBmcG9fZ2VuZXJhdGVkIChpZCwgdmFsaWRfYXQpIFZBTFVFUyAoMSwgJ1sxMCwxMDApJyk7 CisKK1NFTEVDVCAqIEZST00gZnBvX2dlbmVyYXRlZCBPUkRFUiBCWSB2YWxpZF9hdDsKKworQ1JF QVRFIFRSSUdHRVIgZnBvX2JlZm9yZV9yb3cxCisgIEJFRk9SRSBVUERBVEUgT0YgdmFsaWRfYXQg T04gZnBvX2dlbmVyYXRlZAorICBGT1IgRUFDSCBST1cgRVhFQ1VURSBQUk9DRURVUkUgZHVtcF90 cmlnZ2VyKGZhbHNlLCBmYWxzZSk7CisKK0NSRUFURSBUUklHR0VSIGZwb19iZWZvcmVfcm93Mgor ICBCRUZPUkUgVVBEQVRFIE9GIHZhbGlkX2F0IE9OIGZwb19nZW5lcmF0ZWQKKyAgRk9SIEVBQ0gg U1RBVEVNRU5UIEVYRUNVVEUgUFJPQ0VEVVJFIGR1bXBfdHJpZ2dlcihmYWxzZSwgZmFsc2UpOwor CistLSBBZnRlciB0aGUgRk9SIFBPUlRJT04gT0YgKEZQTykgdXBkYXRlLCBhbGwgdGhyZWUgcmVz dWx0aW5nIHJvd3MKKy0tIChsZWZ0b3Zlci1iZWZvcmUsIHVwZGF0ZWQsIGFuZCBsZWZ0b3Zlci1h ZnRlcikgbXVzdCBjb250YWluIHRoZSBjb3JyZWN0CistLSB2YWx1ZXMgZm9yIHJhbmdlX2xlbiBh bmQgcmFuZ2VfbGVudi4KKy0tIFRyaWdnZXJzIGZwb19iZWZvcmVfcm93MSBhbmQgZnBvX2JlZm9y ZV9yb3cyIHNob3VsZCBhbHNvIGJlIGZpcmVkLgorVVBEQVRFIGZwb19nZW5lcmF0ZWQKKyAgRk9S IFBPUlRJT04gT0YgdmFsaWRfYXQgRlJPTSAzMCBUTyA3MAorICBTRVQgaWQgPSAyOworCitTRUxF Q1QgKiBGUk9NIGZwb19nZW5lcmF0ZWQgT1JERVIgQlkgdmFsaWRfYXQ7CisKKy0tIEFsc28gdGVz dCB3aXRoIGEgZ2VuZXJhdGVkIGNvbHVtbiB0aGF0IHJlZmVyZW5jZXMgYm90aCBhIFNFVCBjb2x1 bW4KKy0tIGFuZCB0aGUgcmFuZ2UgY29sdW1uLgorRFJPUCBUQUJMRSBmcG9fZ2VuZXJhdGVkOwor Q1JFQVRFIFRBQkxFIGZwb19nZW5lcmF0ZWQgKAorICBpZCBpbnQsCisgIHZhbGlkX2F0IGludDRy YW5nZSwKKyAgaWRfcGx1c19sZW4gaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGlkICsgdXBwZXIo dmFsaWRfYXQpIC0gbG93ZXIodmFsaWRfYXQpKSBTVE9SRUQsCisgIGlkX3BsdXNfbGVudiBpbnQg R0VORVJBVEVEIEFMV0FZUyBBUyAoaWQgKyB1cHBlcih2YWxpZF9hdCkgLSBsb3dlcih2YWxpZF9h dCkpCispOworCitJTlNFUlQgSU5UTyBmcG9fZ2VuZXJhdGVkIChpZCwgdmFsaWRfYXQpIFZBTFVF UyAoMSwgJ1sxMCwxMDApJyk7CitTRUxFQ1QgKiBGUk9NIGZwb19nZW5lcmF0ZWQgT1JERVIgQlkg dmFsaWRfYXQ7CisKK1VQREFURSBmcG9fZ2VuZXJhdGVkCisgIEZPUiBQT1JUSU9OIE9GIHZhbGlk X2F0IEZST00gMzAgVE8gNzAKKyAgU0VUIGlkID0gMjsKK1NFTEVDVCAqIEZST00gZnBvX2dlbmVy YXRlZCBPUkRFUiBCWSB2YWxpZF9hdDsKK0RST1AgVEFCTEUgZnBvX2dlbmVyYXRlZDsKKworCist LSBVUERBVEUgRk9SIFBPUlRJT04gT0Ygd2l0aCB0YWJsZSBpbmhlcml0YW5jZQorLS0gTGVmdG92 ZXIgcm93cyBtdXN0IHN0YXkgaW4gdGhlIGNoaWxkIHRhYmxlLCBwcmVzZXJ2aW5nIGNoaWxkLXNw ZWNpZmljIGNvbHVtbnMuCitDUkVBVEUgVEFCTEUgZnBvX2luaF9wYXJlbnQgKAorICBpZCBpbnQ0 cmFuZ2UsCisgIHZhbGlkX2F0IGRhdGVyYW5nZSwKKyAgbmFtZSB0ZXh0CispOworQ1JFQVRFIFRB QkxFIGZwb19pbmhfY2hpbGQgKAorICBkZXNjcmlwdGlvbiB0ZXh0CispIElOSEVSSVRTIChmcG9f aW5oX3BhcmVudCk7CitJTlNFUlQgSU5UTyBmcG9faW5oX2NoaWxkIChpZCwgdmFsaWRfYXQsIG5h bWUsIGRlc2NyaXB0aW9uKSBWQUxVRVMKKyAgKCdbMSwyKScsICdbMjAxOC0wMS0wMSwyMDE5LTAx LTAxKScsICdvbmUnLCAnaW5pdGlhbCcpOworCistLSBVcGRhdGUgdGFyZ2V0cyB0aGUgcGFyZW50 OyB0aGUgbWF0Y2hpbmcgcm93IGxpdmVzIGluIHRoZSBjaGlsZC4KK1VQREFURSBmcG9faW5oX3Bh cmVudCBGT1IgUE9SVElPTiBPRiB2YWxpZF9hdCBGUk9NICcyMDE4LTA0LTAxJyBUTyAnMjAxOC0x MC0wMScKKyAgU0VUIG5hbWUgPSAnb25lXjEnOworCistLSBBbGwgdGhyZWUgcm93cyBzaG91bGQg YmUgaW4gdGhlIGNoaWxkLCB3aXRoIGRlc2NyaXB0aW9uIHByZXNlcnZlZC4KK1NFTEVDVCB0YWJs ZW9pZDo6cmVnY2xhc3MsICogRlJPTSBmcG9faW5oX3BhcmVudCBPUkRFUiBCWSB2YWxpZF9hdDsK K1NFTEVDVCAqIEZST00gZnBvX2luaF9jaGlsZCBPUkRFUiBCWSB2YWxpZF9hdDsKKy0tIE5vIHJv d3Mgc2hvdWxkIGhhdmUgbGVha2VkIGludG8gdGhlIHBhcmVudC4KK1NFTEVDVCAqIEZST00gT05M WSBmcG9faW5oX3BhcmVudCBPUkRFUiBCWSB2YWxpZF9hdDsKKworRFJPUCBUQUJMRSBmcG9faW5o X3BhcmVudCBDQVNDQURFOworCiBSRVNFVCBkYXRlc3R5bGU7Ci0tIAoyLjQ1LjAKCg== --0000000000002ffc3d064f85fe87--