;ō (â>c@sėdZdZd„Zd„Zd„Zedjoīed„dƒdjpt‚ed„d ƒd jpt‚edƒd jpt‚ed ƒed jpt‚ed ƒdjpt‚eed ƒd jpt‚ndS(sCThis is a collection of tools for implementing ASCII based ciphers.icOs=||iƒ||Ž}|iƒo|iƒ}n|SdS(sÏApply the function f to the character c caselessly. The function f will receive a lower case version of c, but the return value of this function will have the same case as the original c did. N(sfscslowersargsskargssretsisuppersupper(sfscsargsskargssret((s./cipher/Tools.pysapply_caselesss  cCst|ƒtdƒSdS(sGet the offset of c from 'a'.saN(sordsc(sc((s./cipher/Tools.pysoffsetscCsttdƒ|ƒSdS(s/Given an offset from 'a', return the character.saN(schrsordsoffset(soffset((s./cipher/Tools.pys from_offsetss__main__cCsdS(Nsa((sc((s./cipher/Tools.pysssbsasBsAisziN(s__doc__s LEN_ALPHABETsapply_caselesssoffsets from_offsets__name__sAssertionError(s from_offsets LEN_ALPHABETsapply_caselesssoffset((s./cipher/Tools.pys?s