From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30472 invoked by alias); 18 Jun 2009 20:19:32 -0000 Received: (qmail 30462 invoked by uid 22791); 18 Jun 2009 20:19:31 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from fg-out-1718.google.com (HELO fg-out-1718.google.com) (72.14.220.152) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 18 Jun 2009 20:19:17 +0000 Received: by fg-out-1718.google.com with SMTP id 22so1150076fge.0 for ; Thu, 18 Jun 2009 13:19:13 -0700 (PDT) MIME-Version: 1.0 Received: by 10.86.91.10 with SMTP id o10mr2450830fgb.13.1245356352891; Thu, 18 Jun 2009 13:19:12 -0700 (PDT) Date: Thu, 18 Jun 2009 20:19:00 -0000 Message-ID: <90baa01f0906181319h4541c20etf303075df61ca5de@mail.gmail.com> Subject: [patch] Support for x64 Windows From: Kai Tietz To: pthreads-win32@sourceware.org Content-Type: multipart/mixed; boundary=000e0cd24744086c90046ca51faf X-IsSubscribed: yes Mailing-List: contact pthreads-win32-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: pthreads-win32-owner@sourceware.org X-SW-Source: 2009/txt/msg00030.txt.bz2 --000e0cd24744086c90046ca51faf Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 729 Hi, this patch (a bit rough and need some final cleaning up and some extension to the test run makefile for allowing CROSS here) enables pthread to be build for the x86_64-pc-mingw32 target. If there is interest on this patch, some review would be fine. I'll prepare a proper patch file (with ChangeLog) after review. This patch is mainly about 2 general issues. Correct the assumption that sizeof(int)==sizeof(void *) and sizeof(long)==sizeof(void *), using InterlockedExchangeCompare & co for pointers (I am using here the ..Pointer variant), and an proper check for timespec. Thanks in advance, Kai -- | (\_/) This is Bunny. Copy and paste | (='.'=) Bunny into your signature to help | (")_(") him gain world domination --000e0cd24744086c90046ca51faf Content-Type: application/octet-stream; name="w64sup.patch" Content-Disposition: attachment; filename="w64sup.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fw3x0ejk0 Content-length: 74900 SW5kZXg6IHB0aHJlYWRzL0dOVW1ha2VmaWxlCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIHB0aHJlYWRzLm9yaWcvR05VbWFrZWZpbGUKKysrIHB0aHJl YWRzL0dOVW1ha2VmaWxlCkBAIC01OCwxMiArNTgsMTIgQEAgQ1hYICAgICA9 ICQoQ1JPU1MpZysrCiBSQU5MSUIgID0gJChDUk9TUylyYW5saWIKIFJDCT0g JChDUk9TUyl3aW5kcmVzCiAKLU9QVAk9ICQoQ0xFQU5VUCkgLU8zIC1maW5s aW5lLWZ1bmN0aW9ucworT1BUCT0gJChDTEVBTlVQKSAtTzMgIC1ESEFWRV9T VFJVQ1RfVElNRVNQRUMgLURfX01JTkdXMzJfXyAtZmlubGluZS1mdW5jdGlv bnMKIERPUFQJPSAkKENMRUFOVVApIC1nIC1PMAogWE9QVAk9CiAKIFJDRkxB R1MJCT0gLS1pbmNsdWRlLWRpcj0uCi1MRkxBR1MJCT0gLWx3c29jazMyCitM RkxBR1MJCT0gLWx3czJfMzIKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAjIFRoZSBsaWJyYXJ5IGNhbiBiZSBidWlsdCB3aXRoIHNvbWUgYWx0 ZXJuYXRpdmUgYmVoYXZpb3VyIHRvCkluZGV4OiBwdGhyZWFkcy90ZXN0cy9H TlVtYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwdGhyZWFk cy5vcmlnL3Rlc3RzL0dOVW1ha2VmaWxlCisrKyBwdGhyZWFkcy90ZXN0cy9H TlVtYWtlZmlsZQpAQCAtNTEsNyArNTEsNyBAQCBNQUtFCT0gbWFrZQogIwog WFhDRkxBR1MJPSAKIFhYTElCUwk9IC1sd3MyXzMyCi0jQ0ZMQUdTCT0gLU8z IC1VTkRFQlVHIC1XYWxsICQoWFhDRkxBR1MpCisjQ0ZMQUdTCT0gLU8zIC1E X01fQU1ENjQgLVVOREVCVUcgLVdhbGwgJChYWENGTEFHUykKIENGTEFHUwk9 IC1nIC1VTkRFQlVHIC1XYWxsICQoWFhDRkxBR1MpCiBCVUlMRF9ESVIJPSAu LgogSU5DTFVERVMJPSAtSS4KQEAgLTY5LDcgKzY5LDcgQEAgTElCCT0gbGli cHRocmVhZCQoR0NYKS5hCiBETEwJPSBwdGhyZWFkJChHQ1gpLmRsbAogUUFQ Qwk9IC4uL1F1ZXVlVXNlckFQQ0V4L1VzZXIvcXVzZXJleC5kbGwKIAotQ09Q WUZJTEVTCT0gJChIRFIpICQoTElCKSAkKERMTCkgJChRQVBDKQorQ09QWUZJ TEVTCT0gJChIRFIpICQoTElCKSAkKERMTCkKIAogIyBJZiBhIHRlc3QgY2Fz ZSByZXR1cm5zIGEgbm9uLXplcm8gZXhpdCBjb2RlIHRvIHRoZSBzaGVsbCwg bWFrZSB3aWxsCiAjIHN0b3AuCkBAIC0xMzYsNyArMTM2LDcgQEAgYWxsOgog CUAgJChNQUtFKSBjbGVhbiBHQ0UKIAogR0M6Ci0JJChNQUtFKSBURVNUPUdD IENDPWdjYyBYWENGTEFHUz0iLURfX0NMRUFOVVBfQyIgYWxsLXBhc3MKKwkk KE1BS0UpIFRFU1Q9R0MgQ0M9eDg2XzY0LXBjLW1pbmd3MzItZ2NjIFhYQ0ZM QUdTPSItRF9fQ0xFQU5VUF9DIiBhbGwtcGFzcwogCiBHQ0U6CiAJJChNQUtF KSBURVNUPUdDRSBDQz1nKysgWFhDRkxBR1M9Ii1tdGhyZWFkcyAtRF9fQ0xF QU5VUF9DWFgiIGFsbC1wYXNzCkBAIC0zMTYsMjQgKzMxNiwyNCBAQCB2YWxp ZDIucGFzczogdmFsaWQxLnBhc3MKIAogc2l6ZXMucGFzczogc2l6ZXMuZXhl CiAJQCAkKEVDSE8pIFJ1bm5pbmcgJCoKLQkkPCA+IFNJWkVTLiQoVEVTVCkK KwkuLyQ8ID4gU0laRVMuJChURVNUKQogCUAgJChDQVQpIFNJWkVTLiQoVEVT VCkKIAlAICQoRUNITykgUGFzc2VkCiAJQCAkKFRPVUNIKSAkQAogCiAlLnBh c3M6ICUuZXhlCiAJQCAkKEVDSE8pIFJ1bm5pbmcgJCoKLQkkKgorCS4vJCoK IAlAICQoRUNITykgUGFzc2VkCiAJQCAkKFRPVUNIKSAkQAogCi0lLmJlbmNo OiAkKExJQikgJChETEwpICQoSERSKSAkKFFBUEMpICQoWFhMSUJTKSAlLmV4 ZQorJS5iZW5jaDogJChMSUIpICQoRExMKSAkKEhEUikgICQoWFhMSUJTKSAl LmV4ZQogCUAgJChFQ0hPKSBSdW5uaW5nICQqCiAJJCoKIAlAICQoRUNITykg RG9uZQogCUAgJChUT1VDSCkgJEAKIAotJS5leGU6ICUuYyAkKExJQikgJChE TEwpICQoSERSKSAkKFFBUEMpCislLmV4ZTogJS5jICQoTElCKSAkKERMTCkg JChIRFIpCiAJQCAkKEVDSE8pIENvbXBpbGluZyAkQAogCUAgJChFQ0hPKSAk KENDKSAkKENGTEFHUykgLW8gJEAgJDwgJChJTkNMVURFUykgLUwuIC1scHRo cmVhZCQoR0NYKSAtbHN1cGMrKyAkKFhYTElCUykKIAlAICQoQ0MpICQoQ0ZM QUdTKSAtbyAkQCAkPCAkKElOQ0xVREVTKSAtTC4gLWxwdGhyZWFkJChHQ1gp IC1sc3VwYysrICQoWFhMSUJTKQpJbmRleDogcHRocmVhZHMvdGVzdHMvYmFy cmllcjMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwdGhyZWFkcy5v cmlnL3Rlc3RzL2JhcnJpZXIzLmMKKysrIHB0aHJlYWRzL3Rlc3RzL2JhcnJp ZXIzLmMKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlICJ0ZXN0LmgiCiAg CiBwdGhyZWFkX2JhcnJpZXJfdCBiYXJyaWVyID0gTlVMTDsKLXN0YXRpYyBp bnQgcmVzdWx0ID0gMTsKK3N0YXRpYyBEV09SRF9QVFIgcmVzdWx0ID0gMTsK IAogdm9pZCAqIGZ1bmModm9pZCAqIGFyZykKIHsKSW5kZXg6IHB0aHJlYWRz L3Rlc3RzL2NhbmNlbDIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBw dGhyZWFkcy5vcmlnL3Rlc3RzL2NhbmNlbDIuYworKysgcHRocmVhZHMvdGVz dHMvY2FuY2VsMi5jCkBAIC0yMTcsNyArMjE3LDcgQEAgbWFpbigpCiAgIGZv ciAoaSA9IDE7IGkgPD0gTlVNVEhSRUFEUzsgaSsrKQogICAgIHsKICAgICAg IGludCBmYWlsID0gMDsKLSAgICAgIGludCByZXN1bHQgPSAwOworICAgICAg RFdPUkRfUFRSIHJlc3VsdCA9IDA7CiAKICAgICAgIGFzc2VydChwdGhyZWFk X2pvaW4odFtpXSwgKHZvaWQgKiopICZyZXN1bHQpID09IDApOwogICAgICAg ZmFpbCA9IChyZXN1bHQgIT0gKGludCkgUFRIUkVBRF9DQU5DRUxFRCk7Cklu ZGV4OiBwdGhyZWFkcy90ZXN0cy9jYW5jZWwzLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gcHRocmVhZHMub3JpZy90ZXN0cy9jYW5jZWwzLmMKKysr IHB0aHJlYWRzL3Rlc3RzL2NhbmNlbDMuYwpAQCAtMTczLDcgKzE3Myw3IEBA IG1haW4gKCkKICAgZm9yIChpID0gMTsgaSA8PSBOVU1USFJFQURTOyBpKysp CiAgICAgewogICAgICAgaW50IGZhaWwgPSAwOwotICAgICAgaW50IHJlc3Vs dCA9IDA7CisgICAgICBEV09SRF9QVFIgcmVzdWx0ID0gMDsKIAogICAgICAg LyoKICAgICAgICAqIFRoZSB0aHJlYWQgZG9lcyBub3QgY29udGFpbiBhbnkg Y2FuY2VsYXRpb24gcG9pbnRzLCBzbwpJbmRleDogcHRocmVhZHMvdGVzdHMv Y2FuY2VsNC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHB0aHJlYWRz Lm9yaWcvdGVzdHMvY2FuY2VsNC5jCisrKyBwdGhyZWFkcy90ZXN0cy9jYW5j ZWw0LmMKQEAgLTk4LDcgKzk4LDcgQEAgc3RhdGljIGJhZ190IHRocmVhZGJh Z1tOVU1USFJFQURTICsgMV07CiB2b2lkICoKIG15dGhyZWFkKHZvaWQgKiBh cmcpCiB7Ci0gIGludCByZXN1bHQgPSAoKGludClQVEhSRUFEX0NBTkNFTEVE ICsgMSk7CisgIGludCByZXN1bHQgPSAoKGludCkoc2l6ZV90KVBUSFJFQURf Q0FOQ0VMRUQgKyAxKTsKICAgYmFnX3QgKiBiYWcgPSAoYmFnX3QgKikgYXJn OwogCiAgIGFzc2VydChiYWcgPT0gJnRocmVhZGJhZ1tiYWctPnRocmVhZG51 bV0pOwpAQCAtMTE4LDcgKzExOCw3IEBAIG15dGhyZWFkKHZvaWQgKiBhcmcp CiAgIGZvciAoYmFnLT5jb3VudCA9IDA7IGJhZy0+Y291bnQgPCAyMDsgYmFn LT5jb3VudCsrKQogICAgIFNsZWVwKDEwMCk7CiAKLSAgcmV0dXJuICh2b2lk ICopIHJlc3VsdDsKKyAgcmV0dXJuICh2b2lkICopIChzaXplX3QpcmVzdWx0 OwogfQogCiBpbnQKQEAgLTE3Myw3ICsxNzMsNyBAQCBtYWluKCkKICAgZm9y IChpID0gMTsgaSA8PSBOVU1USFJFQURTOyBpKyspCiAgICAgewogICAgICAg aW50IGZhaWwgPSAwOwotICAgICAgaW50IHJlc3VsdCA9IDA7CisgICAgICBE V09SRF9QVFIgcmVzdWx0ID0gMDsKIAogICAgICAgLyoKICAgICAgICAqIFRo ZSB0aHJlYWQgZG9lcyBub3QgY29udGFpbiBhbnkgY2FuY2VsYXRpb24gcG9p bnRzLCBzbwpAQCAtMTgyLDcgKzE4Miw3IEBAIG1haW4oKQogICAgICAgICov CiAgICAgICBhc3NlcnQocHRocmVhZF9qb2luKHRbaV0sICh2b2lkICoqKSAm cmVzdWx0KSA9PSAwKTsKIAotICAgICAgZmFpbCA9IChyZXN1bHQgPT0gKGlu dCkgUFRIUkVBRF9DQU5DRUxFRCk7CisgICAgICBmYWlsID0gKHJlc3VsdCA9 PSAoaW50KSAoc2l6ZV90KSBQVEhSRUFEX0NBTkNFTEVEKTsKIAogICAgICAg aWYgKGZhaWwpCiAJewpJbmRleDogcHRocmVhZHMvdGVzdHMvY2FuY2VsNS5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHB0aHJlYWRzLm9yaWcvdGVz dHMvY2FuY2VsNS5jCisrKyBwdGhyZWFkcy90ZXN0cy9jYW5jZWw1LmMKQEAg LTE3MSw3ICsxNzEsNyBAQCBtYWluICgpCiAgIGZvciAoaSA9IDE7IGkgPD0g TlVNVEhSRUFEUzsgaSsrKQogICAgIHsKICAgICAgIGludCBmYWlsID0gMDsK LSAgICAgIGludCByZXN1bHQgPSAwOworICAgICAgRFdPUkRfUFRSIHJlc3Vs dCA9IDA7CiAKICAgICAgIC8qCiAgICAgICAgKiBUaGUgdGhyZWFkIGRvZXMg bm90IGNvbnRhaW4gYW55IGNhbmNlbGF0aW9uIHBvaW50cywgc28KSW5kZXg6 IHB0aHJlYWRzL3Rlc3RzL2NhbmNlbDZhLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gcHRocmVhZHMub3JpZy90ZXN0cy9jYW5jZWw2YS5jCisrKyBw dGhyZWFkcy90ZXN0cy9jYW5jZWw2YS5jCkBAIC04NSw3ICs4NSw3IEBAIHN0 YXRpYyBiYWdfdCB0aHJlYWRiYWdbTlVNVEhSRUFEUyArIDFdOwogdm9pZCAq CiBteXRocmVhZCh2b2lkICogYXJnKQogewotICBpbnQgcmVzdWx0ID0gKChp bnQpUFRIUkVBRF9DQU5DRUxFRCArIDEpOworICBpbnQgcmVzdWx0ID0gKChp bnQpKHNpemVfdClQVEhSRUFEX0NBTkNFTEVEICsgMSk7CiAgIGJhZ190ICog YmFnID0gKGJhZ190ICopIGFyZzsKIAogICBhc3NlcnQoYmFnID09ICZ0aHJl YWRiYWdbYmFnLT50aHJlYWRudW1dKTsKQEAgLTEwNSw3ICsxMDUsNyBAQCBt eXRocmVhZCh2b2lkICogYXJnKQogICBmb3IgKGJhZy0+Y291bnQgPSAwOyBi YWctPmNvdW50IDwgMTAwOyBiYWctPmNvdW50KyspCiAgICAgU2xlZXAoMTAw KTsKIAotICByZXR1cm4gKHZvaWQgKikgcmVzdWx0OworICByZXR1cm4gKHZv aWQgKikgKHNpemVfdClyZXN1bHQ7CiB9CiAKIGludApAQCAtMTYxLDcgKzE2 MSw3IEBAIG1haW4oKQogICBmb3IgKGkgPSAxOyBpIDw9IE5VTVRIUkVBRFM7 IGkrKykKICAgICB7CiAgICAgICBpbnQgZmFpbCA9IDA7Ci0gICAgICBpbnQg cmVzdWx0ID0gMDsKKyAgICAgIERXT1JEX1BUUiByZXN1bHQgPSAwOwogCiAg ICAgICAvKgogICAgICAgICogVGhlIHRocmVhZCBkb2VzIG5vdCBjb250YWlu IGFueSBjYW5jZWxhdGlvbiBwb2ludHMsIHNvCkBAIC0xNzAsNyArMTcwLDcg QEAgbWFpbigpCiAgICAgICAgKi8KICAgICAgIGFzc2VydChwdGhyZWFkX2pv aW4odFtpXSwgKHZvaWQgKiopICZyZXN1bHQpID09IDApOwogCi0gICAgICBm YWlsID0gKHJlc3VsdCAhPSAoaW50KSBQVEhSRUFEX0NBTkNFTEVEKTsKKyAg ICAgIGZhaWwgPSAocmVzdWx0ICE9IChpbnQpIChzaXplX3QpIFBUSFJFQURf Q0FOQ0VMRUQpOwogCiAgICAgICBpZiAoZmFpbCkKIAl7CkluZGV4OiBwdGhy ZWFkcy90ZXN0cy9jYW5jZWw2ZC5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIHB0aHJlYWRzLm9yaWcvdGVzdHMvY2FuY2VsNmQuYworKysgcHRocmVh ZHMvdGVzdHMvY2FuY2VsNmQuYwpAQCAtODYsNyArODYsNyBAQCBzdGF0aWMg YmFnX3QgdGhyZWFkYmFnW05VTVRIUkVBRFMgKyAxXTsKIHZvaWQgKgogbXl0 aHJlYWQodm9pZCAqIGFyZykKIHsKLSAgaW50IHJlc3VsdCA9ICgoaW50KVBU SFJFQURfQ0FOQ0VMRUQgKyAxKTsKKyAgaW50IHJlc3VsdCA9ICgoaW50KSAo c2l6ZV90KSBQVEhSRUFEX0NBTkNFTEVEICsgMSk7CiAgIGJhZ190ICogYmFn ID0gKGJhZ190ICopIGFyZzsKIAogICBhc3NlcnQoYmFnID09ICZ0aHJlYWRi YWdbYmFnLT50aHJlYWRudW1dKTsKQEAgLTEwOSw3ICsxMDksNyBAQCBteXRo cmVhZCh2b2lkICogYXJnKQogICAgICAgcHRocmVhZF90ZXN0Y2FuY2VsKCk7 CiAgICAgfQogCi0gIHJldHVybiAodm9pZCAqKSByZXN1bHQ7CisgIHJldHVy biAodm9pZCAqKSAoc2l6ZV90KSByZXN1bHQ7CiB9CiAKIGludApAQCAtMTY1 LDExICsxNjUsMTEgQEAgbWFpbigpCiAgIGZvciAoaSA9IDE7IGkgPD0gTlVN VEhSRUFEUzsgaSsrKQogICAgIHsKICAgICAgIGludCBmYWlsID0gMDsKLSAg ICAgIGludCByZXN1bHQgPSAwOworICAgICAgRFdPUkRfUFRSIHJlc3VsdCA9 IDA7CiAKICAgICAgIGFzc2VydChwdGhyZWFkX2pvaW4odFtpXSwgKHZvaWQg KiopICZyZXN1bHQpID09IDApOwogCi0gICAgICBmYWlsID0gKHJlc3VsdCAh PSAoaW50KSBQVEhSRUFEX0NBTkNFTEVEKTsKKyAgICAgIGZhaWwgPSAocmVz dWx0ICE9IChpbnQpIChzaXplX3QpIFBUSFJFQURfQ0FOQ0VMRUQpOwogCiAg ICAgICBpZiAoZmFpbCkKIAl7CkluZGV4OiBwdGhyZWFkcy90ZXN0cy9jbGVh bnVwMC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHB0aHJlYWRzLm9y aWcvdGVzdHMvY2xlYW51cDAuYworKysgcHRocmVhZHMvdGVzdHMvY2xlYW51 cDAuYwpAQCAtMTg5LDcgKzE4OSw3IEBAIG1haW4oKQogICBmb3IgKGkgPSAx OyBpIDw9IE5VTVRIUkVBRFM7IGkrKykKICAgICB7CiAgICAgICBpbnQgZmFp bCA9IDA7Ci0gICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgIERXT1JEX1BU UiByZXN1bHQgPSAwOwogCiAgICAgICBhc3NlcnQocHRocmVhZF9qb2luKHRb aV0sICh2b2lkICoqKSAmcmVzdWx0KSA9PSAwKTsKIApJbmRleDogcHRocmVh ZHMvdGVzdHMvY2xlYW51cDEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBwdGhyZWFkcy5vcmlnL3Rlc3RzL2NsZWFudXAxLmMKKysrIHB0aHJlYWRz L3Rlc3RzL2NsZWFudXAxLmMKQEAgLTIwMyw3ICsyMDMsNyBAQCBtYWluKCkK ICAgZm9yIChpID0gMTsgaSA8PSBOVU1USFJFQURTOyBpKyspCiAgICAgewog ICAgICAgaW50IGZhaWwgPSAwOwotICAgICAgaW50IHJlc3VsdCA9IDA7Cisg ICAgICBEV09SRF9QVFIgcmVzdWx0ID0gMDsKIAogICAgICAgYXNzZXJ0KHB0 aHJlYWRfam9pbih0W2ldLCAodm9pZCAqKikgJnJlc3VsdCkgPT0gMCk7CiAK SW5kZXg6IHB0aHJlYWRzL3Rlc3RzL2NsZWFudXAyLmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gcHRocmVhZHMub3JpZy90ZXN0cy9jbGVhbnVwMi5j CisrKyBwdGhyZWFkcy90ZXN0cy9jbGVhbnVwMi5jCkBAIC0xNzgsNyArMTc4 LDcgQEAgbWFpbigpCiAgIGZvciAoaSA9IDE7IGkgPD0gTlVNVEhSRUFEUzsg aSsrKQogICAgIHsKICAgICAgIGludCBmYWlsID0gMDsKLSAgICAgIGludCBy ZXN1bHQgPSAwOworICAgICAgRFdPUkRfUFRSIHJlc3VsdCA9IDA7CiAKICAg ICAgIGFzc2VydChwdGhyZWFkX2pvaW4odFtpXSwgKHZvaWQgKiopICZyZXN1 bHQpID09IDApOwogCkluZGV4OiBwdGhyZWFkcy90ZXN0cy9jbGVhbnVwMy5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHB0aHJlYWRzLm9yaWcvdGVz dHMvY2xlYW51cDMuYworKysgcHRocmVhZHMvdGVzdHMvY2xlYW51cDMuYwpA QCAtMTgzLDcgKzE4Myw3IEBAIG1haW4oKQogICBmb3IgKGkgPSAxOyBpIDw9 IE5VTVRIUkVBRFM7IGkrKykKICAgICB7CiAgICAgICBpbnQgZmFpbCA9IDA7 Ci0gICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgIERXT1JEX1BUUiByZXN1 bHQgPSAwOwogCiAgICAgICBhc3NlcnQocHRocmVhZF9qb2luKHRbaV0sICh2 b2lkICoqKSAmcmVzdWx0KSA9PSAwKTsKIApJbmRleDogcHRocmVhZHMvdGVz dHMvY29uZHZhcjFfMi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHB0 aHJlYWRzLm9yaWcvdGVzdHMvY29uZHZhcjFfMi5jCisrKyBwdGhyZWFkcy90 ZXN0cy9jb25kdmFyMV8yLmMKQEAgLTg5LDcgKzg5LDcgQEAgaW50CiBtYWlu KCkKIHsKICAgaW50IGksIGosIGs7Ci0gIGludCByZXN1bHQgPSAtMTsKKyAg RFdPUkRfUFRSIHJlc3VsdCA9IC0xOwogICBwdGhyZWFkX3QgdDsKIAogICBm b3IgKGsgPSAwOyBrIDwgTlVNX0xPT1BTOyBrKyspCkluZGV4OiBwdGhyZWFk cy90ZXN0cy9jb25kdmFyMi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IHB0aHJlYWRzLm9yaWcvdGVzdHMvY29uZHZhcjIuYworKysgcHRocmVhZHMv dGVzdHMvY29uZHZhcjIuYwpAQCAtOTksNyArOTksNyBAQCBtYWluKCkKICAg LyogZ2V0IGN1cnJlbnQgc3lzdGVtIHRpbWUgKi8KICAgX2Z0aW1lKCZjdXJy U3lzVGltZSk7CiAKLSAgYWJzdGltZS50dl9zZWMgPSBjdXJyU3lzVGltZS50 aW1lOworICBhYnN0aW1lLnR2X3NlYyA9IChsb25nKWN1cnJTeXNUaW1lLnRp bWU7CiAgIGFic3RpbWUudHZfbnNlYyA9IE5BTk9TRUNfUEVSX01JTExJU0VD ICogY3VyclN5c1RpbWUubWlsbGl0bTsKIAogICBhYnN0aW1lLnR2X3NlYyAr PSAxOwpAQCAtMTA5LDcgKzEwOSw3IEBAIG1haW4oKQogICBhc3NlcnQocHRo cmVhZF9tdXRleF91bmxvY2soJm11dGV4KSA9PSAwKTsKIAogICB7Ci0gIGlu dCByZXN1bHQgPSBwdGhyZWFkX2NvbmRfZGVzdHJveSgmY3YpOworICBEV09S RF9QVFIgcmVzdWx0ID0gcHRocmVhZF9jb25kX2Rlc3Ryb3koJmN2KTsKICAg aWYgKHJlc3VsdCAhPSAwKQogICAgIHsKICAgICAgIGZwcmludGYoc3RkZXJy LCAiUmVzdWx0ID0gJXNcbiIsIGVycm9yX3N0cmluZ1tyZXN1bHRdKTsKSW5k ZXg6IHB0aHJlYWRzL3Rlc3RzL2NvbmR2YXIyXzEuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBwdGhyZWFkcy5vcmlnL3Rlc3RzL2NvbmR2YXIyXzEu YworKysgcHRocmVhZHMvdGVzdHMvY29uZHZhcjJfMS5jCkBAIC0xMDUsNyAr MTA1LDcgQEAgbWFpbigpCiB7CiAgIGludCBpOwogICBwdGhyZWFkX3QgdFtO VU1USFJFQURTICsgMV07Ci0gIGludCByZXN1bHQgPSAwOworICBEV09SRF9Q VFIgcmVzdWx0ID0gMDsKICAgc3RydWN0IF90aW1lYiBjdXJyU3lzVGltZTsK ICAgY29uc3QgRFdPUkQgTkFOT1NFQ19QRVJfTUlMTElTRUMgPSAxMDAwMDAw OwogCkBAIC0xMTYsNyArMTE2LDcgQEAgbWFpbigpCiAgIC8qIGdldCBjdXJy ZW50IHN5c3RlbSB0aW1lICovCiAgIF9mdGltZSgmY3VyclN5c1RpbWUpOwog Ci0gIGFic3RpbWUudHZfc2VjID0gY3VyclN5c1RpbWUudGltZTsKKyAgYWJz dGltZS50dl9zZWMgPSAobG9uZyljdXJyU3lzVGltZS50aW1lOwogICBhYnN0 aW1lLnR2X25zZWMgPSBOQU5PU0VDX1BFUl9NSUxMSVNFQyAqIGN1cnJTeXNU aW1lLm1pbGxpdG07CiAKICAgYWJzdGltZS50dl9zZWMgKz0gNTsKSW5kZXg6 IHB0aHJlYWRzL3Rlc3RzL2NvbmR2YXIzLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gcHRocmVhZHMub3JpZy90ZXN0cy9jb25kdmFyMy5jCisrKyBw dGhyZWFkcy90ZXN0cy9jb25kdmFyMy5jCkBAIC0xMjYsNyArMTI2LDcgQEAg bWFpbigpCiAgIC8qIGdldCBjdXJyZW50IHN5c3RlbSB0aW1lICovCiAgIF9m dGltZSgmY3VyclN5c1RpbWUpOwogCi0gIGFic3RpbWUudHZfc2VjID0gY3Vy clN5c1RpbWUudGltZTsKKyAgYWJzdGltZS50dl9zZWMgPSAobG9uZyljdXJy U3lzVGltZS50aW1lOwogICBhYnN0aW1lLnR2X25zZWMgPSBOQU5PU0VDX1BF Ul9NSUxMSVNFQyAqIGN1cnJTeXNUaW1lLm1pbGxpdG07CiAKICAgYXNzZXJ0 KHB0aHJlYWRfY3JlYXRlKCZ0WzFdLCBOVUxMLCBteXRocmVhZCwgKHZvaWQg KikgMSkgPT0gMCk7CkluZGV4OiBwdGhyZWFkcy90ZXN0cy9jb25kdmFyM18x LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcHRocmVhZHMub3JpZy90 ZXN0cy9jb25kdmFyM18xLmMKKysrIHB0aHJlYWRzL3Rlc3RzL2NvbmR2YXIz XzEuYwpAQCAtMTI2LDcgKzEyNiw3IEBAIG1haW4oKQogewogICBpbnQgaTsK ICAgcHRocmVhZF90IHRbTlVNVEhSRUFEUyArIDFdOwotICBpbnQgcmVzdWx0 ID0gMDsKKyAgRFdPUkRfUFRSIHJlc3VsdCA9IDA7CiAgIHN0cnVjdCBfdGlt ZWIgY3VyclN5c1RpbWU7CiAgIGNvbnN0IERXT1JEIE5BTk9TRUNfUEVSX01J TExJU0VDID0gMTAwMDAwMDsKIApAQCAtMTM5LDcgKzEzOSw3IEBAIG1haW4o KQogICAvKiBnZXQgY3VycmVudCBzeXN0ZW0gdGltZSAqLwogICBfZnRpbWUo JmN1cnJTeXNUaW1lKTsKIAotICBhYnN0aW1lLnR2X3NlYyA9IGN1cnJTeXNU aW1lLnRpbWU7CisgIGFic3RpbWUudHZfc2VjID0gKGxvbmcpY3VyclN5c1Rp bWUudGltZTsKICAgYWJzdGltZS50dl9uc2VjID0gTkFOT1NFQ19QRVJfTUlM TElTRUMgKiBjdXJyU3lzVGltZS5taWxsaXRtOwogCiAgIGFic3RpbWUudHZf c2VjICs9IDU7CkluZGV4OiBwdGhyZWFkcy90ZXN0cy9jb25kdmFyM18yLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gcHRocmVhZHMub3JpZy90ZXN0 cy9jb25kdmFyM18yLmMKKysrIHB0aHJlYWRzL3Rlc3RzL2NvbmR2YXIzXzIu YwpAQCAtMTI3LDcgKzEyNyw3IEBAIG1haW4oKQogewogICBpbnQgaTsKICAg cHRocmVhZF90IHRbTlVNVEhSRUFEUyArIDFdOwotICBpbnQgcmVzdWx0ID0g MDsKKyAgRFdPUkRfUFRSIHJlc3VsdCA9IDA7CiAgIHN0cnVjdCBfdGltZWIg Y3VyclN5c1RpbWU7CiAgIGNvbnN0IERXT1JEIE5BTk9TRUNfUEVSX01JTExJ U0VDID0gMTAwMDAwMDsKIApAQCAtMTM4LDcgKzEzOCw3IEBAIG1haW4oKQog ICAvKiBnZXQgY3VycmVudCBzeXN0ZW0gdGltZSAqLwogICBfZnRpbWUoJmN1 cnJTeXNUaW1lKTsKIAotICBhYnN0aW1lLnR2X3NlYyA9IGFic3RpbWUudHZf c2VjID0gY3VyclN5c1RpbWUudGltZSArIDU7CisgIGFic3RpbWUudHZfc2Vj ID0gYWJzdGltZS50dl9zZWMgPSAobG9uZyljdXJyU3lzVGltZS50aW1lICsg NTsKICAgYWJzdGltZS50dl9uc2VjID0gYWJzdGltZTIudHZfbnNlYyA9IE5B Tk9TRUNfUEVSX01JTExJU0VDICogY3VyclN5c1RpbWUubWlsbGl0bTsKIAog ICBhc3NlcnQocHRocmVhZF9tdXRleF9sb2NrKCZtdXRleCkgPT0gMCk7Cklu ZGV4OiBwdGhyZWFkcy90ZXN0cy9jb25kdmFyM18zLmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gcHRocmVhZHMub3JpZy90ZXN0cy9jb25kdmFyM18z LmMKKysrIHB0aHJlYWRzL3Rlc3RzL2NvbmR2YXIzXzMuYwpAQCAtOTYsNyAr OTYsNyBAQCBpbnQgbWFpbigpCiAgICAvKiBnZXQgY3VycmVudCBzeXN0ZW0g dGltZSAqLwogICAgX2Z0aW1lKCZjdXJyU3lzVGltZSk7CiAKLSAgIGFic3Rp bWUudHZfc2VjID0gY3VyclN5c1RpbWUudGltZTsKKyAgIGFic3RpbWUudHZf c2VjID0gKGxvbmcpY3VyclN5c1RpbWUudGltZTsKICAgIGFic3RpbWUudHZf bnNlYyA9IE5BTk9TRUNfUEVSX01JTExJU0VDICogY3VyclN5c1RpbWUubWls bGl0bTsKICAgIGFic3RpbWUudHZfc2VjICs9IDE7CiAKQEAgLTEyMCw3ICsx MjAsNyBAQCBpbnQgbWFpbigpCiAKICAgIGFzc2VydChwdGhyZWFkX211dGV4 X2xvY2soJm10eCkgPT0gMCk7CiAKLSAgIGFic3RpbWUudHZfc2VjID0gY3Vy clN5c1RpbWUudGltZTsKKyAgIGFic3RpbWUudHZfc2VjID0gKGxvbmcpY3Vy clN5c1RpbWUudGltZTsKICAgIGFic3RpbWUudHZfbnNlYyA9IE5BTk9TRUNf UEVSX01JTExJU0VDICogY3VyclN5c1RpbWUubWlsbGl0bTsKICAgIGFic3Rp bWUudHZfc2VjICs9IDE7CiAKSW5kZXg6IHB0aHJlYWRzL3Rlc3RzL2NvbmR2 YXI0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcHRocmVhZHMub3Jp Zy90ZXN0cy9jb25kdmFyNC5jCisrKyBwdGhyZWFkcy90ZXN0cy9jb25kdmFy NC5jCkBAIC0xMzAsNyArMTMwLDcgQEAgbWFpbigpCiAgIC8qIGdldCBjdXJy ZW50IHN5c3RlbSB0aW1lICovCiAgIF9mdGltZSgmY3VyclN5c1RpbWUpOwog Ci0gIGFic3RpbWUudHZfc2VjID0gY3VyclN5c1RpbWUudGltZTsKKyAgYWJz dGltZS50dl9zZWMgPSAobG9uZyljdXJyU3lzVGltZS50aW1lOwogICBhYnN0 aW1lLnR2X25zZWMgPSBOQU5PU0VDX1BFUl9NSUxMSVNFQyAqIGN1cnJTeXNU aW1lLm1pbGxpdG07CiAKICAgYWJzdGltZS50dl9zZWMgKz0gNTsKQEAgLTE0 Myw3ICsxNDMsNyBAQCBtYWluKCkKIAogICBfZnRpbWUoJmN1cnJTeXNUaW1l KTsKIAotICBhYnN0aW1lLnR2X3NlYyA9IGN1cnJTeXNUaW1lLnRpbWU7Cisg IGFic3RpbWUudHZfc2VjID0gKGxvbmcpY3VyclN5c1RpbWUudGltZTsKICAg YWJzdGltZS50dl9uc2VjID0gTkFOT1NFQ19QRVJfTUlMTElTRUMgKiBjdXJy U3lzVGltZS5taWxsaXRtOwogCiAgIGFic3RpbWUudHZfc2VjICs9IDU7Cklu ZGV4OiBwdGhyZWFkcy90ZXN0cy9jb25kdmFyNS5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIHB0aHJlYWRzLm9yaWcvdGVzdHMvY29uZHZhcjUuYwor KysgcHRocmVhZHMvdGVzdHMvY29uZHZhcjUuYwpAQCAtMTI5LDcgKzEyOSw3 IEBAIG1haW4oKQogICAvKiBnZXQgY3VycmVudCBzeXN0ZW0gdGltZSAqLwog ICBfZnRpbWUoJmN1cnJTeXNUaW1lKTsKIAotICBhYnN0aW1lLnR2X3NlYyA9 IGN1cnJTeXNUaW1lLnRpbWU7CisgIGFic3RpbWUudHZfc2VjID0gKGxvbmcp Y3VyclN5c1RpbWUudGltZTsKICAgYWJzdGltZS50dl9uc2VjID0gTkFOT1NF Q19QRVJfTUlMTElTRUMgKiBjdXJyU3lzVGltZS5taWxsaXRtOwogCiAgIGFi c3RpbWUudHZfc2VjICs9IDU7CkBAIC0xNDIsNyArMTQyLDcgQEAgbWFpbigp CiAKICAgX2Z0aW1lKCZjdXJyU3lzVGltZSk7CiAKLSAgYWJzdGltZS50dl9z ZWMgPSBjdXJyU3lzVGltZS50aW1lOworICBhYnN0aW1lLnR2X3NlYyA9IChs b25nKWN1cnJTeXNUaW1lLnRpbWU7CiAgIGFic3RpbWUudHZfbnNlYyA9IE5B Tk9TRUNfUEVSX01JTExJU0VDICogY3VyclN5c1RpbWUubWlsbGl0bTsKIAog ICBhYnN0aW1lLnR2X3NlYyArPSA1OwpJbmRleDogcHRocmVhZHMvdGVzdHMv Y29uZHZhcjYuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwdGhyZWFk cy5vcmlnL3Rlc3RzL2NvbmR2YXI2LmMKKysrIHB0aHJlYWRzL3Rlc3RzL2Nv bmR2YXI2LmMKQEAgLTE1OSw3ICsxNTksNyBAQCBtYWluKCkKIAogICBfZnRp bWUoJmN1cnJTeXNUaW1lKTsKIAotICBhYnN0aW1lLnR2X3NlYyA9IGN1cnJT eXNUaW1lLnRpbWU7CisgIGFic3RpbWUudHZfc2VjID0gKGxvbmcpY3VyclN5 c1RpbWUudGltZTsKICAgYWJzdGltZS50dl9uc2VjID0gTkFOT1NFQ19QRVJf TUlMTElTRUMgKiBjdXJyU3lzVGltZS5taWxsaXRtOwogCiAgIGFic3RpbWUu dHZfc2VjICs9IDU7CkluZGV4OiBwdGhyZWFkcy90ZXN0cy9jb25kdmFyNy5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHB0aHJlYWRzLm9yaWcvdGVz dHMvY29uZHZhcjcuYworKysgcHRocmVhZHMvdGVzdHMvY29uZHZhcjcuYwpA QCAtMTY5LDcgKzE2OSw3IEBAIG1haW4oKQogCiAgIF9mdGltZSgmY3VyclN5 c1RpbWUpOwogCi0gIGFic3RpbWUudHZfc2VjID0gY3VyclN5c1RpbWUudGlt ZTsKKyAgYWJzdGltZS50dl9zZWMgPSAobG9uZyljdXJyU3lzVGltZS50aW1l OwogICBhYnN0aW1lLnR2X25zZWMgPSBOQU5PU0VDX1BFUl9NSUxMSVNFQyAq IGN1cnJTeXNUaW1lLm1pbGxpdG07CiAKICAgYWJzdGltZS50dl9zZWMgKz0g MTA7CkluZGV4OiBwdGhyZWFkcy90ZXN0cy9jb25kdmFyOC5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIHB0aHJlYWRzLm9yaWcvdGVzdHMvY29uZHZh cjguYworKysgcHRocmVhZHMvdGVzdHMvY29uZHZhcjguYwpAQCAtMTY2LDcg KzE2Niw3IEBAIG1haW4oKQogCiAgIF9mdGltZSgmY3VyclN5c1RpbWUpOwog Ci0gIGFic3RpbWUudHZfc2VjID0gY3VyclN5c1RpbWUudGltZTsKKyAgYWJz dGltZS50dl9zZWMgPSAobG9uZyljdXJyU3lzVGltZS50aW1lOwogICBhYnN0 aW1lLnR2X25zZWMgPSBOQU5PU0VDX1BFUl9NSUxMSVNFQyAqIGN1cnJTeXNU aW1lLm1pbGxpdG07CiAKICAgYWJzdGltZS50dl9zZWMgKz0gMTA7CkluZGV4 OiBwdGhyZWFkcy90ZXN0cy9jb25kdmFyOS5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIHB0aHJlYWRzLm9yaWcvdGVzdHMvY29uZHZhcjkuYworKysg cHRocmVhZHMvdGVzdHMvY29uZHZhcjkuYwpAQCAtMTc0LDcgKzE3NCw3IEBA IG1haW4oKQogCiAgIF9mdGltZSgmY3VyclN5c1RpbWUpOwogCi0gIGFic3Rp bWUudHZfc2VjID0gY3VyclN5c1RpbWUudGltZTsKKyAgYWJzdGltZS50dl9z ZWMgPSAobG9uZyljdXJyU3lzVGltZS50aW1lOwogICBhYnN0aW1lLnR2X25z ZWMgPSBOQU5PU0VDX1BFUl9NSUxMSVNFQyAqIGN1cnJTeXNUaW1lLm1pbGxp dG07CiAKICAgYWJzdGltZS50dl9zZWMgKz0gNTsKSW5kZXg6IHB0aHJlYWRz L3Rlc3RzL2RlbGF5Mi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHB0 aHJlYWRzLm9yaWcvdGVzdHMvZGVsYXkyLmMKKysrIHB0aHJlYWRzL3Rlc3Rz L2RlbGF5Mi5jCkBAIC02NSw3ICs2NSw3IEBAIGludAogbWFpbihpbnQgYXJn YywgY2hhciAqIGFyZ3ZbXSkKIHsKICAgcHRocmVhZF90IHQ7Ci0gIGludCBy ZXN1bHQgPSAwOworICBEV09SRF9QVFIgcmVzdWx0ID0gMDsKIAogICBhc3Nl cnQocHRocmVhZF9tdXRleF9sb2NrKCZteCkgPT0gMCk7CiAKSW5kZXg6IHB0 aHJlYWRzL3Rlc3RzL2V4Y2VwdGlvbjEuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBwdGhyZWFkcy5vcmlnL3Rlc3RzL2V4Y2VwdGlvbjEuYworKysg cHRocmVhZHMvdGVzdHMvZXhjZXB0aW9uMS5jCkBAIC0yMjYsNyArMjI2LDcg QEAgbWFpbigpCiAgIGZvciAoaSA9IDA7IGkgPCBOVU1USFJFQURTOyBpKysp CiAgICAgewogICAgICAgaW50IGZhaWwgPSAwOwotICAgICAgaW50IHJlc3Vs dCA9IDA7CisgICAgICBEV09SRF9QVFIgcmVzdWx0ID0gMDsKIAogCS8qIENh bmNlbGVkIHRocmVhZCAqLwogICAgICAgYXNzZXJ0KHB0aHJlYWRfam9pbihj dFtpXSwgKHZvaWQgKiopICZyZXN1bHQpID09IDApOwpJbmRleDogcHRocmVh ZHMvdGVzdHMvam9pbjAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBw dGhyZWFkcy5vcmlnL3Rlc3RzL2pvaW4wLmMKKysrIHB0aHJlYWRzL3Rlc3Rz L2pvaW4wLmMKQEAgLTUzLDcgKzUzLDcgQEAgaW50CiBtYWluKGludCBhcmdj LCBjaGFyICogYXJndltdKQogewogICBwdGhyZWFkX3QgaWQ7Ci0gIGludCBy ZXN1bHQ7CisgIERXT1JEX1BUUiByZXN1bHQ7CiAKICAgLyogQ3JlYXRlIGEg c2luZ2xlIHRocmVhZCBhbmQgd2FpdCBmb3IgaXQgdG8gZXhpdC4gKi8KICAg YXNzZXJ0KHB0aHJlYWRfY3JlYXRlKCZpZCwgTlVMTCwgZnVuYywgKHZvaWQg KikgMTIzKSA9PSAwKTsKSW5kZXg6IHB0aHJlYWRzL3Rlc3RzL2pvaW4xLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gcHRocmVhZHMub3JpZy90ZXN0 cy9qb2luMS5jCisrKyBwdGhyZWFkcy90ZXN0cy9qb2luMS5jCkBAIC01Niw3 ICs1Niw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiBhcmd2W10pCiB7CiAJ cHRocmVhZF90IGlkWzRdOwogCWludCBpOwotCWludCByZXN1bHQ7CisJRFdP UkRfUFRSIHJlc3VsdDsKIAogCS8qIENyZWF0ZSBhIGZldyB0aHJlYWRzIGFu ZCB0aGVuIGV4aXQuICovCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKSW5k ZXg6IHB0aHJlYWRzL3Rlc3RzL2pvaW4yLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gcHRocmVhZHMub3JpZy90ZXN0cy9qb2luMi5jCisrKyBwdGhy ZWFkcy90ZXN0cy9qb2luMi5jCkBAIC01MCw3ICs1MCw3IEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKiBhcmd2W10pCiB7CiAJcHRocmVhZF90IGlkWzRdOwog CWludCBpOwotCWludCByZXN1bHQ7CisJRFdPUkRfUFRSIHJlc3VsdDsKIAog CS8qIENyZWF0ZSBhIGZldyB0aHJlYWRzIGFuZCB0aGVuIGV4aXQuICovCiAJ Zm9yIChpID0gMDsgaSA8IDQ7IGkrKykKSW5kZXg6IHB0aHJlYWRzL3Rlc3Rz L2pvaW4zLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcHRocmVhZHMu b3JpZy90ZXN0cy9qb2luMy5jCisrKyBwdGhyZWFkcy90ZXN0cy9qb2luMy5j CkBAIC01MCw3ICs1MCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiBhcmd2 W10pCiB7CiAJcHRocmVhZF90IGlkWzRdOwogCWludCBpOwotCWludCByZXN1 bHQ7CisJRFdPUkRfUFRSIHJlc3VsdDsKIAogCS8qIENyZWF0ZSBhIGZldyB0 aHJlYWRzIGFuZCB0aGVuIGV4aXQuICovCiAJZm9yIChpID0gMDsgaSA8IDQ7 IGkrKykKSW5kZXg6IHB0aHJlYWRzL3Rlc3RzL211dGV4NmUuYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBwdGhyZWFkcy5vcmlnL3Rlc3RzL211dGV4 NmUuYworKysgcHRocmVhZHMvdGVzdHMvbXV0ZXg2ZS5jCkBAIC03NCw3ICs3 NCw3IEBAIGludAogbWFpbigpCiB7CiAgIHB0aHJlYWRfdCB0OwotICBpbnQg cmVzdWx0ID0gMDsKKyAgRFdPUkRfUFRSIHJlc3VsdCA9IDA7CiAgIGludCBt eFR5cGUgPSAtMTsKIAogICBhc3NlcnQocHRocmVhZF9tdXRleGF0dHJfaW5p dCgmbXhBdHRyKSA9PSAwKTsKSW5kZXg6IHB0aHJlYWRzL3Rlc3RzL211dGV4 NmVzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcHRocmVhZHMub3Jp Zy90ZXN0cy9tdXRleDZlcy5jCisrKyBwdGhyZWFkcy90ZXN0cy9tdXRleDZl cy5jCkBAIC03Myw3ICs3Myw3IEBAIGludAogbWFpbigpCiB7CiAgIHB0aHJl YWRfdCB0OwotICBpbnQgcmVzdWx0ID0gMDsKKyAgRFdPUkRfUFRSIHJlc3Vs dCA9IDA7CiAKICAgYXNzZXJ0KG11dGV4ID09IFBUSFJFQURfRVJST1JDSEVD S19NVVRFWF9JTklUSUFMSVpFUik7CiAKSW5kZXg6IHB0aHJlYWRzL3Rlc3Rz L211dGV4NnIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwdGhyZWFk cy5vcmlnL3Rlc3RzL211dGV4NnIuYworKysgcHRocmVhZHMvdGVzdHMvbXV0 ZXg2ci5jCkBAIC03Myw3ICs3Myw3IEBAIGludAogbWFpbigpCiB7CiAgIHB0 aHJlYWRfdCB0OwotICBpbnQgcmVzdWx0ID0gMDsKKyAgRFdPUkRfUFRSIHJl c3VsdCA9IDA7CiAgIGludCBteFR5cGUgPSAtMTsKIAogICBhc3NlcnQocHRo cmVhZF9tdXRleGF0dHJfaW5pdCgmbXhBdHRyKSA9PSAwKTsKSW5kZXg6IHB0 aHJlYWRzL3Rlc3RzL211dGV4NnJzLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gcHRocmVhZHMub3JpZy90ZXN0cy9tdXRleDZycy5jCisrKyBwdGhy ZWFkcy90ZXN0cy9tdXRleDZycy5jCkBAIC03Miw3ICs3Miw3IEBAIGludAog bWFpbigpCiB7CiAgIHB0aHJlYWRfdCB0OwotICBpbnQgcmVzdWx0ID0gMDsK KyAgRFdPUkRfUFRSIHJlc3VsdCA9IDA7CiAKICAgYXNzZXJ0KG11dGV4ID09 IFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSKTsKIApJbmRl eDogcHRocmVhZHMvdGVzdHMvbXV0ZXg3ZS5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIHB0aHJlYWRzLm9yaWcvdGVzdHMvbXV0ZXg3ZS5jCisrKyBw dGhyZWFkcy90ZXN0cy9tdXRleDdlLmMKQEAgLTc0LDcgKzc0LDcgQEAgaW50 CiBtYWluKCkKIHsKICAgcHRocmVhZF90IHQ7Ci0gIGludCByZXN1bHQgPSAw OworICBEV09SRF9QVFIgcmVzdWx0ID0gMDsKICAgaW50IG14VHlwZSA9IC0x OwogCiAgIGFzc2VydChwdGhyZWFkX211dGV4YXR0cl9pbml0KCZteEF0dHIp ID09IDApOwpJbmRleDogcHRocmVhZHMvdGVzdHMvbXV0ZXg3ci5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIHB0aHJlYWRzLm9yaWcvdGVzdHMvbXV0 ZXg3ci5jCisrKyBwdGhyZWFkcy90ZXN0cy9tdXRleDdyLmMKQEAgLTczLDcg KzczLDcgQEAgaW50CiBtYWluKCkKIHsKICAgcHRocmVhZF90IHQ7Ci0gIGlu dCByZXN1bHQgPSAwOworICBEV09SRF9QVFIgcmVzdWx0ID0gMDsKICAgaW50 IG14VHlwZSA9IC0xOwogCiAgIGFzc2VydChwdGhyZWFkX211dGV4YXR0cl9p bml0KCZteEF0dHIpID09IDApOwpJbmRleDogcHRocmVhZHMvdGVzdHMvbXV0 ZXg4LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcHRocmVhZHMub3Jp Zy90ZXN0cy9tdXRleDguYworKysgcHRocmVhZHMvdGVzdHMvbXV0ZXg4LmMK QEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCAqIGxvY2tlcih2b2lkICogYXJnKQog CiAgIF9mdGltZSgmY3VyclN5c1RpbWUpOwogCi0gIGFic3RpbWUudHZfc2Vj ID0gY3VyclN5c1RpbWUudGltZTsKKyAgYWJzdGltZS50dl9zZWMgPSAobG9u ZyljdXJyU3lzVGltZS50aW1lOwogICBhYnN0aW1lLnR2X25zZWMgPSBOQU5P U0VDX1BFUl9NSUxMSVNFQyAqIGN1cnJTeXNUaW1lLm1pbGxpdG07CiAKICAg YWJzdGltZS50dl9zZWMgKz0gMTsKSW5kZXg6IHB0aHJlYWRzL3Rlc3RzL211 dGV4OGUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwdGhyZWFkcy5v cmlnL3Rlc3RzL211dGV4OGUuYworKysgcHRocmVhZHMvdGVzdHMvbXV0ZXg4 ZS5jCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgKiBsb2NrZXIodm9pZCAqIGFy ZykKIAogICBfZnRpbWUoJmN1cnJTeXNUaW1lKTsKIAotICBhYnN0aW1lLnR2 X3NlYyA9IGN1cnJTeXNUaW1lLnRpbWU7CisgIGFic3RpbWUudHZfc2VjID0g KGxvbmcpY3VyclN5c1RpbWUudGltZTsKICAgYWJzdGltZS50dl9uc2VjID0g TkFOT1NFQ19QRVJfTUlMTElTRUMgKiBjdXJyU3lzVGltZS5taWxsaXRtOwog CiAgIGFic3RpbWUudHZfc2VjICs9IDE7CkluZGV4OiBwdGhyZWFkcy90ZXN0 cy9tdXRleDhuLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcHRocmVh ZHMub3JpZy90ZXN0cy9tdXRleDhuLmMKKysrIHB0aHJlYWRzL3Rlc3RzL211 dGV4OG4uYwpAQCAtNTcsNyArNTcsNyBAQCB2b2lkICogbG9ja2VyKHZvaWQg KiBhcmcpCiAKICAgX2Z0aW1lKCZjdXJyU3lzVGltZSk7CiAKLSAgYWJzdGlt ZS50dl9zZWMgPSBjdXJyU3lzVGltZS50aW1lOworICBhYnN0aW1lLnR2X3Nl YyA9IChsb25nKWN1cnJTeXNUaW1lLnRpbWU7CiAgIGFic3RpbWUudHZfbnNl YyA9IE5BTk9TRUNfUEVSX01JTExJU0VDICogY3VyclN5c1RpbWUubWlsbGl0 bTsKIAogICBhYnN0aW1lLnR2X3NlYyArPSAxOwpJbmRleDogcHRocmVhZHMv dGVzdHMvbXV0ZXg4ci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHB0 aHJlYWRzLm9yaWcvdGVzdHMvbXV0ZXg4ci5jCisrKyBwdGhyZWFkcy90ZXN0 cy9tdXRleDhyLmMKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCAqIGxvY2tlcih2 b2lkICogYXJnKQogCiAgIF9mdGltZSgmY3VyclN5c1RpbWUpOwogCi0gIGFi c3RpbWUudHZfc2VjID0gY3VyclN5c1RpbWUudGltZTsKKyAgYWJzdGltZS50 dl9zZWMgPSAobG9uZyljdXJyU3lzVGltZS50aW1lOwogICBhYnN0aW1lLnR2 X25zZWMgPSBOQU5PU0VDX1BFUl9NSUxMSVNFQyAqIGN1cnJTeXNUaW1lLm1p bGxpdG07CiAKICAgYWJzdGltZS50dl9zZWMgKz0gMTsKSW5kZXg6IHB0aHJl YWRzL3Rlc3RzL3J3bG9jazJfdC5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIHB0aHJlYWRzLm9yaWcvdGVzdHMvcndsb2NrMl90LmMKKysrIHB0aHJl YWRzL3Rlc3RzL3J3bG9jazJfdC5jCkBAIC01NSw3ICs1NSw3IEBAIG1haW4o KQogCiAgIF9mdGltZSgmY3VyclN5c1RpbWUpOwogCi0gIGFic3RpbWUudHZf c2VjID0gY3VyclN5c1RpbWUudGltZTsKKyAgYWJzdGltZS50dl9zZWMgPSAo bG9uZyljdXJyU3lzVGltZS50aW1lOwogICBhYnN0aW1lLnR2X25zZWMgPSBO QU5PU0VDX1BFUl9NSUxMSVNFQyAqIGN1cnJTeXNUaW1lLm1pbGxpdG07CiAK ICAgYWJzdGltZS50dl9zZWMgKz0gMTsKSW5kZXg6IHB0aHJlYWRzL3Rlc3Rz L3J3bG9jazNfdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHB0aHJl YWRzLm9yaWcvdGVzdHMvcndsb2NrM190LmMKKysrIHB0aHJlYWRzL3Rlc3Rz L3J3bG9jazNfdC5jCkBAIC02OCw3ICs2OCw3IEBAIG1haW4oKQogCiAgIF9m dGltZSgmY3VyclN5c1RpbWUpOwogCi0gIGFic3RpbWUudHZfc2VjID0gY3Vy clN5c1RpbWUudGltZTsKKyAgYWJzdGltZS50dl9zZWMgPSAobG9uZyljdXJy U3lzVGltZS50aW1lOwogICBhYnN0aW1lLnR2X25zZWMgPSBOQU5PU0VDX1BF Ul9NSUxMSVNFQyAqIGN1cnJTeXNUaW1lLm1pbGxpdG07CiAKICAgYWJzdGlt ZS50dl9zZWMgKz0gMTsKSW5kZXg6IHB0aHJlYWRzL3Rlc3RzL3J3bG9jazRf dC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHB0aHJlYWRzLm9yaWcv dGVzdHMvcndsb2NrNF90LmMKKysrIHB0aHJlYWRzL3Rlc3RzL3J3bG9jazRf dC5jCkBAIC02OCw3ICs2OCw3IEBAIG1haW4oKQogCiAgIF9mdGltZSgmY3Vy clN5c1RpbWUpOwogCi0gIGFic3RpbWUudHZfc2VjID0gY3VyclN5c1RpbWUu dGltZTsKKyAgYWJzdGltZS50dl9zZWMgPSAobG9uZyljdXJyU3lzVGltZS50 aW1lOwogICBhYnN0aW1lLnR2X25zZWMgPSBOQU5PU0VDX1BFUl9NSUxMSVNF QyAqIGN1cnJTeXNUaW1lLm1pbGxpdG07CiAKICAgYWJzdGltZS50dl9zZWMg Kz0gMTsKSW5kZXg6IHB0aHJlYWRzL3Rlc3RzL3J3bG9jazVfdC5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIHB0aHJlYWRzLm9yaWcvdGVzdHMvcnds b2NrNV90LmMKKysrIHB0aHJlYWRzL3Rlc3RzL3J3bG9jazVfdC5jCkBAIC03 MCw3ICs3MCw3IEBAIG1haW4oKQogCiAgIF9mdGltZSgmY3VyclN5c1RpbWUp OwogCi0gIGFic3RpbWUudHZfc2VjID0gY3VyclN5c1RpbWUudGltZTsKKyAg YWJzdGltZS50dl9zZWMgPSAobG9uZyljdXJyU3lzVGltZS50aW1lOwogICBh YnN0aW1lLnR2X25zZWMgPSBOQU5PU0VDX1BFUl9NSUxMSVNFQyAqIGN1cnJT eXNUaW1lLm1pbGxpdG07CiAKICAgYWJzdGltZS50dl9zZWMgKz0gMTsKSW5k ZXg6IHB0aHJlYWRzL3Rlc3RzL3J3bG9jazYuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBwdGhyZWFkcy5vcmlnL3Rlc3RzL3J3bG9jazYuYworKysg cHRocmVhZHMvdGVzdHMvcndsb2NrNi5jCkBAIC03Nyw5ICs3Nyw5IEBAIG1h aW4oKQogICBwdGhyZWFkX3Qgd3J0MTsKICAgcHRocmVhZF90IHdydDI7CiAg IHB0aHJlYWRfdCByZHQ7Ci0gIGludCB3cjFSZXN1bHQgPSAwOwotICBpbnQg d3IyUmVzdWx0ID0gMDsKLSAgaW50IHJkUmVzdWx0ID0gMDsKKyAgRFdPUkRf UFRSIHdyMVJlc3VsdCA9IDA7CisgIERXT1JEX1BUUiB3cjJSZXN1bHQgPSAw OworICBEV09SRF9QVFIgcmRSZXN1bHQgPSAwOwogCiAgIGJhbmtBY2NvdW50 ID0gMDsKIApJbmRleDogcHRocmVhZHMvdGVzdHMvcndsb2NrNl90LmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gcHRocmVhZHMub3JpZy90ZXN0cy9y d2xvY2s2X3QuYworKysgcHRocmVhZHMvdGVzdHMvcndsb2NrNl90LmMKQEAg LTU1LDcgKzU1LDcgQEAgdm9pZCAqIHdyZnVuYyh2b2lkICogYXJnKQogICBi YW5rQWNjb3VudCArPSAxMDsKICAgYXNzZXJ0KHB0aHJlYWRfcndsb2NrX3Vu bG9jaygmcndsb2NrMSkgPT0gMCk7CiAKLSAgcmV0dXJuICgodm9pZCAqKSBi YW5rQWNjb3VudCk7CisgIHJldHVybiAoKHZvaWQgKikgKHNpemVfdCkgYmFu a0FjY291bnQpOwogfQogCiB2b2lkICogcmRmdW5jKHZvaWQgKiBhcmcpCkBA IC02NywxNyArNjcsMTcgQEAgdm9pZCAqIHJkZnVuYyh2b2lkICogYXJnKQog CiAgIF9mdGltZSgmY3VyclN5c1RpbWUpOwogCi0gIGFic3RpbWUudHZfc2Vj ID0gY3VyclN5c1RpbWUudGltZTsKKyAgYWJzdGltZS50dl9zZWMgPSAobG9u ZyljdXJyU3lzVGltZS50aW1lOwogICBhYnN0aW1lLnR2X25zZWMgPSBOQU5P U0VDX1BFUl9NSUxMSVNFQyAqIGN1cnJTeXNUaW1lLm1pbGxpdG07CiAKIAot ICBpZiAoKGludCkgYXJnID09IDEpCisgIGlmICgoaW50KSAoKHNpemVfdCkg YXJnKSA9PSAxKQogICAgIHsKICAgICAgIGFic3RpbWUudHZfc2VjICs9IDE7 CiAgICAgICBhc3NlcnQocHRocmVhZF9yd2xvY2tfdGltZWRyZGxvY2soJnJ3 bG9jazEsICZhYnN0aW1lKSA9PSBFVElNRURPVVQpOwogICAgICAgYmEgPSAw OwogICAgIH0KLSAgZWxzZSBpZiAoKGludCkgYXJnID09IDIpCisgIGVsc2Ug aWYgKChpbnQpICgoc2l6ZV90KSBhcmcpID09IDIpCiAgICAgewogICAgICAg YWJzdGltZS50dl9zZWMgKz0gMzsKICAgICAgIGFzc2VydChwdGhyZWFkX3J3 bG9ja190aW1lZHJkbG9jaygmcndsb2NrMSwgJmFic3RpbWUpID09IDApOwpA QCAtODUsNyArODUsNyBAQCB2b2lkICogcmRmdW5jKHZvaWQgKiBhcmcpCiAg ICAgICBhc3NlcnQocHRocmVhZF9yd2xvY2tfdW5sb2NrKCZyd2xvY2sxKSA9 PSAwKTsKICAgICB9CiAKLSAgcmV0dXJuICgodm9pZCAqKSBiYSk7CisgIHJl dHVybiAoKHZvaWQgKikgKHNpemVfdCkgYmEpOwogfQogCiBpbnQKQEAgLTk1 LDEwICs5NSwxMCBAQCBtYWluKCkKICAgcHRocmVhZF90IHdydDI7CiAgIHB0 aHJlYWRfdCByZHQxOwogICBwdGhyZWFkX3QgcmR0MjsKLSAgaW50IHdyMVJl c3VsdCA9IDA7Ci0gIGludCB3cjJSZXN1bHQgPSAwOwotICBpbnQgcmQxUmVz dWx0ID0gMDsKLSAgaW50IHJkMlJlc3VsdCA9IDA7CisgIERXT1JEX1BUUiB3 cjFSZXN1bHQgPSAwOworICBEV09SRF9QVFIgd3IyUmVzdWx0ID0gMDsKKyAg RFdPUkRfUFRSIHJkMVJlc3VsdCA9IDA7CisgIERXT1JEX1BUUiByZDJSZXN1 bHQgPSAwOwogCiAgIGJhbmtBY2NvdW50ID0gMDsKIApJbmRleDogcHRocmVh ZHMvdGVzdHMvcndsb2NrNl90Mi5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIHB0aHJlYWRzLm9yaWcvdGVzdHMvcndsb2NrNl90Mi5jCisrKyBwdGhy ZWFkcy90ZXN0cy9yd2xvY2s2X3QyLmMKQEAgLTU0LDIxICs1NCwyMSBAQCB2 b2lkICogd3JmdW5jKHZvaWQgKiBhcmcpCiAgIGludCByZXN1bHQ7CiAKICAg cmVzdWx0ID0gcHRocmVhZF9yd2xvY2tfdGltZWR3cmxvY2soJnJ3bG9jazEs ICZhYnN0aW1lKTsKLSAgaWYgKChpbnQpIGFyZyA9PSAxKQorICBpZiAoKGlu dCkgKChzaXplX3QpYXJnKSA9PSAxKQogICAgIHsKICAgICAgIGFzc2VydChy ZXN1bHQgPT0gMCk7CiAgICAgICBTbGVlcCgyMDAwKTsKICAgICAgIGJhbmtB Y2NvdW50ICs9IDEwOwogICAgICAgYXNzZXJ0KHB0aHJlYWRfcndsb2NrX3Vu bG9jaygmcndsb2NrMSkgPT0gMCk7Ci0gICAgICByZXR1cm4gKCh2b2lkICop IGJhbmtBY2NvdW50KTsKKyAgICAgIHJldHVybiAoKHZvaWQgKikgKHNpemVf dCkgYmFua0FjY291bnQpOwogICAgIH0KLSAgZWxzZSBpZiAoKGludCkgYXJn ID09IDIpCisgIGVsc2UgaWYgKChpbnQpICgoc2l6ZV90KWFyZykgPT0gMikK ICAgICB7CiAgICAgICBhc3NlcnQocmVzdWx0ID09IEVUSU1FRE9VVCk7Ci0g ICAgICByZXR1cm4gKCh2b2lkICopIDEwMCk7CisgICAgICByZXR1cm4gKCh2 b2lkICopIChzaXplX3QpIDEwMCk7CiAgICAgfQogCi0gIHJldHVybiAoKHZv aWQgKikgLTEpOworICByZXR1cm4gKCh2b2lkICopIChzaXplX3QpIC0xKTsK IH0KIAogdm9pZCAqIHJkZnVuYyh2b2lkICogYXJnKQpAQCAtNzcsNyArNzcs NyBAQCB2b2lkICogcmRmdW5jKHZvaWQgKiBhcmcpCiAKICAgYXNzZXJ0KHB0 aHJlYWRfcndsb2NrX3RpbWVkcmRsb2NrKCZyd2xvY2sxLCAmYWJzdGltZSkg PT0gRVRJTUVET1VUKTsKIAotICByZXR1cm4gKCh2b2lkICopIGJhKTsKKyAg cmV0dXJuICgodm9pZCAqKSAoc2l6ZV90KSBiYSk7CiB9CiAKIGludApAQCAt ODYsMTUgKzg2LDE1IEBAIG1haW4oKQogICBwdGhyZWFkX3Qgd3J0MTsKICAg cHRocmVhZF90IHdydDI7CiAgIHB0aHJlYWRfdCByZHQ7Ci0gIGludCB3cjFS ZXN1bHQgPSAwOwotICBpbnQgd3IyUmVzdWx0ID0gMDsKLSAgaW50IHJkUmVz dWx0ID0gMDsKKyAgRFdPUkRfUFRSIHdyMVJlc3VsdCA9IDA7CisgIERXT1JE X1BUUiB3cjJSZXN1bHQgPSAwOworICBEV09SRF9QVFIgcmRSZXN1bHQgPSAw OwogICBzdHJ1Y3QgX3RpbWViIGN1cnJTeXNUaW1lOwogICBjb25zdCBEV09S RCBOQU5PU0VDX1BFUl9NSUxMSVNFQyA9IDEwMDAwMDA7CiAKICAgX2Z0aW1l KCZjdXJyU3lzVGltZSk7CiAKLSAgYWJzdGltZS50dl9zZWMgPSBjdXJyU3lz VGltZS50aW1lOworICBhYnN0aW1lLnR2X3NlYyA9IChsb25nKWN1cnJTeXNU aW1lLnRpbWU7CiAgIGFic3RpbWUudHZfbnNlYyA9IE5BTk9TRUNfUEVSX01J TExJU0VDICogY3VyclN5c1RpbWUubWlsbGl0bTsKIAogICBhYnN0aW1lLnR2 X3NlYyArPSAxOwpJbmRleDogcHRocmVhZHMvdGVzdHMvc2VtYXBob3JlMS5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHB0aHJlYWRzLm9yaWcvdGVz dHMvc2VtYXBob3JlMS5jCisrKyBwdGhyZWFkcy90ZXN0cy9zZW1hcGhvcmUx LmMKQEAgLTExOSw3ICsxMTksNyBAQCBtYWluKCkKIHsKICAgcHRocmVhZF90 IHQ7CiAgIHNlbV90IHM7Ci0gIGludCByZXN1bHQ7CisgIERXT1JEX1BUUiBy ZXN1bHQ7CiAKICAgYXNzZXJ0KHB0aHJlYWRfY3JlYXRlKCZ0LCBOVUxMLCB0 aHIsIE5VTEwpID09IDApOwogICBhc3NlcnQocHRocmVhZF9qb2luKHQsICh2 b2lkICoqKSZyZXN1bHQpID09IDApOwpJbmRleDogcHRocmVhZHMvdGVzdHMv c2VtYXBob3JlNC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHB0aHJl YWRzLm9yaWcvdGVzdHMvc2VtYXBob3JlNC5jCisrKyBwdGhyZWFkcy90ZXN0 cy9zZW1hcGhvcmU0LmMKQEAgLTExMyw3ICsxMTMsNyBAQCBtYWluKCkKIC8v cHJpbnRmKCJ2YWx1ZSA9ICVkXG4iLCAtdmFsdWUpOyBmZmx1c2goc3Rkb3V0 KTsKIAlhc3NlcnQocHRocmVhZF9jYW5jZWwodFs1MF0pID09IDApOwogCSAg ewotCSAgICBpbnQgcmVzdWx0OworCSAgICBEV09SRF9QVFIgcmVzdWx0Owog CSAgICBhc3NlcnQocHRocmVhZF9qb2luKHRbNTBdLCAodm9pZCAqKikgJnJl c3VsdCkgPT0gMCk7CiAvLwkgICAgcHJpbnRmKCJyZXN1bHQgPSAlZFxuIiwg cmVzdWx0KTsgZmZsdXNoKHN0ZG91dCk7CiAJICB9CkluZGV4OiBwdGhyZWFk cy90ZXN0cy9zcGluNC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHB0 aHJlYWRzLm9yaWcvdGVzdHMvc3BpbjQuYworKysgcHRocmVhZHMvdGVzdHMv c3BpbjQuYwpAQCAtNjMsNyArNjMsNyBAQCB2b2lkICogZnVuYyh2b2lkICog YXJnKQogaW50CiBtYWluKCkKIHsKLSAgbG9uZyByZXN1bHQgPSAwOworICBE V09SRF9QVFIgcmVzdWx0ID0gMDsKICAgcHRocmVhZF90IHQ7CiAgIGludCBD UFVzOwogICBzdHJ1Y3QgX3RpbWViIHN5c1RpbWU7CkluZGV4OiBwdGhyZWFk cy90ZXN0cy90c2QxLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcHRo cmVhZHMub3JpZy90ZXN0cy90c2QxLmMKKysrIHB0aHJlYWRzL3Rlc3RzL3Rz ZDEuYwpAQCAtMTc5LDcgKzE3OSw3IEBAIG1haW4oKQogICAgKi8KICAgZm9y IChpID0gMTsgaSA8IE5VTV9USFJFQURTOyBpKyspCiAgICAgewotCWludCBy ZXN1bHQgPSAwOworCURXT1JEX1BUUiByZXN1bHQgPSAwOwogCiAJYXNzZXJ0 KHB0aHJlYWRfam9pbih0aHJlYWRbaV0sICh2b2lkICoqKSAmcmVzdWx0KSA9 PSAwKTsKICAgICB9CkluZGV4OiBwdGhyZWFkcy90ZXN0cy90c2QyLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gcHRocmVhZHMub3JpZy90ZXN0cy90 c2QyLmMKKysrIHB0aHJlYWRzL3Rlc3RzL3RzZDIuYwpAQCAtMTgzLDcgKzE4 Myw3IEBAIG1haW4oKQogICAgKi8KICAgZm9yIChpID0gMTsgaSA8IE5VTV9U SFJFQURTOyBpKyspCiAgICAgewotCWludCByZXN1bHQgPSAwOworCURXT1JE X1BUUiByZXN1bHQgPSAwOwogCiAJYXNzZXJ0KHB0aHJlYWRfam9pbih0aHJl YWRbaV0sICh2b2lkICoqKSAmcmVzdWx0KSA9PSAwKTsKICAgICB9CkluZGV4 OiBwdGhyZWFkcy92ZXJzaW9uLnJjCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIHB0aHJlYWRzLm9yaWcvdmVyc2lvbi5yYworKysgcHRocmVhZHMvdmVy c2lvbi5yYwpAQCAtNTgsMTAgKzU4LDEwIEBACiAjZWxpZiBkZWZpbmVkKF9f R05VQ19fKQogIyAgaWYgZGVmaW5lZChfX0NMRUFOVVBfQykKICMgICAgZGVm aW5lIFBUVzMyX1ZFUlNJT05JTkZPX05BTUUgInB0aHJlYWRHQ1wwIgotIyAg ICBkZWZpbmUgUFRXMzJfVkVSU0lPTklORk9fQ09NTUVOVCAiR05VIEMgYnVp bGQgLS0gbG9uZ2ptcCB0aHJlYWQgZXhpdGluZ1wwIgorIyAgICBkZWZpbmUg UFRXMzJfVkVSU0lPTklORk9fQ09NTUVOVCAiR05VIEMgYnVpbGQgYml0IC0t IGxvbmdqbXAgdGhyZWFkIGV4aXRpbmdcMCIKICMgIGVsaWYgZGVmaW5lZChf X0NMRUFOVVBfQ1hYKQogIyAgICBkZWZpbmUgUFRXMzJfVkVSU0lPTklORk9f TkFNRSAicHRocmVhZEdDRVwwIgotIyAgICBkZWZpbmUgUFRXMzJfVkVSU0lP TklORk9fQ09NTUVOVCAiR05VIEMrKyBidWlsZCAtLSBDKysgZXhjZXB0aW9u IHRocmVhZCBleGl0aW5nXDAiCisjICAgIGRlZmluZSBQVFczMl9WRVJTSU9O SU5GT19DT01NRU5UICJHTlUgQysrIGJ1aWxkIGJpdCAtLSBDKysgZXhjZXB0 aW9uIHRocmVhZCBleGl0aW5nXDAiCiAjICBlbHNlCiAjICAgIGVycm9yIFJl c291cmNlIGNvbXBpbGVyIGRvZXNuJ3Qga25vdyB3aGljaCBjbGVhbnVwIHN0 eWxlIHlvdSdyZSB1c2luZyAtIHNlZSB2ZXJzaW9uLnJjCiAjICBlbmRpZgpA QCAtMTAyLDcgKzEwMiw3IEBAIEJFR0lOCiAgICAgQkVHSU4KICAgICAgICAg QkxPQ0sgIjA0MDkwNGIwIgogICAgICAgICBCRUdJTgotICAgICAgICAgICAg VkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJQT1NJWCBUaHJlYWRzIGZvciBX aW5kb3dzMzIgTGlicmFyeVwwIgorICAgICAgICAgICAgVkFMVUUgIkZpbGVE ZXNjcmlwdGlvbiIsICJQT1NJWCBUaHJlYWRzIGZvciBXaW5kb3dzIExpYnJh cnlcMCIKICAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsIFBU VzMyX1ZFUlNJT05fU1RSSU5HCiAgICAgICAgICAgICBWQUxVRSAiRmlsZVZl cnNpb24iLCBQVFczMl9WRVJTSU9OX1NUUklORwogICAgICAgICAgICAgVkFM VUUgIkludGVybmFsTmFtZSIsIFBUVzMyX1ZFUlNJT05JTkZPX05BTUUKSW5k ZXg6IHB0aHJlYWRzL3B0aHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBwdGhyZWFkcy5vcmlnL3B0aHJlYWQuaAorKysgcHRocmVhZHMvcHRo cmVhZC5oCkBAIC0zMDQsMTAgKzMwNCwxMyBAQCBlbnVtIHsKIAogI2lmbmRl ZiBIQVZFX1NUUlVDVF9USU1FU1BFQwogI2RlZmluZSBIQVZFX1NUUlVDVF9U SU1FU1BFQyAxCisjaWZuZGVmIF9USU1FU1BFQ19ERUZJTkVECisjZGVmaW5l IF9USU1FU1BFQ19ERUZJTkVECiBzdHJ1Y3QgdGltZXNwZWMgewogICAgICAg ICB0aW1lX3QgdHZfc2VjOwogICAgICAgICBsb25nIHR2X25zZWM7CiB9Owor I2VuZGlmCiAjZW5kaWYgLyogSEFWRV9TVFJVQ1RfVElNRVNQRUMgKi8KIAog I2lmbmRlZiBTSUdfQkxPQ0sKSW5kZXg6IHB0aHJlYWRzL3B0aHJlYWRfY2Fu Y2VsLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcHRocmVhZHMub3Jp Zy9wdGhyZWFkX2NhbmNlbC5jCisrKyBwdGhyZWFkcy9wdGhyZWFkX2NhbmNl bC5jCkBAIC0xNjUsNyArMTY1LDcgQEAgcHRocmVhZF9jYW5jZWwgKHB0aHJl YWRfdCB0aHJlYWQpCiAJICAgICAgICogdGhpcyB3aWxsIHJlc3VsdCBpbiBh IGNhbGwgdG8gcHR3MzJfUmVnaXN0ZXJDYW5jZWxhdGlvbiBhbmQgb25seQog CSAgICAgICAqIHRoZSB0aHJlYWRIIGFyZyB3aWxsIGJlIHVzZWQuCiAJICAg ICAgICovCi0JICAgICAgcHR3MzJfcmVnaXN0ZXJfY2FuY2VsYXRpb24gKHB0 dzMyX2NhbmNlbF9jYWxsYmFjaywgdGhyZWFkSCwgMCk7CisJICAgICAgcHR3 MzJfcmVnaXN0ZXJfY2FuY2VsYXRpb24gKChQQVBDRlVOQylwdHczMl9jYW5j ZWxfY2FsbGJhY2ssIHRocmVhZEgsIDApOwogCSAgICAgICh2b2lkKSBwdGhy ZWFkX211dGV4X3VubG9jayAoJnRwLT5jYW5jZWxMb2NrKTsKIAkgICAgICBS ZXN1bWVUaHJlYWQgKHRocmVhZEgpOwogCSAgICB9CkluZGV4OiBwdGhyZWFk cy9wdGhyZWFkX2V4aXQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBw dGhyZWFkcy5vcmlnL3B0aHJlYWRfZXhpdC5jCisrKyBwdGhyZWFkcy9wdGhy ZWFkX2V4aXQuYwpAQCAtODksNyArODksNyBAQCBwdGhyZWFkX2V4aXQgKHZv aWQgKnZhbHVlX3B0cikKICAgICAgICAqLwogCiAjaWYgISBkZWZpbmVkIChf X01JTkdXMzJfXykgfHwgZGVmaW5lZCAoX19NU1ZDUlRfXykgIHx8IGRlZmlu ZWQgKF9fRE1DX18pCi0gICAgICBfZW5kdGhyZWFkZXggKCh1bnNpZ25lZCkg dmFsdWVfcHRyKTsKKyAgICAgIF9lbmR0aHJlYWRleCAoKHVuc2lnbmVkKSAo c2l6ZV90KSB2YWx1ZV9wdHIpOwogI2Vsc2UKICAgICAgIF9lbmR0aHJlYWQg KCk7CiAjZW5kaWYKSW5kZXg6IHB0aHJlYWRzL3B0aHJlYWRfc3Bpbl9kZXN0 cm95LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcHRocmVhZHMub3Jp Zy9wdGhyZWFkX3NwaW5fZGVzdHJveS5jCisrKyBwdGhyZWFkcy9wdGhyZWFk X3NwaW5fZGVzdHJveS5jCkBAIC01OSw5ICs1OSw5IEBAIHB0aHJlYWRfc3Bp bl9kZXN0cm95IChwdGhyZWFkX3NwaW5sb2NrX3QKIAkgICAgICAgUFRXMzJf SU5URVJMT0NLRURfQ09NUEFSRV9FWENIQU5HRSAoKFBUVzMyX0lOVEVSTE9D S0VEX0xQTE9ORykKIAkJCQkJCSAgICYgKHMtPmludGVybG9jayksCiAJCQkJ CQkgICAoUFRXMzJfSU5URVJMT0NLRURfTE9ORykKLQkJCQkJCSAgIFBUVzMy X09CSkVDVF9JTlZBTElELAorCQkJCQkJICAgKHNpemVfdClQVFczMl9PQkpF Q1RfSU5WQUxJRCwKIAkJCQkJCSAgIChQVFczMl9JTlRFUkxPQ0tFRF9MT05H KQotCQkJCQkJICAgUFRXMzJfU1BJTl9VTkxPQ0tFRCkpCisJCQkJCQkgICAo c2l6ZV90KVBUVzMyX1NQSU5fVU5MT0NLRUQpKQogCXsKIAkgIHJlc3VsdCA9 IEVJTlZBTDsKIAl9CkluZGV4OiBwdGhyZWFkcy9wdGhyZWFkX3RpbWVjaGFu Z2VfaGFuZGxlcl9ucC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHB0 aHJlYWRzLm9yaWcvcHRocmVhZF90aW1lY2hhbmdlX2hhbmRsZXJfbnAuYwor KysgcHRocmVhZHMvcHRocmVhZF90aW1lY2hhbmdlX2hhbmRsZXJfbnAuYwpA QCAtMTAzLDUgKzEwMyw1IEBAIHB0aHJlYWRfdGltZWNoYW5nZV9oYW5kbGVy X25wICh2b2lkICphcmcKIAogICBMZWF2ZUNyaXRpY2FsU2VjdGlvbiAoJnB0 dzMyX2NvbmRfbGlzdF9sb2NrKTsKIAotICByZXR1cm4gKHZvaWQgKikgKHJl c3VsdCAhPSAwID8gRUFHQUlOIDogMCk7CisgIHJldHVybiAodm9pZCAqKSAo c2l6ZV90KSAocmVzdWx0ICE9IDAgPyBFQUdBSU4gOiAwKTsKIH0KSW5kZXg6 IHB0aHJlYWRzL3B0dzMyX01DU19sb2NrLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gcHRocmVhZHMub3JpZy9wdHczMl9NQ1NfbG9jay5jCisrKyBw dGhyZWFkcy9wdHczMl9NQ1NfbG9jay5jCkBAIC0xMDEsMTAgKzEwMSwxMCBA QAogSU5MSU5FIHZvaWQgCiBwdHczMl9tY3NfZmxhZ19zZXQgKExPTkcgKiBm bGFnKQogewotICBIQU5ETEUgZSA9IChIQU5ETEUpUFRXMzJfSU5URVJMT0NL RURfQ09NUEFSRV9FWENIQU5HRSgKKyAgSEFORExFIGUgPSAoSEFORExFKShz aXplX3QpIFBUVzMyX0lOVEVSTE9DS0VEX0NPTVBBUkVfRVhDSEFOR0UoCiAJ CQkJCQkoUFRXMzJfSU5URVJMT0NLRURfTFBMT05HKWZsYWcsCi0JCQkJCQko UFRXMzJfSU5URVJMT0NLRURfTE9ORyktMSwKLQkJCQkJCShQVFczMl9JTlRF UkxPQ0tFRF9MT05HKTApOworCQkJCQkJKFBUVzMyX0lOVEVSTE9DS0VEX0xP TkcpKHNpemVfdCktMSwKKwkJCQkJCShQVFczMl9JTlRFUkxPQ0tFRF9MT05H KShzaXplX3QpMCk7CiAgIGlmICgoSEFORExFKTAgIT0gZSkKICAgICB7CiAg ICAgICAvKiBhbm90aGVyIHRocmVhZCBoYXMgYWxyZWFkeSBzdG9yZWQgYW4g ZXZlbnQgaGFuZGxlIGluIHRoZSBmbGFnICovCkBAIC0xMjksOCArMTI5LDgg QEAgcHR3MzJfbWNzX2ZsYWdfd2FpdCAoTE9ORyAqIGZsYWcpCiAKICAgICAg IGlmICgwID09IFBUVzMyX0lOVEVSTE9DS0VEX0NPTVBBUkVfRVhDSEFOR0Uo CiAJCQkgICAgICAgICAgICAgICAgICAoUFRXMzJfSU5URVJMT0NLRURfTFBM T05HKWZsYWcsCi0JCQkgICAgICAgICAgICAgICAgICAoUFRXMzJfSU5URVJM T0NLRURfTE9ORyllLAotCQkJICAgICAgICAgICAgICAgICAgKFBUVzMyX0lO VEVSTE9DS0VEX0xPTkcpMCkpCisJCQkgICAgICAgICAgICAgICAgICAoUFRX MzJfSU5URVJMT0NLRURfTE9ORykoc2l6ZV90KWUsCisJCQkgICAgICAgICAg ICAgICAgICAoUFRXMzJfSU5URVJMT0NLRURfTE9ORykoc2l6ZV90KTApKQog CXsKIAkgIC8qIHN0b3JlZCBoYW5kbGUgaW4gdGhlIGZsYWcuIHdhaXQgb24g aXQgbm93LiAqLwogCSAgV2FpdEZvclNpbmdsZU9iamVjdChlLCBJTkZJTklU RSk7CkBAIC0xNTksOCArMTU5LDggQEAgcHR3MzJfbWNzX2xvY2tfYWNxdWly ZSAocHR3MzJfbWNzX2xvY2tfdAogICBub2RlLT5uZXh0ID0gMDsgLyogaW5p dGlhbGx5LCBubyBzdWNjZXNzb3IgKi8KICAgCiAgIC8qIHF1ZXVlIGZvciB0 aGUgbG9jayAqLwotICBwcmVkID0gKHB0dzMyX21jc19sb2NhbF9ub2RlX3Qg KilQVFczMl9JTlRFUkxPQ0tFRF9FWENIQU5HRSgoTFBMT05HKWxvY2ssCi0J CQkJCQkgICAgICAgICAgICAgIChMT05HKW5vZGUpOworICBwcmVkID0gKHB0 dzMyX21jc19sb2NhbF9ub2RlX3QgKilJbnRlcmxvY2tlZEV4Y2hhbmdlUG9p bnRlcigoUFZPSUQgdm9sYXRpbGUgKilsb2NrLAorCQkJCQkJICAgICAgICAg ICAgICAodm9pZCopbm9kZSk7CiAKICAgaWYgKDAgIT0gcHJlZCkKICAgICB7 CkBAIC0xODQsMTYgKzE4NCwxOSBAQCBwdHczMl9tY3NfbG9ja19yZWxlYXNl IChwdHczMl9tY3NfbG9jYWxfCiB7CiAgIHB0dzMyX21jc19sb2NrX3QgKmxv Y2sgPSBub2RlLT5sb2NrOwogICBwdHczMl9tY3NfbG9jYWxfbm9kZV90ICpu ZXh0ID0gKHB0dzMyX21jc19sb2NhbF9ub2RlX3QgKikKKyNpZm5kZWYgX1dJ TjY0CiAgICAgSW50ZXJsb2NrZWRFeGNoYW5nZUFkZCgoTFBMT05HKSZub2Rl LT5uZXh0LCAwKTsgLyogTUJSIGZlbmNlICovCi0KKyNlbHNlCisgICAgSW50 ZXJsb2NrZWRFeGNoYW5nZUFkZDY0KChMT05HNjQgKikmbm9kZS0+bmV4dCwg MCk7IC8qIE1CUiBmZW5jZSAqLworI2VuZGlmCiAgIGlmICgwID09IG5leHQp CiAgICAgewogICAgICAgLyogbm8ga25vd24gc3VjY2Vzc29yICovCiAKICAg ICAgIGlmIChub2RlID09IChwdHczMl9tY3NfbG9jYWxfbm9kZV90ICopCi0J ICBQVFczMl9JTlRFUkxPQ0tFRF9DT01QQVJFX0VYQ0hBTkdFKChQVFczMl9J TlRFUkxPQ0tFRF9MUExPTkcpbG9jaywKLQkJCQkJICAgICAoUFRXMzJfSU5U RVJMT0NLRURfTE9ORykwLAotCQkJCQkgICAgIChQVFczMl9JTlRFUkxPQ0tF RF9MT05HKW5vZGUpKQorCSAgSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VQ b2ludGVyKChMUFZPSUQgdm9sYXRpbGUgKilsb2NrLAorCQkJCQkgICAgIChQ Vk9JRCkwLAorCQkJCQkgICAgIChQVk9JRClub2RlKSkKIAl7CiAJICAvKiBu byBzdWNjZXNzb3IsIGxvY2sgaXMgZnJlZSBub3cgKi8KIAkgIHJldHVybjsK QEAgLTIwMiw3ICsyMDUsMTEgQEAgcHR3MzJfbWNzX2xvY2tfcmVsZWFzZSAo cHR3MzJfbWNzX2xvY2FsXwogICAgICAgLyogd2FpdCBmb3Igc3VjY2Vzc29y ICovCiAgICAgICBwdHczMl9tY3NfZmxhZ193YWl0KCZub2RlLT5uZXh0Rmxh Zyk7CiAgICAgICBuZXh0ID0gKHB0dzMyX21jc19sb2NhbF9ub2RlX3QgKikK KyNpZm5kZWYgX1dJTjY0CiAJSW50ZXJsb2NrZWRFeGNoYW5nZUFkZCgoTFBM T05HKSZub2RlLT5uZXh0LCAwKTsgLyogTUJSIGZlbmNlICovCisjZWxzZQor CUludGVybG9ja2VkRXhjaGFuZ2VBZGQ2NCgoTE9ORzY0ICopJm5vZGUtPm5l eHQsIDApOyAvKiBNQlIgZmVuY2UgKi8KKyNlbmRpZgogICAgIH0KIAogICAv KiBwYXNzIHRoZSBsb2NrICovCkluZGV4OiBwdGhyZWFkcy9wdHczMl90aHJl YWRTdGFydC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHB0aHJlYWRz Lm9yaWcvcHR3MzJfdGhyZWFkU3RhcnQuYworKysgcHRocmVhZHMvcHR3MzJf dGhyZWFkU3RhcnQuYwpAQCAtMzQ0LDcgKzM0NCw3IEBAIHB0dzMyX3RocmVh ZFN0YXJ0ICh2b2lkICp2dGhyZWFkUGFybXMpCiAjZW5kaWYKIAogI2lmICEg ZGVmaW5lZCAoX19NSU5HVzMyX18pIHx8IGRlZmluZWQgKF9fTVNWQ1JUX18p IHx8IGRlZmluZWQgKF9fRE1DX18pCi0gIF9lbmR0aHJlYWRleCAoKHVuc2ln bmVkKSBzdGF0dXMpOworICBfZW5kdGhyZWFkZXggKCh1bnNpZ25lZCkgKHNp emVfdCkgc3RhdHVzKTsKICNlbHNlCiAgIF9lbmR0aHJlYWQgKCk7CiAjZW5k aWYKQEAgLTM1NCw3ICszNTQsNyBAQCBwdHczMl90aHJlYWRTdGFydCAodm9p ZCAqdnRocmVhZFBhcm1zKQogICAgKi8KIAogI2lmICEgZGVmaW5lZCAoX19N SU5HVzMyX18pIHx8IGRlZmluZWQgKF9fTVNWQ1JUX18pIHx8IGRlZmluZWQg KF9fRE1DX18pCi0gIHJldHVybiAodW5zaWduZWQpIHN0YXR1czsKKyAgcmV0 dXJuICh1bnNpZ25lZCkgKHNpemVfdCkgc3RhdHVzOwogI2VuZGlmCiAKIH0J CQkJLyogcHR3MzJfdGhyZWFkU3RhcnQgKi8KSW5kZXg6IHB0aHJlYWRzL3B0 dzMyX3Rocm93LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcHRocmVh ZHMub3JpZy9wdHczMl90aHJvdy5jCisrKyBwdGhyZWFkcy9wdHczMl90aHJv dy5jCkBAIC03OSwxMiArNzksMTIgQEAgcHR3MzJfdGhyb3cgKERXT1JEIGV4 Y2VwdGlvbikKICAgICAgIHN3aXRjaCAoZXhjZXB0aW9uKQogCXsKIAljYXNl IFBUVzMyX0VQU19DQU5DRUw6Ci0JICBleGl0Q29kZSA9ICh1bnNpZ25lZCkg UFRIUkVBRF9DQU5DRUxFRDsKKwkgIGV4aXRDb2RlID0gKHVuc2lnbmVkKSAo c2l6ZV90KSBQVEhSRUFEX0NBTkNFTEVEOwogCSAgYnJlYWs7CiAJY2FzZSBQ VFczMl9FUFNfRVhJVDoKIAkgIGlmIChOVUxMICE9IHNwKQogCSAgICB7Ci0J ICAgICAgZXhpdENvZGUgPSAodW5zaWduZWQpIHNwLT5leGl0U3RhdHVzOwor CSAgICAgIGV4aXRDb2RlID0gKHVuc2lnbmVkKSAoc2l6ZV90KSBzcC0+ZXhp dFN0YXR1czsKIAkgICAgfQogCSAgYnJlYWs7CiAJfQpAQCAtMTY2LDcgKzE2 Niw3IEBAIHB0dzMyX2dldF9leGNlcHRpb25fc2VydmljZXNfY29kZSAodm9p ZCkKIAogI2Vsc2UKIAotICByZXR1cm4gKERXT1JEKSBOVUxMOworICByZXR1 cm4gKERXT1JEKSAoc2l6ZV90KSBOVUxMOwogCiAjZW5kaWYKIH0KSW5kZXg6 IHB0aHJlYWRzL2NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBwdGhyZWFkcy5vcmlnL2NvbnRleHQuaAorKysgcHRocmVhZHMvY29udGV4 dC5oCkBAIC0zOSw3ICszOSw3IEBACiAKICN1bmRlZiBQVFczMl9QUk9HQ1RS CiAKLSNpZiBkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX1g4Nl8pCisj aWYgZGVmaW5lZChfTV9JWDg2KSB8fCAoZGVmaW5lZChfWDg2XykgJiYgIWRl ZmluZWQoX19hbWQ2NF9fKSkKICNkZWZpbmUgUFRXMzJfUFJPR0NUUihDb250 ZXh0KSAgKChDb250ZXh0KS5FaXApCiAjZW5kaWYKIApJbmRleDogcHRocmVh ZHMvdGVzdHMvYmFycmllcjUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBwdGhyZWFkcy5vcmlnL3Rlc3RzL2JhcnJpZXI1LmMKKysrIHB0aHJlYWRz L3Rlc3RzL2JhcnJpZXI1LmMKQEAgLTkwLDcgKzkwLDcgQEAgaW50CiBtYWlu KCkKIHsKICAgaW50IGksIGo7Ci0gIGludCByZXN1bHQ7CisgIERXT1JEX1BU UiByZXN1bHQ7CiAgIGludCBzZXJpYWxUaHJlYWRzVG90YWw7CiAgIHB0aHJl YWRfdCB0W05VTVRIUkVBRFMgKyAxXTsKIApAQCAtMTEyLDcgKzExMiw3IEBA IG1haW4oKQogICAgICAgZm9yIChpID0gMTsgaSA8PSBqOyBpKyspCiAgICAg ICAgIHsKICAgICAgICAgICBhc3NlcnQocHRocmVhZF9qb2luKHRbaV0sICh2 b2lkICoqKSAmcmVzdWx0KSA9PSAwKTsKLSAgICAgICAgICBzZXJpYWxUaHJl YWRzVG90YWwgKz0gcmVzdWx0OworICAgICAgICAgICBzZXJpYWxUaHJlYWRz VG90YWwgKz0gKGludClyZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAgYXNz ZXJ0KHNlcmlhbFRocmVhZHNUb3RhbCA9PSBCQVJSSUVSUyAtIDEpOwpJbmRl eDogcHRocmVhZHMvdGVzdHMvY2FuY2VsOC5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIHB0aHJlYWRzLm9yaWcvdGVzdHMvY2FuY2VsOC5jCisrKyBw dGhyZWFkcy90ZXN0cy9jYW5jZWw4LmMKQEAgLTE5NSw3ICsxOTUsNyBAQCBt YWluKCkKICAgICAgIGFzc2VydCh0aHJlYWRiYWdbaV0uc2VsZi5wICE9IE5V TEwpOwogICAgICAgYXNzZXJ0KHB0aHJlYWRfa2lsbCh0aHJlYWRiYWdbaV0u c2VsZiwgMCkgPT0gRVNSQ0gpOwogCi0gICAgICBmYWlsID0gKHJlc3VsdCAh PSAoaW50KSBQVEhSRUFEX0NBTkNFTEVEKTsKKyAgICAgIGZhaWwgPSAocmVz dWx0ICE9IChpbnQpIChzaXplX3QpIFBUSFJFQURfQ0FOQ0VMRUQpOwogCiAg ICAgICBpZiAoZmFpbCkKIAl7CkluZGV4OiBwdGhyZWFkcy90ZXN0cy9pbmhl cml0MS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHB0aHJlYWRzLm9y aWcvdGVzdHMvaW5oZXJpdDEuYworKysgcHRocmVhZHMvdGVzdHMvaW5oZXJp dDEuYwpAQCAtODksNyArODksNyBAQCB2b2lkICogZnVuYyh2b2lkICogYXJn KQogICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07CiAKICAgYXNzZXJ0KHB0 aHJlYWRfZ2V0c2NoZWRwYXJhbShwdGhyZWFkX3NlbGYoKSwgJnBvbGljeSwg JnBhcmFtKSA9PSAwKTsKLSAgcmV0dXJuICh2b2lkICopIHBhcmFtLnNjaGVk X3ByaW9yaXR5OworICByZXR1cm4gKHZvaWQgKikgKHNpemVfdCkgcGFyYW0u c2NoZWRfcHJpb3JpdHk7CiB9CiAKIApAQCAtMTY5LDcgKzE2OSw3IEBAIG1h aW4oKQogICAgICAgICAgIGFzc2VydChwdGhyZWFkX2F0dHJfc2V0c2NoZWRw YXJhbSgmYXR0ciwgJnBhcmFtKSA9PSAwKTsKICAgICAgICAgICBhc3NlcnQo cHRocmVhZF9jcmVhdGUoJnQsICZhdHRyLCBmdW5jLCBOVUxMKSA9PSAwKTsK ICAgICAgICAgICBwdGhyZWFkX2pvaW4odCwgJnJlc3VsdCk7Ci0gICAgICAg ICAgYXNzZXJ0KChpbnQpIHJlc3VsdCA9PSBtYWluUGFyYW0uc2NoZWRfcHJp b3JpdHkpOworICAgICAgICAgIGFzc2VydCgoaW50KSAoc2l6ZV90KXJlc3Vs dCA9PSBtYWluUGFyYW0uc2NoZWRfcHJpb3JpdHkpOwogICAgICAgICB9CiAg ICAgfQogCkluZGV4OiBwdGhyZWFkcy90ZXN0cy9wcmlvcml0eTEuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBwdGhyZWFkcy5vcmlnL3Rlc3RzL3By aW9yaXR5MS5jCisrKyBwdGhyZWFkcy90ZXN0cy9wcmlvcml0eTEuYwpAQCAt OTEsNyArOTEsNyBAQCBmdW5jKHZvaWQgKiBhcmcpCiAKICAgYXNzZXJ0KHB0 aHJlYWRfZ2V0c2NoZWRwYXJhbSh0aHJlYWRJRCwgJnBvbGljeSwgJnBhcmFt KSA9PSAwKTsKICAgYXNzZXJ0KHBvbGljeSA9PSBTQ0hFRF9PVEhFUik7Ci0g IHJldHVybiAodm9pZCAqKSAocGFyYW0uc2NoZWRfcHJpb3JpdHkpOworICBy ZXR1cm4gKHZvaWQgKikgKHNpemVfdCkgKHBhcmFtLnNjaGVkX3ByaW9yaXR5 KTsKIH0KIAogdm9pZCAqCkBAIC0xNjQsOCArMTY0LDggQEAgbWFpbigpCiAK ICAgICAgIGFzc2VydChwdGhyZWFkX2pvaW4odCwgJnJlc3VsdCkgPT0gMCk7 CiAKLSAgICAgIGFzc2VydChwYXJhbS5zY2hlZF9wcmlvcml0eSA9PSAoaW50 KSByZXN1bHQpOwotICAgICAgcHJpbnRmKCIlMTBkICUxMGQgJTEwZFxuIiwg cGFyYW0uc2NoZWRfcHJpb3JpdHksIChpbnQpIHJlc3VsdCwgcHJpbyk7Cisg ICAgICBhc3NlcnQocGFyYW0uc2NoZWRfcHJpb3JpdHkgPT0gKGludCkgKHNp emVfdCkgcmVzdWx0KTsKKyAgICAgIHByaW50ZigiJTEwZCAlMTBkICUxMGRc biIsIHBhcmFtLnNjaGVkX3ByaW9yaXR5LCAoaW50KSAoc2l6ZV90KSByZXN1 bHQsIHByaW8pOwogICAgIH0KIAogICByZXR1cm4gMDsKSW5kZXg6IHB0aHJl YWRzL3Rlc3RzL3ByaW9yaXR5Mi5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIHB0aHJlYWRzLm9yaWcvdGVzdHMvcHJpb3JpdHkyLmMKKysrIHB0aHJl YWRzL3Rlc3RzL3ByaW9yaXR5Mi5jCkBAIC05NSw3ICs5NSw3IEBAIHZvaWQg KiBmdW5jKHZvaWQgKiBhcmcpCiAgIGFzc2VydChwb2xpY3kgPT0gU0NIRURf T1RIRVIpOwogICByZXN1bHQgPSBwdGhyZWFkX2JhcnJpZXJfd2FpdCgmZW5k QmFycmllcik7CiAgIGFzc2VydChyZXN1bHQgPT0gMCB8fCByZXN1bHQgPT0g UFRIUkVBRF9CQVJSSUVSX1NFUklBTF9USFJFQUQpOwotICByZXR1cm4gKHZv aWQgKikgcGFyYW0uc2NoZWRfcHJpb3JpdHk7CisgIHJldHVybiAodm9pZCAq KSAoc2l6ZV90KSBwYXJhbS5zY2hlZF9wcmlvcml0eTsKIH0KIAogCkBAIC0x NjIsNyArMTYyLDcgQEAgbWFpbigpCiAgICAgICBhc3NlcnQoR2V0VGhyZWFk UHJpb3JpdHkocHRocmVhZF9nZXR3MzJ0aHJlYWRoYW5kbGVfbnAodCkpID09 CiAJICB2YWxpZFByaW9yaXRpZXNbcGFyYW0uc2NoZWRfcHJpb3JpdHkrKFBU VzMyVEVTVF9NQVhQUklPUklUSUVTLzIpXSk7CiAgICAgICBwdGhyZWFkX2pv aW4odCwgJnJlc3VsdCk7Ci0gICAgICBhc3NlcnQocGFyYW0uc2NoZWRfcHJp b3JpdHkgPT0gKGludClyZXN1bHQpOworICAgICAgYXNzZXJ0KHBhcmFtLnNj aGVkX3ByaW9yaXR5ID09IChpbnQpKHNpemVfdClyZXN1bHQpOwogICAgIH0K IAogICByZXR1cm4gMDsKSW5kZXg6IHB0aHJlYWRzL3Rlc3RzL3NwaW4zLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gcHRocmVhZHMub3JpZy90ZXN0 cy9zcGluMy5jCisrKyBwdGhyZWFkcy90ZXN0cy9zcGluMy5jCkBAIC00Niw3 ICs0Niw3IEBAIHN0YXRpYyBwdGhyZWFkX3NwaW5sb2NrX3Qgc3BpbjsKICAK IHZvaWQgKiB1bmxvY2tlcih2b2lkICogYXJnKQogewotICBpbnQgZXhwZWN0 ZWRSZXN1bHQgPSAoaW50KSBhcmc7CisgIGludCBleHBlY3RlZFJlc3VsdCA9 IChpbnQpIChzaXplX3QpIGFyZzsKIAogICB3YXNIZXJlKys7CiAgIGFzc2Vy dChwdGhyZWFkX3NwaW5fdW5sb2NrKCZzcGluKSA9PSBleHBlY3RlZFJlc3Vs dCk7CkluZGV4OiBwdGhyZWFkcy90ZXN0cy9zdHJlc3MxLmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gcHRocmVhZHMub3JpZy90ZXN0cy9zdHJlc3Mx LmMKKysrIHB0aHJlYWRzL3Rlc3RzL3N0cmVzczEuYwpAQCAtMSwyNzggKzEs Mjc5IEBACi0vKgotICogc3RyZXNzMS5jCi0gKgotICoKLSAqIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogICAgICBQdGhyZWFkcy13 aW4zMiAtIFBPU0lYIFRocmVhZHMgTGlicmFyeSBmb3IgV2luMzIKLSAqICAg ICAgQ29weXJpZ2h0KEMpIDE5OTggSm9obiBFLiBCb3Nzb20KLSAqICAgICAg Q29weXJpZ2h0KEMpIDE5OTksMjAwNSBQdGhyZWFkcy13aW4zMiBjb250cmli dXRvcnMKLSAqIAotICogICAgICBDb250YWN0IEVtYWlsOiBycGpAY2FsbGlz dG8uY2FuYmVycmEuZWR1LmF1Ci0gKiAKLSAqICAgICAgVGhlIGN1cnJlbnQg bGlzdCBvZiBjb250cmlidXRvcnMgaXMgY29udGFpbmVkCi0gKiAgICAgIGlu IHRoZSBmaWxlIENPTlRSSUJVVE9SUyBpbmNsdWRlZCB3aXRoIHRoZSBzb3Vy Y2UKLSAqICAgICAgY29kZSBkaXN0cmlidXRpb24uIFRoZSBsaXN0IGNhbiBh bHNvIGJlIHNlZW4gYXQgdGhlCi0gKiAgICAgIGZvbGxvd2luZyBXb3JsZCBX aWRlIFdlYiBsb2NhdGlvbjoKLSAqICAgICAgaHR0cDovL3NvdXJjZXMucmVk aGF0LmNvbS9wdGhyZWFkcy13aW4zMi9jb250cmlidXRvcnMuaHRtbAotICog Ci0gKiAgICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICAgICAgbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYwotICogICAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICAgICAgdmVyc2lv biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgotICogCi0gKiAgICAgIFRoaXMgbGlicmFyeSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICAgICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIEdOVQotICogICAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogCi0gKiAgICAgIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMKLSAqICAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRo aXMgbGlicmFyeSBpbiB0aGUgZmlsZSBDT1BZSU5HLkxJQjsKLSAqICAgICAg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuLAotICogICAgICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCi0gKgotICogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBUZXN0IFN5bm9wc2lzOgot ICogLSBTdHJlc3MgdGVzdCBjb25kaXRpb24gdmFyaWFibGVzLCBtdXRleGVz LCBzZW1hcGhvcmVzLgotICoKLSAqIFRlc3QgTWV0aG9kIChWYWxpZGF0aW9u IG9yIEZhbHNpZmljYXRpb24pOgotICogLSBWYWxpZGF0aW9uCi0gKgotICog UmVxdWlyZW1lbnRzIFRlc3RlZDoKLSAqIC0gQ29ycmVjdCBhY2NvdW50aW5n IG9mIHNlbWFwaG9yZSBhbmQgY29uZGl0aW9uIHZhcmlhYmxlIHdhaXRlcnMu Ci0gKgotICogRmVhdHVyZXMgVGVzdGVkOgotICogLSAKLSAqCi0gKiBDYXNl cyBUZXN0ZWQ6Ci0gKiAtIAotICoKLSAqIERlc2NyaXB0aW9uOgotICogQXR0 ZW1wdGluZyB0byBleHBvc2UgcmFjZSBjb25kaXRpb25zIGluIGNvbmQgdmFy cywgc2VtYXBob3JlcyBldGMuCi0gKiAtIE1hc3RlciBhdHRlbXB0cyB0byBz aWduYWwgc2xhdmUgY2xvc2UgdG8gd2hlbiB0aW1lb3V0IGlzIGR1ZS4KLSAq IC0gTWFzdGVyIGFuZCBzbGF2ZSBkbyBiYXR0bGUgY29udGludW91c2x5IHVu dGlsIG1haW4gdGVsbHMgdGhlbSB0byBzdG9wLgotICogLSBBZnRlcndhcmRz LCB0aGUgQ1YgbXVzdCBiZSBzdWNjZXNzZnVsbHkgZGVzdHJveWVkICh3aWxs IHJldHVybiBhbgotICogZXJyb3IgaWYgdGhlcmUgYXJlIHdhaXRlcnMgKGlu Y2x1ZGluZyBhbnkgaW50ZXJuYWwgc2VtYXBob3JlIHdhaXRlcnMsCi0gKiB3 aGljaCwgaWYgdGhlcmUgYXJlLCBjYW5ub3Qgbm90IGJlIHJlYWwgd2FpdGVy cykuCi0gKgotICogRW52aXJvbm1lbnQ6Ci0gKiAtIAotICoKLSAqIElucHV0 OgotICogLSBOb25lLgotICoKLSAqIE91dHB1dDoKLSAqIC0gRmlsZSBuYW1l LCBMaW5lIG51bWJlciwgYW5kIGZhaWxlZCBleHByZXNzaW9uIG9uIGZhaWx1 cmUuCi0gKiAtIE5vIG91dHB1dCBvbiBzdWNjZXNzLgotICoKLSAqIEFzc3Vt cHRpb25zOgotICogLSAKLSAqCi0gKiBQYXNzIENyaXRlcmlhOgotICogLSBD ViBpcyBzdWNjZXNzZnVsbHkgZGVzdHJveWVkLgotICoKLSAqIEZhaWwgQ3Jp dGVyaWE6Ci0gKiAtIENWIGRlc3Ryb3kgZmFpbHMuCi0gKi8KLQotI2luY2x1 ZGUgInRlc3QuaCIKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxz eXMvdGltZWIuaD4KLQotCi1jb25zdCB1bnNpZ25lZCBpbnQgSVRFUkFUSU9O UyA9IDEwMDA7Ci0KLXN0YXRpYyBwdGhyZWFkX3QgbWFzdGVyLCBzbGF2ZTsK LXR5cGVkZWYgc3RydWN0IHsKLSAgaW50IHZhbHVlOwotICBwdGhyZWFkX2Nv bmRfdCBjdjsKLSAgcHRocmVhZF9tdXRleF90IG14OwotfSBteXNpZ190Owot Ci1zdGF0aWMgaW50IGFsbEV4aXQ7Ci1zdGF0aWMgbXlzaWdfdCBjb250cm9s ID0gezAsIFBUSFJFQURfQ09ORF9JTklUSUFMSVpFUiwgUFRIUkVBRF9NVVRF WF9JTklUSUFMSVpFUn07Ci1zdGF0aWMgcHRocmVhZF9iYXJyaWVyX3Qgc3Rh cnRCYXJyaWVyLCByZWFkeUJhcnJpZXIsIGhvbGRCYXJyaWVyOwotc3RhdGlj IGludCB0aW1lb3V0Q291bnQgPSAwOwotc3RhdGljIGludCBzaWduYWxzVGFr ZW5Db3VudCA9IDA7Ci1zdGF0aWMgaW50IHNpZ25hbHNTZW50ID0gMDsKLXN0 YXRpYyBpbnQgYmlhcyA9IDA7Ci1zdGF0aWMgaW50IHRpbWVvdXQgPSAxMDsN IC8vIE11c3QgYmUgPiAwCi0KLWVudW0gewotICBDVExfU1RPUCAgICAgPSAt MQotfTsKLQotLyoKLSAqIFJldHVybnMgYWJzdGltZSAnbWlsbGlzZWNvbmRz JyBmcm9tICdub3cnLgotICoKLSAqIFdvcmtzIGZvcjogLUlOVF9NQVggPD0g bWlsbGlzZWNzIDw9IElOVF9NQVgKLSAqLwotc3RydWN0IHRpbWVzcGVjICoK LW1pbGxpc2Vjb25kc0Zyb21Ob3cgKHN0cnVjdCB0aW1lc3BlYyAqIHRpbWUs IGludCBtaWxsaXNlY3MpCi17Ci0gIHN0cnVjdCBfdGltZWIgY3VyclN5c1Rp bWU7Ci0gIGludDY0X3QgbmFub3NlY3MsIHNlY3M7Ci0gIGNvbnN0IGludDY0 X3QgTkFOT1NFQ19QRVJfTUlMTElTRUMgPSAxMDAwMDAwOwotICBjb25zdCBp bnQ2NF90IE5BTk9TRUNfUEVSX1NFQyA9IDEwMDAwMDAwMDA7Ci0KLSAgLyog Z2V0IGN1cnJlbnQgc3lzdGVtIHRpbWUgYW5kIGFkZCBtaWxsaXNlY3MgKi8K LSAgX2Z0aW1lKCZjdXJyU3lzVGltZSk7Ci0KLSAgc2VjcyA9IChpbnQ2NF90 KShjdXJyU3lzVGltZS50aW1lKSArIChtaWxsaXNlY3MgLyAxMDAwKTsKLSAg bmFub3NlY3MgPSAoKGludDY0X3QpIChtaWxsaXNlY3MlMTAwMCArIGN1cnJT eXNUaW1lLm1pbGxpdG0pKSAqIE5BTk9TRUNfUEVSX01JTExJU0VDOwotICBp ZiAobmFub3NlY3MgPj0gTkFOT1NFQ19QRVJfU0VDKQotICAgIHsKLSAgICAg IHNlY3MrKzsKLSAgICAgIG5hbm9zZWNzIC09IE5BTk9TRUNfUEVSX1NFQzsK LSAgICB9Ci0gIGVsc2UgaWYgKG5hbm9zZWNzIDwgMCkKLSAgICB7Ci0gICAg ICBzZWNzLS07Ci0gICAgICBuYW5vc2VjcyArPSBOQU5PU0VDX1BFUl9TRUM7 Ci0gICAgfQotCi0gIHRpbWUtPnR2X25zZWMgPSAobG9uZyluYW5vc2VjczsK LSAgdGltZS0+dHZfc2VjID0gKGxvbmcpc2VjczsKLQotICByZXR1cm4gdGlt ZTsKLX0KLQotdm9pZCAqCi1tYXN0ZXJUaHJlYWQgKHZvaWQgKiBhcmcpCi17 Ci0gIGludCBkaXRoZXIgPSAoaW50KSBhcmc7Ci0KLSAgdGltZW91dCA9IChp bnQpIGFyZzsKLQotICBwdGhyZWFkX2JhcnJpZXJfd2FpdCgmc3RhcnRCYXJy aWVyKTsKLQotICBkbwotICAgIHsKLSAgICAgIGludCBzbGVlcFRpbWU7Ci0K LSAgICAgIGFzc2VydChwdGhyZWFkX211dGV4X2xvY2soJmNvbnRyb2wubXgp ID09IDApOwotICAgICAgY29udHJvbC52YWx1ZSA9IHRpbWVvdXQ7Ci0gICAg ICBhc3NlcnQocHRocmVhZF9tdXRleF91bmxvY2soJmNvbnRyb2wubXgpID09 IDApOwotCi0gICAgICAvKgotICAgICAgICogV2UgYXJlIGF0dGVtcHRpbmcg dG8gc2VuZCB0aGUgc2lnbmFsIGNsb3NlIHRvIHdoZW4gdGhlIHNsYXZlCi0g ICAgICAgKiBpcyBkdWUgdG8gdGltZW91dC4gV2UgZmVlbCBhcm91bmQgYnkg YWRkaW5nIHNvbWUgW25vbi1yYW5kb21dIGRpdGhlci4KLSAgICAgICAqCi0g ICAgICAgKiBkaXRoZXIgaXMgaW4gdGhlIHJhbmdlIDIqdGltZW91dCBwZWFr LXRvLXBlYWsKLSAgICAgICAqIHNsZWVwIHRpbWUgaXMgdGhlIGF2ZXJhZ2Ug b2YgdGltZW91dCBwbHVzIGRpdGhlci4KLSAgICAgICAqIGUuZy4KLSAgICAg ICAqIGlmIHRpbWVvdXQgPSAxMCB0aGVuIGRpdGhlciA9IDIwIGFuZAotICAg ICAgICogc2xlZXAgbWlsbGlzZWNzIGlzOiA1IDw9IG1zIDw9IDE1Ci0gICAg ICAgKgotICAgICAgICogVGhlIGJpYXMgdmFsdWUgYXR0ZW1wdHMgdG8gYXBw bHkgc29tZSBuZWdhdGl2ZSBmZWVkYmFjayB0byBrZWVwCi0gICAgICAgKiB0 aGUgcmF0aW8gb2YgdGltZW91dHMgdG8gc2lnbmFscyB0YWtlbiBjbG9zZSB0 byAxOjEuCi0gICAgICAgKiBiaWFzIGNoYW5nZXMgbW9yZSBzbG93bHkgdGhh biBkaXRoZXIgc28gYXMgdG8gYXZlcmFnZSBtb3JlLgotICAgICAgICoKLSAg ICAgICAqIEZpbmFsbHksIGlmIGFicyhiaWFzKSBleGNlZWRzIHRpbWVvdXQg dGhlbiB0aW1lb3V0IGlzIGluY3JlbWVudGVkLgotICAgICAgICovCi0gICAg ICBpZiAoc2lnbmFsc1NlbnQgJSB0aW1lb3V0ID09IDApCi0JewotICAgICAg ICAgIGlmICh0aW1lb3V0Q291bnQgPiBzaWduYWxzVGFrZW5Db3VudCkKLQkg ICAgewotCSAgICAgIGJpYXMrKzsKLQkgICAgfQotICAgICAgICAgIGVsc2Ug aWYgKHRpbWVvdXRDb3VudCA8IHNpZ25hbHNUYWtlbkNvdW50KQotCSAgICB7 Ci0JICAgICAgYmlhcy0tOwotCSAgICB9Ci0JICBpZiAoYmlhcyA8IC10aW1l b3V0IHx8IGJpYXMgPiB0aW1lb3V0KQotCSAgICB7Ci0JICAgICAgdGltZW91 dCsrOwotCSAgICB9Ci0JfQotICAgICAgZGl0aGVyID0gKGRpdGhlciArIDEg KSAlICh0aW1lb3V0ICogMik7Ci0gICAgICBzbGVlcFRpbWUgPSAodGltZW91 dCAtIGJpYXMgKyBkaXRoZXIpIC8gMjsKLSAgICAgIFNsZWVwKHNsZWVwVGlt ZSk7Ci0gICAgICBhc3NlcnQocHRocmVhZF9jb25kX3NpZ25hbCgmY29udHJv bC5jdikgPT0gMCk7Ci0gICAgICBzaWduYWxzU2VudCsrOwotCi0gICAgICBw dGhyZWFkX2JhcnJpZXJfd2FpdCgmaG9sZEJhcnJpZXIpOwotICAgICAgcHRo cmVhZF9iYXJyaWVyX3dhaXQoJnJlYWR5QmFycmllcik7Ci0gICAgfQotICB3 aGlsZSAoIWFsbEV4aXQpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi12b2lk ICoKLXNsYXZlVGhyZWFkICh2b2lkICogYXJnKQotewotICBzdHJ1Y3QgdGlt ZXNwZWMgdGltZTsKLQotICBwdGhyZWFkX2JhcnJpZXJfd2FpdCgmc3RhcnRC YXJyaWVyKTsKLQotICBkbwotICAgIHsKLSAgICAgIGFzc2VydChwdGhyZWFk X211dGV4X2xvY2soJmNvbnRyb2wubXgpID09IDApOwotICAgICAgaWYgKHB0 aHJlYWRfY29uZF90aW1lZHdhaXQoJmNvbnRyb2wuY3YsCi0JCQkJICZjb250 cm9sLm14LAotCQkJCSBtaWxsaXNlY29uZHNGcm9tTm93KCZ0aW1lLCBjb250 cm9sLnZhbHVlKSkgPT0gRVRJTUVET1VUKQotCXsKLQkgIHRpbWVvdXRDb3Vu dCsrOwotCX0KLSAgICAgIGVsc2UKLQl7Ci0JICBzaWduYWxzVGFrZW5Db3Vu dCsrOwotCX0KLSAgICAgIGFzc2VydChwdGhyZWFkX211dGV4X3VubG9jaygm Y29udHJvbC5teCkgPT0gMCk7Ci0KLSAgICAgIHB0aHJlYWRfYmFycmllcl93 YWl0KCZob2xkQmFycmllcik7Ci0gICAgICBwdGhyZWFkX2JhcnJpZXJfd2Fp dCgmcmVhZHlCYXJyaWVyKTsKLSAgICB9Ci0gIHdoaWxlICghYWxsRXhpdCk7 Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLWludAotbWFpbiAoKQotewotICB1 bnNpZ25lZCBpbnQgaTsKLQotICBhc3NlcnQocHRocmVhZF9iYXJyaWVyX2lu aXQoJnN0YXJ0QmFycmllciwgTlVMTCwgMykgPT0gMCk7Ci0gIGFzc2VydChw dGhyZWFkX2JhcnJpZXJfaW5pdCgmcmVhZHlCYXJyaWVyLCBOVUxMLCAzKSA9 PSAwKTsKLSAgYXNzZXJ0KHB0aHJlYWRfYmFycmllcl9pbml0KCZob2xkQmFy cmllciwgTlVMTCwgMykgPT0gMCk7Ci0KLSAgYXNzZXJ0KHB0aHJlYWRfY3Jl YXRlKCZtYXN0ZXIsIE5VTEwsIG1hc3RlclRocmVhZCwgKHZvaWQgKikgdGlt ZW91dCkgPT0gMCk7Ci0gIGFzc2VydChwdGhyZWFkX2NyZWF0ZSgmc2xhdmUs IE5VTEwsIHNsYXZlVGhyZWFkLCBOVUxMKSA9PSAwKTsKLQotICBhbGxFeGl0 ID0gRkFMU0U7Ci0KLSAgcHRocmVhZF9iYXJyaWVyX3dhaXQoJnN0YXJ0QmFy cmllcik7Ci0KLSAgZm9yIChpID0gMTsgIWFsbEV4aXQ7IGkrKykKLSAgICB7 Ci0gICAgICBwdGhyZWFkX2JhcnJpZXJfd2FpdCgmaG9sZEJhcnJpZXIpOwot ICAgICAgaWYgKGkgPj0gSVRFUkFUSU9OUykKLQl7Ci0JICBhbGxFeGl0ID0g VFJVRTsKLQl9Ci0gICAgICBwdGhyZWFkX2JhcnJpZXJfd2FpdCgmcmVhZHlC YXJyaWVyKTsKLSAgICB9Ci0KLSAgYXNzZXJ0KHB0aHJlYWRfam9pbihzbGF2 ZSwgTlVMTCkgPT0gMCk7Ci0gIGFzc2VydChwdGhyZWFkX2pvaW4obWFzdGVy LCBOVUxMKSA9PSAwKTsKLQotICBwcmludGYoIlNpZ25hbHMgc2VudCA9ICVk XG5XYWl0IHRpbWVvdXRzID0gJWRcblNpZ25hbHMgdGFrZW4gPSAlZFxuQmlh cyA9ICVkXG5UaW1lb3V0ID0gJWRcbiIsCi0JIHNpZ25hbHNTZW50LAotCSB0 aW1lb3V0Q291bnQsCi0JIHNpZ25hbHNUYWtlbkNvdW50LAotCSAoaW50KSBi aWFzLAotCSB0aW1lb3V0KTsKLQotICAvKiBDbGVhbnVwICovCi0gIGFzc2Vy dChwdGhyZWFkX2JhcnJpZXJfZGVzdHJveSgmaG9sZEJhcnJpZXIpID09IDAp OwotICBhc3NlcnQocHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3koJnJlYWR5QmFy cmllcikgPT0gMCk7Ci0gIGFzc2VydChwdGhyZWFkX2JhcnJpZXJfZGVzdHJv eSgmc3RhcnRCYXJyaWVyKSA9PSAwKTsKLSAgYXNzZXJ0KHB0aHJlYWRfY29u ZF9kZXN0cm95KCZjb250cm9sLmN2KSA9PSAwKTsKLSAgYXNzZXJ0KHB0aHJl YWRfbXV0ZXhfZGVzdHJveSgmY29udHJvbC5teCkgPT0gMCk7Ci0KLSAgLyog U3VjY2Vzcy4gKi8KLSAgcmV0dXJuIDA7Ci19CisvKg0KKyAqIHN0cmVzczEu Yw0KKyAqDQorICoNCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KKyAqDQorICogICAgICBQdGhyZWFkcy13aW4zMiAtIFBPU0lYIFRocmVh ZHMgTGlicmFyeSBmb3IgV2luMzINCisgKiAgICAgIENvcHlyaWdodChDKSAx OTk4IEpvaG4gRS4gQm9zc29tDQorICogICAgICBDb3B5cmlnaHQoQykgMTk5 OSwyMDA1IFB0aHJlYWRzLXdpbjMyIGNvbnRyaWJ1dG9ycw0KKyAqIA0KKyAq ICAgICAgQ29udGFjdCBFbWFpbDogcnBqQGNhbGxpc3RvLmNhbmJlcnJhLmVk dS5hdQ0KKyAqIA0KKyAqICAgICAgVGhlIGN1cnJlbnQgbGlzdCBvZiBjb250 cmlidXRvcnMgaXMgY29udGFpbmVkDQorICogICAgICBpbiB0aGUgZmlsZSBD T05UUklCVVRPUlMgaW5jbHVkZWQgd2l0aCB0aGUgc291cmNlDQorICogICAg ICBjb2RlIGRpc3RyaWJ1dGlvbi4gVGhlIGxpc3QgY2FuIGFsc28gYmUgc2Vl biBhdCB0aGUNCisgKiAgICAgIGZvbGxvd2luZyBXb3JsZCBXaWRlIFdlYiBs b2NhdGlvbjoNCisgKiAgICAgIGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20v cHRocmVhZHMtd2luMzIvY29udHJpYnV0b3JzLmh0bWwNCisgKiANCisgKiAg ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgKiAgICAgIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMN CisgKiAgICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KKyAqICAgICAgdmVyc2lvbiAy IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLg0KKyAqIA0KKyAqICAgICAgVGhpcyBsaWJyYXJ5IGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws DQorICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAqICAgICAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUNCisgKiAgICAgIExlc3NlciBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorICogDQorICogICAgICBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljDQorICogICAgICBMaWNlbnNlIGFsb25nIHdp dGggdGhpcyBsaWJyYXJ5IGluIHRoZSBmaWxlIENPUFlJTkcuTElCOw0KKyAq ICAgICAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuLA0KKyAqICAgICAgNTkgVGVtcGxlIFBsYWNlIC0gU3Vp dGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQ0KKyAqDQorICog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKg0KKyAqIFRlc3Qg U3lub3BzaXM6DQorICogLSBTdHJlc3MgdGVzdCBjb25kaXRpb24gdmFyaWFi bGVzLCBtdXRleGVzLCBzZW1hcGhvcmVzLg0KKyAqDQorICogVGVzdCBNZXRo b2QgKFZhbGlkYXRpb24gb3IgRmFsc2lmaWNhdGlvbik6DQorICogLSBWYWxp ZGF0aW9uDQorICoNCisgKiBSZXF1aXJlbWVudHMgVGVzdGVkOg0KKyAqIC0g Q29ycmVjdCBhY2NvdW50aW5nIG9mIHNlbWFwaG9yZSBhbmQgY29uZGl0aW9u IHZhcmlhYmxlIHdhaXRlcnMuDQorICoNCisgKiBGZWF0dXJlcyBUZXN0ZWQ6 DQorICogLSANCisgKg0KKyAqIENhc2VzIFRlc3RlZDoNCisgKiAtIA0KKyAq DQorICogRGVzY3JpcHRpb246DQorICogQXR0ZW1wdGluZyB0byBleHBvc2Ug cmFjZSBjb25kaXRpb25zIGluIGNvbmQgdmFycywgc2VtYXBob3JlcyBldGMu DQorICogLSBNYXN0ZXIgYXR0ZW1wdHMgdG8gc2lnbmFsIHNsYXZlIGNsb3Nl IHRvIHdoZW4gdGltZW91dCBpcyBkdWUuDQorICogLSBNYXN0ZXIgYW5kIHNs YXZlIGRvIGJhdHRsZSBjb250aW51b3VzbHkgdW50aWwgbWFpbiB0ZWxscyB0 aGVtIHRvIHN0b3AuDQorICogLSBBZnRlcndhcmRzLCB0aGUgQ1YgbXVzdCBi ZSBzdWNjZXNzZnVsbHkgZGVzdHJveWVkICh3aWxsIHJldHVybiBhbg0KKyAq IGVycm9yIGlmIHRoZXJlIGFyZSB3YWl0ZXJzIChpbmNsdWRpbmcgYW55IGlu dGVybmFsIHNlbWFwaG9yZSB3YWl0ZXJzLA0KKyAqIHdoaWNoLCBpZiB0aGVy ZSBhcmUsIGNhbm5vdCBub3QgYmUgcmVhbCB3YWl0ZXJzKS4NCisgKg0KKyAq IEVudmlyb25tZW50Og0KKyAqIC0gDQorICoNCisgKiBJbnB1dDoNCisgKiAt IE5vbmUuDQorICoNCisgKiBPdXRwdXQ6DQorICogLSBGaWxlIG5hbWUsIExp bmUgbnVtYmVyLCBhbmQgZmFpbGVkIGV4cHJlc3Npb24gb24gZmFpbHVyZS4N CisgKiAtIE5vIG91dHB1dCBvbiBzdWNjZXNzLg0KKyAqDQorICogQXNzdW1w dGlvbnM6DQorICogLSANCisgKg0KKyAqIFBhc3MgQ3JpdGVyaWE6DQorICog LSBDViBpcyBzdWNjZXNzZnVsbHkgZGVzdHJveWVkLg0KKyAqDQorICogRmFp bCBDcml0ZXJpYToNCisgKiAtIENWIGRlc3Ryb3kgZmFpbHMuDQorICovDQor DQorI2luY2x1ZGUgInRlc3QuaCINCisjaW5jbHVkZSA8c3RyaW5nLmg+DQor I2luY2x1ZGUgPHN5cy90aW1lYi5oPg0KKw0KKw0KK2NvbnN0IHVuc2lnbmVk IGludCBJVEVSQVRJT05TID0gMTAwMDsNCisNCitzdGF0aWMgcHRocmVhZF90 IG1hc3Rlciwgc2xhdmU7DQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgaW50IHZh bHVlOw0KKyAgcHRocmVhZF9jb25kX3QgY3Y7DQorICBwdGhyZWFkX211dGV4 X3QgbXg7DQorfSBteXNpZ190Ow0KKw0KK3N0YXRpYyBpbnQgYWxsRXhpdDsN CitzdGF0aWMgbXlzaWdfdCBjb250cm9sID0gezAsIFBUSFJFQURfQ09ORF9J TklUSUFMSVpFUiwgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUn07DQorc3Rh dGljIHB0aHJlYWRfYmFycmllcl90IHN0YXJ0QmFycmllciwgcmVhZHlCYXJy aWVyLCBob2xkQmFycmllcjsNCitzdGF0aWMgaW50IHRpbWVvdXRDb3VudCA9 IDA7DQorc3RhdGljIGludCBzaWduYWxzVGFrZW5Db3VudCA9IDA7DQorc3Rh dGljIGludCBzaWduYWxzU2VudCA9IDA7DQorc3RhdGljIGludCBiaWFzID0g MDsNCitzdGF0aWMgaW50IHRpbWVvdXQgPSAxMDsNCisgLy8gTXVzdCBiZSA+ IDANCisNCitlbnVtIHsNCisgIENUTF9TVE9QICAgICA9IC0xDQorfTsNCisN CisvKg0KKyAqIFJldHVybnMgYWJzdGltZSAnbWlsbGlzZWNvbmRzJyBmcm9t ICdub3cnLg0KKyAqDQorICogV29ya3MgZm9yOiAtSU5UX01BWCA8PSBtaWxs aXNlY3MgPD0gSU5UX01BWA0KKyAqLw0KK3N0cnVjdCB0aW1lc3BlYyAqDQor bWlsbGlzZWNvbmRzRnJvbU5vdyAoc3RydWN0IHRpbWVzcGVjICogdGltZSwg aW50IG1pbGxpc2VjcykNCit7DQorICBzdHJ1Y3QgX3RpbWViIGN1cnJTeXNU aW1lOw0KKyAgaW50NjRfdCBuYW5vc2Vjcywgc2VjczsNCisgIGNvbnN0IGlu dDY0X3QgTkFOT1NFQ19QRVJfTUlMTElTRUMgPSAxMDAwMDAwOw0KKyAgY29u c3QgaW50NjRfdCBOQU5PU0VDX1BFUl9TRUMgPSAxMDAwMDAwMDAwOw0KKw0K KyAgLyogZ2V0IGN1cnJlbnQgc3lzdGVtIHRpbWUgYW5kIGFkZCBtaWxsaXNl Y3MgKi8NCisgIF9mdGltZSgmY3VyclN5c1RpbWUpOw0KKw0KKyAgc2VjcyA9 IChpbnQ2NF90KShjdXJyU3lzVGltZS50aW1lKSArIChtaWxsaXNlY3MgLyAx MDAwKTsNCisgIG5hbm9zZWNzID0gKChpbnQ2NF90KSAobWlsbGlzZWNzJTEw MDAgKyBjdXJyU3lzVGltZS5taWxsaXRtKSkgKiBOQU5PU0VDX1BFUl9NSUxM SVNFQzsNCisgIGlmIChuYW5vc2VjcyA+PSBOQU5PU0VDX1BFUl9TRUMpDQor ICAgIHsNCisgICAgICBzZWNzKys7DQorICAgICAgbmFub3NlY3MgLT0gTkFO T1NFQ19QRVJfU0VDOw0KKyAgICB9DQorICBlbHNlIGlmIChuYW5vc2VjcyA8 IDApDQorICAgIHsNCisgICAgICBzZWNzLS07DQorICAgICAgbmFub3NlY3Mg Kz0gTkFOT1NFQ19QRVJfU0VDOw0KKyAgICB9DQorDQorICB0aW1lLT50dl9u c2VjID0gKGxvbmcpbmFub3NlY3M7DQorICB0aW1lLT50dl9zZWMgPSAobG9u ZylzZWNzOw0KKw0KKyAgcmV0dXJuIHRpbWU7DQorfQ0KKw0KK3ZvaWQgKg0K K21hc3RlclRocmVhZCAodm9pZCAqIGFyZykNCit7DQorICBpbnQgZGl0aGVy ID0gKGludCkgKHNpemVfdClhcmc7DQorDQorICB0aW1lb3V0ID0gKGludCkg KHNpemVfdClhcmc7DQorDQorICBwdGhyZWFkX2JhcnJpZXJfd2FpdCgmc3Rh cnRCYXJyaWVyKTsNCisNCisgIGRvDQorICAgIHsNCisgICAgICBpbnQgc2xl ZXBUaW1lOw0KKw0KKyAgICAgIGFzc2VydChwdGhyZWFkX211dGV4X2xvY2so JmNvbnRyb2wubXgpID09IDApOw0KKyAgICAgIGNvbnRyb2wudmFsdWUgPSB0 aW1lb3V0Ow0KKyAgICAgIGFzc2VydChwdGhyZWFkX211dGV4X3VubG9jaygm Y29udHJvbC5teCkgPT0gMCk7DQorDQorICAgICAgLyoNCisgICAgICAgKiBX ZSBhcmUgYXR0ZW1wdGluZyB0byBzZW5kIHRoZSBzaWduYWwgY2xvc2UgdG8g d2hlbiB0aGUgc2xhdmUNCisgICAgICAgKiBpcyBkdWUgdG8gdGltZW91dC4g V2UgZmVlbCBhcm91bmQgYnkgYWRkaW5nIHNvbWUgW25vbi1yYW5kb21dIGRp dGhlci4NCisgICAgICAgKg0KKyAgICAgICAqIGRpdGhlciBpcyBpbiB0aGUg cmFuZ2UgMip0aW1lb3V0IHBlYWstdG8tcGVhaw0KKyAgICAgICAqIHNsZWVw IHRpbWUgaXMgdGhlIGF2ZXJhZ2Ugb2YgdGltZW91dCBwbHVzIGRpdGhlci4N CisgICAgICAgKiBlLmcuDQorICAgICAgICogaWYgdGltZW91dCA9IDEwIHRo ZW4gZGl0aGVyID0gMjAgYW5kDQorICAgICAgICogc2xlZXAgbWlsbGlzZWNz IGlzOiA1IDw9IG1zIDw9IDE1DQorICAgICAgICoNCisgICAgICAgKiBUaGUg YmlhcyB2YWx1ZSBhdHRlbXB0cyB0byBhcHBseSBzb21lIG5lZ2F0aXZlIGZl ZWRiYWNrIHRvIGtlZXANCisgICAgICAgKiB0aGUgcmF0aW8gb2YgdGltZW91 dHMgdG8gc2lnbmFscyB0YWtlbiBjbG9zZSB0byAxOjEuDQorICAgICAgICog YmlhcyBjaGFuZ2VzIG1vcmUgc2xvd2x5IHRoYW4gZGl0aGVyIHNvIGFzIHRv IGF2ZXJhZ2UgbW9yZS4NCisgICAgICAgKg0KKyAgICAgICAqIEZpbmFsbHks IGlmIGFicyhiaWFzKSBleGNlZWRzIHRpbWVvdXQgdGhlbiB0aW1lb3V0IGlz IGluY3JlbWVudGVkLg0KKyAgICAgICAqLw0KKyAgICAgIGlmIChzaWduYWxz U2VudCAlIHRpbWVvdXQgPT0gMCkNCisJew0KKyAgICAgICAgICBpZiAodGlt ZW91dENvdW50ID4gc2lnbmFsc1Rha2VuQ291bnQpDQorCSAgICB7DQorCSAg ICAgIGJpYXMrKzsNCisJICAgIH0NCisgICAgICAgICAgZWxzZSBpZiAodGlt ZW91dENvdW50IDwgc2lnbmFsc1Rha2VuQ291bnQpDQorCSAgICB7DQorCSAg ICAgIGJpYXMtLTsNCisJICAgIH0NCisJICBpZiAoYmlhcyA8IC10aW1lb3V0 IHx8IGJpYXMgPiB0aW1lb3V0KQ0KKwkgICAgew0KKwkgICAgICB0aW1lb3V0 Kys7DQorCSAgICB9DQorCX0NCisgICAgICBkaXRoZXIgPSAoZGl0aGVyICsg MSApICUgKHRpbWVvdXQgKiAyKTsNCisgICAgICBzbGVlcFRpbWUgPSAodGlt ZW91dCAtIGJpYXMgKyBkaXRoZXIpIC8gMjsNCisgICAgICBTbGVlcChzbGVl cFRpbWUpOw0KKyAgICAgIGFzc2VydChwdGhyZWFkX2NvbmRfc2lnbmFsKCZj b250cm9sLmN2KSA9PSAwKTsNCisgICAgICBzaWduYWxzU2VudCsrOw0KKw0K KyAgICAgIHB0aHJlYWRfYmFycmllcl93YWl0KCZob2xkQmFycmllcik7DQor ICAgICAgcHRocmVhZF9iYXJyaWVyX3dhaXQoJnJlYWR5QmFycmllcik7DQor ICAgIH0NCisgIHdoaWxlICghYWxsRXhpdCk7DQorDQorICByZXR1cm4gTlVM TDsNCit9DQorDQordm9pZCAqDQorc2xhdmVUaHJlYWQgKHZvaWQgKiBhcmcp DQorew0KKyAgc3RydWN0IHRpbWVzcGVjIHRpbWU7DQorDQorICBwdGhyZWFk X2JhcnJpZXJfd2FpdCgmc3RhcnRCYXJyaWVyKTsNCisNCisgIGRvDQorICAg IHsNCisgICAgICBhc3NlcnQocHRocmVhZF9tdXRleF9sb2NrKCZjb250cm9s Lm14KSA9PSAwKTsNCisgICAgICBpZiAocHRocmVhZF9jb25kX3RpbWVkd2Fp dCgmY29udHJvbC5jdiwNCisJCQkJICZjb250cm9sLm14LA0KKwkJCQkgbWls bGlzZWNvbmRzRnJvbU5vdygmdGltZSwgY29udHJvbC52YWx1ZSkpID09IEVU SU1FRE9VVCkNCisJew0KKwkgIHRpbWVvdXRDb3VudCsrOw0KKwl9DQorICAg ICAgZWxzZQ0KKwl7DQorCSAgc2lnbmFsc1Rha2VuQ291bnQrKzsNCisJfQ0K KyAgICAgIGFzc2VydChwdGhyZWFkX211dGV4X3VubG9jaygmY29udHJvbC5t eCkgPT0gMCk7DQorDQorICAgICAgcHRocmVhZF9iYXJyaWVyX3dhaXQoJmhv bGRCYXJyaWVyKTsNCisgICAgICBwdGhyZWFkX2JhcnJpZXJfd2FpdCgmcmVh ZHlCYXJyaWVyKTsNCisgICAgfQ0KKyAgd2hpbGUgKCFhbGxFeGl0KTsNCisN CisgIHJldHVybiBOVUxMOw0KK30NCisNCitpbnQNCittYWluICgpDQorew0K KyAgdW5zaWduZWQgaW50IGk7DQorDQorICBhc3NlcnQocHRocmVhZF9iYXJy aWVyX2luaXQoJnN0YXJ0QmFycmllciwgTlVMTCwgMykgPT0gMCk7DQorICBh c3NlcnQocHRocmVhZF9iYXJyaWVyX2luaXQoJnJlYWR5QmFycmllciwgTlVM TCwgMykgPT0gMCk7DQorICBhc3NlcnQocHRocmVhZF9iYXJyaWVyX2luaXQo JmhvbGRCYXJyaWVyLCBOVUxMLCAzKSA9PSAwKTsNCisNCisgIGFzc2VydChw dGhyZWFkX2NyZWF0ZSgmbWFzdGVyLCBOVUxMLCBtYXN0ZXJUaHJlYWQsICh2 b2lkICopIChzaXplX3QpdGltZW91dCkgPT0gMCk7DQorICBhc3NlcnQocHRo cmVhZF9jcmVhdGUoJnNsYXZlLCBOVUxMLCBzbGF2ZVRocmVhZCwgTlVMTCkg PT0gMCk7DQorDQorICBhbGxFeGl0ID0gRkFMU0U7DQorDQorICBwdGhyZWFk X2JhcnJpZXJfd2FpdCgmc3RhcnRCYXJyaWVyKTsNCisNCisgIGZvciAoaSA9 IDE7ICFhbGxFeGl0OyBpKyspDQorICAgIHsNCisgICAgICBwdGhyZWFkX2Jh cnJpZXJfd2FpdCgmaG9sZEJhcnJpZXIpOw0KKyAgICAgIGlmIChpID49IElU RVJBVElPTlMpDQorCXsNCisJICBhbGxFeGl0ID0gVFJVRTsNCisJfQ0KKyAg ICAgIHB0aHJlYWRfYmFycmllcl93YWl0KCZyZWFkeUJhcnJpZXIpOw0KKyAg ICB9DQorDQorICBhc3NlcnQocHRocmVhZF9qb2luKHNsYXZlLCBOVUxMKSA9 PSAwKTsNCisgIGFzc2VydChwdGhyZWFkX2pvaW4obWFzdGVyLCBOVUxMKSA9 PSAwKTsNCisNCisgIHByaW50ZigiU2lnbmFscyBzZW50ID0gJWRcbldhaXQg dGltZW91dHMgPSAlZFxuU2lnbmFscyB0YWtlbiA9ICVkXG5CaWFzID0gJWRc blRpbWVvdXQgPSAlZFxuIiwNCisJIHNpZ25hbHNTZW50LA0KKwkgdGltZW91 dENvdW50LA0KKwkgc2lnbmFsc1Rha2VuQ291bnQsDQorCSAoaW50KSBiaWFz LA0KKwkgdGltZW91dCk7DQorDQorICAvKiBDbGVhbnVwICovDQorICBhc3Nl cnQocHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3koJmhvbGRCYXJyaWVyKSA9PSAw KTsNCisgIGFzc2VydChwdGhyZWFkX2JhcnJpZXJfZGVzdHJveSgmcmVhZHlC YXJyaWVyKSA9PSAwKTsNCisgIGFzc2VydChwdGhyZWFkX2JhcnJpZXJfZGVz dHJveSgmc3RhcnRCYXJyaWVyKSA9PSAwKTsNCisgIGFzc2VydChwdGhyZWFk X2NvbmRfZGVzdHJveSgmY29udHJvbC5jdikgPT0gMCk7DQorICBhc3NlcnQo cHRocmVhZF9tdXRleF9kZXN0cm95KCZjb250cm9sLm14KSA9PSAwKTsNCisN CisgIC8qIFN1Y2Nlc3MuICovDQorICByZXR1cm4gMDsNCit9DQo= --000e0cd24744086c90046ca51faf--