From a8c8dd0b70a3d440615dc344c473bd70403d51fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E7=A5=A5?= <1366971433@qq.com> Date: Sun, 14 Apr 2019 18:25:51 +0800 Subject: [PATCH] =?UTF-8?q?Hbase=E7=AE=80=E4=BB=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- notes/Hbase简介.md | 70 ++++++++ notes/Hbase系统架构及数据结构.md | 2 +- notes/Storm核心概念详解.md | 5 +- notes/storm编程模型.md | 200 ++++++++++++++++++++++ pictures/HBase_table-iteblog.png | Bin 0 -> 32122 bytes pictures/storm-baseRichSpout.png | Bin 0 -> 10568 bytes pictures/storm-baseRichbolt.png | Bin 0 -> 10545 bytes 8 files changed, 275 insertions(+), 4 deletions(-) create mode 100644 notes/Hbase简介.md create mode 100644 notes/storm编程模型.md create mode 100644 pictures/HBase_table-iteblog.png create mode 100644 pictures/storm-baseRichSpout.png create mode 100644 pictures/storm-baseRichbolt.png diff --git a/README.md b/README.md index f06de08..48a8ed0 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ TODO ## 九、HBase -1. Hbase 简介 +1. [Hbase 简介](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hbase简介.md) 2. [HBase系统架构及数据结构](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hbase%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84%E5%8F%8A%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84.md) 3. [HBase基本环境搭建(Standalone /pseudo-distributed mode)](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Hbase%E5%9F%BA%E6%9C%AC%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA.md) 4. [HBase常用Shell命令](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hbase%20Shell.md) diff --git a/notes/Hbase简介.md b/notes/Hbase简介.md new file mode 100644 index 0000000..6c35f93 --- /dev/null +++ b/notes/Hbase简介.md @@ -0,0 +1,70 @@ +# Hbase简介 + + +## 一、Hadoop的局限 + +HBase是一个构建在Hadoop文件系统之上的面向列的数据库管理系统。既然有了Hadoop为什么还需要HBase ? 这里首先介绍一下Hadoop的限制。 + +
+ + Hadoop擅长存储任意的、半结构甚至非结构化的数据,主要通过HDFS来存储,使用MapReduce来处理。但是Hadoop只能执行批处理,并且只能以顺序方式访问数据。这意味着即使是最简单的工作,也必须搜索整个数据集。面对日益复杂的业务需求,需要一个新的解决方案来实现对海量数据的随机访问。实现数据的随机访问是传统的RDBMS所擅长的,但其却不能存储海量的数据。在这种情况下,必须有一种新的方案来解决海量数据存储和随机访问并存的问题,HBase就是其中之一。 + +> 注:HBase,Cassandra,couchDB,Dynamo和MongoDB都能存储海量数据并支持随机访问。 + + + +## 二、HBase简介 + +HBase是一个构建在Hadoop文件系统之上的面向列的数据库管理系统。 + +HBase是一种类似于Google’s big table的数据模型,它是Hadoop生态系统的一部分,它将数据存储在HDFS上,客户端可以通过HBase实现对HDFS上数据的随机访问。它具有以下特性: + +- 线性和模块化的可扩展性; +- 提供一致的读写操作; +- 支持数据分片; +- 支持RegionServers之间的自动故障转移; +- 易于使用的Java 客户端 API; +- 支持BlockCache和布隆过滤器; +- 过滤器支持谓词下推。 + + + +## 三、HBase Table + +HBase是一个面向列的数据库管理系统,这里更为确切的而说,HBase是一个面向列族的数据库管理系统。表 schema 仅定义列族,表具有多个列族,每个列族可以包含任意数量的列,列由多个单元格(cell )组成,单元格可以存储多个版本的数据,多个版本数据以时间戳进行区分。 + +下图为Hbase中一张表的: + ++ RowKey为行的唯一标识,所有行按照RowKey的字典序进行排序; ++ 该表具有两个列族,分别是personal和office; ++ 其中列族personal拥有name、city、phone三个列,office拥有tel、addres两个列。 + +
+ +> 图片引用自博客:HBase 是列式存储数据库吗(https://www.iteblog.com/archives/2498.html) + + + +## 四、Phoenix + +Phoenix是HBase的开源SQL中间层。使得您可以使用标准JDBC API而不是常规HBase客户端API来操作HBase上的数据。 + +简单来说,如果你要直接使用HBase,你就只能通过它的Java API来进行调用,虽然官网介绍它的API是简单易用的,但相比于使用一行SQL就能实现数据的查询过滤,原生的API还是过于复杂,Phoenix 的理念是`we put sql SQL back in NOSQL`,即你可以使用标准的SQL就能完成对HBase中数据的操作。 + +Phoenix完全使用Java编写,作为HBase内嵌的JDBC驱动。Phoenix查询引擎会将SQL查询转换为一个或多个HBase scan,并编排并行执行以生成标准的JDBC结果集,同时Phoenix还拥有二级索引等Hbase不具备的特性,这使得Phoenix具有接近原生HBase API的性能表现。 + + + + + +## 参考资料 + +1. [HBase - Overview](https://www.tutorialspoint.com/hbase/hbase_overview.htm) + + + diff --git a/notes/Hbase系统架构及数据结构.md b/notes/Hbase系统架构及数据结构.md index c82ee66..b20a8c5 100644 --- a/notes/Hbase系统架构及数据结构.md +++ b/notes/Hbase系统架构及数据结构.md @@ -35,7 +35,7 @@ Row Key是用来检索记录的主键。访问HBase Table中的行,只有三 + 全表扫描 -Row Key (行键)可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在HBase内部,Row Key保存为字节数组。存储时,数据按照Row Key的字典序(byte order)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起(位置相关性)。 +Row Key (行键)可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在HBase内部,Row Key保存为字节数组。存储时,数据按照Row Key的字典序(byte order)排序存储。 需要注意以下两点: diff --git a/notes/Storm核心概念详解.md b/notes/Storm核心概念详解.md index 772d8af..051d583 100644 --- a/notes/Storm核心概念详解.md +++ b/notes/Storm核心概念详解.md @@ -1,4 +1,4 @@ -# Storm 核心概念核心概念详解 +# Storm 核心概念详解 - ## 一、Storm核心概念 +下图为Storm为运行流程图: +
### 1.1 Topologies(拓扑) diff --git a/notes/storm编程模型.md b/notes/storm编程模型.md new file mode 100644 index 0000000..21eca93 --- /dev/null +++ b/notes/storm编程模型.md @@ -0,0 +1,200 @@ +# Storm 编程模型 + +## 一、简介 + +下图为Strom的运行流程图,也是storm的编程模型图,在storm 进行流处理时,我们需要自定义实现自己的spout(数据源)和bolt(处理单元),并通过`TopologyBuilder`将它们之间进行关联,定义好数据处理的流程。 + +下面小结分别介绍如何按照storm内置接口分别实现spout和bolt,然后将其进行关联,最后将其提交到本地和服务器进行运行。 + +![spout-bolt](D:\BigData-Notes\pictures\spout-bolt.png) + +## 二、IComponent + +`IComponent`接口定义了Topology中所有组件(spout/bolt)的公共方法,我们实现spout或bolt都必须直接或者间接实现这个接口。 + +```java +public interface IComponent extends Serializable { + + /** + * 声明此拓扑的所有流的输出模式。 + * @param declarer这用于声明输出流id,输出字段以及每个输出流是否是直接流(direct stream) + */ + void declareOutputFields(OutputFieldsDeclarer declarer); + + /** + * 声明此组件的配置。 + * + */ + Map getComponentConfiguration(); + +} +``` + +## 三、spout + +### 3.1 ISpout接口 + +实现自定义的spout需要实现`ISpout`,其定义了spout的所有可用方法: + +```java +public interface ISpout extends Serializable { + /** + * 组件初始化时候被调用 + * + * @param conf ISpout的配置 + * @param context 应用上下文,可以通过其获取任务ID和组件ID,输入和输出信息等。 + * @param collector 用来发送spout中的tuples,它是线程安全的,建议保存为此spout对象的实例变量 + */ + void open(Map conf, TopologyContext context, SpoutOutputCollector collector); + + /** + * ISpout将要被关闭的时候调用。但是其不一定会被执行,如果在集群环境中通过kill -9 杀死进程时其就无法被执行。 + */ + void close(); + + /** + * 当ISpout从停用状态激活时被调用 + */ + void activate(); + + /** + * 当ISpout停用时候被调用 + */ + void deactivate(); + + /** + * 这是一个核心方法,主要通过在此方法中调用collector将tuples发送给下一个接收器,这个方法必须是非阻塞的。 * nextTuple/ack/fail/是在同一个线程中执行的,所以不用考虑线程安全方面。当没有tuples发出时应该 + * 让nextTuple休眠(sleep)一下,以免浪费CPU。 + */ + void nextTuple(); + + /** + * 通过msgId进行tuples处理成功的确认,被确认后的tuples不会再次被发送 + */ + void ack(Object msgId); + + /** + * 通过msgId进行tuples处理失败的确认,被确认后的tuples会再次被发送进行处理 + */ + void fail(Object msgId); +} +``` + +### 3.2 BaseRichSpout抽象类 + +**通常情况下,我们实现自定义的Spout时不会直接去实现`ISpout`接口,而是继承`BaseRichSpout`。**`BaseRichSpout`继承自`BaseCompont`,同时实现了`IRichSpout`接口。 + +![storm-baseRichSpout](D:\BigData-Notes\pictures\storm-baseRichSpout.png) + +`IRichSpout`接口继承自`ISpout`和`IComponent`,自身并没有定义任何方法。 + +```java +public interface IRichSpout extends ISpout, IComponent { + +} +``` + +BaseComponent 抽象类也仅仅是空实现了`IComponent`的`getComponentConfiguration`方法。 + +```java +public abstract class BaseComponent implements IComponent { + @Override + public Map getComponentConfiguration() { + return null; + } +} +``` + +`BaseRichSpout`通过继承自`BaseCompont`,同时实现了`IRichSpout`接口,并且空实现了其中部分方法。 + +```java +public abstract class BaseRichSpout extends BaseComponent implements IRichSpout { + @Override + public void close() {} + + @Override + public void activate() {} + + @Override + public void deactivate() {} + + @Override + public void ack(Object msgId) {} + + @Override + public void fail(Object msgId) {} +} +``` + +通过这样的设计,我们在继承`BaseRichSpout`实现自己的spout时,就只需要实现三个必须的方法: + ++ open : 来源于ISpout,可以通过此方法获取用来发送tuples的`SpoutOutputCollector`; ++ nextTuple :来源于ISpout,必须在此方法内部才能调用`SpoutOutputCollector`发送tuple; ++ declareOutputFields :来源于IComponent,通过此方法声明发送的tuple的名称,这样下一个组件才能知道如何接受数据。 + + + +## 四、bolt + +通过上小结我们已经了解了storm如何对spout接口进行设计的,bolt接口的设计也是一样的。 + +### 4.1 IBolt 接口 + +```java + /** + * 在客户端计算机上创建的IBolt对象。会被被序列化到topology中(使用Java序列化),并提交给集群的主机(Nimbus)。 + * Nimbus启动workers反序列化对象,调用prepare,然后开始处理tuples。 + */ + +public interface IBolt extends Serializable { + /** + * 组件初始化时候被调用 + * + * @param conf storm中定义的此bolt的配置 + * @param context 应用上下文,可以通过其获取任务ID和组件ID,输入和输出信息等。 + * @param collector 用来发送spout中的tuples,它是线程安全的,建议保存为此spout对象的实例变量 + */ + void prepare(Map stormConf, TopologyContext context, OutputCollector collector); + + /** + * 处理单个tuple输入。 + * + * @param Tuple对象包含关于它的元数据(如来自哪个组件/流/任务) + */ + void execute(Tuple input); + + /** + * IBolt将要被关闭的时候调用。但是其不一定会被执行,如果在集群环境中通过kill -9 杀死进程时其就无法被执行。 + */ + void cleanup(); +``` + + + +### 4.2 BaseRichBolt抽象类 + +同样的,在实现我们自己的bolt时,我们也通常是继承`BaseRichBolt`抽象类来实现。`BaseRichBolt`继承自`BaseComponent`抽象类,并实现了`IRichBolt`接口。 + +![storm-baseRichbolt](D:\BigData-Notes\pictures\storm-baseRichbolt.png) + +`IRichBolt`接口继承自`IBolt`和`IComponent`,自身并没有定义任何方法。 + +``` +public interface IRichBolt extends IBolt, IComponent { + +} +``` + +通过这样的设计,我们在继承`BaseRichBolt`实现自己的bolt时,就只需要实现三个必须的方法: + +- prepare: 来源于IBolt,可以通过此方法获取用来发送tuples的`SpoutOutputCollector`; +- execute:来源于IBolt,处理tuple和发送处理完成的tuple; +- declareOutputFields :来源于IComponent,通过此方法声明发送的tuple的名称,这样下一个组件才能知道如何接受数据。 + + + +## 五、使用案例 + + + +## 六、提交到服务器运行 \ No newline at end of file diff --git a/pictures/HBase_table-iteblog.png b/pictures/HBase_table-iteblog.png new file mode 100644 index 0000000000000000000000000000000000000000..b28bcbe4815c0112c39ecae195fae42b4a288b9c GIT binary patch literal 32122 zcmd3O2UL@7x8<8qr8f}-La-rCih}gOhZIEtMWh#r2nY&DuL-CWsY(@rP^CAeNezmC z0qIS;(mMo@P!i^ie*b^({by#)%w02U?pnAAge2!_=j?sMd0OD37K;x=#iEe8O4F*cAYn zK9m1J+MMzp0DwR9^=qnky)4!mOgE(sy(gE#KVohS-u*UbMmVFNZ`P?UEUmAff8);O zIj<*DC3kU`J>I>RaEY9G^T7F?qZv$LE0CeN+{F(~%cEdbCdc#a6$?$EN^|J5S25}; zY*06VlJ;ESxtNF#ZB2Yin*pVhgAKnX8xE%?4!sN0MkiJXC4+^B#I?c0WB;kj58oYS z-hO-d!90!|c>Md(_e-4&=s%AfPd%hoAwT=wv5NjOMf&eYGGi~^Kzhi(lX<)LY1J6; z>X?XLx7cnD@whs^Rp$PDa;I0^n?z7Scn`~I7upB|%+fT4Db~vf{bj;rp6}(we zX$zV5-SBy^SIdlY+3P)Qe8`vKNen6VA-}G6ce2f+$-QG?4`a}1V?1O+741d=KbfvE z=HjuZrt3p;tUCF9xM{0c3BcQfahOVZQC`aL1Z2y>F;uz#j_&aw1Nw3@7^i6>d0=Dr zz5%jX|FxgiAKmlo-dnXGd^)A<`cNSRj8=cleb~JEkRJ6ze6?|L##T^Ub6e4 z0yr$&D-`LEZ(Ih_rWnvw`NcsB6qq$(a2m+t)K7+N9z6sqZrN8)1suYDWg6JajPX7M zQhFKC+ez5P!P0=;^}43Rx;$ zRvZsrbx|ZwO*%(_fxHWOY~^!d>AObL4)C{hQSGk^*`~KS>Gbu%(E)JF=N&pT%h_2Ka_ z5zh&6&U;+6`{h+Yq1)SAf4`*>eZIc%o_+@qxXo#GAL)Lmg6MoD?iDAI zQ%_^cy1{HxrUBdrN-}QZt@Q+k*9P_}^pmaYu1Y+@b5keB9Kme>9uH@jgOY@I`g`Ay zNdLlC6M##MM0)s=Pi4PFur$)%u=M2zM0x$1BDjxsN7y{U!zKCmq(#t_1i<+sLoT9} zLKvHqMJWtBD6Ll+@Y5v$p0Owjqsl@Le0gURB!#>+VKb9mh*Qm7yF6HeqC zmS?x?Y*(|(^>agnmlVsqo#**vh*VB~?YN8lV>ve+uO6S2U=F}(!gC_WFKHyhW(Oem zvW{oleEt#G={?!KVykFdz1P6QY8GpBXR=&$;&xIf`2db_Hp5#m6aK*1%LP9d)1@gC&KPSamWAo=??(B>1!V* zx0`6YJh;(JaP=oWP(BtSegrrFKVKxn18C4vUpZ|$3_yhmuHunKEE4<2=C#-zmyQ+BF;YyUOYCMT z9D5gak0YZFhK>`Bi0dq&S$uO_Uq6zZ)DOBz6v5b^0t#WC%7m8nTl_@)`gXLkyG!k! z_SDG4_7}m9da*@>A1Q3Y7Dm!|V_R%kWD3M|3s0Gp`gNNmmLLd=iNDP5d^bi>w0n;m z_ph7D1ai(*@CZ^2pf8U`E4Y<2c&nVX=Z4wr@ElL6M;x2pCiUq4VzlE(`ZX%%iKu11 z0M;k)%TTN)`~7tYOK2>*yrw_Ipw3Zh+2QJ?^?`Ce^=4#7UUzvbVj>yt{0#x3hBPwXUJ~{!CLs_EfS08TeUVdER#|N$hq=&o^Plo-v zM=wp3Py&*0(e;7dBWk@?xjCdi@cz-+y<5IJeEs;9iG<#e03I&llJvj6iUBAbE=P06 zor0De5o4EWpyvU_~0FkCI0|@4vbpmjQbAG@SU;=>Za7cMr_UvSYuCn zOJV63p$w2K@X`XBvbj{{HI8{ir`_(Y(~tGU)B352Ga>lQSGmKzAz-xz?8xQ1+M&_* zapIE?!1TSFbqQ_%`g>}u&P?T%QWP^W*D{kEU__HkzVn}1eh92eSe*T^ZP;)_xrG5u ztwKIjHRjt&4s~w758i*A)IT-!Kg`!3*zg|$`EwqD3i5#*lb-rerG1rRI^rRqC=TE? z<+rBdQ~HN^ZxR+F347v?yJaY*JtL(1whS%J#H-$FGADsP@c@UEE&hdvI+T9Ng%?|29n-6F&){a1TM|y+Orn{8VUF>NoI%;< z(cni;f7a4hi2HhMb7sFNy8ay=k>0f~dYmh>A38%g4if)TMU75&y1qyM?$|ok4MY(d z@(wm44*^G0Ka2F`CXH_^FMQ3qd5jyo?L(gOc3do7pk6A_MP&gsTz15~hRsj2@_R{wfltlE zAH9`ZNKvM8%kE9UZGLsP5_=lKaWmne={RI|^kO?M>DcS>{;Xoa?e^}J%D0d*nJ?56 zP4dwW8Y}86sxATv{r+7a*ZqgsSE4J=oozCSZIKv_<5w*8ids}u{%nVl;g|}>J5EW0 z8^ePRcqG|TBZ+5ZkEHRc|5^j7xu4~trl)aLu=U%?6$7GPnp7>TuOl765ut&~T2ejJ zvA~6Vc(d25r$xmxLW~;_DSPSK|DmpmgfDgz!PM$yK$dIylO;OAZu zDB&w{xb)%SW#AW2_cyQZd*EcJEqoZdx1v0J`L9;*0FAAb{IuQCGORVv_kS1K!FT;g7lp*ZGAJ_ffK(Oc9Ry!5b|jQVp~j*Z+i-#8+DW|wMm>XBC- z=mSG%~$DplYdHt0UhlYE%=w3j(*M*gMAsFV982;fdM?Mplx zwQDvK#0`vH0K!*P_S{#z1LqDEOD-Fi=)N(F+8*(YlMypYT)p{JXME;6Ytu;eKbGne zkj)UD^7fvBr%{pNM8tqTPj8+kY-kjsIFRt3A{0`h0&k_Tez{f53K(COhnXVPTy;OD zfdHv@l-nrN{D8@-g7Ev39gvSV&1U63j&S<51)2QND)Eim0g7zseL~qe z^eo{@G2&>t*7*{qf^+cK9mjB>y`G+A<756#y4gL0ci4~R}79~5`YW@24Ot@!#-oiiyO;LaTeaVj}-Yf9TE zGC1LwR-f!S9&{Cw=lxOo0tCx=P5$Qv#VdNcRA@!5MZ`g7h;|x#pIk1lEBmeOtdN%c zst3RW3opAz{?1|_-@Tud4t_;lZ?EG$?LaCoV7h>K(21&#`ktFJ!U>7_I4nJTy1lhT zY-#Ibna5>dC;?MmM4@U`QDZ@PVE#(R4YMLG+V4zBZqwf!Br+JRLn zhrBwM0ShHy+2GSaDGyj3u24*SfQatzx`myqho+74-mJ2x#;zrA82{rHr-8>SQslqf zD_ZOO!*TzmAd(s1|EoG!{S4Sla~;P2GoQ^Q=g!K;K_}_pp7)T?E`@ll3p3gY^}T6yV#f*9 zHyUHHwXVB9d9-Yp;GN)p;$VUYQD3*#Sc*{d8aCOdBY2k{Y_1~?Coxq~J(j+c8y2fa ztT&H)!>7#WAFDQP4%Ph{uEu>BDm=!c_FpIg0Y`15zV%7|{qADMu<1P#ipY#p?5L$| z*os6sk2rzIqpbt511g5jg9~5-R9rF#k%A3y1u$884FVD=z$Eb!SP!It(?GHNR}hA9 z1I5~j;6jr@%TVnD5ZW=IhjKc=j7VN02XiUli6OPhN}mmoa+?hQDldWCLxdvTeMt)F zx=4m-CW#;fiHG#mx`9w2jtrQJ!34dA1MJLeLF58{|6hh9e-*Gs5!)<0ZjE{#6D@1! zj|#3(0a6Loe$(tzu(J!yh+i$Yk@YkE%xf0z{cARpl3-Z+;Dfz_ z^ojqygYo1?G!oI0n7!qX!{*0D`wHsR*vB|%@jzXAP+!l;mnbHD>- z=}FPP!g{)7YuHc13cugCfV8Ai2G=6NA$!NOBE#J5!!siePeWUWXq6?NM0{*lzFqoW z&2OUtVbAU`an&$K9b$E}|MT&?vGs-vMBbkUaQ}&eu*0hq=vh{-Xm2GSCi9bk6rwHk zW8tX75*ILQAhQy+8)Bm(fLNb?D)y0ID}1hXNPM?lEw0ciKescfDfEiJ_vfd|%O9uS zap^}lA>}!N6PGCOsq(8PS)J^-82QwI<*X44mgCAubB3a-U?N|i5hBRo+DBoaz-jbT zfr>^lR4ifJx8vpyr|5)w3ZriudOn=4nck49H~LZe{0nh2{z?l{_lU zDVP51c=p2+x#5Gs6!`L&ZM84;5fd1ty>AAO%7IWXG;-lN*8%4PwreI3d%AB_XzXR+ zb1uHb#1(*Vt70)T+G<0R0B!x^>HFMzM$v;t5`!zoO+XC%^$}fy4=!RqJgFT3Kc{XC}jJ6l2PTP)4o4kyIs01m_gnzQ;W-zkq99_$YD%mGjC$uA|*?RJuAT2(J ztwzIg4YtJBmd$tW>T)}_TjI-vb(gn13ncHinT>(uApH*UVc|(GQ&on3CTpE;d!m%z=!#a`j|Mai`2H6y!5Cc9<=)Mn1O{PJoY*z7k*Ly zvDQFgAM27gNzU-}TA?WE?%EFUSi4yIFO#&wdE=A!$#Mc zQ@ZepAShUg2C6xNBPp5rK-tOFGGYG{@(WDx6@kxw_g0cMU!fSzrON>^hpMGYg-7{+ zHsI`igS3H}jl0NCQ6H}ohV(fTmzjoWq|0r>y&*+=yeezja^E0$2`>U5er?8 zZxRzb0Z0$!(YlGzIz;m2S*Jdzv7XGQsj)hVeXwMr&c(;3{8fCJ$(-LW<7WKu*>9#g z!#XK`^Rcdd1`q8>t!|yfuvDobSG#gR%OoH*QB@~1BIrz;3I;zSkgdazOc`!;;axP< zTYa}nK+A$;A@o5hAG_>_l7na!E;VK?UWFl7D17NX=TS!5u695rXQmI%O3n2=rcg1z zZ7RR@IiKs}XbAS6)sG*RRE5H!w>iV@*=(XuoGZ5C9>gor@hqd-J;CF5msC}81t@BT z*lm8vfL7k)Yj{*#!fKzaKT7qo6&|BpR#1AQSNwn?bn(NTj&6%y=CulZrpZ@K zuDL*Qw0IP&!@VL`aS@21K2jg)e_~Z6c$;5#HfaK$9*t~Znv-oj{cf#B`{FL;TYWIs zLu-nM>yr8BXHsTlHK?)o?<4&`q#0)wO$nofjh2Nj&x?B-#S88d6b6&ZkR`>C&F`Or z5BTxs;8Wn7le6??KsYz6fJwnj#b8p5a;M#PawY|@@Y%~EtoCR!QpVSVA5;Jr`K85xfD;GnGEx!2U>rxU}XC8q%q`_#MMA&+!` z2dVe4{T~8+|NC7(q)%d{wKu>D6w_H7FVxpA}(UGY940hb^Dcb$}Sk`VJk}mPK_3V37KTz5WixQvsYw^2kSDJ zVT4gx1-|lyzYhW9{#c(RkjFp0urt)9A`)tF+GSwu*Kj0O&YI5#2sZ#v%UJm>!ua#sKc*Ev~*g6nA+l9$!u33eWb=+dg%M@Yb^iyT(*GieGk0SFd zRpFQv&1prOHTe8|%ptqOoOwK0RSv{V{hZl3P7Fv9tHg)Y20H4_1%)MPOxt~zgdnxR zh&|-r2*LxAINBKL;kFSYIIK@n0c~blVqD*7B>GI9tB>He#&vaV+Bf(@A6}X|De&8) zTZ~|xbTm$}MKhxwcsGD6I_mIdbV;aRYG0wEiqh^k5=!{8&(~iLTwIJjK^?C_t6nLp?|({YB?PXg0fWaLzgoN)AVPkJEj$?L484GjSeS8xNMkwHteHXXBhg-%L8uCHn(M_ z^vauj^yndcY6hG ze48`+@QXmKwUPsj3~TQKdFH~(XY(pN)Os^iE?2&TVuf1jAul_J?`~UzR1QSugKQ89 zdNj1Xpgtk5KPW$AD(@9d66C2t!1?97WqDI$y{CFi*39&S-5^$7)m`EsIY_1hhV#xt zrsY63@cSK313mA%g#N$M1{%n8@t$(+;rFZK<%ik`zf||J}vcos@sZFSzpL?sM z?;=mcwyV-lO?YkmO~$53h|&>?X&MVc(>jS@OVV^u^O;lF7-`tfK^V>(51n7EboyxT zx$taizf>bji5@6zn&~(U$@txNPpEt{@pLbXOa$i*vFshCXd>N+Ng}y6@GS zzsG<6FVV3)R|@zqkY+r7<2jhj229}tbyuGdTZlFmISUq^#1DOB@_&$yRb%@(brvHKg@43n>SsF2f1M?53sR6{@Lb$?TR#z zDJ;HHcT5srgAwq^It68756Nf=Bxu)81h;{V=@v*23#9>g&u(tC-xFpxg8*%;B_+1) zNx;&&tN4NGVRvp5A>U!AxUETw))Row71ZC@(SG|8BXBz{px{^0_R`({q$yHAh9^33jdih(Uh?j>v@s) zG*F$7gv6i^zUiVC-_$u(`z|*tbifb4OdW(A0=g`n-iw7->z(;|C6!N18+^22O(_@F zy`xuxXPL3mw6hBdvx;J*+6A)&VXW^p5F^(k-+rb6SC}p|FA&v4Y93xKJ>?LF&(2p| z33ER^){b*;ZIR|N;nBBWoouFQjg&kUftc4PlOz5*#4c|PKjAI0<_5^K+3b*~H#Mh~ zu2PbA`F+2`DA7O>-A;D7+BvPx{kCN@1#~^`TIW*u)YFv!KbPvlJ1|4V=(a_@=>oTS zAT)`2KG<;9%ydZAVBH9uWAYHEKRvVT(PWwb!T&cO+GLaEnEl=?cOK0maWb^P@0<}A z9RVw9V-omUaz-!#G8aRp4}Gsa0aMq$8{IEiT6e9}WZwm(h(xuGcDlD_Hx^E`Ce#cW zn2JSCDD3De?=dVy1iG^wW~9w8a^>IpX6cUV)AVDCNd$)^Mh(20KA)>Aq;kC}_Ome1 zaupq@D7wH8LUBEb!m0Q6I&a#_4O6_$;+*D+xq%s{GnMSLM{QF2?cgrqqd+T;e`jo8 zl9Xk+vSShrze^X$7y{arIv=c4Vfh;=QBzo59mHM2Wsi-!G3v%vHx~v9 zk5&gqh+mJagAgaCbeBADh|vL;omtBQc|52k*Kk7oJwK$2yW$fB*l6>xY&=2PIZ*ia zCq)VV2*V{8TW#b}iPhv5Zsz6i*#$nRnHbnE7VB7f>Doeg6Y};+oo7==rY@DIcK3l62eZnw&^%1n9hndA<@>*Iu=h~?=b*c7B_wm z>>W5TSH>1Q8hXjrMG*gEv5 z?w}5HPt`!}FC!hKAFEe>qCeu=h~%Da3Z`%<(-V-R2B^fn+rnL^_2yVrxKwE?0culr z02&Y!Co9f|>;&=r{PTkwZEiPHy_BqBkG@R_)Zz@WaW+TtwlsRXGd_QLuQrf7Ex*~1 z4_1V0en&Xeeh&_^pK<|~_Dr!L+2)r%26gB-kC(zI7L|AA`S&)n`KjEB@UBH5iHNel z4&+H*lcd?I3CdkQ4WCbRfBoa-em2ZC+yIEpabUUcrbRf{lsATF{h{4R3enn5=r2!6 z81Cyiid>32jCJ^WP>i1+vIbc6!kQqniqwx!gf>&kQ*IKHqg_XH8~YYT5?+;6u7RC} zh*ZfaW6HOpH`^-YC{=gPTgl(kCNQQ)A^rPiP6Z#m$TS2yI?EuEpyCYr>ts;@JmHxE zhYjYA7U0`ROx%$giZFS!W9j*2D0TSJU&?|(WdVwZ|Ov7|W zo!c+9`ptTuq_ib0QWPE(a1b*Q=ul;m%A?hjL=XYyPB1h@oa&d`6<*m2kur+ctSgo= zI*xBL%n_l$If17{OW0}V`e~9m8RMi@FqAWJT3_6`J70YjV2h~S7JM~DhnI}@2~r|9 zh9lQttw*Ac+8_eapU=QWe?lwFU)bP~s+Nk%F`Cyimj>qf?wjusXaoRPv&0bcp%){b zlyLu$@6@cuAS>tWl6KfdaxRfMk4K(fkXyVj`Ix+Aemw$L`hlnlbmoc(SF_nrF8bZkZM2n?F+Vm!m=;?0+2`VB!l7%(@!0*e%*h_F z;G@L`#QFLA_M0IfKBGi>nEi}0*kFQxB2Wel1baXOGmK>D#@K*)Z*I0$v)woZbx?VrOH7LaP|OxIjii zZlV=_%&WKybUK_XjVxg3E3_7Ur@0v3#mkmU~DOj%<*cSFHYQa#lPjT;&Pv!>4?s z%>}90$<87Y(JR6)PJIVwXemnneq{|8qhhexE}E3I$AJv zVc0uPz1)$bN(SI%bCti6mZ#QQ=>a@oY(YSA$l+Q^z{D6#CTD0_oV_;BMwtc{oNS@( zq11=mQATJCeEA*bYXqlaxuj(qc@O9OrX@@uEvY<9-*R_bH^8B|Ji%0t-Sd0`6WuqeVEY&*=It#!SgORJHPc1uUn=>uO(UJa8jUY3E`#71WMrgXLP;r zCi{4KeZOI|b;oRUdg*(80Xus@YadoQPh=tYDEYUv0fz!<4_x^WVOFu~G8rtni-PKx zAnjMmXE?#l3Q=lvsIY<{7bZnygR55tY+x0qpB`jaESF8Vfh4!G`bGhk7&x=@ONsaw zw>2~C!8vvxf9*lSuP3y~Q}b>|$t>X`k@&4d5Rkf=UPteVBhm27L6u_w!%S{A+2KZt1TBurt$6jyfZ9Lq`V377wDq zPlyAx1d}tsLx>(=96!wFZXywn%1YPsIhL~mE@Q6i*P3rH-OE|4V# z@Lh+~3!&JL|KE586BNsgnlGQwZJ4hjs`bj7O&wl#8Yd1Eio22mHWQzW6ERIL+Hb0< zh<&?ztEEoypsVM2m$~5qGn${cfO2IH9P-#HsGh2-+c!j2bbct(?pc}IshSXM>^XrR zp4yrte(rfM+5vuVY1CM-GXOI_ay5r3ZPH|KF}UkRX~#%r|t1h0Feh2 zS)fo5FeD5**%j^LnjoNPLpmGtUr)73;RGOXklOV~6^VSEY zq`#5>bS$Rcd#|PK$;ItpH^+t>%uVawb;pE(*t)}jW%0!QAs@1oqz|O0FX$;$M*1r6 zZAw4pEpUZSlck^0!#y&AF=kTnBdauI_HyVNfseoF*_O-ibB_o4Z^93)8*%9@W{ko- zeu{1L6lAmft!3@ucsOZ@w7n!AuzcEoWvi6o6Ca@UQMi_w zQ^9W{byNI@HGD`L4YvG*a>2&^9T*4tWx=Wt*cwisFT<@2=I@dPmiN@cdPslg$l1%o z5e_4@PqJgXE9Yw}MYI%3YnOi6=0q=X04>ZB4oTZ+lU5N5oy&_-u%m}-))AKz>>(&# zlrH!F8?ggE|HyZKce!_&$Q{eyYDV7F(N0L(lFR>spa}RApOx-=@T|^G8}7V70?!m9 z-h1!SdRZ|@`L$LX1p_*@5%`FW9x`FcIuA*oKmUvsBrM2rZnBn>wEv)_#v)Ge)||0! zr_*mKM?bjRl}uJbGNk`%z%gz4uaX`VOEuvsP}}~l@g^KV>lG+hV1x=^e=es#yX;Ah z5wSB#un+WCK!lp^@wK2{$gN}wXq9xG(Cc(M!P40i2y_hT{EPun?>9MYn2iKv)#xp& zmfQugpi47W<2SNy)+ZE~YwX4?dB^KCdGp>Tgc^9?(FMy8xo4y095(&ezjBzsGBpZX zn|$`M7$;$hn-J?+7oG3Cop#T#d0R0d`AnGdD0t+R%3gBe^{trYQ;BT4sub>UKIVRj zkpr(jqD1;1eC8u;VC6Q6P2yd-ZwTpY^oqWNkxkyIZswEQQXYS(jAp7@o9`ttPJk7{ zrf;PXLYu-Z=#?K$H_DM9I%dKS5tPF8wmf50*{UN#4&L)x8hvJ?by z1uCdT0z&T?!#t2Gf6G5bT~H)@%b zHnD#2A>EWyqdg`RMg{K4Cs%f~{1@DgqK3DOesqsCsGXj(KD{EGFjs^BV2Iok+%_#X z@I&NG302ww*OG$xeg^6|$9yrgrgZkuynD~yi0Ov+sq^%OeY(BiXP9S|qkYJF4>lOC zd`>i19d6y=Tx=|ebZ#d^r#{mM`?6o$qhxIrB^lL$)fWnP$&J;`^M^?<43_RV+`LWJ zaXfE=^__W-&P}Tnc9dl1CCF&PVu;LBd3*1Y zchoAYNr#uax(ysa)rW3=%e28F>;!aML=k^IJTO2MODk1auMcV&4TM}o;$fovKMUOMowV9 zM;8uQL-bVP)Q@4)gDZ+S7PuQP#Rb(Md7LKYOQQ=f;c5s231tI)Fh3Nw(FPgtgnC@j z!Ocx;P3jTV+~|P!OtU z*|>QYTyj&kX>TgoEQVJNB1lk+UMB|2E5p3{8VdzkD?+H5@jbFGAPJKEVr=I0+x|lM zyL6uZb2!-PD@$raK|-TnfJn}pUumsRDz-ZnQF;8{I9l2i*hk-h(-BR{EBE;3gXHpu zXzfiLD#mJ~Zr5@eSjJ~s?$EIG+U6u+8Z!Au?dQ}xNMN4@hPwF7z`J7X(KB%!F;wYa z;ZUrdV&~b_EtWQGrLY4^ji?i+DX&GH;JvZXT#A=;zII!APa!9vih@hMtTXV{HkX@j zuMoiHkCoM=^o9CS4<`sOE|~Olu4J7$Cz4757)KLM66ceoZ@?A^UAz}9ttXfxLmGc7 z-OkTt7*^Rc)g~ByYshwC+8-llqpT_@noXtIDY3wCfbDVg+8uzI(qpac0pw&vxX0gm zy9g*(y*WECN0zHxfx7}jVcBwB4rMf2c^%T}-z1H$fy!E8>-pZjatH2Sk2%B=p?LSJ z;KEi1kb6XfoD5VuTMfX;~?0 zo$Q=*=p4Vu9PV9o5|1yxmO8{#FqENEVf*;D1`7L0aCg?16WLLAjp$e$a6LCQ#iCgl zDPX=Zz;n7ghCeycjONRszBMd?8fEtixTqD*d^pLclC8q(83HH-u`GDET_dKllX~tz zVzvz3eW9MET~z3zaIZDfmpyU)fryghJ`ccjo4+5@Qqaj!_PiC>)5fJ&*~&UNv%!H} z-n#k-hk)7>clqrNSUx|+PVG2S3A2)stP5rH~7Hsi~W zOl_iGU|k_rr1wE*I+vBd+5jf=!84D{2EzB+jJQWLza>T2U@Ek~O6Pgpv42)28`Y?N z0L}DmAP4+w5$tNLX&5L_ zXl(9IniO7So`2b?6!glnY4C;Z8}M}UwQ`1Vt|Rtkk~0@YAOqtp!_we?Ga^|1dZj z2JT5J$zIH(1_#jyewQLSwa!yEcS8bXqlc?<86Fq#cfHY{H+R>HCOs|j7^Ggiqk+u1 zHAM}va>F&y~Ve{tH z-R9g9zQ@j8<>=?X&fL6q0=lF<-IIj`%4{NxZMZbeHfHB`qcCPX#?N74TaRFGqWzq9 z;=U564S&7ZUKF4EAYOaVXvJhF?#(AK6@&imqZ4uOX+=Y^{qMQlPUNkoSou9IsfP*C zvWH42e-NkCR8i4D$VvQUhum#-`Sk)2x0D?1YHI7dke+eKZfWwH&Yl4_@3?jG zVRKeMNJI~)HlAvsLb0Z6^_Q?TV-!=XuYFWg{V~9&;_wFa`xMVPgaNcy9+Yv40*xxS z=sVAercp%Q;DM^7pBRDtrm(E({kp;Kks)r_Xx+ec;O5KSBJT%es~UF30#d5_w~I@R z75D&LL>J*4!sNx0a80*6ywS#!m3(aO!bX($w%#_PhZrh_{~cBRH#Z#EL`!hj`A<9B z{?C;icNV|`)t0!&tVZUM??oLZYUkE9F#`1tYv8@cl?L*?#?k0i<;^|P3-Ds&ukEI4 z-`y8oQ>Fp?%$`nO-+gi5y%f(UHNGhSLPduLpAF{YpCp0(>e9o-brfNc*_fxVbbJT9 z9%8Y(CDr}@lB&4Zn5_qR$pu5|_~tk#GCkaMlrYhDT-RjFm+|)aYtzS(ecwX_>I+6~ z+LZj>22T5gzXi75<0Z^0WV4j?>Ch9kweX}$Ci_&wcH_jwP!o!?x|My?q6kRtb18@F~aYoylFag%>2WJns8@CD5N4-9H(zZyn7SP#UI zb{+aYpxZ&YEB=Ej*(V7)D#r#-11yUNpO91I|KzO({65Zm&%~P^AMbxJRrHR8dE=M< zXMRGgc>SVh+R_gN>I%O#f0S7Q#w2=@u(3zHznTY8)n6^J0kt}j5v1c(%>u~@!yG25 zf6U8b2RMeiN4fCN*5|Gte^M4Vz0@X6GcAPKj_a0>aY-5W(tRUN{Pp%1(P~^I8b#=G zz_ZTu5?ci8IwUbN#>jy-J8_ii5}CKEktYR&tJ5?+h0~!s!lgm)k_2gexA~aYJU1GvV!c??WmhhKwA0}E*lirGii#UT?;wq~ncQlR-EmCF| z=G_hPrQ-%LVne5gU#Yn% zuQe=+*qd+eCHBoW;mMuy4RX(HkSvPT-7nrLqP-8$vb4Jd%YhtHkrN;*V(5)kf5DWc?eSm8L%$;(o1K|rHFTEiW(x~OL(6oaACK1=5ucd`U))1C0Y^(KVk_lxp zFAIk(h!^Ddn9{GYT#LwpLi?g5gM6P9f`WuCy;W}s=LNm6Pr*Y7cS}!UPBtzU|tr0C#QYy8Ub|Cr(rC#^6yVDe0%Eq(2i{uE=fIrl5j9>rS5;rWux?PM-K0~8vP@5*CX z=SP&n0X3L^0b`htf&3XIwY!wq8v0O#fkMbSN!|QBU_Iz0Sf0YE-o(vYdZTa@G8@QT z^MwYX0LeZ94TSNDU@B_ZRZs@$*9Ojqrp`z&%7Mra!gL%0_k6+)guJK(Sl~ZRtc%8K z8neI<%|{=$G0Z4Z3>k4BoQu>wz~cSCG_;=LSl7i%tmiC>gSRS?XT(bSf5U*Ypl`bJ z9Kg|jO+DQ~)rj5-EsPfV91pNKHwTjlYMD$!hofwm*;DQzaC%FrJiaskbntBxd^|u0 z-!)&O__lgOq;<*ea;@#;LXR~h=1P#JUtTqAI<9vG9(4kSJL{|`*m&toS&P(-SiaNe zeB7CUb2W42@cEbfNHaNc`ksf4?p=i3GzyC8vNA75Yx!Zr&Ciln`hiNrwNRCa-O^tl zC-)~$i)0x&oVI{mUy9S)O*yA02`O&*+Za1?P*YG)=gEkMa1>O#bDzY1w$tfkInBsZFJN zJus=fWqRxmQ%Qwx!w@eYII(4Aetf2nRF7GJhv~zki(*;6S4z(>F9u|xCY){;iSLJ_ zOzLhA^!uy`Jxg77BKMie>Cy;De=1+FT=tpj?%c#**k^v&=dSU#n!;&@nU|V8v%bN+ z!UB3Nr7wjw`l1WZlZ}0RP1{UXe!Djs1g3)BE&?}px_9F&4U5&+!7hF`kkCG|~FfCqac?`clyO&DPvjF8^G|lQ+-f?i-|^o0hVaB!ZHA$cyr* z!g|pXp@KeBz^F3v%S?t;@nN*v?)PQHfp);0!qRe6E`vuwlhW@bdBm8Gr3#G!MXYJ4 z9+?!e9{eP8qK!?vQ|zI?0Ct-lO(s8BErr(qln+Txa)Ql>2dkLLH`?KpDyk-aSo*te zF!hf$+vzG0!lFB~ikjXJKibf2F2{F$cLCa?FKA%|70SgkFS+AldO2NHsJHw%Bc`u_ ztZ0#EgG)n!gNBKF10hJSGIGhQh+##m?e@TJ%($t+aqm=(N7hgIbuy*<6F(J};XJqV zZ%wf%G5;#vd+P1Q5`C(x`y>@V<50_FA6$=9n32^;nNgojH)gyhNM5gt=SiK#yg1FqfB;41li@P0N6}kXK%OJ z48ytG(G+?>nTh;5?~`aozb+ZU`ZGXkQ$XV8>Y8JIY^dNL@m&F}3OY-Ij44k;DO6RO zqtTx!l&Gn*RbrkALLlnX8UB5DF}lzefjY_t&@_GW!Pc8{O+fM5s2Fddwp>KFa1)r| z@891yaW4L-5#-;sed=uZgYpo(Z+AQ^i1B8eJG{PUTffl006WWQus23l z=lEhld1X`zXx*-v$wqo?Nx*|Ej9`pJffJj3K`O*uv9?)yt}VmT7px0N`1iA;U$>tP zl)__lyUse_ak7K8wT!pO;TE7>vQHqM(xrwO>J;fP{8r#MwN#phn@zsqyDYo-Y7|v& zl7_QDDxM2Nr&vDD0gi#29T_vlMUv7K(>lv+f0Hgk(ugT6pn&g<+5^C^%7jxj#36au z*X*s?=Y%hZ7pnSee<|4*p^B&?bp5%*U+%FZzpk(ybB7ewPW`S`G2{abN?{k-W!3ZA z|L_I?CjaER0?OM{8#)TK9hqM3o8xIa_y%v&YRpn>Rl7Ek@Rk37;ujZ9tL=KMx9k^Y z${tCb2;DBEGD*UMyX|AA!6R0{O9%}1#B<3WR>~7KlqOWQ3HeNO_L>XGGn=r}vLC<; zET_r#rUY6vphisz;ZeBpH+gWVj-C+!D3eDfctG}mv-Z1_7~obUbvoLEai4>h4x4S% zovaC7n31LeN(}yi0ktWyq5vJd5O0#HL;vol(?EeDmLaAPFLE0cx*AB?;^~#6yO|72 zP;81*s^x#UZev0Lm<-ANZz9tF+|`-?2#|+W0YX*Edh;5ssZpK4fW{QL5gd(&Z{5}aF+H(6O>efaPO}+<}Yzfg7h2nC$FqRNg zhd4`!lVJdrqj~KJ)s7Qj`})5aaWDf2Z}>_36Bz%Q{E3OFy>Y3gzTwHewz@WipY5Bg zFWvzvtB#2nx+wDh#i4 zyj99cg_c|+Q!b^ElEHn#I)fE!drp!4&-LY zLosifGHHIKtB{Mi+hYR0*<>c^z$Hx<=5TqKJNBT&gU1v)Ur=Roy3TVE<2S^#Q0sX` zFw|%3NKaBcWE^8gLt&Lc2e4W_fef`* zI}KGSp-`|f%N1_Y1ijN1D_#3Jsvx!?+p(G%tiJxkJBQW-y>l9Wd*{^Ddw9pLx1gxH zZv?#uZ{d6=Uy*px6b}yB45|9IC0U?>Cc#KQ)Emhsr1Z(GTl!kLPV|7MPMZ^OF_*s} z%{SxV?@2kR9vCvM`IS2v5 zq}G^Hknah6z^qc!(Z&nrMa~JU0}q(;K9BcZ*e1@VqDY%3hJWaRasYwFb1tU!{C%^l z``1%(x_uX8$HLDXk4XOZYyvSfe!FkQ`U*o3>%4S2-(H>0>vL7)2L20$A}z7lksW+fHr_u6vc@qXy$+(>1_6(>1! z1sD7q-LC6~Z!-3I*w^kGSTrK`rSc}m^$!$7zzYT0C$7aMfER-p6zekE{aqa#i&$8KspN2Au13B zq$q76O*(>fqy@ZRf@`n6_gQC*bMLrk{{z6x2y=e#`+I)R78z}=UzWzoB1go zLN3^~Fsa~0JXO)cMp_2C3XQG4GIgDoDJ1=*XD{5l0uXP7057EO&H}v_Sz@lGcAA(g z(HEZ1qSfNkPSTfOptq-iEYF|A>`Jc@=^D)e{1$CfYU+5PKHT1bB-p9kyu%uHv<$DgSha;H?_Evn8 z8I!JdiVXMZKgBcNA&|eR<^9~bm;uVKyO=%%Uz7RpN6`9o@&tJE{!erlvL z$%8O+C+E>ktb_iRmY-;_-XI_6Z zvZ^R+#hXpqjWISkyL{O!;l?;jK1exD=R2eg>9RT-O zyCS_KnWnnDpPz@Y6KwAtsb7j!GL>&h++ikG{$U9V@!3eQs6()>(`e> zWv=f2)zXWn306vJfvYGJnTLgFd^+anM6v1nX7a_5c*%VAKnF)BO+&4oME!3c){Zu2 zmI}>WcU(QM_u?_orbx!SC1*`tV!78w{U)~`I_)Flr+OANKQ0lBv>Wk@Uytn zoTRT-g^IAu{Z9nKGJ9c>RUUk)kB?7CPBttfD=jWDlFnI5m<*;o#KTX_P?o`R5E_FE5 zMsw}bVv~=3|He7R)aShxVJ&Ni-Z{huBRC+hbt4H0Axl!MFce$gl9g-X#1wEdr z)KN@xDoq2qA&$i~Mg!!%uu)Sx2YU4Pa-_iW#{Q=< z#iU?%oD(`W>PoxKo28MFb>9!zlEUgZyA?#~ zK8SSal_vh%Kp^B3kkU8VX(bmL*?H@VvPMnyX9;514GTwbYH9Ajs(KdJ z5_$Pnk_E}OU-P3k>0&}pF3tn0cy0B{%Ws)jjJ#FpZ+W7H>HBa1Llu(1g@@WLjppMW0#O4@4TVgj-nR{`fRXp#ysJeVIA}PT}(j7kq(;{iNRiTnB4m; zTEn}v-?ytN}ju~nLKlv(6=w%et~gp2?O&B z8e<`ZZH7koP`@+(T)yf3pOtU+LR|4~M;m;)F`)gP{Q`1{0*lEk4gzLh@43It8U!|@ z1iT6SD6?_1r+V}en>E6Iu>7u8K6@QrXu@}fLMzb^%R&o6)PKL-M!SQ>Bsj_a#~S&d zT2rOE*fns(x!h6oeg3=EO0(L4HKo(OFI&D;(y|8sHTF44P_215wDRarYl4m2s0b85 zS)1?Mo|;j;?4Q?vNW~z^1``d-Jd6lIY0NrXxnTr4&ZGzB)UUZeqX~BZH1p6 zu%>l(9u9dA&Ar}IgtZqE^y6${TlB(a53_AuB1^<`(hT{#OCFIA5mF9@Nuw5 zD(~M}u7PE4UxpL^%z?r(M*q#8!o^39YL-XUlhFZSrT_KUN+04_hpkA-|EljWy&d!= zt8WQc^VZG3Y70^zEc{>;t;&o7+_X#10D1rRl%VR)ckdTqRpN?k(fkqalOQ~zgg^I% zFSX@*OIChUBD@OFB}A?E;Xq-}Ypwf(H0HLffV+arD;F|Lh=QkO=i-B2dyq3hyY#)e zTf251FT9SBpx@2>M&)4wSVt^9sc4jf4%D4{NPK1ED~C`Jz6WJqIwdZK+a-iCqwDen4Ylda4JX^U=63nQYUc@o%oETp4hf%NA`u-%`=n zijU&6y;Viy7QirU4W587CbcIBhuA^7^H@eWkjOpPCeoSrmR__uPlnrpxrA^yOH_)| zam01=g|GMpyF;*R#Yf2rsWn$@mZL=hmU%}{loRlo(F=!J zo7LjoGD?HG736^Zi0yv1lwgCeR+ya%EX#btSa^$BULEDnbc-|78r4)^osBuoDJ$z@ zr#RO|)fz-scqBMT*wl&8y0uq;!zAY*9k3kIC6)yL_6t_~zX~+a!e;(Q&r;J2n5bt! ztPPq8&g83T>K_uqmo0w?3lory?wX7TRJBym#A2gD@|i3OL#%6Q0i)^j>*EzL_)3l} zowoB6!$}0zchtu&5;s*DOZJJLN#6QRE>Jc#iM*Aa#j?OX&q^5|yeO=ZOkpOhk zF&*zH=o=;`n+8fwXGMEc>tN4dvglY&jUsdXrz(LVIIJ30J=R!J&1n3_T?gLZeBx8x z7+EgR6V}b>>k}=PLzXb-BWvJMICo}fgf7wVji+vpmrjcr%g&;ZOV|Qoy4(!Nwa%@J z)QxGlrWWmpSD!dFaSqjZy>#juM`oi5MpB4YE_e95?h6MhZ zeaO@8W*=1uyRm^Y*ce|@Fg{_@Gi0%v%YCCp(CNo4pH|&ep}<3pp)3-Ili5z3&3CBL zY_L;s$w_BD5)7!gr)}$1ExDayo{+c0&+* z-?M)_Ul7bU&jFcIBL*FaJEMW{{+)7S_){wcKmA>J44jGGKj_dTu87d7mEf7z%0#Hp zP0IBW(j*AMnffLakq7hu?f1SkO2uV+A=y1>@q@RcS)^+_1CGXZ`r3*4vL)N zZQf8&7STRjQ`&mPr@4?QvVH&lw6gt}S>mT>wubpD)D2SCMVO5G*^u9U^?hPss7YzN z%US0FT+j1EH)mr`<@|7aPdQE)#ZE>HZj#O7EKy^TJ4lw(n3p6$*R!MnbA5 zT{y3giTf`m?9LS1Ffk{9Aq2k>w-v{?{9-iaTm(H<0~J;nkMzL|@1r2^Ab37qkwNJ! zEVQxvz^~t9)EMeCTX-(~&7|<9UY9Wx<_zcAXtUC6*oY*DZM>12*nc=%3#+IF_9{JR zd$dLohelT4UGXju9!D^D@mbJu$^fcNpl&!EPpJ<`xGe2bu-YbpuNUBxdgpC5s%$SG zvs~!-bnAg)hi&}4{=mE48(^*;jimN0Gm$o9vq9MA3Ezs$F7e{{nK`mJ)PXx5oF z-%>*(OF;;356_~+XlP&Vd>~nPim+F>EF-zDy6Pb81Oc~`FZegjqixvTNV?GzYacL4 zBaCn_eu>8GI}$bv!4y%?6L>Wj#8G0p)14BMjW3nOdY?)aYLjc> zt#+}$p}VDy@8N*yh|St}@R*LXPSZFp+HD$vg$}9TBScw?r)B};|4%JjtYe5}!hUOrxSYRCRhofydMWUcZ`5y*Og$gW+c^}xhI}OtBgNi0rkRGSw_H<|x~)2BK^x)B0=8P;`O`T-7@Pk!r`-SB zs0Pe+RiZyBa|vsyZDmH#!j>u}qAEuD$D`}d>t@c2e%bEJDhx37IbX6ISUBi@K>)W? zIJl@jr1CS%lQJ>)HLKR+!XxT~4%jk0N*SQ)nc&o+?GGQ<9(t=QzP5Qj6!4YNQ{Qh? zA56+M&XRwoJP6Y1fUm)K9R!W&^%5laP>j8era-6YIHh?S5-#fA6KJAj&Opj3ME~`Z z5tSm|Q{l?(CL7YQ08VIV?VJ9r|EhxXmjM6iT5>_hXpBFeV-CWCC3V8o!&7)w^{1F^ zq!)eZOnK)iw7dLw(lL%mmAwxBb*QVJ18M$0qK|*?;r&rjRcFcYhZ$ym;#chRW2oHk&)8>w z!>Qg6FFZm(p8V{n`xSo?_MMTtN8c$-%Qj7-chh>{%L)|D4+io%Ok;97RkEN;>At&$ zZxFI4;*?!kuLy$1sGa-A%Cf>=04Pul9L zh9cL2X(q@^T4$)D{{^@ux`}v_^*W59_h=HiqQ3P0q_1}vj#H@7BcpmQN0y2^7?I(q zHwWLcsu58f|8ObDP+bb?l>J4YZwA+zgb=g^yo>b^)i*H+O!D$s;nHS>ahUDDmyi^= z-pkZIR{cgUZCo^eQqfB6^ep|-`zgIAda;PXa!t=h+*14TUX2B2teA8k(p+jH*gK_b#WB3^4C{MvB^cs95jn{fZHj z^5J81b64_?Kc^OzLG{;;L1=tseOLnJAVK(3r_g@;jIQ8CmK`oX?VnO!ZzY0`kjD%U zO^Ev@2CQ(Zu`#W4-=mJp&V|%?X!NFt&V1m(2|8E5k)+Qd-2!-<{LgvjS=!%}vdX$U z(%+_n5*0{?F}mK3X8-J0F0&yhXfk>dgF%ib{Nhb!C&!g@4} zu(5AsG^lcisfiFWSYp+b_-^p?WwnFj%1_s<+dA>je7p3x?QsgxS^fOV^iU}sUtun# z85gyB;3Mp5Qmv$epJB*xnCnBCzb?r5(*9)1g(<7Cr-VciXCy!yxpvQ z?|5Ya`MCIV%PQaJ-&WmhYZp6U#P|*jW}Or8IHO z(g!Bd`NuoGsXq)TMHEA)u{Vy3W13>ladR3hbu(PQFBonn3~_j>Q7-&tjoK@p=Q+dAPjP2l;Sb_&EQVXOXcG!31vc|y z@RW(CwAr7^q~-HBw)WBnx78d_^{Kp8vWGiL4drLI+w~!@KL2l^w1>X+l$V(m(PIx9 ziQ-|P;Z0BIfQpcJUCRzdZ1&}g5$Ns+9m&SCV6rhzj;F)zM86t5wdr?#d5QVlDcC~)%Ybrl5OnCEry%-gT~Pj6pjd?xA4!$ohOcD$b_PW_pM%KZ(pTuAWv09a% zd^|z(GD$8?3znLU!iFv*m7tNwP!ZQMJ+yQ`&U>_4%Iqv&TIY9S;eH27Hp57UZx|;t$Z||mJts3+pspaz7rXU zQ0eJrskbYvTY4P1Y-_#8nELl$37|t}!`#t!coEw@=Ly(*iUhXlE>XCPeAca7>f2LR zIcZbIpwaS3l%P3!{Z{0w9#7QqVD3*sjU`4Cqu><#A}w#p8QCv+3Fc(u$$&iq>?8-U zFZaZLEYbmp9C=UVoD?~$bWDAirki-RJEt)%ToepqpGd}$ z9&Jnle?#@8qj;=fr46;b)1^1u%NvG9vzNquF2)?nKbdSqg~K}W0kUQlELBhQdZ=GA zP~w5R-rH-(D)YHOWZ{{0AyUG}ok*u*cW>z!#|?;kI&2h&vePx9OB+7<_Bb5=Xm6TC zjEPwC#^qTPe}^!VTH(5igZ2$z8(<}vcA~*^4UQRO0@;?7 zLAoi2ICgIl!eXOZ8zH)BDwEfTN=?g1`{>Fxf{^|G$z(L$ugSqvXA({NLG2HUI00*r z0zT{1otBd%0#UwDRobPug27HAPV7WsOV}&GpP7o})h;&OzMkjj}rSlE)>lv3~U|Z4NK;O4<4bYeo|T{uE?ukKqWd9;&6b^h7KP;XX~Dis}ySI-lzb^PWlPTz_x;RIxz6@2brThxO?%wuY z6oGz@t5$il?*VMvr?P>vt)Al)onPeK*OUQacFYdTS8K;MI7x8c*UNKYYwpXu2S~q$ zs^{kh+{>&cDBFEoDy4T9rBe@scx|YBJn+{~=N;NwREBKULQ@Cl`7FM4G!Jf744ikS z{NnOzwgLx4{k|2`{1Qio!yBT5Y+*ecj=V)An$*0hkWh96_+d~cRM3th_@DbQ|A$2> zu+-WClhn}mXC?pT$8xQzKYFiw{OnTlpL)EazJgEn{XREGR<)f-&H*k@T;ookw5r9# z`T5OHWDn<^w~WozFTf`Imz!{*fZgAJP2%*B?F8#|uTO&i&)-D*l~TA% z=xl2o1EL!$z<#mK%Krb)^koo;5y0Z-tOez+uA6izm;wkIeiI=@h_K^8JG;(F@-ANj zA%JW&(t&G+ZsDCIV?WF}U)bQ&hwBgHM!O48-=TH|KV6WH`P+5*h_lw&TQ##(CZM&8 zS^O5B!*FxNP~wnLh&Rsv>dFJZuSs|K$Cpp0TlbNt3V}ZWbOJy_AC7{pzVh^)ew5-_ z)i$u*CHua1#QXF-9Y#%NGQI3)2Pjm2XW`QP!2ED=qNM)grdKKES;bL#R@Zf{Le&c!&;W&7_@_*5 z3&?qtq?N9!0J9X(hL5UU7#24muP7j_I1Su}6-|H~1a;v`G%`q$(FPgGOcXeOJL?k{ z%thCAfMeDWI48`r8=I_znVG;y)Y*EVhou?HcI5T+sSq7mJ;3_e`(QVGyIo{*<=x}( z(b>cAd^OYF&3mOToE3)2O~%J4<=iyGMd4j^XnwC^=sjHuNoqhW6|6oBv0k5qJO*_#l zOvX7)DB>;-b=}6DCs}owp2w}RZO64KzpI!N{>b#y2BT`+(u`i4j4zzj@1nMZT*z$R zcKZ8+wA!NoNPq0cXzY1%S|lmilaj5kgm%(dIboWzL$*PW44K;j@~$=e*Hr=~9m*k2?zD1I zz0m${_8Fb&lJruBqJI~S|E3Bq^hSKdjg1I8YBr}hu``>zTu}m~6Xqe z4U1kJSH-_8XQvO&qnXUhqZ4@RxY1hqoC)E!u?Oau^2%7e5mJY$rB5TyWF% zuU#{bBQ_4v=H@#9YJ^7wIqMY$5rb~)#z}q=lsn8QFS)?E0L$qW-QFuizlS-|l_fqa z1)kFvagO4v7%|lY_ zlf@d4aYag6&!suOWH_NiA`)NE$28@t?WMDCdkI=9DbA7|zTroM~ z>sg|6oVp+?l+kY~!#>{VEFHGmzL}!H>vBW+(=mHFQ!u>MCeYB+yCoh_o(4%`VPYU% zvM)}50nU)k`rO$viTVL{n0SGQgs&; z3RnW|7P*mppTU^W%V+lE$#6E|2930F69+y`4Fz1fZtjTFqV5_}WaQ4YQ{mseVBbXkX(Iz+6s70KXuH zeNoY*CsI+myjzhwEZSN^gCC}x8afAE{Bw#mD{3;==}}k>X*@BeJ->a}bw0+=qLO*n zxPIA|{%E)xVo&msbx!UQB@L`0gtE3j*caoJq;3RHn?Tm_3zFfOMt-_uS8lng9C;9+ z>hV$x7EHKoG>rwvXT3AJN?I$PQU)e64;p%N(Au=DHSamxE+qm(&fkE`=B#oS z8o7TAnc#8gumq#+$&$Shf1ga|t?gKi%-B+^TT3z$MPx>m$*xvL_7$W%b1a$kL~poJqnb}83U3N5kkfNa1oqXlH=XqAV1Zf5s| z?tCZC+L(G(6St6Z6)Jf(`)&D}dn;#X5)lyf!Cv|}nSEzT14H8aL|R9m=B;p2oNb|$ z&S9^wW^CU!IhD!YlNw^#d)O?Mgi6wfmT4Di77EE2Cd}_MRhDJ^K|) z(*kuRz8>k#-%9+WO?H`1#Y`I08N2n$^3{3J%>+f=n4#{#GeO}Vdy!IzI+oMS6Z})i zq-Zd{<^s{2;TGFl6QYkIA!1F$eZ;4u zn)#`_$o!E4y45>=FMsZ~Ho@m1hJ;Qa&eXf^;{z_o8)VIPV%y#L84ko~0o&7npi1~5 zd-3>md68D8JBX8A`;+|<&Pln}e{Q4gp~%UWn7($jOc1*4@r>lsCC4atlCPt*h9-vu zjTD_#a4vNXbI7Xn>@4g?0(!(<|TK>%IsA_d#SvA#yJctf(&W6b4crn#@?^$T`KXqK5ifTNP0$vMo2N*UEXkqo3BT z|K78Id{MtA{$)^!I<5Q+KsLBw;6 zeib-R3W~IQ>?tQNVXd_xG)!A@$8<9gT7wa=!SA=iuUfkbF*7&#Za2`K{4f zX`1s}W52W#X3kzaV76|+57ur4{G7X#$2wgps8Y3M_LCB`tCiTyo$nji81~$`p5g$; z>zVoWrJc(T)VHN3+UH*?>))O_anCa!7~OxpKm690Q-AxaaN65#sc#$ixJ-NfEcG4Z fRgz!6?*wFdYHEmI^q2$hONY*C>S+|5u?zY?WU54N literal 0 HcmV?d00001 diff --git a/pictures/storm-baseRichSpout.png b/pictures/storm-baseRichSpout.png new file mode 100644 index 0000000000000000000000000000000000000000..e837d34d7e895bde96f629222efe638d0ac14415 GIT binary patch literal 10568 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 literal 0 HcmV?d00001 diff --git a/pictures/storm-baseRichbolt.png b/pictures/storm-baseRichbolt.png new file mode 100644 index 0000000000000000000000000000000000000000..ea6f1177a66a4beb7e50209e6742dc2ecd82d94a GIT binary patch literal 10545 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