Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:116367 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 74306 invoked from network); 15 Nov 2021 11:57:22 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 15 Nov 2021 11:57:22 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id C73331804DB for ; Mon, 15 Nov 2021 04:52:03 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A,SPF_HELO_NONE, SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-ASN: AS14061 46.101.128.0/17 X-Spam-Virus: No X-Envelope-From: Received: from mail.stella-maris.solutions (mail.stella-maris.solutions [46.101.232.159]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Mon, 15 Nov 2021 04:52:02 -0800 (PST) Received: from [172.16.1.187] (heigl.gw.tgnet.de [80.72.250.242]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mail.stella-maris.solutions (Postfix) with ESMTPSA id 35DBC7E002 for ; Mon, 15 Nov 2021 12:52:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=heigl.org; s=mail; t=1636980721; bh=aHPRSKv8+J9z4y19kbxL6RrEjXBt5NOHOIL7NIoIAiE=; h=To:References:From:Subject:Date:In-Reply-To:From; b=ONWbjIhFF3WlLpp5vo2dWyphEWEdIgJgf6Qnwpi9g3h9eoAUZefwQCGTcQA8qT7Qj +zVfmPP95pLYKmJuQ8QByIQXyl8i0qEjQFY7ibPalYeaty0AWRFEAfJMraZjAi6O3+ CgzOfUAu1zEjKFDrCHMPxCTJsuBpfj8qPwzDpkGh/hmeVTTHxOaViO6dIMpx5G45Aj JZwSvZchedpg6bmrLYBm+9f9Y1fXuMUpsMydLHkhGCgcF6tWtv3OPqxKVjPw/mOAiM kx/8HLL6bDEYIcEpTizDM9oPIFTrC++72s7nX0P71+6dM7yOgKlAb/djAJJXnHsbzk zIzv4flB2U5eg== To: internals@lists.php.net References: Message-ID: <371ca983-2b07-ae39-3629-49cf7ff8ee64@heigl.org> Date: Mon, 15 Nov 2021 13:51:55 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="OXkc0PK86A13EYwVYhDy6iBhW8autZT0i" Subject: Re: [PHP-DEV] Re: [RFC] Deprecate dynamic properties From: andreas@heigl.org (Andreas Heigl) --OXkc0PK86A13EYwVYhDy6iBhW8autZT0i Content-Type: multipart/mixed; boundary="C4Xq0uG20w1jPRz1KzEy3YghGXvIa3LQT"; protected-headers="v1" From: Andreas Heigl To: internals@lists.php.net Message-ID: <371ca983-2b07-ae39-3629-49cf7ff8ee64@heigl.org> Subject: Re: [PHP-DEV] Re: [RFC] Deprecate dynamic properties References: In-Reply-To: --C4Xq0uG20w1jPRz1KzEy3YghGXvIa3LQT Content-Type: multipart/mixed; boundary="------------4EA4DA2EF1CC261F57DBAC43" Content-Language: en-US This is a multi-part message in MIME format. --------------4EA4DA2EF1CC261F57DBAC43 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable Hea all. On 15.11.21 10:52, Derick Rethans wrote: > Dear Internals, >=20 > On Wed, 10 Nov 2021, Nikita Popov wrote: >=20 >> On Wed, Aug 25, 2021 at 12:02 PM Nikita Popov w= rote: >> >>> This RFC takes the more direct route of deprecating this >>> functionality entirely. I expect that this will have relatively >>> little impact on modern code (e.g. in Symfony I could fix the vast >>> majority of deprecation warnings with a three-line diff), but may >>> have a big impact on legacy code that doesn't declare properties at >>> all. >>> >> >> I plan to open voting on this RFC soon. Most of the feedback was >> positive, apart from the initial choice of opt-int mechanism, and that= >> part should be addressed by the switch to the >> #[AllowDynamicProperties] attribute. >=20 > The voting is now open, but I think one thing was not taken into accoun= t > here, the many small changes that push work to maintainers of Open > Source library and CI related tools. >=20 > In the last few years, the release cadence of PHP has increased, which > is great for new features. It however has not been helpful to introduce= > many small deprecations and BC breaks in every single release. >=20 > This invariably is making maintainers of Open Source anxious, and > frustrated as so much work is need to keep things up to date. I know > they are *deprecations*, and applications can turn these off, but that'= s > not the case for maintainers of libraries. >=20 > Before we introduce many more of this into PHP 8.2, I think it would be= > wise to figure out a way how to: >=20 > - improve the langauge with new features > - keep maintenance cost for open source library and CI tools much lower= > - come up with a set of guidelines for when it is necessary to introduc= e > BC breaks and deprecations. >=20 > I am all for improving the language and making it more feature rich, bu= t > we have not spend enough time considering the impacts to the full > ecosystem. >=20 > I have therefore voted "no" on this RFC, and I hope you will too. >=20 > cheers, > Derick After some thoughs on this RFC I have reverted my original vote and=20 voted "No" due to several reasons. For one thing it is not clear to me what the benefits are. Yes: The=20 language evolution RFC talks about "Forbidding dynamic object=20 properties" but it also specifies that "there is also a lot of old code=20 that does not declare properties, so this needs to be opt-in"[1]. And as far as I can see from the PR associated with this RFC it will not = make life easier for the internals team. It is not like there will be=20 hundreds of lines code less to maintain. On the contrary. There is more=20 code and more logic to maintain [2]. So when the only reason for the change is that one line in the RFC ("In=20 modern code, this is rarely done intentionally"[3]) then that is not=20 enough of a reasoning for me for such a code change that requires a lot=20 of existing code to change. Those that want a cleaner code can already use static code analysis to=20 find such issues (if not, I'm sure that there will be some analyzers=20 around before PHP8.2 will be around) or write appropriate tests to make=20 sure that they do not use undeclared properties. While I personally would really like to deprecate dynamic properties I=20 believe that it is the wrong thing to do for the language. At least=20 given the presented arguments why we should do it. Cheers Andreas PS: Am I the only one missing whether this is a 2/3 or a 50%+1 vote in=20 the RFC? [1]=20 https://github.com/nikic/php-rfcs/blob/language-evolution/rfcs/0000-langu= age-evolution.md#forbidding-dynamic-object-properties [2] https://github.com/php/php-src/pull/7571/files [3] https://wiki.php.net/rfc/deprecate_dynamic_properties --=20 ,,, (o o) +---------------------------------------------------------ooO-(_)-Ooo-+ | Andreas Heigl | | mailto:andreas@heigl.org N 50=C2=B022'59.5" E 08=C2=B0= 23'58" | | https://andreas.heigl.org | +---------------------------------------------------------------------+ | https://hei.gl/appointmentwithandreas | +---------------------------------------------------------------------+ --------------4EA4DA2EF1CC261F57DBAC43 Content-Type: application/pgp-keys; name="OpenPGP_0xA8D5437ECE724FE5.asc" Content-Transfer-Encoding: quoted-printable Content-Description: OpenPGP public key Content-Disposition: attachment; filename="OpenPGP_0xA8D5437ECE724FE5.asc" -----BEGIN PGP PUBLIC KEY BLOCK----- xsFNBFzEA7MBEACpvo0AbmZG6lUGMvDUebQcYVjOPrdqtnlb2WoZH9FrJyHyenzejO29VCjue= kdh u44sUNgEHXxExUekguLDGZOzC9926g2rGDWO3MU1oqRlKURnOWsp/i0d9WM07ihj/lL6smT9Y= Lea gtPCJporUiFW8JyIusBWWhlL8hp8ZDvEfmvi06xDXML3wXzH/KWmoew3LgdwCZPkQSIWemUDP= ZKc UL8eeVkhYIJA9VKQnGSx36p5T7Ch/l+iqiPlyY1GUNItX9AQjpr07V0kIjyK+yHn6Aw1uy1xW= rLn 7ATDX8YuMvaz72+c/P2zQReMWoZNfggd2FHOPRUHvHcC9C91PuzJh8e9hvtU/szDrPvvCVpg5= aRy mN/YPFJBSEqZfDelhD+8A1TJNPqSyzc21Qdd61636ynryawIW+HxFT/UN1eA7V5/fdjeRyNUJ= d7B 99Vo5A/lI25bIpg6cPLOLpVPFHEpNlGPQ8pcMRwnjG9GR74PTfH7Dy8Ksq8lpygPljJInZbz0= 870 cHlM5XSdIPTXWQFfJi0e2kfaLCEni/Vih+eL0e5F7X3RtaXY0HRFYHX8dY7ojf3sZJjdPVm3A= QXY 1yNkjnRxyJ/4gIwdFwYplU6lRBL92jdDLavPWVK4Dsil/woKmsCpxClWfU/MzmQlhbdH+x8V2= SYO a4aJWiixx59DxQARAQABzSFBbmRyZWFzIEhlaWdsIDxhbmRyZWFzQGhlaWdsLm9yZz7CwY4EE= wEK ADgWIQRZ7tBmhrXNAHaUcA2o1UN+znJP5QUCXMQDswIbAwULCQgHAwUVCgkICwUWAgMBAAIeA= QIX gAAKCRCo1UN+znJP5clsD/4vnmCp5oVIXdNXkK3PNajHR1ddpr2+Ake+bo6TS801MSd638f2U= g/e Qmu6j0XuHbgJql9wnoDh0Oq47bPxGTszPbbhD0FL1s6YBDqJKcz2okbmYRutumC52u4h8dGxb= VjC M9le1rckK54aDjkzL27iGRNfQLw1vg9gdl1yRz866bZ75MItk/7BewJrodQ5zweNcDVOmYseP= Lpo 13peB1mzDP/tuBH4CpoeDtAb/+Rc5Qv/J6P7iMDC4fPbFIl5//Ge7blMV98seXOAYMCvDYmLc= JFb nESBla/8te8lKE2E1PjwnIeMvDfYHn17CYd2UqnmlQbJbN30/Y2eiPT9w7wjrgc+qGRWEU+hu= GMl rDXQmmAtHPADf08QwOWpDVoZ+WFsQEB3f2fsZtfOnxXv8yb+Q16kVcPWaRyvusT5KLT39h2Vv= Zlh H8uporNimjs7+Rl8Fs7PP6n2L+OCnI1sSCTixBQT4MDNM6IVxqhy5j8M9ig3vR7czJgVVsDmK= CFi gOibvIFgxfRH2A7JjyplO034eUw7I3IJdffuBWjZ8SCfwZ3sS67UaPy01UVovSQKikEJBfADE= cl4 X25YsHvHXCksYLoZHb6wvtFzUrjxXwipwzlWtNBR2gTB2lCfeCLcwYcHdN8qcgg+emxDkBHeL= /Ml w5OLGW86dy6ha3BJDQgdL8LBcwQQAQoAHRYhBJZ8z6UN/+4Du4v18sqSE8db/ORyBQJcxBvDA= AoJ EMqSE8db/ORyHLUP/iADAMreqincMvKf8A0BMhAl79ZFhXkcFeEvb7KreVNp9pFBqUMtpvD6M= wY8 MpX+B9ys7qL8uY01Mf4ovex+O3tDmRRDMtho7Af2bO7Dyku7gnjtR0qdb+ceMDyVbmODVoMN+= Sh8 a9bj0uY0BlCsOkDb6hYyIf1xXAHkrX4wZbbjzpwNWoTQxsJo5ho7V/7CXMBYL6nLYpXR7vmgU= ori 2FbmiDIu+sKWbDezWcTNXItkn0WpIGTGSPWMLzEIJznOFJZlBd2q+/YHKqO/3G53tl62XLBjj= 9TC u1cnScsFJKhVRjn/mcwI9rrg4tLuSIfGqAoq29YSd832r9iC8CBuHc/T7MySekxNrdxnpecHy= Ajw AI+RhF1g+fVrmeYt1+4stwfpmLp+gEFPiHxoQkKc2q8pjNRmtoKvf2Z9cqauB+8QWyIKjgrab= dJy ev/b54o+CqxNo4KSjhwSBjb/ihVw1W2AWLkEGJUysHP6r1E12dXlYrEvBm13LIP+OOqpZRY5K= MKi WNjmQF3wtEr6SjMYXcLx+1ydVQLqFa6in57YotfNqlehiU1KDhJ/AyU+tgBJ3OxShS6p4Gmia= Dvh 8qDp0bm7GxkQEA+8kOmn+4mY5E5LzzlbIkHoDqqZs/RkWoxNpXyhIx6zqqlE4yASuWwY98tco= mx8 /CClg5DoQAl2NvWPwsFzBBABCgAdFiEEclTRxmnDsSbzEk7xbQJ8ZCRit3gFAlzEHMsACgkQb= QJ8 ZCRit3jsmA/+JJUt4Bg9cJ3itTdP+0PfSVYh0xwR+ev5b0sAj2moWowk1U0IEzHhM5eHlAJ/5= s4/ peG2Bkv2vCB+mTMFCbcuZfdsF1N13MSFqJH9ZLjZY5QGo9IqAF+JI1Tu0zArKOXWI+Fs4WXaY= lp2 f+aMccVrd6LIObbgKKQzH2n4u3nxwfVsWSZcNVCvIQVI9FPexH9C4EbPN/ocxx4/Qewx/ie+s= slL M8CVULcZmJeN+rcjWR4hr2l9zY925WpbQ/LE6cmnqDWVS+SgFQGF6j1nsUJzRA2pYk/Q12o+2= ka9 1/o9pPu3Z8gEFu7ljflT3iO4G139crRNXRE00qfBQft9VvMl02iGQlCbK1ZER8Rou5yDPjfBk= MHP DoSUa45ILQqsUB/3rKT08ApA80QkgCh+cTyhvVCrZJPKWjusRn8mX9FM+lotL9ZWID9/Q90FJ= hli XyPj8gmsoFh+37/AV+Wl2jcNbG1CIzX1cx2KJ+2AWciBlE0046ztGuaHzpqzjeyvwxUHYTDJh= 2+t DyRCt7lrRrZuMTBlHCQw1GlSSrlPw9l1CASXto0gxnFgCpulTBHJQVPUr0XbjmT52xbmRlv3y= 4CR MCp+/0ZKzXddKZTA6XyIHuumRuKW0L1rBIfqgbUB0icE7tM/+bkYZzMExhnILF05nIIQKN5Rq= 59p t+KxrjK2t13OwU0EXMQFSAEQAL++X487itN2+5NbNK0O2iUkG6OOCK8Uiep+KpWwsfwf8rz5U= FUx Tn2EBfiTRCd9NXEMeiptjp8zsRVN2MSEv77a+aiMahUyIbI+4PUX+Y2fZRIXx7kpTn4T817iw= 19m FrSQ6c/qI88JUvmMA/r9FYbUAh0vjZEPc+WUmPnZYCShnna0pDhiJe1b3pjoxPTNA2arBkGhm= m1x th/rKN80Saf77ZtxOpRx+wiwXAKG54B6Q9fVWUzT5pRzJFPl6UEt4WaWVA8kMkbjLcv8k3fJT= MK0 ZpxjTIDFIqqYxiJIKE5TbuMvN9ilx/grUhdQ+Nu5kOJlOUiFfeqTUi/hJOljtRsh3WxJhpEmV= u+w 7/PJpLPPys1Xa7Ax6DHr/nR5iNL1tDZEjrW6/Wav7AYX8OnlZF6irml7APAusOfv4XemZfUb/= qva /pQjbJpeVYmedFyGgC96yR55bRbzXI4CHMvApRFxyUekQp09h49MvTNJ0dV3Uj9+V+PMS05OY= BIs KbRv+C9QaoCiuUK83BSd0XFvR1KuO3FRY3Dtc5zrdWuGNa0tUYAd82Dnu/pR1wmdyYdbXEcQH= uW0 Vx5Dm6TDQ1ZLNEh2ZZRqWQ8Qrppb3n5lhbjyNiPO0upJlxYl3qo6mRXzuQMoZOeH50ZPyqmZu= d+Z kHfg/Sq8PRHNdlBhtIZ6/FBTABEBAAHCw6wEGAEKACAWIQRZ7tBmhrXNAHaUcA2o1UN+znJP5= QUC XMQFSAIbAgJACRCo1UN+znJP5cF0IAQZAQoAHRYhBDh6O3rdFXWZPESSt+BX/kgit7ZFBQJcx= AVI AAoJEOBX/kgit7ZFM28QALr4HOTaNkpLZMxJAECLxFQg8Yzg9GdUE4l6Xqeea+Qz6Hv2fO0AV= 8VQ ug7h7mFoAQQwG0lK5yHa/RF3tcApVEXMyL19AamMNnA5H0mXEUcTvge2JeVK9ONTBYjSR6llO= nUK Co24p3lnzmp6eZNEfaTPbSGo7UTmWcqfHtkvH4C5hOhDyY6GTVrgcMV2G2B1jq4evn0XxdqTi= po3 VyAMtwW/HlTHKXpXpW0QhzD+D6ioNUgyQjpPjkI3BWJHzSCWVUKgWD2EdOu+IsciDM115APvd= yeX vgWNF8jphl+PJf2inqS8iSrd4pf04//tqNhkmBHSIFh6LwPlUUMEjKI4sWUYcL8zZimUmaK9H= yZe bZq+IQFnjMw80h4iMc4YpY8mKgz4ld7wNV68+NFpgn+YaK6EVCpML91ret5kR4PyhO3tlMydY= zW3 SFmmYFIEOEn+l5V223/8RDsg7XilBPZXtYDDpCJSedo3+d9eeBTyLnaXhnmhs1N06IVMbga/x= g6B YT0OxJ7KFhyLW9SQ2+22oVqtfqGR9+Qx8UaiLnAx2a0ZjCHOspg/RTsXz7jqC8Ez9AVEPLOrw= /It IFI8Mx1AoJxfdoK9JIIsSNHeKrvCNmRK1n7NnNLa1JDRXYNgxsCD81YJzpQjtUC4KBKbFevs/= MHD Ksg/o2mlfeNy3AAEYckW7aMP/AjhDWZuUB+WoPnVO3qoaRdtt4aMRI+8Vjwsci3HHcueQa7Xs= S/J fzg85MUXqN7PozrfEBgwk5Z+kdFW+4dhiaEXntEqWUgwkExJ5ysmP597WIQG2hUpX0jwkrzdZ= q6r Z/87mHCAMgFk1Lg/6oPOQqXvBdLFlMo6RIPawC8EeROcIuszvzKR4GIEIyXyR5rflLUUFfvLr= NPk MeuxA5CKoN1IidlngMO/sH58aac2Z67k7nrNQk62QeMFQndcKb45Pt3bgPjDSB98hlAklKzuH= kxx lwreilFcBqx/8f1qeg3tTkF29RkSaP38K9RnLhrfRrt4Tz8fKTF/C6A1HqL2dMQmto14S8U2o= zq9 3xiu0oUpLFdOoqfqPxgiqbqWUFIAY4JS4J2o9HXwjFii6X7/VJ9Yj0DNCrZytvSRR24j6p2r2= HFg fEPDs6NFPGoF9vNksJhc1FViEkjt1z5vTdmu3+DRSD3QTpRUujVnUL8jr0ggoZ3CI6qjVqb8K= 2+d dubT9SxWKNbBOcNOwGtqQtw2z8FZ/2tQOvu9A44A5gCYJ5fHj9uvcvEKJe6X7hX7WBpAItZUe= Y8x D91uNSY2/uceh0pE6APHxNMRaLCKMRpyvRCHqRbA2iiLT0qF4pmwYUtYIig1TkNczbtzj38mv= H+G OQ6onUMxyW18qrqJn8LzvlhkzsFNBFzEBbgBEACo/XIhTsNMVM1XLI2qzKWWLIIIYN/uTcoum= h0A eh98saWYjg68H/fv2CZhF0CZ7JXcW3EqCjWzLnHiGXTMumYwCm5vgxic1uHTS6tv97hNPNA80= vKK Fgs/ofYM4MtzQWdLw/c7lzF6qomhbr9woKbYgwRnp8qh2C84aH6+OQv6I1t2fWE7qhoLMrSh2= EiK xeogXkyNqKzlRibBUOsjurTXg+UJt7NEnrp/qgm1m9zhAkMoadFs5bROEb24qZ7eDij1HmrM6= mUb 4OkL2PnDzkUBJ2At5otp+uUCJrATS2tAz0OGNu3ijJP94+Y1d3Nt6jC5pAI40ZcxSXMMrLFAT= XJi NYLaD/Y6tpLgXaLQF1krgtvcGVkxJ8/fJVrKVcmF8Cfnab+rbNDIxLAwWT+dor2BwDgRoRI45= cyG XB7YHstdk9kBUZqff1BrMZLGEmp+M6xE2wFPWan4kD2oIh5B14CKUMYB+CBmMlJhkIzBl2GvO= 3Hv VyywCk2EourRxjDocZxyajE/fwFuAK5emuFKrucMmsnxzZMMJdkoJmnozsBS9Oj9e8YiR+yAM= Dex x4152G6SOCR9JSxnFUBPEKOgabIPLY3eQfn0nBdh/mr/iKSg+5zj3bsbvUetvRFdTbUTFnqss= L7b 3Q5ydaL3Q6PjCO/Fe0bmLKXnY2AzY8emb3xc/wARAQABwsF2BBgBCgAgFiEEWe7QZoa1zQB2l= HAN qNVDfs5yT+UFAlzEBbgCGwwACgkQqNVDfs5yT+XL9w//VJKq2qxGxS1IGSaaowcneiRx88ZfB= Tzk takhbqXhnWFwP9vuTaHcSzRowFIVzea55k/5mQeKuTTEt7k0Yb29lwoT+iqi12V/73EBIaUK+= JT5 ZP28bnQXkkqqpRzcro4lDzi5geamt7KMsWDmYqCHyXU2xXeALnqfLv1jfsJJMeoDzLl8ql50q= m1z +u94VOXf94dlqmV9v6QWoxww2k2xNWBAeUD2YzUXAZncpXbCK1MIRFBHmbg4HAapmpFUewPfs= O4P pUEJqG1IA6rl9csZnc97BvCCha6SZMvXGrEIi/ajNfD0mU2p3Iy5F1UXNx9yJlMziQvqUziA7= MSW olT2ZYr/unSrckXUh7lAwE4tq8RhhXZ2cjL+5ubk/xGFBJycn+YKoT5gmZ+gwGrluN0VJFogf= pY2 RJbF8j8VbUR+vGKxlusgyeC7uEFAoVsIUJFQ3QaPtGmnIZgP3KSz7HsZkAwiXHJ5P6wpH3CWM= u4J aOQlOMo0NPxRZOvtfAkdDb+i4jd+YjvuJkJlur1p6yhu/02cE7/BoDONgATHZqFmYzubWtCU9= Lrf q1RnVBVnH/hLM2IxMGyBYsNDRW3FwSZh7nj6vxjijS9KsxwNiAFzNl78BKlIkHgAjWVDejezm= ncB 5ixg8G0GzKxIBt3S5nrkQNz3HBJEuIwmP7HyMbLbG27OwU0EXMQF6wEQAMUl2EK3LUUh6uunJ= 55v s0z8D0XZFpgm6cwVJgaWw+1H/bXJQR56oosOf+WUM0x1jhBVTLhI+oOK+uz1VkeZRMvTRxYob= fNq n7V5Gn8D8tO8z55yuHgHxn8T8+ZV8RzEbITDNmnK3VNC+mGvWCOe03gU6rhaE9qb3fhFreQA1= e85 XR3WqwxR/m/Vxdc0ANxgrij+VEOZDzlknAt9s93sPQDCqCGfNtRaKgVi/xvZUWvrYSBb1v5d3= wit KlADmuqWCWtc9+PuBmjUIObGP7Zll1dQ6enrtQ943ZsUujXYsdrfuaf5m47u/1G1IzwznIJwl= ZUU M2RAHQkCu+yjnXjtW0/ZEYV0RV+xZ5Qf2CtSq2rS5jpPKbtqhkzclX6ziV2ycRypR/vtbo81U= dP1 cbwSlSlxwp65Y7D+uV1F/7vI+OjUqJpD8mHgdh9OOZCWI2zHTSaH2FqS4LaT6kJIcd0sLoRPV= C3E U2vQQIM5aMyYpFlacZgmAryldp8cHwvbtpR4R2GWlXAW3w/pz2B7BD+xiUHvu2cXgeRYWgvtA= 7kw monmnhJ0NiN6cB4GPjr0ivysDNvdnnvCQ2FNMrqUGMhAK1fFh3nJF5CgMGZSyricZvE8tl7nl= XN4 TUlhhNqhSKyqHL7b0WjPhAUBNZvf1hutnl72rDAMBhTjYbEkLAl2/I5RABEBAAHCwXYEGAEKA= CAW IQRZ7tBmhrXNAHaUcA2o1UN+znJP5QUCXMQF6wIbIAAKCRCo1UN+znJP5d4OD/9YMP8rUtR43= z0v Y1UnqMyZH9I8mOIL12AqRhsroaFb8rs3QU+u5cZGf2QvP2uOF6wFzjQGelZLjgVmctBYzutzs= jzX Id0D+B3O2KJhquRXEZ5HQlvZ6/YY0KDzNcYk2Tghg/NqvGltJtJuHrysPIL/0csA91mVUFs25= iap RwLrZfizTEzyh8KCrsV8j+c7r/UTRNkwDbTuq+s7kAyLVEWMTlBRkXg9IsxyX1F+k6xjSKRGf= XnI cct2BEYDcwNxzcPDOHpwzNCH3DCGDmuOLQGspp40liJ1cY1B7a1t3kpNRUv2YDth+jHs58BmF= Nfx WrBwv8OYulI+ehtErPTmOt6eNBhMp5EvoQuT6YwnL+2UwnA1SdNseG1y6tmgeEl/1PeGuYnze= vgk olNUS+4jzyWMG5deRldsjlHxMJBdT5VQXlXP8xb8oHQAkeR3KtlNyrtCi4R62btnIoSF7W9NY= heG aXXa2rHTVi82pqIg6p/E35MVh7X5nXIVOlGM6YXrdKapL/tRNExAW0xfrtwSJfMoxNAqFcwyR= e+i f3/7YeeVW9uqs8gSzAqD9x7JAYI2eW3JW6N3bdiZxIJ7wuk67zaW5rh36h9FhRM9KONvWbzXD= KN2 qyGMI8nCoorTHcnGOw8TqLh9cni59kQ+lEw/6d/vglsWEWhDJdt9r3ZWpMJW9w=3D=3D =3DQgWh -----END PGP PUBLIC KEY BLOCK----- --------------4EA4DA2EF1CC261F57DBAC43-- --C4Xq0uG20w1jPRz1KzEy3YghGXvIa3LQT-- --OXkc0PK86A13EYwVYhDy6iBhW8autZT0i Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEOHo7et0VdZk8RJK34Ff+SCK3tkUFAmGSV+sACgkQ4Ff+SCK3 tkVx1xAAsfpfnhqq86dHhvNQL2tbNLTst7AfcOd9kS2fxEec59cwGmHLv8/Aa3a7 DY5r8kaLILfM3u3x8nopyO8c9HXs9axialqnXlhwI0HvuEon8Rx0TWVd8v8ZksiZ lbhKJxm723D57MZWFp/qGYg6BtAWU6vmytZx00S3LJ+sZ0gYLSZBqnGTU+5x908C 00YdnozeeGojNq6fhS6ufnMa9cVfRBegxYn0EkYUacOiVid9eXi49J8tbZQiXd// vZO/KpxQD6igsM7bJ7X4lVXkjhtK/H3EI/GD1FT3ySIF2FoGlzkNAkzQceAbFhSh wp1RojwQMm+skitqG6g4cbRtYQC7LlbpJbw0txEXQxU+Xx9wj3nz3Xm8HoNf6xPj 4ypTZ9S/nmQ0/APFuPLhEyOhLB1ufPWUH63rk8Ow5NOThq070pdsq4Yv/sSsSGna zUI+E9/IkQOM3BdJebO7ZLqdytbQVk3/WLcnOdS7ZW3bU0jMnleR2ZrK6C8L16pw HHeqKkKmeQ0V2Wy0451yvxdH3IE6GgI6K141kcNcrvSt8NPxWrtwkmhbGZOkNSmS Rqmy5brv2NnaXUs4rU+yn4eAaqAdpAixi0aDWrxDyv27MrMhzmn3Hkq9m9pgYyLz eWYmPI/euUlN6Og8PUu7HoJpc5SGeZFH/fmEisrLKBuDlcxYwmM= =Cdtk -----END PGP SIGNATURE----- --OXkc0PK86A13EYwVYhDy6iBhW8autZT0i--