From mboxrd@z Thu Jan 1 00:00:00 1970 From: Robert Bragg Subject: [PATCH v9 06/11] drm/i915: Enable i915 perf stream for Haswell OA unit Date: Mon, 7 Nov 2016 19:49:52 +0000 Message-ID: <20161107194957.3385-7-robert@sixbynine.org> References: <20161107194957.3385-1-robert@sixbynine.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20161107194957.3385-1-robert@sixbynine.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: intel-gfx@lists.freedesktop.org Cc: dri-devel@lists.freedesktop.org, Matthew Auld , Sourab Gupta , Daniel Vetter , Robert Bragg List-Id: dri-devel@lists.freedesktop.org R2VuIGdyYXBoaWNzIGhhcmR3YXJlIGNhbiBiZSBzZXQgdXAgdG8gcGVyaW9kaWNhbGx5IHdyaXRl IHNuYXBzaG90cyBvZgpwZXJmb3JtYW5jZSBjb3VudGVycyBpbnRvIGEgY2lyY3VsYXIgYnVmZmVy IHZpYSBpdHMgT2JzZXJ2YXRpb24KQXJjaGl0ZWN0dXJlIGFuZCB0aGlzIHBhdGNoIGV4cG9zZXMg dGhhdCBjYXBhYmlsaXR5IHRvIHVzZXJzcGFjZSB2aWEgdGhlCmk5MTUgcGVyZiBpbnRlcmZhY2Uu Cgp2MjoKICAgTWFrZSBzdXJlIHRvIGluaXRpYWxpemUgLT5zcGVjaWZpY19jdHhfaWQgd2hlbiBv cGVuaW5nLCB3aXRob3V0CiAgIHJlbHlpbmcgb24gX3Bpbl9ub3RpZnkgaG9vaywgaW4gY2FzZSBj dHggYWxyZWFkeSBwaW5uZWQuCnYzOgogICBSZXZlcnQgYmFjayB0byBwaW5uaW5nIGN0eCB1cGZy b250IHdoZW4gb3BlbmluZyBzdHJlYW0sIHJlbW92aW5nCiAgIG5lZWQgdG8gaG9vayBpbiB0byBw aW5uaW5nIGFuZCB0byB1cGRhdGUgT0FDT05UUk9MIG9uIHRoZSBmbHkuCgpTaWduZWQtb2ZmLWJ5 OiBSb2JlcnQgQnJhZ2cgPHJvYmVydEBzaXhieW5pbmUub3JnPgpTaWduZWQtb2ZmLWJ5OiBaaGVu eXUgV2FuZyA8emhlbnl1d0BsaW51eC5pbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNocmlz QGNocmlzLXdpbHNvbi5jby51az4KUmV2aWV3ZWQtYnk6IE1hdHRoZXcgQXVsZCA8bWF0dGhldy5h dWxkQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICB8ICAg NjYgKystCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYyB8IDEwMzYgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cmVnLmggIHwgIDMzOCArKysrKysrKysrKysrCiBpbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgg ICAgICB8ICAgNzEgKystCiA0IGZpbGVzIGNoYW5nZWQsIDE0ODIgaW5zZXJ0aW9ucygrKSwgMjkg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggYmRlYmI2Ni4uODAwMzEy MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0xNzg1LDYgKzE3ODUsMTEgQEAgc3RydWN0 IGludGVsX3dtX2NvbmZpZyB7CiAJYm9vbCBzcHJpdGVzX3NjYWxlZDsKIH07CiAKK3N0cnVjdCBp OTE1X29hX2Zvcm1hdCB7CisJdTMyIGZvcm1hdDsKKwlpbnQgc2l6ZTsKK307CisKIHN0cnVjdCBp OTE1X29hX3JlZyB7CiAJaTkxNV9yZWdfdCBhZGRyOwogCXUzMiB2YWx1ZTsKQEAgLTE4MDUsMTEg KzE4MTAsNiBAQCBzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbV9vcHMgewogCSAqLwogCXZvaWQgKCpk aXNhYmxlKShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKTsKIAotCS8qIFJldHVybjog dHJ1ZSBpZiBhbnkgaTkxNSBwZXJmIHJlY29yZHMgYXJlIHJlYWR5IHRvIHJlYWQoKQotCSAqIGZv ciB0aGlzIHN0cmVhbS4KLQkgKi8KLQlib29sICgqY2FuX3JlYWQpKHN0cnVjdCBpOTE1X3BlcmZf c3RyZWFtICpzdHJlYW0pOwotCiAJLyogQ2FsbCBwb2xsX3dhaXQsIHBhc3NpbmcgYSB3YWl0IHF1 ZXVlIHRoYXQgd2lsbCBiZSB3b2tlbgogCSAqIG9uY2UgdGhlcmUgaXMgc29tZXRoaW5nIHJlYWR5 IHRvIHJlYWQoKSBmb3IgdGhlIHN0cmVhbQogCSAqLwpAQCAtMTgxOSw5ICsxODE5LDcgQEAgc3Ry dWN0IGk5MTVfcGVyZl9zdHJlYW1fb3BzIHsKIAogCS8qIEZvciBoYW5kbGluZyBhIGJsb2NraW5n IHJlYWQsIHdhaXQgdW50aWwgdGhlcmUgaXMgc29tZXRoaW5nCiAJICogdG8gcmVhZHkgdG8gcmVh ZCgpIGZvciB0aGUgc3RyZWFtLiBFLmcuIHdhaXQgb24gdGhlIHNhbWUKLQkgKiB3YWl0IHF1ZXVl IHRoYXQgd291bGQgYmUgcGFzc2VkIHRvIHBvbGxfd2FpdCgpIHVudGlsCi0JICogLT5jYW5fcmVh ZCgpIHJldHVybnMgdHJ1ZSAoaWYgaXRzIHNhZmUgdG8gY2FsbCAtPmNhbl9yZWFkKCkKLQkgKiB3 aXRob3V0IHRoZSBpOTE1IHBlcmYgbG9jayBoZWxkKS4KKwkgKiB3YWl0IHF1ZXVlIHRoYXQgd291 bGQgYmUgcGFzc2VkIHRvIHBvbGxfd2FpdCgpLgogCSAqLwogCWludCAoKndhaXRfdW5sb2NrZWQp KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pOwogCkBAIC0xODYxLDExICsxODU5LDI4 IEBAIHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CiAK IAl1MzIgc2FtcGxlX2ZsYWdzOworCWludCBzYW1wbGVfc2l6ZTsKIAogCXN0cnVjdCBpOTE1X2dl bV9jb250ZXh0ICpjdHg7CiAJYm9vbCBlbmFibGVkOwogCi0Jc3RydWN0IGk5MTVfcGVyZl9zdHJl YW1fb3BzICpvcHM7CisJY29uc3Qgc3RydWN0IGk5MTVfcGVyZl9zdHJlYW1fb3BzICpvcHM7Cit9 OworCitzdHJ1Y3QgaTkxNV9vYV9vcHMgeworCXZvaWQgKCppbml0X29hX2J1ZmZlcikoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKKwlpbnQgKCplbmFibGVfbWV0cmljX3NldCko c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKKwl2b2lkICgqZGlzYWJsZV9tZXRy aWNfc2V0KShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworCXZvaWQgKCpvYV9l bmFibGUpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CisJdm9pZCAoKm9hX2Rp c2FibGUpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CisJdm9pZCAoKnVwZGF0 ZV9vYWNvbnRyb2wpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CisJdm9pZCAo KnVwZGF0ZV9od19jdHhfaWRfbG9ja2VkKShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCisJCQkJCXUzMiBjdHhfaWQpOworCWludCAoKnJlYWQpKHN0cnVjdCBpOTE1X3BlcmZfc3Ry ZWFtICpzdHJlYW0sCisJCSAgICBjaGFyIF9fdXNlciAqYnVmLAorCQkgICAgc2l6ZV90IGNvdW50 LAorCQkgICAgc2l6ZV90ICpvZmZzZXQpOworCWJvb2wgKCpvYV9idWZmZXJfaXNfZW1wdHkpKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSB7CkBAIC0yMTcxLDE2ICsyMTg2LDQ3IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRl IHsKIAogCXN0cnVjdCB7CiAJCWJvb2wgaW5pdGlhbGl6ZWQ7CisKIAkJc3RydWN0IG11dGV4IGxv Y2s7CiAJCXN0cnVjdCBsaXN0X2hlYWQgc3RyZWFtczsKIAorCQlzcGlubG9ja190IGhvb2tfbG9j azsKKwogCQlzdHJ1Y3QgewotCQkJdTMyIG1ldHJpY3Nfc2V0OworCQkJc3RydWN0IGk5MTVfcGVy Zl9zdHJlYW0gKmV4Y2x1c2l2ZV9zdHJlYW07CisKKwkJCXUzMiBzcGVjaWZpY19jdHhfaWQ7CisJ CQlzdHJ1Y3QgaTkxNV92bWEgKnBpbm5lZF9yY3Nfdm1hOworCisJCQlzdHJ1Y3QgaHJ0aW1lciBw b2xsX2NoZWNrX3RpbWVyOworCQkJd2FpdF9xdWV1ZV9oZWFkX3QgcG9sbF93cTsKKwkJCWJvb2wg cG9sbGluOworCisJCQlib29sIHBlcmlvZGljOworCQkJaW50IHBlcmlvZF9leHBvbmVudDsKKwkJ CWludCB0aW1lc3RhbXBfZnJlcXVlbmN5OworCisJCQlpbnQgdGFpbF9tYXJnaW47CisKKwkJCWlu dCBtZXRyaWNzX3NldDsKIAogCQkJY29uc3Qgc3RydWN0IGk5MTVfb2FfcmVnICptdXhfcmVnczsK IAkJCWludCBtdXhfcmVnc19sZW47CiAJCQljb25zdCBzdHJ1Y3QgaTkxNV9vYV9yZWcgKmJfY291 bnRlcl9yZWdzOwogCQkJaW50IGJfY291bnRlcl9yZWdzX2xlbjsKKworCQkJc3RydWN0IHsKKwkJ CQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwkJCQl1OCAqdmFkZHI7CisJCQkJaW50IGZvcm1hdDsK KwkJCQlpbnQgZm9ybWF0X3NpemU7CisJCQl9IG9hX2J1ZmZlcjsKKworCQkJdTMyIGdlbjdfbGF0 Y2hlZF9vYXN0YXR1czE7CisKKwkJCXN0cnVjdCBpOTE1X29hX29wcyBvcHM7CisJCQljb25zdCBz dHJ1Y3QgaTkxNV9vYV9mb3JtYXQgKm9hX2Zvcm1hdHM7CisJCQlpbnQgbl9idWlsdGluX3NldHM7 CiAJCX0gb2E7CiAJfSBwZXJmOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3BlcmYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jCmluZGV4IDc3N2Nl NjUuLjU0NjUzYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jCkBAIC0yNSwxNiArMjUsODk5 IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Fub25faW5vZGVzLmg+CisjaW5jbHVkZSA8bGlu dXgvc2l6ZXMuaD4KIAogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaTkxNV9vYV9o c3cuaCIKKworLyogSFcgcmVxdWlyZXMgdGhpcyB0byBiZSBhIHBvd2VyIG9mIHR3bywgYmV0d2Vl biAxMjhrIGFuZCAxNk0sIHRob3VnaCBkcml2ZXIKKyAqIGlzIGN1cnJlbnRseSBnZW5lcmFsbHkg ZGVzaWduZWQgYXNzdW1pbmcgdGhlIGxhcmdlc3QgMTZNIHNpemUgaXMgdXNlZCBzdWNoCisgKiB0 aGF0IHRoZSBvdmVyZmxvdyBjYXNlcyBhcmUgdW5saWtlbHkgaW4gbm9ybWFsIG9wZXJhdGlvbi4K KyAqLworI2RlZmluZSBPQV9CVUZGRVJfU0laRQkJU1pfMTZNCisKKyNkZWZpbmUgT0FfVEFLRU4o dGFpbCwgaGVhZCkJKCh0YWlsIC0gaGVhZCkgJiAoT0FfQlVGRkVSX1NJWkUgLSAxKSkKKworLyog VGhlcmUncyBhIEhXIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gT0EgdW5pdCB0YWlsIHBvaW50ZXIg cmVnaXN0ZXIgdXBkYXRlcyBhbmQKKyAqIHdyaXRlcyB0byBtZW1vcnkgd2hlcmVieSB0aGUgdGFp bCBwb2ludGVyIGNhbiBzb21ldGltZXMgZ2V0IGFoZWFkIG9mIHdoYXQncworICogYmVlbiB3cml0 dGVuIG91dCB0byB0aGUgT0EgYnVmZmVyIHNvIGZhci4KKyAqCisgKiBBbHRob3VnaCB0aGlzIGNh biBiZSBvYnNlcnZlZCBleHBsaWNpdGx5IGJ5IGNoZWNraW5nIGZvciBhIHplcm9lZCByZXBvcnQt aWQKKyAqIGZpZWxkIGluIHRhaWwgcmVwb3J0cywgaXQgc2VlbXMgcHJlZmVyYWJsZSB0byBhY2Nv dW50IGZvciB0aGlzIGVhcmxpZXIgZS5nLgorICogYXMgcGFydCBvZiB0aGUgX29hX2J1ZmZlcl9p c19lbXB0eSBjaGVja3MgdG8gbWluaW1pemUgLUVBR0FJTiBwb2xsaW5nIGN5Y2xlcworICogaW4g dGhpcyBzaXR1YXRpb24uCisgKgorICogVG8gZ2l2ZSB0aW1lIGZvciB0aGUgbW9zdCByZWNlbnQg cmVwb3J0cyB0byBsYW5kIGJlZm9yZSB0aGV5IG1heSBiZSBjb3BpZWQgdG8KKyAqIHVzZXJzcGFj ZSwgdGhlIGRyaXZlciBvcGVyYXRlcyBhcyBpZiB0aGUgdGFpbCBwb2ludGVyIGVmZmVjdGl2ZWx5 IGxhZ3MgYmVoaW5kCisgKiB0aGUgSFcgdGFpbCBwb2ludGVyIGJ5ICd0YWlsX21hcmdpbicgYnl0 ZXMuIFRoZSBtYXJnaW4gaW4gYnl0ZXMgaXMgY2FsY3VsYXRlZAorICogYmFzZWQgb24gdGhpcyBj b25zdGFudCBpbiBuYW5vc2Vjb25kcywgdGhlIGN1cnJlbnQgT0Egc2FtcGxpbmcgZXhwb25lbnQK KyAqIGFuZCBjdXJyZW50IHJlcG9ydCBzaXplLgorICoKKyAqIFRoZXJlIGlzIGFsc28gYSBmYWxs YmFjayBjaGVjayB3aGlsZSByZWFkaW5nIHRvIHNpbXBseSBza2lwIG92ZXIgcmVwb3J0cyB3aXRo CisgKiBhIHplcm9lZCByZXBvcnQtaWQuCisgKi8KKyNkZWZpbmUgT0FfVEFJTF9NQVJHSU5fTlNF QwkxMDAwMDBVTEwKKworLyogZnJlcXVlbmN5IGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSBPQSB1 bml0IGhhcyB3cml0dGVuIG5ldyByZXBvcnRzIHRvIHRoZQorICogY2lyY3VsYXIgT0EgYnVmZmVy Li4uCisgKi8KKyNkZWZpbmUgUE9MTF9GUkVRVUVOQ1kgMjAwCisjZGVmaW5lIFBPTExfUEVSSU9E IChOU0VDX1BFUl9TRUMgLyBQT0xMX0ZSRVFVRU5DWSkKKworLyogVGhlIG1heGltdW0gZXhwb25l bnQgdGhlIGhhcmR3YXJlIGFjY2VwdHMgaXMgNjMgKGVzc2VudGlhbGx5IGl0IHNlbGVjdHMgb25l CisgKiBvZiB0aGUgNjRiaXQgdGltZXN0YW1wIGJpdHMgdG8gdHJpZ2dlciByZXBvcnRzIGZyb20p IGJ1dCB0aGVyZSdzIGN1cnJlbnRseQorICogbm8ga25vd24gdXNlIGNhc2UgZm9yIHNhbXBsaW5n IGFzIGluZnJlcXVlbnRseSBhcyBvbmNlIHBlciA0NyB0aG91c2FuZCB5ZWFycy4KKyAqCisgKiBT aW5jZSB0aGUgdGltZXN0YW1wcyBpbmNsdWRlZCBpbiBPQSByZXBvcnRzIGFyZSBvbmx5IDMyYml0 cyBpdCBzZWVtcworICogcmVhc29uYWJsZSB0byBsaW1pdCB0aGUgT0EgZXhwb25lbnQgd2hlcmUg aXQncyBzdGlsbCBwb3NzaWJsZSB0byBhY2NvdW50IGZvcgorICogb3ZlcmZsb3cgaW4gT0EgcmVw b3J0IHRpbWVzdGFtcHMuCisgKi8KKyNkZWZpbmUgT0FfRVhQT05FTlRfTUFYIDMxCisKKyNkZWZp bmUgSU5WQUxJRF9DVFhfSUQgMHhmZmZmZmZmZgorCisKKy8qIFhYWDogYmV3YXJlIGlmIGZ1dHVy ZSBPQSBIVyBhZGRzIG5ldyByZXBvcnQgZm9ybWF0cyB0aGF0IHRoZSBjdXJyZW50CisgKiBjb2Rl IGFzc3VtZXMgYWxsIHJlcG9ydHMgaGF2ZSBhIHBvd2VyLW9mLXR3byBzaXplIGFuZCB+KHNpemUg LSAxKSBjYW4KKyAqIGJlIHVzZWQgYXMgYSBtYXNrIHRvIGFsaWduIHRoZSBPQSB0YWlsIHBvaW50 ZXIuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaTkxNV9vYV9mb3JtYXQgaHN3X29hX2Zvcm1hdHNbSTkx NV9PQV9GT1JNQVRfTUFYXSA9IHsKKwlbSTkxNV9PQV9GT1JNQVRfQTEzXQkgICAgPSB7IDAsIDY0 IH0sCisJW0k5MTVfT0FfRk9STUFUX0EyOV0JICAgID0geyAxLCAxMjggfSwKKwlbSTkxNV9PQV9G T1JNQVRfQTEzX0I4X0M4XSAgPSB7IDIsIDEyOCB9LAorCS8qIEEyOV9COF9DOCBEaXNhbGxvd2Vk IGFzIDE5MiBieXRlcyBkb2Vzbid0IGZhY3RvciBpbnRvIGJ1ZmZlciBzaXplICovCisJW0k5MTVf T0FfRk9STUFUX0I0X0M4XQkgICAgPSB7IDQsIDY0IH0sCisJW0k5MTVfT0FfRk9STUFUX0E0NV9C OF9DOF0gID0geyA1LCAyNTYgfSwKKwlbSTkxNV9PQV9GT1JNQVRfQjRfQzhfQTE2XSAgPSB7IDYs IDEyOCB9LAorCVtJOTE1X09BX0ZPUk1BVF9DNF9COF0JICAgID0geyA3LCA2NCB9LAorfTsKKwor I2RlZmluZSBTQU1QTEVfT0FfUkVQT1JUICAgICAgKDE8PDApCiAKIHN0cnVjdCBwZXJmX29wZW5f cHJvcGVydGllcyB7CiAJdTMyIHNhbXBsZV9mbGFnczsKIAogCXU2NCBzaW5nbGVfY29udGV4dDox OwogCXU2NCBjdHhfaGFuZGxlOworCisJLyogT0Egc2FtcGxpbmcgc3RhdGUgKi8KKwlpbnQgbWV0 cmljc19zZXQ7CisJaW50IG9hX2Zvcm1hdDsKKwlib29sIG9hX3BlcmlvZGljOworCWludCBvYV9w ZXJpb2RfZXhwb25lbnQ7Cit9OworCisvKiBOQjogVGhpcyBpcyBlaXRoZXIgY2FsbGVkIHZpYSBm b3BzIG9yIHRoZSBwb2xsIGNoZWNrIGhydGltZXIgKGF0b21pYyBjdHgpCisgKgorICogSXQncyBz YWZlIHRvIHJlYWQgT0EgY29uZmlnIHN0YXRlIGhlcmUgdW5sb2NrZWQsIGFzc3VtaW5nIHRoYXQg dGhpcyBpcyBvbmx5CisgKiBjYWxsZWQgd2hpbGUgdGhlIHN0cmVhbSBpcyBlbmFibGVkLCB3aGls ZSB0aGUgZ2xvYmFsIE9BIGNvbmZpZ3VyYXRpb24gY2FuJ3QKKyAqIGJlIG1vZGlmaWVkLgorICoK KyAqIE5vdGU6IHdlIGRvbid0IGxvY2sgYXJvdW5kIHRoZSBoZWFkL3RhaWwgcmVhZHMgZXZlbiB0 aG91Z2ggdGhlcmUncyB0aGUgc2xpbQorICogcG9zc2liaWxpdHkgb2YgcmVhZCgpIGZvcCBlcnJv cnMgZm9yY2luZyBhIHJlLWluaXQgb2YgdGhlIE9BIGJ1ZmZlcgorICogcG9pbnRlcnMuICBBIHJh Y2UgaGVyZSBjb3VsZCByZXN1bHQgaW4gYSBmYWxzZSBwb3NpdGl2ZSAhZW1wdHkgc3RhdHVzIHdo aWNoCisgKiBpcyBhY2NlcHRhYmxlLgorICovCitzdGF0aWMgYm9vbCBnZW43X29hX2J1ZmZlcl9p c19lbXB0eV9mb3BfdW5sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQor eworCWludCByZXBvcnRfc2l6ZSA9IGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5mb3JtYXRf c2l6ZTsKKwl1MzIgb2FzdGF0dXMyID0gSTkxNV9SRUFEKEdFTjdfT0FTVEFUVVMyKTsKKwl1MzIg b2FzdGF0dXMxID0gSTkxNV9SRUFEKEdFTjdfT0FTVEFUVVMxKTsKKwl1MzIgaGVhZCA9IG9hc3Rh dHVzMiAmIEdFTjdfT0FTVEFUVVMyX0hFQURfTUFTSzsKKwl1MzIgdGFpbCA9IG9hc3RhdHVzMSAm IEdFTjdfT0FTVEFUVVMxX1RBSUxfTUFTSzsKKworCXJldHVybiBPQV9UQUtFTih0YWlsLCBoZWFk KSA8CisJCWRldl9wcml2LT5wZXJmLm9hLnRhaWxfbWFyZ2luICsgcmVwb3J0X3NpemU7Cit9CisK Ky8qKgorICogQXBwZW5kcyBhIHN0YXR1cyByZWNvcmQgdG8gYSB1c2Vyc3BhY2UgcmVhZCgpIGJ1 ZmZlci4KKyAqLworc3RhdGljIGludCBhcHBlbmRfb2Ffc3RhdHVzKHN0cnVjdCBpOTE1X3BlcmZf c3RyZWFtICpzdHJlYW0sCisJCQkgICAgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICBzaXplX3Qg Y291bnQsCisJCQkgICAgc2l6ZV90ICpvZmZzZXQsCisJCQkgICAgZW51bSBkcm1faTkxNV9wZXJm X3JlY29yZF90eXBlIHR5cGUpCit7CisJc3RydWN0IGRybV9pOTE1X3BlcmZfcmVjb3JkX2hlYWRl ciBoZWFkZXIgPSB7IHR5cGUsIDAsIHNpemVvZihoZWFkZXIpIH07CisKKwlpZiAoKGNvdW50IC0g Km9mZnNldCkgPCBoZWFkZXIuc2l6ZSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlpZiAoY29weV90 b191c2VyKGJ1ZiArICpvZmZzZXQsICZoZWFkZXIsIHNpemVvZihoZWFkZXIpKSkKKwkJcmV0dXJu IC1FRkFVTFQ7CisKKwkoKm9mZnNldCkgKz0gaGVhZGVyLnNpemU7CisKKwlyZXR1cm4gMDsKK30K KworLyoqCisgKiBDb3BpZXMgc2luZ2xlIE9BIHJlcG9ydCBpbnRvIHVzZXJzcGFjZSByZWFkKCkg YnVmZmVyLgorICovCitzdGF0aWMgaW50IGFwcGVuZF9vYV9zYW1wbGUoc3RydWN0IGk5MTVfcGVy Zl9zdHJlYW0gKnN0cmVhbSwKKwkJCSAgICBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgIHNpemVf dCBjb3VudCwKKwkJCSAgICBzaXplX3QgKm9mZnNldCwKKwkJCSAgICBjb25zdCB1OCAqcmVwb3J0 KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3By aXY7CisJaW50IHJlcG9ydF9zaXplID0gZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmZvcm1h dF9zaXplOworCXN0cnVjdCBkcm1faTkxNV9wZXJmX3JlY29yZF9oZWFkZXIgaGVhZGVyOworCXUz MiBzYW1wbGVfZmxhZ3MgPSBzdHJlYW0tPnNhbXBsZV9mbGFnczsKKworCWhlYWRlci50eXBlID0g RFJNX0k5MTVfUEVSRl9SRUNPUkRfU0FNUExFOworCWhlYWRlci5wYWQgPSAwOworCWhlYWRlci5z aXplID0gc3RyZWFtLT5zYW1wbGVfc2l6ZTsKKworCWlmICgoY291bnQgLSAqb2Zmc2V0KSA8IGhl YWRlci5zaXplKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWJ1ZiArPSAqb2Zmc2V0OworCWlmIChj b3B5X3RvX3VzZXIoYnVmLCAmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSkpCisJCXJldHVybiAtRUZB VUxUOworCWJ1ZiArPSBzaXplb2YoaGVhZGVyKTsKKworCWlmIChzYW1wbGVfZmxhZ3MgJiBTQU1Q TEVfT0FfUkVQT1JUKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCByZXBvcnQsIHJlcG9ydF9z aXplKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKworCSgqb2Zmc2V0KSArPSBoZWFkZXIuc2l6 ZTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIENvcGllcyBhbGwgYnVmZmVyZWQgT0EgcmVw b3J0cyBpbnRvIHVzZXJzcGFjZSByZWFkKCkgYnVmZmVyLgorICogQHN0cmVhbTogQW4gaTkxNS1w ZXJmIHN0cmVhbSBvcGVuZWQgZm9yIE9BIG1ldHJpY3MKKyAqIEBidWY6IGRlc3RpbmF0aW9uIGJ1 ZmZlciBnaXZlbiBieSB1c2Vyc3BhY2UKKyAqIEBjb3VudDogdGhlIG51bWJlciBvZiBieXRlcyB1 c2Vyc3BhY2Ugd2FudHMgdG8gcmVhZAorICogQG9mZnNldDogKGlub3V0KTogdGhlIGN1cnJlbnQg cG9zaXRpb24gZm9yIHdyaXRpbmcgaW50byBAYnVmCisgKiBAaGVhZF9wdHI6IChpbm91dCk6IHRo ZSBjdXJyZW50IG9hIGJ1ZmZlciBjcHUgcmVhZCBwb3NpdGlvbgorICogQHRhaWw6IHRoZSBjdXJy ZW50IG9hIGJ1ZmZlciBncHUgd3JpdGUgcG9zaXRpb24KKyAqCisgKiBSZXR1cm5zIDAgb24gc3Vj Y2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICoKKyAqIE5vdGFibHkgYW55 IGVycm9yIGNvbmRpdGlvbiByZXN1bHRpbmcgaW4gYSBzaG9ydCByZWFkICgtRU5PU1BDIG9yCisg KiAtRUZBVUxUKSB3aWxsIGJlIHJldHVybmVkIGV2ZW4gdGhvdWdoIG9uZSBvciBtb3JlIHJlY29y ZHMgbWF5CisgKiBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGNvcGllZC4gSW4gdGhpcyBjYXNlIGl0 J3MgdXAgdG8gdGhlIGNhbGxlcgorICogdG8gZGVjaWRlIGlmIHRoZSBlcnJvciBzaG91bGQgYmUg c3F1YXNoZWQgYmVmb3JlIHJldHVybmluZyB0bworICogdXNlcnNwYWNlLgorICoKKyAqIE5vdGU6 IHJlcG9ydHMgYXJlIGNvbnN1bWVkIGZyb20gdGhlIGhlYWQsIGFuZCBhcHBlbmRlZCB0byB0aGUK KyAqIHRhaWwsIHNvIHRoZSBoZWFkIGNoYXNlcyB0aGUgdGFpbD8uLi4gSWYgeW91IHRoaW5rIHRo YXQncyBtYWQKKyAqIGFuZCBiYWNrLXRvLWZyb250IHlvdSdyZSBub3QgYWxvbmUsIGJ1dCB0aGlz IGZvbGxvd3MgdGhlCisgKiBHZW4gUFJNIG5hbWluZyBjb252ZW50aW9uLgorICovCitzdGF0aWMg aW50IGdlbjdfYXBwZW5kX29hX3JlcG9ydHMoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVh bSwKKwkJCQkgIGNoYXIgX191c2VyICpidWYsCisJCQkJICBzaXplX3QgY291bnQsCisJCQkJICBz aXplX3QgKm9mZnNldCwKKwkJCQkgIHUzMiAqaGVhZF9wdHIsCisJCQkJICB1MzIgdGFpbCkKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2Owor CWludCByZXBvcnRfc2l6ZSA9IGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci5mb3JtYXRfc2l6 ZTsKKwl1OCAqb2FfYnVmX2Jhc2UgPSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIudmFkZHI7 CisJaW50IHRhaWxfbWFyZ2luID0gZGV2X3ByaXYtPnBlcmYub2EudGFpbF9tYXJnaW47CisJdTMy IGd0dF9vZmZzZXQgPSBpOTE1X2dndHRfb2Zmc2V0KGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZl ci52bWEpOworCXUzMiBtYXNrID0gKE9BX0JVRkZFUl9TSVpFIC0gMSk7CisJdTMyIGhlYWQ7CisJ dTMyIHRha2VuOworCWludCByZXQgPSAwOworCisJaWYgKFdBUk5fT04oIXN0cmVhbS0+ZW5hYmxl ZCkpCisJCXJldHVybiAtRUlPOworCisJaGVhZCA9ICpoZWFkX3B0ciAtIGd0dF9vZmZzZXQ7CisJ dGFpbCAtPSBndHRfb2Zmc2V0OworCisJLyogVGhlIE9BIHVuaXQgaXMgZXhwZWN0ZWQgdG8gd3Jh cCB0aGUgdGFpbCBwb2ludGVyIGFjY29yZGluZyB0byB0aGUgT0EKKwkgKiBidWZmZXIgc2l6ZSBh bmQgc2luY2Ugd2Ugc2hvdWxkIG5ldmVyIHdyaXRlIGEgbWlzYWxpZ25lZCBoZWFkCisJICogcG9p bnRlciB3ZSBkb24ndCBleHBlY3QgdG8gcmVhZCBvbmUgYmFjayBlaXRoZXIuLi4KKwkgKi8KKwlp ZiAodGFpbCA+IE9BX0JVRkZFUl9TSVpFIHx8IGhlYWQgPiBPQV9CVUZGRVJfU0laRSB8fAorCSAg ICBoZWFkICUgcmVwb3J0X3NpemUpIHsKKwkJRFJNX0VSUk9SKCJJbmNvbnNpc3RlbnQgT0EgYnVm ZmVyIHBvaW50ZXIgKGhlYWQgPSAldSwgdGFpbCA9ICV1KTogZm9yY2UgcmVzdGFydFxuIiwKKwkJ CSAgaGVhZCwgdGFpbCk7CisJCWRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9kaXNhYmxlKGRldl9w cml2KTsKKwkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2VuYWJsZShkZXZfcHJpdik7CisJCSpo ZWFkX3B0ciA9IEk5MTVfUkVBRChHRU43X09BU1RBVFVTMikgJgorCQkJR0VON19PQVNUQVRVUzJf SEVBRF9NQVNLOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKworCS8qIFRoZSB0YWlsIHBvaW50ZXIg aW5jcmVhc2VzIGluIDY0IGJ5dGUgaW5jcmVtZW50cywgbm90IGluIHJlcG9ydF9zaXplCisJICog c3RlcHMuLi4KKwkgKi8KKwl0YWlsICY9IH4ocmVwb3J0X3NpemUgLSAxKTsKKworCS8qIE1vdmUg dGhlIHRhaWwgcG9pbnRlciBiYWNrIGJ5IHRoZSBjdXJyZW50IHRhaWxfbWFyZ2luIHRvIGFjY291 bnQgZm9yCisJICogdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGxhdGVzdCByZXBvcnRzIG1heSBu b3QgaGF2ZSByZWFsbHkgbGFuZGVkCisJICogaW4gbWVtb3J5IHlldC4uLgorCSAqLworCisJaWYg KE9BX1RBS0VOKHRhaWwsIGhlYWQpIDwgcmVwb3J0X3NpemUgKyB0YWlsX21hcmdpbikKKwkJcmV0 dXJuIC1FQUdBSU47CisKKwl0YWlsIC09IHRhaWxfbWFyZ2luOworCXRhaWwgJj0gbWFzazsKKwor CWZvciAoLyogbm9uZSAqLzsKKwkgICAgICh0YWtlbiA9IE9BX1RBS0VOKHRhaWwsIGhlYWQpKTsK KwkgICAgIGhlYWQgPSAoaGVhZCArIHJlcG9ydF9zaXplKSAmIG1hc2spIHsKKwkJdTggKnJlcG9y dCA9IG9hX2J1Zl9iYXNlICsgaGVhZDsKKwkJdTMyICpyZXBvcnQzMiA9ICh2b2lkICopcmVwb3J0 OworCisJCS8qIEFsbCB0aGUgcmVwb3J0IHNpemVzIGZhY3RvciBuZWF0bHkgaW50byB0aGUgYnVm ZmVyCisJCSAqIHNpemUgc28gd2UgbmV2ZXIgZXhwZWN0IHRvIHNlZSBhIHJlcG9ydCBzcGxpdAor CQkgKiBiZXR3ZWVuIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgYnVmZmVyLgorCQkgKgor CQkgKiBHaXZlbiB0aGUgaW5pdGlhbCBhbGlnbm1lbnQgY2hlY2sgYSBtaXNhbGlnbm1lbnQKKwkJ ICogaGVyZSB3b3VsZCBpbXBseSBhIGRyaXZlciBidWcgdGhhdCB3b3VsZCByZXN1bHQKKwkJICog aW4gYW4gb3ZlcnJ1bi4KKwkJICovCisJCWlmIChXQVJOX09OKChPQV9CVUZGRVJfU0laRSAtIGhl YWQpIDwgcmVwb3J0X3NpemUpKSB7CisJCQlEUk1fRVJST1IoIlNwdXJpb3VzIE9BIGhlYWQgcHRy OiBub24taW50ZWdyYWwgcmVwb3J0IG9mZnNldFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCS8q IFRoZSByZXBvcnQtSUQgZmllbGQgZm9yIHBlcmlvZGljIHNhbXBsZXMgaW5jbHVkZXMKKwkJICog c29tZSB1bmRvY3VtZW50ZWQgZmxhZ3MgcmVsYXRlZCB0byB3aGF0IHRyaWdnZXJlZAorCQkgKiB0 aGUgcmVwb3J0IGFuZCBpcyBuZXZlciBleHBlY3RlZCB0byBiZSB6ZXJvIHNvIHdlCisJCSAqIGNh biBjaGVjayB0aGF0IHRoZSByZXBvcnQgaXNuJ3QgaW52YWxpZCBiZWZvcmUKKwkJICogY29weWlu ZyBpdCB0byB1c2Vyc3BhY2UuLi4KKwkJICovCisJCWlmIChyZXBvcnQzMlswXSA9PSAwKSB7CisJ CQlEUk1fRVJST1IoIlNraXBwaW5nIHNwdXJpb3VzLCBpbnZhbGlkIE9BIHJlcG9ydFxuIik7CisJ CQljb250aW51ZTsKKwkJfQorCisJCXJldCA9IGFwcGVuZF9vYV9zYW1wbGUoc3RyZWFtLCBidWYs IGNvdW50LCBvZmZzZXQsIHJlcG9ydCk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKworCQkvKiBU aGUgYWJvdmUgcmVwb3J0LWlkIGZpZWxkIHNhbml0eSBjaGVjayBpcyBiYXNlZCBvbgorCQkgKiB0 aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBPQSBidWZmZXIgaXMgaW5pdGlhbGx5CisJCSAqIHplcm9l ZCBhbmQgd2UgcmVzZXQgdGhlIGZpZWxkIGFmdGVyIGNvcHlpbmcgc28gdGhlCisJCSAqIGNoZWNr IGlzIHN0aWxsIG1lYW5pbmdmdWwgb25jZSBvbGQgcmVwb3J0cyBzdGFydAorCQkgKiBiZWluZyBv dmVyd3JpdHRlbi4KKwkJICovCisJCXJlcG9ydDMyWzBdID0gMDsKKwl9CisKKwkqaGVhZF9wdHIg PSBndHRfb2Zmc2V0ICsgaGVhZDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ2Vu N19vYV9yZWFkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCisJCQljaGFyIF9fdXNl ciAqYnVmLAorCQkJc2l6ZV90IGNvdW50LAorCQkJc2l6ZV90ICpvZmZzZXQpCit7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKKwlpbnQgcmVw b3J0X3NpemUgPSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuZm9ybWF0X3NpemU7CisJdTMy IG9hc3RhdHVzMjsKKwl1MzIgb2FzdGF0dXMxOworCXUzMiBoZWFkOworCXUzMiB0YWlsOworCWlu dCByZXQ7CisKKwlpZiAoV0FSTl9PTighZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLnZhZGRy KSkKKwkJcmV0dXJuIC1FSU87CisKKwlvYXN0YXR1czIgPSBJOTE1X1JFQUQoR0VON19PQVNUQVRV UzIpOworCW9hc3RhdHVzMSA9IEk5MTVfUkVBRChHRU43X09BU1RBVFVTMSk7CisKKwloZWFkID0g b2FzdGF0dXMyICYgR0VON19PQVNUQVRVUzJfSEVBRF9NQVNLOworCXRhaWwgPSBvYXN0YXR1czEg JiBHRU43X09BU1RBVFVTMV9UQUlMX01BU0s7CisKKwkvKiBYWFg6IE9uIEhhc3dlbGwgd2UgZG9u J3QgaGF2ZSBhIHNhZmUgd2F5IHRvIGNsZWFyIG9hc3RhdHVzMQorCSAqIGJpdHMgd2hpbGUgdGhl IE9BIHVuaXQgaXMgZW5hYmxlZCAod2hpbGUgdGhlIHRhaWwgcG9pbnRlcgorCSAqIG1heSBiZSB1 cGRhdGVkIGFzeW5jaHJvbm91c2x5KSBzbyB3ZSBpZ25vcmUgc3RhdHVzIGJpdHMKKwkgKiB0aGF0 IGhhdmUgYWxyZWFkeSBiZWVuIHJlcG9ydGVkIHRvIHVzZXJzcGFjZS4KKwkgKi8KKwlvYXN0YXR1 czEgJj0gfmRldl9wcml2LT5wZXJmLm9hLmdlbjdfbGF0Y2hlZF9vYXN0YXR1czE7CisKKwkvKiBX ZSB0cmVhdCBPQUJVRkZFUl9PVkVSRkxPVyBhcyBhIHNpZ25pZmljYW50IGVycm9yOgorCSAqCisJ ICogLSBUaGUgc3RhdHVzIGNhbiBiZSBpbnRlcnByZXRlZCB0byBtZWFuIHRoYXQgdGhlIGJ1ZmZl ciBpcworCSAqICAgY3VycmVudGx5IGZ1bGwgKHdpdGggYSBoaWdoZXIgcHJlY2VkZW5jZSB0aGFu IE9BX1RBS0VOKCkKKwkgKiAgIHdoaWNoIHdpbGwgc3RhcnQgdG8gcmVwb3J0IGEgbmVhci1lbXB0 eSBidWZmZXIgYWZ0ZXIgYW4KKwkgKiAgIG92ZXJmbG93KSBidXQgaXQncyBhd2t3YXJkIHRoYXQg d2UgY2FuJ3QgY2xlYXIgdGhlIHN0YXR1cworCSAqICAgb24gSGFzd2VsbCwgc28gd2l0aG91dCBh IHJlc2V0IHdlIHdvbid0IGJlIGFibGUgdG8gY2F0Y2gKKwkgKiAgIHRoZSBzdGF0ZSBhZ2Fpbi4K KwkgKgorCSAqIC0gU2luY2UgaXQgYWxzbyBpbXBsaWVzIHRoZSBIVyBoYXMgc3RhcnRlZCBvdmVy d3JpdGluZyBvbGQKKwkgKiAgIHJlcG9ydHMgaXQgbWF5IGFsc28gYWZmZWN0IG91ciBzYW5pdHkg Y2hlY2tzIGZvciBpbnZhbGlkCisJICogICByZXBvcnRzIHdoZW4gY29weWluZyB0byB1c2Vyc3Bh Y2UgdGhhdCBhc3N1bWUgbmV3IHJlcG9ydHMKKwkgKiAgIGFyZSBiZWluZyB3cml0dGVuIHRvIGNs ZWFyZWQgbWVtb3J5LgorCSAqCisJICogLSBJbiB0aGUgZnV0dXJlIHdlIG1heSB3YW50IHRvIGlu dHJvZHVjZSBhIGZsaWdodCByZWNvcmRlcgorCSAqICAgbW9kZSB3aGVyZSB0aGUgZHJpdmVyIHdp bGwgYXV0b21hdGljYWxseSBtYWludGFpbiBhIHNhZmUKKwkgKiAgIGd1YXJkIGJhbmQgYmV0d2Vl biBoZWFkL3RhaWwsIGF2b2lkaW5nIHRoaXMgb3ZlcmZsb3cKKwkgKiAgIGNvbmRpdGlvbiwgYnV0 IHdlIGF2b2lkIHRoZSBhZGRlZCBkcml2ZXIgY29tcGxleGl0eSBmb3IKKwkgKiAgIG5vdy4KKwkg Ki8KKwlpZiAodW5saWtlbHkob2FzdGF0dXMxICYgR0VON19PQVNUQVRVUzFfT0FCVUZGRVJfT1ZF UkZMT1cpKSB7CisJCXJldCA9IGFwcGVuZF9vYV9zdGF0dXMoc3RyZWFtLCBidWYsIGNvdW50LCBv ZmZzZXQsCisJCQkJICAgICAgIERSTV9JOTE1X1BFUkZfUkVDT1JEX09BX0JVRkZFUl9MT1NUKTsK KwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJRFJNX0VSUk9SKCJPQSBidWZmZXIgb3Zl cmZsb3c6IGZvcmNlIHJlc3RhcnRcbiIpOworCisJCWRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9k aXNhYmxlKGRldl9wcml2KTsKKwkJZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2VuYWJsZShkZXZf cHJpdik7CisKKwkJb2FzdGF0dXMyID0gSTkxNV9SRUFEKEdFTjdfT0FTVEFUVVMyKTsKKwkJb2Fz dGF0dXMxID0gSTkxNV9SRUFEKEdFTjdfT0FTVEFUVVMxKTsKKworCQloZWFkID0gb2FzdGF0dXMy ICYgR0VON19PQVNUQVRVUzJfSEVBRF9NQVNLOworCQl0YWlsID0gb2FzdGF0dXMxICYgR0VON19P QVNUQVRVUzFfVEFJTF9NQVNLOworCX0KKworCWlmICh1bmxpa2VseShvYXN0YXR1czEgJiBHRU43 X09BU1RBVFVTMV9SRVBPUlRfTE9TVCkpIHsKKwkJcmV0ID0gYXBwZW5kX29hX3N0YXR1cyhzdHJl YW0sIGJ1ZiwgY291bnQsIG9mZnNldCwKKwkJCQkgICAgICAgRFJNX0k5MTVfUEVSRl9SRUNPUkRf T0FfUkVQT1JUX0xPU1QpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJZGV2X3ByaXYt PnBlcmYub2EuZ2VuN19sYXRjaGVkX29hc3RhdHVzMSB8PQorCQkJR0VON19PQVNUQVRVUzFfUkVQ T1JUX0xPU1Q7CisJfQorCisJcmV0ID0gZ2VuN19hcHBlbmRfb2FfcmVwb3J0cyhzdHJlYW0sIGJ1 ZiwgY291bnQsIG9mZnNldCwKKwkJCQkgICAgICZoZWFkLCB0YWlsKTsKKworCS8qIEFsbCB0aGUg cmVwb3J0IHNpemVzIGFyZSBhIHBvd2VyIG9mIHR3byBhbmQgdGhlCisJICogaGVhZCBzaG91bGQg YWx3YXlzIGJlIGluY3JlbWVudGVkIGJ5IHNvbWUgbXVsdGlwbGUKKwkgKiBvZiB0aGUgcmVwb3J0 IHNpemUuCisJICoKKwkgKiBBIHdhcm5pbmcgaGVyZSwgYnV0IG5vdGFibHkgaWYgd2UgbGF0ZXIg cmVhZCBiYWNrIGEKKwkgKiBtaXNhbGlnbmVkIHBvaW50ZXIgd2Ugd2lsbCB0cmVhdCB0aGF0IGFz IGEgYnVnIHNpbmNlCisJICogaXQgY291bGQgbGVhZCB0byBhIGJ1ZmZlciBvdmVycnVuLgorCSAq LworCVdBUk5fT05DRShoZWFkICYgKHJlcG9ydF9zaXplIC0gMSksCisJCSAgImk5MTU6IFdyaXRp bmcgbWlzYWxpZ25lZCBPQSBoZWFkIHBvaW50ZXIiKTsKKworCS8qIE5vdGU6IHdlIHVwZGF0ZSB0 aGUgaGVhZCBwb2ludGVyIGhlcmUgZXZlbiBpZiBhbiBlcnJvcgorCSAqIHdhcyByZXR1cm5lZCBz aW5jZSB0aGUgZXJyb3IgbWF5IHJlcHJlc2VudCBhIHNob3J0IHJlYWQKKwkgKiB3aGVyZSBzb21l IHNvbWUgcmVwb3J0cyB3ZXJlIHN1Y2Nlc3NmdWxseSBjb3BpZWQuCisJICovCisJSTkxNV9XUklU RShHRU43X09BU1RBVFVTMiwKKwkJICAgKChoZWFkICYgR0VON19PQVNUQVRVUzJfSEVBRF9NQVNL KSB8CisJCSAgICBPQV9NRU1fU0VMRUNUX0dHVFQpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgaTkxNV9vYV93YWl0X3VubG9ja2VkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpz dHJlYW0pCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5k ZXZfcHJpdjsKKworCS8qIFdlIHdvdWxkIHdhaXQgaW5kZWZpbml0ZWx5IGlmIHBlcmlvZGljIHNh bXBsaW5nIGlzIG5vdCBlbmFibGVkICovCisJaWYgKCFkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2Rp YykKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBOb3RlOiB0aGUgb2FfYnVmZmVyX2lzX2VtcHR5KCkg Y29uZGl0aW9uIGlzIG9rIHRvIHJ1biB1bmxvY2tlZCBhcyBpdAorCSAqIGp1c3QgcGVyZm9ybXMg bW1pbyByZWFkcyBvZiB0aGUgT0EgYnVmZmVyIGhlYWQgKyB0YWlsIHBvaW50ZXJzIGFuZAorCSAq IGl0J3MgYXNzdW1lZCB3ZSdyZSBoYW5kbGluZyBzb21lIG9wZXJhdGlvbiB0aGF0IGltcGxpZXMg dGhlIHN0cmVhbQorCSAqIGNhbid0IGJlIGRlc3Ryb3llZCB1bnRpbCBjb21wbGV0aW9uIChzdWNo IGFzIGEgcmVhZCgpKSB0aGF0IGVuc3VyZXMKKwkgKiB0aGUgZGV2aWNlICsgT0EgYnVmZmVyIGNh bid0IGRpc2FwcGVhcgorCSAqLworCXJldHVybiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGV2 X3ByaXYtPnBlcmYub2EucG9sbF93cSwKKwkJCQkJIWRldl9wcml2LT5wZXJmLm9hLm9wcy5vYV9i dWZmZXJfaXNfZW1wdHkoZGV2X3ByaXYpKTsKK30KKworc3RhdGljIHZvaWQgaTkxNV9vYV9wb2xs X3dhaXQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKKwkJCSAgICAgIHN0cnVjdCBm aWxlICpmaWxlLAorCQkJICAgICAgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2OworCisJcG9sbF93YWl0KGZp bGUsICZkZXZfcHJpdi0+cGVyZi5vYS5wb2xsX3dxLCB3YWl0KTsKK30KKworc3RhdGljIGludCBp OTE1X29hX3JlYWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKKwkJCWNoYXIgX191 c2VyICpidWYsCisJCQlzaXplX3QgY291bnQsCisJCQlzaXplX3QgKm9mZnNldCkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2OworCisJcmV0 dXJuIGRldl9wcml2LT5wZXJmLm9hLm9wcy5yZWFkKHN0cmVhbSwgYnVmLCBjb3VudCwgb2Zmc2V0 KTsKK30KKworLyogRGV0ZXJtaW5lIHRoZSByZW5kZXIgY29udGV4dCBodyBpZCwgYW5kIGVuc3Vy ZSBpdCByZW1haW5zIGZpeGVkIGZvciB0aGUKKyAqIGxpZmV0aW1lIG9mIHRoZSBzdHJlYW0uIFRo aXMgZW5zdXJlcyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQKKyAqIHVwZGF0aW5n IHRoZSBjb250ZXh0IElEIGluIE9BQ09OVFJPTCBvbiB0aGUgZmx5LgorICovCitzdGF0aWMgaW50 IG9hX2dldF9yZW5kZXJfY3R4X2lkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCit7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsK KwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwlpbnQgcmV0OworCisJcmV0ID0gaTkxNV9tdXRleF9s b2NrX2ludGVycnVwdGlibGUoJmRldl9wcml2LT5kcm0pOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwkvKiBBcyB0aGUgSUQgaXMgdGhlIGd0dCBvZmZzZXQgb2YgdGhlIGNvbnRleHQncyB2 bWEgd2UgcGluCisJICogdGhlIHZtYSB0byBlbnN1cmUgdGhlIElEIHJlbWFpbnMgZml4ZWQuCisJ ICoKKwkgKiBOQjogaW1wbGllZCBSQ1MgZW5naW5lLi4uCisJICovCisJdm1hID0gaTkxNV9nZW1f Y29udGV4dF9waW5fbGVnYWN5KHN0cmVhbS0+Y3R4LCAwKTsKKwlpZiAoSVNfRVJSKHZtYSkpIHsK KwkJcmV0ID0gUFRSX0VSUih2bWEpOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlkZXZfcHJpdi0+ cGVyZi5vYS5waW5uZWRfcmNzX3ZtYSA9IHZtYTsKKworCS8qIEV4cGxpY2l0bHkgdHJhY2sgdGhl IElEIChpbnN0ZWFkIG9mIGNhbGxpbmcgaTkxNV9nZ3R0X29mZnNldCgpCisJICogb24gdGhlIGZs eSkgY29uc2lkZXJpbmcgdGhlIGRpZmZlcmVuY2Ugd2l0aCBnZW44KyBhbmQKKwkgKiBleGVjbGlz dHMKKwkgKi8KKwlkZXZfcHJpdi0+cGVyZi5vYS5zcGVjaWZpY19jdHhfaWQgPSBpOTE1X2dndHRf b2Zmc2V0KHZtYSk7CisKK3VubG9jazoKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5kcm0uc3Ry dWN0X211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9hX3B1dF9yZW5k ZXJfY3R4X2lkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCit7CisJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKKworCW11dGV4X2xv Y2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKKworCWk5MTVfdm1hX3VucGluKGRldl9w cml2LT5wZXJmLm9hLnBpbm5lZF9yY3Nfdm1hKTsKKwlkZXZfcHJpdi0+cGVyZi5vYS5waW5uZWRf cmNzX3ZtYSA9IE5VTEw7CisKKwlkZXZfcHJpdi0+cGVyZi5vYS5zcGVjaWZpY19jdHhfaWQgPSBJ TlZBTElEX0NUWF9JRDsKKworCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0 ZXgpOworfQorCitzdGF0aWMgdm9pZAorZnJlZV9vYV9idWZmZXIoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUpCit7CisJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisK KwlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKGk5MTUtPnBlcmYub2Eub2FfYnVmZmVyLnZtYS0+ b2JqKTsKKwlpOTE1X3ZtYV91bnBpbihpOTE1LT5wZXJmLm9hLm9hX2J1ZmZlci52bWEpOworCWk5 MTVfZ2VtX29iamVjdF9wdXQoaTkxNS0+cGVyZi5vYS5vYV9idWZmZXIudm1hLT5vYmopOworCisJ aTkxNS0+cGVyZi5vYS5vYV9idWZmZXIudm1hID0gTlVMTDsKKwlpOTE1LT5wZXJmLm9hLm9hX2J1 ZmZlci52YWRkciA9IE5VTEw7CisKKwltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0 ZXgpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X29hX3N0cmVhbV9kZXN0cm95KHN0cnVjdCBpOTE1 X3BlcmZfc3RyZWFtICpzdHJlYW0pCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKKworCUJVR19PTihzdHJlYW0gIT0gZGV2X3ByaXYtPnBl cmYub2EuZXhjbHVzaXZlX3N0cmVhbSk7CisKKwlkZXZfcHJpdi0+cGVyZi5vYS5vcHMuZGlzYWJs ZV9tZXRyaWNfc2V0KGRldl9wcml2KTsKKworCWZyZWVfb2FfYnVmZmVyKGRldl9wcml2KTsKKwor CWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKKwlp bnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7CisKKwlpZiAoc3RyZWFtLT5jdHgpCisJCW9h X3B1dF9yZW5kZXJfY3R4X2lkKHN0cmVhbSk7CisKKwlkZXZfcHJpdi0+cGVyZi5vYS5leGNsdXNp dmVfc3RyZWFtID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZ2VuN19pbml0X29hX2J1ZmZlcihz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJdTMyIGd0dF9vZmZzZXQgPSBp OTE1X2dndHRfb2Zmc2V0KGRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci52bWEpOworCisJLyog UHJlLURldkJEVzogT0FCVUZGRVIgbXVzdCBiZSBzZXQgd2l0aCBjb3VudGVycyBvZmYsCisJICog YmVmb3JlIE9BU1RBVFVTMSwgYnV0IGFmdGVyIE9BU1RBVFVTMgorCSAqLworCUk5MTVfV1JJVEUo R0VON19PQVNUQVRVUzIsIGd0dF9vZmZzZXQgfCBPQV9NRU1fU0VMRUNUX0dHVFQpOyAvKiBoZWFk ICovCisJSTkxNV9XUklURShHRU43X09BQlVGRkVSLCBndHRfb2Zmc2V0KTsKKwlJOTE1X1dSSVRF KEdFTjdfT0FTVEFUVVMxLCBndHRfb2Zmc2V0IHwgT0FCVUZGRVJfU0laRV8xNk0pOyAvKiB0YWls ICovCisKKwkvKiBPbiBIYXN3ZWxsIHdlIGhhdmUgdG8gdHJhY2sgd2hpY2ggT0FTVEFUVVMxIGZs YWdzIHdlJ3ZlCisJICogYWxyZWFkeSBzZWVuIHNpbmNlIHRoZXkgY2FuJ3QgYmUgY2xlYXJlZCB3 aGlsZSBwZXJpb2RpYworCSAqIHNhbXBsaW5nIGlzIGVuYWJsZWQuCisJICovCisJZGV2X3ByaXYt PnBlcmYub2EuZ2VuN19sYXRjaGVkX29hc3RhdHVzMSA9IDA7CisKKwkvKiBOQjogYWx0aG91Z2gg dGhlIE9BIGJ1ZmZlciB3aWxsIGluaXRpYWxseSBiZSBhbGxvY2F0ZWQKKwkgKiB6ZXJvZWQgdmlh IHNobWZzIChhbmQgc28gdGhpcyBtZW1zZXQgaXMgcmVkdW5kYW50IHdoZW4KKwkgKiBmaXJzdCBh bGxvY2F0aW5nKSwgd2UgbWF5IHJlLWluaXQgdGhlIE9BIGJ1ZmZlciwgZWl0aGVyCisJICogd2hl biByZS1lbmFibGluZyBhIHN0cmVhbSBvciBpbiBlcnJvci9yZXNldCBwYXRocy4KKwkgKgorCSAq IFRoZSByZWFzb24gd2UgY2xlYXIgdGhlIGJ1ZmZlciBmb3IgZWFjaCByZS1pbml0IGlzIGZvciB0 aGUKKwkgKiBzYW5pdHkgY2hlY2sgaW4gZ2VuN19hcHBlbmRfb2FfcmVwb3J0cygpIHRoYXQgbG9v a3MgYXQgdGhlCisJICogcmVwb3J0LWlkIGZpZWxkIHRvIG1ha2Ugc3VyZSBpdCdzIG5vbi16ZXJv IHdoaWNoIHJlbGllcyBvbgorCSAqIHRoZSBhc3N1bXB0aW9uIHRoYXQgbmV3IHJlcG9ydHMgYXJl IGJlaW5nIHdyaXR0ZW4gdG8gemVyb2VkCisJICogbWVtb3J5Li4uCisJICovCisJbWVtc2V0KGRl dl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci52YWRkciwgMCwgT0FfQlVGRkVSX1NJWkUpOworCisJ LyogTWF5YmUgbWFrZSAtPnBvbGxpbiBwZXItc3RyZWFtIHN0YXRlIGlmIHdlIHN1cHBvcnQgbXVs dGlwbGUKKwkgKiBjb25jdXJyZW50IHN0cmVhbXMgaW4gdGhlIGZ1dHVyZS4KKwkgKi8KKwlkZXZf cHJpdi0+cGVyZi5vYS5wb2xsaW4gPSBmYWxzZTsKK30KKworc3RhdGljIGludCBhbGxvY19vYV9i dWZmZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpibzsKKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwlpbnQgcmV0Owor CisJaWYgKFdBUk5fT04oZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLnZtYSkpCisJCXJldHVy biAtRU5PREVWOworCisJcmV0ID0gaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldl9w cml2LT5kcm0pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlCVUlMRF9CVUdfT05fTk9U X1BPV0VSX09GXzIoT0FfQlVGRkVSX1NJWkUpOworCUJVSUxEX0JVR19PTihPQV9CVUZGRVJfU0la RSA8IFNaXzEyOEsgfHwgT0FfQlVGRkVSX1NJWkUgPiBTWl8xNk0pOworCisJYm8gPSBpOTE1X2dl bV9vYmplY3RfY3JlYXRlKCZkZXZfcHJpdi0+ZHJtLCBPQV9CVUZGRVJfU0laRSk7CisJaWYgKElT X0VSUihibykpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgT0EgYnVmZmVyXG4i KTsKKwkJcmV0ID0gUFRSX0VSUihibyk7CisJCWdvdG8gdW5sb2NrOworCX0KKworCXJldCA9IGk5 MTVfZ2VtX29iamVjdF9zZXRfY2FjaGVfbGV2ZWwoYm8sIEk5MTVfQ0FDSEVfTExDKTsKKwlpZiAo cmV0KQorCQlnb3RvIGVycl91bnJlZjsKKworCS8qIFByZUhTVyByZXF1aXJlZCA1MTJLIGFsaWdu bWVudCwgSFNXIHJlcXVpcmVzIDE2TSAqLworCXZtYSA9IGk5MTVfZ2VtX29iamVjdF9nZ3R0X3Bp bihibywgTlVMTCwgMCwgU1pfMTZNLCAwKTsKKwlpZiAoSVNfRVJSKHZtYSkpIHsKKwkJcmV0ID0g UFRSX0VSUih2bWEpOworCQlnb3RvIGVycl91bnJlZjsKKwl9CisJZGV2X3ByaXYtPnBlcmYub2Eu b2FfYnVmZmVyLnZtYSA9IHZtYTsKKworCWRldl9wcml2LT5wZXJmLm9hLm9hX2J1ZmZlci52YWRk ciA9CisJCWk5MTVfZ2VtX29iamVjdF9waW5fbWFwKGJvLCBJOTE1X01BUF9XQik7CisJaWYgKElT X0VSUihkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIudmFkZHIpKSB7CisJCXJldCA9IFBUUl9F UlIoZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLnZhZGRyKTsKKwkJZ290byBlcnJfdW5waW47 CisJfQorCisJZGV2X3ByaXYtPnBlcmYub2Eub3BzLmluaXRfb2FfYnVmZmVyKGRldl9wcml2KTsK KworCURSTV9ERUJVR19EUklWRVIoIk9BIEJ1ZmZlciBpbml0aWFsaXplZCwgZ3R0IG9mZnNldCA9 IDB4JXgsIHZhZGRyID0gJXBcbiIsCisJCQkgaTkxNV9nZ3R0X29mZnNldChkZXZfcHJpdi0+cGVy Zi5vYS5vYV9idWZmZXIudm1hKSwKKwkJCSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIudmFk ZHIpOworCisJZ290byB1bmxvY2s7CisKK2Vycl91bnBpbjoKKwlfX2k5MTVfdm1hX3VucGluKHZt YSk7CisKK2Vycl91bnJlZjoKKwlpOTE1X2dlbV9vYmplY3RfcHV0KGJvKTsKKworCWRldl9wcml2 LT5wZXJmLm9hLm9hX2J1ZmZlci52YWRkciA9IE5VTEw7CisJZGV2X3ByaXYtPnBlcmYub2Eub2Ff YnVmZmVyLnZtYSA9IE5VTEw7CisKK3VubG9jazoKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5k cm0uc3RydWN0X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjb25maWdf b2FfcmVncyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICBjb25zdCBz dHJ1Y3QgaTkxNV9vYV9yZWcgKnJlZ3MsCisJCQkgICBpbnQgbl9yZWdzKQoreworCWludCBpOwor CisJZm9yIChpID0gMDsgaSA8IG5fcmVnczsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBpOTE1X29h X3JlZyAqcmVnID0gcmVncyArIGk7CisKKwkJSTkxNV9XUklURShyZWctPmFkZHIsIHJlZy0+dmFs dWUpOworCX0KK30KKworc3RhdGljIGludCBoc3dfZW5hYmxlX21ldHJpY19zZXQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCWludCByZXQgPSBpOTE1X29hX3NlbGVjdF9t ZXRyaWNfc2V0X2hzdyhkZXZfcHJpdik7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ STkxNV9XUklURShHRFRfQ0hJQ0tFTl9CSVRTLCAoSTkxNV9SRUFEKEdEVF9DSElDS0VOX0JJVFMp IHwKKwkJCQkgICAgICBHVF9OT0FfRU5BQkxFKSk7CisKKwkvKiBQUk06CisJICoKKwkgKiBPQSB1 bml0IGlzIHVzaW5nIOKAnGNyY2xr4oCdIGZvciBpdHMgZnVuY3Rpb25hbGl0eS4gV2hlbiB0cnVu aworCSAqIGxldmVsIGNsb2NrIGdhdGluZyB0YWtlcyBwbGFjZSwgT0EgY2xvY2sgd291bGQgYmUg Z2F0ZWQsCisJICogdW5hYmxlIHRvIGNvdW50IHRoZSBldmVudHMgZnJvbSBub24tcmVuZGVyIGNs b2NrIGRvbWFpbi4KKwkgKiBSZW5kZXIgY2xvY2sgZ2F0aW5nIG11c3QgYmUgZGlzYWJsZWQgd2hl biBPQSBpcyBlbmFibGVkIHRvCisJICogY291bnQgdGhlIGV2ZW50cyBmcm9tIG5vbi1yZW5kZXIg ZG9tYWluLiBVbml0IGxldmVsIGNsb2NrCisJICogZ2F0aW5nIGZvciBSQ1Mgc2hvdWxkIGFsc28g YmUgZGlzYWJsZWQuCisJICovCisJSTkxNV9XUklURShHRU43X01JU0NDUENUTCwgKEk5MTVfUkVB RChHRU43X01JU0NDUENUTCkgJgorCQkJCSAgICB+R0VON19ET1BfQ0xPQ0tfR0FURV9FTkFCTEUp KTsKKwlJOTE1X1dSSVRFKEdFTjZfVUNHQ1RMMSwgKEk5MTVfUkVBRChHRU42X1VDR0NUTDEpIHwK KwkJCQkgIEdFTjZfQ1NVTklUX0NMT0NLX0dBVEVfRElTQUJMRSkpOworCisJY29uZmlnX29hX3Jl Z3MoZGV2X3ByaXYsIGRldl9wcml2LT5wZXJmLm9hLm11eF9yZWdzLAorCQkgICAgICAgZGV2X3By aXYtPnBlcmYub2EubXV4X3JlZ3NfbGVuKTsKKworCS8qIEl0IGFwcGFyZW50bHkgdGFrZXMgYSBm YWlybHkgbG9uZyB0aW1lIGZvciBhIG5ldyBNVVgKKwkgKiBjb25maWd1cmF0aW9uIHRvIGJlIGJl IGFwcGxpZWQgYWZ0ZXIgdGhlc2UgcmVnaXN0ZXIgd3JpdGVzLgorCSAqIFRoaXMgZGVsYXkgZHVy YXRpb24gd2FzIGRlcml2ZWQgZW1waXJpY2FsbHkgYmFzZWQgb24gdGhlCisJICogcmVuZGVyX2Jh c2ljIGNvbmZpZyBidXQgaG9wZWZ1bGx5IGl0IGNvdmVycyB0aGUgbWF4aW11bQorCSAqIGNvbmZp Z3VyYXRpb24gbGF0ZW5jeS4KKwkgKgorCSAqIEFzIGEgZmFsbGJhY2ssIHRoZSBjaGVja3MgaW4g X2FwcGVuZF9vYV9yZXBvcnRzKCkgdG8gc2tpcAorCSAqIGludmFsaWQgT0EgcmVwb3J0cyBkbyBh bHNvIHNlZW0gdG8gd29yayB0byBkaXNjYXJkIHJlcG9ydHMKKwkgKiBnZW5lcmF0ZWQgYmVmb3Jl IHRoaXMgY29uZmlnIGhhcyBjb21wbGV0ZWQgLSBhbGJlaXQgbm90CisJICogc2lsZW50bHkuCisJ ICoKKwkgKiBVbmZvcnR1bmF0ZWx5IHRoaXMgaXMgZXNzZW50aWFsbHkgYSBtYWdpYyBudW1iZXIs IHNpbmNlIHdlCisJICogZG9uJ3QgY3VycmVudGx5IGtub3cgb2YgYSByZWxpYWJsZSBtZWNoYW5p c20gZm9yIHByZWRpY3RpbmcKKwkgKiBob3cgbG9uZyB0aGUgTVVYIGNvbmZpZyB3aWxsIHRha2Ug dG8gYXBwbHkgYW5kIGJlc2lkZXMKKwkgKiBzZWVpbmcgaW52YWxpZCByZXBvcnRzIHdlIGRvbid0 IGtub3cgb2YgYSByZWxpYWJsZSB3YXkgdG8KKwkgKiBleHBsaWNpdGx5IGNoZWNrIHRoYXQgdGhl IE1VWCBjb25maWcgaGFzIGxhbmRlZC4KKwkgKgorCSAqIEl0J3MgZXZlbiBwb3NzaWJsZSB3ZSd2 ZSBtaXNzIGNoYXJhY3Rlcml6ZWQgdGhlIHVuZGVybHlpbmcKKwkgKiBwcm9ibGVtIC0gaXQganVz dCBzZWVtcyBsaWtlIHRoZSBzaW1wbGVzdCBleHBsYW5hdGlvbiB3aHkKKwkgKiBhIGRlbGF5IGF0 IHRoaXMgbG9jYXRpb24gd291bGQgbWl0aWdhdGUgYW55IGludmFsaWQgcmVwb3J0cy4KKwkgKi8K Kwl1c2xlZXBfcmFuZ2UoMTUwMDAsIDIwMDAwKTsKKworCWNvbmZpZ19vYV9yZWdzKGRldl9wcml2 LCBkZXZfcHJpdi0+cGVyZi5vYS5iX2NvdW50ZXJfcmVncywKKwkJICAgICAgIGRldl9wcml2LT5w ZXJmLm9hLmJfY291bnRlcl9yZWdzX2xlbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQgaHN3X2Rpc2FibGVfbWV0cmljX3NldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCit7CisJSTkxNV9XUklURShHRU42X1VDR0NUTDEsIChJOTE1X1JFQUQoR0VONl9VQ0dDVEwx KSAmCisJCQkJICB+R0VONl9DU1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKSk7CisJSTkxNV9XUklU RShHRU43X01JU0NDUENUTCwgKEk5MTVfUkVBRChHRU43X01JU0NDUENUTCkgfAorCQkJCSAgICBH RU43X0RPUF9DTE9DS19HQVRFX0VOQUJMRSkpOworCisJSTkxNV9XUklURShHRFRfQ0hJQ0tFTl9C SVRTLCAoSTkxNV9SRUFEKEdEVF9DSElDS0VOX0JJVFMpICYKKwkJCQkgICAgICB+R1RfTk9BX0VO QUJMRSkpOworfQorCitzdGF0aWMgdm9pZCBnZW43X3VwZGF0ZV9vYWNvbnRyb2xfbG9ja2VkKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlhc3NlcnRfc3Bpbl9sb2NrZWQo JmRldl9wcml2LT5wZXJmLmhvb2tfbG9jayk7CisKKwlpZiAoZGV2X3ByaXYtPnBlcmYub2EuZXhj bHVzaXZlX3N0cmVhbS0+ZW5hYmxlZCkgeworCQlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4 ID0KKwkJCWRldl9wcml2LT5wZXJmLm9hLmV4Y2x1c2l2ZV9zdHJlYW0tPmN0eDsKKwkJdTMyIGN0 eF9pZCA9IGRldl9wcml2LT5wZXJmLm9hLnNwZWNpZmljX2N0eF9pZDsKKworCQlib29sIHBlcmlv ZGljID0gZGV2X3ByaXYtPnBlcmYub2EucGVyaW9kaWM7CisJCXUzMiBwZXJpb2RfZXhwb25lbnQg PSBkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RfZXhwb25lbnQ7CisJCXUzMiByZXBvcnRfZm9ybWF0 ID0gZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmZvcm1hdDsKKworCQlJOTE1X1dSSVRFKEdF TjdfT0FDT05UUk9MLAorCQkJICAgKGN0eF9pZCAmIEdFTjdfT0FDT05UUk9MX0NUWF9NQVNLKSB8 CisJCQkgICAocGVyaW9kX2V4cG9uZW50IDw8CisJCQkgICAgR0VON19PQUNPTlRST0xfVElNRVJf UEVSSU9EX1NISUZUKSB8CisJCQkgICAocGVyaW9kaWMgPyBHRU43X09BQ09OVFJPTF9USU1FUl9F TkFCTEUgOiAwKSB8CisJCQkgICAocmVwb3J0X2Zvcm1hdCA8PCBHRU43X09BQ09OVFJPTF9GT1JN QVRfU0hJRlQpIHwKKwkJCSAgIChjdHggPyBHRU43X09BQ09OVFJPTF9QRVJfQ1RYX0VOQUJMRSA6 IDApIHwKKwkJCSAgIEdFTjdfT0FDT05UUk9MX0VOQUJMRSk7CisJfSBlbHNlCisJCUk5MTVfV1JJ VEUoR0VON19PQUNPTlRST0wsIDApOworfQorCitzdGF0aWMgdm9pZCBnZW43X29hX2VuYWJsZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFn czsKKworCS8qIFJlc2V0IGJ1ZiBwb2ludGVycyBzbyB3ZSBkb24ndCBmb3J3YXJkIHJlcG9ydHMg ZnJvbSBiZWZvcmUgbm93LgorCSAqCisJICogVGhpbmsgY2FyZWZ1bGx5IGlmIGNvbnNpZGVyaW5n IHRyeWluZyB0byBhdm9pZCB0aGlzLCBzaW5jZSBpdAorCSAqIGFsc28gZW5zdXJlcyBzdGF0dXMg ZmxhZ3MgYW5kIHRoZSBidWZmZXIgaXRzZWxmIGFyZSBjbGVhcmVkCisJICogaW4gZXJyb3IgcGF0 aHMsIGFuZCB3ZSBoYXZlIGNoZWNrcyBmb3IgaW52YWxpZCByZXBvcnRzIGJhc2VkCisJICogb24g dGhlIGFzc3VtcHRpb24gdGhhdCBjZXJ0YWluIGZpZWxkcyBhcmUgd3JpdHRlbiB0byB6ZXJvZWQK KwkgKiBtZW1vcnkgd2hpY2ggdGhpcyBoZWxwcyBtYWludGFpbnMuCisJICovCisJZ2VuN19pbml0 X29hX2J1ZmZlcihkZXZfcHJpdik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnBl cmYuaG9va19sb2NrLCBmbGFncyk7CisJZ2VuN191cGRhdGVfb2Fjb250cm9sX2xvY2tlZChkZXZf cHJpdik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnBlcmYuaG9va19sb2Nr LCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfb2Ffc3RyZWFtX2VuYWJsZShzdHJ1Y3Qg aTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7CisKKwlkZXZfcHJpdi0+cGVyZi5vYS5vcHMub2Ff ZW5hYmxlKGRldl9wcml2KTsKKworCWlmIChkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RpYykKKwkJ aHJ0aW1lcl9zdGFydCgmZGV2X3ByaXYtPnBlcmYub2EucG9sbF9jaGVja190aW1lciwKKwkJCSAg ICAgIG5zX3RvX2t0aW1lKFBPTExfUEVSSU9EKSwKKwkJCSAgICAgIEhSVElNRVJfTU9ERV9SRUxf UElOTkVEKTsKK30KKworc3RhdGljIHZvaWQgZ2VuN19vYV9kaXNhYmxlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlJOTE1X1dSSVRFKEdFTjdfT0FDT05UUk9MLCAwKTsK K30KKworc3RhdGljIHZvaWQgaTkxNV9vYV9zdHJlYW1fZGlzYWJsZShzdHJ1Y3QgaTkxNV9wZXJm X3N0cmVhbSAqc3RyZWFtKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHN0cmVhbS0+ZGV2X3ByaXY7CisKKwlkZXZfcHJpdi0+cGVyZi5vYS5vcHMub2FfZGlzYWJsZShk ZXZfcHJpdik7CisKKwlpZiAoZGV2X3ByaXYtPnBlcmYub2EucGVyaW9kaWMpCisJCWhydGltZXJf Y2FuY2VsKCZkZXZfcHJpdi0+cGVyZi5vYS5wb2xsX2NoZWNrX3RpbWVyKTsKK30KKworc3RhdGlj IHU2NCBvYV9leHBvbmVudF90b19ucyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs IGludCBleHBvbmVudCkKK3sKKwlyZXR1cm4gMTAwMDAwMDAwMFVMTCAqICgyVUxMIDw8IGV4cG9u ZW50KSAvCisJCWRldl9wcml2LT5wZXJmLm9hLnRpbWVzdGFtcF9mcmVxdWVuY3k7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbV9vcHMgaTkxNV9vYV9zdHJlYW1fb3Bz ID0geworCS5kZXN0cm95ID0gaTkxNV9vYV9zdHJlYW1fZGVzdHJveSwKKwkuZW5hYmxlID0gaTkx NV9vYV9zdHJlYW1fZW5hYmxlLAorCS5kaXNhYmxlID0gaTkxNV9vYV9zdHJlYW1fZGlzYWJsZSwK Kwkud2FpdF91bmxvY2tlZCA9IGk5MTVfb2Ffd2FpdF91bmxvY2tlZCwKKwkucG9sbF93YWl0ID0g aTkxNV9vYV9wb2xsX3dhaXQsCisJLnJlYWQgPSBpOTE1X29hX3JlYWQsCiB9OwogCitzdGF0aWMg aW50IGk5MTVfb2Ffc3RyZWFtX2luaXQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwK KwkJCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9vcGVuX3BhcmFtICpwYXJhbSwKKwkJCSAg ICAgICBzdHJ1Y3QgcGVyZl9vcGVuX3Byb3BlcnRpZXMgKnByb3BzKQoreworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7CisJaW50IGZvcm1hdF9z aXplOworCWludCByZXQ7CisKKwlpZiAoIShwcm9wcy0+c2FtcGxlX2ZsYWdzICYgU0FNUExFX09B X1JFUE9SVCkpIHsKKwkJRFJNX0VSUk9SKCJPbmx5IE9BIHJlcG9ydCBzYW1wbGluZyBzdXBwb3J0 ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWRldl9wcml2LT5wZXJmLm9h Lm9wcy5pbml0X29hX2J1ZmZlcikgeworCQlEUk1fRVJST1IoIk9BIHVuaXQgbm90IHN1cHBvcnRl ZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFRvIGF2b2lkIHRoZSBjb21wbGV4 aXR5IG9mIGhhdmluZyB0byBhY2N1cmF0ZWx5IGZpbHRlcgorCSAqIGNvdW50ZXIgcmVwb3J0cyBh bmQgbWFyc2hhbCB0byB0aGUgYXBwcm9wcmlhdGUgY2xpZW50CisJICogd2UgY3VycmVudGx5IG9u bHkgYWxsb3cgZXhjbHVzaXZlIGFjY2VzcworCSAqLworCWlmIChkZXZfcHJpdi0+cGVyZi5vYS5l eGNsdXNpdmVfc3RyZWFtKSB7CisJCURSTV9FUlJPUigiT0EgdW5pdCBhbHJlYWR5IGluIHVzZVxu Iik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKCFwcm9wcy0+bWV0cmljc19zZXQpIHsK KwkJRFJNX0VSUk9SKCJPQSBtZXRyaWMgc2V0IG5vdCBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlpZiAoIXByb3BzLT5vYV9mb3JtYXQpIHsKKwkJRFJNX0VSUk9SKCJP QSByZXBvcnQgZm9ybWF0IG5vdCBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlzdHJlYW0tPnNhbXBsZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9wZXJmX3Jl Y29yZF9oZWFkZXIpOworCisJZm9ybWF0X3NpemUgPSBkZXZfcHJpdi0+cGVyZi5vYS5vYV9mb3Jt YXRzW3Byb3BzLT5vYV9mb3JtYXRdLnNpemU7CisKKwlzdHJlYW0tPnNhbXBsZV9mbGFncyB8PSBT QU1QTEVfT0FfUkVQT1JUOworCXN0cmVhbS0+c2FtcGxlX3NpemUgKz0gZm9ybWF0X3NpemU7CisK KwlkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuZm9ybWF0X3NpemUgPSBmb3JtYXRfc2l6ZTsK KwlpZiAoV0FSTl9PTihkZXZfcHJpdi0+cGVyZi5vYS5vYV9idWZmZXIuZm9ybWF0X3NpemUgPT0g MCkpCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2X3ByaXYtPnBlcmYub2Eub2FfYnVmZmVyLmZv cm1hdCA9CisJCWRldl9wcml2LT5wZXJmLm9hLm9hX2Zvcm1hdHNbcHJvcHMtPm9hX2Zvcm1hdF0u Zm9ybWF0OworCisJZGV2X3ByaXYtPnBlcmYub2EubWV0cmljc19zZXQgPSBwcm9wcy0+bWV0cmlj c19zZXQ7CisKKwlkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RpYyA9IHByb3BzLT5vYV9wZXJpb2Rp YzsKKwlpZiAoZGV2X3ByaXYtPnBlcmYub2EucGVyaW9kaWMpIHsKKwkJdTY0IHBlcmlvZF9ucyA9 IG9hX2V4cG9uZW50X3RvX25zKGRldl9wcml2LAorCQkJCQkJICBwcm9wcy0+b2FfcGVyaW9kX2V4 cG9uZW50KTsKKworCQlkZXZfcHJpdi0+cGVyZi5vYS5wZXJpb2RfZXhwb25lbnQgPSBwcm9wcy0+ b2FfcGVyaW9kX2V4cG9uZW50OworCisJCS8qIFNlZSBjb21tZW50IGZvciBPQV9UQUlMX01BUkdJ Tl9OU0VDIGZvciBkZXRhaWxzCisJCSAqIGFib3V0IHRoaXMgdGFpbF9tYXJnaW4uLi4KKwkJICov CisJCWRldl9wcml2LT5wZXJmLm9hLnRhaWxfbWFyZ2luID0KKwkJCSgoT0FfVEFJTF9NQVJHSU5f TlNFQyAvIHBlcmlvZF9ucykgKyAxKSAqIGZvcm1hdF9zaXplOworCX0KKworCWlmIChzdHJlYW0t PmN0eCkgeworCQlyZXQgPSBvYV9nZXRfcmVuZGVyX2N0eF9pZChzdHJlYW0pOworCQlpZiAocmV0 KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBhbGxvY19vYV9idWZmZXIoZGV2X3ByaXYp OworCWlmIChyZXQpCisJCWdvdG8gZXJyX29hX2J1Zl9hbGxvYzsKKworCS8qIFBSTSAtIG9ic2Vy dmFiaWxpdHkgcGVyZm9ybWFuY2UgY291bnRlcnM6CisJICoKKwkgKiAgIE9BQ09OVFJPTCwgcGVy Zm9ybWFuY2UgY291bnRlciBlbmFibGUsIG5vdGU6CisJICoKKwkgKiAgICJXaGVuIHRoaXMgYml0 IGlzIHNldCwgaW4gb3JkZXIgdG8gaGF2ZSBjb2hlcmVudCBjb3VudHMsCisJICogICBSQzYgcG93 ZXIgc3RhdGUgYW5kIHRydW5rIGNsb2NrIGdhdGluZyBtdXN0IGJlIGRpc2FibGVkLgorCSAqICAg VGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcHJvZ3JhbW1pbmcgTU1JTyByZWdpc3RlcnMgYXMKKwkg KiAgIDB4QTA5ND0wIGFuZCAweEEwOTBbMzFdPTEiCisJICoKKwkgKiAgIEluIG91ciBjYXNlIHdl IGFyZSBleHBlY3RpbmcgdGhhdCB0YWtpbmcgcG0gKyBGT1JDRVdBS0UKKwkgKiAgIHJlZmVyZW5j ZXMgd2lsbCBlZmZlY3RpdmVseSBkaXNhYmxlIFJDNi4KKwkgKi8KKwlpbnRlbF9ydW50aW1lX3Bt X2dldChkZXZfcHJpdik7CisJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoZGV2X3ByaXYsIEZP UkNFV0FLRV9BTEwpOworCisJcmV0ID0gZGV2X3ByaXYtPnBlcmYub2Eub3BzLmVuYWJsZV9tZXRy aWNfc2V0KGRldl9wcml2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9lbmFibGU7CisKKwlzdHJl YW0tPm9wcyA9ICZpOTE1X29hX3N0cmVhbV9vcHM7CisKKwlkZXZfcHJpdi0+cGVyZi5vYS5leGNs dXNpdmVfc3RyZWFtID0gc3RyZWFtOworCisJcmV0dXJuIDA7CisKK2Vycl9lbmFibGU6CisJaW50 ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOworCWludGVs X3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKKwlmcmVlX29hX2J1ZmZlcihkZXZfcHJpdik7CisK K2Vycl9vYV9idWZfYWxsb2M6CisJaWYgKHN0cmVhbS0+Y3R4KQorCQlvYV9wdXRfcmVuZGVyX2N0 eF9pZChzdHJlYW0pOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHNzaXplX3QgaTkxNV9w ZXJmX3JlYWRfbG9ja2VkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCiAJCQkJICAg ICBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkgICAgIGNoYXIgX191c2VyICpidWYsCkBAIC03OCw4 ICs5NjEsMjAgQEAgc3RhdGljIHNzaXplX3QgaTkxNV9wZXJmX3JlYWQoc3RydWN0IGZpbGUgKmZp bGUsCiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJp djsKIAlzc2l6ZV90IHJldDsKIAorCS8qIFRvIGVuc3VyZSBpdCdzIGhhbmRsZWQgY29uc2lzdGVu dGx5IHdlIHNpbXBseSB0cmVhdCBhbGwgcmVhZHMgb2YgYQorCSAqIGRpc2FibGVkIHN0cmVhbSBh cyBhbiBlcnJvci4gSW4gcGFydGljdWxhciBpdCBtaWdodCBvdGhlcndpc2UgbGVhZAorCSAqIHRv IGEgZGVhZGxvY2sgZm9yIGJsb2NraW5nIGZpbGUgZGVzY3JpcHRvcnMuLi4KKwkgKi8KKwlpZiAo IXN0cmVhbS0+ZW5hYmxlZCkKKwkJcmV0dXJuIC1FSU87CisKIAlpZiAoIShmaWxlLT5mX2ZsYWdz ICYgT19OT05CTE9DSykpIHsKLQkJLyogQWxsb3cgZmFsc2UgcG9zaXRpdmVzIGZyb20gc3RyZWFt LT5vcHMtPndhaXRfdW5sb2NrZWQuCisJCS8qIFRoZXJlJ3MgdGhlIHNtYWxsIGNoYW5jZSBvZiBm YWxzZSBwb3NpdGl2ZXMgZnJvbQorCQkgKiBzdHJlYW0tPm9wcy0+d2FpdF91bmxvY2tlZC4KKwkJ ICoKKwkJICogRS5nLiB3aXRoIHNpbmdsZSBjb250ZXh0IGZpbHRlcmluZyBzaW5jZSB3ZSBvbmx5 IHdhaXQgdW50aWwKKwkJICogb2FidWZmZXIgaGFzID49IDEgcmVwb3J0IHdlIGRvbid0IGltbWVk aWF0ZWx5IGtub3cgd2hldGhlcgorCQkgKiBhbnkgcmVwb3J0cyByZWFsbHkgYmVsb25nIHRvIHRo ZSBjdXJyZW50IGNvbnRleHQKIAkJICovCiAJCWRvIHsKIAkJCXJldCA9IHN0cmVhbS0+b3BzLT53 YWl0X3VubG9ja2VkKHN0cmVhbSk7CkBAIC05NywyMSArOTkyLDUxIEBAIHN0YXRpYyBzc2l6ZV90 IGk5MTVfcGVyZl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAogCQltdXRleF91bmxvY2soJmRldl9w cml2LT5wZXJmLmxvY2spOwogCX0KIAorCWlmIChyZXQgPj0gMCkgeworCQkvKiBNYXliZSBtYWtl IC0+cG9sbGluIHBlci1zdHJlYW0gc3RhdGUgaWYgd2Ugc3VwcG9ydCBtdWx0aXBsZQorCQkgKiBj b25jdXJyZW50IHN0cmVhbXMgaW4gdGhlIGZ1dHVyZS4KKwkJICovCisJCWRldl9wcml2LT5wZXJm Lm9hLnBvbGxpbiA9IGZhbHNlOworCX0KKwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB1bnNp Z25lZCBpbnQgaTkxNV9wZXJmX3BvbGxfbG9ja2VkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpz dHJlYW0sCitzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgb2FfcG9sbF9jaGVja190aW1lcl9j YihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPQorCQljb250YWluZXJfb2YoaHJ0aW1lciwgdHlwZW9mKCpkZXZfcHJpdiksCisJ CQkgICAgIHBlcmYub2EucG9sbF9jaGVja190aW1lcik7CisKKwlpZiAoIWRldl9wcml2LT5wZXJm Lm9hLm9wcy5vYV9idWZmZXJfaXNfZW1wdHkoZGV2X3ByaXYpKSB7CisJCWRldl9wcml2LT5wZXJm Lm9hLnBvbGxpbiA9IHRydWU7CisJCXdha2VfdXAoJmRldl9wcml2LT5wZXJmLm9hLnBvbGxfd3Ep OworCX0KKworCWhydGltZXJfZm9yd2FyZF9ub3coaHJ0aW1lciwgbnNfdG9fa3RpbWUoUE9MTF9Q RVJJT0QpKTsKKworCXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7Cit9CisKK3N0YXRpYyB1bnNpZ25l ZCBpbnQgaTkxNV9wZXJmX3BvbGxfbG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKKwkJCQkJICBzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAogCQkJCQkgIHN0 cnVjdCBmaWxlICpmaWxlLAogCQkJCQkgIHBvbGxfdGFibGUgKndhaXQpCiB7Ci0JdW5zaWduZWQg aW50IHN0cmVhbXMgPSAwOworCXVuc2lnbmVkIGludCBldmVudHMgPSAwOwogCiAJc3RyZWFtLT5v cHMtPnBvbGxfd2FpdChzdHJlYW0sIGZpbGUsIHdhaXQpOwogCi0JaWYgKHN0cmVhbS0+b3BzLT5j YW5fcmVhZChzdHJlYW0pKQotCQlzdHJlYW1zIHw9IFBPTExJTjsKKwkvKiBOb3RlOiB3ZSBkb24n dCBleHBsaWNpdGx5IGNoZWNrIHdoZXRoZXIgdGhlcmUncyBzb21ldGhpbmcgdG8gcmVhZAorCSAq IGhlcmUgc2luY2UgdGhpcyBwYXRoIG1heSBiZSB2ZXJ5IGhvdCBkZXBlbmRpbmcgb24gd2hhdCBl bHNlCisJICogdXNlcnNwYWNlIGlzIHBvbGxpbmcsIG9yIG9uIHRoZSB0aW1lb3V0IGluIHVzZS4g V2UgcmVseSBzb2xlbHkgb24KKwkgKiB0aGUgaHJ0aW1lci9vYV9wb2xsX2NoZWNrX3RpbWVyX2Ni IHRvIG5vdGlmeSB1cyB3aGVuIHRoZXJlIGFyZQorCSAqIHNhbXBsZXMgdG8gcmVhZC4KKwkgKi8K KwlpZiAoZGV2X3ByaXYtPnBlcmYub2EucG9sbGluKQorCQlldmVudHMgfD0gUE9MTElOOwogCi0J cmV0dXJuIHN0cmVhbXM7CisJcmV0dXJuIGV2ZW50czsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGlu dCBpOTE1X3BlcmZfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKQEAg LTEyMSw3ICsxMDQ2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBpOTE1X3BlcmZfcG9sbChzdHJ1 Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9j aygmZGV2X3ByaXYtPnBlcmYubG9jayk7Ci0JcmV0ID0gaTkxNV9wZXJmX3BvbGxfbG9ja2VkKHN0 cmVhbSwgZmlsZSwgd2FpdCk7CisJcmV0ID0gaTkxNV9wZXJmX3BvbGxfbG9ja2VkKGRldl9wcml2 LCBzdHJlYW0sIGZpbGUsIHdhaXQpOwogCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBlcmYubG9j ayk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjg1LDE4ICsxMjEwLDIxIEBAIGk5MTVfcGVyZl9vcGVu X2lvY3RsX2xvY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCWdvdG8g ZXJyX2N0eDsKIAl9CiAKLQlzdHJlYW0tPnNhbXBsZV9mbGFncyA9IHByb3BzLT5zYW1wbGVfZmxh Z3M7CiAJc3RyZWFtLT5kZXZfcHJpdiA9IGRldl9wcml2OwogCXN0cmVhbS0+Y3R4ID0gc3BlY2lm aWNfY3R4OwogCi0JLyoKLQkgKiBUT0RPOiBzdXBwb3J0IHNhbXBsaW5nIHNvbWV0aGluZwotCSAq Ci0JICogRm9yIG5vdyB0aGlzIGlzIGFzIGZhciBhcyB3ZSBjYW4gZ28uCisJcmV0ID0gaTkxNV9v YV9zdHJlYW1faW5pdChzdHJlYW0sIHBhcmFtLCBwcm9wcyk7CisJaWYgKHJldCkKKwkJZ290byBl cnJfYWxsb2M7CisKKwkvKiB3ZSBhdm9pZCBzaW1wbHkgYXNzaWduaW5nIHN0cmVhbS0+c2FtcGxl X2ZsYWdzID0gcHJvcHMtPnNhbXBsZV9mbGFncworCSAqIHRvIGhhdmUgX3N0cmVhbV9pbml0IGNo ZWNrIHRoZSBjb21iaW5hdGlvbiBvZiBzYW1wbGUgZmxhZ3MgbW9yZQorCSAqIHRob3JvdWdobHks IGJ1dCBzdGlsbCB0aGlzIGlzIHRoZSBleHBlY3RlZCByZXN1bHQgYXQgdGhpcyBwb2ludC4KIAkg Ki8KLQlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIGk5MTUgcGVyZiBzdHJlYW0gY29uZmlndXJhdGlv blxuIik7Ci0JcmV0ID0gLUVJTlZBTDsKLQlnb3RvIGVycl9hbGxvYzsKKwlpZiAoV0FSTl9PTihz dHJlYW0tPnNhbXBsZV9mbGFncyAhPSBwcm9wcy0+c2FtcGxlX2ZsYWdzKSkgeworCQlyZXQgPSAt RU5PREVWOworCQlnb3RvIGVycl9hbGxvYzsKKwl9CiAKIAlsaXN0X2FkZCgmc3RyZWFtLT5saW5r LCAmZGV2X3ByaXYtPnBlcmYuc3RyZWFtcyk7CiAKQEAgLTM4Miw2ICsxMzEwLDU2IEBAIHN0YXRp YyBpbnQgcmVhZF9wcm9wZXJ0aWVzX3VubG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKIAkJCXByb3BzLT5zaW5nbGVfY29udGV4dCA9IDE7CiAJCQlwcm9wcy0+Y3R4X2hh bmRsZSA9IHZhbHVlOwogCQkJYnJlYWs7CisJCWNhc2UgRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBM RV9PQToKKwkJCXByb3BzLT5zYW1wbGVfZmxhZ3MgfD0gU0FNUExFX09BX1JFUE9SVDsKKwkJCWJy ZWFrOworCQljYXNlIERSTV9JOTE1X1BFUkZfUFJPUF9PQV9NRVRSSUNTX1NFVDoKKwkJCWlmICh2 YWx1ZSA9PSAwIHx8CisJCQkgICAgdmFsdWUgPiBkZXZfcHJpdi0+cGVyZi5vYS5uX2J1aWx0aW5f c2V0cykgeworCQkJCURSTV9FUlJPUigiVW5rbm93biBPQSBtZXRyaWMgc2V0IElEIik7CisJCQkJ cmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlwcm9wcy0+bWV0cmljc19zZXQgPSB2YWx1ZTsKKwkJ CWJyZWFrOworCQljYXNlIERSTV9JOTE1X1BFUkZfUFJPUF9PQV9GT1JNQVQ6CisJCQlpZiAodmFs dWUgPT0gMCB8fCB2YWx1ZSA+PSBJOTE1X09BX0ZPUk1BVF9NQVgpIHsKKwkJCQlEUk1fRVJST1Io IkludmFsaWQgT0EgcmVwb3J0IGZvcm1hdFxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9 CisJCQlpZiAoIWRldl9wcml2LT5wZXJmLm9hLm9hX2Zvcm1hdHNbdmFsdWVdLnNpemUpIHsKKwkJ CQlEUk1fRVJST1IoIkludmFsaWQgT0EgcmVwb3J0IGZvcm1hdFxuIik7CisJCQkJcmV0dXJuIC1F SU5WQUw7CisJCQl9CisJCQlwcm9wcy0+b2FfZm9ybWF0ID0gdmFsdWU7CisJCQlicmVhazsKKwkJ Y2FzZSBEUk1fSTkxNV9QRVJGX1BST1BfT0FfRVhQT05FTlQ6CisJCQlpZiAodmFsdWUgPiBPQV9F WFBPTkVOVF9NQVgpIHsKKwkJCQlEUk1fRVJST1IoIk9BIHRpbWVyIGV4cG9uZW50IHRvbyBoaWdo ICg+ICV1KVxuIiwKKwkJCQkJICBPQV9FWFBPTkVOVF9NQVgpOworCQkJCXJldHVybiAtRUlOVkFM OworCQkJfQorCisJCQkvKiBOQjogVGhlIGV4cG9uZW50IHJlcHJlc2VudHMgYSBwZXJpb2QgYXMg Zm9sbG93czoKKwkJCSAqCisJCQkgKiAgIDgwbnMgKiAyXihwZXJpb2RfZXhwb25lbnQgKyAxKQor CQkJICoKKwkJCSAqIFRoZW9yZXRpY2FsbHkgd2UgY2FuIHByb2dyYW0gdGhlIE9BIHVuaXQgdG8g c2FtcGxlCisJCQkgKiBldmVyeSAxNjBucyBidXQgZG9uJ3QgYWxsb3cgdGhhdCBieSBkZWZhdWx0 IHVubGVzcworCQkJICogcm9vdC4KKwkJCSAqCisJCQkgKiBSZWZlcnJpbmcgdG8gcGVyZidzCisJ CQkgKiBrZXJuZWwucGVyZl9ldmVudF9tYXhfc2FtcGxlX3JhdGUgZm9yIGEgcHJlY2VkZW50CisJ CQkgKiAoMTAwMDAwIGJ5IGRlZmF1bHQpOyB3aXRoIGFuIE9BIGV4cG9uZW50IG9mIDYgd2UgZ2V0 CisJCQkgKiBhIHBlcmlvZCBvZiAxMC4yNDAgbWljcm9zZWNvbmRzIC1qdXN0IHVuZGVyIDEwMDAw MEh6CisJCQkgKi8KKwkJCWlmICh2YWx1ZSA8IDYgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikp IHsKKwkJCQlEUk1fRVJST1IoIk1pbmltdW0gT0Egc2FtcGxpbmcgZXhwb25lbnQgaXMgNiB3aXRo b3V0IHJvb3QgcHJpdmlsZWdlc1xuIik7CisJCQkJcmV0dXJuIC1FQUNDRVM7CisJCQl9CisKKwkJ CXByb3BzLT5vYV9wZXJpb2RpYyA9IHRydWU7CisJCQlwcm9wcy0+b2FfcGVyaW9kX2V4cG9uZW50 ID0gdmFsdWU7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCU1JU1NJTkdfQ0FTRShpZCk7CiAJ CQlEUk1fRVJST1IoIlVua25vd24gaTkxNSBwZXJmIHByb3BlcnR5IElEIik7CkBAIC00MzIsOCAr MTQxMCwzMyBAQCBpbnQgaTkxNV9wZXJmX29wZW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwKIAogdm9pZCBpOTE1X3BlcmZfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCiB7CisJaWYgKCFJU19IQVNXRUxMKGRldl9wcml2KSkKKwkJcmV0dXJu OworCisJaHJ0aW1lcl9pbml0KCZkZXZfcHJpdi0+cGVyZi5vYS5wb2xsX2NoZWNrX3RpbWVyLAor CQkgICAgIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7CisJZGV2X3ByaXYtPnBl cmYub2EucG9sbF9jaGVja190aW1lci5mdW5jdGlvbiA9IG9hX3BvbGxfY2hlY2tfdGltZXJfY2I7 CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2X3ByaXYtPnBlcmYub2EucG9sbF93cSk7CisKIAlJ TklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPnBlcmYuc3RyZWFtcyk7CiAJbXV0ZXhfaW5pdCgmZGV2 X3ByaXYtPnBlcmYubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5wZXJmLmhvb2tf bG9jayk7CisKKwlkZXZfcHJpdi0+cGVyZi5vYS5vcHMuaW5pdF9vYV9idWZmZXIgPSBnZW43X2lu aXRfb2FfYnVmZmVyOworCWRldl9wcml2LT5wZXJmLm9hLm9wcy5lbmFibGVfbWV0cmljX3NldCA9 IGhzd19lbmFibGVfbWV0cmljX3NldDsKKwlkZXZfcHJpdi0+cGVyZi5vYS5vcHMuZGlzYWJsZV9t ZXRyaWNfc2V0ID0gaHN3X2Rpc2FibGVfbWV0cmljX3NldDsKKwlkZXZfcHJpdi0+cGVyZi5vYS5v cHMub2FfZW5hYmxlID0gZ2VuN19vYV9lbmFibGU7CisJZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9h X2Rpc2FibGUgPSBnZW43X29hX2Rpc2FibGU7CisJZGV2X3ByaXYtPnBlcmYub2Eub3BzLnJlYWQg PSBnZW43X29hX3JlYWQ7CisJZGV2X3ByaXYtPnBlcmYub2Eub3BzLm9hX2J1ZmZlcl9pc19lbXB0 eSA9CisJCWdlbjdfb2FfYnVmZmVyX2lzX2VtcHR5X2ZvcF91bmxvY2tlZDsKKworCWRldl9wcml2 LT5wZXJmLm9hLnRpbWVzdGFtcF9mcmVxdWVuY3kgPSAxMjUwMDAwMDsKKworCWRldl9wcml2LT5w ZXJmLm9hLm9hX2Zvcm1hdHMgPSBoc3dfb2FfZm9ybWF0czsKKworCWRldl9wcml2LT5wZXJmLm9h Lm5fYnVpbHRpbl9zZXRzID0KKwkJaTkxNV9vYV9uX2J1aWx0aW5fbWV0cmljX3NldHNfaHN3Owog CiAJZGV2X3ByaXYtPnBlcmYuaW5pdGlhbGl6ZWQgPSB0cnVlOwogfQpAQCAtNDQzLDcgKzE0NDYs NiBAQCB2b2lkIGk5MTVfcGVyZl9maW5pKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKIAlpZiAoIWRldl9wcml2LT5wZXJmLmluaXRpYWxpemVkKQogCQlyZXR1cm47CiAKLQkvKiBD dXJyZW50bHkgbm90aGluZyB0byBjbGVhbiB1cCAqLwotCisJbWVtc2V0KCZkZXZfcHJpdi0+cGVy Zi5vYS5vcHMsIDAsIHNpemVvZihkZXZfcHJpdi0+cGVyZi5vYS5vcHMpKTsKIAlkZXZfcHJpdi0+ cGVyZi5pbml0aWFsaXplZCA9IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXgg NDYyM2RiYi4uZGY1Zjg4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9y ZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC02MTYsNiArNjE2 LDM0MyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9tbWlvX3JlZ192YWxpZChpOTE1X3JlZ190 IHJlZykKICNkZWZpbmUgSFNXX0NTX0dQUl9VRFcobikgICAgICAgICAgICAgICBfTU1JTygweDI2 MDAgKyAobikgKiA4ICsgNCkKIAogI2RlZmluZSBHRU43X09BQ09OVFJPTCBfTU1JTygweDIzNjAp CisjZGVmaW5lICBHRU43X09BQ09OVFJPTF9DVFhfTUFTSwkgICAgMHhGRkZGRjAwMAorI2RlZmlu ZSAgR0VON19PQUNPTlRST0xfVElNRVJfUEVSSU9EX01BU0sgICAweDNGCisjZGVmaW5lICBHRU43 X09BQ09OVFJPTF9USU1FUl9QRVJJT0RfU0hJRlQgIDYKKyNkZWZpbmUgIEdFTjdfT0FDT05UUk9M X1RJTUVSX0VOQUJMRQkgICAgKDE8PDUpCisjZGVmaW5lICBHRU43X09BQ09OVFJPTF9GT1JNQVRf QTEzCSAgICAoMDw8MikKKyNkZWZpbmUgIEdFTjdfT0FDT05UUk9MX0ZPUk1BVF9BMjkJICAgICgx PDwyKQorI2RlZmluZSAgR0VON19PQUNPTlRST0xfRk9STUFUX0ExM19COF9DOCAgICAoMjw8MikK KyNkZWZpbmUgIEdFTjdfT0FDT05UUk9MX0ZPUk1BVF9BMjlfQjhfQzggICAgKDM8PDIpCisjZGVm aW5lICBHRU43X09BQ09OVFJPTF9GT1JNQVRfQjRfQzgJICAgICg0PDwyKQorI2RlZmluZSAgR0VO N19PQUNPTlRST0xfRk9STUFUX0E0NV9COF9DOCAgICAoNTw8MikKKyNkZWZpbmUgIEdFTjdfT0FD T05UUk9MX0ZPUk1BVF9CNF9DOF9BMTYgICAgKDY8PDIpCisjZGVmaW5lICBHRU43X09BQ09OVFJP TF9GT1JNQVRfQzRfQjgJICAgICg3PDwyKQorI2RlZmluZSAgR0VON19PQUNPTlRST0xfRk9STUFU X1NISUZUCSAgICAyCisjZGVmaW5lICBHRU43X09BQ09OVFJPTF9QRVJfQ1RYX0VOQUJMRQkgICAg KDE8PDEpCisjZGVmaW5lICBHRU43X09BQ09OVFJPTF9FTkFCTEUJCSAgICAoMTw8MCkKKworI2Rl ZmluZSBHRU44X09BQ1RYSUQgX01NSU8oMHgyMzY0KQorCisjZGVmaW5lIEdFTjhfT0FDT05UUk9M IF9NTUlPKDB4MkIwMCkKKyNkZWZpbmUgIEdFTjhfT0FfUkVQT1JUX0ZPUk1BVF9BMTIJICAgICgw PDwyKQorI2RlZmluZSAgR0VOOF9PQV9SRVBPUlRfRk9STUFUX0ExMl9COF9DOCAgICAoMjw8MikK KyNkZWZpbmUgIEdFTjhfT0FfUkVQT1JUX0ZPUk1BVF9BMzZfQjhfQzggICAgKDU8PDIpCisjZGVm aW5lICBHRU44X09BX1JFUE9SVF9GT1JNQVRfQzRfQjgJICAgICg3PDwyKQorI2RlZmluZSAgR0VO OF9PQV9SRVBPUlRfRk9STUFUX1NISUZUCSAgICAyCisjZGVmaW5lICBHRU44X09BX1NQRUNJRklD X0NPTlRFWFRfRU5BQkxFICAgICgxPDwxKQorI2RlZmluZSAgR0VOOF9PQV9DT1VOVEVSX0VOQUJM RSAgICAgICAgICAgICAoMTw8MCkKKworI2RlZmluZSBHRU44X09BQ1RYQ09OVFJPTCBfTU1JTygw eDIzNjApCisjZGVmaW5lICBHRU44X09BX1RJTUVSX1BFUklPRF9NQVNLCSAgICAweDNGCisjZGVm aW5lICBHRU44X09BX1RJTUVSX1BFUklPRF9TSElGVAkgICAgMgorI2RlZmluZSAgR0VOOF9PQV9U SU1FUl9FTkFCTEUJCSAgICAoMTw8MSkKKyNkZWZpbmUgIEdFTjhfT0FfQ09VTlRFUl9SRVNVTUUJ CSAgICAoMTw8MCkKKworI2RlZmluZSBHRU43X09BQlVGRkVSIF9NTUlPKDB4MjNCMCkgLyogUi9X ICovCisjZGVmaW5lICBHRU43X09BQlVGRkVSX09WRVJSVU5fRElTQUJMRQkgICAgKDE8PDMpCisj ZGVmaW5lICBHRU43X09BQlVGRkVSX0VER0VfVFJJR0dFUgkgICAgKDE8PDIpCisjZGVmaW5lICBH RU43X09BQlVGRkVSX1NUT1BfUkVTVU1FX0VOQUJMRSAgICgxPDwxKQorI2RlZmluZSAgR0VON19P QUJVRkZFUl9SRVNVTUUJCSAgICAoMTw8MCkKKworI2RlZmluZSBHRU44X09BQlVGRkVSIF9NTUlP KDB4MmIxNCkKKworI2RlZmluZSBHRU43X09BU1RBVFVTMSBfTU1JTygweDIzNjQpCisjZGVmaW5l ICBHRU43X09BU1RBVFVTMV9UQUlMX01BU0sJICAgIDB4ZmZmZmZmYzAKKyNkZWZpbmUgIEdFTjdf T0FTVEFUVVMxX0NPVU5URVJfT1ZFUkZMT1cgICAgKDE8PDIpCisjZGVmaW5lICBHRU43X09BU1RB VFVTMV9PQUJVRkZFUl9PVkVSRkxPVyAgICgxPDwxKQorI2RlZmluZSAgR0VON19PQVNUQVRVUzFf UkVQT1JUX0xPU1QJICAgICgxPDwwKQorCisjZGVmaW5lIEdFTjdfT0FTVEFUVVMyIF9NTUlPKDB4 MjM2OCkKKyNkZWZpbmUgR0VON19PQVNUQVRVUzJfSEVBRF9NQVNLICAgIDB4ZmZmZmZmYzAKKwor I2RlZmluZSBHRU44X09BU1RBVFVTIF9NTUlPKDB4MmIwOCkKKyNkZWZpbmUgIEdFTjhfT0FTVEFU VVNfT1ZFUlJVTl9TVEFUVVMJICAgICgxPDwzKQorI2RlZmluZSAgR0VOOF9PQVNUQVRVU19DT1VO VEVSX09WRVJGTE9XICAgICAoMTw8MikKKyNkZWZpbmUgIEdFTjhfT0FTVEFUVVNfT0FCVUZGRVJf T1ZFUkZMT1cgICAgKDE8PDEpCisjZGVmaW5lICBHRU44X09BU1RBVFVTX1JFUE9SVF9MT1NUCSAg ICAoMTw8MCkKKworI2RlZmluZSBHRU44X09BSEVBRFBUUiBfTU1JTygweDJCMEMpCisjZGVmaW5l IEdFTjhfT0FUQUlMUFRSIF9NTUlPKDB4MkIxMCkKKworI2RlZmluZSBPQUJVRkZFUl9TSVpFXzEy OEsgICgwPDwzKQorI2RlZmluZSBPQUJVRkZFUl9TSVpFXzI1NksgICgxPDwzKQorI2RlZmluZSBP QUJVRkZFUl9TSVpFXzUxMksgICgyPDwzKQorI2RlZmluZSBPQUJVRkZFUl9TSVpFXzFNICAgICgz PDwzKQorI2RlZmluZSBPQUJVRkZFUl9TSVpFXzJNICAgICg0PDwzKQorI2RlZmluZSBPQUJVRkZF Ul9TSVpFXzRNICAgICg1PDwzKQorI2RlZmluZSBPQUJVRkZFUl9TSVpFXzhNICAgICg2PDwzKQor I2RlZmluZSBPQUJVRkZFUl9TSVpFXzE2TSAgICg3PDwzKQorCisjZGVmaW5lIE9BX01FTV9TRUxF Q1RfR0dUVCAgKDE8PDApCisKKyNkZWZpbmUgRVVfUEVSRl9DTlRMMAkgICAgX01NSU8oMHhlNDU4 KQorCisjZGVmaW5lIEdEVF9DSElDS0VOX0JJVFMgICAgX01NSU8oMHg5ODQwKQorI2RlZmluZSBH VF9OT0FfRU5BQkxFCSAgICAweDAwMDAwMDgwCisKKy8qCisgKiBPQSBCb29sZWFuIHN0YXRlCisg Ki8KKworI2RlZmluZSBPQVJFUE9SVFRSSUcxIF9NTUlPKDB4Mjc0MCkKKyNkZWZpbmUgT0FSRVBP UlRUUklHMV9USFJFU0hPTERfTUFTSyAweGZmZmYKKyNkZWZpbmUgT0FSRVBPUlRUUklHMV9FREdF X0xFVkVMX1RSSUdFUl9TRUxFQ1RfTUFTSyAweGZmZmYwMDAwIC8qIDA9bGV2ZWwgKi8KKworI2Rl ZmluZSBPQVJFUE9SVFRSSUcyIF9NTUlPKDB4Mjc0NCkKKyNkZWZpbmUgT0FSRVBPUlRUUklHMl9J TlZFUlRfQV8wICAoMTw8MCkKKyNkZWZpbmUgT0FSRVBPUlRUUklHMl9JTlZFUlRfQV8xICAoMTw8 MSkKKyNkZWZpbmUgT0FSRVBPUlRUUklHMl9JTlZFUlRfQV8yICAoMTw8MikKKyNkZWZpbmUgT0FS RVBPUlRUUklHMl9JTlZFUlRfQV8zICAoMTw8MykKKyNkZWZpbmUgT0FSRVBPUlRUUklHMl9JTlZF UlRfQV80ICAoMTw8NCkKKyNkZWZpbmUgT0FSRVBPUlRUUklHMl9JTlZFUlRfQV81ICAoMTw8NSkK KyNkZWZpbmUgT0FSRVBPUlRUUklHMl9JTlZFUlRfQV82ICAoMTw8NikKKyNkZWZpbmUgT0FSRVBP UlRUUklHMl9JTlZFUlRfQV83ICAoMTw8NykKKyNkZWZpbmUgT0FSRVBPUlRUUklHMl9JTlZFUlRf QV84ICAoMTw8OCkKKyNkZWZpbmUgT0FSRVBPUlRUUklHMl9JTlZFUlRfQV85ICAoMTw8OSkKKyNk ZWZpbmUgT0FSRVBPUlRUUklHMl9JTlZFUlRfQV8xMCAoMTw8MTApCisjZGVmaW5lIE9BUkVQT1JU VFJJRzJfSU5WRVJUX0FfMTEgKDE8PDExKQorI2RlZmluZSBPQVJFUE9SVFRSSUcyX0lOVkVSVF9B XzEyICgxPDwxMikKKyNkZWZpbmUgT0FSRVBPUlRUUklHMl9JTlZFUlRfQV8xMyAoMTw8MTMpCisj ZGVmaW5lIE9BUkVQT1JUVFJJRzJfSU5WRVJUX0FfMTQgKDE8PDE0KQorI2RlZmluZSBPQVJFUE9S VFRSSUcyX0lOVkVSVF9BXzE1ICgxPDwxNSkKKyNkZWZpbmUgT0FSRVBPUlRUUklHMl9JTlZFUlRf Ql8wICAoMTw8MTYpCisjZGVmaW5lIE9BUkVQT1JUVFJJRzJfSU5WRVJUX0JfMSAgKDE8PDE3KQor I2RlZmluZSBPQVJFUE9SVFRSSUcyX0lOVkVSVF9CXzIgICgxPDwxOCkKKyNkZWZpbmUgT0FSRVBP UlRUUklHMl9JTlZFUlRfQl8zICAoMTw8MTkpCisjZGVmaW5lIE9BUkVQT1JUVFJJRzJfSU5WRVJU X0NfMCAgKDE8PDIwKQorI2RlZmluZSBPQVJFUE9SVFRSSUcyX0lOVkVSVF9DXzEgICgxPDwyMSkK KyNkZWZpbmUgT0FSRVBPUlRUUklHMl9JTlZFUlRfRF8wICAoMTw8MjIpCisjZGVmaW5lIE9BUkVQ T1JUVFJJRzJfVEhSRVNIT0xEX0VOQUJMRQkgICAgKDE8PDIzKQorI2RlZmluZSBPQVJFUE9SVFRS SUcyX1JFUE9SVF9UUklHR0VSX0VOQUJMRSAoMTw8MzEpCisKKyNkZWZpbmUgT0FSRVBPUlRUUklH MyBfTU1JTygweDI3NDgpCisjZGVmaW5lIE9BUkVQT1JUVFJJRzNfTk9BX1NFTEVDVF9NQVNLCSAg ICAweGYKKyNkZWZpbmUgT0FSRVBPUlRUUklHM19OT0FfU0VMRUNUXzhfU0hJRlQgICAgMAorI2Rl ZmluZSBPQVJFUE9SVFRSSUczX05PQV9TRUxFQ1RfOV9TSElGVCAgICA0CisjZGVmaW5lIE9BUkVQ T1JUVFJJRzNfTk9BX1NFTEVDVF8xMF9TSElGVCAgIDgKKyNkZWZpbmUgT0FSRVBPUlRUUklHM19O T0FfU0VMRUNUXzExX1NISUZUICAgMTIKKyNkZWZpbmUgT0FSRVBPUlRUUklHM19OT0FfU0VMRUNU XzEyX1NISUZUICAgMTYKKyNkZWZpbmUgT0FSRVBPUlRUUklHM19OT0FfU0VMRUNUXzEzX1NISUZU ICAgMjAKKyNkZWZpbmUgT0FSRVBPUlRUUklHM19OT0FfU0VMRUNUXzE0X1NISUZUICAgMjQKKyNk ZWZpbmUgT0FSRVBPUlRUUklHM19OT0FfU0VMRUNUXzE1X1NISUZUICAgMjgKKworI2RlZmluZSBP QVJFUE9SVFRSSUc0IF9NTUlPKDB4Mjc0YykKKyNkZWZpbmUgT0FSRVBPUlRUUklHNF9OT0FfU0VM RUNUX01BU0sJICAgIDB4ZgorI2RlZmluZSBPQVJFUE9SVFRSSUc0X05PQV9TRUxFQ1RfMF9TSElG VCAgICAwCisjZGVmaW5lIE9BUkVQT1JUVFJJRzRfTk9BX1NFTEVDVF8xX1NISUZUICAgIDQKKyNk ZWZpbmUgT0FSRVBPUlRUUklHNF9OT0FfU0VMRUNUXzJfU0hJRlQgICAgOAorI2RlZmluZSBPQVJF UE9SVFRSSUc0X05PQV9TRUxFQ1RfM19TSElGVCAgICAxMgorI2RlZmluZSBPQVJFUE9SVFRSSUc0 X05PQV9TRUxFQ1RfNF9TSElGVCAgICAxNgorI2RlZmluZSBPQVJFUE9SVFRSSUc0X05PQV9TRUxF Q1RfNV9TSElGVCAgICAyMAorI2RlZmluZSBPQVJFUE9SVFRSSUc0X05PQV9TRUxFQ1RfNl9TSElG VCAgICAyNAorI2RlZmluZSBPQVJFUE9SVFRSSUc0X05PQV9TRUxFQ1RfN19TSElGVCAgICAyOAor CisjZGVmaW5lIE9BUkVQT1JUVFJJRzUgX01NSU8oMHgyNzUwKQorI2RlZmluZSBPQVJFUE9SVFRS SUc1X1RIUkVTSE9MRF9NQVNLIDB4ZmZmZgorI2RlZmluZSBPQVJFUE9SVFRSSUc1X0VER0VfTEVW RUxfVFJJR0VSX1NFTEVDVF9NQVNLIDB4ZmZmZjAwMDAgLyogMD1sZXZlbCAqLworCisjZGVmaW5l IE9BUkVQT1JUVFJJRzYgX01NSU8oMHgyNzU0KQorI2RlZmluZSBPQVJFUE9SVFRSSUc2X0lOVkVS VF9BXzAgICgxPDwwKQorI2RlZmluZSBPQVJFUE9SVFRSSUc2X0lOVkVSVF9BXzEgICgxPDwxKQor I2RlZmluZSBPQVJFUE9SVFRSSUc2X0lOVkVSVF9BXzIgICgxPDwyKQorI2RlZmluZSBPQVJFUE9S VFRSSUc2X0lOVkVSVF9BXzMgICgxPDwzKQorI2RlZmluZSBPQVJFUE9SVFRSSUc2X0lOVkVSVF9B XzQgICgxPDw0KQorI2RlZmluZSBPQVJFUE9SVFRSSUc2X0lOVkVSVF9BXzUgICgxPDw1KQorI2Rl ZmluZSBPQVJFUE9SVFRSSUc2X0lOVkVSVF9BXzYgICgxPDw2KQorI2RlZmluZSBPQVJFUE9SVFRS SUc2X0lOVkVSVF9BXzcgICgxPDw3KQorI2RlZmluZSBPQVJFUE9SVFRSSUc2X0lOVkVSVF9BXzgg ICgxPDw4KQorI2RlZmluZSBPQVJFUE9SVFRSSUc2X0lOVkVSVF9BXzkgICgxPDw5KQorI2RlZmlu ZSBPQVJFUE9SVFRSSUc2X0lOVkVSVF9BXzEwICgxPDwxMCkKKyNkZWZpbmUgT0FSRVBPUlRUUklH Nl9JTlZFUlRfQV8xMSAoMTw8MTEpCisjZGVmaW5lIE9BUkVQT1JUVFJJRzZfSU5WRVJUX0FfMTIg KDE8PDEyKQorI2RlZmluZSBPQVJFUE9SVFRSSUc2X0lOVkVSVF9BXzEzICgxPDwxMykKKyNkZWZp bmUgT0FSRVBPUlRUUklHNl9JTlZFUlRfQV8xNCAoMTw8MTQpCisjZGVmaW5lIE9BUkVQT1JUVFJJ RzZfSU5WRVJUX0FfMTUgKDE8PDE1KQorI2RlZmluZSBPQVJFUE9SVFRSSUc2X0lOVkVSVF9CXzAg ICgxPDwxNikKKyNkZWZpbmUgT0FSRVBPUlRUUklHNl9JTlZFUlRfQl8xICAoMTw8MTcpCisjZGVm aW5lIE9BUkVQT1JUVFJJRzZfSU5WRVJUX0JfMiAgKDE8PDE4KQorI2RlZmluZSBPQVJFUE9SVFRS SUc2X0lOVkVSVF9CXzMgICgxPDwxOSkKKyNkZWZpbmUgT0FSRVBPUlRUUklHNl9JTlZFUlRfQ18w ICAoMTw8MjApCisjZGVmaW5lIE9BUkVQT1JUVFJJRzZfSU5WRVJUX0NfMSAgKDE8PDIxKQorI2Rl ZmluZSBPQVJFUE9SVFRSSUc2X0lOVkVSVF9EXzAgICgxPDwyMikKKyNkZWZpbmUgT0FSRVBPUlRU UklHNl9USFJFU0hPTERfRU5BQkxFCSAgICAoMTw8MjMpCisjZGVmaW5lIE9BUkVQT1JUVFJJRzZf UkVQT1JUX1RSSUdHRVJfRU5BQkxFICgxPDwzMSkKKworI2RlZmluZSBPQVJFUE9SVFRSSUc3IF9N TUlPKDB4Mjc1OCkKKyNkZWZpbmUgT0FSRVBPUlRUUklHN19OT0FfU0VMRUNUX01BU0sJICAgIDB4 ZgorI2RlZmluZSBPQVJFUE9SVFRSSUc3X05PQV9TRUxFQ1RfOF9TSElGVCAgICAwCisjZGVmaW5l IE9BUkVQT1JUVFJJRzdfTk9BX1NFTEVDVF85X1NISUZUICAgIDQKKyNkZWZpbmUgT0FSRVBPUlRU UklHN19OT0FfU0VMRUNUXzEwX1NISUZUICAgOAorI2RlZmluZSBPQVJFUE9SVFRSSUc3X05PQV9T RUxFQ1RfMTFfU0hJRlQgICAxMgorI2RlZmluZSBPQVJFUE9SVFRSSUc3X05PQV9TRUxFQ1RfMTJf U0hJRlQgICAxNgorI2RlZmluZSBPQVJFUE9SVFRSSUc3X05PQV9TRUxFQ1RfMTNfU0hJRlQgICAy MAorI2RlZmluZSBPQVJFUE9SVFRSSUc3X05PQV9TRUxFQ1RfMTRfU0hJRlQgICAyNAorI2RlZmlu ZSBPQVJFUE9SVFRSSUc3X05PQV9TRUxFQ1RfMTVfU0hJRlQgICAyOAorCisjZGVmaW5lIE9BUkVQ T1JUVFJJRzggX01NSU8oMHgyNzVjKQorI2RlZmluZSBPQVJFUE9SVFRSSUc4X05PQV9TRUxFQ1Rf TUFTSwkgICAgMHhmCisjZGVmaW5lIE9BUkVQT1JUVFJJRzhfTk9BX1NFTEVDVF8wX1NISUZUICAg IDAKKyNkZWZpbmUgT0FSRVBPUlRUUklHOF9OT0FfU0VMRUNUXzFfU0hJRlQgICAgNAorI2RlZmlu ZSBPQVJFUE9SVFRSSUc4X05PQV9TRUxFQ1RfMl9TSElGVCAgICA4CisjZGVmaW5lIE9BUkVQT1JU VFJJRzhfTk9BX1NFTEVDVF8zX1NISUZUICAgIDEyCisjZGVmaW5lIE9BUkVQT1JUVFJJRzhfTk9B X1NFTEVDVF80X1NISUZUICAgIDE2CisjZGVmaW5lIE9BUkVQT1JUVFJJRzhfTk9BX1NFTEVDVF81 X1NISUZUICAgIDIwCisjZGVmaW5lIE9BUkVQT1JUVFJJRzhfTk9BX1NFTEVDVF82X1NISUZUICAg IDI0CisjZGVmaW5lIE9BUkVQT1JUVFJJRzhfTk9BX1NFTEVDVF83X1NISUZUICAgIDI4CisKKyNk ZWZpbmUgT0FTVEFSVFRSSUcxIF9NTUlPKDB4MjcxMCkKKyNkZWZpbmUgT0FTVEFSVFRSSUcxX1RI UkVTSE9MRF9DT1VOVF9NQVNLX01CWiAweGZmZmYwMDAwCisjZGVmaW5lIE9BU1RBUlRUUklHMV9U SFJFU0hPTERfTUFTSwkgICAgICAweGZmZmYKKworI2RlZmluZSBPQVNUQVJUVFJJRzIgX01NSU8o MHgyNzE0KQorI2RlZmluZSBPQVNUQVJUVFJJRzJfSU5WRVJUX0FfMCAoMTw8MCkKKyNkZWZpbmUg T0FTVEFSVFRSSUcyX0lOVkVSVF9BXzEgKDE8PDEpCisjZGVmaW5lIE9BU1RBUlRUUklHMl9JTlZF UlRfQV8yICgxPDwyKQorI2RlZmluZSBPQVNUQVJUVFJJRzJfSU5WRVJUX0FfMyAoMTw8MykKKyNk ZWZpbmUgT0FTVEFSVFRSSUcyX0lOVkVSVF9BXzQgKDE8PDQpCisjZGVmaW5lIE9BU1RBUlRUUklH Ml9JTlZFUlRfQV81ICgxPDw1KQorI2RlZmluZSBPQVNUQVJUVFJJRzJfSU5WRVJUX0FfNiAoMTw8 NikKKyNkZWZpbmUgT0FTVEFSVFRSSUcyX0lOVkVSVF9BXzcgKDE8PDcpCisjZGVmaW5lIE9BU1RB UlRUUklHMl9JTlZFUlRfQV84ICgxPDw4KQorI2RlZmluZSBPQVNUQVJUVFJJRzJfSU5WRVJUX0Ff OSAoMTw8OSkKKyNkZWZpbmUgT0FTVEFSVFRSSUcyX0lOVkVSVF9BXzEwICgxPDwxMCkKKyNkZWZp bmUgT0FTVEFSVFRSSUcyX0lOVkVSVF9BXzExICgxPDwxMSkKKyNkZWZpbmUgT0FTVEFSVFRSSUcy X0lOVkVSVF9BXzEyICgxPDwxMikKKyNkZWZpbmUgT0FTVEFSVFRSSUcyX0lOVkVSVF9BXzEzICgx PDwxMykKKyNkZWZpbmUgT0FTVEFSVFRSSUcyX0lOVkVSVF9BXzE0ICgxPDwxNCkKKyNkZWZpbmUg T0FTVEFSVFRSSUcyX0lOVkVSVF9BXzE1ICgxPDwxNSkKKyNkZWZpbmUgT0FTVEFSVFRSSUcyX0lO VkVSVF9CXzAgKDE8PDE2KQorI2RlZmluZSBPQVNUQVJUVFJJRzJfSU5WRVJUX0JfMSAoMTw8MTcp CisjZGVmaW5lIE9BU1RBUlRUUklHMl9JTlZFUlRfQl8yICgxPDwxOCkKKyNkZWZpbmUgT0FTVEFS VFRSSUcyX0lOVkVSVF9CXzMgKDE8PDE5KQorI2RlZmluZSBPQVNUQVJUVFJJRzJfSU5WRVJUX0Nf MCAoMTw8MjApCisjZGVmaW5lIE9BU1RBUlRUUklHMl9JTlZFUlRfQ18xICgxPDwyMSkKKyNkZWZp bmUgT0FTVEFSVFRSSUcyX0lOVkVSVF9EXzAgKDE8PDIyKQorI2RlZmluZSBPQVNUQVJUVFJJRzJf VEhSRVNIT0xEX0VOQUJMRQkgICAgKDE8PDIzKQorI2RlZmluZSBPQVNUQVJUVFJJRzJfU1RBUlRf VFJJR19GTEFHX01CWiAgICAoMTw8MjQpCisjZGVmaW5lIE9BU1RBUlRUUklHMl9FVkVOVF9TRUxF Q1RfMCAgKDE8PDI4KQorI2RlZmluZSBPQVNUQVJUVFJJRzJfRVZFTlRfU0VMRUNUXzEgICgxPDwy OSkKKyNkZWZpbmUgT0FTVEFSVFRSSUcyX0VWRU5UX1NFTEVDVF8yICAoMTw8MzApCisjZGVmaW5l IE9BU1RBUlRUUklHMl9FVkVOVF9TRUxFQ1RfMyAgKDE8PDMxKQorCisjZGVmaW5lIE9BU1RBUlRU UklHMyBfTU1JTygweDI3MTgpCisjZGVmaW5lIE9BU1RBUlRUUklHM19OT0FfU0VMRUNUX01BU0sJ ICAgMHhmCisjZGVmaW5lIE9BU1RBUlRUUklHM19OT0FfU0VMRUNUXzhfU0hJRlQgICAgMAorI2Rl ZmluZSBPQVNUQVJUVFJJRzNfTk9BX1NFTEVDVF85X1NISUZUICAgIDQKKyNkZWZpbmUgT0FTVEFS VFRSSUczX05PQV9TRUxFQ1RfMTBfU0hJRlQgICA4CisjZGVmaW5lIE9BU1RBUlRUUklHM19OT0Ff U0VMRUNUXzExX1NISUZUICAgMTIKKyNkZWZpbmUgT0FTVEFSVFRSSUczX05PQV9TRUxFQ1RfMTJf U0hJRlQgICAxNgorI2RlZmluZSBPQVNUQVJUVFJJRzNfTk9BX1NFTEVDVF8xM19TSElGVCAgIDIw CisjZGVmaW5lIE9BU1RBUlRUUklHM19OT0FfU0VMRUNUXzE0X1NISUZUICAgMjQKKyNkZWZpbmUg T0FTVEFSVFRSSUczX05PQV9TRUxFQ1RfMTVfU0hJRlQgICAyOAorCisjZGVmaW5lIE9BU1RBUlRU UklHNCBfTU1JTygweDI3MWMpCisjZGVmaW5lIE9BU1RBUlRUUklHNF9OT0FfU0VMRUNUX01BU0sJ ICAgIDB4ZgorI2RlZmluZSBPQVNUQVJUVFJJRzRfTk9BX1NFTEVDVF8wX1NISUZUICAgIDAKKyNk ZWZpbmUgT0FTVEFSVFRSSUc0X05PQV9TRUxFQ1RfMV9TSElGVCAgICA0CisjZGVmaW5lIE9BU1RB UlRUUklHNF9OT0FfU0VMRUNUXzJfU0hJRlQgICAgOAorI2RlZmluZSBPQVNUQVJUVFJJRzRfTk9B X1NFTEVDVF8zX1NISUZUICAgIDEyCisjZGVmaW5lIE9BU1RBUlRUUklHNF9OT0FfU0VMRUNUXzRf U0hJRlQgICAgMTYKKyNkZWZpbmUgT0FTVEFSVFRSSUc0X05PQV9TRUxFQ1RfNV9TSElGVCAgICAy MAorI2RlZmluZSBPQVNUQVJUVFJJRzRfTk9BX1NFTEVDVF82X1NISUZUICAgIDI0CisjZGVmaW5l IE9BU1RBUlRUUklHNF9OT0FfU0VMRUNUXzdfU0hJRlQgICAgMjgKKworI2RlZmluZSBPQVNUQVJU VFJJRzUgX01NSU8oMHgyNzIwKQorI2RlZmluZSBPQVNUQVJUVFJJRzVfVEhSRVNIT0xEX0NPVU5U X01BU0tfTUJaIDB4ZmZmZjAwMDAKKyNkZWZpbmUgT0FTVEFSVFRSSUc1X1RIUkVTSE9MRF9NQVNL CSAgICAgIDB4ZmZmZgorCisjZGVmaW5lIE9BU1RBUlRUUklHNiBfTU1JTygweDI3MjQpCisjZGVm aW5lIE9BU1RBUlRUUklHNl9JTlZFUlRfQV8wICgxPDwwKQorI2RlZmluZSBPQVNUQVJUVFJJRzZf SU5WRVJUX0FfMSAoMTw8MSkKKyNkZWZpbmUgT0FTVEFSVFRSSUc2X0lOVkVSVF9BXzIgKDE8PDIp CisjZGVmaW5lIE9BU1RBUlRUUklHNl9JTlZFUlRfQV8zICgxPDwzKQorI2RlZmluZSBPQVNUQVJU VFJJRzZfSU5WRVJUX0FfNCAoMTw8NCkKKyNkZWZpbmUgT0FTVEFSVFRSSUc2X0lOVkVSVF9BXzUg KDE8PDUpCisjZGVmaW5lIE9BU1RBUlRUUklHNl9JTlZFUlRfQV82ICgxPDw2KQorI2RlZmluZSBP QVNUQVJUVFJJRzZfSU5WRVJUX0FfNyAoMTw8NykKKyNkZWZpbmUgT0FTVEFSVFRSSUc2X0lOVkVS VF9BXzggKDE8PDgpCisjZGVmaW5lIE9BU1RBUlRUUklHNl9JTlZFUlRfQV85ICgxPDw5KQorI2Rl ZmluZSBPQVNUQVJUVFJJRzZfSU5WRVJUX0FfMTAgKDE8PDEwKQorI2RlZmluZSBPQVNUQVJUVFJJ RzZfSU5WRVJUX0FfMTEgKDE8PDExKQorI2RlZmluZSBPQVNUQVJUVFJJRzZfSU5WRVJUX0FfMTIg KDE8PDEyKQorI2RlZmluZSBPQVNUQVJUVFJJRzZfSU5WRVJUX0FfMTMgKDE8PDEzKQorI2RlZmlu ZSBPQVNUQVJUVFJJRzZfSU5WRVJUX0FfMTQgKDE8PDE0KQorI2RlZmluZSBPQVNUQVJUVFJJRzZf SU5WRVJUX0FfMTUgKDE8PDE1KQorI2RlZmluZSBPQVNUQVJUVFJJRzZfSU5WRVJUX0JfMCAoMTw8 MTYpCisjZGVmaW5lIE9BU1RBUlRUUklHNl9JTlZFUlRfQl8xICgxPDwxNykKKyNkZWZpbmUgT0FT VEFSVFRSSUc2X0lOVkVSVF9CXzIgKDE8PDE4KQorI2RlZmluZSBPQVNUQVJUVFJJRzZfSU5WRVJU X0JfMyAoMTw8MTkpCisjZGVmaW5lIE9BU1RBUlRUUklHNl9JTlZFUlRfQ18wICgxPDwyMCkKKyNk ZWZpbmUgT0FTVEFSVFRSSUc2X0lOVkVSVF9DXzEgKDE8PDIxKQorI2RlZmluZSBPQVNUQVJUVFJJ RzZfSU5WRVJUX0RfMCAoMTw8MjIpCisjZGVmaW5lIE9BU1RBUlRUUklHNl9USFJFU0hPTERfRU5B QkxFCSAgICAoMTw8MjMpCisjZGVmaW5lIE9BU1RBUlRUUklHNl9TVEFSVF9UUklHX0ZMQUdfTUJa ICAgICgxPDwyNCkKKyNkZWZpbmUgT0FTVEFSVFRSSUc2X0VWRU5UX1NFTEVDVF80ICAoMTw8Mjgp CisjZGVmaW5lIE9BU1RBUlRUUklHNl9FVkVOVF9TRUxFQ1RfNSAgKDE8PDI5KQorI2RlZmluZSBP QVNUQVJUVFJJRzZfRVZFTlRfU0VMRUNUXzYgICgxPDwzMCkKKyNkZWZpbmUgT0FTVEFSVFRSSUc2 X0VWRU5UX1NFTEVDVF83ICAoMTw8MzEpCisKKyNkZWZpbmUgT0FTVEFSVFRSSUc3IF9NTUlPKDB4 MjcyOCkKKyNkZWZpbmUgT0FTVEFSVFRSSUc3X05PQV9TRUxFQ1RfTUFTSwkgICAweGYKKyNkZWZp bmUgT0FTVEFSVFRSSUc3X05PQV9TRUxFQ1RfOF9TSElGVCAgICAwCisjZGVmaW5lIE9BU1RBUlRU UklHN19OT0FfU0VMRUNUXzlfU0hJRlQgICAgNAorI2RlZmluZSBPQVNUQVJUVFJJRzdfTk9BX1NF TEVDVF8xMF9TSElGVCAgIDgKKyNkZWZpbmUgT0FTVEFSVFRSSUc3X05PQV9TRUxFQ1RfMTFfU0hJ RlQgICAxMgorI2RlZmluZSBPQVNUQVJUVFJJRzdfTk9BX1NFTEVDVF8xMl9TSElGVCAgIDE2Cisj ZGVmaW5lIE9BU1RBUlRUUklHN19OT0FfU0VMRUNUXzEzX1NISUZUICAgMjAKKyNkZWZpbmUgT0FT VEFSVFRSSUc3X05PQV9TRUxFQ1RfMTRfU0hJRlQgICAyNAorI2RlZmluZSBPQVNUQVJUVFJJRzdf Tk9BX1NFTEVDVF8xNV9TSElGVCAgIDI4CisKKyNkZWZpbmUgT0FTVEFSVFRSSUc4IF9NTUlPKDB4 MjcyYykKKyNkZWZpbmUgT0FTVEFSVFRSSUc4X05PQV9TRUxFQ1RfTUFTSwkgICAweGYKKyNkZWZp bmUgT0FTVEFSVFRSSUc4X05PQV9TRUxFQ1RfMF9TSElGVCAgICAwCisjZGVmaW5lIE9BU1RBUlRU UklHOF9OT0FfU0VMRUNUXzFfU0hJRlQgICAgNAorI2RlZmluZSBPQVNUQVJUVFJJRzhfTk9BX1NF TEVDVF8yX1NISUZUICAgIDgKKyNkZWZpbmUgT0FTVEFSVFRSSUc4X05PQV9TRUxFQ1RfM19TSElG VCAgICAxMgorI2RlZmluZSBPQVNUQVJUVFJJRzhfTk9BX1NFTEVDVF80X1NISUZUICAgIDE2Cisj ZGVmaW5lIE9BU1RBUlRUUklHOF9OT0FfU0VMRUNUXzVfU0hJRlQgICAgMjAKKyNkZWZpbmUgT0FT VEFSVFRSSUc4X05PQV9TRUxFQ1RfNl9TSElGVCAgICAyNAorI2RlZmluZSBPQVNUQVJUVFJJRzhf Tk9BX1NFTEVDVF83X1NISUZUICAgIDI4CisKKy8qIENFQ1hfMCAqLworI2RlZmluZSBPQUNFQ19D T01QQVJFX0xFU1NfT1JfRVFVQUwJNgorI2RlZmluZSBPQUNFQ19DT01QQVJFX05PVF9FUVVBTAkJ NQorI2RlZmluZSBPQUNFQ19DT01QQVJFX0xFU1NfVEhBTgkJNAorI2RlZmluZSBPQUNFQ19DT01Q QVJFX0dSRUFURVJfT1JfRVFVQUwJMworI2RlZmluZSBPQUNFQ19DT01QQVJFX0VRVUFMCQkyCisj ZGVmaW5lIE9BQ0VDX0NPTVBBUkVfR1JFQVRFUl9USEFOCTEKKyNkZWZpbmUgT0FDRUNfQ09NUEFS RV9BTllfRVFVQUwJCTAKKworI2RlZmluZSBPQUNFQ19DT01QQVJFX1ZBTFVFX01BU0sgICAgMHhm ZmZmCisjZGVmaW5lIE9BQ0VDX0NPTVBBUkVfVkFMVUVfU0hJRlQgICAzCisKKyNkZWZpbmUgT0FD RUNfU0VMRUNUX05PQQkoMDw8MTkpCisjZGVmaW5lIE9BQ0VDX1NFTEVDVF9QUkVWCSgxPDwxOSkK KyNkZWZpbmUgT0FDRUNfU0VMRUNUX0JPT0xFQU4JKDI8PDE5KQorCisvKiBDRUNYXzEgKi8KKyNk ZWZpbmUgT0FDRUNfTUFTS19NQVNLCQkgICAgMHhmZmZmCisjZGVmaW5lIE9BQ0VDX0NPTlNJREVS QVRJT05TX01BU0sgICAweGZmZmYKKyNkZWZpbmUgT0FDRUNfQ09OU0lERVJBVElPTlNfU0hJRlQg IDE2CisKKyNkZWZpbmUgT0FDRUMwXzAgX01NSU8oMHgyNzcwKQorI2RlZmluZSBPQUNFQzBfMSBf TU1JTygweDI3NzQpCisjZGVmaW5lIE9BQ0VDMV8wIF9NTUlPKDB4Mjc3OCkKKyNkZWZpbmUgT0FD RUMxXzEgX01NSU8oMHgyNzdjKQorI2RlZmluZSBPQUNFQzJfMCBfTU1JTygweDI3ODApCisjZGVm aW5lIE9BQ0VDMl8xIF9NTUlPKDB4Mjc4NCkKKyNkZWZpbmUgT0FDRUMzXzAgX01NSU8oMHgyNzg4 KQorI2RlZmluZSBPQUNFQzNfMSBfTU1JTygweDI3OGMpCisjZGVmaW5lIE9BQ0VDNF8wIF9NTUlP KDB4Mjc5MCkKKyNkZWZpbmUgT0FDRUM0XzEgX01NSU8oMHgyNzk0KQorI2RlZmluZSBPQUNFQzVf MCBfTU1JTygweDI3OTgpCisjZGVmaW5lIE9BQ0VDNV8xIF9NTUlPKDB4Mjc5YykKKyNkZWZpbmUg T0FDRUM2XzAgX01NSU8oMHgyN2EwKQorI2RlZmluZSBPQUNFQzZfMSBfTU1JTygweDI3YTQpCisj ZGVmaW5lIE9BQ0VDN18wIF9NTUlPKDB4MjdhOCkKKyNkZWZpbmUgT0FDRUM3XzEgX01NSU8oMHgy N2FjKQorCiAKICNkZWZpbmUgX0dFTjdfUElQRUFfREVfTE9BRF9TTAkweDcwMDY4CiAjZGVmaW5l IF9HRU43X1BJUEVCX0RFX0xPQURfU0wJMHg3MTA2OApAQCAtNjkxNCw2ICs3MjUxLDcgQEAgZW51 bSB7CiAjIGRlZmluZSBHRU42X1JDQ1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxMSkK IAogI2RlZmluZSBHRU42X1VDR0NUTDMJCQkJX01NSU8oMHg5NDA4KQorIyBkZWZpbmUgR0VONl9P QUNTVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDIwKQogCiAjZGVmaW5lIEdFTjdfVUNH Q1RMNAkJCQlfTU1JTygweDk0MGMpCiAjZGVmaW5lICBHRU43X0wzQkFOSzJYX0NMT0NLX0dBVEVf RElTQUJMRQkoMTw8MjUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgg Yi9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKaW5kZXggOThjZDQ5My4uODJkNjIzOSAxMDA2 NDQKLS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCisrKyBiL2luY2x1ZGUvdWFwaS9k cm0vaTkxNV9kcm0uaApAQCAtMTIyNCw2ICsxMjI0LDE4IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1f Y29udGV4dF9wYXJhbSB7CiAJX191NjQgdmFsdWU7CiB9OwogCitlbnVtIGRybV9pOTE1X29hX2Zv cm1hdCB7CisJSTkxNV9PQV9GT1JNQVRfQTEzID0gMSwKKwlJOTE1X09BX0ZPUk1BVF9BMjksCisJ STkxNV9PQV9GT1JNQVRfQTEzX0I4X0M4LAorCUk5MTVfT0FfRk9STUFUX0I0X0M4LAorCUk5MTVf T0FfRk9STUFUX0E0NV9COF9DOCwKKwlJOTE1X09BX0ZPUk1BVF9CNF9DOF9BMTYsCisJSTkxNV9P QV9GT1JNQVRfQzRfQjgsCisKKwlJOTE1X09BX0ZPUk1BVF9NQVgJICAgIC8qIG5vbi1BQkkgKi8K K307CisKIGVudW0gZHJtX2k5MTVfcGVyZl9wcm9wZXJ0eV9pZCB7CiAJLyoqCiAJICogT3BlbiB0 aGUgc3RyZWFtIGZvciBhIHNwZWNpZmljIGNvbnRleHQgaGFuZGxlIChhcyB1c2VkIHdpdGgKQEAg LTEyMzIsNiArMTI0NCwzMiBAQCBlbnVtIGRybV9pOTE1X3BlcmZfcHJvcGVydHlfaWQgewogCSAq LwogCURSTV9JOTE1X1BFUkZfUFJPUF9DVFhfSEFORExFID0gMSwKIAorCS8qKgorCSAqIEEgdmFs dWUgb2YgMSByZXF1ZXN0cyB0aGUgaW5jbHVzaW9uIG9mIHJhdyBPQSB1bml0IHJlcG9ydHMgYXMK KwkgKiBwYXJ0IG9mIHN0cmVhbSBzYW1wbGVzLgorCSAqLworCURSTV9JOTE1X1BFUkZfUFJPUF9T QU1QTEVfT0EsCisKKwkvKioKKwkgKiBUaGUgdmFsdWUgc3BlY2lmaWVzIHdoaWNoIHNldCBvZiBP QSB1bml0IG1ldHJpY3Mgc2hvdWxkIGJlCisJICogYmUgY29uZmlndXJlZCwgZGVmaW5pbmcgdGhl IGNvbnRlbnRzIG9mIGFueSBPQSB1bml0IHJlcG9ydHMuCisJICovCisJRFJNX0k5MTVfUEVSRl9Q Uk9QX09BX01FVFJJQ1NfU0VULAorCisJLyoqCisJICogVGhlIHZhbHVlIHNwZWNpZmllcyB0aGUg c2l6ZSBhbmQgbGF5b3V0IG9mIE9BIHVuaXQgcmVwb3J0cy4KKwkgKi8KKwlEUk1fSTkxNV9QRVJG X1BST1BfT0FfRk9STUFULAorCisJLyoqCisJICogU3BlY2lmeWluZyB0aGlzIHByb3BlcnR5IGlt cGxpY2l0bHkgcmVxdWVzdHMgcGVyaW9kaWMgT0EgdW5pdAorCSAqIHNhbXBsaW5nIGFuZCAoYXQg bGVhc3Qgb24gSGFzd2VsbCkgdGhlIHNhbXBsaW5nIGZyZXF1ZW5jeSBpcyBkZXJpdmVkCisJICog ZnJvbSB0aGlzIGV4cG9uZW50IGFzIGZvbGxvd3M6CisJICoKKwkgKiAgIDgwbnMgKiAyXihwZXJp b2RfZXhwb25lbnQgKyAxKQorCSAqLworCURSTV9JOTE1X1BFUkZfUFJPUF9PQV9FWFBPTkVOVCwK KwogCURSTV9JOTE1X1BFUkZfUFJPUF9NQVggLyogbm9uLUFCSSAqLwogfTsKIApAQCAtMTI1MSw3 ICsxMjg5LDIzIEBAIHN0cnVjdCBkcm1faTkxNV9wZXJmX29wZW5fcGFyYW0gewogCV9fdTY0IF9f dXNlciBwcm9wZXJ0aWVzX3B0cjsKIH07CiAKKy8qKgorICogRW5hYmxlIGRhdGEgY2FwdHVyZSBm b3IgYSBzdHJlYW0gdGhhdCB3YXMgZWl0aGVyIG9wZW5lZCBpbiBhIGRpc2FibGVkIHN0YXRlCisg KiB2aWEgSTkxNV9QRVJGX0ZMQUdfRElTQUJMRUQgb3Igd2FzIGxhdGVyIGRpc2FibGVkIHZpYQor ICogSTkxNV9QRVJGX0lPQ1RMX0RJU0FCTEUuCisgKgorICogSXQgaXMgaW50ZW5kZWQgdG8gYmUg Y2hlYXBlciB0byBkaXNhYmxlIGFuZCBlbmFibGUgYSBzdHJlYW0gdGhhbiBpdCBtYXkgYmUKKyAq IHRvIGNsb3NlIGFuZCByZS1vcGVuIGEgc3RyZWFtIHdpdGggdGhlIHNhbWUgY29uZmlndXJhdGlv bi4KKyAqCisgKiBJdCdzIHVuZGVmaW5lZCB3aGV0aGVyIGFueSBwZW5kaW5nIGRhdGEgZm9yIHRo ZSBzdHJlYW0gd2lsbCBiZSBsb3N0LgorICovCiAjZGVmaW5lIEk5MTVfUEVSRl9JT0NUTF9FTkFC TEUJX0lPKCdpJywgMHgwKQorCisvKioKKyAqIERpc2FibGUgZGF0YSBjYXB0dXJlIGZvciBhIHN0 cmVhbS4KKyAqCisgKiBJdCBpcyBhbiBlcnJvciB0byB0cnkgYW5kIHJlYWQgYSBzdHJlYW0gdGhh dCBpcyBkaXNhYmxlZC4KKyAqLwogI2RlZmluZSBJOTE1X1BFUkZfSU9DVExfRElTQUJMRQlfSU8o J2knLCAweDEpCiAKIC8qKgpAQCAtMTI3NSwxNyArMTMyOSwzMCBAQCBlbnVtIGRybV9pOTE1X3Bl cmZfcmVjb3JkX3R5cGUgewogCSAqIGV2ZXJ5IHNhbXBsZS4KIAkgKgogCSAqIFRoZSBvcmRlciBv ZiB0aGVzZSBzYW1wbGUgcHJvcGVydGllcyBnaXZlbiBieSB1c2Vyc3BhY2UgaGFzIG5vCi0JICog YWZmZWN0IG9uIHRoZSBvcmRlcmluZyBvZiBkYXRhIHdpdGhpbiBhIHNhbXBsZS4gVGhlIG9yZGVy IHdpbGwgYmUKKwkgKiBhZmZlY3Qgb24gdGhlIG9yZGVyaW5nIG9mIGRhdGEgd2l0aGluIGEgc2Ft cGxlLiBUaGUgb3JkZXIgaXMKIAkgKiBkb2N1bWVudGVkIGhlcmUuCiAJICoKIAkgKiBzdHJ1Y3Qg ewogCSAqICAgICBzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9yZWNvcmRfaGVhZGVyIGhlYWRlcjsKIAkg KgotCSAqICAgICBUT0RPOiBpdGVtaXplIGV4dGVuc2libGUgc2FtcGxlIGRhdGEgaGVyZQorCSAq ICAgICB7IHUzMiBvYV9yZXBvcnRbXTsgfSAmJiBEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExFX09B CiAJICogfTsKIAkgKi8KIAlEUk1fSTkxNV9QRVJGX1JFQ09SRF9TQU1QTEUgPSAxLAogCisJLyoK KwkgKiBJbmRpY2F0ZXMgdGhhdCBvbmUgb3IgbW9yZSBPQSByZXBvcnRzIHdlcmUgbm90IHdyaXR0 ZW4gYnkgdGhlCisJICogaGFyZHdhcmUuIFRoaXMgY2FuIGhhcHBlbiBmb3IgZXhhbXBsZSBpZiBh biBNSV9SRVBPUlRfUEVSRl9DT1VOVAorCSAqIGNvbW1hbmQgY29sbGlkZXMgd2l0aCBwZXJpb2Rp YyBzYW1wbGluZyAtIHdoaWNoIHdvdWxkIGJlIG1vcmUgbGlrZWx5CisJICogYXQgaGlnaGVyIHNh bXBsaW5nIGZyZXF1ZW5jaWVzLgorCSAqLworCURSTV9JOTE1X1BFUkZfUkVDT1JEX09BX1JFUE9S VF9MT1NUID0gMiwKKworCS8qKgorCSAqIEFuIGVycm9yIG9jY3VycmVkIHRoYXQgcmVzdWx0ZWQg aW4gYWxsIHBlbmRpbmcgT0EgcmVwb3J0cyBiZWluZyBsb3N0LgorCSAqLworCURSTV9JOTE1X1BF UkZfUkVDT1JEX09BX0JVRkZFUl9MT1NUID0gMywKKwogCURSTV9JOTE1X1BFUkZfUkVDT1JEX01B WCAvKiBub24tQUJJICovCiB9OwogCi0tIAoyLjEwLjEKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVs QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=