# Output the full name of titin

Titin is a protein found in muscle tissue. It is a pretty big protein, and its full chemical name is giant as well. Comprising 189819 characters, the full name of titin would take about 3.5 hours to pronounce. Your task is to output this entire name!

# Details

The full name can be found here: Gist (this file does not include the trailing newline)

The MD5 hash of the output is ec73f8229f7f8f2e542c316a41cbfff4 (without a trailing newline) or 628c6eb157eb1de675cfc5b91a8149ce (with a trailing newline).

• You may not access an external resource, be it a file or an internet location.
• You must output only the exact text from the pastebin to STDOUT or STDERR. Nothing else should be output to your chosen output stream; leading and trailing whitespace are acceptable.
• You may not assume there will be any input, but you may assume that there will be no input if needed.
• You may output anything to the other output stream (STDOUT if you chose to output to STDERR and vice versa)
• Standard loopholes apply

This is a challenge, so the shortest program in bytes wins!

# EDIT

This is NOT a duplicate of the Rick Astley "Never Gonna Give You Up" challenge. Besides the tags, they're not even similar. In that one, output is a multi-line song with a few sections that repeats the first two words of every line. In this one, output is a fairly compressible string with 189819 letters. Please don't close-vote this as a dupe of that.

• It also takes 3.5 hours to copy-paste as well :)) Apr 15, 2017 at 20:04
• At first glance, I thought we had to output the full name of Tintin, which didn't seem that hard. Apr 15, 2017 at 20:16
• "the full name of titin would take about 3.5 hours to pronounce" Not only would, it's been done: youtube.com/watch?v=NFR-ADakI-c Apr 16, 2017 at 1:42
• @DownChristopher How is the difference not apparent? In that challenge, the output is a multi-line song with a part that repeats the first two words every line for a bit. In this one, the output is a fairly compressible word that has 189819 characters... I don't see how they're even similar except for that they're both KC challenges. Not every KC challenge is automatically a dupe of the Rickroll challenge. Apr 16, 2017 at 22:32
• I'm disappointed that the bash command look titin didn't work. :P Jun 16, 2017 at 14:20

# JavaScript (ES6), 1684016825 16814 bytes

Saved a couple of bytes by:

• inserting the last acid prefix in the packed string as suggested by ETHproductions
• choosing the next character group in a slightly more efficient way when there's a tie

Assumes Windows-1252 character encoding. Outputs without a trailing newline.

Below is a simplified version without any actual data.

[...Array(256)].map((_,i)=>i<52|i>126&i<161|i==92|i==96?0:s=s.split(String.fromCharCode(i)).join(...dictionary....slice(j,j+=2)),j=0,s=...packed_data...)&&[...s].map(c=>'methion|threon|glutamin|alan|prol|phen|leuc|ser|val|glutam|glyc|histid|isoleuc|tryptoph|argin|aspart|lys|asparagin|tyros|cystein'.split|[c.charCodeAt()-32]).joinyl+'ine'


And here is the full version:

Try it online!

The TIO link includes some additional code to print the MD5 of the output rather than printing the output itself:

ec73f8229f7f8f2e542c316a41cbfff4

### How?

This was compressed by:

1. Mapping the 20 distinct amino acids to ASCII characters 32 to 51.
2. Repeatedly replacing the most frequent 2-character group by a new ASCII character in the following ranges:
• 52-91
• 93-95
• 97-126
• 161-255

Which leaves us with a dictionary of 336 bytes (168 entries of 2 characters) and a final compressed string of 16161 bytes.

The above code is doing the exact opposite.

• Very, very nice. I was going to do something similar but had to leave for a couple of hours. I think you can save another couple bytes by including the last ylisoleuc in the compressed data and just doing +'ine'. Apr 16, 2017 at 0:49
• @ETHproductions Ah yes, you're right. I'll do that tomorrow. (I've just switched to another computer and don't have the compression code at my fingertips anymore.) Apr 16, 2017 at 0:55
• I actually thought about doing just the same, only up to 126; but actually I had more important things to do these holidays. Very nice work! * bows * Apr 16, 2017 at 22:51
• What's wrong with 0-31, 127-160?
– l4m2
Apr 24, 2021 at 13:14

# Mathematica, 319 + 14971 = 15290 bytes

For[p={};a={t={{{{{tyros,asparagin},prol},{ser,threon}},{{lys,alan},{glutam,val}}},{{{{phen,{methion,cystein}},argin},{aspart,{glutamin,{histid,tryptoph}}}},{leuc,{,glyc}}}},r=Join@@IntegerDigits[BinaryReadList@"b",2,8]},r!={},If[AtomQ@a,p=Join[p,{a,yl}/.{,yl}->{iso}];a=t,a=a[[1+#&@@r]];r=Rest@r]];##~Print~leucine&@@p


Incredibly, this is exactly one byte more than this bzip2 answer. Can somebody find a couple of bytes to save?!

This is a program that prints the full name of titin to STDOUT. We use the same structure described in Jörg Hülsermann's PHP answer, and additionally note that all the words except for "iso" end in "yl", which we add separately each time unless inappropriate (this is what p=Join[p,{a,yl}/.{,yl}->{iso}] does). We store the data in a 14971 -byte file called "b" in the working directory (hex dump is here), which is converted to the list of its corresponding bits by Join@@IntegerDigits[BinaryReadList@"b",2,8].

That list of bits has been determined by Huffman coding, which is a lovely data compression scheme that takes relative frequencies into account; it requires the decoding template, stored here as the binary tree t, as well as the raw list of bits. Inexplicably, Mathematica doesn't have a Huffman decoding (or encoding) built-in, so that's what the For-loop implements.

• Never would've expected to see a Mathematica answer here, nice! How did you get away with not using strings for the words? (Also, if I let this run, how long would it be expected to take?) Apr 16, 2017 at 6:17
• (It takes a bit less than 2 minutes on my machine.) All those non-strings tyros, asparagin, etc. are interpreted as undefined variables, which can still be manipulated by a hopeful Mathematica; fortunately, Print is perfectly happy to print the names of undefined variables, and also (super conveniently) prints whatever arguments you give it without intervening spaces, thus doing away with needing to 'StringJoin' anything. Apr 16, 2017 at 7:37
• What about the Mathematica function IUPACName["Titin"]? ;) Apr 16, 2017 at 8:45
• Also, I feel that the amino acids are a built in in mathematica (citation needed) Apr 16, 2017 at 11:58
• @BetaDecay Trust Mathematica to have a builtin...
– Nic
Apr 16, 2017 at 23:19

# Bash + sed + xz, 133221329012785127061269412687 12681 bytes

sed 1d $0|unxz|sed /sed 's:[A-T]:yl/g;s/&/:g'<<<AvalBglutamClysDthreonEserFprolGglycHleucIisoleucJalanKaspartLarginMasparaginNtyrosOglutaminPphenylalanQtryptophRhistidScysteinTmethionyl/g\;s/yl$/ine/
<12479 bytes of binary data>


Try it online!

• I think this is using LZMA, right? As a side note, I did a similar test with paq8l which is compressing the uppercase letter string to 11877 bytes. Apr 16, 2017 at 1:34
• Yes, it's LZMA. Brotli does better, but not as good as paq8l. Apr 16, 2017 at 1:36

# Bash + sed + paq8kx v7, 11682 bytes

The submission consists of two files: an arbitrarily named Bash script (23 bytes) and a paq8kx archive named a (11657 bytes, plus 1 byte for the extra file, plus 1 byte for the specific filename).

### Bash script

paq8kx -d a>t
sed -fd b


### a (base64 encoded)

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
I73a0K9oh4SyJNOn8A8Lj6ZTAmw1LeRJ9dwZK9Y=


$bash titin.sh | md5sum ec73f8229f7f8f2e542c316a41cbfff4 -  ### How it works The first line of the Bash script – paq8kx -d a>t – decompresses the archive a, redirecting its output to t. The redirection is required as paq8kx prints information to STDOUT, which should not be part of the final output. Said information will look as follows. Extracting ./b 26926 -> done Extracting ./d 307 -> done Time 15.36 sec, used 1929185730 bytes of memory  This creates a sed script d with the following content. s/T/methionyl/g s/S/cysteinyl/g s/R/histidyl/g s/Q/tryptophyl/g s/P/phenylalanyl/g s/O/glutaminyl/g s/N/tyrosyl/g s/M/asparaginyl/g s/L/arginyl/g s/K/aspartyl/g s/J/alanyl/g s/I/isoleucyl/g s/H/leucyl/g s/G/glycyl/g s/F/prolyl/g s/E/seryl/g s/D/threonyl/g s/C/lysyl/g s/B/glutamyl/g s/A/valyl/g s/..$/ine/g


It also creates a large (printable) binary stream that encodes the different parts of titin's name.

TDDOJFDPDOFHOEAAAHBG<26886 more uppercase letters>EHGMBPGEKEJDAMIRILEI


Finally, the second line – sed -fd b – executes the sed script d on the file b, printing the desired output to STDOUT.

• Watch out, Mathematica is coming! Apr 17, 2017 at 8:49

# Pip, 277472708119701 19229 bytes

Take that, Bubblegum!

O("alan argin asparagin aspart cystein glutam glutamin glyc histid isoleuc leuc lys methion phenylalan prol ser threon tryptoph tyros val"^sA*Y"..."R^(PA3,68)."xyz{|}~
!"Y"uttscfkmovgsmmoshiwnqtwjgioettdwnmvmfisgnjdgkrvik nrdrerjikomezastkvktssdewmdogtvtwweidsrineogsiwedkngwfotnsdtnomowrmsqemikiksoidiorntgkmtniwswowirrwt"<>2)J"yl""ine"


where "..." is a very long string. Here's the full code as a Gist.

Try it online! (Results are truncated.)

Strategy: split the name on yl, and encode each piece as one of the lowercase letters d through w. Use their code points (between 100 and 119) to index into the list of pieces (which is of length 20, so the indices are taken mod 20 automatically). Join on yl, output, and tack ine on the end.

Further compression: find the most common pair of letters in the encoded string, and replace it with an unused ASCII character. Repeat for all ASCII characters # through c, xyz{|}~!, space, and newline. The code takes this twice-compressed string and replaces the characters that aren't d through w with their corresponding two-character strings. Goto paragraph 1.

# PHP 18731 Bytes

echo strtr(bzdecompress(base64_decode("$base64encodedstring")), [A=>alanyl,B=>arginyl,C=>aspartyl,D=>asparaginyl,E=>cysteinyl,F=>glutaminyl ,G=>glutamyl,H=>glycyl,I=>histidyl,J=>isoleucyl,K=>leucyl,L=>lysyl ,M=>methionyl,N=>phenyl,O=>prolyl,P=>seryl,Q=>tryptophyl,R=>threonyl ,S=>tyrosyl,T=>valyl,U=>isoleucine]);');  Try it online! Create the Base64 string Replacement of all words with uppercase chars in the range A-U after that bzip2 and base64 encoding $a=preg_replace(["#alanyl#","#arginyl#","#aspartyl#","#asparaginyl#","#cysteinyl#","#glutaminyl#","#glutamyl#","#glycyl#","#histidyl#",
"#isoleucyl#","#leucyl#","#lysyl#","#methionyl#","#phenyl#","#prolyl#","#seryl#","#tryptophyl#","#threonyl#","#tyrosyl#","#valyl#","#isoleucine#"],range("A","U"),$titin);$z=base64_encode(bzcompress($a));  ## PHP, 19920 Bytes After replace the words with numbers and create a very long decimal number I can only read the word "leucine" I have 20 words found that I have replace with numbers After that i use bzcompress and the last action was base64 encoding $g="base64String"; # see online version
echo $o=strtr(bzdecompress(base64_decode($g)),array_flip(
["methionyl"=>9999,"cysteinyl"=>9990,"histidyl"=>9909,"tryptophyl"=>9090
,"phenyl"=>9009,"glutaminyl"=>9000,"tyrosyl"=>899,"asparaginyl"=>889
,"arginyl"=>888,"aspartyl"=>800,"iso"=>70,"glycyl"=>79
,"prolyl"=>78,"seryl"=>77,"threonyl"=>6,"lysyl"=>5
,"alanyl"=>4,"glutamyl"=>3,"valyl"=>2,"leucyl"=>1]));


Online Version gzinflate

## The words and count

[methionyl] => 337
[threonyl] => 2083
[glutaminyl] => 724
[alanyl] => 2304
[prolyl] => 1834
[phenyl] => 672
[leucyl] => 3351
[seryl] => 1910
[valyl] => 2414
[glutamyl] => 2324
[glycyl] => 1731
[histidyl] => 391
[iso] => 1658
[tryptophyl] => 401
[arginyl] => 1405
[aspartyl] => 1430
[lysyl] => 2199
[asparaginyl] => 902
[tyrosyl] => 829
[cysteinyl] => 356

• ("19 words" should be "20 words") Apr 15, 2017 at 23:21
• @GregMartin Thank You Apr 15, 2017 at 23:37
• I bet you can save a few bytes by flipping the array manually and omit the quotes for the words. Why the weird numbers? Apr 16, 2017 at 15:47
• @Titus Yes but I found a better way to make it. The first way was my first thinking and i have try to convert these numbers additional to base 36 but this was not a good idea Apr 16, 2017 at 16:45

# Bubblegum, 19655 bytes

0000000: e2 e5 7a 4c bf 5d 00 36 99 4a ef 2b 08 5d b1 93  ..zL.].6.J.+.]..
0000010: 69 cb 7a 61 51 8c 3c 7c 04 41 de 7e ea ed 68 3c  i.zaQ.<|.A.~..h<
0000020: ca 5c e1 c8 6c 5b b5 31 2d 0b 4e e2 8e 52 06 ec  .\..l[.1-.N..R..
0000030: 5e e6 da d5 f2 f5 d3 8f 83 a3 51 0b 45 5d 19 c6  ^.........Q.E]..
.
.
.


Here's a full hexdump.

You have to paste the code manually, but you can Try it online! (only shows the first 128 KiB)

• ... Well, at least it's shorter than just straightforward printing it... Apr 15, 2017 at 19:41
• When the output is cut because of a single word. Apr 15, 2017 at 21:32
• Yea, bubblegum got beaten! Apr 16, 2017 at 15:32
• Can´t You save about 35% by using 5 bit to 8 bit encoding? Apr 16, 2017 at 15:44
• @Titus Bubblegum only understands plain DEFLATE and LZMA encoding. Apr 16, 2017 at 17:23

# bzip2, 15287+2 bytes

BZh91AY&SY...


Full source (hex-encoded). Run with bzip2 -c. Where do I pick up my "best programmer" trophy?

• I'm afraid bzip2 doesn't qualify as a programming language. Apr 16, 2017 at 0:16
• @Steadybox Peter Taylor's idea of what "qualifies as a programming language" is a flawed one (see Bubblegum). In any case, it's not endorsed in the question. Apr 16, 2017 at 0:22
• Well, yeah, Bubblegum stretches the rules quite a bit to fit that definition. Apr 16, 2017 at 0:51
• I would say that this is not a valid answer because it's just a compressed file; bzip2 is not an actual programming language, it's a program itself. Apr 16, 2017 at 1:05
• @HyperNeutrino I don't think it's necessary to. The size of the stupidly-compressed output makes a useful goalpost, if nothing else. If you've done some clever stuff in a KC challenge, but you still haven't beat bzip2, that's a good sign you haven't found the right approach yet. Apr 16, 2017 at 8:30

# R, 17684 bytes

E="/Td6WFoAAA..." # base64 string reduced for better readability
U=unlist(lapply(match(utf8ToInt(E),c(22:47,54:79,5:14,0,4)+43)-1,function(x)x%/%2^(5:0)%%2))
D=memDecompress(as.raw(sapply(split(U,0:(length(U)-1)%/%8),function(x)sum(x*2^(7:0)))),'x',T)
for(i in 1:21)D=gsub(LETTERS[i],paste0(el(strsplit("phenylalan valylthreon isoleuc leuc val glutam alan lys threon ser prol glyc aspart argin asparagin tyros glutamin tryptoph histid cystein methion"," ")),"yl")[i],D)
cat(D,"isoleucine",sep='')


Try it online!

The approach is similar to other answers :

1. Remove the suffix "isoleucine" from the original string
2. Replace each occurrencies of the following tokens with an uppercase letter in the range A-U :

        TOKEN   REPLACEMENT
phenylalanyl             A
valylthreonyl             B
isoleucyl             C
leucyl             D
valyl             E
glutamyl             F
alanyl             G
lysyl             H
threonyl             I
seryl             J
prolyl             K
glycyl             L
aspartyl             M
arginyl             N
asparaginyl             O
tyrosyl             P
glutaminyl             Q
tryptophyl             R
histidyl             S
cysteinyl             T
methionyl             U


obtaining a string of 26610 characters

3. compress the string using the R builtin memCompress(string,"xz") obtaining a raw vector of length 12936 (bytes)
4. encode the vector to base64 (because I don't know a better way to store these bytes into the script) obtaining a string of 17248 characters

The code does exactly the opposite (from points 4 to 1) and prints the string to stdout. The TIO captures this outputs, save it to a file and compute the md5 hash to verify that is correct.

Note: we can't compute md5 directly on string because we need a package that is not installed on TIO.

• saved 37 bytes thanks to J.Doe
• There are only 20 amino acids. I noticed you've got some that don't exist: valylthreon (really valyl + threonyl), phen (really just phenylalanyl), lyc (doesn't exist) and one extra isoleuc are in your code. Sep 29, 2018 at 18:39
• @J.Doe: Yes, some of them are "pairs", replacing them gave me some advantages in compression (e.g. phenylalanyl is repeated 672 times, so replacing the pair instead of replacing the 2 separatedly saves some bytes). But isoleuc repeated and lycyl are definitely leftovers of some tests, thanks for pointing it out ! :) Sep 29, 2018 at 19:55
• Sorry, I didn't explain that comment well. I mean that "phenylalanyl" is a single amino acid. They will always occur together. Confusingly, so is "alanyl", so replacement order matters! Sep 29, 2018 at 20:47
• @J.Doe : ah, so I can remove phenyl from the tokens, thanks ! Sep 29, 2018 at 21:01

# PHP, 19851 18639 bytes

204 bytes code + 19647 bytes base64 data
207 bytes code + 18432 bytes base64 data

for(;$c=bzuncompress(base64_decode("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"))[$i++];)echo[val,glutam,alan,lys,threon,ser,prol,glyc,leuc,isoleuc,aspart,argin,asparagin,tyros,glutamin,phen,tryptoph,histid,cystein,methion][ord($c)],$i<27598?yl:ine;


or, without the data:

for(;$c=bzuncompress(base64_decode(""))[$i++];)echo[val,glutam,alan,lys,threon,ser,prol,glyc,leuc,isoleuc,aspart,argin,asparagin,tyros,glutamin,phen,tryptoph,histid,cystein,methion][ord($c)],$i<27598?yl:ine;


I took the words ordered by number of appearances (descending), replaced them with bytes 0..19 (isoleucyl and isoleucine share code 9) followed by gzdeflate gzcompress and base64_encode. In PHP:

echo base64_encode(bzcompress(strtr($o,[asparaginyl=>chr(12),glutaminyl=>chr(14),tryptophyl=>chr(16),cysteinyl=>chr(18),isoleucyl=>chr(9),methionyl=>chr(19),aspartyl=>chr(10),glutamyl=>chr(1),histidyl=>chr(17),threonyl=>chr(4),arginyl=>chr(11),tyrosyl=>chr(13),alanyl=>chr(2),glycyl=>chr(7),leucyl=>chr(8),phenyl=>chr(15),prolyl=>chr(6),lysyl=>chr(3),seryl=>chr(5),valyl=>chr(0),isoleucine=>chr(9)])));  Moving from A..T to 0..19 did not only save 4 bytes of code (65=>), but also 3 bytes of encoded data (with gzdeflate; I didn´t test again). replacements, words and count:  0 val # 2414 1 glutam # 2324 2 alan # 2304 3 lys # 2199 4 threon # 2083 5 ser # 1910 6 prol # 1834 7 glyc # 1731 8 leuc # 1694 9 isoleuc # 1657+1 10 aspart # 1430 11 argin # 1405 12 asparagin # 902 13 tyros # 829 14 glutamin # 724 15 phen # 672 16 tryptoph # 401 17 histid # 391 18 cystein # 356 19 methion # 337  • 18432 Bytes bzcompress against 19647 Bytes gzdeflate only for the base64 string if this help you Apr 16, 2017 at 18:08 # Python 2, 18409 18403 bytes (with no libraries) n=sum(95**i*(ord(v)-32)for i,v in enumerate(r'''~'W/P58:Ote}|QRokHosM/W%~zh%Ab*ZI~i4?=Z/$_-Y*6D{ EGAP\ENvC,4=v$YQ#Z=<)e^5!p5*|K/Ap|.?CyO*51Ladt8cit>w~1w2@{8.kb%;2n}Xvp8d{/GE4_c'8dO\)Qu(5G8[::X-(cMkgKeUli@0HJNa@Y84p^~:8'Jn #BoNyJn#5KAy[Lb} K{i=TlKzA^#EBWd>,|Ut!V.y5GCiXrO?~'dGYY;Pg6A|ub<ASiLi_@gL?Fb14=!x4-HE@4>3<_thTv&~8X%T2@;gaQy8Ao=DAnI50|7N6_lh=~7gF-@;CmFz:]?aBr~]K}eoFh{nG!4&:T>MSKxB6{N0TJ<ig@Md(ix?*$;E0H5<f/M7EubRYLA1A_Cuu0g"]!#w,Hf/uH2(a~~41\D.w"pg|{vO=.a)(xEqiW4/h7GIc3=vVKH[{7gTMpubkk5*YJ=b7Cn*MAmqsrTU%RE53E9{u^6@\FH&00={e2?EaeKu6>X3*B4g=b7'OW;p@2-+IoWPJVsg"D-6yiwE)2Rd|"tM!|LVJ&gGLQGdv8WXAnT[me5~+(~cJYxBx%UgO^^Eo|?fE/6~@wb;7pw pHln{[PyjV}bfbbBJBomt'@jiPZ.Rq"fpBe'IDiqCtV?JP80jZuxl#-,V&5oQ<.{/kn>bR!G;2sK#w8qXxQ-1VloKc+D5*EF3 qt*t9S\fq?^T54>\THI0#:l?guj}p&,yWNV1TZP^O.(BW8YK}?sD6IV"haFpfNZV>[CA<tWVru5JiN+[j)KZyfg-axjd?E70,ae5(<)GR:9B?k0~ju#YoZb9CglDy<d9qSx$5d[9scc8Bpc}X_NU^&K@- 0k* D'Pyy kI8&^:5=cTclE};2r,^)&(t'f]^o-ZPHG"q^q;D^H[rFh1}O9qUEYWeg6F@y2!OwUnG2<)7qinEFJxa+%!byTu>oQOa+dhh{W4Ud"<FHl(r%Wjn>la[zgz"S:AubNNuYIjj*:FB1Aco.zjI~QHqy{93] Po^k3 yj/yL7'}lf24=R/osaJHa9OF5%l*$MiBV==m_H=sJd/G)Ew2k-X|g$~E)s;s.R55x+6pmQIct0,ToJkoSu?D3@O=cO+ZWg8FfsVhq?D^AB2|OzY~e;/9M~KDP)GMyC%v].1.u_'6A"y=|HE2h~GQjwW7j;1%KZ4fe8&x.{clSU'}rUsX+(q*mzzDtMwNZZa$c_a?SsIN*tA^{<Q\c'$$-M&7douJ^@uhr##?|z\zoq#POF|sbvI#*+IPeq<'EG'eTOhyd8M^i*|-haVa}.9r@\O6P-T<B!B<5d@r/|O](J8TW=Wjt=rS^H)qZ-la/"|" D49PxtBPmv;ir<:w7~x@jf[q_:z3e@p.+5/>)(NYqe]0#cP+7U<cglKWTR-JS4-;C_Ha#*N1IGV;,(GA5;9F<4ZJ0^u,]B{DNDIc{uu8<M\2~X3?Ym7.ij%:86}8~!2w7oy8!#_k%/hQyn)DLBOqE7w]w8@d[lSE4:)w\'&*>#?b|ty2'z(!HNJ(oHkZ fTbR{WC^?]4wkPqT+&ka;XL(N?7*[{a(@**GFl\4Do84*&DI\TL"HR:NKiXXtC(5?vYHm'g0J*w+(8?M4d:? L=|{2ld^@_M%;zz27JOVZU\Yr(~cmw>#dA!oQj*v:Z6uO2Km,}gGYQ>" ;1]'p[:s/z>_Dbj,}dET=B\/mq]+Iy/8[^PXQz7M~^30l[|E-{SPi^>wJ2D^[fU#[("yZ:ij-V>T{Etro9={/4AstUe#4e"nqBkE%:~Q/%[&Q?#89[v6!I9:m#a]hP;'CuO2bj|8W:DNle/H[ra;o(;9>a-AJ4<Y2W1j{fP2*a?6EAR@hc!Z=&Ai]7vTN geg.rd4Mru|2u1t?5# DK19#:B}~EB9-]*Uo igH;AO!6PZ=:^Ug{1M-M"im}jmezk,.P*KeD_3H*|]',?c412GLa;qa5#[tsjjRVGyT[5 tY-QGc2QjZs/5Z>g+=,:NG ccTmgW9<&Q3kmaFPec(=}h:NlHWh"x;Y9"&~y2l6RWq*Gc28!+DhnK5=Lto4.X*G&LCq0JNZJoC-l2!n9B#A&=kPjuz2C3CVXIW{v7d6zy!/%|dt:x^i^*f=]+~r!U8P{ejrlN6ktBm+ViU)d3Of.]&xRKtlOi!gQLKtms<g;\&-'rUU!@M4dq(3J&vX)#:]"qbCtp@S<?~y]vxSp.u9F\FyOq3=xXd*X|]JP-[08{*>ek,Cd;-Mi;Jj~U~hCI&^i]BrPyr{O76FCP=n_R>h!(hXb>ZTx\.qqbVD>#kx;*Pp%7BxUrV7'M,;/cJ&pD/pVu+!){ft.MV|d2Dzq;^aA.I,NuCKMCS|BGVNup_4F0)f~/{wzL9789F.d{IZ+ E?}g1d{ne [>~uB#S<.6H#'[OAvg^O,P-_OHai]oHjf].s2KCWd Va3Bp5NA~HN1y"@h6F5wuPi\'-AG-T!#j=i.Z'cp'7gv=l|Rf:=QIJi29j1T h)?QB=n2Q7*z]cF#6':^85Cd[RIl{8.Xx~')EvtuIP#kfy_WoxE3,iwd;<yP4o>1()MhfY-?"bm/PORKI~,X\'ry.Pr#7;nOnzCfa)NCv*T~a1"~#w"ZBb<@xy-|GH=a-cL5 X ZeWEss8Vvv|ZBqZ"l&wAk@R?P]E,NO6"n=,M_{E#{2k]xo"d.&w i_q!1Lz0o=0OYs5Xo<S"R,joLW<Sxqu'aZrq?rWsQ2/C&A*Lknz#x;+nHbKX.KsC>1)P98s@=3D!{,MBy~9Z1(t,Hj\nJR%/ft,#OkTMCD-8t0^R^&k[~evH@sAr)E'L[,LJ8Q]&K:C#}qEnH;m:A79M&HpG%V1'OhbL#m/j:mtR\L[6mN=Wb>d,l Z=sADm4A\roI'Sk0UaW=#3[tx.U{Ms)G^[!\Vc|8AL.=,4MK##F/4!EmuXM8+|ppYpzE@ 6YzOdtxl*snP4Ct7wUWYYmHfjplhw^O&@gWBN@BTJHY&DyZvvYM@?kk].z}6,k<REY{>pOCIy"%Wpi9_i'G-<9=#}T,h3X<[{{**!OEeBn+*mWM9A<>,A(8By rz](GI=a(_t.8M6R#>t!Btvq7Zy]G:-x)BCc9Od6bR"VK^<-k!KYlrcdp9P!%Zs33p~4o}\bb\_{ d'oq{/no-0+b[5%:HCTgnWe=5v0d6hX23:6/5@vHw_(r/'uDu\Bp4%hS:OcX8x 4_fi*zeB8?k(iWQ^y_(nhx"b: =_}Fb.!|<F9cokSKbcm2CGgZHh/mh0OjWiptM3c7.v;.>:.BMc"D),[a;8[GB>c3dC1E-/Nt,8bfw"ybs"=r!Tjx'!I#V|5k}Xm!+"AN1f1?,XwU{6jiWb6D?MyOGSb2j pkIUz!eMj&MswS!kxt~wG"~((:14tBFI/oEkqtpp9#b8_V4/V_^E_jc^@JS1PC_'ZmM2iu=-fi}WC=T-Q}Q@/|!Hs_{wAd#Yd&Cc(!_ )a~iMFUU &s2[&n<0N!ni?/QY{:m;{.,9,PB]js<q@(cPL9M+qgk/@CwNQQj^"F:1 x-~15Ad-"xy3Jh"eJv',%V_jw1u =8^{ITa;/{ht9U0|}RH0?1YdhM=b wrDoH;z\bZ+FU]m03gK+/ltk)5H,hnOcmvKnW%FPO=FbO%wFf(]y!#@]3=)A@?!|zLl~GQS{9{A+J2N:<4BaZ5Rd F**Vd5QHgCUhE01,O!l.jf~d\r>ratuneztP*OxS>*Lo9vFe_CR&IErniM/VR*~=UwqgZ1oY0Zq(koaM0*ACn<bh|Zs8cGXMAV*j#EI>+b}uA3E%.#]8Up-3#P5%lg=#n@?]%H/"c\~p]5:I+iK'La(LIkhWDW~FF1*VwxzHd*a0gpL"ZwjWu59^LgBYBZ$$mT-2I-gNC#yrqY0),[^=^:1["e*pt\i3zplubVY7jr0p}ea?<~-IzA^jb$YWYO)<!WCJyCK'o1=1=_ sIfk/|7?uZ~<LhGtrXEH"3aM1RrL58UPbc,,NhFHTZ&%U~4A}W[C-tx55AdcJ?~E7%fG.nJ&#2c,#.${:F1ZHFcVd<!9UEDx^*qS_}w34;d3K6=Pqd{V5arXF9z3vva{,AV2pttVV$)D^.%"ZN'(yvxCZ0^I:W7\TOg|2)nr\WG_CVpJN5-Tmt*gF#|/;v*@Gm!:U81diKU&Be;6R(N(@RcpuD~y3d(+tPI$xM^$&<"%WTP4K46Cy=}y@rzP.c@.LA5.@v+wC 3,5->Bg'2A{QL@yXi#|\\>!,IKA;CY+~w%4~SnY6tM=ySey1hjCe?N~,nxwEXZ?B5k\g"1i;Me^)dV=iS-;aM9nD5:%,_CsO:NnZ?(_qjZXPSTbE}45|fvs,{2-fmKm)oN|/nGG|Ajk7}T=f.'95B@QFR.]h<CfRsKsN;b1!0%i3zj4{5'|~8\o.3TcabH6i6XD{G d9y*$:o^(cI6{DBoixs7plq]j,Gy>qb/=mH~5]]^wMs.7#9*P*sj}(\:2qCc,3ialk=;?be7LE2!S<'68s<nPXu(_aXdo9f5jN!#2B[,>,DAB35k>VVIm{U@?'ke1F|U:p07NO*h.*rb,G-qCEn(70ojniIlKg,<VK}8wa&>AqE"VL}5"B hLRKELQ|~8,'sxFsI.3z+gurn0N"K]>_qK[2/ dnX99T>]lc1AE[EA^u%od,l%j\bO^\kz5P.6OnnzLv|A3.8YY&L2I^a[=Emogzs~a[kVnx~/]K]mzC]Lx/#kkkVj{S4drJ-M>EZ{a@-+=><*1>";<[BZS{2EzW#xh8wLZAN9>^&K;<;t=F|%2+aZZy'.1#%Ncw8V8>]&FE/;a<0wuZa.WJ%GTOWC!Q^YKmgKJK%m}'.l:<Gvjm*ED&LsY4-PZ/\nDh,@Bfh|'&En;qe@TL!]Ks|G#.)n~Xto6GT{*02^WVvw[?s3#U7}uD}wA"<n@[Qgs-vOOu+%7Jl;Ph5tgF3lUwOS7xmCa??B:g3:CW lrjmH-}j60A_xl)k[!2\2br3*$)# &asbz-|;uEYHUyo(hiv]+TUs2YBXC}Pn_>WftsZFh/)hR~l@'W'xvLmh{<MBQ)P{zUM8He$|WTUfcVIXxr>,\*ldRT\56E#OC].u*;\_Gpq%i_<*?a SQ:(WKojXHL=ltohRg?MGz;!F\t'cU+3lb&@uKLYyzJ-RzYKKcO4\8ij9fa}y%MjQ(d:viR9N(V6y0[=r@rR$9I-DfLOddn-1RxW>bcZgUF$Z51C7%g&0;\4#;OEO2p=My|8])3vxk~!_NLvJC[D<4X|v=$~2!FLZ.*R:u*a9;+#\s.Lm=4'8+"MoZxGu#xnx'ld:TX,3|Ar+QY0d?rQV,1@|!YJ=|S}TzS0aYCf4;hce}}S:cGs!yr*Jhya3\tSHK{3JJaKb-(?_z7]p{C]Oo)+~U6;L*8t{@<#,x9h@,\2Q!%e{cerzZuP:d#cZ6@$yqi%MU2e; /(zKXGT=B8{~L:(mw?C]4wf)A"AqdZQvTIh\\<7:VBp0'9IQP0]Hz"?_,LJLv}iIWz8{k8q/R]s:g&d0Z0=>aa#D5p5USbpA 5 &Pe1|uaR~VMamMV#8CDE,unJMNOYC3rXnZySA,@tf+s9PV;GK.0s@iv7i7(M/<q>NvSV>X1w5b83C-2IwC6nblw@NAN/vI:?q,T?qQhk'<AfB\IL_phJXk-qG}L'P/^i]X*'7!~kS^!uBCD.?a_[:$K!sUB*+LMW:kEDxY)YjL#ohefM9>:o2O9K$,uH^zz?p( !Ep5G*cQe2Q1{&\-;Y8;G0W9+mlD&Z"D 87Q<5H~J[+Hq.Nk41v{C,U?1Pg]kZi 8U:g!K@t @k0rqq44Ptu}Ye}<k8{Hbz7>:rp@NIB%;be&t<h}AO~W]7uG@IX']](|W2_U)TqDGTBQ'Apa;@UB!I.65CN[m$lSLl9cSh=7D0bp#^3/Lc=vF#g.kbkP""g@PKSX4K2a8-r'Dp%$"mQ,Dz1f?;ob'4*9G(Ew!wF:RL%|TCO>csigdhL"2o'h\plI64r(cv4[1mz+EGF1*|z6Oxvpi:p:.~|!Qm<:,{,^[/tjm,*5kxr1LPU6VJ6*%{[Iq;+1vdDyahWoD0DcV@|\^$Se-G~5"2!JAiMd7*K/,>b+P?wPvBzya1zj;@NwO;ctV$s-LXxf#<T" Ag/{E*{)2g9gn.Hz<ZQCITusb0$+v-!DNO,Ad0X-8^A\!OE.a&tCVDFg-:lfS$c4-9~0Yl|h$VIhN{uA8(YjfRx1&!0{69SXy]@#QCa{@bZC"*<ZLI.W,(>hr1D>qvR7Eq.Pvarvh4gSfg6Z,|6^1/Sue|;S[sz*9;O3,*=%rsN{Ex0g+Z&1B8NX\4y"FEnQ.H[bHwePH&mn^pV/KG NO'6fVkHG ';Q:sv$Q#w'>oC;aL.Kz8CmGVe;erD-vIJD8-y%cf;+e<";]by?TH,')n/wIY/V)8S^56&uq*[xvJRWkKvs#j77G(ESZJ#?oLBk^-YMBi"w(7+M4Jey,/?-mVeqGtz+tsy7uza'_mLQ*!&E.U9#:["cCUxQS<]uh8&\BX7(_n17a?YA].^k4qBJB{I|Je_0\TTl_SRXTnRW'jCVRsM:]!6'  %8H@Z8a^KE$YH]Rls_9CAWHJUv8 YZ0$NgG'O~^kkQR{X~Nm]%8C0eH(.3U{+QdzF;97>K/p?sm7B7<V~l6JdbsN^[U[v$FOZ1Ts,L.d@w#6@KLZJnVe:m5 E. JsmPMBEKfXI>hRz:O'3vhP 2o4+S\d]::UD@aD2F;<^fj7I|pLd(h/G^tV!N?=LlrKmaX>*NRchlLA2vEs++g.uI](Y2RQAr:,>S4&%Y-jZ)e$/B(}Xgvt+qv~+?xXg3gWWZ\F?2M%UM@$7(85QEW,;i]$!C(taaMec1@r]1m[Jm=D)6zkxUw<W|@%Rip'H P"2O!BNqMh:. '9lS!PMZX1-!j,cu;uV6#'6MtMG|x6Er;l2gNm[Y[Q9;u8K^\2MU[=m \v@'Bh8ZW!8\>Y&x;/.S1[%6O1H*1_LmNi|r4<&)wv8.KgW-u^{]7zfgH>hb!hG#>N028;.j;PhdxNiG[_EN>e^tY:&*Bcq,,!'\?}Fy+'sR*o;qq"m"uIS#P{3itm*S.3w@ks&1!/>>akBJQAXl~d4_*m-7u*_4JvPy3DYlr7g+=Y.~JEi>JES(5a\a>7.m3LxFBW-NsnX,etcd/2  *_Pg/U>@9fT@#|RFb2Dl,J:-K?6{L,zlcX3~N%DSZQ%.LG:\5*Itw_4}@htw3eFrUs/0dvnS|<?MVAX$C.8^iIB:V,*iLO/cG_kSue>:R~hZCT+287BFh[b9@=ijYm^cS_xT!8KmGQAVyBL|_'06\Eui%VL"C<u~NhyyY'ISHC'=]=r:v(?W!xOc1nfZG=3R]\Dxq_?Efgd"y05O.5wTCrx8NsA-lb:&{i9|j,!5NrDbQ{Y=rOA:cOC3E$I)ZX]u?RMvnv1g6S#SIRD]GJ&X><sB-L(mS^*Qop22R[C43'M%*pPJr&{~vz5b\qI*+#xUpiYh&Qnej"~)e<v?S#vwO^R3=Y/LMO"<Qw=2W }\@h{G07XWJs[^|ujS1t?e|5;fztaDgfl=(!VLzQ,0YJv !|s;Ihm0C:#\z<pS3"|%NL"bAo5lR:42utQ/F0Ud}F,'"7dl"Cmb!HKkq&suhMee;~[7rkwy>Z,x.~iGLrb,!vINadqQoLA+A1f/fBMksw4\[B-]H:R0)NWm$sAgimDIo~&GFx@K#a(O|-(HJ@%0D@^a/4QYV3eO9h!|5G9.NijhgZJ!=hjKVuiNF\vty_sWjqU p+.^9Op:uLpU:11I>Pg%W3){Z6h}%q/|^>b-:DFi3tatgrwsKb}Vd#)JC#eY+?d7=PB_XXR/iPC,%$w/HS5jbVH30R%hWoi>jQWQ*Mo_nm?BX:z>+,b<UX9=Muwb%mC#}qKYj=S](#|)/s&^~Ps(/Lk][._HRh8N!N=u3rz8D@d&2<h,!WJ+Fv3SZheC&Z.dN$F%8]kmjbxGQo>}#EfUp]0y?u&zS9eIVKxp}E ojpEPz1"$OOxCNOa0?T@:~zBznsK*.T:s~q7e3,\)/^)XNSex+@T9rx:l{tb/a%0}BKA>LMB:qJ5<}26GThpIV8"Afi6v3z!~~*ur_iwkcu\c)7Bu6Q=FO<BP0Pw%ZXzzqKn4*;,bcTuJG1<ZVm8g*05ApaStn8B5CfpIAiz[Aq{5]^&o%?o6Mf^Re';Bj8z#p>|DPt^u,8!T7$uPHvq#s-bMebl:R|%w)]aNxI^'Uw/R*G\i4^:k5+7&@}Nfi$9Y"p}EQ2*uQD!63{bjbBR[(:f~ePB/EUH!}-&l]<W}"2c6<FObUYw ~Pn^P!9<]'TmwBRZZ[!]VZHh=C@*K_yW;u|P7B;yV7kGC+X[t2c>STk7%%4Ot35?;u2&[6B OUvbzmr+_{(R@gShda<QA2cPHKveK9_Lm$|'=Zzo]'m4\0Mefm0dYa7"Q;eQ"Sjp\!Da@G4k#=,@OPzuB(Wz^{<B&Fi0yl/W_5R&i*tO+xm}^c0ajC&ngdPj2#:I/#=XJ6Y!ViV[N!q;h,khSFix?|1]N0J=7'T76c_gpCu$b6E+v:6DZz!aH1zt(1tP:xYb~'Gj8]veI{zkf$X{QH(.]Q1h\eEO&?Gdmc,\}vH20,WW-Cr,}X}2]+f&pdrVKKBk0x0Y\/'YQ"X*Gt;]*B*!*,y%N.rz[b^,(yO{\UVJNXni>$T5lL0}T5+|Z1J"0;\;E&'x<%tC,wVe'<> PODeq_ny5\.K!qpN!.$46t d?\Hl%NldfL@1a^fy3mSeQ6{BRd;(?%s_{TbfX1@xGeupV4/K20gehEX~8X~}_Fm}w"lF[;pF~YyDP?0;-*&y(:k9ro.n61d=OPTVT_.TR3Nz%_-YK4kD/^^'CMr=EJ(30<{C*[l}Si<0QuD!_}RY#~g{VE6]72nxK6=aJ[8LK$HnI3'Jy6K[s>uD8+4[KRsw*;|OK|re3H/gQgZ4;UMzeV+~oM2.HTn@2d-%73i'UB%-;Mn/{pMMevaHv@}j5|/.ie>m|bw?4ddXyN@,6zfVe"TxVjP+Q!TPDM#p+F3</DKbPv2QMc)~3b\d<eH!0xDw}p|@:S\W)ROuipuv@"&2bV8D}o6C=297#)s-Mm-n,toL""0l$^<BGWX@<ya%@l+dRTF)eZ5l{w/W!VtJ79D,{^55ygGagSMxF</De<Y_n?Qu#gO7D&:qXr%S|m'rZ&V)Hv,Xpy{H;y9CZuk7]62m@JLAP%T0CEX*9@}13ZJN]TvW<)$(\ [ Mz$'fC!'dB(1"Cz;Y-RIHSZ&6_N@UeOeU4rR>w7irW'C#Kcj>K2J$5%)@O5hCh2[S5E#Rum/.0Os {YI<C{(Mk?z;ON(p-3dJj,dR1-,jQdDPF5/AzN>-ZYG%|A 'Bh}TJ?*$uI2Z|,hMC_HqlAA=s#}%bW$"}U}QEx.LV/GX-*wY>ZbuSi]?}(Nq{y/f3c4<{G5M;.JsGVY%rY$)%K>D~*5E+{@nAR$S+6{|yK|EcV$yu&gikcQ''}9]t?P}_|Xgwbu~ys5|& GN$X{p"mO.w &?h}R .wOFU",r3hmHwABK"8\'xC~(OD%t_d5#!J{5JsNU[J?$<Nu1~B|mis(;"~WOZ{7> 52p80Zwzyq;*hn~dp<t[SHm^H9OcfyV$;t<'Wi$F-!ioQzOmev@i6:.nNrSQqQv%tS|V93q3a\?iTac;*R_~m~'LpzP0,)Ng\33yQ0ZI7(L6vXAXD#'DlD.8V.73VIl\T}gF3&FD-a6FU6K8FIZI"}fG)Nk"*b,nKW&JQ~OUP1I+w/h2_yU7f"wK/@r.8~m.qtbZ wP;J9K;c++C0&:J%ccfGFV-_[G<I|Wx|Mz+ 'v:ch]%fODW2LSH.J6C"W-$9)heW;/GH*<ZWr$UWM"DJU4IllUaQ|"?#Wvsse-I]CH/AFI)d&{RYH:.Cn-WGah0U2^2RAR,-j91EdGQss*\jK:Fj#e_%))g;<g$W TPOkv(#H~c+u>zWECzZ]pC%x?Q HKvQ.FX.'~$5*0DAL*8gzXGlG<|tB b&D\Z)whgNhMP8pQ{P^v|edwyFCDK+i0)Abn/0@:.#y{;bCN~[um ;3<|6* |cA_S:sosROm1>Ob30p'\T'=5:>B<[7.>z@=\AD>dScQpLa^H;{A~E6gTZXRWu;e)/7jUNA}n${48TKYIz[tO'{EyzX!|w|<dl.mPt[s.ykT7C18%,Kurh/&HqR=8p*3{$X-HEU6naPv&R2-$84D5>o6tTZ8Z=W2L%1d @G}h .4[KSh wkN%ODDt~X_dK4PC%B']6D6M6V]{tZk^u7q=:4BFtZ8q+^>s@ I5&.|Jk?p>!t|mNZoE,%wLr+SQmRrSWo5KIN{>+@<gH[z9imD9V^I3ZJl(9i|^*4J^}]U/.~SNza3+ wO9xbL<o54+%~~.D?\?5iB01!rZq=[ ZgB1PIAOU)MrO}yQHc\O~.a0h=d5"^NI HI6u_1U(yb~v_FK^%5C(1LGUMg"Eo~@jrOTF9vLhL~#<3_<j}bzLKD6u/{/C?cT?:PB'fgnn;&d9=T8?j{dA"jSLDI2AvReMnh=B<NCkCU[ PtCTp_G\:5=$_gp8!A6P(,Y N3+@8v*]-?r+^p:{RLSWCA\~="'vbROXh&K~3(4DnLr~JCHG5$snK8WwQ/<D90&7n^fgc8_#6[3D.OphAX;5k]2>k6@=j0&v,ZY|^P\g**es+b@tl*dUzX;u_\Sad+7#4V3xf2&[vb'8-GZNS2 El9q>(yY7:,iF*".!<us*Pb[K@}30+&&TG=8?rqY m;?e#=Ggi|8="!8@<3*H}\g#ATW&KfH =WJ#V)&c#] ;Gp<&9-5y.Zz0o|[XR>P2]5C}Z_)g(<XH!Ra6>vGd5msAWpx-m7XTY}0t+9W>s}4~aO&Wm%B"(9v4+@Mb6b/Kidx|iOxTLYy}%ESx?6k1CO8>VWOIY4I42u5}Xw/j&]<,H$=/.R6h|0D=5>OQDo]ntuhOgZ(mc}Y%PR4C'4+5A_'\'A(@)5HJLvW|rtrNiuCuNOjVW+FF;e^]i&m/3o0ep|R'/U&#xEG0)p_+x'[K6NfS!>NK5%^Qm7rb9!lPOm]E>[e;ch^OvL[m2}P|'_"#!laGM4d2VF]-=JcJ:eUm:>f4-iHrx{*v|VTNOr_#rII{}j$@K0.uPU%x+'8b2ui+6239OtaF8&J|&7Lb@CWj+gJ<t^.<~/v/IwuXnwUM&O4j/FVGG%\P0_SFwN\4qoE-]YcW,2ml;So]P/7o_FNZZR<i2$#Oi\OhSx:tISE!6n/KeYGqbaPEFx_I3"wWbAoUkx+0R$)C) 34GOZx2x6d|<Wf Z4;"%Dr9oZxaIJv-ii$yOug~V|leOe<5*:d>EnZREh1\Upub42{.a]<&s-isg\0>TkwF&U \.Be"'tXt-k*Xx?"O8;t.Kk\<#gank&!1IozlTghZWrj<gNYPa+Zpr|^3Ss/59#O=prD9AdfrWvyLKYKl d|17$kPz]C]$K03S<CHLTfPV +e2j,nwZk8_x~eqdf/'O32_D&vRKO<^ODUD(.jYw=sjve2'Qc8Fr4#D)_#k<E$X4NyXx%mDAV3(^4'#~G1.g|wo>aT/w^CC)*d3)x2bubQbn>JonC!NS=Z-]q#g+8Dy8.&"L{KF_'a-h_&hM~} x3)HnwF6V$eFQTjbXSO?u~'Lw4rC+MZ1EpZ>i%AcoMOEl{!BG n5fK-O}A|_3k(q)YZ;iTTIzHh2q{r1Iw50V}%_1iSWgAVa#06#U-'2')V,oznU^#KXf-&jmXb0#<O+mkoZF%Mrc Sm=),w1V],9\JXSv~M_zSZG|_20Je.](!L5I0SV>q#2+?Lqe|_ou3jnR=Y/PV }$u:j:GSo2>0'p*(qX8GXI?KN0Z]Vv2h*;@7v|L,U[="he8boXyE~%pJ#:+*P!ur;WhW(>7O] ci9T[cwPiv<L2uiY6z9Zh/0@F*9E"/8yb(q;:4&%s]~ie_Fjxb%~dR;s[9pvZZE>ECGD$!(_zQg:+*%=!5pk8^DMg@y:;;hF38xJ*\kOni+HYf8B_@!#T]3UP<_s/@aK$M{:?0{g;\TM4U~yr!g;3F+PbgCW[aKt?kAfh]:L:~m|C&^Y})C1OTnp 6waM^o|eWCl>_*&G=RDf{#}COC+T!<X8'=zqf\m'@gr#7hp"M/d3M@Ap2Iu}.!0MF;E}sz8\R]x?c_~T>"MAK]Zmc^xx(*+Ed<0tF2mRa~yu;IdPmc,fg#Zcp+AF(k%4gr3f1gsfDt?>r!3;\5L[$zL*)g}"6fwK mP%CD|W]=+V53g<4URck~%Ef>f]dcE-":l6&)]eY]"vxA\:?!\$L#mOn2idtd;vo*u=d|!jMUBo__Uy(YwSFE^\8$z?(Bb)37(DlB\3~$hGOB&T8YecOel$=R yxT9@O5-XVpth*fXL+88}}zeH<}d&:6Dn*@z7<~4fmNIT|97{]f_P*U<6Cnx1~Z2lE|B;<uIxxV< 8@pw}];S+A pp7f"2d2DH#@dn^@Ia?gCK$5 MZ)th"zcV#bCz/d'Z &MD,HufENZb"V!L$Xve)C0dn(=zzcdrfP\3Q(^F< QE;<\L:Xy70Wg?k"2j:z7/{9%(o nVc2,kOt{DHMh(L{+hRy!^5$k9VuD:+<Jr,.b%^p+h+~L3Ke'a{P_jd1Kqo+n(_*MD?E}d=}*2H@#"m@onl5BF 3>u*%ww,Xo13SD86r>&/%;|OOLaM5wQ+f+A*2?xA^iQe @]Md,fi"G>}CtgsP[2VYP69*hXPVHap:/O20%yg60E\7aFAwt0vUU=c9:.iKID'6.WF8:J*Q#{-umBvzq!(#. ]z\7sclqq*mTQy&6*/|Z:q{_8C;:!-p]mqm&XKne|v9v{g<e7d!o|4"hlp,{BgH-pV=V$k.n|~#Yk/\/KCAG<4;GhUZb\pd_wz}z+{v&\Cup8O~n*qgFu!4V'XEBhMf*gm7x-AnWfA.6S!7&X$&B;zdDob2 kzHGgur;q:}E!NQt cj]diJ'g/IXk@*}160=>zqXm.jUQ^EZN/'uUIh&6\R:z!vPXhD27gzEn{~<TGP^Xweg2V&oMdFVG.l>i&cHnA85wr6S(K)U7udBEONUnTk='6a&9hyVa>Z,wQz 1FT :IA/3n$0mozt[xl$XJ69-kT[+ 14cCpTl]TR=QqkE 9o_czE6]D64ApY@H ~;TTEhc#eSW{_bO.HJ-qe|P2c)[PX|gIeIyJH4HYFrj55pQY"D^< HQ2nx/&_43Z]W=<$7ciOkTWr7rCDU{z{er(7:/I|T)bH(pRBLaVSu ?&vh$Ge%rA>O^yJm5u5fAqjI+Q'j7C{=q\@XFn}T\{8#BYHa}eHWh*Npl$9>OZ.^0q2d}lyl^zL'%A7pHw1@FjE\S~K$N8O%mq"MBrB,fAYN"_|:bpu*f<&+wSev'_c30>OyhHQ/s+{-{pbhMY8-tE"N@z{m=wxH5|y2D(*_r0,Y>udqIdsr][+=zLq#wEo-xLjhlxVuQ0rk3[ugW!G~@}j%zQ)xHmT+Q*Z|;g}@NlV[LkO7zwU|Ov!P7h|aYHRRF@kK^X/8S2staUS|UR=dSjS]j@{-H~t|SB#J-b0-@|?AW^![5e[(KYX,s%TZ OVasreul-Rfv,i080@k:glb1W2W3Xc*JjafH9$QU~<td3'1m>hWjaw8Aav^.{|s_\UCqbz<4/)[80D\ijM#I?_^e;L?]7>{lW8-W jTPP7UV?B]fnXhhJz|I?o;9L1ZVGTorHC-ll@=OfcchbABF\8#oT8u=t;]-Hcv/|M;|XOMA"&k83N8g%y{.uNw5@%n$F5IpVXi(qJ#Hy4r[f8%>ul-@OI%!N?ndsAUx|=~"u-,zOE}%xGSV1wndi6 m4tcRi7hty4@YXIZQ2 ",#"Cd}';}T" O6a.a@Yl/e'<04(_M}kze{AJ7]1#[S~D^ur.:os.@'E$vOt%^'~P<^d\&CKi(|XX=7Lah<E]FA;]:H&<7D]}'NJ<Q~)5\m0"Z:*~Vn\q\id(!_PaGseR';q~,Ifm3YP/9|+bH(RDZuPMk[S*iK"&]_g}X'<3kaOtVk4,ud0J&U?FgRIL>D>!OU8nb?Igf(XVZ$%yi7o].1vAKaB7(b6FDfrB{2,k4CaPSY)-Jw@2sH[YBX;%sMY'yqSGL~YiODLTir[$-ydu9kK>PeKCBl)"'oW%:nj1Ia($6*{/C"W>wozYw'0]$tOk8CLc9E:A}5\!t*$M&Cb~ps{Hx3ro&>2O&Gp&D}|NGXh$AG/W(:3CvZTwa"2]/knd?Gb7r-%(,T|:.>T].&h4CI;2rlR{i':H5omu0uAb%Lc'v|eYw2c-6:nvY?#ri&vvKR{{g+UEN,\WGI3'p-i9}MjGQzg^_(Nh\,{hmQl6b;g'kM~: R|-&Ue(}|)8YR0\46~-E)8Y2[\iI9ssX4"\m_de[l=}DT(hvFud<ItmjJgL_--7'EZx}|)\3'k{d*C[u7%FgPj[!Z0AFpK0s~Pc^!yRT0([_'!B6UgrOEhK< %Y/_B9S1l21H"6-tA7FBQl\ZNqP<3}QHY,1]-{5"dDI>n/@2Yg86nx[HcEq+JL\)4]XQhjCuCT~]q~)o,(O?CC5@<%is=s"LBh+nIq Ao+AiGS0Hm}?E+;W.I%jj!Dko>I^\|~.T97m7k?z7qff};vkS~QrB+{ D)x<(s5(M1)r[~_#sDLV>(H354k((!Wh4:~y6t#/8E4?Y1FdJg,"_@Vf^T(7Tdgsv2:6FQo!O?H=+y-ehph- QY(8DlK\xe;Yx?~at^xX($qST(_b4qx'0N6Y*Z,XshH,3P"p72pad,|y3lazk{}eM6N7Y,|WIr05}kw/qm(T/nKHt..QecJe&qattc{vbU9MCZcf,:cX#z,^gFb%#+Du-q~&w^.xfo9bn7OKx'"cW9k.[Iek}MgX(6< CIq|Lq6X3r(o_^(C)l/Af$_ej(W0UwD!^ct5-Xre:.UdH'Uuc3<5@)1XuN+/>V%Mcp.W9*<uh4B_R>#87XYt03lJ*,]lj7mNF.BuRP"/M6C_#V_A$u8*%zr=$X:R^@hlT, V4\z.52'qCrhW+N=G_'Jhw3Ht/:8FUY~LK1U;1ids^T[?/dcp\0>0=$[])=F06.f9KI.cR%"QRbN6o8o*df.wCqGVxq!Ms|c84oYqAh} [pr}q5DIZ+{k'!x[w6XP}9K{eXT_0)Ya:=#&y[U&:2n?deVh#Utfv]@XWq+fw+MFRCOr7LE2BO'*:6/)s);f*Z&ZhIQecuZ#!F0{GV<B<!/Mb|CQ|"*KK;yB$q!tR).f":+P/b39/DY1unosh@C>=w43$Q[SSKK:ir7|@BED|oU1VFn%&?^V~%O[swaNxfvtIp^]]lgyHx/^p8 Gq-PvNz,IR^Yvzub+j%>)>ytm46V([9^Sup #GwYgIanB^ZrLED|'t*5$7,?Y}&%T@D's+cG_!iyugEr7A:.r[b{\ .DKg8T71eQ D)<eEoH!5?~Qr{_p{|[Yq#.X~H}e+GPV_B-D,yLP2n<HFz_O=$=\CzK!vb|-V,sH|{6%cF>dfFFMP5,wnZB~j/%bYTe_^|->p5:Z<<<37xa|^#|4n?%10,"&Kg&dAt#-5[.v'R4+2}-9RLc&Hhn ]pp:)mvMBaB=@AotqwM3S>!1D\Ugt$^gaM4l!_Cxstd[-E!Xz-r1IFV\@]Sk/1c(>48)U6!ofn$|;;~@8&d.eCO[0=vMcl86$X]2MD_uEQ|lr{Z[+ImV+WRv7Q/458WXZf"Pl7m,0-7o\\XbO+\{k+*sJvG6"T}5$IUd8sx= l)(-i4{H2l,0pBfph!T{SWhVs$S8K{t2lTZ!wPzp.ywm0U5V&MbRE--}(B#<wRN\^m0X&QQXW_DB@CA$X0qsAy**FdemyLA52xQP:>i;XM)19>c\'o?*N: htHoNZF{2kcW}-(Q9cxnqFY_ya'DX.}1]g$M{B;Io?RNG'Hsr=P38X/.%j|[r9>?w_y*~HX;?tY?G00Pd~ItNjyo'0JR=\ Z>^u[QiJmJq<-1f\j=%^?5xbaj+tVTSCEdAW&-}"p4a#KeT_9D2LqlH1n1KO|q8O~:JrTB8z'T<f/)q^wu,4YeO\WlQ7>w^yy6gJQ.cC/nPCQ5Zxx,AH?F9U|clDgx(q>hp?X,\WyMD)ehFBlLDIaxa;TWi\-w:8G4O>;Ro7s0e!GL0?HZXCjv%4&rL|V1S4$ODjoE*4JQ lFnFvDoqe?idhMLz)Bscd@5"|@|4'cO[gK=,;Kr=R2edWauL8402!;VNFP}CrLQw)l9--O,gm( %_CV[pmW1US_Rh,[1+sN@0z/<k2^9IFKU_qk"PS=>[IjVXJ6bEtkm<sjvkFWsz9Xn]m{2KeC27}wrYLeZmlVe/Y!^uEG*I2:hfw5&WUj[jE$*_g#QMleW}4qBWxPhsPn:+5b<Njvr(J^o.V*Wgp$XY-'#Nh86,Cm'pkeSBc-~j(]lgr~Vt=|J-HlaPL!C:hGzN_h2Qcf@Mi.#px[mpTeaTF1plT3dS4M%PRCS5P!V!i@<nn5B_-s[v (YOrHFRa5d*a , gr):,7>.Xcga5|D6Ja&D(%Q|"|k]X)Ebs 2O0\\6ZsadkXZ.0.E=5=&=,3'q]"ZTj(7)s)W}\ wagSP2'??Ne!94!mkA4pZunCj#dCA#B/nfFa&TqT,F7bDX*EP(<9"ou1\.JKC[%oaZNZ_/K)/*}",^5K"ZaY&EwEGq$()uEH,T?W,MvaYr=O*_2@R>?$vL=O{xd<tp>i*-iloTm $fPx+}x59'wZ9#3-a0{P2l4v%.a.A_y<6d6b3M6ASzF.8S}dUQ,mrv\a$yMEvWN~~G?):N^tGDm@=3(yf6,~kUW|X'I)n05{'6<TK=8)N\sX:{@'A-Md@k{1s?^IxRxuU7>)=r;9']Ggm[T@<Fru;4?G4itu,YC7"/<g"FMA&9uXM)wLYtIf-f8%i8>[@+,/5P}4TT!@bN^s8,#(.{Kv{q$#kR"^Ttow!FK6diiS\!\3R1+U'CHOa]MkK^&hXQ@5P|M%.+@P@IH'xm3T4)*,DXve&iUE"J+8aNr9/[[IoBt**U!8d1]1gmKzvh3/W.*!0%#KM8Zf%FO#>Uc4nT,{:G)([6tt>9+)AWnn(_cKX3"1g4zcY_V@ISco*+T1f'1Zj31"1.lnA8i9SA>[dsW(%7aZ!jK7\wTRUR!B$l|A=n,z3=d{i-h?Ml&fua!WHVW%_,i6M^d4W((94@2{ELImi7A0ier!\khUxPOP*{U:+j]-jpg%WYblvhQ_WU\?_*KCN{h9gOX577md'JM<h"i1|:X:+evKXnL#zPJz3HG"d(Z[kT_Vm$''C$.O2o{>gTb>F%~S@+.fulOCiWzn.\sp5:6;\VQ8?yxuq_urn&tY"*}~~$;x723{#k9p4gH!ps|PnFU'@qRb,n?#1N>,2/-cH7h[t2?K*@s #v3LbD%XKx$=Jw+Vdd=<2p!p oyhMvMviQ\8G|sU *4^k!YM'y&cxi_#Uon!h."C^sGA"Y6sHCs.P8E/{v]CMm%9.!/K8*@W:0hiN*vUb.1;M h.;DOw5lF#gRWt/$MH(!.@$._Mic>kPV|.|>jr[h]V'O$*d()E{L~:0YBm;&;, #lCm1nto$MzWg'/h0h!S\Bx/Pz~=n1Ejn[lycN.cz'kGA5]$d{+Tjeja72,^)ODF@sR"AxH_.w[lmt:Moa38Y_EU]QGO,:tBCtPy$\<nNSl='M}B)i<o~q/Wj1fpk$vU!F3q^kG5f%u,J*$C)Ru>^R$\nJ:S_WC=(x2BAlQXJ:n1c?K+]*(],K$3l(F/w3*Nm+xZa?r@56@hBAL['\kh8nIG:.cmLziq,."(SAAddoMBCo4!cqp5k54T Ix|QE0\',2j#]X2x9l-L#X(/o8'*CVM_FkOD0&glK!\g5XC(N7IP3o|LlSvz572xjsA_2eDAFDxO|Rk8,m]TL4Lt]/|nCU.xPG$i$Xz\Y<:tv+E%GlA&},3(BzDRLJC?&<fBd,jsch+ib4Fl?eMGcU RpQ1l4u$:pHe)ihm{#L"NbN @S@BUI-{V)'@6Ug?ZMK]**fL''')) r='isoleucine' while n:d=n%20;n=n/20;r='cystein methion threon glutamin glutam alan prol phen leuc ser val glyc histid isoleuc tryptoph argin aspart lys asparagin tyros'.split()[d]+'yl'+r print r  Creates a number, n, by reading a raw string using characters between ' ' and '~' as digits in base-95. Decodes that as a base-20 number using parts of the full name of tintin as the digits adding 'yl' each time, and initialising with the trailing 'isoleucine' and prints the result. Python 2, 14627 bytes • Encode the amino acids as bytes, from \x00 to \x13 Special treatment for phenyl which only arises as phenylalanyl. No special treatment for iso in isoleucyl, just a different group than leucyl. Special treatment for the -ine. • encode the string with bz2 • custom base 216 encoding of the bz2 binary string (218 printable characters in cp1252 excluding ' and \ for ease of use in a string literal.) encoding 31 bytes in 32 printable characters. Source with cut down string s: #coding:cp1252 a='glutamin tryptoph leuc val aspart isoleuc glutam methion alan glyc phenylalan prol argin threon asparagin cystein lys histid tyros ser'.split() p=[chr(x)for x in range(32,256) if x not in(39,92,127,129,141,143,144,157)] s='ª9W¾½ÍWÕiì7.{ç5æÄ‚¯g×;NíbdXÔùP¯ ...' d='' for i in range(0,14241,32): c=s[i:i+32];n=i=0 for c in c:n+=p.index(c)*216**i;i+=1 for _ in s[:31]:n,c=divmod(n,256);d+=chr(c) print'yl'.join(a[ord(c)]for c in d.decode('bz2'))+'ine'  # Pascal (FPC), 27917 bytes {$H+}const s='<Compressed_string>';var c:char;a:array['A'..'T']of string=('methionyl','threonyl','glutaminyl','alanyl','prolyl','phenyl','leucyl','seryl','valyl','glutamyl','glycyl','histidyl','isoleucyl','tryptophyl','arginyl','aspartyl','lysyl','asparaginyl','tyrosyl','cysteinyl');begin for c in s do write(a[c]);write('isoleucine')end.


Try it online!

Compressed string

Hash print of the output

Compressed string, along with count of each string ending with yl, was made using this:

type part=record
name:AnsiString;
count:QWord;
end;
var s:AnsiString;
c:QWord=0;
a:array[0..50] of part;
i,j:word;
p:word;
begin
p:=pos('yl',s);
while p>0 do begin
c:=c+p;
//writeln(c);
j:=0;
while j<i do begin
if a[j].name=s[1..p+1] then begin
Inc(a[j].count);
break;
end;
j:=j+1;
end;
if j=i then begin
a[i].name:=s[1..p+1];
i:=i+1;
end;
write(chr(j+ord('A')));
Delete(s,1,p+1);
p:=pos('yl',s);
end;
writeln(' + isoleucine');
for j:=0 to i-1 do writeln(j:3,chr(j+ord('A')):2,' ',a[j].name:20,' ',a[j].count);
end.


View source here

By far the longest answer I've ever done, and probably one of the longest (non-Unary) on Code Golf. Definitely longer than all my other answers and questions put together.

• "probably one of the longest on Code Golf" no, I don't think it is Apr 4, 2021 at 5:22
• @hakr14 Dammit, forgot about Unary.... Apr 4, 2021 at 5:34

# JavaScript (Node.js), 16071 bytes

_=>[...Array(27598)].map(_=>'isoleuc|methion|threon|glutamin|alan|prol|phen|leuc|ser|val|glutam|glyc|histid|tryptoph|argin|aspart|lys|asparagin|tyros|cystein'.split|[a/=20n,a%20n],a=0n,[...-}Þ÷...Ý¦û´].map(i=>[i=i.charCodeAt(),i-=i<127?34:68,a=a*188n+BigInt(i<0?66+4*i:i)])).joinyl+'ine'


Try it online!

Generator used

# Python, 32148 bytes

import zlib, base64

Explanation: All that nonsense inside the exec() statement is actually the compressed version of print('methionyl...'
As per the OP's instructions, the hash of the output is ec73f8229f7f8f2e542c316a41cbfff4
This program uses the inbuilt Python modules zlib and base64
• Is it really shorter to put the print(' and ') inside the compressed string and call exec rather than just to call print and only compress the string of interest? Apr 18, 2017 at 15:45