From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=54183 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OCPGl-0006Kv-K7 for qemu-devel@nongnu.org; Wed, 12 May 2010 23:39:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OCJSc-0000ye-I0 for qemu-devel@nongnu.org; Wed, 12 May 2010 17:27:29 -0400 Received: from mail-pv0-f173.google.com ([74.125.83.173]:55567) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OCJSc-0000yF-9t for qemu-devel@nongnu.org; Wed, 12 May 2010 17:27:22 -0400 Received: by pvg7 with SMTP id 7so328573pvg.4 for ; Wed, 12 May 2010 14:27:20 -0700 (PDT) MIME-Version: 1.0 Date: Wed, 12 May 2010 23:56:28 +0300 Message-ID: From: Blue Swirl Content-Type: multipart/mixed; boundary=0022154000123ee4f004866be016 Subject: [Qemu-devel] [PATCH, RFC 0/4] monitor device info infrastructure List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel --0022154000123ee4f004866be016 Content-Type: text/plain; charset=UTF-8 Hi all, I finally refreshed some of my monitor patches. PCI and HPET patches (attached, they don't apply anymore) need more work because of the new monitor design. The patches provide a method for devices to register new monitor commands. This fixes some design problems, like useless pic_info/irq_info functions for most architectures. I think automation via qdev field was requested the last time. I added something like this, though it doesn't fit the cases where several functions need to be registered. Comments? Blue Swirl (4): monitor: add device info infrastructure qdev: automatically register device info x86/Sparc32: use device info for pic and irq PPC: use device info for CPU statistics cpu-all.h | 3 -- hw/an5206.c | 9 ------ hw/arm_pic.c | 10 ------ hw/cris_pic_cpu.c | 5 --- hw/i8259.c | 50 ++++++++++++++++++++----------- hw/microblaze_pic_cpu.c | 5 --- hw/pc.h | 2 - hw/qdev.c | 3 ++ hw/qdev.h | 3 ++ hw/shix.c | 10 ------ hw/slavio_intctl.c | 26 ++++++++++------ hw/sun4c_intctl.c | 16 +++++++++- hw/sun4m.c | 15 +--------- hw/sun4m.h | 8 ----- hw/sun4u.c | 8 ----- monitor.c | 74 ++++++++++++++++++++++++++--------------------- monitor.h | 10 ++++++ qemu-monitor.hx | 19 ++++++++---- target-ppc/cpu.h | 2 + target-ppc/helper.c | 4 ++ target-ppc/translate.c | 45 +++++++++++++++++++--------- 21 files changed, 169 insertions(+), 158 deletions(-) --0022154000123ee4f004866be016 Content-Type: text/x-diff; charset=US-ASCII; name="0001-PCI-use-device-info.patch" Content-Disposition: attachment; filename="0001-PCI-use-device-info.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g94mehv6 RnJvbSBlZTc3OTY2NDZkYjE2YmQzNmJlNmQ2ZDEyOGU4N2FjZDBlNzBmZDMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCbHVlIFN3aXJsIDxibGF1d2lyYmVsQGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCA5IFNlcCAyMDA5IDE3OjQwOjM1ICswMDAwClN1YmplY3Q6IFtQQVRDSF0gUENJOiB1 c2UgZGV2aWNlIGluZm8KClNpZ25lZC1vZmYtYnk6IEJsdWUgU3dpcmwgPGJsYXV3aXJiZWxAZ21h aWwuY29tPgotLS0KIGh3L3BjaS5jICAgICAgICB8ICAgNTEgKysrKysrKysrKysrKysrKysrKysr KysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBody9wY2kuaCAgICAgICAgfCAgICAyIC0t CiBtb25pdG9yLmMgICAgICAgfCAgICAyIC0tCiBxZW11LW1vbml0b3IuaHggfCAgICAyIC0tCiA0 IGZpbGVzIGNoYW5nZWQsIDI4IGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2h3L3BjaS5jIGIvaHcvcGNpLmMKaW5kZXggYzEyYjBiZS4uMjI1ZWZiZiAxMDA2NDQK LS0tIGEvaHcvcGNpLmMKKysrIGIvaHcvcGNpLmMKQEAgLTk4LDYgKzk4LDEzIEBAIHN0YXRpYyB2 b2lkIHBjaV9idXNfcmVzZXQodm9pZCAqb3BhcXVlKQogICAgIH0KIH0KIAorc3RhdGljIHZvaWQg cGNpX2luZm8oTW9uaXRvciAqbW9uLCB2b2lkICpvcGFxdWUpOworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IE1vbkRldkluZm8gbW9uX3BjaV9pbmZvID0geworICAgIC5kZXZfbmFtZSA9ICJwY2kiLAor ICAgIC5kZXZfaW5mb19jYiA9IHBjaV9pbmZvLAorfTsKKwogUENJQnVzICpwY2lfcmVnaXN0ZXJf YnVzKERldmljZVN0YXRlICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgcGNpX3NldF9pcnFfZm4gc2V0X2lycSwgcGNpX21hcF9pcnFfZm4gbWFwX2ly cSwKICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICppcnFfb3BhcXVlLCBpbnQgZGV2Zm5f bWluLCBpbnQgbmlycSkKQEAgLTExNiw2ICsxMjMsNyBAQCBQQ0lCdXMgKnBjaV9yZWdpc3Rlcl9i dXMoRGV2aWNlU3RhdGUgKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSwKICAgICBmaXJzdF9idXMg PSBidXM7CiAgICAgdm1zdGF0ZV9yZWdpc3RlcihuYnVzKyssICZ2bXN0YXRlX3BjaWJ1cywgYnVz KTsKICAgICBxZW11X3JlZ2lzdGVyX3Jlc2V0KHBjaV9idXNfcmVzZXQsIGJ1cyk7CisgICAgbW9u aXRvcl9yZWdpc3Rlcl9kZXZpY2VfaW5mbygmbW9uX3BjaV9pbmZvLCBidXMpOwogICAgIHJldHVy biBidXM7CiB9CiAKQEAgLTY5Myw5ICs3MDEsMjQgQEAgc3RhdGljIGNvbnN0IHBjaV9jbGFzc19k ZXNjIHBjaV9jbGFzc19kZXNjcmlwdGlvbnNbXSA9CiAgICAgeyAwLCBOVUxMfQogfTsKIAotc3Rh dGljIHZvaWQgcGNpX2luZm9fZGV2aWNlKFBDSURldmljZSAqZCkKK3N0YXRpYyB2b2lkIHBjaV9i dXNfZm9yX2VhY2hfZGV2aWNlKFBDSUJ1cyAqYnVzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAoKmZuKShQQ0lEZXZpY2UgKmQsIHZvaWQgKmZuX29wYXF1ZSksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpmbl9vcGFxdWUpCit7Cisg ICAgUENJRGV2aWNlICpkOworICAgIGludCBkZXZmbjsKKworICAgIGZvcihkZXZmbiA9IDA7IGRl dmZuIDwgMjU2OyBkZXZmbisrKSB7CisgICAgICAgIGQgPSBidXMtPmRldmljZXNbZGV2Zm5dOwor ICAgICAgICBpZiAoZCkgeworICAgICAgICAgICAgZm4oZCwgZm5fb3BhcXVlKTsKKyAgICAgICAg fQorICAgIH0KK30KKworc3RhdGljIHZvaWQgcGNpX2luZm9fZGV2aWNlKFBDSURldmljZSAqZCwg dm9pZCAqb3BhcXVlKQogewotICAgIE1vbml0b3IgKm1vbiA9IGN1cl9tb247CisgICAgTW9uaXRv ciAqbW9uID0gb3BhcXVlOwogICAgIGludCBpLCBjbGFzczsKICAgICBQQ0lJT1JlZ2lvbiAqcjsK ICAgICBjb25zdCBwY2lfY2xhc3NfZGVzYyAqZGVzYzsKQEAgLTczNywzMSArNzYwLDEzIEBAIHN0 YXRpYyB2b2lkIHBjaV9pbmZvX2RldmljZShQQ0lEZXZpY2UgKmQpCiAgICAgICAgIH0KICAgICB9 CiAgICAgbW9uaXRvcl9wcmludGYobW9uLCAiICAgICAgaWQgXCIlc1wiXG4iLCBkLT5xZGV2Lmlk ID8gZC0+cWRldi5pZCA6ICIiKTsKLSAgICBpZiAoY2xhc3MgPT0gMHgwNjA0ICYmIGQtPmNvbmZp Z1sweDE5XSAhPSAwKSB7Ci0gICAgICAgIHBjaV9mb3JfZWFjaF9kZXZpY2UoZC0+Y29uZmlnWzB4 MTldLCBwY2lfaW5mb19kZXZpY2UpOwotICAgIH0KIH0KIAotdm9pZCBwY2lfZm9yX2VhY2hfZGV2 aWNlKGludCBidXNfbnVtLCB2b2lkICgqZm4pKFBDSURldmljZSAqZCkpCitzdGF0aWMgdm9pZCBw Y2lfaW5mbyhNb25pdG9yICptb24sIHZvaWQgKm9wYXF1ZSkKIHsKLSAgICBQQ0lCdXMgKmJ1cyA9 IGZpcnN0X2J1czsKLSAgICBQQ0lEZXZpY2UgKmQ7Ci0gICAgaW50IGRldmZuOwotCi0gICAgd2hp bGUgKGJ1cyAmJiBidXMtPmJ1c19udW0gIT0gYnVzX251bSkKLSAgICAgICAgYnVzID0gYnVzLT5u ZXh0OwotICAgIGlmIChidXMpIHsKLSAgICAgICAgZm9yKGRldmZuID0gMDsgZGV2Zm4gPCAyNTY7 IGRldmZuKyspIHsKLSAgICAgICAgICAgIGQgPSBidXMtPmRldmljZXNbZGV2Zm5dOwotICAgICAg ICAgICAgaWYgKGQpCi0gICAgICAgICAgICAgICAgZm4oZCk7Ci0gICAgICAgIH0KLSAgICB9Ci19 CisgICAgUENJQnVzICpidXMgPSBvcGFxdWU7CiAKLXZvaWQgcGNpX2luZm8oTW9uaXRvciAqbW9u KQotewotICAgIHBjaV9mb3JfZWFjaF9kZXZpY2UoMCwgcGNpX2luZm9fZGV2aWNlKTsKKyAgICBw Y2lfYnVzX2Zvcl9lYWNoX2RldmljZShidXMsIHBjaV9pbmZvX2RldmljZSwgbW9uKTsKIH0KIAog UENJRGV2aWNlICpwY2lfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRldmFk ZHIpCmRpZmYgLS1naXQgYS9ody9wY2kuaCBiL2h3L3BjaS5oCmluZGV4IDUzNDBiYmIuLmI3MzJm MDAgMTAwNjQ0Ci0tLSBhL2h3L3BjaS5oCisrKyBiL2h3L3BjaS5oCkBAIC0yNTAsMTQgKzI1MCwx MiBAQCBQQ0lEZXZpY2UgKnBjaV9uaWNfaW5pdChOSUNJbmZvICpuZCwgY29uc3QgY2hhciAqZGVm YXVsdF9tb2RlbCwKIHZvaWQgcGNpX2RhdGFfd3JpdGUodm9pZCAqb3BhcXVlLCB1aW50MzJfdCBh ZGRyLCB1aW50MzJfdCB2YWwsIGludCBsZW4pOwogdWludDMyX3QgcGNpX2RhdGFfcmVhZCh2b2lk ICpvcGFxdWUsIHVpbnQzMl90IGFkZHIsIGludCBsZW4pOwogaW50IHBjaV9idXNfbnVtKFBDSUJ1 cyAqcyk7Ci12b2lkIHBjaV9mb3JfZWFjaF9kZXZpY2UoaW50IGJ1c19udW0sIHZvaWQgKCpmbiko UENJRGV2aWNlICpkKSk7CiBQQ0lCdXMgKnBjaV9maW5kX2J1cyhpbnQgYnVzX251bSk7CiBQQ0lE ZXZpY2UgKnBjaV9maW5kX2RldmljZShpbnQgYnVzX251bSwgaW50IHNsb3QsIGludCBmdW5jdGlv bik7CiAKIGludCBwY2lfcmVhZF9kZXZhZGRyKE1vbml0b3IgKm1vbiwgY29uc3QgY2hhciAqYWRk ciwgaW50ICpkb21wLCBpbnQgKmJ1c3AsCiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAq c2xvdHApOwogCi12b2lkIHBjaV9pbmZvKE1vbml0b3IgKm1vbik7CiBQQ0lCdXMgKnBjaV9icmlk Z2VfaW5pdChQQ0lCdXMgKmJ1cywgaW50IGRldmZuLCB1aW50MTZfdCB2aWQsIHVpbnQxNl90IGRp ZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHBjaV9tYXBfaXJxX2ZuIG1hcF9pcnEsIGNvbnN0 IGNoYXIgKm5hbWUpOwogCmRpZmYgLS1naXQgYS9tb25pdG9yLmMgYi9tb25pdG9yLmMKaW5kZXgg MmM3NjNlOC4uM2QxODg4NSAxMDA2NDQKLS0tIGEvbW9uaXRvci5jCisrKyBiL21vbml0b3IuYwpA QCAtMTg0NCw4ICsxODQ0LDYgQEAgc3RhdGljIGNvbnN0IG1vbl9jbWRfdCBpbmZvX2NtZHNbXSA9 IHsKICAgICAgICIiLCAic2hvdyBpbmZvcyBmb3IgZWFjaCBDUFUiIH0sCiAgICAgeyAiaGlzdG9y eSIsICIiLCBkb19pbmZvX2hpc3RvcnksCiAgICAgICAiIiwgInNob3cgdGhlIGNvbW1hbmQgbGlu ZSBoaXN0b3J5IiwgfSwKLSAgICB7ICJwY2kiLCAiIiwgcGNpX2luZm8sCi0gICAgICAiIiwgInNo b3cgUENJIGluZm8iLCB9LAogI2lmIGRlZmluZWQoVEFSR0VUX0kzODYpIHx8IGRlZmluZWQoVEFS R0VUX1NINCkKICAgICB7ICJ0bGIiLCAiIiwgdGxiX2luZm8sCiAgICAgICAiIiwgInNob3cgdmly dHVhbCB0byBwaHlzaWNhbCBtZW1vcnkgbWFwcGluZ3MiLCB9LApkaWZmIC0tZ2l0IGEvcWVtdS1t b25pdG9yLmh4IGIvcWVtdS1tb25pdG9yLmh4CmluZGV4IDBhOWM1OTEuLjU0MDc4ZTIgMTAwNjQ0 Ci0tLSBhL3FlbXUtbW9uaXRvci5oeAorKysgYi9xZW11LW1vbml0b3IuaHgKQEAgLTQ1LDggKzQ1 LDYgQEAgc2hvdyB0aGUgY3B1IHJlZ2lzdGVycwogc2hvdyBpbmZvcyBmb3IgZWFjaCBDUFUKIEBp dGVtIGluZm8gaGlzdG9yeQogc2hvdyB0aGUgY29tbWFuZCBsaW5lIGhpc3RvcnkKLUBpdGVtIGlu Zm8gcGNpCi1zaG93IGVtdWxhdGVkIFBDSSBkZXZpY2UgaW5mbwogQGl0ZW0gaW5mbyB0bGIKIHNo b3cgdmlydHVhbCB0byBwaHlzaWNhbCBtZW1vcnkgbWFwcGluZ3MgKGkzODYgb25seSkKIEBpdGVt IGluZm8gbWVtCi0tIAoxLjUuNi41Cgo= --0022154000123ee4f004866be016 Content-Type: text/x-diff; charset=US-ASCII; name="0002-x86-use-device-info-for-hpet.patch" Content-Disposition: attachment; filename="0002-x86-use-device-info-for-hpet.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g94merr9 RnJvbSAxMzk1MjgxN2Q1ZTRmMDEzMzNjM2QzNWQwNWRhOTE2NzE5ZWQyMzIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCbHVlIFN3aXJsIDxibGF1d2lyYmVsQGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCA5IFNlcCAyMDA5IDE3OjQwOjM1ICswMDAwClN1YmplY3Q6IFtQQVRDSF0geDg2OiB1 c2UgZGV2aWNlIGluZm8gZm9yIGhwZXQKClNpZ25lZC1vZmYtYnk6IEJsdWUgU3dpcmwgPGJsYXV3 aXJiZWxAZ21haWwuY29tPgotLS0KIGh3L3BjLmMgICAgICAgICB8ICAgMTIgKysrKysrKysrKysr CiBtb25pdG9yLmMgICAgICAgfCAgIDEwIC0tLS0tLS0tLS0KIHFlbXUtbW9uaXRvci5oeCB8ICAg IDIgLS0KIDMgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvaHcvcGMuYyBiL2h3L3BjLmMKaW5kZXggNjI5MjAwMS4uMzlhMDk3MCAx MDA2NDQKLS0tIGEvaHcvcGMuYworKysgYi9ody9wYy5jCkBAIC0xMTA4LDYgKzExMDgsMTcgQEAg c3RhdGljIENQVVN0YXRlICpwY19uZXdfY3B1KGNvbnN0IGNoYXIgKmNwdV9tb2RlbCkKICAgICBy ZXR1cm4gZW52OwogfQogCitzdGF0aWMgdm9pZCBpbmZvX2hwZXQoTW9uaXRvciAqbW9uLCB2b2lk ICpvcGFxdWUpCit7CisgICAgbW9uaXRvcl9wcmludGYobW9uLCAiSFBFVCBpcyAlcyBieSBRRU1V XG4iLAorICAgICAgICAgICAgICAgICAgIChub19ocGV0KSA/ICJkaXNhYmxlZCIgOiAiZW5hYmxl ZCIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IE1vbkRldkluZm8gaHBldF9pbmZvID0gewor ICAgIC5kZXZfbmFtZSA9ICJocGV0IiwKKyAgICAuZGV2X2luZm9fY2IgPSBpbmZvX2hwZXQsCit9 OworCiAvKiBQQyBoYXJkd2FyZSBpbml0aWFsaXNhdGlvbiAqLwogc3RhdGljIHZvaWQgcGNfaW5p dDEocmFtX2FkZHJfdCByYW1fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KmJvb3RfZGV2aWNlLApAQCAtMTMyNyw2ICsxMzM4LDcgQEAgc3RhdGljIHZvaWQgcGNfaW5pdDEo cmFtX2FkZHJfdCByYW1fc2l6ZSwKICAgICBpZiAoIW5vX2hwZXQpIHsKICAgICAgICAgaHBldF9p bml0KGlzYV9pcnEpOwogICAgIH0KKyAgICBtb25pdG9yX3JlZ2lzdGVyX2RldmljZV9pbmZvKCZo cGV0X2luZm8sIE5VTEwpOwogCiAgICAgZm9yKGkgPSAwOyBpIDwgTUFYX1NFUklBTF9QT1JUUzsg aSsrKSB7CiAgICAgICAgIGlmIChzZXJpYWxfaGRzW2ldKSB7CmRpZmYgLS1naXQgYS9tb25pdG9y LmMgYi9tb25pdG9yLmMKaW5kZXggM2QxODg4NS4uMjAyYzQ1NyAxMDA2NDQKLS0tIGEvbW9uaXRv ci5jCisrKyBiL21vbml0b3IuYwpAQCAtMzE1LDE0ICszMTUsNiBAQCBzdGF0aWMgdm9pZCBkb19p bmZvX25hbWUoTW9uaXRvciAqbW9uKQogICAgICAgICBtb25pdG9yX3ByaW50Zihtb24sICIlc1xu IiwgcWVtdV9uYW1lKTsKIH0KIAotI2lmIGRlZmluZWQoVEFSR0VUX0kzODYpCi1zdGF0aWMgdm9p ZCBkb19pbmZvX2hwZXQoTW9uaXRvciAqbW9uKQotewotICAgIG1vbml0b3JfcHJpbnRmKG1vbiwg IkhQRVQgaXMgJXMgYnkgUUVNVVxuIiwKLSAgICAgICAgICAgICAgICAgICAobm9faHBldCkgPyAi ZGlzYWJsZWQiIDogImVuYWJsZWQiKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgdm9pZCBkb19pbmZv X3V1aWQoTW9uaXRvciAqbW9uKQogewogICAgIG1vbml0b3JfcHJpbnRmKG1vbiwgVVVJRF9GTVQg IlxuIiwgcWVtdV91dWlkWzBdLCBxZW11X3V1aWRbMV0sCkBAIC0xODUxLDggKzE4NDMsNiBAQCBz dGF0aWMgY29uc3QgbW9uX2NtZF90IGluZm9fY21kc1tdID0gewogI2lmIGRlZmluZWQoVEFSR0VU X0kzODYpCiAgICAgeyAibWVtIiwgIiIsIG1lbV9pbmZvLAogICAgICAgIiIsICJzaG93IHRoZSBh Y3RpdmUgdmlydHVhbCBtZW1vcnkgbWFwcGluZ3MiLCB9LAotICAgIHsgImhwZXQiLCAiIiwgZG9f aW5mb19ocGV0LAotICAgICAgIiIsICJzaG93IHN0YXRlIG9mIEhQRVQiLCB9LAogI2VuZGlmCiAg ICAgeyAiaml0IiwgIiIsIGRvX2luZm9faml0LAogICAgICAgIiIsICJzaG93IGR5bmFtaWMgY29t cGlsZXIgaW5mbyIsIH0sCmRpZmYgLS1naXQgYS9xZW11LW1vbml0b3IuaHggYi9xZW11LW1vbml0 b3IuaHgKaW5kZXggNTQwNzhlMi4uMjZmOWNmNyAxMDA2NDQKLS0tIGEvcWVtdS1tb25pdG9yLmh4 CisrKyBiL3FlbXUtbW9uaXRvci5oeApAQCAtNDksOCArNDksNiBAQCBzaG93IHRoZSBjb21tYW5k IGxpbmUgaGlzdG9yeQogc2hvdyB2aXJ0dWFsIHRvIHBoeXNpY2FsIG1lbW9yeSBtYXBwaW5ncyAo aTM4NiBvbmx5KQogQGl0ZW0gaW5mbyBtZW0KIHNob3cgdGhlIGFjdGl2ZSB2aXJ0dWFsIG1lbW9y eSBtYXBwaW5ncyAoaTM4NiBvbmx5KQotQGl0ZW0gaW5mbyBocGV0Ci1zaG93IHN0YXRlIG9mIEhQ RVQgKGkzODYgb25seSkKIEBpdGVtIGluZm8ga3ZtCiBzaG93IEtWTSBpbmZvcm1hdGlvbgogQGl0 ZW0gaW5mbyB1c2IKLS0gCjEuNS42LjUKCg== --0022154000123ee4f004866be016--