Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:46390 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 71029 invoked from network); 9 Dec 2009 23:10:52 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 9 Dec 2009 23:10:52 -0000 Authentication-Results: pb1.pair.com smtp.mail=arraypad@googlemail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=arraypad@googlemail.com; sender-id=pass; domainkeys=bad Received-SPF: pass (pb1.pair.com: domain googlemail.com designates 209.85.219.219 as permitted sender) DomainKey-Status: bad X-DomainKeys: Ecelerity dk_validate implementing draft-delany-domainkeys-base-01 X-PHP-List-Original-Sender: arraypad@googlemail.com X-Host-Fingerprint: 209.85.219.219 mail-ew0-f219.google.com Received: from [209.85.219.219] ([209.85.219.219:51243] helo=mail-ew0-f219.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 2E/19-25115-A7E202B4 for ; Wed, 09 Dec 2009 18:10:51 -0500 Received: by ewy19 with SMTP id 19so2545963ewy.1 for ; Wed, 09 Dec 2009 15:10:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=nfI6TDnsiX+3IsPyLDMTy/+8gdEMPHvAjuHC9DqxDgk=; b=LM5/eD/c1VzZAZ6NyYcKi/YIQJut1sH0hdf3RTycHm9/SOKB8NhLwCfVsN00HJRMxf mGx/gcSbFK8QCYP/IbvYUXzJUwOfPPM5zPMacUQFs5mHenuvBDCY1G7LPrNo7FYL8HPV kZOOqnDv68obiQ73hoJPjSnbGGjcJNd68t038= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=RqIWIH1XJ05OCfh6QLyoo1dEK/Hw9qyXTJHuPD1y0fxwFEWTxfQBfGdCAMTtDOS4Vn VCeRq3W0ihq8U6ardcPbx2F6PSlGysqmKsZtQc0tFYFrJQBkgoVmESLSatdUqwt1JHSx 2ZHaBwK1I50fVT9p6fH/kb5EBfqbylohXkmJs= MIME-Version: 1.0 Received: by 10.213.96.221 with SMTP id i29mr1658760ebn.96.1260400247625; Wed, 09 Dec 2009 15:10:47 -0800 (PST) In-Reply-To: <4B1F0CFE.4040505@zend.com> References: <4B1F0CFE.4040505@zend.com> Date: Wed, 9 Dec 2009 23:10:47 +0000 Message-ID: To: Stanislav Malyshev Cc: internals@lists.php.net Content-Type: multipart/mixed; boundary=001636c5a7c708d954047a53cd2f Subject: Re: [PHP-DEV] [PATCH] session_set_save_handler(class) From: arraypad@googlemail.com (Arpad Ray) --001636c5a7c708d954047a53cd2f Content-Type: multipart/alternative; boundary=001636c5a7c708d94a047a53cd2d --001636c5a7c708d94a047a53cd2d Content-Type: text/plain; charset=ISO-8859-1 On Wed, Dec 9, 2009 at 2:35 AM, Stanislav Malyshev wrote: > Hi! > > > By extending the new internal class SessionHandler, users can wrap or >> override methods of whatever session handler is in use, or implement a >> complete custom handler. >> > > Hi, Thanks very much for your feedback, I've made some changes in the attached patch. > Couple of notes: > > 1. I'd call mod_active something more clean - like session_active? > This flag indicates whether the mod should be called from the usual session events. There might be a better name for it but there's already a session_active with a different meaning. > 2. What happens if session module is set to "user" in configuration - what > old_mod will be then and how this patch will work? > It now raises an error rather than segfaulting if the user module is selected but no handler has been registered. This should really halt execution which it doesn't at the moment but I'll raise that separately. old_mod is only set in the first call to session_set_save_handler(), so subsequent calls just replace each other. Inheritance can be achieved by extending the previous class or calling the previous functions from the new class. 3. old_mod is also not a clear name - maybe default_mod? > Ok, changed. > 4. I think it also makes sense to allow passing object instead of class. > I've allowed objects to be passed now but I think this should probably be discouraged since it's going to be called in a static context anyway. > 5. In fact, thinking about it - maybe it should be an interface and not a > class? > I made it a class rather than an interface to allow easy inheritance of the default handler. This way it's always parent::foo() whether extending directly from SessionHandler or a child class. It also means users only need to implement the methods they actually use. Regards, Arpad --001636c5a7c708d94a047a53cd2d Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
On Wed, Dec 9, 2009 at 2:35 AM, Stanislav Malysh= ev <stas@zend.com> wrote:
Hi!


By extending the new internal class SessionHandler, users can wrap or
override methods of whatever session handler is in use, or implement a
complete custom handler.


Hi,

Thanks very much for your feedba= ck, I've made some changes in the attached patch.
=A0
Couple of notes:

1. I'd call mod_active something more clean - like session_active?
<= /blockquote>

This flag indicates whether the mod should be called f= rom the usual session events. There might be a better name for it but there= 's already a session_active with a different meaning.
=A0
2. What happens if session module is set to "user" in configurati= on - what old_mod will be then and how this patch will work?

It now raises an error rather than segfaulting if the user modul= e is selected but no handler has been registered. This should really halt e= xecution which it doesn't at the moment but I'll raise that separat= ely.

old_mod is only set in the first call to session_set_save_handler(), so= subsequent calls just replace each other. Inheritance can be achieved by e= xtending the previous class or calling the previous functions from the new = class.

3. old_mod is also not a clear name - maybe default_mod?

Ok, changed.
=A0
4. I think it also makes sense to allow passing object instead of class.

I've allowed objects to be passed now but I thin= k this should probably be discouraged since it's going to be called in = a static context anyway.
=A0
5. In fact, thinking about it - maybe it should be an interface and not a c= lass?
=A0
I made it a class rather than an i= nterface to allow easy inheritance of the default handler. This way it'= s always parent::foo() whether extending directly from SessionHandler or a = child class. It also means users only need to implement the methods they ac= tually use.

Regards,

Arpad
--001636c5a7c708d94a047a53cd2d-- --001636c5a7c708d954047a53cd2f Content-Type: text/x-diff; charset=UTF-8; name="php6-session-oo-01.patch" Content-Disposition: attachment; filename="php6-session-oo-01.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g30pom8p0 SW5kZXg6IGV4dC9zZXNzaW9uL2NvbmZpZy53MzIKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZXh0L3Nlc3Npb24v Y29uZmlnLnczMgkocmV2aXNpb24gMjkxOTIyKQorKysgZXh0L3Nlc3Npb24vY29uZmlnLnczMgko d29ya2luZyBjb3B5KQpAQCAtNCw3ICs0LDcgQEAKIEFSR19FTkFCTEUoInNlc3Npb24iLCAic2Vz c2lvbiBzdXBwb3J0IiwgInllcyIpOwogCiBpZiAoUEhQX1NFU1NJT04gPT0gInllcyIpIHsKLQlF WFRFTlNJT04oInNlc3Npb24iLCAic2Vzc2lvbi5jIG1vZF9maWxlcy5jIG1vZF9tbS5jIG1vZF91 c2VyLmMiLCBmYWxzZSAvKiBuZXZlciBzaGFyZWQgKi8pOworCUVYVEVOU0lPTigic2Vzc2lvbiIs ICJtb2RfdXNlcl9jbGFzcy5jIHNlc3Npb24uYyBtb2RfZmlsZXMuYyBtb2RfbW0uYyBtb2RfdXNl ci5jIiwgZmFsc2UgLyogbmV2ZXIgc2hhcmVkICovKTsKIAlBQ19ERUZJTkUoIkhBVkVfUEhQX1NF U1NJT04iLCAxLCAiU2Vzc2lvbiBzdXBwb3J0Iik7CiB9CiAKSW5kZXg6IGV4dC9zZXNzaW9uL3Bo cF9zZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gZXh0L3Nlc3Npb24vcGhwX3Nlc3Npb24uaAkocmV2 aXNpb24gMjkxOTIyKQorKysgZXh0L3Nlc3Npb24vcGhwX3Nlc3Npb24uaAkod29ya2luZyBjb3B5 KQpAQCAtMTI4LDYgKzEyOCw3IEBACiAJemVuZF9ib29sICBjb29raWVfc2VjdXJlOwogCXplbmRf Ym9vbCAgY29va2llX2h0dHBvbmx5OwogCXBzX21vZHVsZSAqbW9kOworCXBzX21vZHVsZSAqZGVm YXVsdF9tb2Q7CiAJdm9pZCAqbW9kX2RhdGE7CiAJcGhwX3Nlc3Npb25fc3RhdHVzIHNlc3Npb25f c3RhdHVzOwogCWxvbmcgZ2NfcHJvYmFiaWxpdHk7CkBAIC0xNDYsNiArMTQ3LDcgQEAKIAkJCXp2 YWwgKnBzX2djOwogCQl9IG5hbWU7CiAJfSBtb2RfdXNlcl9uYW1lczsKKwlpbnQgbW9kX2FjdGl2 ZTsKIAljb25zdCBzdHJ1Y3QgcHNfc2VyaWFsaXplcl9zdHJ1Y3QgKnNlcmlhbGl6ZXI7CiAJenZh bCAqaHR0cF9zZXNzaW9uX3ZhcnM7CiAJemVuZF9ib29sIGF1dG9fc3RhcnQ7CkBAIC0yODUsNCAr Mjg3LDE0IEBACiB2b2lkIHBocF9zZXNzaW9uX2F1dG9fc3RhcnQodm9pZCAqZGF0YSk7CiB2b2lk IHBocF9zZXNzaW9uX3NodXRkb3duKHZvaWQgKmRhdGEpOwogCisjZGVmaW5lIFBTX0NMQVNTX05B TUUgIlNlc3Npb25IYW5kbGVyIgorZXh0ZXJuIHplbmRfY2xhc3NfZW50cnkgKnBocF9zZXNzaW9u X2NsYXNzX2VudHJ5OworCitleHRlcm4gUEhQX01FVEhPRChTZXNzaW9uSGFuZGxlciwgb3Blbik7 CitleHRlcm4gUEhQX01FVEhPRChTZXNzaW9uSGFuZGxlciwgY2xvc2UpOworZXh0ZXJuIFBIUF9N RVRIT0QoU2Vzc2lvbkhhbmRsZXIsIHJlYWQpOworZXh0ZXJuIFBIUF9NRVRIT0QoU2Vzc2lvbkhh bmRsZXIsIHdyaXRlKTsKK2V4dGVybiBQSFBfTUVUSE9EKFNlc3Npb25IYW5kbGVyLCBkZXN0cm95 KTsKK2V4dGVybiBQSFBfTUVUSE9EKFNlc3Npb25IYW5kbGVyLCBnYyk7CisKICNlbmRpZgpJbmRl eDogZXh0L3Nlc3Npb24vbW9kX3VzZXJfY2xhc3MuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBleHQvc2Vzc2lv bi9tb2RfdXNlcl9jbGFzcy5jCShyZXZpc2lvbiAwKQorKysgZXh0L3Nlc3Npb24vbW9kX3VzZXJf Y2xhc3MuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgICArLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSsKKyAgIHwgUEhQIFZlcnNpb24gNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IENvcHly aWdodCAoYykgMTk5Ny0yMDA5IFRoZSBQSFAgR3JvdXAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1 YmplY3QgdG8gdmVyc2lvbiAzLjAxIG9mIHRoZSBQSFAgbGljZW5zZSwgICAgICB8CisgICB8IHRo YXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLCBhbmQg aXMgICAgICAgIHwKKyAgIHwgYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0 IHRoZSBmb2xsb3dpbmcgdXJsOiAgICAgICAgICAgfAorICAgfCBodHRwOi8vd3d3LnBocC5uZXQv bGljZW5zZS8zXzAxLnR4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8 IElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBQSFAgbGljZW5zZSBhbmQgYXJl IHVuYWJsZSB0byAgIHwKKyAgIHwgb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2Vi LCBwbGVhc2Ugc2VuZCBhIG5vdGUgdG8gICAgICAgICAgfAorICAgfCBsaWNlbnNlQHBocC5uZXQg c28gd2UgY2FuIG1haWwgeW91IGEgY29weSBpbW1lZGlhdGVseS4gICAgICAgICAgICAgICB8Cisg ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgQXV0aG9yOiBBcnBhZCBSYXkgPGFycGFkQHBocC5uZXQ+ CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqLworCisvKiAkSWQkICovCisKKyNpbmNsdWRlICJwaHAu aCIKKyNpbmNsdWRlICJwaHBfc2Vzc2lvbi5oIgorCisjZGVmaW5lIFBTX1NBTklUWV9DSEVDSwkJ CQkJCVwKKwlpZiAoUFMoZGVmYXVsdF9tb2QpID09IE5VTEwpIHsJCQlcCisJCVJFVFVSTl9GQUxT RTsJCQkJCQlcCisJfQkJCQkJCQkKKworCisvKiB7e3sgcHJvdG8gYm9vbCBTZXNzaW9uSGFuZGxl cjo6b3BlbihzdHJpbmcgc2F2ZV9wYXRoLCBzdHJpbmcgc2Vzc2lvbl9uYW1lKQorICAgV3JhcHMg dGhlIG9sZCBvcGVuIGhhbmRsZXIgKi8KK1BIUF9NRVRIT0QoU2Vzc2lvbkhhbmRsZXIsIG9wZW4p Cit7CisJUFNfU0FOSVRZX0NIRUNLOworCisJUkVUVkFMX0xPTkcoUFMoZGVmYXVsdF9tb2QpLT5z X29wZW4oJlBTKG1vZF9kYXRhKSwgUFMoc2F2ZV9wYXRoKSwgUFMoc2Vzc2lvbl9uYW1lKSkpOwor fQorLyogfX19ICovCisKKy8qIHt7eyBwcm90byBib29sIFNlc3Npb25IYW5kbGVyOjpjbG9zZSgp CisgICBXcmFwcyB0aGUgb2xkIGNsb3NlIGhhbmRsZXIgKi8KK1BIUF9NRVRIT0QoU2Vzc2lvbkhh bmRsZXIsIGNsb3NlKQoreworCVBTX1NBTklUWV9DSEVDSzsKKwkKKwlSRVRWQUxfTE9ORyhQUyhk ZWZhdWx0X21vZCktPnNfY2xvc2UoJlBTKG1vZF9kYXRhKSkpOworfQorLyogfX19ICovCisKKy8q IHt7eyBwcm90byBib29sIFNlc3Npb25IYW5kbGVyOjpyZWFkKHNhdmVfcGF0aCwgc2Vzc2lvbl9u YW1lKQorICAgV3JhcHMgdGhlIG9sZCByZWFkIGhhbmRsZXIgKi8KK1BIUF9NRVRIT0QoU2Vzc2lv bkhhbmRsZXIsIHJlYWQpCit7CisJY2hhciAqa2V5LCAqdmFsOworCWludCBrZXlfbGVuLCB2YWxf bGVuOworCisJUFNfU0FOSVRZX0NIRUNLOworCisJaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVycyha RU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCAicyIsICZrZXksICZrZXlfbGVuLCBVRyh1dGY4X2Nv bnYpKSA9PSBGQUlMVVJFKSB7CisJCXJldHVybjsKKwl9CisKKwlpZiAoUFMoZGVmYXVsdF9tb2Qp LT5zX3JlYWQoJlBTKG1vZF9kYXRhKSwga2V5LCAmdmFsLCAmdmFsX2xlbikgPT0gRkFJTFVSRSkg eworCQlSRVRWQUxfRkFMU0U7CisJCXJldHVybjsKKwl9CisKKwlSRVRWQUxfU1RSSU5HTCh2YWws IHZhbF9sZW4sIDEpOworCWVmcmVlKHZhbCk7CisJcmV0dXJuOworfQorLyogfX19ICovCisKKy8q IHt7eyBwcm90byBib29sIFNlc3Npb25IYW5kbGVyOjp3cml0ZShzYXZlX3BhdGgsIHNlc3Npb25f bmFtZSkKKyAgIFdyYXBzIHRoZSBvbGQgd3JpdGUgaGFuZGxlciAqLworUEhQX01FVEhPRChTZXNz aW9uSGFuZGxlciwgd3JpdGUpCit7CisJY2hhciAqa2V5LCAqdmFsOworCWludCBrZXlfbGVuLCB2 YWxfbGVuOworCisJUFNfU0FOSVRZX0NIRUNLOworCisJaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVy cyhaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCAic3MiLCAma2V5LCAma2V5X2xlbiwgJnZhbCwg JnZhbF9sZW4sIFVHKHV0ZjhfY29udikpID09IEZBSUxVUkUpIHsKKwkJcmV0dXJuOworCX0KKwor CVJFVFZBTF9MT05HKFBTKGRlZmF1bHRfbW9kKS0+c193cml0ZSgmUFMobW9kX2RhdGEpLCBrZXks IHZhbCwgdmFsX2xlbikpOworfQorLyogfX19ICovCisKKy8qIHt7eyBwcm90byBib29sIFNlc3Np b25IYW5kbGVyOjpkZXN0cm95KCkKKyAgIFdyYXBzIHRoZSBvbGQgZGVzdHJveSBoYW5kbGVyICov CitQSFBfTUVUSE9EKFNlc3Npb25IYW5kbGVyLCBkZXN0cm95KQoreworCWNoYXIgKmtleTsKKwlp bnQga2V5X2xlbjsKKworCWlmICh6ZW5kX3BhcnNlX3BhcmFtZXRlcnMoWkVORF9OVU1fQVJHUygp IFRTUk1MU19DQywgInMiLCAma2V5LCAma2V5X2xlbiwgVUcodXRmOF9jb252KSkgPT0gRkFJTFVS RSkgeworCQlyZXR1cm47CisJfQorCQorCVJFVFZBTF9MT05HKFBTKGRlZmF1bHRfbW9kKS0+c19k ZXN0cm95KCZQUyhtb2RfZGF0YSksIGtleSkpOworfQorLyogfX19ICovCisKKy8qIHt7eyBwcm90 byBib29sIFNlc3Npb25IYW5kbGVyOjpnYyhpbnQgbWF4bGlmZXRpbWUpCisgICBXcmFwcyB0aGUg b2xkIGdjIGhhbmRsZXIgKi8KK1BIUF9NRVRIT0QoU2Vzc2lvbkhhbmRsZXIsIGdjKQoreworCWxv bmcgbWF4bGlmZXRpbWU7CisJaW50IG5yZGVsczsKKworCWlmICh6ZW5kX3BhcnNlX3BhcmFtZXRl cnMoWkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywgImwiLCAmbWF4bGlmZXRpbWUsIFVHKHV0Zjhf Y29udikpID09IEZBSUxVUkUpIHsKKwkJcmV0dXJuOworCX0KKwkKKwlSRVRWQUxfTE9ORyhQUyhk ZWZhdWx0X21vZCktPnNfZ2MoJlBTKG1vZF9kYXRhKSwgbWF4bGlmZXRpbWUsICZucmRlbHMpKTsK K30KKy8qIH19fSAqLworCkluZGV4OiBleHQvc2Vzc2lvbi9jb25maWcubTQKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gZXh0L3Nlc3Npb24vY29uZmlnLm00CShyZXZpc2lvbiAyOTE5MjIpCisrKyBleHQvc2Vzc2lv bi9jb25maWcubTQJKHdvcmtpbmcgY29weSkKQEAgLTExLDcgKzExLDcgQEAKIGlmIHRlc3QgIiRQ SFBfU0VTU0lPTiIgIT0gIm5vIjsgdGhlbgogICBQSFBfUFdSSVRFX1RFU1QKICAgUEhQX1BSRUFE X1RFU1QKLSAgUEhQX05FV19FWFRFTlNJT04oc2Vzc2lvbiwgc2Vzc2lvbi5jIG1vZF9maWxlcy5j IG1vZF9tbS5jIG1vZF91c2VyLmMsICRleHRfc2hhcmVkKQorICBQSFBfTkVXX0VYVEVOU0lPTihz ZXNzaW9uLCBtb2RfdXNlcl9jbGFzcy5jIHNlc3Npb24uYyBtb2RfZmlsZXMuYyBtb2RfbW0uYyBt b2RfdXNlci5jLCAkZXh0X3NoYXJlZCkKICAgUEhQX0FERF9FWFRFTlNJT05fREVQKHNlc3Npb24s IGhhc2gsIHRydWUpCiAgIFBIUF9TVUJTVChTRVNTSU9OX1NIQVJFRF9MSUJBREQpCiAgIFBIUF9J TlNUQUxMX0hFQURFUlMoZXh0L3Nlc3Npb24sIFtwaHBfc2Vzc2lvbi5oIG1vZF9maWxlcy5oIG1v ZF91c2VyLmhdKQpJbmRleDogZXh0L3Nlc3Npb24vcGFja2FnZS54bWwKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g ZXh0L3Nlc3Npb24vcGFja2FnZS54bWwJKHJldmlzaW9uIDI5MTkyMikKKysrIGV4dC9zZXNzaW9u L3BhY2thZ2UueG1sCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAgICA8ZmlsZSBy b2xlPSJzcmMiIG5hbWU9Im1vZF9tbS5jIi8+CiAgICA8ZmlsZSByb2xlPSJzcmMiIG5hbWU9Im1v ZF9tbS5oIi8+CiAgICA8ZmlsZSByb2xlPSJzcmMiIG5hbWU9Im1vZF91c2VyLmMiLz4KKyAgIDxm aWxlIHJvbGU9InNyYyIgbmFtZT0ibW9kX3VzZXJfY2xhc3MuYyIvPgogICAgPGZpbGUgcm9sZT0i c3JjIiBuYW1lPSJtb2RfdXNlci5oIi8+CiAgICA8ZmlsZSByb2xlPSJzcmMiIG5hbWU9InBocF9z ZXNzaW9uLmgiLz4KICAgIDxmaWxlIHJvbGU9InNyYyIgbmFtZT0ic2Vzc2lvbi5jIi8+CkluZGV4 OiBleHQvc2Vzc2lvbi9tb2RfdXNlci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGV4dC9zZXNzaW9uL21vZF91 c2VyLmMJKHJldmlzaW9uIDI5MTkyMikKKysrIGV4dC9zZXNzaW9uL21vZF91c2VyLmMJKHdvcmtp bmcgY29weSkKQEAgLTYyLDE1ICs2MiwxMCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLSNkZWZp bmUgU1REVkFSUzEJCQkJCQkJXAorI2RlZmluZSBTVERWQVJTCQkJCQkJCQlcCiAJenZhbCAqcmV0 dmFsOwkJCQkJCQlcCiAJaW50IHJldCA9IEZBSUxVUkUKIAotI2RlZmluZSBTVERWQVJTCQkJCQkJ CQlcCi0JU1REVkFSUzE7CQkJCQkJCQlcCi0JY2hhciAqbWRhdGEgPSBQU19HRVRfTU9EX0RBVEEo KTsJCVwKLQlpZiAoIW1kYXRhKSB7IHJldHVybiBGQUlMVVJFOyB9Ci0KICNkZWZpbmUgUFNGKGEp IFBTKG1vZF91c2VyX25hbWVzKS5uYW1lLnBzXyMjYQogCiAjZGVmaW5lIEZJTklTSAkJCQkJCQkJ XApAQCAtODQsMzMgKzc5LDI0IEBACiBQU19PUEVOX0ZVTkModXNlcikKIHsKIAl6dmFsICphcmdz WzJdOwotCXN0YXRpYyBjaGFyIGR1bW15ID0gMDsKLQlTVERWQVJTMTsKKwlTVERWQVJTOwogCiAJ U0VTU19aVkFMX1NUUklORygoY2hhciopc2F2ZV9wYXRoLCBhcmdzWzBdKTsKIAlTRVNTX1pWQUxf U1RSSU5HKChjaGFyKilzZXNzaW9uX25hbWUsIGFyZ3NbMV0pOwogCiAJcmV0dmFsID0gcHNfY2Fs bF9oYW5kbGVyKFBTRihvcGVuKSwgMiwgYXJncyBUU1JNTFNfQ0MpOwotCWlmIChyZXR2YWwpIHsK LQkJLyogVGhpcyBpcyBuZWNlc3NhcnkgdG8gZm9vbCB0aGUgc2Vzc2lvbiBtb2R1bGUuIFllcywg aXQncyBzYWZlIHRvCi0JCSAqIHVzZSBhIHN0YXRpYy4gTmVpdGhlciBtb2RfdXNlciBub3IgdGhl IHNlc3Npb24gbW9kdWxlIGl0c2VsZiB3aWxsCi0JCSAqIGV2ZXIgdG91Y2ggdGhpcyBwb2ludGVy LiBJdCBjb3VsZCBiZSBzZXQgdG8gMHhERUFEQkVFRiBmb3IgYWxsIHRoZQotCQkgKiBkaWZmZXJl bmNlIGl0IG1ha2VzLCBidXQgZm9yIHRoZSBzYWtlIG9mIHBhcmFub2lhIGl0J3Mgc2V0IHRvIHNv bWUKLQkJICogdmFsaWQgdmFsdWUuICovCi0JCVBTX1NFVF9NT0RfREFUQSgmZHVtbXkpOwotCX0K KwlQUyhtb2RfYWN0aXZlKSA9IDE7CiAKIAlGSU5JU0g7CiB9CiAKIFBTX0NMT1NFX0ZVTkModXNl cikKIHsKLQlTVERWQVJTMTsKKwlTVERWQVJTOwogCiAJcmV0dmFsID0gcHNfY2FsbF9oYW5kbGVy KFBTRihjbG9zZSksIDAsIE5VTEwgVFNSTUxTX0NDKTsKKwlQUyhtb2RfYWN0aXZlKSA9IDA7CiAK LQlQU19TRVRfTU9EX0RBVEEoTlVMTCk7Ci0KIAlGSU5JU0g7CiB9CiAKSW5kZXg6IGV4dC9zZXNz aW9uL3Rlc3RzL3Nlc3Npb25fc2V0X3NhdmVfaGFuZGxlcl9jbGFzcy5waHB0Cj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGV4dC9zZXNzaW9uL3Rlc3RzL3Nlc3Npb25fc2V0X3NhdmVfaGFuZGxlcl9jbGFzcy5waHB0 CShyZXZpc2lvbiAwKQorKysgZXh0L3Nlc3Npb24vdGVzdHMvc2Vzc2lvbl9zZXRfc2F2ZV9oYW5k bGVyX2NsYXNzLnBocHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTk3IEBACistLVRFU1QtLQor VGVzdCBzZXNzaW9uX3NldF9zYXZlX2hhbmRsZXIoKSBmdW5jdGlvbiA6IGNsYXNzIGhhbmRsZXIK Ky0tSU5JLS0KK3Nlc3Npb24uc2F2ZV9wYXRoPQorc2Vzc2lvbi5uYW1lPVBIUFNFU1NJRAorLS1T S0lQSUYtLQorPD9waHAgaW5jbHVkZSgnc2tpcGlmLmluYycpOyA/PgorLS1GSUxFLS0KKzw/cGhw CisKK29iX3N0YXJ0KCk7CisKKy8qIAorICogUHJvdG90eXBlIDogYm9vbCBzZXNzaW9uX3NldF9z YXZlX2hhbmRsZXIoc3RyaW5nICRjbGFzcykKKyAqIERlc2NyaXB0aW9uIDogU2V0cyB1c2VyLWxl dmVsIHNlc3Npb24gc3RvcmFnZSBmdW5jdGlvbnMKKyAqIFNvdXJjZSBjb2RlIDogZXh0L3Nlc3Np b24vc2Vzc2lvbi5jIAorICovCisKK2VjaG8gIioqKiBUZXN0aW5nIHNlc3Npb25fc2V0X3NhdmVf aGFuZGxlcigpIDogY2xhc3MgaGFuZGxlciAqKipcbiI7CisKK2VjaG8gIioqKiBUZXN0aW5nIHNl c3Npb25fc2V0X3NhdmVfaGFuZGxlcigpIDogYmFzaWMgY2xhc3Mgd3JhcHBpbmcgZXhpc3Rpbmcg aGFuZGxlciAqKipcbiI7CisKK2NsYXNzIE15U2Vzc2lvbiBleHRlbmRzIFNlc3Npb25IYW5kbGVy IHsKKwlwdWJsaWMgc3RhdGljICRpID0gMDsKKwlwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9wZW4o JHBhdGgsICRuYW1lKSB7CisJCSsrc2VsZjo6JGk7CisJCWVjaG8gJ09wZW4gJywgc2Vzc2lvbl9p ZCgpLCAiXG4iOworCQlyZXR1cm4gcGFyZW50OjpvcGVuKCRwYXRoLCAkbmFtZSk7CisJfQorCXB1 YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVhZCgka2V5KSB7CisJCSsrc2VsZjo6JGk7CisJCWVjaG8g J1JlYWQgJywgc2Vzc2lvbl9pZCgpLCAiXG4iOworCQlyZXR1cm4gcGFyZW50OjpyZWFkKCRrZXkp OworCX0KK30KKworJHBhdGggPSBkaXJuYW1lKF9fRklMRV9fKTsKK3Nlc3Npb25fc2F2ZV9wYXRo KCRwYXRoKTsKKworJG9sZEhhbmRsZXIgPSBpbmlfZ2V0KCdzZXNzaW9uLnNhdmVfaGFuZGxlcicp Oworc2Vzc2lvbl9zZXRfc2F2ZV9oYW5kbGVyKCdNeVNlc3Npb24nKTsKK3Nlc3Npb25fc3RhcnQo KTsKKwordmFyX2R1bXAoc2Vzc2lvbl9pZCgpLCAkb2xkSGFuZGxlciwgaW5pX2dldCgnc2Vzc2lv bi5zYXZlX2hhbmRsZXInKSwgTXlTZXNzaW9uOjokaSwgJF9TRVNTSU9OKTsKKworJF9TRVNTSU9O Wydmb28nXSA9ICJcdTI2M0EiOworCitzZXNzaW9uX3dyaXRlX2Nsb3NlKCk7CitzZXNzaW9uX3Vu c2V0KCk7CisKK3Nlc3Npb25fc3RhcnQoKTsKK3Zhcl9kdW1wKCRfU0VTU0lPTik7CisKK3Nlc3Np b25fd3JpdGVfY2xvc2UoKTsKK3Nlc3Npb25fdW5zZXQoKTsKKworZWNobyAiKioqIFRlc3Rpbmcg c2Vzc2lvbl9zZXRfc2F2ZV9oYW5kbGVyKCkgOiBmdWxsIGhhbmRsZXIgaW1wbGVtZW50YXRpb24g KioqXG4iOworCitjbGFzcyBNeVNlc3Npb24yIGV4dGVuZHMgU2Vzc2lvbkhhbmRsZXIgeworCXB1 YmxpYyBzdGF0aWMgJHBhdGg7CisKKwlwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9wZW4oJHBhdGgs ICRuYW1lKSB7CisJCWlmICghJHBhdGgpIHsKKwkJCSRwYXRoID0gJy90bXAnOworCQl9CisJCXNl bGY6OiRwYXRoID0gJHBhdGggLiAnL3Vfc2Vzc18nIC4gJG5hbWU7CisJCXJldHVybiB0cnVlOwor CX0KKworCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2xvc2UoKSB7CisJCXJldHVybiB0cnVlOwor CX0KKworCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVhZCgkaWQpIHsKKwkJcmV0dXJuIEBmaWxl X2dldF9jb250ZW50cyhzZWxmOjokcGF0aCAuICRpZCk7CisJfQorCisJcHVibGljIHN0YXRpYyBm dW5jdGlvbiB3cml0ZSgkaWQsICRkYXRhKSB7CisJCXJldHVybiBmaWxlX3B1dF9jb250ZW50cyhz ZWxmOjokcGF0aCAuICRpZCwgJGRhdGEpOworCX0KKworCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24g ZGVzdHJveSgkaWQpIHsKKwkJQHVubGluayhzZWxmOjokcGF0aCAuICRpZCk7CisJfQorCisJcHVi bGljIHN0YXRpYyBmdW5jdGlvbiBnYygkbWF4bGlmZXRpbWUpIHsKKwkJZm9yZWFjaCAoZ2xvYihz ZWxmOjokcGF0aCAuICcqJykgYXMgJGZpbGVuYW1lKSB7CisJCQlpZiAoZmlsZW10aW1lKCRmaWxl bmFtZSkgKyAkbWF4bGlmZXRpbWUgPCB0aW1lKCkpIHsKKwkJCQlAdW5saW5rKCRmaWxlbmFtZSk7 CisJCQl9CisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorfQorCitzZXNzaW9uX3NldF9zYXZlX2hh bmRsZXIoJ015U2Vzc2lvbjInKTsKK3Nlc3Npb25fc3RhcnQoKTsKKworJF9TRVNTSU9OWydmb28n XSA9ICJcdTI2M0EiOworCit2YXJfZHVtcChzZXNzaW9uX2lkKCksIGluaV9nZXQoJ3Nlc3Npb24u c2F2ZV9oYW5kbGVyJyksICRfU0VTU0lPTik7CisKK3Nlc3Npb25fd3JpdGVfY2xvc2UoKTsKK3Nl c3Npb25fdW5zZXQoKTsKKworc2Vzc2lvbl9zdGFydCgpOwordmFyX2R1bXAoJF9TRVNTSU9OKTsK Kworc2Vzc2lvbl93cml0ZV9jbG9zZSgpOworc2Vzc2lvbl91bnNldCgpOworCitlY2hvICIqKiog VGVzdGluZyBzZXNzaW9uX3NldF9zYXZlX2hhbmRsZXIoKSA6IGluaGVyaXRhbmNlICoqKlxuIjsK KworY2xhc3MgTXlTZXNzaW9uMyBleHRlbmRzIFNlc3Npb25IYW5kbGVyIHsKKwlwdWJsaWMgc3Rh dGljICRpID0gMDsKKwlwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9wZW4oJHBhdGgsICRuYW1lKSB7 CisJCSsrTXlTZXNzaW9uMzo6JGk7CisJCXJldHVybiBwYXJlbnQ6Om9wZW4oJHBhdGgsICRuYW1l KTsKKwl9CisJcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWFkKCRrZXkpIHsKKwkJKytNeVNlc3Np b24zOjokaTsKKwkJcmV0dXJuIHBhcmVudDo6cmVhZCgka2V5KTsKKwl9Cit9CisKK2NsYXNzIE15 U2Vzc2lvbjQgZXh0ZW5kcyBNeVNlc3Npb24zIHsKKwlwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHdy aXRlKCRpZCwgJGRhdGEpIHsKKwkJTXlTZXNzaW9uMzo6JGkgPSAiaGFpIjsKKwkJcmV0dXJuIHBh cmVudDo6d3JpdGUoJGlkLCAkZGF0YSk7CisJfQorfQorCitzZXNzaW9uX3NldF9zYXZlX2hhbmRs ZXIoJ015U2Vzc2lvbjMnKTsKK3Nlc3Npb25fc3RhcnQoKTsKKworJF9TRVNTSU9OWydmb28nXSA9 ICJcdTI2M0EiOworCitzZXNzaW9uX3dyaXRlX2Nsb3NlKCk7CitzZXNzaW9uX3Vuc2V0KCk7CisK K3Nlc3Npb25fc3RhcnQoKTsKKwordmFyX2R1bXAoJF9TRVNTSU9OKTsKKworc2Vzc2lvbl93cml0 ZV9jbG9zZSgpOworc2Vzc2lvbl91bnNldCgpOworCitzZXNzaW9uX3NldF9zYXZlX2hhbmRsZXIo J015U2Vzc2lvbjQnKTsKKworc2Vzc2lvbl9zdGFydCgpOworCitzZXNzaW9uX3dyaXRlX2Nsb3Nl KCk7CitzZXNzaW9uX3Vuc2V0KCk7CisKK3Zhcl9kdW1wKHNlc3Npb25faWQoKSwgJF9TRVNTSU9O LCBNeVNlc3Npb24zOjokaSk7CisKK29iX2VuZF9mbHVzaCgpOworPz4KKy0tRVhQRUNURi0tCisq KiogVGVzdGluZyBzZXNzaW9uX3NldF9zYXZlX2hhbmRsZXIoKSA6IGNsYXNzIGhhbmRsZXIgKioq CisqKiogVGVzdGluZyBzZXNzaW9uX3NldF9zYXZlX2hhbmRsZXIoKSA6IGJhc2ljIGNsYXNzIHdy YXBwaW5nIGV4aXN0aW5nIGhhbmRsZXIgKioqCitPcGVuIAorUmVhZCAleAorc3RyaW5nKDMyKSAi JXgiCit1bmljb2RlKDUpICJmaWxlcyIKK3VuaWNvZGUoNCkgInVzZXIiCitpbnQoMikKK2FycmF5 KDApIHsKK30KK09wZW4gJXgKK1JlYWQgJXgKK2FycmF5KDEpIHsKKyAgW3UiZm9vIl09PgorICB1 bmljb2RlKDEpICLimLoiCit9CisqKiogVGVzdGluZyBzZXNzaW9uX3NldF9zYXZlX2hhbmRsZXIo KSA6IGZ1bGwgaGFuZGxlciBpbXBsZW1lbnRhdGlvbiAqKioKK3N0cmluZygzMikgIiV4IgordW5p Y29kZSg0KSAidXNlciIKK2FycmF5KDEpIHsKKyAgW3UiZm9vIl09PgorICB1bmljb2RlKDEpICLi mLoiCit9CithcnJheSgxKSB7CisgIFt1ImZvbyJdPT4KKyAgdW5pY29kZSgxKSAi4pi6IgorfQor KioqIFRlc3Rpbmcgc2Vzc2lvbl9zZXRfc2F2ZV9oYW5kbGVyKCkgOiBpbmhlcml0YW5jZSAqKioK K2FycmF5KDEpIHsKKyAgW3UiZm9vIl09PgorICB1bmljb2RlKDEpICLimLoiCit9CitzdHJpbmco MzIpICIleCIKK2FycmF5KDEpIHsKKyAgW3UiZm9vIl09PgorICB1bmljb2RlKDEpICLimLoiCit9 Cit1bmljb2RlKDMpICJoYWkiCkluZGV4OiBleHQvc2Vzc2lvbi9zZXNzaW9uLmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gZXh0L3Nlc3Npb24vc2Vzc2lvbi5jCShyZXZpc2lvbiAyOTE5MjIpCisrKyBleHQvc2Vz c2lvbi9zZXNzaW9uLmMJKHdvcmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDEwIEBACiAJCVBTKGh0 dHBfc2Vzc2lvbl92YXJzKSA9IE5VTEw7CiAJfQogCS8qIERvIE5PVCBkZXN0cm95IFBTKG1vZF91 c2VyX25hbWVzKSBoZXJlISAqLwotCWlmIChQUyhtb2RfZGF0YSkpIHsKKwlpZiAoUFMobW9kX2Fj dGl2ZSkpIHsKIAkJemVuZF90cnkgewogCQkJUFMobW9kKS0+c19jbG9zZSgmUFMobW9kX2RhdGEp IFRTUk1MU19DQyk7CisJCQlQUyhtb2RfYWN0aXZlKSA9IDA7CiAJCX0gemVuZF9lbmRfdHJ5KCk7 CiAJfQogCWlmIChQUyhpZCkpIHsKQEAgLTQxMCw2ICs0MTEsOCBAQAogCQlwaHBfZXJyb3JfZG9j cmVmKE5VTEwgVFNSTUxTX0NDLCBFX0VSUk9SLCAiTm8gc3RvcmFnZSBtb2R1bGUgY2hvc2VuIC0g ZmFpbGVkIHRvIGluaXRpYWxpemUgc2Vzc2lvbiIpOwogCQlyZXR1cm47CiAJfQorCQorCVBTKG1v ZF9hY3RpdmUpID0gMTsKIAogCS8qIE9wZW4gc2Vzc2lvbiBoYW5kbGVyIGZpcnN0ICovCiAJaWYg KFBTKG1vZCktPnNfb3BlbigmUFMobW9kX2RhdGEpLCBQUyhzYXZlX3BhdGgpLCBQUyhzZXNzaW9u X25hbWUpIFRTUk1MU19DQykgPT0gRkFJTFVSRSkgewpAQCAtNDUxLDcgKzQ1NCw3IEBACiAKIAlJ Rl9TRVNTSU9OX1ZBUlMoKSB7CiAKLQkJaWYgKFBTKG1vZF9kYXRhKSkgeworCQlpZiAoUFMobW9k X2FjdGl2ZSkpIHsKIAkJCWNoYXIgKnZhbDsKIAkJCWludCB2YWxsZW47CiAKQEAgLTQ3Myw4ICs0 NzYsOSBAQAogCQl9CiAJfQogCi0JaWYgKFBTKG1vZF9kYXRhKSkgeworCWlmIChQUyhtb2RfYWN0 aXZlKSkgewogCQlQUyhtb2QpLT5zX2Nsb3NlKCZQUyhtb2RfZGF0YSkgVFNSTUxTX0NDKTsKKwkJ UFMobW9kX2FjdGl2ZSkgPSAwOwogCX0KIH0KIC8qIH19fSAqLwpAQCAtNTA1LDYgKzUwOSwxNSBA QAogCQl9CiAJCXJldHVybiBGQUlMVVJFOwogCX0KKworCWlmICh0bXAgPT0gJnBzX21vZF91c2Vy ICYmICFQUyhtb2RfYWN0aXZlKSkgeworCQlpZiAoc3RhZ2UgIT0gWkVORF9JTklfU1RBR0VfREVB Q1RJVkFURSkgeworCQkJcGhwX2Vycm9yX2RvY3JlZihOVUxMIFRTUk1MU19DQywgRV9FUlJPUiwg IlVzZXIgc2Vzc2lvbiBoYW5kbGVyIHNlbGVjdGVkIGJ1dCBub3QgaW1wbGVtZW50ZWQiKTsKKwkJ fQorCQlyZXR1cm4gRkFJTFVSRTsKKwl9CisKKwlQUyhkZWZhdWx0X21vZCkgPSBQUyhtb2QpOwog CVBTKG1vZCkgPSB0bXA7CiAKIAlyZXR1cm4gU1VDQ0VTUzsKQEAgLTEzODEsNyArMTM5NCw3IEBA CiAKIAlwaHBfc2Vzc2lvbl9jYWNoZV9saW1pdGVyKFRTUk1MU19DKTsKIAotCWlmIChQUyhtb2Rf ZGF0YSkgJiYgUFMoZ2NfcHJvYmFiaWxpdHkpID4gMCkgeworCWlmIChQUyhtb2RfYWN0aXZlKSAm JiBQUyhnY19wcm9iYWJpbGl0eSkgPiAwKSB7CiAJCWludCBucmRlbHMgPSAtMTsKIAogCQlucmFu ZCA9IChpbnQpICgoZmxvYXQpIFBTKGdjX2Rpdmlzb3IpICogcGhwX2NvbWJpbmVkX2xjZyhUU1JN TFNfQykpOwpAQCAtMTUxNiw4ICsxNTI5LDkgQEAKIAkJCXp2YWxfZHRvcihyZXR1cm5fdmFsdWUp OwogCQkJUkVUVVJOX0ZBTFNFOwogCQl9Ci0JCWlmIChQUyhtb2RfZGF0YSkpIHsKKwkJaWYgKFBT KG1vZF9hY3RpdmUpKSB7CiAJCQlQUyhtb2QpLT5zX2Nsb3NlKCZQUyhtb2RfZGF0YSkgVFNSTUxT X0NDKTsKKwkJCVBTKG1vZF9hY3RpdmUpID0gMDsKIAkJfQogCQlQUyhtb2RfZGF0YSkgPSBOVUxM OwogCkBAIC0xNTI2LDYgKzE1NDAsMTkgQEAKIH0KIC8qIH19fSAqLwogCisjZGVmaW5lIFBTX01F VEhPRF9DQUxMQkFDSyh4KQkJCQkJCQlcCisJY2FsbGJhY2sgPSBQUyhtb2RfdXNlcl9uYW1lcyku bmFtZS5wc18jI3g7CQkJXAorCWlmIChjYWxsYmFjayAhPSBOVUxMKSB7CQkJCQkJCQlcCisJCXp2 YWxfcHRyX2R0b3IoJmNhbGxiYWNrKTsJCQkJCQlcCisJCWNhbGxiYWNrID0gTlVMTDsJCQkJCQkJ CVwKKwl9CQkJCQkJCQkJCQkJCVwKKwlNQUtFX1NURF9aVkFMKGNhbGxiYWNrKTsJCQkJCQkJXAor CWFycmF5X2luaXQoY2FsbGJhY2spOwkJCQkJCQkJXAorCXp2YWxfYWRkX3JlZihjbGFzcyk7CQkJ CQkJCQlcCisJYWRkX25leHRfaW5kZXhfenZhbChjYWxsYmFjaywgKmNsYXNzKTsJCQkJXAorCWFk ZF9uZXh0X2luZGV4X3N0cmluZyhjYWxsYmFjaywgI3gsIDEpOwkJCQlcCisJUFMobW9kX3VzZXJf bmFtZXMpLm5hbWUucHNfIyN4ID0gY2FsbGJhY2s7CisKIC8qIHt7eyBwcm90byB2b2lkIHNlc3Np b25fc2V0X3NhdmVfaGFuZGxlcihzdHJpbmcgb3Blbiwgc3RyaW5nIGNsb3NlLCBzdHJpbmcgcmVh ZCwgc3RyaW5nIHdyaXRlLCBzdHJpbmcgZGVzdHJveSwgc3RyaW5nIGdjKSBVCiAgICBTZXRzIHVz ZXItbGV2ZWwgZnVuY3Rpb25zICovCiBzdGF0aWMgUEhQX0ZVTkNUSU9OKHNlc3Npb25fc2V0X3Nh dmVfaGFuZGxlcikKQEAgLTE1MzQsMTQgKzE1NjEsNjMgQEAKIAlpbnQgaSwgbnVtX2FyZ3MsIGFy Z2MgPSBaRU5EX05VTV9BUkdTKCk7CiAJenZhbCBuYW1lOwogCi0JaWYgKFBTKHNlc3Npb25fc3Rh dHVzKSAhPSBwaHBfc2Vzc2lvbl9ub25lKSB7CisJaWYgKFBTKHNlc3Npb25fc3RhdHVzKSAhPSBw aHBfc2Vzc2lvbl9ub25lICYmIGFyZ2MgIT0gMSkgewogCQlSRVRVUk5fRkFMU0U7CiAJfQogCi0J aWYgKGFyZ2MgIT0gNikgeworCWlmIChhcmdjICE9IDEgJiYgYXJnYyAhPSA2KSB7CiAJCVdST05H X1BBUkFNX0NPVU5UOwogCX0KIAorCWlmIChhcmdjID09IDEpIHsKKwkJenZhbCAqKmNsYXNzLCAq Y2FsbGJhY2s7CisJCXplbmRfY2xhc3NfZW50cnkgKipwY2UsICpjZSA9IE5VTEw7CisKKwkJaWYg KHplbmRfcGFyc2VfcGFyYW1ldGVycyhaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCAiWiIsICZj bGFzcykgPT0gRkFJTFVSRSkgeworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKFpfVFlQRV9QUChj bGFzcykgPT0gSVNfU1RSSU5HIHx8IFpfVFlQRV9QUChjbGFzcykgPT0gSVNfVU5JQ09ERSkgewor CQkJaWYgKHplbmRfdV9sb29rdXBfY2xhc3MoWl9UWVBFX1BQKGNsYXNzKSwgWl9VTklWQUxfUFAo Y2xhc3MpLCBaX1VOSUxFTl9QUChjbGFzcyksICZwY2UgVFNSTUxTX0NDKSA9PSBGQUlMVVJFKSB7 CisJCQkJcGhwX2Vycm9yX2RvY3JlZihOVUxMIFRTUk1MU19DQywgRV9FUlJPUiwgIlNlc3Npb24g aGFuZGxlciBjbGFzcyAnJVonIG5vdCBmb3VuZCIsICpjbGFzcyk7CisJCQkJUkVUVVJOX0ZBTFNF OworCQkJfQorCisJCQljZSA9ICpwY2U7CisJCX0gZWxzZSBpZiAoWl9UWVBFX1BQKGNsYXNzKSA9 PSBJU19PQkpFQ1QpIHsKKwkJCWNlID0gWl9PQkpDRV9QUChjbGFzcyk7CisJCX0gZWxzZSB7CisJ CQlwaHBfZXJyb3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX0VSUk9SLCAiU2Vzc2lvbiBoYW5k bGVyIG11c3QgYmUgYW4gb2JqZWN0IG9yIGNsYXNzIGRlc2NlbmRlZCBmcm9tICVzIiwgUFNfQ0xB U1NfTkFNRSk7CisJCQlSRVRVUk5fRkFMU0U7CisJCX0KKworCQl3aGlsZSAoY2UtPnBhcmVudCkg eworCQkJY2UgPSBjZS0+cGFyZW50OworCQl9CisKKwkJaWYgKGNlICE9IHBocF9zZXNzaW9uX2Ns YXNzX2VudHJ5KSB7CisJCQlwaHBfZXJyb3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX0VSUk9S LCAiVGhlIHNlc3Npb24gaGFuZGxlciBjbGFzcyBtdXN0IGRlc2NlbmQgZnJvbSAlcyIsIFBTX0NM QVNTX05BTUUpOworCQkJUkVUVVJOX0ZBTFNFOworCQl9CisJCQorCQlQU19NRVRIT0RfQ0FMTEJB Q0sob3Blbik7CisJCVBTX01FVEhPRF9DQUxMQkFDSyhjbG9zZSk7CisJCVBTX01FVEhPRF9DQUxM QkFDSyhyZWFkKTsKKwkJUFNfTUVUSE9EX0NBTExCQUNLKHdyaXRlKTsKKwkJUFNfTUVUSE9EX0NB TExCQUNLKGRlc3Ryb3kpOworCQlQU19NRVRIT0RfQ0FMTEJBQ0soZ2MpOworCisJCWlmIChQUyht b2QpICYmIFBTKHNlc3Npb25fc3RhdHVzKSA9PSBwaHBfc2Vzc2lvbl9ub25lICYmIFBTKG1vZCkg IT0gJnBzX21vZF91c2VyKSB7CisJCQlQUyhkZWZhdWx0X21vZCkgPSBQUyhtb2QpOworCQkJUFMo bW9kX2FjdGl2ZSkgPSAxOworCQkJemVuZF9hbHRlcl9pbmlfZW50cnkoInNlc3Npb24uc2F2ZV9o YW5kbGVyIiwgc2l6ZW9mKCJzZXNzaW9uLnNhdmVfaGFuZGxlciIpLCAidXNlciIsIHNpemVvZigi dXNlciIpLTEsIFBIUF9JTklfVVNFUiwgUEhQX0lOSV9TVEFHRV9SVU5USU1FKTsKKwkJfSBlbHNl IHsKKwkJCVBTKG1vZF9hY3RpdmUpID0gMTsKKwkJfQorCisJCVJFVFVSTl9UUlVFOworCX0KKwog CWlmICh6ZW5kX3BhcnNlX3BhcmFtZXRlcnMoYXJnYyBUU1JNTFNfQ0MsICIrIiwgJmFyZ3MsICZu dW1fYXJncykgPT0gRkFJTFVSRSkgewogCQlyZXR1cm47CiAJfQpAQCAtMTU1NSw3ICsxNjMxLDgg QEAKIAkJfQogCQl6dmFsX2R0b3IoJm5hbWUpOwogCX0KLQorCQorCVBTKG1vZF9hY3RpdmUpID0g MTsKIAl6ZW5kX2FsdGVyX2luaV9lbnRyeSgic2Vzc2lvbi5zYXZlX2hhbmRsZXIiLCBzaXplb2Yo InNlc3Npb24uc2F2ZV9oYW5kbGVyIiksICJ1c2VyIiwgc2l6ZW9mKCJ1c2VyIiktMSwgUEhQX0lO SV9VU0VSLCBQSFBfSU5JX1NUQUdFX1JVTlRJTUUpOwogCiAJZm9yIChpID0gMDsgaSA8IDY7IGkr KykgewpAQCAtMTg4OCw2ICsxOTY1LDMxIEBACiAJWkVORF9BUkdfSU5GTygwLCBzZWN1cmUpCiAJ WkVORF9BUkdfSU5GTygwLCBodHRwb25seSkKIFpFTkRfRU5EX0FSR19JTkZPKCkKKworWkVORF9C RUdJTl9BUkdfSU5GTyhhcmdpbmZvX3Nlc3Npb25fY2xhc3Nfb3BlbiwgMCkKKwlaRU5EX0FSR19J TkZPKDAsIHNhdmVfcGF0aCkKKwlaRU5EX0FSR19JTkZPKDAsIHNlc3Npb25fbmFtZSkKK1pFTkRf RU5EX0FSR19JTkZPKCkKKworWkVORF9CRUdJTl9BUkdfSU5GTyhhcmdpbmZvX3Nlc3Npb25fY2xh c3NfY2xvc2UsIDApCitaRU5EX0VORF9BUkdfSU5GTygpCisKK1pFTkRfQkVHSU5fQVJHX0lORk8o YXJnaW5mb19zZXNzaW9uX2NsYXNzX3JlYWQsIDApCisJWkVORF9BUkdfSU5GTygwLCBrZXkpCita RU5EX0VORF9BUkdfSU5GTygpCisKK1pFTkRfQkVHSU5fQVJHX0lORk8oYXJnaW5mb19zZXNzaW9u X2NsYXNzX3dyaXRlLCAwKQorCVpFTkRfQVJHX0lORk8oMCwga2V5KQorCVpFTkRfQVJHX0lORk8o MCwgdmFsKQorWkVORF9FTkRfQVJHX0lORk8oKQorCitaRU5EX0JFR0lOX0FSR19JTkZPKGFyZ2lu Zm9fc2Vzc2lvbl9jbGFzc19kZXN0cm95LCAwKQorCVpFTkRfQVJHX0lORk8oMCwga2V5KQorWkVO RF9FTkRfQVJHX0lORk8oKQorCitaRU5EX0JFR0lOX0FSR19JTkZPKGFyZ2luZm9fc2Vzc2lvbl9j bGFzc19nYywgMCkKKwlaRU5EX0FSR19JTkZPKDAsIG1heGxpZmV0aW1lKQorWkVORF9FTkRfQVJH X0lORk8oKQogLyogfX19ICovCiAKIC8qIHt7eyBzZXNzaW9uX2Z1bmN0aW9uc1tdCkBAIC0xOTE0 LDYgKzIwMTYsMjIgQEAKIH07CiAvKiB9fX0gKi8KIAorLyogc2Vzc2lvbiBjbGFzcyAqLworemVu ZF9jbGFzc19lbnRyeSAqcGhwX3Nlc3Npb25fY2xhc3NfZW50cnk7CisKKy8qIHt7eyBzZXNzaW9u IGNsYXNzIGZ1bmN0aW9uc1tdCisgKi8KK3N0YXRpYyBjb25zdCB6ZW5kX2Z1bmN0aW9uX2VudHJ5 IHBocF9zZXNzaW9uX2NsYXNzX2Z1bmN0aW9uc1tdID0geworCVBIUF9NRShTZXNzaW9uSGFuZGxl ciwgb3BlbiwgYXJnaW5mb19zZXNzaW9uX2NsYXNzX29wZW4sIFpFTkRfQUNDX1BVQkxJQyB8IFpF TkRfQUNDX1NUQVRJQykKKwlQSFBfTUUoU2Vzc2lvbkhhbmRsZXIsIGNsb3NlLCBhcmdpbmZvX3Nl c3Npb25fY2xhc3NfY2xvc2UsIFpFTkRfQUNDX1BVQkxJQyB8IFpFTkRfQUNDX1NUQVRJQykKKwlQ SFBfTUUoU2Vzc2lvbkhhbmRsZXIsIHJlYWQsIGFyZ2luZm9fc2Vzc2lvbl9jbGFzc19yZWFkLCBa RU5EX0FDQ19QVUJMSUMgfCBaRU5EX0FDQ19TVEFUSUMpCisJUEhQX01FKFNlc3Npb25IYW5kbGVy LCB3cml0ZSwgYXJnaW5mb19zZXNzaW9uX2NsYXNzX3dyaXRlLCBaRU5EX0FDQ19QVUJMSUMgfCBa RU5EX0FDQ19TVEFUSUMpCisJUEhQX01FKFNlc3Npb25IYW5kbGVyLCBkZXN0cm95LCBhcmdpbmZv X3Nlc3Npb25fY2xhc3NfZGVzdHJveSwgWkVORF9BQ0NfUFVCTElDIHwgWkVORF9BQ0NfU1RBVElD KQorCVBIUF9NRShTZXNzaW9uSGFuZGxlciwgZ2MsIGFyZ2luZm9fc2Vzc2lvbl9jbGFzc19nYywg WkVORF9BQ0NfUFVCTElDIHwgWkVORF9BQ0NfU1RBVElDKQorCXsgTlVMTCwgTlVMTCwgTlVMTCB9 Cit9OworLyogfX19ICovCisKIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAg ICAqIE1vZHVsZSBTZXR1cCBhbmQgRGVzdHJ1Y3Rpb24gKgogICAgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogKi8KQEAgLTE5ODksMTUgKzIxMDcsMTkgQEAKIAlwc19nbG9iYWxzLT5z ZXJpYWxpemVyID0gTlVMTDsKIAlwc19nbG9iYWxzLT5tb2RfZGF0YSA9IE5VTEw7CiAJcHNfZ2xv YmFscy0+c2Vzc2lvbl9zdGF0dXMgPSBwaHBfc2Vzc2lvbl9ub25lOworCXBzX2dsb2JhbHMtPm1v ZF9hY3RpdmUgPSAwOwogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKIAkJcHNfZ2xvYmFscy0+ bW9kX3VzZXJfbmFtZXMubmFtZXNbaV0gPSBOVUxMOwogCX0KKwogCXBzX2dsb2JhbHMtPmh0dHBf c2Vzc2lvbl92YXJzID0gTlVMTDsKIH0KIC8qIH19fSAqLwogCiBzdGF0aWMgUEhQX01JTklUX0ZV TkNUSU9OKHNlc3Npb24pIC8qIHt7eyAqLwogeworCXplbmRfY2xhc3NfZW50cnkgY2U7CisKIAl6 ZW5kX3JlZ2lzdGVyX2F1dG9fZ2xvYmFsKCJfU0VTU0lPTiIsIHNpemVvZigiX1NFU1NJT04iKS0x LCBOVUxMIFRTUk1MU19DQyk7CiAKIAlQUyhtb2R1bGVfbnVtYmVyKSA9IG1vZHVsZV9udW1iZXI7 IC8qIGlmIHdlIHJlYWxseSBuZWVkIHRoaXMgdmFyIHdlIG5lZWQgdG8gaW5pdCBpdCBpbiB6dHMg bW9kZSBhcyB3ZWxsISAqLwpAQCAtMjAxMCw2ICsyMTMyLDEwIEBACiAjZW5kaWYKIAlwaHBfc2Vz c2lvbl9yZmMxODY3X29yaWdfY2FsbGJhY2sgPSBwaHBfcmZjMTg2N19jYWxsYmFjazsKIAlwaHBf cmZjMTg2N19jYWxsYmFjayA9IHBocF9zZXNzaW9uX3JmYzE4NjdfY2FsbGJhY2s7CisKKwlJTklU X0NMQVNTX0VOVFJZKGNlLCBQU19DTEFTU19OQU1FLCBwaHBfc2Vzc2lvbl9jbGFzc19mdW5jdGlv bnMpOworCXBocF9zZXNzaW9uX2NsYXNzX2VudHJ5ID0gemVuZF9yZWdpc3Rlcl9pbnRlcm5hbF9j bGFzcygmY2UgVFNSTUxTX0NDKTsKKwogCXJldHVybiBTVUNDRVNTOwogfQogLyogfX19ICovCg== --001636c5a7c708d954047a53cd2f--