From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4792 invoked by alias); 22 Sep 2009 01:39:12 -0000 Received: (qmail 4772 invoked by uid 22791); 22 Sep 2009 01:39:04 -0000 X-SWARE-Spam-Status: No, hits=4.7 required=5.0 tests=AWL,BAYES_50,J_CHICKENPOX_21,J_CHICKENPOX_31,J_CHICKENPOX_33,J_CHICKENPOX_34,J_CHICKENPOX_43,J_CHICKENPOX_44,J_CHICKENPOX_51,J_CHICKENPOX_54,J_CHICKENPOX_63,J_CHICKENPOX_64,J_CHICKENPOX_73,J_CHICKENPOX_74,J_CHICKENPOX_83,J_CHICKENPOX_84,J_CHICKENPOX_92,J_CHICKENPOX_93,SARE_MSGID_LONG40,SPF_PASS,URI_NOVOWEL X-Spam-Check-By: sourceware.org Received: from mail-bw0-f208.google.com (HELO mail-bw0-f208.google.com) (209.85.218.208) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 22 Sep 2009 01:38:54 +0000 Received: by bwz4 with SMTP id 4so2718793bwz.24 for ; Mon, 21 Sep 2009 18:38:51 -0700 (PDT) MIME-Version: 1.0 Received: by 10.204.8.155 with SMTP id h27mr234803bkh.55.1253583531441; Mon, 21 Sep 2009 18:38:51 -0700 (PDT) From: Rhys Ulerich Date: Tue, 22 Sep 2009 01:39:00 -0000 Message-ID: <4a00655d0909211838i5a1feacfq9bd4ddcad8f27206@mail.gmail.com> Subject: [PATCH] Adding multiset functionality atop GSL 1.13 To: gsl-discuss@sourceware.org Content-Type: multipart/mixed; boundary=000e0cd1fada167f86047420a90c Mailing-List: contact gsl-discuss-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gsl-discuss-owner@sourceware.org X-SW-Source: 2009-q3/txt/msg00065.txt.bz2 --000e0cd1fada167f86047420a90c Content-Type: text/plain; charset=ISO-8859-1 Content-length: 885 Hi all, Attached is a patch that adds multiset functionality atop GSL 1.13. Multisets are like combinations but with replacement-- a single item may appear multiple times. Element order is insignificant and enumeration uses lexicographical ordering. The patch builds very, very, very heavily on the existing combinations code. Documentation, an example, and unit tests are included. Please consider it for inclusion in the next feature release. - Rhys P.S. One weakness in the patch the amount of code duplication relative to combinations. The underlying data structures are the same, and only the _init_first, _init_last, _valid, _next, and _prev functions differ in a non-trivial way. With some thought to naming, multisets could be a combinations-with-replacement flag. If you accept the patch, please consider adding a TODO to both directories to merge the functionality. --000e0cd1fada167f86047420a90c Content-Type: text/x-diff; charset=US-ASCII; name="0001-Added-multiset-functionality-and-documentation-base.patch" Content-Disposition: attachment; filename="0001-Added-multiset-functionality-and-documentation-base.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fzvyrb4f0 Content-length: 67670 RnJvbSA2ZWZmZTkzYjY3Yjg0MjcxY2EyMWQ0ZmRlM2YxOWM3OWVlZmJkNDli IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBSaHlzIFVsZXJpY2gg PHJoeXMudWxlcmljaEBnbWFpbC5jb20+CkRhdGU6IE1vbiwgMjEgU2VwIDIw MDkgMjA6MjA6MjYgLTA1MDAKU3ViamVjdDogW1BBVENIXSBBZGRlZCBtdWx0 aXNldCBmdW5jdGlvbmFsaXR5IGFuZCBkb2N1bWVudGF0aW9uLCBiYXNlZCBh YnN1cmRseSBvbiBjb21iaW5hdGlvbnMgKFJoeXMgVWxlcmljaCkKCi0tLQog TWFrZWZpbGUuYW0gICAgICAgICAgICAgICB8ICAgIDQgKy0KIGNvbmZpZ3Vy ZS5hYyAgICAgICAgICAgICAgfCAgICAyICstCiBkb2MvTWFrZWZpbGUuYW0g ICAgICAgICAgIHwgICAgNiArLQogZG9jL2V4YW1wbGVzL211bHRpc2V0LmMg ICB8ICAgMjUgKysrKwogZG9jL2V4YW1wbGVzL211bHRpc2V0Lm91dCB8ICAg NzEgKysrKysrKysrKysrCiBkb2MvZ3NsLXJlZi50ZXhpICAgICAgICAgIHwg ICAgOSArLQogZG9jL211bHRpc2V0LnRleGkgICAgICAgICB8ICAyMDEgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIG11bHRpc2V0Ly5jdnNp Z25vcmUgICAgICAgfCAgICA4ICsrCiBtdWx0aXNldC9DaGFuZ2VMb2cgICAg ICAgIHwgICAgMyArCiBtdWx0aXNldC9NYWtlZmlsZS5hbSAgICAgIHwgICAy MSArKysrCiBtdWx0aXNldC9kZW1vLmMgICAgICAgICAgIHwgICA3MiArKysr KysrKysrKysKIG11bHRpc2V0L2ZpbGUuYyAgICAgICAgICAgfCAgMTE1ICsr KysrKysrKysrKysrKysrKysKIG11bHRpc2V0L2dzbF9tdWx0aXNldC5oICAg fCAgIDkzICsrKysrKysrKysrKysrKwogbXVsdGlzZXQvaW5pdC5jICAgICAg ICAgICB8ICAxMzAgKysrKysrKysrKysrKysrKysrKysrCiBtdWx0aXNldC9p bmxpbmUuYyAgICAgICAgIHwgICAyNCArKysrCiBtdWx0aXNldC9tdWx0aXNl dC5jICAgICAgIHwgIDE4MSArKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogbXVsdGlzZXQvdGVzdC5jICAgICAgICAgICB8ICAyNzggKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxNyBmaWxl cyBjaGFuZ2VkLCAxMjM1IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jL2V4YW1wbGVzL211bHRpc2V0LmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkb2MvZXhhbXBsZXMvbXVsdGlzZXQub3V0 CiBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jL211bHRpc2V0LnRleGkKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBtdWx0aXNldC8uY3ZzaWdub3JlCiBjcmVhdGUgbW9k ZSAxMDA2NDQgbXVsdGlzZXQvQ2hhbmdlTG9nCiBjcmVhdGUgbW9kZSAxMDA2 NDQgbXVsdGlzZXQvTWFrZWZpbGUuYW0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBt dWx0aXNldC9kZW1vLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBtdWx0aXNldC9m aWxlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBtdWx0aXNldC9nc2xfbXVsdGlz ZXQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IG11bHRpc2V0L2luaXQuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IG11bHRpc2V0L2lubGluZS5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgbXVsdGlzZXQvbXVsdGlzZXQuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IG11bHRpc2V0L3Rlc3QuYwoKZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFt IGIvTWFrZWZpbGUuYW0KaW5kZXggYjMwMzczMi4uNDViN2MxNSAxMDA2NDQK LS0tIGEvTWFrZWZpbGUuYW0KKysrIGIvTWFrZWZpbGUuYW0KQEAgLTIsOSAr Miw5IEBACiAKICMgQVVUT01BS0VfT1BUSU9OUyA9IHJlYWRtZS1hbHBoYQog Ci1TVUJESVJTID0gZ3NsIHV0aWxzIHN5cyB0ZXN0IGVyciBjb25zdCBjb21w bGV4IGNoZWIgYmxvY2sgdmVjdG9yIG1hdHJpeCBwZXJtdXRhdGlvbiBjb21i aW5hdGlvbiBzb3J0IGllZWUtdXRpbHMgY2JsYXMgYmxhcyBsaW5hbGcgZWln ZW4gc3BlY2Z1bmMgZGh0IHFybmcgcm5nIHJhbmRpc3QgZmZ0IHBvbHkgZml0 IG11bHRpZml0IHN0YXRpc3RpY3Mgc2ltYW4gc3VtIGludGVncmF0aW9uIGlu dGVycG9sYXRpb24gaGlzdG9ncmFtIG9kZS1pbml0dmFsIHJvb3RzIG11bHRp cm9vdHMgbWluIG11bHRpbWluIG1vbnRlIG50dXBsZSBkaWZmIGRlcml2IGNk ZiB3YXZlbGV0IGJzcGxpbmUgZG9jCitTVUJESVJTID0gZ3NsIHV0aWxzIHN5 cyB0ZXN0IGVyciBjb25zdCBjb21wbGV4IGNoZWIgYmxvY2sgdmVjdG9yIG1h dHJpeCBwZXJtdXRhdGlvbiBjb21iaW5hdGlvbiBtdWx0aXNldCBzb3J0IGll ZWUtdXRpbHMgY2JsYXMgYmxhcyBsaW5hbGcgZWlnZW4gc3BlY2Z1bmMgZGh0 IHFybmcgcm5nIHJhbmRpc3QgZmZ0IHBvbHkgZml0IG11bHRpZml0IHN0YXRp c3RpY3Mgc2ltYW4gc3VtIGludGVncmF0aW9uIGludGVycG9sYXRpb24gaGlz dG9ncmFtIG9kZS1pbml0dmFsIHJvb3RzIG11bHRpcm9vdHMgbWluIG11bHRp bWluIG1vbnRlIG50dXBsZSBkaWZmIGRlcml2IGNkZiB3YXZlbGV0IGJzcGxp bmUgZG9jCiAKLVNVQkxJQlMgPSBibG9jay9saWJnc2xibG9jay5sYSBibGFz L2xpYmdzbGJsYXMubGEgYnNwbGluZS9saWJnc2xic3BsaW5lLmxhIGNvbXBs ZXgvbGliZ3NsY29tcGxleC5sYSBjaGViL2xpYmdzbGNoZWIubGEgZGh0L2xp YmdzbGRodC5sYSBkaWZmL2xpYmdzbGRpZmYubGEgZGVyaXYvbGliZ3NsZGVy aXYubGEgZWlnZW4vbGliZ3NsZWlnZW4ubGEgZXJyL2xpYmdzbGVyci5sYSBm ZnQvbGliZ3NsZmZ0LmxhIGZpdC9saWJnc2xmaXQubGEgaGlzdG9ncmFtL2xp YmdzbGhpc3RvZ3JhbS5sYSBpZWVlLXV0aWxzL2xpYmdzbGllZWV1dGlscy5s YSBpbnRlZ3JhdGlvbi9saWJnc2xpbnRlZ3JhdGlvbi5sYSBpbnRlcnBvbGF0 aW9uL2xpYmdzbGludGVycG9sYXRpb24ubGEgbGluYWxnL2xpYmdzbGxpbmFs Zy5sYSBtYXRyaXgvbGliZ3NsbWF0cml4LmxhIG1pbi9saWJnc2xtaW4ubGEg bW9udGUvbGliZ3NsbW9udGUubGEgbXVsdGlmaXQvbGliZ3NsbXVsdGlmaXQu bGEgbXVsdGltaW4vbGliZ3NsbXVsdGltaW4ubGEgbXVsdGlyb290cy9saWJn c2xtdWx0aXJvb3RzLmxhIG50dXBsZS9saWJnc2xudHVwbGUubGEgb2RlLWlu aXR2YWwvbGliZ3Nsb2RlaXYubGEgcGVybXV0YXRpb24vbGliZ3NscGVybXV0 YXRpb24ubGEgY29tYmluYXRpb24vbGliZ3NsY29tYmluYXRpb24ubGEgcG9s eS9saWJnc2xwb2x5LmxhIHFybmcvbGliZ3NscXJuZy5sYSByYW5kaXN0L2xp YmdzbHJhbmRpc3QubGEgcm5nL2xpYmdzbHJuZy5sYSByb290cy9saWJnc2xy b290cy5sYSBzaW1hbi9saWJnc2xzaW1hbi5sYSBzb3J0L2xpYmdzbHNvcnQu bGEgc3BlY2Z1bmMvbGliZ3Nsc3BlY2Z1bmMubGEgc3RhdGlzdGljcy9saWJn c2xzdGF0aXN0aWNzLmxhIHN1bS9saWJnc2xzdW0ubGEgc3lzL2xpYmdzbHN5 cy5sYSB0ZXN0L2xpYmdzbHRlc3QubGEgdXRpbHMvbGlidXRpbHMubGEgdmVj dG9yL2xpYmdzbHZlY3Rvci5sYSBjZGYvbGliZ3NsY2RmLmxhIHdhdmVsZXQv bGliZ3Nsd2F2ZWxldC5sYQorU1VCTElCUyA9IGJsb2NrL2xpYmdzbGJsb2Nr LmxhIGJsYXMvbGliZ3NsYmxhcy5sYSBic3BsaW5lL2xpYmdzbGJzcGxpbmUu bGEgY29tcGxleC9saWJnc2xjb21wbGV4LmxhIGNoZWIvbGliZ3NsY2hlYi5s YSBkaHQvbGliZ3NsZGh0LmxhIGRpZmYvbGliZ3NsZGlmZi5sYSBkZXJpdi9s aWJnc2xkZXJpdi5sYSBlaWdlbi9saWJnc2xlaWdlbi5sYSBlcnIvbGliZ3Ns ZXJyLmxhIGZmdC9saWJnc2xmZnQubGEgZml0L2xpYmdzbGZpdC5sYSBoaXN0 b2dyYW0vbGliZ3NsaGlzdG9ncmFtLmxhIGllZWUtdXRpbHMvbGliZ3NsaWVl ZXV0aWxzLmxhIGludGVncmF0aW9uL2xpYmdzbGludGVncmF0aW9uLmxhIGlu dGVycG9sYXRpb24vbGliZ3NsaW50ZXJwb2xhdGlvbi5sYSBsaW5hbGcvbGli Z3NsbGluYWxnLmxhIG1hdHJpeC9saWJnc2xtYXRyaXgubGEgbWluL2xpYmdz bG1pbi5sYSBtb250ZS9saWJnc2xtb250ZS5sYSBtdWx0aWZpdC9saWJnc2xt dWx0aWZpdC5sYSBtdWx0aW1pbi9saWJnc2xtdWx0aW1pbi5sYSBtdWx0aXJv b3RzL2xpYmdzbG11bHRpcm9vdHMubGEgbnR1cGxlL2xpYmdzbG50dXBsZS5s YSBvZGUtaW5pdHZhbC9saWJnc2xvZGVpdi5sYSBwZXJtdXRhdGlvbi9saWJn c2xwZXJtdXRhdGlvbi5sYSBjb21iaW5hdGlvbi9saWJnc2xjb21iaW5hdGlv bi5sYSBtdWx0aXNldC9saWJnc2xtdWx0aXNldC5sYSBwb2x5L2xpYmdzbHBv bHkubGEgcXJuZy9saWJnc2xxcm5nLmxhIHJhbmRpc3QvbGliZ3NscmFuZGlz dC5sYSBybmcvbGliZ3Nscm5nLmxhIHJvb3RzL2xpYmdzbHJvb3RzLmxhIHNp bWFuL2xpYmdzbHNpbWFuLmxhIHNvcnQvbGliZ3Nsc29ydC5sYSBzcGVjZnVu Yy9saWJnc2xzcGVjZnVuYy5sYSBzdGF0aXN0aWNzL2xpYmdzbHN0YXRpc3Rp Y3MubGEgc3VtL2xpYmdzbHN1bS5sYSBzeXMvbGliZ3Nsc3lzLmxhIHRlc3Qv bGliZ3NsdGVzdC5sYSB1dGlscy9saWJ1dGlscy5sYSB2ZWN0b3IvbGliZ3Ns dmVjdG9yLmxhIGNkZi9saWJnc2xjZGYubGEgd2F2ZWxldC9saWJnc2x3YXZl bGV0LmxhCiAKIHBrZ2luY2x1ZGVfSEVBREVSUyA9IGdzbF9tYXRoLmggZ3Ns X3Bvd19pbnQuaCBnc2xfbmFuLmggZ3NsX21hY2hpbmUuaCBnc2xfbW9kZS5o IGdzbF9wcmVjaXNpb24uaCBnc2xfdHlwZXMuaCBnc2xfdmVyc2lvbi5oIGdz bF9taW5tYXguaCBnc2xfaW5saW5lLmgKIApkaWZmIC0tZ2l0IGEvY29uZmln dXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDVkZTdkOGYuLmIxZWIwM2Yg MTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMK QEAgLTU0Myw1ICs1NDMsNSBAQCBBSF9WRVJCQVRJTShbR1NMX0RJU0FCTEVf REVQUkVDQVRFRF0sCiAjZGVmaW5lIEdTTF9ESVNBQkxFX0RFUFJFQ0FURUQg MV0pCiAKIGRubAotQUNfQ09ORklHX0ZJTEVTKFtnc2xfdmVyc2lvbi5oIGdz bC5zcGVjIGdzbC9NYWtlZmlsZSB0ZXN0L01ha2VmaWxlIGVyci9NYWtlZmls ZSBzeXMvTWFrZWZpbGUgdXRpbHMvTWFrZWZpbGUgY29uc3QvTWFrZWZpbGUg bWluL01ha2VmaWxlIG11bHRpbWluL01ha2VmaWxlIGllZWUtdXRpbHMvTWFr ZWZpbGUgZmZ0L01ha2VmaWxlIHNwZWNmdW5jL01ha2VmaWxlIGRodC9NYWtl ZmlsZSBmaXQvTWFrZWZpbGUgbXVsdGlmaXQvTWFrZWZpbGUgYnNwbGluZS9N YWtlZmlsZSBzdGF0aXN0aWNzL01ha2VmaWxlIHN1bS9NYWtlZmlsZSByb290 cy9NYWtlZmlsZSBtdWx0aXJvb3RzL01ha2VmaWxlIG50dXBsZS9NYWtlZmls ZSBwb2x5L01ha2VmaWxlIHFybmcvTWFrZWZpbGUgcm5nL01ha2VmaWxlIHJh bmRpc3QvTWFrZWZpbGUgc2ltYW4vTWFrZWZpbGUgaW50ZWdyYXRpb24vTWFr ZWZpbGUgaW50ZXJwb2xhdGlvbi9NYWtlZmlsZSBkb2MvTWFrZWZpbGUgYmxv Y2svTWFrZWZpbGUgdmVjdG9yL01ha2VmaWxlIG1hdHJpeC9NYWtlZmlsZSBo aXN0b2dyYW0vTWFrZWZpbGUgbW9udGUvTWFrZWZpbGUgb2RlLWluaXR2YWwv TWFrZWZpbGUgY2JsYXMvTWFrZWZpbGUgYmxhcy9NYWtlZmlsZSBsaW5hbGcv TWFrZWZpbGUgZWlnZW4vTWFrZWZpbGUgcGVybXV0YXRpb24vTWFrZWZpbGUg Y29tYmluYXRpb24vTWFrZWZpbGUgc29ydC9NYWtlZmlsZSBjb21wbGV4L01h a2VmaWxlIGRpZmYvTWFrZWZpbGUgZGVyaXYvTWFrZWZpbGUgY2hlYi9NYWtl ZmlsZSBjZGYvTWFrZWZpbGUgd2F2ZWxldC9NYWtlZmlsZSBNYWtlZmlsZV0p CitBQ19DT05GSUdfRklMRVMoW2dzbF92ZXJzaW9uLmggZ3NsLnNwZWMgZ3Ns L01ha2VmaWxlIHRlc3QvTWFrZWZpbGUgZXJyL01ha2VmaWxlIHN5cy9NYWtl ZmlsZSB1dGlscy9NYWtlZmlsZSBjb25zdC9NYWtlZmlsZSBtaW4vTWFrZWZp bGUgbXVsdGltaW4vTWFrZWZpbGUgaWVlZS11dGlscy9NYWtlZmlsZSBmZnQv TWFrZWZpbGUgc3BlY2Z1bmMvTWFrZWZpbGUgZGh0L01ha2VmaWxlIGZpdC9N YWtlZmlsZSBtdWx0aWZpdC9NYWtlZmlsZSBic3BsaW5lL01ha2VmaWxlIHN0 YXRpc3RpY3MvTWFrZWZpbGUgc3VtL01ha2VmaWxlIHJvb3RzL01ha2VmaWxl IG11bHRpcm9vdHMvTWFrZWZpbGUgbnR1cGxlL01ha2VmaWxlIHBvbHkvTWFr ZWZpbGUgcXJuZy9NYWtlZmlsZSBybmcvTWFrZWZpbGUgcmFuZGlzdC9NYWtl ZmlsZSBzaW1hbi9NYWtlZmlsZSBpbnRlZ3JhdGlvbi9NYWtlZmlsZSBpbnRl cnBvbGF0aW9uL01ha2VmaWxlIGRvYy9NYWtlZmlsZSBibG9jay9NYWtlZmls ZSB2ZWN0b3IvTWFrZWZpbGUgbWF0cml4L01ha2VmaWxlIGhpc3RvZ3JhbS9N YWtlZmlsZSBtb250ZS9NYWtlZmlsZSBvZGUtaW5pdHZhbC9NYWtlZmlsZSBj Ymxhcy9NYWtlZmlsZSBibGFzL01ha2VmaWxlIGxpbmFsZy9NYWtlZmlsZSBl aWdlbi9NYWtlZmlsZSBwZXJtdXRhdGlvbi9NYWtlZmlsZSBjb21iaW5hdGlv bi9NYWtlZmlsZSBtdWx0aXNldC9NYWtlZmlsZSBzb3J0L01ha2VmaWxlIGNv bXBsZXgvTWFrZWZpbGUgZGlmZi9NYWtlZmlsZSBkZXJpdi9NYWtlZmlsZSBj aGViL01ha2VmaWxlIGNkZi9NYWtlZmlsZSB3YXZlbGV0L01ha2VmaWxlIE1h a2VmaWxlXSkKIEFDX09VVFBVVApkaWZmIC0tZ2l0IGEvZG9jL01ha2VmaWxl LmFtIGIvZG9jL01ha2VmaWxlLmFtCmluZGV4IDQxNTc4ZTYuLmMxNzIyNTAg MTAwNjQ0Ci0tLSBhL2RvYy9NYWtlZmlsZS5hbQorKysgYi9kb2MvTWFrZWZp bGUuYW0KQEAgLTIsMTUgKzIsMTUgQEAKIAogaW5mb19URVhJTkZPUyA9IGdz bC1yZWYudGV4aQogbm9pbnN0X1RFWElORk9TID0gZ3NsLWRlc2lnbi50ZXhp Ci1nc2xfcmVmX1RFWElORk9TID0gZXJyLnRleGkgY2JsYXMudGV4aSBibGFz LnRleGkgbWluLnRleGkgZmZ0LnRleGkgcm5nLnRleGkgcmFuZGlzdC50ZXhp IHJvb3RzLnRleGkgc3RhdGlzdGljcy50ZXhpIHNwZWNmdW5jLnRleGkgc3Bl Y2Z1bmMtYWlyeS50ZXhpIHNwZWNmdW5jLWJlc3NlbC50ZXhpIHNwZWNmdW5j LWNsYXVzZW4udGV4aSBzcGVjZnVuYy1jb3Vsb21iLnRleGkgc3BlY2Z1bmMt Y291cGxpbmcudGV4aSBzcGVjZnVuYy1kYXdzb24udGV4aSBzcGVjZnVuYy1k ZWJ5ZS50ZXhpIHNwZWNmdW5jLWRpbG9nLnRleGkgc3BlY2Z1bmMtZWxlbWVu dGFyeS50ZXhpIHNwZWNmdW5jLWVsbGludC50ZXhpIHNwZWNmdW5jLWVsbGph Yy50ZXhpIHNwZWNmdW5jLWVyZi50ZXhpIHNwZWNmdW5jLWV4cC50ZXhpIHNw ZWNmdW5jLWV4cGludC50ZXhpIHNwZWNmdW5jLWZlcm1pLWRpcmFjLnRleGkg c3BlY2Z1bmMtZ2FtbWEudGV4aSBzcGVjZnVuYy1nZWdlbmJhdWVyLnRleGkg c3BlY2Z1bmMtaHlwZXJnLnRleGkgc3BlY2Z1bmMtbGFtYmVydC50ZXhpIHNw ZWNmdW5jLWxhZ3VlcnJlLnRleGkgc3BlY2Z1bmMtbGVnZW5kcmUudGV4aSBz cGVjZnVuYy1sb2cudGV4aSBzcGVjZnVuYy1tYXRoaWV1LnRleGkgc3BlY2Z1 bmMtcG93LWludC50ZXhpIHNwZWNmdW5jLXBzaS50ZXhpIHNwZWNmdW5jLXN5 bmNocm90cm9uLnRleGkgc3BlY2Z1bmMtdHJhbnNwb3J0LnRleGkgc3BlY2Z1 bmMtdHJpZy50ZXhpIHNwZWNmdW5jLXpldGEudGV4aSBzaW1hbi50ZXhpIHZl Y3RvcnMudGV4aSBkZWJ1Zy50ZXhpIGhpc3RvZ3JhbS50ZXhpIG9kZS1pbml0 dmFsLnRleGkgaW50ZWdyYXRpb24udGV4aSBpZWVlNzU0LnRleGkgbW9udGVj YXJsby50ZXhpIHN1bS50ZXhpIGludHJvLnRleGkgdXNhZ2UudGV4aSBkd3Qu dGV4aSBkaHQudGV4aSBpbnRlcnAudGV4aSBwb2x5LnRleGkgbGluYWxnLnRl eGkgZWlnZW4udGV4aSBtdWx0aXJvb3RzLnRleGkgc29ydC50ZXhpIHBlcm11 dGF0aW9uLnRleGkgY29tYmluYXRpb24udGV4aSBjb21wbGV4LnRleGkgbWF0 aC50ZXhpIGZpdHRpbmcudGV4aSBtdWx0aWZpdC50ZXhpIGNvbnN0LnRleGkg bnR1cGxlLnRleGkgZGlmZi50ZXhpIHFybmcudGV4aSBjaGViLnRleGkgbXVs dGltaW4udGV4aSBncGwudGV4aSBmZGwudGV4aSBhdXRvY29uZi50ZXhpIGZy ZWVtYW51YWxzLnRleGkgYnNwbGluZS50ZXhpCitnc2xfcmVmX1RFWElORk9T ID0gZXJyLnRleGkgY2JsYXMudGV4aSBibGFzLnRleGkgbWluLnRleGkgZmZ0 LnRleGkgcm5nLnRleGkgcmFuZGlzdC50ZXhpIHJvb3RzLnRleGkgc3RhdGlz dGljcy50ZXhpIHNwZWNmdW5jLnRleGkgc3BlY2Z1bmMtYWlyeS50ZXhpIHNw ZWNmdW5jLWJlc3NlbC50ZXhpIHNwZWNmdW5jLWNsYXVzZW4udGV4aSBzcGVj ZnVuYy1jb3Vsb21iLnRleGkgc3BlY2Z1bmMtY291cGxpbmcudGV4aSBzcGVj ZnVuYy1kYXdzb24udGV4aSBzcGVjZnVuYy1kZWJ5ZS50ZXhpIHNwZWNmdW5j LWRpbG9nLnRleGkgc3BlY2Z1bmMtZWxlbWVudGFyeS50ZXhpIHNwZWNmdW5j LWVsbGludC50ZXhpIHNwZWNmdW5jLWVsbGphYy50ZXhpIHNwZWNmdW5jLWVy Zi50ZXhpIHNwZWNmdW5jLWV4cC50ZXhpIHNwZWNmdW5jLWV4cGludC50ZXhp IHNwZWNmdW5jLWZlcm1pLWRpcmFjLnRleGkgc3BlY2Z1bmMtZ2FtbWEudGV4 aSBzcGVjZnVuYy1nZWdlbmJhdWVyLnRleGkgc3BlY2Z1bmMtaHlwZXJnLnRl eGkgc3BlY2Z1bmMtbGFtYmVydC50ZXhpIHNwZWNmdW5jLWxhZ3VlcnJlLnRl eGkgc3BlY2Z1bmMtbGVnZW5kcmUudGV4aSBzcGVjZnVuYy1sb2cudGV4aSBz cGVjZnVuYy1tYXRoaWV1LnRleGkgc3BlY2Z1bmMtcG93LWludC50ZXhpIHNw ZWNmdW5jLXBzaS50ZXhpIHNwZWNmdW5jLXN5bmNocm90cm9uLnRleGkgc3Bl Y2Z1bmMtdHJhbnNwb3J0LnRleGkgc3BlY2Z1bmMtdHJpZy50ZXhpIHNwZWNm dW5jLXpldGEudGV4aSBzaW1hbi50ZXhpIHZlY3RvcnMudGV4aSBkZWJ1Zy50 ZXhpIGhpc3RvZ3JhbS50ZXhpIG9kZS1pbml0dmFsLnRleGkgaW50ZWdyYXRp b24udGV4aSBpZWVlNzU0LnRleGkgbW9udGVjYXJsby50ZXhpIHN1bS50ZXhp IGludHJvLnRleGkgdXNhZ2UudGV4aSBkd3QudGV4aSBkaHQudGV4aSBpbnRl cnAudGV4aSBwb2x5LnRleGkgbGluYWxnLnRleGkgZWlnZW4udGV4aSBtdWx0 aXJvb3RzLnRleGkgc29ydC50ZXhpIHBlcm11dGF0aW9uLnRleGkgY29tYmlu YXRpb24udGV4aSBtdWx0aXNldC50ZXhpIGNvbXBsZXgudGV4aSBtYXRoLnRl eGkgZml0dGluZy50ZXhpIG11bHRpZml0LnRleGkgY29uc3QudGV4aSBudHVw bGUudGV4aSBkaWZmLnRleGkgcXJuZy50ZXhpIGNoZWIudGV4aSBtdWx0aW1p bi50ZXhpIGdwbC50ZXhpIGZkbC50ZXhpIGF1dG9jb25mLnRleGkgZnJlZW1h bnVhbHMudGV4aSBic3BsaW5lLnRleGkKIAogbWFuX01BTlMgPSBnc2wuMyBn c2wtY29uZmlnLjEgZ3NsLXJhbmRpc3QuMSBnc2wtaGlzdG9ncmFtLjEKIAog ZmlndXJlcyA9IG11bHRpbWluLmVwcyBzaW1hbi10ZXN0LmVwcyBzaW1hbi1l bmVyZ3kuZXBzIDEyLWNpdGllcy5lcHMgaW5pdGlhbC1yb3V0ZS5lcHMgZmlu YWwtcm91dGUuZXBzIGZmdC1jb21wbGV4LXJhZGl4Mi1mLmVwcyBmZnQtY29t cGxleC1yYWRpeDItdC5lcHMgZmZ0LWNvbXBsZXgtcmFkaXgyLmVwcyBmZnQt cmVhbC1taXhlZHJhZGl4LmVwcyByb290cy1iaXNlY3Rpb24uZXBzIHJvb3Rz LWZhbHNlLXBvc2l0aW9uLmVwcyByb290cy1uZXd0b25zLW1ldGhvZC5lcHMg cm9vdHMtc2VjYW50LW1ldGhvZC5lcHMgaGlzdG9ncmFtLmVwcyBoaXN0b2dy YW0yZC5lcHMgbWluLWludGVydmFsLmVwcyBmaXQtd2xpbmVhci5lcHMgZml0 LXdsaW5lYXIyLmVwcyBmaXQtZXhwLmVwcyBudHVwbGUuZXBzIHFybmcuZXBz IGNoZWIuZXBzIHZkcC5lcHMgaW50ZXJwMi5lcHMgcmFuZC1iZXRhLnRleCBy YW5kLWJpbm9taWFsLnRleCByYW5kLWNhdWNoeS50ZXggcmFuZC1jaGlzcS50 ZXggcmFuZC1lcmxhbmcudGV4IHJhbmQtZXhwb25lbnRpYWwudGV4IHJhbmQt ZmRpc3QudGV4IHJhbmQtZmxhdC50ZXggcmFuZC1nYW1tYS50ZXggcmFuZC1n YXVzc2lhbi50ZXggcmFuZC1nZW9tZXRyaWMudGV4IHJhbmQtbGFwbGFjZS50 ZXggcmFuZC1sb2dhcml0aG1pYy50ZXggcmFuZC1sb2dpc3RpYy50ZXggcmFu ZC1sb2dub3JtYWwudGV4IHJhbmQtcGFyZXRvLnRleCByYW5kLXBvaXNzb24u dGV4IHJhbmQtaHlwZXJnZW9tZXRyaWMudGV4IHJhbmQtbmJpbm9taWFsLnRl eCByYW5kLXBhc2NhbC50ZXggcmFuZC1iaXZhcmlhdGUtZ2F1c3NpYW4udGV4 IHJhbmQtcmF5bGVpZ2gudGV4IHJhbmQtcmF5bGVpZ2gtdGFpbC50ZXggcmFu ZC10ZGlzdC50ZXggcmFuZC13ZWlidWxsLnRleCByYW5kb20td2Fsay50ZXgg cmFuZHBsb3RzLmducCByYW5kLWV4cHBvdy50ZXggcmFuZC1sZXZ5LnRleCBy YW5kLWxldnlza2V3LnRleCByYW5kLWd1bWJlbC50ZXggcmFuZC1iZXJub3Vs bGkudGV4IHJhbmQtZ2F1c3NpYW4tdGFpbC50ZXggcmFuZC1ndW1iZWwxLnRl eCByYW5kLWd1bWJlbDIudGV4IGxhbmRhdS5kYXQgcmFuZC1sYW5kYXUudGV4 IGR3dC1vcmlnLmVwcyBkd3Qtc2FtcC5lcHMgaW50ZXJwcDIuZXBzIGJzcGxp bmUuZXBzCiAKLWV4YW1wbGVzX3NyYyA9IGV4YW1wbGVzL2JsYXMuYyBleGFt cGxlcy9ibG9jay5jIGV4YW1wbGVzL2NibGFzLmMgZXhhbXBsZXMvY2RmLmMg ZXhhbXBsZXMvY2hlYi5jIGV4YW1wbGVzL2NvbWJpbmF0aW9uLmMgZXhhbXBs ZXMvY29uc3QuYyBleGFtcGxlcy9kZW1vX2ZuLmMgZXhhbXBsZXMvZGlmZi5j IGV4YW1wbGVzL2VpZ2VuLmMgZXhhbXBsZXMvZmZ0LmMgZXhhbXBsZXMvZmZ0 bXIuYyBleGFtcGxlcy9mZnRyZWFsLmMgZXhhbXBsZXMvZml0dGluZy5jIGV4 YW1wbGVzL2ZpdHRpbmcyLmMgZXhhbXBsZXMvZml0dGluZzMuYyBleGFtcGxl cy9oaXN0b2dyYW0uYyBleGFtcGxlcy9oaXN0b2dyYW0yZC5jIGV4YW1wbGVz L2llZWUuYyBleGFtcGxlcy9pZWVlcm91bmQuYyBleGFtcGxlcy9pbnRlZ3Jh dGlvbi5jIGV4YW1wbGVzL2ludGVycC5jIGV4YW1wbGVzL2ludHJvLmMgZXhh bXBsZXMvbGluYWxnbHUuYyBleGFtcGxlcy9tYXRyaXguYyBleGFtcGxlcy9t YXRyaXh3LmMgZXhhbXBsZXMvbWluLmMgZXhhbXBsZXMvbW9udGUuYyBleGFt cGxlcy9udHVwbGVyLmMgZXhhbXBsZXMvbnR1cGxldy5jIGV4YW1wbGVzL29k ZS1pbml0dmFsLmMgZXhhbXBsZXMvb2RlZml4ZWQuYyBleGFtcGxlcy9wZXJt c2VxLmMgZXhhbXBsZXMvcGVybXNodWZmbGUuYyBleGFtcGxlcy9wb2x5cm9v dHMuYyBleGFtcGxlcy9xcm5nLmMgZXhhbXBsZXMvcmFuZHBvaXNzb24uYyBl eGFtcGxlcy9yYW5kd2Fsay5jIGV4YW1wbGVzL3JuZy5jIGV4YW1wbGVzL3Ju Z3VuaWYuYyBleGFtcGxlcy9yb290bmV3dC5jIGV4YW1wbGVzL3Jvb3RzLmMg ZXhhbXBsZXMvc2ltYW4uYyBleGFtcGxlcy9zb3J0c21hbGwuYyBleGFtcGxl cy9zcGVjZnVuLmMgZXhhbXBsZXMvc3BlY2Z1bl9lLmMgZXhhbXBsZXMvc3Rh dC5jIGV4YW1wbGVzL3N0YXRzb3J0LmMgZXhhbXBsZXMvc3VtLmMgZXhhbXBs ZXMvdmVjdG9yLmMgZXhhbXBsZXMvdmVjdG9yci5jIGV4YW1wbGVzL3ZlY3Rv cnZpZXcuYyBleGFtcGxlcy92ZWN0b3J3LmMgZXhhbXBsZXMvZGVtb19mbi5o IGV4YW1wbGVzL2R3dC5jIGV4YW1wbGVzL2V4cGZpdC5jIGV4YW1wbGVzL25s Zml0LmMgZXhhbXBsZXMvaW50ZXJwcC5jIGV4YW1wbGVzL2VpZ2VuX25vbnN5 bW0uYyBleGFtcGxlcy9ic3BsaW5lLmMgZXhhbXBsZXMvbXVsdGltaW4uYyBl eGFtcGxlcy9tdWx0aW1pbmZuLmMgZXhhbXBsZXMvbm1zaW1wbGV4LmMKK2V4 YW1wbGVzX3NyYyA9IGV4YW1wbGVzL2JsYXMuYyBleGFtcGxlcy9ibG9jay5j IGV4YW1wbGVzL2NibGFzLmMgZXhhbXBsZXMvY2RmLmMgZXhhbXBsZXMvY2hl Yi5jIGV4YW1wbGVzL2NvbWJpbmF0aW9uLmMgZXhhbXBsZXMvbXVsdGlzZXQu YyBleGFtcGxlcy9jb25zdC5jIGV4YW1wbGVzL2RlbW9fZm4uYyBleGFtcGxl cy9kaWZmLmMgZXhhbXBsZXMvZWlnZW4uYyBleGFtcGxlcy9mZnQuYyBleGFt cGxlcy9mZnRtci5jIGV4YW1wbGVzL2ZmdHJlYWwuYyBleGFtcGxlcy9maXR0 aW5nLmMgZXhhbXBsZXMvZml0dGluZzIuYyBleGFtcGxlcy9maXR0aW5nMy5j IGV4YW1wbGVzL2hpc3RvZ3JhbS5jIGV4YW1wbGVzL2hpc3RvZ3JhbTJkLmMg ZXhhbXBsZXMvaWVlZS5jIGV4YW1wbGVzL2llZWVyb3VuZC5jIGV4YW1wbGVz L2ludGVncmF0aW9uLmMgZXhhbXBsZXMvaW50ZXJwLmMgZXhhbXBsZXMvaW50 cm8uYyBleGFtcGxlcy9saW5hbGdsdS5jIGV4YW1wbGVzL21hdHJpeC5jIGV4 YW1wbGVzL21hdHJpeHcuYyBleGFtcGxlcy9taW4uYyBleGFtcGxlcy9tb250 ZS5jIGV4YW1wbGVzL250dXBsZXIuYyBleGFtcGxlcy9udHVwbGV3LmMgZXhh bXBsZXMvb2RlLWluaXR2YWwuYyBleGFtcGxlcy9vZGVmaXhlZC5jIGV4YW1w bGVzL3Blcm1zZXEuYyBleGFtcGxlcy9wZXJtc2h1ZmZsZS5jIGV4YW1wbGVz L3BvbHlyb290cy5jIGV4YW1wbGVzL3FybmcuYyBleGFtcGxlcy9yYW5kcG9p c3Nvbi5jIGV4YW1wbGVzL3JhbmR3YWxrLmMgZXhhbXBsZXMvcm5nLmMgZXhh bXBsZXMvcm5ndW5pZi5jIGV4YW1wbGVzL3Jvb3RuZXd0LmMgZXhhbXBsZXMv cm9vdHMuYyBleGFtcGxlcy9zaW1hbi5jIGV4YW1wbGVzL3NvcnRzbWFsbC5j IGV4YW1wbGVzL3NwZWNmdW4uYyBleGFtcGxlcy9zcGVjZnVuX2UuYyBleGFt cGxlcy9zdGF0LmMgZXhhbXBsZXMvc3RhdHNvcnQuYyBleGFtcGxlcy9zdW0u YyBleGFtcGxlcy92ZWN0b3IuYyBleGFtcGxlcy92ZWN0b3JyLmMgZXhhbXBs ZXMvdmVjdG9ydmlldy5jIGV4YW1wbGVzL3ZlY3RvcncuYyBleGFtcGxlcy9k ZW1vX2ZuLmggZXhhbXBsZXMvZHd0LmMgZXhhbXBsZXMvZXhwZml0LmMgZXhh bXBsZXMvbmxmaXQuYyBleGFtcGxlcy9pbnRlcnBwLmMgZXhhbXBsZXMvZWln ZW5fbm9uc3ltbS5jIGV4YW1wbGVzL2JzcGxpbmUuYyBleGFtcGxlcy9tdWx0 aW1pbi5jIGV4YW1wbGVzL211bHRpbWluZm4uYyBleGFtcGxlcy9ubXNpbXBs ZXguYwogCi1leGFtcGxlc19vdXQgPSBleGFtcGxlcy9ibGFzLm91dCBleGFt cGxlcy9ibG9jay5vdXQgZXhhbXBsZXMvY2JsYXMub3V0IGV4YW1wbGVzL2Nk Zi5vdXQgZXhhbXBsZXMvY29tYmluYXRpb24ub3V0IGV4YW1wbGVzL2NvbnN0 Lm91dCBleGFtcGxlcy9kaWZmLm91dCBleGFtcGxlcy9pbnRlZ3JhdGlvbi5v dXQgZXhhbXBsZXMvaW50cm8ub3V0IGV4YW1wbGVzL2xpbmFsZ2x1Lm91dCBl eGFtcGxlcy9taW4ub3V0IGV4YW1wbGVzL3BvbHlyb290cy5vdXQgZXhhbXBs ZXMvcmFuZHBvaXNzb24uMi5vdXQgZXhhbXBsZXMvcmFuZHBvaXNzb24ub3V0 IGV4YW1wbGVzL3JuZy5vdXQgZXhhbXBsZXMvcm5ndW5pZi4yLm91dCBleGFt cGxlcy9ybmd1bmlmLm91dCBleGFtcGxlcy9zb3J0c21hbGwub3V0IGV4YW1w bGVzL3NwZWNmdW4ub3V0IGV4YW1wbGVzL3NwZWNmdW5fZS5vdXQgZXhhbXBs ZXMvc3RhdC5vdXQgZXhhbXBsZXMvc3RhdHNvcnQub3V0IGV4YW1wbGVzL3N1 bS5vdXQgZXhhbXBsZXMvdmVjdG9ydmlldy5vdXQgZXhhbXBsZXMvZWNnLmRh dCBleGFtcGxlcy9kd3QuZGF0IGV4YW1wbGVzL211bHRpbWluLm91dCBleGFt cGxlcy9ubXNpbXBsZXgub3V0CitleGFtcGxlc19vdXQgPSBleGFtcGxlcy9i bGFzLm91dCBleGFtcGxlcy9ibG9jay5vdXQgZXhhbXBsZXMvY2JsYXMub3V0 IGV4YW1wbGVzL2NkZi5vdXQgZXhhbXBsZXMvY29tYmluYXRpb24ub3V0IGV4 YW1wbGVzL211bHRpc2V0Lm91dCBleGFtcGxlcy9jb25zdC5vdXQgZXhhbXBs ZXMvZGlmZi5vdXQgZXhhbXBsZXMvaW50ZWdyYXRpb24ub3V0IGV4YW1wbGVz L2ludHJvLm91dCBleGFtcGxlcy9saW5hbGdsdS5vdXQgZXhhbXBsZXMvbWlu Lm91dCBleGFtcGxlcy9wb2x5cm9vdHMub3V0IGV4YW1wbGVzL3JhbmRwb2lz c29uLjIub3V0IGV4YW1wbGVzL3JhbmRwb2lzc29uLm91dCBleGFtcGxlcy9y bmcub3V0IGV4YW1wbGVzL3JuZ3VuaWYuMi5vdXQgZXhhbXBsZXMvcm5ndW5p Zi5vdXQgZXhhbXBsZXMvc29ydHNtYWxsLm91dCBleGFtcGxlcy9zcGVjZnVu Lm91dCBleGFtcGxlcy9zcGVjZnVuX2Uub3V0IGV4YW1wbGVzL3N0YXQub3V0 IGV4YW1wbGVzL3N0YXRzb3J0Lm91dCBleGFtcGxlcy9zdW0ub3V0IGV4YW1w bGVzL3ZlY3RvcnZpZXcub3V0IGV4YW1wbGVzL2VjZy5kYXQgZXhhbXBsZXMv ZHd0LmRhdCBleGFtcGxlcy9tdWx0aW1pbi5vdXQgZXhhbXBsZXMvbm1zaW1w bGV4Lm91dAogCiBub2luc3RfREFUQSA9ICQoZXhhbXBsZXNfc3JjKSAkKGV4 YW1wbGVzX291dCkgJChmaWd1cmVzKQogCmRpZmYgLS1naXQgYS9kb2MvZXhh bXBsZXMvbXVsdGlzZXQuYyBiL2RvYy9leGFtcGxlcy9tdWx0aXNldC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYzFlN2MKLS0t IC9kZXYvbnVsbAorKysgYi9kb2MvZXhhbXBsZXMvbXVsdGlzZXQuYwpAQCAt MCwwICsxLDI1IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxn c2wvZ3NsX211bHRpc2V0Lmg+CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAg Z3NsX211bHRpc2V0ICogYzsKKyAgc2l6ZV90IGk7CisKKyAgcHJpbnRmICgi QWxsIG11bHRpc2V0cyBvZiB7MCwxLDIsM30gYnkgc2l6ZTpcbiIpIDsKKyAg Zm9yIChpID0gMDsgaSA8PSA0OyBpKyspCisgICAgeworICAgICAgYyA9IGdz bF9tdWx0aXNldF9jYWxsb2MgKDQsIGkpOworICAgICAgZG8KKyAgICAgICAg eworICAgICAgICAgIHByaW50ZiAoInsiKTsKKyAgICAgICAgICBnc2xfbXVs dGlzZXRfZnByaW50ZiAoc3Rkb3V0LCBjLCAiICV1Iik7CisgICAgICAgICAg cHJpbnRmICgiIH1cbiIpOworICAgICAgICB9CisgICAgICB3aGlsZSAoZ3Ns X211bHRpc2V0X25leHQgKGMpID09IEdTTF9TVUNDRVNTKTsKKyAgICAgIGdz bF9tdWx0aXNldF9mcmVlIChjKTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9 CmRpZmYgLS1naXQgYS9kb2MvZXhhbXBsZXMvbXVsdGlzZXQub3V0IGIvZG9j L2V4YW1wbGVzL211bHRpc2V0Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5iMDcxZTFiCi0tLSAvZGV2L251bGwKKysrIGIvZG9j L2V4YW1wbGVzL211bHRpc2V0Lm91dApAQCAtMCwwICsxLDcxIEBACithbGwg bXVsdGlzZXRzIG9mIHswLDEsMiwzfSBieSBzaXplOgoreyB9Cit7IDAgfQor eyAxIH0KK3sgMiB9Cit7IDMgfQoreyAwIDAgfQoreyAwIDEgfQoreyAwIDIg fQoreyAwIDMgfQoreyAxIDEgfQoreyAxIDIgfQoreyAxIDMgfQoreyAyIDIg fQoreyAyIDMgfQoreyAzIDMgfQoreyAwIDAgMCB9Cit7IDAgMCAxIH0KK3sg MCAwIDIgfQoreyAwIDAgMyB9Cit7IDAgMSAxIH0KK3sgMCAxIDIgfQoreyAw IDEgMyB9Cit7IDAgMiAyIH0KK3sgMCAyIDMgfQoreyAwIDMgMyB9Cit7IDEg MSAxIH0KK3sgMSAxIDIgfQoreyAxIDEgMyB9Cit7IDEgMiAyIH0KK3sgMSAy IDMgfQoreyAxIDMgMyB9Cit7IDIgMiAyIH0KK3sgMiAyIDMgfQoreyAyIDMg MyB9Cit7IDMgMyAzIH0KK3sgMCAwIDAgMCB9Cit7IDAgMCAwIDEgfQoreyAw IDAgMCAyIH0KK3sgMCAwIDAgMyB9Cit7IDAgMCAxIDEgfQoreyAwIDAgMSAy IH0KK3sgMCAwIDEgMyB9Cit7IDAgMCAyIDIgfQoreyAwIDAgMiAzIH0KK3sg MCAwIDMgMyB9Cit7IDAgMSAxIDEgfQoreyAwIDEgMSAyIH0KK3sgMCAxIDEg MyB9Cit7IDAgMSAyIDIgfQoreyAwIDEgMiAzIH0KK3sgMCAxIDMgMyB9Cit7 IDAgMiAyIDIgfQoreyAwIDIgMiAzIH0KK3sgMCAyIDMgMyB9Cit7IDAgMyAz IDMgfQoreyAxIDEgMSAxIH0KK3sgMSAxIDEgMiB9Cit7IDEgMSAxIDMgfQor eyAxIDEgMiAyIH0KK3sgMSAxIDIgMyB9Cit7IDEgMSAzIDMgfQoreyAxIDIg MiAyIH0KK3sgMSAyIDIgMyB9Cit7IDEgMiAzIDMgfQoreyAxIDMgMyAzIH0K K3sgMiAyIDIgMiB9Cit7IDIgMiAyIDMgfQoreyAyIDIgMyAzIH0KK3sgMiAz IDMgMyB9Cit7IDMgMyAzIDMgfQpkaWZmIC0tZ2l0IGEvZG9jL2dzbC1yZWYu dGV4aSBiL2RvYy9nc2wtcmVmLnRleGkKaW5kZXggNmJiYTdjOS4uMTNiNTdk MiAxMDA2NDQKLS0tIGEvZG9jL2dzbC1yZWYudGV4aQorKysgYi9kb2MvZ3Ns LXJlZi50ZXhpCkBAIC0yNDgsNiArMjQ4LDcgQEAgcHJvamVjdCBob21lcGFn ZSB0aGFua3MgdG8gRGFpc3VrZSBUb21pbmFnYS4KICogVmVjdG9ycyBhbmQg TWF0cmljZXM6OiAgICAgICAgCiAqIFBlcm11dGF0aW9uczo6ICAgICAgICAg ICAgICAgIAogKiBDb21iaW5hdGlvbnM6OiAgICAgICAgICAgICAgICAKKyog TXVsdGlzZXRzOjoKICogU29ydGluZzo6ICAgICAgICAgICAgICAgICAgICAg CiAqIEJMQVMgU3VwcG9ydDo6ICAgICAgICAgICAgICAgIAogKiBMaW5lYXIg QWxnZWJyYTo6ICAgICAgICAgICAgICAKQEAgLTMyOSwxMSArMzMwLDE1IEBA IHByb2plY3QgaG9tZXBhZ2UgdGhhbmtzIHRvIERhaXN1a2UgVG9taW5hZ2Eu CiBAY2hhcHRlciBQZXJtdXRhdGlvbnMKIEBpbmNsdWRlIHBlcm11dGF0aW9u LnRleGkKIAotQG5vZGUgICBDb21iaW5hdGlvbnMsIFNvcnRpbmcsIFBlcm11 dGF0aW9ucywgVG9wCitAbm9kZSAgIENvbWJpbmF0aW9ucywgTXVsdGlzZXRz LCBQZXJtdXRhdGlvbnMsIFRvcAogQGNoYXB0ZXIgQ29tYmluYXRpb25zCiBA aW5jbHVkZSBjb21iaW5hdGlvbi50ZXhpCiAKLUBub2RlICBTb3J0aW5nLCBC TEFTIFN1cHBvcnQsIENvbWJpbmF0aW9ucywgVG9wCitAbm9kZSAgIE11bHRp c2V0cywgU29ydGluZywgQ29tYmluYXRpb25zLCBUb3AKK0BjaGFwdGVyIE11 bHRpc2V0cworQGluY2x1ZGUgbXVsdGlzZXQudGV4aQorCitAbm9kZSAgU29y dGluZywgQkxBUyBTdXBwb3J0LCBNdWx0aXNldHMsIFRvcAogQGNoYXB0ZXIg U29ydGluZwogQGluY2x1ZGUgc29ydC50ZXhpCiAKZGlmZiAtLWdpdCBhL2Rv Yy9tdWx0aXNldC50ZXhpIGIvZG9jL211bHRpc2V0LnRleGkKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwZjUzMgotLS0gL2Rldi9u dWxsCisrKyBiL2RvYy9tdWx0aXNldC50ZXhpCkBAIC0wLDAgKzEsMjAxIEBA CitAY2luZGV4IG11bHRpc2V0cworCitUaGlzIGNoYXB0ZXIgZGVzY3JpYmVz IGZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcgYW5kIG1hbmlwdWxhdGluZyBtdWx0 aXNldHMuIEEKK211bHRpc2V0IEBtYXRoe2N9IGlzIHJlcHJlc2VudGVkIGJ5 IGFuIGFycmF5IG9mIEBtYXRoe2t9IGludGVnZXJzIGluIHRoZSByYW5nZQor MCB0byBAbWF0aHtuLTF9LCB3aGVyZSBlYWNoIHZhbHVlIEBtYXRoe2NfaX0g bWF5IG9jY3VyIG1vcmUgdGhhbiBvbmNlLiAgVGhlCittdWx0aXNldCBAbWF0 aHtjfSBjb3JyZXNwb25kcyB0byBpbmRpY2VzIG9mIEBtYXRoe2t9IGVsZW1l bnRzIGNob3NlbiBmcm9tIGFuCitAbWF0aHtufSBlbGVtZW50IHZlY3RvciB3 aXRoIHJlcGxhY2VtZW50LiAgSW4gbWF0aGVtYXRpY2FsIHRlcm1zLCBAbWF0 aHtufSBpcwordGhlIGNhcmRpbmFsaXR5IG9mIHRoZSBtdWx0aXNldCB3aGls ZSBAbWF0aHtrfSBpcyB0aGUgbWF4aW11bSBtdWx0aXBsaWNpdHkgb2YKK2Fu eSB2YWx1ZS4gIE11bHRpc2V0cyBhcmUgdXNlZnVsLCBmb3IgZXhhbXBsZSwg d2hlbiBpdGVyYXRpbmcgb3ZlciB0aGUgaW5kaWNlcworb2YgYSBAbWF0aHtr fS10aCBvcmRlciBzeW1tZXRyaWMgdGVuc29yIGluIEBtYXRoe259LXNwYWNl LgorCitUaGUgZnVuY3Rpb25zIGRlc2NyaWJlZCBpbiB0aGlzIGNoYXB0ZXIg YXJlIGRlZmluZWQgaW4gdGhlIGhlYWRlciBmaWxlCitAZmlsZXtnc2xfbXVs dGlzZXQuaH0uCisKK0BtZW51CisqIFRoZSBNdWx0aXNldCBzdHJ1Y3Q6Ogor KiBNdWx0aXNldCBhbGxvY2F0aW9uOjoKKyogQWNjZXNzaW5nIG11bHRpc2V0 IGVsZW1lbnRzOjoKKyogTXVsdGlzZXQgcHJvcGVydGllczo6CisqIE11bHRp c2V0IGZ1bmN0aW9uczo6CisqIFJlYWRpbmcgYW5kIHdyaXRpbmcgbXVsdGlz ZXRzOjoKKyogTXVsdGlzZXQgRXhhbXBsZXM6OgorQGVuZCBtZW51CisKK0Bu b2RlIFRoZSBNdWx0aXNldCBzdHJ1Y3QKK0BzZWN0aW9uIFRoZSBNdWx0aXNl dCBzdHJ1Y3QKK0B0cGluZGV4IGdzbF9tdWx0aXNldAorQSBtdWx0aXNldCBp cyBkZWZpbmVkIGJ5IGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhyZWUgY29t cG9uZW50cywgdGhlCit2YWx1ZXMgb2YgQG1hdGh7bn0gYW5kIEBtYXRoe2t9 LCBhbmQgYSBwb2ludGVyIHRvIHRoZSBtdWx0aXNldCBhcnJheS4KK1RoZSBl bGVtZW50cyBvZiB0aGUgbXVsdGlzZXQgYXJyYXkgYXJlIGFsbCBvZiB0eXBl IEBjb2Rle3NpemVfdH0sIGFuZAorYXJlIHN0b3JlZCBpbiBpbmNyZWFzaW5n IG9yZGVyLiAgVGhlIEBjb2Rle2dzbF9tdWx0aXNldH0gc3RydWN0dXJlCits b29rcyBsaWtlIHRoaXMsCisKK0BleGFtcGxlCit0eXBlZGVmIHN0cnVjdAor QHsKKyAgc2l6ZV90IG47CisgIHNpemVfdCBrOworICBzaXplX3QgKmRhdGE7 CitAfSBnc2xfbXVsdGlzZXQ7CitAZW5kIGV4YW1wbGUKK0Bjb21tZW50CisK K0Bub2luZGVudAorCitAbm9kZSBNdWx0aXNldCBhbGxvY2F0aW9uCitAc2Vj dGlvbiBNdWx0aXNldCBhbGxvY2F0aW9uCisKK0BkZWZ0eXBlZnVuIHtnc2xf bXVsdGlzZXQgKn0gZ3NsX211bHRpc2V0X2FsbG9jIChzaXplX3QgQHZhcntu fSwgc2l6ZV90IEB2YXJ7a30pCitUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBt ZW1vcnkgZm9yIGEgbmV3IG11bHRpc2V0IHdpdGggcGFyYW1ldGVycyBAdmFy e259LAorQHZhcntrfS4gIFRoZSBtdWx0aXNldCBpcyBub3QgaW5pdGlhbGl6 ZWQgYW5kIGl0cyBlbGVtZW50cyBhcmUgdW5kZWZpbmVkLiAgVXNlCit0aGUg ZnVuY3Rpb24gQGNvZGV7Z3NsX211bHRpc2V0X2NhbGxvY30gaWYgeW91IHdh bnQgdG8gY3JlYXRlIGEgbXVsdGlzZXQgd2hpY2gKK2lzIGluaXRpYWxpemVk IHRvIHRoZSBsZXhpY29ncmFwaGljYWxseSBmaXJzdCBtdWx0aXNldCBlbGVt ZW50LiBBIG51bGwgcG9pbnRlcgoraXMgcmV0dXJuZWQgaWYgaW5zdWZmaWNp ZW50IG1lbW9yeSBpcyBhdmFpbGFibGUgdG8gY3JlYXRlIHRoZSBtdWx0aXNl dC4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB7Z3NsX211bHRp c2V0ICp9IGdzbF9tdWx0aXNldF9jYWxsb2MgKHNpemVfdCBAdmFye259LCBz aXplX3QgQHZhcntrfSkKK1RoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIG1lbW9y eSBmb3IgYSBuZXcgbXVsdGlzZXQgd2l0aCBwYXJhbWV0ZXJzIEB2YXJ7bn0s CitAdmFye2t9IGFuZCBpbml0aWFsaXplcyBpdCB0byB0aGUgbGV4aWNvZ3Jh cGhpY2FsbHkgZmlyc3QgbXVsdGlzZXQgZWxlbWVudC4gQQorbnVsbCBwb2lu dGVyIGlzIHJldHVybmVkIGlmIGluc3VmZmljaWVudCBtZW1vcnkgaXMgYXZh aWxhYmxlIHRvIGNyZWF0ZSB0aGUKK211bHRpc2V0LgorQGVuZCBkZWZ0eXBl ZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZ3NsX211bHRpc2V0X2luaXRfZmly c3QgKGdzbF9tdWx0aXNldCAqIEB2YXJ7Y30pCitUaGlzIGZ1bmN0aW9uIGlu aXRpYWxpemVzIHRoZSBtdWx0aXNldCBAdmFye2N9IHRvIHRoZSBsZXhpY29n cmFwaGljYWxseSBmaXJzdAorbXVsdGlzZXQgZWxlbWVudCwgaS5lLiBAbWF0 aHswfSByZXBlYXRlZCBAbWF0aHtrfSB0aW1lcy4KK0BlbmQgZGVmdHlwZWZ1 bgorCitAZGVmdHlwZWZ1biB2b2lkIGdzbF9tdWx0aXNldF9pbml0X2xhc3Qg KGdzbF9tdWx0aXNldCAqIEB2YXJ7Y30pCitUaGlzIGZ1bmN0aW9uIGluaXRp YWxpemVzIHRoZSBtdWx0aXNldCBAdmFye2N9IHRvIHRoZSBsZXhpY29ncmFw aGljYWxseSBsYXN0CittdWx0aXNldCBlbGVtZW50LCBpLmUuIEBtYXRoe24t MX0gcmVwZWF0ZWQgQG1hdGh7a30gdGltZXMuCitAZW5kIGRlZnR5cGVmdW4K KworQGRlZnR5cGVmdW4gdm9pZCBnc2xfbXVsdGlzZXRfZnJlZSAoZ3NsX211 bHRpc2V0ICogQHZhcntjfSkKK1RoaXMgZnVuY3Rpb24gZnJlZXMgYWxsIHRo ZSBtZW1vcnkgdXNlZCBieSB0aGUgbXVsdGlzZXQgQHZhcntjfS4KK0BlbmQg ZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBpbnQgZ3NsX211bHRpc2V0X21l bWNweSAoZ3NsX211bHRpc2V0ICogQHZhcntkZXN0fSwgY29uc3QgZ3NsX211 bHRpc2V0ICogQHZhcntzcmN9KQorVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhl IGVsZW1lbnRzIG9mIHRoZSBtdWx0aXNldCBAdmFye3NyY30gaW50byB0aGUK K211bHRpc2V0IEB2YXJ7ZGVzdH0uICBUaGUgdHdvIG11bHRpc2V0cyBtdXN0 IGhhdmUgdGhlIHNhbWUgc2l6ZS4KK0BlbmQgZGVmdHlwZWZ1bgorCisKK0Bu b2RlIEFjY2Vzc2luZyBtdWx0aXNldCBlbGVtZW50cworQHNlY3Rpb24gQWNj ZXNzaW5nIG11bHRpc2V0IGVsZW1lbnRzCisKK1RoZSBmb2xsb3dpbmcgZnVu Y3Rpb24gY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBlbGVtZW50cyBvZiBh IG11bHRpc2V0LgorCitAZGVmdHlwZWZ1biBzaXplX3QgZ3NsX211bHRpc2V0 X2dldCAoY29uc3QgZ3NsX211bHRpc2V0ICogQHZhcntjfSwgY29uc3Qgc2l6 ZV90IEB2YXJ7aX0pCitUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVl IG9mIHRoZSBAdmFye2l9LXRoIGVsZW1lbnQgb2YgdGhlCittdWx0aXNldCBA dmFye2N9LiAgSWYgQHZhcntpfSBsaWVzIG91dHNpZGUgdGhlIGFsbG93ZWQg cmFuZ2Ugb2YgMCB0bworQG1hdGh7QHZhcntrfS0xfSB0aGVuIHRoZSBlcnJv ciBoYW5kbGVyIGlzIGludm9rZWQgYW5kIDAgaXMgcmV0dXJuZWQuICBAaW5s aW5lZm57fQorQGVuZCBkZWZ0eXBlZnVuCisKK0Bub2RlIE11bHRpc2V0IHBy b3BlcnRpZXMKK0BzZWN0aW9uIE11bHRpc2V0IHByb3BlcnRpZXMKKworQGRl ZnR5cGVmdW4gc2l6ZV90IGdzbF9tdWx0aXNldF9uIChjb25zdCBnc2xfbXVs dGlzZXQgKiBAdmFye2N9KQorVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBy YW5nZSAoQG1hdGh7bn0pIG9mIHRoZSBtdWx0aXNldCBAdmFye2N9LgorQGVu ZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHNpemVfdCBnc2xfbXVsdGlz ZXRfayAoY29uc3QgZ3NsX211bHRpc2V0ICogQHZhcntjfSkKK1RoaXMgZnVu Y3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIChAbWF0aHtr fSkgaW4gdGhlIG11bHRpc2V0IEB2YXJ7Y30uCitAZW5kIGRlZnR5cGVmdW4K KworQGRlZnR5cGVmdW4ge3NpemVfdCAqfSBnc2xfbXVsdGlzZXRfZGF0YSAo Y29uc3QgZ3NsX211bHRpc2V0ICogQHZhcntjfSkKK1RoaXMgZnVuY3Rpb24g cmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGFycmF5IG9mIGVsZW1lbnRzIGlu IHRoZQorbXVsdGlzZXQgQHZhcntjfS4KK0BlbmQgZGVmdHlwZWZ1bgorCitA ZGVmdHlwZWZ1biBpbnQgZ3NsX211bHRpc2V0X3ZhbGlkIChnc2xfbXVsdGlz ZXQgKiBAdmFye2N9KQorQGNpbmRleCBjaGVja2luZyBtdWx0aXNldCBmb3Ig dmFsaWRpdHkKK0BjaW5kZXggdGVzdGluZyBtdWx0aXNldCBmb3IgdmFsaWRp dHkKK1RoaXMgZnVuY3Rpb24gY2hlY2tzIHRoYXQgdGhlIG11bHRpc2V0IEB2 YXJ7Y30gaXMgdmFsaWQuICBUaGUgQHZhcntrfQorZWxlbWVudHMgc2hvdWxk IGxpZSBpbiB0aGUgcmFuZ2UgMCB0byBAbWF0aHtAdmFye259LTF9LCB3aXRo IGVhY2gKK3ZhbHVlIG9jY3VycmluZyBpbiBub25kZWNyZWFzaW5nIG9yZGVy LgorQGVuZCBkZWZ0eXBlZnVuCisKK0Bub2RlIE11bHRpc2V0IGZ1bmN0aW9u cworQHNlY3Rpb24gTXVsdGlzZXQgZnVuY3Rpb25zCisKK0BkZWZ0eXBlZnVu IGludCBnc2xfbXVsdGlzZXRfbmV4dCAoZ3NsX211bHRpc2V0ICogQHZhcntj fSkKK0BjaW5kZXggaXRlcmF0aW5nIHRocm91Z2ggbXVsdGlzZXRzCitUaGlz IGZ1bmN0aW9uIGFkdmFuY2VzIHRoZSBtdWx0aXNldCBAdmFye2N9IHRvIHRo ZSBuZXh0IG11bHRpc2V0IGVsZW1lbnQgaW4KK2xleGljb2dyYXBoaWMgb3Jk ZXIgYW5kIHJldHVybnMgQGNvZGV7R1NMX1NVQ0NFU1N9LiAgSWYgbm8gZnVy dGhlciBtdWx0aXNldHMKK2VsZW1lbnRzIGFyZSBhdmFpbGFibGUgaXQgcmV0 dXJucyBAY29kZXtHU0xfRkFJTFVSRX0gYW5kIGxlYXZlcyBAdmFye2N9Cit1 bm1vZGlmaWVkLiAgU3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QgbXVsdGlzZXQg YW5kIHJlcGVhdGVkbHkgYXBwbHlpbmcgdGhpcworZnVuY3Rpb24gd2lsbCBp dGVyYXRlIHRocm91Z2ggYWxsIHBvc3NpYmxlIG11bHRpc2V0cyBvZiBhIGdp dmVuIG9yZGVyLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGlu dCBnc2xfbXVsdGlzZXRfcHJldiAoZ3NsX211bHRpc2V0ICogQHZhcntjfSkK K1RoaXMgZnVuY3Rpb24gc3RlcHMgYmFja3dhcmRzIGZyb20gdGhlIG11bHRp c2V0IEB2YXJ7Y30gdG8gdGhlIHByZXZpb3VzCittdWx0aXNldCBlbGVtZW50 IGluIGxleGljb2dyYXBoaWMgb3JkZXIsIHJldHVybmluZyBAY29kZXtHU0xf U1VDQ0VTU30uICBJZiBubworcHJldmlvdXMgbXVsdGlzZXQgaXMgYXZhaWxh YmxlIGl0IHJldHVybnMgQGNvZGV7R1NMX0ZBSUxVUkV9IGFuZCBsZWF2ZXMg QHZhcntjfQordW5tb2RpZmllZC4KK0BlbmQgZGVmdHlwZWZ1bgorCitAbm9k ZSBSZWFkaW5nIGFuZCB3cml0aW5nIG11bHRpc2V0cworQHNlY3Rpb24gUmVh ZGluZyBhbmQgd3JpdGluZyBtdWx0aXNldHMKKworVGhlIGxpYnJhcnkgcHJv dmlkZXMgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIG11bHRp c2V0cyB0byBhCitmaWxlIGFzIGJpbmFyeSBkYXRhIG9yIGZvcm1hdHRlZCB0 ZXh0LgorCitAZGVmdHlwZWZ1biBpbnQgZ3NsX211bHRpc2V0X2Z3cml0ZSAo RklMRSAqIEB2YXJ7c3RyZWFtfSwgY29uc3QgZ3NsX211bHRpc2V0ICogQHZh cntjfSkKK1RoaXMgZnVuY3Rpb24gd3JpdGVzIHRoZSBlbGVtZW50cyBvZiB0 aGUgbXVsdGlzZXQgQHZhcntjfSB0byB0aGUKK3N0cmVhbSBAdmFye3N0cmVh bX0gaW4gYmluYXJ5IGZvcm1hdC4gIFRoZSBmdW5jdGlvbiByZXR1cm5zCitA Y29kZXtHU0xfRUZBSUxFRH0gaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSB3cml0 aW5nIHRvIHRoZSBmaWxlLiAgU2luY2UgdGhlCitkYXRhIGlzIHdyaXR0ZW4g aW4gdGhlIG5hdGl2ZSBiaW5hcnkgZm9ybWF0IGl0IG1heSBub3QgYmUgcG9y dGFibGUKK2JldHdlZW4gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuCitAZW5k IGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gaW50IGdzbF9tdWx0aXNldF9m cmVhZCAoRklMRSAqIEB2YXJ7c3RyZWFtfSwgZ3NsX211bHRpc2V0ICogQHZh cntjfSkKK1RoaXMgZnVuY3Rpb24gcmVhZHMgZWxlbWVudHMgZnJvbSB0aGUg b3BlbiBzdHJlYW0gQHZhcntzdHJlYW19IGludG8gdGhlCittdWx0aXNldCBA dmFye2N9IGluIGJpbmFyeSBmb3JtYXQuICBUaGUgbXVsdGlzZXQgQHZhcntj fSBtdXN0IGJlCitwcmVhbGxvY2F0ZWQgd2l0aCBjb3JyZWN0IHZhbHVlcyBv ZiBAbWF0aHtufSBhbmQgQG1hdGh7a30gc2luY2UgdGhlCitmdW5jdGlvbiB1 c2VzIHRoZSBzaXplIG9mIEB2YXJ7Y30gdG8gZGV0ZXJtaW5lIGhvdyBtYW55 IGJ5dGVzIHRvIHJlYWQuCitUaGUgZnVuY3Rpb24gcmV0dXJucyBAY29kZXtH U0xfRUZBSUxFRH0gaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSByZWFkaW5nCitm cm9tIHRoZSBmaWxlLiAgVGhlIGRhdGEgaXMgYXNzdW1lZCB0byBoYXZlIGJl ZW4gd3JpdHRlbiBpbiB0aGUgbmF0aXZlCitiaW5hcnkgZm9ybWF0IG9uIHRo ZSBzYW1lIGFyY2hpdGVjdHVyZS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVm dHlwZWZ1biBpbnQgZ3NsX211bHRpc2V0X2ZwcmludGYgKEZJTEUgKiBAdmFy e3N0cmVhbX0sIGNvbnN0IGdzbF9tdWx0aXNldCAqIEB2YXJ7Y30sIGNvbnN0 IGNoYXIgKiBAdmFye2Zvcm1hdH0pCitUaGlzIGZ1bmN0aW9uIHdyaXRlcyB0 aGUgZWxlbWVudHMgb2YgdGhlIG11bHRpc2V0IEB2YXJ7Y30KK2xpbmUtYnkt bGluZSB0byB0aGUgc3RyZWFtIEB2YXJ7c3RyZWFtfSB1c2luZyB0aGUgZm9y bWF0IHNwZWNpZmllcgorQHZhcntmb3JtYXR9LCB3aGljaCBzaG91bGQgYmUg c3VpdGFibGUgZm9yIGEgdHlwZSBvZiBAdmFye3NpemVfdH0uCitJbiBJU08g Qzk5IHRoZSB0eXBlIG1vZGlmaWVyIEBjb2Rle3p9IHJlcHJlc2VudHMgQGNv ZGV7c2l6ZV90fSwgc28KK0Bjb2RleyIlenVcbiJ9IGlzIGEgc3VpdGFibGUg Zm9ybWF0LkBmb290bm90ZXtJbiB2ZXJzaW9ucyBvZiB0aGUKK0dOVSBDIGxp YnJhcnkgcHJpb3IgdG8gdGhlIElTTyBDOTkgc3RhbmRhcmQsCit0aGUgdHlw ZSBtb2RpZmllciBAY29kZXtafSB3YXMgdXNlZCBpbnN0ZWFkLn0gIFRoZSBm dW5jdGlvbiByZXR1cm5zCitAY29kZXtHU0xfRUZBSUxFRH0gaWYgdGhlcmUg d2FzIGEgcHJvYmxlbSB3cml0aW5nIHRvIHRoZSBmaWxlLgorQGVuZCBkZWZ0 eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGludCBnc2xfbXVsdGlzZXRfZnNjYW5m IChGSUxFICogQHZhcntzdHJlYW19LCBnc2xfbXVsdGlzZXQgKiBAdmFye2N9 KQorVGhpcyBmdW5jdGlvbiByZWFkcyBmb3JtYXR0ZWQgZGF0YSBmcm9tIHRo ZSBzdHJlYW0gQHZhcntzdHJlYW19IGludG8gdGhlCittdWx0aXNldCBAdmFy e2N9LiAgVGhlIG11bHRpc2V0IEB2YXJ7Y30gbXVzdCBiZSBwcmVhbGxvY2F0 ZWQgd2l0aAorY29ycmVjdCB2YWx1ZXMgb2YgQG1hdGh7bn0gYW5kIEBtYXRo e2t9IHNpbmNlIHRoZSBmdW5jdGlvbiB1c2VzIHRoZSBzaXplIG9mIEB2YXJ7 Y30gdG8KK2RldGVybWluZSBob3cgbWFueSBudW1iZXJzIHRvIHJlYWQuICBU aGUgZnVuY3Rpb24gcmV0dXJucworQGNvZGV7R1NMX0VGQUlMRUR9IGlmIHRo ZXJlIHdhcyBhIHByb2JsZW0gcmVhZGluZyBmcm9tIHRoZSBmaWxlLgorQGVu ZCBkZWZ0eXBlZnVuCisKKworQG5vZGUgTXVsdGlzZXQgRXhhbXBsZXMKK0Bz ZWN0aW9uIEV4YW1wbGVzCitUaGUgZXhhbXBsZSBwcm9ncmFtIGJlbG93IHBy aW50cyBhbGwgbXVsdGlzZXRzIGVsZW1lbnRzIGNvbnRhaW5pbmcgdGhlIHZh bHVlcworQG1hdGh7QHswLDEsMiwzQH19IG9yZGVyZWQgYnkgc2l6ZS4gIE11 bHRpc2V0IGVsZW1lbnRzIG9mIHRoZSBzYW1lIHNpemUgYXJlCitvcmRlcmVk IGxleGljb2dyYXBoaWNhbGx5LgorCitAZXhhbXBsZQorQHZlcmJhdGltaW5j bHVkZSBleGFtcGxlcy9tdWx0aXNldC5jCitAZW5kIGV4YW1wbGUKKworQG5v aW5kZW50CitIZXJlIGlzIHRoZSBvdXRwdXQgZnJvbSB0aGUgcHJvZ3JhbSwK KworQGV4YW1wbGUKKyQgLi9hLm91dAorQHZlcmJhdGltaW5jbHVkZSBleGFt cGxlcy9tdWx0aXNldC5vdXQKK0BlbmQgZXhhbXBsZQorCitAbm9pbmRlbnQK K0FsbCA3MCBtdWx0aXNldHMgYXJlIGdlbmVyYXRlZCBhbmQgc29ydGVkIGxl eGljb2dyYXBoaWNhbGx5LgpkaWZmIC0tZ2l0IGEvbXVsdGlzZXQvLmN2c2ln bm9yZSBiL211bHRpc2V0Ly5jdnNpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uNTJmZGFiOAotLS0gL2Rldi9udWxsCisrKyBi L211bHRpc2V0Ly5jdnNpZ25vcmUKQEAgLTAsMCArMSw4IEBACisqLmxhCisq LmxvCisuZGVwcworLmxpYnMKK2RlbW8KK01ha2VmaWxlCitNYWtlZmlsZS5p bgordGVzdApkaWZmIC0tZ2l0IGEvbXVsdGlzZXQvQ2hhbmdlTG9nIGIvbXVs dGlzZXQvQ2hhbmdlTG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjMyODljMGUKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aXNldC9D aGFuZ2VMb2cKQEAgLTAsMCArMSwzIEBACisyMDA5LTA5LTIxICBSaHlzIFVs ZXJpY2ggIDxyaHlzLnVsZXJpY2hAZ21haWwuY29tPgorCisJKiBhZGRlZCBt dWx0aXNldCBzdXBwb3J0IHRvIEdTTCBiYXNlZCBvbiBjb21iaW5hdGlvbnMK ZGlmZiAtLWdpdCBhL211bHRpc2V0L01ha2VmaWxlLmFtIGIvbXVsdGlzZXQv TWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uMjQwOGQzZgotLS0gL2Rldi9udWxsCisrKyBiL211bHRpc2V0L01ha2Vm aWxlLmFtCkBAIC0wLDAgKzEsMjEgQEAKK25vaW5zdF9MVExJQlJBUklFUyA9 IGxpYmdzbG11bHRpc2V0LmxhCisKK3BrZ2luY2x1ZGVfSEVBREVSUyA9IGdz bF9tdWx0aXNldC5oCisKK0lOQ0xVREVTID0gLUkkKHRvcF9zcmNkaXIpCisK K2xpYmdzbG11bHRpc2V0X2xhX1NPVVJDRVMgPSBpbml0LmMgZmlsZS5jIG11 bHRpc2V0LmMgaW5saW5lLmMKKworbm9pbnN0X0hFQURFUlMgPQorCitURVNU UyA9ICQoY2hlY2tfUFJPR1JBTVMpCisKK2NoZWNrX1BST0dSQU1TID0gdGVz dAorCit0ZXN0X1NPVVJDRVMgPSB0ZXN0LmMKKwordGVzdF9MREFERCA9IGxp YmdzbG11bHRpc2V0LmxhIC4uL3ZlY3Rvci9saWJnc2x2ZWN0b3IubGEgIC4u L2Jsb2NrL2xpYmdzbGJsb2NrLmxhIC4uL2llZWUtdXRpbHMvbGliZ3NsaWVl ZXV0aWxzLmxhIC4uL2Vyci9saWJnc2xlcnIubGEgLi4vdGVzdC9saWJnc2x0 ZXN0LmxhIC4uL3N5cy9saWJnc2xzeXMubGEgLi4vdXRpbHMvbGlidXRpbHMu bGEKKworbm9pbnN0X1BST0dSQU1TID0gZGVtbworZGVtb19TT1VSQ0VTID0g ZGVtby5jCitkZW1vX0xEQUREID0gbGliZ3NsbXVsdGlzZXQubGEgLi4vdmVj dG9yL2xpYmdzbHZlY3Rvci5sYSAuLi9lcnIvbGliZ3NsZXJyLmxhIC4uL3Rl c3QvbGliZ3NsdGVzdC5sYSAuLi9zeXMvbGliZ3Nsc3lzLmxhIC4uL3V0aWxz L2xpYnV0aWxzLmxhCmRpZmYgLS1naXQgYS9tdWx0aXNldC9kZW1vLmMgYi9t dWx0aXNldC9kZW1vLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uM2M0NzQ5YQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpc2V0L2Rl bW8uYwpAQCAtMCwwICsxLDcyIEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNp bmNsdWRlIDxnc2wvZ3NsX211bHRpc2V0Lmg+CisKK3ZvaWQKK3ByaW50X2Fs bF9tdWx0aXNldHMgKCBzaXplX3Qgbiwgc2l6ZV90IGsgKTsKKworaW50Citt YWluICh2b2lkKQoreworICBnc2xfbXVsdGlzZXQgKiBjOworICBzaXplX3Qg aTsKKworICBwcmludGYoImFsbCBtdWx0aXNldHMgb2YgezAsMSwyLDN9IGJ5 IHNpemUgKGxleC4gb3JkZXIpXG4iKSA7CisgIGZvcihpID0gMDsgaSA8PSA0 OyBpKyspCisgICAgeworICAgICAgYyA9IGdzbF9tdWx0aXNldF9jYWxsb2Mg KDQsIGkpOworICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgIHByaW50 ZigieyIpOworICAgICAgICAgIGdzbF9tdWx0aXNldF9mcHJpbnRmIChzdGRv dXQsIGMsICIgJXUiKTsKKyAgICAgICAgICBwcmludGYoIiB9XG4iKTsKKyAg ICAgICAgfQorICAgICAgd2hpbGUgKGdzbF9tdWx0aXNldF9uZXh0KGMpID09 IEdTTF9TVUNDRVNTKTsKKyAgICAgIGdzbF9tdWx0aXNldF9mcmVlKGMpOwor ICAgIH0KKyAgcHJpbnRmKCJhbGwgbXVsdGlzZXRzIG9mIHsxLDIsMyw0fSBi eSBzaXplIChyZXZlcnNlIGxleC4gb3JkZXIpXG4iKSA7CisgIGZvcihpID0g MDsgaSA8PSA0OyBpKyspCisgICAgeworICAgICAgYyA9IGdzbF9tdWx0aXNl dF9hbGxvYyAoNCwgaSkgOworICAgICAgZ3NsX211bHRpc2V0X2luaXRfbGFz dChjKSA7CisgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgcHJpbnRm KCJ7Iik7CisgICAgICAgICAgZ3NsX211bHRpc2V0X2ZwcmludGYgKHN0ZG91 dCwgYywgIiAldSIpOworICAgICAgICAgIHByaW50ZigiIH1cbiIpOworICAg ICAgICB9CisgICAgICB3aGlsZSAoZ3NsX211bHRpc2V0X3ByZXYoYykgPT0g R1NMX1NVQ0NFU1MpOworICAgICAgZ3NsX211bHRpc2V0X2ZyZWUoYyk7Cisg ICAgfQorICBwcmludGYoIlxuIik7CisKKyAgcHJpbnRfYWxsX211bHRpc2V0 cyg1LCAzKTsKKyAgcHJpbnRfYWxsX211bHRpc2V0cyg1LCAwKTsKKyAgcHJp bnRfYWxsX211bHRpc2V0cyg1LCA1KTsKKyAgcHJpbnRfYWxsX211bHRpc2V0 cygxLCAxKTsKKyAgcHJpbnRfYWxsX211bHRpc2V0cygzLCAxKTsKKworICBy ZXR1cm4gMDsKK30KKwordm9pZAorcHJpbnRfYWxsX211bHRpc2V0cyAoc2l6 ZV90IG4sIHNpemVfdCBrKQoreworICBnc2xfbXVsdGlzZXQgKiBjID0gZ3Ns X211bHRpc2V0X2NhbGxvYyAobiwgayk7CisKKyAgcHJpbnRmKCJtdWx0aXNl dHMgJXUgY2hvb3NlICV1ICh3aXRoIHJlcGxhY2VtZW50KVxuIiwgbiwgayk7 CisgIGRvCisgICAgeworICAgICAgZ3NsX211bHRpc2V0X2ZwcmludGYgKHN0 ZG91dCwgYywgIiAldSIpOworICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0K KyAgd2hpbGUgKGdzbF9tdWx0aXNldF9uZXh0KGMpID09IEdTTF9TVUNDRVNT KTsKKyAgd2hpbGUgKGdzbF9tdWx0aXNldF9uZXh0KGMpID09IEdTTF9TVUND RVNTKTsKKyAgZG8KKyAgICB7CisgICAgICBnc2xfbXVsdGlzZXRfZnByaW50 ZiAoc3Rkb3V0LCBjLCAiICV1Iik7CisgICAgICBwcmludGYoIlxuIik7Cisg ICAgfQorICB3aGlsZSAoZ3NsX211bHRpc2V0X3ByZXYoYykgPT0gR1NMX1NV Q0NFU1MpOworICBwcmludGYoIlxuIik7CisgIGdzbF9tdWx0aXNldF9mcmVl KGMpOworfQpkaWZmIC0tZ2l0IGEvbXVsdGlzZXQvZmlsZS5jIGIvbXVsdGlz ZXQvZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu Ljk3YmUxZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aXNldC9maWxlLmMK QEAgLTAsMCArMSwxMTUgQEAKKy8qIG11bHRpc2V0L2ZpbGUuYworICogYmFz ZWQgb24gY29tYmluYXRpb24vZmlsZS5jIGJ5IFN6eW1vbiBKYXJvc3pld2lj egorICogYmFzZWQgb24gcGVybXV0YXRpb24vZmlsZS5jIGJ5IEJyaWFuIEdv dWdoCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIFN6eW1vbiBKYXJvc3pl d2ljegorICogQ29weXJpZ2h0IChDKSAyMDA5IFJoeXMgVWxlcmljaAorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor ICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAt MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNs dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGdzbC9nc2xfZXJybm8uaD4KKyNp bmNsdWRlIDxnc2wvZ3NsX211bHRpc2V0Lmg+CisKKyNkZWZpbmUgSU5fRk9S TUFUICIlbHUiCisKK2ludAorZ3NsX211bHRpc2V0X2ZyZWFkIChGSUxFICog c3RyZWFtLCBnc2xfbXVsdGlzZXQgKiBjKQoreworICBzaXplX3QgayA9IGMt PmsgOworCisgIHNpemVfdCAqIGRhdGEgPSBjLT5kYXRhIDsKKworICBzaXpl X3QgaXRlbXMgPSBmcmVhZCAoZGF0YSwgc2l6ZW9mIChzaXplX3QpLCBrLCBz dHJlYW0pOworCisgIGlmIChpdGVtcyAhPSBrKQorICAgIHsKKyAgICAgIEdT TF9FUlJPUiAoImZyZWFkIGZhaWxlZCIsIEdTTF9FRkFJTEVEKTsKKyAgICB9 CisKKyAgcmV0dXJuIEdTTF9TVUNDRVNTOworfQorCitpbnQKK2dzbF9tdWx0 aXNldF9md3JpdGUgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9tdWx0aXNl dCAqIGMpCit7CisgIHNpemVfdCBrID0gYy0+ayA7CisKKyAgc2l6ZV90ICog ZGF0YSA9IGMtPmRhdGEgOworCisgIHNpemVfdCBpdGVtcyA9IGZ3cml0ZSAo ZGF0YSwgc2l6ZW9mIChzaXplX3QpLCBrLCBzdHJlYW0pOworCisgIGlmIChp dGVtcyAhPSBrKQorICAgIHsKKyAgICAgIEdTTF9FUlJPUiAoImZ3cml0ZSBm YWlsZWQiLCBHU0xfRUZBSUxFRCk7CisgICAgfQorCisgIHJldHVybiBHU0xf U1VDQ0VTUzsKK30KKworaW50Citnc2xfbXVsdGlzZXRfZnByaW50ZiAoRklM RSAqIHN0cmVhbSwgY29uc3QgZ3NsX211bHRpc2V0ICogYywgY29uc3QgY2hh ciAqZm9ybWF0KQoreworICBzaXplX3QgayA9IGMtPmsgOworCisgIHNpemVf dCAqIGRhdGEgPSBjLT5kYXRhIDsKKworICBzaXplX3QgaTsKKworICBmb3Ig KGkgPSAwOyBpIDwgazsgaSsrKQorICAgIHsKKyAgICAgIGludCBzdGF0dXMg PSBmcHJpbnRmIChzdHJlYW0sIGZvcm1hdCwgZGF0YVtpXSk7CisKKyAgICAg IGlmIChzdGF0dXMgPCAwKQorICAgICAgICB7CisgICAgICAgICAgR1NMX0VS Uk9SICgiZnByaW50ZiBmYWlsZWQiLCBHU0xfRUZBSUxFRCk7CisgICAgICAg IH0KKyAgICB9CisKKyAgcmV0dXJuIEdTTF9TVUNDRVNTOworfQorCitpbnQK K2dzbF9tdWx0aXNldF9mc2NhbmYgKEZJTEUgKiBzdHJlYW0sIGdzbF9tdWx0 aXNldCAqIGMpCit7CisgIHNpemVfdCBrID0gYy0+ayA7CisKKyAgc2l6ZV90 ICogZGF0YSA9IGMtPmRhdGEgOworCisgIHNpemVfdCBpOworCisgIGZvciAo aSA9IDA7IGkgPCBrOyBpKyspCisgICAgeworICAgICAgdW5zaWduZWQgbG9u ZyBqIDsKKworICAgICAgLyogRklYTUU6IHdoYXQgaWYgc2l6ZV90ICE9IHVu c2lnbmVkIGxvbmcgPz8/CisKKyAgICAgICAgIHdhbnQgcmVhZCBpbiBzaXpl X3QgYnV0IGhhdmUgdG8gcmVhZCBpbiB1bnNpZ25lZCBsb25nIHRvIGF2b2lk CisgICAgICAgICBlcnJvciBmcm9tIGNvbXBpbGVyICovCisKKyAgICAgIGlu dCBzdGF0dXMgPSBmc2NhbmYgKHN0cmVhbSwgSU5fRk9STUFULCAmaik7CisK KyAgICAgIGlmIChzdGF0dXMgIT0gMSkKKyAgICAgICAgeworICAgICAgICAg IEdTTF9FUlJPUiAoImZzY2FuZiBmYWlsZWQiLCBHU0xfRUZBSUxFRCk7Cisg ICAgICAgIH0KKworICAgICAgZGF0YVtpXSA9IGo7CisgICAgfQorCisgIHJl dHVybiBHU0xfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL211bHRpc2V0L2dz bF9tdWx0aXNldC5oIGIvbXVsdGlzZXQvZ3NsX211bHRpc2V0LmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJhNWQ2YwotLS0gL2Rl di9udWxsCisrKyBiL211bHRpc2V0L2dzbF9tdWx0aXNldC5oCkBAIC0wLDAg KzEsOTMgQEAKKy8qIG11bHRpc2V0L2dzbF9tdWx0aXNldC5oCisgKiBiYXNl ZCBvbiBjb21iaW5hdGlvbi9nc2xfY29tYmluYXRpb24uaCBieSBTenltb24g SmFyb3N6ZXdpY3oKKyAqIGJhc2VkIG9uIHBlcm11dGF0aW9uL2dzbF9wZXJt dXRhdGlvbi5oIGJ5IEJyaWFuIEdvdWdoCisgKgorICogQ29weXJpZ2h0IChD KSAyMDA5IFJoeXMgVWxlcmljaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICog V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg Rmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp Zm5kZWYgX19HU0xfTVVMVElTRVRfSF9fCisjZGVmaW5lIF9fR1NMX01VTFRJ U0VUX0hfXworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Z3Ns L2dzbF9lcnJuby5oPgorI2luY2x1ZGUgPGdzbC9nc2xfdHlwZXMuaD4KKyNp bmNsdWRlIDxnc2wvZ3NsX2lubGluZS5oPgorI2luY2x1ZGUgPGdzbC9nc2xf Y2hlY2tfcmFuZ2UuaD4KKworI3VuZGVmIF9fQkVHSU5fREVDTFMKKyN1bmRl ZiBfX0VORF9ERUNMUworI2lmZGVmIF9fY3BsdXNwbHVzCisjIGRlZmluZSBf X0JFR0lOX0RFQ0xTIGV4dGVybiAiQyIgeworIyBkZWZpbmUgX19FTkRfREVD TFMgfQorI2Vsc2UKKyMgZGVmaW5lIF9fQkVHSU5fREVDTFMgLyogZW1wdHkg Ki8KKyMgZGVmaW5lIF9fRU5EX0RFQ0xTIC8qIGVtcHR5ICovCisjZW5kaWYK KworX19CRUdJTl9ERUNMUworCitzdHJ1Y3QgZ3NsX211bHRpc2V0X3N0cnVj dAoreworICBzaXplX3QgbjsKKyAgc2l6ZV90IGs7CisgIHNpemVfdCAqZGF0 YTsKK307CisKK3R5cGVkZWYgc3RydWN0IGdzbF9tdWx0aXNldF9zdHJ1Y3Qg Z3NsX211bHRpc2V0OworCitnc2xfbXVsdGlzZXQgKmdzbF9tdWx0aXNldF9h bGxvYyAoY29uc3Qgc2l6ZV90IG4sIGNvbnN0IHNpemVfdCBrKTsKK2dzbF9t dWx0aXNldCAqZ3NsX211bHRpc2V0X2NhbGxvYyAoY29uc3Qgc2l6ZV90IG4s IGNvbnN0IHNpemVfdCBrKTsKK3ZvaWQgZ3NsX211bHRpc2V0X2luaXRfZmly c3QgKGdzbF9tdWx0aXNldCAqIGMpOwordm9pZCBnc2xfbXVsdGlzZXRfaW5p dF9sYXN0IChnc2xfbXVsdGlzZXQgKiBjKTsKK3ZvaWQgZ3NsX211bHRpc2V0 X2ZyZWUgKGdzbF9tdWx0aXNldCAqIGMpOworaW50IGdzbF9tdWx0aXNldF9t ZW1jcHkgKGdzbF9tdWx0aXNldCAqIGRlc3QsIGNvbnN0IGdzbF9tdWx0aXNl dCAqIHNyYyk7CisKK2ludCBnc2xfbXVsdGlzZXRfZnJlYWQgKEZJTEUgKiBz dHJlYW0sIGdzbF9tdWx0aXNldCAqIGMpOworaW50IGdzbF9tdWx0aXNldF9m d3JpdGUgKEZJTEUgKiBzdHJlYW0sIGNvbnN0IGdzbF9tdWx0aXNldCAqIGMp OworaW50IGdzbF9tdWx0aXNldF9mc2NhbmYgKEZJTEUgKiBzdHJlYW0sIGdz bF9tdWx0aXNldCAqIGMpOworaW50IGdzbF9tdWx0aXNldF9mcHJpbnRmIChG SUxFICogc3RyZWFtLCBjb25zdCBnc2xfbXVsdGlzZXQgKiBjLCBjb25zdCBj aGFyICpmb3JtYXQpOworCitzaXplX3QgZ3NsX211bHRpc2V0X24gKGNvbnN0 IGdzbF9tdWx0aXNldCAqIGMpOworc2l6ZV90IGdzbF9tdWx0aXNldF9rIChj b25zdCBnc2xfbXVsdGlzZXQgKiBjKTsKK3NpemVfdCAqIGdzbF9tdWx0aXNl dF9kYXRhIChjb25zdCBnc2xfbXVsdGlzZXQgKiBjKTsKKworaW50IGdzbF9t dWx0aXNldF92YWxpZCAoZ3NsX211bHRpc2V0ICogYyk7CitpbnQgZ3NsX211 bHRpc2V0X25leHQgKGdzbF9tdWx0aXNldCAqIGMpOworaW50IGdzbF9tdWx0 aXNldF9wcmV2IChnc2xfbXVsdGlzZXQgKiBjKTsKKworSU5MSU5FX0RFQ0wg c2l6ZV90IGdzbF9tdWx0aXNldF9nZXQgKGNvbnN0IGdzbF9tdWx0aXNldCAq IGMsIGNvbnN0IHNpemVfdCBpKTsKKworI2lmZGVmIEhBVkVfSU5MSU5FCisK K0lOTElORV9GVU4KK3NpemVfdAorZ3NsX211bHRpc2V0X2dldCAoY29uc3Qg Z3NsX211bHRpc2V0ICogYywgY29uc3Qgc2l6ZV90IGkpCit7CisjaWYgR1NM X1JBTkdFX0NIRUNLCisgIGlmIChHU0xfUkFOR0VfQ09ORChpID49IGMtPmsp KSAvKiBzaXplX3QgaXMgdW5zaWduZWQsIGNhbid0IGJlIG5lZ2F0aXZlICov CisgICAgeworICAgICAgR1NMX0VSUk9SX1ZBTCAoImluZGV4IG91dCBvZiBy YW5nZSIsIEdTTF9FSU5WQUwsIDApOworICAgIH0KKyNlbmRpZgorICByZXR1 cm4gYy0+ZGF0YVtpXTsKK30KKworI2VuZGlmIC8qIEhBVkVfSU5MSU5FICov CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTTF9NVUxUSVNFVF9I X18gKi8KZGlmZiAtLWdpdCBhL211bHRpc2V0L2luaXQuYyBiL211bHRpc2V0 L2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i NzFiNzM2Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGlzZXQvaW5pdC5jCkBA IC0wLDAgKzEsMTMwIEBACisvKiBtdWx0aXNldC9pbml0LmMKKyAqIGJhc2Vk IG9uIGNvbWJpbmF0aW9uL2luaXQuYyBieSBTenltb24gSmFyb3N6ZXdpY3oK KyAqIGJhc2VkIG9uIHBlcm11dGF0aW9uL2luaXQuYyBieSBCcmlhbiBHb3Vn aAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBTenltb24gSmFyb3N6ZXdp Y3oKKyAqIENvcHlyaWdodCAoQykgMjAwOSBCcmlhbiBHb3VnaAorICogQ29w eXJpZ2h0IChDKSAyMDA5IFJoeXMgVWxlcmljaAorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws IGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor ICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRsaWIu aD4KKyNpbmNsdWRlIDxnc2wvZ3NsX2Vycm5vLmg+CisjaW5jbHVkZSA8Z3Ns L2dzbF9tdWx0aXNldC5oPgorCitnc2xfbXVsdGlzZXQgKgorZ3NsX211bHRp c2V0X2FsbG9jIChjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IGspCit7 CisgIGdzbF9tdWx0aXNldCAqIGM7CisKKyAgaWYgKG4gPT0gMCkKKyAgICB7 CisgICAgICBHU0xfRVJST1JfVkFMICgibXVsdGlzZXQgcGFyYW1ldGVyIG4g bXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VyIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgIEdTTF9FRE9NLCAwKTsKKyAgICB9CisgIGlmIChrID4gbikKKyAg ICB7CisgICAgICBHU0xfRVJST1JfVkFMICgibXVsdGlzZXQgbGVuZ3RoIGsg bXVzdCBiZSBhbiBpbnRlZ2VyIGxlc3MgdGhhbiBvciBlcXVhbCB0byBuIiwK KyAgICAgICAgICAgICAgICAgICAgICAgIEdTTF9FRE9NLCAwKTsKKyAgICB9 CisgIGMgPSAoZ3NsX211bHRpc2V0ICopIG1hbGxvYyAoc2l6ZW9mIChnc2xf bXVsdGlzZXQpKTsKKworICBpZiAoYyA9PSAwKQorICAgIHsKKyAgICAgIEdT TF9FUlJPUl9WQUwgKCJmYWlsZWQgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIG11 bHRpc2V0IHN0cnVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBHU0xf RU5PTUVNLCAwKTsKKyAgICB9CisKKyAgaWYgKGsgPiAwKQorICAgIHsKKyAg ICAgIGMtPmRhdGEgPSAoc2l6ZV90ICopIG1hbGxvYyAoayAqIHNpemVvZiAo c2l6ZV90KSk7CisKKyAgICAgIGlmIChjLT5kYXRhID09IDApCisgICAgICAg IHsKKyAgICAgICAgICBmcmVlIChjKTsgICAgICAgICAgICAgLyogZXhjZXB0 aW9uIGluIGNvbnN0cnVjdG9yLCBhdm9pZCBtZW1vcnkgbGVhayAqLworCisg ICAgICAgICAgR1NMX0VSUk9SX1ZBTCAoImZhaWxlZCB0byBhbGxvY2F0ZSBz cGFjZSBmb3IgbXVsdGlzZXQgZGF0YSIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgR1NMX0VOT01FTSwgMCk7CisgICAgICAgIH0KKyAgICB9CisgIGVs c2UKKyAgICB7CisgICAgICBjLT5kYXRhID0gMDsKKyAgICB9CisKKyAgYy0+ biA9IG47CisgIGMtPmsgPSBrOworCisgIHJldHVybiBjOworfQorCitnc2xf bXVsdGlzZXQgKgorZ3NsX211bHRpc2V0X2NhbGxvYyAoY29uc3Qgc2l6ZV90 IG4sIGNvbnN0IHNpemVfdCBrKQoreworICBzaXplX3QgaTsKKworICBnc2xf bXVsdGlzZXQgKiBjID0gIGdzbF9tdWx0aXNldF9hbGxvYyAobiwgayk7CisK KyAgaWYgKGMgPT0gMCkKKyAgICByZXR1cm4gMDsKKworICAvKiBpbml0aWFs aXplIG11bHRpc2V0IHRvIHJlcGVhdGVkIGZpcnN0IGVsZW1lbnQgKi8KKwor ICBmb3IgKGkgPSAwOyBpIDwgazsgaSsrKQorICAgIHsKKyAgICAgIGMtPmRh dGFbaV0gPSAwOworICAgIH0KKworICByZXR1cm4gYzsKK30KKwordm9pZAor Z3NsX211bHRpc2V0X2luaXRfZmlyc3QgKGdzbF9tdWx0aXNldCAqIGMpCit7 CisgIGNvbnN0IHNpemVfdCBrID0gYy0+ayA7CisgIHNpemVfdCBpOworCisg IC8qIGluaXRpYWxpemUgbXVsdGlzZXQgdG8gcmVwZWF0ZWQgZmlyc3QgZWxl bWVudCAqLworCisgIGZvciAoaSA9IDA7IGkgPCBrOyBpKyspCisgICAgewor ICAgICAgYy0+ZGF0YVtpXSA9IDA7CisgICAgfQorfQorCit2b2lkCitnc2xf bXVsdGlzZXRfaW5pdF9sYXN0IChnc2xfbXVsdGlzZXQgKiBjKQoreworICBj b25zdCBzaXplX3QgayA9IGMtPmsgOworICBzaXplX3QgaTsKKyAgc2l6ZV90 IG4gPSBjLT5uOworCisgIC8qIGluaXRpYWxpemUgbXVsdGlzZXQgdG8gcmVw ZWF0ZWQgbGFzdCBlbGVtZW50ICovCisKKyAgZm9yIChpID0gMDsgaSA8IGs7 IGkrKykKKyAgICB7CisgICAgICBjLT5kYXRhW2ldID0gbiAtIDE7CisgICAg fQorfQorCit2b2lkCitnc2xfbXVsdGlzZXRfZnJlZSAoZ3NsX211bHRpc2V0 ICogYykKK3sKKyAgUkVUVVJOX0lGX05VTEwgKGMpOworICBpZiAoYy0+ayA+ IDApIGZyZWUgKGMtPmRhdGEpOworICBmcmVlIChjKTsKK30KZGlmZiAtLWdp dCBhL211bHRpc2V0L2lubGluZS5jIGIvbXVsdGlzZXQvaW5saW5lLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU5ZTlmMwotLS0g L2Rldi9udWxsCisrKyBiL211bHRpc2V0L2lubGluZS5jCkBAIC0wLDAgKzEs MjQgQEAKKy8qIG11bHRpc2V0L2lubGluZS5jCisgKgorICogQ29weXJpZ2h0 IChDKSAyMDA4IEJyaWFuIEdvdWdoCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvciAoYXQKKyAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cisg KiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0 aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor LyogQ29tcGlsZSBhbGwgdGhlIGlubGluZSBmdW5jdGlvbnMgKi8KKworI2Rl ZmluZSBDT01QSUxFX0lOTElORV9TVEFUSUMKKyNpbmNsdWRlICJidWlsZC5o IgorI2luY2x1ZGUgPGdzbC9nc2xfbXVsdGlzZXQuaD4KZGlmZiAtLWdpdCBh L211bHRpc2V0L211bHRpc2V0LmMgYi9tdWx0aXNldC9tdWx0aXNldC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMWUxNDUKLS0t IC9kZXYvbnVsbAorKysgYi9tdWx0aXNldC9tdWx0aXNldC5jCkBAIC0wLDAg KzEsMTgxIEBACisvKiBtdWx0aXNldC9tdWx0aXNldC5jCisgKiBiYXNlZCBv biBjb21iaW5hdGlvbi9jb21iaW5hdGlvbi5jIGJ5IFN6eW1vbiBKYXJvc3pl d2ljegorICogYmFzZWQgb24gcGVybXV0YXRpb24vcGVybXV0YXRpb24uYyBi eSBCcmlhbiBHb3VnaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBTenlt b24gSmFyb3N6ZXdpY3oKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSaHlzIFVs ZXJpY2gKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y IChhdAorICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJ bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Y29uZmln Lmg+CisjaW5jbHVkZSA8Z3NsL2dzbF9lcnJuby5oPgorI2luY2x1ZGUgPGdz bC9nc2xfbXVsdGlzZXQuaD4KKworc2l6ZV90Citnc2xfbXVsdGlzZXRfbiAo Y29uc3QgZ3NsX211bHRpc2V0ICogYykKK3sKKyAgcmV0dXJuIGMtPm4gOwor fQorCitzaXplX3QKK2dzbF9tdWx0aXNldF9rIChjb25zdCBnc2xfbXVsdGlz ZXQgKiBjKQoreworICByZXR1cm4gYy0+ayA7Cit9CisKK3NpemVfdCAqCitn c2xfbXVsdGlzZXRfZGF0YSAoY29uc3QgZ3NsX211bHRpc2V0ICogYykKK3sK KyAgcmV0dXJuIGMtPmRhdGEgOworfQorCitpbnQKK2dzbF9tdWx0aXNldF92 YWxpZCAoZ3NsX211bHRpc2V0ICogYykKK3sKKyAgY29uc3Qgc2l6ZV90IG4g PSBjLT5uIDsKKyAgY29uc3Qgc2l6ZV90IGsgPSBjLT5rIDsKKworICBzaXpl X3QgaSwgaiA7CisKKyAgaWYoIGsgPiBuICkKKyAgICB7CisgICAgICBHU0xf RVJST1IoIm11bHRpc2V0IGhhcyBrIGdyZWF0ZXIgdGhhbiBuIiwgR1NMX0ZB SUxVUkUpIDsKKyAgICB9CisgIGZvciAoaSA9IDA7IGkgPCBrOyBpKyspCisg ICAgeworICAgICAgY29uc3Qgc2l6ZV90IGNpID0gYy0+ZGF0YVtpXTsKKwor ICAgICAgaWYgKGNpID49IG4pCisgICAgICAgIHsKKyAgICAgICAgICBHU0xf RVJST1IoIm11bHRpc2V0IGluZGV4IG91dHNpZGUgcmFuZ2UiLCBHU0xfRkFJ TFVSRSkgOworICAgICAgICB9CisKKyAgICAgIGZvciAoaiA9IDA7IGogPCBp OyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoYy0+ZGF0YVtqXSA+ IGNpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBHU0xfRVJST1Io Im11bHRpc2V0IGluZGljZXMgbm90IGluIGluY3JlYXNpbmcgb3JkZXIiLAor ICAgICAgICAgICAgICAgICAgICAgICAgR1NMX0ZBSUxVUkUpIDsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICByZXR1cm4gR1NMX1NV Q0NFU1M7Cit9CisKKworaW50Citnc2xfbXVsdGlzZXRfbmV4dCAoZ3NsX211 bHRpc2V0ICogYykKK3sKKyAgLyogUmVwbGFjZXMgYyB3aXRoIHRoZSBuZXh0 IG11bHRpc2V0IChpbiB0aGUgc3RhbmRhcmQgbGV4aWNvZ3JhcGhpY2FsCisg ICAqIG9yZGVyaW5nKS4gIFJldHVybnMgR1NMX0ZBSUxVUkUgaWYgdGhlcmUg aXMgbm8gbmV4dCBtdWx0aXNldC4KKyAgICovCisgIGNvbnN0IHNpemVfdCBu ID0gYy0+bjsKKyAgY29uc3Qgc2l6ZV90IGsgPSBjLT5rOworICBzaXplX3Qg KmRhdGEgPSBjLT5kYXRhOworICBzaXplX3QgaTsKKworICBpZihrID09IDAp CisgICAgeworICAgICAgcmV0dXJuIEdTTF9GQUlMVVJFOworICAgIH0KKyAg aSA9IGsgLSAxOworCisgIHdoaWxlKGkgPiAwICYmIGRhdGFbaV0gPT0gbi0x KQorICAgIHsKKyAgICAgIC0taTsKKyAgICB9CisKKyAgaWYgKGkgPT0gMCAm JiBkYXRhWzBdID09IG4tMSkKKyAgICB7CisgICAgICByZXR1cm4gR1NMX0ZB SUxVUkU7CisgICAgfQorCisgICsrZGF0YVtpXTsKKworICB3aGlsZShpIDwg ay0xKQorICAgIHsKKyAgICAgIGRhdGFbaSsxXSA9IGRhdGFbaV07CisgICAg ICArK2k7CisgICAgfQorCisgIHJldHVybiBHU0xfU1VDQ0VTUzsKK30KKwor aW50Citnc2xfbXVsdGlzZXRfcHJldiAoZ3NsX211bHRpc2V0ICogYykKK3sK KyAgLyogUmVwbGFjZXMgYyB3aXRoIHRoZSBwcmV2aW91cyBtdWx0aXNldCAo aW4gdGhlIHN0YW5kYXJkCisgICAqIGxleGljb2dyYXBoaWNhbCBvcmRlcmlu ZykuICBSZXR1cm5zIEdTTF9GQUlMVVJFIGlmIHRoZXJlIGlzIG5vCisgICAq IHByZXZpb3VzIG11bHRpc2V0LgorICAgKi8KKyAgY29uc3Qgc2l6ZV90IG4g PSBjLT5uOworICBjb25zdCBzaXplX3QgayA9IGMtPms7CisgIHNpemVfdCAq ZGF0YSA9IGMtPmRhdGE7CisgIHNpemVfdCBpOworCisgIGlmKGsgPT0gMCkK KyAgICB7CisgICAgICByZXR1cm4gR1NMX0ZBSUxVUkU7CisgICAgfQorICBp ID0gayAtIDE7CisKKyAgd2hpbGUoaSA+IDAgJiYgZGF0YVtpLTFdID09IGRh dGFbaV0pCisgICAgeworICAgICAgLS1pOworICAgIH0KKworICBpZihpID09 IDAgJiYgZGF0YVtpXSA9PSAwKQorICAgIHsKKyAgICAgIHJldHVybiBHU0xf RkFJTFVSRTsKKyAgICB9CisKKyAgZGF0YVtpXS0tOworCisgIGlmIChkYXRh W2ldIDwgbi0xKQorICAgIHsKKyAgICAgIHdoaWxlIChpIDwgay0xKSB7Cisg ICAgICAgIGRhdGFbKytpXSA9IG4gLSAxOworICAgICAgfQorICAgIH0KKwor ICByZXR1cm4gR1NMX1NVQ0NFU1M7Cit9CisKK2ludAorZ3NsX211bHRpc2V0 X21lbWNweSAoZ3NsX211bHRpc2V0ICogZGVzdCwgY29uc3QgZ3NsX211bHRp c2V0ICogc3JjKQoreworICAgY29uc3Qgc2l6ZV90IHNyY19uID0gc3JjLT5u OworICAgY29uc3Qgc2l6ZV90IHNyY19rID0gc3JjLT5rOworICAgY29uc3Qg c2l6ZV90IGRlc3RfbiA9IGRlc3QtPm47CisgICBjb25zdCBzaXplX3QgZGVz dF9rID0gZGVzdC0+azsKKworICAgaWYgKHNyY19uICE9IGRlc3RfbiB8fCBz cmNfayAhPSBkZXN0X2spCisgICAgIHsKKyAgICAgICBHU0xfRVJST1IgKCJt dWx0aXNldCBsZW5ndGhzIGFyZSBub3QgZXF1YWwiLCBHU0xfRUJBRExFTik7 CisgICAgIH0KKworICAgeworICAgICBzaXplX3QgajsKKworICAgICBmb3Ig KGogPSAwOyBqIDwgc3JjX2s7IGorKykKKyAgICAgICB7CisgICAgICAgICBk ZXN0LT5kYXRhW2pdID0gc3JjLT5kYXRhW2pdOworICAgICAgIH0KKyAgIH0K KworICAgcmV0dXJuIEdTTF9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvbXVs dGlzZXQvdGVzdC5jIGIvbXVsdGlzZXQvdGVzdC5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NDg1NTQKLS0tIC9kZXYvbnVsbAor KysgYi9tdWx0aXNldC90ZXN0LmMKQEAgLTAsMCArMSwyNzggQEAKKy8qIG11 bHRpc2V0L3Rlc3QuYworICogYmFzZWQgb24gY29tYmluYXRpb24vdGVzdC5j IGJ5IFN6eW1vbiBKYXJvc3pld2ljegorICogYmFzZWQgb24gcGVybXV0YXRp b24vdGVzdC5jIGJ5IEJyaWFuIEdvdWdoCisgKgorICogQ29weXJpZ2h0IChD KSAyMDAxIFN6eW1vbiBKYXJvc3pld2ljegorICogQ29weXJpZ2h0IChDKSAy MDA5IFJoeXMgVWxlcmljaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUg TGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dy YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZv dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv b3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs dWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRl IDxzdGRpby5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxnc2wv Z3NsX211bHRpc2V0Lmg+CisjaW5jbHVkZSA8Z3NsL2dzbF90ZXN0Lmg+Cisj aW5jbHVkZSA8Z3NsL2dzbF9pZWVlX3V0aWxzLmg+CisKK3NpemVfdCBjNjNb NTZdWzNdID0geworICB7IDAsMCwwIH0sICB7IDAsMCwxIH0sICB7IDAsMCwy IH0sICB7IDAsMCwzIH0sIHsgMCwwLDQgfSwgIHsgMCwwLDUgfSwKKyAgICAg ICAgICAgICAgeyAwLDEsMSB9LCAgeyAwLDEsMiB9LCAgeyAwLDEsMyB9LCB7 IDAsMSw0IH0sICB7IDAsMSw1IH0sCisgICAgICAgICAgICAgICAgICAgICAg ICAgIHsgMCwyLDIgfSwgIHsgMCwyLDMgfSwgeyAwLDIsNCB9LCAgeyAwLDIs NSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7 IDAsMywzIH0sIHsgMCwzLDQgfSwgIHsgMCwzLDUgfSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IDAsNCw0 IH0sICB7IDAsNCw1IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAwLDUsNSB9LAor ICAgICAgICAgICAgICB7IDEsMSwxIH0sICB7IDEsMSwyIH0sICB7IDEsMSwz IH0sIHsgMSwxLDQgfSwgIHsgMSwxLDUgfSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgeyAxLDIsMiB9LCAgeyAxLDIsMyB9LCB7IDEsMiw0IH0sICB7 IDEsMiw1IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHsgMSwzLDMgfSwgeyAxLDMsNCB9LCAgeyAxLDMsNSB9LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsg MSw0LDQgfSwgIHsgMSw0LDUgfSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IDEsNSw1 IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsgMiwyLDIgfSwgIHsg MiwyLDMgfSwgeyAyLDIsNCB9LCAgeyAyLDIsNSB9LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7IDIsMywzIH0sIHsgMiwzLDQg fSwgIHsgMiwzLDUgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7IDIsNCw0IH0sICB7IDIsNCw1IH0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgeyAyLDUsNSB9LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7IDMsMywzIH0sIHsgMywzLDQgfSwgIHsg MywzLDUgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB7IDMsNCw0IH0sICB7IDMsNCw1IH0sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeyAzLDUsNSB9LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHsgNCw0LDQgfSwgIHsgNCw0LDUg fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7IDQsNSw1IH0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgeyA1LDUsNSB9Cit9IDsKKwordm9pZCBteV9lcnJvcl9oYW5kbGVyIChj b25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5l LCBpbnQgZXJyKTsKKworaW50CittYWluICh2b2lkKQoreworICBzaXplX3Qg aSwgajsKKyAgaW50IHN0YXR1cyA9IDAsIHM7CisgIGdzbF9tdWx0aXNldCAq IGMgOworCisgIGdzbF9pZWVlX2Vudl9zZXR1cCAoKTsKKworICBjID0gZ3Ns X211bHRpc2V0X2FsbG9jICg2LDMpOworCisgIC8qIFRlc3QgbXVsdGlzZXRz IGluIGZvcndhcmQgb3JkZXIgKi8KKworICBnc2xfbXVsdGlzZXRfaW5pdF9m aXJzdCAoYyk7CisKKyAgaSA9IDA7CisKKyAgZG8KKyAgICB7CisgICAgICBp ZiAoIGkgPj0gNTYgKQorICAgICAgICB7CisgICAgICAgICAgc3RhdHVzID0g MTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgZm9yIChq ID0gMDsgaiA8IDM7IGorKykKKyAgICAgICAgeworICAgICAgICAgIHN0YXR1 cyB8PSAoYy0+ZGF0YVtqXSAhPSBjNjNbaV1bal0pOworICAgICAgICB9CisK KyAgICAgIHsKKyAgICAgICAgaW50IHMxID0gZ3NsX211bHRpc2V0X3ZhbGlk IChjKTsKKyAgICAgICAgZ3NsX3Rlc3QgKHMxLCAiZ3NsX211bHRpc2V0X3Zh bGlkICgldSkiLCBpKTsKKyAgICAgIH0KKworICAgICAgaSsrOworICAgIH0K KyAgd2hpbGUgKGdzbF9tdWx0aXNldF9uZXh0KGMpID09IEdTTF9TVUNDRVNT KTsKKworICBnc2xfdGVzdChzdGF0dXMsICJnc2xfbXVsdGlzZXRfbmV4dCwg NiBjaG9vc2UgMyBtdWx0aXNldCwgNTYgc3RlcHMiKTsKKworICBnc2xfbXVs dGlzZXRfbmV4dChjKTsKKyAgZ3NsX211bHRpc2V0X25leHQoYyk7CisgIGdz bF9tdWx0aXNldF9uZXh0KGMpOworICBmb3IgKGogPSAwOyBqIDwgMzsgaisr KQorICAgIHsKKyAgICAgIHN0YXR1cyB8PSAoYy0+ZGF0YVtqXSAhPSBjNjNb NTVdW2pdKTsKKyAgICB9CisgIGdzbF90ZXN0KHN0YXR1cywgImdzbF9tdWx0 aXNldF9uZXh0IG9uIHRoZSBsYXN0IG11bHRpc2V0Iik7CisKKyAgeworICAg IGludCBzMSA9IGdzbF9tdWx0aXNldF92YWxpZCAoYyk7CisgICAgZ3NsX3Rl c3QgKHMxLCAiZ3NsX211bHRpc2V0X3ZhbGlkIG9uIHRoZSBsYXN0IG11bHRp c2V0Iik7CisgIH0KKworICB7CisgICAgZ3NsX211bHRpc2V0ICogZCA9IGdz bF9tdWx0aXNldF9hbGxvYyAoNiwzKTsKKyAgICBnc2xfbXVsdGlzZXRfbWVt Y3B5IChkLCBjKTsKKworICAgIHN0YXR1cyA9IDA7CisKKyAgICBmb3IgKGog PSAwOyBqIDwgMzsgaisrKQorICAgICAgeworICAgICAgICBzdGF0dXMgfD0g KGQtPmRhdGFbal0gIT0gYy0+ZGF0YVtqXSk7CisgICAgICB9CisKKyAgICBn c2xfdGVzdCAoc3RhdHVzLCAiZ3NsX211bHRpc2V0X21lbWNweSwgNiBjaG9v c2UgMyBtdWx0aXNldCIpOworICAgIGdzbF9tdWx0aXNldF9mcmVlKGQpOwor ICB9CisKKworICAvKiBOb3cgdGVzdCBtdWx0aXNldHMgaW4gcmV2ZXJzZSBv cmRlciAqLworCisgIGdzbF9tdWx0aXNldF9pbml0X2xhc3QgKGMpOworCisg IGkgPSA1NjsKKyAgZG8KKyAgICB7CisgICAgICBpZiAoIGkgPT0gMCApCisg ICAgICAgIHsKKyAgICAgICAgICBzdGF0dXMgPSAxOworICAgICAgICAgIGJy ZWFrOworICAgICAgICB9CisKKyAgICAgIGktLTsKKworICAgICAgZm9yIChq ID0gMDsgaiA8IDM7IGorKykKKyAgICAgICAgeworICAgICAgICAgIHN0YXR1 cyB8PSAoYy0+ZGF0YVtqXSAhPSBjNjNbaV1bal0pOworICAgICAgICB9CisK KyAgICAgIHsKKyAgICAgICAgaW50IHMxID0gZ3NsX211bHRpc2V0X3ZhbGlk IChjKTsKKyAgICAgICAgZ3NsX3Rlc3QgKHMxLCAiZ3NsX211bHRpc2V0X3Zh bGlkICgldSkiLCBpKTsKKyAgICAgIH0KKyAgICB9CisgIHdoaWxlIChnc2xf bXVsdGlzZXRfcHJldihjKSA9PSBHU0xfU1VDQ0VTUyk7CisKKyAgZ3NsX3Rl c3Qoc3RhdHVzLCAiZ3NsX211bHRpc2V0X3ByZXYsIDYgY2hvb3NlIDMgbXVs dGlzZXQsIDIwIHN0ZXBzIik7CisKKyAgZ3NsX211bHRpc2V0X3ByZXYoYyk7 CisgIGdzbF9tdWx0aXNldF9wcmV2KGMpOworICBnc2xfbXVsdGlzZXRfcHJl dihjKTsKKyAgZm9yIChqID0gMDsgaiA8IDM7IGorKykKKyAgICB7CisgICAg ICBzdGF0dXMgfD0gKGMtPmRhdGFbal0gIT0gYzYzWzBdW2pdKTsKKyAgICB9 CisgIGdzbF90ZXN0KHN0YXR1cywgImdzbF9tdWx0aXNldF9wcmV2IG9uIHRo ZSBmaXJzdCBtdWx0aXNldCIpOworCisgIHsKKyAgICBpbnQgczEgPSBnc2xf bXVsdGlzZXRfdmFsaWQgKGMpOworICAgIGdzbF90ZXN0IChzMSwgImdzbF9t dWx0aXNldF92YWxpZCBvbiB0aGUgZmlyc3QgbXVsdGlzZXQiKTsKKyAgfQor CisgIHsKKyAgICBnc2xfbXVsdGlzZXQgKiBkID0gZ3NsX211bHRpc2V0X2Fs bG9jICg2LDMpOworICAgIGdzbF9tdWx0aXNldF9tZW1jcHkgKGQsIGMpOwor CisgICAgc3RhdHVzID0gMDsKKworICAgIGZvciAoaiA9IDA7IGogPCAzOyBq KyspCisgICAgICB7CisgICAgICAgIHN0YXR1cyB8PSAoZC0+ZGF0YVtqXSAh PSBjLT5kYXRhW2pdKTsKKyAgICAgIH0KKworICAgIGdzbF90ZXN0IChzdGF0 dXMsICJnc2xfbXVsdGlzZXRfbWVtY3B5LCA2IGNob29zZSAzIG11bHRpc2V0 Iik7CisgICAgZ3NsX211bHRpc2V0X2ZyZWUoZCk7CisgIH0KKworICBnc2xf bXVsdGlzZXRfZnJlZSAoYyk7CisKKyAgYyA9IGdzbF9tdWx0aXNldF9jYWxs b2MoNywgMCk7CisgIC8qIHNob3VsZCByZXR1cm4gR1NMX0ZBSUxVUkUgZXZl cnkgdGltZSAqLworICBzdGF0dXMgfD0gKGdzbF9tdWx0aXNldF9uZXh0KGMp ICE9IEdTTF9GQUlMVVJFKTsKKyAgc3RhdHVzIHw9IChnc2xfbXVsdGlzZXRf bmV4dChjKSAhPSBHU0xfRkFJTFVSRSk7CisgIHN0YXR1cyB8PSAoZ3NsX211 bHRpc2V0X3ByZXYoYykgIT0gR1NMX0ZBSUxVUkUpOworICBzdGF0dXMgfD0g KGdzbF9tdWx0aXNldF9wcmV2KGMpICE9IEdTTF9GQUlMVVJFKTsKKyAgZ3Ns X3Rlc3Qoc3RhdHVzLCAiZ3NsX211bHRpc2V0IDcgY2hvb3NlIDAiKTsKKyAg Z3NsX211bHRpc2V0X2ZyZWUgKGMpOworCisgIGMgPSBnc2xfbXVsdGlzZXRf Y2FsbG9jKDEsIDEpOworICAvKiBzaG91bGQgcmV0dXJuIEdTTF9GQUlMVVJF IGV2ZXJ5IHRpbWUgKi8KKyAgZm9yKGogPSAwOyBqIDwgMTsgaisrKQorICB7 CisgICAgc3RhdHVzIHw9IChnc2xfbXVsdGlzZXRfZ2V0KGMsIGopICE9IGop OworICB9CisgIHN0YXR1cyB8PSAoZ3NsX211bHRpc2V0X25leHQoYykgIT0g R1NMX0ZBSUxVUkUpOworICBmb3IoaiA9IDA7IGogPCAxOyBqKyspCisgIHsK KyAgICBzdGF0dXMgfD0gKGdzbF9tdWx0aXNldF9nZXQoYywgaikgIT0gaik7 CisgIH0KKyAgc3RhdHVzIHw9IChnc2xfbXVsdGlzZXRfbmV4dChjKSAhPSBH U0xfRkFJTFVSRSk7CisgIGZvcihqID0gMDsgaiA8IDE7IGorKykKKyAgewor ICAgIHN0YXR1cyB8PSAoZ3NsX211bHRpc2V0X2dldChjLCBqKSAhPSBqKTsK KyAgfQorICBzdGF0dXMgfD0gKGdzbF9tdWx0aXNldF9wcmV2KGMpICE9IEdT TF9GQUlMVVJFKTsKKyAgZm9yKGogPSAwOyBqIDwgMTsgaisrKQorICB7Cisg ICAgc3RhdHVzIHw9IChnc2xfbXVsdGlzZXRfZ2V0KGMsIGopICE9IGopOwor ICB9CisgIHN0YXR1cyB8PSAoZ3NsX211bHRpc2V0X3ByZXYoYykgIT0gR1NM X0ZBSUxVUkUpOworICBmb3IoaiA9IDA7IGogPCAxOyBqKyspCisgIHsKKyAg ICBzdGF0dXMgfD0gKGdzbF9tdWx0aXNldF9nZXQoYywgaikgIT0gaik7Cisg IH0KKyAgZ3NsX3Rlc3Qoc3RhdHVzLCAiZ3NsX211bHRpc2V0IDcgY2hvb3Nl IDciKTsKKyAgZ3NsX211bHRpc2V0X2ZyZWUgKGMpOworCisgIGMgPSBnc2xf bXVsdGlzZXRfY2FsbG9jKDYsIDMpOworCisgIGdzbF9zZXRfZXJyb3JfaGFu ZGxlciAoJm15X2Vycm9yX2hhbmRsZXIpOworCisgIGMtPmRhdGFbMF0gPSAx OworICBjLT5kYXRhWzFdID0gMjsKKyAgYy0+ZGF0YVsyXSA9IDE7CisgIHMg PSBnc2xfbXVsdGlzZXRfdmFsaWQgKGMpOworICBnc2xfdGVzdCAoIXMsICJn c2xfbXVsdGlzZXRfdmFsaWQgb24gYW4gaW52YWxpZCBtdWx0aXNldCAoMSwx LDIpIik7CisKKyAgYy0+ZGF0YVswXSA9IDI7CisgIGMtPmRhdGFbMV0gPSAx OworICBjLT5kYXRhWzJdID0gMDsKKyAgcyA9IGdzbF9tdWx0aXNldF92YWxp ZCAoYyk7CisgIGdzbF90ZXN0ICghcywgImdzbF9tdWx0aXNldF92YWxpZCBv biBhbiBpbnZhbGlkIG11bHRpc2V0ICgyLDEsMCkiKTsKKworICBjLT5kYXRh WzBdID0gMTsKKyAgYy0+ZGF0YVsxXSA9IDI7CisgIGMtPmRhdGFbMl0gPSAw OworICBzID0gZ3NsX211bHRpc2V0X3ZhbGlkIChjKTsKKyAgZ3NsX3Rlc3Qg KCFzLCAiZ3NsX211bHRpc2V0X3ZhbGlkIG9uIGFuIGludmFsaWQgbXVsdGlz ZXQgKDEsMiwwKSIpOworCisgIHsKKyAgICBnc2xfbXVsdGlzZXQgKiBkID0g Z3NsX211bHRpc2V0X2FsbG9jICg2LDQpOworICAgIGludCBzID0gZ3NsX211 bHRpc2V0X21lbWNweSAoZCwgYyk7CisgICAgZ3NsX3Rlc3QgKCFzLCAiZ3Ns X211bHRpc2V0X21lbWNweSwgKDYsNCkgdnMgKDYsMykiKTsKKyAgICBnc2xf bXVsdGlzZXRfZnJlZShkKTsKKyAgfQorCisgIHsKKyAgICBnc2xfbXVsdGlz ZXQgKiBkID0gZ3NsX211bHRpc2V0X2FsbG9jICg3LDMpOworICAgIGludCBz ID0gZ3NsX211bHRpc2V0X21lbWNweSAoZCwgYyk7CisgICAgZ3NsX3Rlc3Qg KCFzLCAiZ3NsX211bHRpc2V0X21lbWNweSwgKDcsMykgdnMgKDYsMykiKTsK KyAgICBnc2xfbXVsdGlzZXRfZnJlZShkKTsKKyAgfQorCisgIHsKKyAgICBn c2xfbXVsdGlzZXQgKiBkID0gZ3NsX211bHRpc2V0X2FsbG9jICg3LDIpOwor ICAgIGludCBzID0gZ3NsX211bHRpc2V0X21lbWNweSAoZCwgYyk7CisgICAg Z3NsX3Rlc3QgKCFzLCAiZ3NsX211bHRpc2V0X21lbWNweSwgKDcsMikgdnMg KDYsMykiKTsKKyAgICBnc2xfbXVsdGlzZXRfZnJlZShkKTsKKyAgfQorCisK KyAgZ3NsX211bHRpc2V0X2ZyZWUgKGMpOworCisgIGV4aXQgKGdzbF90ZXN0 X3N1bW1hcnkoKSk7Cit9CisKK3ZvaWQKK215X2Vycm9yX2hhbmRsZXIgKGNv bnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUs IGludCBlcnIpCit7CisgIGlmICgwKSBwcmludGYgKCIoY2F1Z2h0IFslczol ZDogJXMgKCVkKV0pXG4iLCBmaWxlLCBsaW5lLCByZWFzb24sIGVycikgOwor fQotLSAKMS41LjQuMwoK --000e0cd1fada167f86047420a90c--