시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
7 초 128 MB 89 5 5 13.889%

문제

Brainfuck 프로그램이 주어졌을 때, 이 프로그램이 끝나는지, 무한 루프에 빠지는지 알아내는 프로그램을 작성하시오.

Brainfuck 인터프리터는 정수를 담는 하나의 배열(unsigned 8-bit 정수)과, 그 배열의 칸 하나를 가리키는 포인터로 이루어져 있다.Brainfuck 프로그램은 다음과 같이 8개의 명령어로 이루어져 있다.

- 포인터가 가리키는 숫자를 1 감소시킨다. (modulo 28)
+ 포인터가 가리키는 숫자를 1 증가시킨다. (module 28)
< 포인터를 왼쪽으로 움직인다.(1 감소)
> 포인터를 오른쪽으로 움직인다.(1 증가)
[ 만약 포인터가 가리키는 숫자가 0과 같다면, [와 짝을 이루는 ]로 점프한다.
] 만약 포인터가 가리키는 숫자가 0이 아니라면, ]와 짝을 이루는 [로 점프한다.
. 포인터가 가리키는 숫자를 출력한다.
, 문자 하나를 읽고 포인터가 가리키는 곳에 저장한다. 입력의 마지막(EOF)인 경우에는 255를 저장한다.

인터프리터는 Brainfuck 프로그램의 첫 번째 명령부터 수행하고, 더이상 수행할 명령이 없다면, 프로그램을 종료한다. 각 명령을 수행하고 나면, 다음 명령을 수행한다. ([와 ]인 경우에는 점프를 할 수 있다.)

데이터 배열의 크기는 문제에서 주어지는 값을 사용해야 한다. 또, 데이터 배열의 값이 underflow나 overflow를 일으켰을 때는 일반적인 방법을 따르면 된다. 프로그램을 수행하기 전에, 데이터 배열의 값은 0으로 초기화되어 있고, 포인터가 가리키는 칸은 0번 칸이다.

포인터를 왼쪽이나 오른쪽으로 움직일 때, 데이터 배열의 범위를 넘어간다면, 반대쪽으로 넘어가게 된다. 즉, 포인터가 0을 가리킬 때, 1을 감소시킨다면, 배열의 크기 - 1번째를 가리키게 된다.

[와 ]는 루프를 의미하며, 중첩될 수 있다. 잘 짜여진 프로그램은 프로그램을 수행하면서, 각 명령을 수행하기 전까지 나온 [ 개수에서 ] 개수를 빼면 0보다 크거나 같은 값이 나오게 된다. 프로그램이 종료된 후에는 0이 나온다.

이 문제는 Brainfuck 프로그램이 무한 루프에 빠지는지 안 빠지는지를 검사하기만 하면 된다. 따라서, 출력은 무시한다.

입력

첫째 줄에 테스트 케이스의 개수 t (0 < t ≤ 20)가 주어진다. 각 테스트 케이스는 세 줄로 이루어져 있다. 첫째 줄에는 sm, sc, si가 주어진다. sm은 메모리(배열)의 크기이고, sc는 프로그램 코드의 크기, si는 입력의 크기이다. (0 < sm ≤ 100,000, 0 < sc, si < 4096)

둘째 줄에는 Brainfuck 프로그램이 주어진다. 프로그램은 sc개의 문자로 이루어져 있다.

셋째 줄에는 프로그램의 입력이 주어진다. (공백이 아닌면서 출력할 수 있는 문자만 주어진다)

출력

각 테스트 케이스에 대해서, 프로그램이 종료된다면 "Terminates"를, 무한 루프에 빠지게 된다면 "Loops"를 출력한다. 무한 루프에 빠졌을 때는, 프로그램의 어느 부분이 무한 루프인지를 출력한다. ([와 ]의 위치) 프로그램이 명령어를 50,000,000번 이상 수행한 경우, 프로그램은 항상 종료되었거나 무한 루프에 빠져있다.

예제 입력 1

4
10 4 3
+-.,
qwe
1000 5 1
+[+-]
a
100 74 4
+++++[->++<]>[-<+++++++>]<[->+>+>+>+<<<<]>+++>--->++++++++++>---<<<.>.>.>.
xxyz
9999 52 14
+++++[>+++++++++<-],+[-[>--.++>+<<-]>+.->[<.>-]<<,+]
this_is_a_test

예제 출력 1

Terminates
Loops 1 4
Terminates
Terminates
W3sicHJvYmxlbV9pZCI6IjM5NTQiLCJwcm9ibGVtX2xhbmciOiIwIiwidGl0bGUiOiJCcmFpbmZ1Y2sgXHVjNzc4XHVkMTMwXHVkNTA0XHViOWFjXHVkMTMwIiwiZGVzY3JpcHRpb24iOiI8cD5CcmFpbmZ1Y2sgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzc0IFx1YzhmY1x1YzViNFx1Yzg0Y1x1Yzc0NCBcdWI1NGMsIFx1Yzc3NCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NzQgXHViMDVkXHViMDk4XHViMjk0XHVjOWMwLCBcdWJiMzRcdWQ1NWMgXHViOGU4XHVkNTA0XHVjNWQwIFx1YmU2MFx1YzljMFx1YjI5NFx1YzljMCBcdWM1NGNcdWM1NDRcdWIwYjRcdWIyOTQgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzQ0IFx1Yzc5MVx1YzEzMVx1ZDU1OFx1YzJkY1x1YzYyNC48XC9wPlxyXG5cclxuPHA+QnJhaW5mdWNrIFx1Yzc3OFx1ZDEzMFx1ZDUwNFx1YjlhY1x1ZDEzMFx1YjI5NCBcdWM4MTVcdWMyMThcdWI5N2MgXHViMmY0XHViMjk0IFx1ZDU1OFx1YjA5OFx1Yzc1OCBcdWJjMzBcdWM1ZjQodW5zaWduZWQgOC1iaXQgXHVjODE1XHVjMjE4KVx1YWNmYywgXHVhZGY4IFx1YmMzMFx1YzVmNFx1Yzc1OCBcdWNlNzggXHVkNTU4XHViMDk4XHViOTdjIFx1YWMwMFx1YjlhY1x1ZDBhNFx1YjI5NCBcdWQzZWNcdWM3NzhcdWQxMzBcdWI4NWMgXHVjNzc0XHViOGU4XHVjNWI0XHVjODM4IFx1Yzc4OFx1YjJlNC5CcmFpbmZ1Y2sgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzQwIFx1YjJlNFx1Yzc0Y1x1YWNmYyBcdWFjMTlcdWM3NzQgOFx1YWMxY1x1Yzc1OCBcdWJhODVcdWI4MzlcdWM1YjRcdWI4NWMgXHVjNzc0XHViOGU4XHVjNWI0XHVjODM4IFx1Yzc4OFx1YjJlNC48XC9wPlxyXG5cclxuPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWRcIiBzdHlsZT1cIndpZHRoOjEwMCVcIj5cclxuXHQ8dGJvZHk+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0aCBzdHlsZT1cIndpZHRoOjIwJVwiPi08XC90aD5cclxuXHRcdFx0PHRkIHN0eWxlPVwid2lkdGg6ODAlXCI+XHVkM2VjXHVjNzc4XHVkMTMwXHVhYzAwIFx1YWMwMFx1YjlhY1x1ZDBhNFx1YjI5NCBcdWMyMmJcdWM3OTBcdWI5N2MgMSBcdWFjMTBcdWMxOGNcdWMyZGNcdWQwYThcdWIyZTQuIChtb2R1bG8gMjxzdXA+ODxcL3N1cD4pPFwvdGQ+XHJcblx0XHQ8XC90cj5cclxuXHRcdDx0cj5cclxuXHRcdFx0PHRoPis8XC90aD5cclxuXHRcdFx0PHRkPlx1ZDNlY1x1Yzc3OFx1ZDEzMFx1YWMwMCBcdWFjMDBcdWI5YWNcdWQwYTRcdWIyOTQgXHVjMjJiXHVjNzkwXHViOTdjIDEgXHVjOTlkXHVhYzAwXHVjMmRjXHVkMGE4XHViMmU0LiAobW9kdWxlIDI8c3VwPjg8XC9zdXA+KTxcL3RkPlxyXG5cdFx0PFwvdHI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0aD4mbHQ7PFwvdGg+XHJcblx0XHRcdDx0ZD5cdWQzZWNcdWM3NzhcdWQxMzBcdWI5N2MgXHVjNjdjXHVjYWJkXHVjNzNjXHViODVjIFx1YzZjMFx1YzljMVx1Yzc3OFx1YjJlNC4oMSBcdWFjMTBcdWMxOGMpPFwvdGQ+XHJcblx0XHQ8XC90cj5cclxuXHRcdDx0cj5cclxuXHRcdFx0PHRoPiZndDs8XC90aD5cclxuXHRcdFx0PHRkPlx1ZDNlY1x1Yzc3OFx1ZDEzMFx1Yjk3YyBcdWM2MjRcdWI5NzhcdWNhYmRcdWM3M2NcdWI4NWMgXHVjNmMwXHVjOWMxXHVjNzc4XHViMmU0LigxIFx1Yzk5ZFx1YWMwMCk8XC90ZD5cclxuXHRcdDxcL3RyPlxyXG5cdFx0PHRyPlxyXG5cdFx0XHQ8dGg+WzxcL3RoPlxyXG5cdFx0XHQ8dGQ+XHViOWNjXHVjNTdkIFx1ZDNlY1x1Yzc3OFx1ZDEzMFx1YWMwMCBcdWFjMDBcdWI5YWNcdWQwYTRcdWIyOTQgXHVjMjJiXHVjNzkwXHVhYzAwIDBcdWFjZmMgXHVhYzE5XHViMmU0XHViYTc0LCBbXHVjNjQwIFx1YzlkZFx1Yzc0NCBcdWM3NzRcdWI4ZThcdWIyOTQgXVx1Yjg1YyBcdWM4MTBcdWQ1MDRcdWQ1NWNcdWIyZTQuPFwvdGQ+XHJcblx0XHQ8XC90cj5cclxuXHRcdDx0cj5cclxuXHRcdFx0PHRoPl08XC90aD5cclxuXHRcdFx0PHRkPlx1YjljY1x1YzU3ZCBcdWQzZWNcdWM3NzhcdWQxMzBcdWFjMDAgXHVhYzAwXHViOWFjXHVkMGE0XHViMjk0IFx1YzIyYlx1Yzc5MFx1YWMwMCAwXHVjNzc0IFx1YzU0NFx1YjJjOFx1Yjc3Y1x1YmE3NCwgXVx1YzY0MCBcdWM5ZGRcdWM3NDQgXHVjNzc0XHViOGU4XHViMjk0IFtcdWI4NWMgXHVjODEwXHVkNTA0XHVkNTVjXHViMmU0LjxcL3RkPlxyXG5cdFx0PFwvdHI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0aD4uPFwvdGg+XHJcblx0XHRcdDx0ZD5cdWQzZWNcdWM3NzhcdWQxMzBcdWFjMDAgXHVhYzAwXHViOWFjXHVkMGE0XHViMjk0IFx1YzIyYlx1Yzc5MFx1Yjk3YyBcdWNkOWNcdWI4MjVcdWQ1NWNcdWIyZTQuPFwvdGQ+XHJcblx0XHQ8XC90cj5cclxuXHRcdDx0cj5cclxuXHRcdFx0PHRoPiw8XC90aD5cclxuXHRcdFx0PHRkPlx1YmIzOFx1Yzc5MCBcdWQ1NThcdWIwOThcdWI5N2MgXHVjNzdkXHVhY2UwIFx1ZDNlY1x1Yzc3OFx1ZDEzMFx1YWMwMCBcdWFjMDBcdWI5YWNcdWQwYTRcdWIyOTQgXHVhY2YzXHVjNWQwIFx1YzgwMFx1YzdhNVx1ZDU1Y1x1YjJlNC4gXHVjNzg1XHViODI1XHVjNzU4IFx1YjljOFx1YzljMFx1YjljOShFT0YpXHVjNzc4IFx1YWNiZFx1YzZiMFx1YzVkMFx1YjI5NCAyNTVcdWI5N2MgXHVjODAwXHVjN2E1XHVkNTVjXHViMmU0LjxcL3RkPlxyXG5cdFx0PFwvdHI+XHJcblx0PFwvdGJvZHk+XHJcbjxcL3RhYmxlPlxyXG5cclxuPHA+XHVjNzc4XHVkMTMwXHVkNTA0XHViOWFjXHVkMTMwXHViMjk0IEJyYWluZnVjayBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NTggXHVjY2FiIFx1YmM4OFx1YzlmOCBcdWJhODVcdWI4MzlcdWJkODBcdWQxMzAgXHVjMjE4XHVkNTg5XHVkNTU4XHVhY2UwLCBcdWIzNTRcdWM3NzRcdWMwYzEgXHVjMjE4XHVkNTg5XHVkNTYwIFx1YmE4NVx1YjgzOVx1Yzc3NCBcdWM1YzZcdWIyZTRcdWJhNzQsIFx1ZDUwNFx1Yjg1Y1x1YWRmOFx1YjdhOFx1Yzc0NCBcdWM4ODVcdWI4Y2NcdWQ1NWNcdWIyZTQuIFx1YWMwMSBcdWJhODVcdWI4MzlcdWM3NDQgXHVjMjE4XHVkNTg5XHVkNTU4XHVhY2UwIFx1YjA5OFx1YmE3NCwgXHViMmU0XHVjNzRjIFx1YmE4NVx1YjgzOVx1Yzc0NCBcdWMyMThcdWQ1ODlcdWQ1NWNcdWIyZTQuIChbXHVjNjQwIF1cdWM3NzggXHVhY2JkXHVjNmIwXHVjNWQwXHViMjk0IFx1YzgxMFx1ZDUwNFx1Yjk3YyBcdWQ1NjAgXHVjMjE4IFx1Yzc4OFx1YjJlNC4pPFwvcD5cclxuXHJcbjxwPlx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWJjMzBcdWM1ZjRcdWM3NTggXHVkMDZjXHVhZTMwXHViMjk0IFx1YmIzOFx1YzgxY1x1YzVkMFx1YzExYyBcdWM4ZmNcdWM1YjRcdWM5YzBcdWIyOTQgXHVhYzEyXHVjNzQ0IFx1YzBhY1x1YzZhOVx1ZDU3NFx1YzU3YyBcdWQ1NWNcdWIyZTQuIFx1YjYxMCwgXHViMzcwXHVjNzc0XHVkMTMwIFx1YmMzMFx1YzVmNFx1Yzc1OCBcdWFjMTJcdWM3NzQgdW5kZXJmbG93XHViMDk4IG92ZXJmbG93XHViOTdjIFx1Yzc3Y1x1YzczY1x1Y2YzMFx1Yzc0NCBcdWI1NGNcdWIyOTQgXHVjNzdjXHViYzE4XHVjODAxXHVjNzc4IFx1YmMyOVx1YmM5NVx1Yzc0NCBcdWI1MzBcdWI5NzRcdWJhNzQgXHViNDFjXHViMmU0LiBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NDQgXHVjMjE4XHVkNTg5XHVkNTU4XHVhZTMwIFx1YzgwNFx1YzVkMCwgXHViMzcwXHVjNzc0XHVkMTMwIFx1YmMzMFx1YzVmNFx1Yzc1OCBcdWFjMTJcdWM3NDAgMFx1YzczY1x1Yjg1YyBcdWNkMDhcdWFlMzBcdWQ2NTRcdWI0MThcdWM1YjQgXHVjNzg4XHVhY2UwLCBcdWQzZWNcdWM3NzhcdWQxMzBcdWFjMDAgXHVhYzAwXHViOWFjXHVkMGE0XHViMjk0IFx1Y2U3OFx1Yzc0MCAwXHViYzg4IFx1Y2U3OFx1Yzc3NFx1YjJlNC48XC9wPlxyXG5cclxuPHA+XHVkM2VjXHVjNzc4XHVkMTMwXHViOTdjIFx1YzY3Y1x1Y2FiZFx1Yzc3NFx1YjA5OCBcdWM2MjRcdWI5NzhcdWNhYmRcdWM3M2NcdWI4NWMgXHVjNmMwXHVjOWMxXHVjNzdjIFx1YjU0YywgXHViMzcwXHVjNzc0XHVkMTMwIFx1YmMzMFx1YzVmNFx1Yzc1OCBcdWJjOTRcdWM3MDRcdWI5N2MgXHViMTE4XHVjNWI0XHVhYzA0XHViMmU0XHViYTc0LCBcdWJjMThcdWIzMDBcdWNhYmRcdWM3M2NcdWI4NWMgXHViMTE4XHVjNWI0XHVhYzAwXHVhYzhjIFx1YjQxY1x1YjJlNC4gXHVjOTg5LCBcdWQzZWNcdWM3NzhcdWQxMzBcdWFjMDAgMFx1Yzc0NCBcdWFjMDBcdWI5YWNcdWQwYWMgXHViNTRjLCAxXHVjNzQ0IFx1YWMxMFx1YzE4Y1x1YzJkY1x1ZDBhOFx1YjJlNFx1YmE3NCwgXHViYzMwXHVjNWY0XHVjNzU4IFx1ZDA2Y1x1YWUzMCAtIDFcdWJjODhcdWM5ZjhcdWI5N2MgXHVhYzAwXHViOWFjXHVkMGE0XHVhYzhjIFx1YjQxY1x1YjJlNC48XC9wPlxyXG5cclxuPHA+W1x1YzY0MCBdXHViMjk0IFx1YjhlOFx1ZDUwNFx1Yjk3YyBcdWM3NThcdWJiZjhcdWQ1NThcdWJhNzAsIFx1YzkxMVx1Y2NhOVx1YjQyMCBcdWMyMTggXHVjNzg4XHViMmU0LiBcdWM3OTggXHVjOWRjXHVjNWVjXHVjOWM0IFx1ZDUwNFx1Yjg1Y1x1YWRmOFx1YjdhOFx1Yzc0MCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NDQgXHVjMjE4XHVkNTg5XHVkNTU4XHViYTc0XHVjMTFjLCBcdWFjMDEgXHViYTg1XHViODM5XHVjNzQ0IFx1YzIxOFx1ZDU4OVx1ZDU1OFx1YWUzMCBcdWM4MDRcdWFlNGNcdWM5YzAgXHViMDk4XHVjNjI4IFsgXHVhYzFjXHVjMjE4XHVjNWQwXHVjMTFjIF0gXHVhYzFjXHVjMjE4XHViOTdjIFx1YmU3Y1x1YmE3NCAwXHViY2Y0XHViMmU0IFx1ZDA2Y1x1YWM3MFx1YjA5OCBcdWFjMTlcdWM3NDAgXHVhYzEyXHVjNzc0IFx1YjA5OFx1YzYyNFx1YWM4YyBcdWI0MWNcdWIyZTQuIFx1ZDUwNFx1Yjg1Y1x1YWRmOFx1YjdhOFx1Yzc3NCBcdWM4ODVcdWI4Y2NcdWI0MWMgXHVkNmM0XHVjNWQwXHViMjk0IDBcdWM3NzQgXHViMDk4XHVjNjI4XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWM3NzQgXHViYjM4XHVjODFjXHViMjk0IEJyYWluZnVjayBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NzQgXHViYjM0XHVkNTVjIFx1YjhlOFx1ZDUwNFx1YzVkMCBcdWJlNjBcdWM5YzBcdWIyOTRcdWM5YzAgXHVjNTQ4IFx1YmU2MFx1YzljMFx1YjI5NFx1YzljMFx1Yjk3YyBcdWFjODBcdWMwYWNcdWQ1NThcdWFlMzBcdWI5Y2MgXHVkNTU4XHViYTc0IFx1YjQxY1x1YjJlNC4gXHViNTMwXHViNzdjXHVjMTFjLCBcdWNkOWNcdWI4MjVcdWM3NDAgXHViYjM0XHVjMmRjXHVkNTVjXHViMmU0LjxcL3A+XHJcbiIsImlucHV0IjoiPHA+XHVjY2FiXHVjOWY4IFx1YzkwNFx1YzVkMCBcdWQxNGNcdWMyYTRcdWQyYjggXHVjZjAwXHVjNzc0XHVjMmE0XHVjNzU4IFx1YWMxY1x1YzIxOCB0ICgwICZsdDsgdCAmbGU7IDIwKVx1YWMwMCBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQuIFx1YWMwMSBcdWQxNGNcdWMyYTRcdWQyYjggXHVjZjAwXHVjNzc0XHVjMmE0XHViMjk0IFx1YzEzOCBcdWM5MDRcdWI4NWMgXHVjNzc0XHViOGU4XHVjNWI0XHVjODM4IFx1Yzc4OFx1YjJlNC4gXHVjY2FiXHVjOWY4IFx1YzkwNFx1YzVkMFx1YjI5NCBzPHN1Yj5tPFwvc3ViPiwgczxzdWI+YzxcL3N1Yj4sIHM8c3ViPmk8XC9zdWI+XHVhYzAwIFx1YzhmY1x1YzViNFx1YzljNFx1YjJlNC4gczxzdWI+bTxcL3N1Yj5cdWM3NDAgXHViYTU0XHViYWE4XHViOWFjKFx1YmMzMFx1YzVmNClcdWM3NTggXHVkMDZjXHVhZTMwXHVjNzc0XHVhY2UwLCBzPHN1Yj5jPFwvc3ViPlx1YjI5NCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YTggXHVjZjU0XHViNGRjXHVjNzU4IFx1ZDA2Y1x1YWUzMCwgczxzdWI+aTxcL3N1Yj5cdWIyOTQgXHVjNzg1XHViODI1XHVjNzU4IFx1ZDA2Y1x1YWUzMFx1Yzc3NFx1YjJlNC4gKDAgJmx0OyBzPHN1Yj5tPFwvc3ViPiAmbGU7IDEwMCwwMDAsIDAgJmx0OyBzPHN1Yj5jPFwvc3ViPiwgczxzdWI+aTxcL3N1Yj4gJmx0OyA0MDk2KTxcL3A+XHJcblxyXG48cD5cdWI0NThcdWM5ZjggXHVjOTA0XHVjNWQwXHViMjk0IEJyYWluZnVjayBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NzQgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NDAgczxzdWI+YzxcL3N1Yj5cdWFjMWNcdWM3NTggXHViYjM4XHVjNzkwXHViODVjIFx1Yzc3NFx1YjhlOFx1YzViNFx1YzgzOCBcdWM3ODhcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1YzE0Ylx1YzlmOCBcdWM5MDRcdWM1ZDBcdWIyOTQgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzU4IFx1Yzc4NVx1YjgyNVx1Yzc3NCBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQuIChcdWFjZjVcdWJjMzFcdWM3NzQgXHVjNTQ0XHViMmNjXHViYTc0XHVjMTFjIFx1Y2Q5Y1x1YjgyNVx1ZDU2MCBcdWMyMTggXHVjNzg4XHViMjk0IFx1YmIzOFx1Yzc5MFx1YjljYyBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQpPFwvcD5cclxuIiwib3V0cHV0IjoiPHA+XHVhYzAxIFx1ZDE0Y1x1YzJhNFx1ZDJiOCBcdWNmMDBcdWM3NzRcdWMyYTRcdWM1ZDAgXHViMzAwXHVkNTc0XHVjMTFjLCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NzQgXHVjODg1XHViOGNjXHViNDFjXHViMmU0XHViYTc0ICZxdW90O1Rlcm1pbmF0ZXMmcXVvdDtcdWI5N2MsIFx1YmIzNFx1ZDU1YyBcdWI4ZThcdWQ1MDRcdWM1ZDAgXHViZTYwXHVjOWMwXHVhYzhjIFx1YjQxY1x1YjJlNFx1YmE3NCAmcXVvdDtMb29wcyZxdW90O1x1Yjk3YyBcdWNkOWNcdWI4MjVcdWQ1NWNcdWIyZTQuIFx1YmIzNFx1ZDU1YyBcdWI4ZThcdWQ1MDRcdWM1ZDAgXHViZTYwXHVjODRjXHVjNzQ0IFx1YjU0Y1x1YjI5NCwgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzU4IFx1YzViNFx1YjI5MCBcdWJkODBcdWJkODRcdWM3NzQgXHViYjM0XHVkNTVjIFx1YjhlOFx1ZDUwNFx1Yzc3OFx1YzljMFx1Yjk3YyBcdWNkOWNcdWI4MjVcdWQ1NWNcdWIyZTQuIChbXHVjNjQwIF1cdWM3NTggXHVjNzA0XHVjZTU4KSBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NzQgXHViYTg1XHViODM5XHVjNWI0XHViOTdjIDUwLDAwMCwwMDBcdWJjODggXHVjNzc0XHVjMGMxIFx1YzIxOFx1ZDU4OVx1ZDU1YyBcdWFjYmRcdWM2YjAsIFx1ZDUwNFx1Yjg1Y1x1YWRmOFx1YjdhOFx1Yzc0MCBcdWQ1NmRcdWMwYzEgXHVjODg1XHViOGNjXHViNDE4XHVjNWM4XHVhYzcwXHViMDk4IFx1YmIzNFx1ZDU1YyBcdWI4ZThcdWQ1MDRcdWM1ZDAgXHViZTYwXHVjODM4XHVjNzg4XHViMmU0LjxcL3A+XHJcbiIsImhpbnQiOiIiLCJvcmlnaW5hbCI6IjAiLCJwcm9ibGVtX2xhbmdfY29kZSI6Ilx1ZDU1Y1x1YWQ2ZFx1YzViNCJ9LHsicHJvYmxlbV9pZCI6IjM5NTQiLCJwcm9ibGVtX2xhbmciOiIxIiwidGl0bGUiOiJCcmFpbkZ1Y2tWTSIsImRlc2NyaXB0aW9uIjoiPHA+R2l2ZW4gYSBicmFpbmZ1Y2sgcHJvZ3JhbSwgZGV0ZXJtaW5lIHdoZXRoZXIgaXQgdGVybWluYXRlcyBvciBlbnRlcnMgYW4gZW5kbGVzcyBsb29wLjxcL3A+XHJcblxyXG48cD5BIGJyYWluZnVjayBpbnRlcnByZXRlciBoYXMgYSBkYXRhIGFycmF5IChjb25zaXN0aW5nIG9mIHVuc2lnbmVkIDgtYml0IGludGVnZXJzKSB3aXRoIGFuIGluZGV4LCB0aGUgc28gY2FsbGVkICZxdW90O2RhdGEgaW5kZXgmcXVvdDs7IHRoZSBlbnRyeSBvZiB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSB0aGUgZGF0YSBpbmRleCBpcyB0aGUgc28gY2FsbGVkICZxdW90O2N1cnJlbnQgZW50cnkmcXVvdDsuIEEgYnJhaW5mdWNrIHByb2dyYW0gY29uc2lzdHMgb2YgYSBzZXF1ZW5jZSBvZiB0aGUgZm9sbG93aW5nIGVpZ2h0IGluc3RydWN0aW9uczo8XC9wPlxyXG5cclxuPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWRcIiBzdHlsZT1cIndpZHRoOjEwMCVcIj5cclxuXHQ8dGJvZHk+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0aCBzdHlsZT1cIndpZHRoOjIwJVwiPi08XC90aD5cclxuXHRcdFx0PHRkIHN0eWxlPVwid2lkdGg6ODAlXCI+ZGVjcmVhc2UgY3VycmVudCBlbnRyeSBieSAxIChtb2R1bG8gMjxzdXA+ODxcL3N1cD4pPFwvdGQ+XHJcblx0XHQ8XC90cj5cclxuXHRcdDx0cj5cclxuXHRcdFx0PHRoPis8XC90aD5cclxuXHRcdFx0PHRkPmluY3JlYXNlIGN1cnJlbnQgZW50cnkgYnkgMSAobW9kdWxlIDI8c3VwPjg8XC9zdXA+KTxcL3RkPlxyXG5cdFx0PFwvdHI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0aD4mbHQ7PFwvdGg+XHJcblx0XHRcdDx0ZD5kZWNyZWFzZSBkYXRhIGluZGV4IGJ5IDE8XC90ZD5cclxuXHRcdDxcL3RyPlxyXG5cdFx0PHRyPlxyXG5cdFx0XHQ8dGg+Jmd0OzxcL3RoPlxyXG5cdFx0XHQ8dGQ+aW5jcmVhc2UgZGF0YSBpbmRleCBieSAxPFwvdGQ+XHJcblx0XHQ8XC90cj5cclxuXHRcdDx0cj5cclxuXHRcdFx0PHRoPls8XC90aD5cclxuXHRcdFx0PHRkPmp1bXAgYmVoaW5kIHRoZSBtYXRjaGluZyBdLCBpZiB0aGUgY3VycmVudCBlbnRyeSBpcyBlcXVhbCB0byAwPFwvdGQ+XHJcblx0XHQ8XC90cj5cclxuXHRcdDx0cj5cclxuXHRcdFx0PHRoPl08XC90aD5cclxuXHRcdFx0PHRkPmp1bXAgYmVoaW5kIHRoZSBtYXRjaGluZyBbIGlmIHRoZSBjdXJyZW50IGVudHJ5IGlzIG5vdCBlcXVhbCB0byAwPFwvdGQ+XHJcblx0XHQ8XC90cj5cclxuXHRcdDx0cj5cclxuXHRcdFx0PHRoPi48XC90aD5cclxuXHRcdFx0PHRkPnByaW50IHRoZSBjdXJyZW50IGVudHJ5IGFzIGNoYXJhY3RlcjxcL3RkPlxyXG5cdFx0PFwvdHI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0aD4sPFwvdGg+XHJcblx0XHRcdDx0ZD5yZWFkIGEgY2hhcmFjdGVyIGFuZCBzYXZlIGl0IGludG8gdGhlIGN1cnJlbnQgZW50cnkuIE9uIGVuZCBvZiBpbnB1dCBzYXZlIDI1NS48XC90ZD5cclxuXHRcdDxcL3RyPlxyXG5cdDxcL3Rib2R5PlxyXG48XC90YWJsZT5cclxuXHJcbjxwPkludGVycHJldGF0aW9uIG9mIGEgYnJhaW5mdWNrIHByb2dyYW0gc3RhcnRzIGF0IHRoZSBmaXJzdCBpbnN0cnVjdGlvbiwgYW5kIHRlcm1pbmF0ZXMgaWYgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIgbGVhdmVzIHRoZSBlbmQgb2YgdGhlIHByb2dyYW0uIEFmdGVyIGFuIGluc3RydWN0aW9uIGlzIGV4ZWN1dGVkLCB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlciBhZHZhbmNlcyB0byB0aGUgaW5zdHJ1Y3Rpb24gdG8gdGhlIHJpZ2h0IChleGNlcHQsIG9mIGNvdXJzZSwgaWYgdGhlIGxvb3AgaW5zdHJ1Y3Rpb25zIFsgb3IgXSBjYXVzZSBhIGp1bXApLjxcL3A+XHJcblxyXG48cD5JbiBhZGRpdGlvbiB0byB0aGUgcHJvZ3JhbSwgeW91IHdpbGwgYmUgZ2l2ZW4gdGhlIHNpemUgb2YgdGhlIGRhdGEgYXJyYXkuIFRoZSBlbnRyaWVzIG9mIHRoZSBkYXRhIGFycmF5IHNoYWxsIGJlIHVuc2lnbmVkIDgtYml0IGludGVnZXJzLCB3aXRoIHVzdWFsIG92ZXItIG9yIHVuZGVyZmxvdyBiZWhhdmlvdXIuIEF0IHRoZSBzdGFydCBvZiB0aGU8XC9wPlxyXG5cclxuPHA+cHJvZ3JhbSwgdGhlIGRhdGEgYXJyYXkgZW50cmllcyBhbmQgdGhlIGRhdGEgaW5kZXggc2hhbGwgYmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gSW5jcmVtZW50aW5nIG9yIGRlY3JlbWVudGluZyB0aGUgZGF0YSBpbmRleCBiZXlvbmQgdGhlIGJvdW5kYXJpZXMgb2YgdGhlIGRhdGEgYXJyYXkgc2hhbGwgbWFrZSBpdCByZS1lbnRlciB0aGUgZGF0YSBhcnJheSBhdCB0aGUgb3RoZXIgYm91bmRhcnk7IGUuZy4gZGVjcmVtZW50aW5nIHRoZSBkYXRhIGluZGV4IHdoZW4gaXQgaXMgemVybyBzaGFsbCBzZXQgaXQgdG8gdGhlIHNpemUgb2YgdGhlIGRhdGEgYXJyYXkgbWludXMgb25lLjxcL3A+XHJcblxyXG48cD5UaGUgWyBhbmQgXSBpbnN0cnVjdGlvbnMgZGUgbmUgbG9vcHMgYW5kIGFyZSBhbGxvd2VkIHRvIG5lc3QuIEV2ZXJ5IGdpdmVuIHByb2dyYW0gd2lsbCBiZSB3ZWxsZm9ybWVkLCBpLmUuIHdoZW4gdHJhdmVyc2luZyB0aGUgcHJvZ3JhbSBmcm9tIGxlZnQgdG8gcmlnaHQsIHRoZSBudW1iZXIgb2YgWyBpbnN0cnVjdGlvbnMgbWludXMgdGhlIG51bWJlciBvZiBdIGluc3RydWN0aW9ucyB3aWxsIGFsd2F5cyBiZSBncmVhdGVyIG9yIGVxdWFsIHplcm8sIGFuZCBhdCB0aGUgZW5kIG9mIHRoZSBwcm9ncmFtIGl0IHdpbGwgYmUgZXF1YWwgdG8gemVyby48XC9wPlxyXG5cclxuPHA+Rm9yIHRoZSBwdXJwb3NlcyBvZiB0aGUgcHJvYmxlbSwgZGlzY2FyZCB0aGUgb3V0cHV0IG9mIHRoZSBpbnRlcnByZXRlZCBwcm9ncmFtLiZuYnNwOzxcL3A+XHJcbiIsImlucHV0IjoiPHA+VGhlIGlucHV0IHN0YXJ0cyB3aXRoIGEgbGluZSBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgdGVzdCBjYXNlcyB0ICgwICZsdDsgdCAmbGU7IDIwKS4gRWFjaCB0ZXN0IGNhc2UgY29uc2lzdHMgb2YgdGhyZWUgbGluZXMuIFRoZSBmaXJzdCBsaW5lIGNvbnRhaW5zIHRocmVlIGludGVnZXJzIHM8c3ViPm08XC9zdWI+LCBzPHN1Yj5jPFwvc3ViPiwgczxzdWI+aTxcL3N1Yj4sIGRlc2NyaWJpbmcgdGhlIHNpemUgb2YgdGhlIG1lbW9yeSwgdGhlIHNpemUgb2YgdGhlIHByb2dyYW0gY29kZSBhbmQgdGhlIHNpemUgb2YgdGhlIGlucHV0ICgwICZsdDsgczxzdWI+bTxcL3N1Yj4gJmxlOyAxMDAgMDAwOyAwICZsdDsgczxzdWI+YzxcL3N1Yj4sIHM8c3ViPmk8XC9zdWI+ICZsdDsgNCAwOTYpLiBUaGUgc2Vjb25kIGxpbmUgY29udGFpbnMgdGhlIGJyYWluZnVjayBwcm9ncmFtIGNvZGUgdG8gYmUgZXhlY3V0ZWQ7IGl0IGNvbnNpc3RzIG9mIHNjIGNoYXJhY3RlcnMuIFRoZSB0aGlyZCBsaW5lIGNvbnRhaW5zIHRoZSBpbnB1dCBvZiB0aGUgcHJvZ3JhbSwgYXMgdGV4dCAob25seSBwcmludGFibGUsIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMpLjxcL3A+XHJcblxyXG48cD5PbmNlIHRoZSBwcm9ncmFtIGhhcyBjb25zdW1lZCBhbGwgYXZhaWxhYmxlIGlucHV0LCB0aGUgaW5wdXQgaW5zdHJ1Y3Rpb24gc2hhbGwgc2V0IHRoZSBjdXJyZW50IGNlbGwgdG8gMjU1LjxcL3A+XHJcbiIsIm91dHB1dCI6IjxwPkZvciBlYWNoIHRlc3QgY2FzZSwgcHJpbnQgb25lIGxpbmUsIGNvbnRhaW5pbmcgZWl0aGVyICZxdW90O1Rlcm1pbmF0ZXMmcXVvdDsgb3IgJnF1b3Q7TG9vcHMmcXVvdDssIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBwcm9ncmFtIGVpdGhlciB0ZXJtaW5hdGVzIGFmdGVyIGEgbml0ZSBudW1iZXIgb2Ygc3RlcHMsIG9yIGVudGVycyBhbiBlbmRsZXNzIGxvb3AuIElmIHRoZSBwcm9ncmFtIGxvb3BzLCBhbHNvIHByaW50IHRoZSBpbmRpY2VzICgwLWJhc2VkKSBvZiB0aGUgdHdvIFsgYW5kIHRoZSBdIHN5bWJvbHMgaW4gdGhlIGNvZGUgYXJyYXkgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBlbmRsZXNzIGxvb3AuIFlvdSBtYXkgc2FmZWx5IGFzc3VtZSB0aGF0IGFmdGVyIDUwIDAwMCAwMDAgaW5zdHJ1Y3Rpb25zLCBhIHByb2dyYW0gZWl0aGVyIHRlcm1pbmF0ZWQgb3IgaGFuZ3MgaW4gYW4gZW5kbGVzcyBsb29wLCB3aGljaCB0aGVuIHdhcyBleGVjdXRlZCBhdCBsZWFzdCBvbmNlLiBEdXJpbmcgZWFjaCBpdGVyYXRpb24gb2YgdGhlIGVuZGxlc3MgbG9vcCBhdCBtb3N0IDUwIDAwMCAwMDAgaW5zdHJ1Y3Rpb25zIGFyZSBleGVjdXRlZC48XC9wPlxyXG4iLCJoaW50IjoiIiwib3JpZ2luYWwiOiIxIiwicHJvYmxlbV9sYW5nX2NvZGUiOiJcdWM2MDFcdWM1YjQifV0=