1 module unrobotstxt.test_extra;
2 
3 import unrobotstxt;
4 
5 // Regression tests against original robots.cc, generated using KLEE, custom code and radamsa
6 
7 unittest
8 {
9 	import std.file : dirEntries, read, SpanMode;
10 	import std.path : buildPath, dirName;
11 	import std.stdio : File;
12 	import std.string : split;
13 
14 	static void runTests(string dir)
15 	{
16 		auto matcher = new RobotsMatcher();
17 		foreach (robots_txt_path; dirEntries(dir, "robots*[0-9]", SpanMode.shallow))
18 		{
19 			const robots_txt = cast(string)read(robots_txt_path);
20 
21 			foreach (line; File(robots_txt_path ~ ".out").byLineCopy())
22 			{
23 				const pieces = line.split();
24 				const ex_result = pieces[0];
25 				const url_path = pieces[1];
26 				const user_agents = pieces[2..$];
27 
28 				const result = matcher.AllowedByRobots(robots_txt, user_agents, url_path) ? "ALLOWED" : "DISALLOWED";
29 				assert (result == ex_result, "Failure for " ~ robots_txt_path ~ " at: " ~ line);
30 			}
31 		}
32 	}
33 
34 	auto this_dir = dirName(__FILE_FULL_PATH__);
35 	runTests(buildPath(this_dir, "testdata", "normal"));
36 	runTests(buildPath(this_dir, "testdata", "fuzzed"));
37 }
38 
39 unittest
40 {
41 	assert (MaybeEscapePattern("") == "");
42 	assert (MaybeEscapePattern("\x99") == "%99");
43 	assert (MaybeEscapePattern("v") == "v");
44 	assert (MaybeEscapePattern("\x99\x99") == "%99%99");
45 	assert (MaybeEscapePattern(",") == ",");
46 	assert (MaybeEscapePattern("%") == "%");
47 	assert (MaybeEscapePattern("\x99h") == "%99h");
48 	assert (MaybeEscapePattern("v\x99") == "v%99");
49 	assert (MaybeEscapePattern("\x99\x99\x99") == "%99%99%99");
50 	assert (MaybeEscapePattern("\x99 ") == "%99 ");
51 	assert (MaybeEscapePattern("\x99%") == "%99%");
52 	assert (MaybeEscapePattern("vh") == "vh");
53 	assert (MaybeEscapePattern(",\x99") == ",%99");
54 	assert (MaybeEscapePattern("%\x99") == "%%99");
55 	assert (MaybeEscapePattern("\x99\x99\x99\x99") == "%99%99%99%99");
56 	assert (MaybeEscapePattern("\x99\x99d") == "%99%99d");
57 	assert (MaybeEscapePattern("v ") == "v ");
58 	assert (MaybeEscapePattern("\x99h\x99") == "%99h%99");
59 	assert (MaybeEscapePattern("v\x99\x99") == "v%99%99");
60 	assert (MaybeEscapePattern(",h") == ",h");
61 	assert (MaybeEscapePattern("v%") == "v%");
62 	assert (MaybeEscapePattern("\x99\x99\x99~") == "%99%99%99~");
63 	assert (MaybeEscapePattern("\x99\x99\x99S") == "%99%99%99S");
64 	assert (MaybeEscapePattern("\x99\x99\x99%") == "%99%99%99%");
65 	assert (MaybeEscapePattern("\x99\x99d\x99") == "%99%99d%99");
66 	assert (MaybeEscapePattern("\x99\x99+") == "%99%99+");
67 	assert (MaybeEscapePattern("\x99\x99%") == "%99%99%");
68 	assert (MaybeEscapePattern("%h") == "%h");
69 	assert (MaybeEscapePattern("%c") == "%c");
70 	assert (MaybeEscapePattern("\x99h\x99\x99") == "%99h%99%99");
71 	assert (MaybeEscapePattern("v\x99\x99\x99") == "v%99%99%99");
72 	assert (MaybeEscapePattern("\x99\x99d~") == "%99%99d~");
73 	assert (MaybeEscapePattern(", ") == ", ");
74 	assert (MaybeEscapePattern("\x99 \x99") == "%99 %99");
75 	assert (MaybeEscapePattern(",%") == ",%");
76 	assert (MaybeEscapePattern("\x99hd") == "%99hd");
77 	assert (MaybeEscapePattern("\x99%\x99") == "%99%%99");
78 	assert (MaybeEscapePattern("%5") == "%5");
79 	assert (MaybeEscapePattern("\x99\x99dS") == "%99%99dS");
80 	assert (MaybeEscapePattern("v\x99d") == "v%99d");
81 	assert (MaybeEscapePattern("\x99\x99d%") == "%99%99d%");
82 	assert (MaybeEscapePattern(",\x99\x99") == ",%99%99");
83 	assert (MaybeEscapePattern("%\x99\x99") == "%%99%99");
84 	assert (MaybeEscapePattern("\x99\x99+\x99") == "%99%99+%99");
85 	assert (MaybeEscapePattern("\x99\x99%\x99") == "%99%99%%99");
86 	assert (MaybeEscapePattern("vh\x99") == "vh%99");
87 	assert (MaybeEscapePattern("\x99h\x99~") == "%99h%99~");
88 	assert (MaybeEscapePattern("% ") == "% ");
89 	assert (MaybeEscapePattern("%%") == "%%");
90 	assert (MaybeEscapePattern("v\x99\x99~") == "v%99%99~");
91 	assert (MaybeEscapePattern("\x99\x99+~") == "%99%99+~");
92 	assert (MaybeEscapePattern("\x99\x99%~") == "%99%99%~");
93 	assert (MaybeEscapePattern("\x99\x99%f") == "%99%99%f");
94 	assert (MaybeEscapePattern("\x99h\x99S") == "%99h%99S");
95 	assert (MaybeEscapePattern("\x99\x99+S") == "%99%99+S");
96 	assert (MaybeEscapePattern("\x99h\x99%") == "%99h%99%");
97 	assert (MaybeEscapePattern("\x99\x99+%") == "%99%99+%");
98 	assert (MaybeEscapePattern("\x99\x99%6") == "%99%99%6");
99 	assert (MaybeEscapePattern("v\x99\x99S") == "v%99%99S");
100 	assert (MaybeEscapePattern("\x99\x99%S") == "%99%99%S");
101 	assert (MaybeEscapePattern("\x99\x99%%") == "%99%99%%");
102 	assert (MaybeEscapePattern("v\x99\x99%") == "v%99%99%");
103 	assert (MaybeEscapePattern("\x99h+") == "%99h+");
104 	assert (MaybeEscapePattern("\x99h%") == "%99h%");
105 	assert (MaybeEscapePattern("\x99hd\x99") == "%99hd%99");
106 	assert (MaybeEscapePattern("v\x99+") == "v%99+");
107 	assert (MaybeEscapePattern("\x99 \x99\x99") == "%99 %99%99");
108 	assert (MaybeEscapePattern("\x99%\x99\x99") == "%99%%99%99");
109 	assert (MaybeEscapePattern("\x99 d") == "%99 d");
110 	assert (MaybeEscapePattern("v\x99%") == "v%99%");
111 	assert (MaybeEscapePattern("v\x99d\x99") == "v%99d%99");
112 	assert (MaybeEscapePattern("\x99hd~") == "%99hd~");
113 	assert (MaybeEscapePattern("%\x99\x99\x99") == "%%99%99%99");
114 	assert (MaybeEscapePattern("\x99hd%") == "%99hd%");
115 	assert (MaybeEscapePattern("vhd") == "vhd");
116 	assert (MaybeEscapePattern("\x99hdS") == "%99hdS");
117 	assert (MaybeEscapePattern(",\x99\x99\x99") == ",%99%99%99");
118 	assert (MaybeEscapePattern("vh\x99\x99") == "vh%99%99");
119 	assert (MaybeEscapePattern("\x99h+\x99") == "%99h+%99");
120 	assert (MaybeEscapePattern("\x99 \x99~") == "%99 %99~");
121 	assert (MaybeEscapePattern("\x99h%\x99") == "%99h%%99");
122 	assert (MaybeEscapePattern("\x99%\x99~") == "%99%%99~");
123 	assert (MaybeEscapePattern("%\x99d") == "%%99d");
124 	assert (MaybeEscapePattern("v\x99d~") == "v%99d~");
125 	assert (MaybeEscapePattern("v \x99") == "v %99");
126 	assert (MaybeEscapePattern("\x99h+~") == "%99h+~");
127 	assert (MaybeEscapePattern(",\x99d") == ",%99d");
128 	assert (MaybeEscapePattern("\x99%{") == "%99%{");
129 	assert (MaybeEscapePattern("\x99%d") == "%99%d");
130 	assert (MaybeEscapePattern("v%\x99") == "v%%99");
131 	assert (MaybeEscapePattern(",h\x99") == ",h%99");
132 	assert (MaybeEscapePattern("\x99 \x99S") == "%99 %99S");
133 	assert (MaybeEscapePattern("\x99 \x99%") == "%99 %99%");
134 	assert (MaybeEscapePattern("\x99%\x99S") == "%99%%99S");
135 	assert (MaybeEscapePattern("\x99h%f") == "%99h%f");
136 	assert (MaybeEscapePattern("\x99h%~") == "%99h%~");
137 	assert (MaybeEscapePattern("\x99%\x99%") == "%99%%99%");
138 	assert (MaybeEscapePattern("\x99 +") == "%99 +");
139 	assert (MaybeEscapePattern("\x99h+%") == "%99h+%");
140 	assert (MaybeEscapePattern("\x99h+S") == "%99h+S");
141 	assert (MaybeEscapePattern("\x99h%6") == "%99h%6");
142 	assert (MaybeEscapePattern("v\x99d%") == "v%99d%");
143 	assert (MaybeEscapePattern("\x99 %") == "%99 %");
144 	assert (MaybeEscapePattern("v\x99dS") == "v%99dS");
145 	assert (MaybeEscapePattern("v\x99+\x99") == "v%99+%99");
146 	assert (MaybeEscapePattern("v\x99%\x99") == "v%99%%99");
147 	assert (MaybeEscapePattern("\x99%2") == "%99%2");
148 	assert (MaybeEscapePattern("\x99h%S") == "%99h%S");
149 	assert (MaybeEscapePattern("\x99h%%") == "%99h%%");
150 	assert (MaybeEscapePattern("\x99 d\x99") == "%99 d%99");
151 	assert (MaybeEscapePattern("\x99%+") == "%99%+");
152 	assert (MaybeEscapePattern("\x99%%") == "%99%%");
153 	assert (MaybeEscapePattern("%\x99\x99~") == "%%99%99~");
154 	assert (MaybeEscapePattern(",\x99\x99~") == ",%99%99~");
155 	assert (MaybeEscapePattern("vh\x99~") == "vh%99~");
156 	assert (MaybeEscapePattern("\x99%{\x99") == "%99%{%99");
157 	assert (MaybeEscapePattern("vh+") == "vh+");
158 	assert (MaybeEscapePattern("\x99%d\x99") == "%99%d%99");
159 	assert (MaybeEscapePattern("vh%") == "vh%");
160 	assert (MaybeEscapePattern("\x99 d~") == "%99 d~");
161 	assert (MaybeEscapePattern("v\x99+~") == "v%99+~");
162 	assert (MaybeEscapePattern("\x99 +\x99") == "%99 +%99");
163 	assert (MaybeEscapePattern("\x99%2\x99") == "%99%2%99");
164 	assert (MaybeEscapePattern("\x99 %\x99") == "%99 %%99");
165 	assert (MaybeEscapePattern("\x99%{~") == "%99%{~");
166 	assert (MaybeEscapePattern("\x99 dS") == "%99 dS");
167 	assert (MaybeEscapePattern("\x99 d%") == "%99 d%");
168 	assert (MaybeEscapePattern("\x99%df") == "%99%DF");
169 	assert (MaybeEscapePattern("\x99%+\x99") == "%99%+%99");
170 	assert (MaybeEscapePattern(",\x99\x99S") == ",%99%99S");
171 	assert (MaybeEscapePattern("\x99%d~") == "%99%d~");
172 	assert (MaybeEscapePattern("\x99%%\x99") == "%99%%%99");
173 	assert (MaybeEscapePattern("v\x99%f") == "v%99%f");
174 	assert (MaybeEscapePattern("%\x99\x99S") == "%%99%99S");
175 	assert (MaybeEscapePattern("v\x99%~") == "v%99%~");
176 	assert (MaybeEscapePattern(",\x99\x99%") == ",%99%99%");
177 	assert (MaybeEscapePattern("%\x99\x99%") == "%%99%99%");
178 	assert (MaybeEscapePattern("vh\x99S") == "vh%99S");
179 	assert (MaybeEscapePattern("\x99%d6") == "%99%D6");
180 	assert (MaybeEscapePattern(",hd") == ",hd");
181 	assert (MaybeEscapePattern("v\x99+S") == "v%99+S");
182 	assert (MaybeEscapePattern("v d") == "v d");
183 	assert (MaybeEscapePattern("vh\x99%") == "vh%99%");
184 	assert (MaybeEscapePattern("v\x99+%") == "v%99+%");
185 	assert (MaybeEscapePattern("\x99 +~") == "%99 +~");
186 	assert (MaybeEscapePattern("\x99%{S") == "%99%{S");
187 	assert (MaybeEscapePattern("v\x99%6") == "v%99%6");
188 	assert (MaybeEscapePattern("\x99%{%") == "%99%{%");
189 	assert (MaybeEscapePattern("%\x99+") == "%%99+");
190 	assert (MaybeEscapePattern("\x99%dS") == "%99%dS");
191 	assert (MaybeEscapePattern("\x99%d%") == "%99%d%");
192 	assert (MaybeEscapePattern("%h\x99") == "%h%99");
193 	assert (MaybeEscapePattern(",\x99d\x99") == ",%99d%99");
194 	assert (MaybeEscapePattern("%\x99%") == "%%99%");
195 	assert (MaybeEscapePattern("%c\x99") == "%c%99");
196 	assert (MaybeEscapePattern("v\x99%S") == "v%99%S");
197 	assert (MaybeEscapePattern(",\x99+") == ",%99+");
198 	assert (MaybeEscapePattern(",\x99%") == ",%99%");
199 	assert (MaybeEscapePattern("v\x99%%") == "v%99%%");
200 	assert (MaybeEscapePattern("%\x99d\x99") == "%%99d%99");
201 	assert (MaybeEscapePattern("\x99 %~") == "%99 %~");
202 	assert (MaybeEscapePattern("\x99 %f") == "%99 %f");
203 	assert (MaybeEscapePattern("vhd\x99") == "vhd%99");
204 	assert (MaybeEscapePattern("v \x99\x99") == "v %99%99");
205 	assert (MaybeEscapePattern("\x99%26") == "%99%26");
206 	assert (MaybeEscapePattern("\x99%2f") == "%99%2F");
207 	assert (MaybeEscapePattern("\x99%+~") == "%99%+~");
208 	assert (MaybeEscapePattern("\x99%2~") == "%99%2~");
209 	assert (MaybeEscapePattern("v%\x99\x99") == "v%%99%99");
210 	assert (MaybeEscapePattern("\x99 +S") == "%99 +S");
211 	assert (MaybeEscapePattern("\x99 +%") == "%99 +%");
212 	assert (MaybeEscapePattern("\x99%%~") == "%99%%~");
213 	assert (MaybeEscapePattern("\x99 %6") == "%99 %6");
214 	assert (MaybeEscapePattern("\x99%%f") == "%99%%f");
215 	assert (MaybeEscapePattern(", \x99") == ", %99");
216 	assert (MaybeEscapePattern("\x99 %%") == "%99 %%");
217 	assert (MaybeEscapePattern("vhd~") == "vhd~");
218 	assert (MaybeEscapePattern("\x99 %S") == "%99 %S");
219 	assert (MaybeEscapePattern("\x99%2%") == "%99%2%");
220 	assert (MaybeEscapePattern("\x99%2S") == "%99%2S");
221 	assert (MaybeEscapePattern("\x99%+%") == "%99%+%");
222 	assert (MaybeEscapePattern("\x99%+S") == "%99%+S");
223 	assert (MaybeEscapePattern("\x99%%6") == "%99%%6");
224 	assert (MaybeEscapePattern("v%d") == "v%d");
225 	assert (MaybeEscapePattern("v%{") == "v%{");
226 	assert (MaybeEscapePattern("vhd%") == "vhd%");
227 	assert (MaybeEscapePattern("vhdS") == "vhdS");
228 	assert (MaybeEscapePattern("\x99%%S") == "%99%%S");
229 	assert (MaybeEscapePattern("\x99%%%") == "%99%%%");
230 	assert (MaybeEscapePattern(",%\x99") == ",%%99");
231 	assert (MaybeEscapePattern("%hd") == "%hd");
232 	assert (MaybeEscapePattern("v +") == "v +");
233 	assert (MaybeEscapePattern("vh%\x99") == "vh%%99");
234 	assert (MaybeEscapePattern("vh+\x99") == "vh+%99");
235 	assert (MaybeEscapePattern(",\x99d~") == ",%99d~");
236 	assert (MaybeEscapePattern("%\x99d~") == "%%99d~");
237 	assert (MaybeEscapePattern("vh+~") == "vh+~");
238 	assert (MaybeEscapePattern("v %") == "v %");
239 	assert (MaybeEscapePattern("v%2") == "v%2");
240 	assert (MaybeEscapePattern(",h+") == ",h+");
241 	assert (MaybeEscapePattern("%5\x99") == "%5%99");
242 	assert (MaybeEscapePattern("v \x99~") == "v %99~");
243 	assert (MaybeEscapePattern("v%\x99~") == "v%%99~");
244 	assert (MaybeEscapePattern("vh%~") == "vh%~");
245 	assert (MaybeEscapePattern("vh%f") == "vh%f");
246 	assert (MaybeEscapePattern(",h\x99\x99") == ",h%99%99");
247 	assert (MaybeEscapePattern(",h%") == ",h%");
248 	assert (MaybeEscapePattern("vh+S") == "vh+S");
249 	assert (MaybeEscapePattern("vh+%") == "vh+%");
250 	assert (MaybeEscapePattern("vh%6") == "vh%6");
251 	assert (MaybeEscapePattern("vh%%") == "vh%%");
252 	assert (MaybeEscapePattern("vh%S") == "vh%S");
253 	assert (MaybeEscapePattern("v%+") == "v%+");
254 	assert (MaybeEscapePattern("v%%") == "v%%");
255 	assert (MaybeEscapePattern("v \x99%") == "v %99%");
256 	assert (MaybeEscapePattern(", d") == ", d");
257 	assert (MaybeEscapePattern(",\x99dS") == ",%99dS");
258 	assert (MaybeEscapePattern("v \x99S") == "v %99S");
259 	assert (MaybeEscapePattern("v%\x99S") == "v%%99S");
260 	assert (MaybeEscapePattern("v%\x99%") == "v%%99%");
261 	assert (MaybeEscapePattern(",\x99d%") == ",%99d%");
262 	assert (MaybeEscapePattern("%\x99dS") == "%%99dS");
263 	assert (MaybeEscapePattern("%\x99d%") == "%%99d%");
264 	assert (MaybeEscapePattern(",\x99+\x99") == ",%99+%99");
265 	assert (MaybeEscapePattern("v d\x99") == "v d%99");
266 	assert (MaybeEscapePattern("%\x99+\x99") == "%%99+%99");
267 	assert (MaybeEscapePattern(",\x99%\x99") == ",%99%%99");
268 	assert (MaybeEscapePattern("%\x99%\x99") == "%%99%%99");
269 	assert (MaybeEscapePattern("%%\x99") == "%%%99");
270 	assert (MaybeEscapePattern("% \x99") == "% %99");
271 	assert (MaybeEscapePattern("%cd") == "%CD");
272 	assert (MaybeEscapePattern("v d~") == "v d~");
273 	assert (MaybeEscapePattern("v%{\x99") == "v%{%99");
274 	assert (MaybeEscapePattern("v%d\x99") == "v%d%99");
275 	assert (MaybeEscapePattern("%c{") == "%c{");
276 	assert (MaybeEscapePattern("v%{~") == "v%{~");
277 	assert (MaybeEscapePattern("v +\x99") == "v +%99");
278 	assert (MaybeEscapePattern("%\x99+~") == "%%99+~");
279 	assert (MaybeEscapePattern(",\x99+~") == ",%99+~");
280 	assert (MaybeEscapePattern("v %\x99") == "v %%99");
281 	assert (MaybeEscapePattern("v dS") == "v dS");
282 	assert (MaybeEscapePattern("v +~") == "v +~");
283 	assert (MaybeEscapePattern("v%d~") == "v%d~");
284 	assert (MaybeEscapePattern("v d%") == "v d%");
285 	assert (MaybeEscapePattern("v%2\x99") == "v%2%99");
286 	assert (MaybeEscapePattern("%h%") == "%h%");
287 	assert (MaybeEscapePattern("%h\x99\x99") == "%h%99%99");
288 	assert (MaybeEscapePattern("v%df") == "v%DF");
289 	assert (MaybeEscapePattern("%c\x99\x99") == "%c%99%99");
290 	assert (MaybeEscapePattern("%h+") == "%h+");
291 	assert (MaybeEscapePattern("v%{S") == "v%{S");
292 	assert (MaybeEscapePattern("v%{%") == "v%{%");
293 	assert (MaybeEscapePattern(",%{") == ",%{");
294 	assert (MaybeEscapePattern("v%+\x99") == "v%+%99");
295 	assert (MaybeEscapePattern("v%d6") == "v%D6");
296 	assert (MaybeEscapePattern("v%%\x99") == "v%%%99");
297 	assert (MaybeEscapePattern(",h\x99~") == ",h%99~");
298 	assert (MaybeEscapePattern("v%dS") == "v%dS");
299 	assert (MaybeEscapePattern("v%d%") == "v%d%");
300 	assert (MaybeEscapePattern("%52") == "%52");
301 	assert (MaybeEscapePattern(", +") == ", +");
302 	assert (MaybeEscapePattern("%\x99%~") == "%%99%~");
303 	assert (MaybeEscapePattern("v %~") == "v %~");
304 	assert (MaybeEscapePattern("%\x99%f") == "%%99%f");
305 	assert (MaybeEscapePattern("v %f") == "v %f");
306 	assert (MaybeEscapePattern(",\x99%f") == ",%99%f");
307 	assert (MaybeEscapePattern(",\x99%~") == ",%99%~");
308 	assert (MaybeEscapePattern(",\x99+S") == ",%99+S");
309 	assert (MaybeEscapePattern("v%+~") == "v%+~");
310 	assert (MaybeEscapePattern(",\x99+%") == ",%99+%");
311 	assert (MaybeEscapePattern("v%2f") == "v%2F");
312 	assert (MaybeEscapePattern("v +%") == "v +%");
313 	assert (MaybeEscapePattern("v +S") == "v +S");
314 	assert (MaybeEscapePattern("v%2~") == "v%2~");
315 	assert (MaybeEscapePattern("v%%f") == "v%%f");
316 	assert (MaybeEscapePattern("v %6") == "v %6");
317 	assert (MaybeEscapePattern("v%%~") == "v%%~");
318 	assert (MaybeEscapePattern("v%26") == "v%26");
319 	assert (MaybeEscapePattern(",\x99%6") == ",%99%6");
320 	assert (MaybeEscapePattern("%\x99+S") == "%%99+S");
321 	assert (MaybeEscapePattern("%\x99%6") == "%%99%6");
322 	assert (MaybeEscapePattern(",%d") == ",%d");
323 	assert (MaybeEscapePattern("v %S") == "v %S");
324 	assert (MaybeEscapePattern("v %%") == "v %%");
325 	assert (MaybeEscapePattern("%\x99+%") == "%%99+%");
326 	assert (MaybeEscapePattern("v%2S") == "v%2S");
327 	assert (MaybeEscapePattern("%c2") == "%C2");
328 	assert (MaybeEscapePattern("v%2%") == "v%2%");
329 	assert (MaybeEscapePattern("v%+S") == "v%+S");
330 	assert (MaybeEscapePattern("v%+%") == "v%+%");
331 	assert (MaybeEscapePattern("v%%6") == "v%%6");
332 	assert (MaybeEscapePattern(", %") == ", %");
333 	assert (MaybeEscapePattern("v%%%") == "v%%%");
334 	assert (MaybeEscapePattern("v%%S") == "v%%S");
335 	assert (MaybeEscapePattern(",\x99%S") == ",%99%S");
336 	assert (MaybeEscapePattern(",\x99%%") == ",%99%%");
337 	assert (MaybeEscapePattern("%c+") == "%c+");
338 	assert (MaybeEscapePattern("%\x99%%") == "%%99%%");
339 	assert (MaybeEscapePattern("%\x99%S") == "%%99%S");
340 	assert (MaybeEscapePattern("%5{") == "%5{");
341 	assert (MaybeEscapePattern("%5d") == "%5D");
342 	assert (MaybeEscapePattern("% d") == "% d");
343 	assert (MaybeEscapePattern("%c%") == "%c%");
344 	assert (MaybeEscapePattern("%h\x99~") == "%h%99~");
345 	assert (MaybeEscapePattern(",hd\x99") == ",hd%99");
346 	assert (MaybeEscapePattern(",%2") == ",%2");
347 	assert (MaybeEscapePattern("%c\x99~") == "%c%99~");
348 	assert (MaybeEscapePattern(",%\x99\x99") == ",%%99%99");
349 	assert (MaybeEscapePattern(", \x99\x99") == ", %99%99");
350 	assert (MaybeEscapePattern("% +") == "% +");
351 	assert (MaybeEscapePattern("%%d") == "%%d");
352 	assert (MaybeEscapePattern("%%{") == "%%{");
353 	assert (MaybeEscapePattern(",h\x99S") == ",h%99S");
354 	assert (MaybeEscapePattern("%5\x99\x99") == "%5%99%99");
355 	assert (MaybeEscapePattern(",%%") == ",%%");
356 	assert (MaybeEscapePattern(",h\x99%") == ",h%99%");
357 	assert (MaybeEscapePattern(",%+") == ",%+");
358 	assert (MaybeEscapePattern(",hd~") == ",hd~");
359 	assert (MaybeEscapePattern("%%2") == "%%2");
360 	assert (MaybeEscapePattern("% \x99\x99") == "% %99%99");
361 	assert (MaybeEscapePattern("%h\x99S") == "%h%99S");
362 	assert (MaybeEscapePattern("% %") == "% %");
363 	assert (MaybeEscapePattern("%h\x99%") == "%h%99%");
364 	assert (MaybeEscapePattern("%5+") == "%5+");
365 	assert (MaybeEscapePattern("%%\x99\x99") == "%%%99%99");
366 	assert (MaybeEscapePattern("%c\x99S") == "%c%99S");
367 	assert (MaybeEscapePattern("%5%") == "%5%");
368 	assert (MaybeEscapePattern("%c\x99%") == "%c%99%");
369 	assert (MaybeEscapePattern("%hd\x99") == "%hd%99");
370 	assert (MaybeEscapePattern("%%+") == "%%+");
371 	assert (MaybeEscapePattern("%%%") == "%%%");
372 	assert (MaybeEscapePattern(", \x99~") == ", %99~");
373 	assert (MaybeEscapePattern("%cd\x99") == "%CD%99");
374 	assert (MaybeEscapePattern(",%\x99~") == ",%%99~");
375 	assert (MaybeEscapePattern("%c{\x99") == "%c{%99");
376 	assert (MaybeEscapePattern(",hdS") == ",hdS");
377 	assert (MaybeEscapePattern("%5\x99~") == "%5%99~");
378 	assert (MaybeEscapePattern("%hd~") == "%hd~");
379 	assert (MaybeEscapePattern(",h+\x99") == ",h+%99");
380 	assert (MaybeEscapePattern(",hd%") == ",hd%");
381 	assert (MaybeEscapePattern(",h%\x99") == ",h%%99");
382 	assert (MaybeEscapePattern("%c{~") == "%c{~");
383 	assert (MaybeEscapePattern("%cd~") == "%CD~");
384 	assert (MaybeEscapePattern("%hdS") == "%hdS");
385 	assert (MaybeEscapePattern("%hd%") == "%hd%");
386 	assert (MaybeEscapePattern("% \x99~") == "% %99~");
387 	assert (MaybeEscapePattern(",h+~") == ",h+~");
388 	assert (MaybeEscapePattern("%%\x99~") == "%%%99~");
389 	assert (MaybeEscapePattern("%c{S") == "%c{S");
390 	assert (MaybeEscapePattern("%c{%") == "%c{%");
391 	assert (MaybeEscapePattern("%c2\x99") == "%C2%99");
392 	assert (MaybeEscapePattern("%cdS") == "%CDS");
393 	assert (MaybeEscapePattern("%cd%") == "%CD%");
394 	assert (MaybeEscapePattern(", \x99S") == ", %99S");
395 	assert (MaybeEscapePattern("%h+\x99") == "%h+%99");
396 	assert (MaybeEscapePattern(",h+S") == ",h+S");
397 	assert (MaybeEscapePattern("%h%\x99") == "%h%%99");
398 	assert (MaybeEscapePattern(", \x99%") == ", %99%");
399 	assert (MaybeEscapePattern(",h%~") == ",h%~");
400 	assert (MaybeEscapePattern(",%\x99%") == ",%%99%");
401 	assert (MaybeEscapePattern(",%\x99S") == ",%%99S");
402 	assert (MaybeEscapePattern(",h+%") == ",h+%");
403 	assert (MaybeEscapePattern(", d\x99") == ", d%99");
404 	assert (MaybeEscapePattern(",h%f") == ",h%f");
405 	assert (MaybeEscapePattern(", d~") == ", d~");
406 	assert (MaybeEscapePattern("%c+\x99") == "%c+%99");
407 	assert (MaybeEscapePattern("%5\x99S") == "%5%99S");
408 	assert (MaybeEscapePattern("%c%\x99") == "%c%%99");
409 	assert (MaybeEscapePattern(",h%6") == ",h%6");
410 	assert (MaybeEscapePattern("%5\x99%") == "%5%99%");
411 	assert (MaybeEscapePattern("%h+~") == "%h+~");
412 	assert (MaybeEscapePattern(",h%S") == ",h%S");
413 	assert (MaybeEscapePattern(",h%%") == ",h%%");
414 	assert (MaybeEscapePattern("%h+S") == "%h+S");
415 	assert (MaybeEscapePattern("%c2~") == "%C2~");
416 	assert (MaybeEscapePattern("% \x99S") == "% %99S");
417 	assert (MaybeEscapePattern("%h%f") == "%h%f");
418 	assert (MaybeEscapePattern("%h%~") == "%h%~");
419 	assert (MaybeEscapePattern(", d%") == ", d%");
420 	assert (MaybeEscapePattern("%c+~") == "%c+~");
421 	assert (MaybeEscapePattern("%h+%") == "%h+%");
422 	assert (MaybeEscapePattern("% \x99%") == "% %99%");
423 	assert (MaybeEscapePattern("%%\x99S") == "%%%99S");
424 	assert (MaybeEscapePattern("%%\x99%") == "%%%99%");
425 	assert (MaybeEscapePattern("%c%~") == "%c%~");
426 	assert (MaybeEscapePattern("%c%f") == "%c%f");
427 	assert (MaybeEscapePattern("%h%6") == "%h%6");
428 	assert (MaybeEscapePattern("%h%S") == "%h%S");
429 	assert (MaybeEscapePattern(", dS") == ", dS");
430 	assert (MaybeEscapePattern("%h%%") == "%h%%");
431 	assert (MaybeEscapePattern("%c2%") == "%C2%");
432 	assert (MaybeEscapePattern("%c2S") == "%C2S");
433 	assert (MaybeEscapePattern("%c+S") == "%c+S");
434 	assert (MaybeEscapePattern("%c%6") == "%c%6");
435 	assert (MaybeEscapePattern("%c+%") == "%c+%");
436 	assert (MaybeEscapePattern("%c%S") == "%c%S");
437 	assert (MaybeEscapePattern("%c%%") == "%c%%");
438 	assert (MaybeEscapePattern(",%{~") == ",%{~");
439 	assert (MaybeEscapePattern("%52~") == "%52~");
440 	assert (MaybeEscapePattern(", +~") == ", +~");
441 	assert (MaybeEscapePattern("% d~") == "% d~");
442 	assert (MaybeEscapePattern(",%{\x99") == ",%{%99");
443 	assert (MaybeEscapePattern(",%d\x99") == ",%d%99");
444 	assert (MaybeEscapePattern("% d\x99") == "% d%99");
445 	assert (MaybeEscapePattern(",%{S") == ",%{S");
446 	assert (MaybeEscapePattern("%52\x99") == "%52%99");
447 	assert (MaybeEscapePattern("%52S") == "%52S");
448 	assert (MaybeEscapePattern(",%26") == ",%26");
449 	assert (MaybeEscapePattern("%5d\x99") == "%5D%99");
450 	assert (MaybeEscapePattern("%5{\x99") == "%5{%99");
451 	assert (MaybeEscapePattern(",%{%") == ",%{%");
452 	assert (MaybeEscapePattern(", +\x99") == ", +%99");
453 	assert (MaybeEscapePattern(", +%") == ", +%");
454 	assert (MaybeEscapePattern(", %\x99") == ", %%99");
455 	assert (MaybeEscapePattern(",%+~") == ",%+~");
456 	assert (MaybeEscapePattern(",%d~") == ",%d~");
457 	assert (MaybeEscapePattern("% +~") == "% +~");
458 	assert (MaybeEscapePattern("%52%") == "%52%");
459 	assert (MaybeEscapePattern(", %6") == ", %6");
460 	assert (MaybeEscapePattern(",%2\x99") == ",%2%99");
461 	assert (MaybeEscapePattern(", +S") == ", +S");
462 	assert (MaybeEscapePattern(", %~") == ", %~");
463 	assert (MaybeEscapePattern("% d%") == "% d%");
464 	assert (MaybeEscapePattern("%%d\x99") == "%%d%99");
465 	assert (MaybeEscapePattern("%%{\x99") == "%%{%99");
466 	assert (MaybeEscapePattern("% dS") == "% dS");
467 	assert (MaybeEscapePattern("%5+~") == "%5+~");
468 	assert (MaybeEscapePattern("%5{~") == "%5{~");
469 	assert (MaybeEscapePattern(",%d%") == ",%d%");
470 	assert (MaybeEscapePattern(",%df") == ",%DF");
471 	assert (MaybeEscapePattern(",%dS") == ",%dS");
472 	assert (MaybeEscapePattern(",%d6") == ",%D6");
473 	assert (MaybeEscapePattern("%5d~") == "%5D~");
474 	assert (MaybeEscapePattern("%%{~") == "%%{~");
475 	assert (MaybeEscapePattern(",%+\x99") == ",%+%99");
476 	assert (MaybeEscapePattern(", %f") == ", %f");
477 	assert (MaybeEscapePattern(",%2~") == ",%2~");
478 	assert (MaybeEscapePattern(", %S") == ", %S");
479 	assert (MaybeEscapePattern(",%%\x99") == ",%%%99");
480 	assert (MaybeEscapePattern("%%{S") == "%%{S");
481 	assert (MaybeEscapePattern("%5+S") == "%5+S");
482 	assert (MaybeEscapePattern("%%d~") == "%%d~");
483 	assert (MaybeEscapePattern("%%26") == "%%26");
484 	assert (MaybeEscapePattern("%%{%") == "%%{%");
485 	assert (MaybeEscapePattern("%5{S") == "%5{S");
486 	assert (MaybeEscapePattern(", %%") == ", %%");
487 	assert (MaybeEscapePattern("%%df") == "%%DF");
488 	assert (MaybeEscapePattern(",%2S") == ",%2S");
489 	assert (MaybeEscapePattern("%5{%") == "%5{%");
490 	assert (MaybeEscapePattern(",%+%") == ",%+%");
491 	assert (MaybeEscapePattern(",%%~") == ",%%~");
492 	assert (MaybeEscapePattern("%5%~") == "%5%~");
493 	assert (MaybeEscapePattern("%5+\x99") == "%5+%99");
494 	assert (MaybeEscapePattern("%5%\x99") == "%5%%99");
495 	assert (MaybeEscapePattern("%5%f") == "%5%f");
496 	assert (MaybeEscapePattern(",%2%") == ",%2%");
497 	assert (MaybeEscapePattern("%5dS") == "%5DS");
498 	assert (MaybeEscapePattern("% %6") == "% %6");
499 	assert (MaybeEscapePattern("%5d%") == "%5D%");
500 	assert (MaybeEscapePattern("%%dS") == "%%dS");
501 	assert (MaybeEscapePattern("%%d%") == "%%d%");
502 	assert (MaybeEscapePattern("%%d6") == "%%D6");
503 	assert (MaybeEscapePattern("% %f") == "% %f");
504 	assert (MaybeEscapePattern(",%%6") == ",%%6");
505 	assert (MaybeEscapePattern(",%+S") == ",%+S");
506 	assert (MaybeEscapePattern("% +\x99") == "% +%99");
507 	assert (MaybeEscapePattern("% %\x99") == "% %%99");
508 	assert (MaybeEscapePattern("% %~") == "% %~");
509 	assert (MaybeEscapePattern(",%%f") == ",%%f");
510 	assert (MaybeEscapePattern("% %S") == "% %S");
511 	assert (MaybeEscapePattern("%%2~") == "%%2~");
512 	assert (MaybeEscapePattern("%%+~") == "%%+~");
513 	assert (MaybeEscapePattern("%%2\x99") == "%%2%99");
514 	assert (MaybeEscapePattern("% +%") == "% +%");
515 	assert (MaybeEscapePattern(",%%S") == ",%%S");
516 	assert (MaybeEscapePattern("%%+S") == "%%+S");
517 	assert (MaybeEscapePattern(",%2f") == ",%2F");
518 	assert (MaybeEscapePattern("%%+\x99") == "%%+%99");
519 	assert (MaybeEscapePattern("% +S") == "% +S");
520 	assert (MaybeEscapePattern("%5%S") == "%5%S");
521 	assert (MaybeEscapePattern(",%%%") == ",%%%");
522 	assert (MaybeEscapePattern("%%%~") == "%%%~");
523 	assert (MaybeEscapePattern("%5%6") == "%5%6");
524 	assert (MaybeEscapePattern("%%%\x99") == "%%%%99");
525 	assert (MaybeEscapePattern("%5+%") == "%5+%");
526 	assert (MaybeEscapePattern("%%%f") == "%%%f");
527 	assert (MaybeEscapePattern("%5%%") == "%5%%");
528 	assert (MaybeEscapePattern("%%2f") == "%%2F");
529 	assert (MaybeEscapePattern("% %%") == "% %%");
530 	assert (MaybeEscapePattern("%%%S") == "%%%S");
531 	assert (MaybeEscapePattern("%%+%") == "%%+%");
532 	assert (MaybeEscapePattern("%%2%") == "%%2%");
533 	assert (MaybeEscapePattern("%%2S") == "%%2S");
534 	assert (MaybeEscapePattern("%%%6") == "%%%6");
535 	assert (MaybeEscapePattern("%%%%") == "%%%%");
536 }
537 
538 unittest
539 {
540 	assert (MaybeEscapePattern("aaaaaaaa") == "aaaaaaaa");
541 	assert (MaybeEscapePattern("aaaaaaaA") == "aaaaaaaA");
542 	assert (MaybeEscapePattern("aaaaaaa%") == "aaaaaaa%");
543 	assert (MaybeEscapePattern("aaaaaaAa") == "aaaaaaAa");
544 	assert (MaybeEscapePattern("aaaaaaA%") == "aaaaaaA%");
545 	assert (MaybeEscapePattern("aaaaaa%a") == "aaaaaa%a");
546 	assert (MaybeEscapePattern("aaaaaa%A") == "aaaaaa%A");
547 	assert (MaybeEscapePattern("aaaaaa%%") == "aaaaaa%%");
548 	assert (MaybeEscapePattern("aaaaaAaa") == "aaaaaAaa");
549 	assert (MaybeEscapePattern("aaaaaAa%") == "aaaaaAa%");
550 	assert (MaybeEscapePattern("aaaaaA%a") == "aaaaaA%a");
551 	assert (MaybeEscapePattern("aaaaaA%%") == "aaaaaA%%");
552 	assert (MaybeEscapePattern("aaaaa%aa") == "aaaaa%AA");
553 	assert (MaybeEscapePattern("aaaaa%aA") == "aaaaa%AA");
554 	assert (MaybeEscapePattern("aaaaa%a%") == "aaaaa%a%");
555 	assert (MaybeEscapePattern("aaaaa%Aa") == "aaaaa%AA");
556 	assert (MaybeEscapePattern("aaaaa%A%") == "aaaaa%A%");
557 	assert (MaybeEscapePattern("aaaaa%%a") == "aaaaa%%a");
558 	assert (MaybeEscapePattern("aaaaa%%A") == "aaaaa%%A");
559 	assert (MaybeEscapePattern("aaaaa%%%") == "aaaaa%%%");
560 	assert (MaybeEscapePattern("aaaaAaaa") == "aaaaAaaa");
561 	assert (MaybeEscapePattern("aaaaAaa%") == "aaaaAaa%");
562 	assert (MaybeEscapePattern("aaaaAa%a") == "aaaaAa%a");
563 	assert (MaybeEscapePattern("aaaaAa%%") == "aaaaAa%%");
564 	assert (MaybeEscapePattern("aaaaA%aa") == "aaaaA%AA");
565 	assert (MaybeEscapePattern("aaaaA%a%") == "aaaaA%a%");
566 	assert (MaybeEscapePattern("aaaaA%%a") == "aaaaA%%a");
567 	assert (MaybeEscapePattern("aaaaA%%%") == "aaaaA%%%");
568 	assert (MaybeEscapePattern("aaaa%aaa") == "aaaa%AAa");
569 	assert (MaybeEscapePattern("aaaa%aaA") == "aaaa%AAA");
570 	assert (MaybeEscapePattern("aaaa%aa%") == "aaaa%AA%");
571 	assert (MaybeEscapePattern("aaaa%aAa") == "aaaa%AAa");
572 	assert (MaybeEscapePattern("aaaa%aA%") == "aaaa%AA%");
573 	assert (MaybeEscapePattern("aaaa%a%a") == "aaaa%a%a");
574 	assert (MaybeEscapePattern("aaaa%a%A") == "aaaa%a%A");
575 	assert (MaybeEscapePattern("aaaa%a%%") == "aaaa%a%%");
576 	assert (MaybeEscapePattern("aaaa%Aaa") == "aaaa%AAa");
577 	assert (MaybeEscapePattern("aaaa%Aa%") == "aaaa%AA%");
578 	assert (MaybeEscapePattern("aaaa%A%a") == "aaaa%A%a");
579 	assert (MaybeEscapePattern("aaaa%A%%") == "aaaa%A%%");
580 	assert (MaybeEscapePattern("aaaa%%aa") == "aaaa%%AA");
581 	assert (MaybeEscapePattern("aaaa%%aA") == "aaaa%%AA");
582 	assert (MaybeEscapePattern("aaaa%%a%") == "aaaa%%a%");
583 	assert (MaybeEscapePattern("aaaa%%Aa") == "aaaa%%AA");
584 	assert (MaybeEscapePattern("aaaa%%A%") == "aaaa%%A%");
585 	assert (MaybeEscapePattern("aaaa%%%a") == "aaaa%%%a");
586 	assert (MaybeEscapePattern("aaaa%%%A") == "aaaa%%%A");
587 	assert (MaybeEscapePattern("aaaa%%%%") == "aaaa%%%%");
588 	assert (MaybeEscapePattern("aaaAaaaa") == "aaaAaaaa");
589 	assert (MaybeEscapePattern("aaaAaaa%") == "aaaAaaa%");
590 	assert (MaybeEscapePattern("aaaAaa%a") == "aaaAaa%a");
591 	assert (MaybeEscapePattern("aaaAaa%%") == "aaaAaa%%");
592 	assert (MaybeEscapePattern("aaaAa%aa") == "aaaAa%AA");
593 	assert (MaybeEscapePattern("aaaAa%a%") == "aaaAa%a%");
594 	assert (MaybeEscapePattern("aaaAa%%a") == "aaaAa%%a");
595 	assert (MaybeEscapePattern("aaaAa%%%") == "aaaAa%%%");
596 	assert (MaybeEscapePattern("aaaA%aaa") == "aaaA%AAa");
597 	assert (MaybeEscapePattern("aaaA%aa%") == "aaaA%AA%");
598 	assert (MaybeEscapePattern("aaaA%a%a") == "aaaA%a%a");
599 	assert (MaybeEscapePattern("aaaA%a%%") == "aaaA%a%%");
600 	assert (MaybeEscapePattern("aaaA%%aa") == "aaaA%%AA");
601 	assert (MaybeEscapePattern("aaaA%%a%") == "aaaA%%a%");
602 	assert (MaybeEscapePattern("aaaA%%%a") == "aaaA%%%a");
603 	assert (MaybeEscapePattern("aaaA%%%%") == "aaaA%%%%");
604 	assert (MaybeEscapePattern("aaa%aaaa") == "aaa%AAaa");
605 	assert (MaybeEscapePattern("aaa%aaaA") == "aaa%AAaA");
606 	assert (MaybeEscapePattern("aaa%aaa%") == "aaa%AAa%");
607 	assert (MaybeEscapePattern("aaa%aaAa") == "aaa%AAAa");
608 	assert (MaybeEscapePattern("aaa%aaA%") == "aaa%AAA%");
609 	assert (MaybeEscapePattern("aaa%aa%a") == "aaa%AA%a");
610 	assert (MaybeEscapePattern("aaa%aa%A") == "aaa%AA%A");
611 	assert (MaybeEscapePattern("aaa%aa%%") == "aaa%AA%%");
612 	assert (MaybeEscapePattern("aaa%aAaa") == "aaa%AAaa");
613 	assert (MaybeEscapePattern("aaa%aAa%") == "aaa%AAa%");
614 	assert (MaybeEscapePattern("aaa%aA%a") == "aaa%AA%a");
615 	assert (MaybeEscapePattern("aaa%aA%%") == "aaa%AA%%");
616 	assert (MaybeEscapePattern("aaa%a%aa") == "aaa%a%AA");
617 	assert (MaybeEscapePattern("aaa%a%aA") == "aaa%a%AA");
618 	assert (MaybeEscapePattern("aaa%a%a%") == "aaa%a%a%");
619 	assert (MaybeEscapePattern("aaa%a%Aa") == "aaa%a%AA");
620 	assert (MaybeEscapePattern("aaa%a%A%") == "aaa%a%A%");
621 	assert (MaybeEscapePattern("aaa%a%%a") == "aaa%a%%a");
622 	assert (MaybeEscapePattern("aaa%a%%A") == "aaa%a%%A");
623 	assert (MaybeEscapePattern("aaa%a%%%") == "aaa%a%%%");
624 	assert (MaybeEscapePattern("aaa%Aaaa") == "aaa%AAaa");
625 	assert (MaybeEscapePattern("aaa%Aaa%") == "aaa%AAa%");
626 	assert (MaybeEscapePattern("aaa%Aa%a") == "aaa%AA%a");
627 	assert (MaybeEscapePattern("aaa%Aa%%") == "aaa%AA%%");
628 	assert (MaybeEscapePattern("aaa%A%aa") == "aaa%A%AA");
629 	assert (MaybeEscapePattern("aaa%A%a%") == "aaa%A%a%");
630 	assert (MaybeEscapePattern("aaa%A%%a") == "aaa%A%%a");
631 	assert (MaybeEscapePattern("aaa%A%%%") == "aaa%A%%%");
632 	assert (MaybeEscapePattern("aaa%%aaa") == "aaa%%AAa");
633 	assert (MaybeEscapePattern("aaa%%aaA") == "aaa%%AAA");
634 	assert (MaybeEscapePattern("aaa%%aa%") == "aaa%%AA%");
635 	assert (MaybeEscapePattern("aaa%%aAa") == "aaa%%AAa");
636 	assert (MaybeEscapePattern("aaa%%aA%") == "aaa%%AA%");
637 	assert (MaybeEscapePattern("aaa%%a%a") == "aaa%%a%a");
638 	assert (MaybeEscapePattern("aaa%%a%A") == "aaa%%a%A");
639 	assert (MaybeEscapePattern("aaa%%a%%") == "aaa%%a%%");
640 	assert (MaybeEscapePattern("aaa%%Aaa") == "aaa%%AAa");
641 	assert (MaybeEscapePattern("aaa%%Aa%") == "aaa%%AA%");
642 	assert (MaybeEscapePattern("aaa%%A%a") == "aaa%%A%a");
643 	assert (MaybeEscapePattern("aaa%%A%%") == "aaa%%A%%");
644 	assert (MaybeEscapePattern("aaa%%%aa") == "aaa%%%AA");
645 	assert (MaybeEscapePattern("aaa%%%aA") == "aaa%%%AA");
646 	assert (MaybeEscapePattern("aaa%%%a%") == "aaa%%%a%");
647 	assert (MaybeEscapePattern("aaa%%%Aa") == "aaa%%%AA");
648 	assert (MaybeEscapePattern("aaa%%%A%") == "aaa%%%A%");
649 	assert (MaybeEscapePattern("aaa%%%%a") == "aaa%%%%a");
650 	assert (MaybeEscapePattern("aaa%%%%A") == "aaa%%%%A");
651 	assert (MaybeEscapePattern("aaa%%%%%") == "aaa%%%%%");
652 	assert (MaybeEscapePattern("aaAaaaaa") == "aaAaaaaa");
653 	assert (MaybeEscapePattern("aaAaaaa%") == "aaAaaaa%");
654 	assert (MaybeEscapePattern("aaAaaa%a") == "aaAaaa%a");
655 	assert (MaybeEscapePattern("aaAaaa%%") == "aaAaaa%%");
656 	assert (MaybeEscapePattern("aaAaa%aa") == "aaAaa%AA");
657 	assert (MaybeEscapePattern("aaAaa%a%") == "aaAaa%a%");
658 	assert (MaybeEscapePattern("aaAaa%%a") == "aaAaa%%a");
659 	assert (MaybeEscapePattern("aaAaa%%%") == "aaAaa%%%");
660 	assert (MaybeEscapePattern("aaAa%aaa") == "aaAa%AAa");
661 	assert (MaybeEscapePattern("aaAa%aa%") == "aaAa%AA%");
662 	assert (MaybeEscapePattern("aaAa%a%a") == "aaAa%a%a");
663 	assert (MaybeEscapePattern("aaAa%a%%") == "aaAa%a%%");
664 	assert (MaybeEscapePattern("aaAa%%aa") == "aaAa%%AA");
665 	assert (MaybeEscapePattern("aaAa%%a%") == "aaAa%%a%");
666 	assert (MaybeEscapePattern("aaAa%%%a") == "aaAa%%%a");
667 	assert (MaybeEscapePattern("aaAa%%%%") == "aaAa%%%%");
668 	assert (MaybeEscapePattern("aaA%aaaa") == "aaA%AAaa");
669 	assert (MaybeEscapePattern("aaA%aaa%") == "aaA%AAa%");
670 	assert (MaybeEscapePattern("aaA%aa%a") == "aaA%AA%a");
671 	assert (MaybeEscapePattern("aaA%aa%%") == "aaA%AA%%");
672 	assert (MaybeEscapePattern("aaA%a%aa") == "aaA%a%AA");
673 	assert (MaybeEscapePattern("aaA%a%a%") == "aaA%a%a%");
674 	assert (MaybeEscapePattern("aaA%a%%a") == "aaA%a%%a");
675 	assert (MaybeEscapePattern("aaA%a%%%") == "aaA%a%%%");
676 	assert (MaybeEscapePattern("aaA%%aaa") == "aaA%%AAa");
677 	assert (MaybeEscapePattern("aaA%%aa%") == "aaA%%AA%");
678 	assert (MaybeEscapePattern("aaA%%a%a") == "aaA%%a%a");
679 	assert (MaybeEscapePattern("aaA%%a%%") == "aaA%%a%%");
680 	assert (MaybeEscapePattern("aaA%%%aa") == "aaA%%%AA");
681 	assert (MaybeEscapePattern("aaA%%%a%") == "aaA%%%a%");
682 	assert (MaybeEscapePattern("aaA%%%%a") == "aaA%%%%a");
683 	assert (MaybeEscapePattern("aaA%%%%%") == "aaA%%%%%");
684 	assert (MaybeEscapePattern("aa%aaaaa") == "aa%AAaaa");
685 	assert (MaybeEscapePattern("aa%aaaaA") == "aa%AAaaA");
686 	assert (MaybeEscapePattern("aa%aaaa%") == "aa%AAaa%");
687 	assert (MaybeEscapePattern("aa%aaaAa") == "aa%AAaAa");
688 	assert (MaybeEscapePattern("aa%aaaA%") == "aa%AAaA%");
689 	assert (MaybeEscapePattern("aa%aaa%a") == "aa%AAa%a");
690 	assert (MaybeEscapePattern("aa%aaa%A") == "aa%AAa%A");
691 	assert (MaybeEscapePattern("aa%aaa%%") == "aa%AAa%%");
692 	assert (MaybeEscapePattern("aa%aaAaa") == "aa%AAAaa");
693 	assert (MaybeEscapePattern("aa%aaAa%") == "aa%AAAa%");
694 	assert (MaybeEscapePattern("aa%aaA%a") == "aa%AAA%a");
695 	assert (MaybeEscapePattern("aa%aaA%%") == "aa%AAA%%");
696 	assert (MaybeEscapePattern("aa%aa%aa") == "aa%AA%AA");
697 	assert (MaybeEscapePattern("aa%aa%aA") == "aa%AA%AA");
698 	assert (MaybeEscapePattern("aa%aa%a%") == "aa%AA%a%");
699 	assert (MaybeEscapePattern("aa%aa%Aa") == "aa%AA%AA");
700 	assert (MaybeEscapePattern("aa%aa%A%") == "aa%AA%A%");
701 	assert (MaybeEscapePattern("aa%aa%%a") == "aa%AA%%a");
702 	assert (MaybeEscapePattern("aa%aa%%A") == "aa%AA%%A");
703 	assert (MaybeEscapePattern("aa%aa%%%") == "aa%AA%%%");
704 	assert (MaybeEscapePattern("aa%aAaaa") == "aa%AAaaa");
705 	assert (MaybeEscapePattern("aa%aAaa%") == "aa%AAaa%");
706 	assert (MaybeEscapePattern("aa%aAa%a") == "aa%AAa%a");
707 	assert (MaybeEscapePattern("aa%aAa%%") == "aa%AAa%%");
708 	assert (MaybeEscapePattern("aa%aA%aa") == "aa%AA%AA");
709 	assert (MaybeEscapePattern("aa%aA%a%") == "aa%AA%a%");
710 	assert (MaybeEscapePattern("aa%aA%%a") == "aa%AA%%a");
711 	assert (MaybeEscapePattern("aa%aA%%%") == "aa%AA%%%");
712 	assert (MaybeEscapePattern("aa%a%aaa") == "aa%a%AAa");
713 	assert (MaybeEscapePattern("aa%a%aaA") == "aa%a%AAA");
714 	assert (MaybeEscapePattern("aa%a%aa%") == "aa%a%AA%");
715 	assert (MaybeEscapePattern("aa%a%aAa") == "aa%a%AAa");
716 	assert (MaybeEscapePattern("aa%a%aA%") == "aa%a%AA%");
717 	assert (MaybeEscapePattern("aa%a%a%a") == "aa%a%a%a");
718 	assert (MaybeEscapePattern("aa%a%a%A") == "aa%a%a%A");
719 	assert (MaybeEscapePattern("aa%a%a%%") == "aa%a%a%%");
720 	assert (MaybeEscapePattern("aa%a%Aaa") == "aa%a%AAa");
721 	assert (MaybeEscapePattern("aa%a%Aa%") == "aa%a%AA%");
722 	assert (MaybeEscapePattern("aa%a%A%a") == "aa%a%A%a");
723 	assert (MaybeEscapePattern("aa%a%A%%") == "aa%a%A%%");
724 	assert (MaybeEscapePattern("aa%a%%aa") == "aa%a%%AA");
725 	assert (MaybeEscapePattern("aa%a%%aA") == "aa%a%%AA");
726 	assert (MaybeEscapePattern("aa%a%%a%") == "aa%a%%a%");
727 	assert (MaybeEscapePattern("aa%a%%Aa") == "aa%a%%AA");
728 	assert (MaybeEscapePattern("aa%a%%A%") == "aa%a%%A%");
729 	assert (MaybeEscapePattern("aa%a%%%a") == "aa%a%%%a");
730 	assert (MaybeEscapePattern("aa%a%%%A") == "aa%a%%%A");
731 	assert (MaybeEscapePattern("aa%a%%%%") == "aa%a%%%%");
732 	assert (MaybeEscapePattern("aa%Aaaaa") == "aa%AAaaa");
733 	assert (MaybeEscapePattern("aa%Aaaa%") == "aa%AAaa%");
734 	assert (MaybeEscapePattern("aa%Aaa%a") == "aa%AAa%a");
735 	assert (MaybeEscapePattern("aa%Aaa%%") == "aa%AAa%%");
736 	assert (MaybeEscapePattern("aa%Aa%aa") == "aa%AA%AA");
737 	assert (MaybeEscapePattern("aa%Aa%a%") == "aa%AA%a%");
738 	assert (MaybeEscapePattern("aa%Aa%%a") == "aa%AA%%a");
739 	assert (MaybeEscapePattern("aa%Aa%%%") == "aa%AA%%%");
740 	assert (MaybeEscapePattern("aa%A%aaa") == "aa%A%AAa");
741 	assert (MaybeEscapePattern("aa%A%aa%") == "aa%A%AA%");
742 	assert (MaybeEscapePattern("aa%A%a%a") == "aa%A%a%a");
743 	assert (MaybeEscapePattern("aa%A%a%%") == "aa%A%a%%");
744 	assert (MaybeEscapePattern("aa%A%%aa") == "aa%A%%AA");
745 	assert (MaybeEscapePattern("aa%A%%a%") == "aa%A%%a%");
746 	assert (MaybeEscapePattern("aa%A%%%a") == "aa%A%%%a");
747 	assert (MaybeEscapePattern("aa%A%%%%") == "aa%A%%%%");
748 	assert (MaybeEscapePattern("aa%%aaaa") == "aa%%AAaa");
749 	assert (MaybeEscapePattern("aa%%aaaA") == "aa%%AAaA");
750 	assert (MaybeEscapePattern("aa%%aaa%") == "aa%%AAa%");
751 	assert (MaybeEscapePattern("aa%%aaAa") == "aa%%AAAa");
752 	assert (MaybeEscapePattern("aa%%aaA%") == "aa%%AAA%");
753 	assert (MaybeEscapePattern("aa%%aa%a") == "aa%%AA%a");
754 	assert (MaybeEscapePattern("aa%%aa%A") == "aa%%AA%A");
755 	assert (MaybeEscapePattern("aa%%aa%%") == "aa%%AA%%");
756 	assert (MaybeEscapePattern("aa%%aAaa") == "aa%%AAaa");
757 	assert (MaybeEscapePattern("aa%%aAa%") == "aa%%AAa%");
758 	assert (MaybeEscapePattern("aa%%aA%a") == "aa%%AA%a");
759 	assert (MaybeEscapePattern("aa%%aA%%") == "aa%%AA%%");
760 	assert (MaybeEscapePattern("aa%%a%aa") == "aa%%a%AA");
761 	assert (MaybeEscapePattern("aa%%a%aA") == "aa%%a%AA");
762 	assert (MaybeEscapePattern("aa%%a%a%") == "aa%%a%a%");
763 	assert (MaybeEscapePattern("aa%%a%Aa") == "aa%%a%AA");
764 	assert (MaybeEscapePattern("aa%%a%A%") == "aa%%a%A%");
765 	assert (MaybeEscapePattern("aa%%a%%a") == "aa%%a%%a");
766 	assert (MaybeEscapePattern("aa%%a%%A") == "aa%%a%%A");
767 	assert (MaybeEscapePattern("aa%%a%%%") == "aa%%a%%%");
768 	assert (MaybeEscapePattern("aa%%Aaaa") == "aa%%AAaa");
769 	assert (MaybeEscapePattern("aa%%Aaa%") == "aa%%AAa%");
770 	assert (MaybeEscapePattern("aa%%Aa%a") == "aa%%AA%a");
771 	assert (MaybeEscapePattern("aa%%Aa%%") == "aa%%AA%%");
772 	assert (MaybeEscapePattern("aa%%A%aa") == "aa%%A%AA");
773 	assert (MaybeEscapePattern("aa%%A%a%") == "aa%%A%a%");
774 	assert (MaybeEscapePattern("aa%%A%%a") == "aa%%A%%a");
775 	assert (MaybeEscapePattern("aa%%A%%%") == "aa%%A%%%");
776 	assert (MaybeEscapePattern("aa%%%aaa") == "aa%%%AAa");
777 	assert (MaybeEscapePattern("aa%%%aaA") == "aa%%%AAA");
778 	assert (MaybeEscapePattern("aa%%%aa%") == "aa%%%AA%");
779 	assert (MaybeEscapePattern("aa%%%aAa") == "aa%%%AAa");
780 	assert (MaybeEscapePattern("aa%%%aA%") == "aa%%%AA%");
781 	assert (MaybeEscapePattern("aa%%%a%a") == "aa%%%a%a");
782 	assert (MaybeEscapePattern("aa%%%a%A") == "aa%%%a%A");
783 	assert (MaybeEscapePattern("aa%%%a%%") == "aa%%%a%%");
784 	assert (MaybeEscapePattern("aa%%%Aaa") == "aa%%%AAa");
785 	assert (MaybeEscapePattern("aa%%%Aa%") == "aa%%%AA%");
786 	assert (MaybeEscapePattern("aa%%%A%a") == "aa%%%A%a");
787 	assert (MaybeEscapePattern("aa%%%A%%") == "aa%%%A%%");
788 	assert (MaybeEscapePattern("aa%%%%aa") == "aa%%%%AA");
789 	assert (MaybeEscapePattern("aa%%%%aA") == "aa%%%%AA");
790 	assert (MaybeEscapePattern("aa%%%%a%") == "aa%%%%a%");
791 	assert (MaybeEscapePattern("aa%%%%Aa") == "aa%%%%AA");
792 	assert (MaybeEscapePattern("aa%%%%A%") == "aa%%%%A%");
793 	assert (MaybeEscapePattern("aa%%%%%a") == "aa%%%%%a");
794 	assert (MaybeEscapePattern("aa%%%%%A") == "aa%%%%%A");
795 	assert (MaybeEscapePattern("aa%%%%%%") == "aa%%%%%%");
796 	assert (MaybeEscapePattern("aAaaaaaa") == "aAaaaaaa");
797 	assert (MaybeEscapePattern("aAaaaaa%") == "aAaaaaa%");
798 	assert (MaybeEscapePattern("aAaaaa%a") == "aAaaaa%a");
799 	assert (MaybeEscapePattern("aAaaaa%%") == "aAaaaa%%");
800 	assert (MaybeEscapePattern("aAaaa%aa") == "aAaaa%AA");
801 	assert (MaybeEscapePattern("aAaaa%a%") == "aAaaa%a%");
802 	assert (MaybeEscapePattern("aAaaa%%a") == "aAaaa%%a");
803 	assert (MaybeEscapePattern("aAaaa%%%") == "aAaaa%%%");
804 	assert (MaybeEscapePattern("aAaa%aaa") == "aAaa%AAa");
805 	assert (MaybeEscapePattern("aAaa%aa%") == "aAaa%AA%");
806 	assert (MaybeEscapePattern("aAaa%a%a") == "aAaa%a%a");
807 	assert (MaybeEscapePattern("aAaa%a%%") == "aAaa%a%%");
808 	assert (MaybeEscapePattern("aAaa%%aa") == "aAaa%%AA");
809 	assert (MaybeEscapePattern("aAaa%%a%") == "aAaa%%a%");
810 	assert (MaybeEscapePattern("aAaa%%%a") == "aAaa%%%a");
811 	assert (MaybeEscapePattern("aAaa%%%%") == "aAaa%%%%");
812 	assert (MaybeEscapePattern("aAa%aaaa") == "aAa%AAaa");
813 	assert (MaybeEscapePattern("aAa%aaa%") == "aAa%AAa%");
814 	assert (MaybeEscapePattern("aAa%aa%a") == "aAa%AA%a");
815 	assert (MaybeEscapePattern("aAa%aa%%") == "aAa%AA%%");
816 	assert (MaybeEscapePattern("aAa%a%aa") == "aAa%a%AA");
817 	assert (MaybeEscapePattern("aAa%a%a%") == "aAa%a%a%");
818 	assert (MaybeEscapePattern("aAa%a%%a") == "aAa%a%%a");
819 	assert (MaybeEscapePattern("aAa%a%%%") == "aAa%a%%%");
820 	assert (MaybeEscapePattern("aAa%%aaa") == "aAa%%AAa");
821 	assert (MaybeEscapePattern("aAa%%aa%") == "aAa%%AA%");
822 	assert (MaybeEscapePattern("aAa%%a%a") == "aAa%%a%a");
823 	assert (MaybeEscapePattern("aAa%%a%%") == "aAa%%a%%");
824 	assert (MaybeEscapePattern("aAa%%%aa") == "aAa%%%AA");
825 	assert (MaybeEscapePattern("aAa%%%a%") == "aAa%%%a%");
826 	assert (MaybeEscapePattern("aAa%%%%a") == "aAa%%%%a");
827 	assert (MaybeEscapePattern("aAa%%%%%") == "aAa%%%%%");
828 	assert (MaybeEscapePattern("aA%aaaaa") == "aA%AAaaa");
829 	assert (MaybeEscapePattern("aA%aaaa%") == "aA%AAaa%");
830 	assert (MaybeEscapePattern("aA%aaa%a") == "aA%AAa%a");
831 	assert (MaybeEscapePattern("aA%aaa%%") == "aA%AAa%%");
832 	assert (MaybeEscapePattern("aA%aa%aa") == "aA%AA%AA");
833 	assert (MaybeEscapePattern("aA%aa%a%") == "aA%AA%a%");
834 	assert (MaybeEscapePattern("aA%aa%%a") == "aA%AA%%a");
835 	assert (MaybeEscapePattern("aA%aa%%%") == "aA%AA%%%");
836 	assert (MaybeEscapePattern("aA%a%aaa") == "aA%a%AAa");
837 	assert (MaybeEscapePattern("aA%a%aa%") == "aA%a%AA%");
838 	assert (MaybeEscapePattern("aA%a%a%a") == "aA%a%a%a");
839 	assert (MaybeEscapePattern("aA%a%a%%") == "aA%a%a%%");
840 	assert (MaybeEscapePattern("aA%a%%aa") == "aA%a%%AA");
841 	assert (MaybeEscapePattern("aA%a%%a%") == "aA%a%%a%");
842 	assert (MaybeEscapePattern("aA%a%%%a") == "aA%a%%%a");
843 	assert (MaybeEscapePattern("aA%a%%%%") == "aA%a%%%%");
844 	assert (MaybeEscapePattern("aA%%aaaa") == "aA%%AAaa");
845 	assert (MaybeEscapePattern("aA%%aaa%") == "aA%%AAa%");
846 	assert (MaybeEscapePattern("aA%%aa%a") == "aA%%AA%a");
847 	assert (MaybeEscapePattern("aA%%aa%%") == "aA%%AA%%");
848 	assert (MaybeEscapePattern("aA%%a%aa") == "aA%%a%AA");
849 	assert (MaybeEscapePattern("aA%%a%a%") == "aA%%a%a%");
850 	assert (MaybeEscapePattern("aA%%a%%a") == "aA%%a%%a");
851 	assert (MaybeEscapePattern("aA%%a%%%") == "aA%%a%%%");
852 	assert (MaybeEscapePattern("aA%%%aaa") == "aA%%%AAa");
853 	assert (MaybeEscapePattern("aA%%%aa%") == "aA%%%AA%");
854 	assert (MaybeEscapePattern("aA%%%a%a") == "aA%%%a%a");
855 	assert (MaybeEscapePattern("aA%%%a%%") == "aA%%%a%%");
856 	assert (MaybeEscapePattern("aA%%%%aa") == "aA%%%%AA");
857 	assert (MaybeEscapePattern("aA%%%%a%") == "aA%%%%a%");
858 	assert (MaybeEscapePattern("aA%%%%%a") == "aA%%%%%a");
859 	assert (MaybeEscapePattern("aA%%%%%%") == "aA%%%%%%");
860 	assert (MaybeEscapePattern("a%aaaaaa") == "a%AAaaaa");
861 	assert (MaybeEscapePattern("a%aaaaaA") == "a%AAaaaA");
862 	assert (MaybeEscapePattern("a%aaaaa%") == "a%AAaaa%");
863 	assert (MaybeEscapePattern("a%aaaaAa") == "a%AAaaAa");
864 	assert (MaybeEscapePattern("a%aaaaA%") == "a%AAaaA%");
865 	assert (MaybeEscapePattern("a%aaaa%a") == "a%AAaa%a");
866 	assert (MaybeEscapePattern("a%aaaa%A") == "a%AAaa%A");
867 	assert (MaybeEscapePattern("a%aaaa%%") == "a%AAaa%%");
868 	assert (MaybeEscapePattern("a%aaaAaa") == "a%AAaAaa");
869 	assert (MaybeEscapePattern("a%aaaAa%") == "a%AAaAa%");
870 	assert (MaybeEscapePattern("a%aaaA%a") == "a%AAaA%a");
871 	assert (MaybeEscapePattern("a%aaaA%%") == "a%AAaA%%");
872 	assert (MaybeEscapePattern("a%aaa%aa") == "a%AAa%AA");
873 	assert (MaybeEscapePattern("a%aaa%aA") == "a%AAa%AA");
874 	assert (MaybeEscapePattern("a%aaa%a%") == "a%AAa%a%");
875 	assert (MaybeEscapePattern("a%aaa%Aa") == "a%AAa%AA");
876 	assert (MaybeEscapePattern("a%aaa%A%") == "a%AAa%A%");
877 	assert (MaybeEscapePattern("a%aaa%%a") == "a%AAa%%a");
878 	assert (MaybeEscapePattern("a%aaa%%A") == "a%AAa%%A");
879 	assert (MaybeEscapePattern("a%aaa%%%") == "a%AAa%%%");
880 	assert (MaybeEscapePattern("a%aaAaaa") == "a%AAAaaa");
881 	assert (MaybeEscapePattern("a%aaAaa%") == "a%AAAaa%");
882 	assert (MaybeEscapePattern("a%aaAa%a") == "a%AAAa%a");
883 	assert (MaybeEscapePattern("a%aaAa%%") == "a%AAAa%%");
884 	assert (MaybeEscapePattern("a%aaA%aa") == "a%AAA%AA");
885 	assert (MaybeEscapePattern("a%aaA%a%") == "a%AAA%a%");
886 	assert (MaybeEscapePattern("a%aaA%%a") == "a%AAA%%a");
887 	assert (MaybeEscapePattern("a%aaA%%%") == "a%AAA%%%");
888 	assert (MaybeEscapePattern("a%aa%aaa") == "a%AA%AAa");
889 	assert (MaybeEscapePattern("a%aa%aaA") == "a%AA%AAA");
890 	assert (MaybeEscapePattern("a%aa%aa%") == "a%AA%AA%");
891 	assert (MaybeEscapePattern("a%aa%aAa") == "a%AA%AAa");
892 	assert (MaybeEscapePattern("a%aa%aA%") == "a%AA%AA%");
893 	assert (MaybeEscapePattern("a%aa%a%a") == "a%AA%a%a");
894 	assert (MaybeEscapePattern("a%aa%a%A") == "a%AA%a%A");
895 	assert (MaybeEscapePattern("a%aa%a%%") == "a%AA%a%%");
896 	assert (MaybeEscapePattern("a%aa%Aaa") == "a%AA%AAa");
897 	assert (MaybeEscapePattern("a%aa%Aa%") == "a%AA%AA%");
898 	assert (MaybeEscapePattern("a%aa%A%a") == "a%AA%A%a");
899 	assert (MaybeEscapePattern("a%aa%A%%") == "a%AA%A%%");
900 	assert (MaybeEscapePattern("a%aa%%aa") == "a%AA%%AA");
901 	assert (MaybeEscapePattern("a%aa%%aA") == "a%AA%%AA");
902 	assert (MaybeEscapePattern("a%aa%%a%") == "a%AA%%a%");
903 	assert (MaybeEscapePattern("a%aa%%Aa") == "a%AA%%AA");
904 	assert (MaybeEscapePattern("a%aa%%A%") == "a%AA%%A%");
905 	assert (MaybeEscapePattern("a%aa%%%a") == "a%AA%%%a");
906 	assert (MaybeEscapePattern("a%aa%%%A") == "a%AA%%%A");
907 	assert (MaybeEscapePattern("a%aa%%%%") == "a%AA%%%%");
908 	assert (MaybeEscapePattern("a%aAaaaa") == "a%AAaaaa");
909 	assert (MaybeEscapePattern("a%aAaaa%") == "a%AAaaa%");
910 	assert (MaybeEscapePattern("a%aAaa%a") == "a%AAaa%a");
911 	assert (MaybeEscapePattern("a%aAaa%%") == "a%AAaa%%");
912 	assert (MaybeEscapePattern("a%aAa%aa") == "a%AAa%AA");
913 	assert (MaybeEscapePattern("a%aAa%a%") == "a%AAa%a%");
914 	assert (MaybeEscapePattern("a%aAa%%a") == "a%AAa%%a");
915 	assert (MaybeEscapePattern("a%aAa%%%") == "a%AAa%%%");
916 	assert (MaybeEscapePattern("a%aA%aaa") == "a%AA%AAa");
917 	assert (MaybeEscapePattern("a%aA%aa%") == "a%AA%AA%");
918 	assert (MaybeEscapePattern("a%aA%a%a") == "a%AA%a%a");
919 	assert (MaybeEscapePattern("a%aA%a%%") == "a%AA%a%%");
920 	assert (MaybeEscapePattern("a%aA%%aa") == "a%AA%%AA");
921 	assert (MaybeEscapePattern("a%aA%%a%") == "a%AA%%a%");
922 	assert (MaybeEscapePattern("a%aA%%%a") == "a%AA%%%a");
923 	assert (MaybeEscapePattern("a%aA%%%%") == "a%AA%%%%");
924 	assert (MaybeEscapePattern("a%a%aaaa") == "a%a%AAaa");
925 	assert (MaybeEscapePattern("a%a%aaaA") == "a%a%AAaA");
926 	assert (MaybeEscapePattern("a%a%aaa%") == "a%a%AAa%");
927 	assert (MaybeEscapePattern("a%a%aaAa") == "a%a%AAAa");
928 	assert (MaybeEscapePattern("a%a%aaA%") == "a%a%AAA%");
929 	assert (MaybeEscapePattern("a%a%aa%a") == "a%a%AA%a");
930 	assert (MaybeEscapePattern("a%a%aa%A") == "a%a%AA%A");
931 	assert (MaybeEscapePattern("a%a%aa%%") == "a%a%AA%%");
932 	assert (MaybeEscapePattern("a%a%aAaa") == "a%a%AAaa");
933 	assert (MaybeEscapePattern("a%a%aAa%") == "a%a%AAa%");
934 	assert (MaybeEscapePattern("a%a%aA%a") == "a%a%AA%a");
935 	assert (MaybeEscapePattern("a%a%aA%%") == "a%a%AA%%");
936 	assert (MaybeEscapePattern("a%a%a%aa") == "a%a%a%AA");
937 	assert (MaybeEscapePattern("a%a%a%aA") == "a%a%a%AA");
938 	assert (MaybeEscapePattern("a%a%a%a%") == "a%a%a%a%");
939 	assert (MaybeEscapePattern("a%a%a%Aa") == "a%a%a%AA");
940 	assert (MaybeEscapePattern("a%a%a%A%") == "a%a%a%A%");
941 	assert (MaybeEscapePattern("a%a%a%%a") == "a%a%a%%a");
942 	assert (MaybeEscapePattern("a%a%a%%A") == "a%a%a%%A");
943 	assert (MaybeEscapePattern("a%a%a%%%") == "a%a%a%%%");
944 	assert (MaybeEscapePattern("a%a%Aaaa") == "a%a%AAaa");
945 	assert (MaybeEscapePattern("a%a%Aaa%") == "a%a%AAa%");
946 	assert (MaybeEscapePattern("a%a%Aa%a") == "a%a%AA%a");
947 	assert (MaybeEscapePattern("a%a%Aa%%") == "a%a%AA%%");
948 	assert (MaybeEscapePattern("a%a%A%aa") == "a%a%A%AA");
949 	assert (MaybeEscapePattern("a%a%A%a%") == "a%a%A%a%");
950 	assert (MaybeEscapePattern("a%a%A%%a") == "a%a%A%%a");
951 	assert (MaybeEscapePattern("a%a%A%%%") == "a%a%A%%%");
952 	assert (MaybeEscapePattern("a%a%%aaa") == "a%a%%AAa");
953 	assert (MaybeEscapePattern("a%a%%aaA") == "a%a%%AAA");
954 	assert (MaybeEscapePattern("a%a%%aa%") == "a%a%%AA%");
955 	assert (MaybeEscapePattern("a%a%%aAa") == "a%a%%AAa");
956 	assert (MaybeEscapePattern("a%a%%aA%") == "a%a%%AA%");
957 	assert (MaybeEscapePattern("a%a%%a%a") == "a%a%%a%a");
958 	assert (MaybeEscapePattern("a%a%%a%A") == "a%a%%a%A");
959 	assert (MaybeEscapePattern("a%a%%a%%") == "a%a%%a%%");
960 	assert (MaybeEscapePattern("a%a%%Aaa") == "a%a%%AAa");
961 	assert (MaybeEscapePattern("a%a%%Aa%") == "a%a%%AA%");
962 	assert (MaybeEscapePattern("a%a%%A%a") == "a%a%%A%a");
963 	assert (MaybeEscapePattern("a%a%%A%%") == "a%a%%A%%");
964 	assert (MaybeEscapePattern("a%a%%%aa") == "a%a%%%AA");
965 	assert (MaybeEscapePattern("a%a%%%aA") == "a%a%%%AA");
966 	assert (MaybeEscapePattern("a%a%%%a%") == "a%a%%%a%");
967 	assert (MaybeEscapePattern("a%a%%%Aa") == "a%a%%%AA");
968 	assert (MaybeEscapePattern("a%a%%%A%") == "a%a%%%A%");
969 	assert (MaybeEscapePattern("a%a%%%%a") == "a%a%%%%a");
970 	assert (MaybeEscapePattern("a%a%%%%A") == "a%a%%%%A");
971 	assert (MaybeEscapePattern("a%a%%%%%") == "a%a%%%%%");
972 	assert (MaybeEscapePattern("a%Aaaaaa") == "a%AAaaaa");
973 	assert (MaybeEscapePattern("a%Aaaaa%") == "a%AAaaa%");
974 	assert (MaybeEscapePattern("a%Aaaa%a") == "a%AAaa%a");
975 	assert (MaybeEscapePattern("a%Aaaa%%") == "a%AAaa%%");
976 	assert (MaybeEscapePattern("a%Aaa%aa") == "a%AAa%AA");
977 	assert (MaybeEscapePattern("a%Aaa%a%") == "a%AAa%a%");
978 	assert (MaybeEscapePattern("a%Aaa%%a") == "a%AAa%%a");
979 	assert (MaybeEscapePattern("a%Aaa%%%") == "a%AAa%%%");
980 	assert (MaybeEscapePattern("a%Aa%aaa") == "a%AA%AAa");
981 	assert (MaybeEscapePattern("a%Aa%aa%") == "a%AA%AA%");
982 	assert (MaybeEscapePattern("a%Aa%a%a") == "a%AA%a%a");
983 	assert (MaybeEscapePattern("a%Aa%a%%") == "a%AA%a%%");
984 	assert (MaybeEscapePattern("a%Aa%%aa") == "a%AA%%AA");
985 	assert (MaybeEscapePattern("a%Aa%%a%") == "a%AA%%a%");
986 	assert (MaybeEscapePattern("a%Aa%%%a") == "a%AA%%%a");
987 	assert (MaybeEscapePattern("a%Aa%%%%") == "a%AA%%%%");
988 	assert (MaybeEscapePattern("a%A%aaaa") == "a%A%AAaa");
989 	assert (MaybeEscapePattern("a%A%aaa%") == "a%A%AAa%");
990 	assert (MaybeEscapePattern("a%A%aa%a") == "a%A%AA%a");
991 	assert (MaybeEscapePattern("a%A%aa%%") == "a%A%AA%%");
992 	assert (MaybeEscapePattern("a%A%a%aa") == "a%A%a%AA");
993 	assert (MaybeEscapePattern("a%A%a%a%") == "a%A%a%a%");
994 	assert (MaybeEscapePattern("a%A%a%%a") == "a%A%a%%a");
995 	assert (MaybeEscapePattern("a%A%a%%%") == "a%A%a%%%");
996 	assert (MaybeEscapePattern("a%A%%aaa") == "a%A%%AAa");
997 	assert (MaybeEscapePattern("a%A%%aa%") == "a%A%%AA%");
998 	assert (MaybeEscapePattern("a%A%%a%a") == "a%A%%a%a");
999 	assert (MaybeEscapePattern("a%A%%a%%") == "a%A%%a%%");
1000 	assert (MaybeEscapePattern("a%A%%%aa") == "a%A%%%AA");
1001 	assert (MaybeEscapePattern("a%A%%%a%") == "a%A%%%a%");
1002 	assert (MaybeEscapePattern("a%A%%%%a") == "a%A%%%%a");
1003 	assert (MaybeEscapePattern("a%A%%%%%") == "a%A%%%%%");
1004 	assert (MaybeEscapePattern("a%%aaaaa") == "a%%AAaaa");
1005 	assert (MaybeEscapePattern("a%%aaaaA") == "a%%AAaaA");
1006 	assert (MaybeEscapePattern("a%%aaaa%") == "a%%AAaa%");
1007 	assert (MaybeEscapePattern("a%%aaaAa") == "a%%AAaAa");
1008 	assert (MaybeEscapePattern("a%%aaaA%") == "a%%AAaA%");
1009 	assert (MaybeEscapePattern("a%%aaa%a") == "a%%AAa%a");
1010 	assert (MaybeEscapePattern("a%%aaa%A") == "a%%AAa%A");
1011 	assert (MaybeEscapePattern("a%%aaa%%") == "a%%AAa%%");
1012 	assert (MaybeEscapePattern("a%%aaAaa") == "a%%AAAaa");
1013 	assert (MaybeEscapePattern("a%%aaAa%") == "a%%AAAa%");
1014 	assert (MaybeEscapePattern("a%%aaA%a") == "a%%AAA%a");
1015 	assert (MaybeEscapePattern("a%%aaA%%") == "a%%AAA%%");
1016 	assert (MaybeEscapePattern("a%%aa%aa") == "a%%AA%AA");
1017 	assert (MaybeEscapePattern("a%%aa%aA") == "a%%AA%AA");
1018 	assert (MaybeEscapePattern("a%%aa%a%") == "a%%AA%a%");
1019 	assert (MaybeEscapePattern("a%%aa%Aa") == "a%%AA%AA");
1020 	assert (MaybeEscapePattern("a%%aa%A%") == "a%%AA%A%");
1021 	assert (MaybeEscapePattern("a%%aa%%a") == "a%%AA%%a");
1022 	assert (MaybeEscapePattern("a%%aa%%A") == "a%%AA%%A");
1023 	assert (MaybeEscapePattern("a%%aa%%%") == "a%%AA%%%");
1024 	assert (MaybeEscapePattern("a%%aAaaa") == "a%%AAaaa");
1025 	assert (MaybeEscapePattern("a%%aAaa%") == "a%%AAaa%");
1026 	assert (MaybeEscapePattern("a%%aAa%a") == "a%%AAa%a");
1027 	assert (MaybeEscapePattern("a%%aAa%%") == "a%%AAa%%");
1028 	assert (MaybeEscapePattern("a%%aA%aa") == "a%%AA%AA");
1029 	assert (MaybeEscapePattern("a%%aA%a%") == "a%%AA%a%");
1030 	assert (MaybeEscapePattern("a%%aA%%a") == "a%%AA%%a");
1031 	assert (MaybeEscapePattern("a%%aA%%%") == "a%%AA%%%");
1032 	assert (MaybeEscapePattern("a%%a%aaa") == "a%%a%AAa");
1033 	assert (MaybeEscapePattern("a%%a%aaA") == "a%%a%AAA");
1034 	assert (MaybeEscapePattern("a%%a%aa%") == "a%%a%AA%");
1035 	assert (MaybeEscapePattern("a%%a%aAa") == "a%%a%AAa");
1036 	assert (MaybeEscapePattern("a%%a%aA%") == "a%%a%AA%");
1037 	assert (MaybeEscapePattern("a%%a%a%a") == "a%%a%a%a");
1038 	assert (MaybeEscapePattern("a%%a%a%A") == "a%%a%a%A");
1039 	assert (MaybeEscapePattern("a%%a%a%%") == "a%%a%a%%");
1040 	assert (MaybeEscapePattern("a%%a%Aaa") == "a%%a%AAa");
1041 	assert (MaybeEscapePattern("a%%a%Aa%") == "a%%a%AA%");
1042 	assert (MaybeEscapePattern("a%%a%A%a") == "a%%a%A%a");
1043 	assert (MaybeEscapePattern("a%%a%A%%") == "a%%a%A%%");
1044 	assert (MaybeEscapePattern("a%%a%%aa") == "a%%a%%AA");
1045 	assert (MaybeEscapePattern("a%%a%%aA") == "a%%a%%AA");
1046 	assert (MaybeEscapePattern("a%%a%%a%") == "a%%a%%a%");
1047 	assert (MaybeEscapePattern("a%%a%%Aa") == "a%%a%%AA");
1048 	assert (MaybeEscapePattern("a%%a%%A%") == "a%%a%%A%");
1049 	assert (MaybeEscapePattern("a%%a%%%a") == "a%%a%%%a");
1050 	assert (MaybeEscapePattern("a%%a%%%A") == "a%%a%%%A");
1051 	assert (MaybeEscapePattern("a%%a%%%%") == "a%%a%%%%");
1052 	assert (MaybeEscapePattern("a%%Aaaaa") == "a%%AAaaa");
1053 	assert (MaybeEscapePattern("a%%Aaaa%") == "a%%AAaa%");
1054 	assert (MaybeEscapePattern("a%%Aaa%a") == "a%%AAa%a");
1055 	assert (MaybeEscapePattern("a%%Aaa%%") == "a%%AAa%%");
1056 	assert (MaybeEscapePattern("a%%Aa%aa") == "a%%AA%AA");
1057 	assert (MaybeEscapePattern("a%%Aa%a%") == "a%%AA%a%");
1058 	assert (MaybeEscapePattern("a%%Aa%%a") == "a%%AA%%a");
1059 	assert (MaybeEscapePattern("a%%Aa%%%") == "a%%AA%%%");
1060 	assert (MaybeEscapePattern("a%%A%aaa") == "a%%A%AAa");
1061 	assert (MaybeEscapePattern("a%%A%aa%") == "a%%A%AA%");
1062 	assert (MaybeEscapePattern("a%%A%a%a") == "a%%A%a%a");
1063 	assert (MaybeEscapePattern("a%%A%a%%") == "a%%A%a%%");
1064 	assert (MaybeEscapePattern("a%%A%%aa") == "a%%A%%AA");
1065 	assert (MaybeEscapePattern("a%%A%%a%") == "a%%A%%a%");
1066 	assert (MaybeEscapePattern("a%%A%%%a") == "a%%A%%%a");
1067 	assert (MaybeEscapePattern("a%%A%%%%") == "a%%A%%%%");
1068 	assert (MaybeEscapePattern("a%%%aaaa") == "a%%%AAaa");
1069 	assert (MaybeEscapePattern("a%%%aaaA") == "a%%%AAaA");
1070 	assert (MaybeEscapePattern("a%%%aaa%") == "a%%%AAa%");
1071 	assert (MaybeEscapePattern("a%%%aaAa") == "a%%%AAAa");
1072 	assert (MaybeEscapePattern("a%%%aaA%") == "a%%%AAA%");
1073 	assert (MaybeEscapePattern("a%%%aa%a") == "a%%%AA%a");
1074 	assert (MaybeEscapePattern("a%%%aa%A") == "a%%%AA%A");
1075 	assert (MaybeEscapePattern("a%%%aa%%") == "a%%%AA%%");
1076 	assert (MaybeEscapePattern("a%%%aAaa") == "a%%%AAaa");
1077 	assert (MaybeEscapePattern("a%%%aAa%") == "a%%%AAa%");
1078 	assert (MaybeEscapePattern("a%%%aA%a") == "a%%%AA%a");
1079 	assert (MaybeEscapePattern("a%%%aA%%") == "a%%%AA%%");
1080 	assert (MaybeEscapePattern("a%%%a%aa") == "a%%%a%AA");
1081 	assert (MaybeEscapePattern("a%%%a%aA") == "a%%%a%AA");
1082 	assert (MaybeEscapePattern("a%%%a%a%") == "a%%%a%a%");
1083 	assert (MaybeEscapePattern("a%%%a%Aa") == "a%%%a%AA");
1084 	assert (MaybeEscapePattern("a%%%a%A%") == "a%%%a%A%");
1085 	assert (MaybeEscapePattern("a%%%a%%a") == "a%%%a%%a");
1086 	assert (MaybeEscapePattern("a%%%a%%A") == "a%%%a%%A");
1087 	assert (MaybeEscapePattern("a%%%a%%%") == "a%%%a%%%");
1088 	assert (MaybeEscapePattern("a%%%Aaaa") == "a%%%AAaa");
1089 	assert (MaybeEscapePattern("a%%%Aaa%") == "a%%%AAa%");
1090 	assert (MaybeEscapePattern("a%%%Aa%a") == "a%%%AA%a");
1091 	assert (MaybeEscapePattern("a%%%Aa%%") == "a%%%AA%%");
1092 	assert (MaybeEscapePattern("a%%%A%aa") == "a%%%A%AA");
1093 	assert (MaybeEscapePattern("a%%%A%a%") == "a%%%A%a%");
1094 	assert (MaybeEscapePattern("a%%%A%%a") == "a%%%A%%a");
1095 	assert (MaybeEscapePattern("a%%%A%%%") == "a%%%A%%%");
1096 	assert (MaybeEscapePattern("a%%%%aaa") == "a%%%%AAa");
1097 	assert (MaybeEscapePattern("a%%%%aaA") == "a%%%%AAA");
1098 	assert (MaybeEscapePattern("a%%%%aa%") == "a%%%%AA%");
1099 	assert (MaybeEscapePattern("a%%%%aAa") == "a%%%%AAa");
1100 	assert (MaybeEscapePattern("a%%%%aA%") == "a%%%%AA%");
1101 	assert (MaybeEscapePattern("a%%%%a%a") == "a%%%%a%a");
1102 	assert (MaybeEscapePattern("a%%%%a%A") == "a%%%%a%A");
1103 	assert (MaybeEscapePattern("a%%%%a%%") == "a%%%%a%%");
1104 	assert (MaybeEscapePattern("a%%%%Aaa") == "a%%%%AAa");
1105 	assert (MaybeEscapePattern("a%%%%Aa%") == "a%%%%AA%");
1106 	assert (MaybeEscapePattern("a%%%%A%a") == "a%%%%A%a");
1107 	assert (MaybeEscapePattern("a%%%%A%%") == "a%%%%A%%");
1108 	assert (MaybeEscapePattern("a%%%%%aa") == "a%%%%%AA");
1109 	assert (MaybeEscapePattern("a%%%%%aA") == "a%%%%%AA");
1110 	assert (MaybeEscapePattern("a%%%%%a%") == "a%%%%%a%");
1111 	assert (MaybeEscapePattern("a%%%%%Aa") == "a%%%%%AA");
1112 	assert (MaybeEscapePattern("a%%%%%A%") == "a%%%%%A%");
1113 	assert (MaybeEscapePattern("a%%%%%%a") == "a%%%%%%a");
1114 	assert (MaybeEscapePattern("a%%%%%%A") == "a%%%%%%A");
1115 	assert (MaybeEscapePattern("a%%%%%%%") == "a%%%%%%%");
1116 	assert (MaybeEscapePattern("Aaaaaaaa") == "Aaaaaaaa");
1117 	assert (MaybeEscapePattern("Aaaaaaa%") == "Aaaaaaa%");
1118 	assert (MaybeEscapePattern("Aaaaaa%a") == "Aaaaaa%a");
1119 	assert (MaybeEscapePattern("Aaaaaa%%") == "Aaaaaa%%");
1120 	assert (MaybeEscapePattern("Aaaaa%aa") == "Aaaaa%AA");
1121 	assert (MaybeEscapePattern("Aaaaa%a%") == "Aaaaa%a%");
1122 	assert (MaybeEscapePattern("Aaaaa%%a") == "Aaaaa%%a");
1123 	assert (MaybeEscapePattern("Aaaaa%%%") == "Aaaaa%%%");
1124 	assert (MaybeEscapePattern("Aaaa%aaa") == "Aaaa%AAa");
1125 	assert (MaybeEscapePattern("Aaaa%aa%") == "Aaaa%AA%");
1126 	assert (MaybeEscapePattern("Aaaa%a%a") == "Aaaa%a%a");
1127 	assert (MaybeEscapePattern("Aaaa%a%%") == "Aaaa%a%%");
1128 	assert (MaybeEscapePattern("Aaaa%%aa") == "Aaaa%%AA");
1129 	assert (MaybeEscapePattern("Aaaa%%a%") == "Aaaa%%a%");
1130 	assert (MaybeEscapePattern("Aaaa%%%a") == "Aaaa%%%a");
1131 	assert (MaybeEscapePattern("Aaaa%%%%") == "Aaaa%%%%");
1132 	assert (MaybeEscapePattern("Aaa%aaaa") == "Aaa%AAaa");
1133 	assert (MaybeEscapePattern("Aaa%aaa%") == "Aaa%AAa%");
1134 	assert (MaybeEscapePattern("Aaa%aa%a") == "Aaa%AA%a");
1135 	assert (MaybeEscapePattern("Aaa%aa%%") == "Aaa%AA%%");
1136 	assert (MaybeEscapePattern("Aaa%a%aa") == "Aaa%a%AA");
1137 	assert (MaybeEscapePattern("Aaa%a%a%") == "Aaa%a%a%");
1138 	assert (MaybeEscapePattern("Aaa%a%%a") == "Aaa%a%%a");
1139 	assert (MaybeEscapePattern("Aaa%a%%%") == "Aaa%a%%%");
1140 	assert (MaybeEscapePattern("Aaa%%aaa") == "Aaa%%AAa");
1141 	assert (MaybeEscapePattern("Aaa%%aa%") == "Aaa%%AA%");
1142 	assert (MaybeEscapePattern("Aaa%%a%a") == "Aaa%%a%a");
1143 	assert (MaybeEscapePattern("Aaa%%a%%") == "Aaa%%a%%");
1144 	assert (MaybeEscapePattern("Aaa%%%aa") == "Aaa%%%AA");
1145 	assert (MaybeEscapePattern("Aaa%%%a%") == "Aaa%%%a%");
1146 	assert (MaybeEscapePattern("Aaa%%%%a") == "Aaa%%%%a");
1147 	assert (MaybeEscapePattern("Aaa%%%%%") == "Aaa%%%%%");
1148 	assert (MaybeEscapePattern("Aa%aaaaa") == "Aa%AAaaa");
1149 	assert (MaybeEscapePattern("Aa%aaaa%") == "Aa%AAaa%");
1150 	assert (MaybeEscapePattern("Aa%aaa%a") == "Aa%AAa%a");
1151 	assert (MaybeEscapePattern("Aa%aaa%%") == "Aa%AAa%%");
1152 	assert (MaybeEscapePattern("Aa%aa%aa") == "Aa%AA%AA");
1153 	assert (MaybeEscapePattern("Aa%aa%a%") == "Aa%AA%a%");
1154 	assert (MaybeEscapePattern("Aa%aa%%a") == "Aa%AA%%a");
1155 	assert (MaybeEscapePattern("Aa%aa%%%") == "Aa%AA%%%");
1156 	assert (MaybeEscapePattern("Aa%a%aaa") == "Aa%a%AAa");
1157 	assert (MaybeEscapePattern("Aa%a%aa%") == "Aa%a%AA%");
1158 	assert (MaybeEscapePattern("Aa%a%a%a") == "Aa%a%a%a");
1159 	assert (MaybeEscapePattern("Aa%a%a%%") == "Aa%a%a%%");
1160 	assert (MaybeEscapePattern("Aa%a%%aa") == "Aa%a%%AA");
1161 	assert (MaybeEscapePattern("Aa%a%%a%") == "Aa%a%%a%");
1162 	assert (MaybeEscapePattern("Aa%a%%%a") == "Aa%a%%%a");
1163 	assert (MaybeEscapePattern("Aa%a%%%%") == "Aa%a%%%%");
1164 	assert (MaybeEscapePattern("Aa%%aaaa") == "Aa%%AAaa");
1165 	assert (MaybeEscapePattern("Aa%%aaa%") == "Aa%%AAa%");
1166 	assert (MaybeEscapePattern("Aa%%aa%a") == "Aa%%AA%a");
1167 	assert (MaybeEscapePattern("Aa%%aa%%") == "Aa%%AA%%");
1168 	assert (MaybeEscapePattern("Aa%%a%aa") == "Aa%%a%AA");
1169 	assert (MaybeEscapePattern("Aa%%a%a%") == "Aa%%a%a%");
1170 	assert (MaybeEscapePattern("Aa%%a%%a") == "Aa%%a%%a");
1171 	assert (MaybeEscapePattern("Aa%%a%%%") == "Aa%%a%%%");
1172 	assert (MaybeEscapePattern("Aa%%%aaa") == "Aa%%%AAa");
1173 	assert (MaybeEscapePattern("Aa%%%aa%") == "Aa%%%AA%");
1174 	assert (MaybeEscapePattern("Aa%%%a%a") == "Aa%%%a%a");
1175 	assert (MaybeEscapePattern("Aa%%%a%%") == "Aa%%%a%%");
1176 	assert (MaybeEscapePattern("Aa%%%%aa") == "Aa%%%%AA");
1177 	assert (MaybeEscapePattern("Aa%%%%a%") == "Aa%%%%a%");
1178 	assert (MaybeEscapePattern("Aa%%%%%a") == "Aa%%%%%a");
1179 	assert (MaybeEscapePattern("Aa%%%%%%") == "Aa%%%%%%");
1180 	assert (MaybeEscapePattern("A%aaaaaa") == "A%AAaaaa");
1181 	assert (MaybeEscapePattern("A%aaaaa%") == "A%AAaaa%");
1182 	assert (MaybeEscapePattern("A%aaaa%a") == "A%AAaa%a");
1183 	assert (MaybeEscapePattern("A%aaaa%%") == "A%AAaa%%");
1184 	assert (MaybeEscapePattern("A%aaa%aa") == "A%AAa%AA");
1185 	assert (MaybeEscapePattern("A%aaa%a%") == "A%AAa%a%");
1186 	assert (MaybeEscapePattern("A%aaa%%a") == "A%AAa%%a");
1187 	assert (MaybeEscapePattern("A%aaa%%%") == "A%AAa%%%");
1188 	assert (MaybeEscapePattern("A%aa%aaa") == "A%AA%AAa");
1189 	assert (MaybeEscapePattern("A%aa%aa%") == "A%AA%AA%");
1190 	assert (MaybeEscapePattern("A%aa%a%a") == "A%AA%a%a");
1191 	assert (MaybeEscapePattern("A%aa%a%%") == "A%AA%a%%");
1192 	assert (MaybeEscapePattern("A%aa%%aa") == "A%AA%%AA");
1193 	assert (MaybeEscapePattern("A%aa%%a%") == "A%AA%%a%");
1194 	assert (MaybeEscapePattern("A%aa%%%a") == "A%AA%%%a");
1195 	assert (MaybeEscapePattern("A%aa%%%%") == "A%AA%%%%");
1196 	assert (MaybeEscapePattern("A%a%aaaa") == "A%a%AAaa");
1197 	assert (MaybeEscapePattern("A%a%aaa%") == "A%a%AAa%");
1198 	assert (MaybeEscapePattern("A%a%aa%a") == "A%a%AA%a");
1199 	assert (MaybeEscapePattern("A%a%aa%%") == "A%a%AA%%");
1200 	assert (MaybeEscapePattern("A%a%a%aa") == "A%a%a%AA");
1201 	assert (MaybeEscapePattern("A%a%a%a%") == "A%a%a%a%");
1202 	assert (MaybeEscapePattern("A%a%a%%a") == "A%a%a%%a");
1203 	assert (MaybeEscapePattern("A%a%a%%%") == "A%a%a%%%");
1204 	assert (MaybeEscapePattern("A%a%%aaa") == "A%a%%AAa");
1205 	assert (MaybeEscapePattern("A%a%%aa%") == "A%a%%AA%");
1206 	assert (MaybeEscapePattern("A%a%%a%a") == "A%a%%a%a");
1207 	assert (MaybeEscapePattern("A%a%%a%%") == "A%a%%a%%");
1208 	assert (MaybeEscapePattern("A%a%%%aa") == "A%a%%%AA");
1209 	assert (MaybeEscapePattern("A%a%%%a%") == "A%a%%%a%");
1210 	assert (MaybeEscapePattern("A%a%%%%a") == "A%a%%%%a");
1211 	assert (MaybeEscapePattern("A%a%%%%%") == "A%a%%%%%");
1212 	assert (MaybeEscapePattern("A%%aaaaa") == "A%%AAaaa");
1213 	assert (MaybeEscapePattern("A%%aaaa%") == "A%%AAaa%");
1214 	assert (MaybeEscapePattern("A%%aaa%a") == "A%%AAa%a");
1215 	assert (MaybeEscapePattern("A%%aaa%%") == "A%%AAa%%");
1216 	assert (MaybeEscapePattern("A%%aa%aa") == "A%%AA%AA");
1217 	assert (MaybeEscapePattern("A%%aa%a%") == "A%%AA%a%");
1218 	assert (MaybeEscapePattern("A%%aa%%a") == "A%%AA%%a");
1219 	assert (MaybeEscapePattern("A%%aa%%%") == "A%%AA%%%");
1220 	assert (MaybeEscapePattern("A%%a%aaa") == "A%%a%AAa");
1221 	assert (MaybeEscapePattern("A%%a%aa%") == "A%%a%AA%");
1222 	assert (MaybeEscapePattern("A%%a%a%a") == "A%%a%a%a");
1223 	assert (MaybeEscapePattern("A%%a%a%%") == "A%%a%a%%");
1224 	assert (MaybeEscapePattern("A%%a%%aa") == "A%%a%%AA");
1225 	assert (MaybeEscapePattern("A%%a%%a%") == "A%%a%%a%");
1226 	assert (MaybeEscapePattern("A%%a%%%a") == "A%%a%%%a");
1227 	assert (MaybeEscapePattern("A%%a%%%%") == "A%%a%%%%");
1228 	assert (MaybeEscapePattern("A%%%aaaa") == "A%%%AAaa");
1229 	assert (MaybeEscapePattern("A%%%aaa%") == "A%%%AAa%");
1230 	assert (MaybeEscapePattern("A%%%aa%a") == "A%%%AA%a");
1231 	assert (MaybeEscapePattern("A%%%aa%%") == "A%%%AA%%");
1232 	assert (MaybeEscapePattern("A%%%a%aa") == "A%%%a%AA");
1233 	assert (MaybeEscapePattern("A%%%a%a%") == "A%%%a%a%");
1234 	assert (MaybeEscapePattern("A%%%a%%a") == "A%%%a%%a");
1235 	assert (MaybeEscapePattern("A%%%a%%%") == "A%%%a%%%");
1236 	assert (MaybeEscapePattern("A%%%%aaa") == "A%%%%AAa");
1237 	assert (MaybeEscapePattern("A%%%%aa%") == "A%%%%AA%");
1238 	assert (MaybeEscapePattern("A%%%%a%a") == "A%%%%a%a");
1239 	assert (MaybeEscapePattern("A%%%%a%%") == "A%%%%a%%");
1240 	assert (MaybeEscapePattern("A%%%%%aa") == "A%%%%%AA");
1241 	assert (MaybeEscapePattern("A%%%%%a%") == "A%%%%%a%");
1242 	assert (MaybeEscapePattern("A%%%%%%a") == "A%%%%%%a");
1243 	assert (MaybeEscapePattern("A%%%%%%%") == "A%%%%%%%");
1244 	assert (MaybeEscapePattern("%aaaaaaa") == "%AAaaaaa");
1245 	assert (MaybeEscapePattern("%aaaaaaA") == "%AAaaaaA");
1246 	assert (MaybeEscapePattern("%aaaaaa%") == "%AAaaaa%");
1247 	assert (MaybeEscapePattern("%aaaaaAa") == "%AAaaaAa");
1248 	assert (MaybeEscapePattern("%aaaaaA%") == "%AAaaaA%");
1249 	assert (MaybeEscapePattern("%aaaaa%a") == "%AAaaa%a");
1250 	assert (MaybeEscapePattern("%aaaaa%A") == "%AAaaa%A");
1251 	assert (MaybeEscapePattern("%aaaaa%%") == "%AAaaa%%");
1252 	assert (MaybeEscapePattern("%aaaaAaa") == "%AAaaAaa");
1253 	assert (MaybeEscapePattern("%aaaaAa%") == "%AAaaAa%");
1254 	assert (MaybeEscapePattern("%aaaaA%a") == "%AAaaA%a");
1255 	assert (MaybeEscapePattern("%aaaaA%%") == "%AAaaA%%");
1256 	assert (MaybeEscapePattern("%aaaa%aa") == "%AAaa%AA");
1257 	assert (MaybeEscapePattern("%aaaa%aA") == "%AAaa%AA");
1258 	assert (MaybeEscapePattern("%aaaa%a%") == "%AAaa%a%");
1259 	assert (MaybeEscapePattern("%aaaa%Aa") == "%AAaa%AA");
1260 	assert (MaybeEscapePattern("%aaaa%A%") == "%AAaa%A%");
1261 	assert (MaybeEscapePattern("%aaaa%%a") == "%AAaa%%a");
1262 	assert (MaybeEscapePattern("%aaaa%%A") == "%AAaa%%A");
1263 	assert (MaybeEscapePattern("%aaaa%%%") == "%AAaa%%%");
1264 	assert (MaybeEscapePattern("%aaaAaaa") == "%AAaAaaa");
1265 	assert (MaybeEscapePattern("%aaaAaa%") == "%AAaAaa%");
1266 	assert (MaybeEscapePattern("%aaaAa%a") == "%AAaAa%a");
1267 	assert (MaybeEscapePattern("%aaaAa%%") == "%AAaAa%%");
1268 	assert (MaybeEscapePattern("%aaaA%aa") == "%AAaA%AA");
1269 	assert (MaybeEscapePattern("%aaaA%a%") == "%AAaA%a%");
1270 	assert (MaybeEscapePattern("%aaaA%%a") == "%AAaA%%a");
1271 	assert (MaybeEscapePattern("%aaaA%%%") == "%AAaA%%%");
1272 	assert (MaybeEscapePattern("%aaa%aaa") == "%AAa%AAa");
1273 	assert (MaybeEscapePattern("%aaa%aaA") == "%AAa%AAA");
1274 	assert (MaybeEscapePattern("%aaa%aa%") == "%AAa%AA%");
1275 	assert (MaybeEscapePattern("%aaa%aAa") == "%AAa%AAa");
1276 	assert (MaybeEscapePattern("%aaa%aA%") == "%AAa%AA%");
1277 	assert (MaybeEscapePattern("%aaa%a%a") == "%AAa%a%a");
1278 	assert (MaybeEscapePattern("%aaa%a%A") == "%AAa%a%A");
1279 	assert (MaybeEscapePattern("%aaa%a%%") == "%AAa%a%%");
1280 	assert (MaybeEscapePattern("%aaa%Aaa") == "%AAa%AAa");
1281 	assert (MaybeEscapePattern("%aaa%Aa%") == "%AAa%AA%");
1282 	assert (MaybeEscapePattern("%aaa%A%a") == "%AAa%A%a");
1283 	assert (MaybeEscapePattern("%aaa%A%%") == "%AAa%A%%");
1284 	assert (MaybeEscapePattern("%aaa%%aa") == "%AAa%%AA");
1285 	assert (MaybeEscapePattern("%aaa%%aA") == "%AAa%%AA");
1286 	assert (MaybeEscapePattern("%aaa%%a%") == "%AAa%%a%");
1287 	assert (MaybeEscapePattern("%aaa%%Aa") == "%AAa%%AA");
1288 	assert (MaybeEscapePattern("%aaa%%A%") == "%AAa%%A%");
1289 	assert (MaybeEscapePattern("%aaa%%%a") == "%AAa%%%a");
1290 	assert (MaybeEscapePattern("%aaa%%%A") == "%AAa%%%A");
1291 	assert (MaybeEscapePattern("%aaa%%%%") == "%AAa%%%%");
1292 	assert (MaybeEscapePattern("%aaAaaaa") == "%AAAaaaa");
1293 	assert (MaybeEscapePattern("%aaAaaa%") == "%AAAaaa%");
1294 	assert (MaybeEscapePattern("%aaAaa%a") == "%AAAaa%a");
1295 	assert (MaybeEscapePattern("%aaAaa%%") == "%AAAaa%%");
1296 	assert (MaybeEscapePattern("%aaAa%aa") == "%AAAa%AA");
1297 	assert (MaybeEscapePattern("%aaAa%a%") == "%AAAa%a%");
1298 	assert (MaybeEscapePattern("%aaAa%%a") == "%AAAa%%a");
1299 	assert (MaybeEscapePattern("%aaAa%%%") == "%AAAa%%%");
1300 	assert (MaybeEscapePattern("%aaA%aaa") == "%AAA%AAa");
1301 	assert (MaybeEscapePattern("%aaA%aa%") == "%AAA%AA%");
1302 	assert (MaybeEscapePattern("%aaA%a%a") == "%AAA%a%a");
1303 	assert (MaybeEscapePattern("%aaA%a%%") == "%AAA%a%%");
1304 	assert (MaybeEscapePattern("%aaA%%aa") == "%AAA%%AA");
1305 	assert (MaybeEscapePattern("%aaA%%a%") == "%AAA%%a%");
1306 	assert (MaybeEscapePattern("%aaA%%%a") == "%AAA%%%a");
1307 	assert (MaybeEscapePattern("%aaA%%%%") == "%AAA%%%%");
1308 	assert (MaybeEscapePattern("%aa%aaaa") == "%AA%AAaa");
1309 	assert (MaybeEscapePattern("%aa%aaaA") == "%AA%AAaA");
1310 	assert (MaybeEscapePattern("%aa%aaa%") == "%AA%AAa%");
1311 	assert (MaybeEscapePattern("%aa%aaAa") == "%AA%AAAa");
1312 	assert (MaybeEscapePattern("%aa%aaA%") == "%AA%AAA%");
1313 	assert (MaybeEscapePattern("%aa%aa%a") == "%AA%AA%a");
1314 	assert (MaybeEscapePattern("%aa%aa%A") == "%AA%AA%A");
1315 	assert (MaybeEscapePattern("%aa%aa%%") == "%AA%AA%%");
1316 	assert (MaybeEscapePattern("%aa%aAaa") == "%AA%AAaa");
1317 	assert (MaybeEscapePattern("%aa%aAa%") == "%AA%AAa%");
1318 	assert (MaybeEscapePattern("%aa%aA%a") == "%AA%AA%a");
1319 	assert (MaybeEscapePattern("%aa%aA%%") == "%AA%AA%%");
1320 	assert (MaybeEscapePattern("%aa%a%aa") == "%AA%a%AA");
1321 	assert (MaybeEscapePattern("%aa%a%aA") == "%AA%a%AA");
1322 	assert (MaybeEscapePattern("%aa%a%a%") == "%AA%a%a%");
1323 	assert (MaybeEscapePattern("%aa%a%Aa") == "%AA%a%AA");
1324 	assert (MaybeEscapePattern("%aa%a%A%") == "%AA%a%A%");
1325 	assert (MaybeEscapePattern("%aa%a%%a") == "%AA%a%%a");
1326 	assert (MaybeEscapePattern("%aa%a%%A") == "%AA%a%%A");
1327 	assert (MaybeEscapePattern("%aa%a%%%") == "%AA%a%%%");
1328 	assert (MaybeEscapePattern("%aa%Aaaa") == "%AA%AAaa");
1329 	assert (MaybeEscapePattern("%aa%Aaa%") == "%AA%AAa%");
1330 	assert (MaybeEscapePattern("%aa%Aa%a") == "%AA%AA%a");
1331 	assert (MaybeEscapePattern("%aa%Aa%%") == "%AA%AA%%");
1332 	assert (MaybeEscapePattern("%aa%A%aa") == "%AA%A%AA");
1333 	assert (MaybeEscapePattern("%aa%A%a%") == "%AA%A%a%");
1334 	assert (MaybeEscapePattern("%aa%A%%a") == "%AA%A%%a");
1335 	assert (MaybeEscapePattern("%aa%A%%%") == "%AA%A%%%");
1336 	assert (MaybeEscapePattern("%aa%%aaa") == "%AA%%AAa");
1337 	assert (MaybeEscapePattern("%aa%%aaA") == "%AA%%AAA");
1338 	assert (MaybeEscapePattern("%aa%%aa%") == "%AA%%AA%");
1339 	assert (MaybeEscapePattern("%aa%%aAa") == "%AA%%AAa");
1340 	assert (MaybeEscapePattern("%aa%%aA%") == "%AA%%AA%");
1341 	assert (MaybeEscapePattern("%aa%%a%a") == "%AA%%a%a");
1342 	assert (MaybeEscapePattern("%aa%%a%A") == "%AA%%a%A");
1343 	assert (MaybeEscapePattern("%aa%%a%%") == "%AA%%a%%");
1344 	assert (MaybeEscapePattern("%aa%%Aaa") == "%AA%%AAa");
1345 	assert (MaybeEscapePattern("%aa%%Aa%") == "%AA%%AA%");
1346 	assert (MaybeEscapePattern("%aa%%A%a") == "%AA%%A%a");
1347 	assert (MaybeEscapePattern("%aa%%A%%") == "%AA%%A%%");
1348 	assert (MaybeEscapePattern("%aa%%%aa") == "%AA%%%AA");
1349 	assert (MaybeEscapePattern("%aa%%%aA") == "%AA%%%AA");
1350 	assert (MaybeEscapePattern("%aa%%%a%") == "%AA%%%a%");
1351 	assert (MaybeEscapePattern("%aa%%%Aa") == "%AA%%%AA");
1352 	assert (MaybeEscapePattern("%aa%%%A%") == "%AA%%%A%");
1353 	assert (MaybeEscapePattern("%aa%%%%a") == "%AA%%%%a");
1354 	assert (MaybeEscapePattern("%aa%%%%A") == "%AA%%%%A");
1355 	assert (MaybeEscapePattern("%aa%%%%%") == "%AA%%%%%");
1356 	assert (MaybeEscapePattern("%aAaaaaa") == "%AAaaaaa");
1357 	assert (MaybeEscapePattern("%aAaaaa%") == "%AAaaaa%");
1358 	assert (MaybeEscapePattern("%aAaaa%a") == "%AAaaa%a");
1359 	assert (MaybeEscapePattern("%aAaaa%%") == "%AAaaa%%");
1360 	assert (MaybeEscapePattern("%aAaa%aa") == "%AAaa%AA");
1361 	assert (MaybeEscapePattern("%aAaa%a%") == "%AAaa%a%");
1362 	assert (MaybeEscapePattern("%aAaa%%a") == "%AAaa%%a");
1363 	assert (MaybeEscapePattern("%aAaa%%%") == "%AAaa%%%");
1364 	assert (MaybeEscapePattern("%aAa%aaa") == "%AAa%AAa");
1365 	assert (MaybeEscapePattern("%aAa%aa%") == "%AAa%AA%");
1366 	assert (MaybeEscapePattern("%aAa%a%a") == "%AAa%a%a");
1367 	assert (MaybeEscapePattern("%aAa%a%%") == "%AAa%a%%");
1368 	assert (MaybeEscapePattern("%aAa%%aa") == "%AAa%%AA");
1369 	assert (MaybeEscapePattern("%aAa%%a%") == "%AAa%%a%");
1370 	assert (MaybeEscapePattern("%aAa%%%a") == "%AAa%%%a");
1371 	assert (MaybeEscapePattern("%aAa%%%%") == "%AAa%%%%");
1372 	assert (MaybeEscapePattern("%aA%aaaa") == "%AA%AAaa");
1373 	assert (MaybeEscapePattern("%aA%aaa%") == "%AA%AAa%");
1374 	assert (MaybeEscapePattern("%aA%aa%a") == "%AA%AA%a");
1375 	assert (MaybeEscapePattern("%aA%aa%%") == "%AA%AA%%");
1376 	assert (MaybeEscapePattern("%aA%a%aa") == "%AA%a%AA");
1377 	assert (MaybeEscapePattern("%aA%a%a%") == "%AA%a%a%");
1378 	assert (MaybeEscapePattern("%aA%a%%a") == "%AA%a%%a");
1379 	assert (MaybeEscapePattern("%aA%a%%%") == "%AA%a%%%");
1380 	assert (MaybeEscapePattern("%aA%%aaa") == "%AA%%AAa");
1381 	assert (MaybeEscapePattern("%aA%%aa%") == "%AA%%AA%");
1382 	assert (MaybeEscapePattern("%aA%%a%a") == "%AA%%a%a");
1383 	assert (MaybeEscapePattern("%aA%%a%%") == "%AA%%a%%");
1384 	assert (MaybeEscapePattern("%aA%%%aa") == "%AA%%%AA");
1385 	assert (MaybeEscapePattern("%aA%%%a%") == "%AA%%%a%");
1386 	assert (MaybeEscapePattern("%aA%%%%a") == "%AA%%%%a");
1387 	assert (MaybeEscapePattern("%aA%%%%%") == "%AA%%%%%");
1388 	assert (MaybeEscapePattern("%a%aaaaa") == "%a%AAaaa");
1389 	assert (MaybeEscapePattern("%a%aaaaA") == "%a%AAaaA");
1390 	assert (MaybeEscapePattern("%a%aaaa%") == "%a%AAaa%");
1391 	assert (MaybeEscapePattern("%a%aaaAa") == "%a%AAaAa");
1392 	assert (MaybeEscapePattern("%a%aaaA%") == "%a%AAaA%");
1393 	assert (MaybeEscapePattern("%a%aaa%a") == "%a%AAa%a");
1394 	assert (MaybeEscapePattern("%a%aaa%A") == "%a%AAa%A");
1395 	assert (MaybeEscapePattern("%a%aaa%%") == "%a%AAa%%");
1396 	assert (MaybeEscapePattern("%a%aaAaa") == "%a%AAAaa");
1397 	assert (MaybeEscapePattern("%a%aaAa%") == "%a%AAAa%");
1398 	assert (MaybeEscapePattern("%a%aaA%a") == "%a%AAA%a");
1399 	assert (MaybeEscapePattern("%a%aaA%%") == "%a%AAA%%");
1400 	assert (MaybeEscapePattern("%a%aa%aa") == "%a%AA%AA");
1401 	assert (MaybeEscapePattern("%a%aa%aA") == "%a%AA%AA");
1402 	assert (MaybeEscapePattern("%a%aa%a%") == "%a%AA%a%");
1403 	assert (MaybeEscapePattern("%a%aa%Aa") == "%a%AA%AA");
1404 	assert (MaybeEscapePattern("%a%aa%A%") == "%a%AA%A%");
1405 	assert (MaybeEscapePattern("%a%aa%%a") == "%a%AA%%a");
1406 	assert (MaybeEscapePattern("%a%aa%%A") == "%a%AA%%A");
1407 	assert (MaybeEscapePattern("%a%aa%%%") == "%a%AA%%%");
1408 	assert (MaybeEscapePattern("%a%aAaaa") == "%a%AAaaa");
1409 	assert (MaybeEscapePattern("%a%aAaa%") == "%a%AAaa%");
1410 	assert (MaybeEscapePattern("%a%aAa%a") == "%a%AAa%a");
1411 	assert (MaybeEscapePattern("%a%aAa%%") == "%a%AAa%%");
1412 	assert (MaybeEscapePattern("%a%aA%aa") == "%a%AA%AA");
1413 	assert (MaybeEscapePattern("%a%aA%a%") == "%a%AA%a%");
1414 	assert (MaybeEscapePattern("%a%aA%%a") == "%a%AA%%a");
1415 	assert (MaybeEscapePattern("%a%aA%%%") == "%a%AA%%%");
1416 	assert (MaybeEscapePattern("%a%a%aaa") == "%a%a%AAa");
1417 	assert (MaybeEscapePattern("%a%a%aaA") == "%a%a%AAA");
1418 	assert (MaybeEscapePattern("%a%a%aa%") == "%a%a%AA%");
1419 	assert (MaybeEscapePattern("%a%a%aAa") == "%a%a%AAa");
1420 	assert (MaybeEscapePattern("%a%a%aA%") == "%a%a%AA%");
1421 	assert (MaybeEscapePattern("%a%a%a%a") == "%a%a%a%a");
1422 	assert (MaybeEscapePattern("%a%a%a%A") == "%a%a%a%A");
1423 	assert (MaybeEscapePattern("%a%a%a%%") == "%a%a%a%%");
1424 	assert (MaybeEscapePattern("%a%a%Aaa") == "%a%a%AAa");
1425 	assert (MaybeEscapePattern("%a%a%Aa%") == "%a%a%AA%");
1426 	assert (MaybeEscapePattern("%a%a%A%a") == "%a%a%A%a");
1427 	assert (MaybeEscapePattern("%a%a%A%%") == "%a%a%A%%");
1428 	assert (MaybeEscapePattern("%a%a%%aa") == "%a%a%%AA");
1429 	assert (MaybeEscapePattern("%a%a%%aA") == "%a%a%%AA");
1430 	assert (MaybeEscapePattern("%a%a%%a%") == "%a%a%%a%");
1431 	assert (MaybeEscapePattern("%a%a%%Aa") == "%a%a%%AA");
1432 	assert (MaybeEscapePattern("%a%a%%A%") == "%a%a%%A%");
1433 	assert (MaybeEscapePattern("%a%a%%%a") == "%a%a%%%a");
1434 	assert (MaybeEscapePattern("%a%a%%%A") == "%a%a%%%A");
1435 	assert (MaybeEscapePattern("%a%a%%%%") == "%a%a%%%%");
1436 	assert (MaybeEscapePattern("%a%Aaaaa") == "%a%AAaaa");
1437 	assert (MaybeEscapePattern("%a%Aaaa%") == "%a%AAaa%");
1438 	assert (MaybeEscapePattern("%a%Aaa%a") == "%a%AAa%a");
1439 	assert (MaybeEscapePattern("%a%Aaa%%") == "%a%AAa%%");
1440 	assert (MaybeEscapePattern("%a%Aa%aa") == "%a%AA%AA");
1441 	assert (MaybeEscapePattern("%a%Aa%a%") == "%a%AA%a%");
1442 	assert (MaybeEscapePattern("%a%Aa%%a") == "%a%AA%%a");
1443 	assert (MaybeEscapePattern("%a%Aa%%%") == "%a%AA%%%");
1444 	assert (MaybeEscapePattern("%a%A%aaa") == "%a%A%AAa");
1445 	assert (MaybeEscapePattern("%a%A%aa%") == "%a%A%AA%");
1446 	assert (MaybeEscapePattern("%a%A%a%a") == "%a%A%a%a");
1447 	assert (MaybeEscapePattern("%a%A%a%%") == "%a%A%a%%");
1448 	assert (MaybeEscapePattern("%a%A%%aa") == "%a%A%%AA");
1449 	assert (MaybeEscapePattern("%a%A%%a%") == "%a%A%%a%");
1450 	assert (MaybeEscapePattern("%a%A%%%a") == "%a%A%%%a");
1451 	assert (MaybeEscapePattern("%a%A%%%%") == "%a%A%%%%");
1452 	assert (MaybeEscapePattern("%a%%aaaa") == "%a%%AAaa");
1453 	assert (MaybeEscapePattern("%a%%aaaA") == "%a%%AAaA");
1454 	assert (MaybeEscapePattern("%a%%aaa%") == "%a%%AAa%");
1455 	assert (MaybeEscapePattern("%a%%aaAa") == "%a%%AAAa");
1456 	assert (MaybeEscapePattern("%a%%aaA%") == "%a%%AAA%");
1457 	assert (MaybeEscapePattern("%a%%aa%a") == "%a%%AA%a");
1458 	assert (MaybeEscapePattern("%a%%aa%A") == "%a%%AA%A");
1459 	assert (MaybeEscapePattern("%a%%aa%%") == "%a%%AA%%");
1460 	assert (MaybeEscapePattern("%a%%aAaa") == "%a%%AAaa");
1461 	assert (MaybeEscapePattern("%a%%aAa%") == "%a%%AAa%");
1462 	assert (MaybeEscapePattern("%a%%aA%a") == "%a%%AA%a");
1463 	assert (MaybeEscapePattern("%a%%aA%%") == "%a%%AA%%");
1464 	assert (MaybeEscapePattern("%a%%a%aa") == "%a%%a%AA");
1465 	assert (MaybeEscapePattern("%a%%a%aA") == "%a%%a%AA");
1466 	assert (MaybeEscapePattern("%a%%a%a%") == "%a%%a%a%");
1467 	assert (MaybeEscapePattern("%a%%a%Aa") == "%a%%a%AA");
1468 	assert (MaybeEscapePattern("%a%%a%A%") == "%a%%a%A%");
1469 	assert (MaybeEscapePattern("%a%%a%%a") == "%a%%a%%a");
1470 	assert (MaybeEscapePattern("%a%%a%%A") == "%a%%a%%A");
1471 	assert (MaybeEscapePattern("%a%%a%%%") == "%a%%a%%%");
1472 	assert (MaybeEscapePattern("%a%%Aaaa") == "%a%%AAaa");
1473 	assert (MaybeEscapePattern("%a%%Aaa%") == "%a%%AAa%");
1474 	assert (MaybeEscapePattern("%a%%Aa%a") == "%a%%AA%a");
1475 	assert (MaybeEscapePattern("%a%%Aa%%") == "%a%%AA%%");
1476 	assert (MaybeEscapePattern("%a%%A%aa") == "%a%%A%AA");
1477 	assert (MaybeEscapePattern("%a%%A%a%") == "%a%%A%a%");
1478 	assert (MaybeEscapePattern("%a%%A%%a") == "%a%%A%%a");
1479 	assert (MaybeEscapePattern("%a%%A%%%") == "%a%%A%%%");
1480 	assert (MaybeEscapePattern("%a%%%aaa") == "%a%%%AAa");
1481 	assert (MaybeEscapePattern("%a%%%aaA") == "%a%%%AAA");
1482 	assert (MaybeEscapePattern("%a%%%aa%") == "%a%%%AA%");
1483 	assert (MaybeEscapePattern("%a%%%aAa") == "%a%%%AAa");
1484 	assert (MaybeEscapePattern("%a%%%aA%") == "%a%%%AA%");
1485 	assert (MaybeEscapePattern("%a%%%a%a") == "%a%%%a%a");
1486 	assert (MaybeEscapePattern("%a%%%a%A") == "%a%%%a%A");
1487 	assert (MaybeEscapePattern("%a%%%a%%") == "%a%%%a%%");
1488 	assert (MaybeEscapePattern("%a%%%Aaa") == "%a%%%AAa");
1489 	assert (MaybeEscapePattern("%a%%%Aa%") == "%a%%%AA%");
1490 	assert (MaybeEscapePattern("%a%%%A%a") == "%a%%%A%a");
1491 	assert (MaybeEscapePattern("%a%%%A%%") == "%a%%%A%%");
1492 	assert (MaybeEscapePattern("%a%%%%aa") == "%a%%%%AA");
1493 	assert (MaybeEscapePattern("%a%%%%aA") == "%a%%%%AA");
1494 	assert (MaybeEscapePattern("%a%%%%a%") == "%a%%%%a%");
1495 	assert (MaybeEscapePattern("%a%%%%Aa") == "%a%%%%AA");
1496 	assert (MaybeEscapePattern("%a%%%%A%") == "%a%%%%A%");
1497 	assert (MaybeEscapePattern("%a%%%%%a") == "%a%%%%%a");
1498 	assert (MaybeEscapePattern("%a%%%%%A") == "%a%%%%%A");
1499 	assert (MaybeEscapePattern("%a%%%%%%") == "%a%%%%%%");
1500 	assert (MaybeEscapePattern("%Aaaaaaa") == "%AAaaaaa");
1501 	assert (MaybeEscapePattern("%Aaaaaa%") == "%AAaaaa%");
1502 	assert (MaybeEscapePattern("%Aaaaa%a") == "%AAaaa%a");
1503 	assert (MaybeEscapePattern("%Aaaaa%%") == "%AAaaa%%");
1504 	assert (MaybeEscapePattern("%Aaaa%aa") == "%AAaa%AA");
1505 	assert (MaybeEscapePattern("%Aaaa%a%") == "%AAaa%a%");
1506 	assert (MaybeEscapePattern("%Aaaa%%a") == "%AAaa%%a");
1507 	assert (MaybeEscapePattern("%Aaaa%%%") == "%AAaa%%%");
1508 	assert (MaybeEscapePattern("%Aaa%aaa") == "%AAa%AAa");
1509 	assert (MaybeEscapePattern("%Aaa%aa%") == "%AAa%AA%");
1510 	assert (MaybeEscapePattern("%Aaa%a%a") == "%AAa%a%a");
1511 	assert (MaybeEscapePattern("%Aaa%a%%") == "%AAa%a%%");
1512 	assert (MaybeEscapePattern("%Aaa%%aa") == "%AAa%%AA");
1513 	assert (MaybeEscapePattern("%Aaa%%a%") == "%AAa%%a%");
1514 	assert (MaybeEscapePattern("%Aaa%%%a") == "%AAa%%%a");
1515 	assert (MaybeEscapePattern("%Aaa%%%%") == "%AAa%%%%");
1516 	assert (MaybeEscapePattern("%Aa%aaaa") == "%AA%AAaa");
1517 	assert (MaybeEscapePattern("%Aa%aaa%") == "%AA%AAa%");
1518 	assert (MaybeEscapePattern("%Aa%aa%a") == "%AA%AA%a");
1519 	assert (MaybeEscapePattern("%Aa%aa%%") == "%AA%AA%%");
1520 	assert (MaybeEscapePattern("%Aa%a%aa") == "%AA%a%AA");
1521 	assert (MaybeEscapePattern("%Aa%a%a%") == "%AA%a%a%");
1522 	assert (MaybeEscapePattern("%Aa%a%%a") == "%AA%a%%a");
1523 	assert (MaybeEscapePattern("%Aa%a%%%") == "%AA%a%%%");
1524 	assert (MaybeEscapePattern("%Aa%%aaa") == "%AA%%AAa");
1525 	assert (MaybeEscapePattern("%Aa%%aa%") == "%AA%%AA%");
1526 	assert (MaybeEscapePattern("%Aa%%a%a") == "%AA%%a%a");
1527 	assert (MaybeEscapePattern("%Aa%%a%%") == "%AA%%a%%");
1528 	assert (MaybeEscapePattern("%Aa%%%aa") == "%AA%%%AA");
1529 	assert (MaybeEscapePattern("%Aa%%%a%") == "%AA%%%a%");
1530 	assert (MaybeEscapePattern("%Aa%%%%a") == "%AA%%%%a");
1531 	assert (MaybeEscapePattern("%Aa%%%%%") == "%AA%%%%%");
1532 	assert (MaybeEscapePattern("%A%aaaaa") == "%A%AAaaa");
1533 	assert (MaybeEscapePattern("%A%aaaa%") == "%A%AAaa%");
1534 	assert (MaybeEscapePattern("%A%aaa%a") == "%A%AAa%a");
1535 	assert (MaybeEscapePattern("%A%aaa%%") == "%A%AAa%%");
1536 	assert (MaybeEscapePattern("%A%aa%aa") == "%A%AA%AA");
1537 	assert (MaybeEscapePattern("%A%aa%a%") == "%A%AA%a%");
1538 	assert (MaybeEscapePattern("%A%aa%%a") == "%A%AA%%a");
1539 	assert (MaybeEscapePattern("%A%aa%%%") == "%A%AA%%%");
1540 	assert (MaybeEscapePattern("%A%a%aaa") == "%A%a%AAa");
1541 	assert (MaybeEscapePattern("%A%a%aa%") == "%A%a%AA%");
1542 	assert (MaybeEscapePattern("%A%a%a%a") == "%A%a%a%a");
1543 	assert (MaybeEscapePattern("%A%a%a%%") == "%A%a%a%%");
1544 	assert (MaybeEscapePattern("%A%a%%aa") == "%A%a%%AA");
1545 	assert (MaybeEscapePattern("%A%a%%a%") == "%A%a%%a%");
1546 	assert (MaybeEscapePattern("%A%a%%%a") == "%A%a%%%a");
1547 	assert (MaybeEscapePattern("%A%a%%%%") == "%A%a%%%%");
1548 	assert (MaybeEscapePattern("%A%%aaaa") == "%A%%AAaa");
1549 	assert (MaybeEscapePattern("%A%%aaa%") == "%A%%AAa%");
1550 	assert (MaybeEscapePattern("%A%%aa%a") == "%A%%AA%a");
1551 	assert (MaybeEscapePattern("%A%%aa%%") == "%A%%AA%%");
1552 	assert (MaybeEscapePattern("%A%%a%aa") == "%A%%a%AA");
1553 	assert (MaybeEscapePattern("%A%%a%a%") == "%A%%a%a%");
1554 	assert (MaybeEscapePattern("%A%%a%%a") == "%A%%a%%a");
1555 	assert (MaybeEscapePattern("%A%%a%%%") == "%A%%a%%%");
1556 	assert (MaybeEscapePattern("%A%%%aaa") == "%A%%%AAa");
1557 	assert (MaybeEscapePattern("%A%%%aa%") == "%A%%%AA%");
1558 	assert (MaybeEscapePattern("%A%%%a%a") == "%A%%%a%a");
1559 	assert (MaybeEscapePattern("%A%%%a%%") == "%A%%%a%%");
1560 	assert (MaybeEscapePattern("%A%%%%aa") == "%A%%%%AA");
1561 	assert (MaybeEscapePattern("%A%%%%a%") == "%A%%%%a%");
1562 	assert (MaybeEscapePattern("%A%%%%%a") == "%A%%%%%a");
1563 	assert (MaybeEscapePattern("%A%%%%%%") == "%A%%%%%%");
1564 	assert (MaybeEscapePattern("%%aaaaaa") == "%%AAaaaa");
1565 	assert (MaybeEscapePattern("%%aaaaaA") == "%%AAaaaA");
1566 	assert (MaybeEscapePattern("%%aaaaa%") == "%%AAaaa%");
1567 	assert (MaybeEscapePattern("%%aaaaAa") == "%%AAaaAa");
1568 	assert (MaybeEscapePattern("%%aaaaA%") == "%%AAaaA%");
1569 	assert (MaybeEscapePattern("%%aaaa%a") == "%%AAaa%a");
1570 	assert (MaybeEscapePattern("%%aaaa%A") == "%%AAaa%A");
1571 	assert (MaybeEscapePattern("%%aaaa%%") == "%%AAaa%%");
1572 	assert (MaybeEscapePattern("%%aaaAaa") == "%%AAaAaa");
1573 	assert (MaybeEscapePattern("%%aaaAa%") == "%%AAaAa%");
1574 	assert (MaybeEscapePattern("%%aaaA%a") == "%%AAaA%a");
1575 	assert (MaybeEscapePattern("%%aaaA%%") == "%%AAaA%%");
1576 	assert (MaybeEscapePattern("%%aaa%aa") == "%%AAa%AA");
1577 	assert (MaybeEscapePattern("%%aaa%aA") == "%%AAa%AA");
1578 	assert (MaybeEscapePattern("%%aaa%a%") == "%%AAa%a%");
1579 	assert (MaybeEscapePattern("%%aaa%Aa") == "%%AAa%AA");
1580 	assert (MaybeEscapePattern("%%aaa%A%") == "%%AAa%A%");
1581 	assert (MaybeEscapePattern("%%aaa%%a") == "%%AAa%%a");
1582 	assert (MaybeEscapePattern("%%aaa%%A") == "%%AAa%%A");
1583 	assert (MaybeEscapePattern("%%aaa%%%") == "%%AAa%%%");
1584 	assert (MaybeEscapePattern("%%aaAaaa") == "%%AAAaaa");
1585 	assert (MaybeEscapePattern("%%aaAaa%") == "%%AAAaa%");
1586 	assert (MaybeEscapePattern("%%aaAa%a") == "%%AAAa%a");
1587 	assert (MaybeEscapePattern("%%aaAa%%") == "%%AAAa%%");
1588 	assert (MaybeEscapePattern("%%aaA%aa") == "%%AAA%AA");
1589 	assert (MaybeEscapePattern("%%aaA%a%") == "%%AAA%a%");
1590 	assert (MaybeEscapePattern("%%aaA%%a") == "%%AAA%%a");
1591 	assert (MaybeEscapePattern("%%aaA%%%") == "%%AAA%%%");
1592 	assert (MaybeEscapePattern("%%aa%aaa") == "%%AA%AAa");
1593 	assert (MaybeEscapePattern("%%aa%aaA") == "%%AA%AAA");
1594 	assert (MaybeEscapePattern("%%aa%aa%") == "%%AA%AA%");
1595 	assert (MaybeEscapePattern("%%aa%aAa") == "%%AA%AAa");
1596 	assert (MaybeEscapePattern("%%aa%aA%") == "%%AA%AA%");
1597 	assert (MaybeEscapePattern("%%aa%a%a") == "%%AA%a%a");
1598 	assert (MaybeEscapePattern("%%aa%a%A") == "%%AA%a%A");
1599 	assert (MaybeEscapePattern("%%aa%a%%") == "%%AA%a%%");
1600 	assert (MaybeEscapePattern("%%aa%Aaa") == "%%AA%AAa");
1601 	assert (MaybeEscapePattern("%%aa%Aa%") == "%%AA%AA%");
1602 	assert (MaybeEscapePattern("%%aa%A%a") == "%%AA%A%a");
1603 	assert (MaybeEscapePattern("%%aa%A%%") == "%%AA%A%%");
1604 	assert (MaybeEscapePattern("%%aa%%aa") == "%%AA%%AA");
1605 	assert (MaybeEscapePattern("%%aa%%aA") == "%%AA%%AA");
1606 	assert (MaybeEscapePattern("%%aa%%a%") == "%%AA%%a%");
1607 	assert (MaybeEscapePattern("%%aa%%Aa") == "%%AA%%AA");
1608 	assert (MaybeEscapePattern("%%aa%%A%") == "%%AA%%A%");
1609 	assert (MaybeEscapePattern("%%aa%%%a") == "%%AA%%%a");
1610 	assert (MaybeEscapePattern("%%aa%%%A") == "%%AA%%%A");
1611 	assert (MaybeEscapePattern("%%aa%%%%") == "%%AA%%%%");
1612 	assert (MaybeEscapePattern("%%aAaaaa") == "%%AAaaaa");
1613 	assert (MaybeEscapePattern("%%aAaaa%") == "%%AAaaa%");
1614 	assert (MaybeEscapePattern("%%aAaa%a") == "%%AAaa%a");
1615 	assert (MaybeEscapePattern("%%aAaa%%") == "%%AAaa%%");
1616 	assert (MaybeEscapePattern("%%aAa%aa") == "%%AAa%AA");
1617 	assert (MaybeEscapePattern("%%aAa%a%") == "%%AAa%a%");
1618 	assert (MaybeEscapePattern("%%aAa%%a") == "%%AAa%%a");
1619 	assert (MaybeEscapePattern("%%aAa%%%") == "%%AAa%%%");
1620 	assert (MaybeEscapePattern("%%aA%aaa") == "%%AA%AAa");
1621 	assert (MaybeEscapePattern("%%aA%aa%") == "%%AA%AA%");
1622 	assert (MaybeEscapePattern("%%aA%a%a") == "%%AA%a%a");
1623 	assert (MaybeEscapePattern("%%aA%a%%") == "%%AA%a%%");
1624 	assert (MaybeEscapePattern("%%aA%%aa") == "%%AA%%AA");
1625 	assert (MaybeEscapePattern("%%aA%%a%") == "%%AA%%a%");
1626 	assert (MaybeEscapePattern("%%aA%%%a") == "%%AA%%%a");
1627 	assert (MaybeEscapePattern("%%aA%%%%") == "%%AA%%%%");
1628 	assert (MaybeEscapePattern("%%a%aaaa") == "%%a%AAaa");
1629 	assert (MaybeEscapePattern("%%a%aaaA") == "%%a%AAaA");
1630 	assert (MaybeEscapePattern("%%a%aaa%") == "%%a%AAa%");
1631 	assert (MaybeEscapePattern("%%a%aaAa") == "%%a%AAAa");
1632 	assert (MaybeEscapePattern("%%a%aaA%") == "%%a%AAA%");
1633 	assert (MaybeEscapePattern("%%a%aa%a") == "%%a%AA%a");
1634 	assert (MaybeEscapePattern("%%a%aa%A") == "%%a%AA%A");
1635 	assert (MaybeEscapePattern("%%a%aa%%") == "%%a%AA%%");
1636 	assert (MaybeEscapePattern("%%a%aAaa") == "%%a%AAaa");
1637 	assert (MaybeEscapePattern("%%a%aAa%") == "%%a%AAa%");
1638 	assert (MaybeEscapePattern("%%a%aA%a") == "%%a%AA%a");
1639 	assert (MaybeEscapePattern("%%a%aA%%") == "%%a%AA%%");
1640 	assert (MaybeEscapePattern("%%a%a%aa") == "%%a%a%AA");
1641 	assert (MaybeEscapePattern("%%a%a%aA") == "%%a%a%AA");
1642 	assert (MaybeEscapePattern("%%a%a%a%") == "%%a%a%a%");
1643 	assert (MaybeEscapePattern("%%a%a%Aa") == "%%a%a%AA");
1644 	assert (MaybeEscapePattern("%%a%a%A%") == "%%a%a%A%");
1645 	assert (MaybeEscapePattern("%%a%a%%a") == "%%a%a%%a");
1646 	assert (MaybeEscapePattern("%%a%a%%A") == "%%a%a%%A");
1647 	assert (MaybeEscapePattern("%%a%a%%%") == "%%a%a%%%");
1648 	assert (MaybeEscapePattern("%%a%Aaaa") == "%%a%AAaa");
1649 	assert (MaybeEscapePattern("%%a%Aaa%") == "%%a%AAa%");
1650 	assert (MaybeEscapePattern("%%a%Aa%a") == "%%a%AA%a");
1651 	assert (MaybeEscapePattern("%%a%Aa%%") == "%%a%AA%%");
1652 	assert (MaybeEscapePattern("%%a%A%aa") == "%%a%A%AA");
1653 	assert (MaybeEscapePattern("%%a%A%a%") == "%%a%A%a%");
1654 	assert (MaybeEscapePattern("%%a%A%%a") == "%%a%A%%a");
1655 	assert (MaybeEscapePattern("%%a%A%%%") == "%%a%A%%%");
1656 	assert (MaybeEscapePattern("%%a%%aaa") == "%%a%%AAa");
1657 	assert (MaybeEscapePattern("%%a%%aaA") == "%%a%%AAA");
1658 	assert (MaybeEscapePattern("%%a%%aa%") == "%%a%%AA%");
1659 	assert (MaybeEscapePattern("%%a%%aAa") == "%%a%%AAa");
1660 	assert (MaybeEscapePattern("%%a%%aA%") == "%%a%%AA%");
1661 	assert (MaybeEscapePattern("%%a%%a%a") == "%%a%%a%a");
1662 	assert (MaybeEscapePattern("%%a%%a%A") == "%%a%%a%A");
1663 	assert (MaybeEscapePattern("%%a%%a%%") == "%%a%%a%%");
1664 	assert (MaybeEscapePattern("%%a%%Aaa") == "%%a%%AAa");
1665 	assert (MaybeEscapePattern("%%a%%Aa%") == "%%a%%AA%");
1666 	assert (MaybeEscapePattern("%%a%%A%a") == "%%a%%A%a");
1667 	assert (MaybeEscapePattern("%%a%%A%%") == "%%a%%A%%");
1668 	assert (MaybeEscapePattern("%%a%%%aa") == "%%a%%%AA");
1669 	assert (MaybeEscapePattern("%%a%%%aA") == "%%a%%%AA");
1670 	assert (MaybeEscapePattern("%%a%%%a%") == "%%a%%%a%");
1671 	assert (MaybeEscapePattern("%%a%%%Aa") == "%%a%%%AA");
1672 	assert (MaybeEscapePattern("%%a%%%A%") == "%%a%%%A%");
1673 	assert (MaybeEscapePattern("%%a%%%%a") == "%%a%%%%a");
1674 	assert (MaybeEscapePattern("%%a%%%%A") == "%%a%%%%A");
1675 	assert (MaybeEscapePattern("%%a%%%%%") == "%%a%%%%%");
1676 	assert (MaybeEscapePattern("%%Aaaaaa") == "%%AAaaaa");
1677 	assert (MaybeEscapePattern("%%Aaaaa%") == "%%AAaaa%");
1678 	assert (MaybeEscapePattern("%%Aaaa%a") == "%%AAaa%a");
1679 	assert (MaybeEscapePattern("%%Aaaa%%") == "%%AAaa%%");
1680 	assert (MaybeEscapePattern("%%Aaa%aa") == "%%AAa%AA");
1681 	assert (MaybeEscapePattern("%%Aaa%a%") == "%%AAa%a%");
1682 	assert (MaybeEscapePattern("%%Aaa%%a") == "%%AAa%%a");
1683 	assert (MaybeEscapePattern("%%Aaa%%%") == "%%AAa%%%");
1684 	assert (MaybeEscapePattern("%%Aa%aaa") == "%%AA%AAa");
1685 	assert (MaybeEscapePattern("%%Aa%aa%") == "%%AA%AA%");
1686 	assert (MaybeEscapePattern("%%Aa%a%a") == "%%AA%a%a");
1687 	assert (MaybeEscapePattern("%%Aa%a%%") == "%%AA%a%%");
1688 	assert (MaybeEscapePattern("%%Aa%%aa") == "%%AA%%AA");
1689 	assert (MaybeEscapePattern("%%Aa%%a%") == "%%AA%%a%");
1690 	assert (MaybeEscapePattern("%%Aa%%%a") == "%%AA%%%a");
1691 	assert (MaybeEscapePattern("%%Aa%%%%") == "%%AA%%%%");
1692 	assert (MaybeEscapePattern("%%A%aaaa") == "%%A%AAaa");
1693 	assert (MaybeEscapePattern("%%A%aaa%") == "%%A%AAa%");
1694 	assert (MaybeEscapePattern("%%A%aa%a") == "%%A%AA%a");
1695 	assert (MaybeEscapePattern("%%A%aa%%") == "%%A%AA%%");
1696 	assert (MaybeEscapePattern("%%A%a%aa") == "%%A%a%AA");
1697 	assert (MaybeEscapePattern("%%A%a%a%") == "%%A%a%a%");
1698 	assert (MaybeEscapePattern("%%A%a%%a") == "%%A%a%%a");
1699 	assert (MaybeEscapePattern("%%A%a%%%") == "%%A%a%%%");
1700 	assert (MaybeEscapePattern("%%A%%aaa") == "%%A%%AAa");
1701 	assert (MaybeEscapePattern("%%A%%aa%") == "%%A%%AA%");
1702 	assert (MaybeEscapePattern("%%A%%a%a") == "%%A%%a%a");
1703 	assert (MaybeEscapePattern("%%A%%a%%") == "%%A%%a%%");
1704 	assert (MaybeEscapePattern("%%A%%%aa") == "%%A%%%AA");
1705 	assert (MaybeEscapePattern("%%A%%%a%") == "%%A%%%a%");
1706 	assert (MaybeEscapePattern("%%A%%%%a") == "%%A%%%%a");
1707 	assert (MaybeEscapePattern("%%A%%%%%") == "%%A%%%%%");
1708 	assert (MaybeEscapePattern("%%%aaaaa") == "%%%AAaaa");
1709 	assert (MaybeEscapePattern("%%%aaaaA") == "%%%AAaaA");
1710 	assert (MaybeEscapePattern("%%%aaaa%") == "%%%AAaa%");
1711 	assert (MaybeEscapePattern("%%%aaaAa") == "%%%AAaAa");
1712 	assert (MaybeEscapePattern("%%%aaaA%") == "%%%AAaA%");
1713 	assert (MaybeEscapePattern("%%%aaa%a") == "%%%AAa%a");
1714 	assert (MaybeEscapePattern("%%%aaa%A") == "%%%AAa%A");
1715 	assert (MaybeEscapePattern("%%%aaa%%") == "%%%AAa%%");
1716 	assert (MaybeEscapePattern("%%%aaAaa") == "%%%AAAaa");
1717 	assert (MaybeEscapePattern("%%%aaAa%") == "%%%AAAa%");
1718 	assert (MaybeEscapePattern("%%%aaA%a") == "%%%AAA%a");
1719 	assert (MaybeEscapePattern("%%%aaA%%") == "%%%AAA%%");
1720 	assert (MaybeEscapePattern("%%%aa%aa") == "%%%AA%AA");
1721 	assert (MaybeEscapePattern("%%%aa%aA") == "%%%AA%AA");
1722 	assert (MaybeEscapePattern("%%%aa%a%") == "%%%AA%a%");
1723 	assert (MaybeEscapePattern("%%%aa%Aa") == "%%%AA%AA");
1724 	assert (MaybeEscapePattern("%%%aa%A%") == "%%%AA%A%");
1725 	assert (MaybeEscapePattern("%%%aa%%a") == "%%%AA%%a");
1726 	assert (MaybeEscapePattern("%%%aa%%A") == "%%%AA%%A");
1727 	assert (MaybeEscapePattern("%%%aa%%%") == "%%%AA%%%");
1728 	assert (MaybeEscapePattern("%%%aAaaa") == "%%%AAaaa");
1729 	assert (MaybeEscapePattern("%%%aAaa%") == "%%%AAaa%");
1730 	assert (MaybeEscapePattern("%%%aAa%a") == "%%%AAa%a");
1731 	assert (MaybeEscapePattern("%%%aAa%%") == "%%%AAa%%");
1732 	assert (MaybeEscapePattern("%%%aA%aa") == "%%%AA%AA");
1733 	assert (MaybeEscapePattern("%%%aA%a%") == "%%%AA%a%");
1734 	assert (MaybeEscapePattern("%%%aA%%a") == "%%%AA%%a");
1735 	assert (MaybeEscapePattern("%%%aA%%%") == "%%%AA%%%");
1736 	assert (MaybeEscapePattern("%%%a%aaa") == "%%%a%AAa");
1737 	assert (MaybeEscapePattern("%%%a%aaA") == "%%%a%AAA");
1738 	assert (MaybeEscapePattern("%%%a%aa%") == "%%%a%AA%");
1739 	assert (MaybeEscapePattern("%%%a%aAa") == "%%%a%AAa");
1740 	assert (MaybeEscapePattern("%%%a%aA%") == "%%%a%AA%");
1741 	assert (MaybeEscapePattern("%%%a%a%a") == "%%%a%a%a");
1742 	assert (MaybeEscapePattern("%%%a%a%A") == "%%%a%a%A");
1743 	assert (MaybeEscapePattern("%%%a%a%%") == "%%%a%a%%");
1744 	assert (MaybeEscapePattern("%%%a%Aaa") == "%%%a%AAa");
1745 	assert (MaybeEscapePattern("%%%a%Aa%") == "%%%a%AA%");
1746 	assert (MaybeEscapePattern("%%%a%A%a") == "%%%a%A%a");
1747 	assert (MaybeEscapePattern("%%%a%A%%") == "%%%a%A%%");
1748 	assert (MaybeEscapePattern("%%%a%%aa") == "%%%a%%AA");
1749 	assert (MaybeEscapePattern("%%%a%%aA") == "%%%a%%AA");
1750 	assert (MaybeEscapePattern("%%%a%%a%") == "%%%a%%a%");
1751 	assert (MaybeEscapePattern("%%%a%%Aa") == "%%%a%%AA");
1752 	assert (MaybeEscapePattern("%%%a%%A%") == "%%%a%%A%");
1753 	assert (MaybeEscapePattern("%%%a%%%a") == "%%%a%%%a");
1754 	assert (MaybeEscapePattern("%%%a%%%A") == "%%%a%%%A");
1755 	assert (MaybeEscapePattern("%%%a%%%%") == "%%%a%%%%");
1756 	assert (MaybeEscapePattern("%%%Aaaaa") == "%%%AAaaa");
1757 	assert (MaybeEscapePattern("%%%Aaaa%") == "%%%AAaa%");
1758 	assert (MaybeEscapePattern("%%%Aaa%a") == "%%%AAa%a");
1759 	assert (MaybeEscapePattern("%%%Aaa%%") == "%%%AAa%%");
1760 	assert (MaybeEscapePattern("%%%Aa%aa") == "%%%AA%AA");
1761 	assert (MaybeEscapePattern("%%%Aa%a%") == "%%%AA%a%");
1762 	assert (MaybeEscapePattern("%%%Aa%%a") == "%%%AA%%a");
1763 	assert (MaybeEscapePattern("%%%Aa%%%") == "%%%AA%%%");
1764 	assert (MaybeEscapePattern("%%%A%aaa") == "%%%A%AAa");
1765 	assert (MaybeEscapePattern("%%%A%aa%") == "%%%A%AA%");
1766 	assert (MaybeEscapePattern("%%%A%a%a") == "%%%A%a%a");
1767 	assert (MaybeEscapePattern("%%%A%a%%") == "%%%A%a%%");
1768 	assert (MaybeEscapePattern("%%%A%%aa") == "%%%A%%AA");
1769 	assert (MaybeEscapePattern("%%%A%%a%") == "%%%A%%a%");
1770 	assert (MaybeEscapePattern("%%%A%%%a") == "%%%A%%%a");
1771 	assert (MaybeEscapePattern("%%%A%%%%") == "%%%A%%%%");
1772 	assert (MaybeEscapePattern("%%%%aaaa") == "%%%%AAaa");
1773 	assert (MaybeEscapePattern("%%%%aaaA") == "%%%%AAaA");
1774 	assert (MaybeEscapePattern("%%%%aaa%") == "%%%%AAa%");
1775 	assert (MaybeEscapePattern("%%%%aaAa") == "%%%%AAAa");
1776 	assert (MaybeEscapePattern("%%%%aaA%") == "%%%%AAA%");
1777 	assert (MaybeEscapePattern("%%%%aa%a") == "%%%%AA%a");
1778 	assert (MaybeEscapePattern("%%%%aa%A") == "%%%%AA%A");
1779 	assert (MaybeEscapePattern("%%%%aa%%") == "%%%%AA%%");
1780 	assert (MaybeEscapePattern("%%%%aAaa") == "%%%%AAaa");
1781 	assert (MaybeEscapePattern("%%%%aAa%") == "%%%%AAa%");
1782 	assert (MaybeEscapePattern("%%%%aA%a") == "%%%%AA%a");
1783 	assert (MaybeEscapePattern("%%%%aA%%") == "%%%%AA%%");
1784 	assert (MaybeEscapePattern("%%%%a%aa") == "%%%%a%AA");
1785 	assert (MaybeEscapePattern("%%%%a%aA") == "%%%%a%AA");
1786 	assert (MaybeEscapePattern("%%%%a%a%") == "%%%%a%a%");
1787 	assert (MaybeEscapePattern("%%%%a%Aa") == "%%%%a%AA");
1788 	assert (MaybeEscapePattern("%%%%a%A%") == "%%%%a%A%");
1789 	assert (MaybeEscapePattern("%%%%a%%a") == "%%%%a%%a");
1790 	assert (MaybeEscapePattern("%%%%a%%A") == "%%%%a%%A");
1791 	assert (MaybeEscapePattern("%%%%a%%%") == "%%%%a%%%");
1792 	assert (MaybeEscapePattern("%%%%Aaaa") == "%%%%AAaa");
1793 	assert (MaybeEscapePattern("%%%%Aaa%") == "%%%%AAa%");
1794 	assert (MaybeEscapePattern("%%%%Aa%a") == "%%%%AA%a");
1795 	assert (MaybeEscapePattern("%%%%Aa%%") == "%%%%AA%%");
1796 	assert (MaybeEscapePattern("%%%%A%aa") == "%%%%A%AA");
1797 	assert (MaybeEscapePattern("%%%%A%a%") == "%%%%A%a%");
1798 	assert (MaybeEscapePattern("%%%%A%%a") == "%%%%A%%a");
1799 	assert (MaybeEscapePattern("%%%%A%%%") == "%%%%A%%%");
1800 	assert (MaybeEscapePattern("%%%%%aaa") == "%%%%%AAa");
1801 	assert (MaybeEscapePattern("%%%%%aaA") == "%%%%%AAA");
1802 	assert (MaybeEscapePattern("%%%%%aa%") == "%%%%%AA%");
1803 	assert (MaybeEscapePattern("%%%%%aAa") == "%%%%%AAa");
1804 	assert (MaybeEscapePattern("%%%%%aA%") == "%%%%%AA%");
1805 	assert (MaybeEscapePattern("%%%%%a%a") == "%%%%%a%a");
1806 	assert (MaybeEscapePattern("%%%%%a%A") == "%%%%%a%A");
1807 	assert (MaybeEscapePattern("%%%%%a%%") == "%%%%%a%%");
1808 	assert (MaybeEscapePattern("%%%%%Aaa") == "%%%%%AAa");
1809 	assert (MaybeEscapePattern("%%%%%Aa%") == "%%%%%AA%");
1810 	assert (MaybeEscapePattern("%%%%%A%a") == "%%%%%A%a");
1811 	assert (MaybeEscapePattern("%%%%%A%%") == "%%%%%A%%");
1812 	assert (MaybeEscapePattern("%%%%%%aa") == "%%%%%%AA");
1813 	assert (MaybeEscapePattern("%%%%%%aA") == "%%%%%%AA");
1814 	assert (MaybeEscapePattern("%%%%%%a%") == "%%%%%%a%");
1815 	assert (MaybeEscapePattern("%%%%%%Aa") == "%%%%%%AA");
1816 	assert (MaybeEscapePattern("%%%%%%A%") == "%%%%%%A%");
1817 	assert (MaybeEscapePattern("%%%%%%%a") == "%%%%%%%a");
1818 	assert (MaybeEscapePattern("%%%%%%%A") == "%%%%%%%A");
1819 	assert (MaybeEscapePattern("%%%%%%%%") == "%%%%%%%%");
1820 }
1821 
1822 unittest
1823 {
1824 	assert (Matches("", ""));
1825 	assert (!Matches(",", "~"));
1826 	assert (!Matches(",", "$"));
1827 	assert (!Matches("~", "$"));
1828 	assert (!Matches("|", "d"));
1829 	assert (Matches("a", "a"));
1830 	assert (Matches(",", "*"));
1831 	assert (!Matches("~", "Z"));
1832 	assert (Matches("~", "*"));
1833 	assert (!Matches("@", " "));
1834 	assert (Matches(" ", " "));
1835 	assert (!Matches(",/", "~~"));
1836 	assert (!Matches(",i", "~~"));
1837 	assert (!Matches(",i", "~+"));
1838 	assert (!Matches(",/", "~+"));
1839 	assert (!Matches("|i", "d~"));
1840 	assert (!Matches("|/", "d~"));
1841 	assert (!Matches("|i", "d+"));
1842 	assert (!Matches("~/", "$+"));
1843 	assert (!Matches("|/", "d+"));
1844 	assert (!Matches("a/", "a~"));
1845 	assert (!Matches("~/", "$~"));
1846 	assert (!Matches("~i", "$+"));
1847 	assert (!Matches("~i", "$~"));
1848 	assert (!Matches("ai", "a$"));
1849 	assert (!Matches("a/", "a$"));
1850 	assert (!Matches("~i", "Z~"));
1851 	assert (!Matches(",id", "~+."));
1852 	assert (!Matches(",/d", "~+|"));
1853 	assert (!Matches("a|", "ad"));
1854 	assert (!Matches("~/", "Z~"));
1855 	assert (!Matches(",/d", "~~."));
1856 	assert (!Matches("~/", "Z+"));
1857 	assert (!Matches(",/,", "~~."));
1858 	assert (!Matches(",i,", "~+."));
1859 	assert (!Matches(",i,", "~~."));
1860 	assert (!Matches(",id", "~+|"));
1861 	assert (!Matches(",/,", "~+|"));
1862 	assert (!Matches(",/", "$+"));
1863 	assert (!Matches("~i", "Z+"));
1864 	assert (!Matches(",i,", "~+|"));
1865 	assert (!Matches(",id", "~~|"));
1866 	assert (Matches("aa", "aa"));
1867 	assert (!Matches(",/d", "~+."));
1868 	assert (!Matches(",/d", "~~|"));
1869 	assert (!Matches(",/,", "~+."));
1870 	assert (!Matches(",i,", "~~|"));
1871 	assert (!Matches(",/,", "~~|"));
1872 	assert (!Matches(",i", "$+"));
1873 	assert (!Matches(",id", "~~."));
1874 	assert (!Matches(",/", "$~"));
1875 	assert (!Matches("ai", "a+"));
1876 	assert (!Matches(",i", "$~"));
1877 	assert (Matches("ai", "a*"));
1878 	assert (Matches("a/", "a*"));
1879 	assert (!Matches("$/", "$~"));
1880 	assert (Matches("~/", "*$"));
1881 	assert (Matches("~i", "*$"));
1882 	assert (!Matches(",/", "*~"));
1883 	assert (!Matches("@i", " ~"));
1884 	assert (!Matches("$/", "$$"));
1885 	assert (!Matches("a@", "a "));
1886 	assert (!Matches("@/", " ~"));
1887 	assert (!Matches(" /", " ~"));
1888 	assert (Matches("a ", "a "));
1889 	assert (!Matches("@/", " +"));
1890 	assert (!Matches("$i", "$$"));
1891 	assert (Matches(",/", "*$"));
1892 	assert (!Matches("|/", "*d"));
1893 	assert (!Matches("@i", " +"));
1894 	assert (Matches("a/", "*a"));
1895 	assert (!Matches("$|", "$d"));
1896 	assert (Matches("$a", "$a"));
1897 	assert (!Matches("|/,", "d~."));
1898 	assert (Matches("~/", "**"));
1899 	assert (!Matches("|/d", "d~|"));
1900 	assert (!Matches("|i,", "d+."));
1901 	assert (!Matches("|i,", "d~."));
1902 	assert (Matches(",i", "*$"));
1903 	assert (!Matches("|i,", "d~|"));
1904 	assert (!Matches("|id", "d+."));
1905 	assert (!Matches("|/d", "d~."));
1906 	assert (!Matches("|/,", "d~|"));
1907 	assert (!Matches("|id", "d~."));
1908 	assert (!Matches("|id", "d~|"));
1909 	assert (!Matches("$i", "$+"));
1910 	assert (Matches("~i", "**"));
1911 	assert (Matches("$i", "$*"));
1912 	assert (!Matches("~i", "*+"));
1913 	assert (!Matches("a/,", "a~."));
1914 	assert (!Matches("|/,", "d+."));
1915 	assert (!Matches(",|", "*d"));
1916 	assert (Matches(",a", "*a"));
1917 	assert (Matches("$/", "$*"));
1918 	assert (!Matches(" |", " d"));
1919 	assert (!Matches(" i", " $"));
1920 	assert (Matches(" a", " a"));
1921 	assert (!Matches("|/d", "d+|"));
1922 	assert (!Matches("~@", "* "));
1923 	assert (!Matches("a/,", "a~|"));
1924 	assert (!Matches("a/d", "a~."));
1925 	assert (!Matches("a/d", "a~|"));
1926 	assert (!Matches("~/,", "$~."));
1927 	assert (!Matches("|/,", "d+|"));
1928 	assert (!Matches("|/d", "d+."));
1929 	assert (!Matches("|i,", "d+|"));
1930 	assert (!Matches("$@", "$ "));
1931 	assert (!Matches("~/d", "$~."));
1932 	assert (!Matches(" /", " $"));
1933 	assert (Matches("$ ", "$ "));
1934 	assert (!Matches("~/,", "$~|"));
1935 	assert (!Matches("|id", "d+|"));
1936 	assert (Matches("~ ", "* "));
1937 	assert (!Matches("~i,", "$+|"));
1938 	assert (Matches(",i", "**"));
1939 	assert (!Matches("~/d", "$~|"));
1940 	assert (!Matches(",/,", "$~|"));
1941 	assert (!Matches("~/d", "$+|"));
1942 	assert (!Matches(" i", " +"));
1943 	assert (!Matches("||", "*d"));
1944 	assert (Matches("aa", "*a"));
1945 	assert (!Matches(",/,", "$~."));
1946 	assert (Matches(" i", " *"));
1947 	assert (!Matches("~/,", "$+|"));
1948 	assert (Matches(",/", "**"));
1949 	assert (Matches("da", "*a"));
1950 	assert (!Matches(",/d", "$~."));
1951 	assert (Matches("da", "*d"));
1952 	assert (!Matches("~id", "$+|"));
1953 	assert (!Matches("~id", "$+."));
1954 	assert (!Matches("~id", "$~."));
1955 	assert (!Matches(",i,", "$~|"));
1956 	assert (!Matches("~i,", "$+."));
1957 	assert (!Matches(",/d", "$~|"));
1958 	assert (!Matches(",i,", "$+."));
1959 	assert (!Matches("~/d", "Z~."));
1960 	assert (!Matches("~i,", "$~."));
1961 	assert (!Matches(",i,", "$~."));
1962 	assert (!Matches("~/,", "$+."));
1963 	assert (!Matches("@i", "* "));
1964 	assert (!Matches("~/d", "$+."));
1965 	assert (!Matches(",id", "$~."));
1966 	assert (Matches(" /", " *"));
1967 	assert (!Matches("~i,", "$~|"));
1968 	assert (Matches(" i", "* "));
1969 	assert (!Matches("~/,", "Z~."));
1970 	assert (!Matches("a|,", "ad|"));
1971 	assert (!Matches("~id", "$~|"));
1972 	assert (!Matches(",id", "$~|"));
1973 	assert (!Matches("a|,", "ad."));
1974 	assert (!Matches("~i,", "Z+|"));
1975 	assert (!Matches("$/d", "$~|"));
1976 	assert (!Matches("ai,", "a$."));
1977 	assert (!Matches("$/,", "$~|"));
1978 	assert (!Matches(",id", "$+."));
1979 	assert (!Matches(",/d", "$+."));
1980 	assert (!Matches("a|d", "ad|"));
1981 	assert (!Matches("$/,", "$~."));
1982 	assert (!Matches(",i,", "$+|"));
1983 	assert (!Matches("$/d", "$~."));
1984 	assert (!Matches(" @", "  "));
1985 	assert (!Matches("~/d", "Z+|"));
1986 	assert (!Matches(",/,", "$+."));
1987 	assert (!Matches(",/,", "$+|"));
1988 	assert (!Matches(",id", "$+|"));
1989 	assert (!Matches("a|d", "ad."));
1990 	assert (Matches("  ", "  "));
1991 	assert (!Matches("~/d", "Z~|"));
1992 	assert (!Matches("@/,", " ~."));
1993 	assert (!Matches("~/,", "Z+|"));
1994 	assert (!Matches("~/,", "Z~|"));
1995 	assert (!Matches("~id", "Z~."));
1996 	assert (!Matches("~/,", "Z+."));
1997 	assert (!Matches("@/d", " ~|"));
1998 	assert (!Matches("~i,", "Z~."));
1999 	assert (!Matches("~i,", "Z+."));
2000 	assert (!Matches("~id", "Z+."));
2001 	assert (!Matches(",/d", "$+|"));
2002 	assert (!Matches("@/d", " ~."));
2003 	assert (!Matches(",/,", "*~|"));
2004 	assert (!Matches("@/,", " ~|"));
2005 	assert (!Matches("~id", "Z+|"));
2006 	assert (!Matches("aid", "a$."));
2007 	assert (!Matches("~id", "Z~|"));
2008 	assert (Matches("@ ", "* "));
2009 	assert (!Matches("@id", " +."));
2010 	assert (!Matches("~i,", "Z~|"));
2011 	assert (!Matches(",/,", "*~."));
2012 	assert (!Matches("~/d", "Z+."));
2013 	assert (!Matches("ai,", "a$|"));
2014 	assert (!Matches("aa,", "aa|"));
2015 	assert (!Matches("@@", "* "));
2016 	assert (!Matches(" /,", " ~."));
2017 	assert (!Matches(" /,", " ~|"));
2018 	assert (Matches(" T", "* "));
2019 	assert (!Matches("a/d", "a$|"));
2020 	assert (Matches("  ", "* "));
2021 	assert (!Matches("$|,", "$d|"));
2022 	assert (!Matches("aid", "a$|"));
2023 	assert (!Matches("$|,", "$d."));
2024 	assert (!Matches(" /d", " ~."));
2025 	assert (!Matches("aid", "a+."));
2026 	assert (!Matches("a/,", "a$|"));
2027 	assert (!Matches("aa,", "aa$"));
2028 	assert (!Matches("@i,", " ~|"));
2029 	assert (!Matches("a/d", "a$."));
2030 	assert (!Matches(" /d", " ~|"));
2031 	assert (!Matches("@/,", " +."));
2032 	assert (!Matches("a/,", "a$."));
2033 	assert (!Matches("@i,", " +|"));
2034 	assert (!Matches("ai,", "a+."));
2035 	assert (!Matches(",/d", "*||"));
2036 	assert (!Matches("@i,", " ~."));
2037 	assert (!Matches("$|d", "$d|"));
2038 	assert (!Matches(",/d", "*|."));
2039 	assert (!Matches("aa|", "aad"));
2040 	assert (!Matches(",/a", "*a|"));
2041 	assert (!Matches("@id", " ~|"));
2042 	assert (!Matches("@id", " +|"));
2043 	assert (!Matches("@id", " ~."));
2044 	assert (!Matches("$|d", "$d."));
2045 	assert (!Matches("$a,", "$a|"));
2046 	assert (!Matches("ai,", "a+|"));
2047 	assert (Matches(",/a", "*a$"));
2048 	assert (!Matches("a$,", "a$|"));
2049 	assert (!Matches("$id", "$$|"));
2050 	assert (!Matches("@i,", " +."));
2051 	assert (!Matches("aad", "aa$"));
2052 	assert (!Matches("@/,", " +|"));
2053 	assert (Matches("aaa", "aaa"));
2054 	assert (!Matches("$i,", "$$."));
2055 	assert (!Matches("@/d", " +|"));
2056 	assert (Matches("aa,", "aa*"));
2057 	assert (Matches(",/a", "*a*"));
2058 	assert (!Matches(",/a", "*a."));
2059 	assert (!Matches("a@d", "a ."));
2060 	assert (!Matches("@/d", " +."));
2061 	assert (!Matches("a@,", "a ."));
2062 	assert (!Matches("a@d", "a |"));
2063 	assert (!Matches("$i,", "$$|"));
2064 	assert (!Matches("aid", "a+|"));
2065 	assert (!Matches("$id", "$$."));
2066 	assert (!Matches("$a,", "$a$"));
2067 	assert (!Matches("a@,", "a |"));
2068 	assert (Matches("aad", "aa*"));
2069 	assert (!Matches("a$,", "a$$"));
2070 	assert (!Matches("aa@", "aa "));
2071 	assert (!Matches("aad", "aa."));
2072 	assert (Matches("aid", "a*$"));
2073 	assert (!Matches("$i,", "$+."));
2074 	assert (Matches("aa ", "aa "));
2075 	assert (!Matches("$id", "$+|"));
2076 	assert (Matches("ai,", "a*$"));
2077 	assert (!Matches("|/,", "*d."));
2078 	assert (!Matches("a/,", "a*|"));
2079 	assert (!Matches("$/,", "$$|"));
2080 	assert (!Matches("a$|", "a$d"));
2081 	assert (!Matches("a$d", "a$$"));
2082 	assert (!Matches(" |,", " d|"));
2083 	assert (!Matches("$/,", "$$."));
2084 	assert (!Matches("$a|", "$ad"));
2085 	assert (!Matches("$ad", "$a$"));
2086 	assert (!Matches("a ,", "a |"));
2087 	assert (Matches("a$a", "a$a"));
2088 	assert (!Matches("$id", "$+."));
2089 	assert (!Matches(",|,", "*d|"));
2090 	assert (!Matches("$/d", "$$."));
2091 	assert (!Matches("$i,", "$+|"));
2092 	assert (!Matches("|/,", "*d|"));
2093 	assert (Matches("a/,", "a*$"));
2094 	assert (!Matches(" |d", " d|"));
2095 	assert (!Matches("$/d", "$$|"));
2096 	assert (!Matches("a|,", "a*d"));
2097 	assert (!Matches("a ,", "a $"));
2098 	assert (Matches("a/d", "a*$"));
2099 	assert (Matches("$aa", "$aa"));
2100 	assert (!Matches(" a,", " a|"));
2101 	assert (Matches("$a,", "$a*"));
2102 	assert (Matches("aa,", "a*a"));
2103 	assert (!Matches(" |d", " d."));
2104 	assert (!Matches("$$,", "$$|"));
2105 	assert (Matches("ai,", "a**"));
2106 	assert (!Matches("~id", "*$|"));
2107 	assert (!Matches("~id", "*$."));
2108 	assert (!Matches("a/,", "*a|"));
2109 	assert (!Matches(",a,", "*a|"));
2110 	assert (Matches("a$,", "a$*"));
2111 	assert (Matches("aid", "a**"));
2112 	assert (!Matches("aid", "a*."));
2113 	assert (!Matches(" |,", " d."));
2114 	assert (!Matches(" id", " $."));
2115 	assert (!Matches("a/,", "*a$"));
2116 	assert (!Matches(",|,", "*d."));
2117 	assert (!Matches("a$d", "a$."));
2118 	assert (!Matches("ai@", "a* "));
2119 	assert (Matches("$/,", "$*$"));
2120 	assert (!Matches("a$@", "a$ "));
2121 	assert (!Matches("$@d", "$ ."));
2122 	assert (Matches("ai ", "a* "));
2123 	assert (!Matches("a |", "a d"));
2124 	assert (Matches("a$d", "a$*"));
2125 	assert (!Matches(" /,", " $|"));
2126 	assert (!Matches("d/d", "*|."));
2127 	assert (!Matches("a/|", "a*d"));
2128 	assert (Matches("a$ ", "a$ "));
2129 	assert (Matches("$i,", "$*$"));
2130 	assert (!Matches("a||", "a*d"));
2131 	assert (!Matches("$@,", "$ |"));
2132 	assert (Matches("aaa", "a*a"));
2133 	assert (!Matches(" i,", " $."));
2134 	assert (!Matches("$/,", "$*|"));
2135 	assert (Matches("ada", "a*a"));
2136 	assert (!Matches("$$,", "$$$"));
2137 	assert (!Matches("$a@", "$a "));
2138 	assert (!Matches("$@,", "$ ."));
2139 	assert (Matches("ada", "a*d"));
2140 	assert (!Matches("$$d", "$$$"));
2141 	assert (Matches("a/a", "a*a"));
2142 	assert (!Matches(" i,", " $|"));
2143 	assert (Matches("a a", "a a"));
2144 	assert (!Matches("a d", "a $"));
2145 	assert (!Matches(" id", " $|"));
2146 	assert (Matches("$a ", "$a "));
2147 	assert (Matches("a/,", "a**"));
2148 	assert (Matches("a ,", "a *"));
2149 	assert (!Matches("$ ,", "$ |"));
2150 	assert (Matches("$id", "$*$"));
2151 	assert (Matches("$ad", "$a*"));
2152 	assert (!Matches(" /,", " $."));
2153 	assert (!Matches(" a,", " a$"));
2154 	assert (!Matches(" /d", " $."));
2155 	assert (!Matches("$ad", "$a."));
2156 	assert (Matches("a/d", "a**"));
2157 	assert (Matches("a d", "a *"));
2158 	assert (!Matches("a @", "a  "));
2159 	assert (!Matches(" i,", " +|"));
2160 	assert (!Matches("~id", "*+|"));
2161 	assert (!Matches("a d", "a ."));
2162 	assert (Matches("a  ", "a  "));
2163 	assert (!Matches("~i,", "*$."));
2164 	assert (!Matches("a@d", "a* "));
2165 	assert (!Matches(" id", " +|"));
2166 	assert (Matches("a d", "a* "));
2167 	assert (!Matches(",a,", "*a$"));
2168 	assert (Matches("a/,", "*a*"));
2169 	assert (!Matches(" /d", " $|"));
2170 	assert (!Matches(" $,", " $|"));
2171 	assert (!Matches("a@@", "a* "));
2172 	assert (!Matches("d/d", "*||"));
2173 	assert (Matches("a T", "a* "));
2174 	assert (Matches("a@ ", "a* "));
2175 	assert (Matches("a  ", "a* "));
2176 	assert (!Matches("~id", "*+."));
2177 	assert (!Matches("$$|", "$$d"));
2178 	assert (Matches("$$a", "$$a"));
2179 	assert (!Matches("a@,", "*a "));
2180 	assert (!Matches("$@d", "$ |"));
2181 	assert (Matches("a ,", "*a "));
2182 	assert (Matches("$/d", "$*$"));
2183 	assert (!Matches(" ad", " a$"));
2184 	assert (!Matches(" @,", "  |"));
2185 	assert (!Matches("d/a", "*a|"));
2186 	assert (Matches(" a,", " a*"));
2187 	assert (!Matches(" a|", " ad"));
2188 	assert (!Matches(" id", " +."));
2189 	assert (!Matches(" /,", " *|"));
2190 	assert (!Matches(" i,", " +."));
2191 	assert (!Matches("||,", "*d|"));
2192 	assert (!Matches("a/a", "*a|"));
2193 	assert (!Matches("~i,", "*$|"));
2194 	assert (Matches("$$,", "$$*"));
2195 	assert (!Matches("d/a", "*d|"));
2196 	assert (Matches(" aa", " aa"));
2197 	assert (Matches("~id", "**$"));
2198 	assert (Matches(",a,", "*a*"));
2199 	assert (!Matches("~/d", "*$."));
2200 	assert (Matches("d/a", "*a$"));
2201 	assert (!Matches("||,", "*d."));
2202 	assert (!Matches("$$d", "$$."));
2203 	assert (!Matches("  ,", "  |"));
2204 	assert (!Matches("~/d", "*$|"));
2205 	assert (!Matches(",dd", "*||"));
2206 	assert (Matches("$$d", "$$*"));
2207 	assert (!Matches(" @,", "  ."));
2208 	assert (Matches(" a ", " a "));
2209 	assert (!Matches(" a@", " a "));
2210 	assert (!Matches("d/a", "*a."));
2211 	assert (Matches("d/a", "*a*"));
2212 	assert (!Matches("$|,", "$*d"));
2213 	assert (!Matches("~i$", "*$|"));
2214 	assert (!Matches("da,", "*a|"));
2215 	assert (Matches("a/a", "*a$"));
2216 	assert (!Matches("$/|", "$*d"));
2217 	assert (!Matches("d/a", "*d$"));
2218 	assert (!Matches(" @d", "  ."));
2219 	assert (!Matches("$$@", "$$ "));
2220 	assert (!Matches(",dd", "*|."));
2221 	assert (!Matches("ddd", "*|."));
2222 	assert (!Matches("$ ,", "$ $"));
2223 	assert (!Matches(",a@", "*a "));
2224 	assert (Matches("$i,", "$**"));
2225 	assert (!Matches(" @d", "  |"));
2226 	assert (!Matches("$ d", "$ $"));
2227 	assert (Matches("$a,", "$*a"));
2228 	assert (Matches("$/a", "$*a"));
2229 	assert (Matches(",a ", "*a "));
2230 	assert (!Matches("da,", "*a$"));
2231 	assert (Matches("$id", "$**"));
2232 	assert (!Matches(",da", "*a|"));
2233 	assert (!Matches(",/,", "**|"));
2234 	assert (!Matches(" ad", " a."));
2235 	assert (Matches("~/,", "**$"));
2236 	assert (Matches("~i$", "*$$"));
2237 	assert (Matches("$$ ", "$$ "));
2238 	assert (Matches("~i,", "**$"));
2239 	assert (!Matches("$ |", "$ d"));
2240 	assert (!Matches(" $d", " $$"));
2241 	assert (Matches("~id", "***"));
2242 	assert (!Matches(" $,", " $$"));
2243 	assert (!Matches("~/,", "*$."));
2244 	assert (Matches("a/a", "*a*"));
2245 	assert (Matches(" ad", " a*"));
2246 	assert (Matches("d/a", "*d*"));
2247 	assert (Matches("$ a", "$ a"));
2248 	assert (!Matches("$id", "$*."));
2249 	assert (Matches("$/d", "$**"));
2250 	assert (Matches(",da", "*a$"));
2251 	assert (!Matches("d@a", "*d "));
2252 	assert (!Matches("ddd", "*||"));
2253 	assert (Matches(" id", " *$"));
2254 	assert (!Matches("a@a", "*a "));
2255 	assert (!Matches("~id", "**."));
2256 	assert (Matches("d a", "*d "));
2257 	assert (Matches("a a", "*a "));
2258 	assert (!Matches(",da", "*dd"));
2259 	assert (Matches(" i,", " *$"));
2260 	assert (Matches(" /,", " *$"));
2261 	assert (Matches("$/,", "$**"));
2262 	assert (!Matches("da,", "*dd"));
2263 	assert (!Matches("~$d", "*$$"));
2264 	assert (Matches(",ba", "*ba"));
2265 	assert (!Matches("~i ", "*@|"));
2266 	assert (Matches("~/d", "**$"));
2267 	assert (!Matches(" $|", " $d"));
2268 	assert (!Matches("$||", "$*d"));
2269 	assert (!Matches("~$|", "*$d"));
2270 	assert (!Matches("da,", "*d$"));
2271 	assert (!Matches("~i ", "*@."));
2272 	assert (Matches(",/,", "**$"));
2273 	assert (Matches("$ d", "$ *"));
2274 	assert (!Matches(",aa", "*ad"));
2275 	assert (!Matches(",da", "*a."));
2276 	assert (Matches(" $a", " $a"));
2277 	assert (Matches(",aa", "*aa"));
2278 	assert (Matches("~$a", "*$a"));
2279 	assert (Matches("$da", "$*d"));
2280 	assert (Matches(",da", "*a*"));
2281 	assert (!Matches("$ d", "$ ."));
2282 	assert (!Matches(",da", "*d$"));
2283 	assert (!Matches("~/,", "*$|"));
2284 	assert (!Matches(",id", "*$."));
2285 	assert (Matches(",aa", "*a$"));
2286 	assert (Matches("ba,", "*ba"));
2287 	assert (!Matches("~@d", "* |"));
2288 	assert (Matches("~i$", "*$*"));
2289 	assert (!Matches(" |,", " *d"));
2290 	assert (!Matches("  ,", "  $"));
2291 	assert (!Matches("$i@", "$* "));
2292 	assert (Matches("$aa", "$*a"));
2293 	assert (Matches(" a,", " *a"));
2294 	assert (Matches("$da", "$*a"));
2295 	assert (!Matches("~i ", "* |"));
2296 	assert (!Matches("aa,", "*a$"));
2297 	assert (!Matches("~@d", "* ."));
2298 	assert (!Matches(",da", "*d."));
2299 	assert (!Matches(",id", "*$|"));
2300 	assert (!Matches("~i$", "*$."));
2301 	assert (!Matches(",/d", "*$|"));
2302 	assert (Matches("$i ", "$* "));
2303 	assert (Matches("$ ,", "$ *"));
2304 	assert (Matches(",da", "*d*"));
2305 	assert (Matches("aa,", "*aa"));
2306 	assert (!Matches("dd,", "*d|"));
2307 	assert (Matches(",aa", "*a*"));
2308 	assert (!Matches(",aa", "*a."));
2309 	assert (!Matches(",/,", "*$|"));
2310 	assert (!Matches("  |", "  d"));
2311 	assert (!Matches("$@d", "$* "));
2312 	assert (Matches("da,", "*a*"));
2313 	assert (Matches(",/d", "**$"));
2314 	assert (!Matches("~$d", "*$."));
2315 	assert (!Matches("~  ", "*@."));
2316 	assert (Matches("$ d", "$* "));
2317 	assert (Matches("~$d", "*$*"));
2318 	assert (!Matches("~/$", "*$|"));
2319 	assert (!Matches("dda", "*a|"));
2320 	assert (Matches(" /d", " *$"));
2321 	assert (!Matches("~$$", "*$|"));
2322 	assert (!Matches(",i,", "*$|"));
2323 	assert (!Matches("   ", "*@|"));
2324 	assert (Matches(" id", " **"));
2325 	assert (!Matches("~$,", "*$|"));
2326 	assert (!Matches(" id", " *."));
2327 	assert (!Matches("  d", "  $"));
2328 	assert (!Matches("~ |", "* d"));
2329 	assert (!Matches(" $d", " $."));
2330 	assert (!Matches("$ @", "$  "));
2331 	assert (Matches(" i,", " **"));
2332 	assert (!Matches(" /|", " *d"));
2333 	assert (Matches("~i ", "* $"));
2334 	assert (Matches("  a", "  a"));
2335 	assert (Matches("dda", "*a$"));
2336 	assert (Matches(" $d", " $*"));
2337 	assert (Matches("~ a", "* a"));
2338 	assert (!Matches("~  ", "*@|"));
2339 	assert (!Matches("~ d", "* $"));
2340 	assert (Matches("daa", "**d"));
2341 	assert (Matches("a/,", "**a"));
2342 	assert (Matches("~/d", "***"));
2343 	assert (!Matches("$id", "*$$"));
2344 	assert (Matches("$  ", "$  "));
2345 	assert (Matches("~/$", "*$$"));
2346 	assert (Matches("da ", "*a "));
2347 	assert (!Matches(",/$", "*$|"));
2348 	assert (Matches(" /a", " *a"));
2349 	assert (!Matches("|/,", "**d"));
2350 	assert (!Matches("da@", "*a "));
2351 	assert (!Matches("da,", "*d."));
2352 	assert (!Matches("@id", "* ."));
2353 	assert (Matches(",i,", "**$"));
2354 	assert (!Matches("|/|", "**d"));
2355 	assert (Matches("ada", "**a"));
2356 	assert (Matches("da,", "*d*"));
2357 	assert (Matches(",id", "**$"));
2358 	assert (!Matches("~@ ", "* |"));
2359 	assert (Matches("aa,", "*a*"));
2360 	assert (!Matches("||,", "**d"));
2361 	assert (Matches("~/,", "***"));
2362 	assert (!Matches(" ||", " *d"));
2363 	assert (!Matches(" i ", "*@|"));
2364 	assert (Matches("d/a", "**a"));
2365 	assert (Matches("~i,", "***"));
2366 	assert (Matches("d/a", "**d"));
2367 	assert (!Matches("|||", "**d"));
2368 	assert (Matches("~/$", "*$*"));
2369 	assert (!Matches(",i,", "*$."));
2370 	assert (Matches("ada", "**d"));
2371 	assert (Matches("a/a", "**a"));
2372 	assert (Matches(" $,", " $*"));
2373 	assert (!Matches("~ T", "* |"));
2374 	assert (!Matches(",i$", "*$|"));
2375 	assert (Matches(" da", " *d"));
2376 	assert (Matches("dda", "**a"));
2377 	assert (Matches("ddb", "**d"));
2378 	assert (Matches("daa", "**a"));
2379 	assert (!Matches("~  ", "* |"));
2380 	assert (!Matches("~ d", "* ."));
2381 	assert (Matches("~ d", "* *"));
2382 	assert (Matches("da,", "**a"));
2383 	assert (Matches("aaa", "**a"));
2384 	assert (!Matches("~/$", "*$."));
2385 	assert (!Matches("~@d", "** "));
2386 	assert (!Matches(" i@", " * "));
2387 	assert (Matches("~ d", "** "));
2388 	assert (!Matches("@id", "* |"));
2389 	assert (!Matches("~$,", "*$$"));
2390 	assert (Matches("~$$", "*$$"));
2391 	assert (!Matches("aa@", "*a "));
2392 	assert (!Matches(",/|", "**d"));
2393 	assert (!Matches("@@d", "* |"));
2394 	assert (Matches("  d", "  *"));
2395 	assert (Matches("~i ", "* *"));
2396 	assert (!Matches("~i ", "* ."));
2397 	assert (!Matches("$@@", "$* "));
2398 	assert (Matches("aa ", "*a "));
2399 	assert (Matches("da,", "**d"));
2400 	assert (Matches("daa", "*a$"));
2401 	assert (Matches(" da", " *a"));
2402 	assert (Matches(" /d", " **"));
2403 	assert (!Matches(",|,", "**d"));
2404 	assert (Matches("aa,", "**a"));
2405 	assert (!Matches("$/d", "*$|"));
2406 	assert (Matches(" i ", " * "));
2407 	assert (Matches("$ T", "$* "));
2408 	assert (Matches("~@ ", "* $"));
2409 	assert (!Matches("ada", "*dd"));
2410 	assert (Matches("$id", "*$*"));
2411 	assert (Matches(" aa", " *a"));
2412 	assert (Matches("$ad", "*$a"));
2413 	assert (!Matches("~i@", "** "));
2414 	assert (!Matches("ada", "*d$"));
2415 	assert (!Matches("$id", "*$."));
2416 	assert (Matches(",/a", "**a"));
2417 	assert (Matches(",a,", "**a"));
2418 	assert (!Matches("  d", "  ."));
2419 	assert (!Matches("$|d", "*$d"));
2420 	assert (Matches("~$$", "*$*"));
2421 	assert (!Matches("$/,", "*$|"));
2422 	assert (Matches("~i ", "** "));
2423 	assert (!Matches("$/$", "*$|"));
2424 	assert (!Matches(",/d", "*$."));
2425 	assert (Matches("$  ", "$* "));
2426 	assert (!Matches("B@ ", "* |"));
2427 	assert (!Matches("~$$", "*$."));
2428 	assert (Matches("~$,", "*$*"));
2429 	assert (Matches("dda", "*a*"));
2430 	assert (Matches("$@ ", "$* "));
2431 	assert (!Matches(" i ", "*@."));
2432 	assert (!Matches("$i,", "*$$"));
2433 	assert (Matches(" /,", " **"));
2434 	assert (!Matches("@@d", "* ."));
2435 	assert (Matches("aba", "*ba"));
2436 	assert (!Matches("~$@", "*$ "));
2437 	assert (Matches("ada", "*a$"));
2438 	assert (!Matches("dda", "*a."));
2439 	assert (Matches("aaa", "*a$"));
2440 	assert (Matches("~$ ", "*$ "));
2441 	assert (!Matches("ddb", "*d$"));
2442 	assert (!Matches(",$|", "*$d"));
2443 	assert (!Matches("daa", "*dd"));
2444 	assert (Matches(",i$", "*$$"));
2445 	assert (!Matches("bhh", "*hd"));
2446 	assert (!Matches("~@@", "** "));
2447 	assert (Matches(",id", "***"));
2448 	assert (!Matches(" $@", " $ "));
2449 	assert (!Matches("@i ", "* |"));
2450 	assert (Matches("  ,", "  *"));
2451 	assert (Matches("~@ ", "* *"));
2452 	assert (!Matches(" id", "* $"));
2453 	assert (!Matches("~ T", "* $"));
2454 	assert (!Matches(",$,", "*$|"));
2455 	assert (!Matches("~@ ", "* ."));
2456 	assert (Matches("daa", "*aa"));
2457 	assert (Matches("~@ ", "** "));
2458 	assert (!Matches("$|,", "*$d"));
2459 	assert (Matches(" $ ", " $ "));
2460 	assert (!Matches(",$$", "*$|"));
2461 	assert (!Matches("daa", "*d$"));
2462 	assert (Matches("~  ", "* $"));
2463 	assert (Matches("~  ", "** "));
2464 	assert (Matches("~ T", "** "));
2465 	assert (!Matches("  @", "   "));
2466 	assert (Matches("$a,", "*$a"));
2467 	assert (Matches("bad", "*ba"));
2468 	assert (!Matches("T T", "* |"));
2469 	assert (!Matches("$$,", "*$|"));
2470 	assert (!Matches("ada", "*aa"));
2471 	assert (!Matches("$$$", "*$|"));
2472 	assert (Matches(",$a", "*$a"));
2473 	assert (!Matches(" @d", " * "));
2474 	assert (!Matches("ada", "*d."));
2475 	assert (Matches("bab", "*ba"));
2476 	assert (Matches("daa", "*a*"));
2477 	assert (Matches("~ T", "* *"));
2478 	assert (!Matches(" TT", "* |"));
2479 	assert (!Matches(" @ ", "* |"));
2480 	assert (Matches("~  ", "* *"));
2481 	assert (!Matches("   ", "*@."));
2482 	assert (Matches("ddb", "*dd"));
2483 	assert (!Matches("daa", "*a."));
2484 	assert (!Matches(",$d", "*$$"));
2485 	assert (Matches("ada", "*d*"));
2486 	assert (!Matches("$$|", "*$d"));
2487 	assert (!Matches("@  ", "* |"));
2488 	assert (!Matches(",/,", "*$."));
2489 	assert (!Matches(" |d", "* d"));
2490 	assert (!Matches("$|$", "*$d"));
2491 	assert (Matches("  d", " * "));
2492 	assert (!Matches("~ T", "*  "));
2493 	assert (Matches("~! ", "*! "));
2494 	assert (Matches("   ", "   "));
2495 	assert (Matches(",i,", "***"));
2496 	assert (Matches("~  ", "*  "));
2497 	assert (!Matches("ddd", "*d|"));
2498 	assert (!Matches(" id", "* ."));
2499 	assert (!Matches("~  ", "* &"));
2500 	assert (!Matches(",i$", "*$."));
2501 	assert (Matches("$a$", "*$a"));
2502 	assert (!Matches("ddx", "*da"));
2503 	assert (Matches("aaa", "*aa"));
2504 	assert (Matches("bba", "*ba"));
2505 	assert (!Matches("daa", "*d."));
2506 	assert (!Matches("ada", "*a."));
2507 	assert (Matches(" id", "* *"));
2508 	assert (!Matches("$$d", "*$$"));
2509 	assert (Matches("ada", "*a*"));
2510 	assert (Matches(" ad", "* a"));
2511 	assert (!Matches("  X", "* |"));
2512 	assert (!Matches("$/d", "*$$"));
2513 	assert (Matches("daa", "*d*"));
2514 	assert (Matches("aaa", "*a*"));
2515 	assert (Matches(",/d", "***"));
2516 	assert (!Matches("@id", "** "));
2517 	assert (!Matches("ddb", "*d."));
2518 	assert (Matches("ddb", "*d*"));
2519 	assert (Matches(" id", "** "));
2520 	assert (!Matches("   ", "* |"));
2521 	assert (!Matches("aaa", "*a."));
2522 	assert (!Matches(" | ", "* d"));
2523 	assert (!Matches(",||", "**d"));
2524 	assert (Matches("$$a", "*$a"));
2525 	assert (Matches(",i$", "*$*"));
2526 	assert (!Matches(" iT", "* $"));
2527 	assert (!Matches(" Td", "* |"));
2528 	assert (Matches("$i$", "*$$"));
2529 	assert (Matches(",da", "**a"));
2530 	assert (Matches(",da", "**d"));
2531 	assert (Matches(",aa", "**a"));
2532 	assert (Matches(" a ", "* a"));
2533 	assert (!Matches(" |T", "* d"));
2534 	assert (Matches(" aT", "* a"));
2535 	assert (Matches(",/,", "***"));
2536 	assert (!Matches(" @@", " * "));
2537 	assert (!Matches("@ |", "* d"));
2538 	assert (!Matches("$i,", "*$."));
2539 	assert (Matches(" @ ", " * "));
2540 	assert (Matches("$i,", "*$*"));
2541 	assert (!Matches("$i$", "*$."));
2542 	assert (Matches("$i$", "*$*"));
2543 	assert (Matches(" i ", "* $"));
2544 	assert (Matches("@ a", "* a"));
2545 	assert (Matches("@i ", "* $"));
2546 	assert (!Matches("@i@", "** "));
2547 	assert (Matches("   ", " * "));
2548 	assert (!Matches(" iT", "* ."));
2549 	assert (Matches("  T", " * "));
2550 	assert (Matches(",/$", "*$$"));
2551 	assert (!Matches("  |", "* d"));
2552 	assert (Matches("@i ", "** "));
2553 	assert (!Matches("$/,", "*$$"));
2554 	assert (Matches("@i ", "* *"));
2555 	assert (Matches(" i ", "** "));
2556 	assert (Matches(",$d", "*$*"));
2557 	assert (Matches("  a", "* a"));
2558 	assert (Matches(" iT", "** "));
2559 	assert (!Matches(" Td", "* $"));
2560 	assert (!Matches("@i ", "* ."));
2561 	assert (!Matches(",$d", "*$."));
2562 	assert (Matches(" iT", "* *"));
2563 	assert (Matches(" i ", "* *"));
2564 	assert (!Matches("  d", "* $"));
2565 	assert (!Matches(" i ", "* ."));
2566 	assert (!Matches("@ d", "* $"));
2567 	assert (!Matches(" TT", "* $"));
2568 	assert (!Matches(",/$", "*$."));
2569 	assert (Matches("$/$", "*$$"));
2570 	assert (Matches("$$d", "*$*"));
2571 	assert (!Matches("$$d", "*$."));
2572 	assert (Matches("$/d", "*$*"));
2573 	assert (Matches("B@ ", "* $"));
2574 	assert (Matches(",/$", "*$*"));
2575 	assert (!Matches("$@d", "*$ "));
2576 	assert (Matches("@ d", "* *"));
2577 	assert (Matches("$ d", "*$ "));
2578 	assert (!Matches("$$,", "*$$"));
2579 	assert (!Matches(",$,", "*$$"));
2580 	assert (!Matches("@ d", "* ."));
2581 	assert (Matches(",$$", "*$$"));
2582 	assert (Matches(",$$", "*$*"));
2583 	assert (Matches("  d", "** "));
2584 	assert (Matches(" Td", "** "));
2585 	assert (Matches("@ d", "** "));
2586 	assert (!Matches("@@d", "** "));
2587 	assert (Matches("B@ ", "* *"));
2588 	assert (Matches("$$$", "*$$"));
2589 	assert (Matches("  d", "* *"));
2590 	assert (Matches(" Td", "* *"));
2591 	assert (!Matches(" Td", "*  "));
2592 	assert (!Matches(",$$", "*$."));
2593 	assert (Matches("! d", "*! "));
2594 	assert (Matches(" @ ", "* $"));
2595 	assert (Matches(",$,", "*$*"));
2596 	assert (!Matches(",$@", "*$ "));
2597 	assert (!Matches("B@ ", "* ."));
2598 	assert (Matches("  d", "*  "));
2599 	assert (!Matches("  d", "* X"));
2600 	assert (Matches("B@ ", "** "));
2601 	assert (!Matches("T T", "* $"));
2602 	assert (Matches(",$ ", "*$ "));
2603 	assert (Matches("$/,", "*$*"));
2604 	assert (!Matches("$@,", "*$ "));
2605 	assert (Matches("@  ", "* $"));
2606 	assert (Matches("@  ", "** "));
2607 	assert (!Matches("@@@", "** "));
2608 	assert (Matches("T T", "** "));
2609 	assert (!Matches("  X", "* $"));
2610 	assert (Matches("$/$", "*$*"));
2611 	assert (Matches("$$$", "*$*"));
2612 	assert (Matches("$ ,", "*$ "));
2613 	assert (Matches(" @ ", "** "));
2614 	assert (Matches("$$,", "*$*"));
2615 	assert (Matches(" TT", "** "));
2616 	assert (!Matches("$$$", "*$."));
2617 	assert (Matches("  X", "** "));
2618 	assert (Matches("   ", "** "));
2619 	assert (Matches("$ $", "*$ "));
2620 	assert (!Matches("$@$", "*$ "));
2621 	assert (Matches("@  ", "* *"));
2622 	assert (!Matches("$$@", "*$ "));
2623 	assert (Matches("   ", "* $"));
2624 	assert (Matches(" @ ", "* *"));
2625 	assert (Matches("$$ ", "*$ "));
2626 	assert (Matches("  X", "* *"));
2627 	assert (Matches("T T", "* *"));
2628 	assert (Matches(" TT", "* *"));
2629 	assert (!Matches(" TT", "*  "));
2630 	assert (!Matches("T T", "*  "));
2631 	assert (Matches("\"  ", "*\" "));
2632 	assert (Matches("   ", "* *"));
2633 	assert (!Matches(" ((", "*(_"));
2634 	assert (Matches(" ! ", "*! "));
2635 	assert (Matches("! !", "*! "));
2636 	assert (Matches("@  ", "*  "));
2637 	assert (!Matches(" @ ", "*  "));
2638 	assert (!Matches("  @", "* 0"));
2639 	assert (Matches("!! ", "*! "));
2640 	assert (!Matches("   ", "* X"));
2641 	assert (Matches("  X", "*  "));
2642 	assert (Matches("   ", "*  "));
2643 }
2644 
2645 version (unittest)
2646 {
2647 	bool testGetKV(string ex_key, string ex_value, string line)
2648 	{
2649 		string key, value;
2650 		return getKeyAndValueFrom(key, value, line.dup) && ex_key == key && ex_value == value;
2651 	}
2652 }
2653 
2654 unittest
2655 {
2656 	// Full-width Unicode characters
2657 	assert (testGetKV("KEY", "VALUE", "KEY:VALUE"));
2658 	assert (testGetKV("KEY", "VALUE", "KEY VALUE"));
2659 	assert (testGetKV("KEY", "VALUE", " KEY : VALUE "));
2660 }
2661 
2662 unittest
2663 {
2664 	string key, value;
2665 	assert (!getKeyAndValueFrom(key, value, "".dup));
2666 	assert (!getKeyAndValueFrom(key, value, "d".dup));
2667 	assert (!getKeyAndValueFrom(key, value, "#".dup));
2668 	assert (!getKeyAndValueFrom(key, value, " ".dup));
2669 	assert (!getKeyAndValueFrom(key, value, "L".dup));
2670 	assert (!getKeyAndValueFrom(key, value, ":".dup));
2671 	assert (!getKeyAndValueFrom(key, value, "dj".dup));
2672 	assert (!getKeyAndValueFrom(key, value, "d#".dup));
2673 	assert (!getKeyAndValueFrom(key, value, "#/".dup));
2674 	assert (!getKeyAndValueFrom(key, value, "#j".dup));
2675 	assert (!getKeyAndValueFrom(key, value, "d ".dup));
2676 	assert (!getKeyAndValueFrom(key, value, " j".dup));
2677 	assert (!getKeyAndValueFrom(key, value, " #".dup));
2678 	assert (!getKeyAndValueFrom(key, value, ":j".dup));
2679 	assert (!getKeyAndValueFrom(key, value, "d/".dup));
2680 	assert (testGetKV("d", "", "d:"));
2681 	assert (!getKeyAndValueFrom(key, value, "djd".dup));
2682 	assert (!getKeyAndValueFrom(key, value, "Lj".dup));
2683 	assert (!getKeyAndValueFrom(key, value, "#/(".dup));
2684 	assert (!getKeyAndValueFrom(key, value, "#j(".dup));
2685 	assert (!getKeyAndValueFrom(key, value, "#jd".dup));
2686 	assert (!getKeyAndValueFrom(key, value, ":#".dup));
2687 	assert (!getKeyAndValueFrom(key, value, "dj#".dup));
2688 	assert (!getKeyAndValueFrom(key, value, "L#".dup));
2689 	assert (!getKeyAndValueFrom(key, value, "  ".dup));
2690 	assert (!getKeyAndValueFrom(key, value, "d#d".dup));
2691 	assert (!getKeyAndValueFrom(key, value, "d#(".dup));
2692 	assert (!getKeyAndValueFrom(key, value, "#/d".dup));
2693 	assert (!getKeyAndValueFrom(key, value, " :".dup));
2694 	assert (!getKeyAndValueFrom(key, value, "dj ".dup));
2695 	assert (!getKeyAndValueFrom(key, value, " /".dup));
2696 	assert (!getKeyAndValueFrom(key, value, ":/".dup));
2697 	assert (!getKeyAndValueFrom(key, value, " jd".dup));
2698 	assert (!getKeyAndValueFrom(key, value, ": ".dup));
2699 	assert (testGetKV("d", "d", "d:d"));
2700 	assert (!getKeyAndValueFrom(key, value, "L ".dup));
2701 	assert (!getKeyAndValueFrom(key, value, ":jd".dup));
2702 	assert (!getKeyAndValueFrom(key, value, "dj(".dup));
2703 	assert (!getKeyAndValueFrom(key, value, "L/".dup));
2704 	assert (testGetKV("L", "", "L:"));
2705 	assert (testGetKV("dj", "", "dj:"));
2706 	assert (!getKeyAndValueFrom(key, value, "djdk".dup));
2707 	assert (!getKeyAndValueFrom(key, value, "d/d".dup));
2708 	assert (!getKeyAndValueFrom(key, value, "d #".dup));
2709 	assert (!getKeyAndValueFrom(key, value, " #(".dup));
2710 	assert (!getKeyAndValueFrom(key, value, "Ljd".dup));
2711 	assert (!getKeyAndValueFrom(key, value, " j#".dup));
2712 	assert (!getKeyAndValueFrom(key, value, "#j(^".dup));
2713 	assert (!getKeyAndValueFrom(key, value, " #d".dup));
2714 	assert (!getKeyAndValueFrom(key, value, "#j(k".dup));
2715 	assert (!getKeyAndValueFrom(key, value, "#jdk".dup));
2716 	assert (testGetKV("d", "d", "d d"));
2717 	assert (!getKeyAndValueFrom(key, value, "#jd^".dup));
2718 	assert (!getKeyAndValueFrom(key, value, ":j#".dup));
2719 	assert (!getKeyAndValueFrom(key, value, "djd#".dup));
2720 	assert (!getKeyAndValueFrom(key, value, ":#(".dup));
2721 	assert (!getKeyAndValueFrom(key, value, "d#d^".dup));
2722 	assert (!getKeyAndValueFrom(key, value, "#/(k".dup));
2723 	assert (!getKeyAndValueFrom(key, value, "d/#".dup));
2724 	assert (!getKeyAndValueFrom(key, value, "L#(".dup));
2725 	assert (!getKeyAndValueFrom(key, value, "Lj#".dup));
2726 	assert (!getKeyAndValueFrom(key, value, "d#dk".dup));
2727 	assert (!getKeyAndValueFrom(key, value, "dj#k".dup));
2728 	assert (testGetKV("d", "", "d:#"));
2729 	assert (!getKeyAndValueFrom(key, value, "dj#^".dup));
2730 	assert (!getKeyAndValueFrom(key, value, "#/d^".dup));
2731 	assert (!getKeyAndValueFrom(key, value, ":#d".dup));
2732 	assert (!getKeyAndValueFrom(key, value, "djdkh".dup));
2733 	assert (!getKeyAndValueFrom(key, value, "#/(^".dup));
2734 	assert (!getKeyAndValueFrom(key, value, "L#d".dup));
2735 	assert (!getKeyAndValueFrom(key, value, "d  ".dup));
2736 	assert (!getKeyAndValueFrom(key, value, "d#(k".dup));
2737 	assert (!getKeyAndValueFrom(key, value, "d#(^".dup));
2738 	assert (!getKeyAndValueFrom(key, value, "#jd^h".dup));
2739 	assert (!getKeyAndValueFrom(key, value, " j ".dup));
2740 	assert (!getKeyAndValueFrom(key, value, "#/dk".dup));
2741 	assert (!getKeyAndValueFrom(key, value, "  #".dup));
2742 	assert (testGetKV("d", "(", "d:("));
2743 	assert (!getKeyAndValueFrom(key, value, ":/d".dup));
2744 	assert (!getKeyAndValueFrom(key, value, "  d".dup));
2745 	assert (!getKeyAndValueFrom(key, value, "#jdkP".dup));
2746 	assert (!getKeyAndValueFrom(key, value, "#jdkh".dup));
2747 	assert (!getKeyAndValueFrom(key, value, "djd ".dup));
2748 	assert (!getKeyAndValueFrom(key, value, "#j(^P".dup));
2749 	assert (!getKeyAndValueFrom(key, value, "#jd^P".dup));
2750 	assert (!getKeyAndValueFrom(key, value, ":j(".dup));
2751 	assert (!getKeyAndValueFrom(key, value, "djdk#".dup));
2752 	assert (!getKeyAndValueFrom(key, value, "d#d^h".dup));
2753 	assert (!getKeyAndValueFrom(key, value, ":j ".dup));
2754 	assert (!getKeyAndValueFrom(key, value, "d/ ".dup));
2755 	assert (testGetKV("d", "", "d: "));
2756 	assert (!getKeyAndValueFrom(key, value, " j(".dup));
2757 	assert (!getKeyAndValueFrom(key, value, "d#d^P".dup));
2758 	assert (testGetKV("dj", "k", "dj:k"));
2759 	assert (!getKeyAndValueFrom(key, value, " :d".dup));
2760 	assert (testGetKV("j", "", " j:"));
2761 	assert (!getKeyAndValueFrom(key, value, " jdk".dup));
2762 	assert (testGetKV("d", "dk", "d:dk"));
2763 	assert (!getKeyAndValueFrom(key, value, "djdk ".dup));
2764 	assert (!getKeyAndValueFrom(key, value, "d#dkh".dup));
2765 	assert (!getKeyAndValueFrom(key, value, "dj#^P".dup));
2766 	assert (!getKeyAndValueFrom(key, value, " /d".dup));
2767 	assert (!getKeyAndValueFrom(key, value, "   ".dup));
2768 	assert (!getKeyAndValueFrom(key, value, ":jdk".dup));
2769 	assert (!getKeyAndValueFrom(key, value, "d#dkP".dup));
2770 	assert (!getKeyAndValueFrom(key, value, "#/d^h".dup));
2771 	assert (!getKeyAndValueFrom(key, value, "Lj ".dup));
2772 	assert (testGetKV("L", "d", "L:d"));
2773 	assert (!getKeyAndValueFrom(key, value, "#j(^h".dup));
2774 	assert (!getKeyAndValueFrom(key, value, " :#".dup));
2775 	assert (!getKeyAndValueFrom(key, value, "#/dkh".dup));
2776 	assert (!getKeyAndValueFrom(key, value, "#j(kh".dup));
2777 	assert (!getKeyAndValueFrom(key, value, "#j(kP".dup));
2778 	assert (!getKeyAndValueFrom(key, value, " /#".dup));
2779 	assert (!getKeyAndValueFrom(key, value, "#/(^h".dup));
2780 	assert (!getKeyAndValueFrom(key, value, "dj#^h".dup));
2781 	assert (!getKeyAndValueFrom(key, value, "dj#kP".dup));
2782 	assert (!getKeyAndValueFrom(key, value, "#/d^P".dup));
2783 	assert (testGetKV("d/", "", "d/:"));
2784 	assert (!getKeyAndValueFrom(key, value, "#/dkP".dup));
2785 	assert (!getKeyAndValueFrom(key, value, "#/(kP".dup));
2786 	assert (testGetKV("d", "", "d :"));
2787 	assert (!getKeyAndValueFrom(key, value, "djd#h".dup));
2788 	assert (!getKeyAndValueFrom(key, value, "d/(".dup));
2789 	assert (!getKeyAndValueFrom(key, value, "dj#kh".dup));
2790 	assert (!getKeyAndValueFrom(key, value, "djd^".dup));
2791 	assert (!getKeyAndValueFrom(key, value, ":/#".dup));
2792 	assert (!getKeyAndValueFrom(key, value, "#/(^P".dup));
2793 	assert (!getKeyAndValueFrom(key, value, ": #".dup));
2794 	assert (testGetKV("djd", "", "djd:"));
2795 	assert (testGetKV("djdk", "", "djdk:"));
2796 	assert (!getKeyAndValueFrom(key, value, "Lj(".dup));
2797 	assert (!getKeyAndValueFrom(key, value, "L/d".dup));
2798 	assert (!getKeyAndValueFrom(key, value, "#/(kh".dup));
2799 	assert (!getKeyAndValueFrom(key, value, ":/(".dup));
2800 	assert (!getKeyAndValueFrom(key, value, "djd#P".dup));
2801 	assert (!getKeyAndValueFrom(key, value, "dj(k".dup));
2802 	assert (!getKeyAndValueFrom(key, value, "dj #".dup));
2803 	assert (testGetKV("Lj", "", "Lj:"));
2804 	assert (!getKeyAndValueFrom(key, value, "d#(^P".dup));
2805 	assert (!getKeyAndValueFrom(key, value, "djdkP".dup));
2806 	assert (!getKeyAndValueFrom(key, value, "L #".dup));
2807 	assert (!getKeyAndValueFrom(key, value, " #(^".dup));
2808 	assert (!getKeyAndValueFrom(key, value, " #(k".dup));
2809 	assert (!getKeyAndValueFrom(key, value, "d#(^h".dup));
2810 	assert (!getKeyAndValueFrom(key, value, "Ljdk".dup));
2811 	assert (!getKeyAndValueFrom(key, value, "d#(kh".dup));
2812 	assert (!getKeyAndValueFrom(key, value, "d/dk".dup));
2813 	assert (!getKeyAndValueFrom(key, value, " jd#".dup));
2814 	assert (testGetKV("d", "(", "d ("));
2815 	assert (!getKeyAndValueFrom(key, value, " #d^".dup));
2816 	assert (testGetKV("d", "d", "d:d#"));
2817 	assert (testGetKV("L", "d", "L d"));
2818 	assert (!getKeyAndValueFrom(key, value, "d#(kP".dup));
2819 	assert (!getKeyAndValueFrom(key, value, " #dk".dup));
2820 	assert (testGetKV("djd", "h", "djd:h"));
2821 	assert (!getKeyAndValueFrom(key, value, " j#^".dup));
2822 	assert (testGetKV("dj", "k", "dj k"));
2823 	assert (!getKeyAndValueFrom(key, value, "d #k".dup));
2824 	assert (!getKeyAndValueFrom(key, value, " j#k".dup));
2825 	assert (testGetKV("d", "dk", "d dk"));
2826 	assert (!getKeyAndValueFrom(key, value, "d #^".dup));
2827 	assert (!getKeyAndValueFrom(key, value, "L/#".dup));
2828 	assert (!getKeyAndValueFrom(key, value, ":jd#".dup));
2829 	assert (testGetKV("L", "", "L:#"));
2830 	assert (!getKeyAndValueFrom(key, value, "djd^h".dup));
2831 	assert (!getKeyAndValueFrom(key, value, "djd #".dup));
2832 	assert (!getKeyAndValueFrom(key, value, "L#dk".dup));
2833 	assert (!getKeyAndValueFrom(key, value, ":j#^".dup));
2834 	assert (!getKeyAndValueFrom(key, value, " :(".dup));
2835 	assert (!getKeyAndValueFrom(key, value, ":#dk".dup));
2836 	assert (!getKeyAndValueFrom(key, value, "  :".dup));
2837 	assert (!getKeyAndValueFrom(key, value, "  (".dup));
2838 	assert (!getKeyAndValueFrom(key, value, "dj(#".dup));
2839 	assert (!getKeyAndValueFrom(key, value, "d/d#".dup));
2840 	assert (!getKeyAndValueFrom(key, value, " jdkh".dup));
2841 	assert (!getKeyAndValueFrom(key, value, ":jdkh".dup));
2842 	assert (testGetKV("d", "dkh", "d:dkh"));
2843 	assert (!getKeyAndValueFrom(key, value, "L#d^".dup));
2844 	assert (testGetKV("dj", "kh", "dj:kh"));
2845 	assert (!getKeyAndValueFrom(key, value, ":j#k".dup));
2846 	assert (testGetKV("djd", "h", "djd h"));
2847 	assert (!getKeyAndValueFrom(key, value, ":#d^".dup));
2848 	assert (!getKeyAndValueFrom(key, value, "L#(k".dup));
2849 	assert (!getKeyAndValueFrom(key, value, ":  ".dup));
2850 	assert (!getKeyAndValueFrom(key, value, ":/ ".dup));
2851 	assert (!getKeyAndValueFrom(key, value, ":j(k".dup));
2852 	assert (testGetKV("dj", "", "dj:#"));
2853 	assert (!getKeyAndValueFrom(key, value, " #d^h".dup));
2854 	assert (testGetKV("djd", "", "djd:#"));
2855 	assert (!getKeyAndValueFrom(key, value, " : ".dup));
2856 	assert (!getKeyAndValueFrom(key, value, " #d^P".dup));
2857 	assert (!getKeyAndValueFrom(key, value, "Ljd#".dup));
2858 	assert (!getKeyAndValueFrom(key, value, "Lj#^".dup));
2859 	assert (!getKeyAndValueFrom(key, value, ":#(k".dup));
2860 	assert (!getKeyAndValueFrom(key, value, "djd^#".dup));
2861 	assert (!getKeyAndValueFrom(key, value, ":#(^".dup));
2862 	assert (!getKeyAndValueFrom(key, value, "Lj#k".dup));
2863 	assert (!getKeyAndValueFrom(key, value, "d/#k".dup));
2864 	assert (!getKeyAndValueFrom(key, value, ":/dk".dup));
2865 	assert (testGetKV("d", "", "d:#k"));
2866 	assert (testGetKV("L", "(", "L:("));
2867 	assert (!getKeyAndValueFrom(key, value, "djd  ".dup));
2868 	assert (!getKeyAndValueFrom(key, value, " #dkP".dup));
2869 	assert (!getKeyAndValueFrom(key, value, "L  ".dup));
2870 	assert (!getKeyAndValueFrom(key, value, " / ".dup));
2871 	assert (!getKeyAndValueFrom(key, value, "d/#^".dup));
2872 	assert (testGetKV("djd", "P", "djd:P"));
2873 	assert (!getKeyAndValueFrom(key, value, "dj  ".dup));
2874 	assert (!getKeyAndValueFrom(key, value, "L#(^".dup));
2875 	assert (!getKeyAndValueFrom(key, value, "Ljdkh".dup));
2876 	assert (testGetKV("d", "", "d:#^"));
2877 	assert (!getKeyAndValueFrom(key, value, " jd ".dup));
2878 	assert (!getKeyAndValueFrom(key, value, " #dkh".dup));
2879 	assert (!getKeyAndValueFrom(key, value, " #(^P".dup));
2880 	assert (!getKeyAndValueFrom(key, value, " j#^P".dup));
2881 	assert (!getKeyAndValueFrom(key, value, "dj(kh".dup));
2882 	assert (testGetKV("dj", "^", "dj:^"));
2883 	assert (!getKeyAndValueFrom(key, value, ":jdk#".dup));
2884 	assert (!getKeyAndValueFrom(key, value, " jdk#".dup));
2885 	assert (testGetKV("djd", "", "djd: "));
2886 	assert (!getKeyAndValueFrom(key, value, "d/dkh".dup));
2887 	assert (testGetKV("dj", "k", "dj:k#"));
2888 	assert (!getKeyAndValueFrom(key, value, "djd^ ".dup));
2889 	assert (!getKeyAndValueFrom(key, value, " /(".dup));
2890 	assert (testGetKV("d", "d", "d:d "));
2891 	assert (!getKeyAndValueFrom(key, value, " jd#P".dup));
2892 	assert (testGetKV("j", "k", " j:k"));
2893 	assert (!getKeyAndValueFrom(key, value, ":jd^".dup));
2894 	assert (!getKeyAndValueFrom(key, value, " #(^h".dup));
2895 	assert (!getKeyAndValueFrom(key, value, "d #^h".dup));
2896 	assert (testGetKV("/", "", " /:"));
2897 	assert (!getKeyAndValueFrom(key, value, " #(kh".dup));
2898 	assert (testGetKV("d", "d", "d d#"));
2899 	assert (!getKeyAndValueFrom(key, value, " j#kP".dup));
2900 	assert (!getKeyAndValueFrom(key, value, " j#kh".dup));
2901 	assert (!getKeyAndValueFrom(key, value, "d #^P".dup));
2902 	assert (!getKeyAndValueFrom(key, value, "  dk".dup));
2903 	assert (!getKeyAndValueFrom(key, value, " #(kP".dup));
2904 	assert (testGetKV("d", "d", "d:d#h"));
2905 	assert (!getKeyAndValueFrom(key, value, " j#^h".dup));
2906 	assert (!getKeyAndValueFrom(key, value, "d #kh".dup));
2907 	assert (testGetKV("d", "dk", "d:dk#"));
2908 	assert (testGetKV("djd", "", "djd :"));
2909 	assert (!getKeyAndValueFrom(key, value, "djd^P".dup));
2910 	assert (testGetKV("d", "k", "d: k"));
2911 	assert (testGetKV("djd^", "", "djd^:"));
2912 	assert (testGetKV("d", "(k", "d:(k"));
2913 	assert (testGetKV("dj", "kh", "dj kh"));
2914 	assert (testGetKV("d", "d^", "d:d^"));
2915 	assert (!getKeyAndValueFrom(key, value, ":jd ".dup));
2916 	assert (!getKeyAndValueFrom(key, value, "d #kP".dup));
2917 	assert (testGetKV("d", "dkh", "d dkh"));
2918 	assert (!getKeyAndValueFrom(key, value, "Ljdk#".dup));
2919 	assert (testGetKV("d", "d", "d:d#P"));
2920 	assert (!getKeyAndValueFrom(key, value, "dj #P".dup));
2921 	assert (!getKeyAndValueFrom(key, value, "L/ ".dup));
2922 	assert (testGetKV("L", "", "L: "));
2923 	assert (testGetKV("djd", "P", "djd P"));
2924 	assert (!getKeyAndValueFrom(key, value, "  #k".dup));
2925 	assert (!getKeyAndValueFrom(key, value, " jd#h".dup));
2926 	assert (!getKeyAndValueFrom(key, value, ":jd#h".dup));
2927 	assert (!getKeyAndValueFrom(key, value, ":/d#".dup));
2928 	assert (!getKeyAndValueFrom(key, value, "dj(k#".dup));
2929 	assert (!getKeyAndValueFrom(key, value, " :dk".dup));
2930 	assert (!getKeyAndValueFrom(key, value, "dj #h".dup));
2931 	assert (!getKeyAndValueFrom(key, value, ":jd#P".dup));
2932 	assert (testGetKV("dj", "", "dj: "));
2933 	assert (!getKeyAndValueFrom(key, value, "dj( ".dup));
2934 	assert (!getKeyAndValueFrom(key, value, ":#d^P".dup));
2935 	assert (!getKeyAndValueFrom(key, value, " j #".dup));
2936 	assert (!getKeyAndValueFrom(key, value, "  d#".dup));
2937 	assert (!getKeyAndValueFrom(key, value, ":#d^h".dup));
2938 	assert (testGetKV("L", "", "L :"));
2939 	assert (!getKeyAndValueFrom(key, value, "L#d^P".dup));
2940 	assert (!getKeyAndValueFrom(key, value, " jdk ".dup));
2941 	assert (testGetKV("L/", "", "L/:"));
2942 	assert (!getKeyAndValueFrom(key, value, ":jdkP".dup));
2943 	assert (!getKeyAndValueFrom(key, value, "L/(".dup));
2944 	assert (!getKeyAndValueFrom(key, value, "L#d^h".dup));
2945 	assert (!getKeyAndValueFrom(key, value, "d/dk#".dup));
2946 	assert (!getKeyAndValueFrom(key, value, "  #^".dup));
2947 	assert (!getKeyAndValueFrom(key, value, ":jdk ".dup));
2948 	assert (!getKeyAndValueFrom(key, value, ":#dkP".dup));
2949 	assert (!getKeyAndValueFrom(key, value, " j(k".dup));
2950 	assert (testGetKV("dj", "k", "dj k#"));
2951 	assert (testGetKV("dj", "kP", "dj:kP"));
2952 	assert (testGetKV("Lj", "k", "Lj:k"));
2953 	assert (testGetKV("jd", "", " jd:"));
2954 	assert (testGetKV("L", "dk", "L:dk"));
2955 	assert (!getKeyAndValueFrom(key, value, "d/d ".dup));
2956 	assert (!getKeyAndValueFrom(key, value, ":j#^P".dup));
2957 	assert (testGetKV("dj", "k", "dj:k "));
2958 	assert (!getKeyAndValueFrom(key, value, " jd^".dup));
2959 	assert (!getKeyAndValueFrom(key, value, "d  #".dup));
2960 	assert (!getKeyAndValueFrom(key, value, "L#dkP".dup));
2961 	assert (testGetKV("dj(", "", "dj(:"));
2962 	assert (!getKeyAndValueFrom(key, value, ":#dkh".dup));
2963 	assert (testGetKV("dj", "", "dj :"));
2964 	assert (!getKeyAndValueFrom(key, value, " :d#".dup));
2965 	assert (testGetKV("L", "(", "L ("));
2966 	assert (!getKeyAndValueFrom(key, value, ":j#kP".dup));
2967 	assert (!getKeyAndValueFrom(key, value, ":j#kh".dup));
2968 	assert (!getKeyAndValueFrom(key, value, "dj(^".dup));
2969 	assert (!getKeyAndValueFrom(key, value, "dj(k ".dup));
2970 	assert (!getKeyAndValueFrom(key, value, " /dk".dup));
2971 	assert (testGetKV("d", "dk", "d:dk "));
2972 	assert (!getKeyAndValueFrom(key, value, "L#dkh".dup));
2973 	assert (testGetKV("d/", "k", "d/:k"));
2974 	assert (testGetKV("dj(k", "", "dj(k:"));
2975 	assert (testGetKV("d", "dkP", "d:dkP"));
2976 	assert (!getKeyAndValueFrom(key, value, ":j(^".dup));
2977 	assert (!getKeyAndValueFrom(key, value, ":j#^h".dup));
2978 	assert (testGetKV("d", "d^h", "d:d^h"));
2979 	assert (!getKeyAndValueFrom(key, value, "Ljd ".dup));
2980 	assert (!getKeyAndValueFrom(key, value, "dj(#P".dup));
2981 	assert (testGetKV("d/d", "", "d/d:"));
2982 	assert (!getKeyAndValueFrom(key, value, "L#(^P".dup));
2983 	assert (testGetKV("jdk", "", " jdk:"));
2984 	assert (testGetKV("dj", "", "dj:#P"));
2985 	assert (testGetKV("d", "k", "d :k"));
2986 	assert (!getKeyAndValueFrom(key, value, " jdkP".dup));
2987 	assert (testGetKV("d", "dk", "d dk#"));
2988 	assert (!getKeyAndValueFrom(key, value, ":#(^P".dup));
2989 	assert (!getKeyAndValueFrom(key, value, "d/#kh".dup));
2990 	assert (testGetKV("dj", "", "dj:#h"));
2991 	assert (testGetKV("dj", "k", "dj k "));
2992 	assert (testGetKV("d", "", "d:#^h"));
2993 	assert (testGetKV("dj", "^", "dj ^"));
2994 	assert (!getKeyAndValueFrom(key, value, "dj(kP".dup));
2995 	assert (!getKeyAndValueFrom(key, value, "dj(#h".dup));
2996 	assert (!getKeyAndValueFrom(key, value, ":jd^h".dup));
2997 	assert (testGetKV("d", "", "d:#^P"));
2998 	assert (!getKeyAndValueFrom(key, value, ":#(kP".dup));
2999 	assert (!getKeyAndValueFrom(key, value, "L#(kh".dup));
3000 	assert (!getKeyAndValueFrom(key, value, "Ljdk ".dup));
3001 	assert (!getKeyAndValueFrom(key, value, "Ljd#P".dup));
3002 	assert (!getKeyAndValueFrom(key, value, ":#(kh".dup));
3003 	assert (!getKeyAndValueFrom(key, value, ":/#^".dup));
3004 	assert (!getKeyAndValueFrom(key, value, "d/#^P".dup));
3005 	assert (!getKeyAndValueFrom(key, value, ":j(#".dup));
3006 	assert (testGetKV("dj", "kP", "dj kP"));
3007 	assert (!getKeyAndValueFrom(key, value, "Lj#kh".dup));
3008 	assert (!getKeyAndValueFrom(key, value, "d/d#P".dup));
3009 	assert (!getKeyAndValueFrom(key, value, " :#k".dup));
3010 	assert (testGetKV("dj", "^h", "dj:^h"));
3011 	assert (testGetKV("dj", "h", "dj: h"));
3012 	assert (!getKeyAndValueFrom(key, value, ":j #".dup));
3013 	assert (!getKeyAndValueFrom(key, value, "L#(kP".dup));
3014 	assert (!getKeyAndValueFrom(key, value, ":/d^".dup));
3015 	assert (testGetKV("Ljd", "", "Ljd:"));
3016 	assert (!getKeyAndValueFrom(key, value, "Lj#^P".dup));
3017 	assert (!getKeyAndValueFrom(key, value, ":/(k".dup));
3018 	assert (!getKeyAndValueFrom(key, value, "Lj#kP".dup));
3019 	assert (testGetKV("d", "d", "d d "));
3020 	assert (!getKeyAndValueFrom(key, value, "Ljd^".dup));
3021 	assert (testGetKV("d", "(", "d:(#"));
3022 	assert (!getKeyAndValueFrom(key, value, ":#(^h".dup));
3023 	assert (testGetKV("d", "", "d:#kP"));
3024 	assert (testGetKV("Ljdk", "", "Ljdk:"));
3025 	assert (!getKeyAndValueFrom(key, value, "L/dk".dup));
3026 	assert (testGetKV("j", "k", " j k"));
3027 	assert (!getKeyAndValueFrom(key, value, "d/#^h".dup));
3028 	assert (testGetKV("d", "", "d:#kh"));
3029 	assert (!getKeyAndValueFrom(key, value, "Lj#^h".dup));
3030 	assert (!getKeyAndValueFrom(key, value, "d/#kP".dup));
3031 	assert (!getKeyAndValueFrom(key, value, ": #k".dup));
3032 	assert (!getKeyAndValueFrom(key, value, " /d#".dup));
3033 	assert (!getKeyAndValueFrom(key, value, "d/dk ".dup));
3034 	assert (!getKeyAndValueFrom(key, value, "Ljd#h".dup));
3035 	assert (!getKeyAndValueFrom(key, value, "d/ #".dup));
3036 	assert (!getKeyAndValueFrom(key, value, "LjdkP".dup));
3037 	assert (!getKeyAndValueFrom(key, value, " :#^".dup));
3038 	assert (testGetKV("dj", "h", "dj :h"));
3039 	assert (!getKeyAndValueFrom(key, value, ": #^".dup));
3040 	assert (!getKeyAndValueFrom(key, value, " /#k".dup));
3041 	assert (testGetKV("dj(", "h", "dj(:h"));
3042 	assert (!getKeyAndValueFrom(key, value, " /#^".dup));
3043 	assert (!getKeyAndValueFrom(key, value, "Lj(k".dup));
3044 	assert (testGetKV("d/dk", "", "d/dk:"));
3045 	assert (!getKeyAndValueFrom(key, value, ":/dkh".dup));
3046 	assert (!getKeyAndValueFrom(key, value, "d/d^".dup));
3047 	assert (!getKeyAndValueFrom(key, value, "d/d#h".dup));
3048 	assert (!getKeyAndValueFrom(key, value, "dj  #".dup));
3049 	assert (!getKeyAndValueFrom(key, value, "L#(^h".dup));
3050 	assert (!getKeyAndValueFrom(key, value, ":/d ".dup));
3051 	assert (!getKeyAndValueFrom(key, value, "d   ".dup));
3052 	assert (!getKeyAndValueFrom(key, value, ":j(kh".dup));
3053 	assert (!getKeyAndValueFrom(key, value, "   #".dup));
3054 	assert (!getKeyAndValueFrom(key, value, "d/(k".dup));
3055 	assert (testGetKV("dj", "^", "dj:^#"));
3056 	assert (!getKeyAndValueFrom(key, value, " j(#".dup));
3057 	assert (!getKeyAndValueFrom(key, value, "  #^P".dup));
3058 	assert (!getKeyAndValueFrom(key, value, "dj(^h".dup));
3059 	assert (testGetKV("L", "dk", "L dk"));
3060 	assert (testGetKV("d", "", "d: #"));
3061 	assert (!getKeyAndValueFrom(key, value, "  #kP".dup));
3062 	assert (testGetKV("j", "", " j:#"));
3063 	assert (!getKeyAndValueFrom(key, value, " j  ".dup));
3064 	assert (!getKeyAndValueFrom(key, value, "L #^".dup));
3065 	assert (!getKeyAndValueFrom(key, value, "  d ".dup));
3066 	assert (testGetKV("jd", "h", " jd:h"));
3067 	assert (testGetKV("d", "dk", "d dk "));
3068 	assert (!getKeyAndValueFrom(key, value, "L #k".dup));
3069 	assert (!getKeyAndValueFrom(key, value, " :(k".dup));
3070 	assert (!getKeyAndValueFrom(key, value, "dj( #".dup));
3071 	assert (testGetKV("Lj", "k", "Lj k"));
3072 	assert (testGetKV("dj(", "h", "dj( h"));
3073 	assert (!getKeyAndValueFrom(key, value, "  #kh".dup));
3074 	assert (!getKeyAndValueFrom(key, value, "d/dkP".dup));
3075 	assert (testGetKV("d", "d^", "d d^"));
3076 	assert (!getKeyAndValueFrom(key, value, ":/d#P".dup));
3077 	assert (!getKeyAndValueFrom(key, value, "d  #h".dup));
3078 	assert (testGetKV("L", "d", "L:d#"));
3079 	assert (testGetKV("dj", "h", "dj  h"));
3080 	assert (testGetKV("dj", "^h", "dj ^h"));
3081 	assert (testGetKV("dj", "", "dj: #"));
3082 	assert (!getKeyAndValueFrom(key, value, ":/#k".dup));
3083 	assert (!getKeyAndValueFrom(key, value, " jd #".dup));
3084 	assert (!getKeyAndValueFrom(key, value, "Lj #".dup));
3085 	assert (!getKeyAndValueFrom(key, value, " jd^h".dup));
3086 	assert (!getKeyAndValueFrom(key, value, ":jd^P".dup));
3087 	assert (testGetKV("Ljd", "h", "Ljd:h"));
3088 	assert (testGetKV("dj", "^P", "dj:^P"));
3089 	assert (!getKeyAndValueFrom(key, value, ":j(k#".dup));
3090 	assert (!getKeyAndValueFrom(key, value, ":jd^#".dup));
3091 	assert (testGetKV("d", "dkP", "d dkP"));
3092 	assert (testGetKV("d", "(^", "d:(^"));
3093 	assert (!getKeyAndValueFrom(key, value, ":/dk#".dup));
3094 	assert (!getKeyAndValueFrom(key, value, "  #^h".dup));
3095 	assert (!getKeyAndValueFrom(key, value, ":jd #".dup));
3096 	assert (!getKeyAndValueFrom(key, value, "dj(^#".dup));
3097 	assert (testGetKV("dj", "P", "dj: P"));
3098 	assert (testGetKV("dj", "^", "dj:^ "));
3099 	assert (testGetKV("d/d", "h", "d/d:h"));
3100 	assert (!getKeyAndValueFrom(key, value, "dj   ".dup));
3101 	assert (testGetKV("dj", "", "dj :#"));
3102 	assert (testGetKV("dj(", "", "dj(:#"));
3103 	assert (testGetKV("d", "d", "d d#P"));
3104 	assert (!getKeyAndValueFrom(key, value, "  d#P".dup));
3105 	assert (!getKeyAndValueFrom(key, value, "  dkh".dup));
3106 	assert (!getKeyAndValueFrom(key, value, ":/d#h".dup));
3107 	assert (testGetKV("d", "(kh", "d:(kh"));
3108 	assert (testGetKV("d", "d", "d d#h"));
3109 	assert (!getKeyAndValueFrom(key, value, "L/d#".dup));
3110 	assert (testGetKV("dj", "^", "dj ^#"));
3111 	assert (testGetKV("d", "(", "d:( "));
3112 	assert (testGetKV("d/", "k", "d/ k"));
3113 	assert (!getKeyAndValueFrom(key, value, ":j(^h".dup));
3114 	assert (!getKeyAndValueFrom(key, value, ":j( ".dup));
3115 	assert (testGetKV("dj(", "P", "dj(:P"));
3116 	assert (!getKeyAndValueFrom(key, value, "  :k".dup));
3117 	assert (testGetKV("dj", "P", "dj :P"));
3118 	assert (!getKeyAndValueFrom(key, value, " :d^".dup));
3119 	assert (testGetKV("d", "k", "d  k"));
3120 	assert (!getKeyAndValueFrom(key, value, "L/#k".dup));
3121 	assert (testGetKV("j", "kh", " j:kh"));
3122 	assert (!getKeyAndValueFrom(key, value, "dj(  ".dup));
3123 	assert (testGetKV("L", "", "L:#^"));
3124 	assert (!getKeyAndValueFrom(key, value, "L/#^".dup));
3125 	assert (!getKeyAndValueFrom(key, value, "Ljd^h".dup));
3126 	assert (!getKeyAndValueFrom(key, value, " j #h".dup));
3127 	assert (testGetKV("d", "kh", "d: kh"));
3128 	assert (!getKeyAndValueFrom(key, value, ":/(#".dup));
3129 	assert (testGetKV("dj", "", "dj:  "));
3130 	assert (!getKeyAndValueFrom(key, value, "  d#h".dup));
3131 	assert (testGetKV("jd", "h", " jd h"));
3132 	assert (testGetKV("j", "^", " j:^"));
3133 	assert (!getKeyAndValueFrom(key, value, " j #P".dup));
3134 	assert (!getKeyAndValueFrom(key, value, ":j(#h".dup));
3135 	assert (!getKeyAndValueFrom(key, value, " :dkh".dup));
3136 	assert (!getKeyAndValueFrom(key, value, " /#^P".dup));
3137 	assert (!getKeyAndValueFrom(key, value, "d d h".dup));
3138 	assert (!getKeyAndValueFrom(key, value, "   k".dup));
3139 	assert (testGetKV("dj(^", "", "dj(^:"));
3140 	assert (!getKeyAndValueFrom(key, value, ":/#^P".dup));
3141 	assert (testGetKV("L", "dkh", "L:dkh"));
3142 	assert (testGetKV("d/", "", "d/:#"));
3143 	assert (testGetKV("dj(", "", "dj(: "));
3144 	assert (testGetKV("Lj", "", "Lj:#"));
3145 	assert (!getKeyAndValueFrom(key, value, " :d#h".dup));
3146 	assert (!getKeyAndValueFrom(key, value, ":/d^h".dup));
3147 	assert (!getKeyAndValueFrom(key, value, "dj(^ ".dup));
3148 	assert (testGetKV("d", "(k", "d (k"));
3149 	assert (testGetKV("dj", "", "dj : "));
3150 	assert (!getKeyAndValueFrom(key, value, ":j  ".dup));
3151 	assert (testGetKV("d", "^", "d: ^"));
3152 	assert (!getKeyAndValueFrom(key, value, ":/(^".dup));
3153 	assert (!getKeyAndValueFrom(key, value, "Lj(#".dup));
3154 	assert (!getKeyAndValueFrom(key, value, "d/(#".dup));
3155 	assert (!getKeyAndValueFrom(key, value, "d/d^h".dup));
3156 	assert (!getKeyAndValueFrom(key, value, ":/#^h".dup));
3157 	assert (!getKeyAndValueFrom(key, value, " jd^#".dup));
3158 	assert (testGetKV("d", "d^", "d:d^#"));
3159 	assert (testGetKV("Ljd", "h", "Ljd h"));
3160 	assert (!getKeyAndValueFrom(key, value, "  :#".dup));
3161 	assert (!getKeyAndValueFrom(key, value, "d  #P".dup));
3162 	assert (testGetKV("L", "", "L:#k"));
3163 	assert (!getKeyAndValueFrom(key, value, " :#^P".dup));
3164 	assert (testGetKV("dj", "^", "dj ^ "));
3165 	assert (!getKeyAndValueFrom(key, value, " :d ".dup));
3166 	assert (!getKeyAndValueFrom(key, value, " :#kP".dup));
3167 	assert (testGetKV("dj(", "", "dj( :"));
3168 	assert (!getKeyAndValueFrom(key, value, "    ".dup));
3169 	assert (!getKeyAndValueFrom(key, value, "  dk#".dup));
3170 	assert (!getKeyAndValueFrom(key, value, " j( ".dup));
3171 	assert (testGetKV("d", "d^P", "d:d^P"));
3172 	assert (testGetKV("dj", "", "dj  :"));
3173 	assert (!getKeyAndValueFrom(key, value, ":j(#P".dup));
3174 	assert (testGetKV("jd", "", " jd:#"));
3175 	assert (!getKeyAndValueFrom(key, value, "Ljd #".dup));
3176 	assert (!getKeyAndValueFrom(key, value, "dj(^P".dup));
3177 	assert (testGetKV("d", "d", "d:d #"));
3178 	assert (!getKeyAndValueFrom(key, value, ": #^P".dup));
3179 	assert (testGetKV("d", "", "d :#"));
3180 	assert (!getKeyAndValueFrom(key, value, "  (#".dup));
3181 	assert (!getKeyAndValueFrom(key, value, " jd  ".dup));
3182 	assert (testGetKV("Lj", "kh", "Lj:kh"));
3183 	assert (testGetKV("d", "d^h", "d d^h"));
3184 	assert (testGetKV("dj(", "P", "dj( P"));
3185 	assert (!getKeyAndValueFrom(key, value, ":j #P".dup));
3186 	assert (!getKeyAndValueFrom(key, value, ":jd^ ".dup));
3187 	assert (!getKeyAndValueFrom(key, value, "L #^P".dup));
3188 	assert (!getKeyAndValueFrom(key, value, "   #h".dup));
3189 	assert (!getKeyAndValueFrom(key, value, " :#^h".dup));
3190 	assert (testGetKV("dj", "P", "dj  P"));
3191 	assert (testGetKV("dj", "^P", "dj ^P"));
3192 	assert (!getKeyAndValueFrom(key, value, ":/dkP".dup));
3193 	assert (testGetKV("L", "d", "L d#"));
3194 	assert (testGetKV("d/d", "h", "d/d h"));
3195 	assert (!getKeyAndValueFrom(key, value, " :d#P".dup));
3196 	assert (testGetKV("d", "(", "d:(#P"));
3197 	assert (testGetKV("j", "k", " j:k#"));
3198 	assert (!getKeyAndValueFrom(key, value, " /dkh".dup));
3199 	assert (!getKeyAndValueFrom(key, value, ":/dk ".dup));
3200 	assert (!getKeyAndValueFrom(key, value, ":/(kh".dup));
3201 	assert (!getKeyAndValueFrom(key, value, ":/#kP".dup));
3202 	assert (testGetKV("d/", "kh", "d/:kh"));
3203 	assert (testGetKV("Ljd", "", "Ljd:#"));
3204 	assert (!getKeyAndValueFrom(key, value, "   #P".dup));
3205 	assert (!getKeyAndValueFrom(key, value, " j(kh".dup));
3206 	assert (testGetKV("d", "kh", "d :kh"));
3207 	assert (testGetKV("d/d", "", "d/d:#"));
3208 	assert (!getKeyAndValueFrom(key, value, "d/  ".dup));
3209 	assert (!getKeyAndValueFrom(key, value, "Ljd^#".dup));
3210 	assert (!getKeyAndValueFrom(key, value, "d/d #".dup));
3211 	assert (testGetKV("d", "(k", "d:(k#"));
3212 	assert (testGetKV("jd", "P", " jd:P"));
3213 	assert (testGetKV("d", "k", "d: k#"));
3214 	assert (!getKeyAndValueFrom(key, value, ":jd  ".dup));
3215 	assert (testGetKV("d/d", "P", "d/d:P"));
3216 	assert (!getKeyAndValueFrom(key, value, " :#kh".dup));
3217 	assert (!getKeyAndValueFrom(key, value, " :(#".dup));
3218 	assert (testGetKV("d", "(", "d:(#h"));
3219 	assert (!getKeyAndValueFrom(key, value, " /#^h".dup));
3220 	assert (!getKeyAndValueFrom(key, value, ": #kP".dup));
3221 	assert (!getKeyAndValueFrom(key, value, "d/ #h".dup));
3222 	assert (testGetKV("d", "d", "d:d  "));
3223 	assert (!getKeyAndValueFrom(key, value, " :dk#".dup));
3224 	assert (!getKeyAndValueFrom(key, value, "d/d^#".dup));
3225 	assert (testGetKV("d", "d^", "d:d^ "));
3226 	assert (testGetKV("Ljd", "P", "Ljd:P"));
3227 	assert (!getKeyAndValueFrom(key, value, ":j(k ".dup));
3228 	assert (testGetKV("d", "d", "d d #"));
3229 	assert (!getKeyAndValueFrom(key, value, "L #^h".dup));
3230 	assert (testGetKV("d", "(", "d (#"));
3231 	assert (!getKeyAndValueFrom(key, value, ": #^h".dup));
3232 	assert (testGetKV("j", "", " j: "));
3233 	assert (!getKeyAndValueFrom(key, value, "  d^".dup));
3234 	assert (!getKeyAndValueFrom(key, value, " jd^ ".dup));
3235 	assert (testGetKV("d", "(^h", "d:(^h"));
3236 	assert (testGetKV("d", "d^", "d d^#"));
3237 	assert (!getKeyAndValueFrom(key, value, " /#kP".dup));
3238 	assert (testGetKV("jd", "", " jd: "));
3239 	assert (!getKeyAndValueFrom(key, value, "Lj  ".dup));
3240 	assert (!getKeyAndValueFrom(key, value, ":/ #".dup));
3241 	assert (testGetKV("Lj", "^", "Lj:^"));
3242 	assert (!getKeyAndValueFrom(key, value, " /#kh".dup));
3243 	assert (!getKeyAndValueFrom(key, value, ":/#kh".dup));
3244 	assert (!getKeyAndValueFrom(key, value, ":/( ".dup));
3245 	assert (!getKeyAndValueFrom(key, value, ":j #h".dup));
3246 	assert (!getKeyAndValueFrom(key, value, "L/dkh".dup));
3247 	assert (testGetKV("L", "k", "L: k"));
3248 	assert (testGetKV("d", "", "  d:"));
3249 	assert (testGetKV("d", "", "d: #h"));
3250 	assert (!getKeyAndValueFrom(key, value, " /d ".dup));
3251 	assert (!getKeyAndValueFrom(key, value, ": #kh".dup));
3252 	assert (!getKeyAndValueFrom(key, value, "d/d  ".dup));
3253 	assert (!getKeyAndValueFrom(key, value, ":j(kP".dup));
3254 	assert (!getKeyAndValueFrom(key, value, ":/(k#".dup));
3255 	assert (testGetKV("d/d^", "", "d/d^:"));
3256 	assert (testGetKV("d/d", "", "d/d :"));
3257 	assert (testGetKV("d", "", "d:  "));
3258 	assert (testGetKV("L", "d^", "L:d^"));
3259 	assert (testGetKV("d/d", "", "d/d: "));
3260 	assert (testGetKV("d/", "^", "d/:^"));
3261 	assert (testGetKV("L", "(k", "L:(k"));
3262 	assert (!getKeyAndValueFrom(key, value, "  (k".dup));
3263 	assert (!getKeyAndValueFrom(key, value, "d/(kh".dup));
3264 	assert (!getKeyAndValueFrom(key, value, " : #".dup));
3265 	assert (!getKeyAndValueFrom(key, value, "Ljd  ".dup));
3266 	assert (!getKeyAndValueFrom(key, value, ":  #".dup));
3267 	assert (!getKeyAndValueFrom(key, value, " :(^".dup));
3268 	assert (!getKeyAndValueFrom(key, value, "L #kP".dup));
3269 	assert (!getKeyAndValueFrom(key, value, " /d#h".dup));
3270 	assert (!getKeyAndValueFrom(key, value, "Lj(kh".dup));
3271 	assert (testGetKV("/", "k", " /:k"));
3272 	assert (testGetKV("L", "dk", "L:dk#"));
3273 	assert (testGetKV("d", "^", "d :^"));
3274 	assert (testGetKV("d", "d", "d d  "));
3275 	assert (!getKeyAndValueFrom(key, value, "d d P".dup));
3276 	assert (testGetKV("d", "", "d: #P"));
3277 	assert (!getKeyAndValueFrom(key, value, "d/d^P".dup));
3278 	assert (!getKeyAndValueFrom(key, value, "d/d^ ".dup));
3279 	assert (testGetKV("L", "d", "L:d "));
3280 	assert (!getKeyAndValueFrom(key, value, " jd^P".dup));
3281 	assert (testGetKV("d", "k", "d :k#"));
3282 	assert (testGetKV("d/", "", "d/: "));
3283 	assert (testGetKV("d", "k", "d: k "));
3284 	assert (!getKeyAndValueFrom(key, value, " / #".dup));
3285 	assert (!getKeyAndValueFrom(key, value, ":/(#h".dup));
3286 	assert (!getKeyAndValueFrom(key, value, "d/ #P".dup));
3287 	assert (testGetKV("L", "dkh", "L dkh"));
3288 	assert (!getKeyAndValueFrom(key, value, "L/#^P".dup));
3289 	assert (!getKeyAndValueFrom(key, value, ":/(^h".dup));
3290 	assert (testGetKV("jd", "", " jd :"));
3291 	assert (testGetKV("d", "d^", "d d^ "));
3292 	assert (testGetKV("d/", "k", "d/:k#"));
3293 	assert (!getKeyAndValueFrom(key, value, " j(#h".dup));
3294 	assert (testGetKV("j", "kh", " j kh"));
3295 	assert (!getKeyAndValueFrom(key, value, " :(kh".dup));
3296 	assert (testGetKV("jd^", "", " jd^:"));
3297 	assert (!getKeyAndValueFrom(key, value, " j(k#".dup));
3298 	assert (testGetKV("d", "(kP", "d:(kP"));
3299 	assert (!getKeyAndValueFrom(key, value, " :d^h".dup));
3300 	assert (testGetKV("d", "d^P", "d d^P"));
3301 	assert (!getKeyAndValueFrom(key, value, "    #".dup));
3302 	assert (!getKeyAndValueFrom(key, value, ":/(#P".dup));
3303 	assert (testGetKV("d", "", "d : "));
3304 	assert (testGetKV("d", "kP", "d: kP"));
3305 	assert (testGetKV("d/d", "P", "d/d P"));
3306 	assert (testGetKV("Ljd", "", "Ljd: "));
3307 	assert (!getKeyAndValueFrom(key, value, "d/( ".dup));
3308 	assert (!getKeyAndValueFrom(key, value, " /d#P".dup));
3309 	assert (testGetKV("d/", "kh", "d/ kh"));
3310 	assert (!getKeyAndValueFrom(key, value, " /dk#".dup));
3311 	assert (!getKeyAndValueFrom(key, value, "Ljd^ ".dup));
3312 	assert (testGetKV("d", "kh", "d  kh"));
3313 	assert (testGetKV("d", "(kh", "d (kh"));
3314 	assert (testGetKV("d/(", "", "d/(:"));
3315 	assert (!getKeyAndValueFrom(key, value, "L #kh".dup));
3316 	assert (testGetKV("j(", "", " j(:"));
3317 	assert (testGetKV("d", "(k", "d:(k "));
3318 	assert (!getKeyAndValueFrom(key, value, " j(^".dup));
3319 	assert (!getKeyAndValueFrom(key, value, " j(#P".dup));
3320 	assert (!getKeyAndValueFrom(key, value, "d/(k#".dup));
3321 	assert (!getKeyAndValueFrom(key, value, "Lj #P".dup));
3322 	assert (testGetKV("d", "^h", "d: ^h"));
3323 	assert (testGetKV("jd", "P", " jd P"));
3324 	assert (testGetKV("d", "h", "d:  h"));
3325 	assert (testGetKV("d", "(", "d ( "));
3326 	assert (testGetKV("j", "", " j:#h"));
3327 	assert (testGetKV("j", "", " j :"));
3328 	assert (testGetKV("Ljd^", "", "Ljd^:"));
3329 	assert (testGetKV("Ljd", "", "Ljd :"));
3330 	assert (!getKeyAndValueFrom(key, value, ":/d^P".dup));
3331 	assert (!getKeyAndValueFrom(key, value, " :dkP".dup));
3332 	assert (!getKeyAndValueFrom(key, value, "Ljd^P".dup));
3333 	assert (testGetKV("d/", "", "d/ :"));
3334 	assert (testGetKV("L", "", "L:#^P"));
3335 	assert (!getKeyAndValueFrom(key, value, " :dk ".dup));
3336 	assert (testGetKV("Lj", "k", "Lj:k#"));
3337 	assert (!getKeyAndValueFrom(key, value, " :(#P".dup));
3338 	assert (testGetKV("Lj", "kh", "Lj kh"));
3339 	assert (!getKeyAndValueFrom(key, value, "d   #".dup));
3340 	assert (!getKeyAndValueFrom(key, value, "   :".dup));
3341 	assert (testGetKV("L", "d", "L:d#P"));
3342 	assert (!getKeyAndValueFrom(key, value, " /(k".dup));
3343 	assert (testGetKV("d", "", "d :#h"));
3344 	assert (testGetKV("d", "", "d  :"));
3345 	assert (!getKeyAndValueFrom(key, value, "  :#h".dup));
3346 	assert (testGetKV("L", "d", "L:d#h"));
3347 	assert (!getKeyAndValueFrom(key, value, "  d #".dup));
3348 	assert (!getKeyAndValueFrom(key, value, "  dk ".dup));
3349 	assert (testGetKV("L", "k", "L :k"));
3350 	assert (!getKeyAndValueFrom(key, value, ":  #P".dup));
3351 	assert (testGetKV("d/", "k", "d/ k#"));
3352 	assert (!getKeyAndValueFrom(key, value, "d/(#h".dup));
3353 	assert (!getKeyAndValueFrom(key, value, " /d^".dup));
3354 	assert (!getKeyAndValueFrom(key, value, "d/(#P".dup));
3355 	assert (!getKeyAndValueFrom(key, value, "L  #".dup));
3356 	assert (testGetKV("d", "kP", "d :kP"));
3357 	assert (testGetKV("d/", "", "d/:#P"));
3358 	assert (testGetKV("d", "k", "d :k "));
3359 	assert (testGetKV("d/", "kP", "d/:kP"));
3360 	assert (!getKeyAndValueFrom(key, value, "d/(^".dup));
3361 	assert (testGetKV("d/", "", "d/:#h"));
3362 	assert (testGetKV("Ljd", "P", "Ljd P"));
3363 	assert (!getKeyAndValueFrom(key, value, "   ^".dup));
3364 	assert (testGetKV("/d", "", " /d:"));
3365 	assert (!getKeyAndValueFrom(key, value, "L/dk#".dup));
3366 	assert (testGetKV("d", "", "d :#P"));
3367 	assert (testGetKV("d/", "k", "d/:k "));
3368 	assert (testGetKV("d", "k", "d  k#"));
3369 	assert (!getKeyAndValueFrom(key, value, " /(#".dup));
3370 	assert (testGetKV("d", "(k", "d (k#"));
3371 	assert (!getKeyAndValueFrom(key, value, "L/d ".dup));
3372 	assert (testGetKV("d/(k", "", "d/(k:"));
3373 	assert (!getKeyAndValueFrom(key, value, "  :^".dup));
3374 	assert (!getKeyAndValueFrom(key, value, "L/#^h".dup));
3375 	assert (testGetKV("Lj", "", "Lj: "));
3376 	assert (!getKeyAndValueFrom(key, value, ":j(^#".dup));
3377 	assert (testGetKV("j", "", " j:#P"));
3378 	assert (!getKeyAndValueFrom(key, value, " :(k#".dup));
3379 	assert (testGetKV("L/", "k", "L/:k"));
3380 	assert (!getKeyAndValueFrom(key, value, " :  ".dup));
3381 	assert (testGetKV("L", "", "L:#kP"));
3382 	assert (!getKeyAndValueFrom(key, value, "Lj( ".dup));
3383 	assert (!getKeyAndValueFrom(key, value, ":/ #h".dup));
3384 	assert (testGetKV("L", "(", "L:(#"));
3385 	assert (testGetKV("j", "k", " j:k "));
3386 	assert (testGetKV("j", "kP", " j:kP"));
3387 	assert (!getKeyAndValueFrom(key, value, " :(^h".dup));
3388 	assert (!getKeyAndValueFrom(key, value, " :(#h".dup));
3389 	assert (testGetKV("d/", "^", "d/ ^"));
3390 	assert (!getKeyAndValueFrom(key, value, ":/(^#".dup));
3391 	assert (!getKeyAndValueFrom(key, value, "d/(k ".dup));
3392 	assert (testGetKV("d", "^", "d  ^"));
3393 	assert (!getKeyAndValueFrom(key, value, " : #P".dup));
3394 	assert (testGetKV("j", "k", " j k#"));
3395 	assert (!getKeyAndValueFrom(key, value, "Lj(k#".dup));
3396 	assert (testGetKV("d", "(^", "d (^"));
3397 	assert (!getKeyAndValueFrom(key, value, ":   ".dup));
3398 	assert (testGetKV("L", "", "L:#^h"));
3399 	assert (!getKeyAndValueFrom(key, value, ":j(^P".dup));
3400 	assert (testGetKV("/", "", " /:#"));
3401 	assert (!getKeyAndValueFrom(key, value, "  (#h".dup));
3402 	assert (!getKeyAndValueFrom(key, value, ":/d #".dup));
3403 	assert (!getKeyAndValueFrom(key, value, "d/(kP".dup));
3404 	assert (!getKeyAndValueFrom(key, value, "Lj #h".dup));
3405 	assert (!getKeyAndValueFrom(key, value, "L/#kP".dup));
3406 	assert (testGetKV("L/d", "", "L/d:"));
3407 	assert (testGetKV("Lj(", "", "Lj(:"));
3408 	assert (testGetKV("d", "(", "d (#h"));
3409 	assert (!getKeyAndValueFrom(key, value, ":/(kP".dup));
3410 	assert (testGetKV("d", "(", "d (#P"));
3411 	assert (testGetKV("j", "^", " j ^"));
3412 	assert (testGetKV("d/", "k", "d/ k "));
3413 	assert (!getKeyAndValueFrom(key, value, " :d^#".dup));
3414 	assert (!getKeyAndValueFrom(key, value, ":/(k ".dup));
3415 	assert (!getKeyAndValueFrom(key, value, ":/d^#".dup));
3416 	assert (!getKeyAndValueFrom(key, value, "  :#P".dup));
3417 	assert (!getKeyAndValueFrom(key, value, "  :kP".dup));
3418 	assert (testGetKV("L", "dk", "L dk#"));
3419 	assert (testGetKV("d/", "^h", "d/:^h"));
3420 	assert (!getKeyAndValueFrom(key, value, ":/  ".dup));
3421 	assert (testGetKV("Lj", "", "Lj :"));
3422 	assert (testGetKV("d", "k", "d  k "));
3423 	assert (testGetKV("d/", "h", "d/: h"));
3424 	assert (!getKeyAndValueFrom(key, value, "Lj(^".dup));
3425 	assert (testGetKV("Lj", "k", "Lj k#"));
3426 	assert (testGetKV("d", "^", "d: ^#"));
3427 	assert (testGetKV("d", "h", "d : h"));
3428 	assert (!getKeyAndValueFrom(key, value, "L  #P".dup));
3429 	assert (testGetKV("d", "(k", "d (k "));
3430 	assert (!getKeyAndValueFrom(key, value, "  (#P".dup));
3431 	assert (!getKeyAndValueFrom(key, value, ":/ #P".dup));
3432 	assert (!getKeyAndValueFrom(key, value, "  ( ".dup));
3433 	assert (testGetKV("j", "h", " j: h"));
3434 	assert (!getKeyAndValueFrom(key, value, "  : ".dup));
3435 	assert (testGetKV("d", "^h", "d :^h"));
3436 	assert (testGetKV("d", "(^", "d:(^#"));
3437 	assert (!getKeyAndValueFrom(key, value, ":j( #".dup));
3438 	assert (testGetKV("d/(", "h", "d/(:h"));
3439 	assert (testGetKV("d/", "kP", "d/ kP"));
3440 	assert (testGetKV("L", "", "L:#kh"));
3441 	assert (!getKeyAndValueFrom(key, value, " / #P".dup));
3442 	assert (!getKeyAndValueFrom(key, value, "L/#kh".dup));
3443 	assert (testGetKV("d", "(", "d:( #"));
3444 	assert (testGetKV("d", "kP", "d  kP"));
3445 	assert (!getKeyAndValueFrom(key, value, "L/d#P".dup));
3446 	assert (!getKeyAndValueFrom(key, value, " j(k ".dup));
3447 	assert (testGetKV("Lj", "kP", "Lj:kP"));
3448 	assert (testGetKV("d", "(kP", "d (kP"));
3449 	assert (!getKeyAndValueFrom(key, value, " / #h".dup));
3450 	assert (!getKeyAndValueFrom(key, value, " :( ".dup));
3451 	assert (testGetKV("L", "dk", "L:dk "));
3452 	assert (testGetKV("d", "(^P", "d:(^P"));
3453 	assert (!getKeyAndValueFrom(key, value, "  dkP".dup));
3454 	assert (testGetKV("/", "k", " / k"));
3455 	assert (!getKeyAndValueFrom(key, value, ":j  #".dup));
3456 	assert (testGetKV("Lj", "k", "Lj:k "));
3457 	assert (testGetKV("j(k", "", " j(k:"));
3458 	assert (testGetKV("Lj", "", "Lj:#P"));
3459 	assert (testGetKV("d/", "h", "d/ :h"));
3460 	assert (!getKeyAndValueFrom(key, value, "Lj(#P".dup));
3461 	assert (!getKeyAndValueFrom(key, value, "  :kh".dup));
3462 	assert (testGetKV("d", "h", "d  :h"));
3463 	assert (!getKeyAndValueFrom(key, value, "Lj(#h".dup));
3464 	assert (!getKeyAndValueFrom(key, value, "d/  #".dup));
3465 	assert (testGetKV("d", "", "d:  #"));
3466 	assert (testGetKV("Lj", "^", "Lj ^"));
3467 	assert (!getKeyAndValueFrom(key, value, "L/ #".dup));
3468 	assert (!getKeyAndValueFrom(key, value, "L/d^".dup));
3469 	assert (!getKeyAndValueFrom(key, value, "     ".dup));
3470 	assert (testGetKV("L", "dkP", "L:dkP"));
3471 	assert (testGetKV("dk", "", "  dk:"));
3472 	assert (!getKeyAndValueFrom(key, value, " j  #".dup));
3473 	assert (!getKeyAndValueFrom(key, value, "L  #h".dup));
3474 	assert (testGetKV("j", "^h", " j:^h"));
3475 	assert (!getKeyAndValueFrom(key, value, ":  #h".dup));
3476 	assert (!getKeyAndValueFrom(key, value, "d    ".dup));
3477 	assert (!getKeyAndValueFrom(key, value, "   k#".dup));
3478 	assert (!getKeyAndValueFrom(key, value, "   kh".dup));
3479 	assert (testGetKV("Lj", "", "Lj:#h"));
3480 	assert (!getKeyAndValueFrom(key, value, "L   ".dup));
3481 	assert (!getKeyAndValueFrom(key, value, " :d #".dup));
3482 	assert (!getKeyAndValueFrom(key, value, " : #h".dup));
3483 	assert (!getKeyAndValueFrom(key, value, " /  ".dup));
3484 	assert (!getKeyAndValueFrom(key, value, "  :k#".dup));
3485 	assert (!getKeyAndValueFrom(key, value, "d ( h".dup));
3486 	assert (!getKeyAndValueFrom(key, value, "d/(^h".dup));
3487 	assert (testGetKV("d", "P", "d:  P"));
3488 	assert (testGetKV("d", "^P", "d: ^P"));
3489 	assert (testGetKV("L", "", "L: #"));
3490 	assert (testGetKV("d/", "^", "d/:^#"));
3491 	assert (!getKeyAndValueFrom(key, value, " :d^P".dup));
3492 	assert (!getKeyAndValueFrom(key, value, "L/(k".dup));
3493 	assert (testGetKV("d", "^", "d :^#"));
3494 	assert (testGetKV("L", "d", "L d "));
3495 	assert (!getKeyAndValueFrom(key, value, "Lj(k ".dup));
3496 	assert (!getKeyAndValueFrom(key, value, "   :#".dup));
3497 	assert (testGetKV("Lj(k", "", "Lj(k:"));
3498 	assert (testGetKV("d", "^", "d: ^ "));
3499 	assert (!getKeyAndValueFrom(key, value, "L/d#h".dup));
3500 	assert (!getKeyAndValueFrom(key, value, "  : #".dup));
3501 	assert (testGetKV("j", "k", " j k "));
3502 	assert (!getKeyAndValueFrom(key, value, ":/(^P".dup));
3503 	assert (!getKeyAndValueFrom(key, value, " j(kP".dup));
3504 	assert (testGetKV("L", "d^h", "L:d^h"));
3505 	assert (!getKeyAndValueFrom(key, value, " /dk ".dup));
3506 	assert (!getKeyAndValueFrom(key, value, "d/( #".dup));
3507 	assert (testGetKV("d", "(^", "d:(^ "));
3508 	assert (testGetKV("d", "(", "d:(  "));
3509 	assert (testGetKV("Lj", "h", "Lj: h"));
3510 	assert (testGetKV("d/", "", "d/: #"));
3511 	assert (testGetKV("d", "(^h", "d (^h"));
3512 	assert (!getKeyAndValueFrom(key, value, ":j(^ ".dup));
3513 	assert (testGetKV("d", "", "d : #"));
3514 	assert (testGetKV("Lj", "^h", "Lj:^h"));
3515 	assert (testGetKV("d/(", "h", "d/( h"));
3516 	assert (!getKeyAndValueFrom(key, value, "  :^#".dup));
3517 	assert (testGetKV("d", "h", "d   h"));
3518 	assert (testGetKV("d/(", "", "d/(:#"));
3519 	assert (!getKeyAndValueFrom(key, value, " :(^#".dup));
3520 	assert (testGetKV("d", "^h", "d  ^h"));
3521 	assert (testGetKV("d/", "h", "d/  h"));
3522 	assert (testGetKV("d/", "^h", "d/ ^h"));
3523 	assert (!getKeyAndValueFrom(key, value, " :(k ".dup));
3524 	assert (!getKeyAndValueFrom(key, value, ":j(  ".dup));
3525 	assert (!getKeyAndValueFrom(key, value, "  :^h".dup));
3526 	assert (!getKeyAndValueFrom(key, value, ":/( #".dup));
3527 	assert (testGetKV("j", "kP", " j kP"));
3528 	assert (!getKeyAndValueFrom(key, value, "d/   ".dup));
3529 	assert (testGetKV("d/", "", "d/ :#"));
3530 	assert (!getKeyAndValueFrom(key, value, ":/d  ".dup));
3531 	assert (testGetKV("d", "(", "d ( #"));
3532 	assert (testGetKV("d/", "P", "d/: P"));
3533 	assert (!getKeyAndValueFrom(key, value, "Lj(kP".dup));
3534 	assert (!getKeyAndValueFrom(key, value, "L/(#".dup));
3535 	assert (testGetKV("d/", "^P", "d/:^P"));
3536 	assert (testGetKV("L/", "", "L/:#"));
3537 	assert (!getKeyAndValueFrom(key, value, "   :h".dup));
3538 	assert (testGetKV("L", "d^", "L d^"));
3539 	assert (testGetKV("d", "", "d  :#"));
3540 	assert (!getKeyAndValueFrom(key, value, "  d  ".dup));
3541 	assert (testGetKV("j", "^", " j:^#"));
3542 	assert (!getKeyAndValueFrom(key, value, " j   ".dup));
3543 	assert (testGetKV("Lj", "k", "Lj k "));
3544 	assert (testGetKV("j", "h", " j :h"));
3545 	assert (testGetKV("/dk", "", " /dk:"));
3546 	assert (testGetKV("d", "^P", "d :^P"));
3547 	assert (testGetKV("j(", "h", " j(:h"));
3548 	assert (!getKeyAndValueFrom(key, value, "d/(^#".dup));
3549 	assert (testGetKV("d", "P", "d : P"));
3550 	assert (testGetKV("d", "", "d:   "));
3551 	assert (testGetKV("L", "^", "L: ^"));
3552 	assert (!getKeyAndValueFrom(key, value, "  :^P".dup));
3553 	assert (!getKeyAndValueFrom(key, value, ":/d^ ".dup));
3554 	assert (testGetKV("/", "^", " /:^"));
3555 	assert (testGetKV("d", "^", "d :^ "));
3556 	assert (!getKeyAndValueFrom(key, value, "  :k ".dup));
3557 	assert (!getKeyAndValueFrom(key, value, " /(#P".dup));
3558 	assert (!getKeyAndValueFrom(key, value, " /dkP".dup));
3559 	assert (testGetKV("L/dk", "", "L/dk:"));
3560 	assert (testGetKV("d/", "^", "d/:^ "));
3561 	assert (testGetKV("Lj", "kP", "Lj kP"));
3562 	assert (!getKeyAndValueFrom(key, value, "L/dk ".dup));
3563 	assert (testGetKV("d/(", "P", "d/(:P"));
3564 	assert (!getKeyAndValueFrom(key, value, ":/(  ".dup));
3565 	assert (!getKeyAndValueFrom(key, value, "L/  ".dup));
3566 	assert (testGetKV("d/", "^", "d/ ^#"));
3567 	assert (!getKeyAndValueFrom(key, value, " j( #".dup));
3568 	assert (testGetKV("d", "^", "d  ^#"));
3569 	assert (!getKeyAndValueFrom(key, value, "  ( #".dup));
3570 	assert (testGetKV("d", "(^", "d (^#"));
3571 	assert (!getKeyAndValueFrom(key, value, "L/ #h".dup));
3572 	assert (!getKeyAndValueFrom(key, value, " :( #".dup));
3573 	assert (!getKeyAndValueFrom(key, value, "Lj  #".dup));
3574 	assert (testGetKV("Lj", "^", "Lj:^#"));
3575 	assert (testGetKV("Lj(", "h", "Lj(:h"));
3576 	assert (!getKeyAndValueFrom(key, value, " :(^P".dup));
3577 	assert (!getKeyAndValueFrom(key, value, "d/(  ".dup));
3578 	assert (testGetKV("d", "P", "d  :P"));
3579 	assert (testGetKV("d/", "P", "d/ :P"));
3580 	assert (!getKeyAndValueFrom(key, value, " :(kP".dup));
3581 	assert (!getKeyAndValueFrom(key, value, "L/ #P".dup));
3582 	assert (testGetKV("j", "", " j: #"));
3583 	assert (testGetKV("L", "", "L :#"));
3584 	assert (testGetKV("d", "h", "  d:h"));
3585 	assert (testGetKV("d/(^", "", "d/(^:"));
3586 	assert (testGetKV("d/", "", "d/:  "));
3587 	assert (testGetKV("d/(", "", "d/(: "));
3588 	assert (testGetKV("(", "", "  (:"));
3589 	assert (testGetKV("d", "", "d :  "));
3590 	assert (!getKeyAndValueFrom(key, value, "    h".dup));
3591 	assert (!getKeyAndValueFrom(key, value, "   k ".dup));
3592 	assert (testGetKV("L/", "k", "L/ k"));
3593 	assert (testGetKV("Lj", "h", "Lj :h"));
3594 	assert (testGetKV("/", "", " /:#h"));
3595 	assert (testGetKV("d/(", "", "d/( :"));
3596 	assert (!getKeyAndValueFrom(key, value, "    :".dup));
3597 	assert (!getKeyAndValueFrom(key, value, " :  #".dup));
3598 	assert (!getKeyAndValueFrom(key, value, " j(^h".dup));
3599 	assert (!getKeyAndValueFrom(key, value, " :d  ".dup));
3600 	assert (!getKeyAndValueFrom(key, value, "    P".dup));
3601 	assert (!getKeyAndValueFrom(key, value, " /( ".dup));
3602 	assert (testGetKV("L", "(^", "L:(^"));
3603 	assert (testGetKV("d", "(", "d (  "));
3604 	assert (!getKeyAndValueFrom(key, value, " /(#h".dup));
3605 	assert (testGetKV("d/", "", "d/ : "));
3606 	assert (testGetKV("d", "", "d   :"));
3607 	assert (!getKeyAndValueFrom(key, value, " :d^ ".dup));
3608 	assert (!getKeyAndValueFrom(key, value, "  :^ ".dup));
3609 	assert (testGetKV("d", "", "d  : "));
3610 	assert (testGetKV("L", "d", "L d#P"));
3611 	assert (testGetKV("d/", "", "d/  :"));
3612 	assert (!getKeyAndValueFrom(key, value, "  (k#".dup));
3613 	assert (testGetKV("/", "", " /:#P"));
3614 	assert (!getKeyAndValueFrom(key, value, "L/dkP".dup));
3615 	assert (!getKeyAndValueFrom(key, value, ":j   ".dup));
3616 	assert (!getKeyAndValueFrom(key, value, " :(^ ".dup));
3617 	assert (!getKeyAndValueFrom(key, value, "d/(^ ".dup));
3618 	assert (!getKeyAndValueFrom(key, value, "  (^".dup));
3619 	assert (testGetKV("L", "", "L: #P"));
3620 	assert (!getKeyAndValueFrom(key, value, " /  #".dup));
3621 	assert (testGetKV("L", "", "L: #h"));
3622 	assert (testGetKV("L", "k", "L  k"));
3623 	assert (!getKeyAndValueFrom(key, value, "   :P".dup));
3624 	assert (testGetKV("L", "(", "L:(#P"));
3625 	assert (!getKeyAndValueFrom(key, value, "d ( P".dup));
3626 	assert (!getKeyAndValueFrom(key, value, "d/(^P".dup));
3627 	assert (testGetKV("d/", "^", "d/ ^ "));
3628 	assert (!getKeyAndValueFrom(key, value, ":/(^ ".dup));
3629 	assert (testGetKV("L", "dk", "L dk "));
3630 	assert (testGetKV("j", "^P", " j:^P"));
3631 	assert (testGetKV("d", "^", "d  ^ "));
3632 	assert (testGetKV("L", "d", "L d#h"));
3633 	assert (!getKeyAndValueFrom(key, value, "  :  ".dup));
3634 	assert (testGetKV("L", "(", "L:( "));
3635 	assert (!getKeyAndValueFrom(key, value, "Lj(^h".dup));
3636 	assert (testGetKV("d", "(^", "d (^ "));
3637 	assert (!getKeyAndValueFrom(key, value, ":   #".dup));
3638 	assert (testGetKV("j", "P", " j: P"));
3639 	assert (!getKeyAndValueFrom(key, value, "  d^#".dup));
3640 	assert (!getKeyAndValueFrom(key, value, "   ^#".dup));
3641 	assert (!getKeyAndValueFrom(key, value, ":/  #".dup));
3642 	assert (testGetKV("L", "(k", "L (k"));
3643 	assert (testGetKV("Lj", "", "Lj: #"));
3644 	assert (!getKeyAndValueFrom(key, value, "Lj( #".dup));
3645 	assert (!getKeyAndValueFrom(key, value, " /d #".dup));
3646 	assert (testGetKV("d", "(^P", "d (^P"));
3647 	assert (testGetKV("L", "(kh", "L:(kh"));
3648 	assert (testGetKV("d/(", "P", "d/( P"));
3649 	assert (testGetKV("d", "P", "d   P"));
3650 	assert (testGetKV("j", "^", " j:^ "));
3651 	assert (testGetKV("d", "^P", "d  ^P"));
3652 	assert (!getKeyAndValueFrom(key, value, " j(^#".dup));
3653 	assert (testGetKV("d/", "P", "d/  P"));
3654 	assert (testGetKV("j(", "", " j(:#"));
3655 	assert (testGetKV("j", "", " j :#"));
3656 	assert (testGetKV("d/", "^P", "d/ ^P"));
3657 	assert (testGetKV("L", "kh", "L: kh"));
3658 	assert (testGetKV("/", "kh", " /:kh"));
3659 	assert (testGetKV("j(", "h", " j( h"));
3660 	assert (!getKeyAndValueFrom(key, value, " j(  ".dup));
3661 	assert (testGetKV("L", "dkP", "L dkP"));
3662 	assert (testGetKV("L", "(", "L:(#h"));
3663 	assert (testGetKV("L/d", "h", "L/d:h"));
3664 	assert (testGetKV("L", "", "L:  "));
3665 	assert (!getKeyAndValueFrom(key, value, " :(  ".dup));
3666 	assert (testGetKV("L/", "^", "L/:^"));
3667 	assert (testGetKV("j", "", " j:  "));
3668 	assert (!getKeyAndValueFrom(key, value, "  (kh".dup));
3669 	assert (testGetKV("j", "h", " j  h"));
3670 	assert (testGetKV("d", "", "  d:#"));
3671 	assert (testGetKV("L", "d^", "L:d^#"));
3672 	assert (!getKeyAndValueFrom(key, value, "  d^h".dup));
3673 	assert (testGetKV("j", "^h", " j ^h"));
3674 	assert (testGetKV("Lj", "P", "Lj: P"));
3675 	assert (!getKeyAndValueFrom(key, value, "  (  ".dup));
3676 	assert (testGetKV("/", "k", " /:k#"));
3677 	assert (!getKeyAndValueFrom(key, value, "L/(#h".dup));
3678 	assert (testGetKV("Lj(", "h", "Lj( h"));
3679 	assert (testGetKV("L", "k", "L: k#"));
3680 	assert (testGetKV("L", "(", "L (#"));
3681 	assert (testGetKV("/", "", " /: "));
3682 	assert (!getKeyAndValueFrom(key, value, "  (^#".dup));
3683 	assert (testGetKV("Lj(", "", "Lj(:#"));
3684 	assert (testGetKV("L", "d", "L:d #"));
3685 	assert (testGetKV("/d", "h", " /d:h"));
3686 	assert (testGetKV("Lj", "", "Lj :#"));
3687 	assert (testGetKV("Lj", "h", "Lj  h"));
3688 	assert (testGetKV("Lj", "^h", "Lj ^h"));
3689 	assert (testGetKV("Lj", "^P", "Lj:^P"));
3690 	assert (!getKeyAndValueFrom(key, value, ":    ".dup));
3691 	assert (!getKeyAndValueFrom(key, value, "Lj(^#".dup));
3692 	assert (!getKeyAndValueFrom(key, value, "Lj   ".dup));
3693 	assert (!getKeyAndValueFrom(key, value, "  d^ ".dup));
3694 	assert (testGetKV("j", "^", " j ^#"));
3695 	assert (testGetKV("j(", "P", " j(:P"));
3696 	assert (testGetKV("Lj", "^", "Lj:^ "));
3697 	assert (!getKeyAndValueFrom(key, value, " :   ".dup));
3698 	assert (!getKeyAndValueFrom(key, value, "   ^ ".dup));
3699 	assert (testGetKV("L", "d^P", "L:d^P"));
3700 	assert (!getKeyAndValueFrom(key, value, "L/(#P".dup));
3701 	assert (!getKeyAndValueFrom(key, value, "   kP".dup));
3702 	assert (testGetKV("j", "P", " j :P"));
3703 	assert (!getKeyAndValueFrom(key, value, ":/   ".dup));
3704 	assert (testGetKV("/(", "", " /(:"));
3705 	assert (!getKeyAndValueFrom(key, value, " /(^".dup));
3706 	assert (testGetKV("Lj", "^", "Lj ^#"));
3707 	assert (testGetKV("L", "^", "L :^"));
3708 	assert (testGetKV("L", "kh", "L :kh"));
3709 	assert (!getKeyAndValueFrom(key, value, "   : ".dup));
3710 	assert (!getKeyAndValueFrom(key, value, " j(^ ".dup));
3711 	assert (testGetKV("L", "(^h", "L:(^h"));
3712 	assert (!getKeyAndValueFrom(key, value, " /d^#".dup));
3713 	assert (testGetKV("Lj(", "P", "Lj(:P"));
3714 	assert (testGetKV("L", "(k", "L:(k#"));
3715 	assert (!getKeyAndValueFrom(key, value, "L d h".dup));
3716 	assert (!getKeyAndValueFrom(key, value, " /( #".dup));
3717 	assert (testGetKV("/d", "", " /d:#"));
3718 	assert (!getKeyAndValueFrom(key, value, "Lj(  ".dup));
3719 	assert (testGetKV("Lj", "P", "Lj :P"));
3720 	assert (!getKeyAndValueFrom(key, value, " /(k#".dup));
3721 	assert (testGetKV("Lj", "", "Lj:  "));
3722 	assert (testGetKV("j", "", " j : "));
3723 	assert (testGetKV("/", "", " / :"));
3724 	assert (testGetKV("j(", "", " j(: "));
3725 	assert (!getKeyAndValueFrom(key, value, "  (k ".dup));
3726 	assert (!getKeyAndValueFrom(key, value, " /   ".dup));
3727 	assert (testGetKV("L", "", "L :#P"));
3728 	assert (!getKeyAndValueFrom(key, value, " /(kh".dup));
3729 	assert (!getKeyAndValueFrom(key, value, " /d^h".dup));
3730 	assert (testGetKV("d", "P", "  d:P"));
3731 	assert (testGetKV("j(^", "", " j(^:"));
3732 	assert (!getKeyAndValueFrom(key, value, "L   #".dup));
3733 	assert (testGetKV("L/", "", "L/:#h"));
3734 	assert (!getKeyAndValueFrom(key, value, "L/d #".dup));
3735 	assert (!getKeyAndValueFrom(key, value, "   ^h".dup));
3736 	assert (!getKeyAndValueFrom(key, value, "L/d^h".dup));
3737 	assert (testGetKV("d", "h", "  d h"));
3738 	assert (testGetKV("L/", "", "L/:#P"));
3739 	assert (testGetKV("/", "^", " /:^#"));
3740 	assert (testGetKV("Lj(^", "", "Lj(^:"));
3741 	assert (testGetKV("L/", "kh", "L/:kh"));
3742 	assert (testGetKV("L/(", "", "L/(:"));
3743 	assert (testGetKV("L/", "", "L/: "));
3744 	assert (testGetKV("L", "", "L : "));
3745 	assert (testGetKV("L/d", "", "L/d:#"));
3746 	assert (testGetKV("Lj(", "", "Lj(: "));
3747 	assert (testGetKV("Lj", "", "Lj : "));
3748 	assert (!getKeyAndValueFrom(key, value, "Lj(^ ".dup));
3749 	assert (testGetKV("j", "^", " j ^ "));
3750 	assert (testGetKV("L", "h", "L:  h"));
3751 	assert (testGetKV("L", "", "L :#h"));
3752 	assert (!getKeyAndValueFrom(key, value, "   ^P".dup));
3753 	assert (testGetKV("(", "", "  (:#"));
3754 	assert (testGetKV("j(", "", " j( :"));
3755 	assert (testGetKV("j", "", " j  :"));
3756 	assert (testGetKV("d", "", "  d: "));
3757 	assert (!getKeyAndValueFrom(key, value, "L/( ".dup));
3758 	assert (!getKeyAndValueFrom(key, value, "L    ".dup));
3759 	assert (testGetKV("k", "", "   k:"));
3760 	assert (!getKeyAndValueFrom(key, value, " j(^P".dup));
3761 	assert (testGetKV("L", "^h", "L: ^h"));
3762 	assert (!getKeyAndValueFrom(key, value, " /d  ".dup));
3763 	assert (testGetKV("L", "^", "L: ^#"));
3764 	assert (testGetKV("L/", "", "L/ :"));
3765 	assert (testGetKV("/", "k", " /:k "));
3766 	assert (!getKeyAndValueFrom(key, value, "L/d^#".dup));
3767 	assert (testGetKV("L", "(^", "L:(^#"));
3768 	assert (testGetKV("Lj(", "", "Lj( :"));
3769 	assert (!getKeyAndValueFrom(key, value, "L/  #".dup));
3770 	assert (testGetKV("L", "k", "L :k#"));
3771 	assert (testGetKV("/", "kP", " /:kP"));
3772 	assert (testGetKV("/", "^h", " /:^h"));
3773 	assert (testGetKV("Lj", "", "Lj  :"));
3774 	assert (testGetKV("/", "h", " /: h"));
3775 	assert (!getKeyAndValueFrom(key, value, "  (^ ".dup));
3776 	assert (testGetKV("Lj", "^", "Lj ^ "));
3777 	assert (testGetKV("L", "d", "L:d  "));
3778 	assert (testGetKV("/d", "h", " /d h"));
3779 	assert (testGetKV("/", "", " /: #"));
3780 	assert (testGetKV("j(", "P", " j( P"));
3781 	assert (testGetKV("L", "d^", "L:d^ "));
3782 	assert (!getKeyAndValueFrom(key, value, "Lj(^P".dup));
3783 	assert (testGetKV("j", "P", " j  P"));
3784 	assert (testGetKV("L/", "k", "L/:k#"));
3785 	assert (!getKeyAndValueFrom(key, value, "  d^P".dup));
3786 	assert (testGetKV("(", "h", "  (:h"));
3787 	assert (testGetKV("L/d", "P", "L/d:P"));
3788 	assert (testGetKV("L", "", "L  :"));
3789 	assert (testGetKV("j", "^P", " j ^P"));
3790 	assert (testGetKV("L", "kP", "L: kP"));
3791 	assert (testGetKV("L", "d^h", "L d^h"));
3792 	assert (testGetKV("L", "(", "L:( #"));
3793 	assert (testGetKV("L", "", "L:  #"));
3794 	assert (testGetKV("L/", "^", "L/:^#"));
3795 	assert (testGetKV("Lj(", "P", "Lj( P"));
3796 	assert (testGetKV("Lj", "P", "Lj  P"));
3797 	assert (!getKeyAndValueFrom(key, value, "L/(^".dup));
3798 	assert (testGetKV("Lj", "^P", "Lj ^P"));
3799 	assert (testGetKV("L/d", "h", "L/d h"));
3800 	assert (testGetKV("L", "(k", "L:(k "));
3801 	assert (testGetKV("/", "kh", " / kh"));
3802 	assert (testGetKV("L", "d", "L d #"));
3803 	assert (!getKeyAndValueFrom(key, value, "  (kP".dup));
3804 	assert (testGetKV("d^", "", "  d^:"));
3805 	assert (!getKeyAndValueFrom(key, value, "L/(k#".dup));
3806 	assert (!getKeyAndValueFrom(key, value, "L/(kh".dup));
3807 	assert (!getKeyAndValueFrom(key, value, " /(^#".dup));
3808 	assert (testGetKV("L", "(kP", "L:(kP"));
3809 	assert (testGetKV("/d", "P", " /d:P"));
3810 	assert (testGetKV("/", "^", " / ^"));
3811 	assert (testGetKV("d", "", "  d :"));
3812 	assert (testGetKV("L", "k", "L: k "));
3813 	assert (testGetKV("L", "(^P", "L:(^P"));
3814 	assert (!getKeyAndValueFrom(key, value, " /(k ".dup));
3815 	assert (testGetKV("L", "d^", "L d^#"));
3816 	assert (testGetKV("L", "P", "L:  P"));
3817 	assert (!getKeyAndValueFrom(key, value, "  (^h".dup));
3818 	assert (!getKeyAndValueFrom(key, value, " /d^ ".dup));
3819 	assert (testGetKV("/d", "", " /d: "));
3820 	assert (testGetKV("L/d", "", "L/d: "));
3821 	assert (!getKeyAndValueFrom(key, value, "L/d  ".dup));
3822 	assert (!getKeyAndValueFrom(key, value, " /(  ".dup));
3823 	assert (testGetKV("(", "", "  (: "));
3824 	assert (testGetKV("(", "P", "  (:P"));
3825 	assert (testGetKV("L/(", "", "L/(:#"));
3826 	assert (testGetKV("^", "", "   ^:"));
3827 	assert (testGetKV("L/", "^h", "L/:^h"));
3828 	assert (testGetKV("L/d", "", "L/d :"));
3829 	assert (!getKeyAndValueFrom(key, value, "L/( #".dup));
3830 	assert (testGetKV("L", "^", "L :^#"));
3831 	assert (testGetKV("(k", "", "  (k:"));
3832 	assert (testGetKV("L/d^", "", "L/d^:"));
3833 	assert (testGetKV("/d^", "", " /d^:"));
3834 	assert (testGetKV("L", "", "L : #"));
3835 	assert (testGetKV("/d", "", " /d :"));
3836 	assert (testGetKV("/", "^P", " /:^P"));
3837 	assert (testGetKV("/", "^", " /:^ "));
3838 	assert (testGetKV("d", "P", "  d P"));
3839 	assert (testGetKV("/(", "", " /(:#"));
3840 	assert (testGetKV("L", "^", "L: ^ "));
3841 	assert (testGetKV("L/", "kP", "L/:kP"));
3842 	assert (testGetKV("L", "(", "L ( "));
3843 	assert (testGetKV("L/", "", "L/: #"));
3844 	assert (!getKeyAndValueFrom(key, value, " /d^P".dup));
3845 	assert (testGetKV("/", "k", " / k#"));
3846 	assert (testGetKV("/(", "h", " /(:h"));
3847 	assert (testGetKV("L", "(", "L (#h"));
3848 	assert (testGetKV("L", "(", "L (#P"));
3849 	assert (!getKeyAndValueFrom(key, value, "L/d^ ".dup));
3850 	assert (testGetKV("/", "", " /:  "));
3851 	assert (testGetKV("/(k", "", " /(k:"));
3852 	assert (!getKeyAndValueFrom(key, value, "L d P".dup));
3853 	assert (testGetKV("(", "", "  ( :"));
3854 	assert (testGetKV("/d", "P", " /d P"));
3855 	assert (testGetKV("L/", "h", "L/: h"));
3856 	assert (testGetKV("L/", "kh", "L/ kh"));
3857 	assert (testGetKV("L", "h", "L : h"));
3858 	assert (!getKeyAndValueFrom(key, value, "L/d^P".dup));
3859 	assert (testGetKV("L", "^P", "L: ^P"));
3860 	assert (testGetKV("(^", "", "  (^:"));
3861 	assert (testGetKV("/", "", " / :#"));
3862 	assert (testGetKV("L", "kP", "L :kP"));
3863 	assert (testGetKV("L", "d", "L d  "));
3864 	assert (testGetKV("L", "^h", "L :^h"));
3865 	assert (testGetKV("/(", "P", " /(:P"));
3866 	assert (testGetKV("L", "P", "L : P"));
3867 	assert (testGetKV("/", "h", " / :h"));
3868 	assert (testGetKV("L", "", "L:   "));
3869 	assert (testGetKV("/(", "", " /(: "));
3870 	assert (testGetKV("L/", "^", "L/ ^"));
3871 	assert (testGetKV("/", "P", " /: P"));
3872 	assert (testGetKV("L/", "k", "L/:k "));
3873 	assert (testGetKV("L", "d^", "L d^ "));
3874 	assert (testGetKV("L", "kh", "L  kh"));
3875 	assert (testGetKV("/", "P", " / :P"));
3876 	assert (!getKeyAndValueFrom(key, value, " /(^ ".dup));
3877 	assert (!getKeyAndValueFrom(key, value, "L/   ".dup));
3878 	assert (!getKeyAndValueFrom(key, value, "  (^P".dup));
3879 	assert (testGetKV("L/(", "h", "L/(:h"));
3880 	assert (testGetKV("L/", "h", "L/ :h"));
3881 	assert (testGetKV("L", "d^P", "L d^P"));
3882 	assert (testGetKV("L/d", "P", "L/d P"));
3883 	assert (testGetKV("L", "(kh", "L (kh"));
3884 	assert (testGetKV("L/", "^", "L/:^ "));
3885 	assert (testGetKV("L/", "", "L/ :#"));
3886 	assert (testGetKV("L", "^", "L  ^"));
3887 	assert (testGetKV("L/(", "P", "L/(:P"));
3888 	assert (testGetKV("/", "", " / : "));
3889 	assert (testGetKV("L", "(", "L:(  "));
3890 	assert (testGetKV("L/", "^P", "L/:^P"));
3891 	assert (testGetKV("L", "(^", "L (^"));
3892 	assert (!getKeyAndValueFrom(key, value, " /(kP".dup));
3893 	assert (testGetKV("/(^", "", " /(^:"));
3894 	assert (!getKeyAndValueFrom(key, value, "L/(^#".dup));
3895 	assert (testGetKV("L/(k", "", "L/(k:"));
3896 	assert (testGetKV("L", "(^", "L:(^ "));
3897 	assert (testGetKV("L/", "k", "L/ k#"));
3898 	assert (testGetKV("L", "k", "L :k "));
3899 	assert (testGetKV("L/", "P", "L/: P"));
3900 	assert (testGetKV("L", "h", "L  :h"));
3901 	assert (testGetKV("L/", "P", "L/ :P"));
3902 	assert (!getKeyAndValueFrom(key, value, " /(^h".dup));
3903 	assert (!getKeyAndValueFrom(key, value, "L/(k ".dup));
3904 	assert (testGetKV("L", "^P", "L :^P"));
3905 	assert (testGetKV("L", "k", "L  k#"));
3906 	assert (testGetKV("L", "", "L  :#"));
3907 	assert (testGetKV("L", "(k", "L (k#"));
3908 	assert (testGetKV("/(", "", " /( :"));
3909 	assert (testGetKV("L/(", "", "L/( :"));
3910 	assert (testGetKV("(", "h", "  ( h"));
3911 	assert (testGetKV("/", "k", " / k "));
3912 	assert (testGetKV("/", "", " /  :"));
3913 	assert (testGetKV("L/", "", "L/ : "));
3914 	assert (testGetKV("L", "^", "L :^ "));
3915 	assert (testGetKV("L", "P", "L  :P"));
3916 	assert (testGetKV("L/", "", "L/:  "));
3917 	assert (!getKeyAndValueFrom(key, value, "L/(kP".dup));
3918 	assert (testGetKV("L/(^", "", "L/(^:"));
3919 	assert (testGetKV("/", "kP", " / kP"));
3920 	assert (testGetKV("/", "^", " / ^#"));
3921 	assert (testGetKV("L/(", "", "L/(: "));
3922 	assert (!getKeyAndValueFrom(key, value, "L/(^h".dup));
3923 	assert (!getKeyAndValueFrom(key, value, "L ( h".dup));
3924 	assert (testGetKV("L", "", "L  : "));
3925 	assert (testGetKV("L", "", "L :  "));
3926 	assert (!getKeyAndValueFrom(key, value, "L/(  ".dup));
3927 	assert (!getKeyAndValueFrom(key, value, " /(^P".dup));
3928 	assert (testGetKV("L", "", "L   :"));
3929 	assert (testGetKV("L/", "k", "L/ k "));
3930 	assert (testGetKV("L", "(", "L ( #"));
3931 	assert (testGetKV("L/", "", "L/  :"));
3932 	assert (testGetKV("L/", "kP", "L/ kP"));
3933 	assert (!getKeyAndValueFrom(key, value, "L/(^ ".dup));
3934 	assert (testGetKV("L", "(k", "L (k "));
3935 	assert (testGetKV("L", "k", "L  k "));
3936 	assert (testGetKV("/(", "h", " /( h"));
3937 	assert (testGetKV("L", "(kP", "L (kP"));
3938 	assert (testGetKV("L", "kP", "L  kP"));
3939 	assert (!getKeyAndValueFrom(key, value, "L/(^P".dup));
3940 	assert (testGetKV("/", "h", " /  h"));
3941 	assert (testGetKV("(", "P", "  ( P"));
3942 	assert (!getKeyAndValueFrom(key, value, "L ( P".dup));
3943 	assert (testGetKV("/", "^h", " / ^h"));
3944 	assert (testGetKV("L/", "^", "L/ ^#"));
3945 	assert (testGetKV("L", "^", "L  ^#"));
3946 	assert (testGetKV("/", "^", " / ^ "));
3947 	assert (testGetKV("L", "(^", "L (^#"));
3948 	assert (testGetKV("L", "(^h", "L (^h"));
3949 	assert (testGetKV("L/(", "h", "L/( h"));
3950 	assert (testGetKV("L", "h", "L   h"));
3951 	assert (testGetKV("L", "^h", "L  ^h"));
3952 	assert (testGetKV("L/", "h", "L/  h"));
3953 	assert (testGetKV("L/", "^h", "L/ ^h"));
3954 	assert (testGetKV("/", "P", " /  P"));
3955 	assert (testGetKV("L", "(", "L (  "));
3956 	assert (testGetKV("/(", "P", " /( P"));
3957 	assert (testGetKV("/", "^P", " / ^P"));
3958 	assert (testGetKV("L/", "^", "L/ ^ "));
3959 	assert (testGetKV("L", "P", "L   P"));
3960 	assert (testGetKV("L", "^", "L  ^ "));
3961 	assert (testGetKV("L", "(^", "L (^ "));
3962 	assert (testGetKV("L", "^P", "L  ^P"));
3963 	assert (testGetKV("L/", "P", "L/  P"));
3964 	assert (testGetKV("L", "(^P", "L (^P"));
3965 	assert (testGetKV("L/(", "P", "L/( P"));
3966 	assert (testGetKV("L/", "^P", "L/ ^P"));
3967 }
3968 
3969 unittest
3970 {
3971 	assert (GetPathParamsQuery("") == "/");
3972 	assert (GetPathParamsQuery(":") == "/");
3973 	assert (GetPathParamsQuery("::") == "/");
3974 	assert (GetPathParamsQuery(":::") == "/");
3975 	assert (GetPathParamsQuery("::::") == "/");
3976 	assert (GetPathParamsQuery(":::/") == "/");
3977 	assert (GetPathParamsQuery(":::?") == "/?");
3978 	assert (GetPathParamsQuery(":::;") == "/;");
3979 	assert (GetPathParamsQuery(":::#") == "/");
3980 	assert (GetPathParamsQuery(":::a") == "/");
3981 	assert (GetPathParamsQuery("::/") == "/");
3982 	assert (GetPathParamsQuery("::/:") == "/:");
3983 	assert (GetPathParamsQuery(":://") == "/");
3984 	assert (GetPathParamsQuery("::/?") == "/?");
3985 	assert (GetPathParamsQuery("::/;") == "/;");
3986 	assert (GetPathParamsQuery("::/#") == "/");
3987 	assert (GetPathParamsQuery("::/a") == "/a");
3988 	assert (GetPathParamsQuery("::?") == "/?");
3989 	assert (GetPathParamsQuery("::?:") == "/?:");
3990 	assert (GetPathParamsQuery("::?/") == "/?/");
3991 	assert (GetPathParamsQuery("::??") == "/??");
3992 	assert (GetPathParamsQuery("::?;") == "/?;");
3993 	assert (GetPathParamsQuery("::?#") == "/?");
3994 	assert (GetPathParamsQuery("::?a") == "/?a");
3995 	assert (GetPathParamsQuery("::;") == "/;");
3996 	assert (GetPathParamsQuery("::;:") == "/;:");
3997 	assert (GetPathParamsQuery("::;/") == "/;/");
3998 	assert (GetPathParamsQuery("::;?") == "/;?");
3999 	assert (GetPathParamsQuery("::;;") == "/;;");
4000 	assert (GetPathParamsQuery("::;#") == "/;");
4001 	assert (GetPathParamsQuery("::;a") == "/;a");
4002 	assert (GetPathParamsQuery("::#") == "/");
4003 	assert (GetPathParamsQuery("::#:") == "/");
4004 	assert (GetPathParamsQuery("::#/") == "/");
4005 	assert (GetPathParamsQuery("::#?") == "/");
4006 	assert (GetPathParamsQuery("::#;") == "/");
4007 	assert (GetPathParamsQuery("::##") == "/");
4008 	assert (GetPathParamsQuery("::#a") == "/");
4009 	assert (GetPathParamsQuery("::a") == "/");
4010 	assert (GetPathParamsQuery("::a:") == "/");
4011 	assert (GetPathParamsQuery("::a/") == "/");
4012 	assert (GetPathParamsQuery("::a?") == "/?");
4013 	assert (GetPathParamsQuery("::a;") == "/;");
4014 	assert (GetPathParamsQuery("::a#") == "/");
4015 	assert (GetPathParamsQuery("::aa") == "/");
4016 	assert (GetPathParamsQuery(":/") == "/");
4017 	assert (GetPathParamsQuery(":/:") == "/:");
4018 	assert (GetPathParamsQuery(":/::") == "/::");
4019 	assert (GetPathParamsQuery(":/:/") == "/:/");
4020 	assert (GetPathParamsQuery(":/:?") == "/:?");
4021 	assert (GetPathParamsQuery(":/:;") == "/:;");
4022 	assert (GetPathParamsQuery(":/:#") == "/:");
4023 	assert (GetPathParamsQuery(":/:a") == "/:a");
4024 	assert (GetPathParamsQuery("://") == "/");
4025 	assert (GetPathParamsQuery("://:") == "/");
4026 	assert (GetPathParamsQuery(":///") == "/");
4027 	assert (GetPathParamsQuery("://?") == "/?");
4028 	assert (GetPathParamsQuery("://;") == "/;");
4029 	assert (GetPathParamsQuery("://#") == "/");
4030 	assert (GetPathParamsQuery("://a") == "/");
4031 	assert (GetPathParamsQuery(":/?") == "/?");
4032 	assert (GetPathParamsQuery(":/?:") == "/?:");
4033 	assert (GetPathParamsQuery(":/?/") == "/?/");
4034 	assert (GetPathParamsQuery(":/??") == "/??");
4035 	assert (GetPathParamsQuery(":/?;") == "/?;");
4036 	assert (GetPathParamsQuery(":/?#") == "/?");
4037 	assert (GetPathParamsQuery(":/?a") == "/?a");
4038 	assert (GetPathParamsQuery(":/;") == "/;");
4039 	assert (GetPathParamsQuery(":/;:") == "/;:");
4040 	assert (GetPathParamsQuery(":/;/") == "/;/");
4041 	assert (GetPathParamsQuery(":/;?") == "/;?");
4042 	assert (GetPathParamsQuery(":/;;") == "/;;");
4043 	assert (GetPathParamsQuery(":/;#") == "/;");
4044 	assert (GetPathParamsQuery(":/;a") == "/;a");
4045 	assert (GetPathParamsQuery(":/#") == "/");
4046 	assert (GetPathParamsQuery(":/#:") == "/");
4047 	assert (GetPathParamsQuery(":/#/") == "/");
4048 	assert (GetPathParamsQuery(":/#?") == "/");
4049 	assert (GetPathParamsQuery(":/#;") == "/");
4050 	assert (GetPathParamsQuery(":/##") == "/");
4051 	assert (GetPathParamsQuery(":/#a") == "/");
4052 	assert (GetPathParamsQuery(":/a") == "/a");
4053 	assert (GetPathParamsQuery(":/a:") == "/a:");
4054 	assert (GetPathParamsQuery(":/a/") == "/a/");
4055 	assert (GetPathParamsQuery(":/a?") == "/a?");
4056 	assert (GetPathParamsQuery(":/a;") == "/a;");
4057 	assert (GetPathParamsQuery(":/a#") == "/a");
4058 	assert (GetPathParamsQuery(":/aa") == "/aa");
4059 	assert (GetPathParamsQuery(":?") == "/?");
4060 	assert (GetPathParamsQuery(":?:") == "/?:");
4061 	assert (GetPathParamsQuery(":?::") == "/?::");
4062 	assert (GetPathParamsQuery(":?:/") == "/?:/");
4063 	assert (GetPathParamsQuery(":?:?") == "/?:?");
4064 	assert (GetPathParamsQuery(":?:;") == "/?:;");
4065 	assert (GetPathParamsQuery(":?:#") == "/?:");
4066 	assert (GetPathParamsQuery(":?:a") == "/?:a");
4067 	assert (GetPathParamsQuery(":?/") == "/?/");
4068 	assert (GetPathParamsQuery(":?/:") == "/?/:");
4069 	assert (GetPathParamsQuery(":?//") == "/?//");
4070 	assert (GetPathParamsQuery(":?/?") == "/?/?");
4071 	assert (GetPathParamsQuery(":?/;") == "/?/;");
4072 	assert (GetPathParamsQuery(":?/#") == "/?/");
4073 	assert (GetPathParamsQuery(":?/a") == "/?/a");
4074 	assert (GetPathParamsQuery(":??") == "/??");
4075 	assert (GetPathParamsQuery(":??:") == "/??:");
4076 	assert (GetPathParamsQuery(":??/") == "/??/");
4077 	assert (GetPathParamsQuery(":???") == "/???");
4078 	assert (GetPathParamsQuery(":??;") == "/??;");
4079 	assert (GetPathParamsQuery(":??#") == "/??");
4080 	assert (GetPathParamsQuery(":??a") == "/??a");
4081 	assert (GetPathParamsQuery(":?;") == "/?;");
4082 	assert (GetPathParamsQuery(":?;:") == "/?;:");
4083 	assert (GetPathParamsQuery(":?;/") == "/?;/");
4084 	assert (GetPathParamsQuery(":?;?") == "/?;?");
4085 	assert (GetPathParamsQuery(":?;;") == "/?;;");
4086 	assert (GetPathParamsQuery(":?;#") == "/?;");
4087 	assert (GetPathParamsQuery(":?;a") == "/?;a");
4088 	assert (GetPathParamsQuery(":?#") == "/?");
4089 	assert (GetPathParamsQuery(":?#:") == "/?");
4090 	assert (GetPathParamsQuery(":?#/") == "/?");
4091 	assert (GetPathParamsQuery(":?#?") == "/?");
4092 	assert (GetPathParamsQuery(":?#;") == "/?");
4093 	assert (GetPathParamsQuery(":?##") == "/?");
4094 	assert (GetPathParamsQuery(":?#a") == "/?");
4095 	assert (GetPathParamsQuery(":?a") == "/?a");
4096 	assert (GetPathParamsQuery(":?a:") == "/?a:");
4097 	assert (GetPathParamsQuery(":?a/") == "/?a/");
4098 	assert (GetPathParamsQuery(":?a?") == "/?a?");
4099 	assert (GetPathParamsQuery(":?a;") == "/?a;");
4100 	assert (GetPathParamsQuery(":?a#") == "/?a");
4101 	assert (GetPathParamsQuery(":?aa") == "/?aa");
4102 	assert (GetPathParamsQuery(":;") == "/;");
4103 	assert (GetPathParamsQuery(":;:") == "/;:");
4104 	assert (GetPathParamsQuery(":;::") == "/;::");
4105 	assert (GetPathParamsQuery(":;:/") == "/;:/");
4106 	assert (GetPathParamsQuery(":;:?") == "/;:?");
4107 	assert (GetPathParamsQuery(":;:;") == "/;:;");
4108 	assert (GetPathParamsQuery(":;:#") == "/;:");
4109 	assert (GetPathParamsQuery(":;:a") == "/;:a");
4110 	assert (GetPathParamsQuery(":;/") == "/;/");
4111 	assert (GetPathParamsQuery(":;/:") == "/;/:");
4112 	assert (GetPathParamsQuery(":;//") == "/;//");
4113 	assert (GetPathParamsQuery(":;/?") == "/;/?");
4114 	assert (GetPathParamsQuery(":;/;") == "/;/;");
4115 	assert (GetPathParamsQuery(":;/#") == "/;/");
4116 	assert (GetPathParamsQuery(":;/a") == "/;/a");
4117 	assert (GetPathParamsQuery(":;?") == "/;?");
4118 	assert (GetPathParamsQuery(":;?:") == "/;?:");
4119 	assert (GetPathParamsQuery(":;?/") == "/;?/");
4120 	assert (GetPathParamsQuery(":;??") == "/;??");
4121 	assert (GetPathParamsQuery(":;?;") == "/;?;");
4122 	assert (GetPathParamsQuery(":;?#") == "/;?");
4123 	assert (GetPathParamsQuery(":;?a") == "/;?a");
4124 	assert (GetPathParamsQuery(":;;") == "/;;");
4125 	assert (GetPathParamsQuery(":;;:") == "/;;:");
4126 	assert (GetPathParamsQuery(":;;/") == "/;;/");
4127 	assert (GetPathParamsQuery(":;;?") == "/;;?");
4128 	assert (GetPathParamsQuery(":;;;") == "/;;;");
4129 	assert (GetPathParamsQuery(":;;#") == "/;;");
4130 	assert (GetPathParamsQuery(":;;a") == "/;;a");
4131 	assert (GetPathParamsQuery(":;#") == "/;");
4132 	assert (GetPathParamsQuery(":;#:") == "/;");
4133 	assert (GetPathParamsQuery(":;#/") == "/;");
4134 	assert (GetPathParamsQuery(":;#?") == "/;");
4135 	assert (GetPathParamsQuery(":;#;") == "/;");
4136 	assert (GetPathParamsQuery(":;##") == "/;");
4137 	assert (GetPathParamsQuery(":;#a") == "/;");
4138 	assert (GetPathParamsQuery(":;a") == "/;a");
4139 	assert (GetPathParamsQuery(":;a:") == "/;a:");
4140 	assert (GetPathParamsQuery(":;a/") == "/;a/");
4141 	assert (GetPathParamsQuery(":;a?") == "/;a?");
4142 	assert (GetPathParamsQuery(":;a;") == "/;a;");
4143 	assert (GetPathParamsQuery(":;a#") == "/;a");
4144 	assert (GetPathParamsQuery(":;aa") == "/;aa");
4145 	assert (GetPathParamsQuery(":#") == "/");
4146 	assert (GetPathParamsQuery(":#:") == "/");
4147 	assert (GetPathParamsQuery(":#::") == "/");
4148 	assert (GetPathParamsQuery(":#:/") == "/");
4149 	assert (GetPathParamsQuery(":#:?") == "/");
4150 	assert (GetPathParamsQuery(":#:;") == "/");
4151 	assert (GetPathParamsQuery(":#:#") == "/");
4152 	assert (GetPathParamsQuery(":#:a") == "/");
4153 	assert (GetPathParamsQuery(":#/") == "/");
4154 	assert (GetPathParamsQuery(":#/:") == "/");
4155 	assert (GetPathParamsQuery(":#//") == "/");
4156 	assert (GetPathParamsQuery(":#/?") == "/");
4157 	assert (GetPathParamsQuery(":#/;") == "/");
4158 	assert (GetPathParamsQuery(":#/#") == "/");
4159 	assert (GetPathParamsQuery(":#/a") == "/");
4160 	assert (GetPathParamsQuery(":#?") == "/");
4161 	assert (GetPathParamsQuery(":#?:") == "/");
4162 	assert (GetPathParamsQuery(":#?/") == "/");
4163 	assert (GetPathParamsQuery(":#??") == "/");
4164 	assert (GetPathParamsQuery(":#?;") == "/");
4165 	assert (GetPathParamsQuery(":#?#") == "/");
4166 	assert (GetPathParamsQuery(":#?a") == "/");
4167 	assert (GetPathParamsQuery(":#;") == "/");
4168 	assert (GetPathParamsQuery(":#;:") == "/");
4169 	assert (GetPathParamsQuery(":#;/") == "/");
4170 	assert (GetPathParamsQuery(":#;?") == "/");
4171 	assert (GetPathParamsQuery(":#;;") == "/");
4172 	assert (GetPathParamsQuery(":#;#") == "/");
4173 	assert (GetPathParamsQuery(":#;a") == "/");
4174 	assert (GetPathParamsQuery(":##") == "/");
4175 	assert (GetPathParamsQuery(":##:") == "/");
4176 	assert (GetPathParamsQuery(":##/") == "/");
4177 	assert (GetPathParamsQuery(":##?") == "/");
4178 	assert (GetPathParamsQuery(":##;") == "/");
4179 	assert (GetPathParamsQuery(":###") == "/");
4180 	assert (GetPathParamsQuery(":##a") == "/");
4181 	assert (GetPathParamsQuery(":#a") == "/");
4182 	assert (GetPathParamsQuery(":#a:") == "/");
4183 	assert (GetPathParamsQuery(":#a/") == "/");
4184 	assert (GetPathParamsQuery(":#a?") == "/");
4185 	assert (GetPathParamsQuery(":#a;") == "/");
4186 	assert (GetPathParamsQuery(":#a#") == "/");
4187 	assert (GetPathParamsQuery(":#aa") == "/");
4188 	assert (GetPathParamsQuery(":a") == "/");
4189 	assert (GetPathParamsQuery(":a:") == "/");
4190 	assert (GetPathParamsQuery(":a::") == "/");
4191 	assert (GetPathParamsQuery(":a:/") == "/");
4192 	assert (GetPathParamsQuery(":a:?") == "/?");
4193 	assert (GetPathParamsQuery(":a:;") == "/;");
4194 	assert (GetPathParamsQuery(":a:#") == "/");
4195 	assert (GetPathParamsQuery(":a:a") == "/");
4196 	assert (GetPathParamsQuery(":a/") == "/");
4197 	assert (GetPathParamsQuery(":a/:") == "/:");
4198 	assert (GetPathParamsQuery(":a//") == "//");
4199 	assert (GetPathParamsQuery(":a/?") == "/?");
4200 	assert (GetPathParamsQuery(":a/;") == "/;");
4201 	assert (GetPathParamsQuery(":a/#") == "/");
4202 	assert (GetPathParamsQuery(":a/a") == "/a");
4203 	assert (GetPathParamsQuery(":a?") == "/?");
4204 	assert (GetPathParamsQuery(":a?:") == "/?:");
4205 	assert (GetPathParamsQuery(":a?/") == "/?/");
4206 	assert (GetPathParamsQuery(":a??") == "/??");
4207 	assert (GetPathParamsQuery(":a?;") == "/?;");
4208 	assert (GetPathParamsQuery(":a?#") == "/?");
4209 	assert (GetPathParamsQuery(":a?a") == "/?a");
4210 	assert (GetPathParamsQuery(":a;") == "/;");
4211 	assert (GetPathParamsQuery(":a;:") == "/;:");
4212 	assert (GetPathParamsQuery(":a;/") == "/;/");
4213 	assert (GetPathParamsQuery(":a;?") == "/;?");
4214 	assert (GetPathParamsQuery(":a;;") == "/;;");
4215 	assert (GetPathParamsQuery(":a;#") == "/;");
4216 	assert (GetPathParamsQuery(":a;a") == "/;a");
4217 	assert (GetPathParamsQuery(":a#") == "/");
4218 	assert (GetPathParamsQuery(":a#:") == "/");
4219 	assert (GetPathParamsQuery(":a#/") == "/");
4220 	assert (GetPathParamsQuery(":a#?") == "/");
4221 	assert (GetPathParamsQuery(":a#;") == "/");
4222 	assert (GetPathParamsQuery(":a##") == "/");
4223 	assert (GetPathParamsQuery(":a#a") == "/");
4224 	assert (GetPathParamsQuery(":aa") == "/");
4225 	assert (GetPathParamsQuery(":aa:") == "/");
4226 	assert (GetPathParamsQuery(":aa/") == "/");
4227 	assert (GetPathParamsQuery(":aa?") == "/?");
4228 	assert (GetPathParamsQuery(":aa;") == "/;");
4229 	assert (GetPathParamsQuery(":aa#") == "/");
4230 	assert (GetPathParamsQuery(":aaa") == "/");
4231 	assert (GetPathParamsQuery("/") == "/");
4232 	assert (GetPathParamsQuery("/:") == "/:");
4233 	assert (GetPathParamsQuery("/::") == "/::");
4234 	assert (GetPathParamsQuery("/:::") == "/:::");
4235 	assert (GetPathParamsQuery("/::/") == "/::/");
4236 	assert (GetPathParamsQuery("/::?") == "/::?");
4237 	assert (GetPathParamsQuery("/::;") == "/::;");
4238 	assert (GetPathParamsQuery("/::#") == "/::");
4239 	assert (GetPathParamsQuery("/::a") == "/::a");
4240 	assert (GetPathParamsQuery("/:/") == "/:/");
4241 	assert (GetPathParamsQuery("/:/:") == "/:/:");
4242 	assert (GetPathParamsQuery("/://") == "/://");
4243 	assert (GetPathParamsQuery("/:/?") == "/:/?");
4244 	assert (GetPathParamsQuery("/:/;") == "/:/;");
4245 	assert (GetPathParamsQuery("/:/#") == "/:/");
4246 	assert (GetPathParamsQuery("/:/a") == "/:/a");
4247 	assert (GetPathParamsQuery("/:?") == "/:?");
4248 	assert (GetPathParamsQuery("/:?:") == "/:?:");
4249 	assert (GetPathParamsQuery("/:?/") == "/:?/");
4250 	assert (GetPathParamsQuery("/:??") == "/:??");
4251 	assert (GetPathParamsQuery("/:?;") == "/:?;");
4252 	assert (GetPathParamsQuery("/:?#") == "/:?");
4253 	assert (GetPathParamsQuery("/:?a") == "/:?a");
4254 	assert (GetPathParamsQuery("/:;") == "/:;");
4255 	assert (GetPathParamsQuery("/:;:") == "/:;:");
4256 	assert (GetPathParamsQuery("/:;/") == "/:;/");
4257 	assert (GetPathParamsQuery("/:;?") == "/:;?");
4258 	assert (GetPathParamsQuery("/:;;") == "/:;;");
4259 	assert (GetPathParamsQuery("/:;#") == "/:;");
4260 	assert (GetPathParamsQuery("/:;a") == "/:;a");
4261 	assert (GetPathParamsQuery("/:#") == "/:");
4262 	assert (GetPathParamsQuery("/:#:") == "/:");
4263 	assert (GetPathParamsQuery("/:#/") == "/:");
4264 	assert (GetPathParamsQuery("/:#?") == "/:");
4265 	assert (GetPathParamsQuery("/:#;") == "/:");
4266 	assert (GetPathParamsQuery("/:##") == "/:");
4267 	assert (GetPathParamsQuery("/:#a") == "/:");
4268 	assert (GetPathParamsQuery("/:a") == "/:a");
4269 	assert (GetPathParamsQuery("/:a:") == "/:a:");
4270 	assert (GetPathParamsQuery("/:a/") == "/:a/");
4271 	assert (GetPathParamsQuery("/:a?") == "/:a?");
4272 	assert (GetPathParamsQuery("/:a;") == "/:a;");
4273 	assert (GetPathParamsQuery("/:a#") == "/:a");
4274 	assert (GetPathParamsQuery("/:aa") == "/:aa");
4275 	assert (GetPathParamsQuery("//") == "/");
4276 	assert (GetPathParamsQuery("//:") == "/");
4277 	assert (GetPathParamsQuery("//::") == "/");
4278 	assert (GetPathParamsQuery("//:/") == "/");
4279 	assert (GetPathParamsQuery("//:?") == "/?");
4280 	assert (GetPathParamsQuery("//:;") == "/;");
4281 	assert (GetPathParamsQuery("//:#") == "/");
4282 	assert (GetPathParamsQuery("//:a") == "/");
4283 	assert (GetPathParamsQuery("///") == "/");
4284 	assert (GetPathParamsQuery("///:") == "/:");
4285 	assert (GetPathParamsQuery("////") == "//");
4286 	assert (GetPathParamsQuery("///?") == "/?");
4287 	assert (GetPathParamsQuery("///;") == "/;");
4288 	assert (GetPathParamsQuery("///#") == "/");
4289 	assert (GetPathParamsQuery("///a") == "/a");
4290 	assert (GetPathParamsQuery("//?") == "/?");
4291 	assert (GetPathParamsQuery("//?:") == "/?:");
4292 	assert (GetPathParamsQuery("//?/") == "/?/");
4293 	assert (GetPathParamsQuery("//??") == "/??");
4294 	assert (GetPathParamsQuery("//?;") == "/?;");
4295 	assert (GetPathParamsQuery("//?#") == "/?");
4296 	assert (GetPathParamsQuery("//?a") == "/?a");
4297 	assert (GetPathParamsQuery("//;") == "/;");
4298 	assert (GetPathParamsQuery("//;:") == "/;:");
4299 	assert (GetPathParamsQuery("//;/") == "/;/");
4300 	assert (GetPathParamsQuery("//;?") == "/;?");
4301 	assert (GetPathParamsQuery("//;;") == "/;;");
4302 	assert (GetPathParamsQuery("//;#") == "/;");
4303 	assert (GetPathParamsQuery("//;a") == "/;a");
4304 	assert (GetPathParamsQuery("//#") == "/");
4305 	assert (GetPathParamsQuery("//#:") == "/");
4306 	assert (GetPathParamsQuery("//#/") == "/");
4307 	assert (GetPathParamsQuery("//#?") == "/");
4308 	assert (GetPathParamsQuery("//#;") == "/");
4309 	assert (GetPathParamsQuery("//##") == "/");
4310 	assert (GetPathParamsQuery("//#a") == "/");
4311 	assert (GetPathParamsQuery("//a") == "/");
4312 	assert (GetPathParamsQuery("//a:") == "/");
4313 	assert (GetPathParamsQuery("//a/") == "/");
4314 	assert (GetPathParamsQuery("//a?") == "/?");
4315 	assert (GetPathParamsQuery("//a;") == "/;");
4316 	assert (GetPathParamsQuery("//a#") == "/");
4317 	assert (GetPathParamsQuery("//aa") == "/");
4318 	assert (GetPathParamsQuery("/?") == "/?");
4319 	assert (GetPathParamsQuery("/?:") == "/?:");
4320 	assert (GetPathParamsQuery("/?::") == "/?::");
4321 	assert (GetPathParamsQuery("/?:/") == "/?:/");
4322 	assert (GetPathParamsQuery("/?:?") == "/?:?");
4323 	assert (GetPathParamsQuery("/?:;") == "/?:;");
4324 	assert (GetPathParamsQuery("/?:#") == "/?:");
4325 	assert (GetPathParamsQuery("/?:a") == "/?:a");
4326 	assert (GetPathParamsQuery("/?/") == "/?/");
4327 	assert (GetPathParamsQuery("/?/:") == "/?/:");
4328 	assert (GetPathParamsQuery("/?//") == "/?//");
4329 	assert (GetPathParamsQuery("/?/?") == "/?/?");
4330 	assert (GetPathParamsQuery("/?/;") == "/?/;");
4331 	assert (GetPathParamsQuery("/?/#") == "/?/");
4332 	assert (GetPathParamsQuery("/?/a") == "/?/a");
4333 	assert (GetPathParamsQuery("/??") == "/??");
4334 	assert (GetPathParamsQuery("/??:") == "/??:");
4335 	assert (GetPathParamsQuery("/??/") == "/??/");
4336 	assert (GetPathParamsQuery("/???") == "/???");
4337 	assert (GetPathParamsQuery("/??;") == "/??;");
4338 	assert (GetPathParamsQuery("/??#") == "/??");
4339 	assert (GetPathParamsQuery("/??a") == "/??a");
4340 	assert (GetPathParamsQuery("/?;") == "/?;");
4341 	assert (GetPathParamsQuery("/?;:") == "/?;:");
4342 	assert (GetPathParamsQuery("/?;/") == "/?;/");
4343 	assert (GetPathParamsQuery("/?;?") == "/?;?");
4344 	assert (GetPathParamsQuery("/?;;") == "/?;;");
4345 	assert (GetPathParamsQuery("/?;#") == "/?;");
4346 	assert (GetPathParamsQuery("/?;a") == "/?;a");
4347 	assert (GetPathParamsQuery("/?#") == "/?");
4348 	assert (GetPathParamsQuery("/?#:") == "/?");
4349 	assert (GetPathParamsQuery("/?#/") == "/?");
4350 	assert (GetPathParamsQuery("/?#?") == "/?");
4351 	assert (GetPathParamsQuery("/?#;") == "/?");
4352 	assert (GetPathParamsQuery("/?##") == "/?");
4353 	assert (GetPathParamsQuery("/?#a") == "/?");
4354 	assert (GetPathParamsQuery("/?a") == "/?a");
4355 	assert (GetPathParamsQuery("/?a:") == "/?a:");
4356 	assert (GetPathParamsQuery("/?a/") == "/?a/");
4357 	assert (GetPathParamsQuery("/?a?") == "/?a?");
4358 	assert (GetPathParamsQuery("/?a;") == "/?a;");
4359 	assert (GetPathParamsQuery("/?a#") == "/?a");
4360 	assert (GetPathParamsQuery("/?aa") == "/?aa");
4361 	assert (GetPathParamsQuery("/;") == "/;");
4362 	assert (GetPathParamsQuery("/;:") == "/;:");
4363 	assert (GetPathParamsQuery("/;::") == "/;::");
4364 	assert (GetPathParamsQuery("/;:/") == "/;:/");
4365 	assert (GetPathParamsQuery("/;:?") == "/;:?");
4366 	assert (GetPathParamsQuery("/;:;") == "/;:;");
4367 	assert (GetPathParamsQuery("/;:#") == "/;:");
4368 	assert (GetPathParamsQuery("/;:a") == "/;:a");
4369 	assert (GetPathParamsQuery("/;/") == "/;/");
4370 	assert (GetPathParamsQuery("/;/:") == "/;/:");
4371 	assert (GetPathParamsQuery("/;//") == "/;//");
4372 	assert (GetPathParamsQuery("/;/?") == "/;/?");
4373 	assert (GetPathParamsQuery("/;/;") == "/;/;");
4374 	assert (GetPathParamsQuery("/;/#") == "/;/");
4375 	assert (GetPathParamsQuery("/;/a") == "/;/a");
4376 	assert (GetPathParamsQuery("/;?") == "/;?");
4377 	assert (GetPathParamsQuery("/;?:") == "/;?:");
4378 	assert (GetPathParamsQuery("/;?/") == "/;?/");
4379 	assert (GetPathParamsQuery("/;??") == "/;??");
4380 	assert (GetPathParamsQuery("/;?;") == "/;?;");
4381 	assert (GetPathParamsQuery("/;?#") == "/;?");
4382 	assert (GetPathParamsQuery("/;?a") == "/;?a");
4383 	assert (GetPathParamsQuery("/;;") == "/;;");
4384 	assert (GetPathParamsQuery("/;;:") == "/;;:");
4385 	assert (GetPathParamsQuery("/;;/") == "/;;/");
4386 	assert (GetPathParamsQuery("/;;?") == "/;;?");
4387 	assert (GetPathParamsQuery("/;;;") == "/;;;");
4388 	assert (GetPathParamsQuery("/;;#") == "/;;");
4389 	assert (GetPathParamsQuery("/;;a") == "/;;a");
4390 	assert (GetPathParamsQuery("/;#") == "/;");
4391 	assert (GetPathParamsQuery("/;#:") == "/;");
4392 	assert (GetPathParamsQuery("/;#/") == "/;");
4393 	assert (GetPathParamsQuery("/;#?") == "/;");
4394 	assert (GetPathParamsQuery("/;#;") == "/;");
4395 	assert (GetPathParamsQuery("/;##") == "/;");
4396 	assert (GetPathParamsQuery("/;#a") == "/;");
4397 	assert (GetPathParamsQuery("/;a") == "/;a");
4398 	assert (GetPathParamsQuery("/;a:") == "/;a:");
4399 	assert (GetPathParamsQuery("/;a/") == "/;a/");
4400 	assert (GetPathParamsQuery("/;a?") == "/;a?");
4401 	assert (GetPathParamsQuery("/;a;") == "/;a;");
4402 	assert (GetPathParamsQuery("/;a#") == "/;a");
4403 	assert (GetPathParamsQuery("/;aa") == "/;aa");
4404 	assert (GetPathParamsQuery("/#") == "/");
4405 	assert (GetPathParamsQuery("/#:") == "/");
4406 	assert (GetPathParamsQuery("/#::") == "/");
4407 	assert (GetPathParamsQuery("/#:/") == "/");
4408 	assert (GetPathParamsQuery("/#:?") == "/");
4409 	assert (GetPathParamsQuery("/#:;") == "/");
4410 	assert (GetPathParamsQuery("/#:#") == "/");
4411 	assert (GetPathParamsQuery("/#:a") == "/");
4412 	assert (GetPathParamsQuery("/#/") == "/");
4413 	assert (GetPathParamsQuery("/#/:") == "/");
4414 	assert (GetPathParamsQuery("/#//") == "/");
4415 	assert (GetPathParamsQuery("/#/?") == "/");
4416 	assert (GetPathParamsQuery("/#/;") == "/");
4417 	assert (GetPathParamsQuery("/#/#") == "/");
4418 	assert (GetPathParamsQuery("/#/a") == "/");
4419 	assert (GetPathParamsQuery("/#?") == "/");
4420 	assert (GetPathParamsQuery("/#?:") == "/");
4421 	assert (GetPathParamsQuery("/#?/") == "/");
4422 	assert (GetPathParamsQuery("/#??") == "/");
4423 	assert (GetPathParamsQuery("/#?;") == "/");
4424 	assert (GetPathParamsQuery("/#?#") == "/");
4425 	assert (GetPathParamsQuery("/#?a") == "/");
4426 	assert (GetPathParamsQuery("/#;") == "/");
4427 	assert (GetPathParamsQuery("/#;:") == "/");
4428 	assert (GetPathParamsQuery("/#;/") == "/");
4429 	assert (GetPathParamsQuery("/#;?") == "/");
4430 	assert (GetPathParamsQuery("/#;;") == "/");
4431 	assert (GetPathParamsQuery("/#;#") == "/");
4432 	assert (GetPathParamsQuery("/#;a") == "/");
4433 	assert (GetPathParamsQuery("/##") == "/");
4434 	assert (GetPathParamsQuery("/##:") == "/");
4435 	assert (GetPathParamsQuery("/##/") == "/");
4436 	assert (GetPathParamsQuery("/##?") == "/");
4437 	assert (GetPathParamsQuery("/##;") == "/");
4438 	assert (GetPathParamsQuery("/###") == "/");
4439 	assert (GetPathParamsQuery("/##a") == "/");
4440 	assert (GetPathParamsQuery("/#a") == "/");
4441 	assert (GetPathParamsQuery("/#a:") == "/");
4442 	assert (GetPathParamsQuery("/#a/") == "/");
4443 	assert (GetPathParamsQuery("/#a?") == "/");
4444 	assert (GetPathParamsQuery("/#a;") == "/");
4445 	assert (GetPathParamsQuery("/#a#") == "/");
4446 	assert (GetPathParamsQuery("/#aa") == "/");
4447 	assert (GetPathParamsQuery("/a") == "/a");
4448 	assert (GetPathParamsQuery("/a:") == "/a:");
4449 	assert (GetPathParamsQuery("/a::") == "/a::");
4450 	assert (GetPathParamsQuery("/a:/") == "/a:/");
4451 	assert (GetPathParamsQuery("/a:?") == "/a:?");
4452 	assert (GetPathParamsQuery("/a:;") == "/a:;");
4453 	assert (GetPathParamsQuery("/a:#") == "/a:");
4454 	assert (GetPathParamsQuery("/a:a") == "/a:a");
4455 	assert (GetPathParamsQuery("/a/") == "/a/");
4456 	assert (GetPathParamsQuery("/a/:") == "/a/:");
4457 	assert (GetPathParamsQuery("/a//") == "/a//");
4458 	assert (GetPathParamsQuery("/a/?") == "/a/?");
4459 	assert (GetPathParamsQuery("/a/;") == "/a/;");
4460 	assert (GetPathParamsQuery("/a/#") == "/a/");
4461 	assert (GetPathParamsQuery("/a/a") == "/a/a");
4462 	assert (GetPathParamsQuery("/a?") == "/a?");
4463 	assert (GetPathParamsQuery("/a?:") == "/a?:");
4464 	assert (GetPathParamsQuery("/a?/") == "/a?/");
4465 	assert (GetPathParamsQuery("/a??") == "/a??");
4466 	assert (GetPathParamsQuery("/a?;") == "/a?;");
4467 	assert (GetPathParamsQuery("/a?#") == "/a?");
4468 	assert (GetPathParamsQuery("/a?a") == "/a?a");
4469 	assert (GetPathParamsQuery("/a;") == "/a;");
4470 	assert (GetPathParamsQuery("/a;:") == "/a;:");
4471 	assert (GetPathParamsQuery("/a;/") == "/a;/");
4472 	assert (GetPathParamsQuery("/a;?") == "/a;?");
4473 	assert (GetPathParamsQuery("/a;;") == "/a;;");
4474 	assert (GetPathParamsQuery("/a;#") == "/a;");
4475 	assert (GetPathParamsQuery("/a;a") == "/a;a");
4476 	assert (GetPathParamsQuery("/a#") == "/a");
4477 	assert (GetPathParamsQuery("/a#:") == "/a");
4478 	assert (GetPathParamsQuery("/a#/") == "/a");
4479 	assert (GetPathParamsQuery("/a#?") == "/a");
4480 	assert (GetPathParamsQuery("/a#;") == "/a");
4481 	assert (GetPathParamsQuery("/a##") == "/a");
4482 	assert (GetPathParamsQuery("/a#a") == "/a");
4483 	assert (GetPathParamsQuery("/aa") == "/aa");
4484 	assert (GetPathParamsQuery("/aa:") == "/aa:");
4485 	assert (GetPathParamsQuery("/aa/") == "/aa/");
4486 	assert (GetPathParamsQuery("/aa?") == "/aa?");
4487 	assert (GetPathParamsQuery("/aa;") == "/aa;");
4488 	assert (GetPathParamsQuery("/aa#") == "/aa");
4489 	assert (GetPathParamsQuery("/aaa") == "/aaa");
4490 	assert (GetPathParamsQuery("?") == "/?");
4491 	assert (GetPathParamsQuery("?:") == "/?:");
4492 	assert (GetPathParamsQuery("?::") == "/?::");
4493 	assert (GetPathParamsQuery("?:::") == "/?:::");
4494 	assert (GetPathParamsQuery("?::/") == "/?::/");
4495 	assert (GetPathParamsQuery("?::?") == "/?::?");
4496 	assert (GetPathParamsQuery("?::;") == "/?::;");
4497 	assert (GetPathParamsQuery("?::#") == "/?::");
4498 	assert (GetPathParamsQuery("?::a") == "/?::a");
4499 	assert (GetPathParamsQuery("?:/") == "/?:/");
4500 	assert (GetPathParamsQuery("?:/:") == "/?:/:");
4501 	assert (GetPathParamsQuery("?://") == "/?://");
4502 	assert (GetPathParamsQuery("?:/?") == "/?:/?");
4503 	assert (GetPathParamsQuery("?:/;") == "/?:/;");
4504 	assert (GetPathParamsQuery("?:/#") == "/?:/");
4505 	assert (GetPathParamsQuery("?:/a") == "/?:/a");
4506 	assert (GetPathParamsQuery("?:?") == "/?:?");
4507 	assert (GetPathParamsQuery("?:?:") == "/?:?:");
4508 	assert (GetPathParamsQuery("?:?/") == "/?:?/");
4509 	assert (GetPathParamsQuery("?:??") == "/?:??");
4510 	assert (GetPathParamsQuery("?:?;") == "/?:?;");
4511 	assert (GetPathParamsQuery("?:?#") == "/?:?");
4512 	assert (GetPathParamsQuery("?:?a") == "/?:?a");
4513 	assert (GetPathParamsQuery("?:;") == "/?:;");
4514 	assert (GetPathParamsQuery("?:;:") == "/?:;:");
4515 	assert (GetPathParamsQuery("?:;/") == "/?:;/");
4516 	assert (GetPathParamsQuery("?:;?") == "/?:;?");
4517 	assert (GetPathParamsQuery("?:;;") == "/?:;;");
4518 	assert (GetPathParamsQuery("?:;#") == "/?:;");
4519 	assert (GetPathParamsQuery("?:;a") == "/?:;a");
4520 	assert (GetPathParamsQuery("?:#") == "/?:");
4521 	assert (GetPathParamsQuery("?:#:") == "/?:");
4522 	assert (GetPathParamsQuery("?:#/") == "/?:");
4523 	assert (GetPathParamsQuery("?:#?") == "/?:");
4524 	assert (GetPathParamsQuery("?:#;") == "/?:");
4525 	assert (GetPathParamsQuery("?:##") == "/?:");
4526 	assert (GetPathParamsQuery("?:#a") == "/?:");
4527 	assert (GetPathParamsQuery("?:a") == "/?:a");
4528 	assert (GetPathParamsQuery("?:a:") == "/?:a:");
4529 	assert (GetPathParamsQuery("?:a/") == "/?:a/");
4530 	assert (GetPathParamsQuery("?:a?") == "/?:a?");
4531 	assert (GetPathParamsQuery("?:a;") == "/?:a;");
4532 	assert (GetPathParamsQuery("?:a#") == "/?:a");
4533 	assert (GetPathParamsQuery("?:aa") == "/?:aa");
4534 	assert (GetPathParamsQuery("?/") == "/?/");
4535 	assert (GetPathParamsQuery("?/:") == "/?/:");
4536 	assert (GetPathParamsQuery("?/::") == "/?/::");
4537 	assert (GetPathParamsQuery("?/:/") == "/?/:/");
4538 	assert (GetPathParamsQuery("?/:?") == "/?/:?");
4539 	assert (GetPathParamsQuery("?/:;") == "/?/:;");
4540 	assert (GetPathParamsQuery("?/:#") == "/?/:");
4541 	assert (GetPathParamsQuery("?/:a") == "/?/:a");
4542 	assert (GetPathParamsQuery("?//") == "/?//");
4543 	assert (GetPathParamsQuery("?//:") == "/?//:");
4544 	assert (GetPathParamsQuery("?///") == "/?///");
4545 	assert (GetPathParamsQuery("?//?") == "/?//?");
4546 	assert (GetPathParamsQuery("?//;") == "/?//;");
4547 	assert (GetPathParamsQuery("?//#") == "/?//");
4548 	assert (GetPathParamsQuery("?//a") == "/?//a");
4549 	assert (GetPathParamsQuery("?/?") == "/?/?");
4550 	assert (GetPathParamsQuery("?/?:") == "/?/?:");
4551 	assert (GetPathParamsQuery("?/?/") == "/?/?/");
4552 	assert (GetPathParamsQuery("?/??") == "/?/??");
4553 	assert (GetPathParamsQuery("?/?;") == "/?/?;");
4554 	assert (GetPathParamsQuery("?/?#") == "/?/?");
4555 	assert (GetPathParamsQuery("?/?a") == "/?/?a");
4556 	assert (GetPathParamsQuery("?/;") == "/?/;");
4557 	assert (GetPathParamsQuery("?/;:") == "/?/;:");
4558 	assert (GetPathParamsQuery("?/;/") == "/?/;/");
4559 	assert (GetPathParamsQuery("?/;?") == "/?/;?");
4560 	assert (GetPathParamsQuery("?/;;") == "/?/;;");
4561 	assert (GetPathParamsQuery("?/;#") == "/?/;");
4562 	assert (GetPathParamsQuery("?/;a") == "/?/;a");
4563 	assert (GetPathParamsQuery("?/#") == "/?/");
4564 	assert (GetPathParamsQuery("?/#:") == "/?/");
4565 	assert (GetPathParamsQuery("?/#/") == "/?/");
4566 	assert (GetPathParamsQuery("?/#?") == "/?/");
4567 	assert (GetPathParamsQuery("?/#;") == "/?/");
4568 	assert (GetPathParamsQuery("?/##") == "/?/");
4569 	assert (GetPathParamsQuery("?/#a") == "/?/");
4570 	assert (GetPathParamsQuery("?/a") == "/?/a");
4571 	assert (GetPathParamsQuery("?/a:") == "/?/a:");
4572 	assert (GetPathParamsQuery("?/a/") == "/?/a/");
4573 	assert (GetPathParamsQuery("?/a?") == "/?/a?");
4574 	assert (GetPathParamsQuery("?/a;") == "/?/a;");
4575 	assert (GetPathParamsQuery("?/a#") == "/?/a");
4576 	assert (GetPathParamsQuery("?/aa") == "/?/aa");
4577 	assert (GetPathParamsQuery("??") == "/??");
4578 	assert (GetPathParamsQuery("??:") == "/??:");
4579 	assert (GetPathParamsQuery("??::") == "/??::");
4580 	assert (GetPathParamsQuery("??:/") == "/??:/");
4581 	assert (GetPathParamsQuery("??:?") == "/??:?");
4582 	assert (GetPathParamsQuery("??:;") == "/??:;");
4583 	assert (GetPathParamsQuery("??:#") == "/??:");
4584 	assert (GetPathParamsQuery("??:a") == "/??:a");
4585 	assert (GetPathParamsQuery("??/") == "/??/");
4586 	assert (GetPathParamsQuery("??/:") == "/??/:");
4587 	assert (GetPathParamsQuery("??//") == "/??//");
4588 	assert (GetPathParamsQuery("??/?") == "/??/?");
4589 	assert (GetPathParamsQuery("??/;") == "/??/;");
4590 	assert (GetPathParamsQuery("??/#") == "/??/");
4591 	assert (GetPathParamsQuery("??/a") == "/??/a");
4592 	assert (GetPathParamsQuery("???") == "/???");
4593 	assert (GetPathParamsQuery("???:") == "/???:");
4594 	assert (GetPathParamsQuery("???/") == "/???/");
4595 	assert (GetPathParamsQuery("????") == "/????");
4596 	assert (GetPathParamsQuery("???;") == "/???;");
4597 	assert (GetPathParamsQuery("???#") == "/???");
4598 	assert (GetPathParamsQuery("???a") == "/???a");
4599 	assert (GetPathParamsQuery("??;") == "/??;");
4600 	assert (GetPathParamsQuery("??;:") == "/??;:");
4601 	assert (GetPathParamsQuery("??;/") == "/??;/");
4602 	assert (GetPathParamsQuery("??;?") == "/??;?");
4603 	assert (GetPathParamsQuery("??;;") == "/??;;");
4604 	assert (GetPathParamsQuery("??;#") == "/??;");
4605 	assert (GetPathParamsQuery("??;a") == "/??;a");
4606 	assert (GetPathParamsQuery("??#") == "/??");
4607 	assert (GetPathParamsQuery("??#:") == "/??");
4608 	assert (GetPathParamsQuery("??#/") == "/??");
4609 	assert (GetPathParamsQuery("??#?") == "/??");
4610 	assert (GetPathParamsQuery("??#;") == "/??");
4611 	assert (GetPathParamsQuery("??##") == "/??");
4612 	assert (GetPathParamsQuery("??#a") == "/??");
4613 	assert (GetPathParamsQuery("??a") == "/??a");
4614 	assert (GetPathParamsQuery("??a:") == "/??a:");
4615 	assert (GetPathParamsQuery("??a/") == "/??a/");
4616 	assert (GetPathParamsQuery("??a?") == "/??a?");
4617 	assert (GetPathParamsQuery("??a;") == "/??a;");
4618 	assert (GetPathParamsQuery("??a#") == "/??a");
4619 	assert (GetPathParamsQuery("??aa") == "/??aa");
4620 	assert (GetPathParamsQuery("?;") == "/?;");
4621 	assert (GetPathParamsQuery("?;:") == "/?;:");
4622 	assert (GetPathParamsQuery("?;::") == "/?;::");
4623 	assert (GetPathParamsQuery("?;:/") == "/?;:/");
4624 	assert (GetPathParamsQuery("?;:?") == "/?;:?");
4625 	assert (GetPathParamsQuery("?;:;") == "/?;:;");
4626 	assert (GetPathParamsQuery("?;:#") == "/?;:");
4627 	assert (GetPathParamsQuery("?;:a") == "/?;:a");
4628 	assert (GetPathParamsQuery("?;/") == "/?;/");
4629 	assert (GetPathParamsQuery("?;/:") == "/?;/:");
4630 	assert (GetPathParamsQuery("?;//") == "/?;//");
4631 	assert (GetPathParamsQuery("?;/?") == "/?;/?");
4632 	assert (GetPathParamsQuery("?;/;") == "/?;/;");
4633 	assert (GetPathParamsQuery("?;/#") == "/?;/");
4634 	assert (GetPathParamsQuery("?;/a") == "/?;/a");
4635 	assert (GetPathParamsQuery("?;?") == "/?;?");
4636 	assert (GetPathParamsQuery("?;?:") == "/?;?:");
4637 	assert (GetPathParamsQuery("?;?/") == "/?;?/");
4638 	assert (GetPathParamsQuery("?;??") == "/?;??");
4639 	assert (GetPathParamsQuery("?;?;") == "/?;?;");
4640 	assert (GetPathParamsQuery("?;?#") == "/?;?");
4641 	assert (GetPathParamsQuery("?;?a") == "/?;?a");
4642 	assert (GetPathParamsQuery("?;;") == "/?;;");
4643 	assert (GetPathParamsQuery("?;;:") == "/?;;:");
4644 	assert (GetPathParamsQuery("?;;/") == "/?;;/");
4645 	assert (GetPathParamsQuery("?;;?") == "/?;;?");
4646 	assert (GetPathParamsQuery("?;;;") == "/?;;;");
4647 	assert (GetPathParamsQuery("?;;#") == "/?;;");
4648 	assert (GetPathParamsQuery("?;;a") == "/?;;a");
4649 	assert (GetPathParamsQuery("?;#") == "/?;");
4650 	assert (GetPathParamsQuery("?;#:") == "/?;");
4651 	assert (GetPathParamsQuery("?;#/") == "/?;");
4652 	assert (GetPathParamsQuery("?;#?") == "/?;");
4653 	assert (GetPathParamsQuery("?;#;") == "/?;");
4654 	assert (GetPathParamsQuery("?;##") == "/?;");
4655 	assert (GetPathParamsQuery("?;#a") == "/?;");
4656 	assert (GetPathParamsQuery("?;a") == "/?;a");
4657 	assert (GetPathParamsQuery("?;a:") == "/?;a:");
4658 	assert (GetPathParamsQuery("?;a/") == "/?;a/");
4659 	assert (GetPathParamsQuery("?;a?") == "/?;a?");
4660 	assert (GetPathParamsQuery("?;a;") == "/?;a;");
4661 	assert (GetPathParamsQuery("?;a#") == "/?;a");
4662 	assert (GetPathParamsQuery("?;aa") == "/?;aa");
4663 	assert (GetPathParamsQuery("?#") == "/?");
4664 	assert (GetPathParamsQuery("?#:") == "/?");
4665 	assert (GetPathParamsQuery("?#::") == "/?");
4666 	assert (GetPathParamsQuery("?#:/") == "/?");
4667 	assert (GetPathParamsQuery("?#:?") == "/?");
4668 	assert (GetPathParamsQuery("?#:;") == "/?");
4669 	assert (GetPathParamsQuery("?#:#") == "/?");
4670 	assert (GetPathParamsQuery("?#:a") == "/?");
4671 	assert (GetPathParamsQuery("?#/") == "/?");
4672 	assert (GetPathParamsQuery("?#/:") == "/?");
4673 	assert (GetPathParamsQuery("?#//") == "/?");
4674 	assert (GetPathParamsQuery("?#/?") == "/?");
4675 	assert (GetPathParamsQuery("?#/;") == "/?");
4676 	assert (GetPathParamsQuery("?#/#") == "/?");
4677 	assert (GetPathParamsQuery("?#/a") == "/?");
4678 	assert (GetPathParamsQuery("?#?") == "/?");
4679 	assert (GetPathParamsQuery("?#?:") == "/?");
4680 	assert (GetPathParamsQuery("?#?/") == "/?");
4681 	assert (GetPathParamsQuery("?#??") == "/?");
4682 	assert (GetPathParamsQuery("?#?;") == "/?");
4683 	assert (GetPathParamsQuery("?#?#") == "/?");
4684 	assert (GetPathParamsQuery("?#?a") == "/?");
4685 	assert (GetPathParamsQuery("?#;") == "/?");
4686 	assert (GetPathParamsQuery("?#;:") == "/?");
4687 	assert (GetPathParamsQuery("?#;/") == "/?");
4688 	assert (GetPathParamsQuery("?#;?") == "/?");
4689 	assert (GetPathParamsQuery("?#;;") == "/?");
4690 	assert (GetPathParamsQuery("?#;#") == "/?");
4691 	assert (GetPathParamsQuery("?#;a") == "/?");
4692 	assert (GetPathParamsQuery("?##") == "/?");
4693 	assert (GetPathParamsQuery("?##:") == "/?");
4694 	assert (GetPathParamsQuery("?##/") == "/?");
4695 	assert (GetPathParamsQuery("?##?") == "/?");
4696 	assert (GetPathParamsQuery("?##;") == "/?");
4697 	assert (GetPathParamsQuery("?###") == "/?");
4698 	assert (GetPathParamsQuery("?##a") == "/?");
4699 	assert (GetPathParamsQuery("?#a") == "/?");
4700 	assert (GetPathParamsQuery("?#a:") == "/?");
4701 	assert (GetPathParamsQuery("?#a/") == "/?");
4702 	assert (GetPathParamsQuery("?#a?") == "/?");
4703 	assert (GetPathParamsQuery("?#a;") == "/?");
4704 	assert (GetPathParamsQuery("?#a#") == "/?");
4705 	assert (GetPathParamsQuery("?#aa") == "/?");
4706 	assert (GetPathParamsQuery("?a") == "/?a");
4707 	assert (GetPathParamsQuery("?a:") == "/?a:");
4708 	assert (GetPathParamsQuery("?a::") == "/?a::");
4709 	assert (GetPathParamsQuery("?a:/") == "/?a:/");
4710 	assert (GetPathParamsQuery("?a:?") == "/?a:?");
4711 	assert (GetPathParamsQuery("?a:;") == "/?a:;");
4712 	assert (GetPathParamsQuery("?a:#") == "/?a:");
4713 	assert (GetPathParamsQuery("?a:a") == "/?a:a");
4714 	assert (GetPathParamsQuery("?a/") == "/?a/");
4715 	assert (GetPathParamsQuery("?a/:") == "/?a/:");
4716 	assert (GetPathParamsQuery("?a//") == "/?a//");
4717 	assert (GetPathParamsQuery("?a/?") == "/?a/?");
4718 	assert (GetPathParamsQuery("?a/;") == "/?a/;");
4719 	assert (GetPathParamsQuery("?a/#") == "/?a/");
4720 	assert (GetPathParamsQuery("?a/a") == "/?a/a");
4721 	assert (GetPathParamsQuery("?a?") == "/?a?");
4722 	assert (GetPathParamsQuery("?a?:") == "/?a?:");
4723 	assert (GetPathParamsQuery("?a?/") == "/?a?/");
4724 	assert (GetPathParamsQuery("?a??") == "/?a??");
4725 	assert (GetPathParamsQuery("?a?;") == "/?a?;");
4726 	assert (GetPathParamsQuery("?a?#") == "/?a?");
4727 	assert (GetPathParamsQuery("?a?a") == "/?a?a");
4728 	assert (GetPathParamsQuery("?a;") == "/?a;");
4729 	assert (GetPathParamsQuery("?a;:") == "/?a;:");
4730 	assert (GetPathParamsQuery("?a;/") == "/?a;/");
4731 	assert (GetPathParamsQuery("?a;?") == "/?a;?");
4732 	assert (GetPathParamsQuery("?a;;") == "/?a;;");
4733 	assert (GetPathParamsQuery("?a;#") == "/?a;");
4734 	assert (GetPathParamsQuery("?a;a") == "/?a;a");
4735 	assert (GetPathParamsQuery("?a#") == "/?a");
4736 	assert (GetPathParamsQuery("?a#:") == "/?a");
4737 	assert (GetPathParamsQuery("?a#/") == "/?a");
4738 	assert (GetPathParamsQuery("?a#?") == "/?a");
4739 	assert (GetPathParamsQuery("?a#;") == "/?a");
4740 	assert (GetPathParamsQuery("?a##") == "/?a");
4741 	assert (GetPathParamsQuery("?a#a") == "/?a");
4742 	assert (GetPathParamsQuery("?aa") == "/?aa");
4743 	assert (GetPathParamsQuery("?aa:") == "/?aa:");
4744 	assert (GetPathParamsQuery("?aa/") == "/?aa/");
4745 	assert (GetPathParamsQuery("?aa?") == "/?aa?");
4746 	assert (GetPathParamsQuery("?aa;") == "/?aa;");
4747 	assert (GetPathParamsQuery("?aa#") == "/?aa");
4748 	assert (GetPathParamsQuery("?aaa") == "/?aaa");
4749 	assert (GetPathParamsQuery(";") == "/;");
4750 	assert (GetPathParamsQuery(";:") == "/;:");
4751 	assert (GetPathParamsQuery(";::") == "/;::");
4752 	assert (GetPathParamsQuery(";:::") == "/;:::");
4753 	assert (GetPathParamsQuery(";::/") == "/;::/");
4754 	assert (GetPathParamsQuery(";::?") == "/;::?");
4755 	assert (GetPathParamsQuery(";::;") == "/;::;");
4756 	assert (GetPathParamsQuery(";::#") == "/;::");
4757 	assert (GetPathParamsQuery(";::a") == "/;::a");
4758 	assert (GetPathParamsQuery(";:/") == "/;:/");
4759 	assert (GetPathParamsQuery(";:/:") == "/;:/:");
4760 	assert (GetPathParamsQuery(";://") == "/;://");
4761 	assert (GetPathParamsQuery(";:/?") == "/;:/?");
4762 	assert (GetPathParamsQuery(";:/;") == "/;:/;");
4763 	assert (GetPathParamsQuery(";:/#") == "/;:/");
4764 	assert (GetPathParamsQuery(";:/a") == "/;:/a");
4765 	assert (GetPathParamsQuery(";:?") == "/;:?");
4766 	assert (GetPathParamsQuery(";:?:") == "/;:?:");
4767 	assert (GetPathParamsQuery(";:?/") == "/;:?/");
4768 	assert (GetPathParamsQuery(";:??") == "/;:??");
4769 	assert (GetPathParamsQuery(";:?;") == "/;:?;");
4770 	assert (GetPathParamsQuery(";:?#") == "/;:?");
4771 	assert (GetPathParamsQuery(";:?a") == "/;:?a");
4772 	assert (GetPathParamsQuery(";:;") == "/;:;");
4773 	assert (GetPathParamsQuery(";:;:") == "/;:;:");
4774 	assert (GetPathParamsQuery(";:;/") == "/;:;/");
4775 	assert (GetPathParamsQuery(";:;?") == "/;:;?");
4776 	assert (GetPathParamsQuery(";:;;") == "/;:;;");
4777 	assert (GetPathParamsQuery(";:;#") == "/;:;");
4778 	assert (GetPathParamsQuery(";:;a") == "/;:;a");
4779 	assert (GetPathParamsQuery(";:#") == "/;:");
4780 	assert (GetPathParamsQuery(";:#:") == "/;:");
4781 	assert (GetPathParamsQuery(";:#/") == "/;:");
4782 	assert (GetPathParamsQuery(";:#?") == "/;:");
4783 	assert (GetPathParamsQuery(";:#;") == "/;:");
4784 	assert (GetPathParamsQuery(";:##") == "/;:");
4785 	assert (GetPathParamsQuery(";:#a") == "/;:");
4786 	assert (GetPathParamsQuery(";:a") == "/;:a");
4787 	assert (GetPathParamsQuery(";:a:") == "/;:a:");
4788 	assert (GetPathParamsQuery(";:a/") == "/;:a/");
4789 	assert (GetPathParamsQuery(";:a?") == "/;:a?");
4790 	assert (GetPathParamsQuery(";:a;") == "/;:a;");
4791 	assert (GetPathParamsQuery(";:a#") == "/;:a");
4792 	assert (GetPathParamsQuery(";:aa") == "/;:aa");
4793 	assert (GetPathParamsQuery(";/") == "/;/");
4794 	assert (GetPathParamsQuery(";/:") == "/;/:");
4795 	assert (GetPathParamsQuery(";/::") == "/;/::");
4796 	assert (GetPathParamsQuery(";/:/") == "/;/:/");
4797 	assert (GetPathParamsQuery(";/:?") == "/;/:?");
4798 	assert (GetPathParamsQuery(";/:;") == "/;/:;");
4799 	assert (GetPathParamsQuery(";/:#") == "/;/:");
4800 	assert (GetPathParamsQuery(";/:a") == "/;/:a");
4801 	assert (GetPathParamsQuery(";//") == "/;//");
4802 	assert (GetPathParamsQuery(";//:") == "/;//:");
4803 	assert (GetPathParamsQuery(";///") == "/;///");
4804 	assert (GetPathParamsQuery(";//?") == "/;//?");
4805 	assert (GetPathParamsQuery(";//;") == "/;//;");
4806 	assert (GetPathParamsQuery(";//#") == "/;//");
4807 	assert (GetPathParamsQuery(";//a") == "/;//a");
4808 	assert (GetPathParamsQuery(";/?") == "/;/?");
4809 	assert (GetPathParamsQuery(";/?:") == "/;/?:");
4810 	assert (GetPathParamsQuery(";/?/") == "/;/?/");
4811 	assert (GetPathParamsQuery(";/??") == "/;/??");
4812 	assert (GetPathParamsQuery(";/?;") == "/;/?;");
4813 	assert (GetPathParamsQuery(";/?#") == "/;/?");
4814 	assert (GetPathParamsQuery(";/?a") == "/;/?a");
4815 	assert (GetPathParamsQuery(";/;") == "/;/;");
4816 	assert (GetPathParamsQuery(";/;:") == "/;/;:");
4817 	assert (GetPathParamsQuery(";/;/") == "/;/;/");
4818 	assert (GetPathParamsQuery(";/;?") == "/;/;?");
4819 	assert (GetPathParamsQuery(";/;;") == "/;/;;");
4820 	assert (GetPathParamsQuery(";/;#") == "/;/;");
4821 	assert (GetPathParamsQuery(";/;a") == "/;/;a");
4822 	assert (GetPathParamsQuery(";/#") == "/;/");
4823 	assert (GetPathParamsQuery(";/#:") == "/;/");
4824 	assert (GetPathParamsQuery(";/#/") == "/;/");
4825 	assert (GetPathParamsQuery(";/#?") == "/;/");
4826 	assert (GetPathParamsQuery(";/#;") == "/;/");
4827 	assert (GetPathParamsQuery(";/##") == "/;/");
4828 	assert (GetPathParamsQuery(";/#a") == "/;/");
4829 	assert (GetPathParamsQuery(";/a") == "/;/a");
4830 	assert (GetPathParamsQuery(";/a:") == "/;/a:");
4831 	assert (GetPathParamsQuery(";/a/") == "/;/a/");
4832 	assert (GetPathParamsQuery(";/a?") == "/;/a?");
4833 	assert (GetPathParamsQuery(";/a;") == "/;/a;");
4834 	assert (GetPathParamsQuery(";/a#") == "/;/a");
4835 	assert (GetPathParamsQuery(";/aa") == "/;/aa");
4836 	assert (GetPathParamsQuery(";?") == "/;?");
4837 	assert (GetPathParamsQuery(";?:") == "/;?:");
4838 	assert (GetPathParamsQuery(";?::") == "/;?::");
4839 	assert (GetPathParamsQuery(";?:/") == "/;?:/");
4840 	assert (GetPathParamsQuery(";?:?") == "/;?:?");
4841 	assert (GetPathParamsQuery(";?:;") == "/;?:;");
4842 	assert (GetPathParamsQuery(";?:#") == "/;?:");
4843 	assert (GetPathParamsQuery(";?:a") == "/;?:a");
4844 	assert (GetPathParamsQuery(";?/") == "/;?/");
4845 	assert (GetPathParamsQuery(";?/:") == "/;?/:");
4846 	assert (GetPathParamsQuery(";?//") == "/;?//");
4847 	assert (GetPathParamsQuery(";?/?") == "/;?/?");
4848 	assert (GetPathParamsQuery(";?/;") == "/;?/;");
4849 	assert (GetPathParamsQuery(";?/#") == "/;?/");
4850 	assert (GetPathParamsQuery(";?/a") == "/;?/a");
4851 	assert (GetPathParamsQuery(";??") == "/;??");
4852 	assert (GetPathParamsQuery(";??:") == "/;??:");
4853 	assert (GetPathParamsQuery(";??/") == "/;??/");
4854 	assert (GetPathParamsQuery(";???") == "/;???");
4855 	assert (GetPathParamsQuery(";??;") == "/;??;");
4856 	assert (GetPathParamsQuery(";??#") == "/;??");
4857 	assert (GetPathParamsQuery(";??a") == "/;??a");
4858 	assert (GetPathParamsQuery(";?;") == "/;?;");
4859 	assert (GetPathParamsQuery(";?;:") == "/;?;:");
4860 	assert (GetPathParamsQuery(";?;/") == "/;?;/");
4861 	assert (GetPathParamsQuery(";?;?") == "/;?;?");
4862 	assert (GetPathParamsQuery(";?;;") == "/;?;;");
4863 	assert (GetPathParamsQuery(";?;#") == "/;?;");
4864 	assert (GetPathParamsQuery(";?;a") == "/;?;a");
4865 	assert (GetPathParamsQuery(";?#") == "/;?");
4866 	assert (GetPathParamsQuery(";?#:") == "/;?");
4867 	assert (GetPathParamsQuery(";?#/") == "/;?");
4868 	assert (GetPathParamsQuery(";?#?") == "/;?");
4869 	assert (GetPathParamsQuery(";?#;") == "/;?");
4870 	assert (GetPathParamsQuery(";?##") == "/;?");
4871 	assert (GetPathParamsQuery(";?#a") == "/;?");
4872 	assert (GetPathParamsQuery(";?a") == "/;?a");
4873 	assert (GetPathParamsQuery(";?a:") == "/;?a:");
4874 	assert (GetPathParamsQuery(";?a/") == "/;?a/");
4875 	assert (GetPathParamsQuery(";?a?") == "/;?a?");
4876 	assert (GetPathParamsQuery(";?a;") == "/;?a;");
4877 	assert (GetPathParamsQuery(";?a#") == "/;?a");
4878 	assert (GetPathParamsQuery(";?aa") == "/;?aa");
4879 	assert (GetPathParamsQuery(";;") == "/;;");
4880 	assert (GetPathParamsQuery(";;:") == "/;;:");
4881 	assert (GetPathParamsQuery(";;::") == "/;;::");
4882 	assert (GetPathParamsQuery(";;:/") == "/;;:/");
4883 	assert (GetPathParamsQuery(";;:?") == "/;;:?");
4884 	assert (GetPathParamsQuery(";;:;") == "/;;:;");
4885 	assert (GetPathParamsQuery(";;:#") == "/;;:");
4886 	assert (GetPathParamsQuery(";;:a") == "/;;:a");
4887 	assert (GetPathParamsQuery(";;/") == "/;;/");
4888 	assert (GetPathParamsQuery(";;/:") == "/;;/:");
4889 	assert (GetPathParamsQuery(";;//") == "/;;//");
4890 	assert (GetPathParamsQuery(";;/?") == "/;;/?");
4891 	assert (GetPathParamsQuery(";;/;") == "/;;/;");
4892 	assert (GetPathParamsQuery(";;/#") == "/;;/");
4893 	assert (GetPathParamsQuery(";;/a") == "/;;/a");
4894 	assert (GetPathParamsQuery(";;?") == "/;;?");
4895 	assert (GetPathParamsQuery(";;?:") == "/;;?:");
4896 	assert (GetPathParamsQuery(";;?/") == "/;;?/");
4897 	assert (GetPathParamsQuery(";;??") == "/;;??");
4898 	assert (GetPathParamsQuery(";;?;") == "/;;?;");
4899 	assert (GetPathParamsQuery(";;?#") == "/;;?");
4900 	assert (GetPathParamsQuery(";;?a") == "/;;?a");
4901 	assert (GetPathParamsQuery(";;;") == "/;;;");
4902 	assert (GetPathParamsQuery(";;;:") == "/;;;:");
4903 	assert (GetPathParamsQuery(";;;/") == "/;;;/");
4904 	assert (GetPathParamsQuery(";;;?") == "/;;;?");
4905 	assert (GetPathParamsQuery(";;;;") == "/;;;;");
4906 	assert (GetPathParamsQuery(";;;#") == "/;;;");
4907 	assert (GetPathParamsQuery(";;;a") == "/;;;a");
4908 	assert (GetPathParamsQuery(";;#") == "/;;");
4909 	assert (GetPathParamsQuery(";;#:") == "/;;");
4910 	assert (GetPathParamsQuery(";;#/") == "/;;");
4911 	assert (GetPathParamsQuery(";;#?") == "/;;");
4912 	assert (GetPathParamsQuery(";;#;") == "/;;");
4913 	assert (GetPathParamsQuery(";;##") == "/;;");
4914 	assert (GetPathParamsQuery(";;#a") == "/;;");
4915 	assert (GetPathParamsQuery(";;a") == "/;;a");
4916 	assert (GetPathParamsQuery(";;a:") == "/;;a:");
4917 	assert (GetPathParamsQuery(";;a/") == "/;;a/");
4918 	assert (GetPathParamsQuery(";;a?") == "/;;a?");
4919 	assert (GetPathParamsQuery(";;a;") == "/;;a;");
4920 	assert (GetPathParamsQuery(";;a#") == "/;;a");
4921 	assert (GetPathParamsQuery(";;aa") == "/;;aa");
4922 	assert (GetPathParamsQuery(";#") == "/;");
4923 	assert (GetPathParamsQuery(";#:") == "/;");
4924 	assert (GetPathParamsQuery(";#::") == "/;");
4925 	assert (GetPathParamsQuery(";#:/") == "/;");
4926 	assert (GetPathParamsQuery(";#:?") == "/;");
4927 	assert (GetPathParamsQuery(";#:;") == "/;");
4928 	assert (GetPathParamsQuery(";#:#") == "/;");
4929 	assert (GetPathParamsQuery(";#:a") == "/;");
4930 	assert (GetPathParamsQuery(";#/") == "/;");
4931 	assert (GetPathParamsQuery(";#/:") == "/;");
4932 	assert (GetPathParamsQuery(";#//") == "/;");
4933 	assert (GetPathParamsQuery(";#/?") == "/;");
4934 	assert (GetPathParamsQuery(";#/;") == "/;");
4935 	assert (GetPathParamsQuery(";#/#") == "/;");
4936 	assert (GetPathParamsQuery(";#/a") == "/;");
4937 	assert (GetPathParamsQuery(";#?") == "/;");
4938 	assert (GetPathParamsQuery(";#?:") == "/;");
4939 	assert (GetPathParamsQuery(";#?/") == "/;");
4940 	assert (GetPathParamsQuery(";#??") == "/;");
4941 	assert (GetPathParamsQuery(";#?;") == "/;");
4942 	assert (GetPathParamsQuery(";#?#") == "/;");
4943 	assert (GetPathParamsQuery(";#?a") == "/;");
4944 	assert (GetPathParamsQuery(";#;") == "/;");
4945 	assert (GetPathParamsQuery(";#;:") == "/;");
4946 	assert (GetPathParamsQuery(";#;/") == "/;");
4947 	assert (GetPathParamsQuery(";#;?") == "/;");
4948 	assert (GetPathParamsQuery(";#;;") == "/;");
4949 	assert (GetPathParamsQuery(";#;#") == "/;");
4950 	assert (GetPathParamsQuery(";#;a") == "/;");
4951 	assert (GetPathParamsQuery(";##") == "/;");
4952 	assert (GetPathParamsQuery(";##:") == "/;");
4953 	assert (GetPathParamsQuery(";##/") == "/;");
4954 	assert (GetPathParamsQuery(";##?") == "/;");
4955 	assert (GetPathParamsQuery(";##;") == "/;");
4956 	assert (GetPathParamsQuery(";###") == "/;");
4957 	assert (GetPathParamsQuery(";##a") == "/;");
4958 	assert (GetPathParamsQuery(";#a") == "/;");
4959 	assert (GetPathParamsQuery(";#a:") == "/;");
4960 	assert (GetPathParamsQuery(";#a/") == "/;");
4961 	assert (GetPathParamsQuery(";#a?") == "/;");
4962 	assert (GetPathParamsQuery(";#a;") == "/;");
4963 	assert (GetPathParamsQuery(";#a#") == "/;");
4964 	assert (GetPathParamsQuery(";#aa") == "/;");
4965 	assert (GetPathParamsQuery(";a") == "/;a");
4966 	assert (GetPathParamsQuery(";a:") == "/;a:");
4967 	assert (GetPathParamsQuery(";a::") == "/;a::");
4968 	assert (GetPathParamsQuery(";a:/") == "/;a:/");
4969 	assert (GetPathParamsQuery(";a:?") == "/;a:?");
4970 	assert (GetPathParamsQuery(";a:;") == "/;a:;");
4971 	assert (GetPathParamsQuery(";a:#") == "/;a:");
4972 	assert (GetPathParamsQuery(";a:a") == "/;a:a");
4973 	assert (GetPathParamsQuery(";a/") == "/;a/");
4974 	assert (GetPathParamsQuery(";a/:") == "/;a/:");
4975 	assert (GetPathParamsQuery(";a//") == "/;a//");
4976 	assert (GetPathParamsQuery(";a/?") == "/;a/?");
4977 	assert (GetPathParamsQuery(";a/;") == "/;a/;");
4978 	assert (GetPathParamsQuery(";a/#") == "/;a/");
4979 	assert (GetPathParamsQuery(";a/a") == "/;a/a");
4980 	assert (GetPathParamsQuery(";a?") == "/;a?");
4981 	assert (GetPathParamsQuery(";a?:") == "/;a?:");
4982 	assert (GetPathParamsQuery(";a?/") == "/;a?/");
4983 	assert (GetPathParamsQuery(";a??") == "/;a??");
4984 	assert (GetPathParamsQuery(";a?;") == "/;a?;");
4985 	assert (GetPathParamsQuery(";a?#") == "/;a?");
4986 	assert (GetPathParamsQuery(";a?a") == "/;a?a");
4987 	assert (GetPathParamsQuery(";a;") == "/;a;");
4988 	assert (GetPathParamsQuery(";a;:") == "/;a;:");
4989 	assert (GetPathParamsQuery(";a;/") == "/;a;/");
4990 	assert (GetPathParamsQuery(";a;?") == "/;a;?");
4991 	assert (GetPathParamsQuery(";a;;") == "/;a;;");
4992 	assert (GetPathParamsQuery(";a;#") == "/;a;");
4993 	assert (GetPathParamsQuery(";a;a") == "/;a;a");
4994 	assert (GetPathParamsQuery(";a#") == "/;a");
4995 	assert (GetPathParamsQuery(";a#:") == "/;a");
4996 	assert (GetPathParamsQuery(";a#/") == "/;a");
4997 	assert (GetPathParamsQuery(";a#?") == "/;a");
4998 	assert (GetPathParamsQuery(";a#;") == "/;a");
4999 	assert (GetPathParamsQuery(";a##") == "/;a");
5000 	assert (GetPathParamsQuery(";a#a") == "/;a");
5001 	assert (GetPathParamsQuery(";aa") == "/;aa");
5002 	assert (GetPathParamsQuery(";aa:") == "/;aa:");
5003 	assert (GetPathParamsQuery(";aa/") == "/;aa/");
5004 	assert (GetPathParamsQuery(";aa?") == "/;aa?");
5005 	assert (GetPathParamsQuery(";aa;") == "/;aa;");
5006 	assert (GetPathParamsQuery(";aa#") == "/;aa");
5007 	assert (GetPathParamsQuery(";aaa") == "/;aaa");
5008 	assert (GetPathParamsQuery("#") == "/");
5009 	assert (GetPathParamsQuery("#:") == "/");
5010 	assert (GetPathParamsQuery("#::") == "/");
5011 	assert (GetPathParamsQuery("#:::") == "/");
5012 	assert (GetPathParamsQuery("#::/") == "/");
5013 	assert (GetPathParamsQuery("#::?") == "/");
5014 	assert (GetPathParamsQuery("#::;") == "/");
5015 	assert (GetPathParamsQuery("#::#") == "/");
5016 	assert (GetPathParamsQuery("#::a") == "/");
5017 	assert (GetPathParamsQuery("#:/") == "/");
5018 	assert (GetPathParamsQuery("#:/:") == "/");
5019 	assert (GetPathParamsQuery("#://") == "/");
5020 	assert (GetPathParamsQuery("#:/?") == "/");
5021 	assert (GetPathParamsQuery("#:/;") == "/");
5022 	assert (GetPathParamsQuery("#:/#") == "/");
5023 	assert (GetPathParamsQuery("#:/a") == "/");
5024 	assert (GetPathParamsQuery("#:?") == "/");
5025 	assert (GetPathParamsQuery("#:?:") == "/");
5026 	assert (GetPathParamsQuery("#:?/") == "/");
5027 	assert (GetPathParamsQuery("#:??") == "/");
5028 	assert (GetPathParamsQuery("#:?;") == "/");
5029 	assert (GetPathParamsQuery("#:?#") == "/");
5030 	assert (GetPathParamsQuery("#:?a") == "/");
5031 	assert (GetPathParamsQuery("#:;") == "/");
5032 	assert (GetPathParamsQuery("#:;:") == "/");
5033 	assert (GetPathParamsQuery("#:;/") == "/");
5034 	assert (GetPathParamsQuery("#:;?") == "/");
5035 	assert (GetPathParamsQuery("#:;;") == "/");
5036 	assert (GetPathParamsQuery("#:;#") == "/");
5037 	assert (GetPathParamsQuery("#:;a") == "/");
5038 	assert (GetPathParamsQuery("#:#") == "/");
5039 	assert (GetPathParamsQuery("#:#:") == "/");
5040 	assert (GetPathParamsQuery("#:#/") == "/");
5041 	assert (GetPathParamsQuery("#:#?") == "/");
5042 	assert (GetPathParamsQuery("#:#;") == "/");
5043 	assert (GetPathParamsQuery("#:##") == "/");
5044 	assert (GetPathParamsQuery("#:#a") == "/");
5045 	assert (GetPathParamsQuery("#:a") == "/");
5046 	assert (GetPathParamsQuery("#:a:") == "/");
5047 	assert (GetPathParamsQuery("#:a/") == "/");
5048 	assert (GetPathParamsQuery("#:a?") == "/");
5049 	assert (GetPathParamsQuery("#:a;") == "/");
5050 	assert (GetPathParamsQuery("#:a#") == "/");
5051 	assert (GetPathParamsQuery("#:aa") == "/");
5052 	assert (GetPathParamsQuery("#/") == "/");
5053 	assert (GetPathParamsQuery("#/:") == "/");
5054 	assert (GetPathParamsQuery("#/::") == "/");
5055 	assert (GetPathParamsQuery("#/:/") == "/");
5056 	assert (GetPathParamsQuery("#/:?") == "/");
5057 	assert (GetPathParamsQuery("#/:;") == "/");
5058 	assert (GetPathParamsQuery("#/:#") == "/");
5059 	assert (GetPathParamsQuery("#/:a") == "/");
5060 	assert (GetPathParamsQuery("#//") == "/");
5061 	assert (GetPathParamsQuery("#//:") == "/");
5062 	assert (GetPathParamsQuery("#///") == "/");
5063 	assert (GetPathParamsQuery("#//?") == "/");
5064 	assert (GetPathParamsQuery("#//;") == "/");
5065 	assert (GetPathParamsQuery("#//#") == "/");
5066 	assert (GetPathParamsQuery("#//a") == "/");
5067 	assert (GetPathParamsQuery("#/?") == "/");
5068 	assert (GetPathParamsQuery("#/?:") == "/");
5069 	assert (GetPathParamsQuery("#/?/") == "/");
5070 	assert (GetPathParamsQuery("#/??") == "/");
5071 	assert (GetPathParamsQuery("#/?;") == "/");
5072 	assert (GetPathParamsQuery("#/?#") == "/");
5073 	assert (GetPathParamsQuery("#/?a") == "/");
5074 	assert (GetPathParamsQuery("#/;") == "/");
5075 	assert (GetPathParamsQuery("#/;:") == "/");
5076 	assert (GetPathParamsQuery("#/;/") == "/");
5077 	assert (GetPathParamsQuery("#/;?") == "/");
5078 	assert (GetPathParamsQuery("#/;;") == "/");
5079 	assert (GetPathParamsQuery("#/;#") == "/");
5080 	assert (GetPathParamsQuery("#/;a") == "/");
5081 	assert (GetPathParamsQuery("#/#") == "/");
5082 	assert (GetPathParamsQuery("#/#:") == "/");
5083 	assert (GetPathParamsQuery("#/#/") == "/");
5084 	assert (GetPathParamsQuery("#/#?") == "/");
5085 	assert (GetPathParamsQuery("#/#;") == "/");
5086 	assert (GetPathParamsQuery("#/##") == "/");
5087 	assert (GetPathParamsQuery("#/#a") == "/");
5088 	assert (GetPathParamsQuery("#/a") == "/");
5089 	assert (GetPathParamsQuery("#/a:") == "/");
5090 	assert (GetPathParamsQuery("#/a/") == "/");
5091 	assert (GetPathParamsQuery("#/a?") == "/");
5092 	assert (GetPathParamsQuery("#/a;") == "/");
5093 	assert (GetPathParamsQuery("#/a#") == "/");
5094 	assert (GetPathParamsQuery("#/aa") == "/");
5095 	assert (GetPathParamsQuery("#?") == "/");
5096 	assert (GetPathParamsQuery("#?:") == "/");
5097 	assert (GetPathParamsQuery("#?::") == "/");
5098 	assert (GetPathParamsQuery("#?:/") == "/");
5099 	assert (GetPathParamsQuery("#?:?") == "/");
5100 	assert (GetPathParamsQuery("#?:;") == "/");
5101 	assert (GetPathParamsQuery("#?:#") == "/");
5102 	assert (GetPathParamsQuery("#?:a") == "/");
5103 	assert (GetPathParamsQuery("#?/") == "/");
5104 	assert (GetPathParamsQuery("#?/:") == "/");
5105 	assert (GetPathParamsQuery("#?//") == "/");
5106 	assert (GetPathParamsQuery("#?/?") == "/");
5107 	assert (GetPathParamsQuery("#?/;") == "/");
5108 	assert (GetPathParamsQuery("#?/#") == "/");
5109 	assert (GetPathParamsQuery("#?/a") == "/");
5110 	assert (GetPathParamsQuery("#??") == "/");
5111 	assert (GetPathParamsQuery("#??:") == "/");
5112 	assert (GetPathParamsQuery("#??/") == "/");
5113 	assert (GetPathParamsQuery("#???") == "/");
5114 	assert (GetPathParamsQuery("#??;") == "/");
5115 	assert (GetPathParamsQuery("#??#") == "/");
5116 	assert (GetPathParamsQuery("#??a") == "/");
5117 	assert (GetPathParamsQuery("#?;") == "/");
5118 	assert (GetPathParamsQuery("#?;:") == "/");
5119 	assert (GetPathParamsQuery("#?;/") == "/");
5120 	assert (GetPathParamsQuery("#?;?") == "/");
5121 	assert (GetPathParamsQuery("#?;;") == "/");
5122 	assert (GetPathParamsQuery("#?;#") == "/");
5123 	assert (GetPathParamsQuery("#?;a") == "/");
5124 	assert (GetPathParamsQuery("#?#") == "/");
5125 	assert (GetPathParamsQuery("#?#:") == "/");
5126 	assert (GetPathParamsQuery("#?#/") == "/");
5127 	assert (GetPathParamsQuery("#?#?") == "/");
5128 	assert (GetPathParamsQuery("#?#;") == "/");
5129 	assert (GetPathParamsQuery("#?##") == "/");
5130 	assert (GetPathParamsQuery("#?#a") == "/");
5131 	assert (GetPathParamsQuery("#?a") == "/");
5132 	assert (GetPathParamsQuery("#?a:") == "/");
5133 	assert (GetPathParamsQuery("#?a/") == "/");
5134 	assert (GetPathParamsQuery("#?a?") == "/");
5135 	assert (GetPathParamsQuery("#?a;") == "/");
5136 	assert (GetPathParamsQuery("#?a#") == "/");
5137 	assert (GetPathParamsQuery("#?aa") == "/");
5138 	assert (GetPathParamsQuery("#;") == "/");
5139 	assert (GetPathParamsQuery("#;:") == "/");
5140 	assert (GetPathParamsQuery("#;::") == "/");
5141 	assert (GetPathParamsQuery("#;:/") == "/");
5142 	assert (GetPathParamsQuery("#;:?") == "/");
5143 	assert (GetPathParamsQuery("#;:;") == "/");
5144 	assert (GetPathParamsQuery("#;:#") == "/");
5145 	assert (GetPathParamsQuery("#;:a") == "/");
5146 	assert (GetPathParamsQuery("#;/") == "/");
5147 	assert (GetPathParamsQuery("#;/:") == "/");
5148 	assert (GetPathParamsQuery("#;//") == "/");
5149 	assert (GetPathParamsQuery("#;/?") == "/");
5150 	assert (GetPathParamsQuery("#;/;") == "/");
5151 	assert (GetPathParamsQuery("#;/#") == "/");
5152 	assert (GetPathParamsQuery("#;/a") == "/");
5153 	assert (GetPathParamsQuery("#;?") == "/");
5154 	assert (GetPathParamsQuery("#;?:") == "/");
5155 	assert (GetPathParamsQuery("#;?/") == "/");
5156 	assert (GetPathParamsQuery("#;??") == "/");
5157 	assert (GetPathParamsQuery("#;?;") == "/");
5158 	assert (GetPathParamsQuery("#;?#") == "/");
5159 	assert (GetPathParamsQuery("#;?a") == "/");
5160 	assert (GetPathParamsQuery("#;;") == "/");
5161 	assert (GetPathParamsQuery("#;;:") == "/");
5162 	assert (GetPathParamsQuery("#;;/") == "/");
5163 	assert (GetPathParamsQuery("#;;?") == "/");
5164 	assert (GetPathParamsQuery("#;;;") == "/");
5165 	assert (GetPathParamsQuery("#;;#") == "/");
5166 	assert (GetPathParamsQuery("#;;a") == "/");
5167 	assert (GetPathParamsQuery("#;#") == "/");
5168 	assert (GetPathParamsQuery("#;#:") == "/");
5169 	assert (GetPathParamsQuery("#;#/") == "/");
5170 	assert (GetPathParamsQuery("#;#?") == "/");
5171 	assert (GetPathParamsQuery("#;#;") == "/");
5172 	assert (GetPathParamsQuery("#;##") == "/");
5173 	assert (GetPathParamsQuery("#;#a") == "/");
5174 	assert (GetPathParamsQuery("#;a") == "/");
5175 	assert (GetPathParamsQuery("#;a:") == "/");
5176 	assert (GetPathParamsQuery("#;a/") == "/");
5177 	assert (GetPathParamsQuery("#;a?") == "/");
5178 	assert (GetPathParamsQuery("#;a;") == "/");
5179 	assert (GetPathParamsQuery("#;a#") == "/");
5180 	assert (GetPathParamsQuery("#;aa") == "/");
5181 	assert (GetPathParamsQuery("##") == "/");
5182 	assert (GetPathParamsQuery("##:") == "/");
5183 	assert (GetPathParamsQuery("##::") == "/");
5184 	assert (GetPathParamsQuery("##:/") == "/");
5185 	assert (GetPathParamsQuery("##:?") == "/");
5186 	assert (GetPathParamsQuery("##:;") == "/");
5187 	assert (GetPathParamsQuery("##:#") == "/");
5188 	assert (GetPathParamsQuery("##:a") == "/");
5189 	assert (GetPathParamsQuery("##/") == "/");
5190 	assert (GetPathParamsQuery("##/:") == "/");
5191 	assert (GetPathParamsQuery("##//") == "/");
5192 	assert (GetPathParamsQuery("##/?") == "/");
5193 	assert (GetPathParamsQuery("##/;") == "/");
5194 	assert (GetPathParamsQuery("##/#") == "/");
5195 	assert (GetPathParamsQuery("##/a") == "/");
5196 	assert (GetPathParamsQuery("##?") == "/");
5197 	assert (GetPathParamsQuery("##?:") == "/");
5198 	assert (GetPathParamsQuery("##?/") == "/");
5199 	assert (GetPathParamsQuery("##??") == "/");
5200 	assert (GetPathParamsQuery("##?;") == "/");
5201 	assert (GetPathParamsQuery("##?#") == "/");
5202 	assert (GetPathParamsQuery("##?a") == "/");
5203 	assert (GetPathParamsQuery("##;") == "/");
5204 	assert (GetPathParamsQuery("##;:") == "/");
5205 	assert (GetPathParamsQuery("##;/") == "/");
5206 	assert (GetPathParamsQuery("##;?") == "/");
5207 	assert (GetPathParamsQuery("##;;") == "/");
5208 	assert (GetPathParamsQuery("##;#") == "/");
5209 	assert (GetPathParamsQuery("##;a") == "/");
5210 	assert (GetPathParamsQuery("###") == "/");
5211 	assert (GetPathParamsQuery("###:") == "/");
5212 	assert (GetPathParamsQuery("###/") == "/");
5213 	assert (GetPathParamsQuery("###?") == "/");
5214 	assert (GetPathParamsQuery("###;") == "/");
5215 	assert (GetPathParamsQuery("####") == "/");
5216 	assert (GetPathParamsQuery("###a") == "/");
5217 	assert (GetPathParamsQuery("##a") == "/");
5218 	assert (GetPathParamsQuery("##a:") == "/");
5219 	assert (GetPathParamsQuery("##a/") == "/");
5220 	assert (GetPathParamsQuery("##a?") == "/");
5221 	assert (GetPathParamsQuery("##a;") == "/");
5222 	assert (GetPathParamsQuery("##a#") == "/");
5223 	assert (GetPathParamsQuery("##aa") == "/");
5224 	assert (GetPathParamsQuery("#a") == "/");
5225 	assert (GetPathParamsQuery("#a:") == "/");
5226 	assert (GetPathParamsQuery("#a::") == "/");
5227 	assert (GetPathParamsQuery("#a:/") == "/");
5228 	assert (GetPathParamsQuery("#a:?") == "/");
5229 	assert (GetPathParamsQuery("#a:;") == "/");
5230 	assert (GetPathParamsQuery("#a:#") == "/");
5231 	assert (GetPathParamsQuery("#a:a") == "/");
5232 	assert (GetPathParamsQuery("#a/") == "/");
5233 	assert (GetPathParamsQuery("#a/:") == "/");
5234 	assert (GetPathParamsQuery("#a//") == "/");
5235 	assert (GetPathParamsQuery("#a/?") == "/");
5236 	assert (GetPathParamsQuery("#a/;") == "/");
5237 	assert (GetPathParamsQuery("#a/#") == "/");
5238 	assert (GetPathParamsQuery("#a/a") == "/");
5239 	assert (GetPathParamsQuery("#a?") == "/");
5240 	assert (GetPathParamsQuery("#a?:") == "/");
5241 	assert (GetPathParamsQuery("#a?/") == "/");
5242 	assert (GetPathParamsQuery("#a??") == "/");
5243 	assert (GetPathParamsQuery("#a?;") == "/");
5244 	assert (GetPathParamsQuery("#a?#") == "/");
5245 	assert (GetPathParamsQuery("#a?a") == "/");
5246 	assert (GetPathParamsQuery("#a;") == "/");
5247 	assert (GetPathParamsQuery("#a;:") == "/");
5248 	assert (GetPathParamsQuery("#a;/") == "/");
5249 	assert (GetPathParamsQuery("#a;?") == "/");
5250 	assert (GetPathParamsQuery("#a;;") == "/");
5251 	assert (GetPathParamsQuery("#a;#") == "/");
5252 	assert (GetPathParamsQuery("#a;a") == "/");
5253 	assert (GetPathParamsQuery("#a#") == "/");
5254 	assert (GetPathParamsQuery("#a#:") == "/");
5255 	assert (GetPathParamsQuery("#a#/") == "/");
5256 	assert (GetPathParamsQuery("#a#?") == "/");
5257 	assert (GetPathParamsQuery("#a#;") == "/");
5258 	assert (GetPathParamsQuery("#a##") == "/");
5259 	assert (GetPathParamsQuery("#a#a") == "/");
5260 	assert (GetPathParamsQuery("#aa") == "/");
5261 	assert (GetPathParamsQuery("#aa:") == "/");
5262 	assert (GetPathParamsQuery("#aa/") == "/");
5263 	assert (GetPathParamsQuery("#aa?") == "/");
5264 	assert (GetPathParamsQuery("#aa;") == "/");
5265 	assert (GetPathParamsQuery("#aa#") == "/");
5266 	assert (GetPathParamsQuery("#aaa") == "/");
5267 	assert (GetPathParamsQuery("a") == "/");
5268 	assert (GetPathParamsQuery("a:") == "/");
5269 	assert (GetPathParamsQuery("a::") == "/");
5270 	assert (GetPathParamsQuery("a:::") == "/");
5271 	assert (GetPathParamsQuery("a::/") == "/");
5272 	assert (GetPathParamsQuery("a::?") == "/?");
5273 	assert (GetPathParamsQuery("a::;") == "/;");
5274 	assert (GetPathParamsQuery("a::#") == "/");
5275 	assert (GetPathParamsQuery("a::a") == "/");
5276 	assert (GetPathParamsQuery("a:/") == "/");
5277 	assert (GetPathParamsQuery("a:/:") == "/:");
5278 	assert (GetPathParamsQuery("a://") == "/");
5279 	assert (GetPathParamsQuery("a:/?") == "/?");
5280 	assert (GetPathParamsQuery("a:/;") == "/;");
5281 	assert (GetPathParamsQuery("a:/#") == "/");
5282 	assert (GetPathParamsQuery("a:/a") == "/a");
5283 	assert (GetPathParamsQuery("a:?") == "/?");
5284 	assert (GetPathParamsQuery("a:?:") == "/?:");
5285 	assert (GetPathParamsQuery("a:?/") == "/?/");
5286 	assert (GetPathParamsQuery("a:??") == "/??");
5287 	assert (GetPathParamsQuery("a:?;") == "/?;");
5288 	assert (GetPathParamsQuery("a:?#") == "/?");
5289 	assert (GetPathParamsQuery("a:?a") == "/?a");
5290 	assert (GetPathParamsQuery("a:;") == "/;");
5291 	assert (GetPathParamsQuery("a:;:") == "/;:");
5292 	assert (GetPathParamsQuery("a:;/") == "/;/");
5293 	assert (GetPathParamsQuery("a:;?") == "/;?");
5294 	assert (GetPathParamsQuery("a:;;") == "/;;");
5295 	assert (GetPathParamsQuery("a:;#") == "/;");
5296 	assert (GetPathParamsQuery("a:;a") == "/;a");
5297 	assert (GetPathParamsQuery("a:#") == "/");
5298 	assert (GetPathParamsQuery("a:#:") == "/");
5299 	assert (GetPathParamsQuery("a:#/") == "/");
5300 	assert (GetPathParamsQuery("a:#?") == "/");
5301 	assert (GetPathParamsQuery("a:#;") == "/");
5302 	assert (GetPathParamsQuery("a:##") == "/");
5303 	assert (GetPathParamsQuery("a:#a") == "/");
5304 	assert (GetPathParamsQuery("a:a") == "/");
5305 	assert (GetPathParamsQuery("a:a:") == "/");
5306 	assert (GetPathParamsQuery("a:a/") == "/");
5307 	assert (GetPathParamsQuery("a:a?") == "/?");
5308 	assert (GetPathParamsQuery("a:a;") == "/;");
5309 	assert (GetPathParamsQuery("a:a#") == "/");
5310 	assert (GetPathParamsQuery("a:aa") == "/");
5311 	assert (GetPathParamsQuery("a/") == "/");
5312 	assert (GetPathParamsQuery("a/:") == "/:");
5313 	assert (GetPathParamsQuery("a/::") == "/::");
5314 	assert (GetPathParamsQuery("a/:/") == "/:/");
5315 	assert (GetPathParamsQuery("a/:?") == "/:?");
5316 	assert (GetPathParamsQuery("a/:;") == "/:;");
5317 	assert (GetPathParamsQuery("a/:#") == "/:");
5318 	assert (GetPathParamsQuery("a/:a") == "/:a");
5319 	assert (GetPathParamsQuery("a//") == "//");
5320 	assert (GetPathParamsQuery("a//:") == "//:");
5321 	assert (GetPathParamsQuery("a///") == "///");
5322 	assert (GetPathParamsQuery("a//?") == "//?");
5323 	assert (GetPathParamsQuery("a//;") == "//;");
5324 	assert (GetPathParamsQuery("a//#") == "//");
5325 	assert (GetPathParamsQuery("a//a") == "//a");
5326 	assert (GetPathParamsQuery("a/?") == "/?");
5327 	assert (GetPathParamsQuery("a/?:") == "/?:");
5328 	assert (GetPathParamsQuery("a/?/") == "/?/");
5329 	assert (GetPathParamsQuery("a/??") == "/??");
5330 	assert (GetPathParamsQuery("a/?;") == "/?;");
5331 	assert (GetPathParamsQuery("a/?#") == "/?");
5332 	assert (GetPathParamsQuery("a/?a") == "/?a");
5333 	assert (GetPathParamsQuery("a/;") == "/;");
5334 	assert (GetPathParamsQuery("a/;:") == "/;:");
5335 	assert (GetPathParamsQuery("a/;/") == "/;/");
5336 	assert (GetPathParamsQuery("a/;?") == "/;?");
5337 	assert (GetPathParamsQuery("a/;;") == "/;;");
5338 	assert (GetPathParamsQuery("a/;#") == "/;");
5339 	assert (GetPathParamsQuery("a/;a") == "/;a");
5340 	assert (GetPathParamsQuery("a/#") == "/");
5341 	assert (GetPathParamsQuery("a/#:") == "/");
5342 	assert (GetPathParamsQuery("a/#/") == "/");
5343 	assert (GetPathParamsQuery("a/#?") == "/");
5344 	assert (GetPathParamsQuery("a/#;") == "/");
5345 	assert (GetPathParamsQuery("a/##") == "/");
5346 	assert (GetPathParamsQuery("a/#a") == "/");
5347 	assert (GetPathParamsQuery("a/a") == "/a");
5348 	assert (GetPathParamsQuery("a/a:") == "/a:");
5349 	assert (GetPathParamsQuery("a/a/") == "/a/");
5350 	assert (GetPathParamsQuery("a/a?") == "/a?");
5351 	assert (GetPathParamsQuery("a/a;") == "/a;");
5352 	assert (GetPathParamsQuery("a/a#") == "/a");
5353 	assert (GetPathParamsQuery("a/aa") == "/aa");
5354 	assert (GetPathParamsQuery("a?") == "/?");
5355 	assert (GetPathParamsQuery("a?:") == "/?:");
5356 	assert (GetPathParamsQuery("a?::") == "/?::");
5357 	assert (GetPathParamsQuery("a?:/") == "/?:/");
5358 	assert (GetPathParamsQuery("a?:?") == "/?:?");
5359 	assert (GetPathParamsQuery("a?:;") == "/?:;");
5360 	assert (GetPathParamsQuery("a?:#") == "/?:");
5361 	assert (GetPathParamsQuery("a?:a") == "/?:a");
5362 	assert (GetPathParamsQuery("a?/") == "/?/");
5363 	assert (GetPathParamsQuery("a?/:") == "/?/:");
5364 	assert (GetPathParamsQuery("a?//") == "/?//");
5365 	assert (GetPathParamsQuery("a?/?") == "/?/?");
5366 	assert (GetPathParamsQuery("a?/;") == "/?/;");
5367 	assert (GetPathParamsQuery("a?/#") == "/?/");
5368 	assert (GetPathParamsQuery("a?/a") == "/?/a");
5369 	assert (GetPathParamsQuery("a??") == "/??");
5370 	assert (GetPathParamsQuery("a??:") == "/??:");
5371 	assert (GetPathParamsQuery("a??/") == "/??/");
5372 	assert (GetPathParamsQuery("a???") == "/???");
5373 	assert (GetPathParamsQuery("a??;") == "/??;");
5374 	assert (GetPathParamsQuery("a??#") == "/??");
5375 	assert (GetPathParamsQuery("a??a") == "/??a");
5376 	assert (GetPathParamsQuery("a?;") == "/?;");
5377 	assert (GetPathParamsQuery("a?;:") == "/?;:");
5378 	assert (GetPathParamsQuery("a?;/") == "/?;/");
5379 	assert (GetPathParamsQuery("a?;?") == "/?;?");
5380 	assert (GetPathParamsQuery("a?;;") == "/?;;");
5381 	assert (GetPathParamsQuery("a?;#") == "/?;");
5382 	assert (GetPathParamsQuery("a?;a") == "/?;a");
5383 	assert (GetPathParamsQuery("a?#") == "/?");
5384 	assert (GetPathParamsQuery("a?#:") == "/?");
5385 	assert (GetPathParamsQuery("a?#/") == "/?");
5386 	assert (GetPathParamsQuery("a?#?") == "/?");
5387 	assert (GetPathParamsQuery("a?#;") == "/?");
5388 	assert (GetPathParamsQuery("a?##") == "/?");
5389 	assert (GetPathParamsQuery("a?#a") == "/?");
5390 	assert (GetPathParamsQuery("a?a") == "/?a");
5391 	assert (GetPathParamsQuery("a?a:") == "/?a:");
5392 	assert (GetPathParamsQuery("a?a/") == "/?a/");
5393 	assert (GetPathParamsQuery("a?a?") == "/?a?");
5394 	assert (GetPathParamsQuery("a?a;") == "/?a;");
5395 	assert (GetPathParamsQuery("a?a#") == "/?a");
5396 	assert (GetPathParamsQuery("a?aa") == "/?aa");
5397 	assert (GetPathParamsQuery("a;") == "/;");
5398 	assert (GetPathParamsQuery("a;:") == "/;:");
5399 	assert (GetPathParamsQuery("a;::") == "/;::");
5400 	assert (GetPathParamsQuery("a;:/") == "/;:/");
5401 	assert (GetPathParamsQuery("a;:?") == "/;:?");
5402 	assert (GetPathParamsQuery("a;:;") == "/;:;");
5403 	assert (GetPathParamsQuery("a;:#") == "/;:");
5404 	assert (GetPathParamsQuery("a;:a") == "/;:a");
5405 	assert (GetPathParamsQuery("a;/") == "/;/");
5406 	assert (GetPathParamsQuery("a;/:") == "/;/:");
5407 	assert (GetPathParamsQuery("a;//") == "/;//");
5408 	assert (GetPathParamsQuery("a;/?") == "/;/?");
5409 	assert (GetPathParamsQuery("a;/;") == "/;/;");
5410 	assert (GetPathParamsQuery("a;/#") == "/;/");
5411 	assert (GetPathParamsQuery("a;/a") == "/;/a");
5412 	assert (GetPathParamsQuery("a;?") == "/;?");
5413 	assert (GetPathParamsQuery("a;?:") == "/;?:");
5414 	assert (GetPathParamsQuery("a;?/") == "/;?/");
5415 	assert (GetPathParamsQuery("a;??") == "/;??");
5416 	assert (GetPathParamsQuery("a;?;") == "/;?;");
5417 	assert (GetPathParamsQuery("a;?#") == "/;?");
5418 	assert (GetPathParamsQuery("a;?a") == "/;?a");
5419 	assert (GetPathParamsQuery("a;;") == "/;;");
5420 	assert (GetPathParamsQuery("a;;:") == "/;;:");
5421 	assert (GetPathParamsQuery("a;;/") == "/;;/");
5422 	assert (GetPathParamsQuery("a;;?") == "/;;?");
5423 	assert (GetPathParamsQuery("a;;;") == "/;;;");
5424 	assert (GetPathParamsQuery("a;;#") == "/;;");
5425 	assert (GetPathParamsQuery("a;;a") == "/;;a");
5426 	assert (GetPathParamsQuery("a;#") == "/;");
5427 	assert (GetPathParamsQuery("a;#:") == "/;");
5428 	assert (GetPathParamsQuery("a;#/") == "/;");
5429 	assert (GetPathParamsQuery("a;#?") == "/;");
5430 	assert (GetPathParamsQuery("a;#;") == "/;");
5431 	assert (GetPathParamsQuery("a;##") == "/;");
5432 	assert (GetPathParamsQuery("a;#a") == "/;");
5433 	assert (GetPathParamsQuery("a;a") == "/;a");
5434 	assert (GetPathParamsQuery("a;a:") == "/;a:");
5435 	assert (GetPathParamsQuery("a;a/") == "/;a/");
5436 	assert (GetPathParamsQuery("a;a?") == "/;a?");
5437 	assert (GetPathParamsQuery("a;a;") == "/;a;");
5438 	assert (GetPathParamsQuery("a;a#") == "/;a");
5439 	assert (GetPathParamsQuery("a;aa") == "/;aa");
5440 	assert (GetPathParamsQuery("a#") == "/");
5441 	assert (GetPathParamsQuery("a#:") == "/");
5442 	assert (GetPathParamsQuery("a#::") == "/");
5443 	assert (GetPathParamsQuery("a#:/") == "/");
5444 	assert (GetPathParamsQuery("a#:?") == "/");
5445 	assert (GetPathParamsQuery("a#:;") == "/");
5446 	assert (GetPathParamsQuery("a#:#") == "/");
5447 	assert (GetPathParamsQuery("a#:a") == "/");
5448 	assert (GetPathParamsQuery("a#/") == "/");
5449 	assert (GetPathParamsQuery("a#/:") == "/");
5450 	assert (GetPathParamsQuery("a#//") == "/");
5451 	assert (GetPathParamsQuery("a#/?") == "/");
5452 	assert (GetPathParamsQuery("a#/;") == "/");
5453 	assert (GetPathParamsQuery("a#/#") == "/");
5454 	assert (GetPathParamsQuery("a#/a") == "/");
5455 	assert (GetPathParamsQuery("a#?") == "/");
5456 	assert (GetPathParamsQuery("a#?:") == "/");
5457 	assert (GetPathParamsQuery("a#?/") == "/");
5458 	assert (GetPathParamsQuery("a#??") == "/");
5459 	assert (GetPathParamsQuery("a#?;") == "/");
5460 	assert (GetPathParamsQuery("a#?#") == "/");
5461 	assert (GetPathParamsQuery("a#?a") == "/");
5462 	assert (GetPathParamsQuery("a#;") == "/");
5463 	assert (GetPathParamsQuery("a#;:") == "/");
5464 	assert (GetPathParamsQuery("a#;/") == "/");
5465 	assert (GetPathParamsQuery("a#;?") == "/");
5466 	assert (GetPathParamsQuery("a#;;") == "/");
5467 	assert (GetPathParamsQuery("a#;#") == "/");
5468 	assert (GetPathParamsQuery("a#;a") == "/");
5469 	assert (GetPathParamsQuery("a##") == "/");
5470 	assert (GetPathParamsQuery("a##:") == "/");
5471 	assert (GetPathParamsQuery("a##/") == "/");
5472 	assert (GetPathParamsQuery("a##?") == "/");
5473 	assert (GetPathParamsQuery("a##;") == "/");
5474 	assert (GetPathParamsQuery("a###") == "/");
5475 	assert (GetPathParamsQuery("a##a") == "/");
5476 	assert (GetPathParamsQuery("a#a") == "/");
5477 	assert (GetPathParamsQuery("a#a:") == "/");
5478 	assert (GetPathParamsQuery("a#a/") == "/");
5479 	assert (GetPathParamsQuery("a#a?") == "/");
5480 	assert (GetPathParamsQuery("a#a;") == "/");
5481 	assert (GetPathParamsQuery("a#a#") == "/");
5482 	assert (GetPathParamsQuery("a#aa") == "/");
5483 	assert (GetPathParamsQuery("aa") == "/");
5484 	assert (GetPathParamsQuery("aa:") == "/");
5485 	assert (GetPathParamsQuery("aa::") == "/");
5486 	assert (GetPathParamsQuery("aa:/") == "/");
5487 	assert (GetPathParamsQuery("aa:?") == "/?");
5488 	assert (GetPathParamsQuery("aa:;") == "/;");
5489 	assert (GetPathParamsQuery("aa:#") == "/");
5490 	assert (GetPathParamsQuery("aa:a") == "/");
5491 	assert (GetPathParamsQuery("aa/") == "/");
5492 	assert (GetPathParamsQuery("aa/:") == "/:");
5493 	assert (GetPathParamsQuery("aa//") == "//");
5494 	assert (GetPathParamsQuery("aa/?") == "/?");
5495 	assert (GetPathParamsQuery("aa/;") == "/;");
5496 	assert (GetPathParamsQuery("aa/#") == "/");
5497 	assert (GetPathParamsQuery("aa/a") == "/a");
5498 	assert (GetPathParamsQuery("aa?") == "/?");
5499 	assert (GetPathParamsQuery("aa?:") == "/?:");
5500 	assert (GetPathParamsQuery("aa?/") == "/?/");
5501 	assert (GetPathParamsQuery("aa??") == "/??");
5502 	assert (GetPathParamsQuery("aa?;") == "/?;");
5503 	assert (GetPathParamsQuery("aa?#") == "/?");
5504 	assert (GetPathParamsQuery("aa?a") == "/?a");
5505 	assert (GetPathParamsQuery("aa;") == "/;");
5506 	assert (GetPathParamsQuery("aa;:") == "/;:");
5507 	assert (GetPathParamsQuery("aa;/") == "/;/");
5508 	assert (GetPathParamsQuery("aa;?") == "/;?");
5509 	assert (GetPathParamsQuery("aa;;") == "/;;");
5510 	assert (GetPathParamsQuery("aa;#") == "/;");
5511 	assert (GetPathParamsQuery("aa;a") == "/;a");
5512 	assert (GetPathParamsQuery("aa#") == "/");
5513 	assert (GetPathParamsQuery("aa#:") == "/");
5514 	assert (GetPathParamsQuery("aa#/") == "/");
5515 	assert (GetPathParamsQuery("aa#?") == "/");
5516 	assert (GetPathParamsQuery("aa#;") == "/");
5517 	assert (GetPathParamsQuery("aa##") == "/");
5518 	assert (GetPathParamsQuery("aa#a") == "/");
5519 	assert (GetPathParamsQuery("aaa") == "/");
5520 	assert (GetPathParamsQuery("aaa:") == "/");
5521 	assert (GetPathParamsQuery("aaa/") == "/");
5522 	assert (GetPathParamsQuery("aaa?") == "/?");
5523 	assert (GetPathParamsQuery("aaa;") == "/;");
5524 	assert (GetPathParamsQuery("aaa#") == "/");
5525 	assert (GetPathParamsQuery("aaaa") == "/");
5526 }