From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniele Ceraolo Spurio Subject: [PATCH 01/12] drm/i915/guc: Remove preemption support for current fw Date: Tue, 9 Jul 2019 17:54:26 -0700 Message-ID: <20190710005437.3496-2-daniele.ceraolospurio@intel.com> References: <20190710005437.3496-1-daniele.ceraolospurio@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id A5DE789842 for ; Wed, 10 Jul 2019 00:54:57 +0000 (UTC) In-Reply-To: <20190710005437.3496-1-daniele.ceraolospurio@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CgpQcmVlbXB0aW9u IHZpYSBHdUMgc3VibWlzc2lvbiBpcyBub3QgYmVpbmcgc3VwcG9ydGVkIHdpdGggaXRzIGN1cnJl bnQKbGVnYWN5IGluY2FybmF0aW9uLiBUaGUgY3VycmVudCBGVyBkb2VzIHN1cHBvcnQgYSBzaW1p bGFyIHByZS1lbXB0aW9uCmZsb3cgdmlhIEgyRywgYnV0IGl0IGlzIGNsYXNzLWJhc2VkIGluc3Rl YWQgb2YgYmVpbmcgaW5zdGFuY2UtYmFzZWQsCndoaWNoIGRvZXNuJ3QgZml0IHdlbGwgd2l0aCB0 aGUgaTkxNSB0cmFja2luZy4gVG8gZml4IHRoaXMsIHRoZQpmaXJtd2FyZSBpcyBiZWluZyB1cGRh dGVkIHRvIGJldHRlciBzdXBwb3J0IG91ciBuZWVkcyB3aXRoIGEgbmV3IGZsb3csCnNvIHdlIGNh biBzYWZlbHkgcmVtb3ZlIHRoZSBvbGQgY29kZS4KCnYyIChEYW5pZWxlKTogcmVzdXJyZWN0ICYg cmViYXNlLCByZXdvcmQgY29tbWl0IG1lc3NhZ2UsIHJlbW92ZQpwcmVlbXB0X2NvbnRleHQgYXMg d2VsbAoKU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28u dWs+ClNpZ25lZC1vZmYtYnk6IERhbmllbGUgQ2VyYW9sbyBTcHVyaW8gPGRhbmllbGUuY2VyYW9s b3NwdXJpb0BpbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5j by51az4KQ2M6IE1pY2hhbCBXYWpkZWN6a28gPG1pY2hhbC53YWpkZWN6a29AaW50ZWwuY29tPgpD YzogTWF0dGhldyBCcm9zdCA8bWF0dGhldy5icm9zdEBpbnRlbC5jb20+CkNjOiBKb2huIEhhcnJp c29uIDxKb2huLkMuSGFycmlzb25ASW50ZWwuY29tPgpBY2tlZC1ieTogTWF0dGhldyBCcm9zdCA8 bWF0dGhldy5icm9zdEBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX2NvbnRleHQuYyAgfCAgMTcgLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2VuZ2luZV9jcy5jICAgIHwgIDEzIC0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9l bmdpbmVfdHlwZXMuaCB8ICAgMSAtCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9w bS5jICAgICAgICB8ICAgNCAtCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyAg ICAgICAgICB8ICAgNSAtCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAg ICAgICB8ICAgMiAtCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuYyAgICAgICAgICAg ICB8ICAzMSAtLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oICAgICAgICAgICAg IHwgICA5IC0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19zdWJtaXNzaW9uLmMgIHwg MjMxICstLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9p bnRlbF9ndWMuYyAgIHwgIDMxICstLQogMTAgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygr KSwgMzMwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV9jb250ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f Y29udGV4dC5jCmluZGV4IGUzNjdkY2UyYTY5Ni4uMDc4NTkyOTEyZDk3IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29udGV4dC5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0LmMKQEAgLTY0NCwxOCArNjQ0LDEyIEBA IHN0YXRpYyB2b2lkIGluaXRfY29udGV4dHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUp CiAJaW5pdF9sbGlzdF9oZWFkKCZpOTE1LT5jb250ZXh0cy5mcmVlX2xpc3QpOwogfQogCi1zdGF0 aWMgYm9vbCBuZWVkc19wcmVlbXB0X2NvbnRleHQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUpCi17Ci0JcmV0dXJuIFVTRVNfR1VDX1NVQk1JU1NJT04oaTkxNSk7Ci19Ci0KIGludCBpOTE1 X2dlbV9jb250ZXh0c19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsK IAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4OwogCiAJLyogUmVhc3N1cmUgb3Vyc2VsdmVz IHdlIGFyZSBvbmx5IGNhbGxlZCBvbmNlICovCiAJR0VNX0JVR19PTihkZXZfcHJpdi0+a2VybmVs X2NvbnRleHQpOwotCUdFTV9CVUdfT04oZGV2X3ByaXYtPnByZWVtcHRfY29udGV4dCk7CiAKIAlp bml0X2NvbnRleHRzKGRldl9wcml2KTsKIApAQCAtNjc2LDE1ICs2NzAsNiBAQCBpbnQgaTkxNV9n ZW1fY29udGV4dHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJR0VN X0JVR19PTighYXRvbWljX3JlYWQoJmN0eC0+aHdfaWRfcGluX2NvdW50KSk7CiAJZGV2X3ByaXYt Pmtlcm5lbF9jb250ZXh0ID0gY3R4OwogCi0JLyogaGlnaGVzdCBwcmlvcml0eTsgcHJlZW1wdGlu ZyB0YXNrICovCi0JaWYgKG5lZWRzX3ByZWVtcHRfY29udGV4dChkZXZfcHJpdikpIHsKLQkJY3R4 ID0gaTkxNV9nZW1fY29udGV4dF9jcmVhdGVfa2VybmVsKGRldl9wcml2LCBJTlRfTUFYKTsKLQkJ aWYgKCFJU19FUlIoY3R4KSkKLQkJCWRldl9wcml2LT5wcmVlbXB0X2NvbnRleHQgPSBjdHg7Ci0J CWVsc2UKLQkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBwcmVlbXB0IGNvbnRleHQ7IGRp c2FibGluZyBwcmVlbXB0aW9uXG4iKTsKLQl9Ci0KIAlEUk1fREVCVUdfRFJJVkVSKCIlcyBjb250 ZXh0IHN1cHBvcnQgaW5pdGlhbGl6ZWRcbiIsCiAJCQkgRFJJVkVSX0NBUFMoZGV2X3ByaXYpLT5o YXNfbG9naWNhbF9jb250ZXh0cyA/CiAJCQkgImxvZ2ljYWwiIDogImZha2UiKTsKQEAgLTY5NSw4 ICs2ODAsNiBAQCB2b2lkIGk5MTVfZ2VtX2NvbnRleHRzX2Zpbmkoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUpCiB7CiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmaTkxNS0+ZHJtLnN0cnVjdF9t dXRleCk7CiAKLQlpZiAoaTkxNS0+cHJlZW1wdF9jb250ZXh0KQotCQlkZXN0cm95X2tlcm5lbF9j b250ZXh0KCZpOTE1LT5wcmVlbXB0X2NvbnRleHQpOwogCWRlc3Ryb3lfa2VybmVsX2NvbnRleHQo Jmk5MTUtPmtlcm5lbF9jb250ZXh0KTsKIAogCS8qIE11c3QgZnJlZSBhbGwgZGVmZXJyZWQgY29u dGV4dHMgKHZpYSBmbHVzaF93b3JrcXVldWUpIGZpcnN0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2VuZ2luZV9jcy5jCmluZGV4IGJkZjI3OWZhM2IyZS4uNzZiNWMwNjhhMjZkIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfY3MuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfY3MuYwpAQCAtODQxLDE1ICs4 NDEsNiBAQCBpbnQgaW50ZWxfZW5naW5lX2luaXRfY29tbW9uKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JLyoKLQkgKiBTaW1pbGFy bHkgdGhlIHByZWVtcHQgY29udGV4dCBtdXN0IGFsd2F5cyBiZSBhdmFpbGFibGUgc28gdGhhdAot CSAqIHdlIGNhbiBpbnRlcnJ1cHQgdGhlIGVuZ2luZSBhdCBhbnkgdGltZS4gSG93ZXZlciwgYXMg cHJlZW1wdGlvbgotCSAqIGlzIG9wdGlvbmFsLCB3ZSBhbGxvdyBpdCB0byBmYWlsLgotCSAqLwot CWlmIChpOTE1LT5wcmVlbXB0X2NvbnRleHQpCi0JCXBpbl9jb250ZXh0KGk5MTUtPnByZWVtcHRf Y29udGV4dCwgZW5naW5lLAotCQkJICAgICZlbmdpbmUtPnByZWVtcHRfY29udGV4dCk7Ci0KIAly ZXQgPSBtZWFzdXJlX2JyZWFkY3J1bWJfZHcoZW5naW5lKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290 byBlcnJfdW5waW47CkBAIC04NjEsOCArODUyLDYgQEAgaW50IGludGVsX2VuZ2luZV9pbml0X2Nv bW1vbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJcmV0dXJuIDA7CiAKIGVycl91 bnBpbjoKLQlpZiAoZW5naW5lLT5wcmVlbXB0X2NvbnRleHQpCi0JCWludGVsX2NvbnRleHRfdW5w aW4oZW5naW5lLT5wcmVlbXB0X2NvbnRleHQpOwogCWludGVsX2NvbnRleHRfdW5waW4oZW5naW5l LT5rZXJuZWxfY29udGV4dCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTg4Nyw4ICs4NzYsNiBAQCB2 b2lkIGludGVsX2VuZ2luZV9jbGVhbnVwX2NvbW1vbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCiAJaWYgKGVuZ2luZS0+ZGVmYXVsdF9zdGF0ZSkKIAkJaTkxNV9nZW1fb2JqZWN0X3B1 dChlbmdpbmUtPmRlZmF1bHRfc3RhdGUpOwogCi0JaWYgKGVuZ2luZS0+cHJlZW1wdF9jb250ZXh0 KQotCQlpbnRlbF9jb250ZXh0X3VucGluKGVuZ2luZS0+cHJlZW1wdF9jb250ZXh0KTsKIAlpbnRl bF9jb250ZXh0X3VucGluKGVuZ2luZS0+a2VybmVsX2NvbnRleHQpOwogCUdFTV9CVUdfT04oIWxs aXN0X2VtcHR5KCZlbmdpbmUtPmJhcnJpZXJfdGFza3MpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF9lbmdpbmVfdHlwZXMuaAppbmRleCA3ZTA1NjExNDM0NGUuLjhiZTYzMDE5 ZDcwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3R5 cGVzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3R5cGVzLmgK QEAgLTI4OCw3ICsyODgsNiBAQCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzIHsKIAlzdHJ1Y3QgbGxp c3RfaGVhZCBiYXJyaWVyX3Rhc2tzOwogCiAJc3RydWN0IGludGVsX2NvbnRleHQgKmtlcm5lbF9j b250ZXh0OyAvKiBwaW5uZWQgKi8KLQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqcHJlZW1wdF9jb250 ZXh0OyAvKiBwaW5uZWQ7IG9wdGlvbmFsICovCiAKIAlpbnRlbF9lbmdpbmVfbWFza190IHNhdHVy YXRlZDsgLyogc3VibWl0dGluZyBzZW1hcGhvcmVzIHRvbyBsYXRlPyAqLwogCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9wbS5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfZ3RfcG0uYwppbmRleCAzNmJhODBlNmEwYjcuLmRhODFiM2E5MmQxNiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG0uYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9wbS5jCkBAIC0xNDUsMTAgKzE0NSw2IEBA IGludCBpbnRlbF9ndF9yZXN1bWUoc3RydWN0IGludGVsX2d0ICpndCkKIAkJaWYgKGNlKQogCQkJ Y2UtPm9wcy0+cmVzZXQoY2UpOwogCi0JCWNlID0gZW5naW5lLT5wcmVlbXB0X2NvbnRleHQ7Ci0J CWlmIChjZSkKLQkJCWNlLT5vcHMtPnJlc2V0KGNlKTsKLQogCQllbmdpbmUtPnNlcmlhbCsrOyAv KiBrZXJuZWwgY29udGV4dCBsb3N0ICovCiAJCWVyciA9IGVuZ2luZS0+cmVzdW1lKGVuZ2luZSk7 CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKaW5kZXggM2U0ZjU4ZjE5MzYyLi5iNGQx OTU2Nzc4NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCkBAIC0yMDEwLDExICsy MDEwLDYgQEAgc3RhdGljIGludCBpOTE1X2d1Y19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9p ZCAqZGF0YSkKIAogCXNlcV9wcmludGYobSwgIlxuR3VDIGV4ZWNidWYgY2xpZW50IEAgJXA6XG4i LCBndWMtPmV4ZWNidWZfY2xpZW50KTsKIAlpOTE1X2d1Y19jbGllbnRfaW5mbyhtLCBkZXZfcHJp diwgZ3VjLT5leGVjYnVmX2NsaWVudCk7Ci0JaWYgKGd1Yy0+cHJlZW1wdF9jbGllbnQpIHsKLQkJ c2VxX3ByaW50ZihtLCAiXG5HdUMgcHJlZW1wdCBjbGllbnQgQCAlcDpcbiIsCi0JCQkgICBndWMt PnByZWVtcHRfY2xpZW50KTsKLQkJaTkxNV9ndWNfY2xpZW50X2luZm8obSwgZGV2X3ByaXYsIGd1 Yy0+cHJlZW1wdF9jbGllbnQpOwotCX0KIAogCS8qIEFkZCBtb3JlIGFzIHJlcXVpcmVkIC4uLiAq LwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCBmOTg3OGNiZWY0ZDkuLjc2MTE2ZTQ0Yjdl MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0xMzc4LDggKzEzNzgsNiBAQCBzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSB7CiAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lW0k5MTVf TlVNX0VOR0lORVNdOwogCS8qIENvbnRleHQgdXNlZCBpbnRlcm5hbGx5IHRvIGlkbGUgdGhlIEdQ VSBhbmQgc2V0dXAgaW5pdGlhbCBzdGF0ZSAqLwogCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpr ZXJuZWxfY29udGV4dDsKLQkvKiBDb250ZXh0IG9ubHkgdG8gYmUgdXNlZCBmb3IgaW5qZWN0aW5n IHByZWVtcHRpb24gY29tbWFuZHMgKi8KLQlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqcHJlZW1w dF9jb250ZXh0OwogCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZV9jbGFzc1tNQVhfRU5H SU5FX0NMQVNTICsgMV0KIAkJCQkJICAgIFtNQVhfRU5HSU5FX0lOU1RBTkNFICsgMV07CiAKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZ3VjLmMKaW5kZXggYzQwYTZlZmRkMzNhLi41MDFiNzRmNDQzNzQgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2d1Yy5jCkBAIC0xMDEsOCArMTAxLDYgQEAgdm9pZCBpbnRlbF9n dWNfaW5pdF9lYXJseShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCiAKIHN0YXRpYyBpbnQgZ3VjX2lu aXRfd3Eoc3RydWN0IGludGVsX2d1YyAqZ3VjKQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGd1Y190b19pOTE1KGd1Yyk7Ci0KIAkvKgogCSAqIEd1QyBsb2cgYnVmZmVy IGZsdXNoIHdvcmsgaXRlbSBoYXMgdG8gZG8gcmVnaXN0ZXIgYWNjZXNzIHRvCiAJICogc2VuZCB0 aGUgYWNrIHRvIEd1QyBhbmQgdGhpcyB3b3JrIGl0ZW0sIGlmIG5vdCBzeW5jZWQgYmVmb3JlCkBA IC0xMjIsMzEgKzEyMCw2IEBAIHN0YXRpYyBpbnQgZ3VjX2luaXRfd3Eoc3RydWN0IGludGVsX2d1 YyAqZ3VjKQogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQkvKgotCSAqIEV2ZW4gdGhvdWdoIGJv dGggc2VuZGluZyBHdUMgYWN0aW9uLCBhbmQgYWRkaW5nIGEgbmV3IHdvcmtpdGVtIHRvCi0JICog R3VDIHdvcmtxdWV1ZSBhcmUgc2VyaWFsaXplZCAoZWFjaCB3aXRoIGl0cyBvd24gbG9ja2luZyks IHNpbmNlCi0JICogd2UncmUgdXNpbmcgbXV0bGlwbGUgZW5naW5lcywgaXQncyBwb3NzaWJsZSB0 aGF0IHdlJ3JlIGdvaW5nIHRvCi0JICogaXNzdWUgYSBwcmVlbXB0IHJlcXVlc3Qgd2l0aCB0d28g KG9yIG1vcmUgLSBlYWNoIGZvciBkaWZmZXJlbnQKLQkgKiBlbmdpbmUpIHdvcmtpdGVtcyBpbiBH dUMgcXVldWUuIEluIHRoaXMgc2l0dWF0aW9uLCBHdUMgbWF5IHN1Ym1pdAotCSAqIGFsbCBvZiB0 aGVtLCB3aGljaCB3aWxsIG1ha2UgdXMgdmVyeSBjb25mdXNlZC4KLQkgKiBPdXIgcHJlZW1wdGlv biBjb250ZXh0cyBtYXkgZXZlbiBhbHJlYWR5IGJlIGNvbXBsZXRlIC0gYmVmb3JlIHdlCi0JICog ZXZlbiBoYWQgdGhlIGNoYW5jZSB0byBzZW50IHRoZSBwcmVlbXB0IGFjdGlvbiB0byBHdUMhLiBS YXRoZXIKLQkgKiB0aGFuIGludHJvZHVjaW5nIHlldCBhbm90aGVyIGxvY2ssIHdlIGNhbiBqdXN0 IHVzZSBvcmRlcmVkIHdvcmtxdWV1ZQotCSAqIHRvIG1ha2Ugc3VyZSB3ZSdyZSBhbHdheXMgc2Vu ZGluZyBhIHNpbmdsZSBwcmVlbXB0aW9uIHJlcXVlc3Qgd2l0aCBhCi0JICogc2luZ2xlIHdvcmtp dGVtLgotCSAqLwotCWlmIChIQVNfTE9HSUNBTF9SSU5HX1BSRUVNUFRJT04oZGV2X3ByaXYpICYm Ci0JICAgIFVTRVNfR1VDX1NVQk1JU1NJT04oZGV2X3ByaXYpKSB7Ci0JCWd1Yy0+cHJlZW1wdF93 cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKCJpOTE1LWd1Y19wcmVlbXB0IiwKLQkJCQkJCQkg IFdRX0hJR0hQUkkpOwotCQlpZiAoIWd1Yy0+cHJlZW1wdF93cSkgewotCQkJZGVzdHJveV93b3Jr cXVldWUoZ3VjLT5sb2cucmVsYXkuZmx1c2hfd3EpOwotCQkJRFJNX0VSUk9SKCJDb3VsZG4ndCBh bGxvY2F0ZSB3b3JrcXVldWUgZm9yIEd1QyAiCi0JCQkJICAicHJlZW1wdGlvblxuIik7Ci0JCQly ZXR1cm4gLUVOT01FTTsKLQkJfQotCX0KLQogCXJldHVybiAwOwogfQogCkBAIC0xNTQsMTAgKzEy Nyw2IEBAIHN0YXRpYyB2b2lkIGd1Y19maW5pX3dxKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKIHsK IAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CiAKLQl3cSA9IGZldGNoX2FuZF96ZXJvKCZn dWMtPnByZWVtcHRfd3EpOwotCWlmICh3cSkKLQkJZGVzdHJveV93b3JrcXVldWUod3EpOwotCiAJ d3EgPSBmZXRjaF9hbmRfemVybygmZ3VjLT5sb2cucmVsYXkuZmx1c2hfd3EpOwogCWlmICh3cSkK IAkJZGVzdHJveV93b3JrcXVldWUod3EpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZ3VjLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaAppbmRleCBk OTFjOTY2NzlkYmIuLmVjMTAzOGMxZjUwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZ3VjLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgKQEAg LTM3LDExICszNyw2IEBACiAKIHN0cnVjdCBfX2d1Y19hZHNfYmxvYjsKIAotc3RydWN0IGd1Y19w cmVlbXB0X3dvcmsgewotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCXN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZTsKLX07Ci0KIC8qCiAgKiBUb3AgbGV2ZWwgc3RydWN0dXJlIG9mIEd1 Qy4gSXQgaGFuZGxlcyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBtYW5hZ2VzIGNsaWVudAogICogcG9v bCBhbmQgZG9vcmJlbGxzLiBpbnRlbF9ndWMgb3ducyBhIGludGVsX2d1Y19jbGllbnQgdG8gcmVw bGFjZSB0aGUgbGVnYWN5CkBAIC03NiwxMCArNzEsNiBAQCBzdHJ1Y3QgaW50ZWxfZ3VjIHsKIAl2 b2lkICpzaGFyZWRfZGF0YV92YWRkcjsKIAogCXN0cnVjdCBpbnRlbF9ndWNfY2xpZW50ICpleGVj YnVmX2NsaWVudDsKLQlzdHJ1Y3QgaW50ZWxfZ3VjX2NsaWVudCAqcHJlZW1wdF9jbGllbnQ7Ci0K LQlzdHJ1Y3QgZ3VjX3ByZWVtcHRfd29yayBwcmVlbXB0X3dvcmtbSTkxNV9OVU1fRU5HSU5FU107 Ci0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnByZWVtcHRfd3E7CiAKIAlERUNMQVJFX0JJVE1B UChkb29yYmVsbF9iaXRtYXAsIEdVQ19OVU1fRE9PUkJFTExTKTsKIAkvKiBDeWNsaWMgY291bnRl ciBtb2QgcGFnZXNpemUJKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2d1Y19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfc3VibWlz c2lvbi5jCmluZGV4IGYxMDRiOTRjMTRlZi4uODUyMGJiMjI0MTc1IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfc3VibWlzc2lvbi5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2d1Y19zdWJtaXNzaW9uLmMKQEAgLTQ2LDExICs0NiwxMCBAQCBlbnVt IHsKICAqCiAgKiBHdUMgY2xpZW50OgogICogQSBpbnRlbF9ndWNfY2xpZW50IHJlZmVycyB0byBh IHN1Ym1pc3Npb24gcGF0aCB0aHJvdWdoIEd1Qy4gQ3VycmVudGx5LCB0aGVyZQotICogYXJlIHR3 byBjbGllbnRzLiBPbmUgb2YgdGhlbSAodGhlIGV4ZWNidWZfY2xpZW50KSBpcyBjaGFyZ2VkIHdp dGggYWxsCi0gKiBzdWJtaXNzaW9ucyB0byB0aGUgR3VDLCB0aGUgb3RoZXIgb25lIChwcmVlbXB0 X2NsaWVudCkgaXMgcmVzcG9uc2libGUgZm9yCi0gKiBwcmVlbXB0aW5nIHRoZSBleGVjYnVmX2Ns aWVudC4gVGhpcyBzdHJ1Y3QgaXMgdGhlIG93bmVyIG9mIGEgZG9vcmJlbGwsIGEKLSAqIHByb2Nl c3MgZGVzY3JpcHRvciBhbmQgYSB3b3JrcXVldWUgKGFsbCBvZiB0aGVtIGluc2lkZSBhIHNpbmds ZSBnZW0gb2JqZWN0Ci0gKiB0aGF0IGNvbnRhaW5zIGFsbCByZXF1aXJlZCBwYWdlcyBmb3IgdGhl c2UgZWxlbWVudHMpLgorICogaXMgb25seSBvbmUgY2xpZW50LCB3aGljaCBpcyBjaGFyZ2VkIHdp dGggYWxsIHN1Ym1pc3Npb25zIHRvIHRoZSBHdUMuIFRoaXMKKyAqIHN0cnVjdCBpcyB0aGUgb3du ZXIgb2YgYSBkb29yYmVsbCwgYSBwcm9jZXNzIGRlc2NyaXB0b3IgYW5kIGEgd29ya3F1ZXVlIChh bGwKKyAqIG9mIHRoZW0gaW5zaWRlIGEgc2luZ2xlIGdlbSBvYmplY3QgdGhhdCBjb250YWlucyBh bGwgcmVxdWlyZWQgcGFnZXMgZm9yIHRoZXNlCisgKiBlbGVtZW50cykuCiAgKgogICogR3VDIHN0 YWdlIGRlc2NyaXB0b3I6CiAgKiBEdXJpbmcgaW5pdGlhbGl6YXRpb24sIHRoZSBkcml2ZXIgYWxs b2NhdGVzIGEgc3RhdGljIHBvb2wgb2YgMTAyNCBzdWNoCkBAIC04OCwxMiArODcsNiBAQCBlbnVt IHsKICAqCiAgKi8KIAotc3RhdGljIGlubGluZSB1MzIgaW50ZWxfaHdzX3ByZWVtcHRfZG9uZV9h ZGRyZXNzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQlyZXR1cm4gKGk5MTVf Z2d0dF9vZmZzZXQoZW5naW5lLT5zdGF0dXNfcGFnZS52bWEpICsKLQkJSTkxNV9HRU1fSFdTX1BS RUVNUFRfQUREUik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGk5MTVfcHJpb2xpc3QgKnRv X3ByaW9saXN0KHN0cnVjdCByYl9ub2RlICpyYikKIHsKIAlyZXR1cm4gcmJfZW50cnkocmIsIHN0 cnVjdCBpOTE1X3ByaW9saXN0LCBub2RlKTsKQEAgLTU2MywxMjYgKzU1Niw2IEBAIHN0YXRpYyB2 b2lkIGZsdXNoX2dndHRfd3JpdGVzKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQogCQlpbnRlbF91bmNv cmVfcG9zdGluZ19yZWFkX2Z3KCZpOTE1LT51bmNvcmUsIEdVQ19TVEFUVVMpOwogfQogCi1zdGF0 aWMgdm9pZCBpbmplY3RfcHJlZW1wdF9jb250ZXh0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykK LXsKLQlzdHJ1Y3QgZ3VjX3ByZWVtcHRfd29yayAqcHJlZW1wdF93b3JrID0KLQkJY29udGFpbmVy X29mKHdvcmssIHR5cGVvZigqcHJlZW1wdF93b3JrKSwgd29yayk7Ci0Jc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lID0gcHJlZW1wdF93b3JrLT5lbmdpbmU7Ci0Jc3RydWN0IGludGVsX2d1 YyAqZ3VjID0gY29udGFpbmVyX29mKHByZWVtcHRfd29yaywgdHlwZW9mKCpndWMpLAotCQkJCQkg ICAgIHByZWVtcHRfd29ya1tlbmdpbmUtPmlkXSk7Ci0Jc3RydWN0IGludGVsX2d1Y19jbGllbnQg KmNsaWVudCA9IGd1Yy0+cHJlZW1wdF9jbGllbnQ7Ci0Jc3RydWN0IGd1Y19zdGFnZV9kZXNjICpz dGFnZV9kZXNjID0gX19nZXRfc3RhZ2VfZGVzYyhjbGllbnQpOwotCXN0cnVjdCBpbnRlbF9jb250 ZXh0ICpjZSA9IGVuZ2luZS0+cHJlZW1wdF9jb250ZXh0OwotCXUzMiBkYXRhWzddOwotCi0JaWYg KCFjZS0+cmluZy0+ZW1pdCkgeyAvKiByZWNyZWF0ZSB1cG9uIGxvYWQvcmVzdW1lICovCi0JCXUz MiBhZGRyID0gaW50ZWxfaHdzX3ByZWVtcHRfZG9uZV9hZGRyZXNzKGVuZ2luZSk7Ci0JCXUzMiAq Y3M7Ci0KLQkJY3MgPSBjZS0+cmluZy0+dmFkZHI7Ci0JCWlmIChlbmdpbmUtPmNsYXNzID09IFJF TkRFUl9DTEFTUykgewotCQkJY3MgPSBnZW44X2VtaXRfZ2d0dF93cml0ZV9yY3MoY3MsCi0JCQkJ CQkgICAgICBHVUNfUFJFRU1QVF9GSU5JU0hFRCwKLQkJCQkJCSAgICAgIGFkZHIsCi0JCQkJCQkg ICAgICBQSVBFX0NPTlRST0xfQ1NfU1RBTEwpOwotCQl9IGVsc2UgewotCQkJY3MgPSBnZW44X2Vt aXRfZ2d0dF93cml0ZShjcywKLQkJCQkJCSAgR1VDX1BSRUVNUFRfRklOSVNIRUQsCi0JCQkJCQkg IGFkZHIsCi0JCQkJCQkgIDApOwotCQkJKmNzKysgPSBNSV9OT09QOwotCQkJKmNzKysgPSBNSV9O T09QOwotCQl9Ci0JCSpjcysrID0gTUlfVVNFUl9JTlRFUlJVUFQ7Ci0JCSpjcysrID0gTUlfTk9P UDsKLQotCQljZS0+cmluZy0+ZW1pdCA9IEdVQ19QUkVFTVBUX0JSRUFEQ1JVTUJfQllURVM7Ci0J CUdFTV9CVUdfT04oKHZvaWQgKiljcyAtIGNlLT5yaW5nLT52YWRkciAhPSBjZS0+cmluZy0+ZW1p dCk7Ci0KLQkJZmx1c2hfZ2d0dF93cml0ZXMoY2UtPnJpbmctPnZtYSk7Ci0JfQotCi0Jc3Bpbl9s b2NrX2lycSgmY2xpZW50LT53cV9sb2NrKTsKLQlndWNfd3FfaXRlbV9hcHBlbmQoY2xpZW50LCBl bmdpbmUtPmd1Y19pZCwgbG93ZXJfMzJfYml0cyhjZS0+bHJjX2Rlc2MpLAotCQkJICAgR1VDX1BS RUVNUFRfQlJFQURDUlVNQl9CWVRFUyAvIHNpemVvZih1NjQpLCAwKTsKLQlzcGluX3VubG9ja19p cnEoJmNsaWVudC0+d3FfbG9jayk7Ci0KLQkvKgotCSAqIElmIEd1QyBmaXJtd2FyZSBwZXJmb3Jt cyBhbiBlbmdpbmUgcmVzZXQgd2hpbGUgdGhhdCBlbmdpbmUgaGFkCi0JICogYSBwcmVlbXB0aW9u IHBlbmRpbmcsIGl0IHdpbGwgc2V0IHRoZSB0ZXJtaW5hdGVkIGF0dHJpYnV0ZSBiaXQKLQkgKiBv biBvdXIgcHJlZW1wdGlvbiBzdGFnZSBkZXNjcmlwdG9yLiBHdUMgZmlybXdhcmUgcmV0YWlucyBh bGwKLQkgKiBwZW5kaW5nIHdvcmsgaXRlbXMgZm9yIGEgaGlnaC1wcmlvcml0eSBHdUMgY2xpZW50 LCB1bmxpa2UgdGhlCi0JICogbm9ybWFsLXByaW9yaXR5IEd1QyBjbGllbnQgd2hlcmUgd29yayBp dGVtcyBhcmUgZHJvcHBlZC4gSXQKLQkgKiB3YW50cyB0byBtYWtlIHN1cmUgdGhlIHByZWVtcHQt dG8taWRsZSB3b3JrIGRvZXNuJ3QgcnVuIHdoZW4KLQkgKiBzY2hlZHVsaW5nIHJlc3VtZXMsIGFu ZCB1c2VzIHRoaXMgYml0IHRvIGluZm9ybSBpdHMgc2NoZWR1bGVyCi0JICogYW5kIHByZXN1bWFi bHkgdXMgYXMgd2VsbC4gT3VyIGpvYiBpcyB0byBjbGVhciBpdCBmb3IgdGhlIG5leHQKLQkgKiBw cmVlbXB0aW9uIGFmdGVyIHJlc2V0LCBvdGhlcndpc2UgdGhhdCBhbmQgZnV0dXJlIHByZWVtcHRp b25zCi0JICogd2lsbCBuZXZlciBjb21wbGV0ZS4gV2UnbGwganVzdCBjbGVhciBpdCBldmVyeSB0 aW1lLgotCSAqLwotCXN0YWdlX2Rlc2MtPmF0dHJpYnV0ZSAmPSB+R1VDX1NUQUdFX0RFU0NfQVRU Ul9URVJNSU5BVEVEOwotCi0JZGF0YVswXSA9IElOVEVMX0dVQ19BQ1RJT05fUkVRVUVTVF9QUkVF TVBUSU9OOwotCWRhdGFbMV0gPSBjbGllbnQtPnN0YWdlX2lkOwotCWRhdGFbMl0gPSBJTlRFTF9H VUNfUFJFRU1QVF9PUFRJT05fRFJPUF9XT1JLX1EgfAotCQkgIElOVEVMX0dVQ19QUkVFTVBUX09Q VElPTl9EUk9QX1NVQk1JVF9ROwotCWRhdGFbM10gPSBlbmdpbmUtPmd1Y19pZDsKLQlkYXRhWzRd ID0gZ3VjLT5leGVjYnVmX2NsaWVudC0+cHJpb3JpdHk7Ci0JZGF0YVs1XSA9IGd1Yy0+ZXhlY2J1 Zl9jbGllbnQtPnN0YWdlX2lkOwotCWRhdGFbNl0gPSBpbnRlbF9ndWNfZ2d0dF9vZmZzZXQoZ3Vj LCBndWMtPnNoYXJlZF9kYXRhKTsKLQotCWlmIChXQVJOX09OKGludGVsX2d1Y19zZW5kKGd1Yywg ZGF0YSwgQVJSQVlfU0laRShkYXRhKSkpKSB7Ci0JCWludGVsX3dyaXRlX3N0YXR1c19wYWdlKGVu Z2luZSwKLQkJCQkJSTkxNV9HRU1fSFdTX1BSRUVNUFQsCi0JCQkJCUdVQ19QUkVFTVBUX05PTkUp OwotCQl0YXNrbGV0X3NjaGVkdWxlKCZlbmdpbmUtPmV4ZWNsaXN0cy50YXNrbGV0KTsKLQl9Ci0K LQkodm9pZClJOTE1X1NFTEZURVNUX09OTFkoZW5naW5lLT5leGVjbGlzdHMucHJlZW1wdF9oYW5n LmNvdW50KyspOwotfQotCi0vKgotICogV2UncmUgdXNpbmcgdXNlciBpbnRlcnJ1cHQgYW5kIEhX U1AgdmFsdWUgdG8gbWFyayB0aGF0IHByZWVtcHRpb24gaGFzCi0gKiBmaW5pc2hlZCBhbmQgR1BV IGlzIGlkbGUuIE5vcm1hbGx5LCB3ZSBjb3VsZCB1bndpbmQgYW5kIGNvbnRpbnVlIHNpbWlsYXIg dG8KLSAqIGV4ZWNsaXN0cyBzdWJtaXNzaW9uIHBhdGguIFVuZm9ydHVuYXRlbHksIHdpdGggR3VD IHdlIGFsc28gbmVlZCB0byB3YWl0IGZvcgotICogaXQgdG8gZmluaXNoIGl0cyBvd24gcG9zdHBy b2Nlc3NpbmcsIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHN1Ym1pdC4gT3RoZXJ3aXNlCi0gKiBHdUMg bWF5IHNpbGVudGx5IGlnbm9yZSBvdXIgc3VibWlzc2lvbnMsIGFuZCB0aHVzIHdlIHJpc2sgbG9z aW5nIHJlcXVlc3QgYXQKLSAqIGJlc3QsIGV4ZWN1dGluZyBvdXQtb2Ytb3JkZXIgYW5kIGNhdXNp bmcga2VybmVsIHBhbmljIGF0IHdvcnN0LgotICovCi0jZGVmaW5lIEdVQ19QUkVFTVBUX1BPU1RQ Uk9DRVNTX0RFTEFZX01TIDEwCi1zdGF0aWMgdm9pZCB3YWl0X2Zvcl9ndWNfcHJlZW1wdF9yZXBv cnQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQotewotCXN0cnVjdCBpbnRlbF9ndWMg Kmd1YyA9ICZlbmdpbmUtPmk5MTUtPmd1YzsKLQlzdHJ1Y3QgZ3VjX3NoYXJlZF9jdHhfZGF0YSAq ZGF0YSA9IGd1Yy0+c2hhcmVkX2RhdGFfdmFkZHI7Ci0Jc3RydWN0IGd1Y19jdHhfcmVwb3J0ICpy ZXBvcnQgPQotCQkmZGF0YS0+cHJlZW1wdF9jdHhfcmVwb3J0W2VuZ2luZS0+Z3VjX2lkXTsKLQot CWlmICh3YWl0X2Zvcl9hdG9taWMocmVwb3J0LT5yZXBvcnRfcmV0dXJuX3N0YXR1cyA9PQotCQkJ ICAgIElOVEVMX0dVQ19SRVBPUlRfU1RBVFVTX0NPTVBMRVRFLAotCQkJICAgIEdVQ19QUkVFTVBU X1BPU1RQUk9DRVNTX0RFTEFZX01TKSkKLQkJRFJNX0VSUk9SKCJUaW1lZCBvdXQgd2FpdGluZyBm b3IgR3VDIHByZWVtcHRpb24gcmVwb3J0XG4iKTsKLQkvKgotCSAqIEd1QyBpcyBleHBlY3Rpbmcg dGhhdCB3ZSdyZSBhbHNvIGdvaW5nIHRvIGNsZWFyIHRoZSBhZmZlY3RlZCBjb250ZXh0Ci0JICog Y291bnRlciwgbGV0J3MgYWxzbyByZXNldCB0aGUgcmV0dXJuIHN0YXR1cyB0byBub3QgZGVwZW5k IG9uIEd1QwotCSAqIHJlc2V0dGluZyBpdCBhZnRlciByZWNpZXZpbmcgYW5vdGhlciBwcmVlbXB0 IGFjdGlvbgotCSAqLwotCXJlcG9ydC0+YWZmZWN0ZWRfY291bnQgPSAwOwotCXJlcG9ydC0+cmVw b3J0X3JldHVybl9zdGF0dXMgPSBJTlRFTF9HVUNfUkVQT1JUX1NUQVRVU19VTktOT1dOOwotfQot Ci1zdGF0aWMgdm9pZCBjb21wbGV0ZV9wcmVlbXB0X2NvbnRleHQoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQotewotCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICpleGVjbGlz dHMgPSAmZW5naW5lLT5leGVjbGlzdHM7Ci0KLQlpZiAoaW5qZWN0X3ByZWVtcHRfaGFuZyhleGVj bGlzdHMpKQotCQlyZXR1cm47Ci0KLQlleGVjbGlzdHNfY2FuY2VsX3BvcnRfcmVxdWVzdHMoZXhl Y2xpc3RzKTsKLQlleGVjbGlzdHNfdW53aW5kX2luY29tcGxldGVfcmVxdWVzdHMoZXhlY2xpc3Rz KTsKLQotCXdhaXRfZm9yX2d1Y19wcmVlbXB0X3JlcG9ydChlbmdpbmUpOwotCWludGVsX3dyaXRl X3N0YXR1c19wYWdlKGVuZ2luZSwgSTkxNV9HRU1fSFdTX1BSRUVNUFQsIEdVQ19QUkVFTVBUX05P TkUpOwotfQotCiBzdGF0aWMgdm9pZCBndWNfc3VibWl0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSwKIAkJICAgICAgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKipvdXQsCiAJCSAgICAgICBz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICoqZW5kKQpAQCAtNzA3LDE2ICs1ODAsNiBAQCBzdGF0aWMgaW5s aW5lIGludCBycV9wcmlvKGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQogCXJldHVybiBy cS0+c2NoZWQuYXR0ci5wcmlvcml0eSB8IF9fTk9fUFJFRU1QVElPTjsKIH0KIAotc3RhdGljIGlu bGluZSBpbnQgZWZmZWN0aXZlX3ByaW8oY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCi17 Ci0JaW50IHByaW8gPSBycV9wcmlvKHJxKTsKLQotCWlmIChpOTE1X3JlcXVlc3RfaGFzX25vcHJl ZW1wdChycSkpCi0JCXByaW8gPSBJOTE1X1BSSU9SSVRZX1VOUFJFRU1QVEFCTEU7Ci0KLQlyZXR1 cm4gcHJpbzsKLX0KLQogc3RhdGljIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnNjaGVkdWxlX2luKHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCBpbnQgaWR4KQogewogCXRyYWNlX2k5MTVfcmVxdWVzdF9p bihycSwgaWR4KTsKQEAgLTc1MiwyMiArNjE1LDYgQEAgc3RhdGljIHZvaWQgX19ndWNfZGVxdWV1 ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgm ZW5naW5lLT5hY3RpdmUubG9jayk7CiAKIAlpZiAobGFzdCkgewotCQlpZiAoaW50ZWxfZW5naW5l X2hhc19wcmVlbXB0aW9uKGVuZ2luZSkpIHsKLQkJCXN0cnVjdCBndWNfcHJlZW1wdF93b3JrICpw cmVlbXB0X3dvcmsgPQotCQkJCSZlbmdpbmUtPmk5MTUtPmd1Yy5wcmVlbXB0X3dvcmtbZW5naW5l LT5pZF07Ci0JCQlpbnQgcHJpbyA9IGV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHlfaGludDsKLQot CQkJaWYgKGk5MTVfc2NoZWR1bGVyX25lZWRfcHJlZW1wdChwcmlvLAotCQkJCQkJCWVmZmVjdGl2 ZV9wcmlvKGxhc3QpKSkgewotCQkJCWludGVsX3dyaXRlX3N0YXR1c19wYWdlKGVuZ2luZSwKLQkJ CQkJCQlJOTE1X0dFTV9IV1NfUFJFRU1QVCwKLQkJCQkJCQlHVUNfUFJFRU1QVF9JTlBST0dSRVNT KTsKLQkJCQlxdWV1ZV93b3JrKGVuZ2luZS0+aTkxNS0+Z3VjLnByZWVtcHRfd3EsCi0JCQkJCSAg ICZwcmVlbXB0X3dvcmstPndvcmspOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCiAJCWlmICgq KytmaXJzdCkKIAkJCXJldHVybjsKIApAQCAtODMxLDEyICs2NzgsNyBAQCBzdGF0aWMgdm9pZCBn dWNfc3VibWlzc2lvbl90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIAkJbWVtbW92ZShleGVj bGlzdHMtPmluZmxpZ2h0LCBwb3J0LCByZW0gKiBzaXplb2YoKnBvcnQpKTsKIAl9CiAKLQlpZiAo aW50ZWxfcmVhZF9zdGF0dXNfcGFnZShlbmdpbmUsIEk5MTVfR0VNX0hXU19QUkVFTVBUKSA9PQot CSAgICBHVUNfUFJFRU1QVF9GSU5JU0hFRCkKLQkJY29tcGxldGVfcHJlZW1wdF9jb250ZXh0KGVu Z2luZSk7Ci0KLQlpZiAoIWludGVsX3JlYWRfc3RhdHVzX3BhZ2UoZW5naW5lLCBJOTE1X0dFTV9I V1NfUFJFRU1QVCkpCi0JCV9fZ3VjX2RlcXVldWUoZW5naW5lKTsKKwlfX2d1Y19kZXF1ZXVlKGVu Z2luZSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPmFjdGl2ZS5sb2NrLCBm bGFncyk7CiB9CkBAIC04NTcsMTYgKzY5OSw2IEBAIHN0YXRpYyB2b2lkIGd1Y19yZXNldF9wcmVw YXJlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkgKiBwcmV2ZW50cyB0aGUgcmFj ZS4KIAkgKi8KIAlfX3Rhc2tsZXRfZGlzYWJsZV9zeW5jX29uY2UoJmV4ZWNsaXN0cy0+dGFza2xl dCk7Ci0KLQkvKgotCSAqIFdlJ3JlIHVzaW5nIHdvcmtlciB0byBxdWV1ZSBwcmVlbXB0aW9uIHJl cXVlc3RzIGZyb20gdGhlIHRhc2tsZXQgaW4KLQkgKiBHdUMgc3VibWlzc2lvbiBtb2RlLgotCSAq IEV2ZW4gdGhvdWdoIHRhc2tsZXQgd2FzIGRpc2FibGVkLCB3ZSBtYXkgc3RpbGwgaGF2ZSBhIHdv cmtlciBxdWV1ZWQuCi0JICogTGV0J3MgbWFrZSBzdXJlIHRoYXQgYWxsIHdvcmtlcnMgc2NoZWR1 bGVkIGJlZm9yZSBkaXNhYmxpbmcgdGhlCi0JICogdGFza2xldCBhcmUgY29tcGxldGVkIGJlZm9y ZSBjb250aW51aW5nIHdpdGggdGhlIHJlc2V0LgotCSAqLwotCWlmIChlbmdpbmUtPmk5MTUtPmd1 Yy5wcmVlbXB0X3dxKQotCQlmbHVzaF93b3JrcXVldWUoZW5naW5lLT5pOTE1LT5ndWMucHJlZW1w dF93cSk7CiB9CiAKIHN0YXRpYyB2b2lkIGd1Y19yZXNldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsIGJvb2wgc3RhbGxlZCkKQEAgLTExMjMsNyArOTU1LDYgQEAgc3RhdGljIGludCBn dWNfY2xpZW50c19jcmVhdGUoc3RydWN0IGludGVsX2d1YyAqZ3VjKQogCXN0cnVjdCBpbnRlbF9n dWNfY2xpZW50ICpjbGllbnQ7CiAKIAlHRU1fQlVHX09OKGd1Yy0+ZXhlY2J1Zl9jbGllbnQpOwot CUdFTV9CVUdfT04oZ3VjLT5wcmVlbXB0X2NsaWVudCk7CiAKIAljbGllbnQgPSBndWNfY2xpZW50 X2FsbG9jKGRldl9wcml2LAogCQkJCSAgSU5URUxfSU5GTyhkZXZfcHJpdiktPmVuZ2luZV9tYXNr LApAQCAtMTEzNSwyMCArOTY2LDYgQEAgc3RhdGljIGludCBndWNfY2xpZW50c19jcmVhdGUoc3Ry dWN0IGludGVsX2d1YyAqZ3VjKQogCX0KIAlndWMtPmV4ZWNidWZfY2xpZW50ID0gY2xpZW50Owog Ci0JaWYgKGRldl9wcml2LT5wcmVlbXB0X2NvbnRleHQpIHsKLQkJY2xpZW50ID0gZ3VjX2NsaWVu dF9hbGxvYyhkZXZfcHJpdiwKLQkJCQkJICBJTlRFTF9JTkZPKGRldl9wcml2KS0+ZW5naW5lX21h c2ssCi0JCQkJCSAgR1VDX0NMSUVOVF9QUklPUklUWV9LTURfSElHSCwKLQkJCQkJICBkZXZfcHJp di0+cHJlZW1wdF9jb250ZXh0KTsKLQkJaWYgKElTX0VSUihjbGllbnQpKSB7Ci0JCQlEUk1fRVJS T1IoIkZhaWxlZCB0byBjcmVhdGUgR3VDIGNsaWVudCBmb3IgcHJlZW1wdGlvbiFcbiIpOwotCQkJ Z3VjX2NsaWVudF9mcmVlKGd1Yy0+ZXhlY2J1Zl9jbGllbnQpOwotCQkJZ3VjLT5leGVjYnVmX2Ns aWVudCA9IE5VTEw7Ci0JCQlyZXR1cm4gUFRSX0VSUihjbGllbnQpOwotCQl9Ci0JCWd1Yy0+cHJl ZW1wdF9jbGllbnQgPSBjbGllbnQ7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNTYsMTAg Kzk3Myw2IEBAIHN0YXRpYyB2b2lkIGd1Y19jbGllbnRzX2Rlc3Ryb3koc3RydWN0IGludGVsX2d1 YyAqZ3VjKQogewogCXN0cnVjdCBpbnRlbF9ndWNfY2xpZW50ICpjbGllbnQ7CiAKLQljbGllbnQg PSBmZXRjaF9hbmRfemVybygmZ3VjLT5wcmVlbXB0X2NsaWVudCk7Ci0JaWYgKGNsaWVudCkKLQkJ Z3VjX2NsaWVudF9mcmVlKGNsaWVudCk7Ci0KIAljbGllbnQgPSBmZXRjaF9hbmRfemVybygmZ3Vj LT5leGVjYnVmX2NsaWVudCk7CiAJaWYgKGNsaWVudCkKIAkJZ3VjX2NsaWVudF9mcmVlKGNsaWVu dCk7CkBAIC0xMjAyLDI4ICsxMDE1LDExIEBAIHN0YXRpYyB2b2lkIF9fZ3VjX2NsaWVudF9kaXNh YmxlKHN0cnVjdCBpbnRlbF9ndWNfY2xpZW50ICpjbGllbnQpCiAKIHN0YXRpYyBpbnQgZ3VjX2Ns aWVudHNfZW5hYmxlKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKIHsKLQlpbnQgcmV0OwotCi0JcmV0 ID0gX19ndWNfY2xpZW50X2VuYWJsZShndWMtPmV4ZWNidWZfY2xpZW50KTsKLQlpZiAocmV0KQot CQlyZXR1cm4gcmV0OwotCi0JaWYgKGd1Yy0+cHJlZW1wdF9jbGllbnQpIHsKLQkJcmV0ID0gX19n dWNfY2xpZW50X2VuYWJsZShndWMtPnByZWVtcHRfY2xpZW50KTsKLQkJaWYgKHJldCkgewotCQkJ X19ndWNfY2xpZW50X2Rpc2FibGUoZ3VjLT5leGVjYnVmX2NsaWVudCk7Ci0JCQlyZXR1cm4gcmV0 OwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIF9fZ3VjX2NsaWVudF9lbmFibGUoZ3Vj LT5leGVjYnVmX2NsaWVudCk7CiB9CiAKIHN0YXRpYyB2b2lkIGd1Y19jbGllbnRzX2Rpc2FibGUo c3RydWN0IGludGVsX2d1YyAqZ3VjKQogewotCWlmIChndWMtPnByZWVtcHRfY2xpZW50KQotCQlf X2d1Y19jbGllbnRfZGlzYWJsZShndWMtPnByZWVtcHRfY2xpZW50KTsKLQogCWlmIChndWMtPmV4 ZWNidWZfY2xpZW50KQogCQlfX2d1Y19jbGllbnRfZGlzYWJsZShndWMtPmV4ZWNidWZfY2xpZW50 KTsKIH0KQEAgLTEyMzQsOSArMTAzMCw2IEBAIHN0YXRpYyB2b2lkIGd1Y19jbGllbnRzX2Rpc2Fi bGUoc3RydWN0IGludGVsX2d1YyAqZ3VjKQogICovCiBpbnQgaW50ZWxfZ3VjX3N1Ym1pc3Npb25f aW5pdChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCiB7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmU7Ci0JZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7CiAJaW50IHJldDsKIAogCWlmIChndWMt PnN0YWdlX2Rlc2NfcG9vbCkKQEAgLTEyNTYsMTEgKzEwNDksNiBAQCBpbnQgaW50ZWxfZ3VjX3N1 Ym1pc3Npb25faW5pdChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCiAJaWYgKHJldCkKIAkJZ290byBl cnJfcG9vbDsKIAotCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpZCkgewotCQln dWMtPnByZWVtcHRfd29ya1tpZF0uZW5naW5lID0gZW5naW5lOwotCQlJTklUX1dPUksoJmd1Yy0+ cHJlZW1wdF93b3JrW2lkXS53b3JrLCBpbmplY3RfcHJlZW1wdF9jb250ZXh0KTsKLQl9Ci0KIAly ZXR1cm4gMDsKIAogZXJyX3Bvb2w6CkBAIC0xMjcwLDEzICsxMDU4LDYgQEAgaW50IGludGVsX2d1 Y19zdWJtaXNzaW9uX2luaXQoc3RydWN0IGludGVsX2d1YyAqZ3VjKQogCiB2b2lkIGludGVsX2d1 Y19zdWJtaXNzaW9uX2Zpbmkoc3RydWN0IGludGVsX2d1YyAqZ3VjKQogewotCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGd1Y190b19pOTE1KGd1Yyk7Ci0Jc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lOwotCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwotCi0JZm9yX2Vh Y2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYsIGlkKQotCQljYW5jZWxfd29ya19zeW5jKCZndWMt PnByZWVtcHRfd29ya1tpZF0ud29yayk7Ci0KIAlndWNfY2xpZW50c19kZXN0cm95KGd1Yyk7CiAJ V0FSTl9PTighZ3VjX3ZlcmlmeV9kb29yYmVsbHMoZ3VjKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9ndWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pbnRlbF9ndWMuYwppbmRleCA2Y2E4NTg0Y2Q2NGMuLjFhMTkxNWU0NGY2 YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2d1Yy5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9ndWMuYwpAQCAtMTAz LDEzICsxMDMsMTAgQEAgc3RhdGljIGludCByaW5nX2Rvb3JiZWxsX25vcChzdHJ1Y3QgaW50ZWxf Z3VjX2NsaWVudCAqY2xpZW50KQogLyoKICAqIEJhc2ljIGNsaWVudCBzYW5pdHkgY2hlY2ssIGhh bmR5IHRvIHZhbGlkYXRlIGNyZWF0ZV9jbGllbnRzLgogICovCi1zdGF0aWMgaW50IHZhbGlkYXRl X2NsaWVudChzdHJ1Y3QgaW50ZWxfZ3VjX2NsaWVudCAqY2xpZW50LAotCQkJICAgaW50IGNsaWVu dF9wcmlvcml0eSwKLQkJCSAgIGJvb2wgaXNfcHJlZW1wdF9jbGllbnQpCitzdGF0aWMgaW50IHZh bGlkYXRlX2NsaWVudChzdHJ1Y3QgaW50ZWxfZ3VjX2NsaWVudCAqY2xpZW50LCBpbnQgY2xpZW50 X3ByaW9yaXR5KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGd1Y190 b19pOTE1KGNsaWVudC0+Z3VjKTsKLQlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4X293bmVy ID0gaXNfcHJlZW1wdF9jbGllbnQgPwotCQkJZGV2X3ByaXYtPnByZWVtcHRfY29udGV4dCA6IGRl dl9wcml2LT5rZXJuZWxfY29udGV4dDsKKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4X293 bmVyID0gZGV2X3ByaXYtPmtlcm5lbF9jb250ZXh0OwogCiAJaWYgKGNsaWVudC0+b3duZXIgIT0g Y3R4X293bmVyIHx8CiAJICAgIGNsaWVudC0+ZW5naW5lcyAhPSBJTlRFTF9JTkZPKGRldl9wcml2 KS0+ZW5naW5lX21hc2sgfHwKQEAgLTE2Myw3ICsxNjAsNyBAQCBzdGF0aWMgaW50IGlndF9ndWNf Y2xpZW50cyh2b2lkICphcmdzKQogCSAqLwogCWd1Y19jbGllbnRzX2Rpc2FibGUoZ3VjKTsKIAln dWNfY2xpZW50c19kZXN0cm95KGd1Yyk7Ci0JaWYgKGd1Yy0+ZXhlY2J1Zl9jbGllbnQgfHwgZ3Vj LT5wcmVlbXB0X2NsaWVudCkgeworCWlmIChndWMtPmV4ZWNidWZfY2xpZW50KSB7CiAJCXByX2Vy cigiZ3VjX2NsaWVudHNfZGVzdHJveSBsaWVkIVxuIik7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdv dG8gdW5sb2NrOwpAQCAtMTc3LDI0ICsxNzQsMTQgQEAgc3RhdGljIGludCBpZ3RfZ3VjX2NsaWVu dHModm9pZCAqYXJncykKIAlHRU1fQlVHX09OKCFndWMtPmV4ZWNidWZfY2xpZW50KTsKIAogCWVy ciA9IHZhbGlkYXRlX2NsaWVudChndWMtPmV4ZWNidWZfY2xpZW50LAotCQkJICAgICAgR1VDX0NM SUVOVF9QUklPUklUWV9LTURfTk9STUFMLCBmYWxzZSk7CisJCQkgICAgICBHVUNfQ0xJRU5UX1BS SU9SSVRZX0tNRF9OT1JNQUwpOwogCWlmIChlcnIpIHsKIAkJcHJfZXJyKCJleGVjYnVnIGNsaWVu dCB2YWxpZGF0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChndWMtPnBy ZWVtcHRfY2xpZW50KSB7Ci0JCWVyciA9IHZhbGlkYXRlX2NsaWVudChndWMtPnByZWVtcHRfY2xp ZW50LAotCQkJCSAgICAgIEdVQ19DTElFTlRfUFJJT1JJVFlfS01EX0hJR0gsIHRydWUpOwotCQlp ZiAoZXJyKSB7Ci0JCQlwcl9lcnIoInByZWVtcHQgY2xpZW50IHZhbGlkYXRpb24gZmFpbGVkXG4i KTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0JLyogZWFjaCBjbGllbnQgc2hvdWxkIG5vdyBo YXZlIHJlc2VydmVkIGEgZG9vcmJlbGwgKi8KLQlpZiAoIWhhc19kb29yYmVsbChndWMtPmV4ZWNi dWZfY2xpZW50KSB8fAotCSAgICAoZ3VjLT5wcmVlbXB0X2NsaWVudCAmJiAhaGFzX2Rvb3JiZWxs KGd1Yy0+cHJlZW1wdF9jbGllbnQpKSkgeworCS8qIHRoZSBjbGllbnQgc2hvdWxkIG5vdyBoYXZl IHJlc2VydmVkIGEgZG9vcmJlbGwgKi8KKwlpZiAoIWhhc19kb29yYmVsbChndWMtPmV4ZWNidWZf Y2xpZW50KSkgewogCQlwcl9lcnIoImd1Y19jbGllbnRzX2NyZWF0ZSBkaWRuJ3QgcmVzZXJ2ZSBk b29yYmVsbHNcbiIpOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKQEAgLTIwNCw4ICsx OTEsNyBAQCBzdGF0aWMgaW50IGlndF9ndWNfY2xpZW50cyh2b2lkICphcmdzKQogCWd1Y19jbGll bnRzX2VuYWJsZShndWMpOwogCiAJLyogZWFjaCBjbGllbnQgc2hvdWxkIG5vdyBoYXZlIHJlY2Vp dmVkIGEgZG9vcmJlbGwgKi8KLQlpZiAoIWNsaWVudF9kb29yYmVsbF9pbl9zeW5jKGd1Yy0+ZXhl Y2J1Zl9jbGllbnQpIHx8Ci0JICAgICFjbGllbnRfZG9vcmJlbGxfaW5fc3luYyhndWMtPnByZWVt cHRfY2xpZW50KSkgeworCWlmICghY2xpZW50X2Rvb3JiZWxsX2luX3N5bmMoZ3VjLT5leGVjYnVm X2NsaWVudCkpIHsKIAkJcHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZG9vcmJlbGxz XG4iKTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CkBAIC0zMDAsOCArMjg2LDcgQEAg c3RhdGljIGludCBpZ3RfZ3VjX2Rvb3JiZWxscyh2b2lkICphcmcpCiAJCQlnb3RvIG91dDsKIAkJ fQogCi0JCWVyciA9IHZhbGlkYXRlX2NsaWVudChjbGllbnRzW2ldLAotCQkJCSAgICAgIGkgJSBH VUNfQ0xJRU5UX1BSSU9SSVRZX05VTSwgZmFsc2UpOworCQllcnIgPSB2YWxpZGF0ZV9jbGllbnQo Y2xpZW50c1tpXSwgaSAlIEdVQ19DTElFTlRfUFJJT1JJVFlfTlVNKTsKIAkJaWYgKGVycikgewog CQkJcHJfZXJyKCJbJWRdIGNsaWVudF9hbGxvYyBzYW5pdHkgY2hlY2sgZmFpbGVkIVxuIiwgaSk7 CiAJCQllcnIgPSAtRUlOVkFMOwotLSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZng=