�����JFIF��XX����������    $.' ",#(7),01444'9=82<.342  2!!22222222222222222222222222222222222222222222222222�����"����4���������������������������� ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������,�PG"Z_�4�˷����kjز�Z�,F+��_z�,�© �����zh6�٨�ic�fu������������������������������������#ډb���_�N��?�����������wQ���5-�~�I���8���������������������������������TK<5o�Iv-������������������k�_U_������������������������������~b�M��d��������Ӝ�U�Hh��?]��E�w��Q���k�{��_}qFW7HTՑ��Y��F�����?_�'ϔ��_�Ջt������������������������=||I �����6�έ"�����D���/[�k�9����Y�8������ds|\���Ҿp6�Ҵ���]��.����6���z<�v��@]�i%������������������������$j��~����g��J>��no����pM[me�i$[�����������s�o�ᘨ�˸ nɜG-�ĨU�ycP���3.DB�li�;���������������������hj���x����7Z^�N�h��������N3u{�:j�����x�힞��#M��&��jL P@��_���� P�������������������&��o8��������9������@Sz���6�t7#O�ߋ �����s}Yf�T������lmr����Z)'N��k�۞p�����w\�T���������������ȯ?�8`���O��i{wﭹW�[�r�� ��Q4F�׊������3m&L�=��h3�������z~��#����\�l :�F,j@�� ʱ�wQT����8�"kJO����6�֚l������������������}����R�>ډK���]��y����&����p�}b������;N�1�m�r$����|��7�>e�@���B�TM*-i�H��g�D�)� E�m�|�ؘbҗ�a���Ҿ����������������t4�����o���G��*oCN�rP���Q��@z,|?W[0���������:�n,j���WiE��W������$~/�hp\��?��{(�0���+�Y8rΟ�+����>S-S���������������VN;���}�s?.����� w��9��˟<���Mq4�Wv'������{)0�1mB����V����W[��������8�/<� �%���wT^�5���b��)iM� p�g�N�&ݝ������������VO~��q���u���9��� ����!��J27�����$����O-���! �:���%H��� ـ�������y�ΠM=t{!S�� �oK8�������t<����è��������:a��������[������ա�H���~��w��Qz`�p����o�^ ������Q��n����� �,uu�C��$ ^���,�������8�#��:�6��e�|~�����������!�3��3.�\0�����q��o�4`.|� ����y�Q�`~;�d�ׯ,��O�Zw�������`73�v�܋�<�����Ȏ�� ـ4k��5�K�a�u�=9Yd��$>x�A�&�� j0� ���vF��� Y���|�y��� ~�6�@c��1vOp��������Ig�����4��l�OD�����L����� R���c���j�_�uX�6��3?nk��Wy�f;^*B� ��@���~a�`��Eu�������+�����6�L��.ü>��}y���}_�O�6�͐�:�Yr���G�X��kG������l^w����������~㒶sy���Iu�!���� W ��X��N�7BV��O��!X�2����wvG�R�f�T#�����t�/?���%8�^�W�aT����G�cL�M���I��(J����1~�8�?aT ���]����AS�E��(��*E}� 2������#I/�׍qz��^t�̔���������b�Yz4x����t�){ OH�����+(E��A&�N�������XT��o��"�XC����'���)}�J�z�p� ����~5�}�^����+�6����w��c��Q�|�Lp�d�H��}�(�.|����k��c4^�����"�����Z?ȕ ��a<�������L�!0�39C� �Eu�����C�F�Ew�ç ;�n?�*o���B�8�bʝ���'#Rqf����M}7����]�������s2tcS{�\icTx;�\��7K���P������ʇ Z O-��~�������c>"��?��������P�����E��O�8��@�8��G��Q�g�a�Վ���󁶠��䧘��_%#r�>�����1�z�a���eb��qcP��ѵ��n���#L��� =��׀t� L�7�`�����V����A{�C:�g���e@�����w1 Xp�3�c3�ġ�������p��M"'-�@n4���fG���B3�DJ�8[Jo�ߐ���gK)ƛ��$���� �������8�3�����+���� �����6�ʻ���� ���S�kI�*KZlT _`�������?��K�����QK�d���������B`�s}�>���`������*�>��,*@J�d�oF*�����弝��O}�k��s��]��y�ߘ�������c1G�V���<=�7��7����6��q�PT��tXԀ�!9*4�4Tހ���3XΛex�46�������Y��D ����� ����BdemDa����\�_l,����G�/���֌7���Y�](�xTt^%�GE�����4�}bT����ڹ�����;��Y)���B�Q��u��>J/J ���⮶.�XԄ��j�ݳ������+E��d ���r�5�_D�����1 ���o�� �B�x�΢�#����<��W�����8���R6�@���g�M�.��� dr�D��>(otU��@�x=��~v���2� ӣ�d�oBd�����3�eO�6�㣷����������ݜ�6��6Y��Qz`����S��{���\P��~z m5{J/L��1������<�e�ͅPu���b�]�ϔ��������'�������f�b� Zpw��c`"��i���BD@:)ִ�:�]��h���v�E��w���T�l�������P����"Ju�}��وV ��J��G6��. J/�Qgl߭�e�����@�z�Zev2u����)]կ���������7x�������s�M�-<ɯ�c��r��v�����@��$�ޮ}lk���a����'����>x��O\�Z������Fu>������ck#��&:��`�$��ai�>2Δ����l���oF[h�������lE�ܺ�Π���k:)���`������� $[6�����9�����kOw�\|�����8}������ބ:��񶐕��������I�A1/���=�2[�,�!��.}gN#�u����b���� ~���������݊��}34q�����d�E��L��������c��$���"�[q�U�硬g^��%B ��z���r�p�������J�ru%v\h�����1Y�ne`������ǥ:g����pQM~�^��Xi� ��`S�:V2������9.�P���V������?B�k�� ��������AEvw%�_�9C�Q����wKekP�ؠ�\������;Io d�{ ߞo�c1eP�����\� `����E=���@K<�Y��������eڼ�J����w����{av�F�'�M�@��������������/J��+9p����|]���������Iw &`���8���&�M�hg���[�{�������Xj���%��Ӓ�������������������$��(�����ʹN�������<>�I���RY�����K2�NPlL�ɀ�)��&e��������B+ь����(������������������� � �JTx����_?EZ� }@���� 6�U���뙢ط�z��dWI��n` D����噥�[��uV��"�G&�����Ú����2�g�}&m���������������������?ċ���"����Om#�������������������������� ��{���������������������ON��"S�X���Ne��ysQ���@�������������Fn��Vg�����dX�~nj����������������������]J�<�K]:����FW���b�������62����������=��5f����JKw����bf�X������������������������55��~J �%^�������:�-�QIE��P��v�nZum� z � ~ə ���� ���ة����;�f��\v�������g�8�1��f2�������������������������4;�V���ǔ�)�������������������9���1\������������������������������c��v�/'Ƞ�w������������������$�4�R-��t����������������������������������� e�6�/�ġ �̕Ecy�J���u�B���<�W�ַ~�w[B1L۲�-JS΂�{���΃�������������������������������������������A��20�c#���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@���� 0!1@AP"#2Q`$3V�%45a6�FRUq����� ������^7ׅ,$n��������+��F�`��2X'��0vM��p�L=�������5��8������u�p~���.�`r�����\����O��,ư�0oS ��_�M�����l���4�kv\JSd���x���SW�<��Ae�IX����������$I���w�:S���y���›R��9�Q[���,�5�;�@]�%���u�@ *ro�lbI �� ��+���%m:�͇ZV�����u�̉����θau<�fc�.����{�4Ա� �Q����*�Sm��8\ujqs]{kN���)qO�y�_*dJ�b�7���yQqI&9�ԌK!�M}�R�;�������S�T���1���i[U�ɵz�]��U)V�S6���3$K{��ߊ<�(� E]Զ[ǼENg�����'�\?#)Dkf��J���o��v���'�%ƞ�&K�u��!��b�35LX�Ϸ��63$K�a�;�9>,R��W��3�3� d�JeTYE.Mϧ��-�o�j3+y��y^�c�������VO�9NV\nd�1 ��!͕_)a�v;����թ�M�lWR1��)El��P;��yوÏ�u 3�k�5Pr6<�⒲l�!˞*��u־�n�!�l:����UNW ��%��Chx8vL'��X�@��*��)���̮��ˍ��� ����D-M�+J�U�kvK����+�x8��cY������?�Ԡ��~3mo��|�u@[XeY�C�\Kp�x8�oC�C�&����N�~3-H���� ��MX�s�u<`���~"WL��$8ξ��3���a�)|:@�m�\���^�`�@ҷ)�5p+��6���p�%i)P M���ngc�����#0Aruz���RL+xSS?���ʮ}()#�t��mˇ!��0}}y����<�e� �-ή�Ԩ��X������ MF���ԙ~l L.3���}�V뽺�v������멬��Nl�)�2����^�Iq��a��M��qG��T�����c3#������3U�Ǎ���}��לS�|qa��ڃ�+���-��2�f����/��bz��ڐ�� �ݼ[2�ç����k�X�2�* �Z�d���J�G����M*9W���s{��w���T��x��y,�in�O�v��]���n����P�$��JB@=4�OTI�n��e�22a\����q�d���%�$��(���:���: /*�K[PR�fr\nڙdN���F�n�$�4��[�� U�zƶ����� �mʋ���,�ao�u 3�z� �x��Kn����\[��VFmbE;�_U��&V�Gg�]L�۪&#n%�$ɯ��dG���D�TI=�%+AB�Ru#��b4�1�»x�cs�YzڙJG��f��Il���d�eF'T� iA��T���uC�$����Y��H?����[!G`}���ͪ� �纤Hv\������j�Ex�K���!���OiƸ�Yj�+u-<���'q����uN�*�r\��+�]���<�wOZ.fp�ێ��,-*)V?j-kÊ#�`�r��dV����(�ݽBk�����G�ƛk�QmUڗe��Z���f}|����8�8��a���i��3'J�����~G_�^���d�8w������ R�`(�~�.��u���l�s+g�bv���W���lGc}��u���afE~1�Ue������Z�0�8�=e�� f@/�jqEKQQ�J���oN��J���W5~M>$6�Lt�;$ʳ{���^��6�{����v6���ķܰg�V�cnn �~z�x�«�,2�u�?cE+Ș�H؎�%�Za�)���X>uW�Tz�Nyo����s���FQƤ��$��*�&�LLXL)�1�" L��eO��ɟ�9=���:t��Z���c��Ž���Y?�ӭV�wv�~,Y��r�ۗ�|�y��GaF�����C�����.�+� ���v1���fήJ�����]�S��T��B��n5sW}y�$��~z�'�c ��8 ��� ,! �p��VN�S��N�N�q��y8z˱�A��4��*��'������2n<�s���^ǧ˭P�Jޮɏ�U�G�L�J�*#��<�V��t7�8����TĜ>��i}K%,���)[��z�21z ?�N�i�n1?T�I�R#��m-�����������������1����lA�`��fT5+��ܐ�c�q՝��ʐ��,���3�f2U�եmab��#ŠdQ�y>\��)�SLY����w#��.���ʑ�f��� ,"+�w�~�N�'�c�O�3F�������N<���)j��&��,-� �љ���֊�_�zS���TǦ����w�>��?�������n��U仆�V���e�����0���$�C�d���rP �m�׈e�Xm�Vu� �L��.�bֹ��� �[Դaզ���*��\y�8�Է:�Ez\�0�Kq�C b��̘��cө���Q��=0Y��s�N��S.����3.���O�o:���#���v7�[#߫ ��5�܎�L���Er4���9n��COWlG�^��0k�%<���ZB���aB_���������'=��{i�v�l�$�uC���mƎҝ{�c㱼�y]���W�i ��ߧc��m�H� m�"�"�����;Y�ߝ�Z�Ǔ�����:S#��|}�y�,/k�Ld� TA�(�AI$+I3��;Y*���Z��}|��ӧO��d�v��..#:n��f>�>���ȶI�TX��� 8��y����"d�R�|�)0���=���n4��6ⲑ�+��r<�O�܂~zh�z����7ܓ�HH�Ga롏���nCo�>������a ���~]���R���̲c?�6(�q�;5%� |�uj�~z8R�=X��I�V=�|{v�Gj\gc��q����z�؋%M�ߍ����1y��#��@f^���^�>N������#x#۹��6�Y~�?�dfPO��{��P�4��V��u1E1J �*|���%����JN��`eWu�zk M6���q t[�� ��g�G���v��WIG��u_ft����5�j�"�Y�:T��ɐ���*�;� e5���4����q$C��2d�}���� _S�L#m�Yp��O�.�C�;��c����Hi#֩%+) �Ӎ��ƲV���SYź��g |���tj��3�8���r|���V��1#;.SQ�A[���S������#���`n�+���$��$�I �P\[�@�s��(�ED�z���P��])8�G#��0B��[ى��X�II�q<��9�~[Z멜�Z�⊔IWU&A>�P~�#��dp<�?����7���c��'~���5 ��+$���lx@�M�dm��n<=e�dyX��?{�|Aef ,|n3�<~z�ƃ�uۧ�����P��Y,�ӥQ�*g�#먙R�\���;T��i,��[9Qi歉����c>]9�� ��"�c��P�� �Md?٥��If�ت�u��k��/����F��9�c*9��Ǎ:�ØF���z�n*�@|I�ށ9����N3{'��[�'ͬ�Ҳ4��#}��!�V� Fu��,�,mTIk���v C�7v���B�6k�T9��1�*l� '~��ƞF��lU��'�M ����][ΩũJ_�{�i�I�n��$����L�� j��O�dx�����kza۪��#�E��Cl����x˘�o�����V���ɞ�ljr��)�/,�߬h�L��#��^��L�ф�,íMƁe�̩�NB�L�����iL����q�}��(��q��6IçJ$�W�E$��:������=#����(�K�B����zђ <��K(�N�۫K�w��^O{!����)��H���>x�������lx�?>Պ�+�>�W���,Ly!_�D���Ō�l���Q�!�[ �S����J��1��Ɛ�Y}��b,+�Lo�x�ɓ)����=�y�oh�@�꥟/��I��ѭ=��P�y9��� �ۍYӘ�e+�p�Jnϱ?V\SO%�(�t� ���=?MR�[Ș�����d�/ ��n�l��B�7j� ��!�;ӥ�/�[-���A�>��dN�sLj ��,ɪv��=1c�.SQ�O3�U���ƀ�ܽ�E����������̻��9G�ϷD�7(�}��Ävӌ\��y�_0[w ���<΍>����a_��[0+�L��F.�޺��f�>oN�T����q;���y\��bՃ��y�jH�<|q-eɏ�_?_9+P���Hp$�����[ux�K w�Mw��N�ی'$Y2�=��q���KB��P��~�������Yul:�[<����F1�2�O���5=d����]Y�sw:���Ϯ���E��j,_Q��X��z`H1,#II ��d�wr��P˂@�ZJV����y$�\y�{}��^~���[:N����ߌ�U�������O��d�����ؾe��${p>G��3c���Ė�lʌ�� ת��[��`ϱ�-W����dg�I��ig2��� ��}s ��ؤ(%#sS@���~���3�X�nRG�~\jc3�v��ӍL��M[JB�T��s3}��j�Nʖ��W����;7���ç?=X�F=-�=����q�ߚ���#���='�c��7���ڑW�I(O+=:uxq�������������e2�zi+�kuG�R��������0�&e�n���iT^J����~\jy���p'dtG��s����O��3����9* �b#Ɋ�� p������[Bws�T�>d4�ۧs���nv�n���U���_�~,�v����ƜJ1��s�� �QIz���)�(lv8M���U=�;����56��G���s#�K���MP�=��LvyGd��}�VwWBF�'�à �?MH�U�g2�� ����!�p�7Q��j��ڴ����=��j�u��� Jn�A s���uM������e��Ɔ�Ҕ�!)�'��8Ϣ�ٔ���ޝ(��Vp���צ֖d=�IC�J�Ǡ{q������kԭ�߸���i��@K����u�|�p=..�*+����x�����z[Aqġ#s2a�Ɗ���RR�)*HRsi�~�a &f��M��P����-K�L@��Z��Xy�'x�{}��Zm+���:�)�) IJ�-i�u���� ���ܒH��'��L(7�y�GӜq���� j��� 6ߌg1�g�o���,kر���tY�?W,���p���e���f�OQS��!K�۟cҒA�|ս�j�>��=⬒��˧L[�� �߿2JaB~R��u�:��Q�] �0H~���]�7��Ƽ�I���(�}��cq '�ήET���q�?f�ab���ӥvr� �)o��-Q��_'����ᴎo��K������;��V���o��%���~OK ����*��b�f:���-ťIR��`B�5!RB@���ï�� �u �̯e\�_U�_������� g�ES��3��������QT��a�����x����U<~�c?�*�#]�MW,[8O�a�x��]�1bC|踤�P��lw5V%�)�{t�<��d��5���0i�XSU��m:��Z�┵�i�"��1�^B�-��P�hJ��&)O��*�D��c�W��vM��)����}���P��ܗ-q����\mmζZ-l@�}��a��E�6��F�@��&Sg@���ݚ�M����� ȹ 4����#p�\H����dYDo�H���"��\��..R�B�H�z_�/5˘����6��KhJR��P�mƶi�m���3��,#c�co��q�a)*P�t����R�m�k�7x�D�E�\Y�閣_X�<���~�)���c[[�BP����6�Yq���S��0����%_����;��Àv�~�| VS؇ ��'O0��F0��\���U�-�d@�����7�SJ*z��3n��y��P����O����������m�~�P�3|Y��ʉr#�C�<�G~�.,! ���bqx���h~0=��!ǫ�jy����l��O,�[B��~��|9��ٱ����Xly�#�i�B��g%�S��������tˋ���e���ې��\[d�t)��.+u�|1 ������#�~Oj����hS�%��i.�~X���I�H�m��0n���c�1uE�q��cF�RF�o���7� �O�ꮧ� ���ۛ{��ʛi5�rw?׌#Qn�TW��~?y$��m\�\o����%W� ?=>S�N@�� �Ʈ���R����N�)�r"C�:��:����� �����#��qb��Y�. �6[��2K����2u�Ǧ�HYR��Q�MV��� �G�$��Q+.>�����nNH��q�^��� ����q��mM��V��D�+�-�#*�U�̒ ���p욳��u:�������IB���m����PV@O���r[b= �� ��1U�E��_Nm�yKbN�O���U�}�the�`�|6֮P>�\2�P�V���I�D�i�P�O;�9�r�mAHG�W�S]��J*�_�G��+kP�2����Ka�Z���H�'K�x�W�MZ%�O�YD�Rc+o��?�q��Ghm��d�S�oh�\�D�|:W������UA�Qc yT�q��������~^�H��/��#p�CZ���T�I�1�ӏT����4��"�ČZ�����}��`w�#�*,ʹ�� ��0�i��課�Om�*�da��^gJ݅{���l�e9uF#T�ֲ��̲�ٞC"�q���ߍ ոޑ�o#�XZTp����@ o�8��(jd��xw�]�,f���`~��|,s��^����f�1���t��|��m�򸄭/ctr��5s��7�9Q�4�H1꠲BB@�l9@���C�����+�wp�xu�£Yc�9��?`@#�o�mH�s2��)�=��2�.�l����jg�9$�Y�S�%*L������R�Y������7Z���,*=�䷘$�������arm�o�ϰ���UW.|�r�uf����IGw�t����Zwo��~5 ��YյhO+=8fF�)�W�7�L9lM�̘·Y���֘YLf�큹�pRF���99.A �"wz��=E\Z���'a� 2��Ǚ�#;�'}�G���*��l��^"q��+2FQ� hj��kŦ��${���ޮ-�T�٭cf�|�3#~�RJ����t��$b�(R��(����r���dx� >U b�&9,>���%E\� Ά�e�$��'�q't��*�א���ެ�b��-|d���SB�O�O��$�R+�H�)�܎�K��1m`;�J�2�Y~9��O�g8=vqD`K[�F)k�[���1m޼c��n���]s�k�z$@��)!I �x՝"v��9=�ZA=`Ɠi �:�E��)`�7��vI��}d�YI�_ �o�:ob���o ���3Q��&D&�2=�� �Ά��;>�h����y.*ⅥS������Ӭ�+q&����j|UƧ�����}���J0��WW< ۋS�)jQR�j���Ư��rN)�Gű�4Ѷ(�S)Ǣ�8��i��W52���No˓� ۍ%�5brOn�L�;�n��\G����=�^U�dI���8$�&���h��'���+�(������cȁ߫k�l��S^���cƗjԌE�ꭔ��gF���Ȓ��@���}O���*;e�v�WV���YJ\�]X'5��ղ�k�F��b 6R�o՜m��i N�i�����>J����?��lPm�U��}>_Z&�KK��q�r��I�D�Չ~�q�3fL�:S�e>���E���-G���{L�6p�e,8��������QI��h��a�Xa��U�A'���ʂ���s�+טIjP�-��y�8ۈZ?J$��W�P� ��R�s�]��|�l(�ԓ��sƊi��o(��S0���Y� 8�T97.�����WiL��c�~�dxc�E|�2!�X�K�Ƙਫ਼�$((�6�~|d9u+�qd�^3�89��Y�6L�.I�����?���iI�q���9�)O/뚅����O���X��X�V��ZF[�یgQ�L��K1���RҖr@v�#��X�l��F���Нy�S�8�7�kF!A��sM���^rkp�jP�DyS$N���q���nxҍ!U�f�!eh�i�2�m����`�Y�I�9r�6� �TF���C}/�y�^���Η���5d�'��9A-��J��>{�_l+�`��A���[�'��յ�ϛ#w:݅�%��X�}�&�PSt�Q�"�-��\縵�/����$Ɨh�Xb�*�y��BS����;W�ջ_mc�����vt?2}1�;qS�d�d~u:2k5�2�R�~�z+|HE!)�Ǟl��7`��0�<�,�2*���Hl-��x�^����'_TV�gZA�'j� ^�2Ϊ��N7t�����?w�� �x1��f��Iz�C-Ȗ��K�^q�;���-W�DvT�7��8�Z�������� hK�(P:��Q- �8�n�Z���܃e貾�<�1�YT<�,�����"�6{�/ �?�͟��|1�:�#g��W�>$����d��J��d�B���=��jf[��%rE^��il:��B���x���Sּ�1հ��,�=��*�7 fcG��#q� �eh?��2�7�����,�!7x��6�n�LC�4x��},Geǝ�tC.��vS �F�43��zz\��;QYC,6����~;RYS/6���|2���5���v��T��i����������mlv��������&� �nRh^ejR�LG�f���? �ۉҬܦƩ��|��Ȱ����>3����!v��i�ʯ�>�v��オ�X3e���_1z�Kȗ\<������!�8���V��]��?b�k41�Re��T�q��mz��TiOʦ�Z��Xq���L������q"+���2ۨ��8}�&N7XU7Ap�d�X��~�׿��&4e�o�F��� �H�����O���č�c�� 懴�6���͉��+)��v;j��ݷ�� �UV�� i��� j���Y9GdÒJ1��詞�����V?h��l�����l�cGs�ځ�������y�Ac������\V3�? �� ܙg�>qH�S,�E�W�[�㺨�uch�⍸�O�}���a��>�q�6�n6�����N6�q��������N� ���! 1AQaq�0@����"2BRb�#Pr���3C`��Scst���$4D���%Td���� ?�����N����a��3��m���C���w��������xA�m�q�m����m������$����4n淿t'��C"w��zU=D�\R+w�p+Y�T�&�պ@��ƃ��3ޯ?�Aﶂ��aŘ���@-�����Q�=���9D��ռ�ѻ@��M�V��P��܅�G5�f�Y<�u=,EC)�<�Fy'�"�&�չ�X~f��l�KԆV��?�� �W�N����=(� �;���{�r����ٌ�Y���h{�١������jW����P���Tc�����X�K�r��}���w�R��%��?���E��m�� �Y�q|����\lEE4����r���}�lsI�Y������f�$�=�d�yO����p�����yBj8jU�o�/�S��?�U��*������ˍ�0�������u�q�m [�?f����a�� )Q�>����6#������� ?����0UQ����,IX���(6ڵ[�DI�MNލ�c&���υ�j\��X�R|,4��� j������T�hA�e��^���d���b<����n�� �즇�=!���3�^�`j�h�ȓr��jẕ�c�,ٞX����-����a�ﶔ���#�$��]w�O��Ӫ�1y%��L�Y<�wg#�ǝ�̗`�x�xa�t�w��»1���o7o5��>�m뭛C���Uƃߜ}�C���y1Xνm�F8�jI���]����H���ۺиE@I�i;r�8ӭ�����V�F�Շ| ��&?�3|x�B�MuS�Ge�=Ӕ�#BE5G������Y!z��_e��q�р/W>|-�Ci߇�t�1ޯќd�R3�u��g�=0 5��[?�#͏��q�cf���H��{ ?u�=?�?ǯ���}Z��z���hmΔ�BFTW�����<�q��(v� ��!��z���iW]*�J�V�z��gX֧A�q�&��/w���u�gYӘa���; �i=����g:��?2�dž6�ى�k�4�>�Pxs����}������G�9���3 ���)gG�R<>r h�$��'nc�h�P��Bj��J�ҧH� -��N1���N��?��~��}-q!=��_2hc�M��l�vY%UE�@|�v����M2�.Y[|y�"Eï��K�ZF,�ɯ?,q�?v�M 80jx�"�;�9vk�����+ ֧�� �ȺU��?�%�vcV��mA�6��Qg^M�����A}�3�nl� QRN�l8�kkn�'�����(��M�7m9و�q���%ޟ���*h$Zk"��$�9��: �?U8�Sl��,,|ɒ��xH(ѷ����Gn�/Q�4�P��G�%��Ա8�N��!� �&�7�;���eKM7�4��9R/%����l�c>�x;������>��C�:�����t��h?aKX�bhe�ᜋ^�$�Iհ �hr7%F$�E��Fd���t��5���+�(M6�t����Ü�UU|zW�=a�Ts�Tg������dqP�Q����b'�m���1{|Y����X�N��b �P~��F^F:����k6�"�j!�� �I�r�`��1&�-$�Bevk:y���#y�w��I0��x��=D�4��tU���P�ZH��ڠ底taP��6����b>�xa�����Q�#� WeF��ŮNj�p�J* mQ�N�����*I�-*�ȩ�F�g�3 �5��V�ʊ�ɮ�a��5F���O@{���NX��?����H�]3��1�Ri_u��������ѕ�� ����0��� F��~��:60�p�͈�S��qX#a�5>���`�o&+�<2�D����: �������ڝ�$�nP���*)�N�|y�Ej�F�5ټ�e���ihy�Z �>���k�bH�a�v��h�-#���!�Po=@k̆IEN��@��}Ll?j�O������߭�ʞ���Q|A07x���wt!xf���I2?Z��<ץ�T���cU�j��]���陎Ltl �}5�ϓ��$�,��O�mˊ�;�@O��jE��j(�ا,��LX���LO���Ц�90�O �.����a��nA���7������j4 ��W��_ٓ���zW�jcB������y՗+EM�)d���N�g6�y1_x��p�$Lv�:��9�"z��p���ʙ$��^��JԼ*�ϭ����o���=x�Lj�6�J��u82�A�H�3$�ٕ@�=Vv�]�'�qEz�;I˼��)��=��ɯ���x �/�W(V���p�����$ �m�������u�����񶤑Oqˎ�T����r��㠚x�sr�GC��byp�G��1ߠ�w e�8�$⿄����/�M{*}��W�]˷.�CK\�ުx���/$�WP�w���r� |i���&�}�{�X� �>��$-��l���?-z���g����lΆ���(F���h�vS*���b���߲ڡn,|)mrH[���a�3�ר�[1��3o_�U�3�TC�$��(�=�)0�kgP���� ��u�^=��4 �WYCҸ:��vQ�ר�X�à��tk�m,�t*��^�,�}D*�� �"(�I��9R����>`�`��[~Q]�#af��i6l��8���6�:,s�s�N6�j"�A4���IuQ��6E,�GnH��zS�HO�uk�5$�I�4��ؤ�Q9�@��C����wp��BGv[]�u�Ov����0I4���\��y�����Q�Ѹ��~>Z��8�T��a��q�ޣ;z��a���/��S��I:�ܫ_�|������>=Z����8:�S��U�I�J��"IY���8%b8���H��:�QO�6�;7�I�S��J��ҌAά3��>c���E+&jf$eC+�z�;��V����� �r���ʺ������my�e���aQ�f&��6�ND���.:��NT�vm�<- u���ǝ\MvZY�N�NT��-A�>jr!S��n�O 1�3�Ns�%�3D@���`������ܟ 1�^c<���� �a�ɽ�̲�Xë#�w�|y�cW�=�9I*H8�p�^(4���՗�k��arOcW�tO�\�ƍR��8����'�K���I�Q�����?5�>[�}��yU�ײ -h��=��% q�ThG�2�)���"ו3]�!kB��*p�FDl�A���,�eEi�H�f�Ps�����5�H:�Փ~�H�0Dت�D�I����h�F3�������c��2���E��9�H��5�zԑ�ʚ�i�X�=:m�xg�hd(�v����׊�9iS��O��d@0ڽ���:�p�5�h-��t�&���X�q�ӕ,��ie�|���7A�2���O%P��E��htj��Y1��w�Ѓ!����  ���� ࢽ��My�7�\�a�@�ţ�J ��4�Ȼ�F�@o�̒?4�wx��)��]�P��~�����u�����5�����7X ��9��^ܩ�U;Iꭆ 5 �������eK2�7(�{|��Y׎ �V��\"���Z�1� Z�����}��(�Ǝ"�1S���_�vE30>���p;� ΝD��%x�W�?W?v����o�^V�i�d��r[��/&>�~`�9Wh��y�;���R���� ;;ɮT��?����r$�g1�K����A��C��c��K��l:�'��3 c�ﳯ*"t8�~l��)���m��+U,z��`(��>yJ�?����h>��]��v��ЍG*�{`��;y]��I�T� ;c��NU�fo¾h���/$���|NS���1�S�"�H��V���T���4��uhǜ�]�v;���5�͠x��'C\�SBpl���h}�N����� A�Bx���%��ޭ�l��/����T��w�ʽ]D�=����K���ž�r㻠l4�S�O?=�k �M:� ��c�C�a�#ha���)�ѐxc�s���gP�iG���{+���x���Q���I= �� z��ԫ+ �8"�k�ñ�j=|����c ��y��CF��/���*9ж�h{ �?4�o� ��k�m�Q�N�x��;�Y��4膚�a�w?�6�>�e]�����Q�r�:����g�,i"�����ԩA��*M�<�G��b�if��l^M��5�� �Ҩ�{����6J��ZJ�����P�*�����Y���ݛu�_4�9�I8�7���������,^ToR���m4�H��?�N�S�ѕw��/S��甍�@�9H�S�T��t�ƻ���ʒU��*{Xs�@����f������֒Li�K{H�w^���������Ϥm�tq���s� ���ք��f:��o~s��g�r��ט� �S�ѱC�e]�x���a��) ���(b-$(�j>�7q�B?ӕ�F��hV25r[7 Y� }L�R��}����*sg+��x�r�2�U=�*'WS��ZDW]�WǞ�<��叓���{�$�9Ou4��y�90-�1�'*D`�c�^o?(�9��u���ݐ��'PI&� f�Jݮ�������:wS����jfP1F:X �H�9dԯ����˝[�_54 �}*;@�ܨ�� ð�yn�T���?�ןd�#���4rG�ͨ��H�1�|-#���Mr�S3��G�3�����)�.᧏3v�z֑��r����$G"�`j �1t��x0<Ɔ�Wh6�y�6��,œ�Ga��gA����y��b��)���h�D��ß�_�m��ü �gG;��e�v��ݝ�nQ� ��C����-�*��o���y�a��M��I�>�<���]obD��"�:���G�A��-\%LT�8���c�)��+y76���o�Q�#*{�(F�⽕�y����=���rW�\p���۩�c���A���^e6��K������ʐ�cVf5$�'->���ՉN"���F�"�UQ@�f��Gb~��#�&�M=��8�ט�JNu9��D��[̤�s�o�~������� G��9T�tW^g5y$b��Y'��س�Ǵ�=��U-2 #�MC�t(�i� �lj�@Q 5�̣i�*�O����s�x�K�f��}\��M{E�V�{�υ��Ƈ�����);�H����I��fe�Lȣr�2��>��W��I�Ȃ6������i��k�� �5�YOxȺ����>��Y�f5'��|��H+��98pj�n�.O�y�������jY��~��i�w'������l�;�s�2��Y��:'lg�ꥴ)o#'Sa�a�K��Z� �m��}�`169�n���"���x��I ��*+� }F<��cГ���F�P�������ֹ*�PqX�x۩��,� ��N�� �4<-����%����:��7����W���u�`����� $�?�I��&����o��o��`v�>��P��"��l���4��5'�Z�gE���8���?��[�X�7(��.Q�-��*���ތL@̲����v��.5���[��=�t\+�CNܛ��,g�SQnH����}*F�G16���&:�t��4ُ"A��̣��$�b �|����#rs��a�����T�� ]�<�j��B�S�('$�ɻ� �wP;�/�n��?�ݜ��x�F��yUn�~mL*-�������Xf�wd^�a�}��f�,=t�׵i�.2/wpN�Ep8�OР���•��R�FJ� 55TZ��T �ɭ�<��]��/�0�r�@�f��V��V����Nz�G��^���7hZi����k��3�,kN�e|�vg�1{9]_i��X5y7� 8e]�U����'�-2,���e"����]ot�I��Y_��n�(JҼ��1�O ]bXc���Nu�No��pS���Q_���_�?i�~�x h5d'�(qw52] ��'ޤ�q��o1�R!���`ywy�A4u���h<קy���\[~�4�\ X�Wt/� 6�����n�F�a8��f���z �3$�t(���q��q�x��^�XWeN'p<-v�!�{�(>ӽDP7��ո0�y)�e$ٕv�Ih'Q�EA�m*�H��RI��=:��� ���4牢) �%_iN�ݧ�l]� �Nt���G��H�L��� ɱ�g<���1V�,�J~�ٹ�"K��Q�� 9�HS�9�?@��k����r�;we݁�]I�!{ �@�G�[�"��`���J:�n]�{�cA�E����V��ʆ���#��U9�6����j�#Y�m\��q�e4h�B�7��C�������d<�?J����1g:ٳ���=Y���D�p�ц� ׈ǔ��1�]26؜oS�'��9�V�FVu�P�h�9�xc�oq�X��p�o�5��Ա5$�9W�V(�[Ak�aY錎qf;�'�[�|���b�6�Ck��)��#a#a˙��8���=äh�4��2��C��4tm^ �n'c����]GQ$[Wҿ��i���vN�{Fu ��1�gx��1┷���N�m��{j-,��x�� Ūm�ЧS�[�s���Gna���䑴�� x�p 8<������97�Q���ϴ�v�aϚG��Rt�Һ׈�f^\r��WH�JU�7Z���y)�vg=����n��4�_)y��D'y�6�]�c�5̪��\� �PF�k����&�c;��cq�$~T�7j ���nç]�<�g ":�to�t}�159�<�/�8������m�b�K#g'I'.W������6��I/��>v��\�MN��g���m�A�yQL�4u�Lj�j9��#44�t��l^�}L����n��R��!��t��±]��r��h6ٍ>�yҏ�N��fU�� ���� Fm@�8}�/u��jb9������he:A�y�ծw��GpΧh�5����l}�3p468��)U��d��c����;Us/�֔�YX�1�O2��uq�s��`hwg�r~�{ R��mhN��؎*q 42�*th��>�#���E����#��Hv�O����q�}������6�e��\�,Wk�#���X��b>��p}�դ��3���T5��†��6��[��@��P�y*n��|'f�֧>�lư΂�̺����SU�'*�q�p�_S�����M�� '��c�6������m�� ySʨ;M��r���Ƌ�m�Kxo,���Gm�P��A�G�:��i��w�9�}M(�^�V��$ǒ�ѽ�9���|���� �a����J�SQ�a���r�B;����}���ٻ֢�2�%U���c�#�g���N�a�ݕ�'�v�[�OY'��3L�3�;,p�]@�S��{ls��X�'���c�jw��k'a�.��}�}&�� �dP�*�bK=ɍ!����;3n�gΊU�ߴmt�'*{,=SzfD� A��ko~�G�aoq�_mi}#�m�������P�Xhύ�����mxǍ�΂���巿zf��Q���c���|kc�����?���W��Y�$���_Lv����l߶��c���`?����l�j�ݲˏ!V��6����U�Ђ(A���4y)H���p�Z_�x��>���e���R��$�/�`^'3qˏ�-&Q�=?��CFVR �D�fV�9��{�8g�������n�h�(P"��6�[�D���< E�����~0<@�`�G�6����Hг�cc�� �c�K.5��D��d�B���`?�XQ��2��ٿyqo&+�1^� DW�0�ꊩ���G�#��Q�nL3��c���������/��x ��1�1�[y�x�პCW��C�c�UĨ80�m�e�4.{�m��u���I=��f�����0QRls9���f���������9���~f�����Ǩ��a�"@�8���ȁ�Q����#c�ic������G��$���G���r/$W�(��W���V�"��m�7�[m�A�m����bo��D� j����۳� l���^�k�h׽����� ��#� iXn�v��eT�k�a�^Y�4�BN���ĕ���0������� !01@Q"2AaPq3BR�������?�����@4�Q�����T3,���㺠�W�[=JK�Ϟ���2�r^7��vc�:�9 �E�ߴ�w�S#d���Ix��u��:��Hp��9E!�� V 2;73|F��9Y���*ʬ�F��D����u&���y؟��^EA��A��(ɩ���^��GV:ݜDy�`��Jr29ܾ�㝉��[���E;Fzx��YG��U�e�Y�C���� ����v-tx����I�sם�Ę�q��Eb�+P\ :>�i�C'�;�����k|z�رn�y]�#ǿb��Q��������w�����(�r|ӹs��[�D��2v-%��@;�8<a���[\o[ϧw��I!��*0�krs)�[�J9^��ʜ��p1)� "��/_>��o��<1����A�E�y^�C��`�x1'ܣn�p��s`l���fQ��):�l����b>�Me�jH^?�kl3(�z:���1ŠK&?Q�~�{�ٺ�h�y���/�[��V�|6��}�KbX����mn[-��7�5q�94�������dm���c^���h� X��5��<�eޘ>G���-�}�دB�ޟ� ��|�rt�M��V+�]�c?�-#ڛ��^ǂ}���Lkr���O��u�>�-D�ry� D?:ޞ�U��ǜ�7�V��?瓮�"�#���r��չģVR;�n���/_� ؉v�ݶe5d�b9��/O��009�G���5n�W����JpA�*�r9�>�1��.[t���s�F���nQ� V 77R�]�ɫ8����_0<՜�IF�u(v��4��F�k�3��E)��N:��yڮe��P�`�1}�$WS��J�SQ�N�j��ٺ��޵�#l���ј(�5=��5�lǏmoW�v-�1����v,W�mn��߀$x�<����v�j(����c]��@#��1������Ǔ���o'��u+����;G�#�޸��v-lη��/(`i⣍Pm^����ԯ̾9Z��F��������n��1��� ��]�[��)�'�������:�֪�W��FC����� �B9،!?���]��V��A�Վ�M��b�w��G F>_DȬ0¤�#�QR�[V��kz���m�w�"��9ZG�7'[��=�Q����j8R?�zf�\a�=��O�U����*oB�A�|G���2�54 �p��.w7� �� ���&������ξxGHp� B%��$g�����t�Џ򤵍z���HN�u�Я�-�'4��0���;_���3������� !01"@AQa2Pq#3BR�������?����ʩca��en��^��8���<�u#��m*08r��y�N"�<�Ѳ0��@\�p��� �����Kv�D��J8�Fҽ� �f�Y��-m�ybX�NP����}�!*8t(�OqѢ��Q�wW�K��ZD��Δ^e��!� ��B�K��p~�����e*l}z#9ң�k���q#�Ft�o��S�R����-�w�!�S���Ӥß|M�l޶V��!eˈ�8Y���c�ЮM2��tk���� ������J�fS����Ö*i/2�����n]�k�\���|4yX�8��U�P.���Ы[���l��@"�t�<������5�lF���vU�����W��W��;�b�cД^6[#7@vU�xgZv��F�6��Q,K�v��� �+Ъ��n��Ǣ��Ft���8��0��c�@�!�Zq s�v�t�;#](B��-�nῃ~���3g������5�J�%���O������n�kB�ĺ�.r��+���#�N$?�q�/�s�6��p��a����a��J/��M�8��6�ܰ"�*������ɗud"\w���aT(����[��F��U՛����RT�b���n�*��6���O��SJ�.�ij<�v�MT��R\c��5l�sZB>F��<7�;EA��{��E���Ö��1U/�#��d1�a�n.1ě����0�ʾR�h��|�R��Ao�3�m3 ��%�� ���28Q�� ��y��φ���H�To�7�lW>����#i`�q���c����a��� �m,B�-j����݋�'mR1Ήt�>��V��p���s�0IbI�C.���1R�ea�����]H�6�����������4B>��o��](��$B���m�����a�!=���?�B� K�Ǿ+�Ծ"�n���K��*��+��[T#�{�E�J�S����Q�����s�5�:�U�\wĐ�f�3����܆&�)�����I���Ԇw��E T�lrTf6Q|R�h:��[K�� �z��c֧�G�C��%\��_�a��84��HcO�bi��ؖV��7H �)*ģK~Xhչ0��4?�0��� �E<���}3���#���u�?�� ��|g�S�6ꊤ�|�I#Hڛ� �ա��w�X��9��7���Ŀ%�SL��y6č��|�F�a 8���b���$�sק�h���b9RAu7�˨p�Č�_\*w��묦��F ����4D~�f����|(�"m���NK��i�S�>�$d7SlA��/�²����SL��|6N�}���S�˯���g��]6��; �#�.��<���q'Q�1|KQ$�����񛩶"�$r�b:���N8�w@��8$�� �AjfG|~�9F ���Y��ʺ��Bwؒ������M:I岎�G��`s�YV5����6��A �b:�W���G�q%l�����F��H���7�������Fsv7���k�� 403WebShell
403Webshell
Server IP : 88.222.243.78  /  Your IP : 216.73.216.150
Web Server : LiteSpeed
System : Linux in-mum-web1874.main-hosting.eu 5.14.0-570.21.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jun 11 07:22:35 EDT 2025 x86_64
User : u862839997 ( 862839997)
PHP Version : 8.2.30
Disable Function : system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /proc/3999839/root/lib/python3.9/site-packages/S3/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /proc/3999839/root/lib/python3.9/site-packages/S3/__pycache__/S3.cpython-39.pyc
a

��wel��@s
ddlmZmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZddlm
ZddlmZmZmZmZddlmZmZmZmZzddlmZWney�ddlmZYn0ddlZdd	lmZmZm Z m!Z!m"Z"m#Z#m$Z$dd
l%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ddl,m,Z,ddl-m-Z-dd
l.m.Z.m/Z/ddl0m0Z0ddl1m1Z1ddl2Tddl3m4Z4ddl5m5Z5ddl6m6Z6ddl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?z�ddl@mAZAddlBZBzeBjCdd�ZDdd�ZEWn�eF�y.z eB�GeBjH�ZDeD�I�dd�ZEWn*eJ�y(eBjCeBjHd�ZDdd�ZEYn0Yn0eJ�y\eB�GeBjH�ZDeD�I�dd�ZEYn0Wn^eeKf�y�ZLz@eMeL�ZNdeNv�r�dZOnd eNZOeOd!7ZOd"aPd#d�ZEWYdZL[Ln
dZL[L00d$d%�ZQd&ZRd'ZSgZTGd(d)�d)eU�ZVGd*d+�d+eU�ZWeT�Xd+�d,d-�ZYdS).�)�absolute_import�divisionN)�saxutils)�timeout)�debug�info�warning�error)�ST_SIZE�ST_MODE�S_ISDIR�S_ISREG)�urlparse�)�getListFromXml�getTextFromXml�getRootTagName�decode_from_s3�encode_to_s3�md5�s3_quote)�convertHeaderTupleListToDict�	unicodise�deunicodise�check_bucket_name�check_bucket_name_dns_support�getHostnameFromBucket)�
SortedDict)�	AccessLog)�ACL�GranteeLogDelivery)�BidirMap)�Config)�*)�MultiPartUpload)�S3Uri)�ConnMan)�sign_request_v2�sign_request_v4�checksum_sha256_file�checksum_sha256_buffer�generate_content_md5�
hash_file_md5�calculateChecksum�format_param_str)�
ArgumentErrorT)ZmimecCs
t�|�S�N)�magic_Z	from_file��file�r4�)/usr/lib/python3.9/site-packages/S3/S3.py�mime_magic_file<sr6c
Cs8zt�|�WStttfy2t�t|��YS0dSr0)r1r3�UnicodeDecodeError�UnicodeEncodeErrorr/rr2r4r4r5r6Is)�flagscCs
t�|�Sr0)r1Zid_filenamer2r4r4r5r6SscCst�t|��Sr0)r1r3rr2r4r4r5r6\s�magicz%Module python-magic is not available.z'Module python-magic can't be used (%s).z. Guessing MIME types based on file extensions.FcCststt�dat�|�dS)NTr)�magic_warnedr�
magic_message�	mimetypes�
guess_typer2r4r4r5r6gscCsjdd�}||�}|durZt|t�rZd|vrR|�d�\}}|td�d�}||f}n|df}|durfd}|S)NcSst|�}|Sr0)r6)r3Z	magictyper4r4r5�_mime_magicpszmime_magic.<locals>._mime_magic�;�charset)NN)�
isinstance�str�split�len)r3r?�resultZmimetyperAr4r4r5�
mime_magicns

rG�ic@sFeZdZiZiZddd�Zdd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dS)�	S3RequestNcCsn||_t|pidd�|_t|jjj�dkrF|jj��|jjj|jd<||_||_|pXi|_	||_
|��dS)NT�Zignore_caserzx-amz-security-token)�s3r�headersrE�configZaccess_tokenZrole_refresh�resource�
method_string�params�body�requester_pays)�selfrKrOrNrLrQrPr4r4r5�__init__�s
zS3Request.__init__cCs"|jjjr|jdvrd|jd<dS)N)�GET�POST�PUT�HEADZ	requesterzx-amz-request-payer)rKrMrRrOrL�rSr4r4r5rR�szS3Request.requester_payscCs,d|jvr|jd=t�dt���|jd<dS)N�datez%a, %d %b %Y %H:%M:%S +0000z
x-amz-date)rL�time�strftime�gmtimerYr4r4r5�update_timestamp�s
zS3Request.update_timestampcCs&|jjrdS|jjjs|jjr"dSdS)NFT)rK�endpoint_requires_signature_v4rMZsignature_v2�fallback_to_signature_v2rYr4r4r5�use_signature_v2�s
zS3Request.use_signature_v2cCs|j�d�}|��rVtd�|r4d||jdf}n
|jd}t|j||j|j�|_n�td�|j�	|jd�}|r�|t
jvr�t
j�|d��d|�r�|t
jvr�t
t�j|�s�d||jdf}n
|jd}t
j�|jdt�j�}t|j|||j||j|j�|_dS)N�bucketzUsing signature v2�/%s%s�urizUsing signature v4��%s.)rN�getrarr'rOrPrLrK�get_hostnamerI�	redir_map�
startswithrr"�host_bucket�
region_map�bucket_locationr(rQ)rS�bucket_name�resource_uri�hostnameZ
bucket_regionr4r4r5�sign�s0
����

�zS3Request.signcCsT|��|��t|j�}t|dddd�|d<|dt|j�7<|j||jfS)NrdFT�Zquote_backslashesZunicode_output)	r^rq�dictrNrr.rPrOrL)rSrNr4r4r5�get_triplet�s
zS3Request.get_triplet)N)�__name__�
__module__�__qualname__rlrirTrRr^rarqrtr4r4r4r5rI�s
	!rIc@s�eZdZeddddddd�Zedd	d
ddd
�ZedededBededBededBededBededBededBededBededBededBededBd�Zdddd�Zdd�Zdd �Z	d!d"�Z
d#d$�Zd�d&d'�Zd(d)�Z
d�d+d,�Zd�d-d.�Zd�d/d0�Zd�d1d2�Zd3d4�Zd�d6d7�Zd8d9�Zd:d;�Zd<d=�Zd>d?�Zd@dA�ZdBdC�Zd�dDdE�Zd�dFdG�Zd�dHdI�Zd�dJdK�Zd�dLdM�ZdNdO�ZdPdQ�Z dRdS�Z!d�dTdU�Z"dVdW�Z#d�dYdZ�Z$d�d[d\�Z%d]d^�Z&d_d`�Z'dadb�Z(dcdd�Z)dedf�Z*d�dgdh�Z+d�didj�Z,d�dkdl�Z-dmdn�Z.dodp�Z/dqdr�Z0dsdt�Z1dudv�Z2dwdx�Z3dydz�Z4d{d|�Z5d}d~�Z6dd��Z7d�d��Z8d�d��Z9d�d��Z:d�d��Z;d�d��Z<d�d��Z=d�d��Z>d�d��Z?d�d��Z@d�d��ZAd�d��ZBd�d��ZCd�d��ZDd�d�d��ZEd�d�d��ZFd�d�d��ZGd�d�d��ZHd�d�d��ZId�d��ZJd�d��ZKd�d��ZLd�d�d��ZMd�d�d��ZNd�d��ZOd�d��ZPd�d��ZQd�d��ZRd�d��ZSd�d�d��ZTd�d�d��ZUd�d�d��ZVd�d�d��ZWd�d�d„ZXd�d�dĄZYd%S)��S3rrH����)rUrWrX�DELETErV�MASK�iiii)�SERVICE�BUCKET�OBJECT�BATCHr~rr�rUr�rWr}r�rXrVr�)Z	UNDEFINED�LIST_ALL_BUCKETS�
BUCKET_CREATE�BUCKET_LIST�
BUCKET_DELETE�
OBJECT_PUT�
OBJECT_GET�OBJECT_HEAD�
OBJECT_DELETE�OBJECT_POST�BATCH_DELETEzBucket '%s' does not existz Access to bucket '%s' was deniedzBucket '%s' already exists)ZNoSuchBucket�AccessDeniedZBucketAlreadyExistscCs||_d|_d|_d|_dS)NF)rMr`r_�expect_continue_not_supported)rSrMr4r4r5rT�szS3.__init__cCs(d}|jjdkr|jjS|jjr$d}|S)NZSTANDARDreZREDUCED_REDUNDANCY)rM�
storage_classZreduced_redundancy)rS�clsr4r4r5r�szS3.storage_classcCs�|r|tjvrtj|}n(|r6t|jj|�r6t|�}n|jj��}|jjrb|�	d�rx|dd�}n|�	d�rx|dd�}t
d||f�|S)Nz:443���z:80���zget_hostname(%s): %s)rIrirrMrkr�	host_base�lower�	use_https�endswithr)rSrb�hostr4r4r5rh
s


zS3.get_hostnamecCs|��tj|<dSr0)r�rIri)rSrb�redir_hostnamer4r4r5�set_hostname"szS3.set_hostnameNcCs�|�d�}|rd|tjvr0tj�|d��d|�rH|tjvrdt|jj|�sddt|ddd�|df}n|d}|r|d	||f}|jjdkr�|jj	s�d
|�
|�|f}td|�|S)NrbrerfrcFTrrrdz%s%szhttp://%s%szformat_uri(): )rgrIrirjrrMrkrZ
proxy_hostr�rhr)rSrN�	base_pathrnrdr4r4r5�
format_uri%s,
������z
S3.format_uricCs*|�d�}|�|�}t|dd�|d<|S)Nr��dataZBucket�list)�create_request�send_requestr)rS�request�responser4r4r5�list_all_buckets:s

zS3.list_all_buckets���cCsZg}g}|�|||||�D]\}}	}
|�|
�|�|	�qi}||d<||d<||d<|S)Nr�Zcommon_prefixes�	truncated)�bucket_list_streaming�extend)rSrb�prefix�	recursive�
uri_params�limitZ	item_list�prefixesr��dirsZobjectsr�r4r4r5�bucket_list@s
zS3.bucket_listc#sJdd�}dd�}dd�}�fdd�}	|r0|��p2i}d	}
g}d
}d
}
|}|
�rF|�|||||��|�d�}|�d�}|t|�7}|
t|�7}
|||
kr�|||
}|�d�}
|
�r8|dks�||
|k�r(|r�|	�d|d
�|d<n,|�r|	�d|d�|d<nd||fV�qFtd|d�n|
||fV�qF|
||fVqHdS)ze Generator that produces <dir_list>, <object_list> pairs of groups of content of a specified bucket. cSst|d�pd}|��dkS)N�.//IsTruncated�false)rr�)r�Zis_truncatedr4r4r5�_list_truncatedOsz1S3.bucket_list_streaming.<locals>._list_truncatedcSs
t|d�S)NZContents�r�r�r4r4r5�
_get_contentsTsz/S3.bucket_list_streaming.<locals>._get_contentscSs
t|d�S)NZCommonPrefixesr�r�r4r4r5�_get_common_prefixesWsz6S3.bucket_list_streaming.<locals>._get_common_prefixescst�dd�p|d|S)Nr�Z
NextMarkerr�)r)r�Zcurrent_elts�key�r�r4r5�_get_next_markerZsz2S3.bucket_list_streaming.<locals>._get_next_markerTrr�r��KeyZmarkerZPrefixF�Listing continues after '%s'N)�copy�bucket_list_noparserEr)rSrbr�r�r�r�r�r�r�r�r�r��num_objectsZnum_prefixes�max_keysZcurrent_listZcurrent_prefixesr4r�r5r�MsF
���zS3.bucket_list_streamingcCsn|duri}|r||d<|jjs,|s,d|d<|dkr@t|�|d<|jjrPd|d<|jd||d	�}|�|�}|S)
Nr��/Z	delimiterr�zmax-keys�truezallow-unorderedr��rbr�)rMr�rCZlist_allow_unorderedr�r�)rSrbr�r�r�r�r�r�r4r4r5r��s
zS3.bucket_list_noparsecCs�tdd�}|r|�|�d}|r�|����dkr�|����dkr�|��}|��dkr\|��}d}||7}|d7}td	|�t|dd
�nt|dd
�|jjr�d|d
<d|d<|j	d|||d�}|�
|�}|S)NTrJre�US�	us-east-1�EUz/<CreateBucketConfiguration><LocationConstraint>z1</LocationConstraint></CreateBucketConfiguration>zbucket_location: )Z
dns_strictF�public-read�	x-amz-aclZObjectWriterzx-amz-object-ownershipr�)rbrLrQ)r�update�strip�upperr�rrrM�
acl_publicr�r�)rSrbrm�
extra_headersrLrQr�r�r4r4r5�
bucket_create�s(

$
zS3.bucket_createcCs|jd|d�}|�|�}|S)Nr�)rb�r�r�)rSrbr�r�r4r4r5�
bucket_delete�s
zS3.bucket_deleteFc		CsB|��}|jd|��ddid�}tj�|d�}tj�|d�}z~|rb|rJ|sb|jjtj|<dtj|<|�|�}W||vr�|tj|<n|tjvr�tj|=||vr�|tj|<n|tjvr�tj|=nP||vr�|tj|<n|tjvr�tj|=||vr�|tj|<n|tjv�r
tj|=0t	|dd�}|�r*|dv�r0d}n|d	k�r>d
}|S)Nr��locationr�rer�r�ZLocationConstraint)rer�r�z	eu-west-1)
rbr�rIrirgrlrMr�r�r)	rSrd�force_us_defaultrbr�Zsaved_redir_mapZsaved_region_mapr�r�r4r4r5�get_bucket_location�sB�



�


zS3.get_bucket_locationcCsF|jd|��ddid�}|�|�}|�dd�}|r>t|d�}nd}|S)Nr��requestPaymentr�r�reZPayer�r�rbr�rgr)rSrdr�r��	resp_dataZpayerr4r4r5�get_bucket_requester_pays�s�
zS3.get_bucket_requester_payscCsTtdd�}d}||}td|�t|�|d<|jd|||ddid�}|�|�}|S)	NTrJz�<OwnershipControls xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Rule><ObjectOwnership>%s</ObjectOwnership></Rule></OwnershipControls>zset_bucket_ownership(%s)�content-md5r��ownershipControls�rdrLrQr��rrr+r�r�)rSrd�	ownershiprLrQr�r�r4r4r5�set_bucket_ownership�s
�
zS3.set_bucket_ownershipcCsF|jd|��ddid�}|�|�}|�dd�}|r>t|d�}nd}|S)Nr�r�r�r�rez.//Rule//ObjectOwnershipr�)rSrdr�r�r�r�r4r4r5�get_bucket_ownership�s�
zS3.get_bucket_ownershipc	Cs�tdd�}d}dD]*}|�|d�r&dp(d}|d|||f7}q|d	7}td
|�t|�|d<|jd|||d
did�}|�|�}|S)NTrJzP<PublicAccessBlockConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">��BlockPublicAcls�IgnorePublicAcls�BlockPublicPolicy�RestrictPublicBucketsFr�r�z<%s>%s</%s>z!</PublicAccessBlockConfiguration>z"set_bucket_public_access_block(%s)r�r��publicAccessBlockr�)rrgrr+r�r�)	rSrdr9rLrQ�tag�valr�r�r4r4r5�set_bucket_public_access_block�s
�
z!S3.set_bucket_public_access_blockcCsr|jd|��ddid�}|�|�}|�dd�}|rjt|d�dkt|d�dkt|d	�dkt|d
�dkd�}ni}|S)Nr�r�r�r�rer�r�r�r�r�r�r�)rSrdr�r�r�r9r4r4r5�get_bucket_public_access_blocks�
�z!S3.get_bucket_public_access_blockcCs�i}|�|�|d<d|jfd|jfd|jffD]F\}}z||�||<Wq.tyr}zd||<WYd}~q.d}~00q.z|�|�|d<Wn,ty�}zi|d<WYd}~n
d}~00|S)Nzbucket-locationzrequester-pays�
versioningr�zpublic-access-block)r�r��get_versioningr��S3Errorr�)rSrdr�r��func�er4r4r5�bucket_infos� zS3.bucket_infoc
Cs�|��}|jd|ddid�}zT|�|�}t|dd�|d<t|dd�|d<|jj|��|�|�d	�|d
<|WSty�}z.|jdkr�t	d�WYd}~dS�WYd}~n
d}~00dS)
Nr��websiter�r�z.//IndexDocument//SuffixZindex_documentz.//ErrorDocument//KeyZerror_document)rbr��website_endpoint�zICould not get /?website - website probably not configured for this bucket)
rbr�r�rrMr�r�r��statusr)rSrdrmrbr�r�r�r4r4r5�website_info/s$�
�
zS3.website_infocCs�|��}d}|d7}|d|jj7}|d7}|jjrT|d7}|d|jj7}|d7}|d7}|jd	||d
did�}|�|�}td|�|S)
NzF<WebsiteConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">z  <IndexDocument>z    <Suffix>%s</Suffix>z  </IndexDocument>z  <ErrorDocument>�    <Key>%s</Key>z  </ErrorDocument>z</WebsiteConfiguration>r�r��rbrQr��Received response '%s')rbrMZ
website_indexZ
website_errorr�r�r)rSrdrmrbrQr�r�r4r4r5�website_createBs 
�
zS3.website_createcCsN|��}|jd|ddid�}|�|�}td|�|ddkrJtd|��|S)Nr�r�r�r�r���zExpected status 204: %s)rbr�r�r�S3ResponseError�rSrdrmrbr�r�r4r4r5�website_deleteUs�
zS3.website_deletec
Cs�|��}|jd|ddid�}z|�|�}Wnfty�}zN|jdkrZtd�WYd}~dS|jdkrztd�WYd}~dS�WYd}~n
d}~00t|d�}|d	kr�td
|�dSt|dd�|d<t|dd
�|d<t|dd�|d<|S)Nr��	lifecycler�r�zMCould not get /?lifecycle - lifecycle probably not configured for this bucket�zKCould not get /?lifecycle - lifecycle support not implemented by the serverr�ZLifecycleConfigurationz7Could not get /?lifecycle - unexpected xml response: %sz.//Rule//Prefixr�z.//Rule//Expiration//DaterZz.//Rule//Expiration//DaysZdays)rbr�r�r�r�rrr)rSrdrmrbr�r�r�Z
root_tag_namer4r4r5�expiration_infobs<�

����zS3.expiration_infocCs�|jjr|jjrtd��|jjs^|jjs^|jjr8td��td�|��}|jd|ddid�}n
|�|�}|�	|�}td|�|S)Nz+Expect either --expiry-day or --expiry-datezdel bucket lifecycler�r�r�r�)
rM�expiry_date�expiry_days�ParameterError�
expiry_prefixrrbr��_expiration_setr�r�r4r4r5�expiration_set�s�

zS3.expiration_setcCs�td�d}|d7}|d7}|d|jj7}|d7}|d7}|d7}|jjr^|d	|jj7}n|jjrv|d
|jj7}|d7}|d7}|d
7}tdd�}t|�|d<|��}|jd|||ddid�}|S)Nzput bucket lifecyclez<LifecycleConfiguration>z  <Rule>z    <Filter>z      <Prefix>%s</Prefix>z
    </Filter>z    <Status>Enabled</Status>z    <Expiration>z      <Date>%s</Date>z      <Days>%s</Days>z    </Expiration>z	  </Rule>z</LifecycleConfiguration>TrJr�r�r��rbrLrQr�)	rrMrr�r�rr+rbr�)rSrdrQrLrbr�r4r4r5r�s.
�zS3._expiration_setcCs�|jj}d}|dkr$|jjs$td��|jjrl|jjrHttj�t	|���}|jj
r^t|�\}}nt�
|�\}}|sx|jj}||fS)N�-zRYou must specify --mime-type or --default-mime-type for files uploaded from stdin.)rM�default_mime_typer�Zguess_mime_type�follow_symlinksr�os�path�realpathrZuse_mime_magicrGr=r>)rS�filename�content_type�content_charsetr4r4r5�_guess_content_type�szS3._guess_content_typecCs,|jj}|s|jj}|d|jj��7}|S)N�
; charset=)rM�	mime_typer�encodingr�)rSrr4r4r5�stdin_content_type�s
zS3.stdin_content_typecCsl|jj}d}|dkr|��S|r&d}n|s8|�|�\}}|sH|jj��}|�||�rh|durh|d|}|S)Nrzapplication/x-directoryr)rMrrr
rr��add_encoding)rSr
�is_dirrrr4r4r5r�szS3.content_typecCsbd|vrdS|jj�d�}|ddkr*dS|�dd�}t|�dkrFdS|d}||vrZd	SdSdS)
Nzcharset=F�,rre�.rHrT)rMZadd_encoding_extsrD�rsplitrE)rSr
rZexts�parts�extr4r4r5r�szS3.add_encodingrec
Cs�|jdkrtd|j��z�d}d}|dkrLd}tjtj��ddd�}d	|_ndd}t|�}	t	�
|	�}
|
t}t|�r�d}t�
d
�}n(t|�s�td��ntj|	dd�}|
t}||_Wn6ttfy�}ztd
|j��WYd}~n
d}~00tdd�}
|�r|
�|�|jj�rd|
d<|jj�r4d|
d<|jj|
d<|j||d�|
d<|jj�rXd|
d<|��|
d<d}|jj�s�|�r�td��|jj�r�||jjtk�s�|�r�d}||jj |jjtk�r�td|jj|jj f��|�r�|�!||
|||�S|jj"�r�z|�#|�}Wnt$�y d}Yn0|du�r�t%|dd�}|dd�&d�}||k�r�t'd|d||jj(�}||k�r�t)d|�dSt)d |||f�nt)d!|||f�t*|�|
d<|j+d"||
d#�}||�,�|d$�}|�-|||�}|S)%NrK� Expected URI type 's3', got '%s'FrrT�rb)�mode�closefdz<stdin>�zNot a regular file)r�%srJ�AES256�x-amz-server-side-encryption�aws:kms�+x-amz-server-side-encryption-aws-kms-key-id)r
r�content-typer�r��x-amz-storage-classz2Multi-part upload is required to upload from stdinzZChunk size %d MB results in more than %d chunks. Please increase --multipart-chunk-size-mbrL�content-length�etag�"'rez,Put: size and md5sum match for %s, skipping.zBMultiPart: checksum (%s vs %s) does not match for %s, reuploading.z>MultiPart: size (%d vs %d) does not match for %s, reuploading.r��rdrL��sourceZdestinationZextra).�type�
ValueError�io�open�sys�stdin�fileno�stream_namerr�statrr�BytesIOr
�InvalidFileErrorr
�IOError�OSError�strerrorrr�rM�server_side_encryption�kms_keyrr�r��enable_multipartr�Zmultipart_chunk_size_mb�SIZE_1MBZmultipart_max_chunks�send_file_multipartZput_continue�object_info�	Exception�intr�r-�
send_chunkrrCr�rd�	send_file)rSr
rdr��extra_labelr�sizeZ	is_streamZ
src_streamZfilename_bytesr3rr�rL�	multipartrZremote_sizeZremote_checksumZchecksumr��labelsr�r4r4r5�
object_put�s�



$





�




��z
S3.object_putc	CsJ|jdkrtd|j��|jd|d�}|��||d�}|�||||�}|S)NrKrr��rdr))r+r,r�rd�	recv_file)	rSrd�streamZ	dest_name�start_positionrCr�rFr�r4r4r5�
object_getOs
z
S3.object_getcs�fdd��D�}|�|�S)z" Batch delete given a remote_list csg|]}�|d�qS)Zobject_uri_strr4)�.0�item��remote_listr4r5�
<listcomp>Yrz*S3.object_batch_delete.<locals>.<listcomp>)�object_batch_delete_uri_strs)rSrP�urisr4rOr5�object_batch_deleteWszS3.object_batch_deletec	Csvdd�}|}t|�dkr td��t|d���}|||�}tt|�dd�dd�}|jd	|||d
did�}|�|�}|S)
z* Batch delete given a list of object uris cSs�d}|D]f}t|�}|jdkr,td|j��|��s@td|��|��|krTtd��t�|���}|d|7}q|d7}t|�}|S)Nz.<?xml version="1.0" encoding="UTF-8"?><Delete>rKrzURI '%s' has no objectz2The batch should contain keys from the same bucketz<Object><Key>%s</Key></Object>z	</Delete>)	r%r+r,�
has_objectrbr�escape�objectr)rbZkey_listrQr�rdrWr4r4r5�compose_batch_del_xml^s
z>S3.object_batch_delete_uri_strs.<locals>.compose_batch_del_xmlrzKey list is empty�application/xml)r�r#TrJr��deleteNr)rEr,r%rbrr+r�r�)	rSrSrXZbatchrbZrequest_bodyrLr�r�r4r4r5rR\s"
���
zS3.object_batch_delete_uri_strscCs4|jdkrtd|j��|jd|d�}|�|�}|S)NrKrr�rH)r+r,r�r��rSrdr�r�r4r4r5�
object_delete{s


zS3.object_deletecCs�|jdkrtd|j��|jjdkr,td��|jjdvr@td��d}|d|jj7}|d	7}|d
|jj7}|d7}|d7}|jd
||ddid�}|�|�}td|�|S)NrKrrz*You must restore a file for 1 or more days)ZStandardZ	ExpeditedZBulkz7Valid restoration priorities: bulk, standard, expeditedz@<RestoreRequest xmlns="http://s3.amazonaws.com/doc/2006-03-01/">z  <Days>%s</Days>z  <GlacierJobParameters>z    <Tier>%s</Tier>z  </GlacierJobParameters>z</RestoreRequest>r�Zrestore�rdrQr�r�)	r+r,rMZrestore_daysr�Zrestore_priorityr�r�r)rSrdrQr�r�r4r4r5�object_restore�s$

�
zS3.object_restorecCs4gd�}||jjD]}|��|vr||��=q|S)N)rZr%z
last-modifiedr�zx-amz-version-idzx-amz-delete-markerz
accept-rangesZ
connectionr&Zserverz
x-amz-id-2zx-amz-request-idzcf-rayr$)rMZremove_headersr�)rSrL�	to_remove�hr4r4r5�_sanitize_headers�s
zS3._sanitize_headersc
Cs�|jdkrtd|j��|jdkr0td|j��|jjdur�z|�|�}Wn6ty�}z|jdkrh|�d}WYd}~n
d}~00d}	d}
|s�|jjr�d}|r�|�|�}|d}
t	|
d�}|jj
�rL|
}|dur�|�|�}|d}t	|d�}||u�rtjt
}
n|jjt
}
||
k�rL|du�rD|�|�}|d}t	|d�}|}
d}	|
�rj|�|
�t|
dd	�}
n
tdd	�}
|jj�r�d
|
d<|��|
d<|jj�r�d
|
d<|jj�r�d|
d<|jj|
d<|�r�|
�|�|jj�r�|jj|
d<|�s�d|
d<nd|
d<|	�r|�||||
|�}n<td|��|��fddd�|
d<|jd||
d�}|�|�}|d�r�t|d�dk�r�d|d<td�t|��|jjdu�r�|�r�z|�||�Wn6t�y�}z|jdk�r�|�WYd}~n
d}~00|S)a Remote copy an object and eventually set metadata

        Note: A little memo description of the nightmare for performance here:
        ** FOR AWS, 2 cases:
        - COPY will copy the metadata of the source to dest, but you can't
        modify them. Any additional header will be ignored anyway.
        - REPLACE will set the additional metadata headers that are provided
        but will not copy any of the source headers.
        So, to add to existing meta during copy, you have to do an object_info
        to get original source headers, then modify, then use REPLACE for the
        copy operation.

        ** For Minio and maybe other implementations:
        - if additional headers are sent, they will be set to the destination
        on top of source original meta in all cases COPY and REPLACE.
        It is a nice behavior except that it is different of the aws one.

        As it was still too easy, there is another catch:
        In all cases, for multipart copies, metadata data are never copied
        from the source.
        rKrNr�FTrLr%rJr�r�r$rr r!r"r#ZCOPYzx-amz-metadata-directiveZREPLACEz/%s/%srrzx-amz-copy-sourcer�r(r��Error��r�zHServer error during the COPY operation. Overwrite response status to 500)r+r,rMr��get_aclr�r�rr>r@r;r$ZMAX_CHUNK_SIZE_MBr<Zmultipart_copy_chunk_size_mbrarr�r9r:r��copy_file_multipartrrbrWr�r�rr	�set_acl)rS�src_uri�dst_urir��src_sizerC�replace_meta�acl�excrErLZsrc_infoZsrc_headersZ	thresholdr�r�r4r4r5�object_copy�s�














�



��
�
zS3.object_copycCs|j|||||dd�S)NT)rj)rm)rSrgrhr�rirCr4r4r5�
object_modifyHs�zS3.object_modifycCs^|�|||||�}td||f�|dr:t|d�dvrP|�|�td|�n
td|�|S)NzObject %s copied to %sr�)ZCopyObjectResultZCompleteMultipartUploadResultzObject '%s' deletedzGObject '%s' NOT deleted because of an unexpected response data content.)rmrrr\r)rSrgrhr�rirCZ
response_copyr4r4r5�object_moveNs
�
��
�zS3.object_movec
Csl|jd|d�}z|�|�}WnJtyf}z2|jdkrN|jsNd|_d|_||_|�WYd}~n
d}~00|S)Nr�rHr�Z	NoSuchKeyz!The specified key does not exist.)r�r�r�r��code�messagerN)rSrdr�r�rlr4r4r5r>]szS3.object_infocCsP|��r|jd|ddid�}n|jd|��ddid�}|�|�}t|d�}|S)Nr�rk�rdr�r�r�r�)rUr�rbr�r)rSrdr�r�rkr4r4r5rdls��
z
S3.get_aclcCstd|}td||f�tddidd�}|��rJ|jd|||ddid	�}n|jd
|��||ddid�}|�|�}|S)Nrzset_acl(%s): acl-xml: %sr#rYTrJr�rkr�r�r)rrrUr�rbr�)rSrdrkrQrLr�r�r4r4r5rfxs��
z
S3.set_aclcCsptdd�}|durdnd}d}|d|7}|d7}td|�t|�|d	<|jd
|||ddid�}|�|�}|S)
NTrJZEnabledZ	SuspendedzI<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">�<Status>%s</Status>z</VersioningConfiguration>zset_versioning(%s)r�r�r�r�r�)rSrdZenabledrLr�rQr�r�r4r4r5�set_versioning�s
�
zS3.set_versioningcCs,|jd|ddid�}|�|�}t|dd�S)Nr�r�rrr�ZStatus)r�r�rr[r4r4r5r��s
�
zS3.get_versioningcCs.|jd|��ddid�}|�|�}t|d�S)Nr��policyr�r��r�rbr�rr[r4r4r5�
get_policy�s
�
z
S3.get_policycCs\d}|d|7}|d7}tdd�}d|d<t|�|d<|jd	|||d
did�}|�|�}|S)Nz;<LegalHold xmlns="http://s3.amazonaws.com/doc/2006-03-01/">rsz</LegalHold>TrJrYr#r�r�z
legal-holdr��rr+r�r�)rSrdZlegal_hold_statusrQrLr�r�r4r4r5�set_object_legal_hold�s
�
zS3.set_object_legal_holdcCshd}|d|7}|d|7}|d7}tdd�}d|d<t|�|d	<|jd
|||ddid�}|�|�}|S)
Nz;<Retention xmlns="http://s3.amazonaws.com/doc/2006-03-01/">z<Mode>%s</Mode>z%<RetainUntilDate>%s</RetainUntilDate>z</Retention>TrJrYr#r�r�Z	retentionr�rx)rSrdrZretain_until_daterQrLr�r�r4r4r5�set_object_retention�s
�
zS3.set_object_retentioncCs8tdd�}d|d<|jd|||ddid�}|�|�}|S)NTrJzapplication/jsonr#r�rur�)rr�r��rSrdrurLr�r�r4r4r5�
set_policy�s
�
z
S3.set_policycCs.|jd|ddid�}td|�|�|�}|S)Nr�rurrzdelete_policy(%s)�r�rr�r[r4r4r5�
delete_policy�s�
zS3.delete_policycCs.|jd|��ddid�}|�|�}t|d�S)Nr��corsr�r�rvr[r4r4r5�get_cors�s
�
zS3.get_corscCsDtdd�}d|d<t|�|d<|jd|||ddid�}|�|�}|S)	NTrJrYr#r�r�rr�rx)rSrdrrLr�r�r4r4r5�set_cors�s
�
zS3.set_corscCs.|jd|ddid�}td|�|�|�}|S)Nr�rrrzdelete_cors(%s)r}r[r4r4r5�delete_cors�s�
zS3.delete_corscCsLtdd�}t|�|d<|jd|||ddid�}td||f�|�|�}|S)NTrJr�r�r�r�z(set_lifecycle_policy(%s): policy-xml: %s)rr+r�rr�r{r4r4r5�set_lifecycle_policy�s
�
zS3.set_lifecycle_policycCs\tdd�}d|d<d}|jjr(|d7}n|d7}|d7}|jd	||d
did�}|�|�}|S)NTrJrYr#zN<RequestPaymentConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
z<Payer>Requester</Payer>
z<Payer>BucketOwner</Payer>
z</RequestPaymentConfiguration>
r�r�r])rrMrRr�r�)rSrdrLrQr�r�r4r4r5�	set_payer�s


�
zS3.set_payercCsB|jd|��ddid�}td|�|�|�}td|d�|S)Nr�r�r�zget_lifecycle_policy(%s)z%s: Got Lifecycle Policyr��r�rbrr�r[r4r4r5�get_lifecycle_policys�
zS3.get_lifecycle_policycCs.|jd|ddid�}td|�|�|�}|S)Nr�r�rrzdelete_lifecycle_policy(%s)r}r[r4r4r5�delete_lifecycle_policy	s�
zS3.delete_lifecycle_policycCsPtdd�}|jjrd|d<|jd|||ddid�}td||f�|�|�}|S)	NTrJ�Truez!x-amz-skip-destination-validationr��notificationr�z+set_notification_policy(%s): policy-xml: %s)rrMZskip_destination_validationr�rr�r{r4r4r5�set_notification_policys
�
zS3.set_notification_policycCsB|jd|��ddid�}td|�|�|�}td|d�|S)Nr�r�r�zget_notification_policy(%s)z%s: Got notification Policyr�r�r[r4r4r5�get_notification_policys�
zS3.get_notification_policycCsd}|�||�S)Nz7<NotificationConfiguration></NotificationConfiguration>)r�)rSrdZempty_configr4r4r5�delete_notification_policy$szS3.delete_notification_policyc	Cs�|jdkrtd|j��d}|d7}|D]0\}}|d7}|d|7}|d|7}|d7}q(|d	7}|d
7}tdd�}t|�|d
<|��r�|jd|||ddid�}n|jd|��||ddid�}td||f�|�|�}|S)NrKrz9<Tagging xmlns="http://s3.amazonaws.com/doc/2006-03-01/">z<TagSet>z<Tag>r�z    <Value>%s</Value>z</Tag>z	</TagSet>z
</Tagging>TrJr�r��taggingr�r�rzset_tagging(%s): tagset-xml: %s)	r+r,rr+rUr�rbrr�)	rSrd�tagsetsrQr�r�rLr�r�r4r4r5�set_tagging(s2


��
zS3.set_taggingcCsr|��r|jd|ddid�}n|jd|��ddid�}td|�|�|�}|d}t|d�}td	|d
�|S)Nr�r�rrr�r�zget_tagging(%s)r�ZTagz%s: Got object taggingr�)rUr�rbrr�r)rSrdr�r��xml_datar�r4r4r5�get_taggingBs��

zS3.get_taggingcCsP|��r|jd|ddid�}n|jd|��ddid�}td|�|�|�}|S)Nr�r�rrr�r�zdelete_tagging(%s))rUr�rbrr�r[r4r4r5�delete_taggingQs��
zS3.delete_taggingcCs*g}|�|||�D]\}}|�|�q|Sr0)�get_multipart_streamingr�)rSrdr�r��upload_listr��uploadsr4r4r5�
get_multipart\s�zS3.get_multipartccs4|r|��pi}|��}d}d}|}d|d<|�r0|j|d||d�}|d}	t|	d�}
|t|
�7}||krr||}t|	d�}|r�|��dkr�d	}|�r$|d
ks�||k�r|
r�t|	d�}|s�|
d
d}||d
<t|	d�}
|
r�|
|d<nd|vr�|d=nd	|
fV�q0td|d
�n||
fV�q0||
fVq,dS)NTrr�)r�r�r�r�ZUploadr�r�Fr�Z
NextKeyMarkerr�Z	KeyMarkerZNextUploadIdMarkerZUploadIdMarkerr�)r�rbr�rrErr�r)rSrdr�r�rbr�r�r�r�r�r��
xml_truncatedZnext_keyZupload_id_markerr4r4r5r�esR�


�

�
zS3.get_multipart_streamingcCs,g}|�||||�D]\}}|�|�q|Sr0)�list_multipart_streamingr�)rSrd�	upload_idr�r��	part_listr�rr4r4r5�list_multipart�s�zS3.list_multipartc
cs�|r|��pi}d}d}|}|r�|�||||�}|d}	t|	d�}
|t|
�7}||kr^||}t|	d�}|rx|��dkr|d}|r�|dks�||kr�|
r�t|	d	�}|s�|
dd
}||d<nd|
fVq�td|d�n||
fVq�||
fVqdS)
NTrr�ZPartr�r�Fr�ZNextPartNumberMarkerZ
PartNumberzpart-number-markerz!Listing continues after Part '%s')r��list_multipart_noparserrErr�r)
rSrdr�r�r�r�r��	max_partsr�r�r�r�Znext_part_numberr4r4r5r��sB�

�

�
zS3.list_multipart_streamingcCsF|duri}|dkr t|�|d<||d<|jd||d�}|�|�}|S)Nr�z	max-parts�uploadIdr�rr)rCr�r�)rSrdr�r�r�r�r�r4r4r5r��s�
zS3.list_multipart_noparsecCs"|jd|d|id�}|�|�}|S)Nr�r�rrr�)rSrd�idr�r�r4r4r5�abort_multipart�s
�
zS3.abort_multipartcCs2|jd|��ddid�}|�|�}t|d�}|S)Nr��loggingr�r�)r�rbr�r)rSrdr�r��	accesslogr4r4r5�
get_accesslog�s�
zS3.get_accesslogcCs^|�|�}td|��|f�|�td��|�td��td|��|f�|�||�dS)NzCurrent ACL(%s): %sZREAD_ACPZWRITEzUpdated ACL(%s): %s)rdrrdZ
appendGranteer rf)rSrdrkr4r4r5�set_accesslog_acl�s
zS3.set_accesslog_aclc

Cs�t�}|r |�|�|�|�n|��d|}td||f�|jd|��|ddid�}z|�|�}Wn^ty�}	zF|	j	ddkr�t	d�|�
td	|����|�|�}n�WYd}	~	n
d}	~	00||fS)
Nrz$set_accesslog(%s): accesslog-xml: %sr�r�r��CodeZInvalidTargetBucketForLoggingz.Setting up log-delivery ACL for target bucket.zs3://%s)rZ
enableLoggingZsetAclPublicZdisableLoggingrr�rbr�r�rr�r%)
rSrd�enableZlog_target_prefix_urir�r�rQr�r�r�r4r4r5�
set_accesslog�s&
�zS3.set_accesslogcCs�ddd�}|r|s|rtd��|r>|��}|��r:|��p<d}|rZ||d<|rZd||d<tj�tj|tjd@�}	t||	||||�}
t	d|d�|
S)Nr�)rbrdz>Both 'uri' and either 'bucket' or 'object' parameters suppliedrbrdr~zCreateRequest: resource[uri]=%s)
r,rbrUrWrx�http_methodsZgetkey�
operationsrIr)rSZ	operationrdrbrWrLrQr�rNrOr�r4r4r5r�	s
zS3.create_requestcCs|jj|ddS)Nr�)rM�max_retries)rS�retriesr4r4r5�
_fail_waitsz
S3._fail_waitc
Os8|d�d�}d|vr~t|d�dkr~t|dd�}t|dd�}|�||�td|�|rp|tj|<td|�||i|��S|jd	k�r,|d�d
�}	|	�r"|	�d�r�|	dd�}	n|	�d
�r�|	dd�}	t	d
|	�j
}	|jd}|�||	�td|	�|�r|tj|<td|�||i|��Std|�t
|��dS)NrLzx-amz-bucket-regionr�rz	.//Bucketz.//EndpointzRedirected to: %szRedirected to region: %srXr�zhttp://�zhttps://rzrbz�Redirection error: No info provided by the server to where should be forwarded the request (HEAD request). (Hint target region: %s))rgrErr�rrIrlrOrjrrprNrr�)
rSr�r��fn�args�kwargsZredir_regionZredir_bucketr�Zlocation_urlr4r4r5�_http_redirection_handler#s6









zS3._http_redirection_handlerc	Osd|vr�t|d�dkr�t|dd�}|dkrvt|dd�}|durl|tj|jd<td|�||i|��Std	�nn|d
kr�t|dd�}|dkr�td
�d|_||i|��Sn2|dkr�|�	�s�|j
s�td�d|_
||i|��Sn.|�	��s|j
�std�d|_
||i|��SdS)zR
        Returns None if no handler available for the specific error code
        r�rr�ZAuthorizationHeaderMalformedZRegionNrbzForwarding request to %szVCould not determine bucket the location. Please consider using the --region parameter.ZInvalidRequest�Messagez\The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.zEndpoint requires signature v4TZInvalidArgument�Falling back to signature v2)rErrIrlrNrrrr_rar`)	rSr�r�r�r�r��failureCode�regionrqr4r4r5�_http_400_handlerHs2

zS3._http_400_handlercOszd|vrnt|d�dkrnt|dd�}|dkrnt|dd�}|dkrn|��sn|jsntd�d|_||i|��St|��dS)	Nr�rr�r�r�z=AWS authentication requires a valid Date or x-amz-date headerr�T)rErrar`rr�)rSr�r�r�r�r�r�rqr4r4r5�_http_403_handlerrszS3._http_403_handlerc
Cs�|j�d�r�|��s�tj�|jdt�j�dkr�td�zFtd|jd�}|j	|dd�}|durr|tj|jd<td|�Wn6t
y�}ztd	|�td
�WYd}~n
d}~00dS)a?Get and update region for the request if needed.

        Signature v4 needs the region of the bucket or the request will fail
        with the indication of the correct region.
        We are trying to avoid this failure by pre-emptively getting the
        correct region to use, if not provided by the user.
        rbr�z====== SEND Inner request to determine the bucket region =====zs3://T)r�NzE===== SUCCESS Inner request to determine the bucket region (%r) =====z,getlocation inner request failure reason: %sz?===== FAILED Inner request to determine the bucket region =====)rNrgrarIrlr"rmrr%r�r?)rSr�Zs3_urir�rlr4r4r5�update_region_inner_request�s&����
zS3.update_region_inner_requestc
Cs�|dur|jj}|�|�t|j�|_|j}|��\}}}i}td�d}z�t�	|�
|d��}|�||j�}td|||t
|jp�d�f�|j�|||j|�|j��}	|	j|d<|	j|d<t|	���|d<|	��|d<d	|dvr�t|dd	�}
|
|d
<t�|�W�n<ttf�y(�Y�n"ttf�y*}z�tdt�|��t|d��rz|j�rz|jtj tj!tj"fv�s�d
t#|�v�s�dt#|�v�r�t$|t%��s��t�&|�|�rt'd|d|f�t'd|�(|��t)�*|�(|��|�+||d�WYd}~St,d|d��WYd}~n(d}~0tdt�|���Yn0tdt�|��|ddv�r||�-|||j+|�S|ddk�r
|�.|||j+|�}|�r�|St/|�}
|�r|
j0dv�rt'd|d|
f�t'd|�(|��t)�*|�(|��|�+||d�S|
�|ddk�r*|�1|||j+|�S|ddk�r@t/|��|ddk�s\|ddk�r�t/|�}|ddk�rvd}|�r�t'd|d|f�t'd|�(|��t)�*|�(|��|�+||d�S|�|ddk�s�|ddk�r�t/|��|S)Nz"Processing request, please wait...rbzESending request method_string=%r, uri=%r, headers=%r, body=(%i bytes)rer��reasonrLr��x-amz-meta-s3cmd-attrs�s3cmd-attrs�
Response:
�errno�[Errno 104]�
[Errno 32]� Retrying failed request: %s (%s)rd�Waiting %d sec...rzRequest failed for: %s�i-i3��Z	BadDigestZOperationAbortedZTokenRefreshRequiredZRequestTimeout�i�rc�r�r���+)2rMr�r�rrQrLrtrr&rgrhr�rrE�cr��getresponser�r�r�
getheaders�read�parse_attrs_header�putZ
S3SSLErrorZS3SSLCertificateErrorr6r?�pprint�pformat�hasattrr��EPIPE�
ECONNRESET�	ETIMEDOUTrCrB�SocketTimeoutException�closerr�r[�sleepr�ZS3RequestErrorr�r�r�rpr�)rSr�r�rLrOrNr��connrd�
http_response�attrsr��
handler_fn�errr4r4r5r��s�



�
�
��
$zS3.send_requestc
Cs�|jjstd�|�|�Sd|vr*d|d<|j�||�}z|�|�}Wn0tyv}z|�d��WYd}~n
d}~00|j|d�|�d�|S)zrWrapper around send_request for slow requests.

        To be able to show progression for small requests
        z$Sending slow request, please wait...�actionr��failedN)�current_position�done)rM�progress_meterrr��progress_classr?r�r�)rSr�rFZoperation_size�progressr�rlr4r4r5�send_request_with_progresss


zS3.send_request_with_progressc
)Cs^	|dur|jj}|�|�|	dur*|jj}	|jr8|	r8d}	|j}
t|
d�}}|j}
|jjrtd|d<|j�	||�}nt
d|
�t��}|r�t|||�}nt
|||�}||_|	r�|s�d}	nd|
d<|��\}}}
zdt�|�|d��}|j�||�||j��|
��D] }|j�t|�t|
|���q|j��Wn�t�y\}z�WYd}~n�d}~0t�y}z�|jj�r�|�d	�|�r�td
|d|f�td|�|��t� |�|��|�!||||||d
||�WYd}~St"d|d��WYd}~n
d}~00|dk�r|�#|�t$�}�z�d}|	�r�t%�%|jj&gggt'�\}}}|�r`|j�(�}n |�s�|�s�tdt'�d|_d}	|	�r�|�r�|j)tj*k�r�|�r�|�+�tj,|j_-|dk�r�t.|jj/|�}|dk�r�|�+|�}n|}|�s�t0d��|jj1dk�rt��}|�2|�|j�3|�|jj�r8|j2t4|�d�|t4|�8}|}|jj1dk�r�t��|}t5|�|jj1} t6| ||�}|�r�t� t.||jj7���q�|�8�}!|j�(�}i}"|j)|"d<|j9|"d<t:|�;��|"d<|�+�|"d<||"d<t�<|�t=dt>�?|"��W�n�t�y6}z�WYd}~�n�d}~0t0�yr}z$|jj�rZ|�d	��WYd}~�n�d}~0t�y�}�zr|jj�r�|�d	�|�r�d}#t@|d��r�|jA�r�|jAtAjBtAjCtAjDfv�s�dtE|�v�s�dtE|�v�rbtF|tG��sbzN|j�(�}i}"|j)|"d<|j9|"d<t:|�;��|"d<|�+�|"d<||"d<d}#Wnt�y`tHd�Yn0|#�s�td|d|f�td|�|��t� |�|��|�!||||||d
|||	�	WYd}~Sn t=d |
|f�t"d|d��WYd}~n
d}~00t��}$|$||"d!<|"d!�r4t5|"d�|"d!�p:t5d"�|"d#<|jj�r\|�2�|�d$�|"dd%v�r�|jI||"|j!|||||||	d&�
S|"dd'k�r�|jJ||"|j!|||||||	d&�
}%|%�r�|%StK|"�}&|&jLd(v�r�|&�|"dd)k�r|jM||"|j!|||||||	d&�
S|"dd*k�rB|�rBd|_|j!||||||d
||dd+�	Sd,|"dv�r\d|"dd,<|"dd-k�sx|"dd.k�r�d}'|"dd/k�r�d}'|"dd0k�r�|�r�|d1�p�d2}n|"dd3k�rd}'nN|"dd4k�r�d}'|�r�|d1�p�d2}n&|"dd'k�rtK|"�}&|&jLd(v�rd}'tK|"�}&|'�r�|�r�td|d|&f�|�rNtd5|�td|�|��t� |�|��|�!||||||d
|||	�	Std6|
�t"d7|&��|&�t=d8|!|"d�d,d��Nd9�f�|"d�d,d��Nd9�}(d:|(v�	rZ|(|�8�k�	rZ|"d�d;�d<k�	rZtd=�|�	rFtd>|
�|�!||||||d
|||	�	Std6|
�t"d?��|"S)@NFr%�uploadr�z!Sending file '%s', please wait...z100-continue�expectrbr�r�rdr�rzUpload failed for: %srezQHTTP Expect Continue feature disabled because of no reply of the server in %.2fs.Trz3File smaller than expected. Was the file truncated?�Zdelta_positionr�r�rLr�rDr�r�r�r�zXCannot retrieve any response status before encountering an EPIPE or ECONNRESET exceptionzUpload failed: %s (%s)zGiving up on '%s' %s�elapsedr��speedr�r�)�offset�
chunk_size�use_expect_continuer�r�r�i�)r�r&r�r�rc��g{�G�z�?i�r�z(Retrying on lower speed (throttle=%0.2f)�$Too many failures. Giving up on '%s'rz"MD5 sums: computed=%s, received=%sr'rr r!zMD5 Sums don't match!zRetrying upload of %sz0MD5 sums of sent and received files don't match!)OrMr�r�Zuse_http_expectr�rLr@r2r�r�rr[r*r)rQrtr&rgrhr��
putrequestr�r�keys�	putheaderr�
endheadersr�r?r�rr�r�rB�
S3UploadError�seekr�selectZsock�EXPECT_CONTINUE_TIMEOUTr�r�ZCONTINUEr�Z_CS_REQ_SENTZ_HTTPConnection__state�minrAr5�	limitrater�Zwrapper_send_bodyrE�float�maxZthrottle_max�	hexdigestr�rr�r�rr�r�r�r�r�r�r�rCrBr�r	r�r�r�rpr�r�))rSr�rJrF�bufferZthrottler�r�r�r�rL�	size_left�
size_totalr
r��timestamp_startZsha256_hashrOrNr��headerr��md5_hashr��readable�writableZexceptional�lr��
start_timeZlimitrate_throttle�
real_duration�expected_durationZmd5_computedr�Zknown_error�
timestamp_endr�r��	try_retry�md5_from_s3r4r4r5rBs�



(&















�
�
��


�&,

�����",�zS3.send_filec
Cs�t��}t|||||�}|�|�|��}t��}	|	||d<||d<|drbt|d�|dphtd�|d<|dr�t|d�dkr�tt|dd���|S)Nr�rDr�r�r�rbr�)r[r$Zupload_all_partsZcomplete_multipart_uploadr�rr�r)
rSrJrLrdrDrCrr�r�r
r4r4r5r=s
(zS3.send_file_multipartcCs|�|||||�Sr0)r=)rSrgrhrDrLrCr4r4r5re/s�zS3.copy_file_multipartc!
Csn|dur|jj}|�|�|��\}}}|j}	|jjrNd|d<|j�|d�}
ntd|	�t��}d}z�t	�
|�|d��}|j�
||�||j��|��D]}
|j�t|
�t||
��q�|dkr�td|�|j�dd|�|j��i}|j��}|j|d	<|j|d
<t|���|d<d|dv�rDt|dd�}||d
<tdt�|��W�n6t�y�}z�WYd}~�nd}~0ttf�y�}z�|jj�r�|
� d�t!|d��r�|j"�r�|j"t"j#t"j$t"j%fv�s�dt&|�v�s�dt&|�v�rt'|t(��s�t	�)|�|�rlt*d|d|f�t*d|�+|��t�,|�+|��|j-|||||dd�WYd}~St.d|d��WYd}~n
d}~00|d	dk�s�|d	dk�r�|�/�|d<|d	dv�r�|�0|||j-||||�S|d	dk�r|�1|||j-||||�}|�r|St2|��|d	dk�r>|�3|||j-||||�S|d	dk�sZ|d	dk�rd}|d	d k�rrd!}n|d	d"k�r�d!}|�r�|d}|�r�|�+|�}t*d|t2|�f�t*d|�t�,|�|j-|||||dd�St*d#|�t.d|��t2|��|dk�rt4�}t5|dd$�}||}|}|jj�rL||
_6||
_7||
_8�z|dk�rv|�/d�}t9|�dk�svJ�||k�r\||jj:k�r�|jj:�p�|}|jj;dk�r�t��}|�/|�}t9|�dk�r�t<d%��|jj;dk�rt��|}t=|�|jj;}||k�rt�,||�|�>|�|dk�r2|�?|�|t9|�7}|jj�rv|
j?t9|�d&��qvt	�@|�W�n$tA�y��Y�nttf�y�}z�|jj�r�|
� d�t!|d��r�|j"�r�|j"t"j#t"j$t"j%fv�s�dt&|�v�s�dt&|�v�rt'|t(��s�t	�)|�|�rjt*d|d|f�t*d|�+|��t�,|�+|��|j-|||||dd�WYd}~St.d|d��WYd}~n
d}~00|�B�t��}|jj�r�|
�?�|
� d'�|d�
d(d)��Cd*�} d+|dv�rz|d
d,} WntD�yYn0d-| v�r�|dk�r(|�E�|d,<n^ztF|	�|d,<WnLt�y�}z2|j"t"jGk�rht*d.|	|f�t*d/�WYd}~n
d}~00|�
d,�| k|d0<|||d1<||d2<|d1�r�t=|d2�|d1�p�t=d3�|d4<|d2|t5|dd$�k�rt*d5|t5|dd$�|d2f�td6|�
d,��d-| v�rj|d0�sj|d�
d7�d8k�rjt*d9|�
d,�| f�|S):NZdownloadr�rz#Receiving file '%s', please wait...rbzRequesting Range: %d .. endZRangez	bytes=%d-r�r�rLr�r�r�r�r�r�r�r�rdr�r)r�zDownload failed for: %sr�r�r�r�r�r�Fr�Tr�r�r%zEOF from S3!r�r�r&rer'zx-amz-meta-s3tools-gpgencrrzUnable to open file: %s: %sz(Unable to verify MD5. Assume it matches.Zmd5matchr�rDr�r�z4Reported size (%s) does not match received size (%s)zReceiveFile: Computed MD5 = %sr r!z5MD5 signatures do not match: computed=%s, received=%s)HrMr�r�rtr2r�r�rr[r&rgrhr�r�r�rr�r�rrr�r�r�r�rr�r�r�r�r�r6r?r�r�r�r�r�r�rCrBr�r�rr�r�rIZS3DownloadErrorr�r�r�r�r�rr@Z
total_sizeZinitial_positionr�rEZ
recv_chunkr�r�r��writer�r�r7�flushr��KeyErrorr�r,�ENOENT)!rSr�rJrFrKr�rOrNrLr
r�rr�rr�r�r�r�r�rroZretry_delayrr�rr�r�Z
this_chunkrrr	r
rr4r4r5rI4sl






�
�
��
�&���

�
�












�
�
��
�&



,�(
�zS3.recv_file)N)NNNr�)NNNr�)NNNr�)NN)F)N)N)N)N)N)NF)Nre)rre)NNreF)NNre)NNre)Nr�)Nr�)Nr�)Nr�)Nr�)NF)NNNNreN)N)r)rerNrr�N)re)re)rN)Zrurvrwr!r��targetsr�ZcodesrTr�rhr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr
rrrrGrLrTrRr\r^rarmrnror>rdrfrtr�rwryrzr|r~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rBr=rerIr4r4r4r5rx�s�	���



5


!






f
�
�
�



		
	
6

�
+�


%*
h
�

�
rxcCs.i}|�d�D]}|�d�\}}|||<q|S)Nr��:)rD)Zattrs_headerr��attrr�r�r4r4r5r�	s

r�)ZZ
__future__rrr/rr[r�r=r-r�Zxml.saxrZsocketrr�r�rrrr	r3r
rrr
r�ImportError�urllib.parser�Z	BaseUtilsrrrrrrrZUtilsrrrrrrrrrr r!r"Z
ExceptionsZ	MultiPartr$r%r&ZCryptor'r(r)r*r+r,r-r.Zctypesr/r:ZMagicr1r6�	TypeErrorr.Z
MAGIC_MIME�load�AttributeErrorr7r�rCZ	error_strr<r;rGr�r<�__all__rWrIrx�appendr�r4r4r4r5�<module>
s�$ (
PI


Youez - 2016 - github.com/yon3zu
LinuXploit