From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH v2 06/14] drm/i915: Protect the request->global_seqno with the engine->timeline lock Date: Tue, 14 Feb 2017 09:54:05 +0000 Message-ID: <20170214095413.26452-7-chris@chris-wilson.co.uk> References: <20170214095413.26452-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x244.google.com (mail-wm0-x244.google.com [IPv6:2a00:1450:400c:c09::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id AFD966E646 for ; Tue, 14 Feb 2017 09:54:25 +0000 (UTC) Received: by mail-wm0-x244.google.com with SMTP id r18so2650837wmd.3 for ; Tue, 14 Feb 2017 01:54:25 -0800 (PST) In-Reply-To: <20170214095413.26452-1-chris@chris-wilson.co.uk> 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 QSByZXF1ZXN0IGlzIGFzc2lnbmVkIGEgZ2xvYmFsIHNlcW5vIG9ubHkgd2hlbiBpdCBpcyBvbiB0 aGUgaGFyZHdhcmUKZXhlY3V0aW9uIHF1ZXVlLiBUaGUgZ2xvYmFsIHNlcW5vIGNhbiBiZSB1c2Vk IHRvIG1haW50YWluIGEgbGlzdCBvZgpyZXF1ZXN0cyBvbiB0aGUgc2FtZSBlbmdpbmUgaW4gcmV0 aXJlbWVudCBvcmRlciwgZm9yIGV4YW1wbGUgZm9yCmNvbnN0cnVjdGluZyBhIHByaW9yaXR5IHF1 ZXVlIGZvciB3YWl0aW5nLiBQcmlvciB0byBpdHMgZXhlY3V0aW9uLCBvcgppZiBpdCBpcyBzdWJz ZXF1ZW50bHkgcmVtb3ZlZCBpbiB0aGUgZXZlbnQgb2YgcHJlZW1wdGlvbiwgaXRzIGdsb2JhbApz ZXFubyBpcyB6ZXJvLiBBcyBib3RoIGluc2VydGlvbiBhbmQgcmVtb3ZhbCBmcm9tIHRoZSBleGVj dXRpb24gcXVldWUKbWF5IG9wZXJhdGUgaW4gSVJRIGNvbnRleHQsIGl0IGlzIG5vdCBndWFyZGVk IGJ5IHRoZSB1c3VhbCBzdHJ1Y3RfbXV0ZXgKQktMLiBJbnN0ZWFkIHRob3NlIHJlbHlpbmcgb24g dGhlIGdsb2JhbCBzZXFubyBtdXN0IGJlIHByZXBhcmVkIGZvciBpdHMKdmFsdWUgdG8gY2hhbmdl IGJldHdlZW4gcmVhZHMuIE9ubHkgd2hlbiB0aGUgcmVxdWVzdCBpcyBjb21wbGV0ZSBjYW4KdGhl IGdsb2JhbCBzZXFubyBiZSBzdGFibGUgKGR1ZSB0byB0aGUgbWVtb3J5IGJhcnJpZXJzIG9uIHN1 Ym1pdHRpbmcKdGhlIGNvbW1hbmRzIHRvIHRoZSBoYXJkd2FyZSB0byB3cml0ZSB0aGUgYnJlYWRj cnVtYiwgaWYgdGhlIEhXUyBzaG93cwp0aGF0IGl0IGhhcyBwYXNzZWQgdGhlIGdsb2JhbCBzZXFu byBhbmQgdGhlIGdsb2JhbCBzZXFubyBpcyB1bmNoYW5nZWQKYWZ0ZXIgdGhlIHJlYWQsIGl0IGlz IGluZGVlZCBjb21wbGV0ZSkuCgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNo cmlzLXdpbHNvbi5jby51az4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAg ICAgICAgIHwgMTYgKysrKysrLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAg ICAgICAgfCAxNiArKysrKy0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVz dC5jICB8IDQ2ICsrKysrKysrKysrKysrLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX3JlcXVlc3QuaCAgfCA2NiArKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYnJlYWRjcnVtYnMuYyB8IDExICsrKystLQogNSBm aWxlcyBjaGFuZ2VkLCAxMTQgaW5zZXJ0aW9ucygrKSwgNDEgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKaW5kZXggMjUxYjJkNjY0MDdlLi5jYjY2ZmMzM2NhYjYgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaApAQCAtNDAwNSwxNCArNDAwNSwyNCBAQCB3YWl0X3JlbWFpbmluZ19t c19mcm9tX2ppZmZpZXModW5zaWduZWQgbG9uZyB0aW1lc3RhbXBfamlmZmllcywgaW50IHRvX3dh aXRfbXMpCiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbAotX19pOTE1X3JlcXVlc3RfaXJxX2NvbXBs ZXRlKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQorX19pOTE1X3JlcXVlc3RfaXJx X2NvbXBsZXRlKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQogewogCXN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IHJlcS0+ZW5naW5lOworCXUzMiBzZXFubyA9 IGk5MTVfZ2VtX3JlcXVlc3RfZ2xvYmFsX3NlcW5vKHJlcSk7CisKKwkvKiBUaGUgcmVxdWVzdCB3 YXMgZGVxdWV1ZWQgYmVmb3JlIHdlIHdlcmUgYXdva2VuLiBXZSBjaGVjayBhZnRlcgorCSAqIGlu c3BlY3RpbmcgdGhlIGh3IHRvIGNvbmZpcm0gdGhhdCB0aGlzIHdhcyB0aGUgc2FtZSByZXF1ZXN0 CisJICogdGhhdCBnZW5lcmF0ZWQgdGhlIEhXUyB1cGRhdGUuIFRoZSBtZW1vcnkgYmFycmllcnMg d2l0aGluCisJICogdGhlIHJlcXVlc3QgZXhlY3V0aW9uIGFyZSBzdWZmaWNpZW50IHRvIGVuc3Vy ZSB0aGF0IGEgY2hlY2sKKwkgKiBhZnRlciByZWFkaW5nIHRoZSB2YWx1ZSBmcm9tIGh3IG1hdGNo ZXMgdGhpcyByZXF1ZXN0LgorCSAqLworCWlmICghc2Vxbm8pCisJCXJldHVybiBmYWxzZTsKIAog CS8qIEJlZm9yZSB3ZSBkbyB0aGUgaGVhdmllciBjb2hlcmVudCByZWFkIG9mIHRoZSBzZXFubywK IAkgKiBjaGVjayB0aGUgdmFsdWUgKGhvcGVmdWxseSkgaW4gdGhlIENQVSBjYWNoZWxpbmUuCiAJ ICovCi0JaWYgKF9faTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxKSkKKwlpZiAoX19pOTE1 X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEsIHNlcW5vKSkKIAkJcmV0dXJuIHRydWU7CiAKIAkv KiBFbnN1cmUgb3VyIHJlYWQgb2YgdGhlIHNlcW5vIGlzIGNvaGVyZW50IHNvIHRoYXQgd2UKQEAg LTQwNjMsNyArNDA3Myw3IEBAIF9faTkxNV9yZXF1ZXN0X2lycV9jb21wbGV0ZShzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKIAkJCXdha2VfdXBfcHJvY2Vzcyh0c2spOwogCQlyY3Vf cmVhZF91bmxvY2soKTsKIAotCQlpZiAoX19pOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEp KQorCQlpZiAoX19pOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEsIHNlcW5vKSkKIAkJCXJl dHVybiB0cnVlOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggNzY2ODIwYWU5OTg1 Li5hN2VlYTVmZjQ0Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtNDAwLDcgKzQwMCw3 IEBAIGk5MTVfZ2VtX29iamVjdF93YWl0X2ZlbmNlKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlLAog CWlmIChmbGFncyAmIEk5MTVfV0FJVF9MT0NLRUQgJiYgaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0 ZWQocnEpKQogCQlpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZV91cHRvKHJxKTsKIAotCWlmIChycHMg JiYgcnEtPmdsb2JhbF9zZXFubyA9PSBpbnRlbF9lbmdpbmVfbGFzdF9zdWJtaXQocnEtPmVuZ2lu ZSkpIHsKKwlpZiAocnBzICYmIGk5MTVfZ2VtX3JlcXVlc3RfZ2xvYmFsX3NlcW5vKHJxKSA9PSBp bnRlbF9lbmdpbmVfbGFzdF9zdWJtaXQocnEtPmVuZ2luZSkpIHsKIAkJLyogVGhlIEdQVSBpcyBu b3cgaWRsZSBhbmQgdGhpcyBjbGllbnQgaGFzIHN0YWxsZWQuCiAJCSAqIFNpbmNlIG5vIG90aGVy IGNsaWVudCBoYXMgc3VibWl0dGVkIGEgcmVxdWVzdCBpbiB0aGUKIAkJICogbWVhbnRpbWUsIGFz c3VtZSB0aGF0IHRoaXMgY2xpZW50IGlzIHRoZSBvbmx5IG9uZQpAQCAtMjYxMiw3ICsyNjEyLDgg QEAgc3RhdGljIHZvaWQgaTkxNV9nZW1fY29udGV4dF9tYXJrX2lubm9jZW50KHN0cnVjdCBpOTE1 X2dlbV9jb250ZXh0ICpjdHgpCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKgogaTkxNV9n ZW1fZmluZF9hY3RpdmVfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7 Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0OworCXN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxdWVzdCwgKmFjdGl2ZSA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBm bGFnczsKIAogCS8qIFdlIGFyZSBjYWxsZWQgYnkgdGhlIGVycm9yIGNhcHR1cmUgYW5kIHJlc2V0 IGF0IGEgcmFuZG9tCiAJICogcG9pbnQgaW4gdGltZS4gSW4gcGFydGljdWxhciwgbm90ZSB0aGF0 IG5laXRoZXIgaXMgY3J1Y2lhbGx5CkBAIC0yNjIyLDE3ICsyNjIzLDIyIEBAIGk5MTVfZ2VtX2Zp bmRfYWN0aXZlX3JlcXVlc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCSAqIGV4 dHJhIGRlbGF5IGZvciBhIHJlY2VudCBpbnRlcnJ1cHQgaXMgcG9pbnRsZXNzLiBIZW5jZSwgd2Ug ZG8KIAkgKiBub3QgbmVlZCBhbiBlbmdpbmUtPmlycV9zZXFub19iYXJyaWVyKCkgYmVmb3JlIHRo ZSBzZXFubyByZWFkcy4KIAkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZW5naW5lLT50aW1lbGlu ZS0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxdWVzdCwgJmVuZ2luZS0+ dGltZWxpbmUtPnJlcXVlc3RzLCBsaW5rKSB7Ci0JCWlmIChfX2k5MTVfZ2VtX3JlcXVlc3RfY29t cGxldGVkKHJlcXVlc3QpKQorCQlpZiAoX19pOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXF1 ZXN0LAorCQkJCQkJIHJlcXVlc3QtPmdsb2JhbF9zZXFubykpCiAJCQljb250aW51ZTsKIAogCQlH RU1fQlVHX09OKHJlcXVlc3QtPmVuZ2luZSAhPSBlbmdpbmUpOwogCQlHRU1fQlVHX09OKHRlc3Rf Yml0KERNQV9GRU5DRV9GTEFHX1NJR05BTEVEX0JJVCwKIAkJCQkgICAgJnJlcXVlc3QtPmZlbmNl LmZsYWdzKSk7Ci0JCXJldHVybiByZXF1ZXN0OworCisJCWFjdGl2ZSA9IHJlcXVlc3Q7CisJCWJy ZWFrOwogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPnRpbWVsaW5lLT5sb2Nr LCBmbGFncyk7CiAKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gYWN0aXZlOwogfQogCiBzdGF0aWMg Ym9vbCBlbmdpbmVfc3RhbGxlZChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmMKaW5kZXggYmI1OWFjYWE4YTM0Li41ZGI0 ZmQxZWFiY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVl c3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmMKQEAgLTQx Miw3ICs0MTIsNiBAQCB2b2lkIF9faTkxNV9nZW1fcmVxdWVzdF9zdWJtaXQoc3RydWN0IGRybV9p OTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0KQogCQlpbnRlbF9lbmdpbmVfZW5hYmxlX3NpZ25hbGlu ZyhyZXF1ZXN0KTsKIAlzcGluX3VubG9jaygmcmVxdWVzdC0+bG9jayk7CiAKLQlHRU1fQlVHX09O KCFyZXF1ZXN0LT5nbG9iYWxfc2Vxbm8pOwogCWVuZ2luZS0+ZW1pdF9icmVhZGNydW1iKHJlcXVl c3QsCiAJCQkJcmVxdWVzdC0+cmluZy0+dmFkZHIgKyByZXF1ZXN0LT5wb3N0Zml4KTsKIApAQCAt NDk4LDcgKzQ5Nyw3IEBAIGk5MTVfZ2VtX3JlcXVlc3RfYWxsb2Moc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLAogCS8qIE1vdmUgdGhlIG9sZGVzdCByZXF1ZXN0IHRvIHRoZSBzbGFiLWNh Y2hlIChpZiBub3QgaW4gdXNlISkgKi8KIAlyZXEgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwo JmVuZ2luZS0+dGltZWxpbmUtPnJlcXVlc3RzLAogCQkJCSAgICAgICB0eXBlb2YoKnJlcSksIGxp bmspOwotCWlmIChyZXEgJiYgX19pOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEpKQorCWlm IChyZXEgJiYgaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxKSkKIAkJaTkxNV9nZW1fcmVx dWVzdF9yZXRpcmUocmVxKTsKIAogCS8qIEJld2FyZTogRHJhZ29ucyBiZSBmbHlpbmcgb3Zlcmhl YWQuCkBAIC02MDQsNiArNjAzLDcgQEAgc3RhdGljIGludAogaTkxNV9nZW1fcmVxdWVzdF9hd2Fp dF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqdG8sCiAJCQkgICAgICAgc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpmcm9tKQogeworCXUzMiBzZXFubzsKIAlpbnQgcmV0 OwogCiAJR0VNX0JVR19PTih0byA9PSBmcm9tKTsKQEAgLTYyNiwxNCArNjI2LDE1IEBAIGk5MTVf Z2VtX3JlcXVlc3RfYXdhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnRv LAogCQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CiAJfQogCi0JaWYgKCFmcm9tLT5nbG9iYWxf c2Vxbm8pIHsKKwlzZXFubyA9IGk5MTVfZ2VtX3JlcXVlc3RfZ2xvYmFsX3NlcW5vKGZyb20pOwor CWlmICghc2Vxbm8pIHsKIAkJcmV0ID0gaTkxNV9zd19mZW5jZV9hd2FpdF9kbWFfZmVuY2UoJnRv LT5zdWJtaXQsCiAJCQkJCQkgICAgJmZyb20tPmZlbmNlLCAwLAogCQkJCQkJICAgIEdGUF9LRVJO RUwpOwogCQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CiAJfQogCi0JaWYgKGZyb20tPmdsb2Jh bF9zZXFubyA8PSB0by0+dGltZWxpbmUtPnN5bmNfc2Vxbm9bZnJvbS0+ZW5naW5lLT5pZF0pCisJ aWYgKHNlcW5vIDw9IHRvLT50aW1lbGluZS0+c3luY19zZXFub1tmcm9tLT5lbmdpbmUtPmlkXSkK IAkJcmV0dXJuIDA7CiAKIAl0cmFjZV9pOTE1X2dlbV9yaW5nX3N5bmNfdG8odG8sIGZyb20pOwpA QCAtNjUxLDcgKzY1Miw3IEBAIGk5MTVfZ2VtX3JlcXVlc3RfYXdhaXRfcmVxdWVzdChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnRvLAogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQl0by0+dGlt ZWxpbmUtPnN5bmNfc2Vxbm9bZnJvbS0+ZW5naW5lLT5pZF0gPSBmcm9tLT5nbG9iYWxfc2Vxbm87 CisJdG8tPnRpbWVsaW5lLT5zeW5jX3NlcW5vW2Zyb20tPmVuZ2luZS0+aWRdID0gc2Vxbm87CiAJ cmV0dXJuIDA7CiB9CiAKQEAgLTkzMSw3ICs5MzIsNyBAQCBzdGF0aWMgYm9vbCBidXN5d2FpdF9z dG9wKHVuc2lnbmVkIGxvbmcgdGltZW91dCwgdW5zaWduZWQgaW50IGNwdSkKIH0KIAogYm9vbCBf X2k5MTVfc3Bpbl9yZXF1ZXN0KGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVx LAotCQkJIGludCBzdGF0ZSwgdW5zaWduZWQgbG9uZyB0aW1lb3V0X3VzKQorCQkJIHUzMiBzZXFu bywgaW50IHN0YXRlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXRfdXMpCiB7CiAJdW5zaWduZWQgaW50 IGNwdTsKIApAQCAtOTQ3LDcgKzk0OCwxMSBAQCBib29sIF9faTkxNV9zcGluX3JlcXVlc3QoY29u c3Qgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCiAKIAl0aW1lb3V0X3VzICs9IGxv Y2FsX2Nsb2NrX3VzKCZjcHUpOwogCWRvIHsKLQkJaWYgKF9faTkxNV9nZW1fcmVxdWVzdF9jb21w bGV0ZWQocmVxKSkKKwkJaWYgKHNlcW5vICE9IGk5MTVfZ2VtX3JlcXVlc3RfZ2xvYmFsX3NlcW5v KHJlcSkpCisJCQlicmVhazsKKworCQlpZiAoaTkxNV9zZXFub19wYXNzZWQoaW50ZWxfZW5naW5l X2dldF9zZXFubyhyZXEtPmVuZ2luZSksCisJCQkJICAgICAgc2Vxbm8pKQogCQkJcmV0dXJuIHRy dWU7CiAKIAkJaWYgKHNpZ25hbF9wZW5kaW5nX3N0YXRlKHN0YXRlLCBjdXJyZW50KSkKQEAgLTEw MTEsMTEgKzEwMTYsMTUgQEAgbG9uZyBpOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcSwKIAlpZiAoZmxhZ3MgJiBJOTE1X1dBSVRfTE9DS0VEKQogCQlhZGRf d2FpdF9xdWV1ZShlcnJxLCAmcmVzZXQpOwogCisJaW50ZWxfd2FpdF9pbml0KCZ3YWl0LCBpOTE1 X2dlbV9yZXF1ZXN0X2dsb2JhbF9zZXFubyhyZXEpKTsKKwogCXJlc2V0X3dhaXRfcXVldWUoJnJl cS0+ZXhlY3V0ZSwgJmV4ZWMpOwotCWlmICghcmVxLT5nbG9iYWxfc2Vxbm8pIHsKKwlpZiAoIXdh aXQuc2Vxbm8pIHsKIAkJZG8gewogCQkJc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGUpOwotCQkJaWYg KHJlcS0+Z2xvYmFsX3NlcW5vKQorCisJCQl3YWl0LnNlcW5vID0gaTkxNV9nZW1fcmVxdWVzdF9n bG9iYWxfc2Vxbm8ocmVxKTsKKwkJCWlmICh3YWl0LnNlcW5vKQogCQkJCWJyZWFrOwogCiAJCQlp ZiAoZmxhZ3MgJiBJOTE1X1dBSVRfTE9DS0VEICYmCkBAIC0xMDQzLDcgKzEwNTIsNyBAQCBsb25n IGk5MTVfd2FpdF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAogCQlp ZiAodGltZW91dCA8IDApCiAJCQlnb3RvIGNvbXBsZXRlOwogCi0JCUdFTV9CVUdfT04oIXJlcS0+ Z2xvYmFsX3NlcW5vKTsKKwkJR0VNX0JVR19PTighd2FpdC5zZXFubyk7CiAJfQogCUdFTV9CVUdf T04oIWk5MTVfc3dfZmVuY2Vfc2lnbmFsZWQoJnJlcS0+c3VibWl0KSk7CiAKQEAgLTEwNTIsNyAr MTA2MSw2IEBAIGxvbmcgaTkxNV93YWl0X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICpyZXEsCiAJCWdvdG8gY29tcGxldGU7CiAKIAlzZXRfY3VycmVudF9zdGF0ZShzdGF0ZSk7 Ci0JaW50ZWxfd2FpdF9pbml0KCZ3YWl0LCByZXEtPmdsb2JhbF9zZXFubyk7CiAJaWYgKGludGVs X2VuZ2luZV9hZGRfd2FpdChyZXEtPmVuZ2luZSwgJndhaXQpKQogCQkvKiBJbiBvcmRlciB0byBj aGVjayB0aGF0IHdlIGhhdmVuJ3QgbWlzc2VkIHRoZSBpbnRlcnJ1cHQKIAkJICogYXMgd2UgZW5h YmxlZCBpdCwgd2UgbmVlZCB0byBraWNrIG91cnNlbHZlcyB0byBkbyBhCkBAIC0xMDczLDcgKzEw ODEsOCBAQCBsb25nIGk5MTVfd2FpdF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxLAogCiAJCXRpbWVvdXQgPSBpb19zY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwogCi0J CWlmIChpbnRlbF93YWl0X2NvbXBsZXRlKCZ3YWl0KSkKKwkJaWYgKGludGVsX3dhaXRfY29tcGxl dGUoJndhaXQpICYmCisJCSAgICBpOTE1X2dlbV9yZXF1ZXN0X2dsb2JhbF9zZXFubyhyZXEpID09 IHdhaXQuc2Vxbm8pCiAJCQlicmVhazsKIAogCQlzZXRfY3VycmVudF9zdGF0ZShzdGF0ZSk7CkBA IC0xMTI0LDE0ICsxMTMzLDIxIEBAIGxvbmcgaTkxNV93YWl0X3JlcXVlc3Qoc3RydWN0IGRybV9p OTE1X2dlbV9yZXF1ZXN0ICpyZXEsCiBzdGF0aWMgdm9pZCBlbmdpbmVfcmV0aXJlX3JlcXVlc3Rz KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlcXVlc3QgKnJlcXVlc3QsICpuZXh0OworCXUzMiBzZXFubyA9IGludGVsX2VuZ2luZV9nZXRf c2Vxbm8oZW5naW5lKTsKKwlMSVNUX0hFQUQocmV0aXJlKTsKIAorCXNwaW5fbG9ja19pcnEoJmVu Z2luZS0+dGltZWxpbmUtPmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXF1ZXN0 LCBuZXh0LAogCQkJCSAmZW5naW5lLT50aW1lbGluZS0+cmVxdWVzdHMsIGxpbmspIHsKLQkJaWYg KCFfX2k5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJlcXVlc3QpKQotCQkJcmV0dXJuOworCQlp ZiAoIWk5MTVfc2Vxbm9fcGFzc2VkKHNlcW5vLCByZXF1ZXN0LT5nbG9iYWxfc2Vxbm8pKQorCQkJ YnJlYWs7CiAKLQkJaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmUocmVxdWVzdCk7CisJCWxpc3RfbW92 ZV90YWlsKCZyZXF1ZXN0LT5saW5rLCAmcmV0aXJlKTsKIAl9CisJc3Bpbl91bmxvY2tfaXJxKCZl bmdpbmUtPnRpbWVsaW5lLT5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXF1 ZXN0LCBuZXh0LCAmcmV0aXJlLCBsaW5rKQorCQlpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZShyZXF1 ZXN0KTsKIH0KIAogdm9pZCBpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fcmVxdWVzdC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5o CmluZGV4IDQ2N2QzZTEzZmNlMC4uYjgxZjY3MDk5MDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fcmVxdWVzdC5oCkBAIC0xMzUsNiArMTM1LDExIEBAIHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCB7CiAJc3RydWN0IGk5MTVfcHJpb3RyZWUgcHJpb3RyZWU7CiAJc3RydWN0IGk5 MTVfZGVwZW5kZW5jeSBkZXA7CiAKKwkvKiogR0VNIHNlcXVlbmNlIG51bWJlciBhc3NvY2lhdGVk IHdpdGggdGhpcyByZXF1ZXN0IG9uIHRoZQorCSAqIGdsb2JhbCBleGVjdXRpb24gdGltZWxpbmUu IEl0IGlzIHplcm8gd2hlbiB0aGUgcmVxdWVzdCBpcyBub3QKKwkgKiBvbiB0aGUgSFcgcXVldWUg KGkuZS4gbm90IG9uIHRoZSBlbmdpbmUgdGltZWxpbmUgbGlzdCkuCisJICogSXRzIHZhbHVlIGlz IGd1YXJkZWQgYnkgdGhlIHRpbWVsaW5lIHNwaW5sb2NrLgorCSAqLwogCXUzMiBnbG9iYWxfc2Vx bm87CiAKIAkvKiogUG9zaXRpb24gaW4gdGhlIHJpbmcgb2YgdGhlIHN0YXJ0IG9mIHRoZSByZXF1 ZXN0ICovCkBAIC0yMjksNiArMjM0LDMwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X2dlbV9y ZXF1ZXN0X2Fzc2lnbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKipwZHN0LAogCSpwZHN0 ID0gc3JjOwogfQogCisvKioKKyAqIGk5MTVfZ2VtX3JlcXVlc3RfZ2xvYmFsX3NlcW5vIC0gcmVw b3J0IHRoZSBjdXJyZW50IGdsb2JhbCBzZXFubworICogQHJlcXVlc3QgLSB0aGUgcmVxdWVzdAor ICoKKyAqIEEgcmVxdWVzdCBpcyBhc3NpZ25lZCBhIGdsb2JhbCBzZXFubyBvbmx5IHdoZW4gaXQg aXMgb24gdGhlIGhhcmR3YXJlCisgKiBleGVjdXRpb24gcXVldWUuIFRoZSBnbG9iYWwgc2Vxbm8g Y2FuIGJlIHVzZWQgdG8gbWFpbnRhaW4gYSBsaXN0IG9mCisgKiByZXF1ZXN0cyBvbiB0aGUgc2Ft ZSBlbmdpbmUgaW4gcmV0aXJlbWVudCBvcmRlciwgZm9yIGV4YW1wbGUgZm9yCisgKiBjb25zdHJ1 Y3RpbmcgYSBwcmlvcml0eSBxdWV1ZSBmb3Igd2FpdGluZy4gUHJpb3IgdG8gaXRzIGV4ZWN1dGlv biwgb3IKKyAqIGlmIGl0IGlzIHN1YnNlcXVlbnRseSByZW1vdmVkIGluIHRoZSBldmVudCBvZiBw cmVlbXB0aW9uLCBpdHMgZ2xvYmFsCisgKiBzZXFubyBpcyB6ZXJvLiBBcyBib3RoIGluc2VydGlv biBhbmQgcmVtb3ZhbCBmcm9tIHRoZSBleGVjdXRpb24gcXVldWUKKyAqIG1heSBvcGVyYXRlIGlu IElSUSBjb250ZXh0LCBpdCBpcyBub3QgZ3VhcmRlZCBieSB0aGUgdXN1YWwgc3RydWN0X211dGV4 CisgKiBCS0wuIEluc3RlYWQgdGhvc2UgcmVseWluZyBvbiB0aGUgZ2xvYmFsIHNlcW5vIG11c3Qg YmUgcHJlcGFyZWQgZm9yIGl0cworICogdmFsdWUgdG8gY2hhbmdlIGJldHdlZW4gcmVhZHMuIE9u bHkgd2hlbiB0aGUgcmVxdWVzdCBpcyBjb21wbGV0ZSBjYW4KKyAqIHRoZSBnbG9iYWwgc2Vxbm8g YmUgc3RhYmxlIChkdWUgdG8gdGhlIG1lbW9yeSBiYXJyaWVycyBvbiBzdWJtaXR0aW5nCisgKiB0 aGUgY29tbWFuZHMgdG8gdGhlIGhhcmR3YXJlIHRvIHdyaXRlIHRoZSBicmVhZGNydW1iLCBpZiB0 aGUgSFdTIHNob3dzCisgKiB0aGF0IGl0IGhhcyBwYXNzZWQgdGhlIGdsb2JhbCBzZXFubyBhbmQg dGhlIGdsb2JhbCBzZXFubyBpcyB1bmNoYW5nZWQKKyAqIGFmdGVyIHRoZSByZWFkLCBpdCBpcyBp bmRlZWQgY29tcGxldGUpLgorICovCitzdGF0aWMgdTMyCitpOTE1X2dlbV9yZXF1ZXN0X2dsb2Jh bF9zZXFubyhjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJ cmV0dXJuIFJFQURfT05DRShyZXF1ZXN0LT5nbG9iYWxfc2Vxbm8pOworfQorCiBpbnQKIGk5MTVf Z2VtX3JlcXVlc3RfYXdhaXRfb2JqZWN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqdG8s CiAJCQkgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLApAQCAtMjY5LDQ2ICsy OTgsNTUgQEAgc3RhdGljIGlubGluZSBib29sIGk5MTVfc2Vxbm9fcGFzc2VkKHUzMiBzZXExLCB1 MzIgc2VxMikKIH0KIAogc3RhdGljIGlubGluZSBib29sCi1fX2k5MTVfZ2VtX3JlcXVlc3Rfc3Rh cnRlZChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKK19faTkxNV9nZW1f cmVxdWVzdF9zdGFydGVkKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLCB1 MzIgc2Vxbm8pCiB7Ci0JR0VNX0JVR19PTighcmVxLT5nbG9iYWxfc2Vxbm8pOworCUdFTV9CVUdf T04oIXNlcW5vKTsKIAlyZXR1cm4gaTkxNV9zZXFub19wYXNzZWQoaW50ZWxfZW5naW5lX2dldF9z ZXFubyhyZXEtPmVuZ2luZSksCi0JCQkJIHJlcS0+Z2xvYmFsX3NlcW5vIC0gMSk7CisJCQkJIHNl cW5vIC0gMSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbAogaTkxNV9nZW1fcmVxdWVzdF9zdGFy dGVkKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQogewotCWlmICghcmVx LT5nbG9iYWxfc2Vxbm8pCisJdTMyIHNlcW5vOworCisJc2Vxbm8gPSBpOTE1X2dlbV9yZXF1ZXN0 X2dsb2JhbF9zZXFubyhyZXEpOworCWlmICghc2Vxbm8pCiAJCXJldHVybiBmYWxzZTsKIAotCXJl dHVybiBfX2k5MTVfZ2VtX3JlcXVlc3Rfc3RhcnRlZChyZXEpOworCXJldHVybiBfX2k5MTVfZ2Vt X3JlcXVlc3Rfc3RhcnRlZChyZXEsIHNlcW5vKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sCi1f X2k5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqcmVxKQorX19pOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChjb25zdCBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwgdTMyIHNlcW5vKQogewotCUdFTV9CVUdfT04oIXJlcS0+ Z2xvYmFsX3NlcW5vKTsKLQlyZXR1cm4gaTkxNV9zZXFub19wYXNzZWQoaW50ZWxfZW5naW5lX2dl dF9zZXFubyhyZXEtPmVuZ2luZSksCi0JCQkJIHJlcS0+Z2xvYmFsX3NlcW5vKTsKKwlHRU1fQlVH X09OKCFzZXFubyk7CisJcmV0dXJuIGk5MTVfc2Vxbm9fcGFzc2VkKGludGVsX2VuZ2luZV9nZXRf c2Vxbm8ocmVxLT5lbmdpbmUpLCBzZXFubykgJiYKKwkJc2Vxbm8gPT0gaTkxNV9nZW1fcmVxdWVz dF9nbG9iYWxfc2Vxbm8ocmVxKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sCiBpOTE1X2dlbV9y ZXF1ZXN0X2NvbXBsZXRlZChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkK IHsKLQlpZiAoIXJlcS0+Z2xvYmFsX3NlcW5vKQorCXUzMiBzZXFubzsKKworCXNlcW5vID0gaTkx NV9nZW1fcmVxdWVzdF9nbG9iYWxfc2Vxbm8ocmVxKTsKKwlpZiAoIXNlcW5vKQogCQlyZXR1cm4g ZmFsc2U7CiAKLQlyZXR1cm4gX19pOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEpOworCXJl dHVybiBfX2k5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJlcSwgc2Vxbm8pOwogfQogCiBib29s IF9faTkxNV9zcGluX3JlcXVlc3QoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpy ZXF1ZXN0LAotCQkJIGludCBzdGF0ZSwgdW5zaWduZWQgbG9uZyB0aW1lb3V0X3VzKTsKKwkJCSB1 MzIgc2Vxbm8sIGludCBzdGF0ZSwgdW5zaWduZWQgbG9uZyB0aW1lb3V0X3VzKTsKIHN0YXRpYyBp bmxpbmUgYm9vbCBpOTE1X3NwaW5fcmVxdWVzdChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJlcXVlc3QsCiAJCQkJICAgICBpbnQgc3RhdGUsIHVuc2lnbmVkIGxvbmcgdGltZW91 dF91cykKIHsKLQlyZXR1cm4gKF9faTkxNV9nZW1fcmVxdWVzdF9zdGFydGVkKHJlcXVlc3QpICYm Ci0JCV9faTkxNV9zcGluX3JlcXVlc3QocmVxdWVzdCwgc3RhdGUsIHRpbWVvdXRfdXMpKTsKKwl1 MzIgc2Vxbm87CisKKwlzZXFubyA9IGk5MTVfZ2VtX3JlcXVlc3RfZ2xvYmFsX3NlcW5vKHJlcXVl c3QpOworCXJldHVybiAoX19pOTE1X2dlbV9yZXF1ZXN0X3N0YXJ0ZWQocmVxdWVzdCwgc2Vxbm8p ICYmCisJCV9faTkxNV9zcGluX3JlcXVlc3QocmVxdWVzdCwgc2Vxbm8sIHN0YXRlLCB0aW1lb3V0 X3VzKSk7CiB9CiAKIC8qIFdlIHRyZWF0IHJlcXVlc3RzIGFzIGZlbmNlcy4gVGhpcyBpcyBub3Qg YmUgdG8gY29uZnVzZWQgd2l0aCBvdXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2JyZWFkY3J1bWJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9icmVhZGNy dW1icy5jCmluZGV4IDRmODU5ZTQyM2VmMy4uMWFmN2I0ODE0YmZiIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9icmVhZGNydW1icy5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2JyZWFkY3J1bWJzLmMKQEAgLTUyMyw2ICs1MjMsNyBAQCB2b2lkIGludGVs X2VuZ2luZV9lbmFibGVfc2lnbmFsaW5nKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVx dWVzdCkKIAlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1i czsKIAlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50LCAqKnA7CiAJYm9vbCBmaXJzdCwgd2FrZXVwOwor CXUzMiBzZXFubzsKIAogCS8qIE5vdGUgdGhhdCB3ZSBtYXkgYmUgY2FsbGVkIGZyb20gYW4gaW50 ZXJydXB0IGhhbmRsZXIgb24gYW5vdGhlcgogCSAqIGRldmljZSAoZS5nLiBub3V2ZWF1IHNpZ25h bGluZyBhIGZlbmNlIGNvbXBsZXRpb24gY2F1c2luZyB1cwpAQCAtNTMzLDExICs1MzQsMTMgQEAg dm9pZCBpbnRlbF9lbmdpbmVfZW5hYmxlX3NpZ25hbGluZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJlcXVlc3QpCiAKIAkvKiBsb2NrZWQgYnkgZG1hX2ZlbmNlX2VuYWJsZV9zd19zaWdu YWxpbmcoKSAoaXJxc2FmZSBmZW5jZS0+bG9jaykgKi8KIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJnJl cXVlc3QtPmxvY2spOwotCWlmICghcmVxdWVzdC0+Z2xvYmFsX3NlcW5vKQorCisJc2Vxbm8gPSBp OTE1X2dlbV9yZXF1ZXN0X2dsb2JhbF9zZXFubyhyZXF1ZXN0KTsKKwlpZiAoIXNlcW5vKQogCQly ZXR1cm47CiAKIAlyZXF1ZXN0LT5zaWduYWxpbmcud2FpdC50c2sgPSBiLT5zaWduYWxlcjsKLQly ZXF1ZXN0LT5zaWduYWxpbmcud2FpdC5zZXFubyA9IHJlcXVlc3QtPmdsb2JhbF9zZXFubzsKKwly ZXF1ZXN0LT5zaWduYWxpbmcud2FpdC5zZXFubyA9IHNlcW5vOwogCWk5MTVfZ2VtX3JlcXVlc3Rf Z2V0KHJlcXVlc3QpOwogCiAJc3Bpbl9sb2NrKCZiLT5sb2NrKTsKQEAgLTU2MSw4ICs1NjQsOCBA QCB2b2lkIGludGVsX2VuZ2luZV9lbmFibGVfc2lnbmFsaW5nKHN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcmVxdWVzdCkKIAlwID0gJmItPnNpZ25hbHMucmJfbm9kZTsKIAl3aGlsZSAoKnAp IHsKIAkJcGFyZW50ID0gKnA7Ci0JCWlmIChpOTE1X3NlcW5vX3Bhc3NlZChyZXF1ZXN0LT5nbG9i YWxfc2Vxbm8sCi0JCQkJICAgICAgdG9fc2lnbmFsZXIocGFyZW50KS0+Z2xvYmFsX3NlcW5vKSkg eworCQlpZiAoaTkxNV9zZXFub19wYXNzZWQoc2Vxbm8sCisJCQkJICAgICAgdG9fc2lnbmFsZXIo cGFyZW50KS0+c2lnbmFsaW5nLndhaXQuc2Vxbm8pKSB7CiAJCQlwID0gJnBhcmVudC0+cmJfcmln aHQ7CiAJCQlmaXJzdCA9IGZhbHNlOwogCQl9IGVsc2UgewotLSAKMi4xMS4wCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK