рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдпрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╕рддреНрдпрд╛рдкрди рд╣реИ рдЬреЛ рджреВрд╕рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕рднреА рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдпрд╛ рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИрдВред
рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ
рд╡реБрд▓реНрдл, рдмрдХрд░реА рдФрд░ рдЧреЛрднреА рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рд╕реЗ рдЧреБрдЬрд░реВрдВрдЧрд╛, рдФрд░ рдореИрдВ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдФрдкрдЪрд╛рд░рд┐рдХ рдирд┐рдпрдо рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЗрд╕рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдкрд░, рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдХрд╛ рдЕрдкрдирд╛ рдПрдирд╛рд▓реЙрдЧ рд▓рд┐рдЦрд╛ред
рд╡рд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рдореАрдХрд░рдгреЛрдВ (рдПрд╕рдПрдордЯреА) рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рддрдмреНрджреАрд▓ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдЧрдгрдирд╛рдУрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЬрд╛рддреА рд╣реИ, рдмрд▓реНрдХрд┐
рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИред
рдЪрд░рд┐рддреНрд░ рдЧрдгрдирд╛ рдбреЗрдЯрд╛ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рдПрдХ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдЙрдкрдХрд░рдг рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрдирдкреБрдЯ рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдкрд╣рд▓рд╛ рддрд░реНрдХ рдХрд┐рд╕реА рднреА рд╕рдХрд╛рд░рд╛рддреНрдордХ рдорд╛рди, рджреВрд╕рд░рд╛ рдирдХрд╛рд░рд╛рддреНрдордХ, рддреАрд╕рд░рд╛ - рд╢реВрдиреНрдп рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рддрд░реНрдХ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 42ред
рдПрдХ рд░рди рдореЗрдВ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдЧрдгрдирд╛ рд╣рдореЗрдВ рдЬрд╡рд╛рдм рджреЗрдЧреА, рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдФрд░ рдРрд╕реЗ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕реЗрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдпрд╛ рд╕рдмреВрдд рд╣реИ рдХрд┐ рдРрд╕реЗ рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЗрдирдкреБрдЯ рддрд░реНрдХреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкрд╛рд╕рд╡рд░реНрдбред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рд╕рднреА рдХрдордЬреЛрд░рд┐рдпрд╛рдВ рдорд┐рд▓реЗрдВрдЧреА рдпрд╛ рд╣рдореЗрдВ рдпрд╣ рдкреНрд░рдорд╛рдг рдорд┐рд▓реЗрдЧрд╛ рдХрд┐ рдПрдбрдорд┐рди рдкрд╛рд╕рд╡рд░реНрдб рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред
рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╢рд╛рд╕реНрддреНрд░реАрдп рдирд┐рд╖реНрдкрд╛рджрди рдПрдХ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдореЗрд░рд╛ рдЪрд░рд┐рддреНрд░ VM рдПрдХ рдорд╛рдирдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рдЕрдиреБрдХрд░рдг рдореЛрдб рдореЗрдВ рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ, рдЖрдк рдЗрд╕рдХреА рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рд╕рд╛рде рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рдХреА рдЙрдЪрд┐рдд рдЖрд▓реЛрдЪрдирд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
- рд╕рдВрдпреБрдХреНрдд рд╡рд┐рд╕реНрдлреЛрдЯ, рдЪреВрдВрдХрд┐ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рдЕрдВрддрддрдГ рдкреА = рдПрдирдкреА рдкрд░ рдЯрд┐рдХреА рд╣реБрдИ рд╣реИ
- рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо, рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдЕрдиреНрдп рдмрд╛рд╣рд░реА рд╕рдВрдЧреНрд░рд╣рдг рдкрд░ рдХреЙрд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ
- рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдХреАрдбрд╝реЗ, рдЬрдм рдЧреНрд░рд╛рд╣рдХ рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдиреЗ рдПрдХ рдЪреАрдЬ рдХреА рдХрд▓реНрдкрдирд╛ рдХреА, рд▓реЗрдХрд┐рди ToR рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рд╣реА рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдирддреАрдЬрддрди, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХрд┐ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЛ рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рд╣реИред
рдЪреВрдВрдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдЖрд╡реЗрджрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ рдЕрднреА рддрдХ рджреАрд╡рд╛рд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЕрдкрдиреЗ рдорд╛рдереЗ рдХреЛ рдирд╣реАрдВ рд╣рд░рд╛рдКрдВрдЧрд╛, рдФрд░ рдореИрдВ рдПрдХ рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдЪреБрдиреВрдВрдЧрд╛ рдЬрд╣рд╛рдВ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рдмрд╛рд╣рд░реА рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдиреНрдпреВрдирддрдо рд╣реИред
рдЪреВрдВрдХрд┐ рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯреНрд╕ рдЗрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ рд╕реВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрд╕рдВрдж рд╡реЗрд╡реНрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╕реЗ RIDE рдЕрдиреБрдмрдВрдзреЛрдВ рдкрд░ рдЧрд┐рд░ рдЧрдИ: рд╡реЗ рдЯреНрдпреВрд░рд┐рдВрдЧ-рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЙрдирдХреА рдЕрдзрд┐рдХрддрдо рдЬрдЯрд┐рд▓рддрд╛ рдХреГрддреНрд░рд┐рдо рд░реВрдк рд╕реЗ рд╕реАрдорд┐рдд рд╣реИред
рд▓реЗрдХрд┐рди рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддрдХрдиреАрдХреА рдкрдХреНрд╖ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рд╕рднреА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╕реА рднреА рдЕрдиреБрдмрдВрдз рдХреЗ рд▓рд┐рдП, рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╛рдВрдЧ рдореЗрдВ рд╣реЛрдЧрд╛: рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕рдХреЗ рд▓реЙрдиреНрдЪ рдХреЗ рдмрд╛рдж рдПрдХ рдЕрдиреБрдмрдВрдз рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
рдФрд░ рдРрд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдХреАрдордд рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдзрди рдЕрдХреНрд╕рд░ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдзреЛрдВ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред
рдореЗрд░рд╛ рдЪрд░рд┐рддреНрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди PHP рдФрд░ рдкрд╛рдпрдерди рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдореА SMT рд╕реВрддреНрд░реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Microsoft рд░рд┐рд╕рд░реНрдЪ рдХреЗ Z3Prover рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдореВрд▓ рдореЗрдВ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдмрд╣реБ-рд▓реЗрди-рджреЗрди рдЦреЛрдЬ рд╣реИ, рдЬреЛ
рдЖрдкрдХреЛ рд╕рдорд╛рдзрд╛рди рдпрд╛ рдХрдордЬреЛрд░рд┐рдпрд╛рдВ рдЦреЛрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓реЗрдирджреЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐
рдЗрдереЗрд░рд┐рдпрдо рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ,
рдорд╛рдЗрдереНрд░рд┐рд▓ рдиреЗ рдХреБрдЫ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдерд╛ред
рд▓реЗрдХрд┐рди рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдИрдерд░ рдХреЗ рдЕрдиреБрдмрдВрдз рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИрдВ рдФрд░ рдЯреНрдпреВрд░рд┐рдВрдЧ рдкреВрд░реНрдгрддрд╛ рд╣реИред
PHP RIDE рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдПрдХ рдкрд╛рдЗрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ Z3 SMT рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдЙрдирдХреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдмрдВрдз рдХреА рд╢рд░реНрддреЛрдВ рдФрд░ рд╢рд░реНрддреЛрдВ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдЕрдм рдореИрдВ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗред
рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз RIDE рдХреА рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред
рдпрд╣ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдЖрд▓рд╕реА рд╣реИред
RIDE рдХреЛ рдмреНрд▓реЙрдХрдЪреЗрди рдХреЗ рднреАрддрд░ рдЕрд▓рдЧрд╛рд╡ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрдЯреБрдП рд╕реЗ рдЬреБрдбрд╝реЗ рднрдВрдбрд╛рд░рдг рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓ рдФрд░ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИред
рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд╡реЙрд▓реЗрдЯ рдореЗрдВ RIDE рдЕрдиреБрдмрдВрдз рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗрд╡рд▓ TRUE рдпрд╛ FALSE рд╣реЛрдЧрд╛ред
TRUE рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рд▓реЗрди-рджреЗрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ FALSE рдХрд┐ рдпрд╣ рдЗрд╕реЗ рдордирд╛ рдХрд░рддрд╛ рд╣реИред
рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг: рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЛ рд░реЛрдХ рд╕рдХрддреА рд╣реИ рдпрджрд┐ рдмрдЯреБрдЖ рд╕рдВрддреБрд▓рди 100 рд╕реЗ рдХрдо рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рд╕рднреА рдПрдХ рд╣реА рд╡реБрд▓реНрдл, рдмрдХрд░реА рдФрд░ рдЧреЛрднреА рд▓реЗ рдЬрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрд╕ рдмрдЯреБрдП рд╕реЗ рдкреИрд╕реЗ рдирд╣реАрдВ рдирд┐рдХрд╛рд▓ рдкрд╛рдПрдЧрд╛ рдЬрд┐рд╕ рдкрд░ рдЕрдиреБрдмрдВрдз рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╡рд╣ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рджреВрд╕рд░реА рддрд░рдл рдирд╣реАрдВ рднреЗрдЬрддрд╛ред
# let contract = tx.sender let human= extract(getInteger(contract,"human")) let wolf= extract(getInteger(contract,"wolf")) let goat= extract(getInteger(contract,"goat")) let cabbage= extract(getInteger(contract,"cabbage")) # -, 4 . # . match tx { case t:DataTransaction => # let newHuman= extract(getInteger(t.data,"human")) let newWolf= extract(getInteger(t.data,"wolf")) let newGoat= extract(getInteger(t.data,"goat")) let newCabbage= extract(getInteger(t.data,"cabbage")) #0 , , 1 let humanSide= human == 0 || human == 1 let wolfSide= wolf == 0 || wolf == 1 let goatSide= goat == 0 || goat == 1 let cabbageSide= cabbage == 0 || cabbage == 1 let side= humanSide && wolfSide && goatSide && cabbageSide # , . let safeAlone= newGoat != newWolf && newGoat != newCabbage let safe= safeAlone || newGoat == newHuman let humanTravel= human != newHuman # , - . let t1= humanTravel && newWolf == wolf + 1 && newGoat == goat && newCabbage == cabbage let t2= humanTravel && newWolf == wolf && newGoat == goat + 1 && newCabbage == cabbage let t3= humanTravel && newWolf == wolf && newGoat == goat && newCabbage == cabbage + 1 let t4= humanTravel && newWolf == wolf - 1 && newGoat == goat && newCabbage == cabbage let t5= humanTravel && newWolf == wolf && newGoat == goat - 1 && newCabbage == cabbage let t6= humanTravel && newWolf == wolf && newGoat == goat && newCabbage == cabbage - 1 let t7= humanTravel && newWolf == wolf && newGoat == goat && newCabbage == cabbage let objectTravel = t1 || t2 || t3 || t4 || t5 || t6 || t7 # . # 1 0, # , # - side && safe && humanTravel && objectTravel case s:TransferTransaction => # human == 1 && wolf == 1 && goat == 1 && cabbage == 1 # case _ => false }
PHP рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рд╕реЗ рдирд┐рдХрд╛рд▓реЗ рдЧрдП рд╕рднреА рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рдЙрдирдХреА рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рд▓реЙрдЬрд┐рдХрд▓ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЗ рд╕рдВрдЧрдд рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред
cabbage: extract ( getInteger ( contract , "cabbage" ) ) goat: extract ( getInteger ( contract , "goat" ) ) human: extract ( getInteger ( contract , "human" ) ) wolf: extract ( getInteger ( contract , "wolf" ) ) fState: human== 1 && wolf== 1 && goat== 1 && cabbage== 1 fState: wolf: goat: cabbage: cabbageSide: cabbage== 0 || cabbage== 1 human: extract ( getInteger ( contract , "human" ) ) newGoat: extract ( getInteger ( t.data , "goat" ) ) newHuman: extract ( getInteger ( t.data , "human" ) ) goatSide: goat== 0 || goat== 1 humanSide: human== 0 || human== 1 t7: humanTravel && newWolf== wolf && newGoat== goat && newCabbage== cabbage t3: humanTravel && newWolf== wolf && newGoat== goat && newCabbage== cabbage + 1 t6: humanTravel && newWolf== wolf && newGoat== goat && newCabbage== cabbage - 1 t2: humanTravel && newWolf== wolf && newGoat== goat + 1 && newCabbage== cabbage t5: humanTravel && newWolf== wolf && newGoat== goat - 1 && newCabbage== cabbage t1: humanTravel && newWolf== wolf + 1 && newGoat== goat && newCabbage== cabbage t4: humanTravel && newWolf== wolf - 1 && newGoat== goat && newCabbage== cabbage safeAlone: newGoat != newWolf && newGoat != newCabbage wolfSide: wolf== 0 || wolf== 1 humanTravel: human != newHuman side: humanSide && wolfSide && goatSide && cabbageSide safe: safeAlone || newGoat== newHuman objectTravel: t1 || t2 || t3 || t4 || t5 || t6 || t7
рддрдм PHP рдЙрдиреНрд╣реЗрдВ Z3Prover SMT рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдЧрдд рдкрд╛рдпрдерди рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рд╡рд░рдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕реНрдЯреЛрд░реЗрдЬ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ i, рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЗрдВрдбреЗрдХреНрд╕ i + 1 рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ рд╡рд╛рд▓реЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдкрд┐рдЫрд▓реЗ рд░рд╛рдЬреНрдп рд╕реЗ рдЕрдЧрд▓реЗ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕реНрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рд╣рдорд╛рд░реЗ рдЖрднрд╛рд╕реА рдорд╢реАрди рдХрд╛ рдмрд╣реБрдд рд╣реА рджрд┐рд▓ рд╣реИ, рдЬреЛ рдПрдХ рдмрд╣реБ-рд▓реЗрдирджреЗрди рдЦреЛрдЬ рдЗрдВрдЬрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
fState: And( And( And( human[Steps] == 1 , wolf[Steps] == 1 ) , goat[Steps] == 1 ) , cabbage[Steps] == 1 ) final: fState[Steps] fState: wolf: goat: cabbage: cabbageSide: Or( cabbage[i] == 0 , cabbage[i] == 1 ) goatSide: Or( goat[i] == 0 , goat[i] == 1 ) humanSide: Or( human[i] == 0 , human[i] == 1 ) t7: And( And( And( humanTravel[i] , wolf == wolf[i] ) , goat[i+1] == goat[i] ) , cabbage == cabbage[i] ) t3: And( And( And( humanTravel[i] , wolf == wolf[i] ) , goat[i+1] == goat[i] ) , cabbage == cabbage[i] + 1 ) t6: And( And( And( humanTravel[i] , wolf == wolf[i] ) , goat[i+1] == goat[i] ) , cabbage == cabbage[i] - 1 ) t2: And( And( And( humanTravel[i] , wolf == wolf[i] ) , goat[i+1] == goat[i] + 1 ) , cabbage == cabbage[i] ) t5: And( And( And( humanTravel[i] , wolf == wolf[i] ) , goat[i+1] == goat[i] - 1 ) , cabbage == cabbage[i] ) t1: And( And( And( humanTravel[i] , wolf == wolf[i] + 1 ) , goat[i+1] == goat[i] ) , cabbage == cabbage[i] ) t4: And( And( And( humanTravel[i] , wolf == wolf[i] - 1 ) , goat[i+1] == goat[i] ) , cabbage == cabbage[i] ) safeAlone: And( goat[i+1] != wolf , goat[i+1] != cabbage ) wolfSide: Or( wolf[i] == 0 , wolf[i] == 1 ) humanTravel: human[i] != human[i+1] side: And( And( And( humanSide[i] , wolfSide[i] ) , goatSide[i] ) , cabbageSide[i] ) safe: Or( safeAlone[i] , goat[i+1] == human[i+1] ) objectTravel: Or( Or( Or( Or( Or( Or( t1[i] , t2[i] ) , t3[i] ) , t4[i] ) , t5[i] ) , t6[i] ) , t7[i] ) data: And( And( And( side[i] , safe[i] ) , humanTravel[i] ) , objectTravel[i] )
рд╢рд░реНрддреЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдЬрдЧрд░ рдореЗрдВ рдПрд╕рдПрдордЯреА рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЦрд╛рд▓реА рдЦрд╛рдХрд╛ import json from z3 import * s = Solver() Steps=7 Num= Steps+1 $code$
рд╕рдВрдкреВрд░реНрдг рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП, рд╣рд╕реНрддрд╛рдВрддрд░рдг рд▓реЗрдирджреЗрди рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рдпрдо рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред
рддреЛ, Z3Prover рдмрд╕ рд╢рд░реНрддреЛрдВ рдХреЗ рдРрд╕реЗ рд╕реЗрдЯ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдЧрд╛ рдЬреЛ рдЕрдВрддрддрдГ рдЖрдкрдХреЛ рдЕрдиреБрдмрдВрдз рд╕реЗ рдзрди рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдирддреАрдЬрддрди, рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдЕрдиреБрдмрдВрдз рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдПрд╕рдПрдордЯреА рдореЙрдбрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рдореЙрдбрд▓ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдерд╛ред
рдкреВрд░рд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ import json from z3 import * s = Solver() Steps=7 Num= Steps+1 human = [ Int('human_%i' % (i + 1)) for i in range(Num) ] wolf = [ Int('wolf_%i' % (i + 1)) for i in range(Num) ] goat = [ Int('goat_%i' % (i + 1)) for i in range(Num) ] cabbage = [ Int('cabbage_%i' % (i + 1)) for i in range(Num) ] nothing= [ And( human[i] == human[i+1], wolf[i] == wolf[i+1], goat[i] == goat[i+1], cabbage[i] == cabbage[i+1] ) for i in range(Num-1) ] start= [ human[0] == 1, wolf[0] == 0, goat[0] == 1, cabbage[0] == 0 ] safeAlone= [ And( goat[i+1] != wolf[i+1] , goat[i+1] != cabbage[i+1] ) for i in range(Num-1) ] safe= [ Or( safeAlone[i] , goat[i+1] == human[i+1] ) for i in range(Num-1) ] humanTravel= [ human[i] != human[i+1] for i in range(Num-1) ] cabbageSide= [ Or( cabbage[i] == 0 , cabbage[i] == 1 ) for i in range(Num-1) ] goatSide= [ Or( goat[i] == 0 , goat[i] == 1 ) for i in range(Num-1) ] humanSide= [ Or( human[i] == 0 , human[i] == 1 ) for i in range(Num-1) ] t7= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] ) , goat[i+1] == goat[i] ) , cabbage[i+1] == cabbage[i] ) for i in range(Num-1) ] t3= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] ) , goat[i+1] == goat[i] ) , cabbage[i+1] == cabbage[i] + 1 ) for i in range(Num-1) ] t6= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] ) , goat[i+1] == goat[i] ) , cabbage[i+1] == cabbage[i] - 1 ) for i in range(Num-1) ] t2= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] ) , goat[i+1] == goat[i] + 1 ) , cabbage[i+1] == cabbage[i] ) for i in range(Num-1) ] t5= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] ) , goat[i+1] == goat[i] - 1 ) , cabbage[i+1] == cabbage[i] ) for i in range(Num-1) ] t1= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] + 1 ) , goat[i+1] == goat[i] ) , cabbage[i+1] == cabbage[i] ) for i in range(Num-1) ] t4= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] - 1 ) , goat[i+1] == goat[i] ) , cabbage[i+1] == cabbage[i] ) for i in range(Num-1) ] wolfSide= [ Or( wolf[i] == 0 , wolf[i] == 1 ) for i in range(Num-1) ] side= [ And( And( And( humanSide[i] , wolfSide[i] ) , goatSide[i] ) , cabbageSide[i] ) for i in range(Num-1) ] objectTravel= [ Or( Or( Or( Or( Or( Or( t1[i] , t2[i] ) , t3[i] ) , t4[i] ) , t5[i] ) , t6[i] ) , t7[i] ) for i in range(Num-1) ] data= [ Or( And( And( And( side[i] , safe[i] ) , humanTravel[i] ) , objectTravel[i] ) , nothing[i]) for i in range(Num-1) ] fState= And( And( And( human[Steps] == 1 , wolf[Steps] == 1 ) , goat[Steps] == 1 ) , cabbage[Steps] == 1 ) final= fState
рд▓реЙрдиреНрдЪ рдХреЗ рдмрд╛рдж, Z3Prover рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рд▓реЗрдирджреЗрди рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдзрди рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛:
Winning transaction chain found: Data transaction: human= 0, wolf= 0, goat= 1, cabbage= 0 Data transaction: human= 1, wolf= 0, goat= 1, cabbage= 1 Data transaction: human= 0, wolf= 0, goat= 0, cabbage= 1 Data transaction: human= 1, wolf= 1, goat= 0, cabbage= 1 Data transaction: human= 0, wolf= 1, goat= 0, cabbage= 1 Data transaction: human= 1, wolf= 1, goat= 1, cabbage= 1 Data transaction: human= 1, wolf= 1, goat= 1, cabbage= 1 Transfer transaction
рдЕрдЧреНрд░реЗрд╖рдг рдЕрдиреБрдмрдВрдз рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ 2 рд▓реЗрдирджреЗрди рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
let contract = tx.sender let a= extract(getInteger(contract,"a")) let b= extract(getInteger(contract,"b")) let c= extract(getInteger(contract,"c")) let d= extract(getInteger(contract,"d")) match tx { case t:DataTransaction => let na= extract(getInteger(t.data,"a")) let nb= extract(getInteger(t.data,"b")) let nc= extract(getInteger(t.data,"c")) let nd= extract(getInteger(t.data,"d")) nd == 0 || a == 100 - 5 case s:TransferTransaction => ( a + b - c ) * d == 12 case _ => true }
рдЪреВрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдмрд╣реБрдд рд╕реАрдорд┐рдд рд╣реИ рдФрд░ рдмрдЧреНрд╕ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВ, рдореИрдВ рд╡реАрдПрдо рдХреЗ рдЖрдЧреЗ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕рдХреА рдорджрдж рд╕реЗ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдмрдирд╛рдирд╛ рдХреИрд╕реЗ рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рди рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░рдирд╛ред
рдПрдХ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдЖрднрд╛рд╕реА рдорд╢реАрди
http://2.59.42.98/hyperbox/ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ
рд╕реНрд░реЛрдд github рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
http://github.com/scp1001/hyperboxрд╕рднреА рд╡реАрдПрдо рд▓реЙрдЬрд┐рдХ 2 рдлрд╛рдЗрд▓реЛрдВ, рд╣рд╛рдЗрдкрд░рдмреЙрдХреНрд╕.рдлрдкреА рдФрд░ рд╣рд╛рдЗрдкрд░рдмреЙрдХреНрд╕ 2.php рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рд╣реИ