// ==UserScript==
// @name Visual Password Hash
// @namespace dschachtler.dssr.ch
// @description Displays a sequence of colored icons calculated from the entered password to help you detect if you've entered the password correctly.
// @include *
// @grant GM_getValue
// @grant GM_setValue
// @version 2
// ==/UserScript==
var cssinjected = false;
var displayedSymbols;
var symbols;
var names;
var colors;
var defaultDisplayedSymbols = 3;
var defaultSymbols = new Array();
defaultSymbols[00] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F%2BAAXefwABUAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QaP8Alf8AFf8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ9gAOuVAIEVAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAOOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAAA8eAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAPOkBABIApAAAAAO4ZIlkZEyDgwB8fAABPOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwhzAAMIHEiwoMGDCBMqXMgwAAAADSMOfChRIsWKDB9exJhQI0SOCD1uBDlR5EiSJk9yTKmRpEOWLVfC9ChzpsqFNkVazKmzIc%2BeOH8C7SiUZtCiNwsijalwaVKCTj8eFRpx6c6fGLHWhOlypsuSRr%2BKHWswIAA7";
defaultSymbols[01] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2FyAAXcTwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8Q%2BP8Aiv8AF%2F8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ%2FwAOuKAIEXAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAQOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABEeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAROkBABIApAAAAAO4ZIlkZEyDgwB8fAABROoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwh0AAMIHEiwoMGDCBECWMiQYcKHBBtKhEhRYkOKEC06xJhQ40KOHT2CVChypEGPAECiXGnxIMuXH0%2FCZOly5sqaNksWzIkSJ8%2BJMn8C3Sl0aEWdJgf2TBoRKdOlTAVCjTr1qdOkVbFeNZmV69aRXcF%2BVTlWYEAAOw%3D%3D";
defaultSymbols[02] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8Q6P8AT%2F8AFv8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ%2FgAOtPAIEWAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAOOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAAA8eAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAPOkBABIApAAAAAO4ZIlkZEyDgwB8fAABPOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwiZAAMIHEiwoMGDCBECWMgQQMKHAxkelAix4MKKAS5idIgxIkSNHSNyNAgypMiJJlFaTKlwpcCGIzvG5AizocmRDmvCDElTp06eGTP6tClT6E6jFC3GfIm05FGCRD3WhBpVZMmgP5teFUpS69ClCnN%2BffpQ41iyE3Gerap05lq2cN%2BeJSl3aNq6WeniZau3rky%2FN%2BeytMp3sOGAADs%3D";
defaultSymbols[03] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QcP8AbP8AGP8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ9oAOtsAIEYAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAQOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABEeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAROkBABIApAAAAAO4ZIlkZEyDgwB8fAABROoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwh0AAMIHEiwoMGDCBECWMhwYcKHAxtKZAjx4MSLFCsGwMgxY8KOIB%2BCHAlAIcmOFk%2BGLKhyZcSWLjfCRClw5siaNmnm1LkTI86eE38CbSh0qEOZRj0mPVoUKEujBpOm7GmS6kebFXNqREpy68uYXr9KDEsWYkAAOw%3D%3D";
defaultSymbols[04] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QwP8Agf8AGf8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ%2B4AOuBAIEZAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAOOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAAA8eAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAPOkBABIApAAAAAO4ZIlkZEyDgwB8fAABPOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwiUAAMIHEiwIAAABRMqXDjw4EGGEBc6dBixosCJEy1CxIhRo0KOHD0SBAlSZEOSFE2eJGkS4ciSIyOmXDnz4kOJGV%2FepOnSYMiXPjvq%2FIkTZgCUO4OyRFrTJtOnPXkuRVqUpVOiH61KjXqUq9GhXpsKzRo250qZSs1ebIlS5daxIqFy1fjU7VWsbrXavTt3r9q9QDUGBAA7";
defaultSymbols[05] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QSP8Ar%2F8AGP8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ9AAOuvAIEYAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAYOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABkeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAZOkBABIApAAAAAO4ZIlkZEyDgwB8fAABZOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwioAAMIDACgYMGBCBMKNHgwIcOHChE%2BZDhwIsSIFikSNLhQo8KLFD12bCiRY8mLDklWVLlSZMuPLEeaTAkAZk2bLjfePIlT586RNmnezEi06EyjSFG2TJoxIsaYM51KjQpUqlWqOq1ehRpT60uaXp1ixSqWKVGcZs%2FKTFtUJti3S30GhbuU7NiuE5%2F%2BrCoUL9e9a1nmdBnSpNKTDTUaLavW5%2BG%2Bg3MyVhkQADs%3D";
defaultSymbols[06] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QoP8AXv8AG%2F8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ%2BYAOteAIEbAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAOOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAAA8eAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAPOkBABIApAAAAAO4ZIlkZEyDgwB8fAABPOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwh0AAMIHEiwoMGDCBMqXMiwYQAAEB06hAhAYkOKFhlizKhwI8eDFCt%2BBOlxJMGQJg2iTHlyJcuHLlmGFPly5suBNm%2FmvFgSZ8yFM2kK3MnzJ9GiHo9OtKlUYtCmS58K5Sh16kepNYPehPnTJNSREbfiFEs2QEAAOw%3D%3D";
defaultSymbols[07] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QOP8Av%2F8AGf8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ8wAOu%2FAIEZAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAYOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABkeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAZOkBABIApAAAAAO4ZIlkZEyDgwB8fAABZOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwiJAAMIHEiwoMGDCAkCAJCwYcOFCx1KVAiRocOKFhFivIgxY8GOHimCDCkQ5MGREE%2BaFImSJMqBLUmyrAjz5cORAVpKjIlzIk%2BaE2vyDPpxKNGZHY8a1KlUqE2lP2XejEo06kaOVoFqfJm1ZEykJqmCvWq0aE%2BvT81eHbtTq9qITbfCjUu3rt2BAQEAOw%3D%3D";
defaultSymbols[08] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QwP8AT%2F8AG%2F8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ%2B4AOtPAIEbAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAOOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAAA8eAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAPOkBABIApAAAAAO4ZIlkZEyDgwB8fAABPOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwhsAAMIHEiwoMGDCBMqXMiwoUOBACJKlPgw4cSLFRFenJjx4EaKHQt%2BjBhS5MiSBEcCQDlQJUuIJ1OqnBkTJs2bHG3i3KlzJ84APn32DFqTKE2WLlEmLbk0ZNOOTzNGrTj1YVWHV19q3cq1q8GAADs%3D";
defaultSymbols[09] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QGP8AFv8AH%2F8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ8QAOsWAIEfAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAYOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABkeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAZOkBABIApAAAAAO4ZIlkZEyDgwB8fAABZOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwh5AAMIHEiwoMGDCBMOBKCwoUKGDiMWhChRIoCLFS1izNjwokeODz1SBGlQ5EiSBE2iLGnyJMqWLg%2FCnEkTpsCaOGdOzJkTIc%2BaIX%2BqdCh0o0aeIJEm7bkUJ0mlGYVytGmzYsudIq1mZfnxaMybXSMaDalR68qzaAkGBAA7";
defaultSymbols[10] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QiP8AFf8AH%2F8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ%2BAAOsVAIEfAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAQOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABEeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAROkBABIApAAAAAO4ZIlkZEyDgwB8fAABROoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwh3AAMIHEiwoMGDCBMaBABAocOEDBk%2BnDgwYkOKDy1KxKhQ40WOCDWChChy5EKPJgt6%2FJgywEqWJl%2B2FPgSJsiaNjniLElx50qSPnGGDCr0JNGaB48WVan0Z9KmKJ9CtTh0asSqVjtm1ToVY9ObPlOGFUuV6syRAQEAOw%3D%3D";
defaultSymbols[11] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8Q%2BP8Ao%2F8AF%2F8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ%2FwAOujAIEXAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAYOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABkeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAZOkBABIApAAAAAO4ZIlkZEyDgwB8fAABZOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwh1AAMIHEiwoMGDCBMqXMhQIICGEAk%2BjAgRgEWKDC1qxKhQ40WOBz1uBFlQ5EeSDk2eBKnSI8qWIznCdClz5sqKNmPizDlxJ8%2BeC3%2BKbCiUZseiRhEiTWpw6VClTnVKjMo0JdWbAa4%2Btao1ZtenX02iHEu2rMGAADs%3D";
defaultSymbols[12] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QCP8ApP8AF%2F8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ8AAOukAIEXAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAQOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABEeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAROkBABIApAAAAAO4ZIlkZEyDgwB8fAABROoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwh%2BAAMIHEiwoMGDCBMqXEgQgEOHCh8CWCixosGKEg9ixChwo8WGHjMGCCmyI8mTHE2iXPlQJcuVLl%2BejCkzJM2aG2%2FiLDlyp0eQPlMODPoRKNGJF48mJEpxJ8OeMp%2Fq%2FCkVKsqqQ69indpya9acXo3yDGsVItmCY8%2BaVMu2bdWAADs%3D";
defaultSymbols[13] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QwP8AT%2F8AG%2F8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ%2B4AOtPAIEbAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAYOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABkeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAZOkBABIApAAAAAO4ZIlkZEyDgwB8fAABZOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwiDAAMIHEiwoMGDAgEgXMhwoMKGEA0CeBix4sSKGC9ijDiR4saFHT1yBNnxYwCNBUOaLJlS5UeXCWFmDPmQpkiINhXaXJlz58aePn8ClclxKEuhRm823JnzJU2HRIsePRkV51SqKGdmhaqUYVWqPLsmdCrWZEyzXsua3Yo2ZVuQb%2BOaDAgAOw%3D%3D";
defaultSymbols[14] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHg0ACOHAAA2AAB%2BAADaAAAEABUeAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAungAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFja%2FwME%2FwAe%2FwAA%2F%2BAAXefwABUAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QaP8Alf8AFf8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAdxoADOsAgAAAAAAAADS42ukABBKSHgB8AJ9gAOuVAIEVAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHAaAOjrABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAOOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAAA8eAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAPOkBABIApAAAAAO4ZIlkZEyDgwB8fAABPOoAABIApAAAAAIAGgAA6wAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwiDAAMIHEiwoMGDAA4qXFgQgEOGEBs6nBgx4sSLCSsqxIhRo0SOHT0GAEnSI8mTJk9SHJmxokqJKTkibGkx5MyYNG9qfFgzpcucDHlCFNpz40OiQ4Gi3ElTJdCFRJ36HPhyqsCqTD9eFHn1KVeWNr92BSmW6lKxUsumVUu2LMGwbuMeDAgAOw%3D%3D";
defaultSymbols[15] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHg0ACOHAAA2AAB%2BAADaAAAEABUeAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAungAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFja%2FwME%2FwAe%2FwAA%2F%2BAAXefwABUAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QSP8Aj%2F8AFv8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAdxoADOsAgAAAAAAAADS42ukABBKSHgB8AJ9AAOuPAIEWAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHAaAOjrABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAQOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABEeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAROkBABIApAAAAAO4ZIlkZEyDgwB8fAABROoAABIApAAAAAIAGgAA6wAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwhsAAMIHEiwoMGDCBMqXAigocOHECNKJCixosWHFC9qjJhxo0cAHT9qDCnSIsmSEweiHKlypcmWLlMKjFnxJE2QMG86tEmTZ0yfLoGuFIqSaEmjIpF%2BVOqR6UanLGfqxJhzKtSLV18u3Mq1a9eAADs%3D";
var defaultNames = new Array(
"Drop", "Latin Cross", "Taijitu (Ying Yang)", "Circle",
"Diamonds", "Bowen Knot", "Check Mark (Yes)", "Cross Mark (No)",
"Arrow", "Star", "Thumbs Up", "Triangle",
"Heart", "Lightning", "Notes", "Square"
);
var defaultColors = new Array('red', 'orange', 'green', 'blue', 'black');
loadConfig();
var pwds = document.getElementsByTagName('input');
for (var i = 0; i < pwds.length; i++)
{
if (pwds[i].type == 'password')
{
createHashContainer();
injectCSS();
wrapPasswordField(pwds[i]);
}
}
function loadConfig()
{
displayedSymbols = GM_getValue('NumberOfDisplayedSymbols', null);
if (displayedSymbols == null)
{
displayedSymbols = defaultDisplayedSymbols;
GM_setValue('NumberOfDisplayedSymbols', defaultDisplayedSymbols);
}
symbols = GM_getValue('Symbols', null);
if (symbols == null || symbols.length == 0)
{
symbols = defaultSymbols;
GM_setValue('Symbols', defaultSymbols.join('|'));
}
else
{
symbols = symbols.split('|');
}
names = GM_getValue('SymbolNames', null);
if (names == null || names.length == 0)
{
names = defaultNames;
GM_setValue('SymbolNames', defaultNames.join('|'));
}
else
{
names = names.split('|');
}
colors = GM_getValue('Colors', null);
if (colors == null || colors.length == 0)
{
colors = defaultColors;
GM_setValue('Colors', defaultColors.join('|'));
}
else
{
colors = colors.split('|');
}
}
function injectCSS()
{
if (cssinjected) return;
cssinjected = true;
var head = document.getElementsByTagName('head')[0];
var mycss = document.createElement('style');
mycss.type = 'text/css';
mycss.innerHTML =
'div.visualpasswordhash span\
{\
margin: 2px;\
}\
div.visualpasswordhash\
{\
position: absolute;\
visibility: hidden;\
background: white;\
padding: 4px 4px 4px 4px;\
border: 3px solid black;\
z-index: 1000;\
-moz-border-radius: 8px;\
}\
div.visualpasswordhash.on\
{\
visibility: visible;\
}';
head.appendChild(mycss);
}
function createHashContainer()
{
if (document.getElementById('visualpasswordhash') != null) return;
var myelement = document.createElement('div');
myelement.id = "visualpasswordhash";
myelement.className = "visualpasswordhash";
myelement.innerHTML =
'<span style="background: black; display: inline-block; height: 18px;">\
<img height="18" alt="" title="" id="vpwdhash_icon1" src="sym0.gif"/>\
</span>\
<span style="background: black; display: inline-block; height: 18px;">\
<img height="18" alt="" title="" id="vpwdhash_icon2" src="sym1.gif"/>\
</span>\
<span style="background: black; display: inline-block; height: 18px;">\
<img height="18" alt="" title="" id="vpwdhash_icon3" src="sym2.gif"/>\
</span>'
document.getElementsByTagName('body')[0].appendChild(myelement)
setSymbol(document.getElementById('vpwdhash_icon1'), 0);
setSymbol(document.getElementById('vpwdhash_icon2'), 1);
setSymbol(document.getElementById('vpwdhash_icon3'), 2);
}
function wrapPasswordField(field)
{
field.addEventListener("keyup", function() {passwordChanged(field);}, true);
field.addEventListener("focus", function() {positionHashContainer(field); showHash();}, false);
field.addEventListener("blur", function() {hideHash();}, false);
}
function positionHashContainer(pwdfield)
{
var hashelement = document.getElementById('visualpasswordhash');
hashelement.style.top = (findPosY(pwdfield) + pwdfield.offsetHeight) + "px";
hashelement.style.left = (findPosX(pwdfield)) + "px";
}
function findPosX(obj) {
var curleft = curtop = 0;
if (obj.offsetParent) {
do {
curleft += obj.offsetLeft;
} while (obj = obj.offsetParent);
return curleft;
}
}
function findPosY(obj) {
var curleft = curtop = 0;
if (obj.offsetParent) {
do {
curtop += obj.offsetTop;
} while (obj = obj.offsetParent);
return curtop;
}
}
function showHash()
{
document.getElementById('visualpasswordhash').className = "visualpasswordhash on";
}
function hideHash()
{
document.getElementById('visualpasswordhash').className = "visualpasswordhash";
}
function passwordChanged(field)
{
positionHashContainer(field);
showHash();
var pwd = field.value;
if (pwd.length >= 5)
{
var hash = SHA256(pwd);
setSymbol(document.getElementById('vpwdhash_icon1'), parseInt("0x" + hash.substring(4,6)) % symbols.length);
setSymbol(document.getElementById('vpwdhash_icon2'), parseInt("0x" + hash.substring(7,9)) % symbols.length);
setSymbol(document.getElementById('vpwdhash_icon3'), parseInt("0x" + hash.substring(23,25)) % symbols.length);
var sum = parseInt("0x" + hash) % (colors.length * colors.length * colors.length);
document.getElementById('vpwdhash_icon1').parentNode.style.background = colors[/*(sum / colors.length / colors.length)*/parseInt("0x" + hash.substring(6,7)) % colors.length];
document.getElementById('vpwdhash_icon2').parentNode.style.background = colors[/*(sum / colors.length)*/parseInt("0x" + hash.substring(9,10)) % colors.length];
document.getElementById('vpwdhash_icon3').parentNode.style.background = colors[/*sum*/parseInt("0x" + hash.substring(25,26)) % colors.length];
}
else
{
setSymbol(document.getElementById('vpwdhash_icon1'), Math.floor(Math.random() * symbols.length));
setSymbol(document.getElementById('vpwdhash_icon2'), Math.floor(Math.random() * symbols.length));
setSymbol(document.getElementById('vpwdhash_icon3'), Math.floor(Math.random() * symbols.length));
document.getElementById('vpwdhash_icon1').parentNode.style.background = colors[Math.floor(Math.random() * colors.length)];
document.getElementById('vpwdhash_icon2').parentNode.style.background = colors[Math.floor(Math.random() * colors.length)];
document.getElementById('vpwdhash_icon3').parentNode.style.background = colors[Math.floor(Math.random() * colors.length)];
}
}
function setSymbol(node, symbol)
{
//alert(names[symbol]);
node.src = symbols[symbol];
node.title = names[symbol];
node.alt = names[symbol];
}
function SHA256(s){
var chrsz = 8;
var hexcase = 0;
function safe_add (x, y) {
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}
function S (X, n) { return ( X >>> n ) | (X << (32 - n)); }
function R (X, n) { return ( X >>> n ); }
function Ch(x, y, z) { return ((x & y) ^ ((~x) & z)); }
function Maj(x, y, z) { return ((x & y) ^ (x & z) ^ (y & z)); }
function Sigma0256(x) { return (S(x, 2) ^ S(x, 13) ^ S(x, 22)); }
function Sigma1256(x) { return (S(x, 6) ^ S(x, 11) ^ S(x, 25)); }
function Gamma0256(x) { return (S(x, 7) ^ S(x, 18) ^ R(x, 3)); }
function Gamma1256(x) { return (S(x, 17) ^ S(x, 19) ^ R(x, 10)); }
function core_sha256 (m, l) {
var K = new Array(0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0xFC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x6CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2);
var HASH = new Array(0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19);
var W = new Array(64);
var a, b, c, d, e, f, g, h, i, j;
var T1, T2;
m[l >> 5] |= 0x80 << (24 - l % 32);
m[((l + 64 >> 9) << 4) + 15] = l;
for ( var i = 0; i<m.length; i+=16 ) {
a = HASH[0];
b = HASH[1];
c = HASH[2];
d = HASH[3];
e = HASH[4];
f = HASH[5];
g = HASH[6];
h = HASH[7];
for ( var j = 0; j<64; j++) {
if (j < 16) W[j] = m[j + i];
else W[j] = safe_add(safe_add(safe_add(Gamma1256(W[j - 2]), W[j - 7]), Gamma0256(W[j - 15])), W[j - 16]);
T1 = safe_add(safe_add(safe_add(safe_add(h, Sigma1256(e)), Ch(e, f, g)), K[j]), W[j]);
T2 = safe_add(Sigma0256(a), Maj(a, b, c));
h = g;
g = f;
f = e;
e = safe_add(d, T1);
d = c;
c = b;
b = a;
a = safe_add(T1, T2);
}
HASH[0] = safe_add(a, HASH[0]);
HASH[1] = safe_add(b, HASH[1]);
HASH[2] = safe_add(c, HASH[2]);
HASH[3] = safe_add(d, HASH[3]);
HASH[4] = safe_add(e, HASH[4]);
HASH[5] = safe_add(f, HASH[5]);
HASH[6] = safe_add(g, HASH[6]);
HASH[7] = safe_add(h, HASH[7]);
}
return HASH;
}
function str2binb (str) {
var bin = Array();
var mask = (1 << chrsz) - 1;
for(var i = 0; i < str.length * chrsz; i += chrsz) {
bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i%32);
}
return bin;
}
function Utf8Encode(string) {
string = string.replace(/\r\n/g,"\n");
var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
}
else if((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
}
else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
}
function binb2hex (binarray) {
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
var str = "";
for(var i = 0; i < binarray.length * 4; i++) {
str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);
}
return str;
}
s = Utf8Encode(s);
return binb2hex(core_sha256(str2binb(s), s.length * chrsz));
}