# cno_replace_file v0.3
# Replace file plugin
# Christian Nowak
# http://www.cnowak.de

# ......................................................................
# This is a plugin for Textpattern - http://textpattern.com/
# To install: textpattern > admin > plugins
# Paste the following text into the 'Install plugin' box:
# ......................................................................

YTo5OntzOjc6InZlcnNpb24iO3M6MzoiMC4zIjtzOjY6ImF1dGhvciI7czoxNToiQ2hyaXN0
aWFuIE5vd2FrIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIwOiJodHRwOi8vd3d3LmNub3dhay5k
ZSI7czoxMToiZGVzY3JpcHRpb24iO3M6MTk6IlJlcGxhY2UgZmlsZSBwbHVnaW4iO3M6NDoi
dHlwZSI7aToxO3M6NDoibmFtZSI7czoxNjoiY25vX3JlcGxhY2VfZmlsZSI7czo0OiJoZWxw
IjtzOjE5NjoiCTxwPlRoZSBwbHVnaW4gZXh0ZW5kcyB0aGUgZmlsZSBlZGl0IHNjcmVlbiB3
aXRoIGFuIG9wdGlvbiB0byB1cGxvYWQgYSBuZXcgdmVyc2lvbi48L3A+CgoJPHA+SnVzdCBz
ZWxlY3QgYSBuZXcgZmlsZSBhbmQgcHJlc3MgcmVwbGFjZS4gVGhlIG9yaWdpbmFsIGZpbGUg
d2lsbCB0aGVuIGJlIHJlcGxhY2VkIHdpdGggdGhlIG5ldyBvbmUuPC9wPiI7czo0OiJjb2Rl
IjtzOjI0Njk6IgoJLyoqCgkgKiBDb25maWd1cmUgcGx1Z2luCgkgKi8KCWlmIChAdHhwaW50
ZXJmYWNlID09ICdhZG1pbicpIHsKCgkJLy8gUmVnaXN0ZXIgZmlsZSBlZGl0aW5nIGNhbGxi
YWNrCgkJcmVnaXN0ZXJfY2FsbGJhY2soImNub19maWxlX2VkaXQiLCAiZmlsZSIsICJmaWxl
X2VkaXQiLCAwKTsKCgkJLy8gUmVnaXN0ZXIgbmV3IGV2ZW50IGZvciByZXBsYWNpbmcgZmls
ZQoJCXJlZ2lzdGVyX2NhbGxiYWNrKCJjbm9fZmlsZV9yZXBsYWNlIiwgImZpbGUiLCAiZmls
ZV9saXN0IiwgMCk7CgoJfQoKCS8qKgoJICogRW5oYW5jZSBmaWxlIGVkaXQgcGFnZQoJICov
CglmdW5jdGlvbiBjbm9fZmlsZV9lZGl0KCkgewoKCQlnbG9iYWwgJGZpbGVfbWF4X3VwbG9h
ZF9zaXplOwoKCQkkaWQgPSBncHMoJ2lkJyk7CgoJCWlmICghJGZpbGVfbWF4X3VwbG9hZF9z
aXplIHx8IGludHZhbCgkZmlsZV9tYXhfdXBsb2FkX3NpemUpPT0wKSAkZmlsZV9tYXhfdXBs
b2FkX3NpemUgPSAyKigxMDI0KjEwMjQpOwoJCSRmb3JtID0KCQkJJzxmb3JtIGVuY3R5cGU9
Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iaW5kZXgucGhwIiBtZXRob2Q9InBvc3Qi
PicuCgkJCShpbnR2YWwoJGZpbGVfbWF4X3VwbG9hZF9zaXplKT09MD8nJzpoSW5wdXQoJ21h
eF9maWxlX3NpemUnLCRmaWxlX21heF91cGxvYWRfc2l6ZSkpLgoJCQlncmFmKCdSZXBsYWNl
IGZpbGUgd2l0aDogJy4KCQkJc0lucHV0KCdmaWxlX2xpc3QnKS4KCQkJZUlucHV0KCdmaWxl
JykuCgkJCWhJbnB1dCgnaWQnLCRpZCkuCgkJCWhJbnB1dCgncmVwbGFjZV9maWxlJywgJzEn
KS4KCQkJZklucHV0KCdmaWxlJywnZmlsZScsJycsJ2VkaXQnKS5zcC4KCQkJZklucHV0KCdz
dWJtaXQnLCcnLGdUeHQoJ3JlcGxhY2UnKSwnc21hbGxlcmJveCcpKS4KCQkJJzwvZm9ybT4n
OwoKCQkvLyBSZWFkIHRoZSBidWZmZXIgYW5kIGVuZCBidWZmZXJpbmcKCQkkYnVmZmVyID0g
b2JfZ2V0X2NsZWFuKCk7CgoJCS8vIFJlc3RhcnQgYnVmZmVyaW5nLCB0byBtYWtlIHN1cmUs
IHRoYXQgb3RoZXIgcGx1Z2lucyBjYW4gdXNlIHRoZSBidWZmZXIgdG9vCgkJb2Jfc3RhcnQo
KTsKCgkJLy8gVGhlIFBsdWdpbiBzaG91bGQgYmUgZGlzcGxheWVkIGJlZm9yZSB0aGUgdXBk
YXRlIGZvcm0KCQkkaW5zZXJ0UGx1Z2luID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9u
PSJpbmRleC5waHAiPic7CgkJJHBsdWdpbkNvZGUgPSAkZm9ybS4kaW5zZXJ0UGx1Z2luOwoJ
CSRidWZmZXIgPSBzdHJfcmVwbGFjZSgkaW5zZXJ0UGx1Z2luLCRwbHVnaW5Db2RlLCRidWZm
ZXIpOwoKCQllY2hvICRidWZmZXI7CgoJfQoKCS8qKgoJICogUmVwbGFjZSBvbGQgZmlsZSB3
aXRoIG5ldyBvbmUKCSAqLwoJZnVuY3Rpb24gY25vX2ZpbGVfcmVwbGFjZSgpIHsKCgkJJHJl
cGxhY2VfZmlsZSA9IHBzKCdyZXBsYWNlX2ZpbGUnKTsKCgkJaWYgKCRyZXBsYWNlX2ZpbGU9
PTEpIHsKCgkJCW9iX2VuZF9jbGVhbigpOwoJCQlvYl9zdGFydCgpOwoKCQkJZ2xvYmFsICR0
eHBjZmcsJGV4dGVuc2lvbnMsJHR4cF91c2VyLCRmaWxlX2Jhc2VfcGF0aDsKCQkJZXh0cmFj
dCgkdHhwY2ZnKTsKCQkJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ2NhdGVnb3J5Jywn
cGVybWlzc2lvbnMnLCdkZXNjcmlwdGlvbicpKSkpOwogICAgICAgCQkJJGlkID0gcHMoJ2lk
Jyk7CgkJCSRycyA9IHNhZmVfcm93KCJmaWxlbmFtZSIsICJ0eHBfZmlsZSIsICJpZD0nJGlk
JyIpOwoJCQlleHRyYWN0KCRycyk7CgoJCQlpZihpc3NldCgkX0ZJTEVTWydmaWxlJ11bJ3Rt
cF9uYW1lJ10pKSB7CgoJCQkJJGZpbGUgPSBnZXRfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydm
aWxlJ11bJ3RtcF9uYW1lJ10pOwoKCQkJCWlmICgkZmlsZSA9PT0gZmFsc2UpIHsKCgkJCQkJ
Ly8gY291bGQgbm90IGdldCB1cGxvYWRlZCBmaWxlCgkJCQkJZmlsZV9lZGl0KGdUeHQoJ2Zp
bGVfdXBsb2FkX2ZhaWxlZCcpIC4iICRmaWxlbmFtZSAtICIudXBsb2FkX2dldF9lcnJvcm1z
ZygkX0ZJTEVTWydmaWxlJ11bJ2Vycm9yJ10pLCAkaWQpOwoKCQkJCX0gZWxzZSB7CgoJCQkJ
CSRuZXdwYXRoID0gYnVpbGRfZmlsZV9wYXRoKCRmaWxlX2Jhc2VfcGF0aCx0cmltKCRmaWxl
bmFtZSkpOwoKCQkJCQlpZighc2hpZnRfdXBsb2FkZWRfZmlsZSgkZmlsZSwgJG5ld3BhdGgp
KSB7CgoJCQkJCQlmaWxlX2VkaXQoJG5ld3BhdGguJyAnLmdUeHQoJ3VwbG9hZF9kaXJfcGVy
bXMnKSwkaWQpOwoKCQkJCQl9IGVsc2UgewoKCQkJCQkJZmlsZV9zZXRfcGVybSgkbmV3cGF0
aCk7CgkJCQkJCWZpbGVfZWRpdChtZXNzZW5nZXIoJ2ZpbGUnLCRmaWxlbmFtZSwndXBsb2Fk
ZWQnKSwkaWQpOwoKCQkJCQl9CgoJCQkJfQoKCQkJfSBlbHNlIHsKCgkJCQkvLyAkX0ZJTEVT
IGlzIGVtcHR5CgkJCQlmaWxlX2VkaXQoJ0ZpbGUgVXBsb2FkIHdhc25cJ3Qgc3VjY2Vzc2Z1
bCEnLCAkaWQpOwoKCgkJCX0KCgkJCWNub19maWxlX2VkaXQoKTsKCgkJfQoKCX0KCiI7czoz
OiJtZDUiO3M6MzI6IjdmYWViNjgyMWM5YjE0NmVkMmRkMDIyMDMwMDMyNTEwIjt9