-+-+-+-+-+-+-+-+ START OF PART 2 -+-+-+-+-+-+-+-+ XWatchWord`20and`20WatchWord`20II X`20`20`20`20`20`20`20`20Racal-Guardata`20 X`20`20`20`20`20`20`20`20480`20Spring`20Park`20Place X`20`20`20`20`20`20`20`20Herndon,`20VA`2022070 X`20`20`20`20`20`20`20`20703-471-0892 X`20`20`20`20`20`20`20`201-800-521-6261`20ext`20217 X X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Products: X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Watchw Vord`20authentication`20calculator X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Encryp Vting`20modems X X`20`20`20`20`20`20`20`20Alpha-numeric`20keypad,`20digital`20signature`20capabi Vlity X XSafeWord`20 X`20`20`20`20`20`20`20`20Enigma`20Logic,`20Inc.`20 X`20`20`20`20`20`20`20`202151`20Salvio`20#301`20`20`20 X`20`20`20`20`20`20`20`20Concord,`20CA`2094520`20`20 X`20`20`20`20`20`20`20`20510-827-5707 X`20`20`20`20`20`20`20`20Fax:`20(510)827-2593 X X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Products: X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20DES`20 VSilver`20card`20authentication`20calculator X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20SafeWo Vrd`20Multisync`20card`20authentication`20calculator X X`20`20`20`20`20`20`20`20Available`20for`20UNIX,`20VMS,`20MVS,`20MS-DOS,`20Tand Vum,`20Stratus,`20as`20well`20as X`20`20`20`20`20`20`20`20other`20OS`20versions.`20`20Supports`20one-time`20pass Vwords`20and`20super X`20`20`20`20`20`20`20`20smartcards`20from`20several`20vendors. X X X X X X`0C--------------------------------------------------------------------------- V XAppendix`20C:`20`20 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20cpm V`201.0`20README`20FILE X X X`20`20`20`20`20`20`20cpm`20-`20`20check`20for`20network`20interfaces`20in`20pr Vomiscuous`20mode. X XCopyright`20(c)`20Carnegie`20Mellon`20University`201994 XThursday`20Feb`203`201994 X XCERT`20Coordination`20Center XSoftware`20Engineering`20Institute XCarnegie`20Mellon`20University XPittsburgh,`20PA`2015213-3890 X X X`20`20`20This`20program`20is`20free`20software;`20you`20can`20distribute`20it V`20and/or`20modify X`20`20`20it`20as`20long`20as`20you`20retain`20the`20Carnegie`20Mellon`20copyri Vght`20statement. X X`20`20`20It`20can`20be`20obtained`20via`20anonymous`20FTP`20from`20info.cert.o Vrg:pub/tools/cpm.tar.Z. X X`20`20`20This`20program`20is`20distributed`20WITHOUT`20ANY`20WARRANTY;`20witho Vut`20the`20IMPLIED X`20`20`20WARRANTY`20of`20merchantability`20or`20fitness`20for`20a`20particular V`20purpose. X X`20`20`20This`20package`20contains: X`20`20`20`20`20`20`20README X`20`20`20`20`20`20`20MANIFEST X`20`20`20`20`20`20`20cpm.1 X`20`20`20`20`20`20`20cpm.c X X`20`20`20To`20create`20cpm`20under`20SunOS,`20type: X`20`20`20%`20cc`20-Bstatic`20-o`20cpm`20cpm.c`20 X X`20`20`20On`20machines`20that`20support`20dynamic`20loading,`20such`20as`20Sun V's,`20CERT`20recommends X`20`20`20that`20programs`20be`20statically`20linked`20so`20that`20this`20featu Vre`20is`20disabled. X X`20`20`20CERT`20recommends`20that`20after`20you`20install`20cpm`20in`20your`20 Vfavorite`20directory, X`20`20`20you`20take`20measures`20to`20ensure`20the`20integrity`20of`20the`20pr Vogram`20by`20noting X`20`20`20the`20size`20and`20checksums`20of`20the`20source`20code`20and`20resul Vting`20binary. X X X`20`20`20The`20following`20is`20an`20example`20of`20the`20output`20of`20cpm`20 Vand`20its`20exit`20status. X X`20`20`20Running`20cpm`20on`20a`20machine`20where`20both`20the`20le0`20and`20l Ve2`20interfaces`20are X`20`20`20in`20promiscuous`20mode,`20under`20csh(1): X X`20`20`20%`20cpm X`20`20`20le0 X`20`20`20le2 X`20`20`20%`20echo`20$status X`20`20`202 X`20`20`20% X X`20`20`20Running`20cpm`20on`20a`20machine`20where`20no`20interfaces`20are`20in V`20promiscuous`20 X`20`20`20mode,`20under`20csh(1): X X`20`20`20%`20cpm X`20`20`20%`20echo`20$status X`20`20`200 X`20`20`20% X X X------------------------------------------------------------------------------ V-- $ call unpack CERT_CA-94.01;1 592888678 "" 48 4 12 $! $ create 'f' X`09%TITLE`20"Challenge_Response`20-`20Addition`20password`20mechanism" X`09%SBTTL`20"Overall`20description`20and`20modification`20history" X`09%IDENT`20"V00.90" X`09! X`09! X`09!`09Copyright`20(c)`201994,`20Peter`20A.`20Smode`20(Vancouver,`20BC) X`09! X`09!`09`09All`20Rights`20Reserved X`09! X`09!Permission`20`20is`20`20hereby`20`20granted`20`20`20to`20`20use,`20`20copy V,`20`20modify,`20`20and X`09!distribute`20`20this`20software`20`20provided`20`20that`20the`20`20above V`20`20copyright X`09!notice`20appears`20in`20`20all`20copies`20and`20that`20`20any`20distributi Von`20be`20for X`09!noncommercial`20purposes. X`20`20`20`20`20`20`20`20! X`09!Peter`20A.`20Smode`20disclaims`20all`20warranties`20with`20regard`20to`20t Vhis X`09!software.`20`20In`20no`20event`20shall`20Peter`20A.`20Smode`20be`20liable V`20for`20any`20 X`09!special,`20indirect,`20`20or`20consequential`20damages`20or`20any`20damage Vs`20 X`09!whatsoever`20`20resulting`20from`20loss`20of`20use,`20data,`20or`20profits V`20arising`20 X`09!out`20of`20or`20in`20connection`20with`20the`20use`20or`20performance`20of V`20this`20software. X`09! X`09!++ X`09! X`09! X`09!`20ABSTRACT: X`09! X`09!`09Implements`20a`20challenge/response`20password`20mechanism.`20Depending V X`09!`09upon`20the`20password`20policy`20implemented,`20the`20user`20is`20match Ved`20to X`09!`09their`20appropriate`20key`20phrase.`20The`20user`20is`20then`20prompted V`20with X`09!`09a`20series`20of`20numbers.`20It`20is`20up`20to`20the`20user`20to`20then V`20enter`20the X`09!`09characters`20from`20their`20key`20phrase`20at`20those`20offsets.`20Fail Vure X`09!`09results`20in`20process`20termination. X`09!`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C X`09! X`09!`20AUTHOR:`20Peter`20Smode,`20CREATION`20DATE:`20`206`20Feb`201994 X`09! X`09!`20MODIFIED`20BY: X`09! X`09!`09Peter`20Smode,`20`206-Feb-1994:`20VERSION`20V00.90 X`09!`20000`20-`20Original`20version`20of`20module. X`09! X`09!-- X`09%SBTTL`20"Full`20description" X`09! X`09!++ X`09! X`09!`20FUNCTIONAL`20DESCRIPTION: X`09! X`09!`09Keybaord`20I/O`20is`20carried`20out`20over`20SYS$COMMAND.`20The`20user V`20is X`09!`09first`20classified`20and`20categorized`20within`20the`20local`20passwor Vd X`09!`09policy.`20That`20is,`20the`20system`20determines`20wether`20the`20user V X`09!`09is`20to`20work`20against`20the`20key`20phrase`20for`20their`20account, V`20UIC X`09!`09group,`20or`20system.`20(Note,`20this`20stuff`20may`20not`20be`20implem Vented X`09!`09in`20the`20initial`20release.`20Password`20policy`20may`20simply`20be V`20one X`09!`09key`20phrase`20per`20username,`20with`20a`20system`20default). X`09! X`09!`09The`20challenge/response`20password`20file`20is`20accessed,`20and`20the V X`09!`09key`20phrase`20appropriate`20to`20the`20user`20is`20retrieved.`20A`20ra Vndom X`09!`09function`20then`20determines`20which`20offsets`20the`20user`20will`20be V X`09!`09'challenged'`20with.`20The`20user`20must`20then`20enter`20the`20charact Vers`20 X`09!`09from`20the`20key`20phrase`20at`20those`20offsets.`20If`20the`20user's X`09!`09'response'`20does`20not`20match,`20the`20user`20process`20is`20terminat Ved. X`09! X`09!`09This`20password`20scheme`20is`20especially`20suitable`20for`20accounts V X`09!`09accessed`20via`20Telnet,`20as`20it`20is`20resistant`20to`20line`20monit Voring. X`09!`09For`20additional`20information,`20please`20refer`20to`20the`20recent X`09!`09CERT`20advisory. X`09!`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C X`09! X`09!`20FORMAL`20PARAMETERS: X`09! X`09!`20`20`20None. X`09!`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C X`09! X`09!`20IMPLICIT`20INPUTS: X`09! X`09!`09Username`20and`20access`20type`20of`20the`20user. X`09!`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C X`09! X`09!`20IMPLICIT`20OUTPUTS: X`09! X`09!`09Process`20lives`20or`20dies. X`09!`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C X`09! X`09!`20COMPLETION`20CODE: X`09! X`09!`09SS$_NORMAL`09`09Normal`20successful`20completion X`09! X`09!`09SS$_ABORT`09`09(This`20should`20never`20be`20actually`20seen`20- X`09!`09`09`09`09process`20should`20be`20killed`20before`20this X`09!`09`09`09`09is`20signaled) X`09!`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C X`09! X`09!`20SIDE`20EFFECTS: X`09! X`09!`09Better`20security`20(I`20hope). X`09!`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C`09`7C X`09!-- X`09%SBTTL`20"Declarations" X`09! X`09!`20ENVIRONMENT`20SPECIFICATION: X`09! X`09OPTION`09`09`09`09`09`09`09`09`26 X`09`09TYPE`20=`20EXPLICIT X`09! X`09!`20INCLUDE`20FILES: X`09! X`09%INCLUDE`20"CR-INCLUDE.INC" X`09! X`09!`20EQUATED`20SYMBOLS: X`09! X`09DECLARE`20LONG`20CONSTANT`09`09`09`09`09`09`26 X`09`20`20`20INPUT_TIMEOUT_VALUE`20=`20180%,`09`09`09`09`09`26 X`09`20`20`20ITEM_LIST_MAX`20=`2031%,`09`09`09`09`09`09`26 X`09`20`20`20KPF_CHAN`20=`201%,`09`09`09`09`09`09`26 X`09`20`20`20MAX_OPEN_ATTEMPTS`20=`205%,`09`09`09`09`09`26 X`09`20`20`20USR_RD_BUF_SZ`20=`20127%,`09`09!Width`20user`20input`20buffer`26 X`09`20`20`20ESC_OVR_BUF`20=`205%,`09`09`09!ESC`20overflow`20buffer`20size`26 X`09`20`20`20QIO_ITEM_LIST_SIZE`20=`204%`20*`2012%`09!Bytes`20used`20in`20$QIOW V`20call X`09DECLARE`20STRING`20CONSTANT`09`09`09`09`09`09`26 X`09`20`20`20DEFAULT_KEY`20=`20"DEFAULT" X`09! X`09!`20DATATYPE`20SPECIFICATION: X`09! X`09RECORD`20IOSBLK X`09`20`20`20WORD`09`09`09`09`09`09`09`09`26 X`09`09IO_STAT,`09`09`09`09`09`09`26 X`09`09TERM_OFFSET,`09`09`09`09`09`09`26 X`09`20`20`20BYTE`09`09`09`09`09`09`09`09`26 X`09`09TERM_CHAR,`09`09`09`09`09`09`26 X`09`09RESERVED,`09`09`09`09`09`09`26 X`09`09TERM_LEN,`09`09`09`09`09`09`26 X`09`09POS_FROM_EOL X`09END`20RECORD`20IOSBLK X X`09RECORD`20STRING_127 X`09`20`20`20STRING`09ST127`20=`20127% X`09END`20RECORD`20STRING_127 X`09! X`09!`20LOCAL`20STORAGE: X`09! X`09DECLARE`09`09`09`09`09`09`09`09`26 X`09`20`20`20KEY_PHRASE_REC_STRUCT`09`09`09`09`09`26 X`09`09TRIAL_KEY,`09`09`09`09`09`09`26 X`09`20`20`20ITEM_LIST_STRUCT`09`09`09`09`09`09`26 X`09`09ITEM_LIST(ITEM_LIST_MAX),`09`09`09`09`26 X`09`20`20`20GETJPI_BLOCK_STRUCT`09`09`09`09`09`09`26 X`09`09GETJPI_BLOCK,`09`09`09`09`09`09`26 X`09`20`20`20STRING_127`09`09`09`09`09`09`09`26 X`09`09PROMPT_BUF,`09`09`09!Prompt`20buffer`20for`20$QIOW`26 X`09`20`20`20STRING`09`09`09`09`09`09`09`26 X`09`09INPUT_PROMPT,`09`09`09`09`09`09`26 X`09`09CORRECT_RESPONSE,`09`09`09`09`09`26 X`09`09CHALLENGE_LINE(1%`20TO`20MAX_CHALLENGE_LINES),`09`09`26 X`09`09QIO_TXT_RCVD,`09`09`09!Text`20returned`20by`20$QIOW`09`26 X`09`20`20`20IOSBLK`09`09`09`09`09`09`09`26 X`09`09IOSB,`09`09`09`09!$QIOW`20I/O`20status`20block`09`26 X`09`20`20`20LONG`09`09`09`09`09`09`09`09`26 X`09`09SYS_STATUS,`09`09!External`20function`20return`20status,`26 X`09`09INPUT_TIMEOUT,`09`09`09`09`09`09`26 X`09`09QIO_FUNC,`09`09`09`09`09`09`26 X`09`09ITEM_LIST_SIZE,`09`09`09`09`09`09`26 X`09`20`20`20WORD`09`09`09`09`09`09`09`09`26 X`09`09OPEN_ATTEMPT_COUNT,`09`09`09`09`09`26 X`09`09CHALLENGE_LOOP,`09`09`09`09`09`09`26 X`09`09CHALLENGE_CHARS,`09`09`09`09`09`26 X`09`09CHALLENGE(1%`20TO`20CHLNG_CHARS_MAX),`09`09`09`26 X`09`09QIO_CHAN X`09! X`09!`20GLOBAL`20STORAGE: X`09! X`09MAP`20(KPF_MAP)`09`09`09`09`09`09`09`26 X`09`20`20`20KEY_PHRASE_REC_STRUCT`09`09`09`09`09`26 X`09`09KEY_PHRASE_REC X`09! X`09!`20EXTERNAL`20REFERENCES: X`09! X`09EXTERNAL`20LONG`20CONSTANT`09`09`09`09`09`09`26 X`09`09SS$_NORMAL,`09`09`09`09`09`09`26 X`09`09SS$_ABORT,`09`09`09`09`09`09`26 X`09`09SS$_TIMEOUT,`09`09`09`09`09`09`26 X`09`09IO$_READVBLK,`09`09`09`09`09`09`26 X`09`09IO$M_EXTEND,`09`09`09`09`09`09`26 X`09`09TRM$M_TM_ESCAPE,`09`09`09`09`09`26 X`09`09TRM$M_TM_NORECALL X`09EXTERNAL`20WORD`20CONSTANT`09`09`09`09`09`09`26 X`09`09JPI$_ACCOUNT,`09`09`09`09`09`09`26 X`09`09JPI$_AUTHPRIV,`09`09`09`09`09`09`26 X`09`09JPI$_CLINAME,`09`09`09`09`09`09`26 X`09`09JPI$_GRP,`09`09`09`09`09`09`26 X`09`09JPI$_JOBTYPE,`09`09`09`09`09`09`26 X`09`09JPI$_LAST_LOGIN_I,`09`09`09`09`09`26 X`09`09JPI$_LAST_LOGIN_N,`09`09`09`09`09`26 X`09`09JPI$_LOGIN_FAILURES,`09`09`09`09`09`26 X`09`09JPI$_LOGIN_FLAGS,`09`09`09`09`09`26 X`09`09JPI$_MODE,`09`09`09`09`09`09`26 X`09`09JPI$_NODENAME,`09`09`09`09`09`09`26 X`09`09JPI$_NODE_CSID,`09`09`09`09`09`09`26 X`09`09JPI$_NODE_VERSION,`09`09`09`09`09`26 X`09`09JPI$_PID,`09`09`09`09`09`09`26 X`09`09JPI$_PRCNAM,`09`09`09`09`09`09`26 X`09`09JPI$_SITESPEC,`09`09`09`09`09`09`26 X`09`09JPI$_TERMINAL,`09`09`09`09`09`09`26 X`09`09JPI$_TT_ACCPORNAM,`09`09`09`09`09`26 X`09`09JPI$_TT_PHYDEVNAM,`09`09`09`09`09`26 X`09`09JPI$_UAF_FLAGS,`09`09`09`09`09`09`26 X`09`09JPI$_UIC,`09`09`09`09`09`09`26 X`09`09JPI$_USERNAME,`09`09`09`09`09`09`26 X`09`09TRM$_MODIFIERS,`09`09`09`09`09`09`26 X`09`09TRM$_ESCTRMOVR,`09`09`09`09`09`09`26 X`09`09TRM$_PROMPT,`09`09`09`09`09`09`26 X`09`09TRM$_TIMEOUT X`09EXTERNAL`20LONG`20FUNCTION`09`09`09`09`09`09`26 X`09`09CR_Policy(GETJPI_BLOCK_STRUCT,`20STRING),`09`09`09`26 X`09`09LIB$STOP,`09`09`09`09`09`09`26 X`09`09SYS$GETJPI,`09`09`09`09`09`09`26 X`09`09SYS$ASSIGN,`09`09`09`09`09`09`26 X`09`09SYS$QIOW X`09! X`09!`20INTERNAL`20REFERENCES: X`09! X X X`09%PAGE X`09%SBTTL`20"Environment`20initialization" X`09!+ X`09!`20Set`20up`20global`20error`20handler`20and`20initialize`20local`20variab Vles. X`09!- X`20`09ON`20ERROR`20GOTO`20GeneralError X`09RANDOMIZE`09`09`09`09`09!Make`20RND`20really`20RND X X X`09%SBTTL`20"Classify`20user" X`20ClassifyUser: X`09!+ X`09!`20Get`20information`20about`20this`20user's`20process`20(username,`20proc Vess X`09!`20mode,`20time`20of`20day,`20etc.)`20and`20use`20this`20as`20input`20to V`20the`20local X`09!`20password`20policy`20module.`20Password`20policy`20module`20will`20retur Vn X`09!`20an`20index`20key`20to`20the`20challenge/response`20password`20file`20th Vat`20will X`09!`20be`20used`20to`20return`20the`20user's`20key`20phrase`20(if`20any).`20P Vassword`20policy X`09!`20routine`20will`20retrn`20a`20null`20key`20if`20the`20user`20is`20not`20 Vto`20be`20'challenged'. X`09!- X`09ITEM_LIST(0%)::ITEM_CODE`09=`20JPI$_ACCOUNT X`09ITEM_LIST(0%)::BUF_LEN`09`09=`20ACCOUNT_SIZE X`09ITEM_LIST(0%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::ACCOUNT) X`09ITEM_LIST(0%)::RET_ADR`09`09=`20LOC(GETJPI_BLOCK::ACCOUNT_LEN) X X`09ITEM_LIST(1%)::ITEM_CODE`09=`20JPI$_AUTHPRIV X`09ITEM_LIST(1%)::BUF_LEN`09`09=`204% X`09ITEM_LIST(1%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::AUTHPRIV) X`09ITEM_LIST(1%)::RET_ADR`09`09=`20NULL X X`09ITEM_LIST(2%)::ITEM_CODE`09=`20JPI$_CLINAME X`09ITEM_LIST(2%)::BUF_LEN`09`09=`20CLINAME_SIZE X`09ITEM_LIST(2%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::CLINAME) X`09ITEM_LIST(2%)::RET_ADR`09`09=`20LOC(GETJPI_BLOCK::CLINAME_LEN) X X`09ITEM_LIST(3%)::ITEM_CODE`09=`20JPI$_GRP X`09ITEM_LIST(3%)::BUF_LEN`09`09=`204% X`09ITEM_LIST(3%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::GRP) X`09ITEM_LIST(3%)::RET_ADR`09`09=`20NULL X X`09ITEM_LIST(4%)::ITEM_CODE`09=`20JPI$_JOBTYPE X`09ITEM_LIST(4%)::BUF_LEN`09`09=`204% X`09ITEM_LIST(4%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::JOBTYPE) X`09ITEM_LIST(4%)::RET_ADR`09`09=`20NULL X X`09ITEM_LIST(5%)::ITEM_CODE`09=`20JPI$_LAST_LOGIN_I X`09ITEM_LIST(5%)::BUF_LEN`09`09=`208% X`09ITEM_LIST(5%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::LAST_LOGIN_I) X`09ITEM_LIST(5%)::RET_ADR`09`09=`20NULL X X`09ITEM_LIST(6%)::ITEM_CODE`09=`20JPI$_LAST_LOGIN_N X`09ITEM_LIST(6%)::BUF_LEN`09`09=`208% X`09ITEM_LIST(6%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::LAST_LOGIN_N) X`09ITEM_LIST(6%)::RET_ADR`09`09=`20NULL X X`09ITEM_LIST(7%)::ITEM_CODE`09=`20JPI$_LOGIN_FAILURES X`09ITEM_LIST(7%)::BUF_LEN`09`09=`204% X`09ITEM_LIST(7%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::LOGIN_FAILURES) X`09ITEM_LIST(7%)::RET_ADR`09`09=`20NULL X X`09ITEM_LIST(8%)::ITEM_CODE`09=`20JPI$_LOGIN_FLAGS X`09ITEM_LIST(8%)::BUF_LEN`09`09=`204% X`09ITEM_LIST(8%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::LOGIN_FLAGS) X`09ITEM_LIST(8%)::RET_ADR`09`09=`20NULL X X`09ITEM_LIST(9%)::ITEM_CODE`09=`20JPI$_MODE X`09ITEM_LIST(9%)::BUF_LEN`09`09=`204% X`09ITEM_LIST(9%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::JMODE) X`09ITEM_LIST(9%)::RET_ADR`09`09=`20NULL X X`09ITEM_LIST(10%)::ITEM_CODE`09=`20JPI$_NODENAME X`09ITEM_LIST(10%)::BUF_LEN`09`09=`20NODENAME_SIZE X`09ITEM_LIST(10%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::NODENAME) X`09ITEM_LIST(10%)::RET_ADR`09`09=`20LOC(GETJPI_BLOCK::NODENAME_LEN) X X`09ITEM_LIST(11%)::ITEM_CODE`09=`20JPI$_NODE_CSID X`09ITEM_LIST(11%)::BUF_LEN`09`09=`204% X`09ITEM_LIST(11%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::NODE_CSID) X`09ITEM_LIST(11%)::RET_ADR`09`09=`20NULL X X`09ITEM_LIST(12%)::ITEM_CODE`09=`20JPI$_NODE_VERSION X`09ITEM_LIST(12%)::BUF_LEN`09`09=`20NODE_VERSION_SIZE X`09ITEM_LIST(12%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::NODE_VERSION) X`09ITEM_LIST(12%)::RET_ADR`09`09=`20LOC(GETJPI_BLOCK::NODE_VERSION_LEN) X X`09ITEM_LIST(13%)::ITEM_CODE`09=`20JPI$_PID X`09ITEM_LIST(13%)::BUF_LEN`09`09=`204% X`09ITEM_LIST(13%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::PID) X`09ITEM_LIST(13%)::RET_ADR`09`09=`20NULL X X`09ITEM_LIST(14%)::ITEM_CODE`09=`20JPI$_PRCNAM X`09ITEM_LIST(14%)::BUF_LEN`09`09=`20PRCNAM_SIZE X`09ITEM_LIST(14%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::PRCNAM) X`09ITEM_LIST(14%)::RET_ADR`09`09=`20LOC(GETJPI_BLOCK::PRCNAM_LEN) X X`09ITEM_LIST(15%)::ITEM_CODE`09=`20JPI$_SITESPEC X`09ITEM_LIST(15%)::BUF_LEN`09`09=`204% X`09ITEM_LIST(15%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::SITESPEC) X`09ITEM_LIST(15%)::RET_ADR`09`09=`20NULL X X`09ITEM_LIST(16%)::ITEM_CODE`09=`20JPI$_TERMINAL X`09ITEM_LIST(16%)::BUF_LEN`09`09=`20TERMINAL_SIZE X`09ITEM_LIST(16%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::JTERMINAL) X`09ITEM_LIST(16%)::RET_ADR`09`09=`20LOC(GETJPI_BLOCK::TERMINAL_LEN) X X`09ITEM_LIST(17%)::ITEM_CODE`09=`20JPI$_TT_ACCPORNAM X`09ITEM_LIST(17%)::BUF_LEN`09`09=`20TT_ACCPORNAM_SIZE X`09ITEM_LIST(17%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::TT_ACCPORNAM) X`09ITEM_LIST(17%)::RET_ADR`09`09=`20LOC(GETJPI_BLOCK::TT_ACCPORNAM_LEN) X X`09ITEM_LIST(18%)::ITEM_CODE`09=`20JPI$_TT_PHYDEVNAM X`09ITEM_LIST(18%)::BUF_LEN`09`09=`20TT_PHYDEVNAM_SIZE X`09ITEM_LIST(18%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::TT_PHYDEVNAM) X`09ITEM_LIST(18%)::RET_ADR`09`09=`20LOC(GETJPI_BLOCK::TT_PHYDEVNAM_LEN) X X`09ITEM_LIST(19%)::ITEM_CODE`09=`20JPI$_UAF_FLAGS X`09ITEM_LIST(19%)::BUF_LEN`09`09=`204% X`09ITEM_LIST(19%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::UAF_FLAGS) X`09ITEM_LIST(19%)::RET_ADR`09`09=`20NULL X X`09ITEM_LIST(20%)::ITEM_CODE`09=`20JPI$_UIC X`09ITEM_LIST(20%)::BUF_LEN`09`09=`204% X`09ITEM_LIST(20%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::UIC) X`09ITEM_LIST(20%)::RET_ADR`09`09=`20NULL X X`09ITEM_LIST(21%)::ITEM_CODE`09=`20JPI$_USERNAME X`09ITEM_LIST(21%)::BUF_LEN`09`09=`20USERNAME_SIZE X`09ITEM_LIST(21%)::BUF_ADR`09`09=`20LOC(GETJPI_BLOCK::USERNAME) X`09ITEM_LIST(21%)::RET_ADR`09`09=`20LOC(GETJPI_BLOCK::USERNAME_LEN) X X`09ITEM_LIST(22%)::END_LIST`09=`20NULL X X`09SYS_STATUS`20=`20SYS$GETJPI(,,,`20ITEM_LIST()`20BY`20REF,,,) X`09CALL`20LIB$STOP(SYS_STATUS`20BY`20VALUE)`20IF`20(SYS_STATUS`20<>`20SS$_NORM VAL) X X`09SYS_STATUS`20=`20CR_Policy(GETJPI_BLOCK,`20TRIAL_KEY::INDEX_KEY) X X X`09%SBTTL`20"GetKeyPhrase" X`20GetKeyPhrase: X`09!+ X`09!`20Check`20the`20return`20value`20of`20CR_Policy.`20If`20it`20is`20SS$_ABO VRT, X`09!`20exit`20the`20program`20with`20SS$_NORMAL`20(the`20user`20is`20not`20to V`20be`20challenged). X`09!`20Otherwise,`20access`20the`20challenge/response`20password`20file`20and V`20retrieve`20 X`09!`20the`20key`20phrase.`20Close`20the`20file`20when`20done. X`09!- X`09SELECT`20SYS_STATUS X`09CASE`20SS$_ABORT`09`09`09`09!No`20C/R`20pasword X`09`20`20`20EXIT`20PROGRAM`20SS$_NORMAL`09`09`09!Let`20the`20user`20go X`09CASE`20SS$_NORMAL`09`09`09`09!C/R`20password`20exists X`09`20`20`20WHEN`20ERROR`20IN X`09`20`20`20`20`20`20OPEN_ATTEMPT_COUNT`20=`20NULL X`09`20`20`20`20`20`20OPEN`20KEY_PHRASE_FILENAM`20FOR`20INPUT`20AS`20FILE`20#KP VF_CHAN,`09`26 X`09`09ORGANIZATION`20INDEXED`20FIXED,`09`09`09`09`26 X`09`09ACCESS`20READ,`09`09`09`09`09`09`26 X`09`09ALLOW`20MODIFY,`09`09`09`09`09`09`26 X`09`09MAP`20KPF_MAP,`09`09`09`09`09`09`26 X`09`09PRIMARY`20KEY`20KEY_PHRASE_REC::INDEX_KEY X`09`20`20`20`20`20`20GET`20#KPF_CHAN,`20KEY`20#0%`20EQ`20TRIAL_KEY::INDEX_KEY, V`20REGARDLESS X`09`20`20`20`20`20`20CLOSE`20#KPF_CHAN X`09`20`20`20USE X`09`20`20`20`20`20`20SELECT`20ERR X`09`20`20`20`20`20`20CASE`205%`09`09`09`09!Can't`20find`20file`20or`20account V X`09`09CALL`20LIB$STOP(VMSSTATUS`20BY`20VALUE)`09!Some`20msg`20might`20be`20goo Vd X`09`20`20`20`20`20`20CASE`20138%`09`09`09`09!File`20is`20locked X`09`09IF`20(OPEN_ATTEMPT_COUNT`20<`20MAX_OPEN_ATTEMPTS) X`09`09THEN`09`09`09`09`09!Try`20a`20few`20times`20more X`09`09`20`20`20OPEN_ATTEMPT_COUNT`20=`20OPEN_ATTEMPT_COUNT`20+`201% X`09`09`20`20`20SLEEP`202% X`09`09`20`20`20RETRY X`09`09ELSE`09`09`09`09`09!Give`20up`20and`20signal X`09`09`20`20`20CALL`20LIB$STOP(VMSSTATUS`20BY`20VALUE) X`09`09END`20IF X`09`20`20`20`20`20`20CASE`20155%`09`09`09`09!Record`20not`20found X`09`09IF`20(TRIAL_KEY::INDEX_KEY`20<>`20DEFAULT_KEY) X`09`09THEN`09`09`09`09!Haven't`20tried`20default`20yet X`09`09`20`20`20TRIAL_KEY::INDEX_KEY`20=`20DEFAULT_KEY`09!Assign`20default X`09`09`20`20`20RETRY`09`09`09`09!Try`20again X`09`09ELSE`09`09`09`09!NO`20DEFAULT_KEY????? X`09`09`20`20`20CALL`20LIB$STOP(VMSSTATUS`20BY`20VALUE)`09!Give`20up`20and`20si Vgnal X`09`09END`20IF X`09`20`20`20`20`20`20CASE`20ELSE X`09`09EXIT`20HANDLER X`09`20`20`20`20`20`20END`20SELECT X`09`20`20`20END`20WHEN X`09CASE`20ELSE`09`09`09`09!Some`20error`20in`20CR_Policy X`09`20`20`20CALL`20LIB$STOP(SYS_STATUS`20BY`20VALUE)`20`09`09!Signal`20stop X`09END`20SELECT X X X`09%SBTTL`20"FormChallenge" X`20FormChallenge: X`09!+ X`09!`20First,`20randomly`20determine`20the`20number`20of`20characters`20we`20a Vre`20 X`09!`20going`20to`20ask`20for.`20This`20number`20is`20bounded`20by`20CHLNG_CHA VRS_MAX X`09!`20and`20CHLNG_CHARS_MIN. X`09!- X`09CHALLENGE_CHARS`20=`20INT((CHLNG_CHARS_MAX+1%)`09`09`09`26 X`09`09`09-`20RND*((CHLNG_CHARS_MAX+1%)-CHLNG_CHARS_MIN))`09 X`09!+ X`09!`20Use`20random`20function`20to`20select`20offsets`20to`20key`20phrase`20t Vhat`20are`20to X`09!`20be`20returned`20by`20the`20user.`20Store`20these`20offsets`20in`20CHALL VENGE`20and`20the`20 X`09!`20characters`20there`20in`20CORRECT_RESPONSE. X`09!- X`09FOR`20CHALLENGE_LOOP`20=`201%`20TO`20CHALLENGE_CHARS X`09`20`20`20CHALLENGE(CHALLENGE_LOOP)`20=`20RND`20*`20(KEY_PHRASE_REC::KEY_PHR VASE_LEN) X`09`20`20`20INPUT_PROMPT`20=`20INPUT_PROMPT`20+`20NUM$(CHALLENGE(CHALLENGE_LOO VP)) X`09`20`20`20CORRECT_RESPONSE`20=`20CORRECT_RESPONSE`09`09`09`09`26 X`09`09+`20MID$(KEY_PHRASE_REC::KEY_PHRASE,`09`09`09`26 X`09`09`09CHALLENGE(CHALLENGE_LOOP)+1%,`201%) X`09NEXT`20CHALLENGE_LOOP X X X`09%SBTTL`20"ChallengeUser" X`20ChallengeUser: X`09!+ X`09!`20Open`20a`20channel`20to`20SYS$COMMAND`20and`20prompt`20the`20user`20wit Vh`20the`20offsets. X`09!`20The`20user`20will`20have`20MAX_CHALLENGE_LINES`20input`20lines`20to`20e Vnter`20the X`09!`20correct`20response.`20Any`20one`20of`20these`20input`20lines`20may`20co Vntain`20the`20correct X`09!`20response;`20it`20is`20entirely`20up`20to`20the`20user`20to`20decide`20w Vhen`20they`20want`20to X`09!`20enter`20the`20correct`20response.`20All`20MAX_CHALLENGE_LINES`20input V`20lines`20will X`09!`20be`20read`20before`20matching`20against`20CORRECT_RESPONSE.`20This`20in Vtroduces X`09!`20an`20additional`20random`20element`20to`20confound`20line`20monitors. X`09!- X`09SYS_STATUS`20=`20SYS$ASSIGN('SYS$COMMAND',`20QIO_CHAN,,,) X`09CALL`20LIB$STOP(SYS_STATUS`20BY`20VALUE)`20IF`20(SYS_STATUS`20<>`20SS$_NORM VAL) X X`09PROMPT_BUF::ST127`20=`20SP X`09INPUT_TIMEOUT`20=`20INPUT_TIMEOUT_VALUE X`09ITEM_LIST_SIZE`20=`20QIO_ITEM_LIST_SIZE X`09QIO_FUNC`20=`20IO$_READVBLK`20OR`20IO$M_EXTEND X X`09ITEM_LIST(0%)::ITEM_CODE`20=`09TRM$_MODIFIERS X`09ITEM_LIST(0%)::BUF_LEN`20=`09NULL X`09ITEM_LIST(0%)::BUF_ADR`20=`09(TRM$M_TM_ESCAPE`20OR`20TRM$M_TM_NORECALL) X`09ITEM_LIST(0%)::RET_ADR`20=`09NULL X X`09ITEM_LIST(1%)::BUF_LEN`20=`09NULL X`09ITEM_LIST(1%)::ITEM_CODE`20=`09TRM$_ESCTRMOVR X`09ITEM_LIST(1%)::BUF_ADR`20=`09ESC_OVR_BUF X`09ITEM_LIST(1%)::RET_ADR`20=`09NULL X X`09ITEM_LIST(2%)::BUF_LEN`20=`09NULL X`20`20`20`20`20`20`20`09ITEM_LIST(2%)::ITEM_CODE`20=`09TRM$_PROMPT X`09ITEM_LIST(2%)::BUF_ADR`20=`09LOC(PROMPT_BUF) X`09ITEM_LIST(2%)::RET_ADR`20=`09NULL X X`09ITEM_LIST(3%)::BUF_LEN`09`09=`20NULL X`09ITEM_LIST(3%)::ITEM_CODE`09=`20TRM$_TIMEOUT X`09ITEM_LIST(3%)::BUF_ADR`09`09=`20INPUT_TIMEOUT X`09ITEM_LIST(3%)::RET_ADR`09`09=`20NULL X X`09PRINT`20INPUT_PROMPT X`09FOR`20CHALLENGE_LOOP`20=`201%`20TO`20MAX_CHALLENGE_LINES X`09`20`20`20QIO_TXT_RCVD`20=`20SPACE$(USR_RD_BUF_SZ`20+`20ESC_OVR_BUF) X`09`20`20`20SYS_STATUS`20=`20SYS$QIOW(,`09`09`09`09`09`26 X`09`09`09`09QIO_CHAN`20BY`20VALUE,`09`09`09`26 X`09`09`09`09QIO_FUNC`20BY`20VALUE,`09`09`09`26 X`09`09`09`09IOSB`20BY`20REF,,,`09`09`09`09`26 X`09`09`09`09QIO_TXT_RCVD`20BY`20REF,`09`09`09`26 X`09`09`09`09(USR_RD_BUF_SZ`20+`20ESC_OVR_BUF)`20BY`20VALUE,,,`20`26 X`09`09`09`09ITEM_LIST()`20BY`20REF,`09`09`09`26 X`09`09`09`09ITEM_LIST_SIZE`20BY`20VALUE) X X`09`20`20`20IF`20IOSB::IO_STAT`20=`20SS$_TIMEOUT X`09`20`20`20THEN`09`09`09`09`09!TIMEOUT`20expired X`09`09CALL`20SYS$DELPRC(,)`09`09`09!Commit`20suicide X`09`20`20`20END`20IF X`09`20`20`20IF`20(SYS_STATUS`20<>`20SS$_NORMAL) X`09`20`20`20THEN`09`09`09`09`09`09!Some`20error`20occured X`09`20`20`20`20`20`20CALL`20LIB$SIGNAL(SYS_STATUS`20BY`20VALUE) X`09`20`20`20`20`20`20CALL`20LIB$SIGNAL(IOSB::IO_STAT`20BY`20VALUE) X`09`20`20`20`20`20`20CALL`20SYS$DELPRC(,)`09`09`09!Commit`20suicide X`09`20`20`20END`20IF X X`09`20`20`20CHALLENGE_LINE(CHALLENGE_LOOP)`20=`20EDIT$(QIO_TXT_RCVD,`204%) X`09NEXT`20CHALLENGE_LOOP X X X`09%SBTTL`20"VerifyResponse" X`20VerifyResponse: X`09!+ X`09!`20Match`20all`20MAX_CHALLENGE_LINES`20responses`20against`20CORRECT_RESPO VNSE`20and X`09!`20see`20if`20a`20match`20is`20found.`20If`20so,`20let`20the`20user`20go. V`20If`20not,`20terminate`20 X`09!`20their`20process`20'with`20extreme`20prejudice'. X`09! X`09!`20It`20would`20be`20handy`20to`20wire`20in`20a`20call`20to`20the`20securi Vty`20audit`20facility X`09!`20here`20so`20that`20the`20bells`20get`20rung`20on`20the`20security`20con Vsole`20at`20some X`09!`20point. X`09! X`09!`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20****`20NOTE`20**** X`09! X`09!`20Contrary`20to`20most`20VMS`20stuff,`20CASE`20COUNTS!!!!! X`09!- X`09SYS_STATUS`20=`20SS$_ABORT`09`09`09!Presume`20failure X`09FOR`20CHALLENGE_LOOP`20=`201%`20TO`20MAX_CHALLENGE_LINES X`09`20`20`20SYS_STATUS`20=`20SS$_NORMAL`20IF`20CHALLENGE_LINE(CHALLENGE_LOOP) V`20=`20CORRECT_RESPONSE X`09NEXT`20CHALLENGE_LOOP X X`09IF`20(SYS_STATUS`20=`20SS$_NORMAL) X`09THEN`09`09`09`09`09!User`20passed`20the`20test X`09`20`20`20EXIT`20PROGRAM`20SS$_NORMAL`09`09`09!Let`20'em`20go X`09ELSE`09`09`09`09`09!SECURITY`20BREACH`20***** X`09`20`20`20CALL`20SYS$DELPRC(,)`09`09`09`09!Commit`20suicide X`09`20`20`20EXIT`20PROGRAM`20SS$_ABORT`09`09`09!Shouldn't`20get`20here X`09END`20IF X X X X`09%SBTTL`20"General`20Error" X`20GeneralError: X`09!+ X`09!`20Process`20general`20errors`20here X`09!- X`09CALL`20LIB$SIGNAL(VMSSTATUS`20BY`20VALUE) X`09CALL`20SYS$DELPRC(,)`09`09`09`09!Commit`20suicide X X`09END $ call unpack CHALLENGE_RESPONSE.BAS;1 1970736639 "" 32 5 12 $! $ create 'f' XEncoding`20of`20file`20SYS$SYSDEVICE:`5BPSMODE.TTT`5DCHALRSP_BAS.PCK;1 X`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E V`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E X+@0TYMEIS%5TDU$UIMTQ:,ETS54SDU$KTQEUfMDRA1$TSA5WBE4T.@5PK-SLaul@C@5ag@DP@@Dah@ VmA Xag@HB@EI#Z4c@Dal@8IJc@BE0>@0W@@FmmAA8>g@HP?A<_@AH0)?gL@FCP1@0K@7Bm-@LK@2B0*@eJ@%B@)@DJ@fBm`26@$I@W VBm%@ XTI@TB0$@HI@QBP"@mH@CBP_@$G@8A0f@XG@5A0Z@(F@)A0Y@PF@!A0J@(B@$@mH@8A@d@04@4L@BDm V0@ XA@_@(G@.AmY@eC@ZCP6@XM@;B@MAXS@OC@;@mS@*CPNA,S@F@F@4A@CG0P@T@@FGmS@me@IG02AA$QI@Hm>A0_@>G@ V@B XHm@,I6#.J/*-2+N: XT9mH./##$_H$;N`26S:WB6_7$2$INf'#N)_,;g#Q.8/1HWe'48XZ:T9X(O!#FD<'+=W,>WA-95_+K% V$+QX X1g,d*16XWQ%A+Z>+B+#J6Fd?.UDN VZP0_ X.6_1:_E4`26W?-.TRNT=%=4KW<04Q_BGMH8OW;/X=/BZ3+?VWJI?e8UN6efPT7fZXAC)d4#!0O_<_' V#6'- XC?OVL-84fZX)++TgGK`26VT<.3Q;0?:3#AE%/7fG'ND()0%BN;UX(>/"S7%Af4'0QCB>35>KV?+m6< V:/5% XR2!'%RA==<)f+ZCH9N$*=/m>g>(R+6@R.C)Z?KS?g>(R+VRNYS,N2%)_O?*4*=O_(Xf$K(/GWUZ5VC V>? XA%)_O_f7m3*YPd;*XfT%)_O_U)U;Z>P!`26"5QUP_/HU)U;JM_X+KAA=WP_O?5-U;36<'4-B:;=*R+ V6?!$ X-B:;1)J-ZfICK(/'_UZ5V7VI9ZK(/GWUZ5`26O/+H(m>ge*R+6?55B:;E)J-Z?'Q6D0%OL(m>g>U)1 VTS9X XU;:_fg7?B:;1U%V-+?d+3GVP_ONT)Ud;/Ie8O/B:;E)J-ZC3-V7(d3WKS?gQV7V-OdAg>CH*6J VQd XNM(m>g>+<*6!?Am5'E47;-2+Z?J$6X(m>g>+<*VZ-R4`26WP_O?UgU+6?-F@RA==gCH*6:VK(m>ge_ V.J@- XA$' XgQ6@P,"9+?+9T7?B:;=6@P,"9IOK(/GGM@D+Xg*`26BMC(Z+E47K"F@"U,-I@01d8_X9T7B:;EQC@1 VJ66D X4'OA-+9T7B:;EYC@1J6>WfI94mB:;EYC@1J*$-?J8?YA==<)AmXEm5'9T7B:;=6@P,B@YXA=="(AmX VE9 X-C?E!=/VI-9E47##Fm)*_L"U$7NWK(/WDM@D+HmV7DA-ZI9"6=%>JE47K" V-U XKI_@HP-."MWQg;:?SZPPA==>Bd+.VW1`26+8/>$B>K(/'O$V++8_66_>0B:;9K)5JV?)CCSM0!E473 V'Z5J X6H.?-3/UP_O.5*UPUdW7J(/'?Z5J2dWf)AWT8X:7A>g0<.Sg7!,e83eB9E7fZN'F7fPY%;JN!S8(AA?9Z?E+?UPdg=/(1fJg7119+"UgU;S((55%`26Oe8/`2649C6*< V*6J/:6 X/d,A(2d8JI,?USfXe=8#Q7e:N(;8/FP5!D:N"D!9H2)5@IBVC6/F:AZeG,?X:HOmI)81Q1);"WGGEG V/8 X>EOgP1##"S7Y"GGE'.3(04KGX*YPO54m5$>)#O@DBX)',3d_LdP98*R+6Z0?O@__0feU)U;:?6JO<,H`263m;"T%V-!9V+d4-9 V+8SM XDPNVN(e/ADUdf+Emd2QX"1/W7?(0;N%?'Z2H<,TGA6%0*"K'"e:8=5e8g3Ig`26:H0.D6841;+90#% V"J.e XC.#+J-ZW?7V9!'E1eFeW$*4*ML7Zf#.M_E_*!@212A%;Mm(Z_)K@Hm.5B0="m#TSF!'M8.HU)U;?L2 V`26@ X.m;"T%V-+4,f><-I_ZN4BK5?$I=gW.T?S`26L51.OKA?dQO5?$ISf,;3TZ4P;VgSfE`26I1eQ6@P,B:< Vd0AVI! XfSJ,I_Z>1K,TW!YRO=%K5UX`26L51.OdDQGE.E=TW!Y2P72d*+$LI`2637F@"U1K,TWAYRO=%K5UP`26L51 V.OdDQ?E_ XK:).B2$!.%7T742$XN_d@HVQ#V5Mgm?I_Z>1K,T742$g:KW*dZY2TG;>,QDML4dQO5M-LY(d9M5;YR VLW XDM@D+HmV7DA-ZI9B2$OM?8EV*73$g/KW*73$)N6=Y)(?2/E=T/'ICfK/)NT'I1eQ4@P,"@ZfSD4*%$ VK2 X'<)9G/0Rf(NS:=.e)NT'ISf,;3RQGU.E=TG*3$!.%7T7$3$X.94@P,"mV-$e!`26TR0<+?5I_Z>1K, VT7$3 X$g:KW*d2Y2TG;>,QD=#/E=T7$3$!.%7T79YRL7(7@P,"mV-#:;71H9BMC(Z+S>4<#WX).33$g:KW*; VmLY*#f_6H" VgD7" Xg*OHSF:VgSfNM$X.Hd@HVQg;0?e*;?$OMGZ!%:eZH=L%Ff,.%7 VT_ XNFRLGGM@D+H/f8/8Y%Le2'`26_4e(EV*C1FRO_W.TG"M$)N6=YI8G#W4SfH6P`26:X7')4(3.%7TONL$X.7F@"U@HC'<)9G/ V0R=8 X0P:)/e)geXHSf,;3FQ40#dQO5#CCY(d9M5U`26!D39SC@1J@+O3).S>4e(EV*+LC)7WX9Rf%YHSf,; V3R0W X;"g*+LCY*#f_`26R#g?VgS='FRLW$M@D+(R6>+m?'S>4<#WX)>SC)'>2%:OM$)N6=Y#H:9>V4S='F2 VP72d X*7ZH1eQ6@P,"-?UWRNE:_WGKX2'`26C-0R=VC)7;2%:-F2TG;>,D4L4WX)N"XH=F=%K5QDCY*#f_VJ:4-(':H"!L51.OS)Q+WV*66@H0M5!WCI V`26##F X@"ULOUS!`26AT-5I_Z>1K,TGgM$g:KW*C/F2TG;>,QDM"_K:)N,QD-IeK:).9F2P72d*#PFRLW$M@D+X>:?ZN5=_2'`26?2WX)NBYH=$QSG9!G+Q+#f_@;8>eU@ZCHO9!#XCA:_d VC316 XSMYDgV(>76;-;1/7._e+U+m*6..M934SQ9Q$Z2H<,1'?Z5J2dWf)AS>LM4FEBV_T_QW<;-;;E69/V- V"< X6UWZ0$OSG/OG$#:+;%Z2HT#+QO VTI X.mMX,>A90G@##K=A,;U%V--m?ee'?%QY`26X*#@;21_g/Q?RK'N28ML(->#ORQ(W-G%7Kf36Qg#BJ.TSF V!'M= X9+J-ZW3GJ4T,NJHY>ef`267!mf3;P0>@$'?:6*=Yd>S:F>$$.>!;L2G5Md_`26?YEMJ7, VGAWO*`26EC XP4%XX68(Ng?X%13RKJ*#DG_2()#Lg!O0<9:F(_e*R+VW2P+<*VZ-R4`26#;EB4?6g<;_d?>_75_.GJ6;Ne?K9<%4ZE+?4!!)F80I_`26>3GN934gf-;)>'LI`26##-UW+0- VfHQS2? XZf2'`26f>BK5?$I=.%K5?$I?R./06*+5U,9J>+O)m?I_`26>"Xd55:J6eE9-+?O)AAS>LM+O7VfdCdf2'`26G/0RfE`26IC98"g*+0LY(d9M5UR`264;V.TWIYRL'Od+ V.VAX-5E, XQAH@H0$OMG3VX).R2$IHE7V4Sf%$ICfK/).B2$g72%:JHS"9gO0Jg<=e@+<@ V_/GX XEO>gO0Jg<=gmU<8;=@+817;AV1#/7C,"G_/GXEO>gNmUgm/7C,"G_OG0JO07;A6W+"G_OG0JO07;AV V1# X/'CX%G8ORNmUgm/7C,2C<=gmU<8;=@+817;AV9AV1CK+L7L?#M)G1I,#EO=`26J_F7)Nm V9HL2 XYPX,BT2T#I,H#3/XVY.f.7@V1D8;!8,"'G_OV13#O4XEOO#B34SfE$IC5_./(':JHSF:VgG_CJGWUZ V5B XVI9d8123W;;N3;Jd_@;<+R+6 V:6JI XWKND:8.C7G->',178deSN38gLg_FMHA31f-;O*K6#:17@_/7J/*=+PZ#AeGDB4?6gBR0T>(%dV< V'f X>T+V1F1=/f>-I_`26gJJ7'178d@;L=T`26CDge?d;CJ'?@" V*-R4`26S XC0!Ve7D6KIHAS9#V.(gP9@H@0:SLM"*?-fL%.Y;)`26LBO;Q Vf36% X>%E$%SF5AfN7%0JLH`26(+X7T6!%0"f%3M49/V-"<6UWZ0$OSd:=/-?UQV:`26-7'DE;`26-'Z2H<, V87?6>9/V X-"<6UWZ0$OSd(<71'?Z5J2dWf)AS>L=T"X$G_#/A,;+31N?UgU;0?@0:SNX: V3/ XJ-Z?3GJVGY<,PH`26@=CF>eeN:)!)f>8?.BT VeegH X/"S%d2$XWIP>aug@,V!@HmFZb@"C0@APP@EDmAAeP@HDPBA(P@KD@CA4P@ND0CA@Q@QDmDALQ@TDPE VAX XQ@WD@FA$Q@ZD0FA0Q@fDmGAB0M@TC@,@@J@HB@!BP:@TN@CCPY@,D@=@02@4T@OEPTALU@!CPUA(L@WEPV VA0 XT@dE@5@8U@d@PD@PK@ABP<@@(W@XA0gAeW@RCmD@@L@@FPmA8W@=E@B@0D@HFP"APX@EF V@#AL XY@6CP%AXY@MFmC@eY@XF@m@0Y@gF0`26AeE@W@mV@LZ@%F@,@DP@'FP*APD@HA@+A8Z@/FP,AHd@3F VP+@X XE@X@0C@ed@9F@$@$E@@D@/A8d@fAP0AHe@CG@1ATe@AT12@HP?A<_@AH0< V.+ XM@YCP5@eL@EC@/@$K@8B0-@XK@5B0,@HK@+Bm)@TJ@gBP'@mI@WBP%@PI@SBm$@8H@KBP"@mH@DB0m V@4 XG@ V@4 X@@9CPgA4N@8E@_A0A@-@0_A$C@2@mmALX@G@0!AXX@JF0"A0J@RF@%ADY@NF@$AAP#3@Hm>A0_@>G@@BHm@B2>H!3g'0Y/#8=B3R.-"//60S_QRWF8W6OIm7COROT'4C6P07EV:-@(%TDZFImf/f;HA($TDZ VAe X7`261_.d38ORWG-dKRO4`26mD*NNOWZB1992+/m@Dm@76B(72ED+/9B:"d;--U+7ZB0JVUVERI4WL@ V/E2d:9 X93,$>E,*E(USPP9E8*,:PD@RPBUG''KM!8>@.gPVLd V2(5`26 X!+45ATF$$Jg#Vd9#D05CYJM/GZ-%/M@PYP<>HA-g*W7Am+1"L+51YYXW856IIg$@VZ'D$P5199RSHN VOW XZQ/7+#KRL5eB+'KYI+8>51EI23'0:9RV2J._d9"D99SX.e6()d?51EC89SX.e6(U$g*1_d9"$<DR+Y4F-8 VF= X951EC89SH-`26Qd4"d4:8":<51EI23'm"d#`26%;=gfe1589SP. V`26951EI9Q XQ@@HmOA1;57`26;WGW$$'O!Z2"Y3=+#Ke99Sm54;;WGW$@O_BKD_N`26,)69-%KR8X(AI)2;))Z:6_ VfeQ253 X<0YVQYg=+#KeO;fB,ZNfH/N.H9Y/SH_N3JJ_fe!;:Yg8XR%_feQBFZePOWN_L4RE>@/WGW$(!FG424 V4X XY3+#KFX(1A==Q"!F'.@=51ECL48mNNUe`2653743+#KV$!FG"5`26XfYJ=VRg=:WGWXACMND+M1:;# V$,<=+# XKReNMD+/7X.KE_feQ1'SCZ:fVeA>ZVgfeQ1%)KD"5'=N24Egf*#:'SP'9)T3+#KRgNAfYJMN/6"_-Q V@2 X6Z;G@X@m?G>6P2O$`26TQ0C@B@@OR>1>Am=#$_,_@X5C8A@;/Gm-8A8J!*#33%`2675A:A0@TeIEHS V3RL74# Xm=YQd_/W/g;.g/g=6732=g=2Em`26O7=15N`26g>f_YZ?:4RE74gSA2%RJP`26`26%X.)'>5)%J:;= V:5d/W/g;;Y X9g/g9BP3';>8ZGSO?.Od:W_'O`26g/g=67Kg/>6LW*('%;=:%K@M_.;YfJ-/69`26677fg=:-/7+W/ V==5$E3 X`26;>LO%Z.E;3`26>Z'dZO=`26U5.O`26>g/g=6_-g/g=67S/%$RE;W'J!%d1gA5d(;5'U$'K;W'M7 V4>g/g=ZW'= XNAI)119R1gY_S_:>9S,'U:+9S,'O=J/_R1gV)?,7Ie6;XF1'ZM@Hm#-"L_OQ:e$IK3*-P"<YIQV`26!L34%.AUPS$U*"6H6Mg$_U59 X!A<WUGm$< V;2WD XZHTK>>;2d,#%(R);*YRJ;XVUf!J(Q:!2,8'Re)g_,)'mT+@U( VBU X8IM5=?VKQV5(D;=>JJ53,E2d!DNFZPR*O*)B>#$'SPW V`26R#3 X+7-Z+!W$DU'J8/3C.+'9!#IU>;J(.BfG0U2:MFKFWYX=.2*+g=@*+,<(7+I2_1<=O6.MQQ8dX#f1P> VM6 XKVHQ0g_NBY,#eZ1+7,@H0/V823'P*-MT<94m`26g'EWm/`26%f+6BIN'F"57d VL7%";V X-E1))?`26)U?L>@CL48mNNUe`2653743.U#,P+46L-:'!H*m`26)U?L$!EL48P,6D+/OR227;V-5HV VI*YZ5OCY XT1-Y*X?YH"J(Y*X?Y/_UW(BZ`26:6_F_$,BZ$g(LK>)DW*77H6SP V0UP34H X<3PDUm:*KH@:ZZ_?N-X7+EI99S8X(3%J>JZ34*_F20BFZeHVd"57GIY9;f+6"fU"T',3?8S+>U!JTI V0g X5)+8/JT18R;K5))_+M5=?gVENEG.'=NAVM'N$O"$%'J8?(`26J8ORgNAM;,O(-L%F+ZI@HPg=.UdM< V"XW* XSE<79!$+'9!3,"2<:O!7H-/X,VE8Y'GR.g`26GN3JJ3+?<9MR;KF+U)f#-?604H-/6XS:`26+OD;7P V6(.Q%) X+)==7Ed!SD.FO_B13"_CSP,E6fT?SI6<>D/,_ VUfD.E'M_N#S0*8<0@g>D`26K'MZE)'Z.TC_;:J2_?70U!JT_NWC VI23' Xm"d#`26%;=>6?$WQB;`26X7_C!?BW6LI%fLK6UI,7;d(=+:BUP3T7>38C7J(Q:!24DE!O).Y1+FC4M V==DDRE X4LMB?LMQQ8CU_-Rf#O:FOWA*+.m@(+)==;4"$<MLA1VX7Q=O%X3;+(W-UT_N VO823 X'@+)77_KU!3C599SP`26NWZ>6Mg$_>;ZZ_?N>!KO_B7"3`26/+06ZZ_?dH/!!L3$P>Y?$P V>/:e XC!?BW*B'G*33'mLf.4<-d+-* VCPRg>D X`26S57%"_B'=S,;/H5U_NO$$'OA1;57`26;O6e1!"QMI$?+:22RC!?BW*B'G*33'mLf.4<-d<-d1WU'GF03' VPZ XM#6(E7(O_;FO2_A>*:<0@g>DR+Y4F-8F=9d):U96Mg$_9/*NOLm'O!4ZF-QK.Q V3? X*:@$$'O!9T=f)8'GW46?W4fC!?BW6DE!O!1,8)==_IW1?>U#A*47DE!/!2,-`2667?F"d*8Y6O1.?" V$(:W XH8@H@'GR23'PMY1,9>+:"*#*PY7UT;6_=7E6Z+Oe!MVNR5Cd>KMIL,:5_gTT)NVVW;;Bd#FUdf64FM V`26- X/K,=U%Mg4`268?E:4>FSOHg9-O"D=mX;#(Gg4>H:!0d_DfD*TINVDE:%7*D579Y+.,=:,)=9!G--B+=Yd-J=0"Dg;d,Z/60G36ADY_;US4`26Q;U->8/?:M/%-W'M-OO<(-UX-Od#8%.U90Z#6?W.GW VZ! XIL5.?'M*f??0F:X5>JZ;3RF-KU_NOeMg>D$+Y>F>"PC!?BW.EF03'0f)(V1!+)d?d8QMD>Ke)CPB<< VI, XP<9X2`26Z'/!QV`26Q%19!$+'9!3,"2<:/!+>ZH@HmFZb@3C0@APP@EDmAAeP@HDP VBA X(P@KD@CA4P@ND0CA@Q@QDmDALQ@TDPEAXQ@WD@FA$Q@ZD0FA0Q@fDmGAD0OA@T@AEmPALT@DEP VQA XXT@GE@RA$T@JE0RA0T@MEmSAA,?D@HP?A<_@AH@13BO@.C@;@mN@`26CP9@PN@#C07@4M@ZCP6@mM@WC@5@8L@H VCm1@ XLL@BC0.@$K@8B0-@TK@4B0,@HK@+B@*@eJ@`26BP)@PJ@#Bm(@DJ@gBP'@0I@dBm`26@$I@XB0%@XI V@UB0$@ XHI@QB0#@8H@MB@#@,H@IB@"@eH@FBP!@PH@CBmm@DH@>A@_@,G@:APg@eG@6APf@PG@3APe@@PO@@C@-@0J@eB@$@mH@@B@_@mG@,A@Z@@D@m@@eCP=@HM@LCm<@TL@B VDP0@ X@@X@AF@E@,D@:@m.@@G@7C@(@,X@LFP!AHE@DFm#AFm1Aee@DAmQ@A(-Q@Hm>A0_@>G@ V@B XHm@GVN9%20"(L,8(`26m5-`26;*K-T5;(gSDB)N._XZ/F+;0M;'W9V60!R=`26=3+eKdX4>,PWFS.7 VeG/YY%SU2#?'=_G/Y'';G`266+1:N<_BRHY3-RBPU!4A+'IfCd Vf+J@ X("H!;*`26*N>@03S.D0Im30B+KPBU_SE0m9Q.gNW$`26$03=CS;5XfGgN?'`26d$(U33=CS;5XfG V`26-$d6-BW`26$ X?ETGPDL;+H<;`26<(0-7Qf6I7fL9_A<;CNL;$;N`26<(0Qf1M'2f_->eGS:XCO7OL-W#5f81e/+_S+ V=("P#= X@_m<->.>M-NCKBM6CmC<7/75/9fFVDZ5C".+_3C30"m(*TPP V$N X%;)78QA=Ie;)C1N`260_?gW?`26WM6YQA5S/+_3C4OBQE.gRWf:Q0;:7!)=Z,.C?C)gP4A88M6>.7eCU*N68Cm9'_SZ$YROR5=TZfFVD,GXQ8/_%d7GmW-517`26M/f9 V0GmW X-51?GL(4KGf>FO.VJ939DVfN+%ReX=2e%1/@HmJN!%)gVKS0!UX.$7YXQ(UOHRVJR-26d@.4D/%U.VZTd2<2@7)3LMY?DX;m`26?mAO36,OT.%658FZ7PKM*Y0<2@WC+20T;S`26T?Q'#9YW/M7eLf=.=.g7">#!W)H009>O4S'',);F VM;)O X@/Z+#?OXP?_0SJ?*>?ZPQF`26$g:(3?"GWK%<7`26:G+N'5RIN,N'9Rg'!E!V=mHYERF+35%L?(,4S V1#B:S8 X6SG"fL!?>U>91(/TD8C=_UP-'NOI).d4,D;C0+6:0L9!YXQPTUJHHR'",TG)mRC2<`26WM6YQA5S%Y V,O@E XSVY"W-51/IM2`26`26gJFf6#>YXQT_0A>;WY`26G;.QZCC$G9`26"-/dJ65gKR2H6/F9>%1+m,6/R0 V>f5;Kf6_m! XI;=7U/_U9U$V3#J<_>K<;`26e-%<`26%eGS.O_N>L#6QTAOIGate@T7Tz $ call unpack CHALRSP_BAS.MFT;1 626665625 "" 33 6 12 $! $ create 'f' X`09! X`09! X`09!`09Copyright`20(c)`201994,`20Peter`20A.`20Smode`20(Vancouver,`20BC) X`09! X`09!`09`09All`20Rights`20Reserved X`09! X`09!Permission`20`20is`20`20hereby`20`20granted`20`20`20to`20`20use,`20`20copy V,`20`20modify,`20`20and X`09!distribute`20`20this`20software`20`20provided`20`20that`20the`20`20above V`20`20copyright X`09!notice`20appears`20in`20`20all`20copies`20and`20that`20`20any`20distributi Von`20be`20for X`09!noncommercial`20purposes. X`20`20`20`20`20`20`20`20! X`09!Peter`20A.`20Smode`20disclaims`20all`20warranties`20with`20regard`20to`20t Vhis X`09!software.`20`20In`20no`20event`20shall`20Peter`20A.`20Smode`20be`20liable V`20for`20any`20 X`09!special,`20indirect,`20`20or`20consequential`20damages`20or`20any`20damage Vs`20 X`09!whatsoever`20`20resulting`20from`20loss`20of`20use,`20data,`20or`20profits V`20arising`20 X`09!out`20of`20or`20in`20connection`20with`20the`20use`20or`20performance`20of V`20this`20software. X`09! X`09!++ X`09! X`09!`20EQUATED`20SYMBOLS: X`09! X`09DECLARE`20LONG`20CONSTANT`09`09`09`09`09`09`26 X`09`20`20`20FALSE`20=`200%,`09`09`09!Logical`20FALSE`09`09`09`26 X`09`20`20`20NULL`20=`200%,`09`09`09!Zero`09`09`09`09`26 X`09`20`20`20TRUE`20=`20NOT(FALSE),`09`09!Logical`20TRUE`09`09`09`26 X`09`20`20`20ACCOUNT_SIZE`20=`208%,`09`09`09`09`09`09`26 X`09`20`20`20CLINAME_SIZE`20=`2039%,`09`09`09`09`09`09`26 X`09`20`20`20NODENAME_SIZE`20=`2012%,`09`09!Need`20only`20be`206`20or`20somethi Vng`09`26 X`09`20`20`20NODE_VERSION_SIZE`20=`2012%,`09`09`09`09`09`26 +-+-+-+-+-+-+-+- END OF PART 2 +-+-+-+-+-+-+-+-