시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 11 8 8 72.727%

문제

논리식은 컴퓨터 프로그램에 자주 사용된다. 논리식은 다음으로 구성된다.

  • true 또는 false의 값을 가지는 변수
  • 단항 및 이항 논리 연산자
  • 연산의 순서에 영향을 줄 수 있는 괄호

단항 연산자는 하나의 변수에 대해 동작하고, 이항 연산자는 두 개의 변수에 대해 동작한다. 자주 쓰이는 단항 연산자로 NOT이 있고, 자주 쓰이는 이항 연산자로 AND, OR, XOR, NAND, NOR 등이 있다.

논리 연산자는 '진리표'로써 정의할 수 있다. 이 진리표는 단항 연산자의 경우 1차원, 이항 연산자의 경우 2차원이다. 예를 들어, 다음 그림을 보자.

위쪽 여백과 왼쪽 여백 모두 첫 번째 피연산자가 false이고, 두 번째 피연산자가 true임에 주목하자.

논리식의 예시는 다음과 같다.

  1. (x AND (NOT(y NAND z)))
  2. (x OR ((NOT y) XOR z))

이 문제에서 논리식의 정확한 구조는 다음 문법으로 정의된다.

<expression> = <variable> | ( <expression> <operator> <expression> ) | ( <operator> <expression>)
<variable> = <lowercase_letter>
<operator> = <uppercase_letter> | <operator> <uppercase_letter>

(여기서 수직 막대 '|'는 'or'라고 발음하며, 문법을 정의할 때 사용하는 글자이다. 실제 식에서는 나타나지 않는다.) <lowercase_letter>와 <uppercase_letter>는 알파벳 대소문자이다.

어떤 경우에서는 모든 변수의 값이 정해지지 않아도 논리식을 계산할 수 있다. 위의 첫 번째 예시에서, y는 false이고, x와 z의 값은 모른다고 해 보자. 그러면 나머지 변수의 값이 무엇이든 해당 논리식은 항상 false로 계산됨을 알 수 있다. 반면, 같은 예시에서, x = true, y = true이고, z의 값은 모른다고 해보자. 그러면 z의 값을 알지 않고서는 논리식의 값을 결정할 수 없다.

입력

입력은 하나 이상의 테스트 케이스로 이루어져 있다. 각 테스트 케이스마다 첫 줄에 100 이하의 음이 아닌 정수가 2개 주어지며, 각각 그 케이스에서 사용할 단항 연산자와 이항 연산자의 종류이다.

그 다음에는 아래 두 문단에서 설명하는 형식으로 각 연산자의 이름과 진리표 형태의 연산자 정의가 여러 줄에 걸쳐 주어진다. 모든 연산자의 이름은 20글자를 넘지 않으며, 서로 다르다.

우선 단항 연산자를 각각 2줄씩에 걸쳐 정의한다. 첫째 줄에는 연산자의 이름이 주어지고, 둘째 줄에는 두 개의 참/거짓 값이 주어지며, 이것이 그 연산자의 진리표가 된다. 피연산자의 순서는 위 그림에 주어진 것과 같이 false, true이다.

단항 연산자 다음에는 이항 연산자를 각각 3줄씩에 걸쳐 정의한다. 첫째 줄에는 연산자의 이름이 주어지고, 다음 두 줄에는 두 개씩의 참/거짓 값이 주어지며, 이것이 그 연산자의 진리표가 된다. 왼쪽 피연산자는 위 그림의 왼쪽 여백에, 오른쪽 피연산자는 위쪽 여백에 해당한다.

연산자를 모두 정의한 다음에는 위의 문법을 만족하는 유효한 논리식을 한 줄에 입력받는다. 변수와 연산자는 하나 이상의 띄어쓰기로 구분되어 있으며, 괄호로 묶인 식과 연산자 사이에는 띄어쓰기가 있을 수도 없을 수도 있다. 논리식에는 같은 변수가 두 번 이상 등장하지 않음이 보장된다. 논리식의 길이는 1 이상 500 이하이다.

논리식 다음에는 0개 이상의 변수의 값이 각각 한 줄로 주어진다. 각 줄은 아래 둘 중 하나의 형태이다.

<variable> true
<variable> false

같은 변수는 두 번 이상 주어지지 않는다.

각 테스트 케이스의 끝에는 별표(*) 하나가 주어지며, 입력의 끝에는 음의 정수 두 개가 한 줄로 주어진다.

출력

각 테스트 케이스마다 한 줄씩 케이스 번호를 표시하고, 그 뒤에 truefalseunknown 중 주어진 논리식에 알맞은 것을 문제에서 설명한 대로 출력한다.

출력 포맷은 예제 출력을 통해 확인할 수 있다.

예제 입력 1

1 2
NOT
true false
AND
false false
false true
TWEEK
true false
true false
(x AND (NOT(y TWEEK z)))
x true
y true
*
1 1
MOCK
true true
NAND
true true
true false
(x NAND (MOCK (y NAND z)))
x false
y false
*
0 2
XOR
false true
true false
FAKE
true true
false false
((p XOR q) FAKE r)
p true
q false
*
-1 -1

예제 출력 1

Case 1: unknown
Case 2: true
Case 3: false
W3sicHJvYmxlbV9pZCI6IjE5MDEiLCJwcm9ibGVtX2xhbmciOiIwIiwidGl0bGUiOiJcdWIxN2NcdWI5YWNcdWMyZGQiLCJkZXNjcmlwdGlvbiI6IjxwPlx1YjE3Y1x1YjlhY1x1YzJkZFx1Yzc0MCBcdWNlZjRcdWQ0ZThcdWQxMzAgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNWQwIFx1Yzc5MFx1YzhmYyBcdWMwYWNcdWM2YTlcdWI0MWNcdWIyZTQuIFx1YjE3Y1x1YjlhY1x1YzJkZFx1Yzc0MCBcdWIyZTRcdWM3NGNcdWM3M2NcdWI4NWMgXHVhZDZjXHVjMTMxXHViNDFjXHViMmU0LjxcL3A+XHJcblxyXG48dWw+XHJcblx0PGxpPnRydWUgXHViNjEwXHViMjk0IGZhbHNlXHVjNzU4IFx1YWMxMlx1Yzc0NCBcdWFjMDBcdWM5YzBcdWIyOTQgXHViY2MwXHVjMjE4PFwvbGk+XHJcblx0PGxpPlx1YjJlOFx1ZDU2ZCBcdWJjMGYgXHVjNzc0XHVkNTZkIFx1YjE3Y1x1YjlhYyBcdWM1ZjBcdWMwYjBcdWM3OTA8XC9saT5cclxuXHQ8bGk+XHVjNWYwXHVjMGIwXHVjNzU4IFx1YzIxY1x1YzExY1x1YzVkMCBcdWM2MDFcdWQ1YTVcdWM3NDQgXHVjOTA0IFx1YzIxOCBcdWM3ODhcdWIyOTQgXHVhZDA0XHVkNjM4PFwvbGk+XHJcbjxcL3VsPlxyXG5cclxuPHA+XHViMmU4XHVkNTZkIFx1YzVmMFx1YzBiMFx1Yzc5MFx1YjI5NCBcdWQ1NThcdWIwOThcdWM3NTggXHViY2MwXHVjMjE4XHVjNWQwIFx1YjMwMFx1ZDU3NCBcdWIzZDlcdWM3OTFcdWQ1NThcdWFjZTAsIFx1Yzc3NFx1ZDU2ZCBcdWM1ZjBcdWMwYjBcdWM3OTBcdWIyOTQgXHViNDUwIFx1YWMxY1x1Yzc1OCBcdWJjYzBcdWMyMThcdWM1ZDAgXHViMzAwXHVkNTc0IFx1YjNkOVx1Yzc5MVx1ZDU1Y1x1YjJlNC4gXHVjNzkwXHVjOGZjIFx1YzRmMFx1Yzc3NFx1YjI5NCBcdWIyZThcdWQ1NmQgXHVjNWYwXHVjMGIwXHVjNzkwXHViODVjIE5PVFx1Yzc3NCBcdWM3ODhcdWFjZTAsIFx1Yzc5MFx1YzhmYyBcdWM0ZjBcdWM3NzRcdWIyOTQgXHVjNzc0XHVkNTZkIFx1YzVmMFx1YzBiMFx1Yzc5MFx1Yjg1YyBBTkQsIE9SLCBYT1IsIE5BTkQsIE5PUiBcdWI0ZjFcdWM3NzQgXHVjNzg4XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWIxN2NcdWI5YWMgXHVjNWYwXHVjMGIwXHVjNzkwXHViMjk0ICYjMzk7XHVjOWM0XHViOWFjXHVkNDVjJiMzOTtcdWI4NWNcdWMzNjggXHVjODE1XHVjNzU4XHVkNTYwIFx1YzIxOCBcdWM3ODhcdWIyZTQuIFx1Yzc3NCBcdWM5YzRcdWI5YWNcdWQ0NWNcdWIyOTQgXHViMmU4XHVkNTZkIFx1YzVmMFx1YzBiMFx1Yzc5MFx1Yzc1OCBcdWFjYmRcdWM2YjAgMVx1Y2MyOFx1YzZkMCwgXHVjNzc0XHVkNTZkIFx1YzVmMFx1YzBiMFx1Yzc5MFx1Yzc1OCBcdWFjYmRcdWM2YjAgMlx1Y2MyOFx1YzZkMFx1Yzc3NFx1YjJlNC4gXHVjNjA4XHViOTdjIFx1YjRlNFx1YzViNCwgXHViMmU0XHVjNzRjIFx1YWRmOFx1YjliY1x1Yzc0NCBcdWJjZjRcdWM3OTAuPFwvcD5cclxuXHJcbjxwIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPjxpbWcgYWx0PVwiXCIgc3JjPVwiaHR0cHM6XC9cL3VwbG9hZC5hY21pY3BjLm5ldFwvMGI0YTlhNTgtN2Y2YS00N2NhLTk1NjgtNTIyOTMwYzViNDViXC8tXC9wcmV2aWV3XC9cIiBcLz48XC9wPlxyXG5cclxuPHA+XHVjNzA0XHVjYWJkIFx1YzVlY1x1YmMzMVx1YWNmYyBcdWM2N2NcdWNhYmQgXHVjNWVjXHViYzMxIFx1YmFhOFx1YjQ1MCZuYnNwO1x1Y2NhYiBcdWJjODhcdWM5ZjggXHVkNTNjXHVjNWYwXHVjMGIwXHVjNzkwXHVhYzAwIGZhbHNlXHVjNzc0XHVhY2UwLCBcdWI0NTAgXHViYzg4XHVjOWY4IFx1ZDUzY1x1YzVmMFx1YzBiMFx1Yzc5MFx1YWMwMCB0cnVlXHVjNzg0XHVjNWQwIFx1YzhmY1x1YmFhOVx1ZDU1OFx1Yzc5MC48XC9wPlxyXG5cclxuPHA+XHViMTdjXHViOWFjXHVjMmRkXHVjNzU4IFx1YzYwOFx1YzJkY1x1YjI5NCBcdWIyZTRcdWM3NGNcdWFjZmMgXHVhYzE5XHViMmU0LjxcL3A+XHJcblxyXG48b2w+XHJcblx0PGxpPih4IEFORCAoTk9UKHkgTkFORCB6KSkpPFwvbGk+XHJcblx0PGxpPih4IE9SICgoTk9UIHkpIFhPUiB6KSk8XC9saT5cclxuPFwvb2w+XHJcblxyXG48cD5cdWM3NzQgXHViYjM4XHVjODFjXHVjNWQwXHVjMTFjIFx1YjE3Y1x1YjlhY1x1YzJkZFx1Yzc1OCBcdWM4MTVcdWQ2NTVcdWQ1NWMgXHVhZDZjXHVjODcwXHViMjk0IFx1YjJlNFx1Yzc0YyBcdWJiMzhcdWJjOTVcdWM3M2NcdWI4NWMgXHVjODE1XHVjNzU4XHViNDFjXHViMmU0LjxcL3A+XHJcblxyXG48cHJlPlxyXG4mbHQ7ZXhwcmVzc2lvbiZndDsgPSAmbHQ7dmFyaWFibGUmZ3Q7IHwgKCAmbHQ7ZXhwcmVzc2lvbiZndDsgJmx0O29wZXJhdG9yJmd0OyAmbHQ7ZXhwcmVzc2lvbiZndDsgKSB8ICggJmx0O29wZXJhdG9yJmd0OyAmbHQ7ZXhwcmVzc2lvbiZndDspXHJcbiZsdDt2YXJpYWJsZSZndDsgPSAmbHQ7bG93ZXJjYXNlX2xldHRlciZndDtcclxuJmx0O29wZXJhdG9yJmd0OyA9ICZsdDt1cHBlcmNhc2VfbGV0dGVyJmd0OyB8ICZsdDtvcGVyYXRvciZndDsgJmx0O3VwcGVyY2FzZV9sZXR0ZXImZ3Q7PFwvcHJlPlxyXG5cclxuPHA+KFx1YzVlY1x1YWUzMFx1YzExYyBcdWMyMThcdWM5YzEgXHViOWM5XHViMzAwICYjMzk7fCYjMzk7XHViMjk0ICYjMzk7b3ImIzM5O1x1Yjc3Y1x1YWNlMCBcdWJjMWNcdWM3NGNcdWQ1NThcdWJhNzAsIFx1YmIzOFx1YmM5NVx1Yzc0NCBcdWM4MTVcdWM3NThcdWQ1NjAgXHViNTRjIFx1YzBhY1x1YzZhOVx1ZDU1OFx1YjI5NCBcdWFlMDBcdWM3OTBcdWM3NzRcdWIyZTQuIFx1YzJlNFx1YzgxYyBcdWMyZGRcdWM1ZDBcdWMxMWNcdWIyOTQgXHViMDk4XHVkMGMwXHViMDk4XHVjOWMwIFx1YzU0YVx1YjI5NFx1YjJlNC4pICZsdDtsb3dlcmNhc2VfbGV0dGVyJmd0O1x1YzY0MCAmbHQ7dXBwZXJjYXNlX2xldHRlciZndDtcdWIyOTQgXHVjNTRjXHVkMzBjXHViY2IzIFx1YjMwMFx1YzE4Y1x1YmIzOFx1Yzc5MFx1Yzc3NFx1YjJlNC48XC9wPlxyXG5cclxuPHA+XHVjNWI0XHViNWE0IFx1YWNiZFx1YzZiMFx1YzVkMFx1YzExY1x1YjI5NCBcdWJhYThcdWI0ZTAgXHViY2MwXHVjMjE4XHVjNzU4PGVtPiA8XC9lbT5cdWFjMTJcdWM3NzQgXHVjODE1XHVkNTc0XHVjOWMwXHVjOWMwIFx1YzU0YVx1YzU0NFx1YjNjNCBcdWIxN2NcdWI5YWNcdWMyZGRcdWM3NDQgXHVhY2M0XHVjMGIwXHVkNTYwIFx1YzIxOCBcdWM3ODhcdWIyZTQuIFx1YzcwNFx1Yzc1OCBcdWNjYWIgXHViYzg4XHVjOWY4IFx1YzYwOFx1YzJkY1x1YzVkMFx1YzExYywgeVx1YjI5NCBmYWxzZVx1Yzc3NFx1YWNlMCwgeFx1YzY0MCB6XHVjNzU4IFx1YWMxMlx1Yzc0MCBcdWJhYThcdWI5NzhcdWIyZTRcdWFjZTAgXHVkNTc0IFx1YmNmNFx1Yzc5MC4gXHVhZGY4XHViN2VjXHViYTc0IFx1YjA5OFx1YmEzOFx1YzljMCBcdWJjYzBcdWMyMThcdWM3NTggXHVhYzEyXHVjNzc0IFx1YmIzNFx1YzVjN1x1Yzc3NFx1YjRlMCBcdWQ1NzRcdWIyZjkgXHViMTdjXHViOWFjXHVjMmRkXHVjNzQwIFx1ZDU2ZFx1YzBjMSBmYWxzZVx1Yjg1YyBcdWFjYzRcdWMwYjBcdWI0MjhcdWM3NDQgXHVjNTRjIFx1YzIxOCBcdWM3ODhcdWIyZTQuIFx1YmMxOFx1YmE3NCwgXHVhYzE5XHVjNzQwIFx1YzYwOFx1YzJkY1x1YzVkMFx1YzExYywgeCA9IHRydWUsIHkgPSB0cnVlXHVjNzc0XHVhY2UwLCB6XHVjNzU4IFx1YWMxMlx1Yzc0MCBcdWJhYThcdWI5NzhcdWIyZTRcdWFjZTAgXHVkNTc0XHViY2Y0XHVjNzkwLiBcdWFkZjhcdWI3ZWNcdWJhNzQgelx1Yzc1OCBcdWFjMTJcdWM3NDQgXHVjNTRjXHVjOWMwIFx1YzU0YVx1YWNlMFx1YzExY1x1YjI5NCBcdWIxN2NcdWI5YWNcdWMyZGRcdWM3NTggXHVhYzEyXHVjNzQ0IFx1YWNiMFx1YzgxNVx1ZDU2MCBcdWMyMTggXHVjNWM2XHViMmU0LjxcL3A+XHJcbiIsImlucHV0IjoiPHA+XHVjNzg1XHViODI1XHVjNzQwIFx1ZDU1OFx1YjA5OCBcdWM3NzRcdWMwYzFcdWM3NTggXHVkMTRjXHVjMmE0XHVkMmI4IFx1Y2YwMFx1Yzc3NFx1YzJhNFx1Yjg1YyBcdWM3NzRcdWI4ZThcdWM1YjRcdWM4MzggXHVjNzg4XHViMmU0LiBcdWFjMDEgXHVkMTRjXHVjMmE0XHVkMmI4IFx1Y2YwMFx1Yzc3NFx1YzJhNFx1YjljOFx1YjJlNCBcdWNjYWIgXHVjOTA0XHVjNWQwIDEwMCBcdWM3NzRcdWQ1NThcdWM3NTggXHVjNzRjXHVjNzc0IFx1YzU0NFx1YjJjYyBcdWM4MTVcdWMyMThcdWFjMDAgMlx1YWMxYyBcdWM4ZmNcdWM1YjRcdWM5YzBcdWJhNzAsIFx1YWMwMVx1YWMwMSBcdWFkZjggXHVjZjAwXHVjNzc0XHVjMmE0XHVjNWQwXHVjMTFjIFx1YzBhY1x1YzZhOVx1ZDU2MCBcdWIyZThcdWQ1NmQgXHVjNWYwXHVjMGIwXHVjNzkwXHVjNjQwIFx1Yzc3NFx1ZDU2ZCBcdWM1ZjBcdWMwYjBcdWM3OTBcdWM3NTggXHVjODg1XHViOTU4XHVjNzc0XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWFkZjggXHViMmU0XHVjNzRjXHVjNWQwXHViMjk0IFx1YzU0NFx1Yjc5OCBcdWI0NTAgXHViYjM4XHViMmU4XHVjNWQwXHVjMTFjIFx1YzEyNFx1YmE4NVx1ZDU1OFx1YjI5NCBcdWQ2MTVcdWMyZGRcdWM3M2NcdWI4NWMgXHVhYzAxJm5ic3A7PHN0cm9uZz5cdWM1ZjBcdWMwYjBcdWM3OTBcdWM3NTggXHVjNzc0XHViOTg0PFwvc3Ryb25nPlx1YWNmYyBcdWM5YzRcdWI5YWNcdWQ0NWMgXHVkNjE1XHVkMGRjXHVjNzU4Jm5ic3A7PHN0cm9uZz5cdWM1ZjBcdWMwYjBcdWM3OTAgXHVjODE1XHVjNzU4PFwvc3Ryb25nPlx1YWMwMCBcdWM1ZWNcdWI3ZWMgXHVjOTA0XHVjNWQwIFx1YWM3OFx1Y2NkMCBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQuIFx1YmFhOFx1YjRlMCBcdWM1ZjBcdWMwYjBcdWM3OTBcdWM3NTggXHVjNzc0XHViOTg0XHVjNzQwIDIwXHVhZTAwXHVjNzkwXHViOTdjIFx1YjExOFx1YzljMCBcdWM1NGFcdWM3M2NcdWJhNzAsIFx1YzExY1x1Yjg1YyBcdWIyZTRcdWI5NzRcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1YzZiMFx1YzEyMCBcdWIyZThcdWQ1NmQgXHVjNWYwXHVjMGIwXHVjNzkwXHViOTdjIFx1YWMwMVx1YWMwMSAyXHVjOTA0XHVjNTI5XHVjNWQwIFx1YWM3OFx1Y2NkMCBcdWM4MTVcdWM3NThcdWQ1NWNcdWIyZTQuIFx1Y2NhYlx1YzlmOCBcdWM5MDRcdWM1ZDBcdWIyOTQgXHVjNWYwXHVjMGIwXHVjNzkwXHVjNzU4IFx1Yzc3NFx1Yjk4NFx1Yzc3NCBcdWM4ZmNcdWM1YjRcdWM5YzBcdWFjZTAsIFx1YjQ1OFx1YzlmOCBcdWM5MDRcdWM1ZDBcdWIyOTQgXHViNDUwIFx1YWMxY1x1Yzc1OCBcdWNjMzhcL1x1YWM3MFx1YzlkMyBcdWFjMTJcdWM3NzQgXHVjOGZjXHVjNWI0XHVjOWMwXHViYTcwLCBcdWM3NzRcdWFjODNcdWM3NzQgXHVhZGY4IFx1YzVmMFx1YzBiMFx1Yzc5MFx1Yzc1OCBcdWM5YzRcdWI5YWNcdWQ0NWNcdWFjMDAgXHViNDFjXHViMmU0LiBcdWQ1M2NcdWM1ZjBcdWMwYjBcdWM3OTBcdWM3NTggXHVjMjFjXHVjMTFjXHViMjk0IFx1YzcwNCBcdWFkZjhcdWI5YmNcdWM1ZDAgXHVjOGZjXHVjNWI0XHVjOWM0IFx1YWM4M1x1YWNmYyBcdWFjMTlcdWM3NzQgZmFsc2UsIHRydWVcdWM3NzRcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1YjJlOFx1ZDU2ZCBcdWM1ZjBcdWMwYjBcdWM3OTAgXHViMmU0XHVjNzRjXHVjNWQwXHViMjk0IFx1Yzc3NFx1ZDU2ZCBcdWM1ZjBcdWMwYjBcdWM3OTBcdWI5N2MgXHVhYzAxXHVhYzAxIDNcdWM5MDRcdWM1MjlcdWM1ZDAgXHVhYzc4XHVjY2QwIFx1YzgxNVx1Yzc1OFx1ZDU1Y1x1YjJlNC4gXHVjY2FiXHVjOWY4IFx1YzkwNFx1YzVkMFx1YjI5NCBcdWM1ZjBcdWMwYjBcdWM3OTBcdWM3NTggXHVjNzc0XHViOTg0XHVjNzc0IFx1YzhmY1x1YzViNFx1YzljMFx1YWNlMCwgXHViMmU0XHVjNzRjIFx1YjQ1MCBcdWM5MDRcdWM1ZDBcdWIyOTQgXHViNDUwIFx1YWMxY1x1YzUyOVx1Yzc1OCBcdWNjMzhcL1x1YWM3MFx1YzlkMyBcdWFjMTJcdWM3NzQgXHVjOGZjXHVjNWI0XHVjOWMwXHViYTcwLCBcdWM3NzRcdWFjODNcdWM3NzQgXHVhZGY4IFx1YzVmMFx1YzBiMFx1Yzc5MFx1Yzc1OCBcdWM5YzRcdWI5YWNcdWQ0NWNcdWFjMDAgXHViNDFjXHViMmU0LiBcdWM2N2NcdWNhYmQgXHVkNTNjXHVjNWYwXHVjMGIwXHVjNzkwXHViMjk0IFx1YzcwNCBcdWFkZjhcdWI5YmNcdWM3NTggXHVjNjdjXHVjYWJkIFx1YzVlY1x1YmMzMVx1YzVkMCwgXHVjNjI0XHViOTc4XHVjYWJkIFx1ZDUzY1x1YzVmMFx1YzBiMFx1Yzc5MFx1YjI5NCBcdWM3MDRcdWNhYmQgXHVjNWVjXHViYzMxXHVjNWQwIFx1ZDU3NFx1YjJmOVx1ZDU1Y1x1YjJlNC48XC9wPlxyXG5cclxuPHA+XHVjNWYwXHVjMGIwXHVjNzkwXHViOTdjIFx1YmFhOFx1YjQ1MCBcdWM4MTVcdWM3NThcdWQ1NWMgXHViMmU0XHVjNzRjXHVjNWQwXHViMjk0IFx1YzcwNFx1Yzc1OCBcdWJiMzhcdWJjOTVcdWM3NDQgXHViOWNjXHVjODcxXHVkNTU4XHViMjk0IFx1YzcyMFx1ZDZhOFx1ZDU1YyBcdWIxN2NcdWI5YWNcdWMyZGRcdWM3NDQgXHVkNTVjIFx1YzkwNFx1YzVkMCBcdWM3ODVcdWI4MjVcdWJjMWJcdWIyOTRcdWIyZTQuIFx1YmNjMFx1YzIxOFx1YzY0MCBcdWM1ZjBcdWMwYjBcdWM3OTBcdWIyOTQgXHVkNTU4XHViMDk4IFx1Yzc3NFx1YzBjMVx1Yzc1OCBcdWI3NDRcdWM1YjRcdWM0ZjBcdWFlMzBcdWI4NWMgXHVhZDZjXHViZDg0XHViNDE4XHVjNWI0IFx1Yzc4OFx1YzczY1x1YmE3MCwgXHVhZDA0XHVkNjM4XHViODVjIFx1YmIzNlx1Yzc3OCBcdWMyZGRcdWFjZmMgXHVjNWYwXHVjMGIwXHVjNzkwIFx1YzBhY1x1Yzc3NFx1YzVkMFx1YjI5NCBcdWI3NDRcdWM1YjRcdWM0ZjBcdWFlMzBcdWFjMDAgXHVjNzg4XHVjNzQ0IFx1YzIxOFx1YjNjNCBcdWM1YzZcdWM3NDQgXHVjMjE4XHViM2M0IFx1Yzc4OFx1YjJlNC4gXHViMTdjXHViOWFjXHVjMmRkXHVjNWQwXHViMjk0IFx1YWMxOVx1Yzc0MCBcdWJjYzBcdWMyMThcdWFjMDAgXHViNDUwIFx1YmM4OCBcdWM3NzRcdWMwYzEgXHViNGYxXHVjN2E1XHVkNTU4XHVjOWMwIFx1YzU0YVx1Yzc0Y1x1Yzc3NCBcdWJjZjRcdWM3YTVcdWI0MWNcdWIyZTQuIFx1YjE3Y1x1YjlhY1x1YzJkZFx1Yzc1OCBcdWFlMzhcdWM3NzRcdWIyOTQgMSBcdWM3NzRcdWMwYzEgNTAwIFx1Yzc3NFx1ZDU1OFx1Yzc3NFx1YjJlNC48XC9wPlxyXG5cclxuPHA+XHViMTdjXHViOWFjXHVjMmRkIFx1YjJlNFx1Yzc0Y1x1YzVkMFx1YjI5NCAwXHVhYzFjIFx1Yzc3NFx1YzBjMVx1Yzc1OCBcdWJjYzBcdWMyMThcdWM3NTggXHVhYzEyXHVjNzc0IFx1YWMwMVx1YWMwMSBcdWQ1NWMgXHVjOTA0XHViODVjIFx1YzhmY1x1YzViNFx1YzljNFx1YjJlNC4gXHVhYzAxIFx1YzkwNFx1Yzc0MCBcdWM1NDRcdWI3OTggXHViNDU4IFx1YzkxMSBcdWQ1NThcdWIwOThcdWM3NTggXHVkNjE1XHVkMGRjXHVjNzc0XHViMmU0LjxcL3A+XHJcblxyXG48cHJlPlxyXG4mbHQ7dmFyaWFibGUmZ3Q7IHRydWVcclxuJmx0O3ZhcmlhYmxlJmd0OyBmYWxzZVxyXG48XC9wcmU+XHJcblxyXG48cD5cdWFjMTlcdWM3NDAgXHViY2MwXHVjMjE4XHViMjk0IFx1YjQ1MCBcdWJjODggXHVjNzc0XHVjMGMxIFx1YzhmY1x1YzViNFx1YzljMFx1YzljMCBcdWM1NGFcdWIyOTRcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1YWMwMSBcdWQxNGNcdWMyYTRcdWQyYjggXHVjZjAwXHVjNzc0XHVjMmE0XHVjNzU4IFx1YjA1ZFx1YzVkMFx1YjI5NCBcdWJjYzRcdWQ0NWMoKikgXHVkNTU4XHViMDk4XHVhYzAwIFx1YzhmY1x1YzViNFx1YzljMFx1YmE3MCwgXHVjNzg1XHViODI1XHVjNzU4IFx1YjA1ZFx1YzVkMFx1YjI5NCBcdWM3NGNcdWM3NTggXHVjODE1XHVjMjE4IFx1YjQ1MCBcdWFjMWNcdWFjMDAgXHVkNTVjIFx1YzkwNFx1Yjg1YyBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQuPFwvcD5cclxuIiwib3V0cHV0IjoiPHA+XHVhYzAxIFx1ZDE0Y1x1YzJhNFx1ZDJiOCBcdWNmMDBcdWM3NzRcdWMyYTRcdWI5YzhcdWIyZTQgXHVkNTVjIFx1YzkwNFx1YzUyOSBcdWNmMDBcdWM3NzRcdWMyYTQgXHViYzg4XHVkNjM4XHViOTdjIFx1ZDQ1Y1x1YzJkY1x1ZDU1OFx1YWNlMCwgXHVhZGY4IFx1YjRhNFx1YzVkMCZuYnNwOzxzdHJvbmc+dHJ1ZTxcL3N0cm9uZz4sJm5ic3A7PHN0cm9uZz5mYWxzZTxcL3N0cm9uZz4sJm5ic3A7PHN0cm9uZz51bmtub3duPFwvc3Ryb25nPiZuYnNwO1x1YzkxMSBcdWM4ZmNcdWM1YjRcdWM5YzQgXHViMTdjXHViOWFjXHVjMmRkXHVjNWQwIFx1YzU0Y1x1YjlkZVx1Yzc0MCBcdWFjODNcdWM3NDQgXHViYjM4XHVjODFjXHVjNWQwXHVjMTFjIFx1YzEyNFx1YmE4NVx1ZDU1YyBcdWIzMDBcdWI4NWMgXHVjZDljXHViODI1XHVkNTVjXHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWNkOWNcdWI4MjUgXHVkM2VjXHViOWY3XHVjNzQwIFx1YzYwOFx1YzgxYyBcdWNkOWNcdWI4MjVcdWM3NDQgXHVkMWI1XHVkNTc0IFx1ZDY1NVx1Yzc3OFx1ZDU2MCBcdWMyMTggXHVjNzg4XHViMmU0LjxcL3A+XHJcbiIsImhpbnQiOiIiLCJvcmlnaW5hbCI6IjAiLCJwcm9ibGVtX2xhbmdfY29kZSI6Ilx1ZDU1Y1x1YWQ2ZFx1YzViNCJ9LHsicHJvYmxlbV9pZCI6IjE5MDEiLCJwcm9ibGVtX2xhbmciOiIxIiwidGl0bGUiOiJFdmFsdWF0aW5nIExvZ2ljIEV4cHJlc3Npb25zIiwiZGVzY3JpcHRpb24iOiI8cD48aW1nIGFsdD1cIlwiIHNyYz1cImh0dHBzOlwvXC9vbmxpbmVqdWRnZWltYWdlcy5zMy1hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tXC9wcm9ibGVtXC8xOTAxXC8xLmdpZlwiIHN0eWxlPVwiZmxvYXQ6cmlnaHQ7IGhlaWdodDoxMjJweDsgd2lkdGg6MjQ3cHhcIiBcLz5Mb2dpYyBleHByZXNzaW9ucyBvY2N1ciBmcmVxdWVudGx5IGluIGNvbXB1dGVyIHByb2dyYW1zLiBUaGUgZWxlbWVudHMgb2YgbG9naWMgZXhwcmVzc2lvbnMgYXJlOjxcL3A+XHJcblxyXG48dWw+XHJcblx0PGxpPnZhcmlhYmxlcywgd2hpY2ggbWF5IGhhdmUgdGhlIHZhbHVlcyB0cnVlIG9yIGZhbHNlPFwvbGk+XHJcblx0PGxpPnVuYXJ5IGFuZCBiaW5hcnkgbG9naWMgb3BlcmF0b3JzPFwvbGk+XHJcblx0PGxpPnBhcmVudGhlc2VzIHdoaWNoIG1heSBhZmZlY3QgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBvcGVyYXRpb25zIGFyZSBjYXJyaWVkIG91dDxcL2xpPlxyXG48XC91bD5cclxuXHJcbjxwPlVuYXJ5IG9wZXJhdG9ycyBvcGVyYXRlIG9uIG9uZSB2YXJpYWJsZSwgd2hlcmVhcyBiaW5hcnkgb3BlcmF0b3JzIG9wZXJhdGUgb24gdHdvIHZhcmlhYmxlcy4gQSBjb21tb24gdW5hcnkgbG9naWMgb3BlcmF0b3IgaXMgTk9UOyBzb21lIGNvbW1vbiBiaW5hcnkgbG9naWMgb3BlcmF0b3JzIGFyZSBBTkQsIE9SLCBYT1IsIE5BTkQgYW5kIE5PUi48XC9wPlxyXG5cclxuPHA+QSBsb2dpYyBvcGVyYXRvciBjYW4gYmUgZGVmaW5lZCBieSBhICYjMzk7dHJ1dGggdGFibGUmIzM5OyAob25lLWRpbWVuc2lvbmFsIGZvciB1bmFyeSBvcGVyYXRvcnMsIHR3by1kaW1lbnNpb25hbCBmb3IgYmluYXJ5IG9wZXJhdG9ycykuIEZvciBleGFtcGxlcywgc2VlIHRoZSBkaWFncmFtLjxcL3A+XHJcblxyXG48cD48aW1nIGFsdD1cIlwiIHNyYz1cImh0dHBzOlwvXC9vbmxpbmVqdWRnZWltYWdlcy5zMy1hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tXC9wcm9ibGVtXC8xOTAxXC8yLmpwZ1wiIFwvPjxcL3A+XHJcblxyXG48cD5Ob3RlIHRoYXQgZmFsc2UgY29tZXMgYmVmb3JlIHRydWUgaW4gdGhlIGhlYWRlciBhY3Jvc3MgdGhlIHRvcCAoZm9yIHVuYXJ5IG9yIHRoZSByaWdodCBvcGVyYW5kIG9mIGJpbmFyeSBvcGVyYXRvcnMpLCBhcyB3ZWxsIGFzIG9uIHRoZSBsZWZ0IG1hcmdpbiAoZm9yIHRoZSBsZWZ0IG9wZXJhbmQgb2YgYmluYXJ5IG9wZXJhdG9ycykuPFwvcD5cclxuXHJcbjxwPlR3byBleGFtcGxlcyBvZiBsb2dpYyBleHByZXNzaW9ucyBhcmU6PFwvcD5cclxuXHJcbjxvbD5cclxuXHQ8bGk+KHggQU5EIChOT1QoeSBOQU5EIHopKSk8XC9saT5cclxuXHQ8bGk+KHggT1IgKChOT1QgeSkgWE9SIHopKTxcL2xpPlxyXG48XC9vbD5cclxuXHJcbjxwPkZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBwcm9ibGVtLCB0aGUgcHJlY2lzZSBzdHJ1Y3R1cmUgb2YgYSBsb2dpYyBleHByZXNzaW9uIGlzIGRlZmluZWQgYnkgdGhlIGdyYW1tYXI6PFwvcD5cclxuXHJcbjxwcmU+XHJcbiZsdDtleHByZXNzaW9uJmd0OyA9ICZsdDt2YXJpYWJsZSZndDsgfCAoICZsdDtleHByZXNzaW9uJmd0OyAmbHQ7b3BlcmF0b3ImZ3Q7ICZsdDtleHByZXNzaW9uJmd0OyApIHwgKCAmbHQ7b3BlcmF0b3ImZ3Q7ICZsdDtleHByZXNzaW9uJmd0OylcclxuJmx0O3ZhcmlhYmxlJmd0OyA9ICZsdDtsb3dlcmNhc2VfbGV0dGVyJmd0O1xyXG4mbHQ7b3BlcmF0b3ImZ3Q7ID0gJmx0O3VwcGVyY2FzZV9sZXR0ZXImZ3Q7IHwgJmx0O29wZXJhdG9yJmd0OyAmbHQ7dXBwZXJjYXNlX2xldHRlciZndDs8XC9wcmU+XHJcblxyXG48cD4oSGVyZSB0aGUgdmVydGljYWwgYmFyICYjMzk7fCYjMzk7IGlzIHByb25vdW5jZWQgJiMzOTtvciYjMzk7IGFuZCBpcyB1c2VkIHRvIGRlZmluZSB0aGUgZ3JhbW1hcjsgaXQgZG9lcyBub3QgYWN0dWFsbHkgc2hvdyB1cCBpbiB0aGUgZXhwcmVzc2lvbi4pICZsdDtsb3dlcmNhc2VfbGV0dGVyJmd0OyBhbmQgJmx0O3VwcGVyY2FzZV9sZXR0ZXImZ3Q7IGhhdmUgdGhlaXIgdXN1YWwgbWVhbmluZ3MuPFwvcD5cclxuXHJcbjxwPkluIHNvbWUgY2FzZXMsIGl0IGlzIHBvc3NpYmxlIHRvIGV2YWx1YXRlIGEgbG9naWMgZXhwcmVzc2lvbiBldmVuIHdoZW4gbm90IGFsbCBvZiB0aGUgdmFyaWFibGVzIGhhdmUgYmVlbiBhc3NpZ25lZCB2YWx1ZXMuIENvbnNpZGVyIEV4YW1wbGUgKDEpIGFib3ZlLCBhbmQgc3VwcG9zZSB0aGF0IHkgPSBmYWxzZSwgYnV0IHRoZSB2YWx1ZXMgb2YgeCBhbmQgeiBhcmUgbm90IGtub3duLiBJdCBjYW4gYmUgc2VlbiB0aGF0IHRoZSBnaXZlbiBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBmYWxzZSByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZXMgb2YgdGhlIHVuYXNzaWduZWQgdmFyaWFibGVzLiBPbiB0aGUgb3RoZXIgaGFuZCwgc3VwcG9zZSB0aGF0LCBpbiB0aGUgc2FtZSBFeGFtcGxlICgxKSwgeCA9IHRydWUsIHkgPSB0cnVlLCBhbmQgeiBpcyB1bmtub3duLiBpdCBpcyBub3QgcG9zc2libGUgdG8gZGV0ZXJtaW5lIHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiB3aXRob3V0IGtub3dpbmcgdGhlIHZhbHVlIG9mIHouPFwvcD5cclxuIiwiaW5wdXQiOiI8cD5UaGUgaW5wdXQgd2lsbCBjb250YWluIGRhdGEgZm9yIG9uZSBvciBtb3JlIHRlc3QgY2FzZXMuIEZvciBlYWNoIHRlc3QgY2FzZSwgdGhlIGZpcnN0IGxpbmUgb2YgaW5wdXQgd2lsbCBjb250YWluIHR3byBub24tbmVnYXRpdmUgaW50ZWdlcnMgKG5vdCBleGNlZWRpbmcgMTAwKSwgdGhlIG51bWJlciBvZiB1bmFyeSBvcGVyYXRvcnMgYW5kIHRoZSBudW1iZXIgb2YgYmluYXJ5IG9wZXJhdG9ycyB0byBiZSBjb25zaWRlcmVkIGZvciB0aGF0IGNhc2UuIFRoZSBmaXJzdCBsaW5lIHdpbGwgYmUgZm9sbG93ZWQgYnkgc2V2ZXJhbCBsaW5lcyB0aGF0IHdpbGwgbmFtZSBlYWNoIG9wZXJhdG9yIGFuZCBkZWZpbmUgaXQgaW4gdGhlIGZvcm0gb2YgYSB0cnV0aCB0YWJsZSwgYXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHR3byBwYXJhZ3JhcGhzLiBUaGUgbmFtZXMgb2YgdGhlIG9wZXJhdG9ycyBkbyBub3QgZXhjZWVkIDIwIGNoYXJhY3RlcnMgYW5kIGFyZSB1bmlxdWUgZm9yIGVhY2ggb3BlcmF0b3IuPFwvcD5cclxuXHJcbjxwPkZpcnN0LCBlYWNoIHVuYXJ5IG9wZXJhdG9yIHdpbGwgYmUgZGVmaW5lZCBpbiB0d28gbGluZXMgb2YgaW5wdXQ6IHRoZSBmaXJzdCBvZiB0aGVzZSB0d28gbGluZXMgd2lsbCBjb250YWluIHRoZSBuYW1lIG9mIHRoZSBvcGVyYXRvcjsgdGhlIHNlY29uZCBsaW5lIHdpbGwgY29udGFpbiB0d28gdHJ1ZSBcLyBmYWxzZSBlbnRyaWVzIHRoYXQgZGVmaW5lIHRoZSB0YWJsZSBmb3IgdGhlIHVuYXJ5IG9wZXJhdG9yLCB3aXRob3V0IHRoZSBpbXBsaWVkIGNvbHVtbiBoZWFkZXJzIGFjcm9zcyB0aGUgdG9wLjxcL3A+XHJcblxyXG48cD5BZnRlciB0aGUgdW5hcnkgb3BlcmF0b3JzIGhhdmUgYmVlbiBkZWZpbmVkLCBlYWNoIGJpbmFyeSBvcGVyYXRvciB3aWxsIGJlIGRlZmluZWQgaW4gdGhyZWUgbGluZXMgb2YgaW5wdXQ6IHRoZSBmaXJzdCBvZiB0aGVzZSB0aHJlZSBsaW5lcyB3aWxsIGNvbnRhaW4gdGhlIG5hbWUgb2YgdGhlIG9wZXJhdG9yOyB0aGUgc2Vjb25kIGFuZCB0aGlyZCBsaW5lcyB3aWxsIGVhY2ggY29udGFpbiB0d28gdHJ1ZSBcLyBmYWxzZSBlbnRyaWVzLiBUaGVzZSB0d28gbGluZXMgZGVmaW5lIHRoZSB0YWJsZSBmb3IgdGhlIGJpbmFyeSBvcGVyYXRvciwgd2l0aG91dCB0aGUgaW1wbGllZCBjb2x1bW4gaGVhZGVycyBhY3Jvc3MgdGhlIHRvcCBhbmQgcm93IGhlYWRlcnMgb24gdGhlIGxlZnQgbWFyZ2luLjxcL3A+XHJcblxyXG48cD5UaGUgb3BlcmF0b3IgdGFibGVzIHdpbGwgYmUgZm9sbG93ZWQgYnkgYSBsaW5lIGNvbnRhaW5pbmcgYSB2YWxpZCBsb2dpYyBleHByZXNzaW9uIHNhdGlzZnlpbmcgdGhlIGFib3ZlIGdyYW1tYXIuIFZhcmlhYmxlcyB3aWxsIGJlIHNlcGFyYXRlZCBmcm9tIGFkamFjZW50IGxvZ2ljIG9wZXJhdG9ycyBieSBvbmUgb3IgbW9yZSBibGFuayBzcGFjZXMuIFBhcmVudGhlc2VzIG1heSBvciBtYXkgbm90IGJlIHNlcGFyYXRlZCBmcm9tIGFkamFjZW50IGVsZW1lbnRzIG9mIHRoZSBleHByZXNzaW9uIGJ5IGJsYW5rIHNwYWNlcy4gWW91IG1heSBhc3N1bWUgdGhhdCBubyB2YXJpYWJsZSB3aWxsIG9jY3VyIG1vcmUgdGhhbiBvbmNlIGluIGFuIGV4cHJlc3Npb24uIFRoZSBleHByZXNzaW9uIHdpbGwgY29uc2lzdCBvZiBhdCBsZWFzdCAxIGJ1dCBub3QgbW9yZSB0aGFuIDUwMCBjaGFyYWN0ZXJzLjxcL3A+XHJcblxyXG48cD5UaGUgZXhwcmVzc2lvbiB3aWxsIGJlIGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZSBsaW5lcyB0aGF0IGNvbXByaXNlIGEgdGFibGUgb2YgdmFsdWVzLiBFYWNoIG9mIHRoZXNlIGxpbmVzIHdpbGwgaGF2ZSBvbmUgb2YgdGhlIHR3byBmb3Jtczo8XC9wPlxyXG5cclxuPHByZT5cclxuJmx0O3ZhcmlhYmxlJmd0OyB0cnVlXHJcbiZsdDt2YXJpYWJsZSZndDsgZmFsc2U8XC9wcmU+XHJcblxyXG48cD5ObyB2YXJpYWJsZSB3aWxsIGFwcGVhciBtb3JlIHRoYW4gb25jZSBpbiB0aGUgdGFibGUuPFwvcD5cclxuXHJcbjxwPlRoZSBlbmQgb2YgZWFjaCB0ZXN0IGNhc2Ugd2lsbCBiZSBtYXJrZWQgYnkgYSBsaW5lIGNvbnRhaW5pbmcgYSBzaW5nbGUgYXN0ZXJpc2suIEVuZCBvZiBpbnB1dCB3aWxsIGJlIG1hcmtlZCBieSBhIGxpbmUgY29udGFpbmluZyB0d28gbmVnYXRpdmUgaW50ZWdlcnMuPFwvcD5cclxuIiwib3V0cHV0IjoiPHA+Rm9yIGVhY2ggdGVzdCBjYXNlIHRoZXJlIHdpbGwgYmUgb25lIGxpbmUgb2Ygb3V0cHV0LiBUaGUgY2FzZSBudW1iZXIgd2lsbCBiZSBwcmludGVkIGluIHRoZSBmb3JtYXQgb2YgdGhlIHNhbXBsZSBvdXRwdXQuPFwvcD5cclxuXHJcbjxwPkl0IHdpbGwgYmUgZm9sbG93ZWQgYnkgb25lIG9mIHRoZSB3b3JkczogdHJ1ZSwgZmFsc2UsIG9yIHVua25vd247IHdoaWNoZXZlciBpcyBhcHByb3ByaWF0ZSBmb3IgdGhlIGdpdmVuIGV4cHJlc3Npb24sIGFzIGV4cGxhaW5lZCBhYm92ZS48XC9wPlxyXG5cclxuPHA+VGhlIG91dHB1dCBmb3JtYXQgaXMgaWxsdXN0cmF0ZWQgaW4gdGhlIHNhbXBsZSBvdXRwdXQuPFwvcD5cclxuIiwiaGludCI6IiIsIm9yaWdpbmFsIjoiMSIsInByb2JsZW1fbGFuZ19jb2RlIjoiXHVjNjAxXHVjNWI0In1d