From mboxrd@z Thu Jan 1 00:00:00 1970 From: ville.syrjala@linux.intel.com Subject: [PATCH 1/4] drm: Add helper for DP++ adaptors Date: Tue, 23 Feb 2016 18:46:25 +0200 Message-ID: <1456245988-19442-2-git-send-email-ville.syrjala@linux.intel.com> References: <1456245988-19442-1-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1456245988-19442-1-git-send-email-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCkFk ZCBhIGhlbHBlciB3aGljaCBhaWRzIGluIGhlIGlkZW50aWZpY2F0aW9uIG9mIERQIGR1YWwgbW9k ZSAoYWthLiBEUCsrKQphZGFwdG9ycy4gVGhlcmUgYXJlIHNldmVyYWwgdHlwZXMgb2YgYWRhcHRv cnMgc3BlY2lmaWVkOgp0eXBlIDEgRFZJLCB0eXBlIDEgSERNSSwgdHlwZSAyIERWSSwgdHlwZSAy IEhETUkKClR5cGUgMSBhZGFwdG9ycyBoYXZlIGEgbWF4IFRNRFMgY2xvY2sgbGltaXQgb2YgMTY1 TUh6LCB0eXBlIDIgYWRhcHRvcnMKbWF5IGdvIGFzIGhpZ2ggYXMgMzAwTUh6IGFuZCB0aGV5IHBy b3ZpZGUgYSByZWdpc3RlciBpbmZvcm1pbmcgdGhlCnNvdXJjZSBkZXZpY2Ugd2hhdCB0aGUgYWN0 dWFsIGxpbWl0IGlzLiBTdXBwb3NlZGx5IGFsc28gdHlwZSAxIGFkYXB0b3JzCm1heSBvcHRpb25h bGx5IGltcGxlbWVudCB0aGlzIHJlZ2lzdGVyLiBUaGlzIFRNRFMgY2xvY2sgbGltaXQgaXMgdGhl Cm1haW4gcmVhc29uIHdoeSB3ZSBuZWVkIHRvIGlkZW50aWZ5IHRoZXNlIGFkYXB0b3JzLgoKVHlw ZSAxIGFkYXB0b3JzIHByb3ZpZGUgYWNjZXNzIHRvIHRoZWlyIGludGVybmFsIHJlZ2lzdGVycyBh bmQgdGhlIHNpbmsKRERDIGJ1cyB0aHJvdWdoIEkyQy4gVHlwZSAyIGFkYXB0b3JzIHByb3ZpZGUg dGhpcyBhY2Nlc3MgYm90aCB2aWEgSTJDCmFuZCBJMkMtb3Zlci1BVVguIEEgdHlwZSAyIHNvdXJj ZSBkZXZpY2UgbWF5IGNob29zZSB0byBpbXBsZW1lbnQgZWl0aGVyCm9yIGJvdGggb2YgdGhlc2Ug bWV0aG9kcy4gSWYgYSBzb3VyY2UgZGV2aWNlIGltcGxlbWVudHMgb25seSB0aGUKSTJDLW92ZXIt QVVYIG1ldGhvZCwgdGhlbiB0aGUgZHJpdmVyIHdpbGwgb2J2aW91c2x5IG5lZWQgc3BlY2lmaWMK c3VwcG9ydCBmb3Igc3VjaCBhZGFwdG9ycyBzaW5jZSB0aGUgcG9ydCBpcyBkcml2ZW4gbGlrZSBh biBIRE1JIHBvcnQsCmJ1dCBEREMgY29tbXVuaWNhdGlvbiBoYXBwZXMgb3ZlciB0aGUgQVVYIGNo YW5uZWwuCgpUaGlzIGhlbHBlciBzaG91bGQgYmUgZW5vdWdoIHRvIGlkZW50aWZ5IHRoZSBhZGFw dG9yIHR5cGUgKHNvbWUKdHlwZSAxIERWSSBhZGFwdG9ycyBtYXkgYmUgYSBzbGlnaHQgZXhjZXB0 aW9uKSBhbmQgdGhlIG1heGltdW0gVE1EUwpjbG9jayBsaW1pdC4gQW5vdGhlciBmZWF0dXJlIHRo YXQgbWF5IGJlIGF2YWlsYWJsZSBpcyBjb250cm9sIG92ZXIKdGhlIFRNRFMgb3V0cHV0IGJ1ZmZl cnMgb24gdGhlIGFkYXB0b3IsIHBvc3NpYmx5IGFsbG93aW5nIGZvciBzb21lCnBvd2VyIHNhdmlu ZyB3aGVuIHRoZSBUTURTIGxpbmsgaXMgZG93bi4KCk90aGVyIHVzZXIgY29udHJvbGxhYmxlIGZl YXR1cmVzIHRoYXQgbWF5IGJlIGF2YWlsYWJsZSBpbiB0aGUgYWRhcHRvcnMKYXJlIGRvd25zdHJl YW0gaTJjIGJ1cyBzcGVlZCBjb250cm9sIHdoZW4gdXNpbmcgaTJjLW92ZXItYXV4LCBhbmQKc29t ZSBjb250cm9sIG92ZXIgdGhlIENFQyBwaW4uIEkgY2hvc2Ugbm90IHRvIHByb3ZpZGUgYW55IGhl bHBlcgpmdW5jdGlvbnMgZm9yIHRob3NlIHNpbmNlIEkgaGF2ZSBubyB1c2UgZm9yIHRoZW0gaW4g aTkxNSBhdCB0aGlzIHRpbWUuClRoZSByZXN0IG9mIHRoZSByZWdpc3RlcnMgaW4gdGhlIGFkYXB0 b3IgYXJlIG1vc3RseSBqdXN0IGluZm9ybWF0aW9uLAplZy4gSUVFRSBPVUksIGhhcmR3YXJlIGFu ZCBmaXJtd2FyZSByZXZpc2lvbiwgZXRjLgoKU2lnbmVkLW9mZi1ieTogVmlsbGUgU3lyasOkbMOk IDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vTWFr ZWZpbGUgICAgICAgICAgICAgICAgICB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL2RybV9kcF9k dWFsX21vZGVfaGVscGVyLmMgfCAzMjggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBp bmNsdWRlL2RybS9kcm1fZHBfZHVhbF9tb2RlX2hlbHBlci5oICAgICB8ICA4MCArKysrKysrKwog MyBmaWxlcyBjaGFuZ2VkLCA0MDkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfZHVhbF9tb2RlX2hlbHBlci5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vZHJtX2RwX2R1YWxfbW9kZV9oZWxwZXIuaAoK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9N YWtlZmlsZQppbmRleCA2ZWI5NGZjNTYxZGMuLjIyMjI4ZWY1MGYzNiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAt MjMsNyArMjMsNyBAQCBkcm0tJChDT05GSUdfQUdQKSArPSBkcm1fYWdwc3VwcG9ydC5vCiAKIGRy bV9rbXNfaGVscGVyLXkgOj0gZHJtX2NydGNfaGVscGVyLm8gZHJtX2RwX2hlbHBlci5vIGRybV9w cm9iZV9oZWxwZXIubyBcCiAJCWRybV9wbGFuZV9oZWxwZXIubyBkcm1fZHBfbXN0X3RvcG9sb2d5 Lm8gZHJtX2F0b21pY19oZWxwZXIubyBcCi0JCWRybV9rbXNfaGVscGVyX2NvbW1vbi5vCisJCWRy bV9rbXNfaGVscGVyX2NvbW1vbi5vIGRybV9kcF9kdWFsX21vZGVfaGVscGVyLm8KIAogZHJtX2tt c19oZWxwZXItJChDT05GSUdfRFJNX0xPQURfRURJRF9GSVJNV0FSRSkgKz0gZHJtX2VkaWRfbG9h ZC5vCiBkcm1fa21zX2hlbHBlci0kKENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKSArPSBkcm1f ZmJfaGVscGVyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfZHVhbF9tb2Rl X2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9kdWFsX21vZGVfaGVscGVyLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iZmU1MTFjMDk1NjgKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2R1YWxfbW9kZV9oZWxwZXIuYwpA QCAtMCwwICsxLDMyOCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0 aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQg YXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBk ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91 dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwg cHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBv ZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29m dHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt aXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJ R0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5H UyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5j bHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8 bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGRybS9k cm1fZHBfZHVhbF9tb2RlX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisKKy8qKgor ICogRE9DOiBEUCBkdWFsIG1vZGUgKGFrYS4gRFArKykgYWRhcHRvciBoZWxwZXJzCisgKgorICog SGVscGVyIGZ1bmN0aW9ucyB0byBkZWFsIHdpdGggRFAgZHVhbCBtb2RlIGFkYXB0b3JzLgorICoK KyAqIFR5cGUgMToKKyAqIEFkYXB0b3IgcmVnaXN0ZXJzIChpZiBhbnkpIGFuZCB0aGUgc2luayBE REMgYnVzIG1heSBiZSBhY2Nlc3NlZCB2aWEgSTJDLgorICoKKyAqIFR5cGUgMjoKKyAqIEFkYXB0 b3IgcmVnaXN0ZXJzIGFuZCBzaW5rIEREQyBidXMgY2FuIGJlIGFjY2Vzc2VkIGVpdGhlciB2aWEg STJDIG9yCisgKiBJMkMtb3Zlci1BVVguIFNvdXJjZSBkZXZpY2VzIG1heSBjaG9vc2UgdG8gaW1w bGVtZW50IGVpdGhlciBvbmUgb3IKKyAqIGJvdGggb2YgdGhlc2UgYWNjZXNzIG1ldGhvZHMuCisg Ki8KKworI2RlZmluZSBEUF9EVUFMX01PREVfU0xBVkVfQUREUkVTUyAweDQwCisKKy8qKgorICog ZHJtX2RwX2R1YWxfbW9kZV9yZWFkIC0gUmVhZCBmcm9tIHRoZSBEUCBkdWFsIG1vZGUgYWRhcHRv ciByZWdpc3RlcihzKQorICogYWRhcHRlcjogSTJDIGFkYXB0ZXIgZm9yIHRoZSBEREMgYnVzCisg KiBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldAorICogYnVmZmVyOiBidWZmZXIgZm9yIHJldHVybiBk YXRhCisgKiBzaXplOiBzaXpvIG9mIHRoZSBidWZmZXIKKyAqCisgKiBSZWFkcyBAc2l6ZSBieXRl cyBmcm9tIHRoZSBEUCBkdWFsIG1vZGUgYWRhcHRvciByZWdpc3RlcnMKKyAqIHN0YXJ0aW5nIGF0 IEBvZmZzZXQuCisgKgorICogUmV0dXJuczoKKyAqIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJy b3IgY29kZSBvbiBmYWlsdXJlCisgKi8KK3NzaXplX3QgZHJtX2RwX2R1YWxfbW9kZV9yZWFkKHN0 cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgIHU4IG9mZnNldCwgdm9pZCAqYnVm ZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7CisJCXsKKwkJ CS5hZGRyID0gRFBfRFVBTF9NT0RFX1NMQVZFX0FERFJFU1MsCisJCQkuZmxhZ3MgPSAwLAorCQkJ LmxlbiA9IDEsCisJCQkuYnVmID0gJm9mZnNldCwKKwkJfSwKKwkJeworCQkJLmFkZHIgPSBEUF9E VUFMX01PREVfU0xBVkVfQUREUkVTUywKKwkJCS5mbGFncyA9IEkyQ19NX1JELAorCQkJLmxlbiA9 IHNpemUsCisJCQkuYnVmID0gYnVmZmVyLAorCQl9LAorCX07CisJaW50IHJldDsKKworCXJldCA9 IGkyY190cmFuc2ZlcihhZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKKwlpZiAocmV0 IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocmV0ICE9IEFSUkFZX1NJWkUobXNncykpCisJCXJl dHVybiAtRVBST1RPOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZHJtX2RwX2R1YWxfbW9k ZV93cml0ZSAtIFdyaXRlIHRvIHRoZSBEUCBkdWFsIG1vZGUgYWRhcHRvciByZWdpc3RlcihzKQor ICogYWRhcHRlcjogSTJDIGFkYXB0ZXIgZm9yIHRoZSBEREMgYnVzCisgKiBvZmZzZXQ6IHJlZ2lz dGVyIG9mZnNldAorICogYnVmZmVyOiBidWZmZXIgZm9yIHdyaXRlIGRhdGEKKyAqIHNpemU6IHNp em8gb2YgdGhlIGJ1ZmZlcgorICoKKyAqIFdyaXRlcyBAc2l6ZSBieXRlcyB0byB0aGUgRFAgZHVh bCBtb2RlIGFkYXB0b3IgcmVnaXN0ZXJzCisgKiBzdGFydGluZyBhdCBAb2Zmc2V0LgorICoKKyAq IFJldHVybnM6CisgKiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVy ZQorICovCitzc2l6ZV90IGRybV9kcF9kdWFsX21vZGVfd3JpdGUoc3RydWN0IGkyY19hZGFwdGVy ICphZGFwdGVyLAorCQkJICAgICAgIHU4IG9mZnNldCwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXpl X3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gRFBfRFVBTF9N T0RFX1NMQVZFX0FERFJFU1MsCisJCS5mbGFncyA9IDAsCisJCS5sZW4gPSAxICsgc2l6ZSwKKwkJ LmJ1ZiA9IE5VTEwsCisJfTsKKwl2b2lkICpkYXRhOworCWludCByZXQ7CisKKwlkYXRhID0ga21h bGxvYyhtc2cubGVuLCBHRlBfVEVNUE9SQVJZKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5P TUVNOworCisJbXNnLmJ1ZiA9IGRhdGE7CisKKwltZW1jcHkoZGF0YSwgJm9mZnNldCwgMSk7CisJ bWVtY3B5KGRhdGEgKyAxLCBidWZmZXIsIHNpemUpOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKGFk YXB0ZXIsICZtc2csIDEpOworCisJa2ZyZWUoZGF0YSk7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0 dXJuIHJldDsKKwlpZiAocmV0ICE9IDEpCisJCXJldHVybiAtRVBST1RPOworCisJcmV0dXJuIDA7 Cit9CitFWFBPUlRfU1lNQk9MKGRybV9kcF9kdWFsX21vZGVfd3JpdGUpOworCitzdGF0aWMgYm9v bCBpc19oZG1pX2FkYXB0b3IoY29uc3QgY2hhciBoZG1pX2lkW0RQX0RVQUxfTU9ERV9IRE1JX0lE X0xFTl0pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgZHBfZHVhbF9tb2RlX2hkbWlfaWRbRFBfRFVB TF9NT0RFX0hETUlfSURfTEVOXSA9CisJCSJEUC1IRE1JIEFEQVBUT1JceDA0IjsKKworCXJldHVy biBtZW1jbXAoaGRtaV9pZCwgZHBfZHVhbF9tb2RlX2hkbWlfaWQsCisJCSAgICAgIHNpemVvZihk cF9kdWFsX21vZGVfaGRtaV9pZCkpID09IDA7Cit9CisKKy8qKgorICogZHJtX2RwX2R1YWxfbW9k ZV9kZXRlY3QgLSBJZGVudHlmeSB0aGUgRFAgZHVhbCBtb2RlIGFkYXB0b3IKKyAqIGFkYXB0ZXI6 IEkyQyBhZGFwdGVyIGZvciB0aGUgRERDIGJ1cworICoKKyAqIEF0dGVtcHQgdG8gaWRlbnRpZnkg dGhlIHR5cGUgb2YgdGhlIERQIGR1YWwgbW9kZSBhZGFwdG9yIHVzZWQuCisgKgorICogTm90ZSB0 aGF0IHdoZW4gdGhlIGFuc3dlciBpcyBARFJNX0RQX0RVQUxfTU9ERV9OT05FIGl0J3Mgbm90Cisg KiBjZXJ0YWluIHdoZXRoZXIgd2UncmUgZGVhbGluZyB3aXRoIGEgbmF0aXZlIEhETUkgcG9ydCBv cgorICogYSB0eXBlIDEgRFZJIGR1YWwgbW9kZSBhZGFwdG9yLiBUaGUgZHJpdmVyIHdpbGwgaGF2 ZSB0byB1c2UKKyAqIHNvbWUgb3RoZXIgaGFyZHdhcmUvZHJpdmVyIHNwZWNpZmljIG1lY2hhbmlz bSB0byBtYWtlIHRoYXQKKyAqIGRpc3RpbmN0aW9uLgorICoKKyAqIFJldHVybnM6CisgKiBUaGUg dHlwZSBvZiB0aGUgRFAgZHVhbCBtb2RlIGFkYXB0b3IgdXNlZAorICovCitlbnVtIGRybV9kcF9k dWFsX21vZGVfdHlwZSBkcm1fZHBfZHVhbF9tb2RlX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIg KmFkYXB0ZXIpCit7CisJY2hhciBoZG1pX2lkW0RQX0RVQUxfTU9ERV9IRE1JX0lEX0xFTl0gPSB7 fTsKKwl1aW50OF90IGFkYXB0b3JfaWQgPSAweDAwOworCXNzaXplX3QgcmV0OworCisJLyoKKwkg KiBMZXQncyBzZWUgaWYgdGhlIGFkYXB0b3IgaXMgdGhlcmUgdGhlIGJ5IHJlYWRpbmcgdGhlCisJ ICogSERNSSBJRCByZWdpc3RlcnMuCisJICoKKwkgKiBOb3RlIHRoYXQgdHlwZSAxIERWSSBhZGFw dG9ycyBhcmUgbm90IHJlcXVpcmVkIHRvIGltcGxlbW50CisJICogYW55IHJlZ2lzdGVycywgYW5k IHRoYXQgcHJlc2VudHMgYSBwcm9ibGVtIGZvciBkZXRlY3Rpb24uCisJICogSWYgdGhlIGkyYyB0 cmFuc2ZlciBpcyBuYWNrZWQsIHdlIG1heSBvciBtYXkgbm90IGJlIGRlYWxpbmcKKwkgKiB3aXRo IGEgdHlwZSAxIERWSSBhZGFwdG9yLiBTb21lIG90aGVyIG1lY2hhbmlzbSBvZiBkZXRlY3RpbmcK KwkgKiB0aGUgcHJlc2VuY2Ugb2YgdGhlIGFkYXB0b3IgaXMgcmVxdWlyZWQuIE9uZSB3YXkgd291 bGQgYmUKKwkgKiB0byBjaGVjayB0aGUgc3RhdGUgb2YgdGhlIENPTkZJRzEgcGluLCBBbm90aGVy IG1ldGhvZCB3b3VsZAorCSAqIHNpbXBseSByZXF1aXJlIHRoZSBkcml2ZXIgdG8ga25vdyB3aGV0 aGVyIHRoZSBwb3J0IGlzIGEgRFArKworCSAqIHBvcnQgb3IgYSBuYXRpdmUgSERNSSBwb3J0LiBC b3RoIG9mIHRoZXNlIG1ldGhvZHMgYXJlIGVudGlyZWx5CisJICogaGFyZHdhcmUvZHJpdmVyIHNw ZWNpZmljIHNvIHdlIGNhbid0IGRlYWwgd2l0aCB0aGVtIGhlcmUuCisJICovCisJcmV0ID0gZHJt X2RwX2R1YWxfbW9kZV9yZWFkKGFkYXB0ZXIsIERQX0RVQUxfTU9ERV9IRE1JX0lELAorCQkJCSAg ICBoZG1pX2lkLCBzaXplb2YoaGRtaV9pZCkpOworCWlmIChyZXQpCisJCXJldHVybiBEUk1fRFBf RFVBTF9NT0RFX05PTkU7CisKKwkvKgorCSAqIFNpZ2guIFNvbWUgKG1heWJlIGFsbD8pIHR5cGUg MSBhZGFwdG9ycyBhcmUgYnJva2VuIGFuZCBhY2sKKwkgKiB0aGUgb2Zmc2V0IGJ1dCBpZ25vcmUg aXQsIGFuZCBpbnN0ZWFkIHRoZXkganVzdCBhbHdheXMgcmV0dXJuCisJICogZGF0YSBmcm9tIHRo ZSBzdGFydCBvZiB0aGUgSERNSSBJRCBidWZmZXIuIFNvIGZvciBhIGJyb2tlbgorCSAqIHR5cGUg MSBIRE1JIGFkYXB0b3IgYSBzaW5nbGUgYnl0ZSByZWFkIHdpbGwgYWx3YXlzIGdpdmUgdXMKKwkg KiAweDQ0LCBhbmQgZm9yIGEgdHlwZSAxIERWSSBhZGFwdG9yIGl0IHNob3VsZCBnaXZlIDB4MDAK KwkgKiAoYXNzdW1pbmcgaXQgaW1wbGVtZW50cyBhbnkgcmVnaXN0ZXJzKS4gRm9ydHVuYXRlbHkg bmVpdGhlcgorCSAqIG9mIHRob3NlIHZhbHVlcyB3aWxsIG1hdGNoIHRoZSB0eXBlIDIgc2lnbmF0 dXJlIG9mIHRoZQorCSAqIERQX0RVQUxfTU9ERV9BREFQVE9SX0lEIHJlZ2lzdGVyIHNvIHdlIGNh biBwcm9jZWVkIHdpdGgKKwkgKiB0aGUgdHlwZSAyIGFkYXB0b3IgZGV0ZWN0aW9uIHNhZmVseSBl dmVuIGluIHRoZSBwcmVzZW5jZQorCSAqIG9mIGJyb2tlbiB0eXBlIDEgYWRhcHRvcnMuCisJICov CisJcmV0ID0gZHJtX2RwX2R1YWxfbW9kZV9yZWFkKGFkYXB0ZXIsIERQX0RVQUxfTU9ERV9BREFQ VE9SX0lELAorCQkJCSAgICAmYWRhcHRvcl9pZCwgc2l6ZW9mKGFkYXB0b3JfaWQpKTsKKwlpZiAo cmV0IHx8IChhZGFwdG9yX2lkICE9IChEUF9EVUFMX01PREVfVFlQRV9UWVBFMiB8CisJCQkJICAg RFBfRFVBTF9NT0RFX1JFVl9UWVBFMikpKSB7CisJCWlmIChpc19oZG1pX2FkYXB0b3IoaGRtaV9p ZCkpCisJCQlyZXR1cm4gRFJNX0RQX0RVQUxfTU9ERV9UWVBFMV9IRE1JOworCQllbHNlCisJCQly ZXR1cm4gRFJNX0RQX0RVQUxfTU9ERV9UWVBFMV9EVkk7CisJfSBlbHNlIHsKKwkJaWYgKGlzX2hk bWlfYWRhcHRvcihoZG1pX2lkKSkKKwkJCXJldHVybiBEUk1fRFBfRFVBTF9NT0RFX1RZUEUyX0hE TUk7CisJCWVsc2UKKwkJCXJldHVybiBEUk1fRFBfRFVBTF9NT0RFX1RZUEUyX0RWSTsKKwl9Cit9 CitFWFBPUlRfU1lNQk9MKGRybV9kcF9kdWFsX21vZGVfZGV0ZWN0KTsKKworLyoqCisgKiBkcm1f ZHBfZHVhbF9tb2RlX21heF90bWRzX2Nsb2NrIC0gTWF4IFRNRFMgY2xvY2sgZm9yIERQIGR1YWwg bW9kZSBhZGFwdG9yCisgKiBhZGFwdGVyOiBJMkMgYWRhcHRlciBmb3IgdGhlIEREQyBidXMKKyAq CisgKiBEZXRlcm1pbmUgdGhlIG1heCBUTURTIGNsb2NrIHRoZSBhZGFwdG9yIHN1cHBvcnRzIGJh c2VkIG9uIHRoZQorICogRFBfRFVBTF9NT0RFX01BWF9UTURTX0NMT0NLIHJlZ2lzdGVyLiBUaGUg cmVnaXN0ZXIgaXMgbWFuZGF0b3J5IGZvcgorICogdHlwZSAyIGFkYXB0b3JzLCBvcHRpb25hbCBm b3IgdHlwZSAxIGFkYXB0b3JzLiBIb2V2ZXIsIGFzIHNvbWUgdHlwZSAxCisgKiBhZGFwdG9ycyBh cmUgYnJva2VuIChzZWUgY29tbWVudHMgaW4gZHJtX2RwX2R1YWxfbW9kZV9kZXRlY3QoKSBmb3Ig dGhlCisgKiBkZXRhaWxzKSBvbmUgcHJvYmFibHkgc2hvdWxkbid0IHVzZSB0aGlzIHdpdGggdHlw ZSAxIGFkYXB0b3JzIGF0IGFsbC4KKyAqIFR5cGUgMSBhZGFwdG9ycyBzaG91bGQgYW55d2F5IGJl IGFsd2F5cyBsaW1pdGVkIHRvIDE2NSBNSHouCisgKgorICogUmV0dXJuczoKKyAqIE1heGltdW0g c3VwcG9ydGVkIFRNRFMgY2xvY2sgcmF0ZSBmb3IgdGhlIERQIGR1YWwgbW9kZSBhZGFwdG9yIGlu IGtIei4KKyAqLworaW50IGRybV9kcF9kdWFsX21vZGVfbWF4X3RtZHNfY2xvY2soc3RydWN0IGky Y19hZGFwdGVyICphZGFwdGVyKQoreworCXVpbnQ4X3QgbWF4X3RtZHNfY2xvY2s7CisJc3NpemVf dCByZXQ7CisKKwkvKgorCSAqIFR5cGUgMSBhZGFwdG9ycyBhcmUgbGltaXRlZCB0byAxNjVNSHoK KwkgKiBUeXBlIDIgYWRhcHRvcnMgY2FuIHRlbGxzIHVzIHRoZWlyIGxpbWl0CisJICovCisJcmV0 ID0gZHJtX2RwX2R1YWxfbW9kZV9yZWFkKGFkYXB0ZXIsIERQX0RVQUxfTU9ERV9NQVhfVE1EU19D TE9DSywKKwkJCQkgICAgJm1heF90bWRzX2Nsb2NrLCBzaXplb2YobWF4X3RtZHNfY2xvY2spKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gMTY1MDAwOworCisJcmV0dXJuIG1heF90bWRzX2Nsb2NrICog NTAwMCAvIDI7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9kcF9kdWFsX21vZGVfbWF4X3RtZHNfY2xv Y2spOworCisvKioKKyAqIGRybV9kcF9kdWFsX21vZGVfZ2V0X3RtZHNfb3V0cHV0IC0gR2V0IHRo ZSBzdGF0ZSBvZiB0aGUgVE1EUyBvdXRwdXQgYnVmZmVycyBpbiB0aGUgRFAgZHVhbCBtb2RlIGFk YXB0b3IKKyAqIGFkYXB0ZXI6IEkyQyBhZGFwdGVyIGZvciB0aGUgRERDIGJ1cworICogZW5hYmxl ZDogY3VycmVudCBzdGF0ZSBvZiB0aGUgVE1EUyBvdXRwdXQgYnVmZmVycworICoKKyAqIEdldCB0 aGUgc3RhdGUgb2YgdGhlIFRNRFMgb3V0cHV0IGJ1ZmZlcnMgaW4gdGhlIGFkYXB0b3IuCisgKiBE UF9EVUFMX01PREVfVE1EU19PRU4gcmVnaXN0ZXIgaXMgbWFuZGF0b3J5IGZvciB0eXBlIDIgYWRh cHRvcnMsCisgKiBvcHRpb25hbHMgZm9yIHR5cGUgMSBhZGFwdG9ycy4gSG9ldmVyLCBhcyBzb21l IHR5cGUgMSBhZGFwdG9ycyBhcmUKKyAqIGJyb2tlbiAoc2VlIGNvbW1lbnRzIGluIGRybV9kcF9k dWFsX21vZGVfZGV0ZWN0KCkgZm9yIHRoZSBkZXRhaWxzKQorICogb25lIHByb2JhYmx5IHNob3Vs ZG4ndCB1c2UgdGhpcyB3aXRoIHR5cGUgMSBhZGFwdG9ycyBhdCBhbGwuCisgKgorICogUmV0dXJu czoKKyAqIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlCisgKi8K K2ludCBkcm1fZHBfZHVhbF9tb2RlX2dldF90bWRzX291dHB1dChzdHJ1Y3QgaTJjX2FkYXB0ZXIg KmFkYXB0ZXIsIGJvb2wgKmVuYWJsZWQpCit7CisJdWludDhfdCB0bWRzX29lbjsKKwlzc2l6ZV90 IHJldDsKKworCXJldCA9IGRybV9kcF9kdWFsX21vZGVfcmVhZChhZGFwdGVyLCBEUF9EVUFMX01P REVfVE1EU19PRU4sCisJCQkJICAgICZ0bWRzX29lbiwgc2l6ZW9mKHRtZHNfb2VuKSk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCSplbmFibGVkID0gISh0bWRzX29lbiAmIERQX0RVQUxf TU9ERV9UTURTX0RJU0FCTEUpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9k cF9kdWFsX21vZGVfZ2V0X3RtZHNfb3V0cHV0KTsKKworLyoqCisgKiBkcm1fZHBfZHVhbF9tb2Rl X3NldF90bWRzX291dHB1dCAtIEVuYWJsZS9kaXNhYmxlIFRNRFMgb3V0cHV0IGJ1ZmZlcnMgaW4g dGhlIERQIGR1YWwgbW9kZSBhZGFwdG9yCisgKiBhZGFwdGVyOiBJMkMgYWRhcHRlciBmb3IgdGhl IEREQyBidXMKKyAqIGVuYWJsZTogZW5hYmxlIChhcyBvcHBvc2VkIHRvIGRpc2FibGUpIHRoZSBU TURTIG91dHB1dCBidWZmZXJzCisgKgorICogU2V0IHRoZSBzdGF0ZSBvZiB0aGUgVE1EUyBvdXRw dXQgYnVmZmVycyBpbiB0aGUgYWRhcHRvci4KKyAqIERQX0RVQUxfTU9ERV9UTURTX09FTiByZWdp c3RlciBpcyBtYW5kYXRvcnkgZm9yIHR5cGUgMiBhZGFwdG9ycywKKyAqIG9wdGlvbmFscyBmb3Ig dHlwZSAxIGFkYXB0b3JzLiBIb2V2ZXIsIGFzIHNvbWUgdHlwZSAxIGFkYXB0b3JzIGFyZQorICog YnJva2VuIChzZWUgY29tbWVudHMgaW4gZHJtX2RwX2R1YWxfbW9kZV9kZXRlY3QoKSBmb3IgdGhl IGRldGFpbHMpCisgKiBvbmUgcHJvYmFibHkgc2hvdWxkbid0IHVzZSB0aGlzIHdpdGggdHlwZSAx IGFkYXB0b3JzIGF0IGFsbC4KKyAqCisgKiBSZXR1cm5zOgorICogMCBvbiBzdWNjZXNzLCBuZWdh dGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyAqLworaW50IGRybV9kcF9kdWFsX21vZGVfc2V0 X3RtZHNfb3V0cHV0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgYm9vbCBlbmFibGUpCit7 CisJdWludDhfdCB0bWRzX29lbiA9IGVuYWJsZSA/IDAgOiBEUF9EVUFMX01PREVfVE1EU19ESVNB QkxFOworCXNzaXplX3QgcmV0OworCisJcmV0ID0gZHJtX2RwX2R1YWxfbW9kZV93cml0ZShhZGFw dGVyLCBEUF9EVUFMX01PREVfVE1EU19PRU4sCisJCQkJICAgICAmdG1kc19vZW4sIHNpemVvZih0 bWRzX29lbikpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KK0VY UE9SVF9TWU1CT0woZHJtX2RwX2R1YWxfbW9kZV9zZXRfdG1kc19vdXRwdXQpOworCisvKioKKyAq IGRybV9kcF9nZXRfZHVhbF9tb2RlX3R5cGVfbmFtZSAtIEdldCB0aGUgbmFtZSBvZiB0aGUgRFAg ZHVhbCBtb2RlIGFkYXB0b3IgdHlwZSBhcyBhIHN0cmluZworICogdHlwZTogRFAgZHVhbCBtb2Rl IGFkYXB0b3IgdHlwZQorICoKKyAqIFJldHVybnM6CisgKiBTdHJpbmcgcmVwcmVzZW50YXRpb24g b2YgdGhlIERQIGR1YWwgbW9kZSBhZGFwdG9yIHR5cGUKKyAqLworY29uc3QgY2hhciAqZHJtX2Rw X2dldF9kdWFsX21vZGVfdHlwZV9uYW1lKGVudW0gZHJtX2RwX2R1YWxfbW9kZV90eXBlIHR5cGUp Cit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBEUk1fRFBfRFVBTF9NT0RFX05PTkU6CisJCXJl dHVybiAibm9uZSI7CisJY2FzZSBEUk1fRFBfRFVBTF9NT0RFX1RZUEUxX0RWSToKKwkJcmV0dXJu ICJ0eXBlIDEgRFZJIjsKKwljYXNlIERSTV9EUF9EVUFMX01PREVfVFlQRTFfSERNSToKKwkJcmV0 dXJuICJ0eXBlIDEgSERNSSI7CisJY2FzZSBEUk1fRFBfRFVBTF9NT0RFX1RZUEUyX0RWSToKKwkJ cmV0dXJuICJ0eXBlIDIgRFZJIjsKKwljYXNlIERSTV9EUF9EVUFMX01PREVfVFlQRTJfSERNSToK KwkJcmV0dXJuICJ0eXBlIDIgSERNSSI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJ1bmtub3duIjsK Kwl9OworCit9CitFWFBPUlRfU1lNQk9MKGRybV9kcF9nZXRfZHVhbF9tb2RlX3R5cGVfbmFtZSk7 CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZHBfZHVhbF9tb2RlX2hlbHBlci5oIGIvaW5j bHVkZS9kcm0vZHJtX2RwX2R1YWxfbW9kZV9oZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLmEyZjZiNDU4N2Y1ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1 ZGUvZHJtL2RybV9kcF9kdWFsX21vZGVfaGVscGVyLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAq IENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBp bmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUg U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1Io UykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAor ICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8K KworI2lmbmRlZiBEUk1fRFBfRFVBTF9NT0RFX0hFTFBFUl9ICisjZGVmaW5lIERSTV9EUF9EVUFM X01PREVfSEVMUEVSX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBPcHRp b25hbCBmb3IgdHlwZSAxIERWSSBhZGFwdG9ycworICogTWFuZGF0b3J5IGZvciB0eXBlIDEgSERN SSBhbmQgdHlwZSAyIGFkYXRvcnMKKyAqLworI2RlZmluZSBEUF9EVUFMX01PREVfSERNSV9JRCAw eDAwIC8qIDAwLTBmICovCisjZGVmaW5lICBEUF9EVUFMX01PREVfSERNSV9JRF9MRU4gMTYKKy8q CisgKiBPcHRpb25hbCBmb3IgdHlwZSAxIGFkYXB0b3JzCisgKiBNYW5kYXRvcnkgZm9yIHR5cGUg MiBhZGF0b3JzCisgKi8KKyNkZWZpbmUgRFBfRFVBTF9NT0RFX0FEQVBUT1JfSUQgMHgxMAorI2Rl ZmluZSAgRFBfRFVBTF9NT0RFX1JFVl9NQVNLIDB4MDcKKyNkZWZpbmUgIERQX0RVQUxfTU9ERV9S RVZfVFlQRTIgMHgwMAorI2RlZmluZSAgRFBfRFVBTF9NT0RFX1RZUEVfTUFTSyAweGYwCisjZGVm aW5lICBEUF9EVUFMX01PREVfVFlQRV9UWVBFMiAweGEwCisjZGVmaW5lIERQX0RVQUxfTU9ERV9J RUVFX09VSSAweDExIC8qIDExLTEzKi8KKyNkZWZpbmUgIERQX0RVQUxfSUVFRV9PVUlfTEVOIDMK KyNkZWZpbmUgRFBfRFVBTF9ERVZJQ0VfSUQgMHgxNCAvKiAxNC0xOSAqLworI2RlZmluZSAgRFBf RFVBTF9ERVZJQ0VfSURfTEVOIDYKKyNkZWZpbmUgRFBfRFVBTF9NT0RFX0hBUkRXQVJFX1JFViAw eDFhCisjZGVmaW5lIERQX0RVQUxfTU9ERV9GSVJNV0FSRV9NQUpPUl9SRVYgMHgxYgorI2RlZmlu ZSBEUF9EVUFMX01PREVfRklSTVdBUkVfTUlOT1JfUkVWIDB4MWMKKyNkZWZpbmUgRFBfRFVBTF9N T0RFX01BWF9UTURTX0NMT0NLIDB4MWQKKyNkZWZpbmUgRFBfRFVBTF9NT0RFX0kyQ19TUEVFRF9D QVAgMHgxZQorI2RlZmluZSBEUF9EVUFMX01PREVfVE1EU19PRU4gMHgyMAorI2RlZmluZSAgRFBf RFVBTF9NT0RFX1RNRFNfRElTQUJMRSAweDAxCisjZGVmaW5lIERQX0RVQUxfTU9ERV9IRE1JX1BJ Tl9DVFJMIDB4MjEKKyNkZWZpbmUgIERQX0RVQUxfTU9ERV9DRUNfRU5BQkxFIDB4MDEKKyNkZWZp bmUgRFBfRFVBTF9NT0RFX0kyQ19TUEVFRF9DVFJMIDB4MjIKKyNkZWZpbmUgRFBfRFVBTF9NT0RF X0xBU1RfUkVTRVJWRUQgMHhmZgorCitzdHJ1Y3QgaTJjX2FkYXB0ZXI7CisKK3NzaXplX3QgZHJt X2RwX2R1YWxfbW9kZV9yZWFkKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAg IHU4IG9mZnNldCwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7Citzc2l6ZV90IGRybV9kcF9k dWFsX21vZGVfd3JpdGUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIHU4 IG9mZnNldCwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CisKK2VudW0gZHJtX2Rw X2R1YWxfbW9kZV90eXBlIHsKKwlEUk1fRFBfRFVBTF9NT0RFX05PTkUsCisJRFJNX0RQX0RVQUxf TU9ERV9UWVBFMV9EVkksCisJRFJNX0RQX0RVQUxfTU9ERV9UWVBFMV9IRE1JLAorCURSTV9EUF9E VUFMX01PREVfVFlQRTJfRFZJLAorCURSTV9EUF9EVUFMX01PREVfVFlQRTJfSERNSSwKK307CisK K2VudW0gZHJtX2RwX2R1YWxfbW9kZV90eXBlIGRybV9kcF9kdWFsX21vZGVfZGV0ZWN0KHN0cnVj dCBpMmNfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgZHJtX2RwX2R1YWxfbW9kZV9tYXhfdG1kc19j bG9jayhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IGRybV9kcF9kdWFsX21vZGVf Z2V0X3RtZHNfb3V0cHV0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgYm9vbCAqZW5hYmxl ZCk7CitpbnQgZHJtX2RwX2R1YWxfbW9kZV9zZXRfdG1kc19vdXRwdXQoc3RydWN0IGkyY19hZGFw dGVyICphZGFwdGVyLCBib29sIGVuYWJsZSk7Citjb25zdCBjaGFyICpkcm1fZHBfZ2V0X2R1YWxf bW9kZV90eXBlX25hbWUoZW51bSBkcm1fZHBfZHVhbF9tb2RlX3R5cGUgdHlwZSk7CisKKyNlbmRp ZgotLSAKMi40LjEwCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWwK