[ruby-dev:48224] [ruby-trunk - Feature #9816] 文字列内の数字を数値として比較するメソッド
From:
akr@...
Date:
2014-05-16 06:09:23 UTC
List:
ruby-dev #48224
SXNzdWUgIzk4MTYgaGFzIGJlZW4gdXBkYXRlZCBieSBBa2lyYSBUYW5ha2Eu CgoKWXVpIE5BUlVTRSB3cm90ZToKCj4gPiAo44GC44GoIG51bWVyaWNjbXAg 44GvIGNjIOOBqOOBhOOBhuWQjOOBmOaWh+Wtl+OBruS4puOBs+OBrumWk+OB p+WNmOiqnuOBjOWIhuOBi+OCjOOCi+OBqOOBhOOBhuOBruOBjOOAgQo+ID4g 44Gx44Gj44Go44G/44Gf44Go44GN44Gr5Y2Y6Kqe5YiG5Ymy44GX44Gr44GP 44GE44KI44GG44Gr5oCd44GE44G+44GZ44CCKQo+IAo+IOOBneOCjOOBr+OA gWFrcuOBleOCk+OBjCJjYyLjgajjgYTjgYbmloflrZfliJfjgpLljZjoqp7j gajjgZfjgaboqo3orZjjgZnjgovjgZPjgajjgavmnIDpganljJbjgZXjgozj gabjgYTjgovjgYvjgonjgafjga/jgarjgYTjgYsKPiDjgajjgYTjgYbnlpHn vqnjgpLmjIHjgaPjgabjgYTjgb7jgZnjgIIKCuWAi+S6uueahOOBq+OAgWNj IOOBqOOBhOOBhuWNmOiqnuOBq+aFo+OCjOOBpuOBhOOCi+OBqOOBhOOBhuaw l+OBr+OBl+OBvuOBm+OCk+OAggoKKOOCsuOCt+ODpeOCv+ODq+ODiOW/g+eQ huWtpuOBq+OCiOOCjOOBsCkg6aGe5ZCM44Gu6KaB5Zug44Go44GE44GG44Gu 44GM44GC44KL44Gd44GG44Gn44CB44GK44Gq44GY44KC44Gu44GM5Lim44KT 44Gn44GE44KL44GoCuOBneOCjOOBjOOBvuOBqOOBvuOCiuOCkuaEn+OBmOOB leOBm+OCi+OBqOOBhOOBhuipseOBjOOBguOCi+OCiOOBhuOBp+OBmeOAggrj gafjgIFjIOOBqOOBhOOBhuWQjOOBmOOCguOBruOBjOOBteOBn+OBpOS4puOC k+OBp+OBhOOCi+OBruOBjOOBneOBk+OBp+WIhuWJsuOBleOCjOOCi+OCiOOB huOBq+imi+OBiOOBquOBhOWOn+WboOOBqOOBmeOCi+OBqOOAgQrnp4HlgIvk urrjgajjgYTjgYbjgojjgorjgoLluoPjgYTnr4Tlm7LjgavmiJDjgornq4vj gaPjgabjgoLjgYrjgYvjgZfjgY/jgarjgYTjgpPjgZjjgoPjgarjgYTjgYvj garjgYHjgIHjgajmgJ3jgaPjgabjgYTjgb7jgZnjgIIKCgotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZlYXR1cmUgIzk4MTY6 IOaWh+Wtl+WIl+WGheOBruaVsOWtl+OCkuaVsOWApOOBqOOBl+OBpuavlOi8 g+OBmeOCi+ODoeOCveODg+ODiQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9y Zy9pc3N1ZXMvOTgxNiNjaGFuZ2UtNDY3NTAKCiogQXV0aG9yOiBZdWkgTkFS VVNFCiogU3RhdHVzOiBBc3NpZ25lZAoqIFByaW9yaXR5OiBOb3JtYWwKKiBB c3NpZ25lZTogWXVraWhpcm8gTWF0c3Vtb3RvCiogQ2F0ZWdvcnk6IGNvcmUK KiBUYXJnZXQgdmVyc2lvbjogCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0K5paH5a2X5YiX5YaF44Gu5pWw5a2X44KS5pWw5YCk 44Go44GX44Gm5q+U6LyD44GZ44KL44Oh44K944OD44OJ44KS6L+95Yqg44GX 44G+44Gb44KT44GLCgrjgZ3jga7jgojjgYbjgarmr5TovIPjga/kuIDoiKzn moTjgarnlKjpgJTjgajjgZfjgabjga9HVUnjgrfjgqfjg6vjga7jg5XjgqHj gqTjg6njg7zjgYzmr5TovIPjgavnlKjjgYTjgabjgYrjgorjgIEKV2luZG93 cyDjgafjga8gU3RyQ21wTG9naWNhbFcg44GM44CBT1MgWCDjgafjga8gTlNT dHJpbmc6Y29tcGFyZTpvcHRpb25zOuOBuOOBrk5TTnVtZXJpY1NlYXJjaOWu muaVsOOBjOaPkOS+m+OBleOCjOOBpuOBhOOBvuOBmeOAggpodHRwOi8vbXNk bi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9w L2JiNzU5OTQ3KHY9dnMuODUpLmFzcHgKaHR0cHM6Ly9kZXZlbG9wZXIuYXBw bGUuY29tL2xpYnJhcnkvbWFjL2RvY3VtZW50YXRpb24vQ29jb2EvUmVmZXJl bmNlL0ZvdW5kYXRpb24vQ2xhc3Nlcy9OU1N0cmluZ19DbGFzcy9SZWZlcmVu Y2UvTlNTdHJpbmcuaHRtbCMvL2FwcGxlX3JlZi9jL2Vjb25zdC9OU051bWVy aWNTZWFyY2gKCuS4iuiomOOBruOCiOOBhuOBquWHpueQhuiHquS9k+OBr+OB leOBu+OBqembo+OBl+OBhOOCguOBruOBp+OBr+OBguOCiuOBvuOBm+OCk+OB jOOAgVJ1Ynnjg6zjg5njg6vjgaflrp/oo4XjgZnjgovjgajlpKfph4/jga7j gqrjg5bjgrjjgqfjgq/jg4jjgpLkvZzjgaPjgabjgZfjgb7jgYTjgb7jgZnj gIIK5L6L44GI44GwIGBHZW06OlZlcnNpb24ubmV3KCIyLjEuMTAiLmZyZWV6 ZSk8PT5HZW06OlZlcnNpb24ubmV3KCIyLjEuOSIuZnJlZXplKWAg44GvNDfl gIvjgIEKYCIyLjEuMTAiLmZyZWV6ZS5zcGxpdCgnLicpLm1hcCgmOnRvX2kp PD0+IjIuMS45Ii5mcmVlemUuc3BsaXQoJy4nKS5tYXAoJjp0b19pKWAg44Gg 44GoMTblgIvjga7jgqrjg5bjgrjjgqfjgq/jg4jjgpLkvZzjgorjgb7jgZnj gIIKYCIyLjEuMTAiLmZyZWV6ZS5udW1lcmljY21wIjIuMS45Ii5mcmVlemVg IOOBquOCieOBsOOAgeOCguOBoeOCjeOCk+OCquODluOCuOOCp+OCr+ODiOOB r+S4gOOBpOOCguS9nOOCiuOBvuOBm+OCk+OAggoK44Gq44GK44CB5LiK6KiY 44Gu5L6L44Gn44KC56S65ZSG44GX44Gm44GE44G+44GZ44GM44CB5pys44Oh 44K944OD44OJ44GvIFJ1Ynkg44Gu44OQ44O844K444On44Oz6KGo6KiY44Gu IFRFRU5ZIOOBjDLmoYHjgavjgarjgaPjgZ/loLTlkIjjga7mr5TovIPjgavn lKjjgYTjgovjgZPjgajjgYzjgafjgY3jgb7jgZnjgIIKCuODkeODg+ODgeOB r+S7peS4i+OBrumAmuOCiuOBp+OBmeOAggrjgarjgYrjgIHjg6Hjgr3jg4Pj g4nlkI3jga8gU3RyaW5nI251bWVyaWNjbXAg44Go44GX44Gm44GE44G+44GZ 44CCCu+8iFN0cmluZyNjYXNlY21w44KS5b+16aCt44Gr572u44GE44Gf77yJ CgpgYGAKZGlmZiAtLWdpdCBhL3N0cmluZy5jIGIvc3RyaW5nLmMKaW5kZXgg YzU4OWM4MC4uNjZmNjY3ZiAxMDA2NDQKLS0tIGEvc3RyaW5nLmMKKysrIGIv c3RyaW5nLmMKQEAgLTI1NjksNiArMjU2OSwxMzEgQEAgcmJfc3RyX2Nhc2Vj bXAoVkFMVUUgc3RyMSwgVkFMVUUgc3RyMikKICAgICByZXR1cm4gSU5UMkZJ WCgtMSk7CiB9CiAKK1ZBTFVFCitudW1lcmljYWxfY29tcGFyZShjb25zdCBj aGFyICoqcHAxLCBjb25zdCBjaGFyICpwMWVuZCwgY29uc3QgY2hhciAqKnBw MiwgY29uc3QgY2hhciAqcDJlbmQpCit7CisgICAgY29uc3QgY2hhciAqczEg PSAqcHAxLCAqcDEsICpzMiA9ICpwcDIsICpwMjsKKyAgICBwdHJkaWZmX3Qg bGVuMSwgbGVuMjsKKyAgICBpbnQgcjsKKworICAgIHdoaWxlIChzMSA8IHAx ZW5kICYmICpzMSA9PSAnMCcpIHMxKys7CisgICAgcDEgPSBzMTsKKyAgICB3 aGlsZSAocDEgPCBwMWVuZCAmJiBJU0RJR0lUKCpwMSkpIHAxKys7CisgICAg bGVuMSA9IHAxIC0gczE7CisKKyAgICB3aGlsZSAoczIgPCBwMmVuZCAmJiAq czIgPT0gJzAnKSBzMisrOworICAgIHAyID0gczI7CisgICAgd2hpbGUgKHAy IDwgcDJlbmQgJiYgSVNESUdJVCgqcDIpKSBwMisrOworICAgIGxlbjIgPSBw MiAtIHMyOworCisgICAgaWYgKGxlbjEgIT0gbGVuMikgeworCXJldHVybiBJ TlQyRklYKGxlbjEgPCBsZW4yID8gLTEgOiAxKTsKKyAgICB9CisKKyAgICBy ID0gbWVtY21wKHMxLCBzMiwgbGVuMSk7CisgICAgaWYgKHIpIHJldHVybiBy IDwgMCA/IElOVDJGSVgoLTEpIDogSU5UMkZJWCgxKTsKKworICAgIGxlbjEg PSBzMSAtICpwcDE7CisgICAgbGVuMiA9IHMyIC0gKnBwMjsKKyAgICBpZiAo bGVuMSAhPSBsZW4yKSB7CisJcmV0dXJuIElOVDJGSVgobGVuMSA8IGxlbjIg PyAtMSA6IDEpOworICAgIH0KKworICAgICpwcDEgPSBwMTsKKyAgICAqcHAy ID0gcDI7CisgICAgcmV0dXJuIFFuaWw7Cit9CisKKy8qCisgKiAgY2FsbC1z ZXE6CisgKiAgICAgc3RyLm51bWVyaWNjbXAob3RoZXJfc3RyKSAgIC0+IC0x LCAwLCArMSBvciBuaWwKKyAqCisgKiAgVmFyaWFudCBvZiA8Y29kZT5TdHJp bmcjPD0+PC9jb2RlPiwgd2hpY2ggY29uc2lkZXJzIGRpZ2l0cyBpbiBzdHJp bmdzCisgKiAgYXJlIG51bWVyaWMgdmFsdWUuLgorICoKKyAqICAgICAiYTEi Lm51bWVyaWNjbXAoImExIikgICAgICAgICAgICAjPT4gMAorICogICAgICJh YSIubnVtZXJpY2NtcCgiYTEiKSAgICAgICAgICAgICM9PiAxCisgKiAgICAg ImExIi5udW1lcmljY21wKCJhYSIpICAgICAgICAgICAgIz0+IC0xCisgKiAg ICAgImExIi5udW1lcmljY21wKCJhMDEiKSAgICAgICAgICAgIz0+IC0xCisg KiAgICAgIjIuMS4yIi5udW1lcmljY21wKCIyLjEuMTAiKSAgICAgIz0+IDEK KyAqLworCitzdGF0aWMgVkFMVUUKK3JiX3N0cl9udW1lcmljY21wKFZBTFVF IHN0cjEsIFZBTFVFIHN0cjIpCit7CisgICAgbG9uZyBsZW47CisgICAgcmJf ZW5jb2RpbmcgKmVuYzsKKyAgICBjb25zdCBjaGFyICpwMSwgKnAxZW5kLCAq cDIsICpwMmVuZDsKKworICAgIFN0cmluZ1ZhbHVlKHN0cjIpOworICAgIGVu YyA9IHJiX2VuY19jb21wYXRpYmxlKHN0cjEsIHN0cjIpOworICAgIGlmICgh ZW5jKSB7CisJcmV0dXJuIFFuaWw7CisgICAgfQorCisgICAgcDEgPSBSU1RS SU5HX1BUUihzdHIxKTsgcDFlbmQgPSBSU1RSSU5HX0VORChzdHIxKTsKKyAg ICBwMiA9IFJTVFJJTkdfUFRSKHN0cjIpOyBwMmVuZCA9IFJTVFJJTkdfRU5E KHN0cjIpOworICAgIGlmIChzaW5nbGVfYnl0ZV9vcHRpbWl6YWJsZShzdHIx KSAmJiBzaW5nbGVfYnl0ZV9vcHRpbWl6YWJsZShzdHIyKSkgeworCXdoaWxl IChwMSA8IHAxZW5kICYmIHAyIDwgcDJlbmQpIHsKKwkgICAgaWYgKElTRElH SVQoKnAxKSkgeworCQlpZiAoSVNESUdJVCgqcDIpKSB7CisJCSAgICBWQUxV RSByID0gbnVtZXJpY2FsX2NvbXBhcmUoJnAxLCBwMWVuZCwgJnAyLCBwMmVu ZCk7CisJCSAgICBpZiAoIU5JTF9QKHIpKSByZXR1cm4gcjsKKwkJfQorCQll bHNlIHsKKwkJICAgIHJldHVybiBJTlQyRklYKC0xKTsKKwkJfQorCSAgICB9 CisJICAgIGVsc2UgaWYgKElTRElHSVQoKnAyKSkgeworCQlyZXR1cm4gSU5U MkZJWCgxKTsKKwkgICAgfQorCSAgICBpZiAoKnAxICE9ICpwMikgcmV0dXJu IElOVDJGSVgoKnAxIDwgKnAyID8gLTEgOiAxKTsKKwkgICAgcDErKzsKKwkg ICAgcDIrKzsKKwl9CisgICAgfQorICAgIGVsc2UgeworCXdoaWxlIChwMSA8 IHAxZW5kICYmIHAyIDwgcDJlbmQpIHsKKyAgICAgICAgICAgIGludCBsMSwg YzEgPSByYl9lbmNfYXNjZ2V0KHAxLCBwMWVuZCwgJmwxLCBlbmMpOworICAg ICAgICAgICAgaW50IGwyLCBjMiA9IHJiX2VuY19hc2NnZXQocDIsIHAyZW5k LCAmbDIsIGVuYyk7CisKKyAgICAgICAgICAgIGlmICgwIDw9IGMxICYmIDAg PD0gYzIpIHsKKwkJaWYgKElTRElHSVQoKnAxKSkgeworCQkgICAgaWYgKElT RElHSVQoKnAyKSkgeworCQkJVkFMVUUgciA9IG51bWVyaWNhbF9jb21wYXJl KCZwMSwgcDFlbmQsICZwMiwgcDJlbmQpOworCQkJaWYgKCFOSUxfUChyKSkg cmV0dXJuIHI7CisJCSAgICB9CisJCSAgICBlbHNlIHsKKwkJCXJldHVybiBJ TlQyRklYKC0xKTsKKwkJICAgIH0KKwkJfQorCQllbHNlIGlmIChJU0RJR0lU KCpwMikpIHsKKwkJICAgIHJldHVybiBJTlQyRklYKDEpOworCQl9CisJCWlm ICgqcDEgIT0gKnAyKSByZXR1cm4gSU5UMkZJWCgqcDEgPCAqcDIgPyAtMSA6 IDEpOworCQlwMSsrOworCQlwMisrOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IHI7CisgICAgICAg ICAgICAgICAgbDEgPSByYl9lbmNfbWJjbGVuKHAxLCBwMWVuZCwgZW5jKTsK KyAgICAgICAgICAgICAgICBsMiA9IHJiX2VuY19tYmNsZW4ocDIsIHAyZW5k LCBlbmMpOworICAgICAgICAgICAgICAgIGxlbiA9IGwxIDwgbDIgPyBsMSA6 IGwyOworICAgICAgICAgICAgICAgIHIgPSBtZW1jbXAocDEsIHAyLCBsZW4p OworICAgICAgICAgICAgICAgIGlmIChyICE9IDApCisgICAgICAgICAgICAg ICAgICAgIHJldHVybiBJTlQyRklYKHIgPCAwID8gLTEgOiAxKTsKKyAgICAg ICAgICAgICAgICBpZiAobDEgIT0gbDIpCisgICAgICAgICAgICAgICAgICAg IHJldHVybiBJTlQyRklYKGwxIDwgbDIgPyAtMSA6IDEpOworICAgICAgICAg ICAgfQorCSAgICBwMSArPSBsMTsKKwkgICAgcDIgKz0gbDI7CisJfQorICAg IH0KKyAgICBpZiAoUlNUUklOR19MRU4oc3RyMSkgPT0gUlNUUklOR19MRU4o c3RyMikpIHJldHVybiBJTlQyRklYKDApOworICAgIGlmIChSU1RSSU5HX0xF TihzdHIxKSA+IFJTVFJJTkdfTEVOKHN0cjIpKSByZXR1cm4gSU5UMkZJWCgx KTsKKyAgICByZXR1cm4gSU5UMkZJWCgtMSk7Cit9CisKIHN0YXRpYyBsb25n CiByYl9zdHJfaW5kZXgoVkFMVUUgc3RyLCBWQUxVRSBzdWIsIGxvbmcgb2Zm c2V0KQogewpAQCAtODcyMSw2ICs4ODQ2LDcgQEAgSW5pdF9TdHJpbmcodm9p ZCkKICAgICByYl9kZWZpbmVfbWV0aG9kKHJiX2NTdHJpbmcsICJlcWw/Iiwg cmJfc3RyX2VxbCwgMSk7CiAgICAgcmJfZGVmaW5lX21ldGhvZChyYl9jU3Ry aW5nLCAiaGFzaCIsIHJiX3N0cl9oYXNoX20sIDApOwogICAgIHJiX2RlZmlu ZV9tZXRob2QocmJfY1N0cmluZywgImNhc2VjbXAiLCByYl9zdHJfY2FzZWNt cCwgMSk7CisgICAgcmJfZGVmaW5lX21ldGhvZChyYl9jU3RyaW5nLCAibnVt ZXJpY2NtcCIsIHJiX3N0cl9udW1lcmljY21wLCAxKTsKICAgICByYl9kZWZp bmVfbWV0aG9kKHJiX2NTdHJpbmcsICIrIiwgcmJfc3RyX3BsdXMsIDEpOwog ICAgIHJiX2RlZmluZV9tZXRob2QocmJfY1N0cmluZywgIioiLCByYl9zdHJf dGltZXMsIDEpOwogICAgIHJiX2RlZmluZV9tZXRob2QocmJfY1N0cmluZywg IiUiLCByYl9zdHJfZm9ybWF0X20sIDEpOwpkaWZmIC0tZ2l0IGEvdGVzdC9y dWJ5L3Rlc3Rfc3RyaW5nLnJiIGIvdGVzdC9ydWJ5L3Rlc3Rfc3RyaW5nLnJi CmluZGV4IDgzNjY0MjQuLmY5Yzc4OGIgMTAwNjQ0Ci0tLSBhL3Rlc3QvcnVi eS90ZXN0X3N0cmluZy5yYgorKysgYi90ZXN0L3J1YnkvdGVzdF9zdHJpbmcu cmIKQEAgLTIxMDQsNiArMjEwNCwyOSBAQCBjbGFzcyBUZXN0U3RyaW5nIDwg VGVzdDo6VW5pdDo6VGVzdENhc2UKICAgICBhc3NlcnRfZXF1YWwoMSwgIlx1 MzA0MkIiLmNhc2VjbXAoIlx1MzA0MmEiKSkKICAgZW5kCiAKKyAgZGVmIHRl c3RfbnVtZXJpY2NtcAorICAgIGFzc2VydF9lcXVhbCgtMSwgIjIuMS4wIi5u dW1lcmljY21wKCIyLjEuMSIpKQorICAgIGFzc2VydF9lcXVhbCgtMSwgIjIu MS45Ii5udW1lcmljY21wKCIyLjEuMTAiKSkKKyAgICBhc3NlcnRfZXF1YWwo IDAsICJhMSIubnVtZXJpY2NtcCgiYTEiKSkKKyAgICBhc3NlcnRfZXF1YWwo IDEsICJhYSIubnVtZXJpY2NtcCgiYTEiKSkKKyAgICBhc3NlcnRfZXF1YWwo LTEsICJhMSIubnVtZXJpY2NtcCgiYWEiKSkKKyAgICBhc3NlcnRfZXF1YWwo LTEsICJhMSIubnVtZXJpY2NtcCgiYTAxIikpCisgICAgYXNzZXJ0X2VxdWFs KC0xLCAiYTAwMDEiLm51bWVyaWNjbXAoImEwMDAwMSIpKQorICAgIGFzc2Vy dF9lcXVhbCggMCwgImExYSIubnVtZXJpY2NtcCgiYTFhIikpCisgICAgYXNz ZXJ0X2VxdWFsKCAxLCAiYTFiIi5udW1lcmljY21wKCJhMWEiKSkKKyAgICBh c3NlcnRfZXF1YWwoLTEsICJhOWEiLm51bWVyaWNjbXAoImExMGEiKSkKKyAg ICBhc3NlcnRfZXF1YWwoIDEsICJiIi5udW1lcmljY21wKCJhIikpCisgICAg YXNzZXJ0X2VxdWFsKCAwLCAiXHUzMDQyMSIubnVtZXJpY2NtcCgiXHUzMDQy MSIpKQorICAgIGFzc2VydF9lcXVhbCggMSwgIlx1MzA0Mlx1MzA0MiIubnVt ZXJpY2NtcCgiXHUzMDQyMSIpKQorICAgIGFzc2VydF9lcXVhbCgtMSwgIlx1 MzA0MjEiLm51bWVyaWNjbXAoIlx1MzA0Mlx1MzA0MiIpKQorICAgIGFzc2Vy dF9lcXVhbCgtMSwgIlx1MzA0MjEiLm51bWVyaWNjbXAoIlx1MzA0MjAxIikp CisgICAgYXNzZXJ0X2VxdWFsKC0xLCAiXHUzMDQyMDAwMSIubnVtZXJpY2Nt cCgiXHUzMDQyMDAwMDEiKSkKKyAgICBhc3NlcnRfZXF1YWwoIDAsICJcdTMw NDIxXHUzMDQyIi5udW1lcmljY21wKCJcdTMwNDIxXHUzMDQyIikpCisgICAg YXNzZXJ0X2VxdWFsKCAxLCAiXHUzMDQyMVx1MzA0NCIubnVtZXJpY2NtcCgi XHUzMDQyMVx1MzA0MiIpKQorICAgIGFzc2VydF9lcXVhbCgtMSwgIlx1MzA0 MjlcdTMwNDIiLm51bWVyaWNjbXAoIlx1MzA0MjEwXHUzMDQyIikpCisgICAg YXNzZXJ0X2VxdWFsKCAxLCAiXHUzMDQ0Ii5udW1lcmljY21wKCJcdTMwNDIi KSkKKyAgZW5kCisKICAgZGVmIHRlc3RfdXBjYXNlMgogICAgIGFzc2VydF9l cXVhbCgiXHUzMDQyQUIiLCAiXHUzMDQyYUIiLnVwY2FzZSkKICAgZW5kCmBg YAoKCgotLSAKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvCg==