# tru_tags v1.7 # Tagging support # Nathan Arthur # http://www.rainskit.com/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjc6InZlcnNpb24iO3M6MzoiMS43IjtzOjY6ImF1dGhvciI7czoxMzoiTmF0aGFu IEFydGh1ciI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3d3dy50cnVpc3QuY29t LyI7czoxMToiZGVzY3JpcHRpb24iO3M6MTU6IlRhZ2dpbmcgc3VwcG9ydCI7czo0OiJ0eXBl IjtpOjA7czo0OiJuYW1lIjtzOjg6InRydV90YWdzIjtzOjQ6ImhlbHAiO3M6MTY5MTE6IgoJ PHA+VG8gbGVhcm4gbW9yZSBhYm91dCB0cnVfdGFncywgY2hlY2sgb3V0IHRoZSA8YSBocmVm PSIvYmxvZy80OTMvdHJ1dGFncy1hLXRhZ2dpbmctcGx1Z2luLWZvci10ZXh0cGF0dGVybiI+ aW50cm9kdWN0b3J5IGFydGljbGU8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vd3d3LnRydWlz dC5jb20vcmVmZXJlbmNlLzQ5NS90cnV0YWdzLWZlYXR1cmUtbGlzdCI+ZmVhdHVyZSBsaXN0 PC9hPi48L3A+Cgk8cD5Db3B5cmlnaHQgMjAwNiBOYXRoYW4gQXJ0aHVyPC9wPgoJPHA+UmVs ZWFzZWQgdW5kZXIgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSwgc2VlIGh0dHA6Ly93d3cub3Bl bnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UucGhwIGZvciBkZXRhaWxzPC9wPgoJ PHA+VGhpcyB3b3JrIGlzIGJhc2VkIG9uIHJhbl90YWdzIGJ5IFJhbiBBcm91c3NpLCBvcmln aW5hbGx5IGZvdW5kIGF0IGh0dHA6Ly9hcm91c3NpLmNvbS9hcnRpY2xlLzQ1L3RhZ2dpbmct dGV4dHBhdHRlcm4uICBJdCBhbHNvIGNvbnRhaW5zIGNvZGUgYWRhcHRlZCBmcm9tIGdkdHJv aWFubywgc2VlIGh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9w aWQ9MTAyODc1I3AxMDI4NzUuPC9wPgoJPGgzPkNvbmZpZ3VyYXRpb248L2gzPgoJPGg0PlN0 ZXAgMTogQ3JlYXRlIGEgbmV3IHNlY3Rpb248L2g0PgoJPHA+dHJ1X3RhZ3MgZGVwZW5kcyBv biB0aGUgZXhpc3RlbmNlIG9mIGEgc3BlY2lhbCBUZXh0cGF0dGVybiBzZWN0aW9uIG5hbWVk ICYjODIyMDt0YWcsJiM4MjIxOyBieSBkZWZhdWx0PHN1cD48YSBocmVmPSIjZm4xMTQ0OTEz MTg2NDQ3YmM0MTlkYTQ2ZiI+MTwvYT48L3N1cD4uICBDcmVhdGUgdGhhdCBzZWN0aW9uLCB1 c2luZyB3aGF0ZXZlciBzZXR0aW5ncyB5b3UgbGlrZS4gIChZb3Ugd29uJiM4MjE3O3QgYmUg cHVibGlzaGluZyBhcnRpY2xlcyB0byB0aGF0IHNlY3Rpb24uKSAgSGVyZSYjODIxNztzIHdo YXQgSSB1c2U8c3VwPjxhIGhyZWY9IiNmbjcyNzkxODUzMjQ0N2JjNDE5ZGYyOGMiPjI8L2E+ PC9zdXA+OjwvcD4KCTxwPjxpbWcgc3JjPSJodHRwOi8vd3d3LnRydWlzdC5jb20vaW1hZ2Vz LzIucG5nIiBoZWlnaHQ9IjI4MCIgd2lkdGg9IjM5OCIgYWx0PSJ0YWcgc2VjdGlvbiBjb25m aWd1cmF0aW9uIiBjbGFzcz0iZGlhZ3JhbSIgLz48L3A+Cgk8cCBjbGFzcz0iZm9vdG5vdGUi IGlkPSJmbjExNDQ5MTMxODY0NDdiYzQxOWRhNDZmIj48c3VwPjE8L3N1cD4gWW91IGNhbiB1 c2UgYSBkaWZmZXJlbnQgbmFtZSwgYnV0IHlvdSBoYXZlIHRvIHVzZSBhIHNwZWNpYWwgYXR0 cmlidXRlIGluIHNvbWUgb2YgdGhlIHBsdWdpbiBjYWxscyB0byBtYWtlICBldmVyeXRoaW5n IHdvcmsgY29ycmVjdGx5LiAgU2VlIGJlbG93IGZvciBkZXRhaWxzLjwvcD4KCTxwIGNsYXNz PSJmb290bm90ZSIgaWQ9ImZuNzI3OTE4NTMyNDQ3YmM0MTlkZjI4YyI+PHN1cD4yPC9zdXA+ IE5vdGUgdGhhdCBJIHVzZSB0aGUgJiM4MjE2O2RlZmF1bHQmIzgyMTc7IHBhZ2UgJiM4MjEx OyB0aGF0IGNob2ljZSBtYXkgbm90IGJlIHJpZ2h0IGZvciB5b3UuICBUaGlzIHNlY3Rpb24g d2lsbCBiZSBzaG93biB3aGVuZXZlciB5b3UgY2xpY2sgb24gYSB0YWcsIHRvIGRpc3BsYXkg dGhlIHRhZyBzZWFyY2ggcmVzdWx0cy4gIFlvdSYjODIxNztsbCB3YW50IGEgcGFnZSB0aGF0 IGhhcyB0aGUgY29ycmVjdCBsYXlvdXQvaGVhZGVycy9mb290ZXJzLiAgSSB1c2UgbXkgZGVm YXVsdCBwYWdlLCB3aXRoIDxjb2RlPiZsdDt0eHA6aWZfc2VjdGlvbiBuYW1lPSJ0YWciJmd0 OzwvY29kZT4gdG8gY2hhbmdlIHRoZSBwYWdlIGRpc3BsYXkgaW4gdGhpcyBjYXNlLjwvcD4K CTxoND5TdGVwIDI6IENhbGwgdGhlIHBsdWdpbiBmcm9tIHRoYXQgc2VjdGlvbjwvaDQ+Cgk8 cD5UbyBtYWtlIHRhZyBzZWFyY2hpbmcgYW5kIHRoZSBkZWZhdWx0IHRhZyBjbG91ZCB3b3Jr LCB5b3UmIzgyMTc7bGwgbmVlZCB0byBjYWxsIDxjb2RlPiZsdDt0eHA6dHJ1X3RhZ3NfaGFu ZGxlciAvJmd0OzwvY29kZT4gZnJvbSB0aGUgcGFnZSB5b3UgY2hvc2UgaW4gU3RlcCAxLiAg SSByZXBsYWNlZCB0aGUgZGVmYXVsdCA8Y29kZT4mbHQ7dHhwOmFydGljbGUgLyZndDs8L2Nv ZGU+IHdpdGggc29tZXRoaW5nIGxpa2UgdGhpczo8L3A+CjxwcmU+Jmx0O3R4cDppZl9zZWN0 aW9uIG5hbWU9InRhZyImZ3Q7CiAgJmx0O3R4cDp0cnVfdGFnc19oYW5kbGVyIC8mZ3Q7CiZs dDt0eHA6ZWxzZSAvJmd0OwogICZsdDt0eHA6YXJ0aWNsZSAvJmd0OwombHQ7L3R4cDppZl9z ZWN0aW9uJmd0OzwvcHJlPgoJPGg0PlN0ZXAgMzogQ29uZmlndXJlIHlvdXIgYXJ0aWNsZSBm b3JtIHRvIGRpc3BsYXkgdGFnczwvaDQ+Cgk8cD5UbyBtYWtlIGVhY2ggYXJ0aWNsZSBzaG93 IGEgbGlzdCBvZiBhbGwgdGhlIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIGl0LCBwdXQgc29tZXRp bmcgbGlrZSB0aGlzIGluIHlvdXIgYXJ0aWNsZSBmb3JtOjwvcD4KPHByZT4mbHQ7dHhwOnRy dV90YWdzX2lmX2hhc190YWdzJmd0OwogIHRhZ3M6ICZsdDt0eHA6dHJ1X3RhZ3NfZnJvbV9h cnRpY2xlIC8mZ3Q7CiZsdDsvdHhwOnRydV90YWdzX2lmX2hhc190YWdzJmd0OzwvcHJlPgoJ PGg0PlN0ZXAgNDogRHJvcCBhIGN1c3RvbSB0YWcgY2xvdWQgc29tZXdoZXJlLCBpZiB5b3Ug d2FudDwvaDQ+Cgk8cD5JZiB5b3UmIzgyMTc7ZCBsaWtlIHRvIHNob3cgYSB0YWcgY2xvdWQg c29tZXdoZXJlIG9uIHlvdXIgc2l0ZSAob3RoZXIgdGhhbiAvdGFnLyksIHB1dCBzb21ldGhp bmcgbGlrZSB0aGlzIGluIHRoYXQgcGFnZTo8L3A+CjxwcmU+Jmx0O3R4cDp0cnVfdGFnc19j bG91ZCAvJmd0OzwvcHJlPgoJPHA+U2VlIGJlbG93IGZvciBsb3RzIG9mIGZvcm1hdHRpbmcg b3B0aW9ucywgaW5jbHVkaW5nIHRoZSBhYmlsaXR5IHRvIG91dHB1dCBhIHNpbXBsZSBsaXN0 IGluc3RlYWQgb2YgYSBjbG91ZCAodXNpbmcgPGNvZGU+dHJ1X3RhZ3NfbGlzdDwvY29kZT4p LjwvcD4KCTxoND5TdGVwIDU6IFN0YXJ0IHRhZ2dpbmchPC9oND4KCTxwPldoZW5ldmVyIHlv dSB3cml0ZSBhbiBhcnRpY2xlLCBwdXQgeW91ciB0YWdzIGludG8gdGhlIEtleXdvcmRzIGZp ZWxkIGluIFRleHRwYXR0ZXJuLiAgKFRoZSBLZXl3b3JkcyBmaWVsZCBoaWRlcyBiZWhpbmQg dGhlICYjODIyMDtBZHZhbmNlZCBPcHRpb25zJiM4MjIxOyBsaW5rIG9uIHRoZSBsZWZ0IHNp ZGUgb2YgdGhlICYjODIyMDt3cml0ZSYjODIyMTsgcGFnZS4pICBUYWdzIHNob3VsZCBiZSBz ZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgY2FuIGhhdmUgc3BhY2VzPHN1cD48YSBocmVmPSIj Zm4xMTQ0OTEzMTg2NDQ3YmM0MTlkYTQ2ZiI+MTwvYT48L3N1cD4uPC9wPgoJPHA+WW91JiM4 MjE3O2xsIHByb2JhYmx5IHdhbnQgdG8gaW5zdGFsbCBSb2IgU2FibGUmIzgyMTc7cyA8YSBo cmVmPSJodHRwOi8vd3d3LndpbHNoaXJlb25lLmNvbS90ZXh0cGF0dGVybi1wbHVnaW5zL3Jz cy1hZG1pbi1zaG93LWFkdi1vcHRzIj5yc3NfYWRtaW5fc2hvd19hZHZfb3B0czwvYT4sIHdo aWNoIHdpbGwgYXV0b21hdGljYWxseSBleHBhbmQgdGhlICYjODIyMDtBZHZhbmNlZCBPcHRp b25zJiM4MjIxOyBzZWN0aW9uIG9mIHRoZSAmIzgyMjA7d3JpdGUmIzgyMjE7IHBhZ2UsIHdo ZW4geW91IGFyZSB3cml0aW5nIGFydGljbGVzLiAgVGhhdCBnaXZlcyB5b3UgZWFzeSBhY2Nl c3MgdG8gdGhlIEtleXdvcmRzIGZpZWxkLjwvcD4KCTxwIGNsYXNzPSJmb290bm90ZSIgaWQ9 ImZuMTE0NDkxMzE4NjQ0N2JjNDE5ZGE0NmYiPjxzdXA+MTwvc3VwPiBUYWdzIHdpdGggc3Bh Y2VzIHdpbGwgZ2VuZXJhdGUgdXJscyB3aXRoIGRhc2hlcywgd2hpY2ggd2lsbCB3b3JrIGNv cnJlY3RseS4gIFRhZ3Mgd2l0aCBkYXNoZXMgd2lsbCBhbHNvIHdvcmsgY29ycmVjdGx5Ljwv cD4KCTxoND5TdGVwIDY6IEZhbmN5IGRpc3BsYXkgY3VzdG9taXphdGlvbjwvaDQ+Cgk8cD5Z b3UgY2FuIHVzZSA8Y29kZT50cnVfdGFnc19pZl90YWdfc2VhcmNoPC9jb2RlPiwgPGNvZGU+ dHJ1X3RhZ3NfdGFnX3BhcmFtZXRlcjwvY29kZT4sIGFuZCA8Y29kZT50cnVfdGFnc19zZWFy Y2hfcGFyYW1ldGVyPC9jb2RlPiB0byBjdXN0b21pemUgeW91ciBwYWdlIHRpdGxlcyBvciB0 YWcgc2VhcmNoIHJlc3VsdHMuICBTZWUgYmVsb3cgZm9yIGRldGFpbHMuICBTZWUgdGhlIHRp dGxlYmFyIG9mIDxhIGhyZWY9Imh0dHA6Ly93d3cudHJ1aXN0LmNvbS8iPnRydWlzdC5jb208 L2E+IGZvciBhbiBleGFtcGxlLjwvcD4KCTxoND5TdGVwIDc6IFR1cm4gb24gY2xlYW4gdXJs czwvaDQ+Cgk8cD5DbGVhbiB1cmxzIGFyZSBub3cgcG9zc2libGUgd2l0aCB0cnVfdGFncywg cHJvdmlkZWQgdGhhdCB5b3UgYXJlIHdpbGxpbmcgdG8gbW9kaWZ5IFRleHRwYXR0ZXJuJiM4 MjE3O3MgcmV3cml0ZSBydWxlcyAoaW4gdGhlIC5odGFjY2VzcyBmaWxlKS4gIEJ1dCBiZSB3 YXJuZWQgJiM4MjExOyByZXdyaXRlIHJ1bGVzIGFyZSBjb21wbGV4LiAgSSBtYWtlIG5vIGd1 YXJhbnRlZXMgdGhhdCB0aGlzIHdvbiYjODIxNzt0IGVhdCB5b3VyIGNoaWxkcmVuLiAgPHN0 cm9uZz5Zb3UgZG9uJiM4MjE3O3QgaGF2ZSB0byBkbyB0aGlzPC9zdHJvbmc+IGJ1dCBhIGxv dCBvZiBwZW9wbGUgd2FudCBpdC4gIFRoaXMgc2l0ZSB1c2VzIGl0LCBpZiB0aGF0IGhlbHBz LjwvcD4KCTxwPkhlcmUmIzgyMTc7cyB3aGF0IHRvIGRvOjwvcD4KCTxvbD4KCQk8bGk+QWRk IHRoZSBmb2xsb3dpbmcgbGluZXMgdG8gVGV4dHBhdHRlcm4mIzgyMTc7cyAuaHRhY2Nlc3Mg ZmlsZSAoZm91bmQgaW4gdGhlIHJvb3Qgb2YgeW91ciBUZXh0cGF0dGVybiBkaXJlY3Rvcnkp LCBhZGp1c3RpbmcgdGhlbSBpZiBuZWNlc3NhcnkuICBUaGVzZSBsaW5lcyBzaG91bGQgYmUg PHN0cm9uZz5hZnRlcjwvc3Ryb25nPiB0aGU8L2xpPgoJPC9vbD4KCTxwPjxkaXYgY2xhc3M9 InByZSI+PC9wPgoJPHA+UmV3cml0ZVJ1bGUgJiM5NDsoLiYjNDM7KSAmIzQ1OyBbUFQsTF08 L3A+Cgk8cD48L2Rpdj48L3A+Cgk8cD5hbmQgPHN0cm9uZz5iZWZvcmU8L3N0cm9uZz4gdGhl PC9wPgoJPHA+PGRpdiBjbGFzcz0icHJlIj48L3A+Cgk8cD5SZXdyaXRlUnVsZSAmIzk0Oygu JiM0MjspIGluZGV4LnBocDwvcD4KCTxwPjwvZGl2PjwvcD4KCTxwPkhlcmUmIzgyMTc7cyB0 aGUgYml0IHRvIGluc2VydDo8L3A+Cgk8cD48ZGl2IGNsYXNzPSJwcmUiPjwvcD4KCTxwPiNU aGlzIHBhdGggc2hvdWxkIG1hdGNoIHRoZSByZWxhdGl2ZSB1cmwgb2YgeW91ciBUZXh0cGF0 dGVybiBpbnN0YWxsPGJyIC8+ClJld3JpdGVCYXNlIC88YnIgLz4KI0lmIHlvdSdyZSB1c2lu ZyBhIHNlY3Rpb24gb3RoZXIgdGhhbiAmIzM0O3RhZyYjMzQ7LCBjaGFuZ2UgdGhlIGZvbGxv d2luZyB0d28gcnVsZXMgYWNjb3JkaW5nbHk8YnIgLz4KUmV3cml0ZVJ1bGUgJiM5NDt0YWcv KFsmIzk0Oy9dJiM0MzspJCB0YWcvJDEvIFtSLExdPGJyIC8+ClJld3JpdGVSdWxlICYjOTQ7 dGFnLyguJiM0MzspLyQgJiM2MztzJiM2MTt0YWcmYW1wO3QmIzYxOyQxPC9wPgoJPHA+PC9k aXY+PC9wPgoJPG9sPgoJCTxsaT48c3Ryb25nPkNoZWNrIHRvIG1ha2Ugc3VyZSB5b3VyIHNp dGUgaXMgc3RpbGwgd29ya2luZy48L3N0cm9uZz48L2xpPgoJCTxsaT5FZGl0IHRoZSB0cnVf dGFncyBwbHVnaW4gKGFkbWluIC0+IHBsdWdpbnMsIGNsaWNrICYjODIxNjtFZGl0JiM4MjE3 OykgYW5kIGNoYW5nZSB0aGUgPGNvZGU+dHJ1X3RhZ3NfdXNlX2NsZWFuX3VybHMoKTwvY29k ZT4gZnVuY3Rpb24gdG8gcmV0dXJuIDxjb2RlPjE8L2NvZGU+LiAgKEl0JiM4MjE3O3MgdGhl IGZpcnN0IGZ1bmN0aW9uLik8L2xpPgoJCTxsaT5DbGVhbiB1cmxzIHNob3VsZCBiZSB3b3Jr aW5nIG5vdy4gIFRyeSBjbGlja2luZyBhIHRhZyBsaW5rIHRvIHNlZSB3aGF0IHVybCBpdCBy ZWZlcmVuY2VzLjwvbGk+CgkJPGxpPkJ5IGRlZmF1bHQsIGFydGljbGUgdGFncyB3aWxsIHNl dCB0aGUgPGNvZGU+cmVsPSJ0YWciPC9jb2RlPiBhdHRyaWJ1dGUsIGFuZCB0aGUgdGFnIGNs b3VkIChvciBsaXN0KSB3b24mIzgyMTc7dC4gIFRoaXMgY2FuIGJlIGNvbnRyb2xsZWQgd2l0 aCB0aGUgPGNvZGU+dXNlcmVsdGFnPC9jb2RlPiBhdHRyaWJ1dGU7IHNlZSBiZWxvdyBmb3Ig ZGV0YWlscy48L2xpPgoJPC9vbD4KCTxoMz5UYWcgcmVmZXJlbmNlPC9oMz4KCTxoND48Y29k ZT50cnVfdGFnc19oYW5kbGVyPC9jb2RlPjwvaDQ+Cgk8cD5UaGlzIGlzIHRoZSBtYWluIGZ1 bmN0aW9uIHRoYXQgZHJpdmVzIHRhZyBzZWFyY2ggYW5kIHNob3dzIHRoZSBnZW5lcmljIHRh ZyBjbG91ZC4gIEl0IHNob3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgcGFnZSB0aGF0IGlzIHVz ZWQgaW4gdGhlICYjODIxNjt0YWcmIzgyMTc7IHNlY3Rpb24uICBJdCBnZW5lcmFsbHkgY2Fs bHMgPGNvZGU+ZG9BcnRpY2xlcygpPC9jb2RlPiAoaW4gdGhlIFRleHRwYXR0ZXJuIGNvZGUp IHRvIGRpc3BsYXkgdGFnIHNlYXJjaCByZXN1bHRzLCBidXQgaWYgbm8gdGFnIHdhcyBwYXNz ZWQgaW4gdGhlIHVybCBpdCB3aWxsIGNhbGwgPGNvZGU+dHJ1X3RhZ3NfY2xvdWQ8L2NvZGU+ IGluc3RlYWQuPC9wPgoJPHA+VGhpcyB0YWcgYWNjZXB0cyBtb3N0IG9mIHRoZSBzdGFuZGFy ZCA8Y29kZT50eHA6YXJ0aWNsZTwvY29kZT4gYXR0cmlidXRlcywgd2hpY2ggd2lsbCBiZSBh cHBsaWVkIGR1cmluZyB0aGUgdGFnIHNlYXJjaC4gIE5vdGUgdGhhdCA8Y29kZT50cnVfdGFn c19oYW5kbGVyPC9jb2RlPiA8c3Ryb25nPmRvZXMgbm90PC9zdHJvbmc+IHN1cHBvcnQgdXNp bmcgbXVsdGlwbGUgc2VjdGlvbnMgd2l0aCB0aGUgPGNvZGU+c2VjdGlvbjwvY29kZT4gYXR0 cmlidXRlLCB3aGVuIGRvaW5nIGEgdGFnIHNlYXJjaC4gIElmIG11bHRpcGxlIHNlY3Rpb25z IGFyZSBwYXNzZWQsIG5vbmUgYXJlIHVzZWQuPC9wPgoJPHA+PHN0cm9uZz5Ob3RlOjwvc3Ry b25nPiBJbiBUZXh0cGF0dGVybiwgdGhlIDxjb2RlPmxpbWl0PC9jb2RlPiBhdHRyaWJ1dGUg aXMgZGVmYXVsdGVkIHRvIDxjb2RlPjEwPC9jb2RlPiwgdG8gbGltaXQgdGhlIG91dHB1dCB0 byAxMCBhcnRpY2xlcyBwZXIgcGFnZSwgYW5kIHRoZSA8Y29kZT50eHA6b2xkZXI8L2NvZGU+ IGFuZCA8Y29kZT50eHA6bmV3ZXI8L2NvZGU+IHRhZ3MgYXJlIHVzZWQgdG8gcGFnaW5hdGUg dGhlIGZ1bGwgbGlzdC4gIFRoZSA8Y29kZT50eHA6b2xkZXI8L2NvZGU+IGFuZCA8Y29kZT50 eHA6bmV3ZXI8L2NvZGU+IHRhZ3MgZG8gbm90IHdvcmsgd2l0aCB0cnVfdGFncywgYnV0IHRo ZSA8Y29kZT5saW1pdDwvY29kZT4gaXMgc3RpbGwgdXNlZCBieSBUZXh0cGF0dGVybiB3aGVu IGl0IG91dHB1dHMgdGhlIGFydGljbGVzLiAgVGhlcmVmb3JlLCB0cnVfdGFncyB1c2VzIGEg ZGVmYXVsdCBsaW1pdCBvZiA8Y29kZT4xMDAwPC9jb2RlPiB3aGVuIGRvaW5nIGFuIGFydGlj bGUgc2VhcmNoLiAgWW91IGNhbiBvdmVycmlkZSB0aGlzIGxpbWl0IGJ5IHNldHRpbmcgdGhl IDxjb2RlPmxpbWl0PC9jb2RlPiBhdHRyaWJ1dGUgb24gPGNvZGU+dHJ1X3RhZ3NfaGFuZGxl cjwvY29kZT4uPC9wPgoJPHA+VGhpcyB0YWcgd2lsbCBhbHNvIGFjY2VwdCBhbGwgb2YgdGhl IGF0dHJpYnV0ZXMgdXNlZCBieSA8Y29kZT50cnVfdGFnX2Nsb3VkPC9jb2RlPi4gIFNlZSBi ZWxvdyBmb3IgZGV0YWlscy48L3A+Cgk8aDQ+PGNvZGU+dHJ1X3RhZ3NfaWZfaGFzX3RhZ3M8 L2NvZGU+PC9oND4KCTxwPlRoaXMgY29uZGl0aW9uYWwgdGFnIGNhbiBiZSB1c2VkIGluIGFu IGFydGljbGUgZm9ybSwgYW5kIHdpbGwgZXZhbHVhdGUgaXRzIGNvbnRlbnRzIChlLmcuICYj ODIyMDtyZXR1cm4gdHJ1ZSYjODIyMTspIGlmIHRoZSBjdXJyZW50IGFydGljbGUgaGFzIHRh Z3MuPC9wPgoJPGg0Pjxjb2RlPnRydV90YWdzX2Zyb21fYXJ0aWNsZTwvY29kZT48L2g0PgoJ PHA+VGhpcyB0YWcgY2FuIGJlIHVzZWQgaW4gYW4gYXJ0aWNsZSBmb3JtIHRvIHJldHVybiBh IGxpc3Qgb2YgdGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgYXJ0aWNsZS4gIFR5 cGljYWxseSAoc2VlIGJlbG93KSwgZWFjaCB0YWcgaW4gdGhlIGxpc3Qgd2lsbCBiZSBhIGxp bmsgKDxjb2RlPiZsdDthIGhyZWY9Li4uJmd0OzwvY29kZT4pIHRvIHRoZSB0YWcgc2VhcmNo IHVybCBmb3IgdGhhdCBwYXJ0aWN1bGFyIHRhZy48L3A+Cgk8cD5UaGlzIHRhZyBhY2NlcHRz IHRoZSBzdGFuZGFyZCA8Y29kZT53cmFwdGFnPC9jb2RlPiwgPGNvZGU+YnJlYWs8L2NvZGU+ LCA8Y29kZT5jbGFzczwvY29kZT4sIGFuZCA8Y29kZT5icmVha2NsYXNzPC9jb2RlPiBhdHRy aWJ1dGVzLjwvcD4KCTxwPklmIHlvdSBkb24mIzgyMTc7dCB3YW50IHRvIGhhdmUgdGhlIHRh Z3MgYmUgbGlua3MsIHlvdSBjYW4gc2V0IDxjb2RlPmdlbmVyYXRlbGlua3M9IjAiPC9jb2Rl PiB0byB0dXJuIHRoZSBsaW5rcyBvZmYuPC9wPgoJPHA+SXQgYWxzbyBhY2NlcHRzIGEgPGNv ZGU+dGFnc2VjdGlvbjwvY29kZT4gYXR0cmlidXRlLCB3aGljaCB0ZWxscyB0cnVfdGFncyB3 aGF0IHJlbGF0aXZlIHVybCB0byB1c2UgdG8gZmluZCB0aGUgJiM4MjE2O3RhZyYjODIxNzsg c2VjdGlvbi4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB5b3UgaGF2ZSBuYW1lZCB0aGUgc2Vj dGlvbiBzb21ldGhpbmcgb3RoZXIgdGhhbiAmIzgyMTY7dGFnJiM4MjE3Oy4gIEJ5IGRlZmF1 bHQsIHRoaXMgaXMgc2V0IHRvIDxjb2RlPnRhZzwvY29kZT4uPC9wPgoJPHA+SWYgeW91IGhh dmUgY2xlYW4gdXJscyB0dXJuZWQgb24gKHNlZSBhYm92ZSksIHlvdSBjYW4gdXNlIHRoZSA8 Y29kZT51c2VyZWx0YWdzPC9jb2RlPiBhdHRyaWJ1dGUgdG8gc3BlY2lmeSB3aGV0aGVyIGxp bmtzIGluIHRoZSBsaXN0IHNob3VsZCBoYXZlIHRoZSA8YSBocmVmPSJodHRwOi8vbWljcm9m b3JtYXRzLm9yZy93aWtpL3JlbHRhZyI+PGNvZGU+cmVsPSJ0YWciPC9jb2RlPjwvYT4gICh1 c2VkIGJ5IDxhIGhyZWY9Imh0dHA6Ly93d3cudGVjaG5vcmF0aS5jb20vIj5UZWNobm9yYXRp PC9hPikgYXR0cmlidXRlIHNldC4gIE5vdGUgdGhhdCB0aGlzIHdvbiYjODIxNzt0IHdvcmsg aWYgeW91IHR1cm4gb2ZmIGxpbmtzLiAgQWxzbyBub3RlIHRoYXQgdGFncyBkb24mIzgyMTc7 dCBzaG93IHVwIGluIHRoZSBSU1MvQXRvbSBmZWVkcywgdW5sZXNzIHlvdSA8YSBocmVmPSJo dHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/cGlkPTQwOTA3I3A0 MDkwNyI+aGFjayB0aGUgdGV4dHBhdHRlcm4gc291cmNlPC9hPi4gIFRoaXMgaXMgb24gYnkg ZGVmYXVsdC48L3A+Cgk8cD5BZ2FpbiBpZiB5b3UgaGF2ZSBjbGVhbiB1cmxzIHR1cm5lZCBv biwgeW91IGNhbiB1c2UgdGhlIDxjb2RlPnVzZW5vZm9sbG93PC9jb2RlPiBhdHRyaWJ1dGUg dG8gc3BlY2lmeSB3aGV0aGVyIGxpbmtzIGluIHRoZSBsaXN0IHNob3VsZCBoYXZlIHRoZSA8 YSBocmVmPSJodHRwOi8vZ29vZ2xlYmxvZy5ibG9nc3BvdC5jb20vMjAwNS8wMS9wcmV2ZW50 aW5nLWNvbW1lbnQtc3BhbS5odG1sIj48Y29kZT5yZWw9Im5vZm9sbG93IjwvY29kZT48L2E+ IGF0dHJpYnV0ZSBzZXQuICBUaGlzIGlzIG9mZiBieSBkZWZhdWx0LjwvcD4KCTxoND48Y29k ZT50cnVfdGFnc19jbG91ZDwvY29kZT48L2g0PgoJPGg0Pjxjb2RlPnRydV90YWdzX2xpc3Q8 L2NvZGU+PC9oND4KCTxwPlRoZXNlIHR3byB0YWdzIGRvIHRoZSBleGFjdCBzYW1lIHRoaW5n ICYjODIxMTsgPGNvZGU+dHJ1X3RhZ3NfY2xvdWQ8L2NvZGU+IGp1c3QgcHJvdmlkZXMgZGlm ZmVyZW50IGRlZmF1bHRzIHRvIDxjb2RlPnRydV90YWdzX2xpc3Q8L2NvZGU+LjwvcD4KPHA+ PGNvZGU+dHJ1X3RhZ3NfY2xvdWQ8L2NvZGU+IGNhbiBiZSB1c2VkIG9uIGFueSBwYWdlLCBh bmQgaXMgZ2VuZXJhbGx5IHVzZWQgdG8gZ2VuZXJhdGUgYSBzaW1wbGUgdGFnIGNsb3VkIG9m IGFsbCB0aGUgdGFncyB1c2VkIG9uIHlvdXIgc2l0ZS4gIFRoZSBjbG91ZCBpcyByZWFsbHkg anVzdCBhIGxpc3Qgb2YgbGlua3MsIG11Y2ggbGlrZSB0aGF0IGdlbmVyYXRlZCBieSA8Y29k ZT50cnVfdGFnc19mcm9tX2FydGljbGU8L2NvZGU+LCBidXQgd2l0aCBhIDxjb2RlPnN0eWxl PC9jb2RlPiBhdHRyaWJ1dGUgc2V0IG9uIGVhY2ggbGluayB0byBnaXZlIGl0IGEgZm9udCBz aXplIHJhbmdpbmcgZnJvbSAxMDAlIHRvIDIwMCUuPC9wPgo8cD48Y29kZT50cnVfdGFnc19s aXN0PC9jb2RlPiBjYW4gYmUgdXNlZCBvbiBhbnkgcGFnZSwgYW5kIGlzIGdlbmVyYWxseSB1 c2VkIHRvIG91dHB1dCBhIGJ1bGxldGVkIGxpc3Qgb2YgYWxsIHRoZSB0YWdzIHVzZWQgb24g eW91ciBzaXRlLiAgQnkgZGVmYXVsdCwgdGhlIHRhZ3Mgd2lsbCBhbGwgaGF2ZSBhIGZvbnQt c2l6ZSBvZiAxMDAlLjwvcD4KPHA+PGNvZGU+dHJ1X3RhZ3NfY2xvdWQ8L2NvZGU+IGFuZCA8 Y29kZT50cnVfdGFnc19saXN0PC9jb2RlPiBib3RoIHNldCB0aGUgPGNvZGU+Y2xhc3M8L2Nv ZGU+IGF0dHJpYnV0ZSBvZiBlYWNoIHRhZywgc3BlY2lmeWluZyB0d28gY2xhc3Nlcy4gIFRo ZSBmaXJzdCBjbGFzcyBncm91cHMgdGhlIHRhZ3MgaW50byBjYXRlZ29yaWVzLCB3aXRoIGNs YXNzZXMgb2YgPGNvZGU+dGFnU2l6ZVNtYWxsZXN0PC9jb2RlPiwgPGNvZGU+dGFnU2l6ZU1l ZGl1bTwvY29kZT4sIGFuZCA8Y29kZT50YWdTaXplTGFyZ2VzdDwvY29kZT4uICBVc2luZyB0 aGVzZSwgeW91IGNvdWxkIG1ha2UgdGhlIHNtYWxsZXN0IGFuZCBsYXJnZXN0IHRhZ3MgaGF2 ZSBkaWZmZXJlbnQgc3R5bGVzIHRoYW4gYWxsIHRoZSBvdGhlcnMuPC9wPgoJPHA+VGhlIHNl Y29uZCBjbGFzcyBpbmRpY2F0ZXMgdGhlICYjODIyMDtzdGVwJiM4MjIxOyBvZiB0aGUgY3Vy cmVudCB0YWcsIHdpdGggY2xhc3NlcyBvZiA8Y29kZT50YWdTaXplMTwvY29kZT4sIDxjb2Rl PnRhZ1NpemUyPC9jb2RlPiwgYW5kIHNvIG9uLiAgVGhlc2UgZ2l2ZSB5b3UgcHJlY2lzZSBj b250cm9sIG92ZXIgZWFjaCB0YWcgc2l6ZSwgaWYgeW91IHdhbnQgaXQuPC9wPgoJPHA+SWYg eW91IHVzZSB0aGVzZSBjbGFzc2VzIHRvIGNyZWF0ZSBzcGVjaWFsIENTUyBydWxlcywgeW91 IG1heSBhbHNvIHdhbnQgdG8gc2V0IHRoZSA8Y29kZT5zZXRzaXplczwvY29kZT4gYXR0cmli dXRlLCBkZXNjcmliZWQgYmVsb3cuPC9wPgoJPGg1PkJvdGggdGFncyBhY2NlcHQgdGhlIGZv bGxvd2luZyBhdHRyaWJ1dGVzOjwvaDU+Cgk8dWw+CgkJPGxpPlRoZSBzdGFuZGFyZCA8Y29k ZT53cmFwdGFnPC9jb2RlPiwgPGNvZGU+YnJlYWs8L2NvZGU+LCA8Y29kZT5jbGFzczwvY29k ZT4sIGFuZCA8Y29kZT5icmVha2NsYXNzPC9jb2RlPiBhdHRyaWJ1dGVzLiAgPGNvZGU+dHJ1 X3RhZ3NfY2xvdWQ8L2NvZGU+IGhhcyBhIGRlZmF1bHQgPGNvZGU+YnJlYWs8L2NvZGU+IG9m IGEgY29tbWEuICA8Y29kZT50cnVfdGFnc19saXN0PC9jb2RlPiBoYXMgYSBkZWZhdWx0IDxj b2RlPndyYXB0YWc8L2NvZGU+IG9mIDxjb2RlPnVsPC9jb2RlPiBhbmQgYSBkZWZhdWx0IDxj b2RlPmJyZWFrPC9jb2RlPiBvZiA8Y29kZT5saTwvY29kZT4uPC9saT4KCQk8bGk+PGNvZGU+ dGFnc2VjdGlvbjwvY29kZT4sIHdoaWNoIHRlbGxzIHRydV90YWdzIHdoYXQgcmVsYXRpdmUg dXJsIHRvIHVzZSB0byBmaW5kIHRoZSAmIzgyMTY7dGFnJiM4MjE3OyBzZWN0aW9uLiAgVGhp cyBjYW4gYmUgdXNlZnVsIGlmIHlvdSBoYXZlIG5hbWVkIHRoZSBzZWN0aW9uIHNvbWV0aGlu ZyBvdGhlciB0aGFuICYjODIxNjt0YWcmIzgyMTc7LiAgQnkgZGVmYXVsdCwgdGhpcyBpcyBz ZXQgdG8gPGNvZGU+dGFnPC9jb2RlPi48L2xpPgoJCTxsaT48Y29kZT5zZWN0aW9uPC9jb2Rl Piwgd2hpY2ggdGVsbHMgaXQgdG8gbGltaXQgdGhlIGxpc3QgdG8gdGFncyBmcm9tIHRoZSBn aXZlbiBzZWN0aW9uIG9yIHNlY3Rpb25zLiAgRm9yIGV4YW1wbGUsIDxjb2RlPiZsdDt0eHA6 dHJ1X3RhZ3NfY2xvdWQgc2VjdGlvbj0iYmxvZyxyZWZlcmVuY2UiIC8mZ3Q7PC9jb2RlPiB3 b3VsZCBvbmx5IHNob3cgdGFncyBmcm9tIHRoZSAmIzgyMjA7YmxvZyYjODIyMTsgYW5kICYj ODIyMDtyZWZlcmVuY2UmIzgyMjE7IHNlY3Rpb25zLiAgQnkgZGVmYXVsdCwgdGhpcyBpcyBz ZXQgdG8gYmxhbmsgKHRvIHNob3cgdGFncyBmcm9tIGFsbCBzZWN0aW9ucykuCgk8dWw+CgkJ PGxpPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gaWYgeW91IHVzZSA8Y29kZT5zZWN0aW9uPC9j b2RlPiB0byBsaW1pdCB0aGUgY2xvdWQgdG8gYSBwYXJ0aWN1bGFyIHNlY3Rpb24sIGl0IHdv biYjODIxNzt0IGxpbWl0IHRoZSB0YWcgc2VhcmNoIGZlYXR1cmUgdG8gdGhhdCBzZWN0aW9u LiAgVGhlIHRhZyBzZWFyY2ggZmluZHMgKHRhZ2dlZCkgYXJ0aWNsZXMgZnJvbSBhbGwgc2Vj dGlvbnMsIG5vIG1hdHRlciB3aGF0LiAgVGhhdCYjODIxNztzIGEgc2lkZS1lZmZlY3Qgb2Yg dGhlIHVzZSBvZiA8Y29kZT5kb0FydGljbGVzKCk8L2NvZGU+LCBhbmQgSSBkb24mIzgyMTc7 dCB0aGluayB0aGVyZSYjODIxNztzIGFueXRoaW5nIEkgY2FuIGRvIGFib3V0IGl0LjwvbGk+ Cgk8L3VsPjwvbGk+CgkJPGxpPjxjb2RlPm1pbnBlcmNlbnQ8L2NvZGU+IGFuZCA8Y29kZT5t YXhwZXJjZW50PC9jb2RlPiwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgd2Vp Z2h0ZWQgZm9udCBzaXplcyBpbiB0aGUgdGFnIGNsb3VkL2xpc3QuICA8Y29kZT50cnVfdGFn c19jbG91ZDwvY29kZT4gZGVmYXVsdHMgdG8gPGNvZGU+MTAwPC9jb2RlPiBhbmQgPGNvZGU+ MjAwPC9jb2RlPiwgcmVzcGVjdGl2ZWx5LCBhbmQgPGNvZGU+dHJ1X3RhZ3NfbGlzdDwvY29k ZT4gZGVmYXVsdHMgdG8gPGNvZGU+MTAwPC9jb2RlPiBhbmQgPGNvZGU+MTAwPC9jb2RlPi48 L2xpPgoJCTxsaT48Y29kZT5zaG93Y291bnRzPC9jb2RlPiwgd2hpY2ggd2lsbCBhcHBlbmQg YSBudW1iZXIgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgdGFnIGhhcyBiZWVu IHVzZWQsIHRvIGVhY2ggdGFnIGluIHRoZSBsaXN0LiAgRm9yIGV4YW1wbGUsIHlvdSBtaWdo dCBzZWU6IDxzcGFuIGNsYXNzPSJwcmUiPjxhIGhyZWY9Ii8/cz10YWcmIzM4O3Q9bGlmZSI+ bGlmZTwvYT4gWzNdLCA8YSBocmVmPSIvP3M9dGFnJiMzODt0PXRlY2giPnRlY2g8L2E+IFs1 XTwvc3Bhbj4gaW4gbXkgdGFnIGNsb3VkLCBpZiB0aGlzIHdhcyB0dXJuZWQgb24uICBUaGlz IGlzIG9mZiBieSBkZWZhdWx0LiAgVXNlIDxjb2RlPjE8L2NvZGU+IG9yIDxjb2RlPnRydWU8 L2NvZGU+IHRvIHR1cm4gaXQgb24uCgk8dWw+CgkJPGxpPlRoaXMgY2FuIGFsc28gYmUgdXNl ZCB0byBwdXQgdGhlIGNvdW50cyBpbiB0aGUgPGNvZGU+dGl0bGU8L2NvZGU+IGF0dHJpYnV0 ZSBvZiB0aGUgbGlua3MsIHdoaWNoIHdpbGwgbWFrZSBpdCBhcHBlYXIgaW4gYSB0b29sdGlw LiAgVXNlIDxjb2RlPnNob3djb3VudHM9InRpdGxlIjwvY29kZT4gb3IgPGNvZGU+c2hvd2Nv dW50cz0iYm90aCI8L2NvZGU+ICh0byBzaG93IGl0IGluIGJvdGggcGxhY2VzKSB0byB0dXJu IGl0IG9uLjwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxjb2RlPmNvdW50d3JhcGNoYXJzPC9j b2RlPiwgd2hpY2ggY29udHJvbHMgdGhlIGNoYXJhY3RlcnMgdXNlZCB0byBzaG93IHRoZSB0 YWcgY291bnQsIGlmIDxjb2RlPnNob3djb3VudHM8L2NvZGU+IGlzIHR1cm5lZCBvbi4gIEJ5 IGRlZmF1bHQgdGhpcyBpcyA8Y29kZT5bXTwvY29kZT4uICBUaGUgZmlyc3QgY2hhcmFjdGVy IHdpbGwgYmUgcHV0IG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIG51bWJlciwgYW5kIHRoZSBz ZWNvbmQgY2hhcmFjdGVyIHdpbGwgYmUgcHV0IG9uIHRoZSByaWdodC4gIEZvciBleGFtcGxl LCBhIDxjb2RlPmNvdW50d3JhcGNoYXJzPC9jb2RlPiBvZiA8Y29kZT4oKTwvY29kZT4gd291 bGQgc2hvdzogPHNwYW4gY2xhc3M9InByZSI+PGEgaHJlZj0iLz9zPXRhZyYjMzg7dD1saWZl Ij5saWZlPC9hPiAoMyksIDxhIGhyZWY9Ii8/cz10YWcmIzM4O3Q9dGVjaCI+dGVjaDwvYT4g KDUpPC9zcGFuPjwvbGk+CgkJPGxpPklmIHlvdSBoYXZlIGNsZWFuIHVybHMgdHVybmVkIG9u IChzZWUgYWJvdmUpLCB5b3UgY2FuIHVzZSB0aGUgPGNvZGU+dXNlcmVsdGFnczwvY29kZT4g YXR0cmlidXRlIHRvIHNwZWNpZnkgd2hldGhlciBsaW5rcyBpbiB0aGUgbGlzdCBzaG91bGQg aGF2ZSB0aGUgPGEgaHJlZj0iaHR0cDovL21pY3JvZm9ybWF0cy5vcmcvd2lraS9yZWx0YWci Pjxjb2RlPnJlbD0idGFnIjwvY29kZT48L2E+ICAodXNlZCBieSA8YSBocmVmPSJodHRwOi8v d3d3LnRlY2hub3JhdGkuY29tLyI+VGVjaG5vcmF0aTwvYT4pIGF0dHJpYnV0ZSBzZXQuICBU aGlzIGlzIG9mZiBieSBkZWZhdWx0LjwvbGk+CgkJPGxpPkFnYWluIGlmIHlvdSBoYXZlIGNs ZWFuIHVybHMgdHVybmVkIG9uLCB5b3UgY2FuIHVzZSB0aGUgPGNvZGU+dXNlbm9mb2xsb3c8 L2NvZGU+IGF0dHJpYnV0ZSB0byBzcGVjaWZ5IHdoZXRoZXIgbGlua3MgaW4gdGhlIGxpc3Qg c2hvdWxkIGhhdmUgdGhlIDxhIGhyZWY9Imh0dHA6Ly9nb29nbGVibG9nLmJsb2dzcG90LmNv bS8yMDA1LzAxL3ByZXZlbnRpbmctY29tbWVudC1zcGFtLmh0bWwiPjxjb2RlPnJlbD0ibm9m b2xsb3ciPC9jb2RlPjwvYT4gYXR0cmlidXRlIHNldC4gIFRoaXMgaXMgb2ZmIGJ5IGRlZmF1 bHQuPC9saT4KCQk8bGk+SWYgeW91IGRvbiYjODIxNzt0IHdhbnQgdGhlIHRhZ3MgdG8gYmUg bGlua3MsIHlvdSBjYW4gc2V0IDxjb2RlPmdlbmVyYXRlbGlua3M9IjAiPC9jb2RlPiB0byB0 dXJuIHRoZW0gb2ZmLjwvbGk+CgkJPGxpPjxjb2RlPm1pbnRhZ2NvdW50PC9jb2RlPiBhbmQg PGNvZGU+bWF4dGFnY291bnQ8L2NvZGU+IGNhbiBiZSB1c2VkIHRvIGhpZGUgdGFncyB0aGF0 IG9ubHkgaGF2ZSBhIGZldyBhcnRpY2xlcywgb3IgdGhhdCBoYXZlIHRvbyBtYW55LiAgVGhl eSBhcmUgZGVmYXVsdGVkIHRvIDxjb2RlPjA8L2NvZGU+IGFuZCA8Y29kZT4xMDAwPC9jb2Rl PiwgcmVzcGVjdGl2ZWx5LiAgRm9yIGV4YW1wbGUsIDxjb2RlPm1pbnRhZ2NvdW50PSIyIjwv Y29kZT4gd291bGQgaGlkZSBhbnkgdGFncyB0aGF0IHdlcmUgb25seSBhc3NvY2lhdGVkIHdp dGggYSBzaW5nbGUgYXJ0aWNsZS4gIElmIHlvdSBkbyB0aGlzLCB5b3UgbWF5IHdhbnQgdG8g YWRkIGEgbGluayB0byB0aGUgZGVmYXVsdCB0YWcgY2xvdWQsIHVzdWFsbHkgZm91bmQgYXQg PGNvZGU+L3RhZy88L2NvZGU+LjwvbGk+CgkJPGxpPklmIHlvdSB3YW50IHRvIGNvbnRyb2wg dGhlIHNpemUocykgb2YgdGhlIHRhZ3MgeW91cnNlbGYgKHRocm91Z2ggQ1NTKSwgc2V0IDxj b2RlPnNldHNpemVzPSIwIjwvY29kZT4gdG8gdHVybiBvZmYgdGhlIDxjb2RlPnN0eWxlPSJm b250LXNpemU6IFhYWCUiPC9jb2RlPiBhdHRyaWJ1dGUgZ2VuZXJhdGlvbi4gIFRoYXQgd2ls bCBsZWF2ZSBiZWhpbmQgdGhlIGRlZmF1bHQgQ1NTIGNsYXNzZXMsIHdoaWNoIHlvdSBjYW4g dXNlIHRvIGNvbnRyb2wgdGhlIGRpc3BsYXkgb2YgeW91ciBjbG91ZC48L2xpPgoJCTxsaT48 Y29kZT5zb3J0PC9jb2RlPiBjYW4gYmUgdXNlZCB0byBzb3J0IHRoZSBjbG91ZCBieSB0YWcg ZnJlcXVlbmN5LCByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBvZiBhbHBoYWJldGljYWxseS4g IFVzZSA8Y29kZT5zb3J0PSJjb3VudCI8L2NvZGU+IHRvIHNvcnQgYnkgZnJlcXVlbmN5IGlu IGRlc2NlbmRpbmcgb3JkZXIsIGFuZCA8Y29kZT5zb3J0PSJjb3VudCBhc2MiPC9jb2RlPiB0 byBzb3J0IGJ5IGZyZXF1ZW5jeSBpbiBhc2NlbmRpbmcgb3JkZXIuPC9saT4KCTwvdWw+Cgk8 cD5Ob3RlIHRoYXQgeW91IGNhbiB1c2UgdGhlIGF0dHJpYnV0ZXMgdG8gbWFrZSBlYWNoIHRh ZyBkbyB0aGUgc2FtZSB0aGluZy4gIDxjb2RlPnRydV90YWdzX2Nsb3VkPC9jb2RlPiBpcyBq dXN0IGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGdlbmVyYXRpbmcgYSB0YWcgY2xvdWQg dXNpbmcgPGNvZGU+dHJ1X3RhZ3NfbGlzdDwvY29kZT4uICBUaGVyZWZvcmUsIGl0JiM4MjE3 O3MgcG9zc2libGUgdG8gaGF2ZSBhIHRhZyBjbG91ZCB3aXRoIHRhZyBjb3VudHMgc2hvd2lu Zywgb3IgaGF2ZSBhIGJ1bGxldGVkIGxpc3Qgd2l0aCB2YXJpYWJsZSBmb250IHNpemVzLCBl dGMuPC9wPgoJPGg0Pjxjb2RlPnRydV90YWdzX2lmX3RhZ19zZWFyY2g8L2NvZGU+PC9oND4K CTxwPlRoaXMgY29uZGl0aW9uYWwgdGFnIGNhbiBiZSB1c2VkIGFueXdoZXJlIGFuZCB3aWxs IGV2YWx1YXRlIGl0cyBjb250ZW50cyAoZS5nLiAmIzgyMjA7cmV0dXJuIHRydWUmIzgyMjE7 KSBpZiB0aGUgY3VycmVudCB1cmwgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgYSB0YWcgc2Vh cmNoIGdvaW5nIG9uLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGRvIHNv bWV0aGluZyBsaWtlIGN1c3RvbWl6ZSB0aGUgdGl0bGViYXIgd2hlbiB1c2luZyB0aGUgdGFn IHNlYXJjaC48L3A+Cgk8aDQ+PGNvZGU+dHJ1X3RhZ3NfdGFnX3BhcmFtZXRlcjwvY29kZT48 L2g0PgoJPHA+VGhpcyB0YWcgY2FuIGJlIHVzZWQgYW55d2hlcmUgYW5kIHdpbGwgcmV0dXJu IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHRhZyB1bmRlciBzZWFyY2gsIGR1cmluZyBhIHRh ZyBzZWFyY2guICBUaGlzIGlzIGdlbmVyYWxseSB1c2VkIHdpdGggPGNvZGU+dHJ1X3RhZ3Nf aWZfdGFnX3NlYXJjaDwvY29kZT4uPC9wPgoJPGg0Pjxjb2RlPnRydV90YWdzX3NlYXJjaF9w YXJhbWV0ZXI8L2NvZGU+PC9oND4KCTxwPlRoaXMgdGFnIGNhbiBiZSB1c2VkIGFueXdoZXJl IGFuZCB3aWxsIHJldHVybiB0aGUgdGV4dCB0aGUgdXNlciB0eXBlZCBpbnRvIHRoZSBzdGFu ZGFyZCBzZWFyY2ggYm94LCBkdXJpbmcgYSByZWd1bGFyIHNlYXJjaC4gIFRoaXMgdGFnIGlz IG5vdCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0YWdnaW5nLCBidXQgY2FuIGJlIGhhbmR5 IGZvciBjdXN0b21pemluZyB0aGUgdGl0bGViYXIgb24gc2VhcmNoIHJlc3VsdCBwYWdlcy48 L3A+CgoKICI7czo0OiJjb2RlIjtzOjczNTM6IgoKCiNDb3B5cmlnaHQgMjAwNiBOYXRoYW4g QXJ0aHVyCiNSZWxlYXNlZCB1bmRlciB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCBzZWUgaHR0 cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5waHAgZm9yIGRl dGFpbHMKI1RoaXMgd29yayBpcyBiYXNlZCBvbiByYW5fdGFncyBieSBSYW4gQXJvdXNzaSwg b3JpZ2luYWxseSBmb3VuZCBhdCBodHRwOi8vYXJvdXNzaS5jb20vYXJ0aWNsZS80NS90YWdn aW5nLXRleHRwYXR0ZXJuCgoKI1NlZSBodHRwOi8vd3d3LnRydWlzdC5jb20vcmVmZXJlbmNl LzQ5Ny90cnV0YWdzLXVzYWdlLWluc3RydWN0aW9ucyBmb3IgaW5zdHJ1Y3Rpb25zCmZ1bmN0 aW9uIHRydV90YWdzX3VzZV9jbGVhbl91cmxzKCkKewoJcmV0dXJuIDA7ICNETyBOT1QgRU5B QkxFIFRISVMgdW5sZXNzIHlvdSd2ZSByZWFkIHRoZSBpbnN0cnVjdGlvbnMKfQoKCmZ1bmN0 aW9uIHRydV90YWdzX2hhbmRsZXIoJGF0dHMpIHsKCWV4dHJhY3QoJF9HRVQpOwoJaWYgKGlz c2V0KCR0KSkgewoJCSRrZXl3b3JkcyA9IGV4cGxvZGUoJywnLCBzdHJpcF90YWdzKCR0KSk7 CgkJZm9yZWFjaCAoJGtleXdvcmRzIGFzICRrZXl3b3JkKSB7CgkJCWlmIChzdHJwb3MoJGtl eXdvcmQsICctJykgIT09IGZhbHNlKQoJCQkJJGtleXdvcmRzW10gPSBzdHJfcmVwbGFjZSgn LScsICcgJywgJGtleXdvcmQpOwoJCX0KCQkkYXR0c1sna2V5d29yZHMnXSA9IGltcGxvZGUo JywnLCAka2V5d29yZHMpOwoKCQlpZiAoJGF0dHNbJ3NlY3Rpb24nXSAmJiBzdHJwb3MoJGF0 dHNbJ3NlY3Rpb24nXSwgJywnKSAhPT0gZmFsc2UpCgkJCSRhdHRzWydzZWN0aW9uJ10gPSAn JzsKCgkJaWYgKCEkYXR0c1snbGltaXQnXSkKCQkJJGF0dHNbJ2xpbWl0J10gPSAnMTAwMCc7 CgkJJGF0dHNbJ2FsbG93b3ZlcnJpZGUnXSA9IHRydWU7CgoJCXJldHVybiBkb0FydGljbGVz KCRhdHRzLCB0cnVlKTsKCX0gZWxzZSB7CgkJcmV0dXJuIHRydV90YWdzX2Nsb3VkKCRhdHRz KTsKCX0KfQoKCmZ1bmN0aW9uIHRydV90YWdzX2lmX2hhc190YWdzKCRhdHRzLCAkdGhpbmcp IHsKCWdsb2JhbCAkdGhpc2FydGljbGU7CglleHRyYWN0KCR0aGlzYXJ0aWNsZSk7CgoJJHRh Z3NfZmllbGQgPSB0cnVfdGFnc19maWVsZCgpOwoKCSRycyA9IHNhZmVfcm93KCR0YWdzX2Zp ZWxkLCAidGV4dHBhdHRlcm4iLCAiSUQ9JyR0aGlzaWQnIEFORCAkdGFnc19maWVsZCA8PiAn JyIpOwoJcmV0dXJuIHBhcnNlKEV2YWxFbHNlKCR0aGluZywgJHJzKSk7Cn0KCgpmdW5jdGlv biB0cnVfdGFnc19mcm9tX2FydGljbGUoJGF0dHMpIHsKCglnbG9iYWwgJHRoaXNhcnRpY2xl LCAkc2l0ZXVybCwgJHBhdGhfZnJvbV9yb290OwoKCWV4dHJhY3QoJF9TRVJWRVIpOwoJZXh0 cmFjdCgkdGhpc2FydGljbGUpOwoKCWV4dHJhY3QobEF0dHMoYXJyYXkoJ3dyYXB0YWcnICAg ICAgID0+ICcnLAoJCQkJCQknYnJlYWsnICAgICAgICAgPT4gJywgJywKCQkJCQkJJ2NsYXNz JyAgICAgICAgID0+ICcnLAoJCQkJCQknYnJlYWtjbGFzcycJPT4gJycsCgkJCQkJCSd0YWdz ZWN0aW9uJwk9PiAndGFnJywKCQkJCQkJJ3VzZXJlbHRhZycJPT4gJzEnLAoJCQkJCQknZ2Vu ZXJhdGVsaW5rcycJPT4gJzEnLAoJCQkJCQkndXNlbm9mb2xsb3cnCT0+ICcnCgkJCQkJCSks JGF0dHMpKTsKCgkkdGFnc19maWVsZCA9IHRydV90YWdzX2ZpZWxkKCk7CgoJJHJzID0gc2Fm ZV9yb3coJHRhZ3NfZmllbGQsICJ0ZXh0cGF0dGVybiIsICJJRD0nJHRoaXNpZCcgQU5EICR0 YWdzX2ZpZWxkIDw+ICcnIik7CgkkYWxsX3RhZ3MgPSBleHBsb2RlKCIsIiwgdHJpbShtYl9z dHJ0b2xvd2VyKCRyc1skdGFnc19maWVsZF0sICJVVEYtOCIpKSk7Cglzb3J0KCRhbGxfdGFn cyk7CgkkYWxsX3RhZ3MgPSBhcnJheV91bmlxdWUoJGFsbF90YWdzKTsKCglpZiAoJGdlbmVy YXRlbGlua3MpIHsKCQlpZiAodHJ1X3RhZ3NfdXNlX2NsZWFuX3VybHMoKSkgewoJCQkkdXJs cHJlZml4ID0gJ2h0dHA6Ly8nIC4gJHNpdGV1cmwgLiAkcGF0aF9mcm9tX3Jvb3QgLiAkdGFn c2VjdGlvbiAuICcvJzsKCQkJaWYgKCR1c2VyZWx0YWcpIHsKCQkJCWlmICgkdXNlbm9mb2xs b3cpIHsKCQkJCQkkdXJsc3VmZml4ID0gJy8iIHJlbD0idGFnIG5vZm9sbG93JzsKCQkJCX0g ZWxzZSB7CgkJCQkJJHVybHN1ZmZpeCA9ICcvIiByZWw9InRhZyc7CgkJCQl9CgkJCX0gZWxz ZSBpZiAoJHVzZW5vZm9sbG93KSB7CgkJCQkkdXJsc3VmZml4ID0gJy8iIHJlbD0ibm9mb2xs b3cnOwoJCQl9IGVsc2UgewoJCQkJJHVybHN1ZmZpeCA9ICcvJzsKCQkJfQoJCX0gZWxzZSB7 CgkJCSR1cmxwcmVmaXggPSAnaHR0cDovLycgLiAkc2l0ZXVybCAuICRwYXRoX2Zyb21fcm9v dCAuICc/cz0nIC4gJHRhZ3NlY3Rpb24gLiAnJmFtcDt0PSc7CgkJCSR1cmxzdWZmaXggPSAn JzsKCQl9CgoJCWZvcigkaT0wOyAkaTxjb3VudCgkYWxsX3RhZ3MpOyAkaSsrKSB7CgkJCSR0 YWdzX2h0bWxbXSA9ICc8YSBocmVmPSInIC4gJHVybHByZWZpeCAuIHN0cl9yZXBsYWNlKCcg JywgJy0nLCB0cmltKCRhbGxfdGFnc1skaV0pKSAuICR1cmxzdWZmaXggLiAnIj4nIC4gdHJp bSgkYWxsX3RhZ3NbJGldKSAuJzwvYT4nOwoJCX0KCX0gZWxzZSB7CgkJJHRhZ3NfaHRtbCA9 ICRhbGxfdGFnczsKCX0KCglyZXR1cm4gZG9XcmFwKCR0YWdzX2h0bWwsICR3cmFwdGFnLCAk YnJlYWssICRjbGFzcywgJGJyZWFrY2xhc3MpOwp9CgoKZnVuY3Rpb24gdHJ1X3RhZ3NfY2xv dWQoJGF0dHMpIHsKCSRhdHRzID0gbEF0dHMoYXJyYXkoJ3dyYXB0YWcnCT0+ICcnLAoJCQkJ J2JyZWFrJwk9PiAnLCAnLAoJCQkJJ2NsYXNzJwk9PiAnJywKCQkJCSdicmVha2NsYXNzJwk9 PiAnJywKCQkJCSd0YWdzZWN0aW9uJwk9PiAndGFnJywKCQkJCSdzZWN0aW9uJwk9PiAnJywK CQkJCSdtaW5wZXJjZW50Jwk9PiAnMTAwJywKCQkJCSdtYXhwZXJjZW50Jwk9PiAnMjAwJywK CQkJCSdzaG93Y291bnRzJwk9PiAnJywKCQkJCSdjb3VudHdyYXBjaGFycycJPT4gJ1tdJywK CQkJCSd1c2VyZWx0YWcnCT0+ICcnLAoJCQkJJ2dlbmVyYXRlbGlua3MnCT0+ICcxJywKCQkJ CSdtaW50YWdjb3VudCcJPT4gJzAnLAoJCQkJJ21heHRhZ2NvdW50Jwk9PiAnMTAwMCcsCgkJ CQknc2V0c2l6ZXMnCT0+ICcxJywKCQkJCSd1c2Vub2ZvbGxvdycJPT4gJycsCgkJCQknc29y dCcJCT0+ICdhbHBoYScKCQkJKSwkYXR0cyk7CgoJcmV0dXJuIHRydV90YWdzX2xpc3QoJGF0 dHMpOwp9CgoKZnVuY3Rpb24gdHJ1X3RhZ3NfbGlzdCgkYXR0cykgewoJZ2xvYmFsICRzaXRl dXJsLCAkcGF0aF9mcm9tX3Jvb3Q7CglleHRyYWN0KCRfU0VSVkVSKTsKCgkkYXR0cyA9IGxB dHRzKGFycmF5KCd3cmFwdGFnJwk9PiAndWwnLAoJCQkJJ2JyZWFrJwk9PiAnbGknLAoJCQkJ J2NsYXNzJwk9PiAnJywKCQkJCSdicmVha2NsYXNzJwk9PiAnJywKCQkJCSd0YWdzZWN0aW9u Jwk9PiAndGFnJywKCQkJCSdzZWN0aW9uJwk9PiAnJywKCQkJCSdtaW5wZXJjZW50Jwk9PiAn MTAwJywKCQkJCSdtYXhwZXJjZW50Jwk9PiAnMTAwJywKCQkJCSdzaG93Y291bnRzJwk9PiAn JywKCQkJCSdjb3VudHdyYXBjaGFycycJPT4gJ1tdJywKCQkJCSd1c2VyZWx0YWcnCT0+ICcn LAoJCQkJJ2dlbmVyYXRlbGlua3MnCT0+ICcxJywKCQkJCSdtaW50YWdjb3VudCcJPT4gJzAn LAoJCQkJJ21heHRhZ2NvdW50Jwk9PiAnMTAwMCcsCgkJCQknc2V0c2l6ZXMnCT0+ICcxJywK CQkJCSd1c2Vub2ZvbGxvdycJPT4gJycsCgkJCQknc29ydCcJCT0+ICdhbHBoYScKCQkJKSwk YXR0cyk7CglleHRyYWN0KCRhdHRzKTsKCgkkdGFnc19maWVsZCA9IHRydV90YWdzX2ZpZWxk KCk7CgoJJHNlY3Rpb25fY2xhdXNlID0gJyc7CglpZiAoJHNlY3Rpb24gPD4gJycpIHsKCQkk a2V5cyA9IHNwbGl0KCcsJywgJHNlY3Rpb24pOwoJCWZvcmVhY2ggKCRrZXlzIGFzICRrZXkp IHsKCQkJJGtleXBhcnRzW10gPSAiIFNlY3Rpb24gPSAnIiAuIHRyaW0oJGtleSkgLiAiJyI7 CgkJfQoJCSRzZWN0aW9uX2NsYXVzZSA9ICIgQU5EICgiIC4gam9pbignIG9yICcsICRrZXlw YXJ0cykgLiAiKSI7Cgl9CgoJaW5jbHVkZV9vbmNlIHR4cGF0aC4nL3B1Ymxpc2gvc2VhcmNo LnBocCc7CgkkZmlsdGVyID0gZmlsdGVyU2VhcmNoKCk7CgkkYWxsX3RhZ3MgPSBhcnJheSgp OwoJJHJzID0gc2FmZV9yb3dzKCIkdGFnc19maWVsZCIsICJ0ZXh0cGF0dGVybiIsICIkdGFn c19maWVsZCA8PiAnJyIgLiAkc2VjdGlvbl9jbGF1c2UgLiAkZmlsdGVyIC4gIiBhbmQgU3Rh dHVzID49ICc0JyBhbmQgUG9zdGVkIDwgbm93KCkiKTsKCWZvcmVhY2ggKCRycyBhcyAkcm93 KSB7CgkJJHRlbXBfYXJyYXkgPSBleHBsb2RlKCIsIiwgdHJpbShtYl9zdHJ0b2xvd2VyKCRy b3dbJHRhZ3NfZmllbGRdLCAiVVRGLTgiKSkpOwoJCWZvciAoJGkgPSAwOyAkaSA8IGNvdW50 KCR0ZW1wX2FycmF5KTsgJGkrKykgewoJCQkkdGVtcF9hcnJheVskaV0gPSB0cmltKCR0ZW1w X2FycmF5WyRpXSk7CgkJfQoJCSRhbGxfdGFncyA9IGFycmF5X21lcmdlKCRhbGxfdGFncywg JHRlbXBfYXJyYXkpOwoJfQoJc29ydCgkYWxsX3RhZ3MpOwoKCSR0YWdzX3dlaWdodCA9IGFy cmF5X2NvdW50X3ZhbHVlcygkYWxsX3RhZ3MpOwoJJHRhZ3NfdW5pcXVlID0gYXJyYXlfdW5p cXVlKCRhbGxfdGFncyk7CgoJZm9yZWFjaCAoJHRhZ3NfdW5pcXVlIGFzICRrZXkgPT4gJHRh ZykgewoJCWlmICgkdGFnc193ZWlnaHRbJHRhZ10gPCAkbWludGFnY291bnQgfHwgJHRhZ3Nf d2VpZ2h0WyR0YWddID4gJG1heHRhZ2NvdW50KSB7CgkJCXVuc2V0KCR0YWdzX3VuaXF1ZVsk a2V5XSk7CgkJCXVuc2V0KCR0YWdzX3dlaWdodFskdGFnXSk7CgkJfQoJfQoKCWlmIChzdHJw b3MoJHNvcnQsICdjb3VudCcpICE9PSBmYWxzZSkgewoJCWlmIChzdHJwb3MoJHNvcnQsICdh c2MnKSAhPT0gZmFsc2UpIHsKCQkJYXJyYXlfbXVsdGlzb3J0KCR0YWdzX3dlaWdodCwgU09S VF9BU0MsICR0YWdzX3VuaXF1ZSk7CgkJfSBlbHNlIHsKCQkJYXJyYXlfbXVsdGlzb3J0KCR0 YWdzX3dlaWdodCwgU09SVF9ERVNDLCAkdGFnc191bmlxdWUpOwoJCX0KCX0KCgkkbWF4ID0g bWF4KCR0YWdzX3dlaWdodCk7CgkkbWluID0gbWluKCR0YWdzX3dlaWdodCk7Cgkkc3RlcHZh bHVlID0gKCRtYXggPT0gJG1pbikgPyAwIDogKCRtYXhwZXJjZW50IC0gJG1pbnBlcmNlbnQp IC8gKCRtYXggLSAkbWluKTsKCglpZiAoJGdlbmVyYXRlbGlua3MpIHsKCQlpZiAodHJ1X3Rh Z3NfdXNlX2NsZWFuX3VybHMoKSkgewoJCQkkdXJscHJlZml4ID0gJ2h0dHA6Ly8nIC4gJHNp dGV1cmwgLiAkcGF0aF9mcm9tX3Jvb3QgLiAkdGFnc2VjdGlvbiAuICcvJzsKCQkJaWYgKCR1 c2VyZWx0YWcpIHsKCQkJCWlmICgkdXNlbm9mb2xsb3cpIHsKCQkJCQkkdXJsc3VmZml4ID0g Jy8iIHJlbD0idGFnIG5vZm9sbG93JzsKCQkJCX0gZWxzZSB7CgkJCQkJJHVybHN1ZmZpeCA9 ICcvIiByZWw9InRhZyc7CgkJCQl9CgkJCX0gZWxzZSBpZiAoJHVzZW5vZm9sbG93KSB7CgkJ CQkkdXJsc3VmZml4ID0gJy8iIHJlbD0ibm9mb2xsb3cnOwoJCQl9IGVsc2UgewoJCQkJJHVy bHN1ZmZpeCA9ICcvJzsKCQkJfQoJCX0gZWxzZSB7CgkJCSR1cmxwcmVmaXggPSAnaHR0cDov LycgLiAkc2l0ZXVybCAuICRwYXRoX2Zyb21fcm9vdCAuICc/cz0nIC4gJHRhZ3NlY3Rpb24g LiAnJmFtcDt0PSc7CgkJCSR1cmxzdWZmaXggPSAnJzsKCQl9Cgl9CgoJZm9yZWFjaCAoJHRh Z3NfdW5pcXVlIGFzICR0YWcpIHsKCQkkdGFnX3dlaWdodCA9IGZsb29yKCRtaW5wZXJjZW50 ICsgKCR0YWdzX3dlaWdodFskdGFnXSAtICRtaW4pICogJHN0ZXB2YWx1ZSk7CgoJCWlmICgk c2V0c2l6ZXMpCgkJCSRzdHlsZSA9ICcgc3R5bGU9ImZvbnQtc2l6ZTogJyAuICR0YWdfd2Vp Z2h0IC4gJyU7Iic7CgoJCSR0YWdfY2xhc3MgPSAnIGNsYXNzPSInOwoJCWlmICgkdGFnc193 ZWlnaHRbJHRhZ10gPT0gJG1pbikKCQkJJHRhZ19jbGFzcyAuPSAidGFnU2l6ZVNtYWxsZXN0 IjsKCQllbHNlIGlmICgkdGFnc193ZWlnaHRbJHRhZ10gPT0gJG1heCkKCQkJJHRhZ19jbGFz cyAuPSAidGFnU2l6ZUxhcmdlc3QiOwoJCWVsc2UKCQkJJHRhZ19jbGFzcyAuPSAidGFnU2l6 ZU1lZGl1bSI7CgkJJHRhZ19jbGFzcyAuPSAnIHRhZ1NpemUnIC4gKCR0YWdzX3dlaWdodFsk dGFnXSArIDEgLSAkbWluKTsKCQkkdGFnX2NsYXNzIC49ICciJzsKCgkJLy9hZGFwdGVkIGZy b20gY29kZSBieSBnZHRyb2lhbm8sIHNlZSBodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29t L3ZpZXd0b3BpYy5waHA/cGlkPTEwMjg3NSNwMTAyODc1CgkJJHRpdGxlY291bnQgPSAnJzsK CQkkZGlzcGxheWNvdW50PSAnJzsKCQkkY291bnQgPSAkY291bnR3cmFwY2hhcnN7MH0gLiAk dGFnc193ZWlnaHRbJHRhZ10gLiAkY291bnR3cmFwY2hhcnN7MX07CgkJaWYgKCRzaG93Y291 bnRzID09ICd0aXRsZScgfHwgJHNob3djb3VudHMgPT0gJ2JvdGgnKQoJCQkkdGl0bGVjb3Vu dCA9ICcgdGl0bGU9IicgLiAkY291bnQgLiAnIic7CgkJaWYgKCRzaG93Y291bnRzICYmICRz aG93Y291bnRzICE9ICd0aXRsZScpCgkJCSRkaXNwbGF5Y291bnQgPSAnICcgLiAkY291bnQ7 CgoJCWlmICgkZ2VuZXJhdGVsaW5rcykgewoJCQkkd2hvbGV1cmwgPSAnIicgLiAkdXJscHJl Zml4IC4gc3RyX3JlcGxhY2UoJyAnLCAnLScsICR0YWcpIC4gJHVybHN1ZmZpeCAuICciJzsK CQkJJHRhZ3NfaHRtbFtdID0gJzxhIGhyZWY9JyAuICR3aG9sZXVybCAuICR0YWdfY2xhc3Mg LiAkc3R5bGUgLiAkdGl0bGVjb3VudCAuICc+JyAuICR0YWcgLiAnPC9hPicgLiAkZGlzcGxh eWNvdW50OwoJCX0gZWxzZSB7CgkJCSR0YWdzX2h0bWxbXSA9ICc8c3BhbicgLiAkdGFnX2Ns YXNzIC4gJHN0eWxlIC4gJHRpdGxlY291bnQgLiAnPicgLiAkdGFnIC4gJzwvc3Bhbj4nIC4g JGRpc3BsYXljb3VudDsKCQl9Cgl9CgoJcmV0dXJuIGRvV3JhcCgkdGFnc19odG1sLCAkd3Jh cHRhZywgJGJyZWFrLCAkY2xhc3MsICRicmVha2NsYXNzKTsKfQoKCmZ1bmN0aW9uIHRydV90 YWdzX2lmX3RhZ19zZWFyY2goJGF0dHMsICR0aGluZykKewoJJHRhZ19zZWFyY2hpbmcgPSBn cHMoJ3QnKTsKCSRjb25kaXRpb24gPSAoIWVtcHR5KCR0YWdfc2VhcmNoaW5nKSk/IHRydWUg OiBmYWxzZTsKCXJldHVybiBwYXJzZShFdmFsRWxzZSgkdGhpbmcsICRjb25kaXRpb24pKTsK fQoKCmZ1bmN0aW9uIHRydV90YWdzX3RhZ19wYXJhbWV0ZXIoKQp7CglyZXR1cm4gc3RyaXBf dGFncyhncHMoJ3QnKSk7Cn0KCgpmdW5jdGlvbiB0cnVfdGFnc19zZWFyY2hfcGFyYW1ldGVy KCkKewoJcmV0dXJuIHN0cmlwX3RhZ3MoZ3BzKCdxJykpOwp9CgpmdW5jdGlvbiB0cnVfdGFn c19maWVsZCgpIHsKCXJldHVybiAnS2V5d29yZHMnOwp9CgoKCiI7czozOiJtZDUiO3M6MzI6 IjQ4Y2FlYTAxNmU1YTljYWM1NDJkNWE1Zjg4YzZhZWQzIjt9