<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7441365055806835376</id><updated>2025-05-16T18:28:41.771-07:00</updated><category term="Linux"/><category term="Java"/><category term="Mac"/><category term="Maven"/><category term="Apache Cassandra"/><category term="Cassandra"/><category term="hadoop"/><category term="hbase"/><category term="mac osx"/><category term="solr"/><category term="hdfs"/><category term="solrj"/><category term="Ebooks"/><category term="Flume"/><category term="classpath"/><category term="coprocessor"/><category term="data migration"/><category term="find"/><category term="firefox"/><category term="golang"/><category term="guava"/><category term="java 7"/><category term="log4j"/><category term="nc"/><category term="netcat"/><category term="osx"/><category term="port"/><category term="protoc"/><category term="spring"/><category term="telnet"/><category term=".bash_profile"/><category term="4k"/><category term="8080"/><category term="8180"/><category term="8u162"/><category term="CompositeType"/><category term="Ebook"/><category term="File channel"/><category term="Flume-NG"/><category term="Heap"/><category term="JCE"/><category term="JDK"/><category term="Java Cryptography Extension"/><category term="Jaxb2Marshaller"/><category term="MP4"/><category term="Paginate"/><category term="RangeSlicesIterator"/><category term="RangeSlicesQuery"/><category term="Unlimited Strength jars. JCE jars"/><category term="accept-count"/><category term="add-source"/><category term="algorithms"/><category term="alternatives"/><category term="andriod"/><category term="ansible"/><category term="archieve"/><category term="assume"/><category term="attachments"/><category term="basic authentication"/><category term="build-helper-maven-plugin"/><category term="camel case"/><category term="camelcase"/><category term="cassandra-cli"/><category term="cassandra-maven-plugin"/><category term="cassandra-unit"/><category term="cell"/><category term="class level appender"/><category term="client authentication"/><category term="client side date"/><category term="cname"/><category term="composite type"/><category term="concurrency"/><category term="corona"/><category term="coronavirus"/><category term="count"/><category term="cqlsh"/><category term="dash"/><category term="data frame"/><category term="data structures"/><category term="dataframe"/><category term="datastax enterprise"/><category term="datastax enterprise search"/><category term="date manipulation"/><category term="deploy"/><category term="deploy-file"/><category term="distcp"/><category term="diy"/><category term="dns"/><category term="dnsjava"/><category term="drupal"/><category term="dse"/><category term="dynamic loading"/><category term="dynamic schema"/><category term="embedded tomcat"/><category term="empty files"/><category term="enum"/><category term="error"/><category term="excel"/><category term="exec-maven-plugin"/><category term="failsafe"/><category term="file"/><category term="file exist"/><category term="file to string"/><category term="firewall"/><category term="generate-sources"/><category term="generics"/><category term="gmail"/><category term="gmail api"/><category term="go"/><category term="gpu"/><category term="gtx 1060"/><category term="guava resources"/><category term="gwt"/><category term="gzip"/><category term="ha"/><category term="hdmi"/><category term="hdmi audio"/><category term="heap dump"/><category term="high availability"/><category term="high res screen"/><category term="hive"/><category term="hyphen"/><category term="inheritance"/><category term="insert"/><category term="insert mode"/><category term="integration testing"/><category term="invalid active developer path"/><category term="iptables"/><category term="iterate"/><category term="jar"/><category term="jar file"/><category term="java client"/><category term="javahl"/><category term="jboss"/><category term="jdk 1.7.0_51"/><category term="jetty"/><category term="joda time"/><category term="jpa"/><category term="junit"/><category term="jupyter notebook"/><category term="kafka"/><category term="kafka consumer offset"/><category term="keytool"/><category term="libnspr4.dylib"/><category term="line break"/><category term="line-break"/><category term="linebreak"/><category term="linux. tar"/><category term="list files in jar"/><category term="log4j appender"/><category term="lower camel case"/><category term="lsof"/><category term="lsusb"/><category term="lucene"/><category term="macosx"/><category term="mapreduce"/><category term="marshal"/><category term="mask"/><category term="maven plugin"/><category term="max-connections"/><category term="max-threads"/><category term="mean"/><category term="memory"/><category term="mkvmerge"/><category term="mkvtoolnix"/><category term="mongodb"/><category term="ms excel"/><category term="multi threading"/><category term="multipleoutputs"/><category term="mysql"/><category term="netstat"/><category term="numeric range"/><category term="offset"/><category term="oozie"/><category term="open ports"/><category term="openconnect"/><category term="oracle jdk"/><category term="overtype"/><category term="overtype mode"/><category term="pagination"/><category term="pandas"/><category term="pig"/><category term="port in use"/><category term="ports"/><category term="postgres"/><category term="property file"/><category term="protobuf"/><category term="protoc-2.5.0"/><category term="protocolbuf"/><category term="python"/><category term="query grouping"/><category term="quicktime for java"/><category term="ram"/><category term="recources"/><category term="recursive"/><category term="redhat linux"/><category term="redhat version"/><category term="reducer"/><category term="reindex"/><category term="release plugin"/><category term="release:prepare"/><category term="remote port"/><category term="replace"/><category term="reply"/><category term="rhel"/><category term="rhel version"/><category term="rpm"/><category term="sanity check"/><category term="schema-free"/><category term="search"/><category term="sed"/><category term="send"/><category term="server socket binding"/><category term="sierra"/><category term="slack"/><category term="snappy"/><category term="socket"/><category term="socket communication"/><category term="solr pagination"/><category term="solrj helloworld"/><category term="sorting"/><category term="space"/><category term="spring boot"/><category term="spring jpa"/><category term="sql"/><category term="ssh-copy-id"/><category term="ssl"/><category term="standard deviation"/><category term="std"/><category term="subdirectories"/><category term="surefire"/><category term="svn"/><category term="swing ui"/><category term="test"/><category term="the common java cookbook"/><category term="thread dump"/><category term="threads"/><category term="tiny buttons"/><category term="tiny ui"/><category term="tomcat"/><category term="ttl"/><category term="ubuntu"/><category term="unmarshal"/><category term="unset"/><category term="usb"/><category term="virus"/><category term="vpn"/><category term="vscode"/><category term="web aplication"/><category term="webex"/><category term="whirr"/><category term="yarn queue"/><category term="zookeeper"/><title type='text'>Simplicity is always a choice! Keep it simple.</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Kamal Bahadur</name><uri>http://www.blogger.com/profile/02453026030702386687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii5nDxhKM4Qh0gw0SBN5zzt3yhNK1e2PcrJf4SoAmT0KcpN25ndla98k7cxQW1tE5wH-n0lofsv-BemsnASXQOccJe-_Qa76-U_KT_xVBBAfpF_6IFh_t-tz72cYuoFQ/s113/Kamal'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>128</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-6481149327792387795</id><published>2024-09-18T14:13:00.000-07:00</published><updated>2024-09-18T14:13:18.340-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="openconnect"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="vpn"/><title type='text'>Ubuntu 24.0 LTS - Install OpenConnect</title><content type='html'>&lt;p&gt;&amp;nbsp;My organization uses Cisco AnyConnect to connect to the VPN. Problem with using AnyConnect client is that it doesn&#39;t save the password. So I try to use OpenConnect instead.&lt;/p&gt;&lt;p&gt;I just upgraded to Ubuntu 24 LTS. When I do &lt;i&gt;&lt;b&gt;Settings --&amp;gt; Network --&amp;gt; VPN --&amp;gt; Add&lt;/b&gt;&lt;/i&gt;, it doesn&#39;t show &lt;i&gt;&lt;b&gt;Multi-protocol VPN client&lt;/b&gt;&lt;/i&gt; option which will let me connect to my Org VPN.&lt;/p&gt;&lt;p&gt;So I have to do this&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: #ece7e6; border-bottom: 1px solid #A2A09F; border-top: 1px solid #A2A09F;&quot;&gt;sudo apt-get install openconnect network-manager-openconnect network-manager-openconnect-gnome&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;After a quick restart, I can see that option.&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/6481149327792387795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2024/09/ubuntu-240-lts-install-openconnect.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/6481149327792387795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/6481149327792387795'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2024/09/ubuntu-240-lts-install-openconnect.html' title='Ubuntu 24.0 LTS - Install OpenConnect'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-6218004834771264231</id><published>2023-01-05T07:56:00.001-08:00</published><updated>2023-01-05T07:56:48.474-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="generics"/><category scheme="http://www.blogger.com/atom/ns#" term="go"/><category scheme="http://www.blogger.com/atom/ns#" term="golang"/><category scheme="http://www.blogger.com/atom/ns#" term="inheritance"/><title type='text'>Golang - How to &quot;extend&quot; an interface while using Generics</title><content type='html'>&lt;p&gt;&amp;nbsp;Here is a code snippet that shows how to do it:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;background-color: #fffffe; color: black; font-family: &#39;Droid Sans Mono&#39;, &#39;monospace&#39;, monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;package main&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: blue;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;fmt&quot;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;type &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;Parent&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; any] interface {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;ParentMethod1&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(t &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;ParentMethod2&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(t &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;type &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;Child&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; string] interface {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;Parent&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;ChildMethod1&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(t string)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;ChildMethod2&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(t string)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;type parent[&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; any] struct {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;func &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;NewChild&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;Child&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[string] {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &amp;amp; child[string]{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;        parent[string]{ },&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;    }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;func(a * parent[&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;]) &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;ParentMethod1&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(t &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;    fmt.&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;Println&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;ParentMethod1&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;, t)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;func(a * parent[&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;]) &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;ParentMethod2&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(t &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;    fmt.&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;Println&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;ParentMethod2&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;, t)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;type child[&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; string] struct {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;    parent[&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;func(b * child[&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;]) &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;ChildMethod1&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(t &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;    fmt.&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;Println&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;ChildMethod1&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;, t)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;func(b * child[&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;]) &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;ChildMethod2&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(t &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;    fmt.&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;Println&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;ChildMethod2&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;, t)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;func(a * child[&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;]) &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;ParentMethod1&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(t &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;    fmt.&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;Println&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Overrided ParentMethod1&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;, t)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;func main() {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;    ch:= &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;NewChild&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;AcceptParent&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[string](ch)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;func &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;AcceptParent&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; any](a &lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;Parent&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;]) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;    fmt.&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;Println&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Works&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;, a.&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;ParentMethod2&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: black;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/6218004834771264231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2023/01/golang-how-to-extend-interface-while.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/6218004834771264231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/6218004834771264231'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2023/01/golang-how-to-extend-interface-while.html' title='Golang - How to &quot;extend&quot; an interface while using Generics'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-2193315659378816880</id><published>2022-11-10T08:53:00.001-08:00</published><updated>2022-11-10T08:53:09.751-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="golang"/><title type='text'>Golang - How to dynamically set and get values using reflection</title><content type='html'>&lt;p&gt;&amp;nbsp;This code shows how to set and get values dynamically:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;package main&lt;br /&gt;&lt;br /&gt;import (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;fmt&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;reflect&quot;&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;type Car struct {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Id int&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Color string&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Make string&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Model string&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Miles int64&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;func main() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c: = new(Car)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetAttributeValue(c, &quot;Miles&quot;, int64(50000))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetAttributeValue(c, &quot;Id&quot;, 100)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetAttributeValue(c, &quot;Make&quot;, &quot;Toyota&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetAttributeValue(c, &quot;Model&quot;, &quot;Camry&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println(&quot;Car:&quot;, c)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println(&quot;Miles:&quot;, GetAttributeValue(c, &quot;Miles&quot;))&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;func GetAttributeValue(s any, fieldName string) any {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; r: = reflect.ValueOf(s)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; va: = reflect.Indirect(r).FieldByName(fieldName)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return va.Interface().(any)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;func SetAttributeValue(s any, fieldName string, v any) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; r: = reflect.ValueOf(s)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; va: = reflect.Indirect(r).FieldByName(fieldName)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if va.CanSet() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; va.Set(reflect.ValueOf(v))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;} &lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/2193315659378816880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2022/11/golang-how-to-dynamically-set-and-get.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/2193315659378816880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/2193315659378816880'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2022/11/golang-how-to-dynamically-set-and-get.html' title='Golang - How to dynamically set and get values using reflection'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-3328840473218229720</id><published>2022-11-09T13:52:00.008-08:00</published><updated>2022-11-09T13:52:51.738-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="vscode"/><title type='text'>VSCODE - How to navigate cursor to previous location</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;On Windows:&lt;/p&gt;
&lt;p&gt;&lt;kbd&gt;&lt;/kbd&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;kbd&gt;Alt&lt;/kbd&gt; + &lt;kbd&gt;←&lt;/kbd&gt; ... navigate back&lt;/p&gt;
&lt;p&gt;&lt;kbd&gt;Alt&lt;/kbd&gt; + &lt;kbd&gt;→&lt;/kbd&gt; ... navigate forward&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;On Mac:&lt;/p&gt;
&lt;p&gt;&lt;kbd&gt;&lt;/kbd&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;kbd&gt;Ctrl&lt;/kbd&gt; + &lt;kbd&gt;-&lt;/kbd&gt; ... navigate back&lt;/p&gt;
&lt;p&gt;&lt;kbd&gt;Ctrl&lt;/kbd&gt; + &lt;kbd&gt;Shift&lt;/kbd&gt; + &lt;kbd&gt;-&lt;/kbd&gt; ... navigate forward&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;On Ubuntu Linux:&lt;/p&gt;
&lt;p&gt;&lt;kbd&gt;&lt;/kbd&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;kbd&gt;Ctrl&lt;/kbd&gt; + &lt;kbd&gt;Alt&lt;/kbd&gt; + &lt;kbd&gt;-&lt;/kbd&gt; ... navigate back&lt;/p&gt;
&lt;p&gt;&lt;kbd&gt;Ctrl&lt;/kbd&gt; + &lt;kbd&gt;Shift&lt;/kbd&gt; + &lt;kbd&gt;-&lt;/kbd&gt; ... navigate forward&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/3328840473218229720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2022/11/vscode-how-to-navigate-cursor-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/3328840473218229720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/3328840473218229720'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2022/11/vscode-how-to-navigate-cursor-to.html' title='VSCODE - How to navigate cursor to previous location'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-8123400021248868878</id><published>2022-09-02T20:38:00.004-07:00</published><updated>2022-09-02T20:38:56.718-07:00</updated><title type='text'>Upgraded to ubuntu 22.x and can&#39;t ssh into some of your servers?</title><content type='html'>&lt;p&gt;&amp;nbsp;Well, I upgraded to Ubuntu 22.x and I couldn&#39;t ssh into some of my servers. I ran the following command to see why:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;i&gt;&lt;b&gt;ssh -vvv user@host &lt;/b&gt;&lt;/i&gt;&lt;/blockquote&gt;The output of above command showed why I wasn&#39;t able to ssh. Saw this line:&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;i&gt;&lt;b&gt;debug1: send_pubkey_test: no mutual signature algorithm&lt;/b&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;This gives a hint about the algorithm you used to create&amp;nbsp; your ssh keys is no longer supported.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Fix is to add the following to /etc/ssh/ssh_config on the client machine:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;i&gt;&lt;b&gt;PubkeyAcceptedKeyTypes +ssh-rsa&lt;/b&gt;&lt;/i&gt;&lt;/blockquote&gt;This should fix the issue.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/8123400021248868878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2022/09/upgraded-to-ubuntu-22x-and-cant-ssh.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/8123400021248868878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/8123400021248868878'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2022/09/upgraded-to-ubuntu-22x-and-cant-ssh.html' title='Upgraded to ubuntu 22.x and can&#39;t ssh into some of your servers?'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-9100844758383905965</id><published>2020-12-08T14:57:00.002-08:00</published><updated>2020-12-08T14:57:41.307-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dynamic schema"/><category scheme="http://www.blogger.com/atom/ns#" term="mongodb"/><category scheme="http://www.blogger.com/atom/ns#" term="pagination"/><category scheme="http://www.blogger.com/atom/ns#" term="schema-free"/><category scheme="http://www.blogger.com/atom/ns#" term="sorting"/><title type='text'>How to retrieve schema-free MongoDB documents</title><content type='html'>&lt;p&gt;If you are on consumer side of MongoDB, there is a very good chance that the schema of the documents being written into MongoDB is not under your control. If you are as unlucky as me, the producer of the documents will add random fields without telling you. There are 2 options here. First options is that you only retrieve set number of fields and drop everything else. This is also called schema-on-read. If you cannot afford to drop any fields (even if they are randomly added), you will need the second option which is what I try to explain here.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;The solution is to read the documents as a Map. To be specific &lt;b&gt;org.bson.Document &lt;/b&gt;(implements java.util.Map). You cannot use MongoRepository anymore. You need to use MongoTemplate that will allow you to pass entity class type like this. Bonus: The snippet also shows how to do pagination and sorting.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;String userId &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;kamal.bahadur@gmail.com&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #888888;&quot;&gt;// Sort by &quot;timestamp&quot; (desc - latest first) and return first doc&lt;/span&gt;
PageRequest pageRequest &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; PageRequest&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; Sort&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Sort&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;Direction&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;DESC&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;timestamp&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;));&lt;/span&gt;

List&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt;Document&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt; users &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; mongoTemplate&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; BasicQuery&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;{&#39;userId&#39;:&#39;&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt;userId&lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;&#39;}&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;with&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;pageRequest&lt;span style=&quot;color: #333333;&quot;&gt;),&lt;/span&gt; Document&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;users&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;users &lt;span style=&quot;color: #333333;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; users&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
	System&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;users&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;));&lt;/span&gt;
&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/9100844758383905965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2020/12/how-to-retrieve-schema-free-mongodb.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/9100844758383905965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/9100844758383905965'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2020/12/how-to-retrieve-schema-free-mongodb.html' title='How to retrieve schema-free MongoDB documents'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-3402989714456886299</id><published>2020-05-04T08:00:00.000-07:00</published><updated>2020-05-04T08:00:13.100-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dash"/><category scheme="http://www.blogger.com/atom/ns#" term="enum"/><category scheme="http://www.blogger.com/atom/ns#" term="hyphen"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="jpa"/><category scheme="http://www.blogger.com/atom/ns#" term="postgres"/><category scheme="http://www.blogger.com/atom/ns#" term="space"/><category scheme="http://www.blogger.com/atom/ns#" term="spring"/><category scheme="http://www.blogger.com/atom/ns#" term="spring jpa"/><title type='text'>How to write enum type with a dash (hyphen) or a space (whitespace) into Postgres</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
I am currently working on an ETL project that reads from Kafka and writes into Postgres (12.x). This is a Spring boot app with Spring JPA for DB access.&lt;br /&gt;
&lt;br /&gt;
Disclaimer: I have never worked with enum types before. If you find a better solution, let me know in the comments.&lt;br /&gt;
&lt;br /&gt;
First, I thought I will just write the data as String and as long as the value matched the enum values it should be ok. I was wrong. I quickly realized that I need to use enum as the type in my model. Like this (Note the attribute &lt;b&gt;&lt;i&gt;answerIndic&lt;/i&gt;&lt;/b&gt;):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #2b2b2b; color: #a9b7c6; font-family: &#39;Inconsolata&#39;; font-size: 9.8pt;&quot;&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;import &lt;/span&gt;lombok.&lt;span style=&quot;color: #bbb529;&quot;&gt;Data&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;import &lt;/span&gt;javax.persistence.*&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;import &lt;/span&gt;java.math.BigDecimal&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;import &lt;/span&gt;java.sql.Timestamp&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;@Entity&lt;/span&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;@Data&lt;/span&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;@Table&lt;/span&gt;(&lt;span style=&quot;color: #d0d0ff;&quot;&gt;name &lt;/span&gt;= &lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;call_log&quot;&lt;/span&gt;)
&lt;span style=&quot;color: #cc7832;&quot;&gt;public class &lt;/span&gt;CallLogCdr {
    &lt;span style=&quot;color: #bbb529;&quot;&gt;@Id&lt;/span&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;    @Column&lt;/span&gt;(&lt;span style=&quot;color: #d0d0ff;&quot;&gt;name &lt;/span&gt;= &lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;record_id&quot;&lt;/span&gt;)
    &lt;span style=&quot;color: #cc7832;&quot;&gt;private &lt;/span&gt;String &lt;span style=&quot;color: #9876aa;&quot;&gt;recordId&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;@Column&lt;/span&gt;(&lt;span style=&quot;color: #d0d0ff;&quot;&gt;name &lt;/span&gt;= &lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;user_id&quot;&lt;/span&gt;)
    &lt;span style=&quot;color: #cc7832;&quot;&gt;private &lt;/span&gt;String &lt;span style=&quot;color: #9876aa;&quot;&gt;userId&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;@Column&lt;/span&gt;(&lt;span style=&quot;color: #d0d0ff;&quot;&gt;name &lt;/span&gt;= &lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;start_time&quot;&lt;/span&gt;)
    &lt;span style=&quot;color: #cc7832;&quot;&gt;private &lt;/span&gt;Timestamp &lt;span style=&quot;color: #9876aa;&quot;&gt;startTime&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;@Column&lt;/span&gt;(&lt;span style=&quot;color: #d0d0ff;&quot;&gt;name &lt;/span&gt;= &lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;answer_time&quot;&lt;/span&gt;)
    &lt;span style=&quot;color: #cc7832;&quot;&gt;private &lt;/span&gt;Timestamp &lt;span style=&quot;color: #9876aa;&quot;&gt;answerTime&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;@Column&lt;/span&gt;(&lt;span style=&quot;color: #d0d0ff;&quot;&gt;name &lt;/span&gt;= &lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;release_time&quot;&lt;/span&gt;)
    &lt;span style=&quot;color: #cc7832;&quot;&gt;private &lt;/span&gt;Timestamp &lt;span style=&quot;color: #9876aa;&quot;&gt;releaseTime&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;@Column&lt;/span&gt;(&lt;span style=&quot;color: #d0d0ff;&quot;&gt;name &lt;/span&gt;= &lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;direction&quot;&lt;/span&gt;)
    &lt;span style=&quot;color: #bbb529;&quot;&gt;@Enumerated&lt;/span&gt;(EnumType.&lt;span style=&quot;color: #9876aa; font-style: italic;&quot;&gt;STRING&lt;/span&gt;)
    &lt;span style=&quot;color: #cc7832;&quot;&gt;private &lt;/span&gt;Direction &lt;span style=&quot;color: #9876aa;&quot;&gt;direction&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;@Column&lt;/span&gt;(&lt;span style=&quot;color: #d0d0ff;&quot;&gt;name &lt;/span&gt;= &lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;calling_number&quot;&lt;/span&gt;)
    &lt;span style=&quot;color: #cc7832;&quot;&gt;private &lt;/span&gt;String &lt;span style=&quot;color: #9876aa;&quot;&gt;callingNumber&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;@Column&lt;/span&gt;(&lt;span style=&quot;color: #d0d0ff;&quot;&gt;name &lt;/span&gt;= &lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;called_number&quot;&lt;/span&gt;)
    &lt;span style=&quot;color: #cc7832;&quot;&gt;private &lt;/span&gt;String &lt;span style=&quot;color: #9876aa;&quot;&gt;calledNumber&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;@Column&lt;/span&gt;(&lt;span style=&quot;color: #d0d0ff;&quot;&gt;name &lt;/span&gt;= &lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;answer_indic&quot;&lt;/span&gt;)
    &lt;span style=&quot;color: #cc7832;&quot;&gt;private &lt;/span&gt;AnswerIndic &lt;span style=&quot;color: #9876aa;&quot;&gt;answerIndic&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;
&lt;/span&gt;}&lt;/pre&gt;
&lt;br /&gt;
In Postgres, the accepted values for enum are:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Yes&lt;/li&gt;
&lt;li&gt;No&lt;/li&gt;
&lt;li&gt;Yes-PostRedirection &lt;/li&gt;
&lt;/ul&gt;
I tried to create a Java enum type with those values and I got compile errors. Turns out I can&#39;t use space or dash in the name. It wasn&#39;t hard to figure out I should be using AttributeConverter to convert between Java Enum and DB Enum. Thanks to google!&lt;br /&gt;
&lt;br /&gt;
So, here is my converter:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #2b2b2b; color: #a9b7c6; font-family: &#39;Inconsolata&#39;; font-size: 9.8pt;&quot;&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;import &lt;/span&gt;javax.persistence.AttributeConverter&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;import &lt;/span&gt;javax.persistence.&lt;span style=&quot;color: #bbb529;&quot;&gt;Converter&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;@Converter&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;public class &lt;/span&gt;AnswerIndicConverter &lt;span style=&quot;color: #cc7832;&quot;&gt;implements &lt;/span&gt;AttributeConverter&amp;lt;AnswerIndic&lt;span style=&quot;color: #cc7832;&quot;&gt;, &lt;/span&gt;String&amp;gt; {

    &lt;span style=&quot;color: #bbb529;&quot;&gt;@Override&lt;/span&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;public &lt;/span&gt;String &lt;span style=&quot;color: #ffc66d;&quot;&gt;convertToDatabaseColumn&lt;/span&gt;(AnswerIndic answerIndic) {&lt;span style=&quot;color: #cc7832;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;        if &lt;/span&gt;(answerIndic == &lt;span style=&quot;color: #cc7832;&quot;&gt;null&lt;/span&gt;) {
            &lt;span style=&quot;color: #cc7832;&quot;&gt;return null;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;        &lt;/span&gt;}&lt;span style=&quot;color: #cc7832;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;        return &lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;answerIndic.toString()&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: #2b2b2b; color: #a9b7c6; font-family: &#39;Inconsolata&#39;; font-size: 9.8pt;&quot;&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;&amp;nbsp;&lt;/span&gt;   }

    &lt;span style=&quot;color: #bbb529;&quot;&gt;@Override&lt;/span&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;public &lt;/span&gt;AnswerIndic &lt;span style=&quot;color: #ffc66d;&quot;&gt;convertToEntityAttribute&lt;/span&gt;(String name) {&lt;span style=&quot;color: #cc7832;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;        if &lt;/span&gt;(name == &lt;span style=&quot;color: #cc7832;&quot;&gt;null&lt;/span&gt;) {
            &lt;span style=&quot;color: #cc7832;&quot;&gt;return null;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;        &lt;/span&gt;}
        &lt;span style=&quot;color: #cc7832;&quot;&gt;return &lt;/span&gt;AnswerIndic.&lt;span style=&quot;font-style: italic;&quot;&gt;fromString&lt;/span&gt;(name)&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;    &lt;/span&gt;}
}&lt;/pre&gt;
&lt;br /&gt;
and, here is my enum:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #2b2b2b; color: #a9b7c6; font-family: &#39;Inconsolata&#39;; font-size: 9.8pt;&quot;&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;public enum &lt;/span&gt;AnswerIndic {
    &lt;span style=&quot;color: #9876aa; font-style: italic;&quot;&gt;YES&lt;/span&gt;(&lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;Yes&quot;&lt;/span&gt;)&lt;span style=&quot;color: #cc7832;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #9876aa; font-style: italic;&quot;&gt;NO&lt;/span&gt;(&lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;No&quot;&lt;/span&gt;)&lt;span style=&quot;color: #cc7832;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #9876aa; font-style: italic;&quot;&gt;YES_POSTREDIRECTION&lt;/span&gt;(&lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;Yes-PostRedirection&quot;&lt;/span&gt;)&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #ffc66d;&quot;&gt;AnswerIndic&lt;/span&gt;(String name) {
        &lt;span style=&quot;color: #cc7832;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #9876aa;&quot;&gt;name &lt;/span&gt;= name&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;    &lt;/span&gt;}

    &lt;span style=&quot;color: #cc7832;&quot;&gt;private final &lt;/span&gt;String &lt;span style=&quot;color: #9876aa;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;@Override&lt;/span&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;public &lt;/span&gt;String &lt;span style=&quot;color: #ffc66d;&quot;&gt;toString&lt;/span&gt;() {
        &lt;span style=&quot;color: #cc7832;&quot;&gt;return this&lt;/span&gt;.&lt;span style=&quot;color: #9876aa;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;    &lt;/span&gt;}

    &lt;span style=&quot;color: #cc7832;&quot;&gt;public static &lt;/span&gt;AnswerIndic &lt;span style=&quot;color: #ffc66d;&quot;&gt;fromString&lt;/span&gt;(String name ) {
        &lt;span style=&quot;color: #cc7832;&quot;&gt;if &lt;/span&gt;(&quot;No&quot;&lt;span style=&quot;color: #9876aa; font-style: italic;&quot;&gt;&lt;/span&gt;.equals(name)) {
            &lt;span style=&quot;color: #cc7832;&quot;&gt;return &lt;/span&gt;AnswerIndic.&lt;span style=&quot;color: #9876aa; font-style: italic;&quot;&gt;NO&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;        &lt;/span&gt;} &lt;span style=&quot;color: #cc7832;&quot;&gt;else if &lt;/span&gt;(&quot;Yes&quot;&lt;span style=&quot;color: #9876aa; font-style: italic;&quot;&gt;&lt;/span&gt;.equals(name)) {
            &lt;span style=&quot;color: #cc7832;&quot;&gt;return &lt;/span&gt;AnswerIndic.&lt;span style=&quot;color: #9876aa; font-style: italic;&quot;&gt;YES&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;        &lt;/span&gt;} &lt;span style=&quot;color: #cc7832;&quot;&gt;else if &lt;/span&gt;(&quot;Yes-PostRedirection&quot;.equals(name)) {
            &lt;span style=&quot;color: #cc7832;&quot;&gt;return &lt;/span&gt;AnswerIndic.&lt;span style=&quot;color: #9876aa; font-style: italic;&quot;&gt;YES_POSTREDIRECTION&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;        &lt;/span&gt;}
        &lt;span style=&quot;color: #cc7832;&quot;&gt;return null;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;    &lt;/span&gt;}
}&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, I had to annotate the attribute answerIndic in the model to use the converter like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #2b2b2b; color: #a9b7c6; font-family: &#39;Inconsolata&#39;; font-size: 9.8pt;&quot;&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;@Column&lt;/span&gt;(&lt;span style=&quot;color: #d0d0ff;&quot;&gt;name &lt;/span&gt;= &lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;answer_indic&quot;&lt;/span&gt;)
&lt;span style=&quot;color: #bbb529;&quot;&gt;@Convert&lt;/span&gt;(&lt;span style=&quot;color: #d0d0ff;&quot;&gt;converter &lt;/span&gt;= AnswerIndicConverter.&lt;span style=&quot;color: #cc7832;&quot;&gt;class&lt;/span&gt;)
&lt;span style=&quot;color: #cc7832;&quot;&gt;private &lt;/span&gt;AnswerIndic &lt;span style=&quot;color: #9876aa;&quot;&gt;answerIndic&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, I thought I was done. But no....the universe was working against me that day. I got this error message:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
Caused by: org.postgresql.util.PSQLException: ERROR: column &quot;answer_indic&quot; is of type answer_indic_enum but expression is of type character varying&lt;br /&gt;&amp;nbsp; Hint: You will need to rewrite or cast the expression.&lt;/blockquote&gt;
I tried to google that error message and most of the posts stated that I should be using an AttributeConverter which I was already doing. I spent 5 hours trying different things and nothing worked. I went back and read every single post/article/stackoverflow that was returned by google search.&amp;nbsp; I must have gone through 2 or 3 pages of search results and finally found the solution.&lt;br /&gt;
&lt;br /&gt;
Well, at first I didn&#39;t think it would work, but then I got nothing to lose so I tried and voila!&lt;br /&gt;
&lt;br /&gt;
The solution is to add&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #2b2b2b; color: #a9b7c6; font-family: &#39;Inconsolata&#39;; font-size: 9.8pt;&quot;&gt;&lt;span style=&quot;color: #6a8759;&quot;&gt;stringtype=unspecified&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
to the datasource url. Like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #2b2b2b; color: #a9b7c6; font-family: &#39;Inconsolata&#39;; font-size: 9.8pt;&quot;&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;spring.datasource.url&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #6a8759;&quot;&gt;jdbc:postgresql://localhost:5432/postgres?sslmode=require&amp;amp;stringtype=unspecified&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
I hope this helps someone. See you in the next Post.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/3402989714456886299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2020/05/how-to-write-enum-type-with-dash-hyphen.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/3402989714456886299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/3402989714456886299'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2020/05/how-to-write-enum-type-with-dash-hyphen.html' title='How to write enum type with a dash (hyphen) or a space (whitespace) into Postgres'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-4821362006497607176</id><published>2020-03-23T12:27:00.001-07:00</published><updated>2020-03-23T12:27:45.464-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="corona"/><category scheme="http://www.blogger.com/atom/ns#" term="coronavirus"/><category scheme="http://www.blogger.com/atom/ns#" term="diy"/><category scheme="http://www.blogger.com/atom/ns#" term="mask"/><category scheme="http://www.blogger.com/atom/ns#" term="virus"/><title type='text'>How to convert your training mask to deal with Corona Virus</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Things needed:&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Training Mask&amp;nbsp;&lt;a href=&quot;https://amzn.to/2UeOHXW&quot; target=&quot;_blank&quot;&gt;https://amzn.to/2UeOHXW&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Air Filter &lt;a href=&quot;https://amzn.to/2xhSD1d&quot; target=&quot;_blank&quot;&gt;https://amzn.to/2xhSD1d&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Scissors&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&amp;nbsp;Make sure the filter you buy filters out Bacteria and Virus.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMNY6oWcGGNGgbit5BJCgKcPXqqnuT4HwDamqPnwm7n3Tw00McbMHvow_hz9ADyrn-amxhzuaVZ89cXyLR362zhdXsziUaZKeksDxpDbbAKHaYSd8yGrlf9L5LOQGw8tenLsuqRid7PFeO/s1600/IMG_0802.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;1200&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMNY6oWcGGNGgbit5BJCgKcPXqqnuT4HwDamqPnwm7n3Tw00McbMHvow_hz9ADyrn-amxhzuaVZ89cXyLR362zhdXsziUaZKeksDxpDbbAKHaYSd8yGrlf9L5LOQGw8tenLsuqRid7PFeO/s320/IMG_0802.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Remove the filter material from the packaging. It is bit tricky but doable.&lt;br /&gt;
&lt;br /&gt;
Cut three 4X4 inch squares of the filter.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9NePo66BOiAORYyxjilL9JtabW9MYm1512Pf9X5TL_uppPMFhanJJ2xoBcbOqcPQirC6fEjJuwse7rP3DnJr8Y2lgnXLBN27OZG19unON7IjEFUotssBIscu8_zxh4a3h9yLT7jm5qet3/s1600/IMG_0793.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1200&quot; data-original-width=&quot;1600&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9NePo66BOiAORYyxjilL9JtabW9MYm1512Pf9X5TL_uppPMFhanJJ2xoBcbOqcPQirC6fEjJuwse7rP3DnJr8Y2lgnXLBN27OZG19unON7IjEFUotssBIscu8_zxh4a3h9yLT7jm5qet3/s320/IMG_0793.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Remove the 3 white thingy on the mask.&lt;br /&gt;
&lt;br /&gt;
This white thingy cam be opened to remove a little rubber flap. Remove this and keep it safe. We won&#39;t need it to make Corona mask :)&lt;br /&gt;
&lt;br /&gt;
Place the 4X4 inch filter paper on the mask and push the white thingy back in like this:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX3IEwjTzVmt9EmBu2nUZz4OZsq_-JidagLdLBdgsZbxIVzcEosggd6Ceu-loOHDd1LR1Qpu8tqZ2rZlczkijpW3I_8qe2eu-RK47H5ArTUOzDTnGRMCij-0WVFkZMmZdZpQl4nuUPTK-Z/s1600/IMG_0794.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1200&quot; data-original-width=&quot;1600&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX3IEwjTzVmt9EmBu2nUZz4OZsq_-JidagLdLBdgsZbxIVzcEosggd6Ceu-loOHDd1LR1Qpu8tqZ2rZlczkijpW3I_8qe2eu-RK47H5ArTUOzDTnGRMCij-0WVFkZMmZdZpQl4nuUPTK-Z/s320/IMG_0794.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7as2Oyba1PG7UoU1KKbsptFKeM_mT5sblUgPo0Hu7EuL_E5tamtgh9V5sORT7G1GxoqRXh9pALJqwxIv1l3GTgi2zye6gV29UUVarAw1ug17f6tcU_nCRXRYkfZYZE38CZZL55HKwM7C-/s1600/IMG_0796.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;1200&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7as2Oyba1PG7UoU1KKbsptFKeM_mT5sblUgPo0Hu7EuL_E5tamtgh9V5sORT7G1GxoqRXh9pALJqwxIv1l3GTgi2zye6gV29UUVarAw1ug17f6tcU_nCRXRYkfZYZE38CZZL55HKwM7C-/s320/IMG_0796.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Put the outer sleeve of the mask back on&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZ2t0VTtcJbaLA3sMkRbMoBgi7mZOq9u30CG19xSWWLDJFuosOk7WEwJbDXvpiJ5Ec1Wz65F0hm-O3GvlPalJIeaSw0BnQAqaATXKMaezhyJNgADYNjAfA3lx1_yk9SFnmIepV1RF2WHyB/s1600/IMG_0797.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;1200&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZ2t0VTtcJbaLA3sMkRbMoBgi7mZOq9u30CG19xSWWLDJFuosOk7WEwJbDXvpiJ5Ec1Wz65F0hm-O3GvlPalJIeaSw0BnQAqaATXKMaezhyJNgADYNjAfA3lx1_yk9SFnmIepV1RF2WHyB/s320/IMG_0797.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
That&#39;s all!&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJRYM74evsT2o9rjF6OpH_jO0PgC8OWhMqIz9bfnsAakdHxzG9iIhbKoLmPzE4d80tJb0_0P_13EtcyjTakPaXxA3ZOGk2_YiEB7tl4mYyMLvSKOiMpn5ht5j8Qa8HQtxo0oePVyH2aE32/s1600/IMG_0800.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1200&quot; data-original-width=&quot;1600&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJRYM74evsT2o9rjF6OpH_jO0PgC8OWhMqIz9bfnsAakdHxzG9iIhbKoLmPzE4d80tJb0_0P_13EtcyjTakPaXxA3ZOGk2_YiEB7tl4mYyMLvSKOiMpn5ht5j8Qa8HQtxo0oePVyH2aE32/s320/IMG_0800.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinhMRP6Zc5NLwwS3V1xAFAnLr8GA7u-7kMSAULDbm5U0UF_Gryqt3YvE1NBBiJFISaegxs5GeXHSZAVOCXy7bos2jgsAwvn2S_mvFGTGJ6S52jTyn5Xb2skAMMSrv3QVO9XRFagZKf5Tol/s1600/IMG_0799.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1203&quot; data-original-width=&quot;1600&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinhMRP6Zc5NLwwS3V1xAFAnLr8GA7u-7kMSAULDbm5U0UF_Gryqt3YvE1NBBiJFISaegxs5GeXHSZAVOCXy7bos2jgsAwvn2S_mvFGTGJ6S52jTyn5Xb2skAMMSrv3QVO9XRFagZKf5Tol/s320/IMG_0799.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Be safe out there!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/4821362006497607176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2020/03/how-to-convert-your-training-mask-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/4821362006497607176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/4821362006497607176'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2020/03/how-to-convert-your-training-mask-to.html' title='How to convert your training mask to deal with Corona Virus'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMNY6oWcGGNGgbit5BJCgKcPXqqnuT4HwDamqPnwm7n3Tw00McbMHvow_hz9ADyrn-amxhzuaVZ89cXyLR362zhdXsziUaZKeksDxpDbbAKHaYSd8yGrlf9L5LOQGw8tenLsuqRid7PFeO/s72-c/IMG_0802.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-3608232489074932527</id><published>2020-01-01T19:49:00.000-08:00</published><updated>2020-01-01T19:49:39.215-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="mkvmerge"/><category scheme="http://www.blogger.com/atom/ns#" term="mkvtoolnix"/><category scheme="http://www.blogger.com/atom/ns#" term="MP4"/><title type='text'>Stitch Multiple MP4 files together in Linux</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
To stitch multiple MP4 files into one big MKV file, you will have to install &lt;i&gt;&lt;b&gt;mkvtoolnix&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
sudo apt install mkvtoolnix&lt;/blockquote&gt;
&lt;br /&gt;
&amp;nbsp;Then, run this command:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
mkvmerge -o final.mkv file1.mp4 \+ file2.mp4 \+ file3.mp4&lt;/blockquote&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/3608232489074932527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2020/01/stitch-multiple-mp4-files-together-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/3608232489074932527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/3608232489074932527'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2020/01/stitch-multiple-mp4-files-together-in.html' title='Stitch Multiple MP4 files together in Linux'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-1895110585999102648</id><published>2019-12-31T10:30:00.000-08:00</published><updated>2019-12-31T10:30:58.536-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="attachments"/><category scheme="http://www.blogger.com/atom/ns#" term="gmail"/><category scheme="http://www.blogger.com/atom/ns#" term="gmail api"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="reply"/><category scheme="http://www.blogger.com/atom/ns#" term="send"/><title type='text'>Send and Reply Message using Gmail Api</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
I recently worked with Gmail API to send and receive emails. The complex part was sending and replying to messages. The following class has all necessary code to be able to get the following features:&lt;br /&gt;
&lt;br /&gt;
&lt;ul class=&quot;ak-ul&quot;&gt;
&lt;li&gt;Compose a new message.&lt;/li&gt;
&lt;li&gt;Reply to a message. Parameters “threadId”, “messageId” and “references” are required to create a reply. Read &lt;a href=&quot;https://tools.ietf.org/html/rfc2822#appendix-A.2&quot;&gt;this&lt;/a&gt; to understand how this works.&lt;/li&gt;
&lt;li&gt;Supports messages in plain text.&lt;/li&gt;
&lt;li&gt;Supports HTML messages.&lt;/li&gt;
&lt;li&gt;Supports messages in HTML with alternative plain text as fallback.&lt;/li&gt;
&lt;li&gt;Supports multiple attachments.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;com.google.api.services.gmail.Gmail&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;com.google.api.services.gmail.model.Message&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;javax.activation.DataHandler&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;javax.activation.DataSource&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;javax.activation.FileDataSource&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;javax.mail.MessagingException&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;javax.mail.Multipart&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;javax.mail.Session&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;javax.mail.internet.InternetAddress&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;javax.mail.internet.MimeBodyPart&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;javax.mail.internet.MimeMessage&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;javax.mail.internet.MimeMultipart&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;java.io.ByteArrayOutputStream&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;java.io.File&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;java.io.IOException&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;java.nio.file.Path&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;java.util.Base64&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;java.util.List&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;java.util.Objects&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #0e84b5; font-weight: bold;&quot;&gt;java.util.Properties&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #bb0066; font-weight: bold;&quot;&gt;GmailApiClient&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;final&lt;/span&gt; String SUBJECT &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;Subject&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;final&lt;/span&gt; String FROM &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;From&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;final&lt;/span&gt; String MESSAGE_ID &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;Message-ID&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;final&lt;/span&gt; String REFERNCES &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;References&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;final&lt;/span&gt; String IN_REPLY_TO &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;In-Reply-To&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;sendMessage&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Gmail client&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String clientId&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String clientSecret&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String accessToken&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt;
                            String refreshToken&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String email&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String to&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String cc&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String bcc&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt;
                            String subject&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String text&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String html&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String threadId&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String messageId&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt;
                            String references&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; List&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt;Path&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt; localFiles&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            Message message &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; createMessageWithEmail&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;createEmail&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;to&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; cc&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; bcc&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; email&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; subject&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; text&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; html&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; messageId&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; references&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; localFiles&lt;span style=&quot;color: #333333;&quot;&gt;),&lt;/span&gt; threadId&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
            client&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;users&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;messages&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;send&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;me&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; message&lt;span style=&quot;color: #333333;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;execute&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Exception e&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            e&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; MimeMessage &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;createEmail&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String to&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String cc&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String bcc&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String from&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String subject&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt;
                                    String text&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String html&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String messageId&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String references&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt;
                                    List&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt;Path&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt; localFiles&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;throws&lt;/span&gt; MessagingException &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;

        MimeMessage message &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; getMimeMessage&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;to&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; cc&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; bcc&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; from&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; subject&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; messageId&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; references&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;

        &lt;span style=&quot;color: #888888;&quot;&gt;// Without attachments&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;localFiles &lt;span style=&quot;color: #333333;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: #888888;&quot;&gt;// Text&lt;/span&gt;
            &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;text &lt;span style=&quot;color: #333333;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; html &lt;span style=&quot;color: #333333;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
                message&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setText&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;text&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
            &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
            &lt;span style=&quot;color: #888888;&quot;&gt;// Html&lt;/span&gt;
            &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;html &lt;span style=&quot;color: #333333;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; text &lt;span style=&quot;color: #333333;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
                message&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setContent&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;getHtmlMultiPart&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;html&lt;span style=&quot;color: #333333;&quot;&gt;));&lt;/span&gt;
            &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
            &lt;span style=&quot;color: #888888;&quot;&gt;// Html with alternative text&lt;/span&gt;
            &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;html &lt;span style=&quot;color: #333333;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; text &lt;span style=&quot;color: #333333;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
                message&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setContent&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;getPlainTextAndHtmlMultiPart&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;text&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; html&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;));&lt;/span&gt;
            &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: #888888;&quot;&gt;// With attachments&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;localFiles &lt;span style=&quot;color: #333333;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;

            Multipart multipart &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
            &lt;span style=&quot;color: #888888;&quot;&gt;// Text&lt;/span&gt;
            &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;text &lt;span style=&quot;color: #333333;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; html &lt;span style=&quot;color: #333333;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
                multipart &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; getPlainTextMultiPart&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;text&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
            &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
            &lt;span style=&quot;color: #888888;&quot;&gt;// Html&lt;/span&gt;
            &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;html &lt;span style=&quot;color: #333333;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; text &lt;span style=&quot;color: #333333;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
                multipart &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; getHtmlMultiPart&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;html&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
            &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
            &lt;span style=&quot;color: #888888;&quot;&gt;// Html with alternative text&lt;/span&gt;
            &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;text &lt;span style=&quot;color: #333333;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; html &lt;span style=&quot;color: #333333;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
                multipart &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; getPlainTextAndHtmlMultiPart&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;text&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; html&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
            &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

            &lt;span style=&quot;color: #888888;&quot;&gt;// Add attachments&lt;/span&gt;
            &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Path path &lt;span style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt; localFiles&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
                File file &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; path&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;toFile&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
                MimeBodyPart attachmentPart &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; MimeBodyPart&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
                DataSource source &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; FileDataSource&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;file&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;

                attachmentPart&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setDataHandler&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; DataHandler&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;source&lt;span style=&quot;color: #333333;&quot;&gt;));&lt;/span&gt;
                attachmentPart&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setFileName&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;file&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getName&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;());&lt;/span&gt;

                multipart&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;addBodyPart&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;attachmentPart&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
            &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

            message&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setContent&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;multipart&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; message&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; Multipart &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;getPlainTextMultiPart&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String textBody&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;throws&lt;/span&gt; MessagingException &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        Multipart multipart &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; MimeMultipart&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
        MimeBodyPart mimeBodyPart &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; MimeBodyPart&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
        mimeBodyPart&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setContent&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;textBody&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;text/plain&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        multipart&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;addBodyPart&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;mimeBodyPart&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; multipart&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; Multipart &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;getPlainTextAndHtmlMultiPart&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String text&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String html&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;boolean&lt;/span&gt; hasAttachments&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;throws&lt;/span&gt; MessagingException &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        Multipart multipart &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;hasAttachments&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            multipart &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; MimeMultipart&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;mixed&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;

            Multipart innerMultiPart &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; MimeMultipart&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;alternative&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
            MimeBodyPart mbp &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; MimeBodyPart&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
            mbp&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setContent&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;innerMultiPart&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
            multipart&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;addBodyPart&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;mbp&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
            addAlternativeTexts&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;innerMultiPart&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; text&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; html&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            multipart &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; MimeMultipart&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;alternative&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
            addAlternativeTexts&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;multipart&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; text&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; html&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; multipart&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;addAlternativeTexts&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Multipart multipart&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String text&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String html&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;throws&lt;/span&gt; MessagingException &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        MimeBodyPart textPart &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; MimeBodyPart&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
        textPart&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setText&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;text&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;

        MimeBodyPart htmlPart &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; MimeBodyPart&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
        htmlPart&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setContent&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;html&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;text/html; charset=utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;

        multipart&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;addBodyPart&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;textPart&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        multipart&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;addBodyPart&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;htmlPart&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; Multipart &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;getHtmlMultiPart&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String htmlBody&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;throws&lt;/span&gt; MessagingException &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        Multipart multipart &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; MimeMultipart&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
        MimeBodyPart htmlPart &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; MimeBodyPart&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
        htmlPart&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setContent&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;htmlBody&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;text/html; charset=utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        multipart&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;addBodyPart&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;htmlPart&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; multipart&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; MimeMessage &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;getMimeMessage&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String to&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String cc&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String bcc&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String from&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String subject&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String messageId&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String references&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;throws&lt;/span&gt; MessagingException &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        Properties props &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; Properties&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
        Session session &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; Session&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getDefaultInstance&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;props&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;

        MimeMessage message &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; MimeMessage&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;session&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;

        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Objects&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;nonNull&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;messageId&lt;span style=&quot;color: #333333;&quot;&gt;))&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            message&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;addHeader&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;IN_REPLY_TO&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; messageId&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;

            &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Objects&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;nonNull&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;references&lt;span style=&quot;color: #333333;&quot;&gt;))&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
                message&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;addHeader&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;REFERNCES&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; references &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot; &quot;&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; messageId&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
            &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
                message&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;addHeader&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;REFERNCES&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; messageId&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
            &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

        message&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setFrom&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; InternetAddress&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;from&lt;span style=&quot;color: #333333;&quot;&gt;));&lt;/span&gt;

        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Objects&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;nonNull&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;to&lt;span style=&quot;color: #333333;&quot;&gt;))&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            message&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;addRecipients&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;javax&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;mail&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;Message&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;RecipientType&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;TO&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; to&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Objects&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;nonNull&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;cc&lt;span style=&quot;color: #333333;&quot;&gt;))&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            message&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;addRecipients&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;javax&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;mail&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;Message&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;RecipientType&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;CC&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; cc&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Objects&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;nonNull&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;bcc&lt;span style=&quot;color: #333333;&quot;&gt;))&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            message&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;addRecipients&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;javax&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;mail&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;Message&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;RecipientType&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;BCC&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; bcc&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

        &lt;span style=&quot;color: #888888;&quot;&gt;// Set subject&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Objects&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;nonNull&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;messageId&lt;span style=&quot;color: #333333;&quot;&gt;))&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;subject&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;toUpperCase&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;startsWith&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;RE: &quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;))&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
                message&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setSubject&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;subject&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
            &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
                message&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setSubject&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;Re: &quot;&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; subject&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
            &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            message&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setSubject&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;subject&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; message&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;

    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; Message &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;createMessageWithEmail&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;MimeMessage emailContent&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String threadId&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;
            &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;throws&lt;/span&gt; MessagingException&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; IOException &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        ByteArrayOutputStream buffer &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; ByteArrayOutputStream&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            emailContent&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;writeTo&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;buffer&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Exception e&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            e&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
            &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;throw&lt;/span&gt; e&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;byte&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[]&lt;/span&gt; bytes &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; buffer&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;toByteArray&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
        String encodedEmail &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; Base64&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getUrlEncoder&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;encodeToString&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;bytes&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        Message message &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; Message&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
        message&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setRaw&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;encodedEmail&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Objects&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;nonNull&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;threadId&lt;span style=&quot;color: #333333;&quot;&gt;))&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            message&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setThreadId&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;threadId&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; message&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/1895110585999102648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2019/12/send-and-reply-message-using-gmail-api.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/1895110585999102648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/1895110585999102648'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2019/12/send-and-reply-message-using-gmail-api.html' title='Send and Reply Message using Gmail Api'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-447860010304637507</id><published>2019-09-21T11:26:00.001-07:00</published><updated>2019-09-21T11:26:50.801-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gpu"/><category scheme="http://www.blogger.com/atom/ns#" term="gtx 1060"/><category scheme="http://www.blogger.com/atom/ns#" term="hdmi"/><category scheme="http://www.blogger.com/atom/ns#" term="hdmi audio"/><title type='text'>GTX 1060 GPU HDMI Autio Unplugged</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
I have been trying to get a system 76 laptop work with my TV. The video worked just fine but could not get the audio to work with HDMI. PulseAudio would show the audio card but all the HDMI options would be &quot;Unplugged&quot;. After lot of trial and error, I found a solution that worked for me.&lt;br /&gt;
&lt;br /&gt;
First I ran this command to see the different audio cards I have in the laptop:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
pacmd list-cards&lt;/blockquote&gt;
&lt;br /&gt;
Output of the above command will look something like this:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
2 card(s) available.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; index: 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; name: &amp;lt;alsa_card.pci-0000_01_00.1&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; driver: &amp;lt;module-alsa-card.c&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; owner module: 7&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; properties:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; alsa.card = &quot;1&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; alsa.card_name = &quot;HDA NVidia&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; alsa.long_card_name = &quot;HDA NVidia at 0xdc080000 irq 17&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; alsa.driver_name = &quot;snd_hda_intel&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.bus_path = &quot;pci-0000:01:00.1&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sysfs.path = &quot;/devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card1&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.bus = &quot;pci&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.vendor.id = &quot;10de&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.vendor.name = &quot;NVIDIA Corporation&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.product.id = &quot;10f1&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.product.name = &quot;GP106 High Definition Audio Controller&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.string = &quot;1&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.description = &quot;GP106 High Definition Audio Controller&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; module-udev-detect.discovered = &quot;1&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.icon_name = &quot;audio-card-pci&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; profiles:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; output:hdmi-stereo: Digital Stereo (HDMI) Output (priority 5400, available: unknown)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; output:hdmi-surround: Digital Surround 5.1 (HDMI) Output (priority 300, available: unknown)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; output:hdmi-surround71: Digital Surround 7.1 (HDMI) Output (priority 300, available: unknown)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; output:hdmi-stereo-extra1: Digital Stereo (HDMI 2) Output (priority 5200, available: no)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; output:hdmi-surround-extra1: Digital Surround 5.1 (HDMI 2) Output (priority 100, available: no)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; output:hdmi-surround71-extra1: Digital Surround 7.1 (HDMI 2) Output (priority 100, available: no)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; output:hdmi-stereo-extra2: Digital Stereo (HDMI 3) Output (priority 5200, available: no)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; output:hdmi-surround-extra2: Digital Surround 5.1 (HDMI 3) Output (priority 100, available: no)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; output:hdmi-surround71-extra2: Digital Surround 7.1 (HDMI 3) Output (priority 100, available: no)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; off: Off (priority 0, available: unknown)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; active profile: &amp;lt;output:hdmi-surround71&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sinks:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; alsa_output.pci-0000_01_00.1.hdmi-surround71/#3: GP106 High Definition Audio Controller Digital Surround 7.1 (HDMI)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sources:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; alsa_output.pci-0000_01_00.1.hdmi-surround71.monitor/#3: Monitor of GP106 High Definition Audio Controller Digital Surround 7.1 (HDMI)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ports:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; hdmi-output-0: HDMI / DisplayPort (priority 5900, latency offset 0 usec, available: yes)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; properties:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.icon_name = &quot;video-display&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.product.name = &quot;SAMSUNG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; hdmi-output-1: HDMI / DisplayPort 2 (priority 5800, latency offset 0 usec, available: no)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; properties:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.icon_name = &quot;video-display&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; hdmi-output-2: HDMI / DisplayPort 3 (priority 5700, latency offset 0 usec, available: no)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; properties:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.icon_name = &quot;video-display&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; index: 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; name: &amp;lt;alsa_card.pci-0000_00_1f.3&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; driver: &amp;lt;module-alsa-card.c&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; owner module: 8&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; properties:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; alsa.card = &quot;0&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; alsa.card_name = &quot;HDA Intel PCH&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; alsa.long_card_name = &quot;HDA Intel PCH at 0x2ffff20000 irq 133&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; alsa.driver_name = &quot;snd_hda_intel&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.bus_path = &quot;pci-0000:00:1f.3&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sysfs.path = &quot;/devices/pci0000:00/0000:00:1f.3/sound/card0&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.bus = &quot;pci&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.vendor.id = &quot;8086&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.vendor.name = &quot;Intel Corporation&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.product.id = &quot;a171&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.product.name = &quot;CM238 HD Audio Controller&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.form_factor = &quot;internal&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.string = &quot;0&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.description = &quot;Built-in Audio&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; module-udev-detect.discovered = &quot;1&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.icon_name = &quot;audio-card-pci&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; profiles:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; input:analog-stereo: Analog Stereo Input (priority 60, available: unknown)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; output:analog-stereo: Analog Stereo Output (priority 6000, available: unknown)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; output:analog-stereo+input:analog-stereo: Analog Stereo Duplex (priority 6060, available: unknown)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; output:iec958-stereo: Digital Stereo (IEC958) Output (priority 5500, available: unknown)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; output:iec958-stereo+input:analog-stereo: Digital Stereo (IEC958) Output + Analog Stereo Input (priority 5560, available: unknown)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; off: Off (priority 0, available: unknown)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; active profile: &amp;lt;output:analog-stereo&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sinks:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; alsa_output.pci-0000_00_1f.3.analog-stereo/#1: Built-in Audio Analog Stereo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sources:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; alsa_output.pci-0000_00_1f.3.analog-stereo.monitor/#1: Monitor of Built-in Audio Analog Stereo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ports:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; analog-input-internal-mic: Internal Microphone (priority 8900, latency offset 0 usec, available: unknown)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; properties:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.icon_name = &quot;audio-input-microphone&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; analog-input-mic: Microphone (priority 8700, latency offset 0 usec, available: no)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; properties:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.icon_name = &quot;audio-input-microphone&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; analog-output-lineout: Line Out (priority 9900, latency offset 0 usec, available: no)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; properties:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; analog-output-speaker: Speakers (priority 10000, latency offset 20000 usec, available: unknown)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; properties:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.icon_name = &quot;audio-speakers&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; analog-output-headphones: Headphones (priority 9000, latency offset 0 usec, available: no)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; properties:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.icon_name = &quot;audio-headphones&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; iec958-stereo-output: Digital Output (S/PDIF) (priority 0, latency offset 0 usec, available: unknown)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; properties:&lt;/blockquote&gt;
Note the index number of the card that has hdmi. In my case, it was the first one with index 0.&lt;br /&gt;
&lt;br /&gt;
I then ran this command:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
pacmd set-card-profile 0 output:hdmi-stereo&lt;/blockquote&gt;
&lt;br /&gt;
&quot;0&quot; in the above command is the index number. &quot;output:hdmi-stereo&quot; came from the list of profiles.&lt;br /&gt;
&lt;br /&gt;
Once I ran the above command, all the hdmi options became available.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/447860010304637507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2019/09/gtx-1060-gpu-hdmi-autio-unplugged.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/447860010304637507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/447860010304637507'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2019/09/gtx-1060-gpu-hdmi-autio-unplugged.html' title='GTX 1060 GPU HDMI Autio Unplugged'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-7571594146484906732</id><published>2019-09-16T10:11:00.000-07:00</published><updated>2019-09-16T10:11:12.777-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="4k"/><category scheme="http://www.blogger.com/atom/ns#" term="high res screen"/><category scheme="http://www.blogger.com/atom/ns#" term="swing ui"/><category scheme="http://www.blogger.com/atom/ns#" term="tiny buttons"/><category scheme="http://www.blogger.com/atom/ns#" term="tiny ui"/><title type='text'>Java Swing UI Looks Tiny</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
You probably have very high resolution screen and everything looks tiny.&lt;br /&gt;
&lt;br /&gt;
Just add this JVM parameter when you run the application and things will start looking normal.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;pre&gt;&lt;code&gt;-Dsun.java2d.uiScale=2&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
If you are starting the app from within Intellij, your run configuration should look like this:&lt;br /&gt;
&lt;br /&gt;
&lt;img alt=&quot;&quot; height=&quot;129&quot; src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAACGgAAAG+CAIAAABKrTc1AAAAA3NCSVQICAjb4U/gAAAgAElEQVR4Xuzdd3QcV34n+q7qnJAbOecMEAyQRFJMIhUpiUpUmOTRjMdhPTse++x7b73vD7/12bP73u76re159njG9oxGo5xFUqIoBokiKTCCyDnn3Oicqt7t6tzoBrobqQF+6+DwEBVu+NzqRlX96t5L7a6/j2V5LMsaDAaT0cDyeOlpqa/+8IeHDh1SqVQ0TfOwQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIHtKGC1WtVq9ZdffvmLX/xieHiYVJHataeeYXlGg95oNPL5/P/813/91FNPbse6o04QgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAILAAwzCfffbZz372M6pud73FYtZptXya//577xQVFZFtZrPZYrGQMEvgo7EWAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCGx9AYqiyOBbIm4h/+no6BDwWMagN5Cxuv7mP/81iZqYTCYyZhcZuWvrVxY1gAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAALLCZCAiM1mI5ERMi6XRCIpLS0VkK4ljM2alpZ2/PhxvV5PAieImixHiG0QgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhsOwHHZPDkX9piNpPeJT/72b93DM+FqMm2a2tUCAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAgZUFSIiExEpo+0QmLLt71y7yC5ndZOXjsAcEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQ2I4CJFAiYFmG5bFSqZQEUhA42Y6tjDpBAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAQkoB9qC6GsY/ORWaKD+kI7AQBCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEtq8ATcbpIj/oa7J9mxg1gwAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAIFQBAZkZnvw4FswMHyob9oMABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQGA7CpARuuw9TrZj1VAnCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIBCeABmqK7wDsDcEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQ2K4CZKgubpITrtMJhurars2MekEAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIBCKANfjBJ1OQqHCPhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCGx3ARpBk+3exKgfBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACoQoIyI4YqitULewHAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIDAthYgQ3WRuMm2riIqBwEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAARCE6BD2w17QQACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIHtL2AfqossLOl34vp3+1caNYQABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACgQTsPU4wVlcgGayDAAQgAAEIQAACEIBA9AiwDIMBdqOnOVASCEAAAhCAAAQgAAEIQGA7Cwi4nibbuYaoGwQgAAEIQAACEIAABMISYLW3X//bj7rM3FUyJS498ecv75BTYSWxJjuzi/03b3eNTU1Nk2U+/vBPf1AfswnFWJO6RHkiVnX/nYabLT3Dk3Mag9lGCcQyZUJK1dGTRwollHmq8eynF5vHDZLUioNPPLojVXSPtYJ1puXcqS8bR3Si5LL9jz+2O0NyjwFE+dmL4kEAAhCAAAQgAAEIrIOAwBE1wVBd62CLJCEAAQhAAAIQgAAEtqIAu9je3G9xvltEifMri6XOkW03uDa28TtfXrijd5SEH0cu2bnxdbGsrQCjbj/9+w9uTpi8cC1GzdwEbeKTuyXbyFdvfXRj2ka2GgZvffymOPHPHs7mr20Rojo1Zuqbd967Nm4H0A/fOf2mIPGnx/OFUV1kFA4CEIAABCAAAQhAAAKrFXDOcbLaZHA8BCAAAQhAAAIQgAAEfASY6Zbz19qnZhfUGq3OYDCZLFYbw6MFIqlcGZeYnJqZU1haUZyhjLrrUXvcZMDqiptISndXx/BGL7999s7YjFpnNFlsjD18QVE0zXdWRpWSkZ1fWFacHbfGXREo+7i6roXmb93X/G3ase62zu6+/qGJOa1ebzDzSJeOmARVakZ2XmFpWVGaYtMiEdaxr9967+aEK1Dm8ab4GTnpfB6rHRudtwcNuIVl1KNjGjY7buu2haeGPNaiX5ghHZqmptXykr0VKu/TzbObeXyECxs5FoZ4qJn8pMD7eiWO/0IAAhCAAAQgAAEIQGArC0TdjepWxkTZIQABCEAAAhCAAATcAsx0e8OtZsdwVx4Wm8WoXSA/0yO9rTe//kKZvfPoEw/VpIij5zk0u9DWMux6TkzJymqLhDaLeqR7cMKnLizL2Kxmg4b8zE8N95DKnJUkFdcfOba/LGnNwic05eUSPUThnOWsear5wplzN/rVvqEJs2FxZpT89LZcv/RZTO7Bk995MGsTejGw2uaLV8c8RaP40oS0tDiRzahRi3LSxSRUIk5MlFK9GnckLSFBtjWbwrfZWM3t3//9J91GbuYcSlaX8kCFKnDDCuOTlHTnPOPYSokSEjdj3LrAZcNaCEAAAhCAAAQgAIF7UODixYs0TR84cCBg3S9dumSxWI4ePRpwa+grfQIn6PsfOhz2hAAEIAABCEAAAhBYVoD1fugfeE/Wqhls+ODXw9Mvf+9IrjQ6nkYzs60tI+64ibystoC2MCy98vv1LGOc7vjqrb72uidfeqIqYS16UJCeLe4X/e3zEm65oboYdduZ3394Y9IcuP2da1mbzkJJ6c24F2H13W397iG66Liak3/80m6VyFEw1mLUGS2ssPChZ+8fffvamIHHk6TVP3OsTMxanVGEZesV3RtZm9lMzmxnISmKCnp28fMOPbt/5K3LQ1qGJ06pe/qRShmPdLuK7uqhdBCAAAQgAAEIQAAC21SAxEXIQipHYif79u3zq+WVK1dIWMWx8qGHHlqNAXqcrEYPx0IAAhCAAAQgAAEIBBXwGWeKDG1FBrYS0ozFbLX5ztRhGr/y0fm8P36igLzev+kLM9vWOuZ6KEwpymvyaRsZYYzn3fODFsnjYmUCHkN6nGg1erPPM2Tz1O0PX7PxXz1RroyOSNCmkbKGvrOvv39jyrpSCSh+dl2tis/bhGfxzOzktGtUNh6t2nVkp0rIMPYTlAzFRvoU2aMDLBVb9dyflx6bnTWKE5JiRDaDzrhSlbbCdorvHdyjg5+tLKsoe+qn/+nIzKxelJAUK2IMOhJDwgIBCEAAAhCAAAQgAIENF3BHTUjO58+fF4lEe/bscZfi6tWr586dc/z6zTffkP+sJnaCwMmGNy8yhAAEIAABCEAAAveeABVz/0/+03PF5NqTternx3qbvvnii1ujRsdb6yyz0NTQfii/dvNHAGKmW1sn3P1NlBW1eZTN5t9cil3f/T+eK3I8dWbNi+M9TQ2XLlztXXAdZ5tvOnW6MOtk9b0cOmGNPec+vj7tFTWhJMll9Xv3VOanJShEPIt+cW5yuLej5W7zYGxdVTyZb8PfeSN+N5k9U8JTSqXEpNNZ/QM4VrPRIpXEqNJiyBQnFpPZHWnZiAKuYx7BQyV+mdrMRjNfolClKXg8xmI0bReAdbRF0hCAAAQgAAEIQAAC6yIgEHjCGaTH9GeffUb6nezatYtkdu3atS+++MI7V++dIyiNMydHx/jN6B4fQZlxCAQgAAEIQAACEIBA9Av4DDPFFddxscmXJWRXHXwpL876f/+uUesMnZiHB0atNUWOa1NWff23f3dmwBGwoGQ7XvmLpwqdL8czU1//6pcXxh2b6IT7/+BPH85yvTfPmtWj/X1DI+MTU9Nz82q1VmckvVsYHp90EFGl5ZRU795ZnrL8gGDMREvrpCtQQsdW1mTzrFZuwCzfgYlY0ivBPj88+RHGpJfvO1FWW3nqn//l0ohzGhRW1/nVtZHyo5lLB+yyaYabbt5q7Rocn1s0WGmJIiE5M7+sdteOwsQlU6P4ZMpqBho+7x3qGZqYJyNbCeVxKVmFlbvu25Ef5zs1SIR67hOKNU53Nd5u6RoYnZpb1FsYWiCSyJSxcfEJquSU1PSsvPzsBMmKz9yZqYYLjWrPSFD8hJrnf/zinhTnKFgkt9j4pLSc4tp9jzyj1Vr5VuvS2dl51sWhltt327oHiJXeQkvksUmZ+SWVO3aULm3HyFrfPvyZu+a2ng//y1996Plk8dOP/NGP9qtoa8ubf/N2izOuwy966i9e3uEzy0k4YhG3DmtZnBjo7e0fGhmbmJ5b0OhMFpYSSpVxCUnJ6ZX7j9amCFjTZMftlt6xyZlZcv5r9EaLjUcLpTGJKZl5pTW7agvivc8U32HgdDd++3/d8FSdTtr36p88lOEcoM7W9d5/e+OO3iHFz3vs339vT4zvGbD+LeX4BjFMtt+62dQ1MDat1pms5KMtswOkpOcUVNZWZWx+4NUjiP9BAAIQgAAEIAABCKyHwOHDh5VK5UcffeQOZ5w+fVooFOr1+rNnz7pzJAPRPvnkk/X19SaTKeJioMdJxHQ4EAIQgAAEIAABCEAgdAHGrNFouDgCRfPJqF3SkvIc/t1W58vrrFmrIa/+C1Z8IL9MhszgpTfecj3e9dqPMS5OD5OfzjsNBYdffOGBjKAz0dvGW9tmXLNX0HFVNVk8W6CBphiTVqtzxkTIkE58oUgkK3zs5aN9f3tm0Pn8n5lraRo6lJnnc7VNhvE6/e7nd6c9U37Y9OrJAfLTeuNa6UPPP12fETwkwUw1XZ5yV8ukmRlqIz+3b5IpVR6vjF8aoVlGKugm61zbuQ9O3xjReU3hwZiNWvKzMD060NXM4/GLn/7Ll2qXjz/xeLaRO3fcPXd4FD/lwe+8uDuZbzWRWBbp0cENhWU/D8iZIBDKpYxO71cm1jRx6/T7XzR5WfF06inyM9h6/Ur2fU89+1BxrPfEMxG2/soT8QTF4jasmdjy2dj6P/v7311f9J9ZxaxbmNItzGiT9hyzH28evvHl5T6fHlLkVJ0bIz+9Tdcbao6//GT1mky+413YjWop1jR69d23L/QsetWPMWrmJsjPYM+YML8SgZPlTyJshQAEIAABCEAAAttAgNxJOOY18Y6dfPzxxwzjuVQmdxrPPffcfffdt5qoCbFaeZrLbQCKKkAAAhCAAAQgAAEIbLqA+81+MnUEmRxEZ7Aw3v04aK+gCXmi7imu31QMfK/rV8r7F595SALW1qbpPf/O590G394jnl1tY61tc+64SXxVTSZv5UGJWJZMdWLU6wzWpPp9pZ6YDKMZHJj2ftBtnbz25m8+9Y6aeBfSutBx9o33b7mzD1iBACtJLOajNy8Mer9HFaEej1E3f/Tb9xp8oiZLcyS3IUtX+q9hpnp61O7KU+KSQweyKKNOryfjXNnITQ1BI312rBazichptfZTwWexTja8/dppn6iJ13ZGN3T17ddOdTi7Kzm3rFSslVrfvw7kd9p5fvH5nkqTcI87p0jEImwdqyXoqUgJ0rJS7R8YSp6UFLzThWXm7ifvXXH3pwpQXe9VlMA7FOc7G4p3eHPDWsrU9+V7532iJl7FpSRZ2Src2K7QptgMAQhAAAIQgAAEtoGA2Ww2Go0kdvLSSy+RQbocNfKOmpCVJ0+eJFETstsqAycYqmsbnDCoAgQgAAEIQAACEIhCAd8Z4EkBydtBnpAFq2lpHvS8O05J42LEzrG87KMn+Q5S5TlymU1kEm+fcIs0JiFOKRUy2unJeYNr+hFmsenr23sLHkgM8JTVOtzStuCOmyRWV6faLM7+I8vXxY7PWowGUU5hBt3c66wVOzcza2FTnWNTWSe++eh8v3O0I9LdQhyflZseKzBMDw5Oah3PxFldz/kvW0ufq3Q//PbLlowLJktISowRW+bHJ9Um1zhY1qmGs9drXt3nfHK8DNEym3js4t3TZ1q9oh18RWpRcW6SjLboxzoa+91byO3JSgP8soaJiXlPE/KzywpFBoPJ1Qh+J+uS1GzE6ss+l5W9i5JYmRgvtalnPA1pm71z6rP8zGcrXFiRtb6PMKXIKM1P9AxnRSeoRNxZ6xtpc62JSGyZJlhmE4913RTa7ShaKI9PiicTxZi188RElZUh4gpJqVJVfIFFmZgYq5BJJSLaqp0eHp7Wu+Ct4zduDNz/eD53C+iTHSVIyC3L9MzJQ8ckS3w+dd5tZh/fzEGycS1l7mtsdn84Kb4ivbQ0J17MmvWLM+PDw7OpeVlCEo3zO7PwKwQgAAEIQAACEIDANhQg4RByOVpXV0de6XrrrbdsXnNSkklNXnnllaqqKjJyl8Wy2jkUMVTXNjx7UCUIQAACEIAABCAQrQKs1aTXzE8Odd68fKXT69G4rKjYPh9IsL4g4VeHznv0p3+0N87eOcA88c1r//hRu6N/AstM9PTp7k9cOm+7Zbilwz0WEq0icRPG5hlTK4QSMBZxXIKY6nVWi2X0etK5hZu4hNV3XG6YcI76RQkzHvzhj58oVnLBG/PE1dd/+WErlzNr7LrToa3YubRwZCM/4/Cf/smjOdxYXqx+8MJr//JZt84BZp1obBy7P9CMKiEU27ELM3nrWo+7Lw4lzTv2o1eP5jpG5LI2vdbUfzeMp9Is6UXiiTZQ0sR4gZlMNhPawurbPVZklK+Emmd/+PyeNFJv20LHZ6/97tKgkas1q+v45uZ02YHkADGw8FvfniKdWv/c9xznjKOoNpNWZwpW7jUVW5nGq0MNnX/8z53nNpms3biwaBHyWC5cp6z7zv+5V6nw7hLie/brR0fmmfwAnTPEhQ9992SpJ/LImHRak8+gX0uLuIEtxerVi+5JcOiYPa/89Lli940sa9XpTTzvO+alZcUaCEAAAhCAAAQgAIFtJED6nfi/3cTVjnQ9IR1NDAbD6qMmJDX0ONlGpwyqAgEIQAACEIAABKJVgF389t/+5tsgpaPEOQcPlogYszOy4H8R7HrFnxzuv8l7jd82lrWRCUpYihak3Hew9lLnN/PcI3DWNjM1bWMV/pOCWAabOz1xk5TqapXV6pzqfUmxuQItDfKwVkrgPf22lZvOgzzXZ409LT2Ox/2kW4Ci9uFjRQqe1d6dxV66+mN7rrR/OcFFTmxjQ6PWuhKfa3RX9tKYWBGpk40ldZJmH3zmYMt/PzPk6EzALAz0z9kykuwxBP+ShaTHzPb0zrpCBBQ/bf+JwzlixkLCHSQ3kqUXQZDKeyOxpOaeQyghn2dh7A6hLKyhp6XXZcWjY3aeeG5PqpjUm6Go2JJHXzjc+7efDXGps7bpjvbpfSpH5CSy1vc9ioy6Rm6x3CEKMqZc4Ha2HxWhWESts6RRnec26blE0+JYJU+rJRMEkYURyhV8UmzSbI7zgDv7H6w633Ft0bGDRrPIsElc8M33DGZJ9yqvEdMYe8u72jBQoUkCG9lSEoWMJqEzR8hM23Pj5mByTaqUtgOQiXJkIlqjDzqWWSinHfaBAAQgAAEIQAACENhaAg0NDWRaeL8LVRI4eeedd9Rq9e7du1dfHfQ4Wb0hUoAABCAAAQhAAAIQiFiAEqc/8Mp3H1SxekPEaQQ6kLXqtVryrJUb2Sgxlbxk7wic8HhGg/u5vOdAc39Lt3vODH5aTVWCzRZ2326GzH3uVRahSOh4CM9OjU26H+uymhv/+lc3AhWZrGMti2rSjSTWq3+Be0/WptdonBsovjiuqFhFDU04Hm4zc7NzLC8pSKorr2bJ8e6uFVR8cYnKau9x4EjcFvYjaTLlu6cGrMnoeKy/cjHsAsTK3beAkpfWFPKNOo2ZKwotkCRUV6efHRpy9IVgZscnzGwy1wnHdwmz9V0H20ykU//S1PxTt/++xmKBsgi6zlM7sgsJHfBcTceYZnvu3rnT1jsyvaDRaLRGGy2Wxyooz0eLzJUSOFnWQqruH00MvKtz7Ya2lCS3NE/U0cWdSCRidvvdv2/5Mrdyx44dNWUZSjIFDeUK8ixbZGyEAAQgAAEIQAACENgWAjdu3Dh79qw7akLepCHVcvRAJivJJvLr6mMnCJxsi5MFlYAABCAAAQhAAAJbUICi44ofOnHiYEUS36Rzjjq1DtVgGQslFLsTdryt7+p47Vxt6mt1jXtFRodKr6mMZyKImyxMz3g6qVACZYzM8RCe0YdePdJNhjwDDvjwnrszcIZibCajWKlw70aGQDOScINn3vIwHe1dLdyPnimZXGgMNiNJKAlTcoXXJOWscXZWx+bFBKzTkuR8rOi4RCUJRrlmc2GsRpM0LoGmnB1tyGhodtgAgRNPsqG0/pJChLBibcVCyDDYLizjDJuw+v6L77x/ZcgzAh45hDFqZo1eh7Keae6DJRjq+o1tqdidxx9u+cdPu121Y83z/bcv9N/+SplV++DRQzsyZSF2aQq1etgPAhCAAAQgAAEIQCA6Ba5du3b+/Hl31ITMBk8miidFfeONNxyzxJNNn3/+ORmza//+/aupAobqWo0ejoUABCAAAQhAAAIQCCbgMxIQJUzMK8lQ0Lb5gfYRMlgQdxDLGkzC+FgSNdEbvTs1+M4NTx4Mk0vfwC+U2zd4BhTyLYn3JteTd/ce9hGoPLuTobRa3RN8UHRmTUWMzeoJJNhL6lfLQCVi1b1d454ZMWhVahLtKN2Sw4OZkfVCETchObeHX67eNSKPxE1mnzkoaOfoTBHpUSIR6SPibATWoFm0snL3g+glxfeYB6mINDFJTnWrneVnxvsHDXWVjglTghzhXu3dLkTAaibDnXk1lY387p0EiQM4jX0TDrH1lxV2pehff67xIxSLqHVWOBO4crKapk/9oyZkICvSFYMlJ7sHhztL7L/7lsT+a9BmDay0oS3FWlnV/h/+NP7cx6evdMyS6UBdNbJphm+d/m3f0FPfe6oixNic75mC3yAAAQhAAAIQgAAEtpDA1atXL1y44C4w6Xl88uTJmpoasoZMfPLuu++6r2kvXbpE1hw+fDji2qHHScR0OBACEIAABCAAAQhAIGQBacmx7z5TyOeZBs784pcXxxxRCdY0ePaN0yk/OJThPTUImYbPNcaVPXmL0UhGFwprEKGlpfJ79Ou7gz1u4p5Wg+Jn2+Mm4c0LT9JjTf1XGxyTb3Cp0wlFBfEUjwvZkB4YUlIRR6503AM//g9PFwS5DGcZk15n9okNLK0Nt8Y2PTnjGV2LdD8ROXeMRI+OT0ygeGMOJnauu3t6X1rKKszTcrPF3zY7h0RjTd0NN6fK9oeUIF9JhpbizTtKwizMztt48V5W7DwZU8zVmhSlUMqC8HivXrb1Qzg+0C6RikXSOoHy91vHLrTe6nH1xqAESbXHn3+kLidBKuDZDF0f/+2/XHWNxOYJQpExvjy/MGwo55xPphvbUozZaBImVj32asWhyc7b1xsabrWPa12T79jmWz4/X1rwdOmynY9CYMQuEIAABCAAAQhAAAJbR4BETU6cOFFXV0fGnCWlJmNzkajJe++9546dCARBbrpCqyN6NIfmhL0gAAEIQAACEIAABFYlwE0+bbEIso+9+FCWc+4Pe4+CiWunLo/6ziZCichYUa5nuqxtasITIIiwCMs+OWf13a39rlk4KH5OTbnCt1dDCJlapm59/MntBU8gQ5C5uy7V1WWEr0pLdY+ixahbrrfryFPrwEsImdl3YfVddzvck7KQ6dzTHXOkkyhNJHpUYl5+nOvOgLVNXP3ozO1htcnGWA1zw22908sCBiiysLC6xNPDhLWOf/PBmTYSAwm42Ewmz8QbVHJmhqfxdV0tfd4z0jAz7a2eXj2UKiNNvPIIYOEWPmAh/VdGKBZR6/jnHeB3Zm7GNYcPiTLmHTj+QEGi1D7RDMUXSUSB7vkokVjkHhKODHw1H+5geRvdUmQCGq3eZOFJUsr2Hv/Bz//jf/jhkQL3iHCsYaDXq7tXACGsggAEIAABCEAAAhDYBgKHDh167LHHHBUh/7n//vtJ1IS70bQYDIY9e/Y8+eSTjq3HuGU1VfaJugTtnb2aHHAsBCAAAQhAAAIQgMC9KOB3acmYdTodnzzHlSQ/+Mzhll98MewcC8s21XD6SukfHEjzXJhSSSkkDDDomgH87pXG6hM7Eu3b/a9X7cMLuZ6L+46oxG0JvIlLxv00ndV2tQ64piahBHk1ZTKLzTNVCdd0Xru7fnckwFp1M0PdzTev3eya9cwLT9EJux+uj7NZXOEYWUFZtqC7z9nPZvHO2//Ezj5yoDpL6aozY1oYH+hVx9SUezH4jRDmqRGjHbr2yedt7ifdlCCnslhOJm/hCheRHp21e0/Gt2eHHaN1sZapxtO/aTzNpbdk8dZbstGxwiYs2V+f3HJp0tkngLXONH7wq5GWul3VRVmqOJmIIj0IdOrZybGhvs72fsn+n7xUp3SEQESFVcWS1mYD10CstuXs6czYx2uTSYDEtth78ZOr465uBjw6uaIsicTeHHv6hEc8VvZE/CInQU8Mn6M8NfNrfW4v0qUoMrGIWifomeAuJEvzPdERRjM/q9XyGDLKmb36Bu+AlaeOgth4MrbVnAOHGb5zY6TiUKYjDkVmijfwpDJXACvIJ2sjW4rVjXaN8lJz02PNRlpAxrMTiRJKDuzK/qqv3TnAnMlkIGOSBQoRBTlHsRoCEIAABCAAAQhAYOsJkKvZgwcPkjAJmRD+wIEDJGpCxuNyVMNkIgO6snv37iWzm5DJTh566CHHmogruaruKhHnigMhAAEIQAACEIAABO5NAdZmNFhTDzy9/+7/d3HC+QjcOtlw7lbld+sT3Z0H4oqKU74YGnNsZ7Wdp7HO1p8AACAASURBVP/5f11VJchoq1Gr9nTrWBNBVtPZOuiaz4QS5teWSqyMbw8Y/3w0t9/9RQd5qExmZNf7zs7C7UmJMg6efCyftujcBzLKmoM7vhq47iq7ebLxzG/vfiGLi1cKWfIivVZnn+SFTjmQVZaWHKQLBTN06bVf35EJeRbd/My818Nwio7bebhGQbr0OPOLRM/GJO179ljnLz/rd0Qs/Osc5u8kmpF26MTetl9fnnTPXsOaZjqvfd55LUBSgvYuzY6djikqGFHZwb2p7efHuQNZ20Lb6V/1fJUQJ7Vp5ha8qy0rO7gnmWVNAdLbiFWRikXSOivXh05KVfEpjQObmfzqN7+aqChMixWTQIJt3ne+eFdiVHJ2lvjqnDNCZR2/+rt/6EhRKWiLQbMwZ8w78bNnSn1H0PMvxUa2lGWo4ZP320wCWYIqKU6pUMrFPPPieF+/O4pGKWJjETXxbyL8DgEIQAACEIAABLabAImFkCodPXqU/EsCJO6oiaOe5FcyfteRI0fIr2RPssNq6o+ry9Xo4VgIQAACEIAABCAAgbAFbCaDLf3Q8d3xnitR8/CVi63ugafI4/Kk+sNVzh4IXPo2w/zE6OjY5Oyi0f2oNOyMAx3ALna2ObtZ2EMehbXFYtsKsz2w5H38RTVZFrlwh89C0Yr8Iz949ZEc2uQ9UQlrExQ+/sK+NPcYVPaDWKt+fnpyamZB60yGXZid84xZ5V9a0rllbnJsZGRs0jtqQsqc9uDJx/L4XqWOSM9qZlMP/vAPT+xKl3lNfWEvhH1UMd9gTpDQjneJWYuZznvsB8/VJNrHi1ppsQ23dy46KbmYywsP5XhNV8GatbNT0z5REzqu5umna2XWIKN/rZThWmyPUCyi1lmxvFRsxW7P4GisTTfWdv3r8+fsy4Wbg67JT3ySYcVF9+1M9Gpam2FubGhoZHxabbBZZqZcs6IEzXsDW4qZHp+0xwWt+rnxob6utrt37txt7Z0ifUwcpaP4qtqaDNzaBm0rbIAABCAAAQhAAALbR4BERBxBEUcQxa9i7k2rjJqQZJ09Thz9z/16oW8fTtQEAhCAAAQgAAEIQGCjBQKMj+Qa8sdqMgjyjz5S2fxmk3O4KTJlx9dXh0uOZjmuTm1WScWJ7xzTvHauT+ueCjxgBRzDJnGb/DL0Ho+L9d3IDVfkOGahvW3EFYqhxEU1hUKrzdX/xJOhf9KBikIJYnN3Hnr02H15Stao01l8ym0zm0UFj//kx8r33vmidWZpBo7CWGdn5xlW5Y40rJQtJUwoO3ryhQO5tF5j84ynFJEej3SfMcoz7jv5s53Hhrq6BsbnNEYbLVYkZhYV6s//97ebHSEdihLw6ZDuGqxGvTW+7uU/S8j++MNzdyfcz7gD2FECOW0lM33HcNPRs2Yjk3bohz8SvvPm562zS60oSppx37OvHK+Sm7Q6d639rXxODJ+NntZf9pwJ1vrc4VyCkYlF1DrL1M5ZTkZe88xLY+o3vhk1+A9N5ifulrHSWQ+/9Mj4v37ep1vyIWMXpmfMbLKYOzZY7hvWUqx2YkLtXwp3tShBfMWTLx/JoA2G4HFHPwT8CgEIQAACEIAABCCwhQXIdCbLlH71IRNH4hiqaxlkbIIABCAAAQhAAAIQWBcB1mYySqsePnyt41S/czoRZu7uleb6kzsc4zWR+cLFOUf+8C9LG69evdPePzq9oDPZKL5QKJIoYuLjEhOT0zKysnJz0lb3kjk7394+5n5rXVJsj5sEGqeLisutLJwbmpxb1BstNjKVAumHQTpi8IUSuTI2UZWWkZNfXF5RlCbns4yVRE2W9EThsRajXqDIPfj9v9gxcPf6raau/rGpeY3RyiNzd8sUsQlJKenZ+cUlBUne/TPonMN/8L28geHR8Ymp6bkF0sXFYDJbWb5EEadKzy2u3LmnriBeYDPqtL49XyLTI42i07JSmSQup7I+p9Ld8LahM5OeWe8VsY7wxsrnBWs16AyUPHf/y3+++2j33caWrr6hsam5RZ3JwvBogVimjE1QpWXmFZZVVJJ667UmVy5kGnCTPHv/939e2X37+p2Wjr4xAm+hJPI4VXZRefWu3dWZcp5Zr/Xu1LNyedZ+j8jEImudlUrPWCzy4uP/7i+rb397o6VnaHyKdGQyWRmKTAgilsoUMQlJySmpaWmZuVnujwxrtVAZB3/889wbX1+508GFyuznoyw2KT23qLQykwtjLb9sUEtR8orHvivr7uzuHRybnl/UGklYkhaQ8yEpLaugvK5+Z3GiwKTVLF9WbIUABCAAAQhAAAIQgEA4AlRmVjZ56ejKN5fJUWsVjQmnANgXAhCAAAQgAAEIQGB7CghlsXKRMw7AMibdou/74JRQppSJ3CMFcQ+hDV4BAIo8GJWJBX6jRHlT2Q/ReCUqlMW4EyRP7TWeJ/E8n7KQkbZ0XLiGnbnyb7++NO6cU1224zt/+XSO/7zwjgy9jw/WWiRmYjYZTeRpdbA9KBItkEqE/GCDV5EJYLSkn4fncO8aBUqUZUg8Rm/yHzCM7Bq+Ho9dHGgZ5WfkZSbJRQLSr4QMD0ziPeru82+9c2XE6Hjfn5JUvfCzJwtDeKTuKi6ps5Src7BK23e010NHQmNedaT4YpkssBXLWs16vYGEX7yXsFufO3iZozyJBz57SLEjFQu/dUIpJyWUymUiwfLSZp1a75nChyjL5ZJAHzLWolvUubr7LJv7RrQULZIr3XPV+zS7/Rdy+hh0evPaDuK3JBesgAAEIAABCEAAAhC4twQwVNe91d6oLQQgAAEIQAACENgwAe8hkbhxs3yHEGLNBqNIIHVPgUELRQKjxdOJgCWTVC+aRWKxUGh/ik+e45MnpPaFsS82+2K1WrzTtP/fnYlvhmSsLs+erk3MVFvbpOthPSUrrc6jSH+OgCMC2axmCy0gc31wxXAtzuI4i2KxrPTklnQ70VrMApFIRKrE55PkSGjCUSVXGr75WwxancW+q2NveyyDO4RhGZvVYjGbLdYlgyw5CheBnr6/4cypHisJaMXGxSntMSubUU2mutB74hmUvLy2UMiyYcwsQuqss5hIvwcRaUfSkC5CrtquVgxAx1pJEMlMDrMfx7U/eT5ODiBtbjYFekYebus7nYKfM37t7NPo3EnCRiwWQeuEUE7WrNdYze6ziztXXJ8Zzo47ychHxnOKE2WNxko+ZCJylnHno/3scpxc5NRy7biMLTlgA1rKZjboWKvA7wziPgbkhDCZfQfG87Qc/gcBCEAAAhCAAAQgAIFIBTBUV6RyOA4CEIAABCAAAQhAYFkBi169oF9uD8akVZuW24HH2sxGvdm47D6ejctkaNGpF/xTYabaO2ZcvRYoeVlNDmUNNkcCGZJIu3xR/VMP+jvpl2K0moNu9tlAHgxbzDZPB4HQjnLtFZ4eMzXORZFYi35hWr9Ei2yhFKWPHC0WMoYQS+8prb0zTsiVXnJYaO0fZus7c1nmKE85guy0OrHwWidIEZacEBFAk0MMK5yQK+bubOD1aymW+yCEfeIt8cEKCEAAAhCAAAQgAAEIhCiwulGhQ8wEu0EAAhCAAAQgAAEIQCDKBJiJto5Zd9xEWVGTTQUY8irKCr1+xWHVExP6gL1tuDwpYWLVkz98aZeS9FhYv0JsqZQhtqWaC4WFAAQgAAEIQAACEIBAWAIYqissLuwMAQhAAAIQgAAEILA9BGyjbZ3zrrgJHVtelclazIHH6doeFV6pFsqaJ78T39fbTyZwJ9Nvk0VvYsg8I8r45PScwvIdO2ty4/gWvcYQZGywlZLfhtshtg0bFVWCAAQgAAEIQAACEICAQ8A5Ofzlr78iv2NyeJwWEIAABCAAAQhAAAL3ioBAGqMQu/pfs2bdov6e7kxBS5QxkmVmfecm4DatNI3LvXLy2OsJsXuptVFXCEAAAhCAAAQgAIF7TABznNxjDY7qQgACEIAABCAAAQhwAgKh0DNqLWMx39NRE+LBmPU6xj77NjdLuHMOd26mcPuM4maz2erqn4MTyCEAMZwJEIAABCAAAQhAAAIQ2LYCGKpr2zYtKgYBCEAAAhCAAAQgsIwAmfB6ftm565c5dltuslnN5Me0Leu2PpWC2Pq4IlUIQAACEIAABCAAAQhsvgAmh9/8NkAJIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQiBIBBE6ipCFQDAhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABDZfwGeOE5ZlN79EKAEEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQ2CQB9DjZJHhkCwEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAQPQJIHASfW2CEkEAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEILBJAs6huhyDdGGork1qBWQLAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIBAVAigx0lUNAMKAQEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAQDQIoMdJNLQCygABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgEBUCKDHSVQ0AwoBAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIBANAggcBINrYAyQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgEBUCPkN1SSSSqCgUCgEBCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAENkMAPU42Qx15QgACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgEJUCzh4n58+fj8rioVAQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAYOME0ONk46yREwQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAlEuQGVmZbMsm1dQGOUFRfEgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwHoLoMfJegsjfQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABLaMAAInW6apUFAIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAATWWwCBk/UWRvoQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhsGQEETrZMU6GgEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIrLcAAifrLYz0IQABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQ2DICCJxsmaZCQSEAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEFhvAQRO1lsY6UMAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEILBlBBA42TJNhYJCAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCCw3gIInKy3MNKHAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEBgywggcLJlmgoFhQAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAYL0FEDhZb2GkDwEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwJYRQOBkyzQVCgoBCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMB6CyBwst7CSB8CEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIEtI4DAyZZpKhQUAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIACB9RZA4GS9hZE+BCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACW0YAgZMt01QoKAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAustgMDJegsjfQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABLaMAAInW6apUFAIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAATWWwCBk/UWRvoQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhsGQEETrZMU6GgEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIrLcAAifrLYz0IQABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQ2DICgi1TUhQUAhCAAAQgAAEIRI1AaVFB1JQFBYEABCAAAQhsDYGO7t6tUVCUEgIQgAAEIACBe14APU7u+VMAABCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCLgE0OME5wIEIAABCEAAAhCIUGBwdCzCI3EYBCAAAQhA4F4SyMlIv5eqi7pCAAIQgAAEILDlBdDjZMs3ISoAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIDAWgmgx8laSW5QOn/x859HkNP/+J//M4Kj7tlDYmJiCgoKJBIJEZiZmRkeHjYajfesBioOAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQOCeEkDg5J5qblR2BYHklOQjhw6np/v0Ir91+/alS5dWOBKbIQABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAYFsIIHCyLZoxOioRWW+YpWXfrP4xO2prDxw4yOf7jF+HqMnSBsKasASyM9Lc+w+Nji89ls/nxygVUrGIzxdQFI9lWbPFsqjRGdDPaSkW1kAAAhCAAAQgAAEIQAACEIAABCAAAQhAYP0FMMfJ+hsjh60gUFxUfPjwYURNtkJbbb8yskq5TCCwR03IQlGUWCRSJcZLJeLtV1XUCAIQgAAEIAABCEAAAhCAAAQgAAEIQAAC0S8QpT1OvPsubFb/g+hvPMisVRspFMpjx476pYa+JmvFu07pLNPD6cqVK982NKxTvmuerM3GaHR6hmFs5H8MK5NKyA/JhXRDMRhNa54dEoQABCAAAQhAAAIQgAAEIAABCEAAAhCAAASWF0CPk+V9sPWeEKisrBCLfd7uDxY1USjkZB6UewJlK1dyz549JBi2hWowv6BWL2q0Or3eYJidn7dYraTwQkGUBra3ECyKCgEIQAACEIAABCAAAQhAAAIQgAAEIACBCATwYC4CtOg6ZJn37pcp6Hr3Vgk3/chqsUwFw9pUXlbmvf+dO3cCzgZPoiYvPP9CT2/f1ORUWOlj5w0WEAqFDz64/8yZMxucb2TZ0TQdo5DLZFI+zSejdVmtVrKGJOX4N7I0cRQEIAABCEAAAhCAAAQgsJECIpEwPT1NLpUJfGfNDKsMVhujM+jHxsbNZktYB4a7My1WJibFMLOjs8ZwD92q+6PKW7XlNrDcsXEJKekZCUkqiUwultjHgTAZjUa9bm5menJsVL0wt4FlsWe1tb5V3DhChSo1RZWcJJhuahoyeMyCrd9g1W2cXTDhYOsjoFjDpCLIfVMOQeBkU9iRaRQJkCkl4uLivQukUqnIk3eLxedS1RE1iY+Pz0hPj6LSoyhBBEpLShobG8fGxoJsj6LVSQlxEq7Dk8ls5qImfImYH0XlQ1EgAAEIQAACEIAABCAAgWUFyPPNooJ8AX+1l/Ek6BJL7jwL8rt7+9YtdkJnP/ST79bHC9iZy//26wvjzLI12x4bUeV7oZVXda6mZWQVV1YrlDF+qQjI51GhSExOKSqv1GoWu1qaxkeHV5VTyAdvqW8V71rxC4/+4PkKIcWMnutqHjKwrm3B1ocsgh1XEAgmHGz9CskF2ryGSQVKPirXIXASlc2CQm2ggEQicUzK7c4zMzPzmRMnPvjwQ3fsxB01IfvQNDeF9wYusTH2UafIUE4bmKczK5J1rFKxynzVGu3GF57Ew1568cVQSh5u76hQ0gx9H9KtxBE1IdOZTM86X2BJTkpwrAw9HewJAQhAYO0EBMm1jx5/IFui7jx/6nyH2n23s3Y5ICUIQAACEIDA9hIgfU1I1ESr109Mz1httogrRxJJVSUpZDKS4MDAUMTpLHsgJRAK+eSm9h76C48qL3tG3NsbZXL5jvoH4hKSCINBr58cH50eH9NqNWajva+ESCIlw4Cr0tJT0jJIWKXu/n0LczN3Gq7qdbr1ZttS3yrrjYH0IbBpAgicbBo9Mo4SAbPZTCbl5vu+HOQdO/GOmpAym317oqx3LbxDFxsffnDkuJrYyaZETda7UdYwfXcczh29E4uEYpFoDbNAUhBwCVAxu17+6SM5NKNu/fj1D1vVwV884+c/+qff2amgWO2tN35xqj/ym3/gBxKgRPHZJUX5+bkZybFknD6xgLWZjbpF9dzUxOhgX0/3yII56IMMShyfXVxcUMAdK5OKBKyVHDo/Nz0+MtTT3TNsP5RO2/+9V3bHkyH/TN1nfvlp5wojcPAzjvzB8ztjKB4z3/DWa19NMDx+9q4HChPJ4ASSir1VzV3fTAY/VQLVD+sgAAEIQAAC956AXCollZ6YmV1N1ISkQA4niRRmyxwJhgPJV2aW19WUFmSlJMXKxQKasRoNGvXs1Phgf3d7e9+kfrv+PRcll+2ozE5JTtTceOdir32ySCxrIkBnHP7xDx9IJJeUxo6P/+69Vq8hlwKlz89+5I9fqY8jl5SzV37zqy/Hlp5vlDgxt7ysuCg/KzVeSa6B+azFqFXPzUyNDvV3tXcNzJt8L4E34pROUCXvvG+fSCw2Ggxdbc0jg30s41MKq1aj12qmJsba7t7KzMkvLq8iIZa9hx++9e03c9PrO4R7FHyreDe0qOiJn7xUq6RYZuqbf/vlV7hBCPQpwLrtKIDAybZq1eXfnd/ceUSiFppETaanZ1JTU/xK6IidfHHu3ImnnyYjdLm3jo+Pb1hdvKMmjujF1oqdIGqy4qlitdpIKE4kFJIuJhmpyQzDCgQCvy5QKyaCHSAQlgBFx1Y88dyi7vfnBlZ4oh5Wstg5FAFKmr7jwKF9ZckSn76LtEQRR36SM/Ird+4zTlx7962GpcNmkGPrDhzeW6byPVYki00iPxl5Zbv2HRi98v6b16cmu7rnd+4ht7ninOJ8SWfbsu3MTysqVNpLw8x3d05xt7is0UDuW+3ZMNz/sEAAAhCAAAQgsIKAY5AuMu7uCvuFsNmRSHijfgmTah995tGqJJHXBQYtlCoTyE9qbumOBw+0vPOLTzpMIWS/5XahZAV7Du7P4vOsnS0bPTbElsMKq8DMeHvn3H0PJJFLyrzSQmlr87KRE35mSUksd0k519lKXsTxXShZ5p6jDx+oTJH6tJFYHpdMfrIKK+sPGUYuvvGbq67H8RtySpOoSf3+Q2QQCDJ/SeP1q8t/fklAZbi/d3x4sHbPA2QeFHJgw+WL6xo72eRvFb8WjKmoL+fuGShataO+uOGTjmVvMcI61bAzBKJZAIGTaG4dlG0jBGJjySiysoA5kdjJD77/fb85ujs7OwLuvOYrlw6TtbViJ4iahHhKzMzOk7aWkolN+HyWZ1NrNOT/6HQSoh52i0yAEqbcf+L47G/evz3vf1cTWYI4KhQBQWLVEycOFcc4Rz9nTAvjo5PzWqOFEohlMYlJqqRYCdnGzM/OLWkWv2Nthrnxsak5rclGi6RyZWJKapJcQO5kFue5jkTT3V3zu+4nkRNRdkm+tK1tmdtcfkZRAeltQrKd7e5yxE14zNjVT85aa7Mk6t4bdxcQOAmlcbEPBCAAAQhAYPMEZCWPnDxeFWsfUppl9LNDAyMzaoOVEkoVsYlpmWkJUto41Du4LaMmm4d+L+TMTHa0z923P4mmRHkVhbLmZn3wWvOzSosdl5Qz7e1+nREEqh3PnDxWGmcfH44sVv3M2MjErMZkpcUyRYwqLU0lF5JN6jl3h/iNOKXJCF2krwl52jPQ3dnWdJsN7ZKXBFduXfu6vLout6iEHH7lwtkNGLMrOPuGbaFT63blCZ3ZUfKS+6riOm/gNmHD/JHRZgpscuAklD4QwfZZvnfF6lGD5RtKyutdtmBlWE2Zg6W5vdeTqMkLzz9PxqwMVk2/qMng4BDpnhJs5zVcvzRq4kh8q8ROEDUJ/WQg/fFn5xe891/UaEM/HHtCIDIBSl70yHMHZl67OIS76MgEwzyKUhQ/8szhYiUZ7YDHaEduXf66odNvzAxKFJNWVFEqGxzwaxPfY4dvXb685FiBIjW/olQ57jiUmensmqu/n7wgKMopzpO1tQW9zeWnFzv7m8x2ds244zWm6fbL59rDrCJ2hwAEIAABCEBgEwSo5LqDXNSEtc01nXrvTPOM2bsUtDQpryRV37XMaxSbUGhkuSUEmKnWtpm9DyaTyEluecFykRN+ZllxDHeZO93a5nwVx1FFSln25IsPl3JxPZtm8PqF89+0TviOGydQphdVV8SM9jm7MGzMKU3mNSEjdJG+JkujJnKFMjM3Pz4hUSASGXTamanJ0cF+d38UEmIhh0jlCtLvhCRy5cK5LdGYqyqkuKC+lgTQeNaZ8dmYtBSRMGvXjvTbF0cxovOqWHHw1hCwf7NhgcC9KeCImsTExIRYffIqwRfnzoa482p2CxY1caRJYieO6eJXk0UEx5JRwkg4JJQDETUJRQn7QGDzBFiT0UQG7xUm1z/zSInCp7/85hVqe+dMycsPHy7joia2+dZP3nz/YvvSkcZZ8+JY67ULN8Z8R/nwOtY61/Lxmx8EOtaqnehquHRryOJwZKY7ncNuibKK8gN3qrTvKUgvKuTOANtUZ8dsaC/abe+WQu0gAAEIQAACW0yAisnJVdkvMVh924XP/KImZDVjmOltbBl3XiJsscqhuJsswEy1tTmG3RLllBXLg5ZGkFVawvU3sU20tc54XVJSiqpHHq7koibW2cb3/u3NL5r9oibkIKtmrP3KuYYBZ8RvI07ptIwsMlUJmdek8cZVv74mqtR0MhhXcmqaUGQf+k4mV2TnFdTW75Vw8xg5FnIIOZAcThIhSQV12SYbqNjK3WVyEps1dF3+8EK7ljQwnVC9p0C8TeqHakBgWYFN7nGybNmwMWyB5Xu6bGR/lI3MK2wm7oBwoyako8mnpz5dXNREll3oRy0fNXGkE8392yqeVgAAIABJREFUTqI8arL8ZyT0ZsKeENjKAszkt2f6ix5/MEMUW/nY0yPTb9xaOjRUkPoJksof2FWRlapKiI2RSYQCijHr1TMTA513G251Ti/pvCJRFZYWZKSlJCcnxcfHKKQSkZCmbGademqks6nhauOojkd2qaytKMrPTE2IEfNJcgvTQz3NDdeahnVLxqtyFoqvzK7as6O8KDs5XiGhbQbN7ORgd/P1G23jBt9H/1RM2SPPPFaTTM+2n33/dFPItQxS+chXC9J2PlDADelsnfz29IUuTbCqBcjCc6xl/OqpC92hHcvOd7VP3JeazucJs8ry5S0tugBJ8wQZxQXcWMW28c6ueQ8eP+fIqy/UyClm9tqbr18OMPUjX0Gmn60qLshUxZKJPW1GzfzUcF/77Tudk0ZPKqKix/7oeAmZY97U8ek/nunxefuVR6fu/c536hNpc/cn/3yqw29b+oM/OrkzjmINbZ/80+d9Xk96QsrXUVNKHJuRk5eblZ6enJQQp5SJhWTsc24C0pE7ly61YWiBQCcE1kEAAhCAwBYUoGRyGfcaDKudX/D9i7pSbShJZt2x5+MzyEWYQu76g97beuN687B2ybVKmBeBlDg+K78gPyczM41cBiplEpGAZzVoFmanBm98ca7Z67KDxwv50m75CglKnv3f/uOzXvuwmtu/+4fP+71fig+nyuFUgVZklNfVlJfkklnPpQKbQTs/2d/d3nindViz5J18Ku7+7/3kGDcpy/v/4/0Wv5AWv+jEz5+vFpOLs0v/9K9XvWMQXM0oaWrpzrrKkpy0JPtFGM9mMRm0i3OzUxPj46PD/V39s/7X4+FUeSkwO9veMrY/LZNPCXMqihSNjQHfpBRklxXbLylZ22hr+5zX9bggs/5Asf38ZC2jX71/tmNxyXm1NEveKk7pAKkFXlVcWU02kNngrRafN5ZkCiWZ/p22B3p4Br3OaDAqY2PJLKRSqbSsuq7x+hV3lIUcSA6v3rmHJEXoA2ezPdbSqtq6bDKYGjPX3NC5MLrQMld1XyItL6krVXTdDXhCRFrvUD9HotKnfvZsBbm5Mra+/7cfdvrdSaQd+tGP9iZR5o73/9cHrb6fBzrzyL/7fn08xeqb3vt/P+kOFk8WJ+SSu9OMNDIVciL5diT3sPa7XoNmfnK0r7PldlPvbMCv2vX4kgwzzUjl1+hLeEn2K3+LRvR96P2QIS5GIROLBHyKtZAWmhoO9idsSdlCX4HASehW2HP7CIQVNdFota2trd82NNjWYq6/5RFDiZo4UojO2EmUR02Wx8dWCNxDAuaxyx+eTfnBE6UKaf5DTz04/vqlsWDXjX4qCSV76srJs3DXQosViRmF5Ke6tvmTN063LHjfDvHTdz325E7/Pi0CckhW6QOZxRWlzcPy4vIUKXdvwi20RJmUVZGUVVZRdOb3H9yaWXKrKUyqefSZx7znPuXL49PyyU91XdWFdz+8Muq5OqYz9xyrS7dnn1J57IG2tlO9azBhq7vmYfxHmFNVFmevI6vtuHZjKqxSeI5dbLsWACRYMVh1Z8fY/vQsAU+YWVKgaG2yvxvmtwgySgvIy2MknDPa3rW4dLv//o7fBQmVR544WpHoGuWYPO6QxaXkkp+K6vLLn5xuGHc2gXl0aNxakifgiVLSkuieMe9Tg5KlpcXZ344VJpNtHb7blKmpXDjHOjrkdV6GnC9XTH72vpP22I9PHYTSmKQMub7VEmpdAwtgLQQgAAEIQCCKBFij0cT9YaPjMshlz5Qm9L9ylCJvR52nKu4/6LXVl99799KQ39TP4V0E5h3+7nf8LwKFsliVVKG96/2HOJxLuzVQD6PK/FCrwE+ofPjE4ztSJO7LDqEiPo38FOyo33P37Eenm2bCuvgLWk06tvTI08f3ZDgCZY7dBCKpMoH8pOQUVbG6xt//3Zlev8vnMKocKGd2oa1l+FBGrpBETsqLlHfvBDjBhNkVxQpyXcfahpvb1V4noCh/R2U8dw282PR1w9SSC/tAGZKdIz+lAyfovzY2LkGhjDHo9SODfX7bsnLzHVGTwb6eob4eslUgEJbX1sXGxSuUyoSklNnpSfch5PCiskqSFElQvTDnn812+V2QVVtLRmtjbeN3G4etPHas8fbY7ocy+aK8HTWJTVfWqs96OJ8j8/DgqK2ikNxlpGUk050jPncZ8swM+0lHCVPJttZhn20x6en2nlGsdbh/JPjdLz+j/sln/L+++GJZXGoe+amo3ztw9dSnl3qXvs62Hl+SYaUZ0Tm3jl/CIX+LhlfwwA8ZeCLXPWngP2Hh5eG99yYHToK9/e3dXyHYPpFXOrQjNyvf0EoXeK/o7+cRuNwbu3b5qElzc/PFS5eSk5Pj4uJIpEStXpyYHA9xorBV1iP0qIkjo2iLnWyhqEk0fMO4z5a42BjyilfAk2dodDzgeqyEwOoFmIXmTz7NSD5ZlyBM2/f0QyO/+awn6DwYXrnZ5kb7B0Xmyam5Ra3RbOMJZfEZZVWlaXJamFD1+KMjw2/d8b5bch7JmqZ72nunNHqzlaWE8qS8irIMJZ+OLaiJJReurGlusLdvbE5jYgSKlKLy4hQZRSuLjj22s/93173fWeNRcTVPv/wkuTGjeBb1UGtL98i8kZIl5ZVXl5LoiyL/8HMPz/36k/aAnStWTxZxCvzU/Byuuwmr7WofCvh+UtC0Pccudncsc32/NAF2sattYF9WoYgnzCguUjQvvc0VZpcUcpEF81B7V4Cb4KVpklsQ0knpuUe5w6yLIx3tfWNqEyVNyC6pKEqW0PKcB48fnn/9sy7HuWQYGZxm8tJoityjKKkx7zNDmJaZwrdnQCnS0/y2idIzVPZttsnBEVcYLKx8fQpu1UwMDk7Mq7V6MysgzxVU8qlxjPIeqG2xDgIQgAAEtqYAqx4YmGMyyGhd4vxDzx1Qv/d1/9LneYGrxrJmzeTI6NT0vFpv5omUqtySonQFn5Zl7T9xbPJXn7R7XxxGeBFoXRzv6x+dXdDoTaxQFpOQopwccye7tpd2zFjDqesjXg/nWcucz2wbRCGsKjvU2OWroKw4/tKJCsccM9rx7q6+yUWLQJmSV1ycphSIk2ueeEnEvvZec4AL5MCNEmwtpSh9/OXnquPJBOvk4nl+qKdndE5rYvhieWxiWl5+RqznlRbfJCKosk8CrLq9uf9wbrGIJ8guL41pvLGkKiSiUsy9KGXub2n3fhWHn16Ux0V5WHVHq2tA2WAV9KxfxSm9cuL2PcjcJOTfybERlgxe7LuQeU3ICtLXZKiv17HFarX0dbaTuUzIr3EJCd6BE3I4SSS3sJgkuH0DJ5KiHeWx5KyzDN1u5oIk7Nzd2337M4ok/NQdtWnfnh8LMSDmR+3zKxXm50g/1D/JFGbQdGxmZiw14t2DTZiRnUo+JeQuQ5mZEUsNe28TZWan2CN8zHi/f2A4UOlYy8JI38DkgtZoYSihNDY5Nz8nSUbzlbn7XnhF8f7rn3b5vpm2Hl+SkaUZqDaB163tl3DgPOyRquX+EAQ7asX1rHl2oKvf8ZCBJ5DEqEhHoWQZHfhP2IqpBd9hkwMnwQuGLRBYF4EVoybnvvySZdlRblmXEgRJNNyoiSOZ6ImdbKGoSZAWwGoI3HMCht7zH1xN//7eVGFC7ZOPDP7qw7aVH56zM9ff//11H6obV74tOv79Z2vjaUledUV841WfWAe3K6vp+PrzC+Pu930uf9P66KvPkyPsr/tc+u27l8c9Azxdaqh54QePlcgpUWZ1TfLNi55xoqiY6qMP219nYxY7zr7+8Z1p12tCN7+9UXH8u8+Q4ZMV5Qd3NXR+5TyGGbnxZWPOYzUqeq7ty2v9a/OuX/inCaVQJXNxE551YmQyvDsLSpHsPNYyORLqa3quIup7W/uNBSUSSpBeWhTTeNvvNpebN95eLmN/e19owSZKWX7wsL2TCqPpvvDu580zria4c+tO6cMvPFEWQyuK99be7Lk6bW9sdnF4WM2kxdN8VVa6+Kba8+IqPyUrU+QoJz85M118y3dbmv3Wn5kbHnLejISZr3cbMeqW86cCjTbmvRP+DwEIQAACENjCAszE9S8ay1/cQR6pS7P3vvgnpd23Gm7cah2aN/s/FPavJDvb8O5vvK7QeLwL6QdeeulApphWlD1Q803HNa+ruggvAhfufvaBTxaeQoR9aedffr/fGc1Ie5v/yFd++4RVZcex7DJV4Ckqjj7KRU0Ybc+5tz7+dsL1zsfFi8k7j7/ycEkMrSw79nDt4Lt3Qu7cG7Ca8rKHHndETYyjVz/44EKfV3SMTjn04z94kJvoJsASQZX9UtF13+02FJGBkfiZFSWxN6/7DXgqyi/nujCzxt7mbu9LSiomhbwORRJjLeNDE2FcA0d+Sgeof4BVCUkqsnZqYmzptr7uDoqiTAZy1er5+BgMzlgfn+//BJUkQgInjgSXprYN1lDK0p3cYGvG3qY21zms67zbdaSwWk4nVO7IvzzWHd57YQFUwv4csQsDg/NMRiJNJ+dmSr6d97wVxU/PyXbOvcJPyc7w3ZaWk0GGHOMxM4MDK9/3klNA3fzFhz5fX2JV9dGnH69RifgJtY8f6xv7oMV7qLK1/5IkZYjo7juAccBVa/0lHDATsnLZb9FgB628nl1su3DKu4Eoadahl07uSxcF+BO2cnJB9wjy3Rp0f2yIagHSS2aZn6gu+oYULsSoyYaUxSeTyKImjiSiYa74KI+aeH8o1rtxSVNmZ6R5/3jn6LeJ7Ey2anW6qZk594/FNSLcomZNxwtd75oj/S0pYBn9+uPzgyRoQZFbuuO13GhS4S+stuebW1xUhFKlp/jfTgRKj9X1XCEvBJLbEYoWshbH+BLOHZn55m+a5rnUEjPSPXMw8uiUnffZ5wlhda1nTnmiJvbDmMXWL7+2z6FB0UnFxZ7bRlbdevpf/p//8l//2z990jjr3U07UKHWbR0lV8i5qy1Wq14MM3pDyeXOY3WLS4fIXqnIpr7WHp39po+fXlLk37rinLI8ezyH1fe29PuNxREkYTLA8a5cMgwFq+v48pwnamLfm9F0fHWtz37XRCcWFCQ6ry6ZqaFhvb0AgozsNK8zg07KznSPoiVIz0r32ZaVxQ2FrRkedjZa2PkGKT9WQwACEIAABLangKHn7Fsf3p6wv4dCUZKk4r2Pv/JnP/uj7z3+QHmqLLwnPqaxKxe5zhEUPzUvW7YSV/gXgV4pRnBpt1J5ItkeZpV9sqCSd97vmMFD3XjqE0/UxL6TeerWpx9y8whS0vwHdqaG1xB+NaGS6u4nrxXZr9s6z35w3jtqEkGdw66ysbup0/42iz1yUsoNveW1SPIri7hLN33X3R6fXr2UQmEfwCuSa+C1O6UD+Yi5ad71ugC321PjY5Njowvzs97HJSWnOH7VavynvHUk4kgwUFZbfR2VWFWbS95oIq3b5NW6pr7GDnvojlKU1JWs+D2xEkIknyNmsn/IfptDCTNzfe4kknOz3eNEk22Z3ncZybm53KdocWCAe8kr/MU03XT67dNdXM6y4n11ySt+rlf1JRmkgGuWZpR8CQepZgSrWcPw5YvN9gBfaH/CQsxixVYOMR3sBoFoF9iWURMH+ubGTqI8arLB56V6UUNAQsnU7Wa12owmk+NHLpMKBfa/7Tq9fmHR/7IslGSxDwTCE2Bmr586302ebVOywiOP7U6I7KqAVc/NW7kLFJnM+YbPCsVgNSNj3DtLVFwS6XjiszCToxP2sa8pKiZO6d5Gq4pL7c/jWV13a+/S5/z6sSHuKTuVmJIcbKSCFcq0XpspPvepJkW3Lj9TFj8mvaCosKCoICvRpUiRyShDOjZw4S3DrY6BpvkppWWJPre50vyyfC5uQkb0GgztNTESEim0Nxar7+sMEGoxjI/aHw7w6PhklasJbOP9A9xTHGlGlufGglJmZ5EJTkiXkhHyshclycj2BLuo2KwsLhNdP+mBz1UrgnwDc2AtBCAAAQhAYLsK2OZbP/vNL3575lrXtJ7780mJ4vN2HHz+1T/9s5eP1KR4TU+3koB1bGCY6zVBxyeFcGEY/kWgqwDRc2kXZpU9glRScanKPlWfbbLx2wCXp+bB63dG7R0t6ISSEvsIQZEuVEJRaYp99CFmrulKCF3EV8wn3CpbBppauBGP+GkVVSqfS0pZYWWhfXYXVt3WzL1D41kogdD51NpqCT6fRJDCrt0pvTQDicT+rN9kDGnwVjIMV2FpJdmfjN81MeY/CbwjEUeCSzPa8mvolOpq+7hXjKazqd97mnXrUHObvecRJSmoLiMDea1miexzZBvp6TNwdxlZOZ6wJBWTm0u+t5jZgUFyq0m25Xpti8vJ4e4ytL09npEQwi45u9jy9R173IW8sVdSnLRy3SP/kgxetrVJM3q+hIPXNOwtlpGBYe6LKLQ/YSGlH8qboSElhJ02RmD5mVeibY6T5UvrENuYMkdt1IQg2B+1b9lH5Fuo5MHOtDWf78Rh4hhFLdjXQsBoE+mAQgIn5BASRJmdVwc7FushsLYC7ELTqbP5f/h0mUKSe/iJ3f2vNyz/Ag4lTS6tqS4vyE5XxSmlIpox6xfnpo1yx/UEn2+/qbPfV62wsNpF8uJaPHlLSCojYzb53LfY9Dryu5hHicWeMIwwOYV7wY1S7Hjxr3YETZ2i5Ury0ptPJ5agO2/MBpaxOccmEAi4aT2CLeK8+x9/OIdPLvWvvfm6Y3Qp1hbisUHStE20tM/svF9F04llpcnffuMe+ExeVMb1Ymfm21rHQuwGI0xScUEuSl514udVQXIkq2mZgoRkHE1gGe0dNlcWi6mYzOw4aswx4Ae5vyGTmJCXvW7cESZmVMlisrPiqXHHzJKyLC6KwhoGe13liiTf4KXDFghAAAIQgMA2FWC0I41fvNN4XpFaVF5ZU11RmCIXUMK4/PqnsosKP3v3o7uzIQ2WZFtc0DI8CU1JpY6hRt1ca3QR6Ewvii7tgld5+VNFlJLKvZfCakk32UCXv6x6eGiByUqkqfjUVAlvPJQJBQNlKUxJ457PsmRmh/GQWjFQKt7rwq2ybexuy1T9gyk0raqsTL3sGRxHUVqVJyZlY2abm8jE4T4LeWfIWVjXW0QrFctv+xqd0mHm6r17TkFRdl4BWUNmkm++c9N9Ub+KJLfSoYKs6iruxTV1e8uAb+zLNtbSPL3nQDItyK6qTLi9miniI/wcWYa6BkzV5RI6LjcvgRqZ4T6Bspx8Mo0iq+69dlOkyq6Vx+bleLbl5nETnOj7O0dCvPsJ3FjM9EC/Zm9yLEUnpqaIeFNeEaW1/ZJ0ZL8eaTpSjqIv4cDSEa21qedJbyhxgD9hESVnP2gVUe+I88SBENhYgWiOmmysBHLbIIHl+50EjJooFXJHrMVstszMzW9QQZENBOwCrKb1i1PNajI5ojhr//F6bl7uwAulKDj8wz959fmH9lTmpSYoJEI+zRdKlInpZEJKbg6+0BfWYrH3KiELn7/kUoT0zOC2OcIw3F6UTCa1v9G38rJ08OGVj1nXPVi9jhuuikdiOp4eNKFlSY7lxtqK5FguB2amrXXUfmtAXnUsy3A1LRVTVJFp7xVim2xt9Z81NVjJKKnM7/lJsD1Ju7k3mYb6RrgRvJLyc5WOBpRk5WYIyTjYIwOjw4Oj5CaMVuXlxLi2Fdh727Omof5h5+1ZZPkGKxvWQwACEIAABLa5gE070XH9y7d//Q9/99rnt8cNLHntWpBQ8dgzh7NC65PLWszcn2B3t1fOaw0vAh3+0XRpF7jKK54nlEwu465OHe8DBdrftYWiZAputo+IFnKwnLvSZhcXvKY2iSgt50FhV5mZanIERuiE8sos9yVlXGl1jn3SCOt4090J/8GPWJ3WcR1LKWJjgt9grFiP1Z7SSzIwGu0hLLHEa0zgJfuQFYnJqa6oia75VoPJEKCHiiMRR4KB0tjS60T5jt4kzGxLC9d1ynthppuaxsktGxkSqbpq5RGrgkNE/Dky9XcP2SdyolSF+a47idyCLAF5AWuod3iwb5jcbNLJhfnODjHSvKIsARly2DjQMxR2Byjf4rNklBFuqAOfz/Waf0nac1i7u++lLRBNX8JLSxfxmrC/3FbOCT1OVjbCHqsUCPamfyj9UVaZNTkcUZPVGyKFCASC9TsJGDWRSaVxMTEkFzLBydTsLEMeYGOBwIYK6DrPfd6Y9fyOeFHm/kfre96aCJQ7FVf79In6TPscF9aFgabb7cPTi3qTjfQZUaqK9xysUJFL0dAXchsfdGEDbXQmzsw2njnNDb4deGFNc9xIAtGzsJq5WRObRoIOguS0JLpryV3lMkUlx86Z2PSIjnUky6o7mwbuzyokfT6KyrOuDNvfFqPiS8q4wYDNg83tXrO+LlMQ703MXMu5L9oXg+7Nmue92scw2DdqKcgTkqHSc+S3m7U8YWaefWJ488jAiMUkGBi3FOUIU3JzZbfv6niirHzuqY5lqM/RxzryfIMWDxsgAAEIQAAC94SATTN8+9PXRmZeeOUomdWMr9r5QOnVt5u95+4OwsCy/g/AydCqa3kR6Mw3ii7tAlQ5CE6Q1cGvgalAm1yXqhS95PWhgBnQzv1Y2/LDvgY8OPDKsKvMLrTd7t2fXSKhY0urcy8N9tovKUkQJZNERFjzwJ2WpX1u2MWZGRObIaUoYWqGim4fW3JiBS5bsLURn9L+CZIQiEIZI5MrdEvmLPHeNSM7l/zKsEzLnZsmk/dAVZ69SCLkl4AxFf9ct9zv0oIabgYf8v7T/lf/9/1By08nVVRlXJ4c9g+tBD0g6IZAHxbHzgE/R4b+nmFrcaGQn1aYL79+R8sT5RRmi0i/96G+IbNR0DtiLckXpOWTbbe1PHFOQY59shbzQNdg4LYMWqwAGyhngTzlWo8vyfVI06cy0fElHO73YYD28FkV9pfbSgnyEDhZkQg7bG0BmiKXI4G/gJubm899+WXAB3Rbu84ofXQILI2dBIyaSMTixPg48ieXnIrqRa1ISJ4o2hfyq8kc2swD0VFflGJrCxh6z33WmPdiHQmdPPjIjvNzS2tDJ9fs/P/ZuxPgRq4zT/DITNwHQZAgCfC+75t1V+mo0lVS6bYOy7Lb3RHdbXs8PROxsTux292xsxvTOzG9MRsbu+5tu9vqttuWJVm2LFm3VFKppLoPFu/7vm/wAog7c18CPEACIAEQIEHwj2BIxcR7L7/3ywQI5JfvvRw+a+KcufP2Lz4f9Lznqs+eeZokTrwrhW0LZ16x8OkUsuSpwDQyNLSr8dVhiyqwhhwTwxOO8lyRgFbnFyRfnZwM4muFR92CwpSrkyFMz7DS09przCtTUoqi8txvBrvMdEpFWTL/Jdfc39wTwPWT1V5yFjO/XAk5BlLByvhIwEPcTQNdY/acbJEwNSdL1tJmT83LJKeRfaRvmCxVQw32TTiyMsl3mkxpU4cjPTeDn+3BOtQ1uL6OTaj7DezgoBQEIAABCEAglgXs07cuNdT82SkyD6Y4LVPPtPQG8SlkHSYSHwLD+dFu45YZ39/7I3SE+UHF5IY3hqJUKrIcta97USilil+MmnzqIhPRroW5vuodJZbwV3l3vOOHs1jchci9+eRuGn5pif14mDobuk2FlUpKWVJd8EVfu5nW11TxC2BwKz33On0t8+kYHxi1VxaIKTq+uET/1bjXqIUQuhGOU9owO5OYnJKsS52ZnNgmBIWST4osLy5YfI01cVckjZB/kAa3aeeAPqUsrMjjV6/Z+UHHl1Rlfj0yENo4jlBfRyQuY2/7sD0vTyRMz8+VNzTb0gqyZRRnG+7mV2Ok+nrGnLnZTHphjuxeiyOzIJv/ImsdaO/3MXJo5056lqBcU0PzV2zMa6/rSLxJRqJNz26E8004OMBNUaytAhro+2Houwq5ZiSvcoQclECwN2MRdhEgqh4YgfmFhbff/t1LL72oVKo8g0bW5MAcQj+BBvsu4Vk+7Oua+ImRX8CGPOWeg8tn1oQ8Sybpct+oQG5b0CbEezY1PLbdJzl/O8V2CIQmYOm//FFDzndqNZLMM/drve9/Y7RJCa5PiDMt94Z2/Xkz6BhtszOLXH4iRcmyclKZvuFQvvYHvdMwVTD3dQxacgqkFJ1Qfry08f0WsiR6oI+NuhpSt+GPwdRd3YdtqLVjofSohpLmVBTHdbcmlJe5FkZc6mrtD+aGK5thbonNTSATxqZn6ZjB0UAPgam3a8SWnSsWZZAvM10mcksYJXCM97lOIs442DvlzEwTZ+Zny3rNheTbDlnnacj1dWftEep+AyVGOQhAAAIQgEAMC7ALBjIQNIlcRhRLpeS+iUD/fHuSRORDYNg+2m3kIUT8WuR7eOOZbXpyjivUUZQiM1NLDU97fb6j1BlZ8fyHanZhcnLj07N1xezkEy50fEI8JQjgY6Fl3mDiyIxDtDotTUVN+B95HdkT2TbQ2DJfcTKBkuZXl6s7GhOrK8k63GRBibbGHo9Pbh5BrHS39lvyi2XkM3D16cq7v2sIR+i7P6WnxsfIOkApqentzfc4/5M93Lj8xfagFE2RRkgZ0uD2JQ/es1RcSUU2yetx7EzLpfq1GXS39oNJqXqoRi+ilGQU0sWBnmC+WGw0FerriLRg7G4fsuXmS0SZJbnydlNRgZLinKPd/fxUbNxyX9eEMytDnF2UK+s0F+fxuQ7yzap3199jKXVqmmtuMG5xemb1DScSb5KRaHPTEQzbm/DW8yKo34N+Pwyq9bAU9r4yEpZm0QgEokjAnTsxGvlL2O4HsiZRdHhiPRT3eif+siax3nv072AJWPouf964yHGURKngZyve+lidQIss7+jjya2Fw/07O9XX5/piSceXnypbXS0joJ34HNodUM2wFTL33mlwLchKyXLOnj+iWx1XFlD7G3Wl2WcfP6oPpu7qDpwTzW1T/O5FaZVl6YUVBfw7zHUZAAAgAElEQVS9j2S24hbX6icBP8hCiING/hBQ6pJjReTOykAfK/3dQ/yXCvK9paCgIIfUdIz39rnXR+WWeknmhEwznZlfkF/Ef6PhLANdQ57fvkPeb6DxoRwEIAABCEAgdgX4a2+uqz6czWIJJWvioonAh8DQP9ptPVhW0wrJQ5APKPGJrizFnj242e6uWf66O5NcdSJP6rVfcdax2lR+bQ/W0OU5V6tjZtrgWiEhLi8/oMUh2ImBQdeAFSajula3f3c/O8fuNU0Sa0qYWVuVWVJbTD7UkQvrTY1bl4VfpzB33rg7wx8dSpb3yDMnUyVeSMFv2P0pvbhgMC4vyeTy9KzcbfZfWFZJfvTpmf7KkOqkEdIUadBfmQO6ndKUVPIrggjY8eavb927W+/759Y3Da55ACh5QUW+x5IxaznEtUnm1hR8bg/1dcQ3auppHyDfMihJTllRcXE+/y1jpLvbPaKeTFjcOUFOPnFOUXFRaSH5/sOZ+9r7fef4gjhOwtSaqlT+nYZb6uufWp9/LgJvkiG88foU5mNd7eCmIxLam7DPpoLw21o06PfDrQ1E/vf9e8+NfN8OyR6Cve8+ciz+IvG33R3J9s+GK1rPcSfImoRLFe0EKOAed+Kv8MxcrH3M8tdTbD8AAua+Ly+25r9Qsbq+3qaInYY5MjNAEkUlllZl3pjcmEppj/rlHL1zd6zmXLqIkhc++vxDpne/6lva/PWflsrFVjKj13pAlLrsiRcuVCXRho5P3/6g0fUVdX8ezqlbX9zLe+FospCSZpx++WXNN5euNY+ZArp84Vk3/dRL39Zc+ep688jylpyHUJGSU5hODdzr9jF/AzfX1jR4VJcnISO+zz8g4Ufd20aammeDBHGONzROVNyfKiLffc8+eb/5o6sDy1sPgUxkNXtNOWEeIENu8gul4qyT5+xkTImD3AnmXiyUv1Wrt3viTGq6JPu+Bzg+b7Iy0LFl5uGQ97s/Bxt7hQAEIAABCOypgDDj+Pl8S1tj5+D81j/BIk3RI+drNa57oy1DA6HOlBSZD4EhfLTz7eqYnSEf8nQMrSmtzr467nFhlGZo1hnkxx3f+/C9lZ2+e73nyDNFCkpd9eTT02/98ebk+j334pS6p56tcw3ytQxcr5/wCIOb6+ufv1+npWlt3cOnu353ZXynO/VtA/XNhorjiTSdfPKph8beuti9tNGeUJ2cGNiUSr57EcRWbrapvu/Uk4XkI2Xd0w9LXR8pB+/dm/Zv7Jy4+sntwldPpggpWeYDf/L9xEuffX1vaGnr51ilLr8ki+q93eFaqjDyp7Sgu7W59uSZwtKKidEhh933rUQpen4aLoamJ0aHvZGEIiGpTraTpryfPeBbqKSycj0/sa9zvKN7u+Ujjb0drsmyKEluVaGijaxY6HrY+CVhRCSXqUuRCuY2hnj43h7i68i1p5U+MqipqEQqzr3/MZuc5hyDHT2uG73Ig1vo6hg/l54pzjv3CMvnTUyk8E6vNXdV938pRXp+ump62OMLjyix4vzzx5P4GeocE3fvrY/Aj8SbZCht+hb2d0RCehP2twtPuWD+Hfz7YTCth6UsEidhYUQjB0DAnTspKyu7dv061jU5AAcMIUIAAvshsNL91cXO3OdL3PMxe0bATrW1TZx4ME1Ia4+89CNdZ1vvxJzJ6rqFjJFnJvNLekf2wc7e+fSr/FcfyZJR0rTT3/5h5UR/78jMwoqdo0XyuISU9Kw0+62f/+LG7PptMBnHHq5O4ed+0pY+crq19YM+39+KIhv2auu28evvfiZ/8bGyBCElSSp75OWSM/MToxOziyt2p4ASSeQqtVbPf0Hx8dhUV1v68IvF9y1Oj03OLa7YOIoRyZTxCck6rVJEsRPC/p47vr7dmHrudZ3OJbNSy12zNXMr3Y1dAcwMsSUYdq7xy6s5Lz6YIaUk+uPP/WnZJFn5fXbR7OBooVylSUrN0Nvrf/XmHa9Jvi39rb2mgnIlI1eQLtrHuvrXvtG4btbqHD+TniFSyPnIFrvbBrdOshHyfn1gYhMEIAABCEAgtgTEeTUnaisVdafOmwwT45NzC0azjRUwYkV8UmpmWqLc9eGCs45e/aYr1ClqIvQhMOiPdn4OHDfb2Tl1ny6VoTQ1z/9FfHv78LyFEykS9Hm54uZfv37N63OJn3ZC2Wxsu/hpgf650jhamf/on/2wsre7f2rZIVQm5xQW6JTkjn2OM3Z9/hkZ0u3ZOjtZf6Wn+tkiOSXNPPv9H5T09Q5OL1scHCUUK9Sp/BLWWx+OkWtfNBS9WKuhRcl1L/9lZk9Lx+DsCidWadNzivJSVXt2Yc/YebvtgfxaFa1Q8TOhc6aOu21Lmzq3NXTbyNdvva/47tOVieQzcHLF498tO7swST4DL5isLOmwTKlJ0umTVGKKHRP1dl4na8zvwSktmBgbWTDMxidoq4+eqr/xzepoga2x+/2dDGgnFaUyGWmENOW33AF9gk4pL0vi8ybseLuve7I8umXs7hyx5+aKKXF2eVFc8z3XyeCcnph2cOS7iazk/LefS2pubW3umSMroPjbLgjtdeQKw9zT2GksrlYxCqVMwNmH23o2vuLw3ytGz2ZkiZQKUpJbaG/q2/otY9sjROYKeOC7f1U7OdA/PLVgYcXKpIz8grQ4fmYGzjZ+7bPbG3ehReJNMoQ2/Qn72x7Cm7C/praV3PbJ4N8Pt20uAk/u2ftrBGJHkxAIUoDkTq5euxZkJRSPQYG9GecUg3Do0mEQ4IxtX35TnXPeezFAdub2Hz/Xv/pYkZoRxmWUn8wo32sPx/SNt990XHjm4ZJEMSVUpRbWpBZ6xsCZtQmMYHY9PeLxHSgK8uXsYtfF1xenzj18qiyZ3KBHyzRpBZq0wAy31pWodblqnVddSqNLlgrmfV0WsQ81tc6Un3DPB8HOtzUMBnO/1fqeHLN33v+D4+HHHyzSiARCpS6vUpe3KQxLgoYRGLwyVLaRlraF0uP8bZdksEtnj+cCotxSd+fYA+Q7DXmOnWtr9TWBWKj79SLCBghAAAIQgEBsCVDqOLmT3MgipBhFYnpBYrp39+zzPZff//D6TEAjXb2rky2R+hAY7Ec7n8GRa5izdz+5XvjdM6kSSpyQW31mffolzp6RJhUYfH0y8tNU0Ju5pdYP3qBsz12oTpEwCn1Rjb5oow3ONtP82bsfNXsNB+aWmz96L1n1/Cm9lGKU+sJq/aaPtL6iMPd98uYHzEtPVGlFtDSp6GiSx358lY/UNjL4pXGm+r4U16RorKH5Tt+OHynZhfaP/mVh4rEn7q9IkdEULdWk5mv4wRybHhyVkKqTCeZW9uSUJrtuuHX99LnHUlLTSitr+cVOvNI/V774dGuQrt9J1oRUIRXJrfekEZ9lDvRGJrWsLJE/wM6xrk6vk3dL1/hlRh7JLRALhJllpfENN113cBk7bjaeyDqSyNByfeWZRGaaJE74ev62kxupQnkduUKxDTY2GypPuwK2DbZ1bczQz9+R1dE6/FAmyeuQk3W2ucnvnHJbOrX6K8fPcCVS6QqrdJ4vUI41jdx4/+2rEyQXtP6IxJtkCG36E/a3XRD8m7DfpnwjBrA1hPfDAFoNYxEkTsKIiaYgAAEIQAACB16AW2j6/Hrln59N87rdzTFz752fjhQdOVJRlKXXquUSIVl/z2GzWlaMy2R23/n5ucFh1wTMkXtYJ+/84bWujLLaquK8jJTEOIVUSLEOy8rSwvTE6EBvq+ccFOzo7Yv3Mp6oSqYM7RevD3pdzI9clP5a5iyTTR//pvNmVlFZYU6mTpug5uN3OuxuQzI/8uzszCSZDmDGe8YDn3Vp4m+1mJYW5mamJoYH+3qHDf7m7WVnWxpG6h7j0xOOseaWyZAvnlinGj76dW9jUVVZYXZqUoJKLhFRnN26YlyYnZoY6u+Y8Nmyc6qldfrIfTpGYBnocK3Y6PEgo/wH788qkAgcE22tPvruKhrafv0dCmyHAAQgAAEIxIYAN3PnrX9sS84pLszLyUjVaeNVCqmYIZ+OrGbj4uzkaH93e1PHyNapkYLue8Q+BAbz0c5/1LbRr994bfrYmdribF2CSkqzdsuyYWp0oKdp1PPapv8GdvOMw9Dy0S8Hm8vqqkoKs3QalVTotBjnpwZ7OxvvtXrNSrW2p5XBL/7ttd7qo0fLctOTNUrXp2q7zWI2Lc8bZqcnJ8eHurespO40tP3xtdGWmqN1JbnpSeRDJOM0L86ODXa0jShPPXmc3B3Dst6fIHfTM5912enGO4PHL5Br0ZxjpL5h3OcHv601OfN4/Xv/0nolt6yqJC87LTlRrZSKaIHTbjEblwxzU5PkY3x31+Ac/zl2j05pwYrJVH/z6vH7zmYXFMkUysbb1x2Onb8uCIXC6mOnSNaEYJPqpJGtfT3wvwszykvi+UEVzrGOri0noY/Omfrahmz5BWKKTqsoSbjFjxkSCCyDn/7mt/Nnjlfk6hOVyzNza7D+tpMqob2OSEXnRGPT5ImzZDkhS19L75bjsdzVOvBwbhH5ljHW1LixIImPfvjYxM3efu/SXGp5aW56CnmNMqx1eW5isLvxbn3bxIrXay0Sb5LBt+lP2N920u1g34S3acoHYmCbgn8/DKzd8JSi0jMyyW2YOXn54WkPrUAAAhCAAAQgAIFDIFBcwA+2GBobPwR9RRchAAEIQAACuxXISuPvMe/s6dttQ1FZv6ykSMgwvcMjgVx73b4H5MpsfmaGw+ls6+javiSehQAvQKc/+qPvndRQ7PTVn7/2zaTXBV0obSOQkJRcd+KMWCKxmM3d7S2jQ/0c6/s2MIqmyGrwZF0TMkMXGWtCsiaGmeltWt79U3hX2b1hSC0wuY//+Lt1SoqdvfKL1y55rk8UUnOodNAFMOLkoB9BxA8BCEAAAhCAAAQgAAEIQAACEIDAvgmYzGa1UqnTJk7OzJKcR8hxkOwLaYRUJw2G3AgqHioBKiEzS00GCAhss9MGZE2CPPYk+XHt0mc1x0+R9U4q644VlJRPTYzNTIwbjctk/A9pTCyVKZWqJH1qij5NJudX5CNDxMkMXXsw1gTvKkEeTBSHQEQEkDiJCCsahQAEIAABCESPwH/+27/eZTD/+9/91122gOoQgAAEIAABCEAgVgXGxycUeblKuTw/K3P3fSSpF9JgIO0E+xkPn+gCUY3GMrRYTNts3lNJSXQnHzumJ+s7cOb+rqGglr6Oxm7uR0wkBXLt0kV9WkZheaVSFZedV0B+fAZiXF7qbm3es9Xg9+tdxWffsRECIQgE+xfKvYto+zuFxEkIhx5VIAABCEAAAhCAAAQgAAEIQAACEIAAL2Cz2Xv6+lNT9QqZXMi4Fs4O6eFwsibzCrlgShoMqQFUik0BOuPBH71UZBkbGZuem19asdidlEiu1qblF+WmKBgy3sQ2fuubToxSCv3ok3QI+VHHJ5D1SxK0SVK5QiKVkuasFotlxWSYnZkaHyPrEYa+g+Br4l0leDPUgED4BZA4Cb8pWoQABCAAAQhElUC03bURVTgIBgIQgAAEIAABCOxegFzlHBwc3n07QbWAz3hBcR3YwpRap1NJVPG5pbpcr05wrGn01nvv3JgKfYo4rzYP6waSGtnj7Mj20vvyrrJ9SHgWAoELxMZfKCROAj/iKAkBCEAAAhCAAAQgAAEIQAACEIAABCAAgT0T4Fb6b3x+NS8rVZeUoFYppGIhzTmsK0vz0xPDve3NjT0zFt8rmu9ZhNgRBCAAgdgUoNIzMjmOy8nLj83+oVcQgAAEIAABCEAgAgLFBXmk1aGx8Qi0jSYhAAEIQAACsSaQlZZKutTZ0xdrHUN/IAABCEAAAhCIUYHQJ9+MURB0CwIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAgcMrEOapulaWFw+vJXoOAQhAAAIQCKuAXKUOa3toDAIQgAAEIAABCEAAAhCAAAQgAAEIQGBnAYw42dkIJSAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEDgkAmEeceJWwx2yh+TsQTchAAEIQCBCAhjBGSFYNAsBCEAAAhCAAAQgAAEIQAACEIAABHYUwIiTHYlQAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAgcMiEJERJ4cFD/2EAAQgAAEIQOBwC2SlpR5uAPQeAhCAAAQgAAEIQAACEIAABCAQgwIYcRKDBxVdggAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAIDQBjDgJzQ21IAABCEAAAhA41AKdPX2Huv/oPAQgAAEIQAACEIAABCAAAQhAIHYFMOIkdo8tegYBCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgECQAkicBAmG4hCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCMSuABInsXts0TMIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAASCFEDiJEgwFIcABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQCB2BZA4id1ji55BAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAQpIAwyPIHrPiFF14JS8Qf/f7NsLSDRiAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIhmAYw4ieajg9ggAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhDYUwEkTvaUO5p2xkjiEpPjJdEUEmKBAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCOyzQIxP1bXPulG4eyqh4tFztelabWK8Qkwt3nr9JxdH2NU46fiC+584V5UZxy0MNX7x6dXepbVnoqUj0R9htEghDghAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEAhNYI8SJ88981R2VlZQIQ4ODb37xw+CquJdePdrk4RrlRTv2PZnC6VMLyzIVlOuvXOeMVCaumefP5Ul4relFJ55UWj8xzfvLW4qsj8hr+81+iPcZyDsHgIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABHYtsEeJk2+uXMvMyKDpQGcGY1mWVNl17/arAWnxsz94qVzhzk4IuKX6N//5w37bfkUT4H7p5DS9x+kgSk1Lpu8tOgOsvetilFCuTtAmarVajWC8/t6IxbvFfY7QOyBsgQAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAgZgT2KPEyZzB0NLWXlVRHiAgKUyqBFh4S7FwjREJebQKpak4UbSWNSHBUXHlx0q+HmhajqbRG9623OI8GV+StJrtEbAL84t7NlOXtOzFv3q6REK5du4c/LS5YcTirbWfEXp7YQsEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQjEokCgQ0B23/ebt27ZbPZA2iHFSOFASkZlGSa9ri7DNeHV+kOce6Q2ae+oQ2NhJ29/fGVwyTXExLHYf/mzu9PeuYvQmt6xFsWIhO6syXZF9zPC7eLCcxCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIBA7Ans04oSArayYb9+9e+bUyR3xSDFSeMdiUVpAVni8UrMlSULRybVHs298FOXTdZkHr7zx/96Ji5cLjAtL1j0bbhLEgYz+CIPoDIpCAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIBAFArs6TCIew2NS0tL2yuQAqTY9mWi+FkqoepokWxtuquNQClV2dEylff2qOuK07I0Z4jOrMmqVfRHGHUHFQFBAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIBAwAJ7N+KEhOR0Oq9ev/HE+ce2CY8UIMW2KRDgUyGvUELaD32VFEZfW5MqXFsU3jQ+btWlJbiSU5Qo+2iVtvHqjK/pr4QqfXZeZqouOSkpMV6tUsplErGI5uwW48LsxHB/R0tz+5jRCyW0Wv796MzHf/zqMbU7em7h1us/uTjiPexEGJdZUVNZmpeuS4yTi2mnzWycnx4d7Ovq6OgcW3YHKUrMrynPTUvRJmji41VyKd8Zh9W0NDc11t/VVN8y4p4QzE8oTPb5v/pfz2886Ry79NNf3pwjcAFFSMlSCqsrSwpz05LiFFLaYTYtTo/0d7U3N/XMWbfukhhm5Wak6XVJSZp4dZxSIZOIhAzF2c3GxbmJ4a7We/e6Znwst7K1HfwOAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACMSKwp4kTYtbd01tdVZWq1/n0G5+YJAV8PnUgNopzaqvceRISLrfYeumT5bN/9lAaw+ciKCalujrz5sUhh1dX6NQzL7y4lrHweFYsj0/OJD8ldacf6Prmjx/dGvGcwCy0Wl47D2IDpcg6+fgz9xVqPFZwoSUKjS6H/BSolnre7XQnTmh99cNnCkWbBtiIZHGJ6eSnoOL4scb3f/tZeySWnmc0pQ8/c6EuVb4xkkqojJcq41Nyy4/fN3zrj3/8unfJIxnEG77kQ14gVqiTyE9mUfXxvq9++4fb47YgnFAUAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEDq7AXidOOI775srVl1/8FuW1Frj7KfLfMGrSj30/qNbYz/4tqPKbCytKaosUa9kCdrataXjG2DR0f2qu2LWRVpfV5V8Z6rQEvQtKlFj80HfjFW++fmkw8Nqh1fIXHKUofPzVF2q0m9Mha6U5x9jgyHpywT43u8gVan3PTEZJkmueeW5+5lc3Z7zHs/jbeyDbaU318999qlBF+9wvRSuzTr78qvz3v/64yxjwOUYxcXkPvfSo4Z8+7D2wq+4EYocyEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgsCqwp2ucuPc5MUmGlfR4HwGykTzlvf2gbKE0ZbW5ktWL9pxzoqV1kuWWO5p7rWuX6Sl5YXWRaqf+sNbl2amJsbHJ2WUb63GFX6w7/uzDeVI/1UOr5acx782UuurCM5uzJqzdZJiZmppdMNlJtmt6YGhlvRprmJ1zslajYXJsZKCvt6u7b3BicZ2BFBOnHTmayXjvxrWFM032dXR2rv90Dhm8ptjyrkprjz553jNrwjnNi7PTc8ueq9wLEyuffKxU6V3btYW1GQ3Tk2NjEzOe8hQVV3GmNtFnNsZPQ9gMAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACB1Zgr0ecuKGuXr+Zn5fHMBuXzl3Ln9w8sIwkcDq5ojJ9jZNzjjS1Gfish7m3sdNUUq10X3cX51RXJDRfdz3j58EtNb7309XFRUQJRQ986+mjqavpGCqu/HTNtf4b897VQ6vlJwTvzaLsM/flyddyB5xzseurDz65M7y6VAkt1aSobJ5RWbvf/4f/y0wyKhtNUfLMB1995WSqe5ovSpmepqEGZ717QvIXM40f/+7usq+nvCNb2yLJO3MyfS1tJeAso9f+8O7lfn7NFVFC6fkXn6xJci89QymLTh3TdVya9B7twi01vPv/ueUpWcYDL3/3dKp7qBCZZa0gV3V9bim4kPwHi2cgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAgagX2YcQJsVhaWrrX2OSJQn4lG6OWaefAmNTqiqR1TVt/S/ui+zK7rb+5Y/Wf/EIn+qqK5IDR7YauL393aXBjyAqjLylcXb3df0ih1fLfHsk9ZJeXxK2nTdiZm+++c3Mta0LqsZb5iRnTpqyCbWVT1oQU4laGb94ZdKyVolRqZcAO28Xmfk6cU1q4PksaZx+6/P4lV9aEPOyG9k8+vDu3niihE0tKU3bYNWceuXGzZ2OcC52YnLhDlZ1jRAkIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhA4AAL7M+KEwNy+c6espEQul5F/r6yYya8HQMt/iKLsyrL49dSCuaelx7RW2Dna2mqoO7N64Z3WVlRmXPO1RLzvxrmFtqb+h3JKxK6nKSY5NYURLHgvML+5dmi1fEdABtMkpetl61NVsWMNDRM7BSAQJ+RV15Tmpydr4pQqpVwksFuMS1bR+hgjSijyWGLe354D3U4npek3hpuwo62dC555HMdER+f8sfVDEK/XywUTxu0bt81OzbNlene6hJLKZORf7kzM9vXwLAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCBxogX27jd5ms9+4dcttR/5Bfj3IjtL8yqLV2bj4NTq6m/s81nBnJ1taZ9avudPqkqqsYHIGttnphY15pRi5wt8yJ5sAQ6vl+xhQJPWxnjfhLHMzO0yjJc04/cpf/fDlx09WFGSkaNUKCUPRjFiu1mrk1Ho7YV0zhFIo18ebkOnRFua3rOTOLs17ZFJoUnrnE99mtXkkX4TCfcsx+j4o2AoBCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIREdjPq8EtrW1VlRWkW+QfEencnjUqz6/K3xiSQSmrvvOfqvzunFIUVeRK+roCWPDc1QbHOj1GOpDMQ0Aph9Bq+Qma2sh38AFtv9SHouT8Sw/mbGRa+BoCVsCRwDc142dfoW72CMrnfjapbd8DdwhkxXvPWCIZe6h9Rj0IQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhAIu8B+Jk7IlelvrlwjXdpyiTrsnYxwg5SqqDzHPZVWQHuiZAXlhfKulpWASgtohcd4DwFrNnsMZvHfQoC1AkvCmEwrnGBtKiypJkEu6F/2s2tKXXakaGO1EdPglY++uDM4a7SxlFBR9fyPny50L9K+uTrLsh5ZCpreeTzI5vqcaZmssSJ194aSxifIqT7PYTF0fGL8RpusyWjyXhveT4ewGQIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABA6VQLBXqMOMMzQ8TH7C3GhYm/vo92+Sn+2apOJKyjNFAWUgVpuhxDkVhYrt2vR4jtHl5mxMQ8XOzxoCWWljm1qe4yjEUkkAZwA7NzW7sWby4BUAACAASURBVKo7nV5RmuC3u7SGLKO+9ixraPrq6+5pkjUhHeIcFqvdz1APh81VxP2g1fFqv+37VmNnxiet623T6WUl6wvO8BWEacVFGxvYxcmpAJNWvveGrRCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIBC7AgFcNo/dzoelZ1R8cXn6xigK5+JoZ2dnh/dP/4x5/co+Jc4uK4rzkxwQqtSKtTXUaVXOucfqVteVJ+FyywMDsz4HSwRci6wmsxGHNKeiVL3zOWAe7BleX4OGEmY88OwT5cn8aumrD0qoTEpNdK+9wnmMHaGkcXEBDcXhFucX17tFqUpqyzaioiRy2Y4Do2wDHT1kVIz7QQkz73/qXK7KrShKKH3iQl3CerTsQlfnlE/DsJwPaAQCEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQOtMCOV6QPdO8E7Gf/FuEOUImlpanrF+U5+8CVd37baPKxUybz8R+9emxt3IMwo7RE3XDLY8XytSqUsvTp/5h3dt6wuMJKE1K0CuHGoiaOycZ7oz4HnARci10yLLCcdnVQCK0qefYHaccGbn/8zu1xH0GvbVpuv958MrdO465GiXVHnv3zmseXFxZX7BwjVcap5CJr89v/9wd9DtYwPevkVO5MEqUoe/LPpbkdIwYTydZQotTktYzQln2xhtExM5e0OrKGVpU+98OM01PzVkqiiIuPp9rf+Mkn/T77vd6OtffqrfHis2liVzqKkqafeeXf1S0alh1SdYLKY1gNZ+6/cXt8+7a2gcBTEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgEOMCMZ44ifjRo7RlpSnM2tgRzjbQ0u0ra0LicI61di4cOaFxJ1koJq2sOP72zXmfc1cxEpVWr9oSPOeYuvX5nWn/YyUCq2Ue6B625eWurVgioMRxeo1kp0yCbeCrD6+nvXxa705M8KGR3SUmbwQp0Sapqb45brnjXvcD2aWri8NTksT8mjP5Ox4He39943TF6ZS1xAolUqWkrzXu1CarqH4fSSbPZtmZWx99kfXq+VzFalKIYmTxSbLNe3Yudnz8SfOiT/QdY0QBCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQOAQCMZs4ufDCK3tw+OjkktKkjSmrrP3t3X5Xz3COtXfOHzu5Ou8WxaSWFifcujEX2EV8zjJ55/3fXxqxBdUpX7W4xcbPP8155cli9Xq+xz47YyD5mO2n7LKOfPnGG8bHnzpXkriRPPGIhk5M1jKCOYfA1PHZO1dVL5zJ2FiZJYCgnRPX/vB58quPFcR5h0FrU0jTC44dmnHO3vn9G7bHnj5flbK6TLxnBY5dGa//8L1LHUib7OCIpyEAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIHGqBmE2c7MlRpXWlxdqNebrMfe39Fv87Zic7OwzHz6xVYHQlZdqb38xsyZxwpoH6hqXEgmxdgkrKsFbT/PRwb9udO81DS9sMCwmmFmtofOe18eLaoxX5mbpEtVJsmCH5jgAe5vFbf3itLa24pqI4L1OnjVfKRDTnsJqXF+dmJob62ydXu2Ie/Pr1f+wqqa0uzktLTtSoZBIRI+BYh81qWTEuLRrmZmemp8cHxzb3xzFd//ufjZUeP1pRmJmSGCd3tb2yNDc53N/TtM1AG8/A7TNNH/6i915JTWVxQbY+MU4hE3I208LM+FBXa8O9zumNZWYC6C6KQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwCEUoNIzMjmOy8nbeTalQHRWlhdJMblKHUhhlFkVoDMf//Grx9TuCb+4hVuv/+TiiP8ZudbYQqsFdAhAAAIQOAgC+Ht6EI4SYoQABCAAAQhAAAIQgAAEIAABCEAgNgW850WKzX6iVxCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEBgRwEkTnYkQgEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQOiwASJ4flSKOfEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEI7CiAxMmORCgAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIDAYRHA4vCH5UijnxCAAAQgcIAEsDj8ATpYCBUCEIAABCAAAQhAAAIQgAAEIACBGBMQxlh/0B0IQAACEIAABA63ACXTlZ04XlGUqUtQSYUCh8W4MDPa8Okf7044DzcMer+vAoy25Extvi5JNn7591fG2H2NBTuHAAQgAAEIQAACEIAABCAAgR0EkDjZAQhPQwACEIAABCBwcAQodelTf/JMeQKzHrJIFpeUrpWznEBAxZWc/9YTFfGmzou//aB1nmyJvcdh6OPBPGqMruzMsUIht7wsog5mDxA1BCAAAQhAAAIQgAAEIACBQySAxMkhOtjoKgQgAAEIQCAiAmJNbmlZSX5Olk6jVMgltNO6srwwNz023N/V3tk3a9m7DIWy7PzjZSRrwjkX++/ebhqaNdkZaXySTjA4ywooTcmpar2SESjLj1febPt6eu/iCh87I9Mk61OSErnx+i7Sp60PKj4G+ri1U+H/PXrO2PD2LVb7FV6l2GyNyX38x9+tU1Ls2MWf/up6bKaFY/PIoVcQgAAEIAABCEAAAlErgMRJ1B4aBAYBCEAAAhCIfgFRUvnZpx+pTVPQHnfR0zJVAvnRZxfX3fdg+7v/9Pt28570hIovrc6XUgLOOvD5G2/Uz6/lFXrb3btfmZtd4dJVFGcxzBoPYtZEIGAyzv3JK0dUlKPj3QZfiRMuBvoY2XMlqs7YMHY1VvsVRiI0BQEIQAACEIAABCAAAQhAIAiBiCROlgv/PogQUBQCEIAABCAAgc0CTP0PDwKJLOvBl14+nSYjOROOsy6ND/QOjc8bLQ5GqozT6jNzslKU1NzohGWv+iLUp+kYPm/SX9+6njXx2Lm196Nfvt6XozYNdQ2s7FVQe7yfw9DH0Emj7YwNvSeba8Zqv8Llg3YgAAEIQAACEIAABCAAAQgELRCRxEnQUaACBCAAAQhAAAIHTIDW1Dz9oitrwtlmmr/48LOGCfPmURyUVJufI5tY2KuxHZRUqSB5EwFrnF+w+9Z0LI60No74fi5Wth6GPoZ0rKLvjA2pG16VYrVfXh3FBghAAAIQgAAEIAABCEAAAnsogMTJHmJjVxCAAAQgAIFYEaBU5Y+dy1WQrIlz9u47v/m4z8cIDs4y29Oxlx2maNq1O5b1XvxjL+PAvqJQICrP2DA4xWq/wkCDJiAAAQhAAAIQgAAEIAABCOxCAImTXeChKgQgAAEIQOCQCtD6IycK+Cm6WMPdTy76ypr4hRFpCmrqqopzM5LUchFrNS5MDvW03KtvGTN5ZTuEmpyy0hyyFHpSUmJ8nEImETMU57Asz08NdzfcutM6uWWIy+o+6aQzP/jrMx4BOIc//9kvby9yVNzx7/3ofCbDzlz9+c+/mdyyP5Emr7qutiQnPVmjlDCc006WuF80zE5OTowN97Z3T6+u08JkX/j3q6uM/P07HQ7Pfq6175z65p9fu7q29jwlTcwqKszNTtcnaxPiVTKJkOa7PTfdff2jL7tNZDwOFZd76nRVrt7VS6mI5uzmJcPEYOe9W/Uds1afksKS5/7mb5/beIqdvfKL1y5NsKSt7fsYaXyf0UbBxr05Y1c7ysRl1RyrrSzISI6XC1mbiZywfR1tVv+fusWJRXVHa4pz0rRxMqHTsjQ3PtBx92Z9t8HPyKkN0Ej3i1LVffs/nM8RCuzdH/zDm81bFyui087+u++fTKTZ8Us/f+363MbgskB7FJFXhyDA1/I6Y6DRRsGJHN4Qgng3XttxELZibVHdyeri7NSEOJmIs1vMxsXZqbHehus3Bw7oGlPh1UdrEIAABCAAAQhAAALRLuD/K1y0R474IAABCEAAAhDYJwE6tbw0kYzu4Byjd+6M7nhxdz1KUXLNMy88UpogXF9JXhifkhefkltZd+TW+29/2bfsOa0XJS+87/zDmcymTlIiuTo5pyI5u7Si5JO33mmcc4bDQKI/8szz54o1G4EJhGJ5XCL50WcXVVfEL/R93BfanihV1YWXSbbGM0xGFpeUJp6kbKvdlejLa0p07uEyfDmxQqPL1+jyysvq//DGRz2mcHRRELX4YendDo3szRnLB0HFFT787aeP6KTU6knOSOOSs8rJj58QJbojz77wUFE8P8uc68EoNPoCjT6/ouLee2991LXpNbG1jYj3izMODk5xOWm0MC0rTdTcu/nFTmkys+LJecvO9w/Or792g+hRBF4dwb6Wg4h2q/7B/j24NwRXX4OwpVQlF77zXFWiaP29XiIXScgbajIzcvPmwMGmQ/QQgAAEIAABCEAAAodEAImTQ3Kg0U0IQAACEIBA2ASo+IxMNX89jJ3q7V0MdAkTKq70mW+fL42jyKiR+YHmhs5Rg5VWJudU1pTo5bL048+/4njjF5fHvNMw3MpI/c328WWLnRXQYmVSdimpoWDUxY89eWL019dmt45UYecb33uvYW5jM1m4frsbnOmE2hdeeSRfTuYdcywOtzV2jswuW520SK5KzK89WcRniMLw4CyTLXdahwxLRrOTkaoSk2UzE6vjVbiFsbbm2x1T03OLRrONpSRxaUVHTlToZKKkuifOdv/swx6vYSeOga9+dWnQI5XjWPZy8Ax6z/DDIBWBJvbsjBXqT7/83FG9iCQVrTM9TY3d4/MWgVSdkl1UVpIRt3ERea2PVHzl8688UqigOPtC773bjX3TRk6mzak6dTQ/QZRU+/RT06+9eXsjJbGVZg/6xc0P9M09kJZEy7JyUpneoU3pQ0VObjKfN1ke6Jtafb2F1qNwvTqCfS2HFu3Ww3AAfw/hDSEoW2nRuQt81oQzT7TeuNMxPGu00xKlJjkjW2ca3e7d+ABaImQIQAACEIAABCAAgZgVQOIkZg8tOgYBCEAAAhCIkACdkKjh8ybk2vBMwEu/y4rOPuzKmliGvn7rzavjq7mAtuY79Z1PfvfZ6gSR7uRjJ9t/+c301kQIZxqqv1m/MbNWw93GkZf+/LEcqSj1SE3ajYsjWys4jDMTE1tn4vJnQcVVP3o2j8+amAcv//ata2uB8eWZldRjYUucLPfeuHLbd1T2wasfDnoG2NfV2W/8kz89mcwoC8uzRD3dXukky8LExFrixV/XNrbvIf7OwexDiT06Yyl1zUMnXFkTY+dHr/++0bCWZWhvuHXlyqnv/PBc+ubxU/LSc+cK+KzJ1I233rg4tDoR1tBAd+fohT9/sTJeknXyWEb9Z8P+BjvtRb/Y6Z6+xTNJGjouNz+FHhr3eLXJc/LTyCAtztTfO7oaYog94sLy6gj6tRxitPtwBod5l8G/IQRny6TmZrsy0f0X3/qgYX3I3OhQd0uYe4LmIAABCEAAAhCAAAQgEDmB8NxEGbn40DIEIAABCEAAAtEmwEilYlfixLyyEuB4E3KD87ESJalkH732wabkhIBd6vrs0+YlTkAxKXV1mQHc0+Gca7zV7locRJWeFr8+FUxITFRieV2uhLRhG7ryx+ueWZOQmgtbJdtYQwtZskRAiZOSXKN7dvGIWvxd9Cm4qntzxlIJpdWZ/CvD0vv1x03rWRN3qI6lpa0vFiq+7Gghf3l5qenLy2tZE1dpztRz7fYYyUWQ5W/yPOZw29rrPekXO9HdS16eAlpTWKD1/OYgzS7I4rNEK33do+7BU7vv0dYe+v7d96sj2NfyXkXruw/7uDWEN4RgbWnGfaZQazPW7WN3sWsIQAACEIAABCAAAQiEKIDESYhw3tVS421h+fFuGVsgAAEIQAAC0SkQYNaEBC/NyuVvtuccwy2tHktIr3bLOtjSzg9doZQ5udtcJt5AcEyNuQam0GoNv8TCLh6KrKxkcqmbsw82twU8emYX+9uhKi2UyBUKmZgWcMtL7tUtxO4s1Q4Vt3s6avG3Czoyz0X0jJVnrJ5Lwx3d265Msto3KT/5FTn3LKPji7I4VZznj4ozLlj5l4Q6SSve2SKi/XKOdXXxM/LRifkFiRtJPHF2YRZJOXIr/e1DNneIYeyRrz7v8OoI9rUc4Wh99SA6toXwhhCkLTs1OmHnc+E5Z5+5v0BD0mt4QAACEIAABCAAAQhA4OAJBHBb58HrFCKGAAQgAAEIQCCCAk6rlVwUE1KUTCYNbDAEHa/V8Itfc8tTU6vzEW2Kj52ZnHEKyNrscYkJYsGoZcfgLSaTgxMwAok4gKvK27RGx8eraRIYuzQ947WQyDb1wvyURFtUe6KmJD89KU7CkHu0OdZuWlhh+HmdyC3bgRn7DSlq8f1GHPYn9uSMJVk897m0PDMXyLlExye4V4SXlT39ozJ/faZkchklsPjOjOxJvwQC51hb18LR4xompbAo4fqMO/MpzirOIS9/ztjTPrCaNwlDj3wxBPjqCPa1HKFoffUguraF8IYQrC233Pzll8Upj+UqlDlnXvlR3UxfW2NjU1PP1MrWeRWjiwbRQAACEIAABCAAAQhAwFMAiROcDxCAAAQgAAEIBCfALs6TG9BlFCVN1CqpgUCWhxeLXDcdczarzeclYIfV6nTlYkQSsoK2n8vEnlE6nfyiChRF727AiYB2ZScEAoedJGL25UGry5/6zjPlJGu0sXuKFikT1OEKJ2rxw9XBHdvZmzNWJHJ/rrbbfJ/kW8NcPS5bN2/+nZzi/hNne9MvPnPS2mE4ekpLp5QWJ167NkteKuKckgLXNGOdbUPrK/DsvkdbMYJ5dQT7Wg5/tFujj9LfQ3hDCNZW4Jy5/dt/nT5y39kT5RlxsuSCI48WHDm7ONhw5dJXjZM7Z8ajVA5hQQACEIAABCAAAQgcLgEkTg7X8UZvIQABCEAAArsX4AzjE2ZOp6BoXU6O/E7j+tq//pu22V0XV0lehF8DwjtFIZSQkRbkCc5uI4NZAnhwAZXauSGrhVzEUwsouVJBC8iolx0fHMu6b5oWCsmnKPfSDjtW8l+AUlU+doHPmnCWqZavL9/tHJ9fXrFxQqlSW/P8nz6YtXkxcf/tbPdM1OJvF3RYn9ubM3bNWSzlF83Z+QS1O1ynD2e4/st/vjgWyq34e9MvEiM72dY8deKsnk4uLU66fnWak+SV5JGRMKyhvWl440Ww+x5tPuzBvTqCfS2HO9qwnrKRbCyEN4Rgbfnw2eXB2x//4u7llMLKY0ePVGTGidTZxy58Lzvpd7+4OIjcSSSPMNqGAAQgAAEIQAACEAiPwC5v0wxPELHRyviCeJc/seFALgCk5q/8T88u/eeHzdWKWOkT+gEBCEAAAp4CjtHOXtfi7KKco9VJAXyYYBfm5smIEoEgLiVZ5sOS1uq0fIqAWzbMrU7746NUBDax89Nz/PAASpGdHUhHSAg2i2s8AaVU8Yvd7/YhzS3K5heKsPR8+saHN3smF0xk6A2Zqcu8NG3gibc8ONbpvsDOrC6+vLWAj9+jFt9HrJHatBdn7IazLkURwKnBDxdhXS8KXYo8xI7vRb9coXGzzU0j/Ox4ScVlybRAlleeL6U4dqq5hV/DfvURjh5tggjq1RHsazns0YZ4DPe8WghvCMHaevSJXZnqvPnBr3/6D2983bvMcpQo6ciDdR5L5ex597FDCEAAAhCAAAQgAAEIBCoQwLWOQJtCuT0SkKocR0vM3ztr/J+fWvo/Xlj8+28t/Zenlv+Hs6ZvV1lrk9ntJ5sndY+VmP/krPF/Wav7v10w/vv7Vp4utuUrOfeX/MzK5f/zpcX//tLi352y7/w9nnY8c4Ev/N9fXL6Q4BKgHfeX21PEnCrB9kiuE2fYHp0W2A0EIACBPRWw9d1tmiFX8ClGf+r8yZSd1/61DPXzF1gpYWZFWYLXRWVxVkWJhr9J3zTQPxnKnfehd9421NXHzwxGa2vvr9YE8FeLXHVc4C9309qM9J3/TO4UGCUlK1i4ej4342vxF6/6Fgu/ZDhJ9ChVXoxehVc3RC2+v4AjsH0vzljL0IDrJGcyq6uSAxgqtDI8NM0n7YQZlWWhXknei365Dge32N7UT5KadFJ5Raq6sDxPQnHOkcYWftqu9Uc4euTRXJCvjmBfy2GONgJnbYSaDOENIVhbr8idSwPX/vBFD3n3oujkNN3OfzK8WsAGCEAAAhCAAAQgAAEI7LVAABcI9jqkg7S/1HhbWH4C7DMlcZ45bvzr86aXK2xVSU6tjJPQAobhZDI2NclxpMjynQeX/+Yha4avo+qu+zfnTS9V2CqTnIlrdZUKZ7befn+l+QePL/+4mM9zjI6IZlxfgiUp9uKdltwVJtrLXJeN2GVR07y7H7Rp7WZhs5Xyvlk2wM6iGAQgAAEIRLOAc+LWZ/cMZBAJJck4952XzhXE+7gSRkkSstITXFeQyWXX251G8kdBlHH6qZM6zz8vlKrg0fNVajLqwjldXz+068mvgmQzd1+9PUmmB6Pk+Y+/+sKDpXq1hKEZiSopu/L+px7M91x5xN2ydXRoku+4MPvUqSxpkHvbWpxbWTbyQ3EodVoGIdjxwS4ZFvjydEpBQXwA5V0NRi/+jv0NX4E9OGO5xTb3Sc7oTj73SEGcr89jnh3iDG33Bvk8mCjtzDMPZJCZr0J47EG/VqNa6bnXRQZBUfHl9104kkOm3LP2NbVuXuAoLD3aQAj21RHkaznM0YZw8PapSihvCEHa+uwZGUrn3h7Sme6zSWyEAAQgAAEIQAACEIBABAWwxkkEccPbtCjO9sp95gqFwP1lw2mnR2aZWTNFkhQyCZukduqUHDmczmWavwV484PU/c595vK1ug4rPTzH13VQnELKJSc4dVJ+uMmCkearLohalq0pcWQCFkeVnmsY2i75kZXucF+3mRoRjbuTJCxz8brMnu+Um4Rf99FInGw9GPgdAhCAQIwIWPq/+MNFzbcfzVXSiqz7XvpBzVR/d//Y9KLZztFiqSJeq8/MydIpzfVv/PSjAZINMXde+rIj6+kSlSz77Pd+kNlY3zk6b6EVyblVdWVpCpri7JM3P7sx5fU3LOJczsnr73+S8u0LRWphfP4Dz+c/sMMeOUPLnc4TaeVKJunYS3+Z1NrUPTZvdrBkPXeZNk+908XyrY1bBzsHzEVFcmHmw6++rLnT2je1QARJKUahj/NxfdE62DdqL8gRCzPOfftbijudE0YHI9ek5uaJ2n7/YYe/hQOiFn8rRyR/34Mz1tz55cXWjGfK1aKUuhd+lNXb3No3ZjDZOEYiV2kLvOaC45YaL14p//5D2VJJxunv/Divp6VzyDVZGyWWxSXq0nPiJz7+7fWdxmDtQb/ch8XaV99iKD+RqMwpUPLT6rXXd69sOWDh6dF6o8G+OoJ8LYc52kievEG0LdcXlVX6XHeKNY52DRr41HQIbwhB2dL6+199Js3Q1Ts8YVg2252UUB6vy609XsRPS+gYHxx3LXmFBwQgAAEIQAACEIAABKJbAImT6D4+a9FRMvuL95sr5HzWxGkWXm2WfjXCGDdfXJIoHGXZdtWUcMtVE3fd8u3qcuoER20mOzzpukLDMc0jzLkyMvqEy8+wK4bERn9ItKMyjeUvEbFM8yizHo5lQfzpXX91sB0CEIAABGJFwDF96+1fLT544YljWSqGUeoKanUFW/vGKbKytPQAf+2XW2p77y2J4IWHSzSihPyjj+QfXS/Mceax2x+8fXl0T9c3Wd+9c67hnV/O1d1/9kRZplpMu/8Ystb5oc4JSWlpKhlLs3kpelPHpx+kab91TCcWaXJrHsyt2drrYH43tn3xSX7yM2UaYXzu8Udyj+9Ql1tqvny9MvWBNIkosfDM+cK14tyyScd0DPpb3T568Xfob1ifjvwZyy13vP8b2vb8Y7UpUmlSwbGzXq+IzR1yztx++7fMc8/en68mmbLiE/piz+c5O6cVCiZ3fFVEvl/uqJzjjfXjRx5J54dhOWea7gz6iCw8PVpTCPLVQcIK7rUc3mjDerKG2hitKX/46XKftZ2DH/3DoGGZfy6UN4QgbGX6NH1yXkZKXtWWQDgyHeNXF+/N48Yqn0cIGyEAAQhAAAIQgAAEoksAiZPoOh6+o6HYmlpzjTvzsSz+zdey5q03+PH1rCbhvTavA+pR17Esfv1rWauPutSiQfSVYWPnkyOisRInmfJLnGwvkYjvWH3HJdTay1xL/DoXRI1LvstgKwQgAAEIxLKAc6Hzy9/01WeVV5YV5aTptfEKqZBiHTazcXHeMD0xOtDX1Tkwu55Zt0/d+93PBwuqa6uLczOS1HIxZ1menxzqaW2obx417f1gk41Dw5mG737yb3c/k6oTNEopw1qWDIYlK136LZI4EXB2B1kW2/Nh6vviX18bOnaitjRHr1XLRJSAdVjNK8al+bnpqcmxga6FwC8Mcout7/3rdFfdscrCbH1inFzMcE6H3WZZMS4vLc3Pz431bZ4OyT7x9Ru/mjt1+mhxZkq8QiRwWI3zU6MDnZ07XIyMXvy9fIVE/ox1GNo+/NfBhrLq6uL8nNQElVwqoli71WxaXpidnhwfHeqY2pTeMo/ceOOfugqqaqqKctKT45XkbHLaLStLhpnJ4b7WsQBfFZHvF3+UOEPT3b770opkAvvwvSZ/w8PC0yP3WRHsq4MPMrjXcjij3cszedf7CuUNIVBb+/DdyzfNedlpSRqVXMKQvwlWckZPjvS11Ne3TawEeFLvuotoAAIQgAAEIAABCEAAArsSoNIzMjmOy8nL31Uza5VXlhfJP511PwtLa9HfCFnghAQ5vrDTSiD+e+LZgr/WhFrL/3jWquUnf2cuXlJ+vrqUiP9GPZ7ZqOtgPvlSeYk/PgE8KPaBs8tPaskAF6rzjupfBnzO1sUV1Bn/Io8fcTLQqPrH7o1ZuQrqlv4yj6M4+ssvVJ/4iladZDuday9JciZIOYalFpeZ/nHx1R7RmMedCU+w2AAAIABJREFUi5L0lb89ZSd5Gcuw/L/cFG3J3aRXLP+HEpZyiH7zgbxx83B/Rmv5T2etZJFV06D8726LPJ8MZL9uHVrEZukchUmOLI0zWckpRGQaNGrFTM8sMdcaZA1+x+AEYIsiEIAABAIQYOp/SErJVeoAyqJIxARo3bm//NP7tLRz+OJPfn1nc/oiYjtFwxCAQNgF8FoOO+l6g7CNnC1ahgAEIAABCEAAAhDYVwGvAQr7Gg127kuAK8y1kTQAeSwPS7/xlYfwVcu9baPu4pD0aoBZE1KVo5uGhee1DpGAy820xw2KfVwtYpzVqXzWhHMKG0YDXsuEYY/UmZ7PZjdyTTSXqHGQn7o84SfX5JfnVpM0tlnhkNNezAjEZAkWWjTkeXMaxWYmsoSEYpwZakHj7CYAdYLTtewKNTgl3FhhOOD9utvKqzTyuZ9NDXMKhVMuo+r3etli/4cXz0AAAhCAQAQFGE3lmZpE8oeOnR0cWg58BEkEQ0LTEIBACAJ4LYeAFmAV2AYIhWIQgAAEIAABCEAAAgdPAImTsB0zJi44TOdSYBfgaWdxiusKPke3DG1dv2SH6D3rDgt9TETtv/7iqKin0lEqFIi09nKZ+JrXBF9kFq9SKV/fNiVq8XrWd8MUe+SE8aU0jlyFspuEjcPCYSNFSdi8DFuFhqOljsdPmecuyptdi7RwVmHvgqA4UUDLHVkywZDnKpeMM1fDL/cioNgskkGZ9UzbcJlasjqLgGOZnpm1gTLB7HdL5GQSsx4DbVihyJAXhdyplzLDfiYu891lbIUABCAAgagXUFQ9+/1qemhobHJmfmnF5qCEMlVien55VXGKnAz3XOm53jCDuWWi/jAiQAgI8FqO3EkA28jZomUIQAACEIAABCAAgegUCO5af3T2IbajomTOVAnfRTJP14DHMiSB9Nqz7mBwQ1UEnEV0d9xSkslRjKMqjb3es2VMCVeQYVe6chddQ6IAZ65SZ5ufTuWzJgujstduiyfXMkfXu8XVR03fyWJpmf2RPGdrm2udeY7um6bZRJam2Twtd8W0MV0Yk+DIXjtzU5Mcsi7xRuKGduYl8nkmdonpM68iBbdfT1mOvlsv9znbWCD+KAMBCEAAAgdBgNGlZ2kzFEkZm9bldkfOmoa++cPHzRhvchAOJGI89AJ4LUfuFIBt5GzRMgQgAAEIQAACEIBAlAogcRKlB2Y9LFrGqVwzRnEWej7I+1096y4EWZdkRDoHRcsZtjhKkJVpT+yVzHrOUiJyVKfy+Qk+vzLhcwUUL1jKebLQwd+6axG9e3cja8KXY+mmRkltqrlUJEhJs6e0MxOufU1MC43FJAAuK9kpHBKur1aiS3aSqNwPUaIzixF0rC2zSsc78lzjYBamhdPugIPf72rT+B8EIAABCBwOgbn2b75hszNSk7XxZCFjESNwWs3LCzOTQ73tDU3dU2bM0nU4zgP08uAL4LUcuWMI28jZomUIQAACEIAABCAAgegUQOIkOo+LR1Q0J3L/5hDYt710o9Ha08jYFI6anhFOu5MMTKB1fSrYpkUNJtsDSgGjsdfESS56LJGiSLWXuFYpmR8VdQc45ZjaXhbHVzGOi7u8Zg3jbMKBZUFpgoBSsXqhYMIVv2NO2G2zHZEI5EmOVFq4uswJxeYn85NxzUwLRUmOeLEjL17QMbfag4QkB78eDEd3TQjdyRQ6+P361MBGCEAAAhCIUQHnwkDD5YGGGO0dugWBwyOA13LkjjVsI2eLliEAAQhAAAIQgAAEolQAiZMoPTAbYbHUamKCEWx7tLii0pUXdHzO4MsvVKuzSzkDrOsHgRXeHWLuK3PStLMm03mphVkb18GWZzn4+cM4umHQYwF2P824N4vVrNY1TESVa/pvuX6LUhQbR5p2J34cwo5pqi6DI8uc5CsFQ0t8LUriKNC4UiOdYonacVTiyqPMuWb3EnB5Ka716m3C9rVUSij79RsdnoAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIEYFyAXmfGIagHOShldA00oKasO8nDtpq4bZXJQNODKlmgzbVlre6cUjtokfp4uh0F8N+ClUxQSPqURyIPZKEf1jLvWtKedRSmse3YuabIjmyGpEaZ7VtjtWv5dr3fEu56jxI4SLR+YeUo4sDYOJqT9BhImykAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgEAMCmw7hiEG+3vwusSu0NMOQaZYQAmdmWpBSzDrw++mrluKM4lvTVpz0/gxH3XJXP8kn6DQZthI6oLkKXr7xZsWPtled21VkpkB2TtDW5aa96jJUXOmjV/5FIjTXswIMvQOVY94ScDl6vnBLtYZ0YCDEk0y9nSHSOMokEhuWQSSZHuuK7C+caF1vY2Q9rt9V/AsBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIxKoAEidRf2Sdwt5Zqo6sxE6xZenOTw3r82UFELlH3fJg6642T7X1i5ZTyQrtbGWu46NJ0QrtPJbjJOkJziq8NRrYsvCuplasq4VlAnpwOtAJvshK8s0zliIdJ9SS7Ii43uEsSSZjSqj+caFFILBMioadjnzGWZrC3R4S5OgdMrL4vF3YPLkRWGj7DQAXRSAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQCAGBQKcPCkGex6FXRpfEJMfr8Co9mGh2TVbV1KupVbu9fx2GzbqanMtdcHVXW3XOiVucA0Bkept1XKBONlWq+R/nR8Rd7pXItkugI3nrEvMvKsXZKX3jCDOO9IFhszWRQkdFTpOpLWXSAWck2l3pUY4s7BtXsCRpU3SHDKhs1zPz9NFsimdHovPh7rfwHqFUhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIBBbAkFcwI6tjh+k3qyMSq6TOapca3g8dcyaEcwwoU11j1szRMF3nGVuDfDDXCjGcTzHUZFrjyOjOljmbr8wmLyJgF0Qdq3we6cVtgczVxcsCSQa04S4h98TV5BhL093qCiBY1bU4Z6Ki6PbR/nYJCn28jR7KZnDi6M6R4Rmj3ZD3m8gsaEMBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIxJgAEidhO6DOJUdQP0HsmGW+qpdMuBZplydbfnDOfErLBpo98agrSyJ1V84k+6grlDrLC6wVrqEk3o+ZAXGXK0mizzdfIJOGCQS2GfHtRe+C225hhdd7+bEjAoorrVl5Qs/yy5FsfsgknPcZSeYEa3SNLxHrLE9nkBXmqYFR4ZJr8Ap5GMZEw6yAEjker7IrSUbHxhfe1Gqo+90SG36FAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIACBwyAQ6OX3w2ARzX20zkp/eZv7i2O2JEYgjbc9f852flk4MEcbrJSDE4jEbLySzUj03YNNddX2Zx+0nzcyg/OMwSIg4z4kYjYhjs1Qs2JKMMyI2jpp1qsZstDItRFrcS5LS9g48ixHtfSKFtZSF17F/W6Y7pV9pjc9SRYpETnP3mesNQi7ZvkucBSnkLOpiY4Mp+T/+VIyvbVlqmNAtJRuU9OcSszP09U0vrG2PLciapq15CRzKim/X8OIuNuxNYBQ97u1HfwOAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACMS+AxEkYDnFqvMeSGmFoz3cThhHZT0zM03WWWg0/LEOucpSpfJf03rqlrlTpLFa6BrBsfiQlOMnK7a4FTbY8qJ5e0WS2NdU1HoQ1iq9PbB7VsbW8n9+dzDfXFI4jKxcyWJIBUSfYjyVsKsnZWC0tmPYKzTotvme0nXX11zYlavOcioujW4aFF5Id/OIwHFPvcwKxUPfrpxvYDAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAjErgMTJQTq0KwbxW1+Ivkyx12XY8xPYJAUrYwSsk7LYKaOZNhjpqQVmxCDs9TWJls+6ZMiJxUbNG5mJeaZ3QtQ2TXumJDxp2EXx9Wnbt3Rkni5qsFc84j0sJTBIzs5cu6Fq7bGdyLEXatlkOSt1dcG4Qk/NMz3jYjLvlo8Hy9wZYO6vdDICqnNItCW1szwm7qlylIkEjjnRXV99Jw2GuF8foWATBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIxLIAlZ6RyXFcTl5+WHq5ssxft3bW/SwsraERCEAAAhCAwOEUYOp/SDouV6kPZ/fRawhAAAIQgAAEIAABCEAAAhCAAAQgsI8C3ktx72Mw2DUEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQ2E8BJE72Ux/7hgAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAIKoEkDiJqsOBYCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACENhPASwOv5/62DcEIAABCEBgDwTiHv+ve7AX7AIC4RJY+uSvw9UU2oEABCAAAQhAAAIQgAAEIAABCIQggBEnIaChCgQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAArEpgMRJbB5X9AoCEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIEQBJA4CQENVSAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIhNAaxxEpvHFb2CAAQgAAEIQAACB1RgZXnxgEaOsCEAAQhAAAIQgAAEIAABCEAgGgTkKvUuw8CIk10CojoEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAKxI0ClZ2RyHJeTlx+WPrnvENx9PicswaARCEAAAhCAwAEVCO/f0/C2dkBJETYEIAABCEAAAhCAAAQgAAEIQAACMS8QrmsgGHES86cKOggBCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgECgAkicBCqFchCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCMS8ABInMX+I0UEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQCFUDiJFAplIMABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQCDmBZA4iflDjA5CAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAQqAASJ4FKoRwEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIxL4DEScwfYnQQAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIACBQAWEgRaM6XJxcXF5eXlSqZT0cnZ2dmRkxGKxxHSP0TkIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAR8CBz2xElySvJDZ8+lpqZ62tTfu3f58mUfWtgEAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIBATAsc6sRJTXX1Aw88yDCb5itD1iTgE56RxMWraeP0gjXgKigIAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIhqgcObOCksKDx37tyWg4Osyc5nK5VQ8ei52nStNjFeIaYWb73+k4sj7M7VUAICEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgcAAE9mhx+OeffTohQRM9Hkql6tFHH9kSD7ImAR0gSpleWJCtT1CKaSqgCigEAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEDgwAns04iQrM/N733mlta39+s1bZrN533nKy8skEolnGP6yJkqlQq5QTE9N+4xZWfvKf3wiJyhE58Tln/3r9VnOZ3uHciMllKsTtIlarVYjGK+/N2I5lAroNAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCESFQFDX/HcVMU3TlRXlxUVFt+/cudfY5HQ6d9Xc7iqXlpR4NtDQ0OBzNXiSNXnpxZd6+/r9JU52FwVqCwTSshf/6ukSCeUavOIc/LS5YcSCpBLODAhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACENgvgT2aqmu9e2Kx6MzpU3/6vVf/f/buA7qtI80XPO69yIEAiUAQjGBOEkmRlGSJsoJlWZZt2bLbbrvt6e5pz3SYmX47b96ZnTfvvLN79oXZt+e9Pbs7PWm3x+2OjnKU5SQnWZGiSDHnnCNIgiBBxLt1AZAESYAEIEbpj8M+bd1bt27VrwogWN+tqqzMzO2qM0VRKtWydcO0Wq1AIFhRHm/UJDo6Ot5g2K6i3vv3pRgB3xs1uffrihpCAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIDAzhfYuhkn/hZRUVFnTp8qLNj77ZWrQ8PDW8wkFotXDNUnJCQ8fe7cu++953A4vIVZjJqQf9LB9/JgXQ6bzeb0rwDFCAX8xStYl93mXDaDwm13YUbFFrc4bgcBCEAAAhCAAAQgsC0C2Rlp23Jf3BQCEIAABCAAAQhAAAIQaG7rCBGBjGaroqNlMqmAYXhb+ZQ7yzpcrtnZuanJSfcOGzTfnsCJt8EMcfrnn/tOS2vb1es3zGZziK1498nsdjtZKIwhncDv5R878Y+akCT2hWjK6lvP1pz/HzXLDlPRB370s4cSfNums5MVr//jFwPu1VfiCAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEBgWwUEfEFcXCyfv2y0fItKRFECPl+ljJLLZENDIw6nb1bDFt19zdtsZ+DEW7CszIz0tNTKO9UVt2/b7VtBQ6ImY2Pjen3sChlv7OTzS5fOPfUUWaFr8ezQ0NCahnd5kpLE5pTsy81MMaijpCLaaTWbRvq7mmqrqruml81l4e7DV+iTUhINcbE6nTpaFSWXSkRCAcNzWGdMw10tteW3m0bmhZq0/KL8zNREvVohol02y+Rof2dTxa2aHvOKfWX4iriUtCSDXqfVqlVKhTc3mnXMW6bGh3o7m+pqGwcsYe1FI1CnF+WnxsdqYqJVKoVULBTQrNM2a54YGehsqams61tZhGV4TMrpn/8vp5cOuQa++udf35xYFmwMi8uTlSAmvbCoICslXquSSwS022mbm5kyjY8M9rU31DWOWO+y/XA5BCAAAQhAAAIQgMDaAqE/6bZ2PjgLAQhAAAIQgAAEIAABCIQiEPrMbzLXZDFqQlZjmrfZHc6wxoNDKU7QNAI+IybD2wISPWFIMfr7+3fOvJPtD5wQNjL5Y39JcX5u7o3y8rr6Bpbd3Gk5SqVSLpcGbC4SO/nhD35A9rH3P9vS0hww8QYc5EfnnTz3WLFe4puhQrIUyqL1qeQnv+SB5q/evlA5bPe7D20oe/a7+5VLqX3nhFKVPrVIn7q3uLTbrEyJkzOLSWiJUpdMfnIL91x5+62ve/ziBCS37zwbODddkkqXlFN8+GjLtx9cLO8LObhAxxWeLMsULCugQBKlTiA/GXsO7K/+8M3PGqcjnYETLhcJNGmLzj33cE40f6lEtFAapSY/hpQMnbW9acS6ub1tA3oJsoAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgsPEC0dEx3rkm1nkb+dn4G6yZIwnSOJxWidgtEYtIMUhhJkymNa/YupNbvTn8GjWTSiUPHT/2Ry++kJyUtEayuzxFoibPPfusXK4Ils+KqElPTy+ZnhIs8V0dp2OKnv6jp5dFTfzyowQxOadeOlcYE04TMfL4NINf1MQ/P3F82ZMnsyThFJkSqLMfeunFEyniUK9yTIxPBw1EUCJd0ZPn9mvDqdHSjSPg4scfe+bUsqiJfz3Ymf6BqaCFDbXGSAcBCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAYFcKyGTceLGDhC+2PGqy6EVuTQpA/uktzA5x3BEzTrbMwhs1IVvTh3jHudnZzy99FmLiMJPR6tIzpzPki9vIOy0jfQMmKyXTJSaoJd7DlCz9+MnctrfqZwNm7rZbJqdm5l0CpUYtEyzbtYdsqzNrmphh5Rq1fHH+B63IOZh3ufW2OWC0wG2bMU1ZbE5KFBUTIxcuFkyoP/DUyZ5/+ahjPmAhlh90m8YnXG4F2c5nepb0eLuLEik0cXqlaGHGhzC+pDSp4uPugBO+2Nnhzt6ppeXa3CbTQpQzEi4mcW+BenHuDWub7G3rHp9z0SKZUhMbFysb6huJdO5LCBRIAgEIQAACEIAABCAAAQhAAAIQgAAEIAABCEBgJwt4NwKft231XJMVJqQAZL2uFbuSb6/bDgqczM1ZN3WprnCjJmSiyYWPLpjNM5vSQqLUsgcShQt7yJubP/7dBzXj3pCBOP7B5757LEnMnaQkGYXZyobKQNM4WPOd9/7pUh8Z+6ejsp74o6cLoxeyc3R9/q/nb06Q7GhF1pk//s5e3xmKb0iOF9w2+6/+tVA71lz9/j97cuN2Bck6+szZUoMv3EFF5R8uutZ5YzJgwGU5j631w3/4P62zDr+klDTp2IsvPGAQeFJS8oT4aKp7PFBe7rHqj9++PRPgVERcIqXSg+h5ubov/fr1yqUIFCWQitlt/kBYKBv+HwIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIDAlgtQnqfxna5tfr7cWwBvYbbcIPANI1s1KXBeER8lu7Xful356m9/W1tXv0kbnIQVNZmxWG6Wl//h9dcmJycjrtTaFwpT8rJkC3EOZ9+1S7W+qAm5bH7g2pVGy0L0gDEkxXtDDsFzdJtbr90ZXpzEQTEihvXuK++eab1RObTU7xlVdNTSdh/BcnSYWr58+6tu20IZKCYuJ3P1zioBL7fPLYuakDTsXO/Nim7nYmYKpTzcbhcZl91qdS0GYWhdXrFRuRQoZB1zVq9RwGrgIAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIACB+0Fgk8bkQ6fb9gKsLur2zzhpaW27ev2G2WxeXbiNOrJ21KSuru7rb77R6XQqlcrldE5Pm4dHhjZ5f3paE69fXL2K4ic9+vO/fTRIbSl+lIqEWOwBpmH4XcFOjo3b2biFTeZFEm6qhecSdmp03MYafGcokXjxTJAbeg+zUw01nQ8Zc4Sef1KMzhDL8KZCiTQIY9IKi3LTE3TRUXKFXCrgOeYtZpuAWbgdxResFwhaWbIIuZz9HV223GzvrBNKZnzwhZ+XjLTV1d6prm8fs25zFHVlHfFvCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQ2BEC2xk4GRwa/vbK1aHh4U2VWDdqcumLL0hEa8Dz2tSS+GVOyeUL803Wv2VIgQbWbiMrc/m2fqf4fL+pFfZ5snDWQkiF4S9GMNa5s318dMqdo/NNDmGkMrJDvGWda8SJh889d9S4fEaJUKrUSP0rv04mq09HyjXbeOnLnPhHMxQLM1wYaWz2gYez9h+d6qz65strtaNYq2u1No5AAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACELivBbYncELml1y9frOltXWz7UOMmmx2MVbnH8Z6bazDvrRd+uqcFo4En84U/Ezw3MgZ1u3y28GdLHa37hJfspzTzx0zyv3TsTw3jyWXLtu5fs3bBjwZxvXLuNymO+++Mn3g4ZMHcrSSxe3uKUoYnXbwqaT0pPdeu9i6uChawDvjIAQgAAEIQIATEMi1+litTsMfq63ttcIEAhCAAAQgAAEIQAACEIAABCAAgXtZYKsDJ3a741ZFRVV1DdnXZLNdd2zUhNv2Y87K8nyLdbHOjgv/8HbNXBAPlnVv8sJhgW9MyxR+MRC31TofMN1imIRS5pUs7tvCY2e7r1z8oqJ73GJ3U3xZwdN/fjaTHyD04na7/RYho+mAu5/cDZdruvP6+f+vQpWcXVhQUJCTqBT4gjiUQLPvzLGW7o/a7AErhoMQgAAEIACBRQEm/eEfPpsnoNwDl1rresnvcLwgAAEIQAACEIAABCAAAQhAAAIQuHcFti5wQkbI6xsar98st1q34kHNHRw1Ib3JPT486mRVQk8kgWKSiws0tddGNz2UFE4/ZvSpxqXlxNyT46bF4vkPFwnFIhLr4PYLoaN16sVJHW5TzdeXW0e9+4iwznkbWS0s4Mtpty9tNkIrVWQL+ulVSe+eyzHVU/dNT923X+gLT559dI/GG8OhZEmpsXRbH7Y7Cdg2OAgBCEBg2wUE+pKzzxw1iqcaP33nk4apVb8ftr2AKAAEIAABCEAgPAGBVBuvi1FKRHzWYZ2dGhkbnZjfUX8HhlcdpIYABCAAAQhAAAL3rMAWBU56enu/+faKyTS5NZA7O2rCGVi7WnscmRm+rdf5hqPffYH/+We32pb2LGfE0XEp6VFTdxqHQ9mS/e5h+QqljOmb8XxrpxXGE48Uqxenf7AzXV3jC+EFMmuIDF15Z49QYuOeXGVn7TQ5SWbGLJaCEkdFCXlDgSep+JeVnZ4k12q9d6IUOfvyyvvruNzIixJJxa45K6l+hFwSfVayYLR7YHLeV3b33HD1rZaD+Rqtb/KLWOLdOv7u+ZADBCAAgXtWgNYffflPj2hp1tp28ZXXq83rhi8EiQ/95I8OkF8ijqb3/vs7TaGsNxkYj0k+eCxLQ7bYkuw9VnSn6eshBLoDQ+EoBCAAAQjsAgEmKv34gycOpUSL/NYxZl1dH/7mzVuzu6D8KCIEIAABCEAAAhC4vwS2KHDy7vsfbpnrzo+acBSWpqt3Hkjdr2a8k05oRdqRZ3522GaZnJ5zMWKZXCYVkVkRruHLPU3Do+uOUW0ALiXPPfs/pR2fNE3PucUxsRoZf2lTE+dwdVX/wnNQbrNpys1qfJNLaEXOUz+J39916+N3m0bHXaxiYS5H3uN/Ik5t6jPNkigLJTDoguxJ7zb1D1hZrW9uC63IPffTxMMjkzZKJItSqajG137xSSe5c0Rc/HjyoPJeids6NT4xZbbMzM67GKk2yahZCghZZrDFyQZ0HmQBAQjc2wKUIsqzdCMlSXvwSHrTxTbbmvWl1CUn9sV4PmlpqUwaaCLhmtf7nWTnuYUtSYSbdVvn5rfil2GoJUM6CEAAFuyQAAAgAElEQVQAAhCAQFgClCzr3LknC6MWp+j7rmYtY8NbsSBDWIUNkFigKX72kSPp4qnab9//sG0KTzIEMNoxh9BYO6YpUBAIQAACENjlAlsUONlKJZqi6JXfR333r6uru/TFFxFulr7BdXD0Xr7wbfzzxxKWpjxQtEih1in8bkRHa2L4vNHIH9YNr9CMSKGJ878/dznrHCn/vMK36hZ3gEz/6LWnpfp2aCEjacKouGiRi51pqmo9mpLr2xiFEqnTi8rS1y2Ao7OyenTP4diFwAolUMQmLJTBpdEpqE5ubZYIuGi1QU9wKUYSHZsQHRugJM6RhvoRfOkPIINDEIAABPwExFEK79KSZD5i/rHSWx1Xx9b46JRklR1KEPimJcrkdxU4cfdfPn/BWZIimWq5XjmJwAm6JQQgsFMFhOqs/ZlJenWMufadz3u3ZrZ4AIsdUowAJcMhniC19EQBFzVhrcN3PrlW0Tw6bWX5UoU2UWHbDfMpmbSiI7kx5I8rffH+goqOywNrfBO415ubEsakpWVlpxhTtNFKiVTMZ52O+Rnz5Nj4UHdfR2NX74Q96FcW7tr07Jxko1GrUkilYoZ12CxTUxNDI33tXS2NA5M2lsfEHvs33zlIHvZj7S1v/ea92nVWcWBSHvzxywVKmiwHXvm7v78+5OKhse71Loj6QQACEIDAlgncg4GTyampt956+7nnnpXLl8UAdlLUxNO+9sFvX/+D5dTjJ/fGSgJsm84loQRqrZJqHg/6zWuzOwo7P1zx4fmv+vz3T2enqz//1PjC49lK73QZUgbH+JjJTZZk+eydq4rvlCUu7Y0SQvlcQ9fe/Vz34iMZUas3hqc1sRqGN+X56zNsLnFcXEwQV09+E3UX37uJuEkITYQkEIDA/S1AyxS+kDi3K1fc/rKcqvca5oKY0LH7j2Qv/hagpLKwfiOsztQ2Uv/VxfrVx3EEAhCAwA4SoORJpadKEhies6F1jW+fm13iHVKMza7m7syfn1SYzv21w1pbL1z8vMb3W9RumRpomtoVNWLnrGTmp2cOqI37r/v0RUmT9p54Yn9enNhvtTUeTyiSq7XkJzE7p/SUbfirD3739eo/Mz3Xnj2Qp/dfqY3HE0lUseQnLq2w8Kh16PKv3r05ONZcP7X/WAxNCVP2JEtqW9ackcTE5xs9f0i7TfXtI55VItBY92n3RLUhAAEIQGDjBe7BwAlBWh072XFRE29T2kaqLvyqqTyzoCAnIzlOF62QChm302azzponTWMjgz2drU2mrfleys52Vd4xqzNS9DEKMeO2zU6O9rY3VFTU9phXbVboNlW/86+D2ftK96STR+uUcqFpbMIT3LB2X/79P7Xk7CvMTovXqaMVEpGAIV+unXbb/JzFPG2aGB8bHR3sHlieo3O08vy/DOQeKN2TmRSrjpIKaNZpmzNPDPd2ttX4TXXhhcc13/Ll+Q/709KS4/UalUImFtI067bPW6YnRgY6W+qrGnrN2/Y84Ma/k5EjBCAAgc0SoDzTRsif4Sz5fURRksyyYl3TFf9P56U7S7IeKNVxUXUuMUWRZRdlAh5v1a+RzSoq8oUABCAAAQjsRAFaqY/j5uuztr7GpmDPHuzEgi+Wyd176713nEVp4unGO1UTW/MH6k4D4WtKH372iXSld6kE1j1vGhkYnJqZc/IEQpkqRhsXo5QwFOU2jUyumo9Drj317BNpC9e6rOMj/YNTFquLFonJtfqEGBmZrcvOTJLHEXm80YYO04MxZM6JMC09TdpSv0aX4euzchTc1zT3ZEu9b1dSNNZO6zooDwQgAAEI7FqBezNwQprDP3aylVETdrL8lb8rD6c/sNbRlpuXWm6Gco2795Nf/O+fBErp7r30f//XS0HO/ON/DnhmeWrHaNPXl/q+DJRFoGO20eYbF5tvrDrFzg03Xv208eqqE2seIFPWG7650PDNmok8J0PnclvHO6vJz7X1M0UKCEAAAhAIKsBIZZ5FJV091XWKgkI1E1tyMOv2h02rn3+ktaWHskiQhbV2VHbE7MuPpigpF3TxfzKVr8k9VJKXqNfGKKOkYgGfctvnpseHu1tqyitbxlbunsKkPvrnLxXLKff4lVf/9Su/tUzE2nQSoo+L1ek00aoouVQk5DMU67DOTI72dTRU3Krrs6watAhaQ3KClhly9u3NyTTGxZBnGHh266zFbBrt66y/dbtjcu3AT3g14goh1GSWlu7NTjGooyQimoT052YmJ4YHuusqytu41Sl9r/WTUVE5p58+U6CjJ8iUz4u1nsEWvCAAAQhAYOcJUGJuzy/yp4xlZtc+umUfqb75afXOs92iElHy/BPPnfVOG3Jbumu+/qSyacC67BcvJVAmpe7ZK+1u81+ugZTPe22aZ8qR29JV8/Wnq64VyOOyMnNVI12edbncw+3No8VlejLnJCE7S1J/Z/V3Ll+1maT0jChP3GSkrXlplst93lhb1CdwGwhAAAIQuA8E7tnACWk7b+wkLy/v2vXrO2Nfk/ugQ6GKEIAABCBwbwlQEol3PUmnuf1yjTT7bJZEmlO270bLtZU7nYgzHijVk/CFa+T2t7fsp4ryo3mUWMpd7P9kakzW/n254iUjmixvEZ9OfvYW1n342sX6kPabZQwlZ86SgMoKaqFUFZtCfvIK9145//Y3veusCu67monOe/jcY8V6v2UzJQqhRBGtjdNYm0ngZJ0GDatGjLrgiRcfzY1e+v7FiGVK8qM1KM0NtxYCJyEloxP2n9pn4BRi808damz8qAMTKddpK5yGAAQgsE0CNOVdldjNzd7Ea9cJUFGZp85meiIfLlPVZ2+832Fe/bAC65juabnas7Jy/tdOVH725geBrnVYhuqrhhYvdU801Y4fitWRyElSfor0TrBpSkxCnlHhKdVIbbtvvsnK++PfEIAABCAAAQhELHAvB04IComdXL2GGQcRdw9cCAEIQAAC97uAL/ZBppHMWWcab1QezjisYfTFpakVH7f7P1FJxRQd5HY3Ya1t124PW9K900wknsCJ38tlGujqEdpHRk1my7zdxRNIo+Nz9mTHyWhBzJ7HHu3ve+POdOiDSqx9oru1a3Rmzu5keXxxlDYlI1UnpWlp4pFzp0Z++WGwgYalAlHynMdeOLdHRdYXY9l5U3d7+6DJYmMFUqUmLjFuuntw7ekmJKNwakSpS548zUVNWPfsUHN9Y8/YjI3lSxTq2ARjwlz/QigqxGT3e9dE/e9BAUYal5+7J9+YHK9UyLxzvyxTQ8Nd1bWVrdPL3oyM1LAnb+8eklIllzAu6+zUYH97fVNN7dBMgACiSJOVmpqk08WqNZoohUIsFvLJPsr2WfNYT1fd1araPitPEpNWmJOTnZhgUHGL1trnpoaHOqprblUOza4eHg1Oz8975N/910f8zrOW8vf/+cN+b+H52vSDhzISDDHR0XKyoTSfYu2zMxMD/a1VNXcaTCun3C3mQotj8/ILC0llY6JkAoZ1O8iyvlNk8dnx4YHh/rbu7vEVj7fz1iwGJYqJM2YmJqXo9bHRKqVETFbWdc7PTE6Nd9V+cbHVu8ZQWEUln/8v/mWZZ4uXz/6f11ody32Y7If/zUvZIso9fOn133yzuAjxFjQK2YU7xZgUq4/XarXKKNLuAoZyk6mJ06O9fW3VDXWtUyvh/EvOlycW7S3ck5wYp5SJaZfVYhoYaCddsW5s+SwDck1IpN68aV3JD/9zif993KO3f/uLG8PrdrPwuwFvrTeUPff7PzyTRfrgXM1vfv1J26rfdZS8+OXvnzQyPNfgV//XuxWTZMfyxEf++skiBRW0wCGJCbO++8On9opI3298/VcfNizvLLTu6M+ffUBH2+s//cfX25a/I+j4My+9dFhJsdb63//6o2a/93lI9/WSh9FSK3pxfNn+DM+ubc7B2x98GCjysfwCv38xi9c6+srfvxDitaypvnXohC6ezxOkZmQommpmAt1AYMjO4Z6fIHGTxnq/Oav3dWMFgsIxCEAAAhCAQIQC93jgJEIVXAYBCEAAAhCAgEeA8sU+uMAJecyyory79EyqSJF7MP9KR9XMYoyDn1hcmsCneO6J6vLGWZY3Z+VCGZRAKlm+yQk7fuudP9xaZltx7WbGEz94pjCaFhv35kVXXw99cy/W3PjVR/5LeFGSxOMvfLfMIKTlOYcKrjbfWCcvWc7JM56oiXu26+vzH1zrm/OP2pBdWtYP4oRRIyomM8dAPFhn7xe/+c0tvyGOZSAhJuO5+yu+qE4+U6ClTY1f3OgKMFqMPgyBXSTAxGQ89PzxIoPftsl8uVAqjybhjrlOEjhZrAujzjz5/LFCsmPEQlxWoFDqs8hPbmlZ06XXL9ePLX87MLricw+RAd/lGoxIEZ2QT0K3GdnVQ9LcDJ1kabNnWizXpGRoktNysy+/8Vr9xKpR5QhhNaklpemexQ99L5FCZchWGbKyC6q/fOPd1ulVo+d0dOrx754oSfArHI8hLJyMIT69aO9sxYf/9H5vGAVkEo79mBv+XlYFoUQZK5HPNDsWCxB+UcMz2YJGYWJLnz21sqa0UBqtTSE/ewse6Lrz8dvlnQEmDvAE2pxT3zuaryObTvhejEypz1TqM7ILi268+0bVoP+MxhBJwwNaljqCbrDeG2qwt33UnWlgKHGiUUO3rdrJXGRIIifJAlCjfd0hPM8Qspi9v2PYtSeZfD+IS1TTDcsCRpQ81hDDTcwRGGK1TJsv3uiVoOSGeE+EwDHc3bv0Bg/5vp5cIm4pYWJBoZLrDOxs45fVI2H9vl281j1T/2Xtig+nNToFa2pv6D1oSCVU8SQ6UnvLsvobiSAlw7tOl6untYUEt0J7hYy2OxsrNASkggAEIAABCIQmgMBJaE5IBQEIQAACELgvBchSXSKu4uy8zcbyWHN9eV2ZsUQpNJbu01dfXth2RJZzYI+KTNpw9JZXcpM0aPs8eVRUzIVdyBih/yYnARBZS/vVyqG9J+MZSmuI5fNMKx5XDnBJsEOste/K13V7v1espBi9MUl6wzQbLCk5Tmn3HeJmyfDY6eoL718lD50vf0W8zmeQGlESmXcCjt00sRRzWlXAEJNxxW64+ErDxVUZ4AAEdp0ApUh79Een8qJp7v04P9XT0jM0NkfmY0lV0XqjdrpjdDEwQCkzzvzo4VwVl9I1M9re2DtqdvKjNCk5Rn0UI4rNPfPHQt4vP60PNIbI2kyddb2j02S2G0sJJJq0jKxEGcMojMUKIsbapntb+wbHLHY3Xx6XnJOjldC0Iqvs9IH+164Hi3OulHb313xybdhvWJV1TkwsBiNc4yPdXXz7sGlyao6bcseXqJJS8/NiZQw/uvD46Z6htyqWfTR4WB7Jj+HGr0nx+lp6BsdmbSwjkili4hOMiYqlcf3lBVm7GN60rNMy3EbqOzMza2cFZMaeRj44srgFdbhFXQkR8r+3oFFYh3mgtX900jpvd1NCsVIfbzTGSBhGnlryzJ9I3//lV23LP5Cp6JwnXn4oQ0FC587p7rbGpuFJGyXVJuTs46Y0yjMOnTs7/eu3Olb/dlmb1Mc+3fntZ/7bWZEOP7H2GpURdIMQ3lCsub13zG3QM7QqLUFFj6zYJUuQnJQo5N4W0+29Sz04SLOGJTbX1T/qTiZBmagkfRQ17P/WEiQaYj37rlNKvUFJ9fs/+iDSJ8Rx59yDfYu/rMO6r3/ZQ2kp//RMQkqKd4sac0dDx1rzlFYLLV073dnYFc73G3amparvmNEopPiJe1IVFbXmlZERQdIeo+dLjL27umPV2dVl8diG0713Y2MFrjaOQgACEIAABCIUQOAkQrh74bLgW83fC7VDHSAAAQhAYCMExBKxZyiTtXGhEB7P0V1+e6jwhIGvKTiQXv5+K/fULaUpOMg9RM3ONN6q9Q6C2Gx28gc+5Z2vsu6QIzttmnSyJHDCSKUkTBPOwMKqOjr6u/vsxUoRj47WkCdX11hlh1Jn5JDlw8noK9nwtmNl1GRVxmEdCFgj1jw57WbJ0LAk60BxbN+tkcCjLyEmC6s8SAyBHS0gyXrsGBc1YdnZjhvvvVXVT6atLb38535Jcx47ykVNWNbSevXtt6pHFh78v/yZuuiZsw/nymll2skncnp/17h6GJGd7rzygd+aSF/eTn/q2aeLleRjwNlz8/e/uz1sXbxv+a3iM98/Z5SSh71LsnU3b656ID8wqHt6uLl25VpVi0nZsZr3X6lZduWNyoqcEy9+LzeaFiYXZ6gqq7wrZXnScCyeqAk731v1wes3u/zmRtBxB//4z0q13DPwAV5rF8N7AWtq/uy1oCtEhVnUAGUI8dAWNAo72frFG8tqKtJln3j+2N5YAaPOefTxvsHXW5eiIJR8z+NlJGrCc1taPvzgo4rFUH7drRsZj/3JKdJU8vwD+650XVl4cmCxpmuT+thtpq661vUX5lrii6AbhPSGYse7Oyf268lvQX2yMarKtOw3NWPITOQC/W5LZ8vKDc1WtmyYYuzkQO+k26Ch6bj4eHH11NIvXyYulcw482RPaxKTRLdMS/N6mPj4eC6Q457oGPDFucK8r3+xQ2kpv/SUIk7jiZvwHH2DQ2FNN+H5XTswOBLG1DDudrPNzR3WlBwpRXaAz1TV3V4RDxYl5GR7NpKb721Yf2lST4XCRNuFjeXXbvhPCEAAAhCAwAYIeDep24CMkAUEIAABCEAAAvecACUSe4cxHDab96lpdrzmVgsZXSS7g5TmeVauEKSUFOkZsm/HaGV5p3dNci7Mwg1AUmLf5UswlESXc/DkMy/+6Od/+Vf/4W///X/8m7/6q5/98HuHE72PcjAM92j1Xb1c05MzXFEXt7UPlpswNk7D3Yy19PVNrHyOM9hFAY6HXCOyslh5zZSb2ElTT778kxcfP5gdr1j9CEuIyQKUBIcgsCsFKF3+wVxuWJKdavz4jcrlURPuLbq4mzalzz/oHSicavzk7aWoCVdt28Sddy7d4R6bp8QZRUWGEP7IYa0d39QOeD7ZaD7r9HxoLbzcU9W36zxP2lPqWL3E78wG/ydrab5d3e+5kU6n8/tAoHR5PpbZzi9ev+EfNdngIoSaXdCihppBKOm2pFFso82f/uabNi4+R0lyiov0S72Fjsvfn8k9CDBbc/mTpagJV3T3VNuXX/aQhwIoJjojx7Ok1Oa/IugGob6h3BPtLVwsjmJi0zOky6pCjmR6ZjJYepYvmBWgwmGLuUnEhgtRksW6kpP8ejwdk5zqDU+Qc/z4VL3/OW1aPHfObenp8M2NCfu+Acoe4iFKrpR6mpudnQy0idJa2fhfawkv5kKytfbUNXJLiJJJtLn5nm9cfi9Remaa54NzrqkpxIc/wkbbfY21VmPgHAQgAAEIQCB8ga35xhd+uXAFBCAAAQhAAALbL7AYOCFrby0MKs613KzlBi6EyfuKyXCTLOtAvpJ8n7B1VFSOeoMrZNkImyeCQgklvsdHPVWh5GknfvRnLz97cn++UR8jJxv10oxArFAbUuOVdx0wWcBiHXbPlBWKz18dlFhIxJ2XymXcfBMyMjSz7PF2vzTr/meYNbJ2fPr6hcohKwmeCJTJxSeffvnnP//ZcydLUqKWFTXEZOuWDgkgsBsEqJjcVJ1nDZ6R29Wda839ojQ5qRpPytHKQCltAxW3Rlzkk4pWZeRqQvkrhzUPD3oetKfU0aoVF7jGybPl3JAlLVetPLehrqyFm3LHfWaRtQ0XcyYL6vhYJquqmlZPn9nQIoSaWeCihnp1iOm2plHY6dZrtzxxNrIZSG70wpA0TfoYFxIh8ZvaHv99TLyFt/YNeYbt6RiDmmxYtfmvCLpB6G8o93BDJ7etDsVPyE7yj5zQBmMaWX2TxAlaOvrXmQMagZhroKXPEznxbK+ygEipEpLVNM892dNFNvOgJCnx3mW7uPO0IjmV+57BWno7vKFOMidl61qKYnxfJ1iHY83YB18Rn5OamZuakRrjWeSUvBa/iqx37YLD8v939FS1ciu5kchJQebyDzVJemEKt2GSe6a5qi/wBNaVeUaAtusaa2Wd8W8IQAACEIDA3QmsOaRwd1njaghAAAIQgAAEdrkAJRJ5Ih+s3RuN8FTHNXC7srf4VIpAU1SS3jJRkkYGCNjp+ltNlsXaOhwOT5yFFonJ4hregQZKVfjUuQMJ3KO8zqnu2qqmvjHznM1FthpQaDP3H8vTks3lN+LFsr7wzXqZLd5u8Xn29a5YcT6CGjlNDRd/1VGRWVBaXJRvjBHTEl3m/scyih5o/urtC5XDC2MfISYLs7xIDoGdKCCIjY/h3ozu2YGetdf1E2gNngFu92x/d8CUrLl7aJqNi6HoaINGzBtd3LEjaL3dczNkhpqaofhi6eJnlS81OUdGzoUkACxaGAQNmk+oJyixPrWgON2YHKtVy8RC2m2bm5mYnJd5Nnbg0Z4pd94Y9QILWYWnfSzMBX5CLc2a6UIv6prZRHByixrFPdbebzmqjqJptUEj5E14ov18bZznuX5KWvCDPysIXnhaJiPP+i+bpBQ88V2ciaAbhP6GIvuFtLeaCg9oaL7RmCJpavSFLWltdgoXK2Rn2+oH1wwURCjm6O7qtWVniyllakI0PezdQ0WamqijyXeJ3vLrAm1KrlSVkKSmBkY9bwdZQgo3K4i1tncN+Aq0lS3Fuly+tyCf732rBmlScXLZ88eNfBLavf3bX3hXh2OdIV4bJEtXX3PDSEFZHE3HZuYZbn/jmZ3GvaJS89KFXNxkorWuN8RPiEjQdltjBXHEYQhAAAIQgECEAgicRAiHyyAAAQhAAAL3gQC31panmk5fJMTzD3aqvrzlcHK+TJZ36js2BQl4uIbu3Or2ey7V5XCQv+P53FpdJFDCLTTBo3UFxUYuauIaq3jr1c+7/R8s73AkHSaBky0FZa1z81zEhKLkCjnF89+ENsRyRFojdn60pfxiy60vYlILDx46XJCoYAQx2adesJv/5ULbEkuIyUIsLJJBYIcKUBKZjPKEZ0kMwxszCFJSSiKX+1Kag6RkLRbysHoMeV/LZWRtnbl1g6is0+n74KLpVSOiTgc3fYXibcASglyVyBp9jzz2xGG9xG9qCyORxyTIA1SYEsvlnilxbss0Nylga19hFXXDi7ZVjcKauR4XRVpGJiU7RXBRkMXeuG6l+H5BrnUTR5wggm4Q+huKlMo11lg3WXpcTQsTs7MkjdWeX0C0JjvPEzeZ6mjsXi9uEpnYfH97lz0rR0jFJhuVlRPc1h2ipMw4PsXOd/X1dwn67LlZQnVauuLmKDfZSpyaEk++ILC27uZB3/s1svtG2BDks4nMkImieLRMJWd4IW545L0ZuZZ8BYrsWk8O7on6yqGDj8XzaVV2gf5K/6AnSEIp87KSyKQn1jVc2RTq1imRoe2yxoqwjXEZBCAAAQhAIIjA1o5RBCkEDkMAAhCAAAQgsCMFBCKRdzkrh33Z8Ml8W0WtKfcBNT9K5RnNaK+oGVs25EnSszwRRYk8a3VxpxiN1vNYOTtWV9Wz1nI8WwVhHx+bYtM1JHCSmKimepeXP5RC3GWNWJupo/zjjpqashe+dyRJRClyi7K+bKte+Yx8iMlCKTDSQGBHCniCIeQVxtQv3xWBqrPGqUDJFzdQCXDd0uYqga4M8xilKn34bJmeCx47zD13Gpu7TTOzdheZ6qKMyTx8IEe3YrlCyvPRS16LD7uHecPIk4dbVHKnhY9/mlqx4FlEpdiqRqEWuh4JoK8oqHuq5r2vG1bsxe2XhrVNcwsobforkm4QzhvKPVrbOvrgA3pGmLInRVrN7TBOx2dkkSWzyJpZdS0L0ztCqGd4YvNdzUPO7GQBo0tLl96umOUJDWlGAcU6elsH7VZ+V68zM4Ovz0yUXW+wkHVBsw0C8saxDbR3rlqSKrz7hlCRAElY86jJxsaS6JrAEKuhO4bCaHpy7aSN1Xuu1Yd5rbco7FRtQ+fJeLLzjjI/O/nSIGdAq3IK9eQjg7X111QHnH4XoBpLh8JD212NtWbFcRICEIAABCAQtgACJ2GT4QIIQAACEIDA/SJAlqghq9dwr4W1txZq7hq8U9Ff+kgSt7yW29xwq2l2mQlLZqh4DvivceMbFiWLhZOL1nyyfFlem/UP90hHh/mgRkWWDi88mFZ1oX2taM7isCDtPyy4ETWaHyi/2X4gMU9EMcroqKDPyAdNRsbIwhhv3ixM5AuBSAXY+bk57vOAomTc3K/x4B8NrHV21jtLTKZQBE5JKeTcltbkA2Z2bv3pJpEWOcB1S/vXkxkqgV60es9Bz0KFLlPlb9/5otN/+4xeZ0oxCZwsu4y1z3uTUGIpWRMqxClx6xYjUNFWHgu3qETb4eQ2aSGNKBKSxYM2fwGrlUWO7N/ctCRvb5mzcltukNdSbxRRlqHerhBXQIrs/iFcFUE3CP0N5a3xWEtdb2mskS9ITU9XNNXOMHH5adFkySzXeP2dhW3L1ihppGKzLe19juRUIT8+K1FS0exISkmRkLjJQHsHWTLN3tk87EpPYJJSkqUNDQ5DWir3BIatvX1pD6RI77tGVdY45ewbGHDkpAvJ5japWfHlQ31hdAy/a43Z8TfDutZXpNmumobZjGIZpUjfm329s3aeNuTsMXBxk7nmhuaZNQq+/FSkaLursULmQEIIQAACELhbgYB/h4Z+8G5vv0XXb8RDQVtUVNwGAhCAAAQgAIEtFhAIyWOe3JPgvh3Xl25PnoG83caNNbHu0epK/2W6PGl8gRYu8uIbRnSZJnybMOcWJC3tgLzFFfK/nauvoqLfzo3YKgsff/JwoncIzS/F0uPIvIXd7lX62MWyh18jkUy2+pEVWqnmpu2Ql93GlYYsWRJaMrJUx2Mv/89/+zf//qdPFnK7GeMFgV0p4JgY8Wx9TpN9DLgNqYO/HKODnikAtDQhZXE3b//klDLZ4Nmhwmft2l4AACAASURBVD01OLZ6Z+/gOd/tGbK4lC9ywPftIr0yR360xvMuZYdbq7tDKZptcsKzyCEVZUjwBoNWZrn63+sXY/U1q4+EXVQypD1v9Ywk09Eqbgvv3fGiohJiSQCO9JbpkYmFiQwLvZHsW56xtDf59lUogm4Q+hvKUy12pul2L/nVQwkS8vIUFD8uL5+sK8Vz9TQ1hDQPM1Kxma6mTu43niA1NVXKT8hLIb3c1dPdxT2Ewc60dA27ye5CCZkZYkFKaio5x9q66nr83jmR3jeytpztamid93z4qAqOZXJAob/8rz2eFd61vrvYu297t4gXpZVmKGlBckkW93HiJm3X49mbJ8RXpGi7q7FCxEAyCEAAAhC4CwFKkXn8uZ/+9Mc/+97JXG59T88r9IN3ceetv3T1n+9bXwbcEQIQgAAEIACBHSlACYTeGSdkAsmqpSmsTRf+vuszhud22OZXniSBFs/SXhRfKCLPUXNDau6Rhoahg8fIOt2akud+pm9uaB+amLV5thBgpEk6slb3lr/YiduffpX+0iNGCS1Pfej7Pyvu7egYnDDPu2mBWBGjS4h33HzlvGftLNfo0KiTlQsoSc7p589pa+vra9smHGHWiIop+s5PyyQDHZ29wyaz1e7i8cVR6sTM3OxYbpEe52h7OzcqHGIyHp24/2Qht3YIT5P78OH6+gsd6y1Gv+XAuCEEQhBwj7b2mo9Eq8jmxyWFqeVfdQSd+8VONHaNH9PqGFpHUt78cmVKUXzJfs+byT3d1ji+8lMphKKEnmTlw3TzVi5yQLZ1iokmkYMAk13YhVl2ZG+MkG7jHu4YsB7MllJMQmle7O2bw6G8v9ctRii3Druo5NPLNDbhzjHQlDIpTU/3D2yqfdA6rGyUoAk9J/i6wpJYbj00t6Wr1bs9OTnqHm3rnTlCGpFSFe7LvTpUN+2JZm/ha3ktIugGob+hfLWaa2psnTXukfMTijL109FZJPbI2jsr20KresRi1va6fntWqkiYmJOfOpMlo1hnf2O3d/IqO9XV2n8oPlmYkpeaOW/k4iZzPU1t/jGCiO8bUluu6kvzrd/WjeeUahlKklX2+IMT5y+Prlo1LFjOS9eKM8ueODpx/puRcKIdXLau/sbawb0PJjD85Lw9KQ5tPhdMdY8216y7Cc2yQkWMtqMbK5g7jkMAAhCAwKYJ0HF7D+eoufmg0ell+1pbvuol34NDP7hp5dqUjHfNM0GbUntkCgEIQAACEIDAWgJC74wTbgLJ6mSs02adm7POr46pLG0mvxh6IX/jj9364POWafKtiuJHJeY/cPzhxx9//MknHn/y8Ucf3hvLLd+19S/XWPn51z5umOAet6VE0cm5JQ8cOXH86LGyA8W5xtgonY5b6Z17WZpuVpu4KA8tjdtbdrxAxx0Ms0YCvUHDF8ek5JU8+NApru6Pn37kwdJcvYyM3blmOr64cGuUG6ILMRk3D2gRbEP3YljMFf8BgS0RcPXWVvY6uKChKvfR5/atnl+xuM+De7i+vJmb6EYpcx59tnBp+hcpp0hT9MzJIm4jJXa+rapq08buqeiMR//ix3/9n37yp8/lxCzGQFyTJHJASkHHpBWki/zZaMbzIeKaMk1yCShN2t6UZQmCGdvb6usm3NyHTmzRY2eMimV/tTFRepVk9ZXrFmP1JauPhF9UMsOns82z5QcdXXSmOG7LpxQGbpSFqlFyfVqybFm8SqDKe+pUqZaLmzgH6qu5v/Z9L1dPfVU/N32IkqY89PwDqcpVcS5aJCFrrm3CK2AtIugGob+hfJWw9dbWcrO+GMOex0+nkbmXrKWjtiloAHNF1SMWs7a0dpFZHJTQePJIThSJmww2N8/6fq2x5tb6EdL7hRkPnMgnzwewnsTL7hzxfdduuoCtQC5xDVR+dm3c0zPESQ+fe+mZPQlRq/pGkKz9rhUlnnzqpe8UJK3uVzxGHp9aUsatkxbg5TbVlnsmBjGafd85lO7ZK6mnvGEszBhlxGg7s7ECQOEQBCAAAQhsicCyv0MX7hj6wS0p40bdBDNONkoS+UAAAhCAAATuOQFK4F1pi1upa2mUPoRqLi7tRYk8OXgvdo5VvfPPfVklJXuykuM0SqmIT7Eup902P2eZmTFPT05OdPf6VpoP4R4blMQ2cvu9V1qr8koKctISYtVKqYBy2ucs05MTwwNdrYubrs53f/qHNyfLDuxJjVPLZ8YmvE9/h1UjZ2/5p19aMtOS47RKmUQkoHkuh9UyNT7c09Zw+07LqGcdEDKMF1oynrv/1qWqxDMFOsrUeOl6eI+dbpAdsoHAhgi4p6o+uJH2p0dSpJQ88/CL/y6/r7V3cIxMSKMEUll0rD7eXv3qH7zjuLONF79Nj384W0XLs458/99mdzT2jZqd/Ch1Sk5KrIKbbcKaO7+80ORZ/GszXnTCoUN747gn7NR7Dx+saf24xTPm7p5srR8/HEcmwygLXviusra9b2KeFUhjEpKMoubX/rXK5J5orB7b/3Asn4nZ94PvxTa0dfRN+abc8SVJ+kB/kjmHbl5szHwpP5rha/c/9nJKd0N9/8QsK4iKjk83psbLA0Sb1y9GCCYRFJXMKLxZ2V5yMlNGiVMOvvSXaZ0t/WPTNidL8UWSqMT4TZ5RGKRRFupKSROOvPz9osG+zu7xaSsBjEnMSjEoPZtt2UdufFSzbHaS21T5wc20PzmcJCED5MXP/tus4fbe/mHznIOlhRKFRpNgjHVce/O3l4NvHB+CcaAkQWoRSTcI/Q3lLYir/1bj8IEH4hiFWsP15ok7dV2hz4mIWMzaXdswm1UiZ2RSEoJwdLe3L71v2enGtoFHDElCqYwrkbmpqm/lDI+I7xtIf+FYkFbgTjv6L128KD/7WFE0nxLq9h17seDgZN/g4IiZvJF5DF8kU0TH6gyBgynLrtUWPfhCwcHpgaGhUfOc3U0xAkmUUm3QaRUCyj3Cb+68GWirp9n62qaTKYVKSqrkSEhwq6rWEvbnXMRoO7Gx1mpInIMABCAAgc0UcA/XXm0wHMuJoafar97p9z6AEvrBzSzaxucd6Fv6xt8FOUIAAhCAAAQgsAsFXO3v/4+/ez+Sgs/def3/uBPoQttYy7VPWq4FOrXqmKvzk7//T5+sOswLdtyTkjVde/W/hZb/Ys5Oc0/NV+Rn9a38jrjN3Tc+7r6xKk3INXJbBhqukZ9VOSw/EGIyboC48ZNXGwP4rHMDnIbAjhNwjda896r79HcPZ2sElEiZtGdPkl8ZWZNazfC8f5Sx060XX+XZnz++N07IyLWZ+7WZfinto81fvP513YaPafsXxm+o0v/BuvGbl2/mPnkoQUgJlcaSYuPCJaw9Lk7EM1nd49e++CLh7MM5CoYvTygoSihYvxWsrd++9Q79zFO5GiEljjUWxy7mGuxadr1iBLvQ/3gkRWXNzZ++qVa8UKSXUIxCm1GizQjlVhuUxq8h/Kfi+XL3nOXL441745cBumcHy9/65Hr/ykXQnMN33nnVdfq5Q1xvFMjjcnLjcpYVdF5D5gtMrrzsrusSrBbhdwOyumSobyhvqdmxpjttxfpsz3MOjuHqitGlOTgh1CtSMUfP7dbJffu47TpYe09Np8XvXuxUR2PXocQMbp8191hLbaCHAyK971pVCtYK3DUkfvPu+an+stMPZ+skFMWQGaSpMSlr5bZ0bsW1tFCVmKxKXHktS6viDGLeeKDpPvb+qsqJvcc13DwpnttUVdsZymZJK+/AixRtJzbWqsrhAAQgAAEIbJEAa2m7fL7t8vK7hX5wi0q5MbdB4GRjHJELBCAAAQhAAAIQgAAEIBChgG2w7oNfdN0pzN+Tn5wQp4oic79cduvMzOTY+EBb97TfijTO8dZP/mWwriBvb35KkkEllzAu6+zU0EBHfVN19YB5w8ezl1XIPXD9WnXKsT2xlKnu6s0Ov+Fl2/CVV94eLdtXlJegV8tEDEsmlJmGhnuamwd8E9RM1X94rT9vT3GRMdEQrZSTKXdul8Npt1otMxbzlHlqrL/Psx+838s1WfPlr3tbCw7lZ6frtSqpiNR12jTY3tnYIz34dIGObDLlXr5Yz7rFCKV9nBEUlTfXce33v+gpOLwnJ0OvjV6YUTg/PzttJguZjQyO9G7WRKDgjeKpLDtec+HTqbiCNGOyRiUXMW7bzPhob1Nz5Y224QDb0XCX2AZqP/hFZ+XevD35SQlx0VEyIZ9mnfNzMxOm4d7+9pqRsOIKoZCTofCgXYsXfjcgVQj5DeUp3mzzrfYHs3LlFGtrqas3hT2TITIx1wDZuqPgaALDm+9taF4RLZhtre47np4q4rkGK5tGg6xJFdl9g7fIGq3guYidHyr/4tc1lca9WVlZCQa9SikXC2i3w263z1lnpqcnx0xkS7TBrv4ABQ54LcO6HJ4PutHx4d6BzqbOnrFgk33cY7fresqOG4UkuDV0J8zgln+VI0PbeY0VvBlxBgIQgAAEILBhAlRCYhJZF9uYlr4hWc7NTJN8pArlhuSGTCAAAQhAAAL3p8DG/j7d2Nx2e4v8r//xP4RYhf/tv/xdiCmRDAIQCCaQnZFGTjW3dQRLgOORCNBJZT/+0yIV7R776s1Xv1y21lQk2d2T1zCJj/z1k0UKyj16+7e/uDEcZOR9V1cd3WBXNx8KDwEIQAACENhkgdC/h6cak0lZTFPmTS7R+tnHqKJIos6unvWTrplio8ZAAm4+tuadcRICEIAABCAAAQhAAAIQgAAEtkmAijbGR3ELHDnHR8z3YkRgm1x32W3RDXZZg6G4EIAABCAAAQjsNgEs1bXbWgzlhQAEIAABCEDgLgQwj+Qu8HApBCCwhQK0UEjb7avXHhPFFz1cpuXiJvO9rZ0r98zewgLiVlshgG6wFcq4BwQgAAEIQAACEAgggMBJABQcggAEIAABCEAAAhCAAAQgsI0CdMKpF57JtQ32joyNTZtn7U4XJZAp1AlJGZlaGcPt4j10paJ1bhtLiFtvgQC6wRYg4xYQgAAEIAABCEAgoAACJwFZcBACEIAABCAAAQhAAAIQgMB2CVAKfbxMpIwy7tEaV5WBdVsHrl56/8r4JuxSvupmOLCNAugG24iPW0MAAhCAAAQgcL8LIHByv/cA1B8CEIAABCAAAQhAAAIQ2GECrLXz26vizPi4uJiYGLlULODTrHN+bsZkGurqaa5qah+xsTusyCjOxgugG2y8KXKEAAQgAAEIQCCgAEVRLLud3y9JAQIWbBsPInCyjfi4NQQgAAEIQAACEIAABCAAgQAC9vGm2m+bagOcwaFQBFx9n/23f/gslJQ7Og26wY5uHhQOAhCAAAQgcE8IkHgJCVrwGdrh3M7pzKQAhHN7gzcr2pMrEF4QgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQjcVwIuT7xELBJtb629BfAWZntLsnh3BE52SEOgGBCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIACBrROYmZ0lNxMI+BLxtsVOyK1JAUgxvIXZusqveScETtbkwUkIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwL0oYBofd3omnZDohUImEfCZrawluR25qTdmQ4pBCrOVd1/7XtjjZG0fnIUABCAAAQhAAAIQgAAE7kogOyPtrq7HxRCAAAQgAAEIQAACEIDA5giQbUUG+vvjExL4fEbgeW3OfdbJlURNSDG4DVfWSbh1pxE42Tpr3AkCEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgsEMEWB5lt9t7urtj1Bq5XMbNOKG2MHjBsmRTeotl1jQx7na7edQOWh8LgZMd0kVRDAhAAAIQgAAEIAABCNxrAs1tHfdalVAfCEAAAhCAAAQgAAEI3EMCFE2xLh4JWoyPjY6PbXPFSGG2uQR+t99BMZydg4KSQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAATubQGaZqitnGISXJMUgxQm+PmtPoPAyVaL434QgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAgZ0gQPP52x474aIm/J21ONbOKs1O6CgoAwQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEDg/hAgQQsBS5brIruM8Fgey25drbnJLmSiCU3+t3U3De1OCJyE5oRUEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIF7UYBbJ2vnRS+2UXrHRXK20QK3hgAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhA4D4XQODkPu8AqD4EIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAJLAgicoDdAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAZ8AAifoChCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEDAJ4DACboCBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEPAJIHCCrgABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEfAIInKArQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAGfAAIn6AoQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAwCeAwAm6AgQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhDwCSBwgq4AAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABHwCCJygK0AAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABnwACJ+gKEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQMAngMAJugIEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQ8AkgcIKuAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAR8AgicoCtAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAZ8AAifoChCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEDAJ4DACboCBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEPAJIHCCrgABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEfAIInKArQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAGfAAIn6AoQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAwCeAwAm6AgQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhDwCSBwgq4AAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABHwCCJygK0AAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABnwACJ+gKEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQMAngMAJugIEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQ8AkgcIKuAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAR8AgicoCtAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAZ8AHxIQgAAEIAABCEAAAhCAAAQ2QyA7I20zskWeEIAABCAAAQhAAAIQgMA9KdDc1rFD6oUZJzukIVAMCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEtl8AM062vw1QAghAAAIQgAAEIAABCNzDAj0Dg/dw7VA1CEAAAhCAAAQgAAEIQODuBZLjDXefyQbmgBknG4iJrCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACENjdAgic7O72Q+khAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhDYQAEETjYQE1lBAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCCwuwUQONnd7YfSQwACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgsIECCJxsICayggAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAYHcLIHCyu9sPpYcABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQGADBRA42UBMZAUBCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMDuFuDv7uKj9BCAAAQgAAEIQAACEIAABCAQWECQe/anj6fzeazlzvlfXepzBU51/x0V5pz9i0fT+Ky17r1fftK9M1gEWU/97EwmaauZ6jde+brPvYtbhVIUfvdHx5OYZVVwDX77ypuVU+wurheKDgEIQAACEIDAfSWAGSf3VXOjshCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCKwlgBkna+ngHAQgAAEIQAACEAhZQKAvOfvMUaN4qvHTdz5pwFO1IcMhIQQiFWDSHvnxM3nixctZl9Num7NMT44M9XW1tbQOmB2RZn2vXMfOTY4MDjE8dm7avtsf9edHJeYU5WemGDQqmVhAue1zZtPYQGdLXXXLyNxunp/h62zs/OTI8CB5snHObF+v/9HS2Kz8vKxkQ6w6SiYWMjy3wzZnnhwb7G1vqGvpm3Gul8Hmnmdn6t75lybfQ5q09tDzz5RG78BHNu/1HrW5jYzcIQABCEAAAoEFlNHRUSp14HM8Xl9Xe7BTO/A4Aic7sFFQJAhAAAIQgMD2C8Sf+MmPDqnJOMd88wd/f77BunaJmKTTP3vxgIriuSeu/fqXXwx6R7Bo/dGX//SIlmatbRdfeb3avO6gnSDxoZ/80QFyV0fTe//9naadNOIp1JHxuqRYnXqm4q2vOwIOSTHJB49lacgQrmTvsaI7TV8P3QPjeGs3O85CYKcJUAxfJI0iP+q45Nx9DxwdqP3m0rVG0076LNlqMmf3lbe6t/qmm3A/Jjr3occfztOIqMXMabEixkB+UvNLCqs+unCl07LuL5lNKNgGZunsufxmTwj50Yq0B596pDBOvGTB4zFCiUJDfgype/YV3vnkgy87tpfD5bAtLIBGO1w7sGXuhx4VQmdCEghAAAIQgMCGC0xPTpI814idbPgdNy9DBE42zxY5QwACEIAABHaxwFBTi+ngIQ3NExmz0yUNdWtGTpiErCwlN4LjNrU0DC/GCyhFlJw7SknSHjyS3nSxzbYmCKUuObEvxvNMKi2VSSne9M4ZaqGkafuPHUlkeM6Wev+hKv8KsfNzVpZHRrJYt3VufueUfU10nITAPSHATjd8+WX9FEsxAjGJmugT0zNSYqWMPL7ose9qo957/+bw/Rw7uQeaWJRy7MlH86PJlhl2U9vtivrOEbONEik0CblFxXl6iTiu+Oxjs797u3LiPohXM9qSp84UxQl4PMdUZ01lTcfQ+IzVyRNIVTpjzr7SXL1EqNv36Jnp185XmO4Djgh7N3pUhHC4DAIQgAAEdoVAojF9sZzbMsPjnomdIHCyKzo8CgkBCEAAAhDYagH3SHOT6eARDU0JjXnp0rq6ueAlYBKzM6M8cZPxpqaRpYEacZRC6I0y0Ir8Y6W3Oq6OrTGKI8kqO5Qg8KanZPKdFTgJXvmlM+7+y+cvOEtSJFMt1ysnETgJxQxpILAxAqxjeqivZ/EDpuHOtW+js8oePV0YK5IklD12dOQPX3TNb8ytkMvWC1DaomOeqIlz7Pb5t670L8TgJ8aGuts6x849fzxRKDTsK06s+bwn4HzArS/y5t2Rn1xUpCdRE9bS+NmbF1vnFn/XzJgnR3o72ifOvfhggkho2L/fWPNpx7pLfm1eQXdyzuhRO7l1UDYIQAACELg3BO6N2AkCJ/dGb0QtIAABCEAAAhst4B5taBw//KCORE5SctPWipwwCTmZUdxEEfdYQ+PoUmiElik8E064F8XE7S/LqXqvIVj8hY7dfyRbtphcKlv8742u2CbmZxup/+pi/SbeAFlDAAIhCjgmW75+zyX83rm8KFqZ+2BBdU/5+KrArUidvqcoJzVJr1ZKRXyeyz5vmRwf6m6tv9PYP7OwztDiDZnUR/78qVwxz9l68Z/fb1k5QM+knPqzc3kSytn2yf/7XtPSeLUg6/GfP5bBdw9/+9s3bpoEmsyi/Xszk2NVMgHPMTc90tdeXXG7eXzDxreFOWf/4tG0AH/jsZY75391qW9VrRaqR4k0GXv35qbG62OipCIBTTYQmTEN93XUVdW0mZYXj1Lt/+73jxnIthqjV37/2o3xwGFiSnPwBy89oKN5zsFvX31zWTA5jHtxxaM16RkaEjZhrS03bi1GTXwFd05UV7YfTMiVUFJDnIrqWVkaWp5YuH9fvtGgVogY17zZNNLTUl1e3bUUcAixR62ZLLK+QbKU5p/72akUUjn/FztT/cYrX/et6q9cGkqlj+WW6GJnO+o6VlfCOV5d3lgUv1domROryK4ifo8yeO9A9kbJLNiTmZYQG6OQChm3wzpjGh3oaK5dY5+YMNtrTan1T/IVnp1sjAZttJzsZOOyzU6PD/e3N9XUdEzYAve19TNdnuKuelS4N0N6CEAAAhCAwH0rYJ6akiqi+Ax54mO3vgJ8qd6tVUG5IQABCEAAAhDYSAH3aGPjcJnOQPOEyTmZsrrq2cC58xOzszzzTVzDjQ3+Y1beaSNkfIclQx0UJcksK9Y1XfGLrPjlJ8l6oFTHcINBJDFFUSIZGVXkBR3iC1wSHIUABCDgJ2DtuHarO/OkUcDocnP0FVd8uy95UzAxex996uFMpWfMmnU7nQ6WFshUevKTnF20986F97/tnN2AYVq30+UZABcIhFGZp556PD9m8Q8wkVydlKNOSkvRvnv+yuCGxU4i6AMCbeHZp46mKfy276ZF8ui4dPKTm1f/6TuftM4sWbBTjQ19hwwpQlqTmx1bfnVpfUa/WzNxuTlaLj97d22z/xS88O7laR3bQM3la3K5xNaxMmzCnXZZZkhDSShKe9R5bgAAIABJREFUIOTmLPq3GV9bdO7po0ZfHN7tcPKjdCkFsclZ6Tc/aNiAxo2A+m4voWjG20pcjw2UmbPv8u/+6at5e4Dfn7Qi/cjjZ/bp/fZGoUWy6Dgj+ckrLqz6+MLVDsvKcE347RWoVCEeY5TZJ86e3qMRetK7nXa7mxEp1AnkJyO/uOv6+x/fHvJb83MhXhVC7qy17r1fftLtVYm8R4VwJySBAAQgAAEIQIATIH/Ta+PiSdSEZd0U5fclc1fxIHCyq5oLhYUABCAAAQhsoQA70VQ/eCQugaEEyXkZ8upqS6Cb85NyMhXcYJVroKHJ5D+Ow0hlnuEZV091naKgUM3ElhzMuv1h0+rtUmht6aEssjYXa+2o7IjZlx9NUVJura5QNwqh5fG5+wpys1L00QoJ32W1TI50tTVV32noW/3QOI8niknJSE2Ij9PrY9UxUXKJWMin3HbrzOTIQGdLfVVtx8QaA5j8rGf+5j884wfBzlT97h8+7eJGY5jUR//8pWI55R6/8uq/fhVgb/jwyinWpmenxcfF6nSaaFWUXCoS8hmKJY8HT472dTRU3KrrWzXCRQoh1GSWlu7NTjGooyQi8tD4/NzM5MTwQHddRXnblKd5qKic00+fKdDRE02fvXOxFovgB+rWOHZvCLCWjub+Y0Yjn1ImJqmowaVPKEq975GTJGriNrff+OZaQ++ohRuFpkXKuLSiY0cL42OLHjsx8qsLzUHixeHweELHPEqoKzm9L104WPn5tdqukRkHXxGbUXrseL5WKIzdf6yw8fVbEwHHwcO5FUlrb/n4HzuXTWCQ5D7+8vGkFXMaluXK6B848yAXNXFONl/75nrzgGnWwRPKSYjh2InSJGl03skTfYMf1vntNW5pq+8oS86R0DHZOfE3h/tWTr/h8fgJezw7X7Gz7bXtforh34vkYe6tregNCsFXquSeOY/mab/oDjnA6A48coSLmrCzPeVfflHVNTHvpgSKuMziEw/uP106uxP+gp9r/Ogf2hYKQolzH/vBw8lrtRXPPTM57eapaSrKmBtfPti3eusw1j4f8HeYMKHsqbPFGj7PbRmovVHR2D06PedkpCp92t6Dh/J0ErJPzFOuN9+8Nui/H1Ak7RW0pdY7IUo68tRje2IY1j7aeP1yRVOvad5F3jlRhqzisqOFBoWx7OlH5n57oXF5M6+Xa4DzkfaoAFnhEAQgAAEIQAACAQS8URORSOx0OcYGB8lKFLt0r3gETgK0Lg5BAAIQgAAEIMAJkMeK6/uOx6cISOQkN0NRcyfAaIUgKS+TG7NiXX11Tct2c6ckEoln6S2nuf1yjTT7bJZEmlO270bLtZU7nYgzHijVk5iAa+T2t7fsp4ryo3mUWMpdHMI4IhOT/8i5x4o8a5d4XwLynDT5SSs6sL/ms/cv1o4vH9Nj4g+cfZqEN5a1MSMio0dG8pN34HD39Y8ufNMxs/Kx22Xpw/9H+OU0lJw5u7KcJDAiVcWmkJ+8wr1Xzr/9Ta//vg2MuuCJFx/NjV76fseIZUryozUozQ23vIETOmH/qX0Grv6x+acONTZ+1LF6zDP86uEKCOxMgfmR4Sm3UUPT0Vo1wzMtdHYqJjNTxyex2tbLH5Uv7QPhtk0PNH7zAa364we184rYWFFz5+px6bAr6g2cKNIy+J1fvvFe7ZT3oXf7ZH/NpQt81fcfSuAzurR0VcXEhmyN5HbabMve04xjnQ8zfkJ+fgy3EtZk7aWPKwd8F9stw63XPmRi/uR0ulicnJ+hqL9jXvpEnu+qa7VkFygoRUZ+4tW+Lv+xdg5IZCS/GbjP8Knmui6/YfxI7rU2OKXML0wVkzTOofbuZVOEhClFRVquXtO1n71/vcfbkqxjZrDhm7ct9A+eLtgJgROe22Fb6mO0c522IvW0djR2zBqzZHRM0ZPPicuv32roHp0LML1kBRutKz5ZRKIm7HzP5TferzYtXGEb7rg93D9qf/65fTECXdGDefVvVi/9Kt/49gremrR234kC0hHdE3c+fOObvoXfbazdPFD39bsm5/PPl2pkaYceSGr7vMfX31y9V37zq/LQ2pG1WdZX4koXvEcFLzvOQAACEIAABCCwJLAiakJmye7e/U4QOEHPhgAEIAABCEAgmAA73VTXdSIlU8jjJ+VmR1VXLIuMcFeRiIpndIxn76pv8htVI0d8sQ8yNDlnnWm8UXk447CG0ReXplZ83O7/OCwVU3SQ292EtbZduz1sSfdOM5F4AifrvShF3hMvnMtT0uRyl2WorbVzxMw9yG3MzIxT8EW6gsdfELK/PV+3qtwkY9Yx1d/ZPTJlmXeQh5AlSl1KarJGSjOKlLLnXpS/8/sLrX7PVy8WxD1Y/tGtfr/hF9ZhCrz6mH/Z76qc9onu1q7RmTm7k+XxxVFaMl9GJ6VpaeKRc6dGfvlh08K2MZS65MnTXNSEdc8ONdc39ozN2Fi+RKGOTTAmzPWvDFetZ4vzELgXBNwzM+SNrCGzD8hKTxRvIfhLSWRkThuZD2cPsKKRpf79X2zCXkWu4dtf1fmiJj5a1tzaOnQsIZGhVWqyH8VkaAO7G90ursHrr/22VioRu6aGVoRRrX29o+70JIZWa2NontmvfM7ehmbTnlI1LU3PTRF3tfmHcHk8WUaekfsId4/V1w/51yqie61RYb62+NSRBLKwo3uy7ubyT/r/v737Dm7ryhN8j3uRGACCmWAAKeYoMSlLji1LtmTZcujgDtPd0zMddt/88faP3ffmbe3Wbm3tP6/e1u7s1O7UTE/PuHum7Wm3oyy33bItW5mkAsUkUcw550wCuO8ApEgQAKNIEaS+KFbZvLj3nN/5nCsSPL97zlHHJiU4Y+irLHOflzHVfKu0c/fT0asbcl+m/q14a+L+hXPm4JcLo/S68KwnXso6Mj3c097c0tLc3NzU1jPifQEvdVxOtiOLZB8ovVI2nzV5EP5Uy62Su+bdxumJMa1Boxqaz4NtdH8t46WOzclyRDjdcL1oPmsyf/5M242bDXknUrSGtAzLhab6uQit40ODS+2ctkxdy7y1zB21zFW8hQACCCCAAAJzAp5Zk9k3tmnuhMQJdzYCCCCAAAIILC0wVnOnZiJVbHisjstON90onl3saf58XVJWsmP1eGWyrrzGbU0baS734UicKLb+kqLGfSeT9MasgzmX6m4tzF3RWAr3xWkkMbgltrQVjwuPTzjyA5I2wH/lTU4M2c+94Mya2Edrz7/94fXOBw/uXrgQWXj6eyfSg2Rj5vETeU3vuD4qPRe9MlT+x/cXLailj9jz3JlTuRE6dWjeqeP17e9VeC5OZh9pvVtV4f509dKAznceLs7hqi8/do1T8rc888a3j8boZEPm4dzL967NLj8kHqHPjBFmirX58zffdO+phQjtrSWflyaczI2Q+6s+v9bAdJMVOo+3t7nAzPTsQLKk0brsS6mMDIpJZUZ1YMaRpxqHL9cOel3baEObbu9taPCYUqKMj4yKf4NqlUanE4P4W5M4UWbGB/vGB721VpmadKayJa3W/c9Ge1dVZXfBk2a1f2JWSkBNhcvwtRSUtjvesUvFTGtF5aIFHEXCej11eQtNHNOE5jz/2tE4vaSa6b7xyZWWRZ0oBUVGOOctTna2eS5IqAy3tg0rYjP5JYr27cMTjRd/949NuQfFqoyWYL2sC4ralSO+9oppN2NdTffLS2+XNy0kPxxtkcMSLM7f1WPNDd5S/cpw1bm3qzxbvaH95Vm8yxEp2BLreArD3t/RsTgLN3fSZFtLjy0lRu1nNofK9R6b3i9b+GrfXPaOWm0hnIcAAggggMBjLRBgMM6v0CXmmrhazOZOtpeO+yfg7RU90SKAAAIIIIDAJgtM1pRVj2blGR2Zk4yQkuuLBsH8knJSHY9tK+P379S6b10ilurSO4JTJqemFLFIfUVR+dHEvSZd4r4Cc+nXD3YACcw8sFuMXSkzzUU328WooTw9KbIffiqRdhGLby27yYkUWXgozVn9UOnHHy1kTRyVTnffPPt+eMQP9oXK/kmHC813LnjZcsSdbqqn7Ny/qPx/fCY9UApIO1oQWXXR2wiT+2Urfb/RcSoTLZculO/5bqFJUpsT4wOu9TtTVuIR+tlJOtP9fV7WVFuIUhmqPPf3ledWCpv3EdgSAU1wfKJzwNvtpUx0NbQOrj3RJ556my1pdquRuVLFbLob1XtfzArSmfe+9KPdQ53NTc3Nra3NLe09Y2uvwz1Wr9/bR4a9TWKz2e0iMyE59s/0etkjO6gxxqSmJcWbw4KNAXqNWiSkHS9Jb1pqxw1loLKi7ZA5XquLz041Vt6Z/7EjhWVmxYq/MkVCvax68UTEudasuS4vCvrovadeeSJBjLVb+yvOfXC1zS33JRuCnLMhlZGhYS/rXyliQxS7Knipxnmp0LcOWYeabn7WdPOLwAjLrl274i0JlpgIg1bSBEYl50cl795be/mjT293zpuog8OCnPvADPR7ZO9WbthG9NdKtcjBISZHhLL56J/9n0eXOVs2moIkVdcyZ6zzrZXuqHUWy2UIIIAAAghsooAlMWXF0pc6p6WhdsVr13HC2MiwLMsTY2NuWZPZorZd7oTEyTruAS5BAAEEEEDgMRKYaSyrGMg9FCqpo7N3RxR93b2wyn1ASk6KY2sRZaiqvN7jgW0/fz/H0JsiHll2TgSZaSy60ZH3bIwmPPdAStEH9x3PlErhuQcdRSgjVcVls7NZpqamHcOIs/NV3Ca4LGKXwtMyIhw12LpKr9d5PqE63VR8u63gG2IRnND09KivO1aRORHRDldcvH0k9WikLIenp4Vf6nZp7jo7fTPinGltbJkuNOlVcki4WEBnzDEsqAyLLYOVEFnyTz9QGNVS3OXRI+tsAJch8AgFpMCkoyefivMcz7a1fv6r37vMVVttTHo/nTMFoEw7MrgLr7Haz986O3r86fxdJq3YEj51j/g6IJ7YH+1urqmuLC2v61k2b7va6l3Os9u2ZkLJKkL1i9v//IsHE4PW9qehMnK/ov6oJd1PE5eZFlx2c25EXo7Kzgp3bHw1ev9OvedP5vXVtbgRmpCsZ188nhOuUylTnbfOfnSp3ktOSqfTOhMnMzPepgg6Dq9iE61V4G3pKdaxnoZK8VUipi35h8Ump+/el58aodcEpzz12vOTvz57dy6dpffTO5clU2acv2HX8NqI/lpNdRqd3vNfvdcLZa1WnLmx/5hWdUd5jYaDCCCAAAIIIOAuMDLkdSaz+2nb4vu1fTreFk0iSAQQQAABBBDYSAFb+52K7gNPRslyRE6O+dLColGGjN2JYo0UschWeVmLx0PakhiocY5Xip1vZx/3VXrvFFcfejk7wJC5L/tCzc0hRbtrb75ZLfbk6L5ZNLcHsyPN4lwZxm/u8iWboosyhzmHxUZbWvq8jQQpQy3Ng3ZLmCyFmM1+qo7VLYRu72lsGDkSaZLkMHOUTtX90FtDb0qctqEB8bS0XmRJ/B88my+WWim6czC+IEQOSDr2k5+llpXcvF1Z2zbi0TNLivIGAjtPQA4Kdj5pL3aYHnb7x2wbqrvyTv2NkNhdKUmJiQmW2HDHE/uGyKT8yKTcwtaicx9fanGfSLfzgMQPW9PuF149ssuRwZ7oKL1WXN7Q0T86OW1z/lTVpp/5xcm0pf5knKwvrx1LyzGozZlZ4bevODdS0sRlZwULcnt/VYXHL4aHqOsBvRQQf/T0yYOx4ieftf/ehQ/PV/R4S4w4Tnf+BlrqpZbnJtUsdcJ2O26b6GuuuNp8tyrj5OsnMoPkwKQDhebqr9wfGVgWxb3NG9Bf7kUu9f2DGWG25i//9r1yt5U/F12kKI5JWrMvTYDJ4FjkbhUvsTn80Li334druKNWUQ2nIIAAAggggMBOEljqU/BOaiNtQQABBBBAAIGHEbB3l5W1HH4uQSOHZuVYvu5ocj7pKQVn7ElwPNBr7Si70+m5Esp84kSsvfVgkGO8+npZf+bBMF1CQaH59pfD6QdyHGtzTNaV3HywJpbjsXBn8Tr/2bzLUpFLAYEBznEvZdTrAjjz74SJ6SsBBrGk17i37Ipn8WJhF5GTMKnnrlr0kLrn2Sse2Zw4FbFxg5NJo1n4MDdR9+lbZ5VXjheY/bWmhMJjCQXPTvTUlpcUF5c2DnsbL1oxeE5A4FELKEO3fvs/bm1YrZIxxmx0/Jyw93b1ev6YEj8/pgZaq0vEl3hi3y/YHJeQkrknNyXcLyDu4OkTQ7/5sGzZde8WxblNR+LlyNzCeMfUQWvX1fd+f6Vr8Y8KafnswkxTRfVgdmGIHJaZGXW9R+wDr0/MTnUskWXtLKv0WOrwoepyYKtDMp8/cyw7RCM2tqq/8vHHJd63w3D2i3NKiU6SdDrHdivuL0nMiVxTDsG9gDV9/wjvDdvgvS+LslIdv7GD4mKMUseQ4zef2KtG3P5qsfSaXjR7tZNOHrq/1oBkm5wU/aURs0399Ip9lf/s1PFP/PBMlt9qqlEmyt//uz80uk9UWcsdtZpqOAcBBBBAAIHHTkCsNxtoMI6ODO/IlpM42ZHdSqMQQAABBBDYSAFlsOpW3RPx6X6yKWPPrq+a6sSYvSSSKI7ldJTpxtsV3iZ8iPEZZ+ZDmZ4d4ncGZGu7cbO58PgubXj+3pTqvr3JYhcUZaii+O7CLuwP1k+RxQo7YvBtNe1YevRrfbsGPNhsYH1XLx3xRsYpnrn1UpG1v/Lcr+pK0nL3FebnJIb6yf6RaftPpeYfuvflO2dvLqx37+VSDiGwAwWk4NQMMalN/OjpbmwaWyF1apscbKsVX+Wl2ae+fzwl0C8+J9VYfstlkw5F7NbkmMcgq0WZbj+cJH+DYVv+ZeUfZXbuLWFrr7zT7f4TVzYFO2aPLP2ydVRW9OQ/ESmHpGXEXulo1iXmJDlmwU01l1d5LrX4cHVpwva89NozKQZZme669YezF+pEinvpl31sRPR4oCQZg4yyqtdjwDw41LT0j+Sli13qnUd0b2gMUfEJMZFRIRN3v74j8lReX5PDwyI1InIQOufETcd9bxvsFzu9hMlycFiIrBpe4kL30h6uv9xLW/57+2CfuGH8JTk4KlKv6vVc4235y9f17truqHVVwUUIIIAAAghsqsBS+5S47muy1DlrDcwUEuK5Q4n4wzkiOtbxYIYs76QVuuZxtuXH+7V2LecjgAACCCCAwMMJjN27fX8sbY9BMmTmpX5eVzUhR+fnmtViaZfxmlv3FrIeLrU41tpyfmt1XUleGawoqj6SkBMYmH389SmjRlLZOm4XN7qstGKbmRFjOhrHWl3iwdilZ4ko42PjYr0OMTHEaBTPNy/atH4uDMlgDHSOjIlzJ1YYM12IXAo0OnacF5uzTLhetXD92gbbNi3OhYgX/58y2V1ddK66+PPQpLyDh4/kWoxqbWjG8Temh//mbM3jsPDQUjAcf+wEpMCMIwXRjrzJdHNltdue2LLeGBokDfcMe2wGZB+qvtv8TEqmbnZSwkLiRGyLIU72U8mBgeJnhNtkNP+EXZGr3KNh7R2hDo5Ljnb+NLOPdtS0edvsfO2Fzl4hqdWzfxDaF/3Am31THZWeGrZs4kSliBW52g89G6cxJiZHXewxpcY70uHjNWINL4+QHqYuOSjj5KvOrMlE88X3Py7qXGkVRWWop3daifST9NFxYXKD2+wXjTnJspoZJ6uVf1T3hjp274lT6X4qZcy/+d65Wq8IkiEsdPaxBfFbcu43l72/uXX8YJhBCoxPilI3tbtnTiRj3rd/9JRFo5ppOP+3H1TNLmz5MP3l0fkrHVCGm5sH7NFhstaSmRxYVelx+0iBlox4dU9TS+/4fPS2+s/+6r99tlLR3t9f8x3lvRiOIoAAAggg8LgIBAWHiaa65k7msyZW24zYDX5HQiz/QXhHNplGIYAAAggggMCaBaYbSssd446SX0pejknS7srbIzYlF7NFKktrvD8ZqtWLHThEPWJRqUUPMU/WlJT128UaU0HBYhxQmaotudOzKKkhznd8L+lXWKtrurvTOdNFDATFh3tLZkgmS4LzYWn7YGfnqjMGkikmNsgZ+FB3z/yQqmK1zrZC0mrX+NjJJsW5UhcqU/11RZ/85n/9+mKzGOAV6aWs/PSAlS7ifQR2jIDamPLUy8dTHdkGa8/ty1WL1v4JzH75L/7Vn/3pd46Ln2aeLRZP5Yc6/pnbBgcWpSiUoYFBxxwHOTwh3rn+18LLf9fBQ4mzqWLP8h7+iD7hwPOnT50UX6f2xWkfvjyXEpTJsTHnOLRa7AazuFHayMJnc02zk9skzVI/+ZSh+xUNYgBfMu7aFZ2YbHFOI7xX1uiRkBLH112XJnL/qWMZYubITNf1D8+unDVxNMja1tjqCEIOzc7f5b8ITR26+0C2W2u9q65W/lHdG1MNlTWOW1kKzHz6WI5YsszjpQ7OfLowZnaaVf3CNCtra0Vln7h7peA9h3PD3FN8+rjC3DitLEkzzTVN89uBrb+/PKJaxQF7V1Vlu+MhCl3SoSfSHMu9ub4kQ/LRkyee/9af/Omru93fW0XhHqes547yKIQDCCCAAAIIPGYCInci5p3MNto1a9LT3m61LrXp3PY2InGyvfuP6BFAAAEEEHhEAra2W3c6xW7Bkia+IDc+syBDDF0o9p47pR67/84GJOn0c+vKP1h760GgtvbbJa3O3IhIaQxXFt9d/HCKImaoON/T6ZcfhlR671f3OvaIVUfmHkz2XORcl7C/wDl6ZO+vvu9lE5YH8Sz+ryYmPzfG8flIGa6r71pYCGZqbNy5V7IUHLb8yjUexW5OnB7VLHFgsq3oeq1jQXtJbQpxbpI999rodciWqJ/DCDwSAUlrirYkxMcnxCckpWYVHjn+7R/98NWCKPHcvTLe9NUfijoWr0E11nC3QcxC01qePPP83qRIo35uIFnWB5lT9p0+vT9KVikj1aX1i9LCymhzQ48jyaC1HH7p6SxLSKBeq/M3RaXuO/nGi5mTd6udm6Nvt9d0W/1sfsGc90Rm8NxIvBwQnfXUN187oK+4fHvA0Sp1REz0Uhmb8bryWjGzQQ5LPpQfL37u27srK9rcpzQ4WdZZlxye/+whR/X2/sqiylE/U1CQ168gw4OOdNY2UXe7wpHpkoKyTrz2THZciL9Oow0Ijsk68vK3njT3NLbNzdfwkjtbcyeu696QNOLXnOvLT6eZ+yGtdntHJyZ4zhI2XfviniOfJwelvfC977/+7L6cZEtMZERkpNmSlLn3ydM//N7xdEdaz9pbernUZZqVrevmF6X9olv08U985/Vn8ndFBPmL7V/8g83J+068/mq+eBRCmWotunjP5TfyevtLPDex+KWdDV+S3NuldfmlpAzc+bLEsaKkFJR56punDiaHB4pJqWLvoZDY7KNnvncySywpZ+sru149uuhZizX3lbhgnXfUeqriGgQQQAABBHaWwGzu5DHJmoiu8/KUys7qUFqDAAIIIIAAAhsioPTeuVl3+MU0vRxZ+NIxxzJaqunGW7c8dv99UJlW59g5Xix4NbeN+UIQymDZjZonLZkBYnyt9KbrMl3Oc2YTLWJ1dr1u+fEse/eNqzV7X04PlEy5L77U/faH1xcWb9FFFZ4+I3Ysdjzj3HD1ZoeX8UwpMC4lztjdPLIwwKcN2/38qwciHEuQWTtu3Gp1Gfqz9vaIeTJmtRySlbfrcrvLeKqslu02L+XPN/gh41x97+kDA21jY26bFMimsLmx0Omp2R2BJVP2yddP5UbI/Xc//d3ZUtEsXghsdwFxVx97Ndu9FWLduoovPvmq0jFcvPg1fv/8J5FBL+6NCct49kzGsyILbLPZFFmjmdsL3Tpcf/Hs14vzJuKnSX/ppTvZrxSEa/xi8k+8kT9fpnXg7vlzxQEnM9LFqK94bt+9Op/+fuzulaKc2KMWvTHj+R/E7+8dnNYagoOD/FRD979453K1QVNYGGaUgnaf+aG5Z6Tpyu8ve2ywPd1YWT2clW+KiIsVLZ1pKavytnaiA2FddcmR2TlRzqyNHJr30p/lLampDNz45zcvtc//SJtpvfxZSfSZ/TF60V/Hv7vQX/aRmvOfVcR8JyFWL/7u35DuWse9Icc+/cPXC9zmLjkbJxl3v/aL3S7ttHdd+adfFznnWCpj98+/e2765HN7ovx0IUl5R5M8QexjLTfPf3zFmRBbeE01XfzgY/WLz++JDIzNe+7VvOcWvWsfbb5+9tzNxZvBrKu/9Omnf/Z8irdhBjn6yI/+1RGXaq33z/3vD6rnf2lZO4s++lB3+sXCaP+Q1CdfTn1SfIJQ5jtImewq+/Ts5RYvc5kWtWTlb9Z9R61cNGcggAACCCCw8wVE7iTAGKRRa8UKXTt4rslsR3r7RLPzu5gWIoAAAggggMDaBUbvFVc+lVJglAONRnG1Mnb3RqXLvsmLC5S0utkZJ2ICicfI/MTds3/V8JlaZZ+ZmnR/88HSXo5nccVT4B4Dnq7VjFae/zQ1+pWsINmQcvzHP99Te7++a8SqMUQmpqWaDeJZVUUZrf7jZ6VD3p5PlfwTn/r+XxR0NtQ3dw1O2nWGCEtKamyQI92jTLdf+ay41zU0pffeva4nzDFqKST/1T8PrqpqHphUtIGh0clJurLf/NOVpcYJneE+VJyr7SgpNP/1nx/1b6urb+7sH56Ytqk0fkFhlrSsjCjHw77W7tpa59PHsmX/sbwox/bN4VnPHamoOFvnvh/0amvkPAR8UUCxTU+MDvV2tdZVV1bU9iy1vdFE8+W3ft2QnZudajFHhgQF+Gk0dtv0+PBgb1dz3d07FQ393tYbmGq5+Nbv+g7uy06ODTf5ayXrxFBve11lybXyzgn/3bNXOBe18rr5hC9yiZisPTfefXv4wMG8dEuEKSQycnp8sLvmWuWtG3e7hF7/1c8uG54uiA/Ri9TspOTth6kubhnpAAAgAElEQVTK2l5Z2Zd7OHw2VV1+b9G6aItava66RHZ6ncmNqbar//LbzsJ9eZkJ5lCDTrJODve111XdLCprG48KFyPwgSqN5sFkjofsnkd3b1gH737xVmNZcnZWalJcVLjJGKAXM1Vs05NjwwO9HS2N96ruNgx4Sy+I7Xu+eLutKj13d1pSbGSo0V+ITIyP9LU31lRXltf1ue3bsyH3xtpUlbGGi7/7+/vp+XsykuMcEYp/Y1Njw33dbfXV5Xequ8bcPzGsrfgHZ6//jlpffVyFAAIIIIDADhMQWRNFrD6xc1fomu8vKc4SLx7kSExO2ZAuHB8ZEuUEGE0bUhqFIIAAAggg8HgKbOzv0w0sTY564qc/eUIsYiNe9r5rv/rbC97XYxFvywkv/B/f3R8kKSO3fvPXnzYsm/9Y1MuS6cAPfv58vFpla/j4f7510+vG864XaEJ3n3jlVJ5jTR63lzLdU/bZ++fu9C4e/1QnvfCvv19oEON/jgWsPK8Sz+pe++h3XzWMuQ8Q6uKe+u73j8a4V6TMVH/012+Xi01UHpRs7730D7/80m2Wy7rj9FqaFHrkRz89FiurrHff+X/fr3Lw6rJe/YvXs9yjmzWxjdSdf/u9oi6HhGw59hd/sj/Y0XBlrPRf/vvH9SRO3G8dvt84gYzUZFFYU1v7xhVJSWsSkAy5r/3sGxa1MnzznX/4onVjBp7XFAEnI4AAAggggAACCDxKAUviwjh/S0PthlTtWuZsgcODfa57xW9ILQmxMaKcezV1D1naRo2BMOPkITuCyxFAAAEEEHiMBMTSWiWNB04l6STF2nLzdvsy6RBJO7vSlmOlLvcMxLJi80t7SXpnCStdbO0vP/ePjWXZhbmZaQnmEKOfxjY5OtDVWHuv9FZF0/DSSQGlt/iDL/ticrLEI7shYml8+9RIX0fj/dIbNys7xr0NLk63fv3bX3bvP1qQscscavST7TOTI/1drQ01d1q9PZru1sp1x7mslsub1uaiT78YTUtOiI4wBfrrxdLxtpmJ0cHezqaayhu3q7sn5yTtrcXnb1lO5kZK/VXnrzYuDbTaijkPAQR8WEAdHuFYtFBs9jLqkQ324bAJDQEEEEAAAQQQQMCnBcSaXSK+Dc+d+FSbmXHiU91BMAgggAACCDgENur5iFnNjS1t+/fQsvNCtn/zaAECPiXAjJOt7Q5NWMHr33kyXi/ZB2781nX/j60Ni9oRQAABBBBAAAEEtpWA54yT2fA3dt4JM0621U1BsAgggAACCCCAAAIIIICAzwvIEVlHUv2H+gaGRsYmZuyyzhAel1ZQkGkWC/gpk4037rgtH+jzDSJABBBAAAEEEEAAAV8X2NnzTliqy9fvP+JDAAEEEEBgSwT+47//y3XX+5/+y39d97VciAACCCCwDgEpMC7vQLa/x75NImvSfuOTTyqGV1r3cB11cgkCCCCAAAIIIIDAYyGwUXulbC8sEifbq7+IFgEEEEAAAQQQQAABBBBwF7D319wo18VHhgYF+gf4++lksd3TYHdb472y0oq20WV2pHIviO8RQAABBBBAAAEEEEBApSJxwl2AAAIIIIAAAl4EmDXiBYVDCCCAgK8KKMMN1z5vuOar4REXAggggAACCCCAAALbS0DeXuESLQIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCweQLMONk8W0pGAAEEEEAAAR8UsNX/4a/+8x98MDBCQgABBBBAAAEEEEAAAQQQQAABnxBgxolPdANBIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAgC8IkDjxhV4gBgQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEPAJARInPtENBIEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAK+IEDixBd6gRgQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEDAJwRInPhENxAEAggggAACCCCAAAIIIIAAAggggAACCCCAAAII+IKAxheCIAYEEEAAAQQQQAABBBDYqQIJsTE7tWm0CwEEEEAAAQQQQAABBHakADNOdmS30igEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBYjwAzTtajxjUIIIAAAggggAACCCCwosC9mroVz+EEBBBAAAEEEEAAAQQQQMDXBJhx4ms9QjwIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCwZQIkTraMnooRQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEDA1wRInPhajxAPAggggAACCCCAAAII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&quot; width=&quot;640&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
I tested this on my laptop running Ubuntu 18.x. &lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/7571594146484906732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2019/09/java-swing-ui-looks-tiny.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/7571594146484906732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/7571594146484906732'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2019/09/java-swing-ui-looks-tiny.html' title='Java Swing UI Looks Tiny'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-6201479826680084503</id><published>2019-09-11T15:59:00.000-07:00</published><updated>2019-09-11T15:59:52.747-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="protoc"/><category scheme="http://www.blogger.com/atom/ns#" term="protoc-2.5.0"/><category scheme="http://www.blogger.com/atom/ns#" term="protocolbuf"/><title type='text'>Install protoc 2.5.0 on Ubuntu 18.x</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;code&gt;sudo apt-get install build-essential&lt;br /&gt;mkdir /tmp/protobuf_install&lt;br /&gt;cd /tmp/protobuf_install&lt;br /&gt;wget https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz &lt;br /&gt;tar xzvf protobuf-2.5.0.tar.gz&lt;br /&gt;cd&amp;nbsp; protobuf-2.5.0&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make check&lt;br /&gt;sudo make install&lt;br /&gt;sudo ldconfig&lt;br /&gt;protoc --version&lt;/code&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/6201479826680084503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2019/09/install-protoc-250-on-ubuntu-18x.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/6201479826680084503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/6201479826680084503'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2019/09/install-protoc-250-on-ubuntu-18x.html' title='Install protoc 2.5.0 on Ubuntu 18.x'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-4972452820078834900</id><published>2019-08-16T13:31:00.002-07:00</published><updated>2019-09-16T12:08:39.077-07:00</updated><title type='text'>Docker Cheatsheet</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Command to list the running containers:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
docker ps &lt;/blockquote&gt;
Command to check the logs from the host server:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
docker logs &amp;lt;container name&amp;gt; &lt;/blockquote&gt;
&amp;nbsp;Command to ssh into a running docker container:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
docker exec -it &amp;lt;container name&amp;gt; /bin/bash&lt;/blockquote&gt;
Command to stop a running container: (get the container id using above command)&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
docker stop &amp;lt;container_id&amp;gt; &lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/4972452820078834900/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2019/08/docker-cheatsheet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/4972452820078834900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/4972452820078834900'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2019/08/docker-cheatsheet.html' title='Docker Cheatsheet'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-6393640155930509144</id><published>2018-12-14T12:57:00.005-08:00</published><updated>2018-12-14T12:57:29.135-08:00</updated><title type='text'>Linux - Connect to SFTP Sever</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
sftp -oPort=&amp;lt;port if different than default&amp;gt; user@host:/&lt;/blockquote&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/6393640155930509144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2018/12/linux-connect-to-sftp-sever.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/6393640155930509144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/6393640155930509144'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2018/12/linux-connect-to-sftp-sever.html' title='Linux - Connect to SFTP Sever'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-4758019131705699363</id><published>2018-11-16T06:18:00.000-08:00</published><updated>2018-11-16T06:18:32.923-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="insert"/><category scheme="http://www.blogger.com/atom/ns#" term="insert mode"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><category scheme="http://www.blogger.com/atom/ns#" term="overtype"/><category scheme="http://www.blogger.com/atom/ns#" term="overtype mode"/><category scheme="http://www.blogger.com/atom/ns#" term="slack"/><title type='text'>Slack App for Mac stuck in overtype mode instead of usual insert mode</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span style=&quot;background-color: white; color: #242729; font-family: Arial, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, sans-serif; font-size: 15px;&quot;&gt;Use&amp;nbsp;&lt;/span&gt;&lt;kbd style=&quot;background-color: #e1e3e5; border-radius: 3px; border: 1px solid rgb(173, 179, 185); box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset; box-sizing: inherit; color: #242729; display: inline-block; font-family: Arial, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, sans-serif; font-size: 11px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.4; margin: 0px 0.1em; padding: 0.1em 0.6em; text-shadow: rgb(255, 255, 255) 0px 1px 0px; vertical-align: baseline; white-space: nowrap;&quot;&gt;⌘&lt;/kbd&gt;&lt;span style=&quot;background-color: white; color: #242729; font-family: Arial, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, sans-serif; font-size: 15px;&quot;&gt;+&lt;/span&gt;&lt;kbd style=&quot;background-color: #e1e3e5; border-radius: 3px; border: 1px solid rgb(173, 179, 185); box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset; box-sizing: inherit; color: #242729; display: inline-block; font-family: Arial, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, sans-serif; font-size: 11px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.4; margin: 0px 0.1em; padding: 0.1em 0.6em; text-shadow: rgb(255, 255, 255) 0px 1px 0px; vertical-align: baseline; white-space: nowrap;&quot;&gt;R&lt;/kbd&gt;&lt;span style=&quot;background-color: white; color: #242729; font-family: Arial, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, sans-serif; font-size: 15px;&quot;&gt;&amp;nbsp;to do a quick refresh and reset the mode.&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/4758019131705699363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2018/11/slack-app-for-mac-stuck-in-overtype.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/4758019131705699363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/4758019131705699363'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2018/11/slack-app-for-mac-stuck-in-overtype.html' title='Slack App for Mac stuck in overtype mode instead of usual insert mode'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-6818432311586095118</id><published>2018-09-27T08:25:00.000-07:00</published><updated>2018-09-27T08:25:15.842-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hbase"/><category scheme="http://www.blogger.com/atom/ns#" term="ttl"/><category scheme="http://www.blogger.com/atom/ns#" term="unset"/><title type='text'>How to Unset a TTL from HBase Table</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Here is the command:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
alter &#39;&amp;lt;Table Name&amp;gt;&#39;, {NAME =&amp;gt; &#39;&amp;lt;Column Family&amp;gt;&#39;, TTL =&amp;gt; org.apache.hadoop.hbase.HConstants::FOREVER}&lt;/blockquote&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/6818432311586095118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2018/09/how-to-unset-ttl-from-hbase-table.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/6818432311586095118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/6818432311586095118'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2018/09/how-to-unset-ttl-from-hbase-table.html' title='How to Unset a TTL from HBase Table'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-2596293924224033134</id><published>2018-07-18T08:30:00.002-07:00</published><updated>2018-07-18T08:32:11.062-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="count"/><category scheme="http://www.blogger.com/atom/ns#" term="data frame"/><category scheme="http://www.blogger.com/atom/ns#" term="dataframe"/><category scheme="http://www.blogger.com/atom/ns#" term="mean"/><category scheme="http://www.blogger.com/atom/ns#" term="pandas"/><category scheme="http://www.blogger.com/atom/ns#" term="standard deviation"/><category scheme="http://www.blogger.com/atom/ns#" term="std"/><title type='text'>Pandas Dataframe - Easy way to group by and calculate the count, mean and standard deviation</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
The following command groups by col_1 and calculates the count, mean and standard deviation for the values in col_2&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
df[[&#39;col_1&#39;, &#39;col_2&#39;]].groupby([&#39;col_1&#39;]).agg([&#39;count&#39;, &#39;mean&#39;, &#39;std&#39;])&lt;/blockquote&gt;
&lt;br /&gt;
Official documentation:&amp;nbsp;&lt;a href=&quot;http://pandas.pydata.org/pandas-docs/stable/groupby.html#applying-multiple-functions-at-once&quot;&gt;http://pandas.pydata.org/pandas-docs/stable/groupby.html#applying-multiple-functions-at-once&amp;nbsp;&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/2596293924224033134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2018/07/pandas-dataframe-easy-way-to-group-by.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/2596293924224033134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/2596293924224033134'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2018/07/pandas-dataframe-easy-way-to-group-by.html' title='Pandas Dataframe - Easy way to group by and calculate the count, mean and standard deviation'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-7029448439026468790</id><published>2018-06-19T10:14:00.002-07:00</published><updated>2018-08-03T11:05:44.780-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="accept-count"/><category scheme="http://www.blogger.com/atom/ns#" term="embedded tomcat"/><category scheme="http://www.blogger.com/atom/ns#" term="max-connections"/><category scheme="http://www.blogger.com/atom/ns#" term="max-threads"/><category scheme="http://www.blogger.com/atom/ns#" term="spring boot"/><category scheme="http://www.blogger.com/atom/ns#" term="tomcat"/><title type='text'>Spring Boot - Embeded Tomcat : How to limit the number of requests processed and queued</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;votecell post-layout--left&quot; style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #242729; flex-grow: 0; font-family: Arial, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; grid-column: 1 / auto; line-height: inherit; margin: 0px; padding: 0px 15px 0px 0px; vertical-align: top; width: auto;&quot;&gt;
&lt;div class=&quot;vote&quot; style=&quot;border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; min-width: 46px; padding: 0px; text-align: center; vertical-align: baseline;&quot;&gt;
&lt;span class=&quot;vote-count-post &quot; itemprop=&quot;upvoteCount&quot; style=&quot;border: 0px; box-sizing: inherit; color: #6a737c; display: block; font-family: inherit; font-size: 20px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 8px 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;a class=&quot;vote-down-off&quot; href=&quot;https://www.blogger.com/null&quot; style=&quot;background-image: url(&amp;quot;../../Img/unified/sprites.svg?v=438582dc9e27&amp;quot;), none; background-position: 0px -220px; background-repeat: no-repeat; background-size: initial; border: 0px; box-sizing: inherit; color: #0077cc; cursor: pointer; display: inline !important; font-family: inherit; font-size: 1px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; height: 30px; line-height: inherit; margin: 0px auto 10px; overflow: hidden; padding: 0px; text-indent: -9999em; vertical-align: baseline; width: 40px;&quot; title=&quot;This answer is not useful&quot;&gt;own vote&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;vote-accepted-on load-accepted-answer-date&quot; style=&quot;background-image: url(&amp;quot;about:blank&amp;quot;) , none; background-position: -40px -270px; background-repeat: no-repeat; border: 0px; box-sizing: inherit; color: #6a737c; display: block; font-family: inherit; font-size: 1px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; height: 40px; line-height: inherit; margin: 0px auto; overflow: hidden; padding: 0px; text-indent: -9999em; vertical-align: baseline; width: 40px;&quot; title=&quot;loading when this answer was accepted...&quot;&gt;acceptedS&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;answercell post-layout--right&quot; style=&quot;border: 0px; box-sizing: inherit; font-stretch: inherit; line-height: inherit; margin: 0px; min-width: 0px; padding: 0px; vertical-align: baseline; width: auto;&quot;&gt;
&lt;div class=&quot;post-text&quot; itemprop=&quot;text&quot; style=&quot;border: 0px; box-sizing: inherit; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.3; margin: 0px 0px 5px; padding: 0px; vertical-align: baseline; width: 667px; word-wrap: break-word;&quot;&gt;
&lt;div style=&quot;border: 0px; box-sizing: inherit; clear: both; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: inherit; margin-bottom: 1em; padding: 0px; vertical-align: baseline;&quot;&gt;
&lt;div style=&quot;color: #242729; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit; text-align: left;&quot;&gt;
One of my REST applications ran into a problem where the requests started timing out. I had this parameter set:&lt;/div&gt;
&lt;div style=&quot;color: #242729; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre style=&quot;background-color: #2b2b2b; color: #a9b7c6; font-family: Menlo; font-size: 9pt; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit;&quot;&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;server.tomcat.max-threads &lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: #6897bb;&quot;&gt;500&lt;/span&gt;&lt;/pre&gt;
&lt;div style=&quot;color: #242729; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #242729; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit; text-align: left;&quot;&gt;
And everything else was default value. I was running embedded Tomcat 8.5.x.&lt;/div&gt;
&lt;div style=&quot;color: #242729; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #242729; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit; text-align: left;&quot;&gt;
Some of my APIs were really long running ones (could very well take over a minute). When a lot of long running api requests came in they clogged up the server and occupied all 500 worker threads. In an ideal situation, I would have expected the server to return HTTP 503 (Service Unavailable) to any new request beyond the set 500, but it didn&#39;t.&lt;/div&gt;
&lt;div style=&quot;color: #242729; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #242729; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit; text-align: left;&quot;&gt;
I started digging into various options to set in tomcat and found these:&lt;/div&gt;
&lt;div style=&quot;color: #242729; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre style=&quot;background-color: #2b2b2b; color: #a9b7c6; font-family: Menlo; font-size: 9pt; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit;&quot;&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;server.tomcat.max-connections&lt;/span&gt;&lt;span style=&quot;color: #6897bb;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;server.tomcat.accept-count&lt;/span&gt;&lt;/pre&gt;
&lt;div style=&quot;color: #242729; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #242729; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit; text-align: left;&quot;&gt;
I created a simple rest application with an api endpoint which just sleeps for 2 minutes and started testing using jmeter to find out&amp;nbsp; how the above parameters behave.&lt;/div&gt;
&lt;div style=&quot;color: #242729; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #242729; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit; text-align: left;&quot;&gt;
I found that the total number of requests accepted for processing will be&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #242729; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre style=&quot;background-color: #2b2b2b; color: #a9b7c6; font-family: Menlo; font-size: 9pt; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit;&quot;&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;server.tomcat.max-connections + &lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;server.tomcat.accept-count&lt;/span&gt;&lt;/pre&gt;
&lt;div style=&quot;color: #242729; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit;&quot;&gt;
&lt;span style=&quot;color: #cc7832;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: #242729; font-style: inherit; font-weight: inherit;&quot;&gt;However, only &lt;/span&gt;&lt;b style=&quot;color: #242729; font-variant-caps: inherit; font-variant-ligatures: inherit;&quot;&gt;&lt;i&gt;server.tomcat.max-threads&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;color: #242729;&quot;&gt;&lt;span style=&quot;font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit;&quot;&gt; were &lt;/span&gt;being&lt;span style=&quot;font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit;&quot;&gt;&amp;nbsp;processed concurrently.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: #242729;&quot;&gt;&lt;span style=&quot;font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: #242729;&quot;&gt;&lt;span style=&quot;font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit;&quot;&gt;I am still not sure how to return HTTP 506. If you do, please comment below. I would appreciate!&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: #242729;&quot;&gt;&lt;span style=&quot;font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: #242729;&quot;&gt;&lt;span style=&quot;font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit;&quot;&gt;Using these parameters, I now have a workaround to my problem, which is to fail-fast requests exceeding max-threads + accept-count.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: #242729;&quot;&gt;&lt;span style=&quot;font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: #242729;&quot;&gt;&lt;span style=&quot;font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit;&quot;&gt;Here is my workaround:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: #242729;&quot;&gt;&lt;span style=&quot;font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: #242729;&quot;&gt;&lt;span style=&quot;font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit;&quot;&gt;set&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;i&gt;server.tomcat.max-threads&lt;/i&gt;&lt;/b&gt; and&amp;nbsp;&lt;b&gt;&lt;i&gt;server.tomcat.max-connections&lt;/i&gt;&lt;/b&gt; to the same value (which is the number of concurrent requests to be processed). And set &lt;b&gt;&lt;i&gt;server.tomcat.accept-count&lt;/i&gt;&lt;/b&gt; to a number that you want to be &quot;queued&quot;. This number depends on how much time you want your client to wait if the worker threads are busy for a long time. Also, ask your clients to set connect timeout to something like 100 milli seconds to fail-fast. I think the default is 1 minute.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: #242729;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: #242729;&quot;&gt;Cheers!&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/7029448439026468790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2018/06/what-are-acceptcount-maxconnections-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/7029448439026468790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/7029448439026468790'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2018/06/what-are-acceptcount-maxconnections-and.html' title='Spring Boot - Embeded Tomcat : How to limit the number of requests processed and queued'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-4886600113714436974</id><published>2018-05-24T09:39:00.000-07:00</published><updated>2018-05-24T09:39:03.206-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="coprocessor"/><category scheme="http://www.blogger.com/atom/ns#" term="dynamic loading"/><category scheme="http://www.blogger.com/atom/ns#" term="error"/><category scheme="http://www.blogger.com/atom/ns#" term="hbase"/><category scheme="http://www.blogger.com/atom/ns#" term="sanity check"/><title type='text'>Error loading coprocessor from HBase Shell</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Are you getting this when loading your coprocessor:&amp;nbsp;&quot;cannot be loaded Set hbase.table.sanity.checks to false at conf or table descriptor if you want to bypass sanity checks&quot;?&lt;br /&gt;
&lt;br /&gt;
I got that error message when I tried to load my second endpoint coprocessor on a table.&lt;br /&gt;
&lt;br /&gt;
I started with the following check-list:&lt;br /&gt;
&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Does the jar file exist&lt;/li&gt;
&lt;li&gt;Permissions of the jar file&lt;/li&gt;
&lt;li&gt;Checked fully qualified class name&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Damn, it still doesn&#39;t work. I spent hours reading books and articles about how to load coprocessor. I tried every possible method but I still kept getting that error.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
In my case, I had multiple coprocessors in the same jar file. That was the problem (even though I don&#39;t agree why it matters). I moved coprocessors to their own fat jar file and everything worked!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I hope this saves someone&#39;s day. Cheers!&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/4886600113714436974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2018/05/error-loading-coprocessor-from-hbase.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/4886600113714436974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/4886600113714436974'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2018/05/error-loading-coprocessor-from-hbase.html' title='Error loading coprocessor from HBase Shell'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-67409171741428096</id><published>2018-02-07T08:19:00.003-08:00</published><updated>2018-10-01T07:26:50.820-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ha"/><category scheme="http://www.blogger.com/atom/ns#" term="hdfs"/><category scheme="http://www.blogger.com/atom/ns#" term="high availability"/><category scheme="http://www.blogger.com/atom/ns#" term="java client"/><category scheme="http://www.blogger.com/atom/ns#" term="snappy"/><title type='text'>Java Client To Read Data from HA Enabled HDFS</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
If you have enabled HA (High Availability) in HDFS, you have 2 Name Nodes now and only one of them is active at any given time. First option to read data from HDFS is to connect to one of the Name Nodes and if it isn&#39;t active (got exception), connect to the second Name Node. Alternatively, you could use the following, which is a better option IMO:&lt;br /&gt;
&lt;br /&gt;
Start by creating an xml file like this (call it hdfs-site.xml) and add this to your classpath. Replace &lt;b&gt;namenode1.mycompany.com&lt;/b&gt; with the host or IP of your first name node and replace &lt;b&gt;namenode2.mycompany.com&lt;/b&gt; with the host or IP or your second name node.&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;color: #333333; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: #557799;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;fs.defaultFS&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;value&amp;gt;&lt;/span&gt;hdfs://nameservice1&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.nameservices&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;value&amp;gt;&lt;/span&gt;nameservice1&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.client.failover.proxy.provider.nameservice1&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;value&amp;gt;&lt;/span&gt;org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.ha.automatic-failover.enabled.nameservice1&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;value&amp;gt;&lt;/span&gt;true&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.ha.namenodes.nameservice1&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;value&amp;gt;&lt;/span&gt;namenode1,namenode2&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.namenode.rpc-address.nameservice1.namenode1&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;value&amp;gt;&lt;/span&gt;namenode1.mycompany.com:8020&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.namenode.servicerpc-address.nameservice1.namenode1&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;value&amp;gt;&lt;/span&gt;namenode1.mycompany.com:8022&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.namenode.http-address.nameservice1.namenode1&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;value&amp;gt;&lt;/span&gt;namenode1.mycompany.com:50070&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.namenode.https-address.nameservice1.namenode1&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;value&amp;gt;&lt;/span&gt;namenode1.mycompany.com:50470&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.namenode.rpc-address.nameservice1.namenode2&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;value&amp;gt;&lt;/span&gt;namenode2.mycompany.com:8020&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.namenode.servicerpc-address.nameservice1.namenode2&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;value&amp;gt;&lt;/span&gt;namenode2.mycompany.com:8022&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.namenode.http-address.nameservice1.namenode2&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;value&amp;gt;&lt;/span&gt;namenode2.mycompany.com:50070&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.namenode.https-address.nameservice1.namenode2&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;value&amp;gt;&lt;/span&gt;namenode2.mycompany.com:50470&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, use the above file to create your client like this:&lt;br /&gt;
&lt;br /&gt;
&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;&lt;br /&gt;
&lt;pre style=&quot;color: #333333; line-height: 16.25px;&quot;&gt;org.&lt;span style=&quot;color: #0000cc;&quot;&gt;apache&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;hadoop&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;conf&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;Configuration&lt;/span&gt; conf = &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; org.&lt;span style=&quot;color: #0000cc;&quot;&gt;apache&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;hadoop&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;conf&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;Configuration&lt;/span&gt;();
conf.&lt;span style=&quot;color: #0000cc;&quot;&gt;addResource&lt;/span&gt;(com.&lt;span style=&quot;color: #0000cc;&quot;&gt;google&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;common&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;io&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;Resources&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;getResource&lt;/span&gt;(&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;hdfs-site.xml&quot;&lt;/span&gt;));
org.&lt;span style=&quot;color: #0000cc;&quot;&gt;apache&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;hadoop&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;fs&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;FileSystem&lt;/span&gt; fs = org.&lt;span style=&quot;color: #0000cc;&quot;&gt;apache&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;hadoop&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;fs&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;FileSystem&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;get&lt;/span&gt;(conf);
System.&lt;span style=&quot;color: #0000cc;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #0000cc;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;Home directory :&quot;&lt;/span&gt; + fs.&lt;span style=&quot;color: #0000cc;&quot;&gt;getHomeDirectory&lt;/span&gt;());&lt;/pre&gt;
&lt;br /&gt;
If you are trying to read a snappy compressed file in your java code (Not mapreduce), you might see an error like this:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
native snappy library not available: this version of libhadoop was built without snappy support.&lt;/blockquote&gt;
&lt;br /&gt;
It means that the native snappy files (like libsnappy.so) has not been added to the java library path. To fix this, add the following right after the java command:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
-Djava.library.path=/opt/cloudera/parcels/CDH/lib/hadoop/lib/native&lt;/blockquote&gt;
Note: /opt/cloudera/parcels/CDH/lib/hadoop is the HADOOP_HOME for Cloudera distribution. This location might change for different distributions. Update that accordingly.&lt;br /&gt;
&lt;br /&gt;
Example command:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
java -Djava.library.path=/opt/cloudera/parcels/CDH/lib/hadoop/lib/native -cp .:lib/*:/opt/cloudera/parcels/CDH/lib/hbase/lib/*:/opt/cloudera/parcels/CDH/lib/hadoop/client/*:/opt/cloudera/parcels/CDH/lib/hadoop-yarn/*:/opt/cloudera/parcels/CDH/lib/hadoop-yarn/lib/*.jar:/opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/* com.mycompany.StandaloneHdfsReader /data/example.snappy&lt;/blockquote&gt;
&lt;br /&gt;
&lt;pre style=&quot;color: #333333; line-height: 16.25px;&quot;&gt;&lt;/pre&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/67409171741428096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2018/02/java-client-to-read-data-from-ha.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/67409171741428096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/67409171741428096'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2018/02/java-client-to-read-data-from-ha.html' title='Java Client To Read Data from HA Enabled HDFS'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-8886591206748156164</id><published>2018-01-23T11:10:00.001-08:00</published><updated>2018-07-18T08:37:18.917-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="8u162"/><category scheme="http://www.blogger.com/atom/ns#" term="ansible"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="oracle jdk"/><title type='text'>Oracle JDK 8 Download Link to be used in Ansible</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
I use Ansible for deployments. As part of the deployment, I install Oracle JDK. If you are like me, you are as frustrated as I am because Oracle seems to move around their rpms or tarballs a lot. I changed the URL 3 times already and I was on JDK 8 all the time.&lt;br /&gt;
&lt;br /&gt;
Here is the latest URL that works. (As of 01/23/2018)&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;lang-java prettyprint prettyprinted&quot; style=&quot;background-color: #eff0f1; border: 0px; color: #393318; font-family: Consolas, Menlo, Monaco, &amp;quot;Lucida Console&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: inherit; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; vertical-align: baseline; width: auto; word-wrap: normal;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: Consolas, Menlo, Monaco, &amp;quot;Lucida Console&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace, sans-serif; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;&quot;&gt;&lt;span class=&quot;str&quot; style=&quot;border: 0px; color: #7d2727; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;http://download.oracle.com/otn-pub/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/jdk-8u162-linux&lt;/span&gt;&lt;/code&gt;-x64.rpm&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: white; font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;oracle_java_version: &lt;/span&gt;8
&lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;oracle_java_version_update: &lt;/span&gt;162
&lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;oracle_java_version_build: &lt;/span&gt;&lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&#39;12&#39;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;oracle_java_hashcode: &lt;/span&gt;&lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&#39;0da788060d494f5095bf8624735fa2f1&#39;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;oracle_java_version_string: &lt;/span&gt;&lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&quot;1.{{ oracle_java_version }}.0_{{ oracle_java_version_update }}&quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;oracle_java_home: &lt;/span&gt;&lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&quot;/usr/java/jdk1.{{ oracle_java_version }}.0_{{ oracle_java_version_update }}&quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;oracle_java_rpm_filename: &lt;/span&gt;&lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&quot;jdk-{{ oracle_java_version }}u{{ oracle_java_version_update }}-linux-x64.rpm&quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;oracle_java_rpm_url: &lt;/span&gt;&lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&quot;https://download.oracle.com/otn-pub/java/jdk/{{ oracle_java_version }}u{{ oracle_java_version_update }}-b{{ oracle_java_version_build }}/{{oracle_java_hashcode}}/{{ oracle_java_rpm_filename }}&quot;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/8886591206748156164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2018/01/oracle-jdk-8-download-link-to-be-used.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/8886591206748156164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/8886591206748156164'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2018/01/oracle-jdk-8-download-link-to-be-used.html' title='Oracle JDK 8 Download Link to be used in Ansible'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-5182466304889487810</id><published>2017-12-29T08:38:00.002-08:00</published><updated>2017-12-29T08:38:57.123-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="empty files"/><category scheme="http://www.blogger.com/atom/ns#" term="hadoop"/><category scheme="http://www.blogger.com/atom/ns#" term="mapreduce"/><category scheme="http://www.blogger.com/atom/ns#" term="multipleoutputs"/><category scheme="http://www.blogger.com/atom/ns#" term="reducer"/><title type='text'>Reducer Creating Empty Files in HDFS When using MultipleOutputs??</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
I might be the only person on the planet that still uses Mapreduce. I started writing any new jobs with Spark, but I still need to enhance my MR job from time to time.&lt;br /&gt;
&lt;br /&gt;
I had a requirement to generate files with different names (prefix) for different keys. So I decided to use MultipleOutput.&amp;nbsp;I finished up coding and deployed in Dev cluster. Everything seemed to be hunky dory. When time came to deploy in Prod, things went south. Some of my files (with a specific key) were always empty. If you have ever worked with Mapreduce, you can understand my pain to debug. I spent almost 2 days and was on the verge to give up and just rewrite the whole damn thing using Spark. I even created git repo for the new project using Spark and was about to start coding. Before I went that route, I got an idea of trying to write data just using context.write() instead of multipleOutputs.write(). Guess what? now I see data in those files. This made me focus on MultipleOutputs rather than my business logic (even though it worked perfectly in Dev). In less than 2 minutes, I found that MultipleOutputs needs to be closed. Thanks to Google search. So, I added multipleOutputs.close() in my cleanup method of Reducer and everything started working. I am still puzzled how it worked fine in Dev though. Any guess?? Leave your comments.&lt;br /&gt;
&lt;br /&gt;
What a painful way to learn this silly thing! I am recording this here in the hope to help someone someday. Happy Holidays!&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/5182466304889487810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2017/12/reducer-creating-empty-files-in-hdfs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/5182466304889487810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/5182466304889487810'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2017/12/reducer-creating-empty-files-in-hdfs.html' title='Reducer Creating Empty Files in HDFS When using MultipleOutputs??'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-1244164572569755704</id><published>2017-12-26T08:33:00.001-08:00</published><updated>2017-12-26T08:33:50.885-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="data migration"/><category scheme="http://www.blogger.com/atom/ns#" term="hbase"/><category scheme="http://www.blogger.com/atom/ns#" term="yarn queue"/><title type='text'>Copy HBase Table Data Between Different Clusters</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Here is the command you&#39;ll need to copy data from one cluster to another:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;b&gt;bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable &amp;nbsp;--peer.adr=&amp;lt;Comma Separated Target Zookeeper Ip Address&amp;gt;:2181:/hbase &amp;lt;Table Name&amp;gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;br /&gt;
If you are running YARN and need to specify a specific queue name, add this to the command (just before the --peer.adr):&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;b&gt;-Dmapreduce.job.queuename=&amp;lt;Queue Name&amp;gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/1244164572569755704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2017/12/copy-hbase-table-data-between-different.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/1244164572569755704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/1244164572569755704'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2017/12/copy-hbase-table-data-between-different.html' title='Copy HBase Table Data Between Different Clusters'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7441365055806835376.post-4191417847458651508</id><published>2017-12-05T13:08:00.002-08:00</published><updated>2017-12-05T13:08:53.554-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="kafka"/><category scheme="http://www.blogger.com/atom/ns#" term="kafka consumer offset"/><category scheme="http://www.blogger.com/atom/ns#" term="offset"/><category scheme="http://www.blogger.com/atom/ns#" term="zookeeper"/><title type='text'>Manually Set Kafka Offset In Zookeeper</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
If you are running a version of Kafka which stores the consumer details (like offset) in zookeeper, and if you want to manually set the offset, follow this procedure:&lt;br /&gt;
&lt;br /&gt;
You will need to run zookeeper-client.sh to view and make changes. The location of this script depends on your environment. I have a Cloudera CDH 5.8.3 cluster and the script is located in /opt/cloudera/parcels/CDH/bin&lt;br /&gt;
&lt;br /&gt;
Zookeeper stores the data like this:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;b&gt;&lt;i&gt;/consumers/&amp;lt;Group ID&amp;gt;/offsets/&amp;lt;Topic&amp;gt;/&amp;lt;Partition&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;br /&gt;
To connect to Zookeeper cluster, CD in to the directory containing the script and run the following command:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;b&gt;&lt;i&gt;./zookeeper-client -server &amp;lt;one of the zk host&amp;gt;:&amp;lt;zk port&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;br /&gt;
Your prompt should change to something like:&amp;nbsp;&lt;b&gt;&lt;i&gt;[zk: Host:Port(CONNECTED) 0]&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Now, you can run commands like these to browse data in Zookeeper&lt;br /&gt;
&lt;br /&gt;
To list all consumers: &lt;b&gt;&lt;i&gt;ls /consumers&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
To list all partitions: &lt;b&gt;&lt;i&gt;ls /consumers/&amp;lt;group id&amp;gt;/offsets/&amp;lt;topic&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
To view current offset: &lt;b&gt;&lt;i&gt;get /consumers/&amp;lt;group id&amp;gt;/offsets/&amp;lt;topic&amp;gt;/&amp;lt;partition&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Now, to manually set the offset run command like this:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;b&gt;&lt;i&gt;set&amp;nbsp;/consumers/&amp;lt;group id&amp;gt;/offsets/&amp;lt;topic&amp;gt;/&amp;lt;partition&amp;gt; &amp;lt;offset&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;br /&gt;
Once all changes are done, run &quot;close&quot; command to close connection to the zookeeper. Then, run &quot;quit&quot; to get back to normal command prompt.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://bigdatazone.blogspot.com/feeds/4191417847458651508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigdatazone.blogspot.com/2017/12/manually-set-kafka-offset-in-zookeeper.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/4191417847458651508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7441365055806835376/posts/default/4191417847458651508'/><link rel='alternate' type='text/html' href='http://bigdatazone.blogspot.com/2017/12/manually-set-kafka-offset-in-zookeeper.html' title='Manually Set Kafka Offset In Zookeeper'/><author><name>Kamal Giri</name><uri>http://www.blogger.com/profile/01646234912977814798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>