# tru_tags v1.10 # 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: # ...................................................................... YToxMTp7czoxNToiYWxsb3dfaHRtbF9oZWxwIjtpOjA7czo3OiJ2ZXJzaW9uIjtzOjQ6IjEu MTAiO3M6NjoiYXV0aG9yIjtzOjEzOiJOYXRoYW4gQXJ0aHVyIjtzOjEwOiJhdXRob3JfdXJp IjtzOjIyOiJodHRwOi8vd3d3LnRydWlzdC5jb20vIjtzOjExOiJkZXNjcmlwdGlvbiI7czox NToiVGFnZ2luZyBzdXBwb3J0IjtzOjQ6InR5cGUiO2k6MDtzOjQ6Im5hbWUiO3M6MTI6InRy dV90YWdzLnRtcCI7czo0OiJoZWxwIjtzOjI0MTMyOiIJPHA+VG8gbGVhcm4gbW9yZSBhYm91 dCB0cnVfdGFncywgY2hlY2sgb3V0IHRoZSA8YSBocmVmPSIvYmxvZy80OTMvdHJ1dGFncy1h LXRhZ2dpbmctcGx1Z2luLWZvci10ZXh0cGF0dGVybiI+aW50cm9kdWN0b3J5IGFydGljbGU8 L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vd3d3LnRydWlzdC5jb20vcmVmZXJlbmNlLzQ5NS90 cnV0YWdzLWZlYXR1cmUtbGlzdCI+ZmVhdHVyZSBsaXN0PC9hPi48L3A+CgoJPGgzPkNvbmZp Z3VyYXRpb248L2gzPgoKCTxoND5TdGVwIDE6IENyZWF0ZSBhIG5ldyBzZWN0aW9uPC9oND4K Cgk8cD50cnVfdGFncyBkZXBlbmRzIG9uIHRoZSBleGlzdGVuY2Ugb2YgYSBzcGVjaWFsIFRl eHRwYXR0ZXJuIHNlY3Rpb24gbmFtZWQgJiM4MjIwO3RhZywmIzgyMjE7IGJ5IGRlZmF1bHQ8 c3VwIGNsYXNzPSJmb290bm90ZSI+PGEgaHJlZj0iI2ZuMTY5NjAzMjMwNDQ1NWVjZTZkYWM0 MTgiPjE8L2E+PC9zdXA+LiAgQ3JlYXRlIHRoYXQgc2VjdGlvbiwgdXNpbmcgd2hhdGV2ZXIg c2V0dGluZ3MgeW91IGxpa2UuICAoWW91IHdvbiYjODIxNzt0IGJlIHB1Ymxpc2hpbmcgYXJ0 aWNsZXMgdG8gdGhhdCBzZWN0aW9uLikgIEhlcmUmIzgyMTc7cyB3aGF0IEkgdXNlPHN1cCBj bGFzcz0iZm9vdG5vdGUiPjxhIGhyZWY9IiNmbjI2MTIxMDUxMzQ1NWVjZTZkYjEyNDMiPjI8 L2E+PC9zdXA+OjwvcD4KCgk8cD48aW1nIHNyYz0iaHR0cDovL3d3dy50cnVpc3QuY29tL2lt YWdlcy8yLnBuZyIgaGVpZ2h0PSIyODAiIHdpZHRoPSIzOTgiIGFsdD0idGFnIHNlY3Rpb24g Y29uZmlndXJhdGlvbiIgY2xhc3M9ImRpYWdyYW0iIC8+PC9wPgoKCTxwIGNsYXNzPSJmb290 bm90ZSIgaWQ9ImZuMTY5NjAzMjMwNDQ1NWVjZTZkYWM0MTgiPjxzdXA+MTwvc3VwPiBZb3Ug Y2FuIHVzZSBhIGRpZmZlcmVudCBuYW1lLCBidXQgeW91IGhhdmUgdG8gdXNlIGEgc3BlY2lh bCBhdHRyaWJ1dGUgaW4gc29tZSBvZiB0aGUgcGx1Z2luIGNhbGxzIHRvIG1ha2UgIGV2ZXJ5 dGhpbmcgd29yayBjb3JyZWN0bHkuICBTZWUgYmVsb3cgZm9yIGRldGFpbHMuPC9wPgoKCTxw IGNsYXNzPSJmb290bm90ZSIgaWQ9ImZuMjYxMjEwNTEzNDU1ZWNlNmRiMTI0MyI+PHN1cD4y PC9zdXA+IE5vdGUgdGhhdCBJIHVzZSB0aGUgJiM4MjE2O2RlZmF1bHQmIzgyMTc7IHBhZ2Ug JiM4MjExOyB0aGF0IGNob2ljZSBtYXkgbm90IGJlIHJpZ2h0IGZvciB5b3UuICBUaGlzIHNl Y3Rpb24gd2lsbCBiZSBzaG93biB3aGVuZXZlciB5b3UgY2xpY2sgb24gYSB0YWcsIHRvIGRp c3BsYXkgdGhlIHRhZyBzZWFyY2ggcmVzdWx0cy4gIFlvdSYjODIxNztsbCB3YW50IGEgcGFn ZSB0aGF0IGhhcyB0aGUgY29ycmVjdCBsYXlvdXQvaGVhZGVycy9mb290ZXJzLiAgSSB1c2Ug bXkgZGVmYXVsdCBwYWdlLCB3aXRoIDxjb2RlPiYjNjA7dHhwOmlmX3NlY3Rpb24gbmFtZT0m IzM0O3RhZyYjMzQ7JiM2Mjs8L2NvZGU+IHRvIGNoYW5nZSB0aGUgcGFnZSBkaXNwbGF5IGlu IHRoaXMgY2FzZS48L3A+CgoJPGg0PlN0ZXAgMjogQ2FsbCB0aGUgcGx1Z2luIGZyb20gdGhh dCBzZWN0aW9uPC9oND4KCgk8cD5UbyBtYWtlIHRhZyBzZWFyY2hpbmcgYW5kIHRoZSBkZWZh dWx0IHRhZyBjbG91ZCB3b3JrLCB5b3UmIzgyMTc7bGwgbmVlZCB0byBjYWxsIDxjb2RlPiYj NjA7dHhwOnRydV90YWdzX2hhbmRsZXIgLyYjNjI7PC9jb2RlPiBmcm9tIHRoZSBwYWdlIHlv dSBjaG9zZSBpbiBTdGVwIDEuICBJIHJlcGxhY2VkIHRoZSBkZWZhdWx0IDxjb2RlPiYjNjA7 dHhwOmFydGljbGUgLyYjNjI7PC9jb2RlPiB3aXRoIHNvbWV0aGluZyBsaWtlIHRoaXM6PC9w PgoKPHByZT4mIzYwO3R4cDppZl9zZWN0aW9uIG5hbWU9JiMzNDt0YWcmIzM0OyYjNjI7CiAg JiM2MDt0eHA6dHJ1X3RhZ3NfaGFuZGxlciAvJiM2MjsKJiM2MDt0eHA6ZWxzZSAvJiM2MjsK ICAmIzYwO3R4cDphcnRpY2xlIC8mIzYyOwomIzYwOy90eHA6aWZfc2VjdGlvbiYjNjI7PC9w cmU+CgoJPGg0PlN0ZXAgMzogQ29uZmlndXJlIHlvdXIgYXJ0aWNsZSBmb3JtIHRvIGRpc3Bs YXkgdGFnczwvaDQ+CgoJPHA+VG8gbWFrZSBlYWNoIGFydGljbGUgc2hvdyBhIGxpc3Qgb2Yg YWxsIHRoZSB0YWdzIGFzc29jaWF0ZWQgd2l0aCBpdCwgcHV0IHNvbWV0aW5nIGxpa2UgdGhp cyBpbiB5b3VyIGFydGljbGUgZm9ybTo8L3A+Cgo8cHJlPiYjNjA7dHhwOnRydV90YWdzX2lm X2hhc190YWdzJiM2MjsKICB0YWdzOiAmIzYwO3R4cDp0cnVfdGFnc19mcm9tX2FydGljbGUg LyYjNjI7CiYjNjA7L3R4cDp0cnVfdGFnc19pZl9oYXNfdGFncyYjNjI7PC9wcmU+CgoJPGg0 PlN0ZXAgNDogRHJvcCBhIGN1c3RvbSB0YWcgY2xvdWQgc29tZXdoZXJlLCBpZiB5b3Ugd2Fu dDwvaDQ+CgoJPHA+SWYgeW91JiM4MjE3O2QgbGlrZSB0byBzaG93IGEgdGFnIGNsb3VkIHNv bWV3aGVyZSBvbiB5b3VyIHNpdGUgKG90aGVyIHRoYW4gPGNvZGU+L3RhZy88L2NvZGU+KSwg cHV0IHNvbWV0aGluZyBsaWtlIHRoaXMgaW4gdGhhdCBwYWdlOjwvcD4KCjxwcmU+JiM2MDt0 eHA6dHJ1X3RhZ3NfY2xvdWQgLyYjNjI7PC9wcmU+CgoJPHA+U2VlIGJlbG93IGZvciBsb3Rz IG9mIGZvcm1hdHRpbmcgb3B0aW9ucywgaW5jbHVkaW5nIHRoZSBhYmlsaXR5IHRvIG91dHB1 dCBhIHNpbXBsZSBsaXN0IGluc3RlYWQgb2YgYSBjbG91ZCAodXNpbmcgPGNvZGU+dHJ1X3Rh Z3NfbGlzdDwvY29kZT4pLjwvcD4KCgk8aDQ+U3RlcCA1OiBTdGFydCB0YWdnaW5nITwvaDQ+ CgoJPHA+V2hlbmV2ZXIgeW91IHdyaXRlIGFuIGFydGljbGUsIHB1dCB5b3VyIHRhZ3MgaW50 byB0aGUgS2V5d29yZHMgZmllbGQgaW4gVGV4dHBhdHRlcm4uICAoVGhlIEtleXdvcmRzIGZp ZWxkIGhpZGVzIGJlaGluZCB0aGUgJiM4MjIwO0FkdmFuY2VkIE9wdGlvbnMmIzgyMjE7IGxp bmsgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgJiM4MjIwO3dyaXRlJiM4MjIxOyBwYWdlLikg IFRhZ3Mgc2hvdWxkIGJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBjYW4gaGF2ZSBzcGFj ZXM8c3VwIGNsYXNzPSJmb290bm90ZSI+PGEgaHJlZj0iI2ZuMTY5NjAzMjMwNDQ1NWVjZTZk YWM0MTgiPjE8L2E+PC9zdXA+LjwvcD4KCgk8cD5Zb3UmIzgyMTc7bGwgcHJvYmFibHkgd2Fu dCB0byBpbnN0YWxsIFJvYiBTYWJsZSYjODIxNztzIDxhIGhyZWY9Imh0dHA6Ly93d3cud2ls c2hpcmVvbmUuY29tL3RleHRwYXR0ZXJuLXBsdWdpbnMvcnNzLWFkbWluLXNob3ctYWR2LW9w dHMiPnJzc19hZG1pbl9zaG93X2Fkdl9vcHRzPC9hPiwgd2hpY2ggd2lsbCBhdXRvbWF0aWNh bGx5IGV4cGFuZCB0aGUgJiM4MjIwO0FkdmFuY2VkIE9wdGlvbnMmIzgyMjE7IHNlY3Rpb24g b2YgdGhlICYjODIyMDt3cml0ZSYjODIyMTsgcGFnZSwgd2hlbiB5b3UgYXJlIHdyaXRpbmcg YXJ0aWNsZXMuICBUaGF0IGdpdmVzIHlvdSBlYXN5IGFjY2VzcyB0byB0aGUgS2V5d29yZHMg ZmllbGQuPC9wPgoKCTxwIGNsYXNzPSJmb290bm90ZSIgaWQ9ImZuMTY5NjAzMjMwNDQ1NWVj ZTZkYWM0MTgiPjxzdXA+MTwvc3VwPiBUYWdzIHdpdGggc3BhY2VzIHdpbGwgZ2VuZXJhdGUg dXJscyB3aXRoIGRhc2hlcywgd2hpY2ggd2lsbCB3b3JrIGNvcnJlY3RseS4gIFRhZ3Mgd2l0 aCBkYXNoZXMgd2lsbCBhbHNvIHdvcmsgY29ycmVjdGx5LjwvcD4KCgk8aDQ+U3RlcCA2OiBG YW5jeSBkaXNwbGF5IGN1c3RvbWl6YXRpb24gKE9wdGlvbmFsKTwvaDQ+CgoJPHA+WW91IGNh biB1c2UgPGNvZGU+dHJ1X3RhZ3NfaWZfdGFnX3NlYXJjaDwvY29kZT4sIDxjb2RlPnRydV90 YWdzX3RhZ19wYXJhbWV0ZXI8L2NvZGU+LCBhbmQgPGNvZGU+dHJ1X3RhZ3Nfc2VhcmNoX3Bh cmFtZXRlcjwvY29kZT4gdG8gY3VzdG9taXplIHlvdXIgcGFnZSB0aXRsZXMgb3IgdGFnIHNl YXJjaCByZXN1bHRzLiAgU2VlIGJlbG93IGZvciBkZXRhaWxzLiAgRm9yIGFuIGV4YW1wbGUs IGRvIGEgdGFnIHNlYXJjaCBvbiB0aGlzIHNpdGUgYW5kIGxvb2sgYXQgdGhlIHRpdGxlYmFy LjwvcD4KCgk8cD5JZiB5b3UgZG9uJiM4MjE3O3QgbGlrZSB0aGUgZmFjdCB0aGF0IGFsbCB0 YWdzIGFyZSBzaG93biBpbiBsb3dlcmNhc2UgeW91IGNhbiB1c2UgPGNvZGU+LnRleHQtdHJh bnNmb3JtOiBjYXBpdGFsaXplLjwvY29kZT4gaW4geW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+ Q1NTPC9zcGFuPiBzdHlsZXNoZWV0LCBpbiBjb25qdW5jdGlvbiB3aXRoIGFuIGFwcHJvcHJp YXRlIDxjb2RlPmNsYXNzPC9jb2RlPiBhdHRyaWJ1dGUgb24geW91ciA8Y29kZT50cnVfdGFn c19jbG91ZDwvY29kZT4gY2FsbCwgdG8gY2FwaXRhbGl6ZSB0aGUgdGFncy48L3A+CgoJPGg0 PlN0ZXAgNzogVHVybiBvbiBjbGVhbiB1cmxzIChPcHRpb25hbCk8L2g0PgoKCTxwPkNsZWFu IHVybHMgYXJlIG5vdyBwb3NzaWJsZSB3aXRoIHRydV90YWdzLCBwcm92aWRlZCB0aGF0IHlv dSBhcmUgd2lsbGluZyB0byBtb2RpZnkgVGV4dHBhdHRlcm4mIzgyMTc7cyByZXdyaXRlIHJ1 bGVzIChpbiB0aGUgLmh0YWNjZXNzIGZpbGUpLiAgQnV0IGJlIHdhcm5lZCAmIzgyMTE7IHJl d3JpdGUgcnVsZXMgYXJlIGNvbXBsZXguICBJIG1ha2Ugbm8gZ3VhcmFudGVlcyB0aGF0IHRo aXMgd29uJiM4MjE3O3QgZWF0IHlvdXIgY2hpbGRyZW4uICA8c3Ryb25nPllvdSBkb24mIzgy MTc7dCBoYXZlIHRvIGRvIHRoaXM8L3N0cm9uZz4gYnV0IGEgbG90IG9mIHBlb3BsZSB3YW50 IGl0LiAgVGhpcyBzaXRlIHVzZXMgaXQsIGlmIHRoYXQgaGVscHMuPC9wPgoKCTxwPlRoZXNl IGluc3RydWN0aW9ucyBhcmUgZm9yIGFwYWNoZSAyLjAgb24gdW5peC9saW51eCB3aXRoIHRl eHRwYXR0ZXJuIGluc3RhbGxlZCBhdCB0aGUgcm9vdCBvZiB5b3VyIHNpdGUuICBTZWUgPGEg aHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP3BpZD0x MDM4MjMjcDEwMzgyMyI+dGhpcyBmb3J1bSBwb3N0PC9hPiBmb3IgZGV0YWlscyBvbiBjbGVh biB1cmxzIHdpdGggbGlnaHR0cGQuICBBbGwgb3RoZXIgcGxhdGZvcm1zL3NlcnZlcnMvY29u ZmlndXJhdGlvbnMgYXJlIHVudGVzdGVkIChieSBtZSkuPC9wPgoKCTxwPkhlcmUmIzgyMTc7 cyB3aGF0IHRvIGRvOjwvcD4KCgk8b2w+CgkJPGxpPkFkZCB0aGUgZm9sbG93aW5nIGxpbmVz IHRvIFRleHRwYXR0ZXJuJiM4MjE3O3MgLmh0YWNjZXNzIGZpbGUgKGZvdW5kIGluIHRoZSBy b290IG9mIHlvdXIgVGV4dHBhdHRlcm4gZGlyZWN0b3J5KSwgYWRqdXN0aW5nIHRoZW0gaWYg bmVjZXNzYXJ5LiAgVGhlc2UgbGluZXMgc2hvdWxkIGJlIDxzdHJvbmc+YWZ0ZXI8L3N0cm9u Zz4gdGhlPC9saT4KCTwvb2w+CgoJPHA+PGRpdiBjbGFzcz0icHJlIj48L3A+CgoJPHA+UmV3 cml0ZVJ1bGUgXiguKykgLSBbUFQsTF08L3A+CgoJPHA+PC9kaXY+PC9wPgoKCTxwPmFuZCA8 c3Ryb25nPmJlZm9yZTwvc3Ryb25nPiB0aGU8L3A+CgoJPHA+PGRpdiBjbGFzcz0icHJlIj48 L3A+CgoJPHA+UmV3cml0ZVJ1bGUgXiguKikgaW5kZXgucGhwPC9wPgoKCTxwPjwvZGl2Pjwv cD4KCgk8cD5IZXJlJiM4MjE3O3MgdGhlIGJpdCB0byBpbnNlcnQgKHdoaWNoIHlvdSBtYXkg bmVlZCB0byBjdXN0b21pemUgZm9yIHlvdXIgc2l0ZSk6PC9wPgoKCTxwPjxkaXYgY2xhc3M9 InByZSI+PC9wPgoKCTxwPiNUaGlzIHBhdGggc2hvdWxkIG1hdGNoIHRoZSByZWxhdGl2ZSB1 cmwgb2YgeW91ciBUZXh0cGF0dGVybiBpbnN0YWxsPGJyIC8+ClJld3JpdGVCYXNlIC88YnIg Lz4KI0lmIHlvdSdyZSB1c2luZyBhIHNlY3Rpb24gb3RoZXIgdGhhbiAidGFnIiwgY2hhbmdl IHRoZSBmb2xsb3dpbmcgdHdvIHJ1bGVzIGFjY29yZGluZ2x5PGJyIC8+ClJld3JpdGVSdWxl IF50YWcvKFteL10rKSQgdGFnLyQxLyBbUixMXTxiciAvPgpSZXdyaXRlUnVsZSBedGFnLygu KykvJCA/cz10YWcmYW1wO3Q9JDE8L3A+CgoJPHA+PC9kaXY+PC9wPgoKCTxvbD4KCQk8bGk+ PHN0cm9uZz5DaGVjayB0byBtYWtlIHN1cmUgeW91ciBzaXRlIGlzIHN0aWxsIHdvcmtpbmcu PC9zdHJvbmc+PC9saT4KCQk8bGk+RWRpdCB0aGUgdHJ1X3RhZ3MgcGx1Z2luIChhZG1pbiAt PiBwbHVnaW5zLCBjbGljayAmIzgyMTY7RWRpdCYjODIxNzspIGFuZCBjaGFuZ2UgdGhlIDxj b2RlPnRydV90YWdzX3VzZV9jbGVhbl91cmxzKCk8L2NvZGU+IGZ1bmN0aW9uIHRvIHJldHVy biA8Y29kZT4xPC9jb2RlPi4gIChJdCYjODIxNztzIHRoZSBmaXJzdCBmdW5jdGlvbi4pCgk8 b2w+CgkJPGxpPklmIHlvdSYjODIxNztyZSBwbGFubmluZyBvbiB1c2luZyBub24tYWxwaGFu dW1lcmljIGNoYXJhY3RlcnMgKGxpa2UgJiM4MjE2OysmIzgyMTc7KSBpbiB5b3VyIHRhZyBu YW1lcywgYW5kIHlvdSYjODIxNztyZSB1c2luZyBhcGFjaGUgMiwgdGhlbiB5b3UgYWxzbyBu ZWVkIHRvIG1ha2UgPGNvZGU+dHJ1X3RhZ3NfZG91YmxlX3VybGVuY29kZSgpPC9jb2RlPiBy ZXR1cm4gPGNvZGU+MTwvY29kZT4uICBUaGlzIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiBhcGFj aGUgYW5kIG1vZF9yZXdyaXRlLjwvbGk+Cgk8L29sPjwvbGk+CgkJPGxpPkNsZWFuIHVybHMg c2hvdWxkIGJlIHdvcmtpbmcgbm93LiAgVHJ5IGNsaWNraW5nIGEgdGFnIGxpbmsgdG8gc2Vl IHdoYXQgdXJsIGl0IHJlZmVyZW5jZXMuPC9saT4KCQk8bGk+QnkgZGVmYXVsdCwgYXJ0aWNs ZSB0YWdzIHdpbGwgc2V0IHRoZSA8Y29kZT5yZWw9JiMzNDt0YWcmIzM0OzwvY29kZT4gYXR0 cmlidXRlLCBhbmQgdGhlIHRhZyBjbG91ZCAob3IgbGlzdCkgd29uJiM4MjE3O3QuICBUaGlz IGNhbiBiZSBjb250cm9sbGVkIHdpdGggdGhlIDxjb2RlPnVzZXJlbHRhZzwvY29kZT4gYXR0 cmlidXRlOyBzZWUgYmVsb3cgZm9yIGRldGFpbHMuPC9saT4KCTwvb2w+CgoJPGg0PlN0ZXAg ODogU2hvdyBhICYjODIyMDtyZWxhdGVkIHRhZ3MmIzgyMjE7IGNsb3VkIChPcHRpb25hbCk8 L2g0PgoKCTxwPnYxLjggKGFuZCBiZXlvbmQpIG9mIHRydV90YWdzIGhhcyBhIGZlYXR1cmUg dGhhdCBsZXRzIHlvdSBzaG93IGEgY2xvdWQgb2YgdGFncyB0aGF0IGFyZSByZWxhdGVkIHRv IHRoZSB0YWdzIHVzZWQgaW4gYXJ0aWNsZXMgdGhhdCBhcmUgZm91bmQgYnkgYSB0YWcgc2Vh cmNoLjwvcD4KCgk8cD5Hb3QgdGhhdD88L3A+CgoJPHA+VG8gc2VlIGFuIGV4YW1wbGUsIGRv IGEgdGFnIHNlYXJjaCBvbiB0aGlzIHNpdGUgKGNsaWNrIGEgbGluayBpbiB0aGUgdGFnIGNs b3VkKS4gIFdoZW4gdGhlIHNlYXJjaCByZXN1bHRzIGNvbWUgdXAgdGhlIHNpZGViYXIgd2ls bCBoYXZlIGEgbmV3IHNlY3Rpb24gaW4gaXQgY2FsbGVkICYjODIyMDtSZWxhdGVkIFRhZ3Mm IzgyMjE7LiAgVGhlIGNsb3VkIGluIHRoYXQgc2VjdGlvbiBjb250YWlucyBhbGwgdGhlIHRh Z3MgdXNlZCBieSBhbGwgdGhlIGFydGljbGVzIGluIHRoZSBzZWFyY2ggcmVzdWx0LiAgSXQm IzgyMTc7cyBhIHdheSB0byBzYXkgJiM4MjIwO3RoZXNlIG90aGVyIHRhZ3MgbWF5IGJlIHNp bWlsYXIgdG8gdGhlIHRhZyB5b3UganVzdCBzZWFyY2hlZCYjODIyMTsuPC9wPgoKCTxwPjxz dHJvbmc+QmVmb3JlIHlvdSB1c2UgdGhpcyBvbiB5b3VyIHNpdGUsIGhvd2V2ZXIsPC9zdHJv bmc+IHlvdSBzaG91bGQgcmVhZCB0aGUgZGV0YWlsZWQgaW5zdHJ1Y3Rpb25zIGNhcmVmdWxs eS4gIFRoaXMgdGFnIGNhbiBoYXZlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGltcGxpY2F0 aW9ucyBmb3IgeW91ciBzaXRlLCB3aGljaCB5b3VyIGhvc3RpbmcgcHJvdmlkZXIgbWlnaHQg bm90IGJlIHZlcnkgaGFwcHkgYWJvdXQuPC9wPgoKCTxwPlRvIHVzZSBpdCBhbnl3YXksIHB1 dCBzb21ldGhpbmcgbGlrZSB0aGlzIGludG8gdGhlIGFwcHJvcHJpYXRlIHBhZ2U6PC9wPgoK PHByZT4mIzYwO3R4cDp0cnVfdGFnc19pZl90YWdfc2VhcmNoJiM2MjsKJiM2MDt0eHA6dHJ1 X3RhZ3NfcmVsYXRlZF90YWdzX2Zyb21fc2VhcmNoIHNlY3Rpb249JiMzNDtibG9nLHJlZmVy ZW5jZSYjMzQ7IHVzZW92ZXJhbGxjb3VudHM9JiMzNDsxJiMzNDsgLyYjNjI7CiYjNjA7L3R4 cDp0cnVfdGFnc19pZl90YWdfc2VhcmNoJiM2Mjs8L3ByZT4KCgk8cD5JZiB5b3UgdXNlIHRo ZSA8Y29kZT5zZWN0aW9uPC9jb2RlPiBhdHRyaWJ1dGUgaW4geW91ciBtYWluIHRhZyBjbG91 ZCB5b3Ugc2hvdWxkIGFsc28gdXNlIGl0IGhlcmUuICBTZWUgdGhlIGRvY3VtZW50YXRpb24g YmVsb3cgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHdoeS48L3A+CgoJPHA+VGhlIDxjb2RlPnVz ZXJvdmVyYWxsY291bnRzPC9jb2RlPiBhdHRyaWJ1dGUgY2F1c2VzIHRoZSBjbG91ZCB0byBz aXplIHRoZSBsaW5rcyBhY2NvcmRpbmcgdG8gaG93IGxhcmdlIHRoZXkgd291bGQgYmUgaW4g dGhlIG1haW4gY2xvdWQuICBUaGF0JiM4MjE3O3MgcHJvYmFibHkgd2hhdCB5b3Ugd2FudCwg YnV0IGl0IGNhdXNlcyBldmVuIG1vcmUgcGVyZm9ybWFuY2Ugc2xvd2Rvd24uICBTZWUgdGhl IGRvY3VtZW50YXRpb24gYmVsb3cgZm9yIGFsbCB0aGUgZGV0YWlscy48L3A+CgoJPGgzPlRh ZyByZWZlcmVuY2U8L2gzPgoKCTxoND48Y29kZT50cnVfdGFnc19oYW5kbGVyPC9jb2RlPjwv aDQ+CgoJPHA+VGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbiB0aGF0IGRyaXZlcyB0YWcgc2Vh cmNoIGFuZCBzaG93cyB0aGUgZ2VuZXJpYyB0YWcgY2xvdWQuICBJdCBzaG91bGQgYmUgY2Fs bGVkIGZyb20gdGhlIHBhZ2UgdGhhdCBpcyB1c2VkIGluIHRoZSAmIzgyMTY7dGFnJiM4MjE3 OyBzZWN0aW9uLiAgSXQgZ2VuZXJhbGx5IGNhbGxzIDxjb2RlPmRvQXJ0aWNsZXMoKTwvY29k ZT4gKGluIHRoZSBUZXh0cGF0dGVybiBjb2RlKSB0byBkaXNwbGF5IHRhZyBzZWFyY2ggcmVz dWx0cywgYnV0IGlmIG5vIHRhZyB3YXMgcGFzc2VkIGluIHRoZSB1cmwgaXQgd2lsbCBjYWxs IDxjb2RlPnRydV90YWdzX2Nsb3VkPC9jb2RlPiBpbnN0ZWFkLjwvcD4KCgk8cD5UaGlzIHRh ZyBhY2NlcHRzIG1vc3Qgb2YgdGhlIHN0YW5kYXJkIDxjb2RlPnR4cDphcnRpY2xlPC9jb2Rl PiBhdHRyaWJ1dGVzLCB3aGljaCB3aWxsIGJlIGFwcGxpZWQgZHVyaW5nIHRoZSB0YWcgc2Vh cmNoLiAgTm90ZSB0aGF0IDxjb2RlPnRydV90YWdzX2hhbmRsZXI8L2NvZGU+IDxzdHJvbmc+ ZG9lcyBub3Q8L3N0cm9uZz4gc3VwcG9ydCB1c2luZyBtdWx0aXBsZSBzZWN0aW9ucyB3aXRo IHRoZSA8Y29kZT5zZWN0aW9uPC9jb2RlPiBhdHRyaWJ1dGUsIHdoZW4gZG9pbmcgYSB0YWcg c2VhcmNoLiAgSWYgbXVsdGlwbGUgc2VjdGlvbnMgYXJlIHBhc3NlZCwgbm9uZSBhcmUgdXNl ZC48L3A+CgoJPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBJbiBUZXh0cGF0dGVybiwgdGhl IDxjb2RlPmxpbWl0PC9jb2RlPiBhdHRyaWJ1dGUgaXMgZGVmYXVsdGVkIHRvIDxjb2RlPjEw PC9jb2RlPiwgdG8gbGltaXQgdGhlIG91dHB1dCB0byAxMCBhcnRpY2xlcyBwZXIgcGFnZSwg YW5kIHRoZSA8Y29kZT50eHA6b2xkZXI8L2NvZGU+IGFuZCA8Y29kZT50eHA6bmV3ZXI8L2Nv ZGU+IHRhZ3MgYXJlIHVzZWQgdG8gcGFnaW5hdGUgdGhlIGZ1bGwgbGlzdC4gIFRoZSA8Y29k ZT50eHA6b2xkZXI8L2NvZGU+IGFuZCA8Y29kZT50eHA6bmV3ZXI8L2NvZGU+IHRhZ3MgZG8g bm90IHdvcmsgd2l0aCB0cnVfdGFncywgYnV0IHRoZSA8Y29kZT5saW1pdDwvY29kZT4gaXMg c3RpbGwgdXNlZCBieSBUZXh0cGF0dGVybiB3aGVuIGl0IG91dHB1dHMgdGhlIGFydGljbGVz LiAgVGhlcmVmb3JlLCB0cnVfdGFncyB1c2VzIGEgZGVmYXVsdCBsaW1pdCBvZiA8Y29kZT4x MDAwPC9jb2RlPiB3aGVuIGRvaW5nIGFuIGFydGljbGUgc2VhcmNoLiAgWW91IGNhbiBvdmVy cmlkZSB0aGlzIGxpbWl0IGJ5IHNldHRpbmcgdGhlIDxjb2RlPmxpbWl0PC9jb2RlPiBhdHRy aWJ1dGUgb24gPGNvZGU+dHJ1X3RhZ3NfaGFuZGxlcjwvY29kZT4uPC9wPgoKCTxwPlRoaXMg dGFnIHdpbGwgYWxzbyBhY2NlcHQgYWxsIG9mIHRoZSBhdHRyaWJ1dGVzIHVzZWQgYnkgPGNv ZGU+dHJ1X3RhZ19jbG91ZDwvY29kZT4uICBTZWUgYmVsb3cgZm9yIGRldGFpbHMuPC9wPgoK CTxoND48Y29kZT50cnVfdGFnc19pZl9oYXNfdGFnczwvY29kZT48L2g0PgoKCTxwPlRoaXMg Y29uZGl0aW9uYWwgdGFnIGNhbiBiZSB1c2VkIGluIGFuIGFydGljbGUgZm9ybSwgYW5kIHdp bGwgZXZhbHVhdGUgaXRzIGNvbnRlbnRzIChlLmcuICYjODIyMDtyZXR1cm4gdHJ1ZSYjODIy MTspIGlmIHRoZSBjdXJyZW50IGFydGljbGUgaGFzIHRhZ3MuPC9wPgoKCTxoND48Y29kZT50 cnVfdGFnc19mcm9tX2FydGljbGU8L2NvZGU+PC9oND4KCgk8cD5UaGlzIHRhZyBjYW4gYmUg dXNlZCBpbiBhbiBhcnRpY2xlIGZvcm0gdG8gcmV0dXJuIGEgbGlzdCBvZiB0YWdzIGFzc29j aWF0ZWQgd2l0aCB0aGUgY3VycmVudCBhcnRpY2xlLiAgVHlwaWNhbGx5IChzZWUgYmVsb3cp LCBlYWNoIHRhZyBpbiB0aGUgbGlzdCB3aWxsIGJlIGEgbGluayAoPGNvZGU+JiM2MDthIGhy ZWY9Li4uJiM2Mjs8L2NvZGU+KSB0byB0aGUgdGFnIHNlYXJjaCB1cmwgZm9yIHRoYXQgcGFy dGljdWxhciB0YWcuPC9wPgoKCTxwPlRoaXMgdGFnIGFjY2VwdHMgdGhlIHN0YW5kYXJkIDxj b2RlPndyYXB0YWc8L2NvZGU+LCA8Y29kZT5icmVhazwvY29kZT4sIDxjb2RlPmNsYXNzPC9j b2RlPiwgYW5kIDxjb2RlPmJyZWFrY2xhc3M8L2NvZGU+IGF0dHJpYnV0ZXM8c3VwIGNsYXNz PSJmb290bm90ZSI+PGEgaHJlZj0iI2ZuMTY5NjAzMjMwNDQ1NWVjZTZkYWM0MTgiPjE8L2E+ PC9zdXA+LjwvcD4KCgk8cD5JZiB5b3UgZG9uJiM4MjE3O3Qgd2FudCB0byBoYXZlIHRoZSB0 YWdzIGJlIGxpbmtzLCB5b3UgY2FuIHNldCA8Y29kZT5nZW5lcmF0ZWxpbmtzPSYjMzQ7MCYj MzQ7PC9jb2RlPiB0byB0dXJuIHRoZSBsaW5rcyBvZmYuPC9wPgoKCTxwPklmIHlvdSBuYW1l ZCB5b3VyICYjODIxNjt0YWcmIzgyMTc7IHNlY3Rpb24gc29tZXRoaW5nIG90aGVyIHRoYW4g JiM4MjIwO3RhZyYjODIyMTssIHNldCA8Y29kZT50YWdzZWN0aW9uPC9jb2RlPiB0byB0aGUg bmFtZSBvZiB0aGF0IHNlY3Rpb24uICBCeSBkZWZhdWx0LCB0aGlzIGlzIHNldCB0byA8Y29k ZT50YWc8L2NvZGU+LjwvcD4KCgk8cD5UaGUgPGNvZGU+dGl0bGU8L2NvZGU+IGF0dHJpYnV0 ZSBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHRvb2x0aXAgZm9yIHRoZSB0YWdzLjwvcD4KCgk8 cD5JZiB5b3UgaGF2ZSBjbGVhbiB1cmxzIHR1cm5lZCBvbiAoc2VlIGFib3ZlKSwgeW91IGNh biB1c2UgdGhlIDxjb2RlPnVzZXJlbHRhZ3M8L2NvZGU+IGF0dHJpYnV0ZSB0byBzcGVjaWZ5 IHdoZXRoZXIgbGlua3MgaW4gdGhlIGxpc3Qgc2hvdWxkIGhhdmUgdGhlIDxhIGhyZWY9Imh0 dHA6Ly9taWNyb2Zvcm1hdHMub3JnL3dpa2kvcmVsdGFnIj48Y29kZT5yZWw9JiMzNDt0YWcm IzM0OzwvY29kZT48L2E+ICAodXNlZCBieSA8YSBocmVmPSJodHRwOi8vd3d3LnRlY2hub3Jh dGkuY29tLyI+VGVjaG5vcmF0aTwvYT4pIGF0dHJpYnV0ZSBzZXQuICBOb3RlIHRoYXQgdGhp cyB3b24mIzgyMTc7dCB3b3JrIGlmIHlvdSB0dXJuIG9mZiBsaW5rcy4gIEFsc28gbm90ZSB0 aGF0IHRhZ3MgZG9uJiM4MjE3O3Qgc2hvdyB1cCBpbiB0aGUgUlNTL0F0b20gZmVlZHMsIHVu bGVzcyB5b3UgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9w aWMucGhwP3BpZD00MDkwNyNwNDA5MDciPmhhY2sgdGhlIHRleHRwYXR0ZXJuIHNvdXJjZTwv YT4uICBUaGlzIGlzIG9uIGJ5IGRlZmF1bHQuPC9wPgoKCTxwPkFnYWluIGlmIHlvdSBoYXZl IGNsZWFuIHVybHMgdHVybmVkIG9uLCB5b3UgY2FuIHVzZSB0aGUgPGNvZGU+dXNlbm9mb2xs b3c8L2NvZGU+IGF0dHJpYnV0ZSB0byBzcGVjaWZ5IHdoZXRoZXIgbGlua3MgaW4gdGhlIGxp c3Qgc2hvdWxkIGhhdmUgdGhlIDxhIGhyZWY9Imh0dHA6Ly9nb29nbGVibG9nLmJsb2dzcG90 LmNvbS8yMDA1LzAxL3ByZXZlbnRpbmctY29tbWVudC1zcGFtLmh0bWwiPjxjb2RlPnJlbD0m IzM0O25vZm9sbG93JiMzNDs8L2NvZGU+PC9hPiBhdHRyaWJ1dGUgc2V0LiAgVGhpcyBpcyBv ZmYgYnkgZGVmYXVsdC48L3A+CgoJPHA+QXMgb2YgdjEuOCwgeW91IGNhbiBzZXQgdGhlIDxj b2RlPnVzZW92ZXJhbGxjb3VudHM8L2NvZGU+IGF0dHJpYnV0ZSB0byB0ZWxsIHRoZSB0YWcg bGlzdCB0byByZW5kZXIgYXMgYSBjbG91ZCAod2hlcmUgZWFjaCB0YWcgaXMgc2l6ZWQgYWNj b3JkaW5nIHRvIGl0cyBzaXRlLXdpZGUgZnJlcXVlbmN5KS4gIFRoaXMgdGFnIGlzbiYjODIx Nzt0IHN1ZmZpY2llbnQgb24gaXRzIG93biwgaG93ZXZlcjsgb25jZSB5b3Ugc2V0IGl0IHlv dSBhbHNvIG5lZWQgdG8gc2V0IHRoZSByZW5kZXJpbmcgYXR0cmlidXRlcyBsaWtlIDxjb2Rl Pm1heHBlcmNlbnQ9JiMzNDsyMDAmIzM0OzwvY29kZT4sIDxjb2RlPnNldHNpemVzPSYjMzQ7 MSYjMzQ7PC9jb2RlPiwgYW5kIDxjb2RlPnNldGNsYXNzZXM9JiMzNDsxJiMzNDs8L2NvZGU+ IGJlY2F1c2UgdGhlc2UgYXJlIGFsbCB0dXJuZWQgb2ZmIGJ5IGRlZmF1bHQuICBZb3UmIzgy MTc7bGwgYWxzbyB0aGVuIGJlIGFibGUgdG8gdXNlIGF0dHJpYnV0ZXMgbGlrZSA8Y29kZT5z aG93Y291bnRzPC9jb2RlPiBhbmQgPGNvZGU+c29ydDwvY29kZT4uICBTZWUgdGhlIDxjb2Rl PnRydV90YWdzX2Nsb3VkPC9jb2RlPiBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzIG9uIHRo ZXNlIGF0dHJpYnV0ZXMuPC9wPgoKCTxwPjxzdHJvbmc+QmUgY2FyZWZ1bCwgaG93ZXZlciw8 L3N0cm9uZz4gYmVmb3JlIHR1cm5pbmcgdGhpcyBvbi4gIFRoaXMgYXR0cmlidXRlIGNhdXNl cyA8Y29kZT50cnVfdGFnczwvY29kZT4gdG8gZG8gYW4gZXh0cmEgZGF0YWJhc2UgcXVlcnkg Zm9yIGVhY2ggYXJ0aWNsZSBkaXNwbGF5ZWQgb24gYSBwYWdlLiAgVGhhdCBleHRyYSBxdWVy eSBpcyBlcXVpdmFsZW50IHRvIHRoZSBxdWVyeSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBvdmVy YWxsIGNsb3VkLiAgWW91IG1heSBwYXkgYSBwZXJmb3JtYW5jZSBwZW5hbHR5IGZvciBhbGwg dGhlIGV4dHJhIHF1ZXJpZXMuPC9wPgoKCTxwIGNsYXNzPSJmb290bm90ZSIgaWQ9ImZuMTY5 NjAzMjMwNDQ1NWVjZTZkYWM0MTgiPjxzdXA+MTwvc3VwPiBBcyB3aXRoIGFsbCBUZXh0cGF0 dGVybiB0YWdzLCA8Y29kZT5jbGFzczwvY29kZT4gaXMgb25seSB1c2VkIGlmIHlvdSBzcGVj aWZ5IGFuIGFwcHJvcHJpYXRlIDxjb2RlPndyYXB0YWc8L2NvZGU+IGFuZCA8Y29kZT5icmVh a2NsYXNzPC9jb2RlPiBpcyBvbmx5IHVzZWQgaWYgeW91IHNwZWNpZnkgYW4gYXBwcm9wcmlh dGUgPGNvZGU+YnJlYWs8L2NvZGU+LjwvcD4KCgk8aDQ+PGNvZGU+dHJ1X3RhZ3NfY2xvdWQ8 L2NvZGU+PC9oND4KCgk8aDQ+PGNvZGU+dHJ1X3RhZ3NfbGlzdDwvY29kZT48L2g0PgoKPHA+ PGNvZGU+dHJ1X3RhZ3NfY2xvdWQ8L2NvZGU+IGNhbiBiZSB1c2VkIG9uIGFueSBwYWdlLCBh bmQgaXMgZ2VuZXJhbGx5IHVzZWQgdG8gZ2VuZXJhdGUgYSBzaW1wbGUgdGFnIGNsb3VkIG9m IGFsbCB0aGUgdGFncyB1c2VkIG9uIHlvdXIgc2l0ZS4gIFRoZSBjbG91ZCBpcyByZWFsbHkg anVzdCBhIGxpc3Qgb2YgbGlua3MsIG11Y2ggbGlrZSB0aGF0IGdlbmVyYXRlZCBieSA8Y29k ZT50cnVfdGFnc19mcm9tX2FydGljbGU8L2NvZGU+LCBidXQgd2l0aCBhIDxjb2RlPnN0eWxl PC9jb2RlPiBhdHRyaWJ1dGUgc2V0IG9uIGVhY2ggbGluayB0byBnaXZlIGl0IGEgZm9udCBz aXplIHJhbmdpbmcgZnJvbSAxMDAlIHRvIDIwMCUuPC9wPgoKPHA+PGNvZGU+dHJ1X3RhZ3Nf bGlzdDwvY29kZT4gY2FuIGJlIHVzZWQgb24gYW55IHBhZ2UsIGFuZCBpcyBnZW5lcmFsbHkg dXNlZCB0byBvdXRwdXQgYSBidWxsZXRlZCBsaXN0IG9mIGFsbCB0aGUgdGFncyB1c2VkIG9u IHlvdXIgc2l0ZS4gIEJ5IGRlZmF1bHQsIHRoZSB0YWdzIHdpbGwgYWxsIGhhdmUgYSBmb250 LXNpemUgb2YgMTAwJS48L3A+CgoJPHA+VGhlc2UgdHdvIHRhZ3MgZG8gdGhlIGV4YWN0IHNh bWUgdGhpbmcgJiM4MjExOyA8Y29kZT50cnVfdGFnc19jbG91ZDwvY29kZT4ganVzdCBwcm92 aWRlcyBkaWZmZXJlbnQgZGVmYXVsdHMgdG8gPGNvZGU+dHJ1X3RhZ3NfbGlzdDwvY29kZT4u PC9wPgoKPHA+PGNvZGU+dHJ1X3RhZ3NfY2xvdWQ8L2NvZGU+IGFuZCA8Y29kZT50cnVfdGFn c19saXN0PC9jb2RlPiBib3RoIHNldCB0aGUgPGNvZGU+Y2xhc3M8L2NvZGU+IGF0dHJpYnV0 ZSBvZiBlYWNoIHRhZywgc3BlY2lmeWluZyB0d28gY2xhc3Nlcy4gIFRoZSBmaXJzdCBjbGFz cyBncm91cHMgdGhlIHRhZ3MgaW50byBjYXRlZ29yaWVzLCB3aXRoIGNsYXNzZXMgb2YgPGNv ZGU+dGFnU2l6ZVNtYWxsZXN0PC9jb2RlPiwgPGNvZGU+dGFnU2l6ZU1lZGl1bTwvY29kZT4s IGFuZCA8Y29kZT50YWdTaXplTGFyZ2VzdDwvY29kZT4uICBVc2luZyB0aGVzZSwgeW91IGNv dWxkIG1ha2UgdGhlIHNtYWxsZXN0IGFuZCBsYXJnZXN0IHRhZ3MgaGF2ZSBkaWZmZXJlbnQg c3R5bGVzIHRoYW4gYWxsIHRoZSBvdGhlcnMuPC9wPgoKCTxwPlRoZSBzZWNvbmQgY2xhc3Mg aW5kaWNhdGVzIHRoZSAmIzgyMjA7c3RlcCYjODIyMTsgb2YgdGhlIGN1cnJlbnQgdGFnLCB3 aXRoIGNsYXNzZXMgb2YgPGNvZGU+dGFnU2l6ZTE8L2NvZGU+LCA8Y29kZT50YWdTaXplMjwv Y29kZT4sIGFuZCBzbyBvbi4gIFRoZXNlIGdpdmUgeW91IHByZWNpc2UgY29udHJvbCBvdmVy IGVhY2ggdGFnIHNpemUsIGlmIHlvdSB3YW50IGl0LjwvcD4KCgk8cD5JZiB5b3UgdXNlIHRo ZXNlIGNsYXNzZXMgdG8gY3JlYXRlIHNwZWNpYWwgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwv c3Bhbj4gcnVsZXMsIHlvdSBtYXkgYWxzbyB3YW50IHRvIHNldCB0aGUgPGNvZGU+c2V0c2l6 ZXM8L2NvZGU+IGF0dHJpYnV0ZSwgZGVzY3JpYmVkIGJlbG93LjwvcD4KCgk8aDU+Qm90aCB0 YWdzIGFjY2VwdCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6PC9oNT4KCgk8dWw+CgkJPGxp PlRoZSBzdGFuZGFyZCA8Y29kZT53cmFwdGFnPC9jb2RlPiwgPGNvZGU+YnJlYWs8L2NvZGU+ LCA8Y29kZT5jbGFzczwvY29kZT4sIGFuZCA8Y29kZT5icmVha2NsYXNzPC9jb2RlPiBhdHRy aWJ1dGVzLiAgPGNvZGU+dHJ1X3RhZ3NfY2xvdWQ8L2NvZGU+IGhhcyBhIGRlZmF1bHQgPGNv ZGU+YnJlYWs8L2NvZGU+IG9mIGEgY29tbWEuICA8Y29kZT50cnVfdGFnc19saXN0PC9jb2Rl PiBoYXMgYSBkZWZhdWx0IDxjb2RlPndyYXB0YWc8L2NvZGU+IG9mIDxjb2RlPnVsPC9jb2Rl PiBhbmQgYSBkZWZhdWx0IDxjb2RlPmJyZWFrPC9jb2RlPiBvZiA8Y29kZT5saTwvY29kZT4u PC9saT4KCQk8bGk+PGNvZGU+dGFnc2VjdGlvbjwvY29kZT4sIHdoaWNoIHRlbGxzIHRydV90 YWdzIHRoZSBuYW1lIG9mIHlvdXIgJiM4MjE2O3RhZyYjODIxNzsgc2VjdGlvbi4gIFRoaXMg Y2FuIGJlIHVzZWZ1bCBpZiB5b3UgaGF2ZSBuYW1lZCB0aGUgc2VjdGlvbiBzb21ldGhpbmcg b3RoZXIgdGhhbiAmIzgyMjA7dGFnJiM4MjIxOy4gIEJ5IGRlZmF1bHQsIHRoaXMgaXMgc2V0 IHRvIDxjb2RlPnRhZzwvY29kZT4uPC9saT4KCQk8bGk+PGNvZGU+c2VjdGlvbjwvY29kZT4s IHdoaWNoIHRlbGxzIGl0IHRvIGxpbWl0IHRoZSBsaXN0IHRvIHRhZ3MgZnJvbSB0aGUgZ2l2 ZW4gc2VjdGlvbiBvciBzZWN0aW9ucy4gIEZvciBleGFtcGxlLCA8Y29kZT4mIzYwO3R4cDp0 cnVfdGFnc19jbG91ZCBzZWN0aW9uPSYjMzQ7YmxvZyxyZWZlcmVuY2UmIzM0OyAvJiM2Mjs8 L2NvZGU+IHdvdWxkIG9ubHkgc2hvdyB0YWdzIGZyb20gdGhlICYjODIyMDtibG9nJiM4MjIx OyBhbmQgJiM4MjIwO3JlZmVyZW5jZSYjODIyMTsgc2VjdGlvbnMuICBCeSBkZWZhdWx0LCB0 aGlzIGlzIHNldCB0byBibGFuayAodG8gc2hvdyB0YWdzIGZyb20gYWxsIHNlY3Rpb25zKS4K CTx1bD4KCQk8bGk+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBpZiB5b3UgdXNlIDxjb2RlPnNl Y3Rpb248L2NvZGU+IHRvIGxpbWl0IHRoZSBjbG91ZCB0byBhIHBhcnRpY3VsYXIgc2VjdGlv biwgaXQgd29uJiM4MjE3O3QgbGltaXQgdGhlIHRhZyBzZWFyY2ggZmVhdHVyZSB0byB0aGF0 IHNlY3Rpb24uICBUaGUgdGFnIHNlYXJjaCBmaW5kcyAodGFnZ2VkKSBhcnRpY2xlcyBmcm9t IGFsbCBzZWN0aW9ucywgbm8gbWF0dGVyIHdoYXQuICBUaGF0JiM4MjE3O3MgYSBzaWRlLWVm ZmVjdCBvZiB0aGUgdXNlIG9mIDxjb2RlPmRvQXJ0aWNsZXMoKTwvY29kZT4sIGFuZCBJIGRv biYjODIxNzt0IHRoaW5rIHRoZXJlJiM4MjE3O3MgYW55dGhpbmcgSSBjYW4gZG8gYWJvdXQg aXQuPC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PGNvZGU+bWlucGVyY2VudDwvY29kZT4gYW5k IDxjb2RlPm1heHBlcmNlbnQ8L2NvZGU+LCB3aGljaCBjYW4gYmUgdXNlZCB0byBjb250cm9s IHRoZSB3ZWlnaHRlZCBmb250IHNpemVzIGluIHRoZSB0YWcgY2xvdWQvbGlzdC4gIDxjb2Rl PnRydV90YWdzX2Nsb3VkPC9jb2RlPiBkZWZhdWx0cyB0byA8Y29kZT4xMDA8L2NvZGU+IGFu ZCA8Y29kZT4yMDA8L2NvZGU+LCByZXNwZWN0aXZlbHksIGFuZCA8Y29kZT50cnVfdGFnc19s aXN0PC9jb2RlPiBkZWZhdWx0cyB0byA8Y29kZT4xMDA8L2NvZGU+IGFuZCA8Y29kZT4xMDA8 L2NvZGU+LjwvbGk+CgkJPGxpPjxjb2RlPnNob3djb3VudHM8L2NvZGU+LCB3aGljaCB3aWxs IGFwcGVuZCBhIG51bWJlciBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgdGltZXMgYSB0YWcg aGFzIGJlZW4gdXNlZCwgdG8gZWFjaCB0YWcgaW4gdGhlIGxpc3QuICBGb3IgZXhhbXBsZSwg eW91IG1pZ2h0IHNlZTogPHNwYW4gY2xhc3M9InByZSI+PGEgaHJlZj0iLz9zPXRhZyYjMzg7 dD1saWZlIj5saWZlPC9hPiBbM10sIDxhIGhyZWY9Ii8/cz10YWcmIzM4O3Q9dGVjaCI+dGVj aDwvYT4gWzVdPC9zcGFuPiBpbiBteSB0YWcgY2xvdWQsIGlmIHRoaXMgd2FzIHR1cm5lZCBv bi4gIFRoaXMgaXMgb2ZmIGJ5IGRlZmF1bHQuICBVc2UgPGNvZGU+MTwvY29kZT4gb3IgPGNv ZGU+dHJ1ZTwvY29kZT4gdG8gdHVybiBpdCBvbi4KCTx1bD4KCQk8bGk+VGhpcyBjYW4gYWxz byBiZSB1c2VkIHRvIHB1dCB0aGUgY291bnRzIGluIHRoZSA8Y29kZT50aXRsZTwvY29kZT4g YXR0cmlidXRlIG9mIHRoZSBsaW5rcywgd2hpY2ggd2lsbCBtYWtlIGl0IGFwcGVhciBpbiBh IHRvb2x0aXAuICBVc2UgPGNvZGU+c2hvd2NvdW50cz0mIzM0O3RpdGxlJiMzNDs8L2NvZGU+ IG9yIDxjb2RlPnNob3djb3VudHM9JiMzNDtib3RoJiMzNDs8L2NvZGU+ICh0byBzaG93IGl0 IGluIGJvdGggcGxhY2VzKSB0byB0dXJuIGl0IG9uLjwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxp Pjxjb2RlPmNvdW50d3JhcGNoYXJzPC9jb2RlPiwgd2hpY2ggY29udHJvbHMgdGhlIGNoYXJh Y3RlcnMgdXNlZCB0byBzaG93IHRoZSB0YWcgY291bnQsIGlmIDxjb2RlPnNob3djb3VudHM8 L2NvZGU+IGlzIHR1cm5lZCBvbi4gIEJ5IGRlZmF1bHQgdGhpcyBpcyA8Y29kZT5bXTwvY29k ZT4uICBUaGUgZmlyc3QgY2hhcmFjdGVyIHdpbGwgYmUgcHV0IG9uIHRoZSBsZWZ0IHNpZGUg b2YgdGhlIG51bWJlciwgYW5kIHRoZSBzZWNvbmQgY2hhcmFjdGVyIHdpbGwgYmUgcHV0IG9u IHRoZSByaWdodC4gIEZvciBleGFtcGxlLCBhIDxjb2RlPmNvdW50d3JhcGNoYXJzPC9jb2Rl PiBvZiA8Y29kZT4oKTwvY29kZT4gd291bGQgc2hvdzogPHNwYW4gY2xhc3M9InByZSI+PGEg aHJlZj0iLz9zPXRhZyYjMzg7dD1saWZlIj5saWZlPC9hPiAoMyksIDxhIGhyZWY9Ii8/cz10 YWcmIzM4O3Q9dGVjaCI+dGVjaDwvYT4gKDUpPC9zcGFuPjwvbGk+CgkJPGxpPjxjb2RlPnRp dGxlPC9jb2RlPiBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHRvb2x0aXAgZm9yIHRoZSB0YWdz LjwvbGk+CgkJPGxpPklmIHlvdSBoYXZlIGNsZWFuIHVybHMgdHVybmVkIG9uIChzZWUgYWJv dmUpLCB5b3UgY2FuIHVzZSB0aGUgPGNvZGU+dXNlcmVsdGFnczwvY29kZT4gYXR0cmlidXRl IHRvIHNwZWNpZnkgd2hldGhlciBsaW5rcyBpbiB0aGUgbGlzdCBzaG91bGQgaGF2ZSB0aGUg PGEgaHJlZj0iaHR0cDovL21pY3JvZm9ybWF0cy5vcmcvd2lraS9yZWx0YWciPjxjb2RlPnJl bD0mIzM0O3RhZyYjMzQ7PC9jb2RlPjwvYT4gICh1c2VkIGJ5IDxhIGhyZWY9Imh0dHA6Ly93 d3cudGVjaG5vcmF0aS5jb20vIj5UZWNobm9yYXRpPC9hPikgYXR0cmlidXRlIHNldC4gIFRo aXMgaXMgb2ZmIGJ5IGRlZmF1bHQuPC9saT4KCQk8bGk+QWdhaW4gaWYgeW91IGhhdmUgY2xl YW4gdXJscyB0dXJuZWQgb24sIHlvdSBjYW4gdXNlIHRoZSA8Y29kZT51c2Vub2ZvbGxvdzwv Y29kZT4gYXR0cmlidXRlIHRvIHNwZWNpZnkgd2hldGhlciBsaW5rcyBpbiB0aGUgbGlzdCBz aG91bGQgaGF2ZSB0aGUgPGEgaHJlZj0iaHR0cDovL2dvb2dsZWJsb2cuYmxvZ3Nwb3QuY29t LzIwMDUvMDEvcHJldmVudGluZy1jb21tZW50LXNwYW0uaHRtbCI+PGNvZGU+cmVsPSYjMzQ7 bm9mb2xsb3cmIzM0OzwvY29kZT48L2E+IGF0dHJpYnV0ZSBzZXQuICBUaGlzIGlzIG9mZiBi eSBkZWZhdWx0LjwvbGk+CgkJPGxpPklmIHlvdSBkb24mIzgyMTc7dCB3YW50IHRoZSB0YWdz IHRvIGJlIGxpbmtzLCB5b3UgY2FuIHNldCA8Y29kZT5nZW5lcmF0ZWxpbmtzPSYjMzQ7MCYj MzQ7PC9jb2RlPiB0byB0dXJuIHRoZW0gb2ZmLjwvbGk+CgkJPGxpPjxjb2RlPm1pbnRhZ2Nv dW50PC9jb2RlPiBhbmQgPGNvZGU+bWF4dGFnY291bnQ8L2NvZGU+IGNhbiBiZSB1c2VkIHRv IGhpZGUgdGFncyB0aGF0IG9ubHkgaGF2ZSBhIGZldyBhcnRpY2xlcywgb3IgdGhhdCBoYXZl IHRvbyBtYW55LiAgVGhleSBhcmUgZGVmYXVsdGVkIHRvIDxjb2RlPjA8L2NvZGU+IGFuZCA8 Y29kZT4xMDAwPC9jb2RlPiwgcmVzcGVjdGl2ZWx5LiAgRm9yIGV4YW1wbGUsIDxjb2RlPm1p bnRhZ2NvdW50PSYjMzQ7MiYjMzQ7PC9jb2RlPiB3b3VsZCBoaWRlIGFueSB0YWdzIHRoYXQg d2VyZSBvbmx5IGFzc29jaWF0ZWQgd2l0aCBhIHNpbmdsZSBhcnRpY2xlLiAgSWYgeW91IGRv IHRoaXMsIHlvdSBtYXkgd2FudCB0byBhZGQgYSBsaW5rIHRvIHRoZSBkZWZhdWx0IHRhZyBj bG91ZCwgdXN1YWxseSBmb3VuZCBhdCA8Y29kZT4vdGFnLzwvY29kZT4uPC9saT4KCQk8bGk+ SWYgeW91IHdhbnQgdG8gY29udHJvbCB0aGUgc2l6ZShzKSBvZiB0aGUgdGFncyB5b3Vyc2Vs ZiAodGhyb3VnaCA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiksIHNldCA8Y29kZT5z ZXRzaXplcz0mIzM0OzAmIzM0OzwvY29kZT4gdG8gdHVybiBvZmYgdGhlIDxjb2RlPnN0eWxl PSYjMzQ7Zm9udC1zaXplOiBYWFglJiMzNDs8L2NvZGU+IGF0dHJpYnV0ZSBnZW5lcmF0aW9u LiAgVGhhdCB3aWxsIGxlYXZlIGJlaGluZCB0aGUgZGVmYXVsdCA8c3BhbiBjbGFzcz0iY2Fw cyI+Q1NTPC9zcGFuPiBjbGFzc2VzLCB3aGljaCB5b3UgY2FuIHVzZSB0byBjb250cm9sIHRo ZSBkaXNwbGF5IG9mIHlvdXIgY2xvdWQuPC9saT4KCQk8bGk+SWYgeW91IGRvbiYjODIxNzt0 IHdhbnQgdGhlIHRhZ3MgdG8gaGF2ZSB0aGVpciA8Y29kZT5jbGFzczwvY29kZT4gYXR0cmli dXRlcyBzZXQsIHlvdSBjYW4gc2V0IDxjb2RlPnNldGNsYXNzZXM9JiMzNDswJiMzNDs8L2Nv ZGU+IHRvIHR1cm4gaXQgb2ZmLjwvbGk+CgkJPGxpPjxjb2RlPnNvcnQ8L2NvZGU+IGNhbiBi ZSB1c2VkIHRvIHNvcnQgdGhlIGNsb3VkIGJ5IHRhZyBmcmVxdWVuY3ksIHJhdGhlciB0aGFu IHRoZSBkZWZhdWx0IG9mIGFscGhhYmV0aWNhbGx5LiAgVXNlIDxjb2RlPnNvcnQ9JiMzNDtj b3VudCYjMzQ7PC9jb2RlPiB0byBzb3J0IGJ5IGZyZXF1ZW5jeSBpbiBkZXNjZW5kaW5nIG9y ZGVyLCBhbmQgPGNvZGU+c29ydD0mIzM0O2NvdW50IGFzYyYjMzQ7PC9jb2RlPiB0byBzb3J0 IGJ5IGZyZXF1ZW5jeSBpbiBhc2NlbmRpbmcgb3JkZXIuPC9saT4KCTwvdWw+CgoJPHA+Tm90 ZSB0aGF0IHlvdSBjYW4gdXNlIHRoZSBhdHRyaWJ1dGVzIHRvIG1ha2UgZWFjaCB0YWcgZG8g dGhlIHNhbWUgdGhpbmcuICA8Y29kZT50cnVfdGFnc19jbG91ZDwvY29kZT4gaXMganVzdCBh IGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBnZW5lcmF0aW5nIGEgdGFnIGNsb3VkIHVzaW5n IDxjb2RlPnRydV90YWdzX2xpc3Q8L2NvZGU+LiAgVGhlcmVmb3JlLCBpdCYjODIxNztzIHBv c3NpYmxlIHRvIGhhdmUgYSB0YWcgY2xvdWQgd2l0aCB0YWcgY291bnRzIHNob3dpbmcsIG9y IGhhdmUgYSBidWxsZXRlZCBsaXN0IHdpdGggdmFyaWFibGUgZm9udCBzaXplcywgZXRjLjwv cD4KCgk8aDQ+PGNvZGU+dHJ1X3RhZ3NfaWZfdGFnX3NlYXJjaDwvY29kZT48L2g0PgoKCTxw PlRoaXMgY29uZGl0aW9uYWwgdGFnIGNhbiBiZSB1c2VkIGFueXdoZXJlIGFuZCB3aWxsIGV2 YWx1YXRlIGl0cyBjb250ZW50cyAoZS5nLiAmIzgyMjA7cmV0dXJuIHRydWUmIzgyMjE7KSBp ZiB0aGUgY3VycmVudCB1cmwgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgYSB0YWcgc2VhcmNo IGdvaW5nIG9uLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0 aGluZyBsaWtlIGN1c3RvbWl6ZSB0aGUgdGl0bGViYXIgd2hlbiB1c2luZyB0aGUgdGFnIHNl YXJjaC48L3A+CgoJPGg0Pjxjb2RlPnRydV90YWdzX3RhZ19wYXJhbWV0ZXI8L2NvZGU+PC9o ND4KCgk8cD5UaGlzIHRhZyBjYW4gYmUgdXNlZCBhbnl3aGVyZSBhbmQgd2lsbCByZXR1cm4g dGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgdGFnIHVuZGVyIHNlYXJjaCwgZHVyaW5nIGEgdGFn IHNlYXJjaC4gIFRoaXMgaXMgZ2VuZXJhbGx5IHVzZWQgd2l0aCA8Y29kZT50cnVfdGFnc19p Zl90YWdfc2VhcmNoPC9jb2RlPi48L3A+CgoJPHA+SXQgYWNjZXB0cyBvbmUgcGFyYW1ldGVy LCA8Y29kZT5zdHJpcGh5cGhlbnM8L2NvZGU+LCB3aGljaCB3aWxsIGNvbnZlcnQgYWxsIGh5 cGhlbnMgdG8gc3BhY2VzIGluIHRhZyBuYW1lcy4gIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2Ug PGNvZGU+dHJ1X3RhZ3M8L2NvZGU+IHdpbGwgY29udmVydCBzcGFjZXMgdG8gaHlwaGVucyB3 aGVuIGl0IGRvZXMgYSB0YWcgc2VhcmNoLCBhbmQgdGhpcyB1bmRvZXMgdGhhdCBjb252ZXJz aW9uLjwvcD4KCgk8aDQ+PGNvZGU+dHJ1X3RhZ3Nfc2VhcmNoX3BhcmFtZXRlcjwvY29kZT48 L2g0PgoKCTxwPlRoaXMgdGFnIGNhbiBiZSB1c2VkIGFueXdoZXJlIGFuZCB3aWxsIHJldHVy biB0aGUgdGV4dCB0aGUgdXNlciB0eXBlZCBpbnRvIHRoZSBzdGFuZGFyZCBzZWFyY2ggYm94 LCBkdXJpbmcgYSByZWd1bGFyIHNlYXJjaC4gIFRoaXMgdGFnIGlzIG5vdCBzcGVjaWZpY2Fs bHkgcmVsYXRlZCB0byB0YWdnaW5nLCBidXQgY2FuIGJlIGhhbmR5IGZvciBjdXN0b21pemlu ZyB0aGUgdGl0bGViYXIgb24gc2VhcmNoIHJlc3VsdCBwYWdlcy48L3A+CgoJPGg0Pjxjb2Rl PnRydV90YWdzX3JlbGF0ZWRfdGFnc19mcm9tX3NlYXJjaDwvY29kZT48L2g0PgoKCTxwPlRo aXMgdGFnIGlzIHVzZWZ1bCBvbiB0aGUgcmVzdWx0cyBwYWdlIG9mIGEgdGFnIHNlYXJjaC4g IEl0IGdlbmVyYXRlcyBhIGNsb3VkIG9mIGFsbCB0aGUgdGFncyB0aGF0IGFyZSB1c2VkIGJ5 IHRoZSBhcnRpY2xlcyBmb3VuZCBpbiB0aGF0IHNlYXJjaCwgZXhjbHVkaW5nIHRoZSBzZWFy Y2ggdGFnIGl0c2VsZi4gIEZvciBleGFtcGxlLCBpZiBhIHRhZyBzZWFyY2ggZm9yICYjODIy MDtsaWZlJiM4MjIxOyBmb3VuZCB0aHJlZSBhcnRpY2xlcyB0aGF0IHdlcmUgdGFnZ2VkIGFz IGZvbGxvd3M6PC9wPgoKCTxvbD4KCQk8bGk+bW9uZXksIGhlYWx0aCwgbGlmZTwvbGk+CgkJ PGxpPm1vbmV5LCBwb2xpdGljcywgbGlmZTwvbGk+CgkJPGxpPmxpZmU8L2xpPgoJPC9vbD4K Cgk8cD4uLi48Y29kZT50cnVfdGFnc19yZWxhdGVkX3RhZ3NfZnJvbV9zZWFyY2g8L2NvZGU+ IHdvdWxkIGdlbmVyYXRlIGEgY2xvdWQgY29udGFpbmluZyAmIzgyMjA7bW9uZXkmIzgyMjE7 LCAmIzgyMjA7aGVhbHRoJiM4MjIxOywgYW5kICYjODIyMDtwb2xpdGljcyYjODIyMTsuPC9w PgoKCTxwPlRoaXMgaXMgdXNlZnVsIGZvciBnZW5lcmF0aW5nIGEgJiM4MjIwO3JlbGF0ZWQg dGFncyYjODIyMTsgY2xvdWQsIGFzIHlvdSBjYW4gc2VlIGluIHRoZSBzaWRlYmFyIG9mIHRo aXMgc2l0ZSB3aGVuIHlvdSBkbyBhIHRhZyBzZWFyY2guPC9wPgoKCTxwPjxzdHJvbmc+QmVm b3JlIHlvdSB1c2UgdGhpcyBvbiB5b3VyIHNpdGUsIGhvd2V2ZXIsPC9zdHJvbmc+IGJlIHdh cm5lZCB0aGF0IGl0JiM4MjE3O3Mgbm90IGdvb2QgZm9yIHlvdXIgc2l0ZSYjODIxNztzIHBl cmZvcm1hbmNlLCBhbmQgaXQmIzgyMTc7cyBhIGxpdHRsZSBiaXQgb2YgYSBoYWNrIChhbmQg dGhlcmVmb3JlIG1heSBicmVhayB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIFRleHRwYXR0ZXJu KS4gIEl0IGlzIGltcGxlbWVudGVkIGJ5IGNvbXBsZXRlbHkgcmVkb2luZyB0aGUgZGF0YWJh c2UgcXVlcnkgdGhhdCBmb3VuZCBhbGwgdGhlIGFydGljbGVzIGluIHRoZSBmaXJzdCBwbGFj ZSwgd2hpY2ggbWVhbnMgdGhhdCB5b3VyIHNpdGUgaXMgZXNzZW50aWFsbHkgcGVyZm9ybWlu ZyB0aGUgc2VhcmNoIHR3aWNlLiAgVGhlbiwgZGVwZW5kaW5nIG9uIHRoZSBhdHRyaWJ1dGVz IHlvdSB1c2UsIGl0IG1heSBkbyBhIHNlY29uZCBxdWVyeSB0aGF0IGlzIGVxdWl2YWxlbnQg dG8gdGhlIHF1ZXJ5IHRoYXQgZ2VuZXJhdGVzIHRoZSAmIzgyMjA7Y29tcGxldGUmIzgyMjE7 IHRhZyBjbG91ZC48L3A+CgoJPHA+WW91IG1heSB3YW50IHRvIHRlc3QgdGhpcyBjYXJlZnVs bHkgaWYgeW91IGhhdmUgYSBob3N0aW5nIHByb3ZpZGVyIHdobyBjaGFyZ2VzIHlvdSBmb3Ig PHNwYW4gY2xhc3M9ImNhcHMiPkNQVTwvc3Bhbj4gY3ljbGVzLiAgOik8L3A+CgoJPHA+SWYg eW91IGRlY2lkZSB0byB1c2UgdGhpcyB0YWcsIGJlIHN1cmUgdG8gbWluaWMgdGhlIDxjb2Rl PnNlY3Rpb248L2NvZGU+IGFuZCA8Y29kZT5saW1pdDwvY29kZT4gYXR0cmlidXRlcyBmcm9t IHlvdXIgPGNvZGU+dHJ1X3RhZ3NfY2xvdWQ8L2NvZGU+IChvciA8Y29kZT50cnVfdGFnc19s aXN0PC9jb2RlPikgY2FsbCwgYWxvbmcgd2l0aCBhbnkgPGNvZGU+dHhwOmFydGljbGU8L2Nv ZGU+IGF0dHJpYnV0ZXMgdGhhdCB5b3UgdXNlZCBpbiB5b3VyIDxjb2RlPnRydV90YWdzX2hh bmRsZXI8L2NvZGU+IGNhbGwuICBJZiB5b3UgZG9uJiM4MjE3O3QsIHRoZSBzZXQgb2YgYXJ0 aWNsZXMgZm91bmQvdXNlZCBieSB0aGlzIHRhZyB3b24mIzgyMTc7dCBtYXRjaCB0aGUgc2V0 IHRoYXQgYXJlIGRpc3BsYXllZCB0byB0aGUgdXNlci48L3A+CgoJPHA+VGhpcyB0YWcgYWNj ZXB0cyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6PC9wPgoKCTx1bD4KCQk8bGk+QWxsIHRo ZSBhdHRyaWJ1dGVzIG9mIDxjb2RlPnR4cDphcnRpY2xlPC9jb2RlPjwvbGk+CgkJPGxpPkFs bCB0aGUgYXR0cmlidXRlcyBvZiA8Y29kZT50cnVfdGFnc19jbG91ZDwvY29kZT4vPGNvZGU+ dHJ1X3RhZ3NfbGlzdDwvY29kZT4uPC9saT4KCQk8bGk+PGNvZGU+dXNlb3ZlcmFsbGNvdW50 czwvY29kZT4sIHdoaWNoIG1ha2VzIHRoZSBjbG91ZCByZW5kZXIgdXNpbmcgdGhlIGZyZXF1 ZW5jeSBkYXRhIGZvciB0aGUgc2l0ZS13aWRlIHRhZyBjbG91ZC4KCTx1bD4KCQk8bGk+Qnkg ZGVmYXVsdCwgPGNvZGU+dHJ1X3RhZ3NfcmVsYXRlZF90YWdzX2Zyb21fc2VhcmNoPC9jb2Rl PiBvdXRwdXRzIGEgY2xvdWQgd2hlcmUgdGhlIHdlaWdodHMgYXJlIGJhc2VkIG9uIHRoZSBm cmVxdWVuY3kgb2YgdGhlIHRhZ3MgPGVtPmluIHRoZSBzZWFyY2ggcmVzdWx0czwvZW0+LiAg VXNpbmcgdGhlIGV4YW1wbGUgZnJvbSBhYm92ZSwgJiM4MjIwO21vbmV5JiM4MjIxOyB3b3Vs ZCBoYXZlIGEgd2VpZ2h0IHRoYXQgd2FzIGRvdWJsZSB0aGUgd2VpZ2h0IG9mICYjODIyMDto ZWFsdGgmIzgyMjE7IGFuZCAmIzgyMjA7cG9saXRpY3MmIzgyMjE7LjwvbGk+CgkJPGxpPlRo aXMgYXR0cmlidXRlIHdpbGwgY2hhbmdlIHRoYXQgYmVoYXZpb3IsIG1ha2luZyB0aGUgdGFn IHNpemVzIG1hdGNoIHRoZSBzaXplcyB1c2VkIGluIHRoZSBzaXRlLXdpZGUgdGFnIGNsb3Vk LiAgSW4gb3RoZXIgd29yZHMsIHRoaXMgY2xvdWQgd2lsbCBsb29rIGV4YWN0bHkgbGlrZSBh IHN1YnNldCBvZiB5b3VyIHNpdGV3aWRlIGNsb3VkLjwvbGk+CgkJPGxpPkl0IHdpbGwgYWxz byBhZGQgYW4gZXh0cmEgZGF0YWJhc2UgcXVlcnkgdG8gdGhlIG1peCAobWVudGlvbmVkIGFi b3ZlKSwgc28gY29uc2lkZXIgcGVyZm9ybWFuY2UgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyBp dC48L2xpPgoJPC91bD48L2xpPgoJPC91bD4iO3M6NDoiY29kZSI7czoxMzk5ODoiCiNDb3B5 cmlnaHQgMjAwNiBOYXRoYW4gQXJ0aHVyCiNSZWxlYXNlZCB1bmRlciB0aGUgR05VIFB1Ymxp YyBMaWNlbnNlLCBzZWUgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwt bGljZW5zZS5waHAgZm9yIGRldGFpbHMKI1RoaXMgd29yayBpcyBpbnNwaXJlZCBieSByYW5f dGFncyBieSBSYW4gQXJvdXNzaSwgb3JpZ2luYWxseSBmb3VuZCBhdCBodHRwOi8vYXJvdXNz aS5jb20vYXJ0aWNsZS80NS90YWdnaW5nLXRleHRwYXR0ZXJuCgojU2VlIGh0dHA6Ly93d3cu dHJ1aXN0LmNvbS9yZWZlcmVuY2UvNDk3L3RydXRhZ3MtdXNhZ2UtaW5zdHJ1Y3Rpb25zIGZv ciBpbnN0cnVjdGlvbnMKCmZ1bmN0aW9uIHRydV90YWdzX3VzZV9jbGVhbl91cmxzKCkKewoJ cmV0dXJuIDA7IAkjRE8gTk9UIEVOQUJMRSBUSElTIHVubGVzcyB5b3UndmUgcmVhZCB0aGUg aW5zdHJ1Y3Rpb25zCn0KCmZ1bmN0aW9uIHRydV90YWdzX2FkZF90YWdzX3RvX2ZlZWRfYm9k eSgpCnsKCXJldHVybiAwOwkjdGhpcyB3aWxsIGFwcGVuZCAidGFnczogdHJlZXMsIGZsb3dl cnMsIGFuaW1hbHMsIGV0YyIgKHdpdGggbGlua3MpIHRvIHRoZSBib2R5IG9mIFJTUy9BdG9t IGZlZWRzCn0KCiNZT1UgT05MWSBORUVEIFRPIENBUkUgQUJPVVQgVEhJUyBGVU5DVElPTiBJ RiBZT1UgVVNFIENMRUFOIFVSTFMgQU5EIE5PTi1BTFBIQU5VTUVSSUMgQ0hBUkFDVEVSUyBJ TiBZT1VSIFRBR1MgKExJS0UgJysnKQojTU06IG1vcmUgaW5mbyBhdCBodHRwOi8vZm9ydW0u dGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/cGlkPTEyMzAwNyNwMTIzMDA3CmZ1bmN0 aW9uIHRydV90YWdzX2RvdWJsZV91cmxlbmNvZGUoKQp7CglyZXR1cm4gMDsJI3VzZSB0aGlz IGlmIHlvdSBhcmVuJ3QgdXNpbmcgYSBicm9rZW4gdmVyc2lvbiBvZiBhcGFjaGUsIG9yIGlm IHlvdSBvbmx5IHVzZSBsZXR0ZXJzL251bWJlcnMgaW4geW91ciB0YWcgbmFtZXMsIG9yIGlm IHlvdSdyZSBub3QgdXNpbmcgY2xlYW4gdXJscwoJI3JldHVybiB0cnVfdGFnc191c2VfY2xl YW5fdXJscygpOwkjdXNlIHRoaXMgaWYgeW91IGFyZSB1c2luZyBhIHZlcnNpb24gb2YgYXBh Y2hlIHRoYXQgaGFzIHRoaXMgcHJvYmxlbTogaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2J1 Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0zNDYwMgp9CgoKIyMjIFBSSU1BUlkgVEFHIEZVTkNU SU9OUyAjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmZ1bmN0aW9uIHRydV90 YWdzX2hhbmRsZXIoJGF0dHMpIHsKCSR0YWdfcGFyYW1ldGVyID0gdHJ1X3RhZ3NfdGFnX3Bh cmFtZXRlcigpOwoJaWYgKCFlbXB0eSgkdGFnX3BhcmFtZXRlcikpIHsKCQkkYXR0cyA9IHRy dV90YWdzX2ZpeHVwX3F1ZXJ5X2F0dHMoJGF0dHMsICR0YWdfcGFyYW1ldGVyKTsKCQlyZXR1 cm4gZG9BcnRpY2xlcygkYXR0cywgdHJ1ZSk7CQkjZnVuY3Rpb24gaW4gVFhQIGNvZGUKCX0g ZWxzZSB7CgkJcmV0dXJuIHRydV90YWdzX2Nsb3VkKCRhdHRzKTsKCX0KfQoKCmZ1bmN0aW9u IHRydV90YWdzX2Nsb3VkKCRhdHRzKSB7CglyZXR1cm4gdHJ1X3RhZ3NfbGlzdCh0cnVfdGFn c19nZXRfc3RhbmRhcmRfY2xvdWRfYXR0cygkYXR0cywgZmFsc2UsIGZhbHNlKSk7Cn0KCgpm dW5jdGlvbiB0cnVfdGFnc19saXN0KCRhdHRzKSB7CgkkYXR0cyA9IHRydV90YWdzX2dldF9z dGFuZGFyZF9jbG91ZF9hdHRzKCRhdHRzLCB0cnVlLCBmYWxzZSk7CgkkYWxsX3RhZ3MgPSB0 cnVfdGFnc19jbG91ZF9xdWVyeSgkYXR0cyk7CgoJcmV0dXJuIHRydV90YWdzX3JlbmRlcl9j bG91ZCgkYXR0cywgJGFsbF90YWdzLCAkYWxsX3RhZ3MpOwp9CgoKZnVuY3Rpb24gdHJ1X3Rh Z3NfZnJvbV9hcnRpY2xlKCRhdHRzKSB7CgkkYWxsX3RhZ3MgPSB0cnVfdGFnc19nZXRfdGFn c19mb3JfYXJ0aWNsZSgpOwoKCSRhdHRzID0gdHJ1X3RhZ3NfZ2V0X3N0YW5kYXJkX2Nsb3Vk X2F0dHMoJGF0dHMsIGZhbHNlLCB0cnVlKTsKCSRhbGxfdGFnc19mb3Jfd2VpZ2h0ID0gJGFs bF90YWdzOwoJaWYgKCRhdHRzWyd1c2VvdmVyYWxsY291bnRzJ10pIHsKCQkkYWxsX3RhZ3Nf Zm9yX3dlaWdodCA9IHRydV90YWdzX2Nsb3VkX3F1ZXJ5KCRhdHRzKTsKCX0KCglyZXR1cm4g dHJ1X3RhZ3NfcmVuZGVyX2Nsb3VkKCRhdHRzLCAkYWxsX3RhZ3MsICRhbGxfdGFnc19mb3Jf d2VpZ2h0KTsKfQoKCmZ1bmN0aW9uIHRydV90YWdzX2lmX2hhc190YWdzKCRhdHRzLCAkdGhp bmcpIHsKCWdsb2JhbCAkdGhpc2FydGljbGU7CglleHRyYWN0KCR0aGlzYXJ0aWNsZSk7CgoJ JHRhZ3NfZmllbGQgPSB0cnVfdGFnc19maWVsZCgpOwoKCSRycyA9IHNhZmVfcm93KCR0YWdz X2ZpZWxkLCAidGV4dHBhdHRlcm4iLCAiSUQ9JyR0aGlzaWQnIEFORCAkdGFnc19maWVsZCA8 PiAnJyIpOwoJcmV0dXJuIHBhcnNlKEV2YWxFbHNlKCR0aGluZywgJHJzKSk7Cn0KCgpmdW5j dGlvbiB0cnVfdGFnc19pZl90YWdfc2VhcmNoKCRhdHRzLCAkdGhpbmcpCnsKCSR0YWdfcGFy YW1ldGVyID0gdHJ1X3RhZ3NfdGFnX3BhcmFtZXRlcigpOwoJJGNvbmRpdGlvbiA9ICghZW1w dHkoJHRhZ19wYXJhbWV0ZXIpKSA/IHRydWUgOiBmYWxzZTsKCXJldHVybiBwYXJzZShFdmFs RWxzZSgkdGhpbmcsICRjb25kaXRpb24pKTsKfQoKCmZ1bmN0aW9uIHRydV90YWdzX3RhZ19w YXJhbWV0ZXIoJGF0dHMgPSBhcnJheSgpKQp7CglleHRyYWN0KGxBdHRzKGFycmF5KCdzdHJp cGh5cGhlbnMnID0+IDApLCAkYXR0cywgMCkpOwoJJHBhcm0gPSBzdHJpcF90YWdzKGdwcygn dCcpKTsKCXJldHVybiAoJHN0cmlwaHlwaGVucyA/IHN0cl9yZXBsYWNlKCctJywgJyAnLCAk cGFybSkgOiAkcGFybSk7Cn0KCgpmdW5jdGlvbiB0cnVfdGFnc19zZWFyY2hfcGFyYW1ldGVy KCkKewoJcmV0dXJuIHN0cmlwX3RhZ3MoZ3BzKCdxJykpOwp9CgoKZnVuY3Rpb24gdHJ1X3Rh Z3NfcmVsYXRlZF90YWdzX2Zyb21fc2VhcmNoKCRhdHRzKSB7CgkkdGFnX3BhcmFtZXRlciA9 IHRydV90YWdzX3RhZ19wYXJhbWV0ZXIoKTsKCWlmICghZW1wdHkoJHRhZ19wYXJhbWV0ZXIp KSB7CgkgICAgICAgICR0YWdzX2ZpZWxkID0gdHJ1X3RhZ3NfZmllbGQoKTsKCQkkYWxsX3Rh Z3MgPSBhcnJheSgpOwoKCQkkcXVlcnlfYXR0cyA9IHRydV90YWdzX2ZpeHVwX3F1ZXJ5X2F0 dHMoJGF0dHMsICR0YWdfcGFyYW1ldGVyKTsKCQkkcnMgPSB0cnVfdGFnc19yZWRvX2FydGlj bGVfc2VhcmNoKCRxdWVyeV9hdHRzKTsKCQlpZiAoJHJzKSB7CgkJCXdoaWxlICgkYSA9IG5l eHRSb3coJHJzKSkgewoJCQkJJGFydGljbGVfdGFncyA9IGV4cGxvZGUoIiwiLCB0cmltKHRy dV90YWdzX3N0cnRvbG93ZXIoJGFbJHRhZ3NfZmllbGRdKSkpOwoJCQkJJGFsbF90YWdzID0g YXJyYXlfbWVyZ2UoJGFsbF90YWdzLCB0cnVfdGFnc190cmltX3RhZ3MoJGFydGljbGVfdGFn cykpOwoJCQl9CgkJfQoKCQkkYWx0X3RhZ19wYXJhbWV0ZXIgPSBzdHJfcmVwbGFjZSgnLScs ICcgJywgJHRhZ19wYXJhbWV0ZXIpOwoJCWZvcmVhY2ggKCRhbGxfdGFncyBhcyAka2V5ID0+ ICR0YWcpIHsKCQkJaWYgKCR0YWcgPT0gJHRhZ19wYXJhbWV0ZXIgfHwgJHRhZyA9PSAkYWx0 X3RhZ19wYXJhbWV0ZXIpIHsKCQkJCXVuc2V0KCRhbGxfdGFnc1ska2V5XSk7CgkJCX0KCQl9 CgoJCSRjbG91ZF9hdHRzID0gdHJ1X3RhZ3NfZ2V0X3N0YW5kYXJkX2Nsb3VkX2F0dHMoJGF0 dHMsIGZhbHNlLCBmYWxzZSk7CgkJJGFsbF90YWdzX2Zvcl93ZWlnaHQgPSAkYWxsX3RhZ3M7 CgkJaWYgKCRjbG91ZF9hdHRzWyd1c2VvdmVyYWxsY291bnRzJ10pIHsKCQkJJGFsbF90YWdz X2Zvcl93ZWlnaHQgPSB0cnVfdGFnc19jbG91ZF9xdWVyeSgkY2xvdWRfYXR0cyk7CgkJfQoK CQlyZXR1cm4gdHJ1X3RhZ3NfcmVuZGVyX2Nsb3VkKCRjbG91ZF9hdHRzLCAkYWxsX3RhZ3Ms ICRhbGxfdGFnc19mb3Jfd2VpZ2h0KTsKCX0gZWxzZSB7CgkJcmV0dXJuICcnOwoJfQp9CgoK IyMjIENMT1VEIFNVUFBPUlQgRlVOQ1RJT05TICMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCgpmdW5jdGlvbiB0cnVfdGFnc19nZXRfc3RhbmRhcmRfY2xvdWRfYXR0cygk YXR0cywgJGlzTGlzdCwgJGlzQXJ0aWNsZSkgewoJcmV0dXJuIGxBdHRzKGFycmF5KCd3cmFw dGFnJwk9PiAoJGlzTGlzdCA/ICd1bCcgOiAnJyksCgkJCSdicmVhaycJCT0+ICgkaXNMaXN0 ID8gJ2xpJyA6ICcsICcpLAoJCQknY2xhc3MnCQk9PiAnJywKCQkJJ2JyZWFrY2xhc3MnCT0+ ICcnLAoJCQkndGFnc2VjdGlvbicJPT4gJ3RhZycsCgkJCSdzZWN0aW9uJwk9PiAnJywKCQkJ J21pbnBlcmNlbnQnCT0+ICcxMDAnLAoJCQknbWF4cGVyY2VudCcJPT4gKCRpc0xpc3QgfHwg JGlzQXJ0aWNsZSA/ICcxMDAnIDogJzIwMCcpLAoJCQknc2hvd2NvdW50cycJPT4gJycsCgkJ CSdjb3VudHdyYXBjaGFycycJPT4gJ1tdJywKCQkJJ3VzZXJlbHRhZycJPT4gKCRpc0FydGlj bGUgPyAnMScgOiAnJyksCgkJCSdnZW5lcmF0ZWxpbmtzJwk9PiAnMScsCgkJCSdtaW50YWdj b3VudCcJPT4gJzAnLAoJCQknbWF4dGFnY291bnQnCT0+ICcxMDAwJywKCQkJJ3NldHNpemVz Jwk9PiAoJGlzQXJ0aWNsZSA/ICcwJyA6ICcxJyksCgkJCSd1c2Vub2ZvbGxvdycJPT4gJycs CgkJCSdzb3J0JwkJPT4gJ2FscGhhJywKCQkJJ3VzZW92ZXJhbGxjb3VudHMnCT0+ICcnLAoJ CQknc2V0Y2xhc3NlcycJPT4gKCRpc0FydGljbGUgPyAnMCcgOiAnMScpLAoJCQkndGl0bGUn CQk9PiAnJwoJCSksJGF0dHMsIDApOwp9CgoKZnVuY3Rpb24gdHJ1X3RhZ3NfY2xvdWRfcXVl cnkoJGF0dHMpIHsKCWV4dHJhY3QoJGF0dHMpOwoKCSRzZWN0aW9uX2NsYXVzZSA9ICcnOwoJ aWYgKCRzZWN0aW9uIDw+ICcnKSB7CgkJJGtleXMgPSBzcGxpdCgnLCcsICRzZWN0aW9uKTsK CQlmb3JlYWNoICgka2V5cyBhcyAka2V5KSB7CgkJCSRrZXlwYXJ0c1tdID0gIiBTZWN0aW9u ID0gJyIgLiB0cmltKCRrZXkpIC4gIiciOwoJCX0KCQkkc2VjdGlvbl9jbGF1c2UgPSAiIEFO RCAoIiAuIGpvaW4oJyBvciAnLCAka2V5cGFydHMpIC4gIikiOwoJfQoKCSR0YWdzX2ZpZWxk ID0gdHJ1X3RhZ3NfZmllbGQoKTsKCWluY2x1ZGVfb25jZSB0eHBhdGguJy9wdWJsaXNoL3Nl YXJjaC5waHAnOwoJJGZpbHRlciA9IGZpbHRlclNlYXJjaCgpOwoJJGFsbF90YWdzID0gYXJy YXkoKTsKCSRycyA9IHNhZmVfcm93cygiJHRhZ3NfZmllbGQiLCAidGV4dHBhdHRlcm4iLCAi JHRhZ3NfZmllbGQgPD4gJyciIC4gJHNlY3Rpb25fY2xhdXNlIC4gJGZpbHRlciAuICIgYW5k IFN0YXR1cyA+PSAnNCcgYW5kIFBvc3RlZCA8IG5vdygpIik7Cglmb3JlYWNoICgkcnMgYXMg JHJvdykgewoJCSR0ZW1wX2FycmF5ID0gZXhwbG9kZSgiLCIsIHRyaW0odHJ1X3RhZ3Nfc3Ry dG9sb3dlcigkcm93WyR0YWdzX2ZpZWxkXSkpKTsKCQkkYWxsX3RhZ3MgPSBhcnJheV9tZXJn ZSgkYWxsX3RhZ3MsIHRydV90YWdzX3RyaW1fdGFncygkdGVtcF9hcnJheSkpOwoJfQoKCXJl dHVybiAkYWxsX3RhZ3M7Cn0KCgpmdW5jdGlvbiB0cnVfdGFnc19yZW5kZXJfY2xvdWQoJGF0 dHMsICRhbGxfdGFncywgJGFsbF90YWdzX2Zvcl93ZWlnaHQpIHsKCWdsb2JhbCAkc2l0ZXVy bCwgJHBhdGhfZnJvbV9yb290OwoJZXh0cmFjdCgkX1NFUlZFUik7CglleHRyYWN0KCRhdHRz KTsKCglzb3J0KCRhbGxfdGFncyk7Cglzb3J0KCRhbGxfdGFnc19mb3Jfd2VpZ2h0KTsKCgkk dGFnc193ZWlnaHQgPSBhcnJheV9jb3VudF92YWx1ZXMoJGFsbF90YWdzX2Zvcl93ZWlnaHQp OwoJJHRhZ3NfdW5pcXVlID0gYXJyYXlfdW5pcXVlKCRhbGxfdGFncyk7CgoJZm9yZWFjaCAo JHRhZ3NfdW5pcXVlIGFzICRrZXkgPT4gJHRhZykgewoJCWlmICgkdGFnc193ZWlnaHRbJHRh Z10gPCAkbWludGFnY291bnQgfHwgJHRhZ3Nfd2VpZ2h0WyR0YWddID4gJG1heHRhZ2NvdW50 KSB7CgkJCXVuc2V0KCR0YWdzX3VuaXF1ZVska2V5XSk7CgkJCXVuc2V0KCR0YWdzX3dlaWdo dFskdGFnXSk7CgkJfQoJfQoKCSRtYXggPSBtYXgoJHRhZ3Nfd2VpZ2h0KTsKCSRtaW4gPSBt aW4oJHRhZ3Nfd2VpZ2h0KTsKCSRzdGVwdmFsdWUgPSAoJG1heCA9PSAkbWluKSA/IDAgOiAo JG1heHBlcmNlbnQgLSAkbWlucGVyY2VudCkgLyAoJG1heCAtICRtaW4pOwoKCWZvcmVhY2gg KCR0YWdzX3dlaWdodCBhcyAkdGFnID0+ICR3ZWlnaHQpIHsKCQlpZiAoIWluX2FycmF5KCR0 YWcsICR0YWdzX3VuaXF1ZSkpIHsKCQkJdW5zZXQoJHRhZ3Nfd2VpZ2h0WyR0YWddKTsKCQl9 Cgl9CgoJaWYgKHN0cnBvcygkc29ydCwgJ2NvdW50JykgIT09IGZhbHNlKSB7CgkJJHNvcnRf YXNjID0gKHN0cnBvcygkc29ydCwgJ2FzYycpICE9PSBmYWxzZSk7CgkJYXJyYXlfbXVsdGlz b3J0KCR0YWdzX3dlaWdodCwgKCRzb3J0X2FzYyA/IFNPUlRfQVNDIDogU09SVF9ERVNDKSwg JHRhZ3NfdW5pcXVlKTsKCX0KCglpZiAoJGdlbmVyYXRlbGlua3MpIHsKCQlpZiAodHJ1X3Rh Z3NfdXNlX2NsZWFuX3VybHMoKSkgewoJCQkkdXJscHJlZml4ID0gJ2h0dHA6Ly8nIC4gJHNp dGV1cmwgLiAkcGF0aF9mcm9tX3Jvb3QgLiAkdGFnc2VjdGlvbiAuICcvJzsKCQkJaWYgKCR1 c2VyZWx0YWcpIHsKCQkJCWlmICgkdXNlbm9mb2xsb3cpIHsKCQkJCQkkdXJsc3VmZml4ID0g Jy8iIHJlbD0idGFnIG5vZm9sbG93JzsKCQkJCX0gZWxzZSB7CgkJCQkJJHVybHN1ZmZpeCA9 ICcvIiByZWw9InRhZyc7CgkJCQl9CgkJCX0gZWxzZSBpZiAoJHVzZW5vZm9sbG93KSB7CgkJ CQkkdXJsc3VmZml4ID0gJy8iIHJlbD0ibm9mb2xsb3cnOwoJCQl9IGVsc2UgewoJCQkJJHVy bHN1ZmZpeCA9ICcvJzsKCQkJfQoJCX0gZWxzZSB7CgkJCSR1cmxwcmVmaXggPSAnaHR0cDov LycgLiAkc2l0ZXVybCAuICRwYXRoX2Zyb21fcm9vdCAuICc/cz0nIC4gJHRhZ3NlY3Rpb24g LiAnJmFtcDt0PSc7CgkJCSR1cmxzdWZmaXggPSAnJzsKCQl9Cgl9CgoJZm9yZWFjaCAoJHRh Z3NfdW5pcXVlIGFzICR0YWcpIHsKCQkkdGFnX3dlaWdodCA9IGZsb29yKCRtaW5wZXJjZW50 ICsgKCR0YWdzX3dlaWdodFskdGFnXSAtICRtaW4pICogJHN0ZXB2YWx1ZSk7CgoJCSRzdHls ZSA9ICcnOwoJCWlmICgkc2V0c2l6ZXMpCgkJCSRzdHlsZSA9ICcgc3R5bGU9ImZvbnQtc2l6 ZTogJyAuICR0YWdfd2VpZ2h0IC4gJyU7Iic7CgoJCSR0YWdfY2xhc3MgPSAnJzsKCQlpZiAo JHNldGNsYXNzZXMpIHsKCQkJJHRhZ19jbGFzcyA9ICcgY2xhc3M9Iic7CgkJCWlmICgkdGFn c193ZWlnaHRbJHRhZ10gPT0gJG1pbikKCQkJCSR0YWdfY2xhc3MgLj0gInRhZ1NpemVTbWFs bGVzdCI7CgkJCWVsc2UgaWYgKCR0YWdzX3dlaWdodFskdGFnXSA9PSAkbWF4KQoJCQkJJHRh Z19jbGFzcyAuPSAidGFnU2l6ZUxhcmdlc3QiOwoJCQllbHNlCgkJCQkkdGFnX2NsYXNzIC49 ICJ0YWdTaXplTWVkaXVtIjsKCQkJJHRhZ19jbGFzcyAuPSAnIHRhZ1NpemUnIC4gKCR0YWdz X3dlaWdodFskdGFnXSArIDEgLSAkbWluKTsKCQkJJHRhZ19jbGFzcyAuPSAnIic7CgkJfQoK CQkvL2FkYXB0ZWQgZnJvbSBjb2RlIGJ5IGdkdHJvaWFubywgc2VlIGh0dHA6Ly9mb3J1bS50 ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9waWQ9MTAyODc1I3AxMDI4NzUKCQkkdGl0 bGVjb3VudCA9ICcnOwoJCWlmICgkdGl0bGUpCgkJCSR0aXRsZWNvdW50ID0gJyB0aXRsZT0i JyAuICR0aXRsZSAuICciJzsKCQkkZGlzcGxheWNvdW50PSAnJzsKCQkkY291bnQgPSAkY291 bnR3cmFwY2hhcnN7MH0gLiAkdGFnc193ZWlnaHRbJHRhZ10gLiAkY291bnR3cmFwY2hhcnN7 MX07CgkJaWYgKCRzaG93Y291bnRzID09ICd0aXRsZScgfHwgJHNob3djb3VudHMgPT0gJ2Jv dGgnKQoJCQkkdGl0bGVjb3VudCA9ICcgdGl0bGU9IicgLiAkdGl0bGUgLiAkY291bnQgLiAn Iic7CgkJaWYgKCRzaG93Y291bnRzICYmICRzaG93Y291bnRzICE9ICd0aXRsZScpCgkJCSRk aXNwbGF5Y291bnQgPSAnICcgLiAkY291bnQ7CgoJCWlmICgkZ2VuZXJhdGVsaW5rcykgewoJ CQkkd2hvbGV1cmwgPSAnIicgLiAkdXJscHJlZml4IC4gdHJ1X3RhZ3NfdXJsZW5jb2RlKHN0 cl9yZXBsYWNlKCcgJywgJy0nLCAkdGFnKSkgLiAkdXJsc3VmZml4IC4gJyInOwoJCQkkdGFn c19odG1sW10gPSAnPGEgaHJlZj0nIC4gJHdob2xldXJsIC4gJHRhZ19jbGFzcyAuICRzdHls ZSAuICR0aXRsZWNvdW50IC4gJz4nIC4gJHRhZyAuICc8L2E+JyAuICRkaXNwbGF5Y291bnQ7 CgkJfSBlbHNlIGlmICgkdGFnX2NsYXNzIHx8ICRzdHlsZSB8fCB0aXRsZWNvdW50KSB7CgkJ CSR0YWdzX2h0bWxbXSA9ICc8c3BhbicgLiAkdGFnX2NsYXNzIC4gJHN0eWxlIC4gJHRpdGxl Y291bnQgLiAnPicgLiAkdGFnIC4gJzwvc3Bhbj4nIC4gJGRpc3BsYXljb3VudDsKCQl9IGVs c2UgewoJCQkkdGFnc19odG1sW10gPSAkdGFnIC4gJGRpc3BsYXljb3VudDsKCQl9Cgl9Cgly ZXR1cm4gdHJ1X3RhZ3NfZG9fd3JhcCgkdGFnc19odG1sLCAkd3JhcHRhZywgJGJyZWFrLCAk Y2xhc3MsICRicmVha2NsYXNzKTsKfQoKCiMjIyBPVEhFUiBTVVBQT1JUIEZVTkNUSU9OUyAj IyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKcmVnaXN0ZXJfY2FsbGJhY2so J3RydV90YWdzX2F0b21faGFuZGxlcicsICdhdG9tX2VudHJ5Jyk7CmZ1bmN0aW9uIHRydV90 YWdzX2F0b21faGFuZGxlcigkZXZlbnQsICRzdGVwKSB7IHJldHVybiB0cnVfdGFnc19mZWVk X2hhbmRsZXIodHJ1ZSk7IH0KcmVnaXN0ZXJfY2FsbGJhY2soJ3RydV90YWdzX3Jzc19oYW5k bGVyJywgJ3Jzc19lbnRyeScpOwpmdW5jdGlvbiB0cnVfdGFnc19yc3NfaGFuZGxlcigkZXZl bnQsICRzdGVwKSB7IHJldHVybiB0cnVfdGFnc19mZWVkX2hhbmRsZXIoZmFsc2UpOyB9Cgpm dW5jdGlvbiB0cnVfdGFnc19mZWVkX2hhbmRsZXIoJGF0b20pIHsKCSR0YWdzID0gdHJ1X3Rh Z3NfZ2V0X3RhZ3NfZm9yX2FydGljbGUoKTsKCglpZiAodHJ1X3RhZ3NfYWRkX3RhZ3NfdG9f ZmVlZF9ib2R5KCkpIHsKCQkkZXh0cmFib2R5ID0gJyc7CgkJJEZPUk1fTkFNRSA9ICd0cnVf dGFnc19mZWVkX3RhZ3MnOwoJCWlmIChmZXRjaCgnZm9ybScsICd0eHBfZm9ybScsICduYW1l JywgJEZPUk1fTkFNRSkpIHsKCQkJJGZvcm0gPSB0cmltKGZldGNoX2Zvcm0oJEZPUk1fTkFN RSkpOwoJCQkkZXh0cmFib2R5ID0gdHJpbShwYXJzZSgkZm9ybSkpOwoJCX0gZWxzZSB7CgkJ CSRhdHRzID0gdHJ1X3RhZ3NfZ2V0X3N0YW5kYXJkX2Nsb3VkX2F0dHMoYXJyYXkoKSwgZmFs c2UsIHRydWUpOwoJCQkkZXh0cmFib2R5ID0gJzxwPnRhZ3M6ICcgLiB0cnVfdGFnc19yZW5k ZXJfY2xvdWQoJGF0dHMsICR0YWdzLCAkdGFncykgLiAnPC9wPic7CgkJfQoJCWdsb2JhbCAk dGhpc2FydGljbGU7CgkJaWYgKHRyaW0oJHRoaXNhcnRpY2xlWydleGNlcnB0J10pKSB7CgkJ CSR0aGlzYXJ0aWNsZVsnZXhjZXJwdCddID0gdHJpbSgkdGhpc2FydGljbGVbJ2V4Y2VycHQn XSkubi4kZXh0cmFib2R5Lm47CgkJfQoJCSR0aGlzYXJ0aWNsZVsnYm9keSddID0gdHJpbSgk dGhpc2FydGljbGVbJ2JvZHknXSkubi4kZXh0cmFib2R5Lm47Cgl9CgoJJG91dHB1dCA9IGFy cmF5KCk7Cglmb3JlYWNoICgkdGFncyBhcyAkdGFnKSB7CgkJaWYgKCRhdG9tKSB7CgkJCSRv dXRwdXRbXSA9ICc8Y2F0ZWdvcnkgdGVybT0iJyAuIGh0bWxzcGVjaWFsY2hhcnMoJHRhZykg LiAnIiAvPic7CgkJfSBlbHNlIHsKCQkJJG91dHB1dFtdID0gJzxjYXRlZ29yeT4nIC4gaHRt bHNwZWNpYWxjaGFycygkdGFnKSAuICc8L2NhdGVnb3J5Pic7CgkJfQoJfQoJcmV0dXJuIG4u am9pbihuLCAkb3V0cHV0KS5uOwp9CgoKZnVuY3Rpb24gdHJ1X3RhZ3NfZ2V0X3RhZ3NfZm9y X2FydGljbGUoKSB7CglnbG9iYWwgJHRoaXNhcnRpY2xlOwoJZXh0cmFjdCgkdGhpc2FydGlj bGUpOwoKCSR0YWdzX2ZpZWxkID0gdHJ1X3RhZ3NfZmllbGQoKTsKCSRycyA9IHNhZmVfcm93 KCR0YWdzX2ZpZWxkLCAidGV4dHBhdHRlcm4iLCAiSUQ9JyR0aGlzaWQnIEFORCAkdGFnc19m aWVsZCA8PiAnJyIpOwoJJGFsbF90YWdzID0gZXhwbG9kZSgiLCIsIHRyaW0odHJ1X3RhZ3Nf c3RydG9sb3dlcigkcnNbJHRhZ3NfZmllbGRdKSkpOwoKCXJldHVybiB0cnVfdGFnc190cmlt X3RhZ3MoJGFsbF90YWdzKTsKfQoKCmZ1bmN0aW9uIHRydV90YWdzX2RvX3dyYXAoJGxpc3Qs ICR3cmFwdGFnLCAkYnJlYWssICRjbGFzcywgJGJyZWFrY2xhc3MpIHsKCWlmICghJHdyYXB0 YWcgJiYgIXByZWdfbWF0Y2goJy9eXHcrJC8nLCAkYnJlYWspKSB7CgkJcmV0dXJuIGpvaW4o JGJyZWFrLm4sICRsaXN0KTsKCX0gZWxzZSB7CgkJcmV0dXJuIGRvV3JhcCgkbGlzdCwgJHdy YXB0YWcsICRicmVhaywgJGNsYXNzLCAkYnJlYWtjbGFzcyk7Cgl9Cn0KCgpmdW5jdGlvbiB0 cnVfdGFnc190cmltX3RhZ3MoJHRhZ19hcnJheSkgewoJJHRyaW1tZWQgPSBhcnJheSgpOwoJ Zm9yZWFjaCAoJHRhZ19hcnJheSBhcyAkdGFnKSB7CgkJaWYgKCIiICE9IHRyaW0oJHRhZykp IHsKCQkJJHRyaW1tZWRbXSA9IHRyaW0oJHRhZyk7CgkJfQoJfQoJcmV0dXJuICR0cmltbWVk Owp9CgoKZnVuY3Rpb24gdHJ1X3RhZ3NfZmllbGQoKSB7CglyZXR1cm4gJ0tleXdvcmRzJzsK fQoKCmZ1bmN0aW9uIHRydV90YWdzX2ZpeHVwX3F1ZXJ5X2F0dHMoJGF0dHMsICR0YWdfcGFy YW1ldGVyKSB7Cgkka2V5d29yZHMgPSBleHBsb2RlKCcsJywgJHRhZ19wYXJhbWV0ZXIpOwoJ Zm9yZWFjaCAoJGtleXdvcmRzIGFzICRrZXl3b3JkKSB7CgkJaWYgKHN0cnBvcygka2V5d29y ZCwgJy0nKSAhPT0gZmFsc2UpIHsKCQkJJGtleXdvcmRzW10gPSBzdHJfcmVwbGFjZSgnLScs ICcgJywgJGtleXdvcmQpOwoJCX0KCX0KCSRhdHRzWydrZXl3b3JkcyddID0gaW1wbG9kZSgn LCcsICRrZXl3b3Jkcyk7CgoJaWYgKCRhdHRzWydzZWN0aW9uJ10gJiYgc3RycG9zKCRhdHRz WydzZWN0aW9uJ10sICcsJykgIT09IGZhbHNlKQoJCSRhdHRzWydzZWN0aW9uJ10gPSAnJzsK CglpZiAoaXNfY2FsbGFibGUoImFycmF5X2tleV9leGlzdHMiKSkgewoJCWlmICghYXJyYXlf a2V5X2V4aXN0cygnbGltaXQnLCAkYXR0cykpCgkJCSRhdHRzWydsaW1pdCddID0gJzEwMDAn OwoJfSBlbHNlIHsKCQlpZiAoISRhdHRzWydsaW1pdCddKQoJCQkkYXR0c1snbGltaXQnXSA9 ICcxMDAwJzsKCX0KCSRhdHRzWydhbGxvd292ZXJyaWRlJ10gPSB0cnVlOwoKCXJldHVybiAk YXR0czsKfQoKCmZ1bmN0aW9uIHRydV90YWdzX3N0cnRvbG93ZXIoJHN0cikgewoJaWYgKGlz X2NhbGxhYmxlKCJtYl9zdHJ0b2xvd2VyIikpIHsKCS8vaWYgKHZlcnNpb25fY29tcGFyZShw aHB2ZXJzaW9uKCksICI0LjMuMCIsICI+PSIpKSB7CgkJcmV0dXJuIG1iX3N0cnRvbG93ZXIo JHN0ciwgIlVURi04Iik7Cgl9IGVsc2UgewoJCXJldHVybiBzdHJ0b2xvd2VyKCRzdHIpOwoJ fQp9CgoKIyB0aGlzIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiBhcGFjaGUgYW5kIG1vZF9yZXdy aXRlIHRoYXQgc2hvd3MgdXAgaWYgeW91IHR1cm4gb24gY2xlYW4gdXJscwpmdW5jdGlvbiB0 cnVfdGFnc191cmxlbmNvZGUoJHN0cikgewoJaWYgKHRydV90YWdzX2RvdWJsZV91cmxlbmNv ZGUoKSkgewoJCXJldHVybiB1cmxlbmNvZGUodXJsZW5jb2RlKCRzdHIpKTsKCX0gZWxzZSB7 CgkJcmV0dXJuIHVybGVuY29kZSgkc3RyKTsKCX0KfQoKCiMjIyBCQVNUQVJEIEZVTkNUSU9O UyBUSEFUIFNIT1VMRE4nVCBIQVZFIFRPIEVYSVNUICMjIwojIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCgpmdW5jdGlvbiB0cnVfdGFn c19yZWRvX2FydGljbGVfc2VhcmNoKCRhdHRzKSB7CgkkdGhlQXR0cyA9IGxBdHRzKGFycmF5 KCdsaW1pdCcgICAgID0+IDEwMDAsCgkJCQknY2F0ZWdvcnknICA9PiAnJywKCQkJCSdzZWN0 aW9uJyAgID0+ICcnLAoJCQkJJ2V4Y2VycHRlZCcgPT4gJycsCgkJCQknYXV0aG9yJyAgICA9 PiAnJywKCQkJCSdzb3J0YnknICAgID0+ICdQb3N0ZWQnLAoJCQkJJ3NvcnRkaXInICAgPT4g J2Rlc2MnLAoJCQkJJ21vbnRoJyAgICAgPT4gJycsCgkJCQkna2V5d29yZHMnICA9PiAnJywK CQkJCSdmcm9udHBhZ2UnID0+ICcnLAoJCQkJJ2lkJyAgICAgICAgPT4gJycsCgkJCQkndGlt ZScgICAgICA9PiAncGFzdCcsCgkJCQknc3RhdHVzJyAgICA9PiAnNCcsCgkJCQknb2Zmc2V0 JyAgICA9PiAwCgkJCSksJGF0dHMsIDApOwoJZXh0cmFjdCgkdGhlQXR0cyk7CgoJLy9CdWls ZGluZyBxdWVyeSBwYXJ0cwoJJGZyb250cGFnZSA9ICgkZnJvbnRwYWdlKSA/IGZpbHRlckZy b250UGFnZSgpIDogJyc7CgkkY2F0ZWdvcnkgID0gKCEkY2F0ZWdvcnkpICA/ICcnIDogIiBh bmQgKChDYXRlZ29yeTE9JyIuZG9zbGFzaCgkY2F0ZWdvcnkpLiInKSBvciAoQ2F0ZWdvcnky PSciLmRvU2xhc2goJGNhdGVnb3J5KS4iJykpICI7Cgkkc2VjdGlvbiAgID0gKCEkc2VjdGlv bikgICA/ICcnIDogIiBhbmQgU2VjdGlvbiA9ICciLmRvc2xhc2goJHNlY3Rpb24pLiInIjsK CSRleGNlcnB0ZWQgPSAoJGV4Y2VycHRlZD09J3knKSAgPyAiIGFuZCBFeGNlcnB0ICE9Jyci IDogJyc7CgkkYXV0aG9yICAgID0gKCEkYXV0aG9yKSAgICA/ICcnIDogIiBhbmQgQXV0aG9y SUQgPSAnIi5kb3NsYXNoKCRhdXRob3IpLiInIjsKCSRtb250aCAgICAgPSAoISRtb250aCkg ICAgID8gJycgOiAiIGFuZCBQb3N0ZWQgbGlrZSAnIi5kb1NsYXNoKCRtb250aCkuIiUnIjsK CSRpZCAgICAgICAgPSAoISRpZCkgICAgICAgID8gJycgOiAiIGFuZCBJRCA9ICciLmludHZh bCgkaWQpLiInIjsKCXN3aXRjaCAoJHRpbWUpIHsKCQljYXNlICdhbnknOgoJCQkkdGltZSA9 ICIiOyBicmVhazsKCQljYXNlICdmdXR1cmUnOgoJCQkkdGltZSA9ICIgYW5kIFBvc3RlZCA+ IG5vdygpIjsgYnJlYWs7CgkJZGVmYXVsdDoKCQkJJHRpbWUgPSAiIGFuZCBQb3N0ZWQgPCBu b3coKSI7Cgl9CglpZiAoIWlzX251bWVyaWMoJHN0YXR1cykpCgkJJHN0YXR1cyA9IGdldFN0 YXR1c051bSgkc3RhdHVzKTsKCgkkY3VzdG9tID0gJyc7CgkvLyB0cnlpbmcgY3VzdG9tIGZp ZWxkcyBoZXJlCgkkY3VzdG9tRmllbGRzID0gZ2V0Q3VzdG9tRmllbGRzKCk7CglpZiAoJGN1 c3RvbUZpZWxkcykgewoJCWZvcmVhY2goJGN1c3RvbUZpZWxkcyBhcyAkY0ZpZWxkKSB7CgkJ CWlmIChpc3NldCgkYXR0c1skY0ZpZWxkXSkpCgkJCQkkY3VzdG9tUGFpcnNbJGNGaWVsZF0g PSAkYXR0c1skY0ZpZWxkXTsKCQl9CgkJaWYoIWVtcHR5KCRjdXN0b21QYWlycykpCgkJCSRj dXN0b20gPSAgYnVpbGRDdXN0b21TcWwoJGN1c3RvbUZpZWxkcywkY3VzdG9tUGFpcnMpOwoJ CWVsc2UKCQkJJGN1c3RvbSA9ICcnOwoJfQoKCS8vQWxsb3cga2V5d29yZHMgZm9yIG5vLWN1 c3RvbSBhcnRpY2xlcy4gVGhhdCB0YWdnaW5nIG1vZGUsIHlvdSBrbm93CglpZiAoJGtleXdv cmRzKSB7CgkJJGtleXMgPSBzcGxpdCgnLCcsJGtleXdvcmRzKTsKCQlmb3JlYWNoICgka2V5 cyBhcyAka2V5KSB7CgkJCSRrZXlwYXJ0c1tdID0gIiBLZXl3b3JkcyBsaWtlICclIi5kb1Ns YXNoKHRyaW0oJGtleSkpLiIlJyI7CgkJfQoJCSRrZXl3b3JkcyA9ICIgYW5kICgiIC4gam9p bignIG9yICcsJGtleXBhcnRzKSAuICIpIjsKCX0KCglpZiAoJGlkKQoJCSRzdGF0dXNxID0g IiBhbmQgU3RhdHVzID49ICc0JyI7CgllbHNlCgkJJHN0YXR1c3EgPSAiIGFuZCBTdGF0dXM9 JyIuZG9TbGFzaCgkc3RhdHVzKS4iJyI7CgoJJHdoZXJlID0gIjEiIC4gJHN0YXR1c3EuICR0 aW1lLgoJCSRpZCAuICRjYXRlZ29yeSAuICRzZWN0aW9uIC4gJGV4Y2VycHRlZCAuICRtb250 aCAuICRhdXRob3IgLiAka2V5d29yZHMgLiAkY3VzdG9tIC4gJGZyb250cGFnZTsKCgkJJHBn b2Zmc2V0ID0gJG9mZnNldCAuICcsICc7CgoJJHJzID0gc2FmZV9yb3dzX3N0YXJ0KCIqLCB1 bml4X3RpbWVzdGFtcChQb3N0ZWQpIGFzIHVQb3N0ZWQiLCAndGV4dHBhdHRlcm4nLAoJCSR3 aGVyZS4gJyBvcmRlciBieSAnIC4gZG9zbGFzaCgkc29ydGJ5KSAuICcgJyAuIGRvU2xhc2go JHNvcnRkaXIpIC4gJyBsaW1pdCAnIC4gZG9TbGFzaCgkbGltaXQpKTsKCglyZXR1cm4gJHJz Owp9CgoKIjtzOjg6ImhlbHBfcmF3IjtzOjIxNDM1OiJUbyBsZWFybiBtb3JlIGFib3V0IHRy dV90YWdzLCBjaGVjayBvdXQgdGhlICJpbnRyb2R1Y3RvcnkgYXJ0aWNsZSI6L2Jsb2cvNDkz L3RydXRhZ3MtYS10YWdnaW5nLXBsdWdpbi1mb3ItdGV4dHBhdHRlcm4gYW5kICJmZWF0dXJl IGxpc3QiOmh0dHA6Ly93d3cudHJ1aXN0LmNvbS9yZWZlcmVuY2UvNDk1L3RydXRhZ3MtZmVh dHVyZS1saXN0LgoKaDMuIENvbmZpZ3VyYXRpb24KCmg0LiBTdGVwIDE6IENyZWF0ZSBhIG5l dyBzZWN0aW9uCgp0cnVfdGFncyBkZXBlbmRzIG9uIHRoZSBleGlzdGVuY2Ugb2YgYSBzcGVj aWFsIFRleHRwYXR0ZXJuIHNlY3Rpb24gbmFtZWQgInRhZywiIGJ5IGRlZmF1bHRbMV0uICBD cmVhdGUgdGhhdCBzZWN0aW9uLCB1c2luZyB3aGF0ZXZlciBzZXR0aW5ncyB5b3UgbGlrZS4g IChZb3Ugd29uJ3QgYmUgcHVibGlzaGluZyBhcnRpY2xlcyB0byB0aGF0IHNlY3Rpb24uKSAg SGVyZSdzIHdoYXQgSSB1c2VbMl06Cgo8aW1nIHNyYz0iaHR0cDovL3d3dy50cnVpc3QuY29t L2ltYWdlcy8yLnBuZyIgaGVpZ2h0PSIyODAiIHdpZHRoPSIzOTgiIGFsdD0idGFnIHNlY3Rp b24gY29uZmlndXJhdGlvbiIgY2xhc3M9ImRpYWdyYW0iIC8+CgpmbjEoZm9vdG5vdGUpLiBZ b3UgY2FuIHVzZSBhIGRpZmZlcmVudCBuYW1lLCBidXQgeW91IGhhdmUgdG8gdXNlIGEgc3Bl Y2lhbCBhdHRyaWJ1dGUgaW4gc29tZSBvZiB0aGUgcGx1Z2luIGNhbGxzIHRvIG1ha2UgIGV2 ZXJ5dGhpbmcgd29yayBjb3JyZWN0bHkuICBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCgpmbjIo Zm9vdG5vdGUpLiBOb3RlIHRoYXQgSSB1c2UgdGhlICdkZWZhdWx0JyBwYWdlIC0gdGhhdCBj aG9pY2UgbWF5IG5vdCBiZSByaWdodCBmb3IgeW91LiAgVGhpcyBzZWN0aW9uIHdpbGwgYmUg c2hvd24gd2hlbmV2ZXIgeW91IGNsaWNrIG9uIGEgdGFnLCB0byBkaXNwbGF5IHRoZSB0YWcg c2VhcmNoIHJlc3VsdHMuICBZb3UnbGwgd2FudCBhIHBhZ2UgdGhhdCBoYXMgdGhlIGNvcnJl Y3QgbGF5b3V0L2hlYWRlcnMvZm9vdGVycy4gIEkgdXNlIG15IGRlZmF1bHQgcGFnZSwgd2l0 aCA8Y29kZT48dHhwOmlmX3NlY3Rpb24gbmFtZT0idGFnIj48L2NvZGU+IHRvIGNoYW5nZSB0 aGUgcGFnZSBkaXNwbGF5IGluIHRoaXMgY2FzZS4KCmg0LiBTdGVwIDI6IENhbGwgdGhlIHBs dWdpbiBmcm9tIHRoYXQgc2VjdGlvbgoKVG8gbWFrZSB0YWcgc2VhcmNoaW5nIGFuZCB0aGUg ZGVmYXVsdCB0YWcgY2xvdWQgd29yaywgeW91J2xsIG5lZWQgdG8gY2FsbCA8Y29kZT48dHhw OnRydV90YWdzX2hhbmRsZXIgLz48L2NvZGU+IGZyb20gdGhlIHBhZ2UgeW91IGNob3NlIGlu IFN0ZXAgMS4gIEkgcmVwbGFjZWQgdGhlIGRlZmF1bHQgPGNvZGU+PHR4cDphcnRpY2xlIC8+ PC9jb2RlPiB3aXRoIHNvbWV0aGluZyBsaWtlIHRoaXM6Cgo8cHJlPjx0eHA6aWZfc2VjdGlv biBuYW1lPSJ0YWciPgogIDx0eHA6dHJ1X3RhZ3NfaGFuZGxlciAvPgo8dHhwOmVsc2UgLz4K ICA8dHhwOmFydGljbGUgLz4KPC90eHA6aWZfc2VjdGlvbj48L3ByZT4KCmg0LiBTdGVwIDM6 IENvbmZpZ3VyZSB5b3VyIGFydGljbGUgZm9ybSB0byBkaXNwbGF5IHRhZ3MKClRvIG1ha2Ug ZWFjaCBhcnRpY2xlIHNob3cgYSBsaXN0IG9mIGFsbCB0aGUgdGFncyBhc3NvY2lhdGVkIHdp dGggaXQsIHB1dCBzb21ldGluZyBsaWtlIHRoaXMgaW4geW91ciBhcnRpY2xlIGZvcm06Cgo8 cHJlPjx0eHA6dHJ1X3RhZ3NfaWZfaGFzX3RhZ3M+CiAgdGFnczogPHR4cDp0cnVfdGFnc19m cm9tX2FydGljbGUgLz4KPC90eHA6dHJ1X3RhZ3NfaWZfaGFzX3RhZ3M+PC9wcmU+CgpoNC4g U3RlcCA0OiBEcm9wIGEgY3VzdG9tIHRhZyBjbG91ZCBzb21ld2hlcmUsIGlmIHlvdSB3YW50 CgpJZiB5b3UnZCBsaWtlIHRvIHNob3cgYSB0YWcgY2xvdWQgc29tZXdoZXJlIG9uIHlvdXIg c2l0ZSAob3RoZXIgdGhhbiA8Y29kZT4vdGFnLzwvY29kZT4pLCBwdXQgc29tZXRoaW5nIGxp a2UgdGhpcyBpbiB0aGF0IHBhZ2U6Cgo8cHJlPjx0eHA6dHJ1X3RhZ3NfY2xvdWQgLz48L3By ZT4KClNlZSBiZWxvdyBmb3IgbG90cyBvZiBmb3JtYXR0aW5nIG9wdGlvbnMsIGluY2x1ZGlu ZyB0aGUgYWJpbGl0eSB0byBvdXRwdXQgYSBzaW1wbGUgbGlzdCBpbnN0ZWFkIG9mIGEgY2xv dWQgKHVzaW5nIDxjb2RlPnRydV90YWdzX2xpc3Q8L2NvZGU+KS4KCmg0LiBTdGVwIDU6IFN0 YXJ0IHRhZ2dpbmchCgpXaGVuZXZlciB5b3Ugd3JpdGUgYW4gYXJ0aWNsZSwgcHV0IHlvdXIg dGFncyBpbnRvIHRoZSBLZXl3b3JkcyBmaWVsZCBpbiBUZXh0cGF0dGVybi4gIChUaGUgS2V5 d29yZHMgZmllbGQgaGlkZXMgYmVoaW5kIHRoZSAiQWR2YW5jZWQgT3B0aW9ucyIgbGluayBv biB0aGUgbGVmdCBzaWRlIG9mIHRoZSAid3JpdGUiIHBhZ2UuKSAgVGFncyBzaG91bGQgYmUg c2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIGNhbiBoYXZlIHNwYWNlc1sxXS4KCllvdSdsbCBw cm9iYWJseSB3YW50IHRvIGluc3RhbGwgUm9iIFNhYmxlJ3MgInJzc19hZG1pbl9zaG93X2Fk dl9vcHRzIjpodHRwOi8vd3d3LndpbHNoaXJlb25lLmNvbS90ZXh0cGF0dGVybi1wbHVnaW5z L3Jzcy1hZG1pbi1zaG93LWFkdi1vcHRzLCB3aGljaCB3aWxsIGF1dG9tYXRpY2FsbHkgZXhw YW5kIHRoZSAiQWR2YW5jZWQgT3B0aW9ucyIgc2VjdGlvbiBvZiB0aGUgIndyaXRlIiBwYWdl LCB3aGVuIHlvdSBhcmUgd3JpdGluZyBhcnRpY2xlcy4gIFRoYXQgZ2l2ZXMgeW91IGVhc3kg YWNjZXNzIHRvIHRoZSBLZXl3b3JkcyBmaWVsZC4KCmZuMShmb290bm90ZSkuIFRhZ3Mgd2l0 aCBzcGFjZXMgd2lsbCBnZW5lcmF0ZSB1cmxzIHdpdGggZGFzaGVzLCB3aGljaCB3aWxsIHdv cmsgY29ycmVjdGx5LiAgVGFncyB3aXRoIGRhc2hlcyB3aWxsIGFsc28gd29yayBjb3JyZWN0 bHkuCgpoNC4gU3RlcCA2OiBGYW5jeSBkaXNwbGF5IGN1c3RvbWl6YXRpb24gKE9wdGlvbmFs KQoKWW91IGNhbiB1c2UgPGNvZGU+dHJ1X3RhZ3NfaWZfdGFnX3NlYXJjaDwvY29kZT4sIDxj b2RlPnRydV90YWdzX3RhZ19wYXJhbWV0ZXI8L2NvZGU+LCBhbmQgPGNvZGU+dHJ1X3RhZ3Nf c2VhcmNoX3BhcmFtZXRlcjwvY29kZT4gdG8gY3VzdG9taXplIHlvdXIgcGFnZSB0aXRsZXMg b3IgdGFnIHNlYXJjaCByZXN1bHRzLiAgU2VlIGJlbG93IGZvciBkZXRhaWxzLiAgRm9yIGFu IGV4YW1wbGUsIGRvIGEgdGFnIHNlYXJjaCBvbiB0aGlzIHNpdGUgYW5kIGxvb2sgYXQgdGhl IHRpdGxlYmFyLgoKSWYgeW91IGRvbid0IGxpa2UgdGhlIGZhY3QgdGhhdCBhbGwgdGFncyBh cmUgc2hvd24gaW4gbG93ZXJjYXNlIHlvdSBjYW4gdXNlIDxjb2RlPi50ZXh0LXRyYW5zZm9y bTogY2FwaXRhbGl6ZS48L2NvZGU+IGluIHlvdXIgQ1NTIHN0eWxlc2hlZXQsIGluIGNvbmp1 bmN0aW9uIHdpdGggYW4gYXBwcm9wcmlhdGUgPGNvZGU+Y2xhc3M8L2NvZGU+IGF0dHJpYnV0 ZSBvbiB5b3VyIDxjb2RlPnRydV90YWdzX2Nsb3VkPC9jb2RlPiBjYWxsLCB0byBjYXBpdGFs aXplIHRoZSB0YWdzLgoKaDQuIFN0ZXAgNzogVHVybiBvbiBjbGVhbiB1cmxzIChPcHRpb25h bCkKCkNsZWFuIHVybHMgYXJlIG5vdyBwb3NzaWJsZSB3aXRoIHRydV90YWdzLCBwcm92aWRl ZCB0aGF0IHlvdSBhcmUgd2lsbGluZyB0byBtb2RpZnkgVGV4dHBhdHRlcm4ncyByZXdyaXRl IHJ1bGVzIChpbiB0aGUgLmh0YWNjZXNzIGZpbGUpLiAgQnV0IGJlIHdhcm5lZCAtIHJld3Jp dGUgcnVsZXMgYXJlIGNvbXBsZXguICBJIG1ha2Ugbm8gZ3VhcmFudGVlcyB0aGF0IHRoaXMg d29uJ3QgZWF0IHlvdXIgY2hpbGRyZW4uICAqWW91IGRvbid0IGhhdmUgdG8gZG8gdGhpcyog YnV0IGEgbG90IG9mIHBlb3BsZSB3YW50IGl0LiAgVGhpcyBzaXRlIHVzZXMgaXQsIGlmIHRo YXQgaGVscHMuCgpUaGVzZSBpbnN0cnVjdGlvbnMgYXJlIGZvciBhcGFjaGUgMi4wIG9uIHVu aXgvbGludXggd2l0aCB0ZXh0cGF0dGVybiBpbnN0YWxsZWQgYXQgdGhlIHJvb3Qgb2YgeW91 ciBzaXRlLiAgU2VlICJ0aGlzIGZvcnVtIHBvc3QiOmh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVy bi5jb20vdmlld3RvcGljLnBocD9waWQ9MTAzODIzI3AxMDM4MjMgZm9yIGRldGFpbHMgb24g Y2xlYW4gdXJscyB3aXRoIGxpZ2h0dHBkLiAgQWxsIG90aGVyIHBsYXRmb3Jtcy9zZXJ2ZXJz L2NvbmZpZ3VyYXRpb25zIGFyZSB1bnRlc3RlZCAoYnkgbWUpLgoKSGVyZSdzIHdoYXQgdG8g ZG86CgojIEFkZCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIFRleHRwYXR0ZXJuJ3MgLmh0YWNj ZXNzIGZpbGUgKGZvdW5kIGluIHRoZSByb290IG9mIHlvdXIgVGV4dHBhdHRlcm4gZGlyZWN0 b3J5KSwgYWRqdXN0aW5nIHRoZW0gaWYgbmVjZXNzYXJ5LiAgVGhlc2UgbGluZXMgc2hvdWxk IGJlICphZnRlciogdGhlCgo8ZGl2IGNsYXNzPSJwcmUiPgoKPG5vdGV4dGlsZT5SZXdyaXRl UnVsZSBeKC4rKSAtIFtQVCxMXTwvbm90ZXh0aWxlPgoKPC9kaXY+CgphbmQgKmJlZm9yZSog dGhlCgo8ZGl2IGNsYXNzPSJwcmUiPgoKPG5vdGV4dGlsZT5SZXdyaXRlUnVsZSBeKC4qKSBp bmRleC5waHA8L25vdGV4dGlsZT4KCjwvZGl2PgoKSGVyZSdzIHRoZSBiaXQgdG8gaW5zZXJ0 ICh3aGljaCB5b3UgbWF5IG5lZWQgdG8gY3VzdG9taXplIGZvciB5b3VyIHNpdGUpOgoKPGRp diBjbGFzcz0icHJlIj4KCjxub3RleHRpbGU+I1RoaXMgcGF0aCBzaG91bGQgbWF0Y2ggdGhl IHJlbGF0aXZlIHVybCBvZiB5b3VyIFRleHRwYXR0ZXJuIGluc3RhbGw8L25vdGV4dGlsZT4K PG5vdGV4dGlsZT5SZXdyaXRlQmFzZSAvPC9ub3RleHRpbGU+Cjxub3RleHRpbGU+I0lmIHlv dSdyZSB1c2luZyBhIHNlY3Rpb24gb3RoZXIgdGhhbiAidGFnIiwgY2hhbmdlIHRoZSBmb2xs b3dpbmcgdHdvIHJ1bGVzIGFjY29yZGluZ2x5PC9ub3RleHRpbGU+Cjxub3RleHRpbGU+UmV3 cml0ZVJ1bGUgXnRhZy8oW14vXSspJCB0YWcvJDEvIFtSLExdPC9ub3RleHRpbGU+Cjxub3Rl eHRpbGU+UmV3cml0ZVJ1bGUgXnRhZy8oLispLyQgP3M9dGFnJmFtcDt0PSQxPC9ub3RleHRp bGU+Cgo8L2Rpdj4KCiMgKkNoZWNrIHRvIG1ha2Ugc3VyZSB5b3VyIHNpdGUgaXMgc3RpbGwg d29ya2luZy4qCiMgRWRpdCB0aGUgdHJ1X3RhZ3MgcGx1Z2luIChhZG1pbiAtPiBwbHVnaW5z LCBjbGljayAnRWRpdCcpIGFuZCBjaGFuZ2UgdGhlIDxjb2RlPnRydV90YWdzX3VzZV9jbGVh bl91cmxzKCk8L2NvZGU+IGZ1bmN0aW9uIHRvIHJldHVybiA8Y29kZT4xPC9jb2RlPi4gIChJ dCdzIHRoZSBmaXJzdCBmdW5jdGlvbi4pCiMjIElmIHlvdSdyZSBwbGFubmluZyBvbiB1c2lu ZyBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgKGxpa2UgJysnKSBpbiB5b3VyIHRhZyBu YW1lcywgYW5kIHlvdSdyZSB1c2luZyBhcGFjaGUgMiwgdGhlbiB5b3UgYWxzbyBuZWVkIHRv IG1ha2UgPGNvZGU+dHJ1X3RhZ3NfZG91YmxlX3VybGVuY29kZSgpPC9jb2RlPiByZXR1cm4g PGNvZGU+MTwvY29kZT4uICBUaGlzIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiBhcGFjaGUgYW5k IG1vZF9yZXdyaXRlLgojIENsZWFuIHVybHMgc2hvdWxkIGJlIHdvcmtpbmcgbm93LiAgVHJ5 IGNsaWNraW5nIGEgdGFnIGxpbmsgdG8gc2VlIHdoYXQgdXJsIGl0IHJlZmVyZW5jZXMuCiMg QnkgZGVmYXVsdCwgYXJ0aWNsZSB0YWdzIHdpbGwgc2V0IHRoZSA8Y29kZT5yZWw9InRhZyI8 L2NvZGU+IGF0dHJpYnV0ZSwgYW5kIHRoZSB0YWcgY2xvdWQgKG9yIGxpc3QpIHdvbid0LiAg VGhpcyBjYW4gYmUgY29udHJvbGxlZCB3aXRoIHRoZSA8Y29kZT51c2VyZWx0YWc8L2NvZGU+ IGF0dHJpYnV0ZTsgc2VlIGJlbG93IGZvciBkZXRhaWxzLgoKaDQuIFN0ZXAgODogU2hvdyBh ICJyZWxhdGVkIHRhZ3MiIGNsb3VkIChPcHRpb25hbCkKCnYxLjggKGFuZCBiZXlvbmQpIG9m IHRydV90YWdzIGhhcyBhIGZlYXR1cmUgdGhhdCBsZXRzIHlvdSBzaG93IGEgY2xvdWQgb2Yg dGFncyB0aGF0IGFyZSByZWxhdGVkIHRvIHRoZSB0YWdzIHVzZWQgaW4gYXJ0aWNsZXMgdGhh dCBhcmUgZm91bmQgYnkgYSB0YWcgc2VhcmNoLgoKR290IHRoYXQ/CgpUbyBzZWUgYW4gZXhh bXBsZSwgZG8gYSB0YWcgc2VhcmNoIG9uIHRoaXMgc2l0ZSAoY2xpY2sgYSBsaW5rIGluIHRo ZSB0YWcgY2xvdWQpLiAgV2hlbiB0aGUgc2VhcmNoIHJlc3VsdHMgY29tZSB1cCB0aGUgc2lk ZWJhciB3aWxsIGhhdmUgYSBuZXcgc2VjdGlvbiBpbiBpdCBjYWxsZWQgIlJlbGF0ZWQgVGFn cyIuICBUaGUgY2xvdWQgaW4gdGhhdCBzZWN0aW9uIGNvbnRhaW5zIGFsbCB0aGUgdGFncyB1 c2VkIGJ5IGFsbCB0aGUgYXJ0aWNsZXMgaW4gdGhlIHNlYXJjaCByZXN1bHQuICBJdCdzIGEg d2F5IHRvIHNheSAidGhlc2Ugb3RoZXIgdGFncyBtYXkgYmUgc2ltaWxhciB0byB0aGUgdGFn IHlvdSBqdXN0IHNlYXJjaGVkIi4KCipCZWZvcmUgeW91IHVzZSB0aGlzIG9uIHlvdXIgc2l0 ZSwgaG93ZXZlciwqIHlvdSBzaG91bGQgcmVhZCB0aGUgZGV0YWlsZWQgaW5zdHJ1Y3Rpb25z IGNhcmVmdWxseS4gIFRoaXMgdGFnIGNhbiBoYXZlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNl IGltcGxpY2F0aW9ucyBmb3IgeW91ciBzaXRlLCB3aGljaCB5b3VyIGhvc3RpbmcgcHJvdmlk ZXIgbWlnaHQgbm90IGJlIHZlcnkgaGFwcHkgYWJvdXQuCgpUbyB1c2UgaXQgYW55d2F5LCBw dXQgc29tZXRoaW5nIGxpa2UgdGhpcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBwYWdlOgoKPHBy ZT48dHhwOnRydV90YWdzX2lmX3RhZ19zZWFyY2g+Cjx0eHA6dHJ1X3RhZ3NfcmVsYXRlZF90 YWdzX2Zyb21fc2VhcmNoIHNlY3Rpb249ImJsb2cscmVmZXJlbmNlIiB1c2VvdmVyYWxsY291 bnRzPSIxIiAvPgo8L3R4cDp0cnVfdGFnc19pZl90YWdfc2VhcmNoPjwvcHJlPgoKSWYgeW91 IHVzZSB0aGUgPGNvZGU+c2VjdGlvbjwvY29kZT4gYXR0cmlidXRlIGluIHlvdXIgbWFpbiB0 YWcgY2xvdWQgeW91IHNob3VsZCBhbHNvIHVzZSBpdCBoZXJlLiAgU2VlIHRoZSBkb2N1bWVu dGF0aW9uIGJlbG93IGZvciBhbiBleHBsYW5hdGlvbiBvZiB3aHkuCgpUaGUgPGNvZGU+dXNl cm92ZXJhbGxjb3VudHM8L2NvZGU+IGF0dHJpYnV0ZSBjYXVzZXMgdGhlIGNsb3VkIHRvIHNp emUgdGhlIGxpbmtzIGFjY29yZGluZyB0byBob3cgbGFyZ2UgdGhleSB3b3VsZCBiZSBpbiB0 aGUgbWFpbiBjbG91ZC4gIFRoYXQncyBwcm9iYWJseSB3aGF0IHlvdSB3YW50LCBidXQgaXQg Y2F1c2VzIGV2ZW4gbW9yZSBwZXJmb3JtYW5jZSBzbG93ZG93bi4gIFNlZSB0aGUgZG9jdW1l bnRhdGlvbiBiZWxvdyBmb3IgYWxsIHRoZSBkZXRhaWxzLgoKCmgzLiBUYWcgcmVmZXJlbmNl CgpoNC4gPGNvZGU+dHJ1X3RhZ3NfaGFuZGxlcjwvY29kZT4KClRoaXMgaXMgdGhlIG1haW4g ZnVuY3Rpb24gdGhhdCBkcml2ZXMgdGFnIHNlYXJjaCBhbmQgc2hvd3MgdGhlIGdlbmVyaWMg dGFnIGNsb3VkLiAgSXQgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBwYWdlIHRoYXQgaXMg dXNlZCBpbiB0aGUgJ3RhZycgc2VjdGlvbi4gIEl0IGdlbmVyYWxseSBjYWxscyA8Y29kZT5k b0FydGljbGVzKCk8L2NvZGU+IChpbiB0aGUgVGV4dHBhdHRlcm4gY29kZSkgdG8gZGlzcGxh eSB0YWcgc2VhcmNoIHJlc3VsdHMsIGJ1dCBpZiBubyB0YWcgd2FzIHBhc3NlZCBpbiB0aGUg dXJsIGl0IHdpbGwgY2FsbCA8Y29kZT50cnVfdGFnc19jbG91ZDwvY29kZT4gaW5zdGVhZC4K ClRoaXMgdGFnIGFjY2VwdHMgbW9zdCBvZiB0aGUgc3RhbmRhcmQgPGNvZGU+dHhwOmFydGlj bGU8L2NvZGU+IGF0dHJpYnV0ZXMsIHdoaWNoIHdpbGwgYmUgYXBwbGllZCBkdXJpbmcgdGhl IHRhZyBzZWFyY2guICBOb3RlIHRoYXQgPGNvZGU+dHJ1X3RhZ3NfaGFuZGxlcjwvY29kZT4g KmRvZXMgbm90KiBzdXBwb3J0IHVzaW5nIG11bHRpcGxlIHNlY3Rpb25zIHdpdGggdGhlIDxj b2RlPnNlY3Rpb248L2NvZGU+IGF0dHJpYnV0ZSwgd2hlbiBkb2luZyBhIHRhZyBzZWFyY2gu ICBJZiBtdWx0aXBsZSBzZWN0aW9ucyBhcmUgcGFzc2VkLCBub25lIGFyZSB1c2VkLgoKKk5v dGU6KiBJbiBUZXh0cGF0dGVybiwgdGhlIDxjb2RlPmxpbWl0PC9jb2RlPiBhdHRyaWJ1dGUg aXMgZGVmYXVsdGVkIHRvIDxjb2RlPjEwPC9jb2RlPiwgdG8gbGltaXQgdGhlIG91dHB1dCB0 byAxMCBhcnRpY2xlcyBwZXIgcGFnZSwgYW5kIHRoZSA8Y29kZT50eHA6b2xkZXI8L2NvZGU+ IGFuZCA8Y29kZT50eHA6bmV3ZXI8L2NvZGU+IHRhZ3MgYXJlIHVzZWQgdG8gcGFnaW5hdGUg dGhlIGZ1bGwgbGlzdC4gIFRoZSA8Y29kZT50eHA6b2xkZXI8L2NvZGU+IGFuZCA8Y29kZT50 eHA6bmV3ZXI8L2NvZGU+IHRhZ3MgZG8gbm90IHdvcmsgd2l0aCB0cnVfdGFncywgYnV0IHRo ZSA8Y29kZT5saW1pdDwvY29kZT4gaXMgc3RpbGwgdXNlZCBieSBUZXh0cGF0dGVybiB3aGVu IGl0IG91dHB1dHMgdGhlIGFydGljbGVzLiAgVGhlcmVmb3JlLCB0cnVfdGFncyB1c2VzIGEg ZGVmYXVsdCBsaW1pdCBvZiA8Y29kZT4xMDAwPC9jb2RlPiB3aGVuIGRvaW5nIGFuIGFydGlj bGUgc2VhcmNoLiAgWW91IGNhbiBvdmVycmlkZSB0aGlzIGxpbWl0IGJ5IHNldHRpbmcgdGhl IDxjb2RlPmxpbWl0PC9jb2RlPiBhdHRyaWJ1dGUgb24gPGNvZGU+dHJ1X3RhZ3NfaGFuZGxl cjwvY29kZT4uCgpUaGlzIHRhZyB3aWxsIGFsc28gYWNjZXB0IGFsbCBvZiB0aGUgYXR0cmli dXRlcyB1c2VkIGJ5IDxjb2RlPnRydV90YWdfY2xvdWQ8L2NvZGU+LiAgU2VlIGJlbG93IGZv ciBkZXRhaWxzLgoKaDQuIDxjb2RlPnRydV90YWdzX2lmX2hhc190YWdzPC9jb2RlPgoKVGhp cyBjb25kaXRpb25hbCB0YWcgY2FuIGJlIHVzZWQgaW4gYW4gYXJ0aWNsZSBmb3JtLCBhbmQg d2lsbCBldmFsdWF0ZSBpdHMgY29udGVudHMgKGUuZy4gInJldHVybiB0cnVlIikgaWYgdGhl IGN1cnJlbnQgYXJ0aWNsZSBoYXMgdGFncy4KCmg0LiA8Y29kZT50cnVfdGFnc19mcm9tX2Fy dGljbGU8L2NvZGU+CgpUaGlzIHRhZyBjYW4gYmUgdXNlZCBpbiBhbiBhcnRpY2xlIGZvcm0g dG8gcmV0dXJuIGEgbGlzdCBvZiB0YWdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBh cnRpY2xlLiAgVHlwaWNhbGx5IChzZWUgYmVsb3cpLCBlYWNoIHRhZyBpbiB0aGUgbGlzdCB3 aWxsIGJlIGEgbGluayAoPGNvZGU+PGEgaHJlZj0uLi4+PC9jb2RlPikgdG8gdGhlIHRhZyBz ZWFyY2ggdXJsIGZvciB0aGF0IHBhcnRpY3VsYXIgdGFnLgoKVGhpcyB0YWcgYWNjZXB0cyB0 aGUgc3RhbmRhcmQgPGNvZGU+d3JhcHRhZzwvY29kZT4sIDxjb2RlPmJyZWFrPC9jb2RlPiwg PGNvZGU+Y2xhc3M8L2NvZGU+LCBhbmQgPGNvZGU+YnJlYWtjbGFzczwvY29kZT4gYXR0cmli dXRlc1sxXS4KCklmIHlvdSBkb24ndCB3YW50IHRvIGhhdmUgdGhlIHRhZ3MgYmUgbGlua3Ms IHlvdSBjYW4gc2V0IDxjb2RlPmdlbmVyYXRlbGlua3M9IjAiPC9jb2RlPiB0byB0dXJuIHRo ZSBsaW5rcyBvZmYuCgpJZiB5b3UgbmFtZWQgeW91ciAndGFnJyBzZWN0aW9uIHNvbWV0aGlu ZyBvdGhlciB0aGFuICJ0YWciLCBzZXQgPGNvZGU+dGFnc2VjdGlvbjwvY29kZT4gdG8gdGhl IG5hbWUgb2YgdGhhdCBzZWN0aW9uLiAgQnkgZGVmYXVsdCwgdGhpcyBpcyBzZXQgdG8gPGNv ZGU+dGFnPC9jb2RlPi4KClRoZSA8Y29kZT50aXRsZTwvY29kZT4gYXR0cmlidXRlIGNhbiBi ZSB1c2VkIHRvIHNldCB0aGUgdG9vbHRpcCBmb3IgdGhlIHRhZ3MuCgpJZiB5b3UgaGF2ZSBj bGVhbiB1cmxzIHR1cm5lZCBvbiAoc2VlIGFib3ZlKSwgeW91IGNhbiB1c2UgdGhlIDxjb2Rl PnVzZXJlbHRhZ3M8L2NvZGU+IGF0dHJpYnV0ZSB0byBzcGVjaWZ5IHdoZXRoZXIgbGlua3Mg aW4gdGhlIGxpc3Qgc2hvdWxkIGhhdmUgdGhlIDxhIGhyZWY9Imh0dHA6Ly9taWNyb2Zvcm1h dHMub3JnL3dpa2kvcmVsdGFnIj48Y29kZT5yZWw9InRhZyI8L2NvZGU+PC9hPiAgKHVzZWQg YnkgIlRlY2hub3JhdGkiOmh0dHA6Ly93d3cudGVjaG5vcmF0aS5jb20vKSBhdHRyaWJ1dGUg c2V0LiAgTm90ZSB0aGF0IHRoaXMgd29uJ3Qgd29yayBpZiB5b3UgdHVybiBvZmYgbGlua3Mu ICBBbHNvIG5vdGUgdGhhdCB0YWdzIGRvbid0IHNob3cgdXAgaW4gdGhlIFJTUy9BdG9tIGZl ZWRzLCB1bmxlc3MgeW91ICJoYWNrIHRoZSB0ZXh0cGF0dGVybiBzb3VyY2UiOmh0dHA6Ly9m b3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9waWQ9NDA5MDcjcDQwOTA3LiAg VGhpcyBpcyBvbiBieSBkZWZhdWx0LgoKQWdhaW4gaWYgeW91IGhhdmUgY2xlYW4gdXJscyB0 dXJuZWQgb24sIHlvdSBjYW4gdXNlIHRoZSA8Y29kZT51c2Vub2ZvbGxvdzwvY29kZT4gYXR0 cmlidXRlIHRvIHNwZWNpZnkgd2hldGhlciBsaW5rcyBpbiB0aGUgbGlzdCBzaG91bGQgaGF2 ZSB0aGUgPGEgaHJlZj0iaHR0cDovL2dvb2dsZWJsb2cuYmxvZ3Nwb3QuY29tLzIwMDUvMDEv cHJldmVudGluZy1jb21tZW50LXNwYW0uaHRtbCI+PGNvZGU+cmVsPSJub2ZvbGxvdyI8L2Nv ZGU+PC9hPiBhdHRyaWJ1dGUgc2V0LiAgVGhpcyBpcyBvZmYgYnkgZGVmYXVsdC4KCkFzIG9m IHYxLjgsIHlvdSBjYW4gc2V0IHRoZSA8Y29kZT51c2VvdmVyYWxsY291bnRzPC9jb2RlPiBh dHRyaWJ1dGUgdG8gdGVsbCB0aGUgdGFnIGxpc3QgdG8gcmVuZGVyIGFzIGEgY2xvdWQgKHdo ZXJlIGVhY2ggdGFnIGlzIHNpemVkIGFjY29yZGluZyB0byBpdHMgc2l0ZS13aWRlIGZyZXF1 ZW5jeSkuICBUaGlzIHRhZyBpc24ndCBzdWZmaWNpZW50IG9uIGl0cyBvd24sIGhvd2V2ZXI7 IG9uY2UgeW91IHNldCBpdCB5b3UgYWxzbyBuZWVkIHRvIHNldCB0aGUgcmVuZGVyaW5nIGF0 dHJpYnV0ZXMgbGlrZSA8Y29kZT5tYXhwZXJjZW50PSIyMDAiPC9jb2RlPiwgPGNvZGU+c2V0 c2l6ZXM9IjEiPC9jb2RlPiwgYW5kIDxjb2RlPnNldGNsYXNzZXM9IjEiPC9jb2RlPiBiZWNh dXNlIHRoZXNlIGFyZSBhbGwgdHVybmVkIG9mZiBieSBkZWZhdWx0LiAgWW91J2xsIGFsc28g dGhlbiBiZSBhYmxlIHRvIHVzZSBhdHRyaWJ1dGVzIGxpa2UgPGNvZGU+c2hvd2NvdW50czwv Y29kZT4gYW5kIDxjb2RlPnNvcnQ8L2NvZGU+LiAgU2VlIHRoZSA8Y29kZT50cnVfdGFnc19j bG91ZDwvY29kZT4gZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscyBvbiB0aGVzZSBhdHRyaWJ1 dGVzLgoKKkJlIGNhcmVmdWwsIGhvd2V2ZXIsKiBiZWZvcmUgdHVybmluZyB0aGlzIG9uLiAg VGhpcyBhdHRyaWJ1dGUgY2F1c2VzIDxjb2RlPnRydV90YWdzPC9jb2RlPiB0byBkbyBhbiBl eHRyYSBkYXRhYmFzZSBxdWVyeSBmb3IgZWFjaCBhcnRpY2xlIGRpc3BsYXllZCBvbiBhIHBh Z2UuICBUaGF0IGV4dHJhIHF1ZXJ5IGlzIGVxdWl2YWxlbnQgdG8gdGhlIHF1ZXJ5IHVzZWQg dG8gZ2VuZXJhdGUgdGhlIG92ZXJhbGwgY2xvdWQuICBZb3UgbWF5IHBheSBhIHBlcmZvcm1h bmNlIHBlbmFsdHkgZm9yIGFsbCB0aGUgZXh0cmEgcXVlcmllcy4KCmZuMShmb290bm90ZSku IEFzIHdpdGggYWxsIFRleHRwYXR0ZXJuIHRhZ3MsIDxjb2RlPmNsYXNzPC9jb2RlPiBpcyBv bmx5IHVzZWQgaWYgeW91IHNwZWNpZnkgYW4gYXBwcm9wcmlhdGUgPGNvZGU+d3JhcHRhZzwv Y29kZT4gYW5kIDxjb2RlPmJyZWFrY2xhc3M8L2NvZGU+IGlzIG9ubHkgdXNlZCBpZiB5b3Ug c3BlY2lmeSBhbiBhcHByb3ByaWF0ZSA8Y29kZT5icmVhazwvY29kZT4uCgpoNC4gPGNvZGU+ dHJ1X3RhZ3NfY2xvdWQ8L2NvZGU+CgpoNC4gPGNvZGU+dHJ1X3RhZ3NfbGlzdDwvY29kZT4K CjxwPjxjb2RlPnRydV90YWdzX2Nsb3VkPC9jb2RlPiBjYW4gYmUgdXNlZCBvbiBhbnkgcGFn ZSwgYW5kIGlzIGdlbmVyYWxseSB1c2VkIHRvIGdlbmVyYXRlIGEgc2ltcGxlIHRhZyBjbG91 ZCBvZiBhbGwgdGhlIHRhZ3MgdXNlZCBvbiB5b3VyIHNpdGUuICBUaGUgY2xvdWQgaXMgcmVh bGx5IGp1c3QgYSBsaXN0IG9mIGxpbmtzLCBtdWNoIGxpa2UgdGhhdCBnZW5lcmF0ZWQgYnkg PGNvZGU+dHJ1X3RhZ3NfZnJvbV9hcnRpY2xlPC9jb2RlPiwgYnV0IHdpdGggYSA8Y29kZT5z dHlsZTwvY29kZT4gYXR0cmlidXRlIHNldCBvbiBlYWNoIGxpbmsgdG8gZ2l2ZSBpdCBhIGZv bnQgc2l6ZSByYW5naW5nIGZyb20gMTAwJSB0byAyMDAlLjwvcD4KCjxwPjxjb2RlPnRydV90 YWdzX2xpc3Q8L2NvZGU+IGNhbiBiZSB1c2VkIG9uIGFueSBwYWdlLCBhbmQgaXMgZ2VuZXJh bGx5IHVzZWQgdG8gb3V0cHV0IGEgYnVsbGV0ZWQgbGlzdCBvZiBhbGwgdGhlIHRhZ3MgdXNl ZCBvbiB5b3VyIHNpdGUuICBCeSBkZWZhdWx0LCB0aGUgdGFncyB3aWxsIGFsbCBoYXZlIGEg Zm9udC1zaXplIG9mIDEwMCUuPC9wPgoKVGhlc2UgdHdvIHRhZ3MgZG8gdGhlIGV4YWN0IHNh bWUgdGhpbmcgLSA8Y29kZT50cnVfdGFnc19jbG91ZDwvY29kZT4ganVzdCBwcm92aWRlcyBk aWZmZXJlbnQgZGVmYXVsdHMgdG8gPGNvZGU+dHJ1X3RhZ3NfbGlzdDwvY29kZT4uCgo8cD48 Y29kZT50cnVfdGFnc19jbG91ZDwvY29kZT4gYW5kIDxjb2RlPnRydV90YWdzX2xpc3Q8L2Nv ZGU+IGJvdGggc2V0IHRoZSA8Y29kZT5jbGFzczwvY29kZT4gYXR0cmlidXRlIG9mIGVhY2gg dGFnLCBzcGVjaWZ5aW5nIHR3byBjbGFzc2VzLiAgVGhlIGZpcnN0IGNsYXNzIGdyb3VwcyB0 aGUgdGFncyBpbnRvIGNhdGVnb3JpZXMsIHdpdGggY2xhc3NlcyBvZiA8Y29kZT50YWdTaXpl U21hbGxlc3Q8L2NvZGU+LCA8Y29kZT50YWdTaXplTWVkaXVtPC9jb2RlPiwgYW5kIDxjb2Rl PnRhZ1NpemVMYXJnZXN0PC9jb2RlPi4gIFVzaW5nIHRoZXNlLCB5b3UgY291bGQgbWFrZSB0 aGUgc21hbGxlc3QgYW5kIGxhcmdlc3QgdGFncyBoYXZlIGRpZmZlcmVudCBzdHlsZXMgdGhh biBhbGwgdGhlIG90aGVycy48L3A+CgpUaGUgc2Vjb25kIGNsYXNzIGluZGljYXRlcyB0aGUg InN0ZXAiIG9mIHRoZSBjdXJyZW50IHRhZywgd2l0aCBjbGFzc2VzIG9mIDxjb2RlPnRhZ1Np emUxPC9jb2RlPiwgPGNvZGU+dGFnU2l6ZTI8L2NvZGU+LCBhbmQgc28gb24uICBUaGVzZSBn aXZlIHlvdSBwcmVjaXNlIGNvbnRyb2wgb3ZlciBlYWNoIHRhZyBzaXplLCBpZiB5b3Ugd2Fu dCBpdC4KCklmIHlvdSB1c2UgdGhlc2UgY2xhc3NlcyB0byBjcmVhdGUgc3BlY2lhbCBDU1Mg cnVsZXMsIHlvdSBtYXkgYWxzbyB3YW50IHRvIHNldCB0aGUgPGNvZGU+c2V0c2l6ZXM8L2Nv ZGU+IGF0dHJpYnV0ZSwgZGVzY3JpYmVkIGJlbG93LgoKaDUuIEJvdGggdGFncyBhY2NlcHQg dGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgoKKiBUaGUgc3RhbmRhcmQgPGNvZGU+d3JhcHRh ZzwvY29kZT4sIDxjb2RlPmJyZWFrPC9jb2RlPiwgPGNvZGU+Y2xhc3M8L2NvZGU+LCBhbmQg PGNvZGU+YnJlYWtjbGFzczwvY29kZT4gYXR0cmlidXRlcy4gIDxjb2RlPnRydV90YWdzX2Ns b3VkPC9jb2RlPiBoYXMgYSBkZWZhdWx0IDxjb2RlPmJyZWFrPC9jb2RlPiBvZiBhIGNvbW1h LiAgPGNvZGU+dHJ1X3RhZ3NfbGlzdDwvY29kZT4gaGFzIGEgZGVmYXVsdCA8Y29kZT53cmFw dGFnPC9jb2RlPiBvZiA8Y29kZT51bDwvY29kZT4gYW5kIGEgZGVmYXVsdCA8Y29kZT5icmVh azwvY29kZT4gb2YgPGNvZGU+bGk8L2NvZGU+LgoqIDxjb2RlPnRhZ3NlY3Rpb248L2NvZGU+ LCB3aGljaCB0ZWxscyB0cnVfdGFncyB0aGUgbmFtZSBvZiB5b3VyICd0YWcnIHNlY3Rpb24u ICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IGhhdmUgbmFtZWQgdGhlIHNlY3Rpb24gc29t ZXRoaW5nIG90aGVyIHRoYW4gInRhZyIuICBCeSBkZWZhdWx0LCB0aGlzIGlzIHNldCB0byA8 Y29kZT50YWc8L2NvZGU+LgoqIDxjb2RlPnNlY3Rpb248L2NvZGU+LCB3aGljaCB0ZWxscyBp dCB0byBsaW1pdCB0aGUgbGlzdCB0byB0YWdzIGZyb20gdGhlIGdpdmVuIHNlY3Rpb24gb3Ig c2VjdGlvbnMuICBGb3IgZXhhbXBsZSwgPGNvZGU+PHR4cDp0cnVfdGFnc19jbG91ZCBzZWN0 aW9uPSJibG9nLHJlZmVyZW5jZSIgLz48L2NvZGU+IHdvdWxkIG9ubHkgc2hvdyB0YWdzIGZy b20gdGhlICJibG9nIiBhbmQgInJlZmVyZW5jZSIgc2VjdGlvbnMuICBCeSBkZWZhdWx0LCB0 aGlzIGlzIHNldCB0byBibGFuayAodG8gc2hvdyB0YWdzIGZyb20gYWxsIHNlY3Rpb25zKS4K KiogKk5vdGU6KiBpZiB5b3UgdXNlIDxjb2RlPnNlY3Rpb248L2NvZGU+IHRvIGxpbWl0IHRo ZSBjbG91ZCB0byBhIHBhcnRpY3VsYXIgc2VjdGlvbiwgaXQgd29uJ3QgbGltaXQgdGhlIHRh ZyBzZWFyY2ggZmVhdHVyZSB0byB0aGF0IHNlY3Rpb24uICBUaGUgdGFnIHNlYXJjaCBmaW5k cyAodGFnZ2VkKSBhcnRpY2xlcyBmcm9tIGFsbCBzZWN0aW9ucywgbm8gbWF0dGVyIHdoYXQu ICBUaGF0J3MgYSBzaWRlLWVmZmVjdCBvZiB0aGUgdXNlIG9mIDxjb2RlPmRvQXJ0aWNsZXMo KTwvY29kZT4sIGFuZCBJIGRvbid0IHRoaW5rIHRoZXJlJ3MgYW55dGhpbmcgSSBjYW4gZG8g YWJvdXQgaXQuCiogPGNvZGU+bWlucGVyY2VudDwvY29kZT4gYW5kIDxjb2RlPm1heHBlcmNl bnQ8L2NvZGU+LCB3aGljaCBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSB3ZWlnaHRlZCBm b250IHNpemVzIGluIHRoZSB0YWcgY2xvdWQvbGlzdC4gIDxjb2RlPnRydV90YWdzX2Nsb3Vk PC9jb2RlPiBkZWZhdWx0cyB0byA8Y29kZT4xMDA8L2NvZGU+IGFuZCA8Y29kZT4yMDA8L2Nv ZGU+LCByZXNwZWN0aXZlbHksIGFuZCA8Y29kZT50cnVfdGFnc19saXN0PC9jb2RlPiBkZWZh dWx0cyB0byA8Y29kZT4xMDA8L2NvZGU+IGFuZCA8Y29kZT4xMDA8L2NvZGU+LgoqIDxjb2Rl PnNob3djb3VudHM8L2NvZGU+LCB3aGljaCB3aWxsIGFwcGVuZCBhIG51bWJlciBpbmRpY2F0 aW5nIHRoZSBudW1iZXIgb2YgdGltZXMgYSB0YWcgaGFzIGJlZW4gdXNlZCwgdG8gZWFjaCB0 YWcgaW4gdGhlIGxpc3QuICBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IHNlZTogPHNwYW4gY2xh c3M9InByZSI+ImxpZmUiOi8/cz10YWcmdD1saWZlIFszXSwgInRlY2giOi8/cz10YWcmdD10 ZWNoIFs1XTwvc3Bhbj4gaW4gbXkgdGFnIGNsb3VkLCBpZiB0aGlzIHdhcyB0dXJuZWQgb24u ICBUaGlzIGlzIG9mZiBieSBkZWZhdWx0LiAgVXNlIDxjb2RlPjE8L2NvZGU+IG9yIDxjb2Rl PnRydWU8L2NvZGU+IHRvIHR1cm4gaXQgb24uCioqIFRoaXMgY2FuIGFsc28gYmUgdXNlZCB0 byBwdXQgdGhlIGNvdW50cyBpbiB0aGUgPGNvZGU+dGl0bGU8L2NvZGU+IGF0dHJpYnV0ZSBv ZiB0aGUgbGlua3MsIHdoaWNoIHdpbGwgbWFrZSBpdCBhcHBlYXIgaW4gYSB0b29sdGlwLiAg VXNlIDxjb2RlPnNob3djb3VudHM9InRpdGxlIjwvY29kZT4gb3IgPGNvZGU+c2hvd2NvdW50 cz0iYm90aCI8L2NvZGU+ICh0byBzaG93IGl0IGluIGJvdGggcGxhY2VzKSB0byB0dXJuIGl0 IG9uLgoqIDxjb2RlPmNvdW50d3JhcGNoYXJzPC9jb2RlPiwgd2hpY2ggY29udHJvbHMgdGhl IGNoYXJhY3RlcnMgdXNlZCB0byBzaG93IHRoZSB0YWcgY291bnQsIGlmIDxjb2RlPnNob3dj b3VudHM8L2NvZGU+IGlzIHR1cm5lZCBvbi4gIEJ5IGRlZmF1bHQgdGhpcyBpcyA8Y29kZT5b XTwvY29kZT4uICBUaGUgZmlyc3QgY2hhcmFjdGVyIHdpbGwgYmUgcHV0IG9uIHRoZSBsZWZ0 IHNpZGUgb2YgdGhlIG51bWJlciwgYW5kIHRoZSBzZWNvbmQgY2hhcmFjdGVyIHdpbGwgYmUg cHV0IG9uIHRoZSByaWdodC4gIEZvciBleGFtcGxlLCBhIDxjb2RlPmNvdW50d3JhcGNoYXJz PC9jb2RlPiBvZiA8Y29kZT4oKTwvY29kZT4gd291bGQgc2hvdzogPHNwYW4gY2xhc3M9InBy ZSI+ImxpZmUiOi8/cz10YWcmdD1saWZlICgzKSwgInRlY2giOi8/cz10YWcmdD10ZWNoICg1 KTwvc3Bhbj4KKiA8Y29kZT50aXRsZTwvY29kZT4gY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSB0 b29sdGlwIGZvciB0aGUgdGFncy4KKiBJZiB5b3UgaGF2ZSBjbGVhbiB1cmxzIHR1cm5lZCBv biAoc2VlIGFib3ZlKSwgeW91IGNhbiB1c2UgdGhlIDxjb2RlPnVzZXJlbHRhZ3M8L2NvZGU+ IGF0dHJpYnV0ZSB0byBzcGVjaWZ5IHdoZXRoZXIgbGlua3MgaW4gdGhlIGxpc3Qgc2hvdWxk IGhhdmUgdGhlIDxhIGhyZWY9Imh0dHA6Ly9taWNyb2Zvcm1hdHMub3JnL3dpa2kvcmVsdGFn Ij48Y29kZT5yZWw9InRhZyI8L2NvZGU+PC9hPiAgKHVzZWQgYnkgIlRlY2hub3JhdGkiOmh0 dHA6Ly93d3cudGVjaG5vcmF0aS5jb20vKSBhdHRyaWJ1dGUgc2V0LiAgVGhpcyBpcyBvZmYg YnkgZGVmYXVsdC4KKiBBZ2FpbiBpZiB5b3UgaGF2ZSBjbGVhbiB1cmxzIHR1cm5lZCBvbiwg eW91IGNhbiB1c2UgdGhlIDxjb2RlPnVzZW5vZm9sbG93PC9jb2RlPiBhdHRyaWJ1dGUgdG8g c3BlY2lmeSB3aGV0aGVyIGxpbmtzIGluIHRoZSBsaXN0IHNob3VsZCBoYXZlIHRoZSA8YSBo cmVmPSJodHRwOi8vZ29vZ2xlYmxvZy5ibG9nc3BvdC5jb20vMjAwNS8wMS9wcmV2ZW50aW5n LWNvbW1lbnQtc3BhbS5odG1sIj48Y29kZT5yZWw9Im5vZm9sbG93IjwvY29kZT48L2E+IGF0 dHJpYnV0ZSBzZXQuICBUaGlzIGlzIG9mZiBieSBkZWZhdWx0LgoqIElmIHlvdSBkb24ndCB3 YW50IHRoZSB0YWdzIHRvIGJlIGxpbmtzLCB5b3UgY2FuIHNldCA8Y29kZT5nZW5lcmF0ZWxp bmtzPSIwIjwvY29kZT4gdG8gdHVybiB0aGVtIG9mZi4KKiA8Y29kZT5taW50YWdjb3VudDwv Y29kZT4gYW5kIDxjb2RlPm1heHRhZ2NvdW50PC9jb2RlPiBjYW4gYmUgdXNlZCB0byBoaWRl IHRhZ3MgdGhhdCBvbmx5IGhhdmUgYSBmZXcgYXJ0aWNsZXMsIG9yIHRoYXQgaGF2ZSB0b28g bWFueS4gIFRoZXkgYXJlIGRlZmF1bHRlZCB0byA8Y29kZT4wPC9jb2RlPiBhbmQgPGNvZGU+ MTAwMDwvY29kZT4sIHJlc3BlY3RpdmVseS4gIEZvciBleGFtcGxlLCA8Y29kZT5taW50YWdj b3VudD0iMiI8L2NvZGU+IHdvdWxkIGhpZGUgYW55IHRhZ3MgdGhhdCB3ZXJlIG9ubHkgYXNz b2NpYXRlZCB3aXRoIGEgc2luZ2xlIGFydGljbGUuICBJZiB5b3UgZG8gdGhpcywgeW91IG1h eSB3YW50IHRvIGFkZCBhIGxpbmsgdG8gdGhlIGRlZmF1bHQgdGFnIGNsb3VkLCB1c3VhbGx5 IGZvdW5kIGF0IDxjb2RlPi90YWcvPC9jb2RlPi4KKiBJZiB5b3Ugd2FudCB0byBjb250cm9s IHRoZSBzaXplKHMpIG9mIHRoZSB0YWdzIHlvdXJzZWxmICh0aHJvdWdoIENTUyksIHNldCA8 Y29kZT5zZXRzaXplcz0iMCI8L2NvZGU+IHRvIHR1cm4gb2ZmIHRoZSA8Y29kZT5zdHlsZT0i Zm9udC1zaXplOiBYWFglIjwvY29kZT4gYXR0cmlidXRlIGdlbmVyYXRpb24uICBUaGF0IHdp bGwgbGVhdmUgYmVoaW5kIHRoZSBkZWZhdWx0IENTUyBjbGFzc2VzLCB3aGljaCB5b3UgY2Fu IHVzZSB0byBjb250cm9sIHRoZSBkaXNwbGF5IG9mIHlvdXIgY2xvdWQuCiogSWYgeW91IGRv bid0IHdhbnQgdGhlIHRhZ3MgdG8gaGF2ZSB0aGVpciA8Y29kZT5jbGFzczwvY29kZT4gYXR0 cmlidXRlcyBzZXQsIHlvdSBjYW4gc2V0IDxjb2RlPnNldGNsYXNzZXM9IjAiPC9jb2RlPiB0 byB0dXJuIGl0IG9mZi4KKiA8Y29kZT5zb3J0PC9jb2RlPiBjYW4gYmUgdXNlZCB0byBzb3J0 IHRoZSBjbG91ZCBieSB0YWcgZnJlcXVlbmN5LCByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBv ZiBhbHBoYWJldGljYWxseS4gIFVzZSA8Y29kZT5zb3J0PSJjb3VudCI8L2NvZGU+IHRvIHNv cnQgYnkgZnJlcXVlbmN5IGluIGRlc2NlbmRpbmcgb3JkZXIsIGFuZCA8Y29kZT5zb3J0PSJj b3VudCBhc2MiPC9jb2RlPiB0byBzb3J0IGJ5IGZyZXF1ZW5jeSBpbiBhc2NlbmRpbmcgb3Jk ZXIuCgpOb3RlIHRoYXQgeW91IGNhbiB1c2UgdGhlIGF0dHJpYnV0ZXMgdG8gbWFrZSBlYWNo IHRhZyBkbyB0aGUgc2FtZSB0aGluZy4gIDxjb2RlPnRydV90YWdzX2Nsb3VkPC9jb2RlPiBp cyBqdXN0IGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGdlbmVyYXRpbmcgYSB0YWcgY2xv dWQgdXNpbmcgPGNvZGU+dHJ1X3RhZ3NfbGlzdDwvY29kZT4uICBUaGVyZWZvcmUsIGl0J3Mg cG9zc2libGUgdG8gaGF2ZSBhIHRhZyBjbG91ZCB3aXRoIHRhZyBjb3VudHMgc2hvd2luZywg b3IgaGF2ZSBhIGJ1bGxldGVkIGxpc3Qgd2l0aCB2YXJpYWJsZSBmb250IHNpemVzLCBldGMu CgpoNC4gPGNvZGU+dHJ1X3RhZ3NfaWZfdGFnX3NlYXJjaDwvY29kZT4KClRoaXMgY29uZGl0 aW9uYWwgdGFnIGNhbiBiZSB1c2VkIGFueXdoZXJlIGFuZCB3aWxsIGV2YWx1YXRlIGl0cyBj b250ZW50cyAoZS5nLiAicmV0dXJuIHRydWUiKSBpZiB0aGUgY3VycmVudCB1cmwgaW5kaWNh dGVzIHRoYXQgdGhlcmUgaXMgYSB0YWcgc2VhcmNoIGdvaW5nIG9uLiAgVGhpcyBjYW4gYmUg dXNlZnVsIGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBsaWtlIGN1c3RvbWl6ZSB0aGUg dGl0bGViYXIgd2hlbiB1c2luZyB0aGUgdGFnIHNlYXJjaC4KCmg0LiA8Y29kZT50cnVfdGFn c190YWdfcGFyYW1ldGVyPC9jb2RlPgoKVGhpcyB0YWcgY2FuIGJlIHVzZWQgYW55d2hlcmUg YW5kIHdpbGwgcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHRhZyB1bmRlciBzZWFy Y2gsIGR1cmluZyBhIHRhZyBzZWFyY2guICBUaGlzIGlzIGdlbmVyYWxseSB1c2VkIHdpdGgg PGNvZGU+dHJ1X3RhZ3NfaWZfdGFnX3NlYXJjaDwvY29kZT4uCgpJdCBhY2NlcHRzIG9uZSBw YXJhbWV0ZXIsIDxjb2RlPnN0cmlwaHlwaGVuczwvY29kZT4sIHdoaWNoIHdpbGwgY29udmVy dCBhbGwgaHlwaGVucyB0byBzcGFjZXMgaW4gdGFnIG5hbWVzLiAgVGhpcyBpcyB1c2VmdWwg YmVjYXVzZSA8Y29kZT50cnVfdGFnczwvY29kZT4gd2lsbCBjb252ZXJ0IHNwYWNlcyB0byBo eXBoZW5zIHdoZW4gaXQgZG9lcyBhIHRhZyBzZWFyY2gsIGFuZCB0aGlzIHVuZG9lcyB0aGF0 IGNvbnZlcnNpb24uCgpoNC4gPGNvZGU+dHJ1X3RhZ3Nfc2VhcmNoX3BhcmFtZXRlcjwvY29k ZT4KClRoaXMgdGFnIGNhbiBiZSB1c2VkIGFueXdoZXJlIGFuZCB3aWxsIHJldHVybiB0aGUg dGV4dCB0aGUgdXNlciB0eXBlZCBpbnRvIHRoZSBzdGFuZGFyZCBzZWFyY2ggYm94LCBkdXJp bmcgYSByZWd1bGFyIHNlYXJjaC4gIFRoaXMgdGFnIGlzIG5vdCBzcGVjaWZpY2FsbHkgcmVs YXRlZCB0byB0YWdnaW5nLCBidXQgY2FuIGJlIGhhbmR5IGZvciBjdXN0b21pemluZyB0aGUg dGl0bGViYXIgb24gc2VhcmNoIHJlc3VsdCBwYWdlcy4KCmg0LiA8Y29kZT50cnVfdGFnc19y ZWxhdGVkX3RhZ3NfZnJvbV9zZWFyY2g8L2NvZGU+CgpUaGlzIHRhZyBpcyB1c2VmdWwgb24g dGhlIHJlc3VsdHMgcGFnZSBvZiBhIHRhZyBzZWFyY2guICBJdCBnZW5lcmF0ZXMgYSBjbG91 ZCBvZiBhbGwgdGhlIHRhZ3MgdGhhdCBhcmUgdXNlZCBieSB0aGUgYXJ0aWNsZXMgZm91bmQg aW4gdGhhdCBzZWFyY2gsIGV4Y2x1ZGluZyB0aGUgc2VhcmNoIHRhZyBpdHNlbGYuICBGb3Ig ZXhhbXBsZSwgaWYgYSB0YWcgc2VhcmNoIGZvciAibGlmZSIgZm91bmQgdGhyZWUgYXJ0aWNs ZXMgdGhhdCB3ZXJlIHRhZ2dlZCBhcyBmb2xsb3dzOgoKIyBtb25leSwgaGVhbHRoLCBsaWZl CiMgbW9uZXksIHBvbGl0aWNzLCBsaWZlCiMgbGlmZQoKLi4uPGNvZGU+dHJ1X3RhZ3NfcmVs YXRlZF90YWdzX2Zyb21fc2VhcmNoPC9jb2RlPiB3b3VsZCBnZW5lcmF0ZSBhIGNsb3VkIGNv bnRhaW5pbmcgIm1vbmV5IiwgImhlYWx0aCIsIGFuZCAicG9saXRpY3MiLgoKVGhpcyBpcyB1 c2VmdWwgZm9yIGdlbmVyYXRpbmcgYSAicmVsYXRlZCB0YWdzIiBjbG91ZCwgYXMgeW91IGNh biBzZWUgaW4gdGhlIHNpZGViYXIgb2YgdGhpcyBzaXRlIHdoZW4geW91IGRvIGEgdGFnIHNl YXJjaC4KCipCZWZvcmUgeW91IHVzZSB0aGlzIG9uIHlvdXIgc2l0ZSwgaG93ZXZlciwqIGJl IHdhcm5lZCB0aGF0IGl0J3Mgbm90IGdvb2QgZm9yIHlvdXIgc2l0ZSdzIHBlcmZvcm1hbmNl LCBhbmQgaXQncyBhIGxpdHRsZSBiaXQgb2YgYSBoYWNrIChhbmQgdGhlcmVmb3JlIG1heSBi cmVhayB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIFRleHRwYXR0ZXJuKS4gIEl0IGlzIGltcGxl bWVudGVkIGJ5IGNvbXBsZXRlbHkgcmVkb2luZyB0aGUgZGF0YWJhc2UgcXVlcnkgdGhhdCBm b3VuZCBhbGwgdGhlIGFydGljbGVzIGluIHRoZSBmaXJzdCBwbGFjZSwgd2hpY2ggbWVhbnMg dGhhdCB5b3VyIHNpdGUgaXMgZXNzZW50aWFsbHkgcGVyZm9ybWluZyB0aGUgc2VhcmNoIHR3 aWNlLiAgVGhlbiwgZGVwZW5kaW5nIG9uIHRoZSBhdHRyaWJ1dGVzIHlvdSB1c2UsIGl0IG1h eSBkbyBhIHNlY29uZCBxdWVyeSB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gdGhlIHF1ZXJ5IHRo YXQgZ2VuZXJhdGVzIHRoZSAiY29tcGxldGUiIHRhZyBjbG91ZC4KCllvdSBtYXkgd2FudCB0 byB0ZXN0IHRoaXMgY2FyZWZ1bGx5IGlmIHlvdSBoYXZlIGEgaG9zdGluZyBwcm92aWRlciB3 aG8gY2hhcmdlcyB5b3UgZm9yIENQVSBjeWNsZXMuICA6KQoKSWYgeW91IGRlY2lkZSB0byB1 c2UgdGhpcyB0YWcsIGJlIHN1cmUgdG8gbWluaWMgdGhlIDxjb2RlPnNlY3Rpb248L2NvZGU+ IGFuZCA8Y29kZT5saW1pdDwvY29kZT4gYXR0cmlidXRlcyBmcm9tIHlvdXIgPGNvZGU+dHJ1 X3RhZ3NfY2xvdWQ8L2NvZGU+IChvciA8Y29kZT50cnVfdGFnc19saXN0PC9jb2RlPikgY2Fs bCwgYWxvbmcgd2l0aCBhbnkgPGNvZGU+dHhwOmFydGljbGU8L2NvZGU+IGF0dHJpYnV0ZXMg dGhhdCB5b3UgdXNlZCBpbiB5b3VyIDxjb2RlPnRydV90YWdzX2hhbmRsZXI8L2NvZGU+IGNh bGwuICBJZiB5b3UgZG9uJ3QsIHRoZSBzZXQgb2YgYXJ0aWNsZXMgZm91bmQvdXNlZCBieSB0 aGlzIHRhZyB3b24ndCBtYXRjaCB0aGUgc2V0IHRoYXQgYXJlIGRpc3BsYXllZCB0byB0aGUg dXNlci4KClRoaXMgdGFnIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgoKKiBB bGwgdGhlIGF0dHJpYnV0ZXMgb2YgPGNvZGU+dHhwOmFydGljbGU8L2NvZGU+CiogQWxsIHRo ZSBhdHRyaWJ1dGVzIG9mIDxjb2RlPnRydV90YWdzX2Nsb3VkPC9jb2RlPi88Y29kZT50cnVf dGFnc19saXN0PC9jb2RlPi4KKiA8Y29kZT51c2VvdmVyYWxsY291bnRzPC9jb2RlPiwgd2hp Y2ggbWFrZXMgdGhlIGNsb3VkIHJlbmRlciB1c2luZyB0aGUgZnJlcXVlbmN5IGRhdGEgZm9y IHRoZSBzaXRlLXdpZGUgdGFnIGNsb3VkLgoqKiBCeSBkZWZhdWx0LCA8Y29kZT50cnVfdGFn c19yZWxhdGVkX3RhZ3NfZnJvbV9zZWFyY2g8L2NvZGU+IG91dHB1dHMgYSBjbG91ZCB3aGVy ZSB0aGUgd2VpZ2h0cyBhcmUgYmFzZWQgb24gdGhlIGZyZXF1ZW5jeSBvZiB0aGUgdGFncyBf aW4gdGhlIHNlYXJjaCByZXN1bHRzXy4gIFVzaW5nIHRoZSBleGFtcGxlIGZyb20gYWJvdmUs ICJtb25leSIgd291bGQgaGF2ZSBhIHdlaWdodCB0aGF0IHdhcyBkb3VibGUgdGhlIHdlaWdo dCBvZiAiaGVhbHRoIiBhbmQgInBvbGl0aWNzIi4KKiogVGhpcyBhdHRyaWJ1dGUgd2lsbCBj aGFuZ2UgdGhhdCBiZWhhdmlvciwgbWFraW5nIHRoZSB0YWcgc2l6ZXMgbWF0Y2ggdGhlIHNp emVzIHVzZWQgaW4gdGhlIHNpdGUtd2lkZSB0YWcgY2xvdWQuICBJbiBvdGhlciB3b3Jkcywg dGhpcyBjbG91ZCB3aWxsIGxvb2sgZXhhY3RseSBsaWtlIGEgc3Vic2V0IG9mIHlvdXIgc2l0 ZXdpZGUgY2xvdWQuCioqIEl0IHdpbGwgYWxzbyBhZGQgYW4gZXh0cmEgZGF0YWJhc2UgcXVl cnkgdG8gdGhlIG1peCAobWVudGlvbmVkIGFib3ZlKSwgc28gY29uc2lkZXIgcGVyZm9ybWFu Y2UgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyBpdC4iO3M6MzoibWQ1IjtzOjMyOiIwZjU3OTlj ZTkxNzgxN2I4OGUwYzM2MzZiZTNjNWRiYSI7fQ==