����JFIFXX�����    $.' ",#(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�8ds|\���Ҿp6�Ҵ���]��.����6�z<�v��@]�i%��$j��~�g��J>��no����pM[me�i$[����s�o�ᘨ�˸ nɜG-�ĨU�ycP�3.DB�li�;��hj���x7Z^�N�h������N3u{�:j�x�힞��#M&��jL P@_���� P��&��o8������9�����@Sz6�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*-iH��g�D�)� E�m�|�ؘbҗ�a��Ҿ����t4���o���G��*oCN�rP���Q��@z,|?W[0�����:�n,jWiE��W��$~/�hp\��?��{(�0���+�Y8rΟ�+����>S-S����VN;�}�s?.����� w�9��˟<���Mq4�Wv'��{)0�1mB��V����W[�����8�/<� �%���wT^�5���b��)iM� pg�N�&ݝ��VO~�q���u���9� ����!��J27����$O-���! �:�%H��� ـ����y�ΠM=t{!S�� oK8������t<����è:a������[�����ա�H���~��w��Qz`�po�^ ����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�_�uX6��3?nk��Wy�f;^*B� ��@�~a�`��Eu������+���6�L��.ü>��}y���}_�O�6�͐�:�YrG�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�!039C� �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 Xp3�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@:)ִ�:�]��hv�E�w���T�l��P���"Ju�}��وV J��G6��. J/�Qgl߭�e�����@�z�Zev2u�)]կ�����7x���s�M�-<ɯ�c��r�v�����@��$�ޮ}lk���a���'����>x��O\�ZFu>�����ck#��&:��`�$�ai�>2Δ����l���oF[h��lE�ܺ�Πk:)���`�� $[6�����9�����kOw�\|���8}������ބ:��񶐕��I�A1/�=�2[�,�!��.}gN#�u����b��� ~��݊��}34q����d�E��Lc��$��"�[q�U�硬g^��%B �z���r�pJ�ru%v\h1Y�ne`ǥ:g���pQM~�^�Xi� ��`S�:V29.�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&Ú����2g�}&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��f24;�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)*Pt����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���#yw��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���/$�WPw���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��BS�('$�ɻ� �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 : 172.67.215.126  /  Your IP : 172.71.95.67
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux ip-172-31-19-221 6.8.0-1029-aws #31~22.04.1-Ubuntu SMP Thu Apr 24 21:16:18 UTC 2025 x86_64
User : www-data ( 33)
PHP Version : 8.1.28
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /proc/self/root/usr/lib/python3/dist-packages/uaclient/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /proc/self/root/usr/lib/python3/dist-packages/uaclient/__pycache__/security.cpython-310.pyc
o

nHJe#��@s�ddlZddlZddlZddlZddlmZddlmZddlmZm	Z	m
Z
mZmZm
Z
mZddlmZmZmZmZmZmZddlmZddlmZmZddlmZmZdd	lmZm Z m!Z!dd
l"m#Z#ddl$m%Z%ddl&m'Z'dd
l(m)Z)m*Z*ddl+m,Z,ddl-m.Z.ddl/m0Z0ddl1m2Z2dZ3dZ4dZ5dZ6dZ7edde8fde8fg�Z9edde:fde
e9fde
e8fde:fg�Z;edd e8fd!e8fd"e8fg�Z<ed#d$e:fd%ee8fg�Z=Gd&d'�d'ej>�Z?ed(d$e?fdee
e9fg�Z@Gd)d*�d*e0jA�ZBGd+d,�d,�ZCGd-d.�d.�ZDGd/d0�d0�ZEd1e	e8e	e8e8fffd2d3�ZFd4e
eEd5e	e8e:fd1e	e8e	e8e	e8e8ffffd6d7�ZGd8d9�ZHd:e8d1eee?ee8ffd;d<�ZId=eDd4e
eEd:e8d>e	e8e	e8e8ffd?e#d5e	e8e:fd@e:d1e?fdAdB�ZJdCeEdDe
eEd:e8d>e	e8e	e8e8ffd?e#d5e	e8e:fd@e:dEe:d1e?fdFdG�ZK	H	Hd�d?e#d:e8d@e:dEe:d1e?f
dIdJ�ZLdKdL�ZMdMdN�ZNdCeEd>e	e8e	e8e8ffd1e	e8eCffdOdP�ZOd=eDd>e	e8e	e8e8ffd1e	e8eCffdQdR�ZPd:e8dSe	e8eCffdTdU�ZQdVeCdWe	e8e	e8e8ffd1eCfdXdY�ZRdZd[�ZSd\e
ee8eCfd]eTd^eTd1e8fd_d`�ZUdae8d?e#fdbdc�ZVdae8d?e#d1e:fddde�ZW	fd�d$e?d:e8dge8fdhdi�ZXd?e#dje	e8e
ee8eCffdke	e8e
e<fd]eTd^eTd@e:d1e;fdldm�ZYde
e9d1e8fdndo�ZZd?e#d:e8dSe	e8eCfd>e	e8e	e8e8ffdpe	e8e	e8e	e8e8fffd@e:d1e@fdqdr�Z[d�dsdt�Z\d?e#due8d1e:fdvdw�Z]d?e#fdxdy�Z^d?e#d1e:fdzd{�Z_d?e#d|e8d1e:fd}d~�Z`d?e#d@e:d1e:fdd��Zadae8d?e#d@e:d1e:fd�d��Zbd?e#d1e:fd�d��Zcd�e	e8efd?e#d@e:d1e:fd�d��Zdd?e#d�e
e8dae8d@e:d1e=f
d�d��ZedS)��N)�defaultdict)�datetime)�Any�Dict�List�
NamedTuple�Optional�Set�Tuple)�apt�
exceptions�	livepatch�messages�system�util)�	_initiate)�MagicAttachRevokeOptions�_revoke)�MagicAttachWaitOptions�_wait)�CLOUD_TYPE_TO_TITLE�PRO_CLOUD_URLS�get_cloud_type)�UAConfig)�PRINT_WRAP_WIDTH)�entitlement_factory)�ApplicabilityStatus�UserFacingStatus)�notices)�Notice)�
serviceclient)�colorize_commandsz=((CVE|cve)-\d{4}-\d{4,7}$|(USN|usn|LSN|lsn)-\d{1,5}-\d{1,2}$)z	cves.jsonzcves/{cve}.jsonznotices.jsonznotices/{notice}.json�UnfixedPackage�pkg�unfixed_reason�ReleasedPackagesInstallResult�
fix_status�unfixed_pkgs�installed_pkgs�all_already_installed�BinaryPackageFix�
source_pkg�
binary_pkg�
fixed_version�
UpgradeResult�status�failure_reasonc@sZeZdZdZGdd�d�Zedd�Zedd�Zedd�Zed	d
�Ze	dd��Z
d
d�ZdS)�	FixStatuszD
    An enum to represent the system status after fix operation
    c@seZdZdedefdd�ZdS)zFixStatus._Value�value�msgcCs||_||_dS�N�r2r3)�selfr2r3�r7�3/usr/lib/python3/dist-packages/uaclient/security.py�__init__[�
zFixStatus._Value.__init__N)�__name__�
__module__�__qualname__�int�strr9r7r7r7r8�_ValueZsr@r�fixed�not-affected�zstill-affected�zaffected-until-rebootcCs|jjSr4)r2�r6r7r7r8�	exit_codedszFixStatus.exit_codecCs|jjSr4r5rEr7r7r8�__str__hszFixStatus.__str__N)r;r<r=�__doc__r@�SYSTEM_NON_VULNERABLE�SYSTEM_NOT_AFFECTED�SYSTEM_STILL_VULNERABLE�SYSTEM_VULNERABLE_UNTIL_REBOOT�propertyrFrGr7r7r7r8r1Us




r1�	FixResultcs0eZdZdZdZdeeefdeeeffdd�Ze	j
ejgd�d�		d#�fd
d�	�Z
																d$deed
eedeedeedeedeedeedeeededfdd�Zdeddfdd�Z										d%deedeedeedeedeededfdd�Zd eddfd!d"�Z�ZS)&�UASecurityClient��security_url�query_params�returncCs.|jj�di��di�}|r|�|�|S|S)zD
        Update query params with data from feature config.
        �features�extra_security_params)�cfg�get�update)r6rRrUr7r7r8�_get_query_paramszs�
z"UASecurityClient._get_query_params)rC��)�retry_sleepsNcs"|�|�}t�j|||||dd�S)NF)�path�data�headers�methodrR�log_response_body)rY�super�request_url)r6r]r^r_r`rR��	__class__r7r8rc�s
�zUASecurityClient.request_url�query�priority�package�limit�offset�	component�versionr/�CVEc		sV||||||||d�}	�jt|	d�}
|
jdkr!tjt|
j|
jd���fdd�|
jD�S)znQuery to match multiple-CVEs.

        @return: List of CVE instances based on the the JSON response.
        )�qrgrhrirjrkrlr/�rR����url�code�bodycsg|]}t�|d��qS)��client�response)rm)�.0�cve_mdrEr7r8�
<listcomp>�s�z-UASecurityClient.get_cves.<locals>.<listcomp>)rc�API_V1_CVESrsr�SecurityAPIErrorrt�	json_list)r6rfrgrhrirjrkrlr/rRrwr7rEr8�get_cves�s"�


�
�zUASecurityClient.get_cves�cve_idcC�Btj|d�}|�|�}|jdkrtj||j|jd��t||jd�S)zkQuery to match single-CVE.

        @return: CVE instance for JSON response from the Security API.
        ��cverprqru)	�API_V1_CVE_TMPL�formatrcrsrr|rtrm�	json_dict)r6rrrrwr7r7r8�get_cve��


�zUASecurityClient.get_cve�details�release�order�USNcsf�||||d�}�jt|d�}|jdkrtjt|j|jd��t��fdd�|j�dg�D�dd	�d
�S)zuQuery to match multiple-USNs.

        @return: Sorted list of USN instances based on the the JSON response.
        )r�r�rirjr�rorprqcs0g|]}�dus�|�dg�vrt�|d��qS)N�cves_idsru)rWr�)rx�usn_md�r�r6r7r8rz�s

�z0UASecurityClient.get_notices.<locals>.<listcomp>rcS�|jSr4��id��xr7r7r8�<lambda>��z.UASecurityClient.get_notices.<locals>.<lambda>��key)	rc�API_V1_NOTICESrsrr|rt�sortedr�rW)r6r�r�rirjr�rRrwr7r�r8�get_notices�s"
�

���zUASecurityClient.get_notices�	notice_idcCr�)zbQuery to match single-USN.

        @return: USN instance representing the JSON response.
        )�noticerprqru)	�API_V1_NOTICE_TMPLr�rcrsrr|rtr�r�)r6r�rrrwr7r7r8�
get_notice�r�zUASecurityClient.get_notice)NNNN)NNNNNNNN)NNNNN)r;r<r=�url_timeout�cfg_url_base_attrrr?rrYr�retry�socket�timeoutrcrr>rr~r�r�r��
__classcell__r7r7rdr8rOust
�

����������
	�

�"������
�!rOc@s�eZdZdZdeeeffdd�Zedd��Z	edd��Z
ed	d
��Zedd��Zed
d��Z
edd��Zedefdd��Zedd��ZdS)�CVEPackageStatuszAClass representing specific CVE PackageStatus on an Ubuntu series�cve_responsecCs
||_dSr4�rw)r6r�r7r7r8r9�s
zCVEPackageStatus.__init__cC�
|jdS�N�descriptionr�rEr7r7r8r���
zCVEPackageStatus.descriptioncCr�r4)r�rEr7r7r8r-szCVEPackageStatus.fixed_versioncCr�)N�pocketr�rEr7r7r8r�r�zCVEPackageStatus.pocketcCr�)N�release_codenamer�rEr7r7r8r�	r�z!CVEPackageStatus.release_codenamecCr�)Nr/r�rEr7r7r8r/
r�zCVEPackageStatus.statuscCs�|jdkrtjS|jdkrtjS|jdkrtjS|jdvr tjS|jdkr(tjS|jdkr0tjS|jdkr=tjj	|j
d�Stjj	|jd	�S)
N�neededzneeds-triage�pending)�ignored�deferred�DNErB�released)�
fix_stream)r/)r/r�SECURITY_CVE_STATUS_NEEDED�SECURITY_CVE_STATUS_TRIAGE�SECURITY_CVE_STATUS_PENDING�SECURITY_CVE_STATUS_IGNORED�SECURITY_CVE_STATUS_DNE� SECURITY_CVE_STATUS_NOT_AFFECTED�SECURITY_FIX_RELEASE_STREAMr��
pocket_source�SECURITY_CVE_STATUS_UNKNOWNrEr7r7r8�status_messages"






�zCVEPackageStatus.status_messagerScCst|jtjk�S)z?Return True if the package requires an active Pro subscription.)�boolr�r�'SECURITY_UBUNTU_STANDARD_UPDATES_POCKETrEr7r7r8�requires_ua%s
��zCVEPackageStatus.requires_uacCsZ|jdkr
tj}|S|jdkrtj}|S|jdvrtj}|Sd|jvr(tj}|Stj}|S)z>Human-readable string representing where the fix is published.�	esm-infra�esm-apps)�updates�security�esm)r�r�SECURITY_UA_INFRA_POCKET�SECURITY_UA_APPS_POCKETr�r-)r6�
fix_sourcer7r7r8r�-s

�	
�
��zCVEPackageStatus.pocket_sourceN)r;r<r=rHrr?rr9rMr�r-r�r�r/r�r�r�r�r7r7r7r8r��s&





r�c@s�eZdZdZdedeeeffdd�Zde	fdd�Z
ed	d
��Zdd�Z
edeefd
d��Zededfdd��Zedd��Zedeeeffdd��ZdS)rmz7Class representing CVE response from the SecurityClientrvrwcC�||_||_dSr4�rwrv�r6rvrwr7r7r8r9Br:zCVE.__init__rScC�t|t�sdS|j|jkS�NF)�
isinstancermrw�r6�otherr7r7r8�__eq__F�
z
CVE.__eq__cC�|j�dd���S)Nr��UNKNOWN_CVE_ID�rwrW�upperrEr7r7r8r�K�zCVE.idcCsJ|j}|jD]}|j}dj|j|d�d�tjjj|jd��g}d�|�S)z2Return a string representing the URL for this cve.�{issue}: {title}��issue�title� - {}r��
)	r�rr�r�r�r�urls�SECURITY_CVE_PAGE�join)r6r�r��linesr7r7r8�get_url_headerOs
��
zCVE.get_url_headercC�|j�dg�S)N�notices_ids�rwrWrEr7r7r8r�^szCVE.notices_idsr�c�<t�d�st�fdd��j�dg�D�dd�dd��_�jS)	z�Return a list of USN instances from API response 'notices'.

        Cache the value to avoid extra work on multiple calls.
        �_noticesc�g|]}t�j|��qSr7)r�rv)rxr�rEr7r8rzj�
��zCVE.notices.<locals>.<listcomp>rcSr�r4r���nr7r7r8r�nr�zCVE.notices.<locals>.<lambda>T�r��reverse)�hasattrr�rwrWr�rEr7rEr8rb�

��zCVE.noticescC�|j�d�Sr�r�rEr7r7r8r�s�zCVE.descriptioncCsbt|d�r|jSi|_t��j}|jdD]}|dD]}|d|kr,t|�|j|d<qq|jS)z�Dict of package status dicts for the current Ubuntu series.

        Top-level keys are source packages names and each value is a
        CVEPackageStatus object
        �_packages_status�packages�statusesr��name)r�r�r�get_release_info�seriesrwr�)r6r�rh�
pkg_statusr7r7r8�packages_statusws

���zCVE.packages_statusN)r;r<r=rHrOrr?rr9r�r�rMr�r�rr�rr�r�r�r7r7r7r8rm?s

rmc	@s�eZdZdZdedeeeffdd�Zde	fdd�Z
edefd	d
��Zede
efdd��Zede
efd
d��Zedd��Zedd��Zdd�Zedeeeeeeeffffdd��ZdS)r�z7Class representing USN response from the SecurityClientrvrwcCr�r4r�r�r7r7r8r9�r:zUSN.__init__rScCr�r�)r�r�rwr�r7r7r8r��r�z
USN.__eq__cCr�)Nr��UNKNOWN_USN_IDr�rEr7r7r8r��r�zUSN.idcCr�)z$List of CVE IDs related to this USN.r�r�rEr7r7r8r��szUSN.cves_idscr�)	z�List of CVE instances based on API response 'cves' key.

        Cache the values to avoid extra work for multiple call-sites.
        �_cvescr�r7)rmrv)rxr�rEr7r8rz�r�zUSN.cves.<locals>.<listcomp>�cvescSr�r4r�r�r7r7r8r��r�zUSN.cves.<locals>.<lambda>Tr�)r�r�rwrWr�rEr7rEr8r��r�zUSN.cvescCr�)Nr�r�rEr7r7r8r��r�z	USN.titlecCr�)N�
referencesr�rEr7r7r8r��r�zUSN.referencescCs�dj|j|jd�g}|jr'|�d�|jD]}|�d�tjjj|d���qn|jr<|�d�|jD]	}|�d|�q2d�	|�S)	z5Return a string representing the URL for this notice.r�r�zFound CVEs:r�r�zFound Launchpad bugs:z - r�)
r�r�r�r��appendrr�r�r�r�)r6r�r��	referencer7r7r8r��s

���


zUSN.get_url_headercCsNt|d�r|jSt��j}i|_|j�di��|g�D]�}|�d�rW|d|jvrMd|j|dvrCtjdj	|j
|dd�|j
dd	��||j|dd<qd|i|j|d<q|�d
�smtjdj	|j
|dd�|j
dd	��d
|d
vr�tjdj	|j
|d|d
d�|j
dd	��|d
�d
�d}||jvr�i|j|<||j||d<q|jS)aWBinary package information available for this release.


        Reformat the USN.release_packages response to key it based on source
        package name and related binary package names.

        :return: Dict keyed by source package name. The second-level key will
            be binary package names generated from that source package and the
            values will be the dict response from USN.release_packages for
            that binary package. The binary metadata contains the following
            keys: name, version.
            Optional additional keys: pocket and component.
        �_release_packages�release_packages�	is_sourcer��sourcez6{usn} metadata defines duplicate source packages {pkg})�usnr#���	error_msgr��
extra_info�source_linkzL{issue} metadata does not define release_packages source_link for {bin_pkg}.)r��bin_pkg�/zX{issue} metadata has unexpected release_packages source_link value for {bin_pkg}: {link})r�r�link���)r�rrr�r�rwrWr�SecurityAPIMetadataErrorr�r��split)r6r�r#�source_pkg_namer7r7r8r�sR


��
����

zUSN.release_packagesN)r;r<r=rHrOrr?rr9r�r�rMr�rr�rmr�r�r�r�rr7r7r7r8r��s"

,r�rSc	Cs|d}t�dd|ddg�\}}i}|��D]%}|�d�\}}}}|s%|}d|vr*q||vr5||||<q||i||<q|S)z�Return a dict of all source packages installed on the system.

    The dict keys will be source package name: "krb5". The value will be a dict
    with keys binary_pkg and version.
    z${db:Status-Status}z
dpkg-queryz#-f=${Package},${Source},${Version},r�z-W�,�	installed)r�subp�
splitlinesr)	�status_field�out�_err�installed_packages�pkg_line�pkg_namer�pkg_versionr/r7r7r8�#query_installed_source_pkg_versionss$
��r�usns�beta_pocketscs�i}|D]R}|j��D]J\}}�fdd�|��D�}||vr%|r%|||<q||vrU||}|��D]#\}}	||vr>|	||<q1||d}
|	d}t�||
�dkrT|	||<q1qq|S)aWalk related USNs, merging the released binary package versions.

    For each USN, iterate over release_packages to collect released binary
        package names and required fix version. If multiple related USNs
        require different version fixes to the same binary package, track the
        maximum version required across all USNs.

    :param usns: List of USN response instances from which to calculate merge.
    :param beta_pockets: Dict keyed on service name: esm-infra, esm-apps
        the values of which will be true of USN response instances
        from which to calculate merge.

    :return: Dict keyed by source package name. Under each source package will
        be a dict with binary package name as keys and binary package metadata
        as the value.
    c	s.i|]\}}d��|�dd�d�ur||�qS)Fr��None�rW)rx�bin_pkg_name�
bin_pkg_md�rr7r8�
<dictcomp>Fs��z>merge_usn_released_binary_package_versions.<locals>.<dictcomp>rlr)r�itemsr�version_compare)rr�usn_pkg_versionsr�src_pkg�binary_pkg_versions�public_bin_pkg_versions�usn_src_pkgr�
binary_pkg_md�prev_version�current_versionr7r$r8�*merge_usn_released_binary_package_versions/s,
�


���r0cCsn|jsgSi}|jD] }|jD]}|�d�sq||jkrq||vr)|j|d�||<qq
tt|��dd�d��S)z�For a give usn, get the related USNs for it.

    For each CVE associated with the given USN, we capture
    other USNs that are related to the CVE. We consider those
    USNs related to the original USN.
    zUSN-�r�cSr�r4r�r�r7r7r8r�|r�z"get_related_usns.<locals>.<lambda>r�)r�r��
startswithr�r��listr��values)rrv�related_usnsr��related_usn_idr7r7r8�get_related_usnsas 





���r7�issue_idcCsft��}|dur1|jdur1|jjdur1|jjD]}|j|��kr0|jr0|jjp(d}tj|fSqdS)NzN/A)NN)	r
r/�fixesr��lower�patchedrlr1rI)r8�	lp_status�fixrlr7r7r8�_check_cve_fixed_by_livepatchs
�r>r�rrV�dry_runc	Cs2t||d�}t||�}t�t||||||d�jS)N)r�r�rVr8�affected_pkg_statusr�usn_released_pkgsr?)�'get_cve_affected_source_packages_statusr0�print�prompt_for_affected_packagesr/)	r�rr8rrVrr?rArBr7r7r8�_fix_cve�s"	����rFrr5�
no_relatedc	Cs�tdtjj|d��t||d�}t|g|�}	t|||||	|d�\}
}|
tjtj	fvr-|
S|r1|r3|
Stdtj
jd�dd�|D��d��tdtj�i}|D])}
td	�|
j
��t|
|d�}t|
g|�}	t||
j
|||	|d�}|||
j
<t�qQttj�t|
|tjd
�d}|D]D}
||
j
j}t||
j
tjd
�|tjkr�tdtjjd
d��d}|tjkr�||
j
jp�g}|D]}|jr�td�|j|j��q�d}q�|r�tdtjj|d��|
S)Nr��r8�rrr@z
- cs��|]}|jVqdSr4r�)rxrr7r7r8�	<genexpr>�s�z_fix_usn.<locals>.<genexpr>)r5z- {})�contextF�- �
fix operation��	operationTz
  - {}: {})rDr�SECURITY_FIXING_REQUESTED_USNr��get_affected_packages_from_usnr0rEr1rIrJ�SECURITY_RELATED_USNSr��SECURITY_FIXING_RELATED_USNSr��SECURITY_USN_SUMMARY�_handle_fix_status_message�FIX_ISSUE_CONTEXT_REQUESTEDr/�FIX_ISSUE_CONTEXT_RELATEDrL�ENABLE_REBOOT_REQUIRED_TMPLrKr'r$r#�SECURITY_RELATED_USN_ERROR)rr5r8rrVrr?rGrArB�target_fix_status�_�related_usn_status�related_usn�related_fix_status�failure_on_related_usnr/r'�unfixed_pkgr7r7r8�_fix_usn�s����
�	�������
	
�
�
���
�������rbFc

Csx|rttj�|��}t|d�}t�}ttj|�ttj|�d�}d|vrrt	|�\}}|r8ttj
j||d��|Sz|j|d�}	|j
|d�}
Wntjy`}z
|jdkrZtj|d��|�d}~wwt|	���t|	|
|||||d	�Sz
|j|d
�}t||�}
Wntjy�}z
|jdkr�tj|d��|�d}~wwt|���|jds�tjd�|�|d
d��t||
||||||d�S)N�rV)r�r�rm)r�rl)r)r�i�rH)r�rr8rrVrr?r1rz.{} metadata defines no fixed package versions.rr)rr5r8rrVrr?rG)rDr�SECURITY_DRY_RUN_WARNINGr�rOr�_is_pocket_used_by_beta_servicer�r�r>�CVE_FIXED_BY_LIVEPATCHr�r�r�rr|rs�SecurityIssueNotFoundr�rFr�r7rwrrb)
rVr8r?rGrvrr�livepatch_cve_status�
patch_versionr�r�err7r7r8�fix_security_issue_ids�

���	���
���
��
��rkcCs`i}|D])}t||���D]\}}||vr|||<q
||j}t�||j�dkr,|||<q
q|S)Nr)rCr&r-rr')r�r�
affected_pkgsr�rr��current_verr7r7r8�get_affected_packages_from_cvesvs"�
�

���
rncCs�i}|j��D]6\}}||vrqtt�}d|d<dd�|��D�}|s0tjd�|j�|jdd��|��|d<t	|d	�||<q|S)
Nr�r/cSs"h|]
\}}|�d�r|d�qS)r�r!)rxr\�pkg_bin_infor7r7r8�	<setcomp>�s��z1get_affected_packages_from_usn.<locals>.<setcomp>zC{} metadata defines no pocket information for any release packages.rrr�)r�)
rr&rr?rrr�r��popr�)rrrlr�pkg_infor��all_pocketsr7r7r8rR�s&��rRcCs|jr	t|j|�St||�S)z�Walk CVEs related to a USN and return a dict of all affected packages.

    :return: Dict keyed on source package name, with active CVEPackageStatus
        for the current Ubuntu release.
    )r�rnrRrIr7r7r8� get_usn_affected_packages_status�s
rtcCs8i}|j��D]\}}|jdkrq||vr|||<q|S)z�Get a dict of any CVEPackageStatuses affecting this Ubuntu release.

    :return: Dict of active CVEPackageStatus keyed by source package names.
    rB)r�r&r/)r�r�affected_pkg_versionsr+�package_statusr7r7r8rC�s
�rCrAcCstt|�}|dkrttj�tdtjj|dd��dStj�|�j|d�t	|�
���d�}ttj|t
dd	d
��dS)a	Print header strings describing affected packages related to a CVE/USN.

    :param issue_id: String of USN or CVE issue id.
    :param affected_pkg_status: Dict keyed on source package name, with active
        CVEPackageStatus for the current Ubuntu release.
    rr�r)r�r	N�, )�count�pkgs�    F)�width�subsequent_indent�replace_whitespace)�lenrDr�SECURITY_NO_AFFECTED_PKGS�SECURITY_ISSUE_UNAFFECTEDr��SECURITY_AFFECTED_PKGS�	pluralizer�r��keys�textwrap�fillr)r8rArxr3r7r7r8�print_affected_packages_header�s,	
������r�r��usn_src_released_pkgscCsht�|�}|r2|�d�r2d|jd<|dd|jd<|��D]\}}|�d�}|r1||jd<|Sq|S)a�Parse release status based on both pkg_status and USN.release_packages.

    Since some source packages in universe are not represented in
    CVEPackageStatus, rely on presence of such source packages in
    usn_src_released_pkgs to represent package as a "released" status.

    :param pkg_status: the CVEPackageStatus for this source package.
    :param usn_src_released_pkgs: The USN.release_packages representing only
       this source package. Normally, release_packages would have data on
       multiple source packages.

    :return: Tuple of:
        human-readable status message, boolean whether released,
        boolean whether the fix requires access to UA
    rr�r/rlr�r�)�copy�deepcopyrWrwr&)r�r��usn_pkg_statusr�usn_released_pkgr�r7r7r8�#override_usn_release_package_status�s 

�
�

�r�cCsdi}t|���D]'\}}|�|i�}t||�}|j�dd�}||vr&g||<||�||f�q|S)Nr�r�)r�r&rWr�r/�replacer�)rArB�
status_groupsr)r��usn_released_srcr��status_groupr7r7r8�group_by_usn_package_statuss�r��pkg_status_list�	pkg_index�num_pkgscCs�|sdSg}g}|D]\}}|d7}|�d�||��|�|�q
tjd�dd�|�dd�t|���tdd	�}d
�||j�S)z;Format the packages and status to an user friendly message.rrCz{}/{}z{} {}:�(rw�)rz�r{r|z{}
{})r�r�r�r�r�r�rr�)r�r�r��	msg_index�src_pkgsr)r��
msg_headerr7r7r8�_format_packages_messages ��r�r�cCs>d}|tjkr
d}n|tjkrd}t||d�}|r||�SdS)Nzno-service-neededr�r�)rVr�)rr�r�r)r�rV�service_to_check�ent_clsr7r7r8�_get_service_for_pocket3s

r�cCs4t||�}|r|��\}}|tjkrdS|jSdS)zBCheck if the pocket where the fix is at belongs to a beta service.F)r��user_facing_statusr�ACTIVE�
valid_service)r�rV�ent�
ent_statusr\r7r7r8re>s

rerrLcCs�|tjkr |rtjj||d�}ntjj|d�}tt�|��dS|tj	kr@|r0tj
j||d�}ntjj|d�}tt�|��dS|tjkr`|rPtj
j||d�}ntjj|d�}tt�|��dS|rktj
j||d�}ntjj|d�}tt�|��dS)N)r�rL)r�)r1rIr�%SECURITY_ISSUE_RESOLVED_ISSUE_CONTEXTr��SECURITY_ISSUE_RESOLVEDrDr�handle_unicode_charactersrJ�'SECURITY_ISSUE_UNAFFECTED_ISSUE_CONTEXTr�rL�)SECURITY_ISSUE_NOT_RESOLVED_ISSUE_CONTEXT�SECURITY_ISSUE_NOT_RESOLVED)r/r8rLr3r7r7r8rVNs6
�
�
��rV�src_pocket_pkgs�binary_pocket_pkgscsrd}d}g}t�}	|r�tjtjtjfD]�}
||
}||
}tjj|
d��|r�t|||d�}
|
r=t|
�|s;ttj	�qd}g}t
|�D];}|
tjk}tj|j
|d�}|rdt�|j|�dkrd|�|j
�qCtjj|j
|jd�}td|�|�t|j|d	��qC|t|�7}t|||
|d
�}||jM}|jp�d�|s�|��fdd
�|D��q|	�dd�|D��qt|||	|d�S)a%Handle the packages that could be fixed and have a released status.

    :returns: Tuple of
        boolean whether all packages were successfully upgraded,
        list of strings containing the packages that were not upgraded,
        boolean whether all packages were already installed
    T��service�r�r�r�F)�check_esm_cacher)rhrlrM�r#r$)rV�upgrade_pkgsr�r?rc�g|]
\}}t|�d��qS�r��r"�rxr)r\��failure_msgr7r8rz�s���z2_handle_released_package_fixes.<locals>.<listcomp>csrJr4)r,)rxr,r7r7r8rK�s�
�z1_handle_released_package_fixes.<locals>.<genexpr>)r&r'r(r))�setrr�r�r��SECURITY_UA_SERVICE_REQUIREDr�r�rD�SECURITY_UPDATE_INSTALLEDr�r�get_pkg_candidate_versionr,r'r-r��FIX_CANNOT_INSTALL_PACKAGEr"r+r~�upgrade_packages_and_attachr/r0�extendrXr%)rVr�r�r�r�r?r)�upgrade_statusr'r(r��
pkg_src_group�binary_pkgsr3r�r,r��candidate_versionr$�upgrade_resultr7r�r8�_handle_released_package_fixesss����
�����������


��


��r�cCsBtdd�|D��}t|�}tjtj�|�j|d�|�d�t	dd�S)z�Format the list of unfixed packages into an message.

    :returns: A string containing the message output for the unfixed
              packages.
    cSsh|]}|j�qSr7)r#)rxr#r7r7r8rp�sz/_format_unfixed_packages_msg.<locals>.<setcomp>rw)r�ryrzr�)
r�r~r�r�r�SECURITY_PKG_STILL_AFFECTEDr�r�r�r)r'�sorted_pkgs�num_pkgs_unfixedr7r7r8�_format_unfixed_packages_msg�s���r�rBc
st|�}t||�|dkrttjdd�Stt�}tt�}d}	t||�}
g}t|
�	��D]s\}}
|dkrXtj
}tt|
|	|d��|	t|
�7}	|
ddj
�|�fdd�|
D�7}q+|
D]C\}}||j�||f�||�	�D].\}}|�|i�}||vr}qn|�|i��d	d
�}t�||�dkr�||j�t|||d��qnqZq+t||||	||d�}||j7}t�|r�tt|��|jr�|jr�|r�tjntj
}n/tj|jd
�r�tjjdd�}t|�t j!t"j#dd�|r�tjntj$}n|r�tjntj
}ntj}t%||�t||d�S)aProcess security CVE dict returning a CVEStatus object.

    Since CVEs point to a USN if active, get_notice may be called to fill in
    CVE title details.

    :returns: An FixStatus enum value corresponding to the system state
              after processing the affected packages
    rN)r/r'r�r�rCcr�r�r�r���
status_msgr7r8rz%s
��z0prompt_for_affected_packages.<locals>.<listcomp>rlr)r+r,r-)rVr�r�r�r�r?)r(rNrO)&r~r�rNr1rJrr3r�r�r&rIrDr�r�r�r�rWrr'r*r�r'r�r&r)rKr�
should_rebootr(rrYr�r�addr�ENABLE_REBOOT_REQUIREDrLrV)rVr8rArrBr?rxr�r�r��pkg_status_groupsr'�status_value�pkg_status_group�
fix_resultr)r�r,rlr�r-�released_pkgs_install_result�
reboot_msgr7r�r8rE�s�
����
�
��
������
	�������
��
�rEcCs:t�\}}|tvrttjjt�|�t�|�d��dSdS)z:Alert the user when running Pro on cloud with PRO support.)r��cloud_specific_urlN)rrrDr�SECURITY_USE_PRO_TMPLr�rrW)�
cloud_typer\r7r7r8�*_inform_ubuntu_pro_existence_if_applicables
���r��tokenc
Cs�ddl}ddlm}ttdd|gg��z|�|j|dddd�|�}|dkWStjy?}zt|j	�WYd}~d	Sd}~ww)
ztAttach to an Ubuntu Pro subscription with a given token.

    :return: True if attach performed without errors.
    rN��cli�pro�attachTr�)r��auto_enabler��
attach_configF)
�argparse�uaclientr�rDr!�
action_attach�	Namespacer�UbuntuProErrorr3)rVr�r�r��ret_code�errr7r7r8�_run_ua_attach�s ��

��r�c
Cs�ttj�t|d�}tdtjj|jd��t|jd�}zt	||d�}Wn t
jyD}zttj�t
|jd�}t||d�|�d}~wwtdtj�t||j�S)Nrcr�)�	user_code)�magic_token)�optionsrV)rDr�CLI_MAGIC_ATTACH_INITr�CLI_MAGIC_ATTACH_SIGN_INr�r�rr�rr�MagicAttachTokenError�CLI_MAGIC_ATTACH_FAILEDrr�CLI_MAGIC_ATTACH_PROCESSINGr��contract_token)rV�
initiate_resp�wait_options�	wait_resprj�revoke_optionsr7r7r8�_perform_magic_attach�s.

���
���	r�cCsht�ttj�tjtjgd�d�}|dkrdS|dkr t|�S|dkr2ttj�t	d�}t
||�SdS)	zZPrompt for attach to a subscription or token.

    :return: True if attach performed.
    )�s�a�c��
valid_choicesr�Fr�r��> T)r�rDr�*SECURITY_UPDATE_NOT_INSTALLED_SUBSCRIPTIONr�prompt_choices�SECURITY_FIX_ATTACH_PROMPTr��PROMPT_ENTER_TOKEN�inputr�)rV�choicer�r7r7r8�_prompt_for_attach�s
�

rr�cCs�ddl}ddlm}ttjj|d��tjtj	j|d�ddgd�}|dkrBtt
dd	|gg��td|�|j
|gd
dddd
�|�k�SdS)zMPrompt for enable a pro service.

    :return: True if enable performed.
    rNr�r�rjr�r�r��enableTFr�)r��
assume_yes�betar��access_only)r�r�r�rDr�SECURITY_SERVICE_DISABLEDr�rr��SECURITY_FIX_ENABLE_PROMPTr!r��
action_enabler�)rVr�r�r�rr7r7r8�_prompt_for_enable�s0�����r	cCs|rtdtj�dSt|�S)z<Verify if machine is attached to an Ubuntu Pro subscription.r�T)rDr� SECURITY_DRY_RUN_UA_NOT_ATTACHEDr)rVr?r7r7r8�_check_attached�srcCs�t||�}|rM|��\}}|tjkrdS|��\}}|tjkrC|r/tdtj	j
|jd��dSt||j�r7dSttj
j
|jd��dSttjj
|jd��dS)zQ
    Verify if the Ubuntu Pro subscription has the required service enabled.
    Tr�r�F)r�r�rr��applicability_statusr�
APPLICABLErDr�'SECURITY_DRY_RUN_UA_SERVICE_NOT_ENABLEDr�r�r	�SECURITY_UA_SERVICE_NOT_ENABLED� SECURITY_UA_SERVICE_NOT_ENTITLED)r�rVr?r�r�r\rr7r7r8�(_check_subscription_for_required_service�s<


��������rcCs�ddl}ddlm}t�ttj�tjtj	ddgd�}|dkrBttj
�td�}ttdd	gg��|�
|jd
dd�|�t||�Sd
S)zdPrompt for attach a new subscription token to the user.

    :return: True if attach performed.
    rNr��rr�r�r�r��detachTr�)rr�F)r�r�r�r�rDr�%SECURITY_UPDATE_NOT_INSTALLED_EXPIREDrr��SECURITY_FIX_RENEW_PROMPT�PROMPT_EXPIRED_ENTER_TOKENr�r!�
action_detachr�r�)rVr�r�rr�r7r7r8�_prompt_for_new_token)s"
�
�
r�status_cachecCsV|�dd�}|s
dS|�d�}|dus|t�|j�kr)|r$ttj�dSt|�SdS)zuCheck if the Ubuntu Pro subscription is expired.

    :returns: True if subscription is expired and not renewed.
    �attachedF�expiresN)rWr�now�tzinforDr�(SECURITY_DRY_RUN_UA_EXPIRED_SUBSCRIPTIONr)rrVr?r�contract_expiry_datetimer7r7r8�_check_subscription_is_expiredDs

�

r r�c
Csj|stddd�St��s|stj}t|�td|d�S|tjkra|�d�p&i}|�dd�s>t	||�s=tdtj
j|d�d�Snt|||d�rPtdtj
j|d�d�St|||�satdtjj|d�d�Sttgd	�gd
�t|�g��|s�zt��tjgd�|dd
id�Wn'ty�}zt|dt|��}t|���tdtjd�WYd}~Sd}~wwtddd�S)aUpgrade available packages to fix a CVE.

    Upgrade all packages in upgrades_packages and, if necessary,
    prompt regarding system attach prior to upgrading Ubuntu Pro packages.

    :return: True if package upgrade completed or unneeded, False otherwise.
    TN)r/r0Fzstatus-cacherr�)rrVr?)rrXz&&)r�install�--only-upgrade�-y)zapt-getr!r"r#�DEBIAN_FRONTEND�noninteractive)�cmd�override_env_varsr3)r.r�we_are_currently_rootr�SECURITY_APT_NON_ROOTrDr��
read_cacherWrr�r�r �$SECURITY_UA_SERVICE_WITH_EXPIRED_SUBr�%SECURITY_UA_SERVICE_NOT_ENABLED_SHORTr!r�r�run_apt_update_command�run_apt_command�	Exception�getattrr?�strip�SECURITY_UA_APT_FAILURE)rVr�r�r?r3rrjr7r7r8r�^sz


�������������
�
����r�)FF)r)rSN)fr��enumr�r��collectionsrr�typingrrrrrr	r
r�rrr
rrr�+uaclient.api.u.pro.attach.magic.initiate.v1r�)uaclient.api.u.pro.attach.magic.revoke.v1rr�'uaclient.api.u.pro.attach.magic.wait.v1rr�uaclient.clouds.identityrrr�uaclient.configr�uaclient.defaultsr�uaclient.entitlementsr�(uaclient.entitlements.entitlement_statusrr�uaclient.filesr�uaclient.files.noticesr�
uaclient.httpr �uaclient.statusr!�CVE_OR_USN_REGEXr{r�r�r�r?r"r�r%r*r.�Enumr1rN�UAServiceClientrOr�rmr�rr0r7r>rFrbrkrnrRrtrCr�r�r�r>r�r�rerVr�r�rEr�r�r�rr	rrrr r�r7r7r7r8�<module>s�$ ���	

����

��	��	HL�
�
�2�
������
��
������
���	
�t�����
�Y��

���

��

�!��
�#���
����
�%������
�s��
����
�
"���
�+
���
������

Youez - 2016 - github.com/yon3zu
LinuXploit