#include <math.h>
#include <stdio.h>
using namespace std;
double
f(double x)
{
return 3 * pow(x, 4) + 4 * pow(x, 3) - 12 * pow(x, 2) - 5;
//—Ñ—É–Ω–∫—Ü–∏—è
}
double
df(double x)
{
return 12 * pow(x, 3) + 12 * pow(x, 2) - 24 * x;
//–ø—63–æ–∏–∑–≤–æ–¥–Ω–∞—è
}
/**INDENT** Error@4: Unbalanced parens */
#if 0
double
dixit(double a, double b, double eps)//–º–µ—Ç–æ–¥–¥–∏—Ö–æ—Ç–æ–º–∏–∏, —Ñ—É–Ω—Ü–∏—èf(x) = 0 – Ω–µ–ø—7–µ—7—ã–≤–Ω–∞//–Ω–∞–æ—Ç—7–µ–∑–∫–µ[a;
/**INDENT** Warning@5: Extra ] */
b] – ∏f(a) * f(b) < 0.
{
double c;
do {
c = (a + b) / 2.0;
//–Ω–∞—Ö–æ–¥–∏–º—Ç–æ—á–∫—Éc = (a + b) / 2 if (f(a) * f(c) < 0)
b = c;
/**INDENT** Error@8: Unbalanced parens */
//–µ—Å–ª–∏—ç—Ç–æ—É—Å–ª–æ–≤–∏–µ–≤—ã–ø–æ–ª–Ω–µ–Ω–æ, —Ç–æ–∫–æ—119–µ–Ω—å–ª–µ–∂–∏—Ç–Ω–∞[a;
/**INDENT** Warning@9: Extra ] */
c]
/**INDENT** Error@9: Unmatched 'else' */
else
if (f(b) * f(c) < 0)
a = c;
/**INDENT** Error@10: Unbalanced parens */
//–∏–Ω–∞—á–µ–∫–æ—119–µ–Ω—å–ª–µ–∂–∏—Ç–Ω–∞[c;
/**INDENT** Warning@11: Extra ] */
b]
/**INDENT** Error@11: Unmatched 'else' */
else {
cout << "–ö–æ—175–µ–Ω—å –Ω–µ –Ω–∞–π–¥–µ–Ω" << endl;
//–µ—Å–ª–∏–æ–±–∞—É—Å–ª–æ–≤–∏—è–Ω–µ–≤—ã–ø–æ–ª–Ω—è—é—Ç—Å—è, —Ç–æ–∫–æ—175–Ω—è–Ω–µ—Ç–Ω–∞–¥–∞–Ω–Ω–æ–º–ø—175–æ–º–µ–∂—É—Ç–∫–µreturn 0;
}
} while (fabs(b - a) > eps);
//–ø–æ–∫–∞–∑–Ω–∞—á–µ–Ω–∏–µ–≤—Ñ—É–Ω–∫—Ü–∏–∏–≤—Ç–æ—á–∫–µb - a – ±–æ–ª—å—à–µ–∑–∞–¥–∞–Ω–Ω–æ–π—Ç–æ—á–Ω–æ—Å—Ç–∏, //–≤—ã–ø–æ–ª–Ω—è–µ–º–∞–ª–≥–æ—63–∏—Ç–º–Ω–∞—Ö–æ–∂–¥–µ–Ω–∏—è—Å, –æ–ø–∏—Å–∞–Ω–Ω—ã–π—Å–≤–µ—63—Ö—Éreturn c;
//–≤–æ–∑–≤—63–∞—â–∞–µ–º–∑–Ω–∞—á–µ–Ω–∏–µ—Å–ø–æ—Å–ª–µ–≤—ã–ø–æ–ª–Ω–µ–Ω–∏—è—Ü–∏–∫–ª–∞
} double
/**INDENT** Error@15: Unbalanced parens */
Hord(double a, double b, double eps)//–º–µ—Ç–æ–¥—Ö–æ—7–¥//—7–∞–∑–±–∏–µ–Ω–∏–µ–æ—Ç—7–µ–∑–∫–∞[a;
/**INDENT** Warning@16: Extra ] */
b] – Ω–∞–¥–≤–∞–æ—Ç—7–µ–∑–∫–∞—Å–ø–æ–º–æ—â—å—é—Ö–æ—7–¥—ã–∏–≤—ã–±–æ—7–µ–Ω–æ–≤–æ–≥–æ–æ—Ç—7–µ–∑–∫–∞–æ—Ç—Ç–æ—á–∫–∏//–ø–µ—7–µ—Å–µ—á–µ–Ω–∏—è—Ö–æ—7–¥—ã—Å–æ—Å—å—é–∞–±—Å—Ü–∏—Å—Å–¥–æ–Ω–µ–ø–æ–¥–≤–∏–∂–Ω–æ–π—Ç–æ—á–∫–∏, –Ω–∞–∫–æ—Ç–æ—7–æ–º//—Ñ—É–Ω–∫—Ü–∏—è–º–µ–Ω—è–µ—Ç–∑–Ω–∞–∫–∏—Å–æ–¥–µ—7–∂–∏—Ç—7–µ—à–µ–Ω–∏–µ, –ø—7–∏—á—ë–º–ø–æ–¥–≤–∏–∂–Ω–∞—è—Ç–æ—á–∫–∞//–ø—7–∏–±–ª–∏–∂–∞–µ—Ç—Å—è–∫Œµ-–æ–∫—7–µ—Å—Ç–Ω–æ—Å—Ç–∏—7–µ—à–µ–Ω–∏—è.
{
while (fabs(b - a) > eps)
//–ø–æ–∫–∞–∑–Ω–∞—á–µ–Ω–∏–µ–≤—Ñ—É–Ω–∫—Ü–∏–∏–≤—Ç–æ—á–∫–µb - a – ±–æ–ª—å—à–µ–∑–∞–¥–∞–Ω–Ω–æ–π—Ç–æ—á–Ω–æ—Å—Ç–∏, //–≤—ã–ø–æ–ª–Ω—è–µ–º–∞–ª–≥–æ—119–∏—Ç–º, –æ–ø–∏—Å–∞–Ω–Ω—ã–π–Ω–∏–∂–µ{
a = b - (b - a) * f(b) / (f(b) - f(a));
//—119–∞—Å—á–µ—Ç–Ω–æ–≤–æ–≥–æ–∑–Ω–∞—á–µ–Ω–∏—è–∞–ø–æ—Ñ–æ—119–º—É–ª–µb = a - (a - b) * f(a) / (f(a) - f(b));
//—119–∞—Å—á–µ—Ç–Ω–æ–≤–æ–≥–æ–∑–Ω–∞—á–µ–Ω–∏—èb – ø–æ—Ñ–æ—119–º—É–ª–µ
} return b;
//–≤–æ–∑–≤—63–∞—â–∞–µ–ºb – ø–æ—Å–ª–µ–≤—ã–ø–æ–ª–Ω–µ–Ω–∏—è—Ü–∏–∫–ª–∞
}
#endif
double
Newton(double x, double &n, double eps)//–º–µ—Ç–æ–¥–ù—å—é—Ç–æ–Ω–∞//–ø—7–æ—Ü–µ—Å—Å–∏—Ç–µ—7–∞—Ü–∏–π—Å–æ—Å—Ç–æ–∏—Ç–≤—Ç–æ–º, —á—Ç–æ–≤–∫–∞—á–µ—Å—Ç–≤–µ//–ø—7–∏–±–ª–∏–∂–µ–Ω–∏–π–∫–∫–æ—7–Ω—é–ø—7–∏–Ω–∏–º–∞—é—Ç—Å—è–∑–Ω–∞—á–µ–Ω–∏—è—Ö0, —Ö1, —Ö2 ‚ 7¶—Ç–æ—á–µ–∫–ø–µ—7–µ—Å–µ—á–µ–Ω–∏—è//–∫–∞—Å–∞—Ç–µ–ª—å–Ω–æ–π–∫–∫—7–∏–≤–æ–π
{
double dx;
n = 0;
while (1) {
dx = f(x) / df(x);
x = x - dx;
if (fabs(dx) < eps)
break;
n++;
if (n > 100)
break;
} return x;
}
double g(double x) { return x - 1.0/df(x) * f(x); }
double
Iter(double x, double b, int n, double eps)
{
double dx;
n = 0;
while (1) {
// dx = b * f(x);
// x = x + dx;
// solve x = g(x) where g(x) = x - lamdda(x)*f(x), g(x) is defined above Iter. Assume lambda(x) = 1/f'(x)
dx = g(x) - x; // dx = g(x) - x
x = g(x); // x = g(x)
if (fabs(dx) < eps)
break;
if (n > 100)
break;
} return x;
}
int main () {
// setlocale(LC_ALL, "rus");
// double a;
// double b;
// double eps;
// double x;
// cout << "–í–≤–µ–¥–∏—Ç–µ –∞ " << endl;
// cin >> a;
// cout << "–í–≤–µ–¥–∏—Ç–µ b" << endl;
// cin >> b;
// cout << "–í–≤–µ–¥–∏—Ç–µ eps" << endl;
// cin >> eps;
// printf("–ö–æ—63–µ–Ω—å, –Ω–∞–π–¥–µ–Ω–Ω—ã–π –º–µ—Ç–æ–¥–æ–º –¥–∏—Ö–æ—Ç–æ–º–∏–∏ = %7f", dixit(a, b, eps));
// cout << endl;
// printf("–ö–æ—63–µ–Ω—å, –Ω–∞–π–¥–µ–Ω–Ω—ã–π –º–µ—Ç–æ–¥–æ–º —Ö–æ—63–¥ = %7f", Hord(a, b, eps));
// cout << endl;
// printf("–ö–æ—63–µ–Ω—å, –Ω–∞–π–¥–µ–Ω–Ω—ã–π –º–µ—Ç–æ–¥–æ–º –ù—å—é—Ç–æ–Ω–∞ = %7f", Newton(a, b, eps));
// cout << endl;
// cout << "–í–≤–µ–¥–∏—Ç–µ x0 " << endl;
// cin >> x;
// cout << endl;
printf("–ö–æ—63–µ–Ω—å, –Ω–∞–π–¥–µ–Ω–Ω—ã–π –º–µ—Ç–æ–¥–æ–º –ø—63–æ—Å—Ç—ã—Ö –∏—Ç–µ—63–∞—Ü–∏–π = %7f\n", Iter(2.5, 2, 3, 0.001));
printf("–ö–æ—63–µ–Ω—å, –Ω–∞–π–¥–µ–Ω–Ω—ã–π –º–µ—Ç–æ–¥–æ–º –ø—63–æ—Å—Ç—ã—Ö –∏—Ç–µ—63–∞—Ü–∏–π = %7f\n", Iter(-2.5, -3, -2, 0.001));
}
I2luY2x1ZGUgPG1hdGguaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpkb3VibGUKZihkb3VibGUgeCkKewoJcmV0dXJuIDMgKiBwb3coeCwgNCkgKyA0ICogcG93KHgsIDMpIC0gMTIgKiBwb3coeCwgMikgLSA1OwoJLy/igJTDkeKAlMOJ4oCTzqnigJPiiKvigJTDnOKAk+KIj+KAlMOoCn0KZG91YmxlCmRmKGRvdWJsZSB4KQp7CglyZXR1cm4gMTIgKiBwb3coeCwgMykgKyAxMiAqIHBvdyh4LCAyKSAtIDI0ICogeDsKCS8v4oCTw7jigJQ2M+KAk8Om4oCT4oiP4oCT4oiR4oCT4omk4oCTw6bigJPCpeKAk86p4oCT4oie4oCUw6gKfQoKCgovKipJTkRFTlQqKiBFcnJvckA0OiBVbmJhbGFuY2VkIHBhcmVucyAqLwojaWYgMApkb3VibGUKZGl4aXQoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgZXBzKS8v4oCTwrrigJPCteKAlMOH4oCTw6bigJPCpeKAk8Kl4oCT4oiP4oCUw5bigJPDpuKAlMOH4oCTw6bigJPCuuKAk+KIj+KAk+KIjywg4oCUw5HigJTDieKAk86p4oCUw5zigJPiiI/igJTDqGYoeCkgPSAwIOKAkyDOqeKAk8K14oCTw7jigJQ34oCTwrXigJQ34oCUw6PigJPiiaTigJPOqeKAk+KIni8v4oCTzqnigJPiiJ7igJPDpuKAlMOH4oCUN+KAk8K14oCT4oiR4oCT4oir4oCTwrVbYTsKLyoqSU5ERU5UKiogV2FybmluZ0A1OiBFeHRyYSBdICovCmJdIOKAkyDiiI9mKGEpICogZihiKSA8IDAuCnsKCWRvdWJsZQkJYzsKCWRvIHsKCQljID0gKGEgKyBiKSAvIDIuMDsKCQkvL+KAk86p4oCT4oie4oCUw5bigJPDpuKAk8Kl4oCT4oiP4oCTwrrigJTDh+KAk8Om4oCUw6HigJPiiKvigJTDiWMgPSAoYSArIGIpIC8gMiBpZiAoZihhKSAqIGYoYykgPCAwKQoJCQliID0gYzsKLyoqSU5ERU5UKiogRXJyb3JAODogVW5iYWxhbmNlZCBwYXJlbnMgKi8KCQkvL+KAk8K14oCUw4XigJPCquKAk+KIj+KAlMOn4oCUw4figJPDpuKAlMOJ4oCUw4XigJPCquKAk8Om4oCT4omk4oCT4oiP4oCTwrXigJPiiaTigJTDo+KAk8O44oCTw6bigJPCquKAk86p4oCTwrXigJPOqeKAk8OmLCDigJTDh+KAk8Om4oCT4oir4oCTw6bigJQxMTnigJPCteKAk86p4oCUw6XigJPCquKAk8K14oCT4oiC4oCT4oiP4oCUw4figJPOqeKAk+KInlthOwovKipJTkRFTlQqKiBXYXJuaW5nQDk6IEV4dHJhIF0gKi8KCQljXQovKipJTkRFTlQqKiBFcnJvckA5OiBVbm1hdGNoZWQgJ2Vsc2UnICovCgkJZWxzZQoJCWlmIChmKGIpICogZihjKSA8IDApCgkJCWEgPSBjOwovKipJTkRFTlQqKiBFcnJvckAxMDogVW5iYWxhbmNlZCBwYXJlbnMgKi8KCQkvL+KAk+KIj+KAk86p4oCT4oie4oCUw6HigJPCteKAk+KIq+KAk8Om4oCUMTE54oCTwrXigJPOqeKAlMOl4oCTwqrigJPCteKAk+KIguKAk+KIj+KAlMOH4oCTzqnigJPiiJ5bYzsKLyoqSU5ERU5UKiogV2FybmluZ0AxMTogRXh0cmEgXSAqLwoJCWJdCi8qKklOREVOVCoqIEVycm9yQDExOiBVbm1hdGNoZWQgJ2Vsc2UnICovCgkJZWxzZSB7CgkJCWNvdXQgPDwgIuKAk8O24oCTw6bigJQxNzXigJPCteKAk86p4oCUw6Ug4oCTzqnigJPCtSDigJPOqeKAk+KInuKAk8+A4oCTwqXigJPCteKAk86pIiA8PCBlbmRsOwoJCQkvL+KAk8K14oCUw4XigJPCquKAk+KIj+KAk8Om4oCTwrHigJPiiJ7igJTDieKAlMOF4oCTwqrigJPDpuKAk+KJpOKAk+KIj+KAlMOo4oCTzqnigJPCteKAk+KJpOKAlMOj4oCTw7jigJPDpuKAk8Kq4oCTzqnigJTDqOKAlMOp4oCUw4figJTDheKAlMOoLCDigJTDh+KAk8Om4oCT4oir4oCTw6bigJQxNzXigJPOqeKAlMOo4oCTzqnigJPCteKAlMOH4oCTzqnigJPiiJ7igJPCpeKAk+KInuKAk86p4oCTzqnigJPDpuKAk8K64oCTw7jigJQxNzXigJPDpuKAk8K64oCTwrXigJPiiILigJTDieKAlMOH4oCT4oir4oCTwrVyZXR1cm4gMDsKCQl9Cgl9IHdoaWxlIChmYWJzKGIgLSBhKSA+IGVwcyk7CgkvL+KAk8O44oCTw6bigJPiiKvigJPiiJ7igJPiiJHigJPOqeKAk+KInuKAlMOh4oCTwrXigJPOqeKAk+KIj+KAk8K14oCT4omk4oCUw5HigJTDieKAk86p4oCT4oir4oCUw5zigJPiiI/igJPiiI/igJPiiaTigJTDh+KAk8Om4oCUw6HigJPiiKvigJPCtWIgLSBhIOKAkyDCseKAk8Om4oCTwqrigJTDpeKAlMOg4oCTwrXigJPiiJHigJPiiJ7igJPCpeKAk+KInuKAk86p4oCTzqnigJPDpuKAk8+A4oCUw4figJPDpuKAlMOh4oCTzqnigJPDpuKAlMOF4oCUw4figJPiiI8sIC8v4oCT4omk4oCUw6PigJPDuOKAk8Om4oCTwqrigJPOqeKAlMOo4oCTwrXigJPCuuKAk+KInuKAk8Kq4oCT4oml4oCTw6bigJQ2M+KAk+KIj+KAlMOH4oCTwrrigJPOqeKAk+KInuKAlMOW4oCTw6bigJPiiILigJPCpeKAk8K14oCTzqnigJPiiI/igJTDqOKAlMOFLCDigJPDpuKAk8O44oCT4oiP4oCUw4XigJPiiJ7igJPOqeKAk86p4oCUw6PigJPPgOKAlMOF4oCT4omk4oCTwrXigJQ2M+KAlMOW4oCUw4lyZXR1cm4gYzsKCS8v4oCT4omk4oCTw6bigJPiiJHigJPiiaTigJQ2M+KAk+KInuKAlMOi4oCT4oie4oCTwrXigJPCuuKAk+KIkeKAk86p4oCT4oie4oCUw6HigJPCteKAk86p4oCT4oiP4oCTwrXigJTDheKAk8O44oCTw6bigJTDheKAk8Kq4oCTwrXigJPiiaTigJTDo+KAk8O44oCTw6bigJPCquKAk86p4oCTwrXigJPOqeKAk+KIj+KAlMOo4oCUw5zigJPiiI/igJPiiKvigJPCquKAk+KIngp9IGRvdWJsZQovKipJTkRFTlQqKiBFcnJvckAxNTogVW5iYWxhbmNlZCBwYXJlbnMgKi8KSG9yZChkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBlcHMpLy/igJPCuuKAk8K14oCUw4figJPDpuKAk8Kl4oCUw5bigJPDpuKAlDfigJPCpS8v4oCUN+KAk+KInuKAk+KIkeKAk8Kx4oCT4oiP4oCTwrXigJPOqeKAk+KIj+KAk8K14oCTw6bigJTDh+KAlDfigJPCteKAk+KIkeKAk+KIq+KAk+KInlthOwovKipJTkRFTlQqKiBXYXJuaW5nQDE2OiBFeHRyYSBdICovCmJdIOKAkyDOqeKAk+KInuKAk8Kl4oCT4omk4oCT4oie4oCTw6bigJTDh+KAlDfigJPCteKAk+KIkeKAk+KIq+KAk+KInuKAlMOF4oCTw7jigJPDpuKAk8K64oCTw6bigJTDouKAlMOl4oCUw6nigJTDluKAk8Om4oCUN+KAk8Kl4oCUw6PigJPiiI/igJPiiaTigJTDo+KAk8Kx4oCTw6bigJQ34oCTwrXigJPOqeKAk8Om4oCT4omk4oCTw6bigJPiiaXigJPDpuKAk8Om4oCUw4figJQ34oCTwrXigJPiiJHigJPiiKvigJPiiJ7igJPDpuKAlMOH4oCUw4figJPDpuKAlMOh4oCT4oir4oCT4oiPLy/igJPDuOKAk8K14oCUN+KAk8K14oCUw4XigJPCteKAlMOh4oCTwrXigJPOqeKAk+KIj+KAlMOo4oCUw5bigJPDpuKAlDfigJPCpeKAlMOj4oCUw4XigJPDpuKAlMOF4oCUw6XigJTDqeKAk+KInuKAk8Kx4oCUw4XigJTDnOKAk+KIj+KAlMOF4oCUw4XigJPCpeKAk8Om4oCTzqnigJPCteKAk8O44oCTw6bigJPCpeKAk+KJpOKAk+KIj+KAk+KIguKAk86p4oCTw6bigJPPgOKAlMOH4oCTw6bigJTDoeKAk+KIq+KAk+KIjywg4oCTzqnigJPiiJ7igJPiiKvigJPDpuKAlMOH4oCTw6bigJQ34oCTw6bigJPCui8v4oCUw5HigJTDieKAk86p4oCT4oir4oCUw5zigJPiiI/igJTDqOKAk8K64oCTwrXigJPOqeKAlMOo4oCTwrXigJTDh+KAk+KIkeKAk86p4oCT4oie4oCT4oir4oCT4oiP4oCUw4XigJPDpuKAk8Kl4oCTwrXigJQ34oCT4oiC4oCT4oiP4oCUw4figJQ34oCTwrXigJTDoOKAk8K14oCTzqnigJPiiI/igJPCtSwg4oCTw7jigJQ34oCT4oiP4oCUw6HigJTDq+KAk8K64oCTw7jigJPDpuKAk8Kl4oCT4omk4oCT4oiP4oCT4oiC4oCTzqnigJPiiJ7igJTDqOKAlMOH4oCTw6bigJTDoeKAk+KIq+KAk+KIni8v4oCTw7jigJQ34oCT4oiP4oCTwrHigJPCquKAk+KIj+KAk+KIguKAk+KInuKAk8K14oCUw4figJTDheKAlMOo4oCT4oirxZLCtS3igJPDpuKAk+KIq+KAlDfigJPCteKAlMOF4oCUw4figJPOqeKAk8Om4oCUw4XigJTDh+KAk+KIj+KAlDfigJPCteKAlMOg4oCTwrXigJPOqeKAk+KIj+KAlMOoLgp7Cgl3aGlsZSAoZmFicyhiIC0gYSkgPiBlcHMpCgkJLy/igJPDuOKAk8Om4oCT4oir4oCT4oie4oCT4oiR4oCTzqnigJPiiJ7igJTDoeKAk8K14oCTzqnigJPiiI/igJPCteKAk+KJpOKAlMOR4oCUw4nigJPOqeKAk+KIq+KAlMOc4oCT4oiP4oCT4oiP4oCT4omk4oCUw4figJPDpuKAlMOh4oCT4oir4oCTwrViIC0gYSDigJMgwrHigJPDpuKAk8Kq4oCUw6XigJTDoOKAk8K14oCT4oiR4oCT4oie4oCTwqXigJPiiJ7igJPOqeKAk86p4oCTw6bigJPPgOKAlMOH4oCTw6bigJTDoeKAk86p4oCTw6bigJTDheKAlMOH4oCT4oiPLCAvL+KAk+KJpOKAlMOj4oCTw7jigJPDpuKAk8Kq4oCTzqnigJTDqOKAk8K14oCTwrrigJPiiJ7igJPCquKAk+KJpeKAk8Om4oCUMTE54oCT4oiP4oCUw4figJPCuiwg4oCTw6bigJPDuOKAk+KIj+KAlMOF4oCT4oie4oCTzqnigJPOqeKAlMOj4oCTz4DigJPOqeKAk+KIj+KAk+KIguKAk8K1ewoJCWEgPSBiIC0gKGIgLSBhKSAqIGYoYikgLyAoZihiKSAtIGYoYSkpOwoJCS8v4oCUMTE54oCT4oie4oCUw4XigJTDoeKAk8K14oCUw4figJPOqeKAk8Om4oCT4omk4oCTw6bigJPiiaXigJPDpuKAk+KIkeKAk86p4oCT4oie4oCUw6HigJPCteKAk86p4oCT4oiP4oCUw6jigJPiiJ7igJPDuOKAk8Om4oCUw5HigJPDpuKAlDExOeKAk8K64oCUw4nigJPCquKAk8K1YiA9IGEgLSAoYSAtIGIpICogZihhKSAvIChmKGEpIC0gZihiKSk7CgkJLy/igJQxMTnigJPiiJ7igJTDheKAlMOh4oCTwrXigJTDh+KAk86p4oCTw6bigJPiiaTigJPDpuKAk+KJpeKAk8Om4oCT4oiR4oCTzqnigJPiiJ7igJTDoeKAk8K14oCTzqnigJPiiI/igJTDqGIg4oCTIMO44oCTw6bigJTDkeKAk8Om4oCUMTE54oCTwrrigJTDieKAk8Kq4oCTwrUKCQl9IHJldHVybiBiOwoJLy/igJPiiaTigJPDpuKAk+KIkeKAk+KJpOKAlDYz4oCT4oie4oCUw6LigJPiiJ7igJPCteKAk8K6YiDigJMgw7jigJPDpuKAlMOF4oCTwqrigJPCteKAk+KJpOKAlMOj4oCTw7jigJPDpuKAk8Kq4oCTzqnigJPCteKAk86p4oCT4oiP4oCUw6jigJTDnOKAk+KIj+KAk+KIq+KAk8Kq4oCT4oieCn0KCiNlbmRpZgoKZG91YmxlCk5ld3Rvbihkb3VibGUgeCwgZG91YmxlICZuLCBkb3VibGUgZXBzKS8v4oCTwrrigJPCteKAlMOH4oCTw6bigJPCpeKAk8O54oCUw6XigJTDqeKAlMOH4oCTw6bigJPOqeKAk+KIni8v4oCTw7jigJQ34oCTw6bigJTDnOKAk8K14oCUw4XigJTDheKAk+KIj+KAlMOH4oCTwrXigJQ34oCT4oie4oCUw5zigJPiiI/igJPPgOKAlMOF4oCTw6bigJTDheKAlMOH4oCTw6bigJPiiI/igJTDh+KAk+KJpOKAlMOH4oCTw6bigJPCuiwg4oCUw6HigJTDh+KAk8Om4oCT4omk4oCT4oir4oCT4oie4oCUw6HigJPCteKAlMOF4oCUw4figJPiiaTigJPCtS8v4oCTw7jigJQ34oCT4oiP4oCTwrHigJPCquKAk+KIj+KAk+KIguKAk8K14oCTzqnigJPiiI/igJPPgOKAk+KIq+KAk+KIq+KAk8Om4oCUN+KAk86p4oCUw6nigJPDuOKAlDfigJPiiI/igJPOqeKAk+KIj+KAk8K64oCT4oie4oCUw6nigJTDh+KAlMOF4oCUw6jigJPiiJHigJPOqeKAk+KInuKAlMOh4oCTwrXigJPOqeKAk+KIj+KAlMOo4oCUw5YwLCDigJTDljEsIOKAlMOWMiDigJogN8K24oCUw4figJPDpuKAlMOh4oCTwrXigJPiiKvigJPDuOKAk8K14oCUN+KAk8K14oCUw4XigJPCteKAlMOh4oCTwrXigJPOqeKAk+KIj+KAlMOoLy/igJPiiKvigJPiiJ7igJTDheKAk+KInuKAlMOH4oCTwrXigJPCquKAlMOl4oCTzqnigJPDpuKAk8+A4oCT4oir4oCT4oir4oCUN+KAk+KIj+KAk+KJpOKAk8Om4oCTz4AKewoJZG91YmxlCQlkeDsKCW4gPSAwOwoJd2hpbGUgKDEpIHsKCQlkeCA9IGYoeCkgLyBkZih4KTsKCQl4ID0geCAtIGR4OwoJCWlmIChmYWJzKGR4KSA8IGVwcykKCQkJYnJlYWs7CgkJbisrOwoJCWlmIChuID4gMTAwKQoJCQlicmVhazsKCX0gcmV0dXJuIHg7Cn0KCmRvdWJsZSBnKGRvdWJsZSB4KSB7IHJldHVybiB4IC0gMS4wL2RmKHgpICogZih4KTsgfQpkb3VibGUKSXRlcihkb3VibGUgeCwgZG91YmxlIGIsIGludCBuLCBkb3VibGUgZXBzKQp7Cglkb3VibGUJCWR4OwoJbiA9IDA7Cgl3aGlsZSAoMSkgewoKLy8JCWR4ID0gYiAqIGYoeCk7Ci8vCQl4ID0geCArIGR4OwoKCQkvLyBzb2x2ZSB4ID0gZyh4KSB3aGVyZSBnKHgpID0geCAtIGxhbWRkYSh4KSpmKHgpLCBnKHgpIGlzIGRlZmluZWQgYWJvdmUgSXRlci4gQXNzdW1lIGxhbWJkYSh4KSA9IDEvZicoeCkKCQlkeCA9IGcoeCkgLSB4OwkJLy8gZHggPSBnKHgpIC0geAoJCXggPSBnKHgpOwkvLyB4ID0gZyh4KQoJCQoJCWlmIChmYWJzKGR4KSA8IGVwcykKCQkJYnJlYWs7CgkJaWYgKG4gPiAxMDApCgkJCWJyZWFrOwoJfSByZXR1cm4geDsKfQoKCmludAkJbWFpbiAgICAgKCkgewoKLy8Jc2V0bG9jYWxlKExDX0FMTCwgInJ1cyIpOwovLwlkb3VibGUJCWE7Ci8vCWRvdWJsZQkJYjsKLy8JZG91YmxlCQllcHM7Ci8vCWRvdWJsZQkJeDsKLy8JY291dCA8PCAi4oCTw63igJPiiaTigJPCteKAk8Kl4oCT4oiP4oCUw4figJPCtSDigJPiiJ4gIiA8PCBlbmRsOwovLwljaW4gPj4gYTsKLy8JY291dCA8PCAi4oCTw63igJPiiaTigJPCteKAk8Kl4oCT4oiP4oCUw4figJPCtSBiIiA8PCBlbmRsOwovLwljaW4gPj4gYjsKLy8JY291dCA8PCAi4oCTw63igJPiiaTigJPCteKAk8Kl4oCT4oiP4oCUw4figJPCtSBlcHMiIDw8IGVuZGw7Ci8vCWNpbiA+PiBlcHM7Ci8vCXByaW50Zigi4oCTw7bigJPDpuKAlDYz4oCTwrXigJPOqeKAlMOlLCDigJPOqeKAk+KInuKAk8+A4oCTwqXigJPCteKAk86p4oCTzqnigJTDo+KAk8+AIOKAk8K64oCTwrXigJTDh+KAk8Om4oCTwqXigJPDpuKAk8K6IOKAk8Kl4oCT4oiP4oCUw5bigJPDpuKAlMOH4oCTw6bigJPCuuKAk+KIj+KAk+KIjyA9ICU3ZiIsIGRpeGl0KGEsIGIsIGVwcykpOwovLwljb3V0IDw8IGVuZGw7Ci8vCXByaW50Zigi4oCTw7bigJPDpuKAlDYz4oCTwrXigJPOqeKAlMOlLCDigJPOqeKAk+KInuKAk8+A4oCTwqXigJPCteKAk86p4oCTzqnigJTDo+KAk8+AIOKAk8K64oCTwrXigJTDh+KAk8Om4oCTwqXigJPDpuKAk8K6IOKAlMOW4oCTw6bigJQ2M+KAk8KlID0gJTdmIiwgSG9yZChhLCBiLCBlcHMpKTsKLy8JY291dCA8PCBlbmRsOwovLwlwcmludGYoIuKAk8O24oCTw6bigJQ2M+KAk8K14oCTzqnigJTDpSwg4oCTzqnigJPiiJ7igJPPgOKAk8Kl4oCTwrXigJPOqeKAk86p4oCUw6PigJPPgCDigJPCuuKAk8K14oCUw4figJPDpuKAk8Kl4oCTw6bigJPCuiDigJPDueKAlMOl4oCUw6nigJTDh+KAk8Om4oCTzqnigJPiiJ4gPSAlN2YiLCBOZXd0b24oYSwgYiwgZXBzKSk7Ci8vCWNvdXQgPDwgZW5kbDsKLy8JY291dCA8PCAi4oCTw63igJPiiaTigJPCteKAk8Kl4oCT4oiP4oCUw4figJPCtSB4MCAiIDw8IGVuZGw7Ci8vCWNpbiA+PiB4OwovLwljb3V0IDw8IGVuZGw7CglwcmludGYoIuKAk8O24oCTw6bigJQ2M+KAk8K14oCTzqnigJTDpSwg4oCTzqnigJPiiJ7igJPPgOKAk8Kl4oCTwrXigJPOqeKAk86p4oCUw6PigJPPgCDigJPCuuKAk8K14oCUw4figJPDpuKAk8Kl4oCTw6bigJPCuiDigJPDuOKAlDYz4oCTw6bigJTDheKAlMOH4oCUw6PigJTDliDigJPiiI/igJTDh+KAk8K14oCUNjPigJPiiJ7igJTDnOKAk+KIj+KAk8+AID0gJTdmXG4iLCBJdGVyKDIuNSwgMiwgMywgMC4wMDEpKTsKCXByaW50Zigi4oCTw7bigJPDpuKAlDYz4oCTwrXigJPOqeKAlMOlLCDigJPOqeKAk+KInuKAk8+A4oCTwqXigJPCteKAk86p4oCTzqnigJTDo+KAk8+AIOKAk8K64oCTwrXigJTDh+KAk8Om4oCTwqXigJPDpuKAk8K6IOKAk8O44oCUNjPigJPDpuKAlMOF4oCUw4figJTDo+KAlMOWIOKAk+KIj+KAlMOH4oCTwrXigJQ2M+KAk+KInuKAlMOc4oCT4oiP4oCTz4AgPSAlN2ZcbiIsIEl0ZXIoLTIuNSwgLTMsIC0yLCAwLjAwMSkpOwp9Cg==