# rvm_latin1_to_utf8 v0.4 # Alter pre-MySQL 4.1 tables to use UTF-8 charset # # License: GNU GPLv2 or later # # Ruud van Melick # http://vanmelick.com/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjc6InZlcnNpb24iO3M6MzoiMC40IjtzOjY6ImF1dGhvciI7czoxNToiUnV1ZCB2 YW4gTWVsaWNrIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIxOiJodHRwOi8vdmFubWVsaWNrLmNv bS8iO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjQ3OiJBbHRlciBwcmUtTXlTUUwgNC4xIHRhYmxl cyB0byB1c2UgVVRGLTggY2hhcnNldCI7czo0OiJ0eXBlIjtpOjE7czo0OiJuYW1lIjtzOjE4 OiJydm1fbGF0aW4xX3RvX3V0ZjgiO3M6NDoiaGVscCI7czoyOTI4OiIJPGgxPmxhdGluMSB0 byB1dGY4PC9oMT4KCgk8cD48c3Ryb25nPjxzcGFuIGNsYXNzPSJjYXBzIj5XQVJOSU5HPC9z cGFuPjogY2FyZWZ1bGx5IHJlYWQgdGhpcyBkb2N1bWVudGF0aW9uIGFuZCA8c3BhbiBjbGFz cz0iY2FwcyI+QkFDS1VQPC9zcGFuPiA8c3BhbiBjbGFzcz0iY2FwcyI+WU9VUjwvc3Bhbj4g PHNwYW4gY2xhc3M9ImNhcHMiPkRBVEFCQVNFPC9zcGFuPiBiZWZvcmUgYWN0aXZhdGluZy91 c2luZyB0aGlzIHBsdWdpbi48L3N0cm9uZz48L3A+CgoJPHA+VGV4dHBhdHRlcm4gYWx3YXlz IHVzZXMgJiM4MjE2O3V0ZjgmIzgyMTc7IHRvIHN0b3JlIGRhdGEgaW4gdGhlIGRhdGFiYXNl LCBidXQgZGVwZW5kaW5nIG9uIHdoaWNoIE15U1FMIHZlcnNpb24geW91IHVzZWQgd2hlbiBp bnN0YWxsaW5nIFRleHRwYXR0ZXJuLCB0aGUgY2hhcmFjdGVyIHNldCBvZiB0aGUgdGFibGVz IGFuZCBjb2x1bW5zIGRpZmZlcnM6PC9wPgoKCTxvbD4KCQk8bGk+TXlTUUwgdmVyc2lvbnMg b2xkZXIgdGhhbiA0LjE6IHRoZSBjaGFyYWN0ZXIgc2V0IG9mIHRoZSB0YWJsZXMgY3JlYXRl ZCBieSBUZXh0cGF0dGVybiBpcyB0eXBpY2FsbHkgJiM4MjE2O2xhdGluMSYjODIxNzsuPC9s aT4KCQk8bGk+TXlTUUwgdmVyc2lvbnMgNC4xIGFuZCBoaWdoZXI6IHRoZSB0YWJsZXMgYXJl IHNldCB0byB1c2UgdGhlICYjODIxNjt1dGY4JiM4MjE3OyBjaGFyYWN0ZXIgc2V0LCB3aGlj aCBtYXRjaGVzIHRoZSBhY3R1YWwgY2hhcmFjdGVyIHNldCBvZiB0aGUgZGF0YSBzdG9yZWQg aW4gdGhvc2UgdGFibGVzLjwvbGk+Cgk8L29sPgoKCTxwPkhhdmluZyB0aGUgdGFibGVzL2Nv bHVtbnMgdGhlbXNlbHZlcyB1c2UgdGhlIHNhbWUgY2hhcmFjdGVyIHNldCBhcyB0aGUgZGF0 YSBzdG9yZWQgaW4gdGhlbSBoYXMgc29tZSBhZHZhbnRhZ2VzIHdoZW4gcGVyZm9ybWluZyBz ZWFyY2hlcyBvciBzb3J0aW5nIGluIFRleHRwYXR0ZXJuLCBlc3BlY2lhbGx5IGlmIHlvdSB1 c2UgY2hhcmFjdGVycyBvdXRzaWRlIFVTLTxzcGFuIGNsYXNzPSJjYXBzIj5BU0NJSTwvc3Bh bj4uPC9wPgoKCTxwPklmIHlvdSB1cGdyYWRlIHlvdXIgTXlTUUwgdmVyc2lvbiBmcm9tIHBy ZS00LjEgdG8gNC4xIG9yIGhpZ2hlciwgdGhlIHRhYmxlL2NvbHVtbiBjaGFyYWN0ZXIgc2V0 cyBhcmUgbm90IGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvICYjODIxNjt1dGY4JiM4MjE3 Oywgc28gdGhleSBzdGF5ICYjODIxNjtsYXRpbjEmIzgyMTc7IHdoaWxlIHRoZSBkYXRhIHN0 b3JlZCBpbiB0aG9zZSB0YWJsZXMgaXMgc3RpbGwgJiM4MjE2O3V0ZjgmIzgyMTc7LjwvcD4K Cgk8cD5DaGFuZ2luZyB0aGlzIGlzIHRyaWNreSwgYmVjYXVzZSBpZiB5b3Ugc2ltcGx5IGNo YW5nZSB0aGUgY2hhcmFjdGVyIHNldCwgTXlTUUwgYXNzdW1lcyB0aGF0IHRoZSBzdG9yZWQg ZGF0YSBtdXN0IGFsc28gYmUgY29udmVydGVkIGZyb20gJiM4MjE2O2xhdGluMSYjODIxNzsg dG8gJiM4MjE2O3V0ZjgmIzgyMTc7LCB3aGljaCBsZWFkcyB0byBnYXJiYWdlLCBiZWNhdXNl IHRoZSBkYXRhIGlzIGFscmVhZHkgJiM4MjE2O3V0ZjgmIzgyMTc7LjwvcD4KCgk8cD5UaGlz IHBsdWdpbiBhdm9pZHMgdGhlIHVud2FudGVkIGNoYXJhY3RlciBzZXQgY29udmVyc2lvbiBv ZiB0aGUgc3RvcmVkIGRhdGEgYnkgdGFraW5nIHRoZSBmb2xsb3dpbmcgc3RlcHMgZm9yIGVh Y2ggVGV4dHBhdHRlcm4gdGFibGU6PC9wPgoKCTxvbD4KCQk8bGk+ZHJvcCBpbmRleGVzPC9s aT4KCQk8bGk+Y29udmVydCBhbGwgY29sdW1ucyB0aGF0IGNvbnRhaW4gdGV4dCB0byB1c2Ug YSAmIzgyMTY7YmluYXJ5JiM4MjE3OyBjaGFyc2V0IChpbnN0ZWFkIG9mICYjODIxNjtsYXRp bjEmIzgyMTc7KTwvbGk+CgkJPGxpPmNvbnZlcnQgdGhvc2UgY29sdW1ucyB5ZXQgYWdhaW4s IHRoaXMgdGltZSB0byAmIzgyMTY7dXRmOCYjODIxNzsgY2hhcnNldCAoaW5zdGVhZCBvZiAm IzgyMTY7YmluYXJ5JiM4MjE3Oyk8L2xpPgoJCTxsaT5hZGQgaW5kZXhlczwvbGk+CgkJPGxp Pm9wdGltaXplIHRhYmxlPC9saT4KCTwvb2w+CgoJPHA+QWZ0ZXJ3YXJkcyBhbiBhdHRlbXB0 IGlzIG1hZGUgdG8gdXBkYXRlIHRoZSAmIzgyMTY7ZGJjaGFyc2V0JiM4MjE3OyBzZXR0aW5n IGluIHRoZSA8Y29kZT50ZXh0cGF0dGVybi9jb25maWcucGhwPC9jb2RlPiBmaWxlIHRvICYj ODIxNjt1dGY4JiM4MjE3Oy4gU2hvdWxkIHRoaXMgZmFpbCBkdWUgdG8gbGFjayBvZiBwZXJt aXNzaW9ucywgeW91IHdpbGwgYmUgYXNrZWQgdG8gbWFrZSB0aGlzIGNoYW5nZSB5b3Vyc2Vs Zi4gRG8gbm90IHNraXAgdGhpcyBzdGVwLCBvdGhlcndpc2UgeW91IHdpbGwgZXhwZXJpZW5j ZSBpcnJlcGFyYWJsZSBkYXRhIGNvcnJ1cHRpb24gc28gc2V2ZXJlIHRoYXQgeW91IHdpbGwg Y3J5IGxpa2UgYSBiYWJ5ICh5b3UgbWFkZSBiYWNrdXBzLCByaWdodD8pLCBtdWNoIHRvIHRo ZSBhbXVzZW1lbnQgb2Ygb25sb29rZXJzLjwvcD4KCgk8cD5Ib3cgdG8gdXNlIHRoaXMgcGx1 Z2luOjwvcD4KCgk8b2w+CgkJPGxpPjxzdHJvbmc+PHNwYW4gY2xhc3M9ImNhcHMiPk1BS0U8 L3NwYW4+IDxzcGFuIGNsYXNzPSJjYXBzIj5CQUNLVVBTPC9zcGFuPiA8c3BhbiBjbGFzcz0i Y2FwcyI+RklSU1Q8L3NwYW4+ITwvc3Ryb25nPiAobm90IGp1c3QgdGhlIDxzcGFuIGNsYXNz PSJjYXBzIj5UWFA8L3NwYW4+IHRhYmxlcywgYnV0IHRoZSBlbnRpcmUgZGF0YWJhc2UpPC9s aT4KCQk8bGk+TWFrZSBzdXJlIHlvdSBoYXZlIE15U1FMIHZlcnNpb24gNC4xIG9yIGhpZ2hl ciBpbnN0YWxsZWQuPC9saT4KCQk8bGk+QWN0aXZhdGUgdGhlIHBsdWdpbi48L2xpPgoJCTxs aT48YSBocmVmPSI/ZXZlbnQ9cnZtX2xhdGluMV90b191dGY4Ij5DbGljayBoZXJlPC9hPiBh bmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgb24gdGhlIHNjcmVlbi48L2xpPgoJPC9vbD4i O3M6NDoiY29kZSI7czo2MzE5OiIKaWYgKHR4cGludGVyZmFjZSA9PSAnYWRtaW4nIGFuZCBn cHMoJ2V2ZW50JykgPT0gJ3J2bV9sYXRpbjFfdG9fdXRmOCcpCnsKICBhZGRfcHJpdnMoJ3J2 bV9sYXRpbjFfdG9fdXRmOCcsICcxJyk7CiAgcmVnaXN0ZXJfdGFiKCdleHRlbnNpb25zJywg J3J2bV9sYXRpbjFfdG9fdXRmOCcsICdsYXRpbjFfdG9fdXRmOCcpOwogIHJlZ2lzdGVyX2Nh bGxiYWNrKCdydm1fbGF0aW4xX3RvX3V0ZjgnLCAncnZtX2xhdGluMV90b191dGY4Jyk7Cn0K CmZ1bmN0aW9uIHJ2bV9sYXRpbjFfdG9fdXRmOCgpCnsKICBnbG9iYWwgJHR4cGNmZywgJERC OwoKICAkZGVidWcgPSBGQUxTRTsKCiAgcmVxdWlyZV9wcml2cygncnZtX2xhdGluMV90b191 dGY4Jyk7CgogIHBhZ2V0b3AoJycpOwoKICBlY2hvICc8ZGl2IHN0eWxlPSJtYXJnaW4tbGVm dDogNTBweCI+JzsKCiAgaWYgKHZlcnNpb25fY29tcGFyZShteXNxbGlfZ2V0X3NlcnZlcl9p bmZvKCREQi0+bGluayksICc0LjEuMCcsICc8JykpCiAgewogICAgZWNobyBncmFmKCdUaGUg cnZtX2xhdGluMV90b191dGY4IHBsdWdpbiBoYXMgYmVlbiByZW1vdmVkLCBiZWNhdXNlIHlv dXIgTXlTUUwgdmVyc2lvbiBpcyBsb3dlciB0aGFuIDQuMS4nKTsKICAgIHNhZmVfZGVsZXRl KCd0eHBfcGx1Z2luJywgIm5hbWUgPSAncnZtX2xhdGluMV90b191dGY4JyIpOwogICAgcnZt X2xhdGluMV90b191dGY4X2VuZCgpOwogIH0KCiAgIyBzdGFuZGFyZCBUWFAgdGFibGVzCiAg JHR4cHRhYmxlcyA9IGFycmF5KAogICAgJ3RleHRwYXR0ZXJuJywKICAgICd0eHBfY2F0ZWdv cnknLAogICAgJ3R4cF9jc3MnLAogICAgJ3R4cF9kaXNjdXNzJywKICAgICd0eHBfZGlzY3Vz c19pcGJhbicsCiAgICAndHhwX2Rpc2N1c3Nfbm9uY2UnLAogICAgJ3R4cF9maWxlJywKICAg ICd0eHBfZm9ybScsCiAgICAndHhwX2ltYWdlJywKICAgICd0eHBfbGFuZycsCiAgICAndHhw X2xpbmsnLAogICAgJ3R4cF9sb2cnLAogICAgJ3R4cF9wYWdlJywKICAgICd0eHBfcGx1Z2lu JywKICAgICd0eHBfcHJlZnMnLAogICAgJ3R4cF9wcml2JywKICAgICd0eHBfc2VjdGlvbics CiAgICAndHhwX3VzZXJzJwogICk7CgogICMgZmluZCB0YWJsZXMgdGhhdCBtYXRjaCB0aGUg VFhQIHRhYmxlIHByZWZpeCwgbWFyayBzdGFuZGFyZCBhbmQgc2VsZWN0ZWQgb25lcy4KICAk bXl0YWJsZXMgPSBwcygnbXl0YWJsZXMnLCBhcnJheSgpKSA/IHBzKCdteXRhYmxlcycpIDog YXJyYXkoKTsKICAkdW5rbm93biAgPSBGQUxTRTsKCiAgaWYgKCRycyA9IHNhZmVfcXVlcnko IlNIT1cgVEFCTEVTIExJS0UgJyIuYWRkY3NsYXNoZXMoZG9TbGFzaChQRlgpLCAnJV8nKS4i JSciKSkKICB7CiAgICB3aGlsZSAoJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHJzKSkKICAg IHsKICAgICAgJHRhYmxlID0gc3Vic3RyKCRyb3dbMF0sIHN0cmxlbihQRlgpKTsKCiAgICAg IGlmIChpbl9hcnJheSgkdGFibGUsICR0eHB0YWJsZXMpIG9yIGluX2FycmF5KCR0YWJsZSwg JG15dGFibGVzKSkKICAgICAgewogICAgICAgICR0YWJsZXNbXSA9ICR0YWJsZTsKICAgICAg fQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICAkdW5rbm93biA9IFRSVUU7CiAgICAgIH0K CiAgICAgICRpbnB1dHNbXSA9CiAgICAgICAgJzxsYWJlbD4nLgogICAgICAgICAgJzxpbnB1 dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ibXl0YWJsZXNbXSIgdmFsdWU9IicuaHRtbHNwZWNp YWxjaGFycygkdGFibGUpLiciICcuCiAgICAgICAgICAgIChpbl9hcnJheSgkdGFibGUsICR0 eHB0YWJsZXMpID8gJ2Rpc2FibGVkPSJkaXNhYmxlZCIgY2hlY2tlZD0iY2hlY2tlZCInIDog JycpLicgLz4nLgogICAgICAgICAgaHRtbHNwZWNpYWxjaGFycyhQRlguJHRhYmxlKS4KICAg ICAgICAnPC9sYWJlbD4nOwogICAgfQogIH0KICBlbHNlCiAgewogICAgZWNobyBncmFmKCdI bW1tLi4uIHN0cmFuZ2UsIEkgY2Fubm90IGZpbmQgYW55IHRhYmxlcyB0aGF0IG1hdGNoIHlv dXIgVFhQIHRhYmxlIHByZWZpeCcpOwogIH0KCiAgIyBhc2sgdXNlciB3aGF0IHRvIGRvIHdp dGggdGFibGVzIHdlJ3JlIG5vdCBzdXJlIGFib3V0LgogIGlmICgkdW5rbm93biBhbmQgIXBz KCdjb250aW51ZScpKQogIHsKICAgIGVjaG8KICAgICAgZ3JhZignQmVsb3csIGEgbGlzdCBv ZiB0YWJsZXMgaXMgc2hvd24gdGhhdCBtYXkgYmUgcGFydCBvZiB5b3VyIFRleHRwYXR0ZXJu IGluc3RhbGwuJykuCiAgICAgIGdyYWYoJ1NvbWUgb2YgdGhlc2UgdGFibGVzIG1heSBoYXZl IGJlZW4gY3JlYXRlZCBieSBwbHVnaW5zIHlvdSBoYXZlIGluc3RhbGxlZC48YnIgLz4KICAg ICAgICBJbiB0aGF0IGNhc2UsIGNoZWNrIHRoZSB0YWJsZXMgdGhhdCB0aGVzZSBwbHVnaW5z IGhhdmUgYWRkZWQuPGJyIC8+CiAgICAgICAgQmUgY2FyZWZ1bCBub3QgdG8gY2hlY2sgdGFi bGVzIHRoYXQgYXJlIG5vdCByZWxhdGVkIHRvIHRoaXMgVGV4dHBhdHRlcm4gaW5zdGFsbCEn KS4KICAgICAgZ3JhZignVGhlIHN0YW5kYXJkIFRleHRwYXR0ZXJuIHRhYmxlcyBhcmUgYWxy ZWFkeSBjaGVja2VkLicpLgogICAgICBmb3JtKAogICAgICAgIGpvaW4oJzxiciAvPicsICRp bnB1dHMpLgogICAgICAgIGdyYWYoCiAgICAgICAgICBlSW5wdXQoJ3J2bV9sYXRpbjFfdG9f dXRmOCcpLic8YnIgLz4nLgogICAgICAgICAgZklucHV0KCdzdWJtaXQnLCAnY29udGludWUn LCAnQ29udGludWUnLCAncHVibGlzaCcpCiAgICAgICAgKQogICAgICApOwoKICAgIHJ2bV9s YXRpbjFfdG9fdXRmOF9lbmQoKTsKICB9CgogIGVjaG8gZ3JhZignVXBkYXRpbmcgVGV4dHBh dHRlcm4gdGFibGVzLi4uJyk7CgogICMgbG9vcCB0aHJvdWdoIHRhYmxlcwogIGZvcmVhY2gg KCR0YWJsZXMgYXMgJHRhYmxlKQogIHsKICAgICRpbmRleGVzID0gYXJyYXkoKTsKICAgICRk cm9wICAgID0gYXJyYXkoKTsKICAgICRjcmVhdGUgID0gYXJyYXkoKTsKICAgICRiaW4gICAg ID0gYXJyYXkoKTsKICAgICR1dGY4ICAgID0gYXJyYXkoKTsKICAgICRjb2xzICAgID0gYXJy YXkoKTsKCiAgICAjIHByZXBhcmUgYWx0ZXIgc3RhdGVtZW50cyBmb3IgY29sdW1ucwogICAg JGNvbHVtbnMgPSBnZXRSb3dzKCdTSE9XIENPTFVNTlMgRlJPTSAnLnNhZmVfcGZ4KCR0YWJs ZSkpOwoKICAgIGlmICgkY29sdW1ucykgZm9yZWFjaCAoJGNvbHVtbnMgYXMgJGNvbHVtbikK ICAgIHsKICAgICAgZXh0cmFjdCgkY29sdW1uKTsKCiAgICAgIGlmIChwcmVnX21hdGNoKCcv XihjaGFyfHZhcmNoYXJ8dGlueXRleHR8dGV4dHxtZWRpdW10ZXh0fGxvbmd0ZXh0fGVudW18 c2V0KVxiLycsICRUeXBlKSkKICAgICAgewogICAgICAgICROdWxsID0gKCROdWxsID09ICdZ RVMnID8gJyBOVUxMJyA6ICcgTk9UIE5VTEwnKTsKCiAgICAgICAgJGJlZ2luID0gJ01PRElG WSBgJy5kb1NsYXNoKCRGaWVsZCkuJ2AgJy4kVHlwZS4nIENIQVJBQ1RFUiBTRVQgJzsKICAg ICAgICAkZW5kICAgPSAkTnVsbC4iIERFRkFVTFQgJyIuZG9TbGFzaCgkRGVmYXVsdCkuIici OwoKICAgICAgICAkYmluW10gID0gJGJlZ2luLidiaW5hcnknLiRlbmQ7CiAgICAgICAgJHV0 ZjhbXSA9ICRiZWdpbi4ndXRmOCBDT0xMQVRFIHV0ZjhfZ2VuZXJhbF9jaScuJGVuZDsKICAg ICAgICAkY29sc1tdID0gJEZpZWxkOwogICAgICB9CiAgICB9CgogICAgIyBhbmFseXNlIGlu ZGV4IHN0cnVjdHVyZXMKICAgICRyb3dzID0gZ2V0Um93cygnU0hPVyBJTkRFWCBGUk9NICcu c2FmZV9wZngoJHRhYmxlKSk7CgogICAgaWYgKCRyb3dzKSBmb3JlYWNoICgkcm93cyBhcyAk cm93KQogICAgewogICAgICBleHRyYWN0KCRyb3cpOwoKICAgICAgaWYgKCRLZXlfbmFtZSA9 PSAnUFJJTUFSWScgb3IgIWluX2FycmF5KCRDb2x1bW5fbmFtZSwgJGNvbHMpKQogICAgICB7 CiAgICAgICAgY29udGludWU7CiAgICAgIH0KCiAgICAgICRLZXlfbmFtZSA9ICdgJy4kS2V5 X25hbWUuJ2AnOwoKICAgICAgJGluZGV4ZXNbJEtleV9uYW1lXVsndW5pcXVlJ10gPSAoJE5v bl91bmlxdWUgPyAnJyA6ICcgVU5JUVVFJyk7CiAgICAgICRpbmRleGVzWyRLZXlfbmFtZV1b J2Z1bGx0ZXh0J10gPSAoJEluZGV4X3R5cGUgPT0gJ0ZVTExURVhUJyA/ICcgRlVMTFRFWFQn IDogJycpOwogICAgICAkaW5kZXhlc1skS2V5X25hbWVdWydjb2x1bW5zJ11bJFNlcV9pbl9p bmRleF0gPSAnYCcuJENvbHVtbl9uYW1lLidgJy4oJFN1Yl9wYXJ0ID8gJyAoJy4kU3ViX3Bh cnQuJyknIDogJycpOwogICAgfQoKICAgICMgcHJlcGFyZSBpbmRleCBkcm9wL2NyZWF0ZSBz dGF0ZW1lbnRzCiAgICBmb3JlYWNoICgkaW5kZXhlcyBhcyAkaW5kZXggPT4gJHN0cnVjdHVy ZSkKICAgIHsKICAgICAgZXh0cmFjdCgkc3RydWN0dXJlKTsKCiAgICAgICRkcm9wW10gICA9 ICdEUk9QIElOREVYICcuJGluZGV4OwogICAgICAkY3JlYXRlW10gPSAnQUREJy4kdW5pcXVl LiRmdWxsdGV4dC4nIElOREVYICcuJGluZGV4LicgKCcuam9pbignLCAnLCAkY29sdW1ucyku JyknOwogICAgfQoKICAgICRzdWNjZXNzID0gVFJVRTsKCiAgICAjIGFsdGVyIHRoZSB0YWJs ZSArIGluZGV4ZXMKICAgIGlmICgkZHJvcCkKICAgIHsKICAgICAgJHN1Y2Nlc3MgKj0gc2Fm ZV9hbHRlcigkdGFibGUsIGpvaW4oJywgJywgJGRyb3ApLCAkZGVidWcpOwogICAgfQoKICAg IGlmICgkYmluIGFuZCAkc3VjY2VzcykKICAgIHsKICAgICAgJHN1Y2Nlc3MgKj0gc2FmZV9h bHRlcigkdGFibGUsIGpvaW4oJywgJywgJGJpbiksICRkZWJ1Zyk7CgogICAgICBpZiAoJHN1 Y2Nlc3MpCiAgICAgIHsKICAgICAgICAkc3VjY2VzcyAqPSBzYWZlX2FsdGVyKCR0YWJsZSwg am9pbignLCAnLCAkdXRmOCkuJywgREVGQVVMVCBDSEFSQUNURVIgU0VUIHV0ZjggQ09MTEFU RSB1dGY4X2dlbmVyYWxfY2knLCAkZGVidWcpOwogICAgICB9CiAgICB9CgogICAgaWYgKCRj cmVhdGUgYW5kICRzdWNjZXNzKQogICAgewogICAgICAkc3VjY2VzcyAqPSBzYWZlX2FsdGVy KCR0YWJsZSwgam9pbignLCAnLCAkY3JlYXRlKSwgJGRlYnVnKTsKICAgIH0KICB9CgogICMg d2hpbGUgd2UncmUgaGVyZSwgbWlnaHQgYXMgd2VsbCBvcHRpbWl6ZSB0aGUgdGFibGVzCiAg c2FmZV9xdWVyeSgiT1BUSU1JWkUgVEFCTEUgIi5qb2luKCcsICcsIGFycmF5X21hcCgnc2Fm ZV9wZngnLCAkdGFibGVzKSksICRkZWJ1Zyk7CgogIGlmICgkc3VjY2VzcykKICB7CiAgICBl Y2hvIGdyYWYoJ1N1Y2Nlc2Z1bGx5IGNvbXBsZXRlZC4nKTsKCiAgICAkZmlsZSAgID0gdHhw YXRoLicvY29uZmlnLnBocCc7CiAgICAkY29uZmlnID0gZmlsZV9nZXRfY29udGVudHMoJGZp bGUpOwogICAgJGNvbmZpZyA9IHN0cl9yZXBsYWNlKCc/PicsIG4uJyMgcnZtX2xhdGluMV90 b191dGY4IHBsdWdpbiBhZGRlZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gZW5zdXJlIGEgY29y cmVjdCBkYmNoYXJzZXQnLm4uJyR0eHBjZmdbXCdkYmNoYXJzZXRcJ10gPSBcJ3V0ZjhcJycu bi4nPz4nLCAkY29uZmlnKTsKCiAgICBpZiAoJHR4cGNmZ1snZGJjaGFyc2V0J10gPT0gJ3V0 ZjgnCiAgICAgIG9yIGlzX3dyaXRhYmxlKCRmaWxlKQogICAgICBhbmQgJGhhbmRsZSA9IGZv cGVuKCRmaWxlLCAndycpCiAgICAgIGFuZCBmd3JpdGUoJGhhbmRsZSwgJGNvbmZpZykgIT09 IEZBTFNFCiAgICAgIGFuZCBmY2xvc2UoJGhhbmRsZSkpCiAgICB7CiAgICAgIGVjaG8gZ3Jh ZignVGhlIHJ2bV9sYXRpbjFfdG9fdXRmOCBwbHVnaW4gaGFzIGJlZW4gYXV0b21hdGljYWxs eSBkZS1pbnN0YWxsZWQuJyk7CiAgICAgIHNhZmVfZGVsZXRlKCd0eHBfcGx1Z2luJywgIm5h bWUgPSAncnZtX2xhdGluMV90b191dGY4JyIpOwogICAgfQogICAgZWxzZQogICAgewogICAg ICBlY2hvIGdyYWYoJzxiPldBUk5JTkc6IHRleHRwYXR0ZXJuL2NvbmZpZy5waHAgY291bGQg bm90IGJlIHVwZGF0ZWQgYXV0b21hdGljYWxseS4gUGxlYXNlIHVwZGF0ZSB5b3VyIHRleHRw YXR0ZXJuL2NvbmZpZy5waHAgZmlsZSB0byBjb250YWluIDxjb2RlPiR0eHBjZmdbXCdkYmNo YXJzZXRcJ10gPSBcJ3V0ZjhcJzs8L2NvZGU+PC9iPiBhbmQgZGVpbnN0YWxsIHRoZSBydm1f bGF0aW4xX3RvX3V0ZjggcGx1Z2luIG1hbnVhbGx5Jyk7CiAgICB9CiAgfQogIGVsc2UKICB7 CiAgICBlY2hvIGdyYWYoJ0R1ZSB0byBvbmUgb3IgbW9yZSBlcnJvcnMgdGhlIHRhYmxlcyBj b3VsZCBub3QgYmUgdXBkYXRlZCBjb3JyZWN0bHkuIFlvdSBtYXkgaGF2ZSB0byByZXN0b3Jl IGEgYmFja3VwLicpOwogIH0KCiAgcnZtX2xhdGluMV90b191dGY4X2VuZCgpOwp9CgpmdW5j dGlvbiBydm1fbGF0aW4xX3RvX3V0ZjhfZW5kKCkKewogIGVjaG8gJzwvZGl2Pic7CiAgZW5k X3BhZ2UoKTsKICBleGl0KCk7Cn0KIjtzOjM6Im1kNSI7czozMjoiM2YxYzdjYWI0ZTQ1MjY3 Y2VlM2Y3MGNhNDVmYjM2MTciO30=