From 2eb49c13b79a6c522ad237fefbb4dcc4f3d8f44b Mon Sep 17 00:00:00 2001 From: Roberto Sancho Villa Date: Sun, 25 Mar 2018 10:17:35 -0700 Subject: [PATCH] i650: New IBM 650 Simulator --- I650/650_test.ini | 14 + I650/i650_cdp.c | 733 ++++++++++++++ I650/i650_cdr.c | 556 +++++++++++ I650/i650_cpu.c | 1074 +++++++++++++++++++++ I650/i650_defs.h | 247 +++++ I650/i650_sys.c | 518 ++++++++++ I650/sw/Build_is_from_decks.ini | 101 ++ I650/sw/Build_soap_from_source.ini | 28 + I650/sw/is.dck | 1100 +++++++++++++++++++++ I650/sw/is_example_1_src.txt | 68 ++ I650/sw/is_main_src.txt | 1145 ++++++++++++++++++++++ I650/sw/is_run.ini | 48 + I650/sw/is_set_loopbox.txt | 77 ++ I650/sw/is_sys_load_src.txt | 97 ++ I650/sw/is_trace_src.txt | 59 ++ I650/sw/soapII.dck | 1400 +++++++++++++++++++++++++++ I650/sw/soapII_condensed_card.dck | 173 ++++ I650/sw/soap_and_run.ini | 78 ++ I650/sw/soap_example_1_src.txt | 39 + I650/sw/soap_listing.txt | 1449 ++++++++++++++++++++++++++++ I650/sw/soap_src.txt | 1399 +++++++++++++++++++++++++++ README.md | 2 + Visual Studio Projects/I650.vcproj | 335 +++++++ Visual Studio Projects/Simh.sln | 18 + doc/i650_doc.doc | Bin 0 -> 215552 bytes makefile | 15 +- 26 files changed, 10772 insertions(+), 1 deletion(-) create mode 100644 I650/650_test.ini create mode 100644 I650/i650_cdp.c create mode 100644 I650/i650_cdr.c create mode 100644 I650/i650_cpu.c create mode 100644 I650/i650_defs.h create mode 100644 I650/i650_sys.c create mode 100644 I650/sw/Build_is_from_decks.ini create mode 100644 I650/sw/Build_soap_from_source.ini create mode 100644 I650/sw/is.dck create mode 100644 I650/sw/is_example_1_src.txt create mode 100644 I650/sw/is_main_src.txt create mode 100644 I650/sw/is_run.ini create mode 100644 I650/sw/is_set_loopbox.txt create mode 100644 I650/sw/is_sys_load_src.txt create mode 100644 I650/sw/is_trace_src.txt create mode 100644 I650/sw/soapII.dck create mode 100644 I650/sw/soapII_condensed_card.dck create mode 100644 I650/sw/soap_and_run.ini create mode 100644 I650/sw/soap_example_1_src.txt create mode 100644 I650/sw/soap_listing.txt create mode 100644 I650/sw/soap_src.txt create mode 100644 Visual Studio Projects/I650.vcproj create mode 100644 doc/i650_doc.doc diff --git a/I650/650_test.ini b/I650/650_test.ini new file mode 100644 index 00000000..53acb3a0 --- /dev/null +++ b/I650/650_test.ini @@ -0,0 +1,14 @@ + +cd sw + +; set debug -n debug.txt +; set debug stdout +; set cpu debug=cmd;data;detail + +; set throttle 11k + +do Build_soap_from_source.ini +do soap_and_run.ini soap_example_1_src.txt 1000 +do Build_is_from_decks.ini ntr lbox +do is_run.ini is_example_1_src.txt + diff --git a/I650/i650_cdp.c b/I650/i650_cdp.c new file mode 100644 index 00000000..5b10c3fa --- /dev/null +++ b/I650/i650_cdp.c @@ -0,0 +1,733 @@ +/* i650_cdp.c: IBM 650 Card punch. + + Copyright (c) 2018, Roberto Sancho + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + ROBERTO SANCHO BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + This is the standard card punch. + + These units each buffer one record in local memory and signal + ready when the buffer is full or empty. The channel must be + ready to recieve/transmit data when they are activated since + they will transfer their block during chan_cmd. All data is + transmitted as BCD characters. + +*/ + +#include "i650_defs.h" +#include "sim_card.h" + +#define UNIT_CDP UNIT_ATTABLE | MODE_026 + +/* std devices. data structures + + cdp_dev Card Punch device descriptor + cdp_unit Card Punch unit descriptor + cdp_reg Card Punch register list + cdp_mod Card Punch modifiers list +*/ + +uint32 cdp_cmd(UNIT *, uint16, uint16); +t_stat cdp_srv(UNIT *); +t_stat cdp_reset(DEVICE *); +t_stat cdp_attach(UNIT *, CONST char *); +t_stat cdp_detach(UNIT *); +t_stat cdp_help(FILE *, DEVICE *, UNIT *, int32, const char *); +const char *cdp_description(DEVICE *dptr); +t_stat cdp_set_wiring (UNIT *uptr, int32 val, CONST char *cptr, void *desc); +t_stat cdp_show_wiring (FILE *st, UNIT *uptr, int32 val, CONST void *desc); +t_stat cdp_set_echo (UNIT *uptr, int32 val, CONST char *cptr, void *desc); +t_stat cdp_show_echo (FILE *st, UNIT *uptr, int32 val, CONST void *desc); + +UNIT cdp_unit[] = { + {UDATA(cdp_srv, UNIT_CDP, 0), 600}, // unit 0 is the printing mechanism of 407 + {UDATA(cdp_srv, UNIT_CDP, 0), 600}, + {UDATA(cdp_srv, UNIT_CDP, 0), 600}, + {UDATA(cdp_srv, UNIT_CDP, 0), 600}, +}; + +MTAB cdp_mod[] = { + {MTAB_XTD | MTAB_VUN, 0, "FORMAT", "FORMAT", &sim_card_set_fmt, &sim_card_show_fmt, NULL, "Set card format"}, + {MTAB_XTD | MTAB_VUN, 0, "WIRING", "WIRING", &cdp_set_wiring, &cdp_show_wiring, NULL, "Set card punch/print control panel Wiring"}, + {MTAB_XTD | MTAB_VUN, 0, "ECHO", "ECHO", &cdp_set_echo, &cdp_show_echo, NULL, "Set console printout for punched cards"}, + {MTAB_XTD | MTAB_VUN, 1, "PRINT", "PRINT", &cdp_set_echo, &cdp_show_echo, NULL, "Set printout on CDP0 unit for punched cards"}, + {0} +}; + +DEVICE cdp_dev = { + "CDP", cdp_unit, NULL, cdp_mod, + 4, 8, 15, 1, 8, 8, + NULL, NULL, NULL, NULL, &cdp_attach, &cdp_detach, + &cdp_dib, DEV_DISABLE | DEV_DEBUG, 0, crd_debug, + NULL, NULL, &cdp_help, NULL, NULL, &cdp_description +}; + +static struct card_wirings wirings[] = { + {WIRING_8WORD, "8WORD"}, + {WIRING_SOAP, "SOAP"}, + {WIRING_IS, "IS"}, + {0, 0}, +}; + +// vars where card is encoded for punching +char card_buf[120]; +int card_nbuf; + +// vars where card is encoded for printing +char card_lpt[120]; +int card_nlpt; + +void encode_char(int cPunch, int cLpt) +{ + if ((cPunch) && (card_nbuf < 80)) { + card_buf[card_nbuf++] = cPunch; + } + if ((cLpt) && (card_nlpt < 120)) { + card_lpt[card_nlpt++] = cLpt; + } +} + +void encode_lpt_spc(int nSpaces) +{ + while (nSpaces-- >0) encode_char(0, 32); +} + +void encode_lpt_str(const char * buf) +{ + while (*buf) encode_char(0, *buf++); +} + +void encode_lpt_num(t_int64 d, int l) +{ + char s[20]; + int i,n; + + d=AbsWord(d); + for (i=9;i>=0;i--) { + n = (int) (d % 10); + d = d / 10; + s[i] = '0' + n; + } + s[10] = 0; + encode_lpt_str(&s[10-l]); +} + +#define wf_NNNNNNNNNNs 0 +#define wf_NN_NNNN_NNNNs 1 +#define wf_sN_NNNNNNN_NN 3 +#define wf_sN_NNN_NNN_NNN 4 + +void encode_lpt_word(t_int64 d, int NegZero, int wFormat) +{ + int n; + int neg=0; + + if (d < 0) {d=-d; neg=1;} else if ((d==0) && (NegZero)) neg=1; + if (wFormat == wf_NN_NNNN_NNNNs) { + n = Shift_Digits(&d, 2); encode_lpt_num(n, 2); encode_lpt_spc(1); + n = Shift_Digits(&d, 4); encode_lpt_num(n, 4); encode_lpt_spc(1); + n = Shift_Digits(&d, 4); encode_lpt_num(n, 4); + encode_char(0, neg ? '-':' '); + } else if (wFormat == wf_sN_NNNNNNN_NN) { + encode_char(0, neg ? '-':'+'); + n = Shift_Digits(&d, 1); encode_lpt_num(n, 1); encode_lpt_spc(1); + n = Shift_Digits(&d, 7); encode_lpt_num(n, 7); encode_lpt_spc(1); + n = Shift_Digits(&d, 2); encode_lpt_num(n, 2); + } else if (wFormat == wf_sN_NNN_NNN_NNN) { + encode_char(0, neg ? '-':'+'); + n = Shift_Digits(&d, 1); encode_lpt_num(n, 1); encode_lpt_spc(1); + n = Shift_Digits(&d, 3); encode_lpt_num(n, 3); encode_lpt_spc(1); + n = Shift_Digits(&d, 3); encode_lpt_num(n, 3); encode_lpt_spc(1); + n = Shift_Digits(&d, 3); encode_lpt_num(n, 3); + } else { // default: wFormat == wf_NNNNNNNNNNs + encode_lpt_num(d,10); + encode_char(0, neg ? '-':' '); + } +} + +// set pch_word[10] with encoded word d. +// if d negative, sign on last digit (units digit) +// if bSetHiPuch=1, set HiPunch on last digit. +// if bSetHiPuch=2, set HiPunch on last digit and on second digit. +void sprintf_word(char * pch_word, t_int64 d, int NegZero, int bSetHiPuch) +{ + int i,n,neg, hi; + + if (d < 0) { + neg = 1; + d = -d; + } else if ((d == 0) && (NegZero)) { + neg = 1; // Negative Zero -> also puncho X(11) on last 0 digit + } else { + neg = 0; + } + for (i=9;i>=0;i--) { + hi = 0; + if ((i==1) && (bSetHiPuch == 2)) hi = 1; // Set Hi Punch on second digit + if ((i==9) && (bSetHiPuch > 0)) hi = 1; // Set Hi Punch on last digit (units digit) + n = (int) (d % 10); + d = d / 10; + n = n + hi * 10; + if ((neg == 1) && (i==9)) n = n + 20; // Set negative punch X(11) on last digit + pch_word[i] = digits_ascii[n]; + } + pch_word[10] = 0; +} + +void encode_pch_str(const char * buf) +{ + while (*buf) { + encode_char(*buf++, 0); + } +} + + +void encode_8word_wiring(int addr) +{ + // encode 8 numerical words per card + // get the decoded data from drum at addr + int i, NegZero; + t_int64 d; + char pch_word[20]; + + // punch card + for(i=0;i<8;i++) { + ReadDrum(addr + i, &d, &NegZero); + sprintf_word(pch_word, d, NegZero, 0); + encode_pch_str(pch_word); + } + + // print out card contents + // 8 words in format NN NNNN NNNN+ + for(i=0;i<8;i++) { + ReadDrum(addr + i, &d, &NegZero); + encode_lpt_word(d, NegZero, wf_NN_NNNN_NNNNs); + encode_lpt_spc(1); + } +} + +void encode_soap_wiring(int addr) +{ + // encode soap card simulating soap control panel wiring for 533 + // from SOAP II manual at http://www.bitsavers.org/pdf/ibm/650/24-4000-0_SOAPII.pdf + // storage in output block + // Word 1977: | <- Location -> | Alphabetic + // 1978: | <- Data Addr -> | Alphabetic + // 1979: | <- Inst Addr -> | Alphabetic + // +-+-+-|-+-+-|-+-|-+-| + // 1980: | Op Code |DTg|ITg| Alphabetic + // +-+-+-|-+-+-|-+-|-+-| + // 1981: | <- Remarks -> | Alphabetic + // 1982: | <- Remarks -> | Alphabetic + // 1983: |<-Assembled Instr->| + // +-+-|-+-+-+-|-+-+-|-| + // 1984: | |N N N N| |T| N N N N=Location, T=Type (0 if Blank) + // 1985: | |N N N N| N N N N=Card Number + // 1986: |a|b|c|d|e|f|g|h|i|j| a = 0/8 (for non blank type) + // b = 0/8 (negative) + // c = 0/8 (bypass) + // d = 0/8 (punch a) =8 -> do not print Loc op da ir + // e = 0/8 (punch b) =8 -> punch availability table + // f = 0/8 (800X instruction) + // g = 0/8 (blank out L) + // h = 0/8 (blank out D) + // i = 0/8 (blank out I) + // j = 0/8 (blank out OP) + // + // SOAP printout format + // | Sg | Location | OpCode | Data Addr | Tg | Instr Addr | Tg | Remarks | Drum Addr | NN NNNN NNNN[-] (signed word value at this drum addr) + // SOAP punch format (load card, 1 word per card) + // simulates punching over prepunched 1-word load card + // | word1 | nnnn | 24 addr 800? | NNNNNNNNNN[-] | source soap line + // nnnn=card number + // addr=drum address where the word is loaded + // NNNNNNNNNN=word to be loaded at addr, with sign + + char loc[6], data_addr[6], inst_addr[6], OpCode[6], Data_Tag[6], Instr_Tag[6], rem1[6], rem2[6]; + char pch_word[20]; + t_int64 d, instr; + int location, CardNum, ty; + int b_non_blank, neg, b_blk_op, b_blk_i, b_blk_d, b_blk_l, b_800X, b_pch_b, b_pch_a, b_bypass; // punch control flags + int i, sv_card_nbuf, n; + int pat1, pat2; + + word_to_ascii(loc, 1, 5, DRUM[addr + 0]); + word_to_ascii(data_addr, 1, 5, DRUM[addr + 1]); + word_to_ascii(inst_addr, 1, 5, DRUM[addr + 2]); + word_to_ascii(OpCode, 1, 3, DRUM[addr + 3]); + word_to_ascii(Data_Tag, 4, 1, DRUM[addr + 3]); + word_to_ascii(Instr_Tag, 5, 1, DRUM[addr + 3]); + word_to_ascii(rem1, 1, 5, DRUM[addr + 4]); + word_to_ascii(rem2, 1, 5, DRUM[addr + 5]); + instr = DRUM[addr + 6]; + location = (int) ((DRUM[addr + 7] / D4) % D4); + ty = (int) ( DRUM[addr + 7] % 10); + CardNum = (int) ( DRUM[addr + 8] % D4); + d = DRUM[addr + 9]; + b_blk_op = ((int) (d % 10) == 8) ? 1:0; d = d / 10; + b_blk_i = ((int) (d % 10) == 8) ? 1:0; d = d / 10; + b_blk_d = ((int) (d % 10) == 8) ? 1:0; d = d / 10; + b_blk_l = ((int) (d % 10) == 8) ? 1:0; d = d / 10; + b_800X = ((int) (d % 10) == 8) ? 1:0; d = d / 10; + b_pch_b = ((int) (d % 10) == 8) ? 1:0; d = d / 10; + b_pch_a = ((int) (d % 10) == 8) ? 1:0; d = d / 10; + b_bypass = ((int) (d % 10) == 8) ? 1:0; d = d / 10; + neg = ((int) (d % 10) == 8) ? 1:0; d = d / 10; + b_non_blank = ((int) (d % 10) == 8) ? 1:0; d = d / 10; + + // printf("bits %06d%04d%c ", printfw(DRUM[addr + 9])); // to echo the status digits of punched card + + // generate card + if (b_pch_b) { + // punch availability table (pat pseudo-op output) + for(i=0;i<8;i++) { + sprintf_word(pch_word, DRUM[addr + i], 0, 1); + encode_pch_str(pch_word); + } + } else { + if (b_pch_a) { + // punch non generating code card + encode_pch_str("0?0000800?"); // load card + sprintf(pch_word, " %04d", CardNum); // card number + encode_pch_str(pch_word); + encode_pch_str(" "); // two blank words + encode_pch_str(" "); + if (b_non_blank) encode_pch_str("1"); else encode_pch_str(" "); + } else { + // punch generating code card + if (b_800X) { + encode_pch_str("6I1954800?"); // load card for word to be stored in 800X addr + } else { + encode_pch_str("6I1954195C"); // load card for word to be stored in drum + } + sprintf(pch_word, " %04d", CardNum); // card number + encode_pch_str(pch_word); + sprintf(pch_word, "24%04d800?", location);// addr to place the loaded word + encode_pch_str(pch_word); + sprintf_word(pch_word, AbsWord(instr) * (neg ? -1:1), ((neg) && (instr == 0)) ? 1:0, 1); + encode_pch_str(pch_word); + encode_char(ty == 0 ? ' ' : '0'+ty, 0); + } + encode_pch_str(" "); + sv_card_nbuf = card_nbuf; // save pch bufer current pos + encode_pch_str(loc); encode_pch_str(OpCode); + encode_pch_str(data_addr); encode_pch_str(Data_Tag); + encode_pch_str(inst_addr); encode_pch_str(Instr_Tag); + encode_pch_str(rem1); encode_pch_str(rem2); + // convert to lowercase for punching + for (i=sv_card_nbuf;i= 'A') && (card_buf[i] <= 'Z')) + card_buf[i] = card_buf[i] - 'A' + 'a'; + card_buf[card_nbuf] = 0; + } + + // generate printout + if (b_pch_b) { + // print availability table (pat pseudo-op output) + for(i=0; i<4; i++) { + d = DRUM[addr + i*2]; + pat1 = (int) ((d / D4) % D4); + pat2 = (int) ( d % D4); + d = DRUM[addr + i*2 + 1]; + encode_lpt_num(pat1, 4); + encode_lpt_spc(2); + encode_lpt_num(d, 10); + encode_lpt_spc(2); + encode_lpt_num(pat2, 4); + encode_lpt_spc(5); + } + } else if (ty == 1) { + // print coment line + encode_lpt_str("1"); + encode_lpt_spc(14); + encode_lpt_str(loc); encode_lpt_str(OpCode); + encode_lpt_str(data_addr); encode_lpt_str(Data_Tag); + encode_lpt_str(inst_addr); encode_lpt_str(Instr_Tag); + encode_lpt_str(rem1); encode_lpt_str(rem2); + } else { + encode_lpt_spc(1); + encode_lpt_str(loc); + encode_lpt_spc(2); encode_char(0, neg ? '-':' '); encode_lpt_spc(1); + encode_lpt_str(OpCode); encode_lpt_spc(3); + encode_lpt_str(data_addr); encode_lpt_str(Data_Tag); encode_lpt_spc(2); + encode_lpt_str(inst_addr); encode_lpt_str(Instr_Tag); encode_lpt_spc(5); + encode_lpt_str(rem1); encode_lpt_str(rem2); + if (b_pch_a) { + // blank op -> do not print location and intruction + if (b_bypass) { + encode_lpt_spc(4); + encode_lpt_str("BYPASS"); + } + } else { + encode_lpt_spc(4); + if (b_blk_l) { encode_lpt_spc(4); } else encode_lpt_num(location, 4); + encode_lpt_spc(2); encode_char(0, neg ? '-':' '); encode_lpt_spc(1); + d = instr; + n = Shift_Digits(&d, 2); // operation code (2 digits) + if (b_blk_op) { encode_lpt_spc(2); } else encode_lpt_num(n, 2); + encode_lpt_spc(2); + n = Shift_Digits(&d, 4); // data addr (4 digits) + if (b_blk_d) { encode_lpt_spc(4); } else encode_lpt_num(n, 4); + encode_lpt_spc(2); + n = Shift_Digits(&d, 4); // instr addr (4 digits) + if (b_blk_i) { encode_lpt_spc(4); } else encode_lpt_num(n, 4); + encode_lpt_spc(1); + if (b_blk_l) encode_lpt_str("BLANK L"); else + if (b_blk_op) encode_lpt_str("BLANK OP"); else + if (b_blk_d) encode_lpt_str("BLANK D"); else + if (b_blk_i) encode_lpt_str("BLANK I"); + } + } +} + +void encode_is_wiring(int addr) +{ + // encode Floationg Decimal Interpretive System (IS) card simulating control panel wiring for 533 as described + // in manual at http://www.bitsavers.org/pdf/ibm/650/28-4024_FltDecIntrpSys + // storage in output block + // +-+-+-+-+-+-|-+-+-+-| + // Word 1977: |Trc|N N N N| | Location + // 1978: | |N N N N| | Word Count + // +-------------------+ + // 1979: | word1 | + // 1980: | word2 | + // 1981: | word3 | + // 1982: | word4 | + // 1983: | word5 | + // 1984: | word6 | + // +-------------------+ + // 1985: | Problem Number | + // 1986: | |N N N N| | Card Number + // +-------------------+ + // + // if word at 1977 is negative, a load card is punched, but no printout is generated + // if word at 1977 is positive, regular output card format is used on punch + // Column: 1 2 3 4 | 5 6 | 7 8 9 | 10 | 11 | 12 - 21 | 22 | 23 - 32 | 33 | 34 - 43 | 44 | 45 - 54 | 55 | 56 - 65 | 66 | 67 - 76 | 77 78 79 | 80 + // Card | | | Location | wc | s1 | Word1 | s2 | Word2 | s3 | Word3 | s4 | Word4 | s5 | Word5 | s6 | Word6 | Problem | + // Num | if location is > 9999, will use column 6 Num + // wordN is printed as +N NNNNNNN NN (IT sci notation) + // + // IT printout format for non tracing cards: + // | Location | Word1 | Word2 | Word3 | Word4 | Word5 | Word6 + // wordN is printed as +N NNNNNNN NN (IT sci notation) + // + // IT printout format for tracing cards (Trc digits in word 1977 are non-zero): + // | Location | Word1 | Word2 | Word3 | Word4 | Word5 | Word6 + // word1 to 3 are printed as +N NNN NNN NNN (IT instruction format) + // word4 to 6 are printed as +N NNNNNNN NN (IT sci notation) + // + int i, NegZero; + t_int64 d; + int CardNum, loc, wc, PrNum, bTraceCard; + char pch_word[20]; + int bSetHiPunch; + + bSetHiPunch = (DRUM[addr] < 0) ? 2 : 0; // first bSetHiPunch is 2 if word negative (signals a load card must be punched) + + loc = (int) ((DRUM[addr] / D4) % D4); + CardNum = (int) ((DRUM[addr+9] / D4) % D4); + wc = (int) ((DRUM[addr+1] / D4) % D4); + PrNum = (int) ( DRUM[addr+8]); + bTraceCard = (DRUM[addr] / D8) > 0 ? 1 : 0; // if to higher digits are nonzero -> is a trace card + + if (bSetHiPunch) { + // punch a load card + for(i=0;i<8;i++) { + ReadDrum(addr + i, &d, &NegZero); + if ((i==0) && (d < 0)) d = -d; // get absolute value for DRUM[addr + 0] + sprintf_word(pch_word, d, NegZero, bSetHiPunch); + if (bSetHiPunch==2) bSetHiPunch = 1; // if bSetHiPunch is 2 change it to bSetHiPunch = 1 + encode_pch_str(pch_word); + } + } else { + // punch a card using output format + if (loc < 1000) { + sprintf(pch_word, "%04d %03d%01d", CardNum, loc, wc); + } else { + sprintf(pch_word, "%04d %04d%01d", CardNum, loc, wc); + } + encode_pch_str(pch_word); + for(i=0;i<6;i++) { + if (i 999) PrNum = 999; + sprintf(pch_word, "%03d", PrNum); + encode_pch_str(pch_word); + } + + if (bSetHiPunch) { + // load card, does not generate printout + // mark lpt output buffer to not print + if (card_nlpt == 0) { + card_lpt[card_nlpt++] = 0; + } + } else { + // not load card -> do normal printout for card + if (wc > 6) wc = 6; + if (loc < 1000) { + encode_lpt_spc(1); + encode_lpt_num(loc, 3); + } else { + encode_lpt_num(loc, 4); + } + for(i=2;i<2+wc;i++) { + encode_lpt_spc(2); + ReadDrum(addr + i, &d, &NegZero); + if ((bTraceCard) && (i<5)) { + // if printing a trace card, first three words are printed as intructions (+N NNN NNN NNN) + encode_lpt_word(d, NegZero, wf_sN_NNN_NNN_NNN); + } else { + // print numbers adding spaces to ease reading IT floating point format (+N NNNNNNN NN) + encode_lpt_word(d, NegZero, wf_sN_NNNNNNN_NN); + } + } + } +} + +/* Card punch routine */ +uint32 cdp_cmd(UNIT * uptr, uint16 cmd, uint16 addr) +{ + int i,c,h; + struct _card_data *data; + uint32 wiring; + + /* Are we currently tranfering? */ + if (uptr->u5 & URCSTA_BUSY) + return SCPE_BUSY; + + /* Test ready */ + if ((uptr->flags & UNIT_ATT) == 0) { + sim_debug(DEBUG_CMD, &cdp_dev, "No cards (no file attached)\r\n"); + return SCPE_NOCARDS; + } + + // copy and translate drum memory words to chars to punch + // using the control panel wiring. + + wiring = (uptr->flags & UNIT_CARD_WIRING); + card_nbuf = card_nlpt = 0; + + if (wiring == WIRING_SOAP) { + // encode soap card simulating soap control panel wiring for 533 (gasp!) + encode_soap_wiring(addr); + } else if (wiring == WIRING_IS) { + // encode it card + encode_is_wiring(addr); + } else if (wiring == WIRING_8WORD) { + // encode 8 words per card + encode_8word_wiring(addr); + } else { + // default wiring: decode up to 8 numerical words per card + encode_8word_wiring(addr); + } + + if ((card_nlpt == 1) && (card_lpt[0] == 0)) { + // skip this line printout & echo + } else { + /* echo? */ + encode_char(0, 13); encode_char(0, 10); + if (uptr->flags & UNIT_CARD_ECHO) { + for (i=0;iflags & UNIT_CARD_PRINT) { + // printout will be directed to file attached to CDP0 unit, if any + if (cdp_unit[0].flags & UNIT_ATT) { + sim_fwrite(&card_lpt, 1, card_nlpt, cdp_unit[0].fileref); + } + } + } + + // trim right spaces for printing punch card + card_buf[card_nbuf] = 0; + sim_debug(DEBUG_DETAIL, &cpu_dev, "Punch Card: %s\r\n", card_buf); + + /* punch the cards */ + data = (struct _card_data *)uptr->up7; + for (i=0; i<80; i++) { + if (i >= card_nbuf) { + c = 32; + } else { + c = card_buf[i]; + } + if (c == 32) { + // no punch + data->image[i] = 0; + } else { + // punch char + h = ascii_to_hol[c & 127]; + data->image[i] = h; + } + } + sim_punch_card(uptr, NULL); + sim_debug(DEBUG_CMD, &cdp_dev, "PUNCH\r\n"); + uptr->u5 |= URCSTA_BUSY; + uptr->u4 = 0; + + uptr->u5 &= ~URCSTA_BUSY; + + return SCPE_OK; + +} + +/* Handle transfer of data for card punch */ +t_stat +cdp_srv(UNIT *uptr) { + + // I/O is synchronous. No need to set up srv + return SCPE_OK; +} + + +/* Set card read/punch control panel wiring */ +t_stat cdp_set_wiring (UNIT *uptr, int32 val, CONST char *cptr, void *desc) +{ + int f; + + if (uptr == NULL) return SCPE_IERR; + if (cptr == NULL) return SCPE_ARG; + for (f = 0; wirings[f].name != 0; f++) { + if (strcmp (cptr, wirings[f].name) == 0) { + uptr->flags = (uptr->flags & ~UNIT_CARD_WIRING) | wirings[f].mode; + return SCPE_OK; + } + } + return SCPE_ARG; +} + +/* Show card read/punch control panel wiring */ +t_stat cdp_show_wiring (FILE *st, UNIT *uptr, int32 val, CONST void *desc) +{ + int f; + + for (f = 0; wirings[f].name != 0; f++) { + if ((uptr->flags & UNIT_CARD_WIRING) == wirings[f].mode) { + fprintf (st, "%s wiring", wirings[f].name); + return SCPE_OK; + } + } + fprintf (st, "invalid control panel wiring (%d)", uptr->flags & UNIT_CARD_WIRING); + return SCPE_OK; +} + +/* Set card read/punch echo to console */ +t_stat cdp_set_echo (UNIT *uptr, int32 val, CONST char *cptr, void *desc) +{ + int u = (uptr - cdp_unit); + t_stat r; + int num; + + if (uptr == NULL) return SCPE_IERR; + if (cptr == NULL) { + num = 1; // no param means set (=1) + } else { + num = (int) get_uint (cptr, 10, 1, &r); + if (r != SCPE_OK) return r; + } + if (u == 0) { + sim_printf("this option cannot be set for CDP0\r\n"); + return SCPE_ARG; + } + switch(val) { + case 0: + if (num== 0) { + uptr->flags = uptr->flags & ~UNIT_CARD_ECHO; + } else { + uptr->flags = uptr->flags | UNIT_CARD_ECHO; + } + break; + case 1: + if (num== 0) { + uptr->flags = uptr->flags & ~UNIT_CARD_PRINT; + } else { + uptr->flags = uptr->flags | UNIT_CARD_PRINT; + } + break; + } + return SCPE_OK; +} + +/* Show card read/punch control panel wiring */ +t_stat cdp_show_echo (FILE *st, UNIT *uptr, int32 val, CONST void *desc) +{ + switch(val) { + case 0: + fprintf (st, (uptr->flags & UNIT_CARD_ECHO) ? "ECHO": "No ECHO"); + break; + case 1: + fprintf (st, (uptr->flags & UNIT_CARD_PRINT) ? "PRINT": "No PRINT"); + break; + } + return SCPE_OK; +} + +t_stat +cdp_attach(UNIT * uptr, CONST char *file) +{ + t_stat r; + + if ((r = sim_card_attach(uptr, file)) != SCPE_OK) + return r; + uptr->u5 = 0; + + return SCPE_OK; +} + +t_stat +cdp_detach(UNIT * uptr) +{ + return sim_card_detach(uptr); +} + +t_stat +cdp_help(FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) +{ + fprintf (st, "%s\r\n\r\n", cdp_description(dptr)); + fprintf (st, "The 533 Card Read-punch writes cards using the selected\r\n"); + fprintf (st, "control panel wiring to set the format of punched cards.\r\n"); + fprintf (st, "It is possible to simulate a 407 accounting machine for\r\n"); + fprintf (st, "printing using SET CDP1 PRINT=1. In this case, punched\r\n"); + fprintf (st, "cards will be printed to file attached to unit 0 (CDP0).\r\n"); + fprintf (st, "SET CDP ECHO=1 will display on console cards printout.\r\n"); + + sim_card_attach_help(st, dptr, uptr, flag, cptr); + fprint_set_help(st, dptr); + fprint_show_help(st, dptr); + return SCPE_OK; +} + +const char * +cdp_description(DEVICE *dptr) +{ + return "533 Card Punch + 407 Accounting for printing"; +} + + diff --git a/I650/i650_cdr.c b/I650/i650_cdr.c new file mode 100644 index 00000000..3295a0b2 --- /dev/null +++ b/I650/i650_cdr.c @@ -0,0 +1,556 @@ +/* i650_cdr.c: IBM 650 Card reader. + + Copyright (c) 2018, Roberto Sancho + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + ROBERTO SANCHO BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + This is the standard card reader. + + These units each buffer one record in local memory and signal + ready when the buffer is full or empty. The channel must be + ready to recieve/transmit data when they are activated since + they will transfer their block during chan_cmd. All data is + transmitted as BCD characters. + +*/ + +#include "i650_defs.h" +#include "sim_card.h" + +#define UNIT_CDR UNIT_ATTABLE | UNIT_RO | MODE_026 + + +/* std devices. data structures + + cdr_dev Card Reader device descriptor + cdr_unit Card Reader unit descriptor + cdr_reg Card Reader register list + cdr_mod Card Reader modifiers list +*/ + +uint32 cdr_cmd(UNIT *, uint16, uint16); +t_stat cdr_srv(UNIT *); +t_stat cdr_reset(DEVICE *); +t_stat cdr_attach(UNIT *, CONST char *); +t_stat cdr_detach(UNIT *); +t_stat cdr_help(FILE *, DEVICE *, UNIT *, int32, const char *); +const char *cdr_description(DEVICE *dptr); +t_stat cdr_set_wiring (UNIT *uptr, int32 val, CONST char *cptr, void *desc); +t_stat cdr_show_wiring (FILE *st, UNIT *uptr, int32 val, CONST void *desc); + +UNIT cdr_unit[] = { + {UDATA(cdr_srv, UNIT_CDR, 0), 300}, // 4 readers. Unit 0 not used + {UDATA(cdr_srv, UNIT_CDR, 0), 300}, + {UDATA(cdr_srv, UNIT_CDR, 0), 300}, + {UDATA(cdr_srv, UNIT_CDR, 0), 300}, +}; + +MTAB cdr_mod[] = { + {MTAB_XTD | MTAB_VUN, 0, "FORMAT", "FORMAT", &sim_card_set_fmt, &sim_card_show_fmt, NULL, "Set card format"}, + {MTAB_XTD | MTAB_VUN, 0, "WIRING", "WIRING", &cdr_set_wiring, &cdr_show_wiring, NULL, "Set card read control panel Wiring"}, + {0} +}; + +DEVICE cdr_dev = { + "CDR", cdr_unit, NULL, cdr_mod, + 4, 8, 15, 1, 8, 8, + NULL, NULL, NULL, NULL, &cdr_attach, &sim_card_detach, + &cdr_dib, DEV_DISABLE | DEV_DEBUG, 0, crd_debug, + NULL, NULL, &cdr_help, NULL, NULL, &cdr_description +}; + +static struct card_wirings wirings[] = { + {WIRING_8WORD, "8WORD"}, + {WIRING_SOAP, "SOAP"}, + {WIRING_IS, "IS"}, + {0, 0}, +}; + + +// decode digit 0-9 read from card to get value and X(11) and Y(12) punch state (minus/HiPunch) +// return -1 if not a digit number +int decode_digit(char c1, int * HiPunch, int * NegPunch) +{ + int i,n; + + *HiPunch = *NegPunch = 0; + // N is 0..9 or ?A..I (0..9 with Y(12) High Punch set) + // or !J..R (0..9 with X(11) Minus Punch set). + // or &S..Z# (0..9 with both X(11) and Y(12) Punch set). + + if (c1 == 32) return 0; // space read as zero + for (i=0; i<40; i++) { + if (c1 == digits_ascii[i]) { + n = i % 10; + i = i / 10; + *HiPunch = (i & 1); + *NegPunch = (i >> 1); + return n; + } + } + return -1; // not a valid digit +} + +// get 10 digits word from buf, with sign. return 1 if HiPunch set on any digit +int decode_8word_wiring(char * buf, int addr) +{ + // decode up to 8 numerical words per card + // input card + // NNNNNNNNNN ... 8 times + // N is 0..9 or ?A..I (0..9 with Y(12) High Punch set) + // or !J..R (0..9 with X(11) Minus Punch set). + // or &S..Z# (0..9 with both X(11) and Y(12) Punch set). + // If last digit of word has X(11) punch whole word is set as negative value + // If N is a space, a 0 is assumed + // put the decoded data in drum at addr (if addr < 0 -> do not store in drum) + // return 1 if any colum has Y(12) hi-punch set + int c1,c2,wn,eor,iCol; + int HiPunch, hip; + int NegPunch, NegZero; + int nDigits; + t_int64 d; + + NegZero = 0; // flag set if negative zero is read + HiPunch = 0; // set to 1 if Y(12) high punch found + eor = 0; // signals end of card record + iCol = 0; // current read colum in card + for (wn=0;wn<8;wn++) { // one card generates 8 words in drum mem + d = 0; + nDigits=0; // number of digits + while (1) { + c1 = buf[iCol++]; + if (c1 < ' ') {eor = 1; break;} // end of card + c2 = decode_digit(c1, &hip, &NegPunch); + if (hip) HiPunch = 1; // if any column has Hi Punch Y(12) set, signal it + if (c2 < 0) c2 = 0; // nondigits chars interpreted as zero + d = d * 10 + c2; + nDigits++; + if (nDigits == 10) { + // end of word + if (NegPunch) { // has last digit a minus X(11) punch set? + d = -d; // yes, change sign of word read + if (d == 0) NegZero=1; // word read is minus zero + } + break; + } + } + if (nDigits == 0) break; // no well-formed word read -> terminate card processing + if (addr >= 0) WriteDrum(addr++, d, NegZero); // store word read from card into drum + if (eor) break; // end of card sensed -> terminate card processing + + } + return HiPunch; +} + + +t_int64 decode_num_word(char * buf, int nDigits, int bSpaceIsZero) +{ + t_int64 d; + int i,c; + + d = 0; + for (i=0;i '9')) { + d = -1; // not a number + break; + } + d = d * 10 + c - '0'; + } + if (d < 0) { + // not a number -> return all 9's + d = 0; + for (i=0;i | Alphabetic + // 1952: | <- Data Addr -> | Alphabetic + // 1953: | <- Inst Addr -> | Alphabetic + // +-+-+-|-+-+-|-+-|-+-| + // 1954: | Op Code |DTg|ITg| Alphabetic + // +-+-+-|-+-+-|-+-|-+-| + // 1955: | <- Remarks -> | Alphabetic + // 1956: | <- Remarks -> | Alphabetic + // +-+-+-+-+-+-|-+-+-+-| + // 1957: | |N N N N| L Absolute Part + // 1958: | |N N N N| D Absolute Part + // 1959: | |N N N N| I Absolute Part + // 1960: | |T b n| T=Type (0 if Blank), b=0/8 (for non blank type), n=0/8 (for negative) + // + int ty,neg; + + DRUM[addr + 0] = decode_alpha_word(&buf[42], 5); // Location (5 chars) + DRUM[addr + 1] = decode_alpha_word(&buf[50], 5); // Data Addr (5 chars) + DRUM[addr + 2] = decode_alpha_word(&buf[56], 5); // Inst Addr (5 chars) + DRUM[addr + 3] = decode_alpha_word(&buf[47], 3) * D4 + // OpCode (3 chars only) + decode_alpha_word(&buf[55], 1) * 100 + // Data Addr Tag (1 char only) + decode_alpha_word(&buf[61], 1); // Instr Addr Tag (1 char only) + DRUM[addr + 4] = decode_alpha_word(&buf[62], 5); // Remarks + DRUM[addr + 5] = decode_alpha_word(&buf[67], 5); // Remarks + + DRUM[addr + 6] = decode_num_word(&buf[43], 4, 0); // Absolute Part of location + DRUM[addr + 7] = decode_num_word(&buf[51], 4, 0); // Absolute Part of Data Addr + DRUM[addr + 8] = decode_num_word(&buf[57], 4, 0); // Absolute Part of Instr Addr + + if (buf[40] == '1') {ty = 18; } else + if (buf[40] == '2') {ty = 28; } else {ty = 0; } + neg = (buf[41] == '-') ? 8:0; + + DRUM[addr + 9] = ty * 10 + neg; // |T b n| T=Type (0 if Blank), b=0/8 (for non blank type), n=0/8 (for negative) +} + +int sformat(char * buf, const char * match) +{ + char m,c; + + while(1) { + m = *match++; + if (m == 0) break; + c = *buf++; + if (c == 0) return 0; // end of buf str before end of match string -> return 0 -> buf does not match + if ((m == ' ') && (c == ' ')) continue; + if ((m == 'N') && (c >= '0') && (c <= '9')) continue; + if ((m == '+') && ((c == '+') || (c == '-'))) continue; + return 0; // buf does not match -> return 0 -> buf does not match + } + return 1; // end of match string -> return 1 -> buf matches +} + +void decode_is_wiring(char * buf, int addr) +{ + // decode Floationg Decimal Interpretive System (IS) card simulating control panel wiring for 533 as described + // in manual at http://www.bitsavers.org/pdf/ibm/650/28-4024_FltDecIntrpSys + // input card + // Column: 1 2 3 4 | 5 6 | 7 8 9 | 10 | 11 | 12 - 21 | 22 | 23 - 32 | 33 | 34 - 43 | 44 | 45 - 54 | 55 | 56 - 65 | 66 | 67 - 76 | 77 78 79 | 80 + // Card | | Location | wc | s1 | Word1 | s2 | Word2 | s3 | Word3 | s4 | Word4 | s5 | Word5 | s6 | Word6 | Problem | + // Num | Num + // + // wc = Word Count (space for 1) + // s1 = sign of word 1 (space for +) + // Tr = Tracing identification + // + // Alternate input format to allow system deck loading + // Column: 1 2 | 3 | 4 5 6 | 7 | 8 9 10 11 | 12 | 13 - 24 + // Deck | sp | Card | | NNNN | | NN NNNN NNNN + // Num | | Num | + // + // Alternate input format to allow IT source program loading + // Column: 1 2 3 4 | 5 6 | 7 8 9 | 10 | 11 | 12 - 24 + // Card | Blank | Location | | sg | N NNN NNN NNN <- This is an IT instruction (format O1 A B C) + // Num | + // Column: 1 2 3 4 | 5 6 | 7 8 9 | 10 | 11 | 12 - 23 + // Card | Blank | Location | | sg | N NNNNNNN NN <- This is an IT float numeric constant (mantissa and exponent) + // Num | + // Column: 1 2 3 4 | 5 6 | 7 8 9 | 10 - 23 + // Card | Blank | Location | blanks <- This is an IT transfer card (location is start of IT program) + // Num | + // + // storage in input block + // +-+-+-+-+-+-|-+-+-+-| + // Word 1951: | |N N N N| | Location + // 1952: | |N N N N| | Word Count + // +-------------------+ + // 1953: | word1 | + // 1954: | word2 | + // 1955: | word3 | + // 1956: | word4 | + // 1957: | word5 | + // 1958: | word6 | + // +-------------------+ + // 1959: | Problem Number | + // +-------------------+ + // input card + // WordN is 0..9, + // sign is -,+, + // put the decoded data in drum at addr (if addr < 0 -> do not store in drum) + // card number is ignored on reading + + int wc,neg,i; + int NegZero; + t_int64 d; + + if ( sformat(&buf[6], " ")) { + // blank card: read as all zero, one word count + // this allows to have blank cards/comments card as long as the comment starts on column 27 of more + DRUM[addr + 1] = 1 * D4; // word count + } else if ( sformat(&buf[5], " NNN ")) { + // alternate format for loading IT program (IT transfer card) + DRUM[addr + 0] = decode_num_word(&buf[6], 3, 0) * D4; // start location (3 digits) + DRUM[addr + 1] = 0; // word count = 0 + } else if ( sformat(&buf[5], " NNN +N NNN NNN NNN ")) { + // alternate format for loading IT program (IT instruction) + DRUM[addr + 0] = decode_num_word(&buf[6], 3, 0) * D4; // location (3 digits) + DRUM[addr + 1] = 1 * D4; // word count + NegZero = 0; + neg = (buf[10] == '-') ? 1:0; + d = decode_num_word(&buf[11], 1, 0) * 10 * D8 + // O1 + decode_num_word(&buf[13], 3, 0) * 100 * D4 + // O2 or A + decode_num_word(&buf[17], 3, 0) * 1000 + // B + decode_num_word(&buf[21], 3, 0); // C + if (neg) { + d=-d; + if (d==0) NegZero = 1; + } + WriteDrum(addr + 2, d, NegZero); + } else if ( sformat(&buf[5], " NNN +N NNNNNNN NN ")) { + // alternate format for loading IT program (numeric constant in float format) + DRUM[addr + 0] = decode_num_word(&buf[6], 3, 0) * D4; // location (3 digits) + DRUM[addr + 1] = 1 * D4; // word count + NegZero = 0; + neg = (buf[10] == '-') ? 1:0; + d = decode_num_word(&buf[11], 1, 0) * 10 * D8 + // integer part of mantissa + decode_num_word(&buf[13], 7, 0) * 100 + // factional part of mantissa + decode_num_word(&buf[21], 2, 0); // exponent + if (neg) { + d=-d; + if (d==0) NegZero = 1; + } + WriteDrum(addr + 2, d, NegZero); + } else if ( (sformat(&buf[6], " NNNN NN NNNN NNNN ")) || + (sformat(&buf[6], " NNNN NN NNNN ")) || + (sformat(&buf[6], " NNNN NN NNNN ")) || + (sformat(&buf[6], " NNNN NN ")) + ) { + // alternate format for loading main IT system deck + DRUM[addr + 0] = decode_num_word(&buf[7], 4, 0) * D4; // location (4 digits) + DRUM[addr + 1] = 1 * D4; // word count = 1 + DRUM[addr + 2] = decode_num_word(&buf[12], 2, 1) * D8 + // op + decode_num_word(&buf[15], 4, 1) * D4 + // data address + decode_num_word(&buf[20], 4, 1); // instr addr, no negative zero allowed + } else { + // regular IT read/punch format + DRUM[addr + 0] = decode_num_word(&buf[6], 3, 0) * D4; // location (3 digits) + wc = (int) decode_num_word(&buf[9], 1, 1); + if (wc > 6) wc = 6; + DRUM[addr + 1] = wc * D4; // word count + for (i=0;iu5 & URCSTA_BUSY) + return SCPE_BUSY; + + // clear read buffer in drum (where words read from cards will be stored) + for (i=0;i<10;i++) WriteDrum(addr + i, 0, 0); + + /* Test ready */ + if ((uptr->flags & UNIT_ATT) == 0) { + sim_debug(DEBUG_CMD, &cdr_dev, "No cards (no file attached)\r\n"); + return SCPE_NOCARDS; + } + + /* read the cards */ + sim_debug(DEBUG_CMD, &cdr_dev, "READ\r\n"); + uptr->u5 |= URCSTA_BUSY; + + switch(sim_read_card(uptr)) { + case SCPE_EOF: + sim_debug(DEBUG_DETAIL, &cdr_dev, "EOF\r\n"); + uptr->u5 = 0; + return SCPE_NOCARDS; + case SCPE_UNATT: + sim_debug(DEBUG_DETAIL, &cdr_dev, "Not Attached\r\n"); + uptr->u5 = 0; + return SCPE_NOCARDS; + case SCPE_IOERR: + sim_debug(DEBUG_DETAIL, &cdr_dev, "ERR\r\n"); + uptr->u5 = 0; + return SCPE_NOCARDS; + case SCPE_OK: + break; + } + + data = (struct _card_data *)uptr->up7; + + // make local copy of card + buf_len = data->ptr; + if (buf_len == 0) { + buf_len = data->len; + } + for (i=0;i<80;i++) { + if (i < buf_len) { + c = data->cbuff[i]; + if (c < ' ') c = ' '; + buf[i] = c; + } else { + buf[i] = ' '; + } + } + buf[80] = 0; // terminate string + + // trim right spaces for printing read card + for (i=80;i>=0;i--) if (buf[i] > 32) break; + c = buf[i+1]; buf[i+1]=0; + sim_debug(DEBUG_DETAIL, &cpu_dev, "Read Card: %s\r\n", buf); + buf[i+1]=c; + + // check if it is a load card (Y(12) = HiPunch set on any column of card) signales it + if (decode_8word_wiring(buf, -1)) { + uptr->u5 |= URCSTA_LOAD; + } else { + uptr->u5 &= ~URCSTA_LOAD; + } + + wiring = (uptr->flags & UNIT_CARD_WIRING); + + // translate chars read from card and copy to drum memory words + // using the control panel wiring. + if (uptr->u5 & URCSTA_LOAD) { + // load card -> use 8 words per card encoding + decode_8word_wiring(buf, addr); + } else if (wiring == WIRING_SOAP) { + // decode soap card simulating soap control panel wiring for 533 (gasp!) + decode_soap_wiring(buf, addr); + } else if (wiring == WIRING_IS) { + // decode it card + decode_is_wiring(buf, addr); + } else { + // default wiring: decode up to 8 numerical words per card. Can be a load card + decode_8word_wiring(buf, addr); + } + + uptr->u5 &= ~URCSTA_BUSY; + + return SCPE_OK; +} + +/* Handle transfer of data for card reader */ + +t_stat +cdr_srv(UNIT *uptr) { + + // I/O is synchronous. No need to set up svr + return SCPE_OK; +} + +/* Set card read/punch control panel wiring */ +t_stat cdr_set_wiring (UNIT *uptr, int32 val, CONST char *cptr, void *desc) +{ + int f; + + if (uptr == NULL) return SCPE_IERR; + if (cptr == NULL) return SCPE_ARG; + for (f = 0; wirings[f].name != 0; f++) { + if (strcmp (cptr, wirings[f].name) == 0) { + uptr->flags = (uptr->flags & ~UNIT_CARD_WIRING) | wirings[f].mode; + return SCPE_OK; + } + } + return SCPE_ARG; +} + +/* Show card read/punch control panel wiring */ +t_stat cdr_show_wiring (FILE *st, UNIT *uptr, int32 val, CONST void *desc) +{ + int f; + + for (f = 0; wirings[f].name != 0; f++) { + if ((uptr->flags & UNIT_CARD_WIRING) == wirings[f].mode) { + fprintf (st, "%s wiring", wirings[f].name); + return SCPE_OK; + } + } + fprintf (st, "invalid control panel wiring (%d)", uptr->flags & UNIT_CARD_WIRING); + return SCPE_OK; +} + + +t_stat +cdr_attach(UNIT * uptr, CONST char *file) +{ + t_stat r; + + if ((r = sim_card_attach(uptr, file)) != SCPE_OK) + return r; + uptr->u5 = 0; + uptr->u4 = 0; + uptr->u6 = 0; + return SCPE_OK; +} + +t_stat +cdr_help(FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) +{ + fprintf (st, "%s\r\n\r\n", cdr_description(dptr)); + fprintf (st, "The 533 Card Read-punch supported a load mode, and\r\n"); + fprintf (st, "several predefined control panel wiring. Default\r\n"); + fprintf (st, "wiring is up to 8 numeric words per card.\r\n\r\n"); + sim_card_attach_help(st, dptr, uptr, flag, cptr); + fprint_set_help(st, dptr); + fprint_show_help(st, dptr); + return SCPE_OK; +} + +const char * +cdr_description(DEVICE *dptr) +{ + return "533 Card Read-Ounch unit"; +} + + diff --git a/I650/i650_cpu.c b/I650/i650_cpu.c new file mode 100644 index 00000000..952e323f --- /dev/null +++ b/I650/i650_cpu.c @@ -0,0 +1,1074 @@ +/* i650_cpu.c: IBM 650 CPU simulator + + Copyright (c) 2018, Roberto Sancho + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + ROBERTO SANCHO BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + cpu IBM 650 central processor + + From Wikipedia: The IBM 650 Magnetic Drum Data-Processing Machine is one of + IBM's early computers, and the world’s first mass-produced computer. It was + announced in 1953 and in 1956 enhanced as the IBM 650 RAMAC with the + addition of up to four disk storage units. Almost 2,000 systems were + produced, the last in 1962. + + The 650 was a two-address, bi-quinary coded decimal computer (both data and + addresses were decimal), with memory on a rotating magnetic drum. Character + support was provided by the input/output units converting punched card + alphabetical and special character encodings to/from a two-digit decimal + code. + + Rotating drum memory provided 1,000, 2,000, or 4,000 words of memory (a + signed 10-digit number or five characters per word) at addresses 0000 to + 0999, 1999, or 3999 respectively. + + Instructions read from the drum went to a program register (in current + terminology, an instruction register). Data read from the drum went through + a 10-digit distributor. The 650 had a 20-digit accumulator, divided into + 10-digit lower and upper accumulators with a common sign. Arithmetic was + performed by a one-digit adder. The console (10 digit switches, one sign + switch, and 10 bi-quinary display lights), distributor, lower and upper + accumulators were all addressable; 8000, 8001, 8002, 8003 respectively. + + The 650 instructions consisted of a two-digit operation code, a four-digit + data address and the four-digit address of the next instruction. The sign + was ignored on the basic machine, but was used on machines with optional + features. The base machine had 44 operation codes. Additional operation + codes were provided for options, such as floating point, core storage, + index registers and additional I/O devices. With all options installed, + there were 97 operation codes. + + The programmer visible system state for the IBM 650 is: + + CSW <10:1> Console Switches + ACC[0] <10:1> Lower Accumulator register + ACC[1] <10:1> Upper Accumulator register + DIST <10:1> Distributor + OV<0:0> Overflow flag + + The 650 had one basic instuction format. + Intructions are stores as 10 digits (0-9) words in drum memory + + 10 9 | 8 7 6 5 | 4 3 2 1 | 0 + -----+---------+---------+----- + op | Data | Instr | Sign + code | Addr | Addr + + First two digits are opcodes + digits 8-5 is data address referenced by opcode + digits 4-1 is instruction address: address of next instruction + + Instruction support as described in BitSavers 22-6060-2_650_OperMan.pdf + +*/ + +#include "i650_defs.h" + +extern const char * get_opcode_data(int opcode, int * ReadData); + +#define UNIT_V_MSIZE (UNIT_V_UF + 0) +#define UNIT_MSIZE (7 << UNIT_V_MSIZE) +#define UNIT_V_CPUMODEL (UNIT_V_UF + 4) +#define UNIT_MODEL (0x01 << UNIT_V_CPUMODEL) +#define CPU_MODEL ((cpu_unit.flags >> UNIT_V_CPUMODEL) & 0x01) +#define MODEL(x) (x << UNIT_V_CPUMODEL) +#define MEMAMOUNT(x) (x << UNIT_V_MSIZE) +//XXX #define OPTION_FLOAT (1 << (UNIT_V_CPUMODEL + 1)) + +t_stat cpu_ex(t_value * vptr, t_addr addr, UNIT * uptr, int32 sw); +t_stat cpu_dep(t_value val, t_addr addr, UNIT * uptr, int32 sw); +t_stat cpu_reset(DEVICE * dptr); +t_stat cpu_set_size(UNIT * uptr, int32 val, CONST char *cptr, void *desc); +t_stat cpu_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr); +const char *cpu_description (DEVICE *dptr); + +void mem_init(void); +t_int64 DRUM[MAXMEMSIZE] = {0}; +int DRUM_NegativeZeroFlag[MAXMEMSIZE] = {0}; + +// cpu registers +t_int64 ACC[2]; /* lower, upper accumulator. 10 digits (=one word) each*/ +t_int64 DIST; /* ditributor. 10 digits */ +int OV; /* Overflow flag */ +t_int64 CSW = 0; /* Console Switches, 10 digits */ +int CSWProgStop = 1; /* Console programmed stop switch */ +int CSWOverflowStop = 0; /* Console stop on overflow switch */ +t_int64 PR; /* Program Register: hold current instr in execution, 10 digits*/ +int AR; /* Address Register: address references to drum */ +int AccNegativeZeroFlag = 0; // set to 1 if acc has a negative zero +int DistNegativeZeroFlag = 0; // set to 1 if distributor has a negative zero +int IC; // addr of current intr in execution, just for debugginf purposes. IBM 650 has no program counter + +void (*sim_vm_init) (void) = &mem_init; + + +/* CPU data structures + + cpu_dev CPU device descriptor + cpu_unit CPU unit descriptor + cpu_reg CPU register list + cpu_mod CPU modifiers list +*/ + +UNIT cpu_unit = + { UDATA(NULL, MEMAMOUNT(0)|MODEL(0x0), 1000), 10 }; + + +REG cpu_reg[] = { + {DRDATAD(IC, IC, 16, "Current Instruction"), REG_FIT}, + {HRDATAD(DIST, DIST, 64, "Distributor"), REG_VMIO|REG_FIT}, + {HRDATAD(ACCLO, ACC[0], 64, "Lower Accumulator"), REG_VMIO|REG_FIT}, + {HRDATAD(ACCUP, ACC[1], 64, "Upper Accumulator"), REG_VMIO|REG_FIT}, + {HRDATAD(PR, PR, 64, "Program Register"), REG_VMIO|REG_FIT}, + {DRDATAD(AR, AR, 16, "Address Register"), REG_FIT}, + {ORDATAD(OV, OV, 1, "Overflow"), REG_FIT}, + {HRDATAD(CSW, CSW, 64, "Console Switches"), REG_VMIO|REG_FIT}, + {ORDATAD(CSWPS, CSWProgStop, 1, "Console Switch Program Stop"), REG_FIT}, + {ORDATAD(CSWOS, CSWOverflowStop, 1, "Console Switch Overflow Stop"), REG_FIT}, + {NULL} +}; + +MTAB cpu_mod[] = { + {UNIT_MSIZE, MEMAMOUNT(0), "1K", "1K", &cpu_set_size}, + {UNIT_MSIZE, MEMAMOUNT(1), "2K", "2K", &cpu_set_size}, + {UNIT_MSIZE, MEMAMOUNT(2), "4K", "4K", &cpu_set_size}, + {0} +}; + +DEVICE cpu_dev = { + "CPU", &cpu_unit, cpu_reg, cpu_mod, + 1, 10, 12, 1, 10, 64, + &cpu_ex, &cpu_dep, &cpu_reset, NULL, NULL, NULL, + NULL, DEV_DEBUG, 0, dev_debug, + NULL, NULL, &cpu_help, NULL, NULL, &cpu_description +}; + +// return 0 if drum addr invalid +int IsDrumAddrOk(int AR) +{ + if ((AR < 0) || (AR >= (int)MEMSIZE) || (AR >= MAXMEMSIZE)) return 0; + return 1; +} + +// return 0 if write addr invalid +int WriteDrum(int AR, t_int64 d, int NegZero) +{ + if (IsDrumAddrOk(AR) == 0) return 0; + if (d) NegZero = 0; // sanity check on Minus Zero + DRUM[AR] = d; + DRUM_NegativeZeroFlag[AR] = NegZero; + return 1; +} + +// return 0 if drum addr invalid +int ReadDrum(int AR, t_int64 * d, int * NegZero) +{ + if (IsDrumAddrOk(AR) == 0) return 0; + *d = DRUM[AR]; + *NegZero = DRUM_NegativeZeroFlag[AR]; + if (*d) { + *NegZero = 0; // sanity check on Minus Zero + DRUM_NegativeZeroFlag[AR] = 0; + } + return 1; +} + +// return 0 if read addr invalid +int ReadAddr(int AR, t_int64 * d, int * NegZero) +{ + int r; + + if (AR == 8000) {*d = CSW; *NegZero=0; r=1; } else + if (AR == 8001) {*d = DIST; *NegZero=DistNegativeZeroFlag; r=1; } else + if (AR == 8002) {*d = ACC[0]; *NegZero=AccNegativeZeroFlag; r=1; } else + if (AR == 8003) {*d = ACC[1]; *NegZero=AccNegativeZeroFlag; r=1; } else + { r=ReadDrum(AR, d, NegZero); } + if (*d) *NegZero = 0; // sanity check on Minus Zero + return r; +} + +int bAccNegComplement; // flag to signals acc has complemented a negative ass (== sign adjust) + // needed to compute execution cycles taken by the intruction + +// add to accumulator, set Overflow +void AddToAcc(t_int64 a1, t_int64 a0) +{ + OV = 0; AccNegativeZeroFlag = 0; + bAccNegComplement = 0; + + ACC[0] += a0; + ACC[1] += a1; + + // adjust carry from Lower ACC to Upper Acc + if (ACC[0] >= D10) { ACC[0] -= D10; ACC[1]++; } + if (ACC[0] <= -D10) { ACC[0] += D10; ACC[1]--; } + + // ajust sign + if ((ACC[0] > 0) && (ACC[1] < 0)) { + ACC[0] -= D10; ACC[1]++; + bAccNegComplement = 1; + } + if ((ACC[0] < 0) && (ACC[1] > 0)) { + ACC[0] += D10; ACC[1]--; + bAccNegComplement = 1; + } + + // check overflow + if ((ACC[1] >= D10) || (ACC[1] <= -D10)) { + ACC[1] = ACC[1] % D10; + OV=1; + } +} + +// shift acc 1 digit. If direction > 0 to the left, if direction < 0 to the right. +// Return overflow digit (with sign) +int ShiftAcc(int direction) +{ + t_int64 a0, a1; + int neg = 0; + int n, m; + + a1 = ACC[1]; if (a1 < 0) {a1 = -a1; neg = 1;} + a0 = ACC[0]; if (a0 < 0) {a0 = -a0; neg = 1;} + + if (direction > 0) { // shift left + n = Shift_Digits(&a1, 1); // n = Upper Acc high digit shifted out on the left + m = Shift_Digits(&a0, 1); // m = intermediate digit that goes from one acc to the other + a1 = a1 + (t_int64) m; + } else if (direction < 0) { // shift right + m = Shift_Digits(&a1, -1); // m = intermediate digit that goes from one acc to the other + n = Shift_Digits(&a0, -1); // n = Lower Acc units digit shifted out on the right + a0 = a0 + (t_int64) m * (1000000000L); + } + if (neg) {a1=-a1; a0=-a0; n=-n;} + + ACC[0] = a0; + ACC[1] = a1; + if ((neg == 1) && (a0 == 0) && (a1 == 0)) AccNegativeZeroFlag = 1; + return n; +} + + +t_int64 SetDA(t_int64 d, int DA) +{ + int neg = 0; + + int op, nn, IA; + + if (DA < 0) DA=-DA; + if (d < 0) {d=-d; neg=1;} + + // extract parts of word + op = Shift_Digits(&d, 2); + nn = Shift_Digits(&d, 4); // discard current DA + IA = Shift_Digits(&d, 4); + // rebuild word with new DA + d = (t_int64) op * D8 + + (t_int64) DA * D4 + + (t_int64) IA; + if (neg) d=-d; + return d; +} + +// set last 4 digits in d with IA contents +t_int64 SetIA(t_int64 d, int IA) +{ + int neg = 0; + + if (IA < 0) IA=-IA; + if (d < 0) {d=-d; neg=1;} + d = d - ( d % D4); + d = d + (IA % D4); + if (neg) d=-d; + return d; +} + +// set last 2 digits in d with IA contents +t_int64 SetIA2(t_int64 d, int n) +{ + int neg = 0; + + if (n < 0) n=-n; + if (d < 0) {d=-d; neg=1;} + d = d - ( d % 100); + d = d + ( n % 100); + if (neg) d=-d; + return d; +} + +t_stat +sim_instr(void) +{ + t_stat reason; + t_int64 d; + int n, i, sgn, r; + int opcode = 0; + int bReadData, bWriteDrum; + int instr_count = 0; /* Number of instructions to execute */ + const char * opname; /* points to opcode name */ + int PRNegZero; + + int IA; // Instr Address: addr of next inst + int DA; // Data Address; addr of data to be used by current inst + + int DrumAddr; // address where drum is currently positioned (0-49) + int MachineCycle, bBranchTaken, CpuStepsRemaining, WaitForInterlock; + int InterLockCount[3]; // interlock counters + #define IL_RD1 1 // interlock on drum area 01-10/51-60 used in reading for cdr1 + #define IL_WR1 2 // interlock on drum area 27-36/77-86 used in writing for cdp1 + + if (sim_step != 0) { + instr_count = sim_step; + sim_cancel_step(); + } + + reason = 0; + + MachineCycle = CpuStepsRemaining = 0; + bReadData = bWriteDrum = 0; + DrumAddr = 0; + + WaitForInterlock = 0; + InterLockCount[IL_RD1] = InterLockCount[IL_WR1] = 0; + + while (reason == 0) { /* loop until halted */ + + if (sim_interval <= 0) { /* event queue? */ + reason = sim_process_event(); + if (reason != SCPE_OK) { + break; /* process */ + } + } + + /* Main instruction fetch/decode loop */ + sim_interval -= 1; /* count down */ + + // simulate the rotating drum: incr current drum position + DrumAddr = ++DrumAddr % 50; + // if any interlock set, make it expire + if (InterLockCount[IL_RD1]) InterLockCount[IL_RD1]--; + if (InterLockCount[IL_WR1]) InterLockCount[IL_WR1]--; + + if (MachineCycle == 0) { + /* Only check for break points during actual fetch */ + if (sim_brk_summ && sim_brk_test(IC, SWMASK('E'))) { + reason = STOP_IBKPT; + break; + } + // should wait for drum to fetch inst? + if ((AR >= 0) && (AR < (int)MEMSIZE)) { + if ((AR % 50) != DrumAddr) continue; // yes + } + CpuStepsRemaining = 0; // init inst execution + bReadData = bWriteDrum = 0; + MachineCycle = 1; // decode instr + } if (MachineCycle == 2) { + // should wait for cpu to exec the inst? + if (--CpuStepsRemaining > 0) continue; // yes + CpuStepsRemaining = 0; + // should wait for interlock release? + if (WaitForInterlock) { + if (InterLockCount[WaitForInterlock]) continue; // yes + WaitForInterlock = 0; + } + // should wait for drum to fetch data? + if ((bReadData) && (AR >= 0) && (AR < (int)MEMSIZE)) { + if ((AR % 50) != DrumAddr) continue; // yes + } + MachineCycle = 3; // exec instr + } if (MachineCycle == 4) { + // should wait for cpu to exec the inst? + if (--CpuStepsRemaining > 0) continue; // yes + CpuStepsRemaining = 0; + // should wait for drum to store data? + if ((bWriteDrum) && (AR >= 0) && (AR < (int)MEMSIZE)) { + if ((AR % 50) != DrumAddr) continue; // yes + } + MachineCycle = 5; // terminate the instr execution + } + // here, MachineCicly is either 1 (decode), 3 (exec), 5 (exec2) + + if (MachineCycle == 1) { + // fetch current intruction from mem, save current instr addr in IC + IC = AR; + if (0==ReadAddr(AR, &PR, &PRNegZero)) { + reason = STOP_ADDR; + goto end_of_while; + } + // decode inst + d = PR; + opcode = Shift_Digits(&d, 2); // current inste opcode + DA = Shift_Digits(&d, 4); // addr of data used by current instr + IA = Shift_Digits(&d, 4); // addr of next instr + opname = get_opcode_data(opcode, &bReadData); + if (opname == NULL) { + reason = STOP_UUO; // unknown opcode + goto end_of_while; + } + sim_debug(DEBUG_CMD, &cpu_dev, "Exec %04d: %02d %-6s %04d %04d\r\n", IC, opcode, opname, DA, IA); + + if ((opcode == OP_NOOP) && (IC == 0) && (IA == 0)) { + // if loop on NOOP on addr zero -> machine idle -> stop cpu + reason = STOP_HALT; + goto end_of_while; + } + // check if opcode should wait for and already set interlock + if ((opcode == OP_RD) && (InterLockCount[IL_RD1])) { + WaitForInterlock = IL_RD1; + } else if ((opcode == OP_PCH) && (InterLockCount[IL_WR1])) { + WaitForInterlock = IL_WR1; + } else { + WaitForInterlock = 0; + } + + AR = DA; + CpuStepsRemaining = 1; + MachineCycle = 2; + continue; + } + + + if (MachineCycle == 3) { + // fetch data from drum if needed + if (bReadData) { + r = ReadAddr(AR, &DIST, &DistNegativeZeroFlag); + sim_debug(DEBUG_DATA, &cpu_dev, "... Read %04d: %06d%04d%c\r\n", + AR, printfd); + if (r==0) { + reason = STOP_ADDR; + goto end_of_while; + } + } else { + if (0==IsDrumAddrOk(AR)) { // even if no data is fetched from drum, DA addr must be a valid one + sim_debug(DEBUG_DETAIL, &cpu_dev, "Invalid AR addr %d ERROR\r\n", AR); + reason = STOP_ADDR; + goto end_of_while; + } + } + bWriteDrum = 0; // set to 1 by opcode if it is necessary to write dist back to drum + bBranchTaken = 0; // flag if branch is taken + + switch(opcode) { + case OP_NOOP : // No operation + break; + case OP_STOP : // Stop if console switch is set to stop, otherwise continue as a NO-OP + if (CSWProgStop) { + reason = STOP_PROG; + goto end_of_while; + } + break; + // arithmetic + case OP_RAL: // Reset and Add into Lower + case OP_RSL: // Reset and Subtract into Lower + case OP_RAABL: // Reset and Add Absolute into Lower + case OP_RSABL: // Reset and Subtract Absolute into Lower + d = DIST; + if ((opcode == OP_RAABL) || (opcode == OP_RSABL)) d = AbsWord(d); + if ((opcode == OP_RSL) || (opcode == OP_RSABL)) d = -d; + OV = 0; AccNegativeZeroFlag = 0; + ACC[1] = 0; + ACC[0] = d; + sim_debug(DEBUG_DETAIL, &cpu_dev, "... ACC: %06d%04d %06d%04d%c, OV: %d\r\n", + printfa, + OV); + // sequence chart for Add/Substract + // (1) (0..49) (1) (0/1) (2) (0/2) (1) + // Enable Search Data to Wait Dist to Complement Remove A + // Dist Data dist for even Acc Neg Sum interlock + // (1) (1) (1) (0..49) + // Restart IA to AR Enable PR Search next + // Signal Inst + CpuStepsRemaining = 1+1+2+1; + if ((DrumAddr % 2) != 0) CpuStepsRemaining++; // using lower acc -> wait for even + // no need to complement neg sum + break; + case OP_AL: // Add to Lower + case OP_SL: // Subtract from Lower + case OP_AABL: // Add Absolute to lower + case OP_SABL: // Subtract Absolute from lower + if ((opcode == OP_AL) && (ACC[1] == 0) && (ACC[0] == 0) && (AccNegativeZeroFlag) && + (DIST == 0) && (DistNegativeZeroFlag)) { + // special case as stated in Operation manual 22(22-6060-2_650_OperMan.pdf), page 95 + // Acc result on minus zero if acc contains minus zero and AU or AL with a drum + // location that contains minus zero + OV=0; + sim_debug(DEBUG_DETAIL, &cpu_dev, "... ACC: 0000000000 0000000000- (Minus Zero), OV: 0\r\n"); + // acc keeps the minus zero it already has + break; + } + d = DIST; + if ((opcode == OP_AABL) || (opcode == OP_SABL)) d = AbsWord(d); + if ((opcode == OP_SL) || (opcode == OP_SABL)) d = -d; + AddToAcc(0,d); + sim_debug(DEBUG_DETAIL, &cpu_dev, "... ACC: %06d%04d %06d%04d%c, OV: %d\r\n", + printfa, + OV); + CpuStepsRemaining = 1+1+2+1; + if ((DrumAddr % 2) != 0) CpuStepsRemaining++; // using lower acc -> wait for even + if (bAccNegComplement) CpuStepsRemaining += 2; // acc sign change -> need to complement neg sum + break; + case OP_RAU: // Reset and Add into Upper + case OP_RSU: // Reset and Subtract into Upper + case OP_AU: // Add to Upper + case OP_SU: // Substract from Upper + if ((opcode == OP_AU) && (ACC[1] == 0) && (ACC[0] == 0) && (AccNegativeZeroFlag) && + (DIST == 0) && (DistNegativeZeroFlag)) { + // special case as stated in Operation manual 22(22-6060-2_650_OperMan.pdf), page 95 + // Acc result on minus zero if acc contains minus zero and AU or AL with a drum + // location that contains minus zero + OV=0; + sim_debug(DEBUG_DETAIL, &cpu_dev, "... ACC: 0000000000 0000000000- (Minus Zero), OV: 0\r\n"); + // acc keeps the minus zero it already has + break; + } + d = DIST; + if ((opcode == OP_RAU) || (opcode == OP_RSU)) ACC[1] = ACC[0] = 0; + if ((opcode == OP_SU) || (opcode == OP_RSU)) d = -d; + AddToAcc(d,0); + sim_debug(DEBUG_DETAIL, &cpu_dev, "... ACC: %06d%04d %06d%04d%c, OV: %d\r\n", + printfa, + OV); + CpuStepsRemaining = 1+1+2+1; + if ((DrumAddr % 2) == 0) CpuStepsRemaining++; // using upper acc -> wait for odd + if (bAccNegComplement) CpuStepsRemaining += 2; // acc sign change -> need to complement neg sum + break; + // Multiply/divide + case OP_MULT: // Multiply + if ((ACC[1] == 0) && (ACC[0] == 1) && (DIST == 0) && (DistNegativeZeroFlag)) { + // special case as stated in Operation manual 22(22-6060-2_650_OperMan.pdf), page 95 + // Acc result on minus zero if a drum location that contains minus zero + // is multiplied by +1 + OV = 0; + sim_debug(DEBUG_DETAIL, &cpu_dev, "... ACC: 0000000000 0000000000- (Minus Zero), OV: 0\r\n"); + // acc set to minus zero + ACC[1] = ACC[0] = 0; + AccNegativeZeroFlag = 1; + break; + } + OV = 0; + sgn = (DIST < 0) ? -1:1; if (ACC[0] < 0) sgn = -sgn; + d = AbsWord(DIST); + ACC[0] = AbsWord(ACC[0]); + ACC[1] = AbsWord(ACC[1]); + for(i=0;i<10;i++) { + n = ShiftAcc(1); + while (n-- > 0) { + AddToAcc(0, d); + if (OV) {i=10; break;} + } + } + if (sgn < 0) { + ACC[0] = -ACC[0]; + ACC[1] = -ACC[1]; + } + sim_debug(DEBUG_DETAIL, &cpu_dev, "... ACC: %06d%04d %06d%04d%c, OV: %d\r\n", + printfa, + OV); + // sequence chart for Multiply/Divide + // (1) (0..49) (1) (0/1) (20..200) (1) + // Enable Search Data to Wait Mult/Div Remove A + // Dist Data dist for even loop interlock + // (1) (1) (1) (0..49) + // Restart IA to AR Enable PR Search next + // Signal Inst + CpuStepsRemaining = 1+1+1+1; + if ((DrumAddr % 2) != 0) CpuStepsRemaining++; // wait for even + if (i < 0) i=0; if (i>9) i=9; // i holds the number of loops done + CpuStepsRemaining += 20*(i+1); + break; + case OP_DIV: // Divide + case OP_DIVRU: // Divide and reset upper accumulator + if (DIST == 0) { + OV = 1; + sim_debug(DEBUG_DETAIL, &cpu_dev, "Divide By Zero -> OV set \r\n"); + } else if (AbsWord(DIST) <= AbsWord(ACC[1])) { + OV = 1; + sim_debug(DEBUG_DETAIL, &cpu_dev, "Quotient Overflow -> OV set and ERROR\r\n"); + reason = STOP_OV; // quotient overfow allways stops the machine + } else { + OV = 0; + sgn = (DIST < 0) ? -1:1; if (ACC[0] < 0) sgn = -sgn; + d = AbsWord(DIST); + ACC[0] = AbsWord(ACC[0]); + ACC[1] = AbsWord(ACC[1]); + for(i=0;i<10;i++) { + ShiftAcc(1); + while (d <= ACC[1]) { + AddToAcc(-d, 0); + ACC[0]++; + } + } + if (sgn < 0) { + ACC[0] = -ACC[0]; + ACC[1] = -ACC[1]; + } + if (opcode == OP_DIVRU) { + ACC[1] = 0; + } + CpuStepsRemaining = 1+1+1+1; + if ((DrumAddr % 2) != 0) CpuStepsRemaining++; // wait for even + // i holds the number of loops done + if (i < 0) i=0; if (i>9) i=9; + CpuStepsRemaining += 20*(i+1) + 40; + } + sim_debug(DEBUG_DETAIL, &cpu_dev, "... ACC: %06d%04d %06d%04d%c, OV: %d\r\n", + printfa, + OV); + break; + // shift + case OP_SLT: // Shift Left + case OP_SRT: // Shift Right + case OP_SRD: // Shift Right and Round + n = AR % 10; // number of digits to shift + d = 0; + while (n-- > 0) { + d = ShiftAcc((opcode == OP_SLT) ? 1:-1); + } + if (opcode == OP_SRD) { + if (d <= - 5) AddToAcc(0,-1); + if (d >= 5) AddToAcc(0,+1); + OV = 0; + } + sim_debug(DEBUG_DETAIL, &cpu_dev, "... ACC: %06d%04d %06d%04d%c, OV: %d\r\n", + printfa, + OV); + // sequence chart for shift + // (1) (0/1) (2) (1) + // Enable Wait Per Remove A + // Sh count for even shift interlock + // (0/1) (1) (1) (0..49) + // Restart IA to AR Enable PR Search next + // Signal Inst + CpuStepsRemaining = 1+1+1; + if ((DrumAddr % 2) != 0) CpuStepsRemaining++; // wait for even + n = AR % 10; // number of shifts done + if (n > 0) CpuStepsRemaining += 2*n; + if (opcode == OP_SRD) CpuStepsRemaining++; + break; + case OP_SCT : // Shift accumulator left and count + n = 10 - AR % 10; // shift count (nine's complement of unit digit of DA) + if (n==10) n=0; + if (ACC[1] == 0) { + // upper acc is zero -> will have 10 or more shifts + ACC[1] = ACC[0]; + ACC[0] = 10; + if (n) { + OV = 1; // overflow because n <> 0 + } else { + if (Get_HiDigit(ACC[1]) == 0) OV = 1; // overflow because not just 10 shifts + } + } else if (Get_HiDigit(ACC[1]) != 0) { + // no shift will be done + ACC[0] = SetIA2(ACC[0], 0); // replace last two digits by 00 + } else { + while (Get_HiDigit(ACC[1]) == 0) { + ShiftAcc(1); // shift left + if (n==10) { + OV = 1; + break; + } + n++; + } + ACC[0] = SetIA2(ACC[0], n); // replace last two digits by 00 + } + AccNegativeZeroFlag = 0; + sim_debug(DEBUG_DETAIL, &cpu_dev, "... ACC: %06d%04d %06d%04d%c, OV: %d\r\n", + printfa, + OV); + CpuStepsRemaining = 1+1+1; + if ((DrumAddr % 2) != 0) CpuStepsRemaining++; // wait for even + n = AR % 10; // number of shifts done + if (n > 0) CpuStepsRemaining += 2*n; + if (opcode == OP_SRD) CpuStepsRemaining++; + break; + // load and store + case OP_STL: // Store Lower in Mem + case OP_STU: // Store Upper in Mem + if ((ACC[0] == 0) && (ACC[0] == 0) && (AccNegativeZeroFlag)) { + DistNegativeZeroFlag = 1; + } else { + DistNegativeZeroFlag = 0; + } + DIST = (opcode == OP_STU) ? ACC[1] : ACC[0]; + // sequence chart for store + // (1) (0/1) (1) (0..49) (1) (1) (1) + // Enable Wait L/U acc Search Store IA to AR Enable PR + // Dist for even to dist data data + // or odd + CpuStepsRemaining = 1+1+1+1+1; + if ((DrumAddr % 2) == ( (opcode == OP_STU) ? 0:1)) CpuStepsRemaining++; // wait for odd/even + bWriteDrum = 1; // to write DIST in drum at AR + break; + case OP_STD: // store distributor + CpuStepsRemaining = 1+1+1+1; + bWriteDrum = 1; // to write DIST in drum at AR + break; + case OP_STDA: // Store Lower Data Address + n = ((ACC[0] / D4) % D4); // get data addr xxDDDDxxxx from lower Acc + d = SetDA(DIST, n); // replace it in distributor + if ((d == 0) && ((DIST < 0) || ( (DIST == 0) && (DistNegativeZeroFlag) ))) { + // if dist results in zero but was negative or negative zero before replacing digits + // then it is set to minus zero + DistNegativeZeroFlag = 1; + } else { + DistNegativeZeroFlag = 0; + } + DIST = d; + CpuStepsRemaining = 1+1+1+1; + if ((DrumAddr % 2) == 0) CpuStepsRemaining++; // wait for even + bWriteDrum = 1; // to write DIST in drum at AR + break; + case OP_STIA: // Store Lower Instruction Address + n = (ACC[0] % D4); // get inst addr xxyyyyAAAA + d = SetIA(DIST, n); // replace it in distributor + if ((d == 0) && ((DIST < 0) || ( (DIST == 0) && (DistNegativeZeroFlag) ))) { + // if dist results in zero but was negative or negative zero before replacing digits + // then it is set to minus zero + DistNegativeZeroFlag = 1; + } else { + DistNegativeZeroFlag = 0; + } + DIST = d; + CpuStepsRemaining = 1+1+1+1; + if ((DrumAddr % 2) == 0) CpuStepsRemaining++; // wait for even + bWriteDrum = 1; // to write DIST in drum at AR + break; + case OP_LD: // Load Distributor + CpuStepsRemaining = 1+1+1+1; + break; + case OP_TLU : // Table lookup + sim_debug(DEBUG_DATA, &cpu_dev, "... Search DIST: %06d%04d%c\r\n", + printfd); + AR = (DA / 50) * 50; // set AR to start of band based on DA + AR--; n=-1; + while (1) { + int dNegZero; + AR++; n++; + if (0==IsDrumAddrOk(AR)) { + sim_debug(DEBUG_DETAIL, &cpu_dev, "Invalid AR addr %d ERROR\r\n", AR); + reason = STOP_ADDR; + goto end_of_while; + } + if ((AR % 50) > 47) continue; // skip addr 48 & 49 of band that cannot be used for tables + if (0==ReadAddr(AR, &d, &dNegZero)) { // read table argument + reason = STOP_ADDR; + goto end_of_while; + } + if (AbsWord(d) >= AbsWord(DIST)) break; // found + } + // set the result as xxNNNNxxxx in lower acc + ACC[0] = SetDA(ACC[0], DA+n); + sim_debug(DEBUG_DETAIL, &cpu_dev, "... ACC: %06d%04d %06d%04d%c, OV: %d\r\n", + printfa, + OV); + CpuStepsRemaining = 1+1+1+1+1+1; + if ((DrumAddr % 2) == 0) CpuStepsRemaining++; // wait for even + CpuStepsRemaining += n; // number of reads to find the argument searched for + break; + // branch + case OP_BRD1: case OP_BRD2: case OP_BRD3: case OP_BRD4: case OP_BRD5: // Branch on 8 in distributor positions 1-10 + case OP_BRD6: case OP_BRD7: case OP_BRD8: case OP_BRD9: case OP_BRD10: + sim_debug(DEBUG_DATA, &cpu_dev, "... Check DIST: %06d%04d%c\r\n", + printfd); + d = DIST; + n = opcode - OP_BRD10; if (n == 0) n = 10; + while (--n > 0) d = d / 10; + d = d % 10; + if (d == 8) { + IA = AR; // IA (next instr addr) will be taken from AR. Branch taken + sim_debug(DEBUG_DETAIL, &cpu_dev, "Digit is %d -> Branch Taken\r\n", (int32) d); + bBranchTaken = 1; + } else if (d == 9) { + // IA kept as already set. Branch not taken + sim_debug(DEBUG_DETAIL, &cpu_dev, "Digit is %d -> Branch Not Taken\r\n", (int32) d); + } else { + // any other value for tested digit -> stop + sim_debug(DEBUG_DETAIL, &cpu_dev, "Digit is %d -> Branch ERROR\r\n", (int32) d); + reason = STOP_ERRO; + } + CpuStepsRemaining = 1+1; + if (bBranchTaken) CpuStepsRemaining++; + break; + case OP_BRNZU: // Branch on Non-Zero in Upper + sim_debug(DEBUG_DETAIL, &cpu_dev, "... ACC: %06d%04d %06d%04d%c, OV: %d\r\n", + printfa, + OV); + if (ACC[1] != 0) { + sim_debug(DEBUG_DETAIL, &cpu_dev, "Upper ACC not Zero -> Branch Taken\r\n"); + IA = AR; + bBranchTaken = 1; + } + CpuStepsRemaining = 1; + if (bBranchTaken) CpuStepsRemaining++; + if ((DrumAddr % 2) == 0) CpuStepsRemaining++; // wait for even + break; + case OP_BRNZ: // Branch on Non-Zero + sim_debug(DEBUG_DETAIL, &cpu_dev, "... ACC: %06d%04d %06d%04d%c, OV: %d\r\n", + printfa, + OV); + if ((ACC[1] != 0) || (ACC[0] != 0)) { + sim_debug(DEBUG_DETAIL, &cpu_dev, "ACC not Zero -> Branch Taken\r\n"); + IA = AR; + bBranchTaken = 1; + } + CpuStepsRemaining = 1; + if (bBranchTaken) CpuStepsRemaining++; + if ((DrumAddr % 2) != 0) CpuStepsRemaining++; // wait for odd + break; + case OP_BRMIN: // Branch on Minus + sim_debug(DEBUG_DETAIL, &cpu_dev, "... ACC: %06d%04d %06d%04d%c, OV: %d\r\n", + printfa, + OV); + if (AccNegative) { + sim_debug(DEBUG_DETAIL, &cpu_dev, "ACC is Negative -> Branch Taken\r\n"); + IA = AR; + bBranchTaken = 1; + } + CpuStepsRemaining = 1; + if (bBranchTaken) CpuStepsRemaining++; + break; + case OP_BROV: // Branch on Overflow + sim_debug(DEBUG_DETAIL, &cpu_dev, "... Check OV: %d\r\n", OV); + if (OV) { + sim_debug(DEBUG_DETAIL, &cpu_dev, "OV Set -> Branch Taken\r\n"); + IA = AR; + bBranchTaken = 1; + } + CpuStepsRemaining = 1; + if (bBranchTaken) CpuStepsRemaining++; + break; + // Card I/O + case OP_RD : // Read a card + AR = (DA / 50) * 50 + 1; // Read Band is XX01 to XX10 or XX51 to XX60 + { + uint32 r; + int i; + char s[6]; + + r = cdr_cmd(&cdr_unit[1], IO_RDS,AR); + if (r == SCPE_NOCARDS) { + //XXX SCPE_BUSY + reason = STOP_CARD; + goto end_of_while; + } + for (i=0;i<10;i++) { + sim_debug(DEBUG_DETAIL, &cpu_dev, "... Read Card %04d: %06d%04d%c '%s'\r\n", + AR+i, printfw(DRUM[AR+i],DRUM_NegativeZeroFlag[AR+i]), + word_to_ascii(s, 1, 5, DRUM[AR+i])); + } + if (cdr_unit[1].u5 & URCSTA_LOAD) { + sim_debug(DEBUG_DETAIL, &cpu_dev, "... Is a LOAD Card\r\n"); + IA = DA; // load card -> next inste is taken from DA + } + } + // 300 msec read cycle, 270 available for computing + CpuStepsRemaining = 312; // 30 msec / 0.096 msec word time; + // set interlock + InterLockCount[IL_RD1] = 3120; // 300 msec for read card processing + break; + case OP_PCH : // Punch a card + AR = (DA / 50) * 50 + 27; // Read Band is XX27 to XX36 or XX77 to XX86 + { + uint32 r; + int i; + char s[6]; + + for (i=0;i<10;i++) { + sim_debug(DEBUG_DETAIL, &cpu_dev, "... Punch Card %04d: %06d%04d%c '%s'\r\n", + AR+i, printfw(DRUM[AR+i],DRUM_NegativeZeroFlag[AR+i]), + word_to_ascii(s, 1, 5, DRUM[AR+i])); + } + r = cdp_cmd(&cdp_unit[1], IO_WRS,AR); + if (r == SCPE_NOCARDS) { + //XXX SCPE_BUSY + reason = STOP_CARD; + goto end_of_while; + } + } + // 600 msec punch cycle, 565 available for computing + CpuStepsRemaining = 365; // 35 msec / 0.096 msec word time; + // set interlock + InterLockCount[IL_WR1] = 6250; // 600 msec for punch card processing + break; + default: + reason = STOP_UUO; + break; + } + if (reason) goto end_of_while; + if ((OV) && (CSWOverflowStop)) { + reason = STOP_OV; + goto end_of_while; + } + MachineCycle = 4; + if (CpuStepsRemaining > 2) CpuStepsRemaining -= 2; // decrease by 2 as each inst passes at minimum two times by DrumAddr++ + continue; + } /* end of opcode switch */ + + if (MachineCycle == 5) { + if (bWriteDrum) { + sim_debug(DEBUG_DATA, &cpu_dev, "... Write %04d: %06d%04d%c\r\n", + AR, printfd); + if (0==WriteDrum(AR, DIST, DistNegativeZeroFlag)) { + reason = STOP_ADDR; + goto end_of_while; + } + } + MachineCycle = 6; + continue; + } +end_of_while: + // set AR to point to next instr + AR = IA; + + if (instr_count != 0 && --instr_count == 0) { + if (reason == 0) { + IC = AR; + // if cpu not stoped (just stepped) set IC so next inst to be executed is shown. + // if cpu stopped because some error (reason != 0), does not advance IC so instr shown is offending one + reason = SCPE_STEP; + } + return reason; + } + MachineCycle = 0; // ready to process to next instr + + } /* end while */ + + // flush 407 printout + if ((cdp_unit[0].flags & UNIT_ATT) && (cdp_unit[0].fileref)) { + fflush(cdp_unit[0].fileref); + } + + /* Simulation halted */ + + return reason; +} + + +/* Initialize memory to all plus zero */ +void +mem_init() { + int i; + for(i = 0; i < MAXMEMSIZE; i++) + DRUM[i] = DRUM_NegativeZeroFlag[i] = 0; +} + + +/* Reset routine */ +t_stat +cpu_reset(DEVICE * dptr) +{ + + ACC[0] = ACC[1] = DIST = 0; + PR = AR = OV = 0; + AccNegativeZeroFlag = 0; + DistNegativeZeroFlag = 0; + IC = 0; + + sim_brk_types = sim_brk_dflt = SWMASK('E'); + return SCPE_OK; +} + +/* Memory examine */ + +t_stat +cpu_ex(t_value * vptr, t_addr addr, UNIT * uptr, int32 sw) +{ + t_int64 d; + int NegZero; + t_value val; + + if (0==ReadAddr(addr, &d, &NegZero)) { + return SCPE_NXM; + } + if (vptr != NULL) { + if (NegZero) { + val = NEGZERO_value; // val has this special value to represent -0 (minus zero == negative zero) + } else { + val = (t_value) d; + } + *vptr = val; + } + + return SCPE_OK; +} + +/* Memory deposit */ + +t_stat +cpu_dep(t_value val, t_addr addr, UNIT * uptr, int32 sw) +{ + t_int64 d; + if (addr >= MEMSIZE) + return SCPE_NXM; + d = val; + if (val == NEGZERO_value) { + DRUM[addr] = 0; // Minus Zero is coded as val = NEGZERO_value constant + DRUM_NegativeZeroFlag[addr] = 1; + } else { + DRUM[addr] = d; + DRUM_NegativeZeroFlag[addr] = 0; + } + return SCPE_OK; +} + +t_stat +cpu_set_size(UNIT * uptr, int32 val, CONST char *cptr, void *desc) +{ + int mc = 0; + uint32 i; + int32 v; + + v = val >> UNIT_V_MSIZE; + if (v == 0) {v = 1000;} else + if (v == 1) {v = 2000;} else + if (v == 2) {v = 4000;} else v = 0; + if ((v <= 0) || (v > MAXMEMSIZE)) + return SCPE_ARG; + for (i = v-1; i < MEMSIZE; i++) { + if (DRUM[i] != 0) { + mc = 1; + break; + } + } + if ((mc != 0) && (!get_yn("Really truncate memory [N]?", FALSE))) + return SCPE_OK; + cpu_unit.flags &= ~UNIT_MSIZE; + cpu_unit.flags |= val; + MEMSIZE = v; + for (i = MEMSIZE; i < MAXMEMSIZE; i++) + DRUM[i] = DRUM_NegativeZeroFlag[i] = 0; + return SCPE_OK; +} + + +t_stat +cpu_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) { + fprintf (st, "These switches are recognized when examining or depositing in CPU memory:\r\n\r\n"); + fprintf (st, " -c examine/deposit characters, 5 per word\r\n"); + fprintf (st, " -m examine/deposit IBM 650 instructions\r\n\r\n"); + fprintf (st, "The memory of the CPU can be set to 1000, 2000 or 4000 words.\r\n\r\n"); + fprintf (st, " sim> SET CPU nK\r\n\r\n"); + fprint_set_help(st, dptr); + fprint_show_help(st, dptr); + return SCPE_OK; +} + +const char * cpu_description (DEVICE *dptr) { + return "IBM 650 CPU"; +} + diff --git a/I650/i650_defs.h b/I650/i650_defs.h new file mode 100644 index 00000000..dc336331 --- /dev/null +++ b/I650/i650_defs.h @@ -0,0 +1,247 @@ +/* i650_defs.h: IBM 650 simulator definitions + + Copyright (c) 2018, Roberto Sancho + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + ROBERTO SANCHO BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + +#include "sim_defs.h" /* simulator defns */ + +/* Simulator stop codes */ + +#define STOP_HALT 1 /* HALT */ +#define STOP_IBKPT 2 /* breakpoint */ +#define STOP_UUO 3 /* invalid opcode */ +#define STOP_CARD 4 /* Stop on card reader/punch error (no card in hopper, read/punch failure, no cards, stop pressed on cdr/cdp*/ +#define STOP_PROG 5 /* Programmed stop */ +#define STOP_OV 6 /* Overflow stop */ +#define STOP_ERRO 7 /* Error in opcode execution: BRD in witch position tested not 8 or 9, TLU failure */ +#define STOP_ADDR 8 /* Address stop: Store attempt on addr 800X, address out of drum mem */ + + +/* Memory */ +#define MAXMEMSIZE (4000) +#define MEMSIZE cpu_unit.capac /* actual memory size */ +#define MEMMASK (MEMSIZE - 1) /* Memory bits */ + +#define MEM_ADDR_OK(x) (((uint32) (x)) < MEMSIZE) +extern t_int64 DRUM[MAXMEMSIZE]; +extern int DRUM_NegativeZeroFlag[MAXMEMSIZE]; + +extern int WriteDrum(int AR, t_int64 d, int NegZero); +extern int ReadDrum(int AR, t_int64 * d, int * NegZero); + +/* digits contants */ +#define D10 (10000000000LL) // ten digits (10 zeroes) +#define D8 (100000000L) // eight digits (8 zeroes) +#define D4 (10000L) // four digits (4 zeroes) + + +/* Device information block */ +struct dib { + uint8 upc; /* Units per channel */ + uint32 (*cmd)(UNIT *up, uint16 cmd, uint16 dev);/* Issue command. */ + void (*ini)(UNIT *up, t_bool f); +}; + +typedef struct dib DIB; + +/* Debuging controls */ +#define DEBUG_CMD 0x0000010 /* Show device commands */ +#define DEBUG_DETAIL 0x0000020 /* Show details */ +#define DEBUG_EXP 0x0000040 /* Show error conditions */ +#define DEBUG_DATA 0x0000080 /* Show data details */ + +extern DEBTAB dev_debug[]; +extern DEBTAB crd_debug[]; + +/* Returns from read/write */ +#define DATA_OK 0 /* Data transfered ok */ +#define TIME_ERROR 1 /* Channel did not transfer last operation */ +#define END_RECORD 2 /* End of record */ + +/* Returns from device commands */ +#define SCPE_BUSY (1) /* Device is active */ +#define SCPE_NOCARDS (2) /* No cards to read or ti write */ + +/* Global device definitions */ +#ifdef CPANEL +extern DEVICE cp_dev; +#endif + +extern DIB cdr_dib; +extern DEVICE cdr_dev; +extern uint32 cdr_cmd(UNIT *, uint16, uint16); +extern UNIT cdr_unit[]; + +extern DIB cdp_dib; +extern DEVICE cdp_dev; +extern uint32 cdp_cmd(UNIT *, uint16, uint16); +extern UNIT cdp_unit[]; + +/* Device status information stored in u5 */ +#define URCSTA_ERR 0002 /* Error reading record */ +#define URCSTA_BUSY 0010 /* Device is busy */ +#define URCSTA_LOAD 01000 /* Load flag for 533 card reader */ + + +/* Character codes in IBM 650 as stated in p4 Andree Programming the IBM 650 Mag Drum + Also stated in www.bitsavers.org/pdf/ibm/650/28-4028_FOR_TRANSIT.pdf p37 +*/ +#define CHR_BLANK 00 +#define CHR_DOT 18 // card code: 12-3-8 . +#define CHR_RPARENT 19 // 12-4-8 ) +#define CHR_AMPERSAND 20 // 12 + +#define CHR_DOLLAR 28 // 11-3-8 $ +#define CHR_STAR 29 // 11-4-8 * +#define CHR_NEG 30 // 11 - minus sign for negative value +#define CHR_SLASH 31 // 0-1 / +#define CHR_COMMA 38 // 0-3-8 , +#define CHR_LPARENT 39 // 0-4-8 ( +#define CHR_EQUAL 48 // 3-8 = +#define CHR_MINUS 49 // 4-8 - +#define CHR_A 61 +#define CHR_B 62 +#define CHR_C 63 +#define CHR_D 64 +#define CHR_E 65 +#define CHR_F 66 +#define CHR_G 67 +#define CHR_H 68 +#define CHR_I 69 +#define CHR_J 71 +#define CHR_K 72 +#define CHR_L 73 +#define CHR_M 74 +#define CHR_N 75 +#define CHR_O 76 +#define CHR_P 77 +#define CHR_Q 78 +#define CHR_R 79 +#define CHR_S 82 +#define CHR_T 83 +#define CHR_U 84 +#define CHR_V 85 +#define CHR_W 86 +#define CHR_X 87 +#define CHR_Y 88 +#define CHR_Z 89 +#define CHR_0 90 +#define CHR_1 91 +#define CHR_2 92 +#define CHR_3 93 +#define CHR_4 94 +#define CHR_5 95 +#define CHR_6 96 +#define CHR_7 97 +#define CHR_8 98 +#define CHR_9 99 + +extern char digits_ascii[40]; +extern char mem_to_ascii[100]; +extern int ascii_to_NN(int ch); +extern uint16 ascii_to_hol[128]; + + +/* Generic devices common to all */ +extern DEVICE cpu_dev; +extern UNIT cpu_unit; +extern REG cpu_reg[]; +extern int cycle_time; + +/* I/O Command codes */ +#define IO_RDS 1 /* Read record */ +#define IO_WRS 4 /* Write one record */ + + +extern const char *cpu_description(DEVICE *dptr); + +/* Opcodes */ +#define OP_AABL 17 // Add absolute to lower accumulator +#define OP_AL 15 // Add to lower accumulator +#define OP_AU 10 // Add to upper accumulator +#define OP_BRNZ 45 // Branch on accumulator non-zero +#define OP_BRMIN 46 // Branch on minus accumulator +#define OP_BRNZU 44 // Branch on non-zero in upper accumulator +#define OP_BROV 47 // Branch on overflow +#define OP_BRD1 91 // Branch on 8 in distributor positions 1-10 +#define OP_BRD2 92 +#define OP_BRD3 93 +#define OP_BRD4 94 +#define OP_BRD5 95 +#define OP_BRD6 96 +#define OP_BRD7 97 +#define OP_BRD8 98 +#define OP_BRD9 99 +#define OP_BRD10 90 +#define OP_DIV 14 // Divide +#define OP_DIVRU 64 // Divide and reset upper accumulator +#define OP_LD 69 // Load distributor +#define OP_MULT 19 // Multiply +#define OP_NOOP 00 // No operation +#define OP_PCH 71 // Punch a card +#define OP_RD 70 // Read a card +#define OP_RAABL 67 // Reset accumulator and add absolute to lower accumulator +#define OP_RAL 65 // Reset accumulator and add to lower accumulator +#define OP_RAU 60 // Reset accumulator and add to upper accumulator +#define OP_RSABL 68 // Reset accumulator and subtract absolute from lower accumulator +#define OP_RSL 66 // Reset accumulator and subtract from lower accumulator +#define OP_RSU 61 // Reset accumulator and subtract from upper accumulator +#define OP_SLT 35 // Shift accumulator left +#define OP_SCT 36 // Shift accumulator left and count +#define OP_SRT 30 // Shift accumulator right +#define OP_SRD 31 // Shift accumulator right and round accumulator +#define OP_STOP 01 // Stop if console switch is set to stop, otherwise continue as a NO-OP +#define OP_STD 24 // Store distributor into memory +#define OP_STDA 22 // Store lower accumulator data address into distributor, then store distributor into memory +#define OP_STIA 23 // Store lower accumulator instruction address into distributor, then store distributor into memory +#define OP_STL 20 // Store lower accumulator into memory +#define OP_STU 21 // Store upper accumulator into memory +#define OP_SABL 18 // Subtract absolute from lower accumulator +#define OP_SL 16 // Subtract from lower accumulator +#define OP_SU 11 // Subtract from upper accumulator +#define OP_TLU 84 // Table lookup + +#define NEGZERO_value 0x7fffFFFFffffFFFF +#define AccNegative (((AccNegativeZeroFlag) || (ACC[1]<0) || (ACC[0]<0)) ? 1:0) +#define AbsWord(d) ((d < 0) ? -d:d) +#define printfw(d,negzero) (int32) AbsWord(d/D4), (int32) AbsWord(d%D4), ((d<0) || (negzero)) ? '-':'+' +#define printfd printfw(DIST, DistNegativeZeroFlag) +#define printfa (int32) AbsWord(ACC[1]/D4),(int32) AbsWord(ACC[1]%D4), printfw(AbsWord(ACC[0]), AccNegative) + +/* Standard control panel wiring for card read/punch/print */ + +#define UNIT_CARD_WIRING ( 0xF00 << UNIT_V_CARD_MODE) +#define WIRING_8WORD ( 0x000 << UNIT_V_CARD_MODE) +#define WIRING_SOAP ( 0x100 << UNIT_V_CARD_MODE) +#define WIRING_IS ( 0x200 << UNIT_V_CARD_MODE) +#define UNIT_CARD_ECHO ( 0x1000 << UNIT_V_CARD_MODE) +#define UNIT_CARD_PRINT ( 0x2000 << UNIT_V_CARD_MODE) + +struct card_wirings { + uint32 mode; + const char *name; +}; + +/* Decimal helper functions */ +extern int Get_HiDigit(t_int64 d); +extern int Shift_Digits(t_int64 * d, int nDigits); +extern char * word_to_ascii(char * buf, int CharStart, int CharLen, t_int64 d); + + diff --git a/I650/i650_sys.c b/I650/i650_sys.c new file mode 100644 index 00000000..012edd1c --- /dev/null +++ b/I650/i650_sys.c @@ -0,0 +1,518 @@ +/* i650_sys.c: IBM 650 Simulator system interface. + + Copyright (c) 2018, Roberto Sancho + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + ROBERTO SANCHO BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + +#include "i650_defs.h" +#include "sim_card.h" +#include + +/* SCP data structures and interface routines + + sim_name simulator name string + sim_PC pointer to saved PC register descriptor + sim_emax number of words for examine + sim_devices array of pointers to simulated devices + sim_stop_messages array of pointers to stop messages + sim_load binary loader +*/ + +char sim_name[] = "IBM 650"; + +REG *sim_PC = &cpu_reg[0]; + +int32 sim_emax = 1; + +DEVICE *sim_devices[] = { + &cpu_dev, + &cdr_dev, + &cdp_dev, +//XXX &mta_dev, + NULL +}; + +/* Device addressing words */ + +DIB cdr_dib = { 1, &cdr_cmd, NULL }; +DIB cdp_dib = { 3, &cdp_cmd, NULL }; +//XXX DIB mt_dib = { CH_TYP_76XX, NUM_UNITS_MT, 0000, 0000, &mt_cmd, &mt_ini }; + +/* Simulator stop codes */ +const char *sim_stop_messages[] = { + "Unknown error", + "HALT instruction", + "Breakpoint", + "Unknown Opcode", + "Card Read/Punch Error", + "Programmed Stop", + "Overflow", + "Opcode Execution Error", + "Address Error", + 0 +}; + +/* Simulator debug controls */ +DEBTAB dev_debug[] = { + {"CMD", DEBUG_CMD}, + {"DATA", DEBUG_DATA}, + {"DETAIL", DEBUG_DETAIL}, + {"EXP", DEBUG_EXP}, + {0, 0} +}; + +DEBTAB crd_debug[] = { + {"CMD", DEBUG_CMD}, + {"DATA", DEBUG_DATA}, + {"DETAIL", DEBUG_DETAIL}, + {"EXP", DEBUG_EXP}, + {0, 0} +}; + +// code of char in IBM 650 memory +char mem_to_ascii[100] = { +/* 00 */ ' ', '~', '~', '~', '~', '~', '~', '~', '~', '~', +/* 10 */ '~', '~', '~', '~', '~', '~', '~', '~', '.', ')', +/* 20 */ '+', '~', '~', '~', '~', '~', '~', '~', '$', '*', +/* 30 */ '-', '/', '~', '~', '~', '~', '~', '~', ',', '(', +/* 40 */ '~', '~', '~', '~', '~', '~', '~', '~', '=', '-', +/* 50 */ '~', '~', '~', '~', '~', '~', '~', '~', '~', '~', +/* 60 */ '~', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', +/* 70 */ '~', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', +/* 80 */ '~', '~', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', +/* 90 */ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' +}; + +// representation of word digit 0-9 in card including Y(12) and X(11) punchs +char digits_ascii[40] = { + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', /* 0-9 */ + '?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', /* 0-9 w/HiPunch Y(12) */ + '!', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', /* 0-9 w/Negative Punch X(11) */ + '&', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '#' /* 0-9 with botch Negative Punch X(11) and HiPunch Y(12)*/ +}; + +uint16 ascii_to_hol[128] = { + /* Control */ + 0xf000,0xf000,0xf000,0xf000,0xf000,0xf000,0xf000,0xf000, /*0-37*/ + /*Control*/ + 0xf000,0xf000,0xf000,0xf000,0xf000,0xf000,0xf000,0xf000, + /*Control*/ + 0xf000,0xf000,0xf000,0xf000,0xf000,0xf000,0xf000,0xf000, + /*Control*/ + 0xf000,0xf000,0xf000,0xf000,0xf000,0xf000,0xf000,0xf000, + /* sp ! " # $ % & ' */ + /* none Y28 78 T28 Y38 T48 XT 48 */ + 0x000, 0x600, 0x006, 0x282, 0x442, 0x222, 0xA00, 0x022, /* 40 - 77 */ + /* ( ) * + , - . / */ + /* T48 X48 Y48 X T38 T X38 T1 */ + 0x222, 0x822, 0x422, 0x800, 0x242, 0x400, 0x842, 0x300, + /* 0 1 2 3 4 5 6 7 */ + /* T 1 2 3 4 5 6 7 */ + 0x200, 0x100, 0x080, 0x040, 0x020, 0x010, 0x008, 0x004, + /* 8 9 : ; < = > ? */ + /* 8 9 58 Y68 X68 38 68 X28 */ + 0x002, 0x001, 0x012, 0x40A, 0x80A, 0x042, 0x00A, 0x882, + /* @ A B C D E F G */ + /* 82 X1 X2 X3 X4 X5 X6 X7 */ + 0x022, 0x900, 0x880, 0x840, 0x820, 0x810, 0x808, 0x804, /* 100 - 137 */ + /* H I J K L M N O */ + /* X8 X9 Y1 Y2 Y3 Y4 Y5 Y6 */ + 0x802, 0x801, 0x500, 0x480, 0x440, 0x420, 0x410, 0x408, + /* P Q R S T U V W */ + /* Y7 Y8 Y9 T2 T3 T4 T5 T6 */ + 0x404, 0x402, 0x401, 0x280, 0x240, 0x220, 0x210, 0x208, + /* X Y Z [ \ ] ^ _ */ + /* T7 T8 T9 X58 X68 T58 T78 28 */ + 0x204, 0x202, 0x201, 0x812, 0x20A, 0x412, 0x406, 0x082, + /* ` a b c d e f g */ + 0x212, 0xB00, 0xA80, 0xA40, 0xA20, 0xA10, 0xA08, 0xA04, /* 140 - 177 */ + /* h i j k l m n o */ + 0xA02, 0xA01, 0xD00, 0xC80, 0xC40, 0xC20, 0xC10, 0xC08, + /* p q r s t u v w */ + 0xC04, 0xC02, 0xC01, 0x680, 0x640, 0x620, 0x610, 0x608, + /* x y z { | } ~ del */ + /* Y78 X78 78 79 */ + 0x604, 0x602, 0x601, 0x406, 0x806,0x0006,0x0005,0xf000 +}; + + + +/* Load a card image file into memory. */ + +t_stat +sim_load(FILE * fileref, CONST char *cptr, CONST char *fnam, int flag) +{ + /* Currently not implimented until I know format of load files */ + return SCPE_NOFNC; +} + +/* Symbol tables */ +typedef struct _opcode +{ + uint16 opbase; + const char *name; + uint8 bReadData; // =1 if inst fetchs data from memory +} +t_opcode; + +/* Opcodes */ +t_opcode base_ops[] = { + {OP_AABL, "AABL", 1}, + {OP_AL, "AL", 1}, + {OP_AU, "AU", 1}, + {OP_BRNZ, "BRNZ", 0}, + {OP_BRMIN, "BRMIN", 0}, + {OP_BRNZU, "BRNZU", 0}, + {OP_BROV, "BROV", 0}, + {OP_BRD1, "BRD1", 0}, + {OP_BRD2, "BRD2", 0}, + {OP_BRD3, "BRD3", 0}, + {OP_BRD4, "BRD4", 0}, + {OP_BRD5, "BRD5", 0}, + {OP_BRD6, "BRD6", 0}, + {OP_BRD7, "BRD7", 0}, + {OP_BRD8, "BRD8", 0}, + {OP_BRD9, "BRD9", 0}, + {OP_BRD10, "BRD10", 0}, + {OP_DIV, "DIV", 1}, + {OP_DIVRU, "DIVRU", 1}, + {OP_LD, "LD", 1}, + {OP_MULT, "MULT", 1}, + {OP_NOOP, "NOOP", 0}, + {OP_PCH, "PCH", 0}, + {OP_RD, "RD", 0}, + {OP_RAABL, "RAABL", 1}, + {OP_RAL, "RAL", 1}, + {OP_RAU, "RAU", 1}, + {OP_RSABL, "RSABL", 1}, + {OP_RSL, "RSL", 1}, + {OP_RSU, "RSU", 1}, + {OP_SLT, "SLT", 0}, + {OP_SCT, "SCT", 0}, + {OP_SRT, "SRT", 0}, + {OP_SRD, "SRD", 0}, + {OP_STOP, "STOP", 0}, + {OP_STD, "STD", 0}, + {OP_STDA, "STDA", 0}, + {OP_STIA, "STIA", 0}, + {OP_STL, "STL", 0}, + {OP_STU, "STU", 0}, + {OP_SABL, "SABL", 1}, + {OP_SL, "SL", 1}, + {OP_SU, "SU", 1}, + {OP_TLU, "TLU", 0}, + {0, NULL, 0} +}; + +/* Print out an instruction */ +void +print_opcode(FILE * of, t_int64 val, t_opcode * tab) +{ + + int sgn; + int IA; + int DA; + int op; + int n; + + if (val < 0) {sgn = -1; val = -val;} else sgn = 1; + op = Shift_Digits(&val, 2); // opcode + DA = Shift_Digits(&val, 4); // data address + IA = Shift_Digits(&val, 4); // intruction address + + while (tab->name != NULL) { + if (tab->opbase == op) { + fputs(tab->name, of); + n = strlen(tab->name); + while (n++<6) fputc(' ', of); + fprintf(of, "%04d ", DA); + fputc(' ', of); + fprintf(of, "%04d ", IA); + return; + } + tab++; + } + fprintf(of, " %d Unknown opcode", op); +} + +/* Symbolic decode + + Inputs: + *of = output stream + addr = current PC + *val = pointer to values + *uptr = pointer to unit + sw = switches + Outputs: + return = status code +*/ + +t_stat +fprint_sym(FILE * of, t_addr addr, t_value * val, UNIT * uptr, int32 sw) +{ + t_int64 inst; + int NegZero; + int ch; + + if (*val == NEGZERO_value) { + inst = 0; + NegZero = 1; + } else { + inst = *val; + NegZero = 0; + } + + /* Print value in decimal */ + fputc(' ', of); + fprintf(of, "%06d%04d%c", printfw(inst,NegZero)); // fprintf 10 digits word n, with sign + inst = AbsWord(inst); + + if (sw & SWMASK('C') ) { + int i; + + fputs(" '", of); + for (i=0;i<5;i++) { + ch = Shift_Digits(&inst, 2); + fputc(mem_to_ascii[ch], of); + } + fputc('\'', of); + } + + if (sw & SWMASK('M')) { + fputs(" ", of); + inst = AbsWord(inst); + print_opcode(of, inst, base_ops); + } + return SCPE_OK; +} + +t_opcode * +find_opcode(char *op, t_opcode * tab) +{ + while (tab->name != NULL) { + if (*tab->name != '\0' && strcmp(op, tab->name) == 0) + return tab; + tab++; + } + return NULL; +} + +/* read n digits, optionally with sign NNNN[+|-] + + Inputs: + *cptr = pointer to input string + sgnFlag = 1 to allow signed value + Outputs: + d = parsed value +*/ + +CONST char * parse_sgn(int *neg, CONST char *cptr) +{ + *neg=0; + while (isspace(*cptr)) cptr++; + if (*cptr == '+') { + cptr++; + } else if (*cptr == '-') { + cptr++; *neg = 1; + } + return cptr; +} + +CONST char * parse_n(t_int64 *d, CONST char *cptr, int n) +{ + int i = 0; + + *d = 0; + while (1) { + if ((n == 10) && (isspace(*cptr))) { + cptr++; // on 10 digit words, allow spaces + continue; + } + if (*cptr < '0' || *cptr > '9') break; + if (i++ > n) { + cptr++; + } else { + *d = (*d * 10) + (*cptr++ - '0'); + } + } + if (n == 4) {*d = *d % D4; } else + if (n == 10) {*d = *d % D10;} + return cptr; +} + + +/* Symbolic input + + Inputs: + *cptr = pointer to input string + addr = current PC + uptr = pointer to unit + *val = pointer to output values + sw = switches + Outputs: + status = error status +*/ + +// convert ascii char to two digits IBM 650 code +int ascii_to_NN(int ch) +{ + int i; + + if ((ch >= 'a') && (ch <= 'z')) ch = ch -'a'+'A'; + for (i=0;i<100;i++) if (mem_to_ascii[i] == ch) return i; + return 0; +} + +t_stat parse_sym(CONST char *cptr, t_addr addr, UNIT * uptr, t_value * val, int32 sw) +{ + t_int64 d; + int da, ia; + char ch, opcode[100]; + t_opcode *op; + int i; + int neg, IsNeg; + + while (isspace(*cptr)) cptr++; + d = 0; IsNeg = 0; + if (sw & SWMASK('M')) { + /* Grab opcode */ + cptr = parse_sgn(&neg, cptr); + if (neg) IsNeg = 1; + + cptr = get_glyph(cptr, opcode, 0); + + op = find_opcode(opcode, base_ops); + if (op == 0) return STOP_UUO; + + while (isspace(*cptr)) cptr++; + /* Collect first argument: da */ + cptr = parse_n(&d, cptr, 4); + da = (int) d; + + /* Skip blanks */ + while (isspace(*cptr)) cptr++; + /* Collect second argument: ia */ + cptr = parse_n(&d, cptr, 4); + ia = (int) d; + // construct inst + d = op->opbase * (t_int64) D8 + da * (t_int64) D4 + (t_int64) ia; + } else if (sw & SWMASK('C')) { + d = 0; + for(i=0; i<5;i++) { + d = d * 100; + ch = *cptr; + if (ch == '\0') continue; + cptr++; + d = d + ascii_to_NN(ch); + } + } else { + cptr = parse_sgn(&neg, cptr); + if (neg) IsNeg = 1; + cptr = parse_n(&d, cptr, 10); + } + cptr = parse_sgn(&neg, cptr); + if (neg) IsNeg = 1; + if ((IsNeg) && (d == 0)) { + *val = NEGZERO_value; // val has this special value to represent -0 (minus zero == negative zero) + } else { + if (IsNeg) d=-d; + *val = (t_value) d; + } + return SCPE_OK; +} + +// get data for opcode +// return pointer to opcode name if opcode found, else NULL +const char * get_opcode_data(int opcode, int * bReadData) +{ + t_opcode * tab = base_ops; + + *bReadData = 0; + while (tab->name != NULL) { + if (tab->opbase == opcode) { + *bReadData = tab->bReadData; + return tab->name; + } + tab++; + } + return NULL; +} + + +/* Helper functions */ + +// set in buf string ascii chars form word d ( chars: c1c2c3c4c5 ) +// starts at char start (1..5), for CharLen chars (0..5) +// to convert the full word use (buf, 1, 5, d) +char * word_to_ascii(char * buf, int CharStart, int CharLen, t_int64 d) +{ + int i,c1,c2; + char * buf0; + + buf0 = buf; // save start of buffer + for (i=0;i<5;i++) { // 5 alpha chars per word + c1 = Shift_Digits(&d, 2); + c2 = mem_to_ascii[c1]; + if (i < CharStart-1) continue; + if (i >= CharStart+CharLen-1) continue; + *buf++ = c2; + } + *buf++ = 0; + return buf0; +} + + + +// return hi digit (digit 10) al leftmost position in number (no sign) +int Get_HiDigit(t_int64 d) +{ + return (int) ((AbsWord(d) * 10) / D10); +} + +// shift d value for nDigits positions (max 7) +// if nDigit > 0 shift left, if < 0 then shift right +// return value of shifted digits (without sign) +int Shift_Digits(t_int64 * d, int nDigits) +{ + int i,n; + int neg = 0; + + if (nDigits == 0) return 0; // no shift + + if (*d < 0) {*d=-*d; neg = 1;} + + n = 0; + if (nDigits > 0) { // shift left + for (i=0;i nul + +:add_extra_decks +if "%1" == "" goto run + +set env deck="void" +if -i "%1" == "TR" set env deck="is_trace_src.txt" +if -i "%1" == "LBOX" set env deck="is_set_loopbox.txt" +if %deck == "void" goto next_extra + +! copy deck_in.dck a.dck > nul +! copy a.dck + %deck deck_in.dck > nul +! del a.dck > nul + +:next_extra +shift +goto add_extra_decks +:run + +att cdr1 deck_in.dck +set cdr1 wiring=is + +; execute the loader to create Interpretive system deck + +echo *** +echo *** run system loader +echo *** + +d ar 0880 +go + +; generate a 1-word load card deck with whole interpretive system, ready to run + +echo *** +echo *** run is system generation to create +echo interpretive system (is) 1-word per card load deck +echo *** + +att cdp1 -n -q is.dck +set cdp1 echo, print, wiring=is + +d ar 0801 +go + +:end + diff --git a/I650/sw/Build_soap_from_source.ini b/I650/sw/Build_soap_from_source.ini new file mode 100644 index 00000000..24d409c9 --- /dev/null +++ b/I650/sw/Build_soap_from_source.ini @@ -0,0 +1,28 @@ + +; set console -n log=log.txt +; set debug -n debug.txt +; set debug stdout +; set cpu debug=cmd;data;detail + + +set cpu 2k + +set cdr1 wiring=soap + +; prepare deck: SOAP (condensed deck as 7 word per card format) then SOAP source code to assemblre + +! copy soapII_condensed_card.dck + soap_src.txt deck_in.dck > nul + +att cdr1 deck_in.dck +att cdp1 -n -q deck_out.dck +set cdp1 echo, print, wiring=soap +att cdp0 -n -q print.txt + +; load soap deck (condensed soap deck autostarts) +d csw 7019511951 +d ar 8000 +go + + +:end + diff --git a/I650/sw/is.dck b/I650/sw/is.dck new file mode 100644 index 00000000..9b4d3472 --- /dev/null +++ b/I650/sw/is.dck @@ -0,0 +1,1100 @@ +6I1954195C000000000A240900800?651653130H000000000?000000000?000000000?000000000? +6I1954195C000000000B240901800?010000090A000000000?000000000?000000000?000000000? +6I1954195C000000000C240902800?651958126C000000000?000000000?000000000?000000000? +6I1954195C000000000D240903800?300008122A000000000?000000000?000000000?000000000? +6I1954195C000000000E240904800?000000094C000000000?000000000?000000000?000000000? +6I1954195C000000000F240905800?651959131C000000000?000000000?000000000?000000000? +6I1954195C000000000G240906800?300008117E000000000?000000000?000000000?000000000? +6I1954195C000000000H240907800?000000095G000000000?000000000?000000000?000000000? +6I1954195C000000000I240908800?651951145E000000000?000000000?000000000?000000000? +6I1954195C000000001?240909800?000000101C000000000?000000000?000000000?000000000? +6I1954195C000000001A240910800?151519127C000000000?000000000?000000000?000000000? +6I1954195C000000001B240911800?151519127C000000000?000000000?000000000?000000000? +6I1954195C000000001C240912800?651986119A000000000?000000000?000000000?000000000? +6I1954195C000000001D240913800?691016096I000000000?000000000?000000000?000000000? +6I1954195C000000001E240914800?000000800C000000000?000000000?000000000?000000000? +6I1954195C000000001F240915800?201519132B000000000?000000000?000000000?000000000? +6I1954195C000000001G240916800?651986119A000000000?000000000?000000000?000000000? +6I1954195C000000001H240917800?651959091E000000000?000000000?000000000?000000000? +6I1954195C000000001I240918800?691371117D000000000?000000000?000000000?000000000? +6I1954195C000000002?240919800?691372127E000000000?000000000?000000000?000000000? +6I1954195C000000002A240920800?651223091E000000000?000000000?000000000?000000000? +6I1954195C000000002B240921800?651986119A000000000?000000000?000000000?000000000? +6I1954195C000000002C240922800?651986119A000000000?000000000?000000000?000000000? +6I1954195C000000002D240923800?201872162H000000000?000000000?000000000?000000000? +6I1954195C000000002E240924800?601585183I000000000?000000000?000000000?000000000? +6I1954195C000000002F240925800?651957093A000000000?000000000?000000000?000000000? +6I1954195C000000002G240926800?691780117D000000000?000000000?000000000?000000000? +6I1954195C000000002H240927800?691830127E000000000?000000000?000000000?000000000? +6I1954195C000000002I240928800?651223093A000000000?000000000?000000000?000000000? +6I1954195C000000003?240929800?651682180A000000000?000000000?000000000?000000000? +6I1954195C000000003A240930800?601585183I000000000?000000000?000000000?000000000? +6I1954195C000000003B240931800?691784175?000000000?000000000?000000000?000000000? +6I1954195C000000003C240932800?601585183I000000000?000000000?000000000?000000000? +6I1954195C000000003D240933800?201872192G000000000?000000000?000000000?000000000? +6I1954195C000000003E240934800?101688174C000000000?000000000?000000000?000000000? +6I1954195C000000003F240935800?691738144B000000000?000000000?000000000?000000000? +6I1954195C000000003G240936800?601585183I000000000?000000000?000000000?000000000? +6I1954195C000000003H240937800?201492095B000000000?000000000?000000000?000000000? +6I1954195C000000003I240938800?601542139H000000000?000000000?000000000?000000000? +6I1954195C000000004?240939800?201793169F000000000?000000000?000000000?000000000? +6I1954195C000000004A240940800?601542139H000000000?000000000?000000000?000000000? +6I1954195C000000004B240941800?651958094D000000000?000000000?000000000?000000000? +6I1954195C000000004C240942800?691645117D000000000?000000000?000000000?000000000? +6I1954195C000000004D240943800?691646127E000000000?000000000?000000000?000000000? +6I1954195C000000004E240944800?691448175?000000000?000000000?000000000?000000000? +6I1954195C000000004F240945800?601542139H000000000?000000000?000000000?000000000? +6I1954195C000000004G240946800?651223094D000000000?000000000?000000000?000000000? +6I1954195C000000004H240947800?651882180A000000000?000000000?000000000?000000000? +6I1954195C000000004I240948800?601542139H000000000?000000000?000000000?000000000? +6I1954195C000000005?240949800?691828182F000000000?000000000?000000000?000000000? +6I1954195C000000005A240950800?210992095A000000000?000000000?000000000?000000000? +6I1954195C000000005B240951800?440952098G000000000?000000000?000000000?000000000? +6I1954195C000000005C240952800?461315095C000000000?000000000?000000000?000000000? +6I1954195C000000005D240953800?350008095D000000000?000000000?000000000?000000000? +6I1954195C000000005E240954800?110990095E000000000?000000000?000000000?000000000? +6I1954195C000000005F240955800?440956096B000000000?000000000?000000000?000000000? +6I1954195C000000005G240956800?110991095G000000000?000000000?000000000?000000000? +6I1954195C000000005H240957800?440958096A000000000?000000000?000000000?000000000? +6I1954195C000000005I240958800?110991095I000000000?000000000?000000000?000000000? +6I1954195C000000006?240959800?441315096?000000000?000000000?000000000?000000000? +6I1954195C000000006A240960800?690969096C000000000?000000000?000000000?000000000? +6I1954195C000000006B240961800?690968096C000000000?000000000?000000000?000000000? +6I1954195C000000006C240962800?690967096C000000000?000000000?000000000?000000000? +6I1954195C000000006D240963800?240984096D000000000?000000000?000000000?000000000? +6I1954195C000000006E240964800?650992098D000000000?000000000?000000000?000000000? +6I1954195C000000006F240965800?300002096F000000000?000000000?000000000?000000000? +6I1954195C000000006G240966800?441120097D000000000?000000000?000000000?000000000? +6I1954195C000000006H240967800?350001098E000000000?000000000?000000000?000000000? +6I1954195C000000006I240968800?350002098E000000000?000000000?000000000?000000000? +6I1954195C000000007?240969800?350003098E000000000?000000000?000000000?000000000? +6I1954195C000000007A240970800?651045097A000000000?000000000?000000000?000000000? +6I1954195C000000007B240971800?450972098G000000000?000000000?000000000?000000000? +6I1954195C000000007C240972800?160998097C000000000?000000000?000000000?000000000? +6I1954195C000000007D240973800?450975097G000000000?000000000?000000000?000000000? +6I1954195C000000007E240974800?601045102G000000000?000000000?000000000?000000000? +6I1954195C000000007F240975800?160998097F000000000?000000000?000000000?000000000? +6I1954195C000000007G240976800?450979097H000000000?000000000?000000000?000000000? +6I1954195C000000007H240977800?690997098?000000000?000000000?000000000?000000000? +6I1954195C000000007I240978800?690996098?000000000?000000000?000000000?000000000? +6I1954195C000000008?240979800?690995098?000000000?000000000?000000000?000000000? +6I1954195C000000008A240980800?240993098A000000000?000000000?000000000?000000000? +6I1954195C000000008B240981800?651023098B000000000?000000000?000000000?000000000? +6I1954195C000000008C240982800?300003098C000000000?000000000?000000000?000000000? +6I1954195C000000008D240983800?150994800B000000000?000000000?000000000?000000000? +6I1954195C000000008E240984800?350003098E000000000?000000000?000000000?000000000? +6I1954195C000000008F240985800?168002098F000000000?000000000?000000000?000000000? +6I1954195C000000008G240986800?690993800A000000000?000000000?000000000?000000000? +6I1954195C000000008H240987800?211017109E000000000?000000000?000000000?000000000? +6I1954195C000000008I240988800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000009?240989800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000009A240990800?500000000?000000000?000000000?000000000?000000000? +6I1954195C000000009B240991800?010000000?000000000?000000000?000000000?000000000? +6I1954195C000000009C240992800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000009D240993800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000009E240994800?600000095?000000000?000000000?000000000?000000000? +6I1954195C000000009F240995800?000000098G000000000?000000000?000000000?000000000? +6I1954195C000000009G240996800?350003098G000000000?000000000?000000000?000000000? +6I1954195C000000009H240997800?350006098G000000000?000000000?000000000?000000000? +6I1954195C000000009I240998800?001000000?000000000?000000000?000000000?000000000? +6I1954195C000000010?240999800?601952140G000000000?000000000?000000000?000000000? +6I1954195C000000010A241000800?300003111I000000000?000000000?000000000?000000000? +6I1954195C000000010B241001800?300005106D000000000?000000000?000000000?000000000? +6I1954195C000000010C241002800?451109118F000000000?000000000?000000000?000000000? +6I1954195C000000010D241003800?101017109C000000000?000000000?000000000?000000000? +6I1954195C000000010E241004800?201260106H000000000?000000000?000000000?000000000? +6I1954195C000000010F241005800?658003116C000000000?000000000?000000000?000000000? +6I1954195C000000010G241006800?651023107I000000000?000000000?000000000?000000000? +6I1954195C000000010H241007800?661023107I000000000?000000000?000000000?000000000? +6I1954195C000000010I241008800?101017107D000000000?000000000?000000000?000000000? +6I1954195C000000011?241009800?555555555E000000000?000000000?000000000?000000000? +6I1954195C000000011A241010800?300004134C000000000?000000000?000000000?000000000? +6I1954195C000000011B241011800?300004118?000000000?000000000?000000000?000000000? +6I1954195C000000011C241012800?461095112?000000000?000000000?000000000?000000000? +6I1954195C000000011D241013800?300002102A000000000?000000000?000000000?000000000? +6I1954195C000000011E241014800?101024172I000000000?000000000?000000000?000000000? +6I1954195C000000011F241015800?461120106I000000000?000000000?000000000?000000000? +6I1954195C000000011G241016800?010000112?000000000?000000000?000000000?000000000? +6I1954195C000000011H241017800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000011I241018800?601951112F000000000?000000000?000000000?000000000? +6I1954195C000000012?241019800?201023102F000000000?000000000?000000000?000000000? +6I1954195C000000012A241020800?698002108A000000000?000000000?000000000?000000000? +6I1954195C000000012B241021800?678002102I000000000?000000000?000000000?000000000? +6I1954195C000000012C241022800?670000113G000000000?000000000?000000000?000000000? +6I1954195C000000012D241023800?555555555E000000000?000000000?000000000?000000000? +6I1954195C000000012E241024800?000001000?000000000?000000000?000000000?000000000? +6I1954195C000000012F241025800?101031109C000000000?000000000?000000000?000000000? +6I1954195C000000012G241026800?608003103C000000000?000000000?000000000?000000000? +6I1954195C000000012H241027800?300003103E000000000?000000000?000000000?000000000? +6I1954195C000000012I241028800?108001113F000000000?000000000?000000000?000000000? +6I1954195C000000013?241029800?300001103F000000000?000000000?000000000?000000000? +6I1954195C000000013A241030800?600000109F000000000?000000000?000000000?000000000? +6I1954195C000000013B241031800?000100000?000000000?000000000?000000000?000000000? +6I1954195C000000013C241032800?300003114D000000000?000000000?000000000?000000000? +6I1954195C000000013D241033800?300003104A000000000?000000000?000000000?000000000? +6I1954195C000000013E241034800?101037800C000000000?000000000?000000000?000000000? +6I1954195C000000013F241035800?101038104C000000000?000000000?000000000?000000000? +6I1954195C000000013G241036800?161045101B000000000?000000000?000000000?000000000? +6I1954195C000000013H241037800?651045100?000000000?000000000?000000000?000000000? +6I1954195C000000013I241038800?600000110G000000000?000000000?000000000?000000000? +6I1954195C000000014?241039800?000100100?000000000?000000000?000000000?000000000? +6I1954195C000000014A241040800?691145115A000000000?000000000?000000000?000000000? +6I1954195C000000014B241041800?201045104H000000000?000000000?000000000?000000000? +6I1954195C000000014C241042800?451364137G000000000?000000000?000000000?000000000? +6I1954195C000000014D241043800?211098800A000000000?000000000?000000000?000000000? +6I1954195C000000014E241044800?777777777G000000000?000000000?000000000?000000000? +6I1954195C000000014F241045800?555555555E000000000?000000000?000000000?000000000? +6I1954195C000000014G241046800?618003106A000000000?000000000?000000000?000000000? +6I1954195C000000014H241047800?000000100?000000000?000000000?000000000?000000000? +6I1954195C000000014I241048800?608003110E000000000?000000000?000000000?000000000? +6I1954195C000000015?241049800?350003105H000000000?000000000?000000000?000000000? +6I1954195C000000015A241050800?651103116C000000000?000000000?000000000?000000000? +6I1954195C000000015B241051800?461054115E000000000?000000000?000000000?000000000? +6I1954195C000000015C241052800?300003136B000000000?000000000?000000000?000000000? +6I1954195C000000015D241053800?658002131A000000000?000000000?000000000?000000000? +6I1954195C000000015E241054800?108001106B000000000?000000000?000000000?000000000? +6I1954195C000000015F241055800?000000000E000000000?000000000?000000000?000000000? +6I1954195C000000015G241056800?211268123A000000000?000000000?000000000?000000000? +6I1954195C000000015H241057800?101017102E000000000?000000000?000000000?000000000? +6I1954195C000000015I241058800?210000120C000000000?000000000?000000000?000000000? +6I1954195C000000016?241059800?151162800B000000000?000000000?000000000?000000000? +6I1954195C000000016A241060800?651023112I000000000?000000000?000000000?000000000? +6I1954195C000000016B241061800?300003101I000000000?000000000?000000000?000000000? +6I1954195C000000016C241062800?211017112?000000000?000000000?000000000?000000000? +6I1954195C000000016D241063800?441067107F000000000?000000000?000000000?000000000? +6I1954195C000000016E241064800?691017107A000000000?000000000?000000000?000000000? +6I1954195C000000016F241065800?600000144E000000000?000000000?000000000?000000000? +6I1954195C000000016G241066800?777777777G000000000?000000000?000000000?000000000? +6I1954195C000000016H241067800?101020800C000000000?000000000?000000000?000000000? +6I1954195C000000016I241068800?651045139I000000000?000000000?000000000?000000000? +6I1954195C000000017?241069800?608002102G000000000?000000000?000000000?000000000? +6I1954195C000000017A241070800?661023112I000000000?000000000?000000000?000000000? +6I1954195C000000017B241071800?300002107G000000000?000000000?000000000?000000000? +6I1954195C000000017C241072800?670000119H000000000?000000000?000000000?000000000? +6I1954195C000000017D241073800?600000128I000000000?000000000?000000000?000000000? +6I1954195C000000017E241074800?101031113E000000000?000000000?000000000?000000000? +6I1954195C000000017F241075800?300003113C000000000?000000000?000000000?000000000? +6I1954195C000000017G241076800?608001103D000000000?000000000?000000000?000000000? +6I1954195C000000017H241077800?108001113E000000000?000000000?000000000?000000000? +6I1954195C000000017I241078800?108001118E000000000?000000000?000000000?000000000? +6I1954195C000000018?241079800?300007100D000000000?000000000?000000000?000000000? +6I1954195C000000018A241080800?300000110H000000000?000000000?000000000?000000000? +6I1954195C000000018B241081800?651023123B000000000?000000000?000000000?000000000? +6I1954195C000000018C241082800?241289149B000000000?000000000?000000000?000000000? +6I1954195C000000018D241083800?241289154B000000000?000000000?000000000?000000000? +6I1954195C000000018E241084800?241289159B000000000?000000000?000000000?000000000? +6I1954195C000000018F241085800?241289164B000000000?000000000?000000000?000000000? +6I1954195C000000018G241086800?241289169B000000000?000000000?000000000?000000000? +6I1954195C000000018H241087800?691140119E000000000?000000000?000000000?000000000? +6I1954195C000000018I241088800?691341119E000000000?000000000?000000000?000000000? +6I1954195C000000019?241089800?691342119E000000000?000000000?000000000?000000000? +6I1954195C000000019A241090800?658002100B000000000?000000000?000000000?000000000? +6I1954195C000000019B241091800?747788001I000000000?000000000?000000000?000000000? +6I1954195C000000019C241092800?151045104I000000000?000000000?000000000?000000000? +6I1954195C000000019D241093800?118002105A000000000?000000000?000000000?000000000? +6I1954195C000000019E241094800?111952800B000000000?000000000?000000000?000000000? +6I1954195C000000019F241095800?601098101D000000000?000000000?000000000?000000000? +6I1954195C000000019G241096800?699999112?000000000?000000000?000000000?000000000? +6I1954195C000000019H241097800?151023132G000000000?000000000?000000000?000000000? +6I1954195C000000019I241098800?600000110G000000000?000000000?000000000?000000000? +6I1954195C000000020?241099800?461367115C000000000?000000000?000000000?000000000? +6I1954195C000000020A241100800?300001105G000000000?000000000?000000000?000000000? +6I1954195C000000020B241101800?300001100H000000000?000000000?000000000?000000000? +6I1954195C000000020C241102800?111255115I000000000?000000000?000000000?000000000? +6I1954195C000000020D241103800?000003000?000000000?000000000?000000000?000000000? +6I1954195C000000020E241104800?000006000?000000000?000000000?000000000?000000000? +6I1954195C000000020F241105800?300003106C000000000?000000000?000000000?000000000? +6I1954195C000000020G241106800?101260126G000000000?000000000?000000000?000000000? +6I1954195C000000020H241107800?461112106A000000000?000000000?000000000?000000000? +6I1954195C000000020I241108800?201265112B000000000?000000000?000000000?000000000? +6I1954195C000000021?241109800?300003171I000000000?000000000?000000000?000000000? +6I1954195C000000021A241110800?691017112A000000000?000000000?000000000?000000000? +6I1954195C000000021B241111800?691017117A000000000?000000000?000000000?000000000? +6I1954195C000000021C241112800?111017104F000000000?000000000?000000000?000000000? +6I1954195C000000021D241113800?201017109E000000000?000000000?000000000?000000000? +6I1954195C000000021E241114800?670000107E000000000?000000000?000000000?000000000? +6I1954195C000000021F241115800?161023113?000000000?000000000?000000000?000000000? +6I1954195C000000021G241116800?350000126G000000000?000000000?000000000?000000000? +6I1954195C000000021H241117800?350003112E000000000?000000000?000000000?000000000? +6I1954195C000000021I241118800?151023113?000000000?000000000?000000000?000000000? +6I1954195C000000022?241119800?151030800B000000000?000000000?000000000?000000000? +6I1954195C000000022A241120800?601023102G000000000?000000000?000000000?000000000? +6I1954195C000000022B241121800?300001102H000000000?000000000?000000000?000000000? +6I1954195C000000022C241122800?608003103B000000000?000000000?000000000?000000000? +6I1954195C000000022D241123800?600000134H000000000?000000000?000000000?000000000? +6I1954195C000000022E241124800?241278119D000000000?000000000?000000000?000000000? +6I1954195C000000022F241125800?608003118C000000000?000000000?000000000?000000000? +6I1954195C000000022G241126800?101038172I000000000?000000000?000000000?000000000? +6I1954195C000000022H241127800?300003104?000000000?000000000?000000000?000000000? +6I1954195C000000022I241128800?350003800C000000000?000000000?000000000?000000000? +6I1954195C000000023?241129800?300004100D000000000?000000000?000000000?000000000? +6I1954195C000000023A241130800?350003119F000000000?000000000?000000000?000000000? +6I1954195C000000023B241131800?608000144E000000000?000000000?000000000?000000000? +6I1954195C000000023C241132800?118001119?000000000?000000000?000000000?000000000? +6I1954195C000000023D241133800?608002109B000000000?000000000?000000000?000000000? +6I1954195C000000023E241134800?201291127B000000000?000000000?000000000?000000000? +6I1954195C000000023F241135800?101138109C000000000?000000000?000000000?000000000? +6I1954195C000000023G241136800?101039109C000000000?000000000?000000000?000000000? +6I1954195C000000023H241137800?608002144E000000000?000000000?000000000?000000000? +6I1954195C000000023I241138800?000000000A000000000?000000000?000000000?000000000? +6I1954195C000000024?241139800?000100100A000000000?000000000?000000000?000000000? +6I1954195C000000024A241140800?350001135I000000000?000000000?000000000?000000000? +6I1954195C000000024B241141800?827473001H000000000?000000000?000000000?000000000? +6I1954195C000000024C241142800?240000110B000000000?000000000?000000000?000000000? +6I1954195C000000024D241143800?191801126G000000000?000000000?000000000?000000000? +6I1954195C000000024E241144800?608003115H000000000?000000000?000000000?000000000? +6I1954195C000000024F241145800?210000120C000000000?000000000?000000000?000000000? +6I1954195C000000024G241146800?111852190G000000000?000000000?000000000?000000000? +6I1954195C000000024H241147800?350001175C000000000?000000000?000000000?000000000? +6I1954195C000000024I241148800?101853176?000000000?000000000?000000000?000000000? +6I1954195C000000025?241149800?101856176B000000000?000000000?000000000?000000000? +6I1954195C000000025A241150800?031622776F000000000?000000000?000000000?000000000? +6I1954195C000000025B241151800?221058116A000000000?000000000?000000000?000000000? +6I1954195C000000025C241152800?101255120I000000000?000000000?000000000?000000000? +6I1954195C000000025D241153800?108002131B000000000?000000000?000000000?000000000? +6I1954195C000000025E241154800?828875100F000000000?000000000?000000000?000000000? +6I1954195C000000025F241155800?168002111C000000000?000000000?000000000?000000000? +6I1954195C000000025G241156800?111260126G000000000?000000000?000000000?000000000? +6I1954195C000000025H241157800?691160116D000000000?000000000?000000000?000000000? +6I1954195C000000025I241158800?461115111H000000000?000000000?000000000?000000000? +6I1954195C000000026?241159800?441366109E000000000?000000000?000000000?000000000? +6I1954195C000000026A241160800?210000109E000000000?000000000?000000000?000000000? +6I1954195C000000026B241161800?151114800B000000000?000000000?000000000?000000000? +6I1954195C000000026C241162800?600000101F000000000?000000000?000000000?000000000? +6I1954195C000000026D241163800?691116126I000000000?000000000?000000000?000000000? +6I1954195C000000026E241164800?221267117?000000000?000000000?000000000?000000000? +6I1954195C000000026F241165800?601957126A000000000?000000000?000000000?000000000? +6I1954195C000000026G241166800?211277173F000000000?000000000?000000000?000000000? +6I1954195C000000026H241167800?174532934H000000000?000000000?000000000?000000000? +6I1954195C000000026I241168800?241272108A000000000?000000000?000000000?000000000? +6I1954195C000000027?241169800?151022800B000000000?000000000?000000000?000000000? +6I1954195C000000027A241170800?151073800B000000000?000000000?000000000?000000000? +6I1954195C000000027B241171800?300001107H000000000?000000000?000000000?000000000? +6I1954195C000000027C241172800?111325133F000000000?000000000?000000000?000000000? +6I1954195C000000027D241173800?651957141A000000000?000000000?000000000?000000000? +6I1954195C000000027E241174800?241278148F000000000?000000000?000000000?000000000? +6I1954195C000000027F241175800?241986134D000000000?000000000?000000000?000000000? +6I1954195C000000027G241176800?111283800C000000000?000000000?000000000?000000000? +6I1954195C000000027H241177800?691080118D000000000?000000000?000000000?000000000? +6I1954195C000000027I241178800?241017117E000000000?000000000?000000000?000000000? +6I1954195C000000028?241179800?158001800C000000000?000000000?000000000?000000000? +6I1954195C000000028A241180800?101138134C000000000?000000000?000000000?000000000? +6I1954195C000000028B241181800?608003123I000000000?000000000?000000000?000000000? +6I1954195C000000028C241182800?451236123G000000000?000000000?000000000?000000000? +6I1954195C000000028D241183800?300003139B000000000?000000000?000000000?000000000? +6I1954195C000000028E241184800?221289129B000000000?000000000?000000000?000000000? +6I1954195C000000028F241185800?101139109C000000000?000000000?000000000?000000000? +6I1954195C000000028G241186800?651045105B000000000?000000000?000000000?000000000? +6I1954195C000000028H241187800?350003109G000000000?000000000?000000000?000000000? +6I1954195C000000028I241188800?691953800C000000000?000000000?000000000?000000000? +6I1954195C000000029?241189800?300001100D000000000?000000000?000000000?000000000? +6I1954195C000000029A241190800?101045109I000000000?000000000?000000000?000000000? +6I1954195C000000029B241191800?151294124I000000000?000000000?000000000?000000000? +6I1954195C000000029C241192800?441246125G000000000?000000000?000000000?000000000? +6I1954195C000000029D241193800?111268137C000000000?000000000?000000000?000000000? +6I1954195C000000029E241194800?200000117H000000000?000000000?000000000?000000000? +6I1954195C000000029F241195800?241198105C000000000?000000000?000000000?000000000? +6I1954195C000000029G241196800?151265127D000000000?000000000?000000000?000000000? +6I1954195C000000029H241197800?211255117F000000000?000000000?000000000?000000000? +6I1954195C000000029I241198800?350000135I000000000?000000000?000000000?000000000? +6I1954195C000000030?241199800?451203109E000000000?000000000?000000000?000000000? +6I1954195C000000030A241200800?300003105I000000000?000000000?000000000?000000000? +6I1954195C000000030B241201800?101009101E000000000?000000000?000000000?000000000? +6I1954195C000000030C241202800?601009101C000000000?000000000?000000000?000000000? +6I1954195C000000030D241203800?601023102G000000000?000000000?000000000?000000000? +6I1954195C000000030E241204800?651023112G000000000?000000000?000000000?000000000? +6I1954195C000000030F241205800?651023112H000000000?000000000?000000000?000000000? +6I1954195C000000030G241206800?461670121A000000000?000000000?000000000?000000000? +6I1954195C000000030H241207800?151310800B000000000?000000000?000000000?000000000? +6I1954195C000000030I241208800?350001121E000000000?000000000?000000000?000000000? +6I1954195C000000031?241209800?168002121G000000000?000000000?000000000?000000000? +6I1954195C000000031A241210800?168002122H000000000?000000000?000000000?000000000? +6I1954195C000000031B241211800?300002121H000000000?000000000?000000000?000000000? +6I1954195C000000031C241212800?191270122?000000000?000000000?000000000?000000000? +6I1954195C000000031D241213800?350002122A000000000?000000000?000000000?000000000? +6I1954195C000000031E241214800?151219800B000000000?000000000?000000000?000000000? +6I1954195C000000031F241215800?101419122D000000000?000000000?000000000?000000000? +6I1954195C000000031G241216800?161270122E000000000?000000000?000000000?000000000? +6I1954195C000000031H241217800?241270122G000000000?000000000?000000000?000000000? +6I1954195C000000031I241218800?441223144E000000000?000000000?000000000?000000000? +6I1954195C000000032?241219800?600000120F000000000?000000000?000000000?000000000? +6I1954195C000000032A241220800?310000124C000000000?000000000?000000000?000000000? +6I1954195C000000032B241221800?101278144E000000000?000000000?000000000?000000000? +6I1954195C000000032C241222800?191278120H000000000?000000000?000000000?000000000? +6I1954195C000000032D241223800?201278118A000000000?000000000?000000000?000000000? +6I1954195C000000032E241224800?668003194C000000000?000000000?000000000?000000000? +6I1954195C000000032F241225800?300001118B000000000?000000000?000000000?000000000? +6I1954195C000000032G241226800?310002124C000000000?000000000?000000000?000000000? +6I1954195C000000032H241227800?648001123H000000000?000000000?000000000?000000000? +6I1954195C000000032I241228800?198001124D000000000?000000000?000000000?000000000? +6I1954195C000000033?241229800?601234125A000000000?000000000?000000000?000000000? +6I1954195C000000033A241230800?608002144E000000000?000000000?000000000?000000000? +6I1954195C000000033B241231800?151188109D000000000?000000000?000000000?000000000? +6I1954195C000000033C241232800?101045136A000000000?000000000?000000000?000000000? +6I1954195C000000033D241233800?608002119B000000000?000000000?000000000?000000000? +6I1954195C000000033E241234800?000000002B000000000?000000000?000000000?000000000? +6I1954195C000000033F241235800?101240124E000000000?000000000?000000000?000000000? +6I1954195C000000033G241236800?658001119A000000000?000000000?000000000?000000000? +6I1954195C000000033H241237800?601055122B000000000?000000000?000000000?000000000? +6I1954195C000000033I241238800?201294121F000000000?000000000?000000000?000000000? +6I1954195C000000034?241239800?350001124H000000000?000000000?000000000?000000000? +6I1954195C000000034A241240800?000000000A000000000?000000000?000000000?000000000? +6I1954195C000000034B241241800?211277173F000000000?000000000?000000000?000000000? +6I1954195C000000034C241242800?701951134D000000000?000000000?000000000?000000000? +6I1954195C000000034D241243800?608002121C000000000?000000000?000000000?000000000? +6I1954195C000000034E241244800?300001115B000000000?000000000?000000000?000000000? +6I1954195C000000034F241245800?300001115B000000000?000000000?000000000?000000000? +6I1954195C000000034G241246800?601150121B000000000?000000000?000000000?000000000? +6I1954195C000000034H241247800?651250140H000000000?000000000?000000000?000000000? +6I1954195C000000034I241248800?211255122I000000000?000000000?000000000?000000000? +6I1954195C000000035?241249800?101055121?000000000?000000000?000000000?000000000? +6I1954195C000000035A241250800?888888888H000000000?000000000?000000000?000000000? +6I1954195C000000035B241251800?191255123E000000000?000000000?000000000?000000000? +6I1954195C000000035C241252800?888888888H000000000?000000000?000000000?000000000? +6I1954195C000000035D241253800?350007152H000000000?000000000?000000000?000000000? +6I1954195C000000035E241254800?101658141F000000000?000000000?000000000?000000000? +6I1954195C000000035F241255800?888888888H000000000?000000000?000000000?000000000? +6I1954195C000000035G241256800?201272157E000000000?000000000?000000000?000000000? +6I1954195C000000035H241257800?651270122F000000000?000000000?000000000?000000000? +6I1954195C000000035I241258800?168001156C000000000?000000000?000000000?000000000? +6I1954195C000000036?241259800?658003171G000000000?000000000?000000000?000000000? +6I1954195C000000036A241260800?300000178A000000000?000000000?000000000?000000000? +6I1954195C000000036B241261800?350002129C000000000?000000000?000000000?000000000? +6I1954195C000000036C241262800?461266174H000000000?000000000?000000000?000000000? +6I1954195C000000036D241263800?118002172E000000000?000000000?000000000?000000000? +6I1954195C000000036E241264800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000036F241265800?888888888H000000000?000000000?000000000?000000000? +6I1954195C000000036G241266800?108001127A000000000?000000000?000000000?000000000? +6I1954195C000000036H241267800?100000128E000000000?000000000?000000000?000000000? +6I1954195C000000036I241268800?888888888H000000000?000000000?000000000?000000000? +6I1954195C000000037?241269800?221274117G000000000?000000000?000000000?000000000? +6I1954195C000000037A241270800?888888888H000000000?000000000?000000000?000000000? +6I1954195C000000037B241271800?461676163D000000000?000000000?000000000?000000000? +6I1954195C000000037C241272800?211977198I000000000?000000000?000000000?000000000? +6I1954195C000000037D241273800?441677162H000000000?000000000?000000000?000000000? +6I1954195C000000037E241274800?350000126G000000000?000000000?000000000?000000000? +6I1954195C000000037F241275800?300001173D000000000?000000000?000000000?000000000? +6I1954195C000000037G241276800?461393138?000000000?000000000?000000000?000000000? +6I1954195C000000037H241277800?888888888H000000000?000000000?000000000?000000000? +6I1954195C000000037I241278800?601285139?000000000?000000000?000000000?000000000? +6I1954195C000000038?241279800?441383128D000000000?000000000?000000000?000000000? +6I1954195C000000038A241280800?111684138I000000000?000000000?000000000?000000000? +6I1954195C000000038B241281800?000000000A000000000?000000000?000000000?000000000? +6I1954195C000000038C241282800?691635168H000000000?000000000?000000000?000000000? +6I1954195C000000038D241283800?008003126D000000000?000000000?000000000?000000000? +6I1954195C000000038E241284800?310002139E000000000?000000000?000000000?000000000? +6I1954195C000000038F241285800?008003000?000000000?000000000?000000000?000000000? +6I1954195C000000038G241286800?111690144E000000000?000000000?000000000?000000000? +6I1954195C000000038H241287800?101690144E000000000?000000000?000000000?000000000? +6I1954195C000000038I241288800?608001174D000000000?000000000?000000000?000000000? +6I1954195C000000039?241289800?300000110H000000000?000000000?000000000?000000000? +6I1954195C000000039A241290800?191250137A000000000?000000000?000000000?000000000? +6I1954195C000000039B241291800?888888888H000000000?000000000?000000000?000000000? +6I1954195C000000039C241292800?651045134I000000000?000000000?000000000?000000000? +6I1954195C000000039D241293800?000000171F000000000?000000000?000000000?000000000? +6I1954195C000000039E241294800?888888888H000000000?000000000?000000000?000000000? +6I1954195C000000039F241295800?451298174I000000000?000000000?000000000?000000000? +6I1954195C000000039G241296800?191250136H000000000?000000000?000000000?000000000? +6I1954195C000000039H241297800?888888888H000000000?000000000?000000000?000000000? +6I1954195C000000039I241298800?461569167D000000000?000000000?000000000?000000000? +6I1954195C000000040?241299800?441253155D000000000?000000000?000000000?000000000? +6I1954195C000000040A241300800?300003121D000000000?000000000?000000000?000000000? +6I1954195C000000040B241301800?691514146G000000000?000000000?000000000?000000000? +6I1954195C000000040C241302800?691807181H000000000?000000000?000000000?000000000? +6I1954195C000000040D241303800?691256161D000000000?000000000?000000000?000000000? +6I1954195C000000040E241304800?691707166D000000000?000000000?000000000?000000000? +6I1954195C000000040F241305800?691758176A000000000?000000000?000000000?000000000? +6I1954195C000000040G241306800?777777777G000000000?000000000?000000000?000000000? +6I1954195C000000040H241307800?777777777G000000000?000000000?000000000?000000000? +6I1954195C000000040I241308800?777777777G000000000?000000000?000000000?000000000? +6I1954195C000000041?241309800?777777777G000000000?000000000?000000000?000000000? +6I1954195C000000041A241310800?610000147C000000000?000000000?000000000?000000000? +6I1954195C000000041B241311800?300003136I000000000?000000000?000000000?000000000? +6I1954195C000000041C241312800?300003132B000000000?000000000?000000000?000000000? +6I1954195C000000041D241313800?221267137?000000000?000000000?000000000?000000000? +6I1954195C000000041E241314800?777777777G000000000?000000000?000000000?000000000? +6I1954195C000000041F241315800?692222109E000000000?000000000?000000000?000000000? +6I1954195C000000041G241316800?608003153I000000000?000000000?000000000?000000000? +6I1954195C000000041H241317800?777777777G000000000?000000000?000000000?000000000? +6I1954195C000000041I241318800?601285139?000000000?000000000?000000000?000000000? +6I1954195C000000042?241319800?151024113D000000000?000000000?000000000?000000000? +6I1954195C000000042A241320800?151024133E000000000?000000000?000000000?000000000? +6I1954195C000000042B241321800?101024117I000000000?000000000?000000000?000000000? +6I1954195C000000042C241322800?101325133?000000000?000000000?000000000?000000000? +6I1954195C000000042D241323800?777777777G000000000?000000000?000000000?000000000? +6I1954195C000000042E241324800?240000132?000000000?000000000?000000000?000000000? +6I1954195C000000042F241325800?690000800B000000000?000000000?000000000?000000000? +6I1954195C000000042G241326800?111951136E000000000?000000000?000000000?000000000? +6I1954195C000000042H241327800?441315113B000000000?000000000?000000000?000000000? +6I1954195C000000042I241328800?668002134?000000000?000000000?000000000?000000000? +6I1954195C000000043?241329800?201283118G000000000?000000000?000000000?000000000? +6I1954195C000000043A241330800?161283138H000000000?000000000?000000000?000000000? +6I1954195C000000043B241331800?691434153G000000000?000000000?000000000?000000000? +6I1954195C000000043C241332800?608003168I000000000?000000000?000000000?000000000? +6I1954195C000000043D241333800?601242112D000000000?000000000?000000000?000000000? +6I1954195C000000043E241334800?101337142C000000000?000000000?000000000?000000000? +6I1954195C000000043F241335800?108001119C000000000?000000000?000000000?000000000? +6I1954195C000000043G241336800?161142119G000000000?000000000?000000000?000000000? +6I1954195C000000043H241337800?777777777G000000000?000000000?000000000?000000000? +6I1954195C000000043I241338800?658002144E000000000?000000000?000000000?000000000? +6I1954195C000000044?241339800?108001800B000000000?000000000?000000000?000000000? +6I1954195C000000044A241340800?111045136C000000000?000000000?000000000?000000000? +6I1954195C000000044B241341800?350004135I000000000?000000000?000000000?000000000? +6I1954195C000000044C241342800?350007135I000000000?000000000?000000000?000000000? +6I1954195C000000044D241343800?101047100C000000000?000000000?000000000?000000000? +6I1954195C000000044E241344800?601952104B000000000?000000000?000000000?000000000? +6I1954195C000000044F241345800?241061101H000000000?000000000?000000000?000000000? +6I1954195C000000044G241346800?601277158D000000000?000000000?000000000?000000000? +6I1954195C000000044H241347800?111952137B000000000?000000000?000000000?000000000? +6I1954195C000000044I241348800?461156110F000000000?000000000?000000000?000000000? +6I1954195C000000045?241349800?300003115G000000000?000000000?000000000?000000000? +6I1954195C000000045A241350800?300003116I000000000?000000000?000000000?000000000? +6I1954195C000000045B241351800?691464146G000000000?000000000?000000000?000000000? +6I1954195C000000045C241352800?691815181H000000000?000000000?000000000?000000000? +6I1954195C000000045D241353800?691384173I000000000?000000000?000000000?000000000? +6I1954195C000000045E241354800?691385173I000000000?000000000?000000000?000000000? +6I1954195C000000045F241355800?691908176A000000000?000000000?000000000?000000000? +6I1954195C000000045G241356800?777777777G000000000?000000000?000000000?000000000? +6I1954195C000000045H241357800?691360131C000000000?000000000?000000000?000000000? +6I1954195C000000045I241358800?200796090?000000000?000000000?000000000?000000000? +6I1954195C000000046?241359800?658002111G000000000?000000000?000000000?000000000? +6I1954195C000000046A241360800?210000109E000000000?000000000?000000000?000000000? +6I1954195C000000046B241361800?300003131I000000000?000000000?000000000?000000000? +6I1954195C000000046C241362800?151065800B000000000?000000000?000000000?000000000? +6I1954195C000000046D241363800?300003117B000000000?000000000?000000000?000000000? +6I1954195C000000046E241364800?101324168F000000000?000000000?000000000?000000000? +6I1954195C000000046F241365800?441315173C000000000?000000000?000000000?000000000? +6I1954195C000000046G241366800?108001132A000000000?000000000?000000000?000000000? +6I1954195C000000046H241367800?101023132H000000000?000000000?000000000?000000000? +6I1954195C000000046I241368800?608003172H000000000?000000000?000000000?000000000? +6I1954195C000000047?241369800?151072800B000000000?000000000?000000000?000000000? +6I1954195C000000047A241370800?151123800B000000000?000000000?000000000?000000000? +6I1954195C000000047B241371800?608003128?000000000?000000000?000000000?000000000? +6I1954195C000000047C241372800?111277138B000000000?000000000?000000000?000000000? +6I1954195C000000047D241373800?441339127H000000000?000000000?000000000?000000000? +6I1954195C000000047E241374800?693333133H000000000?000000000?000000000?000000000? +6I1954195C000000047F241375800?010000171E000000000?000000000?000000000?000000000? +6I1954195C000000047G241376800?241985139G000000000?000000000?000000000?000000000? +6I1954195C000000047H241377800?691959137F000000000?000000000?000000000?000000000? +6I1954195C000000047I241378800?777777777G000000000?000000000?000000000?000000000? +6I1954195C000000048?241379800?608002173G000000000?000000000?000000000?000000000? +6I1954195C000000048A241380800?601865128C000000000?000000000?000000000?000000000? +6I1954195C000000048B241381800?777777777G000000000?000000000?000000000?000000000? +6I1954195C000000048C241382800?461315174?000000000?000000000?000000000?000000000? +6I1954195C000000048D241383800?310003172B000000000?000000000?000000000?000000000? +6I1954195C000000048E241384800?210000130C000000000?000000000?000000000?000000000? +6I1954195C000000048F241385800?210000130D000000000?000000000?000000000?000000000? +6I1954195C000000048G241386800?651789164C000000000?000000000?000000000?000000000? +6I1954195C000000048H241387800?111490129F000000000?000000000?000000000?000000000? +6I1954195C000000048I241388800?151142119G000000000?000000000?000000000?000000000? +6I1954195C000000049?241389800?191250127E000000000?000000000?000000000?000000000? +6I1954195C000000049A241390800?441346109E000000000?000000000?000000000?000000000? +6I1954195C000000049B241391800?777777777G000000000?000000000?000000000?000000000? +6I1954195C000000049C241392800?161045119I000000000?000000000?000000000?000000000? +6I1954195C000000049D241393800?696666133H000000000?000000000?000000000?000000000? +6I1954195C000000049E241394800?101398172F000000000?000000000?000000000?000000000? +6I1954195C000000049F241395800?350001137I000000000?000000000?000000000?000000000? +6I1954195C000000049G241396800?777777777G000000000?000000000?000000000?000000000? +6I1954195C000000049H241397800?691976134E000000000?000000000?000000000?000000000? +6I1954195C000000049I241398800?157079631H000000000?000000000?000000000?000000000? +6I1954195C000000050?241399800?300003135G000000000?000000000?000000000?000000000? +6I1954195C000000050A241400800?691318117D000000000?000000000?000000000?000000000? +6I1954195C000000050B241401800?010000113A000000000?000000000?000000000?000000000? +6I1954195C000000050C241402800?608003155I000000000?000000000?000000000?000000000? +6I1954195C000000050D241403800?360000152A000000000?000000000?000000000?000000000? +6I1954195C000000050E241404800?211009141D000000000?000000000?000000000?000000000? +6I1954195C000000050F241405800?300002141A000000000?000000000?000000000?000000000? +6I1954195C000000050G241406800?151409800B000000000?000000000?000000000?000000000? +6I1954195C000000050H241407800?350002166C000000000?000000000?000000000?000000000? +6I1954195C000000050I241408800?151272142I000000000?000000000?000000000?000000000? +6I1954195C000000051?241409800?600000144F000000000?000000000?000000000?000000000? +6I1954195C000000051A241410800?691964116H000000000?000000000?000000000?000000000? +6I1954195C000000051B241411800?201265146H000000000?000000000?000000000?000000000? +6I1954195C000000051C241412800?691272163I000000000?000000000?000000000?000000000? +6I1954195C000000051D241413800?158001142I000000000?000000000?000000000?000000000? +6I1954195C000000051E241414800?651023142G000000000?000000000?000000000?000000000? +6I1954195C000000051F241415800?451418146I000000000?000000000?000000000?000000000? +6I1954195C000000051G241416800?191270144H000000000?000000000?000000000?000000000? +6I1954195C000000051H241417800?461420142A000000000?000000000?000000000?000000000? +6I1954195C000000051I241418800?461422142C000000000?000000000?000000000?000000000? +6I1954195C000000052?241419800?000000002E000000000?000000000?000000000?000000000? +6I1954195C000000052A241420800?691424147G000000000?000000000?000000000?000000000? +6I1954195C000000052B241421800?691524147G000000000?000000000?000000000?000000000? +6I1954195C000000052C241422800?608001144E000000000?000000000?000000000?000000000? +6I1954195C000000052D241423800?601278144E000000000?000000000?000000000?000000000? +6I1954195C000000052E241424800?211285143H000000000?000000000?000000000?000000000? +6I1954195C000000052F241425800?241485148H000000000?000000000?000000000?000000000? +6I1954195C000000052G241426800?191252171H000000000?000000000?000000000?000000000? +6I1954195C000000052H241427800?451430109E000000000?000000000?000000000?000000000? +6I1954195C000000052I241428800?441431163B000000000?000000000?000000000?000000000? +6I1954195C000000053?241429800?350002143E000000000?000000000?000000000?000000000? +6I1954195C000000053A241430800?300003143I000000000?000000000?000000000?000000000? +6I1954195C000000053B241431800?601434167E000000000?000000000?000000000?000000000? +6I1954195C000000053C241432800?691250163I000000000?000000000?000000000?000000000? +6I1954195C000000053D241433800?310000141C000000000?000000000?000000000?000000000? +6I1954195C000000053E241434800?100000005?000000000?000000000?000000000?000000000? +6I1954195C000000053F241435800?441489144?000000000?000000000?000000000?000000000? +6I1954195C000000053G241436800?221639144B000000000?000000000?000000000?000000000? +6I1954195C000000053H241437800?678003149E000000000?000000000?000000000?000000000? +6I1954195C000000053I241438800?601665152B000000000?000000000?000000000?000000000? +6I1954195C000000054?241439800?151443144G000000000?000000000?000000000?000000000? +6I1954195C000000054A241440800?451494144E000000000?000000000?000000000?000000000? +6I1954195C000000054B241441800?600000155C000000000?000000000?000000000?000000000? +6I1954195C000000054C241442800?451697124G000000000?000000000?000000000?000000000? +6I1954195C000000054D241443800?240000109E000000000?000000000?000000000?000000000? +6I1954195C000000054E241444800?490000000?000000000?000000000?000000000?000000000? +6I1954195C000000054F241445800?210000140D000000000?000000000?000000000?000000000? +6I1954195C000000054G241446800?210000140E000000000?000000000?000000000?000000000? +6I1954195C000000054H241447800?690000800B000000000?000000000?000000000?000000000? +6I1954195C000000054I241448800?608003160H000000000?000000000?000000000?000000000? +6I1954195C000000055?241449800?300003145G000000000?000000000?000000000?000000000? +6I1954195C000000055A241450800?651961131A000000000?000000000?000000000?000000000? +6I1954195C000000055B241451800?211606160I000000000?000000000?000000000?000000000? +6I1954195C000000055C241452800?000404099H000000000?000000000?000000000?000000000? +6I1954195C000000055D241453800?601009096E000000000?000000000?000000000?000000000? +6I1954195C000000055E241454800?000000109E000000000?000000000?000000000?000000000? +6I1954195C000000055F241455800?151561800B000000000?000000000?000000000?000000000? +6I1954195C000000055G241456800?010000000?000000000?000000000?000000000?000000000? +6I1954195C000000055H241457800?151460800B000000000?000000000?000000000?000000000? +6I1954195C000000055I241458800?441462151B000000000?000000000?000000000?000000000? +6I1954195C000000056?241459800?211264141G000000000?000000000?000000000?000000000? +6I1954195C000000056A241460800?600000147C000000000?000000000?000000000?000000000? +6I1954195C000000056B241461800?181265147A000000000?000000000?000000000?000000000? +6I1954195C000000056C241462800?461615139C000000000?000000000?000000000?000000000? +6I1954195C000000056D241463800?115129277F000000000?000000000?000000000?000000000? +6I1954195C000000056E241464800?221495150B000000000?000000000?000000000?000000000? +6I1954195C000000056F241465800?201270147D000000000?000000000?000000000?000000000? +6I1954195C000000056G241466800?191270169D000000000?000000000?000000000?000000000? +6I1954195C000000056H241467800?300003142E000000000?000000000?000000000?000000000? +6I1954195C000000056I241468800?211272147E000000000?000000000?000000000?000000000? +6I1954195C000000057?241469800?461472162C000000000?000000000?000000000?000000000? +6I1954195C000000057A241470800?350001142H000000000?000000000?000000000?000000000? +6I1954195C000000057B241471800?350002157G000000000?000000000?000000000?000000000? +6I1954195C000000057C241472800?651250141B000000000?000000000?000000000?000000000? +6I1954195C000000057D241473800?211278148C000000000?000000000?000000000?000000000? +6I1954195C000000057E241474800?211278168A000000000?000000000?000000000?000000000? +6I1954195C000000057F241475800?601278158C000000000?000000000?000000000?000000000? +6I1954195C000000057G241476800?101886174A000000000?000000000?000000000?000000000? +6I1954195C000000057H241477800?241480163C000000000?000000000?000000000?000000000? +6I1954195C000000057I241478800?691481148E000000000?000000000?000000000?000000000? +6I1954195C000000058?241479800?608003148G000000000?000000000?000000000?000000000? +6I1954195C000000058A241480800?211285143H000000000?000000000?000000000?000000000? +6I1954195C000000058B241481800?300000146E000000000?000000000?000000000?000000000? +6I1954195C000000058C241482800?350000146E000000000?000000000?000000000?000000000? +6I1954195C000000058D241483800?651289149C000000000?000000000?000000000?000000000? +6I1954195C000000058E241484800?310002174C000000000?000000000?000000000?000000000? +6I1954195C000000058F241485800?221495150B000000000?000000000?000000000?000000000? +6I1954195C000000058G241486800?691241116H000000000?000000000?000000000?000000000? +6I1954195C000000058H241487800?300002154D000000000?000000000?000000000?000000000? +6I1954195C000000058I241488800?151441800B000000000?000000000?000000000?000000000? +6I1954195C000000059?241489800?310003149I000000000?000000000?000000000?000000000? +6I1954195C000000059A241490800?004673765F000000000?000000000?000000000?000000000? +6I1954195C000000059B241491800?461594139C000000000?000000000?000000000?000000000? +6I1954195C000000059C241492800?651045144I000000000?000000000?000000000?000000000? +6I1954195C000000059D241493800?451496149G000000000?000000000?000000000?000000000? +6I1954195C000000059E241494800?608002140C000000000?000000000?000000000?000000000? +6I1954195C000000059F241495800?000000146E000000000?000000000?000000000?000000000? +6I1954195C000000059G241496800?300003140F000000000?000000000?000000000?000000000? +6I1954195C000000059H241497800?600000140E000000000?000000000?000000000?000000000? +6I1954195C000000059I241498800?350002156F000000000?000000000?000000000?000000000? +6I1954195C000000060?241499800?461652170C000000000?000000000?000000000?000000000? +6I1954195C000000060A241500800?651104116C000000000?000000000?000000000?000000000? +6I1954195C000000060B241501800?241265161I000000000?000000000?000000000?000000000? +6I1954195C000000060C241502800?671264166I000000000?000000000?000000000?000000000? +6I1954195C000000060D241503800?300005141E000000000?000000000?000000000?000000000? +6I1954195C000000060E241504800?434294481I000000000?000000000?000000000?000000000? +6I1954195C000000060F241505800?691261158E000000000?000000000?000000000?000000000? +6I1954195C000000060G241506800?000255491H000000000?000000000?000000000?000000000? +6I1954195C000000060H241507800?158001156C000000000?000000000?000000000?000000000? +6I1954195C000000060I241508800?600000165E000000000?000000000?000000000?000000000? +6I1954195C000000061?241509800?191264163A000000000?000000000?000000000?000000000? +6I1954195C000000061A241510800?181267162A000000000?000000000?000000000?000000000? +6I1954195C000000061B241511800?441515131F000000000?000000000?000000000?000000000? +6I1954195C000000061C241512800?300005152E000000000?000000000?000000000?000000000? +6I1954195C000000061D241513800?066273088D000000000?000000000?000000000?000000000? +6I1954195C000000061E241514800?221495155A000000000?000000000?000000000?000000000? +6I1954195C000000061F241515800?211270152C000000000?000000000?000000000?000000000? +6I1954195C000000061G241516800?191270169E000000000?000000000?000000000?000000000? +6I1954195C000000061H241517800?191270160B000000000?000000000?000000000?000000000? +6I1954195C000000061I241518800?000000005?000000000?000000000?000000000?000000000? +6I1954195C000000062?241519800?300004163?000000000?000000000?000000000?000000000? +6I1954195C000000062A241520800?198003148?000000000?000000000?000000000?000000000? +6I1954195C000000062B241521800?118002147I000000000?000000000?000000000?000000000? +6I1954195C000000062C241522800?300002167I000000000?000000000?000000000?000000000? +6I1954195C000000062D241523800?201277153?000000000?000000000?000000000?000000000? +6I1954195C000000062E241524800?658003168G000000000?000000000?000000000?000000000? +6I1954195C000000062F241525800?461478152I000000000?000000000?000000000?000000000? +6I1954195C000000062G241526800?691886174B000000000?000000000?000000000?000000000? +6I1954195C000000062H241527800?451680144E000000000?000000000?000000000?000000000? +6I1954195C000000062I241528800?461581153B000000000?000000000?000000000?000000000? +6I1954195C000000063?241529800?691482148E000000000?000000000?000000000?000000000? +6I1954195C000000063A241530800?601283153G000000000?000000000?000000000?000000000? +6I1954195C000000063B241531800?201285158H000000000?000000000?000000000?000000000? +6I1954195C000000063C241532800?171285153I000000000?000000000?000000000?000000000? +6I1954195C000000063D241533800?310003174C000000000?000000000?000000000?000000000? +6I1954195C000000063E241534800?079689679C000000000?000000000?000000000?000000000? +6I1954195C000000063F241535800?350000171F000000000?000000000?000000000?000000000? +6I1954195C000000063G241536800?658002154E000000000?000000000?000000000?000000000? +6I1954195C000000063H241537800?300002154C000000000?000000000?000000000?000000000? +6I1954195C000000063I241538800?151691129E000000000?000000000?000000000?000000000? +6I1954195C000000064?241539800?350002144E000000000?000000000?000000000?000000000? +6I1954195C000000064A241540800?618003174H000000000?000000000?000000000?000000000? +6I1954195C000000064B241541800?161444165?000000000?000000000?000000000?000000000? +6I1954195C000000064C241542800?651045159I000000000?000000000?000000000?000000000? +6I1954195C000000064D241543800?441547144E000000000?000000000?000000000?000000000? +6I1954195C000000064E241544800?461461161A000000000?000000000?000000000?000000000? +6I1954195C000000064F241545800?300003145E000000000?000000000?000000000?000000000? +6I1954195C000000064G241546800?601252156D000000000?000000000?000000000?000000000? +6I1954195C000000064H241547800?211252155F000000000?000000000?000000000?000000000? +6I1954195C000000064I241548800?000093264C000000000?000000000?000000000?000000000? +6I1954195C000000065?241549800?300003155G000000000?000000000?000000000?000000000? +6I1954195C000000065A241550800?350001145H000000000?000000000?000000000?000000000? +6I1954195C000000065B241551800?601504150I000000000?000000000?000000000?000000000? +6I1954195C000000065C241552800?608003160I000000000?000000000?000000000?000000000? +6I1954195C000000065D241553800?300002145I000000000?000000000?000000000?000000000? +6I1954195C000000065E241554800?461507125H000000000?000000000?000000000?000000000? +6I1954195C000000065F241555800?601167157H000000000?000000000?000000000?000000000? +6I1954195C000000065G241556800?688002156E000000000?000000000?000000000?000000000? +6I1954195C000000065H241557800?151560800B000000000?000000000?000000000?000000000? +6I1954195C000000065I241558800?101562161G000000000?000000000?000000000?000000000? +6I1954195C000000066?241559800?101463151G000000000?000000000?000000000?000000000? +6I1954195C000000066A241560800?600000157H000000000?000000000?000000000?000000000? +6I1954195C000000066B241561800?600000157D000000000?000000000?000000000?000000000? +6I1954195C000000066C241562800?025439357E000000000?000000000?000000000?000000000? +6I1954195C000000066D241563800?608002157A000000000?000000000?000000000?000000000? +6I1954195C000000066E241564800?191270164H000000000?000000000?000000000?000000000? +6I1954195C000000066F241565800?151568157C000000000?000000000?000000000?000000000? +6I1954195C000000066G241566800?608002162E000000000?000000000?000000000?000000000? +6I1954195C000000066H241567800?191270140B000000000?000000000?000000000?000000000? +6I1954195C000000066I241568800?490000000?000000000?000000000?000000000?000000000? +6I1954195C000000067?241569800?681272162G000000000?000000000?000000000?000000000? +6I1954195C000000067A241570800?201278193A000000000?000000000?000000000?000000000? +6I1954195C000000067B241571800?300002152H000000000?000000000?000000000?000000000? +6I1954195C000000067C241572800?000151484B000000000?000000000?000000000?000000000? +6I1954195C000000067D241573800?181277153A000000000?000000000?000000000?000000000? +6I1954195C000000067E241574800?211278158B000000000?000000000?000000000?000000000? +6I1954195C000000067F241575800?688002153H000000000?000000000?000000000?000000000? +6I1954195C000000067G241576800?111886174B000000000?000000000?000000000?000000000? +6I1954195C000000067H241577800?108002144E000000000?000000000?000000000?000000000? +6I1954195C000000067I241578800?211283158F000000000?000000000?000000000?000000000? +6I1954195C000000068?241579800?241283153F000000000?000000000?000000000?000000000? +6I1954195C000000068A241580800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000068B241581800?181285153I000000000?000000000?000000000?000000000? +6I1954195C000000068C241582800?300002168I000000000?000000000?000000000?000000000? +6I1954195C000000068D241583800?300002158I000000000?000000000?000000000?000000000? +6I1954195C000000068E241584800?101952116F000000000?000000000?000000000?000000000? +6I1954195C000000068F241585800?241539169H000000000?000000000?000000000?000000000? +6I1954195C000000068G241586800?651289159C000000000?000000000?000000000?000000000? +6I1954195C000000068H241587800?000000005?000000000?000000000?000000000?000000000? +6I1954195C000000068I241588800?461591159E000000000?000000000?000000000?000000000? +6I1954195C000000069?241589800?201293169F000000000?000000000?000000000?000000000? +6I1954195C000000069A241590800?601952136D000000000?000000000?000000000?000000000? +6I1954195C000000069B241591800?441595154F000000000?000000000?000000000?000000000? +6I1954195C000000069C241592800?651045154I000000000?000000000?000000000?000000000? +6I1954195C000000069D241593800?451596159G000000000?000000000?000000000?000000000? +6I1954195C000000069E241594800?601548151F000000000?000000000?000000000?000000000? +6I1954195C000000069F241595800?695555133H000000000?000000000?000000000?000000000? +6I1954195C000000069G241596800?300003160E000000000?000000000?000000000?000000000? +6I1954195C000000069H241597800?600000165E000000000?000000000?000000000?000000000? +6I1954195C000000069I241598800?608003155H000000000?000000000?000000000?000000000? +6I1954195C000000070?241599800?300003120G000000000?000000000?000000000?000000000? +6I1954195C000000070A241600800?651023118I000000000?000000000?000000000?000000000? +6I1954195C000000070B241601800?350001170I000000000?000000000?000000000?000000000? +6I1954195C000000070C241602800?608003166B000000000?000000000?000000000?000000000? +6I1954195C000000070D241603800?678002166A000000000?000000000?000000000?000000000? +6I1954195C000000070E241604800?350002161F000000000?000000000?000000000?000000000? +6I1954195C000000070F241605800?151508800B000000000?000000000?000000000?000000000? +6I1954195C000000070G241606800?300002161C000000000?000000000?000000000?000000000? +6I1954195C000000070H241607800?151610800B000000000?000000000?000000000?000000000? +6I1954195C000000070I241608800?101612166G000000000?000000000?000000000?000000000? +6I1954195C000000071?241609800?101513156G000000000?000000000?000000000?000000000? +6I1954195C000000071A241610800?600000167C000000000?000000000?000000000?000000000? +6I1954195C000000071B241611800?171265147A000000000?000000000?000000000?000000000? +6I1954195C000000071C241612800?007295173G000000000?000000000?000000000?000000000? +6I1954195C000000071D241613800?201267162?000000000?000000000?000000000?000000000? +6I1954195C000000071E241614800?241267172A000000000?000000000?000000000?000000000? +6I1954195C000000071F241615800?601434144E000000000?000000000?000000000?000000000? +6I1954195C000000071G241616800?108002167E000000000?000000000?000000000?000000000? +6I1954195C000000071H241617800?191270155B000000000?000000000?000000000?000000000? +6I1954195C000000071I241618800?159154943?000000000?000000000?000000000?000000000? +6I1954195C000000072?241619800?651272143B000000000?000000000?000000000?000000000? +6I1954195C000000072A241620800?211274152G000000000?000000000?000000000?000000000? +6I1954195C000000072B241621800?461624159E000000000?000000000?000000000?000000000? +6I1954195C000000072C241622800?691576157I000000000?000000000?000000000?000000000? +6I1954195C000000072D241623800?691293150A000000000?000000000?000000000?000000000? +6I1954195C000000072E241624800?441595167H000000000?000000000?000000000?000000000? +6I1954195C000000072F241625800?101278168C000000000?000000000?000000000?000000000? +6I1954195C000000072G241626800?211283163F000000000?000000000?000000000?000000000? +6I1954195C000000072H241627800?151444160A000000000?000000000?000000000?000000000? +6I1954195C000000072I241628800?691281148D000000000?000000000?000000000?000000000? +6I1954195C000000073?241629800?350001168E000000000?000000000?000000000?000000000? +6I1954195C000000073A241630800?691433143F000000000?000000000?000000000?000000000? +6I1954195C000000073B241631800?350002143G000000000?000000000?000000000?000000000? +6I1954195C000000073C241632800?310002164A000000000?000000000?000000000?000000000? +6I1954195C000000073D241633800?678002154A000000000?000000000?000000000?000000000? +6I1954195C000000073E241634800?118001174H000000000?000000000?000000000?000000000? +6I1954195C000000073F241635800?300000171F000000000?000000000?000000000?000000000? +6I1954195C000000073G241636800?651289164C000000000?000000000?000000000?000000000? +6I1954195C000000073H241637800?300002169C000000000?000000000?000000000?000000000? +6I1954195C000000073I241638800?601291164E000000000?000000000?000000000?000000000? +6I1954195C000000074?241639800?310000141C000000000?000000000?000000000?000000000? +6I1954195C000000074A241640800?658003167B000000000?000000000?000000000?000000000? +6I1954195C000000074B241641800?151444160D000000000?000000000?000000000?000000000? +6I1954195C000000074C241642800?651045169I000000000?000000000?000000000?000000000? +6I1954195C000000074D241643800?451646164G000000000?000000000?000000000?000000000? +6I1954195C000000074E241644800?671297165A000000000?000000000?000000000?000000000? +6I1954195C000000074F241645800?641268171G000000000?000000000?000000000?000000000? +6I1954195C000000074G241646800?300003165F000000000?000000000?000000000?000000000? +6I1954195C000000074H241647800?600000160F000000000?000000000?000000000?000000000? +6I1954195C000000074I241648800?350004125I000000000?000000000?000000000?000000000? +6I1954195C000000075?241649800?300003165G000000000?000000000?000000000?000000000? +6I1954195C000000075A241650800?608003140G000000000?000000000?000000000?000000000? +6I1954195C000000075B241651800?161654151?000000000?000000000?000000000?000000000? +6I1954195C000000075C241652800?161456146A000000000?000000000?000000000?000000000? +6I1954195C000000075D241653800?101506146F000000000?000000000?000000000?000000000? +6I1954195C000000075E241654800?500000000?000000000?000000000?000000000?000000000? +6I1954195C000000075F241655800?300002151A000000000?000000000?000000000?000000000? +6I1954195C000000075G241656800?151659800B000000000?000000000?000000000?000000000? +6I1954195C000000075H241657800?151660800B000000000?000000000?000000000?000000000? +6I1954195C000000075I241658800?001742112?000000000?000000000?000000000?000000000? +6I1954195C000000076?241659800?600000160F000000000?000000000?000000000?000000000? +6I1954195C000000076A241660800?610000157H000000000?000000000?000000000?000000000? +6I1954195C000000076B241661800?181265151I000000000?000000000?000000000?000000000? +6I1954195C000000076C241662800?101665152?000000000?000000000?000000000?000000000? +6I1954195C000000076D241663800?211268167A000000000?000000000?000000000?000000000? +6I1954195C000000076E241664800?241267162B000000000?000000000?000000000?000000000? +6I1954195C000000076F241665800?100000000?000000000?000000000?000000000?000000000? +6I1954195C000000076G241666800?441569167D000000000?000000000?000000000?000000000? +6I1954195C000000076H241667800?191270159H000000000?000000000?000000000?000000000? +6I1954195C000000076I241668800?191572173?000000000?000000000?000000000?000000000? +6I1954195C000000077?241669800?350002149E000000000?000000000?000000000?000000000? +6I1954195C000000077A241670800?694444123?000000000?000000000?000000000?000000000? +6I1954195C000000077B241671800?601274162I000000000?000000000?000000000?000000000? +6I1954195C000000077C241672800?350001127I000000000?000000000?000000000?000000000? +6I1954195C000000077D241673800?451626137D000000000?000000000?000000000?000000000? +6I1954195C000000077E241674800?601278144E000000000?000000000?000000000?000000000? +6I1954195C000000077F241675800?111278144E000000000?000000000?000000000?000000000? +6I1954195C000000077G241676800?108001154?000000000?000000000?000000000?000000000? +6I1954195C000000077H241677800?691580153C000000000?000000000?000000000?000000000? +6I1954195C000000077I241678800?201285163H000000000?000000000?000000000?000000000? +6I1954195C000000078?241679800?641285147?000000000?000000000?000000000?000000000? +6I1954195C000000078A241680800?601283163G000000000?000000000?000000000?000000000? +6I1954195C000000078B241681800?111587149A000000000?000000000?000000000?000000000? +6I1954195C000000078C241682800?691535173H000000000?000000000?000000000?000000000? +6I1954195C000000078D241683800?101587144E000000000?000000000?000000000?000000000? +6I1954195C000000078E241684800?645963711A000000000?000000000?000000000?000000000? +6I1954195C000000078F241685800?211291164D000000000?000000000?000000000?000000000? +6I1954195C000000078G241686800?101951105F000000000?000000000?000000000?000000000? +6I1954195C000000078H241687800?310001149H000000000?000000000?000000000?000000000? +6I1954195C000000078I241688800?221293171E000000000?000000000?000000000?000000000? +6I1954195C000000079?241689800?211252126G000000000?000000000?000000000?000000000? +6I1954195C000000079A241690800?000000005?000000000?000000000?000000000?000000000? +6I1954195C000000079B241691800?470000000?000000000?000000000?000000000?000000000? +6I1954195C000000079C241692800?651045164I000000000?000000000?000000000?000000000? +6I1954195C000000079D241693800?201297165?000000000?000000000?000000000?000000000? +6I1954195C000000079E241694800?608003125D000000000?000000000?000000000?000000000? +6I1954195C000000079F241695800?608003165C000000000?000000000?000000000?000000000? +6I1954195C000000079G241696800?211250160C000000000?000000000?000000000?000000000? +6I1954195C000000079H241697800?690000150C000000000?000000000?000000000?000000000? +6I1954195C000000079I241698800?201289155E000000000?000000000?000000000?000000000? +6I1954195C000000080?241699800?300003160G000000000?000000000?000000000?000000000? +6I1954195C000000080A241700800?661023118I000000000?000000000?000000000?000000000? +6I1954195C000000080B241701800?157079632G000000000?000000000?000000000?000000000? +6I1954195C000000080C241702800?000003000?000000000?000000000?000000000?000000000? +6I1954195C000000080D241703800?151456161A000000000?000000000?000000000?000000000? +6I1954195C000000080E241704800?108003171C000000000?000000000?000000000?000000000? +6I1954195C000000080F241705800?108001126B000000000?000000000?000000000?000000000? +6I1954195C000000080G241706800?118001154?000000000?000000000?000000000?000000000? +6I1954195C000000080H241707800?688002162G000000000?000000000?000000000?000000000? +6I1954195C000000080I241708800?151711166F000000000?000000000?000000000?000000000? +6I1954195C000000081?241709800?441276171D000000000?000000000?000000000?000000000? +6I1954195C000000081A241710800?461375171E000000000?000000000?000000000?000000000? +6I1954195C000000081B241711800?997500000?000000000?000000000?000000000?000000000? +6I1954195C000000081C241712800?608003166H000000000?000000000?000000000?000000000? +6I1954195C000000081D241713800?108003128C000000000?000000000?000000000?000000000? +6I1954195C000000081E241714800?300005172G000000000?000000000?000000000?000000000? +6I1954195C000000081F241715800?601618142F000000000?000000000?000000000?000000000? +6I1954195C000000081G241716800?300001172C000000000?000000000?000000000?000000000? +6I1954195C000000081H241717800?350001127C000000000?000000000?000000000?000000000? +6I1954195C000000081I241718800?350002129C000000000?000000000?000000000?000000000? +6I1954195C000000082?241719800?161024132I000000000?000000000?000000000?000000000? +6I1954195C000000082A241720800?441383172D000000000?000000000?000000000?000000000? +6I1954195C000000082B241721800?691526157I000000000?000000000?000000000?000000000? +6I1954195C000000082C241722800?350002137I000000000?000000000?000000000?000000000? +6I1954195C000000082D241723800?461476174A000000000?000000000?000000000?000000000? +6I1954195C000000082E241724800?201285128H000000000?000000000?000000000?000000000? +6I1954195C000000082F241725800?461286128G000000000?000000000?000000000?000000000? +6I1954195C000000082G241726800?191285164?000000000?000000000?000000000?000000000? +6I1954195C000000082H241727800?461682128B000000000?000000000?000000000?000000000? +6I1954195C000000082I241728800?101534129?000000000?000000000?000000000?000000000? +6I1954195C000000083?241729800?691732173E000000000?000000000?000000000?000000000? +6I1954195C000000083A241730800?608003138G000000000?000000000?000000000?000000000? +6I1954195C000000083B241731800?054041950?000000000?000000000?000000000?000000000? +6I1954195C000000083C241732800?350002144E000000000?000000000?000000000?000000000? +6I1954195C000000083D241733800?601291134G000000000?000000000?000000000?000000000? +6I1954195C000000083E241734800?608003139D000000000?000000000?000000000?000000000? +6I1954195C000000083F241735800?241539104C000000000?000000000?000000000?000000000? +6I1954195C000000083G241736800?701951132F000000000?000000000?000000000?000000000? +6I1954195C000000083H241737800?360000126C000000000?000000000?000000000?000000000? +6I1954195C000000083I241738800?221293174F000000000?000000000?000000000?000000000? +6I1954195C000000084?241739800?241293150E000000000?000000000?000000000?000000000? +6I1954195C000000084A241740800?211285159?000000000?000000000?000000000?000000000? +6I1954195C000000084B241741800?618003170D000000000?000000000?000000000?000000000? +6I1954195C000000084C241742800?108001174G000000000?000000000?000000000?000000000? +6I1954195C000000084D241743800?350002129I000000000?000000000?000000000?000000000? +6I1954195C000000084E241744800?198001174E000000000?000000000?000000000?000000000? +6I1954195C000000084F241745800?211250171B000000000?000000000?000000000?000000000? +6I1954195C000000084G241746800?151702171?000000000?000000000?000000000?000000000? +6I1954195C000000084H241747800?461705170F000000000?000000000?000000000?000000000? +6I1954195C000000084I241748800?300009172?000000000?000000000?000000000?000000000? +6I1954195C000000085?241749800?671252170H000000000?000000000?000000000?000000000? +6I1954195C000000085A241750800?441854180D000000000?000000000?000000000?000000000? +6I1954195C000000085B241751800?608003180I000000000?000000000?000000000?000000000? +6I1954195C000000085C241752800?441755175F000000000?000000000?000000000?000000000? +6I1954195C000000085D241753800?691906190I000000000?000000000?000000000?000000000? +6I1954195C000000085E241754800?221260176C000000000?000000000?000000000?000000000? +6I1954195C000000085F241755800?601759191C000000000?000000000?000000000?000000000? +6I1954195C000000085G241756800?651293114G000000000?000000000?000000000?000000000? +6I1954195C000000085H241757800?211265176H000000000?000000000?000000000?000000000? +6I1954195C000000085I241758800?000000144E000000000?000000000?000000000?000000000? +6I1954195C000000086?241759800?060000000?000000000?000000000?000000000?000000000? +6I1954195C000000086A241760800?191250178G000000000?000000000?000000000?000000000? +6I1954195C000000086B241761800?241264191G000000000?000000000?000000000?000000000? +6I1954195C000000086C241762800?191250179?000000000?000000000?000000000?000000000? +6I1954195C000000086D241763800?461766191H000000000?000000000?000000000?000000000? +6I1954195C000000086E241764800?641277190B000000000?000000000?000000000?000000000? +6I1954195C000000086F241765800?118002186D000000000?000000000?000000000?000000000? +6I1954195C000000086G241766800?601919192C000000000?000000000?000000000?000000000? +6I1954195C000000086H241767800?608001182C000000000?000000000?000000000?000000000? +6I1954195C000000086I241768800?461771177B000000000?000000000?000000000?000000000? +6I1954195C000000087?241769800?691922177G000000000?000000000?000000000?000000000? +6I1954195C000000087A241770800?691924177G000000000?000000000?000000000?000000000? +6I1954195C000000087B241771800?691774177H000000000?000000000?000000000?000000000? +6I1954195C000000087C241772800?691775177H000000000?000000000?000000000?000000000? +6I1954195C000000087D241773800?350001177I000000000?000000000?000000000?000000000? +6I1954195C000000087E241774800?618003126D000000000?000000000?000000000?000000000? +6I1954195C000000087F241775800?608003126D000000000?000000000?000000000?000000000? +6I1954195C000000087G241776800?181818181H000000000?000000000?000000000?000000000? +6I1954195C000000087H241777800?241285178H000000000?000000000?000000000?000000000? +6I1954195C000000087I241778800?241283178F000000000?000000000?000000000?000000000? +6I1954195C000000088?241779800?441783178D000000000?000000000?000000000?000000000? +6I1954195C000000088A241780800?601293179G000000000?000000000?000000000?000000000? +6I1954195C000000088B241781800?678002178I000000000?000000000?000000000?000000000? +6I1954195C000000088C241782800?101785179A000000000?000000000?000000000?000000000? +6I1954195C000000088D241783800?461937193?000000000?000000000?000000000?000000000? +6I1954195C000000088E241784800?300005189G000000000?000000000?000000000?000000000? +6I1954195C000000088F241785800?200000000?000000000?000000000?000000000?000000000? +6I1954195C000000088G241786800?688002179E000000000?000000000?000000000?000000000? +6I1954195C000000088H241787800?608003114F000000000?000000000?000000000?000000000? +6I1954195C000000088I241788800?350001126?000000000?000000000?000000000?000000000? +6I1954195C000000089?241789800?201293179F000000000?000000000?000000000?000000000? +6I1954195C000000089A241790800?608003179H000000000?000000000?000000000?000000000? +6I1954195C000000089B241791800?191278193B000000000?000000000?000000000?000000000? +6I1954195C000000089C241792800?608003189I000000000?000000000?000000000?000000000? +6I1954195C000000089D241793800?310002191F000000000?000000000?000000000?000000000? +6I1954195C000000089E241794800?572957805A000000000?000000000?000000000?000000000? +6I1954195C000000089F241795800?151568177C000000000?000000000?000000000?000000000? +6I1954195C000000089G241796800?151799175B000000000?000000000?000000000?000000000? +6I1954195C000000089H241797800?111759176D000000000?000000000?000000000?000000000? +6I1954195C000000089I241798800?111855191D000000000?000000000?000000000?000000000? +6I1954195C000000090?241799800?972000000?000000000?000000000?000000000?000000000? +6I1954195C000000090A241800800?000000097?000000000?000000000?000000000?000000000? +6I1954195C000000090B241801800?500000000?000000000?000000000?000000000?000000000? +6I1954195C000000090C241802800?111869189A000000000?000000000?000000000?000000000? +6I1954195C000000090D241803800?191806188B000000000?000000000?000000000?000000000? +6I1954195C000000090E241804800?461808181A000000000?000000000?000000000?000000000? +6I1954195C000000090F241805800?300001186F000000000?000000000?000000000?000000000? +6I1954195C000000090G241806800?230258509C000000000?000000000?000000000?000000000? +6I1954195C000000090H241807800?101274182I000000000?000000000?000000000?000000000? +6I1954195C000000090I241808800?151272187I000000000?000000000?000000000?000000000? +6I1954195C000000091?241809800?111812181G000000000?000000000?000000000?000000000? +6I1954195C000000091A241810800?158001181I000000000?000000000?000000000?000000000? +6I1954195C000000091B241811800?161272187H000000000?000000000?000000000?000000000? +6I1954195C000000091C241812800?002718281H000000000?000000000?000000000?000000000? +6I1954195C000000091D241813800?691816187?000000000?000000000?000000000?000000000? +6I1954195C000000091E241814800?691867187?000000000?000000000?000000000?000000000? +6I1954195C000000091F241815800?101274188A000000000?000000000?000000000?000000000? +6I1954195C000000091G241816800?165000000?000000000?000000000?000000000?000000000? +6I1954195C000000091H241817800?461820187A000000000?000000000?000000000?000000000? +6I1954195C000000091I241818800?241821182D000000000?000000000?000000000?000000000? +6I1954195C000000092?241819800?350004188?000000000?000000000?000000000?000000000? +6I1954195C000000092A241820800?108001182E000000000?000000000?000000000?000000000? +6I1954195C000000092B241821800?101274000?000000000?000000000?000000000?000000000? +6I1954195C000000092C241822800?300001188B000000000?000000000?000000000?000000000? +6I1954195C000000092D241823800?191776189D000000000?000000000?000000000?000000000? +6I1954195C000000092E241824800?300003183C000000000?000000000?000000000?000000000? +6I1954195C000000092F241825800?191828181D000000000?000000000?000000000?000000000? +6I1954195C000000092G241826800?211285188H000000000?000000000?000000000?000000000? +6I1954195C000000092H241827800?191830181C000000000?000000000?000000000?000000000? +6I1954195C000000092I241828800?606530659G000000000?000000000?000000000?000000000? +6I1954195C000000093?241829800?211285183H000000000?000000000?000000000?000000000? +6I1954195C000000093A241830800?192049908F000000000?000000000?000000000?000000000? +6I1954195C000000093B241831800?300002183G000000000?000000000?000000000?000000000? +6I1954195C000000093C241832800?000000005B000000000?000000000?000000000?000000000? +6I1954195C000000093D241833800?151836800B000000000?000000000?000000000?000000000? +6I1954195C000000093E241834800?310002184C000000000?000000000?000000000?000000000? +6I1954195C000000093F241835800?350004184F000000000?000000000?000000000?000000000? +6I1954195C000000093G241836800?600000183A000000000?000000000?000000000?000000000? +6I1954195C000000093H241837800?201291184D000000000?000000000?000000000?000000000? +6I1954195C000000093I241838800?601291184E000000000?000000000?000000000?000000000? +6I1954195C000000094?241839800?191842182F000000000?000000000?000000000?000000000? +6I1954195C000000094A241840800?300008181?000000000?000000000?000000000?000000000? +6I1954195C000000094B241841800?211297180B000000000?000000000?000000000?000000000? +6I1954195C000000094C241842800?434294481I000000000?000000000?000000000?000000000? +6I1954195C000000094D241843800?350002175?000000000?000000000?000000000?000000000? +6I1954195C000000094E241844800?441847139C000000000?000000000?000000000?000000000? +6I1954195C000000094F241845800?111848180C000000000?000000000?000000000?000000000? +6I1954195C000000094G241846800?441849144E000000000?000000000?000000000?000000000? +6I1954195C000000094H241847800?461393175A000000000?000000000?000000000?000000000? +6I1954195C000000094I241848800?500000000?000000000?000000000?000000000?000000000? +6I1954195C000000095?241849800?360000186B000000000?000000000?000000000?000000000? +6I1954195C000000095A241850800?101855185I000000000?000000000?000000000?000000000? +6I1954195C000000095B241851800?101856186A000000000?000000000?000000000?000000000? +6I1954195C000000095C241852800?666666666F000000000?000000000?000000000?000000000? +6I1954195C000000095D241853800?400000000?000000000?000000000?000000000?000000000? +6I1954195C000000095E241854800?300001186C000000000?000000000?000000000?000000000? +6I1954195C000000095F241855800?285714285G000000000?000000000?000000000?000000000? +6I1954195C000000095G241856800?222222222B000000000?000000000?000000000?000000000? +6I1954195C000000095H241857800?191264180E000000000?000000000?000000000?000000000? +6I1954195C000000095I241858800?191264188I000000000?000000000?000000000?000000000? +6I1954195C000000096?241859800?191264179B000000000?000000000?000000000?000000000? +6I1954195C000000096A241860800?211264176G000000000?000000000?000000000?000000000? +6I1954195C000000096B241861800?191264189?000000000?000000000?000000000?000000000? +6I1954195C000000096C241862800?691865186H000000000?000000000?000000000?000000000? +6I1954195C000000096D241863800?461872187D000000000?000000000?000000000?000000000? +6I1954195C000000096E241864800?101518128C000000000?000000000?000000000?000000000? +6I1954195C000000096F241865800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000096G241866800?101869187C000000000?000000000?000000000?000000000? +6I1954195C000000096H241867800?050000000?000000000?000000000?000000000?000000000? +6I1954195C000000096I241868800?231272187E000000000?000000000?000000000?000000000? +6I1954195C000000097?241869800?200000000?000000000?000000000?000000000?000000000? +6I1954195C000000097A241870800?241274187G000000000?000000000?000000000?000000000? +6I1954195C000000097B241871800?108001182G000000000?000000000?000000000?000000000? +6I1954195C000000097C241872800?161896180D000000000?000000000?000000000?000000000? +6I1954195C000000097D241873800?608003188D000000000?000000000?000000000?000000000? +6I1954195C000000097E241874800?151896180D000000000?000000000?000000000?000000000? +6I1954195C000000097F241875800?658003183D000000000?000000000?000000000?000000000? +6I1954195C000000097G241876800?608002188E000000000?000000000?000000000?000000000? +6I1954195C000000097H241877800?350002188C000000000?000000000?000000000?000000000? +6I1954195C000000097I241878800?151832188G000000000?000000000?000000000?000000000? +6I1954195C000000098?241879800?161832188G000000000?000000000?000000000?000000000? +6I1954195C000000098A241880800?441835189C000000000?000000000?000000000?000000000? +6I1954195C000000098B241881800?608003183I000000000?000000000?000000000?000000000? +6I1954195C000000098C241882800?691285184?000000000?000000000?000000000?000000000? +6I1954195C000000098D241883800?101886184A000000000?000000000?000000000?000000000? +6I1954195C000000098E241884800?191289182A000000000?000000000?000000000?000000000? +6I1954195C000000098F241885800?241289189B000000000?000000000?000000000?000000000? +6I1954195C000000098G241886800?100000000?000000000?000000000?000000000?000000000? +6I1954195C000000098H241887800?608002144E000000000?000000000?000000000?000000000? +6I1954195C000000098I241888800?601291189E000000000?000000000?000000000?000000000? +6I1954195C000000099?241889800?608003189H000000000?000000000?000000000?000000000? +6I1954195C000000099A241890800?608003185?000000000?000000000?000000000?000000000? +6I1954195C000000099B241891800?641297187F000000000?000000000?000000000?000000000? +6I1954195C000000099C241892800?198001186?000000000?000000000?000000000?000000000? +6I1954195C000000099D241893800?010000183E000000000?000000000?000000000?000000000? +6I1954195C000000099E241894800?608003185A000000000?000000000?000000000?000000000? +6I1954195C000000099F241895800?111848182B000000000?000000000?000000000?000000000? +6I1954195C000000099G241896800?000000000A000000000?000000000?000000000?000000000? +6I1954195C000000099H241897800?691901175D000000000?000000000?000000000?000000000? +6I1954195C000000099I241898800?101852185G000000000?000000000?000000000?000000000? +6I1954195C000000100?241899800?101853185H000000000?000000000?000000000?000000000? +6I1954195C000000100A241900800?300002175G000000000?000000000?000000000?000000000? +6I1954195C000000100B241901800?300000178A000000000?000000000?000000000?000000000? +6I1954195C000000100C241902800?691905190I000000000?000000000?000000000?000000000? +6I1954195C000000100D241903800?618003191A000000000?000000000?000000000?000000000? +6I1954195C000000100E241904800?300001191B000000000?000000000?000000000?000000000? +6I1954195C000000100F241905800?101731128E000000000?000000000?000000000?000000000? +6I1954195C000000100G241906800?101580128E000000000?000000000?000000000?000000000? +6I1954195C000000100H241907800?191250190D000000000?000000000?000000000?000000000? +6I1954195C000000100I241908800?211283193F000000000?000000000?000000000?000000000? +6I1954195C000000101?241909800?241267157?000000000?000000000?000000000?000000000? +6I1954195C000000101A241910800?350001193D000000000?000000000?000000000?000000000? +6I1954195C000000101B241911800?191776194?000000000?000000000?000000000?000000000? +6I1954195C000000101C241912800?608003178B000000000?000000000?000000000?000000000? +6I1954195C000000101D241913800?191293192G000000000?000000000?000000000?000000000? +6I1954195C000000101E241914800?191250193H000000000?000000000?000000000?000000000? +6I1954195C000000101F241915800?350002193E000000000?000000000?000000000?000000000? +6I1954195C000000101G241916800?350001193E000000000?000000000?000000000?000000000? +6I1954195C000000101H241917800?300003192E000000000?000000000?000000000?000000000? +6I1954195C000000101I241918800?161921192F000000000?000000000?000000000?000000000? +6I1954195C000000102?241919800?000100000?000000000?000000000?000000000?000000000? +6I1954195C000000102A241920800?211277178?000000000?000000000?000000000?000000000? +6I1954195C000000102B241921800?000003000?000000000?000000000?000000000?000000000? +6I1954195C000000102C241922800?658003191?000000000?000000000?000000000?000000000? +6I1954195C000000102D241923800?641265177?000000000?000000000?000000000?000000000? +6I1954195C000000102E241924800?000008190D000000000?000000000?000000000?000000000? +6I1954195C000000102F241925800?151928800B000000000?000000000?000000000?000000000? +6I1954195C000000102G241926800?461929193?000000000?000000000?000000000?000000000? +6I1954195C000000102H241927800?350001193C000000000?000000000?000000000?000000000? +6I1954195C000000102I241928800?600000194A000000000?000000000?000000000?000000000? +6I1954195C000000103?241929800?651265176I000000000?000000000?000000000?000000000? +6I1954195C000000103A241930800?601297126D000000000?000000000?000000000?000000000? +6I1954195C000000103B241931800?608002193I000000000?000000000?000000000?000000000? +6I1954195C000000103C241932800?608003114C000000000?000000000?000000000?000000000? +6I1954195C000000103D241933800?101665192?000000000?000000000?000000000?000000000? +6I1954195C000000103E241934800?441942179C000000000?000000000?000000000?000000000? +6I1954195C000000103F241935800?608002194D000000000?000000000?000000000?000000000? +6I1954195C000000103G241936800?601794165E000000000?000000000?000000000?000000000? +6I1954195C000000103H241937800?651701191?000000000?000000000?000000000?000000000? +6I1954195C000000103I241938800?608003114H000000000?000000000?000000000?000000000? +6I1954195C000000104?241939800?198001194E000000000?000000000?000000000?000000000? +6I1954195C000000104A241940800?608003114I000000000?000000000?000000000?000000000? +6I1954195C000000104B241941800?211297190?000000000?000000000?000000000?000000000? +6I1954195C000000104C241942800?310003191E000000000?000000000?000000000?000000000? +6I1954195C000000104D241943800?151701191?000000000?000000000?000000000?000000000? +6I1954195C000000104E241944800?360000176E000000000?000000000?000000000?000000000? +6I1954195C000000104F241945800?211250190C000000000?000000000?000000000?000000000? +6I1954195C000000104G241946800?101978196E000000000?000000000?000000000?000000000? +6I1954195C000000104H241947800?601977194F000000000?000000000?000000000?000000000? +6I1954195C000000104I241948800?101963197?000000000?000000000?000000000?000000000? +6I1954195C000000105?241949800?441973109E000000000?000000000?000000000?000000000? +6I1954195C000000105A241950800?151977198G000000000?000000000?000000000?000000000? +6I1954195C000000105B241951800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000105C241952800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000105D241953800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000105E241954800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000105F241955800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000105G241956800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000105H241957800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000105I241958800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000106?241959800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000106A241960800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000106B241961800?608001196H000000000?000000000?000000000?000000000? +6I1954195C000000106C241962800?111978199I000000000?000000000?000000000?000000000? +6I1954195C000000106D241963800?241978199A000000000?000000000?000000000?000000000? +6I1954195C000000106E241964800?211977198I000000000?000000000?000000000?000000000? +6I1954195C000000106F241965800?211977196F000000000?000000000?000000000?000000000? +6I1954195C000000106G241966800?601969197C000000000?000000000?000000000?000000000? +6I1954195C000000106H241967800?211986199G000000000?000000000?000000000?000000000? +6I1954195C000000106I241968800?300004194H000000000?000000000?000000000?000000000? +6I1954195C000000107?241969800?000005000?000000000?000000000?000000000?000000000? +6I1954195C000000107A241970800?151974195?000000000?000000000?000000000?000000000? +6I1954195C000000107B241971800?101024196G000000000?000000000?000000000?000000000? +6I1954195C000000107C241972800?111977196B000000000?000000000?000000000?000000000? +6I1954195C000000107D241973800?211978198H000000000?000000000?000000000?000000000? +6I1954195C000000107E241974800?690000800C000000000?000000000?000000000?000000000? +6I1954195C000000107F241975800?108001194I000000000?000000000?000000000?000000000? +6I1954195C000000107G241976800?300003101I000000000?000000000?000000000?000000000? +6I1954195C000000107H241977800?691954195U000000000?000000000?000000000?000000000? +6I1954195C000000107I241978800?000000107H000000000?000000000?000000000?000000000? +6I1954195C000000108?241979800?241978800?000000000?000000000?000000000?000000000? +6I1954195C000000108A241980800?241978800?000000000?000000000?000000000?000000000? +6I1954195C000000108B241981800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000108C241982800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000108D241983800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000108E241984800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000108F241985800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000108G241986800?000000000?000000000?000000000?000000000?000000000? +6I1954195C000000108H241987800?101990800B000000000?000000000?000000000?000000000? +6I1954195C000000108I241988800?601291197B000000000?000000000?000000000?000000000? +6I1954195C000000109?241989800?118002199H000000000?000000000?000000000?000000000? +6I1954195C000000109A241990800?000000999I000000000?000000000?000000000?000000000? +6I1954195C000000109B241991800?601986197A000000000?000000000?000000000?000000000? +6I1954195C000000109C241992800?151024198G000000000?000000000?000000000?000000000? +6I1954195C000000109D241993800?151024198G000000000?000000000?000000000?000000000? +6I1954195C000000109E241994800?151024198G000000000?000000000?000000000?000000000? +6I1954195C000000109F241995800?151024198G000000000?000000000?000000000?000000000? +6I1954195C000000109G241996800?151024198G000000000?000000000?000000000?000000000? +6I1954195C000000109H241997800?711977194G000000000?000000000?000000000?000000000? +6I1954195C000000109I241998800?461966131E000000000?000000000?000000000?000000000? +6I1954195C000000110?241999800?461975196A000000000?000000000?000000000?000000000? diff --git a/I650/sw/is_example_1_src.txt b/I650/sw/is_example_1_src.txt new file mode 100644 index 00000000..49993d8d --- /dev/null +++ b/I650/sw/is_example_1_src.txt @@ -0,0 +1,68 @@ + + prime number generator using the sieve of eratosthenes + converted to ibm 650 floating poing interpretive system (is) + + uses two extra o2 codes: o2=800 (set lbox) and o2=453 (tr zero) + + warning: comments are allowed past column 28 but some characters + are forbidden: uppercase letters, question mark, exclamation, number char, + ampersand char. if these chars are used, the line (i.e. the card for this + line) will be interpreted as a load card, and program will crash on trying + to execute it. + + + 100 -9 000 201 400 initp -move i1 prime initp: prime[c]=1 + 101 +0 001 050 100 loop c 050 initp c++; if c<50 goto initp + + 102 +9 000 201 300 move i1 num num=1 + + 103 +1 300 201 300 loop1 add num i1 num loop1: num++ + + 104 +2 300 203 000 sub num i50 last + 105 +0 201 120 106 tr sgn loope cont if num >= 50 goto loope + + 106 +0 800 002 300 set lbox b num b=num + 107 -9 000 400 000 -move prime last last=prime[b] + 108 +0 453 103 110 tr zero loop1 cont if last = 0 goto loop1 + + 110 +9 000 300 301 move num mult mult=num + + 111 +1 300 301 301 loop2 add num mult mult loop2: mult=mult+num + + 112 +2 301 203 000 sub mult i50 last + 113 +0 201 103 114 tr sgn loop1 cont if mult >= 50 goto loop1 (go to b if +, go to c if -) + + 114 +0 800 003 301 set lbox c mult c=mult + 115 -9 000 200 400 -move zero prime prime[c]=0 + + 116 +0 203 000 111 tr loop2 goto loop2 + + 120 +9 000 201 300 loope move i1 num loope: num=1 + 121 +0 800 002 202 set lbox b i2 b=2 + + 122 +1 300 201 300 prt1 add num i1 num prt1: num++ + + 123 -9 000 400 000 -move prime last last=prime[b] + 124 +0 453 127 126 tr zero prt2 cont if last = 0 goto prt2 + + 126 +0 410 300 300 pch num num punch num + + 127 +0 010 050 122 prt2 loop b 050 prt1 prt2: b++; if b<50 goto prt1 + + 128 +0 000 000 000 unc stop end + + constants + + 200 +0 0000000 50 zero + 201 +1 0000000 50 i1 + 202 +2 0000000 50 i2 + 203 +5 0000000 51 i50 + + variables + + 300 +0 0000000 50 num current number to check for being prime + 301 +0 0000000 50 mult multiple + 400 +0 0000000 50 prime array of numbers 400-449 + + 100 program start address + diff --git a/I650/sw/is_main_src.txt b/I650/sw/is_main_src.txt new file mode 100644 index 00000000..f47e1736 --- /dev/null +++ b/I650/sw/is_main_src.txt @@ -0,0 +1,1145 @@ + + 1 1 1095 60 1098 1014 + 1 2 1014 10 1024 1729 increase i to i+1 + 1 3 1043 21 1098 8001 svpc stu pc save current it program counter (see cards 26 and 27 below) + 1 4 8001 60 1107 rau read inst at pc start dissection system instr. + 1 5 1107 46 1112 1061 brmin loopb go to loop box if instr < 0 shall the loop box be used + 1 6 1061 30 0003 1019 srt 0003 + 1 7 1019 20 1023 1026 stl c store c + 1 8 1026 60 8003 1033 rau + 1 9 1033 30 0003 1041 srt 0003 + 1 10 1041 20 1045 1048 stl b store b + 1 11 1048 60 8003 1105 rau + 1 12 1105 30 0003 1063 srt 0003 + 1 13 1063 44 1067 1076 brnzu is an o2 operation called for + 1 14 1067 10 1020 8003 + 1 15 8003 69 8002 1081 + + 1 16 1112 11 1017 1046 + 1 17 1046 61 8003 1061 + + 1 18 1076 60 8001 1034 + 1 19 1034 10 1037 8003 + 1 20 8003 65 1045 + + 1 21 1098 60 1107 + 1 22 1024 00 0001 + 1 23 1020 69 8002 1081 + 1 24 1037 65 1045 1000 + + 1 25 1017 00 + + 1 26 1729 69 1732 1735 ld svmlt restore the multiplication + 1 27 1735 24 1539 1043 std 1539 svpc continue routine (o1=3) to normal + + 1 28 1732 35 0002 1445 svmlt (the trig. program makes special use of it) + + + 2 1 1000 30 0003 1119 + 2 2 1119 15 1030 8002 + 2 3 8002 60 1096 + 2 4 1096 69 9999 1120 + + 2 5 1200 30 0003 1059 + 2 6 1059 15 1162 8002 + 2 7 8002 60 1016 + 2 8 1016 01 1120 + + 2 9 1201 10 1009 1015 + 2 10 1015 46 1120 1069 + 2 11 1120 60 1023 1027 + 2 12 1069 60 8002 1027 + + 2 13 1202 60 1009 1013 + + 2 14 1013 30 0002 1021 + 2 15 1021 67 8002 1029 + 2 16 1029 30 0001 1036 + 2 17 1036 16 1045 1012 + 2 18 1012 46 1095 1120 + + 2 19 1203 60 1023 1027 + 2 20 1027 30 0003 1035 + 2 21 1035 10 1038 1043 + + 2 22 1204 65 1023 1127 + 2 23 1127 30 0003 1040 + 2 24 1040 69 1145 1151 + 2 25 1151 22 1058 1161 + 2 26 1161 15 1114 8002 + 2 27 8002 67 1075 + 2 28 1075 30 0003 1133 + 2 29 1133 60 8002 1092 + 2 30 1092 15 1045 1049 + 2 31 1049 35 0003 1058 + 2 32 1058 21 1203 + + 2 33 1205 65 1023 1128 + 2 34 1128 35 0003 8003 + 2 35 8003 00 + + 2 36 1454 00 1095 + + 2 37 1114 67 1075 + 2 38 1145 21 1203 + 2 39 1038 60 1107 + 2 40 1162 60 1016 + 2 41 1030 60 1096 + + 3 1 1001 30 0005 1064 + 3 2 1064 69 1017 1071 + 3 3 1071 30 0002 1077 + 3 4 1077 10 8001 1135 + 3 5 1135 10 1138 1093 + + 3 6 1093 11 8002 1051 + 3 7 1051 46 1054 1155 + 3 8 1054 10 8001 1062 + 3 9 1062 21 1017 1120 + 3 10 1155 16 8002 1113 + 3 11 1113 20 1017 1095 + + 3 12 1100 30 0001 1057 + 3 13 1057 10 1017 1025 + 3 14 1025 10 1031 1093 + + 3 15 1101 30 0001 1008 + 3 16 1008 10 1017 1074 + 3 17 1074 10 1031 1135 + + 3 18 1110 69 1017 1121 + 3 19 1121 30 0001 1028 + + 3 20 1028 10 8001 1136 + 3 21 1136 10 1039 1093 + + 3 22 1111 69 1017 1171 + 3 23 1171 30 0001 1078 + 3 24 1078 10 8001 1185 + 3 25 1185 10 1139 1093 + + 3 26 1010 30 0004 1343 + 3 27 1343 10 1047 1003 + 3 28 1003 10 1017 1093 + + 3 29 1011 30 0004 1180 + 3 30 1180 10 1138 1343 + + 3 31 1138 00 0001 + 3 32 1031 00 0100 + 3 33 1047 00 1000 + 3 34 1039 00 0100 1000 + 3 35 1139 00 0100 1001 + + 4 1 1090 65 8002 1002 + 4 2 1002 45 1109 1186 + 4 3 1109 30 0003 1719 + 4 4 1719 16 1024 1329 + 4 5 1329 20 1283 1187 + 4 6 1187 35 0003 1097 + 4 7 1097 15 1023 1327 + 4 8 1327 44 1315 1132 + 4 9 1132 11 8001 1190 + 4 10 1190 10 1045 1099 + 4 11 1099 46 1367 1153 + + 4 12 1153 10 8002 1312 + 4 13 1312 30 0003 1322 + 4 14 1322 10 1325 1330 + 4 15 1330 16 1283 1388 + 4 16 1388 15 1142 1197 + + 4 17 1367 10 1023 1328 + 4 18 1328 66 8002 1340 + 4 19 1340 11 1045 1363 + 4 20 1363 30 0003 1172 + 4 21 1172 11 1325 1336 + 4 22 1336 16 1142 1197 + + 4 23 1197 21 1255 1176 + 4 24 1176 11 1283 8003 + 4 25 8003 69 8002 + 4 26 8002 24 1102 + 4 27 1102 11 1255 1159 + 4 28 1159 44 1366 1095 + 4 29 1366 10 8001 1321 + 4 30 1321 10 1024 1179 + 4 31 1179 15 8001 8003 + 4 32 1186 65 1045 1052 + 4 33 1052 30 0003 1362 + + 4 34 1362 15 1065 8002 + 4 35 8002 60 1445 + 4 36 1315 69 2222 1095 + + 4 37 1325 69 8002 + 4 38 1142 24 1102 + 4 39 1065 60 1445 + + + 5 1 1306 77 7777 7777 + 5 2 1307 77 7777 7777 + 5 3 1308 77 7777 7777 + 5 4 1309 77 7777 7777 + 5 5 1453 77 7777 7777 + 5 6 1800 77 7777 7777 + + 5 7 1009 55 5555 5555 + 5 8 1023 55 5555 5555 + 5 9 1045 55 5555 5555 + + 5 10 1250 88 8888 8888 + 5 11 1252 88 8888 8888 + 5 12 1255 88 8888 8888 + 5 13 1260 88 8888 8888 + 5 14 1264 88 8888 8888 + 5 15 1265 88 8888 8888 + 5 16 1267 88 8888 8888 + 5 17 1268 88 8888 8888 + 5 18 1270 88 8888 8888 + 5 19 1272 88 8888 8888 + 5 20 1274 88 8888 8888 + 5 21 1277 88 8888 8888 + 5 22 1278 88 8888 8888 + 5 23 1283 88 8888 8888 + 5 24 1285 88 8888 8888 + 5 25 1289 88 8888 8888 + 5 26 1291 88 8888 8888 + 5 27 1293 88 8888 8888 + 5 28 1294 88 8888 8888 + 5 29 1297 88 8888 8888 + + 5 30 1356 77 7777 7777 + 5 31 1314 77 7777 7777 + 5 32 1317 77 7777 7777 + 5 33 1323 77 7777 7777 + 5 34 1378 77 7777 7777 + 5 35 1381 77 7777 7777 + 5 36 1337 77 7777 7777 + 5 37 1391 77 7777 7777 + 5 38 1396 77 7777 7777 + 5 39 1066 77 7777 7777 + 5 40 1044 77 7777 7777 + + 6 1 1087 69 1140 1195 + + 6 2 1088 69 1341 1195 + + 6 3 1089 69 1342 1195 + + 6 4 1195 24 1198 1053 + 6 5 1053 65 8002 1311 + 6 6 1311 30 0003 1369 + 6 7 1369 15 1072 8002 + 6 8 8002 67 1198 + 6 9 1198 35 1359 + 6 10 1359 65 8002 1117 + 6 11 1117 35 0003 1125 + 6 12 1125 60 8003 1183 + 6 13 1183 30 0003 1392 + 6 14 1392 16 1045 1199 + 6 15 1199 45 1203 1095 + + 6 16 1140 35 0001 1359 + 6 17 1341 35 0004 1359 + 6 18 1342 35 0007 1359 + 6 19 1072 67 1198 + + 6 20 1005 65 8003 1163 + + 6 21 1050 65 1103 1163 + + 6 22 1500 65 1104 1163 + + 6 23 1163 69 1116 1269 + 6 24 1269 22 1274 1177 + 6 25 1177 69 1080 1184 + 6 26 1184 22 1289 1292 + 6 27 1292 65 1045 1349 + 6 28 1349 30 0003 1157 + 6 29 1157 69 1160 1164 + 6 30 1164 22 1267 1170 + 6 31 1170 15 1073 8002 + 6 32 8002 60 1210 + 6 33 1289 30 1108 + 6 34 1108 20 1265 1122 + 6 35 1122 60 8003 1032 + 6 36 1032 30 0003 1144 + 6 37 1144 60 8003 1158 + 6 38 1158 46 1115 1118 + 6 39 1115 16 1023 1130 + 6 40 1118 15 1023 1130 + 6 41 1130 35 0003 1196 + 6 42 1196 15 1265 1274 + 6 43 1274 35 1267 + 6 44 1267 21 1095 + + 6 45 1103 00 0003 + 6 46 1116 35 1267 + 6 47 1080 30 1108 + 6 48 1160 21 1095 + 6 49 1104 00 0006 + + 6 50 1006 65 1023 1079 + + 6 51 1007 66 1023 1079 + + 6 52 1079 30 0007 1004 + 6 53 1060 65 1023 1129 + 6 54 1070 66 1023 1129 + 6 55 1129 30 0004 1004 + 6 56 1600 65 1023 1189 + 6 57 1700 66 1023 1189 + 6 58 1189 30 0001 1004 + 6 59 1004 20 1260 1068 + 6 60 1068 65 1045 1399 + 6 61 1399 30 0003 1357 + 6 62 1357 69 1360 1313 + 6 63 1313 22 1267 1370 + 6 64 1370 15 1123 8002 + 6 65 8002 60 1348 + 6 66 1348 46 1156 1106 + 6 67 1106 10 1260 1267 + 6 68 1156 11 1260 1267 + 6 69 1267 21 1095 + + 6 70 1360 21 1095 + 6 71 1123 60 1348 + 6 72 1073 60 1289 + + 7 1 8000 70 1951 1333 deck 7: program loading read first program card + 7 2 1333 60 1242 1124 set an instruction for return + 7 3 1124 24 1278 1194 from read routine + 7 4 1194 20 1178 reset 000 + 7 5 1178 24 1017 1175 reset the loop box + 7 6 1175 24 1986 1344 reset the card counter + 7 7 1344 60 1952 1042 rau wc get word count from read card test the word count,n. if n <> 0, + 7 8 1042 45 1364 1377 brnz getw branch if wrds to load go to read to move n words + 7 9 1377 69 1959 1376 ld prnum no words. get problem num if n=0, put the problem number + 7 10 1376 24 1985 1397 std 1985 sv pr num on punch loc into the punch band + 7 11 1397 69 1976 1345 ld 1976 ld trace/no trace decide if tracing is required + 7 12 1345 24 1061 1018 std 1061 sv on gen interpret (dep on contents of 1976) + 7 13 1018 60 1951 1126 rau loc get loc from read card store the address of the + 7 14 1126 10 1038 1729 au c goto store result and exec op first programmer instruction, + 7 15 1038 60 1107 go to execute it (gen.int.) + 7 17 1242 70 1951 1344 constant (return from read) + + 8 1 1401 01 1131 + 8 2 1131 60 8000 1445 + 8 3 1400 69 1318 1174 + 8 4 1174 24 1278 1486 + + 8 5 1486 69 1241 1168 + + 8 6 1272 21 1277 1736 + 8 7 1736 70 1951 1326 + 8 8 1326 11 1951 1365 + 8 9 1365 44 1315 1733 + 8 10 1733 60 1291 1347 + 8 11 1347 11 1952 1372 + 8 12 1372 11 1277 1382 + 8 13 1382 46 1315 1740 + 8 14 1740 21 1285 1590 + 8 15 1590 60 1952 1364 + 8 16 1364 10 1324 1686 getw load words + 8 17 1686 10 1951 1056 + 8 18 1056 21 1268 1231 + 8 19 1231 15 1188 1094 + 8 20 1094 11 1952 8002 + 8 21 8002 69 1953 8003 + 8 22 8003 24 1320 + 8 23 1320 15 1024 1335 + 8 24 1335 10 8001 1193 + 8 25 1193 11 1268 1373 + 8 26 1373 44 1339 1278 + 8 27 1339 10 8001 8002 + 8 28 1278 60 1285 1390 + 8 29 1390 44 1346 1095 + 8 30 1346 60 1277 1584 + 8 31 1584 10 1952 1166 + 8 32 1166 21 1277 1736 + + 8 33 1188 69 1953 8003 + 8 34 1318 60 1285 1390 + 8 35 1241 21 1277 1736 + 8 36 1324 24 1320 + + 9 1 1410 69 1964 1168 pch ld 1964 deck 9. punching. 02=410, pch + + 9 2 1168 24 1272 1081 common with read + 9 3 1081 65 1023 1232 + 9 4 1232 10 1045 1361 prepare for testing + 9 5 1361 30 0003 1319 and initialization. + 9 6 1319 15 1024 1134 + 9 7 1134 20 1291 1272 + + 9 8 1272 21 1977 1989 pch program only + 9 9 1989 11 8002 1998 go to stop (in move) if + 9 10 1998 46 1966 1315 b >= c+1 + 9 11 1966 60 1969 1973 + 9 12 1973 21 1978 1988 set the word count + 9 13 1988 60 1291 1972 let b'=first loc. not yet + 9 14 1972 11 1977 1962 punched. if b'+5 <= c+1, + 9 15 1962 11 1978 1999 go to punch 5 to a card. + 9 16 1999 46 1975 1961 if not, go to further testing. + 9 17 1961 60 8001 1968 + 9 18 1968 30 0004 1948 prepare to move n words + 9 19 1948 10 1963 1970 to the punch band + 9 20 1970 15 1974 1950 + + 9 21 1950 15 1977 1987 + 9 22 1987 10 1990 8002 + 9 23 8002 69 8003 move one word + 9 24 8003 24 1979 + 9 25 1991 60 1986 1971 go to punch + 9 26 1992 15 1024 1987 + 9 27 1993 15 1024 1987 + 9 28 1994 15 1024 1987 return to move + 9 29 1995 15 1024 1987 another word + 9 30 1996 15 1024 1987 + 9 31 1971 10 1024 1967 increase the card no. + 9 32 1967 21 1986 1997 + 9 33 1997 71 1977 1947 punch a card + 9 34 1947 60 1977 1946 + 9 35 1946 10 1978 1965 set the location no. + 9 36 1965 21 1977 1966 for the next card + 9 37 1975 10 8001 1949 if b'=c+1, punching + 9 38 1949 44 1973 1095 is completed. + + 9 39 1976 30 0003 1019 this const. keeps trace orders inoperative during non-tracing. + 9 40 1964 21 1977 1989 this const. will be 00 0000 1095 + 9 41 1969 00 0005 during tracing (pch inoperative) + 9 42 1990 00 9999 constant + 9 43 1963 24 1978 1991 + 9 44 1974 69 8003 when the pch progr. is loaded + 9 45 1958 24 1978 1991 with program loading, this instr. will load into 1963 + +11 1 1445 21 1404 +11 2 1404 21 1009 1414 +11 3 1414 65 1023 1427 +11 4 1427 45 1430 1095 +11 5 1430 30 0003 1439 +11 6 1439 15 1443 1447 +11 7 1447 69 8002 +11 8 8002 24 1095 + +11 9 1443 24 1095 + + +12 1 1082 24 1289 1492 +12 2 1492 65 1045 1449 +12 3 1449 30 0003 1457 +12 4 1457 15 1460 8002 +12 5 8002 60 1473 + +12 6 1083 24 1289 1542 +12 7 1542 65 1045 1599 +12 8 1599 30 0003 1207 +12 9 1207 15 1310 8002 +12 10 8002 61 1473 + +12 11 1473 21 1278 1483 +12 12 1483 65 1289 1493 +12 13 1493 45 1496 1497 + +12 14 1496 30 0003 1406 +12 15 1406 15 1409 8002 +12 16 8002 60 1446 +12 17 1446 21 1405 +12 18 1497 60 1405 +12 19 1405 30 0002 1411 +12 20 1411 20 1265 1468 +12 21 1468 21 1272 1475 +12 22 1475 60 1278 1583 +12 23 1583 30 0002 1589 +12 24 1589 20 1293 1696 +12 25 1696 21 1250 1603 +12 26 1603 67 8002 1661 +12 27 1661 18 1265 1519 +12 28 1519 30 0004 1630 +12 29 1630 69 1433 1436 +12 30 1436 22 1639 1442 +12 31 1442 45 1697 1247 +12 32 1247 65 1250 1408 +12 33 1408 15 1272 1429 +12 34 1429 35 0002 1435 +12 35 1435 44 1489 1440 +12 36 1489 31 0003 1499 +12 37 1499 46 1652 1703 +12 38 1652 16 1456 1461 +12 39 1461 18 1265 1471 +12 40 1471 35 0002 1577 +12 41 1577 10 8002 1445 +12 42 1703 15 1456 1611 +12 43 1611 17 1265 1471 +12 44 1440 45 1494 1445 +12 45 1494 60 8002 1403 +12 46 1403 36 1521 +12 47 1521 11 8002 1479 +12 48 1479 60 8003 1487 +12 49 1487 30 0002 1544 +12 50 1544 46 1461 1611 +12 51 1697 69 1503 +12 52 1503 30 0005 1415 +12 53 1415 45 1418 1469 +12 54 1418 46 1422 1423 +12 55 1422 60 8001 1445 +12 56 1423 60 1278 1445 +12 57 1469 46 1472 1623 +12 58 1472 65 1250 1412 +12 59 1412 69 1272 1639 +12 60 1639 31 1413 +12 61 1413 15 8001 1429 +12 62 1623 69 1293 1501 +12 63 1501 24 1265 1619 +12 64 1619 65 1272 1432 +12 65 1432 69 1250 1639 + +12 66 1310 61 1473 +12 67 1460 60 1473 +12 68 1409 60 1446 +12 69 1433 31 1413 +12 70 1456 01 + +13 1 1084 24 1289 1592 +13 2 1592 65 1045 1549 +13 3 1549 30 0003 1557 +13 4 1557 15 1560 8002 +13 5 8002 60 1578 + +13 6 1086 24 1289 1692 +13 7 1692 65 1045 1649 +13 8 1649 30 0003 1657 +13 9 1657 15 1660 8002 +13 10 8002 61 1578 + +13 11 1578 21 1283 1586 +13 12 1586 65 1289 1593 +13 13 1593 45 1596 1597 +13 14 1596 30 0003 1605 +13 15 1605 15 1508 8002 +13 16 8002 60 1655 +13 17 1597 60 1655 +13 18 1655 30 0002 1511 +13 19 1511 44 1515 1316 +13 20 1515 21 1270 1523 +13 21 1523 20 1277 1530 +13 22 1530 60 1283 1537 +13 23 1537 30 0002 1543 +13 24 1543 44 1547 1445 +13 25 1547 21 1252 1556 +13 26 1556 68 8002 1565 +13 27 1565 15 1568 1573 +13 28 1573 18 1277 1531 +13 29 1531 20 1285 1588 +13 30 1588 46 1591 1595 +13 31 1591 44 1595 1546 +13 32 1546 60 1252 1564 +13 33 1564 19 1270 1648 +13 34 1648 35 0004 1259 +13 35 1259 65 8003 1717 + +13 36 1717 35 0001 1273 +13 37 1273 44 1677 1628 +13 38 1677 69 1580 1533 +13 39 1533 31 0003 1743 +13 40 1628 69 1281 1484 +13 41 1484 31 0002 1743 +13 42 1743 35 0002 1299 +13 43 1299 44 1253 1554 +13 44 1554 46 1507 1258 +13 45 1507 15 8001 1563 +13 46 1258 16 8001 1563 +13 47 1253 35 0007 1528 +13 48 1563 60 8002 1571 +13 49 1571 30 0002 1528 +13 50 1528 46 1581 1532 +13 51 1581 18 1285 1539 +13 52 1532 17 1285 1539 +13 53 1539 35 0002 1445 + +13 54 1595 69 5555 1338 + +13 55 1660 61 1578 +13 56 1560 60 1578 +13 57 1508 60 1655 +13 58 1568 49 +13 59 1580 00 +13 60 1281 00 0001 + +13 61 1338 65 8002 1445 +13 62 1316 60 8003 1539 + +14 1 1085 24 1289 1642 +14 2 1642 65 1045 1699 +14 3 1699 30 0003 1607 +14 4 1607 15 1610 8002 +14 5 8002 60 1673 +14 6 1626 21 1283 1636 +14 7 1636 65 1289 1643 +14 8 1643 45 1646 1647 +14 9 1646 30 0003 1656 +14 10 1656 15 1659 8002 +14 11 8002 60 1606 +14 12 1647 60 1606 +14 13 1606 30 0002 1613 +14 14 1613 20 1267 1620 +14 15 1620 21 1274 1527 +14 16 1680 60 1283 1637 +14 17 1637 30 0002 1693 +14 18 1693 20 1297 1650 +14 19 1650 60 8003 1407 +14 20 1407 35 0002 1663 +14 21 1663 21 1268 1671 +14 22 1671 60 1274 1629 +14 23 1629 35 0001 1685 +14 24 1685 21 1291 1644 +14 25 1644 67 1297 1651 +14 26 1651 16 1654 1510 +14 27 1510 18 1267 1621 +14 28 1621 46 1624 1595 +14 29 1624 44 1595 1678 +14 30 1678 20 1285 1638 +14 31 1638 60 1291 1645 +14 32 1645 64 1268 1717 + +14 33 1610 60 1673 +14 34 1659 60 1606 +14 35 1654 50 + +14 36 1673 45 1626 1374 +14 37 1527 45 1680 1445 +14 38 1374 69 3333 1338 + + +15 1 1350 30 0003 1169 +15 2 1169 15 1022 8002 +15 3 8002 67 1137 +15 4 1137 60 8002 1445 + +15 5 1022 67 1137 + +16 1 1300 30 0003 1214 +16 2 1214 15 1219 8002 +16 3 8002 60 1206 +16 4 1206 46 1670 1211 +16 5 1670 69 4444 1230 +16 6 1230 60 8002 1445 +16 7 1211 30 0002 1218 +16 8 1218 44 1223 1445 +16 9 1223 20 1278 1181 +16 10 1181 60 8003 1239 +16 11 1239 35 0001 1248 +16 12 1248 21 1255 1229 +16 13 1229 60 1234 1251 +16 14 1251 19 1255 1235 +16 15 1235 10 1240 1245 +16 16 1245 30 0001 1152 +16 17 1152 10 1255 1209 +16 18 1209 16 8002 1217 +16 19 1217 24 1270 1227 +16 20 1227 64 8001 1238 +16 21 1238 20 1294 1216 +16 22 1216 16 1270 1225 +16 23 1225 30 0001 1182 +16 24 1182 45 1236 1237 +16 25 1236 65 8001 1191 +16 26 1191 15 1294 1249 +16 27 1249 10 1055 1210 +16 28 1210 16 8002 1228 +16 29 1228 19 8001 1244 +16 30 1244 30 0001 1152 +16 31 1237 60 1055 1222 +16 32 1222 19 1278 1208 +16 33 1208 35 0001 1215 +16 34 1215 10 1419 1224 +16 35 1224 21 1278 1233 +16 36 1233 60 8002 1192 +16 37 1192 44 1246 1257 +16 38 1246 60 1150 1212 +16 39 1212 19 1270 1220 +16 40 1220 31 1243 +16 41 1243 60 8002 1213 +16 42 1213 35 0002 1221 +16 43 1221 10 1278 1445 +16 44 1257 65 1270 1226 +16 45 1226 31 0002 1243 + +16 46 1219 60 1206 +16 47 1234 00 0022 +16 48 1240 00 0001 +16 49 1055 00 0005 +16 50 1419 00 0025 +16 51 1150 03 1622 7766 + +17 1 1301 69 1514 1467 + +17 2 1351 69 1464 1467 + +17 3 1467 30 0003 1425 +17 4 1425 24 1485 1488 +17 5 1488 15 1441 8002 +17 6 8002 60 1553 +17 7 1553 30 0002 1459 +17 8 1459 21 1264 1417 +17 9 1417 46 1420 1421 +17 10 1420 69 1424 1477 +17 11 1421 69 1524 1477 +17 12 1477 24 1480 1633 +17 13 1633 67 8002 1541 +17 14 1541 16 1444 1650 +17 15 1550 35 0001 1458 +17 16 1458 44 1462 1512 +17 17 1512 30 0005 1525 +17 18 1525 46 1478 1529 +17 19 1478 69 1481 1485 +17 20 1529 69 1482 1485 +17 21 1485 22 1495 1551 +17 22 1485 22 1495 1502 +17 23 1551 60 1504 1509 +17 24 1509 19 1264 1631 +17 25 1631 35 0002 1437 +17 26 1437 67 8003 1495 +17 27 1502 67 1264 1669 +17 28 1669 35 0002 1495 +17 29 1495 00 1465 +17 30 1465 20 1270 1474 +17 31 1474 21 1278 1681 +17 32 1681 11 1587 1491 +17 33 1491 46 1594 1393 +17 34 1594 60 1548 1516 +17 35 1516 19 1270 1695 +17 36 1695 60 8003 1653 +17 37 1653 10 1506 1466 +17 38 1466 19 1270 1694 +17 39 1694 60 8003 1254 +17 40 1254 10 1658 1416 +17 41 1416 19 1270 1448 +17 42 1448 60 8003 1608 +17 43 1608 10 1612 1667 +17 44 1667 19 1270 1598 +17 45 1598 60 8003 1558 +17 46 1558 10 1562 1617 +17 47 1617 19 1270 1552 +17 48 1552 60 8003 1609 +17 49 1609 10 1513 1567 +17 50 1567 19 1270 1402 +17 51 1402 60 8003 1559 +17 52 1559 10 1463 1517 +17 53 1517 19 1270 1602 +17 54 1602 60 8003 1662 +17 55 1662 10 1665 1520 +17 56 1520 19 8003 1480 + +17 57 1480 65 8003 1687 +17 58 1687 31 0001 1498 +17 59 1498 35 0002 1566 +17 60 1566 60 8002 1625 +17 61 1625 10 1278 1683 +17 62 1683 10 1587 1445 +17 63 1480 21 1285 1438 +17 64 1438 60 1665 1522 +17 65 1522 30 0002 1679 +17 66 1679 64 1285 1470 +17 67 1470 35 0001 1428 +17 68 1428 44 1431 1632 +17 69 1632 31 0002 1641 +17 70 1641 15 1444 1604 +17 71 1604 35 0002 1616 +17 72 1616 10 8002 1675 +17 73 1675 11 1278 1445 +17 74 1431 60 1434 1675 +17 75 1462 46 1615 1393 +17 76 1615 60 1434 1445 + +17 77 1514 22 1495 1551 +17 78 1464 22 1495 1502 +17 79 1441 60 1553 +17 80 1524 65 8003 1687 +17 81 1424 21 1285 1438 +17 82 1444 49 +17 83 1481 30 1465 +17 84 1482 35 1465 +17 85 1504 43 4294 4819 +17 86 1587 00 0050 +17 87 1548 00 0093 2643 +17 88 1506 00 0255 4918 +17 89 1658 00 1742 1120 +17 90 1612 00 7295 1737 +17 91 1562 02 5439 3575 +17 92 1513 06 6273 0884 +17 93 1463 11 5129 2776 +17 94 1665 10 +17 95 1434 10 0050 + +17 96 1393 69 6666 1338 + + +18 1 1302 69 1807 1818 + +18 2 1352 69 1815 1818 + +18 3 1818 24 1821 1824 +18 4 1824 30 0003 1833 +18 5 1833 15 1836 8002 +18 6 8002 60 1831 +18 7 1831 30 0002 1837 +18 8 1837 20 1291 1844 +18 9 1844 44 1847 1393 +18 10 1847 46 1393 1751 +18 11 1751 60 8003 1809 +18 12 1809 11 1812 1817 + +18 13 1817 46 1820 1871 +18 14 1820 10 8001 1825 +18 15 1825 19 1828 1814 +18 16 1814 69 1867 1870 +18 17 1871 10 8001 1827 +18 18 1827 19 1830 1813 +18 19 1813 69 1816 1870 +18 20 1870 24 1274 1877 +18 21 1877 35 0002 1883 +18 22 1883 10 1886 1841 +18 23 1841 21 1297 1802 +18 24 1802 11 1869 1891 +18 25 1891 64 1297 1876 +18 26 1876 60 8002 1885 +18 27 1885 24 1289 1892 +18 28 1892 19 8001 1860 +18 29 1860 21 1264 1767 +18 30 1767 60 8001 1823 +18 31 1823 19 1776 1894 +18 32 1894 60 8003 1851 +18 33 1851 10 1856 1861 +18 34 1861 19 1264 1890 +18 35 1890 60 8003 1850 +18 36 1850 10 1855 1859 +18 37 1859 19 1264 1792 +18 38 1792 60 8003 1899 +18 39 1899 10 1853 1858 +18 40 1858 19 1264 1889 +18 41 1889 60 8003 1898 +18 42 1898 10 1852 1857 +18 43 1857 19 1264 1805 +18 44 1805 30 0001 1866 +18 45 1866 10 1869 1873 +18 46 1873 60 8003 1884 +18 47 1884 19 1289 1821 +18 48 1821 10 1274 + +18 49 1829 21 1285 1838 +18 50 1838 60 1291 1845 +18 51 1845 11 1848 1803 +18 52 1803 19 1806 1882 +18 53 1881 60 8003 1839 +18 54 1839 19 1842 1826 +18 55 1826 21 1285 1888 +18 56 1888 60 1291 1895 +18 57 1895 11 1848 1822 +18 58 1822 30 0001 1882 + +18 59 1882 69 1285 1840 +18 60 1840 30 0008 1810 +18 61 1810 15 8001 1819 +18 62 1819 35 0004 1880 +18 63 1880 44 1835 1893 +18 64 1835 35 0004 1846 +18 65 1846 44 1849 1445 +18 66 1849 36 1862 +18 67 1862 69 1865 1868 +18 68 1868 23 1272 1875 + +18 69 1875 65 8003 1834 +18 70 1834 31 0002 1843 +18 71 1843 35 0002 1750 +18 72 1804 46 1808 1811 +18 73 1811 16 1272 1878 +18 74 1878 15 1832 1887 +18 75 1808 15 1272 1879 +18 76 1879 16 1832 1887 +18 77 1887 60 8002 1445 + +18 78 1750 44 1854 1804 +18 79 1854 30 0001 1863 +18 81 1874 15 1896 1804 +18 82 1872 16 1896 1804 + +18 83 1893 01 1835 + +18 84 1807 10 1274 1829 +18 85 1815 10 1274 1881 +18 86 1836 60 1831 +18 87 1812 00 2718 2818 +18 88 1828 60 6530 6597 +18 89 1867 05 +18 80 1863 46 1872 1874 +18 90 1816 16 5000 +18 91 1830 19 2049 9086 +18 92 1886 10 +18 93 1869 20 +18 94 1832 00 0052 +18 95 1848 50 +18 96 1806 23 0258 5093 +18 97 1842 43 4294 4819 +18 98 1776 18 1818 1818 +18 99 1856 22 2222 2222 +18 100 1855 28 5714 2857 +18 101 1853 40 +18 102 1852 66 6666 6666 +18 103 1896 00 0001 +18 104 1865 00 + + +19 1 1303 69 1256 1614 +19 2 1614 24 1267 1721 +19 3 1721 69 1526 1579 + +19 4 1304 69 1707 1664 +19 5 1664 24 1267 1622 +19 6 1622 69 1576 1579 + +19 7 1579 24 1283 1536 +19 8 1536 65 8002 1545 +19 9 1545 30 0003 1455 +19 10 1455 15 1561 8002 +19 11 8002 60 1574 +19 12 1574 21 1278 1582 +19 13 1582 30 0002 1689 +19 14 1689 21 1252 1267 +19 15 1267 00 + +19 16 1575 68 8002 1538 +19 17 1538 15 1691 1295 +19 18 1295 45 1298 1749 +19 19 1298 46 1569 1674 +19 20 1749 67 1252 1708 +19 21 1708 15 1711 1666 +19 22 1666 44 1569 1674 +19 23 1674 60 1278 1445 +19 24 1569 68 1272 1627 +19 25 1627 15 1444 1601 +19 26 1601 35 0001 1709 +19 27 1709 44 1276 1714 +19 28 1714 30 0005 1727 +19 29 1727 46 1682 1282 +19 30 1282 69 1635 1688 +19 31 1688 22 1293 1715 +19 32 1682 69 1535 1738 +19 33 1738 22 1293 1746 +19 34 1746 15 1702 1710 +19 35 1710 46 1375 1715 +19 36 1375 01 1715 +19 37 1715 60 1618 1426 +19 38 1426 19 1252 1718 +19 39 1718 35 0002 1293 +19 40 1293 00 1716 +19 41 1716 30 0001 1723 +19 42 1723 46 1476 1741 +19 43 1476 10 1886 1741 +19 44 1741 61 8003 1704 +19 45 1704 10 8003 1713 +19 46 1713 10 8003 1283 +19 47 1283 00 1886 1742 +19 48 1742 10 8001 1747 +19 49 1747 46 1705 1706 +19 50 1705 10 8001 1262 +19 51 1262 46 1266 1748 +19 52 1266 10 8001 1271 +19 53 1271 46 1676 1634 +19 54 1676 10 8001 1540 +19 55 1706 11 8001 1540 +19 56 1540 61 8003 1748 +19 57 1748 30 0009 1720 +19 58 1634 11 8001 1748 +19 59 1720 44 1383 1724 +19 60 1724 20 1285 1288 +19 61 1288 60 8001 1744 +19 62 1744 19 8001 1745 +19 63 1745 21 1250 1712 +19 64 1712 60 8003 1668 +19 65 1668 19 1572 1730 +19 66 1730 60 8003 1387 +19 67 1387 11 1490 1296 +19 68 1296 19 1250 1368 +19 69 1368 60 8003 1728 +19 70 1728 10 1534 1290 +19 71 1290 19 1250 1371 +19 72 1371 60 8003 1280 +19 73 1280 11 1684 1389 + +19 74 1389 19 1250 1275 +19 75 1275 30 0001 1734 +19 76 1734 60 8003 1394 +19 77 1394 10 1398 1726 +19 78 1726 19 1285 1640 +19 79 1640 65 8003 1672 +19 80 1672 35 0001 1279 +19 81 1279 44 1383 1284 +19 82 1383 31 0003 1722 +19 83 1722 35 0002 1379 +19 84 1284 31 0002 1395 +19 85 1395 35 0001 1379 +19 86 1379 60 8002 1737 +19 87 1737 36 1263 +19 88 1263 11 8002 1725 +19 89 1725 46 1286 1287 +19 90 1287 10 1690 1445 +19 91 1286 11 1690 1445 +19 92 1276 46 1393 1380 +19 93 1380 60 1865 1283 + +19 94 1256 20 1272 1575 +19 95 1526 69 1886 1742 +19 96 1707 68 8002 1627 +19 97 1576 11 1886 1742 +19 98 1561 60 1574 +19 99 1691 47 +19 100 1711 99 7500 +19 101 1635 30 1716 +19 102 1535 35 1716 +19 103 1702 00 0003 +19 104 1618 15 9154 9430 +19 105 1572 00 0151 4842 +19 106 1490 00 4673 7656 +19 107 1534 07 9689 6793 +19 108 1684 64 5963 7111 +19 109 1398 15 7079 6318 +19 110 1690 00 0050 +19 111 1444 49 + +19 112 1353 69 1384 1739 + +19 113 1354 69 1385 1739 + +19 114 1739 24 1293 1505 +19 115 1505 69 1261 1585 +19 116 1585 24 1539 1698 +19 117 1698 20 1289 1555 +19 118 1555 60 1167 1578 + +19 119 1384 21 1303 +19 120 1385 21 1304 +19 121 1261 35 0002 1293 +19 122 1167 17 4532 9348 + + +20 1 1305 69 1758 1761 + +20 2 1355 69 1908 1761 + +20 3 1761 24 1264 1917 +20 4 1917 30 0003 1925 +20 5 1925 15 1928 8002 +20 6 8002 60 1941 +20 7 1941 21 1297 1900 +20 8 1900 30 0002 1757 +20 9 1757 21 1265 1768 +20 10 1768 46 1771 1772 +20 11 1771 69 1774 1778 +20 12 1772 69 1775 1778 +20 13 1778 24 1283 1786 +20 14 1786 68 8002 1795 +20 15 1795 15 1568 1773 +20 16 1773 35 0001 1779 +20 17 1779 44 1783 1784 +20 18 1783 46 1937 1930 +20 19 1784 30 0005 1897 +20 20 1897 69 1901 1754 +20 21 1754 22 1260 1763 +20 22 1763 46 1766 1918 +20 23 1918 16 1921 1926 +20 24 1926 46 1929 1930 +20 25 1930 60 1297 1264 +20 26 1929 65 1265 1769 +20 27 1769 69 1922 1777 +20 28 1766 60 1919 1923 +20 29 1923 64 1265 1770 +20 30 1770 69 1924 1777 +20 31 1777 24 1285 1788 +20 32 1788 35 0001 1260 +20 33 1260 30 1781 +20 34 1781 67 8002 1789 +20 35 1789 20 1293 1796 +20 36 1796 15 1799 1752 +20 37 1752 44 1755 1756 +20 38 1755 60 1759 1913 +20 39 1913 19 1293 1927 +20 40 1927 35 0001 1933 +20 41 1933 10 1665 1920 +20 42 1920 21 1277 1780 +20 43 1780 60 1293 1797 +20 44 1797 11 1759 1764 +20 45 1764 64 1277 1902 +20 46 1902 69 1905 1909 +20 47 1756 65 1293 1147 +20 48 1147 35 0001 1753 +20 49 1753 69 1906 1909 +20 50 1909 24 1267 1570 +20 51 1570 20 1278 1931 +20 52 1931 60 8002 1939 +20 53 1939 19 8001 1945 +20 54 1945 21 1250 1903 +20 55 1903 61 8003 1911 +20 56 1911 19 1776 1940 +20 57 1940 60 8003 1149 +20 58 1149 10 1856 1762 + +20 59 1762 19 1250 1790 +20 60 1790 60 8003 1798 +20 61 1798 11 1855 1914 +20 62 1914 19 1250 1938 +20 63 1938 60 8003 1148 +20 64 1148 10 1853 1760 +20 65 1760 19 1250 1787 +20 66 1787 60 8003 1146 +20 67 1146 11 1852 1907 +20 68 1907 19 1250 1904 +20 69 1904 30 0001 1912 +20 70 1912 60 8003 1782 +20 71 1782 10 1785 1791 +20 72 1791 19 1278 1932 +20 73 1932 60 8003 1143 +20 74 1267 10 1285 +20 75 1285 00 8003 +20 76 1943 15 1701 1910 +20 77 1910 35 0001 1934 +20 78 1934 44 1942 1793 +20 79 1942 31 0003 1915 +20 80 1915 35 0002 1935 +20 81 1793 31 0002 1916 +20 82 1916 35 0001 1935 +20 83 1935 60 8002 1944 +20 84 1944 36 1765 +20 85 1765 11 8002 1864 +20 86 1864 10 1518 1283 +20 87 1283 00 8003 1264 +20 88 1264 00 +20 89 1936 60 1794 1655 +20 90 1937 65 1701 1910 + +20 91 1758 00 1445 +20 92 1908 21 1283 1936 +20 93 1928 60 1941 +20 94 1774 61 8003 1264 +20 95 1775 60 8003 1264 +20 96 1568 49 +20 97 1901 30 1781 +20 98 1921 00 0003 +20 99 1922 65 8003 1910 +20 100 1919 00 0100 +20 101 1224 66 8003 1943 +20 102 1799 97 2000 +20 103 1759 06 +20 104 1665 10 +20 105 1905 10 1731 1285 +20 106 1906 10 1580 1285 +20 107 1785 20 +20 108 1731 05 4041 9500 +20 109 1580 00 +20 110 1701 15 7079 6327 +20 111 1518 00 0050 +20 112 1794 57 2957 8051 +20 113 1801 50 + +20 114 1143 19 1801 1267 + diff --git a/I650/sw/is_run.ini b/I650/sw/is_run.ini new file mode 100644 index 00000000..03f0522f --- /dev/null +++ b/I650/sw/is_run.ini @@ -0,0 +1,48 @@ + +; set console -n log=log.txt +; set debug -n debug.txt +; set debug stdout +; set cpu debug=cmd;data;detail + + +; params: %1 source card deck to run with Floating Point Interpretive System (IS) +; %2 input card deck (if empty, do not attach input card + +; Load IS deck into (1 word per card format), but does not execute it + +set cpu 2k + +echo *** +echo *** load is deck into drum +echo *** + +att cdr1 -q is.dck + +d csw 7019519999 +d ar 8000 +go + +; now put IS program cards in reader and load them + +! copy %1 deck_in.dck > nul +if "%2" == "" goto run +! copy %1 + %2 deck_in.dck > nul +:run + +att cdr1 deck_in.dck +set cdr1 wiring=is + +att cdp1 -n -q deck_out_run.dck +set cdp1 echo, print, wiring=is +att cdp0 -n -q print.txt + +echo *** +echo *** load and run IS program +echo *** + +d csw 7019511333 +d ar 8000 +go + +:end + diff --git a/I650/sw/is_set_loopbox.txt b/I650/sw/is_set_loopbox.txt new file mode 100644 index 00000000..87228cc7 --- /dev/null +++ b/I650/sw/is_set_loopbox.txt @@ -0,0 +1,77 @@ + + deck 21. extra instr for general computing + set loopbox O2=800 + tr zero O2=453 + +21 1 1800 00 0000 0970 set loopbox: 0 800 00r nnn + if r=0 resets loopbox (= 000 000 000) + if r=1 sets loopbox for a-param, with value 0-999 from float + contents of register nnn. clears loobox value + for b and c. if float value at register is outside + range 0-999 program stops at 2222 + if r=2 sets loobox for b + if r=3 sets loobox for c + +21 2 0998 00 1000 0000 param1m (const to decrement param) +21 3 0997 35 0006 0987 bxa slt 0006 svlb +21 4 0996 35 0003 0987 bxb slt 0003 svlb +21 5 0995 00 0000 0987 bxc nop svlb +21 6 0994 60 0000 0950 fldc rau 0000 setb1 +21 7 0993 00 0000 0000 shbx +21 8 0992 00 0000 0000 svfc +21 9 0991 01 0000 0000 hi01 +21 10 0990 50 0000 0000 hi50 + + +21 11 0970 65 1045 0971 ral paramb is nnn0000000 +21 12 0971 45 0972 0987 brnz (cont) svlb +21 13 0972 16 0998 0973 sl param1m +21 14 0973 45 0975 0977 brnz (cont) seta +21 15 0975 16 0998 0976 sl param1m +21 16 0976 45 0979 0978 brnz setc setb +21 17 0977 69 0997 0980 seta ld bxa setbx +21 18 0978 69 0996 0980 setb ld bxb setbx +21 19 0979 69 0995 0980 setc ld bxc setbx +21 20 0980 24 0993 0981 setbx std shbx +21 21 0981 65 1023 0982 ral paramc lower acc is nnn0000000 +21 22 0982 30 0003 0983 srt 3 00 0nnn 000 +21 23 0983 15 0994 8002 al fldc 8002 + 8002 rau [c] setb1 read float value at [c] as nnnxxxxxee +21 24 0984 35 0003 0985 setb2 slt 3 upper acc is 000000nnn +21 25 0985 16 8002 0986 setb3 sl 8002 clear lower acc +21 26 0986 69 0993 8001 ld shbx 8001 + 8001 slt [0,3,6] upper acc is 000 000 nnn, 000 nnn 000, or nnn 000 000 +21 27 0987 21 1017 1095 svlb stu lbox 1095 save loopbox + +21 28 0950 21 0992 0951 setb1 stu svfc save [c] float value +21 29 0951 44 0952 0987 brnzu svlb if [c] is zero go to save loopbox +21 30 0952 46 1315 0953 brmin 1315 if [c] is <0 go to 2222 stop +21 31 0953 35 0008 0954 slt 8 upper acc is ee00000000 +21 32 0954 11 0990 0955 su hi50 +21 33 0955 44 0956 0962 brnzu i00n jump if [c] is in range 0-9 +21 34 0956 11 0991 0957 su hi01 +21 35 0957 44 0958 0961 brnzu i0nn jump if [c] is in range 10-99 +21 36 0958 11 0991 0959 su hi01 +21 37 0959 44 1315 0960 brnzu 1315 innn jump if [c] is in range 100-999, else go to 2222 stop +21 38 0960 69 0969 0963 innn ld stnnn ixxx +21 39 0961 69 0968 0963 i0nn ld stn0n ixxx +21 40 0962 69 0967 0963 i00n ld st00n ixxx +21 41 0963 24 0984 0964 ixxx std setb2 +21 42 0964 65 0992 0984 ral svfc setb2 + +21 43 1453 60 1009 0965 rau last get last result + + tr zero: 0 453 bbb ccc + goto b if last result is zero + goto c if last result is non zero + +21 44 0965 30 0002 0966 srt 2 +21 45 0966 44 1120 0974 brnzu gotoc gotob +21 46 0974 60 1045 1027 gotob rau paramb goto + +21 47 0967 35 0001 0985 st00n slt 1 setb3 +21 48 0968 35 0002 0985 st0nn slt 2 setb3 +21 49 0969 35 0003 0985 stnnn slt 3 setb3 + +21 50 0988 00 0000 0000 vacant location +21 51 0989 00 0000 0000 vacant location diff --git a/I650/sw/is_sys_load_src.txt b/I650/sw/is_sys_load_src.txt new file mode 100644 index 00000000..f6c13f4f --- /dev/null +++ b/I650/sw/is_sys_load_src.txt @@ -0,0 +1,97 @@ + 1 + 1 interpretive system (is) loader + 1 creates a 1-word load cards + 1 deck by reading cards as + 1 writen in manual + 1 + 1 this program is manually + 1 assembled (just using soap to + 1 load it) as is (1956) predates + 1 soap (1957) + 1 + 0880 70 1951 0881 rdcrd rd loc read card + 0881 60 1951 0892 rau loc lbl1 prepare accumulator for move + 0882 10 0870 0883 lbl2 au stw + 0883 15 0871 0884 al ldw + 0884 10 1952 0885 au wc + 0885 21 0874 0886 stu nwc + 0886 11 1952 8002 su wc + 8002 69 1953 8003 ld w move one word form card read area + 8003 24 0000 0887 std + 0887 15 0872 0888 nxt al iaddr increase address by 1 + 0888 10 8001 0889 au 8001 + 0889 11 0874 0890 su nwc test for end of moving + 0890 44 0891 0880 brnzu lbl3 rdcrd + 0891 10 0874 8002 lbl3 au nwc nxt return to move another word + 0892 44 0893 0880 lbl1 brnzu rdcrd if loc is zero read next card + 0893 11 0873 0894 su i2000 + 0894 46 0895 0880 brmin rdcrd if loc >= 2000 read next card + 0895 10 0873 0882 au i2000 lbl2 + 1 + 1 constants + 1 + 0870 24 0000 0887 stw std 0000 nxt store word + 0871 69 1953 8003 ldw ld w load word from card read + 0872 00 0001 0000 iaddr + 0873 00 2000 0000 i2000 + 0874 00 0000 0000 nwc temp variable + 1 + 1 card read area + 1 + 1 1951 00 1002 0000 loc location + 1 1952 00 0002 0000 wc word count + 1 1953 00 3333 4444 W word1 + 1 1954 00 5555 6666 word2 + 1 1955 00 0000 0000 word3 + 1 1956 00 0000 0000 word4 + 1 1957 00 0000 0007 word5 + 1 1958 00 0000 0008 word6 + 1 + 1 + 1 generate system + 1 punch the whole is system on a 1 + 1 word per card format + 1 from 0900 to 1999 + 1 + 0801 65 0852 0802 lblw ral loc1 prepare accumulator for move + 0802 10 0850 0803 au stw2 + 0803 15 0851 8002 al ldw2 + 8002 69 0000 8003 ld move one word to card punch area + 8003 24 0000 0804 std ww + 0804 65 0852 0805 p1w ral loc1 set word loc in card punch area + 0805 15 0854 0806 al wloc0 + 0806 20 1979 0807 stl wloc + 0807 10 1978 0808 au cnum set card number in card punch area + 0808 10 0855 0809 au icard + 0809 21 1978 0810 stu cnum + 0810 71 1977 0811 pch1w pch 1977 punch 1w card + 0811 65 0852 0812 ral loc1 + 0812 16 0853 0813 sl loc2 + 0813 46 0814 9999 brmin 9999 if loc1 >= loc2 terminate + 0814 15 0853 0815 al loc2 + 0815 15 0872 0816 al iaddr increment loc1 + 0816 20 0852 0801 stl loc1 lblw go punch next word + 1 + 1 constants + 1 + 0850 24 1980 0804 stw2 std wdata p1w store word for punch + 0851 69 0000 8003 ldw2 ld 0000 load word + 0852 00 0900 0000 loc1 first location to punch + 0853 00 1999 0000 loc2 last location to punch + 0854 24 0000 8000 wloc0 word location on 1e load card format + 0855 00 0000 0001 icard just one + 1 + 1 card punch area (1 word per card load card) + 1 make first word negative so is control panel + 1 punchs a load card with y(12) hi punch set + 1 + - 1977 69 1954 1953 + 1978 00 0000 0000 cnum card number + 1979 24 0000 8000 wloc word location + 1980 00 0000 0000 wdata word data in load card + 1981 00 0000 0000 + 1982 00 0000 0000 + 1983 00 0000 0000 + 1984 00 0000 0000 + 1985 00 0000 0000 + 1986 00 0000 0000 diff --git a/I650/sw/is_trace_src.txt b/I650/sw/is_trace_src.txt new file mode 100644 index 00000000..f012e85b --- /dev/null +++ b/I650/sw/is_trace_src.txt @@ -0,0 +1,59 @@ +10 1 1061 21 1980 1386 +10 2 1386 30 0003 1946 +10 3 1946 20 1023 1947 +10 4 1947 60 8003 1948 +10 5 1948 30 0003 1949 +10 6 1949 20 1045 1950 +10 7 1950 60 8003 1961 +10 8 1961 24 1260 1962 +10 9 1962 30 0003 1963 +10 10 1963 44 1965 1968 +10 11 1965 65 8002 1966 +10 12 1966 30 0003 1967 +10 13 1967 15 1998 8002 +10 14 8002 60 1968 +10 15 1968 21 1982 1969 +10 16 1969 65 1045 1970 +10 17 1970 30 0003 1971 +10 18 1971 15 1999 8002 +10 19 8002 69 1972 +10 20 1972 24 1983 1973 +10 21 1973 69 1974 +10 22 1974 24 1984 1975 +10 23 1975 69 1017 1987 +10 24 1987 24 1981 1988 +10 25 1988 65 1098 1989 +10 26 1989 24 1977 1990 +10 27 1990 15 1997 8002 +10 28 8002 69 +10 29 1991 24 1979 1992 +10 30 1992 65 1986 1993 +10 31 1993 15 1024 1994 +10 32 1994 20 1986 1995 +10 33 1995 71 1977 1996 +10 34 1996 60 1260 1105 + +10 35 1450 69 1976 1331 +10 36 1331 24 1061 1095 + +10 37 1451 69 1154 1358 +10 38 1358 24 1061 1095 + +10 39 1452 69 1976 1332 +10 40 1332 24 1061 1091 +10 41 1091 65 1098 1165 +10 42 1165 16 1173 1334 +10 43 1334 69 1141 8002 +10 44 8002 24 1095 + +10 45 1997 09 0884 +10 46 1998 60 1968 +10 47 1999 69 1972 +10 48 1141 04 5400 +10 49 1173 36 0012 +10 50 1154 30 0003 1019 +10 51 1978 00 0006 0008 +10 52 1964 00 1095 +10 53 1976 21 1980 1386 +10 54 1024 00 0001 +10 55 1958 44 1965 1968 diff --git a/I650/sw/soapII.dck b/I650/sw/soapII.dck new file mode 100644 index 00000000..26acff42 --- /dev/null +++ b/I650/sw/soapII.dck @@ -0,0 +1,1400 @@ +0?0000800? 0001 1 soap 2 +0?0000800? 0002 1 +0?0000800? 0003 1 symbolic optimal assembly prog +0?0000800? 0004 1 +0?0000800? 0005 1 for the +0?0000800? 0006 1 +0?0000800? 0007 1 ibm 650 +0?0000800? 0008 1 +0?0000800? 0009 1 data processing system +0?0000800? 0010 1 +0?0000800? 0011 regs0000 0399 symbol tab +0?0000800? 0012 rege0400 0599 equiv tabl +0?0000800? 0013 rega0600 0799 avail tabl +0?0000800? 0014 regn0800 0899 num op tab +0?0000800? 0015 blr 1000 1000 entry +0?0000800? 0016 blr 1001 1012 pseudo ent +0?0000800? 0017 blr 1021 1049 reg table +0?0000800? 0018 regc1050 1164 sym op tab +0?0000800? 0019 bla 1098 1099 +0?0000800? 0020 bla 1148 1149 +0?0000800? 0021 blr 1900 1900 manual pat +0?0000800? 0022 synreadc 1950 +0?0000800? 0023 blr 1951 1962 read area +0?0000800? 0024 regt1990 1992 type +0?0000800? 0025 regp1977 1986 punch area +0?0000800? 0026 blr 1998 1999 +0?0000800? 0027 equxxxx1 1961 +0?0000800? 0028 equxxxx2 1962 +0?0000800? 0029 blr 1563 1570 type2 +0?0000800? 0030 bla 1565 1565 +0?0000800? 0031 bla 1569 1569 +0?0000800? 0032 regb0900 0901 sub 2 +0?0000800? 0033 regh0902 0904 type 2 +0?0000800? 0034 regm0905 0907 +0?0000800? 0035 regq0908 0909 +0?0000800? 0036 regr1200 1207 sub 5 +0?0000800? 0037 regu1250 1259 sub 13 +0?0000800? 0038 regv0910 0912 equ syn +0?0000800? 0039 regx0913 0914 type 0 +0?0000800? 0040 regy0915 0916 equ syn +0?0000800? 0041 regz0917 0919 +0?0000800? 0042 regw0920 0922 +0?0000800? 0043 blr 0923 0968 multiple r +0?0000800? 0044 regi1300 1307 sub 13 +0?0000800? 0045 1 +0?0000800? 0046 1 control program +0?0000800? 0047 1 +6I1954195C 0048241000800?691950135C 1000lddreadc sub16 entry +0?0000800? 0049 1 +6I1954195C 0050241950800?701999199H readcrcd 1999 1998 read card +6I1954195C 0051241998800?691951135D 1998ldd 1951 transfer +6I1954195C 0052241354800?241977098? stdp0001 alphabetic +6I1954195C 0053240980800?691952135E ldd 1952 input +6I1954195C 0054241355800?241978098A stdp0002 to +6I1954195C 0055240981800?691953135F ldd 1953 output +6I1954195C 0056241356800?241979098B stdp0003 +6I1954195C 0057240982800?691954135G ldd 1954 +6I1954195C 0058241357800?241980098C stdp0004 +6I1954195C 0059240983800?691955120H ldd 1955 +6I1954195C 0060241208800?241981098D stdp0005 +6I1954195C 0061240984800?691956120I ldd 1956 +6I1954195C 0062241209800?241982098E stdp0006 +6I1954195C 0063240985800?651985098I ralp0009 step +6I1954195C 0064240989800?150992099G alo1ixxx card +6I1954195C 0065240997800?201985098H stlp0009 number +6I1954195C 0066240988800?601960101E rau 1960 store +6I1954195C 0067241015800?300002097A srt 0002 control +6I1954195C 0068240971800?211984098G stup0008 info +6I1954195C 0069240987800?100990099E auptorg +6I1954195C 0070240995800?201986800C stlp0010 8003 transfer +6I1954800? 0071248003800?000000999I 8003nop 0000 9999 to type +0?0000800? 0072 1 +6I1954195C 0073241350800?711977195? punchpchp0001 readc punch read +0?0000800? 0074 1 +6I1954195C 0075241400800?601950140E setccraureadc sub10 sudo exit +0?0000800? 0076 1 +6I1954195C 0077241900800?691950140C 1900lddreadc sub14 manual pat +6I1954195C 0078241990800?690993099F t0001lddx subr3 type 0 +0?0000800? 0079 1 +6I1954195C 0080240913800?691016096I x0001ldd procl 650 +6I1954195C 0081241016800?691019097B ldd procd command or +6I1954195C 0082241019800?691350145C lddpunch proci constants +0?0000800? 0083 1 +6I1954195C 0084240914800?000000800C x0002nop 0000 8003 pseudo op +0?0000800? 0085 1 +6I1954195C 0086241991800?601950140E t0002raureadc sub10 type 1 com +0?0000800? 0087 1 +6I1954195C 0088240993800?000000091C x 00 0000 x0001 +0?0000800? 0089 1 +0?0000800? 0090 1 relocate routine +0?0000800? 0091 1 +0?0000800? 0092 hedt +6I1954195C 0093241992800?691195099F t0003lddq subr3 process op +6I1954195C 0094240909800?000000101C q0002nop 0000 illop illegal op +6I1954195C 0095240908800?651951145E q0001ral 1951 is l fixed +6I1954195C 0096241455800?350002121A slt 0002 +6I1954195C 0097241211800?441165116F nzu rel +6I1954195C 0098241165800?601957126A rau 1957 fixed l +6I1954195C 0099241261800?111014116I sup2000i drum core +6I1954195C 0100241169800?461172097C bmi fc +6I1954195C 0101241172800?108001097I aup 8001 res fixed drum +6I1954195C 0102240973800?651957131A fc ral 1957 setl fixed core +6I1954195C 0103241450800?651961131A sr ralxxxx1 setl set l +6I1954195C 0104241311800?350004117A setl slt 0004 +6I1954195C 0105241171800?691984118G lddp0008 +6I1954195C 0106241187800?221984123G sdap0008 prod +6I1954195C 0107241166800?601957136A rel rau 1957 drum core +6I1954195C 0108241361800?111014121I sup2000i +6I1954195C 0109241219800?461222117C bmi rc +6I1954195C 0110241222800?100975117I aupddiff relocate +6I1954195C 0111241179800?461182118C bmi bl drum addr +6I1954195C 0112241182800?101014097I aup2000i res +6I1954195C 0113240979800?211961121D res stuxxxx1 +6I1954195C 0114241214800?691450150C lddsr sub2r reserve l +6I1954195C 0115241173800?651957141A rc ral 1957 relocate +6I1954195C 0116241411800?151264126I alocdiff core +6I1954195C 0117241269800?161272097G slo9060 +6I1954195C 0118240977800?461180118C bmi bl +6I1954195C 0119241180800?158001131A alo 8001 setl +6I1954195C 0120241183800?601237099A bl rauprod sub12 blank l +0?0000800? 0121 1 +0?0000800? 0122 regj0944 0944 d type 2 +0?0000800? 0123 regg0941 0941 +0?0000800? 0124 1 +6I1954195C 0125241237800?691190119C prod lddproi set d exit +6I1954195C 0126241193800?241196099I stdexitx +6I1954195C 0127240999800?601952140G rau 1952 what is d +6I1954195C 0128241407800?691210121C lddh subr4 +6I1954195C 0129240902800?651958126C h0001ral 1958 relocate +6I1954195C 0130241263800?161014131I slo2000i d or c +6I1954195C 0131241319800?461564156C bmi 1564 1563 +6I1954195C 0132240903800?300008122A h0002srt 0008 c d or f +6I1954195C 0133241221800?100974800C aup1500 8003 +6I1954195C 0134241563800?651264136I 1563ralcdiff cdd c +6I1954195C 0135241564800?650975136I 1564ralddiff cdd d +6I1954195C 0136241566800?651958094D 1566ral 1958 j0001 f +6I1954195C 0137241369800?151958094D cdd alo 1958 j0001 +6I1954195C 0138240904800?000000094C h0003nop 0000 g0003 symbolic +0?0000800? 0139 1 +0?0000800? 0140 regj0960 0960 i +0?0000800? 0141 regf0955 0955 +0?0000800? 0142 1 +6I1954195C 0143241190800?691350155C proi lddpunch set i exit +6I1954195C 0144241553800?241196109I stdexitx +6I1954195C 0145241099800?601953145G rau 1953 what is i +6I1954195C 0146241457800?691260121C lddm subr4 +6I1954195C 0147240905800?651959131C m0001ral 1959 relocate +6I1954195C 0148241313800?161014141I slo2000i d or c +6I1954195C 0149241419800?461568156G bmi 1568 1567 +6I1954195C 0150240906800?300008117E m0002srt 0008 c d or f +6I1954195C 0151241175800?100978800C aup1504 8003 +6I1954195C 0152241567800?651264146I 1567ralcdiff cdi c +6I1954195C 0153241568800?650975146I 1568ralddiff cdi d +6I1954195C 0154241570800?651959096? 1570ral 1959 j0001 f +6I1954195C 0155241469800?151959096? cdi alo 1959 j0001 +6I1954195C 0156240907800?000000095G m0003nop 0000 f0003 symbolic +0?0000800? 0157 1 +6I1954195C 0158241195800?000000090H q 00 0000 q0001 constants +6I1954195C 0159241272800?000000906? 9060 00 0000 9060 +6I1954195C 0160241210800?000000090B h 00 0000 h0001 +6I1954195C 0161240974800?000000150? 1500 00 0000 1500 +6I1954195C 0162241260800?000000090E m 00 0000 m0001 +6I1954195C 0163240978800?000000150D 1504 00 0000 1504 +6I1954195C 0164241961800?010000196A xxxx1 01 0000 xxxx1 eraseable +0?0000800? 0165 hed +0?0000800? 0166 1 +0?0000800? 0167 1 bop routine +0?0000800? 0168 1 +6I1954195C 0169241001800?691404135C 1001ldd sub16 initialize +6I1954195C 0170241404800?601950140E raureadc sub10 punch +0?0000800? 0171 1 +0?0000800? 0172 1 blr routine +0?0000800? 0173 1 +6I1954195C 0174241002800?651959136C 1002ral 1959 blr reserve +6I1954195C 0175241363800?161958141C blr slo 1958 fwa to +6I1954195C 0176241413800?108001127A aup 8001 lwa +6I1954195C 0177241271800?691400150C lddsetcc sub2r +0?0000800? 0178 1 +0?0000800? 0179 1 rbr routine +0?0000800? 0180 1 +6I1954195C 0181241012800?600975122I 1012rauddiff +6I1954195C 0182241229800?151959136C alo 1959 blr +0?0000800? 0183 1 +0?0000800? 0184 1 bla routine +0?0000800? 0185 1 +6I1954195C 0186241003800?691406130I 1003lddh8xxx set drum +6I1954195C 0187241309800?241212121E stddrumt tag to 8 +6I1954195C 0188241215800?651959146C ral 1959 unreserve +6I1954195C 0189241463800?161958151C slo 1958 fwa +6I1954195C 0190241513800?108001132A aup 8001 to +6I1954195C 0191241321800?691400160C lddsetcc sub2u lwa +0?0000800? 0192 1 +0?0000800? 0193 1 reg routine +0?0000800? 0194 1 +0?0000800? 0195 hedr +6I1954195C 0196241004800?651952150G 1004ral 1952 is +6I1954195C 0197241507800?300008122E srt 0008 region +6I1954195C 0198241225800?161178123C slo90xxx character +6I1954195C 0199241233800?460986100B bmi 1002 alphabetic +6I1954195C 0200240986800?151189124C alo29xxx +6I1954195C 0201241243800?461002119G bmi 1002 +6I1954195C 0202241197800?350004155G slt 0004 store +6I1954195C 0203241557800?151310126E alost region +6I1954195C 0204241265800?101958161C aup 1958 origin +6I1954195C 0205241613800?101216800B auph9xxx 8002 +6I1954800? 0206248002800?219999100B 8002stu 9999 1002 +0?0000800? 0207 1 +6I1954195C 0208241310800?211021100B st stu 1021 1002 constants +0?0000800? 0209 hed +0?0000800? 0210 1 +0?0000800? 0211 1 equ req and syn routine +0?0000800? 0212 1 +0?0000800? 0213 hedz +6I1954195C 0214241005800?691406135I 1005lddh8xxx both equ +6I1954195C 0215241006800?691216135I 1006lddh9xxx both syn +6I1954195C 0216241359800?241262131E both stdtag +6I1954195C 0217241315800?601953160G rau 1953 what is i +6I1954195C 0218241607800?691360121C lddz subr4 +6I1954195C 0219240917800?651959091E z0001ral 1959 y0001 absolute +6I1954195C 0220240918800?691371117D z0002lddy subr9 regional +6I1954195C 0221240915800?201519132B y0001stle td +6I1954195C 0222240916800?651986119A y0002ralp0010 bp reg error +6I1954195C 0223240919800?691372127E z0003lddw subr6 symbolic +6I1954195C 0224240920800?651223091E w0001ralequiv y0001 s defined +6I1954195C 0225240921800?651986119A w0002ralp0010 bp s undefind +6I1954195C 0226240922800?651986119A w0003ralp0010 bp s tab full +0?0000800? 0227 1 +6I1954195C 0228241322800?601952165G td rau 1952 head d +6I1954195C 0229241657800?691410166C ldd sub15 and equate +6I1954195C 0230241410800?691713127E lddv subr6 to e +6I1954195C 0231240912800?651986119A v0003ralp0010 bp s tab full +6I1954195C 0232240910800?151519127C v0001aloe sd +6I1954195C 0233240911800?151519127C v0002aloe sd +6I1954195C 0234241273800?690976127I sd lddtt subr7 +0?0000800? 0235 1 +6I1954195C 0236240976800?691262136E tt lddtag test tag +6I1954195C 0237241365800?901400097? bdosetcc +6I1954195C 0238240970800?601519132C raue reserve e +6I1954195C 0239241323800?691400150C lddsetcc sub2r +0?0000800? 0240 1 +6I1954195C 0241241011800?691406140I 1011lddh8xxx req +6I1954195C 0242241409800?241262141E stdtag routine +6I1954195C 0243241415800?651959176C ral 1959 is i +6I1954195C 0244241763800?161014156I slo2000i drum o cor +6I1954195C 0245241569800?461422137C bmid +6I1954195C 0246241373800?151264161I alocdiff cd +6I1954195C 0247241422800?150975161I d aloddiff cd +6I1954195C 0248241619800?151014091E cd alo2000i y0001 +0?0000800? 0249 1 +6I1954195C 0250241360800?000000091G z 00 0000 z0001 constants +6I1954195C 0251241371800?000089091E y 00 0089 y0001 +6I1954195C 0252241372800?000000092? w 00 0000 w0001 +6I1954195C 0253241713800?000000091? v 00 0000 v0001 +6I1954195C 0254241500800?008800000? 88 00 8800 0000 +0?0000800? 0255 1 +6I1954195C 0256241191800?151500150E bp alo88 by pass +6I1954195C 0257241505800?201986135? stlp0010 punch +0?0000800? 0258 1 +6I1954195C 0259241262800?010000126B tag 01 0000 tag eraseable +6I1954195C 0260241519800?010000151I e 01 0000 e +0?0000800? 0261 hed +0?0000800? 0262 1 +0?0000800? 0263 1 alf routine +0?0000800? 0264 1 +6I1954195C 0265241007800?691460096I 1007ldd procl proces loc +6I1954195C 0266241460800?691952155E ldd 1952 +6I1954195C 0267241555800?241983118F stdp0007 +6I1954195C 0268241186800?651953170G ral 1953 replace +6I1954195C 0269241707800?451350146A nzepunch blank i +6I1954195C 0270241461800?691314101G lddsoap2 by +6I1954195C 0271241017800?241979135? stdp0003 punch soap2 +6I1954195C 0272241314800?827661779B soap2alfsoap2 soap2 constant +0?0000800? 0273 1 +0?0000800? 0274 1 pat routine +0?0000800? 0275 1 +6I1954195C 0276241008800?601511140E 1008rau sub10 +6I1954195C 0277241511800?691950140C lddreadc sub14 +0?0000800? 0278 1 +0?0000800? 0279 1 hed routine +0?0000800? 0280 1 +6I1954195C 0281241009800?651952175G 1009ral 1952 store +6I1954195C 0282241757800?300008132E srt 0008 heading +6I1954195C 0283241325800?201329140? stl0000h setcc character +0?0000800? 0284 1 +0?0000800? 0285 1 rel routine +0?0000800? 0286 1 +0?0000800? 0287 hedm +6I1954195C 0288241010800?651952180G 1010ral 1952 set +6I1954195C 0289241807800?451510156A nze sdd drum +6I1954195C 0290241510800?651958156A ral 1958 sdd and +6I1954195C 0291241561800?200975122H sdd stlddiff core +6I1954195C 0292241228800?651953185G ral 1953 deltas +6I1954195C 0293241857800?451560161A nze scd +6I1954195C 0294241560800?651959161A ral 1959 scd +6I1954195C 0295241611800?201264140? scd stlcdiff setcc +0?0000800? 0296 1 +6I1954195C 0297240975800?010000097E ddiff 01 0000 ddiff eraseable +6I1954195C 0298241264800?010000126D cdiff 01 0000 cdiff +0?0000800? 0299 hed +0?0000800? 0300 1 +0?0000800? 0301 1 load availablity table +0?0000800? 0302 1 +0?0000800? 0303 hedl +6I1954195C 0304241999800?651951160E 1999ral 1951 calc +6I1954195C 0305241605800?300004146E srt 0004 loc +6I1954195C 0306241465800?350004137E slt 0004 w2 +6I1954195C 0307241375800?158002128C alo 8002 +6I1954195C 0308241283800?158002124A alo 8002 +6I1954195C 0309241241800?150994114I aloc1 +6I1954195C 0310241149800?101352800C aupc2 8003 +6I1954800? 0311248003800?699995800B 8003ldd 9995 8002 load +6I1954800? 0312248002800?249994124G 8002std 9994 tup table +6I1954195C 0313241247800?111550165E tup suptw +6I1954195C 0314241655800?441459195? nzu readc +6I1954195C 0315241459800?101312116G auptwp2 +6I1954195C 0316241167800?151020800C alo1dxxx 8003 +0?0000800? 0317 1 +6I1954195C 0318240994800?240600124G c1 stda0001 tup constants +6I1954195C 0319241352800?691952800B c2 ldd 1952 8002 +6I1954195C 0320241550800?691958800B tw ldd 1958 8002 +6I1954195C 0321241312800?691960800B twp2 ldd 1960 8002 +0?0000800? 0322 hed +0?0000800? 0323 1 optimizing table +0?0000800? 0324 1 +6I1954195C 0325240800800?000404099H n0001 00 0404 0998 nop +6I1954195C 0326240801800?000404099H n0002 00 0404 0998 hlt +6I1954195C 0327240802800?332322099I n0003 33 2322 0999 ufa +6I1954195C 0328240803800?000505099H n0004 00 0505 0998 rtc +6I1954195C 0329240804800?000505099H n0005 00 0505 0998 rtn +6I1954195C 0330240805800?000505099H n0006 00 0505 0998 rta +6I1954195C 0331240806800?000505099H n0007 00 0505 0998 wtn +6I1954195C 0332240807800?000505099H n0008 00 0505 0998 wta +6I1954195C 0333240808800?331212099I n0009 33 1212 0999 lib +6I1954195C 0334240809800?330202099I n0010 33 0202 0999 ldi +6I1954195C 0335240810800?330504099I n0011 33 0504 0999 aup +6I1954195C 0336240811800?330504099I n0012 33 0504 0999 sup +6I1954195C 0337240812800?999999999I n0013 99 9999 9999 not used +6I1954195C 0338240813800?999999999I n0014 99 9999 9999 not used +6I1954195C 0339240814800?331110099I n0015 33 1110 0999 div +6I1954195C 0340240815800?330504099I n0016 33 0504 0999 alo +6I1954195C 0341240816800?330504099I n0017 33 0504 0999 slo +6I1954195C 0342240817800?330504099I n0018 33 0504 0999 aml +6I1954195C 0343240818800?330504099I n0019 33 0504 0999 sml +6I1954195C 0344240819800?332120099I n0020 33 2120 0999 mpy +6I1954195C 0345240820800?540303099I n0021 54 0303 0999 stl +6I1954195C 0346240821800?450303099I n0022 45 0303 0999 stu +6I1954195C 0347240822800?340303099I n0023 34 0303 0999 sda +6I1954195C 0348240823800?340303099I n0024 34 0303 0999 sia +6I1954195C 0349240824800?330303099I n0025 33 0303 0999 std +6I1954195C 0350240825800?440505099H n0026 44 0505 0998 nts +6I1954195C 0351240826800?000505099H n0027 00 0505 0998 bin +6I1954195C 0352240827800?000505099H n0028 00 0505 0998 set +6I1954195C 0353240828800?331212099I n0029 33 1212 0999 sib +6I1954195C 0354240829800?330202099I n0030 33 0202 0999 sti +6I1954195C 0355240830800?000000098H n0031 00 0000 0988 srt +6I1954195C 0356240831800?000000088H n0032 00 0000 0888 srd +6I1954195C 0357240832800?332726099I n0033 33 2726 0999 fad +6I1954195C 0358240833800?332726099I n0034 33 2726 0999 fsb +6I1954195C 0359240834800?330000099I n0035 33 0000 0999 fdv +6I1954195C 0360240835800?000000098H n0036 00 0000 0988 slt +6I1954195C 0361240836800?000000098H n0037 00 0000 0988 sct +6I1954195C 0362240837800?332726099I n0038 33 2726 0999 fam +6I1954195C 0363240838800?332726099I n0039 33 2726 0999 fsm +6I1954195C 0364240839800?330000099I n0040 33 0000 0999 fmp +6I1954195C 0365240840800?330404099H n0041 33 0404 0998 nza +6I1954195C 0366240841800?330404099H n0042 33 0404 0998 bmz +6I1954195C 0367240842800?330404099H n0043 33 0404 0998 nzb +6I1954195C 0368240843800?330404099H n0044 33 0404 0998 bmb +6I1954195C 0369240844800?340405099H n0045 34 0405 0998 nzu +6I1954195C 0370240845800?430504099H n0046 43 0504 0998 nze +6I1954195C 0371240846800?330404099H n0047 33 0404 0998 bmi +6I1954195C 0372240847800?330505099H n0048 33 0505 0998 bov +6I1954195C 0373240848800?330404099H n0049 33 0404 0998 nzc +6I1954195C 0374240849800?330404099H n0050 33 0404 0998 bmc +6I1954195C 0375240850800?000000089H n0051 00 0000 0898 axa +6I1954195C 0376240851800?000000089H n0052 00 0000 0898 sxa +6I1954195C 0377240852800?000000089H n0053 00 0000 0898 axb +6I1954195C 0378240853800?000000089H n0054 00 0000 0898 sxb +6I1954195C 0379240854800?440505099H n0055 44 0505 0998 nef +6I1954195C 0380240855800?000505099H n0056 00 0505 0998 rwd +6I1954195C 0381240856800?000505099H n0057 00 0505 0998 wtm +6I1954195C 0382240857800?000505099H n0058 00 0505 0998 bst +6I1954195C 0383240858800?000000089H n0059 00 0000 0898 axc +6I1954195C 0384240859800?000000089H n0060 00 0000 0898 sxc +6I1954195C 0385240860800?330504099I n0061 33 0504 0999 rau +6I1954195C 0386240861800?330504099I n0062 33 0504 0999 rsu +6I1954195C 0387240862800?999999999I n0063 99 9999 9999 not used +6I1954195C 0388240863800?999999999I n0064 99 9999 9999 not used +6I1954195C 0389240864800?331110099I n0065 33 1110 0999 dvr +6I1954195C 0390240865800?330504099I n0066 33 0504 0999 ral +6I1954195C 0391240866800?330504099I n0067 33 0504 0999 rsl +6I1954195C 0392240867800?330504099I n0068 33 0504 0999 ram +6I1954195C 0393240868800?330504099I n0069 33 0504 0999 rsm +6I1954195C 0394240869800?330303099I n0070 33 0303 0999 ldd +6I1954195C 0395240870800?000000099I n0071 00 0000 0999 rd1 +6I1954195C 0396240871800?000000099I n0072 00 0000 0999 wr1 +6I1954195C 0397240872800?000000099I n0073 00 0000 0999 rc1 +6I1954195C 0398240873800?000000099I n0074 00 0000 0999 rd2 +6I1954195C 0399240874800?000000099I n0075 00 0000 0999 wr2 +6I1954195C 0400240875800?000000099I n0076 00 0000 0999 rc2 +6I1954195C 0401240876800?000000099I n0077 00 0000 0999 rd3 +6I1954195C 0402240877800?000000099I n0078 00 0000 0999 wr3 +6I1954195C 0403240878800?000000099I n0079 00 0000 0999 rc3 +6I1954195C 0404240879800?000505099I n0080 00 0505 0999 rpy +6I1954195C 0405240880800?000000089H n0081 00 0000 0898 raa +6I1954195C 0406240881800?000000089H n0082 00 0000 0898 rsa +6I1954195C 0407240882800?000000089H n0083 00 0000 0898 rab +6I1954195C 0408240883800?000000089H n0084 00 0000 0898 rsb +6I1954195C 0409240884800?330506099I n0085 33 0506 0999 tlu +6I1954195C 0410240885800?000606099H n0086 00 0606 0998 sds +6I1954195C 0411240886800?000606099H n0087 00 0606 0998 rds +6I1954195C 0412240887800?000606099H n0088 00 0606 0998 wds +6I1954195C 0413240888800?000000089H n0089 00 0000 0898 rac +6I1954195C 0414240889800?000000089H n0090 00 0000 0898 rsc +6I1954195C 0415240890800?440505099H n0091 44 0505 0998 bdo +6I1954195C 0416240891800?330505099H n0092 33 0505 0998 bd1 +6I1954195C 0417240892800?330505099H n0093 33 0505 0998 bd2 +6I1954195C 0418240893800?330505099H n0094 33 0505 0998 bd3 +6I1954195C 0419240894800?330505099H n0095 33 0505 0998 bd4 +6I1954195C 0420240895800?330505099H n0096 33 0505 0998 bd5 +6I1954195C 0421240896800?330505099H n0097 33 0505 0998 bd6 +6I1954195C 0422240897800?330505099H n0098 33 0505 0998 bd7 +6I1954195C 0423240898800?330505099H n0099 33 0505 0998 bd8 +6I1954195C 0424240899800?440505099H n0100 44 0505 0998 bd9 +0?0000800? 0425 1 +0?0000800? 0426 1 symbolic op table +0?0000800? 0427 1 +6I1954195C 0428241050800?617366100G c0001 61 7366 1007 alf +6I1954195C 0429241051800?617376001E c0002 61 7376 0015 alo +6I1954195C 0430241052800?617473001G c0003 61 7473 0017 aml +6I1954195C 0431241053800?618477001? c0004 61 8477 0010 aup +6I1954195C 0432241054800?618761005? c0005 61 8761 0050 axa +6I1954195C 0433241055800?618762005B c0006 61 8762 0052 axb +6I1954195C 0434241056800?618763005H c0007 61 8763 0058 axc +6I1954195C 0435241057800?626476009? c0008 62 6476 0090 bdo +6I1954195C 0436241058800?626491009A c0009 62 6491 0091 bd1 +6I1954195C 0437241059800?626492009B c0010 62 6492 0092 bd2 +6I1954195C 0438241060800?626493009C c0011 62 6493 0093 bd3 +6I1954195C 0439241061800?626494009D c0012 62 6494 0094 bd4 +6I1954195C 0440241062800?626495009E c0013 62 6495 0095 bd5 +6I1954195C 0441241063800?626496009F c0014 62 6496 0096 bd6 +6I1954195C 0442241064800?626497009G c0015 62 6497 0097 bd7 +6I1954195C 0443241065800?626498009H c0016 62 6498 0098 bd8 +6I1954195C 0444241066800?626499009I c0017 62 6499 0099 bd9 +6I1954195C 0445241067800?626975002F c0018 62 6975 0026 bin +6I1954195C 0446241068800?627361100C c0019 62 7361 1003 bla +6I1954195C 0447241069800?627379100B c0020 62 7379 1002 blr +6I1954195C 0448241070800?627461004A c0021 62 7461 0041 bma +6I1954195C 0449241071800?627462004C c0022 62 7462 0043 bmb +6I1954195C 0450241072800?627463004I c0023 62 7463 0049 bmc +6I1954195C 0451241073800?627469004F c0024 62 7469 0046 bmi +6I1954195C 0452241074800?627677100A c0025 62 7677 1001 bop +6I1954195C 0453241075800?627685004G c0026 62 7685 0047 bov +6I1954195C 0454241076800?628283005G c0027 62 8283 0057 bst +6I1954195C 0455241077800?646985001D c0028 64 6985 0014 div +6I1954195C 0456241078800?648579006D c0029 64 8579 0064 dvr +6I1954195C 0457241079800?657884100E c0030 65 7884 1005 equ +6I1954195C 0458241080800?666164003B c0031 66 6164 0032 fad +6I1954195C 0459241081800?666174003G c0032 66 6174 0037 fam +6I1954195C 0460241082800?666485003D c0033 66 6485 0034 fdv +6I1954195C 0461241083800?667477003I c0034 66 7477 0039 fmp +6I1954195C 0462241084800?668262003C c0035 66 8262 0033 fsb +6I1954195C 0463241085800?668274003H c0036 66 8274 0038 fsm +6I1954195C 0464241086800?686564100I c0037 68 6564 1009 hed +6I1954195C 0465241087800?687383000A c0038 68 7383 0001 hlt +6I1954195C 0466241088800?736464006I c0039 73 6464 0069 ldd +6I1954195C 0467241089800?736469000I c0040 73 6469 0009 ldi +6I1954195C 0468241090800?736962000H c0041 73 6962 0008 lib +6I1954195C 0469241091800?747788001I c0042 74 7788 0019 mpy +6I1954195C 0470241092800?756566005D c0043 75 6566 0054 nef +6I1954195C 0471241093800?757677000? c0044 75 7677 0000 nop +6I1954195C 0472241094800?758382002E c0045 75 8382 0025 nts +6I1954195C 0473241095800?758961004? c0046 75 8961 0040 nza +6I1954195C 0474241096800?758962004B c0047 75 8962 0042 nzb +6I1954195C 0475241097800?758963004H c0048 75 8963 0048 nzc +6I1954195C 0476241100800?758965004E c0051 75 8965 0045 nze +6I1954195C 0477241101800?758984004D c0052 75 8984 0044 nzu +6I1954195C 0478241102800?776183100H c0053 77 6183 1008 pat +6I1954195C 0479241103800?776368007A c0054 77 6368 0071 pch +6I1954195C 0480241104800?796161008? c0055 79 6161 0080 raa +6I1954195C 0481241105800?796162008B c0056 79 6162 0082 rab +6I1954195C 0482241106800?796163008H c0057 79 6163 0088 rac +6I1954195C 0483241107800?796173006E c0058 79 6173 0065 ral +6I1954195C 0484241108800?796174006G c0059 79 6174 0067 ram +6I1954195C 0485241109800?796184006? c0060 79 6184 0060 rau +6I1954195C 0486241110800?796279101B c0061 79 6279 1012 rbr +6I1954195C 0487241111800?796364007? c0062 79 6364 0070 rcd +6I1954195C 0488241112800?796391007B c0063 79 6391 0072 rc1 +6I1954195C 0489241113800?796392007E c0064 79 6392 0075 rc2 +6I1954195C 0490241114800?796393007H c0065 79 6393 0078 rc3 +6I1954195C 0491241115800?796482008F c0066 79 6482 0086 rds +6I1954195C 0492241116800?796491007? c0067 79 6491 0070 rd1 +6I1954195C 0493241117800?796492007C c0068 79 6492 0073 rd2 +6I1954195C 0494241118800?796493007F c0069 79 6493 0076 rd3 +6I1954195C 0495241119800?796567100D c0070 79 6567 1004 reg +6I1954195C 0496241120800?796573101? c0071 79 6573 1010 rel +6I1954195C 0497241121800?796578101A c0072 79 6578 1011 req +6I1954195C 0498241122800?797788007I c0073 79 7788 0079 rpy +6I1954195C 0499241123800?798261008A c0074 79 8261 0081 rsa +6I1954195C 0500241124800?798262008C c0075 79 8262 0083 rsb +6I1954195C 0501241125800?798263008I c0076 79 8263 0089 rsc +6I1954195C 0502241126800?798273006F c0077 79 8273 0066 rsl +6I1954195C 0503241127800?798274006H c0078 79 8274 0068 rsm +6I1954195C 0504241128800?798284006A c0079 79 8284 0061 rsu +6I1954195C 0505241129800?798361000E c0080 79 8361 0005 rta +6I1954195C 0506241130800?798363000C c0081 79 8363 0003 rtc +6I1954195C 0507241131800?798375000D c0082 79 8375 0004 rtn +6I1954195C 0508241132800?798664005E c0083 79 8664 0055 rwd +6I1954195C 0509241133800?826383003F c0084 82 6383 0036 sct +6I1954195C 0510241134800?826461002B c0085 82 6461 0022 sda +6I1954195C 0511241135800?826482008E c0086 82 6482 0085 sds +6I1954195C 0512241136800?826583002G c0087 82 6583 0027 set +6I1954195C 0513241137800?826961002C c0088 82 6961 0023 sia +6I1954195C 0514241138800?826962002H c0089 82 6962 0028 sib +6I1954195C 0515241139800?827376001F c0090 82 7376 0016 slo +6I1954195C 0516241140800?827383003E c0091 82 7383 0035 slt +6I1954195C 0517241141800?827473001H c0092 82 7473 0018 sml +6I1954195C 0518241142800?827964003A c0093 82 7964 0031 srd +6I1954195C 0519241143800?827983003? c0094 82 7983 0030 srt +6I1954195C 0520241144800?828364002D c0095 82 8364 0024 std +6I1954195C 0521241145800?828369002I c0096 82 8369 0029 sti +6I1954195C 0522241146800?828373002? c0097 82 8373 0020 stl +6I1954195C 0523241147800?828384002A c0098 82 8384 0021 stu +6I1954195C 0524241150800?828477001A c0101 82 8477 0011 sup +6I1954195C 0525241151800?828761005A c0102 82 8761 0051 sxa +6I1954195C 0526241152800?828762005C c0103 82 8762 0053 sxb +6I1954195C 0527241153800?828763005I c0104 82 8763 0059 sxc +6I1954195C 0528241154800?828875100F c0105 82 8875 1006 syn +6I1954195C 0529241155800?837384008D c0106 83 7384 0084 tlu +6I1954195C 0530241156800?846661000B c0107 84 6661 0002 ufa +6I1954195C 0531241157800?866482008G c0108 86 6482 0087 wds +6I1954195C 0532241158800?867991007A c0109 86 7991 0071 wr1 +6I1954195C 0533241159800?867992007D c0110 86 7992 0074 wr2 +6I1954195C 0534241160800?867993007G c0111 86 7993 0077 wr3 +6I1954195C 0535241161800?868361000G c0112 86 8361 0007 wta +6I1954195C 0536241162800?868374005F c0113 86 8374 0056 wtm +6I1954195C 0537241163800?868375000F c0114 86 8375 0006 wtn +6I1954195C 0538241164800?999999000A c0115 99 9999 0001 table end +0?0000800? 0539 1 +0?0000800? 0540 1 sub 1 store k in fwa to lwa +0?0000800? 0541 1 +0?0000800? 0542 hed1 +6I1954195C 0543241600800?241196119I subr1stdexitx store exit +6I1954195C 0544241199800?211961136D stuxxxx1 store k +6I1954195C 0545241364800?691217117? lddfwa set +6I1954195C 0546241170800?221217122? sdafwa fwa +6I1954195C 0547241220800?350004118A slt 0004 lwa +6I1954195C 0548241181800?221962151E sdaxxxx2 addresses +6I1954195C 0549241515800?601217142A raufwa +6I1954195C 0550241421800?151961800C aloxxxx1 8003 +6I1954800? 0551248003800?209999140B 8003stl 9999 next store k +6I1954195C 0552241402800?111962126G next supxxxx2 end of +6I1954195C 0553241267800?441471119F nzu exitx loop test +6I1954195C 0554241471800?108001137I aup 8001 +6I1954195C 0555241379800?101020800C aup1dxxx 8003 step +0?0000800? 0556 1 +6I1954195C 0557241217800?209998140B fwa stl 9998 next constants +6I1954195C 0558241962800?010000196B xxxx2 01 0000 xxxx2 eraseable +0?0000800? 0559 hed +0?0000800? 0560 1 +0?0000800? 0561 1 sub 2 reserve unreserve +0?0000800? 0562 1 +0?0000800? 0563 hed2 +6I1954195C 0564241503800?241813131F sub2rstdexity reserve +6I1954195C 0565241316800?691769147B lddz ru entry +6I1954195C 0566241603800?241813136F sub2ustdexity unreserve +6I1954195C 0567241366800?691565147B ldd1i ru entry +6I1954195C 0568241472800?241246129I ru stdw set w +6I1954195C 0569241299800?201653155F stln store n +6I1954195C 0570241556800?168001191C slo 8001 calc ao +6I1954195C 0571241913800?108003157A aup 8003 and po +6I1954195C 0572241571800?300003147I srt 0003 +6I1954195C 0573241479800?211284128G stux +6I1954195C 0574241287800?118001124E sup 8001 +6I1954195C 0575241245800?350001145A slt 0001 +6I1954195C 0576241451800?211606160I stup +6I1954195C 0577241609800?118001136G sup 8001 +6I1954195C 0578241367800?350002147C slt 0002 +6I1954195C 0579241473800?108003128A aup 8003 +6I1954195C 0580241281800?101284123I aupx +6I1954195C 0581241239800?151606171A alop +6I1954195C 0582241711800?350004162A slt 0004 +6I1954195C 0583241621800?151506176A aloc1 +6I1954195C 0584241761800?200901155D stlb0002 +6I1954195C 0585241554800?691188129A lddc2 +6I1954195C 0586241291800?221231133D sdaspr +6I1954195C 0587241334800?101337142C aupc3 su +6I1954195C 0588241423800?211401160D su stusa +6I1954195C 0589241604800?101558800C aupc4 8003 +6I1954800? 0590248003800?659992090A 8003ral 9992 b0002 +6I1954195C 0591240901800?350009152A b0002slt 0009 xx +6I1954195C 0592241521800?211176142I xx stuuh +6I1954195C 0593241429800?350001118E slt 0001 +6I1954195C 0594241185800?658002129C ral 8002 +6I1954195C 0595241293800?101246135A aupw +6I1954195C 0596241351800?300001190G srt 0001 +6I1954195C 0597241907800?101176123A aupuh spr +6I1954195C 0598241231800?300009140A spr srt 0009 sa +6I1954195C 0599241401800?209983090? sa stl 9983 b0001 +6I1954195C 0600240900800?651653130H b0001raln is n zero +6I1954195C 0601241308800?451362181C nze exity +6I1954195C 0602241362800?161565166I slo1i reduce n +6I1954195C 0603241669800?201653145F stln by 1 +6I1954195C 0604241456800?601401170E rausa is ai +6I1954195C 0605241705800?111358186C supa197 in last +6I1954195C 0606241863800?461266131G bmi tp block of +6I1954195C 0607241266800?101719142C aupa201 su 4 +0?0000800? 0608 1 +6I1954195C 0609241317800?651231123E tp ralspr is p 9 +6I1954195C 0610241235800?161188134C sloc2 +6I1954195C 0611241343800?451296129G nze zp +6I1954195C 0612241296800?151249170C aloc5 step p +6I1954195C 0613241703800?691506150I lddc1 +6I1954195C 0614241509800?220901145D sdab0002 +6I1954195C 0615241454800?201231118D stlspr +6I1954195C 0616241184800?601401175E rausa reduce ai +6I1954195C 0617241755800?111408142C supc6 su by 196 +0?0000800? 0618 1 +6I1954195C 0619241297800?691506155I zp lddc1 set p +6I1954195C 0620241559800?240901150D stdb0002 to zero +6I1954195C 0621241504800?691458166A lddc7 +6I1954195C 0622241661800?241231123D stdspr +6I1954195C 0623241234800?601401180E rausa reduce ai +6I1954195C 0624241805800?111508142C supc8 su by 195 +0?0000800? 0625 1 +6I1954195C 0626241506800?350000152A c1 slt 0000 xx constants +6I1954195C 0627241188800?300009140A c2 srt 0009 sa +6I1954195C 0628241337800?200600090? c3 stla0001 b0001 +6I1954195C 0629241558800?450000000A c4 45 0000 0001 +6I1954195C 0630241565800?000000000A 1i 00 0000 0001 +6I1954195C 0631241358800?200796090? a197 stla0197 b0001 +6I1954195C 0632241719800?200800090? a201 stla0201 b0001 +6I1954195C 0633241249800?300010140A c5 srt 0010 sa +6I1954195C 0634241408800?000196000? c6 00 0196 0000 +6I1954195C 0635241458800?300000140A c7 srt 0000 sa +6I1954195C 0636241508800?000195000? c8 00 0195 0000 +6I1954195C 0637241769800?000000000? z 00 0000 0000 +6I1954195C 0638241246800?010000124F w 01 0000 w eraseable +6I1954195C 0639241653800?010000165C n 01 0000 n +6I1954195C 0640240901800?010000090A b0002 01 0000 b0002 +6I1954195C 0641241231800?010000123A spr 01 0000 spr +6I1954195C 0642241401800?010000140A sa 01 0000 sa +6I1954195C 0643241176800?010000117F uh 01 0000 uh +6I1954195C 0644241284800?010000128D x 01 0000 x +0?0000800? 0645 hed +0?0000800? 0646 1 +0?0000800? 0647 1 sub 3 process op code +0?0000800? 0648 1 +0?0000800? 0649 hed3 +6I1954195C 0650240996800?241196134I subr3stdexitx store exit +6I1954195C 0651241349800?651954165I ral 1954 +6I1954195C 0652241659800?300004181I srt 0004 is op +6I1954195C 0653241819800?451522101C nze illop blank +6I1954195C 0654241522800?350006138G slt 0006 is op +6I1954195C 0655241387800?441341119B nzu num numeric +6I1954195C 0656241341800?300002134G srt 0002 +6I1954195C 0657241347800?201961141D stlxxxx1 search +6I1954195C 0658241414800?168001167A slo 8001 symbolic +6I1954195C 0659241671800?841050185E tluc0001 op table +6I1954195C 0660241855800?151608800B alo1 8002 +6I1954800? 0661248002800?659997150A 8002ral 9997 next is +6I1954195C 0662241501800?161961161E next sloxxxx1 sym op +6I1954195C 0663241615800?350006152I slt 0006 legal +6I1954195C 0664241529800?441013138D nzuillop +6I1954195C 0665241384800?350001139A slt 0001 test for +6I1954195C 0666241391800?441295134F nzupseu pseudo op +6I1954195C 0667241346800?350001175C slt 0001 sno store num +6I1954195C 0668241753800?201983123F sno stlp0007 650 op +6I1954195C 0669241236800?300004139G srt 0004 get optim +6I1954195C 0670241397800?151650800B alo3 8002 constants +6I1954800? 0671248002800?699996139I 8002ldd 9996 nex +6I1954195C 0672241399800?241452119F nex stdoptim exitx +0?0000800? 0673 1 +6I1954195C 0674241192800?161345144I num slo4 form +6I1954195C 0675241449800?350002190E slt 0002 numeric +6I1954195C 0676241905800?168002196C slo 8002 op +6I1954195C 0677241963800?300001186I srt 0001 code +6I1954195C 0678241869800?158001175C alo 8001 sno +0?0000800? 0679 1 +6I1954195C 0680241013800?651986144A illopralp0010 illegal op +6I1954195C 0681241441800?151194149I alo5 set 8 +6I1954195C 0682241499800?201986128I stlp0010 for blank +6I1954195C 0683241289800?691242139I ldd6 nex op +0?0000800? 0684 1 +6I1954195C 0685241295800?350003180C pseu slt 0003 pseudo +6I1954195C 0686241803800?151196155A aloexitx op +6I1954195C 0687241551800?150992800B alo1ixxx 8002 +0?0000800? 0688 1 +6I1954195C 0689241608800?650000150A 1 ral 0000 next constants +6I1954195C 0690241700800?100000000? 2 10 0000 0000 +6I1954195C 0691241650800?690800139I 3 lddn0001 nex +6I1954195C 0692241345800?909000000? 4 90 9000 0000 +6I1954195C 0693241194800?000000000H 5 00 0000 0008 +6I1954195C 0694241242800?550505099I 6 55 0505 0999 +0?0000800? 0695 hed +0?0000800? 0696 1 +0?0000800? 0697 1 sub 4 what is address +0?0000800? 0698 1 +0?0000800? 0699 hed4 +6I1954195C 0700241213800?241416191I subr4stdexitz store exit +6I1954195C 0701241919800?211961146D stuxxxx1 store addr +6I1954195C 0702241464800?300008133C srt 0008 is c5 +6I1954195C 0703241333800?441437141F nzu exitz blank +6I1954195C 0704241437800?211962166E stuxxxx2 save c5 +6I1954195C 0705241665800?608002152C rau 8002 are low 4 +6I1954195C 0706241523800?101178138C aup90xxx characters +6I1954195C 0707241383800?471286128F bovloop loop numeric +6I1954195C 0708241286800?101339139C loop auph1 +6I1954195C 0709241393800?471396099H bov sym +6I1954195C 0710241396800?350002185C slt 0002 +6I1954195C 0711241853800?441286165H nzuloop +6I1954195C 0712241658800?651962141G ralxxxx2 low 4 num +6I1954195C 0713241417800?161178143C slo90xxx is c5 +6I1954195C 0714241433800?461336099H bmi sym alphabetic +6I1954195C 0715241336800?151189144C alo29xxx +6I1954195C 0716241443800?460998144G bmisym +6I1954195C 0717241447800?650992149G ral1ixxx regional +6I1954195C 0718241497800?101961171E aupxxxx1 aex +6I1954195C 0719241715800?151416172A aex aloexitz +6I1954195C 0720241721800?168002800A slo 8002 8001 +6I1954195C 0721240998800?601961176E sym rauxxxx1 hed symbol +6I1954195C 0722241765800?691018166C ldd sub15 +6I1954195C 0723241018800?151771142E alo2ixxx step exit +6I1954195C 0724241425800?211230171E stuhsymb aex +6I1954195C 0725241339800?100000000? h1 10 0000 0000 +6I1954195C 0726241230800?010000123? hsymb 01 0000 hsymb eraseable +0?0000800? 0727 hed +0?0000800? 0728 1 +0?0000800? 0729 1 sub 5 test absolute address +0?0000800? 0730 1 +0?0000800? 0731 hed5 +6I1954195C 0732241750800?241416196I subr5stdexitz store exit +6I1954195C 0733241969800?201961151D stlxxxx1 store a +6I1954195C 0734241514800?350004147E slt 0004 +6I1954195C 0735241475800?168002148C slo 8002 +6I1954195C 0736241483800?841200165F tlur0001 tlu +6I1954195C 0737241656800?151709800B aloget 8002 range +6I1954800? 0738248002800?609972117G 8002rau 9972 x table +6I1954195C 0739241177800?350006149A x slt 0006 +6I1954195C 0740241491800?300006170F srt 0006 +6I1954195C 0741241706800?101416182A aupexitz +6I1954195C 0742241821800?151961181E aloxxxx1 +6I1954195C 0743241815800?118003800A sup 8003 8001 +6I1954195C 0744241709800?600000117G get rau 0000 x +6I1954195C 0745241200800?001999000? r0001 00 1999 0000 range +6I1954195C 0746241201800?007999000C r0002 00 7999 0003 table +6I1954195C 0747241202800?008003000A r0003 00 8003 0001 +6I1954195C 0748241203800?008004000C r0004 00 8004 0003 +6I1954195C 0749241204800?008007000A r0005 00 8007 0001 +6I1954195C 0750241205800?008999000C r0006 00 8999 0003 +6I1954195C 0751241206800?009059000B r0007 00 9059 0002 +6I1954195C 0752241207800?999999000C r0008 99 9999 0003 +0?0000800? 0753 hed +0?0000800? 0754 1 +0?0000800? 0755 1 sub 6 symbol test routine +0?0000800? 0756 1 +0?0000800? 0757 hed6 +6I1954195C 0758241275800?241416132? subr6stdexitz store exit +6I1954195C 0759241320800?211601165D stus store symb +6I1954195C 0760241654800?691758186A lddswof set switch +6I1954195C 0761241861800?241610176D stdsw off +6I1954195C 0762241764800?191517123H mpysc scramble +6I1954195C 0763241238800?658002154G ral 8002 symbol +6I1954195C 0764241547800?350003180F slt 0003 giving +6I1954195C 0765241806800?191759133? mpycf lo +6I1954195C 0766241330800?300001158G srt 0001 +6I1954195C 0767241587800?350004159G slt 0004 set +6I1954195C 0768241597800?151850185F alol1p1 test +6I1954195C 0769241856800?201865116H stllop1 word +6I1954195C 0770241168800?161020152E slo1dxxx +6I1954195C 0771241525800?201903148G stllo sli save lo +6I1954195C 0772241487800?201614800A sli stlli 8001 init li +6I1954800? 0773248001800?659990139E 8001ral 9990 a is cont of +6I1954195C 0774241395800?451098154I a nze und li zero +6I1954195C 0775241098800?161601175F slos is cont of +6I1954195C 0776241756800?451610181A nzesw def li symb +6I1954195C 0777241610800?651614127? sw ralli off is li +6I1954195C 0778241270800?161573122G off slolmax maximum +6I1954195C 0779241227800?451280133A nze max +6I1954195C 0780241280800?151533148G alolmp1 sli step li +6I1954195C 0781241800800?161903170H on slolo is li equa +6I1954195C 0782241708800?451412166D nze swsym to lo +6I1954195C 0783241412800?151865148G alolop1 sli step li +6I1954195C 0784241331800?691434153G max lddswon set +6I1954195C 0785241537800?241610171D stdsw switch on +6I1954195C 0786241714800?651467148G rall1 sli zero li +0?0000800? 0787 1 +6I1954195C 0788241549800?651416187A und ralexitz undefined +6I1954195C 0789241871800?150992164G alo1ixxx step +6I1954195C 0790241647800?201416137? stlexitz exit +6I1954195C 0791241370800?651614142? ralli +6I1954195C 0792241420800?161467192A slol1 +6I1954195C 0793241921800?201575127H stllsymb asu +0?0000800? 0794 1 +6I1954195C 0795241811800?651614147? def ralli defined +6I1954195C 0796241470800?691278138A lddasu subr8 get +6I1954195C 0797241278800?101601141F asu aups exitz equivalent +0?0000800? 0798 1 +6I1954195C 0799241664800?010111121H swsymhlt 0111 symof s tab full +6I1954195C 0800241218800?691971122D symoflddsymon set sw sym +6I1954195C 0801241224800?241664197A stdswsym symon on +6I1954195C 0802241971800?651416157B symonralexitz +6I1954195C 0803241572800?151771800B alo2ixxx 8002 +0?0000800? 0804 1 +6I1954195C 0805241758800?651614127? swof ralli off constants +6I1954195C 0806241434800?651614180? swon ralli on +6I1954195C 0807241517800?100100100A sc 10 0100 1001 +6I1954195C 0808241759800?000000000D cf 00 0000 0004 +6I1954195C 0809241467800?650000139E l1 ral 0000 a +6I1954195C 0810241850800?650001139E l1p1 ral 0001 a +6I1954195C 0811241573800?650399139E lmax rale0000 a +6I1954195C 0812241533800?650400139E lmp1 rale0001 a +6I1954195C 0813241601800?010000160A s 01 0000 s erasable +6I1954195C 0814241610800?010000161? sw 01 0000 sw +6I1954195C 0815241903800?010000190C lo 01 0000 lo +6I1954195C 0816241614800?010000161D li 01 0000 li +6I1954195C 0817241575800?010000157E lsymb 01 0000 lsymb +0?0000800? 0818 hed +0?0000800? 0819 1 +0?0000800? 0820 1 sub 7 store symbol and equiv +0?0000800? 0821 1 +0?0000800? 0822 hed7 +6I1954195C 0823241279800?241416152? subr7stdexitz store exit +6I1954195C 0824241520800?691623122F lddss +6I1954195C 0825241226800?221962800A sdaxxxx2 8001 store +6I1954800? 0826248001800?219988154A 8001stu 9988 a symbol +6I1954195C 0827241541800?118001159I a sup 8001 +6I1954195C 0828241599800?201961181D stlxxxx1 save e +6I1954195C 0829241814800?300004162E srt 0004 +6I1954195C 0830241625800?141771123B div2ixxx calculate +6I1954195C 0831241232800?350004149C slt 0004 location +6I1954195C 0832241493800?151446165A aloc1 of +6I1954195C 0833241651800?691704180H lddc2 e +6I1954195C 0834241808800?221911186D sdasel and +6I1954195C 0835241864800?691617162? lddc3 store +6I1954195C 0836241620800?221673127F sdaser +6I1954195C 0837241276800?201431148D stlobee +6I1954195C 0838241484800?168001159A slo 8001 +6I1954195C 0839241591800?151961143A aloxxxx1 obee +6I1954195C 0840241431800?699986138I obee ldd 9986 b +6I1954195C 0841241389800?441673124D b nzuser +6I1954195C 0842241244800?350004191A slt 0004 sel +6I1954195C 0843241623800?219987154A ss stu 9987 a constants +6I1954195C 0844241446800?690400138I c1 ldde0001 b +6I1954195C 0845241704800?229985141F c2 sda 9985 exitz +6I1954195C 0846241617800?239984141F c3 sia 9984 exitz +6I1954195C 0847241431800?010000143A obee 01 0000 obee erasable +6I1954195C 0848241911800?010000191A sel 01 0000 sel +6I1954195C 0849241673800?010000167C ser 01 0000 ser +0?0000800? 0850 hed +0?0000800? 0851 1 +0?0000800? 0852 1 sub 8 given sym loc get equiv +0?0000800? 0853 1 +0?0000800? 0854 hed8 +6I1954195C 0855241381800?241534163G subr8stdexit store exit +6I1954195C 0856241637800?698003129D ldd 8003 +6I1954195C 0857241294800?221575132H sdalsymb store l +6I1954195C 0858241328800?658001128E ral 8001 +6I1954195C 0859241285800?141288114H div2dxxx +6I1954195C 0860241148800?350004180I slt 0004 +6I1954195C 0861241809800?151462800B aloe1 8002 +6I1954800? 0862248002800?699975137H 8002ldd 9975 tr +6I1954195C 0863241378800?441481128B tr nzu lh +6I1954195C 0864241481800?678001143I ram 8001 lr get e rh +6I1954195C 0865241282800?678001148I lh ram 8001 get e lh +6I1954195C 0866241489800?300004143I srt 0004 lr +6I1954195C 0867241439800?698003149F lr ldd 8003 +6I1954195C 0868241496800?231223132F siaequiv +6I1954195C 0869241326800?651575153D rallsymb exit +6I1954195C 0870241462800?690400137H e1 ldde0001 tr constant +6I1954195C 0871241534800?010000153D exit 01 0000 exit eraseable +6I1954195C 0872241223800?010000122C equiv 01 0000 equiv +0?0000800? 0873 hed +0?0000800? 0874 1 +0?0000800? 0875 1 sub 9 calculate reg address +0?0000800? 0876 hed9 +6I1954195C 0877241174800?241416167? subr9stdexitz store exit +6I1954195C 0878241670800?300008153I srt 0008 +6I1954195C 0879241539800?658003169G ral 8003 +6I1954195C 0880241697800?350004185H slt 0004 +6I1954195C 0881241858800?151512800B aloc 8002 is +6I1954800? 0882248002800?659991144E 8002ral 9991 nex region +6I1954195C 0883241445800?901649170A nex bdoill defined +6I1954195C 0884241701800?350001190H slt 0001 +6I1954195C 0885241908800?658002166G ral 8002 +6I1954195C 0886241667800?300001172C srt 0001 +6I1954195C 0887241723800?691416172? lddexitz +6I1954195C 0888241720800?961773167E bd6 l +6I1954195C 0889241773800?951376142H bd5d i +6I1954195C 0890241675800?151957156B l alo 1957 all +6I1954195C 0891241376800?151958156B d alo 1958 all +6I1954195C 0892241428800?151959156B i alo 1959 all +6I1954195C 0893241562800?160992174G all slo1ixxx +6I1954195C 0894241747800?461649141F bmiill exitz +6I1954195C 0895241649800?651416162B ill ralexitz undefined +6I1954195C 0896241622800?150992800B alo1ixxx 8002 or illeg +0?0000800? 0897 1 +6I1954195C 0898241512800?650960144E c ral 0960 nex constant +0?0000800? 0899 hed +0?0000800? 0900 1 sub 10 set cc 8 and punch +0?0000800? 0901 1 +6I1954195C 0902241405800?151986164A sub10alop0010 +6I1954195C 0903241641800?151344169I alo84th +6I1954195C 0904241699800?201986158I stlp0010 +6I1954195C 0905241589800?711977800C pchp0001 8003 +0?0000800? 0906 1 +6I1954195C 0907241344800?000800000? 84th 00 0800 0000 constant +0?0000800? 0908 1 +0?0000800? 0909 1 sub 11 find and reserve best +0?0000800? 0910 1 +0?0000800? 0911 hed0 +6I1954195C 0912241801800?691212196E sub11ldddrumt test +6I1954195C 0913241965800?901770182? bdo sex drum tag +6I1954195C 0914241770800?201725147H stlexit is adr l +6I1954195C 0915241478800?961531163C bd6di +6I1954195C 0916241633800?658003174A ral 8003 ssw l +6I1954195C 0917241531800?691634178G di lddf d or i +6I1954195C 0918241787800?221961196D sdaxxxx1 sub13 find optim +6I1954195C 0919241851800?350004176B gda slt 0004 dynam adr +6I1954195C 0920241762800?158002167B alo 8002 +6I1954195C 0921241672800?158002174A alo 8002 ssw +6I1954195C 0922241741800?691444179G ssw lddoff set sw off +6I1954195C 0923241797800?241584183G stdsw +6I1954195C 0924241837800?151290149E aloa1p1 get table +6I1954195C 0925241495800?201915126H stlbp1 start addr +6I1954195C 0926241268800?161020177E slo1dxxx +6I1954195C 0927241775800?201804161B stlao sai save ao +6I1954195C 0928241612800?201687800A sai stlai 8001 +6I1954800? 0929248001800?609975157I 8001rau 9975 ta is locat +6I1954195C 0930241579800?441583158D ta nzuyes sw available +6I1954195C 0931241584800?601687169A sw rauai swof +6I1954195C 0932241691800?161394174I swof sloamax is ai max +6I1954195C 0933241749800?451502175D nze max +6I1954195C 0934241502800?151906161B aloamp1 sai step ai +6I1954195C 0935241751800?161804185I swon sloao is ai equa +6I1954195C 0936241859800?451662191D nze full to ao +6I1954195C 0937241662800?151915161B alobp1 sai step ai +6I1954195C 0938241754800?691909171B max lddon set sw on +6I1954195C 0939241712800?241584173G stdsw +6I1954195C 0940241737800?651240161B rala1 sai set ai to +0?0000800? 0941 1 +6I1954195C 0942241914800?010222131H full hlt 0222 drum paked +6I1954195C 0943241318800?691216187? lddh9xxx set drum +6I1954195C 0944241870800?241212146F stddrumt tag to 9 +6I1954195C 0945241466800?651725182? ralexit sex step exit +6I1954195C 0946241820800?150992800B sex alo1ixxx 8002 +0?0000800? 0947 1 +6I1954195C 0948241583800?360000166? yes sct 0000 reserve +6I1954195C 0949241660800?350001171G slt 0001 location +6I1954195C 0950241717800?300001182C srt 0001 found +6I1954195C 0951241823800?201962151F stlxxxx2 save p +6I1954195C 0952241516800?118003187C sup 8003 +6I1954195C 0953241873800?350004168C slt 0004 +6I1954195C 0954241683800?108001179A aup 8001 +6I1954195C 0955241791800?151494800B alosrp 8002 +6I1954800? 0956248002800?300009172B 8002srt 0009 sca nulify sct +6I1954195C 0957241722800?608003162I sca rau 8003 +6I1954195C 0958241629800?151687184A aloai +6I1954195C 0959241841800?691544184G lddst +6I1954195C 0960241847800?221901800A sdaeras 8001 +6I1954800? 0961248001800?219972182E 8001stu 9972 ca +6I1954195C 0962241825800?118001173C ca sup 8001 calculate +6I1954195C 0963241733800?161240154E sloa1 location +6I1954195C 0964241545800?300004171? srt 0004 found +6I1954195C 0965241710800?141616142F div4i +6I1954195C 0966241426800?191679155B mpy500 +6I1954195C 0967241552800?158003176? alo 8003 +6I1954195C 0968241760800?118001176G sup 8001 +6I1954195C 0969241767800?101962181G aupxxxx2 +6I1954195C 0970241817800?191920134? mpy50 +6I1954195C 0971241340800?158003189G alo 8003 +6I1954195C 0972241897800?118001172E sup 8001 exit +6I1954195C 0973241634800?000000185A f 00 0000 gda constants +6I1954195C 0974241444800?651687169A off ralai swof +6I1954195C 0975241290800?600601157I a1p1 raua0002 ta +6I1954195C 0976241394800?600799157I amax raua0200 ta +6I1954195C 0977241906800?600800157I amp1 raua0201 ta +6I1954195C 0978241909800?651687175A on ralai swon +6I1954195C 0979241240800?600600157I a1 raua0001 ta +6I1954195C 0980241494800?300000172B srp srt 0000 sca +6I1954195C 0981241544800?219999182E st stu 9999 ca +6I1954195C 0982241616800?000000000D 4i 00 0000 0004 +6I1954195C 0983241679800?000000050? 500 00 0000 0500 +6I1954195C 0984241920800?000000005? 50 00 0000 0050 +6I1954195C 0985241602800?658001181? fon ral 8001 stepx +6I1954195C 0986241804800?010000180D ao 01 0000 ao erasable +6I1954195C 0987241687800?010000168G ai 01 0000 ai +6I1954195C 0988241915800?010000191E bp1 01 0000 bp1 +6I1954195C 0989241725800?010000172E exit 01 0000 exit +0?0000800? 0990 hed +0?0000800? 0991 1 +0?0000800? 0992 1 sub 12 set blank l 8 +0?0000800? 0993 1 +6I1954195C 0994240991800?151986189A sub12alop0010 +6I1954195C 0995241891800?151594179I alo87th +6I1954195C 0996241799800?201986800C stlp0010 8003 +0?0000800? 0997 1 +6I1954195C 0998241594800?000000800? 87th 00 0000 8000 constant +0?0000800? 0999 1 +0?0000800? 1000 1 sub 13 cal optimum dynamic adr +0?0000800? 1001 1 +0?0000800? 1002 hedy +6I1954195C 1003241964800?241416197? sub13stdexitz store exit +6I1954195C 1004241970800?951923187E bd5 i d or i +6I1954195C 1005241923800?651452186? raloptim d +6I1954195C 1006241860800?350001186G slt 0001 +6I1954195C 1007241867800?168002192E slo 8002 +6I1954195C 1008241925800?350001158A slt 0001 +6I1954195C 1009241581800?158001163I alo 8001 +6I1954195C 1010241639800?300003194G srt 0003 seo +6I1954195C 1011241875800?651452191? i raloptim i +6I1954195C 1012241910800?921666171F bd2shop shift test +6I1954195C 1013241716800?931772182B bd3xas xas test +6I1954195C 1014241822800?350002194G slt 0002 seo +6I1954195C 1015241947800?201961176F seo stlxxxx1 save ev od +6I1954195C 1016241766800?651872127G ralopreg is base +6I1954195C 1017241277800?141771133B div2ixxx even or od +6I1954195C 1018241332800?608003168I rau 8003 +6I1954195C 1019241689800?151961181F aloxxxx1 +6I1954195C 1020241816800?441922197B nzu rb +6I1954195C 1021241922800?350002172I slt 0002 +6I1954195C 1022241729800?658002197B ral 8002 rb +6I1954195C 1023241972800?300008194A rb srt 0008 get base +6I1954195C 1024241941800?151872132G aloopreg plus delta +6I1954195C 1025241327800?141380139? div50 mod 50 +6I1954195C 1026241390800?658003141F ral 8003 exitz +0?0000800? 1027 1 +6I1954195C 1028241666800?651983188G shop ralp0007 tlu units +6I1954195C 1029241887800?300004199G srt 0004 digit of +6I1954195C 1030241997800?350009191G slt 0009 d address +6I1954195C 1031241917800?168002197E slo 8002 +6I1954195C 1032241975800?841250181B tluu0001 +6I1954195C 1033241812800?151866800B alogu 8002 +6I1954800? 1034248002800?659969197C 8002ral 9969 top +6I1954195C 1035241973800?350002177I top slt 0002 +6I1954195C 1036241779800?691452186B lddoptim is op srd +6I1954195C 1037241862800?931916194G bd3 seo +6I1954195C 1038241916800?350004194G slt 0004 seo srd +0?0000800? 1039 1 +6I1954195C 1040241772800?651983193G xas ralp0007 tlu +6I1954195C 1041241937800?300004119H srt 0004 d address +6I1954195C 1042241198800?350006196F slt 0006 +6I1954195C 1043241966800?168002147F slo 8002 +6I1954195C 1044241476800?841300191B tlui0001 +6I1954195C 1045241912800?151967800B alogxd 8002 +6I1954800? 1046248002800?659968127D 8002ral 9968 nxt +6I1954195C 1047241274800?350004194G nxt slt 0004 seo +0?0000800? 1048 1 +6I1954195C 1049241250800?002322252D u0001 00 2322 2524 shift +6I1954195C 1050241251800?100706070F u0002 10 0706 0706 optimizing +6I1954195C 1051241252800?200706090H u0003 20 0706 0908 table +6I1954195C 1052241253800?300908111? u0004 30 0908 1110 +6I1954195C 1053241254800?401110131B u0005 40 1110 1312 +6I1954195C 1054241255800?501312151D u0006 50 1312 1514 +6I1954195C 1055241256800?601514171F u0007 60 1514 1716 +6I1954195C 1056241257800?701716191H u0008 70 1716 1918 +6I1954195C 1057241258800?801918212? u0009 80 1918 2120 +6I1954195C 1058241259800?902120232B u0010 90 2120 2322 +0?0000800? 1059 1 +6I1954195C 1060241300800?199906060? i0001 19 9906 0600 x accum +6I1954195C 1061241301800?799907070? i0002 79 9907 0700 add sub +6I1954195C 1062241302800?800008080? i0003 80 0008 0800 table +6I1954195C 1063241303800?800106060? i0004 80 0106 0600 +6I1954195C 1064241304800?800209080? i0005 80 0209 0800 +6I1954195C 1065241305800?800308090? i0006 80 0308 0900 +6I1954195C 1066241306800?905908080? i0007 90 5908 0800 +6I1954195C 1067241307800?999909090? i0008 99 9909 0900 +0?0000800? 1068 1 +6I1954195C 1069241866800?650000197C gu ral 0000 top constants +6I1954195C 1070241967800?650000127D gxd ral 0000 nxt +6I1954195C 1071241380800?000000005? 50 00 0000 0050 +0?0000800? 1072 hed +0?0000800? 1073 1 +0?0000800? 1074 1 sub 14 punch avail table +0?0000800? 1075 1 +0?0000800? 1076 hedp +6I1954195C 1077241403800?241196184I sub14stdexitx store exit +6I1954195C 1078241849800?691652136H ldd85th set punch +6I1954195C 1079241368800?241986173I stdp0010 8 +6I1954195C 1080241739800?691292159E ldda1 init a1 +6I1954195C 1081241595800?241961141H stdxxxx1 +6I1954195C 1082241418800?651324182I ralrs1 loop init rs +6I1954195C 1083241829800?101382800A loop aupc1 8001 +6I1954800? 1084248001800?209999170B 8001stl 9999 next set locat +6I1954195C 1085241702800?111468137D next suptw1 +6I1954195C 1086241374800?441377152H nzu srs +6I1954195C 1087241377800?101430133E aupc2 +6I1954195C 1088241335800?151338800C aloc3 8003 +6I1954195C 1089241528800?201962151H srs stlxxxx2 save rs +6I1954195C 1090241518800?601424187I rauc4 +6I1954195C 1091241879800?151961800B aloxxxx1 8002 +6I1954800? 1092248002800?699998800C 8002ldd 9998 8003 store +6I1954800? 1093248003800?249997175B 8003std 9997 tp av table +6I1954195C 1094241752800?111618147D tp suptw2 +6I1954195C 1095241474800?441427157H nzu pun +6I1954195C 1096241427800?101480138E aupc5 +6I1954195C 1097241385800?151388800B aloc6 8002 +6I1954195C 1098241578800?711977147G pun pchp0001 +6I1954195C 1099241477800?161530143E sloaim is ai max +6I1954195C 1100241435800?451438119F nze exitx +6I1954195C 1101241438800?151342124H aloamp1 step ai +6I1954195C 1102241248800?201961166H stlxxxx1 +6I1954195C 1103241668800?651962171H ralxxxx2 +6I1954195C 1104241718800?161524182I sloc7 loop +0?0000800? 1105 1 +6I1954195C 1106241382800?201977170B c1 stlp0001 next constants +6I1954195C 1107241430800?201985170B c2 stlp0009 next +6I1954195C 1108241338800?000500050? c3 00 0500 0500 +6I1954195C 1109241424800?241978175B c4 stdp0002 tp +6I1954195C 1110241480800?241986175B c5 stdp0010 tp +6I1954195C 1111241388800?000001000? c6 00 0001 0000 +6I1954195C 1112241524800?001499149I c7 00 1499 1499 +6I1954195C 1113241468800?201983170B tw1 stlp0007 next +6I1954195C 1114241618800?241984175B tw2 stdp0008 tp +6I1954195C 1115241652800?000080000? 85th 00 0080 0000 +6I1954195C 1116241292800?690600800C a1 ldda0001 8003 +6I1954195C 1117241324800?000000045? rs1 00 0000 0450 +6I1954195C 1118241530800?690799800C aim ldda0200 8003 +6I1954195C 1119241342800?690800800C amp1 ldda0201 8003 +0?0000800? 1120 hed +0?0000800? 1121 1 +0?0000800? 1122 1 sub 15 heading routine +0?0000800? 1123 1 +0?0000800? 1124 hedh +6I1954195C 1125241663800?241813176H sub15stdexity save exit +6I1954195C 1126241768800?698003157D ldd 8003 is c1 +6I1954195C 1127241574800?350008154C slt 0008 blank +6I1954195C 1128241543800?441298134H nzudh +6I1954195C 1129241348800?608001181H rau 8001 head +6I1954195C 1130241818800?101329181C aup0000h exity +6I1954195C 1131241298800?608001181C dh rau 8001 exity dont head +0?0000800? 1132 hed +0?0000800? 1133 1 +0?0000800? 1134 1 sub 16 initialization +0?0000800? 1135 1 +6I1954195C 1136241353800?241813186H sub16stdexity store exit +6I1954195C 1137241868800?651624192I rali1 +6I1954195C 1138241929800?211985148H stup0009 zero card +6I1954195C 1139241488800?241329143B std0000h zero head +6I1954195C 1140241432800?691485160? ldd subr1 zero sym t +6I1954195C 1141241485800?651538159C rali2 make drum +6I1954195C 1142241593800?101546180B aupi3 available +6I1954195C 1143241802800?691918160? ldd subr1 +6I1954195C 1144241918800?691406196H lddh8xxx set drum +6I1954195C 1145241968800?241212167D stddrumt tag to 8 +6I1954195C 1146241674800?691527158? lddi4 set swsym +6I1954195C 1147241580800?241664172D stdswsym off +6I1954195C 1148241724800?651577163A rali5 undefine +6I1954195C 1149241631800?101406177D auph8xxx regions +6I1954195C 1150241774800?691813160? lddexity subr1 +0?0000800? 1151 1 +6I1954195C 1152241624800?000000059I i1 00s0001 e0200 constants +6I1954195C 1153241538800?000600079I i2 00a0001 a0200 +6I1954195C 1154241546800?111111111A i3 11 1111 1111 +6I1954195C 1155241527800?010111121H i4 01 0111 symof +6I1954195C 1156241577800?001021104I i5 00 1021 1049 +6I1954195C 1157241852800?961824187D pacofbd6findi findl +0?0000800? 1158 1 +0?0000800? 1159 1 sub 17 calc 800x equivalent +0?0000800? 1160 1 +0?0000800? 1161 hedx +6I1954195C 1162241902800?691924162G sb17dldddeq di d equiv +6I1954195C 1163241854800?691974162G sb17ilddieq di i equiv +6I1954195C 1164241627800?241961152F di stdxxxx1 save tag +6I1954195C 1165241526800?211813157F stuexity store exit +6I1954195C 1166241576800?201962162F stlxxxx2 store 800x +6I1954195C 1167241626800?691961196D lddxxxx1 sub13 get optim +6I1954195C 1168241904800?201961167F sda stlxxxx1 dynam addr +6I1954195C 1169241676800?141771148B div2ixxx is dy addr +6I1954195C 1170241482800?441535138F nzuod ev even or od +6I1954195C 1171241535800?651588164C od ral8002 eo +6I1954195C 1172241386800?651789164C ev ral8003 eo +6I1954195C 1173241643800?161962172F eo sloxxxx2 +6I1954195C 1174241726800?451630168A nze add1 +6I1954195C 1175241630800?651961181C ralxxxx1 exity +6I1954195C 1176241681800?651961177F add1 ralxxxx1 +6I1954195C 1177241776800?150992181C alo1ixxx exity +0?0000800? 1178 1 +6I1954195C 1179241924800?000008190D deq 00 0008 sda constants +6I1954195C 1180241974800?000009190D ieq 00 0009 sda +6I1954195C 1181241588800?000000800B 8002 00 0000 8002 +6I1954195C 1182241789800?000000800C 8003 00 0000 8003 +0?0000800? 1183 hed +0?0000800? 1184 1 +0?0000800? 1185 1 sub 18 index address +0?0000800? 1186 1 +0?0000800? 1187 hedw +6I1954195C 1188241826800?241813187F indexstdexity store exit +6I1954195C 1189241876800?201961192F stlxxxx1 store addr +6I1954195C 1190241926800?601954197F rau 1954 +6I1954195C 1191241976800?350007169C slt 0007 +6I1954195C 1192241693800?691813167G lddexity +6I1954195C 1193241677800?951680153B bd5d d or i +6I1954195C 1194241532800?350002168? slt 0002 d +6I1954195C 1195241680800?300009172G d srt 0009 +6I1954195C 1196241727800?191014168D mpy2000i +6I1954195C 1197241684800?691813177G lddexity +6I1954195C 1198241777800?961730158B bd6ds drum 0 cor +6I1954195C 1199241582800?300001173? srt 0001 ds core +6I1954195C 1200241730800?151961181C ds aloxxxx1 exity +0?0000800? 1201 1 +6I1954195C 1202241813800?010000181C exity 01 0000 exity erasabele +0?0000800? 1203 hed +0?0000800? 1204 1 +0?0000800? 1205 1 sub 19 process location +0?0000800? 1206 1 +0?0000800? 1207 regd0923 0923 proc l +0?0000800? 1208 regg0925 0925 +0?0000800? 1209 regj0928 0928 +0?0000800? 1210 regk0931 0931 +0?0000800? 1211 regl0933 0933 +0?0000800? 1212 1 +0?0000800? 1213 heda +6I1954195C 1214240969800?241196189I proclstdexitx store exit +6I1954195C 1215241899800?601951182G rau 1951 is l blank +6I1954195C 1216241827800?441731163B nzunb +6I1954195C 1217241632800?691212187G ldddrumt blank test +6I1954195C 1218241877800?901781092D bdob d0002 drum tag +6I1954195C 1219241781800?651872192G b ralopreg setl blank +6I1954195C 1220241927800?350004198G setl slt 0004 set l +6I1954195C 1221241987800?691984163H lddp0008 to dr +6I1954195C 1222241638800?221984119F sdap0008 exitx +6I1954195C 1223241731800?691734121C nb lddg subr4 what is l +6I1954195C 1224240925800?651957093A g0001ral 1957 k0001 absolute +6I1954195C 1225240926800?691780117D g0002lddk subr9 regional +6I1954195C 1226240927800?691830127E g0003lddj subr6 symbolic +6I1954195C 1227240931800?691784175? k0001lddl subr5 test range +6I1954195C 1228240932800?601585183I k0002rau87th x reg error +6I1954195C 1229241839800?101986139B x aupp0010 set blank +6I1954195C 1230241392800?211986192G stup0010 setl l8 +6I1954195C 1231240933800?201872192G l0001stlopreg setl drum addr +6I1954195C 1232240934800?101688174C l0002aup86th 800x 800x +6I1954195C 1233240935800?691738144B l0003lddorceq 89x core addr +6I1954195C 1234240936800?601585183I l0004rau87th x other +6I1954195C 1235241743800?691596144B 800x lddorxeq 89x +6I1954195C 1236241442800?241872183I 89x stdopreg x +6I1954195C 1237240928800?651223093A j0001ralequiv k0001 sym defind +6I1954195C 1238240929800?651682180A j0002rald sub11 sym undef +6I1954195C 1239240930800?601585183I j0003rau87th x s tab full +6I1954195C 1240240923800?201872162H d0001stlopreg ss s eq found +6I1954195C 1241240924800?601585183I d0002rau87th x drum paked +6I1954195C 1242241628800?101230163E ss auphsymb store +6I1954195C 1243241635800?151575188? alolsymb symbol +6I1954195C 1244241880800?691781127I lddb subr7 +0?0000800? 1245 1 +6I1954195C 1246241734800?000000092E g 00 0000 g0001 constants +6I1954195C 1247241780800?000090093A k 00 0090 k0001 +6I1954195C 1248241830800?000000092H j 00 0000 j0001 +6I1954195C 1249241784800?000000093C l 00 0000 l0001 +6I1954195C 1250241682800?000090092C d 00 0090 d0001 +6I1954195C 1251241688800?000008000? 86th 00 0008 0000 +6I1954195C 1252241585800?000000800? 87th 00 0000 8000 +6I1954195C 1253241196800?010000119F exitx 01 0000 exitx eraseable +0?0000800? 1254 hed +0?0000800? 1255 1 +0?0000800? 1256 1 sub 20 process data address +0?0000800? 1257 1 +0?0000800? 1258 regd0937 0937 proc d +0?0000800? 1259 regf0939 0939 +0?0000800? 1260 regg0941 0941 +0?0000800? 1261 regj0944 0944 +0?0000800? 1262 regk0946 0946 +0?0000800? 1263 regl0949 0949 +0?0000800? 1264 1 +0?0000800? 1265 hedb +6I1954195C 1266240972800?241196194I procdstdexitx store exit +6I1954195C 1267241949800?601952167H rau 1952 is d blank +6I1954195C 1268241678800?441831173B nzunb +6I1954195C 1269241732800?651685180A rald sub11 find +6I1954195C 1270240937800?201492095B d0001stlorbal l0004 optimum +6I1954195C 1271240938800?601542139H d0002rau88th x drum paked +6I1954195C 1272241728800?691452177H bt lddoptim is op +6I1954195C 1273241778800?911196178C bd1exitx a branch +6I1954195C 1274241783800?201872119F stlopreg exitx d to or +6I1954195C 1275241398800?101986159B x aupp0010 set blank +6I1954195C 1276241592800?211986119F stup0010 exitx +6I1954195C 1277241831800?691834121C nb lddg subr4 what is d +6I1954195C 1278240941800?651958094D g0001ral 1958 j0001 absolute +6I1954195C 1279240942800?691645117D g0002lddj subr9 regional +6I1954195C 1280240943800?691646127E g0003lddk subr6 symbolic +6I1954195C 1281240944800?691448175? j0001lddl subr5 test range +6I1954195C 1282240945800?601542139H j0002rau88th x reg error +6I1954195C 1283240949800?691828182F l0001lddaxd index drum addr +6I1954195C 1284240950800?350004187H l0002slt 0004 800x 800x +6I1954195C 1285240951800?691928182F l0003lddaxc index core addr +6I1954195C 1286240952800?350004193? l0004slt 0004 sd other +6I1954195C 1287241878800?691983143F 800x lddp0007 set 800x d +6I1954195C 1288241436800?221983148F sdap0007 +6I1954195C 1289241486800?300004149H srt 0004 +6I1954195C 1290241498800?101881190B aupxeq sb17d get 800x e +6I1954195C 1291241931800?350004164B scd slt 0004 set core d +6I1954195C 1292241642800?691983153F lddp0007 +6I1954195C 1293241536800?221983158F sdap0007 +6I1954195C 1294241586800?300004154H srt 0004 +6I1954195C 1295241548800?691782196D lddceq sub13 get core e +6I1954195C 1296241832800?201738172H sceq stlorceq bt save core +6I1954195C 1297240946800?651223094D k0001ralequiv j0001 sym defind +6I1954195C 1298240947800?651882180A k0002ralf sub11 sym undef +6I1954195C 1299240948800?601542139H k0003rau88th x s tab full +6I1954195C 1300240939800?201793169F f0001stleq ss save eq +6I1954195C 1301240940800?601542139H f0002rau88th x drum paked +6I1954195C 1302241696800?101230173E ss auphsymb store +6I1954195C 1303241735800?151575193B alolsymb symbol +6I1954195C 1304241932800?691785127I ldd subr7 +6I1954195C 1305241785800?651793095B raleq l0004 +6I1954195C 1306241930800?691983163F sd lddp0007 set d addr +6I1954195C 1307241636800?221983168F sdap0007 +6I1954195C 1308241686800?300004172H srt 0004 bt +6I1954195C 1309241685800?000088093G d 00 0088 d0001 constants +6I1954195C 1310241834800?000000094A g 00 0000 g0001 +6I1954195C 1311241645800?000088094D j 00 0088 j0001 +6I1954195C 1312241448800?000000094I l 00 0000 l0001 +6I1954195C 1313241882800?000088093I f 00 0088 f0001 +6I1954195C 1314241646800?000000094F k 00 0000 k0001 +6I1954195C 1315241828800?000088093G axd 00 0088 d0001 +6I1954195C 1316241928800?000098193A axc 00 0098 scd +6I1954195C 1317241881800?201596172H xeq stlorxeq bt +6I1954195C 1318241782800?000008183B ceq 00 0008 sceq +6I1954195C 1319241542800?000000080? 88th 00 0000 0800 +6I1954195C 1320241793800?010000179C eq 01 0000 eq erasable +0?0000800? 1321 hed +0?0000800? 1322 1 +0?0000800? 1323 1 sub 21 process instr address +0?0000800? 1324 1 +0?0000800? 1325 regd0953 0953 proc i +0?0000800? 1326 regf0955 0955 +0?0000800? 1327 regg0958 0958 +0?0000800? 1328 regj0960 0960 +0?0000800? 1329 regk0962 0962 +0?0000800? 1330 regl0965 0965 +0?0000800? 1331 1 +0?0000800? 1332 hedc +6I1954195C 1333241453800?241196183C procistdexitx store exit +6I1954195C 1334241833800?601953188C rau 1953 is i blank +6I1954195C 1335241883800?441788183H nzunb +6I1954195C 1336241838800?601952193C rau 1952 is d blank +6I1954195C 1337241933800?441888193H nzudnb +6I1954195C 1338241938800?691212188D ldddrumt d i blank +6I1954195C 1339241884800?901988095I bdo g0002 test drum +6I1954195C 1340241988800?651492096H ralorbal l0004 tag +6I1954195C 1341241888800?651692180A dnb rald sub11 find best +6I1954195C 1342240953800?201492096H d0001stlorbal l0004 found +6I1954195C 1343240954800?651986174B d0002ralp0010 x drum paked +6I1954195C 1344241742800?151695193D x alo89th +6I1954195C 1345241934800?201986119F stlp0010 exitx +6I1954195C 1346241788800?691792121C nb lddf subr4 what is i +6I1954195C 1347240955800?651959096? f0001ral 1959 j0001 absolute +6I1954195C 1348240956800?691835117D f0002lddj subr9 regional +6I1954195C 1349240957800?691885127E f0003lddk subr6 symbolic +6I1954195C 1350240960800?691935175? j0001lddl subr5 test range +6I1954195C 1351240961800?651986174B j0002ralp0010 x reg error +6I1954195C 1352240965800?691736182F l0001lddaxd index drum addr +6I1954195C 1353240966800?691983178F l0002lddp0007 800x 800x +6I1954195C 1354240967800?691836182F l0003lddaxc index core addr +6I1954195C 1355240968800?691983188F l0004lddp0007 other +6I1954195C 1356241886800?231983193F siap0007 mor +6I1954195C 1357241786800?231983188I 800x siap0007 +6I1954195C 1358241889800?101842185D aupxeq sb17i get 800x e +6I1954195C 1359241939800?691983198I 90xx lddp0007 set core +6I1954195C 1360241989800?231983144? siap0007 address +6I1954195C 1361241440800?691843196D lddceq sub13 get core e +6I1954195C 1362240962800?651223096? k0001ralequiv j0001 sym defind +6I1954195C 1363240963800?651490180A k0002ralg sub11 sym undef +6I1954195C 1364240964800?651986174B k0003ralp0010 x s tab full +6I1954195C 1365240958800?691983154? g0001lddp0007 si found best +6I1954195C 1366240959800?651986174B g0002ralp0010 x drum paked +6I1954195C 1367241540800?231983159? si siap0007 +6I1954195C 1368241590800?101230164? auphsymb store +6I1954195C 1369241640800?151575169? alolsymb symbol +6I1954195C 1370241690800?691936127I lddmor subr7 +6I1954195C 1371241936800?691492174E mor lddorbal set or +6I1954195C 1372241745800?241872119F stdopreg exitx to orb +6I1954195C 1373241740800?201738193F sceq stlorceq mor save core +0?0000800? 1374 1 +6I1954195C 1375241692800?000089095C d 00 0089 d0001 constants +6I1954195C 1376241792800?000000095E f 00 0000 f0001 +6I1954195C 1377241835800?000089096? j 00 0089 j0001 +6I1954195C 1378241885800?000000096B k 00 0000 k0001 +6I1954195C 1379241935800?000000096E l 00 0000 l0001 +6I1954195C 1380241490800?000089095H g 00 0089 g0001 +6I1954195C 1381241695800?000000008? 89th 00 0000 0080 +6I1954195C 1382241736800?000089096H axd 00 0089 l0004 +6I1954195C 1383241836800?000099193I axc 00 0099 90xx +6I1954195C 1384241842800?201596193F xeq stlorxeq mor +6I1954195C 1385241843800?000009174? ceq 00 0009 sceq +0?0000800? 1386 hed +0?0000800? 1387 1 +6I1954195C 1388240992800?000000000A 1ixxx 00 0000 0001 constants +6I1954195C 1389241020800?000001000? 1dxxx 00 0001 0000 +6I1954195C 1390241771800?000000000B 2ixxx 00 0000 0002 +6I1954195C 1391241288800?000002000? 2dxxx 00 0002 0000 +6I1954195C 1392241406800?800000000? h8xxx 80 0000 0000 +6I1954195C 1393241216800?900000000? h9xxx 90 0000 0000 +6I1954195C 1394241178800?000000009? 90xxx 00 0000 0090 +6I1954195C 1395241189800?000000002I 29xxx 00 0000 0029 +6I1954195C 1396241014800?000000200? 2000i 00 0000 2000 constant +6I1954195C 1397240990800?000000199? torg 00 0000 t0001 +0?0000800? 1398 1 +0?0000800? 1399 pat +0A0000100? 1400 diff --git a/I650/sw/soapII_condensed_card.dck b/I650/sw/soapII_condensed_card.dck new file mode 100644 index 00000000..f0ce4cd7 --- /dev/null +++ b/I650/sw/soapII_condensed_card.dck @@ -0,0 +1,173 @@ +6I195219536919521951241995195469195519566919541953241996195769195880006919561955 +2D19971952691953195469195819572419981955691957195624199919997019950000 +2D000019967000489999240048199765000100302400301998690034003924003919992200440047 +2D004719963500040025240025199715800100312400311998220036003224003219996500350040 +2D004019961000448002240020199710002300272400271998158001003324003319991100360041 +2D004119964400450000240045199710800180022400341998240000002024003519996900028003 +2D002300000000010000 +0?080000070004040998000404099833232209990005050998000505099800050509980005050998 +0?080700070005050998331212099933020209993305040999330504099999999999999999999999 +0?081400073311100999330504099933050409993305040999330504099933212009995403030999 +0?082100074503030999340303099934030309993303030999440505099800050509980005050998 +0?082800073312120999330202099900000009880000000888332726099933272609993300000999 +0?083500070000000988000000098833272609993327260999330000099933040409983304040998 +0?084200073304040998330404099834040509984305040998330404099833050509983304040998 +0?084900073304040998000000089800000008980000000898000000089844050509980005050998 +0?085600070005050998000505099800000008980000000898330504099933050409999999999999 +0?086300079999999999331110099933050409993305040999330504099933050409993303030999 +0?087000070000000999000000099900000009990000000999000000099900000009990000000999 +0?087700070000000999000000099900050509990000000898000000089800000008980000000898 +0?088400073305060999000606099800060609980006060998000000089800000008984405050998 +0?089100073305050998330505099833050509983305050998330505099833050509983305050998 +0?089800073305050998440505099865165313080100000901651958126330000812210000000943 +0?090500076519591313300008117500000009576519511455000000101315151912731515191273 +0?091200076519861191691016096900000080032015191322651986119165195909156913711174 +0?091900076913721275651223091565198611916519861191201872162860158518396519570931 +0?092600076917801174691830127565122309316516821801601585183969178417506015851839 +0?093300072018721927101688174369173814426015851839201492095260154213982017931696 +0?094000076015421398651958094469164511746916461275691448175060154213986512230944 +0?094700076518821801601542139869182818263500041878691928182635000419302014920968 +0?095400076519861742651959096069183511746918851275691983154065198617426919351750 +0?096100076519861742651223096065149018016519861742691736182669198317866918361826 +0?096800076919831886241196189960151913232119840987241196194965195713110000001500 +0?097500070100000975691262136546118011830000001504211961121469195213556919531356 +0?098200076919541357691955120869195612096519850989151189124310099009956019601015 +0?098900071509920997000000199015198618910000000001000000091324060012472019868003 +0?099600072411961349201985098860196117656019521407691950135369140413536519591363 +0?100300076914061309651952150769140613596912161359691460096960151114056519521757 +0?101000076519521807691406140960097512296519861441000000200030000209716910190972 +0?101700042419791350151771142569135014530000010000 +0?105000076173661007617376001561747300176184770010618761005061876200526187630058 +0?105700076264760090626491009162649200926264930093626494009462649500956264960096 +0?106400076264970097626498009862649900996269750026627361100362737910026274610041 +0?107100076274620043627463004962746900466276771001627685004762828300576469850014 +0?107800076485790064657884100566616400326661740037666485003466747700396682620033 +0?108500076682740038686564100968738300017364640069736469000973696200087477880019 +0?109200077565660054757677000075838200257589610040758962004275896300481616011756 +0?109900076019531457758965004575898400447761831008776368007179616100807961620082 +0?110600077961630088796173006579617400677961840060796279101279636400707963910072 +0?111300077963920075796393007879648200867964910070796492007379649300767965671004 +0?112000077965731010796578101179778800797982610081798262008379826300897982730066 +0?112700077982740068798284006179836100057983630003798375000479866400558263830036 +0?113400078264610022826482008582658300278269610023826962002882737600168273830035 +0?114100078274730018827964003182798300308283640024828369002982837300208283840021 +0?114800073500041809101352800382847700118287610051828762005382876300598288751006 +0?115500078373840084846661000286648200878679910071867992007486799300778683610007 +0?116200078683740056868375000699999900016019571261601957136115102080031610201525 +0?116900074611720973221217122069198411871080010979651957141124141616701009788003 +0?117600070100001176350006149100000000904611821183158001131122196215151010140979 +0?118300076012370991601401175565800212936519531707221984123730000914010000000029 +0?119000076913501553151500150516134514492411960999000000000800000009080100001196 +0?119700073500041557350006196621196113640019990000007999000300800300010080040003 +0?120400070080070001008999000300905900029999990003241981098424198209850000000902 +0?121100074411651166011212800!24141619196914501503651959146390000000002099981402 +0?121800076919711224461222117335000411811009748003100975117901000012232416641971 +0?122500071611781233221962800145128013316519531857151959136301000012300100001231 +0?123200073500041493460986100260140118051611881343300004139769119011936580021547 +0?123900071516061711600600157915099411495505050999461002119735000419113500011451 +0?124600070100001246111550165520196116683000101401002322252410070607062007060908 +0?125300073009081110401110131250131215146015141716701716191880191821209021202322 +0?126000070000000905111014116901000012621610141319010000126410195816131017191423 +0?126700074414711196161020177516127209771615731227691400150300000090606909761279 +0?127400073500041947241416132020143114841417711332101601141624141615201515331487 +0?128100071012841239678001148915800212410100001284141288114810133913931180011245 +0?128800070000020000691242139960060115792212311334690600800310124613512215751328 +0?129500073500031803151249170369150615596080011813201653155619990606007999070700 +0?130200078000080800800106060080020908008003080900905908080099990909004513621813 +0?130900072412121215211021100235000411716919608002161014141982766177926019531607 +0?131600076917691472651231123569121618704615641563211601165469140016036019521657 +0?13230007691400150300000004502013291400651575153414138013906580011285011329800! +0?133000073000011587691434153760800316894414371416101337142315133880031511891443 +0?133700072006000900000500050010000000001580031897300002134769080080034512961297 +0?134400070008000000909000000035000117532019611414608001181865195416597119771950 +0?135100073000011907691952800224181318682419770980241978098124197909822419800983 +0?135800072007960900241262131500000009171110141219161565166916195814136912171170 +0?136500079014000970691565147235000214732419861739151958094465161414200000890915 +0?137200070000000920151264161944137715281580021283151958156210143013354414811282 +0?137900071010208003000000005024153416372019771702471286128635000113911513888002 +0?138600076517891643441341119200000100004416731244658003141644129513462119861927 +0?139300074713960998600799157945109815493500021853151650800210198615922414521196 +0?140000076019501405010000140111196212672411961849601950140515198616418000000000 +0?140700076912101213000196000024126214156917131275151264126915186514871080011271 +0?1414000716800116716519591763011416800!1611781433651324182946156815671614671921 +0?142100071519618003150975161921140116042419781752211230171519167915521014801385 +0?142800071519591562350001118520198517020100001431691485160046133609986516141800 +0?143500074514381196221983148621196216651513421248698003149669184319641511941499 +0?144200072418721839460998144765168716919016491701690400138965099214970000000949 +0?14490007350002190565196113112116061609011452800!241196183320123111843500021211 +0?145600076014011705691260121330000014011013121167691952155569131410176904001378 +0?146300071619581513300008133335000413756517251820650000139520198317021519590960 +0?147000076912781381108001137924124612991080031281441427157816800214838413001912 +0?147700071615301435961531163321128412872419861752678001143944153513868412001656 +0?148400071680011591651538159330000414982016148001241329143230000414390000890958 +0?149100073000061706011492800!15144616513000001722201915126823122313261019611715 +0?149800071018811902201986128900880000001619611615151906161224181313166914581661 +0?150500072019861350350000152130000812250001950000220901145465195815616919501403 +0?151200076509601445108001132135000414756012171421118003187310010010016014241879 +0?151900070100001519691623122621117614293500061387101178138300149914992019031487 +0?152600072118131576010111121820196215184410131384690799800369163417873500021680 +0?153300076504001395010000153465158816432219831586241610171400060007996580031697 +0?154000072319831590118001159900000008004412981348219999182530000417101111111111 +0?154700073500031806691782196465141618716919588002150992800215800317602411961099 +0?155400076911881291241983118616800119131513101265450000000124090115046519591611 +0?156100072009751228160992174765126413696509751369000000000165195809446512641469 +0?156800076509751469461422137365195909603000031479151771800265039913953500081543 +0?157500070100001575201962162600102110497119771477441583158424166417241580011639 +0?158200073000011730360000166060168716910000008000300004154835000415970000008002 +0?158900077119778003101230164015196114312119861196101546180200000080002419611418 +0?15960007011596800!1518501856011598800!2019611814241196119901000016016580011810 +0?16030007241813136610155880033000041465011606800!691360121365000015011180011367 +0?161000070100001610201264140020168780011012168002010000161435000615290000000004 +0?161700072399841416241984175215101409152216731276151506176115099280022199871541 +0?162400070000000599141771123269196119642419611526101230163515168718416519611813 +0?163100071014061774691212187765800317410000001851151575188022198316866980031294 +0?16380007221984119630000319471515751690151344169969198315361619621726011644800! +0?16450007000088094400000009462014161370011648800!651416162269080013996917041808 +0?165200070000800000010000165369175818614414591950151709800269141016636519621417 +0?165900073000041819350001171724123112341519151612241813176801011112186080021523 +0?166600076519831887300001172365196217182016531456300008153984105018551580021741 +0?167300070100001673691527158015195715621417711482951680153244183117320000000500 +0?168000073000091727651961177600009009231080011791691813177700008809373000041728 +0?168700070100001687000008000015196118166919361279161394174900008909536918131677 +0?16940007011694800!000000008010123017353500041858011698800!20198615891000000000 +0?170100073500011908111468137469150615092299851416111358186310141618214513501461 +0?170800074514121664600000117714161614263500041621241584173700000009106514671487 +0?171500071514161721931772182230000118231615241829200800090096177316751680028001 +0?172200076080031629691416172065157716310100001725451630168119101416846914521778 +0?172900076580021972151961181369173412136516851801161240154500000009251515751932 +0?1736000700008909686512401612011738800!6912921595201738193669144417971516951934 +0?174300076915961442011744800!2418721196011746800!4616491416011748800!4515021754 +0?175000072414161969161804185911161814742019831236691909171211140814234516101811 +0?175700073000081325651614127000000000041180011767200901155415800216721610141569 +0?176400071915171238691018166365187212771019621817698003157400000000002017251478 +0?177100070000000002651983193795137614286918131600201804161215099218139617301582 +0?177800079111961783691452186200009009316518721927000008183220187211960000000933 +0?1785000765179309522319831889221961196469179212130000008003011790800!1514948002 +0?1792000700000009550100001793011794800!011795800!011796800!2415841837011798800! +0?179900072019868003161903170869121219656919181600151196155101000018041115081423 +0?180600071917591330451510156122191118641514628002011810800!65161414701518668002 +0?181300070100001813300004162511800380014419221972191920134010132918134515221013 +0?182000071509928002151961181535000219472019621516011824800!11800117332418131876 +0?182700074417311632000088093710138280010000000928691834121320173817286019531883 +0?18340007000000094100008909600000991939151290149560195219331019861392011840800! +0?18410007691544184720159619360000091740011844800!011845800!011846800!2219018001 +0?18480007011848800!691652136865000113953500041762961824187444128616586919741627 +0?185500071516088002201865116845156016111515128002451662191435000118672416101764 +0?18620007931916194746126613176916171620011865800!650000197316800219256516241929 +0?18690007158001175324121214661509921647011872800!3500041683011874800!6514521910 +0?187600072019611926901781092469198314361519618002691781127920159617280000880939 +0?188300074417881838901988095900000009622319831936300004199765169218011018421854 +0?18900007011890800!1515941799011892800!011893800!011894800!011895800!011896800! +0?189700071180011725011898800!60195118276919501403011901800!69192416270100001903 +0?190400072019611676168002196360080015791011761231658002166765168717519216661716 +0?191100070100001911151967800210800315710102221318010000191535000419471680021975 +0?191800076914061968211961146400000000502015751278350002172965145218600000081904 +0?192500073500011581601954197635000419870000981931211985148869198316363500041642 +0?193200076917851279441888193820198611960000000965691492174530000411986912121884 +0?193900076919831989011940800!1518721327011942800!011943800!011944800!011945800! +0?19460005011946800!2019611766011948800!60195216787019991998 +0?196300073000011869241416197090177018201680021476650000127424121216742019611514 +0?197000079519231875651416157230000819413500021779000009190484125018123500071693 +0?19870007691984163865149209682319831440690993099660195014056911950996011993800! +0?19940006011994800!011995800!011996800!350009191769195113546519511605 +0?000000010000001000 diff --git a/I650/sw/soap_and_run.ini b/I650/sw/soap_and_run.ini new file mode 100644 index 00000000..ea845757 --- /dev/null +++ b/I650/sw/soap_and_run.ini @@ -0,0 +1,78 @@ + +; set console -n log=log.txt +; set debug -n debug.txt +; set debug stdout +; set cpu debug=cmd;data;detail + + +; params: %1 source card deck to assemble with soap +; %2 start address to run program (If empty, program not run) +; %3 input card deck (if empty, do not attach input card + +set cpu 2k + +; Load SOAP deck into core (1 word per card format), but does not execute it + +att cdr1 -q soapII.dck + +echo *** +echo *** load soap deck into drum +echo *** + +d csw 7019519999 +d ar 8000 +go + +; now put source cards in reader and start SOAP assembler + +att cdr1 %1 +set cdr1 wiring=soap + +att cdp1 -n -q deck_out.dck +set cdp1 echo, print, wiring=soap +att cdp0 -n -q print.txt + +echo *** +echo *** run soap +echo *** + +d ar 1000 +go + +if "%2" == "" goto end + +; load assembled deck into core + +det cdp1 +set cdr1 wiring=8WORD +att cdr1 deck_out.dck + +att cdp1 -n -q deck_out_run.dck +set cdp1 echo, print, wiring=8WORD + + +echo *** +echo *** load assembled program +echo *** + +d csw 7019519999 +d ar 8000 +go + +; attach input deck +if "%3" == "" goto run + +att cdr1 %3 + +; now execute the loaded deck +:run + +echo *** +echo *** run assembled program +echo *** + +d ar %2 +go + +:end + diff --git a/I650/sw/soap_example_1_src.txt b/I650/sw/soap_example_1_src.txt new file mode 100644 index 00000000..43861e99 --- /dev/null +++ b/I650/sw/soap_example_1_src.txt @@ -0,0 +1,39 @@ + 1 + 1 example 1 calculate f of x + 1 + 1 f(x) = a*x*x+b*x+c + 1 + 1 card output + 1 word1 word2 + 1 x f(x) + 1 + blr 1951 1960 read area + regp0027 0028 punch area + 1 + synstart 1000 prgm start + 1 + startnop 0000 setx + setx rauone stx set x + stx stup0001 to 1 + mpya calculate + alob f + rau 8002 + mpyp0001 + aloc + stlp0002 + pchp0001 punch + raup0001 is x max + supxmax + nzu 9999 + aupi01 stx step x + 1 + one 00 0000 0001 constants + xmax 00 0000 0100 + i01 00 0000 0101 + 1 + a 00 0000 0002 params + b 00 0000 0003 for f(x) + c 00 0000 0004 + 1 + -neg 00 0000 0006 + -negz 00 0000 0000 diff --git a/I650/sw/soap_listing.txt b/I650/sw/soap_listing.txt new file mode 100644 index 00000000..2ec76174 --- /dev/null +++ b/I650/sw/soap_listing.txt @@ -0,0 +1,1449 @@ +1 SOAP 2 +1 +1 SYMBOLIC OPTIMAL ASSEMBLY PROG +1 +1 FOR THE +1 +1 IBM 650 +1 +1 DATA PROCESSING SYSTEM +1 + REG S0000 0399 SYMBOL TAB + REG E0400 0599 EQUIV TABL + REG A0600 0799 AVAIL TABL + REG N0800 0899 NUM OP TAB + BLR 1000 1000 ENTRY + BLR 1001 1012 PSEUDO ENT + BLR 1021 1049 REG TABLE + REG C1050 1164 SYM OP TAB + BLA 1098 1099 + BLA 1148 1149 + BLR 1900 1900 MANUAL PAT + SYN READC 1950 + BLR 1951 1962 READ AREA + REG T1990 1992 TYPE + REG P1977 1986 PUNCH AREA + BLR 1998 1999 + EQU XXXX1 1961 + EQU XXXX2 1962 + BLR 1563 1570 TYPE2 + BLA 1565 1565 + BLA 1569 1569 + REG B0900 0901 SUB 2 + REG H0902 0904 TYPE 2 + REG M0905 0907 + REG Q0908 0909 + REG R1200 1207 SUB 5 + REG U1250 1259 SUB 13 + REG V0910 0912 EQU SYN + REG X0913 0914 TYPE 0 + REG Y0915 0916 EQU SYN + REG Z0917 0919 + REG W0920 0922 + BLR 0923 0968 MULTIPLE R + REG I1300 1307 SUB 13 +1 +1 CONTROL PROGRAM +1 + 1000 LDD READC SUB16 ENTRY 1000 69 1950 1353 +1 + READC RCD 1999 1998 READ CARD 1950 70 1999 1998 + 1998 LDD 1951 TRANSFER 1998 69 1951 1354 + STD P0001 ALPHABETIC 1354 24 1977 0980 + LDD 1952 INPUT 0980 69 1952 1355 + STD P0002 TO 1355 24 1978 0981 + LDD 1953 OUTPUT 0981 69 1953 1356 + STD P0003 1356 24 1979 0982 + LDD 1954 0982 69 1954 1357 + STD P0004 1357 24 1980 0983 + LDD 1955 0983 69 1955 1208 + STD P0005 1208 24 1981 0984 + LDD 1956 0984 69 1956 1209 + STD P0006 1209 24 1982 0985 + RAL P0009 STEP 0985 65 1985 0989 + ALO 1IXXX CARD 0989 15 0992 0997 + STL P0009 NUMBER 0997 20 1985 0988 + RAU 1960 STORE 0988 60 1960 1015 + SRT 0002 CONTROL 1015 30 0002 0971 + STU P0008 INFO 0971 21 1984 0987 + AUP TORG 0987 10 0990 0995 + STL P0010 8003 TRANSFER 0995 20 1986 8003 + 8003 NOP 0000 9999 TO TYPE 8003 00 0000 9999 +1 + PUNCH PCH P0001 READC PUNCH READ 1350 71 1977 1950 +1 + SETCC RAU READC SUB10 SUDO EXIT 1400 60 1950 1405 +1 + 1900 LDD READC SUB14 MANUAL PAT 1900 69 1950 1403 + T0001 LDD X SUBR3 TYPE 0 1990 69 0993 0996 +1 + X0001 LDD PROCL 650 0913 69 1016 0969 + LDD PROCD COMMAND OR 1016 69 1019 0972 + LDD PUNCH PROCI CONSTANTS 1019 69 1350 1453 +1 + X0002 NOP 0000 8003 PSEUDO OP 0914 00 0000 8003 +1 + T0002 RAU READC SUB10 TYPE 1 COM 1991 60 1950 1405 +1 + X 00 0000 X0001 0993 00 0000 0913 +1 +1 RELOCATE ROUTINE +1 + HED T + T0003 LDD Q SUBR3 PROCESS OP 1992 69 1195 0996 + Q0002 NOP 0000 ILLOP ILLEGAL OP 0909 00 0000 1013 + Q0001 RAL 1951 IS L FIXED 0908 65 1951 1455 + SLT 0002 1455 35 0002 1211 + NZU REL 1211 44 1165 1166 + RAU 1957 FIXED L 1165 60 1957 1261 + SUP 2000I DRUM CORE 1261 11 1014 1169 + BMI FC 1169 46 1172 0973 + AUP 8001 RES FIXED DRUM 1172 10 8001 0979 + FC RAL 1957 SETL FIXED CORE 0973 65 1957 1311 + SR RAL XXXX1 SETL SET L 1450 65 1961 1311 + SETL SLT 0004 1311 35 0004 1171 + LDD P0008 1171 69 1984 1187 + SDA P0008 PROD 1187 22 1984 1237 + REL RAU 1957 DRUM CORE 1166 60 1957 1361 + SUP 2000I 1361 11 1014 1219 + BMI RC 1219 46 1222 1173 + AUP DDIFF RELOCATE 1222 10 0975 1179 + BMI BL DRUM ADDR 1179 46 1182 1183 + AUP 2000I RES 1182 10 1014 0979 + RES STU XXXX1 0979 21 1961 1214 + LDD SR SUB2R RESERVE L 1214 69 1450 1503 + RC RAL 1957 RELOCATE 1173 65 1957 1411 + ALO CDIFF CORE 1411 15 1264 1269 + SLO 9060 1269 16 1272 0977 + BMI BL 0977 46 1180 1183 + ALO 8001 SETL 1180 15 8001 1311 + BL RAU PROD SUB12 BLANK L 1183 60 1237 0991 +1 + REG J0944 0944 D TYPE 2 + REG G0941 0941 +1 + PROD LDD PROI SET D EXIT 1237 69 1190 1193 + STD EXITX 1193 24 1196 0999 + RAU 1952 WHAT IS D 0999 60 1952 1407 + LDD H SUBR4 1407 69 1210 1213 + H0001 RAL 1958 RELOCATE 0902 65 1958 1263 + SLO 2000I D OR C 1263 16 1014 1319 + BMI 1564 1563 1319 46 1564 1563 + H0002 SRT 0008 C D OR F 0903 30 0008 1221 + AUP 1500 8003 1221 10 0974 8003 + 1563 RAL CDIFF CDD C 1563 65 1264 1369 + 1564 RAL DDIFF CDD D 1564 65 0975 1369 + 1566 RAL 1958 J0001 F 1566 65 1958 0944 + CDD ALO 1958 J0001 1369 15 1958 0944 + H0003 NOP 0000 G0003 SYMBOLIC 0904 00 0000 0943 +1 + REG J0960 0960 I + REG F0955 0955 +1 + PROI LDD PUNCH SET I EXIT 1190 69 1350 1553 + STD EXITX 1553 24 1196 1099 + RAU 1953 WHAT IS I 1099 60 1953 1457 + LDD M SUBR4 1457 69 1260 1213 + M0001 RAL 1959 RELOCATE 0905 65 1959 1313 + SLO 2000I D OR C 1313 16 1014 1419 + BMI 1568 1567 1419 46 1568 1567 + M0002 SRT 0008 C D OR F 0906 30 0008 1175 + AUP 1504 8003 1175 10 0978 8003 + 1567 RAL CDIFF CDI C 1567 65 1264 1469 + 1568 RAL DDIFF CDI D 1568 65 0975 1469 + 1570 RAL 1959 J0001 F 1570 65 1959 0960 + CDI ALO 1959 J0001 1469 15 1959 0960 + M0003 NOP 0000 F0003 SYMBOLIC 0907 00 0000 0957 +1 + Q 00 0000 Q0001 CONSTANTS 1195 00 0000 0908 + 9060 00 0000 9060 1272 00 0000 9060 + H 00 0000 H0001 1210 00 0000 0902 + 1500 00 0000 1500 0974 00 0000 1500 + M 00 0000 M0001 1260 00 0000 0905 + 1504 00 0000 1504 0978 00 0000 1504 + XXXX1 01 0000 XXXX1 ERASEABLE 1961 01 0000 1961 + HED +1 +1 BOP ROUTINE +1 + 1001 LDD SUB16 INITIALIZE 1001 69 1404 1353 + RAU READC SUB10 PUNCH 1404 60 1950 1405 +1 +1 BLR ROUTINE +1 + 1002 RAL 1959 BLR RESERVE 1002 65 1959 1363 + BLR SLO 1958 FWA TO 1363 16 1958 1413 + AUP 8001 LWA 1413 10 8001 1271 + LDD SETCC SUB2R 1271 69 1400 1503 +1 +1 RBR ROUTINE +1 + 1012 RAU DDIFF 1012 60 0975 1229 + ALO 1959 BLR 1229 15 1959 1363 +1 +1 BLA ROUTINE +1 + 1003 LDD H8XXX SET DRUM 1003 69 1406 1309 + STD DRUMT TAG TO 8 1309 24 1212 1215 + RAL 1959 UNRESERVE 1215 65 1959 1463 + SLO 1958 FWA 1463 16 1958 1513 + AUP 8001 TO 1513 10 8001 1321 + LDD SETCC SUB2U LWA 1321 69 1400 1603 +1 +1 REG ROUTINE +1 + HED R + 1004 RAL 1952 IS 1004 65 1952 1507 + SRT 0008 REGION 1507 30 0008 1225 + SLO 90XXX CHARACTER 1225 16 1178 1233 + BMI 1002 ALPHABETIC 1233 46 0986 1002 + ALO 29XXX 0986 15 1189 1243 + BMI 1002 1243 46 1002 1197 + SLT 0004 STORE 1197 35 0004 1557 + ALO ST REGION 1557 15 1310 1265 + AUP 1958 ORIGIN 1265 10 1958 1613 + AUP H9XXX 8002 1613 10 1216 8002 + 8002 STU 9999 1002 8002 21 9999 1002 +1 + ST STU 1021 1002 CONSTANTS 1310 21 1021 1002 + HED +1 +1 EQU REQ AND SYN ROUTINE +1 + HED Z + 1005 LDD H8XXX BOTH EQU 1005 69 1406 1359 + 1006 LDD H9XXX BOTH SYN 1006 69 1216 1359 + BOTH STD TAG 1359 24 1262 1315 + RAU 1953 WHAT IS I 1315 60 1953 1607 + LDD Z SUBR4 1607 69 1360 1213 + Z0001 RAL 1959 Y0001 ABSOLUTE 0917 65 1959 0915 + Z0002 LDD Y SUBR9 REGIONAL 0918 69 1371 1174 + Y0001 STL E TD 0915 20 1519 1322 + Y0002 RAL P0010 BP REG ERROR 0916 65 1986 1191 + Z0003 LDD W SUBR6 SYMBOLIC 0919 69 1372 1275 + W0001 RAL EQUIV Y0001 S DEFINED 0920 65 1223 0915 + W0002 RAL P0010 BP S UNDEFIND 0921 65 1986 1191 + W0003 RAL P0010 BP S TAB FULL 0922 65 1986 1191 +1 + TD RAU 1952 HEAD D 1322 60 1952 1657 + LDD SUB15 AND EQUATE 1657 69 1410 1663 + LDD V SUBR6 TO E 1410 69 1713 1275 + V0003 RAL P0010 BP S TAB FULL 0912 65 1986 1191 + V0001 ALO E SD 0910 15 1519 1273 + V0002 ALO E SD 0911 15 1519 1273 + SD LDD TT SUBR7 1273 69 0976 1279 +1 + TT LDD TAG TEST TAG 0976 69 1262 1365 + BDO SETCC 1365 90 1400 0970 + RAU E RESERVE E 0970 60 1519 1323 + LDD SETCC SUB2R 1323 69 1400 1503 +1 + 1011 LDD H8XXX REQ 1011 69 1406 1409 + STD TAG ROUTINE 1409 24 1262 1415 + RAL 1959 IS I 1415 65 1959 1763 + SLO 2000I DRUM O COR 1763 16 1014 1569 + BMI D 1569 46 1422 1373 + ALO CDIFF CD 1373 15 1264 1619 + D ALO DDIFF CD 1422 15 0975 1619 + CD ALO 2000I Y0001 1619 15 1014 0915 +1 + Z 00 0000 Z0001 CONSTANTS 1360 00 0000 0917 + Y 00 0089 Y0001 1371 00 0089 0915 + W 00 0000 W0001 1372 00 0000 0920 + V 00 0000 V0001 1713 00 0000 0910 + 88 00 8800 0000 1500 00 8800 0000 +1 + BP ALO 88 BY PASS 1191 15 1500 1505 + STL P0010 PUNCH 1505 20 1986 1350 +1 + TAG 01 0000 TAG ERASEABLE 1262 01 0000 1262 + E 01 0000 E 1519 01 0000 1519 + HED +1 +1 ALF ROUTINE +1 + 1007 LDD PROCL PROCES LOC 1007 69 1460 0969 + LDD 1952 1460 69 1952 1555 + STD P0007 1555 24 1983 1186 + RAL 1953 REPLACE 1186 65 1953 1707 + NZE PUNCH BLANK I 1707 45 1350 1461 + LDD SOAP2 BY 1461 69 1314 1017 + STD P0003 PUNCH SOAP2 1017 24 1979 1350 + SOAP2 ALF SOAP2 SOAP2 CONSTANT 1314 82 7661 7792 +1 +1 PAT ROUTINE +1 + 1008 RAU SUB10 1008 60 1511 1405 + LDD READC SUB14 1511 69 1950 1403 +1 +1 HED ROUTINE +1 + 1009 RAL 1952 STORE 1009 65 1952 1757 + SRT 0008 HEADING 1757 30 0008 1325 + STL 0000H SETCC CHARACTER 1325 20 1329 1400 +1 +1 REL ROUTINE +1 + HED M + 1010 RAL 1952 SET 1010 65 1952 1807 + NZE SDD DRUM 1807 45 1510 1561 + RAL 1958 SDD AND 1510 65 1958 1561 + SDD STL DDIFF CORE 1561 20 0975 1228 + RAL 1953 DELTAS 1228 65 1953 1857 + NZE SCD 1857 45 1560 1611 + RAL 1959 SCD 1560 65 1959 1611 + SCD STL CDIFF SETCC 1611 20 1264 1400 +1 + DDIFF 01 0000 DDIFF ERASEABLE 0975 01 0000 0975 + CDIFF 01 0000 CDIFF 1264 01 0000 1264 + HED +1 +1 LOAD AVAILABLITY TABLE +1 + HED L + 1999 RAL 1951 CALC 1999 65 1951 1605 + SRT 0004 LOC 1605 30 0004 1465 + SLT 0004 W2 1465 35 0004 1375 + ALO 8002 1375 15 8002 1283 + ALO 8002 1283 15 8002 1241 + ALO C1 1241 15 0994 1149 + AUP C2 8003 1149 10 1352 8003 + 8003 LDD 9995 8002 LOAD 8003 69 9995 8002 + 8002 STD 9994 TUP TABLE 8002 24 9994 1247 + TUP SUP TW 1247 11 1550 1655 + NZU READC 1655 44 1459 1950 + AUP TWP2 1459 10 1312 1167 + ALO 1DXXX 8003 1167 15 1020 8003 +1 + C1 STD A0001 TUP CONSTANTS 0994 24 0600 1247 + C2 LDD 1952 8002 1352 69 1952 8002 + TW LDD 1958 8002 1550 69 1958 8002 + TWP2 LDD 1960 8002 1312 69 1960 8002 + HED +1 OPTIMIZING TABLE +1 + N0001 00 0404 0998 NOP 0800 00 0404 0998 + N0002 00 0404 0998 HLT 0801 00 0404 0998 + N0003 33 2322 0999 UFA 0802 33 2322 0999 + N0004 00 0505 0998 RTC 0803 00 0505 0998 + N0005 00 0505 0998 RTN 0804 00 0505 0998 + N0006 00 0505 0998 RTA 0805 00 0505 0998 + N0007 00 0505 0998 WTN 0806 00 0505 0998 + N0008 00 0505 0998 WTA 0807 00 0505 0998 + N0009 33 1212 0999 LIB 0808 33 1212 0999 + N0010 33 0202 0999 LDI 0809 33 0202 0999 + N0011 33 0504 0999 AUP 0810 33 0504 0999 + N0012 33 0504 0999 SUP 0811 33 0504 0999 + N0013 99 9999 9999 NOT USED 0812 99 9999 9999 + N0014 99 9999 9999 NOT USED 0813 99 9999 9999 + N0015 33 1110 0999 DIV 0814 33 1110 0999 + N0016 33 0504 0999 ALO 0815 33 0504 0999 + N0017 33 0504 0999 SLO 0816 33 0504 0999 + N0018 33 0504 0999 AML 0817 33 0504 0999 + N0019 33 0504 0999 SML 0818 33 0504 0999 + N0020 33 2120 0999 MPY 0819 33 2120 0999 + N0021 54 0303 0999 STL 0820 54 0303 0999 + N0022 45 0303 0999 STU 0821 45 0303 0999 + N0023 34 0303 0999 SDA 0822 34 0303 0999 + N0024 34 0303 0999 SIA 0823 34 0303 0999 + N0025 33 0303 0999 STD 0824 33 0303 0999 + N0026 44 0505 0998 NTS 0825 44 0505 0998 + N0027 00 0505 0998 BIN 0826 00 0505 0998 + N0028 00 0505 0998 SET 0827 00 0505 0998 + N0029 33 1212 0999 SIB 0828 33 1212 0999 + N0030 33 0202 0999 STI 0829 33 0202 0999 + N0031 00 0000 0988 SRT 0830 00 0000 0988 + N0032 00 0000 0888 SRD 0831 00 0000 0888 + N0033 33 2726 0999 FAD 0832 33 2726 0999 + N0034 33 2726 0999 FSB 0833 33 2726 0999 + N0035 33 0000 0999 FDV 0834 33 0000 0999 + N0036 00 0000 0988 SLT 0835 00 0000 0988 + N0037 00 0000 0988 SCT 0836 00 0000 0988 + N0038 33 2726 0999 FAM 0837 33 2726 0999 + N0039 33 2726 0999 FSM 0838 33 2726 0999 + N0040 33 0000 0999 FMP 0839 33 0000 0999 + N0041 33 0404 0998 NZA 0840 33 0404 0998 + N0042 33 0404 0998 BMZ 0841 33 0404 0998 + N0043 33 0404 0998 NZB 0842 33 0404 0998 + N0044 33 0404 0998 BMB 0843 33 0404 0998 + N0045 34 0405 0998 NZU 0844 34 0405 0998 + N0046 43 0504 0998 NZE 0845 43 0504 0998 + N0047 33 0404 0998 BMI 0846 33 0404 0998 + N0048 33 0505 0998 BOV 0847 33 0505 0998 + N0049 33 0404 0998 NZC 0848 33 0404 0998 + N0050 33 0404 0998 BMC 0849 33 0404 0998 + N0051 00 0000 0898 AXA 0850 00 0000 0898 + N0052 00 0000 0898 SXA 0851 00 0000 0898 + N0053 00 0000 0898 AXB 0852 00 0000 0898 + N0054 00 0000 0898 SXB 0853 00 0000 0898 + N0055 44 0505 0998 NEF 0854 44 0505 0998 + N0056 00 0505 0998 RWD 0855 00 0505 0998 + N0057 00 0505 0998 WTM 0856 00 0505 0998 + N0058 00 0505 0998 BST 0857 00 0505 0998 + N0059 00 0000 0898 AXC 0858 00 0000 0898 + N0060 00 0000 0898 SXC 0859 00 0000 0898 + N0061 33 0504 0999 RAU 0860 33 0504 0999 + N0062 33 0504 0999 RSU 0861 33 0504 0999 + N0063 99 9999 9999 NOT USED 0862 99 9999 9999 + N0064 99 9999 9999 NOT USED 0863 99 9999 9999 + N0065 33 1110 0999 DVR 0864 33 1110 0999 + N0066 33 0504 0999 RAL 0865 33 0504 0999 + N0067 33 0504 0999 RSL 0866 33 0504 0999 + N0068 33 0504 0999 RAM 0867 33 0504 0999 + N0069 33 0504 0999 RSM 0868 33 0504 0999 + N0070 33 0303 0999 LDD 0869 33 0303 0999 + N0071 00 0000 0999 RD1 0870 00 0000 0999 + N0072 00 0000 0999 WR1 0871 00 0000 0999 + N0073 00 0000 0999 RC1 0872 00 0000 0999 + N0074 00 0000 0999 RD2 0873 00 0000 0999 + N0075 00 0000 0999 WR2 0874 00 0000 0999 + N0076 00 0000 0999 RC2 0875 00 0000 0999 + N0077 00 0000 0999 RD3 0876 00 0000 0999 + N0078 00 0000 0999 WR3 0877 00 0000 0999 + N0079 00 0000 0999 RC3 0878 00 0000 0999 + N0080 00 0505 0999 RPY 0879 00 0505 0999 + N0081 00 0000 0898 RAA 0880 00 0000 0898 + N0082 00 0000 0898 RSA 0881 00 0000 0898 + N0083 00 0000 0898 RAB 0882 00 0000 0898 + N0084 00 0000 0898 RSB 0883 00 0000 0898 + N0085 33 0506 0999 TLU 0884 33 0506 0999 + N0086 00 0606 0998 SDS 0885 00 0606 0998 + N0087 00 0606 0998 RDS 0886 00 0606 0998 + N0088 00 0606 0998 WDS 0887 00 0606 0998 + N0089 00 0000 0898 RAC 0888 00 0000 0898 + N0090 00 0000 0898 RSC 0889 00 0000 0898 + N0091 44 0505 0998 BDO 0890 44 0505 0998 + N0092 33 0505 0998 BD1 0891 33 0505 0998 + N0093 33 0505 0998 BD2 0892 33 0505 0998 + N0094 33 0505 0998 BD3 0893 33 0505 0998 + N0095 33 0505 0998 BD4 0894 33 0505 0998 + N0096 33 0505 0998 BD5 0895 33 0505 0998 + N0097 33 0505 0998 BD6 0896 33 0505 0998 + N0098 33 0505 0998 BD7 0897 33 0505 0998 + N0099 33 0505 0998 BD8 0898 33 0505 0998 + N0100 44 0505 0998 BD9 0899 44 0505 0998 +1 +1 SYMBOLIC OP TABLE +1 + C0001 61 7366 1007 ALF 1050 61 7366 1007 + C0002 61 7376 0015 ALO 1051 61 7376 0015 + C0003 61 7473 0017 AML 1052 61 7473 0017 + C0004 61 8477 0010 AUP 1053 61 8477 0010 + C0005 61 8761 0050 AXA 1054 61 8761 0050 + C0006 61 8762 0052 AXB 1055 61 8762 0052 + C0007 61 8763 0058 AXC 1056 61 8763 0058 + C0008 62 6476 0090 BDO 1057 62 6476 0090 + C0009 62 6491 0091 BD1 1058 62 6491 0091 + C0010 62 6492 0092 BD2 1059 62 6492 0092 + C0011 62 6493 0093 BD3 1060 62 6493 0093 + C0012 62 6494 0094 BD4 1061 62 6494 0094 + C0013 62 6495 0095 BD5 1062 62 6495 0095 + C0014 62 6496 0096 BD6 1063 62 6496 0096 + C0015 62 6497 0097 BD7 1064 62 6497 0097 + C0016 62 6498 0098 BD8 1065 62 6498 0098 + C0017 62 6499 0099 BD9 1066 62 6499 0099 + C0018 62 6975 0026 BIN 1067 62 6975 0026 + C0019 62 7361 1003 BLA 1068 62 7361 1003 + C0020 62 7379 1002 BLR 1069 62 7379 1002 + C0021 62 7461 0041 BMA 1070 62 7461 0041 + C0022 62 7462 0043 BMB 1071 62 7462 0043 + C0023 62 7463 0049 BMC 1072 62 7463 0049 + C0024 62 7469 0046 BMI 1073 62 7469 0046 + C0025 62 7677 1001 BOP 1074 62 7677 1001 + C0026 62 7685 0047 BOV 1075 62 7685 0047 + C0027 62 8283 0057 BST 1076 62 8283 0057 + C0028 64 6985 0014 DIV 1077 64 6985 0014 + C0029 64 8579 0064 DVR 1078 64 8579 0064 + C0030 65 7884 1005 EQU 1079 65 7884 1005 + C0031 66 6164 0032 FAD 1080 66 6164 0032 + C0032 66 6174 0037 FAM 1081 66 6174 0037 + C0033 66 6485 0034 FDV 1082 66 6485 0034 + C0034 66 7477 0039 FMP 1083 66 7477 0039 + C0035 66 8262 0033 FSB 1084 66 8262 0033 + C0036 66 8274 0038 FSM 1085 66 8274 0038 + C0037 68 6564 1009 HED 1086 68 6564 1009 + C0038 68 7383 0001 HLT 1087 68 7383 0001 + C0039 73 6464 0069 LDD 1088 73 6464 0069 + C0040 73 6469 0009 LDI 1089 73 6469 0009 + C0041 73 6962 0008 LIB 1090 73 6962 0008 + C0042 74 7788 0019 MPY 1091 74 7788 0019 + C0043 75 6566 0054 NEF 1092 75 6566 0054 + C0044 75 7677 0000 NOP 1093 75 7677 0000 + C0045 75 8382 0025 NTS 1094 75 8382 0025 + C0046 75 8961 0040 NZA 1095 75 8961 0040 + C0047 75 8962 0042 NZB 1096 75 8962 0042 + C0048 75 8963 0048 NZC 1097 75 8963 0048 + C0051 75 8965 0045 NZE 1100 75 8965 0045 + C0052 75 8984 0044 NZU 1101 75 8984 0044 + C0053 77 6183 1008 PAT 1102 77 6183 1008 + C0054 77 6368 0071 PCH 1103 77 6368 0071 + C0055 79 6161 0080 RAA 1104 79 6161 0080 + C0056 79 6162 0082 RAB 1105 79 6162 0082 + C0057 79 6163 0088 RAC 1106 79 6163 0088 + C0058 79 6173 0065 RAL 1107 79 6173 0065 + C0059 79 6174 0067 RAM 1108 79 6174 0067 + C0060 79 6184 0060 RAU 1109 79 6184 0060 + C0061 79 6279 1012 RBR 1110 79 6279 1012 + C0062 79 6364 0070 RCD 1111 79 6364 0070 + C0063 79 6391 0072 RC1 1112 79 6391 0072 + C0064 79 6392 0075 RC2 1113 79 6392 0075 + C0065 79 6393 0078 RC3 1114 79 6393 0078 + C0066 79 6482 0086 RDS 1115 79 6482 0086 + C0067 79 6491 0070 RD1 1116 79 6491 0070 + C0068 79 6492 0073 RD2 1117 79 6492 0073 + C0069 79 6493 0076 RD3 1118 79 6493 0076 + C0070 79 6567 1004 REG 1119 79 6567 1004 + C0071 79 6573 1010 REL 1120 79 6573 1010 + C0072 79 6578 1011 REQ 1121 79 6578 1011 + C0073 79 7788 0079 RPY 1122 79 7788 0079 + C0074 79 8261 0081 RSA 1123 79 8261 0081 + C0075 79 8262 0083 RSB 1124 79 8262 0083 + C0076 79 8263 0089 RSC 1125 79 8263 0089 + C0077 79 8273 0066 RSL 1126 79 8273 0066 + C0078 79 8274 0068 RSM 1127 79 8274 0068 + C0079 79 8284 0061 RSU 1128 79 8284 0061 + C0080 79 8361 0005 RTA 1129 79 8361 0005 + C0081 79 8363 0003 RTC 1130 79 8363 0003 + C0082 79 8375 0004 RTN 1131 79 8375 0004 + C0083 79 8664 0055 RWD 1132 79 8664 0055 + C0084 82 6383 0036 SCT 1133 82 6383 0036 + C0085 82 6461 0022 SDA 1134 82 6461 0022 + C0086 82 6482 0085 SDS 1135 82 6482 0085 + C0087 82 6583 0027 SET 1136 82 6583 0027 + C0088 82 6961 0023 SIA 1137 82 6961 0023 + C0089 82 6962 0028 SIB 1138 82 6962 0028 + C0090 82 7376 0016 SLO 1139 82 7376 0016 + C0091 82 7383 0035 SLT 1140 82 7383 0035 + C0092 82 7473 0018 SML 1141 82 7473 0018 + C0093 82 7964 0031 SRD 1142 82 7964 0031 + C0094 82 7983 0030 SRT 1143 82 7983 0030 + C0095 82 8364 0024 STD 1144 82 8364 0024 + C0096 82 8369 0029 STI 1145 82 8369 0029 + C0097 82 8373 0020 STL 1146 82 8373 0020 + C0098 82 8384 0021 STU 1147 82 8384 0021 + C0101 82 8477 0011 SUP 1150 82 8477 0011 + C0102 82 8761 0051 SXA 1151 82 8761 0051 + C0103 82 8762 0053 SXB 1152 82 8762 0053 + C0104 82 8763 0059 SXC 1153 82 8763 0059 + C0105 82 8875 1006 SYN 1154 82 8875 1006 + C0106 83 7384 0084 TLU 1155 83 7384 0084 + C0107 84 6661 0002 UFA 1156 84 6661 0002 + C0108 86 6482 0087 WDS 1157 86 6482 0087 + C0109 86 7991 0071 WR1 1158 86 7991 0071 + C0110 86 7992 0074 WR2 1159 86 7992 0074 + C0111 86 7993 0077 WR3 1160 86 7993 0077 + C0112 86 8361 0007 WTA 1161 86 8361 0007 + C0113 86 8374 0056 WTM 1162 86 8374 0056 + C0114 86 8375 0006 WTN 1163 86 8375 0006 + C0115 99 9999 0001 TABLE END 1164 99 9999 0001 +1 +1 SUB 1 STORE K IN FWA TO LWA +1 + HED 1 + SUBR1 STD EXITX STORE EXIT 1600 24 1196 1199 + STU XXXX1 STORE K 1199 21 1961 1364 + LDD FWA SET 1364 69 1217 1170 + SDA FWA FWA 1170 22 1217 1220 + SLT 0004 LWA 1220 35 0004 1181 + SDA XXXX2 ADDRESSES 1181 22 1962 1515 + RAU FWA 1515 60 1217 1421 + ALO XXXX1 8003 1421 15 1961 8003 + 8003 STL 9999 NEXT STORE K 8003 20 9999 1402 + NEXT SUP XXXX2 END OF 1402 11 1962 1267 + NZU EXITX LOOP TEST 1267 44 1471 1196 + AUP 8001 1471 10 8001 1379 + AUP 1DXXX 8003 STEP 1379 10 1020 8003 +1 + FWA STL 9998 NEXT CONSTANTS 1217 20 9998 1402 + XXXX2 01 0000 XXXX2 ERASEABLE 1962 01 0000 1962 + HED +1 +1 SUB 2 RESERVE UNRESERVE +1 + HED 2 + SUB2R STD EXITY RESERVE 1503 24 1456 1509 + LDD Z RU ENTRY 1509 69 1362 1565 + SUB2U STD EXITY UNRESERVE 1603 24 1456 1559 + LDD 1I RU ENTRY 1559 69 1412 1565 + RU STD W SET W 1565 24 1018 1521 + STL N STORE N 1521 20 1425 1278 + SLO 8001 CALC AO 1278 16 8001 1185 + AUP 8003 AND PO 1185 10 8003 1293 + SRT 0003 1293 30 0003 1351 + STU X 1351 21 1506 1609 + SUP 8001 1609 11 8001 1317 + SLT 0001 1317 35 0001 1423 + STU P 1423 21 1328 1231 + SUP 8001 1231 11 8001 1239 + SLT 0002 1239 35 0002 1245 + AUP 8003 1245 10 8003 1653 + AUP X 1653 10 1506 1661 + ALO P 1661 15 1328 1333 + SLT 0004 1333 35 0004 1343 + ALO C1 1343 15 1246 1401 + STL B0002 1401 20 0901 1454 + LDD C2 1454 69 1907 1610 + SDA SPR 1610 22 1813 1266 + AUP C3 SU 1266 10 1669 1473 + SU STU SA 1473 21 1378 1281 + AUP C4 8003 1281 10 1184 8003 + 8003 RAL 9992 B0002 8003 65 9992 0901 + B0002 SLT 0009 XX 0901 35 0009 1571 + XX STU UH 1571 21 1176 1429 + SLT 0001 1429 35 0001 1235 + RAL 8002 1235 65 8002 1393 + AUP W 1393 10 1018 1523 + SRT 0001 1523 30 0001 1479 + AUP UH SPR 1479 10 1176 1813 + SPR SRT 0009 SA 1813 30 0009 1378 + SA STL 9983 B0001 1378 20 9983 0900 + B0001 RAL N IS N ZERO 0900 65 1425 1529 + NZE EXITY 1529 45 1232 1456 + SLO 1I REDUCE N 1232 16 1412 1367 + STL N BY 1 1367 20 1425 1428 + RAU SA IS AI 1428 60 1378 1383 + SUP A197 IN LAST 1383 11 1236 1291 + BMI TP BLOCK OF 1291 46 1194 1295 + AUP A201 SU 4 1194 10 1297 1473 +1 + TP RAL SPR IS P 9 1295 65 1813 1417 + SLO C2 1417 16 1907 1711 + NZE ZP 1711 45 1414 1615 + ALO C5 STEP P 1414 15 1467 1621 + LDD C1 1621 69 1246 1249 + SDA B0002 1249 22 0901 1504 + STL SPR 1504 20 1813 1316 + RAU SA REDUCE AI 1316 60 1378 1433 + SUP C6 SU BY 196 1433 11 1286 1473 +1 + ZP LDD C1 SET P 1615 69 1246 1299 + STD B0002 TO ZERO 1299 24 0901 1554 + LDD C7 1554 69 1308 1761 + STD SPR 1761 24 1813 1366 + RAU SA REDUCE AI 1366 60 1378 1483 + SUP C8 SU BY 195 1483 11 1336 1473 +1 + C1 SLT 0000 XX CONSTANTS 1246 35 0000 1571 + C2 SRT 0009 SA 1907 30 0009 1378 + C3 STL A0001 B0001 1669 20 0600 0900 + C4 45 0000 0001 1184 45 0000 0001 + 1I 00 0000 0001 1412 00 0000 0001 + A197 STL A0197 B0001 1236 20 0796 0900 + A201 STL A0201 B0001 1297 20 0800 0900 + C5 SRT 0010 SA 1467 30 0010 1378 + C6 00 0196 0000 1286 00 0196 0000 + C7 SRT 0000 SA 1308 30 0000 1378 + C8 00 0195 0000 1336 00 0195 0000 + Z 00 0000 0000 1362 00 0000 0000 + W 01 0000 W ERASEABLE 1018 01 0000 1018 + N 01 0000 N 1425 01 0000 1425 + B0002 01 0000 B0002 0901 01 0000 0901 + SPR 01 0000 SPR 1813 01 0000 1813 + SA 01 0000 SA 1378 01 0000 1378 + UH 01 0000 UH 1176 01 0000 1176 + X 01 0000 X 1506 01 0000 1506 + HED +1 +1 SUB 3 PROCESS OP CODE +1 + HED 3 + SUBR3 STD EXITX STORE EXIT 0996 24 1196 1349 + RAL 1954 1349 65 1954 1659 + SRT 0004 IS OP 1659 30 0004 1719 + NZE ILLOP BLANK 1719 45 1472 1013 + SLT 0006 IS OP 1472 35 0006 1287 + NZU NUM NUMERIC 1287 44 1341 1192 + SRT 0002 1341 30 0002 1347 + STL XXXX1 SEARCH 1347 20 1961 1464 + SLO 8001 SYMBOLIC 1464 16 8001 1671 + TLU C0001 OP TABLE 1671 84 1050 1705 + ALO 1 8002 1705 15 1358 8002 + 8002 RAL 9997 NEXT IS 8002 65 9997 1451 + NEXT SLO XXXX1 SYM OP 1451 16 1961 1665 + SLT 0006 LEGAL 1665 35 0006 1579 + NZU ILLOP 1579 44 1013 1234 + SLT 0001 TEST FOR 1234 35 0001 1391 + NZU PSEU PSEUDO OP 1391 44 1345 1296 + SLT 0001 SNO STORE NUM 1296 35 0001 1703 + SNO STL P0007 650 OP 1703 20 1983 1386 + SRT 0004 GET OPTIM 1386 30 0004 1397 + ALO 3 8002 CONSTANTS 1397 15 1650 8002 + 8002 LDD 9996 NEX 8002 69 9996 1399 + NEX STD OPTIM EXITX 1399 24 1452 1196 +1 + NUM SLO 4 FORM 1192 16 1395 1449 + SLT 0002 NUMERIC 1449 35 0002 1755 + SLO 8002 OP 1755 16 8002 1863 + SRT 0001 CODE 1863 30 0001 1769 + ALO 8001 SNO 1769 15 8001 1703 +1 + ILLOP RAL P0010 ILLEGAL OP 1013 65 1986 1441 + ALO 5 SET 8 1441 15 1244 1499 + STL P0010 FOR BLANK 1499 20 1986 1289 + LDD 6 NEX OP 1289 69 1242 1399 +1 + PSEU SLT 0003 PSEUDO 1345 35 0003 1753 + ALO EXITX OP 1753 15 1196 1501 + ALO 1IXXX 8002 1501 15 0992 8002 +1 + 1 RAL 0000 NEXT CONSTANTS 1358 65 0000 1451 + 2 10 0000 0000 1700 10 0000 0000 + 3 LDD N0001 NEX 1650 69 0800 1399 + 4 90 9000 0000 1395 90 9000 0000 + 5 00 0000 0008 1244 00 0000 0008 + 6 55 0505 0999 1242 55 0505 0999 + HED +1 +1 SUB 4 WHAT IS ADDRESS +1 + HED 4 + SUBR4 STD EXITZ STORE EXIT 1213 24 1416 1819 + STU XXXX1 STORE ADDR 1819 21 1961 1514 + SRT 0008 IS C5 1514 30 0008 1533 + NZU EXITZ BLANK 1533 44 1337 1416 + STU XXXX2 SAVE C5 1337 21 1962 1715 + RAU 8002 ARE LOW 4 1715 60 8002 1573 + AUP 90XXX CHARACTERS 1573 10 1178 1583 + BOV LOOP LOOP NUMERIC 1583 47 1436 1436 + LOOP AUP H1 1436 10 1339 1443 + BOV SYM 1443 47 1346 0998 + SLT 0002 1346 35 0002 1803 + NZU LOOP 1803 44 1436 1408 + RAL XXXX2 LOW 4 NUM 1408 65 1962 1517 + SLO 90XXX IS C5 1517 16 1178 1633 + BMI SYM ALPHABETIC 1633 46 1486 0998 + ALO 29XXX 1486 15 1189 1493 + BMI SYM 1493 46 0998 1447 + RAL 1IXXX REGIONAL 1447 65 0992 1497 + AUP XXXX1 AEX 1497 10 1961 1765 + AEX ALO EXITZ 1765 15 1416 1721 + SLO 8002 8001 1721 16 8002 8001 + SYM RAU XXXX1 HED SYMBOL 0998 60 1961 1815 + LDD SUB15 1815 69 1168 1663 + ALO 2IXXX STEP EXIT 1168 15 1771 1475 + STU HSYMB AEX 1475 21 1230 1765 + H1 10 0000 0000 1339 10 0000 0000 + HSYMB 01 0000 HSYMB ERASEABLE 1230 01 0000 1230 + HED +1 +1 SUB 5 TEST ABSOLUTE ADDRE +1 + HED 5 + SUBR5 STD EXITZ STORE EXIT 1750 24 1416 1869 + STL XXXX1 STORE A 1869 20 1961 1614 + SLT 0004 1614 35 0004 1525 + SLO 8002 1525 16 8002 1683 + TLU R0001 TLU 1683 84 1200 1805 + ALO GET 8002 RANGE 1805 15 1458 8002 + 8002 RAU 9972 X TABLE 8002 60 9972 1177 + X SLT 0006 1177 35 0006 1491 + SRT 0006 1491 30 0006 1855 + AUP EXITZ 1855 10 1416 1821 + ALO XXXX1 1821 15 1961 1865 + SUP 8003 8001 1865 11 8003 8001 + GET RAU 0000 X 1458 60 0000 1177 + R0001 00 1999 0000 RANGE 1200 00 1999 0000 + R0002 00 7999 0003 TABLE 1201 00 7999 0003 + R0003 00 8003 0001 1202 00 8003 0001 + R0004 00 8004 0003 1203 00 8004 0003 + R0005 00 8007 0001 1204 00 8007 0001 + R0006 00 8999 0003 1205 00 8999 0003 + R0007 00 9059 0002 1206 00 9059 0002 + R0008 99 9999 0003 1207 99 9999 0003 + HED +1 +1 SUB 6 SYMBOL TEST ROUTINE +1 + HED 6 + SUBR6 STD EXITZ STORE EXIT 1275 24 1416 1919 + STU S STORE SYMB 1919 21 1224 1227 + LDD SWOF SET SWITCH 1227 69 1280 1733 + STD SW OFF 1733 24 1536 1389 + MPY SC SCRAMBLE 1389 19 1292 1913 + RAL 8002 SYMBOL 1913 65 8002 1871 + SLT 0003 GIVING 1871 35 0003 1629 + MPY CF LO 1629 19 1282 1853 + SRT 0001 1853 30 0001 1709 + SLT 0004 SET 1709 35 0004 1969 + ALO L1P1 TEST 1969 15 1522 1277 + STL LOP1 WORD 1277 20 1331 1284 + SLO 1DXXX 1284 16 1020 1575 + STL LO SLI SAVE LO 1575 20 1679 1332 + SLI STL LI 8001 INIT LI 1332 20 1387 8001 + 8001 RAL 9990 A IS CONT OF 8001 65 9990 1445 + A NZE UND LI ZERO 1445 45 1098 1549 + SLO S IS CONT OF 1098 16 1224 1729 + NZE SW DEF LI SYMB 1729 45 1536 1783 + SW RAL LI OFF IS LI 1536 65 1387 1541 + OFF SLO LMAX MAXIMUM 1541 16 1294 1599 + NZE MAX 1599 45 1502 1903 + ALO LMP1 SLI STEP LI 1502 15 1905 1332 + ON SLO LO IS LI EQUA 1800 16 1679 1833 + NZE SWSYM TO LO 1833 45 1586 1437 + ALO LOP1 SLI STEP LI 1586 15 1331 1332 + MAX LDD SWON SET 1903 69 1556 1759 + STD SW SWITCH ON 1759 24 1536 1439 + RAL L1 SLI ZERO LI 1439 65 1342 1332 +1 + UND RAL EXITZ UNDEFINED 1549 65 1416 1921 + ALO 1IXXX STEP 1921 15 0992 1547 + STL EXITZ EXIT 1547 20 1416 1270 + RAL LI 1270 65 1387 1591 + SLO L1 1591 16 1342 1597 + STL LSYMB ASU 1597 20 1551 1604 +1 + DEF RAL LI DEFINED 1783 65 1387 1641 + LDD ASU SUBR8 GET 1641 69 1604 1508 + ASU AUP S EXITZ EQUIVALENT 1604 10 1224 1416 +1 + SWSYM HLT 0111 SYMOF S TAB FULL 1437 01 0111 1691 + SYMOF LDD SYMON SET SW SYM 1691 69 1344 1647 + STD SWSYM SYMON ON 1647 24 1437 1344 + SYMON RAL EXITZ 1344 65 1416 1971 + ALO 2IXXX 8002 1971 15 1771 8002 +1 + SWOF RAL LI OFF CONSTANTS 1280 65 1387 1541 + SWON RAL LI ON 1556 65 1387 1800 + SC 10 0100 1001 1292 10 0100 1001 + CF 00 0000 0004 1282 00 0000 0004 + L1 RAL 0000 A 1342 65 0000 1445 + L1P1 RAL 0001 A 1522 65 0001 1445 + LMAX RAL E0000 A 1294 65 0399 1445 + LMP1 RAL E0001 A 1905 65 0400 1445 + S 01 0000 S ERASABLE 1224 01 0000 1224 + SW 01 0000 SW 1536 01 0000 1536 + LO 01 0000 LO 1679 01 0000 1679 + LI 01 0000 LI 1387 01 0000 1387 + LSYMB 01 0000 LSYMB 1551 01 0000 1551 + HED +1 +1 SUB 7 STORE SYMBOL AND EQ +1 + HED 7 + SUBR7 STD EXITZ STORE EXIT 1279 24 1416 1320 + LDD SS 1320 69 1623 1226 + SDA XXXX2 8001 STORE 1226 22 1962 8001 + 8001 STU 9988 A SYMBOL 8001 21 9988 1741 + A SUP 8001 1741 11 8001 1649 + STL XXXX1 SAVE E 1649 20 1961 1664 + SRT 0004 1664 30 0004 1625 + DIV 2IXXX CALCULATE 1625 14 1771 1381 + SLT 0004 LOCATION 1381 35 0004 1791 + ALO C1 OF 1791 15 1394 1699 + LDD C2 E 1699 69 1552 1606 + SDA SEL AND 1606 22 1809 1462 + LDD C3 STORE 1462 69 1915 1218 + SDA SER 1218 22 1572 1675 + STL OBEE 1675 20 1779 1382 + SLO 8001 1382 16 8001 1489 + ALO XXXX1 OBEE 1489 15 1961 1779 + OBEE LDD 9986 B 1779 69 9986 1539 + B NZU SER 1539 44 1572 1444 + SLT 0004 SEL 1444 35 0004 1809 + SS STU 9987 A CONSTANTS 1623 21 9987 1741 + C1 LDD E0001 B 1394 69 0400 1539 + C2 SDA 9985 EXITZ 1552 22 9985 1416 + C3 SIA 9984 EXITZ 1915 23 9984 1416 + OBEE 01 0000 OBEE ERASABLE 1779 01 0000 1779 + SEL 01 0000 SEL 1809 01 0000 1809 + SER 01 0000 SER 1572 01 0000 1572 + HED +1 +1 SUB 8 GIVEN SYM LOC GET EQU +1 + HED 8 + SUBR8 STD EXIT STORE EXIT 1508 24 1811 1714 + LDD 8003 1714 69 8003 1370 + SDA LSYMB STORE L 1370 22 1551 1654 + RAL 8001 1654 65 8001 1861 + DIV 2DXXX 1861 14 1764 1725 + SLT 0004 1725 35 0004 1285 + ALO E1 8002 1285 15 1188 8002 + 8002 LDD 9975 TR 8002 69 9975 1478 + TR NZU LH 1478 44 1431 1432 + RAM 8001 LR GET E RH 1431 67 8001 1589 + LH RAM 8001 GET E LH 1432 67 8001 1639 + SRT 0004 LR 1639 30 0004 1589 + LR LDD 8003 1589 69 8003 1396 + SIA EQUIV 1396 23 1223 1276 + RAL LSYMB EXIT 1276 65 1551 1811 + E1 LDD E0001 TR CONSTANT 1188 69 0400 1478 + EXIT 01 0000 EXIT ERASEABLE 1811 01 0000 1811 + EQUIV 01 0000 EQUIV 1223 01 0000 1223 + HED +1 +1 SUB 9 CALCULATE REG ADDRE + HED 9 + SUBR9 STD EXITZ STORE EXIT 1174 24 1416 1420 + SRT 0008 1420 30 0008 1689 + RAL 8003 1689 65 8003 1697 + SLT 0004 1697 35 0004 1558 + ALO C 8002 IS 1558 15 1911 8002 + 8002 RAL 9991 NEX REGION 8002 65 9991 1495 + NEX BDO ILL DEFINED 1495 90 1749 1850 + SLT 0001 1850 35 0001 1608 + RAL 8002 1608 65 8002 1617 + SRT 0001 1617 30 0001 1673 + LDD EXITZ 1673 69 1416 1470 + BD6 L 1470 96 1723 1775 + BD5 D I 1723 95 1326 1528 + L ALO 1957 ALL 1775 15 1957 1512 + D ALO 1958 ALL 1326 15 1958 1512 + I ALO 1959 ALL 1528 15 1959 1512 + ALL SLO 1IXXX 1512 16 0992 1747 + BMI ILL EXITZ 1747 46 1749 1416 + ILL RAL EXITZ UNDEFINED 1749 65 1416 1622 + ALO 1IXXX 8002 OR ILLEG 1622 15 0992 8002 +1 + C RAL 0960 NEX CONSTANT 1911 65 0960 1495 + HED +1 SUB 10 SET CC 8 AND PUNCH +1 + SUB10 ALO P0010 1405 15 1986 1841 + ALO 84TH 1841 15 1494 1799 + STL P0010 1799 20 1986 1739 + PCH P0001 8003 1739 71 1977 8003 +1 + 84TH 00 0800 0000 CONSTANT 1494 00 0800 0000 +1 +1 SUB 11 FIND AND RESERVE B +1 + HED 0 + SUB11 LDD DRUMT TEST 1601 69 1212 1965 + BDO SEX DRUM TAG 1965 90 1520 1620 + STL EXIT IS ADR L 1520 20 1825 1578 + BD6 DI 1578 96 1481 1883 + RAL 8003 SSW L 1883 65 8003 1891 + DI LDD F D OR I 1481 69 1334 1487 + SDA XXXX1 SUB13 FIND OPTIM 1487 22 1961 1814 + GDA SLT 0004 DYNAM ADR 1651 35 0004 1562 + ALO 8002 1562 15 8002 1672 + ALO 8002 SSW 1672 15 8002 1891 + SSW LDD OFF SET SW OFF 1891 69 1544 1797 + STD SW 1797 24 1701 1704 + ALO A1P1 GET TABLE 1704 15 1658 1963 + STL BP1 START ADDR 1963 20 1667 1670 + SLO 1DXXX 1670 16 1020 1875 + STL AO SAI SAVE AO 1875 20 1829 1482 + SAI STL AI 8001 1482 20 1537 8001 + 8001 RAU 9975 TA IS LOCAT 8001 60 9975 1879 + TA NZU YES SW AVAILABLE 1879 44 1933 1701 + SW RAU AI SWOF 1701 60 1537 1941 + SWOF SLO AMAX IS AI MAX 1941 16 1594 1849 + NZE MAX 1849 45 1602 1754 + ALO AMP1 SAI STEP AI 1602 15 1656 1482 + SWON SLO AO IS AI EQUA 1751 16 1829 1384 + NZE FULL TO AO 1384 45 1238 1789 + ALO BP1 SAI STEP AI 1238 15 1667 1482 + MAX LDD ON SET SW ON 1754 69 1708 1612 + STD SW 1612 24 1701 1804 + RAL A1 SAI SET AI TO 1804 65 1758 1482 +1 + FULL HLT 0222 DRUM PAKED 1789 01 0222 1543 + LDD H9XXX SET DRUM 1543 69 1216 1720 + STD DRUMT TAG TO 9 1720 24 1212 1466 + RAL EXIT SEX STEP EXIT 1466 65 1825 1620 + SEX ALO 1IXXX 8002 1620 15 0992 8002 +1 + YES SCT 0000 RESERVE 1933 36 0000 1706 + SLT 0001 LOCATION 1706 35 0001 1864 + SRT 0001 FOUND 1864 30 0001 1722 + STL XXXX2 SAVE P 1722 20 1962 1516 + SUP 8003 1516 11 8003 1773 + SLT 0004 1773 35 0004 1434 + AUP 8001 1434 10 8001 1392 + ALO SRP 8002 1392 15 1545 8002 + 8002 SRT 0009 SCA NULIFY SCT 8002 30 0009 1772 + SCA RAU 8003 1772 60 8003 1929 + ALO AI 1929 15 1537 1442 + LDD ST 1442 69 1595 1148 + SDA ERAS 8001 1148 22 1801 8001 + 8001 STU 9972 CA 8001 21 9972 1925 + CA SUP 8001 CALCULATE 1925 11 8001 1484 + SLO A1 LOCATION 1484 16 1758 1914 + SRT 0004 FOUND 1914 30 0004 1975 + DIV 4I 1975 14 1628 1839 + MPY 500 1839 19 1492 1964 + ALO 8003 1964 15 8003 1822 + SUP 8001 1822 11 8001 1330 + AUP XXXX2 1330 10 1962 1717 + MPY 50 1717 19 1770 1542 + ALO 8003 1542 15 8003 1899 + SUP 8001 EXIT 1899 11 8001 1825 + F 00 0000 GDA CONSTANTS 1334 00 0000 1651 + OFF RAL AI SWOF 1544 65 1537 1941 + A1P1 RAU A0002 TA 1658 60 0601 1879 + AMAX RAU A0200 TA 1594 60 0799 1879 + AMP1 RAU A0201 TA 1656 60 0800 1879 + ON RAL AI SWON 1708 65 1537 1751 + A1 RAU A0001 TA 1758 60 0600 1879 + SRP SRT 0000 SCA 1545 30 0000 1772 + ST STU 9999 CA 1595 21 9999 1925 + 4I 00 0000 0004 1628 00 0000 0004 + 500 00 0000 0500 1492 00 0000 0500 + 50 00 0000 0050 1770 00 0000 0050 + FON RAL 8001 STEPX 1851 65 8001 1859 + AO 01 0000 AO ERASABLE 1829 01 0000 1829 + AI 01 0000 AI 1537 01 0000 1537 + BP1 01 0000 BP1 1667 01 0000 1667 + EXIT 01 0000 EXIT 1825 01 0000 1825 + HED +1 +1 SUB 12 SET BLANK L 8 +1 + SUB12 ALO P0010 0991 15 1986 1592 + ALO 87TH 1592 15 1645 1949 + STL P0010 8003 1949 20 1986 8003 +1 + 87TH 00 0000 8000 CONSTANT 1645 00 0000 8000 +1 +1 SUB 13 CAL OPTIMUM DYNAMI +1 + HED Y + SUB13 STD EXITZ STORE EXIT 1814 24 1416 1820 + BD5 I D OR I 1820 95 1823 1376 + RAL OPTIM D 1823 65 1452 1808 + SLT 0001 1808 35 0001 1616 + SLO 8002 1616 16 8002 1426 + SLT 0001 1426 35 0001 1534 + ALO 8001 1534 15 8001 1642 + SRT 0003 SEO 1642 30 0003 1901 + I RAL OPTIM I 1376 65 1452 1858 + BD2 SHOP SHIFT TEST 1858 92 1662 1666 + BD3 XAS XAS TEST 1666 93 1870 1872 + SLT 0002 SEO 1872 35 0002 1901 + SEO STL XXXX1 SAVE EV OD 1901 20 1961 1716 + RAL OPREG IS BASE 1716 65 1920 1476 + DIV 2IXXX EVEN OR OD 1476 14 1771 1531 + RAU 8003 1531 60 8003 1889 + ALO XXXX1 1889 15 1961 1766 + NZU RB 1766 44 1970 1922 + SLT 0002 1970 35 0002 1327 + RAL 8002 RB 1327 65 8002 1922 + RB SRT 0008 GET BASE 1922 30 0008 1692 + ALO OPREG PLUS DELTA 1692 15 1920 1526 + DIV 50 MOD 50 1526 14 1380 1742 + RAL 8003 EXITZ 1742 65 8003 1416 +1 + SHOP RAL P0007 TLU UNITS 1662 65 1983 1587 + SRT 0004 DIGIT OF 1587 30 0004 1847 + SLT 0009 D ADDRESS 1847 35 0009 1767 + SLO 8002 1767 16 8002 1576 + TLU U0001 1576 84 1250 1756 + ALO GU 8002 1756 15 1909 8002 + 8002 RAL 9969 TOP 8002 65 9969 1873 + TOP SLT 0002 1873 35 0002 1430 + LDD OPTIM IS OP SRD 1430 69 1452 1806 + BD3 SEO 1806 93 1660 1901 + SLT 0004 SEO SRD 1660 35 0004 1901 +1 + XAS RAL P0007 TLU 1870 65 1983 1637 + SRT 0004 D ADDRESS 1637 30 0004 1897 + SLT 0006 1897 35 0006 1712 + SLO 8002 1712 16 8002 1972 + TLU I0001 1972 84 1300 1856 + ALO GXD 8002 1856 15 1710 8002 + 8002 RAL 9968 NXT 8002 65 9968 1923 + NXT SLT 0004 SEO 1923 35 0004 1901 +1 + U0001 00 2322 2524 SHIFT 1250 00 2322 2524 + U0002 10 0706 0706 OPTIMIZING 1251 10 0706 0706 + U0003 20 0706 0908 TABLE 1252 20 0706 0908 + U0004 30 0908 1110 1253 30 0908 1110 + U0005 40 1110 1312 1254 40 1110 1312 + U0006 50 1312 1514 1255 50 1312 1514 + U0007 60 1514 1716 1256 60 1514 1716 + U0008 70 1716 1918 1257 70 1716 1918 + U0009 80 1918 2120 1258 80 1918 2120 + U0010 90 2120 2322 1259 90 2120 2322 +1 + I0001 19 9906 0600 X ACCUM 1300 19 9906 0600 + I0002 79 9907 0700 ADD SUB 1301 79 9907 0700 + I0003 80 0008 0800 TABLE 1302 80 0008 0800 + I0004 80 0106 0600 1303 80 0106 0600 + I0005 80 0209 0800 1304 80 0209 0800 + I0006 80 0308 0900 1305 80 0308 0900 + I0007 90 5908 0800 1306 90 5908 0800 + I0008 99 9909 0900 1307 99 9909 0900 +1 + GU RAL 0000 TOP CONSTANTS 1909 65 0000 1873 + GXD RAL 0000 NXT 1710 65 0000 1923 + 50 00 0000 0050 1380 00 0000 0050 + HED +1 +1 SUB 14 PUNCH AVAIL TABLE +1 + HED P + SUB14 STD EXITX STORE EXIT 1403 24 1196 1652 + LDD 85TH SET PUNCH 1652 69 1906 1760 + STD P0010 8 1760 24 1986 1939 + LDD A1 INIT A1 1939 69 1792 1695 + STD XXXX1 1695 24 1961 1816 + RAL RS1 LOOP INIT RS 1816 65 1973 1377 + LOOP AUP C1 8001 1377 10 1480 8001 + 8001 STL 9999 NEXT SET LOCAT 8001 20 9999 1702 + NEXT SUP TW1 1702 11 1908 1866 + NZU SRS 1866 44 1274 1324 + AUP C2 1274 10 1427 1581 + ALO C3 8003 1581 15 1584 8003 + SRS STL XXXX2 SAVE RS 1324 20 1962 1916 + RAU C4 1916 60 1374 1530 + ALO XXXX1 8002 1530 15 1961 8002 + 8002 LDD 9998 8003 STORE 8002 69 9998 8003 + 8003 STD 9997 TP AV TABLE 8003 24 9997 1752 + TP SUP TW2 1752 11 1810 1966 + NZU PUN 1966 44 1424 1474 + AUP C5 1424 10 1477 1631 + ALO C6 8002 1631 15 1634 8002 + PUN PCH P0001 1474 71 1977 1527 + SLO AIM IS AI MAX 1527 16 1580 1335 + NZE EXITX 1335 45 1288 1196 + ALO AMP1 STEP AI 1288 15 1842 1947 + STL XXXX1 1947 20 1961 1817 + RAL XXXX2 1817 65 1962 1867 + SLO C7 LOOP 1867 16 1524 1377 +1 + C1 STL P0001 NEXT CONSTANTS 1480 20 1977 1702 + C2 STL P0009 NEXT 1427 20 1985 1702 + C3 00 0500 0500 1584 00 0500 0500 + C4 STD P0002 TP 1374 24 1978 1752 + C5 STD P0010 TP 1477 24 1986 1752 + C6 00 0001 0000 1634 00 0001 0000 + C7 00 1499 1499 1524 00 1499 1499 + TW1 STL P0007 NEXT 1908 20 1983 1702 + TW2 STD P0008 TP 1810 24 1984 1752 + 85TH 00 0080 0000 1906 00 0080 0000 + A1 LDD A0001 8003 1792 69 0600 8003 + RS1 00 0000 0450 1973 00 0000 0450 + AIM LDD A0200 8003 1580 69 0799 8003 + AMP1 LDD A0201 8003 1842 69 0800 8003 + HED +1 +1 SUB 15 HEADING ROUTINE +1 + HED H + SUB15 STD EXITY SAVE EXIT 1663 24 1456 1860 + LDD 8003 IS C1 1860 69 8003 1917 + SLT 0008 BLANK 1917 35 0008 1385 + NZU DH 1385 44 1989 1240 + RAU 8001 HEAD 1240 60 8001 1997 + AUP 0000H EXITY 1997 10 1329 1456 + DH RAU 8001 EXITY DONT HEAD 1989 60 8001 1456 + HED +1 +1 SUB 16 INITIALIZATION +1 + SUB16 STD EXITY STORE EXIT 1353 24 1456 1910 + RAL I1 1910 65 1967 1574 + STU P0009 ZERO CARD 1574 21 1985 1338 + STD 0000H ZERO HEAD 1338 24 1329 1532 + LDD SUBR1 ZERO SYM T 1532 69 1435 1600 + RAL I2 MAKE DRUM 1435 65 1388 1593 + AUP I3 AVAILABLE 1593 10 1446 1802 + LDD SUBR1 1802 69 1762 1600 + LDD H8XXX SET DRUM 1762 69 1406 1812 + STD DRUMT TAG TO 8 1812 24 1212 1268 + LDD I4 SET SWSYM 1268 69 1624 1577 + STD SWSYM OFF 1577 24 1437 1290 + RAL I5 UNDEFINE 1290 65 1643 1198 + AUP H8XXX REGIONS 1198 10 1406 1862 + LDD EXITY SUBR1 1862 69 1456 1600 +1 + I1 00 S0001 E0200 CONSTANTS 1967 00 0000 0599 + I2 00 A0001 A0200 1388 00 0600 0799 + I3 11 1111 1111 1446 11 1111 1111 + I4 01 0111 SYMOF 1624 01 0111 1691 + I5 00 1021 1049 1643 00 1021 1049 + PACOF BD6 FINDI FINDL 1852 96 1912 1318 +1 +1 SUB 17 CALC 800X EQUIVALE +1 + HED X + SB17D LDD DEQ DI D EQUIV 1902 69 1368 1674 + SB17I LDD IEQ DI I EQUIV 1854 69 1418 1674 + DI STD XXXX1 SAVE TAG 1674 24 1961 1468 + STU EXITY STORE EXIT 1468 21 1456 1518 + STL XXXX2 STORE 800X 1518 20 1962 1618 + LDD XXXX1 SUB13 GET OPTIM 1618 69 1961 1814 + SDA STL XXXX1 DYNAM ADDR 1904 20 1961 1668 + DIV 2IXXX IS DY ADDR 1668 14 1771 1681 + NZU OD EV EVEN OR OD 1681 44 1485 1636 + OD RAL 8002 EO 1485 65 1438 1693 + EV RAL 8003 EO 1636 65 1340 1693 + EO SLO XXXX2 1693 16 1962 1718 + NZE ADD1 1718 45 1724 1774 + RAL XXXX1 EXITY 1724 65 1961 1456 + ADD1 RAL XXXX1 1774 65 1961 1768 + ALO 1IXXX EXITY 1768 15 0992 1456 +1 + DEQ 00 0008 SDA CONSTANTS 1368 00 0008 1904 + IEQ 00 0009 SDA 1418 00 0009 1904 + 8002 00 0000 8002 1438 00 0000 8002 + 8003 00 0000 8003 1340 00 0000 8003 + HED +1 +1 SUB 18 INDEX ADDRESS +1 + HED W + INDEX STD EXITY STORE EXIT 1818 24 1456 1868 + STL XXXX1 STORE ADDR 1868 20 1961 1918 + RAU 1954 1918 60 1954 1968 + SLT 0007 1968 35 0007 1535 + LDD EXITY 1535 69 1456 1824 + BD5 D D OR I 1824 95 1627 1630 + SLT 0002 D 1630 35 0002 1627 + D SRT 0009 1627 30 0009 1248 + MPY 2000I 1248 19 1014 1585 + LDD EXITY 1585 69 1456 1874 + BD6 DS DRUM 0 COR 1874 96 1677 1680 + SRT 0001 DS CORE 1680 30 0001 1677 + DS ALO XXXX1 EXITY 1677 15 1961 1456 +1 + EXITY 01 0000 EXITY ERASABELE 1456 01 0000 1456 + HED +1 +1 SUB 19 PROCESS LOCATI +1 + REG D0923 0923 PROC L + REG G0925 0925 + REG J0928 0928 + REG K0931 0931 + REG L0933 0933 +1 + HED A + PROCL STD EXITX STORE EXIT 0969 24 1196 1924 + RAU 1951 IS L BLANK 1924 60 1951 1974 + NZU NB 1974 44 1727 1678 + LDD DRUMT BLANK TEST 1678 69 1212 1626 + BDO B D0002 DRUM TAG 1626 90 1730 0924 + B RAL OPREG SETL BLANK 1730 65 1920 1676 + SETL SLT 0004 SET L 1676 35 0004 1687 + LDD P0008 TO DR 1687 69 1984 1737 + SDA P0008 EXITX 1737 22 1984 1196 + NB LDD G SUBR4 WHAT IS L 1727 69 1780 1213 + G0001 RAL 1957 K0001 ABSOLUTE 0925 65 1957 0931 + G0002 LDD K SUBR9 REGIONAL 0926 69 1830 1174 + G0003 LDD J SUBR6 SYMBOLIC 0927 69 1880 1275 + K0001 LDD L SUBR5 TEST RANGE 0931 69 1684 1750 + K0002 RAU 87TH X REG ERROR 0932 60 1635 1390 + X AUP P0010 SET BLANK 1390 10 1986 1892 + STU P0010 SETL L8 1892 21 1986 1676 + L0001 STL OPREG SETL DRUM ADDR 0933 20 1920 1676 + L0002 AUP 86TH 800X 800X 0934 10 1787 1942 + L0003 LDD ORCEQ 89X CORE ADDR 0935 69 1488 1743 + L0004 RAU 87TH X OTHER 0936 60 1635 1390 + 800X LDD ORXEQ 89X 1942 69 1745 1743 + 89X STD OPREG X 1743 24 1920 1390 + J0001 RAL EQUIV K0001 SYM DEFIND 0928 65 1223 0931 + J0002 RAL D SUB11 SYM UNDEF 0929 65 1582 1601 + J0003 RAU 87TH X S TAB FULL 0930 60 1635 1390 + D0001 STL OPREG SS S EQ FOUND 0923 20 1920 1726 + D0002 RAU 87TH X DRUM PAKED 0924 60 1635 1390 + SS AUP HSYMB STORE 1726 10 1230 1685 + ALO LSYMB SYMBOL 1685 15 1551 1776 + LDD B SUBR7 1776 69 1730 1279 +1 + G 00 0000 G0001 CONSTANTS 1780 00 0000 0925 + K 00 0090 K0001 1830 00 0090 0931 + J 00 0000 J0001 1880 00 0000 0928 + L 00 0000 L0001 1684 00 0000 0933 + D 00 0090 D0001 1582 00 0090 0923 + 86TH 00 0008 0000 1787 00 0008 0000 + 87TH 00 0000 8000 1635 00 0000 8000 + EXITX 01 0000 EXITX ERASEABLE 1196 01 0000 1196 + HED +1 +1 SUB 20 PROCESS DATA ADDRE +1 + REG D0937 0937 PROC D + REG F0939 0939 + REG G0941 0941 + REG J0944 0944 + REG K0946 0946 + REG L0949 0949 +1 + HED B + PROCD STD EXITX STORE EXIT 0972 24 1196 1826 + RAU 1952 IS D BLANK 1826 60 1952 1876 + NZU NB 1876 44 1930 1731 + RAL D SUB11 FIND 1731 65 1734 1601 + D0001 STL ORBAL L0004 OPTIMUM 0937 20 1793 0952 + D0002 RAU 88TH X DRUM PAKED 0938 60 1843 1298 + BT LDD OPTIM IS OP 1926 69 1452 1976 + BD1 EXITX A BRANCH 1976 91 1196 1781 + STL OPREG EXITX D TO OR 1781 20 1920 1196 + X AUP P0010 SET BLANK 1298 10 1986 1893 + STU P0010 EXITX 1893 21 1986 1196 + NB LDD G SUBR4 WHAT IS D 1930 69 1784 1213 + G0001 RAL 1958 J0001 ABSOLUTE 0941 65 1958 0944 + G0002 LDD J SUBR9 REGIONAL 0942 69 1795 1174 + G0003 LDD K SUBR6 SYMBOLIC 0943 69 1496 1275 + J0001 LDD L SUBR5 TEST RANGE 0944 69 1348 1750 + J0002 RAU 88TH X REG ERROR 0945 60 1843 1298 + L0001 LDD AXD INDEX DRUM ADDR 0949 69 1777 1818 + L0002 SLT 0004 800X 800X 0950 35 0004 1827 + L0003 LDD AXC INDEX CORE ADDR 0951 69 1877 1818 + L0004 SLT 0004 SD OTHER 0952 35 0004 1927 + 800X LDD P0007 SET 800X D 1827 69 1983 1686 + SDA P0007 1686 22 1983 1736 + SRT 0004 1736 30 0004 1398 + AUP XEQ SB17D GET 800X E 1398 10 1728 1902 + SCD SLT 0004 SET CORE D 1778 35 0004 1440 + LDD P0007 1440 69 1983 1786 + SDA P0007 1786 22 1983 1836 + SRT 0004 1836 30 0004 1448 + LDD CEQ SUB13 GET CORE E 1448 69 1828 1814 + SCEQ STL ORCEQ BT SAVE CORE 1878 20 1488 1926 + K0001 RAL EQUIV J0001 SYM DEFIND 0946 65 1223 0944 + K0002 RAL F SUB11 SYM UNDEF 0947 65 1928 1601 + K0003 RAU 88TH X S TAB FULL 0948 60 1843 1298 + F0001 STL EQ SS SAVE EQ 0939 20 1943 1546 + F0002 RAU 88TH X DRUM PAKED 0940 60 1843 1298 + SS AUP HSYMB STORE 1546 10 1230 1735 + ALO LSYMB SYMBOL 1735 15 1551 1831 + LDD SUBR7 1831 69 1834 1279 + RAL EQ L0004 1834 65 1943 0952 + SD LDD P0007 SET D ADDR 1927 69 1983 1886 + SDA P0007 1886 22 1983 1936 + SRT 0004 BT 1936 30 0004 1926 + D 00 0088 D0001 CONSTANTS 1734 00 0088 0937 + G 00 0000 G0001 1784 00 0000 0941 + J 00 0088 J0001 1795 00 0088 0944 + L 00 0000 L0001 1348 00 0000 0949 + F 00 0088 F0001 1928 00 0088 0939 + K 00 0000 K0001 1496 00 0000 0946 + AXD 00 0088 D0001 1777 00 0088 0937 + AXC 00 0098 SCD 1877 00 0098 1778 + XEQ STL ORXEQ BT 1728 20 1745 1926 + CEQ 00 0008 SCEQ 1828 00 0008 1878 + 88TH 00 0000 0800 1843 00 0000 0800 + EQ 01 0000 EQ ERASABLE 1943 01 0000 1943 + HED +1 +1 SUB 21 PROCESS INSTR ADDR +1 + REG D0953 0953 PROC I + REG F0955 0955 + REG G0958 0958 + REG J0960 0960 + REG K0962 0962 + REG L0965 0965 +1 + HED C + PROCI STD EXITX STORE EXIT 1453 24 1196 1881 + RAU 1953 IS I BLANK 1881 60 1953 1931 + NZU NB 1931 44 1785 1837 + RAU 1952 IS D BLANK 1837 60 1952 1632 + NZU DNB 1632 44 1835 1887 + LDD DRUMT D I BLANK 1887 69 1212 1682 + BDO G0002 TEST DRUM 1682 90 1937 0959 + RAL ORBAL L0004 TAG 1937 65 1793 0968 + DNB RAL D SUB11 FIND BEST 1835 65 1538 1601 + D0001 STL ORBAL L0004 FOUND 0953 20 1793 0968 + D0002 RAL P0010 X DRUM PAKED 0954 65 1986 1993 + X ALO 89TH 1993 15 1596 1732 + STL P0010 EXITX 1732 20 1986 1196 + NB LDD F SUBR4 WHAT IS I 1785 69 1588 1213 + F0001 RAL 1959 J0001 ABSOLUTE 0955 65 1959 0960 + F0002 LDD J SUBR9 REGIONAL 0956 69 1782 1174 + F0003 LDD K SUBR6 SYMBOLIC 0957 69 1832 1275 + J0001 LDD L SUBR5 TEST RANGE 0960 69 1882 1750 + J0002 RAL P0010 X REG ERROR 0961 65 1986 1993 + L0001 LDD AXD INDEX DRUM ADDR 0965 69 1932 1818 + L0002 LDD P0007 800X 800X 0966 69 1983 1987 + L0003 LDD AXC INDEX CORE ADDR 0967 69 1884 1818 + L0004 LDD P0007 OTHER 0968 69 1983 1638 + SIA P0007 MOR 1638 23 1983 1688 + 800X SIA P0007 1987 23 1983 1738 + AUP XEQ SB17I GET 800X E 1738 10 1644 1854 + 90XX LDD P0007 SET CORE 1934 69 1983 1788 + SIA P0007 ADDRESS 1788 23 1983 1838 + LDD CEQ SUB13 GET CORE E 1838 69 1694 1814 + K0001 RAL EQUIV J0001 SYM DEFIND 0962 65 1223 0960 + K0002 RAL G SUB11 SYM UNDEF 0963 65 1885 1601 + K0003 RAL P0010 X S TAB FULL 0964 65 1986 1993 + G0001 LDD P0007 SI FOUND BEST 0958 69 1983 1888 + G0002 RAL P0010 X DRUM PAKED 0959 65 1986 1993 + SI SIA P0007 1888 23 1983 1938 + AUP HSYMB STORE 1938 10 1230 1935 + ALO LSYMB SYMBOL 1935 15 1551 1988 + LDD MOR SUBR7 1988 69 1688 1279 + MOR LDD ORBAL SET OR 1688 69 1793 1646 + STD OPREG EXITX TO ORB 1646 24 1920 1196 + SCEQ STL ORCEQ MOR SAVE CORE 1490 20 1488 1688 +1 + D 00 0089 D0001 CONSTANTS 1538 00 0089 0953 + F 00 0000 F0001 1588 00 0000 0955 + J 00 0089 J0001 1782 00 0089 0960 + K 00 0000 K0001 1832 00 0000 0962 + L 00 0000 L0001 1882 00 0000 0965 + G 00 0089 G0001 1885 00 0089 0958 + 89TH 00 0000 0080 1596 00 0000 0080 + AXD 00 0089 L0004 1932 00 0089 0968 + AXC 00 0099 90XX 1884 00 0099 1934 + XEQ STL ORXEQ MOR 1644 20 1745 1688 + CEQ 00 0009 SCEQ 1694 00 0009 1490 + HED +1 + 1IXXX 00 0000 0001 CONSTANTS 0992 00 0000 0001 + 1DXXX 00 0001 0000 1020 00 0001 0000 + 2IXXX 00 0000 0002 1771 00 0000 0002 + 2DXXX 00 0002 0000 1764 00 0002 0000 + H8XXX 80 0000 0000 1406 80 0000 0000 + H9XXX 90 0000 0000 1216 90 0000 0000 + 90XXX 00 0000 0090 1178 00 0000 0090 + 29XXX 00 0000 0029 1189 00 0000 0029 + 2000I 00 0000 2000 CONSTANT 1014 00 0000 2000 + TORG 00 0000 T0001 0990 00 0000 1990 +1 + PAT +0000 0000000000 0450 0500 0000000000 0950 1000 0000000000 1450 1500 0000000000 1950 +0001 0000000000 0451 0501 0000000000 0951 1001 0000000000 1451 1501 0000000000 1951 +0002 0000000000 0452 0502 0000000000 0952 1002 0000000000 1452 1502 0000000000 1952 +0003 0000000000 0453 0503 0000000000 0953 1003 0000000000 1453 1503 0000000000 1953 +0004 0000000000 0454 0504 0000000000 0954 1004 0000000000 1454 1504 0000000000 1954 +0005 0000000000 0455 0505 0000000000 0955 1005 0000000000 1455 1505 0000000000 1955 +0006 0000000000 0456 0506 0000000000 0956 1006 0000000000 1456 1506 0000000000 1956 +0007 0000000000 0457 0507 0000000000 0957 1007 0000000000 1457 1507 0000000000 1957 +0008 0000000000 0458 0508 0000000000 0958 1008 0000000000 1458 1508 0000000000 1958 +0009 0000000000 0459 0509 0000000000 0959 1009 0000000000 1459 1509 0000000000 1959 +0010 0000000000 0460 0510 0000000000 0960 1010 0000000000 1460 1510 0000000000 1960 +0011 0000000000 0461 0511 0000000000 0961 1011 0000000000 1461 1511 0000000000 1961 +0012 0000000000 0462 0512 0000000000 0962 1012 0000000000 1462 1512 0000000000 1962 +0013 0000000000 0463 0513 0000000000 0963 1013 0000000000 1463 1513 0000000000 1963 +0014 0000000000 0464 0514 0000000000 0964 1014 0000000000 1464 1514 0000000000 1964 +0015 0000000000 0465 0515 0000000000 0965 1015 0000000000 1465 1515 0000000000 1965 +0016 0000000000 0466 0516 0000000000 0966 1016 0000000000 1466 1516 0000000000 1966 +0017 0000000000 0467 0517 0000000000 0967 1017 0000000000 1467 1517 0000000000 1967 +0018 0000000000 0468 0518 0000000000 0968 1018 0000000000 1468 1518 0000000000 1968 +0019 0000000000 0469 0519 0000000000 0969 1019 0000000000 1469 1519 0000000000 1969 +0020 0000000000 0470 0520 0000000000 0970 1020 0000000000 1470 1520 0000000000 1970 +0021 0000000000 0471 0521 0000000000 0971 1021 0000000000 1471 1521 0000000000 1971 +0022 0000000000 0472 0522 0000000000 0972 1022 0000000000 1472 1522 0000000000 1972 +0023 0000000000 0473 0523 0000000000 0973 1023 0000000000 1473 1523 0000000000 1973 +0024 0000000000 0474 0524 0000000000 0974 1024 0000000000 1474 1524 0000000000 1974 +0025 0000000000 0475 0525 0000000000 0975 1025 0000000000 1475 1525 0000000000 1975 +0026 0000000000 0476 0526 0000000000 0976 1026 0000000000 1476 1526 0000000000 1976 +0027 0000000000 0477 0527 0000000000 0977 1027 0000000000 1477 1527 0000000000 1977 +0028 0000000000 0478 0528 0000000000 0978 1028 0000000000 1478 1528 0000000000 1978 +0029 0000000000 0479 0529 0000000000 0979 1029 0000000000 1479 1529 0000000000 1979 +0030 0000000000 0480 0530 0000000000 0980 1030 0000000000 1480 1530 0000000000 1980 +0031 0000000000 0481 0531 0000000000 0981 1031 0000000000 1481 1531 0000000000 1981 +0032 0000000000 0482 0532 0000000000 0982 1032 0000000000 1482 1532 0000000000 1982 +0033 0000000000 0483 0533 0000000000 0983 1033 0000000000 1483 1533 0000000000 1983 +0034 0000000000 0484 0534 0000000000 0984 1034 0000000000 1484 1534 0000000000 1984 +0035 0000000000 0485 0535 0000000000 0985 1035 0000000000 1485 1535 0000000000 1985 +0036 0000000000 0486 0536 0000000000 0986 1036 0000000000 1486 1536 0000000000 1986 +0037 0000000000 0487 0537 0000000000 0987 1037 0000000000 1487 1537 0000000000 1987 +0038 0000000000 0488 0538 0000000000 0988 1038 0000000000 1488 1538 0000000000 1988 +0039 0000000000 0489 0539 0000000000 0989 1039 0000000000 1489 1539 0000000000 1989 +0040 0000000000 0490 0540 0000000000 0990 1040 0000000000 1490 1540 1111111110 1990 +0041 0000000000 0491 0541 0000000000 0991 1041 0000000000 1491 1541 0000000000 1991 +0042 0000000000 0492 0542 0000000000 0992 1042 0000000000 1492 1542 0000000000 1992 +0043 0000000000 0493 0543 0000000000 0993 1043 0000000000 1493 1543 0000000000 1993 +0044 0000000000 0494 0544 0000000000 0994 1044 0000000000 1494 1544 0000111111 1994 +0045 0000000000 0495 0545 0000000000 0995 1045 0000000000 1495 1545 0000001111 1995 +0046 0000000000 0496 0546 0000000000 0996 1046 0000000000 1496 1546 0001111111 1996 +0047 0000000000 0497 0547 0000000000 0997 1047 0000000000 1497 1547 0000000000 1997 +0048 0000000000 0498 0548 0000000000 0998 1048 0000000001 1498 1548 1111111110 1998 +0049 0000000000 0499 0549 0000000000 0999 1049 0000000000 1499 1549 0000000000 1999 diff --git a/I650/sw/soap_src.txt b/I650/sw/soap_src.txt new file mode 100644 index 00000000..9ff3affd --- /dev/null +++ b/I650/sw/soap_src.txt @@ -0,0 +1,1399 @@ + 1 soap 2 + 1 + 1 symbolic optimal assembly prog + 1 + 1 for the + 1 + 1 ibm 650 + 1 + 1 data processing system + 1 + regs0000 0399 symbol tab + rege0400 0599 equiv tabl + rega0600 0799 avail tabl + regn0800 0899 num op tab + blr 1000 1000 entry + blr 1001 1012 pseudo ent + blr 1021 1049 reg table + regc1050 1164 sym op tab + bla 1098 1099 + bla 1148 1149 + blr 1900 1900 manual pat + synreadc 1950 + blr 1951 1962 read area + regt1990 1992 type + regp1977 1986 punch area + blr 1998 1999 + equxxxx1 1961 + equxxxx2 1962 + blr 1563 1570 type2 + bla 1565 1565 + bla 1569 1569 + regb0900 0901 sub 2 + regh0902 0904 type 2 + regm0905 0907 + regq0908 0909 + regr1200 1207 sub 5 + regu1250 1259 sub 13 + regv0910 0912 equ syn + regx0913 0914 type 0 + regy0915 0916 equ syn + regz0917 0919 + regw0920 0922 + blr 0923 0968 multiple r + regi1300 1307 sub 13 + 1 + 1 control program + 1 + 1000lddreadc sub16 entry + 1 + readcrcd 1999 1998 read card + 1998ldd 1951 transfer + stdp0001 alphabetic + ldd 1952 input + stdp0002 to + ldd 1953 output + stdp0003 + ldd 1954 + stdp0004 + ldd 1955 + stdp0005 + ldd 1956 + stdp0006 + ralp0009 step + alo1ixxx card + stlp0009 number + rau 1960 store + srt 0002 control + stup0008 info + auptorg + stlp0010 8003 transfer + 8003nop 0000 9999 to type + 1 + punchpchp0001 readc punch read + 1 + setccraureadc sub10 sudo exit + 1 + 1900lddreadc sub14 manual pat + t0001lddx subr3 type 0 + 1 + x0001ldd procl 650 + ldd procd command or + lddpunch proci constants + 1 + x0002nop 0000 8003 pseudo op + 1 + t0002raureadc sub10 type 1 com + 1 + x 00 0000 x0001 + 1 + 1 relocate routine + 1 + hedt + t0003lddq subr3 process op + q0002nop 0000 illop illegal op + q0001ral 1951 is l fixed + slt 0002 + nzu rel + rau 1957 fixed l + sup2000i drum core + bmi fc + aup 8001 res fixed drum + fc ral 1957 setl fixed core + sr ralxxxx1 setl set l + setl slt 0004 + lddp0008 + sdap0008 prod + rel rau 1957 drum core + sup2000i + bmi rc + aupddiff relocate + bmi bl drum addr + aup2000i res + res stuxxxx1 + lddsr sub2r reserve l + rc ral 1957 relocate + alocdiff core + slo9060 + bmi bl + alo 8001 setl + bl rauprod sub12 blank l + 1 + regj0944 0944 d type 2 + regg0941 0941 + 1 + prod lddproi set d exit + stdexitx + rau 1952 what is d + lddh subr4 + h0001ral 1958 relocate + slo2000i d or c + bmi 1564 1563 + h0002srt 0008 c d or f + aup1500 8003 + 1563ralcdiff cdd c + 1564ralddiff cdd d + 1566ral 1958 j0001 f + cdd alo 1958 j0001 + h0003nop 0000 g0003 symbolic + 1 + regj0960 0960 i + regf0955 0955 + 1 + proi lddpunch set i exit + stdexitx + rau 1953 what is i + lddm subr4 + m0001ral 1959 relocate + slo2000i d or c + bmi 1568 1567 + m0002srt 0008 c d or f + aup1504 8003 + 1567ralcdiff cdi c + 1568ralddiff cdi d + 1570ral 1959 j0001 f + cdi alo 1959 j0001 + m0003nop 0000 f0003 symbolic + 1 + q 00 0000 q0001 constants + 9060 00 0000 9060 + h 00 0000 h0001 + 1500 00 0000 1500 + m 00 0000 m0001 + 1504 00 0000 1504 + xxxx1 01 0000 xxxx1 eraseable + hed + 1 + 1 bop routine + 1 + 1001ldd sub16 initialize + raureadc sub10 punch + 1 + 1 blr routine + 1 + 1002ral 1959 blr reserve + blr slo 1958 fwa to + aup 8001 lwa + lddsetcc sub2r + 1 + 1 rbr routine + 1 + 1012rauddiff + alo 1959 blr + 1 + 1 bla routine + 1 + 1003lddh8xxx set drum + stddrumt tag to 8 + ral 1959 unreserve + slo 1958 fwa + aup 8001 to + lddsetcc sub2u lwa + 1 + 1 reg routine + 1 + hedr + 1004ral 1952 is + srt 0008 region + slo90xxx character + bmi 1002 alphabetic + alo29xxx + bmi 1002 + slt 0004 store + alost region + aup 1958 origin + auph9xxx 8002 + 8002stu 9999 1002 + 1 + st stu 1021 1002 constants + hed + 1 + 1 equ req and syn routine + 1 + hedz + 1005lddh8xxx both equ + 1006lddh9xxx both syn + both stdtag + rau 1953 what is i + lddz subr4 + z0001ral 1959 y0001 absolute + z0002lddy subr9 regional + y0001stle td + y0002ralp0010 bp reg error + z0003lddw subr6 symbolic + w0001ralequiv y0001 s defined + w0002ralp0010 bp s undefind + w0003ralp0010 bp s tab full + 1 + td rau 1952 head d + ldd sub15 and equate + lddv subr6 to e + v0003ralp0010 bp s tab full + v0001aloe sd + v0002aloe sd + sd lddtt subr7 + 1 + tt lddtag test tag + bdosetcc + raue reserve e + lddsetcc sub2r + 1 + 1011lddh8xxx req + stdtag routine + ral 1959 is i + slo2000i drum o cor + bmid + alocdiff cd + d aloddiff cd + cd alo2000i y0001 + 1 + z 00 0000 z0001 constants + y 00 0089 y0001 + w 00 0000 w0001 + v 00 0000 v0001 + 88 00 8800 0000 + 1 + bp alo88 by pass + stlp0010 punch + 1 + tag 01 0000 tag eraseable + e 01 0000 e + hed + 1 + 1 alf routine + 1 + 1007ldd procl proces loc + ldd 1952 + stdp0007 + ral 1953 replace + nzepunch blank i + lddsoap2 by + stdp0003 punch soap2 + soap2alfsoap2 soap2 constant + 1 + 1 pat routine + 1 + 1008rau sub10 + lddreadc sub14 + 1 + 1 hed routine + 1 + 1009ral 1952 store + srt 0008 heading + stl0000h setcc character + 1 + 1 rel routine + 1 + hedm + 1010ral 1952 set + nze sdd drum + ral 1958 sdd and + sdd stlddiff core + ral 1953 deltas + nze scd + ral 1959 scd + scd stlcdiff setcc + 1 + ddiff 01 0000 ddiff eraseable + cdiff 01 0000 cdiff + hed + 1 + 1 load availablity table + 1 + hedl + 1999ral 1951 calc + srt 0004 loc + slt 0004 w2 + alo 8002 + alo 8002 + aloc1 + aupc2 8003 + 8003ldd 9995 8002 load + 8002std 9994 tup table + tup suptw + nzu readc + auptwp2 + alo1dxxx 8003 + 1 + c1 stda0001 tup constants + c2 ldd 1952 8002 + tw ldd 1958 8002 + twp2 ldd 1960 8002 + hed + 1 optimizing table + 1 + n0001 00 0404 0998 nop + n0002 00 0404 0998 hlt + n0003 33 2322 0999 ufa + n0004 00 0505 0998 rtc + n0005 00 0505 0998 rtn + n0006 00 0505 0998 rta + n0007 00 0505 0998 wtn + n0008 00 0505 0998 wta + n0009 33 1212 0999 lib + n0010 33 0202 0999 ldi + n0011 33 0504 0999 aup + n0012 33 0504 0999 sup + n0013 99 9999 9999 not used + n0014 99 9999 9999 not used + n0015 33 1110 0999 div + n0016 33 0504 0999 alo + n0017 33 0504 0999 slo + n0018 33 0504 0999 aml + n0019 33 0504 0999 sml + n0020 33 2120 0999 mpy + n0021 54 0303 0999 stl + n0022 45 0303 0999 stu + n0023 34 0303 0999 sda + n0024 34 0303 0999 sia + n0025 33 0303 0999 std + n0026 44 0505 0998 nts + n0027 00 0505 0998 bin + n0028 00 0505 0998 set + n0029 33 1212 0999 sib + n0030 33 0202 0999 sti + n0031 00 0000 0988 srt + n0032 00 0000 0888 srd + n0033 33 2726 0999 fad + n0034 33 2726 0999 fsb + n0035 33 0000 0999 fdv + n0036 00 0000 0988 slt + n0037 00 0000 0988 sct + n0038 33 2726 0999 fam + n0039 33 2726 0999 fsm + n0040 33 0000 0999 fmp + n0041 33 0404 0998 nza + n0042 33 0404 0998 bmz + n0043 33 0404 0998 nzb + n0044 33 0404 0998 bmb + n0045 34 0405 0998 nzu + n0046 43 0504 0998 nze + n0047 33 0404 0998 bmi + n0048 33 0505 0998 bov + n0049 33 0404 0998 nzc + n0050 33 0404 0998 bmc + n0051 00 0000 0898 axa + n0052 00 0000 0898 sxa + n0053 00 0000 0898 axb + n0054 00 0000 0898 sxb + n0055 44 0505 0998 nef + n0056 00 0505 0998 rwd + n0057 00 0505 0998 wtm + n0058 00 0505 0998 bst + n0059 00 0000 0898 axc + n0060 00 0000 0898 sxc + n0061 33 0504 0999 rau + n0062 33 0504 0999 rsu + n0063 99 9999 9999 not used + n0064 99 9999 9999 not used + n0065 33 1110 0999 dvr + n0066 33 0504 0999 ral + n0067 33 0504 0999 rsl + n0068 33 0504 0999 ram + n0069 33 0504 0999 rsm + n0070 33 0303 0999 ldd + n0071 00 0000 0999 rd1 + n0072 00 0000 0999 wr1 + n0073 00 0000 0999 rc1 + n0074 00 0000 0999 rd2 + n0075 00 0000 0999 wr2 + n0076 00 0000 0999 rc2 + n0077 00 0000 0999 rd3 + n0078 00 0000 0999 wr3 + n0079 00 0000 0999 rc3 + n0080 00 0505 0999 rpy + n0081 00 0000 0898 raa + n0082 00 0000 0898 rsa + n0083 00 0000 0898 rab + n0084 00 0000 0898 rsb + n0085 33 0506 0999 tlu + n0086 00 0606 0998 sds + n0087 00 0606 0998 rds + n0088 00 0606 0998 wds + n0089 00 0000 0898 rac + n0090 00 0000 0898 rsc + n0091 44 0505 0998 bdo + n0092 33 0505 0998 bd1 + n0093 33 0505 0998 bd2 + n0094 33 0505 0998 bd3 + n0095 33 0505 0998 bd4 + n0096 33 0505 0998 bd5 + n0097 33 0505 0998 bd6 + n0098 33 0505 0998 bd7 + n0099 33 0505 0998 bd8 + n0100 44 0505 0998 bd9 + 1 + 1 symbolic op table + 1 + c0001 61 7366 1007 alf + c0002 61 7376 0015 alo + c0003 61 7473 0017 aml + c0004 61 8477 0010 aup + c0005 61 8761 0050 axa + c0006 61 8762 0052 axb + c0007 61 8763 0058 axc + c0008 62 6476 0090 bdo + c0009 62 6491 0091 bd1 + c0010 62 6492 0092 bd2 + c0011 62 6493 0093 bd3 + c0012 62 6494 0094 bd4 + c0013 62 6495 0095 bd5 + c0014 62 6496 0096 bd6 + c0015 62 6497 0097 bd7 + c0016 62 6498 0098 bd8 + c0017 62 6499 0099 bd9 + c0018 62 6975 0026 bin + c0019 62 7361 1003 bla + c0020 62 7379 1002 blr + c0021 62 7461 0041 bma + c0022 62 7462 0043 bmb + c0023 62 7463 0049 bmc + c0024 62 7469 0046 bmi + c0025 62 7677 1001 bop + c0026 62 7685 0047 bov + c0027 62 8283 0057 bst + c0028 64 6985 0014 div + c0029 64 8579 0064 dvr + c0030 65 7884 1005 equ + c0031 66 6164 0032 fad + c0032 66 6174 0037 fam + c0033 66 6485 0034 fdv + c0034 66 7477 0039 fmp + c0035 66 8262 0033 fsb + c0036 66 8274 0038 fsm + c0037 68 6564 1009 hed + c0038 68 7383 0001 hlt + c0039 73 6464 0069 ldd + c0040 73 6469 0009 ldi + c0041 73 6962 0008 lib + c0042 74 7788 0019 mpy + c0043 75 6566 0054 nef + c0044 75 7677 0000 nop + c0045 75 8382 0025 nts + c0046 75 8961 0040 nza + c0047 75 8962 0042 nzb + c0048 75 8963 0048 nzc + c0051 75 8965 0045 nze + c0052 75 8984 0044 nzu + c0053 77 6183 1008 pat + c0054 77 6368 0071 pch + c0055 79 6161 0080 raa + c0056 79 6162 0082 rab + c0057 79 6163 0088 rac + c0058 79 6173 0065 ral + c0059 79 6174 0067 ram + c0060 79 6184 0060 rau + c0061 79 6279 1012 rbr + c0062 79 6364 0070 rcd + c0063 79 6391 0072 rc1 + c0064 79 6392 0075 rc2 + c0065 79 6393 0078 rc3 + c0066 79 6482 0086 rds + c0067 79 6491 0070 rd1 + c0068 79 6492 0073 rd2 + c0069 79 6493 0076 rd3 + c0070 79 6567 1004 reg + c0071 79 6573 1010 rel + c0072 79 6578 1011 req + c0073 79 7788 0079 rpy + c0074 79 8261 0081 rsa + c0075 79 8262 0083 rsb + c0076 79 8263 0089 rsc + c0077 79 8273 0066 rsl + c0078 79 8274 0068 rsm + c0079 79 8284 0061 rsu + c0080 79 8361 0005 rta + c0081 79 8363 0003 rtc + c0082 79 8375 0004 rtn + c0083 79 8664 0055 rwd + c0084 82 6383 0036 sct + c0085 82 6461 0022 sda + c0086 82 6482 0085 sds + c0087 82 6583 0027 set + c0088 82 6961 0023 sia + c0089 82 6962 0028 sib + c0090 82 7376 0016 slo + c0091 82 7383 0035 slt + c0092 82 7473 0018 sml + c0093 82 7964 0031 srd + c0094 82 7983 0030 srt + c0095 82 8364 0024 std + c0096 82 8369 0029 sti + c0097 82 8373 0020 stl + c0098 82 8384 0021 stu + c0101 82 8477 0011 sup + c0102 82 8761 0051 sxa + c0103 82 8762 0053 sxb + c0104 82 8763 0059 sxc + c0105 82 8875 1006 syn + c0106 83 7384 0084 tlu + c0107 84 6661 0002 ufa + c0108 86 6482 0087 wds + c0109 86 7991 0071 wr1 + c0110 86 7992 0074 wr2 + c0111 86 7993 0077 wr3 + c0112 86 8361 0007 wta + c0113 86 8374 0056 wtm + c0114 86 8375 0006 wtn + c0115 99 9999 0001 table end + 1 + 1 sub 1 store k in fwa to lwa + 1 + hed1 + subr1stdexitx store exit + stuxxxx1 store k + lddfwa set + sdafwa fwa + slt 0004 lwa + sdaxxxx2 addresses + raufwa + aloxxxx1 8003 + 8003stl 9999 next store k + next supxxxx2 end of + nzu exitx loop test + aup 8001 + aup1dxxx 8003 step + 1 + fwa stl 9998 next constants + xxxx2 01 0000 xxxx2 eraseable + hed + 1 + 1 sub 2 reserve unreserve + 1 + hed2 + sub2rstdexity reserve + lddz ru entry + sub2ustdexity unreserve + ldd1i ru entry + ru stdw set w + stln store n + slo 8001 calc ao + aup 8003 and po + srt 0003 + stux + sup 8001 + slt 0001 + stup + sup 8001 + slt 0002 + aup 8003 + aupx + alop + slt 0004 + aloc1 + stlb0002 + lddc2 + sdaspr + aupc3 su + su stusa + aupc4 8003 + 8003ral 9992 b0002 + b0002slt 0009 xx + xx stuuh + slt 0001 + ral 8002 + aupw + srt 0001 + aupuh spr + spr srt 0009 sa + sa stl 9983 b0001 + b0001raln is n zero + nze exity + slo1i reduce n + stln by 1 + rausa is ai + supa197 in last + bmi tp block of + aupa201 su 4 + 1 + tp ralspr is p 9 + sloc2 + nze zp + aloc5 step p + lddc1 + sdab0002 + stlspr + rausa reduce ai + supc6 su by 196 + 1 + zp lddc1 set p + stdb0002 to zero + lddc7 + stdspr + rausa reduce ai + supc8 su by 195 + 1 + c1 slt 0000 xx constants + c2 srt 0009 sa + c3 stla0001 b0001 + c4 45 0000 0001 + 1i 00 0000 0001 + a197 stla0197 b0001 + a201 stla0201 b0001 + c5 srt 0010 sa + c6 00 0196 0000 + c7 srt 0000 sa + c8 00 0195 0000 + z 00 0000 0000 + w 01 0000 w eraseable + n 01 0000 n + b0002 01 0000 b0002 + spr 01 0000 spr + sa 01 0000 sa + uh 01 0000 uh + x 01 0000 x + hed + 1 + 1 sub 3 process op code + 1 + hed3 + subr3stdexitx store exit + ral 1954 + srt 0004 is op + nze illop blank + slt 0006 is op + nzu num numeric + srt 0002 + stlxxxx1 search + slo 8001 symbolic + tluc0001 op table + alo1 8002 + 8002ral 9997 next is + next sloxxxx1 sym op + slt 0006 legal + nzuillop + slt 0001 test for + nzupseu pseudo op + slt 0001 sno store num + sno stlp0007 650 op + srt 0004 get optim + alo3 8002 constants + 8002ldd 9996 nex + nex stdoptim exitx + 1 + num slo4 form + slt 0002 numeric + slo 8002 op + srt 0001 code + alo 8001 sno + 1 + illopralp0010 illegal op + alo5 set 8 + stlp0010 for blank + ldd6 nex op + 1 + pseu slt 0003 pseudo + aloexitx op + alo1ixxx 8002 + 1 + 1 ral 0000 next constants + 2 10 0000 0000 + 3 lddn0001 nex + 4 90 9000 0000 + 5 00 0000 0008 + 6 55 0505 0999 + hed + 1 + 1 sub 4 what is address + 1 + hed4 + subr4stdexitz store exit + stuxxxx1 store addr + srt 0008 is c5 + nzu exitz blank + stuxxxx2 save c5 + rau 8002 are low 4 + aup90xxx characters + bovloop loop numeric + loop auph1 + bov sym + slt 0002 + nzuloop + ralxxxx2 low 4 num + slo90xxx is c5 + bmi sym alphabetic + alo29xxx + bmisym + ral1ixxx regional + aupxxxx1 aex + aex aloexitz + slo 8002 8001 + sym rauxxxx1 hed symbol + ldd sub15 + alo2ixxx step exit + stuhsymb aex + h1 10 0000 0000 + hsymb 01 0000 hsymb eraseable + hed + 1 + 1 sub 5 test absolute address + 1 + hed5 + subr5stdexitz store exit + stlxxxx1 store a + slt 0004 + slo 8002 + tlur0001 tlu + aloget 8002 range + 8002rau 9972 x table + x slt 0006 + srt 0006 + aupexitz + aloxxxx1 + sup 8003 8001 + get rau 0000 x + r0001 00 1999 0000 range + r0002 00 7999 0003 table + r0003 00 8003 0001 + r0004 00 8004 0003 + r0005 00 8007 0001 + r0006 00 8999 0003 + r0007 00 9059 0002 + r0008 99 9999 0003 + hed + 1 + 1 sub 6 symbol test routine + 1 + hed6 + subr6stdexitz store exit + stus store symb + lddswof set switch + stdsw off + mpysc scramble + ral 8002 symbol + slt 0003 giving + mpycf lo + srt 0001 + slt 0004 set + alol1p1 test + stllop1 word + slo1dxxx + stllo sli save lo + sli stlli 8001 init li + 8001ral 9990 a is cont of + a nze und li zero + slos is cont of + nzesw def li symb + sw ralli off is li + off slolmax maximum + nze max + alolmp1 sli step li + on slolo is li equa + nze swsym to lo + alolop1 sli step li + max lddswon set + stdsw switch on + rall1 sli zero li + 1 + und ralexitz undefined + alo1ixxx step + stlexitz exit + ralli + slol1 + stllsymb asu + 1 + def ralli defined + lddasu subr8 get + asu aups exitz equivalent + 1 + swsymhlt 0111 symof s tab full + symoflddsymon set sw sym + stdswsym symon on + symonralexitz + alo2ixxx 8002 + 1 + swof ralli off constants + swon ralli on + sc 10 0100 1001 + cf 00 0000 0004 + l1 ral 0000 a + l1p1 ral 0001 a + lmax rale0000 a + lmp1 rale0001 a + s 01 0000 s erasable + sw 01 0000 sw + lo 01 0000 lo + li 01 0000 li + lsymb 01 0000 lsymb + hed + 1 + 1 sub 7 store symbol and equiv + 1 + hed7 + subr7stdexitz store exit + lddss + sdaxxxx2 8001 store + 8001stu 9988 a symbol + a sup 8001 + stlxxxx1 save e + srt 0004 + div2ixxx calculate + slt 0004 location + aloc1 of + lddc2 e + sdasel and + lddc3 store + sdaser + stlobee + slo 8001 + aloxxxx1 obee + obee ldd 9986 b + b nzuser + slt 0004 sel + ss stu 9987 a constants + c1 ldde0001 b + c2 sda 9985 exitz + c3 sia 9984 exitz + obee 01 0000 obee erasable + sel 01 0000 sel + ser 01 0000 ser + hed + 1 + 1 sub 8 given sym loc get equiv + 1 + hed8 + subr8stdexit store exit + ldd 8003 + sdalsymb store l + ral 8001 + div2dxxx + slt 0004 + aloe1 8002 + 8002ldd 9975 tr + tr nzu lh + ram 8001 lr get e rh + lh ram 8001 get e lh + srt 0004 lr + lr ldd 8003 + siaequiv + rallsymb exit + e1 ldde0001 tr constant + exit 01 0000 exit eraseable + equiv 01 0000 equiv + hed + 1 + 1 sub 9 calculate reg address + hed9 + subr9stdexitz store exit + srt 0008 + ral 8003 + slt 0004 + aloc 8002 is + 8002ral 9991 nex region + nex bdoill defined + slt 0001 + ral 8002 + srt 0001 + lddexitz + bd6 l + bd5d i + l alo 1957 all + d alo 1958 all + i alo 1959 all + all slo1ixxx + bmiill exitz + ill ralexitz undefined + alo1ixxx 8002 or illeg + 1 + c ral 0960 nex constant + hed + 1 sub 10 set cc 8 and punch + 1 + sub10alop0010 + alo84th + stlp0010 + pchp0001 8003 + 1 + 84th 00 0800 0000 constant + 1 + 1 sub 11 find and reserve best + 1 + hed0 + sub11ldddrumt test + bdo sex drum tag + stlexit is adr l + bd6di + ral 8003 ssw l + di lddf d or i + sdaxxxx1 sub13 find optim + gda slt 0004 dynam adr + alo 8002 + alo 8002 ssw + ssw lddoff set sw off + stdsw + aloa1p1 get table + stlbp1 start addr + slo1dxxx + stlao sai save ao + sai stlai 8001 + 8001rau 9975 ta is locat + ta nzuyes sw available + sw rauai swof + swof sloamax is ai max + nze max + aloamp1 sai step ai + swon sloao is ai equa + nze full to ao + alobp1 sai step ai + max lddon set sw on + stdsw + rala1 sai set ai to + 1 + full hlt 0222 drum paked + lddh9xxx set drum + stddrumt tag to 9 + ralexit sex step exit + sex alo1ixxx 8002 + 1 + yes sct 0000 reserve + slt 0001 location + srt 0001 found + stlxxxx2 save p + sup 8003 + slt 0004 + aup 8001 + alosrp 8002 + 8002srt 0009 sca nulify sct + sca rau 8003 + aloai + lddst + sdaeras 8001 + 8001stu 9972 ca + ca sup 8001 calculate + sloa1 location + srt 0004 found + div4i + mpy500 + alo 8003 + sup 8001 + aupxxxx2 + mpy50 + alo 8003 + sup 8001 exit + f 00 0000 gda constants + off ralai swof + a1p1 raua0002 ta + amax raua0200 ta + amp1 raua0201 ta + on ralai swon + a1 raua0001 ta + srp srt 0000 sca + st stu 9999 ca + 4i 00 0000 0004 + 500 00 0000 0500 + 50 00 0000 0050 + fon ral 8001 stepx + ao 01 0000 ao erasable + ai 01 0000 ai + bp1 01 0000 bp1 + exit 01 0000 exit + hed + 1 + 1 sub 12 set blank l 8 + 1 + sub12alop0010 + alo87th + stlp0010 8003 + 1 + 87th 00 0000 8000 constant + 1 + 1 sub 13 cal optimum dynamic adr + 1 + hedy + sub13stdexitz store exit + bd5 i d or i + raloptim d + slt 0001 + slo 8002 + slt 0001 + alo 8001 + srt 0003 seo + i raloptim i + bd2shop shift test + bd3xas xas test + slt 0002 seo + seo stlxxxx1 save ev od + ralopreg is base + div2ixxx even or od + rau 8003 + aloxxxx1 + nzu rb + slt 0002 + ral 8002 rb + rb srt 0008 get base + aloopreg plus delta + div50 mod 50 + ral 8003 exitz + 1 + shop ralp0007 tlu units + srt 0004 digit of + slt 0009 d address + slo 8002 + tluu0001 + alogu 8002 + 8002ral 9969 top + top slt 0002 + lddoptim is op srd + bd3 seo + slt 0004 seo srd + 1 + xas ralp0007 tlu + srt 0004 d address + slt 0006 + slo 8002 + tlui0001 + alogxd 8002 + 8002ral 9968 nxt + nxt slt 0004 seo + 1 + u0001 00 2322 2524 shift + u0002 10 0706 0706 optimizing + u0003 20 0706 0908 table + u0004 30 0908 1110 + u0005 40 1110 1312 + u0006 50 1312 1514 + u0007 60 1514 1716 + u0008 70 1716 1918 + u0009 80 1918 2120 + u0010 90 2120 2322 + 1 + i0001 19 9906 0600 x accum + i0002 79 9907 0700 add sub + i0003 80 0008 0800 table + i0004 80 0106 0600 + i0005 80 0209 0800 + i0006 80 0308 0900 + i0007 90 5908 0800 + i0008 99 9909 0900 + 1 + gu ral 0000 top constants + gxd ral 0000 nxt + 50 00 0000 0050 + hed + 1 + 1 sub 14 punch avail table + 1 + hedp + sub14stdexitx store exit + ldd85th set punch + stdp0010 8 + ldda1 init a1 + stdxxxx1 + ralrs1 loop init rs + loop aupc1 8001 + 8001stl 9999 next set locat + next suptw1 + nzu srs + aupc2 + aloc3 8003 + srs stlxxxx2 save rs + rauc4 + aloxxxx1 8002 + 8002ldd 9998 8003 store + 8003std 9997 tp av table + tp suptw2 + nzu pun + aupc5 + aloc6 8002 + pun pchp0001 + sloaim is ai max + nze exitx + aloamp1 step ai + stlxxxx1 + ralxxxx2 + sloc7 loop + 1 + c1 stlp0001 next constants + c2 stlp0009 next + c3 00 0500 0500 + c4 stdp0002 tp + c5 stdp0010 tp + c6 00 0001 0000 + c7 00 1499 1499 + tw1 stlp0007 next + tw2 stdp0008 tp + 85th 00 0080 0000 + a1 ldda0001 8003 + rs1 00 0000 0450 + aim ldda0200 8003 + amp1 ldda0201 8003 + hed + 1 + 1 sub 15 heading routine + 1 + hedh + sub15stdexity save exit + ldd 8003 is c1 + slt 0008 blank + nzudh + rau 8001 head + aup0000h exity + dh rau 8001 exity dont head + hed + 1 + 1 sub 16 initialization + 1 + sub16stdexity store exit + rali1 + stup0009 zero card + std0000h zero head + ldd subr1 zero sym t + rali2 make drum + aupi3 available + ldd subr1 + lddh8xxx set drum + stddrumt tag to 8 + lddi4 set swsym + stdswsym off + rali5 undefine + auph8xxx regions + lddexity subr1 + 1 + i1 00s0001 e0200 constants + i2 00a0001 a0200 + i3 11 1111 1111 + i4 01 0111 symof + i5 00 1021 1049 + pacofbd6findi findl + 1 + 1 sub 17 calc 800x equivalent + 1 + hedx + sb17dldddeq di d equiv + sb17ilddieq di i equiv + di stdxxxx1 save tag + stuexity store exit + stlxxxx2 store 800x + lddxxxx1 sub13 get optim + sda stlxxxx1 dynam addr + div2ixxx is dy addr + nzuod ev even or od + od ral8002 eo + ev ral8003 eo + eo sloxxxx2 + nze add1 + ralxxxx1 exity + add1 ralxxxx1 + alo1ixxx exity + 1 + deq 00 0008 sda constants + ieq 00 0009 sda + 8002 00 0000 8002 + 8003 00 0000 8003 + hed + 1 + 1 sub 18 index address + 1 + hedw + indexstdexity store exit + stlxxxx1 store addr + rau 1954 + slt 0007 + lddexity + bd5d d or i + slt 0002 d + d srt 0009 + mpy2000i + lddexity + bd6ds drum 0 cor + srt 0001 ds core + ds aloxxxx1 exity + 1 + exity 01 0000 exity erasabele + hed + 1 + 1 sub 19 process location + 1 + regd0923 0923 proc l + regg0925 0925 + regj0928 0928 + regk0931 0931 + regl0933 0933 + 1 + heda + proclstdexitx store exit + rau 1951 is l blank + nzunb + ldddrumt blank test + bdob d0002 drum tag + b ralopreg setl blank + setl slt 0004 set l + lddp0008 to dr + sdap0008 exitx + nb lddg subr4 what is l + g0001ral 1957 k0001 absolute + g0002lddk subr9 regional + g0003lddj subr6 symbolic + k0001lddl subr5 test range + k0002rau87th x reg error + x aupp0010 set blank + stup0010 setl l8 + l0001stlopreg setl drum addr + l0002aup86th 800x 800x + l0003lddorceq 89x core addr + l0004rau87th x other + 800x lddorxeq 89x + 89x stdopreg x + j0001ralequiv k0001 sym defind + j0002rald sub11 sym undef + j0003rau87th x s tab full + d0001stlopreg ss s eq found + d0002rau87th x drum paked + ss auphsymb store + alolsymb symbol + lddb subr7 + 1 + g 00 0000 g0001 constants + k 00 0090 k0001 + j 00 0000 j0001 + l 00 0000 l0001 + d 00 0090 d0001 + 86th 00 0008 0000 + 87th 00 0000 8000 + exitx 01 0000 exitx eraseable + hed + 1 + 1 sub 20 process data address + 1 + regd0937 0937 proc d + regf0939 0939 + regg0941 0941 + regj0944 0944 + regk0946 0946 + regl0949 0949 + 1 + hedb + procdstdexitx store exit + rau 1952 is d blank + nzunb + rald sub11 find + d0001stlorbal l0004 optimum + d0002rau88th x drum paked + bt lddoptim is op + bd1exitx a branch + stlopreg exitx d to or + x aupp0010 set blank + stup0010 exitx + nb lddg subr4 what is d + g0001ral 1958 j0001 absolute + g0002lddj subr9 regional + g0003lddk subr6 symbolic + j0001lddl subr5 test range + j0002rau88th x reg error + l0001lddaxd index drum addr + l0002slt 0004 800x 800x + l0003lddaxc index core addr + l0004slt 0004 sd other + 800x lddp0007 set 800x d + sdap0007 + srt 0004 + aupxeq sb17d get 800x e + scd slt 0004 set core d + lddp0007 + sdap0007 + srt 0004 + lddceq sub13 get core e + sceq stlorceq bt save core + k0001ralequiv j0001 sym defind + k0002ralf sub11 sym undef + k0003rau88th x s tab full + f0001stleq ss save eq + f0002rau88th x drum paked + ss auphsymb store + alolsymb symbol + ldd subr7 + raleq l0004 + sd lddp0007 set d addr + sdap0007 + srt 0004 bt + d 00 0088 d0001 constants + g 00 0000 g0001 + j 00 0088 j0001 + l 00 0000 l0001 + f 00 0088 f0001 + k 00 0000 k0001 + axd 00 0088 d0001 + axc 00 0098 scd + xeq stlorxeq bt + ceq 00 0008 sceq + 88th 00 0000 0800 + eq 01 0000 eq erasable + hed + 1 + 1 sub 21 process instr address + 1 + regd0953 0953 proc i + regf0955 0955 + regg0958 0958 + regj0960 0960 + regk0962 0962 + regl0965 0965 + 1 + hedc + procistdexitx store exit + rau 1953 is i blank + nzunb + rau 1952 is d blank + nzudnb + ldddrumt d i blank + bdo g0002 test drum + ralorbal l0004 tag + dnb rald sub11 find best + d0001stlorbal l0004 found + d0002ralp0010 x drum paked + x alo89th + stlp0010 exitx + nb lddf subr4 what is i + f0001ral 1959 j0001 absolute + f0002lddj subr9 regional + f0003lddk subr6 symbolic + j0001lddl subr5 test range + j0002ralp0010 x reg error + l0001lddaxd index drum addr + l0002lddp0007 800x 800x + l0003lddaxc index core addr + l0004lddp0007 other + siap0007 mor + 800x siap0007 + aupxeq sb17i get 800x e + 90xx lddp0007 set core + siap0007 address + lddceq sub13 get core e + k0001ralequiv j0001 sym defind + k0002ralg sub11 sym undef + k0003ralp0010 x s tab full + g0001lddp0007 si found best + g0002ralp0010 x drum paked + si siap0007 + auphsymb store + alolsymb symbol + lddmor subr7 + mor lddorbal set or + stdopreg exitx to orb + sceq stlorceq mor save core + 1 + d 00 0089 d0001 constants + f 00 0000 f0001 + j 00 0089 j0001 + k 00 0000 k0001 + l 00 0000 l0001 + g 00 0089 g0001 + 89th 00 0000 0080 + axd 00 0089 l0004 + axc 00 0099 90xx + xeq stlorxeq mor + ceq 00 0009 sceq + hed + 1 + 1ixxx 00 0000 0001 constants + 1dxxx 00 0001 0000 + 2ixxx 00 0000 0002 + 2dxxx 00 0002 0000 + h8xxx 80 0000 0000 + h9xxx 90 0000 0000 + 90xxx 00 0000 0090 + 29xxx 00 0000 0029 + 2000i 00 0000 2000 constant + torg 00 0000 t0001 + 1 + pat diff --git a/README.md b/README.md index 4301ed23..468074e9 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,8 @@ #### Hans-Åke Lund has implemented an SCELBI (SCientic-ELectronics-BIology) simulator. +#### Roberto Sancho has implemented an IBM 650 simulator. + ### New Host Platform support - HP-UX and AIX ### Simulator Front Panel API diff --git a/Visual Studio Projects/I650.vcproj b/Visual Studio Projects/I650.vcproj new file mode 100644 index 00000000..83be95a7 --- /dev/null +++ b/Visual Studio Projects/I650.vcproj @@ -0,0 +1,335 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Visual Studio Projects/Simh.sln b/Visual Studio Projects/Simh.sln index f14d7ea1..69f7b2ec 100644 --- a/Visual Studio Projects/Simh.sln +++ b/Visual Studio Projects/Simh.sln @@ -244,10 +244,19 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "isys8024", "isys8024.vcproj EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "imds-225", "imds-225.vcproj", "{A66F0D85-174F-4AFE-A44E-7FAE3D3727BC}" + ProjectSection(ProjectDependencies) = postProject + {D40F3AF1-EEE7-4432-9807-2AD287B490F8} = {D40F3AF1-EEE7-4432-9807-2AD287B490F8} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ibmpc", "ibmpc.vcproj", "{76EF8599-7AB0-4C8D-997B-AAEEE724A5D0}" + ProjectSection(ProjectDependencies) = postProject + {D40F3AF1-EEE7-4432-9807-2AD287B490F8} = {D40F3AF1-EEE7-4432-9807-2AD287B490F8} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ibmpcxt", "ibmpcxt.vcproj", "{0026A4C2-655A-4C03-B6CA-B1EAF79FA4D1}" + ProjectSection(ProjectDependencies) = postProject + {D40F3AF1-EEE7-4432-9807-2AD287B490F8} = {D40F3AF1-EEE7-4432-9807-2AD287B490F8} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "scelbi", "scelbi.vcproj", "{1E92CC4B-9ED5-4CD4-BD35-061F25126523}" ProjectSection(ProjectDependencies) = postProject @@ -286,6 +295,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "I7010", "I7010.vcproj", "{5 {D40F3AF1-EEE7-4432-9807-2AD287B490F8} = {D40F3AF1-EEE7-4432-9807-2AD287B490F8} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "I650", "I650.vcproj", "{95B64699-4B93-4BFE-9024-0A2302D9B71A}" + ProjectSection(ProjectDependencies) = postProject + {D40F3AF1-EEE7-4432-9807-2AD287B490F8} = {D40F3AF1-EEE7-4432-9807-2AD287B490F8} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -532,6 +546,10 @@ Global {55A727F0-B5C8-48E8-9EF2-D5DAF679C520}.Debug|Win32.Build.0 = Debug|Win32 {55A727F0-B5C8-48E8-9EF2-D5DAF679C520}.Release|Win32.ActiveCfg = Release|Win32 {55A727F0-B5C8-48E8-9EF2-D5DAF679C520}.Release|Win32.Build.0 = Release|Win32 + {95B64699-4B93-4BFE-9024-0A2302D9B71A}.Debug|Win32.ActiveCfg = Debug|Win32 + {95B64699-4B93-4BFE-9024-0A2302D9B71A}.Debug|Win32.Build.0 = Debug|Win32 + {95B64699-4B93-4BFE-9024-0A2302D9B71A}.Release|Win32.ActiveCfg = Release|Win32 + {95B64699-4B93-4BFE-9024-0A2302D9B71A}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/doc/i650_doc.doc b/doc/i650_doc.doc new file mode 100644 index 0000000000000000000000000000000000000000..fe8c095220fbd3142db8b4ac85444cfbd8c44d26 GIT binary patch literal 215552 zcmeF431Ah){l_;6e-r6euRn!(QLOY#ov;y5?3ExTWB-n?0k{(_xff@{IA z0Ec&czTqSA(M^vyCpa09cH^!OY0^SjKIx7#VXousSdzO7Rw!N3Pxq0)>{=r1sroi25V~lsHd_QrpK4-qi9HRH_@7>Jhe9OSg z?qsiAOW!@<(&PF&&aKI@a;KCz&Jy-h4|SXeQyk~9EL~}$@4-2aGrOzfTsFdSE~dVH zM>)<@T(XuCqZ;QEZ{*tZ-H-BnPj#HXa^VZp9p^0ecc(qQ`HugXe!t88TKasP?Knqs zLfR)EQ_g%#z4ph9tNAwlHDzS~P}+4U*X_>1`*Zb~_;0EIW==^x(sfghX|LIr@v%Rq z9{X5(woQK$)hG2nK}9`^9j6ic>EQ23qAC`5@{q@+UvW_@GIlhCxHJb4K;f%quRLQCc)^e7QThxV$K@ATzVPD(udwtFEq_AE}+| zR@BumXo$?MYIJMs8Y2~9H&kC=9SKL>#yYo=l4V7c#=FtFriO~}KzDYeHq@|Spc|^K zbSvvBnrgzejiJU!UG136Vk+TmH5FEd-TJ24)sbjbxYErTJ$k4#WynBxenX_OFv-x|7_pruy2*yzY5^D{ir`XswuZZ=hFEom&>Ft*ENYED1N%M50kzYv``Jo2JhJJ^l(YlIAhzf&4;LeFuGi?23(E65fiCoclfVxX%n1PAZ>H+mm zx$`59Rdr2`ZbLZQ*bu3ZVH`-Iit46HX@ogl9jS@vK~|S5S}E!@Md^Z&Z=hRKR~eZj z-(l4+Z}bPcm67QF)IGbYk)lzdNkzC;E~6uZ;i+i2S_oDz^j5uv-d^)Gkr^RIhX#0q zq;5RFs;(y36$WWeQ$ww$IM-CxF=*LTT8SXJflk*3< z1=II0DJ>`~bBjyeqDdtaiwZbcG&yhLl>DN}Hc}+sXKRU(Zr(i83WzIqVma7X(6@dx+S@#i0+h$xutH&l+u#ovH}{APrZ|i zCKr}+n}SINlgqPQ?#n^9U@CiV+4$Uv6V=Ufr_h1YGIwkN&Bz@)u|QW#7xE_N7EK!H z=I2hz9VbmGb&F|TsVe5RWZL)wb%?5S`IlE-R6JSQoL4-#yp-L6bg8u5zjRtrS;0Uz zx3s8CdS6&tO!YE&TpC{nArKyi#_6NC?GtPRz~_&d~u)HNW~ih(F5OoS+D2C6(2wG@ep{2?B7 zT-`7~5)BIn*EiJF)HSk6jnPmwLZk%H6mvz!xh|^Z9EmWJs3+jeM7ApOT zYVu^tYhPAokIY^SZJs-`&h48sXlP$|W|cd0p*yq5-L029env?_DZ_G%JG0vDJFC2| zVtDrGkt2qU7&4@#CWYqKhA|gzenV4@n;&Wn4Jv7 z6Idu3HbJe!bgjeM=*@7cHBe_b)YyayPEhS|UG4BTsvV)KWst^)8Y)Hc4=OmNDRL@o zQrqa}Dk>zp!-)3XVWhr;)$~DS_2G)h9EgxtS5t#VPjrWo`VJ%7=))-Q4)mgILCx$s zjD?#YiPl$#7AV74081@MFifM`cZ<>H7DF=7nFZwuY8&0I+J1e%9JP$$r_S1JR?7Rs`yrUb+vOMbDJ8J%qOUP zNc$>RVkwo6$S9}{VcErR!Cpc!Z%^Md0aFb1q;OOl1EQpGNY>Dd@`g}_+#@E9#aLz4 zkwmxfM6#`0D3KhR;pq=Fq&HaJoy1E>FjSs!j&7q5N;rqY)_F){1Kxn8s;1ON8WYs+ z31(ZhE5W385gYBSi}zX9SXZB@*`7SMRk4yssd$JP`~(g4gs-jol<-M?h)Z~GB-)7E zo1jKd0CTciAK76_0*BH-u?xfDsXWx5TN(~kh8qT#G~tqm8{GbR`K1F|zR@sGEZe-1 zlFOmATvuA@R&XQiK8}2-f{x(HCLrT5PgvW$g_72xS;K;TQTLNBlqBkcC$BjpR%b`aK9MJlRr|DqK{S~!|jb@Rnvtf;H0$6rwmYG~52pMQU%tEf9) zqA$Ls{d2>$Xj2Jav?=FcsF7PN5cd?dMI=k;Nhn2GOU+LlReyS9owI*Cs*Ra6t@3F>!Ooprfig#AtEQT0dPhn>kR@Y&48I_VccsJ8`#LGkV z3}REgM7nW(X{r}~9P0HaIz}l^sti@?mdV(t3_=82N#{&oOdnK}M~rbxi4*h0!>I7@ zR1hPVihS%|$z8n`NhYE~57elkqv#agF{4j>uETQEaG~DlG43Rxnma6WSaXVHX67O_ zI$43Z&X*jIduphn37R%GAuKgI_=skiFvOiEL`T+zZ|Wq{n)xUyt1&vWG*%+x&sz*lO_p7K}X*zN1jCzs$lUo%!RacLI zr~#B7WoKopTU3*H)3+Fqs#N!s@soaQwXiVUKsK??9X49u7vkiS zt`Uhx0z~5K8G*<`hC`(fN2~gVIc11I0r=Ol!#y z3DyS5DAGh32kL8@T^VUWv5B^$q0+qA0cB+v1<9UhF2R84&Y+%UeCZNdMb%A)R?HLR zlAa@lIyY==DqT?0=vlOC-4+=i;TsdHa;Y@o)JQ|4SaHLSv%|twUWdY!=H@D;>X|~A zNi>1LuvQK-AGd zqHr0>`cOmTfR?VPZ+3;U8{P#%cB7k(UT$6sPEi&}%eRyBl9Pr6!lDDx(lSf(3q5xA z*rCp(?hTvaRjVY1@?9kRt&-nb8)+d3of?W%6K8tz4Mow#4Pn%41V)3M$7GI$%|*ha z?$xfHU+P=c*jPVi@ZkCL=V#3}WwPoT<_>1+BH=lFLE%Q<^m|@pjnadjOvT(jdK*)i z&?u%-Cux;BWXPZq*(0(C4RQNpaYhWV<=^up1KyKQU|L`aODv=9`3jaq!j@hjJDL1r z|LB0UGR?JNm=dN*3%Dq@c2dG-EFy|a=~*;Oz<+_$%!l|Y$LBRG0#lsBz4A-qPHR6# z7*U-^BBLGabrnKAJIvfoBa;C2$y7dnQIVJ} zvG!bx{unZB(6H?6>_OSa#Bt2$g_w(j->8gik%(V?0|`fF35@s#>KjFULx#0jn`WF? zS3=cMmCO|_9>sj%|3{@>#5+=r-R7WD<6gc)#9PVU;9_`6sa>DXqFI@(|a~IL{xE4nAb<)yP#DS~r2t`e@L>h6& z)uDTp7EUalW?fcRFuAOtg$s)V7Z#M3 zG6$h=mNpqud1DZ+)D^1%_YGSd82XW?Jl*9^B zvz`#FYw+vJFDfgKl^{8$LP?V&@{5&}#tMnEJE$1v%=7pCLRP;`Csf%Yl@b$o&+oBc zG}iAD88Vl7rO9Q5OhX+LUf`Ez?#sU*Eln5nm;w%9f=rbj$C$*QD=tx|;z+1V`kDyM>POk^o)E7XE8if`lT^-7u97AohKm*?hF}|n^=JLhz3>EA-7dt zhFmV5pBxa6gLH)A4Gwwk2<^e=^#rZ1q4_idITw?Uz$^8mEz<~WtLI%PFIe3vQFcV> z7|U5;93;u2%!jnl=nHQM>l$dBC-)M05G+{^z9>U{w3;y1K)WG9t;*2NQImk8*gS`m zCe9AC)FCS~@tj8Hv??r{&__@IbDv7>$_SN|pYMf7o`%&CzE%y$u)fs-L(-_3Jdxak zvK^vXW7!;|a+&gOXb{~m13}Y6P1P*IU`+*!0aV^XC5g0)fj^b0bw--R#^`*{A}Vu| zmUdNMTCVbr>u~L4DjhxUB}NhV+PRdNLE5JQVm58h7vF127m#(jaNvrGwMZBA)o_EhYZ_(jT5lmSzmz+FQXGM5{* z`{3P1d6|BHq=NFQFsTF9PLQYaCUC?t| z5sf3=dg+0RoK&l#^*H>27D+2;02Pxv61ufqaWrz8=N-lTL%B6M1}-DEp#qke_$1PO zsIIGJ0S%FLoi7!!A|{IR8_$XiD52t#dK@E73)SLnsNN?m>riymMlKVz7j@6dl3bm~ zBa^m>N025>T;0ZyVnP%4HD^Y*rk2cHZKOhRf2&@6mWxhTWYBq0QI+C6X|5(%g*-YD zpl8?Tqb|cLKsF`lS!uq_b8+X#mSSvmoGNLM}p<;zIck{eS_fY4E@_0}qgs;IWoQ|NQ$11s;0qTCA=0Tbox^p%$? ziH1cr3LhW=9_PYI;Sd^B+9{?0?jrAkxtdFkTW45=uV#m-TMgXFO{8r@b5JdAbx1O} zatpV=G*x7QxJ2Egu7S*wbfKw+Rb2EiY6+U3STj82HQ1FL5QBrDNqefpbHt;nBwwVo zZ>S~pLRUPE3p2#VWS|;6X%S=AKp-k&qk82jT5m+9v$f&5s7OelQc(TT@MQaBdw`6) zxhn+2(~?wBu6Em$GwUgR>0e0YLD1o_*DyUUq&s9_7|d9E2nbk}qU?M$GgDg>a)&wD z*=|NgCSPM*KBKd9_zdAQC|2mIiq^`>Wrt*+#pe*~k{bV#v8DM8yj1JDQgLRcXTe-k zZ&h7&$ZwH3XfygPkkiNSDsr%YlQ6f2HAhs}th z?}9;q*jfPHZhvWjVJ2~4;6xE&t(h>=tO7Kyh3mQQ#s!Zt6HiOZvo#VT-f?d(+b0#6@HO-xcS zx-7#Ky&RT|wXH7tU-%cK5CCc0a`e>XA4@D{!pma2-?ujB*F%#&9NpFIoJ zDdVc{YFeR3M0wfD!k8p^q!wQ(;%RhJg));+k3Z`z_-v}D78x;%Wwaw?DrS`8DW+2O zzMD+{$Q-b~OVNpOnjMx&fjS0_N>T2@DNsw>t7e3uGRcBa$TOeNPG}z-Z*M$p9`Na< ztd;mQ!rr2VW#usPq@x8rD+7lF{hD1~aFH!_g0B;m<;PN|j1{p)7a zwWetGf&s!&@l1x^5Z@6Kq4I#L7uc{`-FYrBI?Ho!lx}BWWHLb;46+Sb!5EDWaGjx? zHq9+{!4OPtZ5$VAfbU63gFVG23kHSiG8}Pz5bvrSV^UYGoP~(Y2H>))4Y&oR*^&s!o+fD1h3IkN4DzbJPcgT8Lhv)`5U9kq%*j=l@W9h zwayENNx?(yc_PWC_iVN_I1H{C2=0by zYj+_D%Zg?80Tn8h%3O*LOuUQ2bLNoK_j*CS^Q%FJ#h1Pc0hvC8lmU zhhg(L(L{)fnr0kmswL9&vm8>3Ir2GB><*rn#H}*fs!W^ekoLFRX;O`)R4G8u68dI# zUYLd8jBRZ!kD?9%Hwxp5{Xu{zRzLNqYIng;{Lms}J4|1daBHJ9pH&gCoHEDoz+l?l zq$UDl4bo05`5J9>ahT!aYS^N{H|gqf)n;44sX1S@(n9noc~)|%6w(G?^b)HA)qi$( zl$MRLj=8HJh#+H7my8Ftvh<3}378hg~M-C8w? z%Nho4%#;EY?P83ZW&>q>xLdwnO(8YcGi19U}4?)BoZ&`_Bd_Nn~uKoh_`DBpIhxlt})Y z#Dt!75Cz{LM2fAc)Y$=(y;4p)HciK^fr5s746Do_vKG}n{cs(S9qDFeWu56BuCx6| zx`)f;bY1O{rw=q+szCRau4!U1N5U(VI?$DITYm;kI9ok*Q=w8Fep*R<+d%v)q!ss! z2?MnNN{^E+qM9gffXa2Xz9LkupwPWzaHv%#t|MN=~FEMk(l!{t{gh7+m zF?&NMQ`VcRIof=Gv8k+xu;-+qQUh_kTBjiO5(S#4W<>bw)%qUgG^ynW!dafAqq=#3 zMBgrUH@IKlKrOo`8U_+%)MA>&^uN9%pbQ_n>ZknsoNEG(hm({s*Wu}^on^;Z6+AJ~X zZMH|oEM|HAM&;|)(c(EU4nxxzA+7DXfHDQl0~FLAV(voaG3l{4QfmCvY8=f~O8cW%Oqv7c3f{=@smGflCt*DKO4N7t0+b3orJwJD zk%SzQIv^h;llxxdSO_EO4|LvK@&!1A_+)A!oA_dCT#0?=`h}PWg|qY%Pbys~!zHYh zUodvcIQMX3#kpa0fmgdyOjtfM5^M%!TMq`!R#JFH9+ro7eJZn&Z)m!h?kktjFjAtd zyWC9O-lTcxvjl)LpP($aT2UblRzqRNPMn)CX%H_3R1vC|CnE-m5Jnp-WhoA79m!Nr z1jPJW)nZ+dj*iGns_da&(+Ed1{$*-O5`*p$*o?KImk?YFX_VC}z6|KFC?K(Fe2?%| zv7w%)`KgCgyRY+gvuHXC2Gv}I7qV9v3+1sjWEZAY#bxnHE{0a^=*eKCe9U;7R!c&N z;3H8h4Yh^;ynd_91MZ*9Y$($yB2gvtGz_REaT3WXwo;j9UsR+`($FYsUNtx-qYPjy zD_zACo#BQ-N(jxE)2+!!fw>xIrFKnfg;wZgpq}Aiw5_EX zUWR#)<#2e;jD$pDr++I%`>F2oRM-oGK-bvPBUgK=NL8Jtwh0ErW$2!oUknEIkQrFX1Do5>8sC^}DzpQ3}vwUEwBS7UN3Snr1rz}NYb3-WX) zNj2{--b0^4Ew8mSlxZSXMl-uB?C7&l?7ZRymP)D=yHKE^PL{1;dK=xGA;TH|hI-aV zs+d*JH|n57udb9;jEJXVFXMLBH;qwa;V<+goZjdj>(zJ=+e3}7jygl7h>ibd?#c5+r*rfb4Zuz&n?eQo1~Y}YopKnEwf-O zZObnx&n=pm=I4}Ec824AmRUQ`qA+285|F+!5XSaX4y+LMc~MRv@0y(G1y8vsKf0kw z9s%Y^PMTp+C{Q*{ zF3!QuX@!gU->Um|_u^5$fWCM40{$CnRf89wVOT<)4dU`3JFO%+j>_*qU-U zl(rESL%gFNW>fkGb>^@8u^;fjR90ZOU`{Uw;<+hV`r$ZzRt79~ITA0fxpw$+%ko$* zDbJAT83QyBFJP$EGX}Nc`RWWdj}VxYt!fJGlI!)1wMrI!a@|;tu@D~9+rkBTV<$JeKzH5Tuhq+W#X_;ZK7$AN>%>)&$2%my zr^yF##9IuB?@?}9S3Fofd8Ydlzj_O5dF!{N2f~BOz3?XWgX_!~ZVpKDhNWaes3W}| z$rm1vTJ?(%2|L3o{_+zD!K}3e+ltXeVd5J_v0xsj5XGx`Ml~L43L$5R$Dqoy^;p3Z z0&!ZjJ`_$Bdnnb)Lr3aym+?d<`a!CJ?)Zq=lGnq`5Qd!5KWE5*Om!u>EX=ikVGg3~UP|G$=_nQ^ zjCFaE%H>rY?l^b6Ta=+sX(>{J!04Ef!f|TMJiwjc9^+2rojJUJ!!2=-bxQ*m>4C9E zMO}5UTjrL#Q{1WUGws03Hw&;h0%lcn$%Y0f zL^1PdD^Kl(yv8WDlEx_4iivv9t%X4&Sd(7n z;N(yOUw|gI;0xHVAc$Y9|vML!vb`v+YfQV1T`c>glE=Q6!PTeW}6E->79z zN*SxxNb;sg1>!2i;KgWm9lF7yUuBX?R{!cr3Iti}POa9( zTQbVftcKTV5S{vNipmTf^{C~a;uY(}y_fU%JP;;b!;)kT^x6yyiq#txt;RJs8aGn( zZlqSS+A{E3JCk8VhYK_4g#q69dKHPuqe1G~L6ys=oXnh86XJ=AgD~C&Y*9chgqF&p zyi!dq4^^D!#ZktUl9e-zG*pp*qfVw|RSSr!u!3H`2aBRpWs*-8Ybt9>yex-zLg!sg zP+?}m6gy>R8vn!h@~0KaThER-JQNBYnVE@j$CrWagJtmluoUV7#k~xaN|oqjroT?x zBnJX{0a@c4dw4H?$*=BFT3S(=RVMh9J|jdFAa+$&qIwUond?SPD=y8qE)C%~Duz>` zniv;d(wh&^tF3CIUe?XZ0xL5$N?oe2aMgNVEf7&wNeHKFF;#|2$Qk2oEd!&7@Z{YM za$HTKh%%VnBvXB|+B)Xa$ZUb%2pC4*;Q$+%2MC)f6_uhwBs}G!*$__1auFw*#sZ}I z1O20tE-+d`n(5O=gpLF=2|h@UM97S(XNgTlA*C6X2)MT4Bdk~pGL(ljtdGz~c4TEO_ z?TH3_8PW*KmeMfvn0Wfiq1QsIT~BnPVFf+AXIiN&ws3=*mMy0j_GtKRkkLkF^b%!F z^_XMLebsrsVLkOEXN)aWTWF!gY1&R&Z$D9atAsbz($mUaRo}R);#AGII;IPunzfA3kj#DeeHF;S%qaH4)Z0UNbWtQ+g@|8ACqBt^KVX-no5dTtB zW!hNZ$&~d6T$858T*O8-+FY`L{0?C#VUs$~9nwm8!AyfYQ6HAvv8+%N+2Ccb=mpQS zfgEVs`kdiHe)H_Nr^@>Kk9`y78IS0SNhlvl6zRn^b^be!7c;wLug;*_GFcStaU2M;wqB08Uu z$dR0eJa!@bb>yGekxh4GHm?}qHOQk!bATA0nW5~=xpfrQx<}pIutDtRB4M6IG&lG3 zoKQ>M%-n$r`N-UG{2geIR&Qp5xe7eAkc^2pLoRDGc#ap2^#&$0R~rPSh7AkhVtI#^ z>`6dnP7wik3=5lxN2-)87FuF+VMDZ+Jln`j!X!O=RmTg3WucSq#6+GbP=2`5r*8k! zeDZsG22f9}iAx=uRm+ykq{-fL-k8ocW=I;R*jDkcrF}$?@lGBu*+Jex)*VT#V5;-n zW0jpS3tfUrURyw&nDE!PNQ2a~A#q6}Z-f>|KW$0X`b)(uElFw6p~+%$2X(D1n;QGL z>tdqHAmK(-ss(S_N;D^SksnpK2u|f7rIXZr^%${{MZ6svn{EWxI2JmdkOC#uveI9j zmmUdW^o~Dsu=dEl|SsAxjbSt?(8E=niWPa9r5Dr};PtdEg>R}PRyft=K zmQt&;rd@$k>WraU?2OFnl@{?H=HgOSLKeWtJg|LNc_Dy0sTQ)@XQVy)9TwPYy^KLW z0V5iWRMto)xJ0}Mx+35_R7RGW`CwVNj&hP$T+w}AgBZmTWP;Q;%7gS`YZf|tC%oYp z#GEJukmIt%QKgR5L^;u!q_A1Rt=F8H2fuAnh%#o$0vv-Bdc4>Ym4qKP5&CD-eo-Fu zg8w_V{o@!Qv2{Ft;t8Scn@fx-+JX*O%#-k95|j~rfxAQ^)bq!+r>xz0Uplo#^cf#x z#7u&o-^k2Vd2q9nnfc9s*MEyGhfeQ`?M}Q;2QQ&Bh3nqcdVAIC+8`poZ@`KktSo-YxC*|*Pqrt~D|(B4&r`~1SuC-Nrj?i5c* zagGHcwoSq4_-;KY{Db85b5c&0`cl)AdRO&2*Qe}z@N zpRP8(L|mOa>r%T{ectHE{ZjRold*f%f-_HZhNqviOYf>%nvSDYvY$6$AASpH_o`LX zZ&lmY{krY0%Bd2)Os#UI9MLsP4GwqcITBvwJO9Wj&i?W{PeOk~+nH?N2}VKJ54$>clSuJob6PCJX;XV=!w9s80l`#WRiM`}te@`dfY25{7WP9Kn_% zTiOv$NS*Jvaqi0)7g91}+6xfW_c(@C0}gybV@>cfd;U zE_e?J&#VHgL05Pt6|8;t#kKFQeR#>Q7GJt}(XSTITRdmxoZ^{tX8vlP9FYOrQ_1Ii zeoqGZ^rankc6QY~9ypfa@AYr54siBYcMxuESpy&^YRHhopmuQfN+{u5qJi3{Ck|At zJX5#Q?`2S#w5$#HZ9Yzx)^PR{I;4Sg&>i#udxL$zzF;I61xAB0;4pAF5cxk690iUC zGr!Asy}unepP>%b@AQ?MR<2EXt&9}vIcZ{Pv&8u%CZH&_nd1}nh(U=>&m zQt&N;`eemxH@>#m(=b0$8b*%H_l^Yhiw|tJiCCdAQhy6bRfQ5H_#m%0{Vji;0ItZ$OdD;Vc>8u6-)!u z!3=O5I39>Ucmg;PECi>6Gr*bPTyP%v5%@8<5d0S02yOy5gWrMQ1Mw-BfIomI!BgPV z)hk!O^7mKnz3bkaUb*-0_pV&M@*4lhkG&(O`$ud}&{P_Sj~lO7G>1Hc2i!89^_7$K z`2c~q9?pO*Mcx4KNX&2Dv;jN{Yb8Sp$<3RZ%5!F#~jmG}T8 zgA~vObOos(4Wxs9;2>}?I0Os?gTOIhBA5i`f+`RJCxdyQ8q|PVPzQbjE(Vu?pMuN4 z<={`?HgG$525hVR-$P8(8g&oT=k0OwaYpgTYPdOWxpbln3U0O=qDbOU>U z!acDCU=;|&fq|XRY=K;B?*z^Su1UNTxMpj161U)eyKO5H?!0cFdD-3xocU+MGxiC# z)03TU2PbteOeR*_xAZaxZ>`(Gj^0=CT`ba5TPk8iFJ(T_)k(@apxfNa-ONVu2GgvYb!3fXtY+CnWTK0RkJZ89)Uo34| zwymaYmn=~GWq;fB|8U(yTPy7;^cez%f?`ktjs>M)3YZFNKrN^P7lMnxPr$|C67W;- zGjJ)m4Ez!N3ET#52X}$Lf+xU};3=>IyaQH(cfot$eIR;gHTVFeqIc3jI>-P!ft|tb zU=Q%g>UUSa{K@KvSKoif{Wsom{~ez^EJqf5M}FiVnXirrw`m)FJuyhjl-An&Kz-gG zC-2Ie$zHT}ncvLU0ifJ906&1l$6afIom+!ENAn@B;Wh@FG|P z{sTS+>%b@AQy{kJGq3^d+S_q@feq_cZdkX$@&wmySa*$oM0tW7Io&^E@=86?VR2f= zqw`|1iY;b@HHYk>&j;wN=_Bz@%U33*Pe;hVZr8s0?tym2e2f-2FKeN1 za)BCJ7=5BFGlS879@rB3)~yy_y5&|o17$qBf>e+WGC(&VeqIld2?l^4fJ4DRFc@Tm zQD8I}1Iob^FcnM(Gr(~`e8rjI1h4=s1gC>Dz?mRX4EMwNwezR{aK0$*z(?ozPUXs$ zd$hf6wWjYEa3c5jsVAv4J=VhaEw{{YNOStNpZ42k|2H@1>-~iWXMyv;`QV4(*Wh|^ z1Nbet5!?jC=l>n}J$MW}4xRu{f@i?9U<`VJjrIkzNl|0!b-*Efqzx5m3|ZRT-H zJYQ!op-nPK0bPK^bg4k%Iup|svt0_xz*KNK_$^?L)F}n?fy8@ffFFW8!F}Kr@D^AJ z-Uq8e*S*LUfYIP+Fc}ns1`q}3f**p5!L{Iz;7=f}5BdpA0Y3#_fYiM?4)zB7fV;q# zYu|b9(TDzW%S{jQcl}Kd{rsjYZxZl#*_D@Ec_Dw7T&TYtgkN^GRdW_pd_lsPDJCO+zd8u9ENF)&FLuc0~F)T&Kda-FmCpT)kJrJhRL- zV`IIe5~le_xkiO;z0HiR>@n+$KAD+*PDkj4)@8^UDlxjyWej6{7!X|!6ZZ|7~hSfGN}>@!=l6R7%y_SN>3 zT`bU?hwU>7wi#Cy<);zlEB52S&gU;pJ`v2V6h>4fi2J34zfWGk>`Q^2&%eIwiJ*B2 zVO6^Z#lo@7L2n~FcOpA~1~vN<>w!9O3OEO3Ar*tc;UE`G0EtPu&1V8*7+5+G*m>6; z(ZoA;sqgl7+F?#=zogy!B^AwK!Vh(BRszIllJptH37MiZUj(m$e}na)fK?{Pf!QDe zo(C_2YIs3-L-=Cn{fNVX@P+WhF`xvT1SoF6nqXgf}RHu?}6RGAdn4C0-H9he_=t-9#^i&iaKyU2|N)YrM4ahT(C{M<^_#VeUz zs5}`ua$*l74arwkJ6(n)bzQb+kEER)8>Y2si&uS>zO2wmS(}uRUc5{4{)-CtO0^57 zChg)ZDlANwW1IQNw?6jgo$O<>-3>c_m(y!m_M%0LxSQi7`sVJNy%wnN-8Q7`y6+wv znCab9{_C@>hg@l}x89Yz%V(e9*?pJwc=+Lm9f4dhjCszau2iBnx}{V*W0$2kDM_IX zDKnE7G-jrKjE*q!x(K@e1c=JK4uNnEr;O^4*;NrXlj(F8U`0>2LJ(FQNO*K=gI3O~7#bcI;A} zv)!BvE)y;Y_t{1+NZl({1~;Ay}f$kfD_-F0Z|1-V`axSh{bIDiw|5#ks4yQc!-xftB`GtSp$v*bY zm3-`fQk?y_{qdurz4+nnl>eEXLw|kOAkACm0;T^a5v+7L7vKfh6#o|Me-n4jgzk@m zUc^)qW1Rxd2akg%KtLzVu_+(eIWFOuK(W&H74u5PuYBk+NUwzGVr5EH(BntEO8)aC zM2!mpw#fgpG{4BSmh~9rW5;6hFUP)C`8Sb)e7DE{iE)9th2U41NZL=5K}?I0Wff>@FRWg3oBnV0uPLzlmur5x=IS*oE?u$g>WiqXbHCsFj(j+2 zAoWNaO(sBPIN1Nk6dA4FD&wK^9>aysF9Vy_-56`3@fX&31b0rg&jidx;vM^vuV*{` zFsIjz{Y3|O8L@LEAUFyyCtfYICo_=kB(F`X?)L0Hiwe(BIRGQ;S})AnRrbXynB&`$ z1Ne6zI|q<%q}D*Wc&Z)I2@mj(y@=xNUR5 zS;7Hp-7Vq(ohyuSLFyUGA2b?3`-8J~)g;mXcQ6;2s)HKA9Bq{g?D#(=-e!MK>HjJw zFy1J%q5-};^f!K*_-NvveNX8xE@#Kkze~4Wbfl0PlYcq(waCB86}MmhjZZHAxcK5| z!`O#;q}V606FdAZ+p;x3ygsk;_XHJNMEP5pB?@SMLtRn6#{SDOql`P4@`lD+q4_2M z6YvF{l=%27K>sG2xF_2?-{|e`aen{YN(qRXXN(m6uOcMcBKpfLVSxTZ=YZuej7h#Z z*MYHsVXKazzlpieMfN4$HgWbu#9|V-1w0O3W|$=A4)DhUn+=%pjD4zNo5cC{PM}!g zos-&kO|z$D+RhC*T@Lf!exT@oKFNY@pg*yop|S9Qk$*!ZIo84QZ>kQ`-$aP5YJQpj z4a$Faq3M5s$)V&h90g##J^mlrJAu^!C)#HM#q1N?Yr9);#mn5v!IS>U5<*eyl?OK` zYvL$h$Y%L;Yj-`_T~z4wG}Mbxc44O3Hs`ijvPFNVCXqYZz<;ep`BHGJqI{M1iC+!W zY^+owtE=S7_5}xmgF!YB9>@p62Zdk)CDI4EBVEdx3+&A)r4f0mp&{5CvC*YrrjF3Ah9N z89WLe0~^5SVE;pS9}zeV91cQYHaG{!`k}S!*RI^So~^a~Tlv=dx7NS3Y5k`4Pp{p$ z_ARh+?aED$Z+iT`O}DAPw>G`C>9)6S^!|js$>~YHaQCX87Eh050{x@Hn0|iHKl<_f z7h*@r&&j^jB&Bu!(Z7b=pVV*m{nbBQC3j4?I>^cbs(dE|P4(MP?JzKVZebxioK)(oVCZA~cHrd-eZb(_d&VdRla}=x4?x_6hiRfy{oa z%r|+f8P$~vjI)ez{JhF9wv7u?ot`3q;uFZX(gLa9R4w4;|FrxYoBRQ^|0j`TU-Z8?KT7}q@dw*Pd7^}7l3(~u zmHa^br<~0c<5!P`_TpOy^nXD913NJp`!;Pgvj@TjO8zf7bep)~+bI8<{wAIZLwkv- zzNhq`JMeo-e-lSv4DBVB{+`l5chL8a{-XPw6q7%ZyouyY64O7h0`Qxz^;^{R&HX=# z0+s&XJL`K&f0HL$4(%mZmYDwEY5V`#_mBQ6ZJ1*6quoe@NsjdUMSoxZpCA0alYdQr zlNTQa?Ikz6CE!osKJXe?4&DI&0c*h*AcbVzz91ir180L@gPXuD-~sS= za5zbwBfzELGH^M#0xSmCg6qI~@Y%W#*M0b|`djz*y5->2buT>rFyD8{e~+*GP`=(? zcL(L}kiS2wznfpZ`PJXN$}#5Dmmm0J^<+)qL60+YFaOK)H|EV7>bV={_2rj$;-321 zil=*2?cR0zy;J55Ci0y<;b{N)A+>E*0Qjp8#PKuh2#yw+w&^8w`rMYVfV@WRGbh?R zowD65%GU$Yl0ML@f_e^XF6QlC74)~R&+oRV@E<8gnte$x?6tGmHs?BUzTe37R!Djv z-{0b@pf0vtiaeqXW1qm1kE+=5Z}Qd_@C3GOUgdi&utb8D|8eU-3_pk(7P`x~UjNZ+ zXR|Hea;^jUL8_EbkRSB1Enoj(bZ|YiKLxxFMBj>zyb`=YV)RXL8UgYGa38oI1o$Md zPN1DT0lm`BYqqAC;Z^l)uu`4=Q^Jb=PYiFa61I;1Mh7fH9|$>w7q){wFq96`-)M>U zum4o~AXDt$e?bZ~z5(0_9tTf@=fO)r=symcj|bC01(**W2mb^gfKR}_1kne9v0wt2 z1WLhFFb&KCKL!_qE5J42S@0707gzySfx`&KjscTF8JGfQfh3&tYET3I2fE_4rGj*D z8aNw-5a-QcC}dp+cstnIO&{_1-dq2A?_cjdai{vb?#}D(eB!!)ZMMp;WuwQ%1Nv*AvqYZLL^Q5qN8D?AVptfnR@;-L%t)BYT&;D9(spPzPB_lxO0}q2ofY7NHIMCrsBZu-G*jZzr z`G)PRwA;4a-U)Oe@y^y#kFz%p>u;k+Ln9B>5h3;;g>Us~<|2JC#Yt<6cytcj~$mGGvCuL+FX3cCWm zZ9miGbUD&{x_&3MJPfKDILkwW_}&^!}d0v3aHU_CH=@GQLW9C#mm1ond` z27)0Tf4so=i(mstfj7E=T|qxE2#f(&1K}g#q2B=EoeE(1$MDV>@XeXvEN~%M4&DPF zg8u>GryMW@j0eYqncx&~9ylMYITAYnes~nWF9j|IKL>Y%r-54Yz44=sn^vvh?+yO+ z|FZSbOCK%$Xz8j4RxS1Z{<`F*Rq}7u+Eq8Kx^|V2AP|489ZbBprIFl0z115Ubv&rw zFHt-p8T*lp?a1KgY~>ef#qNx#{+ayNL6wklclCelZ4?JJ^lCZU<2orX*I#_x73$kW zqqbc;LgX@jEWfZ>Ebt6?;7nl0zT{i5eWtknH^blYOTXJ44W8R$AkpCE-HeA9^Zu5k znQe1!+r0liu{S+*gwGe$7V)xko=rSPDfS8M#14OJx9o8^L)hVT)LJ|{v@a5f=LO^a zFDi`jf*ccm*iO7)qJk~-|5J>f?hlpTmVF8E)Fiwn@tHu?_Vw}G>b=;H@g{BYh?I)*8!584aU=!$@j~@XBfh>>%rh^%v3d{$mfkoiw;1}Se0)9`V zklZo&9k>^40A0or6N0fI50rvUpKtn9{jJ&b>HD8Z*F?-(FgB+=dMkU zKKRa(dpBLjzfEs0esj~MM1MN|tL&xir+QH?_E&yhdw2D}XMYpDkBLm{Nj-}xEB~8J zt61Xqir%&T1Uv>Qq2CjwuaKbJzasc%XTJqfCguUCAN{6oxnABOC5+xu4%qflVsYR| zk!c4y>vvok|_BloU&&U228y_Uxc{|~m#MiuLUlZ7|Pke8;M1H~F zfRER6@o&;|x*2&CSri#W6UIIPRU6RAu`=J-t>E+iA|AHI*Yg2~jc%^;+wB3~&|TgU zen*D!@?u&))XQv}bK79` zQ1oBB&Ga`kmTx`(6Y6EQ&AASwzf>uop#P_jZOQzPrhmMD^}VD2Qj(S1CjT<@BIEM? zt)sv3sekGD)ggTA*&qXdx*M1YjIUkKw)oot9$8?Ef8w3Mbl=wO%(L&4xB{7)s)&GB6YT3cL+g zfDb@;yyMIPOmR79f-h~-1k%`R>@$HKe2>`Y-?2^JHk@!Lak0cLc-gKku=7v*Okl@8 z(TUq}etv2n`FW?gm1^ELz~3rR4P-mi5tZ$b;I)+zHqgHv zwQ2pDx0k>2;`+B=S^xI(7oS}J@Lz8GL!y7b`|a=k@R#+!{+;{@XIR!*syW_wA>$*WCg7NA2+o?ARy14cpCD1&Z=i^e-R*9)bt4cbdQ7NCDXUC*#dTW0TU-)&o;H>W&DeC0p4 zQu?LnFVoW7N`IlT&@)EsSCh@Q`4;&%+w$GP^tUP8@$|Rj@28->#NYw?2c-O4CI5Sp z(%eD+ltjP(tL5L$xx5MOCGYYbq5p0qOm@(}4f@-8whho;a&6xc`tL$2dk6j7pue44 zO(Q2N`PJ_T{d8z6rgmk*oj|d~JIC7V!tIrgg5bHR_nh2RG88u%A@3#^I$1h4pxA7 zz(%kcIB1lez^D!1dsF;P>D!;689acnZ7@`c9@k za3qjl`dGjE^;g%vzW$}9o1T0`{oSMfzxB7b@}1y+DRQgDp?Y(d-K#du>*B4-R?pw= z-di2vDPk0tUahT;@6uZx(NATWr*`Gq;90p!9bvv!&dN-)nqg+%_t*p1d-J}s)oiYq z8D+18%qVl6?8*1_d20eQ)RF)`LS);f^|9;=y*Jo>Jjvb(oGDLu#y-&j+le%R&h~bp z#qmPEBiqZbJ^9(*1X{DJE!!f~{gA_hz>`4aRb*4-aGp)WIrh$p_D&!{*v_4R9~sz@ zngc6clqe|uF2WGMx;^$>v&#SVr0MZY(dNwF_b30WtY(JLR`jXp&gDS#OX#5o0PXnR#I`9b)njZ`f0YzXYI00M; zehGdBt^9=ci@!!_r?9;pI(VC-pW~;@szSWkq$}aayIeBkHrFT{S zkyE^@rlcpCmwrUm!`n$t-;|T(&bn5)u7xr@v*p){mA>@s1C^DQV@{9WRhOKY>Rs>n ztq`&%@D~#K9scp4pK_?sN@(#h$=P%`{*QGr5s+dUCrM3d{ua4{?GW9%I3f=@l z+fTuIun~L#gw`3*wj1aUgzkHRK45PkJTMRp0$ITD!y9bB2|foKK?D3?_+!4uBUkf% zE%+^X6}$%C1RsGfL0>$~(O@hHgE`=4@H_AX_y>3n{0qDVK416wx>c{OdQJX|Vcl!| zEq(g&2k*M=u3N5`zq_u!>lXfga_&#AcUtk@gVGX{KzXM^Py(f-I)Xgg+s#Y*zCF?{ zB|Xm`*_S<$c_EF~3b8xNF;zdB>f^rsz4OiV7&;<$*0jgJmb0%-yu`a!&JGnBJ&egdupcZ2)E-@pUlLGX957OV&R!E5`2!$2M=22~&m8o|%OFM#l69sDSKc@MZ3 z2w#4=?%n0@u501{7xlqs9)0G4XYL06-`%ox#~<$a4PUXb_wBMg-)&^hmvZ!hecaav z9N+igQ+0V{Uba0=;MeEZ;UDp@-U^*1q&KZI+egYc><;z zAQ$9;B2WU31yjLkU?DgiTnsJ&mxC+7wcvVi2e=db8T=L84IT!MfTzJT;CZkVEC=s^ z)!+m0Ay@}K0lkjnw_w2#Fcb^}!@=F)9`FeGJ6Qjr`dhK=L-n`fpDUhx^l!KS;mO}T z`I|@emu#|gwH&+b(W@VQ^0JFoC=LA7nY|1(Z2IwJzdj@Xo6Jj0N6S$)!enV=Td&Ty z%i62+y%JuQM)u_Sefd^(G^aT}oaPewzonc~j9)ZwS!MidrA+Mj2+_+qKT_njIn&2GXE^$nZPw4+r~`PQrba`!OX=3K|E?CP*5xz%eWnyqk__})A-q?k)-ePJCP8ww*h-9$!hnG{)D z?++~-QG2J#-U$@5Pju>bi{qeH`d&VxIg7NJ4{DJ=WDY>_M{0~e7SJ3W%^s@56u&{ZWUb`SnHjb_MJ-NR&U;n{w?=jq(gB*yrj(sikH#2}+s1>@4pY#Oi4s8d5;a~(91BC8V zKrN^P_23lH1Qr0{iA%r@;3KdGq_9LZ1B?ZEARiQf5-=TH4z2)y0(XGB!9Cz!@Gy83 zd<52jj1w?WU=Oe-I2arPO2Dz;Kj33#pVR!)q?P#^)=`8{D__GL@NA-*{@0nNyw`@Av(AzehcPv6c7s z`sJi_E9IJde*O`;GUy!&Bda5{$d3-#j`@OS#?e1wd6^?criE_*0ft^SP5$oDMCc*3 z5IP7AWc+7<G1O$`%O-YAyt(Bc=Ac=Ex*DhmY3&iym&3?>?tzx6L2-S9ozvP0xyI2LBPpN zyaV^dK8cG3&crU*@+|~(UgeOP%~f}Me17Km8a6La|9S5zeHRs;-0b~LPU-_aj4n6d ziwgf1IJS*CJ>{Lg_A|XLJ>y}P{qM6ZaJF5~_#`Fq%MZzF?)Qz&3mS!An*a8tI+`Z* zH*~+B?FWI-UueGytOlQe&%g$7$VtTBU;r2fhJ$HfI;a8>a59(&8o{~Xa&QCq4frj% z1$?pQwWnTtY|Wqb|G)X^MHgIj!NNaB!lCe#$CyI$K4>awrqXZB+#J+OEHW(e8(8Zx+otTaggf?$?YP}eE?6vF5IS)ixghoA3>jdds(c$RFx%!^ zxWH`7cL#HURB1lm^Iw*2FlXeuJzNlH6}lLGExP&&AbPsiCSc(CF9LjK>Md6gBjwvY?n{$KhsTNkvK3sS!=TtHSxyaHt`yV!QQYX~g|4g`mS zd=TJ;#A|pfY{E0W68lVwZK?&H_HOIj&1f%Xt2yn@IQxA+i%Z&z%AqW`Ruwvhhs zewC2^BH8g;z#Lm-(O-^zty;iD|K9pvqaS3q`BT6){nNx3yA8Yrx%S-@XqpgUVi84yKcPe#!GKJqiR}} zOx6WH_%z}{X}_x#-v{qV2-`{tYLXJ|DJKHZrmyI?tZfgkjS{}!)<(Hj{I)4G=6imd zcyYq`+KUVNbmG5iQPJNfJ0Rm?w&hyc-owz<&@%$f3_XR0w}8NM&p@QdqK?=n@lH{! z5Zse+N1q7laUoLh$eU#=TF?UOsEP_Bq2>bLR#f;4t@9UezM$KgyUiym{G|EsI;4KC zB1MsZU*-$H%rx8ELFR3#Zf^PQv+c3`jujP>ztd4+y2$9Q;IH6ra1Xc_JOP%0SHRog zUGN_G7<>l40AGRw@DKZf{vZpC0{?maAFtoPQ4>s76-_D)HNwjuW zkhoals#n?#{U-0k+8NZ5&9$a5WU!3Vn0-WEg;qkJB5)iy9#n%Ga0*xq9t018_rUw$ zBd{M{-~QlF;C65~cpN+jo(FG&m0(;Y^@B#x1nvRL!Rz1+@Fw^lNFvtQ8(a)70bMXW zT|ot?1RwtE>3eRx{@QD6i}@yH;wDGUi*#$iCc1w42ym zeTUZNx{XW_QY)=%y^c1thu@ku$~iwUbT5UTHr>x;-=@3Jd=*#?J^&vA;ej;hYxuxr z`!*oFa0d_`SPEVM{|6F_V&Ke&F|Ou5Td}jkz9z7axyBA-76FM^MNk<}BC(^=po5CXG7 zpl5;M42)CYOkn3Vo1lR+?c510y8gO$0^Q!49qDzDWKg7$Yy&e7zW0G!@$v?5R3!kK@pe$c(?NUjr^@y@x}{JzM$~v8#1yxJ}ry@UPR$O zzu?Jd9kJ(4*flm^vuE$BTMM4Yvk?CxaE7Z?oX@J%n6KlnO7(pnMQF+zU&rhVOY|1` z7P{Ir&1FBHo?qIn4lMT!?0mWv#RAs^?qgTBV|!ahAc>2+m}iFc$^gYW8AF_$ORJK` z)XVPz?|=KbS?=vmcGlqB{&@19pvR?;C2vbZc3k_-8i6xu zPX0DFDSheFA1wIdzUO*ge6F*^Ip&t`!XfEkCoqe7;yR~--)SHj$%$|4Z%|~};&pYwv zL$U6iX3snM<~g0&^G>~aC;D(hJJW$2>U5$T)yX&SL^o@+=s7}6lC%RFR@Mncr;QcH~SIta5;8Z82D(S#eous`| z4?Hy~xiI~}Q?Nnm68coVmz*CA&FUXL3hX85yZ6eK?{BZaJ$$~+w1&@<{1^se z>(gwh0nHYqcuGK?ZRt)zn|DPC8}stfeo1?n=c+w|Cg{|*80WTolVX!E zt~VLhxuoO-hDl6Opl|POLEpBOP228Y!0^WPuf4`6DcLu?mhsuqPbVo}06UkSiPeph z+(n$MF5Q&#*)lyp+9JNab(@^#ZQ)y_Ezp+)a*3|8`YCEPAf;Q@+ieRGwxzd8$y*_% z&3gOB7SVQl_cmZM<8)GD9!^U3O=dHl+nSMddWw-;n7OS+(nKk{Z6E+?W+a`S+DIJ4;CemSQ#qQ!S=s}zs9bGv$!*pN8MT`fN+DLL8H+e`#whVuK+zgJrkx^E%< zJku|f`|kGayDW1b&wt@NO1T|9Gsf*(U=i>H4_X||(h-#!hp zgJxeJ%@T)f`1GxK|9;43d5^6HYyU`*V6E5Are|9_L1#jcmP4C=r08I+*Un!{uomB` z?O>$idi3=MYhQo=wwWE91>3DL<>lRkDVL;mC{ymSf%#*ZH8yGX%e!f&T$1*+FlBtF zww)>4>QVbs?REx%)TPlc&4|`owD$G)@9SmCJ2HeRL%lkVDea{UhAHpJ&`cTX)gesz zdDF^P(^~PJ+D4{qM~^y|DZhFB>sU*$qklo6+y4C7u}Veg*P5kUq1>-Mwt0P2>+aVI z&;8n?g>_MJ(*bc4%BJ2evIOy++D4+al>LwEQO7EkwsPfPfB!mGseJSL*Ret;{p+68 z!h#2HY2uk_qEuc@mZgci_3Su%ZZm3%x0d6~G;PmcP3D`WiM#b|X4jLFyBRT4=j;_8 z?O&*voZ>riBCP%*rZoo)=a)scbTB$lWZM`CTXY!-<9h0mu=bKuf~!O9C7bl!D(R%C zx%Xsm*s1&tyBJLn#__N!G@ zxP#|;gRawSS+-e^mgw6oOE>yEnEh%)^X-s#t-*HaI*iv_o10m@t=03%-(YKRJ9@3t zU9CAwVB`EGH)Cck<@HkDqVIROf8JookD~5y|7PL_$VmLAdy#%AH-ht(7;TC3WFHs){<@*B;L1+0G*8ZKq4FRCE;or8*Ds z|1QpE{!e!nJ-RE$AL0R~WT(ifaYD{qC(KW>xayJ7UQXY2shnTJd1q&?S}T?FSv1>8 zTl-eGBques#~Tm#KkkA*uDX9j&yTPC;+T4t5-kV$*J9M?O!<7tmK6y zlgDLt>m&WnEE=C*%5QtFrUQTHmk1qapFixsp0A{6>A11ZpPt)?Gn=0&%Fiu7?Zl7% zcf_*ckKZw<+sB`u_3QahzIEJ52lQD~RrN>OMh|C(Xj@q=KkY>C68KdP%V1v95?&J|Lokaq~blh zL+3qw#ki9eett;tIZ1w-{qhg|HznhxYl5|}UD@-RH~#l@*-4Jy(XU1(zj?-||6G(q zGd|zzoF|vw|4z>HXK()Rn`eKy`gi+OJ+=J(@fX+lU z7w->vx^8W+2OoR$r2~sTc%gXH-s2uv_r%^y7d>>!z$@Q5W}hFQJz&!{zi8NaPu{{` zJhEt~{rkT6g9E@_FAweac1p_Hk!6qW_xSa%zHrR-i)SsZi2k$i z*N>j!zIX78SKKh|)c+^rD+8ihyS4=e=^9FuhLLVWTDper25F>o=nm=bZlt?Q1Sx5i zZjc@jkO7DI#&gc|yzhIyzs$Ywz4uzziu=0OCc|7r0ckGtSD4uBWZny}**PqZp7YD; zH#_(epz34Ds@N-^055~h`DB2TFyZa#<;6k{4){H(4%mHfd_fo z>fw?%EFVi_AND%%#cnd!ZVeiVM7?S9u&E^Um^&X2sa>nak*xjYslu7pTm%%qP&t0= ze@yC{CJ6yfcvI*oe=LLBUzfDhu5{B0JN4gRmxP(-KK~CGp~T4j@U=73>Hf!iC%s|f z^aW$z(*={jJq!U0WB*@Tcflk_(J`Vh%t!;yrxmmt{;<68F7mJW``~9qx7RC9m*%zD zgRoV%>CWH@C9~DWg(sh8flK|*o=zRC5?^ri-E5oX!^=bx*or#Tf^ka~!x;U>2?n+F zyLTzDpV-(0WkKGPKKSqFLDqeaYlQ-|_|~hJZ~cA_la@`>{jd1?3njun0O#_sn8iGj z-$&eQ9+2E`TP>etLiXMG(`KI!7!6~jZ(5+IZ<_ddC2QuxF9505)xxb!423<&21k0@ zQn)w@Z(-XdQ$-n;#4tnQH;wB?)P{m46=V}laW(qNTD7eN{0nQ>ZaSsWpL=!IxyZkW z*CA2I-{gQ@{I6xETqi@9X!3bAPWn)x1dAy(Y@NfUol{rniDaZf1AWQ`yT9_LmkFED zf`d-kd5g{`CiXMXg2hHgRYY%hdtvLxa>i=qE8XU!*3#76Hm!4$R;8p0Wyb$eiYehXp4&xP%L zhVy*7!;b1yPbNq>`%Os?bqw7_CKP051$^{w%VF-zy*;4h{UGLV#$Yjr;@oW#p+qWy z4wK4Z6>Kz~Y?ob1{|V#qbMW2$UWQ4N>ZV(L8|LCc;;EYR#GDH|t(ZaU&z*!f5x^!= ztAn~Ibsp7k*nn_et^LSr*JkDY>)V{1q7qScxQG{SPgu@lOws9K@l?9^k*k^SCs$mQ zaB5(mVRSOTErjBLFJf53fSjF)NRTQ;_?B#0&~$^Y#@vEd1_eWgtcK;liNX4x>Shxi(kzNEpA92UB|57TkkENZEWhM zvO?nbpMlySXJ-N9SNUG3-)fkCwHr)rltc13Utef~oj3@V$}!&n96A++ z4K#AIZt2>8#((C+WOMJ8^x`!Rhm1?Fd1JBcP}n1TZ13R=08dBZK^PAmm-r~Su zn5<3Zhfy=I;mv`6isIa3UzU&Lbq50vsiz@>;=PGSm0M};8UIA129q*K==pDM{sn>M z#$RcYu1k-fOb0%cpsHo&PFX{~hruIR#g&#Aev~KxsHgeYI@yrOWTjdB#NdfS&%)a+ zC~DpLAu8HrKM4WZ!Y)qd{JZFIl;zOCP6@Zsi1H6aJIV9}27*Slq07agxzeM&06Y`X z@naDAocYhveyDB}8fMg|3xcH!_^G`{YYW)efWFG~Bk$l-=&7`1@W_d5~Cy<&+cV~k?bGRyyAZLz$ zquM^;jW7GbNsk+<8YN`i>2RG%`t0f;H(+Z9wts%`W7 z+;cEt;fjJ~B&FDKb2(_s)^^;hIvjp&^-basq$CmdA*0l?W_?4Go2W;lx=Q*6Foxxj z=bVT5CkI-WRBkga?CbdvOI#r}8GAoScpEq!&R&u}P7V9jt4M6aXHiU*COZ%vrX7?R zjSW!Rag{c_Xd68Mzr&Xltk7ynS&$^5=r*(WQdhUS#&d@UTl)6|Z-xV1UANAaP%H`WqAPG% zeem|S+q$K^N+u?Kb@8sC6WA^#L|eL^M(6sUTwKuin>63Ik|+z;JVef!dauu@VR>|r zWMzJ9DIG)UYGy530_o=0!`?IIi+1()JzG(*~ZLp}?-%M`7z zWn+TRdyUjZcID`6s@V;b-N!zq$<0z$b>vD8HUk^+B~jiSISm1rGk~`?28xWanUdl1 zx){C!R5PwZs6TprQ{>uQ=&e}|SL4Sx1bAyb$Xd@VERE6Ct@fG%B=2w5^F7}8Mq|l_ zF=xqocT?A5sj|}507-Pw7db2&*n;$B8GhObvso_z8d|)ke>27d9Nu!fY%1iln65ak zpKiXJX;f$A5}!0@yXYc%iC;|Xxov;Wj3KH3ML`CO+hmu9sJK=Q1<&2^f>S1JKz*L$)9^j?QdHTXEK_7BWIC!UOH%X6nx1hY! z1)Mg4tp=ZS*QashTuvzMd#NgRIM!TL_M*0mnh9bn3CBxl%0U@!8D7RNuuQ8}Q6hGC zeVkM35_Si?Vh1Tf8g@%faXAzj=c1uL2}vHg8^$%pl1yl4Nl}`fUhQpy`yjqArrJ>> zGOu}5%=UUz2J@4v&9l9);04fi_|a%yS&iG)Qb3g2Y8)Bo%JqBS7w_;|tPEb4WgY9X z@7eRNshy0)rn*Pdi+H?+WLe2_pdL&};H|`9QIR#|(&^0*5p)kh(>1DhFPL>+{z4(9 zwsudz9E+Wn)KgJ1jnt6M_@YIe@viXkG~=ZwmZ0jub^@Wc(NrB_^E+O~rl_?3H{vFa zk9*JU`O^mjIxpfQ9M9@7^0kfoda|EcSFp36U$rx3h+c+$cvGK>S<+g3F(5Z^+8h6F zN72m&@@nD88JcsI7eyxM@gsV$(<9u{5>~m;Eu1UZIHi<)Ru)zrn>UXVGUQw4SX=iO2yR@c zzxdr>u!Hd^;u+)3Ue(6hAjXEY_QG!T02u7pIFJ#o1L%99ic!$PP&L*&Leu7^yJ2V< ze4ValX5f9b-1^E@pxQ#_c;43jM9ZCY{e{ElZ2#rXj>Y2?ylR)oe(3mw66`a{eoAk* z!RFL(f-DlcDt_y?-k7g>Q)*bsxh~L*giG(Tom3$j58N>9o*;Q@_KGO2XqXW3dGg9nT~iZpz~cw0<^UCAlSEY`cv#^hSvWwn=F?pMIn%2!ZUDh4u-=#q_xgkC?MJJ7%Y? zzsogSt(L^Ww?kfGRAqNpt$v@Z>QbN@P)pBGyC%FXgS0ESGxQg&IGdqrk_4Zo$vwBmF5zYjL;FGTT~ACj>19x|)ZiSDyDW?q4>w7&Ee1KVBs za>B4C`Da}8SteQ=39Sw-jBu!AK4y4M60^FH{^<1lMwY6zK1nXr@2M#tfkr6^7;FJR zXIun*HOE9F)mDm1n|KQ1xTk-q?57#&+5aA%_0}V&66I62ZjZ!lZ;Q{BOnY*X{63tQ zc6z(8?wL(qP9Oe}8y2Tf1aERR+>f$2`MqtiC9^`ZJ-D3lw`Ht-yX@NoO{eyPI^FPe z^RCpbx^D26G8i88rb{wEkx%Vxo#Bbrk_V*hllo5!gHpf41*Gr`8z$I9c8bwNuxmGq z?cvjwnm)SzRPF~3BWj-DQlnYYBvU>@S*~Rr!BhF{V^P%A))o=PsxZug=ls5*^}j=< zc`%$_Gc_tKvU6@|ZYImB5RwhO@*e4C-s9&&$tfaijNrO{j#` z=&LeVw|bZX3-=SnFX$v|kVI!g{p0DRtg+|yy8jruf$~D}U4I}7vS6OGWqJtH`7K(Y zkuuNd+b+5pe#|9_U~=A==_&QsHzzwG4ZCwqM4#x8;Y#D2+owu?Oj>n*h$GQPhrQd2eVdAdp@ zSIh5=)>?iC?%jIU2eiV)#h=$sZ9C=OcO3uhzMrkGVEO=hB#h5kfRp6;yts>M^g>_X ztA-SDDA*`2t^8yZ8vzlro5>R|tdCFSUwG+oo(P;`;aR-@`E*A*VGgAvRq~0hcI31u zyoSgVb=@Ck1UoOGF;3k%og5$&&G+@ab!6T$qdo7!S)iUs{3(5KE0jy1G`g6{e&NXc z@l}9v;QcSR&11$_ZrTZ%rZ_tpLJnTkCN&Ok8t(7{Z%_ss{idIXJUbnwzVbfon9-wf z>{V5=>vMQvHfTbwu~gdc^^yM}TidIXh3A59kJ4L`g{#%$HhZLLd z&$k(=KyvU*F)=koPKOE(+!9B6BVTA~b6j7@CzV2b%+*%f|E>E4-Mu=HK)vLQK2=Dq zSTE3_w74bNuVs2J{W)1%z1zIziWOT7>}~@XHfj~p_M$UU!%@O3Qm1hCp^QnBebe{e zLC1o`vvW5=jB(x%0Hr~u|8m$FL>Vv9s8Zx5ZILxh9e~SlBZr8}pu+F1c zw8R-;mZVllAlq@J_9Qa+6eGb3!|s7Zcz4RHF3s&OZ|^h8Q`6%S)Ce{qwD|3%s6xSnHO`R2w6A## zZJk@XSOrMP7SH#bxL4f2W9_Fn3@)RBrK& zE>y!SX)dT;(#}ydFzYqkaygDwVzGNC^+E@uuk^!&_aRW>h-isK3;JFjX(@%J(fcgL z<}+~qUf7|cebF*9#s?-sQL_-))vipN@I{GQOxut}_f~|m?A}bjUy{)yAHU&)KQ5U; z+1d9DLg>aS&8*DF3Yc@ZQMQY&Th#Wzw3NLwLGc|B`leCLW^18@aG z?02(zJ%u;EHQ^tJq7!RrqO@#-Qit^K}4|i;oK65Y>t_llX6LO{c+Q;o>0;e&d(Z%FFRzPN@g7 zenvOb@P9szW;h|eud|uP;L%hZ=O$*-S^84Fim^iZn+CeGKAlJHQRwxw$VT4k_F<{n zdIH(4Px-s1kXh(}zf2G$SJ<#>C!c;bzcT04`HaX><_{66VjABKbH`11IQ*t#vX&<7 z-l04YBKd^7TTJm3cGo9!fkZA=D*AYL*^Zzv5uBN4Z@C6u#_hg@fGo}*F~AuY2^Qg{ zi22$@2RgQXA5kL^xj_EvU(Ea}@gJ%@u6v6lBdG3|vp}ckCRvgvl2zczvQhA>oqwwe zkoQmWV^54L|40J$j^BdU*W&%5+3;_*RN?>S)Bj=f^XN83n~`$x8tDU#R&cMNv(+kf zb~83F{zCx&BT7(`Aa`tx8TssEQPtlF%yd)v2Y)B7CD;1*cK$L0{&l4JPd(RO*HRv= zo$=_Jul!%#fZDkoy<e(MjmIY=$!QoL~(!ThBx*0MW}OcyLfLRoT);B1e=sfO#!kF-*S_1a>05GFn6C2&5zELtd$p;)E?sbJnwG}^uOaP5aXh|O$q&|?w#bqeZ+%98|Fyt3exN7x zHXqIA%RjK_zyLHbw$+R7C^t-)d~+{^w8tC4#M9<_HY$AxZQ`d8*3rf9D2n~e2xn_R zdH4?i&WZ2`LP%YUsc>~|s zB z48Uq$ZpRP5-^@P|*M@b<;<>0OS#dou#?rk(Uww{z-I=)W*`F)K?BcwB4zZgp2>!=$ zg6KVu5Ag2Aih_V;0ndz1liqGPBW!*jw2z-vf>^Ujjtuo^UYXt?HTK%dy?6WiACo#0 zqW4@*33V_3QEpaWPN($3acaY-?J^xhxJumcJ179FsAn&#h@)iPAn?;LUm3E$9d1L5 zFXH@TwK`k*8meSaPwP3=SdA^B@aI6EEJBBZ7P5a{$E7#_cuEUkk_+)ftQo7{b2?72(3!#5TU)u z15;Y^PI8{h*#BEL%|bBffu5~uCKr9f3VA6b|b%=yQO ze-OM% z%>KtGkA`G!kf}d_1PLfF!Ik^8sk9XcQY zSlzGfheNwN+YrDkf`IZbt>gczE&lVIlq|?zMsp9M;`ZSqE7`ydm1`&zi-?M)X=mX- zDE~+4bM^rA{XVKjNRSR{@Q-Lzo9p*BH7UKm0TRw0BQjh6T771b4$*udJ+F46wd1Q0R>wyUy!k}+H13~F_Qww)==AMnT{eg;yWg3p zlBlwCaY}tY9r$qR`7~SYADjGfi!qI}yUX1YBCx-^Zz7tJWn1p&W5bU%A*lCqWlyr)*b?6X#gtpA~wH)49A|9T}M zhKkiE+aHJ#6C=oO#s8 z=Bsc_Hx=S?N`fzzc5`<*{ZkOUl3Nt2?&xXH2v(9E8(p;q6bn+d9o!V%HaeQWv!(Pf z;)2kIz0KUO6Z*TCkc}0)ioiT>GB|Mfz?9~Gq{W*znmn&ypVl|dn2?FLvrO$QiJq!e z%mdX*b$|LiOGs*8Zq;=HYmz)9tl)7i4gkL}(^UV>15SyaZrjUw`SEmQ-BNKVqmPr#_}Fr~ksw>o~EN@8^g}{2|FuzuRG(Ba0Z&Ko>>_STS9ShkdZ! zoh|=uakk!KHS~|GNC4Mx1=8To%K-kr)8D-KX1Wi|b?xAgS~UN!97hc}3CP@?d>*>^ zABc(p;_DW24Iv{tpU)K=k^KJx97DKRXAUY}sIPiZZ1X>1-ySQF{4yTk@wGTDwx3*d|B)F z@?2Z;{4v&Slb0g-Ql)3TDYIA!Kf>R`MBU9dshva7@1T(WZt>HS-xz;pTL{rF2;B(I zN^?bwR9Jts??a2`2N7lLW2=3BqpvSgPSVq0c%;~EL?qn$Lf5??pMMF_UB=$syZY4p zRjf9NkRz3``X7GVK@yjA+%Vw+f5$LGn3!w$HR7#~WmMja?i~HcwtpuJHrhmCmz%$$ zr)BrA=-Hk}6q#A!^DZ;!E4$o0(~2PvwC8{3OU`u(ZV>$ltm(Z{<(~jEL=5q?Ltq<$ zkNzUt6sAlM1HO`-m+AIqq;NBGOC&_9C}Z>Ej???2`>3Fq9Bbi zR7mEOFel^ZOSTn?Ct3(%tkBKdD*XO+L?Pm*9e#%ZV4QiDY*{Nr*dNi+3PvV;2^AZ- zUgYL~H%n!F_CRgMDf8dD_>b8s0Jy)P46rZmC(p9}Cy)FyMk9yM??ZTa1(mG$*H4>{ z_|6c2h6EXeJ48SgKs!Yux?i5e) zcN_G_i146+*%vE_$Nw{WbQaof{^>tY{ZH9BcP8j4Tfg5z=1s@@pI+~;MToJbUH^85 zg|$a`|07&fNVx5o^;6=i^ZD&>71gmki@Gp`} zA0LAhvCA$&hhW^c5a0-cV?;7v)Y8cW{QnAPbF0XS!%hv>1kYY|1Qe1%i0j) zIVs^lc1_%xU=YQ(l{W@c#%O&_cQ0RXjkm%}kL)XDVUq<3baj@=W9Z%>IyLSygDR0mNu~;`p8(Q6R!MwLQq{$oe%{G zG5h7=h!N|(6Ze{t5Xml$wU7-erbVRp5i3hBiq%Ct)QZUkNiS$p36+diW0;UXpQpCe z3~f$MMll9pnj;59q8*|Q+@edPFG0U$WH*zGdPn4sD-H&NhUnFhMX*h5F+RJJ4Zi>M z%#SvZCa8c>gE>mVJgtK_^auBAJeNYr(oqTmruxV#zVFACE#t>Fl*vGYFr&6i1F;ESPo1;LbT zR{3%ust;EymFTf@%B3&Kj##;K1vD*1zb=e@Uy7OSFm)p=j&Gh0Y=6UQR^_1Ra%FCL@S_*7ECm> z1`N+U=qyc2O6tdY+b9nMl{xm_(wd5gm)oXI!dUB z9eQHfYd)r?xO&b;zIYhTDx+=(|vxokLND!*IY8xbInSkp-<_+nni(n+Iq1}vPFK%3+nPb9i2iAG_v`TDGal?0izwHGN@RRR1{Mf z#6-oq?j}t49%%=Oh{@4JsFVUHW~y^x9{t@@1=krHjI@&|Nk}O@gkicV8AU3Ty_;{p zEaE`|qvmuU&IbMgi!+?a6fSuc-R0mSs!-4*isIJwgIfxvv1R?Lg4IVJslvetbbrXUZ5=z&e@tPLX)VY6Qpf6i0yGq%y!7H9;O?nUOg(Rfw9z0dagnpu<6I|`$Y#G~{WiQNm(fIX?^^3H2 zGLX+Wc6;VZ-tQRYWoK`*v+{teS=k%)h47z{3#kh7#vD!#Dwo%3UX=db2D}QQZYC13 z$-ejp)`0uo8On$=2@pkpHaB+Ni}BS_o2?!J=siLAYLca$$;c~L^)UB5*YroYHd|x?`u8S^gGv#@pouq1 z)z?*v1+1oG>q**t#+NYodiQ>HKkE#P=H9U%*7Xvrt^zziJ)1H*6lQ}doa(yZ_VdwZ zdzoHkANEce9*1qJ~O*Vj4>&mp(jg)(mQ7W?Z-Z^6CKAALT z5o(E~%0ts41DFMnbb2zBb{2_&s!Ma<1)A%nAWblPgIs9Cc_`94WoLU%R6Qw_8c!z)A#gcr&i!RcB|b8 zw(Cdi%GprbK(5}D6iAQ_!kEAB&&SX9YC$rk^a8hIZ{AI>f+0100)QedZ zC%FgJ30Imb#cRR|&eyx}5;fo3VSuvfn0AY7sMfAr#glxLEt2JKw+JH` z?ZjjQ8|=F62M15m_Ruk{A6ITX;pGun4h<>#0w4F>dna$IM4Yp{5%l0WFQa_&UdxZw zBMy~jQ~I%9MgdJhmp(brt&hc}y}gcEzwI?t=w zOM0wm{Cy->FM=IWZ7R4`6Hvf=AD+2^jxzXNJufQ%t_WGh_4uQreraaRe^fNw+CrD z#`4jWmvsddFqcQBURZYuknQGqbh>O(O}{^K0_~0 zU8p?c^HmfQrJ?h>5J1L$W-$-HMHE~D#|~rFh3e4h@~#DF(6frx#6I2a!Pa=fw1KxR z+U;-q)(G_7OJf5Oi%xMgj6Y zxyp2l--|a3jp>Jgup|{gj#hdgM`zNAfn*WSG9Z_f;d0uH$wQ6-?U)h9yaN3aSCUW^ zuuBp|p*Vhb%IFehA+Qs9uf?H!WyCgZfMZ%jVd;$LUU{X0Sais++e@{zXKd)#Tdrf~8GLU9I>wX9iY z7Xj729NR2(1zL}nA@_Q}o=i^Z?MXGnZfj$-8|wwGWtm}6t!~UW=NhLJGdS#F)#7?| zCY>AqHnjJ?;kjE7R`a?($x1t+TKwuX>?}{QFq&NbLQql=f@<+onqpd%Wgz*2()w8n z$DFA__`1bbaj=FU{(%IDlh`)BJ|m^Pl3;9Gge~^!yp*b62KgM7rTeN~6R3w+K<7iv zo*VvTRa~L}50@;?`49Y1V?WpYrMs%k^Z2N`XmMTjgkGC5w?7)jRTWe68nP~2KuJi1%fm@ zFhZ)E(3VFuJV+NaRC=@;gb=}WQ=%t1)Eu;FA0k_#^O2S9F4YWiH^H!F>X$~Rz^LzL zuk_qgJBF9yk$G0XaR`Ar6$V7cQWX+eC#n_oB(J0DYoxb@AKrIFZyteMyqCg&g#=1| zQsq2YQryfwa$7b;%DVDzd!my?U;4Hla>gN*eHg-_(Pba$%No9tN0Rm zDmDtZ%hY}MJ}#S#usjK6EEj~!s_0f7rsOQ7*L(mf5$oXbm5`sic0Z`fPJ!7vR?ObH z*6TlG5e#-Wu3Zpj=ot6@Y{cYJ0Zf&wm)qX8|LNpgj5$9dBVBhcojgz%AttX!||5{G@`pS^zwswG=X{}LxbSr^XiT(_V zga5^u2qOa;#0gYlgxb}RQk31YAq6A@y-B)-A1OQxs~`nE@!`7J?K#l}4I=8V z6B%hi(~h!MUo{QL4Y=^V`dJntEqEH-yyeU@NGTUeI+I=))6Un2rStY&83>y&it5w* zvZ(Q8kNL9}$;?*@-Q$w#u%x}nU%h<~k;ZR_opUfka;a7)WP5%RNph>KEFg6@TnhoxT^INlge_3M;P? zJySH8v8vTIY*Wxhb5%41-<095iZ>HST+Tw{d7F8~tr~~YP11gX1fONM#;1Ae49?op zJg#@+lBn1uCYSMTi-pGqp3zuITi)o_W#~&?T8!oMb8C&Y#t!OBQE}nx<6g;O+1#YX z5yl8S=&}|y-;9p<8>a+4(UVYIw3OfGkagK-y#+(QzQlO#&opDW>%f8sRz>hxP> zOON%K%1a`7+DaimA=KnoK7r1gIu8j9h=|Nn8x@NST}4%A&4WX|5y%$QpbrD&~qGDE9RC&okr?tp$PInLLLUwMt@OHoK~CbX08oP`E#ONKMnjI0d=QPKS9D zV`I7;2Jh%acs04v)?(*7c}Jt>^hF)+&U))6g)3Y%(#2s4IHypx)FS(y+O3_5W~Z~U zC@`hBq`5V#F@ega%M4^%mbn(n-yX7s>yH``mI*omaoOA z09R8E?JrAmQA&VLLd*23$_eWLd9!ZhFZYanEn%x}0xFlfEp+8-7}be}F{`tTB)SH| zT34)96N(HoH4}~x%X94+Oq2*#r#kOfsl#2Pu+3bAN?><-Vln$Eo2sid1290{{F9j6 z=ZJ4zR!Nb2rIlUbAUk{hQHN2E+(=;b&vshdCREueo=Ca!(3+_Qe4H`6|@!%BUadjunsCd-vRF@6&iW2l-?kx4B@eVqvRk60A6NEFiYFiS7bfN@`l0yG_+Jx^N9UQK%YLbnfKF>B7H z^O9A;>oFbI;#yxMJFNsW{LH)mxqtBBnq_w6*-uBJzGR0aJwZGn#<)g`h^kM;fbm;o zVZNV!coP@uBF{0n=Dv_n>w^X?n`=w`=qM6Ggg0_6H@X-W!m5ZA@HPe_OA4jVp0{L9 z0Nd8W+}~!W>ON-;{?zzH94TD>y4BC`E#cN2HX0fHyNEI~K6R$gLhRF~LN1x1k%*_5 zKl^iusU=59>#A^QvmnUl;JLI=s9|`LL{1>9yf~y1FbD->zABM?RzBxy$HrO&oI;D; zywH~JB;4aLd_pvsB1mdyTT$GMrq98YN+#3*K$2PBsu6k~uCS^g0kWWeT-Qi2NoIq` zywJ+UKwoROviZE1L1cg|RY^ef&dpLc#sb>z<{!$bOm2yUnCrps&$!Bj*q|xS8p}s@F*cczbM=&g}gR1){+Jy z^iO5R1iY9H+iaPfXQPri;@d06uX$hV;WBO~Zv+#6!q}8J6fqzzXS2j_HEWL(o8_de zbKRo-G_=&5U>;0)^Xgrq?l?Nd)8!3Yg-NrADH+Pqs03+KBpl=_%H7Zv3Ie~yPwCS> z1EM0l3=|1Pz zd8tb1|BeW49oN-iL|m3REyot!Ek7fNP#xjN}hX$d}x zk7b+JY@#bE`Z>~vIhYML?Tz zxUccVq`%ki6vEsn9_jkjagy%r&OXz0qARL_VnGB0(J?w1Ei$}%?v%!Qnbe`M8#TtA zIEY3^M|N9%6z#NnY-P4!{Jkk&6u=5_Q!gJBoK5%NQ5Ee>*W- ze47u2Z20T;eT0_1xj$49TlIH;64qIbr`z4lMq_HyOE4ye4N2YUySVdyi`}MBWhcxU z<*2+L!SkJC5)cCv#t4qVC*bBxesh=r{ABn9&ul^@ZNn z`s*gPX;FLJ$ZC$IytxDDXT#B*A&SDcCKL~C?>Z0h#}QwzN}z9^&O>A7ZJ&zG_$53J zvx_Z8EvOpM2}GxwQu~o;G#268grYpz$}kD|xP|rn8T!T(mC?;McjahLqM&nV_t`re z^q|KW>}zBRj1N=iY%TlOvf0u7W8a1m-L#vW74wp9f{mH`odOQ~K2703=OkXjTj zc9AsJ*YALqy+zl4?&`RH8(N}^)Nu64+bjtQkqweflX8e|qVfozh733|M{EYz$pI7d z>Yk7wqtl)kDrmQO8?6yRAtutqjqMO0iF4K327z2%grD3!)Wb_Vc%W-Mf3 zkXW>>23Y8h@Z-;>Jb4J}0WtI~sYyF-gK0i}%22BevshOP_cp9og7!%K+C+X6;kFcC z6Bep^f%wK1h<5jL$+|#Ku@H%>P46ZkF!={!tZXcbHDwmXda-0NLy_54fgP|NDvFeSG?4F;ID7l~fu%3_ zNh*&Z=OWv%HpZo+JPG-*617Enrju+~KQ#t!B-~zrBtsm9aVz8I#cbn*L+l5IVzW{j zIj|TG&RvJ}lXpnyf>cCEcQi738b}`;_y$@)^4>(hy3ftrx$w(~L!r}AO|29`VgWS3 zN76Uq$%?AK5?e6=L#F%20co{I@tz<|Ksam;6G<8BOpf}|Uy;q)dz4y+sEwTvzwUni zrn1aMZ~4)6I`w4nL2t0QEO1jmevU=(y9l^>kUzIt=!TBV^v$$!s+4sY(L6FnNj^3p z_}+e+IVvDcx$vXwX1oN7J73R=c?Rejgn2~tL%3oC&1`VTcZ!z1=efRASg95WBuuc- zS!0n&lkE#=(lXOAG_-$(iL-7=f`1}`j5e1YCIWA7(2a)5aO>)umS{{YqxA3kpajr{ zlW1U+R2KglrC<;EbnChmwI>jWEXvn!)89krgY`q5MU(B6n4bbQ-1F65;1u{l@+k@7 zLyL17re(feR1j@oacRTIOBO}mhysxq()oha5NQX!=Gt3~;FC`1kEtj2cg zMFDlLOF_%ZA!=>?+{Q<9{HuMMR@OcQu0I!;lX_4cOnNrlMq~hi96e2LJvrPhN({`r z7|GxdOOq>hNv_cq4vuWJnOC!AENPrgYPLq1bm4qRV@Th$zL5+|C=i)VSd%zxs+jD? zQy^cEoaWJ=e9~N9)MUe`oYlG|O=cv+Sa8JXle%GDp1}VdCDzG9M<|}m+VDNuDC&gZ zr2_Ar)CepqMDVmC~gPOTWzym>kT@%@TI(^p=wTE=;FJgc7E=x(ut zD!Ysx7n52+gOoEymci#S_VTnuz1U#=sVX5nrVk&&o}Q3(;q}hsZxse4v&mmlR6o2{ za3B_gblsZ#Dy@fnsJKUQl2HH5DkSUB=A3XSN@n2Ou>5x3oJ&hpMxnzzHvIEiEGWE_ zEZYiLofXdQztF9#p0%8m0aByDMk9;-k8ibDo2>9S*jnTun^$1n4 z!DyZ3WZDvWN^Vr&cETuhR_b0P$ zsMzr}n(?V1d77?vK;2Kjlzt?MgzETu4pUXK4k0)O)02E<C(TGC&F@rNx+p-Lo*(D z$J}_OK%94I+Zp5{jbRFmJ55GnodcMJOiRJ7@5q$eOAjV0H_v^^l@~~6bi;2z_eR=* zwh>y;t{RKCBPZH?dbC$02kx4B!kwf0U363356N}sI;{GNdx-yeA;c0TK;+pCqWMsb zMB=?<@*OFAq~|>|@U1)6aB?!#c|hu+YpW!u3BcX`|HwM;cq;$@|0Cig>)0Xd9FCol zLL`oH&ap>ER%MlveJW%`9NTfuF|zlHtkAJ34zeR-l;-?~lh5dK0wvmYOr$>dpq$kHp#CEk4UH0w!0xyD|(PTKU}&P8s2~5-M!W z<246c2`zJExpwUwjX0;-ia4kl6(th`aFM&?iox$q^WHh+yn6CFj2uQGQF^=)7(J%; z6)i6X>;Ll?-QjUW=dkjtDf0W??I26xJG7h8K*q-F2N&H=VW=p&IgyZpz=_L*K-}7N zW#sSTfASP@g4kqLfdvmf&*f9n~!#2Cp?}`xc`MvPM`lrdoExrvvqqzBdm}0`Du&ox=sj%;>qG{ z7dXZwb5&i$B-A4AcI1`WfTW=9#g-=4yd^?g&xn)j0Dk*tg3?ZgaqfP+9oJ}t|Kqs( z+?;3kzZ!)*uiC3YSueU@t+>;uPHb$jc{gAzM`yzq;>FPhH~p$r)Pa*LQ18a}eHU|C z>5F)byD$*W`8*u?7Qsb zn2leD3D(bYhwJKK;JG8JY{BX-hLIgdqZS=LEcw=%s|t+s>WNSzDxQPA2;H;sd>?3( z0o0qS90wWnF2F7|=667hL$k6SgF?cmEPTL2d+1Qf4v2|d)XXoISd()U3@w+SPfIuy z&Lk`s2=;jxY1rGC=IMJ8KRoqCEitl+V)z(qnOxC7jSwW}o(35@QxkQEpoRu*$ZLeP zSdBDwtWWF=WrT4Wp&_1upaKcN&LxbY8nD}V^W5|NVi`Dld>SO+NFs{kyIa+|j{z&Q+CeaXwDFIBtZ zD_%ZJ8Gjj(xHT995?O{wGx|8chqYThJRlV77N&E13M3jvc9|s6x#D`jAFPP2N2dLG zH}zv}?%j{Ouhtw@k)iafLv&I!@tvVRD)oSUFZ77(=A#8icbh{AL{h$jeK7~k%U{M< zH&jgbZX{N0+{KbiKCWPAn!P!Utw%hq4w(hZ8D+eRB+@2DQmu!=) ztn{L_hrd_~VR7wsR2Uf{bu&)*V+%wPy8aP!j5bTSkf{_P(6fAy6iEb&Y=vv7BMqLv zUn3BFE@4b6soy-uWNc4`AQeA1&TDsCjOUJ+$x4wfh&+Clnc8g-c)z0-OTqCml0y9Q zFt)o-%^S~>W?J$Vyjo7(+(y18xK^d?ii~rntmjy$}1}Ef0sV|3YbRX4El=q z0MfIL+PC{Dz>P)vj*ZVraV3y8!_?go-TGYFAH#J|vi|&bsW>OS-uyIi2|$Rrl*%3q z)+_mHi&0X(E+{Dg3)qu;#PPwpN~K#(yK$dYEWlf%q|~!*D9U}ur`+U6K}WaT#c@l8 z1hb7Unw0gJ33Iv^6nj(P?Ms|(l};O8BAstmGW{zYbxZQ88K{83A`R)YDCMVK+~$~k zM@q|A=ETqC*wqCYuicLA%laR5LclL%&IzU7{Q3wJP{gqe4;6-vDi@lN0L=M<(@liM zn1nb2(wF+Zn?Fc$CCvmx-CL4x7Wyk)B1GNlhXS(p$r;O^cz6$RNj*CN|NiqmJ_r{c znym$5lt-eFA*WtSY6f_3XT%Wh$?XhZ9Z5=Kb3Nq|Y?RX$wMyTqC~v_DpkwO+tKZJ5 z-VFC+*$;~cmi~pwBWU&_BJ&`Pv3_s#dPc_Lu-E?_4mP&-)K~W}Q(ejn_~JzJmP!@9 zi?6FzIMb^l*VyW0BcN`UWE;Z_lOkz8@9g_jlA=9y10<4y6?_})t&9#vR8SLeCDW-q zNWHN`=m84hqfLqK-NsY#nW9pg&=EBSFH9(q$brtuCUFAr%K}LI8&ha6mECyRD8|D_ zeC@p1TT_!N>Q|;pDoCUdzTj-jsiATiXSSd{giSMjQ|c5nTLOMPzq5@WAW$0x>KZ9|fpRR-XdZrz}V&?!-$nJK|#TfQq-e)wKaMp;>KSJ-Sd^}-6U*p(}2 z%FFwsXtS`553z6EiZx-XeW^uY45M?mc*R72Jwcyx-s&xUXUIlW7ZHRQV9{ zlI{ohh}qRU`T)F0shaTx+BdIUR9=AXPR=}hSoq=Tr^*p%#|m|CxN#ZK^*otI&t}Mz zqjaWec`8;J&8CySr0;gMAh+zs^YY{Hwcvld<7 zG!{`68bQ~2Ev%Fu4w!Q)t3?3BojQMrK@P0WwgAzvD^dp#V(NAdD(m}PRW+15ei!27 zjzs;@{_D3~QeGxBGAY_jRNf-9Rl5Bae0Y3Q#Ka#D{ivyUU2bZj7@mt6>dYn~W|I zBX3mLdXlfDp!Z#@mVn-F#KFZ2zr^9!6&9oeg3@B>`5KQqE33~wIdaar_&v(UH<|WF zZEugpMc*Lj{hb?QMLA^t$9?ot7O6M0G!}lW-@n){@+C>C=2)UF@FnXryW;${N7rwV z8yy=b4#oG-rCs46#Hb82FBRTZ2caVO?tI=(i28OoecZliWPB64l}X*+>D6-76aSpj zFQlq6pG*3NkBS=Xt7NtgmhF<~lH(V#?_SMYksX`ssJDm#c}JPck7hF&?+%iDetp$c zg*$3vFK3{j%X&U4=EY22&wio#HD-S-`}Nwo;ArbjmpfqSOZU!xA9&YmHMb|#)Y|O- zgws0{bd}fE*=z7Jzu(OnTx|V+`L@1-MP^zZUg;|FL0mA+xeTB0a*@HSj6*j=4XC8@0Iw)?f8iK^Rb zdt{iz<80p@GZAUyrk~@tKz>i>Y=unKhzwM&{Cz8$%YykThr2o3Ze+O^2S7W=8+w%~ zMDNadFOb~fo{eO^&&}YS!!Ipk@9QG81dThguyt8+iM-0dPtu${ZoEHN&L$IZEk56L z8}U?1G%9`FGGFiFa~hFf0^c!KpRx7g8TBnHhV$@~32l92(C}=3N_hy?4ZHu}`Oc zD!w#u;N-~L%xuDseqQEMM-ko?3pF4FlRK7QO@wLk5#$xsI zb4WXv>R&DkO?8S}M|&ddvo`x7woH_mkMH@o$#{=IrAC*p7s*qtqB(Dw{3W(PYd@HTU@Ujsol&*iTkX+&fjaKj}b zPc-54=^x0Ze8GAvjPc&W1IEwW;wTjRKRu)SbM!k%EyD$-YISXT{Y^uSccChcnSMMmb^4Sp4*tVRR#46Z5gXodiEcN`tM5p zJQZNt`SQf-7=G#r`TLj3fNA2%D(_`E;6(s?7I0gO@jtPMK+@9Etoth5mDj%&#*R*P8wL%M$) z$3Tk_---rAY0e2JfaP92>L7oVE z=JOX`{Wq6=`fw$xEyQ>KG?Y+VpL_Y=|Dk`aks#oajs61=#*r|5>54kiozc9kymXXY=_yfJ%1E%8>^VH-{Otp;bHf?w*SKI7R3Wg2k#zdDvt6*n zoElJm7++Qy3_*d=_PqDi3q!`GEK!+ZyDNB?;nNLdLFAu;AGT<=d+W>?Oj7VHDQy&V zk#Ygsx}=_(qL+TH9Tj3=zNC(@MA<7Bc3_*33izc$Ic?1OZTP}U4F&fIH|%?{85PPh zxfjzSxl>T$q$Iv>r&LlhAPN`aK_Tr2-g`MqPSOc`zm*HXsQ7R=qJHatmF)O*PdCk6 zR;O+Qv1*Xok=)PdA5T_{rf_Dlm5*i8(Nfxp*Tw4dJV4Qnd56=%*T{+Kqt@Sms#t)#cq zLieqqbY0}QpY_z#R31SVciLqT3(hT<&uo+PEJId*f5`nN9iVi+}*Eb^f|WnE?j zPJkDRiwUgd-ha-+qE2W4wG2s$_nKgbV#sr|wg^@Q2MvS;$Vyais@8f+Ocs+?qd6Z9 z(5`#ilWog&!{Q`27Hv=OQMnH^T^zM^vSnRRFs?@o&G9;iaz3$C^nPN-SZ;aMXeik;w+tlSfaggcY4^PR%!l2 zl*;$X!41U4M8CoN=KQ@7h!`b{#lErY#W^gtS(oLU80Lo2Yt6#|T^$>cnVP}3J5N}~t zg*;c3=|x1N)Ll+&KQ+Wx=QpA(K3M%0HZd7sOXJ=(mQKy<%M~5+Dx56*@#5y}G!>8U zXIirPX?W>|**;)7my(|~KiLNiTH%>Ye|Fo)O^8#l;{$Mvad%UEwEg#-c7NgGjSfSu z(7L;`@1sm*VIkbWcID~P1xE_BLiZvpz10MC@?!D_xr_GneWB`z%8SpaP~hODK0M8{ z9Ojw;XRa8v9Xt5+%=O!4q)NPBg(F|@ry+B12EXylkgN(@j-Qj+Oymt~MfeDuRXN>I z%`r87?B}DWQWAhmem?ubYa8f+ATTIh3JEC7-P@oEGe61}6!(Qw+oc+j<7HOR$rE1s zv>QwlwtFFwBfy4ph1VR0k-Y8UJ;bGdmFGtLRtZE7zhM%9wrtZ3Ace4g#uon}~9fr3`RpE_l~t<-D3!>p-}fGdu$U$8{@r3tcZ z-|%2HRSKkd5~+2DrD~~#@fSS`3zSO~4D71o97iGGFs8a>y)P@5fsyu--* zyBDOP#u-J>4O*e0gJ$G7nX&aoFc{5c3K#W?;O!~0pt~f~^S;?I4=j04MunbZ!a+~N zLQxT67kr($$K@O>L|v{~BUt{f8qKZ3O-hY}Y-$CRGQXXimMfOI6(~qa@GRCv?Pr@Z zSzC5L<5fkurBYEmVwo^Qj|9F#cryOx;uQ9rKwmJsF6xT^8j+U>x#O$%bS#f%uvT6%z#G z8zy9xIHVAC*>>VNcNSzWiz;*)D#W|!_y^Ph_E2wqJa__I94B+JDr+1R+@}ziX(^PE zsNxif4ncJkDUOxKJ{@&sFSUYtshJ`=guLp?n=_u`w^PFgC%$;S6?ZdOs`PEuQ$4pd z3YS+<+Id~tm9Ip<)Mi%!UwI5lTr~h^7#uoH6P3^#{i`o5t+F7Dct|Y6rc5e9qDo#1 zbAJY96JBwwO`b}}o0jdC-Ezn~!}K7~%DK9U!uR|Kr>ldFJY$aqIID6uU*qQCt7L~f zia|+ldnB|LGMSpM@JZ_49&Ifl1%Au^)3Qhdup!?I%Bbn`(%7tZ_jqLr(H+i#7-}hFlL4v>rMIkiPJWi+f2)>ba)e7yTC~UJDMf=XC9Q~*M?EGNeMbm-o~+N zRzI{@#14|a2>`e4uZYB<{)d{jH&F-|L3xe3y!;>aO&4>$dzv`#^TO=tC8nR`&s<4Y zA`iKZBXoU4F^mY4%=-kl{v$TuVzi8R4eP8|N%=-2OWbPMxOP-Fv`S({*c#ha?|o<7 zbH&S4r6;+rJ}>{gy-S?)K`-J}4F!7M>oF-LPDS5A#-}LVPGy1uRcIStvAh>mtoG#r z6oLJ{Ip*?0-sRg^h}Ac;B)$p;S++zX zO0qw#oGqU=e@+L(}(x?OdYRR!ODN;$+ij%|4MC_^&A$G{A^ z)HlF%LWmyXL+fIxS&gMZ_M}>`+zF5!cT3Zz*sZt|-VBJrN;wz7VMNRy>-Cm2=-0sC zEO~iZ&)B`PN7R$bM4TjAw=+fb7F)!==j*=jlKiV}DQu~2;g4L>w9VE)RQjdL8l8e` z;o_{p6Rln&K80U?UqIKOxB5-=^5uATY0fJWofJj#JT4GlALe1Z`20{A>nBdT$tj-& z5l=)$Q}z3D?cE!POAHRT8}g-H?~6r0n|yBfn9<74>ZUes;@BI@{3IE2Jkxyb1I%!H z$v|#Uwu?(5%E0AS2(oune4kDB+w?v&F8Q^J%h%<&lAS2-UR^8pK8_@+4BsKt_>0RW z(1N{l*wu!iCG+m{#CJPzx7bN!Gi+oW?mNHfWxbd6<6_0G|(e^-*4oO9YBT zInQ3_dYfxbXlhfLR54{ei9xb5k8LmC9lo~&g3YIfT@MwN-7VeCz>Vp9o?gZWCmRH@ z2~+l%fX&wPTr|C9O3PhYMwA>o*uWA<77r5Yl(S)JB3#^L=&mfT(A-;q$DZ1o}a_uD(2KdD6gz zn^+^M5!81G6E#^ga4CeL%l7a#kLL^0?OwurZ%CvTnlR&64NAmx)|MV~+mBq9p>jf5 z8T_!gH^uL_RZ(_!ie|YYLUt(tnMe$-)q7hJ^DucDuO!{Gwpcio>zHgM9lAmA0YU;X zDu^NQrx<%%N(OicpJl9u!}PMA_%Q4!{neL_T;qmpX{ftvei#ALv*-cAqrh=g3|D!x z0-vZG_T;vaD|=Z#cqC=zC6paV=Jl}j7|n%&^}~Q7_x!K#Zr(@T9jw3TK$Qu7*3f+MG_f_;zckjy1u%L#Ba!o_)NS3`6gXz&%~0<4z9;J0_lfjAo3eQ6U^a0cXqnGJ5EP&)od z^>!($Mr&{;b(0rnJZ-_q0aXzpw)VmN$2X9BKd$9CR^=zX`;egp4rMWlfGD`9#Tk8uQ+aXF>f=$ctIS~UTWKmD@qyliyQH_%_FI>fvvnGv4p^N%uT#%1J~;|z zqDI;Ydb*Yq!FEP??&F3ZQr$cO+ZJo}Ry=AQHW?gu-@ zHfil8fR}$b&OGhhZHYy{`U0$+LUgN&tNI4Och@)ChjNG+f1wU3$iD2&N`5Ugd~pJ7 zStf;loI|p!3qy3&YPJy`#6+pfotxPOT+*&`9F^W!T$re+x1MsHt049k^~O6{PKEVo z`ZOt5X-ef20?k8XaCrPs`}d-N&{znA*OAC5Dbviku`}?x0be~J3{$8AZ`aHiFRfExit}0KxJ9|ipMg6(`^QVzE zh8II7<#(6FE>T=#png41`O>kLUU4$}kHU6wa~HYO$xSVeGI&_EyzYI345d1dOhhwf z`GVMz32YL6%bYw0!YKG#To&8^5?0VL>Oq5mh=b-W<^EsIY7Qejv^DKA*w0$j+wgbh z(BBFVFct+E8qywi|NMXX^-rw=3#ZdjxSv`_b+ zFn?lQ`R5Wq8X1tplI2fsB-Z(A|5Js_lsi3;|JlL3nDFJ6|6S}n6*{^Nh=Xxw$Qb_L z<<5q5M^MaUeL{az-%>l8K6)Lu^xxtVpi&LpP=BPlMaRE7?b7N`JCyi$D$~E^x?gm^ z_k;eR?GMzqS~k#Gn_Gc6o&ODIaA5XeIhbfY`Ka?1cn<9Ncq?d@-}(P&XEz*l<^Y;+ zt<$Roy%jGDWTgG$Oy-16$ExfnD$Nr4Kc|geas59pQS`hmM^%3CG!#Qb;WTDy_Rk3# zbQ(!;2&i^1yJs+5!NKkOQ$1w@XRfSC8Wwv_=3s(Be!MRR6<@a0VYqowo@NJ<12SNnp+dtFSOJxt72jO zI{Du+Qasts__M%p+Q6R+7N2q#Bfh#=x$1Z+GF=ngd&g}Gt@x(7vJhZ62# zYRss(1B8Z(A-9Rn%0MQCQ5uu{v#^cPtV~s7@ljbzkp$Ds=GWDjSbwF^H1SS2kUtk?5COqZ1Z)q26;p%K>benzS>lCZ6%HM1F)CNJ!o zFeV}J;=M>}mlBeSh}2KLT7We$*IOua7ff~cgKY99ve8~_xIzxTA|C$--*4Gx=x?wW zuL`+0h@X}ZTV}bEF#Ge%15cMY8j%T&vaaP>?D-0)pTI=MJ1|;6qK3Fg=(8>Fq889C zeBMNF?JoY3%MAfa<7qJ=fiFy$5w9*0USJ`8F!!4>C?jJ333bu5by@zB{5Sy_#0fpF zc9-%zuFGz8wBzVRLZvm8k>w@Q0yh!VX}&I1`9U2?Fwe3#Zm;ycCq9=s+|l>dA+a`1 z5^q6=%hM-vt1VeNO+W!SJ*(*4XJwMEiV998n5TSh_fszqFQi?rGozaKa<-YO(*9iK zr+TwG{ihHbte4j8U-bL)cH{Dd9K)h?+n)bEuWZa6skPU`9WydJPERjp9P}P&r^m0J zdjcM`27lZJf2>AysxNnO`ZmhdJ$Sy~2REiVVVXtyf*a~)GOq4S4PVX}UdZJ;@$g2> z?n?ThS?z_mt|f=QM)8Tw_pVojad<7um?Xi#<&L)y< zhGCoOp5c45Q_KEX%jL_0s!goH8#7DW8M?&$>j`=a?YhCDdSsi1^SFpNW*UrANK41$ zLGtB(;nz4HsT}$)N6xnSn{7WijV>kS85aYRGSW3Dm)g@1H$-FC9rI0~Wd(W5Ol9d& zJ~fpO!P67PB{>gE)T1>=J-(vAoUOM|DLHBUaF4unc51$s@6ZkOx^i>gGLGdtRNb<%9Q*qASh~q*95Vm>iC6bB#WU3|N>0|UXhD?T za)`T>b%h*DRz3%`;Buu_zL2-55Xi}FNQkjG20p>PV@=KLdTK zi%Q%)z?{dNYf!%%V2e^-*5!ol&3UaJ*ZAjK2~>x@@)*qkmX-H=fGN5o>*SDJ#S0&y8W>&2iSPYgCv7=;Na2d%9)sllY zGJG7CQNd_t?AM}QYI8rjw{Ck&@OZBbQFE}DRmzlAbj-VAI#j4}`Po^;&DilFL4 zvM>7O62bLobTVz1!xceJ2iDKaJ*)xMmyA1V(V}J-3(TufIEY(+B zU3*tV_1Y^1JpCD^=w4$R= zCt>f^LafIee2_v=`3j_dE!kbEm6Q8oT>$nz>#Ih)Dh><;VI$y8UkAIB`085IIh@(G z@iK_pV;y8ge)<@-wOUC#7W(s7GttSqgIT|FS@LyP{Ui}3C5sRTAx2Wilr1Q*QC(}7 zQ^f{8!~kcM;5M;>0s+J65a7M+KYnRFLo{nP6BAma zROqt+IjRHFxRu%_;-bHxz9K1vtiV=y)Hvo%Ri*HLn^w`2K#bhBuC`BnA8kw`otF|@ zH&r;P{k^*pnjj`c*@uEg-ibqCYSdAeZkIw% z#FK@Fg0HzOFFh$3RNd!&6^olI0`i$wG@uut8ef5!1lSGDfS19L?2;(0lxx6xwGflg zPb?oD*-VPrbgKcE?Maghn4`Fj=#|MF(%}&*#ONlLR71GKeSG<8twh*p=IHPc zpTPB3^~HKV29xwtK+xCjQ0~P*YAwjql>#C^DPio!Jz`E&Yn2dhs>{%ghts1DwlW%1*z9Pzp8ezA# zNivoMV482U`ZhO3PNlB zyTVy2E|~0jWTvYBdt)I~He61!fv6F)a~j-uv|7&MXM))I1*S71t(jg~m6=W~VUfIq zFCH;N-(aIU{6#BSg|r!Bn{^d|;S(U2c7Vxq-qVR^_xp7qYeupddV*?pNHqVo!Ca?)YT=Y~U9uZI-)i)dK+tTHuCw_vUbPf<^VVS^~|-uWyMT%0;sFYq4N- zor-dZRl-C-7Z%^&${d-S7jAx~%N_rzCLU;@FIguYm=46$cD)_7M^A*fkJHhb1-nk$ zCixp!tWNYdtjI9DD0M6}lGjJ=eGo9g+PpToXHLg)*K*wfu_D*8Hg3Th2Gz^o{M}qS z^bCU`RVf}$!>u_Kr?`s)ww{}VZ6B%TQwOh-tj38W8PGf%=s0%zv%yx&PzQ~l7|~c7 zV=1Z^KJacQ|ZQ}j-UVrEGQ$gAvK{UOKestiYWeb z3%79rNES`@dXxFz16O+V^qs^XMi4i={Z=9=7xQ>647 zv)R;VgQPhbXs+Cj{9T}jeR{6_BC%lA*ExjmP>ZBdJQc(Ytls@Yv)a?FNricK&tDR{$CMscE_Abk(bbKm+%t2n7T_~lo*9#HFe?FD~)cz)f*e5XoCbf z+MsIRu<75uDX>ubPKrBRBGG-|%x!_QhJviI9jm4YNas>7{&kCo?ZZKrfD-6n7x*W0 zG}d`*V9JcfLn=hvIy6XlC@f$pZUck!_+V&;mKuifL5D$2ul$KBEGXfQ&)7`_Y9)h0krqV5^v zjbwbS0gV3E(4};L9+1-x)j&y7Hh$Mwp&46o>24PCS2HjJ4pTNP*;bJ@9AX-+0-)Pe zebLQiC8is02KV_;Q{qx@wbSc;D?7EF zdwH>uzBA(d&^n+Vss}HnbJL0-)0$Oug3jrAQ(`V8YUc3X7E18`Ibi&4pM2%v{Tg)Z zJ^Ad}x-Q#$Ed<$B&OVfRbuVA7sZyoW=Hhs#U)Flf@VP|hPbFUAGl7qo`L8T6^$^#l z`Hfzai%N{QE=r}(8p^oOmTER1ZN5Yw3E%ha74lwbJ{me0Pw{xNm3b}oTLR}kK%gGy zuT~QIJD!AjQ@3eK)$8yu82liwWNk4%S38({4paSlbSl+R)7k9wEa}XhGE zWGv5dxWr<|c|WtWGOlgSWx{3}%VW+pjr7lZ9=Ai(5(qMw%jssd9V1>(~09-E1YVy;@!==4s%+*e?IYqJL66@yk)w%eEvcIub@N2>&Id2R44w8UvS_fG&}-4M#xGTyk7BhS{#Q_{}~lbtbUqpSj{T+>{$W5!w$DHMUxsp!fJof{5RKkS*dyi~l*VVSCI> zvVK=9clqs6^=*+GTYyG*y@B&esGh^$Oa0e_4uu5y)A{E_v*`(Y-IF12X8?->#O5bi zI|2Xotp6_~w+RKi!0(jx1AIoP%<0$$>U2#en92}wOLJjOgY{pD{r`dOESV30>Uz7J z>$ktHqx84wm8$FshWG!NF9Bp?|FAE4V!U-ioyZ4_#r@CWr;6yh(Ds1JmI8a`*7VjP zeZ~snuZ3utwC+sSPO-l5_yk(Z>%X_p z%xJ!xYNjvR#+En=zz%^#XKxe|s!k!-2>lR(M0-(M?f@N-&0v8R{}kqB&8=U`oU2OT zZU}6z6=jiSEZ*}hO6!f#&L7|wx3v3vSva`Q*lQ`ru}H_KT``msxnsP8rPH;d-q}v9 zcydFcWc8Puuf`e2-rxGv*$i zgD*4?;7^%xa-In<4}CNXrM|14qbquuzDug@iA+YOEIv8z?<+i~m1+Ymu$AA@){5BJ z*6w7Vu@)vER@2X9kVx7R_cW^vG_MP1SPScwzDbY5x#HlMI_ed@3h}hGhUY)~ruby9 z8i%s)2jHk#%W23>p55a5A2Gr&qJyRIbLwe6AlGG>@)^AalqI-hUBgo2Q9BQiN`*9K zpQ@f98OKVl)#nJQ-@!a>kPBip>-)_fEp0qvB{CE>Czn8fp=a*1rrwS;&?gNx=g^T( zCi_Ifv5-b?O7Kr|MV;iUqGM$OR-=^iT1kK=s`&H!hK^J~jrjz2R%xY6Dx?8!+ho8h<5zi< zv9rC>^pfafr=u}IPHwx+p3pT^?2OO}J2Tyf9KJVrcuc9nM3}TjppX7jX|`Kp}*%6Yl$I6N(60(F95MJ76KoC6LJz znxK6*ZyimWG;1{jb_;RueihFU>`1a)1K@?K@qm-z0pxr;gtIgJ1oQMN-$&1)uKec# zCHZW@AIO9nI?5|Dm(Ix|df%Pe4p|X}BHIKq&Sul2g||Sc=g)6Da7p=NBMlVR8WIG2 zXf-EF<75g-j7+F*F`C7hj7wboL@M_h5Eqp^4^QoKJM<^1&5dM$KT;=Y1{%0zn-prU z$)O`bd!OJ~sH^evHMWwG$?EL(6R*PH7>+d|p#7ZXh+0CS_l6U7xGub-WtIN1Vznq@ zTPq6mlv>LB06Ak28e%~2pkwh&GF{TM37IMZm?q_@!wg&nQP>wHT}b3(zlI>>kh1rD zuAhC()(^h~jPs3e$ymoqJ1d*sv$=o;FJRIn*>8ay${3BL!a>Vx^G#_{rYIGa50q~P zlAj{c%7uh%Jd(M^1muWBBPo|3$xRWrT3)UL*|knSy+dt121>nwl%-C4_!Fc+Rgr=@ zaw=@pD9 ze8-FQ<3g$@%*1I~lHM95HYLegbmm^;ffxB2tB2kN_Nt{z-tfUP3iH!Ekepr9(3$Nr&@o{XYLxAcR z8_-HE>xhAJBsJZd%g&JW`yl+fak(u&Ut!+@Hi%8PNoDKEEFr<$;Ak=OOKV9Y)9vano}v98tNg%p)g)Lwny8ZQ zv&HhLGP$Z(F6V80#Yyw z`|bgt0d-3J=rmKRW9nkn-MOTZ$%e!&nQdGO1HCh(rn`4O=(eGwculog?sUKOj$(^3 z$i!6$CAotEH!ON(Go^u>?qd41@zv>Pm^HKWeoNtDu>ACBkXuG60go9-^iwVWgDA;) zX-rw9@$Sm^%+RfPh-)0KS!_-v0m|Z5Y+|Chf}X=Yr_n* zvO$MEv-J2Mh>p^fyBZxjTA7*JDLhLl`a_xX)A&^N+6WaEHaa; zW2ZvSq94BO{#IlQs{FioBj-1%j#~7`SbXkATrPgvRrs#UbVi}vvdxo#L%@g=6VBD{ zobF0yDT2C#5-!EPdneMs%h0uoOZHKUI%0H?mO5?CVxZd=^TLw^rv7XO_}y;!L=gCK zquCx%E@?i03Dl{5l{24dEGC3)X$>XCEFP*H((CQ4msU3IoI5A|JKVCCkrJw;*=w%) z>t(kEattiR2z~-X@UC2dOszQ@=y19N55<_FPrZ zpP3hpdB>*qJ*NajYk79|$x4Q!7%G~aNC{At9Z_kO->NvO9>txlCN!MQGy57A(R%H= z-s3ym3kIyr!C+Shgil`Quk?705J#c5)y5Kq%B6q--aA-0?fi2+wR4>jEBl^2+e+`n z3rV?>_2NsT4AgT2!+6_hY(}2#kH`Q6MT3Cj&^M-OczK=7JjfwRJa-%#yzO;UE=5B*7tVf&RBLL0RIf7|n{G*OOg_((Pig5`Qh3K$TX|`-_SQJl9(^dW zPGvk=^#}$P8EWj=$oVWKMyotO&@$2#Urq5vDa%f|FAz69#-|`8W3D1V6)Q(B5y$s@ zoyI!h0>z@ccS!nV*ilqpi(Xyuo2+V6(24%<0x(1UnT{+Uj00^L)whdND*%=+JIfHu z@Er*M6tsTpz`uACRERMs_A@&)1>3}RIQd^_>P~j|^34irXhd8B4Y-3^yQ_W)Q|Zs& z!uhD*9p4tG{17L}V!O|b!hEWh$aw~IU4w5~W3D}%31R11>+1+neFb}C*&!1?qZaks zS10F<7HL5H)w+%koRU;$ zkpoD-*7c3$!m>+Z0YXUH9XSnhd@*Ec>Y$w@mSD1-~FS5 z7~Q#ChEba)E01{^`;3QY;+9D<2lhQi=ZhN+ksZ%u=v<#4sGY-q(l7RZTujaXDY$AX z(j-``%Qu3Ex{PYvWNdMq6Gp=lVDqr46cki6?Y#SW_MIc%PSsvzZ{K4)!_tom>Yh=~ zhvl;&;SBV&gjGqG!6WZpuBW#!dou%Rl%!)y!=)65S)IgS^)GI;#(1cTfSC|w!yD#I z37p)SXZXUmh^lf2DYE5pX%VsR(qQNo&=At0HsZ`R-qWd+Hl@?H>8PjM(DI&jBSt(* zZJh2Up7)_rV6i(11uOCFGfVt*92`*i9!BXkEtojwBt36hh170u5Wv0~98Y$Z?+O(W zYApB&9{EW_uoQor3hf8=bksWC+BT4HcvE>qmJhFUv1s&e|QH(bHH63WNKVuKo^LC-^A?l}v?XR63u1b&JnXq1vdziDXHZ6ID zlC1Ttsw+d4^EX;ewAuepQQ*Rt5d52?PsBg`izD4!>u|-0vjZ#YNxT@a^P`e{Z|!C5 z;IEgrG?H1NF@b8xC4(CIygI1s>n_{lx~pg$j=Y4d4a@3Ejw2T7U5ko@Qt7KBgHV)d zX+~9d#fuWKgDUJyvJfk@g=Fz15Cgu!pZIXR!A-Fba79mnLkX~9r?7V!n%O@wW+Qda z5mrBt16eTF56+QqWP|#QcRu%(rt}S!RwI3?MFbJ@LEb@#cU@+{_gaNgiLI0KM!!y9 zvQ} z^sSe*>v|;h0u?^TG^9<{fZ|o&gFcy7+`I(;0ENA>Tw>qxF%IKsPtwo0CMR_B~;XXp8NJs$UmbPj%^^seK6 zdQi4si*X8t{(00H_OgD6A`tdvf5U70?)By_2dqPK2eJ;z1NPtz5xVqi%s)dShfKoHR)1P@Xf&|NSP`CH+i*vcfwQmUO!Bd7j=bfwNdnPi#%_voTBv+nEP__NkE!QCn8tNlPapW_qJqzXDHfnlgBHd-m#4gnQ;v{fHKD0kd7m&GM4;Q0#gA+CekKm< zb6JqBnX$CpStDO8re~;}(gY86O&5r-Y)1Vp=+$|?6U((QKR(e~n?U9hJVHI9&*}gA z+VK;B)X@K+TzMPL?NLV)WVoO9y23KhA%h4CJ1KgBvKyzCr66#Ep5q1sBbD}5=EHv6 z=GJecoRd91-`H+mYp!{Ai%8ozK*N(j`S;4!;Q8M9$-UopZ+b;ONf&%|ro|GW)uM`fwG*MS zaDLW)z74<{xI>gpN9j0s7>yujN*}s~{f>v|=6vhgZ*KwRY2Lx#cWF9nmbWho`pOAc zgH^vMGSzc^YdhtBG?x2tO@HDxY$dMqFzll}>cicaY}NlyrCA8!4PAMY?)HKf(1vz? zFm$N8vT)*9PCIhaXFPxZ@ROkZ4_9ZNKJDXao4Uhh<4X$dm%elnUVVk9O$e_;ppkS2 zCv!YYr|uZ}zm+SXJQtc0PWU;ha%|Mz};Q(pkQhBpXLr6eW3 z{_n?L?A5vQ#f^Rc&dx@30BPwwRBoox_AOnB{eL|QxP`Oo|LA`Uv<%Xt&EFN~P%c0I z|A_T}hk@nYLBT*gb&VEie&v)h{QmE#FCf#M0G2`1joI@HyW(33iNF7P(H#s!+OvZa z_S0Yg={5VGcZr)DXcAM6{W2~4kE||mf9d(=k@Acj@uwdT{@=a-6Y>3~`JWIk`)@$1 zd!O+9e9-1>ckw0X-2?@}KR_H$S>`2D7krW01|oS1hP2SX{day}m=Z6#gd*_s4%X*&s#l=+&Y4qJhL2{= z(?aiBYUb@damF%;x42zu9Z+f=X@g8A`Sp<;g>MW*)^yyMAN#JT3!SW+=&QJ^6jaC( zQ7h?v)q7dL2eQ>F+~|eeuCHMx_O?|uy*As~!&+3EEziGCRHe3g{OO?^8bNobS!7(f z$sFNy1AV%4Q4mOl$C^Q(H?34I1H7jy#7=wjr)-$a+A!GGH0C$!*r(GVpi+IdW2LXT zu`a>!gGX87gQbin4_i7Lfl%cwdp(L$G+DEc4lrPE<#DfB1_R-)1OK`<`J%&_ga!hTRU*y9+jNymU^14xvpY(cHJ8 zicXr+oK9@iICR2mxu29((%@?m4{dcZHl`L9bF-@I zM;Pjso*%=IxHvPq52i(HgkTxJEvbH{%fK3@SF0*4HTUxk6Sc2V%LKm>l4Mz=2*Jt=&5}x7Y=ujZkqYU&kJR?9rwFUa2nv1RAQ+gB*19ac^HV=uJ}?XzNo^^wk+GqeeC_*TB%pz3NrIjw5I9+C<^AgG z8u?++<@`Z_tv!<>3;iA3_=KfpFa4WO zqjXUCfD(0kO<(hwO3dSEZIey(EB!5<6UQ&WoRqPZM$dk?c{H@T0Q3^D&;MQyO?291 zNG^LrmJ_O{EsGe4Q8et@d8qgoz=;-|6b&AJhK7D6wq$c9?d~E;?|uoe-YI)-M;Tls zM_su=o3g{t%80!#;5pNGGf6`uCHW688%~^Oc^&iM$_{kHMEo56x-vVuR9C&gKr*J5 z&0{E(6vk8$>%K%HDcb2l_AJHYB{>QFR*aHM@Vs!)Ir71|<->g5yUF{2VYQzsg}tk0 zDJOFMO)>i9r?OGMiLj@h_FK6znIZ>-c3LH6RZ+X;tR4o>KD#2;5Xr98rcTu7N_Z-u zFaDZLrZomGkeo?H?a9%i9XqJm&!$2KA>u*PRzgW@6(QWF<~3lnho)srU}a(QojQnD z38h6PXu!2UDoZSh{|aJMlrr~fbU+gSyH>y(rDQ%D`6%7rG@V>jvL3i93_)f*!}ti3 zMtPwvKcEdMb+#s3y_y;mFFh(1D-GaSMurT6wmtG<0%VH zwrQ;$1(<}K9XU62S#Ka8zq9e37R$IOQ=kak>AWJ(`0U=ad?Z~D4=IL@qGf*^=__>3 zqYb@iD&>KW&Kr|u@7$vGw)#S33|?aKZ(ddk;9}s&o{k$C^R7#5~sdIHRx- z2R;}0<^U#NDcv7hWiqZOYO7fM}V{Pxw5lq zfswCZzsSQ5Fba$;%*A4yA6G&pm3HPpyP^WK&rm|?50Eb=O~Zih@a4I$iLb(Q zDUK^0*gojQk|&RYQRFWDZ5-9*ht02+DkaQO1AVbxUlyR9$dKeZ^li~ys7oARoQW6o zRIUZ$NQ8wkhWwyZT~2hR;W}5ACBoVK~jPAFQw{5;Hg(N zdF$xZOruZla4T=LTVZW}4AUZ>ID44|vIpR{2zaRj>ClJ5AK)kHc6oKDN|n5T3Pcs#woNbLO* zdzuz4$gxfN9s7>GR4WFLhAn2(^k1eH;Qrz6rVDLx{dkA@?>cQmRHOJ8v{q<<5+hO? z;gufKxACcWi@`Op4a6}%a786y06YG!nnO2l9Iu-@# zn@JXUxG*!@eE^Awl5|G8})QgLRqbqDuy{>SF zN9{Dw-8W@KLPrPGvM8ys{V+vbTj4+yO3}wL1r~_86$TyEyPX;Ft-nRMz&eiqpk@2h znDl}krfA1uZsCtkkjrwB&WFCJ=s-nI&%gJNUSkq3UHd?e%^F#=`BLDpM_o=+9@PI4 z)|<}oRe(6W3-$#Y>R$`}c7j7u?90 zRr?XrSmB}ujiUk_ra=+9Nbv&qt;FF%nv_o~z_Q%3QaQzMy9a8kxZ%Q<%f&cOKJ8WUxLBQ-qH)DjHc?k5X7C?(6)1IP=R8v zD;sggF!!kx!VSih&ERm9z9WD|jE2)%#K3#O4c3i$P>g7~T5mSm75G3+3T@Oru&`1B zfQD^8(sUhr4-kJ%s)gT5S#{*+reeI2vIqJrMfEbAv*F-dA|vzVk?*>X(64onvc%;E z4lGt}sMW>j(GN_97x*bQ~to2*%X2G`v!GkKVT(>Tm`(cC<57w=tn$SMY z25nN!a(Lfga|Ly~hAA3dK#;QhD>S{Q5HD%l7@w6_H-E!kN93*7olAy-@SC1_20UH- z=IQv_b07El^L*~Uk1ap3DFAb%h)uJaxY;kX%y=9X82JjL=7d>*b$a&)8!mvv3hI8_ zN#X4&Pln(%Fi+Ek-JxD&E7@8-r4ju@CLKn4kMjF)375eJ=?S#>yFs4$WhL6j>$FKF z=)yF~lFXh}sOPS1E+qbR9ast0(|Cm*{JZ3(q^fpZIEm-dz}9!iC8fMi^M+j8q%MJ) zz_-Mv1bDvnOJt`;ksk;r+D-3#QypfO9EH!S`&@#AW;hEtevVydPO*0~Ou6t}?O4cz za}Wea>L)4jzN@3z1h57ZPVL513UVoV{b_QVVim5hr79KAgYGHkuqIfdEOo{BOZTPP zHQ-8k|GMMwZJ9(-G2&y0KH*d7Jp!YniUmM=V0UjfZ}}OkP|ABp#8f$;c!4Q&5fa)jrsE_T7K-AL{s-psh#jg*!O}R zb0{XpAN*uAw)lpj@q)1bvThyilhoYg45yiE++s*yloli$`%1+frib(8Nw19zRE+7K zbeYYb_l~%4C%9o|oaqLKPyux z$|a^KmqWgOaCzwEoQFdYuA1GC8O;2U?Tx)Pv}_=mkLajhhV351H4K>S*4nq561|#Vk6g6NsvBj62q9v z_D70lw{bHV7d7#5y>ee@U1Vkm7)l>X!|u`>X{=3jF?Ij>=}Yz`>kr>|tizf_Exj(k z0X*5@I!c_1RAAfWHF36QQKkM;A37+z20mPV3ya#}*N(F*IZ}K%%OaV&LoF)Rq?T_m znW5f6^ST}~QUPlwEJb6=q~;UZ;k?iR zQ5uK%1G6DsL({t~eV>ygIlY!m)~|C(9{F*`%m>}0j(~Z3=U6LIs-$GO8c;g$0JO;4 zDN=d1n4m^u+wsXBa1HIDs0_uL9A z%}AT=NrHw#owe))F&>ymCkKXfmWL`(Kyw7&9(tRlGn%##xQC2{v)S#k@oJcN8{p@# zT)86~R5s}gBn~6Otch0COpcv!L^+zL2K1;D0v?STfc&@Ns{vh7 zpP(TK0OyoYiIu^E-qOfE{t2NHw1a;U)bZ!TJgpd|@8GjD1BOr_mYo7leLY#qo`BIJ z!Q#`Vcc8??lQE8hruU4E_NTA^N_r~V;jHQq{Z)xOg1^@oqdJ5%i2kwUNzDB z!A&9)9uaVMUC)97MYo?a(gdu>Mdq#tc8R3^K_2Jb=X3DuqmaJ?B9t8Q+&g%?r$>{{ zza(buQxzZ!>cid36FJ0({;2pKQ#g*7p~%t*ZD@l`h=P0+{roX9J3lFaZ^xrCy}9x- zqfh0Tid3AEWJDT;{_JqNuQRuUFFL=m$RjDKQI`v-^2@l;08=5N($Lf(*DWhTH;t_D zJ%GmMlG}UuKtoANb8Z(eLE!Q@XNbPZVgJ;o@!a}V6d>Yw@Kan&hA43&wSU7!g16!D z-utoHQz9`nVQB9czXq3o=&J2y(B-WB{{(I$Na&}l+5SPiRic*%jewiJ{>PK+an(iN#0)ZaJ=%c8^L{s!V~Gl}eg3NPpLdAp=vL&{4;lp5BV=|Ql$Zqy=^r4aTfJV_@AKa=Q|W?sA6I~$B)@#1gCuP z_kU~?umK)I6zu-N-+^@Q{a3ll|5ma1BSV`N&pzIGil+w*UXf|HEB^_lCP;yHG~#9p z0bS^HeD1V<%DVY!WxT?_cPv7qqqSroX!bn?f~K63qV^~M`^a2u#XS8XAau27?gOKb zWfL)Y{)9c?-y5SD)4}}blRU!mW9dKjD`h}y^EhbM{PU@`40WxP&Ho?vw1raM1!8*o z+-d2A-O0ZW-%DWU&jHK%d^bfr{9jug8qrZZAAJ0l^3%7c?Qb=Ezn?4sl99{J=eZvi z#;%IB(9hB+4YmWKm?a4Sd(H)#YIhU^{)Rs0&57&GBLMqx654Xj$O?4LQjIZ$EAQ|- zEnfSAjD`DnXY2 z4*+)KC22pN-S&8~@F?`9{Isz(kcW+eemeRS5ZQgj9QN^t5?3`yeht4T{~=*!ybSl$^rKCYwyLz(kY*3xhfy+EVUG*;!cEXbG}kg~EMg zv9MlVWFdtA!LSCbbMX+8#eXCD&ntDsjD(&rFMntfPlyac+?ldEYtJ!>KYfr%cWE#^ zJlFfl6F*Gzyn^h{b|8#uwwiDjrU@mb3DC!0YhW)IC|MR&W$L3grPS=Cmmh141*iU) z)C=b$_JK_`GzzY(j7MRJeZSN%e`0i@_fDZ_q*jIo@OC+$xG_l`xt0w}`a-{e57_f2 z=EjVJ{`go}Yc8y24ijB=;sMocfe(6Mi1)Z7!~Af;5=s_HRteT==n0Wxz7sFW$LIce zRgYR{>1kz8_-cmWsLP1mBYu1q0=mA+_uSE>Q6X8xyb%qPuz6NAH+{&`WlEaG$ z@KxS2uas&36{=eyDVCL`h02D|H)`a82^ZlKtjppnA|Aqhy^bIC5<#FudUWzOu$zbQ z0x^f%pACW0zbmqgkl|GR+U=+KEPka=wA5GFQz*t{iKpGn&`VK(j1pMB|J_4A^g=A% zov9O23tW;3HlZ(zPHbkGd|87@7NK#k-6!k6qNCbzzw?gq^V!GHHXyJba`K%s?#7AD z?u)ghJaN$+qMi0#OQYgfI^yZJG%bI;6H>Lw1BILbMv-Rl%@m>P zJoRF50pWCcA0{|!0$ zr3srszUHYUYwJa&11o_scawTKr;VDT4c@NWn8pye`6{WoKIn0g)NBK+fma1FHaHA7 zq6!Gym1-_05A?sME3;%XL8CAAKemg(07LrUjR7;L`&msiK+=Qo=&kZ2(7SZGdFWOEg1~=D?7Ku4_DS^OMi&B35J*cXL)h_rbFw|&1Rqja zbo<9(MdIUuT5M_Ks*w< z&w78WBt>*;HbpBVBMWZCCF||@8W&m)X)>;%&x@ra3Y5xrsmVTN zlWfemTKa>*b3nCCX9)^zY0lyI%RoTK)cv5(m&HJmh?=&vAE@%4CF9yZJw?Ql#F1SV;I~(|+{# z0HPUf$3_i1R079WuLU30@Cro~Jb6mLfbcVvVatf#d(8h=2dU_+?k#Bm{W=D5=WlZ; zrawm_2V`Ug-@*-^oT+7qM6SPu#l$)w98wA&sXuVy~|`rt9j@)qbG zQM==(YM2Ap35b-M36LeLAf~&(n7f9hXCzs&D@d-Tkj$xFGK)uF%DlQT4fcCQ4jogu z6ZWCq%-wY^>}Tb31`iZv?1w0Ktg2Fn2~Tk+>)X6-13ptmQf`|{*>1E8B|^xz|2i}G z)+_K4a)kqW4cY)w-NZtA9)zYq-4EZq6e?wKd7L)D;0+}c?2R1TwjF zg_;O|o9cIqhnI(~y5vi09j@!Y4*gscWO&US3Wka|S5)4r*KY0Mut3AsYZ+Me3O4OS z(d#c9AxrWl_GX6nO;^-!9@HQ(WZBj{Wh3vKkxPSQ4_J=8sT1O>EtkWxX zVx&5wDS*lJkBL%h55NNV3PRbendx38Fy}?>HG}gJnFmioj?;a>8CsN6Z}vUyopscs zlcRDWz6G}(eM3@(GKt_QlW}SyZQHY6D}L+HXQrV(6Xbz#42dZ9%Y^1@e0Z)zp@&rb zect>rS2G9?TP++|GGZu+;7_QA)6o#*YbNI|Fzf$F`z^Pn%_pCJ@2crD( zP%@jQP?qgELJkV^z}d|F`HL`jnpE&^kIDFU5icAytI(wF zA2K!T8Qbl~c30{i zU}IL(+?|K$cNcuZTePF;!$9JpOzHcSpQr?{Swk;>gdN>~=5E&wOKO+4WS!?--Z~&6 zUSJ?+Ks{sSrMHv@T#c1vasrGZyriP5zBR)j(!V!oCTEZ(G=2<=u7W)tY`yBtI4<8q zsjvFTj4@+(=6cSpYr{d@L)Wq$^Hhc6q_Yq_A&V3u)u_UL+b08`fHENT%xnfv#KUf4 z{KqaUDJ^T5r%3*_&9DxjD||{pa-U3XY54fW%MK%E+%?d@$OET>q*A3XDDl;R&g`VQ zuoc5KWYf_`nFW-U;G;KnDkN!Hs;X@`g6EBm3$L!tSb2>wSQ+%-;S!r@|1$|94I{6W`s9`gsDl z!4IwZtxTg|gW?UPhbLnp1HT_W!1?ZxJ!Sh|Vvo{o=;nOTLAKkAq8T3jzc4?u zaD!dYOWu_>3hf)1m~jLV(iRG7TnRbb%f)^6EL~x1`}WE!iF&6ACs{)E2SDc)La#;V z!hRnb(F#XnuG0T;WU}_NUH`~AF#o0w%t&EV6LJYh!U&tuH0WfSu+-)%_THwDRCr86 z1}s-i@DvA`kF}Oj(HJYTcOa&>sKpPba;&1Vv^#}-Mhp`z)5opaGzliG^jzacd&YIaAjrS+B>q0tr6 z^d^@*gG;F5?nbNipuZYcYN=dWe4QoYtiTRSr>OJ7@+X-++N{6t#(Ycfr$mB@3lECK z$$Z(nYpuO0!77HfvAtDJcupwqS+{5p@mXwOSC?vKBo$-2!xrMBJ|E{B0*jN8%Nl2J zy$x|jWp@nRfcq*n{k!>1l!8I;`{?X1+vsO(by?|!kgxt)O3|68D9%e;^K`)e98pwz~e5oYv}Z zw4_8cW4C1&FH72qEJLIFZ~b^NqGav(b@r(Kfz3xL;!r)8hmc|eG+E!+ETQh#&*k_V zr)urXa(hnjuYC6#bKWfAiEE!Wci#K_^dgl@Nu}Rvm7{Z}H=yF-`PHHOR!i4-;QgAH zWCmOI6k`%M>vz9rF-NW?mUTGCxZ`il-&cp1zw(S$HzX2Y3;g<^ZYUUYUoH=jdZJ$J zN0F%Bcq{Sit`W>rb1}6l^7gc&Pey*G`N4Hk)brK^tQvLqyDAnFx!qLLo33y*hXYf#%VvN^;wyqi1G_(4~Skn$vq-o*Fpr{Ma0kPF?tEisw<;}sEsx&UQxifF}Wc7rGV z2W^+Cj;dd-T^p~idAfc0TPCr=SUe9<+wesv|oshko;9O zcuDOt-xWU*+68z<^YOLviFEaea=tsJG4TU~28QzFTDr%>@0RH{U*QL2ZZ}DDp@DHn z?h*d;t=sV5f~B!Vn%APRYJ14wMP1^uPZ9dmpti_Qif44*rhU`w=S3IsTKEDs06+9v zOT&#iDHOIc_c7A5vt=A@7~_6!cfQqR-@i2n_%VCz$c}=z$|3$u$tSPfZ`DwK+R6_FBN4%%N_kA;gO&OO*K9ESI6U?(}@X$2>i5Id@fr!cTh!>S63Y|un*uo+!o7M~Ej8n%(kIP)!G=fE2C@jR^5;lRMg4U#Wh5Y_vP+U>!d&CgLduoEWi{ho z&Nnk~M{0}2$OkOh=!<(iJB=*iA;9|W4nrcaLTS9)2sE*Wv!s^=!>ZK~Jg94@1dbD` zQSdOo5waFFHF@*1j}x>z)l9_*=bQfQMIi7JOt6^H6tGrP$H1f-rT2t-+kCSTTs#)x zW(bnDymF*Qd1;nXr^lJJ=IX`84RPVSSzeMcWxYEz7pF^c-R#jW`<45^WJ8WXdsFMg zRhT-;Gy&yb8!1%ku5ccG-6e>3cuSY*>T~PmXS-NaQ!_M4=A^=nHno^9jf^NCCuZ{k z^0Rn!i}lJGRw7E&O_QB#jZw}7G|eC_& zo3l?}ev}yC@)%)I8uMU95F2OoX5=^fXTBZ0Ddw2o4o)d4m0#(2wGAj>`b1&QXkXC4 z>EBELamTTQ0hCoKP9W*pfBGch2JV+TpsrO$DVML0qh?M0wZNzF zm})B0Q#X3#qF*Y1^uOdmI)*US04D%b7|ne%^M4x#0c$2D*-QTm@8(TP`R^b9B_{6N zx)4hretc5#&uYHs{ue3LeLKaQbYyg#VSf7qTfOun6ielkYZCwQ%6R~eMWC)|VPy0| zlLUt~dLBVMSlRzv7%~7!nH83%`rq3T2--J%ORF@|jMBfJ{%gZ>a0gO2@6P}}x* z{trknh2i;P6zkvX|8pzQ8qw$f@^F zmHmH&%>`v%z~dJ|JAdt85Xi_22qYzWfaSj+kfRqnp4Tn)@t^TrdF~4cq)O*a(|;aa zA~zXuDPuKJwmzGw^!ooqhuEW6pu{ps(@9){G9{UL`KPz@8+0T6-2rskai*5U(33Q5&J)OkP!Nqf&Ny?a2M zI52A9qHqL&6+IsV+&r9tM=Pm-EGypLoB0NtYOwe@Mp|EUaT}nYdK%Q=_W;R47~wI| z;r6bz7`G$j5HA?k!qI0!X3Why)DHMC0girv+$hh2U}x5TYWs=0W(pCX77D$Pqr&7n zU#f&@5A}d@0VSOIUgsnr(0cUt@U*|A8}kDkg>T#WF@b>n=R#1%2p8LR`Ih_ld^V&g^R48;J5Z>c z1FF>Syh7~`wAU-bO(cxXw(G2n*CO0zaY}BxrBtumBFZg(!G zHO~2Oyj5r;qp?@FG+_w+!uABV5uJ91U;i^EO;|M5K*lr3d3 zr8eoS_#16Sw}>kgSH7ZG1i6_>S@l2ku7nnYqm^yNG^;?xOCD7pegnz?5?c;>%;e&J z$a1$SrH3WV8_`GljbrOhR{oUPSb(g_7le^j*zl(LeQ**;6>p9+AYo0b(#tM0rMI20 zIlc;9V@r@PMGN#pDSsqsLmlhQ%O=*(X9o}G22aISemG_1LQgX^v*`l>Yiq??^9!i_ z8~tYLw#YQ&Ei#Xn;_QR@$i_)UBZu8?R58$7#; zf5!I7(t%LvxY&>Ohgw->Jkv5Pc9tm>sXy2cbm(3aY>b7*fl>bTX<0&=jz?ROPNcqK znsI1amu9psa0H2nf%I_cZ}iQ5-^8tXwyAuC1-?H(FaLnKs~Q%3UIj{1SP=U%MiOAIqs$0Hqm^^Fzb=(rFWGJS&A`YAOdaoM{@Dyx5r}^PU2J| z@I&n`e&c0ohV)0L&r9>(*;JPf=er?Z`%g@EWCw&e0+B`w<%K3ie zNX9lIw%0FCDRZY*?^&&<>+J4A3PM_cUDu9s!xrcwZlvNX`R0CgGYUc2*`iF;c3NTM z;!oJk5=`Jo!Lzclut1$di%LIb5GD;NfiSFvpnx|cP$sz~7WOl>Y8-6ml`r?H!V*6I z>~;?aPxk$#aF*L)dC;O_c^T)!0daJ~c>cz^-RI5OCn5-vhnu_Rd7#$_uhD^?#(_W| zW@wi6V0yI#rcMz8=g>D;a0qHfL+Tk>wp9jee74{ z@&$yP=Rnx@Km2XS0q+D+KfZCS#hFfrMSe}9P|EoLOVMGFkQ`fA>g2ia~x|qYCA>ue3x&nhA%DP~R z!!I>vFaNBWv1QA^Z9Z`Ez3P2;Rr`T&Ycny`$0Ro+Pg5H`D%|X5X(BqoGpvSUGXwzE zw7WprW}1F6wT;Sic5A`)!jjQBsmAq^mPyDJgz7#ChzjswYOf=YiosNtW~64LyJXhm z+SSO=E!*&({y{!fBd}t^Q<+i&E>pwR=bG?!U0n(ETWXste!7nwfo7sNg%AhI$HN*x zNd`a-;6SVm3q~=b1`K2c2o*q==86&r8pB+w22?Qt;fBn%hq*HP?`MynTw%#5MmsQB zCO!0oUtUV-B!I=Gn`+f$5_{`~qgr&cOB8Oyg#`l4$E4uQ7KVQ_GcB6zpWc^C1q?TA zZ9S7-7;(|qr{UKa1#|BKtA2Ik;G+kE@SR9Bd-C|J!XNx$(>mh{hmMEnnW(ho5^KlQ z(i?${1QLrmY|^Ep7HeJmFC#z1ZJp=|S;Y_f%n5k^Ql`$(#~FzdI+ZWrR9GxvMtsJ2byu`dt*t_z38o3Z1sU3X9I34sc{g3{ z(xPi2)MbT-#ar6E(eyYiiyL!R#*f6lL_#^l&wsxQ5s@f|gv=<%#zOfxSXR7M;p%3Y z4UWr7*6@9oY%n_ozEDt4BJDm=)l?GJZTja)Ogjf!Qb_4Ma3uSV?2x;FQ2`bHhgW|= zB#G>SsG9{_M%GR?c`3SFa#sb3$eEawcN<7A$ohRtZN>y8+JU9yoYK+)Vp&+9R&0mD*6cAWA2@F?&XdI8Mvu4BAktP^K51Pz zWemM5XtvhnE}EPWZZpVCf!Z1%o2KO4P+5O^Gu6oxj~+rka!E8`_`|wFgfT?`YIuE=_W7USyJ>TiQQhTn+0k<@ZD@bRA|{-za9Y> zyJ|mDehbp+yd3unM*(hL%;3-LJ<+9w%heSlOnt8Rt&`S#Cd`-MiBoNJK>GWyB~{|i zVZ)}qY_oVpX}0A9OCglFJ_#M$t6S@mAuEAuE7{pjrlqcq_Q_H`D~`!t{14$INrjfW z13K!5vciInUSTy88(9Ilwojd#J~{I65hmtZEej(X990at%+c%GkwKUF)f;PX>E}%B z>Hc)kv0B?G(hknfmv?+x`OxQ&Z>n6FZHxy2Us1wvCm;tkeLt^aq)2J)ZPd#3+Ga|ReD@ei;jsE6W5fFk zx)1KxRKF{fUtHII1ea4r?)sZp-_2JlD17zKzseBKA4pj}_&&4O_si^Headj7IscV+ zFvgicy?_I+MV1~xQ*9*aQl@5k)(u$+(G-l4xPz#<__ltQR4ulAHv5|>qc4`Gx~UTB zp01UHec7@jGdo(h6BmYG!UuD%u*&5qR<>=$FeY!FY?n|r{!RhD`~ry@yHn}$5O zbZW&=#NX7z0f92_n7o7sYbSnErIsq9NFgo50nG1M?LnzT40%hkxZ{_I3PP6s2h)gn z;{baJbYGoolOoK?JY0Ac4`DKcCu@w0lkW){4QG!(o$6q-dE->AM!X z{8vb4*L-8Ny>(@?n}iQMv+p9DGA``eO-6~BHp*umz^X!|7W5tIUqShwsUrPG9L1mhd3TBb*VazD&`eC}3XS|g z1=^K^7NWc^Y>;{v^Cyrr~WUyBHdcktT=wxnmCslw|Jfc|nJ+tok^Oper3g z-eJ4s zEf>;jDqqro^H53L(m&hR=);VJM4}1VhLlPX+QGUXSVQ^i(TH8P$~sUU_XDu)FUHFQ z8{#7HT~g&3hk-`yqrunc#IPh15pEJQD!E_9D}BZkiJxNRdRkr~Z(7n|Sd-+F()}Bu zqq&=+OT zOtB1F_>^X<>(ZCRt-70DokcD?AtWr&?2We+Wm-Ms0XZIwrzaqw*I?~Uv?1QKiCQvO zc6Z}!{8EvP=W?ZskSFFAgQLqvfG=Hp$ilNfi#%k|JzskS4OtNZWrqi<@F5bN1LZW< zBG&w7ux~Z@K|ojZ!TjNk z8joI(j`hs7*~Hs8UwZr<&}do8nnZ)sC+bN}TQPHk2`}5()_W&f{|PnHhIvV?$<*uZ z!49lH^OHp#*R8HHH}aE>;g8H1fV^Y1#{FQO?Xw@M@<0lbjxub0_T9C&7v404~ zf~aJ-Mw*4YB3ae{C6~~Xy}Zw&OHA*)TMP`9!AhJUB0m}a`;~wv)ik=_WRF0hGd`a8 zzSo=m21a8ZUklkK;)Gobz6&oA0nxjb+b zc<5EsQq!Fihiyfp_17;v{zX=kX8=_l*4%60w{TBWkkE@{{=WK8@gzvCBZ$V=C)>mS z;P_fswd+5fR54uoif`tY0P%tG;RnFq_rI%60Tl!2N*$@?x*53K`!6opajepQMO8A8 zUgxMiU{0)d`^VGT(&Ga_gtY~Ax_Eg2k0#YI*ZR)>zpZ)yQAB`!+i{==;*^LYQcaknV;8Kn1#eV1B~E1D1NZ~Y%p#uZe#6NqYd z47L^uk_CG&{PU=ACGygXWN@0HIHUimlmKt%LKB5r0>)DlFqkzhB)tE(7DPh!GG|4) z^_bK_^Z#tLC>gOSV1Fka_^@0(`xof#8pxdr_!K>*ni)H$pzrY80pgYtdYVC?e0J9V z(cE4}DeW)xodYt>jpe6DGvZZ0frUJz{u#hGz&xwFvYI7m z^f|j|>QScQVq&IV%*ciB+{hkDeCP;}Q@`>&Rq|$~*G+X3{jPho%nFg(FDJk!+dvxB zD|*kJEex$1`f4Y>qk66C{L9(&97jk)f*kJ~h2xN;K^ww%AQ$N77vFBhMyZr36#8CU zoT%iB>2VYYQ$ghcm9YhNU*?K|@a(-!f7^$ZAk7r)G?xaxAKk}c4yH6i78n#lsH&CX zx~@dK2%d=qd2&a+=%K!f*O9p9gtPxpU?4nU$rfh@ipHpgVz9PM0_H7=nqSc1Izz7A zl|-oA&|{UEQGE9zk_+g|q_xHLaSSXlj#c15y{o`4V22XG=LM^_G*4X7LBqqnF@=J$ zuNhpfLC3}J3U=bmBXP@n48SCK$Nf@u$>qFaD5dHTS_d#%9}ZW)#x4*>D$RaL{iwVw z&8)zjE8Y6e)hyV;n7EC2=@u4`ASfkQ-g=&(I}i43D}~fV%CrUi6dy9_qCZH%qdl(7 zZ$n&lA63~5jkr5Z`ZmJ>^14qE9R5X(e2Df6?;g*)-OPPlq{3}x#4UYvyK~0u`SxwO z_esO&Kk0nkTANpI#s9z}{b9)k1tej5ibp*ryW1h>Hvq{F)vo$xN9;@&b5R#k8M^v7 zau0BNMto|R4{qMb&+cdH>LMi-?DR+ipMczE{i1VJC}%xIxZQn9a3Gin_Li(Pw%Bg8 z&)B5fN{L%nJ1W>8QQ`~Dm|CB77o=IBAARq}W%n1Nhm5^w?a@*my^y?-T5v++|WDU&d1k@fmogX_DIA*a4Om zGzYkGvn=Nmh{%5H<;>P*g(q`H@7CjKY-;CcKiI|)X55}9SAIbkLH-1ww< z`(Rli3b%(OgFImos~_c!9;D;Xq~ct1l}dSU5Lx@BGCSFW1y$e1V|FY|fE+&+$+ z96_q9;`%DAUbYM~YB89>Uye*coJT@oT9<~p7cK3jO;-yowWr6b0)5lpAA*PQYIkC; zvWh3;cc!zr4bhM&%w|f|?IAXmkfNR;VG56+v1c!@V@KwiRYR|OLHVd{)SkooDM#!} zAzh$FM(O531lEOn;Cf&v)#1HwaXhzT@fl^#J_7uhqX1K4erXuks;o40tOgZn=-1}X&j?<6@G zj6e1zkGg7MM43-N0Ti5R`Y|x_x%=N0F*s#q+k}Zu{8=_6#)$wy=gJ-jy{zDE(d*lR zzCkla&r3~ZCU(O=x-qz?aK*{0TeAinOx99ImKFY3EO9A7IalLsh|^7Y<*lF=)0E8M zD%IS88bHPU9W8Wt1_<$vldNolV;_lDp^cr~JKHsu%1^!qgGief9`^d59jzU;8?VH= z?z?b38ok*A5Unv^z{w{Or%x&eEglxg`F55X`YoWy%KMr=jD;^yxwNe11c-9p*hF!! zq~79Nn=S}6AdhyrX(-F4uCYojLsGymcz4ym;G4~J%%9KrV$pzI-x}93sTd2*7ue7kkL;F$o&NGL^ z@7eo>WkF95faMtNQCa&H@i(!NP_cw0@csaG)`o8S+xsGfFldmOZ!&F?!@Vr^1@NVw zYQ6~oMv3)_m3NS=7wMj<8|v+%?7tX22m5`=X-+4|Zd^KODSTIkQKR)R)$mDCBZoE3 z#d7=nmZ|xY6QRM%XRI;n*6Ra$IQseF)SaAAzA0G!VNZ0^6m09m>5lk7h;Y6_CG-!v zsrj0dn6D;&jNxpuzwb{zZ~DZCWpnw+Xy>s$Acw zrtB<-qraW1)$%5FJ2ftD{Oz~I#iN=E6PBmv>VPPNAV@imQ?L`>-wq%U;e z=X^8IoEAfQQ{?JQ*$+NE$A=;zoQBq{c$X0u6~vLT9pR+>ncP9@#btV>DPwaqtK<*3 zs2}`ZQp`A`JfP>47mQ1!Ti2hkr`#`h=!HC*@=drVjY5`{_Y{Q{qZQmTur4#qm}ZX= z>cAFD%FQtJ>c7R9oy+Y`un$Uy|0fdR=91tdzAjFOXp1Qi4X5fqRdB#cCn zoKX-^kf4HyNKPt(f&?Wgl2kwec{Lz=Jz5Sk?x%Bb$i3RubFD`}80u8LdA`r*YKCOC(1wknZX6nOB%B8RJ|d zyY`yYH$-LRS;q89*1U6x38G>Nfr9L+mG`6{cZ#KRlBqkph>;ETC2Dq5F<-}RbY7U! zF+v_K5Z51=Pc6eV$dsdAkLR09*|uB7{y0OE`vRjWHe%&+)9Zv(->sL~inwk=;*|JE zR6*b^j~mU&H=PPAz$BxSMQvFNE**mp>1q?+UE$p-peZ5{qgnCtr)s^LKKHm>nV6b~ zbP@J~1>Jjp#DP_ZT$rN@`P?9kr=!0#MkiqHi%qUd)O+h63z@6!ZR#Y~Lr^~+X9aq! z1U^~HNLgBCYB%H?esanSOP$v7iIWXeA5F)Cvbn&KG)^Vy94V`NZB#!5Vf?x0g`*lKo5kh%OgGQfC5VQ6yms&T$=rP6C-oU70^F0+(^5@Bw>L+;_)d3-)fn9{y@Ym>Y{^E<*(j|hp= zLY>zgx95*j{cu(miz?+By}(NRGclisj1n>9n5>}1KcU-f-+QMZu%S>hz(X;(5cLk@ zzZE;o5cLdKh&tgC({Ioh%a_xr^=WW^RNVNRz_2Sp825|X=|{Ei2QCV6i=`@B^mubA zFf1iCe)zC*+m-OK#U10UX)tY_``V*6!zQciUNeWj*=SrDYX@3bIiY*DCCQ_Bl+TaX3JIty z2fsDcD4*jSKHOl;<-dwLeIYt=yf|N+F*TtC9-^6ROd9GIKH56kntYGfN&L+H^P>U{ z!kSf1MC~Ie7HXQz7x_}ubqI{~L>cZ;hULhG!x}p1pY{I9K}S{iTxpWfB##qmUNbg5 zi`TzoO>QW$O!eUG&zY|i+b@@nw-U6Jp}G7i{ghAzGjrDlVJD30RjnbVE6rXm>J26^3*0?9FXGLMcXk6XPWbNd`ceQ(TX;l`)gxwa2J z3C&{%zF3~yp0114kmP((r<`b|GVbF(Yrc?t>42c2@5v!NZRIJd*l7lQ?0d{cG2m@8e`bq z`#H2ie7u-Wne|?RXY3eO&C~8i_Psf*$~TUh+NG~Iob{Kx9#h~-bR!S(?X-)4GqCs6 zpV^Tz=e=%*(X>bK@V9l(&M5Yu_*`!L1D9+u_1Wo{vI?GvRqVbZcu5zd)ek8%}3wGpLCEvpMe0n8~N%*xvGY+f&a{{=hr9e{lhrLGl@ zc9%-@s>0$X-nxGw83&`XA6ze3Vm`26y`C6RURNT;mKS(dVAH`p|}(=bSUc=+I!s1`SKQAB-|-fe!P*$Al#C{z^wuA^g|!Y z^1C7w49_pL`5cufo}%u$i5C0bL7cQSMtdMhT%7b^5usi&`E~vazDi*Gz5{*8l$!E7 zgzcM-F)--wVWZ!4E^vh{(qmN*raKKcGho2HRu5Yosq|BgKi!!ZajP$_5d#~z03K#eWeQ)fqpo?FEN6G=I`={;OSAM^4SuiBeMcJ)eCrER3%z*x zy8OrnAz0ZDJP%XD+~l|>N-FfsBio6t%_+yBQS^9Gt>X2zCftWDj>O3Fz#;krJ{xy0 z4vP~irz8)Zy&y1$t&Bbh5(e^?>#+paU)i3C5Px;Rp?&j!uQ~q+g-hpPv_qoP=~gbs zjEg?oLe;%Vl~gnyk{<*#b15b}`aU>I;567zKBaERHr2|dh)Cuv$Gp+)o%j5toSR>F zk=3PoixGj*rRp=0i55#%we|n!1lv)xC^Di*bGE;X0?sU9n)){ODyQriL%MTJq+) zCPw&J8o@|r7iPeNWYlh8WWg?B?A~-SPHVNn^*saOs5#|YRJS0v=8--!jgie!XQ5b{ zceI+x@P@B8<;)uj211 za)3qgf;t^~>Ve8M+&~}e)=Ax#z$F*c=IuH`z zM4Qh%ow$cj7g9AT3QDA3s6SI7AppN5Hy+T&=^J5jrqD#EGdD(N!uB2Iowr9K5h+;C z7fa53!wuSnuQ)N(?=+&9aw?T+>&z!b1q_;X?$7mDRhzgB#bi#)o>BEFbXr|#QhVWQ zVD{w)e;7K+ut1!51=)fjd5`VOb$QAKspnzd-1bWHTd>IS33rfiB+)*#Y?}zSLX8bH z&<)^iW*oBDCRls>#ts#>b}jKW;CwXitCSNAxa%1`akJTP-1Rk}PWZJnHrac|ihUG^Pec9pw%Y_a3y}X0zmN~mHxc*$OUgoa+`4pkG z@)4JS@6>s=)DhH93+g>E|JoC6-40_+T zRoPd-u$14m(?yrQ--*m?ljrr7og2C$)t=K)_u5K!6{#XuioA6u;sOW7)8r{IgQxZ& zjZ+hmS`a;&@MlW;`wh)wV38i%+{+h@BDGG<_a1xsSeaxIs%$+tDSObNX5%Vx{4p`QyS6091H@R$GyfsxLf%CqWrgjwNW3)_Q5$5FZuW4Cn?}mEJ65bUw*ygK6C3e+olTN z!4?!hp0g*l&|T9NMY3lor>P%7zPt3EVkqXj3~oXtR4L~9s|L}_3RL!77-3wSil#dU zh(ba3=g&=23V@~HnJ`blqx(ObakBnPm2_ZVF+@r{(osP}N9Sm|@CkTBX>shl1ft8I zj!8oS6Zl{)HR=f zn0nU*w0-vB4a}-&4w1L;S*MjhKO>-pozpp9s}Pih9XEqxrWA~t<8IrN=*`96wy(2) z4|hEg3g)Uy`1hxUWzbm~YEjN6Mh4Coni-7_O;C?|P!x@Pc(7*wG(W;IhAfdEetx6& zOUsX{!$CT(e3ZJxy)>h>CSmTz;y%y6F@|Hk4`B4)@_-GE%8=CX6wc(^>R+CvI4)9B zi|Kt3GD`Ro?&z` zPQx*UJ*nZ`F4#9e3g#edjUO6~)Vywt`liiC$JA4Hss^W$P4cP@r4?Ki=#z+Eh#yG7 z@@m+PM)LD^CNwj0x{;j@kwt~eY9wNXa$mfO#ej#Ib6sd(-S%*tUqAd|?MIh~Ko3IX z0Uun%6qQq|pNo8O{H}^POQ@!T1o6m7)YEs4YO7#ZZP@*DDjl>{%H2P>y5KE`Yt~Pn zdgiVaL+3S`S8X>$`2ZGIJJtZ)%NR$$zN06MOP*h#7DFSp zBZO@QViWs}u$&eB*e!)Vk2 zCQj9Zwqc@tqRIl}b?+<{mW|wX1x?jq55`f{>Y_5ao_xvd+4YC@b(6v3WKAIfDy9fl zuMUGEiH+WGt}D>8zB;1v;_&AS zMLMWRczGilg&gUKq;V$n2oI=5Cp6Zfy6GB9TsV!|Z=`{z`M5L;%)ZmAMy~T?G#(9T zFv_fJ{doJq1b$v#aJ|p{r`0Qmz)wFH)ec@kh6??h36@_qr@-&;PMCLZ;+^2hI&Y7e z3tlM@RS~A2hi^Gr)_4l6>cJBUe)mkNY><=;Yn%p8mZ6(WnrKMpiy}8s@yW@7h2JyX zC==S67-N)zMs2uAYKdjMaRL+B%Tn>F^YEcLSKm}>NK=Zm#BV{_$KxiAF{3wIn>0Tc z6qgGryiIaC3ii&G&F;|W5T*MDI78>*o;@k0aVsYZgWX)WvMCdKCiE(7a7Z0BHF>XKS$WN5r3Kprs(w2EE zhcUj2;1M`x7BkTXSAM7N60}lS0U|HHJfV?8*05J#Wxm+{qgCuWg&~#ZNav@o1$Q3t zjVGw(tA%WelBp!ebL!`0%e2W{t2wR2R1y+Nd!^;Rr2;c2#?OmEYs8$D6Fknnh*oLt zQ!t+4D=%p~2EP_Z#u65WvO!hD>>2yU=j(1D;eFa#AmhptMjoC4%QB3c-A3xhhaWOR zjZ$gWPu@%KFbmP|7$C*m>D|C`X_%T-bI|iD`ZFJs3~>I8pKY$rp*V-js=&0%ZDy`6 zptJbjnf82s|6PqyL|=q6P1b(~{B%~DXgRZnAGsA$(3U+FMo(R6<#aB8`zZUna)uEN z?=sk^Dc@rLUGe*0(Fu=)XW5h(Q@%I)sq({pdlPG^y7^~)GvA3mJQer4d}E1#mP<~En}bY$40!Cz9mZh z72H_*v#kCMYA7i>a{1tW?c~@DBwGJCqo6gPX3Vh2#L;g*>xv%9kP`%7xSS|IG6QB} zYanYq0@J;>zZS`ZN86voFz-C^n~@@;n#!Hn+VJ5w*Gf09VM%=1&P5<3KZM7AKFG_tq!`@$u9nA+P z6c&V@gllIq9_Zts6?o^F_%KY2lW$Icy0Ad4M4;~24W^i-gqiR4Bqy#Hwxg(xa5x?< zMbC?G5=Vs4f+wDWv}%&Cow*7d*;5`_Gx$0s$V8g?@k5VfU(Ome$h#1A9VNgyLlbf+ z<4C;dHzqLnq;a}X*@{$n#JN>TI$Xgj@oLhh5P@(@>{35ZnXPy9>`e>G(Q}=r5-(Mb zZjCh8pYhUft1N1CJ)_9;CiKOrRCU4buaCFS!f5WhOV;PGjq^tpi7s$Ukmr|ql%qZ` zT(60Bre)QAjnY~&JRfQ47crtw?Bhdy(Qjbdtod{5(R*G=LtlDU7POtBSB-fJT^MC3 zyiW*7SMVp#v))Z9JKcX(lPTNz(3@vi8=oNm#9~tZwv_hJ@d5RppSWuHnN-Z>>kK6f zs&1_{kUyC?fT`lKi;&Q6sMF9wg$T(CkN}h7q*MK zj({6TNuI+b0=UmbCr!)1=) zL-h&i<&$Ttf; zRV8mQ167?P&s6*howdbiAi;WCnCsJ&+8fxQuv-Xw8S*w-wQqdz6BP}QmoiD82`U~- zvobZiai`M!mB`4|fSSp4tp3|W_Q^{EU}eBtXAEXn>u!tHJIK%^d>*>GHvQf1u$PGse@moR*6Gersc87O_pvAJtZHhs84sNgWIe_h3Xhc43`fJiPmR@ zA{xlyL|W@?M>p%U1fQx+GH0B5Dsya_-_+{~Rsk`n>dn`i&S+&RR}tbL%TP+gsB#c& z?&%an8Wc>S@pVo}I2_mJa7k1Bo6(DBHfBl~8gBdyc^i_o(&JB_VNF&hekz?Rv?p#O z$1vTt*w%`oa#A(4RYmfDozYS;!0`vu_}WbhepVn!(2Z!hUZD};9NGLprbo2d;Kki` zGSLjAng!%+K)(&vym(?X8e7#XG%`Se(T6?fSNQqiL5m)D`-RZERBc@CT#yZI&r|aA z#RRG6kK4^o#row0YU0GNo;*I=?h0lP?=hNyiLCBgCKgL(`Jv?F zjjL$mVGBeRvUf%BKbcTDCPL2w#tDKTq14(WHkNqCTJF{$?{@>J#Doy_3gk$iamtlf zx26tU&dsEV47TpCP)!QSPC(FTq+Y2wV#kuiQMWQsS~^RK9-0s;u3aRU#6oCA^5cZ6 zxgS-(r9H@o%JEx5(>U>S)Y>syE*`a%TR}WkS;&&(7gRjGJ@f+Ca#)@XzTk_>vI{zW zL#@!g^5mLZU6JA{Kb!+Cntnu#qx2K%*-s` zTMLPmQ=->R@40ip1v(xV-xthjPdmx*UG#~i^{Vjkf>zOUk(Mu)dDyUO6H|pMh|%^V z(YIqFQDBBKtk=1<1U=*F4CZ6&&;#ohc|C(IIC8huC8siqxIuF7X0Q9 zJWqB#(2!+ncM!i?H$2Eb1>F;0J9p#_89}wWW3i?nZyV}OMR4F#&Krwb%A-Nrk8=z) zbLYT>bB%nWu|vug7mf^X5KzdzkE^M*r7JY8B8tsJCp^QBY#ro%GI2@GtsI#*WKO(l zj1>-Hi#SHzgstFYA&$@wd{K6rNMdt2EQv_)uzDFc-OJymdw_;Q0mF^g4UE4@d+jEFN!;sf}Eu_Z0s|~wYGc=YxDB& z=Xcq4tC3iWkOmN>3jVZ-I3btfY=GjtyODv@DB~Z`HTAF#A-yCvn&@Md&`UxDr9`o- z4L@(5kk%*;2~;Z})a;lE9_AWffq`62`MsdCa+7FFXl!z#4^3NG21ylq;#^~!+CB3~ zSye`-er^vE6?*41uwjL$m{gQl^!bS?OI6>56kHXH1y}r7@|W#?|JltZ_O!cfYz7Tv z_egm*98xl3XWmiYw@>lA+;QaM0;^|lenH4!ee%$Q@(S-oK~KM8Z>t4380)v;9Ryn- zjiNr+=gAeuT(mFEeLtY!_cAvfNq6kc`pXtnImTETRE1Pup71Yb1~ZYpm2 zFrO5BGnW}F#9EjV8ic*hSoKZvgNV3AOGFJ*!$$5WEtS@(Qe*htLpPnD7NmxgymyYT@BhWsR98o?qIBFb?s-NUZW??A6 zdQ(RTMom)NGu-7-j%?s~etKDmc35DXU$Z^dWxzypWcZe*l!bw`mR87SY$OKkj9Z9v zI+39{&c9||mx{%4ed&Xoc#a}bJx_ni@`ePPf0&bbpB|%x;paI2v4obRRR3}_VP7PF zeZ{lultq|T+Omd&_nKU~gh(uBnINvlG=Xx7K`DRSVUBz^kM4*D(7#3^vp zTZgaQ^r8)z(z54iAo5>bwQE=2TGZj;jZ6(&ywMX#XJ@K-UR6_Avqa^HkC!-u?3tiw zRnAZ*i&LtFRrB?gdE~*YoVr8ORABI1!b{%)>?8ad)m_b04AyFBp7n$e5!v9LC8$aJ%U~&H0C09!6B3t^mc+xht}NpuJy5#SR}~>)M`T zA4`wu-+HYfmK?V+wYBEJ&jujXf}6g-yW*?fd4j{>F{^BV1a+2jio5}Z<9q#+?OiQJ zIdhzb<>{AH>5(`d>B)Qa`8*19;UWL?cDcFhQc z?;BOvYa74ZX5E zt{CtfOjA4Lqxn80{BGyOiKzAQQS7=O(RJOKd}cw4`Pl_SulDjy(@WaeAD_w@Gy+>| zCtjrVyMt}Xav$iKG6=Z2e44NVNBz^T>kWaMhH3f=@SbprQq#q0%pBzNiqqc7Vfu zYEwvN1$-6^6;wqNqeV`Jt);%;i=6A%Uk~f_V0-y7$MLH36y|B(d|n6x*BsWrSG;j6 zN7aHdL`ROq^-0#uX<;i}&LQU}B4)+N1^Wl0t8+;Ihz7zWq4hAta?o-6YgeZv>BecV zT3|Rz?>w9MVSd?(BymaA@7-u)3*}g!EM>jCgj)K@`iFvT-;=|uH#zw@xjn`x^D!o{ zs-_;p%V7P%ilCo@l552=vlqk~F!$ppDjp_@Ad~Z=qdL3I?I{)WFl0m_60a7TP}*!{ z0pG}8n8_4B5{Jms&P7kB{}G3xPyypnTd(lQ~hjS$<|6SBvrEL zkdUI7%w~IsV&pa#&H6Z9``fSf0?m?iO`HrS`gHQn3^f-OtOron8aafRFQ4%DW?n{$ zcIl-zAC0Fay>|(g{Om^ZkO6qcMy#ysW}L)CG^m zE|#(I=Qy@49?6>`vCnqlMA2r^C-IV7GZ+f=Mt;my`IdDhx{y7ZBxxwpE#M7#-4ouS z>J|nOvnr@LFSQ0NVg{{fGqAVKxh?zfKAZV@>Ufy_^mF5jKc$ao@ns$nla4x}z|}M@ zlwxbD%W+aMj*u&I&2+3oInWmuTybik!28ByKQ8^4BHM_#aZO_vBQo zyz`7xtEeh5KZ8)hy>w;J27}sq*68PuQ}Utm)4W~d#p^5Zs3LdbuUGwQALkn`kfcgH z628soXCpmhq~2b2}vIm3d%#(-$P!Ai^Ve5 zJ)Jy0mI76Bk#)6LuUxP8h@(tWaLm#a&pp9VY8Er`h5C@s`lGNg=8YD}rx@8W$|+Sm zORBwUpn!2XvHFEs^klrM$N+h`ytjmh)fso@6inYuCY9HZ+`^cneWOu5!%;F{u5hxl z5{J6k@)zlnR^-?&R--AAPVCR4dY0%_B0jg>=FB$aqK`8OZz1OEt3q14G;>oX>(iZH zPVl`WG050VX~UcM?oCI9Wj3^J{Max?^U@Esn)%~#@l~3A7asT&L0#?}5~bDOh{jBo zG<3=-g?U#yO2+y8wH8cP4IOy%s16GEqzqf(UfF~)kFbDOw~_Ip=@!U zcQ=hOH^n_mZmlkT@pH@;yL>A7z_+hsQ&%rrv_3oJCuVsZp{V;+LcCS#LHzR5(Dx(k zCUEwYyCmBDPju()OqtiHt~xxErI_nST+k<9TDZ$aOZU~ME>rNkQ)9>n@H2}tL^iv^ zm@=9B@XD3x1%l6}?uPa-e&mQkCu;uelO*f4i}@c%Ex%^N?y|Q`=)Vjk?55S{?A3ci zC1h?Gw!&bHRV<(I^N-A)4_D4Se--SzdFM5gg9Zgy*Yo3OU8T#JJK}C*GDYd2E_?(8mp-%9$BBS@z)F z5AY)qBZYgorp*i(DQdPPI!PGpkxs2f#J$n5oQ(`Wyp=HR)qNFu`K4E07t7G2PF|=) zLfCw;^Hl(w!NO?^?^;e(KMEpPg}%xm!FB@jlqgbdj)z7hnMa$|h@bMZ@Mp;0fN@Ya z>0;plTc51)Lu{sEmzud(0&i<2HBnatNZa#P1V*$SQM5tKSE^Ma28kZ?qn}jD&Y@1P zT_$GUBxQDd(Q}5S$to>*o`B*)IO+$Ma_C_;ibJe#AT*hSHA zK>J_`@y{d*H^vlN9S<^cd^KgtU4*gRAoyV_%h;VPd*5H^%DR=c$7Rbzr_yHKF7d+( zhBPd8I5ByCwfU29-l+!z z#t{l!gaI3G$5tk&<8UM4A$*9L~@-lvFtP??;06+G9&guTr8$f;<8!7sG{ETTDJ zjH?LJI(Frf(C}NL=Ly2n5AQbqJUWkGn8f=A*o=iICt-v%2C2|6x61aFt^{rpudc@= z-IK*|_FE&<0Zp%1hsv`_-?plphpUUM}JyZv1L zXC)Ei*y+o`m=V6u9_(XJpUc+i*?Yo0aXoHgM4o8qdxoZhpzyj$wi^ z=Sv5UzPL3%sjzg}S-G7884Gvsc!s12a%4EHv(!+nV0BM)G^Kj*tRzOD(wQXe?O|3z zj4lUawVBxVjGd~z94G%|1izt)CZ-doLFkyKw2NeP@Ht_|Wvp`la36g&Y3lrD*W9|5-;2h?d zB`vw@t&?0dc6} z*G86GDF=Q^=+qE;JQ2yvKfxT`>AM;7FgV6MON3gicG$j*K=a`+c?fbi`6Ekr(V&An zq}imJ9VNf|_<~DqN@lUUa)_1I*5#Pg&t_;n{xqLV>%)5Dxap^u|(ZQP~Zx~`Xa z7?w_)th%Uk(DLB;byMv zCkZ>w1W|E0p3=L{s|f2RU|@D3shJW<@8T z0um4UniO4!O~he>!@eb|Hfr1ecY3VGQhnAwea+i7CJM}Y)^RjTt>nf_L71~IsSio4ky&1NiTb+b@A2H%Hd;!TP0wuYT}Ib^4#?_LLZSkB z`!%{78y;%n%(6Kd(dRx0zx+r_-fC%Z$#=H--G=DwQPK$8S_1z$qEZeNcA^K)PZ#)1 zU{Q);r1S3e8@ac*IY_F8k!Pyr$M~)7IIPy1n2EPdD1jf#GBQTDk2j<(yKmE|?2T3*~L)5Zq$mgT=4cUTVyg=qf zo37vdV}I_oC+3!oW^nsQ?;Vz&8D(-!YKe^%_j0tevmj%$pP0UEI*#ZHY?Pu7=u6OI zP(3shcg1?4u@WBrQTcf$_29|UEfZB5EUnX;^7LG049J978K!&%+vqxou8}t%Y+owN zx%3`_NW;N$aYi4F&m)L569eVkd8$s1y;#07Bl!4rig4=zbs3I}5{*OTA4*hCJdKSB zC6f?JuJCKp|7ho9C?2I_l&n9`eO#wrrse~oP;`SNN+IymkM)$FW@ldwk87nx39ZFs zqx_T0;*UlJ5?4MmQ|vzHy=i?o?;$Pm8|m%~&ZVj|3RO{}MoL=h`3`j7J9F}yO6o<# zz&LCmQ~v>164%NFY_rL_->GIHhj!fbork2%+gA2VjchEX!q}n5CQ91;lt!-aJBbI# zULRoR@{tTs@GAM_->2ujN8L0-4#D9dOdq?gs*wAeXJuxCMzohQNbg1KoellT525)3gYD~>Z zELW9#FWDPatz!2HS$^AvBXzZr{*jbvPZ4P=3;Bc;7L%M5cS=en>^Y?CVw9M}f~D0> z__?XoFSEOF+wleZc{tOV6vJ!jbj`o}^xT8LK&7C6SV=dFJ_hp?!P4J}==_12>{7Ur z?U3@CfYVnR&2^!&>YNLQdn1LCEbhG9ti3E)f9hL^!|S6eLPeJ9z5-i$MZrz)j(WwK z*;99H7I!LlO||;dt$XxjSR9Eg%`r{X&3-A}Lir&x)%4(S2fs_)wQ;U6A@Ta#@u}E_ zlUA#>(*lD^VVcFl9^tM0LD{9xP>lA)ma=b19@gG7ufoo$eDO%Lryuv2N*+jY^^~@G zl?*??+JW>T3w59rvw^wEhc<1xBsCbdX!j!0=%UH54y0Hde^)jY#4=j#P2+A`$wPns zyFh=9@{PBh3SQ3#gEFo&m`Exz1Xx-d*-A}P&U+*u_Pu>wa>fM9;JQqUoaNRI-DE$; zD%x^6B?p)P^T@(SAK#8jb1s`@wH8|TYV3XKbVj00mrtJ3YH#7i`bWR1bwz4c8Y|uQ zu1>zXkj>!P)KDbcuG~2+r`#$UqW)0f%rG@L@vvZNEDC_kERH`l=p# zvzIR2Bz9-D^}X@x1@g>8b|kw9ylrbML;8Htm4LMd`N^di*S*&?BVP7^ zJ#)b2HFJ_Sa?!oVa&H|EjQh-&73qI+YnzQxZgL)#;W-Z`cCjf1J`hRFnj6)MP{nTm zS{?{xddwd4|4dq{_Kaf*Nj;QRd)cz+O!(HtWwvv{P2Kn%MZ0ZfZsG~s<_IKm{$$Di zoh*s4`p;Ql5n$!9E43ov(vq>z$&uxE6pzAA`!a4_r;k9 zp+F+1q1U5zx|NTfPscg$$)f3sq78WV7!_H0n)*@;@%V|CwZjWEGE(J#%$Iu*3>FxB z5d0HV(va$Yr`|_(-IPr7owm;vo70PCwyuIPNHHbv?XxK zt?r2?r1swb)r6)mUp)Ko7@ziO#8j#e+cj`i6!<{jrzRRmi@%8PB7t3!m%e`W^7J&k zaPHMj<~t?NJ;$P?jqgZ%F+cpaH8nN$^Jix4c+lYM*RT6|W4^mTF$^$a|4=!{q~Q+r zNKL1OhZ7Yiv6G@N(+z5%pLbrcp?V=Ijbc|^ALq7o?d$~r8yhmcjgKF59hHL8#H|o- zK7SU-)XPj%2zVW)EcB`-Ad7^YwDAooosoo03F$1)ftYXbG9>G*E32b5X-(%zD#GQ4 zU7DA*$zhjGzCH_H5U=6W?r{u%ii*ux%3#T=L(n_5mR=xl;yW!M9(XzmT_Uj5`9mg!nX~q*xa(n4~&)vI1 zfsp~-o$;^|XsOC6dTj>MPq>x=o z&8%}5-1$4BryISd^kJc|pSDVV90pT(54({PWhkkxv%iiQbPN@$*WUUnX}j1FXU>^Q z6i5tvX;3thGgY?HalhboH7P04XK3_$2Cf~~^w5a^keG23-I`IHfvzft9@&1d#mcvd9UY)NSx;cB!MD|K zL~NE~c);|_y)qh+!uAt`u`grt7nG}o2Az_-6y2&@Lrd=4XWs1i#;nizu$AZH+`VOw(rz}0u4px68e z;`*(ofi5?n<_O7c>5a&`;05$FRalWsj^WGR$TqP9%%_Oeb#KN+A9EQDzTsr3WgSm; zpR+;AkA5cNq7@I(Ct9bWmwW`psDOxW%P^ySNsL6QFpF!fE7idLQ@7G%$=`lMIIox) z#W|_r1Uvzv{=C#HB7` z2g?J=>b7>+n`0Or725-0^d=s%*=Vgb3d1Wp<*U zSN#23M0|87dDeOB=;_^*BVZndOt1NYO_8DR5xsElH z%aS#O1G+yW2s#Fgs|{Uou<=kv_epWSK~^{u;rVXhifrS<8^a>jwRh9zZ}^)nsp*<>bdrN+e|H3c+xTlWH8nwmpdQ^Scwt&aKoI{R0)oTD2MHh; z!kQ2qVQ_>ZqtGB31S8r*+xbMi*A{$&!728ggTdi@=ahEPY*!H$a9^)!jVb8ezroc1 zd5#eKsD@y_b40T5+&+%*yu*>(JAdQbc>Z9p|FQhR_wn#Me-NBtkB6Q9`=iHpJ`wM= z`yb99;U1m%Uiq#6fDZo?{>b;*{RjRSVZR&QyKP`}h+U&|A;BBnBl1JuaKuCM|31@0 zyyyDE^k6VxfN;bw19TzTHNZ#Y;0Q;6tL`wm-w8-);MPeGw0a=>BcN{1?sl-%S1F{%yVZZo50YE zLd5?Yy+8F|3DW;I@B1C(Kkxnh?((m_|A)K$-EZuZ1o>Yi0YQJd%@tC-+gt!3zx~A~{q(-8*BnF4bry1 z5yF47f7~A@e7&mCO89*8f7l->p$de8V2~$_3L=6KJO3aE2@wN2@rCkV6bV8I`d7sp z4ncbbREPdi*^jYz9{=4j&=!B(|K0w&|LFZ*UHtJMo&RUw;d$O`$MBzMU%QW=e}=pN zoD;Z{PzMG7-QKnKpZ|a9z5B2J6$OG|0Cx8bd(dv!ML%;{3nfP727*1eA49h=DwrKsgD@RZ!wV$p)nY zlqOL6KnVn89F!$cfK!2}LE!*J7!(Ci{{OlEdvf6bm(tZlKzg9)gJP`?L!MJ7B|i^} zCn#Q^fGUs*1lcTa!@-f98iIVUTms(_LOPHe!W@3ylQn zsZN5#BN;(31sIeIGXf}7zfg!FBj_{a1ziLfZV(3~0#MjN)FDK}h|n-nZiq}322r$v z&zG#qx~B^aezkw>g`e`3s8`N z3S~_ONFDSZzO_1NP4_pgC3ad9?rTi|Q9(Q6VF2BX?_y9x3giZOBq@MI|2IgIJ4i(P zknpih7WC2{2MmAHQfj9q@xGS$Oa#yXDM2JVt(Cxa8ULoW^iFG%eXWW2^)U+ci6Y0! zb`Cg_Q-G@Aj~ZfyRDmu!K<9x@IskpN-+6V1CV-}U08Mw?(NcHt-eKn)zLp0hxYODI za#r}VeGfAD15cQc9O$PlWCyg{7NDK~&0^RfMtmR>8w8y}ia5Lbh5&p6ZVvGFL+pp!5KKTW2%q^^wVu+dl?+bfrNH#6;H+Q zR>lD-gH|4(-QoS#wBLNKK>ylm(n05d`R+PV5!1Mqr!QY^Y??dJI%?th`$Xz-WcjzSi8$^kHh==exkGHv9*9t-Z2=o{C z`a7sZe}gKy4;2l30o}i()ntczTbK#pp7?K2rS_rn?D~j*4Gfv>AYXu)0c4WDL6+W! z%=d>bq5dV+M#6wEXV3s6m{k&9?`U&K@#H!z|D+CZI`7pig##f-QKD&m!;{#4(802JhvM zK@^}LD*WUicQ^r{UIloF-Dpn%9RLBI7=rU51UZ3!CjSjf2clExhrxm0Apq@Hj=B8S z9v{~afP7)6JqJPxw5JN;L(qg|Zdrk&4LAZXdQKfeo(JV3F${Qj`W-yg9Xvdj`{}_) zbb62}?BG=(r+M&r@h~e;{(>V2F+g~_1R;uFIs$=6yT=zkl9K}ds6tHOR-izj9^+2D z`p5P0k(w0Z1ob%(R-oYPGyRkL_}EMeae?}?p#JPmedd2sA0L59p+lg41=0!>JU+`m zsgIAlq!1d^zeHdK3cfz;KdFz8w4@LQ)K?(10tFx44}$u3aFCyn@chyyQt0@O&Eeyr z19Tb0pIvLAfVg)hK2F`l31kZHCw4sp9Pe|uf3>FkhpqozEms1)0)wu>LEb>Z`wN)@ z(gPOwd$d2ZW0SUk777Ua7wW8bs7rub0qU^7Flhb>#=lFWBal4s7;s?mf9Mt!uo&l^ ztm8EBTF%fHAW6LEa09Z$=OSR34C2GfpNuJFbDKHj>o!Zs5<4q*;9-@A;X)zzA47|n2reY6rl z+MxYjUV;L-3sr~{j3y-YrxiHbfFlI1BCG&|2H+r9`sJS?h-P0q4!|Ye@9cWlWk3r) z%kcz!(nA8!&V2y_!1lpu^YOglZ!95AaQ6U%CgGa zG%IifiNlW0aw70KjL0AK>~HlaJ^#6QadanMh$29Q1@hX97kWEcr7d&@P+|*WEr_UK zr0@ttv(r^ekj+k4@k3gG2T=q+;6eNk9t=T?vmhexdIdsAY$tQyqg{W8cCkNb-(UOR zrCnu*b~}U$xF6c1of6Uj`i76iyE(riINI;X({o2h;E=>$Vt^RXSK#AzdP3?KT?8P) zH~`&s0=(ewCnSM}03CJOxyiIe12qL1G{{kd5FmqwN&X?XKU@8~yl6vdfC?M}pRF9- z!4oE=1e*3|ezD8X86aD{x7f`rq#-&GXYqLy5%2{>AfY4z$vz6Q*`Y26VFRd>{)LA6 zr)a;^yNkG+rv8b#m!RWE0r;Swx;e017~ejs6K@v^~fdU>N)>l6&Vp&(3=tkgR|_kr)PpbobsOA-%n~ zFi3yzEfTT>czEw*iv}?o^!yIz__2UJZisfMIkz*4avta#1jgKt?fA>Ru>`!&qy_y% z0Q!mGw_IjdIxD|PhYUy(Z+WMIG&q2M?#9})0G9&z4KV&e6%xo`1q%3P_udPJ)ZRzW zt`*?#E6?vB;AOR+I>ui)xCL>bC2`>X%u04gb7+tt;{U-N)ed)ft8xR{ho|TSc*WZj z-b3K~nh=i%z*Kkr6H;|wYjV)jmq5*Pptp8g?`bs{`Tav8RzNClSjY?9rCub4u0fS-a6bbvFwns7pM@2DE_^M%-e?bCvz zxw6}NFNgD9)<(YW4xW~Rm(HENlhCR2RG9ksn)+t&lz`@~Dg|Q9+_mSi&vX5o+S1Sr z?L$>X#v5ze14c^491LgqhmWjf%Dne@bdad}Y3i*a&ATf~htZ!{)hr9fBz1?&PDTc? zFv;2$P^EsYfBXq`YTKAseU>2Bel*x>oe>-S;_90j#Ce~lVs!Qj| zHl58k`B~Z*T><6+KqA}QVD#}fc@+#6%`^cyNx&fBZz0Iq!{Mx_kRbjwB(B%xsW5r? zV(6pb{ww+ePnj^@LIv^4LU~|0P;7t`7wcQrPj7Xf6OuL%hvYA=mB{@pkN!T9IK#nk zvy|}Zq_TXc(}cHNW5Bic(EK6{vH2zUuspxF)z%O7`txMFMOX{eYlM?fR1w3v4-Lwd z?EBlP2Q-hr6|+MJ6eV1+etj@ClX+Z1`^7f~gV&Na<#EOB+xMOdcV+563AoEYbsTwK zGEv+4gI!Ls(0jv2@x>0MFWLL5YrhX}0apGaqprTm48efGC{RGg0C_n%oO2M`_jCI z(>>EG4G5gtJpA(Ud)3Z2yH=x$qm_T|f&c!8-M&B4&!5c@Rq7J6VCzxvmSA7+^3BvT zb&KsT@t{$mq@j-n9&9v!*to#$TjGYyajsu2U_jid73=!;3Ar8L+J5fE?^?Y(Yks-X zm)B41P`ZEGy9=Ip7cBGRA2Tn{>Dyp_Y`~Hp9qcO)jOgooX840Y-uWZ&=;f>1Cc31| z82p*T)Nb+jUptgCs6p?jqV2lmuM_u<7JOtM{2xZ>hME0dO<>i@&7_Fdfn8e713@C=u@^kc^t zE-Q4a$+>#P1{<8Z#`}I;dS%7J0muJ z|MlY>qeoX4p4t!>zvATO)MJ#<;WB-XC&uZJA-Vj@2g5taGgL zp3a5muQ*!4HRRs9j8!-9UYmF1zN77y3d?(ZG}U41f$iyT?-rK5xwQ7==tuYK-19o$sp{9ehu?Z|Y3i1nd!AhTt)JV?8#ZOH zW>lE$H8lRb>u*J-_DXeo@|Rco!UJASo9^iUMc9nqm4*nNRL1(%fr_|h8q|Sw5 zo`yA>4I95HUvhkb$l4|LpT8ASveaJdgZ(E~{=VwZvqr{5mizj`nosZa*>K@^V{+`Z z`azp#U;1T)UFlY_9^;(L_$GuEE9iT`+ik{(gEPFgPy4-Lg^=z}UsjD=+Gc#xa{sbT z*HtL>c9W<&>!9Ek^Q1BE zOAc3<@65y3pLK+3chx4rLytE~?S=mnP*xKk++#&%VyL zBX^hn*>=K-YU`^^8d1Al&Gb)ZEb<;*pkTe=h?a%v)SawYba{>218@JHIrMfB_c#Ci zJn8VHUuLfSscf11JJS~KaP8fr&G3OmcNgB_@w1`T!Hb`tyy3C|Q*Jh_Ft^D5vFAr_*nabs55L{%H2vGQ zpQfLG)Fa;Qv-i6nIyPp^k}54u`8&A2?(9;evG2IRQK#m$UDY5d@Y2`Q2LJG2ZQr#C zlULuloI3q@`1grjcE7Xg{Jz-{+ZH_fq-@W+O{Z))5xy}pefWVPANE|Zz-Hx*W-af*;K!xEFPbR0ghb(utfAxV=^)8NEY&W}HDn5PcuOFwswkEjUTfNguclNzHeTVIZkJ9aSrNpIe z-cZbUNZYRQ>#u%3x752`4lmogwo&&GpM~|i#}9Q`_F0Lovs-*?JGxZ#qRQQqU7U`m z*7#4$6GnHdSBq3`e|X;K-}JMdKJTrn@s}L!KP%8`gTqI+-<>^f<&u^M=Qxye2)xmC z>a^rH3py^}V0A4ldej@6w)RPCanJb5a{r0R@BAF>b>PvPUF-(6_8(!WzWP6}xc;?r zQNdFKo~$pvs`Ze&2~!3XdH=?wuN%+pRIJC5u$^z;UOMCB!%=CcqodwR9Z=zr348Q2t`LJ`7^zUkn zsDAp|+dp+5aQerF6*d-i&S)@d{)Z2X*aolIe)ULNl~M^`ZTjx|x)bZl9yYwwCmk;p*mbu{!8UU)?e5U5>#|Xozi_>tVVKmsL_?czcu~Q; zL4VCM{@`4=i4MUzO`?@-}v){@Pct? zHqIYDD*d|~9m_R|bcyWv=kYlU8jg7Dy{Xq9HQSc3bYIiMo^jzJHLKT7+1{b!{u8BI zr}tjEZ{=^*z78$7d1n#Bf8OZ0_Kzhe`mXNWzw=Lz$DX|5>v%Nn`)bJpgFpT0rroF& zr$%3|_l4v2ZEMGbU-NU^mgrpUlddhlP4F$4vav(V@Vi4+{I;!pzn@B$e4~2#E;Wsx zOgZ`c9@@IUH|2%@Gi&*F&Xl2{f7PNj)cY@5`)JmnXZ2^=IDY0;Z2Y~kL+uk1j(_Yt zyUOWF$JT#mJ^rF!;W~{fwZDF&@P?Z99up&XFN)c&tEz3PRO(RG!+T+3kyl@vv-H@Mj`veH_^+7R z`J(%ZRl#5GI@aP|%E+`^OAI3pRQj~H^Y9a@)cnxJnOh$Fm!90uv%Fi6C+&liPED|_ z`rg4KXDcrGu(i!s-9G+!|Cy&zH(1qT`1q_2E|-~Yxpa3!TjdmB+2hN0?S($g`hS)V zEqhSe4olIs{9BjAO#POUEW0z=lD^MPlGeGglwp|(vSnOk8qYj5&&d*@t!(AyC}Ut- z)q~idag?J5jp$4nheRhP#U#WBx_f(gxf`S7qZ0bW#PL*t?&1pnGhxx4SWU7<+vNve&y`ZLzB@ zcI@>T$X;Yr6oVVC$l5X4a9+20dX10C#>aGxugS*OWaDSD@iW=fG1=5{H};Q>i62Oe z#BewEO^9uwTbTCTJsXPlWE8<*P`&m#kAjGWw#gFr;xZ6t%W3PDWh+Tih-<)QCCM=1QI8o=d~FO6_gW%9)PLwRKVIv#v@_ zAg*hADfM9__vm{o)u%6E>c`Dy#MS}1BOtTO&xi!Vs;3AQ&1$69@skVP;-w zb9yqPATvoaBRd>q5Hka2!P_tg7QzxpgZE%1d;l^qUPHWjf1N5r{9Y^1Y9Uwz>2M9a zjY@TegT%d}JFByx8t_JH)e2%D6~3>eR5Nrl3f_Uk@C071!n`3Q!UFgl{)F=Aus%eB z=(9|9?pZ-R?D8aR=(akF=mz89LSt4op@3RVi8~C1MX)-AG-{#La`+g&h2)k>O@{Yj zADn^=$b^!wp;w3&vlS+IwIRJj(OVeuNjE+uqOO7u>GxGPJq>?*ow)QOzVI$IB|XxH2{Lg%!yLXfnYJO$$7v_=6n=$Fw9~AUMsQcp=Bv=WnU^T3PLvRTUj?`OV19ngaT0?&r00SWoro%=!3`gN>I0hNu zT##}M9^eVy&>rGp3QU9PFcUVy7jOYC!LM)`>n|B@4O@V`_I?I zylJix#WIUeL!lY|lw9&^21->WY~=2Mw(L}E^9^DLL8{y>XH32Q&Q$Vr*FCv?j^J>1f;`c7u%YliYPm#qv_KQ*YjeYa1rdU6uPS>KoMv?<9K88Hmc-T(o_$Wv)BR-tf0DY26=-Fj)~Mv2SiT z^Ra~KT5$=}3N1{B$f~UjZo4H+QjFUe4ryU>LF1!Q*t5c4QazPzh7lVQT1yEzt9SeKW62H@vsTRs zIY^1PxXJQ5&8Xav@}+B4n;W10 zbhqmAA7FOQPkC`%movUlo8PnC1#o5dIZJmwX6JJH7r+hRXS?$?J7?+6JS>*}`8~&- zc~~sn)p?FP^RQUDtNR>xx=dND&{xy7H~+rqTeN8&PD`2o&yo4OG%`PDt}}m9=-FxH z^W1ahX=Ew$+36s0%uZWNch61-AGGsqcjkJ@sWTt+`fPXRda-n8o(?&~>HS>2=xN)6 zn|{goU5CCQY4TAnk{XO`#8 z^OEJcXU9)+fg`QC5JE#M45kgzp#2#PYiJvV-bS4;>Sq&^X{3b))pQn7SwE_+(}*## zFy2q+LOr@>ppA*^Gh}U;lbsx&r)e0HZDVQ6Xo9t=3wo*K7yW@dqEEXgOQoc3)Nd#k!$cL@Z8+)7 zNJj^CXp2WthjwqVEGEqsi}I8*0;*y8AVX`Y1eKu*yb98vK}{?tlf~h(1fAh2cz`E( zfg1r4h7uSdl>i9i@L1T7$HGXXP8=SZn1KgE2%ZSbNDF5logSovkVaYvnWTeIf^-lh zEkyq&u8){;SfOz`-BVlj= zCM<+i5Jhf^hjI1M861ZTuz^wjZde*f&VzR3vJUW&9OguBifv4ZhJ~;Q&Njgxc&{np zhRbjRCWbI@1ygQ%LXMKz10V1M79y)bFd3%6e)tk>Tar7VJw(8Vuo)fzD;kw2c*85? z)NRMa9;}0OI2TGQDifL=O$$o={J z_jDk&i|AMXwFs?N_E1AjvC2*Lsp@E%m`LRerV$TajC*aqov63)Q|_!S<2Q&(CAs0z)Y zC5(iV@GD%00^OLp>y90S_n>8gbv;QdkkTIjQUioQb`4-l-u!Q4|6ljvza4|;$+t#> zlep*P`00Q*Jt)^XH-nnYx#V33@6#AtYzDR5yPBcc<=8ZNWXD?Bs7xo*kNi}=yUUZi zRcn}RvQ1}oy2r|*>QZd0Y&+AQv#Js|KcKUF&xR(OY|~ja>)k7C)YuP(WZRkcoV7l( zUOVLsrejI+AB$q;fr8@lWN?2251r@_7EJ6f*G{56wZin!WR%G1TstcM92xCiV+k*? zs5D!gLG8#eXioKibD4U8HW8puJwTfzK%02dA@qs41XE-TdcA8VLYEL^)1@3kikB|sm`FK>6fZL=;!31=prWUe3Yg2GO4HQS ziwCLF9%*1b5+4v#o8N%A1OWJ`0%Ax@W;fi!1bT82o=K$^3eG;w1t&4cV` zCb6KoNL^y8jm!Adhg$ejZIGC1(~INm@QD*ki5?VvbE$>R#OhL=ZC%D^JkX>%+alH3 zwin0QQpH7XQaxA@kwY>~scF+Cry;qQE;&skry;qQnPhSBEXf`e>YUPDOv1BL%gc^u zEbeRJ_Oe5|mmSYq+|LfTT>m`j9@@ZD8%sQuY}#>kmLgXTeakaE)zI_8CpjORwUXju zV4Ns{ERkw*m~EEQMBFEkBH})Q6A}8N_N*n`*X=$Uzr$$Uzt6K#_H@ zEV8S$BAZ)ibRmlh=|UD2(uF*y+~+1lk5Y`2E+ob&k5LLJstXDznujPk6xW3~6wgDH zPL#T?Qtg~g9ZT~UMn_P8&H@RB+Yxj>~PIc4Wrn*_W zE%1+F4lSjJIkc2znC)>ZTW(FaUKi!e6w+kt&m0-FXEL<9NN=!n6QLK}oLM9fb&=#3 z$!n5dq*8mSx+rJHd2S!%*>zFQ9F&JBNp_MbNp^baDCNvoFBzqr87vP`lH4XylHB$W zQOd82#^=mQ=5^rzk9AQI>LM8$X_ZpepZT$adZG=h%+Jd(%XDnuybQ@q$6}fv%Xt|l znV&b8FZTa*EJLa1xtHOa`FU-~W@bU~GUfJ)L^AZl2Ab)@+CDjcdq|3lm|-9MK2XfL zS;xh*j^}4xzaYzg;nu?iM4oJNebAl;+A2uXaj4m`c2TZ>7K0MxWM*dD6;*@Q52$Rd z91Gb3Z*MA;+kR1Ql{gkE1!chL8T;~{!`$7Q+rOABgW451xDJ8UH{NGprLCH?;n*H7 zWu0JFM0-B*(Lftj%E?wu?`fx8>K0aiv8k%(}tbYo^GAhImd97ST$VDXcwWHwdtbPq;yrO z!QIvQraf876{Wp_`8mMnGDV8>(=Do2q@qKU9gLkJQ&KAFCoxPqY+}DX7{Y zo8-~VAnR0vc4J6x4#_4XZPUJ(LF4xhx1x8cZL&@zO>V{oNwyRL1z0>8&w@vJS;|oU z#a0sBwCPvL)iOJgwbaOLUxusA%gsWRm6e^ftqt#BwaKim&IS)tdrbps%_FYs$O21w z;5kVdS(Y1(e@5e+*qlznd?-LXhgQwIPf~{^fyWd8|GGyIPq(nMPHlZ`pp# zj75_SPu zy24L>R@RyB>fGpyYHziy>(69K4Z}r0{FaBGJ84UCn|RdZoRyPxmd0*cskGrn$w&H@ zyT*(x-OYYny?zlbeN9eG=HJpcT+>@WmgkE8`e`8#*7BIi3Heb{tdh3UTeCFxU-E{e zS0tft!+)~2_}iVSnZfpxN~(+lRu^s7Xfb{3qo|3Kk3?xXt%6FX#gwIv(?aFGwHI=2 zl=ZB&m>*!9_SAM=RxtKiD{cLpCMwG=-*{0Cyl*$fcB|T|#*C>gsy5%KrAk6xHoY8* z1cz4R+Dkgwt4H!waPFIZ3+^XyZAPY(a;QW~U!>)ueINZSq*5k(uy!W5t%9_h7Mt@c zOi@0y8^)es+R~We98|k%vT4TfXHH0HGc!$fi|NYZ)Gbn9>h+3|h3_%cQSz$3no6%v z}}TH#e(tU$lc$gK5BkaXMxGXH!GL>ZDaqL9lVP30qy zrtTGlNMcpRl!R`9DXNjjX=MJj7bf+Hip7*!(_~C%%n_KbnBy_Uf602~Fim;La=#?! z!Xo3N`X?AW$Hc}))--lV=pCJyERBriwdOJ;EN$h9saTIb3CVHVwJ##e$48ed*S3j? zN=!&f=$mY8*SBv>RJ1WXA+ZnkL7;ZFJ8we-wEZJbo_w(t!6NfTZ9|ST7Fb!l5U@pkK!BUW$^(#T9 zZq|W}>9>N6=|2H^)?q)$9KaC}*{49lWE$%iW4~oQ?=Ufj#Uv%mJ5G#Y!Pv>zSSBFF z^vW{jRR;Q)*;(@w>t~wf2#mx-;HAL2r!q+(6Br$DB&WnCXtLz|cqTJUV{s$LV&@MM z&LEIu*_ZIY9@?_$>n&QhY}+dAX*`0lZ-5NZiO4C+?5vokV|KM;(PMci4e}n-WVBn4 zhjcu-As{~wrf=m<&hoxZ)6}&GlUa#O1$$<>m9WSr@*ALWG3R9+W90D1bglR)^ADzn zT`eEvlG|VA@@8foW4x3+KMQ%2^C-{PLf*JM%41q5M|?--QJzeNn(J?99_4vk$QztT zd8YEyfD$X=9GEA0K0GdIimxs&I*;GAKAqGx9O2xK6H6Jp^+zf+2uo* zXVT}(hA+E(xM|^%y7uMcD-RXx?i#O)@QDkbCuVpI+|GOWP;oSQ(Scm{7*}jE?`ezoJ6=bkYt=+bZp~^Z}$_ zA$=9;|45&z9!TG@0R%!rXaqqZebmO#1Y~}r8H9lJg>%!dWA5Ej8= zSOPMyu?*gU<&XyN!h5g+R>J$R3Rc4hum(PaC#)-4hq)d$z(&{vo8cqa0$X7lY=<4N z6Vl;h*ae@!r?4CLz+Tt~pTXy_9}d7l_yWF!L+}+Gh9htkzJ_n$82ksmh2!uYoPh7) zB>VuU;79lgeumTV3!H(oa1PGH1-J;8;8*w!F2fbL3fJH|+<@QVCS<@ZxD9vU54a0| z!aev4?!yCk2#??~Jb_G*2`U3vfi>8GE!aT;;FCDY0UV(q6oSG~1o()cat2v2UKCuR z7!(ILC;=s*6qE*eXSS^ODGTMGJQ$$@xI;y#1eKu*yb7`|NLJ%lhZ;~5YJmrMf){v0 zZSVnK@B{g#NL`SZsRTehs1Gt%83+xb5d=XnG=?V76q-Q@GzVFa)Dn2?h*#h7!V_o% zZJ`~6LVM@{VIb?4IzeX$2YGd17w8JzpgTxD?uq$2^nys}4N=esqMZ$17IM? zI;c2^hXfb|gCP-;K-Nd4zz`S;!{7~g6NbYG7zv|bG^D~97z^WIJWPPMU?NO{$sl2# zia8CY!wi@SvtTyJ`8k+#VIItf1+Wknft-JA!E)@=vd+o*6-xCah~cG0g4*XHT_ zO8= z|62c3#A|0=p6%aa{_n!$kN-A^`ZxN2+sywq^qdl&=E5-YqTDx$&ONfZ*vj`+O@0^1 z<-Az!^{lPsdzBchn`YOA(fim>kFf(ikTCwe=|O%)&*Lk4vR}~Sh~O@kFTKoz^i~43 z-m95oc5BmuoBX%WdFtuW^Zai~jO9z9FT0t_p92E^P5zTMTeeWNE#K+W7hucREtB*U zFZl09`7_1;Mg6x$wzSi-8R+@T12u!_(f8JR+PeLV{ud?xNsVU*FY13mt{w8C9=yPH z|2F>SB1H`neyNV797$U&agn?%`AO1M>KCyulx3Rxm%smiw+8<8H%H+AKChy$#%~wTr$nMXh9$+i8?_7DM#gb5*SZ@! zo4&(R$Gu?#&!-V?NFgxWUQT~}vZYT_y*`o2kx9u3iP0@tz+l882D4?;K=qhBr)jNV|KNaHApy;r_%#i#8{icXJTgmN_4*{etj3~J@IEdgE|wVL zz5cP74$*y+avn<1QW9fc)|VVf?1?TdyprP_s<2S8nYRDF%QMxP@}&YPg_eEKN?dNr zZ3)Ic(Z=kDG2|%>V?f