# Name: kuo_image_name v0.2 # Type: Admin/Public plugin # Replace automatically image ID numbers with file names in public side. Only for full size images. # Author: Petri Ikonen # URL: http://kuopassa.net/txp/ # Recommended load order: 6 # ..................................................................... # This is a plugin for Textpattern CMS - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE0OiJrdW9faW1hZ2VfbmFtZSI7czo2OiJhdXRob3IiO3M6 MTI6IlBldHJpIElrb25lbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyNDoiaHR0cDovL2t1b3Bh c3NhLm5ldC90eHAvIjtzOjc6InZlcnNpb24iO3M6MzoiMC4yIjtzOjExOiJkZXNjcmlwdGlv biI7czo5NzoiUmVwbGFjZSBhdXRvbWF0aWNhbGx5IGltYWdlIElEIG51bWJlcnMgd2l0aCBm aWxlIG5hbWVzIGluIHB1YmxpYyBzaWRlLiBPbmx5IGZvciBmdWxsIHNpemUgaW1hZ2VzLiI7 czo0OiJjb2RlIjtzOjYzMzc6IiMgQkVHSU5TOiBJRiBQVUJMSUMNCmlmIChAdHhwaW50ZXJm YWNlID09PSAncHVibGljJykgew0KICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCdrdW9faW1hZ2Vf cmVuYW1lcl9lYXJseScsJ3RleHRwYXR0ZXJuJyk7DQogICAgcmVnaXN0ZXJfY2FsbGJhY2so J2t1b19pbWFnZV9yZW5hbWVyX2xhdGUnLCd0ZXh0cGF0dGVybl9lbmQnKTsNCg0KICAgICMg QkVHSU5TOiBGVU5DVElPTiBUTyBDT0xMRUNUIFBBR0UgSFRNTA0KICAgIGZ1bmN0aW9uIGt1 b19pbWFnZV9yZW5hbWVyX2Vhcmx5KCkgew0KICAgICAgICBvYl9zdGFydCgpOw0KICAgIH0N CiAgICAjIEVORFM6IEZVTkNUSU9OIFRPIENPTExFQ1QgUEFHRSBIVE1MDQoNCiAgICAjIEJF R0lOUzogRlVOQ1RJT04gVE8gT1VUUFVUIENPTExFQ1RFRCBQQUdFIEhUTUwNCiAgICBmdW5j dGlvbiBrdW9faW1hZ2VfcmVuYW1lcl9sYXRlKCkgew0KICAgICAgICAka3VvX291dHB1dCA9 IG9iX2dldF9jbGVhbigpOw0KDQogICAgICAgICMgVFJZIFRPIExPQ0FURSBJTUFHRSBJRCdT IElOIEhUTUwNCiAgICAgICAgaWYgKHN0cnBvcygka3VvX291dHB1dCwnL2ltYWdlcy8nKSA9 PSB0cnVlKSB7DQoNCiAgICAgICAgICAgIHByZWdfbWF0Y2hfYWxsKCcvKFswLTldK1wuKGpw Z3xqcGVnfHBuZ3xpY298Z2lmfGJtcCkpL2knLCRrdW9fb3V0cHV0LCRrdW9faW1hZ2VfaWRz KTsNCg0KICAgICAgICAgICAgaWYgKCFlbXB0eSgka3VvX2ltYWdlX2lkcykpIHsNCg0KICAg ICAgICAgICAgICAgICMgVEhJUyBJUyBGT1IgVEhFIElEJ1MgSU4gREFUQUJBU0UgUVVFUlkN CiAgICAgICAgICAgICAgICAka3VvX2ltYWdlX2lkX2FycmF5ID0gYXJyYXkoKTsNCg0KICAg ICAgICAgICAgICAgICMgVEhJUyBJUyBGT1IgVEhFIEhUTUwgTUFSS0VSUyBJTiBTVFJfUkVQ TEFDRQ0KICAgICAgICAgICAgICAgICRrdW9faW1hZ2VfaWRfYXJyYXlfaHRtbF9tYXJrZXIg PSBhcnJheSgpOw0KDQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGt1b19pbWFnZV9pZHNb MF0gYXMgJGt1b19pbWFnZV9pZCkgew0KICAgICAgICAgICAgICAgICAgICAka3VvX2ltYWdl X2lkX2FycmF5W10gLj0gZmlsdGVyX3Zhcigka3VvX2ltYWdlX2lkLEZJTFRFUl9TQU5JVEla RV9OVU1CRVJfSU5UKTsNCiAgICAgICAgICAgICAgICAgICAgJGt1b19pbWFnZV9pZF9hcnJh eV9odG1sX21hcmtlcltdIC49ICcvJy4ka3VvX2ltYWdlX2lkOw0KICAgICAgICAgICAgICAg IH0NCiAgICAgICAgICAgICAgICAjIEZPUkVBQ0ggRU5EUw0KDQogICAgICAgICAgICAgICAg dW5zZXQoJGt1b19pbWFnZV9pZHMpOw0KDQogICAgICAgICAgICAgICAgIyBSRU1PVklORyBE VVBMSUNBVEVTDQogICAgICAgICAgICAgICAgJGt1b19pbWFnZV9pZF9hcnJheSA9IGFycmF5 X3VuaXF1ZSgka3VvX2ltYWdlX2lkX2FycmF5KTsNCiAgICAgICAgICAgICAgICAka3VvX2lt YWdlX2lkX2FycmF5X2h0bWxfbWFya2VyID0gYXJyYXlfdW5pcXVlKCRrdW9faW1hZ2VfaWRf YXJyYXlfaHRtbF9tYXJrZXIpOw0KDQogICAgICAgICAgICAgICAgIyBGRVRDSElORyBJTUFH RSBOQU1FUyBGUk9NIERCDQogICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgka3VvX2ltYWdl X2lkX2FycmF5KSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQoJGt1b19pbWFn ZV9pZF9hcnJheSkgPT0gMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGt1b19pbWFn ZV9uYW1lcyA9IHNhZmVfcm93KCJgbmFtZWAsIGBpZGAsIGBleHRgIiwidHhwX2ltYWdlIiwi YGlkYCA9ICciLiRrdW9faW1hZ2VfaWRfYXJyYXlbMF0uIiciLDApOw0KICAgICAgICAgICAg ICAgICAgICAgICAgJGt1b19maWxlX25hbWVzID0gJy8nLnN1YnN0cigka3VvX2ltYWdlX25h bWVzWyduYW1lJ10sMCxzdHJycG9zKCRrdW9faW1hZ2VfbmFtZXNbJ25hbWUnXSwnLicpKS4n XycuJGt1b19pbWFnZV9uYW1lc1snaWQnXS4ka3VvX2ltYWdlX25hbWVzWydleHQnXTsNCiAg ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAg ICAgICAgICAgICAgICAgICAgICRrdW9faW1hZ2VfbmFtZXMgPSBzYWZlX3F1ZXJ5KCJTRUxF Q1QgRElTVElOQ1QgYG5hbWVgLCBgaWRgLCBgZXh0YCBGUk9NIGAiLnNhZmVfcGZ4KCd0eHBf aW1hZ2UnKS4iYCBXSEVSRSBgaWRgIElOICgiLmltcGxvZGUoJywnLCRrdW9faW1hZ2VfaWRf YXJyYXkpLiIpIiwwKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRrdW9fZmlsZV9uYW1l cyA9IGFycmF5KCk7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgka3VvX2lt YWdlX25hbWVzIGFzICRrdW9fbmFtZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICRrdW9fZmlsZV9uYW1lc1tdIC49ICcvJy5zdWJzdHIoJGt1b19uYW1lWyduYW1lJ10sMCxz dHJycG9zKCRrdW9fbmFtZVsnbmFtZSddLCcuJykpLidfJy4ka3VvX25hbWVbJ2lkJ10uJGt1 b19uYW1lWydleHQnXTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg ICAgICAgICAgICAgICMgRk9SRUFDSCBFTkRTDQogICAgICAgICAgICAgICAgICAgIH0NCg0K ICAgICAgICAgICAgICAgICAgICAjIEJFR0lOUzogSFRNTCBJUyBNT0RJRklFRCBXSVRIIFNF QVJDSCBBTkQgUkVQTEFDRQ0KICAgICAgICAgICAgICAgICAgICAka3VvX291dHB1dCA9IHN0 cl9yZXBsYWNlKCRrdW9faW1hZ2VfaWRfYXJyYXlfaHRtbF9tYXJrZXIsJGt1b19maWxlX25h bWVzLCRrdW9fb3V0cHV0KTsNCiAgICAgICAgICAgICAgICAgICAgIyBFTkRTOiBIVE1MIElT IE1PRElGSUVEIFdJVEggU0VBUkNIIEFORCBSRVBMQUNFDQoNCiAgICAgICAgICAgICAgICAg ICAgdW5zZXQoJGt1b19pbWFnZV9pZHMpOw0KICAgICAgICAgICAgICAgICAgICB1bnNldCgk a3VvX2ZpbGVfbmFtZXMpOw0KICAgICAgICAgICAgICAgICAgICB1bnNldCgka3VvX2ltYWdl X2lkX2FycmF5KTsNCiAgICAgICAgICAgICAgICAgICAgdW5zZXQoJGt1b19pbWFnZV9pZF9h cnJheV9odG1sX21hcmtlcik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg ICMgSUYgSUQgQVJSQVkgTk9UIEVNUFRZIEVORFMNCiAgICAgICAgICAgIH0NCiAgICAgICAg ICAgICMgSUYgRU5EUw0KICAgICAgICB9DQogICAgICAgICMgRUxTRSBFTkRTDQoNCiAgICAg ICAgZWNobyAka3VvX291dHB1dDsNCiAgICAgICAgZGllOw0KICAgIH0NCiAgICAjIEVORFM6 IEZVTkNUSU9OIFRPIE9VVFBVVCBDT0xMRUNURUQgUEFHRSBIVE1MDQoNCiAgICAjIEJFR0lO UzogU0VUVElOR1MgQVJFIFNFVCBJRiBJTUFHRSBJRCBJUyBBVkFJTEFCTEUNCiAgICBpZiAo KGlzc2V0KCRfR0VUWydrdW9faW1hZ2VfaWQnXSkpICYmICghZW1wdHkoJF9HRVRbJ2t1b19p bWFnZV9pZCddKSkpIHsNCiAgICAgICAgZGVmaW5lKCdLVU9fSU1BR0VfSUQnLGZpbHRlcl92 YXIoJF9HRVRbJ2t1b19pbWFnZV9pZCddLEZJTFRFUl9TQU5JVElaRV9OVU1CRVJfSU5UKSk7 DQoNCiAgICAgICAgJGt1b19pbWFnZV9pbmZvID0gc2FmZV9yb3coImBuYW1lYCIsInR4cF9p bWFnZSIsImBpZGAgPSAnIi5LVU9fSU1BR0VfSUQuIicgTElNSVQgMCwgMSIsMCk7DQoNCiAg ICAgICAgZGVmaW5lKCdLVU9fSU1BR0VfRVhURU5TSU9OJyxwYXRoaW5mbygka3VvX2ltYWdl X2luZm9bJ25hbWUnXSxQQVRISU5GT19FWFRFTlNJT04pKTsNCiAgICAgICAgZGVmaW5lKCdL VU9fSU1BR0VfTkFNRScsc3Vic3RyKCRrdW9faW1hZ2VfaW5mb1snbmFtZSddLDAsc3RycnBv cygka3VvX2ltYWdlX2luZm9bJ25hbWUnXSwnLicpKSk7DQogICAgICAgIGRlZmluZSgnS1VP X0lNQUdFX1BBVEgnLCcuL2ltYWdlcy8nLktVT19JTUFHRV9JRC4nLicuS1VPX0lNQUdFX0VY VEVOU0lPTik7DQoNCiAgICAgICAgdW5zZXQoJGt1b19pbWFnZV9pbmZvKTsNCiAgICB9DQog ICAgIyBFTkRTOiBTRVRUSU5HUyBBUkUgU0VUIElGIElNQUdFIElEIElTIEFWQUlMQUJMRQ0K DQogICAgIyBCRUdJTlM6IEZFVENISU5HIElNQUdFIEZJTEUgRlJPTSBESVNLDQogICAgaWYg KChkZWZpbmVkKCdLVU9fSU1BR0VfSUQnKSkgJiYgKGlzc2V0KCRfR0VUWydrdW9faW1hZ2Vf bmFtZSddKSkpIHsNCiAgICAgICAgaWYgKChmaWxlX2V4aXN0cyhLVU9fSU1BR0VfUEFUSCkp ICYmIChpc19yZWFkYWJsZShLVU9fSU1BR0VfUEFUSCkpKSB7DQoNCiAgICAgICAgICAgIGhl YWRlcignQ29udGVudC1MZW5ndGg6ICcuZmlsZXNpemUoS1VPX0lNQUdFX1BBVEgpKTsNCiAg ICAgICAgICAgIGhlYWRlcignTGFzdC1Nb2RpZmllZDogJy5kYXRlKERBVEVfUkZDMjgyMixm aWxlbXRpbWUoS1VPX0lNQUdFX1BBVEgpKSk7DQogICAgICAgICAgICBoZWFkZXIoJ0VUYWc6 ICInLm1kNShkYXRlKERBVEVfUkZDMjgyMixmaWxlbXRpbWUoS1VPX0lNQUdFX1BBVEgpKS5L VU9fSU1BR0VfTkFNRSkuJyInKTsNCiAgICAgICAgICAgIGhlYWRlcignQ2FjaGUtQ29udHJv bDogcHVibGljJyk7DQogICAgICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246 IGZpbGVuYW1lPScuS1VPX0lNQUdFX05BTUUpOw0KICAgICAgICAgICAgaGVhZGVyKCdDb250 ZW50LVR5cGU6ICcubWltZV9jb250ZW50X3R5cGUoS1VPX0lNQUdFX1BBVEgpKTsNCg0KICAg ICAgICAgICAgaWYgKCgoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfSUZfTU9ESUZJRURfU0lOQ0Un XSkpICYmIChkYXRlKERBVEVfUkZDMjgyMixmaWxlbXRpbWUoS1VPX0lNQUdFX1BBVEgpKSA9 PT0gJF9TRVJWRVJbJ0hUVFBfSUZfTU9ESUZJRURfU0lOQ0UnXSkpDQogICAgICAgICAgICBv ciAoKGlzc2V0KCRfU0VSVkVSWydIVFRQX0lGX05PTkVfTUFUQ0gnXSkpICYmIHRyaW0oJF9T RVJWRVJbJ0hUVFBfSUZfTk9ORV9NQVRDSCddKSA9PT0gbWQ1KGRhdGUoREFURV9SRkMyODIy LGZpbGVtdGltZShLVU9fSU1BR0VfUEFUSCkpLktVT19JTUFHRV9OQU1FKSkpIHsNCiAgICAg ICAgICAgICAgICBoZWFkZXIoJ0hUVFAvMS4xIDMwNCBOb3QgTW9kaWZpZWQnKTsNCiAgICAg ICAgICAgIH0NCiAgICAgICAgICAgICMgSUYgTU9ESUZJRUQgRU5EUw0KDQogICAgICAgICAg ICAjIFdJTEwgQVRURU1QVCBUTyBVU0UgWC1TRU5ERklMRSBGSVJTVA0KICAgICAgICAgICAg aWYgKChmdW5jdGlvbl9leGlzdHMoJ2FwYWNoZV9nZXRfbW9kdWxlcycpKSAmJiAoaW5fYXJy YXkoJ21vZF94c2VuZGZpbGUnLGFwYWNoZV9nZXRfbW9kdWxlcygpKSkpIHsNCg0KICAgICAg ICAgICAgICAgICMgWC1TRU5ERklMRSBSRVFVSVJFUyBBQlNPTFVURSBQQVRIDQogICAgICAg ICAgICAgICAgJGt1b19wYXRoID0gc2FmZV9yb3coImB2YWxgIiwidHhwX3ByZWZzIiwiYG5h bWVgID0gJ3BhdGhfdG9fc2l0ZSciLDApOw0KICAgICAgICAgICAgICAgICRrdW9fcGF0aCA9 IGZpbHRlcl92YXIoJGt1b19wYXRoWyd2YWwnXSxGSUxURVJfU0FOSVRJWkVfU1RSSU5HKTsN Cg0KICAgICAgICAgICAgICAgIGhlYWRlcignWC1TZW5kZmlsZTogJy4ka3VvX3BhdGguc3Ry X3JlcGxhY2UoJy4vJywnLycsS1VPX0lNQUdFX1BBVEgpKTsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgICAgICMgSUYgWC1TRU5ERklMRSBOT1QgQVZBSUxBQkxFLCBVU0UgUkVBREZJTEUg SU5TVEVBRA0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgcmVhZGZpbGUo S1VPX0lNQUdFX1BBVEgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgICMg SUYgRklMRSBOT1QgVEhFUkUNCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBoZWFkZXIo J0hUVFAvMS4wIDQwNCBOb3QgRm91bmQnKTsNCiAgICAgICAgfQ0KICAgICAgICBkaWU7DQog ICAgfQ0KICAgICMgRU5EUzogRkVUQ0hJTkcgSU1BR0UgRklMRSBGUk9NIERJU0sNCiAgICAj IEJFR0lOUzogUk9VVElORyBJTUFHRSBGSUxFIFRIQVQgSEFTIE9OTFkgSUQgVE8gQSBLRVlX T1JERUQgVVJMDQogICAgZWxzZWlmICgoZGVmaW5lZCgnS1VPX0lNQUdFX0lEJykpICYmICgh aXNzZXQoJF9HRVRbJ2t1b19pbWFnZV9uYW1lJ10pKSkgew0KICAgICAgICBpZiAoIWVtcHR5 KEtVT19JTUFHRV9OQU1FKSkgew0KICAgICAgICAgICAgaGVhZGVyKCdsb2NhdGlvbjogJy5L VU9fSU1BR0VfTkFNRS4nXycuS1VPX0lNQUdFX0lELicuJy5LVU9fSU1BR0VfRVhURU5TSU9O KTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIGhlYWRlcignSFRU UC8xLjAgNDA0IE5vdCBGb3VuZCcpOw0KICAgICAgICB9DQogICAgICAgIGRpZTsNCiAgICB9 DQogICAgIyBFTkRTOiBST1VUSU5HIElNQUdFIEZJTEUgVEhBVCBIQVMgT05MWSBJRCBUTyBB IEtFWVdPUkRFRCBVUkwNCn0NCiMgRU5EUzogSUYgUFVCTElDDQoiO3M6NDoidHlwZSI7czox OiIxIjtzOjU6Im9yZGVyIjtzOjE6IjYiO3M6NToiZmxhZ3MiO3M6MToiMCI7czo0OiJoZWxw IjtzOjM3MDM6Ijx1bCBpZD0ibGlua3MiPgo8bGkgaWQ9Imt1b19pbWFnZV9uYW1lIj48YSBo cmVmPSIja3VvX2ltYWdlX25hbWUiPmt1b19pbWFnZV9uYW1lPC9hPjwvbGk+CjxsaSBpZD0i ZXh0ZXJuYWwiPjxhIGhyZWY9Imh0dHA6Ly9rdW9wYXNzYS5uZXQvdHhwLyIgcmVsPSJleHRl cm5hbCI+a3VvcGFzc2EubmV0L3R4cDwvYT48L2xpPgo8L3VsPgo8ZGl2IGlkPSJicmllZmx5 Ij4KPGgyPkFib3V0IHRoaXMgcGx1Z2luPC9oMj4KPHA+QWZ0ZXIgaW5zdGFsbGluZyB0aGlz IHBsdWdpbiBudW1lcmljYWwgaW1hZ2UgZmlsZXMgYXQgdGhlIHdlYnNpdGUncyBwdWJsaWMg c2lkZSBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgdGhlaXIgZmlsZSBuYW1lcy4gVGhpcyBzeXN0 ZW0gd29ya3Mgb25seSB3aXRoIGZ1bGwgc2l6ZSBpbWFnZXMgYW5kIG5vdCB3aXRoIHRodW1i bmFpbHMuIFNvIHRodW1ibmFpbHMgYXJlIHN0aWxsIHNvbWV0aGluZyBsaWtlIDxjb2RlPjF0 LmpwZzwvY29kZT4gYnV0IGZ1bGwgc2l6ZSBpbWFnZSB3aWxsIGhhdmUgZmlsZSBuYW1lIDxj b2RlPnRoaXNpc2dyZWF0XzEuanBnPC9jb2RlPiwgZm9yIGV4YW1wbGUuIFRvIG1ha2UgdGhp cyBwbHVnaW4gd29yayBwcm9wZXJseSwgY291cGxlIGxpbmVzIG9mIGNvZGUgc2hvdWxkIGJl IGFkZGVkIHRvIGEgLmh0YWNjZXNzIGZpbGUgYXQgdGhlIHJvb3Qgb2YgeW91ciB3ZWJzaXRl LiBUaGV5IGJlbG9uZyBqdXN0IGJlbG93IHRoZSA8Y29kZT5SZXdyaXRlRW5naW5lIE9uPC9j b2RlPiBsaW5lLjwvcD4KPGgzPlJld3JpdGUgcnVsZXMgdGhhdCBzaG91bGQgYmUgcHV0IGlu c2lkZSAuaHRhY2Nlc3MgZmlsZTwvaDM+CjxwPjxjb2RlPlJld3JpdGVSdWxlIF5pbWFnZXMv KFswLTldKylcLihqcGU/Z3xwbmd8Z2lmfGljb3xibXApJCAuL2luZGV4LnBocD9rdW9faW1h Z2VfaWQ9JDE8L2NvZGU+PC9wPgo8cD48Y29kZT5SZXdyaXRlUnVsZSBeaW1hZ2VzLyhbXCtc LWEtekEtWjAtOV0rKV8oWzAtOV0rKVwuKGpwZT9nfHBuZ3xnaWZ8aWNvfGJtcCkkIC4vaW5k ZXgucGhwP2t1b19pbWFnZV9pZD0kMiZhbXA7a3VvX2ltYWdlX25hbWU9JDE8L2NvZGU+PC9w Pgo8aDM+SG93IGlzIGltYWdlIG5hbWUgZm9ybWVkPzwvaDM+CjxwPkl0J3MgYSBjb21iaW5h dGlvbiBvZiBvcmlnaW5hbCBmaWxlIG5hbWUgYW5kIGluY3JlbWVudGFsIG51bWJlciB3aGlj aCBUZXh0cGF0dGVybiBhc3NpZ25zIHRvIGVhY2ggaW1hZ2UgZmlsZSB3aGVuIGltYWdlIGlz IHVwbG9hZGVkLiBUaGUgZm9ybWF0IG9mIGltYWdlIG5hbWUgaXM6PC9wPgo8cD48Y29kZT50 aGlzLWlzLWEtdGV4dF81MC5qcGc8L2NvZGU+PC9wPgo8cD5JbiB0aGF0IGV4YW1wbGUgb3Jp Z2luYWwgZmlsZSBuYW1lIGlzIDxjb2RlPnRoaXMtaXMtYS10ZXN0LmpwZzwvY29kZT4gYW5k IHRoZSBudW1iZXIgZm9yIGltYWdlIGlzIDxjb2RlPjUwPC9jb2RlPi4gRmlsZSBuYW1lIGFu ZCBudW1iZXIgYXJlIHNlcGFyYXRlZCB3aXRoIGFuIHVuZGVyc2NvcmUgPGNvZGU+XzwvY29k ZT4uIEl0J3MgZ29vZCB0byBub3RlIHRoYXQgPHN0cm9uZz50aGlzIHBsdWdpbiBkb2Vzbid0 IG1ha2UgY2hhbmdlcyB0byBpbWFnZSdzIGZpbGUgbmFtZTwvc3Ryb25nPiwgc28gdXNlciBz aG91bGQgbWFrZSBzdXJlIGZpbGUgbmFtZSBkb2Vzbid0IGNvbnRhaW4gJnF1b3Q7aWxsZWdh bCZxdW90OyBjaGFyYWN0ZXJzIGxpa2UgY3VycmVuY3kgc2lnbnMgb3Igc3BhY2VzLiBGaWxl IG5hbWUgY2FuIGhhdmUgb25seSBsZXR0ZXJzICg8Y29kZT5hLXo8L2NvZGU+IGFuZCA8Y29k ZT5BLVo8L2NvZGU+KSwgbnVtYmVycyAoPGNvZGU+MC05PC9jb2RlPiksIGh5cGhlbnMgKDxj b2RlPi08L2NvZGU+KSBhbmQgcGx1c2VzICg8Y29kZT4rPC9jb2RlPiksIGJ1dCBieSBtb2Rp ZnlpbmcgdGhlIHJld3JpdGUgY29kZSBpbiAuaHRhY2Nlc3MgaXQgbWlnaHQgYmUgcG9zc2li bGUgdG8gYWxsb3cgb3RoZXIgY2hhcmFjdGVycyBhcyB3ZWxsLjwvcD4KPGgzPk5vdGVzPC9o Mz4KPHVsPgo8bGk+UGx1Z2luIHdvcmtzIHdpdGggbnVtZXJpY2FsIGltYWdlcyB0aGF0IGFy ZSBpbnNpZGUgPGNvZGU+L2ltYWdlcy88L2NvZGU+IGZvbGRlci48L2xpPgo8bGk+SW1hZ2Vz IGFyZSBzZXJ2ZWQgdGhyb3VnaCBQSFAsIGJ1dCB3aXRoIGNhY2hpbmcuPC9saT4KPGxpPklm IFdlYiBzZXJ2ZXIgaGFzIDxjb2RlPm1vZF94c2VuZGZpbGU8L2NvZGU+IGFjdGl2ZSwgaXQg d2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgUEhQJ3MgPGNvZGU+cmVhZGZpbGU8L2NvZGU+Ljwv bGk+CjwvdWw+CjxoMz5JbnN0YWxsaW5nPC9oMz4KPG9sPgo8bGk+QWN0aXZhdGUgdGhlIFRl eHRwYXR0ZXJuIHBsdWdpbiA8Y29kZT5rdW9faW1hZ2VfbmFtZTwvY29kZT4uPC9saT4KPGxp Pkluc2VydCB0byB0aGUgd2Vic2l0ZSdzIHJvb3QgLmh0YWNjZXNzIGZpbGUgdGhlIGFib3Zl IG1lbnRpb25lZCByZXdyaXRlIHJ1bGVzLjwvbGk+Cjwvb2w+CjxoMz5Vbmluc3RhbGxpbmc8 L2gzPgo8b2w+CjxsaT5EZWFjdGl2YXRlIHRoZSBUZXh0cGF0dGVybiBwbHVnaW4gPGNvZGU+ a3VvX2ltYWdlX25hbWU8L2NvZGU+LjwvbGk+CjxsaT5SZW1vdmUgZnJvbSB0aGUgd2Vic2l0 ZSdzIHJvb3QgLmh0YWNjZXNzIGZpbGUgcmV3cml0ZSBydWxlcyBmb3IgdGhpcyBwbHVnaW4u Cjwvb2w+CjxwIGlkPSJub3RpY2UiPlRoZSBwbHVnaW4gaGFzIGJlZW4gdGVzdGVkIHdpdGgg VGV4dHBhdHRlcm4gNC42LWRldiwgNC41LjcgYW5kIDQuNS41LjwvcD4KPC9kaXY+CjwhLS0g KioqIEJFR0lOIFBMVUdJTiBDU1MgKioqIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPiNi cmllZmx5IHsgcGFkZGluZzogMyU7IGZvbnQtc2l6ZTogMS4yZW07IC1tb3otYm94LXNoYWRv dzogMCAwIDIwcHggI2NjYzsgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMjBweCAjY2NjOyBi b3gtc2hhZG93OiAwIDAgMjBweCAjY2NjOyB9I25vdGljZSB7IHBhZGRpbmc6IDElOyBtYXJn aW46IDAuNSUgMDsgYmFja2dyb3VuZDogI2ZmYzsgYm9yZGVyOiAxcHggZGFzaGVkICNmY2M7 IH0gbGkgc3BhbiB7IGNvbG9yOiAjNjY2OyB9IC5sYXJnZSBjb2RlIHsgZm9udC1zaXplOiAx LjNlbTsgcGFkZGluZzogMSU7IGJvcmRlcjogMXB4IHNvbGlkICM2OTA7IH0gaHIgeyBib3Jk ZXI6IDNweCBzb2xpZCAjY2NjOyBmb250OiAxZW0gQXJpYWwsIEhlbHZldGljYSwgc2Fucy1z ZXJpZjt9I2xpbmtzIHsgZGlzcGxheTogdGFibGU7IGhlaWdodDogMTAwJTsgd2lkdGg6IDEw MCU7IGNsZWFyOiBib3RoOyBwYWRkaW5nOiAwOyBtYXJnaW46IDAgMCA1cHggMDsgbGlzdC1z dHlsZTogbm9uZTsgfSNsaW5rcyBsaSB7IGZsb2F0OiBsZWZ0OyBkaXNwbGF5OiBpbmxpbmU7 IH0gI2xpbmtzIGEgeyBmbG9hdDogbGVmdDsgbWFyZ2luLXJpZ2h0OiA1cHg7IGJhY2tncm91 bmQ6ICM4QUM2RUQ7IGNvbG9yOiAjMzMzOyBwYWRkaW5nOiA1cHggMTBweDsgdGV4dC1kZWNv cmF0aW9uOiBub25lOyB9ICNsaW5rcyBsaTpsYXN0LWNoaWxkIGEgeyBiYWNrZ3JvdW5kOiAj OURCQjc4OyB9I2xpbmtzIGxpOmxhc3QtY2hpbGQgYTpob3ZlciwjbGlua3MgbGk6bGFzdC1j aGlsZCBhOmZvY3VzLCNsaW5rcyBsaTpsYXN0LWNoaWxkIGE6YWN0aXZlIHtiYWNrZ3JvdW5k OiAjRTI4MjZCOyB9LnVuZGVybGluZSB7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9 PC9zdHlsZT4KPCEtLSAqKiogRU5EIFBMVUdJTiBDU1MgKioqIC0tPgoiO3M6MzoibWQ1Ijtz OjMyOiJmZWU2Y2MwOGNhN2QzOTY3YzhjZTc3MDlmNTA2NzYzMCI7fQ==