From 74a43b9dea2336c32c8b9845a1ecf8616e17bd80 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Sun, 24 Apr 2022 13:46:57 -0700 Subject: [PATCH] LLCHAR: Expose interation variables fo I.S.OPRS instring inpname... So can be used (carefully) in more, trickier situations. $$OFFSET also now is the index of the current character --- sources/LLCHAR | 196 ++++++++++++++++++++------------------------ sources/LLCHAR.LCOM | Bin 22298 -> 22466 bytes 2 files changed, 88 insertions(+), 108 deletions(-) diff --git a/sources/LLCHAR b/sources/LLCHAR index db262b7d..80e08dd8 100644 --- a/sources/LLCHAR +++ b/sources/LLCHAR @@ -1,11 +1,11 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 8-Jan-2022 19:08:41" {DSK}kaplan>Local>medley3.5>my-medley>sources>LLCHAR.;8 106473 +(FILECREATED "23-Apr-2022 17:19:02" {DSK}kaplan>Local>medley3.5>my-medley>sources>LLCHAR.;12 105415 - :CHANGES-TO (FNS STRING.EQUAL) + :CHANGES-TO (VARS LLCHARCOMS) - :PREVIOUS-DATE "21-Jun-2021 18:08:19" -{DSK}kaplan>Local>medley3.5>my-medley>sources>LLCHAR.;6) + :PREVIOUS-DATE "23-Apr-2022 07:49:25" +{DSK}kaplan>Local>medley3.5>my-medley>sources>LLCHAR.;11) (* ; " @@ -31,6 +31,9 @@ Copyright (c) 1982-1988, 1990, 1994, 2018, 2021 by Venue & Xerox Corporation. (CONSTANTS (\FATPNAMESTRINGP T)) (MACROS \PNAMESTRINGPUTCHAR) (OPTIMIZERS FCHARACTER) + + (* ;; "Iterators expose control variables, $$OFFSET corresponds to current character (except inside user's repeatwhile or repeatuntil)") + (I.S.OPRS inpname inatom instring) (* ;  "For use when the inner-loop test in the generic operators is too expensive") @@ -1557,24 +1560,19 @@ Copyright (c) 1982-1988, 1990, 1994, 2018, 2021 by Venue & Xerox Corporation. ,NUM)) (DECLARE%: EVAL@COMPILE -(I.S.OPR 'inpname NIL '[SUBPAIR '($$END $$BODY $$FATP $$BASE $$OFFSET) - (LIST (GETDUMMYVAR) - (GETDUMMYVAR) - (GETDUMMYVAR) - (GETDUMMYVAR) - (GETDUMMYVAR)) - `(bind $$OFFSET _ 0 $$BODY _ BODY $$BASE $$END $$FATP +(I.S.OPR 'inpname NIL '[SUBST (GETDUMMYVAR) + '$$BODY + `(bind $$OFFSET _ 1 $$BODY _ BODY $$BASE $$END $$FATP declare (LOCALVARS $$END $$BODY $$FATP $$BASE $$OFFSET) first [PROG NIL $$RETRY (COND ((STRINGP $$BODY) (SETQ $$BASE (ffetch (STRINGP BASE) of $$BODY)) - (SETQ $$OFFSET (SUB1 (ffetch (STRINGP OFFST) - of $$BODY))) - (SETQ $$END (IPLUS $$OFFSET (ffetch (STRINGP LENGTH - ) - of $$BODY))) + (SETQ $$OFFSET (ffetch (STRINGP OFFST) of $$BODY)) + (SETQ $$END (IPLUS $$OFFSET -1 (ffetch (STRINGP + LENGTH) + of $$BODY))) (SETQ $$FATP (ffetch (STRINGP FATSTRINGP) of $$BODY))) ((LITATOM $$BODY) @@ -1585,120 +1583,102 @@ Copyright (c) 1982-1988, 1990, 1994, 2018, 2021 by Venue & Xerox Corporation. (SETQ $$FATP (ffetch (LITATOM FATPNAMEP) of $$BODY))) (T (SETQ $$BODY (MKSTRING $$BODY)) - (GO $$RETRY] - eachtime (SETQ $$OFFSET (ADD1 $$OFFSET)) - (AND (IGREATERP $$OFFSET $$END) - (GO $$OUT)) - (SETQ I.V. (COND - ($$FATP (\GETBASEFAT $$BASE $$OFFSET)) - (T (\GETBASETHIN $$BASE $$OFFSET] + (GO $$RETRY] eachtime (AND (IGREATERP $$OFFSET + $$END) + (GO $$OUT)) + (SETQ I.V. + (\GETBASECHAR $$FATP $$BASE + $$OFFSET)) + repeatwhile (PROGN (SETQ $$OFFSET (ADD1 $$OFFSET)) + T] T) -(I.S.OPR 'inatom NIL '[SUBPAIR '($$OFFSET $$BODY $$BASE $$END $$FATP) - (LIST (GETDUMMYVAR) - (GETDUMMYVAR) - (GETDUMMYVAR) - (GETDUMMYVAR) - (GETDUMMYVAR)) - '(bind $$OFFSET _ 0 $$BODY _ BODY $$BASE $$END $$FATP +(I.S.OPR 'inatom NIL '[SUBST (GETDUMMYVAR) + '$$BODY + '(bind $$OFFSET _ 1 $$BODY _ BODY $$BASE $$END $$FATP declare (LOCALVARS $$OFFSET $$BODY $$BASE $$END $$FATP) first (SETQ $$BASE (ffetch (LITATOM PNAMEBASE) of $$BODY)) (SETQ $$END (ffetch (PNAMEBASE PNAMELENGTH) of $$BASE)) (SETQ $$FATP (ffetch (LITATOM FATPNAMEP) of $$BODY)) - eachtime (SETQ $$OFFSET (ADD1 $$OFFSET)) - (AND (IGREATERP $$OFFSET $$END) - (GO $$OUT)) - (SETQ I.V. (COND - ($$FATP (\GETBASEFAT $$BASE $$OFFSET)) - (T (\GETBASETHIN $$BASE $$OFFSET] + eachtime (AND (IGREATERP $$OFFSET $$END) + (GO $$OUT)) + (SETQ I.V. (\GETBASECHAR $$FATP $$BASE $$OFFSET)) + repeatwhile (PROGN (SETQ $$OFFSET (ADD1 $$OFFSET)) + T] T) -(I.S.OPR 'instring NIL '[SUBPAIR '($$BODY $$END $$OFFSET $$BASE $$FATP) - (LIST (GETDUMMYVAR) - (GETDUMMYVAR) - (GETDUMMYVAR) - (GETDUMMYVAR) - (GETDUMMYVAR)) +(I.S.OPR 'instring NIL '[SUBST (GETDUMMYVAR) + '$$BODY '(bind $$BODY _ BODY $$END $$OFFSET $$BASE $$FATP declare (LOCALVARS $$BODY $$END $$OFFSET $$BASE $$FATP) - first (SETQ $$OFFSET (SUB1 (ffetch (STRINGP OFFST) of $$BODY))) + first (SETQ $$OFFSET (ffetch (STRINGP OFFST) of $$BODY)) (SETQ $$BASE (ffetch (STRINGP BASE) of $$BODY)) - (SETQ $$END (IPLUS $$OFFSET (ffetch (STRINGP LENGTH) - of $$BODY))) + (SETQ $$END (IPLUS $$OFFSET -1 (ffetch (STRINGP LENGTH) + of $$BODY))) (SETQ $$FATP (ffetch (STRINGP FATSTRINGP) of $$BODY)) - eachtime (SETQ $$OFFSET (ADD1 $$OFFSET)) - (AND (IGREATERP $$OFFSET $$END) - (GO $$OUT)) - (SETQ I.V. (COND - ($$FATP (\GETBASEFAT $$BASE $$OFFSET)) - (T (\GETBASETHIN $$BASE $$OFFSET] + eachtime (AND (IGREATERP $$OFFSET $$END) + (GO $$OUT)) + (SETQ I.V. (\GETBASECHAR $$FATP $$BASE $$OFFSET)) + repeatwhile (PROGN (SETQ $$OFFSET (ADD1 $$OFFSET)) + T] T) ) (DECLARE%: EVAL@COMPILE -(I.S.OPR 'infatatom NIL '[SUBPAIR '($$OFFSET $$BODY $$BASE $$END) - (LIST (GETDUMMYVAR) - (GETDUMMYVAR) - (GETDUMMYVAR) - (GETDUMMYVAR)) - '(bind $$OFFSET _ 0 $$BODY _ BODY $$BASE $$END +(I.S.OPR 'infatatom NIL '[SUBST (GETDUMMYVAR) + '$$BODY + '(bind $$OFFSET _ 1 $$BODY _ BODY $$BASE $$END declare (LOCALVARS $$OFFSET $$BODY $$BASE $$END) first (SETQ $$BASE (ffetch (LITATOM PNAMEBASE) of $$BODY)) (SETQ $$END (ffetch (PNAMEBASE PNAMELENGTH) of $$BASE)) - eachtime (SETQ $$OFFSET (ADD1 $$OFFSET)) - (AND (IGREATERP $$OFFSET $$END) - (GO $$OUT)) - (SETQ I.V. (\GETBASEFAT $$BASE $$OFFSET] + eachtime (AND (IGREATERP $$OFFSET $$END) + (GO $$OUT)) + (SETQ I.V. (\GETBASEFAT $$BASE $$OFFSET)) + repeatwhile (PROGN (SETQ $$OFFSET (ADD1 $$OFFSET)) + T] T) -(I.S.OPR 'inthinatom NIL '[SUBPAIR '($$OFFSET $$BODY $$BASE $$END) - (LIST (GETDUMMYVAR) - (GETDUMMYVAR) - (GETDUMMYVAR) - (GETDUMMYVAR)) - '(bind $$OFFSET _ 0 $$BODY _ BODY $$BASE $$END +(I.S.OPR 'inthinatom NIL '[SUBST (GETDUMMYVAR) + '$$BODY + '(bind $$OFFSET _ 1 $$BODY _ BODY $$BASE $$END declare (LOCALVARS $$OFFSET $$BODY $$BASE $$END) first (SETQ $$BASE (ffetch (LITATOM PNAMEBASE) of $$BODY)) (SETQ $$END (ffetch (PNAMEBASE PNAMELENGTH) of $$BASE)) - eachtime (SETQ $$OFFSET (ADD1 $$OFFSET)) - (AND (IGREATERP $$OFFSET $$END) - (GO $$OUT)) - (SETQ I.V. (\GETBASETHIN $$BASE $$OFFSET] + eachtime (AND (IGREATERP $$OFFSET $$END) + (GO $$OUT)) + (SETQ I.V. (\GETBASETHIN $$BASE $$OFFSET)) + repeatwhile (PROGN (SETQ $$OFFSET (ADD1 $$OFFSET)) + T] T) -(I.S.OPR 'infatstring NIL '[SUBPAIR '($$BODY $$END $$OFFSET $$BASE) - (LIST (GETDUMMYVAR) - (GETDUMMYVAR) - (GETDUMMYVAR) - (GETDUMMYVAR)) +(I.S.OPR 'infatstring NIL '[SUBST (GETDUMMYVAR) + '$$BODY '(bind $$BODY _ BODY $$END $$OFFSET $$BASE declare (LOCALVARS $$BODY $$END $$OFFSET $$BASE) - first (SETQ $$OFFSET (SUB1 (ffetch (STRINGP OFFST) of $$BODY))) + first (SETQ $$OFFSET (ffetch (STRINGP OFFST) of $$BODY)) (SETQ $$BASE (ffetch (STRINGP BASE) of $$BODY)) - (SETQ $$END (IPLUS $$OFFSET (ffetch (STRINGP LENGTH) - of $$BODY))) - eachtime (SETQ $$OFFSET (ADD1 $$OFFSET)) - (AND (IGREATERP $$OFFSET $$END) - (GO $$OUT)) - (SETQ I.V. (\GETBASEFAT $$BASE $$OFFSET] + (SETQ $$END (IPLUS $$OFFSET -1 (ffetch (STRINGP LENGTH) + of $$BODY))) + eachtime (AND (IGREATERP $$OFFSET $$END) + (GO $$OUT)) + (SETQ I.V. (\GETBASEFAT $$BASE $$OFFSET)) + repeatwhile (PROGN (SETQ $$OFFSET (ADD1 $$OFFSET)) + T] T) -(I.S.OPR 'inthinstring NIL '[SUBPAIR '($$BODY $$END $$OFFSET $$BASE) - (LIST (GETDUMMYVAR) - (GETDUMMYVAR) - (GETDUMMYVAR) - (GETDUMMYVAR)) +(I.S.OPR 'inthinstring NIL '[SUBST (GETDUMMYVAR) + '$$BODY '(bind $$BODY _ BODY $$END $$OFFSET $$BASE declare (LOCALVARS $$BODY $$END $$OFFSET $$BASE) - first (SETQ $$OFFSET (SUB1 (ffetch (STRINGP OFFST) - of $$BODY))) + first (SETQ $$OFFSET (ffetch (STRINGP OFFST) of $$BODY)) (SETQ $$BASE (ffetch (STRINGP BASE) of $$BODY)) - (SETQ $$END (IPLUS $$OFFSET (ffetch (STRINGP LENGTH) - of $$BODY))) - eachtime (SETQ $$OFFSET (ADD1 $$OFFSET)) - (AND (IGREATERP $$OFFSET $$END) - (GO $$OUT)) - (SETQ I.V. (\GETBASETHIN $$BASE $$OFFSET] + (SETQ $$END (IPLUS $$OFFSET -1 (ffetch (STRINGP LENGTH) + of $$BODY))) + eachtime (AND (IGREATERP $$OFFSET $$END) + (GO $$OUT)) + (SETQ I.V. (\GETBASETHIN $$BASE $$OFFSET)) + repeatwhile (PROGN (SETQ $$OFFSET (ADD1 $$OFFSET)) + T] T) ) (DECLARE%: EVAL@COMPILE @@ -1875,16 +1855,16 @@ Copyright (c) 1982-1988, 1990, 1994, 2018, 2021 by Venue & Xerox Corporation. (PUTPROPS LLCHAR COPYRIGHT ("Venue & Xerox Corporation" 1982 1983 1984 1985 1986 1987 1988 1990 1994 2018 2021)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (4009 74195 (ALLOCSTRING 4019 . 6042) (MKATOM 6044 . 6679) (SUBATOM 6681 . 8551) ( -CHARACTER 8553 . 9557) (\PARSE.NUMBER 9559 . 25279) (\INVALID.DOTTED.SYMBOL 25281 . 25776) ( -\INVALID.INTEGER 25778 . 27230) (\MKINTEGER 27232 . 29939) (MKSTRING 29941 . 32084) ( -\PRINDATUM.TO.STRING 32086 . 38264) (BKSYSBUF 38266 . 39800) (NCHARS 39802 . 41502) (NTHCHARCODE 41504 - . 43550) (RPLCHARCODE 43552 . 44613) (\RPLCHARCODE 44615 . 46150) (NTHCHAR 46152 . 46345) (RPLSTRING -46347 . 49558) (SUBSTRING 49560 . 52483) (GNC 52485 . 52658) (GNCCODE 52660 . 53428) (GLC 53430 . -53603) (GLCCODE 53605 . 54370) (STREQUAL 54372 . 56486) (STRING.EQUAL 56488 . 60826) (STRINGP 60828 . -60979) (CHCON1 60981 . 61768) (U-CASE 61770 . 64997) (L-CASE 64999 . 68859) (U-CASEP 68861 . 69435) ( -\SMASHABLESTRING 69437 . 69899) (\MAKEWRITABLESTRING 69901 . 70337) (\SMASHSTRING 70339 . 74045) ( -\FATTENSTRING 74047 . 74193)) (74380 79542 (\GETBASESTRING 74390 . 75044) (\PUTBASESTRING 75046 . -77785) (\PUTBASESTRINGFAT 77787 . 78533) (GetBcplString 78535 . 79200) (SetBcplString 79202 . 79540)) -(102859 105673 (%%COPY-ONED-ARRAY 102869 . 104719) (%%COPY-STRING-TO-ARRAY 104721 . 105671))))) + (FILEMAP (NIL (4223 74409 (ALLOCSTRING 4233 . 6256) (MKATOM 6258 . 6893) (SUBATOM 6895 . 8765) ( +CHARACTER 8767 . 9771) (\PARSE.NUMBER 9773 . 25493) (\INVALID.DOTTED.SYMBOL 25495 . 25990) ( +\INVALID.INTEGER 25992 . 27444) (\MKINTEGER 27446 . 30153) (MKSTRING 30155 . 32298) ( +\PRINDATUM.TO.STRING 32300 . 38478) (BKSYSBUF 38480 . 40014) (NCHARS 40016 . 41716) (NTHCHARCODE 41718 + . 43764) (RPLCHARCODE 43766 . 44827) (\RPLCHARCODE 44829 . 46364) (NTHCHAR 46366 . 46559) (RPLSTRING +46561 . 49772) (SUBSTRING 49774 . 52697) (GNC 52699 . 52872) (GNCCODE 52874 . 53642) (GLC 53644 . +53817) (GLCCODE 53819 . 54584) (STREQUAL 54586 . 56700) (STRING.EQUAL 56702 . 61040) (STRINGP 61042 . +61193) (CHCON1 61195 . 61982) (U-CASE 61984 . 65211) (L-CASE 65213 . 69073) (U-CASEP 69075 . 69649) ( +\SMASHABLESTRING 69651 . 70113) (\MAKEWRITABLESTRING 70115 . 70551) (\SMASHSTRING 70553 . 74259) ( +\FATTENSTRING 74261 . 74407)) (74594 79756 (\GETBASESTRING 74604 . 75258) (\PUTBASESTRING 75260 . +77999) (\PUTBASESTRINGFAT 78001 . 78747) (GetBcplString 78749 . 79414) (SetBcplString 79416 . 79754)) +(101801 104615 (%%COPY-ONED-ARRAY 101811 . 103661) (%%COPY-STRING-TO-ARRAY 103663 . 104613))))) STOP diff --git a/sources/LLCHAR.LCOM b/sources/LLCHAR.LCOM index b2e9905752b99f2c958fbae78c4293b170f93997..979ec6c16c31646bd5dfc75e9a6f28fad7642d3d 100644 GIT binary patch delta 2451 zcmZ`)OKcNI7~ZwR%OxZvfk2=zF^||0Nq6?)7pQn`ue0mj^*Xkb@`$M1*b-q)5;=y_ zUIMMuLt9knkXC9>g;Mp@nwVBV0ui|s0iyzH((G*Ps==MRckD@Q?v2jQ{fqnTT<@Rxuk7De=W)Es= zOj3ldFn*-%U}zZF!+nYZmVe*f-E9ZyR6djbPaLn^X>%CsgK>dR3L*1Ha830n$WI9!J#-lQNjs)vAEDLX?=;V5XLk^;`6g!AI+hM zq~8KzvEDLn9q+V({rho3Qa+PQu}#)i@vaB3`*>lg#M z%xET+fBX1QHUma-mDl=I{?u@ODC@M_oWM~$zbXyJ*R8b>R{qm##C3l<&G;8456tNP zjdY!KckO-R$Q-d|O1f*Avw{-~#}}qWxr~~x5l@tfi1_Fp@m@rnT}R;GjHs6m6@IUb zCr|h{@^xZ*&eC{d;c6vx?w<9QIdGqtiky6260>M{@Ahre5vg3N>Ok+2Jb0hN!%qP!~LqO%|t*MdSK(Jl1zN>dQ6dXS z)=N`Sy>zTllAB6rPm~%72V_w%-`dPzD$VIL#q-XlEe#JE2!dRcz~yVi1JodRNF9j+ zSfw?Uiy~?W9IzR%sy=_a@FVIC>?40e&pKPs>hLD?YIuv)INRMos4iMA%BVhgpkCXc zm++w@`uwdz5oy645(oOaf|z)~vh323VLf2a9zGuD4|f?w0SvftPu8iBYQE~}0Hv~_Yb$=i%x z@>{Ok{FcRW8!jB{Wq?wp%>$Q)jLTiiZIL#PHPgmo@hz`3L%$#z&DF2>Fpx2SL1RWu zrC84B5`i3r32fcUyxx=ImCcW_gd zi+i+2ZNuzsMf|JSCdrS~pNW}j3p_my-R)2a4_?PB_553ddj=bvjaTgYYs`U$j!$~0lSZ+n9u#C4>`D)rM&D27R z0`uUW5w$)g6iosKJEK`$*p*G%Vesv_6wulhZ!#K7c_~)Gq+K4P9h)hS84Y^8#n$M@ zmd0yXI(30`MG4rJo}*&y*nU00Zw$O7iRqP+xUFCc#ifEwDRQ~kfugHl*mh}0X zg%TR+703(dhu-eio*4s{Syj3B2JpRiTf{Egf&Rt|upDnxY^;QK#9jLmxGAydRk`X= zEM;^+ja|mY0U;jO;((zzbT-~H?lK&vHcxZ3Ia~T=_UV=E)5adl+Zj_--34NsGf%OU ZiDuNC_|n38Q6XU`8T{N?{4?RO{tH+s_Z9#E delta 2260 zcmb7FUu+X~9PhQGjHz20+aLwUj}l;A=yLbF>-Aa?dTp=m{p)qtb}(opOKLK96*Z9; zNu1)FF;Vx+d{BA7K%y_$twsYIH0%M{5){m$T>``yqdxes#z$lHch{|33orJez5f1u z?)&|GKEKaz;Y;G#?JX52_c|@A(9I*)Q3iTlJf!&@Nb&qLXZsk84vJ8 zH8m|Nf-jE03Z4#d_8joUbBY2suOAv3@_@qF>n|0aiWBsBI|fXEs4nnXA%+(<72>Q{ zf_UP%%7G4wWSIaBLeV6jN(dQWRs#d^R0d?Sx|m7~3Bx&F@q$oV7e+)am+{3gCh$PY zC!M!?qX5O3h*S{WBfo(`Spd4T-EMR6Q!}=iaG^klS7(n@Cc@icn|Ql@ z(ROOdwslUtZC`SLiPiDdd?jgAPs%m4W5)J_GA$+V-?d$ok_+2x_*44T`k5U^4-WS9 z8Y?%Fg(bUdV)d#u{Pv=4PC|bl?04rYl2JV+*2+D~v@DqjvQ$Sv%%M|)p96W7Pp4D7 zDga1RAgyarA(I&rMtEfeK#FS_p)fTOIWwBU^ypD7CIE^-)bTzC1^oy}V3Gz04)D6p zkNUKDJR@X5fLWt14cI{QUaSlBll8GkF3yuANdd?(01Fk%@)1Qy0|;3#nC7E0pAZId zK{Oa_%;Ntf4f1*}l`^FFV&9rC<>IPUf?kicbqfi!qj9rvyL*&_3aO z*PqYWZ1x6skDlc21aic+I(Jtr?tcFt+~rVjLUmf)T}7`X_DUQFlr@fUH*1eHyU|CT zBR_2B2>Y~2dK$7OM;uL2%@Z)#0tNAzXgMX237VUCLmD<%GEd(+OOT{6OMW}_PYL}F zNV1ryQREbNb}c&_Mw{g;6X>w$9>lq!)Nsm7snfC*8**~tMsZB4m4B0pZ`8^^kGtye zQADqaW_--G#>c#jJ`uq_>{Yx8sMCsUW``m#TrZB{H2Fg`VSX8Rp@*Woo5JS-_gFU? zR+pj7UT`F^=($0Fo*md-J}oT}#CND)IZE6?mxp`Ns|rUXP)I#wH&)P?x{HyDZ5?K^ zRc~pXYcB8CTw3SCO(pqPd50+9SMS*>vavj;7|Zjehh{2bq@Ff>ye@76I`$MGuL*=3 zu%Py+#eZwl?dH2GqO5+qf%#xZDTIK&4?R}*Oj^;XjR=v^tdIc=6KF_g*@3}f*`gss zwdhQ9*z!p&r^HfOKr>j)%~3&Psn-$e4#UP-AJE+O^n_fnF=j1-EMt<}1Ia)$92KO> z^Qrgjeb=xd+9Cx@V9d=wmFR3D%;UZQdUKe2;cSH89@)~Y_g#mvGT%J3Xp*%q38uW7 zmuuzys5ZRYDH_YyODm{P7l`*!ULSJDD-#%$-eTQid3=lAG;b~(sr%7oeRut+t)M$P zJ2`?QiDH2&uLTW5ve@DcmT8s+g05>ipv_=U=d56@uZ{Cr0GmZIFOMclA-$o}dicN% oQX{k(c28q&?X46JuO>i>f#_Q1b303-3)#JGIIR5T3)zI@KRQpa+5i9m