From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Subject: [PATCH 05/26] drm/radeon: rework gpu lockup detection and processing Date: Wed, 25 Apr 2012 14:46:22 +0200 Message-ID: <1335358003-2987-6-git-send-email-deathsimple@vodafone.de> References: <1335358003-2987-1-git-send-email-deathsimple@vodafone.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from outgoing.email.vodafone.de (outgoing.email.vodafone.de [139.7.28.128]) by gabe.freedesktop.org (Postfix) with ESMTP id 63FAAA0D15 for ; Wed, 25 Apr 2012 05:46:50 -0700 (PDT) In-Reply-To: <1335358003-2987-1-git-send-email-deathsimple@vodafone.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: dri-devel@lists.freedesktop.org Cc: =?UTF-8?q?Christian=20K=C3=B6nig?= List-Id: dri-devel@lists.freedesktop.org UHJldml1c2x5IG11bHRpcGxlIHJpbmdzIGNvdWxkIHRyaWdnZXIgbXVsdGlwbGUgR1BVCnJlc2V0 cyBhdCB0aGUgc2FtZSB0aW1lLgoKU2lnbmVkLW9mZi1ieTogQ2hyaXN0aWFuIEvDtm5pZyA8ZGVh dGhzaW1wbGVAdm9kYWZvbmUuZGU+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24u aCAgICAgICB8ICAgIDMgKy0KIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZlbmNlLmMg fCAgMTQ2ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2Vk LCA3NSBpbnNlcnRpb25zKCspLCA3NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24u aAppbmRleCBlMjM3MTI3Li45MjY4MmI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFk ZW9uL3JhZGVvbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKQEAgLTI1 NSw4ICsyNTUsNyBAQCBzdHJ1Y3QgcmFkZW9uX2ZlbmNlX2RyaXZlciB7CiAJdm9sYXRpbGUgdWlu dDMyX3QJCSpjcHVfYWRkcjsKIAlhdG9taWNfdAkJCXNlcTsKIAl1aW50MzJfdAkJCWxhc3Rfc2Vx OwotCXVuc2lnbmVkIGxvbmcJCQlsYXN0X2ppZmZpZXM7Ci0JdW5zaWduZWQgbG9uZwkJCWxhc3Rf dGltZW91dDsKKwl1bnNpZ25lZCBsb25nCQkJbGFzdF9hY3Rpdml0eTsKIAl3YWl0X3F1ZXVlX2hl YWRfdAkJcXVldWU7CiAJc3RydWN0IGxpc3RfaGVhZAkJY3JlYXRlZDsKIAlzdHJ1Y3QgbGlzdF9o ZWFkCQllbWl0dGVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25f ZmVuY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZlbmNlLmMKaW5kZXggMzZj NDExZi4uMWE5NzY1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25f ZmVuY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mZW5jZS5jCkBAIC03 NCw2ICs3NCwxMCBAQCBpbnQgcmFkZW9uX2ZlbmNlX2VtaXQoc3RydWN0IHJhZGVvbl9kZXZpY2Ug KnJkZXYsIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQogCXJhZGVvbl9mZW5jZV9yaW5nX2Vt aXQocmRldiwgZmVuY2UtPnJpbmcsIGZlbmNlKTsKIAl0cmFjZV9yYWRlb25fZmVuY2VfZW1pdChy ZGV2LT5kZGV2LCBmZW5jZS0+c2VxKTsKIAlmZW5jZS0+ZW1pdHRlZCA9IHRydWU7CisJLyogYXJl IHdlIHRoZSBmaXJzdCBmZW5jZSBvbiBhIHByZXZpdXNseSBpZGxlIHJpbmc/ICovCisJaWYgKGxp c3RfZW1wdHkoJnJkZXYtPmZlbmNlX2RydltmZW5jZS0+cmluZ10uZW1pdHRlZCkpIHsKKwkJcmRl di0+ZmVuY2VfZHJ2W2ZlbmNlLT5yaW5nXS5sYXN0X2FjdGl2aXR5ID0gamlmZmllczsKKwl9CiAJ bGlzdF9tb3ZlX3RhaWwoJmZlbmNlLT5saXN0LCAmcmRldi0+ZmVuY2VfZHJ2W2ZlbmNlLT5yaW5n XS5lbWl0dGVkKTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcmRldi0+ZmVuY2VfbG9jaywg aXJxX2ZsYWdzKTsKIAlyZXR1cm4gMDsKQEAgLTg1LDM0ICs4OSwxNCBAQCBzdGF0aWMgYm9vbCBy YWRlb25fZmVuY2VfcG9sbF9sb2NrZWQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBy aW5nKQogCXN0cnVjdCBsaXN0X2hlYWQgKmksICpuOwogCXVpbnQzMl90IHNlcTsKIAlib29sIHdh a2UgPSBmYWxzZTsKLQl1bnNpZ25lZCBsb25nIGNqaWZmaWVzOwogCiAJc2VxID0gcmFkZW9uX2Zl bmNlX3JlYWQocmRldiwgcmluZyk7Ci0JaWYgKHNlcSAhPSByZGV2LT5mZW5jZV9kcnZbcmluZ10u bGFzdF9zZXEpIHsKLQkJcmRldi0+ZmVuY2VfZHJ2W3JpbmddLmxhc3Rfc2VxID0gc2VxOwotCQly ZGV2LT5mZW5jZV9kcnZbcmluZ10ubGFzdF9qaWZmaWVzID0gamlmZmllczsKLQkJcmRldi0+ZmVu Y2VfZHJ2W3JpbmddLmxhc3RfdGltZW91dCA9IFJBREVPTl9GRU5DRV9KSUZGSUVTX1RJTUVPVVQ7 Ci0JfSBlbHNlIHsKLQkJY2ppZmZpZXMgPSBqaWZmaWVzOwotCQlpZiAodGltZV9hZnRlcihjamlm ZmllcywgcmRldi0+ZmVuY2VfZHJ2W3JpbmddLmxhc3RfamlmZmllcykpIHsKLQkJCWNqaWZmaWVz IC09IHJkZXYtPmZlbmNlX2RydltyaW5nXS5sYXN0X2ppZmZpZXM7Ci0JCQlpZiAodGltZV9hZnRl cihyZGV2LT5mZW5jZV9kcnZbcmluZ10ubGFzdF90aW1lb3V0LCBjamlmZmllcykpIHsKLQkJCQkv KiB1cGRhdGUgdGhlIHRpbWVvdXQgKi8KLQkJCQlyZGV2LT5mZW5jZV9kcnZbcmluZ10ubGFzdF90 aW1lb3V0IC09IGNqaWZmaWVzOwotCQkJfSBlbHNlIHsKLQkJCQkvKiB0aGUgNTAwbXMgdGltZW91 dCBpcyBlbGFwc2VkIHdlIHNob3VsZCB0ZXN0Ci0JCQkJICogZm9yIEdQVSBsb2NrdXAKLQkJCQkg Ki8KLQkJCQlyZGV2LT5mZW5jZV9kcnZbcmluZ10ubGFzdF90aW1lb3V0ID0gMTsKLQkJCX0KLQkJ fSBlbHNlIHsKLQkJCS8qIHdyYXAgYXJvdW5kIHVwZGF0ZSBsYXN0IGppZmZpZXMsIHdlIHdpbGwg anVzdCB3YWl0Ci0JCQkgKiBhIGxpdHRsZSBsb25nZXIKLQkJCSAqLwotCQkJcmRldi0+ZmVuY2Vf ZHJ2W3JpbmddLmxhc3RfamlmZmllcyA9IGNqaWZmaWVzOwotCQl9CisJaWYgKHNlcSA9PSByZGV2 LT5mZW5jZV9kcnZbcmluZ10ubGFzdF9zZXEpCiAJCXJldHVybiBmYWxzZTsKLQl9CisKKwlyZGV2 LT5mZW5jZV9kcnZbcmluZ10ubGFzdF9zZXEgPSBzZXE7CisJcmRldi0+ZmVuY2VfZHJ2W3Jpbmdd Lmxhc3RfYWN0aXZpdHkgPSBqaWZmaWVzOworCiAJbiA9IE5VTEw7CiAJbGlzdF9mb3JfZWFjaChp LCAmcmRldi0+ZmVuY2VfZHJ2W3JpbmddLmVtaXR0ZWQpIHsKIAkJZmVuY2UgPSBsaXN0X2VudHJ5 KGksIHN0cnVjdCByYWRlb25fZmVuY2UsIGxpc3QpOwpAQCAtMjA3LDY2ICsxOTEsODQgQEAgaW50 IHJhZGVvbl9mZW5jZV93YWl0KHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlLCBib29sIGludHIp CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXY7CiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3Ms IHRpbWVvdXQ7CiAJdTMyIHNlcTsKLQlpbnQgcjsKKwlpbnQgaSwgcjsKKwlib29sIHNpZ25hbGVk OwogCiAJaWYgKGZlbmNlID09IE5VTEwpIHsKIAkJV0FSTigxLCAiUXVlcnlpbmcgYW4gaW52YWxp ZCBmZW5jZSA6ICVwICFcbiIsIGZlbmNlKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRUlOVkFM OwogCX0KKwogCXJkZXYgPSBmZW5jZS0+cmRldjsKLQlpZiAocmFkZW9uX2ZlbmNlX3NpZ25hbGVk KGZlbmNlKSkgewotCQlyZXR1cm4gMDsKLQl9Ci0JdGltZW91dCA9IHJkZXYtPmZlbmNlX2Rydltm ZW5jZS0+cmluZ10ubGFzdF90aW1lb3V0OwotcmV0cnk6Ci0JLyogc2F2ZSBjdXJyZW50IHNlcXVl bmNlIHVzZWQgdG8gY2hlY2sgZm9yIEdQVSBsb2NrdXAgKi8KLQlzZXEgPSByZGV2LT5mZW5jZV9k cnZbZmVuY2UtPnJpbmddLmxhc3Rfc2VxOwotCXRyYWNlX3JhZGVvbl9mZW5jZV93YWl0X2JlZ2lu KHJkZXYtPmRkZXYsIHNlcSk7Ci0JaWYgKGludHIpIHsKKwlzaWduYWxlZCA9IHJhZGVvbl9mZW5j ZV9zaWduYWxlZChmZW5jZSk7CisJd2hpbGUgKCFzaWduYWxlZCkgeworCQlyZWFkX2xvY2tfaXJx c2F2ZSgmcmRldi0+ZmVuY2VfbG9jaywgaXJxX2ZsYWdzKTsKKwkJdGltZW91dCA9IGppZmZpZXMg LSBSQURFT05fRkVOQ0VfSklGRklFU19USU1FT1VUOworCQlpZiAodGltZV9hZnRlcihyZGV2LT5m ZW5jZV9kcnZbZmVuY2UtPnJpbmddLmxhc3RfYWN0aXZpdHksIHRpbWVvdXQpKSB7CisJCQkvKiB0 aGUgbm9ybWFsIGNhc2UsIHRpbWVvdXQgaXMgc29tZXdoZXJlIGJlZm9yZSBsYXN0X2FjdGl2aXR5 ICovCisJCQl0aW1lb3V0ID0gcmRldi0+ZmVuY2VfZHJ2W2ZlbmNlLT5yaW5nXS5sYXN0X2FjdGl2 aXR5IC0gdGltZW91dDsKKwkJfSBlbHNlIHsKKwkJCS8qIGVpdGhlciBqaWZmaWVzIHdyYXBwZWQg YXJvdW5kLCBvciBubyBmZW5jZSB3YXMgc2lnbmFsZWQgaW4gdGhlIGxhc3QgNTAwbXMKKwkJCSAq IGFueXdheSB3ZSB3aWxsIGp1c3Qgd2FpdCBmb3IgdGhlIG1pbmltdW0gYW1vdW50IGFuZCB0aGVu IGNoZWNrIGZvciBhIGxvY2t1cCAqLworCQkJdGltZW91dCA9IDE7CisJCX0KKwkJLyogc2F2ZSBj dXJyZW50IHNlcXVlbmNlIHZhbHVlIHVzZWQgdG8gY2hlY2sgZm9yIEdQVSBsb2NrdXBzICovCisJ CXNlcSA9IHJkZXYtPmZlbmNlX2RydltmZW5jZS0+cmluZ10ubGFzdF9zZXE7CisJCXJlYWRfdW5s b2NrX2lycXJlc3RvcmUoJnJkZXYtPmZlbmNlX2xvY2ssIGlycV9mbGFncyk7CisKKwkJdHJhY2Vf cmFkZW9uX2ZlbmNlX3dhaXRfYmVnaW4ocmRldi0+ZGRldiwgc2VxKTsKIAkJcmFkZW9uX2lycV9r bXNfc3dfaXJxX2dldChyZGV2LCBmZW5jZS0+cmluZyk7Ci0JCXIgPSB3YWl0X2V2ZW50X2ludGVy cnVwdGlibGVfdGltZW91dChyZGV2LT5mZW5jZV9kcnZbZmVuY2UtPnJpbmddLnF1ZXVlLAotCQkJ CXJhZGVvbl9mZW5jZV9zaWduYWxlZChmZW5jZSksIHRpbWVvdXQpOworCQlpZiAoaW50cikgewor CQkJciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQkJCXJkZXYtPmZlbmNl X2RydltmZW5jZS0+cmluZ10ucXVldWUsCisJCQkJKHNpZ25hbGVkID0gcmFkZW9uX2ZlbmNlX3Np Z25hbGVkKGZlbmNlKSksIHRpbWVvdXQpOworCQl9IGVsc2UgeworCQkJciA9IHdhaXRfZXZlbnRf dGltZW91dCgKKwkJCQlyZGV2LT5mZW5jZV9kcnZbZmVuY2UtPnJpbmddLnF1ZXVlLAorCQkJCShz aWduYWxlZCA9IHJhZGVvbl9mZW5jZV9zaWduYWxlZChmZW5jZSkpLCB0aW1lb3V0KTsKKwkJfQog CQlyYWRlb25faXJxX2ttc19zd19pcnFfcHV0KHJkZXYsIGZlbmNlLT5yaW5nKTsKIAkJaWYgKHVu bGlrZWx5KHIgPCAwKSkgewogCQkJcmV0dXJuIHI7CiAJCX0KLQl9IGVsc2UgewotCQlyYWRlb25f aXJxX2ttc19zd19pcnFfZ2V0KHJkZXYsIGZlbmNlLT5yaW5nKTsKLQkJciA9IHdhaXRfZXZlbnRf dGltZW91dChyZGV2LT5mZW5jZV9kcnZbZmVuY2UtPnJpbmddLnF1ZXVlLAotCQkJIHJhZGVvbl9m ZW5jZV9zaWduYWxlZChmZW5jZSksIHRpbWVvdXQpOwotCQlyYWRlb25faXJxX2ttc19zd19pcnFf cHV0KHJkZXYsIGZlbmNlLT5yaW5nKTsKLQl9Ci0JdHJhY2VfcmFkZW9uX2ZlbmNlX3dhaXRfZW5k KHJkZXYtPmRkZXYsIHNlcSk7Ci0JaWYgKHVubGlrZWx5KCFyYWRlb25fZmVuY2Vfc2lnbmFsZWQo ZmVuY2UpKSkgewotCQkvKiB3ZSB3ZXJlIGludGVycnVwdGVkIGZvciBzb21lIHJlYXNvbiBhbmQg ZmVuY2UgaXNuJ3QKLQkJICogaXNuJ3Qgc2lnbmFsZWQgeWV0LCByZXN1bWUgd2FpdAotCQkgKi8K LQkJaWYgKHIpIHsKLQkJCXRpbWVvdXQgPSByOwotCQkJZ290byByZXRyeTsKLQkJfQotCQkvKiBk b24ndCBwcm90ZWN0IHJlYWQgYWNjZXNzIHRvIHJkZXYtPmZlbmNlX2Rydlt0XS5sYXN0X3NlcQot CQkgKiBpZiB3ZSBleHBlcmllbmNpbmcgYSBsb2NrdXAgdGhlIHZhbHVlIGRvZXNuJ3QgY2hhbmdl Ci0JCSAqLwotCQlpZiAoc2VxID09IHJkZXYtPmZlbmNlX2RydltmZW5jZS0+cmluZ10ubGFzdF9z ZXEgJiYKLQkJICAgIHJhZGVvbl9yaW5nX2lzX2xvY2t1cChyZGV2LCBmZW5jZS0+cmluZywgJnJk ZXYtPnJpbmdbZmVuY2UtPnJpbmddKSkgewotCi0JCQkvKiBnb29kIG5ld3Mgd2UgYmVsaWV2ZSBp dCdzIGEgbG9ja3VwICovCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJHUFUgbG9ja3VwICh3YWl0 aW5nIGZvciAweCUwOFggbGFzdCBmZW5jZSBpZCAweCUwOFgpXG4iLAotCQkJICAgICBmZW5jZS0+ c2VxLCBzZXEpOwotCi0JCQkvKiBtYXJrIHRoZSByaW5nIGFzIG5vdCByZWFkeSBhbnkgbW9yZSAq LwotCQkJcmRldi0+cmluZ1tmZW5jZS0+cmluZ10ucmVhZHkgPSBmYWxzZTsKLQkJCXIgPSByYWRl b25fZ3B1X3Jlc2V0KHJkZXYpOwotCQkJaWYgKHIpCi0JCQkJcmV0dXJuIHI7CisJCXRyYWNlX3Jh ZGVvbl9mZW5jZV93YWl0X2VuZChyZGV2LT5kZGV2LCBzZXEpOworCisJCWlmICh1bmxpa2VseSgh c2lnbmFsZWQpKSB7CisJCQkvKiB3ZSB3ZXJlIGludGVycnVwdGVkIGZvciBzb21lIHJlYXNvbiBh bmQgZmVuY2UKKwkJCSAqIGlzbid0IHNpZ25hbGVkIHlldCwgcmVzdW1lIHdhaXRpbmcgKi8KKwkJ CWlmIChyKSB7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXdyaXRlX2xvY2tfaXJxc2F2ZSgm cmRldi0+ZmVuY2VfbG9jaywgaXJxX2ZsYWdzKTsKKwkJCS8qIGNoZWNrIGlmIHNlcXVlbmNlIHZh bHVlIGhhcyBjaGFuZ2VkIHNpbmNlIGxhc3RfYWN0aXZpdHkgKi8KKwkJCWlmIChzZXEgIT0gcmRl di0+ZmVuY2VfZHJ2W2ZlbmNlLT5yaW5nXS5sYXN0X3NlcSkgeworCQkJCXdyaXRlX3VubG9ja19p cnFyZXN0b3JlKCZyZGV2LT5mZW5jZV9sb2NrLCBpcnFfZmxhZ3MpOworCQkJCWNvbnRpbnVlOwor CQkJfQorCisJCQkvKiBjaGFuZ2Ugc2VxdWVuY2UgdmFsdWUgb24gYWxsIHJpbmdzLCBzbyBub2Jv ZHkgZWxzZSB0aGluZ3MgdGhlcmUgaXMgYSBsb2NrdXAgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBS QURFT05fTlVNX1JJTkdTOyArK2kpCisJCQkJcmRldi0+ZmVuY2VfZHJ2W2ldLmxhc3Rfc2VxIC09 IDB4MTAwMDA7CisJCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcmRldi0+ZmVuY2VfbG9jaywg aXJxX2ZsYWdzKTsKKworCQkJaWYgKHJhZGVvbl9yaW5nX2lzX2xvY2t1cChyZGV2LCBmZW5jZS0+ cmluZywgJnJkZXYtPnJpbmdbZmVuY2UtPnJpbmddKSkgeworCisJCQkJLyogZ29vZCBuZXdzIHdl IGJlbGlldmUgaXQncyBhIGxvY2t1cCAqLworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkdQVSBs b2NrdXAgKHdhaXRpbmcgZm9yIDB4JTA4WCBsYXN0IGZlbmNlIGlkIDB4JTA4WClcbiIsCisJCQkJ ICAgICBmZW5jZS0+c2VxLCBzZXEpOworCisJCQkJLyogbWFyayB0aGUgcmluZyBhcyBub3QgcmVh ZHkgYW55IG1vcmUgKi8KKwkJCQlyZGV2LT5yaW5nW2ZlbmNlLT5yaW5nXS5yZWFkeSA9IGZhbHNl OworCQkJCXIgPSByYWRlb25fZ3B1X3Jlc2V0KHJkZXYpOworCQkJCWlmIChyKQorCQkJCQlyZXR1 cm4gcjsKKworCQkJCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcmRldi0+ZmVuY2VfbG9jaywgaXJxX2Zs YWdzKTsKKwkJCQlyZGV2LT5mZW5jZV9kcnZbZmVuY2UtPnJpbmddLmxhc3RfYWN0aXZpdHkgPSBq aWZmaWVzOworCQkJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZyZGV2LT5mZW5jZV9sb2NrLCBp cnFfZmxhZ3MpOworCQkJfQogCQl9Ci0JCXRpbWVvdXQgPSBSQURFT05fRkVOQ0VfSklGRklFU19U SU1FT1VUOwotCQl3cml0ZV9sb2NrX2lycXNhdmUoJnJkZXYtPmZlbmNlX2xvY2ssIGlycV9mbGFn cyk7Ci0JCXJkZXYtPmZlbmNlX2RydltmZW5jZS0+cmluZ10ubGFzdF90aW1lb3V0ID0gUkFERU9O X0ZFTkNFX0pJRkZJRVNfVElNRU9VVDsKLQkJcmRldi0+ZmVuY2VfZHJ2W2ZlbmNlLT5yaW5nXS5s YXN0X2ppZmZpZXMgPSBqaWZmaWVzOwotCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcmRldi0+ ZmVuY2VfbG9jaywgaXJxX2ZsYWdzKTsKLQkJZ290byByZXRyeTsKIAl9CiAJcmV0dXJuIDA7CiB9 Ci0tIAoxLjcuNS40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl bAo=