시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 128 MB162216.667%

문제

프로그래머는 다양한 프로그래밍언어에서 함수를 오버로드할 수 있다. 함수 오버로드란 같은 함수의 이름을 가지고 있으나, 매개변수가 다른 함수이다. 그러나, Ada와 같은 언어에서는 리턴 타입도 오버로드할 수 있다. 즉, 같은 이름과 매개변수를 가지고 있으나, 리턴타입이 다를 수도 있는 것이다.

다음은 함수 오버로딩의 예이다.

char f(float x, int y)
char f(float x, float y)
float f(float x, float y)
float g(float x, int y)
float g(int x, float y)

위와 같이 함수 선언이 있을 때, 아래와 같은 변수 선언과 함수 호출을 포함한 프로그램을 작성할 수 있다.

float a = 1.0, b = 2.0;
int c = 3;
float d = g(c, f(a, b));

f의 처음 두 선언은 위의 함수 f에 해당하지 않는다. 하지만, 세 번째 함수는 f(<float>, <float>)와 같은 형식이라 매개변수의 타입이 같고, 리턴 타입도 g(<int>, <float>)float과 같기 때문에 해당한다. 따라서, 3번째 f와 두 번째 g를 사용할 수 있다.

이렇게 3번째 f와 2번째 g를 사용했기 때문에, 다음과 같이 숫자와 함께 표현할 수 있다.

d = g2(c, f3(a, b))

하지만, 위의 함수 선언을 이용해서 c = g(a, f(a, c))는 사용할 수 없다.

마지막으로 다음과 같은 함수 선언이 있다고 하자.

float x(float w)
int x(float w)
char y(float v)
char y(int v)

위와 같은 선언에서 다음과 같은 함수 호출은 애매모호(ambiguous)하기 때문에 사용할 수 없다.

float a = 1.0
char c = y(x(a))

입력

입력은 여러 개의 함수 선언과 함수 호출으로 이루어져 있다. 함수 선언은 한 줄에 하나씩 주어지며, 다음과 같은 형태이다.

name num_params param(1) param(2) ... param(num_params) rettype

name은 함수의 이름이고, param(i)는 i번째 매개변수의 데이터 타입이다. rettype은 함수의 리턴값의 데이터 타입이다. (이 문제에서 void 함수는 없다) num_params는 적어도 1이고 많아야 9이다. 매개변수는 이름을 갖지 않는다. 함수의 이름은 알파벳 소문자 한글자이고, 데이터 타입은 알파벳 대문자 한글자이다. 같은 이름을 갖는 다른 함수는 연속으로 나타나며, 같은 이름을 갖는 함수는 많아야 500개이다. 두 함수의 선언이 정확하게 일치하는 경우는 없다.

문제에서 설명한 것 처럼 함수에 숫자를 붙여서 나타내는 것의 숫자를 시리얼 넘버라고 한다. 이때, 시리얼 넘버는 새로운 함수의 이름이 시작할 때 1이 되고, 선언이 나타날때마다 1씩 증가한다.

함수 선언의 마지막에는 '#'가 주어진다. 그 다음줄부터 함수 호출이 한 줄에 하나씩 주어진다.

함수 호출은 다음과 같은 문법을 따른다.

<function_call> := <data_type> = <right_hand_side>
<right_hand_side> := <fname> <num_params> <param_list>
<param_list> := <param> | <param_list> <param>
<param> := <data_type> | <right_hand_side>
<data_type> := <upper_case_letter>
<num_params> := '1' | '2' | ... | '9'
<fname> := <lower_case_letter>

:=와 |는 문법 정의에만 등장하는 기호이고, 실제 함수 호출에는 나타나지 않는다. 각 함수 호출에서 호출하는 함수의 이름은 500개를 넘지 않는다. 함수 호출의 마지막 줄에는 '#'가 하나 주어진다.

출력

입력으로 주어진 각 함수 호출에 대해서, 만약 어떤 함수를 사용했는지 유일하게 결정할 수 있다면, 입력 함수 호출에서 함수의 이름에 시리얼 넘버만 추가한 형태로 출력한다. 만약, 해당하는 함수가 없어서 호출할 수 없다면 "impossible"을 출력하고, 애매모호해서 호출하는 방법이 여러 가지라면, "ambiguous"를 출력하고, 경우의 수를 출력한다. 만약, 1000가지를 넘는 방법으로 호출할 수 있다면 "> 1000"을 경우의 수 대신 출력한다.

예제 입력 1

f 2 A B C
f 2 A A C
f 2 A A A
g 2 A B A
g 2 B A A
x 1 A A
x 1 A B
y 1 A C
y 1 B C
h 2 A B E
h 2 C D F
k 2 E F A
#
A = g 2 B f 2 A A
B = g 2 A f 2 A B
C = y 1 x 1 A
A = k 2 h 2 A B h 2 C D
#

예제 출력 1

A = g2 2 B f3 2 A A
impossible
ambiguous 2
A = k1 2 h1 2 A B h2 2 C D
W3sicHJvYmxlbV9pZCI6IjQ4MDIiLCJwcm9ibGVtX2xhbmciOiIwIiwidGl0bGUiOiJcdWQ1NjhcdWMyMTggXHVjNjI0XHViYzg0XHViODVjXHViNTI5IiwiZGVzY3JpcHRpb24iOiI8cD5cdWQ1MDRcdWI4NWNcdWFkZjhcdWI3OThcdWJhMzhcdWIyOTQgXHViMmU0XHVjNTkxXHVkNTVjIFx1ZDUwNFx1Yjg1Y1x1YWRmOFx1Yjc5OFx1YmMwZFx1YzViOFx1YzViNFx1YzVkMFx1YzExYyBcdWQ1NjhcdWMyMThcdWI5N2MgXHVjNjI0XHViYzg0XHViODVjXHViNGRjXHVkNTYwIFx1YzIxOCBcdWM3ODhcdWIyZTQuIFx1ZDU2OFx1YzIxOCBcdWM2MjRcdWJjODRcdWI4NWNcdWI0ZGNcdWI3ODAgXHVhYzE5XHVjNzQwIFx1ZDU2OFx1YzIxOFx1Yzc1OCBcdWM3NzRcdWI5ODRcdWM3NDQgXHVhYzAwXHVjOWMwXHVhY2UwIFx1Yzc4OFx1YzczY1x1YjA5OCwgXHViOWU0XHVhYzFjXHViY2MwXHVjMjE4XHVhYzAwIFx1YjJlNFx1Yjk3OCBcdWQ1NjhcdWMyMThcdWM3NzRcdWIyZTQuIFx1YWRmOFx1YjdlY1x1YjA5OCwgQWRhXHVjNjQwIFx1YWMxOVx1Yzc0MCBcdWM1YjhcdWM1YjRcdWM1ZDBcdWMxMWNcdWIyOTQgXHViOWFjXHVkMTM0IFx1ZDBjMFx1Yzc4NVx1YjNjNCBcdWM2MjRcdWJjODRcdWI4NWNcdWI0ZGNcdWQ1NjAgXHVjMjE4IFx1Yzc4OFx1YjJlNC4gXHVjOTg5LCBcdWFjMTlcdWM3NDAgXHVjNzc0XHViOTg0XHVhY2ZjIFx1YjllNFx1YWMxY1x1YmNjMFx1YzIxOFx1Yjk3YyBcdWFjMDBcdWM5YzBcdWFjZTAgXHVjNzg4XHVjNzNjXHViMDk4LCBcdWI5YWNcdWQxMzRcdWQwYzBcdWM3ODVcdWM3NzQgXHViMmU0XHViOTdjIFx1YzIxOFx1YjNjNCBcdWM3ODhcdWIyOTQgXHVhYzgzXHVjNzc0XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWIyZTRcdWM3NGNcdWM3NDAgXHVkNTY4XHVjMjE4IFx1YzYyNFx1YmM4NFx1Yjg1Y1x1YjUyOVx1Yzc1OCBcdWM2MDhcdWM3NzRcdWIyZTQuPFwvcD5cclxuXHJcbjxwcmUgY2xhc3M9XCJicnVzaDpjOyB0b29sYmFyOmZhbHNlO1wiPlxyXG5jaGFyIGYoZmxvYXQgeCwgaW50IHkpXHJcbmNoYXIgZihmbG9hdCB4LCBmbG9hdCB5KVxyXG5mbG9hdCBmKGZsb2F0IHgsIGZsb2F0IHkpXHJcbmZsb2F0IGcoZmxvYXQgeCwgaW50IHkpXHJcbmZsb2F0IGcoaW50IHgsIGZsb2F0IHkpXHJcbjxcL3ByZT5cclxuXHJcbjxwPlx1YzcwNFx1YzY0MCBcdWFjMTlcdWM3NzQgXHVkNTY4XHVjMjE4IFx1YzEyMFx1YzViOFx1Yzc3NCBcdWM3ODhcdWM3NDQgXHViNTRjLCBcdWM1NDRcdWI3OThcdWM2NDAgXHVhYzE5XHVjNzQwIFx1YmNjMFx1YzIxOCBcdWMxMjBcdWM1YjhcdWFjZmMgXHVkNTY4XHVjMjE4IFx1ZDYzOFx1Y2Q5Y1x1Yzc0NCBcdWQzZWNcdWQ1NjhcdWQ1NWMgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzQ0IFx1Yzc5MVx1YzEzMVx1ZDU2MCBcdWMyMTggXHVjNzg4XHViMmU0LjxcL3A+XHJcblxyXG48cHJlIGNsYXNzPVwiYnJ1c2g6YzsgdG9vbGJhcjpmYWxzZTtcIj5cclxuZmxvYXQgYSA9IDEuMCwgYiA9IDIuMDtcclxuaW50IGMgPSAzO1xyXG5mbG9hdCBkID0gZyhjLCBmKGEsIGIpKTtcclxuPFwvcHJlPlxyXG5cclxuPHA+PGNvZGU+ZjxcL2NvZGU+XHVjNzU4IFx1Y2M5OFx1Yzc0YyBcdWI0NTAgXHVjMTIwXHVjNWI4XHVjNzQwIFx1YzcwNFx1Yzc1OCBcdWQ1NjhcdWMyMTggPGNvZGU+ZjxcL2NvZGU+XHVjNWQwIFx1ZDU3NFx1YjJmOVx1ZDU1OFx1YzljMCBcdWM1NGFcdWIyOTRcdWIyZTQuIFx1ZDU1OFx1YzljMFx1YjljYywgXHVjMTM4IFx1YmM4OFx1YzlmOCBcdWQ1NjhcdWMyMThcdWIyOTQgPGNvZGU+ZigmbHQ7ZmxvYXQmZ3Q7LCAmbHQ7ZmxvYXQmZ3Q7KTxcL2NvZGU+XHVjNjQwIFx1YWMxOVx1Yzc0MCBcdWQ2MTVcdWMyZGRcdWM3NzRcdWI3N2MgXHViOWU0XHVhYzFjXHViY2MwXHVjMjE4XHVjNzU4IFx1ZDBjMFx1Yzc4NVx1Yzc3NCBcdWFjMTlcdWFjZTAsIFx1YjlhY1x1ZDEzNCBcdWQwYzBcdWM3ODVcdWIzYzQgPGNvZGU+ZygmbHQ7aW50Jmd0OywgJmx0O2Zsb2F0Jmd0Oyk8XC9jb2RlPlx1Yzc1OCA8Y29kZT5mbG9hdDxcL2NvZGU+XHVhY2ZjIFx1YWMxOVx1YWUzMCBcdWI1NGNcdWJiMzhcdWM1ZDAgXHVkNTc0XHViMmY5XHVkNTVjXHViMmU0LiBcdWI1MzBcdWI3N2NcdWMxMWMsIDNcdWJjODhcdWM5ZjggPGNvZGU+ZjxcL2NvZGU+XHVjNjQwIFx1YjQ1MCBcdWJjODhcdWM5ZjggPGNvZGU+ZzxcL2NvZGU+XHViOTdjIFx1YzBhY1x1YzZhOVx1ZDU2MCBcdWMyMTggXHVjNzg4XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWM3NzRcdWI4MDdcdWFjOGMgM1x1YmM4OFx1YzlmOCZuYnNwOzxjb2RlPmY8XC9jb2RlPlx1YzY0MCAyXHViYzg4XHVjOWY4IDxjb2RlPmc8XC9jb2RlPlx1Yjk3YyBcdWMwYWNcdWM2YTlcdWQ1ODhcdWFlMzAgXHViNTRjXHViYjM4XHVjNWQwLCBcdWIyZTRcdWM3NGNcdWFjZmMgXHVhYzE5XHVjNzc0IFx1YzIyYlx1Yzc5MFx1YzY0MCBcdWQ1NjhcdWFlZDggXHVkNDVjXHVkNjA0XHVkNTYwIFx1YzIxOCBcdWM3ODhcdWIyZTQuPFwvcD5cclxuXHJcbjxwcmUgY2xhc3M9XCJicnVzaDpjOyB0b29sYmFyOmZhbHNlO1wiPlxyXG5kID0gZzIoYywgZjMoYSwgYikpXHJcbjxcL3ByZT5cclxuXHJcbjxwPlx1ZDU1OFx1YzljMFx1YjljYywgXHVjNzA0XHVjNzU4IFx1ZDU2OFx1YzIxOCBcdWMxMjBcdWM1YjhcdWM3NDQgXHVjNzc0XHVjNmE5XHVkNTc0XHVjMTFjIDxjb2RlPmMgPSBnKGEsIGYoYSwgYykpPFwvY29kZT5cdWIyOTQgXHVjMGFjXHVjNmE5XHVkNTYwIFx1YzIxOCBcdWM1YzZcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1YjljOFx1YzljMFx1YjljOVx1YzczY1x1Yjg1YyBcdWIyZTRcdWM3NGNcdWFjZmMgXHVhYzE5XHVjNzQwIFx1ZDU2OFx1YzIxOCBcdWMxMjBcdWM1YjhcdWM3NzQgXHVjNzg4XHViMmU0XHVhY2UwIFx1ZDU1OFx1Yzc5MC48XC9wPlxyXG5cclxuPHByZSBjbGFzcz1cImJydXNoOmM7IHRvb2xiYXI6ZmFsc2U7XCI+XHJcbmZsb2F0IHgoZmxvYXQgdylcclxuaW50IHgoZmxvYXQgdylcclxuY2hhciB5KGZsb2F0IHYpXHJcbmNoYXIgeShpbnQgdilcclxuPFwvcHJlPlxyXG5cclxuPHA+XHVjNzA0XHVjNjQwIFx1YWMxOVx1Yzc0MCBcdWMxMjBcdWM1YjhcdWM1ZDBcdWMxMWMgXHViMmU0XHVjNzRjXHVhY2ZjIFx1YWMxOVx1Yzc0MCBcdWQ1NjhcdWMyMTggXHVkNjM4XHVjZDljXHVjNzQwIFx1YzU2MFx1YjllNFx1YmFhOFx1ZDYzOChhbWJpZ3VvdXMpXHVkNTU4XHVhZTMwIFx1YjU0Y1x1YmIzOFx1YzVkMCBcdWMwYWNcdWM2YTlcdWQ1NjAgXHVjMjE4IFx1YzVjNlx1YjJlNC48XC9wPlxyXG5cclxuPHByZSBjbGFzcz1cImJydXNoOmM7IHRvb2xiYXI6ZmFsc2U7XCI+XHJcbmZsb2F0IGEgPSAxLjBcclxuY2hhciBjID0geSh4KGEpKVxyXG48XC9wcmU+XHJcbiIsImlucHV0IjoiPHA+XHVjNzg1XHViODI1XHVjNzQwIFx1YzVlY1x1YjdlYyBcdWFjMWNcdWM3NTggXHVkNTY4XHVjMjE4IFx1YzEyMFx1YzViOFx1YWNmYyBcdWQ1NjhcdWMyMTggXHVkNjM4XHVjZDljXHVjNzNjXHViODVjIFx1Yzc3NFx1YjhlOFx1YzViNFx1YzgzOCBcdWM3ODhcdWIyZTQuIFx1ZDU2OFx1YzIxOCBcdWMxMjBcdWM1YjhcdWM3NDAgXHVkNTVjIFx1YzkwNFx1YzVkMCBcdWQ1NThcdWIwOThcdWM1MjkgXHVjOGZjXHVjNWI0XHVjOWMwXHViYTcwLCBcdWIyZTRcdWM3NGNcdWFjZmMgXHVhYzE5XHVjNzQwIFx1ZDYxNVx1ZDBkY1x1Yzc3NFx1YjJlNC48XC9wPlxyXG5cclxuPHByZT5cclxubmFtZSBudW1fcGFyYW1zIHBhcmFtKDEpIHBhcmFtKDIpIC4uLiBwYXJhbShudW1fcGFyYW1zKSByZXR0eXBlPFwvcHJlPlxyXG5cclxuPHA+bmFtZVx1Yzc0MCBcdWQ1NjhcdWMyMThcdWM3NTggXHVjNzc0XHViOTg0XHVjNzc0XHVhY2UwLCBwYXJhbShpKVx1YjI5NCBpXHViYzg4XHVjOWY4IFx1YjllNFx1YWMxY1x1YmNjMFx1YzIxOFx1Yzc1OCBcdWIzNzBcdWM3NzRcdWQxMzAgXHVkMGMwXHVjNzg1XHVjNzc0XHViMmU0LiByZXR0eXBlXHVjNzQwIFx1ZDU2OFx1YzIxOFx1Yzc1OCBcdWI5YWNcdWQxMzRcdWFjMTJcdWM3NTggXHViMzcwXHVjNzc0XHVkMTMwIFx1ZDBjMFx1Yzc4NVx1Yzc3NFx1YjJlNC4gKFx1Yzc3NCBcdWJiMzhcdWM4MWNcdWM1ZDBcdWMxMWMgdm9pZCBcdWQ1NjhcdWMyMThcdWIyOTQgXHVjNWM2XHViMmU0KSBudW1fcGFyYW1zXHViMjk0IFx1YzgwMVx1YzViNFx1YjNjNCAxXHVjNzc0XHVhY2UwIFx1YjljZVx1YzU0NFx1YzU3YyA5XHVjNzc0XHViMmU0LiBcdWI5ZTRcdWFjMWNcdWJjYzBcdWMyMThcdWIyOTQgXHVjNzc0XHViOTg0XHVjNzQ0IFx1YWMxNlx1YzljMCBcdWM1NGFcdWIyOTRcdWIyZTQuIFx1ZDU2OFx1YzIxOFx1Yzc1OCBcdWM3NzRcdWI5ODRcdWM3NDAgXHVjNTRjXHVkMzBjXHViY2IzIFx1YzE4Y1x1YmIzOFx1Yzc5MCBcdWQ1NWNcdWFlMDBcdWM3OTBcdWM3NzRcdWFjZTAsIFx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWQwYzBcdWM3ODVcdWM3NDAgXHVjNTRjXHVkMzBjXHViY2IzIFx1YjMwMFx1YmIzOFx1Yzc5MCBcdWQ1NWNcdWFlMDBcdWM3OTBcdWM3NzRcdWIyZTQuIFx1YWMxOVx1Yzc0MCBcdWM3NzRcdWI5ODRcdWM3NDQgXHVhYzE2XHViMjk0IFx1YjJlNFx1Yjk3OCBcdWQ1NjhcdWMyMThcdWIyOTQgXHVjNWYwXHVjMThkXHVjNzNjXHViODVjIFx1YjA5OFx1ZDBjMFx1YjA5OFx1YmE3MCwgXHVhYzE5XHVjNzQwIFx1Yzc3NFx1Yjk4NFx1Yzc0NCBcdWFjMTZcdWIyOTQgXHVkNTY4XHVjMjE4XHViMjk0IFx1YjljZVx1YzU0NFx1YzU3YyA1MDBcdWFjMWNcdWM3NzRcdWIyZTQuIFx1YjQ1MCBcdWQ1NjhcdWMyMThcdWM3NTggXHVjMTIwXHVjNWI4XHVjNzc0IFx1YzgxNVx1ZDY1NVx1ZDU1OFx1YWM4YyBcdWM3N2NcdWNlNThcdWQ1NThcdWIyOTQgXHVhY2JkXHVjNmIwXHViMjk0IFx1YzVjNlx1YjJlNC48XC9wPlxyXG5cclxuPHA+XHViYjM4XHVjODFjXHVjNWQwXHVjMTFjIFx1YzEyNFx1YmE4NVx1ZDU1YyBcdWFjODMgXHVjYzk4XHViN2ZjIFx1ZDU2OFx1YzIxOFx1YzVkMCBcdWMyMmJcdWM3OTBcdWI5N2MgXHViZDk5XHVjNWVjXHVjMTFjIFx1YjA5OFx1ZDBjMFx1YjBiNFx1YjI5NCBcdWFjODNcdWM3NTggXHVjMjJiXHVjNzkwXHViOTdjIFx1YzJkY1x1YjlhY1x1YzViYyBcdWIxMThcdWJjODRcdWI3N2NcdWFjZTAgXHVkNTVjXHViMmU0LiBcdWM3NzRcdWI1NGMsIFx1YzJkY1x1YjlhY1x1YzViYyBcdWIxMThcdWJjODRcdWIyOTQgXHVjMGM4XHViODVjXHVjNmI0IFx1ZDU2OFx1YzIxOFx1Yzc1OCBcdWM3NzRcdWI5ODRcdWM3NzQgXHVjMmRjXHVjNzkxXHVkNTYwIFx1YjU0YyAxXHVjNzc0IFx1YjQxOFx1YWNlMCwgXHVjMTIwXHVjNWI4XHVjNzc0IFx1YjA5OFx1ZDBjMFx1YjBhMFx1YjU0Y1x1YjljOFx1YjJlNCAxXHVjNTI5IFx1Yzk5ZFx1YWMwMFx1ZDU1Y1x1YjJlNC48XC9wPlxyXG5cclxuPHA+XHVkNTY4XHVjMjE4IFx1YzEyMFx1YzViOFx1Yzc1OCBcdWI5YzhcdWM5YzBcdWI5YzlcdWM1ZDBcdWIyOTQgJiMzOTsjJiMzOTtcdWFjMDAgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiBcdWFkZjggXHViMmU0XHVjNzRjXHVjOTA0XHViZDgwXHVkMTMwIFx1ZDU2OFx1YzIxOCBcdWQ2MzhcdWNkOWNcdWM3NzQgXHVkNTVjIFx1YzkwNFx1YzVkMCBcdWQ1NThcdWIwOThcdWM1MjkgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWQ1NjhcdWMyMTggXHVkNjM4XHVjZDljXHVjNzQwIFx1YjJlNFx1Yzc0Y1x1YWNmYyBcdWFjMTlcdWM3NDAgXHViYjM4XHViYzk1XHVjNzQ0IFx1YjUzMFx1Yjk3OFx1YjJlNC48XC9wPlxyXG5cclxuPHByZT5cclxuJmx0O2Z1bmN0aW9uX2NhbGwmZ3Q7IDo9ICZsdDtkYXRhX3R5cGUmZ3Q7ID0gJmx0O3JpZ2h0X2hhbmRfc2lkZSZndDtcclxuJmx0O3JpZ2h0X2hhbmRfc2lkZSZndDsgOj0gJmx0O2ZuYW1lJmd0OyAmbHQ7bnVtX3BhcmFtcyZndDsgJmx0O3BhcmFtX2xpc3QmZ3Q7XHJcbiZsdDtwYXJhbV9saXN0Jmd0OyA6PSAmbHQ7cGFyYW0mZ3Q7IHwgJmx0O3BhcmFtX2xpc3QmZ3Q7ICZsdDtwYXJhbSZndDtcclxuJmx0O3BhcmFtJmd0OyA6PSAmbHQ7ZGF0YV90eXBlJmd0OyB8ICZsdDtyaWdodF9oYW5kX3NpZGUmZ3Q7XHJcbiZsdDtkYXRhX3R5cGUmZ3Q7IDo9ICZsdDt1cHBlcl9jYXNlX2xldHRlciZndDtcclxuJmx0O251bV9wYXJhbXMmZ3Q7IDo9ICYjMzk7MSYjMzk7IHwgJiMzOTsyJiMzOTsgfCAuLi4gfCAmIzM5OzkmIzM5O1xyXG4mbHQ7Zm5hbWUmZ3Q7IDo9ICZsdDtsb3dlcl9jYXNlX2xldHRlciZndDtcclxuPFwvcHJlPlxyXG5cclxuPHA+Oj1cdWM2NDAgfFx1YjI5NCBcdWJiMzhcdWJjOTUgXHVjODE1XHVjNzU4XHVjNWQwXHViOWNjIFx1YjRmMVx1YzdhNVx1ZDU1OFx1YjI5NCBcdWFlMzBcdWQ2MzhcdWM3NzRcdWFjZTAsIFx1YzJlNFx1YzgxYyBcdWQ1NjhcdWMyMTggXHVkNjM4XHVjZDljXHVjNWQwXHViMjk0IFx1YjA5OFx1ZDBjMFx1YjA5OFx1YzljMCBcdWM1NGFcdWIyOTRcdWIyZTQuIFx1YWMwMSBcdWQ1NjhcdWMyMTggXHVkNjM4XHVjZDljXHVjNWQwXHVjMTFjIFx1ZDYzOFx1Y2Q5Y1x1ZDU1OFx1YjI5NCBcdWQ1NjhcdWMyMThcdWM3NTggXHVjNzc0XHViOTg0XHVjNzQwIDUwMFx1YWMxY1x1Yjk3YyBcdWIxMThcdWM5YzAgXHVjNTRhXHViMjk0XHViMmU0LiBcdWQ1NjhcdWMyMTggXHVkNjM4XHVjZDljXHVjNzU4IFx1YjljOFx1YzljMFx1YjljOSBcdWM5MDRcdWM1ZDBcdWIyOTQgJiMzOTsjJiMzOTtcdWFjMDAgXHVkNTU4XHViMDk4IFx1YzhmY1x1YzViNFx1YzljNFx1YjJlNC48XC9wPlxyXG4iLCJvdXRwdXQiOiI8cD5cdWM3ODVcdWI4MjVcdWM3M2NcdWI4NWMgXHVjOGZjXHVjNWI0XHVjOWM0IFx1YWMwMSBcdWQ1NjhcdWMyMTggXHVkNjM4XHVjZDljXHVjNWQwIFx1YjMwMFx1ZDU3NFx1YzExYywgXHViOWNjXHVjNTdkIFx1YzViNFx1YjVhNCBcdWQ1NjhcdWMyMThcdWI5N2MgXHVjMGFjXHVjNmE5XHVkNTg4XHViMjk0XHVjOWMwIFx1YzcyMFx1Yzc3Y1x1ZDU1OFx1YWM4YyBcdWFjYjBcdWM4MTVcdWQ1NjAgXHVjMjE4IFx1Yzc4OFx1YjJlNFx1YmE3NCwgXHVjNzg1XHViODI1IFx1ZDU2OFx1YzIxOCBcdWQ2MzhcdWNkOWNcdWM1ZDBcdWMxMWMgXHVkNTY4XHVjMjE4XHVjNzU4IFx1Yzc3NFx1Yjk4NFx1YzVkMCBcdWMyZGNcdWI5YWNcdWM1YmMgXHViMTE4XHViYzg0XHViOWNjIFx1Y2Q5NFx1YWMwMFx1ZDU1YyBcdWQ2MTVcdWQwZGNcdWI4NWMgXHVjZDljXHViODI1XHVkNTVjXHViMmU0LiBcdWI5Y2NcdWM1N2QsIFx1ZDU3NFx1YjJmOVx1ZDU1OFx1YjI5NCBcdWQ1NjhcdWMyMThcdWFjMDAgXHVjNWM2XHVjNWI0XHVjMTFjIFx1ZDYzOFx1Y2Q5Y1x1ZDU2MCBcdWMyMTggXHVjNWM2XHViMmU0XHViYTc0ICZxdW90O2ltcG9zc2libGUmcXVvdDtcdWM3NDQgXHVjZDljXHViODI1XHVkNTU4XHVhY2UwLCBcdWM1NjBcdWI5ZTRcdWJhYThcdWQ2MzhcdWQ1NzRcdWMxMWMgXHVkNjM4XHVjZDljXHVkNTU4XHViMjk0IFx1YmMyOVx1YmM5NVx1Yzc3NCBcdWM1ZWNcdWI3ZWMgXHVhYzAwXHVjOWMwXHViNzdjXHViYTc0LCAmcXVvdDthbWJpZ3VvdXMmcXVvdDtcdWI5N2MgXHVjZDljXHViODI1XHVkNTU4XHVhY2UwLCBcdWFjYmRcdWM2YjBcdWM3NTggXHVjMjE4XHViOTdjIFx1Y2Q5Y1x1YjgyNVx1ZDU1Y1x1YjJlNC4gXHViOWNjXHVjNTdkLCAxMDAwXHVhYzAwXHVjOWMwXHViOTdjIFx1YjExOFx1YjI5NCBcdWJjMjlcdWJjOTVcdWM3M2NcdWI4NWMgXHVkNjM4XHVjZDljXHVkNTYwIFx1YzIxOCBcdWM3ODhcdWIyZTRcdWJhNzQgJnF1b3Q7Jmd0OyAxMDAwJnF1b3Q7XHVjNzQ0IFx1YWNiZFx1YzZiMFx1Yzc1OCBcdWMyMTggXHViMzAwXHVjMmUwIFx1Y2Q5Y1x1YjgyNVx1ZDU1Y1x1YjJlNC48XC9wPlxyXG4iLCJoaW50IjoiIiwib3JpZ2luYWwiOiIwIiwiaHRtbF90aXRsZSI6IjAiLCJwcm9ibGVtX2xhbmdfdGNvZGUiOiJLb3JlYW4ifSx7InByb2JsZW1faWQiOiI0ODAyIiwicHJvYmxlbV9sYW5nIjoiMSIsInRpdGxlIjoiRnVuY3Rpb24gT3ZlcmxvYWRpbmciLCJkZXNjcmlwdGlvbiI6IjxwPk1hbnkgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIChpbmNsdWRpbmcgQywgQysrIGFuZCBKYXZhKSBhbGxvdyB0aGUgcHJvZ3JhbW1lciB0byBkZWZpbmUgb3ZlcmxvYWRlZCBmdW5jdGlvbnMsIGkuZS4sIHNldmVyYWwgZnVuY3Rpb25zIHRoYXQgaGF2ZSB0aGUgc2FtZSBuYW1lIGJ1dCBkaWZmZXJlbnQgcGFyYW1ldGVyIGxpc3RzLiBIb3dldmVyLCBpbiBzb21lIGxhbmd1YWdlcyAoc3VjaCBhcyBBZGEpIGl0IGlzIHBvc3NpYmxlIHRvIG92ZXJsb2FkIGJ5IHJldHVybiB0eXBlIGFzIHdlbGwuIFRoYXQgaXMsIGl0IGlzIHBvc3NpYmxlIGZvciB0d28gZnVuY3Rpb25zIHRvIGhhdmUgdGhlIHNhbWUgbmFtZSBhbmQgcGFyYW1ldGVyIGxpc3QsIGJ1dCBkaWZmZXJlbnQgcmV0dXJuIHR5cGVzLiBGb3IgZXhhbXBsZTo8XC9wPlxyXG5cclxuPHByZT5cclxuY2hhciBmKGZsb2F0IHgsIGludCB5KVxyXG5jaGFyIGYoZmxvYXQgeCwgZmxvYXQgeSlcclxuZmxvYXQgZihmbG9hdCB4LCBmbG9hdCB5KVxyXG5mbG9hdCBnKGZsb2F0IHgsIGludCB5KVxyXG5mbG9hdCBnKGludCB4LCBmbG9hdCB5KVxyXG48XC9wcmU+XHJcblxyXG48cD5HaXZlbiB0aGVzZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMsIHN1cHBvc2UgdGhlIHByb2dyYW0gY29udGFpbnMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgYW5kIGZ1bmN0aW9uIGNhbGw6PFwvcD5cclxuXHJcbjxwcmU+XHJcbmZsb2F0IGEgPSAxLjAsIGIgPSAyLjA7XHJcbmludCBjID0gMztcclxuZmxvYXQgZCA9IGcoYywgZihhLCBiKSk7XHJcbjxcL3ByZT5cclxuXHJcbjxwPlRoZSBcdWZiMDFyc3QgdHdvIGRlY2xhcmF0aW9ucyBvZiBmIHdvdWxkIG5vdCB3b3JrIGhlcmUsIGJ1dCB0aGUgdGhpcmQgb25lIGRvZXM6IDxjb2RlPmYoJmx0O2Zsb2F0Jmd0OywgJmx0O2Zsb2F0Jmd0OykgcmV0dXJucyAmbHQ7ZmxvYXQmZ3Q7PFwvY29kZT4sIHdoaWNoIHJlZHVjZXMgdGhlIGZ1bmN0aW9uIGNhbGwgdG8gPGNvZGU+ZygmbHQ7aW50Jmd0OywgJmx0O2Zsb2F0Jmd0Oyk8XC9jb2RlPiwgYW5kIHRoZSBzZWNvbmQgZGVjbGFyYXRpb24gb2YgPGNvZGU+ZzxcL2NvZGU+IHdpbGwgcmV0dXJuIHRoZSA8Y29kZT4mbHQ7ZmxvYXQmZ3Q7PFwvY29kZT4gdGhhdCBjYW4gYmUgYXNzaWduZWQgdG8gdmFyaWFibGUgPGNvZGU+ZDxcL2NvZGU+LiBTaW5jZSB3ZSB1c2VkIHRoZSAzcmQgdmVyc2lvbiBvZiA8Y29kZT5mPFwvY29kZT4gYW5kIHRoZSAybmQgdmVyc2lvbiBvZiA8Y29kZT5nPFwvY29kZT4sIHdlIHNheSB0aGF0IHRoZSBnaXZlbiBmdW5jdGlvbiBjYWxsIGlzIHJlc29sdmVkIGJ5PFwvcD5cclxuXHJcbjxwcmU+XHJcbmQgPSBnMihjLCBmMyhhLCBiKSlcclxuPFwvcHJlPlxyXG5cclxuPHA+VXNpbmcgdGhlIHNhbWUgZGVjbGFyYXRpb25zLCB0aGUgZnVuY3Rpb24gY2FsbCA8Y29kZT5jID0gZyhhLCBmKGEsIGMpKTxcL2NvZGU+IGNhbm5vdCBiZSByZXNvbHZlZC4gQXMgYSBmaW5hbCBleGFtcGxlLCBjb25zaWRlciB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb25zPFwvcD5cclxuXHJcbjxwcmU+XHJcbmZsb2F0IHgoZmxvYXQgdylcclxuaW50IHgoZmxvYXQgdylcclxuY2hhciB5KGZsb2F0IHYpXHJcbmNoYXIgeShpbnQgdilcclxuPFwvcHJlPlxyXG5cclxuPHA+YW5kIHRoZSB2YXJpYWJsZSBkZWNsYXJhdGlvbiBhbmQgZnVuY3Rpb24gY2FsbDxcL3A+XHJcblxyXG48cHJlPlxyXG5mbG9hdCBhID0gMS4wXHJcbmNoYXIgYyA9IHkoeChhKSlcclxuPFwvcHJlPlxyXG5cclxuPHA+SW4gdGhpcyBjYXNlLCB3ZSBzZWUgdGhhdCB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgZ2l2ZW4gZnVuY3Rpb24gY2FsbCBpcyBhbWJpZ3VvdXMuPFwvcD5cclxuIiwiaW5wdXQiOiI8cD5UaGUgaW5wdXQgd2lsbCBjb25zaXN0IG9mIGEgbGlzdCBvZiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgKG9uZSBwZXIgbGluZSkuIEVhY2ggZnVuY3Rpb24gZGVjbGFyYXRpb24gaW4gdGhlIGlucHV0IHdpbGwgaGF2ZSB0aGUgZm9ybTxcL3A+XHJcblxyXG48cHJlPlxyXG5uYW1lIG51bV9wYXJhbXMgcGFyYW0oMSkgcGFyYW0oMikgLi4uIHBhcmFtKG51bV9wYXJhbXMpIHJldHR5cGU8XC9wcmU+XHJcblxyXG48cD53aGVyZSBuYW1lIGlzIHRoZSBmdW5jdGlvbiBuYW1lLCBwYXJhbShpKSBpcyB0aGUgZGF0YSB0eXBlIG9mIHRoZSBpLXRoIHBhcmFtZXRlciwgYW5kIHJldHR5cGUgaXMgdGhlIGRhdGEgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlICh0aGlzIHByb2JsZW0gZG9lcyBub3QgZGVhbCB3aXRoICYjMzk7dm9pZCYjMzk7IGZ1bmN0aW9ucyk7IG51bV9wYXJhbXMgaXMgYXQgbGVhc3QgMSBhbmQgYXQgbW9zdCA5LiBOb3RlIHRoYXQgdGhlIHBhcmFtZXRlcnMgZG8gbm90IGhhdmUgbmFtZXMsIGl0IGlzIG9ubHkgdGhlaXIgZGF0YSB0eXBlcyB0aGF0IG1hdHRlci4gRnVuY3Rpb24gbmFtZXMgYXJlIHNpbmdsZSBsb3dlciBjYXNlIGxldHRlcnMsIHdoaWxlIGRhdGEgdHlwZXMgYXJlIHNpbmdsZSB1cHBlciBjYXNlIGxldHRlcnMuIERpZmZlcmVudCBmdW5jdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lIHdpbGwgYXBwZWFyIGNvbnNlY3V0aXZlbHkgaW4gdGhlIGlucHV0LCBhbmQgdGhlcmUgYXJlIGF0IG1vc3QgNTAwIGRpZmZlcmVudCBmdW5jdGlvbnMgZm9yIGVhY2ggZnVuY3Rpb24gbmFtZS4gTm8gdHdvIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyB3aWxsIGJlIGV4YWN0bHkgdGhlIHNhbWUuIEVhY2ggZnVuY3Rpb24gZGVjbGFyYXRpb24gY2FycmllcyB3aXRoIGl0LCBpbXBsaWNpdGx5LCBhICYjMzk7c2VyaWFsIG51bWJlciYjMzk7LiBUaGUgc2VyaWFsIG51bWJlcnMgc3RhcnQgb3V0IGF0IDEgYW5kIGluY3JlYXNlIHVudGlsIGEgbmV3IGZ1bmN0aW9uIG5hbWUgaXMgZW5jb3VudGVyZWQ7IHRoZW4gdGhleSBzdGFydCBvdXQgYXQgMSBhZ2Fpbi48XC9wPlxyXG5cclxuPHA+VGhlIGxpc3Qgb2YgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGluIHRoZSBpbnB1dCB3aWxsIGJlIGNvbmNsdWRlZCBieSBhIGxpbmUgY29udGFpbmluZyBvbmx5IGEgcG91bmQgc2lnbiAoJiMzOTsjJiMzOTspLiBUaGVyZWFmdGVyIHdpbGwgY29tZSBhIGxpc3Qgb2YgZnVuY3Rpb24gY2FsbHMgKG9uZSBwZXIgbGluZSkuPFwvcD5cclxuXHJcbjxwPlRoZSBzdHJ1Y3R1cmUgb2YgZWFjaCBmdW5jdGlvbiBjYWxsIGNhbiBiZSBkZVx1ZmIwMW5lZCBieSB0aGUgZ3JhbW1hcjo8XC9wPlxyXG5cclxuPHByZT5cclxuJmx0O2Z1bmN0aW9uX2NhbGwmZ3Q7IDo9ICZsdDtkYXRhX3R5cGUmZ3Q7ID0gJmx0O3JpZ2h0X2hhbmRfc2lkZSZndDtcclxuJmx0O3JpZ2h0X2hhbmRfc2lkZSZndDsgOj0gJmx0O2ZuYW1lJmd0OyAmbHQ7bnVtX3BhcmFtcyZndDsgJmx0O3BhcmFtX2xpc3QmZ3Q7XHJcbiZsdDtwYXJhbV9saXN0Jmd0OyA6PSAmbHQ7cGFyYW0mZ3Q7IHwgJmx0O3BhcmFtX2xpc3QmZ3Q7ICZsdDtwYXJhbSZndDtcclxuJmx0O3BhcmFtJmd0OyA6PSAmbHQ7ZGF0YV90eXBlJmd0OyB8ICZsdDtyaWdodF9oYW5kX3NpZGUmZ3Q7XHJcbiZsdDtkYXRhX3R5cGUmZ3Q7IDo9ICZsdDt1cHBlcl9jYXNlX2xldHRlciZndDtcclxuJmx0O251bV9wYXJhbXMmZ3Q7IDo9ICYjMzk7MSYjMzk7IHwgJiMzOTsyJiMzOTsgfCAuLi4gfCAmIzM5OzkmIzM5O1xyXG4mbHQ7Zm5hbWUmZ3Q7IDo9ICZsdDtsb3dlcl9jYXNlX2xldHRlciZndDs8XC9wcmU+XHJcblxyXG48cD5IZXJlIHRoZSBzeW1ib2xzIDo9IGFuZCB8IGFyZSB1c2VkIHRvIGRlXHVmYjAxbmUgdGhlIGdyYW1tYXIsIHRoZXkgd2lsbCBub3Qgc2hvdyB1cCBpbiB0aGUgYWN0dWFsIGZ1bmN0aW9uIGNhbGwuIEZ1cnRoZXJtb3JlLCBpbiBhbnkgZnVuY3Rpb24gY2FsbCB0aGUgc3BlY2lcdWZiMDFlZCBudW1fcGFyYW1zIHdpbGwgbWF0Y2ggZXhhY3RseSB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgZ2l2ZW4gaW4gdGhlIHBhcmFtZXRlciBsaXN0LiBFYWNoIGZ1bmN0aW9uIGNhbGwgd2lsbCBjb250YWluIG5vIG1vcmUgdGhhbiA1MDAgZnVuY3Rpb24gbmFtZXMgKG5vdCBuZWNlc3NhcmlseSBkaXN0aW5jdCkuIFRoZSBlbmQgb2YgdGhlIGxpc3Qgb2YgZnVuY3Rpb24gY2FsbHMgd2lsbCBiZSBtYXJrZWQgYnkgYSBsaW5lIGNvbnRhaW5pbmcgb25seSBhIHBvdW5kIHNpZ24uIEluIGVhY2ggZnVuY3Rpb24gZGVjbGFyYXRpb24sIGFzIHdlbGwgYXMgaW4gZWFjaCBmdW5jdGlvbiBjYWxsIGluIHRoZSBpbnB1dCwgYWRqYWNlbnQgdG9rZW5zIChsb3dlciBvciB1cHBlciBjYXNlIGxldHRlcnMsIGRpZ2l0cywgZXF1YWxzIHNpZ24pIHdpbGwgYmUgc2VwYXJhdGVkIGJ5IGV4YWN0bHkgb25lIGJsYW5rIHNwYWNlLjxcL3A+XHJcbiIsIm91dHB1dCI6IjxwPkZvciBlYWNoIGZ1bmN0aW9uIGNhbGwgaW4gdGhlIGlucHV0LCB0aGVyZSB3aWxsIGJlIG9uZSBsaW5lIG9mIG91dHB1dC4gSWYgdGhlIGZ1bmN0aW9uIGNhbGwgY2FuIGJlIHJlc29sdmVkIHVuaXF1ZWx5LCB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIGlucHV0IGZ1bmN0aW9uIGNhbGwsIGJ1dCBlYWNoIGZ1bmN0aW9uIG5hbWUgd2lsbCBoYXZlIGEgc2VyaWFsIG51bWJlciBhcHBlbmRlZCB0byBpdCwgdG8gaW5kaWNhdGUgd2hpY2ggdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gd2FzIHVzZWQgdGhlcmUuIE90aGVyd2lzZSwgdGhlIG91dHB1dCB3aWxsIGJlIGVpdGhlciAmIzM5O2ltcG9zc2libGUmIzM5OyBvciAmIzM5O2FtYmlndW91cyYjMzk7LCBhcyBleHBsYWluZWQgYWJvdmUuIElmIGl0IGlzIGFtYmlndW91cywgYWxzbyBvdXRwdXQgdGhlIG51bWJlciBvZiB3YXlzIHRoZSBmdW5jdGlvbiBjYWxsIGNhbiBiZSByZXNvbHZlZCwgb3IgcHJpbnQgJiMzOTsmZ3Q7IDEwMDAmIzM5OyBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIDEwMDAgd2F5cy48XC9wPlxyXG4iLCJoaW50IjoiIiwib3JpZ2luYWwiOiIxIiwiaHRtbF90aXRsZSI6IjAiLCJwcm9ibGVtX2xhbmdfdGNvZGUiOiJFbmdsaXNoIn1d