# aro_slideshow v0.4.1 # Creates an animated slideshow of images for the current article # Aeron Glemann # http://www.electricprism.com/aeron # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjc6InZlcnNpb24iO3M6NToiMC40LjEiO3M6NjoiYXV0aG9yIjtzOjEzOiJBZXJv biBHbGVtYW5uIjtzOjEwOiJhdXRob3JfdXJpIjtzOjM0OiJodHRwOi8vd3d3LmVsZWN0cmlj cHJpc20uY29tL2Flcm9uIjtzOjExOiJkZXNjcmlwdGlvbiI7czo2MzoiQ3JlYXRlcyBhbiBh bmltYXRlZCBzbGlkZXNob3cgb2YgaW1hZ2VzIGZvciB0aGUgY3VycmVudCBhcnRpY2xlIjtz OjQ6InR5cGUiO2k6MDtzOjQ6Im5hbWUiO3M6MTM6ImFyb19zbGlkZXNob3ciO3M6NDoiaGVs cCI7czo2OTc2OiIKCTxoMT5hcm9fc2xpZGVzaG93PC9oMT4KCTxwPlRoaXMgcGx1Z2luIGNy ZWF0ZXMgYSBzdHJlYW1pbmcsIGFuaW1hdGVkIHNsaWRlc2hvdyBvZiBpbWFnZXMuIEhlcmUg aXMgYW4gPGEgaHJlZj0iaHR0cDovL3d3dy5kZWxvcm9jci5uZXQiPmV4YW1wbGU8L2E+Ljwv cD4KCTxwPkRvd25sb2FkOiA8YSBocmVmPSJodHRwOi8vd3d3LmVsZWN0cmljcHJpc20uY29t L3BsdWdpbnMvYXJvX3NsaWRlc2hvdy50eHQiPmFyb19zbGlkZXNob3cudHh0PC9hPjwvcD4K CTxoMj5TZXR1cDwvaDI+Cgk8cD48c3Ryb25nPjEuIEFyZSB5b3UgY3VycmVudGx5IHVzaW5n IHRoZSBQcm90b3R5cGUgamF2YXNjcmlwdCBsaWJyYXJ5Pzwvc3Ryb25nPjwvcD4KCTxwPjxl bT5PciwgaXMgdGhlIGZpbGUgPGNvZGU+cHJvdG90eXBlLmpzPC9jb2RlPiBvciA8Y29kZT5w cm90b3R5cGUubGl0ZS5qczwvY29kZT4gY3VycmVudGx5IGxpbmtlZCB0byBmcm9tIHdpdGhp biB5b3VyIEhUTUwgZG9jdW1lbnQ/PC9lbT48L3A+Cgk8cD5JZiA8c3Ryb25nPk5PVDwvc3Ry b25nPiBkb3dubG9hZCB0aGUgZmlsZSA8YSBocmVmPSJodHRwOi8vbW9vZngubWFkNG1pbGsu bmV0L3NjcmlwdHMvcHJvdG90eXBlLmxpdGUuanMiPmhlcmU8L2E+LCBhbmQgbGluayB0byBp dCBhcyBzbyBmcm9tIHdpdGhpbiB0aGUgaGVhZCBvZiB5b3VyIEhUTUwgZG9jdW1lbnQ6PC9w Pgo8cHJlPgombHQ7c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSImbHQ7dHhw OnNpdGVfdXJsIC8mZ3Q7cHJvdG90eXBlLmxpdGUuanMiJmd0OyZsdDsvc2NyaXB0Jmd0Owo8 L3ByZT4KCTxwPk9yIDxzdHJvbmc+WU9VIE1VU1Q8L3N0cm9uZz4gdXNlIHRoZSBzbGlkZXNo b3cgcGx1Z2luIHdpdGggdGhlIDxjb2RlPnByb3RvdHlwZT0iMSI8L2NvZGU+IGF0dHJpYnV0 ZS48L3A+Cgk8cD48c3Ryb25nPjIuIEFyZSB5b3UgY3VycmVudGx5IHVzaW5nIHRoZSBNb29G WCBqYXZhc2NyaXB0IGxpYnJhcnk/PC9zdHJvbmc+PC9wPgoJPHA+PGVtPk9yLCBpcyB0aGUg ZmlsZSA8Y29kZT5tb28uZnguanM8L2NvZGU+IGN1cnJlbnRseSBsaW5rZWQgdG8gZnJvbSB3 aXRoaW4geW91ciBIVE1MIGRvY3VtZW50PzwvZW0+PC9wPgoJPHA+SWYgPHN0cm9uZz5OT1Q8 L3N0cm9uZz4gZG93bmxvYWQgdGhlIGZpbGUgPGEgaHJlZj0iaHR0cDovL21vb2Z4Lm1hZDRt aWxrLm5ldC9zY3JpcHRzL21vby5meC5qcyI+aGVyZTwvYT4sIGFuZCBsaW5rIHRvIGl0IGFz IHNvIGZyb20gd2l0aGluIHRoZSBoZWFkIG9mIHlvdXIgSFRNTCBkb2N1bWVudDo8L3A+Cjxw cmU+CiZsdDtzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IiZsdDt0eHA6c2l0 ZV91cmwgLyZndDttb28uZnguanMiJmd0OyZsdDsvc2NyaXB0Jmd0Owo8L3ByZT4KCTxwPk9y IDxzdHJvbmc+WU9VIE1VU1Q8L3N0cm9uZz4gdXNlIHRoZSBzbGlkZXNob3cgcGx1Z2luIHdp dGggdGhlIDxjb2RlPm1vbz0iMSI8L2NvZGU+IGF0dHJpYnV0ZS48L3A+Cgk8cD48c3Ryb25n PjMuIEFyZSB5b3UgY3VycmVudGx5IHVzaW5nIHRoZSBTbGlkZXNob3cgamF2YXNjcmlwdCBs aWJyYXJ5Pzwvc3Ryb25nPjwvcD4KCTxwPjxlbT5PciwgaXMgdGhlIGZpbGUgPGNvZGU+c2xp ZGVzaG93LmpzPC9jb2RlPiBjdXJyZW50bHkgbGlua2VkIHRvIGZyb20gd2l0aGluIHlvdXIg SFRNTCBkb2N1bWVudD88L2VtPjwvcD4KCTxwPklmIDxzdHJvbmc+Tk9UPC9zdHJvbmc+IGRv d25sb2FkIHRoZSBmaWxlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZWxlY3RyaWNwcmlzbS5jb20v cGx1Z2lucy9zbGlkZXNob3cuanMiPmhlcmU8L2E+LCBhbmQgbGluayB0byBpdCBhcyBzbyBm cm9tIHdpdGhpbiB0aGUgaGVhZCBvZiB5b3VyIEhUTUwgZG9jdW1lbnQ6PC9wPgo8cHJlPgom bHQ7c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSImbHQ7dHhwOnNpdGVfdXJs IC8mZ3Q7c2xpZGVzaG93LmpzIiZndDsmbHQ7L3NjcmlwdCZndDsKPC9wcmU+Cgk8cD5PciA8 c3Ryb25nPllPVSBNVVNUPC9zdHJvbmc+IHVzZSB0aGUgc2xpZGVzaG93IHBsdWdpbiB3aXRo IHRoZSA8Y29kZT5zbGlkZXNob3c9IjEiPC9jb2RlPiBhdHRyaWJ1dGUuPC9wPgoJPGgyPlVz YWdlPC9oMj4KCTxwPjxzdHJvbmc+RnJvbSB3aXRoaW4gYW4gYXJ0aWNsZSBmb3JtPC9zdHJv bmc+ICggPGVtPnByZXNlbnRhdGlvbiAvIGZvcm1zIC8gZm9ybSB0eXBlID0gYXJ0aWNsZTwv ZW0+ICk8L3A+CjxwcmU+CiZsdDt0eHA6YXJvX3NsaWRlc2hvdyAvJmd0Owo8L3ByZT4KCTxw PlRoZSBjb3JyZXNwb25kaW5nIGFydGljbGUgbXVzdCBoYXZlIDEgb3IgbW9yZSBudW1lcmlj IGltYWdlcyBJRCYjODIxNztzLCBzZXBhcmF0ZWQgYnkgY29tbWFzLCBpbiB0aGUgYXJ0aWNs ZSBpbWFnZSBmaWVsZCAoIDxlbT5jb250ZW50IC8gd3JpdGUgLyBhZHZhbmNlZCBvcHRpb25z IC8gYXJ0aWNsZSBpbWFnZTwvZW0+ICkuPC9wPgoJPHA+PHN0cm9uZz5Gcm9tIHdpdGhpbiBh IHBhZ2UgdGVtcGxhdGUgb3IgYW55IHR5cGUgb2YgZm9ybTwvc3Ryb25nPiAoIDxlbT5wcmVz ZW50YXRpb24gLyBwYWdlcyBvciBwcmVzZW50YXRpb24gLyBmb3JtczwvZW0+ICk8L3A+Cjxw cmU+CiZsdDt0eHA6YXJvX3NsaWRlc2hvdyBjYXQ9Im5hbWVfb2ZfaW1hZ2VfY2F0ZWdvcnki IC8mZ3Q7CjwvcHJlPgoJPHA+VGhlIGNvcnJlc3BvbmRpbmcgaW1hZ2UgY2F0ZWdvcnkgKCA8 ZW0+Y29udGVudCAvIG9yZ2FuaXplIC8gaW1hZ2UgY2F0ZWdvcmllczwvZW0+ICkgbXVzdCBo YXZlIDEgb3IgbW9yZSBhc3NvY2lhdGVkIGltYWdlcyBmb3IgdGhlIHBsdWdpbiB0byB3b3Jr LjwvcD4KCTxwPk9yLDwvcD4KPHByZT4KJmx0O3R4cDphcm9fc2xpZGVzaG93IGltZz0ibGlz dF9vZl9pbWFnZV9pZHMiIC8mZ3Q7CjwvcHJlPgoJPHA+Rm9yIGV4YW1wbGU6IDxjb2RlPiZs dDt0eHA6YXJvX3NsaWRlc2hvdyBpbWc9IjEsMyw1LDcsOSIgLyZndDs8L2NvZGU+LjwvcD4K CTxoMj5BdHRyaWJ1dGVzPC9oMj4KCTxwPjxzdHJvbmc+PGNvZGU+Jmx0O3R4cDphcm9fc2xp ZGVzaG93IGNhdD0ibmFtZV9vZl9pbWFnZV9jYXRlZ29yeSIgLyZndDs8L2NvZGU+PC9zdHJv bmc+PC9wPgoJPHA+PGVtPjt3YXMgPGNvZGU+Y2F0ZWdvcnk8L2NvZGU+IChkZXByZWNpYXRl ZCk8L2VtPjwvcD4KCTxwPlVzZSB0aGUgdGFnIHdpdGggdGhpcyBhdHRyaWJ1dGUgdG8gZGlz cGxheSBhIGxvb3Bpbmcgc2xpZGVzaG93IG9mIGFsbCB0aGUgaW1hZ2VzIHdpdGhpbiB0aGUg bmFtZWQgY2F0ZWdvcnkuPC9wPgoJPHA+PHN0cm9uZz48Y29kZT4mbHQ7dHhwOmFyb19zbGlk ZXNob3cgY2xhc3M9IkNTU19jbGFzc19uYW1lIiAvJmd0OzwvY29kZT48L3N0cm9uZz48L3A+ Cgk8cD5Vc2UgdGhlIHRhZyB3aXRoIHRoaXMgYXR0cmlidXRlIHRvIGF0dGFjaCBhIENTUyBj bGFzcyB0byB0aGUgPHN0cm9uZz5ib3VuZGluZyBkaXY8L3N0cm9uZz4gb2YgdGhlIHNsaWRl c2hvdyBlbGVtZW50LiBTZWUgPGVtPnRyb3VibGVzaG9vdGluZzwvZW0+IGJlbG93IGZvciBt b3JlIGluZm9ybWF0aW9uIChkZWZhdWx0IGlzIDxjb2RlPnNsaWRlc2hvdzwvY29kZT4pLjwv cD4KCTxwPjxzdHJvbmc+PGNvZGU+Jmx0O3R4cDphcm9fc2xpZGVzaG93IGZhZGU9ImR1cmF0 aW9uX29mX2ZhZGVfZWZmZWN0X2luX3NlY29uZHMiIC8mZ3Q7PC9jb2RlPjwvc3Ryb25nPjwv cD4KCTxwPjxlbT47d2FzIDxjb2RlPm1zPC9jb2RlPiAoZGVwcmVjaWF0ZWQpPC9lbT48L3A+ Cgk8cD5Vc2UgdGhlIHRhZyB3aXRoIHRoaXMgYXR0cmlidXRlIHRvIHNwZWVkLXVwIG9yIHNs b3ctZG93biB0aGUgc2xpZGVzaG93IGZhZGUgZWZmZWN0LiBEdXJhdGlvbiBpcyBpbiA8c3Ry b25nPndob2xlIHNlY29uZHM8L3N0cm9uZz4gKGRlZmF1bHQgaXMgPGNvZGU+NDwvY29kZT4p LjwvcD4KCTxwPjxzdHJvbmc+PGNvZGU+Jmx0O3R4cDphcm9fc2xpZGVzaG93IGltZz0ibGlz dF9vZl9pbWFnZV9pZHMiIC8mZ3Q7PC9jb2RlPjwvc3Ryb25nPjwvcD4KCTxwPlVzZSB0aGUg dGFnIHdpdGggdGhpcyBhdHRyaWJ1dGUgdG8gZGlzcGxheSBhIGxvb3Bpbmcgc2xpZGVzaG93 IG9mIHRoZSBpbWFnZXMgc3BlY2lmaWVkIGJ5IHRoZWlyIElELiBGb3IgZXhhbXBsZTogPGNv ZGU+Jmx0O3R4cDphcm9fc2xpZGVzaG93IGltZz0iMSwzLDUsNyw5IiAvJmd0OzwvY29kZT4u PC9wPgoJPHA+PHN0cm9uZz48Y29kZT4mbHQ7dHhwOmFyb19zbGlkZXNob3cgbW9vPSIxIiAv Jmd0OzwvY29kZT48L3N0cm9uZz48L3A+Cgk8cD48ZW0+O3dhcyA8Y29kZT5qcz0iMiI8L2Nv ZGU+IChkZXByZWNpYXRlZCk8L2VtPjwvcD4KCTxwPlVzZSB0aGUgdGFnIHdpdGggdGhpcyBh dHRyaWJ1dGUgdG8gb3V0cHV0IHRoZSBNb29GWCBqYXZhc2NyaXB0IGxpYnJhcnkgaW5saW5l IGluIHlvdXIgSFRNTCBkb2N1bWVudC4gU2VlIDxlbT5zZXR1cDwvZW0+IGFib3ZlIGZvciBt b3JlIGluZm9ybWF0aW9uIChkZWZhdWx0IGlzIDxjb2RlPm5vPC9jb2RlPikuPC9wPgoJPHA+ PHN0cm9uZz48Y29kZT4mbHQ7dHhwOmFyb19zbGlkZXNob3cgcHJvdG90eXBlPSIxIiAvJmd0 OzwvY29kZT48L3N0cm9uZz48L3A+Cgk8cD48ZW0+O3dhcyA8Y29kZT5qcz0iMiI8L2NvZGU+ IChkZXByZWNpYXRlZCk8L2VtPjwvcD4KCTxwPlVzZSB0aGUgdGFnIHdpdGggdGhpcyBhdHRy aWJ1dGUgdG8gb3V0cHV0IHRoZSBQcm90b3R5cGUgamF2YXNjcmlwdCBsaWJyYXJ5IGlubGlu ZSBpbiB5b3VyIEhUTUwgZG9jdW1lbnQuIFNlZSA8ZW0+c2V0dXA8L2VtPiBhYm92ZSBmb3Ig bW9yZSBpbmZvcm1hdGlvbiAoZGVmYXVsdCBpcyA8Y29kZT5ubzwvY29kZT4pLjwvcD4KCTxw PjxzdHJvbmc+PGNvZGU+Jmx0O3R4cDphcm9fc2xpZGVzaG93IHNsaWRlc2hvdz0iMSIgLyZn dDs8L2NvZGU+PC9zdHJvbmc+PC9wPgoJPHA+PGVtPjt3YXMgPGNvZGU+anM9IjEiPC9jb2Rl PiBvciA8Y29kZT5qcz0iMiI8L2NvZGU+IChkZXByZWNpYXRlZCk8L2VtPjwvcD4KCTxwPlVz ZSB0aGUgdGFnIHdpdGggdGhpcyBhdHRyaWJ1dGUgdG8gb3V0cHV0IHRoZSBTbGlkZXNob3cg amF2YXNjcmlwdCBsaWJyYXJ5IGlubGluZSBpbiB5b3VyIEhUTUwgZG9jdW1lbnQuIFNlZSA8 ZW0+c2V0dXA8L2VtPiBhYm92ZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiAoZGVmYXVsdCBpcyA8 Y29kZT5ubzwvY29kZT4pLjwvcD4KCTxwPjxzdHJvbmc+PGNvZGU+Jmx0O3R4cDphcm9fc2xp ZGVzaG93IHRodW1iPSIxIiAvJmd0OzwvY29kZT48L3N0cm9uZz48L3A+Cgk8cD5Vc2UgdGhl IHRhZyB3aXRoIHRoaXMgYXR0cmlidXRlIHRvIGRpc3BsYXkgdGhlIHNsaWRlc2hvdyB1c2lu ZyBpbWFnZSB0aHVtYm5haWxzIGluc3RlYWQgb2YgdGhlIGZ1bGwtc2l6ZSBpbWFnZXMuPC9w PgoJPHA+PHN0cm9uZz48Y29kZT4mbHQ7dHhwOmFyb19zbGlkZXNob3cgd2FpdD0iZHVyYXRp b25fYmV0d2Vlbl9mYWRlc19pbl9zZWNvbmRzIiAvJmd0OzwvY29kZT48L3N0cm9uZz48L3A+ Cgk8cD5Vc2UgdGhlIHRhZyB3aXRoIHRoaXMgYXR0cmlidXRlIHRvIGluY3JlYXNlIG9yIGRl Y3JlYXNlIHRoZSB0aW1lIDxzdHJvbmc+YmV0d2Vlbjwvc3Ryb25nPiBzbGlkZXNob3cgdHJh bnNpdGlvbnMuIER1cmF0aW9uIGlzIGluIDxzdHJvbmc+d2hvbGUgc2Vjb25kczwvc3Ryb25n PiAoZGVmYXVsdCBpcyA8Y29kZT4xPC9jb2RlPikuPC9wPgoJPGgyPlRyb3VibGVzaG9vdGlu ZzwvaDI+Cgk8cD5UaGUgZWZmZWN0cyBsaWJyYXJ5IGhhcyBiZWVuIHRlc3RlZCBvbiBJbnRl cm5ldCBFeHBsb3JlciA2KywgTW96aWxsYSAoTmV0c2NhcGUsIEZpcmUgRm94LCBDYW1pbm8p LCBPcGVyYSA5IGFuZCBLb25xdWVyb3IgKFNhZmFyaSkuIEl0IGlzIHJlY29tbWVuZGVkIHRv IHVzZSBhIDxjb2RlPlN0cmljdDwvY29kZT4gZG9jdHlwZS4gVG8gd29yayBhcyBpbnRlbmRl ZCwgYWxsIGltYWdlcyBtdXN0IGJlIHRoZSBzYW1lIHNpemUuIFRoZSBwbHVnaW4gb3V0cHV0 cyBhbiBIVE1MIDxjb2RlPmltZzwvY29kZT4gd2l0aGluIGEgYm91bmRpbmcgPGNvZGU+ZGl2 PC9jb2RlPi4gSWYgdGhlcmUgYXJlIGRpc3BsYXkgcHJvYmxlbXMgeW91IG1heSBuZWVkIHRv IGFkanVzdCB0aGUgQ1NTIG9mIHRoZSBkaXYgYW5kIC8gb3IgdGhlIGltZyB3aXRoaW4gdGhl IGRpdiBpbiB5b3VyIHN0eWxlc2hlZXRzLiBVc2UgdGhlIGRlZmF1bHQgY2xhc3MgPGNvZGU+ c2xpZGVzaG93PC9jb2RlPiB0byB0YXJnZXQgdGhlIGRpdiwgb3IgYXNzaWduIHlvdXIgb3du IChzZWUgdGhlIDxlbT5jbGFzcyBhdHRyaWJ1dGU8L2VtPiBhYm92ZSkuIEZvciBleGFtcGxl LCBpZiB5b3VyIGltYWdlcyBhcmUgZmxvYXRpbmcgeW91IHdpbGwgbmVlZCB0byBzZXQgdGhl IENTUyA8Y29kZT5mbG9hdDwvY29kZT4gcHJvcGVydHkgZm9yIHRoZSBib3VuZGluZyBkaXYg aW4geW91ciBzdHlsZXNoZWV0LiBBbG1vc3QgYWxsIGlzc3VlcyB3aXRoIHNsaWRlc2hvdyBs YXlvdXQgb3IgdmlzdWFsIHF1aXJrcyAoanVtcGluZyBpbiBwb3NpdGlvbiBiZXR3ZWVuIGZh ZGVzKSBjYW4gYmUgcmVzb2x2ZWQgYnkgdHdlYWtpbmcgdGhlIENTUyAmIzgyMTE7IHVzdWFs bHkgYnkgcmVtb3Zpbmcgc3R5bGVzIGZyb20gdGhlIGltZyBhbmQgYXBwbHlpbmcgdGhlbSB0 byB0aGUgZGl2LjwvcD4KCTxoMj5UaGFua3M8L2gyPgoJPHA+VGhhbmtzIHRvIGV2ZXJ5b25l IGluIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3Bp Yy5waHA/aWQ9MTY1MTciPmZvcnVtIHRocmVhZDwvYT4gZm9yIGhlbHBpbmcgdG8gdGVzdCB0 aGlzIGFuZCBmb3Igc3VnZ2VzdGluZyBuZXcgaWRlYXMgLyBlbmhhbmNlbWVudHMuIFRoaXMg cGx1Z2luIHdhcyBpbnNwaXJlZCBieSA8Y29kZT5oYWtfYXJ0aWNsZV9pbWFnZTwvY29kZT4s IHNvIHNwZWNpYWwgdGhhbmtzIHRvIDxhIGhyZWY9Imh0dHA6Ly93d3cuaGFram9vbi5jb20i PlBhdHJpY2sgV29vZHM8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vdGhyZXNob2xkc3RhdGUu Y29tIj5aZW08L2E+LjwvcD4KCgogIjtzOjQ6ImNvZGUiO3M6NjgyMzoiCmZ1bmN0aW9uIGFy b19zbGlkZXNob3coJGF0dHMpIHsKCWdsb2JhbCAkdGhpc2FydGljbGUsICRhcm87CgoJLy8g Z2xvYmFsIHZhcnMKCglpZiAoISRhcm8pICRhcm8gPSBhcnJheSgKCQknbicJCQkJPT4gMCwK CQkncHJvdG90eXBlJwkJPT4gMCwKCQknbW9vJwkJCT0+IDAsCgkJJ3NsaWRlc2hvdycJCT0+ IDAKCSk7CgoJJGFyb1snbiddKys7CgoJLy8gdHhwIGF0dHMKCglpZiAoaXNfYXJyYXkoJGF0 dHMpKSBleHRyYWN0KCRhdHRzKTsKCgkkY2F0ZWdvcnkgPSAoISRjYXRlZ29yeSkgPyAwIDog JGNhdGVnb3J5OyAvLyBkZXByZWNpYXRlZAoJJGpzID0gKCEkanMpID8gMCA6ICRqczsgLy8g ZGVwcmVjaWF0ZWQKCSRtcyA9ICghJG1zKSA/IDAgOiByb3VuZCgkbXMgLyAxMDAwKTsgLy8g ZGVwcmVjaWF0ZWQKCgkkY2F0ID0gKCEkY2F0KSA/ICRjYXRlZ29yeSA6ICRjYXQ7CgkkY2xh c3MgPSAoISRjbGFzcykgPyAnc2xpZGVzaG93JyA6ICRjbGFzczsKCSRmYWRlID0gKCEkZmFk ZSkgPyAkbXMgOiAkZmFkZTsKCSRpbWcgPSAoISRpbWcpID8gJHRoaXNhcnRpY2xlWyJhcnRp Y2xlX2ltYWdlIl0gOiAkaW1nOwoJJG1vbyA9ICgkbW9vIHx8ICRqcyA9PSAyKSA/IDEgOiAw OwoJJHByb3RvdHlwZSA9ICgkcHJvdG90eXBlIHx8IGpzID09IDIpID8gMSA6IDA7Cgkkc2xp ZGVzaG93ID0gKCRzbGlkZXNob3cgfHwganMgIT0gMCkgPyAxIDogMDsKCSR0aHVtYiA9ICgh JHRodW1iKSA/ICcnIDogJ3QnOwoJJHdhaXQgPSAoISR3YWl0KSA/IDAgOiAkd2FpdDsKCgkv LyBqcyBhdHRzCgoJJHByb3BzW10gPSAnaHU6ICInLmh1LiciJzsKCSRwcm9wc1tdID0gJ246 ICInLiRhcm9bJ24nXS4nIic7CglpZiAoJGZhZGUpICRwcm9wc1tdID0gJ2ZhZGU6ICcucm91 bmQoJGZhZGUgKiAxMDAwKTsKCWlmICgkd2FpdCkgJHByb3BzW10gPSAnd2FpdDogJy5yb3Vu ZCgkd2FpdCAqIDEwMDApOwoKCS8vIGdldCBpbWFnZSBsaXN0CgoJaWYgKCRjYXQpIHsKCQlp ZiAoJGNhdCA9PSAncm9vdCcpICRjYXQgPSAnJzsKCgkJJHJzID0gc2FmZV9yb3dzKCIqIiwg InR4cF9pbWFnZSIsICJjYXRlZ29yeT0nJGNhdCciKTsKCgkJaWYgKCEkcnMpIHJldHVybjsK CgkJZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsKCQkJZXh0cmFjdCgkcm93KTsKCQkJaWYgKCEk YWx0dGV4dCkgJGFsdHRleHQgPSAkYWx0OwoJCQkkaW1nc1tdID0gJGlkLiR0aHVtYi4kZXh0 OwoJCX0KCX0KCWVsc2UgewoJCWlmIChlbXB0eSgkaW1nKSkgcmV0dXJuOwoKCQkkaW1nID0g c3RyX3JlcGxhY2UoIiAiLCAiIiwgJGltZyk7CgkJJGltZyA9IGV4cGxvZGUoIiwiLCAkaW1n KTsKCgkJZm9yZWFjaCAoJGltZyBhcyAkaWQpIHsKCQkJaWYgKGlzX251bWVyaWMoJGlkKSkg ewoJCQkJJHJzID0gc2FmZV9yb3coIioiLCAidHhwX2ltYWdlIiwgImlkPSckaWQnIGxpbWl0 IDEiKTsKCQkJCWlmICgkcnMpIHsKCQkJCQlleHRyYWN0KCRycyk7CgkJCQkJaWYgKCEkYWx0 dGV4dCkgJGFsdHRleHQgPSAkYWx0OwoJCQkJCSRpbWdzW10gPSAkaWQuJHRodW1iLiRleHQ7 CgkJCQl9CgkJCX0KCQl9Cgl9CgoJaWYgKCFjb3VudCgkaW1ncykpIHJldHVybjsgLy8gaWYg bm8gaW1hZ2VzIGFib3J0CgoJaWYgKCR0aHVtYiA9PSAndCcpIHsgLy8gZ2V0IHRodW1ibmFp bCBkaW0KCQkkdGh1bWJuYWlsID0gZ2V0aW1hZ2VzaXplKGh1LidpbWFnZXMvJy4kaWQuJHRo dW1iLiRleHQpOwoJCSR3ID0gJHRodW1ibmFpbFswXTsKCQkkaCA9ICR0aHVtYm5haWxbMV07 Cgl9CgoJaWYgKCRwcm90b3R5cGUgJiYgISRhcm9bJ3Byb3RvdHlwZSddKSB7CgkJJGFyb1sn cHJvdG90eXBlJ10gPSAxOwoJCSRzY3JpcHQgLj0gPDw8UFJPVE9UWVBFCgoJLy8gZnJvbSBQ cm90b3R5cGUgYnkgU2FtIFN0ZXBoZW5zb24gKGh0dHA6Ly9wcm90b3R5cGUuY29uaW8ubmV0 KSBNSVQtc3R5bGUgTElDRU5TRQoKCXZhciBDbGFzcyA9IHsKCQljcmVhdGU6IGZ1bmN0aW9u KCkgewoJCQlyZXR1cm4gZnVuY3Rpb24oKSB7CgkJCQl0aGlzLmluaXRpYWxpemUuYXBwbHko dGhpcywgYXJndW1lbnRzKTsKCQkJfQoJCX0KCX0KCglPYmplY3QuZXh0ZW5kID0gZnVuY3Rp b24oZGVzdGluYXRpb24sIHNvdXJjZSkgewoJCWZvciAocHJvcGVydHkgaW4gc291cmNlKSBk ZXN0aW5hdGlvbltwcm9wZXJ0eV0gPSBzb3VyY2VbcHJvcGVydHldOwoJCXJldHVybiBkZXN0 aW5hdGlvbjsKCX0KCglGdW5jdGlvbi5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKG9iamVj dCkgewoJCXZhciBfX21ldGhvZCA9IHRoaXM7CgkJcmV0dXJuIGZ1bmN0aW9uKCkgewoJCQly ZXR1cm4gX19tZXRob2QuYXBwbHkob2JqZWN0LCBhcmd1bWVudHMpOwoJCX0KCX0KCglmdW5j dGlvbiAkKCkgewoJCWlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHJldHVybiBnZXQkKGFy Z3VtZW50c1swXSk7CgkJdmFyIGVsZW1lbnRzID0gW107CgkJJGMoYXJndW1lbnRzKS5lYWNo KGZ1bmN0aW9uKGVsKXsKCQkJZWxlbWVudHMucHVzaChnZXQkKGVsKSk7CgkJfSk7CgkJcmV0 dXJuIGVsZW1lbnRzOwoKCQlmdW5jdGlvbiBnZXQkKGVsKXsKCQkJaWYgKHR5cGVvZiBlbCA9 PSAnc3RyaW5nJykgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbCk7CgkJCXJldHVy biBlbDsKCQl9Cgl9CgoJQXJyYXkucHJvdG90eXBlLmVhY2ggPSBmdW5jdGlvbihmdW5jKXsK CQlmb3IodmFyIGk9MDtvYj10aGlzW2ldO2krKykgZnVuYyhvYiwgaSk7Cgl9CgoJZnVuY3Rp b24gJGMoYXJyYXkpewoJCXZhciBuQXJyYXkgPSBbXTsKCQlmb3IgKGk9MDtlbD1hcnJheVtp XTtpKyspIG5BcnJheS5wdXNoKGVsKTsKCQlyZXR1cm4gbkFycmF5OwoJfQpQUk9UT1RZUEU7 Cgl9CgoJaWYgKCRtb28gJiYgISRhcm9bJ21vbyddKSB7CgkJJGFyb1snbW9vJ10gPSAxOwoJ CSRzY3JpcHQgLj0gPDw8TU9PCgoJLy8gZnJvbSBNb28uZnggYnkgVmFsZXJpbyBQcm9pZXR0 aSAoaHR0cDovL21hZDRtaWxrLm5ldCkgTUlULXN0eWxlIExJQ0VOU0UKCglpZiAoIXdpbmRv dy5meCkgZnggPSBmdW5jdGlvbigpIHt9OwoKCWZ4Lk9wYWNpdHkgPSBDbGFzcy5jcmVhdGUo KTsKCWZ4Lk9wYWNpdHkucHJvdG90eXBlID0gewoJCWluaXRpYWxpemU6IGZ1bmN0aW9uKGVs LCBvcHRpb25zKSB7CgkJCXRoaXMuZWwgPSAkKGVsKTsKCQkJdGhpcy5ub3cgPSAxOwoJCQl0 aGlzLmluY3JlYXNlKCk7CgkJCXRoaXMub3B0aW9ucyA9IHsKCQkJCWR1cmF0aW9uOiA1MDAs CgkJCQlvbkNvbXBsZXRlOiAnJwoJCQl9CgkJCU9iamVjdC5leHRlbmQodGhpcy5vcHRpb25z LCBvcHRpb25zIHx8IHt9KTsKCQl9LAoKCQlpbmNyZWFzZTogZnVuY3Rpb24oKSB7CgkJCWlm ICh0aGlzLm5vdyA9PSAxICYmICgvRmlyZWZveC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50 KSkpIHRoaXMubm93ID0gMC45OTk5OwoJCQl0aGlzLnNldE9wYWNpdHkodGhpcy5ub3cpOwoJ CX0sCgoJCXNldE9wYWNpdHk6IGZ1bmN0aW9uKG9wYWNpdHkpIHsKCQkJaWYgKG9wYWNpdHkg PT0gMCAmJiB0aGlzLmVsLnN0eWxlLnZpc2liaWxpdHkgIT0gImhpZGRlbiIpIHRoaXMuZWwu c3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwoJCQllbHNlIGlmICh0aGlzLmVsLnN0eWxl LnZpc2liaWxpdHkgIT0gInZpc2libGUiKSB0aGlzLmVsLnN0eWxlLnZpc2liaWxpdHkgPSAi dmlzaWJsZSI7CgkJCWlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkgdGhpcy5lbC5zdHlsZS5m aWx0ZXIgPSAiYWxwaGEob3BhY2l0eT0iICsgb3BhY2l0eSoxMDAgKyAiKSI7CgkJCXRoaXMu ZWwuc3R5bGUub3BhY2l0eSA9IG9wYWNpdHk7CgkJfSwKCgkJY3VzdG9tOiBmdW5jdGlvbihm cm9tLCB0bykgewoJCQlpZiAodGhpcy50aW1lciAhPSBudWxsKSByZXR1cm47CgkJCXRoaXMu ZnJvbSA9IGZyb207CgkJCXRoaXMudG8gPSB0bzsKCQkJdGhpcy5zdGFydFRpbWUgPSAobmV3 IERhdGUpLmdldFRpbWUoKTsKCQkJdGhpcy50aW1lciA9IHNldEludGVydmFsICh0aGlzLnN0 ZXAuYmluZCh0aGlzKSwgMTMpOwoJCX0sCgoJCXN0ZXA6IGZ1bmN0aW9uKCkgewoJCQl2YXIg dGltZSAgPSAobmV3IERhdGUpLmdldFRpbWUoKTsKCQkJaWYgKHRpbWUgPj0gdGhpcy5vcHRp b25zLmR1cmF0aW9uK3RoaXMuc3RhcnRUaW1lKSB7CgkJCQl0aGlzLm5vdyA9IHRoaXMudG87 CgkJCQljbGVhckludGVydmFsICh0aGlzLnRpbWVyKTsKCQkJCXRoaXMudGltZXIgPSBudWxs OwoJCQkJaWYgKHRoaXMub3B0aW9ucy5vbkNvbXBsZXRlKSBzZXRUaW1lb3V0KHRoaXMub3B0 aW9ucy5vbkNvbXBsZXRlLmJpbmQodGhpcyksIDEwKTsKCQkJfQoJCQllbHNlIHsKCQkJCXZh ciBUcG9zID0gKHRpbWUgLSB0aGlzLnN0YXJ0VGltZSkgLyAodGhpcy5vcHRpb25zLmR1cmF0 aW9uKTsKCQkJCXRoaXMubm93ID0gKCgtTWF0aC5jb3MoVHBvcypNYXRoLlBJKS8yKSArIDAu NSkgKiAodGhpcy50by10aGlzLmZyb20pICsgdGhpcy5mcm9tOwoJCQl9CgkJCXRoaXMuaW5j cmVhc2UoKTsKCQl9Cgl9Ck1PTzsKCX0KCglpZiAoJHNsaWRlc2hvdyAmJiAhJGFyb1snc2xp ZGVzaG93J10pIHsKCQkkYXJvWydzbGlkZXNob3cnXSA9IDE7CgkJJHNjcmlwdCAuPSA8PDxT TElERVNIT1cKCgkvLyBTbGlkZXNob3cgYnkgQWVyb24gR2xlbWFubiAoaHR0cDovL2VsZWN0 cmljcHJpc20uY29tL2Flcm9uKSBNSVQtc3R5bGUgTElDRU5TRQoKCWZ4LlNsaWRlc2hvdyA9 IENsYXNzLmNyZWF0ZSgpOwoJZnguU2xpZGVzaG93LnByb3RvdHlwZSA9IHsKCQlpbml0aWFs aXplOiBmdW5jdGlvbihpbWFnZXMsIHByb3BzKSB7CgkJCXRoaXMuaW1hZ2VzID0gaW1hZ2Vz LnNwbGl0KCcsJyk7CgkJCWlmICh0aGlzLmltYWdlcy5sZW5ndGggPT0gMSkgcmV0dXJuOyAv LyBvbmx5IGN5Y2xlIG11bHRpcGxlIGltYWdlcwoKCQkJdGhpcy5wcm9wcyA9IHsKCQkJCWZh ZGU6IDQwMDAsCgkJCQlodTogJycsCgkJCQluOiAnMCcsCgkJCQl3YWl0OiAxMDAwCgkJCX0K CQkJT2JqZWN0LmV4dGVuZCh0aGlzLnByb3BzLCBwcm9wcyB8fCB7fSk7CgoJCQlhID0gJCgn YXJvLScgKyB0aGlzLnByb3BzLm4gKyAnYScpOwoJCQlhLnN0eWxlLnBvc2l0aW9uID0gJ2Fi c29sdXRlJzsKCQkJYS5zdHlsZS5sZWZ0ID0gJzBweCc7CgkJCWEuc3R5bGUudG9wID0gJzBw eCc7CgoJCQlpbWcgPSBhLmNsb25lTm9kZSh0cnVlKTsKCQkJaW1nLmlkID0gJ2Fyby0nICsg dGhpcy5wcm9wcy5uICsgJ2InOwoJCQlpbWcuc3R5bGUuemluZGV4ID0gJzEwMCc7CgoJCQlk aXYgPSBhLnBhcmVudE5vZGU7CgkJCWRpdi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKCQkJ ZGl2LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJzsKCQkJZGl2LnN0eWxlLndpZHRoID0g YS53aWR0aCArICdweCc7CgkJCWRpdi5zdHlsZS5oZWlnaHQgPSBhLmhlaWdodCArICdweCc7 CgkJCWRpdi5hcHBlbmRDaGlsZChpbWcpOwoKCQkJdGhpcy5hID0gJCgnYXJvLScgKyB0aGlz LnByb3BzLm4gKyAnYScpOwoJCQl0aGlzLmIgPSAkKCdhcm8tJyArIHRoaXMucHJvcHMubiAr ICdiJyk7CgoJCQl0aGlzLmVmZmVjdCA9IG5ldyBmeC5PcGFjaXR5KHRoaXMuYi5pZCwgeyBk dXJhdGlvbjogdGhpcy5wcm9wcy5mYWRlLCBvbkNvbXBsZXRlOiB0aGlzLmxvYWRlZC5iaW5k KHRoaXMpIH0pOwoKCQkJdGhpcy5jdXJyID0gMTsKCQkJdGhpcy50aW1lciA9IChuZXcgRGF0 ZSkuZ2V0VGltZSgpICsgdGhpcy5wcm9wcy53YWl0OwoKCQkJdGhpcy5sb2FkZXIgPSBuZXcg SW1hZ2UoKTsKCQkJdGhpcy5sb2FkZXIuc3JjID0gdGhpcy5wcm9wcy5odSArICdpbWFnZXMv JyArIHRoaXMuaW1hZ2VzW3RoaXMuY3Vycl07CgoJCQl0aGlzLnByZWxvYWQoKTsKCQl9LAoK CQlwcmVsb2FkOiBmdW5jdGlvbigpIHsKCQkJaWYgKHRoaXMubG9hZGVyLmNvbXBsZXRlICYm ICgobmV3IERhdGUpLmdldFRpbWUoKSA+IHRoaXMudGltZXIpKSB7CgkJCQl0aGlzLmEuc3Jj ID0gdGhpcy5sb2FkZXIuc3JjOwoKCQkJCXRoaXMuZWZmZWN0LmN1c3RvbSgxLCAwKTsKCQkJ fQoJCQllbHNlIHsgc2V0VGltZW91dCh0aGlzLnByZWxvYWQuYmluZCh0aGlzKSwgMTApOyB9 CgkJfSwKCgkJbG9hZGVkOiBmdW5jdGlvbigpIHsKCQkJdGhpcy5iLnNyYyA9IHRoaXMubG9h ZGVyLnNyYzsKCgkJCXRoaXMuZWZmZWN0LnNldE9wYWNpdHkoMSk7CgoJCQkodGhpcy5jdXJy ID09IHRoaXMuaW1hZ2VzLmxlbmd0aCAtIDEpID8gdGhpcy5jdXJyID0gMCA6IHRoaXMuY3Vy cisrOwoJCQl0aGlzLnRpbWVyID0gKG5ldyBEYXRlKS5nZXRUaW1lKCkgKyB0aGlzLnByb3Bz LndhaXQ7CgoJCQl0aGlzLmxvYWRlciA9IG5ldyBJbWFnZSgpOwoJCQl0aGlzLmxvYWRlci5z cmMgPSB0aGlzLnByb3BzLmh1ICsgJ2ltYWdlcy8nICsgdGhpcy5pbWFnZXNbdGhpcy5jdXJy XTsKCgkJCXRoaXMucHJlbG9hZCgpOwoJCX0KCX0KU0xJREVTSE9XOwoJfQoKCS8vIGdlbmVy YXRlIG91dHB1dAoKCSRvdXQgLj0gbi4nPGRpdiBjbGFzcz0iJy4kY2xhc3MuJyI+PGltZyBp ZD0iYXJvLScuJGFyb1snbiddLidhIiBhbHQ9IicuJGFsdHRleHQuJyIgc3JjPSInLmh1Lidp bWFnZXMvJy4kaW1nc1swXS4nIiB3aWR0aD0iJy4kdy4nIiBoZWlnaHQ9IicuJGguJyIgLz48 L2Rpdj4nOwoJJG91dCAuPSBuLic8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+JzsK CSRvdXQgLj0gbi4nPCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLSc7CglpZiAoJHNjcmlwdCkg JG91dCAuPSBuLiRzY3JpcHQ7Cgkkb3V0IC49IG4udC4nbmV3IGZ4LlNsaWRlc2hvdygiJy5q b2luKCcsJywgJGltZ3MpLiciLCB7ICcuam9pbignLCAnLCAkcHJvcHMpLid9KSc7Cgkkb3V0 IC49IG4uJy8vLS0+PCFdXT4nOwoJJG91dCAuPSBuLic8L3NjcmlwdD4nOwoKCXJldHVybiAk b3V0Owp9CiI7czozOiJtZDUiO3M6MzI6IjdjNWZkNTNhNWJlM2IwY2RkZWFjOTNlY2Q4MGFm MTFkIjt9