Popcount optimization using SVE for ARM

Started by Devanga.Susmitha@fujitsu.comabout 1 year ago6 messages
#1Devanga.Susmitha@fujitsu.com
Devanga.Susmitha@fujitsu.com
5 attachment(s)

Hello, This email is to discuss the contribution of the speed-up popcount and popcount mask feature we have developed for the ARM architecture using SVE intrinsics.
The current method for popcount on ARM relies on compiler intrinsics or C code, which processes data in a scalar fashion, handling one integer at a time. By leveraging SVE intrinsics for popcount, the execution can process multiple integers simultaneously, depending on the vector length, thereby significantly enhancing the performance of the functionality.
We have designed this feature to ensure compatibility and robustness. It includes compile-time and runtime checks for SVE compatibility with both the compiler and hardware. If either check fails, the code falls back to the existing scalar implementation, ensuring fail-safe operation. Additionally, we leveraged the existing infrastructure to select between different popcount implementations, avoiding additional complexity.

Algorithm Overview:
1. For larger inputs, align the buffers to avoid double loads. For smaller inputs alignment is not necessary and might even degrade the performance.
2. Process the aligned buffer chunk by chunk till the last incomplete chunk.
3. Process the last incomplete chunk.
Our setup:
Machine: AWS EC2 c7g.8xlarge - 32vcpu, 64gb RAM
OS : Ubuntu 22.04.5 LTS
GCC: 11.4

Benchmark and Result:
We have used John Naylor's popcount-test-module [0] for benchmarking and observed a speed-up of more than 3x for larger buffers. Even for smaller inputs of size 8 and 32 bytes there aren't any performance degradations observed.

[cid:da1f7dfc-7d31-438a-a5e8-579e96f4a8e0] [cid:05551fcb-925c-43f6-a2b4-4dc2341322fe]
We would like to contribute our above work so that it can be available for the community to utilize. To do so, we are following the procedure mentioned in Submitting a Patch - PostgreSQL wiki<https://wiki.postgresql.org/wiki/Submitting_a_Patch&gt;. Please find the attachments for the patch and performance results.
Please let us know if you have any queries or suggestions.

Thanks & Regards,
Susmitha Devanga.

Attachments:

image.pngimage/png; name=image.pngDownload
�PNG


IHDR��_�\sRGB��� IDATx����^�Y��?c�Z��6@
��I����(�rQS���b�bG�6+X�F��@�I����`�����B.'7K�P�AD	6"��@����EH�m;=��;m�m��k8[�k?�N�>�����}�{�{?o�[�������s�����w]�v���k�_P���u�:@�P�]�}����(�f�C�P���u�:@��u�'�@� @��L�#�@� �;�wXp@� ��@�7��0� @w ����� @�'��o|a  @��@��a� @�O��"�@@� �!�����3@� 4���E��� @�C�g� @h<|��!@� p��� @� �x��B� @���A� @����/"� @���;,8� @�@�	 �_D@� �;�wXp@� ��@�7���1paa������������������nnn.�s���]�}�K��;w�������[����Y��?�w��7;;�]W\�>|��?�moo�����{��ew����*���w���e�����u��c�������1H�*��/�C��(+�A�$L3	\�z5+�������X�677�C=��?EmR,�������� @�@��K�����D���'��X\\�����s[[[Q?����K����4H������p6������6D
s���WiH����J�Jw��R����ncc��d+�K�K��e���T�DR+���,������#�<Rk�����1��0M��>���\�F�z ���<�T�!;55�	��������7>����^|?��P����>zp�W����������I���*��>q�DOX�w*�Q�����-+����^*��g����z�������3���	��.Z�y�������f��������,�5B�r�@��Q��*��cC^�x��l�L���?�b�Q�Y��!*������/�,|�?
����!%��������Sy�o�o�CQ^���^���m����&��	��.�^��p��~�k�F�`x��aX���	?j�Qs���1�db��fbJt�u-�zWm�|��f��"��)��4V/����������&��-vn��l��k�[S,V�y/eD~S8cG1�Q��2�����|��2Ka,n��#@���=)�#��/�����F�~���=<c�M��P6����T:&� ���k��$�D���>�k����^:�{~~>v��Q���O����'�����C���/|�%�g�d_�M��M���L���3���5)]
Q�M���]��/�w?�>��vc����(���uAc���Y�v�������T}��O�6��������c�m��m�)���f��N�:�/��T�<{S�����}�>+S���U���)��g��7���3Une�k��)W�.�!0j�Qs��,j��]��u��T��4������r���p��_���
��
���td��;���%���5qc/7w��]���4t-,7����+ai)}��Wv����!�+�������8�o�O�O���GQ���m�l���0�>�"�|&~8��O�8�a4h����,�����+O&�%R���/g�"��W�|���_WC���A���I���,6���~��l����)YJ�(|��w?��?�����W��A�M��y��-������wHS��]�C`���&<��S��5�a��LM��5���2��/x�]�����S���6<�Me�R6��7���&����Xz�`���o/)�R��Q�_������T���^2i��c�F�>Z��^l�|���Q�>��S��K�H���=�T�(���_g��+L��1V]�y1���0/���_�z�����g�9Z=�L��r�|��{�O]��nX7��R����������py�}[eSX���u-���5���U���X]��-c0��E���-d�����l�r��r�@�uPS��
j�����8|p��=���GQ��p&p����F��`6�RG{0�yL��s��$���$~���~uWT1�~��XV&L�X�������_��ooh��oaS���o��q���-���S���]�r�-//�^�<�x�������l����
�nG�_��c������k�}��o{X���W��f����m����"?)�EaS��x���p�!l�|{buF�Sa�J7��������k��������O^�����6�'�8��8m��/z0[��7j�������
��>x����ys��Z_��z��8,�������}���w�L�N��l�yZf[�^�]�R,����1��Me��-~��^������������x�-#K#V��N^�M������=�<��#�rH��i��������S��_��Ea��5����R�������%v������a�M��O�������}��6�����ZX�7��K`D��5|~��{�cA_ �[������;�]��p�d�Q
�[Zy~M(����~��s���4����C_M�����c��TVF�����1;�,�$,+��T^S�~XK?���'<W�������g[���~�����q�[F�Xc���L�ky-��M{����-����WVVB?v>6�3���{��5���`N��(l*\��~������@>����(���y{��+�?�>?�Fk��Z?����s��~����5>��I&Y���7|�����!���'O|��ai�a[$~�oL������'��[IA���g��~��S�VF�D��p��������6�����iq������n�������N(.���,��6�!/�2ed����:/���k���_��2�-�y�[]���M1�������~�A����}���M����Se������J>���{����O��4,/����0��Wz)��|�6Z�X[f������s?-�n��_^'G@�j�ukl��$�;��[xk|�w�_]��ACl�5���*_1�bq��
�?��F�w�����k<���R���@�I�=�!f<��1�V�5�s�������SyM��,�X>}�s�[Y��:�3L�a������l_?U�k����������k�r�'m?�~���+s^&�V��,6e���4�����=�j'Ry)
�
g����}�������">J/�w�7�A�t{��+�)�~^}~~yX�X[f�R����O�ogt^U���9D?���o���$�;������������5��'O����C@�
��4X����/2?��|�~��l_2�F8���0\o�fK�������a�gG��b�R�eo*�)w������"7���WJXe�3�U�7[	'fg?eTu�I;��(�p)�2y����2aI��K�7!GK�L������M���cG�>K�/��(�6�wE���co{���������ha�������>�u�7��K`�[��z�Y�&c��� ����j�����@��i�A�]7�t�F?f��O�����Z8����/���M)��C�f?n=8�ohChc�+�TX����O=};ci+|,~?\�����o�Gy����_+*��a��'��t�x�����]+�G��Es����4�f�Y�-U���
�M�w��9L�(l*�wx��SJH�����<�i���:]�;��T>,n-�������ci��x��9��8	 ��Ii��VQ�c
T�7��G���O��FV�6yI=�L��L����zP�_-}��O�������������x��f�D��<���V�zQ:>�T9X���Ed[*}�3�E��-�Qi��F,y��X9��Z����G��8j���X:���M{���&-1y���X���L���l,��n>�!�SiZz�����E����[��T��(v��K��8��h�=J/v���q�u�*{�8���fXn��XX��Wvy�,}�'�8�� m���j�,Y�a�=D�a�x�C\��~��o��i(�������{+��i���[���9~��d��%l�GQ��?��{���>p�N�m/:y��g��a^x���
:���)����0��?1P�*���m��~�A�-���/'�e�dcLx[d�^F���tb~lC���T���m���?�S�{�lC�,L�V?9�������Q���{��L����b�[�.X���3�i��8���d����h�k���8(�p8b����t}�1��+^�*7��j�tm�r����: ���\c~C�o�2�o���vx��M
���u���+�����s��!9����!p���0h�okpSq�{���H��jL����x�L��#G�<�^	��2����[q�q21;|;�^Xd�_>�cq���So��=6���;���`�"V'T�|�q
����h�s?����c���E���-��b���S-��X&�X�E������)��*;�C*�/��Y��q
�T=-����X��=���y������X�f����mS,����3�������zL}�J+f�������l���A��w��te�}cu^��^�u�r��lR�ym�^y������E?.�#H�opR
��5`j��I�aY�����U����c
�5������I������F�������w���R
����*^{!01ak	��Si��=�R~B;Ri�XH\��vf_��T��Cb(U�~O��[�1eC^�����c����Qy��cV�����a�e�$�[�[Ki�y�7��V����y�C�|L,�������u����D������(M����KX/B�R�������]���blab�a��a�
��������~����������e�Z�����r�x9B��:(� @�-��;NF	i\��2O�
��@�w���7 ��������d���@�Ox�=@h�q	�q��,�X�� ����r$� ����J�%���h|��c!@���%���n���!�D�&�
6A� @ A��3 @��H��R�&@� $ �`p� @�@	 ��X*�@� �|�� @h"|K� @� � ��O��� @M$��ob�` @��	08C� @���M,l� @�@�>g@� 4�����M�8���o���9�g���w�������nmm������9s�����`|��aw��y���]��q���qLMM�*����,���L��

� ��@�w���&�D�H�������c���7������(k���������3��������JFy����8�#�<���$^.@�%�����E@`|���]&lnn:�K �7~eee����^���^�[�n�������>��n�>�3ny6�����T>�����X���s� �|��
�@�H��_��b
�:�)�[���7o�/|�����e�����{�1?��������{_�������?y���x��	�J@����'@�Ne��i�4�[$fS��z��x1Q�o����9r�il{8D����������
��O�s@]"���Ri�W��@Y�'F/_���P�"��&h�a(�����cL�jX�D��OY�]v---�����4?���o��d������Q���{nv�l���k���a/8�w����/"�u@q�8\!�1�l^�tL*��K4J��P6�,q��8q�'���J����������P�J���c����|&���P���WX�.��
�?]3�-��0���Ym�X��q��D��=�!5~C�'�����U@`|a��)ahbY�5�\����ae��mL�*�Dq���DmJ���k��x��+]����+�X^��������H�.��[�=u�T)!o���������#tO��; �IOM�G�}1��B#j=����e�Dh(������r��[^^�%t��)MK/&R�|Z�w����kJL�q�q[�&����&�������{�r���)�dD\� ����4��/>M\���P71�'0M�*>_�Z�� NA�p)�m�7�"�8M��������6�����C��H��$Z��6�
��X^�������1d�r�p!@ N��+ 0F���E��Kd�vb5�
E?+~��8���N�	���HH�M1����L����~>,^�{��G�_�Ay�����s�y�����P�[��{W�;%�S�ax~C��N��<�4��/`��O3�� ^q(][��^t�1���,�6�=��oaCA��?%�M��v���a��G���5�X^|&�����\,���s@�M��	.���	����Ef����~�)q,?�X)\�1�z����4�.	b�B�s�e���}W��h��>E�����/���m���������X~X�!@ N��+ 0F��
E_�Y&�}����N	x?��?��SI�m�6/M[�F�]L���!.��1�n��������h�D�B�������;�'�-\x� b���7 �r��8����/`��&�}���������=���4S���>}:4%�;/=d����������kL�+�e���o�R��n�� ��~'~A
 �����-#�S�T3��L��L	������x��]������~����_Q^���kc)?�G�^���
}�G�Hx[�����`y0[��1�!@�Mxj �8y��X��h��,1Ai�$l�a-�h
{��Zjb�]W���v�������5fs,m�|*���c���"�_��
�1[��*m�����_���O_�~���@�?��x����/`S�/e���0���H�H��G�MF��T8�W�������������[[[=ML+^�������#���'�}fs��Xx	p��o���[���e����b�� ��x�qb�|�X�x8� �5���8��@��4&��d�����V�)Z�]�J���L8�����K�|����41mB������Y6�/�el���a^���R���v��XJ?�N�V����/���2���
@`�	 �'�t� 0V6N=�����Z�~�/��7m��Bh2|�K� �V���~�|,C�"��7����=�1&�A�@�>��+��"��H��������I���(L�K�P�	@�c�+p��K��0�^i��UKV���'m�w8._o�#5@`�	 �'�|� �7o�t'N��!��;�	�e&{6 C�����;T"� �!�6Y� @h?|���@� t��C�MV!@��O��2$� @"���Pa�U@� ��@���� @�@� �;T�d� @����/Cr@� �!�6Y� @h?|���@� t��C�MV!@��O��2$� @"���Pa�U@� ��@���� @�@� �;T�d� @����/Cr@� �!�6Y� @h?|���@� t��C�MV!@��O��2$� @"���Pa�U@� ��@���� @�@� �;T�d� @����/Cr@� �!�6Y� @h?|���@� t��C�MV!@��O�V��u�<x��������%����>�����}�������?�� @�@�oQ^XX��y(�M�K�/--�.db~��}nkk��2"
@� � ��sW��l�X IDAT^u{��u����z��k+++=h���n�������=7N @� P��x_������}��������BI��Q`�@� �m��&��=���P�����W�e�O�s@� �:tZ�kx�/�S>6T&;LaY!p��`�u�:@�P&��Sa��]v��8i�6t���s��!�i0�>�H]�P���u��:����]��������1B!@��M���V��qyy����U[.ruu59Y�^�	��.H�� @��N
x����L������g�n��� 4�@'|�P�!4�gc��g���R��u�o�n��,?�^��1�������r�_~�^#H
� ������������j���kkk^HN�$�}���������������w���cu�BZ� @�v�����0$�%��?����F��c��z��@� �I%�������|i������%������z��x�&�Y� @��oN������I��/�������\���@� �I$@�$������'�/%��?�c��c��P
d� ��@�w��(��,�[J����w�����-��B� ����Y�s�^�������������1[K�� @`4���J�# ����X����| @���@�OZ�Nx~�Dd�hi���V��?����
A� @$���`��9����-�������.�/�M��?@��`������?��94m��I����q���[���n>���7���| @�'����|�p��R����
�������W+K�� @�F���Q��v�V�A o����~��>b�+ @����=��i��E7;;�����}������gw��������������s;���9�}��[��OF��|���8�h�� �;������uV�/..f�����nyy9����gn'O���������R����������y�1|�������O���^j��X@v<������u��;x��;z��.dnff�moog��^���������v������.�n�Y��z�%��@� ����?������������K'|���������a/��TX��K@c�5l&�M��i�
@�@�	l��~���|V��P-��������9w��Mw���!4���nee�W"j#7^��������4��&��|��'���~��vc @`���r��3�����3>��6�F�|�������;J�+�����_����X����HZB����K�x5`| @]!�a�Z�����~g��JW55���~�\�|9[q�/�~�����+_��x+����\����'�X���+�Go���J�#u�:@�$���������|�B~�#?����;������	�1�k���-��������z���������X����s�O����t���q������P����o=�B�����������o|�=���,���G��!��n�����w��&��D���Y��J_EAG�4��o��s��g������K [^�����>�����4�@'��{��a���m����jX�����B�@�w�\+��kkA�C�@�	h��k�;�|������o���Y���tR�+���i�m�����X��?vb���([:+�k���g���(gr@��$�_>��\��E$����@g������nvv6����!��~�����������S�XZH��s_In�$��O��@
#��5,��w�?�������N�>8�������I
�w����@m'�9\�h�����U�)|�I��r������5q_����L�� ��	|w�R�3�D�?}���"��@��?�7��z.rwm���&��M� �qy��I���J�O�	 ��_��`4��[��7|����G�*QB��'��0EU��by���65��%�]c' ���r����{1a �N�Jj��>����i2+��"�����$7# ��v�z<��t�� �\E�L�zF��{.��^D����0�N���z3������S��AZ��M@���-����:��L.���-9��@�z�Z~�
�*Nt� ���V��]������6�3���]���b��)�pj�!��+Nt� ��D����������������HA�����=5aH��][�cML� �����}w'�r���>%��)�n�7�������vmU/3�+M4�:L@U�R��Fc�����J���^����d�����v��4�@� ���M����d9��
e���'����7~_R������$D,� �y�&H�k'�5;S�����x�����u{����SSS�����@mnn�����MOO����]�p�&����CjTc�W�����U�\C���:���'z�h"����m������ ?~��[^^���������'{����[����N�}ii�]�p!����s[[[=�@@��1o
.>QG @ E@��MTehf�^��;)�M�=ztW�/,,�������]����w�[YY��]__w���w���]���^{�����XFD|���� %���P'�&��Lq]g;)�S�}��m777�L��o_�+l�=/��"�����x�\�������@���/{o���g���?N�O
`������7o�+W�8
��P�m/��gM�����o����O�������@`�	|g����"���*?| #�yo"]Y5T����=Nv-6TFCk��V���E�������f��Y�}�{���d��;	eF&��<)�F��+����>6������[���<#�MF�	�
O�n�e'����._���m�!4���q�n������v�������w�>?O=!
�8�i�FQ�U�;{�}���?���u�>��\� �{�]��	x�~h�kU=�~��O�q����x����2'G�BZAf��?�|h&�����"�I���]+� ]�p�s��%'�2��hq,K@�������@������Z�=��#w���*e�W���Q'��������F�=�V,#i$8�C@>�5�Zi� L�����)��y�\�����$	s���6r����Xg#�~��c$�%�S������ ��P;����m���W�����7�X>V��Z�Q;���K�P�x�������������;{����677��W�G_�����]�p�@Yy
������$�@�Y$���LJ��@gM���m��B�����#���m������h�:����_|<�;���
��V��t��%(���a5| 0,�Vx��b��6�T����l��p��a�u���Tc�][�{��� @�������)w
���V>��@��M8�^v��8p`Go<�9VQ�c\�������b�*�� PL��s_qZ2%���k	I>��@�����=����s������qA�Vo����
����k��Ab�Jx�s���]�^{��}���	4^���-�h��*1����A�..�a3�^���$H�@>�Q����Z�Zq�����:8��xe��|��o�%�����!!0~��z������6u�����k�Y~������	�B���������C����=(�}�dV����p24����K��h�1>� P/��y�x��]��LT��\��Z+|W�|w���v�[���f�[7�9 P?-&���yCf^{���
#��@�w���x���d��~��6d!����.�V
���
4����m�����N��#�YF����KP�N��G�����D�@������
gT�������}r�{5/�m���c���G}t����s����!4��v�K�x�\���
,4L�ZK@K��MTU�<+���x'���x��I�H��@�	l����������\;�; P�?z����&�H�DUv���6qC�5�vb&���@�	d;�}�����:@���Dy�D��cm���b/�����7���/_��>��-�!:SSS����;0�Z�6��?�R�?j"������[���pMA2����0������=1�=i���8��z�i��7v}766�.�!/1.�����������������z~���������@���������@�'�E��Wj���u����9r�~���~O����~W����333;&���%�����b$�.��'o�V�$�b� ��@Y����������������@�����{�V�
M��X
���������!1�����#�#���P��������k,<�a�Y�4^�����q���/���������+_�-����0���I;��@]'���ZE&o��V����zMi~�[#���0j����$�5L����nuu�]�~�'��Z��
��5�����F���������w��68_�&����/��'�K��N��������N�NV^F�:`��]v2�D��S"z���v]�x1��(�`�t���5;�P����{��~84��V�x �p��o��[����7LM�76p�P��:����O}0�6�7^�+��>"�GRv��
��7Z�onnf��h���V���Y/{(�}?���h\���Jx��+��ZM+���X���!�	|w�R��]�����j��� P
��x�<���'\c�O�8�	�p��"��"B\'�W������Y�,���  a�7�]�| �F���W�\���nk��G
q������MX��E�M���y�Ov�+q<C���O�][%�����B 	@�vZ��������,���/��@��(��W_��K��:u*�r`�4i��Mb��[����:
;���p��
�4�� �I!���g��eL�������v���Io����p�s��m?s������-#�e%��?���C�[C@���m�����%�B	Z�Q�?�����|$s�qn�N
���C`H��8�/��N=8d
� 0.������6nbm������~4\��#���6uJ=����A9^����	�j�6����z�+91p	�$��og�a5&��k���?0YBu���j�Rr��3&��U$�S3�V	��7o�d�����N���I>�4^���^D$h-�����V�R�<L2�Vx[�1�hj�]~���A����_:�|j�M~�@�)4�Oc�S�]��D���v��@�����%{�������?J��
�����S�����b����$vB`�	H�k�<��Uh��3�����!�xo;���)��g��04�+�n���6]�B�������%��N�1���	�6���.{�c/�@ ��51�4���k��!�L�����y��ZW;���@�4^��@���G�V6������][5f� �:|w�Rn{$Q�&tu�i4�@+����{������gY���5	�&��z��vm��5| ��@�*Y���*��]&�xoc�m����Uh�\��{���W�:�| TM@Ca�&�f���{�����/��
��+W���,//g��B������&���6|�������"�8������IN�������x�@��(���������z�����a:a�������vkkk�7~C`��v���2Mc���+r2�Z	uH��W���k-k��
��W�f�]�|ii)��������ol�D��]�p!��iA���Jh���������S%���#���4�=����6n��&�H�o���������7n���766v�,��6����q���=�1w���M�VVVz�lgX���!�d�	��k{��G�\C���W���	�c wm���f����dh��7m=��n�\bG�[�h,��_XXp&���m����:GL"m��z�j#vm��R'O���&�~��{�� ���0Q�Z��6q'�E�������7'�H,�5�5�&�ck�K����0q��u�@����~:���6|�z�sL�0 P��:6�I��
a��r,��F
�q����1�&�c=�Z��WI��8	h�Lj�'=�Y)b��C�hMT�X�p���[c��������@��U6����_��%��8^s0h��������g�O>DY^kGYr�QN��+_^�m+$����]�r�6�6cb��(^����NF�H��Toz(�e�	�Q�1�y���<{�����b�W-{(�@��R��*���m}�/>�^�~W��xi����������������uR�k���'�Uf��=��o8&�<���:Gt�������������� ���s������	��nhB+@`0��&��%"C�,#�7v���Ujvm��L"���^*���%$�@�h��������"��m�$���n���w}-
[����B����N�=�H��M>�k�N^�����k�����| ��	�F�k�����������������V_$l������f+�(bm,�t������T_��L@K����o=���u���u�������7y��
�����{g���@+�	n���~����{��D�����]l�i���(C�;�O�7|��n6|*?h	�����^�����@�Z��6V��wT��	x���wJ��A��6lI<��@���W����@�h^K��	y����[�

S&�@��-�hCZb���LT����@�kkb��l���=��b>�I@��5$.�m�k�&>��� �G���!�y�}K����=��v���e���^�}���o�w7U[V���N�������&����������au7h��B�?��s�\�h6�������i���jS�.G��������C���u��0E��ONQ�����y���4�@��	w���oZ3��&�@+��k������R��Z���'�r���"�Io�,�����z���u�
��������N=��g%�����_ou>1m$��F���&�'n>�>�����N@�<o�����evY��hH<���&�I��
o�m�V4QU�j�@�#�
��j;���e$�W�H��������V��o�A���\
eK��r�\^��K(TI���V��X?v��{��Gw}{�1���]%��j �^�TO�6|�Z�| ����jZ2%�u���3>�@34^��FN�k3�a Pm
���]�����"M<���K)�.wm���t����x��u\�H
�Im�$�u�cO��%���^>��\��%^����:B��K��^����(7k�x�b�<e���_���������Vl,k�LL�l���o_��
%����?_�u���,?�P�1h���8��z�I`��qc�wccc��T�'N���-��pKKKnyyy�w�t2�@��l���A������1���
�Q�<UgLH�A�^�����z��� ��\�z5�O;��'];����
�G�D���h�V�����'O�&��&��'�_{��Q�A��@/�m	�*W��y��[]]��0������a��
*Q@�y�����~h�����Lj��l��}w;	|>�@;4^���
M��_\\t���n~~������;{�l;J+!�by�ch�'
��	h(�v8��ue�^��4B�@��Z#�G9a�H�k������������|��~�R�B�x��ax�3�����{������\����������'���w'������^��Or�p�PF\��Ea����N����z�G�
M���`�ti���Z������#"�:�/X�k IDAT|~�Il�z�q������4�?������H.W.��?���/v���/��//r�p�Pj������4Z�onnf��h�J����<o~��^*4.ee%��o@`��Sj�;�k'I>�:��P8Q�s��C���B�[O������+�����	G�������n�)�����g:B�lB`7���t�p�*;����H��^��\�re����z�����=0���O���8�N30rB``��)�k���k��h	�R�������]gm��0fC B��>bseN����3g�d��k��~�c�5��&�����H3����e�� 0��
�rvme-�	,�gI�[��jU��N=����EV
�����xw�3�.��<Cd}}k�}��g������?�-���?u����!b$h�:-�M���qt�����]vv������<�|��@\�@��z_}��>c�;�G ������%��?�.w�����m����ag| �/�g����_����������aw�����_����H�I�kkk��j����Us�������m��5�}����2�!&�u�:L\N%�U��?��u����v���^�z�e�����dH�]��{?��;����^y>�%�8o��mbj�X�[�K@b%0�[�������	_7
��8������k������k��6���.��IO�f~��wE�{�y������i����/�S�Ne<�������f@`'m���\��2�o'/~5��kg~?Y����	��z�_>�^�y���������z�C�n�5.���4R��)Cm&�hBqc��r�M�ks�}2hl�&�j��&]k(��-��b��V�����,B���K�S����O����~�)%���?����/�a*"�(o�eN�<YQ���������s
/`R_�jD����s�s�E�s}%��M�M��;�z{���3�����_��$)���V����������O��{�'~��X�w������,|� L���	*L��I�����>ec���&�r$�������`H�k�V(��]R�k��z��@�'p���N�a4�����/���X�����5������Ir^3|��I���z�m8B(����O��CS�����d�[�?�	�����:V�o&����Uc�&�j�z�%�����J��	���/��_U�	b�@#�m�d'���u r�O@=�Z;%�����EX��Z�(���g����c��-�z2w�,hhLn�~g��j��������6S���U����s�b��?�_�g�<�+�d�%�)�����~���]*8�
�#���z��I!��-�L�7���cx���?�	���\�Y��
�n�a7~�^~���������0����x���G�a�������l}{+�U��I���G�������~��?�	r���W���_��
����P&�%�e#��h����'r7n�
���FN��D������	����H����������6Xy���!Z�I_�s}��A6W�dX�s�K�z��g	~>�'�����3>�
�Q�����T��;���VZmF��h���w��5�U�r4�UvI��V>� �H�*4��X�I#��4���f�qk�����h�~	]������3������p��
�s�j����Nfv��Q��[��J(��5JH*�����V�U������"�����$7�@
�I�@
k`���C\��}�����
�>O�K��za�z�O=���
�X������Z�QCQ$��k�!*eD��~����h��^�����8��w���Z�k�W��O��onn���g~�ozz�����j#�A�����(�0ru�NvL�����
�a$}�}>�1�V�j#�����i�[&����(H0�r�F_���������%��.���o�'N��yL���R�KKK�����g�l��Ez��������H0b'o[�\�vo�r��
��^�$�5\j�������� �-�X�&H�(O�k9H�?W/>��}T��vV�_�z5�{��u���s������/..:�YYY�U�������'N �������G�k=��|l�s�;!�k�[������k(����-}�JM}>�	R]�5j)H�U���JSi��@��7o�t����� W�������q��wfj���� �,�iO�x��O�&9�����{����G�^j�aZ���^d�+����FJ����f��m�-��^�:6A
{������������
�9z���=;_XXp���������vm��m������Z[\B��k���:sZy���h��k�����z���oe���UoUUi��x�\�������|k�9�B���V�*4��h
���&Y�G:�2��L���9H�a�����5DI�3�e\5�{��r�um��5��S���U�y�@�u@�7@�[!p���2���K���~�M���������??��x�oJ�/�����$�z�������/)�������w�u�>��������[���C���������3���w�|����;J��o�����2���'�s���2��;{z��OB�!�i'�,}���_�������c��to��7#[�������=������'rO<�$���x�����(�q��NF�H��,���c��\c��W������j���_�W����*��pu��e'�
��
)o�����O��'H�����~S���2����fB��x���*X�%�������.���EB/*z���v�\��|N��?�����@&�S��T�����@/t��
u���(t�qG�GV�IMVM�����s'�E��{?�����i6?K@��M��)�����v
x����2/���d�[�����7ix�l�M����~;4������\�V����o�O=3�-��!8| ���!4*@��lN5�����]Q���|���4�p,i-�7�D��v�w�:����\�k�����_�������'���um���P�+�V��.�+/=?����D����~��[^^vg����u?~�x����;k?��6r�}��>����s�m�_-���`
7�b��,�d�+'~����������Y�o,|���c��z���&���@�	��E�n]�5���_p���G�Uoz����tZ�k)�={������onnf���_����������3%�w��%������M4�p�_�z��7j��3�!��4)�-�A{�mxK���Vo����r�um����?���j��D���������J!OJ>������J�������~�L�������|�C@;��	�;�v��7w����-z��[�\k���@[	�&Hu-�h��JOm����.@�w��[�wM2*%��?�X/�[Cs��z������v��b���/%���9�����r�u4^��M�~�#���+J�z��
�H_#l����5�\t���E~F}�v���S&���w�zPw�7^��R^=��_{�n�H��M��Y�!���e;�9J�g����Xy>�@9�r���Z"2{�$��|��0[i��Uo��n�x�CBbZ%��Q>���m=M���-c����k�Q�GmHL���wfK46�b,�@>-���X�]�*-e��A�X[��[����2�l�
�2�e(��1�C������}��27	�~�F��v=���!1a���m���J���^�?��:j�t-������x���������o)v��z�5�DX+jIK������k��w���uJ(]z���� �|���Z-F�V	]	w=����d����)���T��a�&��B��=�eo?��yMz|��I����q��Y��w����l��1P���g~rW�������E�4�ek�$��>��FU�m��^(�s���s@`����K�L����S2	|����!9L<�K\����=b\!���P��6�v���s���Z
W�T��U������N���jd���-,4Ln[f�����e�X?m�!���j��7����v�VB��$��rm_��v������?�?��t��	��7��`��������[�Y�V}h��g�1U�m��M��=��Z_�&al��'��������[!K���i]����@�w�����^9���"���?}��mr���O�K���ms���	��e)n/�&�������X������JW���z�+�D����VxL���n	hM���Z�[}�=�s��M_G^8�@%Bn������5�M��R��i��oz�+�ZD��@�7�h0��_��&��*��('��#HLLIl�&W�=\��5�M��<�n�V��:����������=���������mk=�n@���A�S�a���V�P2���M�l�:�k�M��[EM|����M|��[�_2�����P�>��=?E�_��| �n@�����������g����s�
Bs�%�.��-�A,��6n����f�����P��K�q��O����L��!�Xr��A��0�@;	 ��M���nii�-//��nll��2&��	*����fc����V��h�	+���wG�Q��G��%��VF:6���&���s���i;S;����5�������9��M_P~W�^u���s[[[>��$vl,��an��	���U�]l���;b������6���!N&6�2��	"�&L�7�����T�/[�E�d;O��u@�9�e!?33����|r(K�&-���UB��:H�����@6��v��E��}��������M6!i���l�jA~^�un{���,�X�N� 0��%����������|o����;{�lAH.C��em9@�c]��w&�K�65]��7%�U����#��zg����5A^X�?�VWW����{b����������|i;^�F;c�����	�<�������/��� �������K�v�ZXX�ll��k0��|����'�y����w���!������G~��}���p���1G%��/������m_q��O�����:@���]"��~��Tg'�P����{������5��o���:`��'�D�/�2����?1B����tM|�({L|�(;M|���>��> �u��:0�P�D`e�����s�R����5@�~�.�{��r)Q�1�J����f<6EZ�!(�� @`P�r��S8�����nnn��ir�q	�B@�;������R���@�	 ��Gc�m�m�d+��k<.C`B�#��$�� 0!����3g������2�ZV����!�L
v����$�&�~2��\@5`G� � @�"� @��C����@� @�"� @��C����@� @�"� @��C����@� @�"� @��C����@� @�"� @��C����@� @�"� @��C����@� @�"rnss�>|����'�NOO����!�@� �j	 �x��u�<x�I�/--�.db~��}nkk� 4�!@� P-|���E�w�^�������������N�<�s�� @u@��P�}�����s333n{{��3����	 @�FD����=zt�����0�]Xp� @1|`���2ZS���B�x����u�:@�LR���_2>w���1M`@<
�����u�:@�RF!��|��	x��D��@� 0�����)����@� �J �0��d .C� �J_���|g#�P\� @�������l��={�8}%����J�� @��%����'�A� @`��#�K�� @���Z��@� ��@��/�C� @�Z�jy @�FJ?R�D@� �j	 ���Il� @)�H�9 @��%����'�A� @`��#�K�� @���Z��@� ��@��/�C� @�Z�jy[M.^��fgg��={�����;�|M��L�uljj��={vW�/_��>���)���������'Oz�wN������.�������n����6���:�;w��G�,�~���^T�VD_H������b��?~�������������-���g)M��-//;}�������Y���_ZZ�����Q'������o�'Ndu&%���3���.�Tx-MF����6��8766v���~���;"�Ge���$��,,,�������KR������G{n�@`�n�r��%��Y�K���}[3�L����7��T��������g~�4j�v��p��}������\ E���W����s�b��}##��	��w	t3}{(�2�
.����nR#�yn�����(?6�!�Oe�Y���u6��u���y(�c�/��e�f,n��'���!1�L�t��b����l
�M:=��\��
�����:f���r������]|*���Yx��1����[�-�a��U4w��W���MK�c����$��hB�?	G�=6��&sHfB	X�p�c�O�.�����|�BTx��#�,V�h=��&	���H	�~�g�n&������#��h�������f������F��<V�lM,�y+5���#��@��3�E#����~�t��.o��_�~�����p����DR��FDo����$���z�Ru�z�R=X�$F���k��8b�,/,��O��<y�[^�8cu��q���z��8By���!�E�W�b�O�=���a\�(g�H ���X�4������T���M���~tl�y�ry��L!�	%`��c=�a��Z�^�	ED�F@ �m+�gya�:;���ERu��Xj�}Q8���+�~��8$����B���q|�B����'�,�;D@����mrb+6X���Nzp�:u*�����1��C�jI���r���l��5��1�e��bI�x���M�o�����Y�n�|4���J�#&��2���������9D?����
[��0�
���,
I��wX��'��zVTg�4��B@��za���ZV�_���W?m�jXw����F��#�z��@� ��@��-C� @�z���# @�FF?2�D@� ��	 ��gJ�� @���1 @��'����)1B� @`d�#CK�� @���z��@� ��@��-C� @�z���# @�FF?2�D@� ��	 ��gJ�� @���1 @��'����)1B� @`d�#CK�� @���z��@� ��@��-C]%��������VVV*Gp��-w��a�g�w���^�)������<:���Cc$��#|��&��(���B�rp��Y�����r�y���������C��_�j
��Ob��Q�
|B���:��@ #0*��^����yW�)��������?����;���FQ7n��M���FI?J��
t��(�@�P?y���)��:����X__w���wM{Q�p�ut��sEN�!�Q�Z0��&C�r�p]?V]����E�!0>���'e@`B	�`T��SOe���t:==�kb��
'��H4��1����jk���nnn�&�*������y��8�������of~�������������
IDAT��(.M�][[3/Nc��n����m�s�������'�8�<�����������T�,�x�������>�2y)�r��� @�@�	@`X&5�����nyy�]�p!���4��H�_�~��9s&���\]]u)w����^�W��%�%<}m`ggg��c�����w!0?�N����|�r&�%�M��^B���+Y��@_�d�AYw���1.*��~K�����+	z�Il�)��2,-m��b�1*�A���Dr��m���8��41����)L��z�M`[���~�^�97v������+��}cc������]x������baR�v��c�����X��������w����!�~��_@�{��+sr��@J��b����A����d=��}���������L�1�����������]3{|qlnel�x�h|lK�����1����m
YX:�r���U&/eX��s@ $�������R�1�����'}1)Sc~MP��?�W�+
��������x�����h�|,�
����D�:Q�6,���x|��q�.ci�<6�3H^�X��s@ $�������b�OQ�`�{|S~M$�b=��xc���R�
{�S�|wM����|*�������y?������_��2�&�e�0y���7����E���&��@
$���<%k��)qi�"�~M8�n�7�����FD)�J�5y3����X>��~����i�T�����c?�����C!�c����,�A�I@�;��)kr
�D������1�r��j��1�kc��Z��#G�VL�x��zJ8�+n
u�h��1���UN�h�%�i���������cy1�n��J�������KY�f{��f� �~�C���z	�K�}����*4�)�]�� �$ ����59�j"`��j`5f���K����2I��HT��z~�����a������
:��b{{�G�H�����?�]�hx��
x���m��D{�p�oy(	1���p'?i��|?e�R�����B���!@������M�<@�"��oTq` ���
s�
��m�@@��@��[��4Y��=���@�I�M*
l� ���'����f	C�@�G��@� ��@�7�d�� @�� @� �T���vA� @ B�� @��J����.@� D �#Pp� @�@S	 ��Z2�@� �|
N� @h*|SK� @� !���@�	� @M%��oj�` @�"�(8A� @���M-�� @�@�>'@� 4���%�]� @�@�G��@� ��@�7�d�� @�� @� �T���vA� @ B�� @��J����.@� D �#Pp� @�@S	 ��Z2�@� �|
N� @h*|SK� @� !���@�	� @M%��oj�` @�"�(8A� @���M-�� @�@�>'@� 4���%�]� @�@�G��@� ��@�7�d�� @�� @� �T���vA� @ B�� @��J����.@� D �#Pp��'p��m777���;W�������=:`h�A���W�YnX=Y��U�������{�s������}_;�����35��3�[�n����'O��P����g������}����V���H�����������sW�^�=}�����uw������g�fz?��������w��K����������W�4��F�{ul�I=�
N �O�����	�����b�o=z���o��I�W����Z�fT�x��{�����#�TncU����DUeC�lw;�����\����_q[���E�
���~V��W�gO��	 �}�C ��z�M��'D�����C����=��w��z�Co/yCcb~$���%XMl�����PM�������p���������PMb�%������{u��B��$���d���~	l_=��&�S����x���?��3��Pt�����m�K�lW��<����������?��o����y�6��	��O*Nr���W�F TN_9R"l"
my����7�Oi!��T�����s������������[��g����vW�\������������������kB^��z��lh�]��{(�e`�%���s�O�T����K������������<���\��#;N�>���'N$����tG��]W8��?� �����2���t?���)��^����*��������v��2��O�����nvv�WSSS;����4����������$����'V�aUE���}����~������|s������Xz�?��g������*�]�Wc<q������#\�l}��	w�u	xKOd���z�=������(�B�D����7o�t%�����1��_�� �c��~��Z�bb��'�p�����@"A6�>~�z�.;%�$���?���x���5�C��0������WbP/*�K\�xL���X���'�j���������%������h���Q[�g{��_�������Ry����������������ey����z[�>�4�XTG������ml�������0_�fxO����l������{��+��~X��o����J�����h`�!����Z(�_(d�!e����4c�������?*���]��(�E���l��:�q��lR/�}�x����h~�c��}��?:�SC	x_\�u�3����^~������e��^�>���V'MX�-yG��XM�b�����
b�����!��wR���z���7�W����CCi�{�Z�n�����0H	x���w���C�Wq���8�4}�+#L�%
��x����l�[���O?�cXQ����:�G�.�]E:J���b�|�X=3�8���u}���,L����ba�0�FX����u���-\���y�4�~5[c���b�(>�1��t�V&���ar����X>|;�_�����Z�-]�h#|K
��&���������E|?�}���8�x�[�I��I=tB�����������j��--in�2�p������m
�����nQ`vh���3g������W�q�����?�s���a����M��?a�5�=��_'�0���{^\&�OQz��~K#����'6vL�Q�k���s��5�����s/�g?��cq�����xR�g���qs�&@�7�4��������{��s#/���:L�R��a���������/���=\C�V�/�C{�[���U�(����X~����S������,�]��'�V����gX���~�~x����a����?������-|���������:jyQ����_����f��5w�U#��%��/Ro�X/�	����c?������������I��:��wp�OaM��������G�,M�
��=�[=�n����
��/&L�'%
B��](�d����!������+��s�����\?��=��7��r������?��w��9�*o*�m�NR�$�2q�u9u�(��I�a<y�DQ�-s�����Q�������:���<�X��r��48��� �����[H �����;����]��T�����y�2�;Z9��
��T�����_/���������������O� QaK<�X��BRB��������[b�HYX;�q�����^(����(I��~��������~[�����N�p��k��Q��+�����UQ�O�e��eu^ek��O�(=��2�D�z[t������rQ��+�w,��6���hq�����m2m�<�q�q���O�s�!�����3@`����{��hJ��M��/Q�#��.�7��&>��	p����
�:	 ���MZ�@��z������������3�fc���RtW�����[=��*Tx��i��s���0�C����> ��hA8D���JF���>�^�*Ew�q��$J�{5�G�F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F`��7��`@�P���u�:��:p���>���jvq�P���u�:@�Pv��������J�Z�IEND�B`�
image.pngimage/png; name=image.pngDownload
�PNG


IHDR@�r/sRGB���gAMA���a	pHYs�&�?hTIDATx^����Uw}���g|{o�������Z��]��]�^���Zm]�|e��J�hh�N��$%A��4�%�D�:Q��$�B1F�	�\RL�A$������	
��t_^�{���|�>����?���>��}�9�����/?�����o	�F��h4�Fkn{����(D���h4�F��h�js�@38���C8�8���C8�8���C8�8���C8�8���C8�8��}566�,]�4Y�lY299��z��s��������h�j��Km������fgg��+WF������#������k��<9{�l�eg��$�����_
��M�����]����tr��w&SSS�+��i�o��d��5���M����<����W�.4�����u�/S������������C��0�E���$��z��8l������}�o����+v�/_��:u*}u>�����X��+V���G�


e��,E������������U\;v,9~�x�Wy��������]0�t3����<��!\0�p�{>7o���������.��
���p���
��U�\�����*�}a�����b������{�=������Ia��n�S���V��n��������~k��D��~��i�k������h�M�A���v���v���~����D��G���R�pP���a�b1�7V��s�=�x���f<>[1��u�u��/�B����Q+r�����V�~������'+��L�Ax��cY�lL�w.�<������t�b"�/lfE�/���Hqd��^a�6�a��p9uI�U��i���,�����}�o(��n��oED�z���|V�B@��MC8���+�+�}������'�8��`��u�w�K����WQ����**P�����~�p������eK�0�u���_��q�k���w�"V�X���������8;����8�O�Q�i[��e	Y�S�b���\8]�z�w����
[�y���iW@��:�,\�t
A�}�|.����-��]�/Y����n�S�O���/6�B�X��|ol�f�{_�����VdXc��^�+�/��EXd�[��o���l�
����/��ao��i�H1W��������j��i�i�!oY�������p�=���m������;����k�P��
?����=�������"���~�e��?+l�|�
����_[������w��p9����P��w�����o����F�;�y��?w�lJ/Ef�g;YNCY��]/f��*F��~.��|�?M�{�o�������2���5l�����+�/��,kj+�X�����b�>g��6��B$�l����B�~S�"�F������Rdl�g����$�������?^��o���a�c��_��V�6d�1���>8��z�V��2����*�������6Eu3��}F�=o�:a�~�������G�,���\l�f���lJ/Ef��YNC�����������-64]zY�������+�������t���u\7����t�Vb�J9�uc+�p�h����_��+�v+n}���iMq��"�6.�(x�������?����~���������N
}�����>/Y���8�l����;�9��z���B(��MO�n�Z�q'��;y���w���dbb��w��?�7�<��<�g�~��w�\����Rd��l��4&o���ew���N�a�����v�)Y���a����t��p��e��6��������u������
=t��IW��o�����N����W�����hdm��d
w��&+����q��q-2��_���f��BmT������M������@:�wl�d��~(2������}Y�~��h'k����l��"���������E�K��~����m7�%k������/��I���_9���
 {-\!�^��x��YT������!��8j��.V�d�6�b�\/��H�5��n8���?:7��o�N���q�n��t���u:���OM�;<]�WE���y�>�s���?�l	�E�7�n����l��n�H�e���e��������7�����t���/o��t��p������V���c
�>\��J��O^a[�}�Z��a��
�,Y�"
��Y�o�8��O����-��7����NBg�v�X�(/2n���w�������^�0�M���g�-��	�.���z��"�CL/��J������c]�f!�'�l�c+�p�o�u��l��I�c�l��u�o��*P�l4���uZ��={��NZA�������0��+��v�~	Y� o�YD�i����Y{�}E��Nt:�
�C=�R,����	�����5��l�v�u7�&���^���i���%������,�b+(x��i���b�/^�
d�$�!����`Z?����]�fy�66N����a������������_EB'�"kS��u���X�;�6��9l��;1/v�(�v�(O���5�z��y��v�,2�f
K���_B����{���"�6������^~o/�-��>�ll���t��p�����]�`�Ll�oL��?keh��}+@b���RnW���#��B6E�����F�~S�o�*@���6f�8��S�����n���a3Y�n7��L�A�����M#�������u:�d)2m�(2e��E>�%���v��b8���"���r?���������5��,y�-���B �+������Vrj�
���=�&kEj+jQ� ���Oy���x�o(:�px�m4��g���
����?k��������3�0�e�i��i�o+2m���y���������SD8������w�$k����6����O_�f�v�����M�]/�uN�m�c�����e���������[Nc�����e�_�}��7k���v:��}V��]7�����o��V|�_9�6�����������}�NE���>r����J�}��V�j���$��vKK�&V`��h����M�)Y
����SV'6�>o��������:�p����W���O�����~�c6��+���^�w��Q�+�����zC���{:yZl�Am���sy�O�e3kX����"��r�����C����.���:���.���^��M�N�j�I^�f��B8@W��m����
W�~�{�g����0Rm������o��~����k�����h����6@v��~�
.}�������d��~G�!W�o��S�����>�?vaj?6���9�b���y�_������kY�7K�y'6ol��q���Z8�g�
�������o����w��c�3��y36nl�g/�f�zC�e�%���z/��b�.�!�3:Ze���jy�������������V�Z�u�{������n�q����@��1�����O�7��������.R\������D+�N���Sc�3�FGw09|�p�e�"
u��&R���a� /��;�8�
f������q�
Y���yNQ?�a���E��~���u����2�pPt���y�]������v��;kY������o�C�Z�o���{�-�z_�m�����a�wj���������u��{[�4��HL�0��e���{�i��i��
u�{M7���^�q�LW�_4HX�/���^�!� �y4�@�
B8��p@��!p��p�!p��p�!p��p�!�y���KFFF��K�F��e��M�6%SSS�'�)��;v$��������k��<9{�l�e6���5k��c��U�������~�������p��~��kW���s��������_�7==��X�":>�


%�N�J?�j��}m���y�����p�p�FGG�W/���q{����"LNN��,�C�U�����MV�\97�t����+�����YM!���h�l��e���4��#�y����EnV7�������C=�l��=}ep����*����{w���Q�v��s���������^D8�|�8�H8�2���}����9V�/_�<��!�����k	���l��}���=������ ��=p��+p��5��6O���{���=:�&���o���=����]���k�����t�=�zO�����@���E�A�n���� @>�����}�^WS�lE����9f���s���;����\{�������}��������x��{-,����g� W������f�;v��Z��m'Ey^��%/P ��+��N+���m���N����XA���3����N+�����7,������H6��n��������
���m�
���-z�?,�o!@>���.�w+R���~`�]+V��y^���s���dbb���v��/�c����������5�P����=�(�5
Y�e�w�d���#�y~a���!�
����~�l��d��
YG@�@�:](+���^�����$)$����!fa	��p^�p�>�����&��������K8��3��AVao��uw�qG�����`�SP��q���,,����E
[�K8��?��Z�A_�]8����>�E���EZ'�Pl<����;9���:C8��+u�����������=~���i�~�����E�
w��o�����{�8o���O�?����{��(.�.I:�����~�S���o,2�!�W��I�S����Q��B?���p� ���6d����� 9O^��.����oO_i�H8(2��N�k,��E�7�{��#�y���"�V������Q�B6+d��}��sOG{����v��~��	=��G��>o��G��6�j�� @>���m8+Hu�lX��=�
��>y���]p,�gcM�{��"�@�a
������G�w9r$�	�"����z�aw�4$@>���K8�g��TS��/�c�����t������k�����k���j�-j��5O~�p��pXc�Wq�X�4��N���V^���*�������������N��9p�@����=�@���7,��|��S���w_�+��;���"�h80��~�Q+���\�pX0�������Z�9!��#@��u��~|~��2?�����p5b���]�+u	b�#(=�#@��{��N+�����,���]@�"@���jo�=!Y��N�n����A�s����'O&[�nm�hX��p��4��^�#p��p�!p��p�!p��p�!p��p�!p��p�!p��y���K�.]������d���MV�\��^�:9{�l�j����$k��u�QJ����w/*�]?���pp���d���s�u�p066������{��I���������'�N�r�H����/��
�rE��e����w'+V�h�u?<<</�����>99�������~����:��pp���������E�j�=�p��###-�������3}���:PDc���]8��{tt����;�����;;��Hw'N��[�8��"��.�������g�����A?�E8@����{O�%����'h4�F��h�j�b�'D�Ax:����:�Vd��F��h4�\mP����H8�^x�H�NLL�5����O?]���"sA2����p���������"��)�������#�H��;\Q�i�&������.����V��{ Y����/��YG�������q���CE���T��EE��g���\D8
�����W&�}}c���
���oK�={4}��@g�N�o\�<��O���.I~���iW�F8�P0Px��K�O��-���g���s2Y���������=M�:��C�=s����d��'~9�)$��p�/�a��j"9�<6�
�
�?��]���.=��!�T5���]�
!�kO�}{�����OU��������C�D����_������S�D8r�y�.w��#;&������D����X���[�
j_��f���<�~��@�������G�mL�`pt�5����2���@�����k:�����7��~������"m�.D
���0=�z
~5�`�U���!h^(����O�.��p�x��m-����K�w��p����k[�A�����pd�����u�����?�vQ/� ��C�[��������:"N���%T�)�y@]x�]�\W� ���?l	jux�Y���77����]��[O� �����_>tg�n=�@����#�&=�G8Mz*��px��Td��4���>��i�S�}�������,]�4O_�������k]7j�V�Jv����{�����n�����������t��~�3M{*�������s���[���X88t��{OE��={����ddd���{�n����l�r�JW����{����/_��:u�u#E��g���&>���p`E��e�\��b���p��� �z���������������grr2�"I���[�Y��~��i�S�}�
'O�L>���UT���X�=66����3g
�"A����_@1M|*�������w�?}�������)@�i>4��;q�D����E��z*��g��]����N���������.���������A?���p`��F��h4Z�O���-��?o�4��b�A��
����F��F��h�z�#����p�c7F�]�6(��A�p���b�:�TW����#��.���Tw
�oP���"�qA2���z*r���Vp��
���B�n?��~���S�O�}C�ns4:9r�=�l������i��{����}�������m�{/l���+��=��Hw����=�W��6G������5a��r��Dy���<33��s{]E����{�W��~��bOE��My*����h�S�}�4Z���g�+}�Yh,��<��u����`0s�;�w��p����W������1}�yh$����p�F:���[�A���#����04���>����KZ�A���#�q~}xK0h�S�}�4OE�#�q�}WK8h�S�}�4��~��>�G8@��T�l�4
OE�F8@c�T�|�4OE�G8@c�T�|�4OE�G8@#�T��h������S��#��x*r1��OE.�p������Pk<�8�j��"G8@��T������/Y�ti2>>��2���L�v�Z�����P255��{A�nd���t<��F��s��%[�n�+�c�`vv6Y�r�+������������/ON�:U�Y�~4OE�Lc���C�\ X�lY�{��d���p�s�N����d�J�LOO���H7���h:��������'O&�v��*�udadd$Y�zur��������9s�m7z}�����T<�3�
��p`�������\466�N�9q�D�nt��B��S�@��T���kb���������/��_�6O�h4�F�U����i	�y���n����O8 ��y�F��h4�����������1�m���X�	�VP<�;���� �^x*rw�e��i:���Zx*rw�9�LLL$;v�pE��M������O��Xp�=l�H7���h*����F���oOG�[xZ����+��}�SSS���F�_M�S����p������#�Vx*r��
����j��c�-�@GP����;�l	��PYOE���P��}*��K�wQ���S�{G8@-�����	(�p���|*��i(����������Dr����4Y����s:S�p0==��_�>���t:t(Y�t�k��-Kv���^@sE����x�.�*}8K����������s���������v�_�z5G��"�O�����l�r����:�p�W�;��|�����S�o4OE��J���H����W^I8h���]�x*rwJ�4�������������4�o�?�S�����@v���.>^�b���?�H��a����[�OE�^����l��5Y�fM�}����G
ta2�4OE���� �����%�T��PI�?~�%�T���>���$k���{�Y���)@3=���-���"������P��q����;�hiw�y'w+h��[��x*roJ�9��)`x*�`T"��K9��]-���"����@���x������Q�p��n��Vwj��c�Z�����.�<ypJ�$d�V�S������V�l�2�V��"N��A�V�o��dxxx�H���P������^>�A�MMM��^P��g����"N%��b��h�������iSr������#��-[�k�o���}��=���{]����T��g����"V����@_���NI�W��w������&�F��499��r�Z�+V��(����_u�S����@���nE�v�Z��	�wVwz���3m�����@�T��*u8��g���X��4�7><���ko�1vtC�B����m��0��_u�S����@{�<�LLLd����tO�.HV@�0�`���
���<:��/�����A?��6O�h4�F�������`��G����A��������u�V��8p`�����F��h��iG6��%���h�uo�b�'�.�=t����E�<�������0tQ�6�~8��E���@��T��A8��w�@���%�K���g����"/�A�����[�.|����4��+��JV��g����"/�A�[�������V�Z5�nEF�cP�n��p���J���H7��~TOE^8�	'O�\���`��T��S�p`�����q*
@��T��S�p`w����w�y��<
���"/�R��������<rWK0xv�]����J����P'o��%<�������R��=�cO@��T��W�p�[v�z��������9x*��+u8���bw)�������"/�R���HO%����w+�'����J�L<yqP:<yq�.�������$9y�d�Bdk\�P?<yq�*���"c.Hh���xJd��}��m���� �y�OE�xY�.�t���S�����T���0��D8@i���|b����4�J#�T����K���P��"����A�T8�3x�@=�T��W�p����X�b�s
�����k������=�[�M��B(}88t��
_����+���=IYHM�@����������Q�p`OL���l-�p 
�W��!h��T����I��B(u8���uGv��pJ,�iF�.��\�,:��\�2666w����#�9�6=9j<y��>(�����Y�,[�����������KT�.:�OE^��;m���k�{���T���c������8*SLt�b��]���;�nhh�%��F��/�2��x*ryr�)M*�����LLL�����������{]��_,]��g����"�K��A��<l�,�u1t��;w�������`a!�H7��~��s�6�����xJ��D
7nL�����v��w�!h�w�]�m�1|����3g�v����/�*���a8��������h�>z��B�=c!����-U����'�v����@��0���`��S�O%�A�}t������[�);v*��M�����;��
��n�p��~���4�F��h�h���dK08����vK����_�k�7|1tfG�t��]��c�����F��h4Zw���w����_Y��6�
�����@���z���>v�XK;~�x�e����Q��#+�9��8��\N���b������{������(3��\N�V�j�B��(����;��D��������_e�S����� ���`��4���?�'�.�P�"�H?�PF<��*�nEFa[�~��iL�c�m����	���T�OMM��^P��g����"�W���������&��\^��C�����kA�V������U�p`���3��y���S�����@w:x���8�����[wT�/��%<����],�R�����.o	�}ss�.���"�_i�A�S�b������"�_i�A���c�����"�_i�G���"WCi����"WCi���V4>>��������@8���T�j `�x*ru�.l��)z�qV��d�r����Q�p�]i^�V���S���t���{�I�;V�?~<����"WK����OE����"WK��������������x*r��&�^x*r�0u|*������{����6�������=�%?{�H�n�0u{*��O>��b���Y�������������Y	���=Y�@A�%��i�f�P2�����������$���F���&T�}W��"�T�?~�_8��d��/�k
	Kn}�����&��.�Td�*���_q���;�[���/��6���C�2��*����?M�����?�
!�k���u����~�����=��-�$/��%�@����s�����~�����S�u[�����-���g�7
�~��/uA���S�W�\��^�:9{�l��333���k��K��644�LMM��^P��g�R�S��@��}�3.��'�DC������7����S�D8�����+��p`�A��={��{���}�����S�
w#���B�=Ya��OE�[�Z�����nc�]��d�m�M?U]���:�,[�,n	;w�t�MNN��$���t�b��d||��]��g�Z���c���V���N����������(�����o�S�W'-������?�;w.i	��g��i��^�g�C]��<�����?�����k����p�b�u.���k����p��������0�)>��O��T�'N��F���_-�����i����#��oxs4�����]���
����Y� v:�}�
��n�p��~���4�F��hE��{>��lxw�������n��zK4�u�;�<�����
���pa����;}�p@��h4����p�����M���F�.b�[�6(��A <��d�N+M���3-�@�JOE�3
b�@��T�& d�^x�H�NLL�5�������zq?�����T�5��
�(Y'7� ���������� ��L@S�b��-��*OE�����`����v�MB8��BC�w�
�����F��/����M_wIK8��S���s_4��hMC8�P,����+����
�������t#�����=��%T���*��=��k_|�+iW�B8@ON���%�����f���:��y�I����;e=�����K�j&�:�[��j����=7&�zUK8(�S�O=*���Ko{o�Us�]c0}���@p,���m��]���_�M�|��E������o:�
��������S�mK>�������L�����7�3
+���C������nz�;��
rOA�a��~{2y����vm�����0�T9�Z�X0h���� ��3�������kW=�3�M���n�H4��d��P���TGb����k��<����S�����D��nc���=iW0��g�$��w��d��w��Z<���Z4��=�"��3����|d�D4XS�X����=�XGG8@[zn��?��.<v�{��@�_���9����O.<]G���3]�l��:��Qw���~k��G�mL�`pt�5����2�������r���A8@��?�������(����/t�`�XOG��
���X0�3x�Y{�D�5���!�|�m��'���q���x0���S��������L0(�p�y~�����8
�����=��L��~�S�x�qq�������+
�t������]�C���_1�:�~�!��v���f�9=�v]#_�t4�6�<��s��^_����t�Q�|���d=��#4�
�����k
e���+���s_�:E8h(�"�S�b�@M��T��������o����+t�p�@��X�B��.J���e3����O?^s��iW���atR��4
��x}��=���-��]��������g�af�`�����p�E�/8{hw�u�����O�;x�Y�j���?LN��4
�fnyG���O����=��?t�����iW��@��j�����\�����i��3t����@%��d�������!�=��r��3�����)��pP3:p�����@�]_������I2�5�~<8��68��]�6Y�t�k�V�Jv����{����������������t#��h��__ *��r����p����C��V�g��dbb"q���}�j����d����@Ww{��u�Y�|yr������t#��h�v����+K}}��:�t��p����s.�^�:9{��}sc����3Y�lY299������d��������H7��~��x�������?(;=�,����0�G8�`{�c�����\8("��9S(h��_�t$@w�5I����-I��~�[�ba:�"FGG�..R���>'N�h��N�g�@���]Cj��@� �]�����3�~�p������#:��/�����A?��Mw�]�b�@Mw+*�����m���7���~����o�~a^�p`��F��h�r��_Y
�~���D?W�������W�>yd�����W�[�	m������T�~��l���h4�V�����%G>���@���k��<�%��2����h0��U�L���}#���6(��A]c�u�Vww���
�yq?�����Gs�/8~�������]���o���t�S{����9��o�Q�~�~����0��'r�/xv�e�oN��]���{�
j�������t��,�"|��m�ha;~����
�����F��/P}g�+���w]��f���/���_|�+iWX,��vW���?%yff����
�������t#���&���>����3�U��=�8�!g<��%���}W4�U�����_1��h0��������%R��D�*�z���q�� �D��t�Q��/=�,���z����`�������@`M��j��~�#	<��|�H��T�X P�)F:���t-A,��]���!,]T���c�@M%���*���b�@w+�]�PN��E����v��P�V����Wz���s��",��^_`���X0P���Qn��R�����.>d���Ow���m#���nN��s_r�w�g>�������D��G��Xwi4����������]��N
z��k[���������j ��&���`���o�?�v]n
*�_r��&kv%�?�=��?�L>�kM���^���rM�IT�`����!�=���i���S��x��.|��g��G�4�)$,���s�@�8�!g�B8	8y���@���/���i��`w!�y�pK0������y������
"�@�������%x��m���Gks}���	��������X0���5�$o����O�J]����#1;��U-�Y��WV����?�H6~ks�����\f�
���/���~���7����O��@T�?��%�����|`�3���9����C��ozgK(P��������Tc]'�u;Rk���H4X�����+�p�!�J��
K\0�����{�������k�s�@w*��Ge���u�!������� ���'�DC���������!�kt��.t�owE���h	��z�g���y�{��b���*����K7����������t�1
����y�;��j"T���b]d�;��(�N���X0���?�-y�S�N��p���Cw,Y���-�;m��@��������s��(�����o�RT]��h�>�?9��xr��u��
���&��w�2wg�A���G�����\}�u�B`+�{i��������t����o�H�%�}}�+�_�B�	��p��/�&�?~"9��]���oH�}W��/��}���#;&������K�_�]����Q���]����Xq�iS��p�����f"����Bt}��s��o)�������P���/nv���Agz���oq��h/}�����t#�v���:
	��4�9H�U�3�>�k�iG��NC:����������������k����=c��mE�6]��������\�,�P��T����Z
�~4]�����7�[���6���tz��k�$��5/O>�����W�Yr��_�|o�+;z��=c����f5�K����u)P�������VQ�=�����g���v���������B88<:��*�������0���������g����:���

@��/tj���B��?_����;�����cP�M��b�������0�-�*�_r��&kv�{���w&���&���7��t>�N��)=�����NA��pz�B[��������s����_}(���������1�M�E��Y�D�Y��"T����k]0�����{��B��[�-��i�Yw&�E��8�����?s����w����{��������vC��w%y��O&�6\-�����x�

�� �Su��V��>{�+�o�9��}�G��n~�+��6���n+{�0(������I��]�,]������djj*}�����W���?J��}����]���w$_�����O7}�:Th�M�N��v��W�����&���%-���v����������^5�������;�t�vt��_��t ��oM����]k����#�``�O��&����v[Q�1��D8�����d���.���'��w�
��/ON�������!�T��i�����&O��sw'����(��5����?N�7�����W�7�l���_�R��?�a�����]�������W�v�~����������U�������I�����_�|V������s���+�u��_�����?��~��G��^��7E?�b��(�A���3Y�lY299���$�����+������jY�
i4q����n�/�
�U�|������n4�5�/���������
�-���B^��������m��<_v�PV0hw��g���|E�����x>0Z{��?I�v�����
�����&/��+���2��~o�ex������u����d��(3�A��;w.IV�^��={���Y�WA�
�?�+��>�8�L���N%�o������I������cb�t��n�����8�jO���]��nW$?��?��aS!�m�Q����?W��P��|��0
���2�?������}��p���P����S�FGG�W.���E:��eW�����n����?��O5�Mf5��Y����"YM�56����_�����)Kv*�������s�;]���U��E���={��A�X8��>�������������&7����F��lU[/����6�~q����+�"`�������Bg���GG�~�C�p+p
��pP1l�d����t+�&nH��8�L�xc����\$�=��������ko����/��k���dr�����{�ns�����������coN�h�����������h�j�b�'T�B�Vd�� �eyc���nH�X@4�hb��Er�Z���_w�_�����y�����y���At�A��.�A��*�n$��+��������oH�w������&7��Y����[
����������7�E���~�u'O��N<.����pPAu��iS7�Mn�u��������]�;���S��"��'�~m�u}p�=P��
� P���5uC���fZ7k�����6���d�g.K���_=:��M��v��"�����5�q��O��}���r�{��.V(����pPQ333.,]��5������ji�������n�pg�I^ua���'Y����b���e������l(3�J���&7��Y���d���p�!p��p�!p��p�!pXT�N�z����f����l��1�����;v���������'�L�?���G�u���D��������{�u��	��9�|���w�v��[����I4����'\��o_�j�=��c���[����YSh�n�6�p�E��l��5���K]����Q<=�������d��U����~7�u/"T(j�mz���;MSm@m��6o�\�i���m��]vYr�UW�~����2���[�����xRQl�2����F��m������n�6�u�u�
��������>n5
�<��[O�,8Z�ho�B�6.*�Q�3�`4�V �i��V6������o��L5l���L�@E���
G���yZ����8��kZ���1��!��D������5��*�5��e����X����4�|���|A�H�4Mw�mZ�C��k�(Z�5��]�>�	Xp*�T<�{�t�R[�i�i�WM+u��IXk�Z��V4i���P��u���")��T���TW��
O7�2���:������i:k�r�i}�>����u�������XP�l��-�u�n���"�F��bB����F{f�F
������5i���-<J`���]{��]��4���F�(���^g�P��C�S�N��N�M�p>�=�u�����bJ�_���������5�!���\0j^C��YaP������{U���p���Rh�+��9k������xl/�����:m45\a�\��&��ER+U(i��uMo����t�V��i�^�BI��1����6�����5���j����}����P�^Q��m��"���,j�UHU�_��)Dvz�Q�+$�B�[�jm�4O�uZ�+ k����B]���I�n���SOXpZiX��C��-x�Yu:�&����l��Q7uvMK?�t��`�P��e�"�`��"
X,��DU�w��L�MgkaH�
nU�;F���p��Y�*
���5�
tt�?��u�����A���s�n�y_GJ�p����EUiyU@�����P�vWug������xi�5M���m������p�E����@h�+������E� �����P����H�I+���
x�n�=��45>4��(I��qP�����pZe�N��F�/<�B����?*���U���1dGV��!�Sf���Q��C�j|izWm��e[����5�k��8�p��;
�>��}Y��anw4[��Z����*�������4���X��y����_>��q8�n�E�K��Z�W	��NEp��\��
-lU�a�
��V ��S�m|����*l8�lo��!��!�}��+U<YE�ORuk����QC�y���;"�����Pv*�����^Ec����8�U������MS���y;|�>��*��i
C����q�V�q$nM�"�����j���G��e5V�����j��N�O[��*���!8D8����G��O�VJU[�hE���6�*t����6V �L�~���~�����5�X��P�0����W�M?
���]!�q�������h~�b96�V�!�����P%6�9�p���I��'v���_����l���-�6��:@�L��<��\�������V�jx5.���j}lG�4�j=^O�m�^��-��N���O;Y>m�/uB8���=
Z8��Y�Q��A
T@����J$k#a����@4��b
i�b+P�E��n������;�U �@�V`�@�x�r0�~{+�b���A�����W�x��4�����5Ok���`{W5��e���a��k�k�W��Tw���k��Wm�m~�O
���,�^�h���e���<����C����m�m��>��p��;<����5���Y�i}V�` �����B��L�!�
m�p�=0�Hj�b
�+#�r�j0���#�p�^T��i�������0�"�]@�t��ja�QE*"l~����]���-��������i.��a�|l��?|��~���F���K��.P����k���q��VX6�b��m���W6�Y��Y�����_�6|V@�N�*�p[�������������g�z_�n�@@�
��[����
U�V0j��\#uS�` v�Y���
m��-���6�~������Uda�/������.l��.�(��
[�5�6>4�����^
��t�0���~XP �k

u�U�izj85�cTTW5��������{
��mV4��U����[��y\�3'�^�v�vhZk<�1��#m���6�Z����X!]�
�Q�nc�@+Y����T�"A'4~4�'u��[��oD���<^�S�b4�*T�k�e]�i��
*
{ ��� �cl�l����A�;��:�^���N�eU���f-�Vi�|o{���B���X����lP�uy�p,m\���Q���U�c������/���
�����A�L���m�p��PSn�'��cm4�aU�a�b�ph������_6N|zM���l�������^S@��-�kz����m�j�5?g��V V=�j���^���_�F���8.�\�u�@Uh�����X7
Cz/\/��X`��hE��S*�r��(��p u��(�}N����@V������5,�9�*����7�X��56�4<a!��WE��	���k}�/����O�~v�a��k�r�k^	�Rh>��X{�5Mm���'�������y�U����V�Q!���p��8;],��v��*$����.�*�mXd�Wu�`����V&Z�j�V0U��`��Z��`$71�6���V1�`�o�����N5P!l����DU���(��h8c!���*Ma0�%�����H��>_�bQ�;<�g��g]�B�?��jl=�����������t6zM���U���j���Vu��Z��e����� mh�<e������"�(����Z���]U��b7�:����4U�V\W1�M�p��o����b{��U�i�a�q�4��[�n5����ige�y\�[Wi���KW�U�` ��������k;����W��~�v����vh<�<�y�j�r�aP����2����q-#U?Z�	�0`��j��BR+��nDE
�	�M���7[���f��^�tU��^������FYD�����8�K0����h���Z&T8��*����;k�0W5���[���?��e��>���N��pi����p>W��O4�U�s�O#-�>MW�n���� 'jU�nw�p�0�L�
J�������Wu#*.I���
���_0k��W`T��I����\�����!��U��[vE;3|����c�e�������d������n�����`�@���:��g{_����p��X�*���BKI:'7v���e��)%>M����0���6�U/���a@����UvMK �yG;4��>_�������pO��}`%�*����=���5��A���}E��2���m�����BS��*0�1���4F��B9��@�	7.U�B��!�i����g����p�8��)�8hW�|����R�y�B��c�6�j

Y��,k�e����5�Z�cA�N�"�&���ja�
i���vj����Zi�c�m�:-��@_��DM+�:�u	����j���@V����6���j���Y���5�~pP!U����i�U�i�Uk��\ph����@���m�����(k��<�q;rT%F����q��n4������W�z���*�i�n��<�n5��!Xq�aP��c��0�e�'MA8���h�S�`�S!amPU4W�xPQ�i�_L�������k
���S��S1��������|����Z+ �Ye�=�a��BP�T�������0���5,
@V ��!��*��4�Z�5Ly����:��'�z.��4=�@��D��k#bM�e�[���YH� V(�xR����U����=M3�
����R�T�` Y�;|zO�|U)�j9��jG�
@M��j|Uu��)�k8�S#/ ��@���4��h�i��e�G0��p�g��T��D��FDED��Qef{��S�DJu�bI�g��B�]�=�*$���4#��U
��O�C���y]�^U*5]E��H@���p�)����`����@
�vXh����M�� @C�{T}:����@�����;�@`�A�����S�iX5|�X8P7UB>MW��kZ@��l�H, h���u�4��5S�F8���*�bQd������].N�]jtTA�D�����.*�i`�N�xV��v���=�hf, hY��*�0�p+�,[(��iY�����r�# ���j�5���T�#�QA��*�"�NT4���o
s���e���BH�_-v�O�WE�X���_�S�l>������n�}V�LEs����r�p+�����A6����`�a�i�����Y6����Vk��yG4N�#(�F8��B�.P�s0�Ox�@��
��M�*�U��oMjY4�*,�l��?��-xm�y��4�V��~��`
�5�:�b���h:W����C�(
��E�A���E���N-�q�l��<�'������PQ�bR�.�����^�0h8�#A!��LU����
k84]U0g�<�U=b �w���a���O�Q7~0�*���������/k��������V��<����o������������E;���bJ��mh5}���*�4�U
�a��]F�WiZ����>�U�ifw"�i�4���g�����l�4=5�Z��a�'MX���p�����mDULT�n&v�%+���
)M

v~����*���n�i��_
��S�H���?�����e5�vz�u���a������B��g�������^H��<*4�x!..�*���~��s�U\�w����1��b�N�TP��s�U�iS���X8���9�*;����B�;j�@�y\��s�&<'�Jz9�K�N��";JP��W��p�3:�T�i���.�W��gG�4Lz]aA����I�����s���h��
l�p7E��q���y,=�O�����*T��� +���!�)E:=L��)��i���G�P���OR�=�*����*Qq��H@P��ktZ����y�e�i0Mc}���@T�������)���A�#<�;�j�.�����[��P���z��k��7/ ���F���k/�@�L�=<���W�@�5v}�^W�j0�nM����^��Y�����uTH�j��t$t�p@�i���H�a�{b�F{�U���vA��U��D*�m�;|�#A�[�W5���@,�Z@����l\��*�:V&�Pzv���EB�T�
y*���#��ru[�` ��VM��z�N������GV@P�X�k*�X��b���~T��B1
9���,��4���p*+
:�P�s�5<��)3f��#U��g�FMG<�b?�U��p��T��T�V7Y����y�v�@�H�N��JudD���������?�9�?��<]�������#V$��*����jt�',�5�;4��u�a�#
:��E8�f�5!h/�����B����;�N��R��l;������P�T���&�s���]-�a`e�p� R0��X�8Xp:%H������r���;R��#�4tm�Q(�u\c�0(
�5!,<�JC�)���p�[����p@0X<�����@0X<���C8�8���C8�8���C8�8���C8�8����;w&��-K&''�W�gvv6Y�vm�t��dtt4}5�uvz���&Y�����~���+9{�l�j�����C��5k��~���+�@8PE���A�::�r���#Y�/�}���#�w�N_)�AL�c������ @M:�����\��:.������NV�XQ��^P�
V��! �u\@8PE��	+F�.��]!��m���Z
���5,�uM���7�F��������PYm��U�����|���������I���K�n�:7,j�vjj*���5z��f;�a���2E~c/�L
�����N�r����s���~��N�w�q	�	PqV����M�6%���{]1������#��;�k����g�.��zM���(U1��v1���p�q��d����;Y7��ms�9p��+h�b:*�<�~�5������(:=��o�i�����������@8��P1��0�cl��_(
{M�^�#a����cE�����W��w'$�~����������/�{Qtz�.��
���p8�K�q	�����?V|*�w}���t{���Sk��,R�[����{����y� 6�����
���Z8^L'�#y���N������DV1�k<�p��~����^z���e��]��������w��A���N~cH��OWR�:g����������p���h7.�p5�U���T:����h8���[��o�
���A�����p���h���Kl\�jB�h�H�q����(�m8���_�Nw1����������0��AV`0Ec/:���5M�}���]t\�j��Q�*bw��;�����v�����~�zwg���4����NYQ��;��5ox�p`{��?:-�������O������o�E'�C�w�3�����~��V�5,E�%�&�h���:�\E���y����
Hu���V���?��d�.:eEa�~��
d��nDE����n���a8��c�/����^t:=D�D�d�&�O3��"�Rd\�e��,�T$X(�J�N�iw4�p�"R(���v�Q�4-X(��!r?�y�n8���C8�8���C8�8���C8�8���C8�8���C8�8���C8�8���C8�8���C8�8���C8�8��s���ddd$��{w�J����%����_@����D8h��O$�}}cr���]{n����N�]8������+�������v����X�"Y�|yr��������x������g�W�9t��@~� MOO'W\qE299��Rm������6���������nN���o��,�@U����.<��O���w\�����i���m8��R�@�;~�x�j�tlod�wO!f����_�c����V&g}��������m�m�MN=_�b��r
T�!� ����Sr��u����&G>|�{�����]^��@{��-[6��ha8�0�wB�m��=
��v��Y�����X����]2��k]{���G��k^�^�t�;���oE��2`9��p���C�]���@��'~9�
=t0���_�n�<rW����%���n�AOU0�*��������_!@�`��/�k��k���_�����-���OU	,�@u��N�9}�����K���w���u� �6��@��:m�}��>������_d�	,]�4J<
~wj�6mr��Z���lC��|��y��i�^����X@�������:b��W/�N����#���k��k�c��?���}�v7�[�n�����L�~�����9�_����*�t����K^}�����w�t� �n�9�L'M���-�$��.���7mB���K�������U��M�N�����~jj*}������/����<���kjY�HL��i�z���u�����E�)P]� p����x�f���o|'�>�����u�t��O��������c�6�a!bF�;�p�<y�=
�����>g����U��v�@��~�o���[bE��4
���?��������~�}�3��������S�k/~�K���K�����8XHW�u]�/�~'���O|<��r{���m���h����qlE�_�i��^�i��h�b�����G���Y���E��P��S�����v��Pl�%|��(�8~��h�i����h0�v����~��fl�^n���p�N/rj@�;�CawEN��g���X�����cb��~��W9�������b�~]���}�{#�``�w�k��Ll��M����^�ez���p�n�-����~���d�����v�����x�S�|@@{�cx���[���5U�}�����L�F-|���^�X��#+h�����Y��5}���-��������u�q�=����7[
��.:�'>V�w�>���h(P�Q��g�i:���������_~��_����}��<[d�i7�����~��V[?�-�[�?�S��@����&3��#Z�i��u��U��,�������j�g;m:���M�F-|���/���ax���F�
p�b(��H���,v�at:��;��
e;]a����7���h!�I�E�_��m�p�g�\���S��m:���M���7~�L�����Q����|[d�)P>�������T����������oO&�6\1W��.&�E��0���m4u�	�A�
p�b(��H��b��E�?�$6�E�������T��+o�d���p�3��[�:W���Cl���!o�����_��������O�����S�p��5,�@u��}8���s�?��7����O��������#,D���tQ�����mH����Y{�t��6��8������#�����(��p#n�NuZ���/6.��Qx�����U;���z���_��W����/�6��t��~\�\�_E��v�����n�-�������~]��Rd\�XN��"����m������R����[��V�*����7���Q���i�m����om@���7��(o��e^c�Ak���nl�n�U���6�a���E�������1����W�� �ah~H���
��G�Ms*�m�n3���-��p	��v�Wty(:��[Fb����l��zi������E8P9*�
���B%h(&Vv���B6�S��*G{����������:�����^{���aa�{������D8PI:�"<���{��=�A5���C8�8���C8�8���C8�8���C8�8���C8�8���C8����F��h4����p����4�F��h4�i�G?��p9��M(5MIEND�B`�
SVE_support_for_popcount.patchapplication/octet-stream; name=SVE_support_for_popcount.patchDownload
From 04d2100e41f9e282c3f1cee7867f8c18841414d1 Mon Sep 17 00:00:00 2001
From: rajatma <rajat.ma@fujitsu.com>
Date: Wed, 6 Nov 2024 15:50:04 +0530
Subject: [PATCH v1 1/6] Added new File of popcount SVE Implementation

---
 src/port/popcount_sve.c | 44 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)
 create mode 100644 src/port/popcount_sve.c

diff --git a/src/port/popcount_sve.c b/src/port/popcount_sve.c
new file mode 100644
index 0000000000..22185dda3b
--- /dev/null
+++ b/src/port/popcount_sve.c
@@ -0,0 +1,44 @@
+#include <stdio.h>
+#include <string.h>
+#include <arm_sve.h>
+
+typedef uint8_t uint8;
+typedef uint32_t uint32;
+typedef uint64_t uint64;
+
+uint64 pg_popcount_sve(const char *buf, uint32 bytes)
+{
+    // Version 2.3: 64bit value size, no loop predicate
+    svbool_t predicate = svptrue_b64();
+    svuint64_t segment, accum = svdup_u64(0);
+
+    uint64 popcnt;
+    uint32 i = 0, segment_len = svcntb();
+    uint32 num_vals_segment = svlen_u64(segment);                            // no. of 64bit values in a segment
+    uint32 num_vals_full_segment = (bytes / segment_len) * num_vals_segment; // no. of 64bit values in all full segments
+
+    // Process full segments, predicate is not needed here
+    for (; i < num_vals_full_segment; i += num_vals_segment)
+    {
+        segment = svld1(predicate, (const uint64 *) buf);
+        accum = svadd_x(predicate, accum, svcnt_x(predicate, segment));
+        buf += segment_len;
+        printf("i: %u, buf: %lu, accum: %lu\n", i, (uint64) buf, svaddv(predicate, accum));
+    }
+
+    popcnt = svaddv(predicate, accum); // horizontal reduce
+
+    // process the last segment, no. of bytes in the last segment may be odd, so we use 8bit values
+    predicate = svwhilelt_b8(i * 8, bytes); // i * 8 because, each value was of size 64bits in the loop
+    popcnt += svaddv(predicate, svcnt_z(predicate, svld1(predicate, (const uint8 *) buf)));
+
+    return popcnt;
+}
+
+int main() {
+    char buf[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"; // bitcount should be 258 
+    // char buf[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // bitcount - 86 
+    printf("\nTotal Bit Count: %lu\n", pg_popcount_sve(buf, strlen(buf)));
+    return 0;
+}
+
-- 
2.34.1


From 3e6229e8a85eb4a365aa9436b30c4162a8a8688b Mon Sep 17 00:00:00 2001
From: Chiranmoy Bhattacharya <chiranmoy.bhattacharya@fujitsu.com>
Date: Mon, 11 Nov 2024 15:55:12 +0530
Subject: [PATCH v1 2/6] Files added for popcount sve impl

---
 src/port/pg_popcount_sve.c        |  1 +
 src/port/pg_popcount_sve_choose.c |  1 +
 src/port/popcount_sve.c           | 44 -------------------------------
 3 files changed, 2 insertions(+), 44 deletions(-)
 create mode 100644 src/port/pg_popcount_sve.c
 create mode 100644 src/port/pg_popcount_sve_choose.c
 delete mode 100644 src/port/popcount_sve.c

diff --git a/src/port/pg_popcount_sve.c b/src/port/pg_popcount_sve.c
new file mode 100644
index 0000000000..aad59755f9
--- /dev/null
+++ b/src/port/pg_popcount_sve.c
@@ -0,0 +1 @@
+// DUMMY
\ No newline at end of file
diff --git a/src/port/pg_popcount_sve_choose.c b/src/port/pg_popcount_sve_choose.c
new file mode 100644
index 0000000000..aad59755f9
--- /dev/null
+++ b/src/port/pg_popcount_sve_choose.c
@@ -0,0 +1 @@
+// DUMMY
\ No newline at end of file
diff --git a/src/port/popcount_sve.c b/src/port/popcount_sve.c
deleted file mode 100644
index 22185dda3b..0000000000
--- a/src/port/popcount_sve.c
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <arm_sve.h>
-
-typedef uint8_t uint8;
-typedef uint32_t uint32;
-typedef uint64_t uint64;
-
-uint64 pg_popcount_sve(const char *buf, uint32 bytes)
-{
-    // Version 2.3: 64bit value size, no loop predicate
-    svbool_t predicate = svptrue_b64();
-    svuint64_t segment, accum = svdup_u64(0);
-
-    uint64 popcnt;
-    uint32 i = 0, segment_len = svcntb();
-    uint32 num_vals_segment = svlen_u64(segment);                            // no. of 64bit values in a segment
-    uint32 num_vals_full_segment = (bytes / segment_len) * num_vals_segment; // no. of 64bit values in all full segments
-
-    // Process full segments, predicate is not needed here
-    for (; i < num_vals_full_segment; i += num_vals_segment)
-    {
-        segment = svld1(predicate, (const uint64 *) buf);
-        accum = svadd_x(predicate, accum, svcnt_x(predicate, segment));
-        buf += segment_len;
-        printf("i: %u, buf: %lu, accum: %lu\n", i, (uint64) buf, svaddv(predicate, accum));
-    }
-
-    popcnt = svaddv(predicate, accum); // horizontal reduce
-
-    // process the last segment, no. of bytes in the last segment may be odd, so we use 8bit values
-    predicate = svwhilelt_b8(i * 8, bytes); // i * 8 because, each value was of size 64bits in the loop
-    popcnt += svaddv(predicate, svcnt_z(predicate, svld1(predicate, (const uint8 *) buf)));
-
-    return popcnt;
-}
-
-int main() {
-    char buf[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"; // bitcount should be 258 
-    // char buf[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // bitcount - 86 
-    printf("\nTotal Bit Count: %lu\n", pg_popcount_sve(buf, strlen(buf)));
-    return 0;
-}
-
-- 
2.34.1


From c1df7d044f7068285e6e5b7acf4e33afeb710107 Mon Sep 17 00:00:00 2001
From: Chiranmoy Bhattacharya <chiranmoy.bhattacharya@fujitsu.com>
Date: Wed, 13 Nov 2024 12:34:55 +0530
Subject: [PATCH v1 3/6] Optimizing pg_popcount() with SVE intrinsics.

---
 config/c-compiler.m4              |  44 +++++++++++++
 configure                         | 103 ++++++++++++++++++++++++++++--
 configure.ac                      |  36 +++++++++++
 meson.build                       |  31 +++++++++
 src/Makefile.global.in            |   2 +
 src/include/pg_config.h.in        |   3 +
 src/include/port/pg_bitutils.h    |  16 +++++
 src/makefiles/meson.build         |   3 +-
 src/port/Makefile                 |  11 ++++
 src/port/meson.build              |   4 +-
 src/port/pg_bitutils.c            |  11 +++-
 src/port/pg_popcount_sve.c        |  89 +++++++++++++++++++++++++-
 src/port/pg_popcount_sve_choose.c |  33 +++++++++-
 13 files changed, 377 insertions(+), 9 deletions(-)

diff --git a/config/c-compiler.m4 b/config/c-compiler.m4
index 10f8c7bd0a..500c4e6662 100644
--- a/config/c-compiler.m4
+++ b/config/c-compiler.m4
@@ -752,3 +752,47 @@ if test x"$Ac_cachevar" = x"yes"; then
 fi
 undefine([Ac_cachevar])dnl
 ])# PGAC_AVX512_POPCNT_INTRINSICS
+
+
+# PGAC_ARM_SVE_POPCNT_INTRINSICS
+# ------------------------------
+# Check if the compiler supports the ARM SVE popcount instructions using the
+# svdup_u64, svptrue_b64, svcnt_z, svcnt_x, svadd_x, svaddv, and svwhilelt_b8
+# intrinsic functions.
+#
+# Optional compiler flags can be passed as arguments (e.g., -march=armv8-a+sve).
+AC_DEFUN([PGAC_ARM_SVE_POPCNT_INTRINSICS],
+[
+  AC_CACHE_CHECK([for svdup_u64 and other intrinsics with CFLAGS=$1], 
+                 [pgac_cv_arm_sve_popcnt_intrinsics],
+  [
+    pgac_save_CFLAGS=$CFLAGS
+    CFLAGS="$pgac_save_CFLAGS $1"
+
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <arm_sve.h>],
+    [svbool_t predicate = svptrue_b64();
+     svuint64_t segment = svdup_u64(0), accum = svdup_u64(0);
+     const char *buf = NULL; // Simulating a buffer pointer
+     uint32_t num_vals_segment = svlen_u64(segment); // 64-bit values per segment
+
+     // Using other intrinsics as per the updated code
+     predicate = svwhilelt_b8(0, 128); // Simulating a conditional predicate
+     segment = svld1(predicate, (const uint64_t *)buf);
+     accum = svadd_x(predicate, accum, svcnt_x(predicate, segment));
+     uint64_t popcnt = svaddv(predicate, accum);
+
+     /* Return computed value, to prevent the above being optimized away */
+     return popcnt;])],
+    [pgac_cv_arm_sve_popcnt_intrinsics=yes],
+    [pgac_cv_arm_sve_popcnt_intrinsics=no])
+
+    CFLAGS="$pgac_save_CFLAGS"
+  ])
+
+  if test x"$pgac_cv_arm_sve_popcnt_intrinsics" = x"yes"; then
+    CFLAGS_POPCNT_ARM="$1"
+    pgac_arm_sve_popcnt_intrinsics=yes
+  fi
+])
+
+
diff --git a/configure b/configure
index 53c8a1f2ba..0cd8f2879f 100755
--- a/configure
+++ b/configure
@@ -648,7 +648,9 @@ MSGFMT
 PG_CRC32C_OBJS
 CFLAGS_CRC
 PG_POPCNT_OBJS
+PG_POPCNT_OBJS_ARM
 CFLAGS_POPCNT
+CFLAGS_POPCNT_ARM
 CFLAGS_XSAVE
 LIBOBJS
 OPENSSL
@@ -2787,10 +2789,12 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-
-
-
-
+# Set architecture flags for ARM SVE
+if [ "$target" = "aarch64" ]; then
+    CFLAGS="$CFLAGS -march=armv8-a+sve"
+elif [ "$target" = "arm" ]; then
+    CFLAGS="$CFLAGS -march=armv8-a+sve"
+fi
 
 ac_aux_dir=
 for ac_dir in config "$srcdir"/config; do
@@ -17582,6 +17586,97 @@ $as_echo "#define HAVE_XSAVE_INTRINSICS 1" >>confdefs.h
 
 fi
 
+# Check for ARM SVE popcount intrinsics
+CFLAGS_POPCNT_ARM=""
+PG_POPCNT_OBJS_ARM=""
+
+if test x"$host_cpu" = x"aarch64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for svcnt_u64 with CFLAGS=" >&5
+$as_echo_n "checking for svcnt_u64 with CFLAGS=... " >&6; }
+if ${pgac_cv_arm_sve_popcnt_intrinsics_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  pgac_save_CFLAGS=$CFLAGS
+  CFLAGS="$pgac_save_CFLAGS "
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <arm_sve.h>
+int
+main ()
+{
+    svbool_t predicate = svptrue_b64();
+    svuint64_t segment, accum = svdup_u64(0);
+    uint64_t numVals = svlen_u64(segment); // 64-bit count check
+
+    svuint64_t counts = svcnt_u64_z(predicate, segment);
+    accum = svadd_u64_m(predicate, accum, counts);
+    return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  pgac_cv_arm_sve_popcnt_intrinsics_=yes
+else
+  pgac_cv_arm_sve_popcnt_intrinsics_=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+CFLAGS="$pgac_save_CFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_arm_sve_popcnt_intrinsics_" >&5
+$as_echo "$pgac_cv_arm_sve_popcnt_intrinsics_" >&6; }
+if test x"$pgac_cv_arm_sve_popcnt_intrinsics_" = x"yes"; then
+  CFLAGS_POPCNT_ARM=""
+  pgac_arm_sve_popcnt_intrinsics=yes
+fi
+
+if test x"$pgac_arm_sve_popcnt_intrinsics" != x"yes"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for svcnt_u64 with CFLAGS=-march=armv8-a+sve" >&5
+$as_echo_n "checking for svcnt_u64 with CFLAGS=-march=armv8-a+sve... " >&6; }
+if ${pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  pgac_save_CFLAGS=$CFLAGS
+  CFLAGS="$pgac_save_CFLAGS -march=armv8-a+sve"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <arm_sve.h>
+int
+main ()
+{
+    svbool_t predicate = svptrue_b64();
+    svuint64_t segment, accum = svdup_u64(0);
+    uint64_t numVals = svlen_u64(segment); // 64-bit count check
+
+    svuint64_t counts = svcnt_u64_z(predicate, segment);
+    accum = svadd_u64_m(predicate, accum, counts);
+    return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve=yes
+else
+  pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+CFLAGS="$pgac_save_CFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve" >&5
+$as_echo "$pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve" >&6; }
+if test x"$pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve" = x"yes"; then
+  CFLAGS_POPCNT_ARM="-march=armv8-a+sve"
+  pgac_arm_sve_popcnt_intrinsics=yes
+fi
+
+fi
+if test x"$pgac_arm_sve_popcnt_intrinsics" = x"yes"; then
+  PG_POPCNT_OBJS_ARM="pg_popcount_sve.o pg_popcount_sve_choose.o"
+
+  $as_echo "#define USE_SVE_POPCNT_WITH_RUNTIME_CHECK 1" >>confdefs.h
+
+fi
+fi
+
 
 # Check for AVX-512 popcount intrinsics
 #
diff --git a/configure.ac b/configure.ac
index 6a35b2880b..2b67cd2753 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2089,6 +2089,41 @@ fi
 AC_SUBST(CFLAGS_POPCNT)
 AC_SUBST(PG_POPCNT_OBJS)
 
+# Check for ARM popcount intrinsics
+CFLAGS_POPCNT_ARM=""
+PG_POPCNT_OBJS_ARM=""
+
+# Debug: Print the host CPU type
+{ $as_echo "Host CPU: $host_cpu" >&5; }
+
+if test x"$host_cpu" = x"aarch64"; then
+  #PGAC_ARM_SVE_POPCNT_INTRINSICS([])
+
+   # Debug: Check if SVE intrinsics were found
+  { $as_echo "pgac_arm_sve_popcnt_intrinsics: $pgac_arm_sve_popcnt_intrinsics" >&5; }
+
+  #if test x"$pgac_arm_sve_popcnt_intrinsics" != x"yes"; then
+  PGAC_ARM_SVE_POPCNT_INTRINSICS([-march=armv8-a+sve])
+
+  # Debug: Check if SVE intrinsics were found after trying with -march flag
+  { $as_echo "pgac_arm_sve_popcnt_intrinsics after -march flag: $pgac_arm_sve_popcnt_intrinsics" >&5; }
+
+  #fi
+  if test x"$pgac_arm_sve_popcnt_intrinsics" = x"yes"; then
+    PG_POPCNT_OBJS_ARM="pg_popcount_sve.o pg_popcount_sve_choose.o"  # Adjust this as necessary to your implementation
+    AC_DEFINE(USE_SVE_POPCNT_WITH_RUNTIME_CHECK, 1, [Define to 1 to use ARM popcount instructions.])
+
+    # Debug: Print the objects being used
+    { $as_echo "Using ARM popcount objects: $PG_POPCNT_OBJS_ARM" >&5; }
+  
+  fi
+fi
+# Debug: Print final values of flags
+{ $as_echo "CFLAGS_POPCNT_ARM: $CFLAGS_POPCNT_ARM" >&5; }
+{ $as_echo "PG_POPCNT_OBJS_ARM: $PG_POPCNT_OBJS_ARM" >&5; }
+AC_SUBST(CFLAGS_POPCNT_ARM)
+AC_SUBST(PG_POPCNT_OBJS_ARM)
+
 # Check for Intel SSE 4.2 intrinsics to do CRC calculations.
 #
 # First check if the _mm_crc32_u8 and _mm_crc32_u64 intrinsics can be used
@@ -2115,6 +2150,7 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
 PGAC_ARMV8_CRC32C_INTRINSICS([])
 if test x"$pgac_armv8_crc32c_intrinsics" != x"yes"; then
   PGAC_ARMV8_CRC32C_INTRINSICS([-march=armv8-a+crc])
+  { $as_echo "pgac_armv8_crc32_intrinsics after -march flag: $pgac_armv8_crc32_intrinsics" >&5; }
 fi
 
 # Check for LoongArch CRC intrinsics to do CRC calculations.
diff --git a/meson.build b/meson.build
index 7150f85e0f..ba3bc4cd2b 100644
--- a/meson.build
+++ b/meson.build
@@ -2217,6 +2217,37 @@ int main(void)
 endif
 
 
+###############################################################
+# Check for the availability of ARM SVE popcount intrinsics.
+###############################################################
+
+cflags_popcnt_arm = []
+if host_cpu == 'aarch64'
+
+  prog = '''
+#include <arm_sve.h>
+
+int main(void)
+{
+    const svuint64_t val = svdup_u64(0xFFFFFFFFFFFFFFFF);  // Example value
+    svuint64_t popcnt = svcntb(val);  // Count the number of 1 bits
+    /* return computed value, to prevent the above being optimized away */
+    return popcnt == 0; // Ensure to return a valid value
+}
+'''
+
+  if cc.links(prog, name: 'ARM SVE popcount without -march=armv8-a+sve',
+        args: test_c_args + ['-DSVINT64=@0@'.format(cdata.get('SV_INT64_TYPE'))])
+    cdata.set('USE_SVE_POPCNT_WITH_RUNTIME_CHECK', 1)
+  elif cc.links(prog, name: 'ARM SVE popcount with -march=armv8-a+sve',
+        args: test_c_args + ['-DSVINT64=@0@'.format(cdata.get('SV_INT64_TYPE'))] + ['-march=armv8-a+sve'])
+    cdata.set('USE_SVE_POPCNT_WITH_RUNTIME_CHECK', 1)
+    cflags_popcnt_arm += ['-march=armv8-a+sve']
+  endif
+
+endif
+
+
 ###############################################################
 # Select CRC-32C implementation.
 #
diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index 42f50b4976..2e79a24a2d 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -263,6 +263,7 @@ CXXFLAGS_SL_MODULE = @CXXFLAGS_SL_MODULE@
 CFLAGS_UNROLL_LOOPS = @CFLAGS_UNROLL_LOOPS@
 CFLAGS_VECTORIZE = @CFLAGS_VECTORIZE@
 CFLAGS_POPCNT = @CFLAGS_POPCNT@
+CFLAGS_POPCNT_ARM = @CFLAGS_POPCNT_ARM@
 CFLAGS_CRC = @CFLAGS_CRC@
 CFLAGS_XSAVE = @CFLAGS_XSAVE@
 PERMIT_DECLARATION_AFTER_STATEMENT = @PERMIT_DECLARATION_AFTER_STATEMENT@
@@ -764,6 +765,7 @@ PG_CRC32C_OBJS = @PG_CRC32C_OBJS@
 
 # files needed for the chosen popcount implementation
 PG_POPCNT_OBJS = @PG_POPCNT_OBJS@
+PG_POPCNT_OBJS_ARM = @PG_POPCNT_OBJS_ARM@
 
 LIBS := -lpgcommon -lpgport $(LIBS)
 
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index 38006367a4..f2573ad4d1 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -678,6 +678,9 @@
 /* Define to 1 to use AVX-512 popcount instructions with a runtime check. */
 #undef USE_AVX512_POPCNT_WITH_RUNTIME_CHECK
 
+/* Define to 1 to use SVE popcount instructions with a runtime check. */
+#undef USE_SVE_POPCNT_WITH_RUNTIME_CHECK
+
 /* Define to 1 to build with Bonjour support. (--with-bonjour) */
 #undef USE_BONJOUR
 
diff --git a/src/include/port/pg_bitutils.h b/src/include/port/pg_bitutils.h
index 4d88478c9c..811b1cafe5 100644
--- a/src/include/port/pg_bitutils.h
+++ b/src/include/port/pg_bitutils.h
@@ -298,6 +298,16 @@ pg_ceil_log2_64(uint64 num)
 #endif
 #endif
 
+/*
+ * On ARM builds, try SVE popcount instructions.
+ */
+#if defined(__aarch64__) || defined(__arm__)
+#define ARM_BUILD 1
+#if defined(USE_SVE_POPCNT_WITH_RUNTIME_CHECK)
+#define TRY_POPCNT_FAST 1
+#endif
+#endif
+
 #ifdef TRY_POPCNT_FAST
 /* Attempt to use the POPCNT instruction, but perform a runtime check first */
 extern PGDLLIMPORT int (*pg_popcount32) (uint32 word);
@@ -317,6 +327,12 @@ extern uint64 pg_popcount_avx512(const char *buf, int bytes);
 extern uint64 pg_popcount_masked_avx512(const char *buf, int bytes, bits8 mask);
 #endif
 
+#ifdef USE_SVE_POPCNT_WITH_RUNTIME_CHECK
+extern bool pg_popcount_sve_available(void);
+extern uint64 pg_popcount_sve(const char *buf, int bytes);
+extern uint64 pg_popcount_masked_sve(const char *buf, int bytes, bits8 mask);
+#endif
+
 #else
 /* Use a portable implementation -- no need for a function pointer. */
 extern int	pg_popcount32(uint32 word);
diff --git a/src/makefiles/meson.build b/src/makefiles/meson.build
index 850e927584..0ff4e05993 100644
--- a/src/makefiles/meson.build
+++ b/src/makefiles/meson.build
@@ -103,6 +103,7 @@ pgxs_kv = {
 
   'CFLAGS_CRC': ' '.join(cflags_crc),
   'CFLAGS_POPCNT': ' '.join(cflags_popcnt),
+  'CFLAGS_POPCNT_ARM': ' '.join(cflags_popcnt_arm)
   'CFLAGS_UNROLL_LOOPS': ' '.join(unroll_loops_cflags),
   'CFLAGS_VECTORIZE': ' '.join(vectorize_cflags),
   'CFLAGS_XSAVE': ' '.join(cflags_xsave),
@@ -181,7 +182,7 @@ pgxs_empty = [
   'WANTED_LANGUAGES',
 
   # Not needed because we don't build the server / PLs with the generated makefile
-  'LIBOBJS', 'PG_CRC32C_OBJS', 'PG_POPCNT_OBJS', 'TAS',
+  'LIBOBJS', 'PG_CRC32C_OBJS', 'PG_POPCNT_OBJS', 'PG_POPCNT_OBJS_ARM', 'TAS',
   'DTRACEFLAGS', # only server has dtrace probes
 
   'perl_archlibexp', 'perl_embed_ccflags', 'perl_embed_ldflags', 'perl_includespec', 'perl_privlibexp',
diff --git a/src/port/Makefile b/src/port/Makefile
index 9324ec2d9f..73ec5847d7 100644
--- a/src/port/Makefile
+++ b/src/port/Makefile
@@ -39,6 +39,7 @@ OBJS = \
 	$(LIBOBJS) \
 	$(PG_CRC32C_OBJS) \
 	$(PG_POPCNT_OBJS) \
+	$(PG_POPCNT_OBJS_ARM) \
 	bsearch_arg.o \
 	chklocale.o \
 	inet_net_ntop.o \
@@ -102,6 +103,16 @@ pg_popcount_avx512.o: CFLAGS+=$(CFLAGS_POPCNT)
 pg_popcount_avx512_shlib.o: CFLAGS+=$(CFLAGS_POPCNT)
 pg_popcount_avx512_srv.o: CFLAGS+=$(CFLAGS_POPCNT)
 
+# all version of pg_popcount_sve.o need CFLAGS_POPCNT_ARM
+pg_popcount_sve.o: CFLAGS+=$(CFLAGS_POPCNT_ARM)
+pg_popcount_sve_shlib.o: CFLAGS+=$(CFLAGS_POPCNT_ARM)
+pg_popcount_sve_srv.o: CFLAGS+=$(CFLAGS_POPCNT_ARM)
+
+# all versions of pg_popcount_sve_choose.o need CFLAGS_POPCNT_ARM
+pg_popcount_sve_choose.o: CFLAGS+=$(CFLAGS_POPCNT_ARM)
+pg_popcount_sve_choose_shlib.o: CFLAGS+=$(CFLAGS_POPCNT_ARM)
+pg_popcount_sve_choose_srv.o: CFLAGS+=$(CFLAGS_POPCNT_ARM)
+
 #
 # Shared library versions of object files
 #
diff --git a/src/port/meson.build b/src/port/meson.build
index 1150966ab7..5308898bb4 100644
--- a/src/port/meson.build
+++ b/src/port/meson.build
@@ -91,6 +91,8 @@ replace_funcs_pos = [
   ['pg_crc32c_armv8', 'USE_ARMV8_CRC32C'],
   ['pg_crc32c_armv8', 'USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK', 'crc'],
   ['pg_crc32c_armv8_choose', 'USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK'],
+  ['pg_popcount_sve', 'USE_SVE_POPCNT_WITH_RUNTIME_CHECK', 'popcnt'],
+  ['pg_popcount_sve_choose', 'USE_SVE_POPCNT_WITH_RUNTIME_CHECK'],
   ['pg_crc32c_sb8', 'USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK'],
 
   # loongarch
@@ -100,7 +102,7 @@ replace_funcs_pos = [
   ['pg_crc32c_sb8', 'USE_SLICING_BY_8_CRC32C'],
 ]
 
-pgport_cflags = {'crc': cflags_crc, 'popcnt': cflags_popcnt, 'xsave': cflags_xsave}
+pgport_cflags = {'crc': cflags_crc, 'popcnt': cflags_popcnt + cflags_popcnt_arm, 'xsave': cflags_xsave}
 pgport_sources_cflags = {'crc': [], 'popcnt': [], 'xsave': []}
 
 foreach f : replace_funcs_neg
diff --git a/src/port/pg_bitutils.c b/src/port/pg_bitutils.c
index 87f56e82b8..15b3ea2e05 100644
--- a/src/port/pg_bitutils.c
+++ b/src/port/pg_bitutils.c
@@ -129,13 +129,16 @@ uint64		(*pg_popcount_masked_optimized) (const char *buf, int bytes, bits8 mask)
 
 /*
  * Return true if CPUID indicates that the POPCNT instruction is available.
+ * Return false for ARM builds.
  */
 static bool
 pg_popcount_available(void)
 {
 	unsigned int exx[4] = {0, 0, 0, 0};
 
-#if defined(HAVE__GET_CPUID)
+#if defined(ARM_BUILD)
+	return false;
+#elif defined(HAVE__GET_CPUID)
 	__get_cpuid(1, &exx[0], &exx[1], &exx[2], &exx[3]);
 #elif defined(HAVE__CPUID)
 	__cpuid(exx, 1);
@@ -176,6 +179,12 @@ choose_popcount_functions(void)
 		pg_popcount_optimized = pg_popcount_avx512;
 		pg_popcount_masked_optimized = pg_popcount_masked_avx512;
 	}
+#elif USE_SVE_POPCNT_WITH_RUNTIME_CHECK
+	if (pg_popcount_sve_available())
+	{
+		pg_popcount_optimized = pg_popcount_sve;
+		pg_popcount_masked_optimized = pg_popcount_masked_sve;
+	}
 #endif
 }
 
diff --git a/src/port/pg_popcount_sve.c b/src/port/pg_popcount_sve.c
index aad59755f9..94e97eaff9 100644
--- a/src/port/pg_popcount_sve.c
+++ b/src/port/pg_popcount_sve.c
@@ -1 +1,88 @@
-// DUMMY
\ No newline at end of file
+/*-------------------------------------------------------------------------
+ *
+ * pg_popcount_sve.c
+ *	  Holds the SVE pg_popcount() implementation.
+ *
+ * Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *	  src/port/pg_popcount_sve.c
+ *
+ *-------------------------------------------------------------------------
+ */
+#include "c.h"
+#include "port/pg_bitutils.h"
+
+#include <arm_sve.h>
+
+#ifdef USE_SVE_POPCNT_WITH_RUNTIME_CHECK
+
+/*
+ * pg_popcount_sve
+ *		Returns the number of 1-bits in buf
+ */
+uint64
+pg_popcount_sve(const char *buf, int bytes)
+{
+    svbool_t pred = svptrue_b64();
+    svuint64_t vec, accum = svdup_u64(0);
+
+    uint32 i = 0, vec_len = svcntb();
+    uint32 num_vals_vec = svlen_u64(vec);
+    uint32 num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
+    uint64 popcnt;
+
+    /* Process full vectors */
+    for (; i < num_vals_full_vec; i += num_vals_vec)
+    {
+        vec = svld1(pred, (const uint64 *) buf);
+        accum = svadd_x(pred, accum, svcnt_x(pred, vec));
+        buf += vec_len;
+    }
+
+    popcnt = svaddv(pred, accum);
+
+    /* Process the last incomplete vector  */
+	if(i < bytes)
+	{
+		pred = svwhilelt_b8(i * 8, (uint32) bytes); /* i * 8 because value size is 64bits */
+		popcnt += svaddv(pred, svcnt_z(pred, svld1(pred, (const uint8 *) buf)));
+	}
+
+    return popcnt;
+}
+
+uint64
+pg_popcount_masked_sve(const char *buf, int bytes, bits8 mask)
+{
+    svbool_t pred = svptrue_b64();
+    svuint8_t vec8;
+    svuint64_t vec, accum = svdup_u64(0);
+
+    uint32 i = 0, vec_len = svcntb();
+    uint32 num_vals_vec = svlen_u64(vec);
+    uint32 num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
+    uint64 popcnt, mask64 = ~UINT64CONST(0) / 0xFF * mask;
+
+	/* Process full vectors */
+    for (; i < num_vals_full_vec; i += num_vals_vec)
+    {
+        vec = svand_n_u64_x(pred, svld1(pred, (const uint64 *)buf), mask64); /* load and mask */
+        accum = svadd_x(pred, accum, svcnt_x(pred, vec));
+        buf += vec_len;
+    }
+
+    popcnt = svaddv(pred, accum);
+
+	/* Process the last incomplete vector  */
+	if(i < bytes)
+	{
+		pred = svwhilelt_b8(i * 8, (uint32) bytes); /* i * 8 because value size is 64bits */
+		vec8 = svand_n_u8_m(pred, svld1(pred, (const uint8 *)buf), mask); /* load and mask */
+		popcnt += svaddv(pred, svcnt_z(pred, vec8));
+	}
+
+    return popcnt;
+}
+
+#endif							/* USE_SVE_POPCNT_WITH_RUNTIME_CHECK */
diff --git a/src/port/pg_popcount_sve_choose.c b/src/port/pg_popcount_sve_choose.c
index aad59755f9..a6f9e0c3dc 100644
--- a/src/port/pg_popcount_sve_choose.c
+++ b/src/port/pg_popcount_sve_choose.c
@@ -1 +1,32 @@
-// DUMMY
\ No newline at end of file
+/*-------------------------------------------------------------------------
+ *
+ * pg_popcount_sve_choose.c
+ *    Test whether we can use the SVE pg_popcount() implementation.
+ *
+ * Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *    src/port/pg_popcount_sve_choose.c
+ *
+ *-------------------------------------------------------------------------
+ */
+#include "c.h"
+#include "port/pg_bitutils.h"
+
+#include <asm/hwcap.h>
+#include <sys/auxv.h>
+
+#ifdef USE_SVE_POPCNT_WITH_RUNTIME_CHECK
+
+/*
+ * Returns true if the CPU supports the instructions required for the SVE
+ * pg_popcount() implementation.
+ */
+bool
+pg_popcount_sve_available(void)
+{
+    unsigned long hwcap = getauxval(AT_HWCAP); /* get the HWCAP flags */
+    return (hwcap & HWCAP_SVE) != 0; /* return true if SVE is supported */
+}
+
+#endif							/* USE_SVE_POPCNT_WITH_RUNTIME_CHECK */
-- 
2.34.1


From b0acc73b3ecebc50c8992a8354674a3b946e23a3 Mon Sep 17 00:00:00 2001
From: Chiranmoy Bhattacharya <chiranmoy.bhattacharya@fujitsu.com>
Date: Tue, 26 Nov 2024 15:30:18 +0530
Subject: [PATCH v1 4/6] whitespaces and debug printing removed

---
 config/c-compiler.m4       |   3 -
 configure                  | 192 ++++++++++++++++++-------------------
 configure.ac               |  28 +-----
 src/port/pg_popcount_sve.c |  31 +++---
 4 files changed, 116 insertions(+), 138 deletions(-)

diff --git a/config/c-compiler.m4 b/config/c-compiler.m4
index 500c4e6662..fcfee6b2e2 100644
--- a/config/c-compiler.m4
+++ b/config/c-compiler.m4
@@ -753,7 +753,6 @@ fi
 undefine([Ac_cachevar])dnl
 ])# PGAC_AVX512_POPCNT_INTRINSICS
 
-
 # PGAC_ARM_SVE_POPCNT_INTRINSICS
 # ------------------------------
 # Check if the compiler supports the ARM SVE popcount instructions using the
@@ -794,5 +793,3 @@ AC_DEFUN([PGAC_ARM_SVE_POPCNT_INTRINSICS],
     pgac_arm_sve_popcnt_intrinsics=yes
   fi
 ])
-
-
diff --git a/configure b/configure
index 0cd8f2879f..6297c46dd6 100755
--- a/configure
+++ b/configure
@@ -2789,12 +2789,10 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-# Set architecture flags for ARM SVE
-if [ "$target" = "aarch64" ]; then
-    CFLAGS="$CFLAGS -march=armv8-a+sve"
-elif [ "$target" = "arm" ]; then
-    CFLAGS="$CFLAGS -march=armv8-a+sve"
-fi
+
+
+
+
 
 ac_aux_dir=
 for ac_dir in config "$srcdir"/config; do
@@ -17586,97 +17584,6 @@ $as_echo "#define HAVE_XSAVE_INTRINSICS 1" >>confdefs.h
 
 fi
 
-# Check for ARM SVE popcount intrinsics
-CFLAGS_POPCNT_ARM=""
-PG_POPCNT_OBJS_ARM=""
-
-if test x"$host_cpu" = x"aarch64"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for svcnt_u64 with CFLAGS=" >&5
-$as_echo_n "checking for svcnt_u64 with CFLAGS=... " >&6; }
-if ${pgac_cv_arm_sve_popcnt_intrinsics_+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  pgac_save_CFLAGS=$CFLAGS
-  CFLAGS="$pgac_save_CFLAGS "
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <arm_sve.h>
-int
-main ()
-{
-    svbool_t predicate = svptrue_b64();
-    svuint64_t segment, accum = svdup_u64(0);
-    uint64_t numVals = svlen_u64(segment); // 64-bit count check
-
-    svuint64_t counts = svcnt_u64_z(predicate, segment);
-    accum = svadd_u64_m(predicate, accum, counts);
-    return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  pgac_cv_arm_sve_popcnt_intrinsics_=yes
-else
-  pgac_cv_arm_sve_popcnt_intrinsics_=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-CFLAGS="$pgac_save_CFLAGS"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_arm_sve_popcnt_intrinsics_" >&5
-$as_echo "$pgac_cv_arm_sve_popcnt_intrinsics_" >&6; }
-if test x"$pgac_cv_arm_sve_popcnt_intrinsics_" = x"yes"; then
-  CFLAGS_POPCNT_ARM=""
-  pgac_arm_sve_popcnt_intrinsics=yes
-fi
-
-if test x"$pgac_arm_sve_popcnt_intrinsics" != x"yes"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for svcnt_u64 with CFLAGS=-march=armv8-a+sve" >&5
-$as_echo_n "checking for svcnt_u64 with CFLAGS=-march=armv8-a+sve... " >&6; }
-if ${pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  pgac_save_CFLAGS=$CFLAGS
-  CFLAGS="$pgac_save_CFLAGS -march=armv8-a+sve"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <arm_sve.h>
-int
-main ()
-{
-    svbool_t predicate = svptrue_b64();
-    svuint64_t segment, accum = svdup_u64(0);
-    uint64_t numVals = svlen_u64(segment); // 64-bit count check
-
-    svuint64_t counts = svcnt_u64_z(predicate, segment);
-    accum = svadd_u64_m(predicate, accum, counts);
-    return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve=yes
-else
-  pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-CFLAGS="$pgac_save_CFLAGS"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve" >&5
-$as_echo "$pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve" >&6; }
-if test x"$pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve" = x"yes"; then
-  CFLAGS_POPCNT_ARM="-march=armv8-a+sve"
-  pgac_arm_sve_popcnt_intrinsics=yes
-fi
-
-fi
-if test x"$pgac_arm_sve_popcnt_intrinsics" = x"yes"; then
-  PG_POPCNT_OBJS_ARM="pg_popcount_sve.o pg_popcount_sve_choose.o"
-
-  $as_echo "#define USE_SVE_POPCNT_WITH_RUNTIME_CHECK 1" >>confdefs.h
-
-fi
-fi
-
 
 # Check for AVX-512 popcount intrinsics
 #
@@ -17778,6 +17685,97 @@ $as_echo "#define USE_AVX512_POPCNT_WITH_RUNTIME_CHECK 1" >>confdefs.h
 fi
 
 
+# Check for ARM SVE popcount intrinsics
+CFLAGS_POPCNT_ARM=""
+PG_POPCNT_OBJS_ARM=""
+
+if test x"$host_cpu" = x"aarch64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for svcnt_u64 with CFLAGS=" >&5
+$as_echo_n "checking for svcnt_u64 with CFLAGS=... " >&6; }
+if ${pgac_cv_arm_sve_popcnt_intrinsics_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  pgac_save_CFLAGS=$CFLAGS
+  CFLAGS="$pgac_save_CFLAGS "
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <arm_sve.h>
+int
+main ()
+{
+    svbool_t predicate = svptrue_b64();
+    svuint64_t segment, accum = svdup_u64(0);
+    uint64_t numVals = svlen_u64(segment); // 64-bit count check
+
+    svuint64_t counts = svcnt_u64_z(predicate, segment);
+    accum = svadd_u64_m(predicate, accum, counts);
+    return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  pgac_cv_arm_sve_popcnt_intrinsics_=yes
+else
+  pgac_cv_arm_sve_popcnt_intrinsics_=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+CFLAGS="$pgac_save_CFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_arm_sve_popcnt_intrinsics_" >&5
+$as_echo "$pgac_cv_arm_sve_popcnt_intrinsics_" >&6; }
+if test x"$pgac_cv_arm_sve_popcnt_intrinsics_" = x"yes"; then
+  CFLAGS_POPCNT_ARM=""
+  pgac_arm_sve_popcnt_intrinsics=yes
+fi
+
+if test x"$pgac_arm_sve_popcnt_intrinsics" != x"yes"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for svcnt_u64 with CFLAGS=-march=armv8-a+sve" >&5
+$as_echo_n "checking for svcnt_u64 with CFLAGS=-march=armv8-a+sve... " >&6; }
+if ${pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  pgac_save_CFLAGS=$CFLAGS
+  CFLAGS="$pgac_save_CFLAGS -march=armv8-a+sve"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <arm_sve.h>
+int
+main ()
+{
+    svbool_t predicate = svptrue_b64();
+    svuint64_t segment, accum = svdup_u64(0);
+    uint64_t numVals = svlen_u64(segment); // 64-bit count check
+
+    svuint64_t counts = svcnt_u64_z(predicate, segment);
+    accum = svadd_u64_m(predicate, accum, counts);
+    return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve=yes
+else
+  pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+CFLAGS="$pgac_save_CFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve" >&5
+$as_echo "$pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve" >&6; }
+if test x"$pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve" = x"yes"; then
+  CFLAGS_POPCNT_ARM="-march=armv8-a+sve"
+  pgac_arm_sve_popcnt_intrinsics=yes
+fi
+
+fi
+if test x"$pgac_arm_sve_popcnt_intrinsics" = x"yes"; then
+  PG_POPCNT_OBJS_ARM="pg_popcount_sve.o pg_popcount_sve_choose.o"
+
+  $as_echo "#define USE_SVE_POPCNT_WITH_RUNTIME_CHECK 1" >>confdefs.h
+
+fi
+fi
+
 
 # Check for Intel SSE 4.2 intrinsics to do CRC calculations.
 #
diff --git a/configure.ac b/configure.ac
index 2b67cd2753..5a5ae8f7ca 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2092,35 +2092,16 @@ AC_SUBST(PG_POPCNT_OBJS)
 # Check for ARM popcount intrinsics
 CFLAGS_POPCNT_ARM=""
 PG_POPCNT_OBJS_ARM=""
-
-# Debug: Print the host CPU type
-{ $as_echo "Host CPU: $host_cpu" >&5; }
-
 if test x"$host_cpu" = x"aarch64"; then
-  #PGAC_ARM_SVE_POPCNT_INTRINSICS([])
-
-   # Debug: Check if SVE intrinsics were found
-  { $as_echo "pgac_arm_sve_popcnt_intrinsics: $pgac_arm_sve_popcnt_intrinsics" >&5; }
-
-  #if test x"$pgac_arm_sve_popcnt_intrinsics" != x"yes"; then
-  PGAC_ARM_SVE_POPCNT_INTRINSICS([-march=armv8-a+sve])
-
-  # Debug: Check if SVE intrinsics were found after trying with -march flag
-  { $as_echo "pgac_arm_sve_popcnt_intrinsics after -march flag: $pgac_arm_sve_popcnt_intrinsics" >&5; }
-
-  #fi
+  PGAC_ARM_SVE_POPCNT_INTRINSICS([])
+  if test x"$pgac_arm_sve_popcnt_intrinsics" != x"yes"; then
+    PGAC_ARM_SVE_POPCNT_INTRINSICS([-march=armv8-a+sve])
+  fi
   if test x"$pgac_arm_sve_popcnt_intrinsics" = x"yes"; then
     PG_POPCNT_OBJS_ARM="pg_popcount_sve.o pg_popcount_sve_choose.o"  # Adjust this as necessary to your implementation
     AC_DEFINE(USE_SVE_POPCNT_WITH_RUNTIME_CHECK, 1, [Define to 1 to use ARM popcount instructions.])
-
-    # Debug: Print the objects being used
-    { $as_echo "Using ARM popcount objects: $PG_POPCNT_OBJS_ARM" >&5; }
-  
   fi
 fi
-# Debug: Print final values of flags
-{ $as_echo "CFLAGS_POPCNT_ARM: $CFLAGS_POPCNT_ARM" >&5; }
-{ $as_echo "PG_POPCNT_OBJS_ARM: $PG_POPCNT_OBJS_ARM" >&5; }
 AC_SUBST(CFLAGS_POPCNT_ARM)
 AC_SUBST(PG_POPCNT_OBJS_ARM)
 
@@ -2150,7 +2131,6 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
 PGAC_ARMV8_CRC32C_INTRINSICS([])
 if test x"$pgac_armv8_crc32c_intrinsics" != x"yes"; then
   PGAC_ARMV8_CRC32C_INTRINSICS([-march=armv8-a+crc])
-  { $as_echo "pgac_armv8_crc32_intrinsics after -march flag: $pgac_armv8_crc32_intrinsics" >&5; }
 fi
 
 # Check for LoongArch CRC intrinsics to do CRC calculations.
diff --git a/src/port/pg_popcount_sve.c b/src/port/pg_popcount_sve.c
index 94e97eaff9..564a20bf3d 100644
--- a/src/port/pg_popcount_sve.c
+++ b/src/port/pg_popcount_sve.c
@@ -24,12 +24,13 @@
 uint64
 pg_popcount_sve(const char *buf, int bytes)
 {
-    svbool_t pred = svptrue_b64();
-    svuint64_t vec, accum = svdup_u64(0);
-
-    uint32 i = 0, vec_len = svcntb();
-    uint32 num_vals_vec = svlen_u64(vec);
-    uint32 num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
+    svbool_t    pred = svptrue_b64();
+    svuint64_t  vec, 
+                accum = svdup_u64(0);
+    uint32      i = 0,
+                vec_len = svcntb(),
+                num_vals_vec = svlen_u64(vec),
+                num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
     uint64 popcnt;
 
     /* Process full vectors */
@@ -55,14 +56,16 @@ pg_popcount_sve(const char *buf, int bytes)
 uint64
 pg_popcount_masked_sve(const char *buf, int bytes, bits8 mask)
 {
-    svbool_t pred = svptrue_b64();
-    svuint8_t vec8;
-    svuint64_t vec, accum = svdup_u64(0);
-
-    uint32 i = 0, vec_len = svcntb();
-    uint32 num_vals_vec = svlen_u64(vec);
-    uint32 num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
-    uint64 popcnt, mask64 = ~UINT64CONST(0) / 0xFF * mask;
+    svbool_t    pred = svptrue_b64();
+    svuint8_t   vec8;
+    svuint64_t  vec,
+                accum = svdup_u64(0);
+    uint32      i = 0,
+                vec_len = svcntb(),
+                num_vals_vec = svlen_u64(vec),
+                num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
+    uint64      popcnt,
+                mask64 = ~UINT64CONST(0) / 0xFF * mask;
 
 	/* Process full vectors */
     for (; i < num_vals_full_vec; i += num_vals_vec)
-- 
2.34.1


From 58e90123c88ecc10602ff84e8e061237c6dff830 Mon Sep 17 00:00:00 2001
From: Chiranmoy Bhattacharya <chiranmoy.bhattacharya@fujitsu.com>
Date: Tue, 26 Nov 2024 15:48:57 +0530
Subject: [PATCH v1 5/6] updated the macros used and comments added

---
 configure.ac                   |  2 +-
 src/include/port/pg_bitutils.h |  8 +++-----
 src/port/pg_bitutils.c         |  5 ++---
 src/port/pg_popcount_sve.c     | 12 ++++++++----
 4 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/configure.ac b/configure.ac
index 5a5ae8f7ca..a45a01c20a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2098,7 +2098,7 @@ if test x"$host_cpu" = x"aarch64"; then
     PGAC_ARM_SVE_POPCNT_INTRINSICS([-march=armv8-a+sve])
   fi
   if test x"$pgac_arm_sve_popcnt_intrinsics" = x"yes"; then
-    PG_POPCNT_OBJS_ARM="pg_popcount_sve.o pg_popcount_sve_choose.o"  # Adjust this as necessary to your implementation
+    PG_POPCNT_OBJS_ARM="pg_popcount_sve.o pg_popcount_sve_choose.o"
     AC_DEFINE(USE_SVE_POPCNT_WITH_RUNTIME_CHECK, 1, [Define to 1 to use ARM popcount instructions.])
   fi
 fi
diff --git a/src/include/port/pg_bitutils.h b/src/include/port/pg_bitutils.h
index 811b1cafe5..8e09f78862 100644
--- a/src/include/port/pg_bitutils.h
+++ b/src/include/port/pg_bitutils.h
@@ -299,14 +299,12 @@ pg_ceil_log2_64(uint64 num)
 #endif
 
 /*
- * On ARM builds, try SVE popcount instructions.
+ * On AArch64 builds, try using SVE popcount instructions, but only if
+ * we can verify that the CPU supports it via a runtime check.
  */
-#if defined(__aarch64__) || defined(__arm__)
-#define ARM_BUILD 1
-#if defined(USE_SVE_POPCNT_WITH_RUNTIME_CHECK)
+#if defined(__aarch64__)
 #define TRY_POPCNT_FAST 1
 #endif
-#endif
 
 #ifdef TRY_POPCNT_FAST
 /* Attempt to use the POPCNT instruction, but perform a runtime check first */
diff --git a/src/port/pg_bitutils.c b/src/port/pg_bitutils.c
index 15b3ea2e05..9bd5985330 100644
--- a/src/port/pg_bitutils.c
+++ b/src/port/pg_bitutils.c
@@ -129,15 +129,14 @@ uint64		(*pg_popcount_masked_optimized) (const char *buf, int bytes, bits8 mask)
 
 /*
  * Return true if CPUID indicates that the POPCNT instruction is available.
- * Return false for ARM builds.
  */
 static bool
 pg_popcount_available(void)
 {
 	unsigned int exx[4] = {0, 0, 0, 0};
 
-#if defined(ARM_BUILD)
-	return false;
+#if defined(__aarch64__)
+	return false;						/* cpuid not available in __aarch64__ */
 #elif defined(HAVE__GET_CPUID)
 	__get_cpuid(1, &exx[0], &exx[1], &exx[2], &exx[3]);
 #elif defined(HAVE__CPUID)
diff --git a/src/port/pg_popcount_sve.c b/src/port/pg_popcount_sve.c
index 564a20bf3d..140bf37a2d 100644
--- a/src/port/pg_popcount_sve.c
+++ b/src/port/pg_popcount_sve.c
@@ -46,13 +46,17 @@ pg_popcount_sve(const char *buf, int bytes)
     /* Process the last incomplete vector  */
 	if(i < bytes)
 	{
-		pred = svwhilelt_b8(i * 8, (uint32) bytes); /* i * 8 because value size is 64bits */
+		pred = svwhilelt_b8(i * 8, (uint32) bytes);     /* i * 8 bytes are processed in loop */
 		popcnt += svaddv(pred, svcnt_z(pred, svld1(pred, (const uint8 *) buf)));
 	}
 
     return popcnt;
 }
 
+/*
+ * pg_popcount_masked_sve
+ *		Returns the number of 1-bits in buf after applying the mask to each byte
+ */
 uint64
 pg_popcount_masked_sve(const char *buf, int bytes, bits8 mask)
 {
@@ -70,7 +74,7 @@ pg_popcount_masked_sve(const char *buf, int bytes, bits8 mask)
 	/* Process full vectors */
     for (; i < num_vals_full_vec; i += num_vals_vec)
     {
-        vec = svand_n_u64_x(pred, svld1(pred, (const uint64 *)buf), mask64); /* load and mask */
+        vec = svand_n_u64_x(pred, svld1(pred, (const uint64 *)buf), mask64);    /* load and mask */
         accum = svadd_x(pred, accum, svcnt_x(pred, vec));
         buf += vec_len;
     }
@@ -80,8 +84,8 @@ pg_popcount_masked_sve(const char *buf, int bytes, bits8 mask)
 	/* Process the last incomplete vector  */
 	if(i < bytes)
 	{
-		pred = svwhilelt_b8(i * 8, (uint32) bytes); /* i * 8 because value size is 64bits */
-		vec8 = svand_n_u8_m(pred, svld1(pred, (const uint8 *)buf), mask); /* load and mask */
+		pred = svwhilelt_b8(i * 8, (uint32) bytes);     /* i * 8 bytes are processed in loop */
+		vec8 = svand_n_u8_m(pred, svld1(pred, (const uint8 *)buf), mask);   /* load and mask */
 		popcnt += svaddv(pred, svcnt_z(pred, vec8));
 	}
 
-- 
2.34.1


From a4413f476ce0e9c58914150e5874eec340bd136c Mon Sep 17 00:00:00 2001
From: Chiranmoy Bhattacharya <chiranmoy.bhattacharya@fujitsu.com>
Date: Wed, 4 Dec 2024 12:55:36 +0530
Subject: [PATCH v1 6/6] buffer alignment for popcount sve impl

---
 src/include/port/pg_bitutils.h |  2 +-
 src/port/pg_popcount_sve.c     | 75 +++++++++++++++++++++++++---------
 2 files changed, 56 insertions(+), 21 deletions(-)

diff --git a/src/include/port/pg_bitutils.h b/src/include/port/pg_bitutils.h
index 8e09f78862..a690a46a88 100644
--- a/src/include/port/pg_bitutils.h
+++ b/src/include/port/pg_bitutils.h
@@ -302,7 +302,7 @@ pg_ceil_log2_64(uint64 num)
  * On AArch64 builds, try using SVE popcount instructions, but only if
  * we can verify that the CPU supports it via a runtime check.
  */
-#if defined(__aarch64__)
+#if defined(USE_SVE_POPCNT_WITH_RUNTIME_CHECK)
 #define TRY_POPCNT_FAST 1
 #endif
 
diff --git a/src/port/pg_popcount_sve.c b/src/port/pg_popcount_sve.c
index 140bf37a2d..392441a9b1 100644
--- a/src/port/pg_popcount_sve.c
+++ b/src/port/pg_popcount_sve.c
@@ -24,16 +24,33 @@
 uint64
 pg_popcount_sve(const char *buf, int bytes)
 {
-    svbool_t    pred = svptrue_b64();
-    svuint64_t  vec, 
+    svbool_t    pred;
+    svuint64_t  vec,
                 accum = svdup_u64(0);
     uint32      i = 0,
-                vec_len = svcntb(),
-                num_vals_vec = svlen_u64(vec),
-                num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
-    uint64 popcnt;
+                num_vals_full_vec,
+			    pre_align,
+				vec_len = svcntb(),
+                num_vals_vec = svlen_u64(vec);
+	uint64      popcnt = 0;
+
+    /* 
+     * For smaller inputs, aligning the buffer degrades performance.
+     * Therefore, we align the buffers only when the input size is sufficiently large.
+     */
+	if (bytes > 4 * vec_len)
+	{
+		pre_align = (const char *) TYPEALIGN_DOWN(sizeof(uint64_t), buf) + sizeof(uint64_t) - buf;
+		pred = svwhilelt_b8(0U, pre_align);
+		popcnt = svaddv(pred, svcnt_z(pred, svld1(pred, (const uint8 *) buf)));
+		buf += pre_align;
+		bytes -= pre_align;
+	}
+
+	pred = svptrue_b64();
+	num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
 
-    /* Process full vectors */
+	/* Process complete vectors */
     for (; i < num_vals_full_vec; i += num_vals_vec)
     {
         vec = svld1(pred, (const uint64 *) buf);
@@ -41,12 +58,12 @@ pg_popcount_sve(const char *buf, int bytes)
         buf += vec_len;
     }
 
-    popcnt = svaddv(pred, accum);
+    popcnt += svaddv(pred, accum);
 
     /* Process the last incomplete vector  */
 	if(i < bytes)
 	{
-		pred = svwhilelt_b8(i * 8, (uint32) bytes);     /* i * 8 bytes are processed in loop */
+		pred = svwhilelt_b8(i * 8, (uint32) bytes);
 		popcnt += svaddv(pred, svcnt_z(pred, svld1(pred, (const uint8 *) buf)));
 	}
 
@@ -60,32 +77,50 @@ pg_popcount_sve(const char *buf, int bytes)
 uint64
 pg_popcount_masked_sve(const char *buf, int bytes, bits8 mask)
 {
-    svbool_t    pred = svptrue_b64();
+	svbool_t	pred;
     svuint8_t   vec8;
     svuint64_t  vec,
                 accum = svdup_u64(0);
     uint32      i = 0,
-                vec_len = svcntb(),
-                num_vals_vec = svlen_u64(vec),
-                num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
-    uint64      popcnt,
-                mask64 = ~UINT64CONST(0) / 0xFF * mask;
+                num_vals_full_vec,
+				pre_align,
+				vec_len = svcntb(),
+                num_vals_vec = svlen_u64(vec);
+	uint64		popcnt = 0,
+				mask64 = ~UINT64CONST(0) / 0xFF * mask;
+
+    /* 
+     * For smaller inputs, aligning the buffer degrades the performance.
+     * Therefore, we align the buffers only when the input size is sufficiently large.
+     */
+	if (bytes > 4 * vec_len)
+	{
+		pre_align = (const char *) TYPEALIGN_DOWN(sizeof(uint64_t), buf) + sizeof(uint64_t) - buf;
+		pred = svwhilelt_b8(0U, pre_align);
+		vec8 = svand_n_u8_m(pred, svld1(pred, (const uint8 *) buf), mask);  /* load and mask */
+		popcnt = svaddv(pred, svcnt_z(pred, vec8));
+		buf += pre_align;
+		bytes -= pre_align;
+	}
+
+	pred = svptrue_b64();
+	num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
 
-	/* Process full vectors */
+	/* Process complete vectors */
     for (; i < num_vals_full_vec; i += num_vals_vec)
     {
-        vec = svand_n_u64_x(pred, svld1(pred, (const uint64 *)buf), mask64);    /* load and mask */
+        vec = svand_n_u64_x(pred, svld1(pred, (const uint64 *) buf), mask64);   /* load and mask */
         accum = svadd_x(pred, accum, svcnt_x(pred, vec));
         buf += vec_len;
     }
 
-    popcnt = svaddv(pred, accum);
+    popcnt += svaddv(pred, accum);
 
 	/* Process the last incomplete vector  */
 	if(i < bytes)
 	{
-		pred = svwhilelt_b8(i * 8, (uint32) bytes);     /* i * 8 bytes are processed in loop */
-		vec8 = svand_n_u8_m(pred, svld1(pred, (const uint8 *)buf), mask);   /* load and mask */
+		pred = svwhilelt_b8(i * 8, (uint32) bytes);
+		vec8 = svand_n_u8_m(pred, svld1(pred, (const uint8 *) buf), mask);  /* load and mask */
 		popcnt += svaddv(pred, svcnt_z(pred, vec8));
 	}
 
-- 
2.34.1

benchmarking-1.pngimage/png; name=benchmarking-1.pngDownload
benchmarking-2.pngimage/png; name=benchmarking-2.pngDownload
#2Kirill Reshke
reshkekirill@gmail.com
In reply to: Devanga.Susmitha@fujitsu.com (#1)
2 attachment(s)
Re: Popcount optimization using SVE for ARM

On Fri, 6 Dec 2024 at 10:54, Devanga.Susmitha@fujitsu.com <
Devanga.Susmitha@fujitsu.com> wrote:

Hello, This email is to discuss the contribution of the speed-up
popcount and popcount mask feature we have developed for the ARM
architecture using SVE intrinsics.
The current method for popcount on ARM relies on compiler intrinsics or C
code, which processes data in a scalar fashion, handling one integer at a
time. By leveraging SVE intrinsics for popcount, the execution can process
multiple integers simultaneously, depending on the vector length, thereby
significantly enhancing the performance of the functionality.
We have designed this feature to ensure compatibility and robustness. It
includes compile-time and runtime checks for SVE compatibility with both
the compiler and hardware. If either check fails, the code falls back to
the existing scalar implementation, ensuring fail-safe operation.
Additionally, we leveraged the existing infrastructure to select between
different popcount implementations, avoiding additional complexity.

*Algorithm Overview:*
1. For larger inputs, align the buffers to avoid double loads. For smaller
inputs alignment is not necessary and might even degrade the performance.
2. Process the aligned buffer chunk by chunk till the last incomplete
chunk.
3. Process the last incomplete chunk.
*Our setup:*
Machine: AWS EC2 c7g.8xlarge - 32vcpu, 64gb RAM
OS : Ubuntu 22.04.5 LTS
GCC: 11.4

*Benchmark and Result:*
We have used John Naylor's popcount-test-module [0] for benchmarking and
observed a speed-up of more than 3x for larger buffers. Even for smaller
inputs of size 8 and 32 bytes there aren't any performance degradations
observed.

We would like to contribute our above work so that it can be available for
the community to utilize. To do so, we are following the procedure
mentioned in Submitting a Patch - PostgreSQL wiki
<https://wiki.postgresql.org/wiki/Submitting_a_Patch&gt;. *Please find the
attachments for the patch and performance results.*
Please let us know if you have any queries or suggestions.

Thanks & Regards,
Susmitha Devanga.

Hi! Is this patch somehow related to [0]/messages/by-id/010101936e4aaa70-b474ab9e-b9ce-474d-a3ba-a3dc223d295c-000000@us-west-2.amazonses.com ?

[0]: /messages/by-id/010101936e4aaa70-b474ab9e-b9ce-474d-a3ba-a3dc223d295c-000000@us-west-2.amazonses.com
/messages/by-id/010101936e4aaa70-b474ab9e-b9ce-474d-a3ba-a3dc223d295c-000000@us-west-2.amazonses.com

--
Best regards,
Kirill Reshke

Attachments:

image.pngimage/png; name=image.pngDownload
�PNG


IHDR��_�\sRGB��� IDATx����^�Y��?c�Z��6@
��I����(�rQS���b�bG�6+X�F��@�I����`�����B.'7K�P�AD	6"��@����EH�m;=��;m�m��k8[�k?�N�>�����}�{�{?o�[�������s�����w]�v���k�_P���u�:@�P�]�}����(�f�C�P���u�:@��u�'�@� @��L�#�@� �;�wXp@� ��@�7��0� @w ����� @�'��o|a  @��@��a� @�O��"�@@� �!�����3@� 4���E��� @�C�g� @h<|��!@� p��� @� �x��B� @���A� @����/"� @���;,8� @�@�	 �_D@� �;�wXp@� ��@�7���1paa������������������nnn.�s���]�}�K��;w�������[����Y��?�w��7;;�]W\�>|��?�moo�����{��ew����*���w���e�����u��c�������1H�*��/�C��(+�A�$L3	\�z5+�������X�677�C=��?EmR,�������� @�@��K�����D���'��X\\�����s[[[Q?����K����4H������p6������6D
s���WiH����J�Jw��R����ncc��d+�K�K��e���T�DR+���,������#�<Rk�����1��0M��>���\�F�z ���<�T�!;55�	��������7>����^|?��P����>zp�W����������I���*��>q�DOX�w*�Q�����-+����^*��g����z�������3���	��.Z�y�������f��������,�5B�r�@��Q��*��cC^�x��l�L���?�b�Q�Y��!*������/�,|�?
����!%��������Sy�o�o�CQ^���^���m����&��	��.�^��p��~�k�F�`x��aX���	?j�Qs���1�db��fbJt�u-�zWm�|��f��"��)��4V/����������&��-vn��l��k�[S,V�y/eD~S8cG1�Q��2�����|��2Ka,n��#@���=)�#��/�����F�~���=<c�M��P6����T:&� ���k��$�D���>�k����^:�{~~>v��Q���O����'�����C���/|�%�g�d_�M��M���L���3���5)]
Q�M���]��/�w?�>��vc����(���uAc���Y�v�������T}��O�6��������c�m��m�)���f��N�:�/��T�<{S�����}�>+S���U���)��g��7���3Une�k��)W�.�!0j�Qs��,j��]��u��T��4������r���p��_���
��
���td��;���%���5qc/7w��]���4t-,7����+ai)}��Wv����!�+�������8�o�O�O���GQ���m�l���0�>�"�|&~8��O�8�a4h����,�����+O&�%R���/g�"��W�|���_WC���A���I���,6���~��l����)YJ�(|��w?��?�����W��A�M��y��-������wHS��]�C`���&<��S��5�a��LM��5���2��/x�]�����S���6<�Me�R6��7���&����Xz�`���o/)�R��Q�_������T���^2i��c�F�>Z��^l�|���Q�>��S��K�H���=�T�(���_g��+L��1V]�y1���0/���_�z�����g�9Z=�L��r�|��{�O]��nX7��R����������py�}[eSX���u-���5���U���X]��-c0��E���-d�����l�r��r�@�uPS��
j�����8|p��=���GQ��p&p����F��`6�RG{0�yL��s��$���$~���~uWT1�~��XV&L�X�������_��ooh��oaS���o��q���-���S���]�r�-//�^�<�x�������l����
�nG�_��c������k�}��o{X���W��f����m����"?)�EaS��x���p�!l�|{buF�Sa�J7��������k��������O^�����6�'�8��8m��/z0[��7j�������
��>x����ys��Z_��z��8,�������}���w�L�N��l�yZf[�^�]�R,����1��Me��-~��^������������x�-#K#V��N^�M������=�<��#�rH��i��������S��_��Ea��5����R�������%v������a�M��O�������}��6�����ZX�7��K`D��5|~��{�cA_ �[������;�]��p�d�Q
�[Zy~M(����~��s���4����C_M�����c��TVF�����1;�,�$,+��T^S�~XK?���'<W�������g[���~�����q�[F�Xc���L�ky-��M{����-����WVVB?v>6�3���{��5���`N��(l*\��~������@>����(���y{��+�?�>?�Fk��Z?����s��~����5>��I&Y���7|�����!���'O|��ai�a[$~�oL������'��[IA���g��~��S�VF�D��p��������6�����iq������n�������N(.���,��6�!/�2ed����:/���k���_��2�-�y�[]���M1�������~�A����}���M����Se������J>���{����O��4,/����0��Wz)��|�6Z�X[f������s?-�n��_^'G@�j�ukl��$�;��[xk|�w�_]��ACl�5���*_1�bq��
�?��F�w�����k<���R���@�I�=�!f<��1�V�5�s�������SyM��,�X>}�s�[Y��:�3L�a������l_?U�k����������k�r�'m?�~���+s^&�V��,6e���4�����=�j'Ry)
�
g����}�������">J/�w�7�A�t{��+�)�~^}~~yX�X[f�R����O�ogt^U���9D?���o���$�;������������5��'O����C@�
��4X����/2?��|�~��l_2�F8���0\o�fK�������a�gG��b�R�eo*�)w������"7���WJXe�3�U�7[	'fg?eTu�I;��(�p)�2y����2aI��K�7!GK�L������M���cG�>K�/��(�6�wE���co{���������ha�������>�u�7��K`�[��z�Y�&c��� ����j�����@��i�A�]7�t�F?f��O�����Z8����/���M)��C�f?n=8�ohChc�+�TX����O=};ci+|,~?\�����o�Gy����_+*��a��'��t�x�����]+�G��Es����4�f�Y�-U���
�M�w��9L�(l*�wx��SJH�����<�i���:]�;��T>,n-�������ci��x��9��8	 ��Ii��VQ�c
T�7��G���O��FV�6yI=�L��L����zP�_-}��O�������������x��f�D��<���V�zQ:>�T9X���Ed[*}�3�E��-�Qi��F,y��X9��Z����G��8j���X:���M{���&-1y���X���L���l,��n>�!�SiZz�����E����[��T��(v��K��8��h�=J/v���q�u�*{�8���fXn��XX��Wvy�,}�'�8�� m���j�,Y�a�=D�a�x�C\��~��o��i(�������{+��i���[���9~��d��%l�GQ��?��{���>p�N�m/:y��g��a^x���
:���)����0��?1P�*���m��~�A�-���/'�e�dcLx[d�^F���tb~lC���T���m���?�S�{�lC�,L�V?9�������Q���{��L����b�[�.X���3�i��8���d����h�k���8(�p8b����t}�1��+^�*7��j�tm�r����: ���\c~C�o�2�o���vx��M
���u���+�����s��!9����!p���0h�okpSq�{���H��jL����x�L��#G�<�^	��2����[q�q21;|;�^Xd�_>�cq���So��=6���;���`�"V'T�|�q
����h�s?����c���E���-��b���S-��X&�X�E������)��*;�C*�/��Y��q
�T=-����X��=���y������X�f����mS,����3�������zL}�J+f�������l���A��w��te�}cu^��^�u�r��lR�ym�^y������E?.�#H�opR
��5`j��I�aY�����U����c
�5������I������F�������w���R
����*^{!01ak	��Si��=�R~B;Ri�XH\��vf_��T��Cb(U�~O��[�1eC^�����c����Qy��cV�����a�e�$�[�[Ki�y�7��V����y�C�|L,�������u����D������(M����KX/B�R�������]���blab�a��a�
��������~����������e�Z�����r�x9B��:(� @�-��;NF	i\��2O�
��@�w���7 ��������d���@�Ox�=@h�q	�q��,�X�� ����r$� ����J�%���h|��c!@���%���n���!�D�&�
6A� @ A��3 @��H��R�&@� $ �`p� @�@	 ��X*�@� �|�� @h"|K� @� � ��O��� @M$��ob�` @��	08C� @���M,l� @�@�>g@� 4�����M�8���o���9�g���w�������nmm������9s�����`|��aw��y���]��q���qLMM�*����,���L��

� ��@�w���&�D�H�������c���7������(k���������3��������JFy����8�#�<���$^.@�%�����E@`|���]&lnn:�K �7~eee����^���^�[�n�������>��n�>�3ny6�����T>�����X���s� �|��
�@�H��_��b
�:�)�[���7o�/|�����e�����{�1?��������{_�������?y���x��	�J@����'@�Ne��i�4�[$fS��z��x1Q�o����9r�il{8D����������
��O�s@]"���Ri�W��@Y�'F/_���P�"��&h�a(�����cL�jX�D��OY�]v---�����4?���o��d������Q���{nv�l���k���a/8�w����/"�u@q�8\!�1�l^�tL*��K4J��P6�,q��8q�'���J����������P�J���c����|&���P���WX�.��
�?]3�-��0���Ym�X��q��D��=�!5~C�'�����U@`|a��)ahbY�5�\����ae��mL�*�Dq���DmJ���k��x��+]����+�X^��������H�.��[�=u�T)!o���������#tO��; �IOM�G�}1��B#j=����e�Dh(������r��[^^�%t��)MK/&R�|Z�w����kJL�q�q[�&����&�������{�r���)�dD\� ����4��/>M\���P71�'0M�*>_�Z�� NA�p)�m�7�"�8M��������6�����C��H��$Z��6�
��X^�������1d�r�p!@ N��+ 0F���E��Kd�vb5�
E?+~��8���N�	���HH�M1����L����~>,^�{��G�_�Ay�����s�y�����P�[��{W�;%�S�ax~C��N��<�4��/`��O3�� ^q(][��^t�1���,�6�=��oaCA��?%�M��v���a��G���5�X^|&�����\,���s@�M��	.���	����Ef����~�)q,?�X)\�1�z����4�.	b�B�s�e���}W��h��>E�����/���m���������X~X�!@ N��+ 0F��
E_�Y&�}����N	x?��?��SI�m�6/M[�F�]L���!.��1�n��������h�D�B�������;�'�-\x� b���7 �r��8����/`��&�}���������=���4S���>}:4%�;/=d����������kL�+�e���o�R��n�� ��~'~A
 �����-#�S�T3��L��L	������x��]������~����_Q^���kc)?�G�^���
}�G�Hx[�����`y0[��1�!@�Mxj �8y��X��h��,1Ai�$l�a-�h
{��Zjb�]W���v�������5fs,m�|*���c���"�_��
�1[��*m�����_���O_�~���@�?��x����/`S�/e���0���H�H��G�MF��T8�W�������������[[[=ML+^�������#���'�}fs��Xx	p��o���[���e����b�� ��x�qb�|�X�x8� �5���8��@��4&��d�����V�)Z�]�J���L8�����K�|����41mB������Y6�/�el���a^���R���v��XJ?�N�V����/���2���
@`�	 �'�t� 0V6N=�����Z�~�/��7m��Bh2|�K� �V���~�|,C�"��7����=�1&�A�@�>��+��"��H��������I���(L�K�P�	@�c�+p��K��0�^i��UKV���'m�w8._o�#5@`�	 �'�|� �7o�t'N��!��;�	�e&{6 C�����;T"� �!�6Y� @h?|���@� t��C�MV!@��O��2$� @"���Pa�U@� ��@���� @�@� �;T�d� @����/Cr@� �!�6Y� @h?|���@� t��C�MV!@��O��2$� @"���Pa�U@� ��@���� @�@� �;T�d� @����/Cr@� �!�6Y� @h?|���@� t��C�MV!@��O��2$� @"���Pa�U@� ��@���� @�@� �;T�d� @����/Cr@� �!�6Y� @h?|���@� t��C�MV!@��O�V��u�<x��������%����>�����}�������?�� @�@�oQ^XX��y(�M�K�/--�.db~��}nkk��2"
@� � ��sW��l�X IDAT^u{��u����z��k+++=h���n�������=7N @� P��x_������}��������BI��Q`�@� �m��&��=���P�����W�e�O�s@� �:tZ�kx�/�S>6T&;LaY!p��`�u�:@�P&��Sa��]v��8i�6t���s��!�i0�>�H]�P���u��:����]��������1B!@��M���V��qyy����U[.ruu59Y�^�	��.H�� @��N
x����L������g�n��� 4�@'|�P�!4�gc��g���R��u�o�n��,?�^��1�������r�_~�^#H
� ������������j���kkk^HN�$�}���������������w���cu�BZ� @�v�����0$�%��?����F��c��z��@� �I%�������|i������%������z��x�&�Y� @��oN������I��/�������\���@� �I$@�$������'�/%��?�c��c��P
d� ��@�w��(��,�[J����w�����-��B� ����Y�s�^�������������1[K�� @`4���J�# ����X����| @���@�OZ�Nx~�Dd�hi���V��?����
A� @$���`��9����-�������.�/�M��?@��`������?��94m��I����q���[���n>���7���| @�'����|�p��R����
�������W+K�� @�F���Q��v�V�A o����~��>b�+ @����=��i��E7;;�����}������gw��������������s;���9�}��[��OF��|���8�h�� �;������uV�/..f�����nyy9����gn'O���������R����������y�1|�������O���^j��X@v<������u��;x��;z��.dnff�moog��^���������v������.�n�Y��z�%��@� ����?������������K'|���������a/��TX��K@c�5l&�M��i�
@�@�	l��~���|V��P-��������9w��Mw���!4���nee�W"j#7^��������4��&��|��'���~��vc @`���r��3�����3>��6�F�|�������;J�+�����_����X����HZB����K�x5`| @]!�a�Z�����~g��JW55���~�\�|9[q�/�~�����+_��x+����\����'�X���+�Go���J�#u�:@�$���������|�B~�#?����;������	�1�k���-��������z���������X����s�O����t���q������P����o=�B�����������o|�=���,���G��!��n�����w��&��D���Y��J_EAG�4��o��s��g������K [^�����>�����4�@'��{��a���m����jX�����B�@�w�\+��kkA�C�@�	h��k�;�|������o���Y���tR�+���i�m�����X��?vb���([:+�k���g���(gr@��$�_>��\��E$����@g������nvv6����!��~�����������S�XZH��s_In�$��O��@
#��5,��w�?�������N�>8�������I
�w����@m'�9\�h�����U�)|�I��r������5q_����L�� ��	|w�R�3�D�?}���"��@��?�7��z.rwm���&��M� �qy��I���J�O�	 ��_��`4��[��7|����G�*QB��'��0EU��by���65��%�]c' ���r����{1a �N�Jj��>����i2+��"�����$7# ��v�z<��t�� �\E�L�zF��{.��^D����0�N���z3������S��AZ��M@���-����:��L.���-9��@�z�Z~�
�*Nt� ���V��]������6�3���]���b��)�pj�!��+Nt� ��D����������������HA�����=5aH��][�cML� �����}w'�r���>%��)�n�7�������vmU/3�+M4�:L@U�R��Fc�����J���^����d�����v��4�@� ���M����d9��
e���'����7~_R������$D,� �y�&H�k'�5;S�����x�����u{����SSS�����@mnn�����MOO����]�p�&����CjTc�W�����U�\C���:���'z�h"����m������ ?~��[^^���������'{����[����N�}ii�]�p!����s[[[=�@@��1o
.>QG @ E@��MTehf�^��;)�M�=ztW�/,,�������]����w�[YY��]__w���w���]���^{�����XFD|���� %���P'�&��Lq]g;)�S�}��m777�L��o_�+l�=/��"�����x�\�������@���/{o���g���?N�O
`������7o�+W�8
��P�m/��gM�����o����O�������@`�	|g����"���*?| #�yo"]Y5T����=Nv-6TFCk��V���E�������f��Y�}�{���d��;	eF&��<)�F��+����>6������[���<#�MF�	�
O�n�e'����._���m�!4���q�n������v�������w�>?O=!
�8�i�FQ�U�;{�}���?���u�>��\� �{�]��	x�~h�kU=�~��O�q����x����2'G�BZAf��?�|h&�����"�I���]+� ]�p�s��%'�2��hq,K@�������@������Z�=��#w���*e�W���Q'��������F�=�V,#i$8�C@>�5�Zi� L�����)��y�\�����$	s���6r����Xg#�~��c$�%�S������ ��P;����m���W�����7�X>V��Z�Q;���K�P�x�������������;{����677��W�G_�����]�p�@Yy
������$�@�Y$���LJ��@gM���m��B�����#���m������h�:����_|<�;���
��V��t��%(���a5| 0,�Vx��b��6�T����l��p��a�u���Tc�][�{��� @�������)w
���V>��@��M8�^v��8p`Go<�9VQ�c\�������b�*�� PL��s_qZ2%���k	I>��@�����=����s������qA�Vo����
����k��Ab�Jx�s���]�^{��}���	4^���-�h��*1����A�..�a3�^���$H�@>�Q����Z�Zq�����:8��xe��|��o�%�����!!0~��z������6u�����k�Y~������	�B���������C����=(�}�dV����p24����K��h�1>� P/��y�x��]��LT��\��Z+|W�|w���v�[���f�[7�9 P?-&���yCf^{���
#��@�w���x���d��~��6d!����.�V
���
4����m�����N��#�YF����KP�N��G�����D�@������
gT�������}r�{5/�m���c���G}t����s����!4��v�K�x�\���
,4L�ZK@K��MTU�<+���x'���x��I�H��@�	l����������\;�; P�?z����&�H�DUv���6qC�5�vb&���@�	d;�}�����:@���Dy�D��cm���b/�����7���/_��>��-�!:SSS����;0�Z�6��?�R�?j"������[���pMA2����0������=1�=i���8��z�i��7v}766�.�!/1.�����������������z~���������@���������@�'�E��Wj���u����9r�~���~O����~W����333;&���%�����b$�.��'o�V�$�b� ��@Y����������������@�����{�V�
M��X
���������!1�����#�#���P��������k,<�a�Y�4^�����q���/���������+_�-����0���I;��@]'���ZE&o��V����zMi~�[#���0j����$�5L����nuu�]�~�'��Z��
��5�����F���������w��68_�&����/��'�K��N��������N�NV^F�:`��]v2�D��S"z���v]�x1��(�`�t���5;�P����{��~84��V�x �p��o��[����7LM�76p�P��:����O}0�6�7^�+��>"�GRv��
��7Z�onnf��h���V���Y/{(�}?���h\���Jx��+��ZM+���X���!�	|w�R��]�����j��� P
��x�<���'\c�O�8�	�p��"��"B\'�W������Y�,���  a�7�]�| �F���W�\���nk��G
q������MX��E�M���y�Ov�+q<C���O�][%�����B 	@�vZ��������,���/��@��(��W_��K��:u*�r`�4i��Mb��[����:
;���p��
�4�� �I!���g��eL�������v���Io����p�s��m?s������-#�e%��?���C�[C@���m�����%�B	Z�Q�?�����|$s�qn�N
���C`H��8�/��N=8d
� 0.������6nbm������~4\��#���6uJ=����A9^����	�j�6����z�+91p	�$��og�a5&��k���?0YBu���j�Rr��3&��U$�S3�V	��7o�d�����N���I>�4^���^D$h-�����V�R�<L2�Vx[�1�hj�]~���A����_:�|j�M~�@�)4�Oc�S�]��D���v��@�����%{�������?J��
�����S�����b����$vB`�	H�k�<��Uh��3�����!�xo;���)��g��04�+�n���6]�B�������%��N�1���	�6���.{�c/�@ ��51�4���k��!�L�����y��ZW;���@�4^��@���G�V6������][5f� �:|w�Rn{$Q�&tu�i4�@+����{������gY���5	�&��z��vm��5| ��@�*Y���*��]&�xoc�m����Uh�\��{���W�:�| TM@Ca�&�f���{�����/��
��+W���,//g��B������&���6|�������"�8������IN�������x�@��(���������z�����a:a�������vkkk�7~C`��v���2Mc���+r2�Z	uH��W���k-k��
��W�f�]�|ii)��������ol�D��]�p!��iA���Jh���������S%���#���4�=����6n��&�H�o���������7n���766v�,��6����q���=�1w���M�VVVz�lgX���!�d�	��k{��G�\C���W���	�c wm���f����dh��7m=��n�\bG�[�h,��_XXp&���m����:GL"m��z�j#vm��R'O���&�~��{�� ���0Q�Z��6q'�E�������7'�H,�5�5�&�ck�K����0q��u�@����~:���6|�z�sL�0 P��:6�I��
a��r,��F
�q����1�&�c=�Z��WI��8	h�Lj�'=�Y)b��C�hMT�X�p���[c��������@��U6����_��%��8^s0h��������g�O>DY^kGYr�QN��+_^�m+$����]�r�6�6cb��(^����NF�H��Toz(�e�	�Q�1�y���<{�����b�W-{(�@��R��*���m}�/>�^�~W��xi����������������uR�k���'�Uf��=��o8&�<���:Gt�������������� ���s������	��nhB+@`0��&��%"C�,#�7v���Ujvm��L"���^*���%$�@�h��������"��m�$���n���w}-
[����B����N�=�H��M>�k�N^�����k�����| ��	�F�k�����������������V_$l������f+�(bm,�t������T_��L@K����o=���u���u�������7y��
�����{g���@+�	n���~����{��D�����]l�i���(C�;�O�7|��n6|*?h	�����^�����@�Z��6V��wT��	x���wJ��A��6lI<��@���W����@�h^K��	y����[�

S&�@��-�hCZb���LT����@�kkb��l���=��b>�I@��5$.�m�k�&>��� �G���!�y�}K����=��v���e���^�}���o�w7U[V���N�������&����������au7h��B�?��s�\�h6�������i���jS�.G��������C���u��0E��ONQ�����y���4�@��	w���oZ3��&�@+��k������R��Z���'�r���"�Io�,�����z���u�
��������N=��g%�����_ou>1m$��F���&�'n>�>�����N@�<o�����evY��hH<���&�I��
o�m�V4QU�j�@�#�
��j;���e$�W�H��������V��o�A���\
eK��r�\^��K(TI���V��X?v��{��Gw}{�1���]%��j �^�TO�6|�Z�| ����jZ2%�u���3>�@34^��FN�k3�a Pm
���]�����"M<���K)�.wm���t����x��u\�H
�Im�$�u�cO��%���^>��\��%^����:B��K��^����(7k�x�b�<e���_���������Vl,k�LL�l���o_��
%����?_�u���,?�P�1h���8��z�I`��qc�wccc��T�'N���-��pKKKnyyy�w�t2�@��l���A������1���
�Q�<UgLH�A�^�����z��� ��\�z5�O;��'];����
�G�D���h�V�����'O�&��&��'�_{��Q�A��@/�m	�*W��y��[]]��0������a��
*Q@�y�����~h�����Lj��l��}w;	|>�@;4^���
M��_\\t���n~~������;{�l;J+!�by�ch�'
��	h(�v8��ue�^��4B�@��Z#�G9a�H�k������������|��~�R�B�x��ax�3�����{������\����������'���w'������^��Or�p�PF\��Ea����N����z�G�
M���`�ti���Z������#"�:�/X�k IDAT|~�Il�z�q������4�?������H.W.��?���/v���/��//r�p�Pj������4Z�onnf��h�J����<o~��^*4.ee%��o@`��Sj�;�k'I>�:��P8Q�s��C���B�[O������+�����	G�������n�)�����g:B�lB`7���t�p�*;����H��^��\�re����z�����=0���O���8�N30rB``��)�k���k��h	�R�������]gm��0fC B��>bseN����3g�d��k��~�c�5��&�����H3����e�� 0��
�rvme-�	,�gI�[��jU��N=����EV
�����xw�3�.��<Cd}}k�}��g������?�-���?u����!b$h�:-�M���qt�����]vv������<�|��@\�@��z_}��>c�;�G ������%��?�.w�����m����ag| �/�g����_����������aw�����_����H�I�kkk��j����Us�������m��5�}����2�!&�u�:L\N%�U��?��u����v���^�z�e�����dH�]��{?��;����^y>�%�8o��mbj�X�[�K@b%0�[�������	_7
��8������k������k��6���.��IO�f~��wE�{�y������i����/�S�Ne<�������f@`'m���\��2�o'/~5��kg~?Y����	��z�_>�^�y���������z�C�n�5.���4R��)Cm&�hBqc��r�M�ks�}2hl�&�j��&]k(��-��b��V�����,B���K�S����O����~�)%���?����/�a*"�(o�eN�<YQ���������s
/`R_�jD����s�s�E�s}%��M�M��;�z{���3�����_��$)���V����������O��{�'~��X�w������,|� L���	*L��I�����>ec���&�r$�������`H�k�V(��]R�k��z��@�'p���N�a4�����/���X�����5������Ir^3|��I���z�m8B(����O��CS�����d�[�?�	�����:V�o&����Uc�&�j�z�%�����J��	���/��_U�	b�@#�m�d'���u r�O@=�Z;%�����EX��Z�(���g����c��-�z2w�,hhLn�~g��j��������6S���U����s�b��?�_�g�<�+�d�%�)�����~���]*8�
�#���z��I!��-�L�7���cx���?�	���\�Y��
�n�a7~�^~���������0����x���G�a�������l}{+�U��I���G�������~��?�	r���W���_��
����P&�%�e#��h����'r7n�
���FN��D������	����H����������6Xy���!Z�I_�s}��A6W�dX�s�K�z��g	~>�'�����3>�
�Q�����T��;���VZmF��h���w��5�U�r4�UvI��V>� �H�*4��X�I#��4���f�qk�����h�~	]������3������p��
�s�j����Nfv��Q��[��J(��5JH*�����V�U������"�����$7�@
�I�@
k`���C\��}�����
�>O�K��za�z�O=���
�X������Z�QCQ$��k�!*eD��~����h��^�����8��w���Z�k�W��O��onn���g~�ozz�����j#�A�����(�0ru�NvL�����
�a$}�}>�1�V�j#�����i�[&����(H0�r�F_���������%��.���o�'N��yL���R�KKK�����g�l��Ez��������H0b'o[�\�vo�r��
��^�$�5\j�������� �-�X�&H�(O�k9H�?W/>��}T��vV�_�z5�{��u���s������/..:�YYY�U�������'N �������G�k=��|l�s�;!�k�[������k(����-}�JM}>�	R]�5j)H�U���JSi��@��7o�t����� W�������q��wfj���� �,�iO�x��O�&9�����{����G�^j�aZ���^d�+����FJ����f��m�-��^�:6A
{������������
�9z���=;_XXp���������vm��m������Z[\B��k���:sZy���h��k�����z���oe���UoUUi��x�\�������|k�9�B���V�*4��h
���&Y�G:�2��L���9H�a�����5DI�3�e\5�{��r�um��5��S���U�y�@�u@�7@�[!p���2���K���~�M���������??��x�oJ�/�����$�z�������/)�������w�u�>��������[���C���������3���w�|����;J��o�����2���'�s���2��;{z��OB�!�i'�,}���_�������c��to��7#[�������=������'rO<�$���x�����(�q��NF�H��,���c��\c��W������j���_�W����*��pu��e'�
��
)o�����O��'H�����~S���2����fB��x���*X�%�������.���EB/*z���v�\��|N��?�����@&�S��T�����@/t��
u���(t�qG�GV�IMVM�����s'�E��{?�����i6?K@��M��)�����v
x����2/���d�[�����7ix�l�M����~;4������\�V����o�O=3�-��!8| ���!4*@��lN5�����]Q���|���4�p,i-�7�D��v�w�:����\�k�����_�������'���um���P�+�V��.�+/=?����D����~��[^^vg����u?~�x����;k?��6r�}��>����s�m�_-���`
7�b��,�d�+'~����������Y�o,|���c��z���&���@�	��E�n]�5���_p���G�Uoz����tZ�k)�={������onnf���_����������3%�w��%������M4�p�_�z��7j��3�!��4)�-�A{�mxK���Vo����r�um����?���j��D���������J!OJ>������J�������~�L�������|�C@;��	�;�v��7w����-z��[�\k���@[	�&Hu-�h��JOm����.@�w��[�wM2*%��?�X/�[Cs��z������v��b���/%���9�����r�u4^��M�~�#���+J�z��
�H_#l����5�\t���E~F}�v���S&���w�zPw�7^��R^=��_{�n�H��M��Y�!���e;�9J�g����Xy>�@9�r���Z"2{�$��|��0[i��Uo��n�x�CBbZ%��Q>���m=M���-c����k�Q�GmHL���wfK46�b,�@>-���X�]�*-e��A�X[��[����2�l�
�2�e(��1�C������}��27	�~�F��v=���!1a���m���J���^�?��:j�t-������x���������o)v��z�5�DX+jIK������k��w���uJ(]z���� �|���Z-F�V	]	w=����d����)���T��a�&��B��=�eo?��yMz|��I����q��Y��w����l��1P���g~rW�������E�4�ek�$��>��FU�m��^(�s���s@`����K�L����S2	|����!9L<�K\����=b\!���P��6�v���s���Z
W�T��U������N���jd���-,4Ln[f�����e�X?m�!���j��7����v�VB��$��rm_��v������?�?��t��	��7��`��������[�Y�V}h��g�1U�m��M��=��Z_�&al��'��������[!K���i]����@�w�����^9���"���?}��mr���O�K���ms���	��e)n/�&�������X������JW���z�+�D����VxL���n	hM���Z�[}�=�s��M_G^8�@%Bn������5�M��R��i��oz�+�ZD��@�7�h0��_��&��*��('��#HLLIl�&W�=\��5�M��<�n�V��:����������=���������mk=�n@���A�S�a���V�P2���M�l�:�k�M��[EM|����M|��[�_2�����P�>��=?E�_��| �n@�����������g����s�
Bs�%�.��-�A,��6n����f�����P��K�q��O����L��!�Xr��A��0�@;	 ��M���nii�-//��nll��2&��	*����fc����V��h�	+���wG�Q��G��%��VF:6���&���s���i;S;����5�������9��M_P~W�^u���s[[[>��$vl,��an��	���U�]l���;b������6���!N&6�2��	"�&L�7�����T�/[�E�d;O��u@�9�e!?33����|r(K�&-���UB��:H�����@6��v��E��}��������M6!i���l�jA~^�un{���,�X�N� 0��%����������|o����;{�lAH.C��em9@�c]��w&�K�65]��7%�U����#��zg����5A^X�?�VWW����{b����������|i;^�F;c�����	�<�������/��� �������K�v�ZXX�ll��k0��|����'�y����w���!������G~��}���p���1G%��/������m_q��O�����:@���]"��~��Tg'�P����{������5��o���:`��'�D�/�2����?1B����tM|�({L|�(;M|���>��> �u��:0�P�D`e�����s�R����5@�~�.�{��r)Q�1�J����f<6EZ�!(�� @`P�r��S8�����nnn��ir�q	�B@�;������R���@�	 ��Gc�m�m�d+��k<.C`B�#��$�� 0!����3g������2�ZV����!�L
v����$�&�~2��\@5`G� � @�"� @��C����@� @�"� @��C����@� @�"� @��C����@� @�"� @��C����@� @�"� @��C����@� @�"� @��C����@� @�"rnss�>|����'�NOO����!�@� �j	 �x��u�<x�I�/--�.db~��}nkk� 4�!@� P-|���E�w�^�������������N�<�s�� @u@��P�}�����s333n{{��3����	 @�FD����=zt�����0�]Xp� @1|`���2ZS���B�x����u�:@�LR���_2>w���1M`@<
�����u�:@�RF!��|��	x��D��@� 0�����)����@� �J �0��d .C� �J_���|g#�P\� @�������l��={�8}%����J�� @��%����'�A� @`��#�K�� @���Z��@� ��@��/�C� @�Z�jy @�FJ?R�D@� �j	 ���Il� @)�H�9 @��%����'�A� @`��#�K�� @���Z��@� ��@��/�C� @�Z�jy[M.^��fgg��={�����;�|M��L�uljj��={vW�/_��>���)���������'Oz�wN������.�������n����6���:�;w��G�,�~���^T�VD_H������b��?~�������������-���g)M��-//;}�������Y���_ZZ�����Q'������o�'Ndu&%���3���.�Tx-MF����6��8766v���~���;"�Ge���$��,,,�������KR������G{n�@`�n�r��%��Y�K���}[3�L����7��T��������g~�4j�v��p��}������\ E���W����s�b��}##��	��w	t3}{(�2�
.����nR#�yn�����(?6�!�Oe�Y���u6��u���y(�c�/��e�f,n��'���!1�L�t��b����l
�M:=��\��
�����:f���r������]|*���Yx��1����[�-�a��U4w��W���MK�c����$��hB�?	G�=6��&sHfB	X�p�c�O�.�����|�BTx��#�,V�h=��&	���H	�~�g�n&������#��h�������f������F��<V�lM,�y+5���#��@��3�E#����~�t��.o��_�~�����p����DR��FDo����$���z�Ru�z�R=X�$F���k��8b�,/,��O��<y�[^�8cu��q���z��8By���!�E�W�b�O�=���a\�(g�H ���X�4������T���M���~tl�y�ry��L!�	%`��c=�a��Z�^�	ED�F@ �m+�gya�:;���ERu��Xj�}Q8���+�~��8$����B���q|�B����'�,�;D@����mrb+6X���Nzp�:u*�����1��C�jI���r���l��5��1�e��bI�x���M�o�����Y�n�|4���J�#&��2���������9D?����
[��0�
���,
I��wX��'��zVTg�4��B@��za���ZV�_���W?m�jXw����F��#�z��@� ��@��-C� @�z���# @�FF?2�D@� ��	 ��gJ�� @���1 @��'����)1B� @`d�#CK�� @���z��@� ��@��-C� @�z���# @�FF?2�D@� ��	 ��gJ�� @���1 @��'����)1B� @`d�#CK�� @���z��@� ��@��-C]%��������VVV*Gp��-w��a�g�w���^�)������<:���Cc$��#|��&��(���B�rp��Y�����r�y���������C��_�j
��Ob��Q�
|B���:��@ #0*��^����yW�)��������?����;���FQ7n��M���FI?J��
t��(�@�P?y���)��:����X__w���wM{Q�p�ut��sEN�!�Q�Z0��&C�r�p]?V]����E�!0>���'e@`B	�`T��SOe���t:==�kb��
'��H4��1����jk���nnn�&�*������y��8�������of~�������������
IDAT��(.M�][[3/Nc��n����m�s�������'�8�<�����������T�,�x�������>�2y)�r��� @�@�	@`X&5�����nyy�]�p!���4��H�_�~��9s&���\]]u)w����^�W��%�%<}m`ggg��c�����w!0?�N����|�r&�%�M��^B���+Y��@_�d�AYw���1.*��~K�����+	z�Il�)��2,-m��b�1*�A���Dr��m���8��41����)L��z�M`[���~�^�97v������+��}cc������]x������baR�v��c�����X��������w����!�~��_@�{��+sr��@J��b����A����d=��}���������L�1�����������]3{|qlnel�x�h|lK�����1����m
YX:�r���U&/eX��s@ $�������R�1�����'}1)Sc~MP��?�W�+
��������x�����h�|,�
����D�:Q�6,���x|��q�.ci�<6�3H^�X��s@ $�������b�OQ�`�{|S~M$�b=��xc���R�
{�S�|wM����|*�������y?������_��2�&�e�0y���7����E���&��@
$���<%k��)qi�"�~M8�n�7�����FD)�J�5y3����X>��~����i�T�����c?�����C!�c����,�A�I@�;��)kr
�D������1�r��j��1�kc��Z��#G�VL�x��zJ8�+n
u�h��1���UN�h�%�i���������cy1�n��J�������KY�f{��f� �~�C���z	�K�}����*4�)�]�� �$ ����59�j"`��j`5f���K����2I��HT��z~�����a������
:��b{{�G�H�����?�]�hx��
x���m��D{�p�oy(	1���p'?i��|?e�R�����B���!@������M�<@�"��oTq` ���
s�
��m�@@��@��[��4Y��=���@�I�M*
l� ���'����f	C�@�G��@� ��@�7�d�� @�� @� �T���vA� @ B�� @��J����.@� D �#Pp� @�@S	 ��Z2�@� �|
N� @h*|SK� @� !���@�	� @M%��oj�` @�"�(8A� @���M-�� @�@�>'@� 4���%�]� @�@�G��@� ��@�7�d�� @�� @� �T���vA� @ B�� @��J����.@� D �#Pp� @�@S	 ��Z2�@� �|
N� @h*|SK� @� !���@�	� @M%��oj�` @�"�(8A� @���M-�� @�@�>'@� 4���%�]� @�@�G��@� ��@�7�d�� @�� @� �T���vA� @ B�� @��J����.@� D �#Pp��'p��m777���;W�������=:`h�A���W�YnX=Y��U�������{�s������}_;�����35��3�[�n����'O��P����g������}����V���H�����������sW�^�=}�����uw������g�fz?��������w��K����������W�4��F�{ul�I=�
N �O�����	�����b�o=z���o��I�W����Z�fT�x��{�����#�TncU����DUeC�lw;�����\����_q[���E�
���~V��W�gO��	 �}�C ��z�M��'D�����C����=��w��z�Co/yCcb~$���%XMl�����PM�������p���������PMb�%������{u��B��$���d���~	l_=��&�S����x���?��3��Pt�����m�K�lW��<����������?��o����y�6��	��O*Nr���W�F TN_9R"l"
my����7�Oi!��T�����s������������[��g����vW�\������������������kB^��z��lh�]��{(�e`�%���s�O�T����K������������<���\��#;N�>���'N$����tG��]W8��?� �����2���t?���)��^����*��������v��2��O�����nvv�WSSS;����4����������$����'V�aUE���}����~������|s������Xz�?��g������*�]�Wc<q������#\�l}��	w�u	xKOd���z�=������(�B�D����7o�t%�����1��_�� �c��~��Z�bb��'�p�����@"A6�>~�z�.;%�$���?���x���5�C��0������WbP/*�K\�xL���X���'�j���������%������h���Q[�g{��_�������Ry����������������ey����z[�>�4�XTG������ml�������0_�fxO����l������{��+��~X��o����J�����h`�!����Z(�_(d�!e����4c�������?*���]��(�E���l��:�q��lR/�}�x����h~�c��}��?:�SC	x_\�u�3����^~������e��^�>���V'MX�-yG��XM�b�����
b�����!��wR���z���7�W����CCi�{�Z�n�����0H	x���w���C�Wq���8�4}�+#L�%
��x����l�[���O?�cXQ����:�G�.�]E:J���b�|�X=3�8���u}���,L����ba�0�FX����u���-\���y�4�~5[c���b�(>�1��t�V&���ar����X>|;�_�����Z�-]�h#|K
��&���������E|?�}���8�x�[�I��I=tB�����������j��--in�2�p������m
�����nQ`vh���3g������W�q�����?�s���a����M��?a�5�=��_'�0���{^\&�OQz��~K#����'6vL�Q�k���s��5�����s/�g?��cq�����xR�g���qs�&@�7�4��������{��s#/���:L�R��a���������/���=\C�V�/�C{�[���U�(����X~����S������,�]��'�V����gX���~�~x����a����?������-|���������:jyQ����_����f��5w�U#��%��/Ro�X/�	����c?������������I��:��wp�OaM��������G�,M�
��=�[=�n����
��/&L�'%
B��](�d����!������+��s�����\?��=��7��r������?��w��9�*o*�m�NR�$�2q�u9u�(��I�a<y�DQ�-s�����Q�������:���<�X��r��48��� �����[H �����;����]��T�����y�2�;Z9��
��T�����_/���������������O� QaK<�X��BRB��������[b�HYX;�q�����^(����(I��~��������~[�����N�p��k��Q��+�����UQ�O�e��eu^ek��O�(=��2�D�z[t������rQ��+�w,��6���hq�����m2m�<�q�q���O�s�!�����3@`����{��hJ��M��/Q�#��.�7��&>��	p����
�:	 ���MZ�@��z������������3�fc���RtW�����[=��*Tx��i��s���0�C����> ��hA8D���JF���>�^�*Ew�q��$J�{5�G�F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F`��7��`@�P���u�:��:p���>���jvq�P���u�:@�Pv��������J�Z�IEND�B`�
image.pngimage/png; name=image.pngDownload
�PNG


IHDR@�r/sRGB���gAMA���a	pHYs�&�?hTIDATx^����Uw}���g|{o�������Z��]��]�^���Zm]�|e��J�hh�N��$%A��4�%�D�:Q��$�B1F�	�\RL�A$������	
��t_^�{���|�>����?���>��}�9�����/?�����o	�F��h4�Fkn{����(D���h4�F��h�js�@38���C8�8���C8�8���C8�8���C8�8���C8�8��}566�,]�4Y�lY299��z��s��������h�j��Km������fgg��+WF������#������k��<9{�l�eg��$�����_
��M�����]����tr��w&SSS�+��i�o��d��5���M����<����W�.4�����u�/S������������C��0�E���$��z��8l������}�o����+v�/_��:u*}u>�����X��+V���G�


e��,E������������U\;v,9~�x�Wy��������]0�t3����<��!\0�p�{>7o���������.��
���p���
��U�\�����*�}a�����b������{�=������Ia��n�S���V��n��������~k��D��~��i�k������h�M�A���v���v���~����D��G���R�pP���a�b1�7V��s�=�x���f<>[1��u�u��/�B����Q+r�����V�~������'+��L�Ax��cY�lL�w.�<������t�b"�/lfE�/���Hqd��^a�6�a��p9uI�U��i���,�����}�o(��n��oED�z���|V�B@��MC8���+�+�}������'�8��`��u�w�K����WQ����**P�����~�p������eK�0�u���_��q�k���w�"V�X���������8;����8�O�Q�i[��e	Y�S�b���\8]�z�w����
[�y���iW@��:�,\�t
A�}�|.����-��]�/Y����n�S�O���/6�B�X��|ol�f�{_�����VdXc��^�+�/��EXd�[��o���l�
����/��ao��i�H1W��������j��i�i�!oY�������p�=���m������;����k�P��
?����=�������"���~�e��?+l�|�
����_[������w��p9����P��w�����o����F�;�y��?w�lJ/Ef�g;YNCY��]/f��*F��~.��|�?M�{�o�������2���5l�����+�/��,kj+�X�����b�>g��6��B$�l����B�~S�"�F������Rdl�g����$�������?^��o���a�c��_��V�6d�1���>8��z�V��2����*�������6Eu3��}F�=o�:a�~�������G�,���\l�f���lJ/Ef��YNC�����������-64]zY�������+�������t���u\7����t�Vb�J9�uc+�p�h����_��+�v+n}���iMq��"�6.�(x�������?����~���������N
}�����>/Y���8�l����;�9��z���B(��MO�n�Z�q'��;y���w���dbb��w��?�7�<��<�g�~��w�\����Rd��l��4&o���ew���N�a�����v�)Y���a����t��p��e��6��������u������
=t��IW��o�����N����W�����hdm��d
w��&+����q��q-2��_���f��BmT������M������@:�wl�d��~(2������}Y�~��h'k����l��"���������E�K��~����m7�%k������/��I���_9���
 {-\!�^��x��YT������!��8j��.V�d�6�b�\/��H�5��n8���?:7��o�N���q�n��t���u:���OM�;<]�WE���y�>�s���?�l	�E�7�n����l��n�H�e���e��������7�����t���/o��t��p������V���c
�>\��J��O^a[�}�Z��a��
�,Y�"
��Y�o�8��O����-��7����NBg�v�X�(/2n���w�������^�0�M���g�-��	�.���z��"�CL/��J������c]�f!�'�l�c+�p�o�u��l��I�c�l��u�o��*P�l4���uZ��={��NZA�������0��+��v�~	Y� o�YD�i����Y{�}E��Nt:�
�C=�R,����	�����5��l�v�u7�&���^���i���%������,�b+(x��i���b�/^�
d�$�!����`Z?����]�fy�66N����a������������_EB'�"kS��u���X�;�6��9l��;1/v�(�v�(O���5�z��y��v�,2�f
K���_B����{���"�6������^~o/�-��>�ll���t��p�����]�`�Ll�oL��?keh��}+@b���RnW���#��B6E�����F�~S�o�*@���6f�8��S�����n���a3Y�n7��L�A�����M#�������u:�d)2m�(2e��E>�%���v��b8���"���r?���������5��,y�-���B �+������Vrj�
���=�&kEj+jQ� ���Oy���x�o(:�px�m4��g���
����?k��������3�0�e�i��i�o+2m���y���������SD8������w�$k����6����O_�f�v�����M�]/�uN�m�c�����e���������[Nc�����e�_�}��7k���v:��}V��]7�����o��V|�_9�6�����������}�NE���>r����J�}��V�j���$��vKK�&V`��h����M�)Y
����SV'6�>o��������:�p����W���O�����~�c6��+���^�w��Q�+�����zC���{:yZl�Am���sy�O�e3kX����"��r�����C����.���:���.���^��M�N�j�I^�f��B8@W��m����
W�~�{�g����0Rm������o��~����k�����h����6@v��~�
.}�������d��~G�!W�o��S�����>�?vaj?6���9�b���y�_������kY�7K�y'6ol��q���Z8�g�
�������o����w��c�3��y36nl�g/�f�zC�e�%���z/��b�.�!�3:Ze���jy�������������V�Z�u�{������n�q����@��1�����O�7��������.R\������D+�N���Sc�3�FGw09|�p�e�"
u��&R���a� /��;�8�
f������q�
Y���yNQ?�a���E��~���u����2�pPt���y�]������v��;kY������o�C�Z�o���{�-�z_�m�����a�wj���������u��{[�4��HL�0��e���{�i��i��
u�{M7���^�q�LW�_4HX�/���^�!� �y4�@�
B8��p@��!p��p�!p��p�!p��p�!�y���KFFF��K�F��e��M�6%SSS�'�)��;v$��������k��<9{�l�e6���5k��c��U�������~�������p��~��kW���s��������_�7==��X�":>�


%�N�J?�j��}m���y�����p�p�FGG�W/���q{����"LNN��,�C�U�����MV�\97�t����+�����YM!���h�l��e���4��#�y����EnV7�������C=�l��=}ep����*����{w���Q�v��s���������^D8�|�8�H8�2���}����9V�/_�<��!�����k	���l��}���=������ ��=p��+p��5��6O���{���=:�&���o���=����]���k�����t�=�zO�����@���E�A�n���� @>�����}�^WS�lE����9f���s���;����\{�������}��������x��{-,����g� W������f�;v��Z��m'Ey^��%/P ��+��N+���m���N����XA���3����N+�����7,������H6��n��������
���m�
���-z�?,�o!@>���.�w+R���~`�]+V��y^���s���dbb���v��/�c����������5�P����=�(�5
Y�e�w�d���#�y~a���!�
����~�l��d��
YG@�@�:](+���^�����$)$����!fa	��p^�p�>�����&��������K8��3��AVao��uw�qG�����`�SP��q���,,����E
[�K8��?��Z�A_�]8����>�E���EZ'�Pl<����;9���:C8��+u�����������=~���i�~�����E�
w��o�����{�8o���O�?����{��(.�.I:�����~�S���o,2�!�W��I�S����Q��B?���p� ���6d����� 9O^��.����oO_i�H8(2��N�k,��E�7�{��#�y���"�V������Q�B6+d��}��sOG{����v��~��	=��G��>o��G��6�j�� @>���m8+Hu�lX��=�
��>y���]p,�gcM�{��"�@�a
������G�w9r$�	�"����z�aw�4$@>���K8�g��TS��/�c�����t������k�����k���j�-j��5O~�p��pXc�Wq�X�4��N���V^���*�������������N��9p�@����=�@���7,��|��S���w_�+��;���"�h80��~�Q+���\�pX0�������Z�9!��#@��u��~|~��2?�����p5b���]�+u	b�#(=�#@��{��N+�����,���]@�"@���jo�=!Y��N�n����A�s����'O&[�nm�hX��p��4��^�#p��p�!p��p�!p��p�!p��p�!p��p�!p��y���K�.]������d���MV�\��^�:9{�l�j����$k��u�QJ����w/*�]?���pp���d���s�u�p066������{��I���������'�N�r�H����/��
�rE��e����w'+V�h�u?<<</�����>99�������~����:��pp���������E�j�=�p��###-�������3}���:PDc���]8��{tt����;�����;;��Hw'N��[�8��"��.�������g�����A?�E8@����{O�%����'h4�F��h�j�b�'D�Ax:����:�Vd��F��h4�\mP����H8�^x�H�NLL�5����O?]���"sA2����p���������"��)�������#�H��;\Q�i�&������.����V��{ Y����/��YG�������q���CE���T��EE��g���\D8
�����W&�}}c���
���oK�={4}��@g�N�o\�<��O���.I~���iW�F8�P0Px��K�O��-���g���s2Y���������=M�:��C�=s����d��'~9�)$��p�/�a��j"9�<6�
�
�?��]���.=��!�T5���]�
!�kO�}{�����OU��������C�D����_������S�D8r�y�.w��#;&������D����X���[�
j_��f���<�~��@�������G�mL�`pt�5����2���@�����k:�����7��~������"m�.D
���0=�z
~5�`�U���!h^(����O�.��p�x��m-����K�w��p����k[�A�����pd�����u�����?�vQ/� ��C�[��������:"N���%T�)�y@]x�]�\W� ���?l	jux�Y���77����]��[O� �����_>tg�n=�@����#�&=�G8Mz*��px��Td��4���>��i�S�}�������,]�4O_�������k]7j�V�Jv����{�����n�����������t��~�3M{*�������s���[���X88t��{OE��={����ddd���{�n����l�r�JW����{����/_��:u�u#E��g���&>���p`E��e�\��b���p��� �z���������������grr2�"I���[�Y��~��i�S�}�
'O�L>���UT���X�=66����3g
�"A����_@1M|*�������w�?}�������)@�i>4��;q�D����E��z*��g��]����N���������.���������A?���p`��F��h4Z�O���-��?o�4��b�A��
����F��F��h�z�#����p�c7F�]�6(��A�p���b�:�TW����#��.���Tw
�oP���"�qA2���z*r���Vp��
���B�n?��~���S�O�}C�ns4:9r�=�l������i��{����}�������m�{/l���+��=��Hw����=�W��6G������5a��r��Dy���<33��s{]E����{�W��~��bOE��My*����h�S�}�4Z���g�+}�Yh,��<��u����`0s�;�w��p����W������1}�yh$����p�F:���[�A���#����04���>����KZ�A���#�q~}xK0h�S�}�4OE�#�q�}WK8h�S�}�4��~��>�G8@��T�l�4
OE�F8@c�T�|�4OE�G8@c�T�|�4OE�G8@#�T��h������S��#��x*r1��OE.�p������Pk<�8�j��"G8@��T������/Y�ti2>>��2���L�v�Z�����P255��{A�nd���t<��F��s��%[�n�+�c�`vv6Y�r�+������������/ON�:U�Y�~4OE�Lc���C�\ X�lY�{��d���p�s�N����d�J�LOO���H7���h:��������'O&�v��*�udadd$Y�zur��������9s�m7z}�����T<�3�
��p`�������\466�N�9q�D�nt��B��S�@��T���kb���������/��_�6O�h4�F�U����i	�y���n����O8 ��y�F��h4�����������1�m���X�	�VP<�;���� �^x*rw�e��i:���Zx*rw�9�LLL$;v�pE��M������O��Xp�=l�H7���h*����F���oOG�[xZ����+��}�SSS���F�_M�S����p������#�Vx*r��
����j��c�-�@GP����;�l	��PYOE���P��}*��K�wQ���S�{G8@-�����	(�p���|*��i(����������Dr����4Y����s:S�p0==��_�>���t:t(Y�t�k��-Kv���^@sE����x�.�*}8K����������s���������v�_�z5G��"�O�����l�r����:�p�W�;��|�����S�o4OE��J���H����W^I8h���]�x*rwJ�4�������������4�o�?�S�����@v���.>^�b���?�H��a����[�OE�^����l��5Y�fM�}����G
ta2�4OE���� �����%�T��PI�?~�%�T���>���$k���{�Y���)@3=���-���"������P��q����;�hiw�y'w+h��[��x*roJ�9��)`x*�`T"��K9��]-���"����@���x������Q�p��n��Vwj��c�Z�����.�<ypJ�$d�V�S������V�l�2�V��"N��A�V�o��dxxx�H���P������^>�A�MMM��^P��g����"N%��b��h�������iSr������#��-[�k�o���}��=���{]����T��g����"V����@_���NI�W��w������&�F��499��r�Z�+V��(����_u�S����@���nE�v�Z��	�wVwz���3m�����@�T��*u8��g���X��4�7><���ko�1vtC�B����m��0��_u�S����@{�<�LLLd����tO�.HV@�0�`���
���<:��/�����A?��6O�h4�F�������`��G����A��������u�V��8p`�����F��h��iG6��%���h�uo�b�'�.�=t����E�<�������0tQ�6�~8��E���@��T��A8��w�@���%�K���g����"/�A�����[�.|����4��+��JV��g����"/�A�[�������V�Z5�nEF�cP�n��p���J���H7��~TOE^8�	'O�\���`��T��S�p`�����q*
@��T��S�p`w����w�y��<
���"/�R��������<rWK0xv�]����J����P'o��%<�������R��=�cO@��T��W�p�[v�z��������9x*��+u8���bw)�������"/�R���HO%����w+�'����J�L<yqP:<yq�.�������$9y�d�Bdk\�P?<yq�*���"c.Hh���xJd��}��m���� �y�OE�xY�.�t���S�����T���0��D8@i���|b����4�J#�T����K���P��"����A�T8�3x�@=�T��W�p����X�b�s
�����k������=�[�M��B(}88t��
_����+���=IYHM�@����������Q�p`OL���l-�p 
�W��!h��T����I��B(u8���uGv��pJ,�iF�.��\�,:��\�2666w����#�9�6=9j<y��>(�����Y�,[�����������KT�.:�OE^��;m���k�{���T���c������8*SLt�b��]���;�nhh�%��F��/�2��x*ryr�)M*�����LLL�����������{]��_,]��g����"�K��A��<l�,�u1t��;w�������`a!�H7��~��s�6�����xJ��D
7nL�����v��w�!h�w�]�m�1|����3g�v����/�*���a8��������h�>z��B�=c!����-U����'�v����@��0���`��S�O%�A�}t������[�);v*��M�����;��
��n�p��~���4�F��h�h���dK08����vK����_�k�7|1tfG�t��]��c�����F��h4Zw���w����_Y��6�
�����@���z���>v�XK;~�x�e����Q��#+�9��8��\N���b������{������(3��\N�V�j�B��(����;��D��������_e�S����� ���`��4���?�'�.�P�"�H?�PF<��*�nEFa[�~��iL�c�m����	���T�OMM��^P��g����"�W���������&��\^��C�����kA�V������U�p`���3��y���S�����@w:x���8�����[wT�/��%<����],�R�����.o	�}ss�.���"�_i�A�S�b������"�_i�A���c�����"�_i�G���"WCi����"WCi���V4>>��������@8���T�j `�x*ru�.l��)z�qV��d�r����Q�p�]i^�V���S���t���{�I�;V�?~<����"WK����OE����"WK��������������x*r��&�^x*r�0u|*������{����6�������=�%?{�H�n�0u{*��O>��b���Y�������������Y	���=Y�@A�%��i�f�P2�����������$���F���&T�}W��"�T�?~�_8��d��/�k
	Kn}�����&��.�Td�*���_q���;�[���/��6���C�2��*����?M�����?�
!�k���u����~�����=��-�$/��%�@����s�����~�����S�u[�����-���g�7
�~��/uA���S�W�\��^�:9{�l��333���k��K��644�LMM��^P��g�R�S��@��}�3.��'�DC������7����S�D8�����+��p`�A��={��{���}�����S�
w#���B�=Ya��OE�[�Z�����nc�]��d�m�M?U]���:�,[�,n	;w�t�MNN��$���t�b��d||��]��g�Z���c���V���N����������(�����o�S�W'-������?�;w.i	��g��i��^�g�C]��<�����?�����k����p�b�u.���k����p��������0�)>��O��T�'N��F���_-�����i����#��oxs4�����]���
����Y� v:�}�
��n�p��~���4�F��hE��{>��lxw�������n��zK4�u�;�<�����
���pa����;}�p@��h4����p�����M���F�.b�[�6(��A <��d�N+M���3-�@�JOE�3
b�@��T�& d�^x�H�NLL�5�������zq?�����T�5��
�(Y'7� ���������� ��L@S�b��-��*OE�����`����v�MB8��BC�w�
�����F��/����M_wIK8��S���s_4��hMC8�P,����+����
�������t#�����=��%T���*��=��k_|�+iW�B8@ON���%�����f���:��y�I����;e=�����K�j&�:�[��j����=7&�zUK8(�S�O=*���Ko{o�Us�]c0}���@p,���m��]���_�M�|��E������o:�
��������S�mK>�������L�����7�3
+���C������nz�;��
rOA�a��~{2y����vm�����0�T9�Z�X0h���� ��3�������kW=�3�M���n�H4��d��P���TGb����k��<����S�����D��nc���=iW0��g�$��w��d��w��Z<���Z4��=�"��3����|d�D4XS�X����=�XGG8@[zn��?��.<v�{��@�_���9����O.<]G���3]�l��:��Qw���~k��G�mL�`pt�5����2�������r���A8@��?�������(����/t�`�XOG��
���X0�3x�Y{�D�5���!�|�m��'���q���x0���S��������L0(�p�y~�����8
�����=��L��~�S�x�qq�������+
�t������]�C���_1�:�~�!��v���f�9=�v]#_�t4�6�<��s��^_����t�Q�|���d=��#4�
�����k
e���+���s_�:E8h(�"�S�b�@M��T��������o����+t�p�@��X�B��.J���e3����O?^s��iW���atR��4
��x}��=���-��]��������g�af�`�����p�E�/8{hw�u�����O�;x�Y�j���?LN��4
�fnyG���O����=��?t�����iW��@��j�����\�����i��3t����@%��d�������!�=��r��3�����)��pP3:p�����@�]_������I2�5�~<8��68��]�6Y�t�k�V�Jv����{����������������t#��h��__ *��r����p����C��V�g��dbb"q���}�j����d����@Ww{��u�Y�|yr������t#��h�v����+K}}��:�t��p����s.�^�:9{��}sc����3Y�lY299������d��������H7��~��x�������?(;=�,����0�G8�`{�c�����\8("��9S(h��_�t$@w�5I����-I��~�[�ba:�"FGG�..R���>'N�h��N�g�@���]Cj��@� �]�����3�~�p������#:��/�����A?��Mw�]�b�@Mw+*�����m���7���~����o�~a^�p`��F��h�r��_Y
�~���D?W�������W�>yd�����W�[�	m������T�~��l���h4�V�����%G>���@���k��<�%��2����h0��U�L���}#���6(��A]c�u�Vww���
�yq?�����Gs�/8~�������]���o���t�S{����9��o�Q�~�~����0��'r�/xv�e�oN��]���{�
j�������t��,�"|��m�ha;~����
�����F��/P}g�+���w]��f���/���_|�+iWX,��vW���?%yff����
�������t#���&���>����3�U��=�8�!g<��%���}W4�U�����_1��h0��������%R��D�*�z���q�� �D��t�Q��/=�,���z����`�������@`M��j��~�#	<��|�H��T�X P�)F:���t-A,��]���!,]T���c�@M%���*���b�@w+�]�PN��E����v��P�V����Wz���s��",��^_`���X0P���Qn��R�����.>d���Ow���m#���nN��s_r�w�g>�������D��G��Xwi4����������]��N
z��k[���������j ��&���`���o�?�v]n
*�_r��&kv%�?�=��?�L>�kM���^���rM�IT�`����!�=���i���S��x��.|��g��G�4�)$,���s�@�8�!g�B8	8y���@���/���i��`w!�y�pK0������y������
"�@�������%x��m���Gks}���	��������X0���5�$o����O�J]����#1;��U-�Y��WV����?�H6~ks�����\f�
���/���~���7����O��@T�?��%�����|`�3���9����C��ozgK(P��������Tc]'�u;Rk���H4X�����+�p�!�J��
K\0�����{�������k�s�@w*��Ge���u�!������� ���'�DC���������!�kt��.t�owE���h	��z�g���y�{��b���*����K7����������t�1
����y�;��j"T���b]d�;��(�N���X0���?�-y�S�N��p���Cw,Y���-�;m��@��������s��(�����o�RT]��h�>�?9��xr��u��
���&��w�2wg�A���G�����\}�u�B`+�{i��������t����o�H�%�}}�+�_�B�	��p��/�&�?~"9��]���oH�}W��/��}���#;&������K�_�]����Q���]����Xq�iS��p�����f"����Bt}��s��o)�������P���/nv���Agz���oq��h/}�����t#�v���:
	��4�9H�U�3�>�k�iG��NC:����������������k����=c��mE�6]��������\�,�P��T����Z
�~4]�����7�[���6���tz��k�$��5/O>�����W�Yr��_�|o�+;z��=c����f5�K����u)P�������VQ�=�����g���v���������B88<:��*�������0���������g����:���

@��/tj���B��?_����;�����cP�M��b�������0�-�*�_r��&kv�{���w&���&���7��t>�N��)=�����NA��pz�B[��������s����_}(���������1�M�E��Y�D�Y��"T����k]0�����{��B��[�-��i�Yw&�E��8�����?s����w����{��������vC��w%y��O&�6\-�����x�

�� �Su��V��>{�+�o�9��}�G��n~�+��6���n+{�0(������I��]�,]������djj*}�����W���?J��}����]���w$_�����O7}�:Th�M�N��v��W�����&���%-���v����������^5�������;�t�vt��_��t ��oM����]k����#�``�O��&����v[Q�1��D8�����d���.���'��w�
��/ON�������!�T��i�����&O��sw'����(��5����?N�7�����W�7�l���_�R��?�a�����]�������W�v�~����������U�������I�����_�|V������s���+�u��_�����?��~��G��^��7E?�b��(�A���3Y�lY299���$�����+������jY�
i4q����n�/�
�U�|������n4�5�/���������
�-���B^��������m��<_v�PV0hw��g���|E�����x>0Z{��?I�v�����
�����&/��+���2��~o�ex������u����d��(3�A��;w.IV�^��={���Y�WA�
�?�+��>�8�L���N%�o������I������cb�t��n�����8�jO���]��nW$?��?��aS!�m�Q����?W��P��|��0
���2�?������}��p���P����S�FGG�W.���E:��eW�����n����?��O5�Mf5��Y����"YM�56����_�����)Kv*�������s�;]���U��E���={��A�X8��>�������������&7����F��lU[/����6�~q����+�"`�������Bg���GG�~�C�p+p
��pP1l�d����t+�&nH��8�L�xc����\$�=��������ko����/��k���dr�����{�ns�����������coN�h�����������h�j�b�'T�B�Vd�� �eyc���nH�X@4�hb��Er�Z���_w�_�����y�����y���At�A��.�A��*�n$��+��������oH�w������&7��Y����[
����������7�E���~�u'O��N<.����pPAu��iS7�Mn�u��������]�;���S��"��'�~m�u}p�=P��
� P���5uC���fZ7k�����6���d�g.K���_=:��M��v��"�����5�q��O��}���r�{��.V(����pPQ333.,]��5������ji�������n�pg�I^ua���'Y����b���e������l(3�J���&7��Y���d���p�!p��p�!p��p�!pXT�N�z����f����l��1�����;v���������'�L�?���G�u���D��������{�u��	��9�|���w�v��[����I4����'\��o_�j�=��c���[����YSh�n�6�p�E��l��5���K]����Q<=�������d��U����~7�u/"T(j�mz���;MSm@m��6o�\�i���m��]vYr�UW�~����2���[�����xRQl�2����F��m������n�6�u�u�
��������>n5
�<��[O�,8Z�ho�B�6.*�Q�3�`4�V �i��V6������o��L5l���L�@E���
G���yZ����8��kZ���1��!��D������5��*�5��e����X����4�|���|A�H�4Mw�mZ�C��k�(Z�5��]�>�	Xp*�T<�{�t�R[�i�i�WM+u��IXk�Z��V4i���P��u���")��T���TW��
O7�2���:������i:k�r�i}�>����u�������XP�l��-�u�n���"�F��bB����F{f�F
������5i���-<J`���]{��]��4���F�(���^g�P��C�S�N��N�M�p>�=�u�����bJ�_���������5�!���\0j^C��YaP������{U���p���Rh�+��9k������xl/�����:m45\a�\��&��ER+U(i��uMo����t�V��i�^�BI��1����6�����5���j����}����P�^Q��m��"���,j�UHU�_��)Dvz�Q�+$�B�[�jm�4O�uZ�+ k����B]���I�n���SOXpZiX��C��-x�Yu:�&����l��Q7uvMK?�t��`�P��e�"�`��"
X,��DU�w��L�MgkaH�
nU�;F���p��Y�*
���5�
tt�?��u�����A���s�n�y_GJ�p����EUiyU@�����P�vWug������xi�5M���m������p�E����@h�+������E� �����P����H�I+���
x�n�=��45>4��(I��qP�����pZe�N��F�/<�B����?*���U���1dGV��!�Sf���Q��C�j|izWm��e[����5�k��8�p��;
�>��}Y��anw4[��Z����*�������4���X��y����_>��q8�n�E�K��Z�W	��NEp��\��
-lU�a�
��V ��S�m|����*l8�lo��!��!�}��+U<YE�ORuk����QC�y���;"�����Pv*�����^Ec����8�U������MS���y;|�>��*��i
C����q�V�q$nM�"�����j���G��e5V�����j��N�O[��*���!8D8����G��O�VJU[�hE���6�*t����6V �L�~���~�����5�X��P�0����W�M?
���]!�q�������h~�b96�V�!�����P%6�9�p���I��'v���_����l���-�6��:@�L��<��\�������V�jx5.���j}lG�4�j=^O�m�^��-��N���O;Y>m�/uB8���=
Z8��Y�Q��A
T@����J$k#a����@4��b
i�b+P�E��n������;�U �@�V`�@�x�r0�~{+�b���A�����W�x��4�����5Ok���`{W5��e���a��k�k�W��Tw���k��Wm�m~�O
���,�^�h���e���<����C����m�m��>��p��;<����5���Y�i}V�` �����B��L�!�
m�p�=0�Hj�b
�+#�r�j0���#�p�^T��i�������0�"�]@�t��ja�QE*"l~����]���-��������i.��a�|l��?|��~���F���K��.P����k���q��VX6�b��m���W6�Y��Y�����_�6|V@�N�*�p[�������������g�z_�n�@@�
��[����
U�V0j��\#uS�` v�Y���
m��-���6�~������Uda�/������.l��.�(��
[�5�6>4�����^
��t�0���~XP �k

u�U�izj85�cTTW5��������{
��mV4��U����[��y\�3'�^�v�vhZk<�1��#m���6�Z����X!]�
�Q�nc�@+Y����T�"A'4~4�'u��[��oD���<^�S�b4�*T�k�e]�i��
*
{ ��� �cl�l����A�;��:�^���N�eU���f-�Vi�|o{���B���X����lP�uy�p,m\���Q���U�c������/���
�����A�L���m�p��PSn�'��cm4�aU�a�b�ph������_6N|zM���l�������^S@��-�kz����m�j�5?g��V V=�j���^���_�F���8.�\�u�@Uh�����X7
Cz/\/��X`��hE��S*�r��(��p u��(�}N����@V������5,�9�*����7�X��56�4<a!��WE��	���k}�/����O�~v�a��k�r�k^	�Rh>��X{�5Mm���'�������y�U����V�Q!���p��8;],��v��*$����.�*�mXd�Wu�`����V&Z�j�V0U��`��Z��`$71�6���V1�`�o�����N5P!l����DU���(��h8c!���*Ma0�%�����H��>_�bQ�;<�g��g]�B�?��jl=�����������t6zM���U���j���Vu��Z��e����� mh�<e������"�(����Z���]U��b7�:����4U�V\W1�M�p��o����b{��U�i�a�q�4��[�n5����ige�y\�[Wi���KW�U�` ��������k;����W��~�v����vh<�<�y�j�r�aP����2����q-#U?Z�	�0`��j��BR+��nDE
�	�M���7[���f��^�tU��^������FYD�����8�K0����h���Z&T8��*����;k�0W5���[���?��e��>���N��pi����p>W��O4�U�s�O#-�>MW�n���� 'jU�nw�p�0�L�
J�������Wu#*.I���
���_0k��W`T��I����\�����!��U��[vE;3|����c�e�������d������n�����`�@���:��g{_����p��X�*���BKI:'7v���e��)%>M����0���6�U/���a@����UvMK �yG;4��>_�������pO��}`%�*����=���5��A���}E��2���m�����BS��*0�1���4F��B9��@�	7.U�B��!�i����g����p�8��)�8hW�|����R�y�B��c�6�j

Y��,k�e����5�Z�cA�N�"�&���ja�
i���vj����Zi�c�m�:-��@_��DM+�:�u	����j���@V����6���j���Y���5�~pP!U����i�U�i�Uk��\ph����@���m�����(k��<�q;rT%F����q��n4������W�z���*�i�n��<�n5��!Xq�aP��c��0�e�'MA8���h�S�`�S!amPU4W�xPQ�i�_L�������k
���S��S1��������|����Z+ �Ye�=�a��BP�T�������0���5,
@V ��!��*��4�Z�5Ly����:��'�z.��4=�@��D��k#bM�e�[���YH� V(�xR����U����=M3�
����R�T�` Y�;|zO�|U)�j9��jG�
@M��j|Uu��)�k8�S#/ ��@���4��h�i��e�G0��p�g��T��D��FDED��Qef{��S�DJu�bI�g��B�]�=�*$���4#��U
��O�C���y]�^U*5]E��H@���p�)����`����@
�vXh����M�� @C�{T}:����@�����;�@`�A�����S�iX5|�X8P7UB>MW��kZ@��l�H, h���u�4��5S�F8���*�bQd������].N�]jtTA�D�����.*�i`�N�xV��v���=�hf, hY��*�0�p+�,[(��iY�����r�# ���j�5���T�#�QA��*�"�NT4���o
s���e���BH�_-v�O�WE�X���_�S�l>������n�}V�LEs����r�p+�����A6����`�a�i�����Y6����Vk��yG4N�#(�F8��B�.P�s0�Ox�@��
��M�*�U��oMjY4�*,�l��?��-xm�y��4�V��~��`
�5�:�b���h:W����C�(
��E�A���E���N-�q�l��<�'������PQ�bR�.�����^�0h8�#A!��LU����
k84]U0g�<�U=b �w���a���O�Q7~0�*���������/k��������V��<����o������������E;���bJ��mh5}���*�4�U
�a��]F�WiZ����>�U�ifw"�i�4���g�����l�4=5�Z��a�'MX���p�����mDULT�n&v�%+���
)M

v~����*���n�i��_
��S�H���?�����e5�vz�u���a������B��g�������^H��<*4�x!..�*���~��s�U\�w����1��b�N�TP��s�U�iS���X8���9�*;����B�;j�@�y\��s�&<'�Jz9�K�N��";JP��W��p�3:�T�i���.�W��gG�4Lz]aA����I�����s���h��
l�p7E��q���y,=�O�����*T��� +���!�)E:=L��)��i���G�P���OR�=�*����*Qq��H@P��ktZ����y�e�i0Mc}���@T�������)���A�#<�;�j�.�����[��P���z��k��7/ ���F���k/�@�L�=<���W�@�5v}�^W�j0�nM����^��Y�����uTH�j��t$t�p@�i���H�a�{b�F{�U���vA��U��D*�m�;|�#A�[�W5���@,�Z@����l\��*�:V&�Pzv���EB�T�
y*���#��ru[�` ��VM��z�N������GV@P�X�k*�X��b���~T��B1
9���,��4���p*+
:�P�s�5<��)3f��#U��g�FMG<�b?�U��p��T��T�V7Y����y�v�@�H�N��JudD���������?�9�?��<]�������#V$��*����jt�',�5�;4��u�a�#
:��E8�f�5!h/�����B����;�N��R��l;������P�T���&�s���]-�a`e�p� R0��X�8Xp:%H������r���;R��#�4tm�Q(�u\c�0(
�5!,<�JC�)���p�[����p@0X<�����@0X<���C8�8���C8�8���C8�8���C8�8����;w&��-K&''�W�gvv6Y�vm�t��dtt4}5�uvz���&Y�����~���+9{�l�j�����C��5k��~���+�@8PE���A�::�r���#Y�/�}���#�w�N_)�AL�c������ @M:�����\��:.������NV�XQ��^P�
V��! �u\@8PE��	+F�.��]!��m���Z
���5,�uM���7�F��������PYm��U�����|���������I���K�n�:7,j�vjj*���5z��f;�a���2E~c/�L
�����N�r����s���~��N�w�q	�	PqV����M�6%���{]1������#��;�k����g�.��zM���(U1��v1���p�q��d����;Y7��ms�9p��+h�b:*�<�~�5������(:=��o�i�����������@8��P1��0�cl��_(
{M�^�#a����cE�����W��w'$�~����������/�{Qtz�.��
���p8�K�q	�����?V|*�w}���t{���Sk��,R�[����{����y� 6�����
���Z8^L'�#y���N������DV1�k<�p��~����^z���e��]��������w��A���N~cH��OWR�:g����������p���h7.�p5�U���T:����h8���[��o�
���A�����p���h���Kl\�jB�h�H�q����(�m8���_�Nw1����������0��AV`0Ec/:���5M�}���]t\�j��Q�*bw��;�����v�����~�zwg���4����NYQ��;��5ox�p`{��?:-�������O������o�E'�C�w�3�����~��V�5,E�%�&�h���:�\E���y����
Hu���V���?��d�.:eEa�~��
d��nDE����n���a8��c�/����^t:=D�D�d�&�O3��"�Rd\�e��,�T$X(�J�N�iw4�p�"R(���v�Q�4-X(��!r?�y�n8���C8�8���C8�8���C8�8���C8�8���C8�8���C8�8���C8�8���C8�8���C8�8��s���ddd$��{w�J����%����_@����D8h��O$�}}cr���]{n����N�]8������+�������v����X�"Y�|yr��������x������g�W�9t��@~� MOO'W\qE299��Rm������6���������nN���o��,�@U����.<��O���w\�����i���m8��R�@�;~�x�j�tlod�wO!f����_�c����V&g}��������m�m�MN=_�b��r
T�!� ����Sr��u����&G>|�{�����]^��@{��-[6��ha8�0�wB�m��=
��v��Y�����X����]2��k]{���G��k^�^�t�;���oE��2`9��p���C�]���@��'~9�
=t0���_�n�<rW����%���n�AOU0�*��������_!@�`��/�k��k���_�����-���OU	,�@u��N�9}�����K���w���u� �6��@��:m�}��>������_d�	,]�4J<
~wj�6mr��Z���lC��|��y��i�^����X@�������:b��W/�N����#���k��k�c��?���}�v7�[�n�����L�~�����9�_����*�t����K^}�����w�t� �n�9�L'M���-�$��.���7mB���K�������U��M�N�����~jj*}������/����<���kjY�HL��i�z���u�����E�)P]� p����x�f���o|'�>�����u�t��O��������c�6�a!bF�;�p�<y�=
�����>g����U��v�@��~�o���[bE��4
���?��������~�}�3��������S�k/~�K���K�����8XHW�u]�/�~'���O|<��r{���m���h����qlE�_�i��^�i��h�b�����G���Y���E��P��S�����v��Pl�%|��(�8~��h�i����h0�v����~��fl�^n���p�N/rj@�;�CawEN��g���X�����cb��~��W9�������b�~]���}�{#�``�w�k��Ll��M����^�ez���p�n�-����~���d�����v�����x�S�|@@{�cx���[���5U�}�����L�F-|���^�X��#+h�����Y��5}���-��������u�q�=����7[
��.:�'>V�w�>���h(P�Q��g�i:���������_~��_����}��<[d�i7�����~��V[?�-�[�?�S��@����&3��#Z�i��u��U��,�������j�g;m:���M�F-|���/���ax���F�
p�b(��H���,v�at:��;��
e;]a����7���h!�I�E�_��m�p�g�\���S��m:���M���7~�L�����Q����|[d�)P>�������T����������oO&�6\1W��.&�E��0���m4u�	�A�
p�b(��H��b��E�?�$6�E�������T��+o�d���p�3��[�:W���Cl���!o�����_��������O�����S�p��5,�@u��}8���s�?��7����O��������#,D���tQ�����mH����Y{�t��6��8������#�����(��p#n�NuZ���/6.��Qx�����U;���z���_��W����/�6��t��~\�\�_E��v�����n�-�������~]��Rd\�XN��"����m������R����[��V�*����7���Q���i�m����om@���7��(o��e^c�Ak���nl�n�U���6�a���E�������1����W�� �ah~H���
��G�Ms*�m�n3���-��p	��v�Wty(:��[Fb����l��zi������E8P9*�
���B%h(&Vv���B6�S��*G{����������:�����^{���aa�{������D8PI:�"<���{��=�A5���C8�8���C8�8���C8�8���C8�8���C8�8���C8����F��h4����p����4�F��h4�i�G?��p9��M(5MIEND�B`�
#3Devanga.Susmitha@fujitsu.com
Devanga.Susmitha@fujitsu.com
In reply to: Kirill Reshke (#2)
2 attachment(s)
Re: Popcount optimization using SVE for ARM

Hi Kirill,
This work has been conducted independently and is not connected to /messages/by-id/010101936e4aaa70-b474ab9e-b9ce-474d-a3ba-a3dc223d295c-000000@us-west-2.amazonses.com.

Our patch uses the existing infrastructure, i.e. the "choose_popcount_functions" method, to determine the correct popcount implementation based on the architecture, thereby requiring fewer code changes. The patch also includes implementations for popcount32, popcount64 and popcount masked. We'd be happy to discuss any potential overlaps and collaborate further to ensure the best solution is integrated.
Looking forward to your feedback!

Thanks & regards,
Susmitha Devanga.

________________________________
From: Kirill Reshke <reshkekirill@gmail.com>
Sent: Friday, December 6, 2024 12:52
To: Susmitha, Devanga <Devanga.Susmitha@fujitsu.com>
Cc: pgsql-hackers@postgresql.org <pgsql-hackers@postgresql.org>; Hajela, Ragesh <Ragesh.Hajela@fujitsu.com>; Bhattacharya, Chiranmoy <Chiranmoy.Bhattacharya@fujitsu.com>; M A, Rajat <Rajat.Ma@fujitsu.com>
Subject: Re: Popcount optimization using SVE for ARM

On Fri, 6 Dec 2024 at 10:54, Devanga.Susmitha@fujitsu.com<mailto:Devanga.Susmitha@fujitsu.com> <Devanga.Susmitha@fujitsu.com<mailto:Devanga.Susmitha@fujitsu.com>> wrote:
Hello, This email is to discuss the contribution of the speed-up popcount and popcount mask feature we have developed for the ARM architecture using SVE intrinsics.
The current method for popcount on ARM relies on compiler intrinsics or C code, which processes data in a scalar fashion, handling one integer at a time. By leveraging SVE intrinsics for popcount, the execution can process multiple integers simultaneously, depending on the vector length, thereby significantly enhancing the performance of the functionality.
We have designed this feature to ensure compatibility and robustness. It includes compile-time and runtime checks for SVE compatibility with both the compiler and hardware. If either check fails, the code falls back to the existing scalar implementation, ensuring fail-safe operation. Additionally, we leveraged the existing infrastructure to select between different popcount implementations, avoiding additional complexity.

Algorithm Overview:
1. For larger inputs, align the buffers to avoid double loads. For smaller inputs alignment is not necessary and might even degrade the performance.
2. Process the aligned buffer chunk by chunk till the last incomplete chunk.
3. Process the last incomplete chunk.
Our setup:
Machine: AWS EC2 c7g.8xlarge - 32vcpu, 64gb RAM
OS : Ubuntu 22.04.5 LTS
GCC: 11.4

Benchmark and Result:
We have used John Naylor's popcount-test-module [0]/messages/by-id/010101936e4aaa70-b474ab9e-b9ce-474d-a3ba-a3dc223d295c-000000@us-west-2.amazonses.com for benchmarking and observed a speed-up of more than 3x for larger buffers. Even for smaller inputs of size 8 and 32 bytes there aren't any performance degradations observed.

[cid:ii_1939ad8bcdacb971f161] [cid:ii_1939ad8bcdacb971f162]
We would like to contribute our above work so that it can be available for the community to utilize. To do so, we are following the procedure mentioned in Submitting a Patch - PostgreSQL wiki<https://wiki.postgresql.org/wiki/Submitting_a_Patch&gt;. Please find the attachments for the patch and performance results.
Please let us know if you have any queries or suggestions.

Thanks & Regards,
Susmitha Devanga.
Hi! Is this patch somehow related to [0]/messages/by-id/010101936e4aaa70-b474ab9e-b9ce-474d-a3ba-a3dc223d295c-000000@us-west-2.amazonses.com ?

[0]: /messages/by-id/010101936e4aaa70-b474ab9e-b9ce-474d-a3ba-a3dc223d295c-000000@us-west-2.amazonses.com

--
Best regards,
Kirill Reshke

Attachments:

image.pngimage/png; name=image.pngDownload
�PNG


IHDR��_�\sRGB��� IDATx����^�Y��?c�Z��6@
��I����(�rQS���b�bG�6+X�F��@�I����`�����B.'7K�P�AD	6"��@����EH�m;=��;m�m��k8[�k?�N�>�����}�{�{?o�[�������s�����w]�v���k�_P���u�:@�P�]�}����(�f�C�P���u�:@��u�'�@� @��L�#�@� �;�wXp@� ��@�7��0� @w ����� @�'��o|a  @��@��a� @�O��"�@@� �!�����3@� 4���E��� @�C�g� @h<|��!@� p��� @� �x��B� @���A� @����/"� @���;,8� @�@�	 �_D@� �;�wXp@� ��@�7���1paa������������������nnn.�s���]�}�K��;w�������[����Y��?�w��7;;�]W\�>|��?�moo�����{��ew����*���w���e�����u��c�������1H�*��/�C��(+�A�$L3	\�z5+�������X�677�C=��?EmR,�������� @�@��K�����D���'��X\\�����s[[[Q?����K����4H������p6������6D
s���WiH����J�Jw��R����ncc��d+�K�K��e���T�DR+���,������#�<Rk�����1��0M��>���\�F�z ���<�T�!;55�	��������7>����^|?��P����>zp�W����������I���*��>q�DOX�w*�Q�����-+����^*��g����z�������3���	��.Z�y�������f��������,�5B�r�@��Q��*��cC^�x��l�L���?�b�Q�Y��!*������/�,|�?
����!%��������Sy�o�o�CQ^���^���m����&��	��.�^��p��~�k�F�`x��aX���	?j�Qs���1�db��fbJt�u-�zWm�|��f��"��)��4V/����������&��-vn��l��k�[S,V�y/eD~S8cG1�Q��2�����|��2Ka,n��#@���=)�#��/�����F�~���=<c�M��P6����T:&� ���k��$�D���>�k����^:�{~~>v��Q���O����'�����C���/|�%�g�d_�M��M���L���3���5)]
Q�M���]��/�w?�>��vc����(���uAc���Y�v�������T}��O�6��������c�m��m�)���f��N�:�/��T�<{S�����}�>+S���U���)��g��7���3Une�k��)W�.�!0j�Qs��,j��]��u��T��4������r���p��_���
��
���td��;���%���5qc/7w��]���4t-,7����+ai)}��Wv����!�+�������8�o�O�O���GQ���m�l���0�>�"�|&~8��O�8�a4h����,�����+O&�%R���/g�"��W�|���_WC���A���I���,6���~��l����)YJ�(|��w?��?�����W��A�M��y��-������wHS��]�C`���&<��S��5�a��LM��5���2��/x�]�����S���6<�Me�R6��7���&����Xz�`���o/)�R��Q�_������T���^2i��c�F�>Z��^l�|���Q�>��S��K�H���=�T�(���_g��+L��1V]�y1���0/���_�z�����g�9Z=�L��r�|��{�O]��nX7��R����������py�}[eSX���u-���5���U���X]��-c0��E���-d�����l�r��r�@�uPS��
j�����8|p��=���GQ��p&p����F��`6�RG{0�yL��s��$���$~���~uWT1�~��XV&L�X�������_��ooh��oaS���o��q���-���S���]�r�-//�^�<�x�������l����
�nG�_��c������k�}��o{X���W��f����m����"?)�EaS��x���p�!l�|{buF�Sa�J7��������k��������O^�����6�'�8��8m��/z0[��7j�������
��>x����ys��Z_��z��8,�������}���w�L�N��l�yZf[�^�]�R,����1��Me��-~��^������������x�-#K#V��N^�M������=�<��#�rH��i��������S��_��Ea��5����R�������%v������a�M��O�������}��6�����ZX�7��K`D��5|~��{�cA_ �[������;�]��p�d�Q
�[Zy~M(����~��s���4����C_M�����c��TVF�����1;�,�$,+��T^S�~XK?���'<W�������g[���~�����q�[F�Xc���L�ky-��M{����-����WVVB?v>6�3���{��5���`N��(l*\��~������@>����(���y{��+�?�>?�Fk��Z?����s��~����5>��I&Y���7|�����!���'O|��ai�a[$~�oL������'��[IA���g��~��S�VF�D��p��������6�����iq������n�������N(.���,��6�!/�2ed����:/���k���_��2�-�y�[]���M1�������~�A����}���M����Se������J>���{����O��4,/����0��Wz)��|�6Z�X[f������s?-�n��_^'G@�j�ukl��$�;��[xk|�w�_]��ACl�5���*_1�bq��
�?��F�w�����k<���R���@�I�=�!f<��1�V�5�s�������SyM��,�X>}�s�[Y��:�3L�a������l_?U�k����������k�r�'m?�~���+s^&�V��,6e���4�����=�j'Ry)
�
g����}�������">J/�w�7�A�t{��+�)�~^}~~yX�X[f�R����O�ogt^U���9D?���o���$�;������������5��'O����C@�
��4X����/2?��|�~��l_2�F8���0\o�fK�������a�gG��b�R�eo*�)w������"7���WJXe�3�U�7[	'fg?eTu�I;��(�p)�2y����2aI��K�7!GK�L������M���cG�>K�/��(�6�wE���co{���������ha�������>�u�7��K`�[��z�Y�&c��� ����j�����@��i�A�]7�t�F?f��O�����Z8����/���M)��C�f?n=8�ohChc�+�TX����O=};ci+|,~?\�����o�Gy����_+*��a��'��t�x�����]+�G��Es����4�f�Y�-U���
�M�w��9L�(l*�wx��SJH�����<�i���:]�;��T>,n-�������ci��x��9��8	 ��Ii��VQ�c
T�7��G���O��FV�6yI=�L��L����zP�_-}��O�������������x��f�D��<���V�zQ:>�T9X���Ed[*}�3�E��-�Qi��F,y��X9��Z����G��8j���X:���M{���&-1y���X���L���l,��n>�!�SiZz�����E����[��T��(v��K��8��h�=J/v���q�u�*{�8���fXn��XX��Wvy�,}�'�8�� m���j�,Y�a�=D�a�x�C\��~��o��i(�������{+��i���[���9~��d��%l�GQ��?��{���>p�N�m/:y��g��a^x���
:���)����0��?1P�*���m��~�A�-���/'�e�dcLx[d�^F���tb~lC���T���m���?�S�{�lC�,L�V?9�������Q���{��L����b�[�.X���3�i��8���d����h�k���8(�p8b����t}�1��+^�*7��j�tm�r����: ���\c~C�o�2�o���vx��M
���u���+�����s��!9����!p���0h�okpSq�{���H��jL����x�L��#G�<�^	��2����[q�q21;|;�^Xd�_>�cq���So��=6���;���`�"V'T�|�q
����h�s?����c���E���-��b���S-��X&�X�E������)��*;�C*�/��Y��q
�T=-����X��=���y������X�f����mS,����3�������zL}�J+f�������l���A��w��te�}cu^��^�u�r��lR�ym�^y������E?.�#H�opR
��5`j��I�aY�����U����c
�5������I������F�������w���R
����*^{!01ak	��Si��=�R~B;Ri�XH\��vf_��T��Cb(U�~O��[�1eC^�����c����Qy��cV�����a�e�$�[�[Ki�y�7��V����y�C�|L,�������u����D������(M����KX/B�R�������]���blab�a��a�
��������~����������e�Z�����r�x9B��:(� @�-��;NF	i\��2O�
��@�w���7 ��������d���@�Ox�=@h�q	�q��,�X�� ����r$� ����J�%���h|��c!@���%���n���!�D�&�
6A� @ A��3 @��H��R�&@� $ �`p� @�@	 ��X*�@� �|�� @h"|K� @� � ��O��� @M$��ob�` @��	08C� @���M,l� @�@�>g@� 4�����M�8���o���9�g���w�������nmm������9s�����`|��aw��y���]��q���qLMM�*����,���L��

� ��@�w���&�D�H�������c���7������(k���������3��������JFy����8�#�<���$^.@�%�����E@`|���]&lnn:�K �7~eee����^���^�[�n�������>��n�>�3ny6�����T>�����X���s� �|��
�@�H��_��b
�:�)�[���7o�/|�����e�����{�1?��������{_�������?y���x��	�J@����'@�Ne��i�4�[$fS��z��x1Q�o����9r�il{8D����������
��O�s@]"���Ri�W��@Y�'F/_���P�"��&h�a(�����cL�jX�D��OY�]v---�����4?���o��d������Q���{nv�l���k���a/8�w����/"�u@q�8\!�1�l^�tL*��K4J��P6�,q��8q�'���J����������P�J���c����|&���P���WX�.��
�?]3�-��0���Ym�X��q��D��=�!5~C�'�����U@`|a��)ahbY�5�\����ae��mL�*�Dq���DmJ���k��x��+]����+�X^��������H�.��[�=u�T)!o���������#tO��; �IOM�G�}1��B#j=����e�Dh(������r��[^^�%t��)MK/&R�|Z�w����kJL�q�q[�&����&�������{�r���)�dD\� ����4��/>M\���P71�'0M�*>_�Z�� NA�p)�m�7�"�8M��������6�����C��H��$Z��6�
��X^�������1d�r�p!@ N��+ 0F���E��Kd�vb5�
E?+~��8���N�	���HH�M1����L����~>,^�{��G�_�Ay�����s�y�����P�[��{W�;%�S�ax~C��N��<�4��/`��O3�� ^q(][��^t�1���,�6�=��oaCA��?%�M��v���a��G���5�X^|&�����\,���s@�M��	.���	����Ef����~�)q,?�X)\�1�z����4�.	b�B�s�e���}W��h��>E�����/���m���������X~X�!@ N��+ 0F��
E_�Y&�}����N	x?��?��SI�m�6/M[�F�]L���!.��1�n��������h�D�B�������;�'�-\x� b���7 �r��8����/`��&�}���������=���4S���>}:4%�;/=d����������kL�+�e���o�R��n�� ��~'~A
 �����-#�S�T3��L��L	������x��]������~����_Q^���kc)?�G�^���
}�G�Hx[�����`y0[��1�!@�Mxj �8y��X��h��,1Ai�$l�a-�h
{��Zjb�]W���v�������5fs,m�|*���c���"�_��
�1[��*m�����_���O_�~���@�?��x����/`S�/e���0���H�H��G�MF��T8�W�������������[[[=ML+^�������#���'�}fs��Xx	p��o���[���e����b�� ��x�qb�|�X�x8� �5���8��@��4&��d�����V�)Z�]�J���L8�����K�|����41mB������Y6�/�el���a^���R���v��XJ?�N�V����/���2���
@`�	 �'�t� 0V6N=�����Z�~�/��7m��Bh2|�K� �V���~�|,C�"��7����=�1&�A�@�>��+��"��H��������I���(L�K�P�	@�c�+p��K��0�^i��UKV���'m�w8._o�#5@`�	 �'�|� �7o�t'N��!��;�	�e&{6 C�����;T"� �!�6Y� @h?|���@� t��C�MV!@��O��2$� @"���Pa�U@� ��@���� @�@� �;T�d� @����/Cr@� �!�6Y� @h?|���@� t��C�MV!@��O��2$� @"���Pa�U@� ��@���� @�@� �;T�d� @����/Cr@� �!�6Y� @h?|���@� t��C�MV!@��O��2$� @"���Pa�U@� ��@���� @�@� �;T�d� @����/Cr@� �!�6Y� @h?|���@� t��C�MV!@��O�V��u�<x��������%����>�����}�������?�� @�@�oQ^XX��y(�M�K�/--�.db~��}nkk��2"
@� � ��sW��l�X IDAT^u{��u����z��k+++=h���n�������=7N @� P��x_������}��������BI��Q`�@� �m��&��=���P�����W�e�O�s@� �:tZ�kx�/�S>6T&;LaY!p��`�u�:@�P&��Sa��]v��8i�6t���s��!�i0�>�H]�P���u��:����]��������1B!@��M���V��qyy����U[.ruu59Y�^�	��.H�� @��N
x����L������g�n��� 4�@'|�P�!4�gc��g���R��u�o�n��,?�^��1�������r�_~�^#H
� ������������j���kkk^HN�$�}���������������w���cu�BZ� @�v�����0$�%��?����F��c��z��@� �I%�������|i������%������z��x�&�Y� @��oN������I��/�������\���@� �I$@�$������'�/%��?�c��c��P
d� ��@�w��(��,�[J����w�����-��B� ����Y�s�^�������������1[K�� @`4���J�# ����X����| @���@�OZ�Nx~�Dd�hi���V��?����
A� @$���`��9����-�������.�/�M��?@��`������?��94m��I����q���[���n>���7���| @�'����|�p��R����
�������W+K�� @�F���Q��v�V�A o����~��>b�+ @����=��i��E7;;�����}������gw��������������s;���9�}��[��OF��|���8�h�� �;������uV�/..f�����nyy9����gn'O���������R����������y�1|�������O���^j��X@v<������u��;x��;z��.dnff�moog��^���������v������.�n�Y��z�%��@� ����?������������K'|���������a/��TX��K@c�5l&�M��i�
@�@�	l��~���|V��P-��������9w��Mw���!4���nee�W"j#7^��������4��&��|��'���~��vc @`���r��3�����3>��6�F�|�������;J�+�����_����X����HZB����K�x5`| @]!�a�Z�����~g��JW55���~�\�|9[q�/�~�����+_��x+����\����'�X���+�Go���J�#u�:@�$���������|�B~�#?����;������	�1�k���-��������z���������X����s�O����t���q������P����o=�B�����������o|�=���,���G��!��n�����w��&��D���Y��J_EAG�4��o��s��g������K [^�����>�����4�@'��{��a���m����jX�����B�@�w�\+��kkA�C�@�	h��k�;�|������o���Y���tR�+���i�m�����X��?vb���([:+�k���g���(gr@��$�_>��\��E$����@g������nvv6����!��~�����������S�XZH��s_In�$��O��@
#��5,��w�?�������N�>8�������I
�w����@m'�9\�h�����U�)|�I��r������5q_����L�� ��	|w�R�3�D�?}���"��@��?�7��z.rwm���&��M� �qy��I���J�O�	 ��_��`4��[��7|����G�*QB��'��0EU��by���65��%�]c' ���r����{1a �N�Jj��>����i2+��"�����$7# ��v�z<��t�� �\E�L�zF��{.��^D����0�N���z3������S��AZ��M@���-����:��L.���-9��@�z�Z~�
�*Nt� ���V��]������6�3���]���b��)�pj�!��+Nt� ��D����������������HA�����=5aH��][�cML� �����}w'�r���>%��)�n�7�������vmU/3�+M4�:L@U�R��Fc�����J���^����d�����v��4�@� ���M����d9��
e���'����7~_R������$D,� �y�&H�k'�5;S�����x�����u{����SSS�����@mnn�����MOO����]�p�&����CjTc�W�����U�\C���:���'z�h"����m������ ?~��[^^���������'{����[����N�}ii�]�p!����s[[[=�@@��1o
.>QG @ E@��MTehf�^��;)�M�=ztW�/,,�������]����w�[YY��]__w���w���]���^{�����XFD|���� %���P'�&��Lq]g;)�S�}��m777�L��o_�+l�=/��"�����x�\�������@���/{o���g���?N�O
`������7o�+W�8
��P�m/��gM�����o����O�������@`�	|g����"���*?| #�yo"]Y5T����=Nv-6TFCk��V���E�������f��Y�}�{���d��;	eF&��<)�F��+����>6������[���<#�MF�	�
O�n�e'����._���m�!4���q�n������v�������w�>?O=!
�8�i�FQ�U�;{�}���?���u�>��\� �{�]��	x�~h�kU=�~��O�q����x����2'G�BZAf��?�|h&�����"�I���]+� ]�p�s��%'�2��hq,K@�������@������Z�=��#w���*e�W���Q'��������F�=�V,#i$8�C@>�5�Zi� L�����)��y�\�����$	s���6r����Xg#�~��c$�%�S������ ��P;����m���W�����7�X>V��Z�Q;���K�P�x�������������;{����677��W�G_�����]�p�@Yy
������$�@�Y$���LJ��@gM���m��B�����#���m������h�:����_|<�;���
��V��t��%(���a5| 0,�Vx��b��6�T����l��p��a�u���Tc�][�{��� @�������)w
���V>��@��M8�^v��8p`Go<�9VQ�c\�������b�*�� PL��s_qZ2%���k	I>��@�����=����s������qA�Vo����
����k��Ab�Jx�s���]�^{��}���	4^���-�h��*1����A�..�a3�^���$H�@>�Q����Z�Zq�����:8��xe��|��o�%�����!!0~��z������6u�����k�Y~������	�B���������C����=(�}�dV����p24����K��h�1>� P/��y�x��]��LT��\��Z+|W�|w���v�[���f�[7�9 P?-&���yCf^{���
#��@�w���x���d��~��6d!����.�V
���
4����m�����N��#�YF����KP�N��G�����D�@������
gT�������}r�{5/�m���c���G}t����s����!4��v�K�x�\���
,4L�ZK@K��MTU�<+���x'���x��I�H��@�	l����������\;�; P�?z����&�H�DUv���6qC�5�vb&���@�	d;�}�����:@���Dy�D��cm���b/�����7���/_��>��-�!:SSS����;0�Z�6��?�R�?j"������[���pMA2����0������=1�=i���8��z�i��7v}766�.�!/1.�����������������z~���������@���������@�'�E��Wj���u����9r�~���~O����~W����333;&���%�����b$�.��'o�V�$�b� ��@Y����������������@�����{�V�
M��X
���������!1�����#�#���P��������k,<�a�Y�4^�����q���/���������+_�-����0���I;��@]'���ZE&o��V����zMi~�[#���0j����$�5L����nuu�]�~�'��Z��
��5�����F���������w��68_�&����/��'�K��N��������N�NV^F�:`��]v2�D��S"z���v]�x1��(�`�t���5;�P����{��~84��V�x �p��o��[����7LM�76p�P��:����O}0�6�7^�+��>"�GRv��
��7Z�onnf��h���V���Y/{(�}?���h\���Jx��+��ZM+���X���!�	|w�R��]�����j��� P
��x�<���'\c�O�8�	�p��"��"B\'�W������Y�,���  a�7�]�| �F���W�\���nk��G
q������MX��E�M���y�Ov�+q<C���O�][%�����B 	@�vZ��������,���/��@��(��W_��K��:u*�r`�4i��Mb��[����:
;���p��
�4�� �I!���g��eL�������v���Io����p�s��m?s������-#�e%��?���C�[C@���m�����%�B	Z�Q�?�����|$s�qn�N
���C`H��8�/��N=8d
� 0.������6nbm������~4\��#���6uJ=����A9^����	�j�6����z�+91p	�$��og�a5&��k���?0YBu���j�Rr��3&��U$�S3�V	��7o�d�����N���I>�4^���^D$h-�����V�R�<L2�Vx[�1�hj�]~���A����_:�|j�M~�@�)4�Oc�S�]��D���v��@�����%{�������?J��
�����S�����b����$vB`�	H�k�<��Uh��3�����!�xo;���)��g��04�+�n���6]�B�������%��N�1���	�6���.{�c/�@ ��51�4���k��!�L�����y��ZW;���@�4^��@���G�V6������][5f� �:|w�Rn{$Q�&tu�i4�@+����{������gY���5	�&��z��vm��5| ��@�*Y���*��]&�xoc�m����Uh�\��{���W�:�| TM@Ca�&�f���{�����/��
��+W���,//g��B������&���6|�������"�8������IN�������x�@��(���������z�����a:a�������vkkk�7~C`��v���2Mc���+r2�Z	uH��W���k-k��
��W�f�]�|ii)��������ol�D��]�p!��iA���Jh���������S%���#���4�=����6n��&�H�o���������7n���766v�,��6����q���=�1w���M�VVVz�lgX���!�d�	��k{��G�\C���W���	�c wm���f����dh��7m=��n�\bG�[�h,��_XXp&���m����:GL"m��z�j#vm��R'O���&�~��{�� ���0Q�Z��6q'�E�������7'�H,�5�5�&�ck�K����0q��u�@����~:���6|�z�sL�0 P��:6�I��
a��r,��F
�q����1�&�c=�Z��WI��8	h�Lj�'=�Y)b��C�hMT�X�p���[c��������@��U6����_��%��8^s0h��������g�O>DY^kGYr�QN��+_^�m+$����]�r�6�6cb��(^����NF�H��Toz(�e�	�Q�1�y���<{�����b�W-{(�@��R��*���m}�/>�^�~W��xi����������������uR�k���'�Uf��=��o8&�<���:Gt�������������� ���s������	��nhB+@`0��&��%"C�,#�7v���Ujvm��L"���^*���%$�@�h��������"��m�$���n���w}-
[����B����N�=�H��M>�k�N^�����k�����| ��	�F�k�����������������V_$l������f+�(bm,�t������T_��L@K����o=���u���u�������7y��
�����{g���@+�	n���~����{��D�����]l�i���(C�;�O�7|��n6|*?h	�����^�����@�Z��6V��wT��	x���wJ��A��6lI<��@���W����@�h^K��	y����[�

S&�@��-�hCZb���LT����@�kkb��l���=��b>�I@��5$.�m�k�&>��� �G���!�y�}K����=��v���e���^�}���o�w7U[V���N�������&����������au7h��B�?��s�\�h6�������i���jS�.G��������C���u��0E��ONQ�����y���4�@��	w���oZ3��&�@+��k������R��Z���'�r���"�Io�,�����z���u�
��������N=��g%�����_ou>1m$��F���&�'n>�>�����N@�<o�����evY��hH<���&�I��
o�m�V4QU�j�@�#�
��j;���e$�W�H��������V��o�A���\
eK��r�\^��K(TI���V��X?v��{��Gw}{�1���]%��j �^�TO�6|�Z�| ����jZ2%�u���3>�@34^��FN�k3�a Pm
���]�����"M<���K)�.wm���t����x��u\�H
�Im�$�u�cO��%���^>��\��%^����:B��K��^����(7k�x�b�<e���_���������Vl,k�LL�l���o_��
%����?_�u���,?�P�1h���8��z�I`��qc�wccc��T�'N���-��pKKKnyyy�w�t2�@��l���A������1���
�Q�<UgLH�A�^�����z��� ��\�z5�O;��'];����
�G�D���h�V�����'O�&��&��'�_{��Q�A��@/�m	�*W��y��[]]��0������a��
*Q@�y�����~h�����Lj��l��}w;	|>�@;4^���
M��_\\t���n~~������;{�l;J+!�by�ch�'
��	h(�v8��ue�^��4B�@��Z#�G9a�H�k������������|��~�R�B�x��ax�3�����{������\����������'���w'������^��Or�p�PF\��Ea����N����z�G�
M���`�ti���Z������#"�:�/X�k IDAT|~�Il�z�q������4�?������H.W.��?���/v���/��//r�p�Pj������4Z�onnf��h�J����<o~��^*4.ee%��o@`��Sj�;�k'I>�:��P8Q�s��C���B�[O������+�����	G�������n�)�����g:B�lB`7���t�p�*;����H��^��\�re����z�����=0���O���8�N30rB``��)�k���k��h	�R�������]gm��0fC B��>bseN����3g�d��k��~�c�5��&�����H3����e�� 0��
�rvme-�	,�gI�[��jU��N=����EV
�����xw�3�.��<Cd}}k�}��g������?�-���?u����!b$h�:-�M���qt�����]vv������<�|��@\�@��z_}��>c�;�G ������%��?�.w�����m����ag| �/�g����_����������aw�����_����H�I�kkk��j����Us�������m��5�}����2�!&�u�:L\N%�U��?��u����v���^�z�e�����dH�]��{?��;����^y>�%�8o��mbj�X�[�K@b%0�[�������	_7
��8������k������k��6���.��IO�f~��wE�{�y������i����/�S�Ne<�������f@`'m���\��2�o'/~5��kg~?Y����	��z�_>�^�y���������z�C�n�5.���4R��)Cm&�hBqc��r�M�ks�}2hl�&�j��&]k(��-��b��V�����,B���K�S����O����~�)%���?����/�a*"�(o�eN�<YQ���������s
/`R_�jD����s�s�E�s}%��M�M��;�z{���3�����_��$)���V����������O��{�'~��X�w������,|� L���	*L��I�����>ec���&�r$�������`H�k�V(��]R�k��z��@�'p���N�a4�����/���X�����5������Ir^3|��I���z�m8B(����O��CS�����d�[�?�	�����:V�o&����Uc�&�j�z�%�����J��	���/��_U�	b�@#�m�d'���u r�O@=�Z;%�����EX��Z�(���g����c��-�z2w�,hhLn�~g��j��������6S���U����s�b��?�_�g�<�+�d�%�)�����~���]*8�
�#���z��I!��-�L�7���cx���?�	���\�Y��
�n�a7~�^~���������0����x���G�a�������l}{+�U��I���G�������~��?�	r���W���_��
����P&�%�e#��h����'r7n�
���FN��D������	����H����������6Xy���!Z�I_�s}��A6W�dX�s�K�z��g	~>�'�����3>�
�Q�����T��;���VZmF��h���w��5�U�r4�UvI��V>� �H�*4��X�I#��4���f�qk�����h�~	]������3������p��
�s�j����Nfv��Q��[��J(��5JH*�����V�U������"�����$7�@
�I�@
k`���C\��}�����
�>O�K��za�z�O=���
�X������Z�QCQ$��k�!*eD��~����h��^�����8��w���Z�k�W��O��onn���g~�ozz�����j#�A�����(�0ru�NvL�����
�a$}�}>�1�V�j#�����i�[&����(H0�r�F_���������%��.���o�'N��yL���R�KKK�����g�l��Ez��������H0b'o[�\�vo�r��
��^�$�5\j�������� �-�X�&H�(O�k9H�?W/>��}T��vV�_�z5�{��u���s������/..:�YYY�U�������'N �������G�k=��|l�s�;!�k�[������k(����-}�JM}>�	R]�5j)H�U���JSi��@��7o�t����� W�������q��wfj���� �,�iO�x��O�&9�����{����G�^j�aZ���^d�+����FJ����f��m�-��^�:6A
{������������
�9z���=;_XXp���������vm��m������Z[\B��k���:sZy���h��k�����z���oe���UoUUi��x�\�������|k�9�B���V�*4��h
���&Y�G:�2��L���9H�a�����5DI�3�e\5�{��r�um��5��S���U�y�@�u@�7@�[!p���2���K���~�M���������??��x�oJ�/�����$�z�������/)�������w�u�>��������[���C���������3���w�|����;J��o�����2���'�s���2��;{z��OB�!�i'�,}���_�������c��to��7#[�������=������'rO<�$���x�����(�q��NF�H��,���c��\c��W������j���_�W����*��pu��e'�
��
)o�����O��'H�����~S���2����fB��x���*X�%�������.���EB/*z���v�\��|N��?�����@&�S��T�����@/t��
u���(t�qG�GV�IMVM�����s'�E��{?�����i6?K@��M��)�����v
x����2/���d�[�����7ix�l�M����~;4������\�V����o�O=3�-��!8| ���!4*@��lN5�����]Q���|���4�p,i-�7�D��v�w�:����\�k�����_�������'���um���P�+�V��.�+/=?����D����~��[^^vg����u?~�x����;k?��6r�}��>����s�m�_-���`
7�b��,�d�+'~����������Y�o,|���c��z���&���@�	��E�n]�5���_p���G�Uoz����tZ�k)�={������onnf���_����������3%�w��%������M4�p�_�z��7j��3�!��4)�-�A{�mxK���Vo����r�um����?���j��D���������J!OJ>������J�������~�L�������|�C@;��	�;�v��7w����-z��[�\k���@[	�&Hu-�h��JOm����.@�w��[�wM2*%��?�X/�[Cs��z������v��b���/%���9�����r�u4^��M�~�#���+J�z��
�H_#l����5�\t���E~F}�v���S&���w�zPw�7^��R^=��_{�n�H��M��Y�!���e;�9J�g����Xy>�@9�r���Z"2{�$��|��0[i��Uo��n�x�CBbZ%��Q>���m=M���-c����k�Q�GmHL���wfK46�b,�@>-���X�]�*-e��A�X[��[����2�l�
�2�e(��1�C������}��27	�~�F��v=���!1a���m���J���^�?��:j�t-������x���������o)v��z�5�DX+jIK������k��w���uJ(]z���� �|���Z-F�V	]	w=����d����)���T��a�&��B��=�eo?��yMz|��I����q��Y��w����l��1P���g~rW�������E�4�ek�$��>��FU�m��^(�s���s@`����K�L����S2	|����!9L<�K\����=b\!���P��6�v���s���Z
W�T��U������N���jd���-,4Ln[f�����e�X?m�!���j��7����v�VB��$��rm_��v������?�?��t��	��7��`��������[�Y�V}h��g�1U�m��M��=��Z_�&al��'��������[!K���i]����@�w�����^9���"���?}��mr���O�K���ms���	��e)n/�&�������X������JW���z�+�D����VxL���n	hM���Z�[}�=�s��M_G^8�@%Bn������5�M��R��i��oz�+�ZD��@�7�h0��_��&��*��('��#HLLIl�&W�=\��5�M��<�n�V��:����������=���������mk=�n@���A�S�a���V�P2���M�l�:�k�M��[EM|����M|��[�_2�����P�>��=?E�_��| �n@�����������g����s�
Bs�%�.��-�A,��6n����f�����P��K�q��O����L��!�Xr��A��0�@;	 ��M���nii�-//��nll��2&��	*����fc����V��h�	+���wG�Q��G��%��VF:6���&���s���i;S;����5�������9��M_P~W�^u���s[[[>��$vl,��an��	���U�]l���;b������6���!N&6�2��	"�&L�7�����T�/[�E�d;O��u@�9�e!?33����|r(K�&-���UB��:H�����@6��v��E��}��������M6!i���l�jA~^�un{���,�X�N� 0��%����������|o����;{�lAH.C��em9@�c]��w&�K�65]��7%�U����#��zg����5A^X�?�VWW����{b����������|i;^�F;c�����	�<�������/��� �������K�v�ZXX�ll��k0��|����'�y����w���!������G~��}���p���1G%��/������m_q��O�����:@���]"��~��Tg'�P����{������5��o���:`��'�D�/�2����?1B����tM|�({L|�(;M|���>��> �u��:0�P�D`e�����s�R����5@�~�.�{��r)Q�1�J����f<6EZ�!(�� @`P�r��S8�����nnn��ir�q	�B@�;������R���@�	 ��Gc�m�m�d+��k<.C`B�#��$�� 0!����3g������2�ZV����!�L
v����$�&�~2��\@5`G� � @�"� @��C����@� @�"� @��C����@� @�"� @��C����@� @�"� @��C����@� @�"� @��C����@� @�"� @��C����@� @�"rnss�>|����'�NOO����!�@� �j	 �x��u�<x�I�/--�.db~��}nkk� 4�!@� P-|���E�w�^�������������N�<�s�� @u@��P�}�����s333n{{��3����	 @�FD����=zt�����0�]Xp� @1|`���2ZS���B�x����u�:@�LR���_2>w���1M`@<
�����u�:@�RF!��|��	x��D��@� 0�����)����@� �J �0��d .C� �J_���|g#�P\� @�������l��={�8}%����J�� @��%����'�A� @`��#�K�� @���Z��@� ��@��/�C� @�Z�jy @�FJ?R�D@� �j	 ���Il� @)�H�9 @��%����'�A� @`��#�K�� @���Z��@� ��@��/�C� @�Z�jy[M.^��fgg��={�����;�|M��L�uljj��={vW�/_��>���)���������'Oz�wN������.�������n����6���:�;w��G�,�~���^T�VD_H������b��?~�������������-���g)M��-//;}�������Y���_ZZ�����Q'������o�'Ndu&%���3���.�Tx-MF����6��8766v���~���;"�Ge���$��,,,�������KR������G{n�@`�n�r��%��Y�K���}[3�L����7��T��������g~�4j�v��p��}������\ E���W����s�b��}##��	��w	t3}{(�2�
.����nR#�yn�����(?6�!�Oe�Y���u6��u���y(�c�/��e�f,n��'���!1�L�t��b����l
�M:=��\��
�����:f���r������]|*���Yx��1����[�-�a��U4w��W���MK�c����$��hB�?	G�=6��&sHfB	X�p�c�O�.�����|�BTx��#�,V�h=��&	���H	�~�g�n&������#��h�������f������F��<V�lM,�y+5���#��@��3�E#����~�t��.o��_�~�����p����DR��FDo����$���z�Ru�z�R=X�$F���k��8b�,/,��O��<y�[^�8cu��q���z��8By���!�E�W�b�O�=���a\�(g�H ���X�4������T���M���~tl�y�ry��L!�	%`��c=�a��Z�^�	ED�F@ �m+�gya�:;���ERu��Xj�}Q8���+�~��8$����B���q|�B����'�,�;D@����mrb+6X���Nzp�:u*�����1��C�jI���r���l��5��1�e��bI�x���M�o�����Y�n�|4���J�#&��2���������9D?����
[��0�
���,
I��wX��'��zVTg�4��B@��za���ZV�_���W?m�jXw����F��#�z��@� ��@��-C� @�z���# @�FF?2�D@� ��	 ��gJ�� @���1 @��'����)1B� @`d�#CK�� @���z��@� ��@��-C� @�z���# @�FF?2�D@� ��	 ��gJ�� @���1 @��'����)1B� @`d�#CK�� @���z��@� ��@��-C]%��������VVV*Gp��-w��a�g�w���^�)������<:���Cc$��#|��&��(���B�rp��Y�����r�y���������C��_�j
��Ob��Q�
|B���:��@ #0*��^����yW�)��������?����;���FQ7n��M���FI?J��
t��(�@�P?y���)��:����X__w���wM{Q�p�ut��sEN�!�Q�Z0��&C�r�p]?V]����E�!0>���'e@`B	�`T��SOe���t:==�kb��
'��H4��1����jk���nnn�&�*������y��8�������of~�������������
IDAT��(.M�][[3/Nc��n����m�s�������'�8�<�����������T�,�x�������>�2y)�r��� @�@�	@`X&5�����nyy�]�p!���4��H�_�~��9s&���\]]u)w����^�W��%�%<}m`ggg��c�����w!0?�N����|�r&�%�M��^B���+Y��@_�d�AYw���1.*��~K�����+	z�Il�)��2,-m��b�1*�A���Dr��m���8��41����)L��z�M`[���~�^�97v������+��}cc������]x������baR�v��c�����X��������w����!�~��_@�{��+sr��@J��b����A����d=��}���������L�1�����������]3{|qlnel�x�h|lK�����1����m
YX:�r���U&/eX��s@ $�������R�1�����'}1)Sc~MP��?�W�+
��������x�����h�|,�
����D�:Q�6,���x|��q�.ci�<6�3H^�X��s@ $�������b�OQ�`�{|S~M$�b=��xc���R�
{�S�|wM����|*�������y?������_��2�&�e�0y���7����E���&��@
$���<%k��)qi�"�~M8�n�7�����FD)�J�5y3����X>��~����i�T�����c?�����C!�c����,�A�I@�;��)kr
�D������1�r��j��1�kc��Z��#G�VL�x��zJ8�+n
u�h��1���UN�h�%�i���������cy1�n��J�������KY�f{��f� �~�C���z	�K�}����*4�)�]�� �$ ����59�j"`��j`5f���K����2I��HT��z~�����a������
:��b{{�G�H�����?�]�hx��
x���m��D{�p�oy(	1���p'?i��|?e�R�����B���!@������M�<@�"��oTq` ���
s�
��m�@@��@��[��4Y��=���@�I�M*
l� ���'����f	C�@�G��@� ��@�7�d�� @�� @� �T���vA� @ B�� @��J����.@� D �#Pp� @�@S	 ��Z2�@� �|
N� @h*|SK� @� !���@�	� @M%��oj�` @�"�(8A� @���M-�� @�@�>'@� 4���%�]� @�@�G��@� ��@�7�d�� @�� @� �T���vA� @ B�� @��J����.@� D �#Pp� @�@S	 ��Z2�@� �|
N� @h*|SK� @� !���@�	� @M%��oj�` @�"�(8A� @���M-�� @�@�>'@� 4���%�]� @�@�G��@� ��@�7�d�� @�� @� �T���vA� @ B�� @��J����.@� D �#Pp��'p��m777���;W�������=:`h�A���W�YnX=Y��U�������{�s������}_;�����35��3�[�n����'O��P����g������}����V���H�����������sW�^�=}�����uw������g�fz?��������w��K����������W�4��F�{ul�I=�
N �O�����	�����b�o=z���o��I�W����Z�fT�x��{�����#�TncU����DUeC�lw;�����\����_q[���E�
���~V��W�gO��	 �}�C ��z�M��'D�����C����=��w��z�Co/yCcb~$���%XMl�����PM�������p���������PMb�%������{u��B��$���d���~	l_=��&�S����x���?��3��Pt�����m�K�lW��<����������?��o����y�6��	��O*Nr���W�F TN_9R"l"
my����7�Oi!��T�����s������������[��g����vW�\������������������kB^��z��lh�]��{(�e`�%���s�O�T����K������������<���\��#;N�>���'N$����tG��]W8��?� �����2���t?���)��^����*��������v��2��O�����nvv�WSSS;����4����������$����'V�aUE���}����~������|s������Xz�?��g������*�]�Wc<q������#\�l}��	w�u	xKOd���z�=������(�B�D����7o�t%�����1��_�� �c��~��Z�bb��'�p�����@"A6�>~�z�.;%�$���?���x���5�C��0������WbP/*�K\�xL���X���'�j���������%������h���Q[�g{��_�������Ry����������������ey����z[�>�4�XTG������ml�������0_�fxO����l������{��+��~X��o����J�����h`�!����Z(�_(d�!e����4c�������?*���]��(�E���l��:�q��lR/�}�x����h~�c��}��?:�SC	x_\�u�3����^~������e��^�>���V'MX�-yG��XM�b�����
b�����!��wR���z���7�W����CCi�{�Z�n�����0H	x���w���C�Wq���8�4}�+#L�%
��x����l�[���O?�cXQ����:�G�.�]E:J���b�|�X=3�8���u}���,L����ba�0�FX����u���-\���y�4�~5[c���b�(>�1��t�V&���ar����X>|;�_�����Z�-]�h#|K
��&���������E|?�}���8�x�[�I��I=tB�����������j��--in�2�p������m
�����nQ`vh���3g������W�q�����?�s���a����M��?a�5�=��_'�0���{^\&�OQz��~K#����'6vL�Q�k���s��5�����s/�g?��cq�����xR�g���qs�&@�7�4��������{��s#/���:L�R��a���������/���=\C�V�/�C{�[���U�(����X~����S������,�]��'�V����gX���~�~x����a����?������-|���������:jyQ����_����f��5w�U#��%��/Ro�X/�	����c?������������I��:��wp�OaM��������G�,M�
��=�[=�n����
��/&L�'%
B��](�d����!������+��s�����\?��=��7��r������?��w��9�*o*�m�NR�$�2q�u9u�(��I�a<y�DQ�-s�����Q�������:���<�X��r��48��� �����[H �����;����]��T�����y�2�;Z9��
��T�����_/���������������O� QaK<�X��BRB��������[b�HYX;�q�����^(����(I��~��������~[�����N�p��k��Q��+�����UQ�O�e��eu^ek��O�(=��2�D�z[t������rQ��+�w,��6���hq�����m2m�<�q�q���O�s�!�����3@`����{��hJ��M��/Q�#��.�7��&>��	p����
�:	 ���MZ�@��z������������3�fc���RtW�����[=��*Tx��i��s���0�C����> ��hA8D���JF���>�^�*Ew�q��$J�{5�G�F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F_j� @�����3$@� �F`��7��`@�P���u�:��:p���>���jvq�P���u�:@�Pv��������J�Z�IEND�B`�
image.pngimage/png; name=image.pngDownload
�PNG


IHDR@�r/sRGB���gAMA���a	pHYs�&�?hTIDATx^����Uw}���g|{o�������Z��]��]�^���Zm]�|e��J�hh�N��$%A��4�%�D�:Q��$�B1F�	�\RL�A$������	
��t_^�{���|�>����?���>��}�9�����/?�����o	�F��h4�Fkn{����(D���h4�F��h�js�@38���C8�8���C8�8���C8�8���C8�8���C8�8��}566�,]�4Y�lY299��z��s��������h�j��Km������fgg��+WF������#������k��<9{�l�eg��$�����_
��M�����]����tr��w&SSS�+��i�o��d��5���M����<����W�.4�����u�/S������������C��0�E���$��z��8l������}�o����+v�/_��:u*}u>�����X��+V���G�


e��,E������������U\;v,9~�x�Wy��������]0�t3����<��!\0�p�{>7o���������.��
���p���
��U�\�����*�}a�����b������{�=������Ia��n�S���V��n��������~k��D��~��i�k������h�M�A���v���v���~����D��G���R�pP���a�b1�7V��s�=�x���f<>[1��u�u��/�B����Q+r�����V�~������'+��L�Ax��cY�lL�w.�<������t�b"�/lfE�/���Hqd��^a�6�a��p9uI�U��i���,�����}�o(��n��oED�z���|V�B@��MC8���+�+�}������'�8��`��u�w�K����WQ����**P�����~�p������eK�0�u���_��q�k���w�"V�X���������8;����8�O�Q�i[��e	Y�S�b���\8]�z�w����
[�y���iW@��:�,\�t
A�}�|.����-��]�/Y����n�S�O���/6�B�X��|ol�f�{_�����VdXc��^�+�/��EXd�[��o���l�
����/��ao��i�H1W��������j��i�i�!oY�������p�=���m������;����k�P��
?����=�������"���~�e��?+l�|�
����_[������w��p9����P��w�����o����F�;�y��?w�lJ/Ef�g;YNCY��]/f��*F��~.��|�?M�{�o�������2���5l�����+�/��,kj+�X�����b�>g��6��B$�l����B�~S�"�F������Rdl�g����$�������?^��o���a�c��_��V�6d�1���>8��z�V��2����*�������6Eu3��}F�=o�:a�~�������G�,���\l�f���lJ/Ef��YNC�����������-64]zY�������+�������t���u\7����t�Vb�J9�uc+�p�h����_��+�v+n}���iMq��"�6.�(x�������?����~���������N
}�����>/Y���8�l����;�9��z���B(��MO�n�Z�q'��;y���w���dbb��w��?�7�<��<�g�~��w�\����Rd��l��4&o���ew���N�a�����v�)Y���a����t��p��e��6��������u������
=t��IW��o�����N����W�����hdm��d
w��&+����q��q-2��_���f��BmT������M������@:�wl�d��~(2������}Y�~��h'k����l��"���������E�K��~����m7�%k������/��I���_9���
 {-\!�^��x��YT������!��8j��.V�d�6�b�\/��H�5��n8���?:7��o�N���q�n��t���u:���OM�;<]�WE���y�>�s���?�l	�E�7�n����l��n�H�e���e��������7�����t���/o��t��p������V���c
�>\��J��O^a[�}�Z��a��
�,Y�"
��Y�o�8��O����-��7����NBg�v�X�(/2n���w�������^�0�M���g�-��	�.���z��"�CL/��J������c]�f!�'�l�c+�p�o�u��l��I�c�l��u�o��*P�l4���uZ��={��NZA�������0��+��v�~	Y� o�YD�i����Y{�}E��Nt:�
�C=�R,����	�����5��l�v�u7�&���^���i���%������,�b+(x��i���b�/^�
d�$�!����`Z?����]�fy�66N����a������������_EB'�"kS��u���X�;�6��9l��;1/v�(�v�(O���5�z��y��v�,2�f
K���_B����{���"�6������^~o/�-��>�ll���t��p�����]�`�Ll�oL��?keh��}+@b���RnW���#��B6E�����F�~S�o�*@���6f�8��S�����n���a3Y�n7��L�A�����M#�������u:�d)2m�(2e��E>�%���v��b8���"���r?���������5��,y�-���B �+������Vrj�
���=�&kEj+jQ� ���Oy���x�o(:�px�m4��g���
����?k��������3�0�e�i��i�o+2m���y���������SD8������w�$k����6����O_�f�v�����M�]/�uN�m�c�����e���������[Nc�����e�_�}��7k���v:��}V��]7�����o��V|�_9�6�����������}�NE���>r����J�}��V�j���$��vKK�&V`��h����M�)Y
����SV'6�>o��������:�p����W���O�����~�c6��+���^�w��Q�+�����zC���{:yZl�Am���sy�O�e3kX����"��r�����C����.���:���.���^��M�N�j�I^�f��B8@W��m����
W�~�{�g����0Rm������o��~����k�����h����6@v��~�
.}�������d��~G�!W�o��S�����>�?vaj?6���9�b���y�_������kY�7K�y'6ol��q���Z8�g�
�������o����w��c�3��y36nl�g/�f�zC�e�%���z/��b�.�!�3:Ze���jy�������������V�Z�u�{������n�q����@��1�����O�7��������.R\������D+�N���Sc�3�FGw09|�p�e�"
u��&R���a� /��;�8�
f������q�
Y���yNQ?�a���E��~���u����2�pPt���y�]������v��;kY������o�C�Z�o���{�-�z_�m�����a�wj���������u��{[�4��HL�0��e���{�i��i��
u�{M7���^�q�LW�_4HX�/���^�!� �y4�@�
B8��p@��!p��p�!p��p�!p��p�!�y���KFFF��K�F��e��M�6%SSS�'�)��;v$��������k��<9{�l�e6���5k��c��U�������~�������p��~��kW���s��������_�7==��X�":>�


%�N�J?�j��}m���y�����p�p�FGG�W/���q{����"LNN��,�C�U�����MV�\97�t����+�����YM!���h�l��e���4��#�y����EnV7�������C=�l��=}ep����*����{w���Q�v��s���������^D8�|�8�H8�2���}����9V�/_�<��!�����k	���l��}���=������ ��=p��+p��5��6O���{���=:�&���o���=����]���k�����t�=�zO�����@���E�A�n���� @>�����}�^WS�lE����9f���s���;����\{�������}��������x��{-,����g� W������f�;v��Z��m'Ey^��%/P ��+��N+���m���N����XA���3����N+�����7,������H6��n��������
���m�
���-z�?,�o!@>���.�w+R���~`�]+V��y^���s���dbb���v��/�c����������5�P����=�(�5
Y�e�w�d���#�y~a���!�
����~�l��d��
YG@�@�:](+���^�����$)$����!fa	��p^�p�>�����&��������K8��3��AVao��uw�qG�����`�SP��q���,,����E
[�K8��?��Z�A_�]8����>�E���EZ'�Pl<����;9���:C8��+u�����������=~���i�~�����E�
w��o�����{�8o���O�?����{��(.�.I:�����~�S���o,2�!�W��I�S����Q��B?���p� ���6d����� 9O^��.����oO_i�H8(2��N�k,��E�7�{��#�y���"�V������Q�B6+d��}��sOG{����v��~��	=��G��>o��G��6�j�� @>���m8+Hu�lX��=�
��>y���]p,�gcM�{��"�@�a
������G�w9r$�	�"����z�aw�4$@>���K8�g��TS��/�c�����t������k�����k���j�-j��5O~�p��pXc�Wq�X�4��N���V^���*�������������N��9p�@����=�@���7,��|��S���w_�+��;���"�h80��~�Q+���\�pX0�������Z�9!��#@��u��~|~��2?�����p5b���]�+u	b�#(=�#@��{��N+�����,���]@�"@���jo�=!Y��N�n����A�s����'O&[�nm�hX��p��4��^�#p��p�!p��p�!p��p�!p��p�!p��p�!p��y���K�.]������d���MV�\��^�:9{�l�j����$k��u�QJ����w/*�]?���pp���d���s�u�p066������{��I���������'�N�r�H����/��
�rE��e����w'+V�h�u?<<</�����>99�������~����:��pp���������E�j�=�p��###-�������3}���:PDc���]8��{tt����;�����;;��Hw'N��[�8��"��.�������g�����A?�E8@����{O�%����'h4�F��h�j�b�'D�Ax:����:�Vd��F��h4�\mP����H8�^x�H�NLL�5����O?]���"sA2����p���������"��)�������#�H��;\Q�i�&������.����V��{ Y����/��YG�������q���CE���T��EE��g���\D8
�����W&�}}c���
���oK�={4}��@g�N�o\�<��O���.I~���iW�F8�P0Px��K�O��-���g���s2Y���������=M�:��C�=s����d��'~9�)$��p�/�a��j"9�<6�
�
�?��]���.=��!�T5���]�
!�kO�}{�����OU��������C�D����_������S�D8r�y�.w��#;&������D����X���[�
j_��f���<�~��@�������G�mL�`pt�5����2���@�����k:�����7��~������"m�.D
���0=�z
~5�`�U���!h^(����O�.��p�x��m-����K�w��p����k[�A�����pd�����u�����?�vQ/� ��C�[��������:"N���%T�)�y@]x�]�\W� ���?l	jux�Y���77����]��[O� �����_>tg�n=�@����#�&=�G8Mz*��px��Td��4���>��i�S�}�������,]�4O_�������k]7j�V�Jv����{�����n�����������t��~�3M{*�������s���[���X88t��{OE��={����ddd���{�n����l�r�JW����{����/_��:u�u#E��g���&>���p`E��e�\��b���p��� �z���������������grr2�"I���[�Y��~��i�S�}�
'O�L>���UT���X�=66����3g
�"A����_@1M|*�������w�?}�������)@�i>4��;q�D����E��z*��g��]����N���������.���������A?���p`��F��h4Z�O���-��?o�4��b�A��
����F��F��h�z�#����p�c7F�]�6(��A�p���b�:�TW����#��.���Tw
�oP���"�qA2���z*r���Vp��
���B�n?��~���S�O�}C�ns4:9r�=�l������i��{����}�������m�{/l���+��=��Hw����=�W��6G������5a��r��Dy���<33��s{]E����{�W��~��bOE��My*����h�S�}�4Z���g�+}�Yh,��<��u����`0s�;�w��p����W������1}�yh$����p�F:���[�A���#����04���>����KZ�A���#�q~}xK0h�S�}�4OE�#�q�}WK8h�S�}�4��~��>�G8@��T�l�4
OE�F8@c�T�|�4OE�G8@c�T�|�4OE�G8@#�T��h������S��#��x*r1��OE.�p������Pk<�8�j��"G8@��T������/Y�ti2>>��2���L�v�Z�����P255��{A�nd���t<��F��s��%[�n�+�c�`vv6Y�r�+������������/ON�:U�Y�~4OE�Lc���C�\ X�lY�{��d���p�s�N����d�J�LOO���H7���h:��������'O&�v��*�udadd$Y�zur��������9s�m7z}�����T<�3�
��p`�������\466�N�9q�D�nt��B��S�@��T���kb���������/��_�6O�h4�F�U����i	�y���n����O8 ��y�F��h4�����������1�m���X�	�VP<�;���� �^x*rw�e��i:���Zx*rw�9�LLL$;v�pE��M������O��Xp�=l�H7���h*����F���oOG�[xZ����+��}�SSS���F�_M�S����p������#�Vx*r��
����j��c�-�@GP����;�l	��PYOE���P��}*��K�wQ���S�{G8@-�����	(�p���|*��i(����������Dr����4Y����s:S�p0==��_�>���t:t(Y�t�k��-Kv���^@sE����x�.�*}8K����������s���������v�_�z5G��"�O�����l�r����:�p�W�;��|�����S�o4OE��J���H����W^I8h���]�x*rwJ�4�������������4�o�?�S�����@v���.>^�b���?�H��a����[�OE�^����l��5Y�fM�}����G
ta2�4OE���� �����%�T��PI�?~�%�T���>���$k���{�Y���)@3=���-���"������P��q����;�hiw�y'w+h��[��x*roJ�9��)`x*�`T"��K9��]-���"����@���x������Q�p��n��Vwj��c�Z�����.�<ypJ�$d�V�S������V�l�2�V��"N��A�V�o��dxxx�H���P������^>�A�MMM��^P��g����"N%��b��h�������iSr������#��-[�k�o���}��=���{]����T��g����"V����@_���NI�W��w������&�F��499��r�Z�+V��(����_u�S����@���nE�v�Z��	�wVwz���3m�����@�T��*u8��g���X��4�7><���ko�1vtC�B����m��0��_u�S����@{�<�LLLd����tO�.HV@�0�`���
���<:��/�����A?��6O�h4�F�������`��G����A��������u�V��8p`�����F��h��iG6��%���h�uo�b�'�.�=t����E�<�������0tQ�6�~8��E���@��T��A8��w�@���%�K���g����"/�A�����[�.|����4��+��JV��g����"/�A�[�������V�Z5�nEF�cP�n��p���J���H7��~TOE^8�	'O�\���`��T��S�p`�����q*
@��T��S�p`w����w�y��<
���"/�R��������<rWK0xv�]����J����P'o��%<�������R��=�cO@��T��W�p�[v�z��������9x*��+u8���bw)�������"/�R���HO%����w+�'����J�L<yqP:<yq�.�������$9y�d�Bdk\�P?<yq�*���"c.Hh���xJd��}��m���� �y�OE�xY�.�t���S�����T���0��D8@i���|b����4�J#�T����K���P��"����A�T8�3x�@=�T��W�p����X�b�s
�����k������=�[�M��B(}88t��
_����+���=IYHM�@����������Q�p`OL���l-�p 
�W��!h��T����I��B(u8���uGv��pJ,�iF�.��\�,:��\�2666w����#�9�6=9j<y��>(�����Y�,[�����������KT�.:�OE^��;m���k�{���T���c������8*SLt�b��]���;�nhh�%��F��/�2��x*ryr�)M*�����LLL�����������{]��_,]��g����"�K��A��<l�,�u1t��;w�������`a!�H7��~��s�6�����xJ��D
7nL�����v��w�!h�w�]�m�1|����3g�v����/�*���a8��������h�>z��B�=c!����-U����'�v����@��0���`��S�O%�A�}t������[�);v*��M�����;��
��n�p��~���4�F��h�h���dK08����vK����_�k�7|1tfG�t��]��c�����F��h4Zw���w����_Y��6�
�����@���z���>v�XK;~�x�e����Q��#+�9��8��\N���b������{������(3��\N�V�j�B��(����;��D��������_e�S����� ���`��4���?�'�.�P�"�H?�PF<��*�nEFa[�~��iL�c�m����	���T�OMM��^P��g����"�W���������&��\^��C�����kA�V������U�p`���3��y���S�����@w:x���8�����[wT�/��%<����],�R�����.o	�}ss�.���"�_i�A�S�b������"�_i�A���c�����"�_i�G���"WCi����"WCi���V4>>��������@8���T�j `�x*ru�.l��)z�qV��d�r����Q�p�]i^�V���S���t���{�I�;V�?~<����"WK����OE����"WK��������������x*r��&�^x*r�0u|*������{����6�������=�%?{�H�n�0u{*��O>��b���Y�������������Y	���=Y�@A�%��i�f�P2�����������$���F���&T�}W��"�T�?~�_8��d��/�k
	Kn}�����&��.�Td�*���_q���;�[���/��6���C�2��*����?M�����?�
!�k���u����~�����=��-�$/��%�@����s�����~�����S�u[�����-���g�7
�~��/uA���S�W�\��^�:9{�l��333���k��K��644�LMM��^P��g�R�S��@��}�3.��'�DC������7����S�D8�����+��p`�A��={��{���}�����S�
w#���B�=Ya��OE�[�Z�����nc�]��d�m�M?U]���:�,[�,n	;w�t�MNN��$���t�b��d||��]��g�Z���c���V���N����������(�����o�S�W'-������?�;w.i	��g��i��^�g�C]��<�����?�����k����p�b�u.���k����p��������0�)>��O��T�'N��F���_-�����i����#��oxs4�����]���
����Y� v:�}�
��n�p��~���4�F��hE��{>��lxw�������n��zK4�u�;�<�����
���pa����;}�p@��h4����p�����M���F�.b�[�6(��A <��d�N+M���3-�@�JOE�3
b�@��T�& d�^x�H�NLL�5�������zq?�����T�5��
�(Y'7� ���������� ��L@S�b��-��*OE�����`����v�MB8��BC�w�
�����F��/����M_wIK8��S���s_4��hMC8�P,����+����
�������t#�����=��%T���*��=��k_|�+iW�B8@ON���%�����f���:��y�I����;e=�����K�j&�:�[��j����=7&�zUK8(�S�O=*���Ko{o�Us�]c0}���@p,���m��]���_�M�|��E������o:�
��������S�mK>�������L�����7�3
+���C������nz�;��
rOA�a��~{2y����vm�����0�T9�Z�X0h���� ��3�������kW=�3�M���n�H4��d��P���TGb����k��<����S�����D��nc���=iW0��g�$��w��d��w��Z<���Z4��=�"��3����|d�D4XS�X����=�XGG8@[zn��?��.<v�{��@�_���9����O.<]G���3]�l��:��Qw���~k��G�mL�`pt�5����2�������r���A8@��?�������(����/t�`�XOG��
���X0�3x�Y{�D�5���!�|�m��'���q���x0���S��������L0(�p�y~�����8
�����=��L��~�S�x�qq�������+
�t������]�C���_1�:�~�!��v���f�9=�v]#_�t4�6�<��s��^_����t�Q�|���d=��#4�
�����k
e���+���s_�:E8h(�"�S�b�@M��T��������o����+t�p�@��X�B��.J���e3����O?^s��iW���atR��4
��x}��=���-��]��������g�af�`�����p�E�/8{hw�u�����O�;x�Y�j���?LN��4
�fnyG���O����=��?t�����iW��@��j�����\�����i��3t����@%��d�������!�=��r��3�����)��pP3:p�����@�]_������I2�5�~<8��68��]�6Y�t�k�V�Jv����{����������������t#��h��__ *��r����p����C��V�g��dbb"q���}�j����d����@Ww{��u�Y�|yr������t#��h�v����+K}}��:�t��p����s.�^�:9{��}sc����3Y�lY299������d��������H7��~��x�������?(;=�,����0�G8�`{�c�����\8("��9S(h��_�t$@w�5I����-I��~�[�ba:�"FGG�..R���>'N�h��N�g�@���]Cj��@� �]�����3�~�p������#:��/�����A?��Mw�]�b�@Mw+*�����m���7���~����o�~a^�p`��F��h�r��_Y
�~���D?W�������W�>yd�����W�[�	m������T�~��l���h4�V�����%G>���@���k��<�%��2����h0��U�L���}#���6(��A]c�u�Vww���
�yq?�����Gs�/8~�������]���o���t�S{����9��o�Q�~�~����0��'r�/xv�e�oN��]���{�
j�������t��,�"|��m�ha;~����
�����F��/P}g�+���w]��f���/���_|�+iWX,��vW���?%yff����
�������t#���&���>����3�U��=�8�!g<��%���}W4�U�����_1��h0��������%R��D�*�z���q�� �D��t�Q��/=�,���z����`�������@`M��j��~�#	<��|�H��T�X P�)F:���t-A,��]���!,]T���c�@M%���*���b�@w+�]�PN��E����v��P�V����Wz���s��",��^_`���X0P���Qn��R�����.>d���Ow���m#���nN��s_r�w�g>�������D��G��Xwi4����������]��N
z��k[���������j ��&���`���o�?�v]n
*�_r��&kv%�?�=��?�L>�kM���^���rM�IT�`����!�=���i���S��x��.|��g��G�4�)$,���s�@�8�!g�B8	8y���@���/���i��`w!�y�pK0������y������
"�@�������%x��m���Gks}���	��������X0���5�$o����O�J]����#1;��U-�Y��WV����?�H6~ks�����\f�
���/���~���7����O��@T�?��%�����|`�3���9����C��ozgK(P��������Tc]'�u;Rk���H4X�����+�p�!�J��
K\0�����{�������k�s�@w*��Ge���u�!������� ���'�DC���������!�kt��.t�owE���h	��z�g���y�{��b���*����K7����������t�1
����y�;��j"T���b]d�;��(�N���X0���?�-y�S�N��p���Cw,Y���-�;m��@��������s��(�����o�RT]��h�>�?9��xr��u��
���&��w�2wg�A���G�����\}�u�B`+�{i��������t����o�H�%�}}�+�_�B�	��p��/�&�?~"9��]���oH�}W��/��}���#;&������K�_�]����Q���]����Xq�iS��p�����f"����Bt}��s��o)�������P���/nv���Agz���oq��h/}�����t#�v���:
	��4�9H�U�3�>�k�iG��NC:����������������k����=c��mE�6]��������\�,�P��T����Z
�~4]�����7�[���6���tz��k�$��5/O>�����W�Yr��_�|o�+;z��=c����f5�K����u)P�������VQ�=�����g���v���������B88<:��*�������0���������g����:���

@��/tj���B��?_����;�����cP�M��b�������0�-�*�_r��&kv�{���w&���&���7��t>�N��)=�����NA��pz�B[��������s����_}(���������1�M�E��Y�D�Y��"T����k]0�����{��B��[�-��i�Yw&�E��8�����?s����w����{��������vC��w%y��O&�6\-�����x�

�� �Su��V��>{�+�o�9��}�G��n~�+��6���n+{�0(������I��]�,]������djj*}�����W���?J��}����]���w$_�����O7}�:Th�M�N��v��W�����&���%-���v����������^5�������;�t�vt��_��t ��oM����]k����#�``�O��&����v[Q�1��D8�����d���.���'��w�
��/ON�������!�T��i�����&O��sw'����(��5����?N�7�����W�7�l���_�R��?�a�����]�������W�v�~����������U�������I�����_�|V������s���+�u��_�����?��~��G��^��7E?�b��(�A���3Y�lY299���$�����+������jY�
i4q����n�/�
�U�|������n4�5�/���������
�-���B^��������m��<_v�PV0hw��g���|E�����x>0Z{��?I�v�����
�����&/��+���2��~o�ex������u����d��(3�A��;w.IV�^��={���Y�WA�
�?�+��>�8�L���N%�o������I������cb�t��n�����8�jO���]��nW$?��?��aS!�m�Q����?W��P��|��0
���2�?������}��p���P����S�FGG�W.���E:��eW�����n����?��O5�Mf5��Y����"YM�56����_�����)Kv*�������s�;]���U��E���={��A�X8��>�������������&7����F��lU[/����6�~q����+�"`�������Bg���GG�~�C�p+p
��pP1l�d����t+�&nH��8�L�xc����\$�=��������ko����/��k���dr�����{�ns�����������coN�h�����������h�j�b�'T�B�Vd�� �eyc���nH�X@4�hb��Er�Z���_w�_�����y�����y���At�A��.�A��*�n$��+��������oH�w������&7��Y����[
����������7�E���~�u'O��N<.����pPAu��iS7�Mn�u��������]�;���S��"��'�~m�u}p�=P��
� P���5uC���fZ7k�����6���d�g.K���_=:��M��v��"�����5�q��O��}���r�{��.V(����pPQ333.,]��5������ji�������n�pg�I^ua���'Y����b���e������l(3�J���&7��Y���d���p�!p��p�!p��p�!pXT�N�z����f����l��1�����;v���������'�L�?���G�u���D��������{�u��	��9�|���w�v��[����I4����'\��o_�j�=��c���[����YSh�n�6�p�E��l��5���K]����Q<=�������d��U����~7�u/"T(j�mz���;MSm@m��6o�\�i���m��]vYr�UW�~����2���[�����xRQl�2����F��m������n�6�u�u�
��������>n5
�<��[O�,8Z�ho�B�6.*�Q�3�`4�V �i��V6������o��L5l���L�@E���
G���yZ����8��kZ���1��!��D������5��*�5��e����X����4�|���|A�H�4Mw�mZ�C��k�(Z�5��]�>�	Xp*�T<�{�t�R[�i�i�WM+u��IXk�Z��V4i���P��u���")��T���TW��
O7�2���:������i:k�r�i}�>����u�������XP�l��-�u�n���"�F��bB����F{f�F
������5i���-<J`���]{��]��4���F�(���^g�P��C�S�N��N�M�p>�=�u�����bJ�_���������5�!���\0j^C��YaP������{U���p���Rh�+��9k������xl/�����:m45\a�\��&��ER+U(i��uMo����t�V��i�^�BI��1����6�����5���j����}����P�^Q��m��"���,j�UHU�_��)Dvz�Q�+$�B�[�jm�4O�uZ�+ k����B]���I�n���SOXpZiX��C��-x�Yu:�&����l��Q7uvMK?�t��`�P��e�"�`��"
X,��DU�w��L�MgkaH�
nU�;F���p��Y�*
���5�
tt�?��u�����A���s�n�y_GJ�p����EUiyU@�����P�vWug������xi�5M���m������p�E����@h�+������E� �����P����H�I+���
x�n�=��45>4��(I��qP�����pZe�N��F�/<�B����?*���U���1dGV��!�Sf���Q��C�j|izWm��e[����5�k��8�p��;
�>��}Y��anw4[��Z����*�������4���X��y����_>��q8�n�E�K��Z�W	��NEp��\��
-lU�a�
��V ��S�m|����*l8�lo��!��!�}��+U<YE�ORuk����QC�y���;"�����Pv*�����^Ec����8�U������MS���y;|�>��*��i
C����q�V�q$nM�"�����j���G��e5V�����j��N�O[��*���!8D8����G��O�VJU[�hE���6�*t����6V �L�~���~�����5�X��P�0����W�M?
���]!�q�������h~�b96�V�!�����P%6�9�p���I��'v���_����l���-�6��:@�L��<��\�������V�jx5.���j}lG�4�j=^O�m�^��-��N���O;Y>m�/uB8���=
Z8��Y�Q��A
T@����J$k#a����@4��b
i�b+P�E��n������;�U �@�V`�@�x�r0�~{+�b���A�����W�x��4�����5Ok���`{W5��e���a��k�k�W��Tw���k��Wm�m~�O
���,�^�h���e���<����C����m�m��>��p��;<����5���Y�i}V�` �����B��L�!�
m�p�=0�Hj�b
�+#�r�j0���#�p�^T��i�������0�"�]@�t��ja�QE*"l~����]���-��������i.��a�|l��?|��~���F���K��.P����k���q��VX6�b��m���W6�Y��Y�����_�6|V@�N�*�p[�������������g�z_�n�@@�
��[����
U�V0j��\#uS�` v�Y���
m��-���6�~������Uda�/������.l��.�(��
[�5�6>4�����^
��t�0���~XP �k

u�U�izj85�cTTW5��������{
��mV4��U����[��y\�3'�^�v�vhZk<�1��#m���6�Z����X!]�
�Q�nc�@+Y����T�"A'4~4�'u��[��oD���<^�S�b4�*T�k�e]�i��
*
{ ��� �cl�l����A�;��:�^���N�eU���f-�Vi�|o{���B���X����lP�uy�p,m\���Q���U�c������/���
�����A�L���m�p��PSn�'��cm4�aU�a�b�ph������_6N|zM���l�������^S@��-�kz����m�j�5?g��V V=�j���^���_�F���8.�\�u�@Uh�����X7
Cz/\/��X`��hE��S*�r��(��p u��(�}N����@V������5,�9�*����7�X��56�4<a!��WE��	���k}�/����O�~v�a��k�r�k^	�Rh>��X{�5Mm���'�������y�U����V�Q!���p��8;],��v��*$����.�*�mXd�Wu�`����V&Z�j�V0U��`��Z��`$71�6���V1�`�o�����N5P!l����DU���(��h8c!���*Ma0�%�����H��>_�bQ�;<�g��g]�B�?��jl=�����������t6zM���U���j���Vu��Z��e����� mh�<e������"�(����Z���]U��b7�:����4U�V\W1�M�p��o����b{��U�i�a�q�4��[�n5����ige�y\�[Wi���KW�U�` ��������k;����W��~�v����vh<�<�y�j�r�aP����2����q-#U?Z�	�0`��j��BR+��nDE
�	�M���7[���f��^�tU��^������FYD�����8�K0����h���Z&T8��*����;k�0W5���[���?��e��>���N��pi����p>W��O4�U�s�O#-�>MW�n���� 'jU�nw�p�0�L�
J�������Wu#*.I���
���_0k��W`T��I����\�����!��U��[vE;3|����c�e�������d������n�����`�@���:��g{_����p��X�*���BKI:'7v���e��)%>M����0���6�U/���a@����UvMK �yG;4��>_�������pO��}`%�*����=���5��A���}E��2���m�����BS��*0�1���4F��B9��@�	7.U�B��!�i����g����p�8��)�8hW�|����R�y�B��c�6�j

Y��,k�e����5�Z�cA�N�"�&���ja�
i���vj����Zi�c�m�:-��@_��DM+�:�u	����j���@V����6���j���Y���5�~pP!U����i�U�i�Uk��\ph����@���m�����(k��<�q;rT%F����q��n4������W�z���*�i�n��<�n5��!Xq�aP��c��0�e�'MA8���h�S�`�S!amPU4W�xPQ�i�_L�������k
���S��S1��������|����Z+ �Ye�=�a��BP�T�������0���5,
@V ��!��*��4�Z�5Ly����:��'�z.��4=�@��D��k#bM�e�[���YH� V(�xR����U����=M3�
����R�T�` Y�;|zO�|U)�j9��jG�
@M��j|Uu��)�k8�S#/ ��@���4��h�i��e�G0��p�g��T��D��FDED��Qef{��S�DJu�bI�g��B�]�=�*$���4#��U
��O�C���y]�^U*5]E��H@���p�)����`����@
�vXh����M�� @C�{T}:����@�����;�@`�A�����S�iX5|�X8P7UB>MW��kZ@��l�H, h���u�4��5S�F8���*�bQd������].N�]jtTA�D�����.*�i`�N�xV��v���=�hf, hY��*�0�p+�,[(��iY�����r�# ���j�5���T�#�QA��*�"�NT4���o
s���e���BH�_-v�O�WE�X���_�S�l>������n�}V�LEs����r�p+�����A6����`�a�i�����Y6����Vk��yG4N�#(�F8��B�.P�s0�Ox�@��
��M�*�U��oMjY4�*,�l��?��-xm�y��4�V��~��`
�5�:�b���h:W����C�(
��E�A���E���N-�q�l��<�'������PQ�bR�.�����^�0h8�#A!��LU����
k84]U0g�<�U=b �w���a���O�Q7~0�*���������/k��������V��<����o������������E;���bJ��mh5}���*�4�U
�a��]F�WiZ����>�U�ifw"�i�4���g�����l�4=5�Z��a�'MX���p�����mDULT�n&v�%+���
)M

v~����*���n�i��_
��S�H���?�����e5�vz�u���a������B��g�������^H��<*4�x!..�*���~��s�U\�w����1��b�N�TP��s�U�iS���X8���9�*;����B�;j�@�y\��s�&<'�Jz9�K�N��";JP��W��p�3:�T�i���.�W��gG�4Lz]aA����I�����s���h��
l�p7E��q���y,=�O�����*T��� +���!�)E:=L��)��i���G�P���OR�=�*����*Qq��H@P��ktZ����y�e�i0Mc}���@T�������)���A�#<�;�j�.�����[��P���z��k��7/ ���F���k/�@�L�=<���W�@�5v}�^W�j0�nM����^��Y�����uTH�j��t$t�p@�i���H�a�{b�F{�U���vA��U��D*�m�;|�#A�[�W5���@,�Z@����l\��*�:V&�Pzv���EB�T�
y*���#��ru[�` ��VM��z�N������GV@P�X�k*�X��b���~T��B1
9���,��4���p*+
:�P�s�5<��)3f��#U��g�FMG<�b?�U��p��T��T�V7Y����y�v�@�H�N��JudD���������?�9�?��<]�������#V$��*����jt�',�5�;4��u�a�#
:��E8�f�5!h/�����B����;�N��R��l;������P�T���&�s���]-�a`e�p� R0��X�8Xp:%H������r���;R��#�4tm�Q(�u\c�0(
�5!,<�JC�)���p�[����p@0X<�����@0X<���C8�8���C8�8���C8�8���C8�8����;w&��-K&''�W�gvv6Y�vm�t��dtt4}5�uvz���&Y�����~���+9{�l�j�����C��5k��~���+�@8PE���A�::�r���#Y�/�}���#�w�N_)�AL�c������ @M:�����\��:.������NV�XQ��^P�
V��! �u\@8PE��	+F�.��]!��m���Z
���5,�uM���7�F��������PYm��U�����|���������I���K�n�:7,j�vjj*���5z��f;�a���2E~c/�L
�����N�r����s���~��N�w�q	�	PqV����M�6%���{]1������#��;�k����g�.��zM���(U1��v1���p�q��d����;Y7��ms�9p��+h�b:*�<�~�5������(:=��o�i�����������@8��P1��0�cl��_(
{M�^�#a����cE�����W��w'$�~����������/�{Qtz�.��
���p8�K�q	�����?V|*�w}���t{���Sk��,R�[����{����y� 6�����
���Z8^L'�#y���N������DV1�k<�p��~����^z���e��]��������w��A���N~cH��OWR�:g����������p���h7.�p5�U���T:����h8���[��o�
���A�����p���h���Kl\�jB�h�H�q����(�m8���_�Nw1����������0��AV`0Ec/:���5M�}���]t\�j��Q�*bw��;�����v�����~�zwg���4����NYQ��;��5ox�p`{��?:-�������O������o�E'�C�w�3�����~��V�5,E�%�&�h���:�\E���y����
Hu���V���?��d�.:eEa�~��
d��nDE����n���a8��c�/����^t:=D�D�d�&�O3��"�Rd\�e��,�T$X(�J�N�iw4�p�"R(���v�Q�4-X(��!r?�y�n8���C8�8���C8�8���C8�8���C8�8���C8�8���C8�8���C8�8���C8�8���C8�8��s���ddd$��{w�J����%����_@����D8h��O$�}}cr���]{n����N�]8������+�������v����X�"Y�|yr��������x������g�W�9t��@~� MOO'W\qE299��Rm������6���������nN���o��,�@U����.<��O���w\�����i���m8��R�@�;~�x�j�tlod�wO!f����_�c����V&g}��������m�m�MN=_�b��r
T�!� ����Sr��u����&G>|�{�����]^��@{��-[6��ha8�0�wB�m��=
��v��Y�����X����]2��k]{���G��k^�^�t�;���oE��2`9��p���C�]���@��'~9�
=t0���_�n�<rW����%���n�AOU0�*��������_!@�`��/�k��k���_�����-���OU	,�@u��N�9}�����K���w���u� �6��@��:m�}��>������_d�	,]�4J<
~wj�6mr��Z���lC��|��y��i�^����X@�������:b��W/�N����#���k��k�c��?���}�v7�[�n�����L�~�����9�_����*�t����K^}�����w�t� �n�9�L'M���-�$��.���7mB���K�������U��M�N�����~jj*}������/����<���kjY�HL��i�z���u�����E�)P]� p����x�f���o|'�>�����u�t��O��������c�6�a!bF�;�p�<y�=
�����>g����U��v�@��~�o���[bE��4
���?��������~�}�3��������S�k/~�K���K�����8XHW�u]�/�~'���O|<��r{���m���h����qlE�_�i��^�i��h�b�����G���Y���E��P��S�����v��Pl�%|��(�8~��h�i����h0�v����~��fl�^n���p�N/rj@�;�CawEN��g���X�����cb��~��W9�������b�~]���}�{#�``�w�k��Ll��M����^�ez���p�n�-����~���d�����v�����x�S�|@@{�cx���[���5U�}�����L�F-|���^�X��#+h�����Y��5}���-��������u�q�=����7[
��.:�'>V�w�>���h(P�Q��g�i:���������_~��_����}��<[d�i7�����~��V[?�-�[�?�S��@����&3��#Z�i��u��U��,�������j�g;m:���M�F-|���/���ax���F�
p�b(��H���,v�at:��;��
e;]a����7���h!�I�E�_��m�p�g�\���S��m:���M���7~�L�����Q����|[d�)P>�������T����������oO&�6\1W��.&�E��0���m4u�	�A�
p�b(��H��b��E�?�$6�E�������T��+o�d���p�3��[�:W���Cl���!o�����_��������O�����S�p��5,�@u��}8���s�?��7����O��������#,D���tQ�����mH����Y{�t��6��8������#�����(��p#n�NuZ���/6.��Qx�����U;���z���_��W����/�6��t��~\�\�_E��v�����n�-�������~]��Rd\�XN��"����m������R����[��V�*����7���Q���i�m����om@���7��(o��e^c�Ak���nl�n�U���6�a���E�������1����W�� �ah~H���
��G�Ms*�m�n3���-��p	��v�Wty(:��[Fb����l��zi������E8P9*�
���B%h(&Vv���B6�S��*G{����������:�����^{���aa�{������D8PI:�"<���{��=�A5���C8�8���C8�8���C8�8���C8�8���C8�8���C8����F��h4����p����4�F��h4�i�G?��p9��M(5MIEND�B`�
#4Kirill Reshke
reshkekirill@gmail.com
In reply to: Devanga.Susmitha@fujitsu.com (#3)
Re: Popcount optimization using SVE for ARM

I did not yet look into this in detail, but please note that PostgreSQL
comments style is /**/ not //. Also, please, do not top post on this list

#5Nathan Bossart
nathandbossart@gmail.com
In reply to: Kirill Reshke (#4)
Re: Popcount optimization using SVE for ARM

I suggest we move this discussion to the existing thread on this subject:

/messages/by-id/010101936e4aaa70-b474ab9e-b9ce-474d-a3ba-a3dc223d295c-000000@us-west-2.amazonses.com

--
nathan

#6Devanga.Susmitha@fujitsu.com
Devanga.Susmitha@fujitsu.com
In reply to: Nathan Bossart (#5)
Re: Popcount optimization using SVE for ARM

Hi Nathan,

Thanks for your suggestion. I’ll move this discussion to the existing thread so we can all work together toward a more efficient solution.

Regards,
Susmitha Devanga.

________________________________
From: Nathan Bossart <nathandbossart@gmail.com>
Sent: Friday, December 6, 2024 21:09
To: Kirill Reshke <reshkekirill@gmail.com>
Cc: Susmitha, Devanga <Devanga.Susmitha@fujitsu.com>; pgsql-hackers <pgsql-hackers@postgresql.org>; Hajela, Ragesh <Ragesh.Hajela@fujitsu.com>; Bhattacharya, Chiranmoy <Chiranmoy.Bhattacharya@fujitsu.com>; M A, Rajat <Rajat.Ma@fujitsu.com>
Subject: Re: Popcount optimization using SVE for ARM

I suggest we move this discussion to the existing thread on this subject:

/messages/by-id/010101936e4aaa70-b474ab9e-b9ce-474d-a3ba-a3dc223d295c-000000@us-west-2.amazonses.com

--
nathan