Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eMKJu-0005Br-EY for pgsql-hackers@arkaria.postgresql.org; Tue, 05 Dec 2017 21:00:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eMKJu-0005Rt-1C for pgsql-hackers@arkaria.postgresql.org; Tue, 05 Dec 2017 21:00:02 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1eMKJt-0005RY-MH for pgsql-hackers@lists.postgresql.org; Tue, 05 Dec 2017 21:00:01 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by magus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1eMKJq-0002IT-HH for pgsql-hackers@postgresql.org; Tue, 05 Dec 2017 21:00:01 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 0589721C1FD0 for ; Tue, 5 Dec 2017 23:59:57 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru Received: from mail-oi0-f46.google.com (mail-oi0-f46.google.com [209.85.218.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (not verified)) by mail.postgrespro.ru (Postfix) with ESMTPSA id 4011A21C1EA6 for ; Tue, 5 Dec 2017 23:59:56 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1512507596; bh=jhigAOP5+l7W2qvvRGtXkWO3l+CpAJ1+lpvlznRIxJA=; h=In-Reply-To:References:From:Date:Subject:To:Cc; b=iyvVgf8UfGYXg8yNWqN45qrF4xUOjk0V3Gea9iEUL4Udzzjz9QVYhpPESeYgex+nH LXgmKS7n5UJmtEo88fMK0YU3GcHiyyDQQ308lX6d96hk+od5kgLQygVRINlk4ZCy/M V+9OApTbVAfu2GQuarYqB6b8xJ/+OeaRbZc1zq9U= Received: by mail-oi0-f46.google.com with SMTP id w131so1167241oiw.0 for ; Tue, 05 Dec 2017 12:59:56 -0800 (PST) X-Gm-Message-State: AKGB3mImSuBIhOj79D1K4hSVAe3Zw8KWqzWZsv7+yK0guZjxNNC8oBFd DJtEyzaBUA8QZB0QhkDxAAva0dTcj8ZwJkndT4M= X-Google-Smtp-Source: AGs4zMaZfiPQ9n1v43TFpKKpbpc5+si5ng9a9tIQRrXDpoH0X7VCyJc88yGhqJ3G1clmoq25oLDUAFNQG7GddiHsfnE= X-Received: by 10.202.96.130 with SMTP id u124mr10842524oib.288.1512507594569; Tue, 05 Dec 2017 12:59:54 -0800 (PST) MIME-Version: 1.0 Received: by 10.74.142.65 with HTTP; Tue, 5 Dec 2017 12:59:33 -0800 (PST) In-Reply-To: <20171205101417.1138.18005.pgcf@coridan.postgresql.org> References: <54907069.1030506@sigaev.ru> <20171205101417.1138.18005.pgcf@coridan.postgresql.org> From: Alexander Korotkov Date: Tue, 5 Dec 2017 23:59:33 +0300 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: compress method for spgist - 2 To: Darafei Praliaskouski Cc: pgsql-hackers , Heikki Linnakangas , Fedor Sigaev , Nikita Glukhov Content-Type: multipart/mixed; boundary="001a113d4ffee52f60055f9e1dd8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --001a113d4ffee52f60055f9e1dd8 Content-Type: multipart/alternative; boundary="001a113d4ffee52f56055f9e1dd6" --001a113d4ffee52f56055f9e1dd6 Content-Type: text/plain; charset="UTF-8" On Tue, Dec 5, 2017 at 1:14 PM, Darafei Praliaskouski wrote: > The following review has been posted through the commitfest application: > make installcheck-world: not tested > Implements feature: not tested > Spec compliant: not tested > Documentation: tested, passed > > I've read the updated patch and see my concerns addressed. > > I'm looking forward to SP-GiST compress method support, as it will allow > usage of SP-GiST index infrastructure for PostGIS. > > The new status of this patch is: Ready for Committer > I went trough this patch. I found documentation changes to be not sufficient. And I've made some improvements. In particular, I didn't understand why is reconstructedValue claimed to be of spgConfigOut.leafType while it should be of spgConfigIn.attType both from general logic and code. I've fixed that. Nikita, correct me if I'm wrong. Also, I wonder should we check for existence of compress method when attType and leafType are not the same in spgvalidate() function? We don't do this for now. 0002-spgist-polygon-8.patch is OK for me so soon. ------ Alexander Korotkov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --001a113d4ffee52f56055f9e1dd6 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On T= ue, Dec 5, 2017 at 1:14 PM, Darafei Praliaskouski <me@komzpa.net> wrote:
The following review has been posted through the commitfest app= lication:
make installcheck-world:=C2=A0 not tested
Implements feature:=C2=A0 =C2=A0 =C2=A0 =C2=A0not tested
Spec compliant:=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0not tested
Documentation:=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 tested, passed

I've read the updated patch and see my concerns addressed.

I'm looking forward to SP-GiST compress method support, as it will allo= w usage of SP-GiST index infrastructure for PostGIS.

The new status of this patch is: Ready for Committer

I went trough this = patch.=C2=A0 I found documentation changes to be not sufficient.=C2=A0 And = I've made some improvements.

=
In particular, I didn't understand why is re= constructedValue claimed to be of spgConfigOut.leafType while it should be = of spgConfigIn.attType both from general logic and code.=C2=A0 I've fix= ed that.=C2=A0 Nikita, correct me if I'm wrong.

Also, I wonder should we chec= k for existence of compress method when attType and leafType are not the sa= me in=C2=A0spgvalidate() function?=C2=A0 We don't do this for now.

0002-spgis= t-polygon-8.patch is OK for me so soon.

------
Alexander Korotkov=
Postgres Professional:=C2=A0http://www.postgrespro.com
The Russian Postgres Compa= ny
--001a113d4ffee52f56055f9e1dd6-- --001a113d4ffee52f60055f9e1dd8 Content-Type: application/octet-stream; name="0001-spgist-compress-method-9.patch" Content-Disposition: attachment; filename="0001-spgist-compress-method-9.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jau3tyz10 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9zcGdpc3Quc2dtbCBiL2RvYy9zcmMvc2dtbC9zcGdp c3Quc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzljOGVkLi5iYWU1NzE0CioqKiBh L2RvYy9zcmMvc2dtbC9zcGdpc3Quc2dtbAotLS0gYi9kb2Mvc3JjL3NnbWwvc3BnaXN0LnNnbWwK KioqKioqKioqKioqKioqCioqKiAyNDAsMjU5ICoqKioKICAKICAgPHBhcmE+CiAgICBUaGVyZSBh cmUgZml2ZSB1c2VyLWRlZmluZWQgbWV0aG9kcyB0aGF0IGFuIGluZGV4IG9wZXJhdG9yIGNsYXNz IGZvcgohICAgPGFjcm9ueW0+U1AtR2lTVDwvYWNyb255bT4gbXVzdCBwcm92aWRlLiAgQWxsIGZp dmUgZm9sbG93IHRoZSBjb252ZW50aW9uCiEgICBvZiBhY2NlcHRpbmcgdHdvIDx0eXBlPmludGVy bmFsPC90eXBlPiBhcmd1bWVudHMsIHRoZSBmaXJzdCBvZiB3aGljaCBpcyBhCiEgICBwb2ludGVy IHRvIGEgQyBzdHJ1Y3QgY29udGFpbmluZyBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBzdXBwb3J0IG1l dGhvZCwKISAgIHdoaWxlIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIGEgQyBz dHJ1Y3Qgd2hlcmUgb3V0cHV0IHZhbHVlcwohICAgbXVzdCBiZSBwbGFjZWQuICBGb3VyIG9mIHRo ZSBtZXRob2RzIGp1c3QgcmV0dXJuIDx0eXBlPnZvaWQ8L3R5cGU+LCBzaW5jZQohICAgYWxsIHRo ZWlyIHJlc3VsdHMgYXBwZWFyIGluIHRoZSBvdXRwdXQgc3RydWN0OyBidXQKICAgIDxmdW5jdGlv bj5sZWFmX2NvbnNpc3RlbnQ8L2Z1bmN0aW9uPiBhZGRpdGlvbmFsbHkgcmV0dXJucyBhIDx0eXBl PmJvb2xlYW48L3R5cGU+IHJlc3VsdC4KICAgIFRoZSBtZXRob2RzIG11c3Qgbm90IG1vZGlmeSBh bnkgZmllbGRzIG9mIHRoZWlyIGlucHV0IHN0cnVjdHMuICBJbiBhbGwKICAgIGNhc2VzLCB0aGUg b3V0cHV0IHN0cnVjdCBpcyBpbml0aWFsaXplZCB0byB6ZXJvZXMgYmVmb3JlIGNhbGxpbmcgdGhl CiEgICB1c2VyLWRlZmluZWQgbWV0aG9kLgogICA8L3BhcmE+CiAgCiAgIDxwYXJhPgohICAgVGhl IGZpdmUgdXNlci1kZWZpbmVkIG1ldGhvZHMgYXJlOgogICA8L3BhcmE+CiAgCiAgIDx2YXJpYWJs ZWxpc3Q+Ci0tLSAyNDAsMjYxIC0tLS0KICAKICAgPHBhcmE+CiAgICBUaGVyZSBhcmUgZml2ZSB1 c2VyLWRlZmluZWQgbWV0aG9kcyB0aGF0IGFuIGluZGV4IG9wZXJhdG9yIGNsYXNzIGZvcgohICAg PGFjcm9ueW0+U1AtR2lTVDwvYWNyb255bT4gbXVzdCBwcm92aWRlLCBhbmQgb25lIGlzIG9wdGlv bmFsLiAgQWxsIGZpdmUKISAgIG1hbmRhdG9yeSBtZXRob2RzIGZvbGxvdyB0aGUgY29udmVudGlv biBvZiBhY2NlcHRpbmcgdHdvIDx0eXBlPmludGVybmFsPC90eXBlPgohICAgYXJndW1lbnRzLCB0 aGUgZmlyc3Qgb2Ygd2hpY2ggaXMgYSBwb2ludGVyIHRvIGEgQyBzdHJ1Y3QgY29udGFpbmluZyBp bnB1dAohICAgdmFsdWVzIGZvciB0aGUgc3VwcG9ydCBtZXRob2QsIHdoaWxlIHRoZSBzZWNvbmQg YXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIGEKISAgIEMgc3RydWN0IHdoZXJlIG91dHB1dCB2YWx1 ZXMgbXVzdCBiZSBwbGFjZWQuICBGb3VyIG9mIHRoZSBtYW5kYXRvcnkgbWV0aG9kcyBqdXN0CiEg ICByZXR1cm4gPHR5cGU+dm9pZDwvdHlwZT4sIHNpbmNlIGFsbCB0aGVpciByZXN1bHRzIGFwcGVh ciBpbiB0aGUgb3V0cHV0IHN0cnVjdDsgYnV0CiAgICA8ZnVuY3Rpb24+bGVhZl9jb25zaXN0ZW50 PC9mdW5jdGlvbj4gYWRkaXRpb25hbGx5IHJldHVybnMgYSA8dHlwZT5ib29sZWFuPC90eXBlPiBy ZXN1bHQuCiAgICBUaGUgbWV0aG9kcyBtdXN0IG5vdCBtb2RpZnkgYW55IGZpZWxkcyBvZiB0aGVp ciBpbnB1dCBzdHJ1Y3RzLiAgSW4gYWxsCiAgICBjYXNlcywgdGhlIG91dHB1dCBzdHJ1Y3QgaXMg aW5pdGlhbGl6ZWQgdG8gemVyb2VzIGJlZm9yZSBjYWxsaW5nIHRoZQohICAgdXNlci1kZWZpbmVk IG1ldGhvZC4gIE9wdGlvbmFsIHNpeHRoIG1ldGhvZCA8ZnVuY3Rpb24+Y29tcHJlc3M8L2Z1bmN0 aW9uPgohICAgYWNjZXB0cyBkYXR1bSB0byBiZSBpbmRleGVkIGFzIHRoZSBvbmx5IGFyZ3VtZW50 IGFuZCByZXR1cm5zIHZhbHVlIHN1aXRhYmxlCiEgICBmb3IgcGh5c2ljYWwgc3RvcmFnZSBpbiBs ZWFmIHR1cGxlLgogICA8L3BhcmE+CiAgCiAgIDxwYXJhPgohICAgVGhlIGZpdmUgbWFuZGF0b3J5 IHVzZXItZGVmaW5lZCBtZXRob2RzIGFyZToKICAgPC9wYXJhPgogIAogICA8dmFyaWFibGVsaXN0 PgoqKioqKioqKioqKioqKiogdHlwZWRlZiBzdHJ1Y3Qgc3BnQ29uZmlnT3V0CioqKiAyODMsMjg4 ICoqKioKLS0tIDI4NSwyOTEgLS0tLQogIHsKICAgICAgT2lkICAgICAgICAgcHJlZml4VHlwZTsg ICAgIC8qIERhdGEgdHlwZSBvZiBpbm5lci10dXBsZSBwcmVmaXhlcyAqLwogICAgICBPaWQgICAg ICAgICBsYWJlbFR5cGU7ICAgICAgLyogRGF0YSB0eXBlIG9mIGlubmVyLXR1cGxlIG5vZGUgbGFi ZWxzICovCisgICAgIE9pZCAgICAgICAgIGxlYWZUeXBlOyAgICAgICAvKiBEYXRhIHR5cGUgb2Yg bGVhZi10dXBsZSB2YWx1ZXMgKi8KICAgICAgYm9vbCAgICAgICAgY2FuUmV0dXJuRGF0YTsgIC8q IE9wY2xhc3MgY2FuIHJlY29uc3RydWN0IG9yaWdpbmFsIGRhdGEgKi8KICAgICAgYm9vbCAgICAg ICAgbG9uZ1ZhbHVlc09LOyAgIC8qIE9wY2xhc3MgY2FuIGNvcGUgd2l0aCB2YWx1ZXMgJmd0OyAx IHBhZ2UgKi8KICB9IHNwZ0NvbmZpZ091dDsKKioqKioqKioqKioqKioqIHR5cGVkZWYgc3RydWN0 IHNwZ0NvbmZpZ091dAoqKiogMzA1LDMxMCAqKioqCi0tLSAzMDgsMzI5IC0tLS0KICAgICAgICBj bGFzcyBpcyBjYXBhYmxlIG9mIHNlZ21lbnRpbmcgbG9uZyB2YWx1ZXMgYnkgcmVwZWF0ZWQgc3Vm Zml4aW5nCiAgICAgICAgKHNlZSA8eHJlZiBsaW5rZW5kPSJzcGdpc3QtbGltaXRzIi8+KS4KICAg ICAgIDwvcGFyYT4KKyAKKyAgICAgIDxwYXJhPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5sZWFmVHlw ZTwvc3RydWN0ZmllbGQ+IGlzIHR5cGljYWxseSB0aGUgc2FtZSBhcworICAgICAgIDxzdHJ1Y3Rm aWVsZD5hdHRUeXBlPC9zdHJ1Y3RmaWVsZD4uICBGb3IgdGhlIHJlYXNvbnMgb2YgYmFja3dhcmQK KyAgICAgICBjb21wYXRpYmlsaXR5LCBtZXRob2QgPGZ1bmN0aW9uPmNvbmZpZzwvZnVuY3Rpb24+ IGNhbgorICAgICAgIGxlYXZlIDxzdHJ1Y3RmaWVsZD5sZWFmVHlwZTwvc3RydWN0ZmllbGQ+IHVu aW5pdGlhbGl6ZWQ7IHRoYXQgd291bGQKKyAgICAgICBnaXZlIHRoZSBzYW1lIGVmZmVjdCBhcyBz ZXR0aW5nIDxzdHJ1Y3RmaWVsZD5sZWFmVHlwZTwvc3RydWN0ZmllbGQ+IGVxdWFsCisgICAgICAg dG8gPHN0cnVjdGZpZWxkPmF0dFR5cGU8L3N0cnVjdGZpZWxkPi4gIFdoZW4gPHN0cnVjdGZpZWxk PmF0dFR5cGU8L3N0cnVjdGZpZWxkPgorICAgICAgIGFuZCA8c3RydWN0ZmllbGQ+bGVhZlR5cGU8 L3N0cnVjdGZpZWxkPiBhcmUgZGlmZmVyZW50LCB0aGVuIG9wdGlvbmFsCisgICAgICAgbWV0aG9k IDxmdW5jdGlvbj5jb21wcmVzczwvZnVuY3Rpb24+IG11c3QgYmUgcHJvdmlkZWQuCisgICAgICAg TWV0aG9kIDxmdW5jdGlvbj5jb21wcmVzczwvZnVuY3Rpb24+IGlzIHJlc3BvbnNpYmxlCisgICAg ICAgZm9yIHRyYW5zZm9ybWF0aW9uIG9mIGRhdHVtcyB0byBiZSBpbmRleGVkIGZyb20gPHN0cnVj dGZpZWxkPmF0dFR5cGU8L3N0cnVjdGZpZWxkPgorICAgICAgIHRvIDxzdHJ1Y3RmaWVsZD5sZWFm VHlwZTwvc3RydWN0ZmllbGQ+LgorICAgICAgIE5vdGU6IGJvdGggY29uc2lzdGVudCBmdW5jdGlv bnMgd2lsbCBnZXQgPHN0cnVjdGZpZWxkPnNjYW5rZXlzPC9zdHJ1Y3RmaWVsZD4KKyAgICAgICB1 bmNoYW5nZWQsIHdpdGhvdXQgdHJhbnNmb3JtYXRpb24gdXNpbmcgPGZ1bmN0aW9uPmNvbXByZXNz PC9mdW5jdGlvbj4uCisgICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zh cmxpc3RlbnRyeT4KICAKKioqKioqKioqKioqKioqIHR5cGVkZWYgc3RydWN0IHNwZ0Nob29zZU91 dAoqKiogMzgwLDM4OSAqKioqCiAgfSBzcGdDaG9vc2VPdXQ7CiAgPC9wcm9ncmFtbGlzdGluZz4K ICAKISAgICAgICAgPHN0cnVjdGZpZWxkPmRhdHVtPC9zdHJ1Y3RmaWVsZD4gaXMgdGhlIG9yaWdp bmFsIGRhdHVtIHRoYXQgd2FzIHRvIGJlIGluc2VydGVkCiEgICAgICAgIGludG8gdGhlIGluZGV4 LgohICAgICAgICA8c3RydWN0ZmllbGQ+bGVhZkRhdHVtPC9zdHJ1Y3RmaWVsZD4gaXMgaW5pdGlh bGx5IHRoZSBzYW1lIGFzCiEgICAgICAgIDxzdHJ1Y3RmaWVsZD5kYXR1bTwvc3RydWN0ZmllbGQ+ LCBidXQgY2FuIGNoYW5nZSBhdCBsb3dlciBsZXZlbHMgb2YgdGhlIHRyZWUKICAgICAgICAgaWYg dGhlIDxmdW5jdGlvbj5jaG9vc2U8L2Z1bmN0aW9uPiBvciA8ZnVuY3Rpb24+cGlja3NwbGl0PC9m dW5jdGlvbj4KICAgICAgICAgbWV0aG9kcyBjaGFuZ2UgaXQuICBXaGVuIHRoZSBpbnNlcnRpb24g c2VhcmNoIHJlYWNoZXMgYSBsZWFmIHBhZ2UsCiAgICAgICAgIHRoZSBjdXJyZW50IHZhbHVlIG9m IDxzdHJ1Y3RmaWVsZD5sZWFmRGF0dW08L3N0cnVjdGZpZWxkPiBpcyB3aGF0IHdpbGwgYmUgc3Rv cmVkCi0tLSAzOTksNDE0IC0tLS0KICB9IHNwZ0Nob29zZU91dDsKICA8L3Byb2dyYW1saXN0aW5n PgogIAohICAgICAgICA8c3RydWN0ZmllbGQ+ZGF0dW08L3N0cnVjdGZpZWxkPiBpcyB0aGUgb3Jp Z2luYWwgZGF0dW0gb2YKISAgICAgICAgPHN0cnVjdG5hbWU+c3BnQ29uZmlnSW48L3N0cnVjdG5h bWU+LjxzdHJ1Y3RmaWVsZD5hdHRUeXBlPC9zdHJ1Y3RmaWVsZD4KISAgICAgICAgdHlwZSB0aGF0 IHdhcyB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBpbmRleC4KISAgICAgICAgPHN0cnVjdGZpZWxk PmxlYWZEYXR1bTwvc3RydWN0ZmllbGQ+IGlzIGEgdmFsdWUgb2YKISAgICAgICAgPHN0cnVjdG5h bWU+c3BnQ29uZmlnT3V0PC9zdHJ1Y3RuYW1lPi48c3RydWN0ZmllbGQ+bGVhZlR5cGU8L3N0cnVj dGZpZWxkPgohICAgICAgICB0eXBlIHdoaWNoIGlzIGluaXRpYWxseSBhbiByZXN1bHQgb2YgbWV0 aG9kCiEgICAgICAgIDxmdW5jdGlvbj5jb21wcmVzczwvZnVuY3Rpb24+IGFwcGxpZWQgdG8gPHN0 cnVjdGZpZWxkPmRhdHVtPC9zdHJ1Y3RmaWVsZD4KISAgICAgICAgd2hlbiBtZXRob2QgPGZ1bmN0 aW9uPmNvbXByZXNzPC9mdW5jdGlvbj4gaXMgcHJvdmlkZWQsIG9yIHNhbWUgdmFsdWUgYXMKISAg ICAgICAgPHN0cnVjdGZpZWxkPmRhdHVtPC9zdHJ1Y3RmaWVsZD4gb3RoZXJ3aXNlLgohICAgICAg ICA8c3RydWN0ZmllbGQ+bGVhZkRhdHVtPC9zdHJ1Y3RmaWVsZD4gY2FuIGNoYW5nZSBhdCBsb3dl ciBsZXZlbHMgb2YgdGhlIHRyZWUKICAgICAgICAgaWYgdGhlIDxmdW5jdGlvbj5jaG9vc2U8L2Z1 bmN0aW9uPiBvciA8ZnVuY3Rpb24+cGlja3NwbGl0PC9mdW5jdGlvbj4KICAgICAgICAgbWV0aG9k cyBjaGFuZ2UgaXQuICBXaGVuIHRoZSBpbnNlcnRpb24gc2VhcmNoIHJlYWNoZXMgYSBsZWFmIHBh Z2UsCiAgICAgICAgIHRoZSBjdXJyZW50IHZhbHVlIG9mIDxzdHJ1Y3RmaWVsZD5sZWFmRGF0dW08 L3N0cnVjdGZpZWxkPiBpcyB3aGF0IHdpbGwgYmUgc3RvcmVkCioqKioqKioqKioqKioqKiB0eXBl ZGVmIHN0cnVjdCBzcGdDaG9vc2VPdXQKKioqIDQxOCw0MjQgKioqKgogICAgICAgICBTZXQgPHN0 cnVjdGZpZWxkPmxldmVsQWRkPC9zdHJ1Y3RmaWVsZD4gdG8gdGhlIGluY3JlbWVudCBpbgogICAg ICAgICA8c3RydWN0ZmllbGQ+bGV2ZWw8L3N0cnVjdGZpZWxkPiBjYXVzZWQgYnkgZGVzY2VuZGlu ZyB0aHJvdWdoIHRoYXQgbm9kZSwKICAgICAgICAgb3IgbGVhdmUgaXQgYXMgemVybyBpZiB0aGUg b3BlcmF0b3IgY2xhc3MgZG9lcyBub3QgdXNlIGxldmVscy4KISAgICAgICAgU2V0IDxzdHJ1Y3Rm aWVsZD5yZXN0RGF0dW08L3N0cnVjdGZpZWxkPiB0byBlcXVhbCA8c3RydWN0ZmllbGQ+ZGF0dW08 L3N0cnVjdGZpZWxkPgogICAgICAgICBpZiB0aGUgb3BlcmF0b3IgY2xhc3MgZG9lcyBub3QgbW9k aWZ5IGRhdHVtcyBmcm9tIG9uZSBsZXZlbCB0byB0aGUKICAgICAgICAgbmV4dCwgb3Igb3RoZXJ3 aXNlIHNldCBpdCB0byB0aGUgbW9kaWZpZWQgdmFsdWUgdG8gYmUgdXNlZCBhcwogICAgICAgICA8 c3RydWN0ZmllbGQ+bGVhZkRhdHVtPC9zdHJ1Y3RmaWVsZD4gYXQgdGhlIG5leHQgbGV2ZWwuCi0t LSA0NDMsNDQ5IC0tLS0KICAgICAgICAgU2V0IDxzdHJ1Y3RmaWVsZD5sZXZlbEFkZDwvc3RydWN0 ZmllbGQ+IHRvIHRoZSBpbmNyZW1lbnQgaW4KICAgICAgICAgPHN0cnVjdGZpZWxkPmxldmVsPC9z dHJ1Y3RmaWVsZD4gY2F1c2VkIGJ5IGRlc2NlbmRpbmcgdGhyb3VnaCB0aGF0IG5vZGUsCiAgICAg ICAgIG9yIGxlYXZlIGl0IGFzIHplcm8gaWYgdGhlIG9wZXJhdG9yIGNsYXNzIGRvZXMgbm90IHVz ZSBsZXZlbHMuCiEgICAgICAgIFNldCA8c3RydWN0ZmllbGQ+cmVzdERhdHVtPC9zdHJ1Y3RmaWVs ZD4gdG8gZXF1YWwgPHN0cnVjdGZpZWxkPmxlYWZEYXR1bTwvc3RydWN0ZmllbGQ+CiAgICAgICAg IGlmIHRoZSBvcGVyYXRvciBjbGFzcyBkb2VzIG5vdCBtb2RpZnkgZGF0dW1zIGZyb20gb25lIGxl dmVsIHRvIHRoZQogICAgICAgICBuZXh0LCBvciBvdGhlcndpc2Ugc2V0IGl0IHRvIHRoZSBtb2Rp ZmllZCB2YWx1ZSB0byBiZSB1c2VkIGFzCiAgICAgICAgIDxzdHJ1Y3RmaWVsZD5sZWFmRGF0dW08 L3N0cnVjdGZpZWxkPiBhdCB0aGUgbmV4dCBsZXZlbC4KKioqKioqKioqKioqKioqIHR5cGVkZWYg c3RydWN0IHNwZ1BpY2tTcGxpdE91dAoqKiogNTA5LDUxNSAqKioqCiAgPC9wcm9ncmFtbGlzdGlu Zz4KICAKICAgICAgICAgPHN0cnVjdGZpZWxkPm5UdXBsZXM8L3N0cnVjdGZpZWxkPiBpcyB0aGUg bnVtYmVyIG9mIGxlYWYgdHVwbGVzIHByb3ZpZGVkLgohICAgICAgICA8c3RydWN0ZmllbGQ+ZGF0 dW1zPC9zdHJ1Y3RmaWVsZD4gaXMgYW4gYXJyYXkgb2YgdGhlaXIgZGF0dW0gdmFsdWVzLgogICAg ICAgICA8c3RydWN0ZmllbGQ+bGV2ZWw8L3N0cnVjdGZpZWxkPiBpcyB0aGUgY3VycmVudCBsZXZl bCB0aGF0IGFsbCB0aGUgbGVhZiB0dXBsZXMKICAgICAgICAgc2hhcmUsIHdoaWNoIHdpbGwgYmVj b21lIHRoZSBsZXZlbCBvZiB0aGUgbmV3IGlubmVyIHR1cGxlLgogICAgICAgIDwvcGFyYT4KLS0t IDUzNCw1NDIgLS0tLQogIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgCiAgICAgICAgIDxzdHJ1Y3RmaWVs ZD5uVHVwbGVzPC9zdHJ1Y3RmaWVsZD4gaXMgdGhlIG51bWJlciBvZiBsZWFmIHR1cGxlcyBwcm92 aWRlZC4KISAgICAgICAgPHN0cnVjdGZpZWxkPmRhdHVtczwvc3RydWN0ZmllbGQ+IGlzIGFuIGFy cmF5IG9mIHRoZWlyIGRhdHVtIHZhbHVlcyBvZgohICAgICAgICA8c3RydWN0bmFtZT5zcGdDb25m aWdPdXQ8L3N0cnVjdG5hbWU+LjxzdHJ1Y3RmaWVsZD5sZWFmVHlwZTwvc3RydWN0ZmllbGQ+CiEg ICAgICAgIHR5cGUuCiAgICAgICAgIDxzdHJ1Y3RmaWVsZD5sZXZlbDwvc3RydWN0ZmllbGQ+IGlz IHRoZSBjdXJyZW50IGxldmVsIHRoYXQgYWxsIHRoZSBsZWFmIHR1cGxlcwogICAgICAgICBzaGFy ZSwgd2hpY2ggd2lsbCBiZWNvbWUgdGhlIGxldmVsIG9mIHRoZSBuZXcgaW5uZXIgdHVwbGUuCiAg ICAgICAgPC9wYXJhPgoqKioqKioqKioqKioqKiogdHlwZWRlZiBzdHJ1Y3Qgc3BnSW5uZXJDb25z aXN0ZW50T3V0CioqKiA2MjQsNjMwICoqKioKICAgICAgICAgPHN0cnVjdGZpZWxkPnJlY29uc3Ry dWN0ZWRWYWx1ZTwvc3RydWN0ZmllbGQ+IGlzIHRoZSB2YWx1ZSByZWNvbnN0cnVjdGVkIGZvciB0 aGUKICAgICAgICAgcGFyZW50IHR1cGxlOyBpdCBpcyA8bGl0ZXJhbD4oRGF0dW0pIDA8L2xpdGVy YWw+IGF0IHRoZSByb290IGxldmVsIG9yIGlmIHRoZQogICAgICAgICA8ZnVuY3Rpb24+aW5uZXJf Y29uc2lzdGVudDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGRpZCBub3QgcHJvdmlkZSBhIHZhbHVlIGF0 IHRoZQohICAgICAgICBwYXJlbnQgbGV2ZWwuCiAgICAgICAgIDxzdHJ1Y3RmaWVsZD50cmF2ZXJz YWxWYWx1ZTwvc3RydWN0ZmllbGQ+IGlzIGEgcG9pbnRlciB0byBhbnkgdHJhdmVyc2UgZGF0YQog ICAgICAgICBwYXNzZWQgZG93biBmcm9tIHRoZSBwcmV2aW91cyBjYWxsIG9mIDxmdW5jdGlvbj5p bm5lcl9jb25zaXN0ZW50PC9mdW5jdGlvbj4KICAgICAgICAgb24gdGhlIHBhcmVudCBpbmRleCB0 dXBsZSwgb3IgTlVMTCBhdCB0aGUgcm9vdCBsZXZlbC4KLS0tIDY1MSw2NTggLS0tLQogICAgICAg ICA8c3RydWN0ZmllbGQ+cmVjb25zdHJ1Y3RlZFZhbHVlPC9zdHJ1Y3RmaWVsZD4gaXMgdGhlIHZh bHVlIHJlY29uc3RydWN0ZWQgZm9yIHRoZQogICAgICAgICBwYXJlbnQgdHVwbGU7IGl0IGlzIDxs aXRlcmFsPihEYXR1bSkgMDwvbGl0ZXJhbD4gYXQgdGhlIHJvb3QgbGV2ZWwgb3IgaWYgdGhlCiAg ICAgICAgIDxmdW5jdGlvbj5pbm5lcl9jb25zaXN0ZW50PC9mdW5jdGlvbj4gZnVuY3Rpb24gZGlk IG5vdCBwcm92aWRlIGEgdmFsdWUgYXQgdGhlCiEgICAgICAgIHBhcmVudCBsZXZlbC4gPHN0cnVj dGZpZWxkPnJlY29uc3RydWN0ZWRWYWx1ZTwvc3RydWN0ZmllbGQ+IGlzIGFsd2F5cyBvZgohICAg ICAgICA8c3RydWN0bmFtZT5zcGdDb25maWdJbjwvc3RydWN0bmFtZT4uPHN0cnVjdGZpZWxkPmF0 dFR5cGU8L3N0cnVjdGZpZWxkPiB0eXBlLgogICAgICAgICA8c3RydWN0ZmllbGQ+dHJhdmVyc2Fs VmFsdWU8L3N0cnVjdGZpZWxkPiBpcyBhIHBvaW50ZXIgdG8gYW55IHRyYXZlcnNlIGRhdGEKICAg ICAgICAgcGFzc2VkIGRvd24gZnJvbSB0aGUgcHJldmlvdXMgY2FsbCBvZiA8ZnVuY3Rpb24+aW5u ZXJfY29uc2lzdGVudDwvZnVuY3Rpb24+CiAgICAgICAgIG9uIHRoZSBwYXJlbnQgaW5kZXggdHVw bGUsIG9yIE5VTEwgYXQgdGhlIHJvb3QgbGV2ZWwuCioqKioqKioqKioqKioqKiB0eXBlZGVmIHN0 cnVjdCBzcGdJbm5lckNvbnNpc3RlbnRPdXQKKioqIDY1OSw2NjQgKioqKgotLS0gNjg3LDY5MyAt LS0tCiAgICAgICAgIG5lY2Vzc2FyaWx5IHNvLCBzbyBhbiBhcnJheSBpcyB1c2VkLikKICAgICAg ICAgSWYgdmFsdWUgcmVjb25zdHJ1Y3Rpb24gaXMgbmVlZGVkLCBzZXQKICAgICAgICAgPHN0cnVj dGZpZWxkPnJlY29uc3RydWN0ZWRWYWx1ZXM8L3N0cnVjdGZpZWxkPiB0byBhbiBhcnJheSBvZiB0 aGUgdmFsdWVzCisgICAgICAgIG9mIDxzdHJ1Y3RuYW1lPnNwZ0NvbmZpZ0luPC9zdHJ1Y3RuYW1l Pi48c3RydWN0ZmllbGQ+YXR0VHlwZTwvc3RydWN0ZmllbGQ+IHR5cGUKICAgICAgICAgcmVjb25z dHJ1Y3RlZCBmb3IgZWFjaCBjaGlsZCBub2RlIHRvIGJlIHZpc2l0ZWQ7IG90aGVyd2lzZSwgbGVh dmUKICAgICAgICAgPHN0cnVjdGZpZWxkPnJlY29uc3RydWN0ZWRWYWx1ZXM8L3N0cnVjdGZpZWxk PiBhcyBOVUxMLgogICAgICAgICBJZiBpdCBpcyBkZXNpcmVkIHRvIHBhc3MgZG93biBhZGRpdGlv bmFsIG91dC1vZi1iYW5kIGluZm9ybWF0aW9uCioqKioqKioqKioqKioqKiB0eXBlZGVmIHN0cnVj dCBzcGdMZWFmQ29uc2lzdGVudE91dAoqKiogNzMwLDczNiAqKioqCiAgICAgICAgIDxzdHJ1Y3Rm aWVsZD5yZWNvbnN0cnVjdGVkVmFsdWU8L3N0cnVjdGZpZWxkPiBpcyB0aGUgdmFsdWUgcmVjb25z dHJ1Y3RlZCBmb3IgdGhlCiAgICAgICAgIHBhcmVudCB0dXBsZTsgaXQgaXMgPGxpdGVyYWw+KERh dHVtKSAwPC9saXRlcmFsPiBhdCB0aGUgcm9vdCBsZXZlbCBvciBpZiB0aGUKICAgICAgICAgPGZ1 bmN0aW9uPmlubmVyX2NvbnNpc3RlbnQ8L2Z1bmN0aW9uPiBmdW5jdGlvbiBkaWQgbm90IHByb3Zp ZGUgYSB2YWx1ZSBhdCB0aGUKISAgICAgICAgcGFyZW50IGxldmVsLgogICAgICAgICA8c3RydWN0 ZmllbGQ+dHJhdmVyc2FsVmFsdWU8L3N0cnVjdGZpZWxkPiBpcyBhIHBvaW50ZXIgdG8gYW55IHRy YXZlcnNlIGRhdGEKICAgICAgICAgcGFzc2VkIGRvd24gZnJvbSB0aGUgcHJldmlvdXMgY2FsbCBv ZiA8ZnVuY3Rpb24+aW5uZXJfY29uc2lzdGVudDwvZnVuY3Rpb24+CiAgICAgICAgIG9uIHRoZSBw YXJlbnQgaW5kZXggdHVwbGUsIG9yIE5VTEwgYXQgdGhlIHJvb3QgbGV2ZWwuCi0tLSA3NTksNzY2 IC0tLS0KICAgICAgICAgPHN0cnVjdGZpZWxkPnJlY29uc3RydWN0ZWRWYWx1ZTwvc3RydWN0Zmll bGQ+IGlzIHRoZSB2YWx1ZSByZWNvbnN0cnVjdGVkIGZvciB0aGUKICAgICAgICAgcGFyZW50IHR1 cGxlOyBpdCBpcyA8bGl0ZXJhbD4oRGF0dW0pIDA8L2xpdGVyYWw+IGF0IHRoZSByb290IGxldmVs IG9yIGlmIHRoZQogICAgICAgICA8ZnVuY3Rpb24+aW5uZXJfY29uc2lzdGVudDwvZnVuY3Rpb24+ IGZ1bmN0aW9uIGRpZCBub3QgcHJvdmlkZSBhIHZhbHVlIGF0IHRoZQohICAgICAgICBwYXJlbnQg bGV2ZWwuIDxzdHJ1Y3RmaWVsZD5yZWNvbnN0cnVjdGVkVmFsdWU8L3N0cnVjdGZpZWxkPiBpcyBh bHdheXMgb2YKISAgICAgICAgPHN0cnVjdG5hbWU+c3BnQ29uZmlnSW48L3N0cnVjdG5hbWU+Ljxz dHJ1Y3RmaWVsZD5hdHRUeXBlPC9zdHJ1Y3RmaWVsZD4gdHlwZS4gCiAgICAgICAgIDxzdHJ1Y3Rm aWVsZD50cmF2ZXJzYWxWYWx1ZTwvc3RydWN0ZmllbGQ+IGlzIGEgcG9pbnRlciB0byBhbnkgdHJh dmVyc2UgZGF0YQogICAgICAgICBwYXNzZWQgZG93biBmcm9tIHRoZSBwcmV2aW91cyBjYWxsIG9m IDxmdW5jdGlvbj5pbm5lcl9jb25zaXN0ZW50PC9mdW5jdGlvbj4KICAgICAgICAgb24gdGhlIHBh cmVudCBpbmRleCB0dXBsZSwgb3IgTlVMTCBhdCB0aGUgcm9vdCBsZXZlbC4KKioqKioqKioqKioq KioqIHR5cGVkZWYgc3RydWN0IHNwZ0xlYWZDb25zaXN0ZW50T3V0CioqKiA3MzksNzU0ICoqKioK ICAgICAgICAgPHN0cnVjdGZpZWxkPnJldHVybkRhdGE8L3N0cnVjdGZpZWxkPiBpcyA8bGl0ZXJh bD50cnVlPC9saXRlcmFsPiBpZiByZWNvbnN0cnVjdGVkIGRhdGEgaXMKICAgICAgICAgcmVxdWly ZWQgZm9yIHRoaXMgcXVlcnk7IHRoaXMgd2lsbCBvbmx5IGJlIHNvIGlmIHRoZQogICAgICAgICA8 ZnVuY3Rpb24+Y29uZmlnPC9mdW5jdGlvbj4gZnVuY3Rpb24gYXNzZXJ0ZWQgPHN0cnVjdGZpZWxk PmNhblJldHVybkRhdGE8L3N0cnVjdGZpZWxkPi4KISAgICAgICAgPHN0cnVjdGZpZWxkPmxlYWZE YXR1bTwvc3RydWN0ZmllbGQ+IGlzIHRoZSBrZXkgdmFsdWUgc3RvcmVkIGluIHRoZSBjdXJyZW50 CiEgICAgICAgIGxlYWYgdHVwbGUuCiAgICAgICAgPC9wYXJhPgogIAogICAgICAgIDxwYXJhPgog ICAgICAgICBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4g aWYgdGhlIGxlYWYgdHVwbGUgbWF0Y2hlcyB0aGUKICAgICAgICAgcXVlcnksIG9yIDxsaXRlcmFs PmZhbHNlPC9saXRlcmFsPiBpZiBub3QuICBJbiB0aGUgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4g Y2FzZSwKICAgICAgICAgaWYgPHN0cnVjdGZpZWxkPnJldHVybkRhdGE8L3N0cnVjdGZpZWxkPiBp cyA8bGl0ZXJhbD50cnVlPC9saXRlcmFsPiB0aGVuCiEgICAgICAgIDxzdHJ1Y3RmaWVsZD5sZWFm VmFsdWU8L3N0cnVjdGZpZWxkPiBtdXN0IGJlIHNldCB0byB0aGUgdmFsdWUgb3JpZ2luYWxseSBz dXBwbGllZAohICAgICAgICB0byBiZSBpbmRleGVkIGZvciB0aGlzIGxlYWYgdHVwbGUuICBBbHNv LAogICAgICAgICA8c3RydWN0ZmllbGQ+cmVjaGVjazwvc3RydWN0ZmllbGQ+IG1heSBiZSBzZXQg dG8gPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4gaWYgdGhlIG1hdGNoCiAgICAgICAgIGlzIHVuY2Vy dGFpbiBhbmQgc28gdGhlIG9wZXJhdG9yKHMpIG11c3QgYmUgcmUtYXBwbGllZCB0byB0aGUgYWN0 dWFsCiAgICAgICAgIGhlYXAgdHVwbGUgdG8gdmVyaWZ5IHRoZSBtYXRjaC4KLS0tIDc2OSw3ODYg LS0tLQogICAgICAgICA8c3RydWN0ZmllbGQ+cmV0dXJuRGF0YTwvc3RydWN0ZmllbGQ+IGlzIDxs aXRlcmFsPnRydWU8L2xpdGVyYWw+IGlmIHJlY29uc3RydWN0ZWQgZGF0YSBpcwogICAgICAgICBy ZXF1aXJlZCBmb3IgdGhpcyBxdWVyeTsgdGhpcyB3aWxsIG9ubHkgYmUgc28gaWYgdGhlCiAgICAg ICAgIDxmdW5jdGlvbj5jb25maWc8L2Z1bmN0aW9uPiBmdW5jdGlvbiBhc3NlcnRlZCA8c3RydWN0 ZmllbGQ+Y2FuUmV0dXJuRGF0YTwvc3RydWN0ZmllbGQ+LgohICAgICAgICA8c3RydWN0ZmllbGQ+ bGVhZkRhdHVtPC9zdHJ1Y3RmaWVsZD4gaXMgdGhlIGtleSB2YWx1ZSBvZgohICAgICAgICA8c3Ry dWN0bmFtZT5zcGdDb25maWdPdXQ8L3N0cnVjdG5hbWU+LjxzdHJ1Y3RmaWVsZD5sZWFmVHlwZTwv c3RydWN0ZmllbGQ+CiEgICAgICAgIHN0b3JlZCBpbiB0aGUgY3VycmVudCBsZWFmIHR1cGxlLgog ICAgICAgIDwvcGFyYT4KICAKICAgICAgICA8cGFyYT4KICAgICAgICAgVGhlIGZ1bmN0aW9uIG11 c3QgcmV0dXJuIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+IGlmIHRoZSBsZWFmIHR1cGxlIG1hdGNo ZXMgdGhlCiAgICAgICAgIHF1ZXJ5LCBvciA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4gaWYgbm90 LiAgSW4gdGhlIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+IGNhc2UsCiAgICAgICAgIGlmIDxzdHJ1 Y3RmaWVsZD5yZXR1cm5EYXRhPC9zdHJ1Y3RmaWVsZD4gaXMgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJh bD4gdGhlbgohICAgICAgICA8c3RydWN0ZmllbGQ+bGVhZlZhbHVlPC9zdHJ1Y3RmaWVsZD4gbXVz dCBiZSBzZXQgdG8gdGhlIHZhbHVlIG9mCiEgICAgICAgIDxzdHJ1Y3RuYW1lPnNwZ0NvbmZpZ0lu PC9zdHJ1Y3RuYW1lPi48c3RydWN0ZmllbGQ+YXR0VHlwZTwvc3RydWN0ZmllbGQ+IHR5cGUKISAg ICAgICAgb3JpZ2luYWxseSBzdXBwbGllZCB0byBiZSBpbmRleGVkIGZvciB0aGlzIGxlYWYgdHVw bGUuICBBbHNvLAogICAgICAgICA8c3RydWN0ZmllbGQ+cmVjaGVjazwvc3RydWN0ZmllbGQ+IG1h eSBiZSBzZXQgdG8gPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4gaWYgdGhlIG1hdGNoCiAgICAgICAg IGlzIHVuY2VydGFpbiBhbmQgc28gdGhlIG9wZXJhdG9yKHMpIG11c3QgYmUgcmUtYXBwbGllZCB0 byB0aGUgYWN0dWFsCiAgICAgICAgIGhlYXAgdHVwbGUgdG8gdmVyaWZ5IHRoZSBtYXRjaC4KKioq KioqKioqKioqKioqIHR5cGVkZWYgc3RydWN0IHNwZ0xlYWZDb25zaXN0ZW50T3V0CioqKiA3NTcs NzYyICoqKioKLS0tIDc4OSw4MTQgLS0tLQogICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICA8L3Zh cmlhYmxlbGlzdD4KICAKKyAgPHBhcmE+CisgICBUaGUgb3B0aW9uYWwgdXNlci1kZWZpbmVkIG1l dGhvZCBpczoKKyAgPC9wYXJhPgorIAorICA8dmFyaWFibGVsaXN0PgorICAgICA8dmFybGlzdGVu dHJ5PgorICAgICAgPHRlcm0+PGZ1bmN0aW9uPkRhdHVtIGNvbXByZXNzKERhdHVtIGluKTwvZnVu Y3Rpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBD b252ZXJ0cyB0aGUgZGF0YSBpdGVtIGludG8gYSBmb3JtYXQgc3VpdGFibGUgZm9yIHBoeXNpY2Fs IHN0b3JhZ2UgaW4gCisgICAgICAgIGEgbGVhZiB0dXBsZSBvZiBpbmRleCBwYWdlLiAgSXQgYWNj ZXB0cworICAgICAgICA8c3RydWN0bmFtZT5zcGdDb25maWdJbjwvc3RydWN0bmFtZT4uPHN0cnVj dGZpZWxkPmF0dFR5cGU8L3N0cnVjdGZpZWxkPgorICAgICAgICB2YWx1ZSBhbmQgcmV0dXJuCisg ICAgICAgIDxzdHJ1Y3RuYW1lPnNwZ0NvbmZpZ091dDwvc3RydWN0bmFtZT4uPHN0cnVjdGZpZWxk PmxlYWZUeXBlPC9zdHJ1Y3RmaWVsZD4KKyAgICAgICAgdmFsdWUuICBPdXRwdXQgdmFsdWUgc2hv dWxkIG5vdCBiZSB0b2FzdGVkLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgIDwvdmFybGlzdGVudHJ5PgorICAgPC92YXJpYWJsZWxpc3Q+CisgCiAgICA8cGFyYT4KICAg ICBBbGwgdGhlIFNQLUdpU1Qgc3VwcG9ydCBtZXRob2RzIGFyZSBub3JtYWxseSBjYWxsZWQgaW4g YSBzaG9ydC1saXZlZAogICAgIG1lbW9yeSBjb250ZXh0OyB0aGF0IGlzLCA8dmFybmFtZT5DdXJy ZW50TWVtb3J5Q29udGV4dDwvdmFybmFtZT4gd2lsbCBiZSByZXNldApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdkb2luc2VydC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3NwZ2lzdC9zcGdkb2luc2VydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1ZjRjNDAu LmE4Y2I4YzcKKioqIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdkb2luc2VydC5jCi0t LSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BnZG9pbnNlcnQuYwoqKioqKioqKioqKioq Kiogc3BnZG9pbnNlcnQoUmVsYXRpb24gaW5kZXgsIFNwR2lzdFN0YXRlIAoqKiogMTkwNiwxOTE5 ICoqKioKICAJCXByb2NpbmZvID0gaW5kZXhfZ2V0cHJvY2luZm8oaW5kZXgsIDEsIFNQR0lTVF9D SE9PU0VfUFJPQyk7CiAgCiAgCS8qCiEgCSAqIFNpbmNlIHdlIGRvbid0IHVzZSBpbmRleF9mb3Jt X3R1cGxlIGluIHRoaXMgQU0sIHdlIGhhdmUgdG8gbWFrZSBzdXJlCiAgCSAqIHZhbHVlIHRvIGJl IGluc2VydGVkIGlzIG5vdCB0b2FzdGVkOyBGb3JtSW5kZXhEYXR1bSBkb2Vzbid0IGd1YXJhbnRl ZQohIAkgKiB0aGF0LgogIAkgKi8KISAJaWYgKCFpc251bGwgJiYgc3RhdGUtPmF0dFR5cGUuYXR0 bGVuID09IC0xKQohIAkJZGF0dW0gPSBQb2ludGVyR2V0RGF0dW0oUEdfREVUT0FTVF9EQVRVTShk YXR1bSkpOwogIAohIAlsZWFmRGF0dW0gPSBkYXR1bTsKICAKICAJLyoKICAJICogQ29tcHV0ZSBz cGFjZSBuZWVkZWQgZm9yIGEgbGVhZiB0dXBsZSBjb250YWluaW5nIHRoZSBnaXZlbiBkYXR1bS4K LS0tIDE5MDYsMTk0MiAtLS0tCiAgCQlwcm9jaW5mbyA9IGluZGV4X2dldHByb2NpbmZvKGluZGV4 LCAxLCBTUEdJU1RfQ0hPT1NFX1BST0MpOwogIAogIAkvKgohIAkgKiBQcmVwYXJlIHRoZSBsZWFm IGRhdHVtIHRvIGluc2VydC4KISAJICoKISAJICogSWYgYW4gb3B0aW9uYWwgImNvbXByZXNzIiBt ZXRob2QgaXMgcHJvdmlkZWQsIHRoZW4gY2FsbCBpdCB0byBmb3JtCiEgCSAqIHRoZSBsZWFmIGRh dHVtIGZyb20gdGhlIGlucHV0IGRhdHVtLiAgT3RoZXJ3aXNlIHN0b3JlIHRoZSBpbnB1dCBkYXR1 bSBhcwohIAkgKiBpcy4gIFNpbmNlIHdlIGRvbid0IHVzZSBpbmRleF9mb3JtX3R1cGxlIGluIHRo aXMgQU0sIHdlIGhhdmUgdG8gbWFrZSBzdXJlCiAgCSAqIHZhbHVlIHRvIGJlIGluc2VydGVkIGlz IG5vdCB0b2FzdGVkOyBGb3JtSW5kZXhEYXR1bSBkb2Vzbid0IGd1YXJhbnRlZQohIAkgKiB0aGF0 LiAgQnV0IHdlIGFzc3VtZSB0aGUgImNvbXByZXNzIiBtZXRob2QgdG8gcmV0dXJuIGFuIHVudG9h c3RlZCB2YWx1ZS4KICAJICovCiEgCWlmICghaXNudWxsKQohIAl7CiEgCQlpZiAoT2lkSXNWYWxp ZChpbmRleF9nZXRwcm9jaWQoaW5kZXgsIDEsIFNQR0lTVF9DT01QUkVTU19QUk9DKSkpCiEgCQl7 CiEgCQkJRm1nckluZm8gICAqY29tcHJlc3NQcm9jaW5mbyA9IE5VTEw7CiAgCiEgCQkJY29tcHJl c3NQcm9jaW5mbyA9IGluZGV4X2dldHByb2NpbmZvKGluZGV4LCAxLCBTUEdJU1RfQ09NUFJFU1Nf UFJPQyk7CiEgCQkJbGVhZkRhdHVtID0gRnVuY3Rpb25DYWxsMUNvbGwoY29tcHJlc3NQcm9jaW5m bywKISAJCQkJCQkJCQkJICBpbmRleC0+cmRfaW5kY29sbGF0aW9uWzBdLAohIAkJCQkJCQkJCQkg IGRhdHVtKTsKISAJCX0KISAJCWVsc2UKISAJCXsKISAJCQlBc3NlcnQoc3RhdGUtPmF0dExlYWZU eXBlLnR5cGUgPT0gc3RhdGUtPmF0dFR5cGUudHlwZSk7CiEgCiEgCQkJaWYgKHN0YXRlLT5hdHRU eXBlLmF0dGxlbiA9PSAtMSkKISAJCQkJbGVhZkRhdHVtID0gUG9pbnRlckdldERhdHVtKFBHX0RF VE9BU1RfREFUVU0oZGF0dW0pKTsKISAJCQllbHNlCiEgCQkJCWxlYWZEYXR1bSA9IGRhdHVtOwoh IAkJfQohIAl9CiEgCWVsc2UKISAJCWxlYWZEYXR1bSA9IChEYXR1bSkgMDsKICAKICAJLyoKICAJ ICogQ29tcHV0ZSBzcGFjZSBuZWVkZWQgZm9yIGEgbGVhZiB0dXBsZSBjb250YWluaW5nIHRoZSBn aXZlbiBkYXR1bS4KKioqKioqKioqKioqKioqIHNwZ2RvaW5zZXJ0KFJlbGF0aW9uIGluZGV4LCBT cEdpc3RTdGF0ZSAKKioqIDE5MjMsMTkyOSAqKioqCiAgCSAqLwogIAlpZiAoIWlzbnVsbCkKICAJ CWxlYWZTaXplID0gU0dMVEhEUlNaICsgc2l6ZW9mKEl0ZW1JZERhdGEpICsKISAJCQlTcEdpc3RH ZXRUeXBlU2l6ZSgmc3RhdGUtPmF0dFR5cGUsIGxlYWZEYXR1bSk7CiAgCWVsc2UKICAJCWxlYWZT aXplID0gU0dEVFNJWkUgKyBzaXplb2YoSXRlbUlkRGF0YSk7CiAgCi0tLSAxOTQ2LDE5NTIgLS0t LQogIAkgKi8KICAJaWYgKCFpc251bGwpCiAgCQlsZWFmU2l6ZSA9IFNHTFRIRFJTWiArIHNpemVv ZihJdGVtSWREYXRhKSArCiEgCQkJU3BHaXN0R2V0VHlwZVNpemUoJnN0YXRlLT5hdHRMZWFmVHlw ZSwgbGVhZkRhdHVtKTsKICAJZWxzZQogIAkJbGVhZlNpemUgPSBTR0RUU0laRSArIHNpemVvZihJ dGVtSWREYXRhKTsKICAKKioqKioqKioqKioqKioqIHNwZ2RvaW5zZXJ0KFJlbGF0aW9uIGluZGV4 LCBTcEdpc3RTdGF0ZSAKKioqIDIxMzgsMjE0NCAqKioqCiAgCQkJCQl7CiAgCQkJCQkJbGVhZkRh dHVtID0gb3V0LnJlc3VsdC5tYXRjaE5vZGUucmVzdERhdHVtOwogIAkJCQkJCWxlYWZTaXplID0g U0dMVEhEUlNaICsgc2l6ZW9mKEl0ZW1JZERhdGEpICsKISAJCQkJCQkJU3BHaXN0R2V0VHlwZVNp emUoJnN0YXRlLT5hdHRUeXBlLCBsZWFmRGF0dW0pOwogIAkJCQkJfQogIAogIAkJCQkJLyoKLS0t IDIxNjEsMjE2NyAtLS0tCiAgCQkJCQl7CiAgCQkJCQkJbGVhZkRhdHVtID0gb3V0LnJlc3VsdC5t YXRjaE5vZGUucmVzdERhdHVtOwogIAkJCQkJCWxlYWZTaXplID0gU0dMVEhEUlNaICsgc2l6ZW9m KEl0ZW1JZERhdGEpICsKISAJCQkJCQkJU3BHaXN0R2V0VHlwZVNpemUoJnN0YXRlLT5hdHRMZWFm VHlwZSwgbGVhZkRhdHVtKTsKICAJCQkJCX0KICAKICAJCQkJCS8qCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Bn aXN0L3NwZ3V0aWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ1MzAxZi4uNjY4ZTNj NAoqKiogYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKLS0tIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCioqKioqKioqKioqKioqKiBzcGdHZXRDYWNo ZShSZWxhdGlvbiBpbmRleCkKKioqIDEyNCwxMzAgKioqKgogIAkJCQkJCSAgUG9pbnRlckdldERh dHVtKCZjYWNoZS0+Y29uZmlnKSk7CiAgCiAgCQkvKiBHZXQgdGhlIGluZm9ybWF0aW9uIHdlIG5l ZWQgYWJvdXQgZWFjaCByZWxldmFudCBkYXRhdHlwZSAqLwohIAkJZmlsbFR5cGVEZXNjKCZjYWNo ZS0+YXR0VHlwZSwgYXR0dHlwZSk7CiAgCQlmaWxsVHlwZURlc2MoJmNhY2hlLT5hdHRQcmVmaXhU eXBlLCBjYWNoZS0+Y29uZmlnLnByZWZpeFR5cGUpOwogIAkJZmlsbFR5cGVEZXNjKCZjYWNoZS0+ YXR0TGFiZWxUeXBlLCBjYWNoZS0+Y29uZmlnLmxhYmVsVHlwZSk7CiAgCi0tLSAxMjQsMTQ2IC0t LS0KICAJCQkJCQkgIFBvaW50ZXJHZXREYXR1bSgmY2FjaGUtPmNvbmZpZykpOwogIAogIAkJLyog R2V0IHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkIGFib3V0IGVhY2ggcmVsZXZhbnQgZGF0YXR5cGUg Ki8KISAJCWlmIChPaWRJc1ZhbGlkKGNhY2hlLT5jb25maWcubGVhZlR5cGUpICYmCiEgCQkJY2Fj aGUtPmNvbmZpZy5sZWFmVHlwZSAhPSBhdHR0eXBlKQohIAkJewohIAkJCWlmICghT2lkSXNWYWxp ZChpbmRleF9nZXRwcm9jaWQoaW5kZXgsIDEsIFNQR0lTVF9DT01QUkVTU19QUk9DKSkpCiEgCQkJ CWVyZXBvcnQoRVJST1IsCiEgCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCiEgCQkJCQkJIGVycm1zZygiY29tcHJlc3MgbWV0aG9kIG11c3Qgbm90IGRlZmlu ZWQgd2hlbiBsZWFmIHR5cGUgaXMgZGlmZmVyZW50IGZyb20gaW5wdXQgdHlwZSIpKSk7CiEgCiEg CQkJZmlsbFR5cGVEZXNjKCZjYWNoZS0+YXR0VHlwZSwgYXR0dHlwZSk7CiEgCQkJZmlsbFR5cGVE ZXNjKCZjYWNoZS0+YXR0TGVhZlR5cGUsIGNhY2hlLT5jb25maWcubGVhZlR5cGUpOwohIAkJfQoh IAkJZWxzZQohIAkJewohIAkJCWZpbGxUeXBlRGVzYygmY2FjaGUtPmF0dFR5cGUsIGF0dHR5cGUp OwohIAkJCWNhY2hlLT5hdHRMZWFmVHlwZSA9IGNhY2hlLT5hdHRUeXBlOwohIAkJfQohIAogIAkJ ZmlsbFR5cGVEZXNjKCZjYWNoZS0+YXR0UHJlZml4VHlwZSwgY2FjaGUtPmNvbmZpZy5wcmVmaXhU eXBlKTsKICAJCWZpbGxUeXBlRGVzYygmY2FjaGUtPmF0dExhYmVsVHlwZSwgY2FjaGUtPmNvbmZp Zy5sYWJlbFR5cGUpOwogIAoqKioqKioqKioqKioqKiogaW5pdFNwR2lzdFN0YXRlKFNwR2lzdFN0 YXRlICpzdGF0ZSwgUmVsYQoqKiogMTY0LDE2OSAqKioqCi0tLSAxODAsMTg2IC0tLS0KICAKICAJ c3RhdGUtPmNvbmZpZyA9IGNhY2hlLT5jb25maWc7CiAgCXN0YXRlLT5hdHRUeXBlID0gY2FjaGUt PmF0dFR5cGU7CisgCXN0YXRlLT5hdHRMZWFmVHlwZSA9IGNhY2hlLT5hdHRMZWFmVHlwZTsKICAJ c3RhdGUtPmF0dFByZWZpeFR5cGUgPSBjYWNoZS0+YXR0UHJlZml4VHlwZTsKICAJc3RhdGUtPmF0 dExhYmVsVHlwZSA9IGNhY2hlLT5hdHRMYWJlbFR5cGU7CiAgCioqKioqKioqKioqKioqKiBzcGdG b3JtTGVhZlR1cGxlKFNwR2lzdFN0YXRlICpzdGF0ZSwgSXRlCioqKiA2MTgsNjI0ICoqKioKICAJ LyogY29tcHV0ZSBzcGFjZSBuZWVkZWQgKG5vdGUgcmVzdWx0IGlzIGFscmVhZHkgbWF4YWxpZ25l ZCkgKi8KICAJc2l6ZSA9IFNHTFRIRFJTWjsKICAJaWYgKCFpc251bGwpCiEgCQlzaXplICs9IFNw R2lzdEdldFR5cGVTaXplKCZzdGF0ZS0+YXR0VHlwZSwgZGF0dW0pOwogIAogIAkvKgogIAkgKiBF bnN1cmUgdGhhdCB3ZSBjYW4gcmVwbGFjZSB0aGUgdHVwbGUgd2l0aCBhIGRlYWQgdHVwbGUgbGF0 ZXIuICBUaGlzCi0tLSA2MzUsNjQxIC0tLS0KICAJLyogY29tcHV0ZSBzcGFjZSBuZWVkZWQgKG5v dGUgcmVzdWx0IGlzIGFscmVhZHkgbWF4YWxpZ25lZCkgKi8KICAJc2l6ZSA9IFNHTFRIRFJTWjsK ICAJaWYgKCFpc251bGwpCiEgCQlzaXplICs9IFNwR2lzdEdldFR5cGVTaXplKCZzdGF0ZS0+YXR0 TGVhZlR5cGUsIGRhdHVtKTsKICAKICAJLyoKICAJICogRW5zdXJlIHRoYXQgd2UgY2FuIHJlcGxh Y2UgdGhlIHR1cGxlIHdpdGggYSBkZWFkIHR1cGxlIGxhdGVyLiAgVGhpcwoqKioqKioqKioqKioq Kiogc3BnRm9ybUxlYWZUdXBsZShTcEdpc3RTdGF0ZSAqc3RhdGUsIEl0ZQoqKiogNjM0LDY0MCAq KioqCiAgCXR1cC0+bmV4dE9mZnNldCA9IEludmFsaWRPZmZzZXROdW1iZXI7CiAgCXR1cC0+aGVh cFB0ciA9ICpoZWFwUHRyOwogIAlpZiAoIWlzbnVsbCkKISAJCW1lbWNweURhdHVtKFNHTFREQVRB UFRSKHR1cCksICZzdGF0ZS0+YXR0VHlwZSwgZGF0dW0pOwogIAogIAlyZXR1cm4gdHVwOwogIH0K LS0tIDY1MSw2NTcgLS0tLQogIAl0dXAtPm5leHRPZmZzZXQgPSBJbnZhbGlkT2Zmc2V0TnVtYmVy OwogIAl0dXAtPmhlYXBQdHIgPSAqaGVhcFB0cjsKICAJaWYgKCFpc251bGwpCiEgCQltZW1jcHlE YXR1bShTR0xUREFUQVBUUih0dXApLCAmc3RhdGUtPmF0dExlYWZUeXBlLCBkYXR1bSk7CiAgCiAg CXJldHVybiB0dXA7CiAgfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9z cGd2YWxpZGF0ZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWxpZGF0ZS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1N2NmMmEuLjUxNGRhNDcKKioqIGEvc3JjL2JhY2tl bmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWxpZGF0ZS5jCi0tLSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9z cGdpc3Qvc3BndmFsaWRhdGUuYwoqKioqKioqKioqKioqKiogc3BndmFsaWRhdGUoT2lkIG9wY2xh c3NvaWQpCioqKiA1Miw1NyAqKioqCi0tLSA1Miw2MSAtLS0tCiAgCU9wRmFtaWx5T3BGdW5jR3Jv dXAgKm9wY2xhc3Nncm91cDsKICAJaW50CQkJaTsKICAJTGlzdENlbGwgICAqbGM7CisgCXNwZ0Nv bmZpZ0luCWNvbmZpZ0luOworIAlzcGdDb25maWdPdXQgY29uZmlnT3V0OworIAlPaWQJCQljb25m aWdPdXRMZWZ0dHlwZSA9IEludmFsaWRPaWQ7CisgCU9pZAkJCWNvbmZpZ091dFJpZ2h0dHlwZSA9 IEludmFsaWRPaWQ7CiAgCiAgCS8qIEZldGNoIG9wY2xhc3MgaW5mb3JtYXRpb24gKi8KICAJY2xh c3N0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQ0xBT0lELCBPYmplY3RJZEdldERhdHVtKG9wY2xhc3Nv aWQpKTsKKioqKioqKioqKioqKioqIHNwZ3ZhbGlkYXRlKE9pZCBvcGNsYXNzb2lkKQoqKiogMTAw LDEwNSAqKioqCi0tLSAxMDQsMTE4IC0tLS0KICAJCXN3aXRjaCAocHJvY2Zvcm0tPmFtcHJvY251 bSkKICAJCXsKICAJCQljYXNlIFNQR0lTVF9DT05GSUdfUFJPQzoKKyAJCQkJb2sgPSBjaGVja19h bXByb2Nfc2lnbmF0dXJlKHByb2Nmb3JtLT5hbXByb2MsIFZPSURPSUQsIHRydWUsCisgCQkJCQkJ CQkJCQkyLCAyLCBJTlRFUk5BTE9JRCwgSU5URVJOQUxPSUQpOworIAkJCQljb25maWdJbi5hdHRU eXBlID0gcHJvY2Zvcm0tPmFtcHJvY2xlZnR0eXBlOworIAkJCQlPaWRGdW5jdGlvbkNhbGwyKHBy b2Nmb3JtLT5hbXByb2MsCisgCQkJCQkJCQkgUG9pbnRlckdldERhdHVtKCZjb25maWdJbiksCisg CQkJCQkJCQkgUG9pbnRlckdldERhdHVtKCZjb25maWdPdXQpKTsKKyAJCQkJY29uZmlnT3V0TGVm dHR5cGUgPSBwcm9jZm9ybS0+YW1wcm9jbGVmdHR5cGU7CisgCQkJCWNvbmZpZ091dFJpZ2h0dHlw ZSA9IHByb2Nmb3JtLT5hbXByb2NyaWdodHR5cGU7CisgCQkJCWJyZWFrOwogIAkJCWNhc2UgU1BH SVNUX0NIT09TRV9QUk9DOgogIAkJCWNhc2UgU1BHSVNUX1BJQ0tTUExJVF9QUk9DOgogIAkJCWNh c2UgU1BHSVNUX0lOTkVSX0NPTlNJU1RFTlRfUFJPQzoKKioqKioqKioqKioqKioqIHNwZ3ZhbGlk YXRlKE9pZCBvcGNsYXNzb2lkKQoqKiogMTEwLDExNSAqKioqCi0tLSAxMjMsMTM3IC0tLS0KICAJ CQkJb2sgPSBjaGVja19hbXByb2Nfc2lnbmF0dXJlKHByb2Nmb3JtLT5hbXByb2MsIEJPT0xPSUQs IHRydWUsCiAgCQkJCQkJCQkJCQkyLCAyLCBJTlRFUk5BTE9JRCwgSU5URVJOQUxPSUQpOwogIAkJ CQlicmVhazsKKyAJCQljYXNlIFNQR0lTVF9DT01QUkVTU19QUk9DOgorIAkJCQlpZiAoY29uZmln T3V0TGVmdHR5cGUgIT0gcHJvY2Zvcm0tPmFtcHJvY2xlZnR0eXBlIHx8CisgCQkJCQljb25maWdP dXRSaWdodHR5cGUgIT0gcHJvY2Zvcm0tPmFtcHJvY3JpZ2h0dHlwZSkKKyAJCQkJCW9rID0gZmFs c2U7CisgCQkJCWVsc2UKKyAJCQkJCW9rID0gY2hlY2tfYW1wcm9jX3NpZ25hdHVyZShwcm9jZm9y bS0+YW1wcm9jLAorIAkJCQkJCQkJCQkJCWNvbmZpZ091dC5sZWFmVHlwZSwgdHJ1ZSwKKyAJCQkJ CQkJCQkJCQkxLCAxLCBwcm9jZm9ybS0+YW1wcm9jbGVmdHR5cGUpOworIAkJCQlicmVhazsKICAJ CQlkZWZhdWx0OgogIAkJCQllcmVwb3J0KElORk8sCiAgCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX09CSkVDVF9ERUZJTklUSU9OKSwKKioqKioqKioqKioqKioqIHNwZ3ZhbGlkYXRlKE9p ZCBvcGNsYXNzb2lkKQoqKiogMjEyLDIxOCAqKioqCiAgCQlpZiAodGhpc2dyb3VwLT5sZWZ0dHlw ZSAhPSB0aGlzZ3JvdXAtPnJpZ2h0dHlwZSkKICAJCQljb250aW51ZTsKICAKISAJCWZvciAoaSA9 IDE7IGkgPD0gU1BHSVNUTlByb2M7IGkrKykKICAJCXsKICAJCQlpZiAoKHRoaXNncm91cC0+ZnVu Y3Rpb25zZXQgJiAoKCh1aW50NjQpIDEpIDw8IGkpKSAhPSAwKQogIAkJCQljb250aW51ZTsJCS8q IGdvdCBpdCAqLwotLS0gMjM0LDI0MCAtLS0tCiAgCQlpZiAodGhpc2dyb3VwLT5sZWZ0dHlwZSAh PSB0aGlzZ3JvdXAtPnJpZ2h0dHlwZSkKICAJCQljb250aW51ZTsKICAKISAJCWZvciAoaSA9IDE7 IGkgPD0gU1BHSVNUTlJlcXVpcmVkUHJvYzsgaSsrKQogIAkJewogIAkJCWlmICgodGhpc2dyb3Vw LT5mdW5jdGlvbnNldCAmICgoKHVpbnQ2NCkgMSkgPDwgaSkpICE9IDApCiAgCQkJCWNvbnRpbnVl OwkJLyogZ290IGl0ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3BnaXN0Lmgg Yi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3BnaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg ZDFiYzM5Ni4uMDZiMWQ4OAoqKiogYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3BnaXN0LmgKLS0tIGIv c3JjL2luY2x1ZGUvYWNjZXNzL3NwZ2lzdC5oCioqKioqKioqKioqKioqKgoqKiogMzAsMzYgKioq KgogICNkZWZpbmUgU1BHSVNUX1BJQ0tTUExJVF9QUk9DCQkJMwogICNkZWZpbmUgU1BHSVNUX0lO TkVSX0NPTlNJU1RFTlRfUFJPQwk0CiAgI2RlZmluZSBTUEdJU1RfTEVBRl9DT05TSVNURU5UX1BS T0MJCTUKISAjZGVmaW5lIFNQR0lTVE5Qcm9jCQkJCQkJNQogIAogIC8qCiAgICogQXJndW1lbnQg c3RydWN0cyBmb3Igc3BnX2NvbmZpZyBtZXRob2QKLS0tIDMwLDM4IC0tLS0KICAjZGVmaW5lIFNQ R0lTVF9QSUNLU1BMSVRfUFJPQwkJCTMKICAjZGVmaW5lIFNQR0lTVF9JTk5FUl9DT05TSVNURU5U X1BST0MJNAogICNkZWZpbmUgU1BHSVNUX0xFQUZfQ09OU0lTVEVOVF9QUk9DCQk1CiEgI2RlZmlu ZSBTUEdJU1RfQ09NUFJFU1NfUFJPQwkJCTYKISAjZGVmaW5lIFNQR0lTVE5SZXF1aXJlZFByb2MJ CQkJNQohICNkZWZpbmUgU1BHSVNUTlByb2MJCQkJCQk2CiAgCiAgLyoKICAgKiBBcmd1bWVudCBz dHJ1Y3RzIGZvciBzcGdfY29uZmlnIG1ldGhvZAoqKioqKioqKioqKioqKiogdHlwZWRlZiBzdHJ1 Y3Qgc3BnQ29uZmlnT3V0CioqKiA0NCw0OSAqKioqCi0tLSA0Niw1MiAtLS0tCiAgewogIAlPaWQJ CQlwcmVmaXhUeXBlOwkJLyogRGF0YSB0eXBlIG9mIGlubmVyLXR1cGxlIHByZWZpeGVzICovCiAg CU9pZAkJCWxhYmVsVHlwZTsJCS8qIERhdGEgdHlwZSBvZiBpbm5lci10dXBsZSBub2RlIGxhYmVs cyAqLworIAlPaWQJCQlsZWFmVHlwZTsJCS8qIERhdGEgdHlwZSBvZiBsZWFmLXR1cGxlIHZhbHVl cyAqLwogIAlib29sCQljYW5SZXR1cm5EYXRhOwkvKiBPcGNsYXNzIGNhbiByZWNvbnN0cnVjdCBv cmlnaW5hbCBkYXRhICovCiAgCWJvb2wJCWxvbmdWYWx1ZXNPSzsJLyogT3BjbGFzcyBjYW4gY29w ZSB3aXRoIHZhbHVlcyA+IDEgcGFnZSAqLwogIH0gc3BnQ29uZmlnT3V0OwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvYWNjZXNzL3NwZ2lzdF9wcml2YXRlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv c3BnaXN0X3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzRiMzIxLi5lNTVk ZTlkCioqKiBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zcGdpc3RfcHJpdmF0ZS5oCi0tLSBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9zcGdpc3RfcHJpdmF0ZS5oCioqKioqKioqKioqKioqKiB0eXBlZGVmIHN0 cnVjdCBTcEdpc3RTdGF0ZQoqKiogMTE5LDEyNSAqKioqCiAgewogIAlzcGdDb25maWdPdXQgY29u ZmlnOwkJLyogZmlsbGVkIGluIGJ5IG9wY2xhc3MgY29uZmlnIG1ldGhvZCAqLwogIAohIAlTcEdp c3RUeXBlRGVzYyBhdHRUeXBlOwkJLyogdHlwZSBvZiBpbnB1dCBkYXRhIGFuZCBsZWFmIHZhbHVl cyAqLwogIAlTcEdpc3RUeXBlRGVzYyBhdHRQcmVmaXhUeXBlOwkvKiB0eXBlIG9mIGlubmVyLXR1 cGxlIHByZWZpeCB2YWx1ZXMgKi8KICAJU3BHaXN0VHlwZURlc2MgYXR0TGFiZWxUeXBlOwkvKiB0 eXBlIG9mIG5vZGUgbGFiZWwgdmFsdWVzICovCiAgCi0tLSAxMTksMTI2IC0tLS0KICB7CiAgCXNw Z0NvbmZpZ091dCBjb25maWc7CQkvKiBmaWxsZWQgaW4gYnkgb3BjbGFzcyBjb25maWcgbWV0aG9k ICovCiAgCiEgCVNwR2lzdFR5cGVEZXNjIGF0dFR5cGU7CQkvKiB0eXBlIG9mIHZhbHVlcyB0byBi ZSBpbmRleGVkL3Jlc3RvcmVkICovCiEgCVNwR2lzdFR5cGVEZXNjIGF0dExlYWZUeXBlOwkJLyog dHlwZSBvZiBsZWFmLXR1cGxlIHZhbHVlcyAqLwogIAlTcEdpc3RUeXBlRGVzYyBhdHRQcmVmaXhU eXBlOwkvKiB0eXBlIG9mIGlubmVyLXR1cGxlIHByZWZpeCB2YWx1ZXMgKi8KICAJU3BHaXN0VHlw ZURlc2MgYXR0TGFiZWxUeXBlOwkvKiB0eXBlIG9mIG5vZGUgbGFiZWwgdmFsdWVzICovCiAgCioq KioqKioqKioqKioqKiB0eXBlZGVmIHN0cnVjdCBTcEdpc3RDYWNoZQoqKiogMTc4LDE4NCAqKioq CiAgewogIAlzcGdDb25maWdPdXQgY29uZmlnOwkJLyogZmlsbGVkIGluIGJ5IG9wY2xhc3MgY29u ZmlnIG1ldGhvZCAqLwogIAohIAlTcEdpc3RUeXBlRGVzYyBhdHRUeXBlOwkJLyogdHlwZSBvZiBp bnB1dCBkYXRhIGFuZCBsZWFmIHZhbHVlcyAqLwogIAlTcEdpc3RUeXBlRGVzYyBhdHRQcmVmaXhU eXBlOwkvKiB0eXBlIG9mIGlubmVyLXR1cGxlIHByZWZpeCB2YWx1ZXMgKi8KICAJU3BHaXN0VHlw ZURlc2MgYXR0TGFiZWxUeXBlOwkvKiB0eXBlIG9mIG5vZGUgbGFiZWwgdmFsdWVzICovCiAgCi0t LSAxNzksMTg2IC0tLS0KICB7CiAgCXNwZ0NvbmZpZ091dCBjb25maWc7CQkvKiBmaWxsZWQgaW4g Ynkgb3BjbGFzcyBjb25maWcgbWV0aG9kICovCiAgCiEgCVNwR2lzdFR5cGVEZXNjIGF0dFR5cGU7 CQkvKiB0eXBlIG9mIHZhbHVlcyB0byBiZSBpbmRleGVkL3Jlc3RvcmVkICovCiEgCVNwR2lzdFR5 cGVEZXNjIGF0dExlYWZUeXBlOwkJLyogdHlwZSBvZiBsZWFmLXR1cGxlIHZhbHVlcyAqLwogIAlT cEdpc3RUeXBlRGVzYyBhdHRQcmVmaXhUeXBlOwkvKiB0eXBlIG9mIGlubmVyLXR1cGxlIHByZWZp eCB2YWx1ZXMgKi8KICAJU3BHaXN0VHlwZURlc2MgYXR0TGFiZWxUeXBlOwkvKiB0eXBlIG9mIG5v ZGUgbGFiZWwgdmFsdWVzICovCiAgCioqKioqKioqKioqKioqKiB0eXBlZGVmIFNwR2lzdExlYWZU dXBsZURhdGEgKlNwR2lzdExlYWZUCioqKiAzMDAsMzA2ICoqKioKICAKICAjZGVmaW5lIFNHTFRI RFJTWgkJCU1BWEFMSUdOKHNpemVvZihTcEdpc3RMZWFmVHVwbGVEYXRhKSkKICAjZGVmaW5lIFNH TFREQVRBUFRSKHgpCQkoKChjaGFyICopICh4KSkgKyBTR0xUSERSU1opCiEgI2RlZmluZSBTR0xU REFUVU0oeCwgcykJCSgocyktPmF0dFR5cGUuYXR0Ynl2YWwgPyBcCiAgCQkJCQkJCSAqKERhdHVt ICopIFNHTFREQVRBUFRSKHgpIDogXAogIAkJCQkJCQkgUG9pbnRlckdldERhdHVtKFNHTFREQVRB UFRSKHgpKSkKICAKLS0tIDMwMiwzMDggLS0tLQogIAogICNkZWZpbmUgU0dMVEhEUlNaCQkJTUFY QUxJR04oc2l6ZW9mKFNwR2lzdExlYWZUdXBsZURhdGEpKQogICNkZWZpbmUgU0dMVERBVEFQVFIo eCkJCSgoKGNoYXIgKikgKHgpKSArIFNHTFRIRFJTWikKISAjZGVmaW5lIFNHTFREQVRVTSh4LCBz KQkJKChzKS0+YXR0TGVhZlR5cGUuYXR0Ynl2YWwgPyBcCiAgCQkJCQkJCSAqKERhdHVtICopIFNH TFREQVRBUFRSKHgpIDogXAogIAkJCQkJCQkgUG9pbnRlckdldERhdHVtKFNHTFREQVRBUFRSKHgp KSkKICAK --001a113d4ffee52f60055f9e1dd8--