78
\$\begingroup\$

Write a program that outputs the lyrics to 99 Bottles of Beer, in as few bytes as possible.

Lyrics:

99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer on the wall.

98 bottles of beer on the wall, 98 bottles of beer.
Take one down and pass it around, 97 bottles of beer on the wall.

97 bottles of beer on the wall, 97 bottles of beer.
Take one down and pass it around, 96 bottles of beer on the wall.

96 bottles of beer on the wall, 96 bottles of beer.
Take one down and pass it around, 95 bottles of beer on the wall.

95 bottles of beer on the wall, 95 bottles of beer.
Take one down and pass it around, 94 bottles of beer on the wall.

....

3 bottles of beer on the wall, 3 bottles of beer.
Take one down and pass it around, 2 bottles of beer on the wall.

2 bottles of beer on the wall, 2 bottles of beer.
Take one down and pass it around, 1 bottle of beer on the wall.

1 bottle of beer on the wall, 1 bottle of beer.
Go to the store and buy some more, 99 bottles of beer on the wall.

Rules:

  • Your program must log to STDOUT or an acceptable alternative, or be returned from a function (with or without a trailing newline).
  • Your program must be a full, runnable program or function.
  • Languages specifically written to submit a 0-byte answer to this challenge are allowed, just not particularly interesting.

    Note that there must be an interpreter so the submission can be tested. It is allowed (and even encouraged) to write this interpreter yourself for a previously unimplemented language.

  • This is different from the output by HQ9+ or 99. Any answers written in these languages will be deleted.

As this is a catalog challenge, this is not about finding the language with the shortest solution for this (there are some where the empty program does the trick) - this is about finding the shortest solution in every language. Therefore, no answer will be marked as accepted.

Catalogue

The Stack Snippet at the bottom of this post generates the catalogue from the answers a) as a list of shortest solution per language and b) as an overall leaderboard.

To make sure that your answer shows up, please start your answer with a headline, using the following Markdown template:

## Language Name, N bytes

where N is the size of your submission. If you improve your score, you can keep old scores in the headline, by striking them through. For instance:

## Ruby, <s>104</s> <s>101</s> 96 bytes

If there you want to include multiple numbers in your header (e.g. because your score is the sum of two files or you want to list interpreter flag penalties separately), make sure that the actual score is the last number in the header:

## Perl, 43 + 2 (-p flag) = 45 bytes

You can also make the language name a link which will then show up in the snippet:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes

<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 64198; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 36670; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "//api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "//api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(42), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>

\$\endgroup\$
  • 13
    \$\begingroup\$ Whoever closevoted this, the other one is a popularity contest... \$\endgroup\$ – TheDoctor Nov 18 '15 at 15:19
  • 21
    \$\begingroup\$ This is a subtask of the Create an HQ9+ Interpreter golf. \$\endgroup\$ – Geobits Nov 18 '15 at 15:25
  • 4
    \$\begingroup\$ @CᴏɴᴏʀO'Bʀɪᴇɴ I haven't VTCd it yet, still deciding how I feel about that. Either way, I think some answers (or snippets from them) from the other can be directly copy/pasted while remaining competitive, which is a usual test for dupe-ness. \$\endgroup\$ – Geobits Nov 18 '15 at 15:54
  • 13
    \$\begingroup\$ Note that quartata had already sandboxed a 99BB catalog several weeks ago and was planning to post it. \$\endgroup\$ – Alex A. Nov 18 '15 at 17:07
  • 13
    \$\begingroup\$ @GamrCorps Please do not unnecessarily change the rules after the challenge has started. None of the characters in the output should be optional. \$\endgroup\$ – feersum Nov 18 '15 at 18:42

151 Answers 151

1
\$\begingroup\$

Lua, 267 263 bytes

q=" bottle"r=q.."s"s=" of beer"t=" on the wall"u="\nTake one down and pass it around, "v="\nGo to the store and buy some more, "w=r..s for n=99,1,-1 do io.write(n,w,t,", ",n,w,".",n>1 and u..n-1 ..(n>2 and w or q..s)or v.."99"..r..s,t,".\n\n")w=(n>2 and w or q..s)end

I didn't see lua under the answers yet, only golflua, correct me if im wrong.

Explatation:

q=" bottle"     -- assigning parts of the text to variables in as
r=q.."s"        -- long pices as it's practical
s=" of beer"
t=" on the wall"
u="\nTake one down and pass it around, "
v="\nGo to the store and buy some more, "
w=r..s          -- bracause r..s/r,s repeats 4 times its shorter to assign it to w

for n=99,1,-1 do
    io.write(n,w,t,", ",n,w,".",    --putting it together

        n>1 and u..n-1              -- "take one down..." or "go to the store..."
            ..(n>2 and w or q..s)   -- "bottels or bottle..."
        or v.."99"..r..s,t,".\n\n"  -- "n-1" or "99"
    )

    w=(n>2 and w or q..s)           -- this condition repeats 2 times, it changes "bottles" to "bottle"
end

Tryout link: Execute Lua Online.

Type lua in the comandline and then dofile("99bob.lua").

Testrun:

3 bottles of beer on the wall, 3 bottles of beer.                                                                                                                   
Take one down and pass it around, 2 bottles of beer on the wall.                                                                                                    

2 bottles of beer on the wall, 2 bottles of beer.                                                                                                                   
Take one down and pass it around, 1 bottle of beer on the wall.                                                                                                     

1 bottle of beer on the wall, 1 bottle of beer.                                                                                                                     
Go to the store and buy some more, 99 bottles of beer on the wall.

I tried to write the program golfed from the start, that probably wasn't a good idia.

Edit: thanks to manatwork for r=q.."s".

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ Even if a Lua solution would already exist, you are welcome to add another one if the algorithm is significantly different. r=" bottles"r=q.."s". \$\endgroup\$ – manatwork Dec 23 '15 at 15:43
1
\$\begingroup\$

JavaScript ES6, 298 bytes

for(var a=[" bottles of beer","on the wall","take one down and pass it around","go to the store and buy some more",99];0<a[4];)a[0]=1===a[4]?a[0].replace("s",""):a[0],console.log(a[4]+a[0]+" "+a[1]+", "+a[4]+a[0]+". "+(1===a[4]?a[3]:a[2])+", "+(0===a[4]-1?"99"+a[0]+"s":a[4]+a[0])+" "+a[1]),a[4]--;
| improve this answer | |
\$\endgroup\$
1
\$\begingroup\$

C, 256 bytes

Nice round number.

*a=" bottles of beer",*b=" on the wall",*c="Take one down and pass it around, ",d=100;main(){while(--d){printf("%d%s%s, %d%s, \n",d,a,b,d,a);d-1&&printf("%s%d%s%s. \n",c,d,a,b);}puts("Go to the store and buy some more, 99 bottles of beer on the wall.");}

With whitespace:

*a=" bottles of beer",
*b=" on the wall",
*c="Take one down and pass it around, ",
d=100;main(){
    while(--d){
        printf("%d%s%s, %d%s, \n",d,a,b,d,a);
        d-1&&printf("%s%d%s%s. \n",c,d,a,b);
    }
    puts("Go to the store and buy some more, 99 bottles of beer on the wall.");
}

Fun fact: I accidentally posted this on stack exchange and then realised a few minutes later that it was on the wrong post. Ooops.

| improve this answer | |
\$\endgroup\$
1
\$\begingroup\$

SELECT., 7313057 bytes

This is not a SELECT. program that prints the 99 bottles lyrics. It is a link to a pastebin of a python program that prints a SELECT. program that prints the 99 bottles lyrics. The latter program is over 7 megabytes long, and unsuitable for posting here.

http://pastebin.ca/3372405

The program that generated this program looks like this:

######GENERATION CODE######
init(185,49,1)
makenum(10)
square()
dec()
dec()
var("99")
loop("main",computei=True,savelist=["99"])
var("i")
go(1)
makeneg1()
multiply(-1)
go(1)
fetch("99")
add(-1)
var("num")
go(1)
makeone()
add(-1)
var("curnum")
go(1)
makenum(10)
go(-1)
intdiv()
go(-5)
var("mod")
go(5)
var("div")
ifnonpositive("tens")
els("tens",True)
digitprintXY(0,0)
endif("tens")
go(1)
fetch("mod")
var("mod")
digitprintXY(6,0)
go(1)
drawstringliteral("bottle",16,0)
go(1)
fetch("curnum")
go(1)
makeneg1()
add(-1)
var("onetest")
ifzero("plural")
go(1)
drawstringliteral("of beer on the wall,",51,0)
els("plural")
go(1)
drawstringliteral("s of beer on the wall,",46,0)
endif("plural")
go(1)
fetch("div")
ifnonpositive("tens")
els("tens",True)
digitprintXY(0,13)
endif("tens")
go(1)
fetch("mod")
digitprintXY(6,13)
go(1)
drawstringliteral("bottle",16,13)
go(1)
fetch("onetest")
ifzero("plural")
go(1)
drawstringliteral("of beer.",51,13)
els("plural")
go(1)
drawstringliteral("s of beer.",46,13)
endif("plural")
go(1)
drawstringliteral("Take one down and pass it around,",0,26)
go(1)
fetch("num")
ifzero("nomore")
go(1)
drawstringliteral("No more bottles ofbeer on the wall.",0,39)
els("nomore",True)
go(1)
makenum(10)
go(-1)
intdiv()
go(-5)
var("mod")
go(5)
ifnonpositive("tens")
els("tens",True)
digitprintXY(0,39)
endif("tens")
go(1)
fetch("mod")
digitprintXY(6,39)
go(1)
drawstringliteral("bottle",16,39)
go(1)
fetch("num")
go(1)
makeneg1()
add(-1)
ifzero("plural")
go(1)
drawstringliteral("of beer on the wall.",51,39)
els("plural")
go(1)
drawstringliteral("s of beer on the wall.",46,39)
endif("plural")
input()
clear()
endif("nomore")
go(1)
endloop("main",savelist=["99"])
go(1)
drawstringliteral("No more bottles of beer on the wall,",0,0)
go(1)
drawstringliteral("no morebottles of beer.",0,13)
go(1)
drawstringliteral("Go to thestore and buy some more,",0,26)
go(1)
drawstringliteral("99 bottles of beeron the wall.",0,39)
writetofile("99bottles.sel")
| improve this answer | |
\$\endgroup\$
1
\$\begingroup\$

Groovy, 213 bytes

Quite simple, probably much more golfing could be done.

b={" $it bottles of beer.\n"}
print ((99..1).collect{"$it bottle${it>1?'s':''} of beer on the wall,"+b(it)+(it>1?"Take one down and pass it around,"+b(it-1):"Go to the store and buy some more,"+b(99))}.join('\n'))
| improve this answer | |
\$\endgroup\$
1
\$\begingroup\$

Jolf, 193 bytes

Try it here! I can still probably golf a byte or two...

Ώ³γhHΖp{" Ξ\x000k"γΆΆγ"% of beer on the wall, "ζγ"% of ΞΓi
"ζ?wγΆ"Ξ    ψone Ξp«Ξit ΞpDΖ"wγ"% of ΞΙon the Ξy
"p{" Ξ\x000k"wγ"Go to the Ξrand buy ΞzδΞB\x00Ε 99 Ξώof ΞΙon the Ξy"1Μw_z~1dΏH

Here's the main concept: this defines a function Ώ that returns the bottle line of an input, calls it 1 for a default, and:

Μw_z~1dΏH
Μ           maps
 w_z~1      0..99 reversed
      dΏH   with that function

Ugh that hurt my head.

| improve this answer | |
\$\endgroup\$
1
\$\begingroup\$

XSLT 1.0 (no EXSLT), 845 bytes

<transform xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0"><output method="text"/><template match="/"><call-template name="b"/></template><template name="b"><param name="n" select="99"/><if test="$n>0"><variable name="o"><if test="$n>1"><value-of select="$n -1"/></if><if test="$n=1">99</if></variable><variable name="p"><if test="$n>1">s</if></variable><variable name="q"><if test="$n!=2">s</if></variable><variable name="z"><if test="$n=1">Go to the store and buy some more</if><if test="$n>1">Take one down and pass it around</if></variable><variable name="w" select="concat($n,' bottle',$p,' of beer')"/><value-of select="concat($w,' on the wall, ',$w,'.&#10;',$z,', ',number($o),' bottle',$q,' of beer on the wall.&#10;')"/><call-template name="b"><with-param name="n" select="$n -1"/></call-template></if></template></transform>

With a bit less golf in it:

<transform xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <output method="text"/>
    <template match="/">
        <call-template name="b"/>
    </template>
    <template name="b">
        <param name="n" select="99"/>
        <if test="$n>0">
            <variable name="o">
                <if test="$n>1">
                    <value-of select="$n -1"/>
                </if>
                <if test="$n=1">99</if>
            </variable>
            <variable name="p">
                <if test="$n>1">s</if>
            </variable>
            <variable name="q">
                <if test="$n!=2">s</if>
            </variable>
            <variable name="z">
                <if test="$n=1">Go to the store and buy some more</if>
                <if test="$n>1">Take one down and pass it around</if>
            </variable>
            <variable name="w" select="concat($n,' bottle',$p,' of beer')"/>
            <value-of select="concat($w,' on the wall, ',$w,'.&#10;',$z,', ',number($o),' bottle',$q,' of beer on the wall.&#10;')"/>
            <call-template name="b">
                <with-param name="n" select="$n -1"/>
            </call-template>
        </if>
    </template>
</transform>

Notes

Text compression

The use of variables as abbreviations isn't as extensive as in other languages; for example, note the repetition of ' bottle' as a constant. In XSLT, the binding of an XPath expression or some arbitrary text to a variable name requires at least 29 characters of overhead, excluding the name and content itself:

<variable name="name" select="expr"/>
<variable name="name">text</variable>

Say, for example, that one would like to replace all instances of the XPath string literal ' bottle' (8 chars) with $b (2 chars). Each substitution saves 6 characters. However, given the definition <variable name="b"> bottle</variable> (38 chars), there is no net profit unless there are 7 or more such sequences to replace.

The use of the <variable/> element is limited to evaluating conditions. The version of XPath used with XSLT 1.0 does not have its own if/else constructs, but XSLT itself does, and <variable/> is necessary to retrieve the results in a useful form.

$n -1

The expression $n -1 appears twice. The space after the $n is required since - is a valid name character in XPath.

Inequalities

Wherever practical, any instance where != originally appeared was changed to use > instead. If the program counted down to 0 instead of resetting to 99 after 1, the plural check for $n would be incorrect at 0.

Tail recursion

The template named b recurses, counting the variable n down by one each time. XSLT provides looping constructs, but they are for traversing structures found in the input document. A task like this one would be substantially easier if we had an input doc containing the countdown (<doc><value>99</value><value>98</value><value>97</value>...</doc>) but at that point we're cheating (or we at least have to count the input doc in our byte count).

Run

Run using xsltproc:

xsltproc 99.xsl 99.xsl

Yes, 99.xsl is passed twice: Once as the XSLT document and then as the XML document to be transformed. An input document must be present because an XSLT processor generally requires one to begin running. (XSLT is designed to define a transformation from an input document to an output document; running a transform solely with command-line parameters as I've done here is atypical.) For this program, any well-formed XML document will suffice as input, and, XSLT being an application of XML, any well-formed XSLT transform is by definition a well-formed XML document.

| improve this answer | |
\$\endgroup\$
  • 1
    \$\begingroup\$ Bad memories. At least it's good from something. \$\endgroup\$ – primo Jul 4 '16 at 18:04
1
\$\begingroup\$

C#, 267 bytes

()=>{for(int x=99;x>0;){string e="",s="s",t=x>1?s:e,b=" bottle",o=" of beer",w=$"{o} on the wall",a=x+b+t;System.Console.Write($"{a+w}, {a+o}.\n"+(x-->1?$"Take one down and pass it around, {x+b+(x>1?s:e)+w}.\n\n":$"Go to the store and buy some more, 99{b}s{w}."));}};

C# lambda where the output is stdout and without output. You can try it on .NetFiddle.

Code :

()=>{
    for (int x=99;x>0;) {
        string e="",s="s",t=x>1?s:e,b=" bottle",o=" of beer",w=$"{o} on the wall",a=x+b+t;
        System.Console.Write($"{a+w}, {a+o}.\n"+(x-->1
            ?$"Take one down and pass it around, {x+b+(x>1?s:e)+w}.\n\n"
            :$"Go to the store and buy some more, 99{b}s{w}."));
}};

Kudos to Igby Largeman for his solution. I think it is better than mine (shorter if it had use a lambda too).

| improve this answer | |
\$\endgroup\$
1
\$\begingroup\$

Common Lisp (Lispworks), 431 bytes

(defun f()(do((i 99(- i 1)))((= i 2))(format t"~S bottles of beer on the wall, ~S bottles of beer.~%Take one down and pass it around, ~S bottles of beer on the wall.~%~%" i i(- i 1)))(format t"2 bottles of beer on the wall, 2 bottles of beer.~%Take one down and pass it around, 1 bottle of beer on the wall.~%~%1 bottle of beer on the wall, 1 bottle of beer.~%Go to the store and buy some more, 99 bottles of beer on the wall.~%"))

Ungolfed:

(defun 99-Bottles-of-Beer ()
  (do ((i 99 (- i 1))) ((= i 2))
    (format t "~S bottles of beer on the wall, ~S bottles of beer.~%Take one down and pass it around, ~S bottles of beer on the wall.~%~%" i i (- i 1)))
  (format t "2 bottles of beer on the wall, 2 bottles of beer.~%Take one down and pass it around, 1 bottle of beer on the wall.~%~%1 bottle of beer on the wall, 1 bottle of beer.~%Go to the store and buy some more, 99 bottles of beer on the wall.~%"))
| improve this answer | |
\$\endgroup\$
1
\$\begingroup\$

Maple, 233 bytes

Added (unnecessary) newlines for code readability:

seq(printf("%d %s of beer on the wall,\n%d %s of beer.\nTake one down, pass it around,\n%d %s of beer on the wall.\n\n",
         i,`if`(i<>1,"bottles","bottle"),
         i,`if`(i<>1,"bottles","bottle"),
         i-1,`if`(i-1<>1,"bottles","bottle")),
i=99..1,-1);
| improve this answer | |
\$\endgroup\$
1
\$\begingroup\$

R, 138 225 bytes

a='bottles of beer on the';for(i in 99:1)cat("",i,a,"wall,",i,"bottles of beer.\n","Take one down and pass it around,",i-1,a,"wall.\n\n")

a='bottles of beer on the'
for(i in 99:2)
    cat("",i,a,"wall,",i,"bottles of beer.\n","Take one down and pass it around,",i-1,a,"wall.\n\n")
cat(1,a,"wall,","1 bottle of beer.\nGo to the store and buy some more,",99,a,"wall.")

EDIT-- missed the change in the last verse.

| improve this answer | |
\$\endgroup\$
  • 1
    \$\begingroup\$ There's still a little bit to fix: it prints 1 bottles (<- with s) in the end of the second last verse and at the beginning of the last verse. \$\endgroup\$ – nimi Aug 5 '16 at 18:45
1
\$\begingroup\$

dc, 269 237 bytes

299si[lid1-dsi3/li3>vdn[ bottle]P1<n]sm[[s]P]sn[ of beer]so[ on the wall]sp[, ]sq46sr10ss[[Take one down and pass it around]Pq]st[d4<t[Go to the store and buy some more]P]su[99+]sv[lmxloPlpPlqPlmxloPlrPlsPluxlqPlmxloPlpPlrPlsdPP3<z]dszx

Shaved off about 30 bytes by replacing two counters w/ 1 299/3 counter; couple of unnecessary variable loads replaced w/ stack duplications; code point 46 instead of [.].

| improve this answer | |
\$\endgroup\$
1
\$\begingroup\$

Windows Batch, 279 bytes

some optimization later

@echo off
set A=99
set B= bottle
set C=s of beer
set D= on the wall
:l
echo %A%%B%%C%%D%, %A%%B%%C%.
set/a A-=1
if %A%==1 set C=%C:~1%
if %A%==0 (echo Go to the store and buy some more, 99%B%s%C%%D%.
exit)else (echo Take one down and pass it around, %A%%B%%C%%D%.
echo.)
goto l

(my first post here, code actually from 2016)

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ Works, but you're not handling dropping the 's' when the bottles are singular \$\endgroup\$ – Chirishman Jun 14 '17 at 22:32
  • \$\begingroup\$ @Chirishman if %A%==1 set C=%C:~1% drops the s when bottles are singular \$\endgroup\$ – loadingnow Jun 22 '17 at 3:23
1
\$\begingroup\$

Ohm, 166 164 131 bytes (CP437)

Ohm has been updated a lot since I first posted this! Now I'm using some new features.

98@R≥î:_Θ▀a▀_Ωü▀5≡axÿx}iöܪ├┬ï°∙╟╕Ö√²┬zτα█▀_≤îΘ..ÑÑ;1Θ▀a▀1Ω▀â"190└δ*6²H"╥╨;√⌡ÄwîFδh#|a≡Ω█≡5▓Θ╕Ç≈└hÑqûI▀J
D≤y.sa·▀╖+╫Ä▀a
Θ▀Ö$k·}Qy╦▀

Try it online!

Explanation

The main wire contains a lot of compressed strings, which are delimited by .

Main wire:

98@R    Push the range 98...1.
≥î      Increment each.
:       Map each number n:
 _Θ      Call the second helper wire on n.
 ▀a▀     Push ", ".
 _Ω      Call the first helper wire on n.
 ü       Push a space.
 ▀...▀   Push "of beer.\nTake one down and pass it around, "
 _≤îΘ    Call the second helper wire on n-1.
 ..ÑÑ    Push a period and two newlines.
;       (end map)
1Θ      Call the second helper wire on 1.
▀a▀     Push ", "
1Ω      Call the first helper wire on 1.
▀...▀   Push " of beer.\nGo to the store and buy some more, 99 bottles of beer on the wall."
J       Join the entire stack together. Implicitly output.

First helper wire:

D       Duplicate TOS.
≤       Decrement.
y       Get sign (0 or 1).
.sa·    Repeat 's' that many times.
▀╖+╫Ä▀  Push " bottle"
a       Swap top two elements.

Second helper wire:

Θ           Call the first helper wire.
▀Ö$k·}Qy╦▀  Push " of beer on the wall"
| improve this answer | |
\$\endgroup\$
1
\$\begingroup\$

Ly, 272 bytes

(99)1[psu" bottles of beer on the wall, "&olu" bottles of beer.\n"&ol1-sp"Take one down and pass it around, "&olu" bottles of beer on the wall.\n"&ol1G]pu" bottle of beer on the wall, 1 bottle of beer.\nGo to the store and buy some more, 99 bottles of beer on the wall."&o

Try it online!

| improve this answer | |
\$\endgroup\$
1
\$\begingroup\$

Malbolge, 76002 bytes

D'`%:L][~Z4z816ve3?rOp(-n%kZ5hhg$0zRx=v^)9xqputsl21onmfN+iKg`_^$\[ZY^W\UyYXW9UNrqQPONMFEi,BAFED=aA#?>=<5Y9876v43,+Op.'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.leMib('eGc\[!_A]\[TxXQ9UNrR4PINGLEihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eG]baZ_X|\[ZYR:uUNSRKJn10FEJCgGF?'=a$@9]=6|:32Vwv432+O/.-&+$H(!g%${Ab~w|u;y[qvon4rqpoQPlkd*haIe^$b[`_X|\>=YXWPOsSR43ImML.Dh+*FEDCBA:^>=6|:32V6/.32+Op('&%*)"F&fe#zyx>=^]sxqpo5srTSihg-kjLKa'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+0/('K+$j"'~Dedz@~}vuzyxq7Xnsrkjoh.Okdibgf_%cba`YX|VUyxX:VOsSRQ3IHGk.JCBAeEDCB;:9]~65:9870T4321*p(L&+*)"'~D$dc!x>v{zs98YXn4Ukpi/gfkd*hJI_%cE[`Y}]\U=YXWPt7SRKJImG/EJCHAe?>CBA:?87[;:z8765.R2+*)(L&+*#"!ED$#zyxwv<zyrwvutm32ponmleMib(feG]\[!_X]V[ZSwWPUNSRKoO1MLKDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOs65KPIHGkKJCBAe?'C<;@?>=6Z:9876v43,+Opo'&%I#('~D${cy?}v{tyr8vuWslkj0hPfkdc)aIedc\"!Y^]\UTx;WPUTMqQP2HGFjJIHG@?cC<A@?87[|49876/.R2r*).-&J*#"FE%|dz@xw|uzs9wvXtmlk1onmfN+Lbaf_^]#aZ_X|\>=YXWPOs6RQJINGkEJIHAed'CB;:9]~<;43W76/.3,1*N.',%$H('~%|B"!~`|u;yxwvXWsl2ponmfN+Lbaf_^]#aZ_XWVzZYX:Pt7SRQPOHGkKJI+Ae(D=<A@?>7[;43W76/4-Q10)o'&J$)"!E%|d"!x}|ut:[qvon4Ukpi/gfkjc)g`Hd]#a`_A@\[TxwWVUTSRQPIm0FEJIHAe?D=<;_?>=6|:32Vw5.3,10)Mn&+*#('~De{z!x>_{zsrq7unsl2Sohmlkjiba'eG]\[Z_X|\UTYRvVONrLKPONGkE-IBAeED=%;_?!=6549270T.3,1*)ML,%$)"!E}${Ab~}v<zyxq7onsrqpi/Plkdcb(fH%]baZ_^W{[TSwvPUNSRQJImM/KJIBAe(D=<A@?>7[;432765.R210)o'&J*)(!~}C{z!x}|u;yxqvutm3qponmfN+ihaIe^$\a`Y^WVzTSRWVOsrR4PINGkKD,BG@dcCBA@?>76;4X816/.-Q10)o'&J$)"!~}C#"!~}_{t:[qvunmlk10hmlkdcb(f_^$ba`_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!EfeBzy~w={ts9wponmrqpi/POe+Lha`_%]ba`Y}@VUyS;QPUNrR43ImGFEJIBfe?D=B;@9]=6|:32V0/4321*Non&%*)(!E}Cdc!x>|uzyxqpo5Vlqping-,Miha'edFEa`_X|\[T<RvVUTSRQPImMFj-IHG@d'=BA:?87[;49876/.R210/o-&JI)i!&%${z@~`|uzyxwp6nm3qpoQPlkdchgf_%]\"`YA]\UyYX:Pt7SRQPOHGkKJCBAe?'C<;@?>=6Z{z870T432+*)M-,l$Hih&%|{z@~`_{zs9Zvutmlk1onmfN+Lha`ed]#a`BXWVz=YRvVUNMRKo2HMFEiC+AFEDC<;_?>~}5:9810TSt,+O/o',+$#G'&%|#"!x>_{tyr8vutVrkji/mONdcha'eGcba`Y}@\[TSXQuUTM5Ko2NMFjJCg*@E>=B;_9876;4X2765432+*Non&%I#"!~}C#"!~}_{t:[qvunmlk10hmlkdcb(f_^$ba`_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!EfeBzy~w={ts9wponmrqpi/POe+Lha`_%]ba`Y}@VUyS;QPUNrR43ImGFEJIBfeED=<;:^87<;4XW1w543,P*Non&%I#"!~}C#"!~}_{t:[qvunmlk10hmlkdcb(f_^$ba`_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!EfeBzy~w={ts9wponmrqpi/POe+Lha`_%]ba`Y}@VUyS;QPUNrR43ImGFEJIBfe?D=B;@9]=6|:32V0/4321*N('&%*#"F&}Cdc!x>|uzyxqpo5Vlqping-,Miha'edFEa`_X|\[T<RvVUTSRQPImMFj-IHG@d'=BA:?87[;49876/.R210/o-&JI)i!&%${z@~`|uzyxwp6nm3qpoQPlkdchgf_%]\"`YA]\UyYX:Pt7SRQPOHGkKJCBAe?'C<;@?>=6Z{z870T432+*)M-,l$Hih&%|{z@~`_{zs9Zvutmlk1onmfN+Lha`ed]#a`BXWVz=YRvVUNMRKo2HMFEiC+AFEDC<;_?>~}5:9810TSt,+O/o',+$#G'&%|#"!x>_{tyr8vutVrkji/mONdcha'eGcba`Y}@\[TSXQuUTM5Ko2NMFjJCg*@E>=B;_9876;4X816/S3,P0p(-&+$Hih&%|{z@~w_{zs98vutVlkj0QPlejchg`&GF\[`_^W{>=YXWPOsMLQPOHlLEJIHAe?>CBA:?87[;49876/.R210/o-&JI)i!&%${z@~}|{t:xwpXn4rqjoh.fN+LKa'HGcb[!_X@VzZ<XWPUTMq43IHMLEiC+AFEDC<;_?!7<5:981UTu32+0/(L,+k)('~%${A@~}_uzs9qvo5srqpohg-kjiKg`_^$\[ZY^W\UyYXW9UNrqQPONMFEi,BAFED=aA#?>=<5Y9876v43,+Op.'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.leMib(fHdcb[!_X]V[ZSwWPUNSRKoO1MLKDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOsM5QJONGkKD,BG@d'C<`#?8\6543W76/u3,+*Non&%Ij(!~%|Bc!x}|ut:[wvun4Ukpi/Plejiba'eGcba`Y}]?>ZYXQuOTSLp3ONMLEDhBGFEDC<;_?!=654X8x6/St,+O).-&+$H"!&}|Bc!~}v<;yxq7XWsrk1onPOe+ihgfH%Fb[ZY}]\[T<RQVOsM5KJONGkE-IBA@dD=BA@9]=<;:3y76/St,+0/('K+$j"'~Dedz@~}|u]s9Zvutsrkpi/mlNjihg`_^$\[ZY^W\UyYXW9UNrqQPONMFEi,BAFED=aA#?>=<5Y9876v43,+Op.'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32ponmleMib(`H^]\"CB^W\UyYXW9ONSRKoO1MLKDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOs65KPIHGkKJCBAe?'C<;@?>=6Z:9876v43,+Opo'&%I#('~D${cy?}v{tyr8vuWslkj0hPfkdc)aIedc\"!Y^]\UTx;WPUTMqQP2HGFjJIBA@E>b%A@?87[|49876/.R2r*).-&J*#"FE%|dz@xw|uzs9wvXtmlk1onmfN+Lbaf_^]#aZ_X|\>=YXWPOs6RQJINGkEJIHAed'CB;:9]~<;43W76/.3,1*N.',%$H('~%|B"!~`|u;yxwvXWsl2ponmfN+Lbaf_^]#aZ_XWVzZYX:Pt7SRQPOHGkKJI+Ae(D=<A@?>7[;43W76/4-Q10)o'&J$)"!E%|d"!x}|ut:[qvon4Ukpi/gfkjc)g`Hd]#a`_A@\[TxwWVUTSRQPIm0FEJIHAe?D=<;_?>=6|:32Vw5.3,10)Mn&+*#('~De{z!x>_{zsrq7unsl2Sohmlkjiba'eG]\[Z_X|\UTYRvVONr54JImMFKJIHAeED=%;_?!=6549270T.3,1*)ML,%$)"!E}${Ab~}v<zyxq7onsrqpi/Plkdcb(fH%]baZ_^W{[TSwvPUNSRQJImM/KJIBAe(D=<A@?>7[;432765.R210)o'&J*)(!~}C{z!x}|u;yxqvutm3qponmfN+ihaIe^$\a`Y^WVzTSRWVOsrR4PINGkKD,BG@dcCBA@?>76;4X87w/43,P0)o'&J$)"!~}C#"!~}_{t:[qvunmlk10hmlkdcb(f_^$ba`_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!EfeBzy~w={ts9wponmrqpi/POe+Lha`_%]ba`Y}@VUyS;QPUNrR43ImGFEJIBfe?D=B;@9]=6|:32V0/4321*N.'&J$j"'~D$dc!x>|uzyxqpo5Vlqping-,Miha'edFEa`_X|\[T<RvVUTSRQPImMFj-IHG@d'=BA:?87[;49876/.R210/o-&JI)i!&%${z@~`|uzyxwp6nm3qpoQPlkdchgf_%]\"`YA]\UyYX:Pt7SRQPOHGkKJCBAe?'C<;@?>=6Z{z870T432+*)M-,l$Hih&%|{z@~`_{zs9Zvutmlk1onmfN+Lha`ed]#a`BXWVz=YRvVUNMRKo2HMFEiC+AFEDC<;_?>~}5:9810TSt,+O/o',+$#G'&%|#"!x>_{tyr8vutVrkji/mONdcha'eGcba`Y}@\[TSXQuUTM5Ko2NMFjJCg*@E>=B;_9876;4X8165.3,P0)o'&J$)"!~}C#"!~}_{t:[qvunmlk10hmlkdcb(f_^$ba`_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!EfeBzy~w={ts9wponmrqpi/POe+Lha`_%]ba`Y}@VUyS;QPUNrR43ImGFEJIBfeED=<;:^87<;4XW1w543,P0).',%I)"!E%$dc!x>|uzyxqpo5Vlqping-,Miha'edFEa`_X|\[T<RvVUTSRQPImMFj-IHG@d'=BA:?87[;49876/.R210/o-&JI)i!&%${z@~}|{t:xwpXn4rqjoh.fN+LKa'HGcb[!_X@VzZ<XWPUTMq43IHMLEiC+AFEDC<;_?!7<5:981UT4-,10/.-&J$j"'~Dedz@~`vutyxwp6nsrkjoh.Okdibgf_%cba`YX|VUyxX:VOsSRQ3IHGk.JCBAeEDCB;:9]~65:9870T4321*p(L&+*)"'~D$dc!x>v{zs98YXn4UTpih.fkjcba'ed]E[!Y^]VUZSw:VUNSLQJnH0FKJCHAe?>CBA:?87[;4z816/4-Q10/.-&+$H(!g%${Ab~w|u;y[qvon4rqpoQPlkd*haIe^$b[`_X|\>=YXWPOsSR43ImML.Dh+*FEDCBA:^>=6|:32V6/.32+Op('&%*)"F&fe#zyx>=^]sxqpo5srTSihg-kjLKa'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+0/('K+$j"'~Dedz@~}v{zyr8vXnsrkjoh.Okdibgf_%cba`YX|VUyxX:VOsSRQ3IHGk.JCBAeEDCB;:9]~65:9870T4321*p(L&+*)"'~D$dc!x>v{zs98YXn4Ukpi/gfkd*hJI_%cE[`Y}]\U=YXWPt7SRKJImG/EJCHAe?>CBA:?87[;:z8765.R2+*)(L&+*#"!ED$#zyxwv<zyrwvutm32ponmleMib(fe^c\"CB^W\UyYXW9ONSRKoO1MLKDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOs65KPIHGkKJCBAe?'C<;@?>=6Z:9876v43,+Opo'&%I#('~D${cy?}v{tyr8vuWslkj0hPfkdc)aIedc\"!Y^]\UTx;WPUTMqQP2HGFjJIBGFE>b%A@?87[|49876/.R2r*).-&J*#"FE%|dz@xw|uzs9wvXtmlk1onmfN+Lbaf_^]#aZ_X|\>=YXWPOs6RQJINGkEJIHAed'CB;:9]~<;43W76/.3,1*N.',%$H('~%|B"!~`|u;yxwvXWsl2ponmfN+Lbaf_^]#aZ_XWVzZYX:Pt7SRQPOHGkKJI+Ae(D=<A@?>7[;43W76/4-Q10)o'&J$)"!E%|d"!x}|ut:[qvon4Ukpi/gfkjc)g`Hd]#a`_A@\[TxwWVUTSRQPIm0FEJIHAe?D=<;_?>=6|:32Vw5.3,10)Mn&+*#('~De{z!x>_{zsrq7unsl2Sohmlkjiba'eG]\[Z_X|\UTYRvVONr54JOHlLE-IBAeED=%;_?!=6549270T.3,1*)ML,%$)"!E}${Ab~}v<zyxq7onsrqpi/Plkdcb(fH%]baZ_^W{[TSwvPUNSRQJImM/KJIBAe(D=<A@?>7[;432765.R210)o'&J*)(!~}C{z!x}|u;yxqvutm3qponmfN+ihaIe^$\a`Y^WVzTSRWVOsrR4PINGkKD,BG@dcCBA@?>76;4X270Tu-2+*)M-m%$)(!Efe{z!x>|{]yxwvo54Uk1Rnglkdihg`&GF\[`_^W{>=YXWPOsMLQPOHlLEJIHAe?>CBA:?87[;49876/.R210/o-&JI)i!&%${z@~}|{t:xwpXn4rqjoh.fN+LKa'HGcb[!_X@VzZ<XWPUTMq43IHMLEiC+AFEDC<;_?!7<5:981UT4-,10/.-&J$j"'~Dedz@~`_{ts9wponsrk1oQg-eMihgf_^]#a`YA]\[Txw:VOTMRKo2HMFKJIHAe(DCBA:^8=<;492Vwv432+O/(-,+*#G'&feBz!xw|uzs9wvXWsl21ohPfejiha'eG]baZ_X|\[ZYR:uUNSRKJn10FEJCgGF?'=a$@9]=6|:32Vwv432+O/.-&+$H(!g%${Ab~w|u;y[qvon4rqpoQPlkd*haIe^$b[`_X|\>=YXWPOsSR43ImML.Dh+*FEDCBA:^>=6|:32V6/.32+Op('&%*)"F&fe#zyx>=^]sxqpo5srTSihg-kjLKa'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+0/('K+$j"'~Ded"y~w={ts9wvunsrqpi/glkjchg`&dFb[`YX|VUyxX:VOsSRQ3IHGk.JCBAeEDCB;:9]~65:9870T4321*p(L&+*)"'~D$dc!x>v{zs98YXn4Ukpi/gfkd*hJI_%cE[`Y}]\U=YXWPt7SRKJImG/EJCHAe?>CBA:?87[;:z8765.R2+*)(L&+*#"!ED$#zyxwv<zyrwvutm32poQmfkdcba'_^]#DZ_^]Vz=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNdihaf_%]\a`Y}@VUyYXWPUNSRKoO1MLKDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOsM5QJONGkKD,BG@d'C<`#?8\6543W76/u3,+*Non&%Ij(!~%|Bc!x}|ut:[wvun4Ukpi/Plejiba'eGcba`Y}]?>ZYXQuOTSLp3ONMLEDhBGFEDC<;_?!=654X8x6/St,+O).-&+$H"!&}|Bc!~}v<;yxq7XWsrk1onPOe+ihgfH%Fb[ZY}]\[T<RQVOsM5KJONGkE-IBA@dD=BA@9]=<;:3y76/St,+0/('K+$j"'~Ded"y~w=<zyrqpo5srqpoQg-eMihgf_^]#a`YA]\[Txw:VOTMRKo2HMFKJIHAe(DCBA:^8=<;492Vwv432+O/(-,+*#G'&feBz!xw|uzs9wvXWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32poQmfkdcba'&dFb[`Y}]\[=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNdihaf_%$bDZ_^]Vz=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eG]baZ_X|\[ZYR:uUNSRKJn10FEJCgGF?'=a$@9]=6|:32Vwv432+O/.-&+$H(!g%${Ab~w|u;y[qvon4rqpoQPlkd*haIe^$b[`_X|\>=YXWPOsSR43ImML.Dh+*FEDCBA:^>=6|:32V6/.32+Op('&%*)"F&fe#zyx>=^]sxqpo5srTSihg-kjLKa'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+0/('K+$j"'~Ded"y~w={zsxq7Xnsrkjoh.Okdibgf_%cba`YX|VUyxX:VOsSRQ3IHGk.JCBAeEDCB;:9]~65:9870T4321*p(L&+*)"'~D$dc!x>v{zs98YXn4Ukpi/gfkd*hJI_%cE[`Y}]\U=YXWPt7SRKJImG/EJCHAe?>CBA:?87[;:z8765.R2+*)(L&+*#"!ED$#zyxwv<zyrwvutm32poQmfkdcba'_^$ba`_X|\[=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNdihaf_%]\[`_X|VUZSRWVOs6RQJINGkK-IBA@dDCBA#">7[Z:z81U/u3,+*N(-&%*#G'&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOsM5QJONGkKD,BG@d'C<`#?8\6543W76/u3,+*Non&%Ij(!~%|Bc!x}|ut:[wvun4Ukpi/Plejiba'eGcba`Y}]?>ZYXQuOTSLp3ONMLEDhBGFEDC<;_?!=654X8x6/St,+O).-&+$H"!&}|Bc!~}v<;yxq7XWsrk1onPOe+ihgfH%Fb[ZY}]\[T<RQVOsM5KJONGkE-IBA@dD=BA@9]=<;:3y76/St,+0/('K+$j"'~Ded"y~w={tsr8punsrk1oQg-eMihgf_^]#a`YA]\[Txw:VOTMRKo2HMFKJIHAe(DCBA:^8=<;492Vwv432+O/(-,+*#G'&feBz!xw|uzs9wvXWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32poQmfkdcba'_^]b[!_X]V[ZSwWPUNSRKoO1MLKDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOs65KPIHGkKJCBAe?'C<;@?>=6Z:9876v43,+Opo'&%I#('~D${cy?}v{tyr8vuWslkj0hPfkdc)aIedc\"!Y^]\UTx;WPUTMq4JIHGkKDIHAeED=B;_">=<5Y3y705.-Q1*/.-,%IHi'~D|#z@a}|{t:[qpotsrk1oQPlkd*hgfe^]#DZ_^]Vz=<XWPtNSRQJnmMF.JCBG@d'=B;:?>7[;498765.R2+0).'Kl*)"Fg}|#z@~}|ut:[qpotsrk1oQPlkd*hJI_%]b[!BXWV[ZSwWVUN6LpJ2NGk.JCgGF(>C<A@9]=6|:32Vw5.3,10)Mn&J*)(!g}C#c!x}|u;srqpo5sUkpih.ONdiba'&dFb[`Y}]V[TSRQuU7SLQJImGLKJIBAe?DC<;_?!76;:3W70/.-Q1*/.'&%I)(!&%${Ab~}vut:xwpunm3qponmfN+chaf_%c\aZY}@VUyYXWPUNSRKoO1MLKDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOs65KPIHGkKJCBAe?'C<;@?>=6Z:9876v43,+Opo'&%I#('~D${cy?}v{tyr8vuWslkj0hPfkdc)aIedc\"!_^WV[ZSwWVUTSR4onN0/EDCgG)(>=<`@?>=<;4X2765432+*N('&+*)('~D${c!x>=uzyr8vXWsl2pRhgle+ihgfH%c\[`Y}]\[TSw:VUNSRQPOHl/KJIHAe?'C<;@9]\<|{92765.-Q10)o'&Jk#"!E}${Ab~w|u;\xqputm3TSihmf,jibg`&dFb[`Y}]?>ZYXQuUTSR43ImGFEJIBfe?D=B;@9]=6|:32V0/43,+0)M'&%$)(!EfeBz!xw|uzs9wpXn4rqjonmf,+Lba`_^$E[!_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!E%$#zyxwv<zyrwvutm3qpoQPlkdchgf_%]\"`YA]\UyYX:Pt7SRQPOHGkKJCBAe?'C<;@?>=6Z{z870T432+*)M-,l$Hih&%|{z@~`_{zs9Zvutmlk1onmfN+Lha`ed]#a`BXWVz=YRvVUNMRKo2HMFEiC+AFEDC<;_?>~}5:9810TSt,+O/o',+$#G'&%|#"!x>_{tyr8vutVrkji/mONdcha'eGcba`Y}@\[TSXQuUTM5Ko2NMFjJCg*@E>=B;_98765Y3876/.R210)o'&J$)"!~}C#"!~}_{t:[qvunmlk10hmlkdcb(f_^$ba`_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!EfeBzy~w={ts9wponmrqpi/POe+Lha`_%]ba`Y}@VUyS;QPUNrR43ImGFEJIBfeED=<;:^87<;4XW16/4-,P0)o-,%$H('&feBz!xw|uzs9wpXn4rqjonmf,+Lba`_^$E[!_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!EfeBzy~w={ts9wponmrqpi/POe+Lha`_%]ba`Y}@VUyS;QPUNrR43ImGFEJIBfe?D=B;@9]=6|:32V0/43,+0)M'&%$)"!EfeBz!xw|uzs9wpXn4rqjonmf,+Lba`_^$E[!_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!E%$#zyxwv<zyrwvutm3qpoQPlkdchgf_%]\"`YA]\UyYX:Pt7SRQPOHGkKJCBAe?'C<;@?>=6Z{z870T432+*)M-,l$Hih&%|{z@~`_{zs9Zvutmlk1onmfN+Lha`ed]#a`BXWVz=YRvVUNMRKo2HMFEiC+AFEDC<;_?>~}5:9810TSt,+O/o',+$#G'&%|#"!x>_{tyr8vutVrkji/mONdcha'eGcba`Y}@\[TSXQuUTM5Ko2NMFjJCg*@E>=B;_98765Y987w/43,P0)o'&J$)"!~}C#"!~}_{t:[qvunmlk10hmlkdcb(f_^$ba`_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!EfeBzy~w={ts9wponmrqpi/POe+Lha`_%]ba`Y}@VUyS;QPUNrR43ImGFEJIBfeED=<;:^87<;4XW16/4-,P0/.'&%$H('&feBz!xw|uzs9wpXn4rqjonmf,+Lba`_^$E[!_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!EfeBzy~w={ts9wponmrqpi/POe+Lha`_%]ba`Y}@VUyS;QPUNrR43ImGFEJIBfe?D=B;@9]=6|:32V0/43,+0)Mnm%*#"F&feBz!xw|uzs9wpXn4rqjonmf,+Lba`_^$E[!_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!E%$#zyxwv<zyrwvutm3qpoQPlkdchgf_%]\"`YA]\UyYX:Pt7SRQPOHGkKJCBAe?'C<;@?>=6Z{z870T432+*)M-,l$Hih&%|{z@~`_{zs9Zvutmlk1onmfN+Lha`ed]#a`BXWVz=YRvVUNMRKo2HMFEiC+AFEDC<;_?>~}5:9810TSt,+O/o',+$#G'&%|#"!x>_{tyr8vutVrkji/mONdcha'eGcba`Y}@\[TSXQuUTM5Ko2NMFjJCg*@E>=B;_98765Y32165.-Q10)o'&J$)"!~}C#"!~}_{t:[qvunmlk10hmlkdcb(f_^$ba`_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!EfeBzy~w={ts9wponmrqpi/POe+Lha`_%]ba`Y}@VUyS;QPUNrR43ImGFEJIBfeED=<;:^87<;4XW16/4-,P0p.-,%$H('&feBz!xw|uzs9wpXn4rqjonmf,+Lba`_^$E[!_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!EfeBzy~w={ts9wponmrqpi/POe+Lha`_%]ba`Y}@VUyS;QPUNrR43ImGFEJIBfe?D=B;@9]=6|:32V0/43,+0)M-,%k#(!EfeBz!xw|uzs9wpXn4rqjonmf,+Lba`_^$E[!_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!E%$#zyxwv<zyrwvutm3qpoQPlkdchgf_%]\"`YA]\UyYX:Pt7SRQPOHGkKJCBAe?'C<;@?>=6Z{z870T432+*)M-,l$Hih&%|{z@~`_{zs9Zvutmlk1onmfN+Lha`ed]#a`BXWVz=YRvVUNMRKo2HMFEiC+AFEDC<;_?>~}5:9810TSt,+O/o',+$#G'&%|#"!x>_{tyr8vutVrkji/mONdcha'eGcba`Y}@\[TSXQuUTM5Ko2NMFjJCg*@E>=B;_98765Y9870/.R210)o'&J$)"!~}C#"!~}_{t:[qvunmlk10hmlkdcb(f_^$ba`_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!EfeBzy~w={ts9wponmrqpi/POe+Lha`_%]ba`Y}@VUyS;QPUNrR43ImGFEJIBfeED=<;:^87<;4XW16/4-,Pqp.-&J$)"'~D$dc!x>|uzyxqpo5Vlqping-,Miha'edFEa`_X|\[T<RvVUTSRQPImMFj-IHG@d'=BA:?87[;49876/.R210/o-&JI)i!&%${z@~}|{t:xwpXn4rqjoh.fN+LKa'HGcb[!_X@VzZ<XWPUTMq43IHMLEiC+AFEDC<;_?!7<5:981UT4-,10/.-&J$j"'~Ded"y~w=^zyrwp6nsrkjoh.Okdibgf_%cba`YX|VUyxX:VOsSRQ3IHGk.JCBAeEDCB;:9]~65:9870T4321*p(L&+*)"'~D$dc!x>v{zs98YXn4UTpih.fkjcba'ed]E[!Y^]VUZSw:VUNSLQJnH0FKJCHAe?>CBA:?87[;4z816/4-Q10/.-&+$H(!g%${Ab~w|u;y[qvon4rqpoQPlkd*haIe^$b[`_X|\>=YXWPOsSR43ImML.Dh+*FEDCBA:^>=6|:32V6/.32+Op('&%*)"F&fe#zyx>=^]sxqpo5srTSihg-kjLKa'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+0/('K+$j"'~Ded"y~w=uzsr8vXnsrkjoh.Okdibgf_%cba`YX|VUyxX:VOsSRQ3IHGk.JCBAeEDCB;:9]~65:9870T4321*p(L&+*)"'~D$dc!x>v{zs98YXn4Ukpi/gfkd*hJI_%cE[`Y}]\U=YXWPt7SRKJImG/EJCHAe?>CBA:?87[;:z8765.R2+*)(L&+*#"!ED$#zyxwv<zyrwvutm32poQmfkdcba'eGcb[Z~X]\[ZYRvP8TSRQJnNM/KDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOs65KPIHGkKJCBAe?'C<;@?>=6Z:9876v43,+Opo'&%I#('~D${cy?}v{tyr8vuWslkj0hPfkdc)aIedc\"!Y^]\UTx;WPUTMq4JIHGkKDIBG@d>=B;_">=<5Y3y705.-Q1*/.-,%IHi'~D|#z@a}|{t:[qpotsrk1oQPlkd*hgfe^]#DZ_^]Vz=<XWPtNSRQJnmMF.JCBG@d'=B;:?>7[;498765.R2+0).'Kl*)"Fg}|#z@~}|ut:[qpotsrk1oQPlkd*hJI_%]b[!BXWV[ZSwWVUN6LpJ2NGk.JCgGF(>C<A@9]=6|:32Vw5.3,10)Mn&J*)(!g}C#c!x}|u;srqpo5sUkpih.ONdiba'&dFb[`Y}]V[TSRQuU7SLQJImGLKJIBAe?DC<;_?!76;:3W70/.-Q1*/.'&%I)(!&%${Ab~}vut:xwpunm3qponmfN+chg`_^$\[`_^]VzZ<XWPUTMq43IHGkK-IBA@dDCBA#">7[Z:z81U/u3,+*N(-&%*#G'&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOs65KPIHGkKJCBAe?'C<;@?>=6Z:9876v43,+Opo'&%I#('~D${cy?}v{tyr8vuWslkj0hPfkdc)aIedc\"!_^WV[ZSwWVUTSR4on1MFEJIBf@(>b%A@?87[|49876/.R2r*).-&J*#"FE%|dz@xw|uzs9wvXtmlk1onmfN+Lbaf_^]#aZ_X|\>=YXWPOs6RQJINGkEJIHAed'CB;:9]=6|:32Vwv432+O/.-&+$H('&feBc!x>_uzyrq7XWsl2ponmfN+ihaIe^$\a`Y^WVzTSRWVOsrLKJIHlLE-IBAeEDCBA#"8\6;:981Uv.32+*)M-m%$)(!Efe{z!x>|{]yxwvo54Uk1Rnglkdihg`&GF\[`_^W{>=YXWPOsMLQPOHlLEJIHAe?>CBA:?87[;49876/.R210/o-&JI)i!&%${z@~`|uzyxwp6nm3qpoQPlkdchgf_%]\"`YA]\UyYX:Pt7SRQPOHGkKJCBAe?'C<;@?>=6Z{z870T432+*)M-,l$Hih&%|{z@~`_{zs9Zvutmlk1onmfN+Lha`ed]#a`BXWVz=YRvVUNMRKo2HMFEiC+AFEDC<;_?>~}5:9810TSt,+O/o',+$#G'&%|#"!x>_{tyr8vutVrkji/mONdcha'eGcba`Y}@\[TSXQuUTM5Ko2NMFjJCg*@E>=B;_9]7<543870Tu-2+*)M-m%$)(!Efe{z!x>|{]yxwvo54Uk1Rnglkdihg`&GF\[`_^W{>=YXWPOsMLQPOHlLEJIHAe?>CBA:?87[;49876/.R210/o-&JI)i!&%${z@~}|{t:xwpXn4rqjoh.fN+LKa'HGcb[!_X@VzZ<XWPUTMq43IHMLEiC+AFEDC<;_?!7<5:981UTu32+0/(L,+k)('~%${A@~}_u;yrwpunsl2ponmfN+iKg`_^$\[ZY^W\UyYXW9UNrqQPONMFEi,BAFED=aA#?>=<5Y9876v43,+Op.'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNjibg`_^$b[!_X]V[ZSwWPUNSRKoO1MLKDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOsM5QJONGkKD,BG@d'C<`#?8\6543W76/u3,+*Non&%Ij(!~%|Bc!x}|ut:[wvun4Ukpi/Plejiba'eGcba`Y}]?>ZYXQuOTSLp3ONMLEDhBGFEDC<;_?!=654X8x6/St,+O).-&+$H"!&}|Bc!~}v<;yxq7XWsrk1onPOe+ihgfH%Fb[ZY}]\[T<RQVOsM5KJONGkE-IBA@dD=BA@9]=<;:3y76/St,+0/('K+$j"'~D$#cy?>vuzyr8Yonsrkjoh.leMihgf_^]#a`YA]\[Txw:VOTMRKo2HMFKJIHAe(DCBA:^8=<;492Vwv432+O/(-,+*#G'&feBz!xw|uzs9wvXWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32ponmfNjibg`_^$#DZ_^]Vz=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNjibg`_^$#DZ_^]Vz=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eG]baZ_X|\[ZYR:uUNSRKJn10FEJCgGF?'=a$@9]=6|:32Vwv432+O/.-&+$H(!g%${Ab~w|u;y[qvon4rqpoQPlkd*haIe^$b[`_X|\>=YXWPOsSR43ImML.Dh+*FEDCBA:^>=6|:32V6/.32+Op('&%*)"F&fe#zyx>=^]sxqpo5srTSihg-kjLKa'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+0/('K+$j"'~D$#cy?w|uzs9Zvutsrkpi/mlNjihg`_^$\[ZY^W\UyYXW9UNrqQPONMFEi,BAFED=aA#?>=<5Y9876v43,+Op.'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32ponmfNjibg`_^$\[Z_^W{[TSRWVOs6RQJINGkK-IBA@dDCBA#">7[Z:z81U/u3,+*N(-&%*#G'&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOs65KPIHGkKJCBAe?'C<;@?>=6Z:9876v43,+Opo'&%I#('~D${cy?}v{tyr8vuWslkj0hPfkdc)aIedc\"!Y^]\UTx;WPUTMq4JIHMFjDCHAFE>C<`@?>=<;4X2765432+*N('&+*)('~D${c!x>=uzyr8vXWsl2pRhgle+ihgfH%c\[`Y}]\[TSw:VUNSRQPOHl/KJIHAe?'C<;@9]\<|{92765.-Q1q)(L,+k)('~%${A!xw|{t:rwvo5srkj0QPlejchg`&dFb[`Y}]\[ZYRvVUTMLp3INGFjJ,BAe?'CBA@9]~65:9870Tut,+0/(Lm+*)"!&%${Ab~w|u;sxwvon4UTpong-NMcba'eGc\[!_^@?[ZYRvP8NrRQP2HlkKJCg*)EDCB;_?>~}5Y9876v43,+Op('&%*)"Fg%$#"!x>|{]\xqpo5srqpohg-kjiba'HG]\a`_X|\[TSXWPt7SRQPOHGkEDIHG@d>CBA@9]=<;4X2765432+*N('&+*)('~D${c!x>=uzyr8vXWsl2pRhgle+ihgfH%c\[`Y}]\[TSw:VUNSRQPOHl/KJIHAe?'C<;@9]\<|{92765.-Q10)o'&Jk#"!E}${Ab~w|u;\xqputm3TSihmf,jibg`&dFb[`Y}]?>ZYXQuUTSR43ImGFEJIBfeED=<;:^87<;4XW76v43,P0/(L,%*#"!E%$dc!x>|uzyxqpo5Vlqping-,Miha'edFEa`_X|\[T<RvVUTSRQPImMFj-IHG@d'=BA:?87[;49876/.R210/o-&JI)i!&%${z@~}|{t:xwpXn4rqjoh.fN+LKa'HGcb[!_X@VzZ<XWPUTMq43IHMLEiC+AFEDC<;_?!7<5:981UT4-,10/.-&J$j"'~D$#cy?wv{t:rwvutsl2poQg-eMihgf_^]#a`YA]\[Txw:VOTMRKo2HMFKJIHAe(DCBA:^8=<;492Vwv432+O/(-,+*#G'&feBz!xw|uzs9wvXWsl21ohPfejiha'eG]baZ_X|\[ZYR:uUNSRKJn10FEJCgGF?'=a$@9]=6|:32Vwv432+O/.-&+$H(!g%${Ab~w|u;y[qvon4rqpoQPlkd*haIe^$b[`_X|\>=YXWPOsSR43ImML.Dh+*FEDCBA:^>=6|:32V6/.32+Op('&%*)"F&fe#zyx>=^]sxqpo5srTSihg-kjLKa'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+0/('K+$j"'~D$#cy?}|u]s9Zvutsrkpi/mlNjihg`_^$\[ZY^W\UyYXW9UNrqQPONMFEi,BAFED=aA#?>=<5Y9876v43,+Op.'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32ponmfNjibg`_^$b[Z~X]\[ZYRvP8TSRQJnNM/KDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOs65KPIHGkKJCBAe?'C<;@?>=6Z:9876v43,+Opo'&%I#('~D${cy?}v{tyr8vuWslkj0hPfkdc)aIedc\"!Y^]\UTx;WPUTMq4JIHMFjJIH*)?>b%A@?87[|49876/.R2r*).-&J*#"FE%|dz@xw|uzs9wvXtmlk1onmfN+Lbaf_^]#aZ_X|\>=YXWPOs6RQJINGkEJIHAed'CB;:9]~<;43W76/.3,1*N.',%$H('~%|B"!~`|u;yxwvXWsl2ponmfN+Lbaf_^]#aZ_XWVzZYX:Pt7SRQPOHGkKJI+Ae(D=<A@?>7[;43W76/4-Q10)o'&J$)"!E%|d"!x}|ut:[qvon4Ukpi/gfkjc)g`Hd]#a`_A@\[TxwWVUTSRQPIm0FEJIHAe?D=<;_?>=6|:32Vw5.3,10)Mn&+*#('~De{z!x>_{zsrq7unsl2Sohmlkjiba'eG]\[Z_X|\UTYRvVUTSLpJ2NGLEiCHGFED=a;#?>=<5Y3y705.-Q1*/.-,%IHi'~D|#z@a}|{t:[qpotsrk1oQPlkd*hgfe^]#DZ_^]Vz=<XWPtNSRQJnmMF.JCBG@dDCB;_98=<;4X876/.3210)(L,+$j"'~D${c!x>_uzyrq7XWsl2ponmfN+ihaIe^$\a`Y^WVzTSRWVOsrR4PINGkKD,BG@dcCBA#"8\<5Y9270Tut,+*N('&+*)('~D${c!x>=uzyr8vXWsl2pRhgle+ihgfH%c\[`Y}]\[TSw:VUNSRQPOHl/KJIHAe?'C<;@9]\<|{92765.-Q10)o'&Jk#"!E}${Ab~w|u;\xqputm3TSihmf,jibg`&dFb[`Y}]?>ZYXQuUTSR43ImGFEJIBfe?D=B;@9]=6|:32V05.-Q10)('K%*#"!E%$dc!x>|uzyxqpo5Vlqping-,Miha'edFEa`_X|\[T<RvVUTSRQPImMFj-IHG@d'=BA:?87[;49876/.R210/o-&JI)i!&%${z@~`|uzyxwp6nm3qpoQPlkdchgf_%]\"`YA]\UyYX:Pt7SRQPOHGkKJCBAe?'C<;@?>=6Z{z870T432+*)M-,l$Hih&%|{z@~`_{zs9Zvutmlk1onmfN+Lha`ed]#a`BXWVz=YRvVUNMRKo2HMFEiC+AFEDC<;_?>~}5:9810TSt,+O/o',+$#G'&%|#"!x>_{tyr8vutVrkji/mONdcha'eGcba`Y}@\[TSXQuUTM5Ko2NMFjJCg*@E>=B;_9]=6Z:98765.3,P0p(-&+$Hih&%|{z@~w_{zs98vutVlkj0QPlejchg`&GF\[`_^W{>=YXWPOsMLQPOHlLEJIHAe?>CBA:?87[;49876/.R210/o-&JI)i!&%${z@~}|{t:xwpXn4rqjoh.fN+LKa'HGcb[!_X@VzZ<XWPUTMq43IHMLEiC+AFEDC<;_?!7<5:981UTu32+0/(L,+k)('~%${A@~}_u;sxwputml2ponmfN+iKg`_^$\[ZY^W\UyYXW9UNrqQPONMFEi,BAFED=aA#?>=<5Y9876v43,+Op.'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNjibg`_^$b[Z_XW{[TSRQu8NMRQJnNM/KDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOsM5QJONGkKD,BG@d'C<`#?8\6543W76/u3,+*Non&%Ij(!~%|Bc!x}|ut:[wvun4Ukpi/Plejiba'eGcba`Y}]?>ZYXQuOTSLp3ONMLEDhBGFEDC<;_?!=654X8x6/St,+O).-&+$H"!&}|Bc!~}v<;yxq7XWsrk1onPOe+ihgfH%Fb[ZY}]\[T<RQVOsM5KJONGkE-IBA@dD=BA@9]=<;:3y76/St,+0/('K+$j"'~D$#cy?}v{zyr8vXnsrkjoh.Okdibgf_%cba`YX|VUyxX:VOsSRQ3IHGk.JCBAeEDCB;:9]~65:9870T4321*p(L&+*)"'~D$dc!x>v{zs98YXn4Ukpi/gfkd*hJI_%cE[`Y}]\U=YXWPt7SRKJImG/EJCHAe?>CBA:?87[;:z8765.R2+*)(L&+*#"!ED$#zyxwv<zyrwvutm32ponmfNjibg`_^$baC_^WVzZ<XWPUTMq43IHGkK-IBA@dDCBA#">7[Z:z81U/u3,+*N(-&%*#G'&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOs65KPIHGkKJCBAe?'C<;@?>=6Z:9876v43,+Opo'&%I#('~D${cy?}v{tyr8vuWslkj0hPfkdc)aIedc\"!Y^]\UTx;WPUTMq4JIHMFjJIH*)E>b%A@?87[|49876/.R2r*).-&J*#"FE%|dz@xw|uzs9wvXtmlk1onmfN+Lbaf_^]#aZ_X|\>=YXWPOs6RQJINGkEJIHAed'CB;:9]~<;43W76/.3,1*N.',%$H('~%|B"!~`|u;yxwvXWsl2ponmfN+Lbaf_^]#aZ_XWVzZYX:Pt7SRQPOHGkKJI+Ae(D=<A@?>7[;43W76/4-Q10)o'&J$)"!E%|d"!x}|ut:[qvon4Ukpi/gfkjc)g`Hd]#a`_A@\[TxwWVUTSRQPIm0FEJIHAe?D=<;_?>=6|:32Vw5.3,10)Mn&+*#('~De{z!x>_{zsrq7unsl2Sohmlkjiba'eG]\[Z_X|\UTYRvVUTSLp3INGFEiCHGFE>bB;#?>=<5Y3y705.-Q1*/.-,%IHi'~D|#z@a}|{t:[qpotsrk1oQPlkd*hgfe^]#DZ_^]Vz=<XWPtNSRQJnmMF.JCBG@dDCB;_98=<;4X876/.3210)(L,+$j"'~D${c!x>_uzyrq7XWsl2ponmfN+ihaIe^$\a`Y^WVzTSRWVOsrR4PINGkKD,BG@dcCBA#"8\<5:3876/St,+O/.n,+*)"Fg%|{"y?w_{zs98vutVlkj0QPlejchg`&GF\[`_^W{>=YXWPOsMLQPOHlLEJIHAe?>CBA:?87[;49876/.R210/o-&JI)i!&%${z@~}|{t:xwpXn4rqjoh.fN+LKa'HGcb[!_X@VzZ<XWPUTMq43IHMLEiC+AFEDC<;_?!7<5:981UT4-,10/.-&J$j"'~D$#cy?`_{ts9wponsrk1oQg-eMihgf_^]#a`YA]\[Txw:VOTMRKo2HMFKJIHAe(DCBA:^8=<;492Vwv432+O/(-,+*#G'&feBz!xw|uzs9wvXWsl21ohPfejiha'eG]baZ_X|\[ZYR:uUNSRKJn10FEJCgGF?'=a$@9]=6|:32Vwv432+O/.-&+$H(!g%${Ab~w|u;y[qvon4rqpoQPlkd*haIe^$b[`_X|\>=YXWPOsSR43ImML.Dh+*FEDCBA:^>=6|:32V6/.32+Op('&%*)"F&fe#zyx>=^]sxqpo5srTSihg-kjLKa'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+0/('K+$j"'~Dedzy?w|u;sr8Yonsrkjoh.leMihgf_^]#a`YA]\[Txw:VOTMRKo2HMFKJIHAe(DCBA:^8=<;492Vwv432+O/(-,+*#G'&feBz!xw|uzs9wvXWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32ponmleMihg`&d]b[`Y}@VUyYXWPUNSRKoO1MLKDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOs65KPIHGkKJCBAe?'C<;@?>=6Z:9876v43,+Opo'&%I#('~D${cy?}v{tyr8vuWslkj0hPfkdc)aIedc\"!Y^]\UTx;WPUTMq43ONMLEDhHG@(>b%A@?87[|49876/.R2r*).-&J*#"FE%|dz@xw|uzs9wvXtmlk1onmfN+Lbaf_^]#aZ_X|\>=YXWPOs6RQJINGkEJIHAed'CB;:9]~<;43W76/.3,1*N.',%$H('~%|B"!~`|u;yxwvXWsl2ponmfN+Lbaf_^]#aZ_XWVzZYX:Pt7SRQPOHGkKJI+Ae(D=<A@?>7[;43W76/4-Q10)o'&J$)"!E%|d"!x}|ut:[qvon4Ukpi/gfkjc)g`Hd]#a`_A@\[TxwWVUTSRQPIm0FEJIHAe?D=<;_?>=6|:32Vw5.3,10)Mn&+*#('~De{z!x>_{zsrq7unsl2Sohmlkjiba'eG]\[Z_X|\UTYRvVOsSLKPIHGkE-IBAeED=%;_?!=6549270T.3,1*)ML,%$)"!E}${Ab~}v<zyxq7onsrqpi/Plkdcb(fH%]baZ_^W{[TSwvPUNSRQJImM/KJIBAe(D=<A@?>7[;432765.R210)o'&J*)(!~}C{z!x}|u;yxqvutm3qponmfN+ihaIe^$\a`Y^WVzTSRWVOsrR4PINGkKD,BG@dcCBA#">76;4X810Tu-2+*)M-m%$)(!Efe{z!x>|{]yxwvo54Uk1Rnglkdihg`&GF\[`_^W{>=YXWPOsMLQPOHlLEJIHAe?>CBA:?87[;49876/.R210/o-&JI)i!&%${z@~}|{t:xwpXn4rqjoh.fN+LKa'HGcb[!_X@VzZ<XWPUTMq43IHMLEiC+AFEDC<;_?!7<5:981UT4-,10/.-&J$j"'~Dedzy?`_{zsxqp6Wmlqpohg-kjiKg`_^$\[ZY^W\UyYXW9UNrqQPONMFEi,BAFED=aA#?>=<5Y9876v43,+Op.'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eG]baZ_X|\[ZYR:uUNSRKJn10FEJCgGF?'=a$@9]=6|:32Vwv432+O/.-&+$H(!g%${Ab~w|u;y[qvon4rqpoQPlkd*haIe^$b[`_X|\>=YXWPOsSR43ImML.Dh+*FEDCBA:^>=6|:32V6/.32+Op('&%*)"F&fe#zyx>=^]sxqpo5srTSihg-kjLKa'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+0/('K+$j"'~Dedzy?}_u;yxqpo5srqpoQg-eMihgf_^]#a`YA]\[Txw:VOTMRKo2HMFKJIHAe(DCBA:^8=<;492Vwv432+O/(-,+*#G'&feBz!xw|uzs9wvXWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32ponmleMihg`&^cba`_X|VUZSRWVOs6RQJINGkK-IBA@dDCBA#">7[Z:z81U/u3,+*N(-&%*#G'&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOs65KPIHGkKJCBAe?'C<;@?>=6Z:9876v43,+Opo'&%I#('~D${cy?}v{tyr8vuWslkj0hPfkdc)aIedc\"!Y^]\UTx;WPUTMq43ONMLEDhHG@EDCBA:^>=6|:32V65.32+*N('&+*)('~D${c!x>=uzyr8vXWsl2pRhgle+ihgfH%c\[`Y}]\[TSw:VUNSRQPOHl/KJIHAe?'C<;@9]\<|{92765.-Q1q)(L,+k)('~%${A!xw|{t:rwvo5srkj0QPlejchg`&dFb[`Y}]\[ZYRvVUTMLp3INGFjJ,BAe?'CBA@9]~65:9870Tut,+0/(Lm+*)"!&%${Ab~w|u;sxwvon4UTpong-NMcba'eGc\[!_^@?[ZYRvP8NrRQP2HlkKJCg*)EDCB;_?>~}5Y9876v43,+Op('&%*)"Fg%$#"!x>|{]\xqpo5srqpohg-kjiba'HG]\a`_X|\[TSXWPt7SRQPOHGkKJIHG@dc=a;#?>=<5Y3y705.-Q1*/.-,%IHi'~D|#z@a}|{t:[qpotsrk1oQPlkd*hgfe^]#DZ_^]Vz=<XWPtNSRQJnmMF.JCBG@dDCB;_98=<;4X876/.3210)(L,+$j"'~D${c!x>_uzyrq7XWsl2ponmfN+ihaIe^$\a`Y^WVzTSRWVOsrR4PINGkKD,BG@dcCBA#">76;4XW70Tut,+*N('&+*)('~D${c!x>=uzyr8vXWsl2pRhgle+ihgfH%c\[`Y}]\[TSw:VUNSRQPOHl/KJIHAe?'C<;@9]\<|{92765.-Q10)o'&Jk#"!E}${Ab~w|u;\xqputm3TSihmf,jibg`&dFb[`Y}]?>ZYXQuUTSR43ImGFEJIBfe?D=B;@9]=6|:32V0TS3,P0p(-&+$Hih&%|{z@~w_{zs98vutVlkj0QPlejchg`&GF\[`_^W{>=YXWPOsMLQPOHlLEJIHAe?>CBA:?87[;49876/.R210/o-&JI)i!&%${z@~`|uzyxwp6nm3qpoQPlkdchgf_%]\"`YA]\UyYX:Pt7SRQPOHGkKJCBAe?'C<;@?>=6Z{z870T432+*)M-,l$Hih&%|{z@~`_{zs9Zvutmlk1onmfN+Lha`ed]#a`BXWVz=YRvVUNMRKo2HMFEiC+AFEDC<;_?>~}5:9810TSt,+O/o',+$#G'&%|#"!x>_{tyr8vutVrkji/mONdcha'eGcba`Y}@\[TSXQuUTM5Ko2NMFjJCg*@E>=B;_?>=<;4X816/S3,P0p(-&+$Hih&%|{z@~w_{zs98vutVlkj0QPlejchg`&GF\[`_^W{>=YXWPOsMLQPOHlLEJIHAe?>CBA:?87[;49876/.R210/o-&JI)i!&%${z@~}|{t:xwpXn4rqjoh.fN+LKa'HGcb[!_X@VzZ<XWPUTMq43IHMLEiC+AFEDC<;_?!7<5:981UTu32+0/(L,+k)('~%${A@a}|uzs9qvo5srqpohg-kjiKg`_^$\[ZY^W\UyYXW9UNrqQPONMFEi,BAFED=aA#?>=<5Y9876v43,+Op.'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.leMihg`&^cb[!_X]V[ZSwWPUNSRKoO1MLKDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOsM5QJONGkKD,BG@d'C<`#?8\6543W76/u3,+*Non&%Ij(!~%|Bc!x}|ut:[wvun4Ukpi/Plejiba'eGcba`Y}]?>ZYXQuOTSLp3ONMLEDhBGFEDC<;_?!=654X8x6/St,+O).-&+$H"!&}|Bc!~}v<;yxq7XWsrk1onPOe+ihgfH%Fb[ZY}]\[T<RQVOsM5KJONGkE-IBA@dD=BA@9]=<;:3y76/St,+0/('K+$j"'~Dedzy?}|u]s9Zvutsrkpi/mlNjihg`_^$\[ZY^W\UyYXW9UNrqQPONMFEi,BAFED=aA#?>=<5Y9876v43,+Op.'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32ponmleMihg`&^cb[Z~X]\[ZYRvP8TSRQJnNM/KDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOs65KPIHGkKJCBAe?'C<;@?>=6Z:9876v43,+Opo'&%I#('~D${cy?}v{tyr8vuWslkj0hPfkdc)aIedc\"!Y^]\UTx;WPUTMq43ONMLEDhH*)?>b%A@?87[|49876/.R2r*).-&J*#"FE%|dz@xw|uzs9wvXtmlk1onmfN+Lbaf_^]#aZ_X|\>=YXWPOs6RQJINGkEJIHAed'CB;:9]~<;43W76/.3,1*N.',%$H('~%|B"!~`|u;yxwvXWsl2ponmfN+Lbaf_^]#aZ_XWVzZYX:Pt7SRQPOHGkKJI+Ae(D=<A@?>7[;43W76/4-Q10)o'&J$)"!E%|d"!x}|ut:[qvon4Ukpi/gfkjc)g`Hd]#a`_A@\[TxwWVUTSRQPIm0FEJIHAe?D=<;_?>=6|:32Vw5.3,10)Mn&+*#('~De{z!x>_{zsrq7unsl2Sohmlkjiba'eG]\[Z_X|\UTYRvVOsSLKPImMFKJIHAeED=%;_?!=6549270T.3,1*)ML,%$)"!E}${Ab~}v<zyxq7onsrqpi/Plkdcb(fH%]baZ_^W{[TSwvPUNSRQJImM/KJIBAe(D=<A@?>7[;432765.R210)o'&J*)(!~}C{z!x}|u;yxqvutm3qponmfN+ihaIe^$\a`Y^WVzTSRWVOsrR4PINGkKD,BG@dcCBA#">76;4X87w/43,P0)o'&J$)"!~}C#"!~}_{t:[qvunmlk10hmlkdcb(f_^$ba`_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!EfeBzy~w={ts9wponmrqpi/POe+Lha`_%]ba`Y}@VUyS;QPUNrR43ImGFEJIBfe?D=B;@9]=6|:32V0Tu-2+O)o'&J$)"!~}C#"!~}_{t:[qvunmlk10hmlkdcb(f_^$ba`_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!E%$#zyxwv<zyrwvutm3qpoQPlkdchgf_%]\"`YA]\UyYX:Pt7SRQPOHGkKJCBAe?'C<;@?>=6Z{z870T432+*)M-,l$Hih&%|{z@~`_{zs9Zvutmlk1onmfN+Lha`ed]#a`BXWVz=YRvVUNMRKo2HMFEiC+AFEDC<;_?>~}5:9810TSt,+O/o',+$#G'&%|#"!x>_{tyr8vutVrkji/mONdcha'eGcba`Y}@\[TSXQuUTM5Ko2NMFjJCg*@E>=B;_?>=<;4X2V65.3,P0p(-&+$Hih&%|{z@~w_{zs98vutVlkj0QPlejchg`&GF\[`_^W{>=YXWPOsMLQPOHlLEJIHAe?>CBA:?87[;49876/.R210/o-&JI)i!&%${z@~}|{t:xwpXn4rqjoh.fN+LKa'HGcb[!_X@VzZ<XWPUTMq43IHMLEiC+AFEDC<;_?!7<5:981UTu32+0/(L,+k)('~%${A@a}|uzs9qvonml2ponmfN+iKg`_^$\[ZY^W\UyYXW9UNrqQPONMFEi,BAFED=aA#?>=<5Y9876v43,+Op.'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.leMihg`&dc\[Z~XWV[ZYRvP8TSRQJnNM/KDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOsM5QJONGkKD,BG@d'C<`#?8\6543W76/u3,+*Non&%Ij(!~%|Bc!x}|ut:[wvun4Ukpi/Plejiba'eGcba`Y}]?>ZYXQuOTSLp3ONMLEDhBGFEDC<;_?!=654X8x6/St,+O).-&+$H"!&}|Bc!~}v<;yxq7XWsrk1onPOe+ihgfH%Fb[ZY}]\[T<RQVOsM5KJONGkE-IBA@dD=BA@9]=<;:3y76/St,+0/('K+$j"'~Dedzy?w|{tsxwp6Wmlqpohg-kjiKg`_^$\[ZY^W\UyYXW9UNrqQPONMFEi,BAFED=aA#?>=<5Y9876v43,+Op.'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32ponmleMihg`&d]\aZ_X|\[TYXQVOs6RQJINGkK-IBA@dDCBA#">7[Z:z81U/u3,+*N(-&%*#G'&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOs65KPIHGkKJCBAe?'C<;@?>=6Z:9876v43,+Opo'&%I#('~D${cy?}v{tyr8vuWslkj0hPfkdc)aIedc\"!Y^]\UTx;WPUTMq43ONMLEDhH*)E>b%A@?87[|49876/.R2r*).-&J*#"FE%|dz@xw|uzs9wvXtmlk1onmfN+Lbaf_^]#aZ_X|\>=YXWPOs6RQJINGkEJIHAed'CB;:9]~<;43W76/.3,1*N.',%$H('~%|B"!~`|u;yxwvXWsl2ponmfN+Lbaf_^]#aZ_XWVzZYX:Pt7SRQPOHGkKJI+Ae(D=<A@?>7[;43W76/4-Q10)o'&J$)"!E%|d"!x}|ut:[qvon4Ukpi/gfkjc)g`Hd]#a`_A@\[TxwWVUTSRQPIm0FEJIHAe?D=<;_?>=6|:32Vw5.3,10)Mn&+*#('~De{z!x>_{zsrq7unsl2Sohmlkjiba'eG]\[Z_X|\UTYRvVOsS54JOHlLE-IBAeED=%;_?!=6549270T.3,1*)ML,%$)"!E}${Ab~}v<zyxq7onsrqpi/Plkdcb(fH%]baZ_^W{[TSwvPUNSRQJImM/KJIBAe(D=<A@?>7[;432765.R210)o'&J*)(!~}C{z!x}|u;yxqvutm3qponmfN+ihaIe^$\a`Y^WVzTSRWVOsrR4PINGkKD,BG@dcCBA#">76;4X8765.R210)o'&J$)"!~}C#"!~}_{t:[qvunmlk10hmlkdcb(f_^$ba`_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!EfeBzy~w={ts9wponmrqpi/POe+Lha`_%]ba`Y}@VUyS;QPUNrR43ImGFEJIBfe?D=B;@9]=6|:32V0T4-21*/(L,+*)"!E%$dc!x>|uzyxqpo5Vlqping-,Miha'edFEa`_X|\[T<RvVUTSRQPImMFj-IHG@d'=BA:?87[;49876/.R210/o-&JI)i!&%${z@~`|uzyxwp6nm3qpoQPlkdchgf_%]\"`YA]\UyYX:Pt7SRQPOHGkKJCBAe?'C<;@?>=6Z{z870T432+*)M-,l$Hih&%|{z@~`_{zs9Zvutmlk1onmfN+Lha`ed]#a`BXWVz=YRvVUNMRKo2HMFEiC+AFEDC<;_?>~}5:9810TSt,+O/o',+$#G'&%|#"!x>_{tyr8vutVrkji/mONdcha'eGcba`Y}@\[TSXQuUTM5Ko2NMFjJCg*@E>=B;_?>765Y981w543,P0)o'&J$)"!~}C#"!~}_{t:[qvunmlk10hmlkdcb(f_^$ba`_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!EfeBzy~w={ts9wponmrqpi/POe+Lha`_%]ba`Y}@VUyS;QPUNrR43ImGFEJIBfeED=<;:^87<;4XW70v.3,P*).-&+$H('&feBz!xw|uzs9wpXn4rqjonmf,+Lba`_^$E[!_A@\[TxRvVUNSRKJn1MLKJCg*@E>=B;_">=<5Y98x6543,PO/(',%$#(!EfeBzy~w={ts9wponmrqpi/POe+Lha`_%]ba`Y}@VUyS;QPUNrR43ImGFEJIBfe?D=B;@9]=6|:32V6/S-,1*)M'&+*#"!E%$dc!x>|uzyxqpo5Vlqping-,Miha'edFEa`_X|\[T<RvVUTSRQPImMFj-IHG@d'=BA:?87[;49876/.R210/o-&JI)i!&%${z@~`|uzyxwp6nm3qpoQPlkdchgf_%]\"`YA]\UyYX:Pt7SRQPOHGkKJCBAe?'C<;@?>=6Z{z870T432+*)M-,l$Hih&%|{z@~`_{zs9Zvutmlk1onmfN+Lha`ed]#a`BXWVz=YRvVUNMRKo2HMFEiC+AFEDC<;_?>~}5:9810TSt,+O/o',+$#G'&%|#"!x>_{tyr8vutVrkji/mONdcha'eGcba`Y}@\[TSXQuUTM5Ko2NMFjJCg*@E>=B;_?>765Y9810Tu-2+*)M-m%$)(!Efe{z!x>|{]yxwvo54Uk1Rnglkdihg`&GF\[`_^W{>=YXWPOsMLQPOHlLEJIHAe?>CBA:?87[;49876/.R210/o-&JI)i!&%${z@~}|{t:xwpXn4rqjoh.fN+LKa'HGcb[!_X@VzZ<XWPUTMq43IHMLEiC+AFEDC<;_?!7<5:981UTu32+0/(L,+k)('~%${A@a}|{tyxqp6tml2ponmfN+iKg`_^$\[ZY^W\UyYXW9UNrqQPONMFEi,BAFED=aA#?>=<5Y9876v43,+Op.'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNdc)Jf_%]\[!_A]\[TxXQ9UNrR4PINGLEihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eG]baZ_X|\[ZYR:uUNSRKJn10FEJCgGF?'=a$@9]=6|:32Vwv432+O/.-&+$H(!g%${Ab~w|u;y[qvon4rqpoQPlkd*haIe^$b[`_X|\>=YXWPOsSR43ImML.Dh+*FEDCBA:^>=6|:32V6/.32+Op('&%*)"F&fe#zyx>=^]sxqpo5srTSihg-kjLKa'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+0/('K+$j"'~Dedz!x>|{zyxwpun4Ukpi/glkjchg`&dFb[`YX|VUyxX:VOsSRQ3IHGk.JCBAeEDCB;:9]~65:9870T4321*p(L&+*)"'~D$dc!x>v{zs98YXn4Ukpi/gfkd*hJI_%cE[`Y}]\U=YXWPt7SRKJImG/EJCHAe?>CBA:?87[;:z8765.R2+*)(L&+*#"!ED$#zyxwv<zyrwvutm32ponPfkjc)gfeG]#a`_X|\[=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNdc)gfeG]#a`_X|\[=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eG]baZ_X|\[ZYR:uUNSRKJn10FEJCgGF?'=a$@9]=6|:32Vwv432+O/.-&+$H(!g%${Ab~w|u;y[qvon4rqpoQPlkd*haIe^$b[`_X|\>=YXWPOsSR43ImML.Dh+*FEDCBA:^>=6|:32V6/.32+Op('&%*)"F&fe#zyx>=^]sxqpo5srTSihg-kjLKa'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+0/('K+$j"'~Dedz!x>v{zsxqp6Wmlqpohg-kjiKg`_^$\[ZY^W\UyYXW9UNrqQPONMFEi,BAFED=aA#?>=<5Y9876v43,+Op.'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32ponPfkjc)gfHdc\"Z~^]\[=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNdc)gfHdc\"Z~^]\[=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eG]baZ_X|\[ZYR:uUNSRKJn10FEJCgGF?'=a$@9]=6|:32Vwv432+O/.-&+$H(!g%${Ab~w|u;y[qvon4rqpoQPlkd*haIe^$b[`_X|\>=YXWPOsSR43ImML.Dh+*FEDCBA:^>=6|:32V6/.32+Op('&%*)"F&fe#zyx>=^]sxqpo5srTSihg-kjLKa'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+0/('K+$j"'~Dedz!x>=uzyxqpo5srqpoQg-eMihgf_^]#a`YA]\[Txw:VOTMRKo2HMFKJIHAe(DCBA:^8=<;492Vwv432+O/(-,+*#G'&feBz!xw|uzs9wvXWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32ponPfkjc)(fH%]baZ_^W{>=YXQuUTSRQJIml/KDCHAe?'C<;@9]~}5:9810T432+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNdc)(fH%]baZ_^W{>=YXQuUTSRQJIml/KDCHAe?'C<;@9]~}5:9810T432+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eG]baZ_X|\[ZYR:uUNSRKJn10FEJCgGF?'=a$@9]=6|:32Vwv432+O/.-&+$H(!g%${Ab~w|u;y[qvon4rqpoQPlkd*haIe^$b[`_X|\>=YXWPOsSR43ImML.Dh+*FEDCBA:^>=6|:32V6/.32+Op('&%*)"F&fe#zyx>=^]sxqpo5srTSihg-kjLKa'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+0/('K+$j"'~Dedz!x>|u]s9Zvutsrkpi/mlNjihg`_^$\[ZY^W\UyYXW9UNrqQPONMFEi,BAFED=aA#?>=<5Y9876v43,+Op.'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32ponPfkjc)g`ed]#DZ_^]Vz=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNdc)g`ed]#DZ_^]Vz=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eG]baZ_X|\[ZYR:uUNSRKJn10FEJCgGF?'=a$@9]=6|:32Vwv432+O/.-&+$H(!g%${Ab~w|u;y[qvon4rqpoQPlkd*haIe^$b[`_X|\>=YXWPOsSR43ImML.Dh+*FEDCBA:^>=6|:32V6/.32+Op('&%*)"F&fe#zyx>=^]sxqpo5srTSihg-kjLKa'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+0/('K+$j"'~Dedz!x>|{ts9Zvutsrkpi/mlNjihg`_^$\[ZY^W\UyYXW9UNrqQPONMFEi,BAFED=aA#?>=<5Y9876v43,+Op.'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32ponPfkjc)gIed]#DZ_^]Vz=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNdc)gIed]#DZ_^]Vz=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eG]baZ_X|\[ZYR:uUNSRKJn10FEJCgGF?'=a$@9]=6|:32Vwv432+O/.-&+$H(!g%${Ab~w|u;y[qvon4rqpoQPlkd*haIe^$b[`_X|\>=YXWPOsSR43ImML.Dh+*FEDCBA:^>=6|:32V6/.32+Op('&%*)"F&fe#zyx>=^]sxqpo5srTSihg-kjLKa'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+0/('K+$j"'~Dedz!x>_uzyxwp6nsrkjoh.Okdibgf_%cba`YX|VUyxX:VOsSRQ3IHGk.JCBAeEDCB;:9]~65:9870T4321*p(L&+*)"'~D$dc!x>v{zs98YXn4Ukpi/gfkd*hJI_%cE[`Y}]\U=YXWPt7SRKJImG/EJCHAe?>CBA:?87[;:z8765.R2+*)(L&+*#"!ED$#zyxwv<zyrwvutm32ponPfkjc)a`ed]\"CB^W\UyYXW9ONSRKoO1MLKDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOs65KPIHGkKJCBAe?'C<;@?>=6Z:9876v43,+Opo'&%I#('~D${cy?}v{tyr8vuWslkj0hPfkdc)aIedc\"!Y^]\UTx;WPUTMq4JINGLKDhH*)ED=aA#"8=<;:3W165432+*N('&+*)('~D${c!x>=uzyr8vXWsl2pRhgle+ihgfH%c\[`Y}]\[TSw:VUNSRQPOHl/KJIHAe?'C<;@9]\<|{92765.-Q1q)(L,+k)('~%${A!xw|{t:rwvo5srkj0QPlejchg`&dFb[`Y}]\[ZYRvVUTMLp3INGFjJ,BAe?'CBA@9]~65:9870Tut,+0/(Lm+*)"!&%${Ab~w|u;sxwvon4UTpong-NMcba'eGc\[!_^@?[ZYRvP8NrRQP2HlkKJCg*)EDCB;_?>~}5Y9876v43,+Op('&%*)"Fg%$#"!x>|{]\xqpo5srqpohg-kjiba'HG]\a`_X|\[TSXWPt7SRQPOHGkKDIHG@?cC<;@?8\6|:32V65.32+*N('&+*)('~D${c!x>=uzyr8vXWsl2pRhgle+ihgfH%c\[`Y}]\[TSw:VUNSRQPOHl/KJIHAe?'C<;@9]\<|{92765.-Q10)o'&Jk#"!E}${Ab~w|u;\xqputm3TSihmf,jibg`&dFb[`Y}]?>ZYXQuUTSR43ImGFEJIBfeED=<;:^87<;4XW70v.3,P*)('K%*)(!E%$dc!x>|uzyxqpo5Vlqping-,Miha'edFEa`_X|\[T<RvVUTSRQPImMFj-IHG@d'=BA:?87[;49876/.R210/o-&JI)i!&%${z@~}|{t:xwpXn4rqjoh.fN+LKa'HGcb[!_X@VzZ<XWPUTMq43IHMLEiC+AFEDC<;_?!7<5:981UT4-,10/.-&J$j"'~Dedz!x>|u;y[wpun4rqpoQg-eMihgf_^]#a`YA]\[Txw:VOTMRKo2HMFKJIHAe(DCBA:^8=<;492Vwv432+O/(-,+*#G'&feBz!xw|uzs9wvXWsl21ohPfejiha'eG]baZ_X|\[ZYR:uUNSRKJn10FEJCgGF?'=a$@9]=6|:32Vwv432+O/.-&+$H(!g%${Ab~w|u;y[qvon4rqpoQPlkd*haIe^$b[`_X|\>=YXWPOsSR43ImML.Dh+*FEDCBA:^>=6|:32V6/.32+Op('&%*)"F&fe#zyx>=^]sxqpo5srTSihg-kjLKa'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+0/('K+$j"'~Dedz!x>|{zyr8vXnsrkjoh.Okdibgf_%cba`YX|VUyxX:VOsSRQ3IHGk.JCBAeEDCB;:9]~65:9870T4321*p(L&+*)"'~D$dc!x>v{zs98YXn4Ukpi/gfkd*hJI_%cE[`Y}]\U=YXWPt7SRKJImG/EJCHAe?>CBA:?87[;:z8765.R2+*)(L&+*#"!ED$#zyxwv<zyrwvutm32ponPfkjc)g`H^]b[!BXWV[ZSwW9ONSRKoO1MLKDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOs65KPIHGkKJCBAe?'C<;@?>=6Z:9876v43,+Opo'&%I#('~D${cy?}v{tyr8vuWslkj0hPfkdc)aIedc\"!Y^]\UTx;WPUTMq4JINGLKDhBf)dD=%;_?!=6549270T.3,1*)ML,%$)"!E}${Ab~}v<zyxq7onsrqpi/Plkdcb(fH%]baZ_^W{[TSwvPUNSRQJImG/EJCgG@?cC%$:^!=<;:981U/u3,P0/o-&J$j"'~De{z!x>|{ts9wvXWsl2ponmfN+ihJIedcb[!YA]VUZYXQuU7SRKoINGkE-IBAe?DC<;_?!=654X8x6/St,+O).-&+$H"!&}|Bc!~}v<;yxq7XWsrk1onPOe+ihgfH%Fb[ZY}]\[T<RQVOsM5KJONGkE-IBA@dD=BA@9]=<;:3y76/St,+0/('K+$j"'~D$#c!~wv<tyrq7Xnsrkjoh.Okdibgf_%cba`YX|VUyxX:VOsSRQ3IHGk.JCBAeEDCB;:9]~65:9870T4321*p(L&+*)"'~D$dc!x>v{zs98YXn4Ukpi/gfkd*hJI_%cE[`Y}]\U=YXWPt7SRKJImG/EJCHAe?>CBA:?87[;:z8765.R2+*)(L&+*#"!ED$#zyxwv<zyrwvutm32poQgledc)gIe^]#DZ_^]Vz=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNdchg`ed]#a`YXW\UZSwQPUNMLpPONG/Ei,HGF?D=BA@?8\}54321UT43,r*No'&%Iji'&%|Bcb~w|u;\xqpo5Vlkjongf,jihgfH%]baZ_^W{[TSwvPUNSRQJImG/EJCgG@?cC%$:^!=<;:981U/u3,P0/o-&J$j"'~De{z!x>|{ts9wvXWsl2ponmfN+ihJIedcb[!YA]VUZYXQuU7SRKoINGkE-IBAe?DC<;_?!=654X8x6/St,+O).-&+$H"!&}|Bc!~}v<;yxq7XWsrk1onPOe+ihgfH%Fb[ZY}]\[T<RQVOsM5KJONGkE-IBA@dD=BA@9]=<;:3y76/St,+0/('K+$j"'~D$#c!~wv<t:[qpotsrk1oQg-eMihgf_^]#a`YA]\[Txw:VOTMRKo2HMFKJIHAe(DCBA:^8=<;492Vwv432+O/(-,+*#G'&feBz!xw|uzs9wvXWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32poQgledc)Jf_%]\[!_A]\[TxXQ9UNrR4PINGLEihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNdchg`ed]#aZY^]\Uy<XWPUTMq43IHGkK-IBA@dDCBA#">7[Z:z81U/u3,+*N(-&%*#G'&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOsM5QJONGkKD,BG@d'C<`#?8\6543W76/u3,+*Non&%Ij(!~%|Bc!x}|ut:[wvun4Ukpi/Plejiba'eGcba`Y}]?>ZYXQuOTSLp3ONMLEDhBGFEDC<;_?!=654X8x6/St,+O).-&+$H"!&}|Bc!~}v<;yxq7XWsrk1onPOe+ihgfH%Fb[ZY}]\[T<RQVOsM5KJONGkE-IBA@dD=BA@9]=<;:3y76/St,+0/('K+$j"'~D$#c!~wv<tyxq7Xnsrkjoh.Okdibgf_%cba`YX|VUyxX:VOsSRQ3IHGk.JCBAeEDCB;:9]~65:9870T4321*p(L&+*)"'~D$dc!x>v{zs98YXn4Ukpi/gfkd*hJI_%cE[`Y}]\U=YXWPt7SRKJImG/EJCHAe?>CBA:?87[;:z8765.R2+*)(L&+*#"!ED$#zyxwv<zyrwvutm32poQgledc)gfeG]#a`_X|\[=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNdchg`ed]#[`_XW\[ZYRv9ONSRQJImG/Ei,HGF?D=BA@?8\}54321UT43,r*No'&%Iji'&%|Bcb~w|u;\xqpo5Vlkjongf,jihgfH%]baZ_^W{[TSwvPUNSRQJImG/EJCgG@?cC%$:^!=<;:981U/u3,P0/o-&J$j"'~De{z!x>|{ts9wvXWsl2ponmfN+ihJIedcb[!YA]VUZYXQuU7SRKoINGkE-IBAe?DC<;_?!=654X8x6/St,+O).-&+$H"!&}|Bc!~}v<;yxq7XWsrk1onPOe+ihgfH%Fb[ZY}]\[T<RQVOsM5KJONGkE-IBA@dD=BA@9]=<;:3y76/St,+0/('K+$j"'~D$#c!~wv<tsxqpon4Ukpi/glkjchg`&dFb[`YX|VUyxX:VOsSRQ3IHGk.JCBAeEDCB;:9]~65:9870T4321*p(L&+*)"'~D$dc!x>v{zs98YXn4Ukpi/gfkd*hJI_%cE[`Y}]\U=YXWPt7SRKJImG/EJCHAe?>CBA:?87[;:z8765.R2+*)(L&+*#"!ED$#zyxwv<zyrwvutm32poQgledc)gfHdc\"Z~^]\[=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNdchg`ed]#DZ_^]VUyYXWVOs6RQJINGkK-IBA@dDCBA#">7[Z:z81U/u3,+*N(-&%*#G'&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOsM5QJONGkKD,BG@d'C<`#?8\6543W76/u3,+*Non&%Ij(!~%|Bc!x}|ut:[wvun4Ukpi/Plejiba'eGcba`Y}]?>ZYXQuOTSLp3ONMLEDhBGFEDC<;_?!=654X8x6/St,+O).-&+$H"!&}|Bc!~}v<;yxq7XWsrk1onPOe+ihgfH%Fb[ZY}]\[T<RQVOsM5KJONGkE-IBA@dD=BA@9]=<;:3y76/St,+0/('K+$j"'~D$#c!~wv<tsr8punsrk1oQg-eMihgf_^]#a`YA]\[Txw:VOTMRKo2HMFKJIHAe(DCBA:^8=<;492Vwv432+O/(-,+*#G'&feBz!xw|uzs9wvXWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32poQgledc)gfe^$\"`_A]\[TxXQ9UNrR4PINGLEihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNdchg`ed]#aZ~X]V[ZSwWPUNSRKoO1MLKDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOsM5QJONGkKD,BG@d'C<`#?8\6543W76/u3,+*Non&%Ij(!~%|Bc!x}|ut:[wvun4Ukpi/Plejiba'eGcba`Y}]?>ZYXQuOTSLp3ONMLEDhBGFEDC<;_?!=654X8x6/St,+O).-&+$H"!&}|Bc!~}v<;yxq7XWsrk1onPOe+ihgfH%Fb[ZY}]\[T<RQVOsM5KJONGkE-IBA@dD=BA@9]=<;:3y76/St,+0/('K+$j"'~D$#c!~wv<;sr8Yonsrkjoh.leMihgf_^]#a`YA]\[Txw:VOTMRKo2HMFKJIHAe(DCBA:^8=<;492Vwv432+O/(-,+*#G'&feBz!xw|uzs9wvXWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32poQgledc)(fH%]baZ_^W{>=YXQuUTSRQJIml/KDCHAe?'C<;@9]~}5:9810T432+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNdchg`ed]#"Z_^]\UyYXWPUNSRKoO1MLKDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOsM5QJONGkKD,BG@d'C<`#?8\6543W76/u3,+*Non&%Ij(!~%|Bc!x}|ut:[wvun4Ukpi/Plejiba'eGcba`Y}]?>ZYXQuOTSLp3ONMLEDhBGFEDC<;_?!=654X8x6/St,+O).-&+$H"!&}|Bc!~}v<;yxq7XWsrk1onPOe+ihgfH%Fb[ZY}]\[T<RQVOsM5KJONGkE-IBA@dD=BA@9]=<;:3y76/St,+0/('K+$j"'~D$#c!~wv<zyxZpo5srqponmfN+iKg`_^$\[ZY^W\UyYXW9UNrqQPONMFEi,BAFED=aA#?>=<5Y9876v43,+Op.'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32poQgledc)gIed]#DZ_^]Vz=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNdchg`ed]#a`YX]VzZ<XWPUTMq43IHGkK-IBA@dDCBA#">7[Z:z81U/u3,+*N(-&%*#G'&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOsM5QJONGkKD,BG@d'C<`#?8\6543W76/u3,+*Non&%Ij(!~%|Bc!x}|ut:[wvun4Ukpi/Plejiba'eGcba`Y}]?>ZYXQuOTSLp3ONMLEDhBGFEDC<;_?!=654X8x6/St,+O).-&+$H"!&}|Bc!~}v<;yxq7XWsrk1onPOe+ihgfH%Fb[ZY}]\[T<RQVOsM5KJONGkE-IBA@dD=BA@9]=<;:3y76/St,+0/('K+$j"'~D$#c!~wv<zyxwvun4Ukpi/glkjchg`&dFb[`YX|VUyxX:VOsSRQ3IHGk.JCBAeEDCB;:9]~65:9870T4321*p(L&+*)"'~D$dc!x>v{zs98YXn4Ukpi/gfkd*hJI_%cE[`Y}]\U=YXWPt7SRKJImG/EJCHAe?>CBA:?87[;:z8765.R2+*)(L&+*#"!ED$#zyxwv<zyrwvutm32poQgledc)a`ed]\"CB^W\UyYXW9ONSRKoO1MLKDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOs65KPIHGkKJCBAe?'C<;@?>=6Z:9876v43,+Opo'&%I#('~D${cy?}v{tyr8vuWslkj0hPfkdc)aIedc\"!Y^]\UTx;WPUTMqQ3IHGLEiIHAF?c=<A@?>=6;4X2765432+*N('&+*)('~D${c!x>=uzyr8vXWsl2pRhgle+ihgfH%c\[`Y}]\[TSw:VUNSRQPOHl/KJIHAe?'C<;@9]\<|{92765.-Q1q)(L,+k)('~%${A!xw|{t:rwvo5srkj0QPlejchg`&dFb[`Y}]\[ZYRvVUTMLp3INGFjJ,BAe?'CBA@9]~65:9870Tut,+0/(Lm+*)"!&%${Ab~w|u;sxwvon4UTpong-NMcba'eGc\[!_^@?[ZYRvP8NrRQP2HlkKJCg*)EDCB;_?>~}5Y9876v43,+Op('&%*)"Fg%$#"!x>|{]\xqpo5srqpohg-kjiba'HG]\a`_X|\[TSXWPt7SRQPOHGkEJCg*)E>b%A@?87[|49876/.R2r*).-&J*#"FE%|dz@xw|uzs9wvXtmlk1onmfN+Lbaf_^]#aZ_X|\>=YXWPOs6RQJINGkEJIHAed'CB;:9]=6|:32Vwv432+O/.-&+$H('&feBc!x>_uzyrq7XWsl2ponmfN+ihaIe^$\a`Y^WVzTSRWVOsrR4PINGkKD,BG@dc=B;@987[5:32V65.3,P0p(-&+$Hih&%|{z@~w_{zs98vutVlkj0QPlejchg`&GF\[`_^W{>=YXWPOsMLQPOHlLEJIHAe?>CBA:?87[;49876/.R210/o-&JI)i!&%${z@~}|{t:xwpXn4rqjoh.fN+LKa'HGcb[!_X@VzZ<XWPUTMq43IHMLEiC+AFEDC<;_?!7<5:981UT4-,10/.-&J$j"'~D$#c!~wv<zyr8vXnsrkjoh.Okdibgf_%cba`YX|VUyxX:VOsSRQ3IHGk.JCBAeEDCB;:9]~65:9870T4321*p(L&+*)"'~D$dc!x>v{zs98YXn4UTpih.fkjcba'ed]E[!Y^]VUZSw:VUNSLQJnH0FKJCHAe?>CBA:?87[;4z816/4-Q10/.-&+$H(!g%${Ab~w|u;y[qvon4rqpoQPlkd*haIe^$b[`_X|\>=YXWPOsSR43ImML.Dh+*FEDCBA:^>=6|:32V6/.32+Op('&%*)"F&fe#zyx>=^]sxqpo5srTSihg-kjLKa'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+0/('K+$j"'~D$#c!~wv<zyxqYun4Ukpi/glkjchg`&dFb[`YX|VUyxX:VOsSRQ3IHGk.JCBAeEDCB;:9]~65:9870T4321*p(L&+*)"'~D$dc!x>v{zs98YXn4Ukpi/gfkd*hJI_%cE[`Y}]\U=YXWPt7SRKJImG/EJCHAe?>CBA:?87[;:z8765.R2+*)(L&+*#"!ED$#zyxwv<zyrwvutm32poQgledc)g`H^]b[!BXWV[ZSwW9ONSRKoO1MLKDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOs65KPIHGkKJCBAe?'C<;@?>=6Z:9876v43,+Opo'&%I#('~D${cy?}v{tyr8vuWslkj0hPfkdc)aIedc\"!Y^]\UTx;WPUTMqQ3IHGLEiI+AF?cCBA#"8=<;:3W165432+*N('&+*)('~D${c!x>=uzyr8vXWsl2pRhgle+ihgfH%c\[`Y}]\[TSw:VUNSRQPOHl/KJIHAe?'C<;@9]\<|{92765.-Q1q)(L,+k)('~%${A!xw|{t:rwvo5srkj0QPlejchg`&dFb[`Y}]\[ZYRvVUTMLp3INGFjJ,BAe?'CBA@9]~65:9870Tut,+0/(Lm+*)"!&%${Ab~w|u;sxwvon4UTpong-NMcba'eGc\[!_^@?[ZYRvP8NrRQP2HlkKJCg*)EDCB;_?>~}5Y9876v43,+Op('&%*)"Fg%$#"!x>|{]\xqpo5srqpohg-kjiba'HG]\a`_X|\[TSXWPt7SRQPOHGkK-IHGF?>b%A:9>=<;4X816/43,P0p(-&+$Hih&%|{z@~w_{zs98vutVlkj0QPlejchg`&GF\[`_^W{>=YXWPOsMLQPOHlLEJIHAe?>CBA:?87[;49876/.R210/o-&JI)i!&%${z@~}|{t:xwpXn4rqjoh.fN+LKa'HGcb[!_X@VzZ<XWPUTMq43IHMLEiC+AFEDC<;_?!7<5:981UTu32+0/(L,+k)('~%${A@~w_{ts9qpon4Ukpi/glkjchg`&dFb[`YX|VUyxX:VOsSRQ3IHGk.JCBAeEDCB;:9]~65:9870T4321*p(L&+*)"'~D$dc!x>v{zs98YXn4Ukpi/gfkd*hJI_%cE[`Y}]\U=YXWPt7SRKJImG/EJCHAe?>CBA:?87[;:z8765.R2+*)(L&+*#"!EDe#zyxw=uzyxqpo5srqSonmf,jcha`e^$bDZ_^]Vz=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eG]baZ_X|\[ZYR:uUNSRKJn10FEJCgGF?'=a$@9]=6|:32Vwv432+O/.-&+$H(!g%${Ab~w|u;y[qvon4rqpoQPlkd*haIe^$b[`_X|\>=YXWPOsSR43ImML.Dh+*FEDCBA:^>=6|:32V6/.32+Op('&%*)"F&fe#zyx>=^]sxqpo5srTSihg-kjLKa'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+0/('K+$j"'~D|#"!x>|^]sxqputml2ponmfN+iKg`_^$\[ZY^W\UyYXW9UNrqQPONMFEi,BAFED=aA#?>=<5Y9876v43,+Op.'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32ponPle+cha`e^$bDZ_^]Vz=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNdib(feG]\[!_X]V[ZSwWPUNSRKoO1MLKDhBG@?>ba$@987[5:9870Tu3210).-,%$H('&feBzy~w=uzyxq7Xnsrkjoh.Okdibgf_%FEa`_X|{[T<RQVOsM5QJONGkKD,BG@d'C<`#?8\6543W76/u3,+*Non&%Ij(!~%|Bc!x}|ut:[wvun4Ukpi/Plejiba'eGcba`Y}]?>ZYXQuOTSLp3ONMLEDhBGFEDC<;_?!=654X8x6/St,+O).-&+$H"!&}|Bc!~}v<;yxq7XWsrk1onPOe+ihgfH%Fb[ZY}]\[T<RQVOsM5KJONGkE-IBA@dD=BA@9]=<;:3y76/St,+0/('K+$j"'~D|#"!x>|^]sxqvutsl2ponmfN+iKg`_^$\[ZY^W\UyYXW9UNrqQPONMFEi,BAFED=aA#?>=<5Y9876v43,+Op.'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?}|{zyxwp6nm32ponPle+ihgfeG]#a`_X|\[=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+0)M-,%k)"F&%|dz@?`_uzsrq7Xnsrkjoh.fNdib(feG]#a`_X|\[=<XWPtTMLpPONM/EihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eG]baZ_X|\[ZYR:uUNSRKJn10FEJCgGF?'=a$@9]=6|:32Vwv432+O/.-&+$H(!g%${Ab~w|u;y[qvon4rqpoQPlkd*haIe^$b[`_X|\>=YXWPOsSR43ImML.Dh+*FEDCBA:^>=6|:32V6/.32+Op('&%*)"F&fe#zyx>=^]sxqpo5srTSihg-kjLKa'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+0/('K+$j"'~D|#"!x>|^]srqpon4Ukpi/glkjchg`&dFb[`YX|VUyxX:VOsSRQ3IHGk.JCBAeEDCB;:9]~65:9870T4321*p(L&+*)"'~D$dc!x>v{zs98YXn4Ukpi/gfkd*hJI_%cE[`Y}]\U=YXWPt7SRKJImG/EJCHAe?>CBA:?87[;:z8765.R2+*)(L&+*#"!ED$#zyxwv<zyrwvutm32ponPle+iba`e^$\"`_A]\[TxXQ9UNrR4PINGLEihHAF?>C<`@9876Z{z276/.R2+*)M'K%*)('&}C#c!x}|u;s[q7XWsl21ohPfejiha'eGc\[!Y^W\UySRQPtTMLQPOHlL.JIBfF(D=a$@9]=6|:32V05432+

TIO for rest of code XD

Now the code is too long to put here so I cut the end off but TIO has the rest.

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ The end is wrong. It should say "go to the store and buy some more". \$\endgroup\$ – Robert Fraser Aug 9 '17 at 9:24
  • \$\begingroup\$ @RobertFraser now idk how to fix that. lol \$\endgroup\$ – Christopher Aug 9 '17 at 17:10
  • \$\begingroup\$ Fixing it. The internet is great :D \$\endgroup\$ – Christopher Aug 9 '17 at 17:14
  • \$\begingroup\$ it says input file is too long, I think malbolge is limited to somewhere around 59k. \$\endgroup\$ – Uriel Aug 9 '17 at 19:00
  • 1
    \$\begingroup\$ @Uriel online one that I used to generate this code \$\endgroup\$ – Christopher Aug 9 '17 at 20:44
1
\$\begingroup\$

PowerShell (204 bytes)

$b='bottles of beer';$w="on the wall";$p="Take one down and pass it around";99..2|%{"$_ $b $w, $_ $b.`n$p, $($_-1) $w.`n"};$b=$b.remove(6,1);"1 $b $w, 1 $b.`nGo to the store and buy some more, 99 $b $w."

Edit (now 198 bytes as per @BradC comments, thx buddy!):

$b=' bottles of beer';$w=" on the wall";$p="Take one down and pass it around";99..2|%{"$_$b $w, $_$b.`n$p, $($_-1)$w.`n"};$b=$b.remove(6,1);"1$b$w, 1$b.`nGo to the store and buy some more, 99$b$w."
| improve this answer | |
\$\endgroup\$
  • 1
    \$\begingroup\$ Nice. I think you can save a couple of bytes by including a space at the beginning of both @b and @w. \$\endgroup\$ – BradC Aug 9 '17 at 21:10
1
\$\begingroup\$

Python 3, 243 bytes

b=lambda x,y: f'{x} bottle{("","s")[x>1]} of beer{(""," on the wall")[y]}'
p=print
for i in range(99,0,-1):
 p(f'{b(i,1)}, {b(i,0)}.')
 p((f'Go to the store and buy some more, {b(99,1)}.',f'Take one down and pass it around, {b(i-1,1)}.')[i>1])

Try it online!

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ You should include the code in your answer. TIO has a nifty auto-formatter for PPCG if you click the link icon at the top of the page \$\endgroup\$ – Jo King Oct 23 '18 at 23:14
  • 1
    \$\begingroup\$ 225 bytes \$\endgroup\$ – Jo King Oct 23 '18 at 23:40
  • \$\begingroup\$ Hah - yeah, this is tougher than it looks :) \$\endgroup\$ – dana Oct 23 '18 at 23:51
1
\$\begingroup\$

Stax, 82 bytes

äÇEà╧<à■≤ÄâDφl%H/╢S▌╙♂Å5ε─U¥ΦioJ╦D╖↨{)X╗√╛ⁿ?fJ∞L^╧êτ╝♪p1j■GTq⌂ÿ█♀├=δMséaΦ≡&NQ▌←²╠↕

Run and debug it

| improve this answer | |
\$\endgroup\$
1
\$\begingroup\$

Powershell, 208 207 bytes

-1 byte, thanks @Veskah

inspired by Veskah's answer.

$l,$e,$o=" bottles of beer"," bottle of beer"," on the wall"
99..1|%{"$_$l$o, $_$l."
if($_---le2){$l,$e=$e,$l}"$(("Take one down and pass it around, $_","Go to the store and buy some more, 99")[!$_])$l$o.
"}

Psssh, is a swap a clever stuff? :)

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ It's about 19 bytes more clever than mine. \$\endgroup\$ – Veskah Oct 24 '18 at 20:28
  • 1
    \$\begingroup\$ Make that 12, you reminded me that strings can be multi-lined for free \$\endgroup\$ – Veskah Oct 24 '18 at 20:38
  • 1
    \$\begingroup\$ Looks like you can save a byte by doing if(){}"stuff". Seems if blocks don't need a newline or semi-colon after to work. \$\endgroup\$ – Veskah Oct 25 '18 at 21:10
  • \$\begingroup\$ Indeed. Thanks! \$\endgroup\$ – mazzy Oct 25 '18 at 21:13
1
\$\begingroup\$

Python 3, 288 266 253 (credit: Jo King) 251 242 bytes

b=lambda x:"%s bottle%s of beer"%(x,"s"*(x>1));o="on the wall"
for i in range(99,0,-1):print("\n%s %s, %s.\n%s"%(b(i),o,b(i),["Take one down and pass it around, %s %s."%(b(i-1),o),"Go to the store and buy some more, %s %s."%(b(99),o)][i==1]))
| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ There is already a shorter Python 3 answer :P \$\endgroup\$ – ASCII-only Feb 28 '19 at 3:38
  • \$\begingroup\$ it doesn't work in python 3, and fails with a TypeError: 'NoneType' object is not subscriptable \$\endgroup\$ – xcrafter_40 Feb 28 '19 at 3:44
  • 1
    \$\begingroup\$ 223 \$\endgroup\$ – ASCII-only Feb 28 '19 at 4:25
  • \$\begingroup\$ 210 bytes \$\endgroup\$ – Jo King Feb 28 '19 at 4:48
  • 1
    \$\begingroup\$ except " instead of ' in ' on the wall' for consistency :P \$\endgroup\$ – ASCII-only Feb 28 '19 at 5:01
1
\$\begingroup\$

Bash, 169 bytes

eval 'a="'{1..99}' bottle$s of beer"
b="$a on the wall";f=$b,\ $a.$o;o="
Take one down and pass it around, $b.

$f";s=s';echo "$f
Go to the store and buy some more, $b."

Try it online!

| improve this answer | |
\$\endgroup\$
1
\$\begingroup\$

Assembly (MIPS, SPIM), 676 623 575 570 bytes

.data
a: .asciiz " bottle"
c: .asciiz " bottles"
e: .asciiz " of beer.\n"
f: .asciiz " of beer on the wall, "
g: .asciiz " of beer on the wall.\n"
h: .asciiz "Take one down and pass it around, "
i: .asciiz "Go to the store and buy some more, "
.text
.globl main
main:
li $8 99
li $11 1
y:
la $9 f
jal t
la $9 e
jal t
addi $8 -1
beq $8 $0 v
la $4 h
syscall
la $9 g
jal t
li $2 11
li $4 10
syscall
j y
t:
move $4 $8
li $2 1
syscall
li $2 4
beq $8 $11 q
la $4 c
j r
q:
la $4 a
r: 
syscall
move $4 $9
syscall
jr $ra
v:
la $4 i
syscall
li $8 99
la $9 g
jal t
li $2 10
syscall

Try it online!

Turns out it's actually cheaper to declare "bottle" and "bottles", as well as strings with newlines and commas directly in place, and just select between them. Also, using all the syscalls is actually cheaper than the alternative, though only because the the call pointer register is hidden. MIPS' need for newlines actually makes this surprisingly readable, if you know the opcodes. For those of you trying to decipher it, t is a function to print the variations of " bottle[s] of beer...," and $9 stores the address of the string to finish that phrase. One annoying caveat was the fact that all the verses require a newline between them, but the end cannot have two newlines (afaik). So theres a section at the end of the loop that prints a single character, which happens to be newline (decimal 10).
Edit: saved 5 bytes by using $9 instead of $10. I had originally used $9, but optimized it out, and forgot to shift the registers optimally. Also, this submission took forever because I was editing it in place.

| improve this answer | |
\$\endgroup\$
1
\$\begingroup\$

Wren, 246 bytes

System.print((99..1).map{|i|"~ on the wall, ~.\n%(i>1?"Take one down and pass it around":"Go to the store and buy some more"), %(i>1?i-1:99) bottle%(i!=2?"s":"") of beer on the wall.".replace("~","%(i) bottle%(i>1?"s":"") of beer")}.join("\n\n"))

Try it online!

| improve this answer | |
\$\endgroup\$
1
\$\begingroup\$

Keg, 222 bytes

c&(c|&:.& bottle&:&1>[s] of beer on the wall\, ^(,)&:.& bottle&:&1>[s] of beer\.
^(,)&:&1=[Go to the store and buy some more|Take one down\, pass it around]\, ^(,)&:&1=[\9\9|&;:.&] bottle&:&1>[s] of beer on the wall\.

^(,

Try it online!

Explanation

  • First it stores the current counter into the accumulator
  • Then it prints all verses accordingly until the last verse
  • Finally this hard-codes the final verse

Let's see if I can get this any shorter.

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ Consider adding a short explanation to your answer. Code-only answers may be automatically flagged as low-quality. See other answers for examples. \$\endgroup\$ – mbomb007 Jun 6 '19 at 19:16
  • \$\begingroup\$ This can easily be shortened using the register commands. But I'm on mobile right now, so I'll probably give a shortened version later. About 12 bytes can be golfed. \$\endgroup\$ – Lyxal Jan 3 at 22:01
1
\$\begingroup\$

Python, 357 339 310 bytes

After shaving off the fat to meet the expected output it didn't save as many bytes as I had expected:

def B(n):A='bottle';return A if n==1 else A+'s'
A=99
while A>=1:F='of';D=F+' beer';E='more';C=D+' on the wall';G='no '+E;H=f"Take one down and pass it around, {A-1 if A>1 else G} {B(A-1)} {C}\n"if A!=1 else f"Go to the store and buy some {E}, 99 {B(2)} {C}.";print(f"{A} {B(A)} {C}, {A} {B(A)} {D}.\n"+H);A=A-1

The following code is for code-golf output:

This is the lowest I can hit so far

def B(n):A='bottle';return A if n==1 else A+'s'
A=99
while A>=0:G='of';D=G+' beer';E='more';C=D+' on the wall';F='no '+E;print(f"{A} {B(A)} {C}, {A} {B(A)} {D}.\nTake one down and pass it around, {A-1 if A>1 else F} {B(A-1)} {C}.\n"if A!=0 else f"No {E} {B(2)} {C}, {F} {B(2)} {D}.\nGo to the store and buy some {E}, 99 {B(2)} {C}.");A=A-1

Here's the sort of bigger version:

def get_bottles(num_bottle):
    p = "bottle"

    return p if num_bottle == 1 else p + "s"


bottleNo = 99

while bottleNo >= 0:
    of = "of"
    beer = of + " beer"
    more = "more"
    botw = beer + " on the wall"
    noMore = "no " + more

    print(f"{bottleNo} {get_bottles(bottleNo)} {botw}, {bottleNo} {get_bottles(bottleNo)} {beer}.\nTake one down and "
          f"pass it around, {bottleNo - 1 if bottleNo > 1 else noMore} {get_bottles(bottleNo - 1)} {botw}.\n" if
          bottleNo != 0
          else f"No {more} {get_bottles(2)} {botw}, {noMore} {get_bottles(2)} {beer}.\nGo to the store "
               f"and buy some {more}, 99 {get_bottles(2)} {botw}.")

    bottleNo = bottleNo - 1
| improve this answer | |
\$\endgroup\$
  • 1
    \$\begingroup\$ You went through the trouble of making all your variables into one character, but forgot num_bottle. If you do that there as well, you could shave off a few bytes \$\endgroup\$ – GamrCorps May 31 at 14:21
  • \$\begingroup\$ Good catch, that saved me 18 chars. Thanks! \$\endgroup\$ – SZT May 31 at 14:26
0
\$\begingroup\$

R, 297 bytes

b='bottles of beer'
w='on the wall'
p=paste
g=gsub
s='$'
x='.'
d=p(g(s,',',b),w)
j=99
i=j:1
l=g(s,x,p(i,d,i,b))
l[j]=g('s','',l[j])
m=p('Take one down and pass it around,',i,d)
o=p(l,m,sep="\n")
o[j]=g('\n.*',g(s,x,p('\nGo to the store and buy some more,',j,d)),o[j])
write(o,"")

Ideone link to test

| improve this answer | |
\$\endgroup\$
0
\$\begingroup\$

Go, 287

package main
import."fmt"
func main(){p,s,n:=Printf,"%[1]d bottle%[2]s of beer",`.
`
o:=s+" on the wall"
a,b,c,i,k:=o+`, `+s+n,`Take one down and pass it around, `+o+n+`
`,`Go to the store and buy some more, `+o+n,99,"s"
for 1<i{p(a,i,k)
if i--;i<2{k=""}
p(b,i,k)}
p(a,i,k)
p(c,99,"s")}

There is probably room for further optimization

| improve this answer | |
\$\endgroup\$
0
\$\begingroup\$

Dart, 218 bytes

int i=99;b(i)=>'$i bottle${i<2?'':'s'} of beer';w(i)=>b(i)+' on the wall';main(){while(i>0){print(w(i)+', ${b(i)}.\n${--i>0?'Take one down and pass it around, '+w(i):'Go to the store and buy some more, '+w(99)}.\n');}}
| improve this answer | |
\$\endgroup\$
0
\$\begingroup\$

Python3, 258 237 232 bytes

Being strict about spaces and newlines.

i=98;b="bottle";w="on the wall";o="of beer"
while i+1:y=bool(i);s="s"*y;print(i+1,b+s,o,w+",",i+1,b+s,o+".\n"+("Go to the store and buy some more,","Take one down and pass it around,")[y],i or 99,b+"s"*bool(i-1),o,w+"."+"\n"*y);i-=1

Readable (sort of):

i=98
b="bottle"
w="on the wall"
o="of beer"
while i + 1:
    y = bool(i)
    s = "s" * y
    print(
        i + 1,
        b + s,
        o,
        w + ",",
        i + 1,
        b + s,
        o + ".\n" 
        + (
            "Go to the store and buy some more,",
            "Take one down and pass it around,"
        )[y],
        i or 99,
        b + "s" * bool(i - 1),
        o,
        w + "." 
        + "\n" * y
    )
    i -= 1

Default unspecified arguments for print(): sep=' ' and end='\n'.

| improve this answer | |
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.