Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:68727 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 41397 invoked from network); 30 Aug 2013 15:27:40 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 30 Aug 2013 15:27:40 -0000 Authentication-Results: pb1.pair.com smtp.mail=boite.pour.spam@gmail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=boite.pour.spam@gmail.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 74.125.82.54 as permitted sender) X-PHP-List-Original-Sender: boite.pour.spam@gmail.com X-Host-Fingerprint: 74.125.82.54 mail-wg0-f54.google.com Received: from [74.125.82.54] ([74.125.82.54:47505] helo=mail-wg0-f54.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 87/B1-32511-BE9B0225 for ; Fri, 30 Aug 2013 11:27:39 -0400 Received: by mail-wg0-f54.google.com with SMTP id e12so897275wgh.21 for ; Fri, 30 Aug 2013 08:27:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=gL8kbpe5l29uf8Io9XtKVUap7+Genf1iXsThkeIc1Ik=; b=zeHVOPiHbyrm5C0FjlwocKvZ85SDJ8nZ3eN72Y8OGE0gFqXsTW2Hmi1FM+n4AgN43x MTYfRxC7tGlZ8IbQV6SfJaQFejfR8eyhGV0UhibZVI/nznl6RG6Cs3tyfqJXlCt8IOG7 vz0+TzZ0lyROiXdmN9rYtpISo+4M3w35XuV1F7dnTziyaht35ruLJJA5a0ZHSWqK+4SO xcKP98pDHvRoYMaef7eDDV2KIeBq6Bz8szD23bh7U/1F1mKQN3icbr87gUfqo7Z4RfsX 5jmSJ4uJfwvt/OMBMyr2bz4Jz52o3qPbuWHCZShiR7Thl1FP1vXqUCs00qW3uIXXAgzl 161w== MIME-Version: 1.0 X-Received: by 10.180.89.147 with SMTP id bo19mr2949562wib.3.1377876456220; Fri, 30 Aug 2013 08:27:36 -0700 (PDT) Received: by 10.194.25.201 with HTTP; Fri, 30 Aug 2013 08:27:36 -0700 (PDT) In-Reply-To: <1377874355.2929.148.camel@guybrush> References: <1377874355.2929.148.camel@guybrush> Date: Fri, 30 Aug 2013 17:27:36 +0200 Message-ID: To: =?ISO-8859-1?Q?Johannes_Schl=FCter?= Cc: internals@lists.php.net Content-Type: multipart/mixed; boundary=e89a8f3bae5bb7addc04e52bdc52 Subject: Re: [PHP-DEV] [PATCH] LFS support for PHP 5.5.1 From: boite.pour.spam@gmail.com (X Ryl) --e89a8f3bae5bb7addc04e52bdc52 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On Fri, Aug 30, 2013 at 4:52 PM, Johannes Schl=FCter wrote: > > On Fri, 2013-08-30 at 16:43 +0200, X Ryl wrote: > > Hi, > > > > > > Please find attached a patch for adding large file size support to > > PHP 5.5.1. > > The patch didn't make it. Please send as text/plain (i.e. using .txt > extension) Done. > > > > It does so by, from the PHP's side, getting double instead of int for > > the file size/ offset functions, when the size is larger than 2^31. > > This has some problems - for further handling onemight need the exact > file size (i.e. content length headers, checking structures, reading > specific positions) > > > This means that files with size: > > - up to 2^32 bytes works as previously (integer returned / used) > > - up to 2^52 bytes can be handled correctly (double's mantissa is 52 > > bits, no loss in precision here) > > This might work for the initial operation, but as soon as the user does > a calculation ("give me the last ten bytes") this will cause issues. No it won't. double mantissa are integers, works like integer. So you have the complete 52 bits of precision here, not a single rounding error can occur. The exponent in that case will be 0, so "2^0 * integer_with_52_bits" is still an integer with 52 bits of precision. So the "filesize - 10" is still exact as long as the filesize is less than 2^52 (see below when it's larger) > > > - from 2^52 up to 2^64 will have their size rounded, yet, reading and > > writing will work as expected since it's done in the PHP's binary. I'll try to improve this, since it's causing misunderstanding. Typically, when you start storing a value that does not fit in 52 bits, it's shifted (understand: round to the closed multiple of two) until it fits the range. So for example, a file size that's "2^53 + 203" will be stored as 9007199254741196 instead of 9007199254741195 (the error is 1 here) Yet, the reported value will be wrong, but if you seek close to the end position and read it you'll still be able to read it completely (since the double value will be converted back to 64-bit integer in the C code). As long as you're dealing with positions/seek in a multiple of 2^52, you'll be fine. So if you need 100% correct value for such a large file, you can still do it by looping, AT WORST, 4096 times ( =3D 2^64 / 2^52) a seek with SEEK_CUR. Not a real showstopper when the current version does not even allow you to know the actual size of the file, not even speaking of reading it!) If you either have to handle such large file NOW, then chance are high you're already using a 64 bits system. This patch if for us, poor souls, struck with 32 bits system, yet wanting to report correct size for our movies in our web-based file manager, wanting to stream correctly such files and so on. > > > > > > The changes are: > > - Some size_t are changed to off_t wherever required. > > This disqualifies from 5.5 and allows use in 5.6 only. Ok Cyril --e89a8f3bae5bb7addc04e52bdc52 Content-Type: text/plain; charset=US-ASCII; name="phpLFS.patch.txt" Content-Disposition: attachment; filename="phpLFS.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hkzjgmpb0 ZGlmZiAtdXIgcGhwLTUuNS4xL2V4dC9waGFyL3BoYXJfaW50ZXJuYWwuaCBwaHAtNS41LjEubmV3 L2V4dC9waGFyL3BoYXJfaW50ZXJuYWwuaAotLS0gcGhwLTUuNS4xL2V4dC9waGFyL3BoYXJfaW50 ZXJuYWwuaAkyMDEzLTA3LTE4IDE2OjM3OjMzLjAwMDAwMDAwMCArMDIwMAorKysgcGhwLTUuNS4x Lm5ldy9leHQvcGhhci9waGFyX2ludGVybmFsLmgJMjAxMy0wOC0xNSAxMDo0MjozOS4zMzI4ODc2 MDEgKzAyMDAKQEAgLTUzNCw4ICs1MzQsMTUgQEAKIAlyZXR1cm4gRkFJTFVSRTsKIH0KICNlbHNl Ci0jIGRlZmluZSBwaGFyX3N0cmVhbV9jb3B5X3RvX3N0cmVhbShzcmMsIGRlc3QsIG1heGxlbiwg bGVuKQlfcGhwX3N0cmVhbV9jb3B5X3RvX3N0cmVhbV9leCgoc3JjKSwgKGRlc3QpLCAobWF4bGVu KSwgKGxlbikgU1RSRUFNU19DQyBUU1JNTFNfQ0MpCi0KK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHBo YXJfc3RyZWFtX2NvcHlfdG9fc3RyZWFtKHBocF9zdHJlYW0gKnNyYywgcGhwX3N0cmVhbSAqZGVz dCwgc2l6ZV90IG1heGxlbiwgc2l6ZV90ICpsZW4pCit7CisJb2ZmX3QgX21heGxlbiA9IG1heGxl biA9PSAoc2l6ZV90KVBIUF9TVFJFQU1fQ09QWV9BTEwgPyBQSFBfU1RSRUFNX0NPUFlfQUxMIDog bWF4bGVuLCBfbGVuID0gMDsKKwlzaXplX3QgcmV0ID0gcGhwX3N0cmVhbV9jb3B5X3RvX3N0cmVh bV9leChzcmMsIGRlc3QsIF9tYXhsZW4sICZfbGVuKTsKKwlpZiAocmV0ID09IFNVQ0NFU1MpIHsK KwkJaWYgKGxlbikgKmxlbiA9IChzaXplX3QpX2xlbjsKKwl9IGVsc2UgaWYgKGxlbikgKmxlbiA9 IDA7CisJcmV0dXJuIHJldDsKK30KICNlbmRpZgogCiAjaWYgUEhQX1ZFUlNJT05fSUQgPj0gNjAw MDAKZGlmZiAtdXIgcGhwLTUuNS4xL2V4dC9zdGFuZGFyZC9maWxlLmMgcGhwLTUuNS4xLm5ldy9l eHQvc3RhbmRhcmQvZmlsZS5jCi0tLSBwaHAtNS41LjEvZXh0L3N0YW5kYXJkL2ZpbGUuYwkyMDEz LTA3LTE4IDE2OjM3OjMzLjAwMDAwMDAwMCArMDIwMAorKysgcGhwLTUuNS4xLm5ldy9leHQvc3Rh bmRhcmQvZmlsZS5jCTIwMTMtMDgtMTUgMTA6NDI6MzkuNDMyODg4MTI1ICswMjAwCkBAIC01NzAs NyArNTcwLDcgQEAKIAljaGFyICpmaWxlbmFtZTsKIAlpbnQgZmlsZW5hbWVfbGVuOwogCXp2YWwg KmRhdGE7Ci0JaW50IG51bWJ5dGVzID0gMDsKKwlvZmZfdCBudW1ieXRlcyA9IDA7CiAJbG9uZyBm bGFncyA9IDA7CiAJenZhbCAqemNvbnRleHQgPSBOVUxMOwogCXBocF9zdHJlYW1fY29udGV4dCAq Y29udGV4dCA9IE5VTEw7CkBAIC02MTgsNyArNjE4LDcgQEAKIAogCXN3aXRjaCAoWl9UWVBFX1Ao ZGF0YSkpIHsKIAkJY2FzZSBJU19SRVNPVVJDRTogewotCQkJc2l6ZV90IGxlbjsKKwkJCW9mZl90 IGxlbjsKIAkJCWlmIChwaHBfc3RyZWFtX2NvcHlfdG9fc3RyZWFtX2V4KHNyY3N0cmVhbSwgc3Ry ZWFtLCBQSFBfU1RSRUFNX0NPUFlfQUxMLCAmbGVuKSAhPSBTVUNDRVNTKSB7CiAJCQkJbnVtYnl0 ZXMgPSAtMTsKIAkJCX0gZWxzZSB7CkBAIC02MzUsOSArNjM1LDkgQEAKIAogCQljYXNlIElTX1NU UklORzoKIAkJCWlmIChaX1NUUkxFTl9QKGRhdGEpKSB7Ci0JCQkJbnVtYnl0ZXMgPSBwaHBfc3Ry ZWFtX3dyaXRlKHN0cmVhbSwgWl9TVFJWQUxfUChkYXRhKSwgWl9TVFJMRU5fUChkYXRhKSk7Ci0J CQkJaWYgKG51bWJ5dGVzICE9IFpfU1RSTEVOX1AoZGF0YSkpIHsKLQkJCQkJcGhwX2Vycm9yX2Rv Y3JlZihOVUxMIFRTUk1MU19DQywgRV9XQVJOSU5HLCAiT25seSAlZCBvZiAlZCBieXRlcyB3cml0 dGVuLCBwb3NzaWJseSBvdXQgb2YgZnJlZSBkaXNrIHNwYWNlIiwgbnVtYnl0ZXMsIFpfU1RSTEVO X1AoZGF0YSkpOworCQkJCW51bWJ5dGVzID0gKG9mZl90KXBocF9zdHJlYW1fd3JpdGUoc3RyZWFt LCBaX1NUUlZBTF9QKGRhdGEpLCBaX1NUUkxFTl9QKGRhdGEpKTsKKwkJCQlpZiAobnVtYnl0ZXMg IT0gKG9mZl90KVpfU1RSTEVOX1AoZGF0YSkpIHsKKwkJCQkJcGhwX2Vycm9yX2RvY3JlZihOVUxM IFRTUk1MU19DQywgRV9XQVJOSU5HLCAiT25seSAlZCBvZiAlZCBieXRlcyB3cml0dGVuLCBwb3Nz aWJseSBvdXQgb2YgZnJlZSBkaXNrIHNwYWNlIiwgKHNpemVfdCludW1ieXRlcywgWl9TVFJMRU5f UChkYXRhKSk7CiAJCQkJCW51bWJ5dGVzID0gLTE7CiAJCQkJfQogCQkJfQpAQCAtNjU2LDEzICs2 NTYsMTMgQEAKIAkJCQkJCWNvbnZlcnRfdG9fc3RyaW5nKCp0bXApOwogCQkJCQl9CiAJCQkJCWlm IChaX1NUUkxFTl9QUCh0bXApKSB7Ci0JCQkJCQludW1ieXRlcyArPSBaX1NUUkxFTl9QUCh0bXAp OworCQkJCQkJbnVtYnl0ZXMgKz0gKG9mZl90KVpfU1RSTEVOX1BQKHRtcCk7CiAJCQkJCQlieXRl c193cml0dGVuID0gcGhwX3N0cmVhbV93cml0ZShzdHJlYW0sIFpfU1RSVkFMX1BQKHRtcCksIFpf U1RSTEVOX1BQKHRtcCkpOwogCQkJCQkJaWYgKGJ5dGVzX3dyaXR0ZW4gPCAwIHx8IGJ5dGVzX3dy aXR0ZW4gIT0gWl9TVFJMRU5fUFAodG1wKSkgewogCQkJCQkJCWlmIChieXRlc193cml0dGVuIDwg MCkgewogCQkJCQkJCQlwaHBfZXJyb3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5JTkcs ICJGYWlsZWQgdG8gd3JpdGUgJWQgYnl0ZXMgdG8gJXMiLCBaX1NUUkxFTl9QUCh0bXApLCBmaWxl bmFtZSk7CiAJCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkJcGhwX2Vycm9yX2RvY3JlZihOVUxMIFRT Uk1MU19DQywgRV9XQVJOSU5HLCAiT25seSAlZCBvZiAlZCBieXRlcyB3cml0dGVuLCBwb3NzaWJs eSBvdXQgb2YgZnJlZSBkaXNrIHNwYWNlIiwgYnl0ZXNfd3JpdHRlbiwgWl9TVFJMRU5fUFAodG1w KSk7CisJCQkJCQkJCXBocF9lcnJvcl9kb2NyZWYoTlVMTCBUU1JNTFNfQ0MsIEVfV0FSTklORywg Ik9ubHkgJWQgb2YgJWQgYnl0ZXMgd3JpdHRlbiwgcG9zc2libHkgb3V0IG9mIGZyZWUgZGlzayBz cGFjZSIsIChzaXplX3QpYnl0ZXNfd3JpdHRlbiwgWl9TVFJMRU5fUFAodG1wKSk7CiAJCQkJCQkJ fQogCQkJCQkJCW51bWJ5dGVzID0gLTE7CiAJCQkJCQkJYnJlYWs7CkBAIC02NzgsOSArNjc4LDkg QEAKIAkJCQl6dmFsIG91dDsKIAogCQkJCWlmICh6ZW5kX3N0ZF9jYXN0X29iamVjdF90b3N0cmlu ZyhkYXRhLCAmb3V0LCBJU19TVFJJTkcgVFNSTUxTX0NDKSA9PSBTVUNDRVNTKSB7Ci0JCQkJCW51 bWJ5dGVzID0gcGhwX3N0cmVhbV93cml0ZShzdHJlYW0sIFpfU1RSVkFMKG91dCksIFpfU1RSTEVO KG91dCkpOwotCQkJCQlpZiAobnVtYnl0ZXMgIT0gWl9TVFJMRU4ob3V0KSkgewotCQkJCQkJcGhw X2Vycm9yX2RvY3JlZihOVUxMIFRTUk1MU19DQywgRV9XQVJOSU5HLCAiT25seSAlZCBvZiAlZCBi eXRlcyB3cml0dGVuLCBwb3NzaWJseSBvdXQgb2YgZnJlZSBkaXNrIHNwYWNlIiwgbnVtYnl0ZXMs IFpfU1RSTEVOKG91dCkpOworCQkJCQludW1ieXRlcyA9IChvZmZfdClwaHBfc3RyZWFtX3dyaXRl KHN0cmVhbSwgWl9TVFJWQUwob3V0KSwgWl9TVFJMRU4ob3V0KSk7CisJCQkJCWlmIChudW1ieXRl cyAhPSAob2ZmX3QpWl9TVFJMRU4ob3V0KSkgeworCQkJCQkJcGhwX2Vycm9yX2RvY3JlZihOVUxM IFRTUk1MU19DQywgRV9XQVJOSU5HLCAiT25seSAlZCBvZiAlZCBieXRlcyB3cml0dGVuLCBwb3Nz aWJseSBvdXQgb2YgZnJlZSBkaXNrIHNwYWNlIiwgKHNpemVfdCludW1ieXRlcywgWl9TVFJMRU4o b3V0KSk7CiAJCQkJCQludW1ieXRlcyA9IC0xOwogCQkJCQl9CiAJCQkJCXp2YWxfZHRvcigmb3V0 KTsKQEAgLTY5Nyw3ICs2OTcsMTEgQEAKIAkJUkVUVVJOX0ZBTFNFOwogCX0KIAotCVJFVFVSTl9M T05HKG51bWJ5dGVzKTsKKyAgICAgICAgaWYgKG51bWJ5dGVzID4gTE9OR19NQVgpIHsKKwkJUkVU VVJOX0RPVUJMRSgoZG91YmxlKW51bWJ5dGVzKTsKKwl9IGVsc2UgeworCQlSRVRVUk5fTE9ORyhu dW1ieXRlcyk7CisJfQogfQogLyogfX19ICovCiAKQEAgLTEyNDUsNyArMTI0OSw3IEBACiBQSFBB UEkgUEhQX0ZVTkNUSU9OKGZ0ZWxsKQogewogCXp2YWwgKmFyZzE7Ci0JbG9uZyByZXQ7CisJb2Zm X3QgcmV0OwogCXBocF9zdHJlYW0gKnN0cmVhbTsKIAogCWlmICh6ZW5kX3BhcnNlX3BhcmFtZXRl cnMoWkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywgInIiLCAmYXJnMSkgPT0gRkFJTFVSRSkgewpA QCAtMTI1OCw3ICsxMjYyLDExIEBACiAJaWYgKHJldCA9PSAtMSkJewogCQlSRVRVUk5fRkFMU0U7 CiAJfQotCVJFVFVSTl9MT05HKHJldCk7CisgICAgICAgIGlmIChyZXQgPiBMT05HX01BWCkgewor CQlSRVRVUk5fRE9VQkxFKChkb3VibGUpcmV0KTsKKwl9IGVsc2UgeworCQlSRVRVUk5fTE9ORyhy ZXQpOworCX0KIH0KIC8qIH19fSAqLwogCkBAIC0xMzUxLDcgKzEzNTksNyBAQAogewogCWNoYXIg KmZpbGVuYW1lOwogCWludCBmaWxlbmFtZV9sZW47Ci0JaW50IHNpemUgPSAwOworCW9mZl90IHNp emUgPSAwOwogCXplbmRfYm9vbCB1c2VfaW5jbHVkZV9wYXRoID0gMDsKIAl6dmFsICp6Y29udGV4 dCA9IE5VTEw7CiAJcGhwX3N0cmVhbSAqc3RyZWFtOwpAQCAtMTM2Nyw3ICsxMzc1LDExIEBACiAJ aWYgKHN0cmVhbSkgewogCQlzaXplID0gcGhwX3N0cmVhbV9wYXNzdGhydShzdHJlYW0pOwogCQlw aHBfc3RyZWFtX2Nsb3NlKHN0cmVhbSk7Ci0JCVJFVFVSTl9MT05HKHNpemUpOworCQlpZiAoc2l6 ZSA+IExPTkdfTUFYKSB7CisJCQlSRVRVUk5fRE9VQkxFKChkb3VibGUpc2l6ZSk7CisJCX0gZWxz ZSB7CisJCQlSRVRVUk5fTE9ORyhzaXplKTsKKwkJfQogCX0KIAogCVJFVFVSTl9GQUxTRTsKQEAg LTE0MDYsNyArMTQxOCw3IEBACiBQSFBBUEkgUEhQX0ZVTkNUSU9OKGZwYXNzdGhydSkKIHsKIAl6 dmFsICphcmcxOwotCWludCBzaXplOworCW9mZl90IHNpemU7CiAJcGhwX3N0cmVhbSAqc3RyZWFt OwogCiAJaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVycyhaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0ND LCAiciIsICZhcmcxKSA9PSBGQUlMVVJFKSB7CkBAIC0xNDE2LDcgKzE0MjgsMTEgQEAKIAlQSFBf U1RSRUFNX1RPX1pWQUwoc3RyZWFtLCAmYXJnMSk7CiAKIAlzaXplID0gcGhwX3N0cmVhbV9wYXNz dGhydShzdHJlYW0pOwotCVJFVFVSTl9MT05HKHNpemUpOworCWlmIChzaXplID4gTE9OR19NQVgp IHsKKwkJUkVUVVJOX0RPVUJMRSgoZG91YmxlKXNpemUpOworCX0gZWxzZSB7CisJCVJFVFVSTl9M T05HKHNpemUpOworCX0KIH0KIC8qIH19fSAqLwogCkBAIC0xNTQ4LDcgKzE1NjQsMTEgQEAKICNl bHNlCiAJTUFLRV9MT05HX1pWQUxfSU5DUkVGKHN0YXRfcmRldiwgLTEpOwogI2VuZGlmCi0JTUFL RV9MT05HX1pWQUxfSU5DUkVGKHN0YXRfc2l6ZSwgc3RhdF9zc2Iuc2Iuc3Rfc2l6ZSk7CisgICAg ICAgIGlmIChzdGF0X3NzYi5zYi5zdF9zaXplID4gTE9OR19NQVgpIHsKKwkJTUFLRV9ET1VCTEVf WlZBTF9JTkNSRUYoc3RhdF9zaXplLCAoZG91YmxlKXN0YXRfc3NiLnNiLnN0X3NpemUpOworICAg ICAgICB9IGVsc2UgeworCQlNQUtFX0xPTkdfWlZBTF9JTkNSRUYoc3RhdF9zaXplLCAobG9uZylz dGF0X3NzYi5zYi5zdF9zaXplKTsKKyAgICAgICAgfQogCU1BS0VfTE9OR19aVkFMX0lOQ1JFRihz dGF0X2F0aW1lLCBzdGF0X3NzYi5zYi5zdF9hdGltZSk7CiAJTUFLRV9MT05HX1pWQUxfSU5DUkVG KHN0YXRfbXRpbWUsIHN0YXRfc3NiLnNiLnN0X210aW1lKTsKIAlNQUtFX0xPTkdfWlZBTF9JTkNS RUYoc3RhdF9jdGltZSwgc3RhdF9zc2Iuc2Iuc3RfY3RpbWUpOwpkaWZmIC11ciBwaHAtNS41LjEv ZXh0L3N0YW5kYXJkL2ZpbGVzdGF0LmMgcGhwLTUuNS4xLm5ldy9leHQvc3RhbmRhcmQvZmlsZXN0 YXQuYwotLS0gcGhwLTUuNS4xL2V4dC9zdGFuZGFyZC9maWxlc3RhdC5jCTIwMTMtMDctMTggMTY6 Mzc6MzMuMDAwMDAwMDAwICswMjAwCisrKyBwaHAtNS41LjEubmV3L2V4dC9zdGFuZGFyZC9maWxl c3RhdC5jCTIwMTMtMDgtMTUgMTA6NDI6MzkuNDQyODg4MDYwICswMjAwCkBAIC05NjYsNyArOTY2 LDExIEBACiAJY2FzZSBGU19JTk9ERToKIAkJUkVUVVJOX0xPTkcoKGxvbmcpc3NiLnNiLnN0X2lu byk7CiAJY2FzZSBGU19TSVpFOgotCQlSRVRVUk5fTE9ORygobG9uZylzc2Iuc2Iuc3Rfc2l6ZSk7 CisJCWlmIChzc2Iuc2Iuc3Rfc2l6ZSA+IExPTkdfTUFYKSB7CisJCQlSRVRVUk5fRE9VQkxFKChk b3VibGUpc3NiLnNiLnN0X3NpemUpOworCQl9IGVsc2UgeworCQkJUkVUVVJOX0xPTkcoKGxvbmcp c3NiLnNiLnN0X3NpemUpOworCQl9CiAJY2FzZSBGU19PV05FUjoKIAkJUkVUVVJOX0xPTkcoKGxv bmcpc3NiLnNiLnN0X3VpZCk7CiAJY2FzZSBGU19HUk9VUDoKQEAgLTEwMjMsNyArMTAyNywxMSBA QAogI2Vsc2UKIAkJTUFLRV9MT05HX1pWQUxfSU5DUkVGKHN0YXRfcmRldiwgLTEpOwogI2VuZGlm Ci0JCU1BS0VfTE9OR19aVkFMX0lOQ1JFRihzdGF0X3NpemUsIHN0YXRfc2ItPnN0X3NpemUpOwor CQlpZiAoc3RhdF9zYi0+c3Rfc2l6ZSA+IExPTkdfTUFYKSB7CisJCQlNQUtFX0RPVUJMRV9aVkFM X0lOQ1JFRihzdGF0X3NpemUsIChkb3VibGUpc3RhdF9zYi0+c3Rfc2l6ZSk7CisJCX0gZWxzZSB7 CisJCQlNQUtFX0xPTkdfWlZBTF9JTkNSRUYoc3RhdF9zaXplLCAobG9uZylzdGF0X3NiLT5zdF9z aXplKTsKKwkJfQogCQlNQUtFX0xPTkdfWlZBTF9JTkNSRUYoc3RhdF9hdGltZSwgc3RhdF9zYi0+ c3RfYXRpbWUpOwogCQlNQUtFX0xPTkdfWlZBTF9JTkNSRUYoc3RhdF9tdGltZSwgc3RhdF9zYi0+ c3RfbXRpbWUpOwogCQlNQUtFX0xPTkdfWlZBTF9JTkNSRUYoc3RhdF9jdGltZSwgc3RhdF9zYi0+ c3RfY3RpbWUpOwpkaWZmIC11ciBwaHAtNS41LjEvZXh0L3N0YW5kYXJkL3BocF9maWxlc3RhdC5o IHBocC01LjUuMS5uZXcvZXh0L3N0YW5kYXJkL3BocF9maWxlc3RhdC5oCi0tLSBwaHAtNS41LjEv ZXh0L3N0YW5kYXJkL3BocF9maWxlc3RhdC5oCTIwMTMtMDctMTggMTY6Mzc6MzMuMDAwMDAwMDAw ICswMjAwCisrKyBwaHAtNS41LjEubmV3L2V4dC9zdGFuZGFyZC9waHBfZmlsZXN0YXQuaAkyMDEz LTA4LTE1IDEwOjQyOjM5LjQ0Mjg4ODA2MCArMDIwMApAQCAtNjYsNiArNjYsMTIgQEAKIAlaVkFM X0xPTkcobmFtZSwgdmFsKTsgXAogCVpfQUREUkVGX1AobmFtZSk7IAogCisjZGVmaW5lIE1BS0Vf RE9VQkxFX1pWQUxfSU5DUkVGKG5hbWUsIHZhbClcCisgICAgICAgTUFLRV9TVERfWlZBTChuYW1l KTsgXAorICAgICAgIFpWQUxfRE9VQkxFKG5hbWUsIHZhbCk7IFwKKyAgICAgICBaX0FERFJFRl9Q KG5hbWUpOyAKKworCiAjaWZkZWYgUEhQX1dJTjMyCiAjZGVmaW5lIFNfSVJVU1IgU19JUkVBRAog I2RlZmluZSBTX0lXVVNSIFNfSVdSSVRFCmRpZmYgLXVyIHBocC01LjUuMS9leHQvc3RhbmRhcmQv c3RyZWFtc2Z1bmNzLmMgcGhwLTUuNS4xLm5ldy9leHQvc3RhbmRhcmQvc3RyZWFtc2Z1bmNzLmMK LS0tIHBocC01LjUuMS9leHQvc3RhbmRhcmQvc3RyZWFtc2Z1bmNzLmMJMjAxMy0wNy0xOCAxNjoz NzozMy4wMDAwMDAwMDAgKzAyMDAKKysrIHBocC01LjUuMS5uZXcvZXh0L3N0YW5kYXJkL3N0cmVh bXNmdW5jcy5jCTIwMTMtMDgtMTUgMTA6NDI6MzkuNDQyODg4MDYwICswMjAwCkBAIC00NTIsOCAr NDUyLDkgQEAKIHsKIAlwaHBfc3RyZWFtICpzcmMsICpkZXN0OwogCXp2YWwgKnpzcmMsICp6ZGVz dDsKLQlsb25nIG1heGxlbiA9IFBIUF9TVFJFQU1fQ09QWV9BTEwsIHBvcyA9IDA7Ci0Jc2l6ZV90 IGxlbjsKKwlsb25nIG1heGxlbiA9IChsb25nKVBIUF9TVFJFQU1fQ09QWV9BTEwsIHBvcyA9IDA7 CisJb2ZmX3QgbGVuOworICAgICAgICBvZmZfdCByZWFsbGVuZ3RoID0gUEhQX1NUUkVBTV9DT1BZ X0FMTDsKIAlpbnQgcmV0OwogCiAJaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVycyhaRU5EX05VTV9B UkdTKCkgVFNSTUxTX0NDLCAicnJ8bGwiLCAmenNyYywgJnpkZXN0LCAmbWF4bGVuLCAmcG9zKSA9 PSBGQUlMVVJFKSB7CkBAIC00NjgsMTIgKzQ2OSwxNyBAQAogCQlSRVRVUk5fRkFMU0U7CiAJfQog Ci0JcmV0ID0gcGhwX3N0cmVhbV9jb3B5X3RvX3N0cmVhbV9leChzcmMsIGRlc3QsIG1heGxlbiwg Jmxlbik7CisJcmVhbGxlbmd0aCA9IG1heGxlbiA9PSAobG9uZylQSFBfU1RSRUFNX0NPUFlfQUxM ID8gUEhQX1NUUkVBTV9DT1BZX0FMTCA6IG1heGxlbjsKKwlyZXQgPSBwaHBfc3RyZWFtX2NvcHlf dG9fc3RyZWFtX2V4KHNyYywgZGVzdCwgcmVhbGxlbmd0aCwgJmxlbik7CiAKIAlpZiAocmV0ICE9 IFNVQ0NFU1MpIHsKIAkJUkVUVVJOX0ZBTFNFOwogCX0KLQlSRVRVUk5fTE9ORyhsZW4pOworICAg ICAgICBpZiAobGVuID4gTE9OR19NQVgpIHsKKwkJUkVUVVJOX0RPVUJMRSgoZG91YmxlKWxlbik7 CisJfSBlbHNlIHsKKwkJUkVUVVJOX0xPTkcobGVuKTsKKwl9CiB9CiAvKiB9fX0gKi8KIApkaWZm IC11ciBwaHAtNS41LjEvbWFpbi9waHBfc3RyZWFtcy5oIHBocC01LjUuMS5uZXcvbWFpbi9waHBf c3RyZWFtcy5oCi0tLSBwaHAtNS41LjEvbWFpbi9waHBfc3RyZWFtcy5oCTIwMTMtMDctMTggMTY6 Mzc6MzMuMDAwMDAwMDAwICswMjAwCisrKyBwaHAtNS41LjEubmV3L21haW4vcGhwX3N0cmVhbXMu aAkyMDEzLTA4LTE1IDEwOjQ0OjQ1LjQzMjg4NzgyMSArMDIwMApAQCAtNDExLDcgKzQxMSw3IEBA CiAjZGVmaW5lIHBocF9zdHJlYW1fdHJ1bmNhdGVfc3VwcG9ydGVkKHN0cmVhbSkJKF9waHBfc3Ry ZWFtX3NldF9vcHRpb24oKHN0cmVhbSksIFBIUF9TVFJFQU1fT1BUSU9OX1RSVU5DQVRFX0FQSSwg UEhQX1NUUkVBTV9UUlVOQ0FURV9TVVBQT1JURUQsIE5VTEwgVFNSTUxTX0NDKSA9PSBQSFBfU1RS RUFNX09QVElPTl9SRVRVUk5fT0sgPyAxIDogMCkKIAogQkVHSU5fRVhURVJOX0MoKQotUEhQQVBJ IGludCBfcGhwX3N0cmVhbV90cnVuY2F0ZV9zZXRfc2l6ZShwaHBfc3RyZWFtICpzdHJlYW0sIHNp emVfdCBuZXdzaXplIFRTUk1MU19EQyk7CitQSFBBUEkgaW50IF9waHBfc3RyZWFtX3RydW5jYXRl X3NldF9zaXplKHBocF9zdHJlYW0gKnN0cmVhbSwgb2ZmX3QgbmV3c2l6ZSBUU1JNTFNfREMpOwog I2RlZmluZSBwaHBfc3RyZWFtX3RydW5jYXRlX3NldF9zaXplKHN0cmVhbSwgc2l6ZSkJX3BocF9z dHJlYW1fdHJ1bmNhdGVfc2V0X3NpemUoKHN0cmVhbSksIChzaXplKSBUU1JNTFNfQ0MpCiBFTkRf RVhURVJOX0MoKQogCkBAIC00MjgsMTMgKzQyOCwxMyBAQAogCiAvKiBjb3B5IHVwIHRvIG1heGxl biBieXRlcyBmcm9tIHNyYyB0byBkZXN0LiAgSWYgbWF4bGVuIGlzIFBIUF9TVFJFQU1fQ09QWV9B TEwsCiAgKiBjb3B5IHVudGlsIGVvZihzcmMpLiAqLwotI2RlZmluZSBQSFBfU1RSRUFNX0NPUFlf QUxMCQkoKHNpemVfdCktMSkKKyNkZWZpbmUgUEhQX1NUUkVBTV9DT1BZX0FMTAkJKChvZmZfdCkt MSkKIAogQkVHSU5fRVhURVJOX0MoKQogWkVORF9BVFRSSUJVVEVfREVQUkVDQVRFRAogUEhQQVBJ IHNpemVfdCBfcGhwX3N0cmVhbV9jb3B5X3RvX3N0cmVhbShwaHBfc3RyZWFtICpzcmMsIHBocF9z dHJlYW0gKmRlc3QsIHNpemVfdCBtYXhsZW4gU1RSRUFNU19EQyBUU1JNTFNfREMpOwogI2RlZmlu ZSBwaHBfc3RyZWFtX2NvcHlfdG9fc3RyZWFtKHNyYywgZGVzdCwgbWF4bGVuKQlfcGhwX3N0cmVh bV9jb3B5X3RvX3N0cmVhbSgoc3JjKSwgKGRlc3QpLCAobWF4bGVuKSBTVFJFQU1TX0NDIFRTUk1M U19DQykKLVBIUEFQSSBpbnQgX3BocF9zdHJlYW1fY29weV90b19zdHJlYW1fZXgocGhwX3N0cmVh bSAqc3JjLCBwaHBfc3RyZWFtICpkZXN0LCBzaXplX3QgbWF4bGVuLCBzaXplX3QgKmxlbiBTVFJF QU1TX0RDIFRTUk1MU19EQyk7CitQSFBBUEkgaW50IF9waHBfc3RyZWFtX2NvcHlfdG9fc3RyZWFt X2V4KHBocF9zdHJlYW0gKnNyYywgcGhwX3N0cmVhbSAqZGVzdCwgb2ZmX3QgbWF4bGVuLCBvZmZf dCAqbGVuIFNUUkVBTVNfREMgVFNSTUxTX0RDKTsKICNkZWZpbmUgcGhwX3N0cmVhbV9jb3B5X3Rv X3N0cmVhbV9leChzcmMsIGRlc3QsIG1heGxlbiwgbGVuKQlfcGhwX3N0cmVhbV9jb3B5X3RvX3N0 cmVhbV9leCgoc3JjKSwgKGRlc3QpLCAobWF4bGVuKSwgKGxlbikgU1RSRUFNU19DQyBUU1JNTFNf Q0MpCiAKIApAQCAtNDQ1LDcgKzQ0NSw3IEBACiAjZGVmaW5lIHBocF9zdHJlYW1fY29weV90b19t ZW0oc3JjLCBidWYsIG1heGxlbiwgcGVyc2lzdGVudCkgX3BocF9zdHJlYW1fY29weV90b19tZW0o KHNyYyksIChidWYpLCAobWF4bGVuKSwgKHBlcnNpc3RlbnQpIFNUUkVBTVNfQ0MgVFNSTUxTX0ND KQogCiAvKiBvdXRwdXQgYWxsIGRhdGEgZnJvbSBhIHN0cmVhbSAqLwotUEhQQVBJIHNpemVfdCBf cGhwX3N0cmVhbV9wYXNzdGhydShwaHBfc3RyZWFtICogc3JjIFNUUkVBTVNfREMgVFNSTUxTX0RD KTsKK1BIUEFQSSBvZmZfdCBfcGhwX3N0cmVhbV9wYXNzdGhydShwaHBfc3RyZWFtICogc3JjIFNU UkVBTVNfREMgVFNSTUxTX0RDKTsKICNkZWZpbmUgcGhwX3N0cmVhbV9wYXNzdGhydShzdHJlYW0p CV9waHBfc3RyZWFtX3Bhc3N0aHJ1KChzdHJlYW0pIFNUUkVBTVNfQ0MgVFNSTUxTX0NDKQogRU5E X0VYVEVSTl9DKCkKIApkaWZmIC11ciBwaHAtNS41LjEvbWFpbi9zdHJlYW1zL21lbW9yeS5jIHBo cC01LjUuMS5uZXcvbWFpbi9zdHJlYW1zL21lbW9yeS5jCi0tLSBwaHAtNS41LjEvbWFpbi9zdHJl YW1zL21lbW9yeS5jCTIwMTMtMDctMTggMTY6Mzc6MzMuMDAwMDAwMDAwICswMjAwCisrKyBwaHAt NS41LjEubmV3L21haW4vc3RyZWFtcy9tZW1vcnkuYwkyMDEzLTA4LTI5IDIxOjIyOjI2Ljg5Mjkw NDU0OCArMDIwMApAQCAtMjU1LDcgKzI1NSw3IEBACiAJCQkJCWlmIChtcy0+bW9kZSAmIFRFTVBf U1RSRUFNX1JFQURPTkxZKSB7CiAJCQkJCQlyZXR1cm4gUEhQX1NUUkVBTV9PUFRJT05fUkVUVVJO X0VSUjsKIAkJCQkJfQotCQkJCQluZXdzaXplID0gKihzaXplX3QqKXB0cnBhcmFtOworCQkJCQlu ZXdzaXplID0gKihvZmZfdCopcHRycGFyYW07CiAJCQkJCWlmIChuZXdzaXplIDw9IG1zLT5mc2l6 ZSkgewogCQkJCQkJaWYgKG5ld3NpemUgPCBtcy0+ZnBvcykgewogCQkJCQkJCW1zLT5mcG9zID0g bmV3c2l6ZTsKZGlmZiAtdXIgcGhwLTUuNS4xL21haW4vc3RyZWFtcy9tbWFwLmMgcGhwLTUuNS4x Lm5ldy9tYWluL3N0cmVhbXMvbW1hcC5jCi0tLSBwaHAtNS41LjEvbWFpbi9zdHJlYW1zL21tYXAu YwkyMDEzLTA3LTE4IDE2OjM3OjMzLjAwMDAwMDAwMCArMDIwMAorKysgcGhwLTUuNS4xLm5ldy9t YWluL3N0cmVhbXMvbW1hcC5jCTIwMTMtMDgtMjggMTY6NTU6NTYuOTkyODgzMDE1ICswMjAwCkBA IC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSAicGhwLmgiCiAjaW5jbHVkZSAicGhwX3N0cmVhbXNf aW50LmgiCiAKLVBIUEFQSSBjaGFyICpfcGhwX3N0cmVhbV9tbWFwX3JhbmdlKHBocF9zdHJlYW0g KnN0cmVhbSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCwgcGhwX3N0cmVhbV9tbWFwX29w ZXJhdGlvbl90IG1vZGUsIHNpemVfdCAqbWFwcGVkX2xlbiBUU1JNTFNfREMpCitQSFBBUEkgY2hh ciAqX3BocF9zdHJlYW1fbW1hcF9yYW5nZShwaHBfc3RyZWFtICpzdHJlYW0sIG9mZl90IG9mZnNl dCwgc2l6ZV90IGxlbmd0aCwgcGhwX3N0cmVhbV9tbWFwX29wZXJhdGlvbl90IG1vZGUsIHNpemVf dCAqbWFwcGVkX2xlbiBUU1JNTFNfREMpCiB7CiAJcGhwX3N0cmVhbV9tbWFwX3JhbmdlIHJhbmdl OwogCQpkaWZmIC11ciBwaHAtNS41LjEvbWFpbi9zdHJlYW1zL3BocF9zdHJlYW1fbW1hcC5oIHBo cC01LjUuMS5uZXcvbWFpbi9zdHJlYW1zL3BocF9zdHJlYW1fbW1hcC5oCi0tLSBwaHAtNS41LjEv bWFpbi9zdHJlYW1zL3BocF9zdHJlYW1fbW1hcC5oCTIwMTMtMDctMTggMTY6Mzc6MzMuMDAwMDAw MDAwICswMjAwCisrKyBwaHAtNS41LjEubmV3L21haW4vc3RyZWFtcy9waHBfc3RyZWFtX21tYXAu aAkyMDEzLTA4LTI4IDE2OjU1OjAzLjcyMjg5Nzg3MCArMDIwMApAQCAtNDgsNyArNDgsNyBAQAog dHlwZWRlZiBzdHJ1Y3QgewogCS8qIHJlcXVlc3RlZCBvZmZzZXQgYW5kIGxlbmd0aC4KIAkgKiBJ ZiBsZW5ndGggaXMgMCwgdGhlIHdob2xlIGZpbGUgaXMgbWFwcGVkICovCi0Jc2l6ZV90IG9mZnNl dDsKKwlvZmZfdCBvZmZzZXQ7CiAJc2l6ZV90IGxlbmd0aDsKIAkKIAlwaHBfc3RyZWFtX21tYXBf YWNjZXNzX3QgbW9kZTsKQEAgLTY3LDcgKzY3LDcgQEAKICNkZWZpbmUgcGhwX3N0cmVhbV9tbWFw X3Bvc3NpYmxlKHN0cmVhbSkJCQkoIXBocF9zdHJlYW1faXNfZmlsdGVyZWQoKHN0cmVhbSkpICYm IHBocF9zdHJlYW1fbW1hcF9zdXBwb3J0ZWQoKHN0cmVhbSkpKQogCiBCRUdJTl9FWFRFUk5fQygp Ci1QSFBBUEkgY2hhciAqX3BocF9zdHJlYW1fbW1hcF9yYW5nZShwaHBfc3RyZWFtICpzdHJlYW0s IHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgsIHBocF9zdHJlYW1fbW1hcF9vcGVyYXRpb25f dCBtb2RlLCBzaXplX3QgKm1hcHBlZF9sZW4gVFNSTUxTX0RDKTsKK1BIUEFQSSBjaGFyICpfcGhw X3N0cmVhbV9tbWFwX3JhbmdlKHBocF9zdHJlYW0gKnN0cmVhbSwgb2ZmX3Qgb2Zmc2V0LCBzaXpl X3QgbGVuZ3RoLCBwaHBfc3RyZWFtX21tYXBfb3BlcmF0aW9uX3QgbW9kZSwgc2l6ZV90ICptYXBw ZWRfbGVuIFRTUk1MU19EQyk7CiAjZGVmaW5lIHBocF9zdHJlYW1fbW1hcF9yYW5nZShzdHJlYW0s IG9mZnNldCwgbGVuZ3RoLCBtb2RlLCBtYXBwZWRfbGVuKQlfcGhwX3N0cmVhbV9tbWFwX3Jhbmdl KChzdHJlYW0pLCAob2Zmc2V0KSwgKGxlbmd0aCksIChtb2RlKSwgKG1hcHBlZF9sZW4pIFRTUk1M U19DQykKIAogLyogdW4tbWFwcyB0aGUgbGFzdCBtYXBwZWQgcmFuZ2UgKi8KZGlmZiAtdXIgcGhw LTUuNS4xL21haW4vc3RyZWFtcy9wbGFpbl93cmFwcGVyLmMgcGhwLTUuNS4xLm5ldy9tYWluL3N0 cmVhbXMvcGxhaW5fd3JhcHBlci5jCi0tLSBwaHAtNS41LjEvbWFpbi9zdHJlYW1zL3BsYWluX3dy YXBwZXIuYwkyMDEzLTA3LTE4IDE2OjM3OjMzLjAwMDAwMDAwMCArMDIwMAorKysgcGhwLTUuNS4x Lm5ldy9tYWluL3N0cmVhbXMvcGxhaW5fd3JhcHBlci5jCTIwMTMtMDgtMzAgMTQ6MzY6MzMuMDEy ODgzNTgyICswMjAwCkBAIC0zNSw3ICszNSwxNCBAQAogI2VuZGlmCiAjaWZkZWYgSEFWRV9TWVNf TU1BTl9ICiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyMgaWZuZGVmIFBBR0VfU0laRQorIyAgZGVm aW5lIFBBR0VfU0laRSA0MDk2CisjIGVuZGlmCiAjZW5kaWYKKyNpZmRlZiBQSFBfV0lOMzIKKyMg ZGVmaW5lIFBBR0VfU0laRSA0MDk2CisjZW5kaWYKKwogI2luY2x1ZGUgIlNBUEkuaCIKIAogI2lu Y2x1ZGUgInBocF9zdHJlYW1zX2ludC5oIgpAQCAtNjI4LDEwICs2MzUsMTIgQEAKIAkJCXsKIAkJ CQlwaHBfc3RyZWFtX21tYXBfcmFuZ2UgKnJhbmdlID0gKHBocF9zdHJlYW1fbW1hcF9yYW5nZSop cHRycGFyYW07CiAJCQkJaW50IHByb3QsIGZsYWdzOworCQkJCW9mZl90IG1hcF9zdGFydCA9IDA7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYXBfb2Zmc2V0ID0gMDsK IAkJCQkKIAkJCQlzd2l0Y2ggKHZhbHVlKSB7CiAJCQkJCWNhc2UgUEhQX1NUUkVBTV9NTUFQX1NV UFBPUlRFRDoKLQkJCQkJCXJldHVybiBmZCA9PSAtMSA/IFBIUF9TVFJFQU1fT1BUSU9OX1JFVFVS Tl9FUlIgOiBQSFBfU1RSRUFNX09QVElPTl9SRVRVUk5fT0s7CisJCQkJCQlyZXR1cm4gZmQgPT0g LTEgfHwgZGF0YS0+aXNfcGlwZSA/IFBIUF9TVFJFQU1fT1BUSU9OX1JFVFVSTl9FUlIgOiBQSFBf U1RSRUFNX09QVElPTl9SRVRVUk5fT0s7CiAKIAkJCQkJY2FzZSBQSFBfU1RSRUFNX01NQVBfTUFQ X1JBTkdFOgogCQkJCQkJZG9fZnN0YXQoZGF0YSwgMSk7CkBAIC02NjUsNyArNjc0LDkgQEAKIAkJ CQkJCQlkZWZhdWx0OgogCQkJCQkJCQlyZXR1cm4gUEhQX1NUUkVBTV9PUFRJT05fUkVUVVJOX0VS UjsKIAkJCQkJCX0KLQkJCQkJCXJhbmdlLT5tYXBwZWQgPSAoY2hhciopbW1hcChOVUxMLCByYW5n ZS0+bGVuZ3RoLCBwcm90LCBmbGFncywgZmQsIHJhbmdlLT5vZmZzZXQpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwX3N0YXJ0ID0gcmFuZ2UtPm9m ZnNldCAmIH4oUEFHRV9TSVpFIC0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtYXBfb2Zmc2V0ID0gKHNpemVfdCkocmFuZ2UtPm9mZnNldCAtIG1h cF9zdGFydCk7CisJCQkJCQlyYW5nZS0+bWFwcGVkID0gKGNoYXIqKW1tYXAoTlVMTCwgcmFuZ2Ut Pmxlbmd0aCArIG1hcF9vZmZzZXQsIHByb3QsIGZsYWdzLCBmZCwgbWFwX3N0YXJ0KTsKIAkJCQkJ CWlmIChyYW5nZS0+bWFwcGVkID09IChjaGFyKilNQVBfRkFJTEVEKSB7CiAJCQkJCQkJcmFuZ2Ut Pm1hcHBlZCA9IE5VTEw7CiAJCQkJCQkJcmV0dXJuIFBIUF9TVFJFQU1fT1BUSU9OX1JFVFVSTl9F UlI7CkBAIC02NzMsNiArNjg0LDcgQEAKIAkJCQkJCS8qIHJlbWVtYmVyIHRoZSBtYXBwaW5nICov CiAJCQkJCQlkYXRhLT5sYXN0X21hcHBlZF9hZGRyID0gcmFuZ2UtPm1hcHBlZDsKIAkJCQkJCWRh dGEtPmxhc3RfbWFwcGVkX2xlbiA9IHJhbmdlLT5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZS0+bWFwcGVkID0gKCh1bnNpZ25lZCBj aGFyKilyYW5nZS0+bWFwcGVkICsgbWFwX29mZnNldCk7IAogCQkJCQkJcmV0dXJuIFBIUF9TVFJF QU1fT1BUSU9OX1JFVFVSTl9PSzsKIAogCQkJCQljYXNlIFBIUF9TVFJFQU1fTU1BUF9VTk1BUDoK QEAgLTc4Niw3ICs3OTgsOCBAQAogCQkJCQlyZXR1cm4gZmQgPT0gLTEgPyBQSFBfU1RSRUFNX09Q VElPTl9SRVRVUk5fRVJSIDogUEhQX1NUUkVBTV9PUFRJT05fUkVUVVJOX09LOwogCiAJCQkJY2Fz ZSBQSFBfU1RSRUFNX1RSVU5DQVRFX1NFVF9TSVpFOiB7Ci0JCQkJCXB0cmRpZmZfdCBuZXdfc2l6 ZSA9ICoocHRyZGlmZl90KilwdHJwYXJhbTsKKwkJCQkJb2ZmX3QgbmV3X3NpemUgPSAqKG9mZl90 KilwdHJwYXJhbTsKKwkJCQkJLyogQ2hlY2sgZm9yIG5lZ2F0aXZlIHNpemUsIHRvIGtlZXAgYmFj a3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBwcmV2aW91cyBiZWhhdmlvdXIgKi8KIAkJCQkJ aWYgKG5ld19zaXplIDwgMCkgewogCQkJCQkJcmV0dXJuIFBIUF9TVFJFQU1fT1BUSU9OX1JFVFVS Tl9FUlI7CiAJCQkJCX0KZGlmZiAtdXIgcGhwLTUuNS4xL21haW4vc3RyZWFtcy9zdHJlYW1zLmMg cGhwLTUuNS4xLm5ldy9tYWluL3N0cmVhbXMvc3RyZWFtcy5jCi0tLSBwaHAtNS41LjEvbWFpbi9z dHJlYW1zL3N0cmVhbXMuYwkyMDEzLTA3LTE4IDE2OjM3OjMzLjAwMDAwMDAwMCArMDIwMAorKysg cGhwLTUuNS4xLm5ldy9tYWluL3N0cmVhbXMvc3RyZWFtcy5jCTIwMTMtMDgtMzAgMTQ6NTQ6NDQu NjIyODg3NDU0ICswMjAwCkBAIC0xMzc4LDMwICsxMzc4LDM5IEBACiAJcmV0dXJuIHJldDsKIH0K IAotUEhQQVBJIGludCBfcGhwX3N0cmVhbV90cnVuY2F0ZV9zZXRfc2l6ZShwaHBfc3RyZWFtICpz dHJlYW0sIHNpemVfdCBuZXdzaXplIFRTUk1MU19EQykKK1BIUEFQSSBpbnQgX3BocF9zdHJlYW1f dHJ1bmNhdGVfc2V0X3NpemUocGhwX3N0cmVhbSAqc3RyZWFtLCBvZmZfdCBuZXdzaXplIFRTUk1M U19EQykKIHsKIAlyZXR1cm4gcGhwX3N0cmVhbV9zZXRfb3B0aW9uKHN0cmVhbSwgUEhQX1NUUkVB TV9PUFRJT05fVFJVTkNBVEVfQVBJLCBQSFBfU1RSRUFNX1RSVU5DQVRFX1NFVF9TSVpFLCAmbmV3 c2l6ZSk7CiB9CiAKLVBIUEFQSSBzaXplX3QgX3BocF9zdHJlYW1fcGFzc3RocnUocGhwX3N0cmVh bSAqIHN0cmVhbSBTVFJFQU1TX0RDIFRTUk1MU19EQykKK1BIUEFQSSBvZmZfdCBfcGhwX3N0cmVh bV9wYXNzdGhydShwaHBfc3RyZWFtICogc3RyZWFtIFNUUkVBTVNfREMgVFNSTUxTX0RDKQogewot CXNpemVfdCBiY291bnQgPSAwOworCW9mZl90IGJjb3VudCA9IDA7CiAJY2hhciBidWZbODE5Ml07 CiAJaW50IGI7CiAKIAlpZiAocGhwX3N0cmVhbV9tbWFwX3Bvc3NpYmxlKHN0cmVhbSkpIHsKLQkJ Y2hhciAqcDsKLQkJc2l6ZV90IG1hcHBlZDsKKwkJY2hhciAqcCA9IE5VTEw7CisJCXNpemVfdCBt YXBwZWQgPSAwOworICAgICAgICAgICAgICAgIG9mZl90IGZpbmFsID0gMDsKKwkJb2ZmX3Qgc3Rh cnQgPSBwaHBfc3RyZWFtX3RlbGwoc3RyZWFtKTsKIAotCQlwID0gcGhwX3N0cmVhbV9tbWFwX3Jh bmdlKHN0cmVhbSwgcGhwX3N0cmVhbV90ZWxsKHN0cmVhbSksIFBIUF9TVFJFQU1fTU1BUF9BTEws IFBIUF9TVFJFQU1fTUFQX01PREVfU0hBUkVEX1JFQURPTkxZLCAmbWFwcGVkKTsKKwkJcCA9IHBo cF9zdHJlYW1fbW1hcF9yYW5nZShzdHJlYW0sIHN0YXJ0LCBQSFBfU1RSRUFNX01NQVBfQUxMLCBQ SFBfU1RSRUFNX01BUF9NT0RFX1NIQVJFRF9SRUFET05MWSwgJm1hcHBlZCk7CiAKLQkJaWYgKHAp IHsKKwkJd2hpbGUgKHAgJiYgbWFwcGVkKQorICAgICAgICAgICAgICAgIHsKIAkJCVBIUFdSSVRF KHAsIG1hcHBlZCk7CiAKIAkJCXBocF9zdHJlYW1fbW1hcF91bm1hcF9leChzdHJlYW0sIG1hcHBl ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCArPSBtYXBwZWQ7CisJCSAgICAgICAg cCA9IHBocF9zdHJlYW1fbW1hcF9yYW5nZShzdHJlYW0sIHN0YXJ0ICsgZmluYWwsIFBIUF9TVFJF QU1fTU1BUF9BTEwsIFBIUF9TVFJFQU1fTUFQX01PREVfU0hBUkVEX1JFQURPTkxZLCAmbWFwcGVk KTsKIAotCQkJcmV0dXJuIG1hcHBlZDsKIAkJfQorICAgICAgICAgICAgICAgIGlmIChwKSB7CisJ CQlwaHBfc3RyZWFtX21tYXBfdW5tYXBfZXgoc3RyZWFtLCBtYXBwZWQpOworCQl9CisKKwkJcmV0 dXJuIGZpbmFsOwogCX0KIAogCXdoaWxlICgoYiA9IHBocF9zdHJlYW1fcmVhZChzdHJlYW0sIGJ1 Ziwgc2l6ZW9mKGJ1ZikpKSA+IDApIHsKQEAgLTE0MjYsNyArMTQzNSw3IEBACiAJCXJldHVybiAw OwogCX0KIAotCWlmIChtYXhsZW4gPT0gUEhQX1NUUkVBTV9DT1BZX0FMTCkgeworCWlmIChtYXhs ZW4gPT0gKHNpemVfdClQSFBfU1RSRUFNX0NPUFlfQUxMKSB7CiAJCW1heGxlbiA9IDA7CiAJfQog CkBAIC0xNDg0LDEzICsxNDkzLDEzIEBACiB9CiAKIC8qIFJldHVybnMgU1VDQ0VTUy9GQUlMVVJF IGFuZCBzZXRzICpsZW4gdG8gdGhlIG51bWJlciBvZiBieXRlcyBtb3ZlZCAqLwotUEhQQVBJIGlu dCBfcGhwX3N0cmVhbV9jb3B5X3RvX3N0cmVhbV9leChwaHBfc3RyZWFtICpzcmMsIHBocF9zdHJl YW0gKmRlc3QsIHNpemVfdCBtYXhsZW4sIHNpemVfdCAqbGVuIFNUUkVBTVNfREMgVFNSTUxTX0RD KQorUEhQQVBJIGludCBfcGhwX3N0cmVhbV9jb3B5X3RvX3N0cmVhbV9leChwaHBfc3RyZWFtICpz cmMsIHBocF9zdHJlYW0gKmRlc3QsIG9mZl90IG1heGxlbiwgb2ZmX3QgKmxlbiBTVFJFQU1TX0RD IFRTUk1MU19EQykKIHsKIAljaGFyIGJ1ZltDSFVOS19TSVpFXTsKIAlzaXplX3QgcmVhZGNodW5r OwotCXNpemVfdCBoYXZlcmVhZCA9IDA7CisJb2ZmX3QgaGF2ZXJlYWQgPSAwOwogCXNpemVfdCBk aWRyZWFkLCBkaWR3cml0ZSwgdG93cml0ZTsKLQlzaXplX3QgZHVtbXk7CisJb2ZmX3QgZHVtbXk7 CiAJcGhwX3N0cmVhbV9zdGF0YnVmIHNzYnVmOwogCiAJaWYgKCFsZW4pIHsKQEAgLTE1MjEsMjQg KzE1MzAsMzQgQEAKIAkJY2hhciAqcDsKIAkJc2l6ZV90IG1hcHBlZDsKIAotCQlwID0gcGhwX3N0 cmVhbV9tbWFwX3JhbmdlKHNyYywgcGhwX3N0cmVhbV90ZWxsKHNyYyksIG1heGxlbiwgUEhQX1NU UkVBTV9NQVBfTU9ERV9TSEFSRURfUkVBRE9OTFksICZtYXBwZWQpOworICAgICAgICAgICAgICAg IG9mZl90IGZpbmFsID0gMCwgc3RhcnQgPSBwaHBfc3RyZWFtX3RlbGwoc3JjKSwgbWFwc3VtID0g MDsKKyAgICAgICAgICAgICAgICBzaXplX3QgbWFwcGVkbGVuID0gbWF4bGVuIDwgU0laRV9NQVgg PyAoc2l6ZV90KW1heGxlbiA6IChzaXplX3QpLTE7CiAKLQkJaWYgKHApIHsKKyAgICAgICAgICAg ICAgICBwID0gcGhwX3N0cmVhbV9tbWFwX3JhbmdlKHNyYywgc3RhcnQsIG1heGxlbiwgUEhQX1NU UkVBTV9NQVBfTU9ERV9TSEFSRURfUkVBRE9OTFksICZtYXBwZWQpOworCisJCXdoaWxlIChwICYm IG1hcHBlZCA+IDApIHsKKwkJCW1hcHN1bSArPSAob2ZmX3QpbWFwcGVkOwogCQkJZGlkd3JpdGUg PSBwaHBfc3RyZWFtX3dyaXRlKGRlc3QsIHAsIG1hcHBlZCk7CiAKKyAgICAgICAgICAgICAgICAg ICAgICAgIGZpbmFsICs9IGRpZHdyaXRlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCht YXhsZW4gJiYgZmluYWwgPj0gbWF4bGVuKSB8fCBtYXBwZWQgPCBtYXBwZWRsZW4pIGJyZWFrOwor CQkJLyogT2ssIG1hcCBhbm90aGVyIHNlY3Rpb24gdG8gZml0IHRoZSBhZGRyZXNzIHNwYWNlIGZv ciBhIGxhcmdlciBmaWxlICovCisJCQlwaHBfc3RyZWFtX21tYXBfdW5tYXBfZXgoc3JjLCBtYXBw ZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkbGVuID0gKG1heGxlbiAtIGZpbmFs ICkgPCBTSVpFX01BWCA/IChzaXplX3QpKG1heGxlbiAtIGZpbmFsKSA6IChzaXplX3QpLTE7Cisg ICAgICAgICAgICAgICAgICAgICAgICBwID0gcGhwX3N0cmVhbV9tbWFwX3JhbmdlKHNyYywgc3Rh cnQgKyBmaW5hbCwgbWFwcGVkbGVuLCBQSFBfU1RSRUFNX01BUF9NT0RFX1NIQVJFRF9SRUFET05M WSwgJm1hcHBlZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpsZW4gPSBm aW5hbDsKKwkJaWYgKHApIHsKIAkJCXBocF9zdHJlYW1fbW1hcF91bm1hcF9leChzcmMsIG1hcHBl ZCk7Ci0KLQkJCSpsZW4gPSBkaWR3cml0ZTsKLQotCQkJLyogd2UndmUgZ290IGF0IGxlYXN0IDEg Ynl0ZSB0byByZWFkCi0JCQkgKiBsZXNzIHRoYW4gMSBpcyBhbiBlcnJvcgotCQkJICogQU5EIHJl YWQgYnl0ZXMgbWF0Y2ggd3JpdHRlbiAqLwotCQkJaWYgKG1hcHBlZCA+IDAgJiYgbWFwcGVkID09 IGRpZHdyaXRlKSB7Ci0JCQkJcmV0dXJuIFNVQ0NFU1M7Ci0JCQl9Ci0JCQlyZXR1cm4gRkFJTFVS RTsKIAkJfQotCX0KKworICAgICAgICAgICAgICAgIC8qIHdlJ3ZlIGdvdCBhdCBsZWFzdCAxIGJ5 dGUgdG8gcmVhZC4KKyAgICAgICAgICAgICAgICAqIGxlc3MgdGhhbiAxIGlzIGFuIGVycm9yICov CisgICAgICAgICAgICAgICAgaWYgKGZpbmFsID4gMCAmJiBtYXBzdW0gPT0gZmluYWwpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNVQ0NFU1M7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIHJldHVybiBGQUlMVVJFOworICAgICAgICB9CiAKIAl3aGlsZSgxKSB7 CiAJCXJlYWRjaHVuayA9IHNpemVvZihidWYpOwpAQCAtMTU5MywxMiArMTYxMiwxMiBAQAogWkVO RF9BVFRSSUJVVEVfREVQUkVDQVRFRAogUEhQQVBJIHNpemVfdCBfcGhwX3N0cmVhbV9jb3B5X3Rv X3N0cmVhbShwaHBfc3RyZWFtICpzcmMsIHBocF9zdHJlYW0gKmRlc3QsIHNpemVfdCBtYXhsZW4g U1RSRUFNU19EQyBUU1JNTFNfREMpCiB7Ci0Jc2l6ZV90IGxlbjsKLQlpbnQgcmV0ID0gX3BocF9z dHJlYW1fY29weV90b19zdHJlYW1fZXgoc3JjLCBkZXN0LCBtYXhsZW4sICZsZW4gU1RSRUFNU19S RUxfQ0MgVFNSTUxTX0NDKTsKLQlpZiAocmV0ID09IFNVQ0NFU1MgJiYgbGVuID09IDAgJiYgbWF4 bGVuICE9IDApIHsKKyAgICAgICAgb2ZmX3QgX2xlbiA9IDAsIF9tYXhsZW4gPSBtYXhsZW47CisJ aW50IHJldCA9IF9waHBfc3RyZWFtX2NvcHlfdG9fc3RyZWFtX2V4KHNyYywgZGVzdCwgX21heGxl biwgJl9sZW4gU1RSRUFNU19SRUxfQ0MgVFNSTUxTX0NDKTsKKwlpZiAocmV0ID09IFNVQ0NFU1Mg JiYgX2xlbiA9PSAwICYmIF9tYXhsZW4gIT0gMCkgewogCQlyZXR1cm4gMTsKIAl9Ci0JcmV0dXJu IGxlbjsKKwlyZXR1cm4gKHNpemVfdClfbGVuOwogfQogLyogfX19ICovCiAKZGlmZiAtdXIgcGhw LTUuNS4xL21haW4vc3RyZWFtcy91c2Vyc3BhY2UuYyBwaHAtNS41LjEubmV3L21haW4vc3RyZWFt cy91c2Vyc3BhY2UuYwotLS0gcGhwLTUuNS4xL21haW4vc3RyZWFtcy91c2Vyc3BhY2UuYwkyMDEz LTA3LTE4IDE2OjM3OjMzLjAwMDAwMDAwMCArMDIwMAorKysgcGhwLTUuNS4xLm5ldy9tYWluL3N0 cmVhbXMvdXNlcnNwYWNlLmMJMjAxMy0wOC0zMCAxNDo0MDoxMy4zNTI4OTE3NTQgKzAyMDAKQEAg LTEwMzYsOCArMTAzNiw4IEBACiAJCQlicmVhazsKIAogCQljYXNlIFBIUF9TVFJFQU1fVFJVTkNB VEVfU0VUX1NJWkU6IHsKLQkJCXB0cmRpZmZfdCBuZXdfc2l6ZSA9ICoocHRyZGlmZl90KikgcHRy cGFyYW07Ci0JCQlpZiAobmV3X3NpemUgPj0gMCAmJiBuZXdfc2l6ZSA8PSAocHRyZGlmZl90KUxP TkdfTUFYKSB7CisJCQlvZmZfdCBuZXdfc2l6ZSA9ICoob2ZmX3QqKSBwdHJwYXJhbTsKKwkJCWlm IChuZXdfc2l6ZSA+PSAwICYmIG5ld19zaXplIDw9IChvZmZfdClMT05HX01BWCkgewogCQkJCU1B S0VfU1REX1pWQUwoenZhbHVlKTsKIAkJCQlaVkFMX0xPTkcoenZhbHVlLCAobG9uZyluZXdfc2l6 ZSk7CiAJCQkJYXJnc1swXSA9ICZ6dmFsdWU7Cg== --e89a8f3bae5bb7addc04e52bdc52--