From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id 8C1B33858C60 for ; Fri, 26 May 2023 14:35:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8C1B33858C60 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="6.00,194,1681200000"; d="scan'208";a="7416135" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa2.mentor.iphmx.com with ESMTP; 26 May 2023 06:35:01 -0800 IronPort-SDR: 5N2JidQVRMmtHACecJmoL3EBNmhTWxZyT8bfUsldSqNuRMcIU/vXPH+6GHCub+pKl3zERsVga/ 9rm/a3RxBycJglFmRpfN2Q2MQCgTRfyOmhRRon3IzO9twGdMNqNgl0xGxkF9OLLqnV4Oh0xSQu xPLIjCEeW7GJKxc1FtIMs8v29GWGRj5HIK2t+LdfOmXfy2YIPe3SM4ub9ChVhzF/oETG2R7g7a Rz5AzEX8QS4lZhwm6IlSifZHJrqwdrxE4WRuHhjDIjq9Ugnx7hirKOmxB8GvUT8M+kZ0f9zPUt qGg= Content-Type: multipart/mixed; boundary="------------pTfQY6gtTBddLgfGbWdMri80" Message-ID: <77479c6f-5ce4-12fa-f429-c49ffbff3542@codesourcery.com> Date: Fri, 26 May 2023 15:34:56 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0 Thunderbird/102.11.0 Content-Language: en-GB From: Andrew Stubbs Subject: [PATCH] Add COMPLEX_VECTOR_INT modes To: "gcc-patches@gcc.gnu.org" X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) To svr-ies-mbx-11.mgc.mentorg.com (139.181.222.11) X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --------------pTfQY6gtTBddLgfGbWdMri80 Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit Hi all, I want to implement a vector DIVMOD libfunc for amdgcn, but I can't just do it because the GCC middle-end models DIVMOD's return value as "complex int" type, and there are no vector equivalents of that type. Therefore, this patch adds minimal support for "complex vector int" modes. I have not attempted to provide any means to use these modes from C, so they're really only useful for DIVMOD. The actual libfunc implementation will pack the data into wider vector modes manually. A knock-on effect of this is that I needed to increase the range of "mode_unit_size" (several of the vector modes supported by amdgcn exceed the previous 255-byte limit). Since this change would add a large number of new, unused modes to many architectures, I have elected to *not* enable them, by default, in machmode.def (where the other complex modes are created). The new modes are therefore inactive on all architectures but amdgcn, for now. OK for mainline? (I've not done a full test yet, but I will.) Thanks Andrew --------------pTfQY6gtTBddLgfGbWdMri80 Content-Type: text/plain; charset="UTF-8"; name="230526-complex-vector-int.patch" Content-Disposition: attachment; filename="230526-complex-vector-int.patch" Content-Transfer-Encoding: base64 QWRkIENPTVBMRVhfVkVDVE9SX0lOVCBtb2RlcyBmb3IgYW1kZ2NuCgpUaGlzIGVuYWJsZXMg b25seSBtaW5pbWFsIHN1cHBvcnQgZm9yIGNvbXBsZXggdHlwZXMgY29udGFpbmluZyBpbnRl Z2VyCnZlY3RvcnMgd2l0aCB0aGUgaW50ZW50aW9uIG9mIGFsbG93aW5nIHZlY3Rvcml6ZWQg ZGl2bW9kIGxpYmZ1bmMgb3BlcmF0aW9ucwoodGhlc2UgcmV0dXJuIGEgcGFpciBvZiBpbnRl Z2VycyBtb2RlbGxlZCBhcyBhIGNvbXBsZXggbnVtYmVyKS4KClRoZXJlJ3Mgbm8gd2F5IHRv IGRlY2xhcmUgdmFyaWFibGVzIG9mIHRoaXMgbW9kZSBpbiB0aGUgZnJvbnQtZW5kLCBhbmQg bm8KYXR0ZW1wdCB0byBzdXBwb3J0IGl0IGV2ZXJ5d2hlcmUgdGhhdCBjb21wbGV4IG1vZGVz IGNhbiBleGlzdDsgdGhlIG9ubHkKdXNlLWNhc2UsIGF0IHByZXNlbnQsIGlzIHRoZSBpbXBs aWNpdCB1c2UgYnkgZGl2bW9kIGNhbGxzIGdlbmVyYXRlZCBieQp0aGUgbWlkZGxlLWVuZC4K CkluIG9yZGVyIHRvIHByZXZlbnQgdW5leHBlY3RlZCBwcm9ibGVtcyB3aXRoIG90aGVyIGFy Y2hpdGVjdHVyZXMgdGhlc2UKbW9kZXMgYXJlIG9ubHkgZW5hYmxlZCBmb3IgYW1kZ2NuLgoK Z2NjL0NoYW5nZUxvZzoKCgkqIGNvbmZpZy9nY24vZ2NuLW1vZGVzLmRlZjogSW5pdGlhbGl6 ZSBDT01QTEVYX1ZFQ1RPUl9JTlQgbW9kZXMuCgkqIGdlbm1vZGVzLmNjIChjb21wbGV4X2Ns YXNzKTogU3VwcG9ydCBNT0RFX0NPTVBMRVhfVkVDVE9SX0lOVC4KCShjb21wbGV0ZV9tb2Rl KTogTGlrZXdpc2UuCgkoZW1pdF9tb2RlX3VuaXRfc2l6ZSk6IFVwZ3JhZGUgbW9kZV91bml0 X3NpemUgdHlwZSB0byBzaG9ydC4KCShlbWl0X21vZGVfYWRqdXN0bWVudHMpOiBTdXBwb3J0 IE1PREVfQ09NUExFWF9WRUNUT1JfSU5ULgoJKiBtYWNobW9kZS5kZWY6IE1lbnRpb24gTU9E RV9DT01QTEVYX1ZFQ1RPUl9JTlQuCgkqIG1hY2htb2RlLmggKG1vZGVfdG9fdW5pdF9zaXpl KTogVXBncmFkZSB0eXBlIHRvIHNob3J0LgoJKiBtb2RlLWNsYXNzZXMuZGVmOiBBZGQgTU9E RV9DT01QTEVYX1ZFQ1RPUl9JTlQuCgkqIHN0b3ItbGF5b3V0LmNjIChpbnRfbW9kZV9mb3Jf bW9kZSk6IFN1cHBvcnQgTU9ERV9DT01QTEVYX1ZFQ1RPUl9JTlQuCgkqIHRyZWUuY2MgKGJ1 aWxkX2NvbXBsZXhfdHlwZSk6IEFsbG93IFZFQ1RPUl9JTlRFR0VSX1RZUEVfUC4KCmRpZmYg LS1naXQgYS9nY2MvY29uZmlnL2djbi9nY24tbW9kZXMuZGVmIGIvZ2NjL2NvbmZpZy9nY24v Z2NuLW1vZGVzLmRlZgppbmRleCAxMzU3YmVjODI1ZC4uNDg2MTY4ZmJlYjMgMTAwNjQ0Ci0t LSBhL2djYy9jb25maWcvZ2NuL2djbi1tb2Rlcy5kZWYKKysrIGIvZ2NjL2NvbmZpZy9nY24v Z2NuLW1vZGVzLmRlZgpAQCAtMTIxLDMgKzEyMSw2IEBAIEFESlVTVF9BTElHTk1FTlQgKFYy VEksIDE2KTsKIEFESlVTVF9BTElHTk1FTlQgKFYySEYsIDIpOwogQURKVVNUX0FMSUdOTUVO VCAoVjJTRiwgNCk7CiBBREpVU1RfQUxJR05NRU5UIChWMkRGLCA4KTsKKworLyogVGhlc2Ug YXJlIHVzZWQgZm9yIHZlY3Rvcml6ZWQgZGl2bW9kLiAgKi8KK0NPTVBMRVhfTU9ERVMgKFZF Q1RPUl9JTlQpOwpkaWZmIC0tZ2l0IGEvZ2NjL2dlbm1vZGVzLmNjIGIvZ2NjL2dlbm1vZGVz LmNjCmluZGV4IDcxNTc4N2I4ZjQ4Li5kNDcyZWU1YTlhMyAxMDA2NDQKLS0tIGEvZ2NjL2dl bm1vZGVzLmNjCisrKyBiL2djYy9nZW5tb2Rlcy5jYwpAQCAtMTI1LDYgKzEyNSw3IEBAIGNv bXBsZXhfY2xhc3MgKGVudW0gbW9kZV9jbGFzcyBjKQogICAgIGNhc2UgTU9ERV9JTlQ6IHJl dHVybiBNT0RFX0NPTVBMRVhfSU5UOwogICAgIGNhc2UgTU9ERV9QQVJUSUFMX0lOVDogcmV0 dXJuIE1PREVfQ09NUExFWF9JTlQ7CiAgICAgY2FzZSBNT0RFX0ZMT0FUOiByZXR1cm4gTU9E RV9DT01QTEVYX0ZMT0FUOworICAgIGNhc2UgTU9ERV9WRUNUT1JfSU5UOiByZXR1cm4gTU9E RV9DT01QTEVYX1ZFQ1RPUl9JTlQ7CiAgICAgZGVmYXVsdDoKICAgICAgIGVycm9yICgibm8g Y29tcGxleCBjbGFzcyBmb3IgY2xhc3MgJXMiLCBtb2RlX2NsYXNzX25hbWVzW2NdKTsKICAg ICAgIHJldHVybiBNT0RFX1JBTkRPTTsKQEAgLTM4Miw2ICszODMsNyBAQCBjb21wbGV0ZV9t b2RlIChzdHJ1Y3QgbW9kZV9kYXRhICptKQogCiAgICAgY2FzZSBNT0RFX0NPTVBMRVhfSU5U OgogICAgIGNhc2UgTU9ERV9DT01QTEVYX0ZMT0FUOgorICAgIGNhc2UgTU9ERV9DT01QTEVY X1ZFQ1RPUl9JTlQ6CiAgICAgICAvKiBDb21wbGV4IG1vZGVzIHNob3VsZCBoYXZlIGEgY29t cG9uZW50IGluZGljYXRlZCwgYnV0IG5vIG1vcmUuICAqLwogICAgICAgdmFsaWRhdGVfbW9k ZSAobSwgVU5TRVQsIFVOU0VULCBTRVQsIFVOU0VULCBVTlNFVCk7CiAgICAgICBtLT5uY29t cG9uZW50cyA9IDI7CkBAIC0xMTczLDEwICsxMTc1LDEwIEBAIGlubGluZSBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpXG5cCiAjZWxzZVxuXAogZXh0ZXJuIF9faW5saW5l X18gX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fKSlc blwKICNlbmRpZlxuXAotdW5zaWduZWQgY2hhclxuXAordW5zaWduZWQgc2hvcnRcblwKIG1v ZGVfdW5pdF9zaXplX2lubGluZSAobWFjaGluZV9tb2RlIG1vZGUpXG5cCiB7XG5cCi0gIGV4 dGVybiBDT05TVF9NT0RFX1VOSVRfU0laRSB1bnNpZ25lZCBjaGFyIG1vZGVfdW5pdF9zaXpl W05VTV9NQUNISU5FX01PREVTXTtcCisgIGV4dGVybiBDT05TVF9NT0RFX1VOSVRfU0laRSB1 bnNpZ25lZCBzaG9ydCBtb2RlX3VuaXRfc2l6ZVtOVU1fTUFDSElORV9NT0RFU107XAogXG5c CiAgIGdjY19hc3NlcnQgKG1vZGUgPj0gMCAmJiBtb2RlIDwgTlVNX01BQ0hJTkVfTU9ERVMp O1xuXAogICBzd2l0Y2ggKG1vZGUpXG5cCkBAIC0xNjgzLDcgKzE2ODUsNyBAQCBlbWl0X21v ZGVfdW5pdF9zaXplICh2b2lkKQogICBpbnQgYzsKICAgc3RydWN0IG1vZGVfZGF0YSAqbTsK IAotICBwcmludF9tYXliZV9jb25zdF9kZWNsICgiJXN1bnNpZ25lZCBjaGFyIiwgIm1vZGVf dW5pdF9zaXplIiwKKyAgcHJpbnRfbWF5YmVfY29uc3RfZGVjbCAoIiVzdW5zaWduZWQgc2hv cnQiLCAibW9kZV91bml0X3NpemUiLAogCQkJICAiTlVNX01BQ0hJTkVfTU9ERVMiLCBhZGpf Ynl0ZXNpemUpOwogCiAgIGZvcl9hbGxfbW9kZXMgKGMsIG0pCkBAIC0xODczLDYgKzE4NzUs NyBAQCBlbWl0X21vZGVfYWRqdXN0bWVudHMgKHZvaWQpCiAJICAgIHsKIAkgICAgY2FzZSBN T0RFX0NPTVBMRVhfSU5UOgogCSAgICBjYXNlIE1PREVfQ09NUExFWF9GTE9BVDoKKyAgICAg ICAgICAgIGNhc2UgTU9ERV9DT01QTEVYX1ZFQ1RPUl9JTlQ6CiAJICAgICAgcHJpbnRmICgi ICBtb2RlX3NpemVbRV8lc21vZGVdID0gMipzO1xuIiwgbS0+bmFtZSk7CiAJICAgICAgcHJp bnRmICgiICBtb2RlX3VuaXRfc2l6ZVtFXyVzbW9kZV0gPSBzO1xuIiwgbS0+bmFtZSk7CiAJ ICAgICAgcHJpbnRmICgiICBtb2RlX2Jhc2VfYWxpZ25bRV8lc21vZGVdID0gcyAmICh+cyAr IDEpO1xuIiwKQEAgLTE5MjAsNiArMTkyMyw3IEBAIGVtaXRfbW9kZV9hZGp1c3RtZW50cyAo dm9pZCkKIAkgICAgewogCSAgICBjYXNlIE1PREVfQ09NUExFWF9JTlQ6CiAJICAgIGNhc2Ug TU9ERV9DT01QTEVYX0ZMT0FUOgorCSAgICBjYXNlIE1PREVfQ09NUExFWF9WRUNUT1JfSU5U OgogCSAgICAgIHByaW50ZiAoIiAgbW9kZV9iYXNlX2FsaWduW0VfJXNtb2RlXSA9IHM7XG4i LCBtLT5uYW1lKTsKIAkgICAgICBicmVhazsKIApkaWZmIC0tZ2l0IGEvZ2NjL21hY2htb2Rl LmRlZiBiL2djYy9tYWNobW9kZS5kZWYKaW5kZXggNjJlMmJhMTBkNDUuLjViYjVhZTE0ZmMz IDEwMDY0NAotLS0gYS9nY2MvbWFjaG1vZGUuZGVmCisrKyBiL2djYy9tYWNobW9kZS5kZWYK QEAgLTI2Nyw2ICsyNjcsNyBAQCBVQUNDVU1fTU9ERSAoVVRBLCAxNiwgNjQsIDY0KTsgLyog NjQuNjQgKi8KIENPTVBMRVhfTU9ERVMgKElOVCk7CiBDT01QTEVYX01PREVTIChQQVJUSUFM X0lOVCk7CiBDT01QTEVYX01PREVTIChGTE9BVCk7CisvKiBDT01QTEVYX01PREVTIChWRUNU T1JfSU5UKTsgIExldCdzIGVuYWJsZSB0aGVzZSBwZXIgYXJjaGl0ZWN0dXJlLiAgKi8KIAog LyogRGVjaW1hbCBmbG9hdGluZyBwb2ludCBtb2Rlcy4gICovCiBERUNJTUFMX0ZMT0FUX01P REUgKFNELCA0LCBkZWNpbWFsX3NpbmdsZV9mb3JtYXQpOwpkaWZmIC0tZ2l0IGEvZ2NjL21h Y2htb2RlLmggYi9nY2MvbWFjaG1vZGUuaAppbmRleCBmMTg2NWMxZWY0Mi4uNWY0ZTEzZjA2 NDMgMTAwNjQ0Ci0tLSBhL2djYy9tYWNobW9kZS5oCisrKyBiL2djYy9tYWNobW9kZS5oCkBA IC0yNiw3ICsyNiw3IEBAIGV4dGVybiBDT05TVF9NT0RFX1NJWkUgcG9seV91aW50MTZfcG9k IG1vZGVfc2l6ZVtOVU1fTUFDSElORV9NT0RFU107CiBleHRlcm4gQ09OU1RfTU9ERV9QUkVD SVNJT04gcG9seV91aW50MTZfcG9kIG1vZGVfcHJlY2lzaW9uW05VTV9NQUNISU5FX01PREVT XTsKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIG1vZGVfaW5uZXJbTlVNX01BQ0hJTkVf TU9ERVNdOwogZXh0ZXJuIENPTlNUX01PREVfTlVOSVRTIHBvbHlfdWludDE2X3BvZCBtb2Rl X251bml0c1tOVU1fTUFDSElORV9NT0RFU107Ci1leHRlcm4gQ09OU1RfTU9ERV9VTklUX1NJ WkUgdW5zaWduZWQgY2hhciBtb2RlX3VuaXRfc2l6ZVtOVU1fTUFDSElORV9NT0RFU107Citl eHRlcm4gQ09OU1RfTU9ERV9VTklUX1NJWkUgdW5zaWduZWQgc2hvcnQgbW9kZV91bml0X3Np emVbTlVNX01BQ0hJTkVfTU9ERVNdOwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1v ZGVfdW5pdF9wcmVjaXNpb25bTlVNX01BQ0hJTkVfTU9ERVNdOwogZXh0ZXJuIGNvbnN0IHVu c2lnbmVkIGNoYXIgbW9kZV9uZXh0W05VTV9NQUNISU5FX01PREVTXTsKIGV4dGVybiBjb25z dCB1bnNpZ25lZCBjaGFyIG1vZGVfd2lkZXJbTlVNX01BQ0hJTkVfTU9ERVNdOwpAQCAtNTg2 LDcgKzU4Niw3IEBAIG1vZGVfdG9faW5uZXIgKG1hY2hpbmVfbW9kZSBtb2RlKQogCiAvKiBS ZXR1cm4gdGhlIGJhc2UgR0VUX01PREVfVU5JVF9TSVpFIHZhbHVlIGZvciBNT0RFLiAgKi8K IAotQUxXQVlTX0lOTElORSB1bnNpZ25lZCBjaGFyCitBTFdBWVNfSU5MSU5FIHVuc2lnbmVk IHNob3J0CiBtb2RlX3RvX3VuaXRfc2l6ZSAobWFjaGluZV9tb2RlIG1vZGUpCiB7CiAjaWYg R0NDX1ZFUlNJT04gPj0gNDAwMQpkaWZmIC0tZ2l0IGEvZ2NjL21vZGUtY2xhc3Nlcy5kZWYg Yi9nY2MvbW9kZS1jbGFzc2VzLmRlZgppbmRleCBkZTQyZDdlZTZmYi4uZGM2MDk3MDgxYjMg MTAwNjQ0Ci0tLSBhL2djYy9tb2RlLWNsYXNzZXMuZGVmCisrKyBiL2djYy9tb2RlLWNsYXNz ZXMuZGVmCkBAIC0zNyw0ICszNyw1IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUg Q09QWUlORzMuICBJZiBub3Qgc2VlCiAgIERFRl9NT0RFX0NMQVNTIChNT0RFX1ZFQ1RPUl9B Q0NVTSksCS8qIFNJTUQgdmVjdG9ycyAqLwkJICAgXAogICBERUZfTU9ERV9DTEFTUyAoTU9E RV9WRUNUT1JfVUFDQ1VNKSwJLyogU0lNRCB2ZWN0b3JzICovCQkgICBcCiAgIERFRl9NT0RF X0NMQVNTIChNT0RFX1ZFQ1RPUl9GTE9BVCksICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgIERFRl9NT0RFX0NMQVNTIChNT0RFX0NPTVBMRVhfVkVDVE9SX0lO VCksCQkJCSAgIFwKICAgREVGX01PREVfQ0xBU1MgKE1PREVfT1BBUVVFKSAgICAgICAgICAv KiBvcGFxdWUgbW9kZXMgKi8KZGlmZiAtLWdpdCBhL2djYy9zdG9yLWxheW91dC5jYyBiL2dj Yy9zdG9yLWxheW91dC5jYwppbmRleCAwMjNkZThjMzdkYi4uMDY5OWQ0NGU1MTYgMTAwNjQ0 Ci0tLSBhL2djYy9zdG9yLWxheW91dC5jYworKysgYi9nY2Mvc3Rvci1sYXlvdXQuY2MKQEAg LTM5MSw2ICszOTEsNyBAQCBpbnRfbW9kZV9mb3JfbW9kZSAobWFjaGluZV9tb2RlIG1vZGUp CiAgICAgY2FzZSBNT0RFX1ZFQ1RPUl9BQ0NVTToKICAgICBjYXNlIE1PREVfVkVDVE9SX1VG UkFDVDoKICAgICBjYXNlIE1PREVfVkVDVE9SX1VBQ0NVTToKKyAgICBjYXNlIE1PREVfQ09N UExFWF9WRUNUT1JfSU5UOgogICAgICAgcmV0dXJuIGludF9tb2RlX2Zvcl9zaXplIChHRVRf TU9ERV9CSVRTSVpFIChtb2RlKSwgMCk7CiAKICAgICBjYXNlIE1PREVfT1BBUVVFOgpkaWZm IC0tZ2l0IGEvZ2NjL3RyZWUuY2MgYi9nY2MvdHJlZS5jYwppbmRleCBlYWQ0MjQ4YjhlNS4u ZTFjODdiYmIwYmIgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLmNjCisrKyBiL2djYy90cmVlLmNj CkBAIC03NjY1LDcgKzc2NjUsOCBAQCBidWlsZF9jb21wbGV4X3R5cGUgKHRyZWUgY29tcG9u ZW50X3R5cGUsIGJvb2wgbmFtZWQpCiB7CiAgIGdjY19hc3NlcnQgKElOVEVHUkFMX1RZUEVf UCAoY29tcG9uZW50X3R5cGUpCiAJICAgICAgfHwgU0NBTEFSX0ZMT0FUX1RZUEVfUCAoY29t cG9uZW50X3R5cGUpCi0JICAgICAgfHwgRklYRURfUE9JTlRfVFlQRV9QIChjb21wb25lbnRf dHlwZSkpOworCSAgICAgIHx8IEZJWEVEX1BPSU5UX1RZUEVfUCAoY29tcG9uZW50X3R5cGUp CisJICAgICAgfHwgVkVDVE9SX0lOVEVHRVJfVFlQRV9QIChjb21wb25lbnRfdHlwZSkpOwog CiAgIC8qIE1ha2UgYSBub2RlIG9mIHRoZSBzb3J0IHdlIHdhbnQuICAqLwogICB0cmVlIHBy b2JlID0gbWFrZV9ub2RlIChDT01QTEVYX1RZUEUpOwo= --------------pTfQY6gtTBddLgfGbWdMri80--