From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: [PATCH 1/2] drm/i915: Introduce execlist_port_* accessors Date: Tue, 31 Oct 2017 17:27:33 +0200 Message-ID: <20171031152734.11016-1-mika.kuoppala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 789AE6E5E2 for ; Tue, 31 Oct 2017 15:27:53 +0000 (UTC) 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 RnJvbTogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBpbnRlbC5jb20+CgpJbnN0ZWFkIG9m IHRydXN0aW5nIHRoYXQgZmlyc3QgYXZhaWxhYmxlIHBvcnQgaXMgYXQgaW5kZXggMCwKdXNlIGFj Y2Vzc29yIHRvIGhpZGUgdGhpcy4gVGhpcyBpcyBhIHByZXBhcmF0aW9uIGZvciBhCmZvbGxvd2lu ZyBwYXRjaGVzIHdoZXJlIGhlYWQgY2FuIGJlIGF0IGFyYml0cmFyeSBsb2NhdGlvbgppbiB0aGUg cG9ydCBhcnJheS4KCnYyOiBpbXByb3ZlZCBjb21taXQgbWVzc2FnZSwgZWxzcF9yZWFkeSByZWFk YWJpbGl0eSAoQ2hyaXMpCnYzOiBzL2V4ZWNsaXN0X3BvcnRfaW5kZXgvZXhlY2xpc3RfcG9ydCAo Q2hyaXMpCnY0OiByZWJhc2UgdG8gbmV3IG5hbWluZwp2NTogZml4IHBvcnRfbmV4dCBpbmRleGlu Zwp2NjogYWRhcHQgdG8gcHJlZW1wdAoKQ2M6IE1pY2hhxYIgV2luaWFyc2tpIDxtaWNoYWwud2lu aWFyc2tpQGludGVsLmNvbT4KQ2M6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxp bnV4LmludGVsLmNvbT4KQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVr PgpTaWduZWQtb2ZmLWJ5OiBNaWthIEt1b3BwYWxhIDxtaWthLmt1b3BwYWxhQGxpbnV4LmludGVs LmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jICAgICAgfCAg NiArKy0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMgfCA1MCAr KysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2VuZ2luZV9jcy5jICAgICB8IDE4ICsrKysrKy0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9scmMuYyAgICAgICAgICAgfCA0OSArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oICAgIHwgNDQgKysrKysrKysr KysrKysrKysrKysrKysrLS0KIDUgZmlsZXMgY2hhbmdlZCwgMTE5IGluc2VydGlvbnMoKyksIDQ4 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1 X2Vycm9yLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jCmluZGV4IDY1 M2ZiNjllN2VjYi4uNmQwYmRiMDNiM2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dwdV9lcnJvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vy cm9yLmMKQEAgLTEzMzMsMTEgKzEzMzMsMTMgQEAgc3RhdGljIHZvaWQgZW5naW5lX3JlY29yZF9y ZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiBzdGF0aWMgdm9pZCBlcnJv cl9yZWNvcmRfZW5naW5lX2V4ZWNsaXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUs CiAJCQkJCSAgc3RydWN0IGRybV9pOTE1X2Vycm9yX2VuZ2luZSAqZWUpCiB7Ci0JY29uc3Qgc3Ry dWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMgPSAmZW5naW5lLT5l eGVjbGlzdHM7CisJc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlz dHMgPSAmZW5naW5lLT5leGVjbGlzdHM7CiAJdW5zaWduZWQgaW50IG47CiAKIAlmb3IgKG4gPSAw OyBuIDwgZXhlY2xpc3RzX251bV9wb3J0cyhleGVjbGlzdHMpOyBuKyspIHsKLQkJc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpycSA9IHBvcnRfcmVxdWVzdCgmZXhlY2xpc3RzLT5wb3J0W25d KTsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycTsKKworCQlycSA9IHBvcnRfcmVx dWVzdChleGVjbGlzdHNfcG9ydChleGVjbGlzdHMsIG4pKTsKIAogCQlpZiAoIXJxKQogCQkJYnJl YWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9u LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMKaW5kZXggMzA0 OWEwNzgxYjg4Li40NjAwZDA4NzhjOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1 Y19zdWJtaXNzaW9uLmMKQEAgLTY3OCwxNiArNjc4LDE4IEBAIHN0YXRpYyB2b2lkIGk5MTVfZ3Vj X3N1Ym1pdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7CiAJc3RydWN0IGludGVs X2d1YyAqZ3VjID0gJmVuZ2luZS0+aTkxNS0+Z3VjOwogCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhl Y2xpc3RzICogY29uc3QgZXhlY2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xpc3RzOwotCXN0cnVjdCBl eGVjbGlzdF9wb3J0ICpwb3J0ID0gZXhlY2xpc3RzLT5wb3J0OwogCXVuc2lnbmVkIGludCBuOwog CiAJZm9yIChuID0gMDsgbiA8IGV4ZWNsaXN0c19udW1fcG9ydHMoZXhlY2xpc3RzKTsgbisrKSB7 CisJCXN0cnVjdCBleGVjbGlzdF9wb3J0ICpwb3J0OwogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJxOwogCQl1bnNpZ25lZCBpbnQgY291bnQ7CiAKLQkJcnEgPSBwb3J0X3VucGFjaygm cG9ydFtuXSwgJmNvdW50KTsKKwkJcG9ydCA9IGV4ZWNsaXN0c19wb3J0KGV4ZWNsaXN0cywgbik7 CisJCXJxID0gcG9ydF91bnBhY2socG9ydCwgJmNvdW50KTsKKwogCQlpZiAocnEgJiYgY291bnQg PT0gMCkgewotCQkJcG9ydF9zZXQoJnBvcnRbbl0sIHBvcnRfcGFjayhycSwgKytjb3VudCkpOwor CQkJcG9ydF9zZXQocG9ydCwgcG9ydF9wYWNrKHJxLCArK2NvdW50KSk7CiAKIAkJCWZsdXNoX2dn dHRfd3JpdGVzKHJxLT5yaW5nLT52bWEpOwogCkBAIC03MTAsMTAgKzcxMiw4IEBAIHN0YXRpYyB2 b2lkIHBvcnRfYXNzaWduKHN0cnVjdCBleGVjbGlzdF9wb3J0ICpwb3J0LAogc3RhdGljIHZvaWQg aTkxNV9ndWNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7CiAJc3Ry dWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMgPSAmZW5naW5lLT5l eGVjbGlzdHM7Ci0Jc3RydWN0IGV4ZWNsaXN0X3BvcnQgKnBvcnQgPSBleGVjbGlzdHMtPnBvcnQ7 CisJc3RydWN0IGV4ZWNsaXN0X3BvcnQgKnBvcnQsICpsYXN0X3BvcnQ7CiAJc3RydWN0IGRybV9p OTE1X2dlbV9yZXF1ZXN0ICpsYXN0ID0gTlVMTDsKLQljb25zdCBzdHJ1Y3QgZXhlY2xpc3RfcG9y dCAqIGNvbnN0IGxhc3RfcG9ydCA9Ci0JCSZleGVjbGlzdHMtPnBvcnRbZXhlY2xpc3RzLT5wb3J0 X21hc2tdOwogCWJvb2wgc3VibWl0ID0gZmFsc2U7CiAJc3RydWN0IHJiX25vZGUgKnJiOwogCkBA IC03MjQsNiArNzI0LDkgQEAgc3RhdGljIHZvaWQgaTkxNV9ndWNfZGVxdWV1ZShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJaWYgKCFyYikKIAkJZ290byB1bmxvY2s7CiAKKwlwb3J0 ID0gZXhlY2xpc3RzX3BvcnRfaGVhZChleGVjbGlzdHMpOworCWxhc3RfcG9ydCA9IGV4ZWNsaXN0 c19wb3J0X3RhaWwoZXhlY2xpc3RzKTsKKwogCWlmIChIQVNfTE9HSUNBTF9SSU5HX1BSRUVNUFRJ T04oZW5naW5lLT5pOTE1KSAmJiBwb3J0X2lzc2V0KHBvcnQpKSB7CiAJCXN0cnVjdCBndWNfcHJl ZW1wdF93b3JrICpwcmVlbXB0X3dvcmsgPQogCQkJJmVuZ2luZS0+aTkxNS0+Z3VjLnByZWVtcHRf d29ya1tlbmdpbmUtPmlkXTsKQEAgLTczOSw3ICs3NDIsNyBAQCBzdGF0aWMgdm9pZCBpOTE1X2d1 Y19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkJCWdvdG8gdW5sb2Nr OwogCQl9CiAKLQkJcG9ydCsrOworCQlwb3J0ID0gZXhlY2xpc3RzX3BvcnRfbmV4dChleGVjbGlz dHMsIHBvcnQpOwogCX0KIAogCWRvIHsKQEAgLTc1Niw3ICs3NTksOCBAQCBzdGF0aWMgdm9pZCBp OTE1X2d1Y19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAogCQkJCWlm IChzdWJtaXQpCiAJCQkJCXBvcnRfYXNzaWduKHBvcnQsIGxhc3QpOwotCQkJCXBvcnQrKzsKKwor CQkJCXBvcnQgPSBleGVjbGlzdHNfcG9ydF9uZXh0KGV4ZWNsaXN0cywgcG9ydCk7CiAJCQl9CiAK IAkJCUlOSVRfTElTVF9IRUFEKCZycS0+cHJpb3RyZWUubGluayk7CkBAIC03ODQsMjQgKzc4OCwz MiBAQCBzdGF0aWMgdm9pZCBpOTE1X2d1Y19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSkKIAlzcGluX3VubG9ja19pcnEoJmVuZ2luZS0+dGltZWxpbmUtPmxvY2spOwogfQog Ci1zdGF0aWMgdm9pZCBpOTE1X2d1Y19pcnFfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCitz dGF0aWMgdm9pZCBndWNfY29tcGxldGVfcmVhZHlfcG9ydHMoc3RydWN0IGludGVsX2VuZ2luZV9l eGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMpCiB7Ci0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAq IGNvbnN0IGVuZ2luZSA9IChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICopZGF0YTsKLQlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNs aXN0czsKLQlzdHJ1Y3QgZXhlY2xpc3RfcG9ydCAqcG9ydCA9IGV4ZWNsaXN0cy0+cG9ydDsKLQlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxOworCXN0cnVjdCBleGVjbGlzdF9wb3J0ICpw b3J0ID0gZXhlY2xpc3RzX3BvcnRfaGVhZChleGVjbGlzdHMpOworCisJd2hpbGUgKHBvcnRfaXNz ZXQocG9ydCkpIHsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycSA9IHBvcnRfcmVx dWVzdChwb3J0KTsKKworCQlpZiAoIWk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJxKSkKKwkJ CWJyZWFrOwogCi0JcnEgPSBwb3J0X3JlcXVlc3QoJnBvcnRbMF0pOwotCXdoaWxlIChycSAmJiBp OTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChycSkpIHsKIAkJdHJhY2VfaTkxNV9nZW1fcmVxdWVz dF9vdXQocnEpOwogCQlpOTE1X2dlbV9yZXF1ZXN0X3B1dChycSk7CiAKLQkJZXhlY2xpc3RzX3Bv cnRfY29tcGxldGUoZXhlY2xpc3RzLCBwb3J0KTsKKwkJcG9ydCA9IGV4ZWNsaXN0c19oZWFkX2Nv bXBsZXRlKGV4ZWNsaXN0cywgcG9ydCk7CisJfTsKIAotCQlycSA9IHBvcnRfcmVxdWVzdCgmcG9y dFswXSk7Ci0JfQotCWlmICghcnEpCisJaWYgKCFwb3J0X2lzc2V0KHBvcnQpKQogCQlleGVjbGlz dHNfY2xlYXJfYWN0aXZlKGV4ZWNsaXN0cywgRVhFQ0xJU1RTX0FDVElWRV9VU0VSKTsKK30KKwor c3RhdGljIHZvaWQgaTkxNV9ndWNfaXJxX2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQorewor CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKiBjb25zdCBlbmdpbmUgPSAoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqKWRhdGE7CisJc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBl eGVjbGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7CisKKwlndWNfY29tcGxldGVfcmVhZHlfcG9y dHMoZXhlY2xpc3RzKTsKIAogCWlmIChleGVjbGlzdHNfaXNfYWN0aXZlKGV4ZWNsaXN0cywgRVhF Q0xJU1RTX0FDVElWRV9QUkVFTVBUKSAmJgogCSAgICBpbnRlbF9yZWFkX3N0YXR1c19wYWdlKGVu Z2luZSwgSTkxNV9HRU1fSFdTX1BSRUVNUFRfSU5ERVgpID09CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2VuZ2luZV9jcy5jCmluZGV4IGYzMWYyZDYzODRjMy4uMWMwODE4NWEwNWVkIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYwpAQCAtMTY3Myw3ICsxNjczLDcgQEAgc3Rh dGljIHZvaWQgcHJpbnRfcmVxdWVzdChzdHJ1Y3QgZHJtX3ByaW50ZXIgKm0sCiB2b2lkIGludGVs X2VuZ2luZV9kdW1wKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgc3RydWN0IGRybV9w cmludGVyICptKQogewogCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqIGNvbnN0IGIgPSAmZW5n aW5lLT5icmVhZGNydW1iczsKLQljb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAq IGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKKwlzdHJ1Y3QgaW50ZWxfZW5n aW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKIAlz dHJ1Y3QgaTkxNV9ncHVfZXJyb3IgKiBjb25zdCBlcnJvciA9ICZlbmdpbmUtPmk5MTUtPmdwdV9l cnJvcjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7 CiAJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycTsKQEAgLTE3NzcsMTYgKzE3NzcsMjAg QEAgdm9pZCBpbnRlbF9lbmdpbmVfZHVtcChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUs IHN0cnVjdCBkcm1fcHJpbnRlciAqbSkKIAogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWZvciAoaWR4 ID0gMDsgaWR4IDwgZXhlY2xpc3RzX251bV9wb3J0cyhleGVjbGlzdHMpOyBpZHgrKykgewotCQkJ dW5zaWduZWQgaW50IGNvdW50OworCQkJc3RydWN0IGV4ZWNsaXN0X3BvcnQgKnBvcnQ7CisJCQl1 bnNpZ25lZCBpbnQgY291bnQsIGlkeF9hYnM7CisKKwkJCXBvcnQgPSBleGVjbGlzdHNfcG9ydChl eGVjbGlzdHMsIGlkeCk7CisJCQlpZHhfYWJzID0gcG9ydF9pbmRleChwb3J0LCBleGVjbGlzdHMp OwogCi0JCQlycSA9IHBvcnRfdW5wYWNrKCZleGVjbGlzdHMtPnBvcnRbaWR4XSwgJmNvdW50KTsK KwkJCXJxID0gcG9ydF91bnBhY2socG9ydCwgJmNvdW50KTsKIAkJCWlmIChycSkgewotCQkJCWRy bV9wcmludGYobSwgIlx0XHRFTFNQWyVkXSBjb3VudD0lZCwgIiwKLQkJCQkJICAgaWR4LCBjb3Vu dCk7CisJCQkJZHJtX3ByaW50ZihtLCAiXHRcdEVMU1BbJWQ6JWRdIGNvdW50PSVkLCAiLAorCQkJ CQkgICBpZHgsIGlkeF9hYnMsIGNvdW50KTsKIAkJCQlwcmludF9yZXF1ZXN0KG0sIHJxLCAicnE6 ICIpOwogCQkJfSBlbHNlIHsKLQkJCQlkcm1fcHJpbnRmKG0sICJcdFx0RUxTUFslZF0gaWRsZVxu IiwKLQkJCQkJICAgaWR4KTsKKwkJCQlkcm1fcHJpbnRmKG0sICJcdFx0RUxTUFslZDolZF0gaWRs ZVxuIiwKKwkJCQkJICAgaWR4LCBpZHhfYWJzKTsKIAkJCX0KIAkJfQogCQlkcm1fcHJpbnRmKG0s ICJcdFx0SFcgYWN0aXZlPyAweCV4XG4iLCBleGVjbGlzdHMtPmFjdGl2ZSk7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2xyYy5jCmluZGV4IDY4NDBlYzhkYjAzNy4uNjJjM2UwNmExMTBkIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9scmMuYwpAQCAtNDQ4LDI0ICs0NDgsMjYgQEAgc3RhdGljIGlubGluZSB2b2lk IGVsc3Bfd3JpdGUodTY0IGRlc2MsIHUzMiBfX2lvbWVtICplbHNwKQogCiBzdGF0aWMgdm9pZCBl eGVjbGlzdHNfc3VibWl0X3BvcnRzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsK LQlzdHJ1Y3QgZXhlY2xpc3RfcG9ydCAqcG9ydCA9IGVuZ2luZS0+ZXhlY2xpc3RzLnBvcnQ7CisJ c3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMgPSAmZW5naW5l LT5leGVjbGlzdHM7CiAJdTMyIF9faW9tZW0gKmVsc3AgPQogCQllbmdpbmUtPmk5MTUtPnJlZ3Mg KyBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0VMU1AoZW5naW5lKSk7CiAJdW5zaWduZWQgaW50 IG47CiAKLQlmb3IgKG4gPSBleGVjbGlzdHNfbnVtX3BvcnRzKCZlbmdpbmUtPmV4ZWNsaXN0cyk7 IG4tLTsgKSB7CisJZm9yIChuID0gZXhlY2xpc3RzX251bV9wb3J0cyhleGVjbGlzdHMpOyBuLS07 ICkgeworCQlzdHJ1Y3QgZXhlY2xpc3RfcG9ydCAqcG9ydDsKIAkJc3RydWN0IGRybV9pOTE1X2dl bV9yZXF1ZXN0ICpycTsKIAkJdW5zaWduZWQgaW50IGNvdW50OwogCQl1NjQgZGVzYzsKIAotCQly cSA9IHBvcnRfdW5wYWNrKCZwb3J0W25dLCAmY291bnQpOworCQlwb3J0ID0gZXhlY2xpc3RzX3Bv cnQoZXhlY2xpc3RzLCBuKTsKKwkJcnEgPSBwb3J0X3VucGFjayhwb3J0LCAmY291bnQpOwogCQlp ZiAocnEpIHsKIAkJCUdFTV9CVUdfT04oY291bnQgPiAhbik7CiAJCQlpZiAoIWNvdW50KyspCiAJ CQkJZXhlY2xpc3RzX2NvbnRleHRfc3RhdHVzX2NoYW5nZShycSwgSU5URUxfQ09OVEVYVF9TQ0hF RFVMRV9JTik7Ci0JCQlwb3J0X3NldCgmcG9ydFtuXSwgcG9ydF9wYWNrKHJxLCBjb3VudCkpOwor CQkJcG9ydF9zZXQocG9ydCwgcG9ydF9wYWNrKHJxLCBjb3VudCkpOwogCQkJZGVzYyA9IGV4ZWNs aXN0c191cGRhdGVfY29udGV4dChycSk7Ci0JCQlHRU1fREVCVUdfRVhFQyhwb3J0W25dLmNvbnRl eHRfaWQgPSB1cHBlcl8zMl9iaXRzKGRlc2MpKTsKKwkJCUdFTV9ERUJVR19FWEVDKHBvcnQtPmNv bnRleHRfaWQgPSB1cHBlcl8zMl9iaXRzKGRlc2MpKTsKIAkJfSBlbHNlIHsKIAkJCUdFTV9CVUdf T04oIW4pOwogCQkJZGVzYyA9IDA7CkBAIC01MjksMTAgKzUzMSw4IEBAIHN0YXRpYyB2b2lkIGlu amVjdF9wcmVlbXB0X2NvbnRleHQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogc3Rh dGljIHZvaWQgZXhlY2xpc3RzX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQogewogCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3RzID0g JmVuZ2luZS0+ZXhlY2xpc3RzOwotCXN0cnVjdCBleGVjbGlzdF9wb3J0ICpwb3J0ID0gZXhlY2xp c3RzLT5wb3J0OwotCWNvbnN0IHN0cnVjdCBleGVjbGlzdF9wb3J0ICogY29uc3QgbGFzdF9wb3J0 ID0KLQkJJmV4ZWNsaXN0cy0+cG9ydFtleGVjbGlzdHMtPnBvcnRfbWFza107Ci0Jc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpsYXN0ID0gcG9ydF9yZXF1ZXN0KHBvcnQpOworCXN0cnVjdCBl eGVjbGlzdF9wb3J0ICpwb3J0LCAqbGFzdF9wb3J0OworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqbGFzdDsKIAlzdHJ1Y3QgcmJfbm9kZSAqcmI7CiAJYm9vbCBzdWJtaXQgPSBmYWxzZTsK IApAQCAtNTYzLDYgKzU2Myw5IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAlpZiAoIXJiKQogCQlnb3RvIHVubG9jazsKIAor CXBvcnQgPSBleGVjbGlzdHNfcG9ydF9oZWFkKGV4ZWNsaXN0cyk7CisJbGFzdCA9IHBvcnRfcmVx dWVzdChwb3J0KTsKKwogCWlmIChsYXN0KSB7CiAJCS8qCiAJCSAqIERvbid0IHJlc3VibWl0IG9y IHN3aXRjaCB1bnRpbCBhbGwgb3V0c3RhbmRpbmcKQEAgLTU3MCw3ICs1NzMsNyBAQCBzdGF0aWMg dm9pZCBleGVjbGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJ CSAqIGtub3cgdGhlIG5leHQgcHJlZW1wdGlvbiBzdGF0dXMgd2Ugc2VlIGNvcnJlc3BvbmRzCiAJ CSAqIHRvIHRoaXMgRUxTUCB1cGRhdGUuCiAJCSAqLwotCQlpZiAocG9ydF9jb3VudCgmcG9ydFsw XSkgPiAxKQorCQlpZiAocG9ydF9jb3VudChwb3J0KSA+IDEpCiAJCQlnb3RvIHVubG9jazsKIAog CQlpZiAoSEFTX0xPR0lDQUxfUklOR19QUkVFTVBUSU9OKGVuZ2luZS0+aTkxNSkgJiYKQEAgLTYw NSw3ICs2MDgsNyBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCiAJCQkgKiB0aGUgZHJpdmVyIGlzIHVuYWJsZSB0byBrZWVwIHVw IHRoZSBzdXBwbHkgb2YgbmV3CiAJCQkgKiB3b3JrKS4KIAkJCSAqLwotCQkJaWYgKHBvcnRfY291 bnQoJnBvcnRbMV0pKQorCQkJaWYgKHBvcnRfY291bnQoZXhlY2xpc3RzX3BvcnRfbmV4dChleGVj bGlzdHMsIHBvcnQpKSkKIAkJCQlnb3RvIHVubG9jazsKIAogCQkJLyogV2FJZGxlTGl0ZVJlc3Rv cmU6YmR3LHNrbApAQCAtNjE5LDYgKzYyMiw4IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1 ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkJfQogCX0KIAorCWxhc3RfcG9y dCA9IGV4ZWNsaXN0c19wb3J0X3RhaWwoZXhlY2xpc3RzKTsKKwogCWRvIHsKIAkJc3RydWN0IGk5 MTVfcHJpb2xpc3QgKnAgPSByYl9lbnRyeShyYiwgdHlwZW9mKCpwKSwgbm9kZSk7CiAJCXN0cnVj dCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEsICpybjsKQEAgLTY2NSw3ICs2NzAsOCBAQCBzdGF0 aWMgdm9pZCBleGVjbGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp CiAKIAkJCQlpZiAoc3VibWl0KQogCQkJCQlwb3J0X2Fzc2lnbihwb3J0LCBsYXN0KTsKLQkJCQlw b3J0Kys7CisKKwkJCQlwb3J0ID0gZXhlY2xpc3RzX3BvcnRfbmV4dChleGVjbGlzdHMsIHBvcnQp OwogCiAJCQkJR0VNX0JVR19PTihwb3J0X2lzc2V0KHBvcnQpKTsKIAkJCX0KQEAgLTY5OSw4ICs3 MDUsMTAgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQogdm9pZAogZXhlY2xpc3RzX2NhbmNlbF9wb3J0X3JlcXVlc3RzKHN0cnVj dCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3RzKQogewotCXN0cnVjdCBl eGVjbGlzdF9wb3J0ICpwb3J0ID0gZXhlY2xpc3RzLT5wb3J0OwogCXVuc2lnbmVkIGludCBudW1f cG9ydHMgPSBleGVjbGlzdHNfbnVtX3BvcnRzKGV4ZWNsaXN0cyk7CisJc3RydWN0IGV4ZWNsaXN0 X3BvcnQgKnBvcnQ7CisKKwlwb3J0ID0gZXhlY2xpc3RzX3BvcnRfaGVhZChleGVjbGlzdHMpOwog CiAJd2hpbGUgKG51bV9wb3J0cy0tICYmIHBvcnRfaXNzZXQocG9ydCkpIHsKIAkJc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpycSA9IHBvcnRfcmVxdWVzdChwb3J0KTsKQEAgLTcwOSw5ICs3 MTcsMTAgQEAgZXhlY2xpc3RzX2NhbmNlbF9wb3J0X3JlcXVlc3RzKHN0cnVjdCBpbnRlbF9lbmdp bmVfZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3RzKQogCQlleGVjbGlzdHNfY29udGV4dF9zdGF0 dXNfY2hhbmdlKHJxLCBJTlRFTF9DT05URVhUX1NDSEVEVUxFX1BSRUVNUFRFRCk7CiAJCWk5MTVf Z2VtX3JlcXVlc3RfcHV0KHJxKTsKIAotCQltZW1zZXQocG9ydCwgMCwgc2l6ZW9mKCpwb3J0KSk7 Ci0JCXBvcnQrKzsKKwkJcG9ydCA9IGV4ZWNsaXN0c19oZWFkX2NvbXBsZXRlKGV4ZWNsaXN0cywg cG9ydCk7CiAJfQorCisJR0VNX0JVR19PTihwb3J0X2lzc2V0KGV4ZWNsaXN0c19wb3J0X2hlYWQo ZXhlY2xpc3RzKSkpOwogfQogCiBzdGF0aWMgdm9pZCBleGVjbGlzdHNfY2FuY2VsX3JlcXVlc3Rz KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKQEAgLTc3OCw3ICs3ODcsNiBAQCBzdGF0 aWMgdm9pZCBpbnRlbF9scmNfaXJxX2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKiBjb25zdCBlbmdpbmUgPSAoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqKWRhdGE7CiAJc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVj bGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7Ci0Jc3RydWN0IGV4ZWNsaXN0X3BvcnQgKiBjb25z dCBwb3J0ID0gZXhlY2xpc3RzLT5wb3J0OwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGVuZ2luZS0+aTkxNTsKIAogCS8qIFdlIGNhbiBza2lwIGFjcXVpcmluZyBpbnRlbF9y dW50aW1lX3BtX2dldCgpIGhlcmUgYXMgaXQgd2FzIHRha2VuCkBAIC03OTcsNiArODA1LDggQEAg c3RhdGljIHZvaWQgaW50ZWxfbHJjX2lycV9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIAkg KiBuZXcgcmVxdWVzdCAob3V0c2lkZSBvZiB0aGUgY29udGV4dC1zd2l0Y2ggaW50ZXJydXB0KS4K IAkgKi8KIAl3aGlsZSAodGVzdF9iaXQoRU5HSU5FX0lSUV9FWEVDTElTVCwgJmVuZ2luZS0+aXJx X3Bvc3RlZCkpIHsKKwkJc3RydWN0IGV4ZWNsaXN0X3BvcnQgKnBvcnQ7CisKIAkJLyogVGhlIEhX U1AgY29udGFpbnMgYSAoY2FjaGVhYmxlKSBtaXJyb3Igb2YgdGhlIENTQiAqLwogCQljb25zdCB1 MzIgKmJ1ZiA9CiAJCQkmZW5naW5lLT5zdGF0dXNfcGFnZS5wYWdlX2FkZHJbSTkxNV9IV1NfQ1NC X0JVRjBfSU5ERVhdOwpAQCAtODMzLDYgKzg0Myw4IEBAIHN0YXRpYyB2b2lkIGludGVsX2xyY19p cnFfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCiAJCQl0YWlsID0gUkVBRF9PTkNFKGJ1Zlt3 cml0ZV9pZHhdKTsKIAkJfQogCisJCXBvcnQgPSBleGVjbGlzdHNfcG9ydF9oZWFkKGV4ZWNsaXN0 cyk7CisKIAkJd2hpbGUgKGhlYWQgIT0gdGFpbCkgewogCQkJc3RydWN0IGRybV9pOTE1X2dlbV9y ZXF1ZXN0ICpycTsKIAkJCXVuc2lnbmVkIGludCBzdGF0dXM7CkBAIC04OTUsNyArOTA3LDcgQEAg c3RhdGljIHZvaWQgaW50ZWxfbHJjX2lycV9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIAkJ CQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X291dChycSk7CiAJCQkJaTkxNV9nZW1fcmVxdWVzdF9w dXQocnEpOwogCi0JCQkJZXhlY2xpc3RzX3BvcnRfY29tcGxldGUoZXhlY2xpc3RzLCBwb3J0KTsK KwkJCQlwb3J0ID0gZXhlY2xpc3RzX2hlYWRfY29tcGxldGUoZXhlY2xpc3RzLCBwb3J0KTsKIAkJ CX0gZWxzZSB7CiAJCQkJcG9ydF9zZXQocG9ydCwgcG9ydF9wYWNrKHJxLCBjb3VudCkpOwogCQkJ fQpAQCAtOTM1LDYgKzk0Nyw3IEBAIHN0YXRpYyB2b2lkIGluc2VydF9yZXF1ZXN0KHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19zdWJtaXRfcmVx dWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpCiB7CiAJc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lID0gcmVxdWVzdC0+ZW5naW5lOworCXN0cnVjdCBpbnRlbF9l bmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xpc3RzOwog CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBXaWxsIGJlIGNhbGxlZCBmcm9tIGlycS1jb250 ZXh0IHdoZW4gdXNpbmcgZm9yZWlnbiBmZW5jZXMuICovCkBAIC05NDIsNyArOTU1LDcgQEAgc3Rh dGljIHZvaWQgZXhlY2xpc3RzX3N1Ym1pdF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqcmVxdWVzdCkKIAogCWluc2VydF9yZXF1ZXN0KGVuZ2luZSwgJnJlcXVlc3QtPnByaW90 cmVlLCByZXF1ZXN0LT5wcmlvdHJlZS5wcmlvcml0eSk7CiAKLQlHRU1fQlVHX09OKCFlbmdpbmUt PmV4ZWNsaXN0cy5maXJzdCk7CisJR0VNX0JVR19PTighZXhlY2xpc3RzLT5maXJzdCk7CiAJR0VN X0JVR19PTihsaXN0X2VtcHR5KCZyZXF1ZXN0LT5wcmlvdHJlZS5saW5rKSk7CiAKIAlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPnRpbWVsaW5lLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKaW5kZXggNjlhZDg3NWZkMDExLi4zODc2Njdm ZTUwZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIu aAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKQEAgLTI1OSw2 ICsyNTksMTEgQEAgc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgewogCXVuc2lnbmVkIGlu dCBwb3J0X21hc2s7CiAKIAkvKioKKwkgKiBAcG9ydF9oZWFkOiBmaXJzdCB1c2VkIGV4ZWNsaXN0 IHBvcnQKKwkgKi8KKwl1bnNpZ25lZCBpbnQgcG9ydF9oZWFkOworCisJLyoqCiAJICogQHF1ZXVl OiBxdWV1ZSBvZiByZXF1ZXN0cywgaW4gcHJpb3JpdHkgbGlzdHMKIAkgKi8KIAlzdHJ1Y3QgcmJf cm9vdCBxdWV1ZTsKQEAgLTU2OSw4ICs1NzQsNDEgQEAgZXhlY2xpc3RzX251bV9wb3J0cyhjb25z dCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cykKIAlyZXR1 cm4gZXhlY2xpc3RzLT5wb3J0X21hc2sgKyAxOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWV4 ZWNsaXN0c19wb3J0X2NvbXBsZXRlKHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29u c3QgZXhlY2xpc3RzLAorI2RlZmluZSBfX3BvcnRfYWRkKHN0YXJ0LCBuLCBtYXNrKSAoKChzdGFy dCkgKyAobikpICYgKG1hc2spKQorI2RlZmluZSBwb3J0X2hlYWRfYWRkKGUsIG4pIF9fcG9ydF9h ZGQoKGUpLT5wb3J0X2hlYWQsIG4sIChlKS0+cG9ydF9tYXNrKQorCisvKiBJbmRleCBzdGFydGlu ZyBmcm9tIHBvcnRfaGVhZCAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhlY2xpc3RfcG9ydCAq CitleGVjbGlzdHNfcG9ydChzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4 ZWNsaXN0cywKKwkgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG4pCit7CisJcmV0dXJuICZleGVj bGlzdHMtPnBvcnRbcG9ydF9oZWFkX2FkZChleGVjbGlzdHMsIG4pXTsKK30KKworc3RhdGljIGlu bGluZSBzdHJ1Y3QgZXhlY2xpc3RfcG9ydCAqCitleGVjbGlzdHNfcG9ydF9oZWFkKHN0cnVjdCBp bnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3RzKQoreworCXJldHVybiBleGVj bGlzdHNfcG9ydChleGVjbGlzdHMsIDApOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBleGVj bGlzdF9wb3J0ICoKK2V4ZWNsaXN0c19wb3J0X3RhaWwoc3RydWN0IGludGVsX2VuZ2luZV9leGVj bGlzdHMgKiBjb25zdCBleGVjbGlzdHMpCit7CisJcmV0dXJuIGV4ZWNsaXN0c19wb3J0KGV4ZWNs aXN0cywgLTEpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBleGVjbGlzdF9wb3J0ICoKK2V4 ZWNsaXN0c19wb3J0X25leHQoc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBl eGVjbGlzdHMsCisJCSAgICBjb25zdCBzdHJ1Y3QgZXhlY2xpc3RfcG9ydCAqIGNvbnN0IHBvcnQp Cit7CisJY29uc3QgdW5zaWduZWQgaW50IG4gPSBfX3BvcnRfYWRkKHBvcnRfaW5kZXgocG9ydCwg ZXhlY2xpc3RzKSwKKwkJCQkJICAxLAorCQkJCQkgIGV4ZWNsaXN0cy0+cG9ydF9tYXNrKTsKKwly ZXR1cm4gJmV4ZWNsaXN0cy0+cG9ydFtuXTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhl Y2xpc3RfcG9ydCAqCitleGVjbGlzdHNfaGVhZF9jb21wbGV0ZShzdHJ1Y3QgaW50ZWxfZW5naW5l X2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cywKIAkJCXN0cnVjdCBleGVjbGlzdF9wb3J0ICog Y29uc3QgcG9ydCkKIHsKIAljb25zdCB1bnNpZ25lZCBpbnQgbSA9IGV4ZWNsaXN0cy0+cG9ydF9t YXNrOwpAQCAtNTgwLDYgKzYxOCw4IEBAIGV4ZWNsaXN0c19wb3J0X2NvbXBsZXRlKHN0cnVjdCBp bnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3RzLAogCiAJbWVtbW92ZShwb3J0 LCBwb3J0ICsgMSwgbSAqIHNpemVvZihzdHJ1Y3QgZXhlY2xpc3RfcG9ydCkpOwogCW1lbXNldChw b3J0ICsgbSwgMCwgc2l6ZW9mKHN0cnVjdCBleGVjbGlzdF9wb3J0KSk7CisKKwlyZXR1cm4gZXhl Y2xpc3RzX3BvcnRfaGVhZChleGVjbGlzdHMpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVk IGludAotLSAKMi4xMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZngK