# Name: soo_multidoc v1.0.b.3 # Type: Admin/Client side plugin # Create structured multi-page documents # Author: Jeff Soo # URL: http://ipsedixit.net/txp/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEyOiJzb29fbXVsdGlkb2MiO3M6NjoiYXV0aG9yIjtzOjg6 IkplZmYgU29vIjtzOjEwOiJhdXRob3JfdXJpIjtzOjI1OiJodHRwOi8vaXBzZWRpeGl0Lm5l dC90eHAvIjtzOjc6InZlcnNpb24iO3M6NzoiMS4wLmIuMyI7czoxMToiZGVzY3JpcHRpb24i O3M6Mzg6IkNyZWF0ZSBzdHJ1Y3R1cmVkIG11bHRpLXBhZ2UgZG9jdW1lbnRzIjtzOjQ6Imhl bHAiO3M6MTEyMTM6IjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CmRpdiNzZWRfaGVscCBwcmUg e3BhZGRpbmc6IDAuNWVtIDFlbTsgYmFja2dyb3VuZDogI2VlZTsgYm9yZGVyOiAxcHggZGFz aGVkICNjY2M7fQpkaXYjc2VkX2hlbHAgaDEsIGRpdiNzZWRfaGVscCBoMiwgZGl2I3NlZF9o ZWxwIGgzLCBkaXYjc2VkX2hlbHAgaDMgY29kZSB7Zm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7 IGZvbnQtd2VpZ2h0OiBib2xkO30KZGl2I3NlZF9oZWxwIGgxLCBkaXYjc2VkX2hlbHAgaDIs IGRpdiNzZWRfaGVscCBoMyB7bWFyZ2luLWxlZnQ6IC0xZW07fQpkaXYjc2VkX2hlbHAgaDIs IGRpdiNzZWRfaGVscCBoMyB7bWFyZ2luLXRvcDogMmVtO30KZGl2I3NlZF9oZWxwIGgxIHtm b250LXNpemU6IDIuNGVtO30KZGl2I3NlZF9oZWxwIGgyIHtmb250LXNpemU6IDEuOGVtO30K ZGl2I3NlZF9oZWxwIGgzIHtmb250LXNpemU6IDEuNGVtO30KZGl2I3NlZF9oZWxwIGg0IHtm b250LXNpemU6IDEuMmVtO30KZGl2I3NlZF9oZWxwIGg1IHtmb250LXNpemU6IDFlbTttYXJn aW4tbGVmdDoxZW07Zm9udC1zdHlsZTpvYmxpcXVlO30KZGl2I3NlZF9oZWxwIGxpIHtsaXN0 LXN0eWxlLXR5cGU6IGRpc2M7fQpkaXYjc2VkX2hlbHAgbGkgbGkge2xpc3Qtc3R5bGUtdHlw ZTogY2lyY2xlO30KZGl2I3NlZF9oZWxwIGxpIGxpIGxpIHtsaXN0LXN0eWxlLXR5cGU6IHNx dWFyZTt9CmRpdiNzZWRfaGVscCBsaSBhIGNvZGUge2ZvbnQtd2VpZ2h0OiBub3JtYWw7fQpk aXYjc2VkX2hlbHAgbGkgY29kZTpmaXJzdC1jaGlsZCB7YmFja2dyb3VuZDogI2RkZDtwYWRk aW5nOjAgLjNlbTttYXJnaW4tbGVmdDotLjNlbTt9CmRpdiNzZWRfaGVscCBsaSBsaSBjb2Rl OmZpcnN0LWNoaWxkIHtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO21hcmdpbi1sZWZ0OjA7 fQpkaXYjc2VkX2hlbHAgZGZuIHtmb250LXdlaWdodDpib2xkO2ZvbnQtc3R5bGU6b2JsaXF1 ZTt9CmRpdiNzZWRfaGVscCAucmVxdWlyZWQsIGRpdiNzZWRfaGVscCAud2FybmluZyB7Y29s b3I6cmVkO30KZGl2I3NlZF9oZWxwIC5kZWZhdWx0IHtjb2xvcjpncmVlbjt9Cjwvc3R5bGU+ CiA8ZGl2IGlkPSJzZWRfaGVscCI+CgoJPGgxPnNvb19tdWx0aWRvYzwvaDE+CgoJPHA+VGhp cyBpcyBqdXN0IGEgYmFyZS1ib25lcyB0YWcgcmVmZXJlbmNlLiBBbGwgb2YgdGhlc2UgdGFn cyByZXF1aXJlIHRoYXQgeW91IGhhdmUgc2V0IHVwIHRoZSA8c3Ryb25nPk11bHRpZG9jPC9z dHJvbmc+IHN5c3RlbSBvbiB5b3VyIFRleHRwYXR0ZXJuIHdlYnNpdGUuIEEgZnVsbCA8YSBo cmVmPSJodHRwOi8vaXBzZWRpeGl0Lm5ldC90eHAvMjQvbXVsdGlkb2MiPlVzZXIgR3VpZGU8 L2E+IGlzIGF2YWlsYWJsZSBhdCB0aGUgPGEgaHJlZj0iaHR0cDovL2lwc2VkaXhpdC5uZXQv Ij5hdXRob3ImIzgyMTc7cyB3ZWJzaXRlPC9hPi48L3A+CgoJPGgyPkNvbnRlbnRzPC9oMj4K Cgk8dWw+CgkJPGxpPjxhIGhyZWY9IiN0YWdzIj5UYWdzPC9hPgoJPHVsPgoJCTxsaT48YSBo cmVmPSIjc29vX211bHRpZG9jX2xpbmsiPnNvb19tdWx0aWRvY19saW5rPC9hPjwvbGk+CgkJ PGxpPjxhIGhyZWY9IiNzb29fbXVsdGlkb2NfcGFnZXIiPnNvb19tdWx0aWRvY19wYWdlcjwv YT48L2xpPgoJCTxsaT48YSBocmVmPSIjc29vX211bHRpZG9jX3BhZ2VfbnVtYmVyIj5zb29f bXVsdGlkb2NfcGFnZV9udW1iZXI8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI3Nvb19tdWx0 aWRvY190b2MiPnNvb19tdWx0aWRvY190b2M8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI3Nv b19tdWx0aWRvY19wYWdlX3RpdGxlIj5zb29fbXVsdGlkb2NfcGFnZV90aXRsZTwvYT48L2xp PgoJCTxsaT48YSBocmVmPSIjc29vX2lmX211bHRpZG9jIj5zb29faWZfbXVsdGlkb2M8L2E+ PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PGEgaHJlZj0iI2hpc3RvcnkiPlZlcnNpb24gaGlz dG9yeTwvYT48L2xpPgoJPC91bD4KCgk8aDIgaWQ9InRhZ3MiPlRhZ3M8L2gyPgoKCTxoMyBp ZD0ic29vX211bHRpZG9jX2xpbmsiPnNvb19tdWx0aWRvY19saW5rPC9oMz4KCgk8aDQ+VXNh Z2U8L2g0PgoKCTxwPkdlbmVyYXRlcyBhbiA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bh bj4gYW5jaG9yIGVsZW1lbnQsIGJhc2VkIG9uIGRvY3VtZW50IHJlbGF0aW9uc2hpcC4gQ2Fu IGJlIHVzZWQgYXMgYSBzaW5nbGUgb3IgY29udGFpbmVyIHRhZy4gUmVxdWlyZXMgaW5kaXZp ZHVhbCBhcnRpY2xlIGNvbnRleHQuPC9wPgoKPHByZT4mbHQ7dHhwOnNvb19tdWx0aWRvY19s aW5rIHJlbD0mcXVvdDtQcmV2JnF1b3Q7IC8mZ3Q7CiZsdDt0eHA6c29vX211bHRpZG9jX2xp bmsgcmVsPSZxdW90O05leHQmcXVvdDsmZ3Q7Q29udGludWUgcmVhZGluZyAuLi4gJmx0Oy90 eHA6c29vX211bHRpZG9jX2xpbmsmZ3Q7CjwvcHJlPgoKCTxwPldoZW4gdXNlZCBhcyBhIHNp bmdsZSB0YWcsIHRoZSA8Y29kZT5yZWw8L2NvZGU+IHZhbHVlIGlzIHVzZWQgZm9yIHRoZSBs aW5rIHRleHQuPC9wPgoKCTxoND5BdHRyaWJ1dGVzPC9oND4KCgk8dWw+CgkJPGxpPjxjb2Rl PnJlbD0mcXVvdDtMaW5rVHlwZSZxdW90OzwvY29kZT4gVGhlIDxhIGhyZWY9Imh0dHA6Ly93 d3cudzMub3JnL1RSL1JFQy1odG1sNDAvdHlwZXMuaHRtbCN0eXBlLWxpbmtzIj5saW5rIHR5 cGU8L2E+IGRlc2NyaWJpbmcgdGhlIGxpbmtlZCBkb2N1bWVudCYjODIxNztzIHJlbGF0aW9u c2hpcCB0byB0aGUgY3VycmVudCBwYWdlPC9saT4KCQk8bGk+PGNvZGU+YWRkX3RpdGxlPSZx dW90O2Jvb2xlYW4mcXVvdDs8L2NvZGU+IEFkZCB0aGUgbGlua2VkIGRvY3VtZW50JiM4MjE3 O3MgdGl0bGUgdG8gdGhlIGxpbmsgdGV4dDwvbGk+CgkJPGxpPjxjb2RlPmNsYXNzPSZxdW90 O0hUTUwgY2xhc3MmcXVvdDs8L2NvZGU+IDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFu PiBjbGFzcyBhdHRyaWJ1dGUgdmFsdWUgZm9yIHRoZSBhbmNob3IgdGFnPC9saT4KCQk8bGk+ PGNvZGU+YWN0aXZlX2NsYXNzPSZxdW90O0hUTUwgY2xhc3MmcXVvdDs8L2NvZGU+IDxzcGFu IGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBjbGFzcyBhdHRyaWJ1dGUgdmFsdWUgaWYgPGNv ZGU+cmVsPC9jb2RlPiByZWZlcnMgdG8gdGhlIGN1cnJlbnQgcGFnZSAodGFnIHdpbGwgYmUg YSA8Y29kZT5zcGFuPC9jb2RlPiBpbnN0ZWFkIG9mIDxjb2RlPmE8L2NvZGU+KTwvbGk+CgkJ PGxpPjxjb2RlPmh0bWxfaWQ9JnF1b3Q7SFRNTCBJRCZxdW90OzwvY29kZT4gPHNwYW4gY2xh c3M9ImNhcHMiPkhUTUw8L3NwYW4+IElEIGF0dHJpYnV0ZSB2YWx1ZSBmb3IgdGhlIGFuY2hv ciB0YWc8L2xpPgoJCTxsaT48Y29kZT53cmFwdGFnPSZxdW90O3RhZyBuYW1lJnF1b3Q7PC9j b2RlPiBUYWcgbmFtZSAobm8gYnJhY2tldHMpIGZvciBlbGVtZW50IHRvIHdyYXAgdGhlIGFu Y2hvcjwvbGk+Cgk8L3VsPgoKCTxoMyBpZD0ic29vX211bHRpZG9jX3BhZ2VyIj5zb29fbXVs dGlkb2NfcGFnZXI8L2gzPgoKCTxoND5Vc2FnZTwvaDQ+CgoJPHA+R2VuZXJhdGVzIGEgbnVt YmVyZWQgcGFnZSBuYXZpZ2F0aW9uIHdpZGdldC4gUmVxdWlyZXMgaW5kaXZpZHVhbCBhcnRp Y2xlIGNvbnRleHQuPC9wPgoKPHByZT4mbHQ7dHhwOnNvb19tdWx0aWRvY19wYWdlciAvJmd0 Owo8L3ByZT4KCgk8aDQ+QXR0cmlidXRlczwvaDQ+CgoJPHVsPgoJCTxsaT48Y29kZT5saW1p dD0mcXVvdDtpbnRlZ2VyJnF1b3Q7PC9jb2RlPiBOdW1iZXIgb2YgcGFnZXMgdG8gc2hvdyBi ZWZvcmUgYW5kIGFmdGVyIHRoZSBjdXJyZW50IHBhZ2UgYmVmb3JlIGluc2VydGluZyB0aGUg PGNvZGU+cGxhY2Vob2xkZXI8L2NvZGU+IHRleHQuIERlZmF1bHQgaXMgPGNvZGU+MDwvY29k ZT4sIG5vIGxpbWl0IChzaG93IGFsbCkuPC9saT4KCQk8bGk+PGNvZGU+cGxhY2Vob2xkZXI9 JnF1b3Q7dGV4dCZxdW90OzwvY29kZT4gVGV4dCB0byBzaG93IGZvciBtaXNzaW5nIHBhZ2Vz IChzZWUgPGNvZGU+bGltaXQ8L2NvZGU+KS4gRGVmYXVsdCBpcyA8Y29kZT4mYW1wO2hlbGxp cDs8L2NvZGU+IChob3Jpem9udGFsIGVsbGlwc2lzKS48L2xpPgoJCTxsaT48Y29kZT5jbGFz cz0mcXVvdDtIVE1MIGNsYXNzJnF1b3Q7PC9jb2RlPiA8c3BhbiBjbGFzcz0iY2FwcyI+SFRN TDwvc3Bhbj4gY2xhc3MgYXR0cmlidXRlIHZhbHVlIGZvciB0aGUgYW5jaG9yIHRhZzwvbGk+ CgkJPGxpPjxjb2RlPmFjdGl2ZV9jbGFzcz0mcXVvdDtIVE1MIGNsYXNzJnF1b3Q7PC9jb2Rl PiA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gY2xhc3MgYXR0cmlidXRlIHZhbHVl IGZvciB0aGUgPGNvZGU+c3BhbjwvY29kZT4gdGFnIGZvciB0aGUgY3VycmVudCBwYWdlPC9s aT4KCQk8bGk+PGNvZGU+aHRtbF9pZD0mcXVvdDtIVE1MIElEJnF1b3Q7PC9jb2RlPiA8c3Bh biBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gSUQgYXR0cmlidXRlIHZhbHVlIGZvciB0aGUg d3JhcHRhZzwvbGk+CgkJPGxpPjxjb2RlPndyYXB0YWc9JnF1b3Q7dGFnIG5hbWUmcXVvdDs8 L2NvZGU+IFRhZyBuYW1lIChubyBicmFja2V0cykgZm9yIGVsZW1lbnQgdG8gd3JhcCB0aGUg YW5jaG9yPC9saT4KCQk8bGk+PGNvZGU+YnJlYWs9JnF1b3Q7bWl4ZWQmcXVvdDs8L2NvZGU+ IFRhZyBuYW1lIChubyBicmFja2V0cykgb3IgdGV4dCB0byBhZGQgYmV0d2VlbiBpdGVtczwv bGk+Cgk8L3VsPgoKCTxoMyBpZD0ic29vX211bHRpZG9jX3BhZ2VfbnVtYmVyIj5zb29fbXVs dGlkb2NfcGFnZV9udW1iZXI8L2gzPgoKCTxoND5Vc2FnZTwvaDQ+CgoJPHA+T3V0cHV0cyBj dXJyZW50IHBhZ2UgbnVtYmVyIGFuZCB0b3RhbCBudW1iZXIgb2YgcGFnZXMuIFJlcXVpcmVz IGluZGl2aWR1YWwgYXJ0aWNsZSBjb250ZXh0LjwvcD4KCjxwcmU+Jmx0O3R4cDpzb29fbXVs dGlkb2NfcGFnZV9udW1iZXIgLyZndDsKPC9wcmU+CgoJPGg0PkF0dHJpYnV0ZXM8L2g0PgoK CTx1bD4KCQk8bGk+PGNvZGU+Y2xhc3M9JnF1b3Q7SFRNTCBjbGFzcyZxdW90OzwvY29kZT4g PHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGNsYXNzIGF0dHJpYnV0ZSB2YWx1ZSBm b3IgdGhlIG91dHB1dCB0YWc8L2xpPgoJCTxsaT48Y29kZT5odG1sX2lkPSZxdW90O0hUTUwg SUQmcXVvdDs8L2NvZGU+IDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBJRCBhdHRy aWJ1dGUgdmFsdWUgZm9yIHRoZSBvdXRwdXQgdGFnPC9saT4KCQk8bGk+PGNvZGU+d3JhcHRh Zz0mcXVvdDt0YWcgbmFtZSZxdW90OzwvY29kZT4gVGFnIG5hbWUgKG5vIGJyYWNrZXRzKSBm b3Igb3V0cHV0IHRhZy4gRGVmYXVsdCBpcyAmIzgyMjA7c3BhbiYjODIyMTs8L2xpPgoJCTxs aT48Y29kZT5mb3JtYXQ9JnF1b3Q7Zm9ybWF0IHN0cmluZyZxdW90OzwvY29kZT4gRGVmYXVs dCBpcyAmIzgyMjA7UGFnZSB7cGFnZX0gb2Yge3RvdGFsfSYjODIyMTsuIFRoZSB0YWcgd2ls bCBvdXRwdXQgdGhpcyBzdHJpbmcsIGFmdGVyIGFueSBvY2N1cmVuY2VzIG9mICYjODIyMDt7 cGFnZX0mIzgyMjE7IGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoIHRoZSBjdXJyZW50IHBhZ2Ug bnVtYmVyOyBsaWtld2lzZSBmb3IgJiM4MjIwO3t0b3RhbH0mIzgyMjE7IGFuZCB0aGUgdG90 YWwgbnVtYmVyIG9mIHBhZ2VzLjwvbGk+Cgk8L3VsPgoKCTxoMyBpZD0ic29vX211bHRpZG9j X3RvYyI+c29vX211bHRpZG9jX3RvYzwvaDM+CgoJPGg0PlVzYWdlPC9oND4KCgk8cD5HZW5l cmF0ZXMgYSBzdHJ1Y3R1cmVkIHRhYmxlIG9mIGNvbnRlbnRzLiBSZXF1aXJlcyBpbmRpdmlk dWFsIGFydGljbGUgY29udGV4dC48L3A+Cgo8cHJlPiZsdDt0eHA6c29vX211bHRpZG9jX3Rv YyAvJmd0Owo8L3ByZT4KCgk8aDQ+QXR0cmlidXRlczwvaDQ+CgoJPHVsPgoJCTxsaT48Y29k ZT5jbGFzcz0mcXVvdDtIVE1MIGNsYXNzJnF1b3Q7PC9jb2RlPiA8c3BhbiBjbGFzcz0iY2Fw cyI+SFRNTDwvc3Bhbj4gY2xhc3MgYXR0cmlidXRlIHZhbHVlIGZvciB0aGUgbGlzdCB0YWc8 L2xpPgoJCTxsaT48Y29kZT5hY3RpdmVfY2xhc3M9JnF1b3Q7SFRNTCBjbGFzcyZxdW90Ozwv Y29kZT4gPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGNsYXNzIGF0dHJpYnV0ZSB2 YWx1ZSBmb3IgdGhlIDxjb2RlPnNwYW48L2NvZGU+IHRhZyBmb3IgdGhlIGN1cnJlbnQgcGFn ZTwvbGk+CgkJPGxpPjxjb2RlPmh0bWxfaWQ9JnF1b3Q7SFRNTCBJRCZxdW90OzwvY29kZT4g PHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IElEIGF0dHJpYnV0ZSB2YWx1ZSBmb3Ig dGhlIGxpc3QgdGFnPC9saT4KCQk8bGk+PGNvZGU+d3JhcHRhZz0mcXVvdDt0YWcgbmFtZSZx dW90OzwvY29kZT4gVGFnIG5hbWUgKG5vIGJyYWNrZXRzKSBmb3IgdHlwZSBvZiBsaXN0LiA8 c3Ryb25nPk11c3QgYmUgJiM4MjIwO3VsJiM4MjIxOyBvciAmIzgyMjA7b2wmIzgyMjE7PC9z dHJvbmc+OyB0aGUgZGVmYXVsdCBpcyAmIzgyMjA7dWwmIzgyMjE7PC9saT4KCQk8bGk+PGNv ZGU+cm9vdD0mcXVvdDttaXhlZCZxdW90OzwvY29kZT4gc3RhcnRpbmcgcG9pbnQgZm9yIHRo ZSB0YWJsZSBvZiBjb250ZW50cy4gSWYgZW1wdHkgKHRoZSBkZWZhdWx0KSwgd2lsbCBzaG93 IHRoZSBlbnRpcmUgdGFibGUuIElmIHNldCB0byBhbiBhcnRpY2xlIElEIG51bWJlciwgd2ls bCBzaG93IG9ubHkgdGhlIHBhZ2VzIGJlbG93IHRoYXQgYXJ0aWNsZSBpbiB0aGUgZG9jdW1l bnQgdHJlZS4gSWYgc2V0IHRvICYjODIyMDt0aGlzJiM4MjIxOyBvciBhbnkgb3RoZXIgd29y ZCwgd2lsbCB1c2UgdGhlIGN1cnJlbnQgcGFnZSBhcyB0aGUgcm9vdC48L2xpPgoJCTxsaT48 Y29kZT5hZGRfc3RhcnQ9JnF1b3Q7Ym9vbGVhbiZxdW90OzwvY29kZT4gSWYgc2V0LCB0aGUg cm9vdCBwYWdlIGlzIGFkZGVkIGFzIHRoZSBmaXJzdCBpdGVtIGluIHRoZSB0YWJsZS4gVW5z ZXQgYnkgZGVmYXVsdC48L2xpPgoJPC91bD4KCgk8aDMgaWQ9InNvb19tdWx0aWRvY19wYWdl X3RpdGxlIj5zb29fbXVsdGlkb2NfcGFnZV90aXRsZTwvaDM+CgoJPGg0PlVzYWdlPC9oND4K Cgk8cD5Ecm9wLWluIHJlcGxhY2VtZW50IGZvciB0aGUgY29yZSA8Y29kZT50aXRsZTwvY29k ZT4gdGFnLiBPbiBhIDxzdHJvbmc+TXVsdGlkb2M8L3N0cm9uZz4gcGFnZSwgYWRkcyB0aGUg U3RhcnQgcGFnZSB0aXRsZSBiZWZvcmUgdGhlIHBhZ2UgdGl0bGUgKHVubGVzcyBpdCBpcyB0 aGUgU3RhcnQgcGFnZSkuIE90aGVyd2lzZSB0aGUgdGFnIHNpbXBseSByZXR1cm5zIHN0YW5k YXJkIDxjb2RlPnRpdGxlPC9jb2RlPiBvdXRwdXQuPC9wPgoKPHByZT4mbHQ7dHhwOnNvb19t dWx0aWRvY19wYWdlX3RpdGxlIC8mZ3Q7CjwvcHJlPgoKCTxoND5BdHRyaWJ1dGVzPC9oND4K Cgk8dWw+CgkJPGxpPjxjb2RlPnNlcGFyYXRvcj0mcXVvdDt0ZXh0JnF1b3Q7PC9jb2RlPiB0 ZXh0IGJldHdlZW4gdGl0bGUgc2VnbWVudHM7IGRlZmF1bHQgaXMgJiM4MjIwOzogJiM4MjIw OzwvbGk+Cgk8L3VsPgoKCTxoMyBpZD0ic29vX211bHRpZG9jX2JyZWFkY3J1bWJzIj5zb29f bXVsdGlkb2NfYnJlYWRjcnVtYnM8L2gzPgoKCTxoND5Vc2FnZTwvaDQ+CgoJPHA+T3V0cHV0 IGEgbGlua2VkIGJyZWFkY3J1bWIgdHJhaWwsIHVzZWZ1bCBmb3IgaGllcmFyY2hpY2FsIGNv bGxlY3Rpb25zLjwvcD4KCjxwcmU+Jmx0O3R4cDpzb29fbXVsdGlkb2NfYnJlYWRjcnVtYnMg LyZndDsKPC9wcmU+CgoJPGg0PkF0dHJpYnV0ZXM8L2g0PgoKCTx1bD4KCQk8bGk+PGNvZGU+ c2VwYXJhdG9yPSZxdW90O3RleHQmcXVvdDs8L2NvZGU+IHRleHQgYmV0d2VlbiBzZWdtZW50 czsgZGVmYXVsdCBpcyAmIzgyMjA7OiAmIzgyMjA7PC9saT4KCTwvdWw+CgoJPGgzIGlkPSJz b29faWZfbXVsdGlkb2MiPnNvb19pZl9tdWx0aWRvYzwvaDM+CgoJPGg0PlVzYWdlPC9oND4K Cgk8cD5Db25kaXRpb25hbCB0YWcuIFJlcXVpcmVzIGluZGl2aWR1YWwgYXJ0aWNsZSBjb250 ZXh0LjwvcD4KCjxwcmU+Jmx0O3R4cDpzb29faWZfbXVsdGlkb2MmZ3Q7CiAgICAuLi5zaG93 IGlmIHRydWUuLi4KJmx0O3R4cDplbHNlIC8mZ3Q7CiAgICAuLi5zaG93IGlmIGZhbHNlLi4u CiZsdDsvdHhwOnNvb19pZl9tdWx0aWRvYyZndDsKPC9wcmU+CgoJPGg0PkF0dHJpYnV0ZXM8 L2g0PgoKCTx1bD4KCQk8bGk+PGNvZGU+c3RhcnRfaWQ9JnF1b3Q7VHhwIGFydGljbGUgSUQm cXVvdDs8L2NvZGU+IGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIFR4cCBhcnRpY2xlIElEcy4g RW1wdHkgYnkgZGVmYXVsdC48L2xpPgoJPC91bD4KCgk8cD48c3Ryb25nPnNvb19pZl9tdWx0 aWRvYzwvc3Ryb25nPiBldmFsdWF0ZXMgd2hldGhlciBvciBub3QgdGhlIGN1cnJlbnQgcGFn ZSBiZWxvbmdzIHRvIGEgPHN0cm9uZz5NdWx0aWRvYzwvc3Ryb25nPiBjb2xsZWN0aW9uLiBJ ZiA8Y29kZT5zdGFydF9pZDwvY29kZT4gaXMgc2V0LCBpdCBldmFsdWF0ZXMgd2hldGhlciBv ciBub3QgdGhlIGN1cnJlbnQgcGFnZSBiZWxvbmdzIHRvIG9uZSBvZiB0aGUgc3BlY2lmaWVk IGNvbGxlY3Rpb25zLjwvcD4KCgk8cD5UeXBpY2FsbHkgeW91IHdvdWxkIHVzZSB0aGlzIGlu IGFuIGFydGljbGUgZm9ybSwgb3IgaW4gYSBmb3JtIGNhbGxlZCBieSBhbiBhcnRpY2xlIGZv cm0uPC9wPgoKCTxoMiBpZD0iaGlzdG9yeSI+VmVyc2lvbiBIaXN0b3J5PC9oMj4KCgk8aDM+ MS4wLmIuMyAoMS8yNy8yMDEwKTwvaDM+CgoJPHVsPgoJCTxsaT5BcnRpY2xlcyB3aXRob3V0 IDxjb2RlPmxpdmU8L2NvZGU+IG9yIDxjb2RlPnN0aWNreTwvY29kZT4gc3RhdHVzIG5vdyBl eGNsdWRlZDwvbGk+CgkJPGxpPkV4cGlyZWQgYXJ0aWNsZXMgbm93IGV4Y2x1ZGVkIG9yIG5v dCwgYWNjb3JkaW5nIHRvIHNpdGUgcHJlZmVyZW5jZTwvbGk+CgkJPGxpPk5ldyBwcmVmZXJl bmNlIGZvciBzaG93aW5nIHBhc3QsIGZ1dHVyZSwgb3IgYWxsIGFydGljbGVzPC9saT4KCTwv dWw+CgoJPGgzPjEuMC5iLjIgKDkvMTgvMjAwOSk8L2gzPgoKCTx1bD4KCQk8bGk+TmV3IHRh Z3M6Cgk8dWw+CgkJPGxpPjxjb2RlPnNvb19tdWx0aWRvY19wYWdlX3RpdGxlPC9jb2RlPiAo ZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgPGNvZGU+cGFnZV90aXRsZTwvY29kZT4pPC9saT4K CQk8bGk+PGNvZGU+c29vX211bHRpZG9jX2JyZWFkY3J1bWJzPC9jb2RlPiBicmVhZGNydW1i IHRyYWlsIHdpdGhpbiBDb2xsZWN0aW9uczwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPmNoYW5n ZWQgdG8gbmV3IDxzdHJvbmc+c29vX3BsdWdpbl9wcmVmPC9zdHJvbmc+IHBsdWdpbiBmb3Ig cHJlZmVyZW5jZSBtYW5hZ2VtZW50PC9saT4KCTwvdWw+CgoJPGgzPjEuMC5iLjEgKDcvNS8y MDA5KTwvaDM+CgoJPHVsPgoJCTxsaT5hZGFwdGVkIHRvIHYxLjAuYi4xIG9mIHRoZSB1bmRl cmx5aW5nIDxzdHJvbmc+c29vX3R4cF9vYmo8L3N0cm9uZz4gbGlicmFyeTwvbGk+CgkJPGxp PmNvZGUgY2xlYW5pbmc8L2xpPgoJCTxsaT5kb3duc2hpZnQgdG8gdjIuMCBvZiB0aGUgPHNw YW4gY2xhc3M9ImNhcHMiPkdQTDwvc3Bhbj48L2xpPgoJPC91bD4KCgk8aDM+MS4wLmEuNyAo Ni8yLzIwMDkpPC9oMz4KCgk8dWw+CgkJPGxpPjxjb2RlPnNvb19tdWx0aWRvY19wYWdlcjwv Y29kZT46Cgk8dWw+CgkJPGxpPmNoYW5nZWQgPGNvZGU+aHRtbF9pZDwvY29kZT4gdG8gb25s eSBhcHBseSB0byA8Y29kZT53cmFwdGFnPC9jb2RlPjwvbGk+CgkJPGxpPmFkZGVkIDxjb2Rl PndyYXBjbGFzczwvY29kZT4gYW5kIDxjb2RlPmJyZWFrY2xhc3M8L2NvZGU+IGF0dHJpYnV0 ZXM8L2xpPgoJCTxsaT5nZW5lcmFsbHkgaW1wcm92ZWQgPGNvZGU+YnJlYWs8L2NvZGU+IGJl aGF2aW9yPC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PGNvZGU+c29vX211bHRpZG9jX2FydGlj bGU8L2NvZGU+IGFuZCA8Y29kZT5zb29fbXVsdGlkb2NfYXJ0aWNsZV9jdXN0b208L2NvZGU+ IG5vIGxvbmdlciBuZWVkZWQsIGFuZCBoYXZlIGJlZW4gZWxpbWluYXRlZCAodGhhbmtzIHRv IDxhIGhyZWY9Imh0dHA6Ly90eHAtcGx1Z2lucy5uZXRjYXJ2aW5nLmNvbS8iPm5ldC1jYXJ2 ZXI8L2E+IGZvciB0aGUgc3VnZ2VzdGlvbiB0byB1c2UgTXlTUUwgdGVtcG9yYXJ5IHRhYmxl cywgYWxsb3dpbmcgdGhlIHJlcGxhY2VtZW50IG9mIGFib3V0IDI3MCBsaW5lcyBvZiBjb2Rl IHdpdGggYWJvdXQgMTIpPC9saT4KCTwvdWw+CgoJPGgzPjEuMC5hLjYgKDUvMjMvMjAwOSk8 L2gzPgoKCTx1bD4KCQk8bGk+QnVnIGZpeCBmb3IgdXNpbmcgY3VzdG9tIGZpZWxkICMxMCBv ciBoaWdoZXI8L2xpPgoJCTxsaT5CdWcgZml4IGZvciBlcnJvciBtZXNzYWdlIHdoZW4gdGhl cmUgYXJlIG5vIE11bHRpZG9jIGFydGljbGVzPC9saT4KCQk8bGk+Tm93IHVzZXMgdjAuMiBv ZiA8c3Ryb25nPnNvb19wbHVnaW5fcHJlZnM8L3N0cm9uZz48L2xpPgoJPC91bD4KCgk8aDM+ MS4wLmEuNSAoNS8xLzIwMDkpPC9oMz4KCgk8dWw+CgkJPGxpPkFkZGVkIDxjb2RlPiZsdDt0 eHA6c29vX211bHRpZG9jX3BhZ2VfbnVtYmVyIC8mZ3Q7PC9jb2RlPi48L2xpPgoJCTxsaT5G aXhlZCBhIGJ1ZyByZWdhcmRpbmcgbXVsdGlwbGUgPGNvZGU+c29vX211bHRpZG9jX3BhZ2Vy PC9jb2RlPiB0YWdzIG9uIHRoZSBzYW1lIHBhZ2UuPC9saT4KCQk8bGk+QWRkZWQgY29tcGF0 YWJpbGl0eSB3aXRoIDxzdHJvbmc+c29vX3BsdWdpbl9wcmVmczwvc3Ryb25nPiBwbHVnaW4u PC9saT4KCTwvdWw+CgoJPGgzPjEuMC5hLjQgKDQvMi8yMDA5KTwvaDM+CgoJPHVsPgoJCTxs aT5BZGRlZCA8Y29kZT5saW1pdDwvY29kZT4gYW5kIDxjb2RlPnBsYWNlaG9sZGVyPC9jb2Rl PiBhdHRyaWJ1dGVzIHRvIDxjb2RlPiZsdDt0eHA6c29vX211bHRpZG9jX3BhZ2VyIC8mZ3Q7 PC9jb2RlPi48L2xpPgoJPC91bD4KCgk8aDM+MS4wLmEuMyAoMi82LzIwMDkpPC9oMz4KCgk8 dWw+CgkJPGxpPkZpeGVkIDxjb2RlPmFkZF90aXRsZTwvY29kZT4gYnVnIGluIDxjb2RlPiZs dDt0eHA6c29vX211bHRpZG9jX2xpbmsgLyZndDs8L2NvZGU+IChjYXVzZWQgZHVyaW5nIHVw Z3JhZGUgdG8gdGhlIG5ld2VyIHZlcnNpb24gb2YgdGhlIDxzdHJvbmc+c29vX3R4cF9vYmo8 L3N0cm9uZz4gbGlicmFyeSkuPC9saT4KCTwvdWw+CgoJPGgzPjEuMC5hLjIgKDIvNS8yMDA5 KTwvaDM+CgoJPHVsPgoJCTxsaT5ObyBzaWduaWZpY2FudCBjaGFuZ2VzLCBidXQgYmFzZWQg b24gYSBuZXdlciB2ZXJzaW9uIG9mIHRoZSA8c3Ryb25nPnNvb190eHBfb2JqPC9zdHJvbmc+ IGxpYnJhcnkuPC9saT4KCTwvdWw+CgoJPGgzPjEuMC5hLjEgKDIvNC8yMDA5KTwvaDM+CgoJ PHVsPgoJCTxsaT5Jbml0aWFsIHJlbGVhc2UuPC9saT4KCTwvdWw+CgogPC9kaXY+IjtzOjQ6 ImNvZGUiO3M6MjkyNzA6IgpyZXF1aXJlX3BsdWdpbignc29vX3R4cF9vYmonKTsKQHJlcXVp cmVfcGx1Z2luKCdzb29fcGx1Z2luX3ByZWYnKTsJCS8vIG9wdGlvbmFsCgogIC8vLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLy8KIC8vCQkJCQkJCQkJR2xvYmFscwkJCQkJCQkJLy8KLy8tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0vLwoKZ2xvYmFsICRzb29fbXVsdGlkb2M7Cgokc29vX211bHRpZG9jID0gYXJyYXko CgknY3VzdG9tX2ZpZWxkJwkJPT4JJycsCgknaW5pdCcJCQkJPT4JZmFsc2UsCgknc3RhdHVz JwkJCT0+CWZhbHNlLAoJJ2NvbGxlY3Rpb24nCQk9PgknJywKCSdub2luZGV4JwkJCT0+CScn LAoJJ2lkX3BhcmVudCcJCQk9PgknJywKCSdkYXRhJwkJCQk9PgknJywKKTsKCiRzb29fbXVs dGlkb2NfcHJlZnMgPSBmdW5jdGlvbl9leGlzdHMoJ3Nvb19wbHVnaW5fcHJlZl92YWxzJykg PwoJc29vX3BsdWdpbl9wcmVmX3ZhbHMoJ3Nvb19tdWx0aWRvYycpIDogc29vX211bHRpZG9j X2RlZmF1bHRzKCk7CmZvcmVhY2ggKCAkc29vX211bHRpZG9jX3ByZWZzIGFzICRuYW1lID0+ ICR2YWwgKQoJJHNvb19tdWx0aWRvY1skbmFtZV0gPSBpc19hcnJheSgkdmFsKSA/ICR2YWxb J3ZhbCddIDogJHZhbDsKCmFkZF9wcml2cygncGx1Z2luX3ByZWZzLnNvb19tdWx0aWRvYycs JzEsMicpOwphZGRfcHJpdnMoJ3BsdWdpbl9saWZlY3ljbGUuc29vX211bHRpZG9jJywnMSwy Jyk7CnJlZ2lzdGVyX2NhbGxiYWNrKCdzb29fbXVsdGlkb2NfcHJlZnMnLCAncGx1Z2luX3By ZWZzLnNvb19tdWx0aWRvYycpOwpyZWdpc3Rlcl9jYWxsYmFjaygnc29vX211bHRpZG9jX3By ZWZzJywgJ3BsdWdpbl9saWZlY3ljbGUuc29vX211bHRpZG9jJyk7CgpmdW5jdGlvbiBzb29f bXVsdGlkb2NfcHJlZnMoICRldmVudCwgJHN0ZXAgKSB7CglpZiAoIGZ1bmN0aW9uX2V4aXN0 cygnc29vX3BsdWdpbl9wcmVmJykgKQoJCXJldHVybiBzb29fcGx1Z2luX3ByZWYoJGV2ZW50 LCAkc3RlcCwgc29vX211bHRpZG9jX2RlZmF1bHRzKCkpOwoJaWYgKCBzdWJzdHIoJGV2ZW50 LCAwLCAxMikgPT0gJ3BsdWdpbl9wcmVmcycgKSB7CgkJJHBsdWdpbiA9IHN1YnN0cigkZXZl bnQsIDEyKTsKCQkkbWVzc2FnZSA9ICc8cD48YnIgLz48c3Ryb25nPicgLiBnVHh0KCdlZGl0 JykgLiAiICRwbHVnaW4gIiAuCgkJCWdUeHQoJ2VkaXRfcHJlZmVyZW5jZXMnKSAuICc6PC9z dHJvbmc+PGJyIC8+JyAuIGdUeHQoJ2luc3RhbGxfcGx1Z2luJykgLgoJCQknIDxhIGhyZWY9 Imh0dHA6Ly9pcHNlZGl4aXQubmV0L3R4cC85Mi9zb29fcGx1Z2luX3ByZWYiPnNvb19wbHVn aW5fcHJlZjwvYT48L3A+JzsKCQlwYWdldG9wKGdUeHQoJ2VkaXRfcHJlZmVyZW5jZXMnKSAu ICIgJiM4MjUwOyAkcGx1Z2luIiwgJG1lc3NhZ2UpOwoJfQp9CgpmdW5jdGlvbiBzb29fbXVs dGlkb2NfZGVmYXVsdHMoICkgewoJcmV0dXJuIGFycmF5KAoJCSdjdXN0b21fZmllbGRfbmFt ZScJCT0+CWFycmF5KAoJCQkndmFsJwk9PgknTXVsdGlkb2MnLAoJCQknaHRtbCcJPT4JJ3Rl eHRfaW5wdXQnLAoJCQkndGV4dCcJPT4JJ0N1c3RvbSBmaWVsZCBuYW1lJywKCQkpLAoJCSdk ZXZfZG9tYWluJwk9PglhcnJheSgKCQkJJ3ZhbCcJPT4JJycsCgkJCSdodG1sJwk9PgkndGV4 dF9pbnB1dCcsCgkJCSd0ZXh0Jwk9PgknRGV2ZWxvcG1lbnQgZG9tYWluIChubyBodHRwOi8v IG9yIGNsb3Npbmcgc2xhc2gpJywKCQkpLAoJCSdsaXN0X2FsbCcJPT4JYXJyYXkoCgkJCSd2 YWwnCT0+CTAsCgkJCSdodG1sJwk9PgkneWVzbm9yYWRpbycsCgkJCSd0ZXh0Jwk9PgknU2hv dyBNdWx0aWRvYyBzdWItcGFnZXMgaW4gYXJ0aWNsZSBsaXN0cz8nLAoJCSksCgkJJ3Bvc3Rl ZF90aW1lJwk9PglhcnJheSgKCQkJJ3ZhbCcJPT4JJ3Bhc3QnLAoJCQknaHRtbCcJPT4JJ3Rl eHRfaW5wdXQnLAoJCQkndGV4dCcJPT4JJ1Nob3cgYXJ0aWNsZXMgcG9zdGVkICZsc3F1bztw YXN0JnJzcXVvOywgJmxzcXVvO2Z1dHVyZSZyc3F1bzssIG9yICZsc3F1bzthbnkmcnNxdW87 JywKCQkpLAoJKTsKfQoKICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCiAvLwkJCQkJCQlNTFAgUGFj ayBkZWZpbml0aW9ucwkJCQkJCS8vCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KCmRlZmluZSgnU09P X01VTFRJRE9DX1BSRUZJWCcsICdzb29fbWRvYycpOwpnbG9iYWwgJHNvb19tdWx0aWRvY19z dHJpbmdzOwokc29vX211bHRpZG9jX3N0cmluZ3MgPSBhcnJheSgKCSdzdGFydCcJCQkJPT4J J3N0YXJ0JywKCSd1cCcJCQkJPT4JJ3VwJywKCSduZXh0JwkJCQk9PgknbmV4dCcsCgkncHJl dicJCQkJPT4JJ3ByZXYnLAoJJ3JlY3Vyc2lvbl9lcnJvcicJPT4JJ1JlY3Vyc2lvbiB3YXJu aW5nOiBpbml0aWFsaXphdGlvbiBhYm9ydGVkJywKCSdjdXN0b21fZmllbGQnCQk9PgknQ3Vz dG9tIGZpZWxkICInLAoJJ25vdF9mb3VuZCcJCQk9PgknIiBub3QgZm91bmQnLAoJJ211bHRp cGxlX2xpc3RpbmdzJwk9PgknTXVsdGlwbGUgbGlzdGluZ3MgZm9yIGF0IGxlYXN0IG9uZSBh cnRpY2xlLiBTdGFydCBieSBjaGVja2luZyBhcnRpY2xlcyAnLAoJJ2ludmFsaWRfaWRfMScJ CT0+CSdJbnZhbGlkIElEIGRldGVjdGVkOiBBcnRpY2xlICcsCgknaW52YWxpZF9pZF8yJwkJ PT4JJyBoYXMgYSBNdWx0aWRvYyBsaXN0aW5nIGZvciBhcnRpY2xlICcsCik7CgpyZWdpc3Rl cl9jYWxsYmFjaygnc29vX211bHRpZG9jX2VudW1lcmF0ZV9zdHJpbmdzJywgJ2wxMG4uZW51 bWVyYXRlX3N0cmluZ3MnKTsKCmZ1bmN0aW9uIHNvb19tdWx0aWRvY19lbnVtZXJhdGVfc3Ry aW5ncyggJGV2ZW50LCAkc3RlcCA9ICcnLCAkcHJlID0gMCApIHsKCWdsb2JhbCAkc29vX211 bHRpZG9jX3N0cmluZ3M7CgkkciA9IGFycmF5KAoJCSdvd25lcicJCT0+ICdzb29fbXVsdGlk b2MnLAoJCSdwcmVmaXgnCT0+IFNPT19NVUxUSURPQ19QUkVGSVgsCgkJJ2xhbmcnCQk9PiAn ZW4tdXMnLAoJCSdldmVudCcJCT0+ICdwdWJsaWMnLAoJCSdzdHJpbmdzJwk9PiAkc29vX211 bHRpZG9jX3N0cmluZ3MsCgkJCQkpOwoJcmV0dXJuICRyOwp9CgpmdW5jdGlvbiBzb29fbXVs dGlkb2NfZ1R4dCggJHdoYXQgLCAkYXJncyA9IGFycmF5KCkgKSB7CglnbG9iYWwgJHRleHRh cnJheTsKCWdsb2JhbCAkc29vX211bHRpZG9jX3N0cmluZ3M7CgoJJGtleSA9IFNPT19NVUxU SURPQ19QUkVGSVggLiAnLScgLiAkd2hhdDsKCSRrZXkgPSBzdHJ0b2xvd2VyKCRrZXkpOwoK CWlmKGlzc2V0KCR0ZXh0YXJyYXlbJGtleV0pKQoJCSRzdHIgPSAkdGV4dGFycmF5WyRrZXld OwoKCWVsc2UgewoJCSRrZXkgPSBzdHJ0b2xvd2VyKCR3aGF0KTsKCgkJaWYoIGlzc2V0KCAk c29vX211bHRpZG9jX3N0cmluZ3NbJGtleV0gKSApCgkJCSRzdHIgPSAkc29vX211bHRpZG9j X3N0cmluZ3NbJGtleV07CgkJZWxzZQoJCQkkc3RyID0gJHdoYXQ7Cgl9CgoJaWYoICFlbXB0 eSgkYXJncykgKQoJCSRzdHIgPSBzdHJ0ciggJHN0ciAsICRhcmdzICk7CgoJcmV0dXJuICRz dHI7Cn0KCgogIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KIC8vCQkJCQkJCQkJQ2xhc3NlcwkJCQkJ CQkJLy8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwoKCmNsYXNzIHNvb19tdWx0aWRvY19ub2RlIGV4 dGVuZHMgc29vX29iaiB7CgoJcHJvdGVjdGVkICRpZAkJCQk9ICcnOwoJcHJvdGVjdGVkICRs aW5rX3R5cGUJCT0gJyc7Cglwcm90ZWN0ZWQgJHRpdGxlCQkJPSAnJzsKCXByb3RlY3RlZCAk Y2hpbGRyZW4JCQk9ICcnOwoJcHJvdGVjdGVkICRuZXh0CQkJCT0gJyc7Cglwcm90ZWN0ZWQg JHByZXYJCQkJPSAnJzsKCXByb3RlY3RlZCAkdXAJCQkJPSAnJzsKCgoJcHVibGljIGZ1bmN0 aW9uIF9fY29uc3RydWN0KCAkaWQgKSB7CgkJJHRoaXMtPmlkID0gaXNfbnVtZXJpYygkaWQp ID8gaW50dmFsKCRpZCkgOiAnJzsKCX0KCgkvLyBHZXR0ZXJzIC8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8KCS8vIGlmICRpZCBhcmd1bWVudCBnaXZlbiwgd2lsbCBz ZWFyY2ggY2hpbGQgbm9kZXMKCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2xpbmtfdHlwZSggJGlk ID0gbnVsbCApIHsKCQlyZXR1cm4gJHRoaXMtPmdldF9zdWJfbm9kZV9wcm9wKCRpZCwgJ2xp bmtfdHlwZScpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRfbmV4dCggJGlkID0gbnVsbCAp IHsKCQlyZXR1cm4gJHRoaXMtPmdldF9zdWJfbm9kZV9wcm9wKCRpZCwgJ25leHQnKTsKCX0K CglwdWJsaWMgZnVuY3Rpb24gZ2V0X3ByZXYoICRpZCA9IG51bGwgKSB7CgkJcmV0dXJuICR0 aGlzLT5nZXRfc3ViX25vZGVfcHJvcCgkaWQsICdwcmV2Jyk7Cgl9CgoJcHVibGljIGZ1bmN0 aW9uIGdldF91cCggJGlkID0gbnVsbCApIHsKCQlyZXR1cm4gJHRoaXMtPmdldF9zdWJfbm9k ZV9wcm9wKCRpZCwgJ3VwJyk7Cgl9CgoJLy8gVXRpbGl0aWVzIC8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8KCglwdWJsaWMgZnVuY3Rpb24gc2V0X25leHRfYnlfaWQo ICRpZCwgJG5leHQgKSB7CgoJCXN0YXRpYyAkX3Nvb19tdWx0aWRvY19mYWlsc2FmZTsKCQkk X3Nvb19tdWx0aWRvY19mYWlsc2FmZSArKzsKCQlpZiAoICRfc29vX211bHRpZG9jX2ZhaWxz YWZlID4gOTk5ICkKCQkJcmV0dXJuIHNvb19tdWx0aWRvY19nVHh0KCdyZWN1cnNpb25fZXJy b3InKTsKCgkJaWYgKCAkaWQgPT0gJHRoaXMtPmlkICkgewoJCQkkdGhpcy0+bmV4dCA9ICRu ZXh0OwoJCQlyZXR1cm4gJHRoaXMtPnByZXY7CgkJfQoKCQlpZiAoICEgaXNfYXJyYXkoJHRo aXMtPmNoaWxkcmVuKSApCgkJCXJldHVybiBmYWxzZTsKCgkJZm9yZWFjaCAoICR0aGlzLT5j aGlsZHJlbiBhcyAkY2hpbGQgKSB7CgkJCSRkb25lID0gJGNoaWxkLT5zZXRfbmV4dF9ieV9p ZCgkaWQsICRuZXh0KTsKCQkJaWYgKCAkZG9uZSApIHJldHVybiAkZG9uZTsKCQl9CgkJcmV0 dXJuIGZhbHNlOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiB5b3VuZ2VzdCgpIHsKCS8vIHJldHVy biB0aGUgaWQgb2YgdGhpcyBub2RlJ3MgeW91bmdlc3QgZGVzY2VuZGFudAoKCQlpZiAoIGlz X2FycmF5KCR0aGlzLT5jaGlsZHJlbikgKSB7CgkJCSRteV9jaGlsZHJlbiA9ICR0aGlzLT5j aGlsZHJlbjsKCQkJJG15X3lvdW5nZXN0ID0gYXJyYXlfcG9wKCRteV9jaGlsZHJlbik7CgkJ CXJldHVybiAkbXlfeW91bmdlc3QtPnlvdW5nZXN0KCk7CgkJfQoJCWVsc2UKCQkJcmV0dXJu ICR0aGlzLT5pZDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gYXJlX3lvdV9teV9hbmNlc3Rvcigg JG1lLCAkeW91ICkgewoKCQkkbXlfcGFyZW50ID0gJHRoaXMtPmdldF91cCgkbWUpOwoJCWlm ICggICRteV9wYXJlbnQgPT0gJHlvdSApIHJldHVybiB0cnVlOwoJCWlmICggJG15X3BhcmVu dCApCgkJCXJldHVybiAkdGhpcy0+YXJlX3lvdV9teV9hbmNlc3RvcigkbXlfcGFyZW50LCAk eW91KTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2lkX2J5X2xpbmtfdHlwZSggJGxpbmtf dHlwZSApIHsKCgkJaWYgKCBzdHJ0b2xvd2VyKCRsaW5rX3R5cGUpID09ICR0aGlzLT5saW5r X3R5cGUgKQoJCQlyZXR1cm4gJHRoaXMtPmlkOwoKCQlpZiAoIGlzX2FycmF5KCR0aGlzLT5j aGlsZHJlbiApICkgewoJCQlmb3JlYWNoICggJHRoaXMtPmNoaWxkcmVuIGFzICRjaGlsZCAp IHsKCQkJCWlmICggZW1wdHkoJG91dCkgKQoJCQkJCSRvdXQgPSAkY2hpbGQtPmdldF9pZF9i eV9saW5rX3R5cGUoJGxpbmtfdHlwZSk7CgkJCX0KCQl9CgkJcmV0dXJuIGlzc2V0KCRvdXQp ID8gJG91dCA6IGZhbHNlOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRfbmV4dF9ieV9saW5r X3R5cGUoICRpZCwgJGxpbmtfdHlwZSApIHsKCgkJJG5leHQgPSAkdGhpcy0+Z2V0X25leHQo JGlkKTsKCQlpZiAoICRuZXh0ICkKCQkJcmV0dXJuIHN0cnRvbG93ZXIoJHRoaXMtPmdldF9s aW5rX3R5cGUoJG5leHQpKSA9PSAkbGlua190eXBlID8KCQkJCSRuZXh0IDogJHRoaXMtPmdl dF9uZXh0X2J5X2xpbmtfdHlwZSgkbmV4dCwgJGxpbmtfdHlwZSk7Cgl9CgoJcHVibGljIGZ1 bmN0aW9uIGdldF9wcmV2X2J5X2xpbmtfdHlwZSggJGlkLCAkbGlua190eXBlICkgewoKCQkk cHJldiA9ICR0aGlzLT5nZXRfcHJldigkaWQpOwoJCWlmICggJHByZXYgKQoJCQlyZXR1cm4g c3RydG9sb3dlcigkdGhpcy0+Z2V0X2xpbmtfdHlwZSgkcHJldikpID09ICRsaW5rX3R5cGUg PwoJCQkJJHByZXYgOiAkdGhpcy0+Z2V0X3ByZXZfYnlfbGlua190eXBlKCRwcmV2LCAkbGlu a190eXBlKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3N1Yl9ub2RlKCAkaWQgKSB7CgoJ CWlmICggJHRoaXMtPmlkID09ICRpZCBvciBpc19udWxsKCRpZCkgKQoJCQlyZXR1cm4gJHRo aXM7CgoJCWlmICggaXNfYXJyYXkoJHRoaXMtPmNoaWxkcmVuKSApCgkJCWZvcmVhY2ggKCAk dGhpcy0+Y2hpbGRyZW4gYXMgJGNoaWxkICkKCQkJCWlmICggZW1wdHkoJG91dCkgKQoJCQkJ CSRvdXQgPSAkY2hpbGQtPmdldF9zdWJfbm9kZSgkaWQpOwoKCQlyZXR1cm4gaXNzZXQoJG91 dCkgPyAkb3V0IDogZmFsc2U7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldF9zdWJfbm9kZV9w cm9wKCAkaWQsICRwcm9wICkgewoJCSRub2RlID0gJiR0aGlzLT5nZXRfc3ViX25vZGUoJGlk KTsKCQlyZXR1cm4gJG5vZGUtPiRwcm9wOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBuZXh0X2Fy cmF5KCkgewoKCQlzdGF0aWMgJG5leHRfYXJyYXlfb3V0OwoJCWdsb2JhbCAkc29vX211bHRp ZG9jOwoKCQlpZiAoIGlzc2V0KCRzb29fbXVsdGlkb2NbJ25leHRfYXJyYXknXSkgKQoJCQly ZXR1cm4gJHNvb19tdWx0aWRvY1snbmV4dF9hcnJheSddOwoKCQkkbmV4dF9pZCA9ICR0aGlz LT5nZXRfbmV4dCgpOwoKCQlpZiAoICRuZXh0X2lkICkgewoJCQkkbmV4dF9hcnJheV9vdXRb XSA9ICRuZXh0X2lkOwoJCQkkbmV4dF9ub2RlID0gJHNvb19tdWx0aWRvY1snY29sbGVjdGlv biddLT5nZXRfc3ViX25vZGUoJG5leHRfaWQpOwoJCQkkbmV4dF9ub2RlLT5uZXh0X2FycmF5 KCk7CgkJfQoJCSRzb29fbXVsdGlkb2NbJ25leHRfYXJyYXknXSA9ICRuZXh0X2FycmF5X291 dDsKCQlyZXR1cm4gJG5leHRfYXJyYXlfb3V0OwoJfQoKCglmdW5jdGlvbiB0b2MoICR0eXBl LCAkY3VycmVudF9wYWdlLCAkYWN0aXZlX2NsYXNzLCAkaW5jbHVkZV9zZWxmICkgewoJLy8g cmV0dXJucyB0YWJsZSBvZiBjb250ZW50cyBmb3IgdGhpcyBub2RlLCBhcyBhIGxpc3Qgb2Jq ZWN0CgoJCWdsb2JhbCAkc29vX211bHRpZG9jOwoKCQlpZiAoIGlzX2FycmF5KCR0aGlzLT5j aGlsZHJlbikgKSB7CgoJCQlpZiAoICR0eXBlID09ICd1bCcgKQoJCQkJJG91dCA9IG5ldyBz b29faHRtbF91bDsKCQkJZWxzZWlmICggJHR5cGUgPT0gJ29sJyApCgkJCQkkb3V0ID0gbmV3 IHNvb19odG1sX29sOwoJCQllbHNlCgkJCQlyZXR1cm4gZmFsc2U7CgoJCQlpZiAoICRpbmNs dWRlX3NlbGYgKQoJCQkJJG91dC0+Y29udGVudHMoCgkJCQkJbmV3IHNvb19odG1sX2xpKCcn LAoJCQkJCQluZXcgc29vX2h0bWxfYW5jaG9yKAoJCQkJCQkJJHNvb19tdWx0aWRvY1snZGF0 YSddWyR0aGlzLT5pZF1bJ3VybCddLCAkdGhpcy0+dGl0bGUpCgkJCQkpKTsKCQkJJGluY2x1 ZGVfc2VsZiA9IGZhbHNlOwoKCQkJZm9yZWFjaCAoICR0aGlzLT5jaGlsZHJlbiBhcyAkY2hp bGQgKSB7CgkJCQlpZiAoIGlzX2FycmF5KCRjaGlsZC0+Y2hpbGRyZW4pICkgewoJCQkJCWlm ICggJGNoaWxkLT5pZCA9PSAkY3VycmVudF9wYWdlICkKCQkJCQkJJGl0ZW0gPSBuZXcgc29v X2h0bWxfc3BhbigKCQkJCQkJCWFycmF5KCdjbGFzcycgPT4gJGFjdGl2ZV9jbGFzcykKCQkJ CQkJKTsKCQkJCQllbHNlCgkJCQkJCSRpdGVtID0gbmV3IHNvb19odG1sX2FuY2hvcigKCQkJ CQkJCSRzb29fbXVsdGlkb2NbJ2RhdGEnXVskY2hpbGQtPmlkXVsndXJsJ10KCQkJCQkJKTsK CQkJCQkkaXRlbS0+Y29udGVudHMoJGNoaWxkLT50aXRsZSk7CgkJCQl9CgkJCQkkbGkgPSBu ZXcgc29vX2h0bWxfbGkoJycsIGlzc2V0KCRpdGVtKSA/ICRpdGVtIDogbnVsbCk7CgkJCQkk bGktPmNvbnRlbnRzKCRjaGlsZC0+dG9jKCR0eXBlLCAkY3VycmVudF9wYWdlLCAkYWN0aXZl X2NsYXNzLCBmYWxzZSkpOwoJCQkJJG91dC0+Y29udGVudHMoJGxpKTsKCQkJCXVuc2V0KCRp dGVtKTsKCQkJCXVuc2V0KCRsaSk7CgkJCX0KCQl9CgkJZWxzZSB7CgkJCWlmICggJHRoaXMt PmlkID09ICRjdXJyZW50X3BhZ2UgKQoJCQkJJG91dCA9IG5ldyBzb29faHRtbF9zcGFuKGFy cmF5KCdjbGFzcycgPT4gJGFjdGl2ZV9jbGFzcykpOwoJCQllbHNlCgkJCQkkb3V0ID0gbmV3 IHNvb19odG1sX2FuY2hvcigKCQkJCQkkc29vX211bHRpZG9jWydkYXRhJ11bJHRoaXMtPmlk XVsndXJsJ10KCQkJCSk7CgkJCSRvdXQtPmNvbnRlbnRzKCR0aGlzLT50aXRsZSk7CgkJfQoJ CXJldHVybiBpc3NldCgkb3V0KSA/ICRvdXQgOiBmYWxzZTsKCX0KCn0KCi8vLy8vLy8vLy8v Ly8vLy8vLy8vLyBlbmQgb2YgY2xhc3Mgc29vX211bHRpZG9jX25vZGUgLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8KCiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwogLy8JCQkJCQkJCQlUYWdzCQkJ CQkJCQkvLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCgpmdW5jdGlvbiBzb29fbXVsdGlkb2NfbGlu ayggJGF0dHMsICR0aGluZyA9IG51bGwgKSB7Ci8vIE91dHB1dCB0YWc6IGRpc3BsYXkgYW4g SFRNTCBhbmNob3IKLy8gUmVxdWlyZXMgYXJ0aWNsZSBjb250ZXh0CgoJZXh0cmFjdChsQXR0 cyhhcnJheSgKCQkncmVsJwkJCT0+CScnLAoJCSdhZGRfdGl0bGUnCQk9PgknJywKCQknaHRt bF9pZCcJCT0+CScnLAoJCSdjbGFzcycJCQk9PgknJywKIAkJJ2FjdGl2ZV9jbGFzcycJPT4J JycsCiAJCSd3cmFwdGFnJwkJPT4JJycsCgkpLCAkYXR0cykpOwoKCWdsb2JhbCAkc29vX211 bHRpZG9jOwoJaWYgKCAhICggX3Nvb19tdWx0aWRvY19pbml0KCkgYW5kICRzb29fbXVsdGlk b2NbJ3N0YXR1cyddICkgKSByZXR1cm4gZmFsc2U7CgoJJHN0YXJ0ID0gc29vX211bHRpZG9j X2dUeHQoJ3N0YXJ0Jyk7CgkkdXAgPSBzb29fbXVsdGlkb2NfZ1R4dCgndXAnKTsKCSRuZXh0 ID0gc29vX211bHRpZG9jX2dUeHQoJ25leHQnKTsKCSRwcmV2ID0gc29vX211bHRpZG9jX2dU eHQoJ3ByZXYnKTsKCglnbG9iYWwgJHRoaXNhcnRpY2xlOwoJJGNvbGxlY3Rpb24gPSAkc29v X211bHRpZG9jWydjb2xsZWN0aW9uJ107CgkkdGhpc2lkID0gJHRoaXNhcnRpY2xlWyd0aGlz aWQnXTsKCSRyZWwgPSB0cmltKCRyZWwpOwoKCS8vICRyZWwgdmFsdWUgbWF5IGJlIHNwYWNl LXNlcGFyYXRlZCBsaXN0IG9mIGxpbmsgdHlwZXMKCS8vIHRoaXMgdGFnIGFsbG93cyBvbmx5 ICdwcmV2JyBvciAnbmV4dCcgaW4gY29tYmluYXRpb24gd2l0aCBhbm90aGVyIHR5cGUKCWlm ICggcHJlZ19tYXRjaCgiL14oJG5leHR8JHByZXYpXHMrKFx3KykvaSIsICRyZWwsICRtYXRj aCkgKSB7CgkJJHJlbF9kaXIgPSBzdHJ0b2xvd2VyKCRtYXRjaFsxXSk7CgkJJHJlbF90eXBl ID0gc3RydG9sb3dlcigkbWF0Y2hbMl0pOwoKCQlpZiAoICRyZWxfZGlyID09ICduZXh0JyAp CgkJCSRsaW5rX2lkID0gJGNvbGxlY3Rpb24tPmdldF9uZXh0X2J5X2xpbmtfdHlwZSgkdGhp c2lkLCAkcmVsX3R5cGUpOwoKCQkvLyBpZiBJIGhhdmUgYW4gYW5jZXN0b3Igb2YgdGhlIHJl cXVlc3RlZCBsaW5rIHR5cGUsIHRoYXQgYW5jZXN0b3Igd2lsbAoJCS8vIGJlIHRoZSBwcmV2 IGxpbmsgb2YgdGhhdCB0eXBlLCB3aGljaCBpc24ndCB3aGF0IHRoZSB1c2VyIHdhbnRzLgoJ CS8vIFNvIGNvbnRpbnVlIGJhY2sgb25lIG1vcmUgc3RlcC4KCQllbHNlaWYgKCAkcmVsX2Rp ciA9PSAncHJldicgKSB7CgkJCSRsaW5rX2lkID0gJGNvbGxlY3Rpb24tPmdldF9wcmV2X2J5 X2xpbmtfdHlwZSgkdGhpc2lkLCAkcmVsX3R5cGUpOwoJCQlpZiAoICRjb2xsZWN0aW9uLT5h cmVfeW91X215X2FuY2VzdG9yKCR0aGlzaWQsICRsaW5rX2lkKSApIHsKCQkJCSRuZXh0X2xp bmsgPSAkY29sbGVjdGlvbi0+Z2V0X3ByZXZfYnlfbGlua190eXBlKCRsaW5rX2lkLCAkcmVs X3R5cGUpOwoJCQkJaWYgKCAkbmV4dF9saW5rICE9ICRsaW5rX2lkIGFuZCBpc19udW1lcmlj KCRuZXh0X2xpbmspICkKCQkJCQkkbGlua19pZCA9ICRuZXh0X2xpbms7CgkJCQllbHNlCgkJ CQkJdW5zZXQoJGxpbmtfaWQpOwoJCQl9CgkJfQoJfQoJZWxzZWlmIChwcmVnX21hdGNoKCIv XigkbmV4dHwkcHJldnwkdXB8JHN0YXJ0KSQvaSIsICRyZWwsICRtYXRjaCkgKSB7CgoJCXN3 aXRjaCAoIHN0cnRvbG93ZXIoJG1hdGNoWzBdKSApIHsKCQkJY2FzZSAkc3RhcnQ6CgkJCQkk bGlua19pZCA9ICRjb2xsZWN0aW9uLT5pZDsKCQkJCWJyZWFrOwoJCQljYXNlICRwcmV2OgoJ CQkJJGxpbmtfaWQgPSAkY29sbGVjdGlvbi0+Z2V0X3ByZXYoJHRoaXNpZCk7CgkJCQlicmVh azsKCQkJY2FzZSAkbmV4dDoKCQkJCSRsaW5rX2lkID0gJGNvbGxlY3Rpb24tPmdldF9uZXh0 KCR0aGlzaWQpOwoJCQkJYnJlYWs7CgkJCWNhc2UgJHVwOgoJCQkJJGxpbmtfaWQgPSAkY29s bGVjdGlvbi0+Z2V0X3VwKCR0aGlzaWQpOwoJCQkJYnJlYWs7CgkJfQoJfQoJZWxzZQoJCSRs aW5rX2lkID0gJGNvbGxlY3Rpb24tPmdldF9pZF9ieV9saW5rX3R5cGUoJHJlbCk7CgoJaWYg KCAhIGVtcHR5KCRsaW5rX2lkKSApCgkJJHVybCA9ICRzb29fbXVsdGlkb2NbJ2RhdGEnXVsk bGlua19pZF1bJ3VybCddOwoKCWlmICggISBpc3NldCgkdXJsKSApIHJldHVybiBmYWxzZTsK CglpZiAoICRhZGRfdGl0bGUgKQoJCSR0aGluZyAuPSAkY29sbGVjdGlvbi0+Z2V0X3N1Yl9u b2RlX3Byb3AoJGxpbmtfaWQsICd0aXRsZScpOwoKCWlmICggJGxpbmtfaWQgPT0gJHRoaXNp ZCApCgkJJHRhZyA9IG5ldyBzb29faHRtbF9zcGFuKGFycmF5KCdjbGFzcycgPT4gJGFjdGl2 ZV9jbGFzcykpOwoKCWVsc2UKCQkkdGFnID0gbmV3IHNvb19odG1sX2FuY2hvcihhcnJheSgn aHJlZicgPT4gJHVybCwgJ3JlbCcgPT4gJHJlbCkpOwoKCSR0YWctPmNvbnRlbnRzKCAkdGhp bmcgPyAkdGhpbmcgOiAkcmVsICk7CgoJaWYgKCAkd3JhcHRhZyApIHsKCQkkdGFnX2NsYXNz ID0gJ3Nvb19odG1sXycgLiAkd3JhcHRhZzsKCQlpZiAoIGNsYXNzX2V4aXN0cygkdGFnX2Ns YXNzKSApIHsKCQkJJHdyYXB0YWcgPSBuZXcgJHRhZ19jbGFzczsKCQkJcmV0dXJuICR3cmFw dGFnLT5jb250ZW50cygkdGFnKS0+Y2xhc3MoJGNsYXNzKS0+CgkJCQlpZCgkaHRtbF9pZCkt PgoJCQkJdGFnKCk7CgkJfQoJfQoKCWVsc2UgewoJCSR0YWctPmlkKCRodG1sX2lkKTsKCQlp ZiAoICRsaW5rX2lkICE9ICR0aGlzaWQgKQoJCQkkdGFnLT5jbGFzcygkY2xhc3MpOwoJCXJl dHVybiAkdGFnLT50YWcoKTsKCX0KfQovLy8vLy8vLy8vLy8vLy8vLy8vLy8gZW5kIG9mIHNv b19tdWx0aWRvY19saW5rKCkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCmZ1bmN0aW9uIHNv b19tdWx0aWRvY19wYWdlciggJGF0dHMgKSB7Ci8vIE91dHB1dCB0YWc6IGRpc3BsYXkgYSBz aW1wbGUgbGlzdCBvZiBwYWdlIGxpbmtzCi8vIFJlcXVpcmVzIGFydGljbGUgY29udGV4dAoK CWV4dHJhY3QobEF0dHMoYXJyYXkoCgkJJ2xpbWl0JwkJCT0+CTAsCgkJJ3BsYWNlaG9sZGVy Jwk9PgknICZoZWxsaXA7ICcsCgkJJ2h0bWxfaWQnCQk9PgknJywKCQknY2xhc3MnCQkJPT4J JycsCiAJCSdhY3RpdmVfY2xhc3MnCT0+CScnLAogCQknd3JhcHRhZycJCT0+CScnLAogCQkn d3JhcGNsYXNzJwkJPT4JJycsCiAJCSdicmVhaycJCQk9PgknJywKIAkJJ2JyZWFrY2xhc3Mn CT0+CScnLAoJKSwgJGF0dHMpKTsKCglnbG9iYWwgJHNvb19tdWx0aWRvYzsKCWlmICggISAo IF9zb29fbXVsdGlkb2NfaW5pdCgpIGFuZCAkc29vX211bHRpZG9jWydzdGF0dXMnXSApICkg cmV0dXJuIGZhbHNlOwoKCWdsb2JhbCAkdGhpc2FydGljbGU7CgkkY29sbGVjdGlvbiA9ICRz b29fbXVsdGlkb2NbJ2NvbGxlY3Rpb24nXTsKCSR0aGlzaWQgPSAkdGhpc2FydGljbGVbJ3Ro aXNpZCddOwoKCSR3cmFwdGFnID0gdHJpbShzdHJ0b2xvd2VyKCR3cmFwdGFnKSk7CglpZiAo ICR3cmFwdGFnID09ICd0YWJsZScgKQoJCSRicmVhayA9ICd0ZCc7CgllbHNlaWYgKCAkd3Jh cHRhZyA9PSAndWwnIG9yICR3cmFwdGFnID09ICdvbCcgKQoJCSRicmVhayA9ICdsaSc7CgoJ aWYgKCAkYnJlYWsgKSB7CgkJJGJyZWFrX29iaiA9ICdzb29faHRtbF8nIC4gdHJpbShzdHJ0 b2xvd2VyKCRicmVhaykpOwoJCWlmICggISBjbGFzc19leGlzdHMoJGJyZWFrX29iaikgKQoJ CQkkYnJlYWtfb2JqID0gbnVsbDsKCQllbHNlIHsKCQkJJGJyZWFrID0gJyc7CgkJCSR0ZXN0 X29iaiA9IG5ldyAkYnJlYWtfb2JqOwoJCQkkZW1wdHlfYnJlYWsgPSAkdGVzdF9vYmotPmlz X2VtcHR5OwoJCX0KCX0KCWVsc2UKCQkkYnJlYWtfb2JqID0gbnVsbDsKCgkkcGFnZV9pZHMg PSAkY29sbGVjdGlvbi0+bmV4dF9hcnJheSgpOwoJYXJyYXlfdW5zaGlmdCgkcGFnZV9pZHMs ICRjb2xsZWN0aW9uLT5pZCk7CgoJJHRvdGFsID0gY291bnQoJHBhZ2VfaWRzKTsKCSRwYWdl X251bXMgPSBhcnJheV9jb21iaW5lKCRwYWdlX2lkcywgcmFuZ2UoMSwgJHRvdGFsKSk7Cgkk dGhpc19udW0gPSAkcGFnZV9udW1zWyR0aGlzaWRdOwoKCSR3X3N0YXJ0ID0gbWF4KDEsCgkJ bWluKCR0aGlzX251bSAtICRsaW1pdCwgJHRvdGFsIC0gKCAkbGltaXQgKiAyICkgKyAxKSk7 Cgkkd19lbmQgPSBtaW4oJHdfc3RhcnQgKyAoICRsaW1pdCAqIDIgKSAtIDEsICR0b3RhbCk7 CgoJJHNob3dfbnVtcyA9IGFycmF5X3VuaXF1ZShhcnJheV9tZXJnZSgKCQlhcnJheSgxKSwg cmFuZ2UoJHdfc3RhcnQsICR3X2VuZCksIGFycmF5KCR0b3RhbCkKCSkpOwoKCSRvYmpzID0g YXJyYXkoKTsKCgl3aGlsZSAoICRzaG93X251bXMgKSB7CgkJJG4gPSBhcnJheV9zaGlmdCgk c2hvd19udW1zKTsKCQlpZiAoICRuID09ICR0aGlzX251bSApCgkJCSRvYmpzW10gPSBuZXcg c29vX2h0bWxfc3BhbihhcnJheSgnY2xhc3MnID0+ICRhY3RpdmVfY2xhc3MpLCAkbik7CgkJ ZWxzZQoJCQkkb2Jqc1tdID0gbmV3IHNvb19odG1sX2FuY2hvcihhcnJheSgKCQkJCSdocmVm JyA9PiAkc29vX211bHRpZG9jWydkYXRhJ11bJHBhZ2VfaWRzWyRuIC0gMV1dWyd1cmwnXSwK CQkJCSdjbGFzcycgPT4gJGNsYXNzKSwgJG4pCgkJCTsKCgkJJGZpbGwgPSAkc2hvd19udW1z ID8KCQkJKCAkc2hvd19udW1zWzBdID4gJG4gKyAxID8gJHBsYWNlaG9sZGVyIDogJGJyZWFr ICkgOiAnJzsKCQlpZiAoICRmaWxsICkKCQkJJG9ianNbXSA9IG5ldyBzb29faHRtbF9zcGFu KCcnLCAkZmlsbCk7Cgl9CgoJaWYgKCAkYnJlYWtfb2JqICkgewoJCWlmICggJGVtcHR5X2Jy ZWFrICkgewoJCQl3aGlsZSAoICRvYmpzICkgewoJCQkJJGJyb2tlbl9vYmpzW10gPSBhcnJh eV9zaGlmdCgkb2Jqcyk7CgkJCQkkYnJva2VuX29ianNbXSA9IG5ldyAkYnJlYWtfb2JqOwoJ CQl9CgkJCWFycmF5X3BvcCgkYnJva2VuX29ianMpOwoJCQkkb2JqcyA9ICRicm9rZW5fb2Jq czsKCQl9CgkJZWxzZQoJCQlmb3JlYWNoICggJG9ianMgYXMgJGkgPT4gJG9iaiApCgkJCQkk b2Jqc1skaV0gPSBuZXcgJGJyZWFrX29iaignJywgJG9iaik7CgkJZm9yZWFjaCAoICRvYmpz IGFzICRvYmogKQoJCQlpZiAoICRvYmogaW5zdGFuY2VvZiAkYnJlYWtfb2JqICkKCQkJCSRv YmotPmNsYXNzKCRicmVha2NsYXNzKTsKCX0KCglpZiAoICR3cmFwdGFnID09ICd0YWJsZScg KQoJCSR3cmFwX29iaiA9IG5ldyBzb29faHRtbF90cjsKCgllbHNlIHsKCQkkd3JhcF9vYmpf Y2xhc3MgPSAnc29vX2h0bWxfJyAuICR3cmFwdGFnOwoJCWlmICggY2xhc3NfZXhpc3RzKCR3 cmFwX29ial9jbGFzcykgKQoJCQkkd3JhcF9vYmogPSBuZXcgJHdyYXBfb2JqX2NsYXNzOwoJ fQoJaWYgKCBpc3NldCgkd3JhcF9vYmopICkgewoJCSR3cmFwX29iai0+Y2xhc3MoJHdyYXBj bGFzcyk7CgkJZm9yZWFjaCAoICRvYmpzIGFzICRvYmogKQoJCQkkd3JhcF9vYmotPmNvbnRl bnRzKCRvYmopOwoKCQlpZiAoICR3cmFwdGFnID09ICd0YWJsZScgKSB7CgkJCSR0YWJsZSA9 IG5ldyBzb29faHRtbF90YWJsZShhcnJheSgnaWQnID0+ICRodG1sX2lkKSwKCQkJCW5ldyBz b29faHRtbF90Ym9keSgnJywgJHdyYXBfb2JqKSk7CgkJCXJldHVybiAkdGFibGUtPnRhZygp OwoJCX0KCQllbHNlCgkJCXJldHVybiAkd3JhcF9vYmotPmlkKCRodG1sX2lkKS0+dGFnKCk7 Cgl9CgllbHNlIHsKCQkkb3V0ID0gYXJyYXkoKTsKCQlmb3JlYWNoICggJG9ianMgYXMgJG9i aiApCgkJCSRvdXRbXSA9ICRvYmotPnRhZygpOwoJCXJldHVybiBpbXBsb2RlKCJcbiIsICRv dXQpOwoJfQp9Ci8vLy8vLy8vLy8vLy8vLy8vLy8vLyBlbmQgb2Ygc29vX211bHRpZG9jX3Bh Z2VyKCkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCmZ1bmN0aW9uIHNvb19tdWx0aWRvY19w YWdlX251bWJlciggJGF0dHMgKSB7Ci8vIE91dHB1dCB0YWc6IGRpc3BsYXkgY3VycmVudCBw YWdlIG51bWJlcgovLyBSZXF1aXJlcyBhcnRpY2xlIGNvbnRleHQKCglleHRyYWN0KGxBdHRz KGFycmF5KAoJCSdodG1sX2lkJwkJPT4JJycsCgkJJ2NsYXNzJwkJCT0+CScnLAogCQknd3Jh cHRhZycJCT0+CSdzcGFuJywKIAkJJ2Zvcm1hdCcJCT0+CSdQYWdlIHtwYWdlfSBvZiB7dG90 YWx9JywKCSksICRhdHRzKSk7CgoJZ2xvYmFsICRzb29fbXVsdGlkb2M7CglpZiAoICEgKCBf c29vX211bHRpZG9jX2luaXQoKSBhbmQgJHNvb19tdWx0aWRvY1snc3RhdHVzJ10gKSApIHJl dHVybiBmYWxzZTsKCglnbG9iYWwgJHRoaXNhcnRpY2xlOwoJJGNvbGxlY3Rpb24gPSAkc29v X211bHRpZG9jWydjb2xsZWN0aW9uJ107CgkkdGhpc2lkID0gJHRoaXNhcnRpY2xlWyd0aGlz aWQnXTsKCgkkcGFnZV9pZHMgPSAkY29sbGVjdGlvbi0+bmV4dF9hcnJheSgpOwoJYXJyYXlf dW5zaGlmdCgkcGFnZV9pZHMsICRjb2xsZWN0aW9uLT5pZCk7CgoJJG51bV9wYWdlcyA9IGNv dW50KCRwYWdlX2lkcyk7CgkkcGFnZV9udW1zID0gYXJyYXlfZmxpcCgkcGFnZV9pZHMpOwoJ JHRoaXNfcGFnZSA9ICRwYWdlX251bXNbJHRoaXNpZF0gKyAxOwoKCSRmb3JtYXQgPSBzdHJf cmVwbGFjZSgne3BhZ2V9JywgJHRoaXNfcGFnZSwgJGZvcm1hdCk7CgkkZm9ybWF0ID0gc3Ry X3JlcGxhY2UoJ3t0b3RhbH0nLCAkbnVtX3BhZ2VzLCAkZm9ybWF0KTsKCglyZXR1cm4gZG9X cmFwKGFycmF5KCRmb3JtYXQpLCAkd3JhcHRhZywgJycsICRjbGFzcywgJycsICcnLCAnJywg JGh0bWxfaWQpOwoKfQoKZnVuY3Rpb24gc29vX211bHRpZG9jX3RvYyggJGF0dHMgKSB7Ci8v IE91dHB1dCB0YWc6IGRpc3BsYXkgdGFibGUgb2YgY29udGVudHMgYXMgdGllcmVkIGxpc3QK Ly8gUmVxdWlyZXMgYXJ0aWNsZSBjb250ZXh0CgoJZXh0cmFjdChsQXR0cyhhcnJheSgKIAkJ J3dyYXB0YWcnCQk9PgkndWwnLAogCQkncm9vdCcJCQk9PgknJywKIAkJJ2FkZF9zdGFydCcJ CT0+CWZhbHNlLAoJCSdodG1sX2lkJwkJPT4JJycsCgkJJ2NsYXNzJwkJCT0+CScnLAogCQkn YWN0aXZlX2NsYXNzJwk9PgknJywKCSksICRhdHRzKSk7CgoJZ2xvYmFsICRzb29fbXVsdGlk b2M7CglpZiAoICEgKCBfc29vX211bHRpZG9jX2luaXQoKSBhbmQgJHNvb19tdWx0aWRvY1sn c3RhdHVzJ10gKSApIHJldHVybiBmYWxzZTsKCglnbG9iYWwgJHRoaXNhcnRpY2xlOwoJJGNv bGxlY3Rpb24gPSAkc29vX211bHRpZG9jWydjb2xsZWN0aW9uJ107CgkkdGhpc2lkID0gJHRo aXNhcnRpY2xlWyd0aGlzaWQnXTsKCgkkd3JhcHRhZyA9IHRyaW0oc3RydG9sb3dlcigkd3Jh cHRhZykpOwoJaWYgKCAkd3JhcHRhZyAhPSAndWwnIGFuZCAkd3JhcHRhZyAhPSAnb2wnICkK CQlyZXR1cm4gZmFsc2U7CgoJaWYgKCAkcm9vdCApIHsKCQlpZiAoIGlzX251bWVyaWMoJHJv b3QpICkKCQkJJHN0YXJ0X2lkID0gaW50dmFsKCRyb290KTsKCQllbHNlCgkJCSRzdGFydF9p ZCA9ICR0aGlzYXJ0aWNsZVsndGhpc2lkJ107CgkJJHN0YXJ0X25vZGUgPSAkY29sbGVjdGlv bi0+Z2V0X3N1Yl9ub2RlKCRzdGFydF9pZCk7CgkJJG91dCA9ICRzdGFydF9ub2RlLT50b2Mo JHdyYXB0YWcsICR0aGlzaWQsICRhY3RpdmVfY2xhc3MsICRhZGRfc3RhcnQpOwoJfQoJZWxz ZQoJCSRvdXQgPSAkY29sbGVjdGlvbi0+dG9jKCR3cmFwdGFnLCAkdGhpc2lkLCAkYWN0aXZl X2NsYXNzLCAkYWRkX3N0YXJ0KTsKCglyZXR1cm4gJG91dC0+Y2xhc3MoJGNsYXNzKS0+aWQo JGh0bWxfaWQpLT50YWcoKTsKCn0KCmZ1bmN0aW9uIHNvb19tdWx0aWRvY19wYWdlX3RpdGxl KCAkYXR0cyApIHsKLy8gT3V0cHV0IHRhZzogcmVwbGFjZW1lbnQgZm9yIDx0eHA6cGFnZV90 aXRsZSAvPgovLyBSZXF1aXJlcyBhcnRpY2xlIGNvbnRleHQKLy8gSWYgYSBNdWx0aWRvYyBu b24tU3RhcnQgcGFnZSwgU3RhcnQgdGl0bGUgd2lsbCBiZSBhZGRlZCB0byBvdXRwdXQuCi8v IE90aGVyd2lzZSBzdGFuZGFyZCBwYWdlX3RpdGxlKCkgaXMgcmV0dXJuZWQKCglleHRyYWN0 KGxBdHRzKGFycmF5KAogCQknc2VwYXJhdG9yJwkJPT4JJzogJywKCSksICRhdHRzKSk7CgoJ Z2xvYmFsICRzb29fbXVsdGlkb2MsICRzaXRlbmFtZSwgJHRoaXNhcnRpY2xlOwoJaWYgKCAh ICggX3Nvb19tdWx0aWRvY19pbml0KCkgYW5kICRzb29fbXVsdGlkb2NbJ3N0YXR1cyddICkg KQoJCXJldHVybiBwYWdlX3RpdGxlKCRhdHRzKTsKCgkkY29sbGVjdGlvbiA9ICRzb29fbXVs dGlkb2NbJ2NvbGxlY3Rpb24nXTsKCSR0aGlzaWQgPSAkdGhpc2FydGljbGVbJ3RoaXNpZCdd OwoKCXJldHVybiBodG1sc3BlY2lhbGNoYXJzKCRzaXRlbmFtZSAuICRzZXBhcmF0b3IgLiAk Y29sbGVjdGlvbi0+dGl0bGUgLgoJCSggJGNvbGxlY3Rpb24tPmlkICE9ICR0aGlzaWQgPwoJ CQkkc2VwYXJhdG9yIC4gJGNvbGxlY3Rpb24tPmdldF9zdWJfbm9kZV9wcm9wKCR0aGlzaWQs ICd0aXRsZScpCgkJCTogJycKCQkpCgkpOwp9CgpmdW5jdGlvbiBzb29fbXVsdGlkb2NfYnJl YWRjcnVtYnMoICRhdHRzICkgewovLyBPdXRwdXQgdGFnOiBzaG93IGhpZ2hlciBsZXZlbHMg aW4gQ29sbGVjdGlvbgovLyBSZXF1aXJlcyBhcnRpY2xlIGNvbnRleHQKCglleHRyYWN0KGxB dHRzKGFycmF5KAogCQknc2VwYXJhdG9yJwkJPT4JJzogJywKCSksICRhdHRzKSk7CgoJZ2xv YmFsICRzb29fbXVsdGlkb2MsICR0aGlzYXJ0aWNsZTsKCWlmICggISAoIF9zb29fbXVsdGlk b2NfaW5pdCgpIGFuZCAkc29vX211bHRpZG9jWydzdGF0dXMnXSApICkKCQlyZXR1cm47CgoJ JGNvbGxlY3Rpb24gPSAkc29vX211bHRpZG9jWydjb2xsZWN0aW9uJ107CgkkdGhpc19ub2Rl ID0gJGNvbGxlY3Rpb24tPmdldF9zdWJfbm9kZSgkdGhpc2FydGljbGVbJ3RoaXNpZCddKTsK CgkkY3J1bWJzW10gPSAkdGhpc19ub2RlLT50aXRsZTsKCgl3aGlsZSAoICR0aGlzX25vZGUt PmxpbmtfdHlwZSAhPSAnU3RhcnQnICkgewoJCSRwYXJlbnQgPSAkdGhpc19ub2RlLT5nZXRf dXAoKTsKCQkkdGhpc19ub2RlID0gJGNvbGxlY3Rpb24tPmdldF9zdWJfbm9kZSgkcGFyZW50 KTsKCQkkdXJsID0gJHNvb19tdWx0aWRvY1snZGF0YSddWyRwYXJlbnRdWyd1cmwnXTsKCQkk dGFnID0gbmV3IHNvb19odG1sX2FuY2hvcihhcnJheSgnaHJlZicgPT4gJHVybCksCgkJCWVz Y2FwZV90aXRsZSgkdGhpc19ub2RlLT50aXRsZSkpOwoJCWFycmF5X3Vuc2hpZnQoJGNydW1i cywgJHRhZy0+dGFnKCkpOwoJfQoKCXJldHVybiBpbXBsb2RlKCRzZXBhcmF0b3IsICRjcnVt YnMpOwp9CgpmdW5jdGlvbiBzb29faWZfbXVsdGlkb2MoICRhdHRzLCAkdGhpbmcgKSB7Ci8v IENvbmRpdGlvbmFsOiBkb2VzIGN1cnJlbnQgcGFnZSBiZWxvbmcgdG8gb25lIG9mIHRoZSBz cGVjaWZpZWQgTXVsdGlkb2MgY29sbGVjdGlvbnM/Ci8vIElmIG5vIGNvbGxlY3Rpb25zIHNw ZWNpZmllZCwgbG9va3MgZm9yIGFueSBNdWx0aWRvYyBjb2xsZWN0aW9uCi8vIFJlcXVpcmVz IGFydGljbGUgY29udGV4dC4KCglleHRyYWN0KGxBdHRzKGFycmF5KAoJCSdzdGFydF9pZCcJ CT0+CScnLAoJKSwgJGF0dHMpKTsKCglnbG9iYWwgJHNvb19tdWx0aWRvYzsKCglpZiAoICEg KCBfc29vX211bHRpZG9jX2luaXQoKSBhbmQgJHNvb19tdWx0aWRvY1snc3RhdHVzJ10gKSAp CgkJcmV0dXJuIHBhcnNlKEV2YWxFbHNlKCR0aGluZywgZmFsc2UpKTsKCgkkY29sbGVjdGlv biA9ICRzb29fbXVsdGlkb2NbJ2NvbGxlY3Rpb24nXTsKCgkkc3RhcnRfaWRzID0gZG9fbGlz dCgkc3RhcnRfaWQpOwoKCSRvayA9ICggISAkc3RhcnRfaWQgb3IgaW5fYXJyYXkoJGNvbGxl Y3Rpb24tPmlkLCAkc3RhcnRfaWRzKSApCgkJPyB0cnVlIDogZmFsc2U7CgoJcmV0dXJuIHBh cnNlKEV2YWxFbHNlKCR0aGluZywgJG9rKSk7Cn0KCiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwog Ly8JCQkJCQkJU3VwcG9ydCBGdW5jdGlvbnMJCQkJCQkJLy8KLy8tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0v LwoKZnVuY3Rpb24gX3Nvb19tdWx0aWRvY19pbml0KCkgewovLyBUaGUgY2VudHJhbCBjb250 cm9sbGVyIGZvciB0aGUgaW50aWFsaXphdGlvbiByb3V0aW5lczogcmV0cmlldmUgYW5kIHBh cnNlCi8vIE11bHRpZG9jIGZpZWxkIGRhdGEsIGJ1aWxkIGRvY3VtZW50IHRyZWUgKCdjb2xs ZWN0aW9uJykuIEFib3J0IGF0IGFueSBzaWduCi8vIG9mIHRyb3VibGUuIE1vc3QgTXVsdGlk b2MgdGFncyB3aWxsIGFib3J0IGlmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KCgln bG9iYWwgJHNvb19tdWx0aWRvYywgJGlzX2FydGljbGVfbGlzdCwgJHRoaXNhcnRpY2xlLCAk cHJlZnM7CgoJLy8gTXVsdGlkb2MgdGFncyBub3QgYWxsb3dlZCBpbiBsaXN0cy4uLgoJaWYg KCAkaXNfYXJ0aWNsZV9saXN0ICkgcmV0dXJuIGZhbHNlOwoKCS8vIG9ubHkgcnVuIGluaXQo KSBvbmNlIHBlciBwYWdlCglpZiAoICRzb29fbXVsdGlkb2NbJ2luaXQnXSApIHJldHVybiB0 cnVlOwoKCS8vIHBvcHVsYXRlIGdsb2JhbCBhcnJheXMgb2YgTXVsdGlkb2MgYXJ0aWNsZSBJ RHMKCV9zb29fbXVsdGlkb2NfaWRzX2luaXQoKTsKCgkvLyBhcnRpY2xlIGNvbnRleHQgY2hl Y2sgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCWFz c2VydF9hcnRpY2xlKCk7CglpZiAoIGVtcHR5KCR0aGlzYXJ0aWNsZSkgKQoJCXJldHVybiBf c29vX211bHRpZG9jX2RlYnVnKCk7CgoJJHRoaXNpZCA9ICR0aGlzYXJ0aWNsZVsndGhpc2lk J107CgoKCS8vIGZpbmQgTXVsdGlkb2MgY3VzdG9tIGZpZWxkIC4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoJJGN1c3RvbV9maWVsZCA9IF9zb29fbXVsdGlk b2NfY3VzdG9tX2ZpZWxkKCk7CS8vIGUuZy4gJ2N1c3RvbV8yJwoJaWYgKCBlbXB0eSgkY3Vz dG9tX2ZpZWxkKSApCgkJcmV0dXJuIF9zb29fbXVsdGlkb2NfZGVidWcoKTsKCglpZiAoICEg X3Nvb19tdWx0aWRvY19kYXRhX2luaXQoKSApCgkJcmV0dXJuIF9zb29fbXVsdGlkb2NfZGVi dWcoKTsKCglleHRyYWN0KCRzb29fbXVsdGlkb2MpOwoKCS8vIGlzIHRoaXMgYSBNdWx0aWRv YyBhcnRpY2xlPwoJaWYgKCAhIGlzc2V0KCRpZF9wYXJlbnRbJHRoaXNpZF0pICkKCQlyZXR1 cm4gX3Nvb19tdWx0aWRvY19kZWJ1ZygpOwoKCS8vIFN0YXJ0IHBhZ2UgZm9yIGN1cnJlbnQg YXJ0aWNsZSdzIE11bHRpZG9jIGNvbGxlY3Rpb24KCSRzdGFydCA9IGlzc2V0KCRpZF9yb290 WyR0aGlzaWRdKSA/ICRpZF9yb290WyR0aGlzaWRdIDogJHRoaXNpZDsKCgoJLy8gYnVpbGQg ZG9jdW1lbnQgdHJlZSAvLy8vLy8vLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLgoJJHRyZWUgPSBfc29vX211bHRpZG9jX2J1aWxkX3RyZWUoJHN0YXJ0KTsK CWlmICggISBpc19hcnJheSgkdHJlZSkgKQoJCXJldHVybiBfc29vX211bHRpZG9jX2RlYnVn KCR0cmVlKTsKCgkvLyBfc29vX211bHRpZG9jX2J1aWxkX3RyZWUoKSBnZXRzIGV2ZXJ5dGhp bmcgYnV0IHRoZSBTdGFydCBub2RlIGl0c2VsZgoJJGNvbGxlY3Rpb24gPSBuZXcgc29vX211 bHRpZG9jX25vZGUoJHN0YXJ0KTsKCSRjb2xsZWN0aW9uLT5saW5rX3R5cGUoJ1N0YXJ0JykK CQktPnRpdGxlKCRkYXRhWyRzdGFydF1bJ1RpdGxlJ10pCgkJLT5jaGlsZHJlbigkdHJlZSk7 CgoKCS8vIGdvIGJhY2sgYW5kIHNldCAnbmV4dCcgdmFsdWVzIC8vLy8vLy8uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCSRuZXh0X25vZGUgPSBhcnJheV9zaGlmdCgkdHJl ZSk7CgkkY29sbGVjdGlvbi0+bmV4dCgkbmV4dF9ub2RlLT5pZCk7Cgl1bnNldCgkbmV4dF9u b2RlKTsKCSRuZXh0ID0gJGNvbGxlY3Rpb24tPnlvdW5nZXN0KCk7CgkkdG9fc2V0ID0gJGNv bGxlY3Rpb24tPmdldF9wcmV2KCRuZXh0KTsKCXdoaWxlICggaXNfbnVtZXJpYygkdG9fc2V0 KSBhbmQgJHRvX3NldCA+IDAgKSB7CgkJJG5leHRfdG9fc2V0ID0gJGNvbGxlY3Rpb24tPnNl dF9uZXh0X2J5X2lkKCR0b19zZXQsICRuZXh0KTsKCQkkbmV4dCA9ICR0b19zZXQ7CgkJJHRv X3NldCA9ICRuZXh0X3RvX3NldDsKCX0KCWlmICggJHRvX3NldCApCgkJcmV0dXJuIF9zb29f bXVsdGlkb2NfZGVidWcoJHRvX3NldCk7CgoKCS8vIFN1Y2Nlc3MhISEgLy8vLy8vLy4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoJJHNvb19t dWx0aWRvY1snY29sbGVjdGlvbiddID0gJiRjb2xsZWN0aW9uOwoJJHNvb19tdWx0aWRvY1sn aW5pdCddID0gdHJ1ZTsKCSRzb29fbXVsdGlkb2NbJ3N0YXR1cyddID0gdHJ1ZTsKCXJldHVy biB0cnVlOwp9CgpmdW5jdGlvbiBfc29vX211bHRpZG9jX2J1aWxkX3RyZWUoJHN0YXJ0X2lk KSB7CgoJZ2xvYmFsICRzb29fbXVsdGlkb2M7CglleHRyYWN0KCRzb29fbXVsdGlkb2MpOwoK CXN0YXRpYyAkX3Nvb19tdWx0aWRvY19mYWlsc2FmZTsKCXN0YXRpYyAkX3Nvb19tdWx0aWRv Y19wcmV2OwoJJF9zb29fbXVsdGlkb2NfcHJldiA9ICRzdGFydF9pZDsKCSRfc29vX211bHRp ZG9jX2ZhaWxzYWZlICsrOwoJaWYgKCAkX3Nvb19tdWx0aWRvY19mYWlsc2FmZSA+IDk5OSAp CgkJcmV0dXJuIHNvb19tdWx0aWRvY19nVHh0KCdyZWN1cnNpb25fd2FybmluZycpIC4gIjog SUQgJHN0YXJ0X2lkIjsKCgkkb3V0ID0gYXJyYXkoKTsKCglmb3JlYWNoICggJGlkX2NoaWxk cmVuWyRzdGFydF9pZF0gYXMgJGNoaWxkICkgewoKCQlleHRyYWN0KCRkYXRhWyRjaGlsZF0p OwoJCSRub2RlID0gbmV3IHNvb19tdWx0aWRvY19ub2RlKCRjaGlsZCk7CgkJJG5vZGUtPmxp bmtfdHlwZSgkbGlua190eXBlKQoJCQktPnRpdGxlKCRUaXRsZSkKCQkJLT51cCgkcGFyZW50 KTsJLy8gdGhpcyBub2RlJ3MgcGFyZW50CgkJJG5vZGUtPnByZXYoJF9zb29fbXVsdGlkb2Nf cHJldik7CgkJJF9zb29fbXVsdGlkb2NfcHJldiA9ICRjaGlsZDsKCgkJaWYgKCBpc3NldCgk aWRfY2hpbGRyZW5bJGNoaWxkXSkgKSB7CgkJCSRyZXN1bHQgPSBfc29vX211bHRpZG9jX2J1 aWxkX3RyZWUoJGNoaWxkKTsKCQkJaWYgKCAhIGlzX2FycmF5KCRyZXN1bHQpICkJLy8gcmVj dXJzaW9uIGxpbWl0IHdhcm5pbmcKCQkJCXJldHVybiAkcmVzdWx0OwoJCQkkbm9kZS0+Y2hp bGRyZW4oJHJlc3VsdCk7CgkJCSRvdXRbJGNoaWxkXSA9ICRub2RlOwoJCX0KCQllbHNlCgkJ CSRvdXRbJGNoaWxkXSA9ICRub2RlOwoKCQl1bnNldCgkbm9kZSk7Cgl9CgoJcmV0dXJuICRv dXQ7Cn0KCmZ1bmN0aW9uIF9zb29fbXVsdGlkb2NfY3VzdG9tX2ZpZWxkKCkgewovLyBmaW5k IE11bHRpZG9jIGN1c3RvbSBmaWVsZAoKCWdsb2JhbCAkc29vX211bHRpZG9jLCAkcHJlZnM7 CgkkZiA9ICRzb29fbXVsdGlkb2NbJ2N1c3RvbV9maWVsZCddOwoKCWlmICggJGYgPT0gLTEg KSByZXR1cm4gZmFsc2U7CglpZiAoICRmICkgcmV0dXJuICRmOwoKCSRuYW1lID0gJHNvb19t dWx0aWRvY1snY3VzdG9tX2ZpZWxkX25hbWUnXTsKCglmb3JlYWNoICggJHByZWZzIGFzICRr ZXkgPT4gJHZhbHVlICkKCQlpZiAoIHByZWdfbWF0Y2goJy9eKGN1c3RvbV9cZCspL2knLCAk a2V5LCAkbWF0Y2gpICkKCQkJaWYgKCAkdmFsdWUgPT0gJG5hbWUgKSB7CgkJCQkkc29vX211 bHRpZG9jWydjdXN0b21fZmllbGQnXSA9ICRtYXRjaFsxXTsJLy8gZS5nLiAnY3VzdG9tXzIn CgkJCQlyZXR1cm4gJG1hdGNoWzFdOwoJCQl9Cgkkc29vX211bHRpZG9jWydjdXN0b21fZmll bGQnXSA9IC0xOwoJcmV0dXJuIF9zb29fbXVsdGlkb2NfZGVidWcoCgkJc29vX211bHRpZG9j X2dUeHQoJ2N1c3RvbV9maWVsZCcpIC4gJG5hbWUgLiBzb29fbXVsdGlkb2NfZ1R4dCgnbm90 X2ZvdW5kJykKCSk7Cn0KCmZ1bmN0aW9uIF9zb29fbXVsdGlkb2NfaWRzX2luaXQoKSB7Ci8v IGZpbmQgYWxsIGFydGljbGVzIGJlbG9uZ2luZyB0byBNdWx0aWRvYyBjb2xsZWN0aW9ucwov LyBjaGVjayBmb3IgZHVwbGljYXRlIGxpc3RpbmdzOyBhYm9ydCBpZiBmb3VuZAoKCWdsb2Jh bCAkc29vX211bHRpZG9jOwoKCWlmICggaXNfYXJyYXkoJHNvb19tdWx0aWRvY1snbm9pbmRl eCddKSApCgkJcmV0dXJuIHRydWU7CgoJJG5vaW5kZXggPSBhcnJheSgpOwoJJGlkX3BhcmVu dCA9IGFycmF5KCk7CgkkaWRfbGlua190eXBlID0gYXJyYXkoKTsKCSRpZF9jaGlsZHJlbiA9 IGFycmF5KCk7CgkkZHVwbGljYXRlcyA9IGFycmF5KCk7CgoJJGN1c3RvbV9maWVsZCA9IF9z b29fbXVsdGlkb2NfY3VzdG9tX2ZpZWxkKCk7CS8vIGUuZy4gJ2N1c3RvbV8yJwoJaWYgKCBl bXB0eSgkY3VzdG9tX2ZpZWxkKSApCgkJcmV0dXJuIGZhbHNlOwoKCSRxdWVyeSA9IG5ldyBz b29fdHhwX3NlbGVjdCgndGV4dHBhdHRlcm4nKTsKCSRxdWVyeS0+c2VsZWN0KCdJRCcpLT53 aGVyZSgnU3RhdHVzJywgMywgJz4nKTsJLy8gbGl2ZSBvciBzdGlja3kgc3RhdHVzCglpZiAo ICEgZ2V0X3ByZWYoJ3B1Ymxpc2hfZXhwaXJlZF9hcnRpY2xlcycpICkgewoJCSRxdWVyeS0+ d2hlcmVfY2xhdXNlKCcobm93KCkgPD0gRXhwaXJlcyBvciBFeHBpcmVzID0gJyAuCgkJCU5V TExEQVRFVElNRSAuICcpJyk7Cgl9Cglzd2l0Y2ggKCAkc29vX211bHRpZG9jWydwb3N0ZWRf dGltZSddICkgewoJCWNhc2UgJ3Bhc3QnOgoJCQkkcXVlcnktPndoZXJlX2NsYXVzZSgnUG9z dGVkIDw9IG5vdygpJyk7CgkJCWJyZWFrOwoJCWNhc2UgJ2Z1dHVyZSc6CgkJCSRxdWVyeS0+ d2hlcmVfY2xhdXNlKCdQb3N0ZWQgPiBub3coKScpOwoJCQlicmVhazsKCX0KCSRhbGxfaWRz ID0gbmV3IHNvb190eHBfcm93c2V0KCRxdWVyeSk7CiAJJGFsbF9pZHMgPSAkYWxsX2lkcy0+ ZmllbGRfdmFscygnSUQnKTsKCgkkcXVlcnkgPSBuZXcgc29vX3R4cF9zZWxlY3QoJ3RleHRw YXR0ZXJuJyk7CgkkcXVlcnktPnNlbGVjdChhcnJheSgnSUQnLCAkY3VzdG9tX2ZpZWxkKSkK IAkJLT5yZWdleHAoJ1tbOmRpZ2l0Ol1dJywgJGN1c3RvbV9maWVsZCk7CiAJJGRhdGEgPSBu ZXcgc29vX3R4cF9yb3dzZXQoJHF1ZXJ5KTsKIAkkZGF0YSA9ICRkYXRhLT5maWVsZF92YWxz KCRjdXN0b21fZmllbGQsICdJRCcpOwoJdW5zZXQoJHF1ZXJ5KTsKCglmb3JlYWNoICggJGRh dGEgYXMgJHBhcmVudCA9PiAkZmllbGQgKSB7CgkJaWYgKCBpbl9hcnJheSgkcGFyZW50LCAk YWxsX2lkcykgKSB7CgkJCSRncm91cHMgPSBkb19saXN0KHN0cnRvbG93ZXIoJGZpZWxkKSk7 CgkJCWZvcmVhY2ggKCAkZ3JvdXBzIGFzICRncm91cCApIHsKCQkJCXByZWdfbWF0Y2hfYWxs KCcvXHMoXGQrKS8nLCAkZ3JvdXAsICRjaGlsZHJlbik7CgkJCQlmb3JlYWNoICggJGNoaWxk cmVuWzFdIGFzICRpID0+ICRjaGlsZCApCgkJCQkJaWYgKCAhIGluX2FycmF5KCRjaGlsZCwg JGFsbF9pZHMpICkKCQkJCQkJdW5zZXQoJGNoaWxkcmVuWzFdWyRpXSk7CgkJCQlwcmVnX21h dGNoKCcvXlxzKihcdyspXHMvJywgJGdyb3VwLCAkbGlua190eXBlKTsKCQkJCWlmICggaXNz ZXQoJGlkX2NoaWxkcmVuWyRwYXJlbnRdKSApIHsKCQkJCQlmb3JlYWNoICggJGNoaWxkcmVu WzFdIGFzICRjaGlsZCApCgkJCQkJCWFycmF5X3B1c2goJGlkX2NoaWxkcmVuWyRwYXJlbnRd LCAkY2hpbGQpOwoJCQkJfQoJCQkJZWxzZQoJCQkJCSRpZF9jaGlsZHJlblskcGFyZW50XSA9 ICRjaGlsZHJlblsxXTsKCQkJCWZvcmVhY2ggKCAkY2hpbGRyZW5bMV0gYXMgJGNoaWxkICkg ewoJCQkJCWlmICggaXNzZXQoJG5vaW5kZXhbJGNoaWxkXSkgKSB7CgkJCQkJCSRkdXBsaWNh dGVzW10gPSAkY2hpbGQ7CgkJCQkJCSRkdXBsaWNhdGVzW10gPSAkcGFyZW50OwoJCQkJCX0K CQkJCQllbHNlIHsKCQkJCQkJJG5vaW5kZXhbJGNoaWxkXSA9ICRwYXJlbnQ7CgkJCQkJCSRp ZF9saW5rX3R5cGVbJGNoaWxkXSA9ICRsaW5rX3R5cGVbMV07CgkJCQkJfQoJCQkJfQoJCQl9 CgkJfQoJfQoKCSRkdXBsaWNhdGVzID0gYXJyYXlfdW5pcXVlKCRkdXBsaWNhdGVzKTsKCglp ZiAoIGNvdW50KCRkdXBsaWNhdGVzKSApIHsKCQlfc29vX211bHRpZG9jX2RlYnVnKAoJCQlz b29fbXVsdGlkb2NfZ1R4dCgnbXVsdGlwbGVfbGlzdGluZ3MnKSAuIGltcGxvZGUoJywgJywg JGR1cGxpY2F0ZXMpKTsKCQkkc29vX211bHRpZG9jWydzdGF0dXMnXSA9IGZhbHNlOwoJCSRz b29fbXVsdGlkb2NbJ25vaW5kZXgnXSA9IGFycmF5KCk7CgkJcmV0dXJuIGZhbHNlOwoJfQoK CSRpZF9wYXJlbnQgPSAkbm9pbmRleDsKCgkkc3RhcnRfaWRzID0gYXJyYXlfZGlmZihhcnJh eV9rZXlzKCRkYXRhKSwgYXJyYXlfa2V5cygkbm9pbmRleCkpOwoKCWZvcmVhY2ggKCAkc3Rh cnRfaWRzIGFzICRpZCApIHsKCQkkaWRfcGFyZW50WyRpZF0gPSAnc3RhcnQnOwoJCSRpZF9s aW5rX3R5cGVbJGlkXSA9ICdzdGFydCc7Cgl9CgoJJGlkX3Jvb3QgPSBhcnJheSgpOwoJZm9y ZWFjaCAoICRub2luZGV4IGFzICRpZCA9PiAkcGFyZW50ICkKCQkkaWRfcm9vdFskaWRdID0g X3Nvb19tdWx0aWRvY19maW5kX3Jvb3QoJGlkLCAkaWRfcGFyZW50KTsKCgkkc29vX211bHRp ZG9jWydpZF9wYXJlbnQnXSA9ICRpZF9wYXJlbnQ7CS8vIGtleSA9IGlkLCB2YWx1ZSA9IHBh cmVudCBpZAoJJHNvb19tdWx0aWRvY1snaWRfcm9vdCddID0gJGlkX3Jvb3Q7CQkvLyBrZXkg PSBpZCwgdmFsdWUgPSByb290IGlkCgkkc29vX211bHRpZG9jWydpZF9saW5rX3R5cGUnXSA9 ICRpZF9saW5rX3R5cGU7CQkvLyBrZXkgPSBpZCwgdmFsdWUgPSBsaW5rX3R5cGUKCSRzb29f bXVsdGlkb2NbJ2lkX2NoaWxkcmVuJ10gPSAkaWRfY2hpbGRyZW47CQkvLyBrZXkgPSBpZCwg dmFsdWUgPSBhcnJheQoJJHNvb19tdWx0aWRvY1snbm9pbmRleCddID0gYXJyYXlfa2V5cygk bm9pbmRleCk7CS8vIGp1c3QgdGhlIGlkcwoJcmV0dXJuIHRydWU7Cgp9CgpmdW5jdGlvbiBf c29vX211bHRpZG9jX2ZpbmRfcm9vdCgkaWQsICRpZF9wYXJlbnQpIHsKLy8gbGl0dGxlIHJl Y3Vyc2l2ZSBmdW5jdGlvbiB0byBmaW5kIGVhY2ggYXJ0aWNsZSdzIENvbGxlY3Rpb24gSUQK CWlmICggaXNfbnVtZXJpYygkaWRfcGFyZW50WyRpZF0pICkKCQlyZXR1cm4gX3Nvb19tdWx0 aWRvY19maW5kX3Jvb3QoJGlkX3BhcmVudFskaWRdLCAkaWRfcGFyZW50KTsKCXJldHVybiAk aWQ7Cn0KCmZ1bmN0aW9uIF9zb29fbXVsdGlkb2NfZGF0YV9pbml0KCkgewovLyBhc3NlbWJs ZSBtYXN0ZXIgYXJyYXkgb2YgTXVsdGlkb2MgYXJ0aWNsZSBpbmZvCgoJZ2xvYmFsICRzb29f bXVsdGlkb2MsICRwZXJtbGlua3M7CglleHRyYWN0KCRzb29fbXVsdGlkb2MpOwoKCWlmICgg aXNfYXJyYXkoJGRhdGEpICkKCQlyZXR1cm4gdHJ1ZTsKCglpZiAoIGVtcHR5KCRpZF9wYXJl bnQpIG9yICRjdXN0b21fZmllbGQgPT0gJycgb3IgJGN1c3RvbV9maWVsZCA9PSAtMSApCgkJ CXJldHVybiBmYWxzZTsKCgkkcXVlcnkgPSBuZXcgc29vX3R4cF9zZWxlY3QoJ3RleHRwYXR0 ZXJuJyk7CgkkcnMgPSAkcXVlcnktPgoJCXNlbGVjdChhcnJheSgKCQkJJ0lEJywKCQkJJ1Rp dGxlJywKCQkJJ3VybF90aXRsZScsCgkJCSdTZWN0aW9uJywKCQkJJ3VuaXhfdGltZXN0YW1w KFBvc3RlZCkgYXMgcG9zdGVkJywKCQkJJGN1c3RvbV9maWVsZCkKCQkJKS0+cm93cygpOwoJ dW5zZXQoJHF1ZXJ5KTsKCgkkb3V0ID0gYXJyYXkoKTsKCgkkYWxsX2lkcyA9IGFycmF5KCk7 CgoJZm9yZWFjaCAoICRycyBhcyAkciApIHsKCQkkaWQgPSAkclsnSUQnXTsKCQkkYWxsX2lk c1skaWRdID0gJGlkOwoJCWlmICggaXNzZXQoJGlkX3BhcmVudFskaWRdKSApIHsKCQkJJHJb J3Jvb3QnXSA9IGlzc2V0KCRpZF9yb290WyRpZF0pID8gJGlkX3Jvb3RbJGlkXSA6ICRpZDsK CQkJJHJbJ3BhcmVudCddID0gJGlkX3BhcmVudFskaWRdOwoJCQkkclsnbGlua190eXBlJ10g PSAkaWRfbGlua190eXBlWyRpZF07CgkJCSRyWyd1cmwnXSA9IF9zb29fbXVsdGlkb2NfdXJs KCRyKTsKCQkJJG91dFskaWRdID0gJHI7CgkJfQoJfQoKCSRpbnZhbGlkX2lkcyA9IGFycmF5 X2RpZmYoYXJyYXlfa2V5cygkaWRfcGFyZW50KSwgJGFsbF9pZHMpOwoKCWlmICggY291bnQo JGludmFsaWRfaWRzKSApIHsKCQlmb3JlYWNoICggJGludmFsaWRfaWRzIGFzICRpICkKCQkJ X3Nvb19tdWx0aWRvY19kZWJ1Zyhzb29fbXVsdGlkb2NfZ1R4dCgnaW52YWxpZF9pZF8xJykg LiAkaWRfcGFyZW50WyRpXSAuCgkJCQlzb29fbXVsdGlkb2NfZ1R4dCgnaW52YWxpZF9pZF8y JykgLiAkaSk7CgkJcmV0dXJuIGZhbHNlOwoJfQoKCSRzb29fbXVsdGlkb2NbJ2RhdGEnXSA9 ICRvdXQ7CglyZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gX3Nvb19tdWx0aWRvY191cmwoICRh cnRpY2xlX2FycmF5ICkgewovLyBiYXNpY2FsbHkgYSBjb3B5IG9mIHBlcm1saW5rdXJsKCks IHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGRiIGNhbGxzCgoJZ2xvYmFsICRwZXJtbGlua19t b2RlLCAkcHJlZnM7CgoJaWYgKGlzc2V0KCRwcmVmc1snY3VzdG9tX3VybF9mdW5jJ10pIGFu ZCBpc19jYWxsYWJsZSgkcHJlZnNbJ2N1c3RvbV91cmxfZnVuYyddKSkKCQlyZXR1cm4gY2Fs bF91c2VyX2Z1bmMoJHByZWZzWydjdXN0b21fdXJsX2Z1bmMnXSwgJGFydGljbGVfYXJyYXks IFBFUk1MSU5LVVJMKTsKCglpZiAoZW1wdHkoJGFydGljbGVfYXJyYXkpKSByZXR1cm47CgoJ ZXh0cmFjdCgkYXJ0aWNsZV9hcnJheSk7CgoJJFNlY3Rpb24gPSB1cmxlbmNvZGUoJFNlY3Rp b24pOwoJJHVybF90aXRsZSA9IHVybGVuY29kZSgkdXJsX3RpdGxlKTsKCglzd2l0Y2goJHBl cm1saW5rX21vZGUpIHsKCQljYXNlICdzZWN0aW9uX2lkX3RpdGxlJzoKCQkJaWYgKCRwcmVm c1snYXR0YWNoX3RpdGxlc190b19wZXJtYWxpbmtzJ10pCgkJCXsKCQkJCSRvdXQgPSBodS4i JFNlY3Rpb24vJElELyR1cmxfdGl0bGUiOwoJCQl9ZWxzZXsKCQkJCSRvdXQgPSBodS4iJFNl Y3Rpb24vJElELyI7CgkJCX0KCQkJYnJlYWs7CgkJY2FzZSAneWVhcl9tb250aF9kYXlfdGl0 bGUnOgoJCQlsaXN0KCR5LCRtLCRkKSA9IGV4cGxvZGUoIi0iLGRhdGUoIlktbS1kIiwkcG9z dGVkKSk7CgkJCSRvdXQgPSAgaHUuIiR5LyRtLyRkLyR1cmxfdGl0bGUiOwoJCQlicmVhazsK CQljYXNlICdpZF90aXRsZSc6CgkJCWlmICgkcHJlZnNbJ2F0dGFjaF90aXRsZXNfdG9fcGVy bWFsaW5rcyddKQoJCQl7CgkJCQkkb3V0ID0gaHUuIiRJRC8kdXJsX3RpdGxlIjsKCQkJfWVs c2V7CgkJCQkkb3V0ID0gaHUuIiRJRC8iOwoJCQl9CgkJCWJyZWFrOwoJCWNhc2UgJ3NlY3Rp b25fdGl0bGUnOgoJCQkkb3V0ID0gaHUuIiRTZWN0aW9uLyR1cmxfdGl0bGUiOwoJCQlicmVh azsKCQljYXNlICd0aXRsZV9vbmx5JzoKCQkJJG91dCA9IGh1LiIkdXJsX3RpdGxlIjsKCQkJ YnJlYWs7CgkJY2FzZSAnbWVzc3knOgoJCQkkb3V0ID0gaHUuImluZGV4LnBocD9pZD0kSUQi OwoJCQlicmVhazsKCX0KCXJldHVybiAkb3V0OwoKfQoKZnVuY3Rpb24gX3Nvb19tdWx0aWRv Y19kZWJ1ZyggJG1lc3NhZ2UgPSAnJyApIHsKLy8gZGlzcGxheSBlcnJvciBtZXNzYWdlCgoJ Z2xvYmFsICRzb29fbXVsdGlkb2M7CgoJJHNvb19tdWx0aWRvY1snaW5pdCddID0gdHJ1ZTsK CglpZiAoICEgJG1lc3NhZ2UgKSByZXR1cm4gZmFsc2U7CgoJJHByZWZpeCA9ICdzb29fbXVs dGlkb2M6ICc7CgkkcG9zdGZpeCA9IG47CgoJJGRvbWFpbiA9ICRfU0VSVkVSWydIVFRQX0hP U1QnXTsKCSRpc19kZXZfc2l0ZSA9ICRkb21haW4gPT0gJHNvb19tdWx0aWRvY1snZGV2X2Rv bWFpbiddID8gdHJ1ZSA6IGZhbHNlOwoJaWYgKCAhICRpc19kZXZfc2l0ZSApIHsKCQkkcHJl Zml4ID0gJzwhLS0gJyAuICRwcmVmaXg7CgkJJHBvc3RmaXggPSAnIC0tPicgLiAkcG9zdGZp eDsKCX0KCWVsc2UKCQkkcG9zdGZpeCA9ICc8YnIgLz4nIC4gJHBvc3RmaXg7CgoJZWNobyAk cHJlZml4IC4gJG1lc3NhZ2UgLiAkcG9zdGZpeDsKCglyZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0 aW9uIF9zb29fbXVsdGlkb2NfdGVtcF90YWJsZSAoICkgewovLyBNeVNRTCB0ZW1wb3Jhcnkg dGFibGUgdG8gZmlsdGVyIE11bHRpZG9jIGludGVyaW9yIHBhZ2VzIGZyb20gYXJ0aWNsZSBs aXN0cwoJZ2xvYmFsICRwcmV0ZXh0LCAkaXNfYXJ0aWNsZV9saXN0LCAkc29vX211bHRpZG9j OwoJaWYgKCAhICRpc19hcnRpY2xlX2xpc3Qgb3IKCQkkcHJldGV4dFsncSddIG9yCgkJJHNv b19tdWx0aWRvY1snbGlzdF9hbGwnXSBvcgoJCSEgX3Nvb19tdWx0aWRvY19pZHNfaW5pdCgp IG9yCgkJZW1wdHkoJHNvb19tdWx0aWRvY1snbm9pbmRleCddKQoJKQoJCXJldHVybjsKCSR0 YWJsZSA9IHNhZmVfcGZ4KCd0ZXh0cGF0dGVybicpOwoJc2FmZV9xdWVyeSgKCQkiY3JlYXRl IHRlbXBvcmFyeSB0YWJsZSAkdGFibGUgc2VsZWN0ICogZnJvbSAkdGFibGUgd2hlcmUgSUQg bm90IGluICgiCgkJLiBpbXBsb2RlKCcsJywgJHNvb19tdWx0aWRvY1snbm9pbmRleCddKSAu ICIpIik7Cn0KCnJlZ2lzdGVyX2NhbGxiYWNrKCdfc29vX211bHRpZG9jX3RlbXBfdGFibGUn LCAncHJldGV4dF9lbmQnKTsKIjtzOjQ6InR5cGUiO3M6MToiMSI7czo1OiJmbGFncyI7czox OiIzIjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6MzoibWQ1IjtzOjMyOiI5NTFkMmJiZjZlNmMy MjQ1ZWFiOGYxZjdjZjAyZjViMCI7fQ==