/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
//Begin_1_perimetr();
//Begin_2_square();
//Begin_3_rectangleSqPer();
//Begin_4_CircleLngth();
//Begin_5_CoubeVolSquare();
//Begin_6_ParalellVolSquare();
//Begin_7_CircleLengthSqaure();
//Begin_8_AVG();
//Begin_9_AVG_Geom();
//Begin_10_SimpleOperations();
//Begin_11_SimpleOperations();
//Begin_12_Triangle();
//Begin_13_Circles();
//Begin_14_CircleRadSquare();
//Begin_15_CircleDiamLen();
//Begin_16_PointsDist();
//Begin_17_PointsDist();
//Begin_18_Points();
//Begin_19_RectanglePerimSquare();
//Begin_20_PointsDist();
//Begin_21_Triangle();
//Begin_22_Swap();
//Begin_23_Swap();
//Begin_24_Swap();
//Begin_25_Function();
//Begin_26_Function();
//Begin_27_DegreeOf();
//Begin_28_DegreeOf();
Begin_29_Radians();
}
//Begin29. Дано значение угла α в градусах (0 < α < 360). Определить значение
//этого же угла в радианах, учитывая, что 180° = π радианов. В качестве зна-
//чения π использовать 3.14.
public static void Begin_29_Radians()
{
int degree = 42;
double rad
= degree
* 2 * Math.
PI / 360; System.
out.
println("BEGIN_29"); System.
out.
println("Degree = " + degree
+ ", rad = " + rad
); }
//Begin28. Дано число A. Вычислить A15, используя две вспомогательные пере-
//менные и пять операций умножения. Для этого последовательно находить
//A2, A3, A5, A10, A15. Вывести все найденные степени числа A.
public static void Begin_28_DegreeOf()
{
int a = 2;
int tmp1 = a * a;
int tmp2 = tmp1 * a;
System.
out.
println("BEGIN_28"); System.
out.
println("A = " + a
); System.
out.
println("A2 = " + tmp1
); System.
out.
println("A3 = " + tmp2
); tmp1 *= tmp2;
System.
out.
println("A5 = " + tmp1
); tmp2 = tmp1 * tmp1;
System.
out.
println("A10 = " + tmp2
); tmp2 *= tmp1;
System.
out.
println("A15 = " + tmp2
); }
//Begin27°. Дано число A. Вычислить A8, используя вспомогательную перемен-
//ную и три операции умножения. Для этого последовательно находить A2,
//A4, A8. Вывести все найденные степени числа A.
public static void Begin_27_DegreeOf()
{
int a = 2;
int tmp = a * a;
System.
out.
println("BEGIN_27"); System.
out.
println("A = " + a
); System.
out.
println("A2 = " + tmp
); tmp *= tmp;
System.
out.
println("A4 = " + tmp
); tmp *= tmp;
System.
out.
println("A8 = " + tmp
); }
//Begin26. Найти значение функции y = 4·(x–3)6 – 7·(x–3)3 + 2 при данном значе-
//нии x.
public static void Begin_26_Function()
{
int x = 42;
double result
= 4 * Math.
pow(x
-3,
6) - 7 * Math.
pow(x
-3,
3) + 2; System.
out.
println("BEGIN_26"); System.
out.
println("Function result = " + result
); }
//Begin25. Найти значение функции y = 3·x6 – 6·x2 – 7 при данном значении x.
public static void Begin_25_Function()
{
int x = 42;
double result
= 3 * Math.
pow(x,
6) - 6 * Math.
pow(x,
2) - 7; System.
out.
println("BEGIN_25"); System.
out.
println("Function result = " + result
); }
//Begin24. Даны переменные A, B, C. Изменить их значения, переместив содер-
//жимое A в C, C — в B, B — в A, и вывести новые значения переменных A, B, C.
public static void Begin_24_Swap()
{
int a = 10;
int b = 20;
int c = 30;
System.
out.
println("BEGIN_24"); System.
out.
println("A = " + a
+ ", B = " + b
+ ", C = " + c
); a = a ^ c ^ (c = a);
a = a ^ b ^ (b = a);
System.
out.
println("BECOME:"); System.
out.
println("A = " + a
+ ", B = " + b
+ ", C = " + c
); }
//Begin23. Даны переменные A, B, C. Изменить их значения, переместив содер-
//жимое A в B, B — в C, C — в A, и вывести новые значения переменных A,
//B, C.
public static void Begin_23_Swap()
{
int a = 7;
int b = 5;
int c = 3;
System.
out.
println("BEGIN_23"); System.
out.
println("A = " + a
+ ", B = " + b
+ ", C = " + c
); a = a ^ c ^ (c = a);
b = b ^ c ^ (c = b);
System.
out.
println("BECOME:"); System.
out.
println("A = " + a
+ ", B = " + b
+ ", C = " + c
); }
//Begin22. Поменять местами содержимое переменных A и B и вывести новые
//значения A и B.
public static void Begin_22_Swap()
{
int a = 3;
int b = 6;
a = a ^ b ^ (b=a);
System.
out.
println("BEGIN_22"); System.
out.
println("A = " + a
+ ", B = " + b
); }
//Begin21. Даны координаты трех вершин треугольника: (x1, y1), (x2, y2), (x3, y3).
//Найти его периметр и площадь, используя формулу для расстояния между
//двумя точками на плоскости (см. задание Begin20). Для нахождения пло-
//щади треугольника со сторонами a, b, c использовать формулу Герона:
//S = p ⋅ ( p − a) ⋅ ( p − b) ⋅ ( p − c),
public static void Begin_21_Triangle()
{
int Ax = 1;
int Ay = 2;
int Bx = 3;
int By = 6;
int Cx = 7;
int Cy = 8;
double side1 = SideLen(Ax, Ay, Bx, By);
double side2 = SideLen(Ax, Ay, Cx, Cy);
double side3 = SideLen(Bx, By, Cx, Cy);
double perim = (side1 + side2 + side3) /2;
double square
= Math.
sqrt(perim
* (perim
-side1
) * (perim
-side2
) * (perim
-side3
)); System.
out.
println("BEGIN_21"); System.
out.
println("Triangle: perimetr=" + perim
+ ", square=" + square
); }
public static double SideLen(int x1, int y1, int x2, int y2)
{
}
//Begin20. Найти расстояние между двумя точками с заданными координатами
//(x1, y1) и (x2, y2) на плоскости. Расстояние вычисляется по формуле
public static void Begin_20_PointsDist()
{
int x1 = 5;
int y1 = 2;
int x2 = 9;
int y2 = 5;
double dist
= Math.
sqrt(Math.
pow(x2
-x1,
2) + Math.
pow(y2
-y1,
2)); System.
out.
println("BEGIN_20"); System.
out.
println("Distance = " + dist
); }
//Begin19. Даны координаты двух противоположных вершин прямоугольника:
//(x1, y1), (x2, y2). Стороны прямоугольника параллельны осям координат.
//Найти периметр и площадь данного прямоугольника.
public static void Begin_19_RectanglePerimSquare()
{
int x1 = 1;
int y1 = 5;
int x2 = 7;
int y2 = 1;
int side1
= Math.
abs(x2
-x1
); int side2
= Math.
abs(y2
-y1
); int perim = 2 * (side1 +side2);
int square = side1*side2;
System.
out.
println("BEGIN_19"); System.
out.
println("Perimetr = " + perim
+ ", Square = " + square
); }
//Begin18. Даны три точки A, B, C на числовой оси. Точка C расположена между
//точками A и B. Найти произведение длин отрезков AC и BC.
public static void Begin_18_Points()
{
int a = 5;
int b = 15;
int c = 9;
int mult = AC * BC;
System.
out.
println("BEGIN_18"); System.
out.
println("Point A=" + a
+ ", point B=" + b
+ ", point C=" + c
+ ", AC=" + AC
+ ", BC=" + BC
+ ", AC * BC=" + mult
); }
//Begin17. Даны три точки A, B, C на числовой оси. Найти длины отрезков AC
//и BC и их сумму.
public static void Begin_17_PointsDist()
{
int a = 2;
int b = 4;
int c = 8;
int AC
= Math.
abs(c
- a
); int BC
= Math.
abs(c
- b
); System.
out.
println("BEGIN_17"); System.
out.
println("Point A=" + a
+ ", point B=" + b
+ ", point C=" + c
+ ", AC=" + AC
+ ", BC=" + BC
); }
//Begin16. Найти расстояние между двумя точками с заданными координатами
//x1 и x2 на числовой оси: |x2 – x1|.
public static void Begin_16_PointsDist()
{
int x1 = 34;
int x2 = 42;
int distance
= Math.
abs(x2
- x1
); System.
out.
println("BEGIN_16"); System.
out.
println("Point x1=" + x1
+ ", point x2=" + x2
+ ", distance=" + distance
); }
//Begin15. Дана площадь S круга. Найти его диаметр D и длину L окружности,
//ограничивающей этот круг, учитывая, что L = π·D, S = π·D2/4. В качестве
//значения π использовать 3.14.
public static void Begin_15_CircleDiamLen()
{
double square = 177.33;
double diam
= Math.
sqrt(4 * square
/ Math.
PI); double len
= Math.
PI * diam
; System.
out.
println("BEGIN_15"); System.
out.
println("Diametr = " + diam
+ ", Length = " + len
); }
//Begin14. Дана длина L окружности. Найти ее радиус R и площадь S круга, ог-
//раниченного этой окружностью, учитывая, что L = 2·π·R, S = π·R2. В ка-
//честве значения π использовать 3.14.
public static void Begin_14_CircleRadSquare()
{
double len = 55.55;
double rad
= len
/ (2 * Math.
PI); double square
= Math.
PI * Math.
pow(rad,
2); System.
out.
println("BEGIN_14"); System.
out.
println("Radius = " + rad
+ ", Square = " + square
); }
//Begin13. Даны два круга с общим центром и радиусами R1 и R2 (R1 > R2). Найти
//площади этих кругов S1 и S2, а также площадь S3 кольца, внешний радиус
//которого равен R1, а внутренний радиус равен R2:
//S1 = π·(R1)2, S2 = π·(R2)2, S3 = S1 – S2.
public static void Begin_13_Circles()
{
double rad1 = 33.9;
double rad2 = 15.8;
double square1
= Math.
PI * Math.
pow(rad1,
2); double square2
= Math.
PI * Math.
pow(rad2,
2); double ring = square1 - square2;
System.
out.
println("BEGIN_13"); System.
out.
println("Square1 = " + square1
+ ", Square2 = " + square2
+ ", Ring square = " + ring
); }
//Begin12. Даны катеты прямоугольного треугольника a и b. Найти его гипоте-
//нузу c и периметр P:
//c = a2 + b2 , P = a + b + c.
public static void Begin_12_Triangle()
{
double сatheteA = 44.78;
double catheteB = 34.77;
double hipo
= Math.
sqrt(Math.
pow(сatheteA,
2) + Math.
pow(catheteB,
2)); double perim = сatheteA + catheteB + hipo;
System.
out.
println("BEGIN_12"); System.
out.
println("Hipotenuse = " + hipo
+ ", Perimetr = " + perim
); }
//Begin_11
//Даны два ненулевых числа. Найти сумму, разность, произведение и
//частное их модулей.
public static void Begin_11_SimpleOperations()
{
double a = 3.12;
double b = -8.34;
double sum = a + b;
double div = a - b;
double mult = a * b;
double quotient = a / b;
System.
out.
println("BEGIN_11"); System.
out.
println("A = " + a
+ ", b = " + b
+ ", sum=" + sum
+ ", div=" + div
+ ", mult=" + mult
+ ", Quotient=" + quotient
); }
//Begin_10
//Даны два ненулевых числа. Найти сумму, разность, произведение и
//частное их квадратов.
public static void Begin_10_SimpleOperations()
{
double a = 14.23;
double b = 87.4;
double sum = a + b;
double div = a - b;
double mult = a * b;
double quotient
= Math.
pow(a,
2) / Math.
pow(b,
2); System.
out.
println("BEGIN_10"); System.
out.
println("A = " + a
+ ", b = " + b
+ ", sum=" + sum
+ ", div=" + div
+ ", mult=" + mult
+ ", Quotient=" + quotient
); }
//Begin_9
//Даны два неотрицательных числа a и b. Найти их среднее геометриче-
//ское, то есть квадратный корень из их произведения: a ⋅b .
public static void Begin_9_AVG_Geom()
{
double a = 7.;
double b = 7.123;
double avgGeom
= Math.
sqrt(a
* b
); System.
out.
println("BEGIN_9"); System.
out.
println("A = " + a
+ ", b = " + b
+ ", Average Geom = " + avgGeom
); }
//Begin_8
//Даны два числа a и b. Найти их среднее арифметическое: (a + b)/2.
public static void Begin_8_AVG()
{
double a = 4.12;
double b = 98;
double average = (a + b) /2;
System.
out.
println("BEGIN_8"); System.
out.
println("A = " + a
+ ", b = " + b
+ ", Average = " + average
); }
//Begin_7
//Найти длину окружности L и площадь круга S заданного радиуса R:
//L = 2·π·R, S = π·R2.
public static void Begin_7_CircleLengthSqaure()
{
double radius = 7.42;
double length
= 2 * radius
* Math.
PI; double square
= Math.
PI * Math.
pow(radius,
2); System.
out.
println("BEGIN_7"); System.
out.
println("Circle: length=" + length
+ ", square=" + square
); }
//Begin_6
//Даны длины ребер a, b, c прямоугольного параллелепипеда. Найти его
//объем V = a·b·c и площадь поверхности S = 2·(a·b + b·c + a·c).
public static void Begin_6_ParalellVolSquare()
{
double sideA = 4.12;
double sideB = 3.17;
double sideC = 9.99;
double vol = sideA * sideB * sideC;
double square = 2 * (sideA * sideB + sideB * sideC + sideA * sideC);
System.
out.
println("BEGIN_6"); System.
out.
println("Parallelepiped: vol=" + vol
+ ", square=" + square
); }
//Begin_5
//Дана длина ребра куба a. Найти объем куба V = a3 и площадь его по-
//верхности S = 6·a2.
public static void Begin_5_CoubeVolSquare()
{
double coubeSide = 6.42;
double coubeVol
= Math.
pow(coubeSide,
3); double coubeSquare
= 6 * Math.
pow(coubeSide,
2); System.
out.
println("BEGIN_5"); System.
out.
println("Coube: side=" + coubeSide
+ ", vol=" + coubeVol
+ ", square=" + coubeSquare
); }
//Begin_4
//Дан диаметр окружности d. Найти ее длину L = π·d. В качестве значе-
//ния π использовать 3.14.
public static void Begin_4_CircleLngth()
{
double circleDiam = 5.123;
double circleLen
= circleDiam
* Math.
PI; System.
out.
println("BEGIN_4"); System.
out.
println("Circle: diam=" + circleDiam
+ ", length=" + circleLen
); }
//Begin_3
//Даны стороны прямоугольника a и b. Найти его площадь S = a·b и
//периметр P = 2·(a + b).
public static void Begin_3_rectangleSqPer()
{
double rectSideA = 7.12;
double rectSideB = 8.99;
double squarRect = rectSideA * rectSideB;
double perimRect = 2 * (rectSideA + rectSideB);
System.
out.
println("BEGIN_3"); System.
out.
println("Rectangle: square=" + squarRect
+ ", perimetr=" + perimRect
); }
//Begin_2
//Дана сторона квадрата a. Найти его площадь S = a2.
public static void Begin_2_square()
{
double squareSide = 4.12;
double area
= Math.
pow(squareSide,
2); System.
out.
println("BEGIN_2"); System.
out.
println("Square side: " + squareSide
+ ", square area: " + area
); }
//Begin_1
//Дана сторона квадрата a. Найти его периметр P = 4·a.
public static void Begin_1_perimetr()
{
double squarerSide = 3.14;
double perimetr = 4 * squarerSide;
System.
out.
println("BEGIN_1"); System.
out.
println("Square side: " + squarerSide
+ ", perimetr: " + perimetr
); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCS8vQmVnaW5fMV9wZXJpbWV0cigpOwoJCS8vQmVnaW5fMl9zcXVhcmUoKTsKCQkvL0JlZ2luXzNfcmVjdGFuZ2xlU3FQZXIoKTsKCQkvL0JlZ2luXzRfQ2lyY2xlTG5ndGgoKTsKCQkvL0JlZ2luXzVfQ291YmVWb2xTcXVhcmUoKTsKCQkvL0JlZ2luXzZfUGFyYWxlbGxWb2xTcXVhcmUoKTsKCQkvL0JlZ2luXzdfQ2lyY2xlTGVuZ3RoU3FhdXJlKCk7CgkJLy9CZWdpbl84X0FWRygpOwoJCS8vQmVnaW5fOV9BVkdfR2VvbSgpOwoJCS8vQmVnaW5fMTBfU2ltcGxlT3BlcmF0aW9ucygpOwoJCS8vQmVnaW5fMTFfU2ltcGxlT3BlcmF0aW9ucygpOwoJCS8vQmVnaW5fMTJfVHJpYW5nbGUoKTsKCQkvL0JlZ2luXzEzX0NpcmNsZXMoKTsKCQkvL0JlZ2luXzE0X0NpcmNsZVJhZFNxdWFyZSgpOwoJCS8vQmVnaW5fMTVfQ2lyY2xlRGlhbUxlbigpOwoJCS8vQmVnaW5fMTZfUG9pbnRzRGlzdCgpOwoJCS8vQmVnaW5fMTdfUG9pbnRzRGlzdCgpOwoJCS8vQmVnaW5fMThfUG9pbnRzKCk7CgkJLy9CZWdpbl8xOV9SZWN0YW5nbGVQZXJpbVNxdWFyZSgpOwoJCS8vQmVnaW5fMjBfUG9pbnRzRGlzdCgpOwoJCS8vQmVnaW5fMjFfVHJpYW5nbGUoKTsKCQkvL0JlZ2luXzIyX1N3YXAoKTsKCQkvL0JlZ2luXzIzX1N3YXAoKTsKCQkvL0JlZ2luXzI0X1N3YXAoKTsKCQkvL0JlZ2luXzI1X0Z1bmN0aW9uKCk7CgkJLy9CZWdpbl8yNl9GdW5jdGlvbigpOwoJCS8vQmVnaW5fMjdfRGVncmVlT2YoKTsKCQkvL0JlZ2luXzI4X0RlZ3JlZU9mKCk7CgkJQmVnaW5fMjlfUmFkaWFucygpOwoJfQoJCgkvL0JlZ2luMjkuINCU0LDQvdC+INC30L3QsNGH0LXQvdC40LUg0YPQs9C70LAgzrEg0LIg0LPRgNCw0LTRg9GB0LDRhSAoMCA8IM6xIDwgMzYwKS4g0J7Qv9GA0LXQtNC10LvQuNGC0Ywg0LfQvdCw0YfQtdC90LjQtQoJLy/RjdGC0L7Qs9C+INC20LUg0YPQs9C70LAg0LIg0YDQsNC00LjQsNC90LDRhSwg0YPRh9C40YLRi9Cy0LDRjywg0YfRgtC+IDE4MMKwID0gz4Ag0YDQsNC00LjQsNC90L7Qsi4g0JIg0LrQsNGH0LXRgdGC0LLQtSDQt9C90LAtCgkvL9GH0LXQvdC40Y8gz4Ag0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIDMuMTQuCglwdWJsaWMgc3RhdGljIHZvaWQgQmVnaW5fMjlfUmFkaWFucygpCgl7CgkJaW50IGRlZ3JlZSA9IDQyOwoJCWRvdWJsZSByYWQgPSBkZWdyZWUgKiAyICogTWF0aC5QSSAvIDM2MDsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJFR0lOXzI5Iik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJEZWdyZWUgPSAiICsgZGVncmVlICsgIiwgcmFkID0gIiArIHJhZCk7Cgl9CgkKCS8vQmVnaW4yOC4g0JTQsNC90L4g0YfQuNGB0LvQviBBLiDQktGL0YfQuNGB0LvQuNGC0YwgQTE1LCDQuNGB0L/QvtC70YzQt9GD0Y8g0LTQstC1INCy0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90YvQtSDQv9C10YDQtS0KCS8v0LzQtdC90L3Ri9C1INC4INC/0Y/RgtGMINC+0L/QtdGA0LDRhtC40Lkg0YPQvNC90L7QttC10L3QuNGPLiDQlNC70Y8g0Y3RgtC+0LPQviDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L4g0L3QsNGF0L7QtNC40YLRjAoJLy9BMiwgQTMsIEE1LCBBMTAsIEExNS4g0JLRi9Cy0LXRgdGC0Lgg0LLRgdC1INC90LDQudC00LXQvdC90YvQtSDRgdGC0LXQv9C10L3QuCDRh9C40YHQu9CwIEEuCglwdWJsaWMgc3RhdGljIHZvaWQgQmVnaW5fMjhfRGVncmVlT2YoKQoJewoJCWludCBhID0gMjsKCQlpbnQgdG1wMSA9IGEgKiBhOwoJCWludCB0bXAyID0gdG1wMSAqIGE7CgkJU3lzdGVtLm91dC5wcmludGxuKCJCRUdJTl8yOCIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQSA9ICIgKyBhKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkEyID0gIiArIHRtcDEpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQTMgPSAiICsgdG1wMik7CgkJdG1wMSAqPSB0bXAyOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQTUgPSAiICsgdG1wMSk7CgkJdG1wMiA9IHRtcDEgKiB0bXAxOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQTEwID0gIiArIHRtcDIpOwoJCXRtcDIgKj0gdG1wMTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkExNSA9ICIgKyB0bXAyKTsKCX0KCQoJLy9CZWdpbjI3wrAuINCU0LDQvdC+INGH0LjRgdC70L4gQS4g0JLRi9GH0LjRgdC70LjRgtGMIEE4LCDQuNGB0L/QvtC70YzQt9GD0Y8g0LLRgdC/0L7QvNC+0LPQsNGC0LXQu9GM0L3Rg9GOINC/0LXRgNC10LzQtdC9LQoJLy/QvdGD0Y4g0Lgg0YLRgNC4INC+0L/QtdGA0LDRhtC40Lgg0YPQvNC90L7QttC10L3QuNGPLiDQlNC70Y8g0Y3RgtC+0LPQviDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L4g0L3QsNGF0L7QtNC40YLRjCBBMiwKCS8vQTQsIEE4LiDQktGL0LLQtdGB0YLQuCDQstGB0LUg0L3QsNC50LTQtdC90L3Ri9C1INGB0YLQtdC/0LXQvdC4INGH0LjRgdC70LAgQS4KCXB1YmxpYyBzdGF0aWMgdm9pZCBCZWdpbl8yN19EZWdyZWVPZigpCgl7CgkJaW50IGEgPSAyOwoJCWludCB0bXAgPSBhICogYTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJFR0lOXzI3Iik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJBID0gIiArIGEpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQTIgPSAiICsgdG1wKTsKCQl0bXAgKj0gdG1wOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQTQgPSAiICsgdG1wKTsKCQl0bXAgKj0gdG1wOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQTggPSAiICsgdG1wKTsKCX0KCQoJLy9CZWdpbjI2LiDQndCw0LnRgtC4INC30L3QsNGH0LXQvdC40LUg0YTRg9C90LrRhtC40LggeSA9IDTCtyh44oCTMyk2IOKAkyA3wrcoeOKAkzMpMyArIDIg0L/RgNC4INC00LDQvdC90L7QvCDQt9C90LDRh9C1LQoJLy/QvdC40LggeC4KCXB1YmxpYyBzdGF0aWMgdm9pZCBCZWdpbl8yNl9GdW5jdGlvbigpCgl7CgkJaW50IHggPSA0MjsKCQlkb3VibGUgcmVzdWx0ID0gNCAqIE1hdGgucG93KHgtMyw2KSAtIDcgKiBNYXRoLnBvdyh4LTMsMykgKyAyOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQkVHSU5fMjYiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZ1bmN0aW9uIHJlc3VsdCA9ICIgKyByZXN1bHQpOwoJfQoJCgkvL0JlZ2luMjUuINCd0LDQudGC0Lgg0LfQvdCw0YfQtdC90LjQtSDRhNGD0L3QutGG0LjQuCB5ID0gM8K3eDYg4oCTIDbCt3gyIOKAkyA3INC/0YDQuCDQtNCw0L3QvdC+0Lwg0LfQvdCw0YfQtdC90LjQuCB4LgoJcHVibGljIHN0YXRpYyB2b2lkIEJlZ2luXzI1X0Z1bmN0aW9uKCkKCXsKCQlpbnQgeCA9IDQyOwoJCWRvdWJsZSByZXN1bHQgPSAzICogTWF0aC5wb3coeCw2KSAtIDYgKiBNYXRoLnBvdyh4LDIpIC0gNzsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJFR0lOXzI1Iik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJGdW5jdGlvbiByZXN1bHQgPSAiICsgcmVzdWx0KTsKCX0KCQoJLy9CZWdpbjI0LiDQlNCw0L3RiyDQv9C10YDQtdC80LXQvdC90YvQtSBBLCBCLCBDLiDQmNC30LzQtdC90LjRgtGMINC40YUg0LfQvdCw0YfQtdC90LjRjywg0L/QtdGA0LXQvNC10YHRgtC40LIg0YHQvtC00LXRgC0KCS8v0LbQuNC80L7QtSBBINCyIEMsIEMg4oCUINCyIEIsIEIg4oCUINCyIEEsINC4INCy0YvQstC10YHRgtC4INC90L7QstGL0LUg0LfQvdCw0YfQtdC90LjRjyDQv9C10YDQtdC80LXQvdC90YvRhSBBLCBCLCBDLgoJcHVibGljIHN0YXRpYyB2b2lkIEJlZ2luXzI0X1N3YXAoKQoJewoJCWludCBhID0gMTA7CgkJaW50IGIgPSAyMDsKCQlpbnQgYyA9IDMwOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQkVHSU5fMjQiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIldBUzoiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkEgPSAiICsgYSArICIsIEIgPSAiICsgYiArICIsIEMgPSAiICsgYyk7CgkJYSA9IGEgXiBjIF4gKGMgPSBhKTsKCQlhID0gYSBeIGIgXiAoYiA9IGEpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQkVDT01FOiIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQSA9ICIgKyBhICsgIiwgQiA9ICIgKyBiICsgIiwgQyA9ICIgKyBjKTsKCX0KCQoJLy9CZWdpbjIzLiDQlNCw0L3RiyDQv9C10YDQtdC80LXQvdC90YvQtSBBLCBCLCBDLiDQmNC30LzQtdC90LjRgtGMINC40YUg0LfQvdCw0YfQtdC90LjRjywg0L/QtdGA0LXQvNC10YHRgtC40LIg0YHQvtC00LXRgC0KCS8v0LbQuNC80L7QtSBBINCyIEIsIEIg4oCUINCyIEMsIEMg4oCUINCyIEEsINC4INCy0YvQstC10YHRgtC4INC90L7QstGL0LUg0LfQvdCw0YfQtdC90LjRjyDQv9C10YDQtdC80LXQvdC90YvRhSBBLAoJLy9CLCBDLgoJcHVibGljIHN0YXRpYyB2b2lkIEJlZ2luXzIzX1N3YXAoKQoJewoJCWludCBhID0gNzsKCQlpbnQgYiA9IDU7CgkJaW50IGMgPSAzOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQkVHSU5fMjMiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIldBUzoiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkEgPSAiICsgYSArICIsIEIgPSAiICsgYiArICIsIEMgPSAiICsgYyk7CgkJYSA9IGEgXiBjIF4gKGMgPSBhKTsKCQliID0gYiBeIGMgXiAoYyA9IGIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQkVDT01FOiIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQSA9ICIgKyBhICsgIiwgQiA9ICIgKyBiICsgIiwgQyA9ICIgKyBjKTsKCX0KCgkvL0JlZ2luMjIuINCf0L7QvNC10L3Rj9GC0Ywg0LzQtdGB0YLQsNC80Lgg0YHQvtC00LXRgNC20LjQvNC+0LUg0L/QtdGA0LXQvNC10L3QvdGL0YUgQSDQuCBCINC4INCy0YvQstC10YHRgtC4INC90L7QstGL0LUKCS8v0LfQvdCw0YfQtdC90LjRjyBBINC4IEIuCglwdWJsaWMgc3RhdGljIHZvaWQgQmVnaW5fMjJfU3dhcCgpCgl7CgkJaW50IGEgPSAzOwoJCWludCBiID0gNjsKCQlhID0gYSBeIGIgXiAoYj1hKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJFR0lOXzIyIik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJBID0gIiArIGEgKyAiLCBCID0gIiArIGIpOwoJfQoJCgkvL0JlZ2luMjEuINCU0LDQvdGLINC60L7QvtGA0LTQuNC90LDRgtGLINGC0YDQtdGFINCy0LXRgNGI0LjQvSDRgtGA0LXRg9Cz0L7Qu9GM0L3QuNC60LA6ICh4MSwgeTEpLCAoeDIsIHkyKSwgKHgzLCB5MykuCgkvL9Cd0LDQudGC0Lgg0LXQs9C+INC/0LXRgNC40LzQtdGC0YAg0Lgg0L/Qu9C+0YnQsNC00YwsINC40YHQv9C+0LvRjNC30YPRjyDRhNC+0YDQvNGD0LvRgyDQtNC70Y8g0YDQsNGB0YHRgtC+0Y/QvdC40Y8g0LzQtdC20LTRgwoJLy/QtNCy0YPQvNGPINGC0L7Rh9C60LDQvNC4INC90LAg0L/Qu9C+0YHQutC+0YHRgtC4ICjRgdC8LiDQt9Cw0LTQsNC90LjQtSBCZWdpbjIwKS4g0JTQu9GPINC90LDRhdC+0LbQtNC10L3QuNGPINC/0LvQvi0KCS8v0YnQsNC00Lgg0YLRgNC10YPQs9C+0LvRjNC90LjQutCwINGB0L4g0YHRgtC+0YDQvtC90LDQvNC4IGEsIGIsIGMg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGE0L7RgNC80YPQu9GDINCT0LXRgNC+0L3QsDoKCS8vUyA9IHAg4ouFICggcCDiiJIgYSkg4ouFICggcCDiiJIgYikg4ouFICggcCDiiJIgYyksCglwdWJsaWMgc3RhdGljIHZvaWQgQmVnaW5fMjFfVHJpYW5nbGUoKQoJewoJCWludCBBeCA9IDE7CgkJaW50IEF5ID0gMjsKCQlpbnQgQnggPSAzOwoJCWludCBCeSA9IDY7CgkJaW50IEN4ID0gNzsKCQlpbnQgQ3kgPSA4OwoJCWRvdWJsZSBzaWRlMSA9IFNpZGVMZW4oQXgsIEF5LCBCeCwgQnkpOwoJCWRvdWJsZSBzaWRlMiA9IFNpZGVMZW4oQXgsIEF5LCBDeCwgQ3kpOwoJCWRvdWJsZSBzaWRlMyA9IFNpZGVMZW4oQngsIEJ5LCBDeCwgQ3kpOwoJCWRvdWJsZSBwZXJpbSA9IChzaWRlMSArIHNpZGUyICsgc2lkZTMpIC8yOwoJCWRvdWJsZSBzcXVhcmUgPSBNYXRoLnNxcnQocGVyaW0gKiAocGVyaW0tc2lkZTEpICogKHBlcmltLXNpZGUyKSAqIChwZXJpbS1zaWRlMykpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQkVHSU5fMjEiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRyaWFuZ2xlOiBwZXJpbWV0cj0iICsgcGVyaW0gKyAiLCBzcXVhcmU9IiArIHNxdWFyZSk7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgZG91YmxlIFNpZGVMZW4oaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQoJewoJCXJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coeDIteDEsMikgKyBNYXRoLnBvdyh5Mi15MSwyKSk7Cgl9CgkKCS8vQmVnaW4yMC4g0J3QsNC50YLQuCDRgNCw0YHRgdGC0L7Rj9C90LjQtSDQvNC10LbQtNGDINC00LLRg9C80Y8g0YLQvtGH0LrQsNC80Lgg0YEg0LfQsNC00LDQvdC90YvQvNC4INC60L7QvtGA0LTQuNC90LDRgtCw0LzQuAoJLy8oeDEsIHkxKSDQuCAoeDIsIHkyKSDQvdCwINC/0LvQvtGB0LrQvtGB0YLQuC4g0KDQsNGB0YHRgtC+0Y/QvdC40LUg0LLRi9GH0LjRgdC70Y/QtdGC0YHRjyDQv9C+INGE0L7RgNC80YPQu9C1CglwdWJsaWMgc3RhdGljIHZvaWQgQmVnaW5fMjBfUG9pbnRzRGlzdCgpCgl7CgkJaW50IHgxID0gNTsKCQlpbnQgeTEgPSAyOwoJCWludCB4MiA9IDk7CgkJaW50IHkyID0gNTsKCQlkb3VibGUgZGlzdCA9IE1hdGguc3FydChNYXRoLnBvdyh4Mi14MSwyKSArIE1hdGgucG93KHkyLXkxLDIpKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJFR0lOXzIwIik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJEaXN0YW5jZSA9ICIgKyBkaXN0KTsKCX0KCgkvL0JlZ2luMTkuINCU0LDQvdGLINC60L7QvtGA0LTQuNC90LDRgtGLINC00LLRg9GFINC/0YDQvtGC0LjQstC+0L/QvtC70L7QttC90YvRhSDQstC10YDRiNC40L0g0L/RgNGP0LzQvtGD0LPQvtC70YzQvdC40LrQsDoKCS8vKHgxLCB5MSksICh4MiwgeTIpLiDQodGC0L7RgNC+0L3RiyDQv9GA0Y/QvNC+0YPQs9C+0LvRjNC90LjQutCwINC/0LDRgNCw0LvQu9C10LvRjNC90Ysg0L7RgdGP0Lwg0LrQvtC+0YDQtNC40L3QsNGCLgoJLy/QndCw0LnRgtC4INC/0LXRgNC40LzQtdGC0YAg0Lgg0L/Qu9C+0YnQsNC00Ywg0LTQsNC90L3QvtCz0L4g0L/RgNGP0LzQvtGD0LPQvtC70YzQvdC40LrQsC4KCXB1YmxpYyBzdGF0aWMgdm9pZCBCZWdpbl8xOV9SZWN0YW5nbGVQZXJpbVNxdWFyZSgpCgl7CgkJaW50IHgxID0gMTsKCQlpbnQgeTEgPSA1OwoJCWludCB4MiA9IDc7CgkJaW50IHkyID0gMTsKCQlpbnQgc2lkZTEgPSBNYXRoLmFicyh4Mi14MSk7CgkJaW50IHNpZGUyID0gTWF0aC5hYnMoeTIteTEpOwoJCWludCBwZXJpbSA9IDIgKiAoc2lkZTEgK3NpZGUyKTsKCQlpbnQgc3F1YXJlID0gc2lkZTEqc2lkZTI7CgkJU3lzdGVtLm91dC5wcmludGxuKCJCRUdJTl8xOSIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiUGVyaW1ldHIgPSAiICsgcGVyaW0gKyAiLCBTcXVhcmUgPSAiICsgc3F1YXJlKTsKCX0KCQoJLy9CZWdpbjE4LiDQlNCw0L3RiyDRgtGA0Lgg0YLQvtGH0LrQuCBBLCBCLCBDINC90LAg0YfQuNGB0LvQvtCy0L7QuSDQvtGB0LguINCi0L7Rh9C60LAgQyDRgNCw0YHQv9C+0LvQvtC20LXQvdCwINC80LXQttC00YMKCS8v0YLQvtGH0LrQsNC80LggQSDQuCBCLiDQndCw0LnRgtC4INC/0YDQvtC40LfQstC10LTQtdC90LjQtSDQtNC70LjQvSDQvtGC0YDQtdC30LrQvtCyIEFDINC4IEJDLgoJcHVibGljIHN0YXRpYyB2b2lkIEJlZ2luXzE4X1BvaW50cygpCgl7CgkJaW50IGEgPSA1OwoJCWludCBiID0gMTU7CgkJaW50IGMgPSA5OwoJCWludCBBQyA9IE1hdGguYWJzKGMtYSk7CgkJaW50IEJDID0gTWF0aC5hYnMoYy1iKTsKCQlpbnQgbXVsdCA9IEFDICogQkM7CgkJU3lzdGVtLm91dC5wcmludGxuKCJCRUdJTl8xOCIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiUG9pbnQgQT0iICsgYSArICIsIHBvaW50IEI9IiArIGIgKyAiLCBwb2ludCBDPSIgKyBjICsgIiwgQUM9IiArIEFDICsgIiwgQkM9IiArIEJDICsgIiwgQUMgKiBCQz0iICsgbXVsdCk7Cgl9CgkKCS8vQmVnaW4xNy4g0JTQsNC90Ysg0YLRgNC4INGC0L7Rh9C60LggQSwgQiwgQyDQvdCwINGH0LjRgdC70L7QstC+0Lkg0L7RgdC4LiDQndCw0LnRgtC4INC00LvQuNC90Ysg0L7RgtGA0LXQt9C60L7QsiBBQwoJLy/QuCBCQyDQuCDQuNGFINGB0YPQvNC80YMuCglwdWJsaWMgc3RhdGljIHZvaWQgQmVnaW5fMTdfUG9pbnRzRGlzdCgpCgl7CgkJaW50IGEgPSAyOwoJCWludCBiID0gNDsKCQlpbnQgYyA9IDg7CgkJaW50IEFDID0gTWF0aC5hYnMoYyAtIGEpOwoJCWludCBCQyA9IE1hdGguYWJzKGMgLSBiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJFR0lOXzE3Iik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJQb2ludCBBPSIgKyBhICsgIiwgcG9pbnQgQj0iICsgYiArICIsIHBvaW50IEM9IiArIGMgKyAiLCBBQz0iICsgQUMgKyAiLCBCQz0iICsgQkMpOwoJfQoJCgkvL0JlZ2luMTYuINCd0LDQudGC0Lgg0YDQsNGB0YHRgtC+0Y/QvdC40LUg0LzQtdC20LTRgyDQtNCy0YPQvNGPINGC0L7Rh9C60LDQvNC4INGBINC30LDQtNCw0L3QvdGL0LzQuCDQutC+0L7RgNC00LjQvdCw0YLQsNC80LgKCS8veDEg0LggeDIg0L3QsCDRh9C40YHQu9C+0LLQvtC5INC+0YHQuDogfHgyIOKAkyB4MXwuCglwdWJsaWMgc3RhdGljIHZvaWQgQmVnaW5fMTZfUG9pbnRzRGlzdCgpCgl7CgkJaW50IHgxID0gMzQ7CgkJaW50IHgyID0gNDI7CgkJaW50IGRpc3RhbmNlID0gTWF0aC5hYnMoeDIgLSB4MSk7CgkJU3lzdGVtLm91dC5wcmludGxuKCJCRUdJTl8xNiIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiUG9pbnQgeDE9IiArIHgxICsgIiwgcG9pbnQgeDI9IiArIHgyICsgIiwgZGlzdGFuY2U9IiArIGRpc3RhbmNlKTsKCX0KCQoJLy9CZWdpbjE1LiDQlNCw0L3QsCDQv9C70L7RidCw0LTRjCBTINC60YDRg9Cz0LAuINCd0LDQudGC0Lgg0LXQs9C+INC00LjQsNC80LXRgtGAIEQg0Lgg0LTQu9C40L3RgyBMINC+0LrRgNGD0LbQvdC+0YHRgtC4LAoJLy/QvtCz0YDQsNC90LjRh9C40LLQsNGO0YnQtdC5INGN0YLQvtGCINC60YDRg9CzLCDRg9GH0LjRgtGL0LLQsNGPLCDRh9GC0L4gTCA9IM+AwrdELCBTID0gz4DCt0QyLzQuINCSINC60LDRh9C10YHRgtCy0LUKCS8v0LfQvdCw0YfQtdC90LjRjyDPgCDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YwgMy4xNC4KCXB1YmxpYyBzdGF0aWMgdm9pZCBCZWdpbl8xNV9DaXJjbGVEaWFtTGVuKCkKCXsKCQlkb3VibGUgc3F1YXJlID0gMTc3LjMzOwoJCWRvdWJsZSBkaWFtID0gTWF0aC5zcXJ0KDQgKiBzcXVhcmUgLyBNYXRoLlBJKTsKCQlkb3VibGUgbGVuID0gTWF0aC5QSSAqIGRpYW07CgkJU3lzdGVtLm91dC5wcmludGxuKCJCRUdJTl8xNSIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiRGlhbWV0ciA9ICIgKyBkaWFtICsgIiwgTGVuZ3RoID0gIiArIGxlbik7Cgl9CgkKCS8vQmVnaW4xNC4g0JTQsNC90LAg0LTQu9C40L3QsCBMINC+0LrRgNGD0LbQvdC+0YHRgtC4LiDQndCw0LnRgtC4INC10LUg0YDQsNC00LjRg9GBIFIg0Lgg0L/Qu9C+0YnQsNC00YwgUyDQutGA0YPQs9CwLCDQvtCzLQoJLy/RgNCw0L3QuNGH0LXQvdC90L7Qs9C+INGN0YLQvtC5INC+0LrRgNGD0LbQvdC+0YHRgtGM0Y4sINGD0YfQuNGC0YvQstCw0Y8sINGH0YLQviBMID0gMsK3z4DCt1IsIFMgPSDPgMK3UjIuINCSINC60LAtCgkvL9GH0LXRgdGC0LLQtSDQt9C90LDRh9C10L3QuNGPIM+AINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCAzLjE0LgoJcHVibGljIHN0YXRpYyB2b2lkIEJlZ2luXzE0X0NpcmNsZVJhZFNxdWFyZSgpCgl7CgkJZG91YmxlIGxlbiA9IDU1LjU1OwoJCWRvdWJsZSByYWQgPSBsZW4gLyAoMiAqIE1hdGguUEkpOwoJCWRvdWJsZSBzcXVhcmUgPSBNYXRoLlBJICogTWF0aC5wb3cocmFkLCAyKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJFR0lOXzE0Iik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJSYWRpdXMgPSAiICsgcmFkICsgIiwgU3F1YXJlID0gIiArIHNxdWFyZSk7Cgl9CgoJLy9CZWdpbjEzLiDQlNCw0L3RiyDQtNCy0LAg0LrRgNGD0LPQsCDRgSDQvtCx0YnQuNC8INGG0LXQvdGC0YDQvtC8INC4INGA0LDQtNC40YPRgdCw0LzQuCBSMSDQuCBSMiAoUjEgPiBSMikuINCd0LDQudGC0LgKCS8v0L/Qu9C+0YnQsNC00Lgg0Y3RgtC40YUg0LrRgNGD0LPQvtCyIFMxINC4IFMyLCDQsCDRgtCw0LrQttC1INC/0LvQvtGJ0LDQtNGMIFMzINC60L7Qu9GM0YbQsCwg0LLQvdC10YjQvdC40Lkg0YDQsNC00LjRg9GBCgkvL9C60L7RgtC+0YDQvtCz0L4g0YDQsNCy0LXQvSBSMSwg0LAg0LLQvdGD0YLRgNC10L3QvdC40Lkg0YDQsNC00LjRg9GBINGA0LDQstC10L0gUjI6CgkvL1MxID0gz4DCtyhSMSkyLCBTMiA9IM+AwrcoUjIpMiwgUzMgPSBTMSDigJMgUzIuCglwdWJsaWMgc3RhdGljIHZvaWQgQmVnaW5fMTNfQ2lyY2xlcygpCgl7CgkJZG91YmxlIHJhZDEgPSAzMy45OwoJCWRvdWJsZSByYWQyID0gMTUuODsKCQlkb3VibGUgc3F1YXJlMSA9IE1hdGguUEkgKiBNYXRoLnBvdyhyYWQxLDIpOwoJCWRvdWJsZSBzcXVhcmUyID0gTWF0aC5QSSAqIE1hdGgucG93KHJhZDIsMik7CgkJZG91YmxlIHJpbmcgPSBzcXVhcmUxIC0gc3F1YXJlMjsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJFR0lOXzEzIik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJTcXVhcmUxID0gIiArIHNxdWFyZTEgKyAiLCBTcXVhcmUyID0gIiArIHNxdWFyZTIgKyAiLCBSaW5nIHNxdWFyZSA9ICIgKyByaW5nKTsKCX0KCgkvL0JlZ2luMTIuINCU0LDQvdGLINC60LDRgtC10YLRiyDQv9GA0Y/QvNC+0YPQs9C+0LvRjNC90L7Qs9C+INGC0YDQtdGD0LPQvtC70YzQvdC40LrQsCBhINC4IGIuINCd0LDQudGC0Lgg0LXQs9C+INCz0LjQv9C+0YLQtS0KCS8v0L3Rg9C30YMgYyDQuCDQv9C10YDQuNC80LXRgtGAIFA6CgkvL2MgPSBhMiArIGIyICwgUCA9IGEgKyBiICsgYy4KCXB1YmxpYyBzdGF0aWMgdm9pZCBCZWdpbl8xMl9UcmlhbmdsZSgpCgl7CgkJZG91YmxlINGBYXRoZXRlQSA9IDQ0Ljc4OwoJCWRvdWJsZSBjYXRoZXRlQiA9IDM0Ljc3OwoJCWRvdWJsZSBoaXBvID0gTWF0aC5zcXJ0KE1hdGgucG93KNGBYXRoZXRlQSwyKSArIE1hdGgucG93KGNhdGhldGVCLDIpKTsKCQlkb3VibGUgcGVyaW0gPSDRgWF0aGV0ZUEgKyBjYXRoZXRlQiArIGhpcG87CgkJU3lzdGVtLm91dC5wcmludGxuKCJCRUdJTl8xMiIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiSGlwb3RlbnVzZSA9ICIgKyBoaXBvICsgIiwgUGVyaW1ldHIgPSAiICsgcGVyaW0pOwoJfQoKCS8vQmVnaW5fMTEKCS8v0JTQsNC90Ysg0LTQstCwINC90LXQvdGD0LvQtdCy0YvRhSDRh9C40YHQu9CwLiDQndCw0LnRgtC4INGB0YPQvNC80YMsINGA0LDQt9C90L7RgdGC0YwsINC/0YDQvtC40LfQstC10LTQtdC90LjQtSDQuAoJLy/Rh9Cw0YHRgtC90L7QtSDQuNGFINC80L7QtNGD0LvQtdC5LgoJcHVibGljIHN0YXRpYyB2b2lkIEJlZ2luXzExX1NpbXBsZU9wZXJhdGlvbnMoKQoJewoJCWRvdWJsZSBhID0gMy4xMjsKCQlkb3VibGUgYiA9IC04LjM0OwoJCWRvdWJsZSBzdW0gPSBhICsgYjsKCQlkb3VibGUgZGl2ID0gYSAtIGI7CgkJZG91YmxlIG11bHQgPSBhICogYjsKCQlkb3VibGUgcXVvdGllbnQgPSBhIC8gYjsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJFR0lOXzExIik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJBID0gIiArIGEgKyAiLCBiID0gIiArIGIgKyAiLCBzdW09IiArIHN1bSArICIsIGRpdj0iICsgZGl2ICsgIiwgbXVsdD0iICsgbXVsdCArICIsIFF1b3RpZW50PSIgKyBxdW90aWVudCk7Cgl9CgoJLy9CZWdpbl8xMAoJLy/QlNCw0L3RiyDQtNCy0LAg0L3QtdC90YPQu9C10LLRi9GFINGH0LjRgdC70LAuINCd0LDQudGC0Lgg0YHRg9C80LzRgywg0YDQsNC30L3QvtGB0YLRjCwg0L/RgNC+0LjQt9Cy0LXQtNC10L3QuNC1INC4CgkvL9GH0LDRgdGC0L3QvtC1INC40YUg0LrQstCw0LTRgNCw0YLQvtCyLgoJcHVibGljIHN0YXRpYyB2b2lkIEJlZ2luXzEwX1NpbXBsZU9wZXJhdGlvbnMoKQoJewoJCWRvdWJsZSBhID0gMTQuMjM7CgkJZG91YmxlIGIgPSA4Ny40OwoJCWRvdWJsZSBzdW0gPSBhICsgYjsKCQlkb3VibGUgZGl2ID0gYSAtIGI7CgkJZG91YmxlIG11bHQgPSBhICogYjsKCQlkb3VibGUgcXVvdGllbnQgPSBNYXRoLnBvdyhhLDIpIC8gTWF0aC5wb3coYiwyKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJFR0lOXzEwIik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJBID0gIiArIGEgKyAiLCBiID0gIiArIGIgKyAiLCBzdW09IiArIHN1bSArICIsIGRpdj0iICsgZGl2ICsgIiwgbXVsdD0iICsgbXVsdCArICIsIFF1b3RpZW50PSIgKyBxdW90aWVudCk7Cgl9CgkKCS8vQmVnaW5fOQoJLy/QlNCw0L3RiyDQtNCy0LAg0L3QtdC+0YLRgNC40YbQsNGC0LXQu9GM0L3Ri9GFINGH0LjRgdC70LAgYSDQuCBiLiDQndCw0LnRgtC4INC40YUg0YHRgNC10LTQvdC10LUg0LPQtdC+0LzQtdGC0YDQuNGH0LUtCgkvL9GB0LrQvtC1LCDRgtC+INC10YHRgtGMINC60LLQsNC00YDQsNGC0L3Ri9C5INC60L7RgNC10L3RjCDQuNC3INC40YUg0L/RgNC+0LjQt9Cy0LXQtNC10L3QuNGPOiBhIOKLhWIgLgoJcHVibGljIHN0YXRpYyB2b2lkIEJlZ2luXzlfQVZHX0dlb20oKQoJewoJCWRvdWJsZSBhID0gNy47CgkJZG91YmxlIGIgPSA3LjEyMzsKCQlkb3VibGUgYXZnR2VvbSA9IE1hdGguc3FydChhICogYik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJCRUdJTl85Iik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJBID0gIiArIGEgKyAiLCBiID0gIiArIGIgKyAiLCBBdmVyYWdlIEdlb20gPSAiICsgYXZnR2VvbSk7Cgl9CgoJLy9CZWdpbl84CgkvL9CU0LDQvdGLINC00LLQsCDRh9C40YHQu9CwIGEg0LggYi4g0J3QsNC50YLQuCDQuNGFINGB0YDQtdC00L3QtdC1INCw0YDQuNGE0LzQtdGC0LjRh9C10YHQutC+0LU6IChhICsgYikvMi4KCXB1YmxpYyBzdGF0aWMgdm9pZCBCZWdpbl84X0FWRygpCgl7CgkJZG91YmxlIGEgPSA0LjEyOwoJCWRvdWJsZSBiID0gOTg7CgkJZG91YmxlIGF2ZXJhZ2UgPSAoYSArIGIpIC8yOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQkVHSU5fOCIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQSA9ICIgKyBhICsgIiwgYiA9ICIgKyBiICsgIiwgQXZlcmFnZSA9ICIgKyBhdmVyYWdlKTsKCX0KCQoJLy9CZWdpbl83CgkvL9Cd0LDQudGC0Lgg0LTQu9C40L3RgyDQvtC60YDRg9C20L3QvtGB0YLQuCBMINC4INC/0LvQvtGJ0LDQtNGMINC60YDRg9Cz0LAgUyDQt9Cw0LTQsNC90L3QvtCz0L4g0YDQsNC00LjRg9GB0LAgUjoKCS8vTCA9IDLCt8+AwrdSLCBTID0gz4DCt1IyLgoJcHVibGljIHN0YXRpYyB2b2lkIEJlZ2luXzdfQ2lyY2xlTGVuZ3RoU3FhdXJlKCkKCXsKCQlkb3VibGUgcmFkaXVzID0gNy40MjsKCQlkb3VibGUgbGVuZ3RoID0gMiAqIHJhZGl1cyAqIE1hdGguUEk7CgkJZG91YmxlIHNxdWFyZSA9IE1hdGguUEkgKiBNYXRoLnBvdyhyYWRpdXMsIDIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQkVHSU5fNyIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiQ2lyY2xlOiBsZW5ndGg9IiArIGxlbmd0aCArICIsIHNxdWFyZT0iICsgc3F1YXJlKTsKCX0KCQoJLy9CZWdpbl82CgkvL9CU0LDQvdGLINC00LvQuNC90Ysg0YDQtdCx0LXRgCBhLCBiLCBjINC/0YDRj9C80L7Rg9Cz0L7Qu9GM0L3QvtCz0L4g0L/QsNGA0LDQu9C70LXQu9C10L/QuNC/0LXQtNCwLiDQndCw0LnRgtC4INC10LPQvgoJLy/QvtCx0YrQtdC8IFYgPSBhwrdiwrdjINC4INC/0LvQvtGJ0LDQtNGMINC/0L7QstC10YDRhdC90L7RgdGC0LggUyA9IDLCtyhhwrdiICsgYsK3YyArIGHCt2MpLgoJcHVibGljIHN0YXRpYyB2b2lkIEJlZ2luXzZfUGFyYWxlbGxWb2xTcXVhcmUoKQoJewoJCWRvdWJsZSBzaWRlQSA9IDQuMTI7CgkJZG91YmxlIHNpZGVCID0gMy4xNzsKCQlkb3VibGUgc2lkZUMgPSA5Ljk5OwoJCWRvdWJsZSB2b2wgPSBzaWRlQSAqIHNpZGVCICogc2lkZUM7CgkJZG91YmxlIHNxdWFyZSA9IDIgKiAoc2lkZUEgKiBzaWRlQiArIHNpZGVCICogc2lkZUMgKyBzaWRlQSAqIHNpZGVDKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJFR0lOXzYiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIlBhcmFsbGVsZXBpcGVkOiB2b2w9IiArIHZvbCArICIsIHNxdWFyZT0iICsgc3F1YXJlKTsKCX0KCgkvL0JlZ2luXzUKCS8v0JTQsNC90LAg0LTQu9C40L3QsCDRgNC10LHRgNCwINC60YPQsdCwIGEuINCd0LDQudGC0Lgg0L7QsdGK0LXQvCDQutGD0LHQsCBWID0gYTMg0Lgg0L/Qu9C+0YnQsNC00Ywg0LXQs9C+INC/0L4tCgkvL9Cy0LXRgNGF0L3QvtGB0YLQuCBTID0gNsK3YTIuCglwdWJsaWMgc3RhdGljIHZvaWQgQmVnaW5fNV9Db3ViZVZvbFNxdWFyZSgpCgl7CgkJZG91YmxlIGNvdWJlU2lkZSA9IDYuNDI7CgkJZG91YmxlIGNvdWJlVm9sID0gTWF0aC5wb3coY291YmVTaWRlLCAzKTsKCQlkb3VibGUgY291YmVTcXVhcmUgPSA2ICogTWF0aC5wb3coY291YmVTaWRlLCAyKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJFR0lOXzUiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWJlOiBzaWRlPSIgKyBjb3ViZVNpZGUgKyAiLCB2b2w9IiArIGNvdWJlVm9sICsgIiwgc3F1YXJlPSIgKyBjb3ViZVNxdWFyZSk7Cgl9CgkKCS8vQmVnaW5fNAoJLy/QlNCw0L0g0LTQuNCw0LzQtdGC0YAg0L7QutGA0YPQttC90L7RgdGC0LggZC4g0J3QsNC50YLQuCDQtdC1INC00LvQuNC90YMgTCA9IM+AwrdkLiDQkiDQutCw0YfQtdGB0YLQstC1INC30L3QsNGH0LUtCgkvL9C90LjRjyDPgCDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YwgMy4xNC4KCXB1YmxpYyBzdGF0aWMgdm9pZCBCZWdpbl80X0NpcmNsZUxuZ3RoKCkKCXsKCQlkb3VibGUgY2lyY2xlRGlhbSA9IDUuMTIzOwoJCWRvdWJsZSBjaXJjbGVMZW4gPSBjaXJjbGVEaWFtICogTWF0aC5QSTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJFR0lOXzQiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNpcmNsZTogZGlhbT0iICsgY2lyY2xlRGlhbSArICIsIGxlbmd0aD0iICsgY2lyY2xlTGVuKTsKCX0KCQoJLy9CZWdpbl8zCgkvL9CU0LDQvdGLINGB0YLQvtGA0L7QvdGLINC/0YDRj9C80L7Rg9Cz0L7Qu9GM0L3QuNC60LAgYSDQuCBiLiDQndCw0LnRgtC4INC10LPQviDQv9C70L7RidCw0LTRjCBTID0gYcK3YiDQuAoJLy/Qv9C10YDQuNC80LXRgtGAIFAgPSAywrcoYSArIGIpLgoJcHVibGljIHN0YXRpYyB2b2lkIEJlZ2luXzNfcmVjdGFuZ2xlU3FQZXIoKQoJewoJCWRvdWJsZSByZWN0U2lkZUEgPSA3LjEyOwoJCWRvdWJsZSByZWN0U2lkZUIgPSA4Ljk5OwoJCWRvdWJsZSBzcXVhclJlY3QgPSByZWN0U2lkZUEgKiByZWN0U2lkZUI7CgkJZG91YmxlIHBlcmltUmVjdCA9IDIgKiAocmVjdFNpZGVBICsgcmVjdFNpZGVCKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJFR0lOXzMiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJlY3RhbmdsZTogc3F1YXJlPSIgKyBzcXVhclJlY3QgKyAiLCBwZXJpbWV0cj0iICsgcGVyaW1SZWN0KTsKCX0KCQoJLy9CZWdpbl8yCgkvL9CU0LDQvdCwINGB0YLQvtGA0L7QvdCwINC60LLQsNC00YDQsNGC0LAgYS4g0J3QsNC50YLQuCDQtdCz0L4g0L/Qu9C+0YnQsNC00YwgUyA9IGEyLgoJcHVibGljIHN0YXRpYyB2b2lkIEJlZ2luXzJfc3F1YXJlKCkKCXsKCQlkb3VibGUgc3F1YXJlU2lkZSA9IDQuMTI7CgkJZG91YmxlIGFyZWEgPSBNYXRoLnBvdyhzcXVhcmVTaWRlLCAyKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJFR0lOXzIiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNxdWFyZSBzaWRlOiAiICsgc3F1YXJlU2lkZSArICIsIHNxdWFyZSBhcmVhOiAiICsgYXJlYSk7Cgl9CgkKCS8vQmVnaW5fMQoJLy/QlNCw0L3QsCDRgdGC0L7RgNC+0L3QsCDQutCy0LDQtNGA0LDRgtCwIGEuINCd0LDQudGC0Lgg0LXQs9C+INC/0LXRgNC40LzQtdGC0YAgUCA9IDTCt2EuCglwdWJsaWMgc3RhdGljIHZvaWQgQmVnaW5fMV9wZXJpbWV0cigpCgl7CgkJZG91YmxlIHNxdWFyZXJTaWRlID0gMy4xNDsKCQlkb3VibGUgcGVyaW1ldHIgPSA0ICogc3F1YXJlclNpZGU7CgkJU3lzdGVtLm91dC5wcmludGxuKCJCRUdJTl8xIik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJTcXVhcmUgc2lkZTogIiArIHNxdWFyZXJTaWRlICsgIiwgcGVyaW1ldHI6ICIgKyBwZXJpbWV0cik7Cgl9Cn0=