# Name: smd_random_text v0.14 # Type: Client side plugin # Random text from file, database, string or TXP field/variable # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE1OiJzbWRfcmFuZG9tX3RleHQiO3M6NjoiYXV0aG9yIjtz OjExOiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZk YXdzb24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMTQiO3M6MTE6ImRlc2NyaXB0aW9u IjtzOjYxOiJSYW5kb20gdGV4dCBmcm9tIGZpbGUsIGRhdGFiYXNlLCBzdHJpbmcgb3IgVFhQ IGZpZWxkL3ZhcmlhYmxlIjtzOjQ6ImhlbHAiO3M6MTUzNDY6IjxkaXYgaWQ9InNtZF9oZWxw Ij4KCgk8aDE+c21kX3JhbmRvbV90ZXh0PC9oMT4KCgk8cD5DaG9vc2UgcmFuZG9tIHRleHQg c3RyaW5ncyBmcm9tIGEgdmFyaWV0eSBvZiBzb3VyY2VzLiBDb3VsZCBiZSB1c2VkIGFzIGEg cXVvdGUtb2YtdGhlLWRheSBzeXN0ZW0sIHJhbmRvbSB0YWcgbGluZXMsIG9yIHNvbWV0aGlu ZyBtb3JlIGVsYWJvcmF0ZS48L3A+CgoJPGgyPkZlYXR1cmVzPC9oMj4KCgk8dWw+CgkJPGxp PlB1bGwgdGhlIGl0ZW0gbGlzdCBmcm9tIGVpdGhlcjoKCTx1bD4KCQk8bGk+YSBnaXZlbiBk ZWxpbWl0ZWQgc3RyaW5nPC9saT4KCQk8bGk+YSBmaWxlPC9saT4KCQk8bGk+YSBkYXRhYmFz ZSB0YWJsZTwvbGk+CgkJPGxpPmEgPGNvZGU+Jmx0O3R4cDp2YXJpYWJsZSAvJmd0OzwvY29k ZT48L2xpPgoJCTxsaT51c2VyLXN1Ym1pdHRlZCBmb3JtIGRhdGE8L2xpPgoJCTxsaT5hIFRl eHRwYXR0ZXJuIGZpZWxkPC9saT4KCTwvdWw+PC9saT4KCQk8bGk+R3JhYiBhcyBtYW55IHJh bmRvbSBpdGVtcyBhcyB5b3UgbGlrZSBmcm9tIHlvdXIgY2hvc2VuIGxpc3Q8L2xpPgoJCTxs aT5QYXNzIGVhY2ggdG8gYSBmb3JtL3RoZSBjb250YWluZXIgaWYgeW91IHdpc2ggdG8gZm9y bWF0IHRoZW08L2xpPgoJPC91bD4KCgk8aDI+QXV0aG9yPC9oMj4KCgk8cD48YSBocmVmPSJo dHRwOi8vc3RlZmRhd3Nvbi5jb20vY29udGFjdCI+U3RlZiBEYXdzb248L2E+LiBDb21iaW5l cyBpZGVhcyBmcm9tIGRydV9yYW5kb21fdGV4dCBieSBEcmV3IE1jTGVsbGFuIGFuZCBzaW1w bGVfcmFuZG9tX3RleHQgYnkgTWFudWVsIEViZXJ0LCBwbHVzIHNvbWUgc3ByaW5rbGluZ3Mg b2YgbXkgb3duLiBNYW55IHRoYW5rcyB0byB0aGUgYXV0aG9ycyBvZiB0aG9zZSB3b3Jrcy48 L3A+CgoJPGgyPkluc3RhbGxhdGlvbiAvIFVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cD5Eb3du bG9hZCB0aGUgcGx1Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVy bi5vcmcvcGx1Z2lucy8xMDIyL3NtZF9yYW5kb21fdGV4dCI+dGV4dHBhdHRlcm4ub3JnPC9h Piwgb3IgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUg cGFnZTwvYT4sIHBhc3RlIHRoZSBjb2RlIGludG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5U WFA8L3NwYW4+IEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFuZSwgaW5zdGFsbCBhbmQgZW5hYmxl IHRoZSBwbHVnaW4uIFZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRl cm4uY29tL3ZpZXd0b3BpYy5waHA/cGlkPTE5MDY3NSI+Zm9ydW0gdGhyZWFkPC9hPiBmb3Ig bW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUgc3VjY2VzcyBvciBvdGhlcndpc2Ugb2Yg dGhlIHBsdWdpbi48L3A+CgoJPHA+VG8gdW5pbnN0YWxsLCBzaW1wbHkgZGVsZXRlIGZyb20g dGhlIDxlbT5BZG1pbiAtJmd0OyBQbHVnaW5zPC9lbT4gcGFnZS48L3A+CgoJPGgyPlVzYWdl PC9oMj4KCgk8cD5Vc2UgdGhlIHRhZyBpbiBhbnkgcGFnZSwgZm9ybSBvciBhcnRpY2xlL2Zp bGUvaW1hZ2UvbGluayBjb250ZXh0LjwvcD4KCgk8aDMgY2xhc3M9InRhZyI+c21kX3JhbmRv bV90ZXh0PC9oMz4KCgk8cCBjbGFzcz0idGFnLXN1bW1hcnkiPlRoZXJlIGFyZSB0d28gbWFu ZGF0b3J5IGF0dHJpYnV0ZXM6IDxjb2RlPnR5cGU8L2NvZGU+IGFuZCA8Y29kZT5zb3VyY2U8 L2NvZGU+LiBUaGUgb3RoZXJzIGFyZSB1c2VkIHRvIGNvbnRyb2wgaG93IHRoZSBpbmZvcm1h dGlvbiBpcyBleHRyYWN0ZWQgYW5kL29yIHByZXNlbnRlZC48L3A+CgoJPGg0IGNsYXNzPSJh dHRzIj5NYW5kYXRvcnkgYXR0cmlidXRlczwvaDQ+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSBtYW5kIj50eXBlPC9zcGFuPiA6IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBwb29s IG9mIHRleHQgc3RyaW5ncy4gQ2FuIGJlIG9uZSBvZiA8Y29kZT5zdHJpbmc8L2NvZGU+ICh0 aGUgZGVmYXVsdCksIDxjb2RlPmZpZWxkPC9jb2RlPiwgPGNvZGU+dHhwdmFyPC9jb2RlPiwg PGNvZGU+dXJsdmFyPC9jb2RlPiwgPGNvZGU+ZGF0YWJhc2U8L2NvZGU+LCBvciA8Y29kZT5m aWxlPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIG1hbmQiPnNvdXJjZTwv c3Bhbj4gOiBmdXJ0aGVyIHJlZmluZW1lbnQgb2Ygd2hlcmUgdG8gZmluZCB0aGUgc3RyaW5n cyB1c2luZyB0aGUgZm9sbG93aW5nIHJ1bGVzOgoJPHVsPgoJCTxsaT48c3Bhbj5zdHJpbmc8 L3NwYW4+IDogYSBkZWxpbWl0ZWQgbGlzdCBvZiB0ZXh0IChlLmcuIDxjb2RlPnNvdXJjZT0m cXVvdDtteXxjcmFja2luZ3x3b3Jkc3xvZnx0aGV8ZGF5fGluIGEgbmF0dHkgbGl0dGxlfGxp c3QmcXVvdDs8L2NvZGU+KTwvbGk+CgkJPGxpPjxzcGFuPmZpZWxkPC9zcGFuPiA6IHRoZSBu YW1lIG9mIHRoZSBUZXh0cGF0dGVybiBmaWVsZCB0byBsb29rIGluIChlLmcuIDxjb2RlPnNv dXJjZT0mcXVvdDthcnRpY2xlX2ltYWdlJnF1b3Q7PC9jb2RlPiBvciA8Y29kZT5zb3VyY2U9 JnF1b3Q7bXlfY3VzdG9tX2ZpZWxkX25hbWUmcXVvdDs8L2NvZGU+KTwvbGk+CgkJPGxpPjxz cGFuPnR4cHZhcjwvc3Bhbj4gOiB0aGUgbmFtZSBvZiBhIDxjb2RlPiZsdDt0eHA6dmFyaWFi bGUgLyZndDs8L2NvZGU+IHRoYXQgaGFzIGJlZW4gZGVmaW5lZCAoZS5nLiA8Y29kZT5zb3Vy Y2U9JnF1b3Q7bXlfbGlzdCZxdW90OzwvY29kZT4pPC9saT4KCQk8bGk+PHNwYW4+dXJsdmFy PC9zcGFuPiA6IHRoZSBuYW1lIG9mIGEgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4g dmFyaWFibGUgKHZpYSA8c3BhbiBjbGFzcz0iY2FwcyI+R0VUPC9zcGFuPiBvciA8c3BhbiBj bGFzcz0iY2FwcyI+UE9TVDwvc3Bhbj4pIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHBh Z2UgKGUuZy4gPGNvZGU+c291cmNlPSZxdW90O3Byb3BlcnR5X2xpc3QmcXVvdDs8L2NvZGU+ KTwvbGk+CgkJPGxpPjxzcGFuPmRhdGFiYXNlPC9zcGFuPiA6IHRoZSB0YWJsZSBhbmQgY29s dW1uIG5hbWUsIHNlcGFyYXRlZCBieSA8Y29kZT5kZWxpbTwvY29kZT4gKGUuZy4gPGNvZGU+ c291cmNlPSZxdW90O3R4cF9jYXRlZ29yeXx0aXRsZSZxdW90OzwvY29kZT4pLiBZb3UgbWF5 IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBjb2x1bW4gZnJvbSB0aGUgc2FtZSB0YWJsZSBieSBs aXN0aW5nIHRoZW0gc2VwYXJhdGVkIGJ5IGNvbW1hLiBGb3IgZXhhbXBsZSA8Y29kZT5zb3Vy Y2U9JnF1b3Q7dHhwX2Rpc2N1c3N8bWVzc2FnZSxuYW1lLGRpc2N1c3NpZCZxdW90OzwvY29k ZT48L2xpPgoJCTxsaT48c3Bhbj5maWxlPC9zcGFuPiA6IGEgZmlsZSBuYW1lIHJlbGF0aXZl IHRvIHRoZSByb290IG9mIHlvdXIgc2l0ZSwgd2l0aCBvciB3aXRob3V0IGxlYWRpbmcgc2xh c2ggKGUuZy4gPGNvZGU+c291cmNlPSZxdW90O2ZpbGVzL215X3N0cmluZ3MudHh0JnF1b3Q7 PC9jb2RlPik8L2xpPgoJPC91bD48L2xpPgoJPC91bD4KCgk8aDQgY2xhc3M9ImF0dHMiPkZv cm1hdHRpbmc8L2g0PgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxpbWl0PC9z cGFuPiA6IHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gcHVsbCBmcm9tIHRoZSBsaXN0LiBEZWZh dWx0cyB0byAxLiBJZiB5b3Ugc3BlY2lmeSBtb3JlIHRoYW4gdGhlIGF2YWlsYWJsZSBudW1i ZXIgb2YgaXRlbXMgaW4gdGhlIHBvb2wsIHRoZSBlbnRpcmUgcG9vbCB3aWxsIGJlIHVzZWQg YW5kIHByZXNlbnRlZCBpbiBhIHJhbmRvbSBvcmRlcjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5mb3JtPC9zcGFuPiA6IHRoZSBmb3JtIHRvIHVzZSB0byBmb3JtYXQgdGhlIHRl eHQuIElmIG5vdCBzdXBwbGllZCwgd2lsbCB0cnkgdGhlIGNvbnRhaW5lci4gSWYgdGhhdCYj ODIxNztzIG5vdCB1c2VkIGVpdGhlciwgdGhlIHBsdWdpbiB3aWxsIHNpbXBseSBvdXRwdXQg dGhlIGNob3NlbiB0ZXh0IG9uIGl0cyBvd248L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+Y291bnQ8L3NwYW4+IDogd2hldGhlciB0byBjb3VudCA8Y29kZT51cDwvY29kZT4gKHRo ZSBkZWZhdWx0KSBvciA8Y29kZT5kb3duPC9jb2RlPiBmb3IgZWFjaCByYW5kb20gcGllY2Ug b2YgdGV4dDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj50cmltPC9zcGFuPiA6IHdo ZXRoZXIgdG8gcmVtb3ZlIHdoaXRlc3BhY2UgZnJvbSBhcm91bmQgZWFjaCBsaXN0IGl0ZW0g KDEpIG9yIG5vdCAoMCkuIERlZmF1bHQ6IDE8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+ZXNjYXBlPC9zcGFuPiA6IGVzY2FwZSA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bh bj4gZW50aXRpZXMgc3VjaCBhcyA8Y29kZT4mbHQ7PC9jb2RlPiwgPGNvZGU+Jmd0OzwvY29k ZT4gYW5kIDxjb2RlPiZhbXA7PC9jb2RlPiBpbiBhbnkgdGV4dCBpdGVtcy4gVXNlIDxjb2Rl PmVzY2FwZT0mcXVvdDsmcXVvdDs8L2NvZGU+IHRvIHR1cm4gaXQgb2ZmLiBEZWZhdWx0OiA8 Y29kZT5odG1sPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj53cmFwdGFn PC9zcGFuPiA6IHRoZSAoWClIVE1MIHRhZyB3aXRoIHdoaWNoIHRvIHdyYXAgdGhlIGNob3Nl biBzdHJpbmdzLCBlLmcuIDxjb2RlPndyYXB0YWc9JnF1b3Q7dWwmcXVvdDs8L2NvZGU+LiBE ZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5icmVhazwvc3Bh bj4gOiB0aGUgKFgpSFRNTCB0YWcgdG8gcHV0IGJldHdlZW4gc3VjY2Vzc2l2ZSBpdGVtcyBv ZiB0ZXh0LCBlLmcuIDxjb2RlPmJyZWFrPSZxdW90O2xpJnF1b3Q7PC9jb2RlPi4gRGVmYXVs dDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2xhc3M8L3NwYW4+IDog dGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNsYXNzIHRvIGFwcGx5IHRvIHRo ZSBpdGVtIHdyYXB0YWcsIGUuZy4gPGNvZGU+Y2xhc3M9JnF1b3Q7cmFuZG9tX3N0cmluZ3Mm cXVvdDs8L2NvZGU+LiBEZWZhdWx0OiB1bnNldDwvbGk+Cgk8L3VsPgoKCTxoNCBjbGFzcz0i YXR0cyI+UGx1Z2luIGNvbmZpZ3VyYXRpb248L2g0PgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPmRlbGltPC9zcGFuPiA6IHRoZSBkZWxpbWl0ZXIgdG8gdXNlIGJldHdlZW4g d29yZHMvYXR0cmlidXRlIG9wdGlvbnMuIERlZmF1bHQ6IHBpcGUgPGNvZGU+fDwvY29kZT48 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZmlsZV9kZWxpbTwvc3Bhbj4gOiB0aGUg ZGVsaW1pdGVyIHRvIHVzZSB3aGVuIHBhcnNpbmcgZmlsZXMuIElmIGVhY2ggd29yZCBvciBw aHJhc2UgaXMgb24gaXRzIG93biBsaW5lIHRoZW4gdGhlIGRlZmF1bHQgbmV3bGluZSAoPGNv ZGU+XG48L2NvZGU+KSBpcyBzdWZmaWNpZW50LiBJZiB5b3Ugd2lzaCB0byBoYXZlIGFsbCB5 b3VyIHRleHQgc3RyaW5ncyBvbiBvbmUgbGluZSBvZiB0aGUgZmlsZSBkZWxpbWl0ZWQgYnkg c29tZSBvdGhlciBjaGFyYWN0ZXIsIHNldCB5b3VyIG93biBkZWxpbWl0ZXIgaGVyZS4gRm9y IG1vcmUgZWxhYm9yYXRlIGZpbGUgc3RydWN0dXJlcywgeW91IG1heSB1c2UgcmVnZXhlcyBp ZiB5b3UgYWxzbyBzZXQgPGNvZGU+ZmlsZV9kZWxpbV90eXBlPSZxdW90O3JlZ2V4JnF1b3Q7 PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5maWxlX2RlbGltX3R5cGU8 L3NwYW4+IDogY2hvb3NlIGZyb20gZWl0aGVyIDxjb2RlPmNoYXI8L2NvZGU+ICh0aGUgZGVm YXVsdCkgdG8gdGVsbCB0aGUgcGx1Z2luIHRoYXQgeW91IGFyZSBzcGxpdHRpbmcgeW91ciBm aWxlIHVzaW5nIHJlZ3VsYXIgPHNwYW4gY2xhc3M9ImNhcHMiPkFTQ0lJPC9zcGFuPiBjaGFy YWN0ZXJzIGluIHlvdXIgPGNvZGU+ZmlsZV9kZWxpbTwvY29kZT4sIG9yIDxjb2RlPnJlZ2V4 PC9jb2RlPiB0byBpbmRpY2F0ZSB5b3Ugd2lzaCB0byB1c2UgeW91ciBvd24gcmVndWxhciBl eHByZXNzaW9uLiBOb3RlIHRoZXJlIGlzIG5vIG5lZWQgdG8gc3BlY2lmeSB0aGUgcmVndWxh ciBleHByZXNzaW9uIGRlbGltaXRlcnMgYXMgdGhleSB3aWxsIGJlIGNob3NlbiBhdXRvbWF0 aWNhbGx5IGJhc2VkIG9uIHRoZSBjb250ZW50IG9mIHlvdXIgcmVnZXg8L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+aXRlbV9udW08L3NwYW4+IDogc2hvdyB0aGlzIHBhcnRpY3Vs YXIgaXRlbSBmcm9tIHRoZSBwb29sLiBJZiBpdCBkb2VzbiYjODIxNzt0IGV4aXN0LCB5b3Ug Z2V0IHRoZSBmaXJzdCBpdGVtLiBCdXQgd2FpdD8hIFRoaXMgaXMgYSByYW5kb21fdGV4dCBw bHVnaW4sIHdoeSB3b3VsZCBhbnlib2R5IHdhbnQgdG8gc3BlY2lmeSB3aGljaCBpdGVtIHRv IHVzZT8gVHdvIHVzZXMgc3ByaW5nIHRvIG1pbmQ6IEZpcnN0bHksIGlmIHlvdSBoYXZlIGFs cmVhZHkgcmFuZG9taXplZCB5b3VyIGl0ZW1zIGV4dGVybmFsbHkgeW91IG1pZ2h0IHdpc2gg dG8gYWx3YXlzIHBpY2ssIHNheSwgdGhlIGZpcnN0IGl0ZW0uIFNlY29uZGx5ICYjODIxMjsg YW5kIGZhciBtb3JlIHN1YnRseSAmIzgyMTI7IGlmIHlvdSB3aXNoIHRvIHB1bGwgbW9yZSB0 aGFuIG9uZSBpdGVtIGZyb20gYW55IHJhbmRvbWx5IGNob3NlbiBwbGFjZSwgeW91IGNhbiBu ZXN0IHNtZF9yYW5kb21fdGV4dCB0YWdzIGFuZCBtYWtlIHRoZSBpbm5lciB0YWdzIGFsd2F5 cyB1c2UgdGhlIHNhbWUgcm93L3Bvc2l0aW9uIG51bWJlciBhcyB0aGUgcmFuZG9tbHkgY2hv c2VuIG91dGVyIHRhZy4gU2VlIDxhIGhyZWY9IiNlZzciPmV4YW1wbGUgNzwvYT48L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+dmFyX3ByZWZpeDwvc3Bhbj4gOiBpZiB5b3Ugd2lz aCB0byBuZXN0IHNtZF9yYW5kb21fdGV4dCB0YWdzIHRoZW4geW91IG1heSBmaW5kIHRoYXQg dGhlIHJlcGxhY2VtZW50IHZhcmlhYmxlIG5hbWVzIGNsYXNoLiBJZiB0aGF0IGlzIHRoZSBj YXNlIHlvdSBjYW4gYWx0ZXIgdGhlIHByZWZpeCB0byBhdm9pZCB0aGlzLiBEZWZhdWx0OiA8 Y29kZT5zbWRfcm5kX3R4dDwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ c2h1ZmZsZTwvc3Bhbj4gOiBwZXJoYXBzIGEgbGl0dGxlIHBvaW50bGVzcywgdGhpcyBhZGRz IGFuIGV4dHJhIGxheWVyIG9mIHJhbmRvbW5lc3MgdG8gcHJvY2VlZGluZ3MgYnkgc2h1ZmZs aW5nIHRoZSBjaG9zZW4gaXRlbXMgYWdhaW4uIFNvIGlmIHlvdSBoYWQgYXNrZWQgZm9yIDYg aXRlbXMgaW4geW91ciBsaXN0IG9mIDIwIGFuZCB0aGUgcGx1Z2luIGhhZCByYW5kb21seSBj aG9zZW4gdGhlbSBpbiB0aGlzIG9yZGVyOiA8Y29kZT40LCAxNywgMiwgNSwgMTMsIDExPC9j b2RlPiwgdXNpbmcgPGNvZGU+c2h1ZmZsZT0mcXVvdDsxJnF1b3Q7PC9jb2RlPiBtaWdodCBy ZW9yZGVyIHRoZW0gdG8gPGNvZGU+MTcsIDUsIDIsIDExLCA0LCAxMzwvY29kZT48L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZGVidWc8L3NwYW4+IDogc2V0IHRvIDEgdG8gc2hv dyB0aGUgcG9vbCwgdGhlIGZpbGUgbmFtZSAoaWYgYXBwbGljYWJsZSkgYW5kIHRoZSBjaG9z ZW4gaXRlbXMuIFVzZSAyIHRvIHNlZSB3aGF0IDxjb2RlPmZpZWxkPC9jb2RlPnMgYW5kIHJl cGxhY2VtZW50cyBhcmUgYXZhaWxhYmxlIGZvciB5b3VyIHVzZTwvbGk+Cgk8L3VsPgoKCTxo Mz5SZXBsYWNlbWVudCB0YWdzPC9oMz4KCgk8cD5XaGVuIHVzaW5nIGEgZm9ybSBvciBjb250 YWluZXIsIHVzZSB0aGUgZm9sbG93aW5nIHJlcGxhY2VtZW50IHRhZ3MgdG8gaW5zZXJ0IHRo ZSByZWxldmFudCBwaWVjZSBvZiBpbmZvcm1hdGlvbiB3aGVyZXZlciB5b3Ugd2FudCBpdDo8 L3A+CgoJPHA+PGNvZGU+e3NtZF9ybmRfdHh0fTwvY29kZT4gOiB0aGUgdGV4dCBzdHJpbmcg aXRzZWxmIChpZiB5b3UgaGF2ZSBhbHRlcmVkIDxjb2RlPnZhcl9wcmVmaXg8L2NvZGU+IHRo ZW4gdGhpcyByZXBsYWNlbWVudCBuYW1lIGlzIHdoYXRldmVyIHlvdSBoYXZlIGNob3NlbiBh cyB5b3VyIHByZWZpeCk8YnIgLz4KPGNvZGU+e3NtZF9ybmRfdHh0X3Jvd3N9PC9jb2RlPiA6 IHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdG90YWw8YnIgLz4KPGNvZGU+e3NtZF9ybmRfdHh0 X3RoaXNyb3d9PC9jb2RlPiA6IHRoZSBjdXJyZW50IHJvdyBudW1iZXI8YnIgLz4KPGNvZGU+ e3NtZF9ybmRfdHh0X3RoaXNpbmRleH08L2NvZGU+IDogdGhlIGN1cnJlbnQgcm93IGluZGV4 ICh6ZXJvLWJhc2VkKTxiciAvPgo8Y29kZT57c21kX3JuZF90eHRfY2hvc2VuX2l0ZW19PC9j b2RlPiA6IHRoZSB6ZXJvLWJhc2VkIGluZGV4IG51bWJlciBvZiB0aGUgYWN0dWFsIGl0ZW0g c2VsZWN0ZWQgYnkgdGhlIHBsdWdpbjwvcD4KCgk8cD5JbiBhZGRpdGlvbiwgaWYgeW91IGhh dmUgY2hvc2VuIHRvIGV4dHJhY3QgbXVsdGlwbGUgY29sdW1ucyBmcm9tIGEgZGF0YWJhc2Ug dGFibGUsIHlvdSB3aWxsIGhhdmUgZGlzY3JlZXQgcmVwbGFjZW1lbnRzIGF2YWlsYWJsZSBm b3IgZWFjaCBpdGVtIHN1ZmZpeGVkIGJ5IHRoZSBjb2x1bW4gbmFtZS4gU28gaWYgeW91IGhh ZCB1c2VkIDxjb2RlPnNvdXJjZT0mcXVvdDt0eHBfY2F0ZWdvcnl8bmFtZSx0aXRsZSZxdW90 OzwvY29kZT4geW91IHdvdWxkIGhhdmUgdHdvIGV4dHJhIHJlcGxhY2VtZW50cyBjYWxsZWQg PGNvZGU+e3NtZF9ybmRfdHh0X25hbWV9PC9jb2RlPiBhbmQgPGNvZGU+e3NtZF9ybmRfdHh0 X3RpdGxlfTwvY29kZT4uPC9wPgoKCTxoMj5FeGFtcGxlczwvaDI+CgoJPGgzIGlkPSJlZzEi PkV4YW1wbGUgMTogUXVvdGUgb2YgdGhlIGRheTwvaDM+CgoJPHA+UmVhZCBxdW90ZXMgZnJv bSBhIGRhdGFiYXNlLiBUaGUgdGFibGUgaXMgY2FsbGVkICYjODIyMDtxdW90ZXMmIzgyMjE7 IGFuZCBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+ VFhQPC9zcGFuPiBkYXRhYmFzZSAodGhlIGNvbm5lY3Rpb24gbXVzdCBhbHJlYWR5IGJlIG9w ZW4pLiBUaGUgY29sdW1uIGNvbnRhaW5pbmcgdGhlIHF1b3RlcyBpcyBjYWxsZWQgJiM4MjIw O3RleHQmIzgyMjE7OjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxv Y2siPiZsdDt0eHA6c21kX3JhbmRvbV90ZXh0IHR5cGU9JnF1b3Q7ZGF0YWJhc2UmcXVvdDsK ICAgICBzb3VyY2U9JnF1b3Q7cXVvdGVzfHRleHQmcXVvdDsmZ3Q7CiAgJmx0O2RpdiBjbGFz cz0mcXVvdDtxb3RkJnF1b3Q7Jmd0O1F1b3RlIG9mIHRoZSBkYXk6ICZsdDticiAvJmd0O3tz bWRfcm5kX3R4dH0mbHQ7L2RpdiZndDsKJmx0Oy90eHA6c21kX3JhbmRvbV90ZXh0Jmd0Owo8 L2NvZGU+PC9wcmU+CgoJPGgzIGlkPSJlZzIiPkV4YW1wbGUgMjogRml2ZSByYW5kb20gY29t bWVudHM8L2gzPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0 O3R4cDpzbWRfcmFuZG9tX3RleHQgdHlwZT0mcXVvdDtkYXRhYmFzZSZxdW90OwogICAgIHNv dXJjZT0mcXVvdDt0eHBfZGlzY3Vzc3xtZXNzYWdlLG5hbWUmcXVvdDsgbGltaXQ9JnF1b3Q7 NSZxdW90OwogICAgIHdyYXB0YWc9JnF1b3Q7dWwmcXVvdDsgYnJlYWs9JnF1b3Q7bGkmcXVv dDsmZ3Q7CiAgICZsdDtwJmd0OyZsdDtjaXRlJmd0O3tzbWRfcm5kX3R4dF9uYW1lfSZsdDsv Y2l0ZSZndDsgd3JvdGU6Jmx0Oy9wJmd0OwogICAmbHQ7YmxvY2txdW90ZSZndDsKICAge3Nt ZF9ybmRfdHh0X21lc3NhZ2V9CiAgICZsdDsvYmxvY2txdW90ZSZndDsKJmx0Oy90eHA6c21k X3JhbmRvbV90ZXh0Jmd0Owo8L2NvZGU+PC9wcmU+CgoJPGgzIGlkPSJlZzMiPkV4YW1wbGUg MzogVG9wIDEwIHdvcmRzPC9oMz4KCgk8cD5Ub3AgdGVuIHJhbmRvbSBzaWxseSB3b3JkcyBm cm9tIGEgbGlzdCBpbiBhIGZpbGUgaW4gdGhlIHRleHRwYXR0ZXJuIHJvb3QgZm9sZGVyLCBj b3VudGluZyBkb3duIGZyb20gMTAgdG8gMS4gRWFjaCB3b3JkIG11c3QgYmUgb24gYSBzZXBh cmF0ZSByb3cgb2YgdGhlIGZpbGUgdW5sZXNzIHlvdSBhbHRlciB0aGUgPGNvZGU+ZmlsZV9k ZWxpbTwvY29kZT4gYXR0cmlidXRlOyBpbiB3aGljaCBjYXNlIHRoZSB3b3JkcyBtdXN0IGFs bCBhcHBlYXIgb24gdGhlIGZpcnN0IHJvdyBvZiB0aGUgZmlsZS4gSWYgdGhlcmUgYXJlbiYj ODIxNzt0IDEwIGl0ZW1zIGluIHRoZSBmaWxlLCB0aGUgY291bnQgYmVnaW5zIGZyb20gaG93 ZXZlciBoaWdoIGl0IGNhbiBnby48L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xh c3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9yYW5kb21fdGV4dCB0eXBlPSZxdW90O2ZpbGUmcXVv dDsKICAgICBzb3VyY2U9JnF1b3Q7d29yZHMudHh0JnF1b3Q7IGxpbWl0PSZxdW90OzEwJnF1 b3Q7CiAgICAgZm9ybT0mcXVvdDt3b3Jkb3V0JnF1b3Q7IGNvdW50PSZxdW90O2Rvd24mcXVv dDsgLyZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPmFuZCBpbiBmb3JtIDxjb2RlPndvcmRvdXQ8 L2NvZGU+OjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiN7 c21kX3JuZF90eHRfdGhpc3Jvd30gOiB7c21kX3JuZF90eHR9ICZsdDticiAvJmd0Owo8L2Nv ZGU+PC9wcmU+CgoJPGgzIGlkPSJlZzQiPkV4YW1wbGUgNDogUmFuZG9tIGUtbWFpbCBhZGRy ZXNzPC9oMz4KCgk8cD5Vc2UgYSA8Y29kZT4mbHQ7dHhwOnZhcmlhYmxlIC8mZ3Q7PC9jb2Rl PiB0byBob2xkIGEgbGlzdCBvZiByYW5kb20gZS1tYWlsIGFkZHJlc3NlcyBmcm9tIHdoaWNo IG9uZSB3aWxsIGJlIHNlbGVjdGVkIHRvIGJlIHNlbnQgdmlhIGEgemVtX2NvbnRhY3RfcmVi b3JuIGZvcm06PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+ Jmx0O3R4cDp2YXJpYWJsZSBuYW1lPSZxdW90O2VtYWlscyZxdW90OwogICAgIHZhbHVlPSZx dW90O0FsZG91cy5IdXhsZXl8V2lsbGlhbS5TaGFrZXNwZWFyZXxKb2huLkJldGplbWFuJnF1 b3Q7IC8mZ3Q7CiZsdDt0eHA6emVtX2NvbnRhY3QKICAgICB0bz0mIzM5OyZsdDt0eHA6c21k X3JhbmRvbV90ZXh0IHR5cGU9JnF1b3Q7dHhwdmFyJnF1b3Q7CiAgICAgc291cmNlPSZxdW90 O2VtYWlscyZxdW90OyAvJmd0O0B3cml0ZXJzLmNvbSYjMzk7Jmd0OwogIC8vIE90aGVyIHpl bV9jb250YWN0IG9wdGlvbnMKJmx0Oy90eHA6emVtX2NvbnRhY3QmZ3Q7CjwvY29kZT48L3By ZT4KCgk8aDMgaWQ9ImVnNSI+RXhhbXBsZSA1OiBSYW5kb20gaW1hZ2Ugc2VsZWN0aW9uPC9o Mz4KCgk8cD5JbmRpcmVjdGx5LCBub3QganVzdCBmb3IgdGV4dCEgQ2hvb3NlIHR3byByYW5k b20gaW1hZ2UgSURzIGZyb20gYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBnaXZlbiBpbiB0aGUg Y3VzdG9tIGZpZWxkIGxhYmVsbGVkICYjODIyMDtteV9pbWFnZXMmIzgyMjE7IGFuZCBkaXNw bGF5IHRoZW0gdmlhIHRoZSBidWlsdC1pbiA8Y29kZT4mbHQ7dHhwOmltYWdlIC8mZ3Q7PC9j b2RlPiB0YWcuPC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+ Jmx0O3R4cDpzbWRfcmFuZG9tX3RleHQgdHlwZT0mcXVvdDtmaWVsZCZxdW90OwogICAgIHNv dXJjZT0mcXVvdDtteV9pbWFnZXMmcXVvdDsgbGltaXQ9JnF1b3Q7MiZxdW90OyBkZWxpbT0m cXVvdDssJnF1b3Q7Jmd0OwogICZsdDt0eHA6aW1hZ2UgaWQ9JnF1b3Q7e3NtZF9ybmRfdHh0 fSZxdW90OyAvJmd0OwombHQ7L3R4cDpzbWRfcmFuZG9tX3RleHQmZ3Q7CjwvY29kZT48L3By ZT4KCgk8aDMgaWQ9ImVnNiI+RXhhbXBsZSA2OiBJdGVtIGZyb20gYSBmYWN0IGZpbGU8L2gz PgoKCTxwPkFkZCB0aGlzIHRvIHlvdXIgPGNvZGU+ZmlsZXM8L2NvZGU+IGZvcm0gdG8gZGlz cGxheSBhIHJhbmRvbSBmYWN0IGFib3V0IGVhY2ggZmlsZSBmcm9tIGEgcGlwZS1kZWxtaWl0 ZWQgbGlzdCBkZWZpbmVkIGluIHRoZSBmaWxlJiM4MjE3O3MgPGNvZGU+ZGVzY3JpcHRpb248 L2NvZGU+IGZpZWxkOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxv Y2siPiZsdDt0eHA6c21kX3JhbmRvbV90ZXh0IHR5cGU9JnF1b3Q7ZmllbGQmcXVvdDsKICAg ICBzb3VyY2U9JnF1b3Q7ZGVzY3JpcHRpb24mcXVvdDsmZ3Q7CiZsdDticiAvJmd0O0ZBQ1Q6 IHtzbWRfcm5kX3R4dH0KJmx0Oy90eHA6c21kX3JhbmRvbV90ZXh0Jmd0Owo8L2NvZGU+PC9w cmU+CgoJPGgzIGlkPSJlZzciPkV4YW1wbGUgNzogS2VlcGluZyBpdGVtcyBpbiBzeW5jPC9o Mz4KCgk8cD5TYXkgeW91IGhhdmUgYSBzZXQgb2YgdHhwOnZhcmlhYmxlcyB0aGF0IGNvbnRh aW4gbGlzdHMgb2YgcmVsYXRlZCB0aGluZ3M6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxj b2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDp2YXJpYWJsZSBuYW1lPSZxdW90O2hwX2ZvcmVu YW1lJnF1b3Q7Jmd0OwogIEhhcnJ5IHwgSGVybWlvbmUgfCBSb24gfCBTZXZlcnVzCiZsdDsv dHhwOnZhcmlhYmxlJmd0OwombHQ7dHhwOnZhcmlhYmxlIG5hbWU9JnF1b3Q7aHBfc3VybmFt ZSZxdW90OyZndDsKICBQb3R0ZXIgfCBHcmFuZ2VyIHwgV2Vhc2xleSB8IFNuYXBlCiZsdDsv dHhwOnZhcmlhYmxlJmd0OwombHQ7dHhwOnZhcmlhYmxlIG5hbWU9JnF1b3Q7aHBfYWdlJnF1 b3Q7Jmd0OwogIDE0IHwgMTYgfCAxNSB8IDEzMAombHQ7L3R4cDp2YXJpYWJsZSZndDsKPC9j b2RlPjwvcHJlPgoKCTxwPkhvdyB3b3VsZCB5b3UgZW5zdXJlIHlvdSByZXRyaWV2ZWQgdGhl ICYjODIxNjtjb2x1bW4mIzgyMTc7IHRoYXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgY29ycmVj dCB2YWx1ZSBmb3IgZWFjaCBjaGFyYWN0ZXI/IExpa2UgdGhpczo8L3A+Cgo8cHJlIGNsYXNz PSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9yYW5kb21fdGV4dCB0 eXBlPSZxdW90O3R4cHZhciZxdW90OwogICAgIHNvdXJjZT0mcXVvdDtocF9mb3JlbmFtZSZx dW90OyBsaW1pdD0mcXVvdDsyJnF1b3Q7IHdyYXB0YWc9JnF1b3Q7dWwmcXVvdDsKICAgICBi cmVhaz0mcXVvdDtsaSZxdW90OyZndDsKICAgQ2hhcmFjdGVyOiB7c21kX3JuZF90eHR9CiAg ICZsdDt0eHA6c21kX3JhbmRvbV90ZXh0IHR5cGU9JnF1b3Q7dHhwdmFyJnF1b3Q7CiAgICAg c291cmNlPSZxdW90O2hwX3N1cm5hbWUmcXVvdDsKICAgICBpdGVtX251bT0mcXVvdDt7c21k X3JuZF90eHRfY2hvc2VuX2l0ZW19JnF1b3Q7IC8mZ3Q7CiAgIGlzICZsdDt0eHA6c21kX3Jh bmRvbV90ZXh0IHR5cGU9JnF1b3Q7dHhwdmFyJnF1b3Q7CiAgICAgc291cmNlPSZxdW90O2hw X2FnZSZxdW90OwogICAgIGl0ZW1fbnVtPSZxdW90O3tzbWRfcm5kX3R4dF9jaG9zZW5faXRl bX0mcXVvdDsgLyZndDsKICAgeWVhcnMgb2xkCiZsdDsvdHhwOnNtZF9yYW5kb21fdGV4dCZn dDsKPC9jb2RlPjwvcHJlPgoKCTxwPkFzIHlvdSBjYW4gc2VlLCB0aGUgZmlyc3Qgc21kX3Jh bmRvbV90ZXh0IGNob29zZXMgdHdvIHJhbmRvbSBjaGFyYWN0ZXIgZm9yZW5hbWVzIGZyb20g dGhlIGZpcnN0IHR4cDp2YXJpYWJsZS4gVGhlbiwgZm9yIGVhY2ggb2YgdGhlIGNob3NlbiBm b3JlbmFtZXMsIHRoZSBzZWNvbmQgYW5kIHRoaXJkIChpbm5lcikgc21kX3JhbmRvbV90ZXh0 IHRhZ3MgZ28gYW5kIGZldGNoIDxlbT50aGUgc2FtZSBjb2x1bW48L2VtPiBhcyB0aGUgb25l IGp1c3QgY2hvc2VuLiBJdCB1c2VzIDxjb2RlPntzbWRfcm5kX3R4dF9jaG9zZW5faXRlbX08 L2NvZGU+IHRvIGZvcmNlIHRoZSBwbHVnaW4gdG8gcmVhZCB0aGUgY29ycmVjdCBjb2x1bW4u PC9wPgoKCTxoMj5DaGFuZ2Vsb2c8L2gyPgoKCTx1bD4KCQk8bGk+MTAgT2N0IDA4IHwgMC4x IHwgSW5pdGlhbCByZWxlYXNlPC9saT4KCQk8bGk+MTcgTWFyIDA5IHwgMC4xMSB8IEFkZGVk IDxjb2RlPnRyaW08L2NvZGU+IGFuZCA8Y29kZT5lc2NhcGU8L2NvZGU+PC9saT4KCQk8bGk+ MjYgSnVsIDA5IHwgMC4xMiB8IEFkZGVkIDxjb2RlPml0ZW1fbnVtPC9jb2RlPiwgPGNvZGU+ c2h1ZmZsZTwvY29kZT4gYW5kIHRoZSByZXBsYWNlbWVudCB0YWcgPGNvZGU+e3NtZF9ybmRf dHh0X2Nob3Nlbl9pdGVtfTwvY29kZT48L2xpPgoJCTxsaT4yOCBGZWIgMTEgfCAwLjEzIHwg UGVybWl0dGVkIG11bHRpcGxlIGRhdGFiYXNlIGNvbHVtbnMgdG8gYmUgc2VsZWN0ZWQgaW4g b25lIHBsdWdpbiBjYWxsICh0aGFua3MgZ2lhbXBhYmxvKSA7IGFkZGVkIDxjb2RlPnZhcl9w cmVmaXg8L2NvZGU+PC9saT4KCQk8bGk+MDMgTWF5IDExIHwgMC4xNCB8IEFkZGVkIDxjb2Rl PmZpbGVfZGVsaW1fdHlwZTwvY29kZT4gYW5kIHBlcm1pdHRlZCByZWdleGVzIGluIDxjb2Rl PmZpbGVfZGVsaW08L2NvZGU+ICh0aGFua3MgTXlPdGhlSGVkZ2VGb3gpPC9saT4KCTwvdWw+ Cgo8L2Rpdj4KPCEtLSAqKiogQkVHSU4gUExVR0lOIENTUyAqKiogLS0+CjxzdHlsZSB0eXBl PSJ0ZXh0L2NzcyI+CiNzbWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojc21kX2hlbHAg Y29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXci LCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNmMGU2OGM7IGNvbG9y OiMzMzM7IH0KI3NtZF9oZWxwIGNvZGUuYmxvY2sgeyBmb250LXdlaWdodDpub3JtYWw7IGJv cmRlcjoxcHggZG90dGVkICM5OTk7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHgg MjBweDsgcGFkZGluZzoxMHB4OyB9CiNzbWRfaGVscCBoMSB7IGZvbnQ6IDIwcHggR2Vvcmdp YSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9o ZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHgg MCAwOyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0KI3NtZF9oZWxwIGgzIHsg Zm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4 OyBtYXJnaW46IDIwcHggMCAwOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyB9CiNzbWRf aGVscCBoNCB7IGZvbnQ6IGJvbGQgMTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNw YWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMDsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2Fz ZTsgfQojc21kX2hlbHAgLmF0bm0geyBmb250LXdlaWdodDpib2xkOyB9CiNzbWRfaGVscCAu bWFuZCB7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IH0KI3NtZF9oZWxwIHRhYmxlIHsgd2lk dGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1ib3R0b206MWVtOyB9CiNzbWRf aGVscCB0ZCwgI3NtZF9oZWxwIHRoIHsgYm9yZGVyOjFweCBzb2xpZCAjOTk5OyBwYWRkaW5n Oi41ZW0gMDsgfQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNz bWRfaGVscCAuaW1wb3J0YW50IHsgY29sb3I6cmVkOyB9CiNzbWRfaGVscCBsaSB7IG1hcmdp bjo1cHggMjBweCA1cHggMzBweDsgfQojc21kX2hlbHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1 cHg7IH0KPC9zdHlsZT4KPCEtLSAqKiogRU5EIFBMVUdJTiBDU1MgKioqIC0tPgoiO3M6NDoi Y29kZSI7czo2MjMxOiJmdW5jdGlvbiBzbWRfcmFuZG9tX3RleHQoJGF0dHMsICR0aGluZz1O VUxMKSB7DQoJZ2xvYmFsICR0eHBjZmcsICR2YXJpYWJsZSwgJHByZXRleHQsICR0aGlzYXJ0 aWNsZSwgJHRoaXNmaWxlLCAkdGhpc2xpbmssICR0aGlzaW1hZ2U7DQoNCglleHRyYWN0KGxB dHRzKGFycmF5KA0KCQkndHlwZScgICAgICAgICAgICA9PiAnc3RyaW5nJywNCgkJJ3NvdXJj ZScgICAgICAgICAgPT4gJ2hlbGxvIHdvcmxkJywNCgkJJ2RlbGltJyAgICAgICAgICAgPT4g J3wnLA0KCQknZmlsZV9kZWxpbScgICAgICA9PiAnXG4nLA0KCQknZmlsZV9kZWxpbV90eXBl JyA9PiAnY2hhcicsIC8vIGNoYXIgb3IgcmVnZXgNCgkJJ291dF9kZWxpbScgICAgICAgPT4g JywnLA0KCQknaXRlbV9udW0nICAgICAgICA9PiAnJywNCgkJJ3NodWZmbGUnICAgICAgICAg PT4gJzAnLA0KCQkndHJpbScgICAgICAgICAgICA9PiAnMScsDQoJCSdlc2NhcGUnICAgICAg ICAgID0+ICdodG1sJywNCgkJJ2Zvcm0nICAgICAgICAgICAgPT4gJycsDQoJCSdsaW1pdCcg ICAgICAgICAgID0+ICcxJywNCgkJJ2NvdW50JyAgICAgICAgICAgPT4gJ3VwJywNCgkJJ3dy YXB0YWcnICAgICAgICAgPT4gJycsDQoJCSdicmVhaycgICAgICAgICAgID0+ICcnLA0KCQkn dmFyX3ByZWZpeCcgICAgICA9PiAnc21kX3JuZF90eHQnLA0KCQknY2xhc3MnICAgICAgICAg ICA9PiAnJywNCgkJJ2RlYnVnJyAgICAgICAgICAgPT4gJzAnLA0KCSksICRhdHRzKSk7DQoN Cgkkc3JjcHQgPSBleHBsb2RlKCRkZWxpbSwgJHNvdXJjZSk7DQoJJGxpbWl0ID0gKCRsaW1p dCA8IDEpID8gMSA6ICRsaW1pdDsNCgkkZnJvbSA9IGFycmF5KCk7DQoJJGl0ZW1zID0gYXJy YXkoKTsNCgkkbXVsdGlyb3cgPSAxOw0KDQoJc3dpdGNoICgkdHlwZSkgew0KCQljYXNlICJm aWVsZCI6DQoJCQlpZiAoaXNzZXQoJHRoaXNmaWxlWyRzcmNwdFswXV0pICYmICR0aGlzZmls ZVskc3JjcHRbMF1dICE9ICIiKSB7DQoJCQkJJGZyb20gPSAkdGhpc2ZpbGVbJHNyY3B0WzBd XTsNCgkJCX0gZWxzZSBpZiAoaXNzZXQoJHRoaXNsaW5rWyRzcmNwdFswXV0pICYmICR0aGlz bGlua1skc3JjcHRbMF1dICE9ICIiKSB7DQoJCQkJJGZyb20gPSAkdGhpc2xpbmtbJHNyY3B0 WzBdXTsNCgkJCX0gZWxzZSBpZiAoaXNzZXQoJHRoaXNpbWFnZVskc3JjcHRbMF1dKSAmJiAk dGhpc2ltYWdlWyRzcmNwdFswXV0gIT0gIiIpIHsNCgkJCQkkZnJvbSA9ICR0aGlzaW1hZ2Vb JHNyY3B0WzBdXTsNCgkJCX0gZWxzZSBpZiAoaXNzZXQoJHByZXRleHRbJHNyY3B0WzBdXSkg JiYgJHByZXRleHRbJHNyY3B0WzBdXSAhPSAiIikgew0KCQkJCSRmcm9tID0gJHByZXRleHRb JHNyY3B0WzBdXTsNCgkJCX0gZWxzZSBpZiAoaXNzZXQoJHRoaXNhcnRpY2xlWyRzcmNwdFsw XV0pICYmICR0aGlzYXJ0aWNsZVskc3JjcHRbMF1dICE9ICIiKSB7DQoJCQkJJGZyb20gPSAk dGhpc2FydGljbGVbJHNyY3B0WzBdXTsNCgkJCX0NCgkJCWlmICgkZnJvbSkgew0KCQkJCSRm cm9tID0gZXhwbG9kZSgkZGVsaW0sICRmcm9tKTsNCgkJCQkkbGltaXQgPSAoY291bnQoJGZy b20pIDwgJGxpbWl0KSA/IGNvdW50KCRmcm9tKSA6ICRsaW1pdDsNCgkJCQkkaXRlbXMgPSAo JGl0ZW1fbnVtICE9ICcnKSA/ICgoY291bnQoJGZyb20pID49ICRpdGVtX251bSkgPyAkaXRl bV9udW0gOiAwKSA6IGFycmF5X3JhbmQoJGZyb20sICRsaW1pdCk7DQoJCQl9DQoJCQlicmVh azsNCgkJY2FzZSAidHhwdmFyIjoNCgkJCSRmcm9tID0gZXhwbG9kZSgkZGVsaW0sICR2YXJp YWJsZVskc3JjcHRbMF1dKTsNCgkJCSRsaW1pdCA9IChjb3VudCgkZnJvbSkgPCAkbGltaXQp ID8gY291bnQoJGZyb20pIDogJGxpbWl0Ow0KCQkJJGl0ZW1zID0gKCRpdGVtX251bSAhPSAn JykgPyAoKGNvdW50KCRmcm9tKSA+PSAkaXRlbV9udW0pID8gJGl0ZW1fbnVtIDogMCkgOiBh cnJheV9yYW5kKCRmcm9tLCAkbGltaXQpOw0KCQkJYnJlYWs7DQoJCWNhc2UgInVybHZhciI6 DQoJCQkkZnJvbSA9IGV4cGxvZGUoJGRlbGltLCBncHMoJHNyY3B0WzBdKSk7DQoJCQkkbGlt aXQgPSAoY291bnQoJGZyb20pIDwgJGxpbWl0KSA/IGNvdW50KCRmcm9tKSA6ICRsaW1pdDsN CgkJCSRpdGVtcyA9ICgkaXRlbV9udW0gIT0gJycpID8gKChjb3VudCgkZnJvbSkgPj0gJGl0 ZW1fbnVtKSA/ICRpdGVtX251bSA6IDApIDogYXJyYXlfcmFuZCgkZnJvbSwgJGxpbWl0KTsN CgkJCWJyZWFrOw0KCQljYXNlICJkYXRhYmFzZSI6DQoJCQkkd2hlcmUgPSAiMT0xIE9SREVS IEJZIFJBTkQoKSBMSU1JVCAiLiRsaW1pdDsNCgkJCSRmcm9tID0gc2FmZV9yb3dzKCRzcmNw dFsxXSwgJHNyY3B0WzBdLCAkd2hlcmUsICRkZWJ1Zyk7DQoJCQkkbXVsdGlyb3cgPSBjb3Vu dChleHBsb2RlKCcsJywgJHNyY3B0WzFdKSk7DQoJCQkkbGltaXQgPSBjb3VudCgkZnJvbSk7 DQoJCQkkaXRlbXMgPSAoJGl0ZW1fbnVtICE9ICcnKSA/ICgoY291bnQoJGZyb20pID49ICRp dGVtX251bSkgPyAkaXRlbV9udW0gOiAwKSA6IGFycmF5X2tleXMoJGZyb20pOw0KCQkJYnJl YWs7DQoJCWNhc2UgImZpbGUiOg0KCQkJJHBhdGggPSAkdHhwY2ZnWydkb2Nfcm9vdCddLkRT Lmx0cmltKCRzcmNwdFswXSwgRFMpOw0KCQkJaWYgKCRkZWJ1Zykgew0KCQkJCWVjaG8gIisr IEZJTEUgUEFUSCArKyI7DQoJCQkJZG1wKCRwYXRoKTsNCgkJCX0NCgkJCWlmIChmaWxlX2V4 aXN0cygkcGF0aCkpIHsNCgkJCQlpZiAoJGZpbGVfZGVsaW0gPT0gJ1xuJykgew0KCQkJCQkk ZnJvbSA9IGRvQXJyYXkoZmlsZSgkcGF0aCksICdydHJpbScpOw0KCQkJCX0gZWxzZSBpZiAo JGZpbGVfZGVsaW1fdHlwZSA9PSAnY2hhcicpIHsNCgkJCQkJJGZyb20gPSBleHBsb2RlKCRm aWxlX2RlbGltLCBmaWxlX2dldF9jb250ZW50cygkcGF0aCkpOw0KCQkJCX0gZWxzZSBpZiAo JGZpbGVfZGVsaW1fdHlwZSA9PSAncmVnZXgnKSB7CQkJCQkNCgkJCQkJLy8gQ2Fubm90IGd1 YXJhbnRlZSB0aGF0IGEgZml4ZWQgZGVsaW1pdGVyIHdvbid0IGJyZWFrIHByZWdfbWF0Y2gg KGFuZCBwcmVnX3F1b3RlIGRvZXNuJ3QgaGVscCkgc28NCgkJCQkJLy8gZHluYW1pY2FsbHkg YXNzaWduIHRoZSBkZWxpbWl0ZXIgYmFzZWQgb24gdGhlIGZpcnN0IGVudHJ5IGluICRkbG1Q b29sIHRoYXQgaXMgTk9UIGluIHRoZSBmaWxlX2RlbGltIGF0dHJpYnV0ZS4NCgkJCQkJLy8g VGhpcyBtaW5pbWlzZXMgKGRvZXMgbm90IGVsaW1pbmF0ZSkgdGhlIHBvc3NpYmlsaXR5IG9m IGEgVFhQLWluaXRpYXRlZCBwcmVnX21hdGNoIGVycm9yLCB3aGlsZSBzdGlsbA0KCQkJCQkv LyBwcmVzZXJ2aW5nIGVycm9ycyBvdXRzaWRlIFRYUCdzIGNvbnRyb2wgKGUuZy4gbWFuZ2xl ZCB1c2VyLXN1Ym1pdHRlZCBQQ1JFIHBhdHRlcm4pDQoJCQkJCSRkbG1Qb29sID0gYXJyYXko Jy8nLCAnQCcsICcjJywgJ34nLCAnYCcsICd8JywgJyEnLCAnJScpOw0KCQkJCQkkZGxtID0g YXJyYXlfbWVyZ2UoYXJyYXlfZGlmZigkZGxtUG9vbCwgcHJlZ19zcGxpdCgnLy8nLCAkZmls ZV9kZWxpbSwgLTEpKSk7DQoJCQkJCSRkbG0gPSAoY291bnQoJGRsbSkgPiAwKSA/ICRkbG1b MF0uJGZpbGVfZGVsaW0uJGRsbVswXSA6ICRmaWxlX2RlbGltOw0KCQkJCQlpZiAoJGRlYnVn KSB7DQoJCQkJCQllY2hvICIrKyBSRUdFWCArKyI7DQoJCQkJCQlkbXAoJGRsbSk7DQoJCQkJ CX0NCgkJCQkJJGZyb20gPSBwcmVnX3NwbGl0KCRkbG0sIGZpbGVfZ2V0X2NvbnRlbnRzKCRw YXRoKSk7DQoJCQkJfQ0KCQkJCWlmICgkZGVidWcgPiAzKSB7DQoJCQkJCWVjaG8gIisrIFNQ TElUIEZJTEUgQ09OVEVOVFMgKysiOw0KCQkJCQlkbXAoJGZyb20pOw0KCQkJCX0NCgkJCQkk bGltaXQgPSAoY291bnQoJGZyb20pIDwgJGxpbWl0KSA/IGNvdW50KCRmcm9tKSA6ICRsaW1p dDsNCgkJCQkkaXRlbXMgPSAoJGl0ZW1fbnVtICE9ICcnKSA/ICgoY291bnQoJGZyb20pID49 ICRpdGVtX251bSkgPyAkaXRlbV9udW0gOiAwKSA6IGFycmF5X3JhbmQoJGZyb20sICRsaW1p dCk7DQoJCQl9DQoJCQlicmVhazsNCgkJY2FzZSAic3RyaW5nIjoNCgkJZGVmYXVsdDoNCgkJ CSRmcm9tID0gJHNyY3B0Ow0KCQkJJGxpbWl0ID0gKGNvdW50KCRmcm9tKSA8ICRsaW1pdCkg PyBjb3VudCgkZnJvbSkgOiAkbGltaXQ7DQoJCQkkaXRlbXMgPSAoJGl0ZW1fbnVtICE9ICcn KSA/ICgoY291bnQoJGZyb20pID49ICRpdGVtX251bSkgPyAkaXRlbV9udW0gOiAwKSA6IGFy cmF5X3JhbmQoJGZyb20sICRsaW1pdCk7DQoJCQlicmVhazsNCgl9DQoNCgkvLyBGb3JjZSBh cnJheSBpZiBpdCBpc24ndCBhbHJlYWR5IChzb21lIFBIUCBmdW5jdGlvbnMgcmV0dXJuIHNp bmdsZSB2YWx1ZXMpDQoJaWYgKCFpc19hcnJheSgkaXRlbXMpKSB7DQoJCSRpdGVtcyA9IGFy cmF5KCRpdGVtcyk7DQoJfQ0KDQoJaWYgKCRzaHVmZmxlKSB7DQoJCXNodWZmbGUoJGl0ZW1z KTsNCgl9DQoNCglpZiAoJG11bHRpcm93ID09IDEpIHsNCgkJJGZyb20gPSAoJHRyaW0pID8g ZG9BcnJheSgkZnJvbSwgJ3RyaW0nKSA6ICRmcm9tOw0KCX0NCg0KCWlmICgkZGVidWcpIHsN CgkJZWNobyAiKysgSVRFTSBQT09MICsrIjsNCgkJZG1wKCRmcm9tKTsNCgkJZWNobyAiKysg Q0hPU0VOIElURU1TICsrIjsNCgkJZG1wKCRpdGVtcyk7DQoJfQ0KCWlmICgkZGVidWcgPiAy KSB7DQoJCWVjaG8gIisrIFBSRVRFWFQgKysiOw0KCQlkbXAoJHByZXRleHQpOw0KCQlpZiAo aXNzZXQoJHRoaXNmaWxlKSkgew0KCQkJZWNobyAiKysgVEhJUyBGSUxFICsrIjsNCgkJCWRt cCgkdGhpc2ZpbGUpOw0KCQl9DQoJCWlmIChpc3NldCgkdGhpc2xpbmspKSB7DQoJCQllY2hv ICIrKyBUSElTIExJTksgKysiOw0KCQkJZG1wKCR0aGlzbGluayk7DQoJCX0NCgkJaWYgKGlz c2V0KCR0aGlzaW1hZ2UpKSB7DQoJCQllY2hvICIrKyBUSElTIElNQUdFICsrIjsNCgkJCWRt cCgkdGhpc2ltYWdlKTsNCgkJfQ0KCQlpZiAoaXNzZXQoJHRoaXNhcnRpY2xlKSkgew0KCQkJ ZWNobyAiKysgVEhJUyBBUlRJQ0xFICsrIjsNCgkJCWRtcCgkdGhpc2FydGljbGUpOw0KCQl9 DQoJfQ0KDQoJLy8gRmluZCBvdXQgaG93IHRvIHBsb25rIHRoZSBvdXRwdXQNCgkkd2hhdCA9 ICgkZm9ybSkgPyBmZXRjaF9mb3JtKCRmb3JtKSA6ICgoJHRoaW5nKSA/ICR0aGluZyA6ICd7 Jy4kdmFyX3ByZWZpeC4nfScpOw0KDQoJLy8gUGljayB0aGUgZ2l2ZW4gJGl0ZW1zIGtleXMg b3V0IG9mIHRoZSAkZnJvbSBhcnJheSBhbmQgZGlzcGxheSB0aGVtDQoJJG91dCA9IGFycmF5 KCk7DQoJJGN0ciA9ICgkY291bnQ9PSJ1cCIpID8gMCA6ICRsaW1pdC0xOw0KCWZvcmVhY2gg KCRpdGVtcyBhcyAkaXRlbSkgew0KCQkkcmVwbGFjZW1lbnQgPSBhcnJheSgpOw0KCQlpZiAo aXNfYXJyYXkoJGZyb21bJGl0ZW1dKSkgew0KCQkJZm9yZWFjaCAoJGZyb21bJGl0ZW1dIGFz ICRqZHggPT4gJHZhbCkgew0KCQkJCSR2YWwgPSAoJHRyaW0pID8gdHJpbSgkdmFsKSA6ICR2 YWw7DQoJCQkJJHJlcGxhY2VtZW50Wyd7Jy4kdmFyX3ByZWZpeC4nXycuJGpkeC4nfSddID0g KCRlc2NhcGUgPT0gJ2h0bWwnKSA/IGh0bWxzcGVjaWFsY2hhcnMoJHZhbCkgOiAkdmFsOw0K CQkJfQ0KCQkJJGZyb21bJGl0ZW1dID0gam9pbigkb3V0X2RlbGltLCAkZnJvbVskaXRlbV0p Ow0KCQkJJGZyb21bJGl0ZW1dID0gKCR0cmltKSA/IHRyaW0oJGZyb21bJGl0ZW1dKSA6ICRm cm9tWyRpdGVtXTsNCgkJfQ0KCQkkcmVwbGFjZW1lbnRbJ3snLiR2YXJfcHJlZml4Lid9J10g PSAoJGVzY2FwZSA9PSAnaHRtbCcpID8gaHRtbHNwZWNpYWxjaGFycygkZnJvbVskaXRlbV0p IDogJGZyb21bJGl0ZW1dOw0KCQkkcmVwbGFjZW1lbnRbJ3snLiR2YXJfcHJlZml4Lidfcm93 c30nXSA9ICRsaW1pdDsNCgkJJHJlcGxhY2VtZW50Wyd7Jy4kdmFyX3ByZWZpeC4nX3RoaXNp bmRleH0nXSA9ICRjdHI7DQoJCSRyZXBsYWNlbWVudFsneycuJHZhcl9wcmVmaXguJ190aGlz cm93fSddID0gJGN0ciArIDE7DQoJCSRyZXBsYWNlbWVudFsneycuJHZhcl9wcmVmaXguJ19j aG9zZW5faXRlbX0nXSA9ICRpdGVtOw0KCQlpZiAoJGRlYnVnID4gMSkgew0KCQkJZWNobyAi KysgUkVQTEFDRU1FTlRTICsrIjsNCgkJCWRtcCgkcmVwbGFjZW1lbnQpOw0KCQl9DQoJCSRv dXRbXSA9IHBhcnNlKHN0cnRyKCR3aGF0LCAkcmVwbGFjZW1lbnQpKTsNCgkJJGN0ciA9ICgk Y291bnQ9PSJ1cCIpID8gJGN0cisxIDogJGN0ci0xOw0KCX0NCg0KCXJldHVybiBkb1dyYXAo JG91dCwgJHdyYXB0YWcsICRicmVhaywgJGNsYXNzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIw IjtzOjU6ImZsYWdzIjtzOjE6IjAiO3M6NToib3JkZXIiO3M6MToiNSI7czozOiJtZDUiO3M6 MzI6Ijk3ZmQzYTg4NGU0OWFmN2U3ZWZkZjE4Mjc3ZjkzNGIxIjt9