# smd_random_banner 0.15 # Random image by category with a few extra advertising options # Stef Dawson # http://www.stefdawson.com/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTc6InNtZF9yYW5kb21fYmFubmVyIjtzOjY6ImF1dGhvciI7czoxMToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjY6Imh0dHA6Ly93d3cuc3RlZmRhd3Nvbi5jb20vIjtzOjc6InZlcnNpb24iO3M6NDoiMC4xNSI7czoxMToiZGVzY3JpcHRpb24iO3M6NjE6IlJhbmRvbSBpbWFnZSBieSBjYXRlZ29yeSB3aXRoIGEgZmV3IGV4dHJhIGFkdmVydGlzaW5nIG9wdGlvbnMiO3M6NDoiaGVscCI7czo4MjAyOiI8Yj5CYXNpYyBpZGVhPC9iPg0KDQo8cD5CYXNlZCBzaGFtZWxlc3NseSBvbiBkcnVfcmFuZG9tX2ltYWdlICh0aGFua3MhKSB0aGlzIHBsdWdpbiBleHRlbmRzIHRoZSBpZGVhIGEgbGl0dGxlLiBUaGUgY29uY2VwdCBpczogd2hhdCBpZiB5b3Ugd2FudCB0byBhZHZlcnRpc2Ugb3RoZXIgcGFydHMgb2YgeW91ciBzaXRlIChlLmcuIG90aGVyIHByb2R1Y3RzL3NlcnZpY2VzKSB1c2luZyBhIGJhbm5lciBhZD8gWW91IHdhbnQgYW4gaW1hZ2UvYW5pbWF0ZWQgZ2lmL3doYXRldmVyIHRvIGFkdmVydGlzZSB0aGUgcHJvZHVjdCBvciBzZXJ2aWNlIGFuZCB3aGVuIHBlb3BsZSBjbGljayBvbiBpdCwgYmUgdGFrZW4gdG8gdGhlIGNvcnJlY3QgcGFydCBvZiB0aGUgc2l0ZS4gVGhpcyBjb3VsZCBvZiBjb3Vyc2UgYmUgdXNlZCBmb3IgbGlua3MgdG8gZXh0ZXJuYWwgc2l0ZXMgaWYgeW91IHdpc2guDQoNCjxwPkluIGl0cyBiYXNlIGZvcm0sIHRoaXMgcGx1Z2luIGZ1bmN0aW9ucyBleGFjdGx5IGFzIGRydV9yYW5kb21faW1hZ2UuIFNvOjwvcD4NCg0KPGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciAvJmd0OzwvY29kZT4NCg0KPHA+Y2hvb3NlcyBhIHJhbmRvbSBpbWFnZSBmcm9tIGFsbCBpbWFnZXMgdXBsb2FkZWQgdmlhIHRleHRwYXR0ZXJuJ3MgaW1hZ2UgaW50ZXJmYWNlLjwvcD4NCg0KPGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYmFubmVycyIgLyZndDs8L2NvZGU+DQoNCjxwPmNob29zZXMgYSByYW5kb20gaW1hZ2UgZnJvbSBhbGwgaW1hZ2VzIGluIHRoZSAnYmFubmVycycgY2F0ZWdvcnkuIElmIGF0IGFueSBwb2ludCwgdGhlIHBhcnRpY3VsYXIgb3B0aW9ucyByZXN1bHQgaW4gbWF0Y2hpbmcgbm8gaW1hZ2VzLCB0aGUgcGx1Z2luIHdpbGwgcmV0dXJuIG5vdGhpbmcuIFRoaXMgaXMgc28geW91IGNhbiB1c2UgcGx1Z2lucyBzdWNoIGFzIENva2UgSGFycmluZ3RvbidzIGV4Y2VsbGVudCBjaGhfaWZfZGF0YSB0byBkZXRlY3QgdGhpcyBhbmQgYnJhbmNoIHRvIGEgImRlZmF1bHQiIGltYWdlIG9yIHNvbWV0aGluZy48L3A+DQoNCjxwPkFsdGVybmF0aXZlbHksIGlmIHlvdSBhbHdheXMgd2FudCBhIHBpY3R1cmUgdG8gYmUgZGlzcGxheWVkIG5vIG1hdHRlciB3aGF0LCBzcGVjaWZ5IHRoZSA8Y29kZT5hbHdheXNfZGlzcGxheT0iMSI8L2NvZGU+IHBhcmFtZXRlci4gSW4gdGhlIGV2ZW50IG9mIG5vIG1hdGNoZXMgYmVpbmcgZm91bmQsIHRoZSBwbHVnaW4gd2lsbCB0cnkgYWdhaW4ganVzdCBmcm9tIHRoZSBnaXZlbiBjYXRlZ29yeSAoaWYgc3VwcGxpZWQpIG9yIGZyb20gdGhlIHdob2xlIHBvb2wgb2YgaW1hZ2VzIG90aGVyd2lzZS48L3A+DQoNCjxiPkFkanVzdGluZyByYW5kb21uZXNzPC9iPg0KDQo8cD5Ob3cgY29tZXMgdGhlIGZ1biBwYXJ0LiBXaGF0IGlmIHlvdSBvbmx5IHdhbnQgaW1hZ2VzIHRvIGFwcGVhciB0aGF0IGhhdmUgcGFydGljdWxhciB3b3JkcyBpbiB0aGVpciBmaWxlbmFtZT8gKG9yIEFsdCBUZXh0IC0gc2VlIG9wdGlvbiA8Y29kZT51c2VfYWx0PC9jb2RlPiBiZWxvdykgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYWQgYSB6b28gd2Vic2l0ZSBhbmQgb25seSB3YW50ZWQgcGljdHVyZXMgb2YgbGlvbnMgdG8gYXBwZWFyIG9uIHRoZSBMaW9ucyBwYWdlLjwvcD4NCg0KPHA+T3IsIGNvbnZlcnNlbHksIHdoYXQgaWYgeW91IDxpPmRvbid0PC9pPiB3YW50IGEgYmFubmVyIHRvIGFwcGVhciB0aGF0IGFkdmVydGlzZXMgdGhlIHByb2R1Y3QgeW91ciBjdXN0b21lciBpcyBhbHJlYWR5IGxvb2tpbmcgYXQ/IEl0IGxvb2tzIGEgYml0IHN0cmFuZ2UgdG8gaGF2ZSBhbiBhZHZlcnQgZm9yICJwcm9kdWN0QSIgb24gYSBwYWdlIGFib3V0ICJwcm9kdWN0QSIhIFRoYXQncyB3aGVyZSB0aGUgbmV4dCB0aHJlZSBvcHRpb25zIGNvbWUgaW46IDxjb2RlPm1hdGNoX3RleHQ8L2NvZGU+LCA8Y29kZT5hdm9pZF90ZXh0PC9jb2RlPiBhbmQgPGNvZGU+bG9va19pbjwvY29kZT4uPC9wPg0KDQo8cD5XaGF0IHRoZXNlIGRvIGlzIGNvbXBhcmUgdGhlIGZpbGVuYW1lIG9mIHlvdXIgYmFubmVyIGltYWdlIHRvIHNvbWUgdGV4dCBhbmQgaWYgaXQgbWF0Y2hlcywgdGhhdCBwYXJ0aWN1bGFyIGltYWdlIHdpbGwgZWl0aGVyIGJlIGRpc3BsYXllZCAobWF0Y2hfdGV4dCkgb3IgPGk+bm90PC9pPiBkaXNwbGF5ZWQgKGF2b2lkX3RleHQpLiBTb21lIGV4YW1wbGVzOjwvcD4NCg0KPGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYmFubmVycyIgbWF0Y2hfdGV4dD0icGVuZ3VpbiIgLyZndDs8L2NvZGU+DQoNCjxwPlRoYXQgd2lsbCBjaG9vc2UgYSByYW5kb20gaW1hZ2UgZnJvbSBhbGwgaW1hZ2VzIGluIHRoZSAnYmFubmVycycgY2F0ZWdvcnkgdGhhdCBoYXZlIHRoZSB3b3JkICJwZW5ndWluIiBpbiB0aGVpciB0aXRsZS48L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgY2F0ZWdvcnk9ImJhbm5lcnMiIGF2b2lkX3RleHQ9InByb2R1Y3QxIiAvJmd0OzwvY29kZT4NCg0KPHA+VGhhdCB3aWxsIGNob29zZSBhIHJhbmRvbSBpbWFnZSBmcm9tIGFsbCBpbWFnZXMgaW4gdGhlICdiYW5uZXJzJyBjYXRlZ29yeSBidXQgaWdub3JlcyBhbnkgaW1hZ2UgZmlsZW5hbWVzIHRoYXQgY29udGFpbiB0aGUgdGV4dCAncHJvZHVjdDEnLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgaGFkIG1vcmUgdGhhbiBvbmUgYmFubmVyIHBlciBwcm9kdWN0IGxpa2U6PC9wPg0KPHVsPg0KPGxpPmJhbm5lcl9wcm9kdWN0MV9BLmpwZzwvbGk+DQo8bGk+YmFubmVyX3Byb2R1Y3QxX0IuanBnPC9saT4NCjxsaT5iYW5uZXJfcHJvZHVjdDJfQS5qcGc8L2xpPg0KPGxpPi4uLjwvbGk+DQo8L3VsPg0KDQo8cD5hcyBpdCB3b3VsZCBleGNsdWRlIGFsbCBvZiBwcm9kdWN0MSdzIGltYWdlcy4gQm90aCBvcHRpb25zIGNhbiBhbHNvIHRha2UgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB3b3JkcyB0byBpZ25vcmUsIGUuZy4gPGNvZGU+bWF0Y2hfdGV4dD0ibGxhbWEscGVuZ3VpbiI8L2NvZGU+IG9yIDxjb2RlPmF2b2lkX3RleHQ9InByb2R1Y3QxLHByb2R1Y3QyLHByb2R1Y3Q4IjwvY29kZT4gTm90ZTogbm8gc3BhY2VzIGFyb3VuZCB0aGUgY29tbWFzITwvcD4NCg0KPHA+VGhlc2Ugb3B0aW9ucyBjYW4gYmUgdXNlZCBpbiB0YW5kZW0gdG8gY3JlYXRlIHNvbWUgY3JhenkgYnJhaW4tYmVuZGluZyBjb21iaW5hdGlvbnMuPC9wPg0KDQo8Yj5XaGF0IGFib3V0IGFsdCB0ZXh0PzwvYj4NCg0KPHA+SWYgeW91J3ZlIGFscmVhZHkgbG9hZGVkIGFsbCB5b3VyIGltYWdlcyBhbmQgdGhlIHByb3NwZWN0IG9mIGdvaW5nIHRocm91Z2ggdGhlbSB0byBjcmVhdGUgYSBuYW1pbmcgY29udmVudGlvbiBpcyBkYXVudGluZywgdHJ5IGFkZGluZyB0aGUgPGNvZGU+dXNlX2FsdD0iMSI8L2NvZGU+IG9wdGlvbiAoJzEnIGlzIGEgY29udmVuaWVuY2UsIGl0IGNvdWxkIGJlIGFueXRoaW5nIHJlYWxseSkuIFRoZW4sIGluc3RlYWQgb2YgbG9va2luZyBpbiB0aGUgaW1hZ2UgZmlsZW5hbWUsIGl0IHdpbGwgbG9vayBpbiB0aGUgaW1hZ2UncyAnQWx0IFRleHQnIGZvciB3b3JkcyB0byBtYXRjaC9leGNsdWRlLjwvcD4NCg0KPGI+R2V0dGluZyB3aWxkPC9iPg0KDQo8cD5Ob3cgdGhpbmdzIGdldCBldmVuIG1vcmUgd2FycGVkLiBTaW5jZSB5b3Ugb2Z0ZW4gZG9uJ3Qga25vdyB3aGljaCBwcm9kdWN0IHBhZ2UgeW91ciBjdXN0b21lcnMgd2lsbCBsb29rIGF0LCB5b3UgY2FuIHVzZSB0aGUgc3BlY2lhbCB3aWxkY2FyZCAiPyIgYXMgYW4gb3B0aW9uIGluIHlvdXIgbGlzdCBvZiB3b3JkcyB0byBtYXRjaCBvciBhdm9pZC4gV2hhdCB0aGlzIGRvZXMgaXMgbG9vayBhdCB0aGUgY3VycmVudCBzZWN0aW9uIG5hbWUgb2YgdGhlIHBhZ2UgYmVpbmcgZGlzcGxheWVkIGFuZCB1c2UgdGhhdCBhcyBvbmUgb2YgeW91ciBpZ25vcmUgd29yZHMuIFNvIGlmIGEgcGVyc29uIHdhcyBvbiBwYWdlIDxjb2RlPnd3dy5tZWdhem9vLmNvbS9saW9ucy90aGUtaHVtYmxlLWxpb248L2NvZGU+IGFuZCB0aGUgcGx1Z2luIHdhcyBjYWxsZWQgdGh1czo8L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgY2F0ZWdvcnk9ImJhbm5lcnMiIG1hdGNoX3RleHQ9Ij8iIC8mZ3Q7PC9jb2RlPg0KDQo8cD5hbnkgaW1hZ2UgbmFtZSBpbiB0aGUgImJhbm5lcnMiIGNhdGVnb3J5IHRoYXQgaGFkIHRoZSB0ZXh0ICJsaW9ucyIgaW4gaXQgd291bGQgYmUgZmFpciBnYW1lIGZvciBhcHBlYXJpbmcgb24gdGhlIHBhZ2UuIEFnYWluLCB5b3UgY2FuIGRvIHRoZSByZXZlcnNlIGJ5IHVzaW5nIGF2b2lkX3RleHQ6PC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJiYW5uZXJzIiBhdm9pZF90ZXh0PSI/IiAvJmd0OzwvY29kZT4NCg0KPHA+VGhpcyBtZWFucyB0aGF0IGlmIHlvdSBhcnJhbmdlIHlvdXIgc2l0ZSBzdWNoIHRoYXQgZWFjaCBwcm9kdWN0IGhhcyBhIHNlcGFyYXRlIHNlY3Rpb24sIHlvdSBjYW4gdGhlbiBuYW1lIHlvdXIgYmFubmVyIGltYWdlcyAob3IgYWx0IHRleHQpIGluIHN1Y2ggYSB3YXkgdGhhdCBjZXJ0YWluIGltYWdlcyB3b24ndCBiZSBkaXNwbGF5ZWQgd2hlbiBhIHVzZXIgdmlzaXRzIGEgcGFydGljdWxhciBzZWN0aW9uLjwvcD4NCg0KPHA+WW91IGNhbiB1c2UgdGhlICI/IiBpbiBhZGRpdGlvbiB0byBhIGxpc3Qgb2Ygd29yZHMgaWYgeW91IGxpa2UsIGFuZCBtaXggYm90aCA8Y29kZT5tYXRjaF90ZXh0PC9jb2RlPiBhbmQgPGNvZGU+YXZvaWRfdGV4dDwvY29kZT4gdW50aWwgeW91ciBicmFpbiBleHBsb2Rlcy48L3A+DQoNCjxiPkxvb2tpbmcgYXJvdW5kPC9iPg0KDQo8cD5CeSBkZWZhdWx0LCB0aGUgIj8iIG1lYW5zIHRoZSBwbHVnaW4gd2lsbCBsb29rIGF0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHNlY3Rpb24gZm9yIGEgbWF0Y2gvZXhjbHVzaW9uLiBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhhdCwgeW91IGhhdmUgdGhlIGNob2ljZSBvZiBnaXZpbmcgdGhlIDxjb2RlPmxvb2tfaW48L2NvZGU+IG9wdGlvbi4gVGhpcyBmb3JjZXMgdGhlIHBsdWdpbiB0byBsb29rIGZvciBhIG1hdGNoIHNvbWV3aGVyZSBlbHNlIGluIHRoZSBVUkwuPC9wPg0KDQo8cD5UaGUgY3VycmVudCBvcHRpb25zIGF2YWlsYWJsZSBhcmUgImNhdGVnb3J5IiwgInNlY3Rpb24iIG9yICJ0aXRsZSI7IHRoZSAndGl0bGUnIGluIHRoaXMgY2FzZSBpcyB0aGUgbmFtZSBvZiB0aGUgYXJ0aWNsZSBpdHNlbGYuIEZvciBleGFtcGxlOjwvcD4NCg0KPGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYmFubmVycyIgbWF0Y2hfdGV4dD0iPyIgbG9va19pbj0idGl0bGUiIC8mZ3Q7PC9jb2RlPg0KDQo8cD53b3VsZCBsb29rIGF0IGp1c3QgdGhlIGFydGljbGUncyB0aXRsZSBhbmQgY29tcGFyZSBpdCB0byB0aGUgaW1hZ2UgbmFtZXMuIEluIG91ciBleGFtcGxlIFVSTCBhYm92ZSwgaWYgdGhlcmUgd2FzIGFuIGltYWdlIGluIHRoZSAiYmFubmVycyIgY2F0ZWdvcnkgd2hpY2ggaGFkIDxjb2RlPnRoZS1odW1ibGUtbGlvbjwvY29kZT4gaW4gaXRzIG5hbWUsIGl0IHdvdWxkIGFwcGVhciBvbiBhbnkgcGFnZSB0aGF0IGhhZCBhIFVSTCB3aXRoIGEgdGl0bGUgY29udGFpbmluZyA8Y29kZT50aGUtaHVtYmxlLWxpb248L2NvZGU+LiBJZiB5b3UgaW5zdGVhZCB1c2VkOjwvcD4NCg0KPGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYmFubmVycyIgbWF0Y2hfdGV4dD0iPyIgbG9va19pbj0idGl0bGUsc2VjdGlvbiIgLyZndDs8L2NvZGU+DQoNCjxwPml0IHdvdWxkIGluY2x1ZGUgYW55IGltYWdlIG5hbWVzIHRoYXQgaGFkIGVpdGhlciAibGlvbnMiIG9yICJ0aGUtaHVtYmxlLWxpb24iIGluIHRoZW0uIE5vdGUgdGhhdCBpZiB5b3Ugc3BlY2lmeSBhIDxjb2RlPmxvb2tfaW48L2NvZGU+IHBhcmFtZXRlciB5b3UgbXVzdCBzcGVjaWZ5IGV2ZXJ5IHBsYWNlIHRvIGxvb2sgaW47IGl0IG9ubHkgYXNzdW1lcyAic2VjdGlvbiIgaWYgeW91IG1pc3Mgb3V0IHRoZSA8Y29kZT5sb29rX2luPC9jb2RlPiBwYXJhbWV0ZXIgZW50aXJlbHkuPC9wPg0KDQo8cD5BbHNvIGJlIGF3YXJlIHRoYXQgaWYgeW91IHNwZWNpZnkgInRpdGxlIiBhcyBhIHBsYWNlIHRvIDxjb2RlPmxvb2tfaW48L2NvZGU+IGFuZCB0aGUgcGVyc29uIGlzIHN1cmZpbmcgYSBwYWdlIHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIGFydGljbGVzIG9ubHksIHRoZSB0aXRsZSBwYXJhbWV0ZXIgd2lsbCBiZSBpZ25vcmVkLjwvcD4NCg0KPGI+TGlua2luZyB0aGUgaW1hZ2U8L2I+DQoNCjxwPlRoZSBmaW5hbCBwaWVjZSBvZiB0aGUgcHV6emxlIGlzIHRvIGRpcmVjdCBwZW9wbGUgdG8gYSB3ZWIgbGluayB3aGVuIHRoZXkgY2xpY2sgb24gdGhlIGltYWdlLiBTaW5jZSB0aGUgaW1hZ2UgaXMgZ29pbmcgdG8gYmUgYSBiYW5uZXIgYW5kIHlvdSdyZSB1bmxpa2VseSB0byB3YW50IHRvIHB1dCBhIGNhcHRpb24gb24gaXQsIEkgZmlndXJlZCB0aGUgY2FwdGlvbiB3YXMgYSBnb29kIHBsYWNlIHRvIHN0b3JlIGEgd2ViIGxpbmsuIFdoZW4geW91IHVwbG9hZCB5b3VyIGltYWdlLCBwdXQgdGhlIGRlc2lyZWQgZGVzdGluYXRpb24gVVJMIGluIHRoZSAnY2FwdGlvbicgZmllbGQgYW5kIHVzZSB0aGUgPGNvZGU+bGlua2NhcHRpb249IjEiPC9jb2RlPiBvcHRpb24gdG8gcHVsbCBpdCBmcm9tIHRoZXJlIGFuZCBtYWtlIHlvdXIgYmFubmVyIGNsaWNrYWJsZS48L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgY2F0ZWdvcnk9ImJhbm5lcnMiIG1hdGNoX3RleHQ9Ij8iIGF2b2lkX3RleHQ9InRlc3QiIGxvb2tfaW49InNlY3Rpb24sdGl0bGUiIGxpbmtjYXB0aW9uPSIxIiAvJmd0OzwvY29kZT4NCg0KPHA+SWYgdGhlIFVSTCBiZWdpbnMgd2l0aCA8Y29kZT5odHRwOi8vPC9jb2RlPiwgaXQgd2lsbCBiZSB1c2VkIHZlcmJhdGltLiBJZiBub3QsIGl0IHdpbGwgYmUgYXNzdW1lZCB0byBiZSBhICdsb2NhbCcgbGluayBhbmQgd2lsbCBoYXZlIDxjb2RlPiZsdDt0eHA6c2l0ZV91cmwgLyZndDs8L2NvZGU+IHByZXBlbmRlZCB0byBpdC48L3A+DQoNCjxiPlRyYWNrIGl0PC9iPg0KDQo8cD5JZiB5b3UgdXNlIDxjb2RlPmxpbmtjYXB0aW9uPSIxIjwvY29kZT4sIHRoZSBwbHVnaW4gd2lsbCBhdXRvbWF0aWNhbGx5IGFkZCBhIHBhcmFtZXRlciB0byB0aGUgbGluayBzbyB5b3UgY2FuIHRyYWNrIHdoaWNoIGJhbm5lcnMgd2VyZSBjbGlja2VkIGluIHlvdXIgdGV4dHBhdHRlcm4gbG9ncy4gU2luY2UgdGhpcyBpcyBhIGJpdCBsaWtlIHJlZmVycmVyIHRyYWNraW5nLCB0aGUgb3B0aW9uIHRvIGNvbnRyb2wgaXQgaXMgbmFtZWQgPGNvZGU+cmVmZXJlcjwvY29kZT4gJiM4MjExOyBhbmQgaXMgbWlzLXNwZWxsZWQgZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgdGhlIEhUVFAgc3BlYyB3YXMgYWxsIHRob3NlIHllYXJzIGFnbyA6LSk8L3A+DQoNCjxwPjxjb2RlPnJlZmVyZXI8L2NvZGU+IHRha2VzIGEgdGV4dCBhcmd1bWVudCB0byB1c2UgYXMgYSBwcmVmaXguIEFuIGV4YW1wbGU6PC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJiYW5uZXJzIiBtYXRjaF90ZXh0PSI/LGdvbGRmaXNoIiByZWZlcmVyPSJ0cmFja2lkIiAvJmd0OzwvY29kZT4NCg0KPHA+VGhpcyB3aWxsIGdlbmVyYXRlIGEgdXJsIHdpdGggPGNvZGU+P3RyYWNraWQ9PGk+aW1hZ2VfbnVtYmVyPC9pPjwvY29kZT4gYWRkZWQgdG8gaXQsIHdoZXJlIDxjb2RlPjxpPmltYWdlX251bWJlcjwvaT48L2NvZGU+IGlzIHRoZSBpbWFnZSBpZCBvZiB0aGUgcGljdHVyZSBpbiBxdWVzdGlvbi48L3A+DQoNCjxwPklmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZSA8Y29kZT5yZWZlcmVyPC9jb2RlPiwgYWxsIGxpbmthYmxlIGltYWdlcyB3aWxsIGhhdmUgdGhlIGNvZGUgPGNvZGU+P2JpZD08aT5pbWFnZV9udW1iZXI8L2k+PC9jb2RlPiBhZGRlZCAoZm9yICdCYW5uZXIgSUQnKS4gSWYgeW91IHdpc2ggdG8gZGlzYWJsZSB0aGUgb3B0aW9uLCBhZGQgPGNvZGU+cmVmZXJlcj0iIjwvY29kZT4uPC9wPg0KDQo8Yj5BbmQgdGhlcmUncyBtb3JlPC9iPg0KDQo8cD5XYW50IG1vcmUgdGhhbiBvbmUgaW1hZ2Ugc2VudCBvdXQgYXQgb25jZT8gQWRkIHRoZSA8Y29kZT5saW1pdDwvY29kZT4gcGFyYW1ldGVyLiBEZWZhdWx0cyB0byAxIGltYWdlLjwvcD4iO3M6NDoiY29kZSI7czo0NTQ5OiIvLyB2MC4xICBJbml0aWFsIHB1YmxpYyByZWxlYXNlDQovLyB2MC4xMSBBZGRlZCBQRlggdG8gcXVlcnkgKHRoYW5rcyBtZXJjdXJ5KQ0KLy8gdjAuMTIgRml4ZWQgaGVscCB0byBpbmNsdWRlIHRyYWlsaW5nIHNsYXNoZXMgKHRoYW5rcyB2aXR0b3JpbykNCi8vIHYwLjEzIFVucmVsZWFzZWQuIEFkZGVkIGxvb2tfaW49Y2F0ZWdvcnkgYW5kIHJlZmVyZXINCi8vIHYwLjE0IEFkZGVkIG1hdGNoX3RleHQgYW5kIHVzZV9hbHQgKHRoYW5rcyBsdWtlcGVybXNuKQ0KLy8gdjAuMTUgQWRkZWQgYWx3YXlzX2Rpc3BsYXkgYW5kIGxpbWl0ICh0aGFua3MgbHVrZXBlcm1zbikNCi8vIHYwLjIgIFRPRE86IEFkZCBzdWJjYXRlZ29yeSBzdXBwb3J0IC0gSU4gREVWRUxPUE1FTlQNCmZ1bmN0aW9uIHNtZF9yYW5kb21fYmFubmVyKCRhdHRzKSB7DQoJZ2xvYmFsICRwcmV0ZXh0Ow0KDQoJJGNhdGVnb3J5ID0gJyUnOw0KCSRsb29rX2luID0gJyc7DQoJJG1hdGNoX3RleHQgPSAnJzsNCgkkYXZvaWRfdGV4dCA9ICcnOw0KCSRyZWZlcmVyID0gJ2JpZCc7DQoJJHVzZV9hbHQgPSAnJzsNCgkkYWx3YXlzX2Rpc3BsYXkgPSAnJzsNCgkkbGltaXQgPSAnMSc7DQoJJHdoZXJlTmFtZSA9ICcnOw0KCSRsaW5rY2FwdGlvbiA9IChpc3NldCgkbGlua2NhcHRpb24pKSA/IHRydWUgOiBmYWxzZTsNCgkkbWF0Y2hBcnJheSA9IGFycmF5KCk7DQoJJGF2b2lkQXJyYXkgPSBhcnJheSgpOw0KDQoJaWYgKGlzX2FycmF5KCRhdHRzKSkgZXh0cmFjdCgkYXR0cyk7DQoNCgkvLyB1c2VfYWx0IHN3aXRjaGVzIHRoZSBXSEVSRSBzdGF0ZW1lbnQgdG8gbG9vayBpbiB0aGUgaW1hZ2UgJ2FsdCcgaW5zdGVhZCBvZiAnbmFtZScNCglpZigkdXNlX2FsdCA9PSAiIikgew0KCQkkd2hlcmVQb3MgPSAibmFtZSI7DQoJfSBlbHNlIHsNCgkJJHdoZXJlUG9zID0gImFsdCI7DQoJfQ0KDQoJLy8qKiBNQVRDSElORyBURVhUIA0KCS8vIElmIG1hdGNoX3RleHQgaXMgc3BlY2lmaWVkLCBsb29rX2luIG11c3QgYWxzbyBiZSBnaXZlbjsNCgkvLyBpZiBpdCBpc24ndCwgc2V0IGl0IHRvIGEgZGVmYXVsdCBmaXJzdA0KCWlmICgkbWF0Y2hfdGV4dCAhPSAiIiApIHsNCgkJaWYgKCRsb29rX2luID09ICIiKSB7DQoJCQkkbG9va19pbiA9ICJzZWN0aW9uIjsNCgkJfQ0KDQoJCSR1cmxfcGFydHMgPSBleHBsb2RlKCIsIiwgJGxvb2tfaW4pOw0KCQkkbWF0Y2hlcyA9IGV4cGxvZGUoIiwiLCAkbWF0Y2hfdGV4dCk7DQoNCgkJZm9yZWFjaCAoJHVybF9wYXJ0cyBhcyAkcGFydCkgew0KCQkJZm9yZWFjaCAoJG1hdGNoZXMgYXMgJG1hdGNoKSB7DQoJCQkJaWYgKCRtYXRjaCA9PT0gIj8iKSB7DQoJCQkJCXN3aXRjaCAoJHBhcnQpIHsNCgkJCQkJCWNhc2UgInNlY3Rpb24iOg0KCQkJCQkJCSRtYXRjaCA9ICRwcmV0ZXh0W3NdOw0KCQkJCQkJCWJyZWFrOw0KCQkJCQkJY2FzZSAiY2F0ZWdvcnkiOg0KCQkJCQkJCSRtYXRjaCA9ICRwcmV0ZXh0W2NdOw0KCQkJCQkJCWJyZWFrOw0KCQkJCQkJY2FzZSAidGl0bGUiOg0KCQkJCQkJCS8vIENoZWNrIGlmIHRoaXMgaXMgYW4gYXJ0aWNsZSBieSB0ZXN0aW5nIG5leHRfaWQNCgkJCQkJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygnbmV4dF9pZCcsJHByZXRleHQpKSB7IA0KCQkJCQkJCQkvLyBHZXQgcmlkIG9mIGFueSA/IHBhcmFtcyBhZnRlciB0aGUgVVJMIHRpdGxlDQoJCQkJCQkJCSR1cmwgPSBzcGxpdCgiXD8iLCRwcmV0ZXh0W3JlcV0pOw0KCQkJCQkJCQkkbWF0Y2ggPSBzdWJzdHIoc3RycmNocigkdXJsWzBdLCAiLyIpLCAxKTsNCgkJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCQkkbWF0Y2ggPSAiIjsNCgkJCQkJCQl9DQoJCQkJCQkJYnJlYWs7DQoJCQkJCX0NCgkJCQl9DQoJCQkJaWYgKCRtYXRjaCAhPSAiIikgew0KCQkJCQlpZiAoIWluX2FycmF5KCRtYXRjaCwkbWF0Y2hBcnJheSkpIHsNCgkJCQkJCSRtYXRjaEFycmF5W10gPSAkbWF0Y2g7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQkkbnVtTWF0Y2hlcyA9IGNvdW50KCRtYXRjaEFycmF5KTsNCgkJJGN0ciA9IDE7DQoJCWZvcmVhY2ggKCRtYXRjaEFycmF5IGFzICRtYXRjaFN0cikgew0KCQkJaWYgKCRjdHIgPT0gMSkgew0KCQkJCSR3aGVyZU5hbWUgLj0gIiBBTkQgKCAiOw0KCQkJfSBlbHNlIHsNCgkJCQkkd2hlcmVOYW1lIC49ICIgT1IgIjsNCgkJCX0NCgkJCSR3aGVyZU5hbWUgLj0gJHdoZXJlUG9zIC4gIiBMSUtFICclIi4kbWF0Y2hTdHIuIiUnIjsNCgkJCWlmICgkY3RyID09ICRudW1NYXRjaGVzKSB7DQoJCQkJJHdoZXJlTmFtZSAuPSAiICkgIjsNCgkJCX0NCgkJCSRjdHIrKzsNCgkJfQ0KCX0NCg0KCS8vKiogQVZPSURJTkcgVEVYVA0KCS8vIElmIGF2b2lkX3RleHQgaXMgc3BlY2lmaWVkLCBsb29rX2luIG11c3QgYWxzbyBiZSBnaXZlbjsNCgkvLyBpZiBpdCBpc24ndCwgc2V0IGl0IHRvIGEgZGVmYXVsdCBmaXJzdA0KCWlmICgkYXZvaWRfdGV4dCAhPSAiIiApIHsNCgkJaWYgKCRsb29rX2luID09ICIiKSB7DQoJCQkkbG9va19pbiA9ICJzZWN0aW9uIjsNCgkJfQ0KDQoJCSR1cmxfcGFydHMgPSBleHBsb2RlKCIsIiwkbG9va19pbik7DQoJCSRtYXRjaGVzID0gZXhwbG9kZSgiLCIsJGF2b2lkX3RleHQpOw0KCQlmb3JlYWNoICgkdXJsX3BhcnRzIGFzICRwYXJ0KSB7DQoJCQlmb3JlYWNoICgkbWF0Y2hlcyBhcyAkbWF0Y2gpIHsNCgkJCQlpZiAoJG1hdGNoID09PSAiPyIpIHsNCgkJCQkJc3dpdGNoICgkcGFydCkgew0KCQkJCQkJY2FzZSAic2VjdGlvbiI6DQoJCQkJCQkJJG1hdGNoID0gJHByZXRleHRbc107DQoJCQkJCQkJYnJlYWs7DQoJCQkJCQljYXNlICJjYXRlZ29yeSI6DQoJCQkJCQkJJG1hdGNoID0gJHByZXRleHRbY107DQoJCQkJCQkJYnJlYWs7DQoJCQkJCQljYXNlICJ0aXRsZSI6DQoJCQkJCQkJLy8gQ2hlY2sgaWYgdGhpcyBpcyBhbiBhcnRpY2xlIGJ5IHRlc3RpbmcgbmV4dF9pZA0KCQkJCQkJCWlmIChhcnJheV9rZXlfZXhpc3RzKCduZXh0X2lkJywkcHJldGV4dCkpIHsgDQoJCQkJCQkJCS8vIEdldCByaWQgb2YgYW55ID8gcGFyYW1zIGFmdGVyIHRoZSBVUkwgdGl0bGUNCgkJCQkJCQkJJHVybCA9IHNwbGl0KCJcPyIsJHByZXRleHRbcmVxXSk7DQoJCQkJCQkJCSRtYXRjaCA9IHN1YnN0cihzdHJyY2hyKCR1cmxbMF0sICIvIiksIDEpOw0KCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCSRtYXRjaCA9ICIiOw0KCQkJCQkJCX0NCgkJCQkJCQlicmVhazsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlpZiAoJG1hdGNoICE9ICIiKSB7DQoJCQkJCWlmICghaW5fYXJyYXkoJG1hdGNoLCRhdm9pZEFycmF5KSkgew0KCQkJCQkJJGF2b2lkQXJyYXlbXSA9ICRtYXRjaDsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCWZvcmVhY2ggKCRhdm9pZEFycmF5IGFzICRhdm9pZFN0cikgew0KCQkJJHdoZXJlTmFtZSAuPSAiIEFORCAiIC4gJHdoZXJlUG9zIC4gIiBOT1QgTElLRSAnJSIuJGF2b2lkU3RyLiIlJyI7DQoJCX0NCgl9DQoNCgkkcXVlcnkgPSAic2VsZWN0IGlkLGNhcHRpb24gZnJvbSAiLlBGWC4idHhwX2ltYWdlIHdoZXJlIGNhdGVnb3J5IGxpa2UgJyRjYXRlZ29yeScgJHdoZXJlTmFtZSBvcmRlciBieSByYW5kKCkgbGltaXQgJGxpbWl0IjsNCgkkcnMgPSBnZXRSb3dzKCRxdWVyeSk7DQoJJG91dFN0ciA9ICcnOw0KDQoJaWYoJHJzKSB7DQoJCSRvdXRTdHIgPSBzbWRfcnNfb3V0KCRycyk7DQoJfSBlbHNlIHsNCgkJLy8gTm8gbWF0Y2hpbmcgaW1hZ2VzIGZvdW5kLiBJZiBhbHdheXNfZGlzcGxheSBpcyBvbiwgcGljayBhbnkgaW1hZ2UocykNCgkJaWYgKCRhbHdheXNfZGlzcGxheSkgew0KCQkJJHF1ZXJ5ID0gInNlbGVjdCBpZCxjYXB0aW9uIGZyb20gIi5QRlguInR4cF9pbWFnZSB3aGVyZSBjYXRlZ29yeSBsaWtlICckY2F0ZWdvcnknIG9yZGVyIGJ5IHJhbmQoKSBsaW1pdCAkbGltaXQiOw0KCQkJJHJzID0gZ2V0Um93cygkcXVlcnkpOw0KCQkJaWYoJHJzKSB7DQoJCQkJJG91dFN0ciA9IHNtZF9yc19vdXQoJHJzKTsNCgkJCX0NCgkJfSBlbHNlIHsNCgkJCXJldHVybjsNCgkJfQ0KCX0NCg0KCXJldHVybiAkb3V0U3RyOw0KfQ0KDQpmdW5jdGlvbiBzbWRfcnNfb3V0KCRycykgew0KCSRvdXQgPSAnJzsNCglmb3JlYWNoKCRycyBhcyAkcm93KSB7DQoJCWlmICgkbGlua2NhcHRpb24pIHsNCgkJCSRsaW5rTmFtZT10cmltKCRyb3dbJ2NhcHRpb24nXSk7DQoJCQkkcHJlZml4ID0gImh0dHA6Ly8iOw0KCQkJaWYgKHN1YnN0cigkbGlua05hbWUsIDAsIHN0cmxlbigkcHJlZml4KSkgPT09ICRwcmVmaXgpIHsNCgkJCQkkbGlua3VybCA9ICRsaW5rTmFtZTsNCgkJCX0gZWxzZSB7DQoJCQkJJGxpbmt1cmwgPSBzaXRlX3VybCgkYXR0cykgLiAkbGlua05hbWU7DQoJCQl9DQoJCQlpZiAoJHJlZmVyZXIgIT0gIiIpIHsNCgkJCQkkcmVmZXJlciA9ICI/Ii4gJHJlZmVyZXIgLiAiPSIgLiRyb3dbaWRdOw0KCQkJfQ0KCQkJJG91dCAuPSAiPGEgaHJlZj0iLiRsaW5rdXJsLiRyZWZlcmVyLiI+Ii5pbWFnZSgkcm93KS4iPC9hPiI7DQoJCX0gZWxzZSB7DQoJCQkkb3V0IC49IGltYWdlKCRyb3cpOw0KCQl9DQoJfQ0KCXJldHVybiAkb3V0Ow0KfQ0KIjtzOjQ6InR5cGUiO3M6MToiMCI7czozOiJtZDUiO3M6MzI6ImIxNjk5YmUxZjg2ZTdlOTY0MTQwZDg5NWFhMzhhN2M0Ijt9