From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EB126C4332D for ; Thu, 11 Mar 2021 13:49:47 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 921A864F8E for ; Thu, 11 Mar 2021 13:49:47 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 921A864F8E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C2D1B6ECD7; Thu, 11 Mar 2021 13:49:22 +0000 (UTC) Received: from mblankhorst.nl (mblankhorst.nl [IPv6:2a02:2308::216:3eff:fe92:dfa3]) by gabe.freedesktop.org (Postfix) with ESMTPS id F02DA6ECB2 for ; Thu, 11 Mar 2021 13:48:55 +0000 (UTC) From: Maarten Lankhorst To: intel-gfx@lists.freedesktop.org Date: Thu, 11 Mar 2021 14:42:20 +0100 Message-Id: <20210311134249.588632-41-maarten.lankhorst@linux.intel.com> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210311134249.588632-1-maarten.lankhorst@linux.intel.com> References: <20210311134249.588632-1-maarten.lankhorst@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v8 40/69] drm/i915: Use a single page table lock for each gtt. X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" V2UgbWF5IGNyZWF0ZSBwYWdlIHRhYmxlIG9iamVjdHMgb24gdGhlIGZseSwgYnV0IHdlIG1heSBu ZWVkIHRvCndhaXQgd2l0aCB0aGUgd3cgbG9jayBoZWxkLiBJbnN0ZWFkIG9mIHdhaXRpbmcgb24g YSBmcmVlZCBvYmoKbG9jaywgZW5zdXJlIHdlIGhhdmUgdGhlIHNhbWUgbG9jayBmb3IgZWFjaCBv YmplY3QgdG8ga2VlcAotRURFQURMSyB3b3JraW5nLiBUaGlzIGVuc3VyZXMgdGhhdCBpOTE1X3Zt YV9waW5fd3cgY2FuIGxvY2sKdGhlIHBhZ2UgdGFibGVzIHdoZW4gcmVxdWlyZWQuCgpTaWduZWQt b2ZmLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwu Y29tPgpSZXZpZXdlZC1ieTogVGhvbWFzIEhlbGxzdHLDtm0gPHRob21hcy5oZWxsc3Ryb21AbGlu dXguaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2dndHQuYyAg fCAgOCArKysrKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0dC5jICAgfCAzOCAr KysrKysrKysrKysrKysrKysrKysrKysrKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2d0dC5oICAgfCAgNSArKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9wcGd0dC5j IHwgIDMgKystCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jICAgICAgIHwgIDUgKysr KwogNSBmaWxlcyBjaGFuZ2VkLCA1NiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2dndHQuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2dndHQuYwppbmRleCBjOGViMDM0YzgwNmEuLmMyZmM0OTQ5 NTAyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ2d0dC5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2dndHQuYwpAQCAtNjU2LDcgKzY1Niw5 IEBAIHN0YXRpYyBpbnQgaW5pdF9hbGlhc2luZ19wcGd0dChzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0 KQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3BwZ3R0OwogCisJaTkxNV9nZW1fb2JqZWN0X2xvY2so cHBndHQtPnZtLnNjcmF0Y2hbMF0sIE5VTEwpOwogCWVyciA9IGk5MTVfdm1fcGluX3B0X3N0YXNo KCZwcGd0dC0+dm0sICZzdGFzaCk7CisJaTkxNV9nZW1fb2JqZWN0X3VubG9jayhwcGd0dC0+dm0u c2NyYXRjaFswXSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfc3Rhc2g7CiAKQEAgLTc0Myw2ICs3 NDUsNyBAQCBzdGF0aWMgdm9pZCBnZ3R0X2NsZWFudXBfaHcoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0 dCkKIAogCW11dGV4X3VubG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwogCWk5MTVfYWRkcmVzc19zcGFj ZV9maW5pKCZnZ3R0LT52bSk7CisJZG1hX3Jlc3ZfZmluaSgmZ2d0dC0+dm0ucmVzdik7CiAKIAlh cmNoX3BoeXNfd2NfZGVsKGdndHQtPm10cnIpOwogCkBAIC0xMTI5LDYgKzExMzIsNyBAQCBzdGF0 aWMgaW50IGdndHRfcHJvYmVfaHcoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCwgc3RydWN0IGludGVs X2d0ICpndCkKIAlnZ3R0LT52bS5ndCA9IGd0OwogCWdndHQtPnZtLmk5MTUgPSBpOTE1OwogCWdn dHQtPnZtLmRtYSA9IGk5MTUtPmRybS5kZXY7CisJZG1hX3Jlc3ZfaW5pdCgmZ2d0dC0+dm0ucmVz dik7CiAKIAlpZiAoSU5URUxfR0VOKGk5MTUpIDw9IDUpCiAJCXJldCA9IGk5MTVfZ21jaF9wcm9i ZShnZ3R0KTsKQEAgLTExMzYsOCArMTE0MCwxMCBAQCBzdGF0aWMgaW50IGdndHRfcHJvYmVfaHco c3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCwgc3RydWN0IGludGVsX2d0ICpndCkKIAkJcmV0ID0gZ2Vu Nl9nbWNoX3Byb2JlKGdndHQpOwogCWVsc2UKIAkJcmV0ID0gZ2VuOF9nbWNoX3Byb2JlKGdndHQp OwotCWlmIChyZXQpCisJaWYgKHJldCkgeworCQlkbWFfcmVzdl9maW5pKCZnZ3R0LT52bS5yZXN2 KTsKIAkJcmV0dXJuIHJldDsKKwl9CiAKIAlpZiAoKGdndHQtPnZtLnRvdGFsIC0gMSkgPj4gMzIp IHsKIAkJZHJtX2VycigmaTkxNS0+ZHJtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndHQuYwpp bmRleCAxYjUzMmEyNzkxZWEuLjk5NGU0ZWEyODkwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfZ3R0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZ3R0LmMKQEAgLTEzLDE2ICsxMywzNiBAQAogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqYWxsb2NfcHRfZG1hKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLCBpbnQgc3opCiB7 CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwogCWlmIChJOTE1X1NFTEZURVNU X09OTFkoc2hvdWxkX2ZhaWwoJnZtLT5mYXVsdF9hdHRyLCAxKSkpCiAJCWk5MTVfZ2VtX3Nocmlu a19hbGwodm0tPmk5MTUpOwogCi0JcmV0dXJuIGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfaW50ZXJu YWwodm0tPmk5MTUsIHN6KTsKKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2ludGVybmFs KHZtLT5pOTE1LCBzeik7CisJLyogZW5zdXJlIGFsbCBkbWEgb2JqZWN0cyBoYXZlIHRoZSBzYW1l IHJlc2VydmF0aW9uIGNsYXNzICovCisJaWYgKCFJU19FUlIob2JqKSkKKwkJb2JqLT5iYXNlLnJl c3YgPSAmdm0tPnJlc3Y7CisJcmV0dXJuIG9iajsKIH0KIAogaW50IHBpbl9wdF9kbWEoc3RydWN0 IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmop CiB7CiAJaW50IGVycjsKIAorCWk5MTVfZ2VtX29iamVjdF9sb2NrKG9iaiwgTlVMTCk7CisJZXJy ID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhvYmopOworCWk5MTVfZ2VtX29iamVjdF91bmxv Y2sob2JqKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaTkxNV9nZW1fb2JqZWN0X21h a2VfdW5zaHJpbmthYmxlKG9iaik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwaW5fcHRfZG1hX2xv Y2tlZChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwgc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaikKK3sKKwlpbnQgZXJyOworCiAJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9w YWdlcyhvYmopOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC01Niw2ICs3NiwyMCBAQCB2 b2lkIF9faTkxNV92bV9jbG9zZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKIAltdXRl eF91bmxvY2soJnZtLT5tdXRleCk7CiB9CiAKKy8qIGxvY2sgdGhlIHZtIGludG8gdGhlIGN1cnJl bnQgd3csIGlmIHdlIGxvY2sgb25lLCB3ZSBsb2NrIGFsbCAqLworaW50IGk5MTVfdm1fbG9ja19v YmplY3RzKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAorCQkJIHN0cnVjdCBpOTE1X2dl bV93d19jdHggKnd3KQoreworCWlmICh2bS0+c2NyYXRjaFswXS0+YmFzZS5yZXN2ID09ICZ2bS0+ cmVzdikgeworCQlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X2xvY2sodm0tPnNjcmF0Y2hbMF0sIHd3 KTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBndHQgPSBpOTE1X3ZtX3RvX3Bw Z3R0KHZtKTsKKworCQkvKiBXZSBib3Jyb3dlZCB0aGUgc2NyYXRjaCBwYWdlIGZyb20gZ2d0dCwg dGFrZSB0aGUgdG9wIGxldmVsIG9iamVjdCAqLworCQlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X2xv Y2socHBndHQtPnBkLT5wdC5iYXNlLCB3dyk7CisJfQorfQorCiB2b2lkIGk5MTVfYWRkcmVzc19z cGFjZV9maW5pKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQogewogCWRybV9tbV90YWtl ZG93bigmdm0tPm1tKTsKQEAgLTY5LDYgKzEwMyw3IEBAIHN0YXRpYyB2b2lkIF9faTkxNV92bV9y ZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAogCXZtLT5jbGVhbnVwKHZtKTsKIAlp OTE1X2FkZHJlc3Nfc3BhY2VfZmluaSh2bSk7CisJZG1hX3Jlc3ZfZmluaSgmdm0tPnJlc3YpOwog CiAJa2ZyZWUodm0pOwogfQpAQCAtOTgsNiArMTMzLDcgQEAgdm9pZCBpOTE1X2FkZHJlc3Nfc3Bh Y2VfaW5pdChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwgaW50IHN1YmNsYXNzKQogCW11 dGV4X2luaXQoJnZtLT5tdXRleCk7CiAJbG9ja2RlcF9zZXRfc3ViY2xhc3MoJnZtLT5tdXRleCwg c3ViY2xhc3MpOwogCWZzX3JlY2xhaW1fdGFpbnRzX211dGV4KCZ2bS0+bXV0ZXgpOworCWRtYV9y ZXN2X2luaXQoJnZtLT5yZXN2KTsKIAogCUdFTV9CVUdfT04oIXZtLT50b3RhbCk7CiAJZHJtX21t X2luaXQoJnZtLT5tbSwgMCwgdm0tPnRvdGFsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX2d0dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3R0 LmgKaW5kZXggNzg0YzQzNzJiNDA1Li5lNjdlMzRlMTc5MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2d0dC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX2d0dC5oCkBAIC0yNDIsNiArMjQyLDcgQEAgc3RydWN0IGk5MTVfYWRkcmVzc19zcGFj ZSB7CiAJYXRvbWljX3Qgb3BlbjsKIAogCXN0cnVjdCBtdXRleCBtdXRleDsgLyogcHJvdGVjdHMg dm1hIGFuZCBvdXIgbGlzdHMgKi8KKwlzdHJ1Y3QgZG1hX3Jlc3YgcmVzdjsgLyogcmVzZXJ2YXRp b24gbG9jayBmb3IgYWxsIHBkIG9iamVjdHMsIGFuZCBidWZmZXIgcG9vbCAqLwogI2RlZmluZSBW TV9DTEFTU19HR1RUIDAKICNkZWZpbmUgVk1fQ0xBU1NfUFBHVFQgMQogCkBAIC0zNTEsNiArMzUy LDkgQEAgc3RydWN0IGk5MTVfcHBndHQgewogCiAjZGVmaW5lIGk5MTVfaXNfZ2d0dCh2bSkgKCh2 bSktPmlzX2dndHQpCiAKK2ludCBfX211c3RfY2hlY2sKK2k5MTVfdm1fbG9ja19vYmplY3RzKHN0 cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLCBzdHJ1Y3QgaTkxNV9nZW1fd3dfY3R4ICp3dyk7 CisKIHN0YXRpYyBpbmxpbmUgYm9vbAogaTkxNV92bV9pc180bHZsKGNvbnN0IHN0cnVjdCBpOTE1 X2FkZHJlc3Nfc3BhY2UgKnZtKQogewpAQCAtNTI3LDYgKzUzMSw3IEBAIHN0cnVjdCBpOTE1X3Bh Z2VfZGlyZWN0b3J5ICphbGxvY19wZChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSk7CiBz dHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqX19hbGxvY19wZChpbnQgbnBkZSk7CiAKIGludCBw aW5fcHRfZG1hKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLCBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqKTsKK2ludCBwaW5fcHRfZG1hX2xvY2tlZChzdHJ1Y3QgaTkxNV9hZGRy ZXNzX3NwYWNlICp2bSwgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CiAKIHZvaWQg ZnJlZV9weChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAkgICAgIHN0cnVjdCBpOTE1 X3BhZ2VfdGFibGUgKnB0LCBpbnQgbHZsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX3BwZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9wcGd0 dC5jCmluZGV4IGE5MTk1NWFmNTBhNi4uMDE0YWU4YWM0NDgwIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9wcGd0dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX3BwZ3R0LmMKQEAgLTI2Niw3ICsyNjYsNyBAQCBpbnQgaTkxNV92bV9waW5fcHRf c3Rhc2goc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAKIAlmb3IgKG4gPSAwOyBuIDwg QVJSQVlfU0laRShzdGFzaC0+cHQpOyBuKyspIHsKIAkJZm9yIChwdCA9IHN0YXNoLT5wdFtuXTsg cHQ7IHB0ID0gcHQtPnN0YXNoKSB7Ci0JCQllcnIgPSBwaW5fcHRfZG1hKHZtLCBwdC0+YmFzZSk7 CisJCQllcnIgPSBwaW5fcHRfZG1hX2xvY2tlZCh2bSwgcHQtPmJhc2UpOwogCQkJaWYgKGVycikK IAkJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0zMDgsNiArMzA4LDcgQEAgdm9pZCBwcGd0dF9pbml0 KHN0cnVjdCBpOTE1X3BwZ3R0ICpwcGd0dCwgc3RydWN0IGludGVsX2d0ICpndCkKIAlwcGd0dC0+ dm0uZG1hID0gaTkxNS0+ZHJtLmRldjsKIAlwcGd0dC0+dm0udG90YWwgPSBCSVRfVUxMKElOVEVM X0lORk8oaTkxNSktPnBwZ3R0X3NpemUpOwogCisJZG1hX3Jlc3ZfaW5pdCgmcHBndHQtPnZtLnJl c3YpOwogCWk5MTVfYWRkcmVzc19zcGFjZV9pbml0KCZwcGd0dC0+dm0sIFZNX0NMQVNTX1BQR1RU KTsKIAogCXBwZ3R0LT52bS52bWFfb3BzLmJpbmRfdm1hICAgID0gcHBndHRfYmluZF92bWE7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV92bWEuYwppbmRleCAyNjVlM2EzMDc5ZTIuLmM1YjlmMzBhYzBhMyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3ZtYS5jCkBAIC04ODQsNiArODg0LDExIEBAIGludCBpOTE1X3ZtYV9w aW5fd3coc3RydWN0IGk5MTVfdm1hICp2bWEsIHN0cnVjdCBpOTE1X2dlbV93d19jdHggKnd3LAog CQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoJnZtYS0+dm0tPmk5MTUtPnJ1bnRpbWVf cG0pOwogCiAJaWYgKGZsYWdzICYgdm1hLT52bS0+YmluZF9hc3luY19mbGFncykgeworCQkvKiBs b2NrIFZNICovCisJCWVyciA9IGk5MTVfdm1fbG9ja19vYmplY3RzKHZtYS0+dm0sIHd3KTsKKwkJ aWYgKGVycikKKwkJCWdvdG8gZXJyX3JwbTsKKwogCQl3b3JrID0gaTkxNV92bWFfd29yaygpOwog CQlpZiAoIXdvcmspIHsKIAkJCWVyciA9IC1FTk9NRU07Ci0tIAoyLjMwLjEKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=