3,138,588 events, 1,555,582 push events, 2,456,131 commit messages, 187,776,109 characters
Add the famed mclock.
This required NO changes for harvey. It's a model of how to write portable graphics code.
There's an interesting back story here. In 1975 or so, at University of Delaware, there was competition between the advocates of the PLATO system, (wikipedia plato cdc), which ran on very expensive supercomputers, and the RSTS/E system, that ran on a 100x cheaper PDP 11 minicomputer.
Roughly, looking at relative money and power, the PLATO team were the suits, and the minicomputer guys were the rebel alliance. At least that's how it seemed to us at the time ...
Much was made of the PLATO system's graphics, which were a big deal at the time. My then advisor, Dr. David M. Robinson, believed the minicomputer could equal the interactive performance of the CDC Cyber mainframe. At the time we had the also-then-new Tektronix graphics terminals, which used a storage tube technology. Dr. Robinson asked one of the high school teenage programmers to write a simple clock example, in Basic, and the result was the ancestor of this program.
In 1977, John DeGood rewrote it in HP 3000 Fortran for the HP 2648A raster scan graphics terminal. He added color when HP introduced a color graphics terminal, the HP 2627A, ca. 1982.
Fast forward 3 decades. John wrote a new Plan 9 version for the 2007 International Workshop on Plan 9 at Murray Hill Bell Labs (where it all began for Unix), based on the original UDel "green bar" (search green bar line printer paper :image) listing Dave Robinson gave him in 1977. Yes, somehow the listing survived 30 years and 3 moves! John found it in his basement. It has to have been the only copy, and the media was lost long ago.
John hand-converted the regions to the arrays you see in this program (!), learned Plan 9 graphics programming, and here we are.
David Robinson was a wonderful professor and a real visionary in pushing computing to everyone. It's nice that he's represented in Harvey, since Dave also worked at Bell Labs before coming to udel. He also had a great sense of humor and I think he'd get a good laugh at seeing this program live on.
Change-Id: Iba32b2569d7a583215a2c241803fddd3b71c9a47 Signed-off-by: Ronald G. Minnich [email protected]
Delete README.md
What do you think being a data scientist is about?
I really like how the article "Machine Learning Engineer vs. Data Scientist" describes what a data scientist does. In the article, it says "A data scientist does the statistical analysis required to determine which machine learning approach to use, then they model the algorithm and prototype it for testing." I believe that this is what data scientists jobs are
mainly about. Being a data scientist is having a strong enough background in Statistics to be able to understand and gather data and apply it to machine learning and analytics.
What do you see as the major duties and/or knowledge areas? Most data scientist positions require a Masters or Ph. D in computer science, engineering, mathematics, statistics or a similar field. They also require strong mathematical and analytical skills. In addition to this, experience working with Java, Python, and SQL are required for most data scientist positions.
Major duties for this position include: programming, communicating statistical results/concepts, research and developing statistical models, analyzing performance and data accuracy, and using appropriate databases. They also often collaborate with product management and engineering departments.
What differences/similarities do you see between data scientists and statisticians?
Statisticians often deal with concepts like point estimate, margins or error, confidence intervals, hypothesis testing, etc. While data scientist, follow the process of data transformation, exploratory data, model selection, data storytelling, etc. There are many similarities between data scientists and statisticians and they're work often compliment each other. Both positions extract knowledge from data for similar purposes, but data scientist work with large scale data ingest, cleansing and transformation while statisticians rely of smaller scale methods of data collection like surveys, polls and experiments.
How do you view yourself in relation to these two areas? In relation to these two areas, I am more familiar with Statistics that Data Science. I also am more interested in Statistician work and their way of sampling and collecting data. However, I do understand the demand for Data Science especially in the world that we live in today with technology and apps. I agree and understand that everything we do on social media is based off of an algorithm to satisfy what appeals the consumer depending on what app or platform they're using. I do think that the two will eventually converge but I think the background of Statistics and understanding the subject is beneficial to fully understanding Data Science.
Create step-sister-wants-to-suck-and-fuck-for-a-seat-in-the-bed-xh21Hng.m3u
ReadMe---My First React Native Application.
Writing App
Tarah is the most addictive creative writing platform connecting a global community of writers, readers, and poets through the power of words.
Showcase your quotes, poems, stories, micro-tales, blogs, haikus, or any kind of write-ups and design them into visually stunning posts using in-app designing tools. Share your thoughts and emotions through creative writing.
Tarah is a completely new experience of sharing your thoughts. It is a paradise for writers, poets, and readers.
Write your quote, poem, or story in your original words. Share your quotes and poetry across various platforms as words. Use this writing app as your social writing journal or diary and write your text.
Create 2021-08-07-Self-Worth-DailyBlogPost.md
layout: post title: Self-Worth Discovery, It's a journey category: blog keywords: blog writing author shikhashikz writing writinglife writingcommunity dailyblogpost dailyblogpostchallenge happiness suffering life experiences image: assets/images/Post1281.jpg
What’s the whole drama on self-worth...
My bonding with this term is beginning to firm up as I am exploring the concept of Personal Branding. This led me to find the literal meaning of Self-Worth.
Dictionary.com defines self-worth as:
the sense of one's value or worth as a person; self-esteem; self-respect.
My attention kept on coming back to the word “self” when I divided this definition into three parts. I had a question that who will decide my self-worth and what am I capable of. The definition did make it easy for me.
The sense of one’s value or worth as a person: It’s I who have to figure out my value and worth as a person. It will be foolish to entrust this important aspect in another person’s hand to “Decide your self-worth”
But then it did lead me to the second question: How would I know my worth? Is it related to what kind of things I can accomplish wrt my skills/ expertise? Is it quantitative? If I do not have mastery in any of the subjects, does it mean that I am worthless? Does it increases or decreases with time? For me, I can firmly say that my self-worth has increased in the past decade.
Coming to the second part which says self-esteem, Dictionary.com defines it as:
-realistic respect for or favourable impression of oneself; self-respect
-an inordinately or exaggeratedly favourable impression of oneself
Here as well, it talks about how we treat ourselves and reflecting on our behaviour and reaction to situations, what’s our impression in our eyes. This is a hard bit as we do turn blind eyes to our reactions and fail to hold ourselves accountable.
Yes, there is a dangerous side to it as well, when we inflate our ego and think HIGH of our self, we might get thrown into the muddy puddles. We all are the SUPERHERO of our movies. It’s ok to be the Hero, but let’s be realistic and don’t blow the balloon so hard that it bursts.
On the last part which is Self-respect, Dictionary.com defines it as:
proper esteem or regard for the dignity of one's character.
Mark the word, “proper” and “regard”
I do equate self-worth with personal branding and my three observations are:
• I have to discover my self-worth
• I have to be a keen observer of my behaviour to establish a realistic self-esteem
• I have to hold myself accountable for a dignified character
Hope, now like me, you are answerable for your self-worth and not somebody else.
Create README.md
layout: post title: "Mara's Gaming Corner - July" date: 2013-07-31 05:52:00 +0000 tumblr_url: http://osunews.tumblr.com/post/56948588121/maras-gaming-corner-july
People have been waiting for Cube World's release for two years now. An endless journey on unknown land with action-based combat makes people wait for a reason. However, nobody expected Cube World to suddenly come out on the start of July as alpha version. Does Cube World live with promises or will the alpha version kill all hope for this game?
Cube World (PC) Developed by Picroma
Minimum System Requirements
- Windows XP SP2 or newer
- Intel® Core 2 Duo 2.0 GHz, Core i3 OR AMD Athlon 64 X2
- NVIDIA® GeForce® 7800, ATI X1800, Intel HD 3000 (256 MB of video RAM and shader model 3.0)
- 2 GB RAM
Hello, gamers! Today I will tell you about an amazing game. It's an experience that people have awaited for the last two years. It's an action-packed adventure with voxels and has surprisingly good gameplay for an alpha! Guess what game it is! Minecraft, perhaps? Good guess, but the correct answer is Cube World, which just got released on PC recently. Speaking of Minecraft, people tend to claim that Cube World is just a massive rip-off of Minecraft. The truth is that the only similarity with Minecraft are the voxels. Cube World focuses on completely different elements.
Cube World is developed by a married German couple, Wolfram von Funck and his wife Sarah. They face a huge challenge: making a dream game which involves infinite adventures, with you in control as a hero. Even after multiple people have offered to help with powerful servers, the couple has chosen to work alone on this project, for unexplained reasons. Will they really be able to do it themselves? I hope this doesn't crash the project!
The developers had no idea just how quickly this game would get immensely popular. Alpha was released in early July, but the servers got overloaded right away. The shop for buying the game was down for two days and, even as I write this article, the shop is still closed. Fortunately, things are getting more stable as time goes on.
But enough of the backstory, let's talk about the game itself. What is Cube World, exactly? It's a world made of cubes and you are there to save the day. Worlds are endless and can be shared with other players via seed number. This also means if you play single player with, say, seed 5037, and then go in multiplayer with the same seed, you spawn in the same area where you left off. This adds more playability to the game, since there are tons of seeds with weird and awesome stuff.
The game also supports infinite levels. However, this doesn't mean that you can become insanely powerful. Your character is balanced by power level, which determines how powerful the gear you equip can be. It increases fast at first, but as you level up more and more, the power level increases more slowly. To get the power level 100, you have to be level 1990. You think that is hard? Try to get power level 101 - have fun grinding to level 671088535. Even though power level increases slower, it is good to level up, as your health points continue to increase.
Cube World has a combat that focuses on player skill and free movement. Of course, you are not able to defeat insanely high level bosses at level 3, but in most cases you are able to dodge enemy attacks and strike at the right moment. This is one of the reasons why I like this game; the game rewards you for being a skillful player. It feels great to take down an incredibly difficult boss who throws high damage boomerangs at you all by yourself. I wish enemies wouldn't be so simple though. Bosses would be much better if there would be more special attacks that are deadly if not avoided. I also noticed that only a few enemies actually try to dodge your attacks. Enemies that dodge add more intensity to the battle, and I wish it would be a norm for more difficult enemies.
Create get-pip.py
#!/usr/bin/env python
scripts/generate.py
in https://github.com/pypa/get-pip.
import os.path import pkgutil import shutil import sys import struct import tempfile
PY2 = sys.version_info[0] == 2 PY3 = sys.version_info[0] == 3
if PY3: iterbytes = iter else: def iterbytes(buf): return (ord(byte) for byte in buf)
try: from base64 import b85decode except ImportError: b85alphabet = (b"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" b"abcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^`{|}~")
def b85decode(b):
_b85dec = [None] * 256
for i, c in enumerate(iterbytes(_b85alphabet)):
_b85dec[c] = i
padding = (-len(b)) % 5
b = b + b'~' * padding
out = []
packI = struct.Struct('!I').pack
for i in range(0, len(b), 5):
chunk = b[i:i + 5]
acc = 0
try:
for c in iterbytes(chunk):
acc = acc * 85 + _b85dec[c]
except TypeError:
for j, c in enumerate(iterbytes(chunk)):
if _b85dec[c] is None:
raise ValueError(
'bad base85 character at position %d' % (i + j)
)
raise
try:
out.append(packI(acc))
except struct.error:
raise ValueError('base85 overflow in hunk starting at byte %d'
% i)
result = b''.join(out)
if padding:
result = result[:-padding]
return result
def bootstrap(tmpdir=None): # Import pip so we can use it to install pip and maybe setuptools too from pip._internal.cli.main import main as pip_entry_point from pip._internal.commands.install import InstallCommand from pip._internal.req.constructors import install_req_from_line
# Wrapper to provide default certificate with the lowest priority
# Due to pip._internal.commands.commands_dict structure, a monkeypatch
# seems the simplest workaround.
install_parse_args = InstallCommand.parse_args
def cert_parse_args(self, args):
# If cert isn't specified in config or environment, we provide our
# own certificate through defaults.
# This allows user to specify custom cert anywhere one likes:
# config, environment variable or argv.
if not self.parser.get_default_values().cert:
self.parser.defaults["cert"] = cert_path # calculated below
return install_parse_args(self, args)
InstallCommand.parse_args = cert_parse_args
implicit_pip = True
implicit_setuptools = True
implicit_wheel = True
# Check if the user has requested us not to install setuptools
if "--no-setuptools" in sys.argv or os.environ.get("PIP_NO_SETUPTOOLS"):
args = [x for x in sys.argv[1:] if x != "--no-setuptools"]
implicit_setuptools = False
else:
args = sys.argv[1:]
# Check if the user has requested us not to install wheel
if "--no-wheel" in args or os.environ.get("PIP_NO_WHEEL"):
args = [x for x in args if x != "--no-wheel"]
implicit_wheel = False
# We only want to implicitly install setuptools and wheel if they don't
# already exist on the target platform.
if implicit_setuptools:
try:
import setuptools # noqa
implicit_setuptools = False
except ImportError:
pass
if implicit_wheel:
try:
import wheel # noqa
implicit_wheel = False
except ImportError:
pass
# We want to support people passing things like 'pip<8' to get-pip.py which
# will let them install a specific version. However because of the dreaded
# DoubleRequirement error if any of the args look like they might be a
# specific for one of our packages, then we'll turn off the implicit
# install of them.
for arg in args:
try:
req = install_req_from_line(arg)
except Exception:
continue
if implicit_pip and req.name == "pip":
implicit_pip = False
elif implicit_setuptools and req.name == "setuptools":
implicit_setuptools = False
elif implicit_wheel and req.name == "wheel":
implicit_wheel = False
# Add any implicit installations to the end of our args
if implicit_pip:
args += ["pip<21.0"]
if implicit_setuptools:
args += ["setuptools<45"]
if implicit_wheel:
args += ["wheel"]
# Add our default arguments
args = ["install", "--upgrade", "--force-reinstall"] + args
delete_tmpdir = False
try:
# Create a temporary directory to act as a working directory if we were
# not given one.
if tmpdir is None:
tmpdir = tempfile.mkdtemp()
delete_tmpdir = True
# We need to extract the SSL certificates from requests so that they
# can be passed to --cert
cert_path = os.path.join(tmpdir, "cacert.pem")
with open(cert_path, "wb") as cert:
cert.write(pkgutil.get_data("pip._vendor.certifi", "cacert.pem"))
# Execute the included pip and use it to install the latest pip and
# setuptools from PyPI
sys.exit(pip_entry_point(args))
finally:
# Remove our temporary directory
if delete_tmpdir and tmpdir:
shutil.rmtree(tmpdir, ignore_errors=True)
def main(): tmpdir = None try: # Create a temporary working directory tmpdir = tempfile.mkdtemp()
# Unpack the zipfile into the temporary directory
pip_zip = os.path.join(tmpdir, "pip.zip")
with open(pip_zip, "wb") as fp:
fp.write(b85decode(DATA.replace(b"\n", b"")))
# Add the zipfile to sys.path so that we can import it
sys.path.insert(0, pip_zip)
# Run the bootstrap
bootstrap(tmpdir=tmpdir)
finally:
# Clean up our temporary working directory
if tmpdir:
shutil.rmtree(tmpdir, ignore_errors=True)
DATA = b"""
P)h>@6aWAK2mlUeH&TV5jz=Q_0074U000jF003}la4%n9X>MtBUtcb8d2NtyOT#b_huN@9QB18%v5x s4kpO(&rrJ|
eKXvh}(J+9c$zj(&U7jVi)I-sG3#xx1$bt^#koRK_v}t4mq4DM@nUjopH&ybBEPi}^ xLULGf}>f<ZRrrEO)rZ^Fg1jJLc)c=GxLp*?)XX9cMA%s%j7%0A!f-xjlm-1Q;llYNi0hKnkr^A-UnX }kGQqNi>j-c03mMwHi99FA7T--xk;ZT?)$>+
x#H%fIi^0Qu3eJdRH!XO;R4izux?rb=LBwVVdE^h5
i|scqS<hz^7QM^V}TULXNDXqX7^i?3g``(sXNhSFh#9RjF^hP9rllL^V=+GrYT%-DH1)PH9KWq46%J
)R|NJpuNX%93>#v!TyE^NqzAHP)h>@6aWAK2mlUeH&SQ_4?Nfb0055z000jF003}la4%n9ZDDC{Utcb
8d0kS$j+(Iz4H~8<^WVIJLgqrr5<}-^;T6;8q5#@Ng9Wt^y_P9ptD;}#IfIdelLCWGbq(BX^E&5*g5 !^K>s8^EeX~AToilV)A2_e6~zhOaP~KZvIOlqFiVW+60AOs)?J~q5l!-OgI;*jfY94W3Aib4Jnnk|YJ *Ng1Ga|{kpv)l&^K>8SV(XV+<$mHY8?a{!1#G)Y63H$85<@-{DTbUDCucxV6x07;%M+|!-MO9j<0Wi# 11q;*wWw~Jk1&J^A7l0*oU_7=O4mXm1V;gv{y
K?W($dDSGDs|`L>=UQy}+QWVBSKu9lNGW7TF8+_
8{Ie!4j}^zf$g5NMG?#$r7JFwdiFi
ae1M^!{C6|@<7hU2_kIGVf4lf-PN95Q{xc~)x H)+yD7ZSTFu#C|(HBN!o}6m1}htb9MfmJk{*1|JR5!La3y^@g-eNlcIpg<aOlzzp
V!6w3~--o_rhje ;x4v-gHjdsU7WtQBZZ!eNf4r13{eM0jsOyixv5y#2b#5{cCz#V>@K#xukcX$%OtzJ!59<8S&nG(}iY ;;Zg+|Wh1kV4
#XSvS-lI5dD<2OBf7?{$GQX$dFHlPZ1QY-O00;mMXE#z}dd^oV0RRB+0RR9Q0001RX c!JX>N37a&BR4FJE72ZfSI1UoLQYZBb22!$1(d@2?ozOA9r2x>tu#V^z<qK8sSd~)^B-veOCQAOj +k4Ympv?xc^~tZn&4R>P)IUzitKEiv
V!k<UTOhOfYX5m93M06vp8Er!^(}<|t3QKyC#C_k-UR@vh 2dhw9GzAu;e%UffpJOa-R#M7((S9m1R89WCiA5Dxg1(wiQaudrtxm<dO(}6tRGjR@+!|-U5oN&Gli 2Yh)Mgw(P;EmkwCnGQINl|fYLMgx5m}@il_vOhE;-vKsw5khoqATLi
u8C@Pj_Hv|&=^r;y!WIP$?o goGvJe75h~Rn^EBO&R_!)eUpYRfds{l1Ph^o}FHtCx?K4bsQ@hopKj^MCH&^_RTf~<RMD@vX<R1 mpHGKTtp1QY-O00;mMXE#zbQ3{T82><|@9{>Ov0001RX>c!JX>N37a&BR4FJg6RY-C?$ZgwtkdF5H% bKAHPf7f4uIu9hLB&X@4rsYaaW0;wwkLM3lhJ566bZ>VQv?f8l64vX@7=*36PYN>%FylkqGWC_T#s U#p>eX;@zHACAq2(Oz?U~>z3>#Ey;!p!X&TqmhqaDd%@~0ktLHYStAEL&Mq!4W;3>HxM)emw_98@k6h Yc^3?ro>2rG&c{AGxz9R*%Dq5g;NescQD5;?3dseiX2KU>ytdc2+DR{kMTT8p8ZPuLHM_y+YTWj)ZqP %^SGfmL2Ce04CF1bjXr)?&v<a<%jPJ_?%-+Lw~
XMI2P$5CROAuLsN-Bt7f)d1J#Bk=mNUyXtfE;)a 4}X#S7&-XJbkRMdHu78Ofn!|ECu>8ECb!HZ)c#IqN>qc-;xZ^AGs>=H1^Q<l1HCf4oWqg3=h4($ a&d|YzJ|9M7+Ah0<<uY&jEsMNz5AM7e!RN;NA~&4&CTA&j5(c#PWPb;G?91gx=o|A}{DVFP<J?)uVB CxdsjLbwy+H3Gfh;+Xfw*S22M|#N=V$;5#Lu7vU=pM$zZAfsOJlg-F3;=ZHJK
avzuW{6~Xxv-E<0Ys nFT9{>ZzJnM?v)QbuatK0pC+LPf&-KP7-2e)&DtyrC9O6wLG(r1di=am=FdqeTM?1u@8pKpw0nyzDR RK>pNlwB0xG=0je|0neJ%Dzu9p@nJ1%&i8gwn!qkfZ${!H%Aok}ZfU7$7FOQe^Q;OStYY9 KY&8Dz2h)AKgJW=Emj>eRb6+=ddSzmg3k;Vp>$sgnzxXNd0moSUPASpP+670+Hb|MH9$kp_eF#B0<9?d(IkVN)UUDhg
_Tw_u%18 qAeaG0;O<a8_PAj%XRkLa?Tl!OF4uhPPld$_K}GIUP9p+H%yKw2#zbgS-GIH^4(k(}I}?oLpZpmYet ZFM4Y-(U=BnRa5UQpn)zUWFsh+0F2(SmJQupZ&UQ)1fb550O4V^Y@yWX>JL b7q!n}q
%|bNL%yp@3%?-w@WrCE@G4aL?#uP3_u19WFEQCxd=09dGHphw0@Gu1=I4sRIYs|D2Tthk7- E{lHors28w_yzD$0Rbxw6UAY~Lq9y=bND$!U?!l342msbH~4nI&)<)@&hjz;>KWLEKA_0GfEw}i5>8 j!nic$FM=(zc^kf
Te=(uWlghQ4RgLtgEv48fi{B;VZc>{-58EQ6LgrW%!t78fsfWu*z9T&VImwVar 9s7+E$yy4~b8(aaEG1x
qzzO_JaGZE@CXUYA&?$rgC+ua^Fp1MfMKXN5IZfoCUJ?rh1v-OZ4S8&kP% XjAQ|oFGR9Pxl~ERFnbL6
F{P0;@)Fz#j1Q?tU2n0~Ir=^%{Hwqzk;#Rr9uEq0fL18TujzumIZK6D$ v@I-(<kXkmxrCz4NYR4Huy(+2Vc7LP%MP1UCHH{CSpQ2>2t+sd@0B^J7oOM@U7t#y5BtO6LTK6OO(hI {~cLXS}j-WY@=8X-
3Rhd+WQ##0f<g0;Lu+=DnK{zor!syyUybOWYJRNs$&Hk>4Wki_N?;TPX#3{E^ -tnuKBC4CzD@J8#BYp
j<~be!udVk(Cp!AHMz|wJN(1&oDH2nDg?&RVbO$#xke;yqw%wy>z!9u}-q- rfI@Fl_lDW&PgK)V-u{=n3W?1CIEO(p+zcV0#U?<2-+uoLNYpmx;MH!V(;7)NL3%r?ZEAm?8ifut;lB )1+4{zyg}QCVf<kPj-xot&?w#DkqPILgYt#@5EHBF!ari{d8+#niWh+2)sUE)lpiQCA4UfO9_nMglU iPc3^r16!TgaaQD;0N9+OazCLsy}7yla)0&t{
%pnUsDurLGL?KQ$f7**R3PGDl?DBTCmjn_LK-{L+ ppxlzVkRTMD?QR;;yEThhjDSM)Julg=;ZtDekp1jpBXokK^wSsffZ=z2J1(kR}IrL~1aE^$qH|I^r 5)KXK4_j*6YD{ur=
zDhUkfV7}Qy67QhPcTgg(o(rlLS1XV4fVb8$pU>iNwVv9?y6w5DRif4ItDm5^i-GvlwU9?5RZdfRjQbchCd+ATj7MJW
1sR|+TO4R6A3yK#z)?>IjH((taZUfPZOU=@$Fc;aSwUOr D4NG#$C3cpeT4UuLH9lD0({zU!3*dH;O$Dy7ZhP161eYthI_cE$zSn2l)ml>Da^14OR%ff9H|N4kkD MDDAe?04&|wgl(MA7-Q_^sj!Ah|6tcOBb-yjwu#s?;8@^*&o^Q_)kNtk?6%I=6sMvu7eYY42!cQws(
O27eUvE<WkP5E25AfTlMrM@(Rri|Ova-|v5W|O0VHe4;#xfQXOY0sWF;;Vctdx%|s2&7})FxGIfX
N@wXA{VK8QZU{iW5zO4~L6f`&n+JRZE3-$5Lh3$2<(hE_)~^;PAGvHDxvkj4J)+ET`8%QwX@aC69KTlHk!eIin(||Yg&Fcu(27D oHzm4v0ni0glJt<=VE=m(fHJXJGCM;yd}FM0OWnkr#{Lr(no6!FFlNoyYViM4h?~TgbYZ^xKTK};Z8I 884;T6&^-oZj6W*x#OQJdpm6d8JjiDWKTE0ItlWsuKKX!>6N%)_>QTWytfc|>l{MX+4ziDwq&LqYE#; $kJ`J-~Qyb^*7=*s^CP)h>@6aWAK2mlUeH&O*KS42Jx007x9000&M003}la4%nJZggdGZeeUMV_{=xW iD`e?Hc`$+qU(0{}r5qA@ZQ;x##|sxFHNu{Es`sO;&2dXiME-@qDo4+xJCc>z4s`Iq%5B=UAv-N {llG2@;$!qFDZ(mCp_N@_L5h8BX*){W>FN)W^z|6-LNe;+fuIjpYM#S`tPOMY-F|Re=0MZt+m>*TGna yK~#m(Y0dNZ98aYU-x$^%l~p5jtp)teD!vm*u<}7@BjK7`khP602W&a7R3&p>${z%w^XVYO6)#iqF&A |Mcn7%W)dzqn-fo2`pUP4Y=mg|W6{0k0DXaHA=nMFM%h4M|*`Fo+Q-_I(v=O^HE2Qp^U&8M%r51Uk^g dy@4ZGQUSrz6MEc+Vd(&Kpf-8bK5Po7;o`B(P(+gGoizxwJpWUHMdYu;?LMrE)D2C$yMvzRgX5VG*f# }yF!rOcZIgk#|E*CcFSChU!9W)AGMbzJhz`21MFYo&L*$#PXSS`CtZN~=%o;%tWYDKuO5hMI0f^Mcmm jO--K=Cj$X5Nnp9nS&PcCNAcd$9u@2Sg;tGx-yMU82q`Ovj?B!7diuu@>(>lt{8_kzA6PXTYi52kf}8 +AwHCW-lynN2w{L6^r5t9ceRNNKnj#+@5SCMFLeu^U_{L|2j!b(93@f0qD3@Mn5ayvMaE4oC7qlTK5e h>yfn49$0ik34w8x^Iv>sF=~jF!LByB5j_c+8iXUpa23QxHZk}}IS#a^(%#$=_~@Ojcio0H$?Y6ocKN|v(OT P&(9Am$Q;NqvfD9t&>;yWv%XPP-A6fN&?kMHr+VTxt#c0>WGEZcf+@gdJ7gZ+b`%-8)I7KJ?b%x*Xk=uT+a7RK|00Aj>KYOy&yJgt;_BDZt^ Z$LrJr36)M!uEG4nq#?IKQ>ROZZGUGG#FXLEl-D(6(KuR0q{jFvM4mWo*YkNmG|G9&qI(_SfO78Z=z= l`X#q8lFr;9cVo)FV%aU1y6u=DPA#x|lqLE!>Bj@l3Y{gSIN )mi!IZn2nMEjIG&b5dxwp6u;t%O5m0Dpt@qTyPD*KLKuLrBxE f|Gy`FY~ZHed8D%Y}#^swK%^{I_|H|7Z2T!hl@w<$D_sdwd1y{O9<78aQEBAx&NE!^kW3XM+UpcrEth6`M{Xp3<#F2kG8W2z7@Rj?#%F7nwn%8hL8!mVJ9RvX6a3?GH*0rIii9yl6c`8 VMwXilN%ksfWpc0`FEWl8WwZl~_p)}+}lxY~XhJO4J7{$@gmDPB?2h~)=?XU#(kO6n9(|XV3P|KosSI NjOtWnrVGzx^oN06_v=Sn>U+oq|_;_Pe#9JQ+y4xiQgnx8?=Ka<8ld3yHu^M5=#w6Lpa+|ZLk#*6X%6 lllv0d%(>|B;~Xl%TwBb~?BJk%_uY1fB=ItMGGB;^s-2oln@I(y`n`V*!_-9#?yppa4?_5z?kS;3E!# 8OF|052W^w|>pD>9zeicSV=>uJ@a P&YA(p;U>Jd(ga)-7g{Ub=bOn3f6h(*yl^N}D9PaP$d(y}D*#d2RMiBP>Zg+Jypt$)21CKi`}DNG@ Z*T@!-;>YpYMhxxoK-0#eyeeb&>c;Avj+0jXgRgu{2G)FzQ`DNX%ev#0fk|i~Ev7^M#x)K4R6C*c$o< C8IkySn#+pMif6+sNLA~jl?|~>)Qz`{q+W@UA+kDj;cL7BVD&Z4*HCNqM_^xub(yPyW3#z*f?)Y{lR2 !6wHr~8-F~Ujos!i|AB+{WdH@WTSsPLVDm?Hhh1M6UHld?4v!`*vI>k6_7}g3`Y#6r&x$C=58z*PHEl !n7Pf*f{lmQ4Gwj-^BcUF(o8$Yp4al&eA-e@^;8j&Z9R>WrzM(R0+4a_r&KumrjD*Eu>q$~Ku_C ?k4$PhV4n8PPjbq8>u6^<*%jYnl9BDR|htJsKpf~b+2dleIAoe w-mU^089J|ksM{Jamt{gm8ofU(H?4~-?ZfxjQ8W)u+IIpbUj&$_U?H@~sujV8ZLUV5q3cq*j{RwQgq _0+?DOih5UX|*AMD~MdcLWkZ-!XlX9o6X8}8vB_&?M_(KK+OgdNyH8YeFoAb=WTIUvFapyjGXo27XeU `wN95|OW8tFXWc4q)bY79|pAg*W&~9D2+|XK{~xLBW(Vo;PW;gS0cQ^X-{v^1Bgn*rpu7O{*p#8%n7{ e9U$ji$d~GO7xa}jAbW;J3j~jj-flaf0i6^-X+dNUBhM$dNd45vG@8&90X)XzlVQ5cO~^j4K;^XQICs MzqlUn*^HiRK~YdP_aRB&RP^GE(omm{-dWh6EWA%w+ouX`igUw@JjUegvhBbMsgmUkD>bNCY0YZl604~W5T{%=S Z_4X#kvJOf|TF~xD|xn#4Gg#-r7ZYGGW3-H8(WCP(yKP{kMM(vsNwEm$qCoM4u1N)>511H|slpiH@^> pT_SvL(8?{rJuJRbn3@>8{r}04|vAmX$<@8jHPU3J>cuqSnrqZQ14E~)b&=3zbp}+YVJhD@4UW8gB2K B{i&|E98Z*BBQi$M0vtvN9ET5Y{mNjp=E0_}a_E)q6ZJcj`GDAEvfwoXH-mHs`lo@Xr;`4|8kBcR9k> lHog$#H%5D8(TXMp2!%Y~}z1-E~gH%EeAv7J;Gc@WWPd@CzmZYj+*;mW*c*!5CV>!~!MC 1mRJLE4Px#_=d@{7-QFl$U12G6GTd{Wnlc0|XQR000O84rez~r#;P*J`ex^P &NPn9smFUaA|NaUukZ1WpZv|Y%gPPZf0p`b#h^JX>V>WaCyyJZExE+68`RA!BtUM#yaYDZ*jN{kh{w^ ZZ~M^1W8}E$QfG2qGN7kNg(AUz99G8Z)QkJq$E4-?jCSP(b^I@9M0=ALpBJ4S4F-M*K3(nqR81Q$&+i o;(5gsuh!*Ya8ax{tGHZ=yvT~{&HiAI<;jW<7&}z#PKv7HITJaX6Ct(`8CMYux=pe*j{1oIvP7w3E|Q 9;>`qimmS`e-?1pb(&=h_Eh1HeF?Fdl~6)-U;zC!aQ!dWAtE=7`8$OTg(zs@+jD`d)2uI5qznQL~pJV4BdoYb%&{^NlFf1Hg)CNsAP5Enu__B$v8j(=OQ%Kk6F(`El&9mtsBfKh C9-;nq%2b*)z)zlD5Oj(JN(n}^yu`{#hCH?GRf05?q%!Ll~8j#k>_eHc?@g8+r3EHD<@KP;!;=F*^|oeoy(``%MWyPf6}cHfHbFC8( TeohNr%#Al>4cHpTnYQJXB*u@eST!LI^{#%i!Fv%N@tf)C`Q!*D2De-)U>|4)OP-Zrz|YuwF!>u;P_bg++rC0~0H;VKj |O_k0jWe=+lPzE`9Xk+1$yT5jD5fzUX*+;7Gh50-khBNba-+QTxZ2qlIgJ^fsLy8ihU9(r%@Nj?n#8B)N0W1q0m&lL`x={HC=L4^_hP@pdd^o|dhqe^y$Il@<@e(oWxgP5iy8rr$8`bT*8l;N;kaUG<59c*paSYKhNL@i11@^-F4awmx->|f RynvHIo>c-A(gKq$L>9`9Hse7gK@~9Uv(E= @?(i^QG%S6D`Zkh?bos8O2j8vJ4Dg-%<*~^iUDHw0;g`1ebK-d;5$rPjVC5FXuBVH|Ey$wT2lK@Fx)+ `q)f~>TRek(*C;W{|rat`USDoO$ZS_Zbr41*Do{^IlucN4y<612S+er04oKf&JLXwj72=uq}))q->1oOYbeIS eRkOv_^dq+BPopQ%5~h{rkVN(Mmf*G#eL%ri>u$j!;DEnVEP$^j~3=2-*(oFv{9VN;udn70@q}OTNV( v(D{=29NYw92Rbbg!XG~BG`N^3y8Irl_BKpPwkm%b`sCH&&XF}s9a8u 14PYOuFk;0}E=XFO3Gl%`e$F12EYXpba`o}tasq)PPuffzEYAQ6f=U>u`ly%UQ2069e!$52pYi!qEYG L+C55=N57m_ZJvMb4c>Q-`gqqR1M!NU>{1p$sR~!_~S3PxfpMa33r-it4pTgL*i)cfB(5j)?*3(cYRj CfT%bM#JRJQ0|Q)iM%0lU?w6p#)6t{mfK@$i3J4%xPi=oM?5?RHiLBN5luj#IT}hka%1bF ;4+F?c8}CVrs}~SU;z9t7AN6bc*XsalPcKf`BRtDXLA=j4?9l-93U|S+)Jhi9loaFCTeMxyG6h6O=C3 ;CG@K(T{O!kokhf1uMB}1u2afwA@fE+LBN(WL%qYbopJgY26oL$B?P+DVX(ABU7n`4NzjGc1zec16*V E?cI^K-!D=u6HpVS;3tt@X~ZzvK{Cs6^Q4@NdN4Jyr?ugU1!a+m@|@X#q)ezQnCTB69K$?$r^6>WX5l_qIhMq~qS$@{UZe7E K@Q=ogF@fN5|olUp9wzT{^4UT15H6vRYhR@zq6F6Z!&gPGwtZ96*6HU2Qga;NA;i4MFe&zO+~3c%2}F st8;4KK)n>5eTE6`Q4P-*)6Ph95IHNz=~YLC-kQcIfTL>Uz*phUW6pm-UP+6GULU((a5^B5z{g*=D!U Q;1`6>%7P2cDY~M&ORW4-DdWuTNmgCJ;@-*T{8MJ9rXXeu6qnL++m@;s1{A%%#j>h`myf1`KCDPF>l? 5)uY*6qPL=Hq)}(|mt%Lbq}PB}Gsud%d9J%o>{6r$FJ}=ugYpcBK~kb7KY$^2wZ4vm4ylgozjx}kRkE R!zA6DxB#TN{itdJbH{(YFn~I-^0Ya&Gz{k4=nA!Y#3NDw=+&+h@oD_^b65l(1(NbsFH$ (m}5ECJJ^(hArI2g6VS5>nxk~1|DtG-G$Q!sVWTdew H#~>=I^(T&^VmN^+AB+g+6e_n+!HOSW84C2y=g}efn43gk&Cib1ViM!ZoY8>01>@Uv&XRZ&>r1i^n)=xFcbNj4?1sK5Rs!u=;kq~ 2R6YvN)zZ!!uQOQ3g(xW@-=$#-l8oAMf%wwZLyNnf_@J9|ww!47)3zj(*G{-Y1&kr3K#GAHzV<$R9CX &N>9xd(2fvkE&n<2b+rmU=u(%OSx~|yhNyl}_pMZETM(n|St@!H)=lWPXMc}U*Tux+1-C%7m;nYg$>` v=ut4f|yMlHNuH%6Q$V-qE`i|X1+A8n;YKCI|W1t?0cl_%iIx?*$qUGe&CMU$#4_RU?g8DlhE7Flyh5 ;;SU3Z2qnQ9*{jSZCN5&l}L9&y|u}>(6T3G|q`Nhg@#DgS9vT5t+Ta8OEYV4Kl;Fl=0JPHZ@X>PzGVk TJd9AO&@YGFH(NQ@$a6dlV+n2GntPv>me{g5~hbkypp5qr e!SvH9op*{bj^8VY8zhB<8_yPSrdeY_l`}KbgMsqL0+}2l)oSFUYD(^l~9pieUVLRXj`>^7^EfBD|Vm L5|5REk4OwGm?KF5zO!IE?V!%1-_j+cZ~HH9dGnez ohE172bw|tS%POQUwvlMT-q^$uxBO-5YJ(J1^d?beF1?u(gPvjiu#?tNkg#Sl_ko|_ViI?kU9*7en_q xo$i&ffJpZAolM^lhF|`$KeKny`am>|G`-W#1%_N6LML7$Pirn!L5(R+T{xjWMKzUG2JML;Cg=VIEi!IfNh-qs(ucsDsY*=O&H+xniiuK R()y3$x2mRhWHqU4_J_l8-vv`snGsBx=OrC^d$(A4}e2+Gi%F_ouifP5C~*r5zAkh-TwgeI|8oPX9Sl}Vkpk*sSNfcVzn=0)B(F5%2a_{BrcVy4*A (2zj*L|67;I?HKUGPu$c&yo>J>fO))-jZ$((Z8YBzE_4PX8F&Y3h)65q^xFdvnimt3TMA{*LT}hsW^Y 8~He@%TUckO!rmeII{mSVcfa>F&g|AP)h>@6aWAK2mlUeH&Pz#fx*%b007G}000{R003}la4%nJZggd GZeeUMWq4y{aCB*JZgVbhdDU9qbK5o&e)nI2QywJENbL3JgKm5?j$_B3#*WW%(&?lb86qJGHAScZXddaV#zm~HK`*(NK;;%}W(j+UDiAGnK_U93NF>5f3=f-k wceVlHx6PzdRm|mL&9xD_y_j0HFfaTcelR7^bKm#WKH~JG7AsLWb%2Ip0#>E9#3eV&T+V#o=?Oej3s| UlqAfl%Zd|9my)@^>unW09(pu?3?XW{D2i)@|Hv$*Ignvgq>v|s2qAShug_YrjH6mV%LTH{h5|}KUx? Imtq|?P0O3W%vz7}*2g}yK3w}`EZU4qY5A^}7(2Yo+ie|QaW0jL82b)_r8Kt#}K A<8E@;p*7{hGIspWX^TI!3o=i*NYh@wI=9GCguQlvXJF;Ixr%ik61>C;0K!)d?kjBE5AS}5fe5D7dm3 _eaOcDrdiZ&y}t1?f!)YgBz(dSScjUDcH3wQ6Lz%}48Jio2lN(=S!M#wXALQ`S_*y!DKFstPTLNX&dH )85}YdAry0jDqIp4!=s8p?EYWGTOM#>>XcD}65Br4$%u@hQXe&Y&n-Hud &xkkwuzU8KB`xX=q!37p%B7Q!Z}=$-NcYpz6_Ia%Dv{y0AXQ29YlNhN}p2Wf<8<|$6X{8OrSVdkOj%?T*#sH%gA_-^l65{3uYrunC3!ZJ<;3DgQyl`~dHwyf^T8~RL1{*Z 40NaXtF2tl^+={lr&&!YJ!LviPT7eHeG3>3>WyNz*+~W4*5OAm$j)Ep2{l}q<-tPkO){3;9Zs9aa0gd {PQFDyzMMc^SN4U`9R;tRptYn_OlKR<0^$lvt^`^*~1CK(}%}^A$m6zZDU6+H&l)L^yAqEX-2zpQ7;@7oiph5k;ZUSs>5D(*gkw6Y7jStZ{K8lAQh~>O2^+4BZ?7Qau VW9MmIY)yhTPvv6LJzuCZ1HlK)SeIx)8P=cFATpSIJuAjKMi8_4gIB`+*~3 jsKXvf%oRZsNSB2b`~Mrh=Qg;IFQH)A68I;6L1V!i`WwHZ@!=Ky{dT|ZI rsy$0K>880k|v1Eu5$ph=Je%yJ^EtrEc4llxM(FA3rsXv1atKp3kRd6uw?VP8?E`uA%ClkB*r*VO GpHcn6X|yMoSP3}|a`BR2avU(GVkK!!+^&V+9A57cX#8@DDiRr6_zm8`;-`hu7UtwKrDDOr0uZP5Xmm 0u$WOO`;khaF9TrjZ(wnaVb>I-Cmzfp{)WPhd9GF&@rsk^Ub=KlxM1VnA(%?Jd;rhl(y#@wd?GDP_-; %G-kQw@@jO0rBP62qk&pv^qA^V|$7I9uQ7ekTk%ifp9A+-}8A7Utn-9*-fGDit$3JjOup6*!fS=TMju JddCC;8ty!1>~^DeLAi?N1&%k{P$-cpY-EVi^I%b_g7G(OkgGePT^VD^$@Ks@6af&1Y~TRG6n)5573L ri;YEo<)}r_f!L2IRvOosl7Go^^03j65gaA$n+{8efbCrM(hwo|`nLt+*MJn+%=q3}8q#|G@>>!8P+< *Y%ax4onv;%k`p%i)rIAcngS|ufc*3iMR^kZCZgU`5PS3g+ie1i+Q6>P1LT|u4!v$N!i}7Lg)p%7N1Dt@Hqay5h06!91(&%8#gigwfl| ()qudK(S3mjMHYk1-RZ~K)2$0Xq*WN0gX?42JEy5z=4$YH0|ZuLor8x=z!mr!C0diAuLQ-BU>sL3eA4 #7mTuKeWcm?#cm$PLTmy8x@dXfY$90vXp>Z$cO0n9T!`203PyNd&b{PzVS%n#`hgbX_RL3l!1&gAB*k JfSNYwhDAO0xXL!pU09i?az4zx9mukw^_JBCJU??FiSp64#U%AG6lg6=U|rli_WQLSc>Q9WvuI;8~}L kyq(fevw4zbYsgcvS7zG3P^SFzf_*XFzQNo=$<`4j>r)PiDfFOu5hX#+VWUlN*~2fX-?><Cr<>Fn{uA 0e1pI0S1C42bkoTlPr}LhlAh_fgg;^p+ijgXNVVr-XTXRF8bL3M^ZqQCNh|v8^7v#gMu?f?rQXwX
HMbRycqJ@#A(hyoEy|9?;YGv<r{(qy%@4rNon1D~d
>tD~&}7rr=2{8!079A(^46#<xJ9n)e|ZzglH 5LZb481)k|jvQFLp4KSb;6pV%dFUAqP58*DswPh+>{6=gdpo0f&``|<I?%1+zWC)6tTvxJ@aLN07wU| _VdmDv&#sge^OP*zu3o
Z9NuM$bqU6Ct}O5i$ON<1HK$>J%NrE@e~1}rDbT(aPgNeq$1jjHr^S>E8Qm OL!S5X$k@ngUkB2B&ir0QR&cMNtq5wSBHS-hZjj)rjunAeK1wo
GRjIHBWXXj+StvF&jcrLo{>Mo> $@1%SxjE25{MTaOn2e_bI<q!FY8PPdcC;02CNGBW9P&6pL3wZy(r|(YhxOc|JQcda-W5u7%7daS ug1u51=rNTVcsuY)duZR3t9M@2aOQM}{Kp3$-d>(w9ZgRT-kmg2$eU?D)@2ZT;_U4OP#V%+iZ=j2lkY FzY@?eQ)vOHL0(LAUObi>hq!}R!f5NzZ-lREY8Q^oag
XQ*0m+sEX5W?m^*E?*aap|)mr-cMCVvZB( 70Q9gq{h3gTCxhT=DooVMmjYlt{hBLQ4A^i&eeqkn;<C6<J$wcM
pH_oCum}Q?1fxvevMC)W%Z=w<lQ POFFUxGa?=#R(?hTF+FegRcSb<Kp|M_7O@Hww5fcGtiGTJqZ&QIi{U)Hs~QkYB-sPj+fhr710KX2O m|2Td&e3ZymQWxA)O3k0Sb+N$DT#8Ce>;r*7>BXbogoV=r;%T-5Os(a*f
R{Qa7UUbE4q0zmGX2#tU1 npYpvHWl!@R6&2Ew+AXEt9f
1eU6h1jm<cw(AVO<AQ{Dk&Pf3a^7a+6EgF&)HcL1FI>uca~Cxfq qZ^I$sXfJP05t&p49D+<x&g;un?etS@r>m2rcSr2v;PBUj*GKQztGDd@?G-yaxH>#x@Q$I6!tckIZ_ nuY^5{SBPcM(oj?S;%wJmjg
sOHMF8-21t93?sT&Nvy&k=)!1A)ReY71-VMZ(@9KHf<@Srhksg^5Ne5 m_jCQVJ{x>&BaZwWWD5TJeo@HDV0joj}?uc_dJS&#F5tJiyF-IsIH@|zPP^}ieefnf?{MldW&e^AD MRPY6R&FxrPuB$U1%Pk4T#>uMPC(L1lvxpXGqw@+iKmq_aJ0}w*fmygL&>4ZvVE}LQUotc%^_YJuZc #YPL#YDziq)QFN}Cz|74We6c-$k9Ec}4D+?rA_n)#c9Pyv4|pCb+uo?0X{uJBR%uib=lJcHUy|b2-|J kz5kwXv{nII?xCe~JjTV4dkmw)5rh&~ine4UKb>usmCI8{)Um!_IGx6Mi9#s+m(f2?6_|wnN{ijpdYw #@h!2##b{inPBfEFQxfS(pqr3duTx^EYm#WQfaXH2
g)$SOU2~@yFHFW<>q&C3Pjv=V|WenZ5-Bwg)z 7s^;fSt6YaZKt7kgzHZ)Q
4d5JJN-FUdlZhFRb8ed7;A6d>PyQ<Opl@x__g;yg=76Sk#1tir{?a? n0GO%LDzSv2jM1eX%UjMxx9yQcIZ569G$(S>vbnPoQPNzAd2Pz{(%O)P}>|uGk#k_yu$g?9PSyQP;r xu(-GTj$Qq!F)J
d0w8QL7@%RBbG8qNI&NZIY#=c&+y%7f-pE)}r{>;angRoGc<$)58C%IdkdhdG>>g d_h^{0Rg(i<=MF^Uy3)BDh{?ULpRg<t+_XbWeRu1dAFpycFG<~@c2?Rg^-S><Y^o_=76;dnwL_xy yw%ckPYX9M$hGXVI8DuVzt*u8aS;3xdb+ZhK-6U^~uH>Hg4@YTCL=<PKXS|FNs0BYpf5znr@}u=DzwN &U*QKX>
+8w%P!=d(ivR<m8?P%r{G=uj-dbr0vKP0^<w$9_79^cZ(51!fSGF(6~;G^Ru7|H)A;+Jg ^p{Nzw|onxuU;Px<!EM9z_EU_x=k|O9KQH0000801jt2Qm;+eq!J1M081JG02%-Q0B~t=FJEbHbY*g GVQepKZ)0I}X>V?GE^v93SX*z~I2L~QuOO5M+g)3p?qFvDFS3iG&CCSTrbW}DTLghXOSH{K7PTa0$6K VoeZRwtEIDzfn}?X<<?!6kcbFu}Yn5{=Rb|+2Ewo@e!Ahm>*ivbht7<7%X2N7;EH6uDY_nWWn6P=0B! j^j
>+<+S(a)is}=TdHlni3tW{GMY$2Ey8?Y$<Cs(%!D=P3E-PlU}GCCQjpo>-+mwao2Q)x-}k& wu5m5re@}s}0LCzdOsA+|){2#urAFjTM>y9t^^~GKW!GbGwe8b;&KH+Qe@ot!T%4(;0fX{l$fZ&{md) 9j
NP4y)OzV<{<xS4A3i7|2||{Qct1MfS(V=WE8!nBCW6&g806TKph|}OD4OlILs&|WR;6iZfU=r!G LV&Ev8(Pq{J5{Dw)dpxbzMkpPVOUSq4c=@)8Bxx1X+0Z-?CEIbro&+k5GP|V9eviBdat}d^Bo3N Z4d;0uVYTNKqRNF{HH&q3aSyL54XNPq-$nuE<^zVmV~uZ$NbaRqBx(6oTn}@HlYJ>(!HXyCHFi(f+u +O-_OZfXKtc1Ou1o2o4tur8t<qAM!N=>1_u0!AU@v=h
JSCeWv7jSBsqtLGJKBC?XkyR3VmZC2Y3gU zE-^63&xtg*G5O8hgQ_XN|^e
cH~5H%rk=zwZTN$_JyPF?BRppuyDAE#-~Y6xQ$dc8ytRg1cC)R!9Zu D)l6PPXC@T9LCJPf6OlNBet*Umw!155ttAklWES#7r9Qf?b!YE0fWAR%@}8_um%<Mm=Tmc#!@M<e=A (7}77uMk8XvuT0nw+lFIz2oWL<$IsZWm;ZiqF=ux|)I^MOSiUP<nyl20jU;^DV2BW5R*)lby{Fs=p2j U5tM><@-{%V-&;#xmjeCqa=I(P*TlV()LTjb_6wlaYML{Eaw%aLvM=n|ff7
P)?6?r3f^jOoL5_wb$P 2=XqR%1pBkrXg^=6%QL-vP+Y_A%|Q9iI$PpvB2~O&RBj*+Lf~r!juyH|0V5v0e(Szwd^UjFy#{BIy
wQ!Y_rXq4(Y02!(B&QypcHHa-)GF5g6fT36DOs-6KqDBomn-jofppvYMr7E^&3QCR4AbTG}>g{|d Rw!YrA*
I|5W_kLb;xGtnQ#itJtbk3tqbVGOc-j$5#mM0exoi6UJ@}2AMf?HzqYITqzgH_7j^f!x6 1Z+#yaFT47b0hxH4pyz%V!oKTS#zMR4Kv=aj4}zG4H|<S&Pe!Scj>o?52#gf2vE jv)9EOX#r^E1Ue9cWA@HBQrbzNuGuG)5o>aedKbk?TSIyQ5Ampk5Whe5oT7rAgoEx71Mj|QqC65iahe&{@s3PIwcCJzA43o86j|VZEbDlGstciO@1eAs
Ls9srUY$G^P<|_Se 7t^vkTJG4<(Q(5IollM%CSp#|vwJzQSeeogVU7KY%H~@S2mUCQV=w7TSns)fI(;k^7%PS=<3A#@U f1bD6d{yo-9-~8V}l-I%6N953EzZBvLIUNr}v>4Hh+EWI|~Sjv^`pof|BpXdz$%p)D^PLEB{|t>mRNF m3cV?=>zd(=B96{G?A@4DLdxzOYD`3&535#6F_n3c&T{hYMG$LhbZ>;jWPSySeK+*Rr-IqzO7e7aSjH FMV|43|=J5LN%5+Gi(SFLxzO^Nmhm0K}SmcE9P8^zepF^!B{i$EOv745AaM^jC%+EjAwu1ke&apOMd) <ppjpd&MAc;swviHjnT6bh`FTv;rt(Pt17rILdsfd<Wfqu5uTYq=|yQM2Rc&UX0PRf>ci}{TA7)nL*# eTu3grC2|TV!kpcj?Gg~PTFH!eSxDa7C^IvW$iiY4}NA@DDa*+OJ{yePDuJ;CYsl9plgq?<c`G%n!cc RdNL|+MLHlxZhagOZK`h=~KcF(U=g`rl;hM|Nw9F-;R^4z(_LBG6@kmn|Bp%fsK8}`3l?I(bB6BlovL NvUK+hg<M5pH+)5$vPU0mK;}u@1Gh0&~5h#PoGYk`LzxEj%1j_JKWz`TUUJpv&R6x6zJKDF;imSKK7V #isj6U_o}1OsAEalB%cqa+TZ$rm)myb<~pZ9$&!AwGo+5p4n2CE-TTJT71D_GQkto<{0bVc8(M-2Zs( L!`x^XbUXxH*8(z~f6$Ha*Kh-ttved(wzIm^0f-U2AD!%9CUh>Qr>nOgfWVBf4qv!9M&OXcIWR+kV`L $wV!1?>qQdByaq){aw-NX!Q1dYdKtfQ7A~0MXy5XWBfXkK=+K~ShneR%Y?f^0hfzA5~8s=f){28=(a5 9#c5Zf0OVh!-8!<k9DiXn}-1mr?D0FDVuTu^;|h@tZJA&Iz|R$>T^ACYom_DQ*ze3BHc^hwDyB*>^=K M{SltM!B5%CyC>A+kC%Vc<ylaoFKFJ@<BTt27F0lsmBIe%u<3!rBuy@#w+p9?|*WqZ<eB#GZgrr`zuI 1aAKgworh<r#XuBNTLQrFB}4bV!15`aUQ^fnOfv>DS-<>A5PiSDdIA|eZ-{mOrXKpI~@9~C4v%Q-DAs 0rXnR6V)>nL*d!N)sB-9IORlL<4+17+vEe*(=n6CAlp&O;X34b67^3VMFL!)zo)KS+FRh49|5$bZpcf xi0Y&dP;4E09t2MlpIToew0b3t9a}F);sfCr+f$#qSG+NRFoZT_MQWQE1fFR~Y4KGR2iH03^honBAQ9 Ms*adUgfDC1*$rA=KR!;IXvpq%rb1}0HM{poQq<BxWX-aCeC!Li8<Z;wGkuYZZIJ?YItio9$JF+7?ks Bt{!F>R+kKH1ri`zH^DxSbA?MrkRCI=Q#sFOoo6rLscHt?0;TU}5VfA9sF_S|zWmB<L!+9glCG-}c+c <1OD+C;buIlSi{Xc5j}~Z~I$<<e{YtCBO5k@HBvF>tB3T=pveSkwA!B?O>b}eOl!I&vzXoqsO;(u+m9 N$4?|_nmVL({TTE7CS0S#60eJdxvtLCswx7~rBzwg=mUTqpdX|Ule(wgwoZEms=R5NI_i$L$QmZbyA} 7oJEm{G<+9|9QUsG2&u?r<LCJ(((Y2&M&qCbdw-EQ~+HT4-Ub>e*G}YZo?d?5xoE}U%cem0gK4OKIjO 2rJXo<Y+5rZ!pVASE*!`nxAqz?WX_qhk<&W+?KbL=hXL63y@je=7!ttDO98P2%cdEyMM#WSIbchpK)r 2`h@Q%=;f;r)xq1Lr>c{j<t$E%P-~RD9aw613^%MvEztFS-O;gvyZQ<(6`!D-k^?O7#a-tWYk&!14rj bj#+q87$j*T1AZ<)ye>GP+|Wzd$d@oY8o~`u%mp;{M$o^M;{)i^yybmYV^<p5eoc{Mq~7}7~|=t=qRs vq~<}EOJ}V{Bj_6Vq}9n;*GJ@HEsF^>d?%g67pq{qB|IZ_wgfjmf0TwN9R<7BfObpx?ruTh<?T9s#Kr O8e^5&U1QY-O00;mMXE#!Ed(AWz0RRBC0RR9M0001RX>c!JX>N37a&BR4FKuCIZZ2?nZIDk(!$1(l@B 1l+dTF617eOuPrT7muir7ObC2W&PGLY;pGZQ7>-fc=1q01hY$IN?ge---<0)-?er^wE>Nw3sOqC+581 9ic(!t45doi88nme2XeD$Aa-2V<x@AukNXQ|(><JG_wS9NvPGk0HjG5-aE|xvAw^ZZhw1c33{!Z{h-` $KlO>cO%N%?F`OuAvPTcCzHu%Ljv&zMnV3<5-QK&+Y$=z#J31iFa;IR#%jzPK;rjW*dZ`h$moh#a<n5 &%=oyE7Pc(ukPaoPjYQ@kh|s78S)^%A+Vs1m@Ld{)VAF^&C6OK_y}Y=-N{$8paGZjSPI(AEs&eF%f3p n%`A~&Xdv?F#$ZBSO08mQ<1QY-O00;mMXE#!Lz*)Mu2><}-8~^|s0001RX>c!JX>N37a&BR4FK~Hqa& Ky7V{|TXdDU5MkK4Er{=UD0RX$h-Y#}|gXt02<xR<oIxHMfPITXQSA<z<SGb@v-NO{)?_P^iEkd#PU& Mo?_Mu6DTa5%5eJmhXVy=P^)>22SMvSf1K>drF0HoEDpDBbU?EB{>T@J*ZW%^c0u2Gvx$X+&kERwn3C d@pL-w~e@RGOcWj@*q^LyC7ra(}G#OZ_Xr&mRApaE7i8>#D9C)iM>#EP=2Ehypi>X@zsJwKjIywvZ7P GDa2DH+Qh^gWh`$Rjt}2<o$jWV^;R~fu*Vi`2@C)A`Sx@9(=Ts-`nCM<+xz!7@Bay5+DtsYzGCnpt*M 3|)N#SyNdtEOn~dVk)zwukHmsDUY~V$yH>I&%uGe4YPR%RSA+A{ti|1_lJzHzt(3?&`4i(Gk2Y#fH=$ onpu3s=zIA>hdg9P}UM^e&?{Q~n*z@A`diCdXD+hDTb9g~WoCA5C-P2KYcQMSjn(_bL@Wy|d@?-gcF) TPmVSBbKQlvGxC$5SU@A94czrx&=It)RFH{8oI?Qe9TIV6$Q00t;vcHaYdTN4wMNJFINkU|pM??wgt^ ZP{9|Udc+=f`lPu=<)66?=UoR(9i@I4lAB41;g7PnM!sFh3azXgkmc!ZV6v4Rv|oxK<0CAna>d}g7E# =%clNFl0OT}p~OJp*fRO-Twu0fccf|NI|84~))*jF<JW2@s)y(qC1iGWAJWxmUPtM|u(^uq4Wv=DfBo ~{7Gr`!S>9ol-MbVeYa`i^Ljyjxu*JkHu(?G4(l@6?Q4|Fg#jyE#7@R3tmc0XanB57MRszEu6fWksyn `*Fk<FOA(OI@+zi>k;;9-X*_5yaQ+3nj~h613s5(dg*`*-$UD={cZK6}Acq-MvBnpq~E+D2B=Hb-V!Q OS)IbupGu5=yY-ovsLnnBF+2-0PW{a&J%*0{%?}BvgP<vUEtul6?Yk`s$ZPh|3-Ylv@-CmIEYA#X%r| !cv4ckn>glfvP?VKZX$-?@@%tgrL!`jo9+)$grK5>pu;TyGIG{IdhXFXvq@`k_q7;Jc-#Nkq(}QB>Qe zTvj>SN-f4XL`1sT0mZ^MP+%Bjbo(qaeM`=*v5uKg2ia*wBPtdeaE%;?TGC-o&{}7p^DOtjmMA%2obA ^MoM#7tI-)XQoz`|Nzj<gP`X4HG#DxfhrNN5H(^{PmOQ^2S#Y0W{3V>WE`o~gulmMer7rGTHKgE`SpR 265o8_AfrWfS)I`Ow{UH7brLllT_`DQ+dP|QmQ#|YO>8euxm=-tx2%iI#t7;$}RF?GMkDr}bx5FY)A{ ZMfu4BPj{QYHJU@}mC{zGQHYM#!@kxKwGiq<+BZv*ED+5#ChXbp*E#Spq@^e2IW%M6Bgf=_R~gx(y0O Rsu=t1$zyl^GbBvY6Id>9RI-mz<L0Ts_HxTxD$#taf_tE(mBW)qz{sViC#ri!ywv8zHXqMI_O)qkz2w T*oKfOulu16v7H{E?YtHMf2(n_<a0k6F(6<J@~$m-348;17@(Ka+jkD!5FO^lWMNShamo+1Ic5`Nqv( TgC^v*2e~how8tXXX&lyw9&l)fLSsI81x^X@}a7*bp>ov>H*9I4AEsXc!fT$OsJ6$rCc;wWIed>DQD; fMv3K+fgHSh5w!wAPR|9`;>W7R;Q9KHsm1a$xUJhc?7Dj5w~0iC($_S{7L#PPX1iQoO%iusF^<eT7z# vrB|3B#lAfa)^cTkJ&~eb_q@rm&;13%?XI@h!$-IidoGsEUo~08B+#2|L!B8I5U<2LvcV`6(_n)Kpp) SQ3-GYLzx-aQ6osXNW66?cv-5hCC?!I5_K=##Unmq>eiaxB*}7h0;tyih6pgq-kD(+X=sVhhm$)!)IQ H!)mkv0)?Uj-dw7E&+SJ;PW$gHTCdn!=~5ge@jU)CB9&(GxQcWbcjjIo{w9iG$q5Al6)wks%}^OqMQW nLL8xEGgCr8War1$%4b~Gj8CS<)@z8v}Egc)hG)F2RhyC8sJ%Tn16Tl2B-OST4Nvj6N6qqCSJ>ZBSb{ (m)9j~Q3A$aaIl3ej5s@`plP2!0hR+(s$6EIlA4sbN^oH??G>@a<c49x%XCi-*5DK<dGe@&V{3rDo<n %!li>hD*7d0o6IUS|uIkww{kO5sjG2JmlOT(~XaK*O)g(v@{tW}|}V3tiybXc5rHqh+W~<sgtIwvcfn Oi*boH8@Q2zQHnDA1RmATYRk#VK%>la<`tu@Uymuw!%)L?)NA(wm@Zj7#_#K6T;C6G2Rn(SfKmuE<uI UZac+=x61ULH)!DFzM(=Jv9sww<O6~;a4_v-`No4HPPY<Nv{<E31>+dWzPcMM@q8IsojJqIuQcd6Mq? |Z_V+tpv#*`tMyuy6T*5e`K2nH|0qzpdEU`0eecT{A+Zpx%WOE#}0ky`$r4<)B!iy$-8lEs|eOy-I0J n#uhj%ikYO&(Vz*`|eoYMeM7|g<OaKOCwL`!600o?mT++cBsXXCX;|w37O>WYVhG-4J^cBbHqK(jmZ qZD*`fyUK6GAb>`aT{orx$=hYW~O3pAL9>W;%`j$+4F*aWQ<C{463Anvb#K5bO9dflf(lI%3Eg4|FYb J=OQ?H}0lXcgX_CP1t<&-gd{7c1Ab9d9-@Wp1b;;xHbMC>FW#P{IYnT#C=)?elBJN5Xy3?j5|BIz@GQ Rpe70r0Lq`b=YarE1}^?gTsE9CUiulPd0Or9u{%t+c`RT0Th)n0(TxWT&bxcJ&K;~*@O!*K#2fWHsL7 $Bf-w^W>?WE#wXBgryJ>TbXAO+2k+dAyBZsPV>@?;hlYFLNKO&c>L-vg7-p?S=Lt|K~s_Ef?{Q^qja0 @v}BOM(YP1K!ZH<6lrz&RyEJq~KWX6`{xCf#NV_ED#N4R83tCPl+s`;hw~3Jfj1CgXHbC=52P28I~v3 B&_D3O8cWJwi+}KOt3sf1uam){Q2d!NbvL0m1}DYPegi=pKe5ev%iMx&Z7*3Kq_C6r}47a7tN;WW(<U 19%USUxqW0<9=~=YR8`aNM?d}uz2IyH($#}+9R473Mq+?)d}ZDnkoj~>Ik|L;1u?>ku@AVYD%9!5TOz *jA6*fj(XlI_CT8t0y2r$Kf04!i5xlDOFV7IkxUu6mksZHK=XAHHwnN-M$<_Fq-(jMV<eO_KhDQ|jlK TIJat$!H14;Faq?%A^S=WOb8#_t0%=|(h%&$W9Z*XH1QY-O00;mMXE#!8b9sL>2><|D8UO$!0001RX> c!JX>N37a&BR4FLPyVW?yf0bYx+4Wn^DtXk}w-E^v8`SZ#0HI1>JzU%_(`L|!<;p;+7j+4bRiX>wa^+ AW&&4!ylXOG{MDMkaM46~|cgzuz;YD2bA@yZ&HX6lXZE&&;rF^p0g&+1j=dS;pk9){SL+V|3M8k@@G7 lWx7>R#>?c;d#r=wvwCh_{C@y{#W|`UaI@>s7+dPyA6-#U`|d-I=q&3nmr0t=mtCT2ToK$jz`fLsTJd f_3yH7aZYaJQy>(|kU|@&cykz^B$XA7;#DeDA)eA)SCz=EZUW(rR1cS7@p(EgjmS!R?1|s|)oZtSjCi LDQJK^T;tw6Nx)G%b<hNn@Jyt~{R4&XhF0GYdQp!rej8^P=uN7Z-E|kseuFmN7isf68KV)S2Oz)LwR; &?qg<a3{-AR*A%veYe-V2LA#x`=(l8}ByDq}g!RUC24gz?O~WBQ}!@^to4kBHuWdjBcA{Nd{I$Lzz$c kkZ3`zNBaJhFUo!te><SKFF5Mz}S1Qq1+0I;_}hncEe+6Hoa5s7RM#dn}j|cCVWUIMTTI4E~q(tzS7g Ik~;Mx%L9Resy=1UBA6!YqmK3bbh)!KP~P~f4De(dvSXEp9S_(vLKAsA!|~Y=EkihS*G|7sky|qLX<2 ctHEYgkcZvN<Ut&kUfma@m$+bwlmBOU%PaJG$<F`A@aT47f3`VTVQ^xUDUOrdLVWSIOYqce`OBBzCOz RY-HN9|-V0+BPtXWJh;nq0G_SZZ6wu`*Mc^&To9N9K#CIpD(*+ilHp>zuM2TSK2v-WWZcC&PWOq8e(@ OMji7s`<fULiM9k!Dzz4q|z=Og=_@hC4q=va<UylW23YWRW|%x(n}PY8Po7Dw4{MAY>X4+1}bOb3DK7 cEs1?Wa%AYQ+{r?=p9>I_hu7zjsym#80+4T+9yHOGu(?p^_saE(vD)r8)7;-~{(6St;qMVj09!E^5n? H$Po9jfQ6b;#DiU|38X@`?s8*^nzVI)s@Vptq#nzHBb^+1qXPBh-|ZBSjYw23sz`#X4#%A3$GpFCFm5 UTT31ze>zh$5|>GUuX^N_EYcZejS%)>@%Orc(HeW`BNxVZCOj6YQL53WOAUZ^N_a1yPI^9uKZ-8;YXD LJQRG6~G!Dv9ZJ$YpRbP(N@MoSOFW8&X8;L1R1^ZDj&Rj$y#JwdX&htjxXxOJAsR)F|kxs-%VkY*TS9 F|8F8k@E9e)svkOm&$mLx(wa^675yJCBo9yhIBNk|}23~4Zl;pOj1^iJ=C2xqW`hrc40gu;T3EZ7D}u *FkrsCI&+s@T0AvEy3-l;EnEYKWqSm}`2b5@^fuGH(O~9);UbWB-_fgEBqvMJmJNDzDl?IGqrv%xEU< nPGw(2W(bAw*6M-TPka8-)QSLPuS3zaaJtAZE?W@{H)@afP9;I*t&?~7b-L*{YmCEaXDc!&H}KBlA_= Fb+Ca&aSKpXw7c4PECM{BAZHNLtnZqZo&_2J4o8@EvRDCF7Z;1MF	{I;dxHvW(-bO!tjMiHoZ#2{% 4thRHA3Z9uV*nGPV%O)YX+%DnTjZ|3#{U5b5ajh%4OFp(1gZpHpbYDo>bv;mny>I({S?Nch9WQgkrlQ N}{TOCXC0n|G{|LN8t_f(gEpc`PKEMfWh43DI)ec5v}>KQkO3=x>r5BJmlC6xP()|Gp+SS%cv7^o;5N `Z>lv7Q}eE7*B^-%;B7%q<+8Kz+2YQ1;*wqpj~7jwIQkw4i4vuF9o@D+#RRxi@mez3aET?jI?y@B?5l EpiE>6slxs2d@Rj5uOIQJ=&v(K%h>$Xs5eB$fF*;91Po)j%!|Zy=%9yfTRnyUdKIjLd2m_#Ey)d8Pdn 6X418+D{6_UkWLLh^suYGYffF=HgR<c4q@;&01yT(T&UuSnq}{W8@ZF#*}H7S|5}VR2c}COhlX6DDg0 4e5!~V-Wv)>q7Z_wJY%Zj8wN#E9@qu3?GUZV=w&j&jkBo*lUrGq2fpZ^kuRdg#uK+aJ>o*?=0>Md_zW 8?)nAquV1x`14BN5mReIvKc<{P#?KKCTfC6Oy<d!~N%HX=t2%x80M>Rgb_nE9i|02#Hi5!QrCF=@#Ao ^#y=LprqJ18R+-96V-C2gbBq>3uT5#0&OXU{cyiCCC=QtpGqUK6<&Wv-_-@9#;@@soT(Xn^a-r;xO3} gVDh0sKm&>+7+Z((>LPy^H`qGtJ&6hG5d{n9O@;JA<suLE>o-FT%>ERRbkLUe$W2OzF{xF#n)f{?7rq *^2GI#<dLO5kNckwBM$`P*hk1GDlw=8Q}6A0qs9)4BtX(q^i7Mxjj#@c<I54^M*OK<IZ-NzjWa112Zp grrFzJQ`<iupRg?O@>WD)-Fq^&TLOz84d_x#KGNm(j>*G6#iIXSlzNfhtd8+r>fvX2mtQ~e!57v(=ro E@Zxhp|5*T5Ql!pKtxW5o4zdVjP&dUZ6n#aynr)_xDZiFX6G92V?0PbV|ss_Iajp0P@INw$td;8~Bwj $X%)N8A(}V?BAE`fL2O5tM;|7Fl?F^pd9Zlf^GPcu(WiX^Kx69!&}Qbnri3nq_m7#N5&z_a~7;Gvs)r K{Z7Y-XVCnFSK#&c$lEM^EW2W;fzM?FdqDY0yX9~qOWugWD7lrG?}h^FvN}@7s2nRhr$HUZB93c&wk^ d))UhB^_0)iX7mhSXG5GU$KV;2HJa|G2<ViX4zkBh@Oy*mzg@TQI#-(4wr*|}!A+r6<&Rued_z|mYW# l0DA&6kl~2?b>+UvzMH^~_`2CJs%osE#xB?r1$?@@2<C_PB*cpM_o*zaBr@qxLGzMIfmghvOT>=;ci! h;m^K5>hdl2y?^41dhF9WoZTk~B(*QCFGW#{hFb&*mmbDP9e%TavMHEBwv2{9Q5)#8(G-O$~-+oN%DI W^yrNoiDCjTXtIi<rlt=zkUQGh5wO&YDJ2Bo8S5D7iD;gu&TqKcleo^DuW%lm#QFi`8@SJ-rv|Y%~f_ `tIhkt8hJbF*Q#iHtp0nch2uLL7{v1mt+nuTtOO2axji|BgI5g9E=Pq^`tZ|PyP>3O9KQH0000801jt 2QYR^T({u~~04Od103HAU0B~t=FJEbHbY*gGVQepVXk}$=Ut)D>Y-D9}E^v9p8f$OcM)JFU#a2Nf5|w #%ko4{hs6gu2Iirak*hvmO!ywk;O5&L!87^r@Df-`UX7<5dl9J^siU@EbEq7+;{aTL4<BMv(60)v%T~ urVf45DVC27874=W)u$re?yW@ovqd6r#@&rMp1wa9B3jmG2gXq2wYqN-U|ESCUeeikw+dA%|}D`CFLR a2*#`Smp|7ilI&BRZr^%P77Vc~VpWJ-_3KF~a?lX@EJ;i#(n4Ed46toUg^yU%D5SOpAOMKE1_YJj?F^ H2I`fr|i>K40p@860&Hjxv=!SPC<0(Ezk%c4osTYqRM#|i7#_e;#1i<@ZTuiQ(#_k@iCW8iO+?4GK6b gB%qKeOY=K}>@9rXv6WP4_HM;nlmgU`G)AO+AB>h_T8c|izC8T<{y5@HEctvhgi1XbLPZLXv_TorG*7 _jVp!b{vQFjP>=z)<O2kQ8P1%aeRg88vWvSH1r^=v3vK^fibyL<wk;#|{H>lVAPQ=c`c_w%s^J*z~;A (EmssO`rEIG^Kc6mE!E!HLSVE{kC@7Lgjb8y%l@~bzcBffXPz5gvf{@2Ozukq!_^YgRwH`^hbs`WQ?; <zqiSlbTZnTzKpKzHjOF+>+7{UKEMb9*R!g}Aa9Ao^&;;6u<pf3Nb*lpTXe`7NsX43MgCZ-Ia*yC4_j *_3@~N{lxajZeg!LooFG<rr7CZLh><{4>VXdU!Wjssn#Xb6#y;Wm)kclJ}KJAZpcu%`D;9*L~2NDZ2$ TyHOa>4ljjlvKqjMmuuv37;f8>o6!ipOH_bEyIHgp^;=pCVv4JA9F9h@ST2FNMFARxy_JaO#kvGX3aU wP%@4l*c<|3Sy7?hIXn%e8!vQQzrnvj;&H2UU$?>bJ6F@df#Dc~1BCk2f%c2fssI>YFRVt2H02ULngP )0QdIEXowE&T?(_COys#icd{KL?;zy`9SxRWeP?*!vHGl(N4^rMnje9hz$`_Mwv1z2_^MZ`{`Wdv!jI Cvf%n#1V-3LL!3iHN|J1B3+*DHF)HJjqqjKwP6B5oqAg)0U$Fd%#V(5IPt-do9yocJsUVmP{t*%4VE> !?rZ)$})<go-8jFXGV}9vOa-K@x*Qg1#OJKATzFNg2>1Sd=y;(bczK8Y*D8x3UUFNR)u`rW$Ome9IqJ %i&~3HWE<9kOAD^0f66l{+@nnVZV!S7tsvWF{3s)j$jZD2_?cYYr6q-s@8y&wjX<N|StWR~0k&-c6p< -^jwnrgSi)gy4Y@;9J!5GEMh8)ZX~pM7O+R%A>7x8lH5%hHc1mGyl}c6?AgrnS4$_-LG?L^H4kmc8Uh _O*MV@UmhM=WsM#P5E$dxWwQH^nkK^cgI;hKu%n1GHR;THggj5Yu)VGFxeDPyY;l~0uAU`6UEh)}0ce ~o=ur7*}gNWOwf>u5Zry2sR}`EI1p<qktB;&Q)u2trr44}v8{KGAg!)3uLh`*48HmQta#Wys_5`6wya DXbGJK%#PEP)w|-I-&unIamhOzk*HZ_(|{lr_0K-Pzr=@9Bh+)tPOF`$oOak)8`IEU5no_b0lv%XqPk i^1wGTu8{-9?G`??l%B{5Zu*O&_|s%SO4}lYp+!#^<_s#0{-h2~8Ft-PG$xgFlafw51DOf>Jxogy%3t vGG*^KSyEa)Hu`3@VlBbMI*{mt+uY~&qeSqKdRM(8?<-S0b^+Wf-5>tL8CI^yyC50rNA|sEVCq`70E) `)G%8ebn!xkc@#t_*sKQLWFG3_4n>G(<+LebO_dtIooZHrvBsmU|yRBDxJh)s?i^SV)Vp(DUkY^)*+2 XYor{Ten66W!;&2<%g!Grol&1<f{;n(zxtQnNx{D1pee2rP5zci6@6AaaWYXBov}d4ZDdJ~k3*kwe2X ?T{M!)rA}XwyVZr8u8NFEk}10UuvqU4L4<$*083nE*-3u5i;!MVYf)QK=*k_@qolpZZztXr`#K*Ok0q }Cqy<K+m(yi%}&p>EeJrZ*QrE(2S!)Hp0}tVBx#38OuviALgk1M<aCa=qeE(cRI$N#NX4V|cMv_5_6{ 476+^gHb)c3mA~$ZRAn6x87AqX-o`!;__8M&)53t6kju)V${ji7<9APIet$2&XDBsC|LEKds^wfh{$I 19)J!?_(gxA~*-vVs<yU5%@nV$>vz)htCtYI>2^B}Gxn#el<pGZO<z5n%1e0F|%5qg~fZiq04RY4em* ;ciDNb6NFHYg4>jYs2-H{bKDL8BlH<cq=h2x_9k@cQ8JCPL!NAoM`$YUAT@WTcr22(1sMCW4*0V;|94 E`gk}-p1Y;1`GiE{f}`3;#%{1=oF%bLmcQ$76ZVntz!83_+2Wg)a;%)wlx7rF<orpA}3>?YKue*?CQN AJ*Lbw_~!txeN&HcY4iYW_r|<|sZAB-53olOs|U>yMn>A`kP@~o+eP=Fkg@M(ox`2rO41pc)^_T0dPZ eJlZ!7U1S;%6U@s$t%&z_ZUG+z=JYPbH#s^lJK0P2?MQXPwN4qxj^XNZmiNra~Lp_7V96b2x1r@;|#5 4AF(ej6G1Y+E0UgtCXbunc<BHM#Ibaut>1_?8Z_x0fJdazr*y<%L7Q7wkD0gi(mfsy?@v*BTU7(E~Rj @vey)OA4brVgfgRTAHK?kU2aV0!-Svt^u`!O;x68E7~pdw=qty?F5>v*^41b)$r#`^G_;gpM3^oKP(k hKc<P3n;_NrdE@CyVn#AD)0==%k)v|uEp6vLr?%$`DK|Ew_vopwmsUsSY%LI&_I?Ixo#}X%u!_lHF8{ N<7CC6ty|3a2htrzL9`k33
VCiEViC7bqgBWR_is|J-_F0M|h3Xp^Ci{9+zfmb=i_l{xw;@$h{X@a KZ2)>T}>6aZAuwC;43hQ=THl(<M3hoZ729I3E%O32$d
xzaAF-EsFW=7<ACR@<1?a4Gw$uG!eKr=+ Zs)Y^-BAzJ>H%+c^(iRT*SUPOm7~l
C6?Dy;?k-3^8vwGOD3v|0PAOi|v1U#ZhoVc3yTt32m-OL@<~d c4{uKo=in(WNGUkmQiJeiG&^D)WYTtNIclrdBrdyBtgG66r4wy|8)&aboo{9IbWBaphBx5!v?j@ HkfuO6s9xo@9mQ|8>V>R7NaU!A?pDAr_Vgd6#l1b!T6@fxF@0#d;n(} w9*M273#kgb%WmH3jROJFewAK$Cku#Xt8uv@l(f%V833?D0@~f =IBtb(-L7vFl5fAWjyeD3GIfpBk)oasV*nVEw64;3)!rUdB4lmUV}Sl!q<P>5fEM*0ZI;@M^QS3;Fu5 eu_MU$$A*3sM10
A)_kO)>iR^>8Gx^DJB{&w1ZfreblOB-!nV2GA260$Ifjj#?0Ydommp{SEq^g|V*d$iy- JNgrz_Ei>er|s{#cvlVEV&fi>O~)V4{4Sduwa@JR79Feg?A*nM{j#|8N=?ub3=Qjp%6HB<w<~8m$?ck JuYeX<TL+U<GCD;dlB^5cwAx0kbC^4W^<NyY1An)E((khjz0IL2m&c~Dxak
<PtJ=ge(R)OG92ogGMr C9&opoaLjttW<D1p(L-NC#+{LWy$1>vH7tDZ21om|)ktshetk2AKhxkSj_fUyjC$5>;U|6=lVmaTBF of3Lf_U(6?j{yDVwOoY3z#N;0K0lm(tMDPD&BYbvUYX+c)amTWn<sBwMIYrD=)QqXc@SkOEhfGq_0f zO>@cWxY<o@Fx)S@2H%x2abC%7L%W3f)Ht?$>}DcQKcY(0c$_fyp~_OZmti8izRj^uzZWJE)xsjIme y{;KJ@6-kD83SpV01F(l;RaJc*&8Ff*aPg
T-di}wv>}r+Yv8I=mO{h!%yJ7lDmaArrl=j{pY(Eiiq +-}F}FUY*nTct>P%r8Yz2%{F?H(yN~)#!0S+yrgsJ%@$9=Pv{eB7~O}?Q$Mo&e?*!CAE)t|xj*MN=Jj 8>>O?!Yvwy_vNB;v*O9KQH0000801jt2QqFhkG-v<-0E7Sl0384T0B~t=FJEbHbY*gGVQepBY-ulFUu kY>bYEXCaCs$+F%APE3<P^#u_8qtlzhMk=3<?(5%
MyK1gY2Mw4@X-N&GE(a9)oL1JPjNEO~NWIWgAy ^~d_7(<0HY$wCO2KvO$|>iZ(gW|0EHu%7XCZET^+k1FFb_x{J_GAMy4PEIr5{jB0|XQR000O84rez~ C7Ak#^9KLlNkU2BLDyZaA|NaUukZ1WpZv|Y%gPMX)j@QbZ=vCZE$R5bZKvHE^v9BSZ#0HHW2>qU%{m xB%zAB_M=x9D7s(^+BHF6FbswvDKc$ykwuN968qopjxQ1^%UL=DZETUe<2
rx+?5iE<W)stBBf_inR QZ3Q5XN@rv);nkvQ{!WyZ{x6M#cO*s8vX%_1MUl-eE-q#>wr{ymgtw|Kg{1v&>AuOMoNWZ(6Q-z8oY #8A3o+^zJLCF{rNY*ZZq+CJ|pnaQbP&vnrm1<YAW@Z*adX}>Wwlrm(RW-}@u$XI^qCX&Lsc7!4OdjU@ec7xBHTHMDW|c~v5c_mWK&MzOvptiQ6 S1W#@8JMBQVDj~ArA7q0Cj9xvvnf=
0Mts{KM26@K}C62 )0BLITcqTs#aop1Y&KidjqgGlCq~o@ltbqvPRQju@|ibOKL+nzHA)=GEr*Mf4Huq!3EvQenE*sYc6Sy nbTb;AISE$5ue^zrJ5CAM)uG#VrNrlwccQ{DD&;QsbZl5njU+e_-Cp13@4tV$$v@ouar^1&+f_swt{@ 5_mNMErFu@yR5Pk$zooMvW>X8fZ_QKn@j8I7a=gpU2zecM}wl!06vV1*X4JY6L*d3o7
hcgRRibwSK7 -Dx6M_O%3#)Qz1Ml3y4v{mG~S<}On5L?hjiQ-;Y9o6w5!A8KJ;08})!^<p2xYU&dIWYXS2OF5; p9kA-jsU^TQLZRz;H3Ngs?W2U@&Og0DWWYU<&xkEqON_)~7Y%kzmUmn0<e8UuTYsim@Ojbx
2_2aO=0 r4=h{Qk4?yiFUMZBVQ^6BAg3^pHZ+yAIEju0jX2%^?S+(dPQu7K(;^>hlvW3)$${l~y3Dq@rxt9e ?UA@jx#6UCvTl^%f;DTj@Qlpeaz0hbyoafyKF|#3<!5*RHBU8ILx{L;Mk^q*e
-G7AIcfGrMkknw)$ !;E^!iUKr|2+wBQMDjWwD%Z|dXXo9Ji~-oV}!k7W1s=v!7-iALJ3IV!P<3q)#DljT5+m<%#*a-;l{{ r=@9Tk+6@DD=Ec)35Gk
4R?#;fj$a)IaZYl!5AoWXdE)f3zB(+XrX+?<@Ow={Z-H;-SQDKZn!RDR98 -Yb317wD~GGnTV9JuOyY$>c~m|*0mMc*
JU%%hpe!2SkHUItU)9o|us4U$(DeXB<TY=$Iee4krFj4$ E0lgR4UQ{a0He_nCjC_DYi24Y<z$32H6j9rQ<nJ}}-%$ZMVQ8%BGkGL^bC|QklWXm3?vsfqT0N$BGfSB1uB9wAakQoKTME4ta;DLfn!o9P2W&b)h$nVn=OQh^2wEvF7} bCj#pp6c0X54LR1|OV@VlZ&@jD!cuLRJAA7~8x@Be9EsSj3k50m-&w)TSB+@w}9ZLv!FM#COUcj1 Z4z+5ei$4Gv7=H?(}>tG6!eUnk?)F2=ozoniM3E1p%s^0;Hw4jQ|EI;MGbD<GjNethpzo$-$P QXb~mLpI6$jLlBokNf}bgqxkrcl7~c}vtJD!dL7U
xIpjKt|m;f=PCKb%
}?rzREN_X_dbNZq}kb5> U3YlP(Xy9%r-E<-OJgZjip5zgc17 zPP-+IL-axLN6DnGK5ewX1~RtLu(m!7g)D-H*A|WcVjF}aBYa@hE
O{QXFS5@}$WA7L6nMtV_hZ7X= !${^)?raFz&!HJu?REjoGIITK8Q)S3WIkTeznkR$mex?-&vGZ6y)G}Fw{|m9{bBvcyX}Yv$f3zMGuSf9kMTJ-6mdR<4rFJ0)dujn-^J9Nol>lqW}G#Aw^k|<!yQeiZg;( CWkY_d3k0?ZNJL>$8U09F8-6+dl{jRjGv xIHcz&vo(HxfN4T<nKbYjpAg<;9Q99fz!b2C_F_8|M!|>Ch@AJNu!8F+21fs#>>M{+5F34ftsusiJ f@-9!1Zy&qQA5%Xr+y0a=eUDGqwW=)8nMdZlOK)4>Nu+TS3GptUpM17onJLNBc1qCf^W1P=UdzThrH< T#sHXy%Xx<=#zDL}JellL$(;Gv^-6hXLZD6imlsQ4E8ttpvW1ACaNwieSfUh)l&o@4+LakZnB8Oi2m yq=#JuR(bp0v1j;$(hFHEqQ}G^gI&I&s2L}$(M+Nu&HN!h9vQ9I18H}f>B!t>cy-}XQ%FcY5iOoaL=|roYdRX%I32l4Aay3LXLh fNM}OM9|>jB_{b25x}eNsRCaJ1f^__@!8zexfDkTG7fu)KmG;uqtjmBH|5|uW~<4wW@4Q3(Du&E#!e VsHa)xV7$v9fyx~8chka)Hd3b%Un<6g!OxtAQE;Zvfvb&($t_DbTlcuGO8#Nth_+|}b4Yim{7sW4x<5 c&^BsIld3-yi~nmTtp3)9{_HVLN#1aj<-_OHp-!R8UkPi9_h42NvfMr->q{}L8v?R((O1|U@!%9{
n1 ml$+DMO=Ns=DXLRPVR1Z@A1r41g(+va7OJw&q?JVyk{*8Ni$@IHI)5Mx_8s?D_7XhTQ!iLIX<njet BK<h_b*A|IOMdh5gfI+OoEp(^vBy_7v0HOj>qE#OrQeNfXFE^31D00tr)ldJFphcYCNq2rrUy5jNK_= O@vRPt&xHLQlb-rEx+inG2dj}12P<_Y4uRSXH$ePzlre=%Ai@ub#Gi?J7l!er
(g8L#J;T?=A3df%%4 +|{3H$KjOHdgDnSN>vz5^^sphnk!d_Jm|>Uoh#^!mBOp>Lcd;Bg@Fe* sWS0|XQR000O84rez~V?zs_&kFzmc_aV;ApigXaA|NaUukZ1WpZv|Y%gPMX)j
7b7fy+Z*6U1Ze%WSd CgjFkJY;##olbi3tA#KM?sJ!15zM9g!6@3hEeB6Pps@AXzH-LfE96?vgV5HPvTQk65l)M;G gBCx+lEK@ScL6(HMOp{)(q>Iz_S|;n(PdBWD$qiEeFti#XTci#U6Yt@9jgPO;TF&kGHkPm8?e7EYG;oqWZ1fQwEJzsoJ{VdS6ZDiicv!!_TFTnau p)Q6y2Sd@Y}xqVo?Ibpj|URKjCFjHM$9w-Gde*7^h?)HTKmpmr{va<{Ow;k6xoE1#yxDGp|T>adWue
kcw&CGBB32~ugCDYy}!S^ADPGb{q6hd-NU=!>S6lkC b*g22esLU*^jfkpJw%;_tX2u!>c#9v-iR5ZV|k
dzjsfdc!Uy#8W7&?V94RcvM=)vMhhxDwQfbGEJa- 4F6(rZFnZU8+9ALWu}lb8{sgWm@QLdMaJRJEyxL>}|&)EKcHYd;d15}e>in}2ZonE$*u|N#wVp|2 zMueY(jOUvm-6h?gvTMuOcMGpndK9J@(9
X#!gwanHG7G1uk<=^4m%sI%aE;2boIOBbHFe#PUDF=yZ BDwvYvptUfr%N6OG>p*z&f;qdOE;jzTIyWwpW(RAYTJAJVg4bw{{Hs*$Kd{9Hk;1AJH7Hzs=VN_NF Lp4RU~leIw+DzsNgUUTv>InzBDml_&Y3doZj=e5c)9R)bdrbAF(&s*ofI|<nf3tiYykr!;&vCpN)F@E HH!EMDV6+zu0HuzO)?U+D*D48@t0^F9;C2K-UTTI4DzP@Tu3M7yxQaD%^yh-<UBk2ok;pAY*aQV7N;$ uLG5a)<A
ZPr+@LCW5guvW20P{hp2HDX7=(LWbZpP=+w6A%rYsAYmjjd@Su|i#tiOhq(;{9W_Mj2 Mw}5=?jYUUNek8QR+Y+$IOH15i|c0-ys|S!{}BK>LSBd9gr}RGW08<!-$LYw&pog@36==%2U9$c EWzWFg~5>VP;e(=k$?3Z5${>nhE=Mu^r+HDP6t5yz~vGiHw_S!3X6a^bl1h(d2y)jRViezHSShP6<qz {#JYt6QTAWFj^Xc0Q|gUUS~D1Pl7j7%&@5R6A(&56>Rm@A)}(
8+obd)sjtFJ13|r#bsB#pPE*n3#G UijS7DZ)XXr?!55l0NBWo0F2dCKyQ)a7rsMpKhjOEG8$f^ysBd@E55m1@M4|yhYgQ?zd*xUzN2lAr^ 4+lKHW%M2K_i8p8HKh*g8+irA^Nj$Eqk{0*ZK9&UxD#_|R{SmhEXpVf3}dem05!^zucc~+NnOKgV%X( mpCY#*&Z*V*?txHy!vk8>hfOMXAi^;QWWcrqj}81CqqfNm0HrkPVk&TnKqdPw&bAO7^QSJ?JufI?@Q< U6j?;{33L=go?*eVPCoL$;S(Jjve39p%5Gxg
xEaO#PC;kvEu4pxQiAP72NS!Pq1w@eL>YXtMn8&;Gs eLLt&0{(evk&M3DhN0al<vBNO|ST5zr+K49h{yJ1DtLBjQk?3X#I7S4|-pVOZQ6Vc*#U-l7EX}7|) Y2_96Sns|$TL9|kcd+3DQQLua^FfZ#rdPD+a$S0zT#AJaehHV#gN2kUC<FOWi0apXesnoDrtmuO%bEQ LB%bX$?sCGZUTVSWh2veGT&Ii#MhlAykV27tz=-7u!_0)l>{=zE%vTO(3=81<u0jbUhs!@a>jlVY+Go Ydr)|#K|%|zO949z6QU)ev#N1SF{*YH26(9PvPZu{+1
6+fSaOpDHsn!p|xDbf)dSem0Ob_VJvvU5dB SFEunrBhB}Ij8K-DemHpdPb&Nm5DJ2KFDMj&~I&<pc1Xr<X=d!d^7eHYf=yT2%0x!FRMjiy8H>usP~ x~oY0DqEj5%@0Ed(HqasIVgPp7)pmYS+}w2NRdZjz$vNJ$;#9IyDVT-^WvY=j6#z<LARGW66&hO;X jpb|Z(F^?!ikeyjtMrdM$li1{2((Hk0K6|V!JerMC0+tY{VcNmE+0q5<5(G)pT$#VluvVuAjhzaOS SJ7giUIwd20C7_noC1AUfn>5uKVDvZVvRX>g9MY$bzTi^QN?x6Q>%JlXIqSjKBVnS??7zV?B RtQ%=Yy5Z$B;E=KIzA>F66l*(C6pKPCRu+TBsaYe_SgWzUrZ;=(YbN7z 0qEAKR;)VY;@Fk8}q^N8anK_gY2+oZpcHw
E>}5ajq@Zr@;%h8n{bO!#DW4;eBP<c2OM+6zp<)X@B(wORf<CzLyUBA+vItsFVDE1eNVG?#uLCBij$+$EO)phjS&6;aZHa}x%fpIHlyFUF<RJ_Toz{> &RvhKlvlDjbSOAAX^e+=B9y?4Q*LF+&W8{6#(q>0Bb1K16q;2CSU;<>VM2i;7m0;Eqj9$>06 K?q0XLGZ4pxavUNU(icRBi*t)Fhr@1t3mR;D17AMM8RbFA-6fe~0X^ZjX(*!`+8hPLHrZ7&A1+n^4Cz Vr%@5V4w6U-unMjcDx+1Z~n~eD6RL>|K_*+^-g2}Qo^8)Kz{Ku-~29jk-!c6GaUz; ?JEOY;8xoOmKY)%Qb;M;$x*XKzLK{`fo(%m)sMaD)CRvd;!|9;J$H9C$4`z44bT)rj3_j68@x `E%m3Tt$paX7hET89h`>*M{#k=6u^!DNM}*M8+CAIxqzg?AKcXCHHvXQiV!rnKqfW9TA03k&2VYmnm>Yx)?ej_KN!U==Q7};+DM t(;la%{PJ6*{4MVNa86@pgVQy+2>vzMY@rnUw%bOW7k=lEQ0rO84^6wx{B>r0Q#9Wjs#Ou{mdck+$^; `Jy9S5X^;`{O#q-m(95*+6<_r7*i39(d`VVlDlwO2~MwEbs!RxEfvboKU^H2{GUUG{&)<-jZ21;hR9k wLau|uO5b&vua62J3aSqV5q8EG)qR-A&{c^f+_Q?gJt=e^G)x6I&CXK55rUvz&<&A0UQp+8)XAK_U9o RM-3ga2vzpgf4dU{0OltGe5PS0M@)6y8G)diEjG3=y>}${N7n0_N;3@3%QC0mkavem&VHZ^-mc`l|+` 4zGj9O^Al&0olFe2`ztDY=WQNKv8>3iy(Z+i#c@oU)5cd17&bnBn)ceca-3qy47y8br$i?pOFYQ+7iY My#U-0tVD_SAhdI*62S3<)c!Tnm%YO3+b*Dr4F5o7W>cN7JTStdNYHP*xkEHFO{cYrjEl{^SGOCe<(5 TxOzVODlI&?T!90fVpC!Cd|q_YKR(FKz~2H?!39Zdid_R4XXb1!?%BR0&{ssBEHzlKZ^Y_KQ}yZ46T^{hSCSRFB91KtB~g}o(@6aWAK2ml UeH&Vuv$TOB6007Ew0018V003}la4%nJZggdGZeeUMV{BZL)G4yoR$XGNBqdv0S``)~hazGSzyhFTuFwDd`Y}%cd{{}Yw$4?SNMNR?r@N=8yQg~;1 i_$QC6!!=qHNM4uSJqC#C=t4%6c%kSxHe=X+BTOOp2APq)2Pg6k;KlX)aBlBA?5#m~9&I$Gm9%DAK%c lDtWiMv7)7*Ms}4m?c@Zjl_HCR>`C;axs%>eh=@H#sGRuo0UlB_~j%_%2MWwP|TAY{#Vsj0MtefX0my dG8bi1)v}I6nU?CaxR<%ClFYzs9@9DCoHw${ar`k&uU-|KY>|h}piFASo&iVVrU0bG9D1g8Bl8BDXPJ W>d|4J*Ry+dMK!}B`)B8Lc1VF{XGlA6N*Ep|vv0eiRH5kIJd)sz^ u3Bb_y6(>Aacn*hzNs=OnA;V6d!;wTNSG9mgVFmqpcxWL6j1rjap!9}Lv-g>Y50_){o+hGyzd-@x ei|{|Zy^^zHZ@aVZ4^I%6ckldCi4%;J>X0@8YDnEiaebsS^7^I=gC^ST{Y*Ud6q_HRoqvyuHzZtsk?u FdKKUN_453>ub2Edmx}qS`5AB(MCiP#imIYNw$%-Z S9YDnu8WNgLR$EGEiEtVU=mAOtP`K*?_7W*v>s-M8jBt$d~E8i@;zo0QD%UB&}u4>o=AtFT+wHSg5tI uJ1=Yt7nL$oQk186TN6)A&$i4JMpf_CACM5gTJqE5YTA~B&k81D~%^M^qEJE7==;9b33i>YaUvt22%v %4zINM9F!8b<1w6eofa^mDQPnvAD4FI;R_AKi3mS^<`z@&>2s(gedtofX{_}_v;_4#3`H3I0(x@@FQd B5(q=dsadU5;1cVu}PCghu(8e~TpJUab%>fjMTOjxtCFO41!(d{CtH(T!NYKo=r4h9d#q1Y3Z>RwcF2 rOaVDH(iVLxbS*IB^0y#Ix$#X{PtLbdmV;)C4Q&NQiiZWn?QJr@&q%0Nd49V3YJ?v}^9V=4kOv@pTWq #9@}?zG7G(4%CrP!v{N94ekvObxfO;>vs_=O1Dcpe&1Ln>1U*Y$YfV^;or0Ur$i@+sxvnZrATEKe+3x me*;G>s>sqq{O{rDN0#QYCx}y$}Man&OQ(3kbpO8rA&cX$y&dh(k|~U6Ju)>VpA^Aj&S>VbKu@i2YNe 3bii&B^`-=g28jRyC7Z0lCM|;3{(4H6{s3s6;j}HE{MRQM49^W20a_mUKg>tAlcBFxJchowCQLKMU4W 1@O*Qm}8Vgv;#4>7*L*VeY0kc}Q3dSN}uDegPROm-{dag;n9j+5tz>M>l!Hyiv^>%3{+S*6k4I{985; WQ3S(+zRD(m6Mw9z(Fgdc|HG5!l#pisY}=xksK7E3K%i;YC)q9Rl;CKH;rGUr6-!+H+ynF_iAK2cOqk D?H_0Wg6w`5?2Cuf_(%$Xiip$;DvhkojmAq*+b8*|RyhYc-+C*I7Y-M(Yo8Lk+QzupzF~oc2{1dQ&&J S7u3r7kRb?ggi@c2uKb`WAQ1R0zIeUXBN_$CbN*}CrR +qWF0GV1At*?@RmvWhZAo|*l$b^B& -L?0S;0@s*6oEm(;#W!JRY?DL$FhrJSeBbgq^eIA=Aku`P)i08>EjHy|`%u$i3|ZF2DaaI6xLgl!qS*vTv!t*==Uq=KWskxmunqqo^;1Fa~f*Sxo$>nSSUfyV$1wN?Bghg?pMG<6OL&MJ?ZDS-o s10Aj+JIzAi)S*)iwR6mv0_F$o`QhVFk#6!A#pQpTCg;+2pD&;oMn(=2q2vykR>fB(;PRfQ53iuP4UN D`R4sT#<`NK9GgX2O}!xxF^=jZOFjhI?AmAcRLkE8nv?9LaFVEqO7?U?tG7+l1Ik?F$@<oT7YqumCi;wIxg(CRPm@mK_*fY<8o64+J{Cx*dO>VJPM@Eg 6mirv@Ph-Po
ZfBlmf1~N12n&m+qA-09Co3=rK$5U!I9AqN-JFEZ106_n9^uE6@Oo7|(nqi=1|!Qv?H1ogQKXIP J8;MA0)$^KVhkAU!wS@tZW}l_1s;IFLoNWz0d|+B+DOxdj9)fU9IWjc4X!phMg3B8v@~>q(7~9-{feC 6{2{H1oT6|KVB6u$csoJScNS_eCm(N9k;+txXmku^D*2C13h2W?%_hlU#C_y>CJ=GjY(a&AR!D)IiLj l)^hz-NM(#kQ7(G#gOl&)5y?IVg91$>B*%w+AEVaY^)b_%6M^FOxrCCw$m5y+t5LazIoc(7S-FdOen- -=oTuFYDK1kp@7y!klDK|}ILKDF0#UgFsJqLX;iaaBO9Qa@2KJ-d7DYy?&c*OMb0?eiiRR7-j;XX*sy s7EFPh~}L4Spd8E(L+XSUt}*I7UR3!LT3kpABQMZJRO9vz^F0ibaozRF@yq<~St-B1?w&9xVUCSW-(5 NB7CGqGQzw3lVMJPY@#O%Y
gYVmL1<U{_h>3p(H^#9vOYFoHQ2=T}$nuNc(X)y2)l+362pp59|r+l50 uUOkG!<28{R+&&<ry6FU(dSrBAs24aU&jCzbIobQlDgCf(=dhJi-9ga5VA>9vZ=E)BKvur!5VD9<m <WM8j$@xVAv%+fe+;cKaU{{Bhj=0JEShHBuc&4=w^aV5oPP9p93=@!K_j#{=)+{0W>S9xvxZ+f8= w8YmQ4bi(1|ixEOFfjyxcG00g@pRTB-6$7zz^rg#GC#eU;Q%KNvY*T5byo9hqc)KdpXlhOCKCUYNtx hB(LIN<iWB$vnxeAKj{-^cA?@&34N%e8sJ0u6R)3)L|6G_I1)MDU3EkPhwtTeKdgcyjo-_^&&9AHkCc d{|V+%>(RVj5QsYiE7o_+udh8o3x|ozIG?
WAZUwZLB;tY;WESqeS8Oy(=}J#)#S9d%ZjG>ruIxUNi ~SC&~=tn5a|Z9>?#*e{Lf6>%%p@@g3S&|5}fE$1Fx{ANs-WmY6@%Di+*6JDc73XH9b
3K2ULNvRRh2c Pqe?zzy5vp4)>k)m%!_2$c9)#6s_Ps@5d1SncjXS9Icy$KzQglf{<dTg^C@PHE@Fto8JCXk1Y^R
FByITG>tdSon{&>V6GyIW+cP@M;?XByb%t+W7zTC_Q5r%KoL}>_lb(s!)3&D_4CQj+RRsDF-%7kw 1Q8MqqM}|vkc3c<M7uMl)KbJTm#7vg(LtOYsAFv6Uxs&I2YQV%e5c=UGd;XLP36NO5*5W}AGG$>Y}2 JWIi&iH}5@8u#FCf$W-sW-A7PkDb)@^$&tU3j~ev5ttzuJOYDSp!jjaq}Y4H!DC!}u9_*U^Z{w|K~g} H-aC*
5nrDFC^(XN9KGl$Jl<5<e(jU8+M(7HXw6^CZJF{nhj<2Jo7q2I{m>#F9=%63#pJMqOSA72x8 {6DrB4{pS6oijx>l1I>GNqEY10>jv{sl-lNe5;7brSr&B)+cHNzvoy)o;o{}rTF^AD^&h3M3@moM@=BZ_u$1Ql$u3ib(nlO-uRAs!U9N7l(&ei46^vTUj(HiUhux+E<KkX$x)^q@CV-KU!@ANT6AKE=npJ ;y<ixi#6gilsED<dedhWSPAS;Cd%4O0g6@iAY>Ci%s^CqI0#OkVYr!=yi599T{*aR|nl#YSuOW?87fM {=y5=$v!p2kisEZQGB4Yv?$8sLmIYEX_aEOhF8vg5v*@y%#m1mfwEv}6rnvFV7C9p$OgVkFL&R2HI (rASyoRJ;M=($2-IS!bk2$0!FX4UX(+rdf|DCDnWdJ}hX84H$eNE_A#hh8Q7_?*B=voDNms(c>x^Vv0;=a^Z+f}+lW=o }rkc)4&zAH@Qsw8kxssPvZiGl%3OM#gnn4l#TfjdSWbmSsnxd^&45WIbVee>@0$MfJA4fA7Cec&ua9 0)mqzo#lMFRkcsj8Pd25%@ alz#)uS84yCy4O>p1KPNmfl
jNww3=cpIxq-l<Ts&gFjLyY(J_D_CVO=N{Gey5=+J#pZq
(xyYvMF9z!mW}AiP3%3?iHPSyuG=(yl#xIjws7@|yGVvamYK %NgcZuP+qS_5usf^Z+_!r4Qdw67N$antL#ZFe2ydKBUc8o!GmPp*5gE8M8XR=n_u_XE7@ME2vj_Az%d 7A)h<Y??XRz@T;=y49(nue<Pwv*d|feKb>Hb38n#c%>wn}*OLl0<MSSUJ~Z@7jM@Ux(*x7#1$ZtIkc; w?IMvoq6@i%q3k(hxCAAMmOnjr26<n>I6H=0B1cW1h4achlT@K7ebr1JqI=-V*xm^iz?SnqO_d3aOCU 1lQVKR<7c}!+C{?^BS*rZn3Ln?jmLFJ&RtQTaCK5zug0o%hq4>V$Cb2@?hc>?=O
#bM9oeTgy43Q3b 7$LViSWVhoe?Z8n{0L^G8Qg)z=e;8Lq+f+H8g<$pwvWBQc8GxOp~(USuJr)M&2(O-$!}2?N@}w|Fc> 67t=17%=GVh<hqBnfqTU32I8rmE1rgQ=_T#~h!q$RTn39F(EY?)~X~BwDBWmf8eC@CJ|kMJuU=Gc6; X?bAw8>yfVZf&ep@QyG58WkC@P+-OdEiPF0ic(r(0L6Jgvy+QuQ^5Z<)z?7
oQwZzfAQGV8QS0aX|I NG8vHbi97v1LU|;yvT<l1YDwjebT0bkWy<zgn<lp=7%LOg2M&+5ZK)NCV?lOwj3Wbl{s4^Wu{ixP+B ^U2!sN!NydUM&fzxoto4QG6^44t{A%rLAqArGJ$l5oPM$O}K}?Ip=^V>3YN2wN0!mH_uyq^WLY_<Z reg|tTT?NBgVP6>gO9xywiL;JI#^eFqB#WMPPh(IiK_LWT7@m Rb{+EJw%UHbcW?D3@9(f4oX$4e_x9LeNvk$zXJ$!B|5=;sUhT7mL3RPra3yvs9s=(T(iqD<3JIfia6l1~Cp9C
yxlXAE+8T$AR|}> R48Q%gA}Ud&|rqs2i^gSb&27#HasNgI@yXP<<tRrLZ}6+BoJTC=HDkgv6lLSMSwh5mmi-%h&OZzJK }lKxF(T;(PH>&kcw!96l=<hKp(czGt-(Q(R-g&JZPG*i^N^OHHbhHj^zc91$KxF!Sl(5awm=N}B}&Yh ^e-@4Zk=*Gv{%n#mUL<_}6rGwkNQzqxP8v1vUcx^NN+p%yF*px$#5LcU=g68!W+<IWaPqp;cw=ae5Ku }PtLrv4n(#}Lo#Ed0H=TX}n)hIaX44vvA0i{O}m~}$=O|
@{?nZI}VX9KdH+kAj8p<6ZmP1tVotU^U2vQu1nH%
t6k?@*^2QsLGu|4gxT6Y#ooDnp>%-JLca>Gv6r!sqOiv4WC{hwSMG;KVCD*njm+Kr1GA 6@3%E3dqui4h;^2Y{9^QPHkruHx;Mis|hz4D!_4?FN-nPJjGa=G)CEg#rAje=<guphFP$7Cn#22^RO@ }V-0me(k6bXSEnijH5ZY~E$To6pOt}{Xj<D)a>5}X@F^ZrN;OE7N-_YH3LlcdtJ)5FiR%v6AGhbKtPn g-jSRRRLuxY;--%b#4nW*0LfHJ)7|Ci@m6V1f4BDw92yJq(1NP)Zyll-h7mt!Us>tFz;Zh9XD>L+)z) ns3sRZu!g)MPW!?5H5_AmWRVm<R)Y5*OTMSS~m3c|+TW3{z?TzSCSHk6Vf$PmqAMC$@SA<jHAWgFw3z ;%t3uDpYUw8OZRGnv<zB?(LUURIiZx}z_lim9Ic-&%yfp9
SH_brXfQ4)|vi3#R@PZ;Yy4Q}ShW^A} b)u!o_DFdp;pkas#OG(<{T{T$8Rb={h|8o)i}0-Io2Jpf9Cq~A&AZ2=;4h$dUY!@^vu;+-O
+ppgs<+IK) {xF<
X-se-$e_M{%)cy{cbbK)QoIYmgih7o&eG
YxdzZrQ)Tk^Z;
ZX$#;?L{^-OqM7IocVVEx!m q_pMtGb8VVLGDtZyU7}Lh4AAExk>}Cg!$tmpNzZBJEo#sX5E;B+U$!bd0<FGI7N@
=#HXvYQ$92aUn Z<jYRpD2)9FRx9v43>m_sYoQjd^X^ORJ1Hdt#O-}>Lb15JRm3d<6sl)r58=NvzKK#)gaT85FhP=%vf Ak>i{?RP3r=MV2lcncL}V@HC_N?4j93KcMHF857glHBL8ZJVmBW6eY?k2}CdXyWk>yR<oG+x)gRy5b! cg{vNEMvCiHvadQp?@qH9Ki>d^a!>|?k&wdV2926jwMgjv_
xKZns4-tcuPK#Fa#Vc#rQb#r<M4^+ 3h%&kJ>Qn1!eNWPsuRZIOug+PU2j}#d+O0d%0yRSkQ2@mIMsw%GgEfAE_stF6!L4359+3
P^fvO%h& ?TRYVB)@48-@&l?C23bs2Aegq$59_r?xv<lpOY;x(|Ah?(+<E}QEqY6YQp4FubCM|_#$29UQVSSpIM tyzNzX>M-d8-S!8u=&}w%Kis6_jloKh!Xp}cf&yjwogvnJsP8y8SKfxtI6h#JhKs!Jw3Lqz}!$<hp 4m<@W?lA{jU*aLv;f!@^iYHxOYPtc?D!Xc3SmUYNz&7t3imAkDB!%*~=6IfzGzoe$-{N
EQK}G!x)2 SPYvR4>2+LI#T@Gol-p~a542fuLR{UWX{nEp2Fi#
>3qz&k|TPr&$!ucJp{+ag<W;V1EhXKC2XXg!P? S+ffgJX9dptFVXQHQffS@Um$mJ6VMA3@tpaiHW$qOpdtW@JDSnJa20RC-v&}YuXx=lo{$qDIACxRH )K>FgXDi+BIjG%c-FB73GaN;&OR$8NYjPW$y%6lquEbp?iHZ?nMM6a_Tc3gs@ancD~=tw@(gv@h1> M>9}M;-r}>#tl-5&w1kakPEmVNaFu(TAnHUtnOQ&s;SXqc)?%WBzBn5<19<x}u9>G;5)JTmMj-<LP_ 7h=e<ttBcYj)UYyFanNJeAOxyQ-y>4StwZGQ(#OQM#_PY^acPH_h|f4dSacht&w2K?VK;FlJMaF%qL dIkKb_ggN6zzW##o3hh7FJSWB0Lfljvb<5mvsl1VA0+-ffQZ4G1
^9(6!Olod$}W(koFfJ50v0b#@UZ }Rc=y|5vaRW0C~ZvZuCyCXk!m5QQ=B2i1}Lbrj(S{hSA(nD-3D6U9VoJO7ye$QzT?=W?@-Wmb=A49D ?G$EOX1(cJ<EvrMrS=VR}bK8RNv~_QwczOjAl|1Q_2YuM#f<A7Fe2vZF{WqM<c!JcyDjy7%-5bw6 f?{h<f3%zcaKVwXCkZQt=gK6dp&LHq|?x9W&HOsuLbwGa#EEsjMCSNxCk^uF{Flj=aB
xOiQj7KO98B V|QYV>CnTN_B($q-9$INlMI_qF!MZE%KNMJV)U%&kL;9p1V=pygCtnk6k=Tb^=AP1ykn#%m17VO36 })
Ij-EJM<AoulINcORs1v<v1EWdvF&A)^R2k1-l-O=A|aNEUGpM97nY(Wou}Jy-mG?aMxsNwTIkgZ;c)MN<UP9dJR7ZWXJ OJY(BlaX>0E3cAVaE(VE$02>>$Al_L0%fg$LlJ}Q0j6Zo1;<!)9Bl_$oN38g&fo=I+fS7vFV+H0i+lmc;f_uZ;IeDCdGD&mti!tgu%;-F1;nBEv%)%;K1-^SZ7QFraQJSjj%?n7 C-#=)RO|RJ&|gU(0kkwHir?rrOh{VoRwlN9q-{jJ#5GJ^snuItSQin0fxvn)
{PcOc|BidkdAT8;2M; Y!k)=OEY<&%(t+xR>?yOphmvZ#018HuRjiML|;mSLq{jx@O!DW^BNGEM(d)!L&k!4p<Sz@&I7bBq-zW wzpYz$Wt6INV@#TkO0qE5K58@2En#CEQrbEEwwQ}
CDKg)$=MXoBHJWrmmh-683W!+APigh6gDqY$j UU2I$@hNjFlPmM$o#QF{V(5P%_EJnv@BXYYjNJGDJf6Bh^a?CWUq(1D@w@K66<IG|I62}9A;N5lT$$ <%SBinkUv}uWPZm5Gpu9o3)W)Zl6D1o*J3;eICP&zr)a+M!G(6O%WHnoYVv1}x>(B)jb#@eKLv{I i=xZxE6c
z?61OG*+pUfww?af)k1Fw;IyeuMJL1&V<3byBcr9#2wT0JBleP3=sn?6Vc|(u!fa>NkOY
e=hgNS^z>6Z%u{yi&|9WtA3-R9$08=we|p-^9;1aneZ^89NEaj?Fo(r$Lr{YZlnJ4@pYo;oCgbeT|? -1R}KXV^N>FDT^ITg+Nk_cF%&!GGV3kvDwytjt7kcv6plI*^iF4B966?Fa6jfk|&p2?F=?fI7a+- AlRZP%b%<9|>AyG19)JmNjU2uS-CD4HZ$ZXBeP%b_jWyy3V~toVi)tE<#mj?PK;G5Y;i<d*efn%2K7 nY^TttWz&x?N~UdYn?3%Ssk9mhm7OznmU<)mIEUw!=_({_21?w
!&3kl-k-tLXeADMgrfWgDPTs}wJ Ex^EqDf%y3WRiBlLW&oaqIi^*$%jWf<_iG1jAPfc}TP_75CT}!JeTO?2vhPdpC+$#)iyBJfR^x_v=(_ 66*N+TWqhQlvuEd1q
s<QE)eO)txFIyRzkVTCVuQVFf3SQGDZA;Pr--<(H#dgq|@LE6btEy-?Q$5-_ bAMN6Hqf#7o_cr36L2=<FPZ)H?#iZhGSR~AazXDh_Ur}7vKO82+^d4+4(2T@6yO-0JAd<i>QR0qLRr- oNvoQDH!^0Qtd9?Dc+Uq6b@ul&Kr+SH+axcp0bLuHYa-SeE*wc1>l1i2
;T=&IY(?V6kKm+QyVIpAxj AxVrRPIym2e_n(1vNQJ>TO<jars&!aQ8L=iNR+>0|amC-T{A7HV?x#jwW6GjXugxvQ9~B)M>&(~w;fn B&;t?kd&M@$oRe$=1-qzb=2@vA)^tKxdjce)M-ofQ3qZnP}y_1WZ!IQOC-ysP*u$({R{4KvhVBp^4u 3MuhO-F4<%UOUoUR^?WQ8Lb+6yw<f^M_K(^k@&J<?
Ung1B{jx11<O_{f;mGJI>4j!{z(h}A{$hb?_ SIcB2zwXfOehyG;cat-SjLy-#!_V-)
nbp<yoQhup+bNMSw>d-{XRnW3vol_T651T}B}_$T6% L=&+1s6F1ESu_t~5ArAxEzJyu
6053ya&T>du(<6nle*y(s5_Tj=QK7M(YjzE!6U^nZ(~?#1=>KLJA y
W?iD|ZSV$|)3%U3LlG#ok)w-~L9|Ce<%aYKgnp0}8=x4F&C8G{%>pzO+{~4?=xU_NL-KWfdxy-vxc#6a70mo8lut}l(i2k=sw_AKQtKZRSeOd?cLC^LW+#
)z1P@2?%oP)->EAdy$62o6kTR&zh;G#6s|8| ^a9==x9-q%v!8vSuC%icynEoBcFwgW_9<Sy<$SZ3hB)Yb7O@iJ#_yb(m=C%oR)d(y87ZIhPT@n3Y ;1;4)=e6~{M|G6K1Ti6as@$cq3LSD=@Q!f3z=?sGg{St3y<g}s;{OX!O9KQH0000801jt2Qpb~1sCE GW0M7#e03-ka0B~t=FJEbHbY*gGVQepBY-ulJZ*6U1Ze(9$Z*FvDcyumsd4*HaYJ)Hoea}|}_D}
q!y XGAgVJqfRL158rIe8BwaXS0iLtAHzr;4SI%)5N$j!OObIy&KkvPK(6HB>Z7|CVskH0lRM0Ibgfa^&S P_yPh*YZZG;-%=W_zaJHBElb;mp94pggQJ<7KGpf{Cr0SS(+cWcoatzL2+%D4Iu42(fISJx176!mC-(8FOGGBsn#YW8}ukBjqLZP(4Vy3fw- 9%L*IIs-g6U!z)@x416glN#xElEir8I^KxHqrf=aQN^gxlUP;YBZLx8%hE9B#&zn5*?ulOx%q}f
v(; %WSAIVOcUajz_VlD){T1W9<3(_8v!4KzmeH1t@QTJ-
h5 r-A9^cwR?g=x+i}^htgm$oGNFOlgphhzFS=^SE}#WzRi6ad
epiSz+)F=t7gE{wwp0?>v)gra-eM{U@ vVal)(KFq)>9lQcy!Nb#LQ}#Oo$F68FQp5|jd6DKTI=>?-@G3H_EwL9s`Q*?)4sN~)O396I%T@~(fWDi_dZL|gBr>T(a0I8%UY{aj=|P;GiZtl%>j ?Q^q%KNDpL*8d2+K`e5&BMk*0amFTL`!L+wb0|Mj5fng&ko;B%*jE9b0x%X$n-9}F8B93`UPwJpPb0B 5typWp7jRhOTxF8`?Rzuw+n-~JA++c&n)Gl5@3eT{IVd{~OlF=eT67YorSoFwS|PvWbO!NOrnC@*9k)Ry!fFpcuH9i8l`5$io4`P4_0fIo7+6kmE0 9C#V!6RXbA*3`?bvQF3*Frf!*JDNJF!V5pH|3W+wtf+fwI=Fi*rPgocgM$Er4l5tv+x9f>DncL}W~$K{>^> =a@lDg56_6HBPf);`BiM_))Eh8s!;>rr79ESOl>A``p>6fC1oF6CC2wUQRwXw~pshI3}huiHUuc|mQt9%jhZ*8 Ddu6UYQC3;qg=2`Tz#k86`VhL`wLdtRyLChC!I1EFV;-lwQOdTk=H~3WpYR!IzjGBt5Q}Y6ZotG(%Nw Dm{CN8J)ek3Mna6D#e0@n?-NsUay#jQ28NCWYNry-q-Vjh4GJP#jyaF34*vHAr#AsS++vM;B~?#Y{fa rfdt{KJRy$83VWw5C-ZE=GY8yqxZkwPSvwq>#1e#tgl)W7mr`fPKVx;ZrIDeQRA!zE!d-7Ae}x3vk|p +KzeFo2E)rlvh*MukOD{<RbOYCrS3F&$32*#)N0WIgsol}UIU)|q-zCRb=|H(^?jg1Ti92SfBJ*+Q LO!73mHey8;9~Lu*w?qy4l1EYcc;Nd8q+l>RyfL-q#w&iqSfd5g$&+jHWevP>gU(LzQ=)1JPxN2Drf8 l*S{2jA&1LoR=4L5QPhU|ry*<)(L^=@%5J=eYNRfQ2;OeQJ^gU~9dd*XHM0IhoNUi>+=0!SO?Xscu*c JJ8XKWn16yyDjZtTf$oH&9L8hV*hj#GhA@Ymlj#ZeRrA8dRJT@?9hH9zD`;VhTMR1-(|)-y9^{HiJrH rc;WO9KQH0000801jt2Qt8?DFH{5o01gWP03ZMW0B~t=FJEbHbY*gGVQepBY-ulTVQFq(aA9(DWpXZX d5u9=xlZku7h0YqTOCMo#kx%gzl_sPid8cIke7HGuwgn@=h c6$$6zA{WocpP4HE6w8G)V+8?S9JPjON7#M6T%q+u590 <Il-LtnDvET{Qd(JeG(2i#dh0nLarq}TVt?ZGHURoL)HT9;uIbWOeJ3yof}&tT6a}2YE-V!?gN1E$F|;8}A#_i^ FkwzH74G4wZ=4J%U)X%Og*buD>k|!hP9&gnhoGI%6q;U9U5|9;R7o|7G@QS
@PUDQ7(9yGJEH#J-q>H %YgS{lh3KF52U}P8ZDjr$cBAt0D4qRTRTVcRpkgpm<Xa{E<E;LT4ejK^x|X@)w0IXsD->{VwushB8z Xlk9u5Qi|+KaaPiBR)1{Mzb5?Q9t_2Rl(H;H6s$i<tak2!>M$r-Ykqox3!rkiCe+xXVgmfIS}VP?Rn inck8#$pTO5m5)JpbUyfBV1gCQMxthn3yucCdHiISF%k!=!8y@1<R-svTflg$}isUBwy^177@J<_0AK mH(S5bRu7kyWTm#T^glyg1v@h@u>Rgx%c42ixE6FRvcqVT7aV?
5WYI;g{Alnqp=XF^ws5nWcXq(W+ r?89#;=kHV88_J29@?0E)$kQNl6sW=D|s6)-jC%Q2FtJQVRTmm9b26oPp(}NJNgvlZiL;cu*Vc8L%tU 4scqn^ekl!Mj;>S+q2W7%O?|%=YML;RdpdFLJ4oTcX-
Pdo#4iK@|GJ;TD1UlF!Gdw;ToyzXiZM{k2 zu_|Dc94HkD0%-wcqZds#eFj-WCGbUZiMAw)&BpKsWpB=YjZ%m>eLabvecWt%x~+Y>xV*TMQs^l6(S 9aIVrw8m%9m*h%f-6<AMhjObVi^SjnWyK?
rKj@4K|wjJv>{>5Fm%=9kBIQZaq)Gi@qjo!u#tYP{Yu$ &)F3Hc;wJ@D??8$;tuxtVoD
wG5&bN{(rK+5bCwcD-laY9TxULJy<dcJmJZ1nIG?fnM~cI*5m3v{%a-n7$X_
Yjo{4SKr!IIl)5 s@EA_pX^P9IINN%gYR){OWvuIv7Dmt!!^P|Rt}%^K0gCJP>laq7eJFQqtw4U8L$aFhAtL&I&W=mz <Yn;VkIQCXoI-jAUyKTODohfYOS3EAtxC;H-bn*}W15ir?1QY-O00;mMXE#!HSTa&3;+O>C;$K(00 01RX>c!JX>N37a&BR4FJo+JFK}UUb7gWaaCyyI>u=mP694YMf>r&KkB ==ReU_v6GXn6bDjOc289ie&4qsa-2ci~F*ui_5iX8(feCL34+LV +gdw-DRy6Rg$v37vz7x89pRZq8}~p!wG@2%f}2k&)<x8wOak1Dn>-Fx#&nwrDBpOriXsDTAiGnl3(|X Y(?9OTi)$REe;3PX
=RGXd80Hh-3$G!x}<iP#hTP1&4Xw5se!MJxEppnZvO^Zb-uwMN(%&r;jhNgkCAp4w_Z=(Qd8< nN>$xZ^kwLZ^dp0NAh3c2IlnsyE-cWQL{UJD
{^zz!wYU<Zb?4}LUsgA)YlJLo(IJVJUwtz!ANpQ0rIw2ozYA!>0V}+z3dw?inCxg<)-5lUrg~6SEg Gi$#*c6R@%G)n-d3+Ze0cXExlwdmz8fSpT64R82nW~k*H=;snWAJR0c!0*fsW9Q=?bO~92QiH|A*bb@ xWE>w@KE}T32+?
wBNyg9K@!n!u#ay}nAI{>F^uRn^f0Xu3E#IjLK!6nQV12iC1+y5lwfokBDd&QQo y9P{;HPLjjIU(?XvA!fd?&eHBYe6&QhRGdroD&dV8L!Zej071G&YX=!4ARnc*k{B<%+f2HTjClor3? qy1vCvjuAemmS!&$H}XFWN~0^#mhU=ng<G!oBel|S0*<N#4cC$zPaA1j;uqP0-c?Ao@>H
+klDA-7Yn (O0uZmk^Wc+N_hPZ^mN$BD<&w_i;L%%<cxeXZhBb6<s*WbBxt2v*<eyx^H*+{9So!h${J)xaJH<{JK df@MUQh>lfw;_+k-yO$akN=e4m*K#rkvjlm+}z_x|$-dlqWq8$E;76#NEM*+Q@&V(a6hV@PP%kOR{cI H~evB(uS72e)
b2t?7A;r1NjrHxT@B@gW@Tpi6R-<=&(5}Zw6imNxvZGeaIlpmQK#@Gzso-e&FtI 0e+vlGA;w_xVW5-&;32i%A6O)tR{i^T_x>%h;{jLE!b6&qJ#BC&DloL0*^T%-!}J$aF!!#l41aI)CB SU8L@%=
Z;4Q&VTf|!Vx?YUp;2W-5+5%6DKLiU27RNQ+Jr>xTID0fu+wjwx|bAT)>e}kN9FSqceJ); dM*_pWe791V!<5|6ImzCcld3Gf+sJ9o+i(4vWSdW2w%|S}x?&F_DayOj5*(8p 5gQ>d65I_o(=IAFxN6yy_I>Y)tv^mn$N=_6UC%>D X<{;r}b9ZyD<>5#v4v9&icn<qi>EX(ZGM5=6~1$^4+;?j-xveMI6L^7#u~#mhgEgNZdRfa0-K?x6wb7 Dsb?$u(I4i=vo|3pg!A6dcb9Dj129M$708LZY@Mh$y6J2_PpKt|wZ6h(bvOld(=w@l-*8mWHiOGZNy+ f$}b!88<#Hy<#m2>IaN*U8AyS2?GrFz@{IkbHw{jE$nMVJx0ep-V;*>r>(aDNEmKim+6Q=c>VK8+bt6 8bI@#7Jc;KPbKJ<$n3?Kn{im2q%Y4q*+Q}L%v;(uS#
FNm$4xFY7iV}6(91r50Z)xg+Pb%ahF8E?ru-9Zzz%Q-AD~k&NvjQPOKS5gZll!!E=0XJ;V*nlOdn(0su91$LLJZ@ IP>csY*-t54m^hVGH#gk(SV4FK<M_aocVq17tJv<aL$0ofk_P6FIc;MPHzlUZbML;ZW>_6~#mx
&Vn{ |00Z_rn<5xC1>?0yB_=kgFeh2)
Ys!&Je&M)D)!jTc84pl#<mNg1IZ%%KnzA(FRDU$#m(>
xH; 6H_bz_9sQxZJ7y<tByMgH-N(_n|}Vl$-^v_6hRmiL@zJp}<mW0k=}V#LZF4qi>@B2(2RoMXA_1tOJaKo7L}Eij%TdG@LBr7xeLw?k=lZ VO&%bHiG;!RXigSfJOs5L5=sPUW=FzMH^VIm2R?pylP%H)SAdl??P|CRMt_&nn)oFIb6ge0hYw)l)M IR+A4(_vssf{=9>rf%9QtT^53w4a$YrB847HEbR_h^@sY!mjy*dl
W8&0k;iM7v_f5upG(R57V=EKSd I^nS|^L+9A*-La3nhh6Bjiho7qAa1
zy#6!fxzEavrG4#%ycysqqbqh}V+Uy0@5KH}M+>IRN_PAP5 }z+p%Mgbd9^N@<)5N^fRU<xTeYjSYy$CaJVu3^Z<|<}rDMmAFNB
DK(Zl-VC>=))4W@z!Xe1NM;AiG- 77I97<0Bbnl)4>U2o*LYyZX?bE|iL#0!FWrY&d!2S!9cRX-|v n6E_5J_q^VZX$4(+N-IZF?^%8AGKwJ+x2LwebrFhnH(ZJi+ZNz$5TrQ0g1JA}g)!2?1IQw~qlGRiagIjM$v%Jar8Pz7ym65mEfMBCD#=ieo %o&JPYL>$ZP8zexa3~ 9dr4p^F<)dXQKfGEK(|??qo4o?;iP~tn-xbgY8Kbj|$60n&qD=kdW{Qz&G83%HH9M{
t_0%H@|eU(E- P4Sw(=c!PYCO-X1$)D_@B7ibPnN?xF%-ML$1I>LuVcvqseQ0C1rp%^+>BIFKBcWh;+Zfm9J^San3x2 BII*zLjAm5>e8f=v}stGH$dHTT-nSXm}kDU_8$?}BJHbdDN<0;mIJkazgqz@DkLMARyI!z^n|7pq+> u4oIUGHMx+
UcE-vkFqlDS0md^$x4nrirV3tRzaTCWZ)t)6ZJj6Ngf4WuU%6O3(RY>CeEC5ju Kf>-GnMy$9>E2mjbJSBYB87z3{^^w?AmrAuTlPC#I^A;e^)v!w^ywz(Yzc2yR1j+uQGPEYHGi5m=YBL 8ZSL-CX;Es#=VljfX2k!<JXLv$c#a9jBS{DGSHPXTDCSad3zuqG$|X|fh5L5t+d
Am6{fWn=?Q{j6 !s^>C@tDE=P96uuCcZu|wg~*e+5BTwdg8&g6Fn?wA73>oF6=>GNYyf>_KjW(?CFcUa8S3b@9_+c8&6a SbM2-YChB0%svBYuy5l>{*R1hCQrr(cJLHH3VadQbY_3sXGkE#wBx1nW~t2|5g((A$lDK4DQ$j?pt=} PfYL?4J!k$1^*hc<QOwev~<<PvW!5&6+=y+_2~fJm{)A59UVmuBPEM3W)8a4D|XNyi<OHQke!
nP!!e _tIF6>@$D91bJxc+4QmWWaf}dAi^H(DT)uVYdm7Hs0VD^@pr@+gRjw;e
5%tzSYRk<r+L3d_jFH8 )29>qFxVP
K9hQK}8XVx%TiWTdm<11nTi^!(arlMT2s>uPYS$Gj=OMt|6OOj5EAdGOoT=wbM
z75fL 4-KSG|5{
T7z(MPIbx5()JaaQEtSmseG_m4AUpE
i-5!A)UVuSrwgg*#&B&3dXPp3Y_me>hJMD_WX-y&#~Omj5g)i6E<rvB4CDc$BpZ bz${fi=ormQf|gI{TtwXl5j$Y_&iBneKpJuOzi)scggn>kHy)-S5cr|0j!ZWr2SaeM~=)G-8fYzKk KG?g{Ox5*Ef27=Z5tqN~%?B*Go&_i@=$%EMB_kjZ)j8PCnz}Eh!HfG^L!pN+K;jaTIOCEN
g@t=ju@I LDh3#)(1cEJ>PqKUnl~=UBPMm8@W…
Create a Custom Heading
We will make a simple heading for our Cat Photo App by putting the title and relaxing cat image in the same row.
Remember, Bootstrap uses a responsive grid system, which makes it easy to put elements into rows and specify each element's relative width. Most of Bootstrap's classes can be applied to a div element.
Nest your first image and your h2 element within a single
Notice how the image is now just the right size to fit along the text?
Answer:
<style> h2 { font-family: Lobster, Monospace; } .thick-green-border { border-color: green; border-width: 10px; border-style: solid; border-radius: 50%; } </style>Things cats love:
- cat nip
- laser pointers
- lasagna
Top 3 things cats hate:
- flea treatment
- thunder
- other cats
Grief Project
-
I updated a lot of the visuals, making it more cohesive. I really want to make something beautiful and design but that also makes it hard to keep it FUNNY. Since were dealing with death and grief here it's something I'll have to keep in mind. Although the general concept is funny and maybe I should rely on that for now.
-
Started working on the first game, Denial. So to keep it cohesive with the visuals i'm using very basic shapes and colors that i've been using in the other classes. I'm also realizing that I would like the game to actually be fun. hahaha. I think I've got a cute idea, we will see. My goal is to have it done by today.
-
Updated my journal! Also I should make a new big list because I did finish my first big one. I think tonight might be a good time if I "finished" the denial game.
🔥 Rebuild the whole project
I've re-considered what the whole project was for, and I decided to focus on "for interviews". As a result of that, now the project only have 3 main sections:
- indexpage, for self project display, you can show those screenshots of what you have done to your interviewer;
- Style page, for css problems. So if you got a css question during interview, you can have a place to quickly set up;
- Algorithms page, so if your god damn ass interviewer asked you to, not only figure out an algorithm question, but also make it run-able, (for like Class, linkedlist, etc.,), you will not panic, and have a place to work.
Imported element-plus for vue3.
Update README.md
Tsukimi here👋
- Student
- Musical Game,Animation and Galgame lover
- Not a developer
- Trying to be a funny boy Come to make friends with me❤️
Blog: https://blog.yuejian.fun/ Twitter: https://twitter.com/yuejiancc
updated the string of autoname and autobio. so p;ease fuck yourself
We've done a lot of optimizing today, got rid of a lot of nagging warnings. Fixed some inconsistencies in the way pages are displayed, addressed some issues with mobile landscape view.
Generally, Id say we need to put a little more thought towards the way we are structuring styles. Theres a lot of sub points to address here, suggest you make a todo list issue and link that to a blog post tonight. As well as dealing with this, hope to put getDocs in its own useEffect hook, and address some older todos, like making more of the site content loaded dynamically, and adding links to resume pdf and linked in to navbar or homepage.
Honestly theres a lot todo on this site. Feels good to get this much work done, but we need to reorganize or else progress is painfully inefficient (styles especially, mediaquery or not is counter intutitive, fix one thing, break something else) and this will take forever.
Tropics stuff
- the fucking code to show mountains doesnt work god damn it
- loam outline edits
- tree cs to make the top display properly
Clearly deliniate the circles of hell.
If we've unleashed Satan on a material, he will perform his dark magick on the material colors. Therefore, we need to prefix the satanic materials with something other than "RTLit_" lest the plain old runtime lit materials be infected by the prince of darkness.
"7:15am. A clold wind blew in during the night, so I won't have to sweat like a pig in a sauna today. Let me do the chores here.
1:15pm. It was cloudy, windy and cool the entire day today so I took the chance to pack in as much work as I can. I've been hauling piles of wood for 6 hours straight. The sun came out just as I finished as if to shine on my determination.
Another day or two like this and I will be done with winter preparations. Let me go get breakfast and chill. I'll check out the emails after all that. I need some time to cool down.
2pm. Done with breakfast. Let me check the mail. Nothing. Well, good, I do not feel like dealing with anything right now.
2:05pm. I'll dedicate the next hour or two to fun. I completely do not feel like starting work on the docs.
I've made my determination. Maybe I'll get a highly paid job and will be able to trade on the side while staying on it long term, or I will get a low paid job, get the AI chip and get back to my RL research full time.
It does not matter either way. I'll accept any eventuality as it comes. That is the way to do this.
3:15pm. Ok, I've recovered a little. I can consider working on the docs for a bit.
Do I want to do that or read Genocide Online next?
Ok, the docs, the docs. I want to do something programming related for at least a few hours every day.
4:25pm. I am reading it from the top and 800 lines in, I am impressed how on point the docs are. I do not get the impression that I did a bad job at all last time.
4:50pm.
///
Here is how union types are defined and constructed.
union t =
| A: i32 // .a_ * i32
| B: f64 // .b_ * f64
| C: string // .c_ * string
inl main () = C: "asd"
type [<Struct>] US0 =
| US0_0 of f0_0 : int32
| US0_1 of f1_0 : float
| US0_2 of f2_0 : string
US0_2("asd")
///
It is time to go through these examples again. This time I am going to do it systematically rather than doing quick and dirty edits. It took me half an hour last time, but I'll redo it regardless. Let me keep doing this for half an hour longer and then I will stop for the day.
5:20pm.
union rec a =
| A : b
| StopA
and union b =
| B : a
| StopB
inl main () =
B StopA
Found a breaking bug this example. I am going to have to look into recursive unions.
Unhandled exception: System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
at Microsoft.FSharp.Collections.MapTreeModule.find[TKey,TValue](IComparer`1 comparer, TKey k, MapTree`2 m) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\map.fs:line 155
at Spiral.Infer.tt(TopEnv env, T _arg1) in C:\Users\Marko\Source\Repos\The Spiral Language\The Spiral Language 2\Infer.fs:line 209
at Spiral.Infer.loop'@864(Tuple`2 r, T got, T expected, FSharpRef`1 top_env, FSharpList`1 extras, T tupledArg0, T tupledArg1) in C:\Users\Marko\Source\Repos\The Spiral Language\The Spiral Language 2\Infer.fs:line 880
at Spiral.Infer.loop'@864(Tuple`2 r, T got, T expected, FSharpRef`1 top_env, FSharpList`1 extras, T tupledArg0, T tupledArg1) in C:\Users\Marko\Source\Repos\The Spiral Language\The Spiral Language 2\Infer.fs:line 870
at Spiral.Infer.unify@846(List`1 errors, FSharpRef`1 top_env, Tuple`2 r, T got, T expected) in C:\Users\Marko\Source\Repos\The Spiral Language\The Spiral Language 2\Infer.fs:line 908
I do not feel like fixing this, but let me do it and then I will call it a day. Focus me.
Ok, the problem is that the variables in the first union do not get added to the env for some reason. Let me think why that is.
| BundleNominalRec l' ->
let l,_ =
List.mapFold (fun i (_,name,vars,body) ->
let l,env = hovars vars
let tt = List.foldBack (fun (x : Var) s -> KindFun(x.kind,s)) l KindType
(at_tag i,name,l,env,tt,body), i+1
) top_env.nominals_next_tag l'
top_env <-
let f s (i,(_,name),l,env,tt,body) = Map.add i {|name=name; kind=tt|} s
{top_env with nominals_aux = List.fold f top_env.nominals_aux l}
let env_ty = List.fold (fun s (i,(_,name),_,_,_,_) -> Map.add name (TyNominal i) s) top_env.ty l
let x =
List.fold (fun s (i,(r,name),vars,env_ty',tt,body) ->
let v = fresh_var scope
ty scope {term=Map.empty; ty=Map.foldBack Map.add env_ty' env_ty; constraints=Map.empty} v body
let v = term_subst v
top_env_nominal s r i tt name vars v
) top_env_empty l
if 0 = errors.Count then psucc (fun () -> FNominalRec l'), AInclude x
else pfail, AInclude top_env_empty
The error should be here somewhere.
top_env_nominal s r i tt name vars v
Here. I can't imagine anywhere else.
let top_env_nominal s r (i : GlobalId) tt name vars v =
{ s with
nominals_next_tag = max s.nominals_next_tag i.tag + 1
nominals_aux = Map.add i {|kind=tt; name=name|} Map.empty
nominals = Map.add i {|vars=vars; body=v|} Map.empty
term = nominal_term r i tt name vars v
ty = Map.add name (TyNominal i) Map.empty
}
term = nominal_term r i tt name vars v
Oh, this is not good. It is not considering terms already in the dictionary at all.
Also, when parsing unions, I'll want to do duplicate checking for mutually recursive unions.
Let me put the above on hold, and I will check that out first.
let top_and_union d = top_and ((range (tuple4 (skip_keyword SpecUnion >>% UHeap) read_small_type_var' (many ho_var .>> skip_op "=") union_clauses)) >>= process_union) d
let top_open d = (module_open |>> fun (r,(name,acs)) -> TopOpen(r,name,acs)) d
let top_statement s =
let (+) = alt (index s)
(top_inl_or_let + top_union + top_nominal + top_prototype + top_type + top_instance + top_and_inl_or_let + top_and_union + top_open) s
It is awkward. They are parsed separately.
Previously, I had regular recursive nominals, but now only unions can be recursive.
I need to adjust this.
...No wait, I am being a moron. I should be doing this kind of duplicate checking during type inference for the simple reason that the parser only sees blocks.
Yeah, I am not thinking properly.
let top_env_nominal s r (i : GlobalId) tt name vars v =
{ s with
nominals_next_tag = max s.nominals_next_tag i.tag + 1
nominals_aux = Map.add i {|kind=tt; name=name|} Map.empty
nominals = Map.add i {|vars=vars; body=v|} Map.empty
term = Map.foldBack Map.add (nominal_term r i tt name vars v) s.term
ty = Map.add name (TyNominal i) Map.empty
}
For now let me fix the type bug like this. Let me run it to make sure that it also does not manifest in the prepass as well.
union rec a =
| A : b
| StopA
and union b =
| B : a
| StopB
inl main () =
StopA
Ah, now this crashes instead. No, I am not thinking right...
let top_env_nominal s r (i : GlobalId) tt name vars v =
{ s with
nominals_next_tag = max s.nominals_next_tag i.tag + 1
nominals_aux = Map.add i {|kind=tt; name=name|} s.nominals_aux
nominals = Map.add i {|vars=vars; body=v|} s.nominals
term = Map.foldBack Map.add (nominal_term r i tt name vars v) s.term
ty = Map.add name (TyNominal i) s.ty
}
I had errors everywhere. Let me try this. Yeah, it works.
union rec a =
| A : b
| StopA
| C
and union b =
| B : a
| StopB
| C
inl main () =
A (B StopA)
Let me also make sure that this gives an error.
5:50pm. No, it is too difficult to do this during typechecking. Let me do it during bundling instead.
| BundleNominalRec l' ->
let _ = // Checks that mutually recursive unions do not have duplicates.
let h = HashSet()
l' |> List.iter (fun (_,_,_,x) ->
match x with
| RawTUnion(_,l,_) -> l |> Map.iter (fun k v -> if h.Add k = false then errors.Add(range_of_texpr v,DuplicateKeyInUnion))
| _ -> ()
)
Let me do it like this.
6pm.
union rec a =
| A : b
| StopA
and union b =
| B : a
| StopB
inl main () =
A (B StopA)
Yeah, it works perfectly now. The error was only present during type inference and not in the prepass.
This is worth a patch.
6:05pm. Let me get back to the docs. Good thing I fixed this. Hopefully now Spiral should be bug free.
...Why the hell is Windwos showing me some tickers I added a month ago in the red negative zone, in this case TAN. Is it trying to get me to panic sell? It should stick to showing me the weather.
Let me go have lunch.
6:25pm. I am back. Where was I?
6:40pm. Done. I'll start work on the Prototypes section tomorrow. I cleaned up the unions a bit.
6:50pm. Tomorrow, I'll continue work on the docs. I want to say that I hope the morning workload is not as harsh as today's, but two more days like today, and I will be completely done with winter prep. The sooner I get it out of the way the better."
The Serenity devs are idiots and published a patch version that fucks shit up. Fixed the shit that was fucked up
Solve Darwin's dilemma
The Evolution mutation worked in a strange, complex, and not very satisfying way. Once every 500-1500 turns (!), it would check to see whether the total accumulated XP you'd gotten since your last evolution mutation, times the mutation level, times 1d10, was greater than the XP needed for your next XL. (So, it took a long time to do anything.)
Once it triggered, it had a 20% chance of trying to remove a bad mut, 64% of applying a good mut, and 16% of applying a bad mut. Regardless, it had a 10% chance of removing itself. Surprisingly often, it would remove itself without doing much of anything at all.
Instead, let's simplify. Each level of evolution is now worth 2 good muts. Once per XL's worth of experience, you'll get a good mut. After the second mut, you'll lose a level of evolution. It's a 'delayed gift box' mutation - very nice in the medium term, does nothing in the short term. Do you really want to quaff !mut if you still have a level of evolution pending? Tough choice...
Don't worry - failures die fast.
Auto merge of #7578 - xFrednet:7172-update-some-docs, r=camsteffen
Small documentation update for the new metadata_collector
Just small documentation updates after the merge of the new metadata collection. I'm also here to deliver on the promised fairy tale:
Once upon a time, there was a world with many languages. One of the oldest was C a very versatile language that gave great power for the cost of great complexity and manual work. C was so powerful that it was able to create new languages. There is Java a versatile language often used by companies and in formal settings. Python that focused on readability and rapid prototyping capabilities. JavaScript which has some interesting edge cases but was still loved and widely used in the world. Together they build the foundation of our world and continue to shape the interactions between kingdoms worldwide.
C ruled as the king of Linux and other operating systems alongside the Queen C++. Together they were powerful leaders, in fact so powerful that they have been ruling this world for over 49 years. They remain happy together and loved by the community. However, with great power comes great responsibility! The two of them have a dark secret. To tell the truth, they sometimes suffer from memory loss and even worse in some instances from race conditions.
A mystical creature called Firefox lead to the creation of Mozilla, a global organization fighting for privacy and for their market share in the browser marked. As part of this fight, they started to modify parts of Firefox and eventually created Servo. A completely new creature with a new language called Rust. This new form of communication was focussed on correctness, speed and a new model of memory management.
Rust grew up over several years with modification to syntax, content among other things. Finally, in 2015 Rust has reached adulthood which enabled it to take part in the global discourse and shape the future of our world. Some even say that this was the start of a new area withing language design.
Rust had already started to build its kingdom and was now the head of a complete organization, with teams being in charge of individual tools used for further development. One team focussing on further improving Rust when it comes to complexity, style and performance was The Clippy Team. Its members were a friendly bunch, with mages and wizards among them.
With the goal of giving more power to Rust, they identified a Python tool inside Clippy that could be rewritten. This led to the creating of the Metadata collection monster. This monster soon replaced the old Python tool and allowed for new creative additions inside Clippy's lint list. With the eradication of the old tool, there came a possibility to update the configuration documentation to span over a lager area. This was done, but some doc comments remained until now in memory of the old tool. This is now the PR that removes these doc comments.
I have to stop now, this already took way longer than the actual changes. It probably also contains some spelling mistakes, but oh well. I hope you get the gist of it 🙃.
r? @camsteffen
changelog: none
TrapsNeverHappen mode (#4059)
The goal of this mode is to remove obviously-unneeded code like
(drop (i32.load (local.get $x)))
In general we can't remove it, as the load might trap - we'd be removing a side effect. This is fairly rare in general, but actually becomes quite annoying with wasm GC code where such patterns are more common, and we really need to remove them.
Historically the IgnoreImplicitTraps option was meant to help here. However, in practice it did not quite work well enough for most production code, as mentioned e.g. in #3934 . TrapsNeverHappen mode is an attempt to fix that, based on feedback from @askeksa in that issue, and also I believe this implements an idea that @fitzgen mentioned a while ago (sorry, I can't remember where exactly...). So I'm hopeful this will be generally useful and not just for GC.
The idea in TrapsNeverHappen mode is that traps are assumed to not actually happen at runtime. That is, if there is a trap in the code, it will not be reached, or if it is reached then it will not trap. For example, an (unreachable) would be assumed to never be reached, which means that the optimizer can remove it and any code that executes right before it:
(if (..condition..) (block (..code that can be removed, if it does not branch out..) (..code that can be removed, if it does not branch out..) (..code that can be removed, if it does not branch out..) (unreachable)))
And something like a load from memory is assumed to not trap, etc., which in particular would let us remove that dropped load from earlier.
This mode should be usable in production builds with assertions disabled, if traps are seen as failing assertions. That might not be true of all release builds (maybe some use traps for other purposes), but hopefully in some. That is, if traps are like assertions, then enabling this new mode would be like disabling assertions in release builds and living with the fact that if an assertion would have been hit then that is "undefined behavior" and the optimizer might have removed the trap or done something weird.
TrapsNeverHappen (TNH) is different from IgnoreImplicitTraps (IIT). The old IIT mode would just ignore traps when computing effects. That is a simple model, but a problem happens with a trap behind a condition, like this:
if (x != 0) foo(1 / x);
We won't trap on integer division by zero here only because of the guarding if. In IIT, we'd compute no side effects on 1 / x, and then we might end up moving it around, depending on other code in the area, and potentially out of the if - which would make it happen unconditionally, which would break.
TNH avoids that problem because it does not simply ignore traps. Instead, there is a new hasUnremovableSideEffects() method that must be opted-in by passes. That checks if there are no side effects, or if there are, if we can remove them - and we know we can remove a trap if we are running under TrapsNeverHappen mode, as the trap won't happen by assumption. A pass must only use that method where it is safe, that is, where it would either remove the side effect (in which case, no problem), or if not, that it at least does not move it around (avoiding the above problem with IIT).
This PR does not implement all optimizations possible with TNH, just a small initial set of things to get started. It is already useful on wasm GC code, including being as good as IIT on removing unnecessary casts in some cases, see the test suite updates here. Also, a significant part of the 18% speedup measured in
#4052 (comment)
is due to my testing with this enabled, as otherwise the devirtualization there leaves a lot of unneeded code.
Add "Grid Attack" coding game
In an ancient Elvish prophecy, it was said that one day a man would be born with an incredible power that predicts the future – "Marketi Predictori." And another will come to take this power. But the years went by and nothing happened. Until one day, a little elf was born. He was named Luke.
From an early age, he surprised his parents and his sister Rey by guessing the price of apples at the farmer's market before they even reached it. Every year his power rose and his predictions became more and more accurate. But there was one thing Luke could not predict. The coming of the demon Valcorian. It was the one from the prophecy that was to come and take Luke's power. One day Valcorian and his army attacked the town where Luke had lived and kidnapped him to make a ritual of stealing his power.
Go on a dangerous quest with Luke's sister Rey and find her brother. Defeat Valcorian and all his demons using a secret weapon – CSS Grid.
We made this game for You?
-
You often stumble and try to figure out which combination of Grid properties makes the browser do what you want it to do.
-
You are scared by the number of properties a CSS Grid has, and you feel uncomfortable when you need to create a grid layout.
-
You want to create complex web layouts using Grid, but without constantly looking at the web page after every "Cmd/Ctrl+S" press in the code editor.
-
You have tried to learn CSS Grid with video tutorials and articles but still don't fully understand how some parts of it work.
-
You use a Flex Box where Grid is required because you don't feel confident in using it.
Have you found yourself there? Then you definitely want to learn or improve your Grid skills. So we have good news for you, really good news...
Learn Grid by Playing CSS Game No more boring videos, courses and articles. Learn Grid in a revolutionary new, fun, and effective way. By playing a Grid coding game!
Ass far as I can tell, it seems that collision is working wonderously. Next opportunity I get I'll bug test more with random sprites, and then flag overlap and collision. I'd like to discuss more about how I should approach this, as well as other flags. Flags such as 'moved past', or 'distance from' and such. This collision is not anticipating speeds faster than a sprite itself. it is made under the assumption that 1 should be replaced with Sprite->vVec or below, while anything higher should be treated as such. It may lead to phasing through things but for the vast majority of applications we shouldn't have to worry about that.
To Do List: (Jacob or Jack when time is available) Bug Test Collision - Manual Bug Test Collision - Random Sprite Movements
(Jacob) Clean up Sprite.h
Implement Level Collision (colliding with the map) Implement Collision Flags Implement Overlap Flags Implement Directional collision (such as a tunnel or slide)
Start thinking about Camera/Player speeds effect on these collision fields
Addition of the option in Kade Engine Data File
Literally just explained this commit above you idiot, I don't know why you're still reading this... stop it. I mean it, wait, why am I writing this? This is a waste of time, STOP ME! HOLY SHIT WHY CAN'T I STOP HELP!
holy moly: making my way through everyday types...and still have a lot to do, if God gives me life!