рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдореБрдЭреЗ рдПрдХ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЕрд░реНрдерд╛рддреН, рдЕрдЬрдЧрд░ рдореЗрдВ рдПрдХ рдЧреИрд░-рдорд╛рдирдХ рдСрдкрд░реЗрдЯрд░ рдЬреЛрдбрд╝реЗрдВред рдпрд╣ рдХрд╛рд░реНрдп рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЗ рд╕рдорд╛рди рдЫрджреНрдо рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрдерди рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдЧреЛрдЯреЛ рдСрдкрд░реЗрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИред рдореИрдВ рдПрдХ рдЬрдЯрд┐рд▓ рд▓реЗрдХреНрд╕рд┐рдХрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЫрджреНрдо рдХреЛрдб рдореЗрдВ рдЧреЛрдЯреЛ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫреЛрд░реЛрдВ рдФрд░ рд╕рд╢рд░реНрдд рд╕рдВрдХреНрд░рдордгреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдореИрдВ рдЕрдЬрдЧрд░ рдореЗрдВ рдЗрд╕рдХреЗ рдХреБрдЫ рдПрдирд╛рд▓реЙрдЧ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬреЛ рдХрд┐ рдирд╣реАрдВ рд╣реИред
рдЕрдкреНрд░реИрд▓ рдХреЗ рдкрд╣рд▓реЗ рдПрдХ рдордЬрд╛рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рдореЙрдбреНрдпреВрд▓ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореИрдВ рддреБрд░рдВрдд рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХрдорд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬрдм рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреЛрдб рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рд╕рдВрд╢реЛрдзрди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЧреЛрдЯреЛ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рддреЛ, рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХрд┐ рдЕрдЬрдЧрд░ рдХреЛ рдирдП рдЖрджреЗрд╢реЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ (рдЖрд╡рд╢реНрдпрдХ рдкрддреЗ рдкрд░ рдЬрд╛рдПрдВ)ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╣реБрдХ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдХреЗ рднреАрддрд░ рд╣рдо рдЧреЛрдЯреЛ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рд▓реЗрдмрд▓ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдбрд┐рд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдЕрдЬрдЧрд░ рдмрд╛рдЗрдЯрдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдирдпрд╛, рдЬреЛ рдЖрдкрдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред ред
рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЪрд▓реЛ рдХрдорд╛рдВрдбреНрд╕ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдЕрдЬрдЧрд░ рдореЗрдВ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рддрд┐рдмрдВрдз, рдкреНрд░рдкрддреНрд░ рдХреЗ рдЖрджреЗрд╢ рд╣реЛрддреЗ рд╣реИрдВ
a: goto a
рд╕рдлрд▓ рдирд╣реАрдВ рд╣реЛред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЬрдЧрд░ рдЖрдкрдХреЛ рдлреЙрд░реНрдо рдХреЗ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
label .a goto .a
рдпрд╣рд╛рдВ рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдмрд┐рдВрджреБ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рдпрдерди рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреНрд▓рд╛рд╕ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЛ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред рдмрд┐рдирд╛ рдбреЙрдЯ рдХреЗ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХрд░рдиреЗ рдкрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЖрдПрдЧрд╛ред рддреЛ, рдЗрди рдЖрджреЗрд╢реЛрдВ рдХреЗ рдмрд╛рдпрдЯреЗрдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
>>> def f(): >>> label .a >>> goto .a >>> import dis >>> dis.dis( f ) 2 0 LOAD_GLOBAL 0 (label) 3 LOAD_ATTR 1 (a) 6 POP_TOP 3 7 LOAD_GLOBAL 2 (goto) 10 LOAD_ATTR 1 (a) 13 POP_TOP 14 LOAD_CONST 0 (None) 17 RETURN_VALUE
рдЗрд╕рд▓рд┐рдП, рд▓реЗрдмрд▓ рдШреЛрд╖рдгрд╛ рдФрд░ рд▓реЗрдмрд▓ рд╕рдВрдХреНрд░рдордг рдХрдорд╛рдВрдб рдХреЛ рддреАрди рдСрдкрд░реЗрд╢рди LOAD_GLOBAL, LOAD_ATTR, POP_TOP рдореЗрдВ рдШрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдореБрдЦреНрдп рдкрд╣рд▓реЗ рджреЛ рд╣реИрдВред рдбрд┐рд╕ рдореЙрдбреНрдпреВрд▓ рдЖрдкрдХреЛ рдСрдкреНтАНрдкреИрдо рдбрд┐рдХреНтАНрд╢рдирд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрди рдХрдорд╛рдВрдбреЛрдВ рдХреЗ рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдСрдкреНтАНрдиреЗрдХреЛ рдбрд┐рдХреНтАНрд╢рдирд░реАрдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдирдХрд╛ рдкреНрд░рддреАрдХрд╛рддреНтАНрдордХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНтАНрд╡ рдкреНрд░рд╛рдкреНтАНрдд рдХрд░рддрд╛ рд╣реИред
>>> dis.opmap[ 'LOAD_GLOBAL' ] 116 >>> dis.opmap[ 'LOAD_ATTR' ] 105
рдлрд╝рдВрдХреНрд╢рди f рдХрд╛ рдмрд╛рдЗрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ f.func_code.co_code рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдЪрд░ рдХрд╛ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ f.func_code.co_names рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
>>> f.func_code.co_names ('label', 'a', 'goto')
рдЕрдм рдЖрдЬреНрдЮрд╛рдУрдВ рдХреЗ рдмрд╛рдЗрдЯ рдЕрднреНрдпрд╛рд╡реЗрджрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЬреЛ рд╣рдореЗрдВ рд░реВрдЪрд┐ рджреЗрддреЗ рд╣реИрдВред рдбрд┐рд╕реНрд╕реЗрдореНрдмрд▓рд░ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ LOAD_GLOBAL рдФрд░ LOAD_ATTR рдХрдорд╛рдВрдб рдХреЛ рддреАрди рдмрд╛рдЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдСрдлрд╕реЗрдЯ рдмрд╛рдИрдВ рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдСрдкрд░реЗрд╢рди рдмрд╛рдЗрдЯ рдХреЛрдб (рдУрдкреИрдо рд╕реЗ), рджреВрд╕рд░рд╛ рдФрд░ рддреАрд╕рд░рд╛ рдбреЗрдЯрд╛ (рдХрдо рдФрд░ рдЙрдЪреНрдЪ рдмрд╛рдЗрдЯ) рд╣реИрдВ, рдЬреЛ рд╕реВрдЪреА рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИрдВред f.func_code.co_names рдЬрд┐рд╕реЗ рд╣рдо рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рдЪрд░ рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред
рдЖрдк рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрдорд╛рдВрдб рдореЗрдВ рддрд░реНрдХ рд╣реИ (рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдХрдорд╛рдВрдб рдХреА рд▓рдВрдмрд╛рдИ) dis.HAVE_ARGENENT рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдХреЗред рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╕реНрдерд┐рд░рд╛рдВрдХ рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ рдЗрд╕рдореЗрдВ рддрд░реНрдХ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдлрд╝рдВрдХреНрд╢рди bytecode рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛, рд╣рдо рдПрдирдУрдкреА рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рд▓реЗрдмрд▓ рдХреЛрдб, рдФрд░ JUMP_ABSOLUTE рдХреЗ рд╕рд╛рде рдЧреЛрдЯреЛ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛрдб рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдПрдХ рдСрдлрд╕реЗрдЯ рд▓реЗрддрд╛ рд╣реИред рдпрд╣ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рднреА рд╣реИред рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЛрдб рдФрд░ рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╣реИрдВред
import dis, new class MissingLabelError( Exception ): pass class ExistingLabelError( Exception ): pass def goto( function ): labels_dict = {} gotos_list = [] command_name = '' previous_operation = '' i = 0 while i < len( function.func_code.co_code ): operation_code = ord( function.func_code.co_code[ i ] ) operation_name = dis.opname[ operation_code ] if operation_code >= dis.HAVE_ARGUMENT: lo_byte = ord( function.func_code.co_code[ i + 1 ] ) hi_byte = ord( function.func_code.co_code[ i + 2 ] ) argument_position = ( hi_byte << 8 ) ^ lo_byte if operation_name == 'LOAD_GLOBAL': command_name = function.func_code.co_names[ argument_position ] if operation_name == 'LOAD_ATTR' and previous_operation == 'LOAD_GLOBAL': if command_name == 'label': label = function.func_code.co_names[ argument_position ] if labels_dict.has_key( label ): raise ExistingLabelError( 'Label redifinition: %s' % label ) labels_dict.update( { label : i - 3 } ) elif command_name == 'goto': gotos_list += [ ( function.func_code.co_names[ argument_position ], i - 3 ) ] i += 3 else: i += 1 previous_operation = operation_name codebytes_list = list( function.func_code.co_code ) for label, index in labels_dict.items(): codebytes_list[ index : index + 7 ] = [ chr( dis.opmap[ 'NOP' ] ) ] * 7
рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:
@goto def test_function( n ): goto .label1 label .label2 print n goto .label3 label .label1 print n n -= 1 if n != 0: goto .label1 else: goto .label2 label .label3 print 'the end' test_function( 10 )
рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо:
10 9 8 7 6 5 4 3 2 1 0 the end
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдпрд╣ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЕрдЬрдЧрд░ рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╢реИрд▓реА рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИ: рдпрд╣ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдордЬрдмреВрдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдХрд╛рд░рдг рдмрд╣реБрдд рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдирд╣реАрдВ рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рджреБрднрд╛рд╖рд┐рдпрд╛ 2.7 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ 2 рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП), рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рднрд╛рд╖рд╛ рдХреЗ рдорд╣рд╛рди рд▓рдЪреАрд▓реЗрдкрди рдФрд░ рдирдИ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╕рд╛рдмрд┐рдд рд╣реЛрддреА рд╣реИред