From 83f63b336b7884fed12374727830d80da70a5d91 Mon Sep 17 00:00:00 2001 From: dininta Date: Sat, 5 Dec 2015 10:39:45 +0700 Subject: [PATCH 01/26] Initialize StackExchangeAuth project --- StackExchangeAuth/build.xml | 71 + StackExchangeAuth/nbproject/ant-deploy.xml | 111 ++ StackExchangeAuth/nbproject/build-impl.xml | 1441 +++++++++++++++++ .../nbproject/genfiles.properties | 8 + .../nbproject/project.properties | 89 + StackExchangeAuth/nbproject/project.xml | 18 + StackExchangeAuth/src/conf/MANIFEST.MF | 2 + StackExchangeAuth/web/index.html | 16 + 8 files changed, 1756 insertions(+) create mode 100644 StackExchangeAuth/build.xml create mode 100644 StackExchangeAuth/nbproject/ant-deploy.xml create mode 100644 StackExchangeAuth/nbproject/build-impl.xml create mode 100644 StackExchangeAuth/nbproject/genfiles.properties create mode 100644 StackExchangeAuth/nbproject/project.properties create mode 100644 StackExchangeAuth/nbproject/project.xml create mode 100644 StackExchangeAuth/src/conf/MANIFEST.MF create mode 100644 StackExchangeAuth/web/index.html diff --git a/StackExchangeAuth/build.xml b/StackExchangeAuth/build.xml new file mode 100644 index 00000000..11959804 --- /dev/null +++ b/StackExchangeAuth/build.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + Builds, tests, and runs the project StackExchangeAuth. + + + diff --git a/StackExchangeAuth/nbproject/ant-deploy.xml b/StackExchangeAuth/nbproject/ant-deploy.xml new file mode 100644 index 00000000..2d5f8778 --- /dev/null +++ b/StackExchangeAuth/nbproject/ant-deploy.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/StackExchangeAuth/nbproject/build-impl.xml b/StackExchangeAuth/nbproject/build-impl.xml new file mode 100644 index 00000000..066389cf --- /dev/null +++ b/StackExchangeAuth/nbproject/build-impl.xml @@ -0,0 +1,1441 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set build.web.dir + Must set build.generated.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.war + + + + + + + + + +The Java EE server classpath is not correctly set up - server home directory is missing. +Either open the project in the IDE and assign the server or setup the server classpath manually. +For example like this: + ant -Dj2ee.server.home=<app_server_installation_directory> + + +The Java EE server classpath is not correctly set up. Your active server type is ${j2ee.server.type}. +Either open the project in the IDE and assign the server or setup the server classpath manually. +For example like this: + ant -Duser.properties.file=<path_to_property_file> (where you put the property "j2ee.platform.classpath" in a .properties file) +or ant -Dj2ee.platform.classpath=<server_classpath> (where no properties file is used) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +The libs.CopyLibs.classpath property is not set up. +This property must point to +org-netbeans-modules-java-j2seproject-copylibstask.jar file which is part +of NetBeans IDE installation and is usually located at +<netbeans_installation>/java<version>/ant/extra folder. +Either open the project in the IDE and make sure CopyLibs library +exists or setup the property manually. For example like this: + ant -Dlibs.CopyLibs.classpath=a/path/to/org-netbeans-modules-java-j2seproject-copylibstask.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.jsp.includes + + + + + + + + + + + + + + + + + + + + + + + + + + Must select a file in the IDE or set jsp.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Browser not found, cannot launch the deployed application. Try to set the BROWSER environment variable. + + + Launching ${browse.url} + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/StackExchangeAuth/nbproject/genfiles.properties b/StackExchangeAuth/nbproject/genfiles.properties new file mode 100644 index 00000000..9f601efb --- /dev/null +++ b/StackExchangeAuth/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=39d9eb2f +build.xml.script.CRC32=e4e02c26 +build.xml.stylesheet.CRC32=651128d4@1.68.1.1 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=39d9eb2f +nbproject/build-impl.xml.script.CRC32=c7f4d40d +nbproject/build-impl.xml.stylesheet.CRC32=99ea4b56@1.68.1.1 diff --git a/StackExchangeAuth/nbproject/project.properties b/StackExchangeAuth/nbproject/project.properties new file mode 100644 index 00000000..07849e55 --- /dev/null +++ b/StackExchangeAuth/nbproject/project.properties @@ -0,0 +1,89 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=true +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +build.classes.dir=${build.web.dir}/WEB-INF/classes +build.classes.excludes=**/*.java,**/*.form +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +build.web.dir=${build.dir}/web +build.web.excludes=${build.classes.excludes} +client.urlPart= +compile.jsps=false +conf.dir=${source.root}/conf +debug.classpath=${build.classes.dir}:${javac.classpath} +debug.test.classpath=\ + ${run.test.classpath} +display.browser=true +# Files to be excluded from distribution war +dist.archive.excludes= +dist.dir=dist +dist.ear.war=${dist.dir}/${war.ear.name} +dist.javadoc.dir=${dist.dir}/javadoc +dist.war=${dist.dir}/${war.name} +endorsed.classpath=\ + ${libs.javaee-endorsed-api-6.0.classpath} +excludes= +includes=** +j2ee.compile.on.save=true +j2ee.copy.static.files.on.save=true +j2ee.deploy.on.save=true +j2ee.platform=1.7-web +j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar +j2ee.platform.embeddableejb.classpath=${j2ee.server.home}/lib/embedded/glassfish-embedded-static-shell.jar +j2ee.platform.wscompile.classpath=${j2ee.server.home}/modules/webservices-osgi.jar +j2ee.platform.wsgen.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar +j2ee.platform.wsimport.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar +j2ee.platform.wsit.classpath= +j2ee.server.type=gfv3ee6 +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.debug=true +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.8 +javac.target=1.8 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.preview=true +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +lib.dir=${web.docbase.dir}/WEB-INF/lib +no.dependencies=false +persistence.xml.dir=${conf.dir} +platform.active=default_platform +resource.dir=setup +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +# Space-separated list of JVM arguments used when running a class with a main method or a unit test +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value): +runmain.jvmargs= +source.encoding=UTF-8 +source.root=src +src.dir=${source.root}/java +test.src.dir=test +war.content.additional= +war.ear.name=${war.name} +war.name=StackExchangeAuth.war +web.docbase.dir=web +webinf.dir=web/WEB-INF diff --git a/StackExchangeAuth/nbproject/project.xml b/StackExchangeAuth/nbproject/project.xml new file mode 100644 index 00000000..c65e6bd6 --- /dev/null +++ b/StackExchangeAuth/nbproject/project.xml @@ -0,0 +1,18 @@ + + + org.netbeans.modules.web.project + + + StackExchangeAuth + 1.6.5 + + + + + + + + + + + diff --git a/StackExchangeAuth/src/conf/MANIFEST.MF b/StackExchangeAuth/src/conf/MANIFEST.MF new file mode 100644 index 00000000..58630c02 --- /dev/null +++ b/StackExchangeAuth/src/conf/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/StackExchangeAuth/web/index.html b/StackExchangeAuth/web/index.html new file mode 100644 index 00000000..f07133b1 --- /dev/null +++ b/StackExchangeAuth/web/index.html @@ -0,0 +1,16 @@ + + + + + TODO supply a title + + + + +
TODO write content
+ + From 441b0970d55e5ec93b74ae14e92782652f85b6c1 Mon Sep 17 00:00:00 2001 From: dininta Date: Sat, 5 Dec 2015 10:40:10 +0700 Subject: [PATCH 02/26] Initialize StackExchangeClient project --- StackExchangeClient/build.xml | 71 + StackExchangeClient/nbproject/ant-deploy.xml | 111 ++ StackExchangeClient/nbproject/build-impl.xml | 1441 +++++++++++++++++ .../nbproject/genfiles.properties | 8 + .../nbproject/project.properties | 89 + StackExchangeClient/nbproject/project.xml | 18 + StackExchangeClient/src/conf/MANIFEST.MF | 2 + StackExchangeClient/web/index.html | 16 + 8 files changed, 1756 insertions(+) create mode 100644 StackExchangeClient/build.xml create mode 100644 StackExchangeClient/nbproject/ant-deploy.xml create mode 100644 StackExchangeClient/nbproject/build-impl.xml create mode 100644 StackExchangeClient/nbproject/genfiles.properties create mode 100644 StackExchangeClient/nbproject/project.properties create mode 100644 StackExchangeClient/nbproject/project.xml create mode 100644 StackExchangeClient/src/conf/MANIFEST.MF create mode 100644 StackExchangeClient/web/index.html diff --git a/StackExchangeClient/build.xml b/StackExchangeClient/build.xml new file mode 100644 index 00000000..5c21ab29 --- /dev/null +++ b/StackExchangeClient/build.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + Builds, tests, and runs the project StackExchangeClient. + + + diff --git a/StackExchangeClient/nbproject/ant-deploy.xml b/StackExchangeClient/nbproject/ant-deploy.xml new file mode 100644 index 00000000..2d5f8778 --- /dev/null +++ b/StackExchangeClient/nbproject/ant-deploy.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/StackExchangeClient/nbproject/build-impl.xml b/StackExchangeClient/nbproject/build-impl.xml new file mode 100644 index 00000000..8030221f --- /dev/null +++ b/StackExchangeClient/nbproject/build-impl.xml @@ -0,0 +1,1441 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set build.web.dir + Must set build.generated.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.war + + + + + + + + + +The Java EE server classpath is not correctly set up - server home directory is missing. +Either open the project in the IDE and assign the server or setup the server classpath manually. +For example like this: + ant -Dj2ee.server.home=<app_server_installation_directory> + + +The Java EE server classpath is not correctly set up. Your active server type is ${j2ee.server.type}. +Either open the project in the IDE and assign the server or setup the server classpath manually. +For example like this: + ant -Duser.properties.file=<path_to_property_file> (where you put the property "j2ee.platform.classpath" in a .properties file) +or ant -Dj2ee.platform.classpath=<server_classpath> (where no properties file is used) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +The libs.CopyLibs.classpath property is not set up. +This property must point to +org-netbeans-modules-java-j2seproject-copylibstask.jar file which is part +of NetBeans IDE installation and is usually located at +<netbeans_installation>/java<version>/ant/extra folder. +Either open the project in the IDE and make sure CopyLibs library +exists or setup the property manually. For example like this: + ant -Dlibs.CopyLibs.classpath=a/path/to/org-netbeans-modules-java-j2seproject-copylibstask.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.jsp.includes + + + + + + + + + + + + + + + + + + + + + + + + + + Must select a file in the IDE or set jsp.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Browser not found, cannot launch the deployed application. Try to set the BROWSER environment variable. + + + Launching ${browse.url} + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/StackExchangeClient/nbproject/genfiles.properties b/StackExchangeClient/nbproject/genfiles.properties new file mode 100644 index 00000000..9109a408 --- /dev/null +++ b/StackExchangeClient/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=712c2934 +build.xml.script.CRC32=fd046825 +build.xml.stylesheet.CRC32=651128d4@1.68.1.1 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=712c2934 +nbproject/build-impl.xml.script.CRC32=2da1b101 +nbproject/build-impl.xml.stylesheet.CRC32=99ea4b56@1.68.1.1 diff --git a/StackExchangeClient/nbproject/project.properties b/StackExchangeClient/nbproject/project.properties new file mode 100644 index 00000000..879194d7 --- /dev/null +++ b/StackExchangeClient/nbproject/project.properties @@ -0,0 +1,89 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=true +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +build.classes.dir=${build.web.dir}/WEB-INF/classes +build.classes.excludes=**/*.java,**/*.form +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +build.web.dir=${build.dir}/web +build.web.excludes=${build.classes.excludes} +client.urlPart= +compile.jsps=false +conf.dir=${source.root}/conf +debug.classpath=${build.classes.dir}:${javac.classpath} +debug.test.classpath=\ + ${run.test.classpath} +display.browser=true +# Files to be excluded from distribution war +dist.archive.excludes= +dist.dir=dist +dist.ear.war=${dist.dir}/${war.ear.name} +dist.javadoc.dir=${dist.dir}/javadoc +dist.war=${dist.dir}/${war.name} +endorsed.classpath=\ + ${libs.javaee-endorsed-api-6.0.classpath} +excludes= +includes=** +j2ee.compile.on.save=true +j2ee.copy.static.files.on.save=true +j2ee.deploy.on.save=true +j2ee.platform=1.7-web +j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar +j2ee.platform.embeddableejb.classpath=${j2ee.server.home}/lib/embedded/glassfish-embedded-static-shell.jar +j2ee.platform.wscompile.classpath=${j2ee.server.home}/modules/webservices-osgi.jar +j2ee.platform.wsgen.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar +j2ee.platform.wsimport.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar +j2ee.platform.wsit.classpath= +j2ee.server.type=gfv3ee6 +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.debug=true +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.8 +javac.target=1.8 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.preview=true +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +lib.dir=${web.docbase.dir}/WEB-INF/lib +no.dependencies=false +persistence.xml.dir=${conf.dir} +platform.active=default_platform +resource.dir=setup +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +# Space-separated list of JVM arguments used when running a class with a main method or a unit test +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value): +runmain.jvmargs= +source.encoding=UTF-8 +source.root=src +src.dir=${source.root}/java +test.src.dir=test +war.content.additional= +war.ear.name=${war.name} +war.name=StackExchangeClient.war +web.docbase.dir=web +webinf.dir=web/WEB-INF diff --git a/StackExchangeClient/nbproject/project.xml b/StackExchangeClient/nbproject/project.xml new file mode 100644 index 00000000..5e2d105b --- /dev/null +++ b/StackExchangeClient/nbproject/project.xml @@ -0,0 +1,18 @@ + + + org.netbeans.modules.web.project + + + StackExchangeClient + 1.6.5 + + + + + + + + + + + diff --git a/StackExchangeClient/src/conf/MANIFEST.MF b/StackExchangeClient/src/conf/MANIFEST.MF new file mode 100644 index 00000000..58630c02 --- /dev/null +++ b/StackExchangeClient/src/conf/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/StackExchangeClient/web/index.html b/StackExchangeClient/web/index.html new file mode 100644 index 00000000..f07133b1 --- /dev/null +++ b/StackExchangeClient/web/index.html @@ -0,0 +1,16 @@ + + + + + TODO supply a title + + + + +
TODO write content
+ + From 77ccd6c529005b9fa1e582d5e4223628e1cf7f4b Mon Sep 17 00:00:00 2001 From: dininta Date: Sat, 5 Dec 2015 10:40:26 +0700 Subject: [PATCH 03/26] Initialize StackExchangeService project --- StackExchangeService/build.xml | 71 + StackExchangeService/nbproject/ant-deploy.xml | 111 ++ StackExchangeService/nbproject/build-impl.xml | 1441 +++++++++++++++++ .../nbproject/genfiles.properties | 8 + .../nbproject/project.properties | 89 + StackExchangeService/nbproject/project.xml | 18 + StackExchangeService/src/conf/MANIFEST.MF | 2 + StackExchangeService/web/index.html | 16 + 8 files changed, 1756 insertions(+) create mode 100644 StackExchangeService/build.xml create mode 100644 StackExchangeService/nbproject/ant-deploy.xml create mode 100644 StackExchangeService/nbproject/build-impl.xml create mode 100644 StackExchangeService/nbproject/genfiles.properties create mode 100644 StackExchangeService/nbproject/project.properties create mode 100644 StackExchangeService/nbproject/project.xml create mode 100644 StackExchangeService/src/conf/MANIFEST.MF create mode 100644 StackExchangeService/web/index.html diff --git a/StackExchangeService/build.xml b/StackExchangeService/build.xml new file mode 100644 index 00000000..4fc397db --- /dev/null +++ b/StackExchangeService/build.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + Builds, tests, and runs the project StackExchangeService. + + + diff --git a/StackExchangeService/nbproject/ant-deploy.xml b/StackExchangeService/nbproject/ant-deploy.xml new file mode 100644 index 00000000..2d5f8778 --- /dev/null +++ b/StackExchangeService/nbproject/ant-deploy.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/StackExchangeService/nbproject/build-impl.xml b/StackExchangeService/nbproject/build-impl.xml new file mode 100644 index 00000000..6a245220 --- /dev/null +++ b/StackExchangeService/nbproject/build-impl.xml @@ -0,0 +1,1441 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set build.web.dir + Must set build.generated.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.war + + + + + + + + + +The Java EE server classpath is not correctly set up - server home directory is missing. +Either open the project in the IDE and assign the server or setup the server classpath manually. +For example like this: + ant -Dj2ee.server.home=<app_server_installation_directory> + + +The Java EE server classpath is not correctly set up. Your active server type is ${j2ee.server.type}. +Either open the project in the IDE and assign the server or setup the server classpath manually. +For example like this: + ant -Duser.properties.file=<path_to_property_file> (where you put the property "j2ee.platform.classpath" in a .properties file) +or ant -Dj2ee.platform.classpath=<server_classpath> (where no properties file is used) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +The libs.CopyLibs.classpath property is not set up. +This property must point to +org-netbeans-modules-java-j2seproject-copylibstask.jar file which is part +of NetBeans IDE installation and is usually located at +<netbeans_installation>/java<version>/ant/extra folder. +Either open the project in the IDE and make sure CopyLibs library +exists or setup the property manually. For example like this: + ant -Dlibs.CopyLibs.classpath=a/path/to/org-netbeans-modules-java-j2seproject-copylibstask.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.jsp.includes + + + + + + + + + + + + + + + + + + + + + + + + + + Must select a file in the IDE or set jsp.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Browser not found, cannot launch the deployed application. Try to set the BROWSER environment variable. + + + Launching ${browse.url} + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/StackExchangeService/nbproject/genfiles.properties b/StackExchangeService/nbproject/genfiles.properties new file mode 100644 index 00000000..8bf9524c --- /dev/null +++ b/StackExchangeService/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=6e497111 +build.xml.script.CRC32=2c475062 +build.xml.stylesheet.CRC32=651128d4@1.68.1.1 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=6e497111 +nbproject/build-impl.xml.script.CRC32=2e4c5d00 +nbproject/build-impl.xml.stylesheet.CRC32=99ea4b56@1.68.1.1 diff --git a/StackExchangeService/nbproject/project.properties b/StackExchangeService/nbproject/project.properties new file mode 100644 index 00000000..6e1fbe21 --- /dev/null +++ b/StackExchangeService/nbproject/project.properties @@ -0,0 +1,89 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=true +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +build.classes.dir=${build.web.dir}/WEB-INF/classes +build.classes.excludes=**/*.java,**/*.form +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +build.web.dir=${build.dir}/web +build.web.excludes=${build.classes.excludes} +client.urlPart= +compile.jsps=false +conf.dir=${source.root}/conf +debug.classpath=${build.classes.dir}:${javac.classpath} +debug.test.classpath=\ + ${run.test.classpath} +display.browser=true +# Files to be excluded from distribution war +dist.archive.excludes= +dist.dir=dist +dist.ear.war=${dist.dir}/${war.ear.name} +dist.javadoc.dir=${dist.dir}/javadoc +dist.war=${dist.dir}/${war.name} +endorsed.classpath=\ + ${libs.javaee-endorsed-api-6.0.classpath} +excludes= +includes=** +j2ee.compile.on.save=true +j2ee.copy.static.files.on.save=true +j2ee.deploy.on.save=true +j2ee.platform=1.7-web +j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar +j2ee.platform.embeddableejb.classpath=${j2ee.server.home}/lib/embedded/glassfish-embedded-static-shell.jar +j2ee.platform.wscompile.classpath=${j2ee.server.home}/modules/webservices-osgi.jar +j2ee.platform.wsgen.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar +j2ee.platform.wsimport.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar +j2ee.platform.wsit.classpath= +j2ee.server.type=gfv3ee6 +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.debug=true +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.8 +javac.target=1.8 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.preview=true +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +lib.dir=${web.docbase.dir}/WEB-INF/lib +no.dependencies=false +persistence.xml.dir=${conf.dir} +platform.active=default_platform +resource.dir=setup +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +# Space-separated list of JVM arguments used when running a class with a main method or a unit test +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value): +runmain.jvmargs= +source.encoding=UTF-8 +source.root=src +src.dir=${source.root}/java +test.src.dir=test +war.content.additional= +war.ear.name=${war.name} +war.name=StackExchangeService.war +web.docbase.dir=web +webinf.dir=web/WEB-INF diff --git a/StackExchangeService/nbproject/project.xml b/StackExchangeService/nbproject/project.xml new file mode 100644 index 00000000..ed0bb431 --- /dev/null +++ b/StackExchangeService/nbproject/project.xml @@ -0,0 +1,18 @@ + + + org.netbeans.modules.web.project + + + StackExchangeService + 1.6.5 + + + + + + + + + + + diff --git a/StackExchangeService/src/conf/MANIFEST.MF b/StackExchangeService/src/conf/MANIFEST.MF new file mode 100644 index 00000000..58630c02 --- /dev/null +++ b/StackExchangeService/src/conf/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/StackExchangeService/web/index.html b/StackExchangeService/web/index.html new file mode 100644 index 00000000..f07133b1 --- /dev/null +++ b/StackExchangeService/web/index.html @@ -0,0 +1,16 @@ + + + + + TODO supply a title + + + + +
TODO write content
+ + From 6c3412397d90c64be01d9039c7c0e50b5ee4ce40 Mon Sep 17 00:00:00 2001 From: dininta Date: Sat, 5 Dec 2015 11:57:53 +0700 Subject: [PATCH 04/26] Add webservice from previous repository --- StackExchangeService/nbproject/jax-ws.xml | 15 + .../nbproject/jaxws-build.xml | 51 ++ .../src/java/AnswerModel/Answer.java | 48 ++ .../src/java/AnswerModel/AnswerWS.java | 334 +++++++++++ .../src/java/Authentication/Auth.java | 113 ++++ StackExchangeService/src/java/Config/DB.java | 29 + .../src/java/QuestionModel/Question.java | 50 ++ .../src/java/QuestionModel/QuestionWS.java | 558 ++++++++++++++++++ .../src/java/UserModel/User.java | 51 ++ .../src/java/UserModel/UserWS.java | 85 +++ StackExchangeService/web/WEB-INF/web.xml | 12 + 11 files changed, 1346 insertions(+) create mode 100644 StackExchangeService/nbproject/jax-ws.xml create mode 100644 StackExchangeService/nbproject/jaxws-build.xml create mode 100644 StackExchangeService/src/java/AnswerModel/Answer.java create mode 100644 StackExchangeService/src/java/AnswerModel/AnswerWS.java create mode 100644 StackExchangeService/src/java/Authentication/Auth.java create mode 100644 StackExchangeService/src/java/Config/DB.java create mode 100644 StackExchangeService/src/java/QuestionModel/Question.java create mode 100644 StackExchangeService/src/java/QuestionModel/QuestionWS.java create mode 100644 StackExchangeService/src/java/UserModel/User.java create mode 100644 StackExchangeService/src/java/UserModel/UserWS.java create mode 100644 StackExchangeService/web/WEB-INF/web.xml diff --git a/StackExchangeService/nbproject/jax-ws.xml b/StackExchangeService/nbproject/jax-ws.xml new file mode 100644 index 00000000..bb0b30ad --- /dev/null +++ b/StackExchangeService/nbproject/jax-ws.xml @@ -0,0 +1,15 @@ + + + + + QuestionModel.QuestionWS + + + AnswerModel.AnswerWS + + + UserModel.UserWS + + + + diff --git a/StackExchangeService/nbproject/jaxws-build.xml b/StackExchangeService/nbproject/jaxws-build.xml new file mode 100644 index 00000000..65e654ba --- /dev/null +++ b/StackExchangeService/nbproject/jaxws-build.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/StackExchangeService/src/java/AnswerModel/Answer.java b/StackExchangeService/src/java/AnswerModel/Answer.java new file mode 100644 index 00000000..0976ba72 --- /dev/null +++ b/StackExchangeService/src/java/AnswerModel/Answer.java @@ -0,0 +1,48 @@ +package AnswerModel; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name="Answer") +public class Answer { + + @XmlElement(name= "id_answer", required = true) + private int id_answer; + @XmlElement(name= "id_question", required = true) + private int id_question; + @XmlElement(name= "vote", required = true) + private int vote; + @XmlElement(name = "content", required = true) + private String content; + @XmlElement(name = "date", required = true) + private String date; + @XmlElement(name = "username", required = true) + private String username; + + public Answer() { + id_answer = 0; + id_question = 0; + vote = 0; + } + + public Answer(int id_answer, int id_question, int vote, String content, String date, String username) { + this.id_answer = id_answer; + this.id_question = id_question; + this.vote = vote; + this.content = content; + this.date = date; + this.username = username; + } + + public String getContent() { + return content; + } + + public int getVote() { + return vote; + } + + public String getUsername() { + return username; + } +} diff --git a/StackExchangeService/src/java/AnswerModel/AnswerWS.java b/StackExchangeService/src/java/AnswerModel/AnswerWS.java new file mode 100644 index 00000000..c32d8162 --- /dev/null +++ b/StackExchangeService/src/java/AnswerModel/AnswerWS.java @@ -0,0 +1,334 @@ +package AnswerModel; + +import Authentication.Auth; +import java.sql.*; +import java.util.ArrayList; +import java.util.List; +import java.util.logging.*; +import javax.jws.WebService; +import javax.jws.WebMethod; +import javax.jws.WebParam; +import javax.jws.WebResult; +import Config.DB; +import java.sql.Timestamp; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; + +@WebService(serviceName = "AnswerWS") +public class AnswerWS { + + private final DB db = new DB(); + private Connection conn; + private final Auth auth= new Auth(); + + private static String getCurrentTimeStamp() { + Calendar cal = Calendar.getInstance(); + Timestamp now = new Timestamp(cal.getTimeInMillis()); + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now); + } + + + /** + * + * @param qid + * @return + */ + @WebMethod(operationName = "getAnswerByQID") + @WebResult(name = "Answer") + public List getAnswerByQID(@WebParam(name = "qid") int qid) { + + List answers = new ArrayList(); + + conn = db.connect(); + + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "SELECT * FROM answer where id_question = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + answers.add( new Answer( + rs.getInt("id_answer"), + rs.getInt("id_question"), + rs.getInt("vote"), + rs.getString("content"), + rs.getString("date"), + rs.getString("username"))); + } + rs.close(); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(AnswerWS.class.getName()).log(Level.SEVERE, null, ex); + } + + return answers; + } + + /** + * Web service operation + */ + @WebMethod(operationName = "createAnswer") + public Boolean createAnswer(@WebParam(name = "id_question") int id_question, + @WebParam(name = "content") String content, + @WebParam(name = "token") String token ) { + + conn = db.connect(); + Boolean status = true; + String username = auth.checkToken(token); + if(!username.equals("-999")){ + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "INSERT INTO answer(id_question, username, content, vote, date)" + + " VALUES (?, ?, ?, 0, ?)"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, id_question); + dbStatement.setString(2, username); + dbStatement.setString(3, content); + dbStatement.setString(4, getCurrentTimeStamp()); + + status = dbStatement.execute(); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(AnswerWS.class.getName()).log(Level.SEVERE, null, ex); + } + } + return status; + } + @WebMethod(operationName = "voteUp") + public int voteUp(@WebParam(name = "qid") int qid,@WebParam(name = "token") String token ){ + int count; + count=getVoteById(qid); + String username= auth.checkToken(token); + if((!username.equals("-999"))&&(!isVoteUp(qid, username))){ + try { + conn = db.connect(); + Statement stmt; + stmt = conn.createStatement(); + //pernah vote down + if(isVoteDown(qid,username)){ + count+=2; + String sql; + sql="DELETE FROM vote_answer WHERE id_answer = ?"; + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + dbStatement.execute(); + } + else{count+=1;} + String sql, sql_select; + sql="UPDATE answer SET vote = ? WHERE id_answer = ? "; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, count); + dbStatement.setInt(2, qid); + dbStatement.execute(); + sql="INSERT INTO vote_answer (id_answer, username,value) VALUES (?,?,1)"; + PreparedStatement dbStatement2 = conn.prepareStatement(sql); + dbStatement2.setInt(1, qid); + dbStatement2.setString(2, username); + dbStatement2.executeUpdate(); + + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(AnswerWS.class.getName()).log(Level.SEVERE, null, ex); + } + } + return count; + } + @WebMethod(operationName = "voteDown") + public int voteDown(@WebParam(name = "aid") int aid,@WebParam(name = "token") String token ){ + int count; + count=getVoteById(aid); + String username= auth.checkToken(token); + if((!username.equals("-999"))&&(!isVoteDown(aid, username))){ + try { + conn = db.connect(); + Statement stmt; + stmt = conn.createStatement(); + if(isVoteUp(aid,username)){ + count-=2; + String sql; + sql="DELETE FROM vote_answer WHERE id_answer = ?"; + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, aid); + dbStatement.execute(); + }else{count-=1;} + String sql, sql_select; + sql="UPDATE answer SET vote = ? WHERE id_answer = ? "; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, count); + dbStatement.setInt(2, aid); + dbStatement.execute(); + + sql="INSERT INTO vote_answer (id_answer, username,value) VALUES (?,?,-1)"; + PreparedStatement dbStatement2 = conn.prepareStatement(sql); + dbStatement2.setInt(1, aid); + dbStatement2.setString(2, username); + dbStatement2.execute(); + + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(AnswerWS.class.getName()).log(Level.SEVERE, null, ex); + } + } + return count; + } + @WebMethod(operationName = "isVoted") + public Boolean isVoted(@WebParam(name = "aid") int aid,@WebParam(name = "token") String token){ + Boolean status = false; + conn = db.connect(); + + String username = auth.checkToken(token); + if(!username.equals("-999")){ + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql="Select * from vote_answer where id_answer = ? and username = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, aid); + dbStatement.setString(2, username); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + status= true; + } + + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(AnswerWS.class.getName()).log(Level.SEVERE, null, ex); + } + } + return status; + } + public Boolean isVoteUp(@WebParam(name = "aid") int aid,@WebParam(name = "username") String username){ + Boolean status = false; + conn = db.connect(); + + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql="Select * from vote_answer where id_answer = ? and username = ? and value = 1"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, aid); + dbStatement.setString(2, username); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + status= true; + } + + stmt.close(); + //conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(AnswerWS.class.getName()).log(Level.SEVERE, null, ex); + } + return status; + } + public Boolean isVoteDown(@WebParam(name = "aid") int aid,@WebParam(name = "username") String username){ + Boolean status = false; + conn = db.connect(); + + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql="Select * from vote_answer where id_answer = ? and username = ? and value = -1"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, aid); + dbStatement.setString(2, username); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + status= true; + } + + stmt.close(); + //conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(AnswerWS.class.getName()).log(Level.SEVERE, null, ex); + } + return status; + } + @WebMethod(operationName = "getVoteById") + @WebResult(name = "vote") + public int getVoteById(@WebParam(name = "aid") int aid) { + int count= 0; + conn = db.connect(); + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "SELECT vote FROM answer where id_answer = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, aid); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + count = rs.getInt("vote"); + } + rs.close(); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(AnswerWS.class.getName()).log(Level.SEVERE, null, ex); + } + + return count; + } + + public Boolean isValidToken(@WebParam(name = "token") String token){ + String username= auth.checkToken(token); + if(username.equals("-999")) + return false; + else return true; + } +} diff --git a/StackExchangeService/src/java/Authentication/Auth.java b/StackExchangeService/src/java/Authentication/Auth.java new file mode 100644 index 00000000..d2375c9e --- /dev/null +++ b/StackExchangeService/src/java/Authentication/Auth.java @@ -0,0 +1,113 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package Authentication; + +/** + * + * @author FiqieUlya + */ +import Config.DB; +import com.sun.org.apache.xerces.internal.parsers.DOMParser; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; + +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLEncoder; +import java.sql.Connection; + +import java.util.logging.Level; +import java.util.logging.Logger; +import org.w3c.dom.Document; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import org.xml.sax.InputSource; +import java.io.StringReader; + +public class Auth { + private final String url = "http://localhost:21568/StackExchangeAuth/validateToken"; + + // HTTP POST request + private static Document convertStringToDocument(String xmlStr) { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder; + try + { + builder = factory.newDocumentBuilder(); + Document doc = builder.parse( new InputSource( new StringReader( xmlStr ) ) ); + return doc; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + public String checkToken(String token) { + String username=""; + String result=""; + try { + String charset = "UTF-8"; + URL obj = new URL(url); + HttpURLConnection con = (HttpURLConnection) obj.openConnection(); + con.setDoOutput(true); + con.setRequestMethod("POST"); + con.setRequestProperty("Accept-Charset", charset); + con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset); + + String query = String.format("token_string=%s", + URLEncoder.encode(token, charset)); + try (OutputStream output = con.getOutputStream()) { + output.write(query.getBytes(charset)); + } + InputStream response = con.getInputStream(); + + BufferedReader br = new BufferedReader(new InputStreamReader( + (con.getInputStream()))); + + String output; + + + while ((output = br.readLine()) != null) { + result+=output; + } + Document doc = convertStringToDocument(result); + String stat = doc.getElementsByTagName("status").item(0).getTextContent(); + if(stat.equals("true")){ + username= doc.getElementsByTagName("username").item(0).getTextContent(); + } + else{ + username="-999"; + } + + + con.disconnect(); + } catch (MalformedURLException ex) { + Logger.getLogger(Auth.class.getName()).log(Level.SEVERE, null, ex); + } catch (IOException ex) { + Logger.getLogger(Auth.class.getName()).log(Level.SEVERE, null, ex); + } + + return username; + } + + private boolean isStatus(String s) { + return s.startsWith(""); + } + + private boolean isUsername(String s) { + return s.startsWith(""); + } + + public static void main (String [] args) throws IOException{ + Auth a = new Auth(); + String abc = "key"; + System.out.println(a.checkToken(abc)); + //a.checkToken(abc); + } +} diff --git a/StackExchangeService/src/java/Config/DB.java b/StackExchangeService/src/java/Config/DB.java new file mode 100644 index 00000000..049daef1 --- /dev/null +++ b/StackExchangeService/src/java/Config/DB.java @@ -0,0 +1,29 @@ +package Config; + +import java.sql.Connection; +import java.sql.DriverManager; + +public class DB { + private String hostParam; + private String user; + private String password; + + public DB() { + this.hostParam = "jdbc:mysql://localhost:3306/stackexchange2?zeroDateTimeBehaviour=convertToNull"; + this.user = "root"; + this.password = ""; + } + + public Connection connect() { + Connection conn = null; + try { + Class.forName("com.mysql.jdbc.Driver"); + conn = (Connection) DriverManager.getConnection(hostParam, user, password); + } + catch (Exception e) { + e.printStackTrace(); + } + + return conn; + } +} diff --git a/StackExchangeService/src/java/QuestionModel/Question.java b/StackExchangeService/src/java/QuestionModel/Question.java new file mode 100644 index 00000000..44fe58eb --- /dev/null +++ b/StackExchangeService/src/java/QuestionModel/Question.java @@ -0,0 +1,50 @@ +package QuestionModel; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name="Question") +public class Question { + @XmlElement(name="id_question", required=true) + private int id_question; + @XmlElement(name="topic", required=true) + private String topic; + @XmlElement(name="content", required=true) + private String content; + @XmlElement(name="date", required=true) + private String date; + @XmlElement(name="username", required=true) + private String username; + @XmlElement(name="vote", required=true) + private int vote; + @XmlElement(name="answer", required=true) + private int answer; + + public Question() { + id_question = 0; + vote = 0; +} + + public Question(int id_question, int vote, String topic, String content, String date, String username) { + this.id_question = id_question; + this.vote = vote; + this.content = content; + this.date = date; + this.username = username; + this.topic=topic; + } + + public String getContent() { + return content; + } + + public Question(int Ans, int id_question, int vote, String topic, String content, String date, String username) { + this.id_question = id_question; + this.vote = vote; + this.content = content; + this.date = date; + this.username = username; + this.topic=topic; + this.answer=Ans; + } +} diff --git a/StackExchangeService/src/java/QuestionModel/QuestionWS.java b/StackExchangeService/src/java/QuestionModel/QuestionWS.java new file mode 100644 index 00000000..4548b689 --- /dev/null +++ b/StackExchangeService/src/java/QuestionModel/QuestionWS.java @@ -0,0 +1,558 @@ +package QuestionModel; + + +import Authentication.Auth; +import Config.DB; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.jws.WebService; +import javax.jws.WebMethod; +import javax.jws.WebParam; +import javax.jws.WebResult; + +/** + * + * @author FiqieUlya + */ +@WebService(serviceName = "QuestionWS") +public class QuestionWS { + + private final DB db = new DB(); + private final Auth auth= new Auth(); + private Connection conn; + private static String getCurrentTimeStamp() { + Calendar cal = Calendar.getInstance(); + Timestamp now = new Timestamp(cal.getTimeInMillis()); + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now); + } + + /** + * + * @param qid + * @return + */ + @WebMethod(operationName = "getQuestionByQID") + @WebResult(name = "Question") + public List getQuestionByQID(@WebParam(name = "qid") int qid) { + + List question = new ArrayList(); + + conn = db.connect(); + + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "SELECT * FROM question where id_question = ?"; + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + + ResultSet rs; + rs = dbStatement.executeQuery(); + /* Get every data returned by SQLquery */ + while(rs.next()) { + question.add( new Question( + rs.getInt("id_question"), + rs.getInt("vote"), + rs.getString("topic"), + rs.getString("content"), + rs.getString("date"), + rs.getString("username"))); + } + rs.close(); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + } + + return question; + } + + @WebMethod(operationName = "createQuestion") + public Boolean createQuestion( + @WebParam(name = "topic") String topic, + @WebParam(name = "token") String token, + @WebParam(name = "content") String content){ + + Boolean status = true; + String uname = auth.checkToken(token); + status = false; + if(!uname.equals("-999")){ + try { + conn = db.connect(); + Statement stmt; + stmt = conn.createStatement(); + String sql; + sql = "INSERT INTO question (topic, username,content,vote,date)VALUES (?, ?, ?, 0, ?)"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setString(1, topic); + dbStatement.setString(2, uname); + dbStatement.setString(3, content); + dbStatement.setString(4, getCurrentTimeStamp()); + + status= dbStatement.execute(); + + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + } + } + return status; + } + + @WebMethod(operationName = "getQuestions") + @WebResult(name = "Questions") + public List getQuestions() { + List questions = new ArrayList(); + conn = db.connect(); + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "SELECT * FROM question ORDER BY date DESC"; + PreparedStatement dbStatement = conn.prepareStatement(sql); + + ResultSet rs; + rs = dbStatement.executeQuery(); + /* Get every data returned by SQLquery */ + while(rs.next()) { + int temp = getAnswerById(rs.getInt("id_question")); + questions.add( new Question( + temp, + rs.getInt("id_question"), + rs.getInt("vote"), + rs.getString("topic"), + rs.getString("content"), + rs.getString("date"), + rs.getString("username"))); + } + rs.close(); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + } + + return questions; + } + + @WebMethod(operationName = "getVoteById") + @WebResult(name = "vote") + public int getVoteById(@WebParam(name = "qid") int qid) { + int count= 0; + conn = db.connect(); + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "SELECT vote FROM question where id_question = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + count = rs.getInt("vote"); + } + rs.close(); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + } + + return count; + } + + @WebMethod(operationName = "getAnswerById") + public int getAnswerById(@WebParam(name = "qid") int qid) { + int count= 0; + conn = db.connect(); + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "SELECT * FROM answer where id_question = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + count++; + } + rs.close(); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + } + + return count; + } + + @WebMethod(operationName = "voteUp") + public int voteUp(@WebParam(name = "qid") int qid,@WebParam(name = "token") String token ){ + int count; + count=getVoteById(qid); + String username= auth.checkToken(token); + if((!username.equals("-999"))&&(!isVoteUp(qid, username))){ + try { + conn = db.connect(); + Statement stmt; + stmt = conn.createStatement(); + //pernah vote down + if(isVoteDown(qid,username)){ + count+=2; + String sql; + sql="DELETE FROM vote_question WHERE id_question = ?"; + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + dbStatement.execute(); + } + else{count+=1;} + String sql, sql_select; + sql="UPDATE question SET vote = ? WHERE id_question = ? "; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, count); + dbStatement.setInt(2, qid); + dbStatement.execute(); + sql="INSERT INTO vote_question (id_question, username,value) VALUES (?,?,1)"; + PreparedStatement dbStatement2 = conn.prepareStatement(sql); + dbStatement2.setInt(1, qid); + dbStatement2.setString(2, username); + dbStatement2.executeUpdate(); + + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + } + } + return count; + } + + @WebMethod(operationName = "voteDown") + public int voteDown(@WebParam(name = "qid") int qid,@WebParam(name = "token") String token ){ + int count; + count=getVoteById(qid); + String username= auth.checkToken(token); + if((!username.equals("-999"))&&(!isVoteDown(qid, username))){ + try { + conn = db.connect(); + Statement stmt; + stmt = conn.createStatement(); + if(isVoteUp(qid,username)){ + count-=2; + String sql; + sql="DELETE FROM vote_question WHERE id_question = ?"; + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + dbStatement.execute(); + }else{count-=1;} + String sql, sql_select; + sql="UPDATE question SET vote = ? WHERE id_question = ? "; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, count); + dbStatement.setInt(2, qid); + dbStatement.execute(); + + sql="INSERT INTO vote_question (id_question, username,value) VALUES (?,?,-1)"; + PreparedStatement dbStatement2 = conn.prepareStatement(sql); + dbStatement2.setInt(1, qid); + dbStatement2.setString(2, username); + dbStatement2.execute(); + + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + } + } + return count; + } + + @WebMethod(operationName = "deleteQuestionById") + public Boolean deleteQuestionById(@WebParam(name = "qid") int qid,@WebParam(name = "token") String token){ + int count=0; + + Boolean status= true; + String username= auth.checkToken(token); + if((!username.equals("-999"))&&(validateUsername(qid, username))){ + try { + Statement statement; + conn = db.connect(); + statement = conn.createStatement(); + + String sql; + + sql = "DELETE FROM question where id_question = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + status=dbStatement.execute(); + + statement.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + } + } + return status; + } + + @WebMethod(operationName = "isVoted") + public Boolean isVoted(@WebParam(name = "qid") int qid,@WebParam(name = "username") String username){ + Boolean status = false; + conn = db.connect(); + + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql="Select * from vote_question where id_question = ? and username = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + dbStatement.setString(2, username); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + status= true; + } + + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + } + return status; + } + + @WebMethod(operationName = "searchQuestion") + public List searchQuestion(@WebParam(name = "keyword") String keyword){ + List questions = new ArrayList(); + conn = db.connect(); + + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql="SELECT * FROM question WHERE topic LIKE ? OR content LIKE ? ORDER BY Date DESC"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setString(1, "%" + keyword + "%"); + dbStatement.setString(2, "%" + keyword + "%"); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + while(rs.next()) { + int temp = getAnswerById(rs.getInt("id_question")); + questions.add( new Question( + temp, + rs.getInt("id_question"), + rs.getInt("vote"), + rs.getString("topic"), + rs.getString("content"), + rs.getString("date"), + rs.getString("username"))); + } + rs.close(); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + } + return questions; + } + + @WebMethod(operationName = "getUsernameByQid") + public String getUsernameByQid(@WebParam(name = "qid") int qid) { + conn = db.connect(); + String uname=""; + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "SELECT username FROM question where id_question = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + uname=rs.getString("username"); + } + rs.close(); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + } + + return uname; + } + + public Boolean isVoteUp(@WebParam(name = "qid") int qid,@WebParam(name = "username") String username){ + Boolean status = false; + conn = db.connect(); + + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql="Select * from vote_question where id_question = ? and username = ? and value = 1"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + dbStatement.setString(2, username); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + status= true; + } + + stmt.close(); + //conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + } + return status; + } + public Boolean isVoteDown(@WebParam(name = "qid") int qid,@WebParam(name = "username") String username){ + Boolean status = false; + conn = db.connect(); + + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql="Select * from vote_question where id_question = ? and username = ? and value = -1"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + dbStatement.setString(2, username); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + status= true; + } + + stmt.close(); + //conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + } + return status; + } + public Boolean validateUsername(@WebParam(name = "qid") int qid + ,@WebParam(name = "username") String uname){ + Boolean status= false; + + String username = getUsernameByQid(qid); + if(username.equals(uname)){ + status= true; + } + + return status; + } + + @WebMethod(operationName = "editQuestion") + public Boolean editQuestion( + @WebParam(name = "qid") int qid, + @WebParam(name = "topic") String topic, + @WebParam(name = "token") String token, + @WebParam(name = "content") String content){ + + Boolean status = true; + String username = auth.checkToken(token); + if((!username.equals("-999"))&&(validateUsername(qid, username))){ + try { + Statement stmt; + conn = db.connect(); + stmt = conn.createStatement(); + String sql; + sql = "UPDATE question SET topic = ? , content= ?, date = ? WHERE id_question = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setString(1, topic); + dbStatement.setString(2, content); + dbStatement.setString(3, getCurrentTimeStamp()); + dbStatement.setInt(4, qid); + + dbStatement.execute(); + + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + } + } + return status; + } + + public Boolean isValidToken(@WebParam(name = "token") String token){ + String username= auth.checkToken(token); + if(username.equals("-999")) + return false; + else return true; + } +} + diff --git a/StackExchangeService/src/java/UserModel/User.java b/StackExchangeService/src/java/UserModel/User.java new file mode 100644 index 00000000..8a62ebcf --- /dev/null +++ b/StackExchangeService/src/java/UserModel/User.java @@ -0,0 +1,51 @@ +package UserModel; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name="User") +public class User { + @XmlElement(name="username", required=true) + private String username; + @XmlElement(name="password", required=true) + private String password; + @XmlElement(name="nama", required=true) + private String nama; + @XmlElement(name="email", required=true) + private String email; + + public User(String username, String password, String nama, String email){ + this.username = username; + this.email= email; + this.nama = nama; + this.email = email; + } + + /** + * @return the username + */ + public String getUsername() { + return username; + } + + /** + * @return the password + */ + public String getPassword() { + return password; + } + + /** + * @return the nama + */ + public String getNama() { + return nama; + } + + /** + * @return the email + */ + public String getEmail() { + return email; + } +} diff --git a/StackExchangeService/src/java/UserModel/UserWS.java b/StackExchangeService/src/java/UserModel/UserWS.java new file mode 100644 index 00000000..487cfb62 --- /dev/null +++ b/StackExchangeService/src/java/UserModel/UserWS.java @@ -0,0 +1,85 @@ +package UserModel; + +import Config.DB; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.jws.WebService; +import javax.jws.WebMethod; +import javax.jws.WebParam; +import javax.jws.WebResult; + +@WebService(serviceName = "UserWs") +public class UserWS { + + private final DB db = new DB(); + private Connection conn; + + @WebMethod(operationName = "getPasswordById") + @WebResult(name = "Password") + public String getPasswordUser(@WebParam(name = "username") String uname) { + String password = null; + conn = db.connect(); + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "SELECT password FROM account where username = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setString(1, uname); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + password= rs.getString("password"); + } + rs.close(); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(UserWS.class.getName()).log(Level.SEVERE, null, ex); + } + + return password; + } + @WebMethod(operationName = "createAccount") + public Boolean createAccount(@WebParam(name = "username") String uname, @WebParam(name = "password") String pwd, + @WebParam(name = "email") String email, @WebParam(name = "nama") String name){ + conn = db.connect(); + Boolean status = true; + + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "INSERT INTO account(username, nama, password, email)" + + " VALUES (?, ?, ?, ?)"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setString(1, uname); + dbStatement.setString(2, name); + dbStatement.setString(3, pwd); + dbStatement.setString(4, email); + + status =dbStatement.execute(); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(UserWS.class.getName()).log(Level.SEVERE, null, ex); + } + return status; + } + + +} diff --git a/StackExchangeService/web/WEB-INF/web.xml b/StackExchangeService/web/WEB-INF/web.xml new file mode 100644 index 00000000..652f33c1 --- /dev/null +++ b/StackExchangeService/web/WEB-INF/web.xml @@ -0,0 +1,12 @@ + + + + + + 30 + + + From ed75ff69db6d6fac7e221b5a919a01b8a5fe83ed Mon Sep 17 00:00:00 2001 From: dininta Date: Sat, 5 Dec 2015 12:16:02 +0700 Subject: [PATCH 05/26] Initialize StackExchangeAuth project --- .../nbproject/genfiles.properties | 5 +- StackExchangeAuth/nbproject/jax-ws.xml | 6 + StackExchangeAuth/nbproject/jaxws-build.xml | 18 ++ .../nbproject/project.properties | 2 +- StackExchangeAuth/nbproject/project.xml | 1 + .../setup/glassfish-resources.xml | 12 ++ StackExchangeAuth/src/java/Call.java | 132 +++++++++++++ StackExchangeAuth/src/java/Config/DB.java | 38 ++++ .../src/java/Token/TokenGenerator.java | 66 +++++++ .../src/java/Token/TokenModel.java | 41 ++++ .../src/java/Token/TokenValidator.java | 54 ++++++ StackExchangeAuth/src/java/deleteToken.java | 109 +++++++++++ StackExchangeAuth/src/java/getToken.java | 179 ++++++++++++++++++ StackExchangeAuth/src/java/validateToken.java | 164 ++++++++++++++++ StackExchangeAuth/web/WEB-INF/web.xml | 12 ++ StackExchangeAuth/web/index.html | 24 ++- 16 files changed, 859 insertions(+), 4 deletions(-) create mode 100644 StackExchangeAuth/nbproject/jax-ws.xml create mode 100644 StackExchangeAuth/nbproject/jaxws-build.xml create mode 100644 StackExchangeAuth/setup/glassfish-resources.xml create mode 100644 StackExchangeAuth/src/java/Call.java create mode 100644 StackExchangeAuth/src/java/Config/DB.java create mode 100644 StackExchangeAuth/src/java/Token/TokenGenerator.java create mode 100644 StackExchangeAuth/src/java/Token/TokenModel.java create mode 100644 StackExchangeAuth/src/java/Token/TokenValidator.java create mode 100644 StackExchangeAuth/src/java/deleteToken.java create mode 100644 StackExchangeAuth/src/java/getToken.java create mode 100644 StackExchangeAuth/src/java/validateToken.java create mode 100644 StackExchangeAuth/web/WEB-INF/web.xml diff --git a/StackExchangeAuth/nbproject/genfiles.properties b/StackExchangeAuth/nbproject/genfiles.properties index 9f601efb..d2ab3688 100644 --- a/StackExchangeAuth/nbproject/genfiles.properties +++ b/StackExchangeAuth/nbproject/genfiles.properties @@ -1,8 +1,9 @@ -build.xml.data.CRC32=39d9eb2f +build.xml.data.CRC32=51ee3a0a build.xml.script.CRC32=e4e02c26 build.xml.stylesheet.CRC32=651128d4@1.68.1.1 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. -nbproject/build-impl.xml.data.CRC32=39d9eb2f +nbproject/build-impl.xml.data.CRC32=51ee3a0a nbproject/build-impl.xml.script.CRC32=c7f4d40d nbproject/build-impl.xml.stylesheet.CRC32=99ea4b56@1.68.1.1 +nbproject/jaxws-build.xml.stylesheet.CRC32=6608c2cf diff --git a/StackExchangeAuth/nbproject/jax-ws.xml b/StackExchangeAuth/nbproject/jax-ws.xml new file mode 100644 index 00000000..0c9842be --- /dev/null +++ b/StackExchangeAuth/nbproject/jax-ws.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/StackExchangeAuth/nbproject/jaxws-build.xml b/StackExchangeAuth/nbproject/jaxws-build.xml new file mode 100644 index 00000000..d14263ff --- /dev/null +++ b/StackExchangeAuth/nbproject/jaxws-build.xml @@ -0,0 +1,18 @@ + + + + diff --git a/StackExchangeAuth/nbproject/project.properties b/StackExchangeAuth/nbproject/project.properties index 07849e55..dd6586a4 100644 --- a/StackExchangeAuth/nbproject/project.properties +++ b/StackExchangeAuth/nbproject/project.properties @@ -26,7 +26,7 @@ dist.ear.war=${dist.dir}/${war.ear.name} dist.javadoc.dir=${dist.dir}/javadoc dist.war=${dist.dir}/${war.name} endorsed.classpath=\ - ${libs.javaee-endorsed-api-6.0.classpath} + ${libs.javaee-endorsed-api-7.0.classpath} excludes= includes=** j2ee.compile.on.save=true diff --git a/StackExchangeAuth/nbproject/project.xml b/StackExchangeAuth/nbproject/project.xml index c65e6bd6..897740c2 100644 --- a/StackExchangeAuth/nbproject/project.xml +++ b/StackExchangeAuth/nbproject/project.xml @@ -2,6 +2,7 @@ org.netbeans.modules.web.project + StackExchangeAuth 1.6.5 diff --git a/StackExchangeAuth/setup/glassfish-resources.xml b/StackExchangeAuth/setup/glassfish-resources.xml new file mode 100644 index 00000000..ffa78292 --- /dev/null +++ b/StackExchangeAuth/setup/glassfish-resources.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/StackExchangeAuth/src/java/Call.java b/StackExchangeAuth/src/java/Call.java new file mode 100644 index 00000000..2741ff68 --- /dev/null +++ b/StackExchangeAuth/src/java/Call.java @@ -0,0 +1,132 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Enumeration; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.Form; +import javax.ws.rs.core.MediaType; + +/** + * + * @author User + */ +@WebServlet(urlPatterns = {"/Call"}) +public class Call extends HttpServlet { + + /** + * Processes requests for both HTTP GET and POST methods. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("application/xml;charset=UTF-8"); + + Enumeration params = request.getParameterNames(); + int numberOfParams = 0; + while(params.hasMoreElements()) { + numberOfParams++; + params.nextElement(); + } + + if (numberOfParams == 3) { + String uname = request.getParameter("uname"); + String pass = request.getParameter("pass"); + + Form form = new Form(); + form.param("uname", uname); + form.param("pass", pass); + + Client client = ClientBuilder.newClient(); + String url = "http://localhost:21568/StackExchangeAuth/getToken"; + + try { + String result = client.target(url).request(MediaType.TEXT_PLAIN).post(Entity.entity(form, + MediaType.APPLICATION_FORM_URLENCODED), String.class); + + PrintWriter tw = response.getWriter(); + + tw.println(result); + tw.close(); + } + catch (Exception e) { + } + } + else if (numberOfParams == 2) { + String token_string = request.getParameter("token_string"); + + Form form = new Form(); + form.param("token_string", token_string); + + Client client = ClientBuilder.newClient(); + String url = "http://localhost:21568/StackExchangeAuth/validateToken"; + + try { + String result = client.target(url).request(MediaType.TEXT_PLAIN).post(Entity.entity(form, + MediaType.APPLICATION_FORM_URLENCODED), String.class); + + PrintWriter tw = response.getWriter(); + + tw.println(result); + tw.close(); + } + catch (Exception e) { + } + } + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} diff --git a/StackExchangeAuth/src/java/Config/DB.java b/StackExchangeAuth/src/java/Config/DB.java new file mode 100644 index 00000000..b4e1e7ed --- /dev/null +++ b/StackExchangeAuth/src/java/Config/DB.java @@ -0,0 +1,38 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package Config; + +import java.sql.Connection; +import java.sql.DriverManager; + +/** + * + * @author User + */ +public class DB { + private String hostParam; + private String user; + private String password; + + public DB() { + this.hostParam = "jdbc:mysql://localhost:3306/stackexchange2?zeroDateTimeBehaviour=convertToNull"; + this.user = "root"; + this.password = "dininta"; + } + + public Connection connect() { + Connection conn = null; + try { + Class.forName("com.mysql.jdbc.Driver"); + conn = (Connection) DriverManager.getConnection(hostParam, user, password); + } + catch (Exception e) { + e.printStackTrace(); + } + + return conn; + } +} diff --git a/StackExchangeAuth/src/java/Token/TokenGenerator.java b/StackExchangeAuth/src/java/Token/TokenGenerator.java new file mode 100644 index 00000000..fb3f378d --- /dev/null +++ b/StackExchangeAuth/src/java/Token/TokenGenerator.java @@ -0,0 +1,66 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package Token; + +import Config.DB; +import java.util.UUID; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.sql.Statement; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.logging.Level; +import java.util.logging.Logger; +/** + * + * @author User + */ +public class TokenGenerator { + private String token; + + private static String getCurrentTimeStamp() { + Calendar cal = Calendar.getInstance(); + Timestamp now = new Timestamp(cal.getTimeInMillis()); + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now); + } + + public TokenGenerator() {} + + public TokenGenerator(int lifetime) { + this.token = UUID.randomUUID().toString(); + + DB db = new DB(); + Connection conn = db.connect(); + + try { + Statement stmt; + stmt = conn.createStatement(); + String sql; + sql = "INSERT INTO token (token, date_create, valid_hour)VALUES (?, ?, ?)"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setString(1, token); + dbStatement.setString(2, getCurrentTimeStamp()); + dbStatement.setInt(3, lifetime); + + dbStatement.execute(); + + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + + } + } + + public String getToken() { + return token; + } +} + + diff --git a/StackExchangeAuth/src/java/Token/TokenModel.java b/StackExchangeAuth/src/java/Token/TokenModel.java new file mode 100644 index 00000000..976894b9 --- /dev/null +++ b/StackExchangeAuth/src/java/Token/TokenModel.java @@ -0,0 +1,41 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package Token; + +import java.io.StringWriter; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.XmlElement; + +/** + * + * @author User + */ + +@XmlRootElement(name = "tokenModel") +@XmlType(propOrder = { "token" }) +public class TokenModel { + @XmlElement(name="token", required=true) + private String token; + + public TokenModel() { + TokenGenerator tgin = new TokenGenerator(6); + this.token = tgin.getToken(); + } + + public TokenModel(int lifetime) { + TokenGenerator tgin = new TokenGenerator(lifetime); + this.token = tgin.getToken(); + } + + @XmlElement + public String getToken() { + return this.token; + } +} diff --git a/StackExchangeAuth/src/java/Token/TokenValidator.java b/StackExchangeAuth/src/java/Token/TokenValidator.java new file mode 100644 index 00000000..d92b950a --- /dev/null +++ b/StackExchangeAuth/src/java/Token/TokenValidator.java @@ -0,0 +1,54 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package Token; + +import Config.DB; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + + +/** + * + * @author User + */ +public class TokenValidator { + public static Boolean validateToken(String token) { + + DB db = new DB(); + Connection conn = db.connect(); + String token_db; + String date; + + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "SELECT date_create FROM account where token = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setString(1, token); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + date = rs.getString("date_create"); + } + rs.close(); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + } + + return false; + } +} diff --git a/StackExchangeAuth/src/java/deleteToken.java b/StackExchangeAuth/src/java/deleteToken.java new file mode 100644 index 00000000..bda3e48c --- /dev/null +++ b/StackExchangeAuth/src/java/deleteToken.java @@ -0,0 +1,109 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +import Config.DB; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.sql.Statement; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * + * @author User + */ +@WebServlet(urlPatterns = {"/deleteToken"}) +public class deleteToken extends HttpServlet { + + /** + * Processes requests for both HTTP GET and POST methods. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("text/html;charset=UTF-8"); + + String uname = request.getParameter("uname"); + + DB db = new DB(); + + PrintWriter tw = response.getWriter(); + + try { + + Connection conn = db.connect(); + + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "DELETE FROM token WHERE username = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setString(1, uname); + + dbStatement.execute(); + + tw.println("Success"); + + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + tw.println("Failed"); + } + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} diff --git a/StackExchangeAuth/src/java/getToken.java b/StackExchangeAuth/src/java/getToken.java new file mode 100644 index 00000000..6a6fdc12 --- /dev/null +++ b/StackExchangeAuth/src/java/getToken.java @@ -0,0 +1,179 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +import Config.DB; +import Token.TokenModel; +import java.io.IOException; +import java.io.PrintWriter; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + * @author User + */ +@WebServlet(urlPatterns = {"/getToken"}) +public class getToken extends HttpServlet { + + private static String getCurrentTimeStamp() { + Calendar cal = Calendar.getInstance(); + Timestamp now = new Timestamp(cal.getTimeInMillis()); + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now); + } + + + /** + * Processes requests for both HTTP GET and POST methods. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("application/xml;charset=UTF-8"); + + String uname = request.getParameter("uname"); + String pass = request.getParameter("pass"); + String password = ""; + + PrintWriter tw = response.getWriter(); + + DB db = new DB(); + + if (uname.equals("") || pass.equals("")) { + tw.println("" + + "Failed" + + ""); + return; + } + try { + + Connection conn = db.connect(); + + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "SELECT password FROM account where username = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setString(1, uname); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + password = rs.getString("password"); + } + rs.close(); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + } + + TokenModel token; + + if (password.equals(pass)) { + + try { + + token = new TokenModel(); + String tkn = token.getToken(); + + Connection conn = db.connect(); + + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "INSERT INTO token(token_string, date_create, username)" + " VALUES (?, ?, ?)"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setString(1, tkn); + dbStatement.setString(2, getCurrentTimeStamp()); + dbStatement.setString(3, uname); + + dbStatement.execute(); + + stmt.close(); + conn.close(); + + tw.println("" + + ""+ tkn +"" + + ""); + tw.close(); + } + catch(SQLException ex) { + } + + tw.println("" + + "Failed" + + ""); + } + else { + tw.println("" + + "Failed" + + ""); + } + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} diff --git a/StackExchangeAuth/src/java/validateToken.java b/StackExchangeAuth/src/java/validateToken.java new file mode 100644 index 00000000..e7e9c8e7 --- /dev/null +++ b/StackExchangeAuth/src/java/validateToken.java @@ -0,0 +1,164 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +import Config.DB; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * + * @author User + */ +@WebServlet(urlPatterns = {"/validateToken"}) +public class validateToken extends HttpServlet { + + private static String getCurrentTimeStamp() { + Calendar cal = Calendar.getInstance(); + Timestamp now = new Timestamp(cal.getTimeInMillis()); + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now); + } + + private Boolean isValid(String date_create, int valid_hour) { + + try{ + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date parsedDate = dateFormat.parse(date_create); + Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime()); + long msDC = timestamp.getTime(); + + Date parsedDateNow = dateFormat.parse(getCurrentTimeStamp()); + Timestamp timestampNow = new java.sql.Timestamp(parsedDateNow.getTime()); + long msNow = timestampNow.getTime(); + + long diffHours = ((msNow - msDC) / (1000)); + if (diffHours < (long) (valid_hour * 60 * 60)) + return true; + + }catch(Exception e){ + + } + + return false; + } + + /** + * Processes requests for both HTTP GET and POST methods. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("text/html;charset=UTF-8"); + + String token_string = request.getParameter("token_string"); + + PrintWriter tw = response.getWriter(); + + DB db = new DB(); + + int valid_hour = 0; + String date_create = null; + String username = null; + + try { + Connection conn = db.connect(); + + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "SELECT date_create,valid_hour,username FROM token where token_string = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setString(1, token_string); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + valid_hour = rs.getInt("valid_hour"); + date_create = rs.getString("date_create"); + username = rs.getString("username"); + } + rs.close(); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + } + + if (valid_hour != 0 && token_string != null) { + tw.println(""); + tw.println("" + date_create + ""); + tw.println("" + valid_hour + ""); + tw.println("" + isValid(date_create, valid_hour) + ""); + tw.println("" + username + ""); + tw.println(""); + } + else { + tw.println("false"); + } + tw.close(); + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} diff --git a/StackExchangeAuth/web/WEB-INF/web.xml b/StackExchangeAuth/web/WEB-INF/web.xml new file mode 100644 index 00000000..652f33c1 --- /dev/null +++ b/StackExchangeAuth/web/WEB-INF/web.xml @@ -0,0 +1,12 @@ + + + + + + 30 + + + diff --git a/StackExchangeAuth/web/index.html b/StackExchangeAuth/web/index.html index f07133b1..ec61489f 100644 --- a/StackExchangeAuth/web/index.html +++ b/StackExchangeAuth/web/index.html @@ -11,6 +11,28 @@ -
TODO write content
+

Create token

+
+ + + +
+ +
+
+

Check token

+
+ + +
+ +
+
+

Delete Token by Username

+
+ + +
+ From 170fcc0e823279da73e22c62c3402d2214ecd05c Mon Sep 17 00:00:00 2001 From: dininta Date: Sat, 5 Dec 2015 12:16:27 +0700 Subject: [PATCH 06/26] Initialize StackExchangeClient project --- StackExchangeClient/catalog.xml | 9 + StackExchangeClient/nbproject/build-impl.xml | 10 +- .../nbproject/genfiles.properties | 7 +- StackExchangeClient/nbproject/jax-ws.xml | 102 ++++++ StackExchangeClient/nbproject/jaxws-build.xml | 78 +++++ .../nbproject/project.properties | 7 +- StackExchangeClient/nbproject/project.xml | 20 +- .../StackExchangeService/AnswerWS.wsdl | 188 ++++++++++ .../StackExchangeService/AnswerWS.xsd_1.xsd | 166 +++++++++ .../StackExchangeService/QuestionWS.wsdl | 321 ++++++++++++++++++ .../StackExchangeService/QuestionWS.xsd_1.xsd | 282 +++++++++++++++ .../StackExchangeService/UserWs.wsdl | 55 +++ .../StackExchangeService/UserWs.xsd_1.xsd | 37 ++ .../src/java/Servlet/addanswer.java | 100 ++++++ .../src/java/Servlet/askquestion.java | 101 ++++++ .../src/java/Servlet/deletequestion.java | 85 +++++ .../src/java/Servlet/editquestion.java | 73 ++++ .../src/java/Servlet/index.java | 109 ++++++ .../src/java/Servlet/login.java | 101 ++++++ .../src/java/Servlet/logout.java | 102 ++++++ .../src/java/Servlet/register.java | 90 +++++ .../src/java/Servlet/saveeditedquestion.java | 102 ++++++ .../src/java/Servlet/viewpost.java | 114 +++++++ .../src/java/Servlet/voteanswer.java | 117 +++++++ .../src/java/Servlet/votequestion.java | 117 +++++++ .../web/WEB-INF/jax-ws-catalog.xml | 9 + StackExchangeClient/web/WEB-INF/web.xml | 112 ++++++ .../StackExchangeService/AnswerWS.wsdl | 188 ++++++++++ .../StackExchangeService/AnswerWS.xsd_1.xsd | 166 +++++++++ .../StackExchangeService/QuestionWS.wsdl | 321 ++++++++++++++++++ .../StackExchangeService/QuestionWS.xsd_1.xsd | 282 +++++++++++++++ .../StackExchangeService/UserWs.wsdl | 55 +++ .../StackExchangeService/UserWs.xsd_1.xsd | 37 ++ StackExchangeClient/web/askquestion.jsp | 57 ++++ StackExchangeClient/web/editquestion.jsp | 29 ++ StackExchangeClient/web/images/down.png | Bin 0 -> 817 bytes StackExchangeClient/web/images/up.png | Bin 0 -> 753 bytes StackExchangeClient/web/index.html | 16 - StackExchangeClient/web/index.jsp | 91 +++++ StackExchangeClient/web/register.jsp | 25 ++ StackExchangeClient/web/style.css | 192 +++++++++++ StackExchangeClient/web/viewpost.jsp | 118 +++++++ 42 files changed, 4165 insertions(+), 26 deletions(-) create mode 100644 StackExchangeClient/catalog.xml create mode 100644 StackExchangeClient/nbproject/jax-ws.xml create mode 100644 StackExchangeClient/nbproject/jaxws-build.xml create mode 100644 StackExchangeClient/src/conf/xml-resources/web-service-references/AnswerWS/wsdl/localhost_15534/StackExchangeService/AnswerWS.wsdl create mode 100644 StackExchangeClient/src/conf/xml-resources/web-service-references/AnswerWS/wsdl/localhost_15534/StackExchangeService/AnswerWS.xsd_1.xsd create mode 100644 StackExchangeClient/src/conf/xml-resources/web-service-references/QuestionWS/wsdl/localhost_15534/StackExchangeService/QuestionWS.wsdl create mode 100644 StackExchangeClient/src/conf/xml-resources/web-service-references/QuestionWS/wsdl/localhost_15534/StackExchangeService/QuestionWS.xsd_1.xsd create mode 100644 StackExchangeClient/src/conf/xml-resources/web-service-references/UserWs/wsdl/localhost_15534/StackExchangeService/UserWs.wsdl create mode 100644 StackExchangeClient/src/conf/xml-resources/web-service-references/UserWs/wsdl/localhost_15534/StackExchangeService/UserWs.xsd_1.xsd create mode 100644 StackExchangeClient/src/java/Servlet/addanswer.java create mode 100644 StackExchangeClient/src/java/Servlet/askquestion.java create mode 100644 StackExchangeClient/src/java/Servlet/deletequestion.java create mode 100644 StackExchangeClient/src/java/Servlet/editquestion.java create mode 100644 StackExchangeClient/src/java/Servlet/index.java create mode 100644 StackExchangeClient/src/java/Servlet/login.java create mode 100644 StackExchangeClient/src/java/Servlet/logout.java create mode 100644 StackExchangeClient/src/java/Servlet/register.java create mode 100644 StackExchangeClient/src/java/Servlet/saveeditedquestion.java create mode 100644 StackExchangeClient/src/java/Servlet/viewpost.java create mode 100644 StackExchangeClient/src/java/Servlet/voteanswer.java create mode 100644 StackExchangeClient/src/java/Servlet/votequestion.java create mode 100644 StackExchangeClient/web/WEB-INF/jax-ws-catalog.xml create mode 100644 StackExchangeClient/web/WEB-INF/web.xml create mode 100644 StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/AnswerWS.wsdl create mode 100644 StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/AnswerWS.xsd_1.xsd create mode 100644 StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/QuestionWS.wsdl create mode 100644 StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/QuestionWS.xsd_1.xsd create mode 100644 StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/UserWs.wsdl create mode 100644 StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/UserWs.xsd_1.xsd create mode 100644 StackExchangeClient/web/askquestion.jsp create mode 100644 StackExchangeClient/web/editquestion.jsp create mode 100644 StackExchangeClient/web/images/down.png create mode 100644 StackExchangeClient/web/images/up.png delete mode 100644 StackExchangeClient/web/index.html create mode 100644 StackExchangeClient/web/index.jsp create mode 100644 StackExchangeClient/web/register.jsp create mode 100644 StackExchangeClient/web/style.css create mode 100644 StackExchangeClient/web/viewpost.jsp diff --git a/StackExchangeClient/catalog.xml b/StackExchangeClient/catalog.xml new file mode 100644 index 00000000..12df646c --- /dev/null +++ b/StackExchangeClient/catalog.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/StackExchangeClient/nbproject/build-impl.xml b/StackExchangeClient/nbproject/build-impl.xml index 8030221f..5ecf5bba 100644 --- a/StackExchangeClient/nbproject/build-impl.xml +++ b/StackExchangeClient/nbproject/build-impl.xml @@ -18,6 +18,7 @@ --> + @@ -855,7 +856,7 @@ exists or setup the property manually. For example like this: - + @@ -997,10 +998,15 @@ exists or setup the property manually. For example like this: + + - + + + + diff --git a/StackExchangeClient/nbproject/genfiles.properties b/StackExchangeClient/nbproject/genfiles.properties index 9109a408..778cac8b 100644 --- a/StackExchangeClient/nbproject/genfiles.properties +++ b/StackExchangeClient/nbproject/genfiles.properties @@ -1,8 +1,9 @@ -build.xml.data.CRC32=712c2934 +build.xml.data.CRC32=0ff9d5ea build.xml.script.CRC32=fd046825 build.xml.stylesheet.CRC32=651128d4@1.68.1.1 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. -nbproject/build-impl.xml.data.CRC32=712c2934 -nbproject/build-impl.xml.script.CRC32=2da1b101 +nbproject/build-impl.xml.data.CRC32=0ff9d5ea +nbproject/build-impl.xml.script.CRC32=8899babf nbproject/build-impl.xml.stylesheet.CRC32=99ea4b56@1.68.1.1 +nbproject/jaxws-build.xml.stylesheet.CRC32=6608c2cf diff --git a/StackExchangeClient/nbproject/jax-ws.xml b/StackExchangeClient/nbproject/jax-ws.xml new file mode 100644 index 00000000..5737fb39 --- /dev/null +++ b/StackExchangeClient/nbproject/jax-ws.xml @@ -0,0 +1,102 @@ + + + + + + http://localhost:15534/StackExchangeService/AnswerWS?wsdl + localhost_15534/StackExchangeService/AnswerWS.wsdl + answermodel + catalog.xml + + + extension + true + + + verbose + true + + + fork + false + + + wsdlLocation + http://localhost:15534/StackExchangeService/AnswerWS?wsdl + + + xnocompile + true + + + xendorsed + true + + + + + http://localhost:15534/StackExchangeService/UserWs?wsdl + localhost_15534/StackExchangeService/UserWs.wsdl + usermodel + catalog.xml + + + extension + true + + + verbose + true + + + fork + false + + + wsdlLocation + http://localhost:15534/StackExchangeService/UserWs?wsdl + + + xnocompile + true + + + xendorsed + true + + + + + http://localhost:15534/StackExchangeService/QuestionWS?wsdl + localhost_15534/StackExchangeService/QuestionWS.wsdl + questionmodel + catalog.xml + + + extension + true + + + verbose + true + + + fork + false + + + wsdlLocation + http://localhost:15534/StackExchangeService/QuestionWS?wsdl + + + xnocompile + true + + + xendorsed + true + + + + + diff --git a/StackExchangeClient/nbproject/jaxws-build.xml b/StackExchangeClient/nbproject/jaxws-build.xml new file mode 100644 index 00000000..e7142e09 --- /dev/null +++ b/StackExchangeClient/nbproject/jaxws-build.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/StackExchangeClient/nbproject/project.properties b/StackExchangeClient/nbproject/project.properties index 879194d7..6102da48 100644 --- a/StackExchangeClient/nbproject/project.properties +++ b/StackExchangeClient/nbproject/project.properties @@ -28,6 +28,8 @@ dist.war=${dist.dir}/${war.name} endorsed.classpath=\ ${libs.javaee-endorsed-api-6.0.classpath} excludes= +file.reference.org-netbeans-modules-java-j2seproject-copylibstask.jar=C:\\Program Files\\NetBeans 8.0.2\\java\\ant\\extra\\org-netbeans-modules-java-j2seproject-copylibstask.jar +file.reference.org-netbeans-modules-javawebstart-anttasks.jar=C:\\Program Files\\NetBeans 8.0.2\\java\\ant\\extra\\org-netbeans-modules-javawebstart-anttasks.jar includes=** j2ee.compile.on.save=true j2ee.copy.static.files.on.save=true @@ -41,7 +43,9 @@ j2ee.platform.wsimport.classpath=${j2ee.server.home}/modules/webservices-osgi.ja j2ee.platform.wsit.classpath= j2ee.server.type=gfv3ee6 jar.compress=false -javac.classpath= +javac.classpath=\ + ${file.reference.org-netbeans-modules-java-j2seproject-copylibstask.jar}:\ + ${file.reference.org-netbeans-modules-javawebstart-anttasks.jar} # Space-separated list of extra javac options javac.compilerargs= javac.debug=true @@ -68,7 +72,6 @@ javadoc.use=true javadoc.version=false javadoc.windowtitle= lib.dir=${web.docbase.dir}/WEB-INF/lib -no.dependencies=false persistence.xml.dir=${conf.dir} platform.active=default_platform resource.dir=setup diff --git a/StackExchangeClient/nbproject/project.xml b/StackExchangeClient/nbproject/project.xml index 5e2d105b..3264576e 100644 --- a/StackExchangeClient/nbproject/project.xml +++ b/StackExchangeClient/nbproject/project.xml @@ -2,16 +2,30 @@ org.netbeans.modules.web.project + + + + + StackExchangeClient 1.6.5 - + + + ${file.reference.org-netbeans-modules-java-j2seproject-copylibstask.jar} + WEB-INF/lib + + + ${file.reference.org-netbeans-modules-javawebstart-anttasks.jar} + WEB-INF/lib + + - + - + diff --git a/StackExchangeClient/src/conf/xml-resources/web-service-references/AnswerWS/wsdl/localhost_15534/StackExchangeService/AnswerWS.wsdl b/StackExchangeClient/src/conf/xml-resources/web-service-references/AnswerWS/wsdl/localhost_15534/StackExchangeService/AnswerWS.wsdl new file mode 100644 index 00000000..dd1781c6 --- /dev/null +++ b/StackExchangeClient/src/conf/xml-resources/web-service-references/AnswerWS/wsdl/localhost_15534/StackExchangeService/AnswerWS.wsdl @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/StackExchangeClient/src/conf/xml-resources/web-service-references/AnswerWS/wsdl/localhost_15534/StackExchangeService/AnswerWS.xsd_1.xsd b/StackExchangeClient/src/conf/xml-resources/web-service-references/AnswerWS/wsdl/localhost_15534/StackExchangeService/AnswerWS.xsd_1.xsd new file mode 100644 index 00000000..4d2ce6a1 --- /dev/null +++ b/StackExchangeClient/src/conf/xml-resources/web-service-references/AnswerWS/wsdl/localhost_15534/StackExchangeService/AnswerWS.xsd_1.xsd @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/StackExchangeClient/src/conf/xml-resources/web-service-references/QuestionWS/wsdl/localhost_15534/StackExchangeService/QuestionWS.wsdl b/StackExchangeClient/src/conf/xml-resources/web-service-references/QuestionWS/wsdl/localhost_15534/StackExchangeService/QuestionWS.wsdl new file mode 100644 index 00000000..581d1a62 --- /dev/null +++ b/StackExchangeClient/src/conf/xml-resources/web-service-references/QuestionWS/wsdl/localhost_15534/StackExchangeService/QuestionWS.wsdl @@ -0,0 +1,321 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/StackExchangeClient/src/conf/xml-resources/web-service-references/QuestionWS/wsdl/localhost_15534/StackExchangeService/QuestionWS.xsd_1.xsd b/StackExchangeClient/src/conf/xml-resources/web-service-references/QuestionWS/wsdl/localhost_15534/StackExchangeService/QuestionWS.xsd_1.xsd new file mode 100644 index 00000000..d60b68f7 --- /dev/null +++ b/StackExchangeClient/src/conf/xml-resources/web-service-references/QuestionWS/wsdl/localhost_15534/StackExchangeService/QuestionWS.xsd_1.xsd @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/StackExchangeClient/src/conf/xml-resources/web-service-references/UserWs/wsdl/localhost_15534/StackExchangeService/UserWs.wsdl b/StackExchangeClient/src/conf/xml-resources/web-service-references/UserWs/wsdl/localhost_15534/StackExchangeService/UserWs.wsdl new file mode 100644 index 00000000..a79588e3 --- /dev/null +++ b/StackExchangeClient/src/conf/xml-resources/web-service-references/UserWs/wsdl/localhost_15534/StackExchangeService/UserWs.wsdl @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/StackExchangeClient/src/conf/xml-resources/web-service-references/UserWs/wsdl/localhost_15534/StackExchangeService/UserWs.xsd_1.xsd b/StackExchangeClient/src/conf/xml-resources/web-service-references/UserWs/wsdl/localhost_15534/StackExchangeService/UserWs.xsd_1.xsd new file mode 100644 index 00000000..101dfbd0 --- /dev/null +++ b/StackExchangeClient/src/conf/xml-resources/web-service-references/UserWs/wsdl/localhost_15534/StackExchangeService/UserWs.xsd_1.xsd @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/StackExchangeClient/src/java/Servlet/addanswer.java b/StackExchangeClient/src/java/Servlet/addanswer.java new file mode 100644 index 00000000..7f077fbe --- /dev/null +++ b/StackExchangeClient/src/java/Servlet/addanswer.java @@ -0,0 +1,100 @@ +package Servlet; + +import answermodel.AnswerWS_Service; +import java.io.IOException; +import javax.servlet.ServletException; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.ws.WebServiceRef; + +public class addanswer extends HttpServlet { + @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_15534/StackExchangeService/AnswerWS.wsdl") + private AnswerWS_Service service; + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + int idQuestion = Integer.parseInt(request.getParameter("idQuestion")); + boolean found = false; + int i=0; + Cookie[] cookies = null; + cookies = request.getCookies(); + Boolean token_expired = false; + if (cookies != null) { + while (!found && i < cookies.length){ + if (cookies[i].getName().equals("tokenCookie")) { + String token = cookies[i].getValue(); + String content = request.getParameter("content"); + if (createAnswer(idQuestion,content,token)) { + token_expired = true; + } + found = true; + } + i++; + } + } + if (token_expired) { + int count = 0; + i = 0; + while (count<2 && i + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + + private Boolean createAnswer(int idQuestion, java.lang.String content, java.lang.String token) { + // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. + // If the calling of port operations may lead to race condition some synchronization is required. + answermodel.AnswerWS port = service.getAnswerWSPort(); + return port.createAnswer(idQuestion, content, token); + } + +} diff --git a/StackExchangeClient/src/java/Servlet/askquestion.java b/StackExchangeClient/src/java/Servlet/askquestion.java new file mode 100644 index 00000000..d36f34fb --- /dev/null +++ b/StackExchangeClient/src/java/Servlet/askquestion.java @@ -0,0 +1,101 @@ +package Servlet; + +import java.io.IOException; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.ws.WebServiceRef; +import questionmodel.QuestionWS_Service; + +@WebServlet(name = "askquestion", urlPatterns = {"/askquestion"}) +public class askquestion extends HttpServlet { + @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_15534/StackExchangeService/QuestionWS.wsdl") + private QuestionWS_Service service; + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + boolean found = false; + int i=0; + boolean token_expired = false; + + Cookie[] cookies = null; + cookies = request.getCookies(); + if (cookies != null) { + while (!found && i < cookies.length){ + if (cookies[i].getName().equals("tokenCookie")) { + String token = cookies[i].getValue(); + String topic = request.getParameter("topic"); + String content = request.getParameter("content"); + if (createQuestion(topic,token,content)) + token_expired = true; + found = true; + } + i++; + } + } + + if (token_expired) { + int count = 0; + i = 0; + while (count<2 && i + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + + private Boolean createQuestion(java.lang.String topic, java.lang.String token, java.lang.String content) { + // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. + // If the calling of port operations may lead to race condition some synchronization is required. + questionmodel.QuestionWS port = service.getQuestionWSPort(); + return port.createQuestion(topic, token, content); + } + +} diff --git a/StackExchangeClient/src/java/Servlet/deletequestion.java b/StackExchangeClient/src/java/Servlet/deletequestion.java new file mode 100644 index 00000000..10855cf7 --- /dev/null +++ b/StackExchangeClient/src/java/Servlet/deletequestion.java @@ -0,0 +1,85 @@ +package Servlet; + +import java.io.IOException; +import java.io.PrintWriter; +import javax.servlet.ServletException; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.ws.WebServiceRef; +import questionmodel.QuestionWS_Service; + +public class deletequestion extends HttpServlet { + @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_15534/StackExchangeService/QuestionWS.wsdl") + private QuestionWS_Service service; + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // Get token + String token = ""; + boolean found = false; + int i=0; + Cookie[] cookies = null; + cookies = request.getCookies(); + if (cookies != null) { + while (!found && i < cookies.length){ + if (cookies[i].getName().equals("tokenCookie")) { + token = cookies[i].getValue(); + found = true; + } + i++; + } + } + + int id = Integer.parseInt(request.getParameter("id")); + deleteQuestionById(id,token); + response.sendRedirect("index"); + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + + private Boolean deleteQuestionById(int qid, java.lang.String token) { + // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. + // If the calling of port operations may lead to race condition some synchronization is required. + questionmodel.QuestionWS port = service.getQuestionWSPort(); + return port.deleteQuestionById(qid, token); + } + +} diff --git a/StackExchangeClient/src/java/Servlet/editquestion.java b/StackExchangeClient/src/java/Servlet/editquestion.java new file mode 100644 index 00000000..91baaed3 --- /dev/null +++ b/StackExchangeClient/src/java/Servlet/editquestion.java @@ -0,0 +1,73 @@ +package Servlet; + +import java.io.IOException; +import java.io.PrintWriter; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.ws.WebServiceRef; +import questionmodel.QuestionWS_Service; + +public class editquestion extends HttpServlet { + @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_15534/StackExchangeService/QuestionWS.wsdl") + private QuestionWS_Service service; + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("text/html;charset=UTF-8"); + int id = Integer.parseInt(request.getParameter("id")); + java.util.List result = getQuestionByQID(id); + request.setAttribute("result", result); + + RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/editquestion.jsp"); + dispatcher.forward(request, response); + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + + private java.util.List getQuestionByQID(int qid) { + // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. + // If the calling of port operations may lead to race condition some synchronization is required. + questionmodel.QuestionWS port = service.getQuestionWSPort(); + return port.getQuestionByQID(qid); + } + +} diff --git a/StackExchangeClient/src/java/Servlet/index.java b/StackExchangeClient/src/java/Servlet/index.java new file mode 100644 index 00000000..01246580 --- /dev/null +++ b/StackExchangeClient/src/java/Servlet/index.java @@ -0,0 +1,109 @@ +package Servlet; + +import questionmodel.QuestionWS_Service; +import java.io.IOException; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.ws.WebServiceRef; + +public class index extends HttpServlet { + @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_15534/StackExchangeService/QuestionWS.wsdl") + private QuestionWS_Service service; + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + // Check if already log in + boolean found = false; + int i=0; + Cookie[] cookies = null; + cookies = request.getCookies(); + if (cookies != null) { + while (!found && i < cookies.length){ + if (cookies[i].getName().equals("usernameCookie")) { + request.setAttribute("username", cookies[i].getValue()); + found = true; + } + i++; + } + } + + String keyword = request.getParameter("keyword"); + if (keyword == null) { + java.util.List result = getQuestions(); + request.setAttribute("result", result); + RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/index.jsp"); + dispatcher.forward(request, response); + } + else { + java.util.List result = searchQuestion(keyword); + request.setAttribute("result", result); + RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/index.jsp"); + dispatcher.forward(request, response); + } + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + + private java.util.List getQuestions() { + // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. + // If the calling of port operations may lead to race condition some synchronization is required. + questionmodel.QuestionWS port = service.getQuestionWSPort(); + return port.getQuestions(); + } + + private int getAnswerById(int qid) { + // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. + // If the calling of port operations may lead to race condition some synchronization is required. + questionmodel.QuestionWS port = service.getQuestionWSPort(); + return port.getAnswerById(qid); + } + + private java.util.List searchQuestion(java.lang.String keyword) { + // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. + // If the calling of port operations may lead to race condition some synchronization is required. + questionmodel.QuestionWS port = service.getQuestionWSPort(); + return port.searchQuestion(keyword); + } + +} diff --git a/StackExchangeClient/src/java/Servlet/login.java b/StackExchangeClient/src/java/Servlet/login.java new file mode 100644 index 00000000..4f97e5e0 --- /dev/null +++ b/StackExchangeClient/src/java/Servlet/login.java @@ -0,0 +1,101 @@ +package Servlet; + +import java.io.IOException; +import java.io.StringReader; +import javax.servlet.ServletException; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.Form; +import javax.ws.rs.core.MediaType; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import org.w3c.dom.Document; +import org.xml.sax.InputSource; +import org.w3c.dom.*; + +public class login extends HttpServlet { + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + response.setContentType("application/xml;charset=UTF-8"); + String uname = request.getParameter("user"); + String pass = request.getParameter("pass"); + + Form form = new Form(); + form.param("uname", uname); + form.param("pass", pass); + + Client client = ClientBuilder.newClient(); + String url = "http://localhost:21568/StackExchangeAuth/getToken"; + + try { + String result = client.target(url).request(MediaType.APPLICATION_XML).post(Entity.entity(form,MediaType.APPLICATION_FORM_URLENCODED), String.class); + + // Get token from xml file + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document document = builder.parse(new InputSource(new StringReader(result))); + NodeList nlist=document.getElementsByTagName("token"); + String token = nlist.item(0).getFirstChild().getNodeValue(); + + if (!token.equals("Failed")) { + Cookie tokenCookie = new Cookie("tokenCookie", token); + tokenCookie.setMaxAge(6*60*60); + tokenCookie.setPath("/"); + response.addCookie(tokenCookie); + + Cookie usernameCookie = new Cookie("usernameCookie", uname); + usernameCookie.setMaxAge(6*60*60); + usernameCookie.setPath("/"); + response.addCookie(usernameCookie); + } + response.sendRedirect("index"); + } + catch (Exception e) {} + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} diff --git a/StackExchangeClient/src/java/Servlet/logout.java b/StackExchangeClient/src/java/Servlet/logout.java new file mode 100644 index 00000000..0f875ca3 --- /dev/null +++ b/StackExchangeClient/src/java/Servlet/logout.java @@ -0,0 +1,102 @@ +package Servlet; + +import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringReader; +import javax.servlet.ServletException; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.Form; +import javax.ws.rs.core.MediaType; + +public class logout extends HttpServlet { + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("text/html;charset=UTF-8"); + + boolean found = false; + int i = 0; + String uname = ""; + Cookie[] cookies = null; + cookies = request.getCookies(); + if (cookies == null) + response.sendRedirect("index"); + while (!found && i + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} diff --git a/StackExchangeClient/src/java/Servlet/register.java b/StackExchangeClient/src/java/Servlet/register.java new file mode 100644 index 00000000..ecef8b5d --- /dev/null +++ b/StackExchangeClient/src/java/Servlet/register.java @@ -0,0 +1,90 @@ +package Servlet; + +import java.io.IOException; +import java.io.PrintWriter; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.ws.WebServiceRef; +import usermodel.UserWs_Service; + +public class register extends HttpServlet { + @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_15534/StackExchangeService/UserWs.wsdl") + private UserWs_Service service; + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + String name = request.getParameter("name"); + String username = request.getParameter("username"); + String email = request.getParameter("email"); + String password = request.getParameter("password"); + String confirmpassword = request.getParameter("confirmpassword"); + if (password.equals(confirmpassword)) { + if (createAccount(username,password,email,name)) { + PrintWriter out = response.getWriter(); + response.setContentType("text/html"); + out.println(""); + } + else + response.sendRedirect("index"); + } + else { + PrintWriter out = response.getWriter(); + response.setContentType("text/html"); + out.println(""); + } + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + + private boolean createAccount(java.lang.String username, java.lang.String password, java.lang.String email, java.lang.String nama) { + // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. + // If the calling of port operations may lead to race condition some synchronization is required. + usermodel.UserWs port = service.getUserWsPort(); + return port.createAccount(username, password, email, nama); + } + +} diff --git a/StackExchangeClient/src/java/Servlet/saveeditedquestion.java b/StackExchangeClient/src/java/Servlet/saveeditedquestion.java new file mode 100644 index 00000000..9a19437d --- /dev/null +++ b/StackExchangeClient/src/java/Servlet/saveeditedquestion.java @@ -0,0 +1,102 @@ +package Servlet; + +import java.io.IOException; +import javax.servlet.ServletException; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.ws.WebServiceRef; +import questionmodel.QuestionWS_Service; + +public class saveeditedquestion extends HttpServlet { + @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_15534/StackExchangeService/QuestionWS.wsdl") + private QuestionWS_Service service; + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + // Get token + String token = ""; + boolean found = false; + int i=0; + Cookie[] cookies = null; + cookies = request.getCookies(); + if (cookies != null) { + while (!found && i < cookies.length){ + if (cookies[i].getName().equals("tokenCookie")) { + token = cookies[i].getValue(); + found = true; + } + i++; + } + } + + Boolean token_expired = false; + int id = Integer.parseInt(request.getParameter("id")); + String topic = request.getParameter("topic"); + String content = request.getParameter("content"); + if (editQuestion(id,topic,token,content)) + token_expired = true; + if (token_expired) { + int count = 0; + i = 0; + while (count<2 && i + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + + private Boolean editQuestion(int qid, java.lang.String topic, java.lang.String token, java.lang.String content) { + // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. + // If the calling of port operations may lead to race condition some synchronization is required. + questionmodel.QuestionWS port = service.getQuestionWSPort(); + return port.editQuestion(qid, topic, token, content); + } + +} diff --git a/StackExchangeClient/src/java/Servlet/viewpost.java b/StackExchangeClient/src/java/Servlet/viewpost.java new file mode 100644 index 00000000..0e8f45a0 --- /dev/null +++ b/StackExchangeClient/src/java/Servlet/viewpost.java @@ -0,0 +1,114 @@ +package Servlet; + +import questionmodel.QuestionWS_Service; +import answermodel.Answer; +import answermodel.AnswerWS_Service; +import java.io.IOException; +import java.util.List; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.ws.WebServiceRef; + +public class viewpost extends HttpServlet { + @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_15534/StackExchangeService/AnswerWS.wsdl") + private AnswerWS_Service service_1; + @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_15534/StackExchangeService/QuestionWS.wsdl") + private QuestionWS_Service service; + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + // Check if already log in + boolean found = false; + int i=0; + Cookie[] cookies = null; + cookies = request.getCookies(); + if (cookies != null) { + while (!found && i < cookies.length){ + if (cookies[i].getName().equals("usernameCookie")) { + request.setAttribute("username", cookies[i].getValue()); + found = true; + } + i++; + } + } + + int id = Integer.parseInt(request.getParameter("id")); + + java.util.List result = getQuestionByQID(id); + request.setAttribute("result", result); + + List answers = getAnswerByQID(id); + request.setAttribute("answers", answers); + + int count = getAnswerById(id); + request.setAttribute("count", count); + + RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/viewpost.jsp"); + dispatcher.forward(request, response); + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + + private java.util.List getQuestionByQID(int qid) { + // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. + // If the calling of port operations may lead to race condition some synchronization is required. + questionmodel.QuestionWS port = service.getQuestionWSPort(); + return port.getQuestionByQID(qid); + } + + private java.util.List getAnswerByQID(int qid) { + // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. + // If the calling of port operations may lead to race condition some synchronization is required. + answermodel.AnswerWS port = service_1.getAnswerWSPort(); + return port.getAnswerByQID(qid); + } + + private int getAnswerById(int qid) { + // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. + // If the calling of port operations may lead to race condition some synchronization is required. + questionmodel.QuestionWS port = service.getQuestionWSPort(); + return port.getAnswerById(qid); + } + +} diff --git a/StackExchangeClient/src/java/Servlet/voteanswer.java b/StackExchangeClient/src/java/Servlet/voteanswer.java new file mode 100644 index 00000000..51830f74 --- /dev/null +++ b/StackExchangeClient/src/java/Servlet/voteanswer.java @@ -0,0 +1,117 @@ +package Servlet; + +import answermodel.AnswerWS_Service; +import java.io.IOException; +import javax.servlet.ServletException; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.ws.WebServiceRef; + +public class voteanswer extends HttpServlet { + @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_15534/StackExchangeService/AnswerWS.wsdl") + private AnswerWS_Service service; + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + String token = ""; + int id_answer = Integer.parseInt(request.getParameter("id_answer")); + int id_question = Integer.parseInt(request.getParameter("id_question")); + boolean found = false; + int i=0; + Cookie[] cookies = null; + cookies = request.getCookies(); + if (cookies != null) { + while (!found && i < cookies.length){ + if (cookies[i].getName().equals("tokenCookie")) { + token = cookies[i].getValue(); + found = true; + } + i++; + } + } + if (isValidToken(token)) { + int k = Integer.parseInt(request.getParameter("type")); + if (k==1) + voteUp(id_answer, token); + else + voteDown(id_answer,token); + response.sendRedirect("viewpost?id="+id_question); + } + else { + int count = 0; + i = 0; + while (count<2 && i + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + + private int voteUp(int qid, java.lang.String token) { + // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. + // If the calling of port operations may lead to race condition some synchronization is required. + answermodel.AnswerWS port = service.getAnswerWSPort(); + return port.voteUp(qid, token); + } + + private int voteDown(int aid, java.lang.String token) { + // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. + // If the calling of port operations may lead to race condition some synchronization is required. + answermodel.AnswerWS port = service.getAnswerWSPort(); + return port.voteDown(aid, token); + } + + private Boolean isValidToken(java.lang.String token) { + // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. + // If the calling of port operations may lead to race condition some synchronization is required. + answermodel.AnswerWS port = service.getAnswerWSPort(); + return port.isValidToken(token); + } + +} diff --git a/StackExchangeClient/src/java/Servlet/votequestion.java b/StackExchangeClient/src/java/Servlet/votequestion.java new file mode 100644 index 00000000..778dd549 --- /dev/null +++ b/StackExchangeClient/src/java/Servlet/votequestion.java @@ -0,0 +1,117 @@ +package Servlet; + +import java.io.IOException; +import javax.servlet.ServletException; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.ws.WebServiceRef; +import questionmodel.QuestionWS_Service; + +public class votequestion extends HttpServlet { + @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_15534/StackExchangeService/QuestionWS.wsdl") + private QuestionWS_Service service; + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + int idQuestion = Integer.parseInt(request.getParameter("id")); + String token = ""; + boolean found = false; + int i=0; + Cookie[] cookies = null; + cookies = request.getCookies(); + if (cookies != null) { + while (!found && i < cookies.length){ + if (cookies[i].getName().equals("tokenCookie")) { + token = cookies[i].getValue(); + found = true; + } + i++; + } + } + if (isValidToken(token)) { + int k = Integer.parseInt(request.getParameter("type")); + if (k==1) + voteUp(idQuestion, token); + else + voteDown(idQuestion,token); + response.sendRedirect("viewpost?id="+idQuestion); + } + else { + int count = 0; + i = 0; + while (count<2 && i + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + + private int voteUp(int qid, java.lang.String token) { + // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. + // If the calling of port operations may lead to race condition some synchronization is required. + questionmodel.QuestionWS port = service.getQuestionWSPort(); + return port.voteUp(qid, token); + } + + private int voteDown(int qid, java.lang.String token) { + // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. + // If the calling of port operations may lead to race condition some synchronization is required. + questionmodel.QuestionWS port = service.getQuestionWSPort(); + return port.voteDown(qid, token); + } + + private Boolean isValidToken(java.lang.String token) { + // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. + // If the calling of port operations may lead to race condition some synchronization is required. + questionmodel.QuestionWS port = service.getQuestionWSPort(); + return port.isValidToken(token); + } + +} diff --git a/StackExchangeClient/web/WEB-INF/jax-ws-catalog.xml b/StackExchangeClient/web/WEB-INF/jax-ws-catalog.xml new file mode 100644 index 00000000..37c6837f --- /dev/null +++ b/StackExchangeClient/web/WEB-INF/jax-ws-catalog.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/StackExchangeClient/web/WEB-INF/web.xml b/StackExchangeClient/web/WEB-INF/web.xml new file mode 100644 index 00000000..01241cc2 --- /dev/null +++ b/StackExchangeClient/web/WEB-INF/web.xml @@ -0,0 +1,112 @@ + + + + viewpost + Servlet.viewpost + + + addanswer + Servlet.addanswer + + + register + Servlet.register + + + index + Servlet.index + + + login + Servlet.login + + + logout + Servlet.logout + + + edit + Servlet.edit + + + editquestion + Servlet.editquestion + + + saveeditedquestion + Servlet.saveeditedquestion + + + deletequestion + Servlet.deletequestion + + + votequestion + Servlet.votequestion + + + voteanswer + Servlet.voteanswer + + + search + Servlet.search + + + viewpost + /viewpost + + + addanswer + /addanswer + + + register + /register + + + index + / + + + login + /login + + + logout + /logout + + + edit + /edit + + + editquestion + /editquestion + + + saveeditedquestion + /saveeditedquestion + + + deletequestion + /deletequestion + + + votequestion + /votequestion + + + voteanswer + /voteanswer + + + search + /search + + + + 30 + + + diff --git a/StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/AnswerWS.wsdl b/StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/AnswerWS.wsdl new file mode 100644 index 00000000..dd1781c6 --- /dev/null +++ b/StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/AnswerWS.wsdl @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/AnswerWS.xsd_1.xsd b/StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/AnswerWS.xsd_1.xsd new file mode 100644 index 00000000..4d2ce6a1 --- /dev/null +++ b/StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/AnswerWS.xsd_1.xsd @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/QuestionWS.wsdl b/StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/QuestionWS.wsdl new file mode 100644 index 00000000..581d1a62 --- /dev/null +++ b/StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/QuestionWS.wsdl @@ -0,0 +1,321 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/QuestionWS.xsd_1.xsd b/StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/QuestionWS.xsd_1.xsd new file mode 100644 index 00000000..d60b68f7 --- /dev/null +++ b/StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/QuestionWS.xsd_1.xsd @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/UserWs.wsdl b/StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/UserWs.wsdl new file mode 100644 index 00000000..a79588e3 --- /dev/null +++ b/StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/UserWs.wsdl @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/UserWs.xsd_1.xsd b/StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/UserWs.xsd_1.xsd new file mode 100644 index 00000000..101dfbd0 --- /dev/null +++ b/StackExchangeClient/web/WEB-INF/wsdl/localhost_15534/StackExchangeService/UserWs.xsd_1.xsd @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/StackExchangeClient/web/askquestion.jsp b/StackExchangeClient/web/askquestion.jsp new file mode 100644 index 00000000..d73047ac --- /dev/null +++ b/StackExchangeClient/web/askquestion.jsp @@ -0,0 +1,57 @@ +<%@page contentType="text/html" pageEncoding="UTF-8"%> + + + + + + + Stack Exchange + + +
+ <% + // Check if already log in + String username = ""; + boolean found = false; + int i=0; + Cookie[] cookies = null; + cookies = request.getCookies(); + if (cookies != null) { + while (!found && i < cookies.length){ + if (cookies[i].getName().equals("usernameCookie")) { + username = cookies[i].getValue(); + found = true; + } + i++; + } + } + if (!found) { + out.print("
Log-in" + + "
" + + "" + + "" + + "" + + "
" + + "
" + + "Register" + + "
" + + "
"); + } + else { + out.print("

You're log in as " + username +"

"); + } + %> + +

Simple StackExchange


+

What's your question?


+
+
+

+ +
+
+ + diff --git a/StackExchangeClient/web/editquestion.jsp b/StackExchangeClient/web/editquestion.jsp new file mode 100644 index 00000000..f29159fa --- /dev/null +++ b/StackExchangeClient/web/editquestion.jsp @@ -0,0 +1,29 @@ +<%@page contentType="text/html" pageEncoding="UTF-8"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> + + + + + + + Stack Exchange + + +
+ +

You're log in as ${question.username}

+ +

Simple StackExchange


+

What's your question?


+
+
+

+ + +
+
+
+ + diff --git a/StackExchangeClient/web/images/down.png b/StackExchangeClient/web/images/down.png new file mode 100644 index 0000000000000000000000000000000000000000..fdbeffa1aa8f5a1dc60f48769db66e59773ce3c1 GIT binary patch literal 817 zcmV-11J3-3P)002J-1^@s6sQooP00001b5ch_0zklh z#Q*>R32;bRa{vGr5&!@f5&>tQ(oz5b02y>eSaefwW^{L9a%BKbX=8G4b8lvJAWvpy zX=7!7?KN=#00OZ|L_t(|+U?sdY{Ebk2XN#ha&i(`IXQ`}L{3g3k)SG(NF=hd5{X2S zQWAnhB9YrY@*pj1%eD9Qu6N=kWSO}4%e#L{kLzVwmazKuRbTu4e%oUo2JFMtgVa}= zreD3;YzAPF2dRZxfzu7^cs#zbKb}2I>Gr$scDwfn7EV{_aY}1^H+o<}9S(=J$0>$7 z?7C7c_78y%`$7%#J_RhCuDM6LRs3x856g#rG1P0Za6671pQ=fjODPtDZ5)M4^P$d* z6*!6&R+&^{IU4qHokuMe8^^vYVUMBy(HaYieJ}cUWU8jGEM8(k!INyqp-xqy-Wbb) zun&10xUg`#79E93cn!F*;EA?tVUOQ~2hy={JN|TRs-hJZe5e)l)EEZ1JgveAaWcMZ=3y=R()1h8={7w#w$Zx%VRP?0;%VgNg4s|V9 zaA0X7?BV64byzrEQ_WB6OO^d7#lo;ZY1)1l6``&TOLN$dRrjJC3&9dwL)`?H(pwzx z60$Q`2o@=VTIuRR8OVL#Tneyvz|K)aR|>LMpKR$yiFZgC8CuU$J9 zPS;!zDmJlhBUmC~uRGL@W8rpedy8XYYR$&55UlAfj#PK3Q^IQc!`{&3dW~W=4Exyh zT8(4z+~VN5{on)^6vr)&DTQ^Cz=End{y&)vb&^;$VINXiBN;55uIF1E38nRs!ph&` vXnOm>IV{|c_gfqhwY8DMLa>BNsOResV1NdlUc0Wg00000NkvXXu0mjftK)I; literal 0 HcmV?d00001 diff --git a/StackExchangeClient/web/images/up.png b/StackExchangeClient/web/images/up.png new file mode 100644 index 0000000000000000000000000000000000000000..cf3af9fcd1990f733bc3d6b52842ca4c933c7fc4 GIT binary patch literal 753 zcmV002G+1^@s6W1;4l00001b5ch_0zklh z#Q*>R32;bRa{vGr5&!@f5&>tQ(oz5b02y>eSaefwW^{L9a%BKbX=8G4b8lvJAWvpy zX=7!7?KN=#00MDIL_t(|+U=VwbiyzchLMxVN#rCFiL68-kw_#G6cRa!L{=h^NED}( zb2!M#$;mCZr`ZaGkd!=b9^!Ws@bTvx^xm}Q^LYzf@;sknd|enpB_uy2;|PnB^ZEQn zAY~P-;&3>;M_8QWSAi;XJRUzIEJmP31kQIIR+Vmqb>FI#0Sel+kFc&m4OpORnM7Fs zQorzEk#>DykUfT0&7QQX%;|Jm1r3X|rSm}Q%#gqD1q+J+*ocCnvWH_E94rB;qm#W& zsTWOP!LhX^dt0qqG;CFwEX&qGz#?zLsjK zq>e@QCXe4zajR%juVBGr78O$GB=H88DyeglnUKA9P~>0yNHZv!nbWYyr`=X9^(V6L zI15Xo)UC)~tJDpHq8YddYi9}8MVIV#ff`!^MYC`M7JQ>NC3T+c;Ricm93f}1EpN{%A^j1P>irD*>};vf&nPfR?z|N76mLAd}0Pw z%g{P3gi_Zgdtasg=r}H|z~U^QVNcgMEEse;2nw<@3JV6Dj)I~C+K~}hAW4U$&Xavx zJFMG{Vpr2-6FL;BE0Miyt5T0ZNpC{SfJ%GStd{6o7h18Wm1 zC@Oo_Q`IPS3E8uxUPMsrP3YTJEh4BZcdePQa{U{{t|qyIWniP&)%}t|qj^86mx+5tw00000NkvXXu0mjfAW}u0 literal 0 HcmV?d00001 diff --git a/StackExchangeClient/web/index.html b/StackExchangeClient/web/index.html deleted file mode 100644 index f07133b1..00000000 --- a/StackExchangeClient/web/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - TODO supply a title - - - - -
TODO write content
- - diff --git a/StackExchangeClient/web/index.jsp b/StackExchangeClient/web/index.jsp new file mode 100644 index 00000000..acb74e66 --- /dev/null +++ b/StackExchangeClient/web/index.jsp @@ -0,0 +1,91 @@ +<%@ page contentType="text/html" pageEncoding="UTF-8"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> + + + + + + + Stack Exchange + + + +
+ + + + + + +

You're log in as ${username}

+
+
+ +

Simple StackExchange


+ + +

Cannot find what you are looking for? Ask here

+

Recently Asked Questions

+ + + + + + + + + + +
+ ${question.answer}
Answers +
+ ${question.vote}
Votes +
+ + + + ">${question.topic} + +

${question.content}
+ + + +

+ asked by ${question.username} | + + + ">edit + | + + + " + onclick="return confirm('Are you sure you want to delete this item?')">delete + +

+
+ +

asked by ${question.username}

+
+
+ +
+ +
+ + + diff --git a/StackExchangeClient/web/register.jsp b/StackExchangeClient/web/register.jsp new file mode 100644 index 00000000..7f927f74 --- /dev/null +++ b/StackExchangeClient/web/register.jsp @@ -0,0 +1,25 @@ +<%@page contentType="text/html" pageEncoding="UTF-8"%> + + + + + + Stack Exchange + + +
+

Simple StackExchange


+

Register


+
+
+
+
+
+

+ +
+
+ + diff --git a/StackExchangeClient/web/style.css b/StackExchangeClient/web/style.css new file mode 100644 index 00000000..75b26be7 --- /dev/null +++ b/StackExchangeClient/web/style.css @@ -0,0 +1,192 @@ +.container { + width:50%; + margin:auto; + padding:1% 5% 5% 5%; + border: 1px solid #000000; +} +a { + text-decoration:none; + color: black; +} +h1 { + margin-bottom: 10%; + margin-top: 10%; +} + +.arrow-up { + margin: auto; + width: 0; + height: 0; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-bottom: 15px solid grey; +} +.arrow-down { + margin: auto; + width: 0; + height: 0; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-top: 15px solid grey; +} + +.login { + float: right; + padding: 5px; + width: 100px; + background-color: #F7F7F7; + margin: 0 auto 10px; + border-radius: 2px; + box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); + overflow: hidden; +} +.login h1 { + margin: 0; + font-weight: 100; + font-size: 1em; +} +.login input[type=submit] { + width: 100%; + display: block; + margin-bottom: 10px; + position: relative; + padding:1% 5% 5% 5%; +} +.login input[type=text], .login input[type=password] { + height: 20px; + font-size: 10px; + width: 100%; + margin-bottom: 5px; + -webkit-appearance: none; + background: #fff; + border: 1px solid #d9d9d9; + border-top: 1px solid #c0c0c0; + padding: 0 8px; + box-sizing: border-box; + -moz-box-sizing: border-box; +} +.login input[type=submit] { + border: 0px; + color: #fff; + text-shadow: 0 1px rgba(0,0,0,0.1); + background-color: #4d90fe; +} +.login a { + text-decoration: none; + color: #666; + font-weight: 400; + text-align: center; + display: inline-block; + opacity: 0.6; + transition: opacity ease 0.5s; +} +.login-help { + width: 100%; + text-align: center; + font-size: 12px; +} + +form.search-box > input[type="text"]{ + width:82%; + display:block; + border: 2px solid; + height: 25px; + padding-left:1%; + float: left; +} +form.search-box > input[type="submit"]{ + width:15%; + height: 30px; + border: 2px solid; + float: right; +} + +#listQuestions { + width: 100%; + border-collapse:collapse; + table-layout: fixed; +} +#listQuestions tr { + border-top: 2px solid #000; + height: 80px; +} +#listQuestions #countanswer, #listQuestions #countvote { + width:10%; + text-align:center; +} +#listQuestions #gap { + width:2%; +} +#listQuestions #display { + vertical-align:top; + padding-top:5px; + width:78%; + text-align:left; +} + +#listAnswers { + width: 100%; + border-collapse:collapse; +} +#listAnswers tr { + border-bottom: 2px solid #000; +} +#listAnswers #countvote { + width: 15%; + text-align: center; + padding: 20px; +} +#listAnswers #display { + vertical-align: top; + padding: 20px; +} + +#question #countvote { + width:15%; + text-align:center; + padding: 20px; +} +#question #display { + vertical-align:top; +} + +form.RegisterForm > input[type="text"], form.RegisterForm > input[type="password"] { + width:99%; + display:block; + border: 1px solid; + height: 25px; + padding-left:1%; +} +form.RegisterForm > input[type="submit"] { + width:80px; + border: 1px solid; + float: right; +} + +form.QuestionForm > input[type="text"] { + width:99%; + display:block; + border: 1px solid; + height: 25px; + padding-left:1%; +} +form.QuestionForm > textarea { + width:99%; + height:150px; + border: 1px solid; + resize: none; + padding-left:1%; +} +form.QuestionForm > input[type="submit"] { + width:80px; + border: 1px solid; + float: right; +} + +form.AnswerForm > textarea { + width:99%; + height:150px; + border: 1px solid; + resize: none; + padding-left:1%; +} diff --git a/StackExchangeClient/web/viewpost.jsp b/StackExchangeClient/web/viewpost.jsp new file mode 100644 index 00000000..9e30eeba --- /dev/null +++ b/StackExchangeClient/web/viewpost.jsp @@ -0,0 +1,118 @@ +<%@page contentType="text/html" pageEncoding="UTF-8"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> + + + + + + Stack Exchange + + +
+ + + + + +

You're log in as ${username}

+
+
+ +

Simple StackExchange


+ + +

${question.topic}


+ + + + + +
+ + + + "> +
+
+

${question.vote}

+ + + + "> +
+

+
+ ${question.content}
+
+ + + +

+ asked by ${question.username} | + + + ">edit + | + + 1 + " + onclick="return confirm('Are you sure you want to delete this item?')">delete + +

+
+ +

asked by ${question.username}

+
+
+

${count} Answer


+
+ + + + + + + + +
+ + + + + "> +
+
+

${answer.vote}

+ + + + + "> +
+
+
${answer.content}
+

answered by ${answer.username} at ${answer.date}

+
+ +

Your Answer

+
+

+ + +
+ +
+ + From 4cade3045564977c7b108d9df79a2e1a88cd7caa Mon Sep 17 00:00:00 2001 From: dininta Date: Sat, 5 Dec 2015 12:16:46 +0700 Subject: [PATCH 07/26] Initialize StackExchangeService project --- StackExchangeService/nbproject/jax-ws.xml | 10 +++--- .../nbproject/jaxws-build.xml | 18 +++++------ .../nbproject/project.properties | 10 ++++-- .../setup/glassfish-resources.xml | 8 +++++ StackExchangeService/src/java/Config/DB.java | 11 ++++++- .../src/java/QuestionModel/Question.java | 9 ++++++ .../src/java/QuestionModel/QuestionWS.java | 16 ++++------ .../src/java/UserModel/User.java | 5 +++ StackExchangeService/web/WEB-INF/web.xml | 12 ++++--- StackExchangeService/web/index.html | 32 +++++++++---------- 10 files changed, 84 insertions(+), 47 deletions(-) create mode 100644 StackExchangeService/setup/glassfish-resources.xml diff --git a/StackExchangeService/nbproject/jax-ws.xml b/StackExchangeService/nbproject/jax-ws.xml index bb0b30ad..7b3ec710 100644 --- a/StackExchangeService/nbproject/jax-ws.xml +++ b/StackExchangeService/nbproject/jax-ws.xml @@ -1,14 +1,14 @@ - - QuestionModel.QuestionWS - AnswerModel.AnswerWS - - UserModel.UserWS + + QuestionModel.QuestionWS + + + UserModel.UserWs diff --git a/StackExchangeService/nbproject/jaxws-build.xml b/StackExchangeService/nbproject/jaxws-build.xml index 65e654ba..821094a0 100644 --- a/StackExchangeService/nbproject/jaxws-build.xml +++ b/StackExchangeService/nbproject/jaxws-build.xml @@ -19,27 +19,27 @@
- + - + - + - + - + - + - + - + - + diff --git a/StackExchangeService/nbproject/project.properties b/StackExchangeService/nbproject/project.properties index 6e1fbe21..8d0b013f 100644 --- a/StackExchangeService/nbproject/project.properties +++ b/StackExchangeService/nbproject/project.properties @@ -3,6 +3,13 @@ annotation.processing.enabled.in.editor=true annotation.processing.processors.list= annotation.processing.run.all.processors=true annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +auxiliary.org-netbeans-modules-css-prep.less_2e_compiler_2e_options= +auxiliary.org-netbeans-modules-css-prep.less_2e_enabled=false +auxiliary.org-netbeans-modules-css-prep.less_2e_mappings=/less:/css +auxiliary.org-netbeans-modules-css-prep.sass_2e_compiler_2e_options= +auxiliary.org-netbeans-modules-css-prep.sass_2e_enabled=false +auxiliary.org-netbeans-modules-css-prep.sass_2e_mappings=/scss:/css +auxiliary.org-netbeans-modules-web-clientproject-api.js_2e_libs_2e_folder=js/libs build.classes.dir=${build.web.dir}/WEB-INF/classes build.classes.excludes=**/*.java,**/*.form build.dir=build @@ -26,7 +33,7 @@ dist.ear.war=${dist.dir}/${war.ear.name} dist.javadoc.dir=${dist.dir}/javadoc dist.war=${dist.dir}/${war.name} endorsed.classpath=\ - ${libs.javaee-endorsed-api-6.0.classpath} + ${libs.javaee-endorsed-api-7.0.classpath} excludes= includes=** j2ee.compile.on.save=true @@ -68,7 +75,6 @@ javadoc.use=true javadoc.version=false javadoc.windowtitle= lib.dir=${web.docbase.dir}/WEB-INF/lib -no.dependencies=false persistence.xml.dir=${conf.dir} platform.active=default_platform resource.dir=setup diff --git a/StackExchangeService/setup/glassfish-resources.xml b/StackExchangeService/setup/glassfish-resources.xml new file mode 100644 index 00000000..dfc2960a --- /dev/null +++ b/StackExchangeService/setup/glassfish-resources.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/StackExchangeService/src/java/Config/DB.java b/StackExchangeService/src/java/Config/DB.java index 049daef1..b4e1e7ed 100644 --- a/StackExchangeService/src/java/Config/DB.java +++ b/StackExchangeService/src/java/Config/DB.java @@ -1,8 +1,17 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ package Config; import java.sql.Connection; import java.sql.DriverManager; +/** + * + * @author User + */ public class DB { private String hostParam; private String user; @@ -11,7 +20,7 @@ public class DB { public DB() { this.hostParam = "jdbc:mysql://localhost:3306/stackexchange2?zeroDateTimeBehaviour=convertToNull"; this.user = "root"; - this.password = ""; + this.password = "dininta"; } public Connection connect() { diff --git a/StackExchangeService/src/java/QuestionModel/Question.java b/StackExchangeService/src/java/QuestionModel/Question.java index 44fe58eb..d7796654 100644 --- a/StackExchangeService/src/java/QuestionModel/Question.java +++ b/StackExchangeService/src/java/QuestionModel/Question.java @@ -1,8 +1,17 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ package QuestionModel; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; +/** + * + * @author FiqieUlya + */ @XmlRootElement(name="Question") public class Question { @XmlElement(name="id_question", required=true) diff --git a/StackExchangeService/src/java/QuestionModel/QuestionWS.java b/StackExchangeService/src/java/QuestionModel/QuestionWS.java index 4548b689..33a945f5 100644 --- a/StackExchangeService/src/java/QuestionModel/QuestionWS.java +++ b/StackExchangeService/src/java/QuestionModel/QuestionWS.java @@ -1,3 +1,8 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ package QuestionModel; @@ -186,7 +191,6 @@ public int getVoteById(@WebParam(name = "qid") int qid) { return count; } - @WebMethod(operationName = "getAnswerById") public int getAnswerById(@WebParam(name = "qid") int qid) { int count= 0; @@ -218,7 +222,6 @@ public int getAnswerById(@WebParam(name = "qid") int qid) { return count; } - @WebMethod(operationName = "voteUp") public int voteUp(@WebParam(name = "qid") int qid,@WebParam(name = "token") String token ){ int count; @@ -261,7 +264,6 @@ public int voteUp(@WebParam(name = "qid") int qid,@WebParam(name = "token") Stri } return count; } - @WebMethod(operationName = "voteDown") public int voteDown(@WebParam(name = "qid") int qid,@WebParam(name = "token") String token ){ int count; @@ -333,7 +335,6 @@ public Boolean deleteQuestionById(@WebParam(name = "qid") int qid,@WebParam(name } return status; } - @WebMethod(operationName = "isVoted") public Boolean isVoted(@WebParam(name = "qid") int qid,@WebParam(name = "username") String username){ Boolean status = false; @@ -366,8 +367,7 @@ public Boolean isVoted(@WebParam(name = "qid") int qid,@WebParam(name = "usernam } return status; } - - @WebMethod(operationName = "searchQuestion") + @WebMethod(operationName = "searchQuestion") public List searchQuestion(@WebParam(name = "keyword") String keyword){ List questions = new ArrayList(); conn = db.connect(); @@ -406,9 +406,8 @@ public List searchQuestion(@WebParam(name = "keyword") String keyword) } return questions; } - @WebMethod(operationName = "getUsernameByQid") - public String getUsernameByQid(@WebParam(name = "qid") int qid) { + public String getUsernameByQid(@WebParam(name = "qid") int qid) { conn = db.connect(); String uname=""; try { @@ -438,7 +437,6 @@ public String getUsernameByQid(@WebParam(name = "qid") int qid) { return uname; } - public Boolean isVoteUp(@WebParam(name = "qid") int qid,@WebParam(name = "username") String username){ Boolean status = false; conn = db.connect(); diff --git a/StackExchangeService/src/java/UserModel/User.java b/StackExchangeService/src/java/UserModel/User.java index 8a62ebcf..7ca58b11 100644 --- a/StackExchangeService/src/java/UserModel/User.java +++ b/StackExchangeService/src/java/UserModel/User.java @@ -1,3 +1,8 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ package UserModel; import javax.xml.bind.annotation.XmlElement; diff --git a/StackExchangeService/web/WEB-INF/web.xml b/StackExchangeService/web/WEB-INF/web.xml index 652f33c1..143a4adc 100644 --- a/StackExchangeService/web/WEB-INF/web.xml +++ b/StackExchangeService/web/WEB-INF/web.xml @@ -1,12 +1,14 @@ - - + 30 + + jdbc/stackexchange + javax.sql.ConnectionPoolDataSource + Container + Shareable + diff --git a/StackExchangeService/web/index.html b/StackExchangeService/web/index.html index f07133b1..c627c249 100644 --- a/StackExchangeService/web/index.html +++ b/StackExchangeService/web/index.html @@ -1,16 +1,16 @@ - - - - - TODO supply a title - - - - -
TODO write content
- - + + + + + TODO supply a title + + + + +
TODO write content
+ + From a83415ba1e81e4a67e868df5007defa499691f4b Mon Sep 17 00:00:00 2001 From: Astahta Date: Sat, 5 Dec 2015 15:15:05 +0700 Subject: [PATCH 08/26] add new sql --- stackexchange.sql | 275 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 stackexchange.sql diff --git a/stackexchange.sql b/stackexchange.sql new file mode 100644 index 00000000..bd358e4d --- /dev/null +++ b/stackexchange.sql @@ -0,0 +1,275 @@ +-- phpMyAdmin SQL Dump +-- version 4.2.11 +-- http://www.phpmyadmin.net +-- +-- Host: 127.0.0.1 +-- Generation Time: Dec 05, 2015 at 09:08 AM +-- Server version: 5.6.21 +-- PHP Version: 5.5.19 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; + +-- +-- Database: `stackexchane2` +-- + +-- -------------------------------------------------------- + +-- +-- Table structure for table `account` +-- + +CREATE TABLE IF NOT EXISTS `account` ( + `username` varchar(30) NOT NULL, + `nama` varchar(30) NOT NULL, + `password` varchar(30) NOT NULL, + `email` varchar(30) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- +-- Dumping data for table `account` +-- + +INSERT INTO `account` (`username`, `nama`, `password`, `email`) VALUES +('aka', 'aka aka', 'aka', 'aka@gmail.com'), +('fiqie', 'fiqie', 'fiqie', 'fiqi9e@gmail.com'), +('ica', 'dininta annisa', 'ica', 'ica@gmail.com'), +('oji', 'oji', 'oji', 'oji'), +('rahman', 'rahman adianto', 'rahman', 'rahman@gmail.com'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `answer` +-- + +CREATE TABLE IF NOT EXISTS `answer` ( +`id_answer` int(11) NOT NULL, + `id_question` int(11) NOT NULL, + `vote` int(11) NOT NULL, + `content` text NOT NULL, + `date` datetime NOT NULL, + `username` varchar(30) NOT NULL +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; + +-- +-- Dumping data for table `answer` +-- + +INSERT INTO `answer` (`id_answer`, `id_question`, `vote`, `content`, `date`, `username`) VALUES +(3, 3, 5, 'huu gendut', '2015-11-18 00:00:00', 'aka'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `comment` +-- + +CREATE TABLE IF NOT EXISTS `comment` ( + `id_question` int(11) NOT NULL, + `id_comment` int(11) NOT NULL, + `content` text NOT NULL, + `date` datetime NOT NULL, + `username` varchar(30) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `question` +-- + +CREATE TABLE IF NOT EXISTS `question` ( +`id_question` int(11) NOT NULL, + `topic` varchar(30) NOT NULL, + `username` varchar(30) NOT NULL, + `content` text NOT NULL, + `vote` int(11) NOT NULL, + `date` datetime NOT NULL +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1; + +-- +-- Dumping data for table `question` +-- + +INSERT INTO `question` (`id_question`, `topic`, `username`, `content`, `vote`, `date`) VALUES +(3, 'Salon', 'ica', 'lagi pengen dandan cantik', -99, '2015-11-25 00:00:00'), +(5, 'topik baru', 'fiqie', 'mulai lagi saja', 0, '2015-11-18 17:15:48'), +(6, 'topik yang paling baru', 'fiqie', 'content baru di edit', 1, '2015-11-25 11:20:10'), +(7, 'topik yang baru', 'fiqie', 'isi yang baru', 0, '2015-11-25 13:06:17'), +(8, 'sgerhgrgrshgbragbarrg', 'fiqie', 'gaghhdhfdahfgfsgaf', 0, '2015-11-25 13:58:13'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `token` +-- + +CREATE TABLE IF NOT EXISTS `token` ( + `token_string` text NOT NULL, + `date_create` datetime NOT NULL, + `valid_hour` int(11) NOT NULL DEFAULT '6', + `username` varchar(30) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- +-- Dumping data for table `token` +-- + +INSERT INTO `token` (`token_string`, `date_create`, `valid_hour`, `username`) VALUES +('key', '2015-11-24 13:24:00', 6, 'fiqie'), +('111e5d8d-bec1-44c0-9839-55e2cb8b49cd', '2015-11-24 17:38:25', 6, 'rahman'), +('5bf96d70-514e-4e69-8c0e-a71f2a05308a', '2015-11-25 11:03:03', 6, 'fiqie'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `vote_answer` +-- + +CREATE TABLE IF NOT EXISTS `vote_answer` ( + `id_answer` int(11) NOT NULL, + `username` varchar(30) NOT NULL, + `value` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- +-- Dumping data for table `vote_answer` +-- + +INSERT INTO `vote_answer` (`id_answer`, `username`, `value`) VALUES +(3, 'fiqie', -1); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `vote_question` +-- + +CREATE TABLE IF NOT EXISTS `vote_question` ( + `id_question` int(11) NOT NULL, + `username` varchar(30) NOT NULL, + `value` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- +-- Dumping data for table `vote_question` +-- + +INSERT INTO `vote_question` (`id_question`, `username`, `value`) VALUES +(6, 'rahman', 1); + +-- +-- Indexes for dumped tables +-- + +-- +-- Indexes for table `account` +-- +ALTER TABLE `account` + ADD PRIMARY KEY (`username`); + +-- +-- Indexes for table `answer` +-- +ALTER TABLE `answer` + ADD PRIMARY KEY (`id_answer`), ADD KEY `id_question` (`id_question`,`username`), ADD KEY `username` (`username`); + +-- +-- Indexes for table `comment` +-- +ALTER TABLE `comment` + ADD PRIMARY KEY (`id_comment`), ADD KEY `id_question` (`id_question`,`username`), ADD KEY `username` (`username`); + +-- +-- Indexes for table `question` +-- +ALTER TABLE `question` + ADD PRIMARY KEY (`id_question`), ADD KEY `username` (`username`), ADD KEY `username_2` (`username`); + +-- +-- Indexes for table `token` +-- +ALTER TABLE `token` + ADD KEY `username` (`username`); + +-- +-- Indexes for table `vote_answer` +-- +ALTER TABLE `vote_answer` + ADD KEY `id_answer` (`id_answer`), ADD KEY `username` (`username`); + +-- +-- Indexes for table `vote_question` +-- +ALTER TABLE `vote_question` + ADD KEY `id_question` (`id_question`), ADD KEY `username` (`username`); + +-- +-- AUTO_INCREMENT for dumped tables +-- + +-- +-- AUTO_INCREMENT for table `answer` +-- +ALTER TABLE `answer` +MODIFY `id_answer` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=4; +-- +-- AUTO_INCREMENT for table `question` +-- +ALTER TABLE `question` +MODIFY `id_question` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=9; +-- +-- Constraints for dumped tables +-- + +-- +-- Constraints for table `answer` +-- +ALTER TABLE `answer` +ADD CONSTRAINT `answer_ibfk_2` FOREIGN KEY (`username`) REFERENCES `account` (`username`), +ADD CONSTRAINT `answer_ibfk_3` FOREIGN KEY (`id_question`) REFERENCES `question` (`id_question`) ON DELETE CASCADE; + +-- +-- Constraints for table `comment` +-- +ALTER TABLE `comment` +ADD CONSTRAINT `comment_ibfk_1` FOREIGN KEY (`id_question`) REFERENCES `question` (`id_question`) ON DELETE CASCADE ON UPDATE CASCADE, +ADD CONSTRAINT `comment_ibfk_2` FOREIGN KEY (`username`) REFERENCES `account` (`username`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- +-- Constraints for table `question` +-- +ALTER TABLE `question` +ADD CONSTRAINT `question_ibfk_1` FOREIGN KEY (`username`) REFERENCES `account` (`username`); + +-- +-- Constraints for table `token` +-- +ALTER TABLE `token` +ADD CONSTRAINT `token_ibfk_1` FOREIGN KEY (`username`) REFERENCES `account` (`username`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- +-- Constraints for table `vote_answer` +-- +ALTER TABLE `vote_answer` +ADD CONSTRAINT `fk_id_answer` FOREIGN KEY (`id_answer`) REFERENCES `answer` (`id_answer`) ON DELETE CASCADE ON UPDATE CASCADE, +ADD CONSTRAINT `vote_answer_ibfk_1` FOREIGN KEY (`username`) REFERENCES `account` (`username`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- +-- Constraints for table `vote_question` +-- +ALTER TABLE `vote_question` +ADD CONSTRAINT `vote_question_ibfk_1` FOREIGN KEY (`id_question`) REFERENCES `question` (`id_question`) ON DELETE CASCADE ON UPDATE CASCADE, +ADD CONSTRAINT `vote_question_ibfk_2` FOREIGN KEY (`username`) REFERENCES `account` (`username`) ON DELETE CASCADE ON UPDATE CASCADE; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; From 47cbd49a0a8d1807e88a1cd9ced1dcdcef5b916c Mon Sep 17 00:00:00 2001 From: Astahta Date: Sat, 5 Dec 2015 19:00:33 +0700 Subject: [PATCH 09/26] update create token (add user agen, ip) --- StackExchangeAuth/src/java/Token/TokenGenerator.java | 6 ++++-- StackExchangeAuth/src/java/Token/TokenModel.java | 11 ++++++++--- StackExchangeAuth/src/java/getToken.java | 8 ++++++-- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/StackExchangeAuth/src/java/Token/TokenGenerator.java b/StackExchangeAuth/src/java/Token/TokenGenerator.java index fb3f378d..2517a696 100644 --- a/StackExchangeAuth/src/java/Token/TokenGenerator.java +++ b/StackExchangeAuth/src/java/Token/TokenGenerator.java @@ -6,6 +6,7 @@ package Token; import Config.DB; + import java.util.UUID; import java.sql.Connection; import java.sql.PreparedStatement; @@ -14,6 +15,7 @@ import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.Calendar; + import java.util.logging.Level; import java.util.logging.Logger; /** @@ -31,9 +33,9 @@ private static String getCurrentTimeStamp() { public TokenGenerator() {} - public TokenGenerator(int lifetime) { + public TokenGenerator(int lifetime, String userAgent, String ip) { this.token = UUID.randomUUID().toString(); - + this.token.concat('#'+userAgent+"#"+ip); DB db = new DB(); Connection conn = db.connect(); diff --git a/StackExchangeAuth/src/java/Token/TokenModel.java b/StackExchangeAuth/src/java/Token/TokenModel.java index 976894b9..f1ffcf3f 100644 --- a/StackExchangeAuth/src/java/Token/TokenModel.java +++ b/StackExchangeAuth/src/java/Token/TokenModel.java @@ -24,15 +24,20 @@ public class TokenModel { @XmlElement(name="token", required=true) private String token; - public TokenModel() { + /*public TokenModel() { TokenGenerator tgin = new TokenGenerator(6); this.token = tgin.getToken(); + }*/ + + public TokenModel(String userAgent, String ip) { + TokenGenerator tgin = new TokenGenerator(6, userAgent, ip); + this.token = tgin.getToken(); } - public TokenModel(int lifetime) { + /*public TokenModel(int lifetime) { TokenGenerator tgin = new TokenGenerator(lifetime); this.token = tgin.getToken(); - } + }*/ @XmlElement public String getToken() { diff --git a/StackExchangeAuth/src/java/getToken.java b/StackExchangeAuth/src/java/getToken.java index 6a6fdc12..5b930ce4 100644 --- a/StackExchangeAuth/src/java/getToken.java +++ b/StackExchangeAuth/src/java/getToken.java @@ -53,7 +53,11 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re String uname = request.getParameter("uname"); String pass = request.getParameter("pass"); String password = ""; - + String userAgent = request.getHeader("user-agent"); + String ip = request.getHeader("X-FORWARDED-FOR"); + if(ip==null){ + ip = request.getRemoteAddr(); + } PrintWriter tw = response.getWriter(); DB db = new DB(); @@ -97,7 +101,7 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re try { - token = new TokenModel(); + token = new TokenModel(userAgent,ip); String tkn = token.getToken(); Connection conn = db.connect(); From 62ccefb7ee0a6b206083e03b84eadcb4660b6a2b Mon Sep 17 00:00:00 2001 From: Rahman Adianto Date: Sun, 6 Dec 2015 03:28:29 +0700 Subject: [PATCH 10/26] Initial commit REST service project --- StackExchangeCV/build.xml | 71 + StackExchangeCV/nbproject/ant-deploy.xml | 111 ++ StackExchangeCV/nbproject/build-impl.xml | 1446 +++++++++++++++++ StackExchangeCV/nbproject/genfiles.properties | 8 + StackExchangeCV/nbproject/project.properties | 91 ++ StackExchangeCV/nbproject/project.xml | 27 + StackExchangeCV/src/conf/MANIFEST.MF | 2 + StackExchangeCV/src/java/model/Comment.java | 157 ++ .../src/java/model/VoteAnswer.java | 14 + .../src/java/model/VoteQuestion.java | 14 + StackExchangeCV/web/WEB-INF/web.xml | 24 + StackExchangeCV/web/index.html | 29 + 12 files changed, 1994 insertions(+) create mode 100644 StackExchangeCV/build.xml create mode 100644 StackExchangeCV/nbproject/ant-deploy.xml create mode 100644 StackExchangeCV/nbproject/build-impl.xml create mode 100644 StackExchangeCV/nbproject/genfiles.properties create mode 100644 StackExchangeCV/nbproject/project.properties create mode 100644 StackExchangeCV/nbproject/project.xml create mode 100644 StackExchangeCV/src/conf/MANIFEST.MF create mode 100644 StackExchangeCV/src/java/model/Comment.java create mode 100644 StackExchangeCV/src/java/model/VoteAnswer.java create mode 100644 StackExchangeCV/src/java/model/VoteQuestion.java create mode 100644 StackExchangeCV/web/WEB-INF/web.xml create mode 100644 StackExchangeCV/web/index.html diff --git a/StackExchangeCV/build.xml b/StackExchangeCV/build.xml new file mode 100644 index 00000000..a895af72 --- /dev/null +++ b/StackExchangeCV/build.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + Builds, tests, and runs the project StackExchangeCV. + + + diff --git a/StackExchangeCV/nbproject/ant-deploy.xml b/StackExchangeCV/nbproject/ant-deploy.xml new file mode 100644 index 00000000..2d5f8778 --- /dev/null +++ b/StackExchangeCV/nbproject/ant-deploy.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/StackExchangeCV/nbproject/build-impl.xml b/StackExchangeCV/nbproject/build-impl.xml new file mode 100644 index 00000000..3e521fac --- /dev/null +++ b/StackExchangeCV/nbproject/build-impl.xml @@ -0,0 +1,1446 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set build.web.dir + Must set build.generated.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.war + + + + + + + + + +The Java EE server classpath is not correctly set up - server home directory is missing. +Either open the project in the IDE and assign the server or setup the server classpath manually. +For example like this: + ant -Dj2ee.server.home=<app_server_installation_directory> + + +The Java EE server classpath is not correctly set up. Your active server type is ${j2ee.server.type}. +Either open the project in the IDE and assign the server or setup the server classpath manually. +For example like this: + ant -Duser.properties.file=<path_to_property_file> (where you put the property "j2ee.platform.classpath" in a .properties file) +or ant -Dj2ee.platform.classpath=<server_classpath> (where no properties file is used) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +The libs.CopyLibs.classpath property is not set up. +This property must point to +org-netbeans-modules-java-j2seproject-copylibstask.jar file which is part +of NetBeans IDE installation and is usually located at +<netbeans_installation>/java<version>/ant/extra folder. +Either open the project in the IDE and make sure CopyLibs library +exists or setup the property manually. For example like this: + ant -Dlibs.CopyLibs.classpath=a/path/to/org-netbeans-modules-java-j2seproject-copylibstask.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.jsp.includes + + + + + + + + + + + + + + + + + + + + + + + + + + Must select a file in the IDE or set jsp.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Browser not found, cannot launch the deployed application. Try to set the BROWSER environment variable. + + + Launching ${browse.url} + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/StackExchangeCV/nbproject/genfiles.properties b/StackExchangeCV/nbproject/genfiles.properties new file mode 100644 index 00000000..6304f263 --- /dev/null +++ b/StackExchangeCV/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=92a6ca7e +build.xml.script.CRC32=105bb482 +build.xml.stylesheet.CRC32=651128d4@1.75.1.1 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=92a6ca7e +nbproject/build-impl.xml.script.CRC32=2333ca7d +nbproject/build-impl.xml.stylesheet.CRC32=99ea4b56@1.75.1.1 diff --git a/StackExchangeCV/nbproject/project.properties b/StackExchangeCV/nbproject/project.properties new file mode 100644 index 00000000..20e8a76c --- /dev/null +++ b/StackExchangeCV/nbproject/project.properties @@ -0,0 +1,91 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=true +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +build.classes.dir=${build.web.dir}/WEB-INF/classes +build.classes.excludes=**/*.java,**/*.form +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +build.web.dir=${build.dir}/web +build.web.excludes=${build.classes.excludes} +client.urlPart= +compile.jsps=false +conf.dir=${source.root}/conf +debug.classpath=${build.classes.dir}:${javac.classpath} +debug.test.classpath=\ + ${run.test.classpath} +display.browser=true +# Files to be excluded from distribution war +dist.archive.excludes= +dist.dir=dist +dist.ear.war=${dist.dir}/${war.ear.name} +dist.javadoc.dir=${dist.dir}/javadoc +dist.war=${dist.dir}/${war.name} +endorsed.classpath=\ + ${libs.javaee-endorsed-api-7.0.classpath} +excludes= +includes=** +j2ee.compile.on.save=true +j2ee.copy.static.files.on.save=true +j2ee.deploy.on.save=true +j2ee.platform=1.7-web +j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/cdi-api.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar +j2ee.platform.embeddableejb.classpath=${j2ee.server.home}/lib/embedded/glassfish-embedded-static-shell.jar +j2ee.platform.wscompile.classpath=${j2ee.server.home}/modules/webservices-osgi.jar +j2ee.platform.wsgen.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar +j2ee.platform.wsimport.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar +j2ee.platform.wsit.classpath= +j2ee.server.type=gfv3ee6 +jar.compress=false +javac.classpath=\ + ${libs.json.classpath}:\ + ${libs.mysql.classpath} +# Space-separated list of extra javac options +javac.compilerargs= +javac.debug=true +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.8 +javac.target=1.8 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.preview=true +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +lib.dir=${web.docbase.dir}/WEB-INF/lib +no.dependencies=false +persistence.xml.dir=${conf.dir} +platform.active=default_platform +resource.dir=setup +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +# Space-separated list of JVM arguments used when running a class with a main method or a unit test +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value): +runmain.jvmargs= +source.encoding=UTF-8 +source.root=src +src.dir=${source.root}/java +test.src.dir=test +war.content.additional= +war.ear.name=${war.name} +war.name=StackExchangeCV.war +web.docbase.dir=web +webinf.dir=web/WEB-INF diff --git a/StackExchangeCV/nbproject/project.xml b/StackExchangeCV/nbproject/project.xml new file mode 100644 index 00000000..fe66a9fa --- /dev/null +++ b/StackExchangeCV/nbproject/project.xml @@ -0,0 +1,27 @@ + + + org.netbeans.modules.web.project + + + StackExchangeCV + 1.6.5 + + + ${libs.json.classpath} + WEB-INF/lib + + + ${libs.mysql.classpath} + WEB-INF/lib + + + + + + + + + + + + diff --git a/StackExchangeCV/src/conf/MANIFEST.MF b/StackExchangeCV/src/conf/MANIFEST.MF new file mode 100644 index 00000000..58630c02 --- /dev/null +++ b/StackExchangeCV/src/conf/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/StackExchangeCV/src/java/model/Comment.java b/StackExchangeCV/src/java/model/Comment.java new file mode 100644 index 00000000..8dd3a944 --- /dev/null +++ b/StackExchangeCV/src/java/model/Comment.java @@ -0,0 +1,157 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model; + +import Connection.DB; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import org.json.simple.JSONObject; +import org.json.simple.JSONArray; + +/** + * + * @author User + */ +public class Comment { + private DB db; + private Connection conn; + + private static String getCurrentTimeStamp() { + Calendar cal = Calendar.getInstance(); + Timestamp now = new Timestamp(cal.getTimeInMillis()); + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now); + } + + public Comment() { + db = new DB(); + } + + public JSONObject getComments() { + JSONObject json = new JSONObject(); + JSONArray comments = new JSONArray(); + JSONObject comment; + + conn = db.connect(); + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "SELECT * FROM comment"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + if (!rs.next()) { + json.put("state", 0); + return json; + } + + /* Get every data returned by SQLquery */ + while(rs.next()) { + comment = new JSONObject(); + comment.put("content", rs.getString("content")); + comment.put("date", rs.getString("date")); + comment.put("username", rs.getString("username")); + comments.add(comment); + } + json.put("comments", comments); + json.put("state", 1); + + rs.close(); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + ex.getSQLState(); + } + + return json; + } + + public JSONObject getCommentByQID(int i){ + JSONObject json = new JSONObject(); + JSONArray comments = new JSONArray(); + JSONObject comment; + + conn = db.connect(); + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "SELECT * FROM comment where id_question = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, i); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + if (!rs.next()) { + json.put("state", 0); + return json; + } + + /* Get every data returned by SQLquery */ + while(rs.next()) { + comment = new JSONObject(); + comment.put("content", rs.getString("content")); + comment.put("date", rs.getString("date")); + comment.put("username", rs.getString("username")); + comments.add(comment); + } + json.put("comments", comments); + json.put("state", 1); + + rs.close(); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + ex.getSQLState(); + } + + return json; + } + + public Boolean addComment(int id_question, String content, String username) { + conn = db.connect(); + Boolean state = true; + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "INSERT INTO comment(id_question, content, username, date)" + + " VALUES (?, ?, ?, ?)"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, id_question); + dbStatement.setString(2, content); + dbStatement.setString(3, username); + dbStatement.setString(4, getCurrentTimeStamp()); + + state = dbStatement.execute(); + stmt.close(); + conn.close(); + } + catch (SQLException ex) { + ex.getSQLState(); + } + + return state; + } +} + diff --git a/StackExchangeCV/src/java/model/VoteAnswer.java b/StackExchangeCV/src/java/model/VoteAnswer.java new file mode 100644 index 00000000..7bd0fcc5 --- /dev/null +++ b/StackExchangeCV/src/java/model/VoteAnswer.java @@ -0,0 +1,14 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model; + +/** + * + * @author User + */ +public class VoteAnswer { + +} diff --git a/StackExchangeCV/src/java/model/VoteQuestion.java b/StackExchangeCV/src/java/model/VoteQuestion.java new file mode 100644 index 00000000..d74d27ba --- /dev/null +++ b/StackExchangeCV/src/java/model/VoteQuestion.java @@ -0,0 +1,14 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model; + +/** + * + * @author User + */ +public class VoteQuestion { + +} diff --git a/StackExchangeCV/web/WEB-INF/web.xml b/StackExchangeCV/web/WEB-INF/web.xml new file mode 100644 index 00000000..c037350c --- /dev/null +++ b/StackExchangeCV/web/WEB-INF/web.xml @@ -0,0 +1,24 @@ + + + + CommentService + service.CommentService + + + AddComment + service.AddComment + + + CommentService + /comment/* + + + AddComment + /addcomment + + + + 30 + + + diff --git a/StackExchangeCV/web/index.html b/StackExchangeCV/web/index.html new file mode 100644 index 00000000..1ba924c6 --- /dev/null +++ b/StackExchangeCV/web/index.html @@ -0,0 +1,29 @@ + + + + + REST Service + + + + +

Available resource

+ + +

Available service

+
+ + + + +
+ + + From 7d53f3be81b6b748933c4ffe7fc60670939f1f6a Mon Sep 17 00:00:00 2001 From: Rahman Adianto Date: Sun, 6 Dec 2015 03:29:07 +0700 Subject: [PATCH 11/26] Implement comment service --- .../src/java/service/AddComment.java | 80 +++++++++++ .../src/java/service/CommentService.java | 124 ++++++++++++++++++ 2 files changed, 204 insertions(+) create mode 100644 StackExchangeCV/src/java/service/AddComment.java create mode 100644 StackExchangeCV/src/java/service/CommentService.java diff --git a/StackExchangeCV/src/java/service/AddComment.java b/StackExchangeCV/src/java/service/AddComment.java new file mode 100644 index 00000000..e51f4e21 --- /dev/null +++ b/StackExchangeCV/src/java/service/AddComment.java @@ -0,0 +1,80 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package service; + +import java.io.IOException; +import java.io.PrintWriter; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import model.Comment; + +/** + * + * @author User + */ +public class AddComment extends HttpServlet { + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + + response.setContentType("application/json;charset=UTF-8"); + PrintWriter pw = response.getWriter(); + + pw.println("{\"state\": \"no-service\"}"); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + PrintWriter pw = response.getWriter(); + + Comment comment = new Comment(); + + int id_question = Integer.parseInt(request.getParameter("id_question")); + String content = request.getParameter("content"); + String username = request.getParameter("username"); + + Boolean state = comment.addComment(id_question, content, username); + if (state) { + pw.println("{\"state\": \"failed\"}"); + } + else { + pw.println("{\"state\": \"success\"}"); + } + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} diff --git a/StackExchangeCV/src/java/service/CommentService.java b/StackExchangeCV/src/java/service/CommentService.java new file mode 100644 index 00000000..6dee0aaf --- /dev/null +++ b/StackExchangeCV/src/java/service/CommentService.java @@ -0,0 +1,124 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package service; + +import java.io.IOException; +import java.io.PrintWriter; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import model.Comment; + +/** + * + * @author User + */ +public class CommentService extends HttpServlet { + + private class RestRequest { + // Accommodate two requests, one for all resources, another for a specific resource + private Pattern regExAllPattern = Pattern.compile("/resource"); + private Pattern regExIdPattern = Pattern.compile("/resource/([0-9]*)"); + private Integer id; + + public RestRequest(String pathInfo) throws ServletException { + // regex parse pathInfo + Matcher matcher; + + // Check for ID case first, since the All pattern would also match + matcher = regExIdPattern.matcher(pathInfo); + if (matcher.find()) { + id = Integer.parseInt(matcher.group(1)); + return; + } + + matcher = regExAllPattern.matcher(pathInfo); + if (matcher.find()) { + return; + } + + throw new ServletException("Invalid URI"); + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + } + + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + + response.setContentType("application/json;charset=UTF-8"); + PrintWriter pw = response.getWriter(); + + Comment comment = new Comment(); + + try { + RestRequest resourceValues = new RestRequest(request.getPathInfo()); + if (resourceValues.getId() == null) { + pw.println(comment.getComments()); + } + else { + pw.println(comment.getCommentByQID(resourceValues.getId())); + } + + } catch (ServletException e) { + response.setStatus(400); + response.resetBuffer(); + pw.println("{\"state\": \"exception\", \"what\": \"" + e.toString() + "\"}"); + } + + pw.close(); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + + response.setContentType("application/json;charset=UTF-8"); + PrintWriter pw = response.getWriter(); + + pw.println("{\"state\": \"no-service\"}"); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} From bc8eda521c93a1b98deef98e990f531c7cc0acf5 Mon Sep 17 00:00:00 2001 From: Rahman Adianto Date: Sun, 6 Dec 2015 03:29:27 +0700 Subject: [PATCH 12/26] test comment model --- StackExchangeCV/src/java/model/test.java | 46 ++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 StackExchangeCV/src/java/model/test.java diff --git a/StackExchangeCV/src/java/model/test.java b/StackExchangeCV/src/java/model/test.java new file mode 100644 index 00000000..2e766872 --- /dev/null +++ b/StackExchangeCV/src/java/model/test.java @@ -0,0 +1,46 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model; + +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; + +/** + * + * @author User + */ +public class test { + public static void main(String[] args) { + Comment cm = new Comment(); + JSONObject json = cm.getCommentByQID(3); + + System.out.println("JSON Full: " + json.toString() + "\n"); + + // Parsing + JSONParser parser = new JSONParser(); + + try { + System.out.println("Parsing"); + Object obj = parser.parse(json.toString()); + JSONObject jsonObj = (JSONObject) obj; + + System.out.println("comments:"); + Object array = parser.parse(jsonObj.get("comments").toString()); + JSONArray jsonArr = (JSONArray) array; + for (int i = 0; i < jsonArr.size(); i++) { + System.out.println(jsonArr.get(i)); + } + + System.out.println("\n" + "state"); + System.out.println(jsonObj.get("state")); + + } catch (ParseException jse) { + + } + } +} From cf5a5c5938dd59b081c6007f2acba0b06167b8a0 Mon Sep 17 00:00:00 2001 From: Astahta Date: Sun, 6 Dec 2015 05:01:57 +0700 Subject: [PATCH 13/26] fix create token --- StackExchangeAuth/src/java/Token/TokenGenerator.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/StackExchangeAuth/src/java/Token/TokenGenerator.java b/StackExchangeAuth/src/java/Token/TokenGenerator.java index 2517a696..6799f001 100644 --- a/StackExchangeAuth/src/java/Token/TokenGenerator.java +++ b/StackExchangeAuth/src/java/Token/TokenGenerator.java @@ -35,7 +35,10 @@ public TokenGenerator() {} public TokenGenerator(int lifetime, String userAgent, String ip) { this.token = UUID.randomUUID().toString(); - this.token.concat('#'+userAgent+"#"+ip); + String temp1= "#" +userAgent; + String temp2= "#" +ip; + this.token= this.token + temp1+ temp2; + //this.token.concat('#'+userAgent+"#"+ip); DB db = new DB(); Connection conn = db.connect(); From c03d540751cc7093438b6ea105a6d7a410bdeea1 Mon Sep 17 00:00:00 2001 From: Astahta Date: Sun, 6 Dec 2015 05:31:22 +0700 Subject: [PATCH 14/26] update validate token with new token (StackExchangeAuth) --- StackExchangeAuth/src/java/validateToken.java | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/StackExchangeAuth/src/java/validateToken.java b/StackExchangeAuth/src/java/validateToken.java index e7e9c8e7..98584b9e 100644 --- a/StackExchangeAuth/src/java/validateToken.java +++ b/StackExchangeAuth/src/java/validateToken.java @@ -71,7 +71,12 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re response.setContentType("text/html;charset=UTF-8"); String token_string = request.getParameter("token_string"); - + String token[] = token_string.split("#"); + String userAgent = request.getHeader("user-agent"); + String ip = request.getHeader("X-FORWARDED-FOR"); + if(ip==null){ + ip = request.getRemoteAddr(); + } PrintWriter tw = response.getWriter(); DB db = new DB(); @@ -107,17 +112,25 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re } catch(SQLException ex) { } - - if (valid_hour != 0 && token_string != null) { - tw.println(""); - tw.println("" + date_create + ""); - tw.println("" + valid_hour + ""); - tw.println("" + isValid(date_create, valid_hour) + ""); - tw.println("" + username + ""); - tw.println(""); + if(token[1].equals(userAgent)){ + if(token[2].equals(ip)){ + if (valid_hour != 0 && token_string != null) { + tw.println(""); + tw.println("" + date_create + ""); + tw.println("" + valid_hour + ""); + tw.println("" + isValid(date_create, valid_hour) + ""); + tw.println("" + username + ""); + tw.println(""); + } + else { + tw.println("false"); + } + }else{ + tw.println(""+token[2]+" : "+ ip +""); + } } - else { - tw.println("false"); + else{ + tw.println("user-agent"); } tw.close(); } From 6712eaf96c0947024297c8386655ded0dae161f2 Mon Sep 17 00:00:00 2001 From: Rahman Adianto Date: Sun, 6 Dec 2015 08:40:54 +0700 Subject: [PATCH 15/26] useful library --- json-simple-1.1.1.jar | Bin 0 -> 23737 bytes mysql-connector-java-5.0.8-bin.jar | Bin 0 -> 540852 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 json-simple-1.1.1.jar create mode 100644 mysql-connector-java-5.0.8-bin.jar diff --git a/json-simple-1.1.1.jar b/json-simple-1.1.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..66347a6c86b7d6442358ca7643e4dc484fb01866 GIT binary patch literal 23737 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 A{Qv*} literal 0 HcmV?d00001 diff --git a/mysql-connector-java-5.0.8-bin.jar b/mysql-connector-java-5.0.8-bin.jar new file mode 100644 index 0000000000000000000000000000000000000000..0170c3e53a223416f427809065a7f98ef60ce1bc GIT binary patch literal 540852 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%0DggpE7;;S2kd^(RWY=~%5h7U_=f@L6p-T0ovi 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]vV;YASqaS5&%C0B2d{(&e~nVqQa=Ke zZM-$oqUjN+N}p}t4- z;blv%erWU3H$J&G+HL<3QBXR=pZQ4XP;W4H@BmLb@Oyki2#;KULRh~Mu`o1cES`d( z2ka!tcaWSj^au-8vYX0MSlGSZ+g6B1_5woA0#3t0x^uPLrW&eCydc4)RnTwDr+~nz z4B?ZQLE7Ur(3Kkq>#}_!+LHiuZQ;4PMu*!qtg2;*jCPO=JY!?T%rE61<#@b^och@oTPWhe*}10;GZ(N%)W$5TY-$@&Ru14M)Xu?44&2zD9gNb~0@6XH zY}@s`CjnQ)UN+oqUMyw3wzl2QU$9wNOgA$_3lk2-w=Mt9uxDz0&T~C2p<8UP{VZ*_ z7r^Zj|Hx*FNzZwVVF%bpBaYw94Jqenoj$E2wxdRKL0$=6f$I7P6pA1E4-xOd?a5*T zGeZwM5m5xRTB+?nL89~M-9K;4-q|lSOk99IwAoTh5cKBXW9+QC>_HMEU>K# zhaIpKYey5@ctb$7b}osgW=agm&Ej%@7K9;Y6M`M&3OUKSEGK{9l)f z%jBx1uO2B5`$=~5a3Q=e4jIF83c~3uK|&3-;{ulMko^ZH7*C0e1Zh{FG|KQRHobo_ z-c;K&mYYtw-a7Cvix@+1XL@CNsisVzB+Znnru}Q#qwQz%p2aB-p=P_;N&8<$t06Ih>Q6=e+Q*p{oW<<4gZ78a#)C)3`T}!_P1R`InJeJ zuYFr{IEb3sfF{(2016lU7a0>)*@3c;>5)xtm|6HgcR1_cKfhU@D*XN0==#d%nx~&T zKVj_mv)*NHXO-w)ZdaK>A#6J@y#EVCBzzF z{*sn9Gu>wPz(yRMpWbQT+Jb7&hcYbMcm+1Z4iGD&o&7)Lna)x<>P&okPzOaE?_IR|2-J0U zn9604yI`Z*j3&R@mR3}@e;rH$?2gj|^8uP2B~eylPAdb)+<=FwoQ@`#456A%wb~A8 ziWNjOqYGut&ViIlyb)cyV1^2OrXz%>wqYaGFr~n%v#|+?ozW(U;^w#p~`4o8GfmNRH1gk=0L7=^3;+|y3rv+a{&}LbAxOf>;+IS zmneJLEh5pq>{Ai#y#7v(a`E=Al4!$oxh^N^`Fd9YBl&?a6z_V)M?G$OS4i|(Dyh!DmE-`OC;}2obsk(G?<_YCT zxZj<3#!($Yx1eErESWh+(-_IO4~xrTqM6Sc$*gl?uLTmk?VjyEG1$m|;8b<0{}?Ao zXM!b1CuAk!*=w|$g8tC7lIcklKlY2hAPhJ#97=07rgcl_Nz;Vga2P$|O(%ULedLP? zfiS@A^m>vEkn<`{RMe<-eI4y3g_mD{ag@RWg%c8`0b}IEIPOsjF_7^v@rv^rDEH@y ztSyN!yRjcIAYD+Bz&C&iw}3>qCsVVhfq!k4RioAt&r_W(n=ZnZ zrl}j;oVbczMu9&rvmS%kEw7txyg#E~U6sv!dj+X#$J2vwimJm66Ymc~Ol>0}1+(Wk zX7C+Uw-%dP7n>3-x<0dpC;bvg!CVSdWw7GbV&s%4q{};m)z6P&xw{E)D!$?5`WdRj zGJ7@rkws*grB|m+UhwUZBDsd2o=}@yz>Wp9%C@Ld+ z!oYAoysFkU&!p? z=h#s!hZ&-N)1CrMgq8}FK;^jW8uF~fg^TmdpMtxne3Hj_WO|UWFH%3TH046}wX}k2lK+B*8jX?Oy(R}J1^lg=u)bvF z49z<Q6SOcc+7W9+!n@3H#N4exGOIF!}6R($#%VKbcf0A zxUhANS6$Mvj$PD9A*qNv9}ulusDV2t&I6!wf{zPQz)kzW&nNc!#Km$KD*mh#UWn%Ojq#+lg6V4@*sFaaJA7lli$kMjnRNrA0wCGE8391A= zTD>vPbyN|bQvWNBcVtO3T$U`w=KSarw)|f4>YF%AN^*eZX?CCI*#f=vM!kTK%KF9x z#2m)^z9=7VtL0n;br}@M_x{aVZ+i*In?iuIf8r4a4#GhTbwN%)oTFe!cKB}_jBpz< zFkDi@o2re&v5o2kyKLE2*jO2ZSih&IXt2d5zap)y0*BysobTkRVt1h!33Zt@$;P!+ ztJojGUp0b9zEF0*wG&Aa6s(ARwKY`MZ`%d*tcF0fTl1rdfMmwsSX23fn~q&z+}ayj zTf?b2Ryt5n3KxT$h;W9Sk|#W({Dz#}(<>>O32n`wktTb4%?Hb)S|NTH zBICL~DK9bwK(Cc{x(-_Hjjue~^dkm1h=jc>UqFsC*jEN?d$^nAkk?A8u1`RzdNy966VJx5V^-+u`DCs#KMN#a?DaEgnbOzUv-e zuw=%4#(}sYi>6VHS5=5KS7UdcpKm1c2KAw8h*!X_yh1;NODCDm_5QvvU6HzT2Dw?G z4q?jIJy`2n%HBc&fud>jgW&+pVGjuSgT{mG99UpYUOKfk@a8uC3p29?y*SeM{UBZO zI)yxkgsYngX)-tpkRCm547{|1tZ9yEqWk`F@+H%%WGAx9D)fbj8foJ@5x>r=fR#;p z@}jzH+bGuCzIiyBbZXoj1I1T=%vkS!d7CBQPvjX`LA*Yl!DykG@t*Tm%@!e$$Oj$% zCbXw0*X*;?cnOK<0(wCmHS?iKAZOT_Y$ryHFLe76LZh>UJAgoYVhHp?T7_k^A^ud^ zkQ%E7mZVf>Gb67~S|6W0k zXs14YJMhF?0!YzKR=N#O$HjD$0p_?CU++xcJ)9)t4<6u6Z2W-h|1Aca1K(=_CpZ|vS%Ok(r$0s<7v8Mv@7d&Q7Bq6FObY_88o$4q4=^X4LX%@; zn1_gR)MMiYdR^EOcvZj$kE7TV@EFNMZxrX4XV{IBKh?1GCt#_PM}aDM$Jq;J7zScd zn4P71ftPcSN^&~g80qzK;LC7>c;r$7gfyj3nsx6dD#tF}9S0Oh`&t^rD3m|;&WgW; zx;hFcOt=dXkd*6I*9#^T@G1n+l;+QiBQJ@~wAvxZlA$<)K~pA~m@_NWj!$jx*t|ZgjE0YyEdqTvv@-*B*$Ym$u&wpoD^B;YE!7;rwJtCZPu=!5 zwv##R%I&SxNiBqp!MeJN)uPm429noTjBvj;?x(MZ(K6g|xfcVnOFXo(xRlhM!+_!){+BMqS^~M&1*2^YFm* z*+NC7>{6AdXG%s0r16b7AWm?U!ri|Lx~aN*z7zxTS}h4L#lm2cGXp!i`;@+Z&m4Kw8*(zx=obPZwsF#sen99XS=o-cgU2gM_vs#ZfDsBR_}jQv$TGck zBu#w%S7ey39cqmhfgR4R%pv>Gh=IK;0P*VWXeL3OUR!r`tstGNh0HM` zN=mP{NG7A*9XW+$2?S(-)})@d#s>_{u>idoVVB29sr-+(qRIM#g?9TW zL|q@s#tRQW6xC10(Q!)t4lNkfIxg0PHgHNrZC4=mq9#$55pK0?GF^*iwGUX8vjG3f z9`{ZP4uf?q0or(M4x<;{IB6=j!kEmO9(*N}qSb~K`8uleu>x6I9DOFFe*xMj_NGE2 zAB)m;m${;A-YMF6+N6)u$EDh6=Dk-yEfRsZxqHARZhH9uf*w^Zm!%H(q}Cmsx!?BkCd0*TVWVBFhKkrY{q7PA;7^?JYiCyMCv zHqNy&xJ&pl$#R{Tp(#Ep>M>!i#HRUP=+uy<8a*fML9je-s?`QrYi+7f5h|uPfC>~* zM*1VNTQP=ooqqkw?iTEbR&8t09#ifUt7mG0{mH(=va}tAKp6Wib_8C7=OpAY44T1= zG_fZ=>LTY63$cX;iBmh$Z6>xOdQb3&s?sl}bEg7&o4wg;BHNtlEy0k<=7%gns& z+#E?8?r=@F!Y_LP6{U^I$bI$2;rBt3iS5G5to0H?7&OPw07C?nP#qGY_-l!n8+&&z zcFxHsY_(Th%CfgfTX=Khxiegsvy5ZH>nBi;+tW0ohP2+=*bH1{ad`nrK6&QG)54sR zPUWBbtSV{?N2^7(l=A9ZVGLq68!`?9nr3P57x&XVf|1qOFmukdG4f`5?d?O%<_P<^ zNHQvnW~eKTbu_EK6h#Fgh)6T^gjU-~aK<=fh2p(r^2BRio+g%aP`Uxt;&DWmZ*uhlPmlfC<9V(VM* zIf+eWjn&Fw+umJ_P(n~Grr9tFIz(y6(eK|j)|UOn^ z$K+b-+2<+ADHaEE2@sUl&FfRj3lHx3L(b5 z0CAVfMG|A>_A)_)z7|fD;G$-@&-jvH5Y=ZESO_>`d8)4j)OI;FKLo#xbXp?%xij~ zMz89CKUBGGa3;5@HndFduEohaQ}0cpjFp!uVQ%KD9Y)%laf)MR6~t*XOZ|X6TbZ6c z6`vy8Gk-?A`P2(gI*eTB)Td5)cj}&>v+f?KFC#b8Do>PEHyn35ZMROg)IY3^58b!% zq3sWJOXpd16BU@o!I<@aLUE^fN*osrbJOH3a~(rEJtlNHBH*_on=7eW%1E3 z>UO!>&GCFej?YZfu1w2IbSI5_u+7Z;aiq>psET#fngcBPjwG^P&irjwS-r(+9=Yi% z=SkbZwM~~=#du58?L=ZJou=POxwfQI!sH_k2F@ws-Bu|)K~OY9k!H76I{ENQ%azTT zdhbOJ`-&|V4`}irKY~dw!+$aZMrhJlrF`#XerUhr55WCmjF3*T5bRiBmI~WLHx)lZ z@`_%;`xcrk7IlRlafckV+5o;YZD=(Ij?*pdzZ}MN65k;2*!jJ>PKV~2-ryG=*Ot=R zs3Lm0^~%iDENOnkbq$O=&%U?zF9_%Kgd28R3%Dzo811TtTrZMIGmKoJQSEL_q~3?; zh*Sj0C~1tHf;UC2%B$3y4lNz$>j9Ls8&j!z**6(>(yjC~N1mAH5}Az$)Ld*;2ijqA zjGg<4PeiBhwo2PL2Ds{=gn&n~Hp+$^V7Ud(2RPqG9tSYbq^EvoF@kO`w zRqa9B4Y{UQ1(UoDSf84sJ6C&EHp(l`PT23EGIkQrQG-u=3@mHn`(acDL0{%TPEe%s ziISapgN|s_p^#+W5p17He+EcngvLY{mY~iwv-`<24ya1pvDGca=NwaRh!%0|N}sqz zku6=x)f^2R&>{6Dv2;*>Sy92h*^QKa^B@3}B8F6d)X_Ve#3hMk(D_o~@g(%qu3*v#gDU;2kpx;N~ly zol$m?+#+3z$&&o02}GHYkq5*FXDp_Up&GP*uK32yES9O;@=w&uX+?HJ{*uVK&i?&3 zbs)XI0jEDM@$z5ooGchgb+tcs&V-+eOz_`SV@o?rK@(fc|4oKa(NKPIaA5F7tChcrZ(JwNJ3-eAMxLh0U>48%gw$Q=gyV2q9)I| zCtr7d&c1!0;qH2WpZy8VFsm=f$E3zqhFSRgH(kvEmKB8!d!5RQiFUs=h)M|t+nsDn zH6KQJgclrnN-{mIz8{IB+A776%v=M#=HHH|^2&2GxbP+sC#TM0B?F5{>Qv=2%ipS=S?omo zG(r6H6!=B#IJ7uskf9$zDMWcD5h6eL#`}Pp5Py__lk0KN1N3)T6;>AzpC05cxjy7)QsLGkwaQ?;X=yx?Jw4scNKfIbZlk`p zj&zM6o&&hc&RZ2lE85Kau2Ti6y{^u2l561C2nb#&oA^Fnz z+B<%>;q!eqULR<~Lc89fE{diV{z`+&Sbb(I&0=;Kl$($3?r*@5fe6Xus|3@M*XalE z%jjwE;#SM5tGu?8e^YIeXo^gVl>P+fHBQ07|L%r;b^_k>QP!X zH@Nw7PwuVU$U;jyCk75*@(t1U5aXYt?mX*)ry^U=5UMIyE)%iVQ14;4L0UlT6s|%K z<$yk45~k!q(TG~@O4`D^!bysVzTQ`?$ zRju`(3*43gsUSiDU$Y(V4DNOZHy?h^GcVtHtL`)Iy|+9slx4X-nGq+>YvP!T??HTb zinzXKMREX%xv?NVWEYJ&eK34v7nM0?!918>3}+$vhJuvfIVdh#OwfP~1B`0uXD9{~ z9lCardi8oFogeH-yG*^lL&qL-5G@!a*f!OfcTg|s8HZpS6reKS9=20|ZWY{Dc8*W* z9bA|3%usL_&7~>d8w?-GB`tpw{2Ki+KmQ%<7;O9ESc=L%`2fsigc@n8YH?)sw#LlMu!bc|0(FZ88GGG>!jV_Pk10V2c5}!+zHblh@CyA-Epvzz@lBOogvcDnUYfM3vbRJws5sV$BG$UIlI{bt>1YO1| zcu)LU0xMOLWXG*gs3N0~3>6SLV5Y*B0VmhAg}0H$vK|I0@%!o7^r)*eJqNGaVqeA?A(Pk}_ z5t$L$(Tisc=m}=gBxGne99i9ctT?GyXoILyk?v_6#la(M1l)wuTBzm}8RW1GnaZZ= z097R}Axh-Ps)V6XHaQX71xW4oGZn7N%nvSX^CV;#@nGb2A(@n!R1Y3EU9LW4>-dRU z@eB}zPHq&$QkXOw<^x62l(Xa>dCX^oF(p_`>E31sCrf2X@AT0Q3-3Nk81)3(H$#Wb z`?%8bc{IED4bXVZ*3lS*)0KEM0vN3aO72pHF%54rB@3J_to2)seS)MK$HfJ${Q?T* z$oh(#iowVdPnZ{aY>x!b)9#xcX4l3m0+h>U_YZ32lp(i8UrmJz0t6iQjHZlSVVM`}DLqs171H-fIQBeomLg6vSkN&8qfACf(*k#51W2up6iDO{@ntA+Yf z*fz`CCd&Pv1er=?gmwx#Tg~p)Z3&mchYh!L6LM(Kv<_%#O6^T$+50%GPBPN4K!>v= zL3jil1oHXa=Cw6^ZwR-iQUJq7a|2I{xw#op<_>jRGrg~9r=vxESsU^&%v4t+vEu_@xmT&^ zja__+qcf1q6w8>>w+f^~&SIBr%stNL6kXK*C~GfrY}NP^kGF=IoK79f!daZ=0QHzc z2!!%2wPl^9CPxcaSThp2iaXM8A@W&z-=^|_;!ja4N;Ly*#9EBlhg#Bw1{C)K^GE*aBC(hi zu;{if#Stn{<^d6%^uXayPq>d#&u6>qRhds{JH17sYCV$QS#TvVn`&d0v`htwja*{s zh_A<0Ud2D@3%e3yzmWG-|bIQwrsx*_r0QwF}s_0=Y?0)IN` zT8()vZTGuq(Y$uZ-!n77o1sT^|Cs{TBj?5PqdszW}7Yny$kYBia+B%oJ z7ybUQAMB7{JbRmXueX8r?t44|eK-B?AiKx?-#|WXp#Gq*SqLBWd-h#3rv#9_n6Eqt zAMyP^uXGQ5>AG_61N}z5d%=4J-UCJW@ZE#Nf6WVYM)*Lw8)A6pJ6JeX^qLxl49s)b z6YiJizUu?xzwZBr__&RG%PqkH1cH7;ZsZjaVw`=GuD*SiUHW~jx$^rRH17I$%p8{0 zJ^<{~c=O!1>o9d*4$Z+&kCU+F{Fn~nDWSCV!j>X3kHgJB4~G#eYU|4760>Fd{^-VGGslOB=lmLoRXdF}!VC_w?(l6NZY|S8zw}r0JW#`jhl29E-dYJ1Z~o^fy@EL)Yt&) z7*ADB{rD(=@EB}e6fs-q9MLDL5zOTpcvGit4kdYZ0k=KLe~{M)*Zop=D-Y3uk}qf* zacD<;?ov730qcZEwyr^}@6^aEr{|I4{fwTW>?c0u_Fe-JFt#|RBOBgaW6tc%>-`f1a0i0X9Wm)ao%Y~~w})Q+KvR1F>j@I>L9)Y{#5JYNJ-Em#p@;MUmT%3d6RM{y+o%Wusw!H(z(BiHs85Q^ z#IP4Z9^1W!wPGIhm}dP{h$;ph=e`H5mX=I?{%*)JOe&b1U~R*Z;a^mIryAj0lX1Vl zNhvzjg4s@D*!|D#n?#{Tzt~*1xuQW4vryj8W1f;cM zx7Go*p)UBhhm3dAAELcEeZ#wZJs-MXEdGR7f?qI%2bXV}y@7d$xNn}lk@^SPGsP5s z=mh_GQW*T?{h2<4@|r%35>hft^UE8Q7H4ag9-~q+{VYpLcQq=`-PNoBMJe>VY|2Se zrV_G`=B(@$$ze+&62(fWh1F8BEZcvV$QGkzWLa{`msD&^NE(%XoQ$I6YBV%0N(sAC zqUdTg3pFY#rX_`1pI6y@tYxzk=S|Ll>}i(Y7Is@K1$}Ch*4_yNN_61=Ek<|!`6=vjUH8ZB) z5WFI9i}mleA8EfZK2vW+584qU5B&hB`~vn5!H*1j2!wY<5;*aT`md6|M!%&fU$Mzz zet5kff1+Qm}k)Fi=-7A$O z3{foB47+@yu-Lpu!&d0w-ne6G!7EgY#d$oJS8Qi>xNz(|L#nw~5D(@PW~Q8F3g090 z_!P}BdO%Q&xlil_70N!xw$j#9sjEwIUY%7f$yHF5O^8gav?{0mB|`mHY;#*qt#p6I zkO@(tBZ*2BtEj|H#`;YE!C$7!X|(ZK#<_ZlA0-ACpgCvV6JoAsk#+34a+08)C6BH} zs%i~euE!IuW)}eb|D{5@*EA%ByI~y+F_u^9909dgan=Ok(BGj8@DPv}i_~T9cIr<)u?ts+IjZUo34L1lXVe=XC7^KifsEc>pMAJJ=(PMe3HyjW&aALn$8t@W*duj zOFStOiczk&cG~xYrfE5Ca&WPcSEQ~eXF@ivao@<#v4 zG27O`C8VFP-QcQr`V3qzE^mHAT=|XeE|ybqf+|h6LCWU7SS(J+uTi*dB^}E66!r;s zorH>VO|W79uh9zPY96c6ux=IWImyD2DY?gkW4<+BvYD|hHcT_+*<}!)eRo-=Dyqy& z@}U8gOsgK}6UrhHSo)W?)us)hYyzr498dlb)|oF3VEGobW|JQ9J0 zRAzBelqJ@%2z9?(uXGGj?wVwtAcq=@qP7XWu^{Vt z=^k}eqIngA;?}T5mq$7#d}7S+E{rv>P%;cW6Z6uCh4z2W}7oEi_skGxpsb0 zue!vSqf*ou#jZhNmui7&m$z6Vw`Ei|(^jgfRpQ8~o3OO2WxIb>)6?A}BYr1$6ikNO zb)x3f#`(BVLDJfiEt{mo82_sx>~;A1sDR}BG~yQPbo~7%WC6{$S>nU|lGi3jo|a~e zwo|we^m1iCzlf*mbnx3oL-~asF3p0! zanSx#kn!Aj_iC-1m`nDWxRBxoj#+Pvt=h4``KHX2zjouR{)=~N>om`MJXpToW`0Hf zNP;ZZv~7=Cx|y_i*e}N8zO`&uH|u`aK4#*vrKY8T%*WUuB87k9l}F`%SZJ8p@Dql2OTk(ATG#w@1FI`z?at&% zgnq>7yj_J6#Y}0^Jq}~SnZZS(895T#Li=+=fJcMrhMZDy)7dg%DsjqT^$6d@w+Zp0 z9_n)yVikJGjH3DV|IS!-C^MuzSh>FtZMz3(E&sJr)&6U0vT z^H1DibQm}<44%43_{(z^efQLkc=sOJnE-bxyceCf=Q-#(r#PKMjU<5Ry!qxqBwd(J?j2ubuc=3~^KS5^ULQD9daeMf9^kDhP>g8_NcD zCrUhyO{tJ$P{{jYwn z;2(C87t||<+g|nfq31%26FLdTC%vP?5Ub&DM(-p_a%I_(X^N)pW%z^GWGBxtW&iqw z^gqF*5-TX)L!`E}UCu#Gh;7!IHCNXMB)lyKnr(mGIR|%9Zd_dwur_em+3zcHGDz(B zH|NN)j>HyHwSy_Mj9HZFugMkJNv0aVE-_udy>&0f`Ts3;E!b^XF2P<9-PlKY^-CqU zj%F5X)9NY5KN*w}h73(-gmIa4V_se2(1&*M6|E!X)NGW2B==c={W8RG!Z8!GS_+gr z*NqN7Ojz^^Sa#how?4eIIoBRJM?k^H*w~k^VOYL8{6z#ly>YMpqZ_~bQk%Jfd=%Xj+|9jAsRn6prL)^L_deiRe+22!%4>M@oYcua zXfOT*dqHXO)hfg{w3bS8mvlL5H(ZLX;?gPe>0JV~)f9UFnhGL)tVw%u%#yH}PPEFl z+_ioCLw6VhAlM{M)-U-I>!8DD<81As-+o>^#z90=_L8--TAY63OueN1z^_=HJiRjT z<@w+^U;__+T3c5AcI04?uCy%%oUU6ft=XERZ`0>lzKPR=3P>(0jebr8O~NK?gj z;GOFt!Tybodjn`U$XX?d4Gb@1;Fhnv&Gf~S zGuqlZjUw83&vVVaGmrq`=F3B=S+AVGJhTR%sSW={=qz8d*zk%KZO^=zS`}}h-$2}-|e z>I(8m*_u0igz!Ykis;mXGF8Thv;mwzkTcA5!2lm04+PxoV^ANeMe zi>QgJRob6lUWlBpgUV+Ofni30k8Y!P#^%~C8j6Cx7SPV5?b$7zeq2A%C3`uu@@p>3 z3>8W|s|&(WbB36esO)&%ho3O@u-`xXbD>>4HGb56>0wIOMElRv3T|A&6+jE0y-tl? zMc?w~KD6hg2LepL32i?q`j@lxjt<2B8tW{EZ;X~SQ(_Fgn`$Ba`$DU6O<#sOYt4vc6m;NQ(HSH8?>%%p{K?~XvvX^Dm zj2q?E+qRr^v~M}B@xLWmQEu|nWljiI-zsfJl=f*-AiiWg_wW+M7-wipQGFR>Hep^x||3w15?8sYCy(oQ!jKglPn0LGqZS$<{zD%ip zeJ2z>R>R}+`ASO%G+1!@6MK9ZXLx@Q-Nf+Z& z=6!!D`iS2%#PIj@$#_Gb4ye+^lf75a%3*2#St44r#)Bw zt(VAyVYNGBIzBJ_O5s(LzXtoNi%s2^gO}b zwIal3Q?iRsS$)5z;|V-#ib*^5EtxymWv!NOr1FzF6@K&?P@`tsW@~xLS!ST`>}QMH zme=YK)5lcl?y_GK+A5e3j4RB;6j~Cxp{Dlvi}`i-Yei1PcqZBd2bv^Hj`jQcnvOk& zXH6geb?49;{mYSaY?XTsUtsM@!xG=4c+Y}YteUL8Dt_57yvdxbpxUBmZO3P!p{hv{mCi4W^X z19yX46v&2pc!bI%a+_9oN4o%7ffhlU3E-;=zqYM;*#!%-L(6_|A38B5v~OO7x0M&Z zO`Mzl*{g};LvB;ZemNXBPv_LhmwE!W=Uqll>(47euUpNBvmpHFoz%^A+4-TDL{w7T z==s3S!Kf*DGQY{H7Ff)5sw~dCYwAX~@0tCKXQ;^Ry=M`=__dOL^yP)gK=4I49jB&P zxqi`Sybb|{J%;Qr;^SNsX5%o0>Q(zP#)fnb+}Z$FZ!*glnhEh;*-QIuvfjH~uAVx8idfR3AwTK7o<1be4Zp8_E6sKAJKnV4QFxY2=@W%A+9oc6c=T27>GZ z!652)YfJT6iEvZ_LoEEi~3mRJ9wp!XL@OQL(?z>A)b$tfj zF4Jmxtd}oJd_Q+h7E5EZu5dB;Oz3Dh_1Z0;GHFXEZbGwA##`PR>I9ifSa`VbVux@rATSlQi2R_JE$_7hoprKzlKt=M=aT z_s~At6}yM;1V84^c_-}PdJ!(X3*Cx)L4U31Jp#``Ch|c63>Lx#2&Di_XG4;Nz`kVX zMftbFfZjRrBt8g$#==W5U)QCN~64zOSR z(~#v{TqsWnpg0##fiEndU?=P@K{={$ryZ-a3gG9?0g1%zL*cYK<*;y z1;s1vh2X_~?s#c!4nF3+WtD z*gxb^yntT}a5$Go^eK5JpYX-@XfB}-@u|6x7u=iucv{dW0EnJb|MP|Nm?r5D4yY>b zgZOk^*bVriIJXz{&w6yvuOs`^J-bc#;(J7t_(lSV7yH9~qAu`I34aGYG8XuY z0#@hxh(EQ@b`!pM9|-*BIp3;v;BxaWPs-@%Xk1>d3onzJg&Z(IP*!m5zI zIDmg{HK`XEAhz%w+8g;eJ@-G@yQbz!pf1}<$F^}A)vkrT+Ty@XkeGKY2%6UMe7iA?e+8x@;`CO zONbxrUrs-M*lhgxf%kvllG2L*t=d`Y@%pFQdFA@Z?#lLN?U1IJ0;7ONQX(TW4*LNT zLPmx(4l2E>o=%p;ls+At5j=v9wxpBR$=OcKu+SMGBcxof_3XQ1qiR@ zbD!OHK!N?T?zio4knB3w%Xhps$31la?e&24BYI`_rrxB4M>w-$Nl8g|zyu~$Nl8+e z9~>TyuEYo%e2Q92ct8e5L%BXPP?ef1CUB8jOLRa71{94=WnN5}6L|fCWsek`o2ErLt42 zB)25Drt0i{zgkHqiY~i(7Gx>yv3LDTpqNKP<5tmy62nq*6qPeG@HL@SPb5RIbhrdf z?Z>6M(7 zqD$2wtLgAa)s?bA<=j=fDZJRRSoA>UX+61>dB=)at#P%G>`nbG0CQEg3j*_`RG;?d z9UmCRH#syZ0P~yOybn?*Q1LJOLt~gS5bpCl<`+;%8S=mSZ8MDmRk^Q0>uuY5GvoC z25m}f5f*?2O94AY78Pq~2PbDtZwM*{Rt@};3QDCtG3?&&Tq$vU`JQaC z24=LWBIUWVtI>}`%Z5?bf+iFGiB3x`O>0(KPw(!qe z&+DCD}$k z=g>If%x;oTTT`(B$Cd5W=54lQ8bzPJM4x&Q=+&I=qF*x)eC_NM(xj~z6oJ7wwMnVf zAhj=NPp&P2W++`nIje{b{5@%#Z$wR=W_{*@I5m`G=5+?6uP?o8C@vq)U0J3wvdH%6 zHfc~)WlN2ppTVY5JrN3cUMkeq49Z*=;cp?~Ra)^{itjW~otp=8RBpwZ)r6utc_0r< zw1}#5{#xZbFuOowmvJ{$t4b;bihtTK0p&Y8wKdyL&N7mnF;Y-5)#jLuvsHL7Plfd5 zLylFP2*7nK!t6VL_tqNZS8VXxu{%!@xQCS*lviO|pN)juhKpag9a`&uA_IGa*FV!u z(o`;3U>H`GXrYn?3wCAXdnSk0r-y-PdZI0LCA&PC3y+;|s`{4_e~Ygk$~nt9RdTYZ z+B5!%#DV&qzpHAmmVp~6zzra8`H8}&Z%bHU7gc*!V4iZ?^T}Dy(v&aSW?cp1$r*wE z)_K6%KuF5+|0*)|GkPE-0xVvV|CU?^{uP_*;eaUR`tCAymm(*+mAiTHipy#bVRRC z|NBHau9Hh{wfnn#!p8(Ll)qQ6I|}Z}awyOFLTG-u=T_dc<&>$?1f9J(L3)+WhRu7H z&wi36IVIESA`4!Geo_~Exu~y z9IILc%)+`0#E#-94uB=&`H);enpHgx3ej6x-5=l>I3b$AS zz@qqlQblwpEWKYQKG0}#_W!ziL66ArcSp}HdU4ORiyYs(_X-`SNKyI_o73Oj&=}M> zo6&+#@?!)o2DsQlC(J4yL;-nVau;4uVphD!RFsRUy9s_C+QP(Ibq5HW%m6AY+0_r( z?{P7hj8fndCrSQlSrTn_(9JKSCtIJv0VZv#Fzd9H3|Q*AXDef>NFz>bYOA$HOWY41 zAJxQOlNz#wQ_vwQ$YpUcsxx@30h#OOhwf@YFcK!0PyI)L+SF8|W&t;gcwrfBb#pKI zphaf&Df9SKvz4XfH1=w3gNUse+7cCf?=~4)o3!O=T~*C4J+>sPCktV9du?f8X5?h0 zi*h5n<#qDXw4ti9I!m5#D6g%vwD0HLIuEn_^2)+q=X&UR<2sFAq+DTHU2$V+L3eF& zb%Bd^hn!1Pz!*(MU0tGe5>~M;H@rJJ`=eT0Yv@rDtnc|Kd)f*;ZJG12$&*r7++E|p zD?Qyc=-q3vtVJThJUg` zqN;0a#rP%~BP(s4eX6?H4{2%6aqG9Bs^TRKJ4#DEWMmAdl1PwDi+ z4{cLZ)adCARrOWc%DWYgWt~42v_;Jy`|r$GQ!T7!jJ8#ZIkV^%N1$>Z2jKMwoK%s< zN;8T_0vBQi%GsMHom`z*2dQu_BEfMs0;9xHAw(-PNiI>>+lD!s<+XM;SJ?*0SizDh zG2l2ifZfa&6svmIlQL*AHeEctolNYT!R}Nh?nrhVvPf40LcH!PXwYFn@;L=kSe~xC z<>m^+8o;a|dZ-m6v;k|64Is8nmXk%f=^$TKFb~=c?U2c@Jl5`UCyB?5{0vOH3!55I zFeb{ddbdYibeR1wwGfk>RU&GNOcS72!0Zosqkg$_lB{yDs?zXHmX$`88H1sLS?EV( z98EVW6ZC-6St&PI5F4Se$14}R_)QFGHqGGmK(3WeBiJBg2DVrT-FjhJN(`cC=cWc> zljQ9WpNWIBytS0Y+05BBW)%eRMzPW&aB2(Avz6IE6P|KP#a;UdAw*7L%3pK zNw|)DLaWz6sgieo4Fqp=ibsp*ZumLq%+${XCK2jT`4w;zRZ1Wj=il$BB4j*1bk|Cf zzsrqMx|-hYESo3;xgrgdOjmfZc&D7U-4d{_ zRX=m&&&$Ubkz<;P^v*b&|00E-FVL3+SOl!fnl@|IjaNmqH>z}+3{)gda(Y4xf&I83 z$9A10xx`;Eng)}`vDlri0$tFEqA^i80>oMjw>C;?rn4lyFJh~(iBQ2Wj1)%n2D)WC zFJk|6RdoW%K@Ki&!Z%2^CAV+?$`{ojJHuHP4;lc_=QP`tkfOLNyXKS5V+~$n^f$6p z{X8f2)wQz>9juibny$WvbMr73%}cqk!BetN>ZmdqX`hof$-;mv4Disq6iLPnXU=)* z9L#|)crs#tN?VF}$I-K+NA#q`x-w-6d~teYM%^4XjKJ z<5`)p6+6O{IIs<$j)TB~R&7-iBfaG4Zv@rPNq8M#D%7y7C&oIrgBcEdlwVMS#5l`2 zxALb!MrW~>{rOj_ngoU35!Q{!Z~g(=2m{oCxP5F{d>v135C$ry^S9I5nKc zAv^|MN^J`f9#5e1dZBg@EkW45daO7@U9xy4v}QalxNYY;ZqNb*D7kc#lxn`cHW5x? za|$)G>T`z#_0A^RMg2=Tpo0M|YG|+${2zacLt|nlSuM!xHbc-wRC~$99H<$*S~G?X zfji}8s@zx-Y%+`~%K;%`f3%sbRP5s_xU6@cyA{7|WT~!aH;8}?grnmevEsM?M-&i^ zMvUXxjd?U-XlQ8E;=rA$S7{*HsUpL)vd`i0hF5ItBk|f7@NjrEATf~PtOYM77Gjy< z*Hy&ol@#?h;cvj_*5tR3XbD59SYAQtF&nwpv(D3r&BmKf_T7>I>& z$npA)WaM~f4^s@p(yuSa&n-o`lZ#)Hv)P^Y`%XCl!n5S{l@nQY@g}USIaY;HXED~= zR^L<#9+Sheki5V*&~@U{+a|tLH)^P_d8TP0XX*vm)-YUPNW8<-ZE`Fzv9aJt~a8v0O^%VH*y zFNg@-zbH5)=4xS?ZQwtZ(*phs$7X}@MkG$CVM-=USxJPfOuJ zl}(VA*K7^qZboO?Q`ymWjVpy6)G)*#UYk`l4%w=U2_}|^PQL|5Kgw3VO}wQe@fJZ8 z+VTY?Ev(22o|3B(T%@H7H`7LMlC9d!uotAD-OdCqkZ?+nJ++`@LsaF}e)v@$DpC5! zFQ2+cW>>?RRX9gK4(FrCc0tu;71-8ugKE*`>eM`YMqU}DGd&ao~pP3YA=S`Jg;CB;`Ch#BC} z45`|=f3-NRn8sidC(brIuK~-2(8bt&WuDYX0y*FZ2 z%vFf%wQcS-g+p>R8)4mxD2s_hwBbV{`o(ia_7zUp5Ds#{%F@exfL-)q7nAT>ZM2YQU>H@5S@n?Hu}Rboq{5dCDmT`i5f5GD z17@aKBT80E^>IpS5rik)h_wC*?5l{{bb54#J3e4qTdj?@J771bz+XTb1gjJO`==Gw z`a`Qz=vOt02y@t{>ryg}G_=Zwbo+c783c1qtpsgm??SaczSx;a0E*4ENI-7rr?vxR za_=%IOk9b9=4c8_YREiN24%OtG`@oWQ7cMY)rpPm5dP#u)cG$xeH)wKHc1nD#Yhpk z5-bclI&?aXzi-B_jfpe**VqzADhO{+o9#=FO2q9El2NQ+TXftU z2y&Q;?UqAr%uF@QYu1Q=0(RtFZ>GN^E#d}p;>fw;dE#UvzXqCE(xOnS1h$9wuCH(5 zKWhc938-sH)VbsEFbB&2sHMUTX9h2>j;RzJ8nYughO%AcibXfMD5@wl zqFurtV8#?iY78hp8e{Rz)|=oH4i}J&16K%mPyShm0}naH>@+El9@HE4q9RH|nc7jk zp@*Qp&-8Oega7;#b_vC^jVLB8<}|iFK>pm?=?Jnv3_x)5XNra^o4O;|iysVFrHS_u z+pbhkDd!;cUKO+b`)TFrYy|5COy~)z{-lNnU}Oqd@zyb{l4p7R0_3rWPGW^I&{`nmeFjE!81iifK|NWmC@1B6yMmwvNFIy z*D!K0)OOF0L68lc(VDPt`?ap0%Zw-uG3LCCW#gV|ZSso@uNr~GEv)c#bJ=3!g^WQ) z>Nk?K75z~_@(r*BoOWooA^Ci`?t4L3W7~N(dpnS{AaOpVA2U_ke`p33^gN{&)R|Q73mdiLJf8DU(m|lnv*kBL&~F@#Sz}K)<=utN{Nc90YZPwh#7RLQtpVP z9E`lXr_teIdxcAV3p?F18dTCdqQ2*un%GEVJZ!-$GTmt*eK0yC4Fv&{{%f@$(m|bVXzDeR(?9 zW-~FHI||MNj`p4^g(7hde?2qTd|FW?0rHIeifzStK0$@j>iT`Gxh-Lm_b_`u{}K5Q zRc0wD&lXLsFZ(G*0=wF#&&^Y3-hK{y`zK<&5m`|y*3sE|6*Tm4D$YdqJo7a=b`Tz& zmh78S=c)V;t#ntqI+1K>qQL1ip?H`Yd zHH)!cmyK`k307s}08<4u+o)h&@#wHYi&W(Blu(^hwho|sYTSj@bLx7d zT{dk!*i2SsqD^I#r!zBo?)eC+o)a=QINb2l7VsC(o%$r~gVvd5*bZCHvKONkkn!U( z(aNsTom=K1H{8|1Ng+JsoF!ITcDs>0C^qPEP2PSvz)7TdYN@bjb^tk2{23gpDOpRD zp9KF(KU_fy{+!H%kDa+#6p#l`O(zal5fvy8un=7r8OT7(CeN{#I+oUjx6X3wCDtdh z=PbqtgoL^!xHS-e{?lN`Go*=xKA^(X7VpxW+K6_Bc6O!)o>R5w2Ii^E%MU2PIOOk2 zz&I4{TEI9I7-539snqLs&cr*E?IOr*OE(Z$rxI_84{V`riVpOkZAuP&qVWk05Lnj{ z^GgkgE-OMrwXb&wp1G72x?RPHa-=Pk%ZeWm}V;WRjC``G-`c-0y+Bu!6$=m0&!h@5u_4) zWsc&>^qMl-1=pM4$WlC3f<&C+RFiHV>XYzb8RN+Dg3+-Gq4-_&3xX2ZjnsF1FGsPz^bQW-IDGUj>P|M)N62qD-k-$K=BCLC+!FT#uVZ!h z7@!7$@H_h6IVf+eEfK^I?l2>EMmiA(UI?vF9>=@azGBYh-8_u>5_382n8Fzz^Yjdcfq7eloh=Zj%~L;Io_FBg0IrPFLpt;sspgAiQK{Enr<_$IjM<#XL`2}(U-|_iUW7x z#yzyVa(52r$A9>#_IqY`3vFYk zxZg459R3u>OxB09Z)Ug6l;~3OAl09`&vCp6+53Q}nj|ju+w6unobD?57)yn>zzt;$ zZ~yY1FXkERgJIaykMlcY;QH@#VRA_pSqDU4oRY0gZAJR1(}29Nnnb3n?tJ?sd(K0M z1t_;S(=zuJTC>fq?uD@RCG*SY2T05{^NT@df6xc>$A@$}um3vu$u+ zH2yR31mernhGo7RQlfnUY6CmPkA30;8))64K6Q>fi%7eumU7u#5u<)9yVtjdI3K>1 zFCgH3dxSV2q#})R6?KYGi@&tTiYFH1e>faU!kd?>*ey=wSLMJd;7!NTjV=99c()Zr zm?$@eXRM-Sw5FQN(F7=|=%^Ux>S`zGs&2&F8X!tQeTJ4k>V8!ekkN#ClP_8a`5(__ z2;08(@LHDAGJ6&BGEd~B+l_Nh*urtgrHdMJ=#bic7B@zq!hb=2Wf1rM(F^`g2tPN7 z{EP?`B;C88L*9Bdv?}yJGGvmv+TiPyvA*e(sUsFq2c}M=p0mBANd?`-#gmncSwZ%Z zEIlI}2!oaObsV$K?D`)gE;fD}-_%9yDWt9B`TESX&V;kC4ahg6luP;5@raXuQs~dooD)HetE{h!Xf?RQz0G7Cwv9@ zj(rvE9aSplOj(M3#|dR3KWfbWZzP{1S)D80HJemrzp6DnP>{296506(9wB{kq}H*R zVHha4&UC0^rqY|TrPTwlFI*usAoyq7`7#ogkbf#0H!LaIK~ZWSK~i*y9SwQ8;4pl%(62paH%u>_4T|WebV0#{eo+ zHz;eQPcU5)G_&l@YV`7p0C@VKU-!f_mR1?zBJ1&fAI6d1yrrF<_LW&Cr3%Z<1))bP zjZ)#CfcZx2BA1sPID4#-P+QXQnDz$GH#X5Jpajl3)fbYD_LwVKmu?5A`g^p0x-B&#Yvd%~=dbFDg>^?)&p9CFS%p2(4h1d}dj)0ipk%mo^2 z*a+cLHp`U<$VBP`*O!^7Lwp*J4)OPzQN8vgLWQ2l%EBo2`mew#urJwXkB(EDGc`|8 zPjiw!K+b;X%hKspaF#<^C$f1au5xL|zr*{$`YNHUfGpF}>(*rfiZooJaE9yvpL~1? z+(mI5pVRs-dT?{Jc2=OJpW0OEZK#XegVIZ|8I^3)^wDIzs<;jkc3>oxmq!K1#=Yub zolG<<`i0J4dh*Hl?$hC>omg-N{?(cl-X2DIT}{R2TRQYOu0&S4;@5b*BRS8wz--Y^ zllgF~p~(}YO=Gp-?k5&73&kcTUYyN&^vFaEjEEy1P&!S%w#l060!Ymcw_~kU+)sd+!tF1(eJDi}J6|HEu z815cs3{6ooTw~E<80+M5q0L4K8u|w9YqmXmQM+ve;_e*>dNENwORC@SZA07hrS}vE zC}W;WNxN8o*HcIU_oMBso9TvZz|7Vxo5=Vl3nWn!O00D`c=K~vviT)&+5~Id^=iN9 z4y#aNf8uX+uh)YKIEj%ijO`s*`Khc+i(FJ|7*tA?``+n^P!Eb?a$RHK4k?EF5=t5Uxz z`}9bP)p;VSe2m5~i+7_(pS27}r$u9bHseSE4LeeCf-RX2u2}~V*?W-JN!uRbS(^3B za@NfnJ;^EybFnhbDm#!zw2JcYRz5wj**vsWk72nPJ+xItSA3+3{ZdVoSDrTq#g@&! zrU1NIqVoeCn)H+?tm4$hmbIBeq%zoukSuZpePxq5ToZLH;(P3X1AH*>12;(Optz_g zU4#d5*af1{X}n426v}-bHdF04GxKgwaw4TqL*`>=?7#)#7niwR_OT81&&J`!g4wt5`v=kz z=J05`lg`kLT+BLBogsi$eV-%zOs2-~sFThB-eCv+lS=}9So@Rj+VCu-{GkzH%P4!~ z#^jT)*@G8N8yZdgst7Js33*5B_JvCT@6jP1h|8U4moun%r!DnQ13`|#8(X!sGrPo+v6`zwNG>-8|dFh+ep$zmU8fSCgQk@@ZD0`mqg z{J8~?lIXsaU5cV}S&2t3R7iRKjAoff=U zVozErV<%#GAXV~5u(%Gn4N+Atf<`OZt{)fOT$(4@fNJ6XQWFunLG(@nLlj-1vT!$a zfiHc&9##|5B_Rh}Wya-!bR)E%wW?hTjHj~(S&x}iypBMcXME+cYa*LUE_B@9cBJ?2 z*w)@_409Voh^kp2EGbd&; z)!wYk0tQ2r192$JJ|sTT=+2syZWB;8QMz1qsDQ$GpHz8V@ZF?nqpXEIG}-tvlzM!A z{@BVee1+fH(;rVL+QqY@$Koi z)&Tc#9v>FREP0h_Vzi(Hr?;uwZ9^k_bYLqT5rZTB*kR18aerwZc0IvWCfvx#e&k-_ zGvY5+mK!5;CHzhSGkxERh~%+MQ2cU#`qM}#p98NH40UkMqS-BL!>rlpDG^KfCoSz` zHw|!AHuDU=sfij#*x}`wy6a65lA^uz{y5HEXAUvZBN4|fd$W_3c@o|%CV)Jjgf)G? z$V!??&Q6MS9jW;H2Rhha0;)&R?4S=4}aQ3b)0AvNA^Bm{n!vx(E-WWcN*K zo=h_)G1QK0B+;NTvd^pJwv{b;u*BXDzC%ezKqN$}>l}Yav`za|&~1VokRp8rOgcqz z_0QGIz8UhcX_rmhM4Zl-u!d!kc*Tc=+@NTK8iXzik;(e6wnUpY{lam+`83rGX}76K zx1^Ggv<7oOZW9b1hY7`(mFhM_3#?=!7~AVSUXJDK8!mZYUofoQN zPLygKV;F~akPR?N1DkT$ti1MOKw5FPZK&UUKNH|2Q}xy{3RZa5yv)belGId&aNhbX zBAzwawp;3d=^5?9N167z8Z&+W!s3yl!G9ir(-xi)Ss-!Cx3W>)$wGZ^m^kX@LS%qE zrV|^n`Rm^?;VWbI@$3VEbJ9@zl<$s{Drj|jJ2xYy+nJ`e{rze+o>)nNZ86rtG$@MK5oS@x11H`|#_x1`hg4C%v7hbUX<`U%Mf@V?-3)H?S&xpSjZ1prN()&I94) z6vWXkevM-|2l&kiKg>HIw4-}aPMd&?lD2+Y>+D_)d>CWPYNqz%8asSNvc=4Zg)L#6 z@;NXwIA@ss2ZbAIW}!8CrMzarXq!+Zj7oI6Sn^9aZxbLir)J}pv3;-08#`;-*JF;< z1Xn2Erxib>A2uPk^$ihsl2>c@Etp};rMQXnnecxQeEP4(bL68SzxnpU7A%s&B1oQu znBZ7&<`7qRLX3gpWnrf6?U`K7_l6lQFY+C)?9W5k#@WGX%1yA;Kn>-mL& zQb#!;_g(~-g8bjxW&#V!y6c@#FQWD>rq*cc34S;e^DhLn#>9m^Xdasm!>W3oSMR~O zWpkk1p(5>*ZfpgqYPb#?DuO3}-K*zzfQmo$TPBmWUI#6KOUppK3;zm#f<)X2y63v7 zUtml%hB(qtNcmYL__|=Q_+$w*`(_cu5o#DDeo2XI7%=%-PFu}$EqXhT|ES@MycUsS zT@~OnuIAXI5I0R%$*|Up#fb7}%}>Yzod^BSvBx$D$^;vH$o1h}$d%k^vxwlZV#z~k zj}CJsZ!zRowbXwO;GSiY&4ymuh5P#+|LK8-nqJA=yRi;ijC^O$4SUA)GOCC= zwS^$=n$%mgwKiS!_cGuqEPdVOUr0f+O*oxBYKC9g<2uxitn~E7%19FJ zi3(TGn+Q1dQUtEOd3=S6FltRWuW}luNp8DjtTr2e6C!U^^QYI+ME8C>k35A{RhF9~ zKS~a!O-a?q9;L{n+?^hJw8Y6nFqW{jlfIFu6rcA9%DF+|CAh=~9`la{CH-(Q>1B5b zQhO0QYhm3#=I(&G$a(AH(`w0o4*tfT&mcmXH9xW2A+*nH-DlVM=X={YeTWW#oCe&F zGSOHyx*1T4nbN$CWQEZO>e>f9xjFX|Stk86nKa|yxwQHS1f8T|w{+IMwEiH=Rc#<4r}+6Ngr!$X<6(T56O z>vrt(yd#-!w8gTnv$}zYb&z{#I4#BfKaU(8fSGiJry#}Dr9GLpe+xy>8W%5kvv=M= z&UuH}`%sy;mg_b}+gQc<=)`ZbNZlVEDee2+mQrH>{>u4Wmvx)V@q0~SAc*Y#2QJ-i znfT738HQZ-MqP6QI!M0xtgECPlV&kbVT&*KxUR>49Gi#vT2dm=6hB1 z;$F8sgPGro)z>M@&;Q`2+a8H&#lrXdJ@1^yp6$1zZZHHn*&oZ3o|Lq*tNmOYu(0e(3_;=RNPX$IlG#KJV)5p5+1Dr{0BTE#HL-gi8LX<}2r`#tQ|61&YDI!6Z^il@f)3I`%%L_adrP zG_k<|sK@jBC50)#MXkCE(C$^^#f3S*xzXT?jJUu_sm5p0o(7~MV+wbJKbldW2Tnek zlb#0BKh*Y{eB&iwO{vGr^8W;iz>FSJUIg8u$>kr2!B8B&1AUpezm3y3VO2Yw&mfJ@ zCO?^CG%SuV7T^#EA5tn{F2bk&VdS`aI1vNL^^WR<@a zm|ux`k$DhB?K!Pv5UHTXMl5>Bx8mJ@oOL=!A)`IMTEjycoeF3z2f@nfI*ihno9Kcq zMfUV-#fPjxq{o!Mxc<-pkwxO~`w7lN1X3Gpb`t8g3N88<0xJ~G3+*D1*@+fy&>i2{{%!=$LEP2%tkrW}C&X@e?_Kc<$@hrj1JIBIwPi?dWBP zfR?*&VU6(9V#Ni%kXf|&!c@xvvnEo@iZXpdppti~xrw6gyb#lYu z!qOy9(GPUvBocBO$PLHwIaMT2e9QX)*wt*)PxTwL#`yCROlC0*P*kgl7j@?#-)9(w zdsk(2)-_OO{GnafAlklxs$YCxB78&Ey*FcB^4c1xxB%;cxXP&6! z%BgoDdlCu@lN)*u^P6}TKI?Wdk>=YOGZ;4a&+?v`zYAlvH>e2W(Ayqb$+)dYQIrD< zlk#qkcdh)0xItbUZYh2+tH#lL(x>!$K@AssUw_?u(no~=aLgC_y`YCH#s>R~4W|Kf z@T-}>nrp4>QtT`HT(ulS7zCHt^`7!7Ov>2>G201=N8{+&;DVv>iUW<5FHt%$eV^<( zCTUM`ZQpL>H9m@H8;*q+SNRQ3%J^6qV*_Sr_0j#C=Z-_3W$yISC!am>yi`H!I zpT*S{C+;qgT4TUaoBDMw;uGSZ(iO(u>55rB>Izr`k7 zYNz<8`ql36U?tDRh9;*q^&-Cw-+pXtBgmE*7MMMuoUNKgG$5A5fvp2&35&W@#V$}U zw2>Q%uvEn_R>Y!7o^UV3Q5$wh7S2eXsE^3QSFf3lkQ;XP+av1nzUV(eEFFpHFc-b) zqyqhiTu$S-j?G%J%$SeSFiXtlRcWGBV)vrM6==g1@-S3>Ot7#2gjO$=xnZ)hXkCV7 z=G7(5FtsQ;Ic;u==@ILIN>M95Bxb_7yWu4OAHWN1l?C_N29N0pYkG$|efO0zB^*TZ zK$|#QVaogjxm$HKrhDg)w)79QzL;am@&$KYH8f&)N10sP8SXvY*8#-)$onxZN6fgJ zv{Tq(vYa?)OK)CiLYcmmVfT{!{wF(|T=zT4%&EDQcsmV=fiwnAHp^43Jq;ZV75d1~ z`1mu7pdsI%Wv!^lu&Zv**eZ@53_DQqL+L6lay41#t!uCLV$K=}FqC1=Y6~!2>ha3M zxBPS>Ag7xUti@~<0No%{fl_%*R=pv;7W4XKk~@(XgR$7Zh;7Z`2 z&InqL`L!E~BSvFSt5;ExPr;}>#s&_J$PE1L33j0(H5{GEzaFc{FWJo7b(QmtRk?Bv z<605L2t4x^!+{Q<98!`FSV)9WS0P!Fg{V$VO!%R)3pW9)uR@c}Xx^_5KsrhNsF$4# zd@r#(NeLYiwkG2v&iTP8wZChAD)vhp2cA&YbQjf{?n9d94`a!#2`eU1XI8%>-24Td8xm8w_-!d$mnbgPXomb!1TTUj!2?;shstzz;IEanAGxFh zk@-qo;mN<5`gqlp@nc+XO0CMb;b;ZG&|q=BQV#%mX|TQXn_+*KW>eNqwI=rKC1iNK z=l`bUI0Fv@|F$)*366f*0^L~4u!D5*Ho|NmTv!nq&2d7JP?Rvsj>^&r9M_5**NPq2 ziWqN4N@##dXuwHmfJkV-NN7MvaHb~NcM%&!509or##R(J(+e73g_@I+ze!yJy_T(k zD`rinX<@AkhQX!LCM|}iQ;ck&R-w%LHwpUvrqE@`8ObcU*Q#nxsYz;Wpa+0o$XP>f z1UxYiJ3`(WL3(Ku97LptqS%MTjM8lg@2AnT`9T~%DK>keCo^hF@5G}S862z+PjKs6 zl5+DlAx^Bt?GwHB6+6;LF~YkS%T+(}1oD(+q3=@`;f9h7Gpa8Cqvxigl0S?EHeYBJ zxD_lCXk5GmpdF?$tS48*dULNAeRvLSHT(j{pAV8Ug3665f-Q`$YEIJ5l85JHVpRDEc2IZm){V2Df zCIBq^@G>Yn0L$X+*so%(XfzOm!bfGNk^6 zYb_dTH(zocyqrA8Qv4m>9YLr4W^gbQ@;y$(Rsr);HXTgS0xFO~9&PQ!<3l%vwV0q` zIJ#|F!1S*JCuv6ctQejq@k}F}xGxgeqp{1UE|cB4LD(w@+6|tF4iXpSHmN90Dlo+@ zM~VGcf1FJi2%aL@ z9SWmVr5-9b0k0lJlqCH2A__DtO)EmlTJMzW8%}v7BSnh)xGTjHEbiMCvR829Ut)dn|Rcb_eYzl1LCiL4p@sCUT3ImI~Mt6 zj;|<`@oxE>^Zjy!^)Rb8gI2=dO5k0#9gN15l|1`TLtEbX=`DWi^_EGEsBDCUAjT)64dj!E_D{vdcEXHznU${vtAm2CcT>w@!`m`W(s9NfRFxM}T% z*iKs+q;x_3kah^|o20)%>_G2LS>bi@VMd$emdfGL1H}c)IlJMA<(h8pod+~3@9x|= zEp7!iAY&zo(P5ghEPu!lP`?0>UTXMcZb}wzVtoR4Wm*49zls%_v|R`KMGo9$%QYiK z9Frz}t>uEeEFKOL3amnsyVi`Trou z*CL_L5cNi)hpE=-sfToZdon@OF1%ZdC(eTvJ*g;Z}-kfthw@ zLLa2lhaBrpeLSHyG~rJ1uh^?j_N2QKnJ2HFG^8Ma=eBTxAq?=q)j#d|ha0$t2DUgZ zkpIgH`z|ItpA&u?>!P4v`%aRJ#d+A(2|c&WxM{xtL0899J)ovnFuaokcoq^S72%JS zRPK}nY7pN#2N-IoZ|l54UY$cqUjxVD?car71;ECww*2lDw4wet+x2d9-umpZ+%cGi zbRpxl4cWaa6qk1yCHQbQw&e*I`5-n=JP)ni5kNXcAr*(*ap^S@W**#@9|BC~B7U|* z--$)#fioetLDVwHc|ZKXy9kxlh8Kl}piF(zV&pSmjkOCD9Y>m%Apfx{^lPwL5a!l# zeQu_m$s`u7$`4qF_lFYSRSbRVJp{~C*a8s^t;!R`t32{m{}0BjF`FgYL8jj!@~=#g zJ2H4l?<0qpi@#=861LCOAFU#4TD{1(F@qGh>;dYcUqY|UX2M}a$^vi`cgSP`l*a8J z|56Uhkgev5u>6oS57YA1{cxA}+vNSQNwDH3>-srf)!ViFeln!&1XmqA<7Igw2l}A| zDu-}f_&4%_n?{s_%B7SMw9SH-wNt1om@=v5^vts*3e0 zaT@h@zz3h^G_?L=E@o~JsTt>chc#PSkC0)W&E82A|=^$3Hny|XBlO1#x*V>f?C=cBo6^0&idOmAz zwQJH6hTdY|{N>`VS-(c;zea?OlVSV_z_C3}eBQaZWnCx|fo!xG&8sG^kDGgk_=-x&T1$J> zq?P?=WKB3Ns3s^I)jU>)muCiE=l?u%srtBnT75F>#lW`s$m;d-*@ywNIQrVa8*sQG zRF=-BHs$0l|8egJQ@^YTB9VgLVwiWO@ds6_VJvV@A@#~?XmJ_@%Z@cIUu%5A2fF-` zMg;n6Qvn+P#kAljWjul$KHy+hw!IXWCTH37voJqRnuNt7EF5`zCoqpV?zBhlDqxVS zSu1C+vvzahJ~Y8>W-=Hx^D@ zd|7KdpC0OBjd=X5{CZo^A}W5i0QEPKtX4;!*U9fcB9PCJ+J!aY#+adAd`^~m>$Uj` zsgU4IxK}}>RB_vZbGy7|1C9+H)w%RT&AST#r*=Cjk3QbJJjEVIz-=k z0HnSZo8+I89g-R;-iK=DaoHsoDPvTK6ROFQ2T3WChp&^u9R^-<1_gMjSt+D0VRz9! zrFYdIq=(?II)~z3Wp|N2QFom_S$Cn`nqH~`)!p=c1>LlLH6JQpT3&`(skeaTbF z-&DNnN)DEQB7-F(UnbRS}Cm3WC_W-AhU8t zNkNrn>E90CH5%~aL4-3>Fh!r>7oa_F%6caqLd1r_R?WQR&1r3RbkDnIZ5PDk)Xqum z4cn$mG*x9$cjdzh!{uXlWEJi5Bt5mL*_=|^h^C%9<5LF2fC^vqvWM%56w~hqvFwz> zNv0q!Qi}b+I*zdZ&!M_9>D%xE-8x0r2AdbN5mq=l1H3>ZhmJwqL|MqTTSQ;@BHqEo z9fl-f(t90lKyvAD@RHex^!y&jHi{7$<*;>K+$h}Zoy+u~0q;+m*XY$%2bq6g@er6UOwj+SO&F`Ir1ud&Dhj zl{jC$kiIn*(g9%G)NeFg4Xtv}O&Dwgh?>hROUk3No7Rlt@Pv1!OW2>NKmX(soS=fX z!$1ryqMM?hEt#mH$dEsR0_;HBcNU(Bq-9j7rh4@{^}lD6m>a- zQs1-K$OsS^!Qd6g_OIK47NdtS9%*(y%T0vU5ki2BC40g^_QO$fo>t4 zD*6NKovQ#+-&t){@ zd59$RX}V?1d3aBNzPLWvIT%%uKB^JfFq1&m8p-d&?_CmB zDX-9?&$t|ENR)<7)kA@c_T1W`EaE{;jMBEE>rFYa=u?6;8NkF=wVa~bXcmBJj?|-z zpG87kV-L#LoOrR0hxyo@2%_@`cWIB2gbvqT#QW#f3-k0aaSc4+N|$zR*f8V9HGUtmACDlrNPshe0I zo6k3h3vHjUSSf?~r>kXBhrFhgQhfJQF`Z19JC-kL5(vyHTYn4a^nx)rbbq2t&WsQe zZDzH@kbl%OU~AG{no&GMzLaR6a=_WKZ+vE(`i(sHh1=HF!+b(${hb*2vbANH%#+t{ z$c$hXA_gimwv^$MXDem1&(29uq2-m_qJuw6{#Y8UO8-dCiO;&iBQ8m8h9QgS#^)07 z7Wj~l3{$%qj9~}?U|R^wyfEswNC4{Dpk^Q1ArGSL@zH)UA7b4JivAQIX5G=!J~Jcys&BiUoLsofM?PJ&wWg)_%d~w8W^_JqHYYJvK^*mz4(M%dc#i(S`@2~Cm(t>DC2-|pL6}=) zsyH*`0kr?B>u5rmiZGlyphZV+j^OyiyiPLp~N2jS;<3=#piYXz8 zytIkzE^#11qjK1CA<1L;*A?2j-xPdy2DRv0HBguYeU(1sx^)nHd;8pWl_XYmkL z{ZK}ViD&x2Y}OybA9|W(EZ8p@%tu3|C^9^=B1xO z(TO*%;n2|9>}-zYq$WE#GA@kPoDVm7p;$ofYgkEVRr9W;_D=BRPR9OorV^@ ze^Sh`LnH4ueZ!+c1JWud9 zx8L_Sd3oq<1o8EsKa%#J7nk~3l249m7Jj3(tMKVzm-92ANr|&Io1nFeP_9^}LfcR_ z`k4KVRK{dLHx!(9Q~)QhklLV0q&o3vNrlrBP<>B6_0R}o7}15L)t$E;hyIS8D<0Cew4r@>*$_pc&1FA_L*BLHO^ghZuv|Cs%gXAZ? zNuC|mSKhNjRRt~>>7j5R!!Yc2c@?xzYc-jIAQ-5 z3Fm2=KikO%(EF4L59e4>B}BPjnxs;=NpWZvT8wWYnevey$Mp#>9!-u|)O8?|f3V6s zh6w9Gg|=WbH>()6xp8NgRR;*u0kJfhkFH_CYuyhgdMffPa>0KkIE(ZSx#|_-kDmhB zv>{m4-PH6j0yV48HMz!@#&ai-k=vp^8Hf=u^-HBriihb zKh)C+dpZFufYWRpA{`%hV5yg*LHn!DDdTU~V<%*yEH}2(4Yu9onvjAG*Z4|3go9=r z!$LP0*%kYs@{OFDc62UhI;Ugp!>Q)6OdIsCNz@fxhvwLt6N{qy9vtNRM(_1Vz9Br7 zZc8tJMZNSmuyhGzq?DYLmF0Qii4bQ>o0Oc8%SH$9q4Mr$#_KzN$p!e`LjoaFFH~~N zGEb{Gp>nq|*EGu>pJtEra3;r`#D2weLW3X|dLisD6rxm?T?9yE=A}%ZiI{kg_-b)| zzjLFEnSP%M`!Z@u++&s1M71d4C)Ng2`(Q_i^)s5qb?jwjkd+$JI7OfoAS4Z{*g}5+ z8(vxW#})K)z8!%>6^QG>q@?qvD{9cbe={cNKz~JBM4qio z><8F5gqgQtUP$*T;Iv1MB}w@DqdPL2;nHbCz0J{k2*}3bDeq3 z*W(OhvJHB~Wya+1G5RevKZ~ixhkE&y`DfUq7u=@jP>jMaeU#h3h54XL&Me!`tQaK} z!qDCkHH$2SDsw?j&Pl*L+z!Cw0-fH>5AUfMK^#BPqdoU@S<~F+Rp7O2KpN~~RZOxD zme!6r*;=^dWB!+=ITsr%rwXsJ)cHwN&vLtF+nh0~xZ8|&F_(l@>WqLp(B_hYlTy=O z)j+(vPSwAzc9hEaQv;X=c2CM!S(c5lNLPYhiKen*zl7p%u-^68uRuco_z-pU*oUYK zGO&+zuc{i?LDJs8lQV)r7lby>7_Ar=hiCY6<_I~1FAa=-9t=^hPdzz!3UhO#K~)OD zy1vY^E2aG|-H`51?6mVIf#4UQ+BYopVqj9?$!sk^; z#D=O$g)kd)!Hq6e?pP&5)8k*fdVSka?4(ij!vGXkOGV+I#joxi6OrQ=Ouyt5S*duW zsnTP~?U=>c6|Dzd60^Cs>qvX&cyU^LOmky9*Li_t8UE1BlpJxg8?=3OojmhlO|v&T z>1k<|SR;waG%DiOz4Vcu;EQrcW&CS!(W0y!Lm}V~S)*=>X~% zYkF~Q05cyD%#(Q8a!{Lpb)B{Wgpn_w?IOvoNjFH%62}0W7i!I-2|#oQ*5TBmzw>?l zHo-6Vix{OQNO-S@@SW@Y@=?j6G!B}ZB;cpOC#^|C7s*GV2gihZ=G*Sg!lee(K`_#1 zHeauM)p7TxNwq{}-0|OMSM%0Va~L;)Pcur=i=hXid{eKw_%~y-7k8p!&V=`sRd&r2Gr@| zz4y?Qhn$c~FRq8Nk(+dr8K-zWIbK5}J|0&U;b#l79$fvd;ybRHy3=cn3Egaq;|wOT zRwi3AxK5&QqjePz?>s}d@k^6P^GYSRYsLm6Ioq89#QXeJqc=o9EjuDjHPDlc8n~M% z^ClY#7`OG7ojWYM^M!tRr|(bkf82vKb|TtbL0+G5h$MQU+CS+SwRgZg->Vt*ci@s9 zH{%7ifSnU&r&ezQxxef+%XdJg-+k-!dkHq4AmSA+17hCwId%LYTh0*%!QT1X6#YSK z#F@`l2!iz94*;!xkk6-Kd-;B%ec!Udek{?61c(@GNImc~cnu6`gG7$;q!DZQGT69@ zFWS&UU-vM)L$--uA}{VWL;||}`>0H@zhs=z z?f*L9(bF}yg?qpz7%--XXnKPEpkZJE?3Db$>+iMxT%Hh#_#-turN!g)Mk@N_k)JvU zmVcwuF7G(!bkaKSHp=2A)cd`@{~L(Z9_GKmqzYEKpsh`aAC>$i3Px)b5~DF2w~^FUqRh8vpH{^_=-^Z3|6 zliFyU+x_tK^n7%ugf@Plw#_%%Nij+)%ZvgUCP)qp3X2H48xoG&32n@aF3O9jnyjXZ z?t+GN3nbPLni4K~D=aEYOgKiguaS%fCZ-6=3yh$OI^WmYv6D4UYWj8M$KShi6Zhw1 z`NF27va+(G^1PpZfAMJeBvw0HjaKWXL69@P4qKy>6ccHAjOtFxhJjatZ)_`sEOVhW zCfpLrH&bALwhw}=Q6YSHEG#UUjXIrKK*ws9@}Vv(A+0Ws)X*6@qy4Xp9M(LTrBBKn znXt`3>1DC z3~TTnc9>%(g8lL@Mk$y97rC%7R+wWecG?A84<#6(>QwMr8>~91$>5!4NN73?I=WC# zZD-rc=Drzi{^up_{S0jy-2CQ#q75mJF!k`o=0Z}TGf0QKW$6M(>MG?zb;M8+E(4LU zq|jgAdp%+>BQ)ucGPwy$le4?EG-;3-Iv3osiuO4&9+a*6Zyn>pJu;H&+3Q5GeZ0f0&U7B&0IQ`_=OBHwHMgzXrYjvmr zu>|4uZ~60Qb-S+?5eq6VRop$UWb~9#pfk>qjm3)%CL7H%Au_;JW_^7ltY zXbLAPT;pKx<@_2mn~5iQ{Vfk1RuzqVygd=UV)3|`Q)XMCq0fX46s~+CT{3Q-#pLYN z+x*kR1CJ{(IC^bSUM{K~=ysH*mV<-_G%{Q}C>kGU_lt#pkEFn2qDAR@^5mU;Itpa$ ztXKspJO_%|K`_2F_?z$PYgM=&6!^iq6f=MdkJ8jcJ>Er{U%T8Ybhnui+@ zYZbdr$B!na^NYJ86LNi@{x%zNXWx@~H>flqRGKIRV8ux}Y+Cz}<0sKK+`CV>^B#L{ zk7V9<#IPN?>deh`swZSypa}F6#IfDiJaIhMxI(un{%yX)Zi{QfZZEW>S(mzpw39iA zL4y#j|CvqOYyYvwLM{4p+8a;Lg9iA{X-|pIV6~WDs#FcfjBDL~s8wy9usxfKWqfbC<894UgqZaBQ}PCJY{(zDCXEK=qq!-dQuiIfU_b05@s_jmMQV8i^|@MG*TI^+CL zbp315Xrr>@-tS0cUj`!AaFI=Mrqd~PjHbT0F}Qm~EeSv`so&WNkdrC{$fYE12Qch0 zNL$!RuMVL0#P$wzEH0XV=SsIe@c9rFf4pKaKiP|z_emDg7WJ3L1jt@-hg+_S$l^da z+VN(W%Kc`(LdPuM24A&8*(1LqxK*%2o?5#8Eqz6=S+y+}wyEkN*9pOH&9ZBE<>#T0 z1-98NVbrP)Z(tKQ*s4voWTil~if+tf$K@vp}7u1a57~BF|yP!XErw#YF zDxs{Xy03hLn)`KS*LOoZyVR~v`U+0B%x=hRL#Iu|8{)<4WVZl3;_#t@N2CtK@6K z+*)EyWJ5{4e7Te4coASFCtq%x%=ER5C6Mdmub9gBeXS4z?A3mpZfD1AzPw*aDZ(0tiz9aPn zS4({Elhhxn<|7K#BKVU*Lp4wS>>L`FMC0V|O>%w5kWe42)BrcXCn!4hj>!42z#;=6 zvUjpMjb2pyIfk&aceFZvf+XS}TgiK3oF&}V*~MX2cLFjtSPgG`Pr7jWC0IhF5;b1Y z?%6bmZc4}_@{yFX-ewIF%?@T_0p*po5w<#A!h?>j2*4tq~GLAquTn{(H8qd)Eb zcPC#8`QHx3-ws9J6v{t8`QH>@VPB<_3P#?W{T$HI!9t|jU71^0wYgqO?D&pU zVuj-Q@DIg*GCrgrYN$`wcA5LRe~PvSv!%P}2`U_`ClmglLE^*3O5TztBHb}0&hG&9 z(1Ia~_uZ5h^iaHa%cVX_xaLArujC=m-Gy5C(e9tT^K2)=+hHS)kfp2Bu{ zzlh9F454uEEOlD`@PAkH z!t~yeU$y;_{1yy^g%<2H^`oXAQ`U41Ld4#^c*S;p^F6lSs``?oo;&Ole)%UtcW>s$ z5l8d4fqsv;Q>pu=Nzj792DiRZEbK$d@HLQ{W%o;ISppUY{p*yw>%dQ+sdlc!F2hwm z;0yF_0*~6htI?!P$X$5|B zc%319K*{~N)p;a`b^2;gQ57gNB(tZbsp#i0=zmh1BNHR)lybrX7W4e8yb=AcHnt;w zYRVy#BbLwaaiY&XS?%mKI7*qVM+bPF*<(+7i`ee=TP^4& z#Zv7yZ2)#l8%`&J(M>PnW>SM7`Lw|>SluQ|qoNOtts=|wm+W|uGRmuwR=vEO_z`7P zI2??MiOMNy#s5(P-GM0(zR_l66W|95UdfjJWRY zq^d-c0v;6aiSW~!)UXEY6}RzrN+z-(vl^=UKiM0?69svyLS7L$0eLI4m=gvVZWe8n z!(8837oeIE`iOC-_lZ%KD@Tk-yLPkf9%>o8XooLM0P-m|K;3*KggjM27^cMer@^!KqyZHMh$+5*K@rgWba0rB|pEK z-;p${2|}8^@VcrAg5qG|z2Sg+F@Z%zL05b7qX&xvyBfAK*VLTZJI_r#c^~En+8v!Iae^n+Ez|~-(ce1 zkrc7`*=Gj|U~S)q&!hNrbeQDK2c3yi!C?7nmN;TZVU;$njI3AX%*W-}K3Z%?16zA* zh;VNK^iQmpzP2zZ<=+?4##JU<%fo0Qi z*fYNy-vrm>J*l_4!Zv7ne}^#3T=su{%7_U|V;vY!bzgwJ!u@EU>4hCwM1nx~S$|Ue zh@a`L?wjsg!v7xW5K`R6V@-bEybYpjVgLxr0{05r&s(~O5~#tJTD0#F_rjL z15J-S*2i!jq!RI-BPk}*P?iAbrHgO5XL~gpVsOWexu$ud8KAklU_SDYNn|@=d!5F9 zBIPqW%25d-V2~iEFzh{7R<3lDa`GfxPS79?KLmc+mrh6v!uKS~*uk?Jx`D60!%N=` z6*z;^imTf4>U5|7cC=*nHFds9q4iZJ;pvF9P3CX8dF)& z&V+p*W0N1{$mhag|6AFF_mS-z9wa);sLl~a*H|{VGI|^k0r`@}24h|EQUjg;fX@!s%zjRoKQ z73t@1j8M?#^7lU6^D4q;JOx*D(u($@c}NuUPU>L8tGFieY~KxJ3Uy!M)(dnwHFWaD zxa~%0dVqijIrx|;;zO}Y4c7p5i)*`G2n0PyYe!B$8;cf#_Dn&|jnOfMHo$`T-_9(QN#IP$T#Q3EhCw`lMS^jJ@$v#?>`A z1>{ewKmmm_W@!Vq9@$J!*?{!IR3})3G9H`qFWrP>3H35G@sy;C<#@GsCdb|(w>j#u z$>@k7f-m)1>aXJlX%Lv5^r+wNe5VYmt8q+e z4*rB81`NqtUIj}8AJ8aifub110lyDRVnf9YMe9lB>Y?NJbqSGok=18OG=wOY#f6BL zy6%SlMAh<;Q;P%@ z{zNcI(OKjxmQ!WnE8hxWBG(gAP)F&~e?xb1j}O=Wh7V>OC7Og4jKvCeD}mROgYimd ze`Lqw+=dkrV1WbAzybthK&5490g5x=Or{|}x2FPlrZ8pMbo#%{ZPG1rLI35hw^dkS z8dJoYW^Tc)(@92^>u7H2rG5B~6h20|&>z#voTkr#0#kn}rxqD4b7PGf8IIFI74JN`v5`NZJv_+o@?e5<|3MswcPt?izN zItmfpC1uL=2&~0DkjPX$_|RkP>6Q9-C1CI1LSY?Kj&ao53dbN^CXf&ESgC zdnQv1;1b6u-s@NII|Ncu5L5GEnV~*M!7Ob*U`f4vvMV#E_`OK0(QjWLOmGO~x=cH` z3qvK+p~}7=bz-|c4y$yXp@FE%hcMUCFXIWs0Cg(>hT>$}`JiN8H7nS2`zFs(S{C|0&#w)Kn(kqgpBI< z2Z(P63CrYh41R-Bs_5n%`9!T{b3dSc`1c3)3raZ#);0DEo17MD8{v)CnIdT${DkXe zj@yqrCh%Aiu41{kZS#z7Zt}4f@dYw^#rmH4A&mUfe*>VaEy9JeU`!`Sn$V#Q%>Cp% zlEnq(`V~&B%J#%u%I7oNMb+lL=}ImcI63X$_b zV$e7a*#zX@QuT+n*d-!2OIu25(wLpjs@m7tcqz0W>-W8@PjKmiS2>Vz?1E zFMXKEJob(a|Lp%x{7C6fQi11#HU;!Tn6=@TTe$Eo<|-Sx|79p}6BTtXdMM_0XTT?) zy^~@DxmLIaH;XZB1~F=en4}JNse~j}hp;qr4Q^Y8>d-C~j9A8-X^=L|Uq+dz(q~*a zhg;RO7()n%dw%Tq056vu|! zQ!n1nu!06y>VW=QSxz^P8Ns!oWpAyK5#P@`+fxGiLPQd>3L;!(_w;I!JYUl$tqXI) ze^#6s#Gmk73!>A#49Eeb&aJ5gr+MeM&K)g_QZG`$8hK6qfX;#&x%s%(Lq@IE{R#GH zj%O!E#id!c5uM*s1Tp&gC7Gtbz98rn4$XQ?*A0m()12HzrVA8wbU|-q*8tmm19Rcw zhjuu+@QUzo7EBu*_7q+lnvqy3$E#^1x23FJHEy#AeHK@$G&lh;vKm?)E7-^sjdJI~ zTv3J8StMM|1h%X4E&wUktA@zWVoO2?z-L=chxD%$0SeTB2dh09SG<1Nx8w#=tq8Y` zYKy{fLYQmKlFJF-6HdY?DMFuAW;fYNMu?@t$};L`M#?4D`9{hiGpejb$}t;e0z|{f zSzwdIG8eoK2k40Pw6a`-WJE*Hi$EttOPbhi>Trz`j_htR%5!0(dRrJ*w5TU4Gw9?3 zq{KliOGZGLGsCcFdGf1*_Eg4O=63v+i3v4YfquvCyO=)0D%#~rl{fwU4EbiQ?II;7 zHIhN?E8Cafa!OsTIe4M~*@$zxs5sf_dMr!(zApCnu*ylpe^@wRt_}=BLPDtwG}GOf zfg^fcllsm1B^`FJW6HmKygJEy<@BVObHBg7gb{}#gvnOD#$aUB3zPL1^s8G>31}P)>yLW#xu|+(UyA& ze!2{t%rPk!nT70T=y9cf(tQ>%o8xuPYBfpvzOYKs;8M0*K6wl-DAtuuBqTOIE0wE4$EjfK32aak%MA<>{{pfbb;$aCjGs_dTIsBs-6R~d5@&1 zk&5i2<_nLnkgi7zhOcRvIIpuC{r9l670)xK4E486nI^hab{E>lz_NnykgsN1-I$OQ zjW^A;8}UAPNe@C`jE`-~^?)VqCkKu&5G-07Cr8D=AgNm#X46;Jz!KF8e;y9pE}kT_ zoxgG<9;xb+#Ppxf9&D3DhQ7tgX(VR+X|F0sQJBlL=fV(*DVlVX7xa7U;&e9G1Dz8k z)>={c8HGhL zrDk>PV0Ly=RMO~QNynS;&%dAi;~oWj4@d{R418`z&${aai))aPJY!x<=Xm>TcC%d z=!}vQinA#MdPTcU*VfPY)?N$BNzE0MbDB~%O6*dDTd*ft`yMXRxE`M|Xup%Cd{M$_ zZ^oi!k~6j)XX$*XGqzeI+W(Ejov~d{SU3K?5Od6my&ytoYRoElZ#icB`)EF%Oo43*}S3`h-_RavoKz0Fmsei7biou1WPke1Mxh7Hk*Su5ohLt z*;E?eQO#fyE$&-@|87l^aKp~|cAbCC7Q!&fu8(~)P{9@le!~i|HY3>7sI;cUddWLg zmt`W;Nrt{wUB6}@#&=14Y2rTQ=SG2R?%t2|OvSl!9k9At?2)vML$U6A%l`qJZI>7F zaODgL;6u!7gfNNu($F!S)IJq2`y{ z9cf@$d#tfu`vCRq#lP+sBw*-psIZpxD*R!mZ|1NkbNTWr^Q_*p<(Id*w)qO}&Er4) z9p7tzvwLxsYV<=c-+UoT@X>a9laIL%a7;KrS>+UREGmlf=T1#O<}|KJB1h-S z*!QH6sdCATXwA{BUyg|AmUq4@T2%f#ZhE$wk?ILw{JT03@xjd{*26DPv9m63vBOwe zc|%>Ab;Dg6b|YR|>X7JM;Q(ITnEkhhYv!!S$s*n%-~nT2aptWDB=)@vs|N;emoc3< zO~zu)Zca&5>iEtCxZhZs#!3((fnsMLGLS7z-hVA@qFK?w0)^I~NmV0H?C<7DA5yib zO<;AYE{`NB!YM%q@5ra6|bzDHWy-1Od`aKn(ha*Xg z>j&bZC1?dg4}NRZOmb8>zb1KyBE7`pXn!G147G-CaQ84(a@4zha7$tO-x1Q;G*}D| z#(o*(sRJ^o6B``i^VEq<+7=uh9h-JM ziMBdsiA3s2-ED?v>qic+XdwPYwV1Cse#5(tXlt~MmL$Pjzk9TYZv46kxz4?;%o`3b zaY*H`302;F^Usq#=hb? zxH#<6I-GAt7OFnpU&Hx1nR#HM_@f9fG?QFb8s&hi2B7<=A5qTkd)iOpujMoCM$#q3U!UE(Gz&@}(qthgwW##)fU_SOErcYmb1UpI9I~u85 zjNl1nG<0IOTdI>&&46l1OU|$8zDRth%!S|b9w&t+tE-Ev z_m0?S>5%x*uEOGSuI)rmPMyDVToMO^HL_{XXGQcV|1_;@S^LWOI7D-&D$NL`2bN*C zoklCIA*ISj3y!Ba6fI9jak>M^hbdic&bH6^c6b$*c8wC`s_t5i5S*_F*HZ4uRVcq# zIK?g4UNNyNLzSMFFsL_{=uM-d;W}8i4MuwawZffXxh>0DHiRC4u-ut8p%9jvoI3C& z)i|H~xTw3yk0OtL68`PP6XA^3j(gkt-@b{yD1@(CU_d~qus}dG|BG*;qLGu4otcZ7 zlbo5$zZ$2D(SK|dQ`B~xQPfbs+2yiWx6!dTe#ucq{rUoKqM{B2D@KhM)|OTYL`7{G zCtpvz44p1%I_Km+y6!&7{qWu4 z@}9lk`T2b2`OV~m+YhX39~MY6KpLC@XG9;Ut{VejVlZFbutFb@46VoPcl|Ro16ThL zz{nAzg?y}z**g4cgh>!_ClBdPayod#sLDhSlLSvfB2E`=i`mY2PjpID6%0@ijw@bA zo0L2sRu;-ywq+~Yr~tK+5^g)CGm!Z+z3<`J?bFNHlc*&h$6$FR-7jz5!s(RDl!V+N zT~T}=Z7!FEHb_1e9o(|mQLuR<9S*m1AEdj~ENt#%PD)0^X=ly~#e>{YFs&9jnb}-M zk8v77KGmcxS)NM2Qo~|-^3)JaB(PhRKI2faHWj+C(HLkwGM0(#_7es_0MDbXy{PuK z%{86-QoO{>JMf1XV`V{md_}GZS2)0?n^%JhRo79}NLI1g$q}6_XLaGFL|turoBS8o zfEQQ!2`rsTj776qzqyrFx2z^OAj9;Sx4uz-bl)qY2EW%PRt2g%Sh}jL^4vp+&FMgD zb0G#7T7aW{~AJ*VWgf`fO=Gs^yz0!orQ%l9= ztHzStP`#n8grZQ%#>Ipe7iKs?xz`gN#Yukv`#0q-_qPB|bchPFaCv#inT!ey^F+G2 zo+z?OVW`P6_C#Gs@2tV5bBe9HYDsB{5(o1}rm=Yn5f)k%^n;-ANqk{idus*y<5YSy zTNTg!zGDM{JG*mg2{aH-Eq3HyvTmP;oEm=x@7TpzS2$iGA|`ecz)}Zpms}Oi&(-r^ z+ZFp)tW5S6vj5+Rn0j1y%f*}fC*o#A}E9l%yiM_9j# z7Fe3XwE&M`+79?u>w;OguyYT=3Bb6;c%tFYgn?@acjafqH}uR@rd*=ACR=J1W1pNc zJfC4mqoAI{vX)Ss(y^V=>TT$`{pQlf1E6OQG~pkpvW5sqFMDtjLI!B_DvXjpjBlh} z5v^?$9-}#IbKLK!{Sx>-SqHp(ePhc&7{{PLLSBE5^B7Ptjst0WlkP==tt0p(+Q2a! z*?0E(7hNZ~`OI>*P$sN*f$ut;`cZI0g8hI$DY!U!#Xby9|Ec2Q^$LF%si)DGo?Fbv zP+b;RY5)3?L*C_?JZd{2MA_FvFT?l;nrAQh4aeqj_wMo=s0K0r+}!-mN&y&elVH;G z0mrtO_o;b8B$)q50LE!&d%*TQ-)w!_`$rM0cb*AhhXQM1n_|BKpo+*k9;Ke*_~Sx> z_wMKi@9M?JQ-Jg(uIp4_nM&R>QpKZ}=tl;AVd{S{^wT!5bv_6XkUcmM5Xt|-&?-i5 zW&j5(dzb$(v#;uo3eG=frhlt9YD`XNw_+Qq(Iz7m{Dqn(E$;27HGmQQg0R$|X~k2cFxJ;E%~)ZblU#(#CIoUy1sOuf_Xm8;V$0LfT&qTMVV+LtT-b#hyu;YSNV-vbP(Hgr|I{hisZGOlx z)Z(PgFg*U!!{)KcVmFzR&qT^xi+&8E-NT+H87kDK7!@M^i@|_tRKAsx@Gtg z)PT|hhH8&-nvrQ&O$@1`K&QgY+d8K5sG_92rRZLLlgAiR%^W6#42lQZ?XEb`#v^HO zq-2@*p5)>@Uqx5Vz3tp>!*27=!*?W(4xMuS(FTp8d?s?e3J(w@>$pQoJo8326CKyw zPsSw5`_Y7FjNw|qZu$H{o=z2E1B3I?(RlncGpsWH6;JFt4;QC0C?>0MklPDq9+}h$ zn|M}}1()<|(5rKruHy{V_wDDq)2qNXq3K{P7?T6H#{2V#+8)8Gktn7V4$TPbW+5*7 z55^vK43eYVqh>H+lnlk>rpr4Da05^Zh9S==<{9xV<)#?m2uzr#+$5OeSLNAKT>5lL zXFPgP#4Z%E03r3t{0$R(3Zxs6fG4;o^>g!@FNWdl_m_7?)TwhIo>1m7t(pRn)Sp<5S1XQEc?vcv~~tJ-quaDJnU|`_*w8$?}=SZ$4>OY5kiIu_47FxCSQf z?E#3__;f-)C~YyVs3vA@l64fyQOpmk_^3;7{@dKH>OJqkogI zydMV%OgJh~DoP9fVd3lK`p9v3xwL2R{qgw$HUyd#Wi@6DhrGT&$_*!ig^>gW7z{z; zhu@m0_Gto1Aqho0&xzFVAv01D2U`JCAsNwIfK4%hy3nXG($S6f=`%0kNGnZNpJr`j z>(60sEZ|J&h^@%IwHqH!?I%}Qrw-dmg>rlAwRV7Gc`a6GB}eJ3WCeEpGXXd%21$)B z?^(Iz5^J7bK*xhJZ-MpJYjjPCjk^f77cj<*%YFFtV+0!>o5bq;gY#xeJGm>9!3Et+ zRE@Kt+}>7_qEBhV`zpDinj)-Db@tibaCRVs(lG)S^v}jhn@UZQR)(Z+?9KSRV!eb1 zTwlpc9o0KW0zhmG?)cnYVYks?^{@AJqH%UN=DsrcKC|1G&yBvzxYGEIt|d+#ieMf_ZBS+Kfp%3QEHa2(l`NkG9JW9reM zO#FdLSs6>7q(>y{i4N(ORrk;?Rrf(Y8I;BxaRG)B@Fc9tNu?0oPCaT%p3xD%24)Gv z@v+A{&kQ>S{gS+@1%*|p`6L9--bQYrMtMG#=U;%TCAEr7Os!a?9}cLk5oOva`An}ER)+4|+h?-r!Ock1;1^cQs(_!* zM+XTAt=fd=fZT3UlsmmTj~#Yi#~b#puU^9Eo4yyMJ-$~B64xEVOX6FWp0HhOf6=Ys zVmnC#T#8jII}yBU5mslj%+|p}`T+dsMD|b|)3Ysi;rkX8(L!Y8)s8tiTE0IYmZNc5 zpJHXf972gj=LZHvSMj$>010~$_$yLSS)qZZ1L+L`MMqcBNkow@VV>j500a6a=_P#m z-l)*ouqoGA-=0XO%Yn79@1*EG>XFIj=*b^L+W|ant|HmQqR*kjFIADG>cTq>OWw!w z!^&tKd9g0lSEvbcg+)-ZaGvZw*jtSMMqdzNNrla?f5`i{36l8#MxU~gy{Utpkco+z zv$MFBt(lZPz|}>?#mUUb?mtK@PSR08Q9>O3vC!$*b}NR~j}KG@K9h?qd)+15BbG`6 zk5SY2aO~uh!)Wbvbtk&t%_11ZKvTMok@1i*lSmRR6_ErSmm|Y^G2HO00U3J}nP5`M>!YFy`66Sq%i5 zH3yY#42;GbH3XjRd>wzuO&l#^g2ZG5*R@a-#}#WEsrKBs4-KbN;qNl9b1f!L$sS5q zJH|+s69(b%xam*F2rKskVy#-H3=_oyhN~jc0+xSrfA_uKSnv+M`!GTTL^S5=8h+~* z=L-^aivIwGptDIhMe~I8QNE@XrVNU48xUWy4U?@Ye?u$P;0jY|ASArv{u+^t4ZY?F zW|ed>%9al~g{D8y4xbu^(#*b&< zmYULxz&g9fAdQXxR52j8T?&c(X3~B~-I&TRJW6Ux*z0)yk)j^@L($~y7bBHI@+VY@ zKzM1H(vp!8j>9qPlcJ!JsY$AZ^lBZEo6Q&074w5>D7B~#m>tJND{Igv{r_-#JW~Y?KfA7&LrB8$-B(#Zj0692JG~k&QTV}6bhLmUkIrZreS>&PE1|6V`&khYIUfNpbQ8Ai=46=*|RT$-3#2dVubVv2ef2#7~wN6rz{ zH^V`9NHiGUw*l~zYGl|b0WnAGiij)XPyD1=2-Uj)$c337>JAaj%pEbkPf2v@EZDyK znb4+~SOMb0S(Xb6#X!}-QNkNS+W7!ACl&bUI^Vy|atr>iaK6DIdyV}OM_oVS=-9;+-O2zDARRqp&{$jUr=&ujrIuJ{XRHh3TeN(u(u7;e-Y z}}`QBPN=pZOXE)@ApY+vs|#cbLw3fd7PRHaBf<4sChs41=0O zF2S*!#*v#iLKd<(_m;D>NX4_tF>8|%r|^d*(0rH9EJNP?7`j6Ga{hV86nRF{_B_--tf3)ItWmlo;RoK11A^2KE8gfvn zyY9e3io9#^-jK`xetc!yC3cQTv!%9Sd0L}+y-`;GOWfgQ8j|LgSP8`#st zY@GNats0%0+>1HU#R5aFRm7vG9H)*nXM3Y$a&F9(rLE0D>wbMzKWIqL)}llr_mYkZ>Li zNx&}n3r?l{I{E`?b zmy2iU6ixQU-;O>*7(Zl0zeAzEsG(k9wO@FRK8)fg8I3!$;r+7H?*y4X=`6BXxZD= zwytifN$+K6?#K*@CGOEP@7?u1_ulk=bN6ZDz3&C{0|hVV)ZF?~AS zAut%)5y2g8sxx#W1zG)~I~$MXr&BV(p+ogE2NqqrLnd(2qcFzxqfXrb3Cz@HAFdbM zRHtqL$R?>Vle0ddK{U{*O#ggDwL@!24b&+g61k#1^TI zIlCbwD+ZUz&8c2`C;~{@0hyoefq06#?RFQHX^bR>S|NIe$?oJ1gg>b#!A-tVY!S&$ z*?`l|Y2LUyhWllQ_=uFrFYKHy^{$yokL*Yelb`(Pgvn2DP}d_gMt}dD+VrC+MnCCp zn#oUetlFeUYs~s3V{Ph16|{c%GV>1@WdB%hy|hPh4Ey8@EZ^xY(zTlq(zC>iET(

B#$?oEp>BZ9qsb5}p{wipq|Lx^}0BsI9Pru(a|{*jU*` z*5(RCU6*X3ZQ;EI#j56Rj+BT|?gIi8)ls7f70S7k zrVcyDh9<9pk%%hN!O_1f%k~yEc3KNvhMKO_LVBuylhUFQ9AaY);2=b$v9r`|<|(a% zRaaUNtP#U5i-FV8*y-%-^j79oSS@@!jD?XMEh_buc1&&!Rx>g&Bz)pFYHRIw8;UF) z8#>DhD|b<1-%?i~inX(<*;Uv;tgYy=dXQ&XV6mLr#f2x2QC5#qj#tl6l=Nh*HaqR7`QBS~s0VoO^_YEVQOP-n_%HK>mbn* z7K(&CGqNjpM=l+f2#V~~0nXs^Xk$ZLb0g$TUR#U=$R+_KI74Tqj|*vIXsmE=w%Vzo zDppS_go~Y8n7mG|cbbr;t{dU9a4#@fQk0S9ts_a9VlIl!Nz4$reuXA#khBV{{gGO< zsiGFj&Qo8*+f(W*4Tn+hqugHA!;2ZuYMGNrT9%xyLQ1sN3i6;VbTi8#@qs7Y#5&B8 zO8_i!0|tPAcAm#1K35^p+Rcb?w~ka1k)F%8gK0+jye+gX&1lO7xA;X!ac@zQ#lqj^ z-{s|p(gt89}v!etph!gcs(m~)iqX=mA3IV-#>I($f4XrxRRIyua>CKMYMD-<@n zvDfZ|Yms<}0oobQ5C&ljmsc92{%a8JY%l0>#eY>yPf&V1Gl|6#r1c3wUXxeuHqMxq z8_P={aj#~SC>^718_DRQDO!PpV^~Cb5f>LsmkDdL%o{1Uyn#4LqAZJ<*u^b4+S9FE zE}O;Mi6aH7H56m4loa3cF0f9Kg#sso7>%D@OoorQwd*b|k9TJEsdyxyEme7p-4n*} zV?42G3%lg?fUTIYJQ)mk945+b>nO5ep*6Id7~<4#`|F8LxBbU-GWCMi#9&IeW4d-5 z7sIv#jP9%Siwk*Uu1%qXYZVXva>1}l5G^vjeI)7JjxRec7jK`Tkwm=iZuJG(UasAJ z#k#W2qk}6kg4s=nggTT1DB>DHtb``QA;spbVmAv;G#Q7JS>)JaD@NyXd7Mdbx|6k* z)Cf!smq79H7WT#VTeL zT^T}#44i05dAk9RDzg0ekQz~3IBudG9D*1NGgs(X171Pve40%J5%Tg_*Ak_%2E5|k z1uk$IcFiBuV0i_3indv;ctl+nl}31Hp+iYGrQl^3CGgV%liIq^M6{G!35rtfg+g)u zU=cWL+(MTW<3Jh5U6VtrViUyZpHbRe6dWYo9{D{HiLkgazkj2QA`@qjbkDGG*1gLd zVZ8kq*#7V%IW{w6RL)>fB`C=C+$MJo4>TCFH#znxPADkNr0zMXFd2=*_^HgFXC0l3 zbgLmBI1T1fho{{+p}x-t@4s>^E0i>JrOT<5x?+g@F{Hv91XtyV6Ng+xuW&%|lYm76 z0jBy&;2s9c7Z^2mNRQ$l3V(6TVKS3rG@nhp9jD@piBG_#He*p&k$6Ey^^YPa;i)_< zp79HS z%r%%$S2whETNGvNm;>cshIW2}e$2oL4J38KNd;I1;8Z?XxXfZ47Zra*uj&JYkCS9Z zSM6XY3R*ZachVEpZ`4{OKT3YLhAHV1K_^Ed#4FaRfN_G9qD#(Ttu|@{nXh!m{-O>ltl zk;vuJWD5C4ZL2t!7f)ddd6lB(VdOYVyk4S*Mtq*iwy~P*c8SFiV^q3R@E8y~yz%m0 z+Co)1G44_+tRhOO1D9z6q*GoDsc+^`q~oXZ0l_OSPEhwukDXDDLu~zke5J;FM3TU$ z`T-h{xt+S|9cxG8<9Iud7o!%2Q9XRC0i2|QshSxc@$ZdJBTS@$=EtJp3ga*mqL9AA z!|WGys29z%Cb%!DbjInx_CM<);bj4n@j)g%zRhV>kgdvPgrjtS!e`PHXqGE&7mO;K z8u~<8M8wV(hfHU+g1TJA*cW&bfayy5D<9eQN84}hkG*KAtv;MdeY8jWk1nbDg1-rX z^JFuJq46d$$lN1^-{&dCjwg(%`ljm+-bq3uqrOL;!Hz?>T_J@;rDJYNxQZ(IBrNm% z5P2$L_~k|Pck4XM6kGCsLze$VP2rWu=8dtY9cE%+z(1jLCHeSSelyGsVJvj6vRz@g z2pN0mXUcSL%3s(T_?gm37$xkCV6VjR{s`*F*0fuO%!D)Fc1MgU6RdjjYf0>xC?NsX4% z{=lU^5G%tG=Q*24O6bVvw zQ6=5hTo>>as=w5>b@h^+{1Gg_3uHTzL&f*7CY=i><9@R+!FX;6|AK)^_nn56H2*q)yfoIoIr89N!B6t zFbEHfB5bYtl4UZE&R^zBSl}umRp`*CP4J$Zm9bmT4n)qYF@fZ_nnx(QlkIJ;w{<9@ z)4+}nDQdBO%Gf5{ZxyRl!MNT1X<@c(UEY>IgaXFQB{h*e0@W=v;T6=a?|#%SY9lUn zN0+4*k@$76X=FVG2BmY&? z@D|9g@wFNMsl{@fnj*)y9W%5#ps1wetp;8@Thf@3MrChVRlQgtVCZlf{uj+t!<~y& z!oIB5`9(+01abepk&j55Q=?VwX(9i5?xTdoD1nh9hNvRZ#6MA>uIyajzs4((_%}KD zoRHdenml41vpD4nqDF9teBaPzJt7KRR!fN==FN8#lkb^==kGPNI(URR%1O>&X@5_m ztcAgMKW4S$o5h-7@f}#O4)wFZUZ!O}(+N~R((-(iSAEeoQt6lg*Kf#^(ZwcL$e(_2B^ZvDOp5K%Eo3sjd_MbqulwptfV=F^)}8(S z_Ci<0n-Z)xC+N+3hAzIDXz35iHc{-}uzYd`dNR~wyk9fEuhED;hi|>7u?c-)%TSn- z)vJKekiI$gBxE>m{=okJ$Ikl!5aWdEBG|C*z<1wk!koI)(B=tuQGUdGE)2-)8Z^?S zGHDJkfwNv|J*KsssL~6-WU*yb{!bPm(Rw!GYg$a*k;Tcp2!> z74h*RO~DXy;b}oHv;iV+z6KVL1d4lB79^A(DwC_SxV@lVXA_(lZgm6hqN`yEj#yR_ zI?$i#gD@6{SoTvQ-2i3wWNDA_g1Hw4{v3(Gf0vP!Bif56UEK>K>Shv8XQACYrOiXe zycA31mVrm;#*Yxu4~U;tQ#A>qr>bH(x|iVsMB)k9pdELHiIwKXMvaY#71QZ5B#w;w zGMOY`4y!zQb$yPzm)xLfjkODYZUa`Ta?KrMJG`fkG3{$z7^4IXavqBZ($nLN;)lTg zJ`Z{Lt~Vk;H9&|RGGN5hWds!)P~`zL&%-u5@GKXDV>uGB9H3YX zJ{X|Nt*kVrz-h?8yN!+wDqXxS~u+QloA= z&vF1UgVu0CHEZp7ehoYL5#;w=2I*zk@`E{R***_#Co3Gkso;ZX-2``n6Xc6!?Hpe} z#0`gj;;|+dfM@_B&4G~55t+`08RbBq8U&!Q!IvEX-5v;a0H6;F)r6R8B&#As=Bo}q z)j+jnQzaB&=Pjx#$Sgdvcdg|DWAC@$vKX3UzU;f-dMgF13YIfLAxT@rkYckd2=+33 zbI?GnGsCKl3au6CY4l8~==E`bgYdYcq_uQC=$2$m1(+035}0GbwJ$@fb{oR=SHBmK z{VY)3l3DGTfel)xYBwqmG-{tojOk*6cbMkWW=vl*Pv?$K-dlnoN7Z%T-ra| z51SjZba2VQ!R0Af%I_PO6-NJA@nKzw_&#y3*Dk|xn!JG7D^uVeCuCc_bv?%ogZ`|2 zM-AdL;MHUVtl5}Yvkp`204g)E!hpMmw7oWL^TDEWC{{6yAlQq$YK+0v2yCt&|6R zy%@G$@bE1cF0Q&l&UJ`VRD&-{*VC|1?@39*BgY3|9-+;$Vu2T0UNOeHkmFxZD^3c2 zeJKADobrYp=82-TNE)lmi6J9o&0+@pFA-X9nE?0$P^%Ng4}WEG?XQ6KzvdnbF*^?t zz~fw#ms(;0=jugxaCd0Z94Sq=X)gA^=RcI#7}GKfvv^wU6ck3eX%#o^oCG~M*EZh< zf0kHuKB0Q7#Nd)g%n2ITzsdzYP|y%afL~G~#NT#dc@-`|^c*w)6*u&(p1xfAJY--2 z{d@v1*tpRW6nq4rPvz9gUM=RgD zmQy-!96MpFwwXr%#<`XqlBB%^S)xuJ8-%Zlf(^u^T?RBj`#018?GoN2iQZ!g=;NRE zc`~Xgfc%n*FKdOn_WiN)!Qk=&p!`CBzce%hr-qzgkwq`i2t(+Ef%M2N`h*t!U~321 z4#<6wdt?1Wyf17xWBtSNce)-Z-=OhF@3$yl*#w{XFT`KydSmde*fq?LIiiEs8wAf; zkfTsRf30u11RXh3lkF9z;UL$=5PWhAJaB8m`W2}2rAjz&)vY8^_IYm6K4JsxLr=Ff zJ?7Y(+lDXiyDDU~cp(ae8UdCQQD+lD&-M;*lT&|zWMbqzjAB5Kh@csL2e`vVobZbd z!2>t!TyX=2!Z0@Jp8-&iZ3gM_Vj=HREZhLbudS4^i(!`ngbEddts5(}DpPW7*&$qk zt=vF$v%s0^se}JIMm<&Z^%&94G2fF=P^~0^Irg?4^<1uC2KFq+o0#qJuElc)Zi)?Z zR>v1H<7Oxz05t@^%M`Mpa$|rmT{qmD5KOU}6KbE~t>enIJB8G^a9ez7H%Qdx1bo0Z*#0AaV~7h)h-FeHES&)PmL$)Ikti1HzxfPEKLdfrkj6)(vyXs zeiioWwS1p%aIouycXbr@cZ@i>cB>lR6Mm8F zPc$EZazp6;%HOd^svYn*0WDvCI9`v>-UK7VZA978P~f~Y3SIi*i3UJ1XvqdO88Anq zDjGB&3Y1g^nHiAOBQzTHbRe=c0kcMgj}f8{oT!#-QB)n0D#NvhL>vTkVK$;Jn5Urp<$&($e%<(=n=CV z@*<5=BMpKhipY|GkhU0T+m1{Rk$RMT(CU%6@67Hzx5@3sxJT%=>FWl@N7Zj39Z~zp z>&Bl)VU2=b$~pwLseVWI7K!~qo*uC+(%hz7jruIo^${N#g%=URLE0MOJ!Eq1Unj*w zP>oHKbiJ#PMeA=tjV!mNy9==`c}caUYdwur zZo|5Zsa52$)+Wzu4jp}Ht33qOmg+IuBGhZWLaN`YL$qIai)OcdAJMmQk8I}zQQlw$ zeLZ}Y_lRf8iq`rLdOr80)`9yj(;;3Ob^GaitSg7>+AQ1eXDL%aZA`84Ax2fnai$%yo9StYcpkeDe)l0l>o zL?=xtoM%fSaV`J~Jv3YolPjWbs0Bu^TBd3V6)fCZiB%wZ8o)n``^!?>n>#f`Bqb#0 zn9y{=fCE=m3pO<`S_`yghf!DWy7`od(xcXT6{O^=cA%0hX}ZkRTytfIQ)s@i(3b63 zqIXN%99sFZCGDx)tSjT**_&ec5fZ#m11vO0>e9X?&DEhKQ;v;yE>GgX7k8kn^+5Z* z2F5H&$MjHp!Aecow*W7dj<2CqmnGY2MRsBYxI+SKrz$dx{_T_hJhQoIR$><~n0S&L zf10H#+Bc^dF!OCV&@&1y`}#5z9ZrG2sTJA!$#Be@@_9x8wj3`_i;u066XBLS7n=MS z4?A{BFfvJlE%(a*uQhx&wR+m~pG)Q{NB{tq|62`T$<)Ed(%8_&(%$Z0%K2)t4#=)3 z-=A9~-5WNq5G@TsNT7wKvPuQ_iAoi;28oZ%pA7_4ZV&QZS3lFYemEiL?l6XVH{*`z zNE2RfKdC5J5e{yS;b^cJyk0No?rb*xc~4fDQm`=h_xmlxQw8OZ zXnzndM=e1RAf&lTPAVfs2fHauq_f5lC*~{UJ^& zBbl+zAP5;KKWSlsz;H_lCS)^AMcNwAdw`~ z4MrDhb$8kRbDY7Gs_wNkA=fD%)Y&`L z_fw-pR}2@jb`tMh6dk=H$6d;wl}$GsO)bG;YVkz1ng<`G)UqhF41wq;Lb{$NT|519f=YW z-$XK$y3#@XS>Y5-;jPwI{ZYosuCRWCD7IX;{GSsM>r{GU)Kt5JJyFvgLk-QEVlceR zmooF0F=wu3!R_O^6B&8{ff$JGQ>s1D)gtjR=w+%s;m?>Y=0x%deSCN26q%Jd!35KPtmEa)R~#lXu+-w}W_!WX*C;|7 zeev3^zeH9c&&RYcF6k`37ZV51=D4tO>xJXh7uoc&jqYN<=-|l^re6Bm;O0Q@GBaon=LlPqVtj~MQYKZ z^ZJ3@++bf6tI;!rqU#TLA)Ihq^Q#4qah%y5Rd4Z=&_`=PWU25e-(ei$_*o2|9%wf@ zkK97L5V=E!p6`wcR7D|@-mo7R{5-i((%QK*Lb#ARtuTo)VB52UyF4td@i{)CsrwRZ z3!eZ9x+Zy%77M2Am{r2>Maj-E54y5Zyu&qCiU%#4OpVa2HVV;G$?Ljo!JQ;}C zdIW3IQjs%8x`+W$qDPE+?-*#og706vw0gsH+!7>P$+*vrm)^8VDXdlI?G-UrDWO6G zHG|7T?`S#7)0j`pZVf==nTP#I-{bS zUFjAZCyvNRFA;tQK0%V(W###XaQgGn$I@Q$KC#pliBIeuVc;!o_=OSqmX_Z^NPfde zUjs~EBB8B^Tw7rLXSd@if|*>qk_)K!Ob7~)QQydt-ITw0`~=_^6DT*aKAoh9j0tbf9pDuv$$+!)?8>saVM0QjdkK-q~L?SAiap5{55Gv({w z-~({2(-)T+Bb#Bm;*#1}T3D=;rOb(v9D@?tw}yoX@#8rQtso-e&kP~TU$0Xr#GH@d zL5I;GVtx@q-|Llx2#-e#bNk5Q19>yyc|H-OtsSuJ6ULL^KSOk3|3Zq_kDO8c-no`p zCnjD_TdxZ%3&j0{6m@Oczr|W$81HaF$C}KhPYUh!~lwW45A zO-44R|M{(BmAB-O6;X78}!C3%{Bjd+jxcji5Gvma<$8MX}IK6M0SNo2AzF*Iw16WpzF@|h2XIwy-nSdl9 zn5hXVjo~OE-APJFO-M{c3CIcQiNic0p%H1s8b%mQoTb;YQ0+FlEdTItni<4nzO~B? zyRi&cTFk=1w?63i_jHsB4u~V#dZ? zXml-T7($@C2)nOh07Y&<2|G;JIEM`;+1)yotDdapso6T+t=A|bVxzAHaa-8|pZZH+_a@_+8|@=b6cn_E zDP&oPEgLn<`YVNI_{ASg*x3;qLGZ6;#}295xhNhw|(h246a*qGX(h=WOZ7JWOWZ3a?r$JgCK6g#}S1FpjTj7JWx5lScZ4?Bj+#~)VlKKBcqr8Ku(|^dM z9}-Y@b#SnE`k??(4`Wk@e`u$FHbErL{(}obf881v21%ganHw7w84!h*8f{0^QHfcv z!<#CFx8!cZQN^D~9Swos7RD?c4pA^Vl0ENs>d*0JPWJfs^Z{BJRtK2ks$ziFoM{YH zg=K}Y289~qId}>s*s_3wbSg6%fuKf%*YMwk({vRI%OegW!TkkeIh6bcb-qs<2Pr#& z*n2F$%QcS^7as3{(G(#?7u1*VMhYWJvT=DjYhVb}1=>MNo-jP+aol*--o;w-mQv_N zgXg8Pw8v7&=dP907VZskwLv((lI!->2nv%83ij6xD@c3Ej@<5R>brY`&xb}EUpBqy z6-}4a7UOY%bi-ETx>*=tHE-DZh=q9i4RIO+*AUzDR$zjNiUn1LwsH=!k&^NRdmj{& z=qq+D`4{s)=)shxs7R>NOsjRea!IMG#^=8sh-Ie;yVEe)UE0qpcTPLKt zp^LG_|87O${%gO+2L=Yl3nu3V=H>xm{hbpqH~(_akz{k1||!efBd2Ixjl6_ zg!5UGQeyIXJCbx9Gg6YH^1YZ8w3uYj;AB0^AO=>q|FKwftkOP{qap?dX=2%sw@lPq zGtwj?21d$)+*n~^f&fst@=J0?dhJ<$N=lZ_(AdDh#J~suPz+5B%nS?-AvzFMf{C#K z5a3_IHd&`+wDJSCqMr^rs{ixd6b%32C{VGt7qT?}9~g^O+LK>W_^}XeSyZYP04XaN z2F(*L$_=2$Aja^}tQbh8y?CtYUW~Tp>YC51e-r74EsXFF@K1SMhd~a`&4)YpInVL( zzvVt$K0oIJu-%Ca;{wCDyKXZ#M39=Qq;%99YmP_7fpe*)8q0>;8X&2{USi=f#qg&# z&g3zs{PF7DG@$5{&~XEBKKJN zUU-$$k`?GY5&TTVEtTYp*~bGbLY^$yGi~4k2B_~>W};@E5%*FV0u-c>I?VX83#Wk#S;H#t@h=C;!UI?F7jt4lV>O&g?TG7p(57- z*xJb_I^;I(&oxo?L2g{cb_}+<6h@QWd$d1q{zYDCAGs!Db64GIOLXP|U{oD~>NR{^ z#D|VqC8De7D2hbA?O(uut}w@HhS*WwDQKSV zCugMB-Q%aEX2ql+fkFeSgoAqw+!`617?>Cs0RW1j5eR2!0C=qtz>6>gHgY4#jtm6; zZ%>pGXZkm<|*Hh9}0^^=pRx2A0B7tfAXu!nuc4H24laYSiDpu_U4zSm;E~SHlY-6Jwr^FURilpP2Dcqz{3m3{EuefuzdwMHcOHdce#hJInP^Vwz zDqJQ@4>Nfy8&{AR=ZkkULU$nQiPp1utH@^OhvettNX79G0Q^V5vMeE484#?Af=)pj zK>}2dkZ)!ViI1c}pdy8d=D%LR3~8>2jUs$0XjIS?g+GLB@UemsiI=`3If`j8A@$@c zKY>$&l^4DQgN&6L=Zj5Hj;L8km%if`Xtoqdr`@DX3#d{iDW)t$3SGn)#iE2*A$$wR zh&p7Pg2jM$iQ;Uryu!hJM2S@+V%9VQM87dyYXlA{cMBuH^okm*UB0D53W`FifSkNMLT3PH6a1|H2Ci^f($%Nz59b%n>tjs&c zdkyLTS4{r{{6x_ki|#*!AN~^n^#3p57qv4{_%GvVtkSd;Fe3_YyYjn}&)VB+73dX2 zocCxf1xgeY>T_nMfpQsUu3YHb3kABU!vXk<;^AxsH9D(yj28wx>}RQy_T z`Adfe{uzog4>guhKB$ypILH~tJfo`Em?oU*x#|hc>>^{DxI<2>VH14}d4n!h26H?O zyTr`-4B_T842M3>p8k9*bl)7ARYSX(En53ihhB^;+D0HgasFtlnvnnF49DkPwBw)v z0CbQ50Dk&o0gUZ!>1{oo9c}2XOpJ_wmQnpr0{h`E=N|`>nf*WMOC8ohWd-%?x;y)i z*+Y|!+d~pfP*?zh5XoS^YH$ETkgg0w2Ox-w&xWrgo{by(yIz8ZZL3kMM(yUCu$CdV z?a!bYP$3kMC{+~e%QKlz%d77e*NYbBxU2O>t6!ekA`$|YW==Pqr+E)MKS};{yM3I` z^EW}j#!D$Ws|2b6+9Hq3L&Cw};o$GW@Nii>oskDuJe#K?^fm8WQ+m6BSUn%mpVd>c z9UH;*o{X^Vw+*4;+B+{@=vc#hVOzZ~U~OKJUBl7#hjMt=hdcJ34(;gA`+9mmyKc$U zKH=!EosBcGpC8@;@$gI{YIxt))P9nhj#zq93WQ9n-4aVrY{`x>3Ez?2ju5z` zV7I!&^!A)WqAI`^G$Ml$?PVK0Y=y}NXwSsdmYB)yoElI~h+1ADXTg*_)|6Mr zM!ZzjP8xx1AvO9qLd9!*@0FoxKypNToi=rvt#$mSmD8(v}xz8MGfa;F{bqBBsCKg89EGSr6RSkLEsI1Y z^J3Jcr5N1`ZJ0kfGwPD6e{8pLm=|%xr(x_37>y$*DOI_y!_1mLsptgNMn@~u z9pTKXD@1dnIC*lSA5?PUp;baWI}p$nEyjvNPCM>=Q9nI07Ad&O>#mL1@f7cXKjvcr zQTd1Bch)Np$=5~m)G9ns;wwFHz^B9t+OyF}-#8?d{I=I`+)kMsd98`U0T9tZ6#jz1J{HDo871^szj-;5ZHm5dBr6oHuW4UYb*)J4* zZcW;;F)0DVCrPWua?HxI)~@A}z9hBdFmAe|2WO)j{sO&4Q0e_5PP z((rxm`g2{25n1CNspYCUj5)9R%~6XFR20~cV7)ax&hxYC-Qxe%GtXn@Q3iK2vl^Pi z!ON>eUBcL}gAMG2i_fBFZSz!Mz<1aS0ZIX`TfOi_SZRI|s!a1H^mMpOP}glhf0gO< zyj6)FCWveQP2m$bL|746MEC-y3U3HB8LA^cOs{a0W+*@L2}BmY9e5}R@`eD@368iO zH=v!(mYgRmAv?b-cLJ=ywp%MPF71{$e|&Ex%rHKBnoHnle@cc z6uh+%@qFJ}UpvX_FNeRLkh`%}cxMw$I ztR!RbgfO=gCba(zJ8+{i1pxWr(}RqII39bUFi0@xg@&rb9h{-0PZQ3(?%jZI9|px? zmKx63%7*~eVHO@-7?2~&2G*M7p+Vf(W1G>0zqA?>)rus$72bR)t*QACDh1BS%N5Wq z}oe` z@^+#b$;|-lt|afB(6!EXA+@y-L6f$Seh9@ABnLwfo4X#PTk=WKw$HfegQI;1VtF;@ zyB^K=XL$Irvpu@+>FJ2UcN2He+5@kDEZPHq{FeSL;2ohp3aE!{>aHszMn6)jhmdY0 zy9m@ilKQsoXJ>Lq++Gyihun6+Ui8)-xFh-(&C|ZFBY;2puLIsYrZ2+XA^uT&i%)SM z0=|L%QSujs$zgvKcs?bT4|U4%aVbzf)id+-CIJZ3#DuAnq0*Y7&%Z*dT_TA|Xndn+ zf+uQIi(-6Dik--QjmU+Xr7z;v36YK( za-l75At|WPj1v_F9e=Z06u46o^t#kXM=qv3pU+y6REcB)K(iwB|l-G== zM^L487ZL@PQl!=!B?YUK=?kLLi6cwtx~AZF?$o*z&!!*(db000LFZH7lymFLsYLoj zFd2d>V)Yw$08zhY5>q{2Ft$c1poDA1QWN4@!LAOSC|p{w|0=8-TA3JUQs;YZL9wfG zkgOq>=Izkzi?c3N2D2yB-a6a)d&t(rD%KskP8Clm$AjuVRm?DvM#MwC)MeMg?L9$;i+VmvtqqPc#eB7;=R;vLBz&BP1!@!x6=|M)+N^VTf* zr4In`-Uk3c_Wz)5|5MTS^n&}Ss6KJ{UHkrwN0l%H5=MfM6=EV>E+~`;H-JLmszXYG z#DvUD$W)+NZ!oSO1Tu=$r6Hk!P+NAjt*-9wvexakzNx$CKJ8<-Crbu=_51Gsmgnod z>3g{DK56lu>pYG1|N1=W1z?cTwUIiNI?eneeC`9>mq=G&#EgorO!r6)P6s-pAbR90zGYz&REuI!LYuVXL8E~)KmnN6`vX}esMB}oIhj8LYg|}D?CPR_nX003s>0dri zbd!W%2*N8vcT>*h?RtzLyJ9s=X-U3*wp=V`c{2v_%(0R`TTJeHOrg7CFD)-MmpRuw z|CRNaL-r|}p0`$tUU3jjCX=LBl&4>o_boL_UG`Y@$WEoltl9X;h3a1p`6ZmbJ73CP z`6h4mLjPm@tm>6*a6fy}#d_uK^39L(SH24*^ri3>k>@YllCOA4iTVZc)JgXlZr3+o zN^dEpuNbbcdm6qpgF107kuW(0<%D)ht&w7ro`=*-yWj#c7&MvfYv-||mM+J-; z!&T@ysgq2qOExqGbttIjs<~vETNOr^y*v^OkxpAxs*o6^JIPxi@z4-|>=IlH*z@@7 z9w63Na4k^eE4(62^a?!l-ryBN7B5IT^`R0&N;D8s`$WiUzq}}-3scOQvTW-hi)Scg z>m(5b({!r%gb{?U(1>O*uB2QXQzOOdo&)(h-AxJp=zIgjiWM=D7GJhOvWrJEy16{8ZSx-{Kdv_u``B;95eK0HJl03PBO)8_V^a?>@RA>vUYD)%uRN0oU z1TuEz_a9uIIc5CZt!q_kNV{m2PhPTm0@EIfAp0fC7m;gr`7qUfpir?Xsh2ASFR{G3 zBu{b((##RuW`Z40W>;`TM>SV+h$sIlm18;wTgfENub)IeyEjALO`>Nxi9U{YeMJh= zubM6yJf3!ah3e9)oGj@&u0H>39pSzS;~6cZCEYh?;(L54`wHes9r;O})iY}XY&*3l zG3u6eDXX$A)84M&SWVY{d2ie0(@nQmIO(1wwSI1>KJBjP$j;gcZg}6TvQ;?!e18Ag z^$|eFFR_l|>pnlkUAZngDqQx_(38E}c;*Jr>KTG{Q)-02!&fyOUr3gYPtL_tI4Pf1 zBjdF&ylJt__DU(cTR$z2eb0Q~Oje!nEi>x;c&J}7e!8OE-$W|MyRRbS)+nPT@28lq zUu39Pc39u_5k=QuHSNE2vgY#Ysw-yt-0}f`aSThfOQQ3Uob@H0zPEVXE{m43w_vK| zdhb1=c$57H=yi{*Tj48U>_s7&pJ@ZjXfj?FjV$b4>?_17U+Idu%2%%STj2`2$~W@r zq@Lx~y34P4dhg=ion`6f`~W`dgLu%t=+IpDYt+Pi8aC^rdU7uHTbkBy>3Gi)F5l`N zFl+2Ii%9J~w2VRaU|l4UMYOD1D71Zi84S|~-}Yk4V1(-l z#NV^}t+RgGGA5D9a=x%dB&Z5C3D*8f6v|--vL~V_NVc3P#K!=YBBm(3nAKFqWpPMU z<4O)C^*E+frT1P(m6$b7JDqweWCeA}_RA>|pd>97GDZGmNswlj(3WB*RrRt3zsI67 znY9#5m>5o0+5-ViW#5QE)zxJbi_A?8WH|7lET-f@zTQeZIf``@!~IMpJC_bbS6=8?%iMD=?q`1w%l*zu6Q9y;jikSvBD~jWxlh>PSr_usYBb!M1EE1G#R+ z>N*D5AUS^_nz8DuoIu3izq z?xwE~)V4-~p(dJ78LlSO5?mQjiyQ3s##G!qIyoyG(5e)UFED;V|<8>so>le8sG-X>xB;>OymHn6jpD zBv6BFY2f_pW*`S4FJyU8)$YIR~;X0 z3PvU}7@nU(0wV7ZN=hg4o4?Kja#mmt2dzk+2?o5C&Q;@HzOZ>jDH|ez$t^84 z8>(6(F%2lj(O2NJFv1!1`-Aq#jRB$H1A=I@2egFNiA@6$5f0!c=FHU$HP%gyGH&{6 zM?KGI39X(=jDU+-mbjW3!9ZgjDP??>SfnDnQg9Q#-$;VrxS_f>)EuarDujj;a{DCq z;VM_sc{a;Mw+05?d0sR~rjRXXnGRXy{Gp_4rKV<_O^-=a^eXB>)a9;-An(Qx6R5MF%JBTq^eD!y)@EEtKVhsVdI-e7W@@JZ(=HuoNw>2fxQR&Vbf~U)x>H_PLc5xG#*V@#C;xIpiv_@5C zPu!ifvwATNoU!Ojye2d?lA}4g`f9# zO}xhNS$bGJnBEi#wnV9xhV3UeHip&(T(&&I8M2~geS9C(E6RJ^L=>C|jcLX2xj57b z$nwHyKpZm|_Qz^4&YDAPdTayAnP5uPfO76L!bw)wGoDAP1GxE#?XzbRi-LrwDX?xq z7dGL7VzJiMbIapdRjQ$d#2aQ+D^9?TfF|3tLTvdpO?9Nm@a5^)l~rql9A4<*Os|Y+ z+C)51m0xxcMYVM4(t}7ns_;Wda<6XkZ|_t%#Yk{I32an% zOke|TS&M2~nrs7dU_P3%$qnCSOP7@`vpee*FW!#PY`>rEiEU2zaGsR8=6_FDt#mO^ zQ{0BO*MR(v))o@d!AH+XOKVdt%|4E0QTw40+fq{->1vBwVsj>w4M(BAi2thUqZ%UJ zxt~F<4bGW%z%&O|UgLsN>w}Gr)o~k@FTWe>x!Y>Vp;3777t?UY3AjiLpzYBTu!psE zOz)Kr@w%vgluvYblGs9JNzEM7Rr_IE`du~`MpM?xK!o;kM0|5g0C#9|G)QuUf3>T1Fb4yDatn0m9N zh+$W3Es}p(GG(Npn63@f;v9`I>DZb`2)Tf-SVab61l?yr+ooU`5iwcJ5!Z(Hbp)N{ zuz1Yt$W4fZXzr-R>mpI5Zq|kx(e8I|)qu7a z4zRk;_TlB#b@RgZrXqBcqh)&HxO2KY)Lkaf?Kzo1_IputeOPxnIkY28?^n0h)&|01 zqLh-4-kpdt1lCU%rtlOpg^{qhK~D+N!t{pV$_BgIiyScA=}=C{W{jH$SqMv`=y8}- zxRopH?)u~>m)9wz?bvjedV;&=6AH&6CM#;@4C6M z2Z&mFFiHf^TTGOJMCAcW+ETz&p=%mO_`QZU284bs2Q~s;+PR?i3g_H zz8pd;rid5PqGO05Ah78+@vGjIor>bF!>LA5cD7jY5{ktG+$@m29AA>nvxcT!DFLaM1Yspt(` z<#u_4K;n&*IyV?4EdL$}ZDlYqEg?g&rH=ShCVuDzl?%!P<(xM6k?k? z8m?ph24aI=*md&v(?sjlXwui(+Z?h&m$979&z@Rp96RA#U2S$dPKF4`h-bQ}@W?eS zMDKoaFHA)BQZj=6LV#=wdv%I%LMBdztR#{v)Qz-vAp>Qzjv50_YR$PlNq0Sz07_fOVEsj?lcH`^kcX6S} zCJ0ArRyU99x2d55eTT%@wi3IjB?28(E%iufm!Jv-Otf?Q zj%k_khc!kVjM^*>H3h~kbvg`(kwc>`amluf#sEBWVpomn_JA6%CDho6!n3ZXrH+te z&rZk!1ApSwY#BKi4tghVPLF!VcN|;$K9tlN}+$-L%=wj;W z<7*q80~E6waatRg5u`mLtD9yVMq_EpEK4a(es>OTYYdn*Rp6n|W$nN70 z*OX%{rCg~%B3F+XKKv+6skD?TWe!fgxFD|?SDIH)Y$)pN zl!eM71_g)j7Fo(-oVBtNUD#YrbO!cvaqvn-xQ`n0@)0@T?Et)4$``s9kdX_MzqMwq5FSkjqFP*YB@lvPTQ!JxxA z^FgmCHjR1cYNK$+J?zJPOIeS@DjSHcPDENNC*cH?laXzd zQnDei6;%TID*6mlBb#S8lMRNz!DCk0WMS&6_M`D>mVI{9;W(+TEyZx0IVmbET6u zyGXg2`nb$eZs8Yd%B_~tPI$YG-)W zaW4%wP}yNA_wkc0<$h9zUYgqj)boRa0}dljPJQgOln$j+Q+8R(L(0RJvYRlrhl;b5 zM=WJ8b-0hCrBR&FVZc3FFRs{tw4QIr?BnM9sPdSlJWd@vK@)rzSrqYbNpeveog6&I z;?EyMqDGBH^*($=_3%+7GdEhwlf;Bi@e?#?D}S|=SCm&Zs4wI67Oo^p@t$d>?-&)Fd#9qR<7*5@MpZtX}mhuDby~%h8_vIgzpSmxy zxg}JOhE)ra!>&wUOQcYK=C}#|LZtmwxkOX`Ybn3c_V7FZ7a`z)rh=t1m7^L-=&&*r zDWlXO8a7a8NrR<+7XOleW~q`YTdJbqMv{l5l{WExku{Igy9%W@}4Ro;c&q3)Sa^BO!bpjgKY~#LJ^l>aeILJXpd4YFd)?+f=l& z#`9^Gs;N3If&YwBGy?xnI;A0zAyn26u~b7fE&db##Zo<}JMo=amYTw6X=qV+-SKj4A|$_W{HRP;~IlSd{8AC;WDlUp=nMkEI(H?hWyveW^H zaCIQjW{}tz)xk8yBhYti5>dA}Mdt*+EOiL!2RYJ0Ysx1g8tPCg3aBWg!XH(&3E}N7 zYSxahSyEq=3AG5hN*X8)veaQ}u_a|oIhHzH9brkmC7-2^R7XV_^I)+yYDD{3OaMe2 zjTjxdvG))m0@Kjut(aV%hu(avu*QcFNpYY1oc||r%2BMX3OW$J88Jw~0WspXbhp;lT_P&&a;7jo1Z+VLyI z;gZE)MTc&0C&I$by=rFoROaS&rRinF8f(Aq$DXpCdz0_BuqzC2g%A@Dh|zKX*j-vCX-T{W86qdlF>6A0j&rGBH@Z)Q*bpM zZm9WXW#XXMqTMuhbd^H4PEs_XzOY-C4>oHI5UY!mIT0SW8{=4abPJ+&57z&2u4}hc z*`zD`<9-e?RS`{X4F@PeTbu>fmDSRO(p~pXe8VzTu=IOgoH){y}<>h)Q7(E|5jsWFj_z#Qy-JBXF-#*(-l+=S`kxruU zon#W#r<*MUT-1&w0cdaCBwfq+wX3f=Kst&T*YXKpfsayffT~bf6;E zp+pnrMN(9qoqeKHl1OWWk{Y_EJG*%>DI)tTmgW^ry-GNiF~tFZlYg6P9|gq#YG6%k z4K0<<*j=bkyn~%}an0=9+4ShMx|q8*J}ChYJID5j!)r+?G)^X6Pa9QEa`5yf^1tfr zBdBC>69uTkPVTewhnyN^*NH5vwcVuTP-@^{S&e07OOxh59U`GIJ3mP>m&@r|OEeW^ zKr9W$Ne`*$o=LqZnYuqrDja;0LIWM_DXQfbk;rF5P>Iv|dhDYjC-q3qpDGU3k$3D6 zRoOI=%t(2)l&Wqgyp`1@Pa#XLKC)L5v2Afm$Yl=OAFMcASJ}!Y^cbhskP@w1gwOI1 zYYegJ^mP&kV}0O4n^6EOYFbv2uva9@3HaYZL>gvVv#p-vERqq2NC7-pvi9(UtJH(N zLdQ7Ca!E;r$5{yO8zKc`C9#0FD-*jKDwA|rx6JD}2cx2f3=0VblC=8l*~AZBzS^=i zTT;uTOr%Xlx=b~8oEUR8;#gH~LQCFOtghu(YSqR!?fNyXD;pw<8iI`h z2iI}7!HiJLwAGEVZ`$HV5GrsGB63!!F`C3l`F>SviPxQFI4Og@8@jh~9;LcU)X53; zw8r204r++n0uwVI=Q`gwiRr6kPEU^5c_UK~q4=T+X$6O;_@)Z2mfo#5(!z(;0lls{ zuRG~kWzGjqWl^XRZe0;}7Lr9Rl398RExwA<8@mx&1c}S4uu)d>C$=uDZV);%E@xa3 zHW*@yXp)fWUDiZemNIfFo!ULhkF_!`^~arcRb$=c#$b(WQA`Om)T|AX z9?Z@^=vNvG?Zkv&bM#YC29<}UzmiGb(&S0vhiMBSdIrSp1a`c%Tgd+qtFaAp_sd(< z|Me(KbzMGzPO(AGSI~4%Mh;Pz3?2IH$j!DV!$W)+D;$+Fd&3dmc*m(t`*?;KMpw8E5ao_%3?GgfTZ8Cc2AvOP)@~ z;TiS8^-hE7>zhMOVh(ElZ0C!NNXU)U*`FRFP!myk(t6%xzQZ`%$cV*BdIix7or3x* zjGWbA=KzI;_@~(7@1!bqKLm2T=n8bxMNb()`y0L$F%R3`QYbR(o;1crcA{VllkbLN zF(@HZiM9LMO%JXR?QaNHRJ%%kcJj5S#lSMfN3`3Ee4? zA%4Z6<(MYi1zd91ABMMhh``k0c{D_1Z~pA0lebpbCo|5rmS%?{;!T8P1d8vpNV4D@Q7HGQrG zcmJNEPt1<#{?MN+?sjmt>XV?8qIeU+NsLK;N|;W9Vl%C_J?!}uR;F+masA|QTuLZy zQFacboG)znp0U%C_|r;7FyEnq(MgiKhbGF~AxRwHEb3*@kw|=Yv4}s2XhAejB5ClF z;&Jtjt>K2K57{O6)K;$1tkbv;HxrX-#piK>`Wn=ivDO3Pa&gPVE?P@isk_++`=TM!mGEd1>-?qNPXy>0k&9w|4Y)8j*~>yQ@#0pW7`f zI?vvIW>1?kmGX1Z0<{f~xb$4%>O^W|*uU!k{t~+78UK&g5&cx4zvBQLD%m(AKMA{L zcHdc$1uX${a)5DP5qxX&d^Ds?8}H=SNJw~vbI1^NKFfvv@D2MA82bpap%3M_(2vYf zHZ5K`CDe-hZ`pU^`n`b5lvyjD|Hyt4*Pq2zrW9Lo{V)4XTz_}&4{-VgEl!EI;wo`j zTota0tHyP4H5|Ap=D{f`S6owgD)mFDx#B*}xu%P8IHlo0G_yx(rN8zrg$6 zcy|#fK)*LPNSc_NvmN>t6z1mS)^z|Yk-hSDptgf2*DEid*nZ&s+`B|CJ}mo!2Ef+i zT2BOxodg-|6zIh^BF;{S0c;cRgKb7*zZsCivvD@GjzK(!=ZfDB8^rtae!xU651(@U zH-PuYn#2dt%8&wOxW0jWkTc8gLBf9ks|pJJoxlsEogfvkogh<9p+coXBbZKwLANH= zJXBZ(>`_SB38~JtM?rcT?9q2Z8a+*?B7@$@q@pJk-uv9e&V!z~*!MtX7lMaf3~B62 z@Um-gvDZRBc0CMYTVW`>5r(mwVHCR)j%0VkB=!Kz!d~aHPFTnuf@N$kEN9O{fV~VS zu=fRm^6Vw?!Tbn;mQ{QR&lhM}#fKs(c@!D23K$}zz(xkU1Pp=DR|^V@{vRR3|1_j# zWbJ}p8NGLbZ(o6*x_S^i8GSk+yAA8|PRMD;(Xeq&0Y1s?fW9;%s;X(;v|b(1k9yn< zc}oiX1jRoY|N7(KfKC{=69yG@!r&OzPedjI6tw?)SpNZ<*pILQ*=!?X_k8v{T!!*@ zHJ4yJSKxlG!He94S5VA|It4b4UFy8*Qs-4(NYoKEqLY+BC%;3dR!6it{~y!ohy*$v zf*d}X@NPF4vIR7`9c1h$zbh$PAP1{`|L>84=Rp(i4;%Pk*vN;#d3-3e@j}?ji;xV( z(7}hh8U)ejlAzNiL8nWCPMZXxR)qRf?m~=V*qg0ELMSx!=25uVp@=2q#DXQAP`DF@ z5@a{{mk=IO@z26P1OL+TPw#}HhhP|oMKN?_5NGglpz-mL!Hks0ckG5yh_BHVxKAK(%yxK( zq<25$_;*9e60G;g9Z8T*7~26yE^0?+j6LXtqXzQkODArM{R+Ds60%6Mkzh? zXN;o@LQZoa?XcEv*p|?6ywh-z+pvPv$bRTeJrA&l>3|9Lvk?gsO--0+y59!wf{6s! zB(e4beeHMpxoe;`cYUp=--SDGwnI_nZkV*hK~=_N6hws6TX@NsV&8Va)J~YT&yUv~ zi1-Xv#D>Gs4x!G#T>*F%^41(=fokNhg^eg%%!w zwY(lq;|(ZALAa2g09WwUa4ip^I5orVJPbQ{1fJsS;4geVe85kFZ?Vsx`5EZmpUHCg zIjo3Z!iMt;*a*IvE#;TFqSq5!kETtTjewzi3@;(}WXDHY5o=@7pr930;D&x=m;I_g zeZS!_<#>lFOmgbWj<7E>=!u~xr_5eULi{FZje;f4Rw?h`c19JJDXq4Oqg$NtL?{P&? zMF`=7W;Qa(%*MGh8-p{WR$759cficpa3)QdccSF&id&}Et+Ncu&~mnrQX~UfT5yR} zB1^3Bl0U+9&oigw#9f7-DfQ07k?j-^+TmzSVUAMaJu zj@=5q@iJtq&};cyU{|TG;zu;p2 zw!q3PTyF-{^NFZfRs6SJpq=)COI#gz3Ga&*F%z{(e6nDKOZXIGRs44$pGp>I0!F8y z&ivnDbhg08F#@B<{4X);^l@;E&Q8SW`-ssG5ThUB>_0|~eu^0V3^Dp8V)QG-=+}tR zZxN$EAVz;gjQ)xk{V!tc1K22W*d$4Cv84R3Fgl&jNRCm&;7mTt=1i#w`PqZ`{D=gQ z42bf=4k&LEs$EH|-UD_R>3OqovJ0J^5fXa9I|KTVr5>b!b(+q zLgG8W0~Tz7bh<;B4OobGi`u}VTTcfpu4JWJ(S9(B9)u;OnpC1Ad}$k`VzXr>dLc^T zu~_|68{EuG410RpU^!OQHnGP<2g&0K1-LrlxRGBeK~6O8HEMW z1=ZL({kRTTfs0Aj*q6MQ0AbKnK*f zLpE+BE8C!_jgl1clp(C%#zA_aSI6ZGqI5umPen8p`c%YW0X7QmgcJPx(e^|$G2oM* zKwq!a#H-KThu~DZYkLZJAxlhW&#@PfFfsS40f}0Cc8^Io82d!!#bt&**RRSz)|nZ5k`WzEh*hA-g}^m!=s|QqO9d9;!YBOH zFyh`&WrlxWCEXY8E0qhM@X7lSBMV?HTmY@G5zZ7>y1xwPPWN=Z04^8T@h~6S@VWp_ z7T1k%p158B*NbbMl9O&iuDJzLrCVX7bSI2QE~}F6h6U1nuta(QPC%w#BXz=B=_yod zyOB$tf(xWQuvvNxx#S7B4DZ{dr`Ym(_-z90!g1OkT3+d*WknEKDLi1?f4^ zq}QNadK2bKZ^do>3mwjp>03)jtu`P(q#|cLiDuF%$ zaywxoDNdyCsU@_VYzH;BL}sOmT%t-Pqz@&b_V5ifS#ihdgws$RonET6Ls}Hj0cVsd z;$s(tUfnAgh5$ z&yLcRE`XGMNc}4KfuV#mg=ylN#coE&7}x`BCtV#rc?-rO?LPxW`VW}WmnacmL8kOA z{ud@m2VknqV1~@0OqQTr#!+Mq7RoxTlr4zJ>2RW)fq3Z& zXUo0dLfHpb%YEQxIU9D!xzHi^g-7Im@Tfcx{*KSylJntHc_@4(7s3y65&S9-V~SkF zEWBpPqgb{)h7FKQ*eJP_O_C?Fsq!RNCQoK{@(k82&tz-m+3ZZYoLwPTuq}AqCeL9v z%k$Xnay5GZuMf-Bg6A(nzP<$g7cxFPa3KWwQmmQmZ0KXd*qLbBEaMg$7RdjOY$$9W zKb9O`Z27RzuN-n&JO7g~O~$ed`EkNDnaWP*$D>cAzznvL*C0%VGIkPQfi(@v*?L}! zH65y0E3YFB-^K9_pa*4ZhWqh73cgM($nJpiD*RIM6u(?NRbh)V1FvcRUTVBhjqYE|1r+Y1Q%}ad-UfUp#8eQzQhLxmv zQ}|X$$uhkuO2b(-W6gHR%`)lnC0=XfUK`@cGJC?MSlwiynB0?P;?S2PYUJhgJTJ?v znVe;2$yeL}T9!Fh-lSryGgR=yT)lCOhy z?B{NIo4|WB^5J|);~~Ui3XFsWycug2((F9GhPNPQ2g4aW%zi?S@T0DeV9kJHG@x6N z0wzLl5u8iZd)TGk!w&U0>=KmXNRgd_dNNXKZB)~v>thH`Z?cW&r_o`=jh9u3?VMG` zlzr|VvqGY1JZiHZey^PNTh%5RvGz49B@ZUaUJ&(b{v*h)2(p)|KJ_suX@g9^S1ItR zk3vZYTv62yk5e64LV$^uR9q=ILr`9@3hLOas_c>Guu|HNu14*#$T3hOJ9{Xv=P+;zlaA`;1PwX`k??GJW!X$QEs6Y9mt{EVlcp2^zDS zza3OGi*}$4JpliL&yiA}!x!Ru4*Z7O@hXSwZiS)9b$21h-2;YvFQmx#qtreKS-8FD zVV8sCT~LIJ9EI1T(F>|BAZz z6?i~?4IYyJ4o}GcfPcyVg7@UN;B&lwi`U=euW;jhk8$~Zrpq6&9`c8%e?Mk9@+a&F z`Ez!({3M$$f5&Fa-?J6+FM@+lL~b2|4&rE`10R6dXm_pyo#ntlz8*EH!O#Zf8~BOH ztLGp;+FacLuk(}m$;h{PXwjY`H0gMD1mB45WH_1)orwiW#iT?!BoERQ?Xvu@95tmcI`$5PdPpkuO zCBJ3|Lnj33+ip9Px3$4wpRP-24EAe-KD*)eC1@MnQEKjjJAL%-ZD)1BT|T{lWmEIJ z@$VjD$oc4cYaMVej%x0QK0dPpb}aIl55j%u1BvTC9LS!ghm7c3$SkJW?uPr(^nPHU z&m(4S;T25}>LthSr5!SHuQx?MqSustK4XUviy1zBA0k_aG{{6WWTKj;>%Fiap2h34 z@PfEbgqPuMyuJ$fiLt{WTvd$UE2s*CdL4GDb z3su;6pb4{^w#{E%HTWw(+X;YUiNSB#GL&Sd&HVJgh0Ac0M{+s;FInFs+Nz zw3%P%u-HvP^#Z%rjXVhR-F9&wWECQ&P?-=?prfV$642hqcW!|UtaWS=uLY2`I?-NE z5^_)u5^|_ur7CI_!%rax)s8OQWJeSR7tnN$^U37L%l@Yw2f?S33y*$wJ6!b#p@yQv z4>c4N@PiIS#wg7F@VillUiR|S?C^pEE<))rOSPgWeA>PO z8%6;IA;L)RzU*|i3CXmHol94TrME*qvUDxTN&pOHC3uw}^io35S80X;N(&58B2c8P zh0)47Wb5@XUD*H?%0`%@oCe1!r$e1`1~e+?LRdKuPF6Oa>p>-k^iXvbb`lkoSup4?u1x&REWTYBoS!zy_;}*l=|*8>=p56V*SlndR~7eG;56l`63 z9@qynM5N3j9&t~OX7kHA@e@H%-uwn94d?76ie)QK*H$b? zV_zio-fp@CMJ?exS-mn&UwM;ud!s{wTk#D8pZwLv{a-rZ`BH^;n-_cvN>`Z;elZ%b z^6G`?iS{e<>ga%GcyU)v@oGNVs}EaVqHWUA;D5)fk*^?3yqDZJRu+2okx#==zqkyD zYM_^G&EwUH4z!VG{FStfk9?;d*t7#)v4`qi;8W;bS&ZdXJK@!KuzX6P-AIgljs05T zUV`|P7)};~7jbeoSn9oyuHFZ|)CV9>eHaF+d!R^t1ddYo!c?r6sgFaY`UEUc_rvk( z)39277B;Idz%}YiuvL8-9#mh2NATGb>fhl-^-Y1}dK9W7(5N3Rf*6aD#C8oa>Zf>V!IS z3WZbOu)GugR#{{Nk6a}D)Ev2PJ7g85`8(jXMMZ_;Or0FokBh{ScbCwJ`Zn}d--rI{ z2jEvfgi-28h^G(WX!TQCMH&$Jt0@k)C8_k0kYWD7t=WRN9bjFu?EME7yr?FaKVp zZjWB+my0B-qElM5!yj8u0lD+)FJP#@!T?;_P>n;8CPA^L!W2!1GR=Vbngt8B9&UnB z8Km$#*cXCAi`}&?=64F)c_U5)~m5OfArZj{<{)ShktdTc%?1nd^M;XKj8UKtX zK>VxJ<7D8JTG2`hO37QLslHTcH@v+hZ9^x#Q|(KYo%gY-?1p!jNS*Lrwa@aUQiuT^ z$1z>sYB-FyXtREQNr}q0virR1WhJH$xAcEgpd3--)wi<-pGBJGgGb@R(jLAZ%E(9I z-46JuL@Ds~knra14*1xsbiyYkh8G>tPq#p&*N8nrqsD8{A!w>E#n(fGLKt=<q=+LVs`^d2?+Py6p>Hlbp#+=GOQz2eTM#OOja zuOW!#HMTl_Pe}$MCA?LTX*H4wFAduujlvM#jOdwXNhZ~)W!*OLhPjE$&B7(x3wGD}iCCx4l445|LzSlc@LvafNx1@F zQ7xuO+1XHo%D@LHS~mE!9LUjfp`X?d^0hn|t_^^rwSlOB2E%kMAIi0%P=(JHXhpDG z8wR!77^v6ALP$Fj)@h}1wl)sV(gY@W7)9jDc@ z6SO*ZvR2PFX)Dus5_Ydq<0~U$nJc)7J4!Z9VU+ zZQz5o6Zuf>BwnnY%*(Wme4%zKU!k4GPteZf>$J1@+1lCs8tq(ui*_ErPpjdb+C_Y? zb_st*yOh7GUB>^3_4l+Z`KQ`7{A+Cs|5dwI(zNTOOznE9pSD#RrEQZIYd13!`%=}WDHlsb!`jXoUu z@q5{KxV;U4QBH(72WIjeViW6!8`gayuY(dP?U(Fa9vryiz~3-Ng)~Ot{>hfuzA!XWZ}5Xb|H{JDhWy zblQNTTNl=L+uJhM_K@EQDbmOM5n+YaOBeIK6!u|9@<;eSftL>HXr99#B~L*r;g9jh z(Li}dD&kLIEd^eXhVUnG+*IieGy?1ye9dHgz0&)*89s#@e!819elKqQ`}xz3(fNsE zbUsH8<`&x2S-FU>fBiJ<+zsE5DU<7jjwnZLP$zs_PR9RtWC`q@D2t%`O_W3-XMEoQ zKL{)4OWenPq$h3Q#p+KL1^$QNX9hdr>vr%J?1o>KNRNp4C)ySN?S$X(!EKOAfo|nC zP<_h2Qk9iz{{7I??}Wt-ilvuotOED(4D9pw7^vK*?Z=n2eYevY=GQxLnLW|jI!A=9 zH;d~va0A?kmciX{A3W%WvCl{51MMX=5?%&Fdlfv|-%vrk4n4JhfM5G3jL_bKvD!N@ zNqZM&;k8oxH(Dnj!V>KxI8OTnR%xHX>DrgDNjKme?JKxK`v$JjzJnXIAK^yrd$>va z0ot{n;dbr6aJTk5+@~{mP&)t}Xp}yzORz^*;W1r<{kr9*SCm3e$C4Whv-vZEDds~F ze^$f-Z$gh@qX<=ZxV0-_IR7)&C}Zn6hsiwfD1Q!X3>joE{|jH25S)14J?1~!Ip+5Y z2kt<|0a=peT?{fd>|!h-_@bwEcV@7g7x;^gA=%=1Mn@Jr$dJW~1%a7_Tu`u^$;3-z zI+?PQ@pejcM+mb)DuU>hn4y?O#x&yVXyah8!mzf9}A{1b{KS(^`Mr)}51m7G;V$Q1+m81e+Tl8J zucuYC!=>426>ifd?QpttuWq-WuMzipT3tKTXVYGZO}E?k3&p*jHmeuKS3@Mfol-A8z@q%BG$oIfsr6@Lszs*8!*{lY)Upr5~U zi1`<6P2SU_=)u}iDC48ZzDSM&5e`P#cugGVN-*B_ zcP6>(ndD~ZO>%P{C)pW#UA(r}qlu`DJ1Mf4k;60SL8j9e1a{S+PY>*>Ngp8CRS$iY zK)x+{JUd|wRmVI6ZS(~L6%+({q_0a*B8QAeKAbYmq3NS6c*{rphiCyR_VtGi!#DWb&eS@b)Ut`W#NqzEH-qNi zTOt?wC9mAUymyt#?qsv<$@=7j%{B{qxwGv

KU1Ncsja^%EggKLvW}8^Nca>ITjw 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

P&KePG*kMiKQt*A(VcCc7l-!)0sb?Bgdlh zU0yv}?^dv^Jge2dbTNu#6dRLepmv#H{jbI~njS>!f!tm!#UG^;yl-}032Uz1+}F|bYXp(0KTzEY@1n+2l2UG6Ai^6jWT_7`}3*R)=qO8ePwr6Pc8 zl6p9Zx{-2q#5ldl-)9)KM)x=#!inHiz!yT{28l5bGsBAA4vCN#Y|_1K&UBoZK&Q&f z)*hYOosuuk-a?rtsjhy~-GO%(0sl!%3cT(kQi8k`p9YP3y<;#oP#MBWk~TI_rT&7p zHV?%%XU#iXy|*HCFzkKd!1rJUHpF;xl}~xh>G6f{R{H3B<3n!}#Nff^_!Z=9dhA;S z%=ONX;H#Rq+g*iaomaKc=GbV70{d6Ze%1?KQ^|Dir!XgsT%QuV#t({DSd}rQ6W>Zc zVjx>vNbaQOKO~dk{Szm9BWH??7y@C<2P935PuwICx%^7TKx#vb2k(gp-PqNcbw;i? zq9fr@BZ3DWuP>*GP~X^Bhh}wxE9~>A>F~uK%z?Yx5_LLmDpgFm@Wr8&fwP@)LvVN1 z3g9k)YS{5W#7&^OPzU=G);57v;B^FRKaJt!?U}k%2l)~VAAwag+mPf5a(Wsp$^JBnJ0v#^D?wGS@PWZYAa+uOiT1uPbTS(6qc`^fN9-r3sBK42kmgD z_a)mT=JR~3g*V+!G1f1^kXge$W%{BS!Pi>K#2>;}7f7uNNOr@{@~jDLop#3cdNJz@ zjVXfr8wJogABf89l-rFVadz1_4<}Obxc9&UC;Y+0P_jO0axd}$g<1}NBep=ibjYt2 z!I5aXz@pl8B}z{|r|UDZW3}89Sm}tYxqE41T0@%Yx%*%Zp*4F9@yNQ6hV!U6%Fgh~ z@-E3V+_(xn#7~J;|G3owT@WejA4q~fQasXjMUn7Om(leFjXA)i5T{7GCP<2;k%gRx zG=t->IE7O7f~tP;z~#0vv3OeG3d!D`FoCojT@l&BzYi!B`Vq%fo{%9G=#m7i@Rqi@gOT~%F)oO z8SBe?0C;*O1&psotQEs+XF<|>C>{ln`rK$jM9&pI#K0v01vsl4KuDFFqGaiFAe_s# z(V|uaI;*$BsW#xKoz-2iD%w&FX4}EJBu;r!4Sw)r(iqfb$^%@g zfzNqe1IK2D#W^bgaH{K;`gF_STF&4)slXTn@d)LhL5sCG>d*U^AixAUOAGx@0d5d^nZ)WPlJX=_aUC(&F1)oezBBU_4m_-q>Eh<7b3pnPG@KC#el z*6b_Zh`fCYM#yFC7KvPv_2b3_{sv@mcd^>y$67V?g z2loKg7vAE>%4EYLKY$OA@DSSl+hM@KW5+%*feWm57#(%M;3aSqsKvcXz=s0DIer=g{3k8e~i&on|1pWC*Smz(;H zq^BDO{zY*OPsTQ5=kiJ9O?Jhu58=)F^^jf`?CaGyldVsojPJ<@ktx`iA-Z*znD3DU z9ls>J=EQmDuE^!=D_h)^epKZ>7rhq`JLS$dZ(+-YG9B-JkoVr4>)Hu%;9}7KPwy zvvPl1ST-@lP?VRJ<{AgkA6n!$1*;lE^ZW&GD-hZi&7MN>?63b_PMsy!G;7B6yL`iu zo5zQQGq7H?_&;-!b@8<6YH)ytzUVadOm=w_Y)YY<0m*rv$dASI7uU%YZM(e;M*WQ~ z`bm44$QAafPD`-M?h>sjap&JnXF1mqo&9*)I4`@#kAkMDV}@wL4B9(n44>bsbhZ4Wf}f>X~hp_MB>}eAvga+lmJI1-O8E zQ+8M|iRuHoH&@qs`Fa72dV4eUlWXIwV9mpqu?PAFBOUYXLE4{3(fj-!r_cCr%;n>q z(xpdN*h$?9yRVKpWX1@4n&i#TH{nRElPZFFRSEK$KLJ}R%F)Hy3CmVbPdk`#FZ++y1q&8XPU#4wc) zr_e9%lw7&&x#_y~)w@fL3+wD+mm{S&k>r_9jhf2SneGYItPDb)NZJRePwMu^)NQiJ z$5xKYOtF*MiSv-zhSgK0wO|>GW!fbf&tJnQ%Nni*;utJ+I&ODZJi3>2-SnNXnDzA1 zQ-MW=YIpFTfN^^5pSW~rg1@;fy6(O`&~NQ;k%3ODMs z5O=~(*U(!}{}+-E^DWqdveBdB(y-%Vn7i__QN=e@Y=f|pDaN=2v8bqSD93=nW9xpW z=3U(82!`ofmR9Ajbp3HZSdiE2BIVpvH*kv6Y0r18;+-AY)*I8mR8PhNlHQUM35wiB zs<<->|1$p?Y7}bsguj%m@*}!wh<(##-KG%UnKh^{72pr@{uCHoTm41eSCkBQu$U)< zjoqZaovAF78)!*%|4@~wyBAMEiFG(t_2C{m)VWCc&oSD8s&J?!QPD`-b4)*RD?|~? z`{`{wM`G_hu4KD(`5FZsv)!j@auC3CWrEEXndHLpdoOSEkKKCj#qZEhp7OE6nK;Ds zE7`!|tV)yz#d>?xNjHy$ahW~>!A8{`k97Ch_%a)gha*PL_FJq>{CcNLa;JXgpF&;u zG4mhL|2%vEK}bEwtNRNMx84HNb@#%Z!DAztwz)CfW9jqT{#d6j5$zRP#|)puN*^{2 z0ju!|@GBwcC?D9;hg?tmH&x3$AE@2e@y_%&%ECuA5#Kk~!sIs&%zbx2$m_Py^hfs2 z#z%Ip-dDA~$`_%%%@@_bgl|mRk#AhpgX|E>+rW9w{ho`$x4RDus>ZIRY&Y5Tn7C$yS$T#v? z=sPky_ABCf7>V#t=WVWfv|bqL?QV;&H<&FxVetC!@J`HaZHt~aHvw`tR&0#i(Egs% z&ANzr_a;vlJ0!CD?{l8CG9-Ccul&(Et%O_C!ygDM9gNq*`#I{jUNz!4m^ zc3OS3dFHc+Z7;T^)3htHE`O{Qjpyw-t5gyi*p?RCo)+shUz~%VerHA}XCS#I3@~cj zCyvuViMN7FL;P8bcpl9p)zdzl2tnF_f;S*$5qXslv=mZPhMY1ueJ#n7NLa7?vbO>C zRl7;gndtuJ`zZhbg8>2pf&#K^6=q|aa&UP<00IId1Og)eu^QRg{I>CMa4fp zThYYH#oAfP#979~*+AI9*?`{2+Q7*vnjPL;2P&Z67?KYZsrw4R-yc1(b~k#DqsyHRf<{MEqmFmKZQw_#u8fU99&egpd<-E4z=QSQire9`Xw2Kl1i zfd{sO*zw!(1J8i!(YgU>Js_;#(j#8q-tZz4-q`;Qr3&B&kf6|53JV}2>WWHzoWSxU za!UgX@lDD@(V}DNBZR+$CqplQPob#O*9htt_D~0e^sIuEgD*ir~w+v5tF z&?4h+8X;7&)e|#wWZ(;w=qYPY>=6YvGqW0#DF4}$U}gevnisw21wrRwn*6n+)yc&kAq95UgG4plM5!d)A`}DPFe|Wks1Sld#Zp z23N0R*zMwzIz$YA2qsUOn$pH!vep|g<6cIX<{OK?)}&q*Sdg&dg~$BO!kNQa!{5ZU zkrGbmx9MDU=H`%&>Qbj>1f&Tg2@UXKO^R1XGC;IF4^Hr`x>Kj#8j%WuTE%&BiRGP| z(^?g^C)6$=Iglnw-dj%w22+umUJ=(z7-VIInKA*KJhJ}bNTH;dAs?5m5xWgCd!fwU zZoM2*mo;$G5R(#0yGEH!Mrnyta+;He^%AdWc1S?q8FNXf%-g3o3Ks#6GbSn6K`kY< zmR9i|@h+6m!|-qP9Y;1obLNYpEvRGRz?YI|rO=CM&!VIMUY&B(>yVRYJ%8WpW1+{*9f0G$?oTY2if zMDMg09yR-gSGO94@JNQ*AP{TjIcd%bFsz0a-0zog60bW153?StB2cU?F~2qVAHu!? zHj@C{wzlnV?RIP1wr$(q+JCpUZQHhO+gtnf=HBE!<|UI%GRY*9`M#N)59gfB{kVg3 ztO93Na|qlx_cTkR>Vw3?absQTt^h1sd&Q{fRicU+$Mzf}V{NT7QpVPce3Nq~ z7(Y**1!Q@#g#+F*fQXd>ir13}13t4YljNyvOp)<%J4c5)_rWHev94ccg)wS&@c>_D zi7=kq#cwzgE+6pja${yZF(CZvAes-4cEG)30KmN05T73e(xnv<^W1}c$^m%>V*zMq zZ;#SPJ4{|sXawW91Gsv2&uhCmIIPHFHMWY2J_yuBhAYtbP+#5M{Ks|J>N@rTVnw{Y zgYq*{B+9pMRN(jgiJl56^{3uGw5&clCk~naTckM3#7cL=NF9s&|YVE_v`d!9xKrl|2^OBDWGK}-}#i@!aYw& z{(E*RwWKA({YjiY^1&uXp>Kv3;H>smCp&WFfe}*jTzNF1{^A${FhAhrGBK1Hapt_C z;p}R0P?{+KwmV|t$cY+mV8&RvD`=Gp>qzrvO&MZ81Tt2M8JdYf2-8>wZ-p?lbGH7` z>z#sju1T{1P`DS(7u54tT8Yhq6eap#G(->4UPu(7n6YriV91zF879!L{o|oajHl2+ zkyszC2fWk{uxC|X3re~8y|;@{OKnv!$)8EZjD779AH9V)XU(%n&!0We7qq6^buvub zPN#;N*FT`7l2@8Lv|y7YO?~h1mbIo8cVcv81-k#Jx#t0#T~bIK+*#9hUl zI*pWK>~KjmgKC5I^BCclu8GQoU4zLl!&fmxm))egVjela%%*a4d|=M^A7I;}7(dP> z&|>JRRcVTt>b3h|qO*RM6eUezuY$&b%*Kpq&TxB3aJr6x79}`88zb_-rFh|^ljXF( zs6Hcmhjl2>n_4#Hs4o^ouGN=gbf5EDT=0GNx=zLoe<-YJrB(kY6HlMKhq|w*PR*Ps z8(60U%BYT+ipmnJpH-6WJtB#dkgo(Z-tzVfs!ceux^ZL#R>5(68Ry7G2<3bZ=2k`Y zVO{j+&M6Ijcfk?+&XXm3VNXjpj8BLm`K|K-izlQ@C8j|;h!aF*yf%$xWT|by>xnHOI{u`&rf*I$Fw!* zyI!ztg5hhi`{%i~mSMg3m;#~R4RqF6Bsy$r2qEmFPKYQiHUA;KXdTaA`iYy--9nxK zy>>%O8RDL;A~YC=C2raLSRn4%7pgBYjZ>QAna3RGgwjCO^G$<_*ESb9qI~QXCHx|; zk`MSTg&5GXM15<-{zA!bDq<*0_arB-Os6CHrC=#g6x|_~Y3hLP6Z)hld!eWGPWxHy z*hrE1WVK8HWo&YmpwNyME2ueGwDI&r9q-M0bc_?ZeL{KjuFKZiHMOQ7r;|ej9r#j{ zWjNppfVYNns!AM(k_pUKzf3TEhg26#;);|?B5s+T;TBRhVS=n&g1(@AOIoN2^h<&y z63Ddz`Ot%D2s<8TOwCfq`#XM30ZQO-)VQR$eeU5|9ND-L{plc(R;Q!dT5}|L%j?(J zTSuYObgEpx<ZI3Ul$n8UMgM{svopi3QjSHEy|92`BtY zwpeIz?m``%qULTo6dViAD%6rLDzC2Pi%n=;DMjqOmRg&9bFpskn{#R6^0aLx*F8&3 zP*x)>-p`bkW5;u$qo2x{6|e*DlqK&JhTQcn4NGu800P`_lzB0c97r1j!-bfYDcjQu(Vj z#h|E?><_Bcx3)-+WGJRX;IBu^O~G5;KyK)6afiRV?_jclgh+T49`U=bVg*Ab_JQl` zo5Bi4ES#s7(bLYeW@7U0v#-(g4ztWypW#9DCJ!u z!%h<%6HICv!)tB%<(WV^jsVk4Yiyb-9Qz~47F54%Avq?eZd0E{CN<4rtBKZLrsczn zD+mpN=_yD;U%2GC76Wu&@b1W{z2^s8caV)*Fm(gg>?qhH=QV5mg*8m*cfuV zUSzm~5(g6UI!p#KD-6h6rp_1RiIv#Nh@VKNAtnVT@uc&2D(4S>j{RhU z*$Fb_6iH>@uynw_4}?d`_JD6S98rj$@7#)z8=u{ctIH*K6#w@g2bwCv5;_OzD$%pB zC|}VnHq#-6$!LQ@&`cZJ3TNa6-jJ#&8lel$xo5EBA+MNaUs7aEE6RZ*n0KU0r8b`9 zXF2?`{LRc(TR~%WEzC9$f45|IrUO-ld*TwNq8kk_ysfDrdLt8s#l?LxBjGg;@gHlrRF;y#Ulbw1!t9Xza>6$yoyjt1#KSu(3>crKP_)}-nw@8W31x{y7 zstELQHepE4;t)b`t>{2Du!cs%lt>tHQBh>{9fxRoAM{|@tL^tZeej)3Y<2s*Mo>bo zYIn|gK!y520P*A0yQ}I7^v_Ydg9*I`YjdhvD2()nb&GVu84;1sw-q{fk;S{;LGt^@ysTg7jD?KRw3 zR8WJ^IizWGPEC)rGHkc@P2>aT?C{ow4~7>MabS2B2?{x_fd5a|Q+6DK^PY*(iVO7o$1ac4*)g`kDJVA7LtY5^}iY$Ksy)Dv8${C(4U zgItYuuJpCG$uHckvS^Ijbh#U3CdFHSo{i%D`|~8trC$qxhw&h*r6oY=UZ!TvVYi7@Lu|~2j2O$D#^|i&P3lym zPdGmM-uT(G zUr_wZUvT_O+kZ})P;X(c=w6bZ=sOFuf_FTS^zIUSt+RnX`jjF3|0NFS^Df;smq2Xa zFZL&vAh62wCVQkSc%;`&HULfV!s^yEQMampv4hQA7s&f0GEd0;p1P(;7oYAHX09HA zEPO=#BK+^l+484yKKgOj-US8%+5!av!u!8e&i3yAT`#-FTPrUJpoPxN&*Q2nfQj_s zmX=}u1N|5zn|7HjG$!E?=KsCn(&ysTcUfHY#lrsr`k{E90TwrAWyaL;p4o8Hd2{{s z@_NOMd^MlJ)m6DbBX;3C!CTLt-H!2f9pUPA*y-+-gC|xwQR<5%u5>4XfBy?TN&f|F z>BV9(wj>oRsL$^tRdJ&IVKC%hoKDF~boz%(#Ne?KV>y=QaKA$4P=v<`1-3PM1+n2a ztP$1kY}lr-$Mm@?xJ$+y2j<eGq3J94|BdQ5J>j(eg!p=dV=?Y6qC>WYHM!VLZ1bl zJ*1-9N`+LT?=_|rW0uP~ep&rt5v-ShH3`6wF06{v#?hP~W!j>T<8D+UcDF=_T`hc6 zI?NVhV{y_aL1d{fi=&I-DHJFBmzte8s!V6DO~U;^>wd3u{|ds}fcyJj!p#T7e`m&j z^i(k1%Z8GFG6VD{Glc%1nIYn7XJ~6_Oe*hS>SX9*X>TWI@1pGL;9&3MVrnAlVQlK~ z9~b|#-%=DWE#EJIH1ZuK0ek_9<`adu4=a54;|uCTO0HVKx}8$r$7&jNmH)4f2P+1W z{}16fhbUrqAS6T9wEqb^GdDLwjr~FYrrHBHx0_s3!y+?_$_3nu-XM)kuZ=?f7X*lK)S!4$~U)MwHk|mqB0F0(CZFLrs zxIP{QDKKsVL}9_ZjV)X%H+k`AX>LCnhoSE1bgVC_6oyw;^HCq=6&eT_ax=z}*^5eb zYFzTS-}b~2i2>lDRo@STf1}2=kgqaVa~|gGEfGbr{&}&4sOVaVLn9}Ca~Nq5{Jeiq!i@m1~z7;<|}ss|F2Qk z$RnV+`Dv`tVFLk?{QsiKqlJ~t)x*7H$eWnN@Zb?2k{w&;~68hov&fIn)GQ8a8 zBl08evU~{jGk|JDrI3C|^-rMq(bbkViA##fs;+3cFvp*t%_S7iuhnuFKin4o!JB6x z(vXQYE-o4Rb3Ze^p;WKrKE7_xF_X{mjUjQxO#;ZC~oNLglmd=Afz$WOCn!swIT)K!c+?pdWi!Ixte{cqI0rfZVHa zB_ZABl#lW~u>SsHP_%T;ovw02SUKs_E||0?$p~eqM<<^%HaM6_Xz+;wP4j6uj5b51 zy;Kb-btA9(1mk=P9LlhNwHh@PC{(gBnvymqNPXA>JhV(3e1T-dCt(eoQb`3-&0hqt zX~x4MlZEB3sLGn5Wtxo97VLLz92w?jjOH{+O_fqYeA3ha=2IRLZnFgd)P@kx z6g*gL?ztorOq}y06RBVMCGm_fNEC`gFE*S>@QHQUjMyi6g2Rx=$#av1A(Fw8xCuz< zCYb}YF&yf{;u`zLGBSlGIw2Kgox}(1oz8r0k{+tV)~i%|ElhgiQvEk39|ZnL9G-!s zl3JR?K-m6+Ih3<>O&4UHLm3o2@nyuC8?z z<4$%y>B0VEFYMdNcZ8h-hg&|y3->L_C-zmNJ6yuU{&)P#Z~oXfhKWAXcNjvgCXGe~ zq?`4(;V4>AHN8{`!sWE23Vc(vP)d=Oz=>o16d&smLfGt+d5tqO_M%TaaZE5n3^t4QX7F)tx3{V=g$+1`_Fb7xypII)WGO}g3r~wc+&J1- zr;|^m7*k9-M;@<{m@Jv0shl47jE{E0O(bnw8Dq!wVgmPp7ki)EBs-Cx9m`r)*oo#e z-~qQ#(4d`UyO=!DjFsR-PZqy`>RYCr`n~UPM9G;F4?(m!EV;@mk16v#ytabs?)6NE zyNb#(@RhZ-UP1Fo%-aji?#BV0%n%bUK0`jH^krq9KzC_!xq7*9y~^q!iU(N!=3r$! zJySTV+ZC>fPnqAV54$gLWetDxZ%m}$Zx!W@C)5eHbwelI> ziIsJNGqrgX!Ee%eAv2}ET+QMM^+S!uHI)MuYN)L`UE47W8OsTpANLzh^=2UIY02Cgl140*gClH7jxYW7{<24QL-Chg%mYyEu$j4yqnMT6vc%LD z4#~7%2J1B0XGUGfGUn_#QVbc(vTBTgN?Yh&xf9~R)Zjp2a70RkiYhOh{!*afONE)& zi}ciQ5K=bNo}y2oeDmBy3vM0_V16}Y>gC)(zrra&-cJad-iX!6q18~b)^NXm-RPv& zV2<>(u#$~95ai+Zz5*cR4<4KE4EaF}^=i50gKHEYYE4>FT%9y7h( z^-W2Tj!F{qHJLOLX$Pu&()6lEP)6~yvqqGm#B|cX^@-zb2?Z?Lswamkx{@I3vbj=e zndM!i4g+B2?SOI=@}WrM+wzX-u4d|(dEZp=fkjvzS8p97K~3|S-cwx2-?k19kL5&( z_ojDC*7!XAlFB+lI$mvP zOS_4;zI4X9*Ma=K^9_ap<%k5kAzoYh(F)4J7lVpX=xFo`dFlBoIqgx;oNW}_oIYd; zwor-(yj9RH_1hpKG3K=lc_Ct3szN?N+^(dv1Jrai%n8nb{CW^%Q?#@TF{zbs;udJ{ zT5x<;Fy0%BVHdkI*!+y_QwO3i=7qGqF35#$Kv)6VCVE*Nzo+9CMvy^9?|IjBkWR&X zgcx`V`hp9xPY`jv+#8N$XLbmN zJ#ZtbA(E+X6ZURg$q3woR)#$WP}c4aA%LjE;*bP0;WnP+FHg{I>%}pm0h_G{q=Hyb ztdW|sXwopZ|Kz+ThR{wi*FA!2lDi{M*PeXw%6lpU2KPvk5dl8d^qr{vaInq$R%~>O z{tJaf`VXc{0^kf+UC5n~x1F1rl+n=T+Od~4bhQsEp8PvJ=irkLqdA!WiY7WRx|oir zDh(B1ltJ2ZdFQl%x#H$GS_;T=*KHHoHVdsAV$J4 zCXc zsAJ5-x7H<53EP6@%AQxcu7v%cSf!PN@^!f^dj`$cIIhi@)-jAQrI=wI$jGAVdwF&xRrRrN{@JPmI>*Ace z6f#_zQEqeOr(3@N6)%srX-9N}0ReHs0s#^KKk>4%%TH}&{GV{yH%V3jPZVwBoB4g{ z8i6q2Pj5WdN3SWgX2PyH6i9~%BP``FMkO^`pRke6&dQO8R zD%gtnNKC}@xq0dtucZV61$)?X`Rmx?)GVMAs@T;+r!+7JZy2aQf zrqfw%O<`8^xApM8T9d_Ug;$*r^A>nTq587Rh6!5^Tn8@s5SOP&tm@1~b@%>xwPyZk zSHPV_oF4sxo|j}z%}o6ZQAQe3J=);oMYSQO%Scfgi?%FA%tf-T4wEfg$}OG0aG^>a zUOZZxVJoxAbJ2fY?7tkf;~%?=u7MIj%tyDp>Me~e`zg!|P>#4lSz|)ykUfiCGk(j{h>1Q2DmG-S4k}(a?ImbYkHOM_BqE+(J#r6^r(O^MLSDn-D4hwE1s)=12d~gZCD^+05fDdu03A$t`x+ro9G;_ znTsDs<)BpG7%oWH9UMnUL9^Jvzc5EEiA;8;#G(sw#PX8NI^tNhnc^NlG1`mJ%IuO) zXvYJ=m&J`l=0Fo?h6r#UocRmPV#-;VAHw6WF&1fQAX+E~&&;0Iv3BtA6SA6Pk)WK1 zHKyckqR1kc;sA8!L%93_8im|EK}a?}cIc+K2(YA`*)i24XKdMP2d8o#$d4f&2h};* zmP~6j6buRxHPj4LKN@;kl`Ctb$T)DNY57#-;5kaAIk@#?!&%QB-XnRn6d=;U2Vur} z1kp1hOj$pVhAeoq*f3VJ%vVH}N61G054QxnLh(IQDKcB(I%3p1qH*w3-FnX-7R01S zn_ogYk9rBy8S&HMvz(DKf1Ee;67J=4@3G{ZPfW89e?{SSlh=0!X}r+)=Z&cd1N86Z z!~c~fuKg-`N??`akCKs5yDjl#cwp>S5zg7pJU5SD=gWH%6`XKRFH!3XArSn?2fuTU z;GhgQ2ft%s$o3k%w;oeQ&pru0A$`8Y!0EQh+p88i$0)oHe1M^7YN*r_d?J~>~3|*UkEoW z3Q-dUhv3U`1~UT6m+2qB*rVmcfk=M?E||GLXhDvy0O&be|0Jo)4@57*_@{{(F*li? z6WMIG+%x!A1AYPj_QJT__);o!+bk7s#P+;sT&4!CSb;sK%qfRu5KLIKv79f7t_p$x zwOiRj^ZdW<-N<1mel}nM0hMt90pb6je?MhK8Br%Ed#C^E6KF#FC=V_3o7*KzrWZR* zsIkG;y9C%JR*5z?0u$RRC7@B#vnB!!HTRL4I)gfbqq`4%?txHK=Yyc5Kk_O%t~@V> zy@&d>0-Za1^LM$v4n z5^e7y#7B>DAcq;7ihm%N8k~fOy1zw4Ak9IKUV!PSGwjGYf{r(Xgm3P|BQ4|Gj6Z|y zr3O=`iZ^rAn*L*j%d-Rh=m9(ed*u;_8kp}{hrhyMSZq<J`wk|v?@kJ!?%0`rz=~IMal0w@2>$0EiBo{da-@ zZBD+yJ3~OM!{)Ff_Xs{7Hz(h?BgM!F2jBD^G@yfnZ|sf=An*LaJ>u`+6MA3=m~rv} z9NgnQJNN_~MB(Z0zc7ucb99g2u>xwGeS!}7uU;4^Y%uEl6ArZTc8*`{0p6V519!TB z8%Lj<14y@zSpXr?p%;j3LpcavjlEXF453x|)5_9{mr!=`pPptnDb+_fum@rjHSvvu z2nTN?v(_e(d>{=rk_Q`Y0{$*mH2CaoE=Qx^$Z{e`^;Vc6DZx?PD0Edru6sjCgD%o% zOhG{ui)`S+sw@+U<+&wPDy&7z1yg)WJG&Kv3JFqL16Qz-K@l3#?;!Kal=w%8EK?6& zW~{195Im}^F|yff+Xj^3zxNS~;GOZ8=rpcsY)kL)i_5Xkw0c_f`OH&YHG@eB)A|Xy+i1}ykc)8 zK7nWM7XSS%`)q%=9wb4txQ(mJw+?TkIjp*8k$v>CvQGbC<_#!o`qFHqgusrJuhKsZ zC1PXU&gHXBpg_8XoaZw43hK|Kijj5Z0p{-)5H|0XZXjK#Dc7S#6Uw=^lg$Vh5=fnE z=`cV^RuHW~n?;u=3#+II zBmxj-Ff~f+%?yOLQ)U05TI(QdXUe5UgYhU~37)jnI4Qe_#G!&~{Hv-Q>;k&WcVff*xo!gbj?4D7|LhV7vI>Fhz9e;iaAz3AFYHT4TC!zFw zWk#l5n)B4sw6}~Ubq(%!)+Wgp6VDi^Vjif&2ymT`*H{&DK3t5)A4IWD($u|TZ zkJ|#886pNz`afm8bvl}?h~G(s;>nLSJpPk zgmG^X(f*d2YdV|M0kLSl63QNDITxNWZIDO{*8!f69h`z9{D<0WVU zyXe|Zfr%1BatXsy{;yibEP8mx8)%$|xHT~r^5^w2 zKqFeDi~Q}u4mwyLZlkQ3b-dm3h2gcL*00((Do2gNe$1hysa zepRS1KLB;&p+Q)z(N*tRl9+qbYM!c5p}x3|)I606ElMPwBEc_g4J|U#(o#UIFyjiR z`U>0Lo4EcL@udp`VEBM8@mV>fi>35C0-{aB#E-^Qv2Ixs@=o4ToGx6URs0a&uYD{9 z-viHa&&27wEn1vTDvhVcB|K@;E_Pn#p_n*zC8@`Z(OsMeE|Lg;TJ_}=#+d9vIiH#=oD_2>YDnr4vK_khs3@7oqu~|712DGf($7INRZFuB< z4plLzOiMUJIrNgqF-1tQ5T+kMzjYV)gWszc81nJc-s}-vsSjy%MN9mQr<~zOhZ0|*AU*{I=vYz?a z2&Q2*ZE476($0Ky2(Q0@FpZgYyfsOeHmGeBW%VeKVUOktbxEy|QMY(r8CjGIq{W>9!ilZg-)x0tysATi~l(zCga%R1XOa~i;2mu`=$vF;^%`{yH>}AgUtvkp zc0DtU?vxY2!#(>e!1-Zo`l}{d8HyPIqlh8CW zvr?PzVMZRcJ*694vl}BHB7!%lmAyA*5qJ zU?s!I+dXFkju>=b<4?NASsWwoEcbbkWy##doD%^AbXRxSaYvSYl4p6l(I3|AZE0cZ z1B*AZzroxDD1gv}_&w0v<^}&T3c(RTmT&|qZ%`pDK1>Ic?4DJBSwnqq{iz}TKm_d$ zyk&;)A=%r4@L}FFhxb6=JAr$_>z~2Bb?Wzqdx7g`z`E58)@Rwp=x4yb4GGp~+ieQg zXWV@a)@R*~g6=Wv&4B8$>s9Qx$EuCJ<%j<%3BQ?kFQ9rXdoQ4SOnWP!du)4CP`+A# zZ^%9Xz&nC3x}bI>AKAe6zdpKwN1*);dRtJwX8*`je8d6g$iEna^2OXzKy(6bOCWp@ z_h#mo?Q?(`$UfSD-I2cf|9r>(v*}4T*V)_(|Hc{ACvQ5%k(mh!jy#iX!LP-zf!qjM z?-hP%v^2r?k(O6i0_qOBVKw~@Ae4}T`_T%yXuzZ#N2s-DL^M~&3EkKee~H-UU*Lyj z3}O}SAw{pdfNndRRt@B2RSweT<4k_IfM!gQlL;W&HP z<6^J-L&BZfZXkft;7P&*5+TB7Z{ICVgv0=@?5j?d9Zr?#&9b}Gb+%;=cErPN6~v%4 zI-JQ{f9Wm>gAa=fh?yxG`dPi$OVNS~;8Xz8rH)ta+(AZTmaL+ah;#L`xaclMcN8N;3y%Ek=?|)}> z0a4Up<|TE3RjgGwAbZ0v*RdP$dc$5D*bji(Fz^g)hw)y5dc^pG-PHQtQoZBxnZNHL zy~Fq!@8tF)4ol^xCBulQOBvtIt&fkk1nSi-M>H+Rb?z=?ci@J_ zWK029^gP$3(Sjc8+V4;(-wOp6*GVEu|5PMKptLnpLxaU?g^M=1{_@^krSP&MD$Wb5 zd47tou=s)$y$;1@)GSyhk8OTti~TtWfyLY2Qe=ahsG{LqX?4a%sg2kL10J?vAOmPZ z9Y;@f%?4-x`g&8tssL<298g(PSU6L#$FRLK&CQpTK$BnpiG;DPSJV{znXN%5j4l{2 zj&1B}?8hoslqzzRqZa>0s!cZlTxsrFO^MYWuR@g*^l5f*RO}Yd8{^85FtdI6W!GA8 zv39`D5}zXGI_yS*dQoEMQu7k2D-!9Cg)&MpaEP73GAH^WDLL(;74g%mI2k56u~e#t z_AQM=wTfaxBO>{UV1vifh~8!@!PU@^-DWF6yeBd`2w+DoB#xb`1D5{TF`5X_UvaY^ z#e*=nYpD+aT?%@dhur6)c`IFOl)~f$mJj3qftV~#j_GbZF<^)bOXOatV}Byb;=Sd# zltxblq;X)s8v>qG{lMQ3faWXBF%SxogB)u0Vn-69OH)izhI+w4?AVo+}f`+Y=oT)Dmzk^+(b@lwK}hktYbG!DAG~ zJ>;0oUMxRGE<3EpxkRJ)ynP1Hgg~gnz*oP_>vAR)r%P9}B+%S{&!R&D26=qPQ!Fa~ zTG4F6JHx8>G^a4R3;7xg?zwRoO6TE7CylBSHH8+nqB5bL$gOcAH~rF7$gM1#)E7b8Ht0^Ewj1jg7y5>=rVT1&8Q3rF-W{aUi_O!z-{DT_}Fa6*>EemiIU- z--aDZ+0sjC3L33y7j}>sv#ZLcXuAqWLG%1`DsM~5VCkX}a^w}tXN^P&oRhwTj5&m4H*CVatp&v(hi&eqJ10ivleJ~tV{6(9E;u(r<0)m|@v#SZt7e!E-Hwu2Gs{-CH{MB=_m|3V_xx)ideGtgx2xsPc+{ z)-TsH>%aJ+Q@+4FN}+a3b*%^2DAus|7eS@dTtcF4XEJZ{r>qOvI;Z$2ZTDN&)3)t3}OqDwwjCbr6zGcjq4 zJ)s|#vpD5P+r+`^lahGD{+nlEQvQoOFVPY`iF(-1!lW-oKsMSjKdOVxDI!KdM-nzR zy2s=c9F0ds0&8ND7mY_oB0e!njIBvaB5h()7EPNFXKZ2;5?z@Xmtb!3q5@lji7fl-%SHx5=BL;|zLp71+Q53U! zf6Zg5S1NXnkIp0}sW3IkihdZA=!vdOi37&QPK<-E-(plI=hPNs8y`hAJ)~m#r-F^0 z99J?ns)oHrPJ%h%_QM&&PKkrYULzt&867QRa!QNVp(jxvT|R|NJ4|ExM~mI2lzd-d za@fY?)D+DlFP6R_2Xxv%YXfi{NNWS$O(6DuUI%6#n3jHm7u?H`4MYA-=$>9Nm;S9)!s{WBRz#Xz zU>*X3LC#ww`ap39aGMd<*$DPtxlTxe5phGz>wppmh7bJb0p=H2o{7v`o(n{VS`d#2 z)!vFqh;74|TYBrT=T$3@99=}h`uAPtCzeZN`@WU^Z*Vjbg|}Q`Dv=T=JOp(dhv0fB zaq1I;Y$w)Z8h7J>e_$BY_Pdlvuy|D;h*7lE7}{b+5vC}~T5`Qi6FzvxoS+kQDF+%8 zSsc^9>tH6 zJR5HeI+k0pCtCg^_cmR(AliI-CK=JzHiDgl%}5LlSs^JK)q^y)xOY|?#vWBytexA< zi1xLgnD+J0z1o)pcWmC^cD3(!2=6?d6Ww_1YYYS4mn{co?+BecUnq8U{?Xc3{QCo& zAsa79n|&jD1wIgb!}3EE9*}%vE4vFHY9EmPSnl^Hcbs2**LypAQ3wDAZiu}K0F%!a zBmDOn2lS3hCcvJXzPAg2d#5{s;j?oG=XbgqMaYe?TOtR0?R>n8IZeEIQ#o9d*>Hzz zj!WQ@9ks(%GjNlYaR+&#{E~1l`!V!N_LUC&qAg|*fejvQiZ?-vO=LDBg+2b;q!z9kISm zQ;m(GfSXES`Croxb#0r36Kuck zmv4XWVad!OP)=Z)Fs|l=zhtepe{3Xw4ekcRh5e0p+gG8Yw630Y{V#6W(PyJfRbtSh5jv?Y_?Z0SCcebe9!B*dQQGxF@cbK<)_ zVDI;pgLn;OG3?51#Yhw;$vJ4lVL754K4B<@0L>jQF}7#PSy-ep44`#V%d9T|E3r*Y zzK_Pst~=255gq5DXfZ!bsF7kdKf3M2n_g24TTt_viqs6K@7wbY6Almty{a1Verrd7 z4JQbQ&o&`WfTyS**z=ffL@E={Wm#NV^6IRiS#;+?<7keJ2liAZGl-E1T|h&h-Q@`359{2T#(M^K^^h%mg3Uk za*ItT4x#1b%VsQkq#|HF+%uh&pvRw>ZhXi{lkw=^#Lf84tVvu&nvT>bHS?Xa;Zm%@ zg(2~fwgA$+Sl=1P#>{!<=;+5t*@x@M%ovw-XvmY6iX~MpPX8P*+=SIo+&@Q|@?cBL zKApNrv6zKR$o}(EASvlpkJ05qa+rkUTs$K0bkN(btlMgnO-JH!efK5{5C5LqrUeQW zAI!VTdy$JGUR}@Gy)w*lOmf5~uyv1-r$JRb2G^6esrF(=WbBEUvDVI$wHX9tzZ3dp zLnUG-p%f+X=vNtTp|n4#r90H@or1=zO{5lk&6LqB@FuWglWViB*#ansnnmoaD92cX zTDX(LO}ViVTAWz8u?uWuf5&H9rKOMY;M;Rz<3}|H!+44kT;-Y2<1>02M>Z8jnMDi+ z{CdMb9mK@50PkARoR+Op({b1Z?>y~Yxr+zg=@q5Xb2DJjbKK4FSPGDCz3j!XY1(In z)Dvewb-t=}_!Z4)HjDt-9m0 z|3^G}E3!)1m|_YlsOR(A2uC8+DQ>L#MI?S>tn5e#v-CZ>+!#p11$gO@_^|x3FYT?j zp4F+0Qakw^ZwojnN~|$g*SW%g`$o0gXbgwVWaLsQFkqNKbD^zHMlgR}*3?>6@@!o5 zHx=26si`1?C0l=4VwwTW>sL*^cC{(_PJATwb9yMvO~g!`O?1^v`fvG@3)d^PA)M-i zlU-)GA2k&QpaES6W5PXG{@HNRJZB^=T)7H%XYxH)=6CkEIzK^_{* zfgu3U$K# zv3Wral@7Ymp~P`p5SMno6W%e@Ty4A4ZtbA*ZIn&n8N*HcBYmi*!{q{=#aqYgo?yVf zHM&J{<#67NRZ$->#GDd(p4DvrG>H@C9F;SDZe(}IF58k!aLzvKH6uJwlvT=rDY5mb zu&}tHuWA81%l&}UHMZY4HBdTtVyJuP42R2+zA1}jn+cqjev}0-vaC z&aKX6`&ySk15Yy10_l;`L*^Z6T$)4}`}c@gXSkq~j(9ue4vPz`>@#|izUYW&Jlq*^ zr&?r){@t8!Xz+KDsmhNce(a^-3`MQ?v0(?umiL5lnt0uUGrV4`Sn=g&vfTXjJXYl+ z{IX?^^uZ^{a@MIy=`qIld6(&$@mb=`r&f@3M*v&sDDlC5- z?V5h)V}oda5n;OaM~FKaLYU&vo$7w~B%C)qx<}AQ&)9ye(5CuWANRur^=psVmwi6w zjwoSw81SSa)Xs=v=ZM@FsMrPXewOU2ITxS6c;E1;ui>M6JXP$#>qfyIMlr|+G+ArZ`i zkB=A6Yz{5ee@7yV-4U}C&!&;o@r=<^WJ5er9Gcy+a>>~om7(i7Qns|#H!M#}1N%rF zwOcrsA6bqu?hS&OzRwhzybQdPdR#=dUO;?h)#W@OVd3Ab>oZ z06x0&!&AXqJA2hTDv|XIh3z^(d#-11U1OsT1UG;4)svn8p(eA-QPu&d_ zY_&J~(dlGTmB<|_#7E8+7+pZ3w8hVsfY#KsH1{I;2~k4uGS zOUwhm9NLZs$(X3>^e>wRt^Ovw zuc|_AKPZ>CYnnt*WDF?wRET=pTjwbjLbYJ^`XW44z3O5=uvpB_=zlU0RcfA8%)R4Z z=l2?!s!rV%Q)&{{`-a3%xgsySC{q>vdJ{hsOWg@KiZ-@Y1k&t|0lr8I7(z_QPs-z| z6xe27&qxRh*RGm~3ItjDE}rXI-}-pA7b_M{6tyr#(k(=@BS?TpPzU1^^N!x%4&M6LECyNF;c=s9Rtl#ct0`TvsX zhEdTthyF>9tp7=l`2Rn25>qEPQzu0yQwKvQQ zv6Jd~TT4F}vqpuE6ek#^Z}kL1zHB z`ipi2Z-%Rbgz;u_WnXHYa!D5(epRrb0hwF~11d#Js_5B_6cSX~>#ObN&6vYa zzyq_hci?F^ZYf;)&cc1aRxhE+oo1Qqcid?|7)Ub{xY>pz z!yLH;zs6-kEB#)$*oZ3utaR^3#Wco1Pe^xgwQqLcN1(HlTL)PkDL!9CE zb?X(fS(d)Rdf(udZWSN5P~FoYM*f_iANjzLYMwJGxK@dWSbeONjUmo<#WMeZ^_XDt zDzh2W=rX%{VbHbU*=_-;kV$R@GZ)>?Oox4;p!OtlJJTGSxHtT9|9_JvxeJh%MS_EX zwEmMPvHvfsBe{(IvE(utqCf41^?6Ti zRLR0E8LU0+W~y`umb^)F$6h?LB&Nh?p$5xWJ0%GnJSuN$q)WqRXQ{ zt06798$GK|vznAsIF=73hfX{xZOz51OWJdcia1pGY*t)Y>W#8&Y<}pX<#$UB7$M=h zGOwuJy6dWq6wPLhw6Y90>X@L30VhvJ+%v^-q@*lcxQcUcr5T#C+!*bs5~Rv*S1T~c zNDHUyRTr;^$Iv8fT?vU^d6t@62nZwE$m4J+>|8P#Mf zC1KZkE3r;Y=~MEq4p1ZUIoS$ZoMtBXD9Y@O{uoLvlbtwnY#N9Bn9s$3k9;kyStEwW zMAX9#`ZlEzrrMO&cw4${H`d!^C$yBgt08Zyxqx`B*HG?hD{SrT_ACsXIjkXdlpSN3 zwoRs@pSQkZw{Qim#Sqf%u}K%`m>W_xyOPg;yAf8hYqdXuqasH{^fNIW~r#ZVP6m-Xa$K|iEUG|wJjNIaLml40B>^a6i5SBhvruiZ&PAN za#<#13k6+UQX3e|T0rjeQ)xq8P;~%ig#bI<4nd(XUNMp)brB4At)08*?I zFoQ))G@+p@_+l~vkR{2ih1wM6bLvR+^5t(sq1lcYHas%rDQybQ@~5cX38h=vr2>Y< z@wr94jIvHq;arf$F6(KZ*_R*GS7sECKy!1_K!)EQbl~H)#FHR6bfk~rgyo;;b=>n> zl89dLuN;EUjQK^qft($Rh1{dOj19tUWsAz9=<6U)8a+-p-!>TIu^FGD?zFv}M(y54 z?OsQBm-@D3HKm$`R8ki^tjpt)%s%}%_mzL9xMQ>JCpr_%1f73SPaUgfeTVhR5GZAh zdz45U`+?*4fQLj0TZ8N&bRZ_qy~+`I>C>feAXvZ~s5N!~X2z(dP+(^>M``!*lZ7Ks z(D$asQAfh<9Ly})Od#&~HeX8@ybp~?~FRSf6`4RKnguz z=?N{;8;xGSPXnJJkVC%?aSn$0!(A55s-AKsf^x+VP@yhbh!81^j~vQP3G-4$xl%#7 zf_#|$=bPp}NRWPm$-fVQW1%B*Y!;m}e$18?<7B!AQj;f^t6cn1tkx0lFtLY0->f5e zk7K|x3J9mW%W(NCztsP{?^j$uaojv||NfD#PxxEpcKkhw<0tCFZx;C@^_(HXmPZ92 z1)sm-J__t#o`X*4UA7-kTQ@djULR%;L_L518@NLjUHZ#Pfq>|wfPm2ckHP&vkUr`Q z>4PTrdC$_^++XAV+KPGNowwOLTS|QQ_w#RGe12wTZf>sU+2uU2`Fz=5;GPjAMiCyh z?l8M@Ls+bO^2#H7vi;Fkg;#LY4ORRR629jF2^~?nF*qt$g;!Vsxb#s>?jIu{&(~e) zF?6EvSYGkMiavkwrHONor^~BQi&^pV3;k~qw%*eFv`T-`gSs5ng#Pl!HMxIqzf`V0 z;DH_eZUOYp>WdE*;poo#3$*KdA>{CjgyC<7zi@i~)fY?b-|Vb>)C+wq4Iim=eH;hq zzfr&Y%GNkkd}Px10oUGEe*|m)Dqc%i{SmFruY7@R^($SoU-_M@<*#_HK>b~0gjoB) z(Yi;h@pgm+E=!B0M~%l+M49zVmh$v&Ikbv~phuC_M}D!=^dd^CUB7r+Pq)#9OkVxS zl`ODKY9*CaS86R)uWM;L1Y%TTzT`rhQ1`N$#?PxFzpf-p+TS#w4zGX)w2~%PjWFZ_ z0I@7Ag5)X<(~3~iSD3{d1A%8U;6RqEHC#DyPn{{9Hs)8xo!#&Uy6prb6}gOA3A>c4 zSPrWorqGBM{aBV$6I%iCe4zq*B})PE8^E*HrpwN*Q1)8<-?Hulxg*N`nJU$B&#XUDx%Vx$ck4+ z6nS+o#1c>Q+s?T~xhVzHnO8OMN%V$+ZPg$?LkK^J|j(V@CuU+mG zKgFi!fnMmF0R2w+A+XFxa+lC@YFx!%I5!`KoxeC-Dw!%@`5LzCp|s4Wlt$lrii7o4 zo4Ri~<<9aCp{!cPSGf3h1&shQfnQm)e#QH0h(OA|#d!ZRt-r-oe%E9Aq}k?_8RFiV z##hl-Esb~MnYYW2E}~Vk4tlhmM!{7!r3z}!2th}5g8GH`bq%Oom|*(;;v-0Ezmg+! zYQNGWcN`<7!_uLmUkI?Lx^g4ezXAgj^-=4xaG}`1u{FdF9U2OW&@61=*qJ4#5Jjoe z!K-(WH_qo7=%@8n^q9IC>rId`lrc`{GrKB!EQE+b)kcWw3g~yRphHL=e}EIgV?9$( z@;EJ~^h62!7_Ai@4J}!sFFShh??I#rYkZNEb)>h+c zbj9Kcv|CG@N_;`{Wvk+UibvEytCQf2(*t>XcsCk&HyEplBZ`AnPZI@6HE`i15L^=D zS;#tAOo&O?H*_zh16}t3b75GM@d@11r*_HfeP!98thMEQ8N&x z4IZ;y3kC#M-7z63-td(W>tD&(vX?($r=+pCqOfN2DAAzQ<7v}3?#jw5A{s+S4sD=h?P&yrzYv|r1u131bB9`NI z{No&}VnH1?jEdVCm~~mG{Pa5QK~TrF4Dl=CWov9H9CU_^9V~FWjS-le-H#nXin=6@ zp2DV-SQZxz8s&LKjA@4;MM6Y4NHqLh1Dkp?!F#4ZDu)w1K}q=|bj^_)S#-FtC#xaP^k{ zc`|9^LM8V#QQw#WI-=ft^nFDfJmqwijl1cD4e-O7v$$!|!mWtcOvpHKEh)q`y#R>Z zmV-gyd=@GvNAiCfw_Af~NZ@}oi6&jnYOSCJUKOm6OSJ~3Heah19OdGR7J;RcILRrE zH~&l>2VbOpsTDnod89;{&Be;+%d3$~H1?Vr68%w4r4z5vm4)v~8SsfHYg|?{wV}L5q2Bo?SO{M@Aid&9LQ+Rf`mxYw2yuE9u%l z0IG*NU)PPfXtO$9T30PFIsUrxGEDgLSh6*?6_s@&<=HChn#S1zOs@VvQ~!AHzgE+h ze|g5vf#u}A9)*xe@_GLTT?%(6ky-p_DrS#&Yt#^a-nBD+&dU~CDo0!y5*3!LK-zw3 zvna?L24iztRK}2?C7tR);=2SLNwz{uUCecj?kvQ#8H45c$PR8Ee)22&HN=Kz#*0 z;Zgih@USK==@LHd=SzjDEya))j_4XS98bEV((@yZt(qHtRRx~rV;j#_Urx9xFQ}AxYeEA-NJaKe>{|+`yw^U4X>0%n)!-EgdZJuLBm2wN_To zGLBJ0-)i6lv&p*w=p&=m(v$(TWxg~sJ2Dvd?s}9UNzpKEK{oNHkp*U>BY3GVmQ<8n zjoaqLWtGxj%_Gu!x^`a>zLU9AhoEWfzUMjwFg_gp>wAwBa=lBSM19gfXfKhsql8mm z+pHq)TyhQA;_+VHrkTAJJUEdQQO4RWC~$eFxr&;^#aY9r-0kG(I)R)ty?SsPS=io7 zb1BfZIgsp`v9^F(fD$dDnQT(HO|Es}+j+%Jf=KKco65?n2m)gI_9Qc>+7-8vRuTB} zS?q8+0j;ab!Dy_lCZ)TUSAS8&+VqncN?(4bxg<%ULgJ{24K7tssD$&Y)o=U(q~}l< zD(APvC4O~ryQB^&txA`YmTRIXT2)czdp(P*6M8R2V@&m#IOP_(#0wup3(Wux3Sey0 zMk33F^g1?d`)wK27tpVQ>*8Y1_C_SL-Ry1Zrehwq)Bs>g^Uh z6w~+e8Zr)MR&JpQn)K(#o)cG>$yJ?|Das$?d}>Rto}jeyXkcYdfh-xZ2#5t8VMpzFv-pN1K(~O z6L2Dn@9Rc^#hNZDVy=)8p*#=0UQmW09=e%>BI+v_)j4H0%+(xiyupYU6El*h!5-s= zymYBEVYZO4E^;;$e^_wv^L7oI-G`rNzkilH;7>dANX8 zZ8Odtl3m$lO2?{_iWVjh$$9>%L$RYGGyQ8VZK1ZvVMQb&enspjG1nf!g0)mjE+!QM zt2pIt5&%4w!73*zik$&vR2;4B@~^Ya$d95$N4Xoe)pdk6Y+MgfuX< zHi=*;@mXl06U@(sAKUT~p$-w^o|V%DWC{d?iVB-c8{?(|xWzei=5}*kd16M{hfBVQq z2aJPFDWsd-84j7Iud@;&%hwVx7y2P*S%cIXM2jSwM4K*5Blm{PBheNmP<`nRG5^r& zktxwF>ccf`KsW}B${Utz0bQu+OO8<1Od6*f$RHjEE6k^1qhVpGSrg47g^U_T=Ss9i zHf*yv7f?h-8KZTj`5+sW6P-rI$i&doBr%8S5`}g%e@&xo8ikOFH*M4LN0dFgdN0{E z@&WBrO6=m;==#$1qnp#?3D~Ss$i+2{TCj{G8(YR5H5wo{_|mW#oQmRQTFH7(kFv&~ zZj*P14UWF6Ugz%kY26Tb(i7N(P*Ld|8zx#uNVjfN#x6uGr+>y;$^;EMWWl*sH!Tgh zTFPYOP$J1xJKE5*n}~{QON%gC3%^>rZ3*NGXdNMm68vBLLW*C=o z#L_l>nEYat!J7lc&>z9n{)K3N4}`Ba z{X`Y5Y&J`mlg8f7P)pT8O8KQ|Ow!gQkxW{&l57eJh{6QRc0;<1A|csE$xtK7!)sP^ z;^TsedAMI#fgpX3hDk!xASZb?L;?$Yrs9%;W6EGF?+LhUVa;KKjV_^2)&xp0Wg}&V zD7%2-%Q3mSX-eS)6~mEFOntytka{JxGGz(c9zdZn~R?(ltg^xc@Xf7qxjvez%gz zAyv}`{&e$Gcf55fFpo@*48R?sO5;?`5r=5U3U z0UyD_jCy(#%UJyE;u4P%8ms_(;;_2ubBt^HfJk_^W`p!a9CT(}I6$MPD>-6s22WRZ z2#f8L*(ztngU0X>uwfSo34M;3D0H_P%VG0i?ZIN#J3N>~Mu5Sy003giXng7T?e!^g z0#JGA9wIhMBPHk_uxu0XO&TdIY>PW+?WMQ={S0|!c;&xZvIo3^Qm&I%yrLW)Sq;yz zx2~Iwu()@3b1k%wxKj8Yc=?`#1aH4E<@Tix#Vg+tVcy8J?o1zGx}xMsnT%#UqB)$N ziS$ar^+=%ob$bjWIiODk9$m9Mrcvyp-D&kkqUj#!C2sxZQSPDCL8V9--PqDvXY2z0aWh z#mLwG@`#guhW&XVvl#xnZ)s#5Lw{(o%~#~>q4s?aWj~tG2wDo|AFOVo1BAO8D@W&# z%(agMNS_6Yib?%`F@MqeHICG`OxPc}LqOgt!1W>8VX=^7V0mvkzguDmq!vRc+uXDY>$b>O} z4vuAdPsFqe7rpNEe1LfF=?2w7=$1Wbb8hO3lgqQEvyU|6hS0SAg4wy|YAL^xvUVF= zoV{y^B(7BP_b6EMcbI_?$nay<1odYv7Q}oQoa+s$Sz_M)o@stYl#8bUH|JSLy`&kp z>XP-76Aw#CO(APXP#kl(dp=guPAg{a?A67GnN#?Aj>wVTr0}lyq0o5J$nK{X0WyLBj#;8@e(IutpvceBQ9Y>67bn0&KB1p>&~O5mZK%8y_$u7A@vy3!I9R^*NA z*gm{8t{=YK#u&wWVGv%R8Ni;u@zBB8cwPPhZyEJzl!zBRCAZI!H&+S0$GRxqPAJ)O zVu{VU*!Ke7y_oxs)KegpRaYSs7oC$odBSI;d?MZDQ(%fRC3O+0{!V{ULC04k<*3)` zaW^|Fgw%?ANge8Cu^qm`GV~VO5O${Mb#$aVsy_C{c+1(d1ASfnnvr*Jbh7#y|G-ym z2{J%nKbH>Ml8STuW_0dv-n4iHtqMLg2$qeBEQ)-zzDS@~kzg1acQIu;4{5yKEX=+- z6tZTBXKQ}FR;~EVSzn!Y8Oex>sy=U&N=ZhW6?H;OPLdan!Xjy(l@Gb31(3Nd!Jne5 zwD+qQ)x@I2D66~iqq(xgADJkv^$3b=%xONbae8tux#Qa(E7lXaABm>VC**j^N!K2f@IxAz}lGqJ3j1mPde^R;Z1XqmQ7BPFR z?~;|4@U4@Te)7mO=ke{^r28+H9hNBH$0bJtFtQDH)-ebnA<v_70>?0ZmCnr zaS3Cqqb+fHb^&-(lK#kwUq}Zd<8ByH@JOXXwMZ@H>7bmG@``bYclv)QHHx0GLQD&* zdKP908b6!-66m09=n3N_Z>?^PAYc5K#u;umZ^&Jt4Rq)F%4mu2BqMXIG*wa`I~nn$!kwSwGhuA+#$4n(g>{q2&TBep3A5N!-p@k_r>q>E z!w@z9r6cFIUG^RC^K=;@zgc%t539r&W0dmhi-= zrIQ)cvMTqlsIV{teN{I%(kdSp5^2w) z$-kM1EAOZplKWsBUkau~po2>zshocpCIdC7#^6%YkR^-1o9 zexPvo6(ZZ6^dn+?58CrSu&H!op1`75gUBtetFzzh7C=j$evX#T-07+IyCJey{CBjkQJT`Yyx1-W z#Y^L&+VJ8<(qM}(SD)_6Y+rllq-Vr@_iUI!`wSzsohmu z80khtER{E_BI<1c3Q90O&m^KK{1RU;Rc+sHJ?=t8Q}7_Scuf+(Bq}ubgd$a0*!6s+ zl^?Kqlk{&Sw>j8|FZXey5;HUXqiH$yJ zagf$0Drnu2k%Gg_6g99)`y8h!b0aOpItQT-Emlik| zQPc;2>cgJIS>)vOL{fBXn!Yo3yC$Qj)x3lqK&y$FhEw(X6{_EvC?8L zF`2I>JsU#Um%>1QG^lP7eYe<|C~BtE9tD5qAjm&%##@%`dSzXgAP?5#4ckJuZ&|u| z(|9c9>!-`r)uKe}EXohTSfsy5IZz!s)VIf2{}?Sp{g=L*YB;_>x*e zcT?8oAIl}vJM;B6F-=K~@;h&X2OE-^tO0H=-Tas5kAgz$HJ6+?(eDG@$WE%v-5St% z7)f^ce7lsnBHoORW_+$}GjPR!udb@!DLDawysrI6z5eWipCG1#eKVA~l~Yfcx>qL8 z1UDerA>Fts9zo+A;1{y2n`_1>)y+1*&8b*DE!Re+)ypfeojgBOCB%W13Csx8Gnr{7h%RNqhA0oqd_VbBE+pZLgzZ7H%6QKMl$b|HW?^yps$62ojJOJr>P(| zAe05h_PS<8i!ih-0DJJfO2xo+X>po}CE!P=k-8gAMW>aU8jS~YGiq;bfv$9L6Kd_N zSnW8+w$G!A!dAA0EhbUR{hNe*v~K_rkTOg^8sGXav?I>Q76*Bi_V?&hvHwA^aHe)q)bhDVq-x$QK!#~5B!eXgpsCcj>9o*3w0C?y@AJFp?Q*#>7QQ8HS#>^zw&`0d* z%`Wl{^*!&c=q!rB!TA5>fc~Du&5~s0*-PBb6V*2&1n&Rj&tW&Ec|N?}CH7@$Y76p* zol9s1SGv(u>D0jc*$NqGC4_~4-?UZW4+}T-&zH6c9YGMKl|!4D&T~NxtA}Jb9AAXl zhjThG8;NDxkb*aAqu{qE*2RJa*DFXiIKdet11?-7Eu;?+2`yFtplC)COKpIb4H@1< zVo0wI)oO!WV-|ggf)QZ7fzpwuI(S11m95EUV?I78Z?Yqy2}NMudJhM)^;AQkXEHu) zU4zUoiu}o;4ZYu>npD@E=t~G0yc;ug6o{E9U}xBF1Y3Em^sc=&WS5Ngon~v&e#~Ft z3fYFX*@e1}+T@Dawt`iKXyo4PZBs>}0K+AL0W+#7dfPye(6W74@L`+K2Ob8Pcf;Z* zypCa?*n!Z*JF|8A;0*0RFhm2=jx26Y44)J4=P|q)Y(8z>kJZpqTF>g`DvX`W^<+ms znR5hFc#ibenDE4uyd*uuPw-X2i>I5|hA|~S7}>-rI;rGy8-V%%m3@ssdqfI8R+zdE zHOpJE$Jj)K(-hF76RF1A2mZ{(>Y#1TCOCKh`GiY9AQX~}GD7>tkMnQ7uP68`?|Qqu zZ^VVl$5n_<-X^%v%in?Sq-_xA%~y$zU>PX<_Ip7sW9R4b?)9+N;XMY{mEL))upjLE zNh_?k5RI&6aZ_3^Xp@q5A)|UP{L!DQ-p(!C3da`wPOmk)21Stawt_2W_A5!-X#4?) zLo!M?0_Hc&j%2W+6zm7nerDdoT9eh8q9Pj| z`38HCOg(H^iI~RkA>j_THQ9FbYt(rSoL*XPh@_Csny?pBZ^JFS5q-+ro9~#Qz`x@B zI(5ytr9-=IH_l+Mgk5HC+s*w(LSw@*l}<#qRb1h>=Y=NxL>l~n8hty?;F_g(cA8pu zIopYIPHLD_K_HXgfHzK^1dZ6|7;w143i!%3;b0$zQ+Yj7{H#JZs{&e-MjeO5m z{M;_kxVm*K5D&n_{N~W}4HWc+?%hyNnClCKd*zE6y$;?~urT!#r+-H`YuG1Sz=n#$ z6qm$FY|G(5dge5OjIo z&fCVW#z7~F9z7O3f090kUQ8z&ASr~o?BR|%>Cb$RbA7G@jQPh1D87`|a*VUN;BP|LeLQyc`!){zU@q>jB|2tK##B;=<+pPuL5WXN*ud2qPOPnq z&iuYWSYCd-CK6!zz`Alf#NPGC&&ZsN21a7M!6oK=clr`5;27*-CaxnUc~U3YgTS3Z z3X&5-8GGQ!o&+B-@`IT@f*K+aLa6$1;)NT>pKCh&B>YkSkmx`_2%rAQLC-rzF}Un;C+5f5Gxu~zqIb~LA6b>Kkw2{EG6KX%8X#NQW-sJs zTtKCtwj1Eb(U&GAQC@=y92v%JA579vs{)1;R9(1M#SR$6Z(xg0B`S!_pb?vy{W6O} zW+98nRLU5cCdw!LLFVHI7oEzTKru|LOGFp~^GSv4bPA7_50-ar3*y=EDiFWcKiz1TKSC($Q1SV!`R6BSK z8wC9qj+|tiu`)LN-0H*w$4%M(j-kB)#x$El^RzR3e}PnVEyebCh5o^w)S)|Fn}CYUz=RFG+H zM&qaa;Mq2Gb>r~pBLKl%uINaOUj8x5&gnajgJ}KniQnIat8|K$I#$675xv}GDfw!* z(4;+3e2{X)E;-|~!f-p=I?>tSb~2V2pG%A!_{nW-tYgQE5V0TF(-v-t6#ybLvJiY# zSQCRE{K90zw0cikZ45slfzSsd z@c=pXgvJ|67bd6={ON}`b3mMOt)($=O*C*#JcDaU7C$hlQGZBtVABV4`YGCxP#;$P zG3me}fPQ;YJ{bH3=aG~TIsfoI7uU`uERf^-*Y>df5sbf>^Z`yp@bTjP7X5s5!ff7H+F)4Gpl=vo zbZxW&ly@9oyq_?bNR)QTlQT=SF+&3;V0~uLp%-F+Q2p{WzpQEHB}$3`oObW0HM0`ryGnmK z{9F%*dOP?hZB)C-HBgOn+%9(;j%$MA{1m5zC;}NY(z4{pNv=QBhyRkkUusw5+Arqo z%q|pG(#+jOpjtnE%%W4g99_0EXtOV9{mxbGUWsEZZ2!6@;HU$X!%o=#{?M$Fe=hbq zE|5PW2{GY?U#R|oC5BBvBKr%RdcNL}_b){1dAs6Fe>luHA!pQIu<3Vu3pKxRt#8Ph z1OFn;4_tZ`ES*}14n4quomi-vSa3KxXr9^;X=l9x|L^EzmE9`{}cV!T_A-d3zrCjF}V50ga-L*f#Ce26szoNnsMVZi{tT872#fJ`Z41p-G;@8o8xnM=o`gu zJmZ3IHAA@~ZTyD$+)sYudzCi6ani$TsQSNfqY=hlXkJ@~n<6(PirG2CD2@+Xk@9_r zwaB&!Y7M=W>%nPM_qve9C2rQm+IFSUFEUg}^=Enn?)cWe#zIdd9*tlCHr;$5(i{Ig8v zU*;ksQMC-Fp^On8{^to?5D<%r=m-4sUE1x2XLCY#%z?hqRM@b`MIlQ$KNki5YJh0@cp2Y z49~V~)Sf7}3)XHQkaH=23Nk+mGCvMFANVl^&IF5a*+kSJu#qosk{m8cq8Yu7K=+hv zFM@3m9LvKU2|Q);GtP+~eUB|V~PVO{93?gbm+GE<5d}7bt7>6LGZxNLGUT_5iy59Zp{)+ z9hz|y@a=!MB<7!jw)OHz<0-oW4Mt z%u^Ifdm_ZC>IHD0ibYT|3{sz(rW~pR!t{fi7c%=~J*Q2#p&f{}qd8RpNDvNT+&jT= zw0OaJfv;i9mN%=Lb}M;hvsouYlx>Bt4Rq7;M-3gi=3Pi~f0wcqLr0{EN&sH1AOH z2zx@)FO>KQIivI{*!f7ILX?I910e$zZX61Od>EJvMcERf2Jt7selmlZ6>!jk zB&R#<|2uCZ?W-(* zyzL6X1zHwBw!z(ehE`-p(@YWS?1^*Twm~<}w>tQQ9}8Ut5x-zRaxgyZb)bIHlkd$s zu7#S*3pmL8u=abGanA3x(CnmE&4W|w;|iiu#hsLDe>Xs@4&ALT7_2`GfPu-yE#0ZF ze9}VRTPkFM+BzEPMLAv|RzJ;@idR2>&BDGQ!s-y4E-acKs5VYx_`uFn4}V|g>sgRw z{6Xt|?)!%wKnwG(b(qM8!T)VJ6L5KZgKcft4qRT220*tPUK;!Mz*g`H|u#%?*k zGnZ0?mANO_+`sHCv8RzGu z%N8h;40G+L{b%F6ZAt2+x~BGFG~HuvNRGa9`QM~D56(F{Kr|=k`3!=!iR8xC0gX3) zOYljLU#$QB!sHgEf78I#HVfptrq_Jic zXB<2dF}rNYrUPK!X#}QCG-o6&a+Q`=-VoW5n@1>Tb`Axz0d`ajXywS%O>mt(Vro;| zk;F$-XBHoEz2SW1^@^}Y7@57)FSA|-IapPMGh~QVxiCWDomK*7or6pOKe_+9u4xxA^7#X+_9&!H`CAffP z+bL+*X@Gz^(M9BiAHKop9^vwOXc|8N*=%BbrES%ovg(M*#tM8J4KU$&JEEmJQp*^j zvw1=84;npYRJt1$IFfksc-~Cq({|FZTE)koJ^nPln)IrviA?+i2PpJ5{?A{v$g5oSHvRSn*-g2k|c0dgLMW zi((HmU+zHli{^G*?N@)6{plYMe;4NksmR|^8&2|24Pxg%b=vlt75?qYf8ZNg{pQ_& zAgp)B`%u{OeW|#?EOEJ=QDw5CC6YKm*4TvWJn7Vr_Vdzb-mJQAFP`%qVF{B6*V>;&1U`MVvs#yb*WGZA?i2DsP zr^RDKAG(r_b!shsZYc>w#`WafjHF4lp_kpxxNC}%W5W+u8{jW}c?oqB^)P*V(>ywd zbQ=rpgKZ0A+Rf=k#6dDFua3QEhzsNH!9``vODKOck%DdUyM&5Xh^SMvO;WkBmrwq8rWA8ICjpz8)aGgEYygTMY;?syLbwdb0uYqA2Q}UAvLJ*rY?oH0D+tLQ2`_5AAJAEw z2se}&mTb--3{kkKIDnig)=TaE5k7gLQowXcml`B&gr^F!QS=;*aEEb8!I49f)7==4 z0BzQQ5_19C=0ds$2gxHVtR9KMBxUJVcI491M0%6})T7;WOa(}vrL_cPX(p}uwXkNy z1dM~-HWDqOLI(3eGp;2=CG$-(t}f%2dH?QUdNsfrVQ~?^5F*QOd z&o6SCnZe4*k0T`kq^jbnYLaPMm`Ed6SU0170)}#pm6}jK8-Z?_vE=bm-brNOry$vz zrI}7nJqsGh^VK}eWb@w4gfHF+=X{KKFojqTQZLAiifhl`Rah9)TOl}5hWJ5Vn&YHE zPo=?UxB!!R!HZ*Tuu6iResd_eH@INoc__-qm=Gfc?i8=EVdOkG$~TiCrVafYZ1C8; z#am(zDoTW#=|$qgC#aL386=$nB7_-aa-fH-OD`u0=1<6TlZPsJa>dUVRCePmyz?O$ z#m2j(arB;Q1b3lfvWIWag7y8T>uo2S|^6%X#uhxPn8FX6*aB7Nv z$)Nr%4g3Cyt)Jk2Q){^Am`1QO4W0-h(VYEQ4rdr?K@SD`&t|?2o8JiDaJ}x2cnCwu zh+X9%OxjR?c$Ez!%(;zPp~St+20Rp)@Xn}&fN8{P=G_`VNK{4X+jJ+!?cH6Qb%(jJ z-PmMEqvq2}hwv5&{=9R}&z-{wrOajp8j@9#cFzu9Grg=sa#nU@yp-IKTbS$JpyLP% zIvaCyThs5_8p0x?Y(~M+82L?(ypN8_(2mJsqRD2c-(Ei%SDL}ZJ*y536xd`RRt_NI z#nzxZhgLD2P9P$EOm88kci__wAt+pa?T`FLJc&M-OFN!ZBl=Jy{*V{^*EpSM$DZ(D zPr6el-LdZMVoUZlf2U8lGtRrdeo)@Br1{)@^3Lp;QzZf!q{!0+@!K*oa$93dnG?EM zo4fZAEI`>S=IYt{Id%TmwJBHeY8iLapUgrfXg?-TMA<1v0d3z`?akm188 zG*IE!&ESVI$aBB#1EF^v+ia!_2zdcHs6G!%u%VwK8a?X1)Sc^Fwr@?Vb>Wk z>kOgRsdqv#m2CfuuXBnOHCWp8vTd)uY}>YN+qP}n+RL_W+qP}bp3F%mC-Y~L`Yyh^ zPN!1UT~+mknGDCch&3l45D*B@<7*w=x)8=yYSfj>@U$tRD2zo!SU+&5<;Tl2m4Vsu4s-GK+M zSdqJzu6jh*Jt7@GVa}g;ZXftt=W*r%exj3~S}?dyI-II)T-Ek& zngNXL-N?96Z!l(lOxftuo}!j$Rwlq)ka;EhexC5IFIgB|T#b`Z!!uBqxU!hn`gR3F zxkRCfQb^OZ(hD&-|6T%`mm}1|`lDO}u=7g=0XGZ87r=%pYy{BmE9K`&z2U88`lnPU z&genU&Bk%+_XhZYxQ@wu8(LWH?>+5U&n-{KM?WJ}O+Qszn=`@0j+~*ym$o(-bgv2E zE{txlRZey@wy!?X#IJtGGLc(p3q4qB&?{p@DmC59R~_@Wvm%~Yfe#YWpa*Ucv&(W3 zivovieTV)t``$+T-r;!D!{R~TxV^^Lav~NrF}yZVxJv~w%Xf%#lsn6i_`fnjAJSpU z)es9!m=NDnek%!GU1GQz{ij#Rf^t=8c}q;eVt<0qVl7c2_O*lU@dVw81=;ZlwCnIS zyUN8NP9Hqrg3~ywa<}0MruXWF_744H;@)Nua~U0XDWz8$YP?C+zVZjurk4EKBSG6fS<1YYhi8N~Skn-xIPj7o#c? z@7{wn(3ADxQE=!~WKORW1cJPp zI#U2iy_>+p!Hi}NR(=c8vEME;)QgRFr33Q9Kil|*xI#OtZ0`SKgB{rq9A9oD7V|4F zjWhp>kDIZ{RnQa(j_YqmWN~1FXMonx!JB&a#uS4W@ne(#-EandsB0cTjNgDOXRjE{#vXYbIAc)_0|vGCSXk& zCB+goEgF#4uppa`bCNPI`HCw31crXH9kuT&D11ePdckAe^cKjY%h!16_tf+gZrk$} zNdyo|D8l1FBpr$QI2Sgo4G$ZlqetmzQ=hN|L$7nD;*-_4riYO$)B*cidbscYz5SvH zy9op7-sMZmU3DS!p{d;kKkuYY0!_{Rp8Z>D(m~Rlzf12TzPn4{Geqz`pZGLsC?Usa zZs#e?ES3^uEl_%xw{Eb+*Dz?z4u!V=5tT2w!f=%z2U-vpWZ;WX`5zt5tg#gz71IXl=3)rrxleJ+k_>JJ(JNo<_B`GZpsY z`6lhRyLKz$D_X?5T34s*KjW_PF)T%ABfDRI(fpDmM)cwI=<+Tmt($5O>f^wO0;&7; z0eu0FEJX$ZV6=%*wMu0IY629W{9^w>?B50dG#c3?j=i!nCU*~cxz#3PfBZRE^2+|O zt6*w8VvF@wDv{KaF&n4D!Cy}<=TJ+Uu?96s`pVSQ#ow41Y1!qeN{NYT&sd!pv6~os ziprrbjghg>L~h(%>(BZU>=BU8r&V8{aMU_0hU>P%qV2@GGfbqBU-B#4&bC$yYi5UM zZ5r^qTbH4U&!NhOC_dbuOSwx9#frP| zKK_OBUVeCgqn126d1ylVX^d56J+AgoGVod1H?xSQR=9;obYty(&?9Uk0xM@_QS50w z+@5AMDdwvvVwgj-MRwJ*WHu-|`Mi;@{PkSfglFI(tKZBorfH595dxwbzw_Ad9-ccgcInGAb-_Kod< z>7I7pZy`<{)k_M zLItokKUkYTj6Fa>PmQ*dY_gSmCJea0NBly_^h398>qyfi9m87oJo-97cTD*hkSnT~ z3ZY{fPhRTT^u73qVZ#yYt%btQqRkFd{3Y@2IqNOvuUprtP~IIFbASeyh5=Pp>R)d> z!s4}=#FD{8(`1tFp+w#B#Ed%z@0hj^te%u-`8OfTJ)Y=EPSw0GK#PxEdgWc{j8LE= z7*tXWymV`GdGj-QYj=ZGMDWLGcXe}Ofxa`)MOG0(Ll7$sOnBlfrZ=lyYmRTB9ymP`L9-nOdrt2jva&*0 zGrQ2EVb-h}vbXJd;fyinfRZ4uWgMBijo1s{xw=(lDbwoE-+!r2EKHc3nDa<&0iZ{l z{J}K{DPX-d&jeW1)Ev)Tx)Kjn9I3qq4zk%lV~lpw*<#nf6HJn`-Fx%3LlWOP!1Uk^ z0&qDWxy}*8$ax3rrL;6GYz15R1n$YWwggt1 zm<$kN@z8A7y>e$S8&`z9r|k8zK2E~g29AgC8x6+}MVhG6@CG)q)gW5+B>37p%#W0WS#>)InM!X>~ zq4WFIA;>Vq`YA>j>^tf)Xc>U)+Z7<)uqX8^9jLFEV}rhLVH$4jtI8$d@qtP>mnD;a4` zmq$XXz%CDAJ|9C>mwep@VcyHdfjTr+A0Fp_W6XpM5PJRf!mF`RBrQph`8v396FuX` zSJ++vA)rO{HViKbb;IA7)k%6Wh^$aQ8a2LzFP#FvM$WzB^|9Z2i4;{RzB*TX~BYs(054*%?S-CeB*`;mdT{FgB{p8c~WvMta zlZ2)7PF(WT<46Wi;TSlboVv%annmEyQ8I#}Qav=DJm%Bu298cyvVHG|WdX12D!ip^APvqZMByBMt!zFj_i)bZm9O!3o&(U^C}oN*r*9Fjs{N>)|{Jy1rwu38vQo2BWj|gB|`gT5Usc4q4L; zx8N3|xfFhPLOxz?*+<&Y14l^97;eJC=OaH_VP%Vrxt=Jm+Ou7ccU8N1>uP|zhRL*cI>)mM?)PrVJmPKxp;N;m$IGl~41{~`F|e7}SW)SF%9sEc#hO@0aLjWci!PgyW%%VU{e`bQ$rrTx z28#L4c4qVy0@DSK*n~ck1rb>;&{HmyVbN!}7)-LJ8)`IQn)n%@NC1V%)2;M`LdUxWRI;dPLx!s#D^no=U&GFLWn{f@XNjnFUt?%<-G*yTB_wdqC@+ z4rgu0%(#`Pafk2w_ZRDD5_emeT{0aTb6e6bZPGkQZ_w_!yNXjh45w}BpG|?5Z!SsS z`#Uh+3A#eQtmNc%KUlK~Ry6ti5Hb!nggmC4lBC~HDJGmhVH00EpLkLnX4qPU`Jjs1 zT7E-Y6+>EA24;93TLD)NE}sG5S^GHdRSt06nK{65o&P?zY~VP%D`0rm5so|eCEh#z z?|(ld*TC=|eEk`(=%qV{OMXf=K^DNw2H2GYJdJ?$IpB6i0vAh0Tx2#zQuWBb(bwG0 z*p(&Kz37`BYpgBNqP(b^8LctPb7Rx>IiOq`Gpw%EustiRI+I?XE(4zGx4Ai6AQzcnaYtoI8xHhyVQPU<>{oJW683e8^n5L&0&(_`ReXQw- zE2gw&@adIn&?gaBB#+E5u^wQbL)wGB%(JFm(~s>Yx+C8ws9n7tsQBi(gJcH|6%Q^*~n+Bq59H(-hfXg0-PiLLC~}& zze=nk1vFws2v{&psT}|#QD59X22G{?r2R}l>&0UEar`Lyt&%lk#udvcUu0g3#{#Qn z%9(kaoH<*<^yB!MyZ0I?kNuI)bJ}%tgDl8##kk>l?K#bT%s$QbqW${n<=X+Y2U@k< zA1J-JvzYR77@r*u#Lw$LB=k{jq4T;A#^)veG8a*7Qlcg2|0{wi{oX-5*g&oJC2pjW zDmTGM6uM%Z@jUQwNS~;Cgz`o7cwaxsG?)|@OHr0C_+6GlgMz$%piQX6sFM#5s`rod zu}+=|8j=};sF0bNjhz({H?5tEk*mti-jmsu7@iz?E^SPh5JkxxEh9a8N@sOB$iy`G zs7z^+H>D|OBBqA)4%Cctk=TUU`V^{;SA2|u?jV)DPC04HPy$#i9U{fkQY1~-iIYKd zvbcVH=02erRb_*+!j!N)Y)mQmrNN{kt+j4`yJOeL9nUb__F{on?maw(KFv*lU9?h2 zQUAB`#Mpwy;^Z*GIFw7~P?a(vL+WU;!Ic%*l+}c0VaM1|=5h--8ck`a(Ef<$PvWLC zN!K0tz$LyHr^(5XWPg+k-Gebzjtn}kO3349-E%*=Mf{_Y8>nU$rJowRc9V4@e3n#% zVu|{SviZ3NM#Qk^E75QgH4V+U1^(a+dMQoGP7*`ogxMVIVXWEP#ZqHy8=Xhc%tC#r>rx;H^$w8B!JxhIY6jAuRpB!jKr_))x-TG;}Ebr z!YI(0s2PBm3B~|A5XKNX@EZbW_nRWX?4Bin-iR8|8Bz#EHfnV(C9`VQaEP#h$nK*~ zO-W*97Y-EsMRgNudpb?BBS(}x`Xs6#jIWi%fEPeZI0Up{yL?`nR?t!iLUEVle9PlP*AjE^p(o*``+m|JCgPJ6`9%KG4l7Vt5{>_su%@%LEnc$miK7 zdVd8ZS-$o`T@63jWekH2`)GTG26vS{Y(*|HvN39g0*r<_x;IEq^oOT3eo#o)-qZ z7QwJ<1LBynk3tluwp>{+KlW(r)9PTEP6fP2Cbjxvn~t*WcSn5MI$M9vVATM+%}sMR zwIq6BS9g9x_Ft0j?6zX5^ldwXSR)SEWOfcpwZ#CxLBj33=&t1@bgzytVx#tCwNvGX z6#PJ)`FaZmp`9mTHHimh9t*(;?_p#8v;qHuh8>3wGG1QL=4w@NHzwkg{My4W_U5m* zLR_X*UF+@t**UTKVd)&+lzz6Olx9N|&o~zcbp}E1V7^$hvo3*uxKYl?b< zy>5SFq0j7XE3~-^=UScbE3e+~>i%A}^y3m(%D2NWCM~oeXpuE-3)}uCK4lu>7Hnde zQJQkj_@IqNq7rwVOF+SAs^@z3`|m7%5={bq`7e8W|3fPi{tsE)&dAEdS=7MD+0OAl z;uSV=0htAO_l^lr&ha>l9Mjm*x=L@V_r-w(DEedx7|#TFS`A2P#A zqP1$RxRp8Cd-1HdgSoEJ9P4X#BsHWRY2dkockDjc>0HUSf1=j;Q1o`1qmzp6b4fu2 zfj2E%AY_^fc_SzznE#<@o*=k{KI27P@Kk`&vHyFkP!K|e1pXa%qHq8JDF278ayGCv zHgGgn`hT}9MjhH)Y1QM`Pc6}friMnV1>l}JSf2>^1XU8GfMJ9dZiL%f8aISlskQh1D-c(wmk0<&wAk0rR%7FvMnD?Z|+_MSMNa|ucvB7Z~k6| zMR&Hr?blXNh`Y)t z-PW5PoA3EZEr^rnrYo%TEza7;&hiFdoz?7&&b624CwPaJTNAXmj$1H%n3m!Go4u4A zCuR)19g1=@$w9d@d+rVNC}W9!Zem?`x6dlSm719z7l}*L&GiNDnbq~iCU1^TAz}WS z*Tx4}%hfgc&K-5E z@M5to(y&I5eIb%~M;KBQ7)gxlO2riCc~NWPGXO<`D8!9p5 z$=IQ>XQn>SXSWRfxn12vjmg^15CWevwtM5BQnpA44>t1IH&(806gKlDmc*3mB#aQE z2^&##8_~SM;6^am2|f(kKgzc;5Mxi2B_1_bad9WNA#F{_z=Fj8>)%mgVuJJBgddY$ zbWZLRTY^I$h9uFr7tfX$4lfeMB*BCppufmW!Ag)6JEG}If?Qk_LEH3P=?%VPbAcL7RD>CrxWBJ4!bYZ9xB??lSSoAFErxF!9(!;%@^`38 z_iI^!(!l8^T+I0Z~W@fjJddxfv*gVFhjORE2OMj_x zwF>Y1amLdqi&|*y@-lWr)x*Q!%a5j@W}r+Q?*t<)q-ThPkClBXS{>s=8ZJ~UO5hz9 zaip6~DoLvbdWR`1TC~wFh&-zCK*e2=AZuEyuX{G$`4>$TQ%|U;hvJ9_i{7(tW!A8% zceM_KRKJ}S$F52mREjNI214nvluNWzQ~LR?&n){76h++#ZA#q)&@9E&=6_`p)X~60 z7}E91hN6uV=bzN~G3De4lcLjc6+i=>CJMJDN&5SK_v6&f)tH3p_9lwW_kQnF0}Q&V zeMMoq&^uva_FRDtaPkGt$IRUfD>0$tD3oPQrP+LK<}e+iOv8n;L)-oi>?x}GqhW66 z0t>V%V;v-5hGImjN$li~864ot)iVB-tbo0jjF~>KkDrg%6uC>B(*lSA+X>oCe<}tY zlg=e{8Cg83lL!kf9--kCy7-$5Dt~eS%Npq*z8jyxIN2xRoek-W`etOC z!fys>WojX~z9#p}X~f{fj$_4Mm6;nVDr73v)qQ_k9=Ky`uC6qeha=T$EUew~is-CT;p_m}YJe+vie#2Vaq%-j3d~6$& zZ>mk597Prm{cixlByoBpYo_`6mWF;c+vbkUGk{aAKYSp`>H=K76z#U^lq=I@hmCki zG1r-|dwSGIiODgivmb~4)#OM$N*X8=Ib&x@1*{329;Vr&C$yxO6d@wh;M1-R>Xa;@ z_@T-kr&q9JH1G@aXF$JgvYc27ls7>G%XWo#1x3m@IHBoC*do!2K+6IcyltN4NYI3uR36(MxhuNF&|q)?z04qjYlx8>@_+*ozz)4b^HBb+_cz zgPOd-P6p(tB1zA&FjF+@{=9-x|JZ{Sk_A^eR=YDHx}KTcFRkyHvSx-kmxmLk!DlJY z@Z`jk+`C==hocXkU7Y3`uPtWdVsCr)a@sZGDRauH`m4IkxXAVPMu`3aF)oA3v$j>uo4Gt>AtGi}ykSMb0HL!HEeMxF5P+)z+o>0T z`JMf?QeAGpi(S9w^{!T3&0$BaK2Ox859lSp?~YDg&1pxkv5(cbr(c3^oFyf@TSe+9 z*7~zL5jK8oho@%yE=bj~e1AnEldIHMjN`J1$AE*WJrb&b2jY!>_5DcH+;Z1Lbnz|R z&j&fS`phm*^1sK`z1ZLq3|EWc`v_tJIFPyWiCS%n+-i4BW!yRF$_9vGP;i|MVPZ5j zp`u%YA33X}65#rr&8&gx9o8q-#?KOQ@0s?fj)<2S8z4y!h@KT32}Q4)KeYn0h&L&ebDad=kE}y z2MSdqVRe{s1+e%cWIz7nuF;T=*=fJTbbA)j^&uY+BNWGR_n+>e*>ai&8-oB-!v=pd znBgSP4Bl){Q(g>+%3GQI9kj!UvQ_S~p~Wc13xHB#t1`ReAW2uQzT2W$(RMes+eYD9 zsDyN$yDA^4Xe~>FrYZkb(yED%lH;WWQK`J6NbA^-boV=DV>*m{O!#}l`T1K5^|0qu zK+>P>RYl{BimK86T z63Ndm-f~A_yBk~z%{*xB?oZjMWN9DXg;tF0EAZ7I&~St4^|?T%3iM#7nD&azXLD$Z z&!?Z>L_PQ(&s|S6fBPP?f1o_$u!dF;D_^VMK6?SH(D?z;^gpgG;g>ylt=b3iMr5hC z2&hmvTQ@T1lgcAk_|8!s_WFt>&?VrOnO4L|`4osldXOj+6=?2GQ=)O3bo!uGPt4P_ z6ji4dRlkcjg;=JjMFBO_QdI*dx29;P?7(q#ZVK%=?2i7^<8Si@HUEu- z_+>RzV>cIQw-9Q#7-@$Hrdx1wd!Xcwy4(M1zIfSm0bVt_YOxGIJghKkbn)a*{^FCQh-5rgkb?w;5g zg|BSvBk-+82GQ)}<|Q+q4e5LPy^jWEtwhmDe6waq)rzx5k;)_(%^&P$633(#!JTp! zsW7xu*=yeQ0-itH8$u0AUc#id+J1=b#T2hcMl7rZu@Q!sVYy- zRDez}%bBw29{^^&)!1x%Zueegi+Be%WsNSHG{+T8&u+t9z7vk#YyW)1E+~!( zU?7<>BSmW?K@$fJJ7P!~!&DyIS|@tdWw8Cl%X4Y@`BHLhG-3GEbYx6Lhpt=m48`%@ z>snztB7UaeHFqVlr{j1+waV%Zw}FvkiZTJp(a~nb3z{)G1f8*~KW){P50MVuwM}uH zxdN>KjSt&T74yi!ACP{hKba7-csVprCZkp|+pv5nscBx|j|{A=^iwj1y_~^1fkxt# zbIS=6I(LyBaOwA?%5m1AvearhepaRjD1DQSS~lh}YIbUGvEkk=@uBvz6?%6ooy-`v zymavdbQ)1;)TvTv9broKiRo&>U13Xyf}%a{pbe1)fdWc zY|hB_M)ETh5uV0t((Ey-Uh}t6J1~AsOy$ayBYt?=cIpPGrTbdN zjPo0~`%EP4EQbj}*la>N=f1GFu=nrct95)n0yty#Yxb+pPMp(@+3fpi@2MYPTQDl- zb=y`j1aHcG#BAmrM-Reae6)c!;$Rw*s4??_BT*01!zC$@E^4Edp*ZUyb~IGlB~lM+ z3pUb7u%q^X3}$J3GGZvDV1lWjU?joW2~4S(`~Y!K_7ZhY7Ur}^Uw*U(8Xc+3v_spV zy~6UfH{tJ?hdHS#TB9f7wI%JW)8uuzCoB_lF}{XvY-gx!eJw`nek{Fk(dffXjsXPm zwaCm|1s0l|$2&EhX;YO%X1wKPCPxt}Z2gWBnD8@<{#jLyLHtAoohMq1LPB8xebFV1 z*%GRaiWEfLQ!-~q&10a|S}MO5DAbNheO6|3wzx-$$0RFt8ah0X$#yNTg%(Qp;Wbil z=B1tBqV0|eyU(BJOHNQy8!wR@J+`48%@>+95Oo1ILnzL>oIjXWP(5L!1eN@w zg+Q?+p?3+VMf#Wyp^vw`IG`Lu7#o#k7PF2q+K1S>sF0)6G+FHhK_AsRL z5|$k^xTR+L`u_VD4CiXdBGnvPlcG~q&a6UNjXZ7xPVXK0R?Sc2S5WhPr+vIc7=$eA zf_n3XYV@!q=s2#UZEc{ASX(Gw{%z& z5EVWq;>h>t=GnWVO5(Id8f$C?$qt3lsklum2ClOtbsHbBq2nxT*CtI)y~3i_m~I41cer$gHMSRF>N;48#iB}5G(es z3?>ivl)}}Fp)fZ@z?^zu=B^78RL6jJ{!Od1ELe?wHUO-qS-p*?@g1UnNxt#jkx3F$ znYBkcG0!Ym&cr!Gxt)LAB-jM()PAP_y_7i8=!0jr99yspsj1+uh9<^em?(b7!jli> zJ|>q(gYNAgxwR+H5_?~vIHb%)u*^E)dYix9hMnsc%Q+Xqc}9UeD}8Ot^_F|%jNsOt zE%Wl?sTpJ`hx%Okn_ZcACdV zV~gVd7jlFQY>iB;l?|M%{u6tYZRC&z5PV0dSnfsrkjMZa%X|U;kRM*PP=J&dj89)rUrjwuF?D`_pN`T2K(C1xU}FN4 zo*Ydil4cEX+hU?L!%`bcjM@O}v>ENu-ki799s&lPuLSb9)vG~2kbt#})9*cawj=eH zyZ4OU_o4ROf|`U9n8o=WxIWFdLf7Uz`>1)xTTH^_I1ERbqG5{SwyHK)f;-OYTC6rh zGsKCgfG}K3qQV8X5gN`GN2Ai+9jJufOMfP}i;lg8b4tVmj5=ms( z8kv!xbP<=68+hX-Ux&(_IIW^0mN$rZR5jl|Fkfu_9xc9<$19XA3#nPVH*7jnb^U=% zZ;R$d{!XWNfV4p7Ia|IT8)8&-=4P#rB;(A@R3Bu*QqdBWf{8bABER7@iaOEkEuB5zlXSH`r!HWp76$=)qdW%`BqRHS{} zRMx-yf)HXeVJo4a1B1=25j_cX`pdN7^&*XsM}A@u4cU=Jy1fDCX)YVjhlRS%%OMaS zKS6f*jo}|EpxIqy7qg?Z;%2V;0x>0tTQF!SCa%6NL>xEo0h6P>Yn~QL&=4e^xGe}p z2QgaEv6((Z1yh+`5sIj-Vy+}}<)BG+<`a{9Ig~>2G)?OHLDsQ@6qNjL-o+s>S=Bl! z_$kBl!x4<UZ=1O+wJ%37t76!&HscXVF1uffM9&gL1Vz+e2l<+Pbfbaxq?X5Z1)b zPDs_`SR75K&dqV0N(${%m0sSH+w^RD=#mbq=H~|yffxq?ON5*u2D;I7le$!_?yuNGL$7K>2rO#@)U0f7 zvD9j|btzwIrd82;pJ~6HHa2Da^Zm2Co7X<+^_uH-({9#l_cjd=&jSTubR+-|VSq`v z4hxttAc9Y;*e-rZm=gs<%h*14P)LXV-F8-s@A`9?yGqm`@=vX|9iwlUUkK)bKeeun zDLsln8|K&$1AVX^qkmYOR@5P3bl9Bsp`CoMFg}WqcEnw{9>Xfq0gpjfntoU~j$JnS zZcsv7`sBc!RPU|5;9#KZi-*>-x*kQCiSd+MMtJ8B)KH!zALH2pGwf_3MSyHIiJ z6c8Fi6qT=17Kx=WHIL@V5D`5JR^c>&V}NlOsV41V5ILQ4vdxPSeKLt&s)~L{qJ%vo zi^^k4QYrfYv2w^#Y00U31O>LloH=9`MW#gED$=FoF3YeRdqL7zAcn%)pLk$*k$Wt?|!q*g$KR&-~f!)mU&pF>&{i_YVT*dq%8!}jY_C%S|;As z%swZyZ4h`fcv!0~DXO!rEvxkE=m3w_cREQm{Xkdg%20B9w9B2Z*TX*w{QcRMw&U&k zUoX_Dew7Fh=@aI@4tym-tj#?+>Km_3je7+Aqm3e0pE~a;ymSa~#11&`L?G9DtZy4n z_@3GB9#gkIb@zJ&W%gld_aXh%{o#>&&uzR8^!N9!0ygQIrtVEXoYZ~P?^MEJx zrH6p`t`Ga*mit}E*CSpF-{Btq#&>F%Z0kEYDn;9SWR{n07#;6k?w;iKnJVs0(|geI zl`ig0)!QucR_5ML=qpU@r>}|YD)rAi@NaTpu$ZKfWpLV3yM4yOUI4VTMdpHyWE??K zxc&lRMC!Pr_v?Cli8O-=zEa6UFtbt#GN_4Y;#9JR_EWK7MC_H>#81f+5{XF*g_Cr~ z0Ej;sEX4+C1>mT)$0Dn659c_H5cR>gVXez6dnhIL2u6#oVLC@unkHw3q ztV>|4sLPGOpS}$Wi1Fj<0C_E+{OjP46IXm#%eww|E$`}Uo8@bpp6PlftJSJkmZteB z<;;~6t9#Im39U_Fo1Q;Fs)WY0)sAqla|Dnx*MA%AMxF*rg}tx+5(?iO1mp{Gpp)o+ESe|&GpuHk8J2_ z??TZ=j)NT^f3EMC_2dcE<(KC+6t@~koGqR1KSo$!hh2n2On0kjY|p;K4GB@kbty9ubxV%8@Cr))BPEUvRoGS9*^=0w$5f*h zgnq>Ig!Hd~>5>0kvHz4UVhBdXHTC^M!VapI`7zb2b1&E~gNQ3e-In1c6v_E@<`i1Q zr?j($Wk{hm3~8C*4{sR?SEqT-I(_q*j(On^>WI=}L%deZMpGcDOC=+1wtWIc`xLyM zwt3pvI9&J^PYu0T{g}X#dkoVIicAUwBxJK;wFHkwB^uqUg%kLuPg91r4So^&u{RG^ zBp|7aAS)jmNDLc;BN72unP>1Xn?=Nt6WkC2FX*2$WQ3-N710f;JW9VlwZ)x=5p?YV zv(bZ{4f$PfL7%x~bY46`gb0)9Q2Ned+%O)Q!Ed@3?9vFHrnAl8(#htCLc+3^_XzIQx zi&>}C7A_YX8sVEMa?|h)QKTH#!O%M8^=^*p{&kur*If|uR3=W<{N}Fa5P~I!hI5%8 z{W2P$6jZqR((ISAK8A|s{>aoA8!fcv&p<7VdQ&~0IRfE^3-&Du<^^nP)hT%w%;^|3 z^&D1tfy_=l7(20~zB?8w<}-|MNj6ha20Ih%MhhycegRkkd;=WB#p0^63vU4=uwf_& zBP87U`JsRLevz{kygfuKviHuY`D0;A`6)s{8_C_Eb*zfP3`Q6 z=&BVuNCsF`z%td#1z+UJF#Eh>V5u_xf zZko)=nICAO2?_etkg-nAaFt2|iC^@n;i5f^~s<7(elY z(it}WFZ{rHy9?%Y1odyqcnXw1&?}_{LgSigt8AY@G0**y$98OQW8O>ko2yu5uq$t@ z3{XWy%J%N;c@vt)2qNCIz8(sr=!b4dP8(pJEqoYwGM0(-bpv+Ri#d|p?Dw}>ZXhLR z_5+TUDb2aDVhI&F)bqduS zWNRCSwa5Uqd2c%`Gw0&a+frC4u+?`FhT5BjYh1OmS7> z-&l^x8)q`6Pg!^yrJ{T-xJIPnFn~#C0&$ZFgKP{nHEG`9s#N>+(qNk-Nu~s!^H*=( zo;#7KSL+ymyVi?iU4DzUqm)_YdqyIsrD6TF9?^V<_zky`jbqz3f{s!edGdi_$|!^I zUSngLxSLxhS>J}P3U;PuaQKb3VtC@J)8Kvm~Pw%V!pmBMtfS za3^I&!!blK3w#TRa-8!*b9b^&KALePUpXZkV<*^4?(a`oWprahBLJr%wa(89> zBGB-{fN7}rZ-{ZM#spGvqUAK%Gw|_eMJQqkO{EYTHP}JLwAfQlXa1cwQ#IJ5PLrJ! z`iF6J9cg=W!cx$N-XBhM z1`>%#WZr3b?Z&yeHxrB6$4(3R(KH*v?bD3hf%Oj1Q>jnTjgHx+V$+bRITAWY9R#d2 z*!>Z+V}J)YqhM!gvO^bPImQ!{j_=Waaszy&_!;2Eup5>Vm5!99WRn(YID}@Jj5CO_ zx7g}|g+4XqHB?yK=NBS}C&9HEv}an3L$Zy=+q;q+Ic5`6f=P3uP7%X!c$kSSt_c=| z1+SG)fEg^y2u`&e1F8rms;bH>)w_lgmm5MorO;<+wG;(n)=^bZx8_XgYIMZEABIsc zLUdJ|gB$e}{Nu8O<1R;HaJ{^*j5Kdmycth4Am>}rR@L9|dhEtS91{r8wHjj2yM$?v z?~Wj5;AY>Fmy8DPCgaJ}9W%J+6DNrzX{iqXLAQ%Katms6`wRSI3%d=;(T8c0_6)mDVwD z))Q$M^~Y7w{9~r7OCM;1yy*!fAexwzyDJ(x64j5HC2p4MIwDDetk7x8tEw@j!|E$y zF-pA0DOrp+t|B>1q$TN!%-g7QG3L6tqh=Nz_AY}_8tMRIKVq?yQE&lZ&F8YuV6oTO8rD4 zb_I}J=$f8S2`c~yV2)nynvZ2sx9i-5t3V$bbs~$e3CYUies=}CT())8BfrVpnI`9% zRb18IDQwC4^2crDVLw&dzi}72(lJ~Gk$(_o%yl`#SO<2mpR@&^$&p= zuSt1~o0EuCIRL<8Jvb=#PkpV9kx{=BKjxCplmt?_ue5QRUHS80@wc>CcqX{w}|C-1i{OC3kM$+9h`wIo*}UCbis{|JSR1+ML4+c3j|g!ho{(MQn$e|i8m z>RyD&>M)s}uFmp~frcdaiu-bQttDmx@0AkjDF*Zll2l`w;n9en>I!x?mcK{mgkXv# zQSey8CJ-G-Am%E*{Dbb)P4ADF+T7Y4n)6K3Bd;aID!>MI_cqBN@?6LFDo8)E6yP$&T(r`6~vpCoIxDyNXsp3f@!P9in8Il0v!TDrTt5 z`=J{?WK8}M{MgRJh=H6UdhDn3jLktULe5QkA91v(ToGW*-pNK8>&;aq_d{PQY7vs% z^)3cz-qIXO!qJJY_xM;WERG7NU{{p%Q0hC)5MdS=jryGyU)@ar*DW~tWphcn3idC1 zIvQ3s@E?h8&5bp!ZS&NjlP{c?FtNbeBXy(g_eSy1 z_(a*e$|$}{bia^&8WQowIjwep%=u0g{Ez4z?Dkqj#k{QS?0fXo*!zH` z4M)gimXq7;4=pC(MWTMOaqVZj`M}GdZKP&XC=yx9#y3z zI8;y1r3pm?YZE3@dhWRFtcs_HZ|#hmos^GGojB>d^2pZ*gnLE|SE`4sLE;_}g+rXv zXy-(NH!psMx|f;H2jNlhovRs_@6`5s7Ftf|M4o!p5P}wS>(Z$1XVSv&qV8;_9*ade z@;#2HJ>-idlhXWrF;UypBiY9+)RoR{mpbLsj$(WhNJ;!)N9$Equ1J(hKU#7>C$I7- zN;IpXzJ2Ywwq@%`^qtQ*>}%ji&XSYCocWu>Lc;P<+vMC}XnFR1DrX{_w}kKNhH@s! zU*Ak_g2R8|!{YR%qB_E|L=-&613L0%Rf^4)Q0HbXa?O;ba(TUdI~a&gf4c13Ga74S zI{Mg1q$o5f4lXm`8lp#!u1Q(b?r(04x=UD@cZ5r{gkPcjxSo$s7H|6hs7Q{kNs>dc z7hb*d%F)=L(Bmz{?U`R~Nq9?_m~M&V`lFHV=y48*3w2R9WE__C)^0M78H=xTYT|CI zl%v-3FeWr-5cLfzt}*x zu60xRK4?j6&vj8qxm(A?O)+;&83`T}SBLCvM;`RgOE{m&ndaQ;>lL3f4S&wa zpMh0ZR#jEjt*RV1xdvf#-mGJh#`%?%^XLDUZhOyXZ;8KE;;#Wi?Jaf$rZnd)4d498=!m189g zfdB|V%z}}Si~Z3{?Q8&gb{=Sabwh1+H9@r(2jSrGdmKXjp;7%|)E^$zA3^g+;wWls zd`F?`d@N9PA+5u85sp!HF^*OBIOq9zXWj&ys9+tZ*4OxANY#^^@spkB$2)bY^L~o6 z-c+YQ4X3MmhSQ&kWvZU#%qw^5*-l;I)N`D5<~sA{VWq0)JN*S%rRr*@U*puZxRB~u zM2khZnDDOykZ#aG2f)Yk_W=++HOeC7rP;YpJx)#ECSkhH}vCve=fW{H=A2IT;y^wzy>go+k^Q1 zU~UcJ)=+K@<6<~>M-&_cPeB)q?0}T?QQeT2KDrz7_vaTdj`-GnRLtTH~e<=pax7x?sHhU_u9BYBwh`VHAJ|!PN!F zF|pK(l5Io|)tb}+hSmw1oNo6gZv%q>rsm%d$1m4bKLE$?hEjS^OjMdeRGPXQra90{ zm`o0o-415mFnza;a~I4g(Xupg6Kyd|>w=m0DVAJ9Xtp6kGN~9{lz&Vgk!r2$+6U-`wWnUXw7&mIIR_d*1b;NpHW3NtvtbsvquA_C5x53pm zoBot5Q_3zV?|^d%a5X)U%WIynIb(Je2}ebB;Xar{n9fa~*9DdKoB3U^pbM(Hpn5OV z5XvmaTG5l8;3=ibtL?u7vOA%uCVgQa9=1@w1As2sUFA&0}g`XHz?h#v0#hIwxGgriSVarZKCOp3V0hX^LX0bLmLWqa(dgEp6G; z5&-w(dI$IcIzEkwkegb06XfKkF1-n|a#LsD1buQ-%Sd{2Q_Hu*qJs3g^g2yyS~o1I zDN0}34JT}au|?_2RAW?8`iZJBuqb`GYGf6quTTxEDE%aAFxn?G+ACwxwmI<{7>L(F z0bWmBzXO`__6X$)pbR$<|MBl8S|U8zV)LYGHDe3Gir!oxN;ZVe%>^VF>8C{2C*D}K zjh?JNB1ZQUoClx}c9U%ECE0l77-eG!-%C2Hm(vr*F^y&LAXy=*_Rez2T%o+sSzmkOsr>G~A?iGTk{x!MF1cF&?0KjQ;}GM+H>m(qB#&tgkMl zhP4+q2%tuWxD}H5Nyc7i7C>631z}m?V-V}B zAV;`inD9W6NQQ|b1Ez|;Fk5(`QshK7Kxjl*ZGpq`X;6x%;~BJ-sl=XV(xzn0QJjTm zJ4aFN@W?RUMVkC*J2^D8mo)k5cCzoZne^ax$N2Azpy=W$Vr0~L4|7mJvTeVjQ@{ct{o#qM)TDV8wGuWhuDY*L2E#Xyymx@wD*?R2OzZyKOh* z@>1;y<@I?rG6+efI@P52^GTRbv()8vJq~AefaP^P24_`u+KsaxgmbEBZ1zD&r=jQC z-dQ#?F)dlV9Wo2j&+CHoJLq{A{DchFPAqj{sbRZ_d*Ff&a=Qxlz=fqoC+@&f6HDC$ z=%Nl_P9raCcwyLRX77WGm(!F>O3iM#)NAtl3%lSl8h$yo-Cgk0ZIH%20%1ScO1+x4Ol`C-CcV;ksC_)x4ADv&D8!X$ ziL1~nuESAc8y1P{@i?&qr;3}gT-<^4#hq9!?#9JpC!Q?sL7%u6o5e1?P&|b9i$nOd zco9DnuZT?Xy6}p>iXq|+F-p8Gio`o&tay(o^}d)PJ`l6T-$j-9NURY5AXPFySgEp8A$h}*+u4-5KQF~FXhh9h@e=abb)rdM zyc91ZUHZJpP%7GBofcN*)Us8%TfBjnlP@UZwBb)3E&Cp6Suz-~Fjw0S^TH~zrifJ{ z>q5nA+e`E!V#*z?25&BL6=mtvAna3M?fGEQew8B*>GeK(Sm6bL1MRk-i88hDA}JhXIyED6k|#fhBk~{vw6~ zLnwg0*2(+~CIPZYrQH$UI7f}q=KL1NoZs5poU@58h&9m#OttDKY+t;O?Tg=ru#NWi zu&40JT^wo-!y5G-jmY~FO$F4E{vNoUj5z`8EYS-L_L#|96PdR`Dm}cT1BPU2#;s(; zvd9nF19z6X?A%Zn+*SCb*R?B4d)QMWOI%s5EbV6KQJ(+RUmO?pprX~b}{`d+it)d_`J#>1XccaikE zWtPzmzupJ;E@$hui;MfXxZmsE0}t%Kz@Q~N*o5V%F)kkC;xSa*U&KR-D2guX1Q*e# zREyq)wyV?=>3co#p1k5|*FK1Y!#)pX9+sD3rM{yS7)_8V0{ zM>4QOy}wQMZLWI=#?bk1B1^f2PUj3rm1n|Oc|J^%KY{7;0^+z!pjuuEtL0_TB!31Q z&p+k1SZg~Ujm(Rdc@>zIJZig4;&G4GM1>UCm19>}qB=3Mv zfp2jeCv_+w zdV|agOUp;FRfQ`q_yjJ)U(s8GqKc7t1I^_q@eW6V+<23cs_3v&@HerJ6P-iwGl-Nk zl(NX#2A(37Sa}djwOl$%U2$LT&E(qXQQSvQ9l;{C(FGNynk+H35;wIcmU_IN^xfUi z)d6l-iMtb0yq<2@(*Z8M#I2Pi*$y;ylESdxQH<*fGj6HH4p6t(qQHA~mV2GH+E|^H zv@Uh zc(@B5sUt8$y?wgi(PcbkKg)HBGnstek~nZb3Z(P!z6deA2BTfM%xk1S#}&A~R`d!f3eETp9wXLAgGpF>^@Ct~bw_H+%T4iGyGm2p+fChH zn&#CGlB&>Dl8iWGfXx|?cS1&KdJm^O?oHo+XBx3qhHwcES=}N<)fr-tD5APZ6m#u} z>nChLiCtksT>^*h(ty7BX}eo(Y@PTMN&par`y~`s3$Huyq)Re^SEk zqQL%lcq`sUVqcC2@pgJd1SqlfxniD)1 z@T4cY;mH!MfNb(p95nX}2hAxQG_$oXB4b>@k=B94!8Vrab}*fhucGPQDzU-S>~Q-> zLuwa?)UKn1)JDRPTDL>$J&{nlIG^HHj*EMTu6k7Hx|?&>oj($77ae=Fou4>bj$4w$ z&hdq;oVIqt=wqDY;t<>AgxD?>V!P}R+hwzYnK;BY6=zT!{iN3&4zWF~bl5pysBRk$ zBjvV{x-%)?4vVjcy)AQp&) zTvPCTvACV;OW;ve@25bJYH_=`OZDv_Ivr+{P}G5@EhUmKgH-KA=&vn@0on>E&`yT2 z+9@zeTLl%`8mQJ9-~`PFt293;u4YnNEu^#paGtgiF45ZH=h|s-t+okn&^E(u+L>^N zb|ERVi=bP(1omr}!xP$8IG|ktuWMJs``RzyOYJ%oS_hiiHcZvFV?S*N4%BYN5!#(t ztdakr?ZP$MeRziU5Z8Af;^C*O_)0aqC-0a|3v>G3&=E3p z3E8>}2I&S2*UhN>{Rju0LFAnMnxb=zLE>KA(02Ou0A4) z1V$tpGkRTNX#9gJCkDHd3_}Woi3FcfDxCDN9g4afJ7G9>!cf}4q}qu%9Xm0mz&^W( zsUY9VF%?GGR2Yt_D2k2so^xWo=i_3%g7n`xw@WYZUC!^L;=iJJt6?C;Ofj~hsJCq} z*ftnp+fWo^8@NXx9NSQ&tbw;Ep+YZWbsPOKw+mh*(`m4RH5>(NChHtHxOSNFLntL?ByQIW!L5&hOnn^m(U((($B{w`cH6$ei5$LFUAJ_ zGTfkFjzRsWxJloN=jcDjt@;&sg-*NCuf&`6tMCr}8oWop7I*6%_@sV4KBM1&FX%Vn zpYWSq{)PdC`b$^N2s-z z{5e74-oG3#E)zd?6mCEKP~{bMe2ui(Ln_RS)d~9?o$!v6Mylo<;*Vy~UOA@x(JP!k z8bTI#qRRM`sJbtVgBhwnTh&qdBmDu;b&>%Bm7;e;U;Sao)gOf+`s0wNKS>9D0OsmX zNAgFxQ3=GJ3|e(WV^v4;N7V@uh+X*b|2l#AUu^%sNFeGj(AIws$@(84U4Mye(w||l z{wj>n|4O|6CY0-M!vg)?|DyzA7e4a;l0f_~DDYn-5cQ9V0-q2CJ|hZzK@|8JhUx#J z!~Y(N_5YBRABGy2_&-S?YW$N|=K{3Sxuxu9f0W{Umh`7x`{2){RR7XrmeqBo%L2od z41HXwQP-9IBA1_!;o}Zri=AtI^(|Eo5M^Xt1EMDD3GOu5Ihk+>Ok$N+cd^@3RiONy^w-i~PyIeM zjXj?N>3nJS*L~2$iBWgKK6ry0L-zpR;TvQ~-|8WZa>`t@h`Qxqx#mEcYc33P&4VJ> z{3wrPzC-CWVtVEH#2o6OFs8VHFlDyhcMRCs4jS#{p;=VCU838bf!~fM-YIou={Krx z?Wp&+)WzGOKZhzA9IC9kk@&^y+5_*F=tJCO8YlADVmmpj-wY#EGRE|pa>&V^`dLmY zrjQNqqsvro^)E5hDNINjA_kG>1khc}pr7kR7~)z1qg^M%7}rXe=voC+T&rQWs|nV) z*1>w$255IR!#S=NxX=}VU$|P~dg||RwMCrs3!$&dFPN|yMyuR}LF#xVK27rCVxl=j z)}hPsE=R*v_>A%{$G}$n4UQ#Imu7yetY6r~wDBWSzF(bl7pvKgOcwf+N`?Vy=x@9& zK`ZT%AK2C3JHh!ZA}#hg3EhXCFg8E@F)P1jWt?q)j~JPqlKxTTLoEI%HrvK1GyK7= z{o!sWOpKg$uUB3tnZPb>R9+zlt;qd*56uFQLu7iL&fu?f25*sWdIt(!@4*Du`%voo zfQ0W;Sm62$7P~%&<*qMbrR!^0?fRC4@jKY;`VR@?VL0Cqu+=c&D#HyOh6lDANpP28 z!GlIJ>@!l}fRPF>7-{gTk*UsRuub)dIr{?tNW#Wn_Pm8J@kdHA=k;=gpC&lx?&jcx zj7D?Z(Hp~}j^5qt=mr1F47MC$*eiV939qWB=@4xre;t(4n4h3pr6%$m*~IV@)6HXfPUGp6(KYlRfDb;Bpq!)bN%$5!x~aZ3#E zy+m5npw7duvi9XgO0)r4T4N7+u7cr2o?%ND~-|t9o5P9Aw)Rgb)~40 z)b~sHC%lag$pe4DKdaA$li>yYi@GsNh39ZNg#kLLw?p`4L9O+vo6Wy+4<(bj~<<*kJK$c@LL<45-Kb_C32^o$*v5=X6yoe^SFTTXTK zlpS!p(_fz2sXoc#XO~QkqM!O$(C7rixC7kA-H>7Ige>D;=x5vqBaHi@z<3ZQ8hfH# zs1j#W{V4M0m@xL6?RW5R4u;n|7%m701P8(S`hVm$rDF|4v(qA@>_p9{tlkIPACnIz z74caod58u40|@HxQbh#qp&ZZ}FMwve2t$oOLcZ||j5GcOQ;oksnejTzG2V=zoDaG9 zE>^%U7R3Yxhw-r~|5Vwn1e$MfACoBKjhdBI3*Zq_QdFqJ=-ruH+<#3AHL?a^0cBo@J$!|%NC5uxgE-A4B6(GifQy}fUG@3e`YMOA7nFL$S z6u82);7T(Ut}!#=S7sL6V)li*O)u;=v*8hQAUt6XhC}8M_^mk zaDEvG!FwyWUA~E(R@sM~D|Aa_kMlNG|xs2qp;ZA4=c>aV2ybQ)|<~noyLa9MmN|SjoIFJk?pN; zt_-qiUwtyr9mP@PVXoT^1LC>rB_i|7kZQgPUh}o66|*BNX5;s9D+2zTR!qQEIq_We zE^*a+N8qaer~?E3H~$jB%8iHhDZ%>e2(S(-SQ<@7hZ6fq8L@@oUn&jjfO%M5uopcD z)rEU8iGR1i>VK$x#Z##5MN2@P{msQ&g$Kb)qmub{Dz(P`6%zM~NI9^dJzgb5XHY;G zml!qw35NM4xXo{fpx+Wfzk~7S4^Uzrh8a}Prn<^4BmC=zay(PmTaHSH3W;lDg_!>_ zyvXkvTsG(1+nR$_oZ6`>=)I|e*i9ACrV7HFs-~XX?iD(l8Vh{CI*ra?TI{CWE->5% zxZNH|aa+*OoeX2$X)w{94%4WfMfH4l-^jVRp-gQmu@4~lUr%(lveb!x>`Np}=}X7hv4esddTtRP#ga0Kzhqa!d#Z=Z&PAka3KI)Dshgzv!m^Lk! z#MhM5I$_cULUh77dY-O+?37Hc3^jH@L8_+cTw?gnI;7 z?vaq`&I7M|Gz@eXz;JgFOm-K;4EH#g?H&&c+!JA;`#4zaE{)P?y|bbM77Lg9{$sc> zgxO0}3Y3EpBP#Ccpu1-rK~(rhxfGHJcjPxd0~Gzp57r)l;~5n8kQgqZGxIQbk%ax! z0tgpF0Q&;`4^T@31PTBE00;nTxkNV%Jjl2oCjbByOaK5N0001EZ*4Dad2?}WFKT3B zV=q&5a%pa7Rdi`=b1q|SVRLh}dkK70)xH1scbC~Rfe@I$kc1r!lY~WN(69&ulwbgr zO+bYq8OUhJgqaEA(yCAFb8B6z1+58D8?97PETAIRzCK)9Y^!#&zAm;_`)qArcUx=z z-*fJr$qdN$_B5*0x)D_0H!nr zaH%x=v0dT;*(962(&CkbS1t<3#nS4PEddluTR@W19)MrAs>f!Zq|`mFF0DSv_@qNM zxB27}pKSNZrE2J9Ub#Gg3Qp$b3U&EJfXjR`AXmy&>TTP@Gb+2xbnKIvA^_o>VMs`CM_d_hg?37}q@%qx3)dlhpJs>?%az!z=R z*X#B_th)B7313pJN4)ZA0B1|HSM~;QuDU-KzzTU>UG}LrZL0Nzx_nv9+Fv9G-gP^!R z*_O`4+A^zRtsQX_U^jfR*4Fu#X5wjqv2MPgXd@q1B#CJ23XE9Yuwqeej0i%2hKbb6d(V%(Nkre)mx#O4L@ zro@(5t6)$bbM_^uL}re_teUt=VAUs^305Qt&0(wk0o)FWfGuEgIo3MQec3nO+nkkLSz!h#zUGcC?eo%$ z;-opWYTf*Xf;@X#;@ej#I;Dl)%0&XZJrm#3&US(jRbZRnv1wC0#i_0Fw#}Iqu9WP^ zw0C6KFBtX_GR|;Cj6|$d@)D{-+PLL-TXTAKLJ?5xeRTPWYdNTS)3QyQ((#NSm?ojb z_UxmtIhKi?kxFhMBhDMahFw=bPZWt)1yvJQ?N>8zYc zPF5u6rBbm=mubN{+)+X$n-ZyXW@)l*bz0f;N&-JrRX{NHYKeF()zs3!h06*IX;5Q? z^M!XWok%J(k1Ui@OfEteZf{Sv5$l2pg_bCU26Lm*@PI9`OE<=sB-%POlM0Jju~_l5 zlN6PY;C7|9s%l;RN6e06TeVuW(~4*4=C;LCRN2gruKLlQwOU!CP_&Ueb;PNt2|3ZO zY)f~vw738WyOZ{(1)I+mqPzL8!-nd~RBfN(`P@9akF_tD~d~J01nZz~~w9+wk^E7p2 z=xm%uYl1$^m*l24wI(m2YbGH@#!JeLNrgn+vzXvp?3m&57MglMD z)9qB-l340u$n>UG*CZ z#WA%(IX}9Z-A%C+cj8IK(;clUOTNVITM}!#)Samwm$i}Rfb5gwPV(LNLggNEzFj|= z>64jYO+A6g+dt9?3)mvMtxSXCZpa_SQLjT)BHN|yyq){qLikeyOaIll%Rhz7F=}s{ zBQh(IRHaoYmnJqW%g+jn9GA1KT{{Uk7G*v0Ankyc6DfVXmO6dv($^VmIp(pXnU4#O z9pM1$T^Mk1Zqhi>1kojtlu4H?~iq zoMtt(y4AJSmfk{GjLw_8G`YN^sl_=c$e%hOdk&Gci9yG9=$a_7TyOY{get>J^6KqL zYJs49PgV#<{WC@xxAOVXgBHX$IfGKEWGX1%mmdW2X?dL&d?tv0!!=&{VNl+X|Khs+ zg~rtXV^rtIFj%-C_sWlg@?-e{Ra&_ERlNPgD?bg&oAR?D?w6m_NTvkkE%^l-qbT@M z{G*=Vrcx%cLjp8F-S>|CQc(F1OUI!6xBMh1@5--&ID}`t^6Q|yC%*~GZ{>f2vOs=E zdhwwAUjE>fKL+Jb@@K`+UxIj1&3IAXCj-kDH!KgzU*&IX&u=($I+s6l{#iln#bbhT zCsJO~r1LdA-76milIPwYfuif;@?ZkDI%wCh^uh5;&5~jH{eE> z)FgEXHL33qD#&tUg$|y1$B|4_``LTY7-Nh*Rv(3Yjygd+?)lv@R=#ZGMYL$Td)=jm zFF&U-kB)a!GPN|O99@8hzJ!(>+sua{RRzOH!4sHOjPS=hPNm0o4gv+I<fs%lV-49WuRl&idmhNtGz+j*aPD(srDLY~l$YBoI3e`)Qrh)NAH#)mT;d z98M1?iEr(QwWjm4_k#R#b3^;F;(}8psH&QGchY~9g13r;>JXdpAQL|p@3T)V|8Fd4 zE-I1Y2Hi7KuhU$0Y*f88or$ZeET)v&q;u#<0pvFn=+d;p$IT}R4etA+YB;?hR6ovn zUXebHQJ+^7w$^^kEcatAHLOsn){w={d?f*IBE2B7S(UrKM7lBV6uU%vWAc(dr0XN2 z6RV@vDxyVA%#d=mZ!y!;B?Mshna00X)jjd;&Jf1fW6M_#i8VL(!)n%JacXgjHDI!B zNi5UUq7WLcT3et1ZO|p%!0fJ;rQCgb9HSr^Dq>|io;x>His?IAwN!zmd`$t<&G{Pl zKy8&{C0Q>#w}7P9eI#AZC)@9{7)E0|E(PGja9oDVA-IB120np+ih^thR3OxMrkuPF z!;ZXh*Yf#OdC&jO=j-yGuP0@OPd?wIKC+>TE#|Mh-pr@T`gM-IUAn4WM8uO8hw z8MpEpbOzuy+|Iinci^+`iN^A2ampGnUT$OBKKcul#tWQSLJdLOANEmO}q^7A5<(@I9&kBRDjWj97=N$~l${TP~0qz8eT(qWpM>5w~I zQySLKHXr747vwzTDeuR%H|#CMwb$j^o8#KspKDvlcu()6AzRT^{Fc;|4tF=y)B78D zH`!I^sa4f(s&#|g8I#)%JO06b6t!pF&D8Mq-W=?@iB1r=MMQovu|Jr&A4AlSC*mg) z>9dILg+%u{;yFY3UBdoPP~kfWk`T|3%l_< z+=suhIvRu?iQqx0MVCy&!!ieZWFhZo;ZZr4^~gFrE?clqZo-%4c0TXKlhTE!H5fmK zf#hW-sdf^+Rai;dm&2>Mb6Vr^2-mutkS-%P-E7%h*_q*GmcK&xd1MBLxUH2~;ItHM z$>Wv!llTL;U)yq#?7{>10_9XJpFKwIAi3u+2R?465aIYfnxYBgiQ5EJ=Qa+kK8!`&EqP zX2!FxT8kGrg$oSi7WZg|hGGD|q!}_WQEx_hhgyn4Z-%W$xqUiNRq(l%$^gI>fOjKD z;ENpIMNhOha#&lb8TCAkiZvnY04nRe)gcdAEjhmnrD1O*WD~E`_G3g3?&ZU@s4wKZ z2Sp*@Ai;*HFYFD`Do5}USMA0uW$#vVH`+PW+AuBZ5Bb$#zaH%8U_S?wV92lN2i%Sx z%nkWe$7$L5Qwq-Ktc_h5684sy&sn@}bf_tUoVXjF9{4rt=P0Wi*@ySfP@ur;6vz*W z`5#e~KSn8jf)L)M!+VQjej9c873ShSBI`F;g5P6>*f?K2h>I6n#E+B&aG4Cm)lz~T zGMI(Z5PVjK;vN}>2PBLyu~K_nD)5wy#B(wlFUS~tQ^w*Isls=pnpJ8oek@b)7Og<3 zw4I!6p^_h``utR9wl$Y_wT~_3uHVHIu1epG+ z4B@+YQloqnzK*A8PhQeKglAmLP9X(F%@Z*XVpJa(bwHBS^8%6whq*HJ>}TECyE$4R zezFQk<{n0#lG){RDl57%B2r28M6Hl@5Tkd&ukK^^(6#pT{>iRLAll15*qo?)wODx8j|g%w>>M;hrcMoU&B{aFpJc5Ky9>=V*uFy#sg>Ju0wpF~Km#CW+HljR!BkZZA8uE%=00c~T|pdi}fbZO$-s z>lL<4-Fg+TQFz~B+v2G2YO#LL73-I^^9PO!UF8uBVpO(5_I^a`ygj&$qOH}URGkMf zLy4F9&0&=a9r7`0@R?z+8L|)J)E+eFk5t37;Qe8L-*A6!c*wI0(~hr>VXit#!dyd< zRLWqEvbWBgRmN#~%BU-(j4v?WWtFj%IRWGzD&t-%qmznYrX#zF*88Z82QXc}fO>h5 zi2Wkg$R1oMkDyr|MN%Ha%@opIOik~Xry2VX;URfOE9o+Nln8^^_o*5m&cSl6E+5w5 zEZyg)`0v+>^D@dhic<(anp51-oZ^n=6n8YIxTD%LTDo<=_JXRVl43}?VoV$9ZoSUf z)*rNQxS*|MpW5d&dA?w-wtE6L7;&Az>5)FmKOv~u5i|0y+5P#rASa-c2@A;YD4;(O zYJa5N|A}z>Ge*e!wEe$fq4Z)2ce~cGae?8%dc&J1w6(6Kug??OH5ypZtt?=!$pPk? z9AK^~XzBmu3ayK@7^QHepQX=JmVP4zSED-EV3Kh%PBEroz7fT8<20OS%*2Jp zEF_FMxZaqLTa9{r-dKb#qXFH<;#@*AF=yV(N#ALitQH-k?#?snBRL%%$?51wPDe*_ zIy#aw>LWR$K2p%AfAsNg?V>u2K8d zhYM$))PSumr@SOEhZz?kG3_=cT{|%_WHA%-@35G3{fg}_74GZTxFLSQ0W5r$S-&1% zQrm@~6}8n^lsH}0UGVTZWJNutXH>REy}Y(F@3(id-zR3&Z$<-piHr1vXi=!>AkN&0 z0imLjDb0NDL0EMy+KEN#KBi<|b4g%>9$2Zf^r@jh$a^0KsaqFHLaZn5hu@0&$wVkn z*+Tk(P|=2HK=0vBg56VK6CwZ30-a>j9|~l8V21*I3Fn>6uVHMX!nVU>T#li}6{s|> z#8~4hOfz;MYJ3WFjekeIaUB|r>k0ZBu*&!hoz5-TVBCsL#_hP+xC3p*UD#^uM8>!q zml^lqYU5rSL?`ZGN_mg58(%cOfW1Z!_8AZ31!E6hHXgxi#-sQl$N$vWhj)x8@E79% z{%#zUV&hOQE?!MXrV`vDrBLR2PE}g2!7sY?Q=QhDtTx`%>90pZgpo3hC@Yws5i&Mu zJcpm_tbYSD{_8m$0Y zWX(|nF;I7Ccp6d>wT57E`L$bS*!sTpx@%{6E2;Z3Zy+|qOO*O&1oSFNH7yzp1znH^ zHAsUBq(KeRrRtsoDF>Eokj^Lzl-YND9z*nZqldIYxdBE9lUC^wE`wDB^g8m|znuVI$)9n3Ml ziv`B_7#Y8hvyC?h*dJk?@ngh|pVCXeiKOusQpPXPVZ4LOjb9R|?-HoLB2a%#puR_- z{+>Yn1A+P%e8YGjuNZ&B4~!28(s%GSozJgL!QV|w4AYiU)2|i2iGaD9&{9BEo@b=1 zdXr`En;NLL4A-DEFpcH(&$J&~PVfJ74b*k4$lhYvY9r2)^cQS-kz(oVfU<+|>}KDw zp!^kn?Luj?lX)wD_rDIML09&cx85GL)xG`psE4`Qp7<=W0H^jn5tj zMc%?F3WR)_+m*lb_49XTF-&tHEA&!?%)ux(%P`s;im7HfrkRzPWsblcb0ij+qp-vr zjkC@1SZ^R|uo`2!|#dB#hppSIYV}uj||1qhIQSQCNNDcMb#O9nu=WH?J|L8(4D$ zMZ?uO-TgGSJuR8;uMnkBQMtitjs`5oLq@7@g_<3Hq2npqQ6$mg>QK-jSQ9FC8d*xW zWM4IAUo~c5b@cRpIppcne;djv(A6k0*PzrqA4AOxP-$L>vE~L$FgGG%HlfCBLDWoO zuGvO?Cy_8yXgAYHncJ}4yo9>G6xW!S;|B8z+-iOTpEIw-m&~iN*W7`9<_&nkya``7 zZ^pOH+qGUlL%H6H+4vu7DTvQ8F8z+JVr-|byY$)CRak-F>$r0b>%Tv+Rire5Ke7eg zI_#!Hui;NR9U6*f@Mj(GDscdR(fS{Y$MC*R1t;JU_bfMxd+}G|$&0zT1Ak-7r?vip zdjvGo{et zTqQUme>bS7B6SKDRLKaVj6O^ad3V8U^}sTf-ER*0m^D;}f?-RYpq6*hJ8(ddR7tW2 zXVxlJFI^K2aM&>QYOtyf2803xUNB0hGCma4SnNW%dR?Yo4+<4k*Km8B;|Ue*A)I=8 zlSbcW&&3dK_Cb1uhu|^42*3F-2AX?_kVjBqK8kVXW0+z-j?>M3SYU}pVNZdL6MB34LgA$L=AMix_ww5%t5z$UEMw`a8uof zMcg$1VKLaUbj#GajEM)uB0UfPJ|MQXZ9lrjqjQ;oxJSGiQ>EA`K8-2A_$A<~Ddrw` z?{?0&wT`^QwV(BNfuAAt>a5W*MCX{ehYG)bqXu4{q(mlQDJmt(s36=9amGc6X z^AfS}4V0NjF~a;N&GlP2&HOeNny=t2^8i>tr@vLY=Nmi`iWa}ofml?MNi{wR#fNgt=8>x*1E>^vFhTKRcW;>zMY8N@vrbTHGUR0ebZ zQ&1&Cm}pyiw`DH4R+E-G8MyIyyUl)7(QoR!Ay1^brj|Bz{+g&w+pLMGkgy*U>U;`- z0rh2bZJkdY-8p+!Uq1-K-WNHO$nD1Hh>9y09B+Ks+b1A>a%YW#WsPQOHx4D%cnq_u zP;O1c2&)<=S(9+8H5v1*sW{U*8B49{IM0eAW}SwMtU9EuS-8ZSjZa#0ah+A4gVcOf zXyN&ovX!|liXbP(8)c{~#v2*O9Z21%t=iPBK^ju!XqT||-6ODt$)fVzC!tvj*^7Ys zwVMm6Eu5!jjx?RGYTYPf`c++V%y+bR^1h>$DZN@}B48~-$ZEh)wkxg1+*fUbi)X); zjm&*38_C>N`*`*9KX>V~^cgZx9I?u4%o=^Je__9nVXe;*=D=LYD0V+YsFoAK6ycHm zqfo?T6k67wWbz+JAsLk;^qBj}aV8O1OyoI!YY)?6mBLVBmE9adZGSHu* za{K@9{`=QIjj;A{|4(rL2Qb)rk{0t6_x>~{uw7$4oBI;OrE&~Sa~WdG-R)qE%I$W% zOmLa}G3BLfWm)8~0hTWL25|P+W)I}H*Htxj9xp#9Shnaj*Z-;z!wvJq$uzfh{ zr4I<(X2^RGr-tpld7qc`*EH)Tn)gvuSuayr-=wm>jXLWUoNm2}#nyMQ#QI+DOGy>R z%SoEeNyLAZPO46!hnuKRQtL2SBHA!d#{j9;zMjlWjcYN>q}JW`GX0&|;LJ%f+1+fv zql2cs{dD`Y{G$VzqG_u6Q{DNU?ooAh#UXoXx%(@Uif)8zL(Y-a${m*IpJu$P%Anc< zsOnonAIn*PpeFxFDEyg7{tLp^`$Y1eF~<5J7YG6v=KfZI3%N|FR>Za4YWE|eg_GoD zmb@nEj+1FxP=58xTZdV*#z_X{k;oBv2|woe)uqk*5#I^h+GETv89%3Febg#BKQ9Sk zF&WVrBV&NKQxZ}(^n7^dF`~%f+F=a0hhv0Yjxly6#@i!MZI8kvdo)h5$6}^E4)yj)SYcP8#g5=&yB43e zr{ZS&6x?Y~$9?uJJZPVeefB&&WuJjVb_1TZ&%$f=68z9!iXYkM;vIVp-nGxi@9Yck zfqfx*?U)4YjWWn?lEL;SDYMU)3cF3l+DRF2r=-SC%Orc7EVQ@F+4kkK+`dvSw*O7G z+B@WO`&#*geLd~sM!DX;Np7-lk$ddhWVd~1Hb0jgG`H!hGLsqDEKz;dSTF1N^qf9c zc_i!CG<&GS%JGI4J;J>txz zwMXEuRo|@k>Q7XAm*{u;LY@ZE?x!`_`BLvXwr%S4R%Hwk?I$9Kt>)PkccYX^O}S%-MsH8=Z;gIG46+ZB^C!vq zAq=#iA?JrNjO`KjS9AGC5#vrau~EPFaJ<A6<%&=d zGwO;^agDCIRUIABb+q45A0oz7tCJGe(Ls(1saGW-|1K1X3OM~m4V>B3s}tTLkmvTLfLfzW`GNN4Zm98t{ryKj7;@2Q8J=#D_{H38Vu zdj^*s(9^rmS@dC*(0?IEJJ3lsNVF5Tg^KUSr+a$eRvdB@C1blVPMs%=%pct9434Y8 z8{EO?v9Gp^<*H{V8gpxN`vLWWvI=`kYSph+ROg2W!d@kz*3~^9?#ZWI>QF9Hls$^F z8hnEqtbTFG(Vy&rT{l4e&}ztD>as>2lP8$8JE%E=sYK1MiJJF_n*X6={VOW%4=~DR zrDlJK2@LTQJqBt#Hcs{UvD8z9b38$;_7tPdGY~0H3AT9#<3>*iw|UC&dCyREdBS+Y zGaOHQD)3cLC0_K5z^k6oc-=D=KlMz&FFYsVm!2y8)>DlSJhcoZlVq4@icIvJBJ(}d zWuYf3t30R51)e&&$TL$?p4qb9Ge@rRoGJHs7D=b)EP24wD35v0ktaOMWWQ&*Ms_#N zz6)o|nZ)h@Mp?)rX;4Rqa!6Ov%4Hss#ZFGd)>%&R!&am79gnRgy7*D8rTTC~wU+66 zdayjCf7;_krF6>Kat`fnl-$F*Te-}!vQyXH0jAM+>Z6Y$OqAR8fk%)szeUc~M{GXz zzjIvIy3|dsOCtv%dmEpIxrRQKd9Cey$F#VV_<3OAku60VQUXO>?zHd&!A&J zw(WzLk$j2zapO8%K}U0myP-MCnJ_c=F#?p(BZo1MwaQ#f!~(|pGcg+tOludj#5)Ts zd0)rPUxDSMaE?Bm%zFL76i2r{EIAz&u6MnPTVEq<**X=AWSthyY{t;@b=D|yfpVI1 z;r|0rO9KQ7000080BX5JH-rtiP-Z{?0I`Jt0384T0Ap`$FKu~qacnPYWMX44RB3Hx zRdi`=E@NzAb93!`cT`o!8t?2qGkbqD!Gnk>Dt1IHX=;oqGyy3RKnSLg4IJPIoP(!m zFuh09V|u^oy+=(#rY_uku0xvB4)nLYa)Ip)6m-g;}jKi*qQnQ#B5e|=`3{luSl z-a`nPV;_-9WAw#T`VxIv{COpnzDi#ce_j`V-VlG@Or>wpw?*wc;?KJ_eJ_=y(f7r} z2dOklKeXvbsU#B-{PVH+^NCGAO(of4;8*EqKtE5VU(heb!&lE?9MVobq=u6 zz;Z>WF*eIfB^9_ZHWt`8Bw0SN@xUekn+U7`*d$<+flUE671%Uj(}B$ZRtRh+up(fy zfE5Fq4QvjuxxnTD+YZ?Fz;*z(Be0!-%?Gvs*g{}C16u@a7hsEl?Fwu+V7mj`16T>L zQeb7k%7Ik?TLP>SSQW5pU`v730ILO72dp00GGGnB_5{`ltO-~%u;sv7fVBeK3s@Vl z6~OiewhypWcSEU@E% ztpm0m*zv$l0Cpm=a<90y_=Z24JTHI|JC6z|I18Hn4MmoeS(dVCMt70N91V zE&_Hjuzvu%1lXm(E(3Nsuq%LF3G6ChR|C5S*tNi}19m;I8-U#i>?UA01G@#-t-x*r zb~~_*z%~Kf4D1eIcLLi2>@Hw;1G@*}g=n0DBhLKY=|5?0H}>07I2|3E0cPUIF$hu-AaS4(ttJZvuM@*xSI~0roDi z_kg_*>;qsQ0{aNq$G|=T_9?K>fPD_^3t(RY`wH0Cz`gRDL0zM!30^kdQ?+knq@Lhl}2EHrs z-GJ{7d=KCyz)OLb0WSw$0elJYO5jz%tAQ^CUIV-qcpdP1;LCtF0N)dMBk(5R&A^uf zZvoy4d@tZ_z*hj@8~8rJ_XWNm@OI$)19yOT0Ph6e1>6t38+Z@!Uf==XD}na`?*~2r zJP14ld=U65;9=kq;8EZ);H!bJ0e%4RA>eC)9|-&);0FUg1o)xA4+DNU@FRd93H&JF zM*}|w__4r`1HKOUdf>+cKLPlOz)u2xGVoJ?p9=gm;2VIS4*U$@X97P9_}ReE0e&v< z^MIcZ`~u(?0>23O#lZgo{1V`o0>2FS<-o51ekJg$fL{sOIgzYh5Iz;6J4Bk-Gm z-wgZ~;I{(54fyTAHv-=Td^7MnfZqvx3-G&u-wpg8;P(Q*5BUAS9{~O!@P~ju4Ezz` zj{<)T_~XEz0RANKr+_~V{2AcS0{4d8DA ze+&5Az~2G>F7Wq&zYqKa;2#422>8dqKLP$J@XvsM4*Uz?UjqLM_}9R{0sbxU?|^>~ z{0HFw0{$cLpMd`i{1@Q=2L3DX-+=!P{14!N0{;sv0+s=m2^Iy5fyKeHz_P&tuu{NE z1uG4#bg(kO8Ua=&SXp3=1j`3jHdv#;$^mOMSh--00V@xzv0#k@D<7=!U`+sPB3K1r zO#*8&SX0273f45Rrh_#DtU|D6f>i|8EU=2fnhn+*u;zj_53KFL+8(SOz}gY4oxqw8 z)&j5=g0(YPi@@3iti@pM3f695?GDx+V3mMX3RW3dl*Sj)g_0BcXM8o_D;s~N22V6}kN3f5j=wSlz)ti8e72dsU;+7GODu=WSb0jmS7 zPO!Sb@`Ke4Ru5RcUP9R$|FU>yS1pb*5P0s0oIXV9R=3WU>yV2v0xns);h4(gLOPuCxCS#SSNvX zGFYd8bt+h=fwcjw)4@6etTVwn3#_xjItQ$C!8#AD^TE0RtP8=q2&{|2`UhB-fORQY zmw|OTSXY2`C0JL1bv0PmfORcc*MW6CST}%mBUm?qbu(DEfORWaw}Ev#SR29G1lDG- z?f~mfu(p787g%?Lbq`qgf^{EQ_k;BSSPz2r5Lgd`^$1vxg7p|!kAw9DSWklW6j)D# z^$b|gg7r_Zo&)Q7uwDS`MX+81>t(QB0qa$;UIXiOu-*XcO|aeq>us>!0qb3`-UI7> zus#6mL$E#q>tnD!0qaw+J_GA>u)YB6OR&BI>ua#S0qa|^z60xfuzmpRUts+R)=yyl z4Aw7T{Tr-b!TJrX-@*C=tUtl}3v2?m0k#P?1)G7*!M4D*!3MBXz)l4_4eWHVGr%4J zb|%>a?~5$v77o)7i{uor^8GuVs3 z-UaN%VDAd{ZeZ^Y_8wrDfL#i98QA4uSAe|)>`L3Nvh8YvMYU zRjgQ6U(sZc%-WUCYG-aN8t9)}=M3&*ko3yBX0L@oMkO?84h;BLgo1u-HBz@|uPbS2 zsIITXv8=^`U?94iL1^L37K5;|P?ulK5D5C~V*?%jaI@3VkBF}})amrMIN^YJc0m^H z4MYr*SKApHm^&~OS=B#xWmiY1oO3x&j&qLa>~(@Yeu1pTRT$)i!r`sULcyTFGa3j5 zcS%@xnbYqNb~)kyfQb>rz`JZ~yW7H6%pBIyAa-{+G=Sr7%`|T!gQSWE%euQG{-{9= zlnRfAWP6B)G@KfeM0udQ8#x*ciLtTqQiG(a?RP08GimyCr)y;_64eb@C-TA|Jp>Hp2|W4gZ%*~7!@-%^#;0;HM?s~mO5&+WNlGCjx}8W=kY!=N1a>W4@!zhay1F`n zSMG!~;NU0|6yA>g-Wv_ztA2&5DG?n5$tk?&_cSzl0|j8ph_Zjf&PAB_HsXh?|MIl+hpt3 zOLz62^@d_NlQj?s#za>u;z!lTg``KZL41zXiUT_RgF+!AwvD{c)^kb`>xq~AFEO$@ zc|}^CY_$xWIL)ORoUkzPXe7QSGm3vkNqY;1f}H`UKknV87bZxfDH;w0dv=+b4B_}u zw@+ydea4uiCJ1-?h4hR7x*ER_WnH8P8Q^qug#D`nj;r%(+U&jm;~aS9I@skuK=>=MrvPe$a2eTR0CX7xP86q8oeYv&7-!(tqj4csWR9)GiWKb-+k?fO z{cf1CqyB+G3|csNf_SQ&NUw@ysZBUUr+-O6#Fq>mNal#9>GVK)kZsqb+qHIGx?OMA z+4iz@yTRTw-EOp-((Pt@dAi+Vx7zkzqHIgISBQpt+jTh9R`SN7?0wSheX*KeNH0R> zB&$QZy`SBlZtrh9=#b+}tql8n(6k-T{ifR;b|>x>L$GakrQ3eHJKgS~2MN44-457o z2Fd?VCYrc7dGqIbu`_M*{jp-H8!dcG({c37i7f{GLWvNYixV1kj{bVi-zwkovx;9kipHp z{(^`_iPpuZV?1gZ{bbz5z-U-YYB8nFbf>QJ_eTQ3K6HvB5g*={RxW9dFS7*Y z9YiNI64B(A&84EIxipC#)se8{M_U?E5(zkSm-@r82%7qUus&HcyaOu4T>4{P9PlWz+LBhl}V#CIkB!l zft&(+j!k?_T5@&R3F;*``+Mb+Pk_T)rj>N}pp^yCC1R6Q*`dbih#`OS5~_xG;}}oG zDl%jTbd{a4XcV8bB|f}$PTi0b9B{(hW=tcRMo45W+4cTGCyD(T?wX>g++8tbUsE_x zQ0oNy96dl;s6RB&5kls9Rl^6dOZ|bBGPmb8KAoLE1ye8TW%!^g?Rfa(vT`|BEBlc|TR40WLoMH5S}_pj*=#e!X;x!A0pFWSB| z)GJJVY+{Sy1EzXgDM=W;%n3W44)z@ruTJWTkYI*Cj3ONqf7n(#kDDX(45gu-kWl_H z@!F)0s3jGSJHaU3Q5s9o84St1b4ih=;I#E8^x<&!* zWq~LLmr?2|Sz&QCT~1u#^S1_)bQ4!xhth~T!W2A?H}r=5!2qTTc?tDNX6-uhTFkO@G@>IG?h)oAl)uft6*xAr&F}$Iq=t)b+E>&FZRiz_)~iaI)nm5o zr+i|0uOl4J*u=UdDb**$zHQVi;wk=0WT`KPoor(?76n`oSAXY+29Y0!|T}A|KK!v4KBcwU6Vf~;#sx?lbSY% z`i4Tfsr!&E%cLOE=Jds)5l>j&V~$HDF>mYqNkmwk=al;Ud%}+J{}YBcN><`INf}zH zKin^DF4wCY-V2(Y2u4i7yo9h-73z=&-qE^tn*q=BR0%zshPs0OAvfUtjhjlZ_`7gd zifL+xBaX6TEB=GrMyXknB86s==X!udi04RNtc?Ofsm8Xwq#K7AzQ*pi>Y$fIDvpriY(o}DijR$$NDkL z8LexRl(3}ViS&tHUN|lZcJ_ua6&IP7TbtA?&N*qDCuu}U6w{ihkdnuXDm0UB2V?1IUAe8CBssMxjroH@z=5z3@0fU-qy^Un zx@N~G_NJLDSK40b4~2W=c_Xo1l5a0r8e#cEFJ)4Ym_9-YYp+V9jnnM`Jl25$u zAhI^<490{($|IO}+^UO3I-RI6MTI9xxy*@SJ{pVYFw)!+!2Az=%4l7aq`ESPUK8l- z)%mobla9R0o6Btb&~*DS`*3k;Eo*8PK3FGZ80SOnC7nVGX-QeLXi;9?oZt`|FyjaY z!qJ#GCShe=b6kH*BG^c}boaTdD}dV7;dF=-e2Ew*%M%+0r-4|P)P8s9=H8gN?;9D< z_(KtYd#Sj7j${2!r;B-3UFw88oUTwLVIOrEzXHL)s+ioz61k76a#b{`qE!|(0`&aQ z(pb>%#1afkhHOWgwRRyPb=t2H!zfvntcr#@MsA-jtwRH(i`v)A6S~Emt z8(HTj3jVNvwUg);%VGh^y6mmR)8g;%4JGiTG~~3mhy!>+*E)=KLV0M3m`8iEk^y1e zUE)~hajzs23wFx)0lcJMwsx0_IsH&rp=v+%CCy^M`sM_gm4ss*PNG+iiE~s)blX$1 zAyurG3`Lx9Ae1?ZY#rxNl)tA-5M7NU75smT^ikq$Y;3HmY~D zr<>-gak~78VFm+cEYRPdxD4ECpeN=eG%61b1cK82=fqFUK@_j7=tRxDG6cuH~k z-xm|@R)}_`%Hmk5G%{LR?&(&!)7j}HSZGO?(5ABXI;1kq92AV{xQ8fX6F5ug9a% zidb0sW$h{P+_qAjHfU+RXK*-jP@HvG>9WRVeU4qe5*=-OgK*)(;kw6DOi1K46*g^3 z^k20OHeD-*mCP)aX6Bg-o+iWvrYEE&C=jRLzcx{DCE~Kyk+%a0zNFJHERmKrO4iFM z<0lmHGA_Q;@>qvFb7+@S8R)>=OxlVU7aK5dYj2RrTRg)KbgdCyot8Fx9BJ+i40H&$ zQMz2sEPZyF^gx*j@jvKHqBRig>J9n(;w@?dJ(!v$US~(-4FN3^u{B*? z?VxAt6w!;7$x!QMXN^v_~1s#iJvu|PCo?lNbfBOK`JaZ`YJq;!Iv zvBc1cdKp-o=p4&J7$AikOw{Zu2Loa^b=8@Xv z;GbYGp5=n^A)B3kG`z&i1I(@l<*6mjMH*%9;yvN&<1@54U9q+C(OLri!GK60^pv%+ z1N;LWA$gnTEm9bEVyYcXz$IvNdUfGmrzfGOuOw%!h36}VA zMOmfvUMdYOs}d21mMs;rt*l1oB%Xh4bi$#iI6H_IHL`haQ*&ah7M@S~Pg+(h$C24& znT!UsY?=J4e7}5qX@;j$&v=MT15p}{67aJfGk4sB&}O=|+((RR%1!ZPT4 z233Xmdnkgv6Z48XXRRarvY3ClTvCf#Qj7fCD*x^!wxV5MZx}OInJBPwb>Jv3X_0%4 zCx_+E>VRxeF2>ADtci(Vsgy4dyMBk3i(H?|Qwc9$-W2CSc`VZF1Vx(85Es=IC9>L! zKwaeXetcLeXeK$SGeLK%0pMM8~p3 z5m%x&8AJ(2wstc^&MM3t#TsNNpcUnbViyTs*e`BD;%*3if0sY3+@UAM`oLhICzR+9 z>zznMq$r~kv$5GuY<5F9Am0^xeV1YiExlws*+k#f)!rNv_a>~OLaJJYbZ^=UtHs+t z`8rUAoO;YQ6RyQe1_t6M-%@`d9E<84uhLoTy&x>dnIoO@)KXC)Cz19wD%z_;Yy4Y9lc9mF4q}*p z;o8JRG6Pw%MDk$CQn|b(OXWjN(^kh@aqR9FSD|!?Oju=?cr`jY&``jDW0C@{m?mBu-r>*en>vDy!6-uJ7#Z49iZ{wTTwg?1Y^)PNJ;v98iT>XK*X9 z(LdC;5>2`4ZO41n2b=-_P`sCT z-Ps&cFRb-BqEDnD^FD|S6D6Qpw)Grf>wv!*B`WcS)%9cRnCuBH`d5? zV<|U`r7F}wk{8uY>OnSGS|Yebm)6O@@x7J@MC=~v9*|Hg@Hjg#7z=whZcZ>DGPn%Q zfO;nu7Ke)(#qb)*a4Ii^SdH>LHI?$OwDy{1TSbeSkoXyhc!|^~O-+vkl3!B7!g`;rQd%4twn%0uUXi>AqS&1h#k@B-zb%9k|Eu4YRYY_+s zqJaTNhMHQ*!rBJOqFQ-$lKF#Chcnfcl*{l}S5g_5Qk^h0VO9c`<726cT2(YAt_RNw zt786$jM{ZlLlf_E>YOzZsTy@#UmdpjFTttRljrdmwy8IzAkxG;5WSUghkSJBu>Oq;k z)HT(}zlr%=x!hNK8G7oz#M_U+%9!+_v~GDqW>bgig(8vRtWMfroiwvLDd76Dt+WXp z%z$_mN$Z6X(t4?c^={zvf>2m!OF(!#TE8UGy<>>z4)qHotCzZ1zpO=YD02J6tv( ztX*Jo>SdCLtf9O-aWAdCfvCSX6pkcnLb^c;aheg&L~9nLflH#sYG40salq(=oKQl>WGC^ zm1J3iRJaCdVhvJRv8YppY9P(7p+3>sHUy%bPC&eSVGYab6D8k(@k-p{u?DxF8bgR6 zBYt1fFKrrT%0K59!a{LKKXisHA(k{ zh02w6RE_wBbIf+1F<3a52t?GcDRiu@6F2)JB+#Z(v6v>IylI~P_lj*b$y}T^Rmw$F zN%=7>WwBIEEu9l>QVpecO5Nd2EfsZcsk*hOZqhljrZyp}#B)N^P)MX7thuDBd8@Pp zwN3nptGOiMK+x=n%t;(+u)UnFxl~0MEL9;F)Vw6YsB8S;o|s5zM8#5BU6W{tOEBbz zx`mTzR>~k%k~J%j(=0tsbAyCbfNO444_nz`b2uh!xw$1#g_gvEPPaTt@a45C)Lk7$vE_eZ5+XYE?Y zyHaw~sDS+GyTo+YivIQzCm=3>bnaEF(hJtA&M98*xy12@Lt=ZaGJ3QwNmP_pNBy>+ zwW{#nD#L%PRD;&0VakRlf06$2wi1=Vw7D15ZIWYH2r;MWq1(hSb6K0pmDhYGi2 zh1;>BMm;vVkJ1v9$+roAkoz|uSZ(!#>SY}({hg@PIo_|yoA#{renX6>=fC~fM|=?C zk1mfSe5OSUXRa{FWQ6NO8jXKJvLqB1VDpfC3z7Vp1#TaERtLr5P#iIf3b*z7&&+Lq zab-vRQTHWlVbb?EEx5EEaVg3Qt7leY;~w4ES2#2Io176_BXVC$Q4s@?Ciy$?=C#Y4 z%j9#J{581y%nFx^nF6d7lw!X1Jdcf#8r66dH#^fNyB3@w(;cijsJ~dToWViAaQVgm)#oYRw2n;Wobq8LqZMAJrERzE1h+&ejUL>o!*Rx9c6Q-|EA-VH;=IMf{L; z_&VfB!hpmjjJPp4U|Dx{PY`nfVcQ0o@!zck#hns~bwpe)j4u3}?_w;}?H=)?w2ZAj z+#L3~kh0&cC@t z55d2d1ZUGj@o&0nKo6sbW0^vaphv3C#%+X?OvG*}dW76qw2_$SkmIqS=aQrH*k-~O z*?IQtjfCgfS(zJ&g+&$?`_G3wE^1TqQeP;~bJ#{0PYr z6|;(GZzdx|C9dhF**AGRZ6u?RTRRX&cO*W#faKAIWFlQe=F!Du0o|4CN_Qvqw1h0D zrKFvflQ69y2h&P&G+jzgp|xZKtt02sdU7FcAlK7oauaQnTss>%lSkIlqv+AZCi6%q zJ%%1jfGi;U(BlwGA@!t!u0t%9EGN6s^+=_WcCsTqo}Pd_KZQ_wB0Y(WAlD;xGE%nS zG(Cl$N{FOR!%+-LZ9vMD)alrcO6m+0I+N6yNO4J>MbAdb3JIR$O7Kosg14arZ&nig zzazR#DY~o#(M?9tO%N4YbXo42Ms6g&t!3Cka!`h=P=;ZWMx!Xl7^?dkG81<`kFF*2 zQQa%CWj#t}FVx~bdIVWbk0OU4&)3m)prHHz2pp_T=dE$#ES@?_7Ew%JB-4PR~b5$niE$j<v2ZS(?cMveGr3QIwUT=@CU)BV5`QF)zwvVsN1kqxtoV?1bk$`(E5oE{PD~ zIu0jC%2Ek!2^on(yAXwT5i;fqGLl|Na_KcBpI%3%)9X=iH;_g2CbERyOd9DeWIuW< zSxIjv5xSWS(L2cDSgxaYNFnVg8FQ*+C6Uwym#L@Hi|Idb4I{~6^b({fu4XO06e)%( zav8ncWgwtfQiVGxUSy3uhvd$Bl%)GcZzj2@?X|eoF|!s~dARK{dDi$G#=3GirF0|7 zOIctGcv@KZqtB57`ZAeIUnSeqH^|QP9kQ6diHh|$siN=6-R^@*w;PK83glRdSTnr} z6@p0WYIom_^cq*08tJvDl2lUHA;lzhJyIOeW%LGYXW3(NSF9gXG}69>GHf74#EOK3*p+0&BCE(1 z5R>78VMGuDx|cjm9vdd0kCDZnpzrvS>_NXGtLXRSK>7o@j{br^{x@^s_=hmSCS029eY)$aq6iw<2Xq>NY8$d&vZPJBomzUJ(?N zK{uf=HlwO56+IV4f$Jjc(U!*)yIPoI<=8oB!FhCkD(Y=Xv2@7Au0KvoR%7fub|aZJ zOSYTkwnI0ZlioEyHDy7Xs9%sKSd~%ivMNow=d_&EqaEReGx9QWQiKoA5S-hWbdqk5 zbM+(}mp+0pmQ8Y44jIF8Nj@7xX0dT(F3Tqi*#xqf6_9c^nKZGfWCfc+_GLw+lg%OB zY!>Ndv&kwpj~vFfBge8GBsVW1S!5O(#4*ydHlfJ~Z<|hfT@Ggmo_Hp(-ZO#qo(Zh? zOklld0_$B95R{OKB`F~jTT*vQFE6MqNTrZ582Q&rFTXG5MR%c`(#T<`A$Oyv&cK!2 zL+^Fv^gNC)M*A1~Vs40NR$No$!x%Pa@i_A$GT&9`y5b^=1~eB{x3$jt}Yi=Ri7u`X2Fv)#n$GYN2$+@?Xois4Ne)c0|-RyhV#Uyn$-M;Qha*&w8 zw_p=lxQOKm-JjH&$9y}x z3z7%fAbFatA}_Hpc?ao_Sd4tn)=JH(LRn5Ev*>;Fe$<0UFt2++%KRu2qz@v-P>0sj zhlDE@@}iHRLnavQ-=~jBD{Ung(8m!oQO-}$C*73!8Eh>ys70_j3pSCG`mtH5mmv3j zrGhWB(Y_|P&i0jwhjClgj7zA=->N2G)*u_>9GovSn;l6~+0i769fO=(N5-@DWGXuW zxpyLR?-a6tol16N8_=FkCpGLWvL`!7?z~8?kUoX`Ad-68^*b$6vvEhHmOg_#pakf% z`Z%z|zf|U5yjD7mTS@sAQi0041Qoc_SGAE;w-))9YNEzhtB5*Zy&{%rqCpdT`Wh9{ zlCqG6UX~bP{fJ8lN52XCQk94s)*Axu|X53YvK&w znTj||6KDI*QN+2LIL~*!A};VLkxJ?tc`!*_KlSVdc;tt=PirC`2OA&W#;vV0< zinvb`_xm1D#Dki6$oH@!9?`_3zQ+{txF(+PJ*kMNH1V|W8AUv+iGTW@Q^fO{c)|Cg zB3{zO%f43>@v0_X^S!Q!H#G64u6oP&wj$oq#Jj%t6!E?$KJb00h>tY!vF{T_e5#4h ze4i`g3r&3K`$`dCYvLQ& zh`(GS+aTG7;gV*Yq}c{@NggMyY{Pa*h?6PVMygAu#mV$+Bf}*}#L3KTBg-X6#z|kc zk?oSBvW*;<933ZfvyCw>nHML=W*g&NGC$iG?~)VZFz$GVX60Kphi%s^ZDIPV| zr8XPWZYA4$J~-Q$&h92Vwjp0;G`UR+laQGjDbmO+?jpraZ7kcEt?@ZoDQ?AFtnhU- zwIQ45HMJp!w`*#%k-1H6$l~pr+OjM$Tw4}mJ79s}j(U)t)O5an4a|3euQae=IIwUy zu(R#1W073oF1Qe^6zf>5o9qg1lig&KMRKj!&=L*pgoe8_uc3?Vk%W}|&*v-Eoys&) zo`h8BH7$|DRLV6~$#JUXqL%8GH7=)pt+HjUY`H|XES4=RC8w(tr>hmGmnu%z=|SrC z0+wl{Aqm+t32D^AZ<13tYkWE1ilHqUZ~Ys5uPn{9Hd&D>_pn0lVQ;yIedHeYReRV^ z_iO*(?6<$(iKCH@B&0KIVuAu^8(l(>9dc;D9J(8a_O+{#dlXmaDXyY|XQfCD&q`G) zo~BeBT}Ce!8QDevixEoU(PON{A}ibI!vdW~KNjdP2C&E$#?Y39J|l=lPPP%k0^PBZ38bj3^f4vW*xP`BE}j9PbstGh0HpH%zU>hk)5DKCIpeTIb>=ist@>vY3&|J#P=WvQ0F%Vop!Wy1?(!wcm`FOqtHvC_`P zYO5ZD|DjiSiAF9>6o@Y@RNYgI%k<6{%elN!F4v=6p^+HsqYstr|%p!+vDC>PvS?^PNOHXIbaJTe~7tyezjP34nn)vn$WyYkhlO}(u)^^V%qyJ}PKsZAZPT+;hkU>frQ76sYH zhge`H^AQ%4eYnT0DcQ!ySWL|}KEYyIw(%(z)3c4wG)q3uD*S()C0{6(2+qt%;LMlW zB0Q`4ItlqkBadk0Ta9ei$aii^^_T{}*G+!V$iI@1AGI$~k@+W$|NJ-jFP@KhVVLWd zVa}Gp9b|CNQqet2h4(BszNd)zE_{UNn*Z&t+w(nTCBHRmv; zIe$pa5xyf``i>0cJ4Ptqk*Rz~mhv5_IDaa|xlbw1{Yr5jkpAI(r8j>my(v--;z6Z2 zw=2bYNGXo+C;8H!jF?%tN02eo%gY})N*x#O6&Mu2%S$VF0gn^cXYX(U}E z8Csv-60=unc!Y+}m)dlJ#xwN*I;Sy5CLunJcv~Fhj%MbF(c<`Mt+ZyYtjH0YH^+$0 zn|X5c#d7nrrSIud3Us8>*{hY#9-~x9r!eMNJ=HilV!p=5YwkR#kqKEN72kgw&i8xd z)c4A%|CD?;C(60a0y(!iNzGlP<`(*urZg%&+nlTvxKApuIYlb4IaMmKIZe+!T_-Bf zB^m2Ga`GJAaz<9}R!yImOIZ9{lQhU8y?e!j|Gxw^!{;BqQpVFC$N*)DjualJ1 zQ+t(~m!mXqv^o>zDg_*qZ7xt=uTOeCsfXi~9_9;=CBmh-Q29MiD|gnO=)bXusk+x9 z%^`j5VD93^3C|5K9uDlPU4%aNo4Y3=duWN2NIsWpyiB(&*GNSYvP2`58mUS`s+s30 zTx6+6YBW--5q;1%y@P&%MwSgjd@Z_DgKnZv{$`^_nl$2``F*3cotw+$c3Xs6T`rk_ zzGVIdlKB@Z=C>+$w3l*6ZPFc?E0k)TAXN*elJ014Wk&lbceJl^NBb$&YFDbYzfvtn znNf!_qfTW;rOJ%D^t%07`lOTLo$9lV@p7HrVx6Wu)*qwW_arf}SF=kWgv@|OHfdyK zQk%Xcq~F!4&owZhrwVE$l!OdwzndjAyjd>(FyW^{lE*qjGgs-JVU0wRkf_$rm>A1j z#_HkgTI1fam7Wxb&~_tP`-U+i((BQv~AeEA@J$T2=fpvljmi_LK#I5 z)wPG|m3yo^LL*+ABa@J$l8~d_X#*NKW;k%H?xQcJ%;UTO-;#9DK1{Ow5}__38Q=Gj z&N3>U<+Vzsi)CQ&Ho8u0!S5Pb&l9W$M{wce^_^Z=a^wU#?I}Xgk4YsxQ5w^!%9u`) z^WLRw>0~{`DemsB)xfEG@;f!+-d*?}*1(1&Cv$oda)xI?uSu4?FQv6WD#TRDl89Jb z+$*1{hd4_kXS?%m)WA8zfpdog=W)GM!H@Gbe1RVOLXBLMgj}42==%>--+!2wYGl4f zF4M^68o6S)+Fm*QqQ|^SciLAYSL-&fXyh7=cq!7gx>t!tuG7f%8o40}xiJa3N$b*y zLYMB+@Xfm6EgHF1Be!Yfb}iF~B!4$bnR@PQbJCLU$Vykt_)$!Csce3yP*3IS|B@Q8 zMI}rRDPO-)>E|YyMf@OLy*#m`i4%)E>|Ou=EWhouym_~)|L;lpczSz}zVI~fl?;1M zGAu_(A}slJif~V>m7mB~g4kE_>nY`-yaU<&TF6^8@<0;upjMoRH1e?bnn$J1FUkeH zA|>{kT){divGDUdZ9~W1x~CIuEq)zr zKBGr@RwMsRLY~tvE%b#d?)D`2&6wNddEMy+jlAeCrb_mCORnZ6UHP(Z?jf(Z&gy0j zygD3sZ8-3{3q&>Wh91?6DQ|3@V{j%>v&WO{#w?qNsGPfzFjNiw;76ia!P|QZjWgMXST83 z&DY$fkGeY#ys_Q&sSYt>eEWL13u{CC%f7s=9~{u{q|oon&ptx#^G$roG0#r<^e%W` zY+q&yT%9(L(%2D%sd;wEN;7jQR(^Fnx#iaS=aPM^v)q8aJc-(;P4rZD{Fvo7LG*!(-~$%dcdvSfM`Y@R0{WGnFq zrMbUU7_AG9(#rS!0Yi$1#LM#$mB_yMp<{xWhIYSDb{r<{ONHnjbi&b4f7=^Ua&Ab; z6#!F;ctolmkSrZ56>n}rwYCV>tu3ti&Pc#QNr$^87GF78RPE_xNzS?E)GAM=@+h7y zA(mne0yE;U^0wz?ZiqPGR@${(N_gQghxAFq*4kl~PuU7LoWR+m$X!y_nV-q=uB)Qh zOtY%li{KMa;QO2kjCbU?C<>2UP;)JpKK~7J@1;V5`egR3nI*S;Fs5RkvX|WTArW;B zLRm&c`HgBi=#Y-`t%c6@w8Bh_bz^f*dYwm?RIFEXKXJoXx7eR@(7$}p&(af(%Ua}b zF8EweRq>Szo?Dqn><%g<^See9hyDxK=jBeBH#a$CT2|=f+_Sa3?4xbG3$B#=jP1iM zn*CzrSPw+z`Y(|uLC`I%={aNUfMtD16NL6Q$82*hBzCTWx=4SHMk*sHR{ z9oEAyzM=9T?6lYj9{i&n!X&%kv9qxjo+wK9>_Hk2>>j1uwQ^_`-uXw|NYkTWQs=t3rY9HDIf|Jqp;K}9DeB&FFmacA zSHtGXxegp*fAi(t?y1wMcCt8bnMJxU-Y*SaQsH|lALrRqU;3-lo*TRBy$R7xNVlK+ zX_9MJ38Ru6Gr1IK zr6g=e)M^4-NrIT@^}zDtlgX0cKAs0uUXe+1WS^zj89go;>j-?p z$(HEvh_7KGpzs}iEZOr2hQlIED!507#^z5HJfd%!{E5OQo)p2ECNe`wYKD=#aw2CE z3&7>q~%DaCpVw@0c|#gXA6UYI$R>N#o`H%=l4J`FD^iWo&a5udP4MhERfKJ z84$87Pgg3RFm(nCbow9%1o?^7mFOo|pUnZS#Ku`^LUpEmfLv^GI&)=7xa&4fB-!$I zMqSC-n&^PgYe_p(>T%newneX&j4M&etHJ?$?rCqCA`*z0)4Bqd<<%T5o-AY zNiInrB3mPU%y{Ma+IN5HYxpPCU(r0Y@@D!NuO;1HDNn?|lmaRKxIHxg{rx`T7yh~R zmH7#i31qJz^&cz@11-lP*Rh&U8Hz=w#EqFwnToARksTdR8H3lK#1(U!R3EKK>5Iu( zz8AB*ASR)2UBOECYGh=5#wh;v3~lUmkv*ESTpwF$2^fuO;f=|(496O=EXQhIs$)JW z<29L<_TE^hyS6qCe?l=f^h$1Y?%dNzX`I(!DjKzzeZs}hw2qmbb`?`U@eJdC^eX0l zBq*kM%onpi`6Kr0QN5Uc${fz*J=S5>iX_Rk1{vS8%yE0XI>wdcmSr{GXOd&r9EakM z7-kji=KjQ6Jb8&nF9)?e$qtV6oEP6P;`S%ZJ zr?Ki{{ubR_AMQub+sLE10PxXlz!t9kaT>1uX&crp@CE1gq>goWig&<+|5fNHcpEns z(fO90Z_;<*&0{*@ekP+j_IAvM(GTmf<-VTr7K=abefEtq9*6%lmdS4-+wPOwzVP09 z_iOal)9@(1yEumbah6$f*R?G1wMO!hk4RD^ON$V=$<_zdTh`9 zhKp#8CbuJZgQ0QKCZ}V-Ces73!R43?SQ{RjX$z8Z-U}L)Ur~?%MZjZr^8Z zuHT1k?%PLnHc$%0&T8r5Wv>glfXe2ZQFzr>G$=h@TY zW&CD*Jbzgq6VLOr&3TM_S&m>IQ?dOs>M_i+>e1zx^y#+;e2NQtUvQEaBn`h+B3Gp=c~%pYIZ4kt1*Xa2D7-X96-m-LY1jkY32{=ccE-Z|cvb1~nXQ|_r9Yuv(^uEgat2qXI zCG&;LL-^{6?O=XE{%=4*6fvV>7%d10zybv1p9m0$vAr$5t*5i24ZW3#kuklhgNdPw zp^=TLlBu(+jf=9W%YRS>wcgMMDxxTEs;}9Z?8%VOs6tQ&5JVvk#vu-22?D>MB{+Z@ z1`^~9Toc37KO;QocQNZAAyP$onqY`4ej=fZg3di_+&cHD?L7DH2!B`k*~iI{lYV~R zF4WImT+~-rS5;HYeZI^WgD~jqUI=l20Yz}XrYGogJ|`#oINuQ|zK?eRbHgyMyTZx;fhf76Os7g6g|MgFIVGJ2foB&emPOfg zi@HT!Emd;fF?|e9@mBNK3{-6zwXo82#78m5L*7wBtaO?ZGa&$l{75kij+|W z=)e@yg?Ji8QGap5utE3b@xCpCBgp!=Z@AH;SZ7bJ{b_`4q&Q@(iWU=t=FoyQ_k#RsF2pCrI5s zG!3ZENL@i_90gw?jz%S$BQA*6n$0^$aU~x2sWT}P?yOiF z(bBD18u8L)IXk4$wV5B;=;RQ`JiR#N(aoukhIMf)r288G$;R{?&Ed|->>Wu*w=!bd z-897s2uh~LzN_}wQFnHNU$Zret3P)Aj&xqTr!sR=8lHI0+3x?R&f(AO4v@r*m9co_iY5zxhBmuj9ukzV6S+AZ=wTka zIo|M<0k$Y#BK`p00$|;uAw56!^1^|YnH1||4~eDGe>*t}qQhMr6EeLsx_AaBio1Ek zlZK5C9cS@RfY7=;mC+ zMZUujf5(mTtnVmbj`LN1_HVSazQc|5tnUb*p7Ry{wD%auP3JcUAmn&Y6g{Aj^E)y9 zJLuZyl|lCHc(DS|OPfc2yDg-A>)5lJChMeZQ=>#_;-l*82%ap>S96`m4uk z`~7Bly6S1o>$*GnkU#;feOV2ONLsqm^Rt2$a@UWg2R^>}ntM{iYSDqF|2pfLDK8N;Hdyj;6m;HrCIs51p6o^w*Q~RjueSu@c6<%`Z|k3=-0qv1P# zN~m}U%fy^%zPfa!%4cutCwpA^9GKAV#J5EGsDf&FB%`Wa<3U1j(XHybyN`1+W_pY+ zJRvxzr6u62i%;vQXMitsv519qTEn%YJ<#l`#4}s@@8kG{|2*BUm6xf!{ILRIb@^9? zs!gqL98-&VCqy4qUb<1<1V~N-G@Z#pkLN1X5Jvp~V@1`P5HukPqY;^h0ZSbgbBe4V z)mGE*nbcOT7K`aQMD>$<;(IC;F-a?3m!HCq^D<@&{h0W&_^wr$q~)A zTt$MV)1iHoV%>I z2}Q8oanX{h{y_L~QBiR41%glPjXo!ERnpGL?h3uK_TkCg)jk3lc%q43f{JPM)*KZ+ zpPArFqpu;ubW}-v@caHJG(qOb5=HHU8u&%GXfIctbmiT$ipO6OnQNrE6qUwNZAXZe zX?TUoXe!OE)5kwT@KCuw3R%;zGMKW8s9>gDGgZ%uQ}Yg5Lo__rNJ>Tw2sYrK5o4mD2EdPh^t0 z%0_eUGxPSdl;mljFK=|^Pjg8P?MnRTQD%SzO0kU8a#az!Hq&UUP||^w&UTM0Di0sJ z=qCr|kCN-l%j%DCD%Y(oRz%O(CQT=>F&YY}HTAXd^BZ+EF)k57tD(=0~6r2kup*<4{uGZW%Tkn zOz=LbCfsRqQFT$$Rtt{v-#nPx>43h)sV1OG_uMPvj2sJ#1{y7Qj}21LFg~p}Yvx3n zn5D*Q0%}uDu6lJ7B_29F3_TZMLdDk#c4;vcilU)Y_cD0bL0l*mK2<9aKtmSzPqA2` zpd&1W>}Ym>-Mafy1$ATMvm)vY2rCz@iin^;Ke^#6*c^SLo}Y5juay+3;hkoqhAw_O zLKR|XTiKSPAxQ(Zyg1p4lVtF*yz05OsP{02S%FAZE%oOL@n>qBcG2>0TfO<_EULxg z(>xpFDtpP5n!XM}mhXG`5RTNLrh0^!%fyO?N32ENe4i^Fo>`Se2#TT6jX6 zBndv0G)CrJ6w^XDrRm2XkJFWw4!P+z9rm>KQCb!<6jpa(Q6zM+(N*Qts)H!9;MJ9j zHcY8(=!=#rz_Zo_ayIB;b0^W3rtw=M+XXTS6cz4RIR)JxwC$7P73LT7ez2EUkOm z&0Hb{aIyy3TY3Fpo>}(KF81J*hW>EED|z!-$O{;)`a3A>`1YG3Cff&=*gXs=bk&Q5 z8lqz4)8JER>Y2OCR4W;HYat8`Gw0edwZeDkoL=gJ?E{c-D)!SOkMo-+Z|f%F-o(f z5+Ya2(ctaWR&V}Ic2>*L3NC4kY7@NmliM$-2H}||ZeW_ldsWv8o>K!R*$Ld!(@1C1 z_@4)j&~rj$xp~B&TN2rNq0<5rst=D9R$3{-7XlSG2NKG&x?6AVQ7gPw0M&r4P`eXPtL%LTGK2kr9!Y@{8Ab+}|1>L&s{(Za8KWb1Ix?p^ z?$Znm$<93-=VQ7b&UPT~nPJJ9%UHt1aSjrO5|Mg8#*FgHCGxl;q~8;$XpCKAG~M3|KMtbpV92pby-6HFrsx(+== zJ3LL+n$-qF4u|xqZ%MkQT89WEsOs@jI=q_+I~h8iS8`&2727c6%&P?Kuqz^F{HF52 zbO(Fk7bX+?ljis<>v2Dc?9{A%xs!yy@SFk&EI`Q)HpU+mxK2o@I5f?0oF%oYr%6rm z{L#~5ZA9Tk?DrYUDC+U5>4_M8S~m20_ggGX17)#?@RN){2E5aRA=FoF+kHS(;ZIv* zIG*y_wnhj*2dOLxP(nD)C`SCqE4*ZffLb2mHb#rb((2aAK9|TDdoktB*>qgF0g+ZH z?#QH@=<&{3SgyY{EN6UzbX!WikHmdwIEmY=J5ZA5$amovuX_>^#S|qRPNFPThH_Iu zi;bwJpCwVQUNuWk!+3(SX>VX|19LsaRKFCT)}=>#7g=v9wo?|(zDXw$tR!CpqLHV(*D=4n%~Un zvX(DmIu-<2dOXE+LjQYv)@5OKz(a>UVtO3Hp(#M5LW(kuJ{uPGZu@{g*n5Rh3l5*fy$JnJm6dHbt9 z)Py&hwzW37h6{Cf46YlmULxk8V|e8VmEL4|ob5s!y93^y+2jWi-CPo`27lgl!YS5+ z&WSgb{j8@?3ThmI?fFw8gxx4lh+gfAtfOnK{tiS>D#Y%jxww9#lrAVlvI)G~_#?b$ zVE252KTvmbHp`G?*RtS;tFRs^J=+}u)ugmTxv-wqKEk%;_*BP`uZ}P04Wk1)*#nFX zn*%-BgA|X!zMmA(38OgN(^UPy7=qvsNV|QJppN^11Bk4_ls;&EYYCKBB>oPW!+pae zd*Je!=*Of?TxBNW*Uy2o(mDg}&vs|&n!Xo`H_iOI)$W26uy73_#i^&yGgQUQ$g z&uLKa#OPza(Mtho-(myxkJwAjo0|V*(Ifi49~auYu?h9L8TSKIhQ(QnW$U6OM9_(f zXDq0ppRMdI?4lhw03OhX2WAG!qR3R7S!lmn(IdTHZ0SMz)h#-mS7u7J|7FOg3?l-v zGA+f{MFQd21s+a5XBQV>E|N~wcOC36Xv8uX z8UCAQ3Z>Nd9Ahv&BfY^2t~LvpF{6r-3t5cK9k8P7@%ly(iyr?_l`KfIss~u~_+vFh zv~}9|MEfypxHCxFGAfvbCBj&En5pYX&0VgwonPeJbtMW0g0{5bQ=D03)|bLmAS*Db zKRL)cWj3g$8`k$ZD8~_-3>MSSJ$yL+ZgHg`TdF2p_YD zNJvB$b~HQvoU@n|`C~^6oMHwtI7g^_eR%0wKl#GxH8gam=8z(Z*=(b0i)Vcpi1x_t zrD53Ld|ei6iwT_{oKa_&1Kp?PTAsiKZ-a33L%l?e6XQlNx!ZlLNDVb|1ssSuE_$;Z z)^`WyY)+1Z)HryWU9=9h%b2lND090nd(fYW>^Yj!CmT;Cpw@hLl^4`@jYRiKiRXra^DIvC9r#>#heX+GrRjC9(ik--6l#Z_!IkpyJQp4dB+QlTC}6YB3~ z5kV?+38#5Da){1<5~>tQm*+Xn*mLzdm#|IGGgf08YQ1c>JJ@AK&%&G>bpsl#Kv3SHHB#$r1x4jpLV+ZtJkQjf6Hy}X{{aX{gew#(PLtG(9W z*$Dr4gWFIzCVjd1di744^pflneXDWS82^Q!)-6B1Ge8FOTF(4ANyIHSPRKVmJw1CI ztF>_M94>S2x6C-M)qNYV>S0ACi>4JhnvUGjpxbEIzmwdn)v!IhYovGWj+2ehS|M6DG@~MMN*FQN4`|rBV}1`M|D%%Gm%l;qf_g_RbFYYR?RnCac{m@s&#Uo zR@fs@<6Qc9X&HTPn(S$e|9EMg{9E(#rREt>Ck|GBrDQ*@yyReg9E3hGzx!^ORe{~q(kqQ&I zghnQSDi^Q=hd?qAG#P$`4bWi0n>xUxC|@dBX(EU=pqL3moe1!nA%`{^81p$onf<8P zR+t7=0T`wvQ?cWTYy1^E{M~S5F=@SgiQIa@xLV~8%6(TyJ4KMiOd~wia2=fTO+Pg| z>xb0I5}X~S_%o^iwlrNBg(yJ?s$>Dj8wt$UBKHS$AW=xagOC9n5knkOh6t1l$xkyR zFfs@5=}_v*6RXfcljK_{m?@6&dIgP9Mt>wKcbGV34;p0;3#u`Xb)&npu{mfAf+tmy z>y6Amzg*2joV$v;J}?>pd}i!>{E&^ zo9vjO*a})n2`O3Lm*|y)+P4T>S%oa~;0*P2F6p@z*Gk!!&=&Vdmv=9~?G!I}QBr<{ zSolc&dBMKkI!!?Mj>@d`uFhof^J+AsYRZsnG@D!(VroJ35;1qE_I=M=B(x06KePEn z5#}WWeYP~bXrpUkmJ~U2EXt9zxEVm9NlmU?e*7&-;+s{thB0pFIGs|QUHGbZhP}7B zv188vX}p0fCk%^$$!2(P z-$FZWC2h#|B?rS+*l1n3S>w}ox#9dZRbJf*(RSF-jE+Knh-XU> ztIdNDjv}rV56=rk%p$>jssTSB5h_-|YQ+&m40_zzgd@w4#rF!EirY+a>DK-moQqvh zE$<7n!Tc=zA*cJog@6a65L(Bx4sOkFyj1hX&1^mUAVo(!i=?y85yO~CU4Dr+r^hO> z6EN~PD6VD>E&lx9#!3wB|x0-1=lV2tXl#DhFtM=iSIf-Pu__=;! zV`d8T>VXuI&1Z>ljld;&Q%TM(TY|Ckj$zH%g;_VbI*8+nDAA1*zpqSsA%F0A@rSE7 zoUni5gmJ*x5WLhRV4~w9<0qYxI|TOfYzBmH11`|OJwpV-i5$BRu#TB#z+W*8+5iD5 zgr5m;b*Z2mCUStrFPAkTuOkcfppFZ%Eupy`QQilsoFplM${&Ef!=Y?(cYyJUQ$C=c z4$p54Krltle9Jr=G?E$FFsV6BFyuvtJmA3#e3Y!EBW`uaq0H2|0K{m01;9FT*7c`8 z*@JsEqF6V;{5Tte;K8RC;nxdUX}Qqa4s!K?gmA6GSm^*&=HWRp+K7@#+w~L zbok*HVt!=qLEsnZKTK%xRPVv~6_ySKsYmY8Emm?szCc)yUVP`p2x^bUd`GSr6l=t| zOPqF8TZGXb$y~X|WrK2hv~!5kEv^&FEkd$O-F9T>$bEw<+o69o{KJTz0Bz>2f+He) z*!ZnONpef_FaEEeuu$H(c!BU7xlV2!_;zDLgEB+9^Py_?^K`xB_eAg%=0 z0TgBHX-m>Q!Q&IB*hi3@D2B@NHh42QTDmB!Pe zS`&<(P-oNmtL}+V8l6#wOhp=z3w4R2ISwkFTfmY8W!$9;iE%Pr$S)W zqfBa$BsD1Ec%(~yBkM!Rt;=({6TzbTNLZO6LuZIdndek3InY$*ie7;Dz`~{=NpoSv zFD~RuTvmnHbzr48$O}QPqOC_Ci0e#(;gaP1eHUFulj9L-c`LgMGL;z*Lo{6qPx08U zMi2;vm)hv~J<^LvHRVK;&Gc*RnioXXM7ag;_2NfEm=oLac$V5REi1A5lw2{sW(%ed z(^{ID^itapTq?!C zn%Sy({E+v!B)(PXtF7PdK~4x7h{ckmn&F;?ZJRQ<4Y79#FNqCU z7zb3lF1vWv%&r_|Pw2YU6M8BMy(qLUa%5h#YxW{BeO_WY^t2~Db0L+W5ec(76a(zRO;07d-gs_l{FAQQ^ujwkg zJgm8mR-NvYY2u}kyd(v@)*e)+w=L@W_T__1=B13YR@`j8lu2$GY_MmVobDbRd@N8X zQToU%JZx3=OIA-Qne0%G>`*e1hf{K-h5}LO{gCC9kK+==2B{&Ur$%mQ+x(F!tDnvp ze`q-=%#^e;UUhzD%oo9b@hUcf*!i0C#(74O*J=CIkxsa|w{83tui3BSozYTD6jri% zma1d!bWV&SmoL+n=(soFBI1$jql3OAWZ>kJkP_SM1pPCYn1pRKrXvD{4by6TM5jSB zRC@5obz)%ps9P^hnAE3^WFk>IVR?FtPVl@erUBAaKhc+fn=hveGIe2kMZnh}?2srr zFp8ByH3y-21lytNZirY>_N5GhY9!O43~G=IIp|T8SBGXbG0q}DtP%7E<+NYUk?sop zbU@G%l!u5d>0dDDp{DnHA1b}6=s@g6OdWVTf`5wSDNr;*dq-G1CcL2{Ag>t*uE#Ww zb8G#!BNBF`u0!`9g*U?06WLuXJ(TO#+74w;7;|ZUgSEqSPZn=Qb&vFRj9(YsU9#h$ zdD&+^^z+I5OlcpteiyhJn;QZB4C}7SA0B$+zmG^bR6Ib*7K!rEkwKM@fw zk2p<@>WHKZ0XX2)jk1==mkVLP$3vW#i9J-Q;8RA%Pvnz+M|E!@rqoFfqABs#%;eN? z(9Epl`;;)J>^L0o#QC6?d?+lOY4Ya-+28bb}gwYYx3`W zd6JzFu0-@K@f8=ev6_E{(bQu8tW4RQXgS5v=Ve7G3i+F>r)FSsqo;xG7N^EGgzkMH zHK_~WE+X@8=pxr6cJ#;`K0rSs*9-MKWW}P~ja$f}XkW~cxOvoyPK8bbJCVeT-M=F4 zD@5HE^~0}^;g2TTC`F(6`YdLM2AYOoL#m7-Nv<(As5!3;Pm7(|Y2NZ}x_m+{2ed*%K-IKx!UBqPRZ3?4_4Yl+c^|)0n<|lh6S|^lK&K0b=X-vjiE`L%u z*)q4V;HI$)V$O!()=|fIK&`P4O8Vxk*@yCN7tZ;06k^-auyZF3RaDAlr#3rK7@JPb zzYNG;F`8LGo<)FV*3vF0NMM(MN#I&6f=Vid*D*nRP0BGSxP{qd!jYI_V$ts?{8lcM zDH~wgKm}{Uv`OeWfU)XQdkN1z7U+=9`}sO9nCNhTrD3<>1~$qC|6^j(ULkPErb9r} z6Pn~)%$aS6vK3=LFL}Ob5066RA;qmo{*;{5S(+y^^E!c(o+wlMXd-77A@dP6X#+?8 zB<3gy^h(TxAr20|&4Vd$)g&Su7UkjY^ljj@y*UMzWS|X4`W1-xnwDOaLxC}7>uqSL z^0C~QqMrO@OMKpiv3UGEue}TM0~pJovWqq(DhEdQg$1zIlX4PE3VUsz3BAUODTwF2 z$+A#i6A^20E`~wf9X&0UG;OaK;!0epJO+DUwWYV2npLU$E5uo8e&Uuh7~Ed*E5Ek9 zZLud8ffQfxW-D2a$*ci(&-qF5E%yBRUk}d7+lzO=_lErUBdUOTE0LLJUn(K8GW#Iu zy+za!0>|F;6eA`0)-MZ;7Dh_gHo;WQhFHnWc6f|z@Gh#94DhjxltEjD5t=h&rOCDd zi{=EOzbE#=fohRlb?apbK=jPimJ)Jw>KHXiC*<1(4Q~zgSA)8l`LjOp*P&dPAh=o{ zt~iKoQ_yBbgC+a$;wA^qCkoAV$)<*AlLNk_&_9wG1OdswUIN8Kk*ecGN;@h8D;0{=e3JIhUCpGeDk?j5b&aJ0Z7U>={o>`ydAYeqc_ zu0H#1JHo0@=W&e{dQut->0uGY#o{Gk*;8AN|(n*k67Oy$lGu>>Yc? zSIHG&6OfM;+h8@DFkjjSiO*)k1YzFdJm3!5y`1FlbVTPPLRaNNPi5 zx286TY9p{)Q}3(Qg5Ath8HTq(xLK+?$iWWm zwLITtwPEP3tqx>wYTo6!vH4Ww{vfnI{ippU{(3UuGSsW|UdN8=&U{BTxq~^ui#*Xo zFtOk!mY2ylP@Vb%7}S1`V`b}kxr^2a8cu_|A8WNoy4w3^Ux9S;Rio(l-jSnX@6f-K zV$gIKT@4pFA%ZSO=R#~}_fxhDI;llWV#O|yV6&D%U<-z%g&%dj2k((tGAjxoxjgIwZ1S`_1lnv|6g*xGo~#RW-Dm&A6* zvE6cYOZv7S?Q}3Zi4g`Jv>b7t#oUC`!VG*QYR4kl%DpFpGd!lq>rylNJq zeSqt-v;YqRnSg8OcX_{x>R9}f^t~5BbQcuaDkvSsdjmqjHhjilc&HP*5n+>8@dP2C z?8sl{1F>hX`9=4=oHxrq?;OI$mn)-7FS3qqDtG!F8ffpU(|;keF1ovNGAzMMI-O+8 z&JAotP_pNa2vThS_8a1Y*lh`%iSB{62`0Yh&I=a~P#GG4O##S^IK{Q&*FOZ`s4Lqs z5k_h)bz+Ln;44`aBImS<6jF3g>$x(ltK=uS=hPl=pS3s^5&eIhOZNvyl9q z{**=wxhD59-i6=9-v__9ts9OuA;yv%WF;Ni?Xn1Eo^26GNsbD{q+1F3$Ypq=ONpk zq~oW;=3C&T)3}BC*GgD6U2tJrbpgq?>Vqa*stwz1&^{^%>viD}Td@vxw#+)lUC?do zIELZZW*vKOusr5}n7d83APBeY!tE<>%(az=ZLy%0X)s@L#v67`+XT$Jbt|(^_eph1 zoL&cME?L9e#x{or?vl=7gn#6i_skE&+~9kZlXYlU#{C`RSz>!;rA-}Jt99AjR!2wU z?8!Q4B{$W!H49{%S*E%TUz;i(f1;=xcwr!Vgd%$UU9yQF*m=zW*TO3~ju&{}W^CoU zaT0^uExDn9q9K?@d!D-`v60)Ev$>ggd>MeJ_5DFVWP4%bbs# zIj1lnqyo6}5es^EOK4;|-4Z=x>LnwW@<)gH3t9Z_i zZu=Vdctu9_?^d-$lfqTF+u=a7TQIsVZnLD4aZ*X-`6Lt>Cw-BEtlHYll{|r-t)H66 zfnMwgHM7v*GN7h}a0uQQE^UZ`D&A}*Tj2u&f1t4J2*Hc5iw&E6Y0$RhBRAeO6IrLD zKv=1p?we6;K7GefTV4+tsRK#9&%cuku19%SeO@)RS(@<$z5Adc!ojcqqW0VI8MX&B zXiKcq5?`hDgZyC{Z=?@Td_iYexCz95nauc`kF7a14dupsKKfT+`|EZTatp1gZ|sK~ z1axMfE|E3wgq}?sxh1LgFiANcVp-nIognIy8iV6*(8!Y_6=xo9dFRzB3fCzz*C{F& zCK4AebZ#_suC!!TU4)^BRLB7(vP#)JLV25!hrW?YL@wfyA|O>^V>7TAlYhdG$04Y~ z2Q7F~{JOX)TVX@EVq3m~N1%cQmFf?4YB*G?I9I@=a4itBh1m|M>q*S7k8&{70Hi9 zd|tzXVs<$9r+*oyAHxPCNECiBS3xeJy)rl9;E=8L>D(b>Hi%?grF2*0LWI zpP6cK{99!T{@8tj=7|dSX8{Uh@(*}?guzj(1XP+ccdA(Ev+ePdsv$5t_xNi_RM}9e zmr$v=P^mK^lW7PA4{K_0eMo{MDcZ2;MyHn^DsCuLuWlfzZ<2b$>2e}!5Nt#2hAJF; zd{qAoG4}6(P8|xFL>4;6Dturme9(bZ@C2X_`AgGK56`yWS9FV4bnk(x98!3K>+=fY zzU#)se%AS_^pdIclBo1jsQCR-@grC9BUAYjuJ~O2cO$(;{l2yB=J@TA!h&*tsrxwy z)qQezoPEwX^u-n&e~99NPglj+kN!f$kl7E(get@!7hfp2`Ea2)J~;AA67B#gIqI-I z8K0ntT*4#8OtA_ym;ZkF-ND*bQcUfGPz>KkTYUtx5hgu%+4m-TJ4(+l=a;HK9VibA6R`!>zjed6#r|6P{(f;lWzRfF0 zeWx6q{9Nv3$&m-q5dhJV0QpP=>Bs=-NCD}{DLJS@kQnlI#C=BSwP*D479V~c#_r9< z>J7%~O~&et#_G+++7*P`lZLyEbEJ$LYMA`nlM4HY;5T0u_{r&qi%dT(UI+Z+s=9(Y85Yw07e1OWqA0PYv-f4R( zo9M_*-KBd8xx_)vNcMI*6L;h$L(NSjoKJ@j%z|N^(}Xn65@%fGKr`oz?7OE8c%61< z9J7n0?I8_x1g6=yXnpZ-@woMk8S6-5d2ofeAWQm(M(xvUimw{bwSt z%8G@14-mamPKJ|ug>c1lNY>l<@BdTEEolQftqlqS!U_fgLizuca{tqrBULiAGf{SN zay51_c5!tw{ZBD>Y~qw07$aKP_h7#RDw4>(95HzWbg><)%`bACqR8KWX6Gd)bPi?4 z#*G0Cu9RE%YCYq-y+IB8_=|&*|B_KhHN_(P`N^USOn?k@O3pKw*#)B?Le@ zT$QgRw=`^`dpnT2=3sTXEek|lx5Q-+S7xipqT;}{CD3j;W@AuP?%?$#k=rU?v`K2Q zTW*$FE`@!Xzg!bXx?T_3o1e`1>`l9W_T6Ux3!|68DUgd1M*7~^zQwyWoUc(>+}@*5 zeE-W4zwNvJ;k}6y_>IpVOwl(;`0q1OsJ&;W6K}bjfV6CO`zp}y4d-B(wU@N3@zx#+ z?z_W3Zxry~G#h&=F1(irdx^&L%l+-=^OArsdcZjbYX`r3$i6_{XYh8X>=0t9!#5T9 zS0X0s8#`jQfBKC7_{mt)yF5HU<)HsTU(b3({^W_j$zz}0r%WDsJ6b~QetCoCzl4}= z+W|IQog*}wP^dUFWGh&~kYm7PTqI6_zGtT*i(Z6p_k(*8RY?`mp$kmCKs zdhiw<6nS|VOg6=PfkG%tqaso?OXCV%dRXb=R~lf%iBcp~yJmh^O136xY$rjvddDah z&6d{p7Zs}_S*(L_0WbiW@Jg0~InjkQS5gU<7cV}0;w2+dDw7h_|H6jKHqH(AUPRwz z`HE?YBvLRiGNri zw%7Y(P?tOY>T-7?w^`d{aX}+^`$K}*E(tIlBW@I_!or6aSH395Ba{i2n>cJSbhfcP zp)qtn5GXMu$dt&2m1tC#^rt4NsOCa-&?y=FkWy9R>YNu>K0f2zLZrWy6(_#z7NtR5 z4Ijm!g#yA;M$(+c&dpp5a@r)H5$PzVo*9|ZC_KhQ#ZNmq?n#2BRHITubGu3Al9B|c zxg%`m3Bh@Me0Y&_m0f;OBIKL(QT!}2 z_gnM>=E;rm@|O!S=kHX?{!@ue@--Xd@(sKl;Z`x_p(fVZf4|wd$p*Zt_xkymj7XJ} zI&=k!uexHFBUI`G3at8`&af(vBoSf-2~6WD0I}4TWfp`m5+xcJTVkZgP=C#(Yt!M+ zS?J8=q0qPjAw7~q9E@0G!eLZYZ#I-wp=hg5KzyS|GICKg{>Ej>7(49sJ2Dr^O+}Gr zBK-FCnt4jQlYumqB>PO_4B~k*Z(e9wcq@=>=0^Q7HUyU=s@Y^QxJiabI8{O!XBm^U zDOa^2HGrz#T9jV_5(3^Pr4SV$ol?#*$=ax`T5 zF_o`M|>KL?>^QJc@wE zllW;#sikcuQSjMz#K~LI_WQuk%qb#;drn08d|A6cC6XA4eJN%L^#Ct;QaXka`v*y+ z3YT5XqD*uK_a^g13AQ>w_+)3f*F>EKquB`onO>sZYLxOoV;YamsCMFD`uF?8Y`G6L zOoAx!(}YY>C)flJ9{D1h=5w>CBJ572i#RbVVGf}6 zdYUWC*qYSr_>_zpk%0ue^X5wCBMSR+CvsQDgj74!Y|+CQ+ISxCN`gE?v%4o!hRMiH zgshF13FP7!A**6Rl(v_y;q$r#O@r%EMs(OFpG=AzRZ@33(hJ{mp&tSpp8{zKdBhRF zIO5VMw}92BeGN?41_{@dCu)qPQ4-TVLTq&g@RIt6?fg)#QFDyqE~S6c9chUR1#3yP zd7XHp{lW-$_VSP}XUQ>;#0TpXT*yAthGn5B`npJ!sr~#dMWa62&E#i6^YYd5z2s+S z+}uGE>6w8H1_CCS_=a~6x!bu>JJe+jy|?QE<%P4f%-fgHJq<&j0Myh`r^^EE%kdlg zMbYW1T{cbW1-94oj`LvrE=A4OtQ+%{OQSwshUrxeJj+6LG@m1b`{xxYk%EtP8?)eE zgs?}ffd8NI9Ps8rM@ogq?+7Vbyw#DeyR5im39YPU>D7;`REe=Q(vBU#77XglH?juU z)Gm3AOLs&%mMn7GDUs{kl4u`CQFL)f{3=zzgeF_ge^GYUQE@fd+Q;4939bQxySuvu zhsNDqgL`ld?(Ps=gS$&`3+~R>dFRf1-d-dt(SG%6tRj0~9c{tPE zcpOKX{JR?Sjq-pu&7}qwJvij`DT#+dc&XQ-b(43v^FW32U?N`j-Y|oRT1&1bsgMje zt=o^l!wTLN1~-@CRRt^UiO_O)P{&c{EKDz7K<=D|Ud%939%kRMILkU!Q-wYSzx*R}#N~g==cPa#bbj@F}}c`}%{Z zDUPLHaF<9R{_}n4+JKOX#;A{o9V+9Nb%joE&w`=(Zs-sVW*9xETbS8f^v&++|Cmfm?b+ThSRAsgP> z;t}L`SOMbiD%4%}4xi2Sa@;TTp^53S&^h$ohhDTca3!Ai_=ng(`rd$ARiDd|%@L=& zA;L2r_}tpk8}I~@_8Jg@GJQKkMg@^MdeeR?Pdl^Azy5x7XYBmqutF;}fjm_oYySr3 zbMs02)y@2#u3=xsU7)jnUI6f(;;#7k4i>@163aroSt{lE3Yr;2$b(8bAfn?FTr(PD z?)O4Uq@L{+M8zw6-Y!ZH@TfKj8sPc1cNT<0RVMsE_JStCFyc)}-0NYU=q$v#fB%IyCTA9J-El-0E-V%$j<}#^2jh`^(SV|~KuG$M0bmfTI?r4aH1!SxJhkAcUw`YzM1uU5 z2A88_*9SL3s?ZD`;QNDeRgb$qy|HX^8?Eum%OirN){gYZ+!Jg`5Hf)q33XPEkTNeN zcs7ooL6uGIZXmt263^h;FuK=63S1#|326MUM+u#yp*wcM$30v5=|u4&MF61sIjP-u z(W!fz9wrd9Apgd0ko& zaJe5lJRS0au1cQ!WRh_dddmte$}BUF&`~5Fhk;q+EIKBZq1_XRE@bI6@vH4=<*z@*ds#c^}UF$8%zPr>ZD0NB+y!nSblgP}*&V|n}6JC5yRit7d z=O@m4qF`MrPOGpkaNS}NEhkJ#9ER{s5#Qb!WmZn4{JK|O+V-SXkD2DCOlq- ziz~ix0>#BOVXC|B)N`3)6yR3bksAZ3TbNcHdg2V;H^t7S4Olr$epDmd2Rkbk z8iM2@f{YN3Ndb5`K}5vZAh;8^EZrNRZaw=X zK@u$1G%n*hP7Fij!7$|Z(M4>b7iyA@)CfP+s6R~8V;N*nOMHjP6`>c7)r?ZA&791{ zbQi7YH$D-dUAR!wNt%Q>r%ESpiPSWRp)+o+LF^l&Lc2I+vQHx8;MO$wrsi?ak5zk+ zirC(s%G=$}EPu4%c!wu3gNQ!Hx4iZ#H!zq(DrDe#Ocd$LJ9GKa@M)b)AAp5q`&9u- z#uRV$sd}qw0#APwqe&s}mI>X-4pB~*Bb@z~FZ`}*bkW63BMSDukLeaGl`s)DtTym+s}Xq9Av~fy zO<_psZX9j>L^l!gYaiQ~$UT`Tk#<>zw4uJS21M_F9xizHC|eX`=?eU*LXu!e`4rd| z7qg9g5y~1E+IpZiic@UC;PFf6^jCIZ4$WP-)Xf~HUhkW)m&-Xh(ym=}Ry(J3oW>M- z2TQ(Mdj?KxXz$O+q~0F~(AbRh`l@c5Nd<3c!EtNlmw-J+xR1gRrT`C(&?m6cnX&wtzU! zfZ&sqFeQ4-;r1^=chx(wYV7g()it_h;`(Y(&v>1-fErt68J0(!yluw=)|1y8O5?#t z4~o{Hm>MlK6UJf0Pb`H#cWRrauHzlB8x7X>y}p<$m;@e}6rK4h zoC|)K5|o?UQRlWt>E-qcInLFJ9iMM!4=HfYvjS^VKp3j;5M@b?yhg6@n=||=ztbS- z1)JefmWEd4-QmI=qX%$h-x>Lft~yyz*2Vq^>Sp5*CIXVaO4)bK3gE*n;xUC`SGp9z}QH4X0;RxV$~Wadbe~o?=HZObsH4*};vnFCe4m87WrM z8+7+zk2zqf+Vp^AlvFgkIm%=S9NQ_{NlnQ2%(ecy z$mx-kX*BHIzFgtcPMyoZQTc6V7IJ-}Sb}$`?wSuR@A>2E)e|}S*Nl1He6(Fzhp*de z2lT7Fs@Z8wS!7S5J-hZ|B8*YTF$4FC)VMb$OBcyW7W*BBOEcIu@!k(Uvy^^7dkTPS!Q{Z)O5Q|*vp*6gF4 zr2OUWEDpOaSt4bS<{n#2k zk%_Z(P-0T%lCC!MF%OcpCpi25111Y*VWNvSP`AqAbL-aCdFYI#<`SWSDQX1ZTvF+9 zgy^&gvNM$m!Qnf!SEr1V{x6I11j^vz6K`H6133X3uSs2TPo=(_;hjq# zi-oZ2C}Bn&@9f8;kl`j=`C`p8Av(KwCu8RCE={K#N|@9!Gwric5^Kr<9rw1NX7wiR zR@bA-jY`5fS4GXRUfq0Yi&dj_O=kPJ+7w4*Ovd@62XP9{u#3)uLhK#(7&_vIRbFB7y2zZ}0;hGL__g0_hR>^!EX_&A(pisB-vzA&HC6;iqs zjh!O<7}?-F+ZXZpZtA)oYE(Q5)+(yDFM}Se7U`6OQsN5W6w}J&{0jbb_8gV$D&!l% z^c&)Z?#OD}KCI!$QiO?AR!3x$=*ND)b z2LtRy1?IsF>;?XKpxPX(+#I{>5t1L}i;m1%ZE_3v_gCddXMwCQek&qW%lBS!&N}J> z>&s>Ag&&nkB2|Y-(MHXm%q!!lp)tCiVe!Ft8oxBU!+1%(*9cUh5#@$<=9BERp6bYc zF=A&}!?-{e$ic(;0!ndmU+MV{`QHiAqE(cGG(=1+7g(6a0|x=2{nv!3Vd!jZ{(FxR z1s7*~7iVBv1Q^=AqB=x*F>>;L@D7w|1>YEswnDD;#>FaFg=LgjsXpeyqFTgz&Coty28Tt|;g{XqC zl0>%VM8rhDuiIs*k+CHpGA<+Fxz8^VbS>Q-h}S@tocze(d-G?^rM0t06*Q-2%b z)uVba7H^&uSw71sn0dJUoI5EH-Ti7qzHEC99yi%HCSnsXyqLyHf2RHt_jL1Wm9iLo zuqcc;>x|sW=|$C<`G)Kyr7m!ZA25o{I}B*wnVPS2I>I>&u{99HL)67HMHn-RalIkl zKu|&Jzw`F0rg^YM;T%6dFTKC-+d(!&xb`bIVCp^0PVl1nWa4Xa-aaB50MUO04}uVZ zA*K|C1Y0PJEXM93&TqROw62)b{UIalEBqmaRRi2q=o?HJmZ(}Cmx5kr+FXTZa~NN~ z2KO(}vOt9fa@9I3lf_ay@V=#&K=%bQEsTnE55;-OroCp(>$~BU^@KT9o`pcE@ znlW`Xd>L`&Dhv*S+f=*%7TOXhbd22iwKq`cHsA~d`F{{v!_mSS;P^L*eU#)BdIeE@ zKEov`L&PHsC@L{3qNkhlS}=w5tL%t@A1J3Qg0V7)^-eNRC3r|Q*1Fmc9)aXqAFaD7l|hv}k=RQ=&s{+z-)M+- z#$(98`_mitBnJ>geRYs;f#0=%jO7wA+sK=UYZaH2I-Hu^K+$3<6>1WY`S12TL zsO+n}v9EKa2bnM1a~R@K0K{**FFLPlBip?MuN8>}Ca)L$Uw5PW3o_^IYlN-FnZ%*0 zHeY7)c2%3lGF8Q)NWvgAbuHud)Qz-A$$}8tXnt7Y;6ezN-8i9L&)mKy)F~&(EaBkb z;HKgT`o{;y2c!i+_8S>Mew9VA2KoErfPm-#VFW(GpC4@C-9PPYWNc?^YGLNY`1c?f zkk7y%oSXS-79hbtf!F`w-TofL@{#GIh@FkSp)-U1-~5{ezzGm1Bm*vl5Pbej2jw{} zgUNeupaGAmonotWkt{#!>TFs^o@V)aYr2eyOcWBpyK%3_TuNCbHXj$eov0HSH=kWj zV|F9$eZ6~D)I7_0K;x2Qh;1|#xm+cvL;JRSf_%(t(%kpUQdupPyQ5)*Z;sQ5HDl%p2mAIjLKV^367 zB!=K+KRh6h6{zn&A=TC4BK5=GU+2iAp^F(urFk7k`oFuMG1)1W)JWiF{#^KO*U%{L z#M{G#GWl|@ZWUP>VGwB@6jE!&RvM*4E$u?yQ}k_xAI75JRThgRc00E({f-*`>44(` zO!WByO7jFSe@aOsPcB8PVlaeXKPa2%0)*lizCVy`>o3z|zZC@Rxs|aI_Y-p9ukSYC{FbHioqn8Eiu^zN_a0IoU9Dv(JZWzi*z( zvQ?utJx-*@Ox5%}XhgxT+TazTalm~f; z{*jMHEoU?$AR8P1nGa(-YZGyo-!}g*ztBc$T)vM9p_A+qN!<+u=>m#Juvkj+gWNB0 z*&-K>NY*N&&{AGLd741*#fRs~{U=NCP;zt%W937N0NFt@s2>q#U@?j^hj&_9dHL{L zpE9D{_pwA$4M#{6HT>5^f_=*=?z|_$@4osDW7Y@*XjIfh8Ni!GJn8~+@`;?7%rz*} z(FLE*jkl4dBk%EYHoUlFBkkdgiotlB6Z2URG*&jFVp36j6$p&GyuSVlNyUG?FDr{}Dczv3$n184cFTl8q@ zm%_o=BK*!Ug@w3eEbLYUSNz~wFM&Z6?oD8dlXDvtgS@>MlNQ5`I~h|J|Xq~2BD+426&V!8B+~*IPEq_ z$QzUlNtHG9$SF@^`0WuPHHomLYx;bN-=$}!yb+1i~ z?|-(9p}Qi$(bUe-#?aRIuMq1hk2}r*5jmh?{T|wJa@XAvipGsV7y{Z0Z*EL+2|O}( zn11Uh{&AX8QgR=FlH7-e|^w<&{HmQT{veB#ZIbRDihgT>Ka@d z9hf*bxhf&akJUU)wR6S(*ge^Tk!NZBbISs0~9z$W~OBNQf%FQ{Y zslZ!`9OA}{<0LJ82bjQRl9|)kt>hg_WMXQv9i3J)sdUN8^NW#oF;6VJp^VIAqtzzD zsHishPIzeBaw*tjeml#u^7bJ*XJ z)WvmnLBG|TCK01E={5G%RphU$G=3xU(^AQ`6o|$H@cP|H{hMyd$&oRgd*ydWz-XmNWvkBDw#lQKn1P2N+**OJ6(m)=3^quKfuazZHhPFjY3E{Y7l2A zN3PtxGysB~J;fDWVEi!V_Vy@4~hsemN#)qD-lAc{Y=( zth=Fcy}3ly)HC>#m0b9~mu9^VD|Zp!;jdGd_qTh$&m_KM&(x(QTRAMxmspJ_SOsei{c|hVAtdusR%}x z#FdGj*k#hSP`5HP30-Jakk)R3KPiRbuA0PuXmoej-(oo!Tk_NYrVqkev(-BY*GJoj z*Vh(ghhzzMr(omkNv~LSt_P>tl~;w9irAop?e-cIv066^+|2WVa6&8 zhBc7s`1y5cx9Q-gGf!?ck?<|me7w}l_0YokrfAXCO@|w~Vl_0!mEIGdMb(Qso|Tge z>xRXZuxo`08m^u})CWb9OLbb6m4Ob8BK(2Jw>+AQoi5p>{3pYEmt7#!A*Kmjvrk_%d z)Gw0il#|DeLHEWCYwgXIb&C$;`at%Sf(YAwd70Lv&4xftOm)*BXf|p8AW|8>ZffT6 zXDe%y8S+d!R-V8sTL~`9;oz-*f%-coFn>^@cBPbC3sgH8sJ8U~uC|n|Gr$b!PCZ0` z;5a)PTG%?PTL9b7Z;<|pf=cC4+gU*jzJwN6roxYfTkFD+qAJky@JpC3DkT`hs>0!Q z-#GJ~Y0W}bW+S|@$|dO^K=^?NW!uzA#)H5zPWU{Gaoxx4KgU-81R*e@`Vt$85Q{^^ z!V7!B+TG;;u8w~i1DT!`l+W3}B?OSG3QJBEk6LCVegXLE%4xZfP(L#3H5*y02t2gX>$(&g! zhTX;}77I#;pL;8^F}ALryd~f0v^4vI)<3{B{Af5Y$j9xo0t~WO-=XmZymm1g#sU`& zuOUC*(JIWB?(;l^A|h+qV1jBRSRs5yunBN`-+_YMcoEtkOBZ60%T02KG+r8jYHBM9d)c$E1Bm-F$@TC6XAHW;rBO|0Q)(-dXu67v3nI zSHF*vr6^|g!lpGLexWVA8;w=sGUZvW7Ps|05?@&c2DoEteyjDx*Si%)#B7a*V4)f& z7)$VEo5i{z)oTxdC$2&8i*xwOD1om9&S*-#jkR{}BxE+YG8YAQ&D%FvR~a zV7MAuTbKyBIGfu!T6q2ego-`D_@AIC{3{f}Gm3gX0ir=c$B-uxv_xPuUq8cg9s6!a zt(0b_8S$X*RcneFO(P#lkeoHH(<>LK_eMGqJMCwBNp!wkKZA8MuzR<-k6i%QAosB# zPx4j3x12Xl4|EFFUq4B9KU#-M8*t5t6UIn@C*AISD4dWsK~EzZmIYFgwJmx8_AReJ zrgz%ojSo>FG>BYP0L?|+-0JFLllKklc1*O$^T9zUb4eC>bPC3|(%n%^JB6ItaQQva zkW$tmLmiV9f^*&T8+S<#73SuU&^B=t^LRs@AA$SVR3ivB>ZjzMU_8ygsSrqAyEo>U zK)Y4Dep_F)X&#l1yqGf5G|~i^!+SscOhI>d3+m5hdzDSsp;H;FGQ@|!!M`{VyfFXb zR^ln6q^JW^gwjQA(M@$j1BNfU(XTs#MTa)vg`s6oigk!Sl)D7iX17pmK4#Va;cQfy zti-($%51bn|G4SGzfL@@a+4&zu+Q>zD!)x?nk{97| zAQJ|8CLt?ONt4I4%Gln50%gY?O&MYaLc!Pv{QJKX#mn<#wHL_H(&g4RW*=prRR{-B z6R$OV%eRJUtuAQ*JVvvv;4}(x+w?5^T_NU$kFf2d3$#|e>QSR zRdkwfydBbfC#;_!<(nX2`Eb@@Cc^#LR)*j2ePwW6hY}(bk{{IH_5U6bPHO5n5eK6 z9Bp!(Pl2>5J5DYOlz*5Q)c?oi0Mm38^SjK*4#a@_{||$IN(fm>qqZwRuYesTxAuh> z&Iet&P#NY!yZJn#8oL@DNvk9#^>buv9!KD>L3X8wimJG_L+IW7ys;$)_!()XcFyaI zG$+%OjMblhAkGely@T)}DG1d#dOYqsISdAVGvZWcU<3O{t^T)MnbZNg`uJ>`V?(rf z!XBeGfG^^NGJW*>y%Snr#f25V#+6D+-_!rY}7=5%}Ii=i-XZ z^lPW>j{bDx3oxDSiqn|MkYc$Fkt!H(aO;{q7&ws}=45UE!51i)CL0niYfg19ohF3? za0~0~9u5MUhC5`+`*p*XFfd>q7>|C}pW8dK;iP6!#VJEz3qX#26mC#zLsmdFTOazI zcu0I@EL20hg{5{5>=p_a;I^?TAX~mLh~)_FlJVwR^N=a6<^BLm(lHPvh%{=QKbzB_ zwzecdzt=6B9&vAlGW)(H<1)HbToGpq?H*xttT;~iq>4?$y;~#fFuVEX%(4hd0@uc7 zvjQ=5%^zUZdV)L8YuCI&rds1aGK*00-{w^ch@QY7l+?_u6GY7C%lO+LFEZ{;PriQx>b@kw^Ck8Gfe}ZKxgG9; zTTrIkuR3}{0pd7o-3jzOh>$iQNfh73m5+#eF(nAqWdSW?WV+Qk{a4x1p1w1sePV$t zK`hnsqLMckK|yVs+`L*<A1b+`q+v7TrCzXCeP3RfjS&0zGVqANZDH2n z2XQGx5<^K;bJW&oiNuddQ&ce$wWy~ZR&q)ii%X^0I_l|L3PFm8JdI~)&{b&GN0`Y>)if|{KdT@7orW=x@a#y*q)y`t7|w&M7;Zv#g# zM>WtZiU%Ky52u$tCH?k_*MF@P{7(ML-ByP=RQeMEl%^kyy! zi`AmA4S9F6shI>z*ZFFr-`mq0csGof?vi`|)~8S*Xr6Zd+O3r(%$f~yt-M%>kiJb; zUgTHSvHdsEa`Fsfz3QlY1qf}sYfU(72q{VddTf@`qAmJDX~rMIqU{YZ0A+^h{{6f zY#-D|8QR%RXY5A8aw=|!HO!h+i_chC?xc|d!J%QBNV%4`yR3}0(&NL6a`ArsbU66V zp4(etQ0NKuz2@*>vly}GjKdMEVOd9Fd?9aOM-t8VUB z37Sk3^M+%)*oQ2)c=wlL&2Ms|(mCUbf#jG0$r1WLkn`I!82;fElhzG`KXI&4B; z?jhWwhm@Ra@zq~+hqIe;dEg3DFE*pB7?zBeh1{~M2bMs-EH+SH3 zCD~GsH}Xgt+f;eE(Y-cnfGvcY7eFlV+RP1@oRqs$zsAubGQyd-Qy7nXC^gJXa-(uy z2AZG5*d^HIda+!AYxp3~EviaTItXkaF?1Nx%aMXtc}Mh4rSzoK`+elYV^wDkN61)9 zlg<(M7ot_Uaw-~$%H#Z|bOVW$yb^_NwGQOSF=HNAG=Wp`Aia6z{d_Dms;o~ux^TE| zVg~JyZ<7XMgVE_TUBblqCMNC8>|^~0ck&sDL`0hA!wQ$Sb5}DI0cwUG5|=}WyOMiI zb?W0?pOPJi!BRs^E77e(Sg}HS&j_fIG?9AyLlwQES;|mc=}4$*iwcgkp3!z2TZ2i& zlV1PYUyyf+j-C3a&Sun%%J&xQK~Zh-ZsVo%fg=^_J=`OXIWuWJ+M<^m>j-L-8E}ao zSlw*j{xUiFn}WJ^+vxoNPYV9Ca|BYb@|%JIq#_2X6_8hH$tMy>Ftv&@i4`41IufpU zQpK}Kt!c3uTkD{a$z#~k&^P~=k`k7t(Ew4)KPYeqQUJ6M`dy%z+f!nwjGB6N?MBOP z_M15jiZ2Dx@)Hp0a(<-PGa1q>cTd3XzQw6|hNl&+=KGc;?8(zgN#vt-NnQYfd}-Z5 zXh5dku%uHq_UUd$3?%=v5a+e&=!566oOoZiiU8Ox-*j$x$2H)6hFJ8snJB==%Lntl z-m{Ylg^Es$66vFKD?+12&H47@%gb6Yb3W6EDF$D_U=aJxfaSfjGM8f?i5`A6Fp=8WV4>L1N~WStDk8v{GS zw>ws8$}-vZsD;eWy#M(KjPzgl9w|TqJ_7T=|4@+w{JoCk#P~;T>CdslKehg(c)8zm z)geD^j8%+Zn|%H93~UBI5MeUrDTW0$xc@AQtZKlQ%R8LBQoYzjzK{rKkvhqxHAgz1 zkTw107UJ{n?gL&Ess;@?R!?6;Uq`>J*;Gra$T=fEGz69u;YLSXxEjB|V$+|?z8LzG z?ly}K^cT4~U4VlEzRTs5O=%6yXTmaBj{rs<4d%H_Gcmf(>G5_El-+W&=3oeBz^1GRyR_VdS+7`k9vJ4aX%%>k@snA^l zP6bZ;ekJ-H?s|6i9s^gOO=*~=yJ@`vX852I4f205k2CivV=cYkudpgHBkSje_!8pd z=YTes;zxZ(L6z>W3fT;w(VQ>c+dRGX9chxe|&djxLXCj6(${fsV2F z)f`Rb2Nlw6nn>0aZx%b(O&mV!QbBDKTF`AnrJcb&;>nnQEeq~lDp2Z@1=j#w^(izOZTl<6$*x$zpAb-s70n_}SAAI25 zKh+5n?WpJPlA5G!Ds_%jN4^Wi@S8nf6l{TU7OM>I4SE>0UH2#7g62nf&r zAzJSD2`v9THdO`up78ox9WzUPSp!{z;LR3B7KY3KBVsOCTlLPrMXfYRykUtPMhK;H z#;`?@$;93?(BOWdiqYqeaWgoy?4z`o_U%CStUy`u&n!W-4-47*TMS)3k7tb6i$A;G zKy$zaAU^qz;z6+?KyHbUhM^%q*Ai=tIDn9WMnSdeBO1s`>8bSp!sDN^CkvBan`6?8 zvGguE6o*tm$7K41>tE50QAEcSRKQKaHfGs^Daxk|ItCdZQfR2xXM@-z*hqF-5RVt% zl+ZAv@iYk^CIiMps=ne7-N0j1z+BhR@ylc}+_;!~I1D-J9!Xc$9`~3KeaVH7+ln4% zD=|JB30ZbbdX|q2B~ziO*mx$ZmJ;$9p4^%%DNmAfG=CSA1;8nvZ!yj`@sX=pCAvNV z-IT1Om}W2x!WFATB9WxD7Q~@w>fHT`&rTtR z!xz2N73GrmdlREgjV-DumqO0q#6*Conn@RYa?Nw&mid%vgsj$?BX4uJ;&y_R{~+_j5Dr;mG>0&F+d4N zfTx>=M&3i<>FtRb`00_`dI%rvsjB~I`uJG_3Z8q#LEF{%uA`qY@jXNYqxo?s@%29^+{0J3+~IPSA;GQv;?(V?LS(Y|7C{=Nfx z{XE7MY+T#JnTy~U#>=D-FYZqDCS*G&evT9=D!KC{E=Z+?-FQBn@o5+DAV~Jo>%u9YSv%7C5sUli9Lu|~a_$W9AS>(oB4jB)S*mK}^^IAP^wI4B8+QuhIFDo(Xj z$|?wL1lD`mwyp))bfiu``0W|*HW%thw=ppiP}>gd1%4koA3OG;JSuJ0hKo6w80!bn zBw0Jw9$ZDl-pJD>~oDS+Z_zMG}+gXenQ5xL}E-WPwaI*JMjw90Tp=lHpWqmfr!YgEMCFOL?(J@Bel zVk%ilT$-9%UFj132Jn!NTyjuc+_xmuA#b^mmuSUNIwU0^G9l%8ZulkQ;F^?6x>Hfl zK1zA>5u&giM$|vuccw_&H{=cMv~p6(gP2GATdpIf+GyC7DxsCiTIkXvN-o>Um9aDK zI_W}N$U0bUlj1m@rH^Kx)z}r}T|;HAyaDdK!^TK`^Ib6o-KU>$UCC`+8zDyyI2!GQ zshd<&;{0Yx1C7Xd3>RLd#4ce*#71Lgap`@Wa+Q%d1J5lZtJD%}YB()I@Eo7Q9T?Az zD~9<``f1w5%GWFIEYt@jIw#A6%O2)DKhBjx+tuR*cK*~lAB{~^QnRq}is8FgI{v(s z`^JCQ#3%Afs~6kcB?#~`Kc~I(So?|z+=v7Nscx^EUZo}2(YHmd&j_#C0fv1wo`m|$ z)39kujIfV4R4+Mr!jYtLTbGgCC1R8Jv@H3y651{1``7!VU7uu+nS0*vh+4K2>5OLM zLwR?Oh$VhFXCvB~Gi4uglc`Vy#Qa2tHGk2*#40__&0f~0cFO6+9CWKeWqoYhRT8n5 zV!Wpx1Gip<`hm~OZ$Z&z{7&|T$Q@;D72YY@V|w8I&!WY@b|@tOxl6D#vUB?DgxK%? z$cI`!au{e@$bqIsH&|Ybk(vezbU>T_S~A0Cg613l*panrW96e+3XuT z1HKJxmi_WNlu`}Ce%TO!myFjE&Ew*X*AnT4)vDhYgh#}zs$V9WwurE2Yxk|kBO~Oi zVUJ3 z7+ay{*a%cEMB}|tKty0(NobCF)NF?oLqatZE?d#5>~ZsEQOwV^xw;|1kl|}cTyNNb z?Kv%7dYAF8yy+MAWoQ7BRQt1;#yQBOQeoE*UkWBGI4PJno8oh#@a7vrQ-#r`I( zPQ+QF|F6{Iv5FuuC&?4$y@@9->7Z!4)Su=_lUv@x16-d!cM0xU7cB*fT;d+tbK4oB zuC_j1spcv+7vrm%^;_*w)}FMS>g+90{N3{W&3lBTP`Ltt-eV391Vs4%LdqY6sQ;cg z`ELgzVh%92`nv@wRJTz<*TC>)fMEZ!HvmFw{`raM1G&*h+8j)jpXvT+qNwG%?AS0N z^tS9_+RsLh3j&G)&dxlSg=93hO)mv^#)G9J8H@J>4H4Q3>ZEsU(#=g2a^vSOMed`xo`3RfK68Kay5gC;9tBX&jYb-JWs z$&}=B90d9iciR!^;yxvp9~hL|zu2M73O%G&Xhp)Er_%(fM4Y=c3Qa1`V6jrm3<|a2t))9vuprdTO)Dk4xEV7bEUd zZp@aE1&I-A)BtxmiLq+Qj?SH`z!%{p7I7Crz~i5F0RL7GQJV{6Cufxs!szTBUd_5T zcgYsmJ~(hMA%VXF`Shj`3FrLzPF8***`oQ_kj$2zb7o@OrfBK#DWRtKlUqA^6~GP< zkYQZk#L9_gITmG8KXCOtDEPTRGvaiSm5gx3VfX8f-bNUpKPh)Vr5`@V^Ll`eAEiXv zamx{615q?WX8Aj4yrzp7ecn|5%LiUnFn}Yt^lJIw-re{FCk%S2*e|r%W`P<9`DC0d z8;asm%OZ^Fz;`qULxFOyb4@LI2MfotOkOd*BHIX?&$10aO>PMuujY@I)_lXa<`s?1 zYw@@?Z%Z55rqn%cA2}Q$om|nQ`8(j`w_Qqf+-x0$<#})Tt#t z^Ocu`HMl*{4bV2|Z;scN|A=XVzPA3U>rRRcv(sbi{X-#;*%#o?;QqKKa;7(zkIiH6 zzyD0*l&TDVIEd1lXkIMJSLpT$K`7i(+8H%J!;Dx_pSrjt_b#y9M=Nx|sjZy;W&RT4 z=_7&pJMM;AOP(Y&VL2C>dR`AzNe86eg~D9bOGsOIXvw{uRTgt zwKsey7E4QznD*zqMym$5Agt;gn$ohhPui%v>E+g}b zm7dc>v4bvl5WY$XS5bsYSrIETMn9wo6(j028cvdj_%o=!-d(!EM!avFe+2?F=e8R z)bgw&K0?V&w|5|h;vm^@l@P2rm`~<{hsF?aJA~~`rHK%Px+CdwI`2(Ii?|{2ao+64 zb(6%4poQuYeC4{?p9&R$3spt(;VN)A93sgQfeMvH(juti+O?Ay{o z3gSfAwA!m!8b%Z=+J=G5uW4eQfH z!giwGXNnPl4ZS3wv`_t!n<#=CDn&r)MBPlIVhzWjI;W^nIm)4v8+1es5D69Yq;01h#c--Tc~AQ}#lJrQDe{b0WqL)x5%1a811Q;nf| z@(5S|Jj39A$tv@qB95)2B&;4V;A>o^Uh*qVX@n9hwsmEz;+nX`N7tY_Z$+A_jaE!E z`;gPZmJkgG{UnlA+)(wsMv_h2#_43^>(jAi@YoS9CR}5w}os_Jh!0$zFo#Ir(=9^I*f7faeFWCr(|XV{Lc}VuU*(j-!Z;F z3bq?objlbuuAZGMmsr8A-9CwS7l8$@Tn6ZR zjG7HLOg|~XpCCjdW)o2*HSZmbC+M(^r+eV1tNGP0npO7{o~~5HF2og&4k>&KU!J0m zeKNf{$|lmvPS-2on19wuHNI0aoxvy@M}DCQHdzlr%E_0qrnP)nxqnzcy>eUv&H=`+hp@{5B4Vpor8s_?Jjz) z%43`s_7+RA@dLK%2pk)l#}p;jgQotf@nHMW92w8+%9RyMY@N8L4c$JMInSa{D_Dh{ za<0~fmdp7HmnX;CaK^^PpQ&i3-9=d*^w-w%p3hTC);MC-ke@ch>3G*X)GwIe7SrK; z1bj|Ie{pO78o}(ruYlQlO0swzxk;ElhKMc44zqt9vV0vn-gz1oZ}AP*7GR*P9S z83L;$OTn?5MN7c^RGRxMS>h1QLhAYwys%NfpG2hEtARtaw|6|>LfcbL8*mLp``NO8 zI*2az{&=eW$pd`8dXJ<5fXytLBkY->`U7E$^QmmNXS|}A$GfN>#Jox zZ$^Z**uKg~Ch#lwK&|cbGD6(#7hGx{B-N~Li-N|)V&&ovv{-H)vy?m;Po0~V2QERmx;RFPibND%@LwxN+KJ7!V-WSlEy!~6KNad>9a#pI^GQU(;x)Je@J|(fwVkI@rB+#;5G!C>L(ztVO{*_GZPg}NP~gpv`&l-&@$ zhVuCR$P(C|AigHia3JO15+&FXB{&fE9tnSlLU#y6cle5a$#t*^&!5lu7}dGW@{~UL zfR|QKR34FrOR^D<%u6Tab_%#W|T7`5wnNLw1s?B;Rp_mM-m{@*xlQK}%>BJ%XDrhy!j{IRMjcsZ;Y#8e;vbC6> z9+P8ZA5A>Nw;zV&neS!IKSZXfE3Il;Sw5|` zXe_HnIRX9s3tLJ%IMx0a6y#;k}FvY6bztx_cNc8`- zje;I{Of-cu*pNHXpF2jL(@j3ZdmMDtyUlQza;U)gOZjzskTTJ-%L3K+O6;&agBwzL zS+Fde2tH>JU%ajC=B1{f~C9o@X9yBEeCSOP+h|C;XqG4_tpnMTo;Zcs@owrwXB+qP}ncEz@B z+qRv2aZ<5u>*jR#y{G$(Ge+Ov@4t7fvDe;n&H1ci3gf?_qZEYn%fi?hck8z1>7_$) zG8R&|l3tR^hLjSgFuLfV+}t~m9@#QY^^~=rqQLZ+U0XZF0jY4h;O=YS?(PpT?Q6xS zU8|yOo$UAN1Et%?AHno^ViBS~G5}xJr)>CbgtLN!e%1g_N@7ZtarmtZPnM3gVlW?z z{&%qq*A;Wm#=-mgKk>H!R833>b4Vl(#PBQ_YYrriC4QpY1G)p3_+yT~%3rlmT^c(o zfyb!W#(A}Rgc6NEB z$Ij_yy)e4O`m{i|3U_RP>=N@ux`fBh31>IJx0rS=fv!Dnbb+o-gx0jE${2nMLaAru zBJ>)_a!OzoE`J0^G@64*!RQNIZUHM0-P(W%`2g7iW^P~n0FvZRO21c-sFx*9yz33x zBmAyQum2skS*d?URgzIeA)-7QcnhjSYD_BOD4jEL8U;dE?Z(sa@2{H#n46!|Nl=&G zLzmMXbH^l*4XDe1C)?@-+%eWYnMA4SpPE|+~;#4Khb5>F_*zHe$rME0- zv3So!<`JkTkF5-wqTK>5KV1Ry!gP{Nhsq1pw|<)1tKS@-knUmS&HCz|8>xo7w{-Gb z%}^805tl=&p2T>`dwtp$+_O)TfhYfq&iLSs$XCrldd9aDM= zjY37^u#3Hi0qg%baaAFz)CMBlobRR2ta5@Sl#!dBY?S321D7xISg@DP1gm~Jj)1BX zHia5pWg}rW=qa~&ZRi81u?ufQ2R~IMmtYZ>MJhq%DJ(NTYh~*|2gY*mKnKk7M*I?2 z+|r?WYNP<1oUh)I)>1XH3=uqw`2KwwCicKG(PAXYDP@}%_`ZMGnAQc|vOx6;qwzvm4eZAQd9tqy4d8*fK>Q|t z>U18P)eWtG(erV1ab01$aF+tr(T5GzV(Qciyg~VsF)#|^%kbEgq;Dt<(vbw9HEFYw zTizLTD0Ak^a!SSyItJfu|BJu8)Ba!wJCpkYHihH}C8inw3T?vV2PWGWGo?m!&lLZP z$qtFm$R|a0ANra8?Upu$k6Js%-HxgOe{Wqi)~+6ZAOB*t+XF{^=UI;G!EP+lBlc|} z5)e8;=FU*pO4u(Iw{!S+%l{X>P{4JP_|5x+z)<-ol@EpC{;+o%&AUL|H}KP-el4gM z?5b72Eo;g=nGu^>tF92luy`*Ywsufs&!&x z4SJyOE_KiTpRB8P{yqp7ZbhpQL=9|BXB(OE4HxkJU%xMm^!?zTAnW7;K8L?gHn8b^ z0C%ly8nDcgZyVT?&-&l|w<)=l^LJdNgt(Ndi8mYA+5aA54PqcY3X8vW2PzV#*JJjo zaVh7qAauFiH(_p$<{Sv=^>S7qx=?NaeUrcFp}W4o-JMRA2y6Ls*nV|E_hCbAiQkC& ztLguBgY_Xhh>kx_{>z5frFb*Zp9!KH47}CsEI3A;^ksx$Md~hlWBOMORu|UY1>F7q zv?%Tw;*>9>eg^a!>!t?u8vMrg*EJbv7uZ94oLl?@{-Anlz%$!TivQ0MPu<_S0%S+% zLwJBHvBGmsyi*NgN9&H=xAA*xAKX3iM2gU^iu)S#CI`%p+@1dKGm(2O#?Gdo9;65Q z8?=QLLEU=pYj*eC05_zr+P-(JE+uexzkIu(E{D6W?Y{Ty zy+Y|E3{(*b1y;%M2!_7S_#V_d$s!L02jj>Hh+1rS$Q{yvRBH;aQbAoe!LR&OJ+~35 zZy`HnH1D-VQY!Qor*gGL0?BAjxfl3u|I(@(KSM{&v@yuLa2&`J3X%q(@UGvhL?jKX z{6wh>Zh~9F9=aUvN_~|;*NiuG5Oy6u?c_~&j5_&PB~T4i7uTKl=Bz){=x=L+FT&l# zfd_P7CvaEr&L+rK_0Fd03HV*1d$M$b9;w?vD@f&m?dsJaRXcv=fk3zl(v_UFFOn4b zq|}N)2Oc0g&Njpux=8D%k)-*eNlhLWcM|x(0niCIVNdbIpL3F(Sw4xfvXlkNls)(f_9c{iopn ze@Zy%9^N>I9;1HOGm@1?&g#ns65_h!>IrHsq?7vE($Yau^-(Yw*x1qwjJnZ>!<9NF zZZ_6ea{yKxR{{&j3SB5N*Sp^;CIdeUjZNP3PWtdT_k(8A|KIVsUjcMVRjMjB17BZ zFJ6eX5ibyk+eo)Ih}(#_u|z%8dtL?mxso@tcl+r5T=ue;{6&4U|* zJfOGgQ!u4Ox2sfOHqKE#Gc%XO1-0b7WZhBbv)~?%8r*m+p^c(yVuoH(=Em;Xh}bb1 znTn9X8TnSxJfd=oVbKqDgh<#1y?ge|In1G`i>$%?B<-v@Z247)Zl!ymxAXJj5hOZjJu~&PY{4N- zX2DhqBZSAmOR1PO{iwuii55DMCl8Dj7=IK+e^lOoHKzhd!T$CoVryZQUN$R4wRtJR z381d(Rz%~lqKqbF|4LL94?EnQS6A`EMHSzNssyO1L=B5l%m0kg5p(GL=1N=U9Sbtd zP?tGJomgw?m&UaET|AdSh-4MWPabn;1tLp z8oSQvR!TJGYcv%R%Sshn;h0nOc^H+I$S}Ah(ABymJ|sTlY&FK{ydU=&^hq_Kupln| zSae<9GN#$x5OJAQ0ku#_S>qO=;M8%=c$wv(yRxI7BZdme)XtT$o@8p4!O@#8vbz}` zgbB?g8J$JAjglZa2@uH@w1~?2X9OS$j`?7ioH2}c0tgsEI!%eEfr=*edYZwtIVaE# z$^ecTNT4^Y<{W1Qfu`0EY45RIu!hvo zu?{*jye9sxj43^>YR3{fOAH)zNMzJZ7v)b{1;#BYpLaVYk?hT%xDt0ob{dkjk7KaV zvnAechSyO>jwK^1nPpv^N0ho{A1l!<;3AqfHH+xAjY27VxR+vXC9gFp$+{~{hl zZew5SBJg`;uiu=T)sQS;xmjTJaJ9&Ysb(%2AKS&+05+DW>IZ>0pKCdU*+3Mx=vU`8Vbgfz1Oiw}VQdm{YV) zN$l6k*-v&^OxkxuBx-k%Q*pK02)<^a9{t@}n?8tbVj5knUm-xk*JVc!O03>OdY;4Y_ zeY)Ucrfrq1#pc4IeIVWuigL#CP2xRdPTp`i$|?%`^YP8FEKK-4-t>BH%Um=Ezy9%( z>Z&PYNi|ePjpD@$XPkjRB0MAq^`Su`Uh2KDnAv@3C~R%nX`1}+SglyewwQ@2o>F)C z#oMroBah@~#fnOfRZMx7j*Lo6Ql@ifX-O3H>8kOZZxA84-F7@H9o9n&x7m;^3DQ$! z$aaOL)zMZfREnynReZCpTqnBx>E$f|KDI7(XAG#}x%JrulYGliCX~*1>2|x^wNL*( z65*TOcl3F#Zw<7V&vN_~r@oqd&Lzih-Qy*@t%g$+!?g)+wrGvCInL>zEMj{+`qtD9 z>Tf_=bV^S>9UrWgJKcmSBg*c(^px=#s~hZ0T<0d3F5JJ*`H__;Li+_lL~ln~5E>6< zO;UKF$^#GcWUZ=((9hOA$*-P>UNZGJ4POFh5UQe>L2^OprI*-3ibdL`VL%zKm;=QF zg*vz(?Wn?l=QumG4N@`k^1}wjd!CZ+2<5B@<%|%iYGDd{bdUw<49I{pa$)N4V}w2K zn2ro$L5trXth~R}o40or|0wK*$kQr zFHXfcc+&FAOTqQ=wd{hlp{eYdEN>7a^KyKstU+#-s%3VTC*MP>-J*)!OL+@Zv5rk& z`{iI&VvfjAl(xo~KdpO1<=}4CM&(1jaNjF+o>sV?R*ca1vuyZk`Cl(_rAg_Q!C`E0Fh{`m&jWjy^43~}@T-T7qvg*7~u5u4_mQi!Rq^DTGm%G5b z-6;OS>g>wN$5Si%D&3;4;y?ZfY>RK1rtf8qjajzm4^MOyfEUE$mQ441`7_Yt7ME4G z+a8@(t;KnDCcukqGiRCGfVyVN;r&zjgCMofK)E9HvX@&O5H?g^c%ke35hGxNd5Ylw}c2UiIJ(2m6 zMD5whTtV;n>SO@r;EMTQ7D!bFS% z=+WWO3+i20gvXhdx$^cA_=`?x{`@e)gK^uaXN+hH%^bHj*aeh=O>7 znUWpi0W-hL4u9>Dg(w{lUO3um z^4RlU=d!oOf&9k^OohU(haW#9+IWrA^rFgWUkL?H7fsUamEGs#t+@lY=Zk&M+hc=f z#u}_W#X0b(ktdQrQb0M!RK|<#{5Q`EvOUHZdq`04Elg*+{CFczBuA`!kr8v*!Ypl( zcQAtw`W2Y_1oz}n!=Ly3*9;xXNp#TW6u+H8UMrIOhQ+Tp;2sSRa8D1}Jhk8Q{rq}D zMSnoM19@=_@@jo@fA-9~>T;Q(>2Amjbw8{>KCHt&tWTHjHVZXAu1{!qTowvrZy4ux ztl6!@ek8~F-NUUO*hl|7*6MwO^qHE~;?C7B`M;MT~{IwTa`mIm@riNVICS z$R_Yng{})r#Ty;G1rh`XMiQ`IEZesk~5rwXoHOSi~fhnm`8`$oV5NLR! zK0}*(c4tiaA~FYsF+Xi^9D#At$Xp#q#{ed9^F6E?PKZy{c5rkJlMIfbRAlpMV_wi? zP3R+Y0Y>^hq-xN~CfTgY$31TwOz>vjRNQl1u4N;lW20!fFGw3LXJ9}sY~?~pQX_>Y z%(<*=H-=7FK=gO{U0z8B|8_#AJUGIwSkjU zv69q(#I(LxUH1$DX1@u!1ryQib(`IFEKmGF$XijsRL=5Yj!<$rfyH?t+Bbl)_IkNaBM0R>MHVTbMk}+(ciVyZN)n+0bDS_ zVl~&IS}+OA|IFfA1N{f<%sYA-y|~Y~_SICk3&$cbS5sQ;qIJG5EIUg{Uc zZUu|w__CjD4E$RNWQ)gsNh!U)$-eA+#?2Ia3h48)6j7yT$J>bMm&f8ngy#&T49hQJ znHD;)b}4Y$y5KD?cZJeHQwRP8Rz@?KZs6mVo909IaW&)uL7|$%$T6?4GkX>4MvvC< zGoKRunuGi~5N3@T4hA|&F!2|iQt>_ZTYm!B91-#k^wtIdl=$@n6n&QQkc+;7|T&98-z3Vfqlz#*qv_k?KTxql~J*hZEt$q>1z_ zvx&@n1Dxl+Kwe>9vuEBRmjeD;Bl!!IYXvy6$VyS%qfqZ6jngQ}Vy2F(QqUm;tZNPu2q+y52#D$bU&Z~`8cSC5@K#KLy0>4i+K>NvJoU=ug3kT*d$0c) z`P9QbH~#n_A=J6Y_6YIuj-DtY#nin6h6`!%?i1Ndb{zOj_rl;e|KU9wP@l`yv7Zi- zw|}BUlDikmz29JhyB|JsW!cJ|6%L<(sz?3guh0GYX}P@Ehh*>N2KU3d`%E zsPA7(7zav9#f^RwJyHvJ23UmA5x*QjyivttBdmXh=uG2Xz9BIrv$5dGHtt7fY|`n37wheIRL**R9A3LB50m7i@-}D_3d!{q_mQ zyY>;SuqVXfX^0Gf4RuP_IsO6ZlJX5I`KF05?9(OYV$*R~EDbABi%kt1QSECCyt9SG zO-()N07hcXA6^CX%Z4gii5n)RzkSU!4c4G3kxiNdEt+kra(t}Lkv(HUA{!Il$3PjhCM&J@>(wE(4 z=tO@iC`TIGGlFbN^7Pb2Lrm!kJXrdmIbvG*EvV*B_>RsF5fveE@;yc)p7H>?@{yIWD0$FiRQQdNJCYVG^`Iwnu z`?WW;^7>Why65T5O6*OyvtYiJRVK2eG2+Pzkp)xxEGLO;nUowLxw+@FJPQ7a&Z#ae zs@0`M!A!ql5UWR9aS&H;yAH9jLwb+Z12LVyQcZ6k&*@cAZ5NwVtuhTwdIk3RS<7OG z^^Da5IiQXTsqwl+{h9=ygCX&EuL~s`hIjs?V~r)~tipUGE>(?KW`wJA+3J)bbY%4j zLBo5qx}@6tcm^HXCQXY$X9QlC%CM}kxdmIO%EvGI3U^38lS(eIJi}i_Td_P;z9E^v zQWR`0;@XS-KNAb;4H#RQ4}iAxv#E3}pI7B?oKSoF=utl;hiegywslMNCmLGZi#cfL z%@v1nQ`YR1KhS!W9HCBL~AMUlJqu_UWmw@@W!j02{&cBEstr#&t4u8xs4NSr#ABEwQmJ7$!*0oMB9zV4 z=XMY)5t@jthZ(auITm{ft0z}kGbRE=*qYMnw-q5ukT8cABiIyui!7bC33dy$(2B6E zOCC~`$>u`7bHPf`i;#L|k#c$nE#SthIJthX^{?7GMhzp$rYiX52OvKJj$&f+rmAjI z;+2X0?J(ldnr@_`PdZyS(M@vWL{5tMi34MWQ)T;Wk*!?u$-Lgc z$B7U94Y$T*Be&q8z%4VulP`X`rc`kq=(a?-N*_f%F*P_+_W83!#|o`G=01@eE9~4$ zYrnjS%*yB~a}Z9DCa?9%6Gb1Cb&vKpKN*zgC%U6$Dy@mznr+Jlt!w9!E!Snsq;2PA ziek4l<%W_LWIt-)!N$qCta}**bMOeEpdkt#8W;_fhPwtzaKHqG_diLY{5|Dp? zvCC1FEtxgr=XHd*Do0^DX z9ZNY_l-}%t14zd>Az_-c&hk0h^5nl4 z$GP*QBXr^qEkQbM+zqgEQtdq)3A1PZ9=H&Y#y1e^&|XToahmP5!;lOJ5XF_8%!)Eb z@vtUvVuzRRgl8?$8TZ|=|9R@bS5u&4nnip#zW-CWF)9LIVPQ2r+o86sNe|GZKh&_w zeUQ27oC?-rSt(D|Y3JDiH->R?^zV{%()Ge6xON0)3~6uY|JsK-*le@#{1;tF1QB*K zKpk-h)Sgaf`DD?XT2rm9!o0w)w{W}D)dH#fgv5AvpP5)v%HL0#HXadzXdW&WEBuh zfvMwx)5t|Ow<KpZ(+j;Y&1m5XFHAGs@27teeBSu*wd9smEl zAoeiaUj%~#0d2zkx1^!}GF1B?Pm=$^9)GiHNr_#4K5EoAm~#r*PK; z7M-~(Z?_ZV)2JP}{q^JFV(R4O*_9y-+R%C z+W!*V$+eye3_M0oPHx7|Y=AR;BL&@S&LMjzjQ@S^CX0WxtX15rJ28g3w4xa7G`9{t zLa}`p^+8WVLSbg(^p+Uz@3IwI(PVGLP+R`k#ekeD=LLKE8kb<&XB^ad$M=eQgV74vg^JHouA6OhlR-hQ2)1-|Y1~vSrzR|K3>AidrOyu~b|9HR( z)*$H+C8||Z^ys!wCp+czit`|;7T4|}|4D|2b`=rb;5yK3KS9aTU#4gMSsvOx6vtXv zgjlFmU>JFD+X4-|e{Gj7(oo#l5uZbQN|IU%b+J~(O`KXpzxfAPCzvQO0*8$iNvi0= zp>o)8OE)2DhL-M40Vj5he`jp2nt%H$Xg7srcl$sL!phfqgw|krwj{#V&KOW;w4l(2 zXCA%U#AviffR{JDT$BESr;EbQKUO3(R)nfKu&e(@W(?4p%5;aMhmQIef>b+pc$nb$ z?><8sp`n*3R;a;ix;813p@g6OUw(8)9WLsx>7W2o{5Z6n4xZ5q>yv}1J*_K*CZyyAi zZ#X>5$HY*rN`|X-w7|~X_reFOMg)}VPK``jMN&4Wnb4?lFOE&pa!r0pFhZhPrEC1s z@=8H69N+lWR$j=mI<=H;_vOEp0+>uWNK|+6R_a-nj3-k$RxJ4`y42#ynU-(lD%O30 zC6k@aDO){i8D3>B>_te|>O)WJN9u$Po5j`e<_MS=Wb&ZNxuAx^-;D;uSE^Ofx;V#l z+lw(??f4su@tNH06Pih^gf-O_&+ZwU4mZd|HI;wVod`9Ta~*pIy9&}AC+QnzlGJ+C zQhayDCbEoX%eJ`wG}%}gOJ7b_m`~X{r*dkqbAcwmV zigt3Ft>#d}Ttm07M^vd% ze?Dh*(g93dsUyHy>G$h?Q7kOCBP2)I4wj3i;!^xVnHq|WeZ_v1<>GB$_C7cCQMq9D ztSjWpI(4ZTZt$!lW;4`9>b&qGM|mJ3EyRSP#1xa|LWUHa$g*__SE19YjVbv>S(t^E zsUU;pU$Ue(XTeCdyKwYMoHXfGOc{^rEGKwX&UssD$gFlrq$ZVv-B{%=uOt)dv(~zb zLo%cnkX}E9pHbnWE`P#4iIR7eU-Lp&H8<%Ig;RziIYW$+{VfVr+Gt}PW$)j}xQm*} zi&VI+L8x~uLJR^vs^&Li_q@j&*BBy~4)-$$&f&yPIb63iQ-;eM z&q(q(GJZiZbKxsSpnF;+9#{mY{^A)TcLo2@(l0zCyu~wzqdXpM+(8t76l9;N5eE=j zI?tP5)kA-T9^ou2{@pT^8?o-xB;Id*zFT5san{AW_+$O-ka&UO6mA(jYwG|$z;gko zn_oU(on{jk@udLtoZ_oB8U&Xm-|?$V(`}8Zm3L-tOE@N@mkL(Oef@9f?f=l*7@HOs zJAd+`j6coozoDu9cg^iTR5p|UEiL;0k}9;ElvGf@WD{ALdAfsB6hQzHf*FcLYKSQG zgmab|Nvvp^$xqB{O_Zk`hX+M1?&z3$&Z1_E@wdU`>GSAm@v1|>&Y~E&^zdJxegS;^ zpHH^p0I9#XgzpVcn%f<7&M``u%#9rfL^@euX-ScG z&Aka6-4%p+)y&I~nFgE-POFHe4a``W#mJ*EiIbcF>GG}d+4es+8FulTD3%;qtaRH! zX%k_8dM`5M0!<~7>?V^0x!jzzNl8(OrJY!^>hih8tba8@e;Up-5`KoawrIlzB zOOdNK`z}(Y76`5h(n0hTS#Sgp@gf!m9^GhJqT&vzVZ6~CB`7718pINOt~n=~aM(!8 zL0i11G39nw86~tZCpTT|s|?X`OfZ5o)4(w?A|}+m-*LgU+mXSw+qL0z*k)Y5jd6a} z$y&I@o3U8^#JWldg+g8&^d;Kk!sbPoRNVIM^$?C z2jAfltyetdr9E1_IHB0Ec$YlhlLR~D>hVw!Zn+AIzihTf91o*RQC5vchD*m%n&R{* z2r22S@UVAaZ?KKn#7{w{Eav4peD_;hRZWj1PvqD@qink0=z$dGC)KRSwBc@@l%v8s z@{t<`rvdfYF(|%n*A#1kq0>%2nZiBa*^90rIm|#7c*h-Qb?nOR{&8 zn`2+WWq#}0E+9j5cAFNu?vOAXwpkp%M6)a}pYa3M9p{YoG%a$aprFS_pX=k+3Fr~N zV{B$|lE=@V5jlsOGq8X2u#fo$nl+-`A|HjAnhLE7k5vc5XA;YmKLRP{9aiujq41r_ z^3CU7AGBUEgv}XJg6W$d2!BE!NZzsb)AY#cW8zjxa^IpW_1wBYZkMVdJMF*h)O|G` zZjXSxD?jm;h@_u?sx`k|A+5L3ByIWlb9n#FW`U&haEoujUJ6Euawv1nvWL=$nZ=T#r<##Bu*s9vxQEMOsR&D;!NiV2J@*?r_Y&yTL z(**sJqiOetm9MVI*O=`?xbkZ5EEls<@ATWQ>TR3hFQ59XAC+APC1SyJ!yMIkGbUnA zg)-Y#^f?6+pri{=MWL3!6W?iW`sICmdoXMQqbsi}{J#RSz#gmE@eqK3_VEAzcnJT; zb4Oj^KdprSvl}F9chg|WzP1Wcd*Q6kyAt2*fVsVGnGqaFgZf zDcbK!;6B}*RD#>JhTsJ{abNEPgP*vKiZOHf2!?RF(dPIp@HtO`!eoBZ-DEbS}vO7{7$x1I*$b8>2O25EJwo;%?Y2*W39%Swz0ljl$`!}LXU&%c?Ai_2@a7Z|QlU%B%?`{;o{JhAs$viv)em!;ZxKwa1Yo1!mnfC2zVAmTnZ!ZCyH$KWmoEO!Jer(`WFXq;w_QJAtspQ%d5mKu85v#2mh0$mcFD9+AXRB;%lRQBNhk$gR58cw^n$T_ z?_|!DE^)Rb$y>F*RvXV|Re|*rn2lwyl!%5XZUZNgZLxHO8GSFH21S$#^Bk{*u|iXL zKV5;E>rWOvSHSwZ)SPuSwa?sJ-vQBev6cB~7)uAAc34aH>7uy917yqc3{q;NYV_Wm zORQFV1Y527eTy+GtFc#4R_JQ#1SYY%6UTEZA_f@1B8b3(F8PeUBX4;_`HgZbi~l@l$cNg5@e}+?bkI3a`q1I&&eIx2vbNok@t(N_go? zjWpMOMTVN5V(Cg53mKe5dbsYx=^jI|wlwm4-S!Z0-5bkiMDcbKR5>#P6!>NawWgNy za<|R+MwKu(mb?NsOjMLfgMYm=&D_fTT5}^$S0x*UcrmEzo%-L5_k9T|TIeEhj{H{o ze+w%M8%S3N?nwdSW|f~6JJSYl)2D(E!>5;_&q>D0P!4u0%&$QGv^ z41mH(Zl$ArUmfof}&#**S5#@riPy=9ownvIxDLap-vySusMm^ zkL1sXmm=S5LD`E4 zJ}wUB7;FDJLlriq|b~no5iU zDFWi5PV)_NC@D7vmR z?eNg4TcNL!a(QRm6Y$F2mn?@cRCM-z_T0e}iAau;V=j13a9IK>V>*6tPGE$o+lP-i zgWRx$rQ05G_h97q|E`T!N(~CH+&Ub22CtouJ%0pvU$`ah-CImKtb9j3%-oXg`=;5O zWZYNht-oz<{x*NN_is|Uyhk)>9-REQonI!Dw|(%wK))P&PZwtO=Q(Ih4W+xBJ_wcN z2#^4uZyGe+2o>(XZT*IW<%_ppLA)mf9p@pFLXTdK%OHJIkrqZw7KY%}-YjU>)b3$`Zqeip zhx9wb5a^HHue9avoBrY#1URAXim3m@RAF zzJ&vL8{eXP+y7kLQ>c&Je_=sAyEruL7JS+Tb!E^b>AXF^;5eyFeu4FlGq-RM^hN1SlpE8!2Wvj!R{e8l#Tl?w zDQk4tqd%xorI`J;V^PH$xb7q3(pOXM7%NQi9m~dV_K=~OtMhXWy}HV z5xMLl>w-&Fs2jqMJU*tId@I?0ADD}8$hrjb2m@KW=*%+ z*}fCfO#08B{_Bt3tCV&r4PQcQSL6If9*k{PllM4rOV8sOImq;tVKURo@-N5Bbx0b^ z2k@l}NM)J4J#H+G+Zp}o;I|R(D@yuWgCRjY!UD1IlY8L@u%knxsOHgnCE0u#*+QL} zJEIG3xXDD;j<>96FlVv56Xokz41X+#t5yfjl3i|vzSmFgnMIVD5=C|)C^I-TRzirn zk+E(zR?n3qex$3V)ZogP4FZITPSe4(CbTaRec zQ?E7&-@gJLpb{R9zkMr!_*DMpQuX0e0e|y;IN*IXTBGuXOZV%s;eJ87V|AZjs@rst zs8$NjjHCB1#4KZtoRDpZXa5|ybK2C_nAuC`dJ zi1ZPG>BocA{jOXWz+Qcl`fG943&WvbwE&k)=&S}o>zv)k$U4I5#2T)VH~>2W3I_E$pX4gQ7cN+hB8_`#Ae-5xCwQ&d`UmH1qq^Q ziM?tmU$0UmsrqgTPPNdcs-WVHvo0~T)Uqv*4a5;u*MRQD1|fF@lvN^fT}3llLrw}iBNUJA|_85^<-VaM_R)2%TdgTU2@Di3@zsC^zVGS-urxIgOf^@7`n@uFQ z>+GbdSv{|sTy3>)e^XnTy>(SI0LC5c>z5zYqtUwAZF?4G)Xl$q9g=fM==HUm%HqO_ z?m%$&ln$&MJl+OkbGN{X$y>C3ji!(+sZZ(3v3OiJ4xF>N)SQ0VOy*0)_{k+L9PCYA zx4{MYg7W@jT|V?{9JTW?y|$@Wpb3s=PnMNy#e(GbE5}6hE@6vIojN^!cg4(V$}(m! zKNgwJdquMvlN*`#OZJrdPS}nX(ByTOv`Uu5;pRV5u0(m41C};y%NCcvEpWM$=q>Y=Hv$t^^Kkq78NqVqpD#&h!$D|+ls3QREC$_mJHhnw zFDf;mYAp-hWu!L5n8ya$p%}48qGn?A9$BgF_mu^n_ytNH zu#OV=_@+GIss=HU9w9JLIx%cw{}}0X&EgFo--A(1ac~e_qggJ zoXOOU^wov^Hrn%8nmOJo@L+&}r%SgllDF%_pye>kaKRNzM$56I*f)i)>vqjO8NCAquk>~w6~NyoNr z+eyc^ZQHhOosMnWzPU4Vr{??So4QkVPSvh`&i-fDda>5~tmlV4;1&uA^u=9q6)jB# zi%#y=SDSqCGa&26;d)0HQDMNEI_U#&a_^VzxomWSJ~} z)qE_N1}puW+}YXTNIMT3s4;qO;Nq9*@w*hGJeoAy=&Atvv^vkt{6D9=ScHj&({(r+Ze1vPRR1 zH}6~9FRU2m4S28NE=Rb5qCbz0Iw23*cLHT!98l51S#hq7^1<+Gc1WzFlA8>b#z~(i) zFJZ%^tL(sDpiwG=_cb7J;vxVj#RHuHH?a~70xqCEh2GTV4DwuQ);{%I4e)M)tgoPb z%)}ZDj*;!`)+YPCdmIZl(pfp|vWURoFbuVlZW}o`yuxspjY4QurFV8Cx7&X@XZdxj z)9UmcWb^Rr{kjhF+Z+E`(nG?dF8%)yQiDAt4(8O-iJ~o)%>v+n%;xZ+@`xrT@`7z!a z=O5fgOiE7|MGMGh7Qrb(F<=bqlhWgVb-+=OB6Ih1KxoFs>iHv)pxK7Y z#V&?_siL4oG;a5&pb@}Y?#XG&We{NFA?r5ttRs2T=8QBhPI~}CkJMT36+EP|VXb-5 z@_Cl*JiA;$)nL_@w)!h`VGJ=zR5?j)`pV&lVWN8Z|E?ZVypW;q$;@GDs-*%|9rZ9aAg6OP0D zR&CJ^6D+vw#*0O%Rv=+>v6iwX>C09h7Hp-(6b#qZQzs>LVQ&#nmC#-JlB`k^doL^6 z4h!}$btwAMirtIQ?hO+99@FyPI>a6~fgMbP$e6(BIB!fjQ;}E7^p8{=kED9QHRMYq zgCnd-Y6v7IObDcp5-Px`;nWjX{#Yze%nL4)Xz+LmaSJv#AEs4I+n5+rkTO2gYgiIw zSep|nK^A)?6oW+EESf+I-;y9q7|TQ)5$)Aju)i^1pK_c+fOPBB_wd8FSb%wM6@Abp z262lr3*Rs~I@V3!Bw-#i2Z7ViM51P!sE`-7NK4rN9D1r-LbEFjpjL3$VwUVYxl8*Y ze)&aO#Tbi5@*W<~8pd&IFD>3t-9G&Z`j1i==d1~_|I1xF{GO_*|Cdp0ZuIZb8>OHv zi(`!9y_prGoyo%WdiGd8_emgZJos<4&6aM4bpRc%9L5E@nJtcL2uk;Y=p7uG+@M`cUw`9c-Wixp%h5(@vCD#6v2$q56C6yZ70pp<0l zn$4Vo?rvBEhBLCyhOf3{lUabTyF-KWv{+H$lKGbPar19@VMzZ9L4Jx zk^NJ5Pn|s1Odr&gdYPSw{`Sj-VAj=5k7Wocm>?!bN$`lK9&_|}bAGp1))T`6E9O#+ zDuwP|MO0${{>2DFb8|o8!TuZysRjZbSO_oAb9eFu+~MCtO5l%Q&(54VhA@1lD?dGL2&o2>i}{Iy08n8|A&40{8Q!^ByIE zBy29MPSPi2UlK~-3u1Rju|s)?G2i1w!xJ2=Tkf%Hnx^zjYi+%Cv>wN)>W(tK}=PHy=WJZVD#JFr&=+iceO@s zysr!v!OR0>ZJifnr#ta7Z+*Q>tHTB4HGPeBjYCAi7>om?j8_ce#e3}PCkX6{*TB45 z%2i&N^5(U6-vv*?Z~!huDq5+dE$@|2*5va!jgm1024Kh`-aL>M;7_V+(-{Fi0mr zUBeVefZ&3Cp&}$Sz0&>=gES0|!5|^>&xNn~E9H>E{893*mHA_yn_wzo zo||L}Fpm>^h-v;);;xc;M*I%M+?#yrZoU(LDq_Bqcq*pwk9xXl;Y%I!@3_N~`A*6y z%lS^)DQunh${$V7ZJvJs5xQ z{Wqy-P|U-I3_RqzD#VSKHav6Na{6(R)L|n;?q;<%f)f_jRcNu!$;9_IGLoP_r%&4U3NMs3NE6HkRqBgfEBkeS=Q@pIpt zXHX$Iz2>vLh9mqe;1O>E#L^DL6l2YqZ;H? zZVap64aT4Cxtm$%meiUH`R#dR>4pSZ!oo~n&s>|E*?j!vgvP(9xUQgr2QEYemhyo~ zKp=PAayb?^EY#a9Hi zFiof!Xy(}X4wACPItBFv+J)wgSy`qJ_sEUmI4H16=$Do}qp3-!#aS0jkBeQiPqIv< z{qGgxxpnU(05z3Hxv_r3wB^`^tsv~k03i!N6GBQvnXFE~r}!8zM)RxnB#wY#G6A!O zU@S{Ivp8pAu+xfVDz9G}=0W9>4$-6v%d~=+WU4a{KL?NSNSA@zjyZPF=Y0LRb_D!RxH!L9hIzf ztB#S`{0(z|I3?x}ld*g&Aiwl;mf$nl@#e}Z66xkt8_;9%6zkq0ZK{Zoetuk85U#FV z@hh2Qew!i$;{}1dKk0}@`FGD!H2#xxVSfV|{2TN!3RgZxGO|FgAGbdvvlP{zVTwXs5)!e6C2KDQAbaEpx-Zq9=m)K`VQv zl*t>ex(R2musB4N&l4v6Mp?)OHHQ;b9%GVgAw~{*6q2`HG@PBCb-Aey5xj@DF`Qu* z?Jl{=ewX}J=KO^z(I!er*cFAjlFQYiQ7NZ~IVih>Ybw~`1Ah_{Pf?=kSE?ZLD+%Ll zP)>^q1o`QpS{|HfR4UftqKiA$F=r@gg-=n^4jfQc_oAU{+9!oq*heuhm9^rsi8V+M zxtz<@Db{d$gkTN@!HAH!DZwjOnz%TWr`L*7`IIEc#CfW^jKRzoYJz0!=NXe>-q5N6iJb1^tN`c$>6|w0KzJ4VHhKRQbmDT&PnY z6#hV)&-SA*Gq$2AurA&InHgkE(Jiqb?~=_S;}iZjMua)d`jr6>X8F+Eb2^VK$7g*> ze4guM;=r~_n3F+RV==}*Gq1GZX#Y9FQK1&F{2;e{XU2j;G`MUb(n0Qt!J=l^k2?@u z9&6e!VQ-;W+eERf(ND{4Ty;>J!CvZQWkP7`C)$DBn&LtOc4=ruRDeC|#Q?UsFR`tX z(HkL3TzjgrU13&J+`Gik9582%;=~2keIkjJ3bm=e&2S0Yo$yEt-5F8$hOr@i=|OS* zQ4MO-05z#N>etwaXSfl^EAU1x{>1diTp$~NP7#l5C)_?MGF~vB=9I}bk8Z9@ctRD~ zHGNz`>=9LH+e*kYAu@jV-C#G;LFAS4h#7HF26WR0xkDR@kZk&TLUHl>?H82U5o{X>AQ2GQ4aSg*{PO2KkM7 zq8lO!FNkP3no`7K;-F};{8C}5rNUp9LLI||RJK1MLvkxI;+JRx(DB*A^GU=DV(zpo zyfG1Z0}BSBD`GEgJDHYb9YorK^N`|u#1|yy@Zxas)y~4JMnnf}aRcwF_lDtXFI!@Z z(ncFni&SIoU`IYMM?Mu5FIRPSw*Z#dM>o=H8c_#H9+PrDZnAe*u9!d>c8&{_b(PGfezly`T^A z5unC><0ZUWW|DGeQ)4ddKoT2J@0@8{xxKau+pZMXYx~|Iz<3T#NvzADIx}zWcgDGs zRlRt~kFF@sPbkkbpdZL!pMk(Wr>CIHu_$ha!^V0%zZs~{A(qixL4na8_xaDmI6lZ{ zngWhqBODdCnL-&*-W~nFuoYLXU`gPWC4PEJ(4L~yK=Gz%zr=4VRPaG_#{$C__JWAp zy*NSTI0VD)C|J2j!0Os(VIqv}_b7u&zP{m&j+`_#9IHlRG= z(rSu&+2ppfP~0HeZ1a2BI*^`4GJ2N`*C0Ww9jLBp`!@ysTotz=pk9A~eP7}^kX%O% zKzIJ)$^^?kk=gz*^3DYQE$)|7)H@UVh7aaFoz%;=0=gMylI+Uq>SY7w9Z_qmxGjkC zEa=}Y>-Rgi7tf30E9T6kp)&T%Q;)0N6U|fq^f;Zwics??Wk_4*HgDYr{|S#l`~~!2 z+|=lcDyFJOzxej)?;H!y#qq5%N4t%)$!&+>D_v*ioH#DnLAGZ$$)Cx2o$73PB9nHw z7Or163&0-1xHs86A-{Kdg7(vW31^5m@gw99DF{?oLSvq}TDPf-Gro&ZXo}+DWg@vn zulVTuhNTtL-ar&gbTS8x0qCVCp8g}U?H2P3an;%5zoIB-?3FIu{<>9OeL+{35u$9< zdS-Al0o=~&uQ#K#Ww5{*nUyk`xuX(G5^iA?niU3y{?=L#Vr_!F*y3)z{8LMcH63In z_V-r4n(gys+S$g1LjE12Ao!_6+QV%>=3Dn6!_~AGxhTVBs5{)e z`1p2C>ygqS`S|m5w4tSEY3AyUyT{b0C-d|5U@5dTiPsLG)NYC46>w?N5HrP7bl;`0 zdR6Rk!i&CfB{BzM%pBD{bI8vMU-tr(5wgPFe<;uT+vpA>V`PQ9?@-h#+sM&(ik~$^ z>pn4~^Paf}$K(z+!*qpvKD%!b(NIbBzbEWbkg>_iQfVH+bNttk? zSv}8&Su}1GG;^Ea0+Dr`j!hHmaut?|L$g&7Mm7I2~1_jeR7&lL$GMgbwBG z;c&hOm(%fnI!QY&>&s;K#S7ZJQxhMF<9#maY-qHcl4fSOljY5UgewL~_D^l)epRX) zgdWWxk};ONK)wVVgma2{7&N7O6}YbA>;>Rlb%moFP|B;h_!BHY3#^R!iL)hRNQpyh zzKF;Jx{K5n{sjXSn3fNJ=Oi+EJId_Yy@({pWX%n;M;NL(Txv?(@W<4A;V27Pn<_pc zhT+b@^1((Dd+h}zD3k)xJ&8+prHFI^XezLBp@|m_1#Koal-~`B@xwvuHfr?R#MDB7 z?Db*=Lu8A6rU0iP*7|_mS9fZm%M(=%za=mYrHBEVK4A?yjmYu8R%yv%K?&MeBae`< z%Vk!nc=P@I4J|10_&cH5=MF6^4rvSp9b|jP>^;Z!Q#fq;wbjh%At92|Lwk@v9jl8d zXf`{zQRePZB($L5_>rVi?;dLQgjWiI!)}Cn;L_Vd(_<0;Fiwq|)*r zIFfDM7Ocg@)`k3aH*t6_A-FTB$;)|GGYiVHx&{ZLsn~i2agqn>nZeC%1 z;&yth!BI1cYJndthnCr7=W{)i=QAE4U80BPEWOG6x+@xyO^5Nrq}lIMWjn|3)F6T8 zZ3_UW89pQ$9Jy#hm2Nv<CwjB9<3PhAupsUMol8JH#-tLr6Ru;VGANsUa^DHS_ zfL2bmWM+v%q&ggWf9wDWwXkmMNe5IMr z$UVoKRxwahWaZe(z{;k$RSF7R{6=D_VWqb?WlCgq(1a<2#;SR&G0SDtiE4usAk&^T zMa$Z;az18UTNH0jSA|?^Tz9!-*on@bCD>EjtpoF#gq@(Vo>S|5QF27=rxEd%3iX%S z4WeShDu}I)?5QI{33=kRoj|H#2|Q(ZkJIF?6f&SN`NYtVb__W-;4-UnCRxwLs z+()F&peQsUWj}Or$VMD82KpOzalgYoB?puPLTzZS@Zeq<{t1{c+2R3)SFuQ5@`3^97|>4J_7z+dSQ;7~<(=0Fl|hs4=hs@QIRg)OBhG4Vv%1lf6Xac4%N zxi6q_$k7-y9sef-E9W^8x`DD67f=uMV9|l2t>lL3yCO zXwL&KO=``16gw+=^-9+TZ87VFzjEuDq#(@HOmo51M5_?btkUoL_?=kJp<}fI+Rx-X zXkN@&q;t>U2!ESgYYKIigKO4-pB4^bFeSjL8zHdj;w7PuG=sB(HfPA83tFR4b1vJs z7->pO)Gx=bgPSHqd@sNqP*xf8PuhQNfF@LGtsRXzpwpjB1*e;qS=Db?rj4kMMDdbf zoLYTil_hd;S+P`RF<|APxJaocAAi``EE!s4GVQ3-Zd#zx{XK zqoUgxliQV}=#_TPUKch_=MlxGhY!T&Z@D`Xi_fU~uOByO{zD3xgIMZ`YW^8o!1XH3x1Kn?-_k5S-YSq{u;h>eYxo1&+ zXhY_j|7eHg0{}4>K;qL(cs!8K+D&*A3^K=^ut$_48K%TTEM^EZ;|akagsS=$2Y3pQ zakmaWX44ILJTyO@o($t$J+KR_NZZFXA!$`?-z|hz+LSthw4w+lpJJ$6IxGwPjALnc z6Aku5_aid2Gs2lC@olZv6RmDaIQE7qT>&j;@EeBwJLehR>4&^;Ih`ZZ^_-a0|9da8 zBuphnm)HtuRVCMYfSzl6E{j=aS$HpK<1g{Leub*IO(sjfFJ=zVS|$YRZmy2?&FKdG zAcXHT0s>yJdkkOK2(${_=?^EJpK@Wyv-&@HKyrzGaDwL^0XgOC;cx6nIeKR^O&!UI zmH6Is#%_YnYx22ci1jL6_@Af5`4R3lH`>kHpdBLQdJba6c{J%doA;@A|H&ag)+6?2_tj0#DNPu0u~=2V{-hBiPK=`#_rc#u|mb zl?SzJ4jp>6CiAFfN{_fS(HKk9982>ja9zBG>-;=9Qw=4{;D%`X6Rqyq!|fTq_XDHu zd5q)YJgad+e?scprv^sv6E5`&^f0CO9i6_1vm~o4!G%k&87+!pM}azNPRyMBr4YJ2 ziPF4M$ytWWgX{v+)3oK_+-gqWRMJ~6nk0rfyHf!~j1IpCg*_sxYw6R>rqRXaaOes} znv*}_WtVNpG0*vC;yv(4>%DMnJ6%9|UWt53#(Cb!PFo7O@SbHQr>+V6*6M;Qa^@`S z3*sLSy)NQPWZS;`zq8^0CC>SuTI3X+9qqo+oBx-P_21hf{tf4Biqn+<3f^Dpi%&~l zYDSPZ>{X_TC|?Wuw~$;-GQ=oQZ!}OmU#+4kVnIc-LyhM`a_dwQud#~oA+y=`-;mBv z8JMJkQu!tDX)lW&-|fQhcUO2mz{`Pe-d4UUQLLHBF*jIJ_ymRu!+(Cqr+ypzP}G%9 zh`sHMG_spK$MG-D$jeC4{mlhNA2JgeCaHV(hGX5W$MC`zQ61bXck?9wQ4=;Ns?!K; za9`IFt}(bH3p!gOFz?LJPP@nSdr@Cw7!H%o*poKz#c6A2)Xd55-tEe+u%@HJr_sYs zFSmqim5m)CuC~xep({7oVMT}$MFrqN@@&X4FsrZv2x|>YI((EOw=6A-#F`+zS27cU zvyUN5na(*sT~wr)T2HE7?~YHC30~*wlsnR5FEhT+L~sZdQC4G)NrwGx z%`jK?k;;LV)<%*_xT#Y!15!We7NU&f!Pl4eNOSxph~&B9u7zAJR@msb{x{V`XrYc+ z_4Mr_H62GGDll~|qWfHkkVs#Zpw!I@?!+9Zf>bb0i?pg}cUQ&_{hc8N4(krV@ihpnKMlwHRk#22 zk@5ZBMEcNx5IZCEw3y(t61VOMiL$i9R74;l$w|O?U#Le=Dk);P32ddVyK4{iwjjPc zUBYNeF6A$)L9hnPaEn;1h#60T;-^SXE5QTeSEh|zYM=;j!Arp0U}Eu6>!tP8c3rs; zX}*j(*#Oe2MBg_7Sx#^$a=ZiOtxpbd7omSzLqa zNz|(;2|6Y&ZlAi!i4c2J<$q1Y!?QE5A8bR9VPup3xP4140gHq5k zTcgJpneV3AhtRD`PhD&}G~CfjhFbu=88B{>b~V{$VM0hP;WF}N!HLw|<=+r}=B^OY zVcXP69Fj%^(~Ud%qd|&QLmWq_k)2`SW~niTO)OB4FkZ3@a-_+wn$?tx#^yPU0W$ktKR zdlkyb)J%&gang$kWtuH%{EG?PwKlwXB52MUJJ+}~{1%JfHgzH2H3N6d+TDjxz0}k-F%PK5U05D|QcMXW1=Fk&C zr?jA+t>GH9qQ+AS6_i8cc`%I&UlqXC4)E;GZJnk%w~IM+j>$RfFzwxV9kzZZO?6i0 zpYY+!e3+@d+&|aTFyk|v;@*8Sx2%eP96!o)mQ~J`Y)#5D_Ffkj2X{2ZMYb7f+WPHu zNRC(@6R_1{GODr69GM$ASY{su;3`plP^?%+++;H~WL8OLcHrH-WNQ!eQm68S1$b3d z4mSKF*KoG%jW2Eqy8^!itb+Bq?lccEP3B&EVbl86)P*cbQpzUGh@V}>hqaM53};$r zVus*p`;*ZjE9gZ8&IW2XVIhRrbVsH;KiS;CTKB^>k#iUl=s*9d{8YE$!1Mf#qxSoj zg3$ecWg!0n7ZA{Q{0~dUECp>#WPTJLfK~m8OA`aDwY5c+t~1-5O%tVn&}_Vb{)a)4 zKYYItQz0^2$H}?KsqBp@q(UEr*IgeT$>vI;N`&x@KJR5(+finkN6**uJ6JEJjT*V3 zJ`(AvF||hOz#kaNRy}=8bZIR{`?NepsdzCbws>|lebR)~ooGB#5Zi0oji^rV7UV+! z4ISpGA?}};hp`4jbDH3JFU*N^Ai+NS7R<<~LMn`6FU$zC0)Ej_^iE_%g@=S#(KRjc zUwFPE%|wd9hq{frl)O0551}RgC}%s-kXzi59T^H?M0D0gNJF*T&t9L&9_dtWmn}~M zae&6g4#K<(p5Qj*OM0~sev4h`A$~@Myye7In*(&BiuAr=6f5k6+E9-Romv;buySQ; ztI2?$Wxjqv*ct5Q@87XX4z`Ff9-9D}9NZDPw*u|pvg}bvD8_90-N?OH(Kh~Kqjk%V zVYcB?GXvK_qSu%7Jv>#*wi=AZuL4XAt8%;j31;NFT!p_`Rmhh5)QTa=Wrk%?_g`~1 z{@`9@1SMuibK_<-th|0+qcO4ot?@ooDS%ZBU9LYjUp?(Eb0x?=ngd@D%I3q4LIb-8?Y9IoEc~Gcyp;U>eC

A!wJ(AL`8*2YoF*3|U>0ZEe*yVwzJ8SK$@4qFP zP^D(OYYkG4wrNmOE2q|N@ElMuY#X?xk<2=vl_U!B;8>s0m)5I1bKx9EPOa|H8A+Te zY^so&xOmVSVf!=h!fCQ`K@C_vYc_Fc<`d+!v!}~~i`m>OaqIh4<#Bj+`_gZAtlzKZ)5POIg zO8x$&UoJ-qUz8w+Lh2L{D9#(g=e@DDztIcM3fCF&~bv@e4il#OW-hFh;AR5Erjsy+o%D%dDOd%>OU%ZLE2n0-~ z+r#KLmP)Bny_IES!`hZpF%PYEMY3Th3f6ALP+bx7r7A^IgTRhH(}uaMZSh6%0AM<4 zy!5ci&>5)UR+W*nWJ@ga)Meb#(h3=RP;N$THc|81GIdw=GbzT3bq`pO$+ktjR2bu)j3P!#k#_7(0#mprZ?q7bZ5yd;i*3Iv^A zxL~aI2c7~hC#NivKQEqsv291`2w(R-)jY%~hxw!(2a2)EM+`$IzeitoD1ogYlUfd4VIdd7T)9HQJkN97)<#>oY*f zX&M{vwQ(s9=Nbp;i01%S>TW>2vN0!2K>Z_L8q77!+kkl}nK?x4K8alBs@JJzdE~MVQ<=Gy z?adc=`Y?fU=niQ79vihA87G3&C$d;gf6WI1iZV|oQ>&-8Sc+Qe^-{nd3muCDD($-8 zQ;{_%XAa%Amc!mxxGu|W&uP-Z!fv~@!B)?2?JZsY@X8zg?esO(yCx`;X|)-vst}K3 zrYcrcZCpK2vakNjuD{CSsInKxRIFL)0}-0KZjk^)YKmT^C5**KrFKxy(GzBA?a!xF zSIN)RwVjN6G)1g3%bC)UOzBc4_C{ftTDQPdS4DeYK4i zGNqzLkEaES{Su6~9&(77^zzI#=l1!r=FEv=Yt=p&3>UEE+-Ry7%_e&=GZ$w;i%q2} zD3M#>KANCnoR?UWt>Ai!I2B<%Qhw_7lc^w;D$!hjTWq>)0|8nfKTkF(c_TBakz<_; z%fLM`3_ElO5rhb1;kwfg{W?E51-3I11YD=D0$gWLCviws%`<7pn!1?YTF=)bfI3(W zcF*_QsO_1PR)HFjgq5Ufkyw)$yaeY7QjthwgM(2tLo&h|an2%3%1T=61F+U|ko44H zd*rK1P$R&zcrNy{-B|NeS@VH8%il)2$Ju6#`p_0K@UPbJ_zj%H49t45L`1m|MrmU8okbCdG|PT84@iKf zF}%*a8`lfhh8_ROt-Q!L`cJ*5Y&HCZS~I~>GoccDPO?N7Y1D>_XhFqVbRbRt^9yd3 z7}bD|hw{;{nuYn^?lCt+2L9;h%Fo4Bv#MX^O#}504mSBN5LGcdF7d9js%SL#5P=1% z1o^wBW??_I1434FVw=HSZ!xOCqT}Dm{afL)Fa|`47-wCJ9p}XZ6*XhB@V7BX1(xoU;Yvmz@;rSvLH|6l^vzC>SO-5YaQawrIslt zfw4yAv3qF&Z%deBWQpP`iDFgAtC2Mm_nvt3jQA5y0^JS&lMjhvYl-3>!cJY=40DOG zM(weC*TDBTn$+S%skJ1jFFrS)bymRl!A&a*Gag#yQySbLMOgH5=@Eu?iE*n zK4mn!MX$ed1+HZ&#lG?#?r~8wd?W?rS96iI*~N=`LGVz^U`a_%5V?I7|GJyWBs=*x z-al3;AkQegGMe2ZnKl!QTUOkoM0pHs*yDY?@j$Rx01xyGMk_bM>kdpipND(U?d{Vc z{JExd-|d4m9@uQfovX>a(kta^49^SQ{I$C`^wG3=*;=!B_Pcb!9glF?avAw4`W;-` z;VJa@ZiHOfsz=)CZm@yTuNE6O1Mm%@wV2r1SyEug2z(dF*9$sYE9^en;@(Nkq*8h4xwx|DZIl_6u_or zbYF{dCiX`inWYLPUz9!_V3r$|o$R@=QzmLaQRA)?n6h152|KfyUsUtWmMW zCj`*BreQhUQ$5E0_t(q9veDjHsBTK>v+w^UjWhrD{#rb3`T+Y*<4(T6IRAR}{a$$g zUA=D|+b7e{ha!B1KOf$Vg3=A7MUS_wA|@rK#m8*VM$^=c$!QOb5&?jzO0sE0l&nLqN95Px zNvtX7shuMfUjvyDNP&A(FuqiT-8(5q!1I@sH+g5Eoj3Af^Dt=r7-^Y2l&+BNn1WmL zsy6g;y1?LeZ0xc)!CIJi(Lb(P;3qp_Oc8mbN}9TG4;IgN@qAM5lGL%<3(P=o{WFe` zg?7q7@1$2Fzw}P)1e9=;$RiOmU(%U-z88NxZp?>+5Hd(`I{ohMYg8nFF^T>Y$eQK%_<8;ENyx+^#yaqeA)2= zxN$U^wV-X~S@hVM4CAFu8jW9FzCN4dRM%oi)VfQR#dVeE(Yf=N!BnG0wGC!{Asgyi z_ZpbU(W8&MWrjy%GxfS?#VJvf!!3`X+N%yi)ddf)04A+ayS)P4FQe$zsxa>jB-MhwhIi%5%9B#fwRUMN`J6h6{U zk*Q3bi#iZ$YI?PlOF>VH$w9=+ne(mqj(8oeIJy+oabPlm@Rz`E=8IttaEyhM=hvL_ zNaHWSMuzDUDRe~A5TTb4E7}B!A7JNW({2jf%U9$;)YYk?`E)shS)QziipKR%12No+ z#mRJb?+blO@E<1mJFBeN>>{L$?3~?VM#Xp96$sOlH*yenWMMM351fqv z3piLKAEC;qXEt8Lp79xS(kU*0K9bvNO-=!zlWp+fH~yT6Ppm;+gu!SDyAOgeV;~`( zg#At~Ex7+f(Jbw-hj&oa>}yzn1_rG8j*A(LI#!aXeHGIdv*N6q;yqw^wg*|J%sPSe zgMY~h@aY8jZpA2%q5i136H^^UWiU?vc{0S>h+iaG?t*fV>e@O%k4sX3lPxc;^N334 zjA98twubT3!AGjgd!9t~u8l?a@<6POh<{wR?7kuUKt^;-8lvqtS(`2np)04tWgPxN ziqfm{jDusevCXk5qs3;MP7SvaumbxfIloCV1xp2ItRh+O12&t2LjQl4ZO|oy^ z?+|OY5=#QA+EpKi8Xtu{gP;D@mt4sBQ1XwF{&$SDpz+ei;!RKca$MJ)J&dOjRRlayQLkF6d3=>ufnDluo)m z5U8s5vV%LsjcJj3m={SCBNGdSm{b=|q!s`Y>yT;V9~u)26;4*-SP&$O1ejzdYj#X+ zfrb)VK185!;w-J5h`+{K_MzpmA9GMSa>GOe1TXwC6(W~&4H$B-p?G%e2Tm9OoUe#yhx}&dYm23{Dm>1$;O@}+n);R+{JtsS`=o_ zFB+K$F@A8a1&Oz30qOND1be@6nv{Qvr0P7SK(i)K2FGGgiJMYO(AH8@qdQze;2Ata zA{2goKwpZsSF2Lhc6%KHQ9APB|z)qY1gS^OnCJ5F!_Gg|sN@uZAV?L~$ zsfwe#U_xpON8Jx&Vx5Q5Xlr$|0Bb@+DA|FXJns$awKh{_;WJ@Y zz^7;g#V?ggDt(vJ#!E|9qBKU;Zfmg{Yf{Q(nz=rBC{-HUprJae#6D6>0{Nr+qt3N1 zkaVeOStdI&_v$aP2X9=`^S$CRGtKnDJO z#+6@r8U%L%Ii2@R!J4u_0|mL!JSw)NDBpDz%i3nTwwU<7($Oo4m8FU@y6gRCRY_gm zyy`@Ew4>!^*R-=P+ZrB>UN+6%tymowabwEMwR_j3xO`yNJGA+ZYcza#YdHQ*gy=iP zE}{CLTgRb^xV;9?aQkF-+vE12^o;6T-e{KUT96rg*grqGW6;@`c7;2IP?EeF2El%q zH=g01_B*JxMXh#h82q|lTyLAYI6IbI=ieBl2}G;A!Nux-XqltG!DiJFg(HzP)9NoK z2^^5MKi;*4$_O%$-G*nDeny|8PHc9Qn5tHAbb!)C?gDL;dhU3sy`bavGHg61UDsen z*}PQ0dyWiV3y&~fpEh2vW?WCOxhiYl=4TS}(5S$^Iw&GygjR`ZYZ5d;l%W^_?op5KfP$YXkA?$$;zxE4Z2= z@2cgXH%{(3*2_EcAx^RH*J_7sHHAUM~JdbnCUFJobz-CNt@%HTN; z{$K&D!3H>hYSJ~c z@J#phd2#gvcGm)-!=BoAcbpI?1@-|F%Hb8n9G&`S_s&zYPaO zlQwFkfZT9$Zf0XZ9VdHK->{NhM2dp?b2~{DGtJZoQXN<<>_@YRRtej(6m7Jt(WvWTOWKUn9!el_`N{09dJ!Zg zCHxVk!w9n&KrWzb{3%j2(0G9rU8M>4D^K+iwGtH=jBJ9XL@zQu9`h{Y8h%_(a5+X4 z)a6|_7ShT*${Nykm&Q+;Mxq}jgO_<`tk#7&5N}%x^5~|S5C1`kk|W6!!a1_|R@|Y7 zDQ!aLkgPcVkH!d@k*(O-o?=wexihMeP+uX^Hyccd#Q>mW1Q77H5YdH5%po371Q zFB7LolS!L$f%$tGvp2bRb%c2YTrr#_uwdWz{~_!hqbm*8wBhccq4OqV~2)iD4)xx#xTjjTR-V+ZS=vN-wzxT3 zHGe?HB_@ZYH---=Mm4!KtEgb=by-y|%@~Sk(jJ#D9F$VYHVMzr+$>YQH!VP5R_v+* zq=DO{0$0##Ye}KhY8o=6J!w~AB^Xg2@9+yU#{^I&m=Eo3KId|3JwuzBF(_+}RQXQSb6cY+|XGfhN*CkCP-A$WH8@`AgLXqI&JKqLn^XXTX z)?6|MpTFBze@2^ek%{sOy>3%onY?`ZG}fr&;x7C08Lb1Zl(2_HRSKdeQXdHLWxAt} z%Yp{*y|&2lF*ou&@eXGP0qEI*#jUb7Z9dYV z@so~%XnKl6D%eRHdl3=m`o77ALsS#v4b-yx0Q$)J^hkgY$g4Ir>BV@&0M_u=SW{)| zqy4DC7=qtBxxoyk+j*0(7{_>wkr6%3gMPBlOiTLdt^sp!^1#aMz|mr^!Q2xbXW<81 zOAq+L)gVuWhG?@pc;^7F;$vu_wqQNEfgb+ffE2(@pcnIboWqjXt$oQ|@Vl~27%Q{E zZ(L9#^eI&9N(`Lvl55Tj9(bC$S12r91GSD3V?81}TZeZo=?CsYC~2t69TeWJ3HXxtA*yWwQl5#Ai8`LQJG%e` z-Z4cp>M3RbZY^<&0fR|=hpe5+Bh}jr-dRPcifBr9)=)*|b!*5jn}|K8S@L;;!%Up_8QUt9bCa<7whwzB$n%qKFg z&GyThXrMEl*&d35f`+21P=X@5Uisc9rN@Z8BA~h_hFqNf%UI5NFSyx-pE{!a>kCVr zi2w^5@um>6dpeY|u;X6sbpgBtPF$|->UDO0eya|)fitl(Z?4=93QC8a_lUX_hQ~qOiSB{1$?os|h z@KtZ(nY33niX;y#-( z>9j+@{IPMTtDP4GZNpIi!G#>OA1^~+zOR1NoY4oFPCmUUEL5atnb?7+K#ns%sTkd>5n_}8zf;NV$41t2tj ztI%DSbMUO3QdDv9T)t&q<`xBW>omu`iNcM`GCA49oj&7s{@)T&m7v^>I=|?r0$-lo zWdHL)@=M_L#W-~^{`XavsHSD7B!cnL$T7?TXHG$r6a>;JXi4YmKqWp(Q%|96skJgi z2<@7d6~ONx%fUhO2Xce%kE=h#AjJJJ=6$#2=ukx7F6;#R%a;GkUU-!4%~8Yzj zpm;B5Xy)<3EAaDk)fV{qo9+2w;85?Iy1$e+^HvOgB)hikk-^3hCF$GM4n2N&Ny?qj zZqN^Z;2;YzGtP9(oSkwn0~`gMIcgz3T4D2`J!&I<1NVU706fGjmML?_)h@BDJ$xQc z^p*mj>@EW;KsiI@n%%#N4hIgNzS=t|3~zLdz4bWaxWv3y$WY*CY;0@}q7D5I6K-zC zA$!d2kM0hFD4xAJ?BxbqHZ~N-T%zqPNVaxZ7}COB`(9R3h;lHY^)3Z3(M$1T(_Evu zns`&gWQ+?_^^{s9P*rJQ+*h*S08N~ePj?fGIcerOEUrodcn62KQJgb+;rcFCMw(XIi?rv!h~D%T$1T zeu}#$!a6I1P=)Zs_sSy5yh#k<*ig-j84PY3&p(W*$1J3U$cXV$sVM6Z!oa>p8m>hd zT(8!=A_rX5Vc5-R&*0*U!3fV_`*l{wM$s}vCDgN(sXhgwgAg61Sy9qFGHBIgXMMBy zfc<;n=%ocH-qbBhHras)3U4ds?77iI;-q828h%BADISXr3bcKfn|=9{5QD*LnTxfJ znNL1p8c7o+3J0kSHj^=ozC8(mnWg9443xr&@gre|{bcN%Rb)Y}`5}Ho;d#n*^4_u% z6Q9V!)iCH$pUcJ>>{lk=kLsVN6g+$8c>E}@M_~O&^{3~6l`%=Q1kB-totQe))_LuV=;T3l(~_+>RhAbp1CU| zYlFYH`#4fgKwJ^(5~_G>DjNTmGiG1mV_u@if_q$B+?pue5&TByc&G;Aidt3T%HtEh z)HkJGKTxa*EthZ*8xYziqS5U-lW{h!ln@@8m5?( z)M2Gn3jIoMV)_KfheAioJE*8sE#V0~dinE6=pvn9!wlqpM$Q^x7frL6s6Jo2kEtgo zh%XfS2+F$XNcFpIlh{LPQY7U`fV-QtL+1&WszEA)WV;rF95>#~1T@90rvaK`*Rue@ zL%NxODuOnmN!@S<-7XL%mf1rjtkXVH3%2+MP&};fbB!*OI7?zZ*LW81xgKPmkVY^$ znu~BcM+cMSITcHy#2Ho|NoU`0wyXAf8aWagD6+d}8za)R^5^A?&vRUuj!#5L2>sf- z;YMTW#^N0NRFY#KebFS!&$y~x|3 zcQNS|5@eB3sL=dTS*5#@i42^%}5lr;uA4_n$z!iQJIOg1zAy0#_!aRA5azR`FB)aY{;D?>a1 z-aRtLeO?a>K25Jqv7P?q{hU&A!4+8J zC$hf6Qw=gG)K4gJjY-@^fcZ5+8EYJFmoeXE(7--^VwW_(%dy}CQ;uj`tKyo>vMsa_ zK~)Z}SLfo{EBNGF(I0Jv>uqp)&9&-dX+`v5oY_3V%8+PnkXW8RUu$iJxjK=yBx`@; zK@Pzy3^#C;@b^vH_TXEN{WXhU-g^R^3COk8)t?NSq9$*icjiiA+@DiQ=LOPk^pE^> z=qT!GH8OmAokIGrt;iR9|N`+W)Uv|C}!3Vq)W@WNu^mPdp}3Sx0GA6@h2* zM}T!Id~kF?eRoU%M%$KmK_I_4_6Y*A0rJ_By&gsmq*z~)wnpLb<&oAWziv7!O+4f5 zLj}{jLS`0~hn5?OS+p079P_qGyC0iYL~=b|JSXTF;?+ zT;o2Zje!Vl*^C`m1Vgz*Zzla0@(O)HsgB>LW&lf+x2220P)@OgfT1;c=#YAE$eK-c zhIZQ)XmueVps&s~1%K}}T4!-g^S4GY^0vad^)$*lJqWni=_ zNsK1jbvMHiXzJCmh7*rMt+_{wxjyE>DNB;|hP{@&GbVAN>HIqWn@@xiC+o%&Yg{im zm8sLSm!ZUGr04b`)p!|3_+z)-j3^MHN)6!8ahui3_Bv}~EcFJfQ7z;nGQwMJ{aUX& zBt6$+lPql0JVzt{GSLdqpQK;599#9;z3qTu(a1*^eT4x9hA1fTM-}55iWqj=S7l;` zs-5r5;98UpLuJhY6yU3rc!pvk0<ykq}C4^mxhF=vhZ5_hey=xm0AutwDcbHva_3QYC)@|nd^yp{+mn*L8 z!pIvCH9R)A^&7+#wq}0+{3UP}g6~FYe*y>m1hb7ryy8Z1A^roD%Rd=_|{48e}4JqI1gL?+I3k*S2HL*ky zA0J^8=;F-&IX|~?1hs+ca(->Z_uzz*^(rBhby0&)-}GLG`y|*$=M?9Ln9*fVw6Bo& z@I%`AW&PB=VB`5j%N+t>_ymSH1Le537Fh;a&KK{u|68+-sa1xx=*te_5dEvz|Njf! z;Xf+1KIPGYVq?tGDw?HzMXlUG87%!biYs=7-Tb;$@(J61Jc-VOStTR2apGbYY z_=Ajshr%<;y_@?qzvELwyr&RZM@aWZRYY1*vKQ>(DE8@vbg{uU=B1{|= z`a*r}Zi0a<`>E$(H};-h1+FNHlCqyWX^cx zxlEa0_X3(OGDxYmrKPQf*8D~vbG(nx%*3gc#bzIhqlMb+vrJ?rLCa{|N<$&VTyqkI zsxRYLV%B0SL$4JPZUgQLKO-}D@w7nfQkM^!gs2f{w~bBW)NaHS!g?!36P@lbq&!#0_hoOweg#!LEi%wss=zMRdHQl2h@4JWw9M zY~gv0a4pGN6*xp|gARx!G@zkp*iNr}P`w7bxT_v#+q#C_yyVheMi;SoC=PoCFZvwT z_Iy^n-s9$AUXxHT?xjJPa7~DEDM?J?(Gkq$8H?1CFLee7mX+;yQY5%aT6=}5zfS?f zf=p>bMfguM8liWs2Gxp|?ljzBh z-5Tp@UK-s+({D0X+-?S<(MeWmdm$=NI-ny;dNMi96vOHk!EUEhtiB@>ZCF8#*0VeH zi>%D_7*X1U2v^Q5bDpN-(mKjq2i@v~sEhM0&&pZIohqS0+xeo#VzZSYtV8($xO~LX zN3}E^SZ=!6q9qy@!tCS9S@C7&wY5xmGKv<8Xv<#Rl|lM&Dt;k~&qIOE42_!?ma-Lh zv92v~J7oTmERMhZ9^)FVG1N=5GJH(Yh240Abr&a4IFweTN5X^BRtg?bW_+1xNen$)Hh($DlL3v{ zFj&pJN{?`GYjRwLwU84fvf@!;)a_Bxcf=_Diq)ng997DD-BD?{>ls%Ddfm*_?0H#B zntgI;>sPOhQ2Dy$O0Hl4l-aM8&#OnpU-9jWVCA)`isD#WTAYICnUMr5hV`bJi9Ct5 zQkM@uFY0vtO)srDnhKnW;{PH(6ffvplI#}Tx-S%ngFsIo}C(xXz*wi5e+!LBIH%hdaA<+&gAVmD&=bs zPtVy)cC5cr<$u&4W-PZhBvYfMq!AQ^YaSpp^q07;xWoxj=nQeiN(o-u3Bwd%D@Ru8 z_n@CyqUpuRH3dRIG<+W!d+q?ydH!tT46jOEc5HUCzrE#^V#U`L^( z%nNRY(decj;fm>n8li$VX2*kv7c=zl1^EDR0fUJd0;GssW}DnK+s$I1QO_wQWsK9I zQNV+(A46;Z)v4evItD?@ zA`W5IED6D5oRHulT}JSXqb*?*pj125YBbhE1k>Df%l1{6D$kz+{ibaA*<_QL3#u%Y=lY2sH5Qv_b7z;x%g z1QZ)g|KuwTinS5;@%}*umaVi*LUg7s@Ay3>CF5YQ0eZ6C32gfGfkko)TY2ja3CtU` z`9+Da!Bv#gP5F<{q?;|=k?qa+vQHnpH^jeBOtk%aF?}9$rJF@sJ5|j;KD%U|zCG?{ zF9pNffBVdBe+#*}*mTAF?5296(-FbnB^EgW-hIC%Gw9h2fWwDsLl8v#sX#4sywGbB zFhfwjB+6KFsLz#KKOn#p<}iY{RqWQ%X(1faPxYn}Y`4M!M)KHeH1h9b3ogG zUFMjKhFR}+-w)_92sHsHTr|OQKFFK(MU{6`jY5?EAe`HAM2oFFlG-0lcVqK$!t_wqJS- zp-4aK$}lS>5ZsVe7QM(YHO0TKUz<6^%?ydf49&YfRMQFt#?H4`NS#`^Nj;!gJt9Tj z57&?)s9&R5an4A%JVv)edf`Cf#=2^5m!3Aq!jz7Wgv&SdW$yczo38X=Z|zA%ihrBQ z{OXa%JDSG5%SbAs#=S@aOL9*11XW>H@o-16B1+qoTs_j+pUO26d5Y!HcZFY~p8_L9 zJcam3;}bkH97Zkbm-xLPM88dh>=b4eDynKHvzKa3p1tklMWiY^)Tz<6O3xZJ!tc>E z6{323u)Vq|W8$U|3Kk<_+oiGN z^G<_zHiy*i8IHt^C*T^4MA?+1u1-<9lQT66A^%;XeVL{+#6U^jfkqs>C-mhKL3-^& z_!)-FPU^A)UISAVK6;hZjB^>b?y7gzz1go@I$I`E)2wPbrOBfynweJOzRT!eo+~c8 zCQNgOOAN_4yRkb*p}0iH8{sV=BBg)KA;W&&xhc@8ujFi^Yl6C&5$3_PyMx-*0IfY@8x!;XP*Fr+ zEegpVf_q0c>{>_p9cUET3?X1o$Jy_td<<`#ik$PprIv;qdyqohcaSoSbh+hqKXV<$xYY!(s|-A~s`nn87=2%gS0m;* z$S=9?;IYQaZ@_^z}QsDJNLI@%(GN;!?!w?=;eGA zG==Ck^lcuwGeq(yEZ8o3y|Jj83f8hX>|M$G_{6(txHz?pA0K%}v z_XmM5>-`kS{}Dw0j~V|Es0um*6ivQbOius29Rw<$D`J~q@T9}DQcFpI!a<|@S73pV zEWAim*YjIe#5VFPTscbU&h#6zUD&L+6L8MDf6px0mCmf`9*Ov{8^HgV!?f+9y83}L z*{0Eh)Wbg3ae3pJaman>R@?dcIy?ETP+^)rNCY*RS-5&B9AKx>ze-tY7P5;A$J1Oo z{Zz>vcJt+h8W(1X^-`14Eu*jTqk_1avc~4Y0Pa$16yiobc`%5ZH({Sw z@wz5V4y8}B(S(9sVU5)W+wC#j!rS+U!j1GQCHWBr*MapmIRmL()kV* zTUhc%k}wZB{;f@FrJqt}KX#VJ_#}2^imh^z$hr&nk3pU7^>V7I6-a3r*B(2xbFMQ5 zXRL)%J08Y;>|NMJ)TpKtW^v+7>)2u}Rg%sfjzSd*t0C{XG&`NV9X301K>@mZs`T0v z5EK81I&W3EK<$iDznnASrh4y}$G}1`4})OR7~{RTX5^n)M?Lq&cV@7GYnCOM`x`N(4r5+ zbZpd<<)MvAgGH`NhQAAqpo^UM_8DlT;4T1x)iarbV{DC$dqG9CFQ;99#*(^eN0=~i zf3O}8Yr2rC`%4FURzTqbt{Hi1gE2cZQ$2Yv?c1EV!z04tq8J0BG*Fz{2`DDEXxzq* zmwGb%u0M6mC%m&y8^*0C1TX5=b7dM@D}2{@@^sNvHM-}fJsgTZd$M#P$R_;?+vFQ` z6drzWt=Toq-3$yoGhpr}Q}^&aoORkqv^$eKtZ-)^{&p5V{?6EfOWvX*yZ}V-idX_A z4sScs$hHz(7uZR@#KiCYrugq?q>Swj>kte;gPsR65yBL zMRvStFrtTeWBGE4_`v)3QT!e|yY>PZ*9H*|6+aFJ6=gG*hH{m|4d1A3Y7sasHy%~+ zBTZbf!WelF7(*ETw{-CBDR}HPX~*+WZKR&wPx9s*M;FT29kq(#R{ws{{{-F7p2VS~ zdzv)pq0Fq~U98x3CP}ZfT8&_PH;6=K?*ziqE~u#-PbSlKF6iu9rZXr%^oJebS&ITJ zA<6Bv&ynxfJNA#gd$3+;=krl}LOC8$%@sUn$Qy{JUAc&zDg^IBp%-?l@kXjl7|MIe zrJ{6<_VT0f7|jk0yp&H;`e7?{|7=zPyKV># z6Bf2(kqPD`8J-&!zN^!wpndzsC)pkv9d^{?+XA@Q&G69I)y>ZO&RnzA-JKsyA>Ec@ z&oC;#tQcCm3R{pk@Aw0t)O?CmOXGHy+~LVE_J;6N_FXV3XL@2s*A5q4RXx?aa#@0I2U3cB8e$*tjT$I9T@ZoH z*mJW2y5u#Dm#o&xfcaaE8)qHz}t-~KN0x1gB zHpspe8NBG@$A4}z|Fp}Od^QLj_S+Nk}r3D=6NSxB9kQHc<5XslQn{{bKQh$ClO zreQd60)jAWh_VnL@g($VD%^z7*#={UYz~jI;zkUN>!|5RM(eRS5}IJa{-^|F!m=ep zL`xk?AtDvj!mj&5{cVk5?l`?($XgzZh5 z^tk4%pUC_sYoZPrf-Atnjo8(z!ek*bkRdK~(f>*uC!Asv=Gvwx;Jj(0+FnBuLA5df zVa?wuPUI$(GJ@4ReVM8Y4=d$SKKO7O?*f_i<1oAWLCp8?Ml~u6ipi7)qAg&bYR`?a z(9?#*>^cVflfQbLiaN<~o7BRNzgbna-+Nift+0o15WF(W!P>sEDP2$C`~aYiFEvFt z=%&nm!D#Reo#siqLUvod$D!q!vyzD>y$9N6Ox%M>vGW}~@qtVoV0Y%Ylo&2`f+ge& z@mt{~If2*1_U1PXHpvIt0!Q1LM!!z^{DJqsiG2Q1vg`;34Mkt8VEStn(El&1K;FUD z&cwmV+~j|#*GR=x*;Rf79x1^!3{YQ$Km08PJ_3-xzo{VR($JyhN(SFd@s41+>G7mUqJC(orO>sfE1EJcK*`B9$I^OBs-CN*GFc6V zPUN0(ekO?~qpyF#@2R4LqK|UDz>8*%@47h`1{__`s+f%**$zIe z8}8~b)lqOk4}3$Q6$#=vc>s2yvaO3W&g|XJ3`{IKm)41jA#pdJYB1L|RSQFc#DYNZ zNwaN4`}xI|rAfKE1Ov)7YNY}VKa;B$TFK)DRdrGp3Wc13mBT!KW(T*s4=HgM`N3-HGnKk_*bV>lQc*F1st>I9B*DWRu&Z-@Q zRp68OnKYBqr0}R7dhG7M&X@lz{km1!yH==g-}=8~>HkCH=s!-2iY5le0%l)75;k_u zPD)M=CI;632`PKnDet3xdZo85j~~RLFY^yoE)QAOK|%czJ@uD#otwHMcO#b%Okc-V zUpfm~Z!@c>%q6#IfS*={u9v44?=FEyqWD?w44v6HYd&ZW;Pe_>N|pVzDEiHQ?qt!> z>3BJQfhAN_7k_EramjV~n7PSu*!FxJyx9r%2ej%(HDnv*(peHI$+-A8b7Ny>tgR#- z#*vp8m_Hy%_-@CKl8)KDk%<<=tX3M55 z#1&6^xa8we4s1}4`m9!Z;Wdd%dxjUsNA%Cjcmt6o{1A5bu5F44C$W{;4@%yOW2?8G~=Q%)DUaiWqUmFCqb=oMHnG9*UW5NJ7`Ll3X54T*bQB zvW1FgxjYsAXR4-1qzwOH5tcfpP7Lp{Qx= z>56q8o(f`VxM}OuZ3Fu(2@_qR1gbgCq#e}_@qz)IQ_Y2olQR;;``gNNM&qwP9AT2* zN~Ts!OL;;SLAWsTB+Jy{VL}egK@D$h~jq;$k#9%Ct5qJUzB>--S$!Bxa$pvH*Ee z*1f;5kcXqurYEvl@#)VZB9`sY7VwZNUV%L;Y8FLcZ%MN{A4Mj4OK99sNR$qK9@6UCxv;_7^%KdEaTL6^!lTTX?T^$ zrqvqT`8IOq9`e${@r zlpG8Oeo+i|lu-<0kz2d|z_HQgs2R2C_z5lQ)lP7*$$lm{+1V4K$dkQd7d2zL2I?>L zZPDLOGpb?8Rn$$ASmts~RGX-LCe?sge2MBS6nl|4^F^ui*jUdA2YEQAbwZA&+VyEX z2GJDcg?yr;^8G*|joA^vtV4k?qvZfD`1FDzDyPk$11`WmYFV4ODY&xzx6sB4{TdBs zG8OUPsL2r?0NRe1kU{A5sr%Z`g8;C8O!JHR8l4`ZmrvCa#rJ}lQo=6hpoaKkhPVVu zB0^;o_9`aCc2Yev2boM?sPe!P%m8MGiS`8!W zEKHO4C>h6k02X34NBtGtY%*HAQC4R828@m&dbALm1 z+re)rblP0QTQHC&vq(*yefGOHtcF7SF?}_)ed%+@%Hq~vH_dTraWde&7n&92fzbv( z2c0K6s@s@nQy1pByoOLAOe9(0)a2=O@>ruZ(CJtGm5SYQBOg3*9QOPc3QLl>Gjo`UphB(Eb8zTcorBS`p% zTrmUdOQR9%!8GjR$B1kG@k>Fo(p#6^U0^_+0s2Zq2yfraCpedF_@&5B1F+8?JQXOZ z`CnCOcKE6Y-3|$}0~}7XX{2X}gBBwu^#f5+ki5St`}=VFUz_9e7%fUjCi=N+7NQ{f zqlKd9aM{o*>5)cSZh%~98}&k6@kcW_?vHXar`C51fmV7Rs{@FpYQRh;XKlTdpmp;) zY5x_40QS%&;T0TwF%obZCAS;d?cviaVrWiMcvUD%YXVI(PHY&ttrw)`+UZjc?71GY zEqIHfKY?xS@vu#Sej82nY>lbAf0EB?d9=2GbUjx1`L=k1EO-K-n3e;1ceCE6n?_?* zgQ;8)N2g>*4P?XDO2+r*j8D{<9zQj>qZx2=_e9!#df#xj^ITA>ZbCgk$?QVQJN=Wd zjTk>^C${7~e|?OoY~RTqxG*6?7U>!o#3@BBOxM zcrP1y#Xl{A5nH!2>7V@Hs*vZfA$Mdz zc;w7>Q^H}?eVR0yy}R;X2n;?#wqKET9|6+2*-UQU!(h*-$h(Vy)t#}zcgu@=D$ul& zXxa(X&E&_eX5VpF_(;xBahbN*f1o)J57V-p@gPYJB1V|YYPUEBCEyApacD7zW?)-f zPxtm~P1LNvYH2>UC++nkg^73(XA9D2@K2I;l+m@o1XF zWOCXO&O5hfAKEa#@T=Yoq-L?u=N;np_X@Pp!~%$0VtL4@6;a|7H)yv}^o0QnObQ&Q)}+pe~ShGe6;6|S3YRf2ISX+=ewPU&xZaZS=v}C`gaD(^~XUOWqsKS zk|COmP=qhRBH;YYB)O;@gL|J)A(DiXyYgp0kbGPBgmRs5;xt~~s*=4gSMy786Asa; zC5#frf=^x1QJKP}l?IRNTNOCp^h{cn$qa$jJ|IviSqJws4_(B98$TmRE@&AJd&Un_{7Uob!q@#_!_LE@<2w_wvmN*ISwUn zg(1hY-v508Oz0;ho&KT^HGYwA{|DmjzfOUU&Q?xJCQd3}nB#w9hBCHa5`P}Ltg+zT z{OjUwZ$^w#%%?gSO5KFK~SXDTO}!M!3T( zL2TVVH#iE8PLx2uWD-w-L3xy3jM!cg+&oU*X?uxQ+SBG-BkA7epfZq?5Omk=Vt(S~ zCh|WKiMN$qIrZqxshZ}?6=PhZys@sW8IErvMLQB65XwC&Rg`v|nN-PVGotr8o3sbX zjxIEJo*okw3vcwNK``|};H{YrENnw;+vS(aYGifWLB?s~h2ax$gAbX1^Z~tL=qQzQ zs;X-vcA&{~<73+$?|$F`gTOFb1^(Oh#H-eLbo$c!Vv)gQE;sH}bN9UF=i08C_hBu{ zwe#4&l!kPa^GIr(HNn6YxJ-L8Ckzv?hM9oF7dND15`fq6XmAmTE=ZTcv)l!$E=Y4c{ZUQ2Np zC*BT8*x8{zdVeR_MTXIF^;bS9I7bF!2D)HyUnPGi)fDz$M3O29K_bRWwPS*5 z&XAn$pO0WXikD*!)8jSBrgh89%T9GvRy{U|U@Op{k_2{)%fM>o^;ZvY&LI}n2g?F| zF=XBBlFuGse{F%0ZGeAn}7gi71)J4(L0=Po<}x!5L;AHSJ#Dy!<039$Ks7l zRksB;g8MbtZ;Bgp-@za_u^@?}emP$7bCz(m~@h`KrhD?ja|P{9LfmT{nZSIb)mb5b;E7f~1zZ zOgw!UJOk`Kd!AWIYlcr>IV!jD>N*Zo-jh-{jehbme5g@x0c*ttHj0SXwGY88<*x}E zxQFTdJ?mV<^f)oy)g|a^D8ugAWkv#&*md|o;jfspa>}v1^M)qv<#3jd^hj1U1_Aot1yhi3H=(P+Ee(AMsL>_+rH(020=H;pP>u$*SYcMrNu*!64;P z$d)A-t5bDc00aq|X0fU@VU3314fiT}Xx2GSy}dIpAQe@O3r!UZO{%A-@O+(xdJJ()uZ1Y_@j*NWlPvAb|S*+C_DOE$%IhGI9S~z`)4UTaC+3P zRKWF=uAF^y2ZAP&4vtnTn(D2PAe*dbfhYG+>nCNG^|OWZz`y+VN;4x%ttPfp$Qu4h z%xvYBS4jyhP4%qhwpxoV4J<1QJ4Yj0tc}bSdW%!yVd}kUQ1!TQr>Yz)I}x!P=J{MR z!+1pT1XOyEm2rmTH|2`PO!GCvE2e(dilQs5aD!IB0oEVdb$*G3CM#^v(j^`2Rp8iQ zelo-CB+4tMnxfQPQ`Y&5$Lmo3_Tmpmp>Xai#>*-{&b{N?CoE4Te$K(4O`M6(*@goj z*$tdVo**f>GNp+ln8EX$PBHVArD4Xh^*=+2;w*RCMMF;;X*UHidu?#+`vsZCnLSu< zXtIBjTRRrQkoM8dF)kV9TgA&NcDs#`7?CO66>p5S{g9Td8fl`pSQh2Xlvx&C(;C7o zaBAyhSf!G;S9r?5NHmuV!~W~eY5>q2511B!F$0Ds;o;NMAVmnwUer5tN$H1?(;UeZ zdPJDnj&14R-`ObIqLC+@$YKI?S%NiY085$Pc*+sR9t_A!jT9X8f3)m*b$o}7Vy=gD z=62cA1j{t*LWM{FOvg7oFJ*!il9GVEh#->$6@?sw?&aiiS(5IYS3aje-ZWw-Xnx2R zh53;RNE8K&>n2@D3d4IzlcbxecEGO%;eJ?JAL?A155S^fcgCGXs z&1|5qwP|XVrpj7NjOCvlkq0nJE!}>Pd%d319cnXI_YVkC39(R*)MBo`u0~{l1FdG( z?qUNoeZ>%=dcErtpTjGI)EfN#l|hN^?g>mZu0=eAGlcFa*~avg5<;SY+Z+Hgd!ldV zi6GC)b=P5K3FQSH+P4K=?t)v;6M075jdyra;;D_wVArm8a$-Jqa2=R?&?2*xFhW3hU%N#la_wvur!N3k9Z@l`Z? z&P0<9LB z7*11J#Y%E(3gItr1e34$r|sT(k$aaYY6b)1$F)Z#x^Prk$BZo%C`TnI5+KgW`@s6g z7gOVw*=5qYHKG;Khx0$+bKWHjKg@hB$Z*j+;;%LAMgbHCk-iJB>Qrq`vo`x%CHBJ4 z{>H{fcfirf)^v5HPTAXB34KxLS?s=#&+JwRi|@`0vi>vF*tY_|Q1$c%$jMD+t?TAQ z22x&EY@ZBiNEWLAh6BG^AT@6o9^!ZGtA81&d)=T!;%e~3VlL+Ba9z~(=i$V`xxF;k zIv{Dw8B7^t-kTX!|7BYNkj#oA>p;@J8Y1>nw|=Zk1NBi8&G?DH(!`7U8N2yd(bMXCH^ub3Ai#)NxN-`IUe z#DC5@rU)2t*%naUfJ#AA-a4kVt}l3d&)0bi%+o;xPF+Pvs%A_*Ui zB-vn+(aT6~QBqnBoNCb5>!ez70F^Z+RU@C@+__N@?Z(FSAY@hEAd++}S(DtM=c z4Y3NG4Eq*x`no@F+sHFch{!9Qk5~ibtzCU#Co}PTB33w6=XBZ=G8Y3VVmTMzmohX% zVY@m*@IFcFKZKs!MJx85$B;q7g};po^V%SRhd`s^=0Y}w86M@Lto9Qd_Zgp|&f4)S zOHx;oj3^tV=A#igPl<^1>%WJboxyoZtMQvD^wxigCe(Sz{|ayI z04bbygw}0!Em~E?I%UG`S;4G9x@><=)lUfW0QYu>b_)c7hId5O^`9a-Gi>;H4+IMi;OLbh|!>ihx?3uf)L*ytJlN6 zJ^IvdEo7IJS9}YNH)1;vj8~Mvm(T|0W*E}+x+G$9M;yAJqhGfEQkaX z6>}6eRME}8vecTl)W!^!!g|uxu()x1L51gvrb*XWoYvKbiGEFgv|4C_-gDKVLO+Qh zEpx>%2CW@;C(0seR86R8;9Vxq)X`v!3C?5mil*jwcY@!bYW#Msse9B34s&P2{NFF$ zSCFqsS$a}$wmU6dpsYWRRFpvrET9fvt`{jwsT<~5WYf{&mo?ULfaiwY{BvBH1%MW^@XrTwkRd>ta}4t@^vpK%pNc z`GVBT%!-StrA;0qTUFwHgldb{gtQAXJ%y20_hB>LuCHJ4lVEr9ljHyqxL)rcl&lC3 z-nDhqEWrKO zf`!LgzH+`t`R3787Hea(-UYNnR zT(dMK?f+BSm%zpNegBUw`B+P(M3l-BEhM3&y=Y&BVoXmpnr1Rfis&=6SP~+>*<;8S zq7qpmLTI7I7P6DA6xsjhR@3w>)AafMAFp}M3-i3+=iYnnIp?0c$;Ex*P3Y6Kg<^jVNvhQ z6_q1$Yc^ayQ5F)uID!63S-FyG^G9i_lwtTHebM@{euzat6GX%SfzDdmB98 z;xwEsJviNa$PD8OgR-r66fV!XUOL6$k)i&$x>pSZmTaS~5BIEL*sHFdkG+y#6hACHIOvW1YI&a+VZD0tx7{__%r$I zg#A4eLpTFyV`FG4%^PtfeGt8xQvh}XL_h)$oM^GV3oq( zX>+zz*8iAZ*nLrKj~T3Jxvs_=nTo7FnR?r;3y-A@35^OfaL8M*7<<3PL{sy8NkeQ- z*8ZL%`+u@hCVM0|I6P=zZ+iTD|M#9h`ZqLPNC`Al+3gw{W6XJcYkSm}pbMN`4eu@< zf6~1)>0(0NfTM;Qu|w_Tt|^;x`TMVUZtynT|1@?5v&V#g9xGg)T5xcST!pD0oQhTb zkH+!K15Lf-M%HcCPPdMn68kMSv-_46--_y%C7+vjsi#%bd{w>AnvT=P-mtf73Q?UM zP@icyEh$+0d#v{E%`ZGXeli`WjkpoKKYfD7B9p|DnlH)GmdU(-E*yM1)8qHc85&Q| ztvDWA=N;{Qsp@5<<)y0wcJ-}M?|LcY0Jfxm@6D4khAGPPA2Q;nhds(l6tb3-hs!mV zDd}v?-C6EweU?!aWvTjE*V%W^xLsLyhrU(&7J2yjn|mQAN7SYsO42M?iX7 zL#iEJiW_RL^-13p#H`NhzQuUxs$muB4N05X&U|gNYgxKeeh*L1v0Y{zpm#pPbH29u z*?m!|1?GdEczm4rh*dOGRYP!j`>8MI`?*Z{+DmP$AY1KPachJ2g(Pyiv*_Jl$$fe&f`>r5A)_?xvl%d1EX?kxIH1^Wf z-f`lT%bg92dLPa0-TmQyb!8*|Vbl2H0T=c^dl;Fdmb~Wcp>ru~KF#-vOL7+;UZFMb z(uNN?bH4xDbock*_#4j3M{-ttORFx4$-81bb;9#Ae!2(E_0rtK?gyw3-FE2L#Mw)) zHL9J+IA0k1c1gV1^N4FAhVs_%$+3E4F0B2euyysWNY`(BOv+D9D$5Jq!(1l+#CKx> zOWxOeZh=5~(q}XG+0Vv&ew9)@VlDH2*s+@MizXvO{mQfM`)pq`?CF6ugFb8NmHRk& zDrk&fZ{S#Ot!!~w;PaOK)V+>zPW7^@*SSPruU|?Qo^@k(`PT7%SzR@#(^I~O|FWIGXS=%L&27il+X@n~hccP^Vh;cLv1|t(%Ulxmcq!#U;|jJmj$`ZC$YE zXy*V$=f&BDW}~8b_qMWv54dltz8Zc`?RHkyA`So0A$nsLd+JPe+1D^5OZTf|R-tj~ z=nwkCD^9+@IdXNPQ&D+_C{6j;lE?dU@=s5{`L`?%3*KIkf2?d@!^Hk$d0V3&U%t}E zC^e|J@d4*!{f!%oBK#-PBlCJEyiRd=wKO|_gwB-d0nhAx42}ApzBfpP|Ko?^f`}Z^ zy!Wy8$w6T+XL7eEOrAW{MrB5?d5i}RLFNqC%5c^2yVdFyJCDx{Oxx^tB9U1VWAW`& z%7j5t!_GN5xgLriR6ap1LQz=x_mFLIqv_RCYmW_@l+y6Xtw>WZD~I`~)@_Nm;j+Yo z3u=$O)XZ6THe!uqk@b;}F5OJbs_qUg8EUfs!iz#DdqZs2KyH^)1(gABgY2tUoWJaR zHYhS!C#iDSn+5$XYEIa4SyM`No*zX^?13f{O9qnYrXECZ*=K3_VtRq^t?ymJI)vky!D8^kYm2GQRhm1-;`6E z<0^g?H4S(%k7jkjSTtvH?bA`FKE@?hb9FuAPj8T0Rx`!S>F}#TPZi9HG8G?|UiCKC zznD<0(oO4O^n^%_nj@on&$T_X%HGs#uI&j6#i9w_6m&|iblq6g)mNd{pxpVQHFM4O z7FtbmGatWpo61J(FsIdHs@&{18=Q@IP+O2vRup=0kZO{T+%fthHPNCsU405StIx8^ zTdFmaw<^c&mSzHWXSV_8x!K7bqU=4R2HSMAb&^<^y zJ1j0&J~hpJdg7x#Z#UL2J+<5R^eJzBg9bAEtwq{?hiEZp8uRl_UGtmXX0B%_SGjr= zel1z}Khq+A%w)}ZY~<^DPK7cn(QHG3?qqiH`pK+~rzY`q^O8On_&-a3-Anhc(z~Wm zL9bnx&zm}j6E6lT zAM4JS)W5E(?>0SgrMz>4)%&=6BeRY>G2ew+eQ97h$+O?v3|z8$bmQ-%4%tgLGmAyL zXX$*&#*e75TK z%_@Fk$(d_BpkAY{*W43Eg(|+)*}Wb{cjHI)a5Ag*!y+!WTk?p`H4h$A@@@}QQ4CZS zx|qq?*2{97ql=w^ql=C0EPW?OPp@Te{{1cw@3Z{1QUGnrMBPI5H(jEG6BXo3{Yq~= zoT{=eKGi(y_m5@HfAy1#Gw+VLxNwHbbLJ`KzKohw_Ab3d_ali{c1AlaAF$4}zS6En z+bAwg_16A*-H(NOr(7;Scv`n2OCv?2-dK=!?|<2vep$-B%9n>!@~aliZqR3c+uD7{ z>5Yw(pO%%EPro-NeFBCYtq*!H68B#7p&62wjX>K-1{RL~+R}fB(3_Q?6jsA5 zx>7$HO$`Tq9mpi*X_m{1#aTdxLB(@g<510p8nglP(ca*QgpZ(>C}8ZkoG>R21FfFd zZv7^$)@&~;BKf}X95xdSN>9y}Q~kx_iiEqNN;@W@7CS}nu*(nVNL^tmsk#`hxnjox z2N6*a6eKo7MA1&|rS*1&worz($YXIp^Cpsjn%AWVdSI>V6Pz(V-G9{`9A$yJEVFJocTj?Phfl@~p>uf{zjYT084x+_Z(h|*f9QP~Fqe(CH;5mR zFlLK1K%PFFw9~rOo!G9K3s>bZ0c!{tNqiq4vW<);436CUkHxJ-iN#5bD_efB3;aK|m+PmWg{wfuoO5A%}A@FmmMO-R%pG>}K}WWQGX( z4hJ+08mR3N2`^?-;Ii2m1Bt6`L~a)ZH+S+w?*{;<4_y&$I1oP~;ojVi;H)`e;T!=w zu({vQ#G40@haD^2NVrcjl35)VNLic9zxpW&W!k5Dhwd5imYWy32-Tz!$ z1-mqryU>Q=@GWk4fKLWPEq3Rdi|J|TyVF2Tr{ch@eYy}0C#<$;tyw#a&KGbo7Y^St z0=yG4RUN1Xs`J%LU&?<30zQx-uP%N>LeE(p5J~oZNNda|UV02|(2D}_SkQ6X9+7a3 zU*~|WI2;y6XG==gN-Cv&t>ab>(*z~=g6r+$c}x60EbFjfwsApMtLIKm%IgO9=5BAy6QJ!uBI=*oFez21)-VMOhj}6C)Tw zG@9wCF0|1&K8NT|@lki%@bsh8z*N!Hp*P`eO#QP?!FqA&Y+ewD+q$2oy}?ChVc#vL zvjDISz)EW1#QyP|3ZDn3qw-r1*(YKh>TxsoAvEy=h|hF!SVvxxu>@QmhwH&v41F+y z87M7GQ)!C#KMXGH3q-qU-Kh8h8~c%jiDI$^u<=|RpHW#7RA{b_<8dYEYRAF1;z7@R zl?^(cx}^jOPKnP!+1`M)z=JAw?@ClSlB80ipSej%T_V9Sj0b7)pi}zE1~sOZbok%p zpBVsJ1lQ@{LBA=<2AxO^dhp+qa_N+yyVYfbnoxs28c{I72S9I;Bwec|8*~yiXvy;P zR?$6aw09(x(j6@u)RY?Z#O7J5`q28jAs)cj>1#vTpp&UV7YiHwoS|bb2HT16{IjRX z26g14z0Md60U52QFcLfL?me-aS3&2$1ss#bJqx}?!f$4s#piH+nfwrIUy47^P6fR!h9-bKK-(h{zWqRE;4pZ2 zC(d)gSTOLSmj3&ofj15Vb{1gc6AZI<1tut9*qN84Dd%jpAo7u7KU5CFH6^sKrew-CsbAmjmMAC49-1f{F!6 zi7M!?T#tHz6ApviFf@GIBNFylL5c%xfy0~ppdFMTOva~NDtdM&ItFJ{f6X~%3<5+nR0@=u%5JRgvTzSH3LEPeXLSuY)>03w4TbeZk;PvQpRK=qsBHmVwLFfYd2Ir7=^3 z49sDBV8Kit=oC1$_7lKFc};wdk9!L>bQp$9`1r8Di40gcPL9=@q3(!bi|L)qg4JkV~y2X9cTrjrTUX_zma4{^7Y zsP4uwj|CMV_FhmneEfOJl7#9;M}5|d!?9upcaSkghT6`Y*%ziYXy@UB&vTbrlW{@2 zyy)CujKad8^z$EHWseM~*Xz(!_%U<34H=A!h10oMpk(&V3ROU}b)>M`2w!XM{X2`H z5)y#J00b64BB98>6Zp35KsRdhh`_Iv^5-OhZ=S12^!_1^od5^9d0?fertc7X(o(-Y zCG#N5e1Yi1Y`kQnQ>${L+>jfkFhX51oTwANStQJM-B%L#QRDt9SK?(tH9v%E#yeb2 zen+^{%mONZT+uGI&(JMgeY+3>g22lZn5~n&)bfolUL^Pm!9{maSiF22z!MYF%WYW& zabl8;iR61JoP7(KEVK<`h*+=S8*-f?WK7Ot6a)hseCX;HK=3#B31 zM6u~%OosMu2Vyz5qRVGN_go4)C8yX@IB` zGa1x)E-LQ7Pr+p;hag*n4}9g9k?=g-otmRJYAA>Csqwnty57U2Djw=<3Kx(V453Gh@C>xpy zmLaq~BB3Cy^IT#QYL1?J-^MsOg8AA^oNx9>?<@y3a)rX3qfrpw41z9)x4LgWlaawi zurRAAK4#rAcMrw}stzI(YVcQyI=yS5LSUYTplrvQ$l&c`QEEJ;0rA$BAn01?#CSh> z|2rA4^}0D+j7!Ev_TgB-lF<{PQ+$Mq7~a-^$UZEPmm}I7iA$3*H{M_|EN(YgS2a+I z(Kxh1MB^MZ(l|E+IbBB$DH9Ahj z0*h=Yuu$NMjt-I117iE;x&=+A(K6$R9k&aMgoaWfl4D4SA?zA0Blq}mG}@UEVzz(p zQ4&;JFxch>s7vd}>T+uisNh6s6nuk(Js^WZIknLM1@c4!2A_c@>8W9Bl&_f|2U|4_ zj1_(@N&iQbu+%Ug{P#Y(2FkZwp4hh=Ye_Jz`*2WTg&L*fX?8dZ#5N7eJs7MYzPrfP zk&v4MR1{gu9v3A!-~NKS^jWA+ZJdICs+W%I3+7syq0l*N6tNzVPQwT9l`(hjOHXHuig4a`R2vKstpy#CqOZuz-O!&1HK{8EFEOR zIKy#hkqezKWfc+@Pwnrq?|0Y#D21|g(fav^hDbQ%aRJI>qQ3C{i zOcJ`R185E_&`y9hcy)kWX|V1g8$?Zp4}LT}`MXr1gW#4~8*G6fxC7wPzl`nC=m!He z#jhp$EFCzE9_fa0(eyhqn;oD(S?C^d2t;mzPkX%(2?zd?DmIV9qH~!%XW1m=quwPs zbfj+zzeyyRco`~Q<&a(OT5C|U3#!5#ssca8a_kVtISN866t&725PH|Ur=j3K4)A9{ zg@_-KaMIt7BIDd2~2xXdNZe4gPLLk8#52QhMJO)w8QZE&1H-DGmQaM;c3JD9L= zR5GHH!6=_opM>nK2{1x9-1dlsVLkp6qYR#p=DEBBz~cct_}S&4o-%nnqu6|UWOEoU zgT^C2wC**~pwq=5JKOe%gp6J?X^@-e2>3E661SOdK<5?*1BGQ90n&?|y=7CN1vvEP zWr`kffYAcTi^!lmSwEDj12B7rW81-B%<+POOzClP$+@V2%&OTUDykfYk5)Ls*ukBUznKVzr%YJ9AzoT) z9fCoMki0r2K*#ds+NZoRSnZ$c!yTy{2vKg=a{GqGCr%kJP-Q7c;LZ1v@EYq@u1p5%a_DG zfSRU9<55$M0W{h(NG;+upm27lXl7Z;q6qtS%s&}4;2e|&PcbR9lN7QVWoUgsE*~gj zLCNs5JVV%>q-Zlt)b%9TdD8(!O|PI3_<_%}@Xj$XrA+tK9l8><2t2}k9b#|a&6kBt zO3-!K6~heVkE#Px9{2=&EiL?47E@b>r$dGh8`E9SK?Oz-#wrX-@*q!18`ywB_e>4Wkde@h)VX|hfv;pC@)^NPifMSjAuxb4GsDt zZENfDp{q>+>o)>d+CB%QA$Dj^x4raD_#af?7+Bj3>fiQ=gnf@n1MDEZch4?(wh~BYOz{YTS>iDibz1b`$$4i ze3zO4e-jcBk9doY1h2e;8m~3~N_nRa5uJEliv;~f6*ao_%Ug)p#6!R(*d;a6ut`UP z6G4e*2una;zN7}FK2ey6OFWQHg8TUsH7@yhIwB_V3@ZtyLIX8sYbKrgL@NnAd5{fZ zSL=g}%dcNOTThV?8xryxkl1hchQ{xfH(E}Wkp30~FYVs4Y4=w1DHD}UG6DOWKAqEf$cTl}9Z7l%ukHm8sBv9A>^pu=LAUUPMZDtSf1rVvh PA3007{PHjO8QT8?-z7jK literal 0 HcmV?d00001 From 79519e71933959ad47976c8f2591262a923319a5 Mon Sep 17 00:00:00 2001 From: dininta Date: Sun, 6 Dec 2015 11:18:02 +0700 Subject: [PATCH 16/26] add vote controller --- .../src/java/Servlet/viewpost.java | 14 ++-- StackExchangeClient/web/viewpost.jsp | 83 ++++++++++++------- 2 files changed, 62 insertions(+), 35 deletions(-) diff --git a/StackExchangeClient/src/java/Servlet/viewpost.java b/StackExchangeClient/src/java/Servlet/viewpost.java index 0e8f45a0..68132726 100644 --- a/StackExchangeClient/src/java/Servlet/viewpost.java +++ b/StackExchangeClient/src/java/Servlet/viewpost.java @@ -23,14 +23,18 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re // Check if already log in boolean found = false; - int i=0; + int i=0, count=0; Cookie[] cookies = null; cookies = request.getCookies(); if (cookies != null) { - while (!found && i < cookies.length){ + while (count < 2 && i < cookies.length){ if (cookies[i].getName().equals("usernameCookie")) { request.setAttribute("username", cookies[i].getValue()); - found = true; + count++; + } + else if (cookies[i].getName().equals("tokenCookie")) { + request.setAttribute("token", cookies[i].getValue()); + count++; } i++; } @@ -44,8 +48,8 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re List answers = getAnswerByQID(id); request.setAttribute("answers", answers); - int count = getAnswerById(id); - request.setAttribute("count", count); + int countAnswer = getAnswerById(id); + request.setAttribute("count", countAnswer); RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/viewpost.jsp"); dispatcher.forward(request, response); diff --git a/StackExchangeClient/web/viewpost.jsp b/StackExchangeClient/web/viewpost.jsp index 9e30eeba..8e83bfe4 100644 --- a/StackExchangeClient/web/viewpost.jsp +++ b/StackExchangeClient/web/viewpost.jsp @@ -4,6 +4,7 @@ + @@ -37,19 +38,12 @@
- - - - "> -
-
-

${question.vote}

- - - - "> -
-

+
+
+

+
+
+
${question.content}
@@ -66,7 +60,7 @@ ">edit | - 1 + " onclick="return confirm('Are you sure you want to delete this item?')">delete @@ -76,28 +70,19 @@

asked by ${question.username}

+

${count} Answer


-
- - - - - "> -
-
-

${answer.vote}

- - - - - "> -
-
+
+
+
+

+
+
${answer.content}

answered by ${answer.username} at ${answer.date}

@@ -114,5 +99,43 @@ + + + From 77432893b094ca82f6124a8e12b3fd2f39282f17 Mon Sep 17 00:00:00 2001 From: Astahta Date: Sun, 6 Dec 2015 11:46:19 +0700 Subject: [PATCH 17/26] add controller for comment and example angular js for comment --- StackExchangeClient/web/commentjs.jsp | 49 +++++++++++++++++++++++++++ StackExchangeClient/web/controller.js | 22 ++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 StackExchangeClient/web/commentjs.jsp create mode 100644 StackExchangeClient/web/controller.js diff --git a/StackExchangeClient/web/commentjs.jsp b/StackExchangeClient/web/commentjs.jsp new file mode 100644 index 00000000..c51e448f --- /dev/null +++ b/StackExchangeClient/web/commentjs.jsp @@ -0,0 +1,49 @@ +<%-- + Document : nyobaVote + Created on : Dec 5, 2015, 3:28:56 PM + Author : FiqieUlya +--%> + +<%@page contentType="text/html" pageEncoding="UTF-8"%> + + + + + + + +
+ +
+
+ + +
+ + +

+
+
+ +

Comment

+ + +
    +
    +
  • {{comments.content}}
  • +
  • {{comments.username}}
  • +
  • {{comments.id}}
  • +
    +
+ +
+
+ + + + \ No newline at end of file diff --git a/StackExchangeClient/web/controller.js b/StackExchangeClient/web/controller.js new file mode 100644 index 00000000..ef7bfd92 --- /dev/null +++ b/StackExchangeClient/web/controller.js @@ -0,0 +1,22 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + + +var myApp = angular.module('myApp', []); + +myApp.controller('myController', ['$scope', function ($comment) { + $comment.add = function (id, username) { + + // ADD A NEW ELEMENT. + if(id < 5 ){ + $comment.list.push({ username: username, content: $comment.content, id: id }); + } + // CLEAR THE FIELDS. + $comment.username = ''; + $comment.content = ''; + } +} ] +); \ No newline at end of file From 26ce52b19b6cf2069bf987434d3ff90492849a99 Mon Sep 17 00:00:00 2001 From: Astahta Date: Sun, 6 Dec 2015 17:17:09 +0700 Subject: [PATCH 18/26] modif method vote Question and vote answer, Add servlet for vote answer and question (web service) --- .../src/java/Authentication/Auth.java | 120 +++++++++ .../src/java/model/VoteAnswer.java | 251 +++++++++++++++++ .../src/java/model/VoteQuestion.java | 255 ++++++++++++++++++ .../src/java/service/VoteDownAnswer.java | 83 ++++++ .../src/java/service/VoteDownQuestion.java | 85 ++++++ .../src/java/service/VoteUpAnswer.java | 83 ++++++ .../src/java/service/VoteUpQuestion.java | 84 ++++++ StackExchangeCV/web/index.html | 85 ++++-- 8 files changed, 1017 insertions(+), 29 deletions(-) create mode 100644 StackExchangeCV/src/java/Authentication/Auth.java create mode 100644 StackExchangeCV/src/java/service/VoteDownAnswer.java create mode 100644 StackExchangeCV/src/java/service/VoteDownQuestion.java create mode 100644 StackExchangeCV/src/java/service/VoteUpAnswer.java create mode 100644 StackExchangeCV/src/java/service/VoteUpQuestion.java diff --git a/StackExchangeCV/src/java/Authentication/Auth.java b/StackExchangeCV/src/java/Authentication/Auth.java new file mode 100644 index 00000000..a396c550 --- /dev/null +++ b/StackExchangeCV/src/java/Authentication/Auth.java @@ -0,0 +1,120 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package Authentication; + +/** + * + * @author FiqieUlya + */ +import Config.DB; +import com.sun.org.apache.xerces.internal.parsers.DOMParser; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; + +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLEncoder; +import java.sql.Connection; + +import java.util.logging.Level; +import java.util.logging.Logger; +import org.w3c.dom.Document; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import org.xml.sax.InputSource; +import java.io.StringReader; + +public class Auth { + private final String url = "http://localhost:27300/StackExchangeAuth/validateToken"; + + // HTTP POST request + private static Document convertStringToDocument(String xmlStr) { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder; + try + { + builder = factory.newDocumentBuilder(); + Document doc = builder.parse( new InputSource( new StringReader( xmlStr ) ) ); + return doc; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + public String checkToken(String token) { + String username=""; + String result=""; + try { + String charset = "UTF-8"; + URL obj = new URL(url); + HttpURLConnection con = (HttpURLConnection) obj.openConnection(); + con.setDoOutput(true); + con.setRequestMethod("POST"); + con.setRequestProperty("Accept-Charset", charset); + con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset); + + String query = String.format("token_string=%s", + URLEncoder.encode(token, charset)); + try (OutputStream output = con.getOutputStream()) { + output.write(query.getBytes(charset)); + } + InputStream response = con.getInputStream(); + + BufferedReader br = new BufferedReader(new InputStreamReader( + (con.getInputStream()))); + + String output; + + + while ((output = br.readLine()) != null) { + result+=output; + } + Document doc = convertStringToDocument(result); + String stat = doc.getElementsByTagName("status").item(0).getTextContent(); + if(stat.equals("true")){ + username= doc.getElementsByTagName("username").item(0).getTextContent(); + } + else if(stat.equals("user-agent")){ + username="-998"; + } + else if(stat.equals("ip")){ + username="-997"; + } + else{ + username="-999"; + //username=stat; + } + + + con.disconnect(); + } catch (MalformedURLException ex) { + Logger.getLogger(Auth.class.getName()).log(Level.SEVERE, null, ex); + } catch (IOException ex) { + Logger.getLogger(Auth.class.getName()).log(Level.SEVERE, null, ex); + } + + return username; + } + + private boolean isStatus(String s) { + return s.startsWith(""); + } + + private boolean isUsername(String s) { + return s.startsWith(""); + } + + public static void main (String [] args) throws IOException{ + Auth a = new Auth(); + String abc = "key"; + System.out.println(a.checkToken(abc)); + //a.checkToken(abc); + } +} diff --git a/StackExchangeCV/src/java/model/VoteAnswer.java b/StackExchangeCV/src/java/model/VoteAnswer.java index 7bd0fcc5..96dc5d5a 100644 --- a/StackExchangeCV/src/java/model/VoteAnswer.java +++ b/StackExchangeCV/src/java/model/VoteAnswer.java @@ -5,10 +5,261 @@ */ package model; +import Authentication.Auth; +import Config.DB; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.json.simple.JSONObject; + /** * * @author User */ public class VoteAnswer { + private DB db= new DB(); + private Connection conn; + private final Auth auth= new Auth(); + + public JSONObject getVoteById( int aid) { + JSONObject json = new JSONObject(); + + + int count= 0,i=0; + conn = db.connect(); + + try { + + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "SELECT vote FROM answer where id_answer = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, aid); + + ResultSet rs; + rs = dbStatement.executeQuery(); +// if (!rs.next()) { +// json.put("state", 0); +// return json; +// } + while(rs.next()) { + i++; + json.put("state",1); + json.put("vote",rs.getInt("vote")); + + } + if(i==0)json.put("state",0); + rs.close(); + stmt.close(); + conn.close(); + + } catch (SQLException ex) { + Logger.getLogger(VoteAnswer.class.getName()).log(Level.SEVERE, null, ex); + } + return json; + } + + public JSONObject voteUp(int aid, String token ){ + int count; + JSONObject json = getVoteById(aid); + count= Integer.parseInt(json.get("vote").toString()); + + String username= auth.checkToken(token); + if(!isVoteUp(aid, username)){//sudah pernah vote up + if(!username.equals("-999")){//token generator salah + if(!username.equals("-998")){//user agent + if(!username.equals("-997")){//ip + try { + conn = db.connect(); + Statement stmt; + stmt = conn.createStatement(); + //pernah vote down + if(isVoteDown(aid,username)){ + count+=2; + String sql; + sql="DELETE FROM vote_answer WHERE id_answer = ?"; + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, aid); + dbStatement.execute(); + json.put("status", 2); + } + else{ + count+=1; + json.put("status", 1); + } + String sql, sql_select; + sql="UPDATE answer SET vote = ? WHERE id_vote = ? "; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, count); + dbStatement.setInt(2, aid); + dbStatement.execute(); + sql="INSERT INTO vote_answer (id_answer, username,value) VALUES (?,?,1)"; + PreparedStatement dbStatement2 = conn.prepareStatement(sql); + dbStatement2.setInt(1, aid); + dbStatement2.setString(2, username); + dbStatement2.executeUpdate(); + + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(VoteQuestion.class.getName()).log(Level.SEVERE, null, ex); + } + }else json.put("status", -3); + }else json.put("status", -2); + }else json.put("status", -1); + }else json.put("status", 0); + return json; + } + + public JSONObject voteDown(int aid, String token ){ + int count; + JSONObject json = getVoteById(aid); + count= Integer.parseInt(json.get("vote").toString()); + + String username= auth.checkToken(token); + if(!isVoteDown(aid, username)){//voted down + if(!username.equals("-999")){//failed generator + if(!username.equals("-998")){//user agent + if(!username.equals("-997")){//ip + try { + conn = db.connect(); + Statement stmt; + stmt = conn.createStatement(); + if(isVoteUp(aid,username)){ + count-=2; + String sql; + sql="DELETE FROM vote_answer WHERE id_answer = ?"; + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, aid); + dbStatement.execute(); + }else{count-=1;} + String sql, sql_select; + sql="UPDATE answer SET vote = ? WHERE id_answer = ? "; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, count); + dbStatement.setInt(2, aid); + dbStatement.execute(); + + sql="INSERT INTO vote_answer (id_answer, username,value) VALUES (?,?,-1)"; + PreparedStatement dbStatement2 = conn.prepareStatement(sql); + dbStatement2.setInt(1, aid); + dbStatement2.setString(2, username); + dbStatement2.execute(); + + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(VoteQuestion.class.getName()).log(Level.SEVERE, null, ex); + } + }else json.put("status", -3); + }else json.put("status", -2); + }else json.put("status", -1); + }else json.put("status", 0); + return json; + } + public Boolean isVoted(int aid, String username){ + Boolean status = false; + conn = db.connect(); + + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql="Select * from vote_answer where id_answer = ? and username = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, aid); + dbStatement.setString(2, username); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + status= true; + } + + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(VoteQuestion.class.getName()).log(Level.SEVERE, null, ex); + } + return status; + } + public Boolean isVoteUp( int aid, String username){ + Boolean status = false; + conn = db.connect(); + + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql="Select * from vote_answer where id_answer = ? and username = ? and value = 1"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, aid); + dbStatement.setString(2, username); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + status= true; + } + + stmt.close(); + //conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(VoteQuestion.class.getName()).log(Level.SEVERE, null, ex); + } + return status; + } + public Boolean isVoteDown( int aid, String username){ + Boolean status = false; + conn = db.connect(); + + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql="Select * from vote_answer where id_answer = ? and username = ? and value = -1"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, aid); + dbStatement.setString(2, username); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + status= true; + } + + stmt.close(); + //conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(VoteQuestion.class.getName()).log(Level.SEVERE, null, ex); + } + return status; + } } diff --git a/StackExchangeCV/src/java/model/VoteQuestion.java b/StackExchangeCV/src/java/model/VoteQuestion.java index d74d27ba..b04539d7 100644 --- a/StackExchangeCV/src/java/model/VoteQuestion.java +++ b/StackExchangeCV/src/java/model/VoteQuestion.java @@ -5,10 +5,265 @@ */ package model; +import Authentication.Auth; +import Config.DB; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; + /** * * @author User */ public class VoteQuestion { + private DB db=new DB(); + private Connection conn; + private final Auth auth= new Auth(); + + public JSONObject getVoteById( int qid) { + JSONObject json = new JSONObject(); + int count= 0, i=0; + conn = db.connect(); + + try { + + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql = "SELECT vote FROM question where id_question = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + + ResultSet rs; + rs = dbStatement.executeQuery(); +// if (rs==null) { +// json.put("state", 0); +// return json; +// } + while(rs.next()) { + i++; + json.put("state",1); + json.put("vote",rs.getInt("vote")); + + } + if(i==0)json.put("state",0); + rs.close(); + stmt.close(); + conn.close(); + + } catch (SQLException ex) { + Logger.getLogger(VoteQuestion.class.getName()).log(Level.SEVERE, null, ex); + } + return json; + } + + public JSONObject voteUp(int qid, String token ){ + int count=7; + //JSONObject json = getVoteById(qid); + JSONObject json = getVoteById(qid); + //System.out.println("jsonjgf: "+json.get("vote")); + //count= Integer.parseInt((String) json1.get("vote")); + + count = (int) json.get("vote"); + + String username= auth.checkToken(token); + if(!isVoteUp(qid, username)){//sudah pernah vote up + if(!username.equals("-999")){//token generator salah + if(!username.equals("-998")){//user agent + if(!username.equals("-997")){//ip + try { + conn = db.connect(); + Statement stmt; + stmt = conn.createStatement(); + //pernah vote down + if(isVoteDown(qid,username)){ + count+=2; + String sql; + sql="DELETE FROM vote_question WHERE id_question = ?"; + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + dbStatement.execute(); + json.put("status", 2); + } + else{ + count+=1; + json.put("status", 1); + } + String sql, sql_select; + sql="UPDATE question SET vote = ? WHERE id_question = ? "; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, count); + dbStatement.setInt(2, qid); + dbStatement.execute(); + sql="INSERT INTO vote_question (id_question, username,value) VALUES (?,?,1)"; + PreparedStatement dbStatement2 = conn.prepareStatement(sql); + dbStatement2.setInt(1, qid); + dbStatement2.setString(2, username); + dbStatement2.executeUpdate(); + + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(VoteQuestion.class.getName()).log(Level.SEVERE, null, ex); + } + }else json.put("status", -3); + }else json.put("status", -2); + }else json.put("status", -1); + }else json.put("status", 0); + + return json; + } + + public JSONObject voteDown(int qid, String token ){ + int count; + JSONObject json = getVoteById(qid); + count= (int) json.get("vote"); + + String username= auth.checkToken(token); + if(!isVoteDown(qid, username)){//voted down + if(!username.equals("-999")){//failed generator + if(!username.equals("-998")){//user agent + if(!username.equals("-997")){//ip + try { + conn = db.connect(); + Statement stmt; + stmt = conn.createStatement(); + if(isVoteUp(qid,username)){ + count-=2; + String sql; + sql="DELETE FROM vote_question WHERE id_question = ?"; + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + dbStatement.execute(); + }else{count-=1;} + String sql, sql_select; + sql="UPDATE question SET vote = ? WHERE id_question = ? "; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, count); + dbStatement.setInt(2, qid); + dbStatement.execute(); + + sql="INSERT INTO vote_question (id_question, username,value) VALUES (?,?,-1)"; + PreparedStatement dbStatement2 = conn.prepareStatement(sql); + dbStatement2.setInt(1, qid); + dbStatement2.setString(2, username); + dbStatement2.execute(); + + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(VoteQuestion.class.getName()).log(Level.SEVERE, null, ex); + } + }else json.put("status", -3); + }else json.put("status", -2); + }else json.put("status", -1); + }else json.put("status", 0); + return json; + } + public Boolean isVoted(int qid, String username){ + Boolean status = false; + conn = db.connect(); + + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql="Select * from vote_question where id_question = ? and username = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + dbStatement.setString(2, username); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + status= true; + } + + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(VoteQuestion.class.getName()).log(Level.SEVERE, null, ex); + } + return status; + } + public Boolean isVoteUp( int qid, String username){ + Boolean status = false; + conn = db.connect(); + + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql="Select * from vote_question where id_question = ? and username = ? and value = 1"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + dbStatement.setString(2, username); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + status= true; + } + + stmt.close(); + //conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(VoteQuestion.class.getName()).log(Level.SEVERE, null, ex); + } + return status; + } + public Boolean isVoteDown( int qid, String username){ + Boolean status = false; + conn = db.connect(); + + try { + Statement stmt; + stmt = conn.createStatement(); + + String sql; + sql="Select * from vote_question where id_question = ? and username = ? and value = -1"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + dbStatement.setString(2, username); + + ResultSet rs; + rs = dbStatement.executeQuery(); + + /* Get every data returned by SQLquery */ + while(rs.next()) { + status= true; + } + + stmt.close(); + //conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(VoteQuestion.class.getName()).log(Level.SEVERE, null, ex); + } + return status; + } } diff --git a/StackExchangeCV/src/java/service/VoteDownAnswer.java b/StackExchangeCV/src/java/service/VoteDownAnswer.java new file mode 100644 index 00000000..b17eafec --- /dev/null +++ b/StackExchangeCV/src/java/service/VoteDownAnswer.java @@ -0,0 +1,83 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package service; + +import java.io.IOException; +import java.io.PrintWriter; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import model.VoteAnswer; + +/** + * + * @author FiqieUlya + */ +public class VoteDownAnswer extends HttpServlet { + + /** + * Processes requests for both HTTP GET and POST + * methods. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("text/html;charset=UTF-8"); + PrintWriter out = response.getWriter(); + + VoteAnswer vq = new VoteAnswer(); + + int id_answer = Integer.parseInt(request.getParameter("id_answer")); + String token = request.getParameter("token"); + + out.println(vq.voteDown(id_answer, token)); + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} diff --git a/StackExchangeCV/src/java/service/VoteDownQuestion.java b/StackExchangeCV/src/java/service/VoteDownQuestion.java new file mode 100644 index 00000000..fc4419bd --- /dev/null +++ b/StackExchangeCV/src/java/service/VoteDownQuestion.java @@ -0,0 +1,85 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package service; + +import java.io.IOException; +import java.io.PrintWriter; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import model.VoteQuestion; + +/** + * + * @author FiqieUlya + */ +@WebServlet(name = "VoteDownQuestion", urlPatterns = {"/VoteDownQuestion"}) +public class VoteDownQuestion extends HttpServlet { + + /** + * Processes requests for both HTTP GET and POST + * methods. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("text/html;charset=UTF-8"); + PrintWriter out = response.getWriter(); + + VoteQuestion vq = new VoteQuestion(); + + int id_question = Integer.parseInt(request.getParameter("id_question")); + String token = request.getParameter("token"); + + out.println(vq.voteDown(id_question, token)); + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} diff --git a/StackExchangeCV/src/java/service/VoteUpAnswer.java b/StackExchangeCV/src/java/service/VoteUpAnswer.java new file mode 100644 index 00000000..35503427 --- /dev/null +++ b/StackExchangeCV/src/java/service/VoteUpAnswer.java @@ -0,0 +1,83 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package service; + +import java.io.IOException; +import java.io.PrintWriter; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import model.VoteAnswer; + +/** + * + * @author FiqieUlya + */ +public class VoteUpAnswer extends HttpServlet { + + /** + * Processes requests for both HTTP GET and POST + * methods. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("text/html;charset=UTF-8"); + PrintWriter out = response.getWriter(); + + VoteAnswer vq = new VoteAnswer(); + + int id_answer = Integer.parseInt(request.getParameter("id_answer")); + String token = request.getParameter("token"); + + out.println(vq.voteUp(id_answer, token)); + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} diff --git a/StackExchangeCV/src/java/service/VoteUpQuestion.java b/StackExchangeCV/src/java/service/VoteUpQuestion.java new file mode 100644 index 00000000..a2bbe4a0 --- /dev/null +++ b/StackExchangeCV/src/java/service/VoteUpQuestion.java @@ -0,0 +1,84 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package service; + +import java.io.IOException; +import java.io.PrintWriter; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import model.VoteQuestion; + +/** + * + * @author FiqieUlya + */ +public class VoteUpQuestion extends HttpServlet { + + /** + * Processes requests for both HTTP GET and POST + * methods. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + + VoteQuestion vq = new VoteQuestion(); + + int id_question = Integer.parseInt(request.getParameter("id_question")); + String token = request.getParameter("token"); + + out.println(vq.voteUp(id_question, token)); + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} diff --git a/StackExchangeCV/web/index.html b/StackExchangeCV/web/index.html index 1ba924c6..d251b765 100644 --- a/StackExchangeCV/web/index.html +++ b/StackExchangeCV/web/index.html @@ -1,29 +1,56 @@ - - - - - REST Service - - - - -

Available resource

- - -

Available service

-
- - - - -
- - - + + + + + REST Service + + + + +

Available resource

+ + +

Available service

+

Add comment

+
+ + + + +
+

Vote Up Question

+
+ + + +
+ +

Vote Down Question

+
+ + + +
+ +

Vote Up Answer

+
+ + + +
+ +

Vote Down Answer

+
+ + + +
+ + From a00f601f3038399b41ac60051faedc820237d0cf Mon Sep 17 00:00:00 2001 From: Rahman Adianto Date: Sun, 6 Dec 2015 19:08:13 +0700 Subject: [PATCH 19/26] fix token with user-agent and ip --- StackExchangeAuth/src/java/getToken.java | 8 +++----- StackExchangeAuth/src/java/validateToken.java | 8 +++----- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/StackExchangeAuth/src/java/getToken.java b/StackExchangeAuth/src/java/getToken.java index 5b930ce4..0af9a72a 100644 --- a/StackExchangeAuth/src/java/getToken.java +++ b/StackExchangeAuth/src/java/getToken.java @@ -53,11 +53,9 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re String uname = request.getParameter("uname"); String pass = request.getParameter("pass"); String password = ""; - String userAgent = request.getHeader("user-agent"); - String ip = request.getHeader("X-FORWARDED-FOR"); - if(ip==null){ - ip = request.getRemoteAddr(); - } + String userAgent = request.getParameter("user-agent"); + String ip = request.getParameter("ip"); + PrintWriter tw = response.getWriter(); DB db = new DB(); diff --git a/StackExchangeAuth/src/java/validateToken.java b/StackExchangeAuth/src/java/validateToken.java index 98584b9e..9662a61c 100644 --- a/StackExchangeAuth/src/java/validateToken.java +++ b/StackExchangeAuth/src/java/validateToken.java @@ -72,11 +72,9 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re String token_string = request.getParameter("token_string"); String token[] = token_string.split("#"); - String userAgent = request.getHeader("user-agent"); - String ip = request.getHeader("X-FORWARDED-FOR"); - if(ip==null){ - ip = request.getRemoteAddr(); - } + String userAgent = request.getParameter("user-agent"); + String ip = request.getParameter("ip"); + PrintWriter tw = response.getWriter(); DB db = new DB(); From 53fd76436f21ed344b477902e8692c1052951c01 Mon Sep 17 00:00:00 2001 From: Rahman Adianto Date: Sun, 6 Dec 2015 19:08:26 +0700 Subject: [PATCH 20/26] fix token with user-agent and ip --- StackExchangeClient/src/java/Servlet/login.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/StackExchangeClient/src/java/Servlet/login.java b/StackExchangeClient/src/java/Servlet/login.java index 4f97e5e0..9008059c 100644 --- a/StackExchangeClient/src/java/Servlet/login.java +++ b/StackExchangeClient/src/java/Servlet/login.java @@ -25,10 +25,18 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re response.setContentType("application/xml;charset=UTF-8"); String uname = request.getParameter("user"); String pass = request.getParameter("pass"); + String useragent = request.getHeader("user-agent"); + String ip = request.getHeader("X-FORWARDED-FOR"); Form form = new Form(); form.param("uname", uname); form.param("pass", pass); + form.param("useragent", useragent); + form.param("ip", ip); + + if (ip == null) { + ip = request.getRemoteAddr(); + } Client client = ClientBuilder.newClient(); String url = "http://localhost:21568/StackExchangeAuth/getToken"; From 4a88eb493443ef324a629b566d6108f34f62d33d Mon Sep 17 00:00:00 2001 From: Astahta Date: Sun, 6 Dec 2015 20:29:06 +0700 Subject: [PATCH 21/26] upadate token configuration CV webService --- .../src/java/Authentication/Auth.java | 10 ++-- StackExchangeCV/src/java/model/Comment.java | 52 +++++++++++-------- .../src/java/model/VoteAnswer.java | 8 +-- .../src/java/model/VoteQuestion.java | 10 ++-- .../src/java/service/AddComment.java | 5 +- .../src/java/service/VoteDownAnswer.java | 4 +- .../src/java/service/VoteDownQuestion.java | 5 +- .../src/java/service/VoteUpAnswer.java | 5 +- .../src/java/service/VoteUpQuestion.java | 4 +- 9 files changed, 61 insertions(+), 42 deletions(-) diff --git a/StackExchangeCV/src/java/Authentication/Auth.java b/StackExchangeCV/src/java/Authentication/Auth.java index a396c550..8aac1419 100644 --- a/StackExchangeCV/src/java/Authentication/Auth.java +++ b/StackExchangeCV/src/java/Authentication/Auth.java @@ -48,7 +48,7 @@ private static Document convertStringToDocument(String xmlStr) { } return null; } - public String checkToken(String token) { + public String checkToken(String token, String userAgent, String ip) { String username=""; String result=""; try { @@ -60,8 +60,10 @@ public String checkToken(String token) { con.setRequestProperty("Accept-Charset", charset); con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset); - String query = String.format("token_string=%s", - URLEncoder.encode(token, charset)); + String query = String.format("token_string=%s&user_agent=%s&ip", + URLEncoder.encode(token, charset), + URLEncoder.encode(userAgent, charset), + URLEncoder.encode(ip, charset)); try (OutputStream output = con.getOutputStream()) { output.write(query.getBytes(charset)); } @@ -114,7 +116,7 @@ private boolean isUsername(String s) { public static void main (String [] args) throws IOException{ Auth a = new Auth(); String abc = "key"; - System.out.println(a.checkToken(abc)); + //System.out.println(a.checkToken(abc)); //a.checkToken(abc); } } diff --git a/StackExchangeCV/src/java/model/Comment.java b/StackExchangeCV/src/java/model/Comment.java index 8dd3a944..40b17a34 100644 --- a/StackExchangeCV/src/java/model/Comment.java +++ b/StackExchangeCV/src/java/model/Comment.java @@ -5,7 +5,8 @@ */ package model; -import Connection.DB; +import Authentication.Auth; +import Config.DB; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -24,6 +25,7 @@ public class Comment { private DB db; private Connection conn; + private final Auth auth= new Auth(); private static String getCurrentTimeStamp() { Calendar cal = Calendar.getInstance(); @@ -38,7 +40,7 @@ public Comment() { public JSONObject getComments() { JSONObject json = new JSONObject(); JSONArray comments = new JSONArray(); - JSONObject comment; + JSONObject comment = new JSONObject();; conn = db.connect(); try { @@ -59,8 +61,9 @@ public JSONObject getComments() { } /* Get every data returned by SQLquery */ + while(rs.next()) { - comment = new JSONObject(); + comment.put("content", rs.getString("content")); comment.put("date", rs.getString("date")); comment.put("username", rs.getString("username")); @@ -83,7 +86,7 @@ public JSONObject getComments() { public JSONObject getCommentByQID(int i){ JSONObject json = new JSONObject(); JSONArray comments = new JSONArray(); - JSONObject comment; + JSONObject comment = new JSONObject(); conn = db.connect(); try { @@ -104,13 +107,12 @@ public JSONObject getCommentByQID(int i){ return json; } - /* Get every data returned by SQLquery */ + /* Get every data returned by SQLquery */ while(rs.next()) { - comment = new JSONObject(); comment.put("content", rs.getString("content")); comment.put("date", rs.getString("date")); comment.put("username", rs.getString("username")); - comments.add(comment); + comments.add(comment); } json.put("comments", comments); json.put("state", 1); @@ -126,26 +128,34 @@ public JSONObject getCommentByQID(int i){ return json; } - public Boolean addComment(int id_question, String content, String username) { + public Boolean addComment(int id_question, String content, String token, String userAgent, String ip) { conn = db.connect(); Boolean state = true; + String username =auth.checkToken(token, userAgent, ip); + System.out.println(username); try { - Statement stmt; - stmt = conn.createStatement(); + //if(!username.equals("-999")){ + //if(!username.equals("-998")){ + //if(!username.equals("-997")){ + Statement stmt; + stmt = conn.createStatement(); - String sql; - sql = "INSERT INTO comment(id_question, content, username, date)" - + " VALUES (?, ?, ?, ?)"; + String sql; + sql = "INSERT INTO comment(id_question, content, username, date)" + + " VALUES (?, ?, ?, ?)"; - PreparedStatement dbStatement = conn.prepareStatement(sql); - dbStatement.setInt(1, id_question); - dbStatement.setString(2, content); - dbStatement.setString(3, username); - dbStatement.setString(4, getCurrentTimeStamp()); + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, id_question); + dbStatement.setString(2, content); + dbStatement.setString(3, username); + dbStatement.setString(4, getCurrentTimeStamp()); - state = dbStatement.execute(); - stmt.close(); - conn.close(); + state = dbStatement.execute(); + stmt.close(); + conn.close(); + //} + //} + //} } catch (SQLException ex) { ex.getSQLState(); diff --git a/StackExchangeCV/src/java/model/VoteAnswer.java b/StackExchangeCV/src/java/model/VoteAnswer.java index 96dc5d5a..f6dde65b 100644 --- a/StackExchangeCV/src/java/model/VoteAnswer.java +++ b/StackExchangeCV/src/java/model/VoteAnswer.java @@ -67,12 +67,12 @@ public JSONObject getVoteById( int aid) { } - public JSONObject voteUp(int aid, String token ){ + public JSONObject voteUp(int aid, String token, String userAgent, String ip ){ int count; JSONObject json = getVoteById(aid); count= Integer.parseInt(json.get("vote").toString()); - String username= auth.checkToken(token); + String username= auth.checkToken(token, userAgent, ip); if(!isVoteUp(aid, username)){//sudah pernah vote up if(!username.equals("-999")){//token generator salah if(!username.equals("-998")){//user agent @@ -121,12 +121,12 @@ public JSONObject voteUp(int aid, String token ){ return json; } - public JSONObject voteDown(int aid, String token ){ + public JSONObject voteDown(int aid, String token, String userAgent, String ip ){ int count; JSONObject json = getVoteById(aid); count= Integer.parseInt(json.get("vote").toString()); - String username= auth.checkToken(token); + String username= auth.checkToken(token, userAgent, ip); if(!isVoteDown(aid, username)){//voted down if(!username.equals("-999")){//failed generator if(!username.equals("-998")){//user agent diff --git a/StackExchangeCV/src/java/model/VoteQuestion.java b/StackExchangeCV/src/java/model/VoteQuestion.java index b04539d7..016d4ecb 100644 --- a/StackExchangeCV/src/java/model/VoteQuestion.java +++ b/StackExchangeCV/src/java/model/VoteQuestion.java @@ -66,7 +66,7 @@ public JSONObject getVoteById( int qid) { } - public JSONObject voteUp(int qid, String token ){ + public JSONObject voteUp(int qid, String token, String userAgent, String ip ){ int count=7; //JSONObject json = getVoteById(qid); JSONObject json = getVoteById(qid); @@ -75,11 +75,11 @@ public JSONObject voteUp(int qid, String token ){ count = (int) json.get("vote"); - String username= auth.checkToken(token); + String username= auth.checkToken(token, userAgent, ip); if(!isVoteUp(qid, username)){//sudah pernah vote up if(!username.equals("-999")){//token generator salah if(!username.equals("-998")){//user agent - if(!username.equals("-997")){//ip + if(!username.equals("-997")){ try { conn = db.connect(); Statement stmt; @@ -125,12 +125,12 @@ public JSONObject voteUp(int qid, String token ){ return json; } - public JSONObject voteDown(int qid, String token ){ + public JSONObject voteDown(int qid, String token, String userAgent, String ip ){ int count; JSONObject json = getVoteById(qid); count= (int) json.get("vote"); - String username= auth.checkToken(token); + String username= auth.checkToken(token, userAgent, ip); if(!isVoteDown(qid, username)){//voted down if(!username.equals("-999")){//failed generator if(!username.equals("-998")){//user agent diff --git a/StackExchangeCV/src/java/service/AddComment.java b/StackExchangeCV/src/java/service/AddComment.java index e51f4e21..5c2a6cc5 100644 --- a/StackExchangeCV/src/java/service/AddComment.java +++ b/StackExchangeCV/src/java/service/AddComment.java @@ -57,8 +57,9 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) int id_question = Integer.parseInt(request.getParameter("id_question")); String content = request.getParameter("content"); String username = request.getParameter("username"); - - Boolean state = comment.addComment(id_question, content, username); + String userAgent = request.getParameter("user-agent"); + String ip = request.getParameter("ip"); + Boolean state = comment.addComment(id_question, content, username, userAgent, ip); if (state) { pw.println("{\"state\": \"failed\"}"); } diff --git a/StackExchangeCV/src/java/service/VoteDownAnswer.java b/StackExchangeCV/src/java/service/VoteDownAnswer.java index b17eafec..41cf5075 100644 --- a/StackExchangeCV/src/java/service/VoteDownAnswer.java +++ b/StackExchangeCV/src/java/service/VoteDownAnswer.java @@ -37,8 +37,10 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re int id_answer = Integer.parseInt(request.getParameter("id_answer")); String token = request.getParameter("token"); + String userAgent = request.getParameter("user-agent"); + String ip = request.getParameter("ip"); - out.println(vq.voteDown(id_answer, token)); + out.println(vq.voteDown(id_answer, token, userAgent, ip)); } // diff --git a/StackExchangeCV/src/java/service/VoteDownQuestion.java b/StackExchangeCV/src/java/service/VoteDownQuestion.java index fc4419bd..468234b4 100644 --- a/StackExchangeCV/src/java/service/VoteDownQuestion.java +++ b/StackExchangeCV/src/java/service/VoteDownQuestion.java @@ -39,8 +39,9 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re int id_question = Integer.parseInt(request.getParameter("id_question")); String token = request.getParameter("token"); - - out.println(vq.voteDown(id_question, token)); + String userAgent = request.getParameter("user-agent"); + String ip = request.getParameter("ip"); + out.println(vq.voteDown(id_question, token, userAgent, ip)); } // diff --git a/StackExchangeCV/src/java/service/VoteUpAnswer.java b/StackExchangeCV/src/java/service/VoteUpAnswer.java index 35503427..53c690d9 100644 --- a/StackExchangeCV/src/java/service/VoteUpAnswer.java +++ b/StackExchangeCV/src/java/service/VoteUpAnswer.java @@ -37,8 +37,9 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re int id_answer = Integer.parseInt(request.getParameter("id_answer")); String token = request.getParameter("token"); - - out.println(vq.voteUp(id_answer, token)); + String userAgent = request.getParameter("user-agent"); + String ip = request.getParameter("ip"); + out.println(vq.voteUp(id_answer, token, userAgent, ip)); } // diff --git a/StackExchangeCV/src/java/service/VoteUpQuestion.java b/StackExchangeCV/src/java/service/VoteUpQuestion.java index a2bbe4a0..65540435 100644 --- a/StackExchangeCV/src/java/service/VoteUpQuestion.java +++ b/StackExchangeCV/src/java/service/VoteUpQuestion.java @@ -38,8 +38,10 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re int id_question = Integer.parseInt(request.getParameter("id_question")); String token = request.getParameter("token"); + String userAgent = request.getParameter("user-agent"); + String ip = request.getParameter("ip"); - out.println(vq.voteUp(id_question, token)); + out.println(vq.voteUp(id_question, token, userAgent, ip)); } // From 8754408b18f7bcec7e82fb3fe382c0f3fc2caf4b Mon Sep 17 00:00:00 2001 From: Astahta Date: Sun, 6 Dec 2015 20:30:55 +0700 Subject: [PATCH 22/26] fix validate token --- StackExchangeAuth/src/java/validateToken.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/StackExchangeAuth/src/java/validateToken.java b/StackExchangeAuth/src/java/validateToken.java index 9662a61c..026952b9 100644 --- a/StackExchangeAuth/src/java/validateToken.java +++ b/StackExchangeAuth/src/java/validateToken.java @@ -72,7 +72,7 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re String token_string = request.getParameter("token_string"); String token[] = token_string.split("#"); - String userAgent = request.getParameter("user-agent"); + String userAgent = request.getParameter("user_agent"); String ip = request.getParameter("ip"); PrintWriter tw = response.getWriter(); @@ -124,7 +124,7 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re tw.println("false"); } }else{ - tw.println(""+token[2]+" : "+ ip +""); + tw.println("ip"); } } else{ From e3728eb8bb2761f11aa28703f0a432de209d7ea8 Mon Sep 17 00:00:00 2001 From: Astahta Date: Sun, 6 Dec 2015 20:58:14 +0700 Subject: [PATCH 23/26] cek token --- StackExchangeAuth/src/java/getToken.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/StackExchangeAuth/src/java/getToken.java b/StackExchangeAuth/src/java/getToken.java index 0af9a72a..bba7a87e 100644 --- a/StackExchangeAuth/src/java/getToken.java +++ b/StackExchangeAuth/src/java/getToken.java @@ -53,8 +53,13 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re String uname = request.getParameter("uname"); String pass = request.getParameter("pass"); String password = ""; - String userAgent = request.getParameter("user-agent"); - String ip = request.getParameter("ip"); + String userAgent = request.getHeader("user-agent"); + String ip = request.getHeader("X-FORWARDED-FOR"); + if(ip==null){ + ip=request.getRemoteAddr(); + } +// String userAgent = request.getParameter("user-agent"); +// String ip = request.getParameter("ip"); PrintWriter tw = response.getWriter(); From 87b1b784205bddc4372f9a9d95b57bfd739666fb Mon Sep 17 00:00:00 2001 From: Astahta Date: Sun, 6 Dec 2015 23:26:40 +0700 Subject: [PATCH 24/26] config with auth --- .../src/java/AnswerModel/AnswerWS.java | 246 ++++++++------- .../src/java/Authentication/Auth.java | 19 +- .../src/java/QuestionModel/QuestionWS.java | 289 ++++++++++-------- .../src/java/UserModel/UserWS.java | 2 +- 4 files changed, 323 insertions(+), 233 deletions(-) diff --git a/StackExchangeService/src/java/AnswerModel/AnswerWS.java b/StackExchangeService/src/java/AnswerModel/AnswerWS.java index c32d8162..826fcc30 100644 --- a/StackExchangeService/src/java/AnswerModel/AnswerWS.java +++ b/StackExchangeService/src/java/AnswerModel/AnswerWS.java @@ -82,150 +82,185 @@ public List getAnswerByQID(@WebParam(name = "qid") int qid) { @WebMethod(operationName = "createAnswer") public Boolean createAnswer(@WebParam(name = "id_question") int id_question, @WebParam(name = "content") String content, - @WebParam(name = "token") String token ) { + @WebParam(name = "token") String token, + + @WebParam(name = "userAgent") String userAgent, + @WebParam(name = "ip") String ip) { conn = db.connect(); Boolean status = true; - String username = auth.checkToken(token); + String username = auth.checkToken(token,userAgent, ip); if(!username.equals("-999")){ - try { - Statement stmt; - stmt = conn.createStatement(); + if(!username.equals("-999")){ + if(!username.equals("-998")){//user agent + if(!username.equals("-997")){//ip + try { + Statement stmt; + stmt = conn.createStatement(); - String sql; - sql = "INSERT INTO answer(id_question, username, content, vote, date)" - + " VALUES (?, ?, ?, 0, ?)"; + String sql; + sql = "INSERT INTO answer(id_question, username, content, vote, date)" + + " VALUES (?, ?, ?, 0, ?)"; - PreparedStatement dbStatement = conn.prepareStatement(sql); - dbStatement.setInt(1, id_question); - dbStatement.setString(2, username); - dbStatement.setString(3, content); - dbStatement.setString(4, getCurrentTimeStamp()); + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, id_question); + dbStatement.setString(2, username); + dbStatement.setString(3, content); + dbStatement.setString(4, getCurrentTimeStamp()); - status = dbStatement.execute(); - stmt.close(); - conn.close(); - } - catch(SQLException ex) { - Logger.getLogger(AnswerWS.class.getName()).log(Level.SEVERE, null, ex); + status = dbStatement.execute(); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(AnswerWS.class.getName()).log(Level.SEVERE, null, ex); + } + } + } } } return status; } @WebMethod(operationName = "voteUp") - public int voteUp(@WebParam(name = "qid") int qid,@WebParam(name = "token") String token ){ + public int voteUp(@WebParam(name = "qid") int qid,@WebParam(name = "token") String token, + + @WebParam(name = "userAgent") String userAgent, + @WebParam(name = "ip") String ip){ int count; count=getVoteById(qid); - String username= auth.checkToken(token); + String username= auth.checkToken(token, userAgent, ip); if((!username.equals("-999"))&&(!isVoteUp(qid, username))){ - try { - conn = db.connect(); - Statement stmt; - stmt = conn.createStatement(); - //pernah vote down - if(isVoteDown(qid,username)){ - count+=2; - String sql; - sql="DELETE FROM vote_answer WHERE id_answer = ?"; - PreparedStatement dbStatement = conn.prepareStatement(sql); - dbStatement.setInt(1, qid); - dbStatement.execute(); - } - else{count+=1;} - String sql, sql_select; - sql="UPDATE answer SET vote = ? WHERE id_answer = ? "; + if(!username.equals("-999")){ + if(!username.equals("-998")){//user agent + if(!username.equals("-997")){//ip + try { + conn = db.connect(); + Statement stmt; + stmt = conn.createStatement(); + //pernah vote down + if(isVoteDown(qid,username)){ + count+=2; + String sql; + sql="DELETE FROM vote_answer WHERE id_answer = ?"; + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + dbStatement.execute(); + } + else{count+=1;} + String sql, sql_select; + sql="UPDATE answer SET vote = ? WHERE id_answer = ? "; - PreparedStatement dbStatement = conn.prepareStatement(sql); - dbStatement.setInt(1, count); - dbStatement.setInt(2, qid); - dbStatement.execute(); - sql="INSERT INTO vote_answer (id_answer, username,value) VALUES (?,?,1)"; - PreparedStatement dbStatement2 = conn.prepareStatement(sql); - dbStatement2.setInt(1, qid); - dbStatement2.setString(2, username); - dbStatement2.executeUpdate(); + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, count); + dbStatement.setInt(2, qid); + dbStatement.execute(); + sql="INSERT INTO vote_answer (id_answer, username,value) VALUES (?,?,1)"; + PreparedStatement dbStatement2 = conn.prepareStatement(sql); + dbStatement2.setInt(1, qid); + dbStatement2.setString(2, username); + dbStatement2.executeUpdate(); - stmt.close(); - conn.close(); - } - catch(SQLException ex) { - Logger.getLogger(AnswerWS.class.getName()).log(Level.SEVERE, null, ex); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(AnswerWS.class.getName()).log(Level.SEVERE, null, ex); + } + } + } } } return count; } @WebMethod(operationName = "voteDown") - public int voteDown(@WebParam(name = "aid") int aid,@WebParam(name = "token") String token ){ + public int voteDown(@WebParam(name = "aid") int aid,@WebParam(name = "token") String token, + @WebParam(name = "userAgent") String userAgent, + @WebParam(name = "ip") String ip){ int count; count=getVoteById(aid); - String username= auth.checkToken(token); + String username= auth.checkToken(token, userAgent, ip); if((!username.equals("-999"))&&(!isVoteDown(aid, username))){ - try { - conn = db.connect(); - Statement stmt; - stmt = conn.createStatement(); - if(isVoteUp(aid,username)){ - count-=2; - String sql; - sql="DELETE FROM vote_answer WHERE id_answer = ?"; - PreparedStatement dbStatement = conn.prepareStatement(sql); - dbStatement.setInt(1, aid); - dbStatement.execute(); - }else{count-=1;} - String sql, sql_select; - sql="UPDATE answer SET vote = ? WHERE id_answer = ? "; + if(!username.equals("-999")){ + if(!username.equals("-998")){//user agent + if(!username.equals("-997")){//ip + try { + conn = db.connect(); + Statement stmt; + stmt = conn.createStatement(); + if(isVoteUp(aid,username)){ + count-=2; + String sql; + sql="DELETE FROM vote_answer WHERE id_answer = ?"; + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, aid); + dbStatement.execute(); + }else{count-=1;} + String sql, sql_select; + sql="UPDATE answer SET vote = ? WHERE id_answer = ? "; - PreparedStatement dbStatement = conn.prepareStatement(sql); - dbStatement.setInt(1, count); - dbStatement.setInt(2, aid); - dbStatement.execute(); + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, count); + dbStatement.setInt(2, aid); + dbStatement.execute(); - sql="INSERT INTO vote_answer (id_answer, username,value) VALUES (?,?,-1)"; - PreparedStatement dbStatement2 = conn.prepareStatement(sql); - dbStatement2.setInt(1, aid); - dbStatement2.setString(2, username); - dbStatement2.execute(); + sql="INSERT INTO vote_answer (id_answer, username,value) VALUES (?,?,-1)"; + PreparedStatement dbStatement2 = conn.prepareStatement(sql); + dbStatement2.setInt(1, aid); + dbStatement2.setString(2, username); + dbStatement2.execute(); - stmt.close(); - conn.close(); - } - catch(SQLException ex) { - Logger.getLogger(AnswerWS.class.getName()).log(Level.SEVERE, null, ex); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(AnswerWS.class.getName()).log(Level.SEVERE, null, ex); + } + } + } } } return count; } @WebMethod(operationName = "isVoted") - public Boolean isVoted(@WebParam(name = "aid") int aid,@WebParam(name = "token") String token){ + public Boolean isVoted(@WebParam(name = "aid") int aid,@WebParam(name = "token") String token, + + @WebParam(name = "userAgent") String userAgent, + @WebParam(name = "ip") String ip){ Boolean status = false; conn = db.connect(); - String username = auth.checkToken(token); + String username = auth.checkToken(token,userAgent,ip); if(!username.equals("-999")){ - try { - Statement stmt; - stmt = conn.createStatement(); + if(!username.equals("-999")){ + if(!username.equals("-998")){//user agent + if(!username.equals("-997")){//ip + try { + Statement stmt; + stmt = conn.createStatement(); - String sql; - sql="Select * from vote_answer where id_answer = ? and username = ?"; + String sql; + sql="Select * from vote_answer where id_answer = ? and username = ?"; - PreparedStatement dbStatement = conn.prepareStatement(sql); - dbStatement.setInt(1, aid); - dbStatement.setString(2, username); + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, aid); + dbStatement.setString(2, username); - ResultSet rs; - rs = dbStatement.executeQuery(); + ResultSet rs; + rs = dbStatement.executeQuery(); - /* Get every data returned by SQLquery */ - while(rs.next()) { - status= true; - } + /* Get every data returned by SQLquery */ + while(rs.next()) { + status= true; + } - stmt.close(); - conn.close(); - } - catch(SQLException ex) { - Logger.getLogger(AnswerWS.class.getName()).log(Level.SEVERE, null, ex); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(AnswerWS.class.getName()).log(Level.SEVERE, null, ex); + } + } + } } } return status; @@ -325,8 +360,11 @@ public int getVoteById(@WebParam(name = "aid") int aid) { return count; } - public Boolean isValidToken(@WebParam(name = "token") String token){ - String username= auth.checkToken(token); + public Boolean isValidToken(@WebParam(name = "token") String token, + + @WebParam(name = "userAgent") String userAgent, + @WebParam(name = "ip") String ip){ + String username= auth.checkToken(token,userAgent,ip); if(username.equals("-999")) return false; else return true; diff --git a/StackExchangeService/src/java/Authentication/Auth.java b/StackExchangeService/src/java/Authentication/Auth.java index d2375c9e..8aac1419 100644 --- a/StackExchangeService/src/java/Authentication/Auth.java +++ b/StackExchangeService/src/java/Authentication/Auth.java @@ -32,7 +32,7 @@ import java.io.StringReader; public class Auth { - private final String url = "http://localhost:21568/StackExchangeAuth/validateToken"; + private final String url = "http://localhost:27300/StackExchangeAuth/validateToken"; // HTTP POST request private static Document convertStringToDocument(String xmlStr) { @@ -48,7 +48,7 @@ private static Document convertStringToDocument(String xmlStr) { } return null; } - public String checkToken(String token) { + public String checkToken(String token, String userAgent, String ip) { String username=""; String result=""; try { @@ -60,8 +60,10 @@ public String checkToken(String token) { con.setRequestProperty("Accept-Charset", charset); con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset); - String query = String.format("token_string=%s", - URLEncoder.encode(token, charset)); + String query = String.format("token_string=%s&user_agent=%s&ip", + URLEncoder.encode(token, charset), + URLEncoder.encode(userAgent, charset), + URLEncoder.encode(ip, charset)); try (OutputStream output = con.getOutputStream()) { output.write(query.getBytes(charset)); } @@ -81,8 +83,15 @@ public String checkToken(String token) { if(stat.equals("true")){ username= doc.getElementsByTagName("username").item(0).getTextContent(); } + else if(stat.equals("user-agent")){ + username="-998"; + } + else if(stat.equals("ip")){ + username="-997"; + } else{ username="-999"; + //username=stat; } @@ -107,7 +116,7 @@ private boolean isUsername(String s) { public static void main (String [] args) throws IOException{ Auth a = new Auth(); String abc = "key"; - System.out.println(a.checkToken(abc)); + //System.out.println(a.checkToken(abc)); //a.checkToken(abc); } } diff --git a/StackExchangeService/src/java/QuestionModel/QuestionWS.java b/StackExchangeService/src/java/QuestionModel/QuestionWS.java index 33a945f5..1ceb406a 100644 --- a/StackExchangeService/src/java/QuestionModel/QuestionWS.java +++ b/StackExchangeService/src/java/QuestionModel/QuestionWS.java @@ -90,32 +90,39 @@ public List getQuestionByQID(@WebParam(name = "qid") int qid) { public Boolean createQuestion( @WebParam(name = "topic") String topic, @WebParam(name = "token") String token, - @WebParam(name = "content") String content){ + @WebParam(name = "content") String content, + + @WebParam(name = "userAgent") String userAgent, + @WebParam(name = "ip") String ip){ Boolean status = true; - String uname = auth.checkToken(token); + String uname = auth.checkToken(token,userAgent,ip); status = false; if(!uname.equals("-999")){ - try { - conn = db.connect(); - Statement stmt; - stmt = conn.createStatement(); - String sql; - sql = "INSERT INTO question (topic, username,content,vote,date)VALUES (?, ?, ?, 0, ?)"; + if(!uname.equals("-998")){ + if(!uname.equals("-997")){ + try { + conn = db.connect(); + Statement stmt; + stmt = conn.createStatement(); + String sql; + sql = "INSERT INTO question (topic, username,content,vote,date)VALUES (?, ?, ?, 0, ?)"; - PreparedStatement dbStatement = conn.prepareStatement(sql); - dbStatement.setString(1, topic); - dbStatement.setString(2, uname); - dbStatement.setString(3, content); - dbStatement.setString(4, getCurrentTimeStamp()); + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setString(1, topic); + dbStatement.setString(2, uname); + dbStatement.setString(3, content); + dbStatement.setString(4, getCurrentTimeStamp()); - status= dbStatement.execute(); + status= dbStatement.execute(); - stmt.close(); - conn.close(); - } - catch(SQLException ex) { - Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + } + } } } return status; @@ -223,115 +230,141 @@ public int getAnswerById(@WebParam(name = "qid") int qid) { return count; } @WebMethod(operationName = "voteUp") - public int voteUp(@WebParam(name = "qid") int qid,@WebParam(name = "token") String token ){ + public int voteUp(@WebParam(name = "qid") int qid,@WebParam(name = "token") String token, + + @WebParam(name = "userAgent") String userAgent, + @WebParam(name = "ip") String ip){ int count; count=getVoteById(qid); - String username= auth.checkToken(token); + String username= auth.checkToken(token, userAgent,ip); if((!username.equals("-999"))&&(!isVoteUp(qid, username))){ - try { - conn = db.connect(); - Statement stmt; - stmt = conn.createStatement(); - //pernah vote down - if(isVoteDown(qid,username)){ - count+=2; - String sql; - sql="DELETE FROM vote_question WHERE id_question = ?"; - PreparedStatement dbStatement = conn.prepareStatement(sql); - dbStatement.setInt(1, qid); - dbStatement.execute(); - } - else{count+=1;} - String sql, sql_select; - sql="UPDATE question SET vote = ? WHERE id_question = ? "; + if(!username.equals("-999")){ + if(!username.equals("-998")){//user agent + if(!username.equals("-997")){//ip + try { + conn = db.connect(); + Statement stmt; + stmt = conn.createStatement(); + //pernah vote down + if(isVoteDown(qid,username)){ + count+=2; + String sql; + sql="DELETE FROM vote_question WHERE id_question = ?"; + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + dbStatement.execute(); + } + else{count+=1;} + String sql, sql_select; + sql="UPDATE question SET vote = ? WHERE id_question = ? "; - PreparedStatement dbStatement = conn.prepareStatement(sql); - dbStatement.setInt(1, count); - dbStatement.setInt(2, qid); - dbStatement.execute(); - sql="INSERT INTO vote_question (id_question, username,value) VALUES (?,?,1)"; - PreparedStatement dbStatement2 = conn.prepareStatement(sql); - dbStatement2.setInt(1, qid); - dbStatement2.setString(2, username); - dbStatement2.executeUpdate(); + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, count); + dbStatement.setInt(2, qid); + dbStatement.execute(); + sql="INSERT INTO vote_question (id_question, username,value) VALUES (?,?,1)"; + PreparedStatement dbStatement2 = conn.prepareStatement(sql); + dbStatement2.setInt(1, qid); + dbStatement2.setString(2, username); + dbStatement2.executeUpdate(); - stmt.close(); - conn.close(); - } - catch(SQLException ex) { - Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + } + } + } } } return count; } @WebMethod(operationName = "voteDown") - public int voteDown(@WebParam(name = "qid") int qid,@WebParam(name = "token") String token ){ + public int voteDown(@WebParam(name = "qid") int qid,@WebParam(name = "token") String token, + @WebParam(name = "userAgent") String userAgent, + @WebParam(name = "ip") String ip){ int count; count=getVoteById(qid); - String username= auth.checkToken(token); + String username= auth.checkToken(token, userAgent, ip); if((!username.equals("-999"))&&(!isVoteDown(qid, username))){ - try { - conn = db.connect(); - Statement stmt; - stmt = conn.createStatement(); - if(isVoteUp(qid,username)){ - count-=2; - String sql; - sql="DELETE FROM vote_question WHERE id_question = ?"; - PreparedStatement dbStatement = conn.prepareStatement(sql); - dbStatement.setInt(1, qid); - dbStatement.execute(); - }else{count-=1;} - String sql, sql_select; - sql="UPDATE question SET vote = ? WHERE id_question = ? "; + if(!username.equals("-999")){ + if(!username.equals("-998")){//user agent + if(!username.equals("-997")){//ip + try { + conn = db.connect(); + Statement stmt; + stmt = conn.createStatement(); + if(isVoteUp(qid,username)){ + count-=2; + String sql; + sql="DELETE FROM vote_question WHERE id_question = ?"; + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + dbStatement.execute(); + }else{count-=1;} + String sql, sql_select; + sql="UPDATE question SET vote = ? WHERE id_question = ? "; - PreparedStatement dbStatement = conn.prepareStatement(sql); - dbStatement.setInt(1, count); - dbStatement.setInt(2, qid); - dbStatement.execute(); + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, count); + dbStatement.setInt(2, qid); + dbStatement.execute(); - sql="INSERT INTO vote_question (id_question, username,value) VALUES (?,?,-1)"; - PreparedStatement dbStatement2 = conn.prepareStatement(sql); - dbStatement2.setInt(1, qid); - dbStatement2.setString(2, username); - dbStatement2.execute(); + sql="INSERT INTO vote_question (id_question, username,value) VALUES (?,?,-1)"; + PreparedStatement dbStatement2 = conn.prepareStatement(sql); + dbStatement2.setInt(1, qid); + dbStatement2.setString(2, username); + dbStatement2.execute(); - stmt.close(); - conn.close(); - } - catch(SQLException ex) { - Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + } + } + } } } return count; } @WebMethod(operationName = "deleteQuestionById") - public Boolean deleteQuestionById(@WebParam(name = "qid") int qid,@WebParam(name = "token") String token){ + public Boolean deleteQuestionById(@WebParam(name = "qid") int qid,@WebParam(name = "token") String token, + @WebParam(name = "userAgent") String userAgent, + @WebParam(name = "ip") String ip){ int count=0; Boolean status= true; - String username= auth.checkToken(token); - if((!username.equals("-999"))&&(validateUsername(qid, username))){ - try { - Statement statement; - conn = db.connect(); - statement = conn.createStatement(); - - String sql; - - sql = "DELETE FROM question where id_question = ?"; - - PreparedStatement dbStatement = conn.prepareStatement(sql); - dbStatement.setInt(1, qid); - status=dbStatement.execute(); - - statement.close(); - conn.close(); - } - catch(SQLException ex) { - Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + String username= auth.checkToken(token, userAgent, ip); + if((!username.equals("-999"))&&(validateUsername(qid, username))){ + if(!username.equals("-999")){ + if(!username.equals("-998")){//user agent + if(!username.equals("-997")){//ip + try { + Statement statement; + conn = db.connect(); + statement = conn.createStatement(); + + String sql; + + sql = "DELETE FROM question where id_question = ?"; + + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setInt(1, qid); + status=dbStatement.execute(); + + statement.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + } + } + } } + } return status; } @@ -516,38 +549,48 @@ public Boolean editQuestion( @WebParam(name = "qid") int qid, @WebParam(name = "topic") String topic, @WebParam(name = "token") String token, - @WebParam(name = "content") String content){ + @WebParam(name = "content") String content, + @WebParam(name = "userAgent") String userAgent, + @WebParam(name = "ip") String ip){ Boolean status = true; - String username = auth.checkToken(token); + String username = auth.checkToken(token, userAgent,ip); if((!username.equals("-999"))&&(validateUsername(qid, username))){ - try { - Statement stmt; - conn = db.connect(); - stmt = conn.createStatement(); - String sql; - sql = "UPDATE question SET topic = ? , content= ?, date = ? WHERE id_question = ?"; + if(!username.equals("-999")){ + if(!username.equals("-998")){//user agent + if(!username.equals("-997")){//ip + try { + Statement stmt; + conn = db.connect(); + stmt = conn.createStatement(); + String sql; + sql = "UPDATE question SET topic = ? , content= ?, date = ? WHERE id_question = ?"; - PreparedStatement dbStatement = conn.prepareStatement(sql); - dbStatement.setString(1, topic); - dbStatement.setString(2, content); - dbStatement.setString(3, getCurrentTimeStamp()); - dbStatement.setInt(4, qid); + PreparedStatement dbStatement = conn.prepareStatement(sql); + dbStatement.setString(1, topic); + dbStatement.setString(2, content); + dbStatement.setString(3, getCurrentTimeStamp()); + dbStatement.setInt(4, qid); - dbStatement.execute(); + dbStatement.execute(); - stmt.close(); - conn.close(); - } - catch(SQLException ex) { - Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + stmt.close(); + conn.close(); + } + catch(SQLException ex) { + Logger.getLogger(QuestionWS.class.getName()).log(Level.SEVERE, null, ex); + } + } + } } } return status; } - public Boolean isValidToken(@WebParam(name = "token") String token){ - String username= auth.checkToken(token); + public Boolean isValidToken(@WebParam(name = "token") String token, + @WebParam(name = "userAgent") String userAgent, + @WebParam(name = "ip") String ip){ + String username= auth.checkToken(token,userAgent,ip); if(username.equals("-999")) return false; else return true; diff --git a/StackExchangeService/src/java/UserModel/UserWS.java b/StackExchangeService/src/java/UserModel/UserWS.java index 487cfb62..d2114269 100644 --- a/StackExchangeService/src/java/UserModel/UserWS.java +++ b/StackExchangeService/src/java/UserModel/UserWS.java @@ -13,7 +13,7 @@ import javax.jws.WebParam; import javax.jws.WebResult; -@WebService(serviceName = "UserWs") +@WebService(serviceName = "UserWS") public class UserWS { private final DB db = new DB(); From f63584f1b1317d979bbffe371b44d38c8691921d Mon Sep 17 00:00:00 2001 From: Fiqie Astahta Date: Sun, 6 Dec 2015 23:34:14 +0700 Subject: [PATCH 25/26] Add link laporan --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 848d48bb..eeec2871 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Diharapkan dengan tugas ini anda dapat mengerti: ### Link Laporan -*Masukkan link laporan anda di sini* +https://drive.google.com/file/d/0B3aHvcrZ3nzobjFha2RKN19nXzA/view?usp=sharing ### Arsitektur Umum Server From 96021e0931fa856f7998380da1fc7d05f930eaa5 Mon Sep 17 00:00:00 2001 From: dininta Date: Sun, 6 Dec 2015 23:33:16 +0700 Subject: [PATCH 26/26] comment and vote angular --- .../src/java/Servlet/addcomment.java | 100 +++++++++ .../src/java/Servlet/getcomments.java | 88 ++++++++ .../src/java/Servlet/login.java | 23 +- .../src/java/Servlet/voteanswer.java | 117 ----------- .../src/java/Servlet/votedownanswer.java | 97 +++++++++ .../src/java/Servlet/votedownquestion.java | 97 +++++++++ .../src/java/Servlet/votequestion.java | 117 ----------- .../src/java/Servlet/voteupanswer.java | 111 ++++++++++ .../src/java/Servlet/voteupquestion.java | 97 +++++++++ StackExchangeClient/web/WEB-INF/web.xml | 48 +++++ StackExchangeClient/web/commentjs.jsp | 49 ----- StackExchangeClient/web/controller.js | 22 -- StackExchangeClient/web/style.css | 10 + StackExchangeClient/web/viewpost.jsp | 196 ++++++++++++++---- 14 files changed, 818 insertions(+), 354 deletions(-) create mode 100644 StackExchangeClient/src/java/Servlet/addcomment.java create mode 100644 StackExchangeClient/src/java/Servlet/getcomments.java delete mode 100644 StackExchangeClient/src/java/Servlet/voteanswer.java create mode 100644 StackExchangeClient/src/java/Servlet/votedownanswer.java create mode 100644 StackExchangeClient/src/java/Servlet/votedownquestion.java delete mode 100644 StackExchangeClient/src/java/Servlet/votequestion.java create mode 100644 StackExchangeClient/src/java/Servlet/voteupanswer.java create mode 100644 StackExchangeClient/src/java/Servlet/voteupquestion.java delete mode 100644 StackExchangeClient/web/commentjs.jsp delete mode 100644 StackExchangeClient/web/controller.js diff --git a/StackExchangeClient/src/java/Servlet/addcomment.java b/StackExchangeClient/src/java/Servlet/addcomment.java new file mode 100644 index 00000000..c75e937e --- /dev/null +++ b/StackExchangeClient/src/java/Servlet/addcomment.java @@ -0,0 +1,100 @@ +package Servlet; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + + +public class addcomment extends HttpServlet { + + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + String token = request.getParameter("token"); + String qid = request.getParameter("qid"); + String content = request.getParameter("content"); + String useragent = request.getParameter("user-agent"); + String ip = request.getParameter("X-FORWARDED-FOR"); + + try { + PrintWriter out = response.getWriter(); + + URL url = new URL("http://localhost:48567/StackExchangeCV/addcomment"); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setDoOutput(true); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", "application/json"); + + String input = "{\"token\":\""+token+"\",\"id_question\":"+qid+",\"content\":\""+content+"\",\"user-agent\":\""+useragent+"\",\"ip\":\""+ip+"\"}"; + + OutputStream os = conn.getOutputStream(); + os.write(input.getBytes()); + os.flush(); + if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) { + throw new RuntimeException("Failed : HTTP error code : " + + conn.getResponseCode()); + } + BufferedReader br = new BufferedReader(new InputStreamReader( + (conn.getInputStream()))); + String output; + while ((output = br.readLine()) != null) { + out.println(output); + } + conn.disconnect(); + + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} diff --git a/StackExchangeClient/src/java/Servlet/getcomments.java b/StackExchangeClient/src/java/Servlet/getcomments.java new file mode 100644 index 00000000..f8973ffa --- /dev/null +++ b/StackExchangeClient/src/java/Servlet/getcomments.java @@ -0,0 +1,88 @@ +package Servlet; + +import java.io.PrintWriter; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; + +public class getcomments extends HttpServlet { + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + String qid = request.getParameter("qid"); + + try { + PrintWriter out = response.getWriter(); + + URL url = new URL("http://localhost:48567/StackExchangeCV/comment/resource/" + qid); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setRequestProperty("Accept", "application/json"); + + if (conn.getResponseCode() != 200) { + throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode()); + } + + BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream()))); + + String output; + while ((output = br.readLine()) != null) { + out.println(output); + } + + conn.disconnect(); + + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} diff --git a/StackExchangeClient/src/java/Servlet/login.java b/StackExchangeClient/src/java/Servlet/login.java index 9008059c..818c4b14 100644 --- a/StackExchangeClient/src/java/Servlet/login.java +++ b/StackExchangeClient/src/java/Servlet/login.java @@ -25,18 +25,33 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re response.setContentType("application/xml;charset=UTF-8"); String uname = request.getParameter("user"); String pass = request.getParameter("pass"); - String useragent = request.getHeader("user-agent"); + String useragent = request.getHeader("User-Agent"); String ip = request.getHeader("X-FORWARDED-FOR"); + if (ip==null) { + ip = request.getRemoteAddr(); + } + +// Cookie ipCookie = new Cookie("ipCookie", ip); +// ipCookie.setMaxAge(6*60*60); +// ipCookie.setPath("/"); +// response.addCookie(ipCookie); +// Cookie uaCookie = new Cookie("uaCookie", useragent); +// uaCookie.setMaxAge(6*60*60); +// uaCookie.setPath("/"); +// response.addCookie(uaCookie); + + + Form form = new Form(); form.param("uname", uname); form.param("pass", pass); form.param("useragent", useragent); form.param("ip", ip); - if (ip == null) { - ip = request.getRemoteAddr(); - } + //if (ip == null) { + // ip = request.getRemoteAddr(); + //} Client client = ClientBuilder.newClient(); String url = "http://localhost:21568/StackExchangeAuth/getToken"; diff --git a/StackExchangeClient/src/java/Servlet/voteanswer.java b/StackExchangeClient/src/java/Servlet/voteanswer.java deleted file mode 100644 index 51830f74..00000000 --- a/StackExchangeClient/src/java/Servlet/voteanswer.java +++ /dev/null @@ -1,117 +0,0 @@ -package Servlet; - -import answermodel.AnswerWS_Service; -import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.ws.WebServiceRef; - -public class voteanswer extends HttpServlet { - @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_15534/StackExchangeService/AnswerWS.wsdl") - private AnswerWS_Service service; - - protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String token = ""; - int id_answer = Integer.parseInt(request.getParameter("id_answer")); - int id_question = Integer.parseInt(request.getParameter("id_question")); - boolean found = false; - int i=0; - Cookie[] cookies = null; - cookies = request.getCookies(); - if (cookies != null) { - while (!found && i < cookies.length){ - if (cookies[i].getName().equals("tokenCookie")) { - token = cookies[i].getValue(); - found = true; - } - i++; - } - } - if (isValidToken(token)) { - int k = Integer.parseInt(request.getParameter("type")); - if (k==1) - voteUp(id_answer, token); - else - voteDown(id_answer,token); - response.sendRedirect("viewpost?id="+id_question); - } - else { - int count = 0; - i = 0; - while (count<2 && i - /** - * Handles the HTTP GET method. - * - * @param request servlet request - * @param response servlet response - * @throws ServletException if a servlet-specific error occurs - * @throws IOException if an I/O error occurs - */ - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - processRequest(request, response); - } - - /** - * Handles the HTTP POST method. - * - * @param request servlet request - * @param response servlet response - * @throws ServletException if a servlet-specific error occurs - * @throws IOException if an I/O error occurs - */ - @Override - protected void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - processRequest(request, response); - } - - /** - * Returns a short description of the servlet. - * - * @return a String containing servlet description - */ - @Override - public String getServletInfo() { - return "Short description"; - }// - - private int voteUp(int qid, java.lang.String token) { - // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. - // If the calling of port operations may lead to race condition some synchronization is required. - answermodel.AnswerWS port = service.getAnswerWSPort(); - return port.voteUp(qid, token); - } - - private int voteDown(int aid, java.lang.String token) { - // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. - // If the calling of port operations may lead to race condition some synchronization is required. - answermodel.AnswerWS port = service.getAnswerWSPort(); - return port.voteDown(aid, token); - } - - private Boolean isValidToken(java.lang.String token) { - // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. - // If the calling of port operations may lead to race condition some synchronization is required. - answermodel.AnswerWS port = service.getAnswerWSPort(); - return port.isValidToken(token); - } - -} diff --git a/StackExchangeClient/src/java/Servlet/votedownanswer.java b/StackExchangeClient/src/java/Servlet/votedownanswer.java new file mode 100644 index 00000000..68b08230 --- /dev/null +++ b/StackExchangeClient/src/java/Servlet/votedownanswer.java @@ -0,0 +1,97 @@ +package Servlet; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class votedownanswer extends HttpServlet { + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + String token = request.getParameter("token"); + String aid = request.getParameter("aid"); + String useragent = request.getParameter("user-agent"); + String ip = request.getParameter("X-FORWARDED-FOR"); + + try { + PrintWriter out = response.getWriter(); + + URL url = new URL("http://localhost:48567/StackExchangeCV/VoteDownAnswer"); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setDoOutput(true); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", "application/json"); + + String input = "{\"token\":\""+token+"\",\"id_answer\":"+aid+",\"user-agent\":\""+useragent+"\",\"ip\":\""+ip+"\"}"; + + OutputStream os = conn.getOutputStream(); + os.write(input.getBytes()); + os.flush(); + if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) { + throw new RuntimeException("Failed : HTTP error code : " + + conn.getResponseCode()); + } + BufferedReader br = new BufferedReader(new InputStreamReader( + (conn.getInputStream()))); + String output; + while ((output = br.readLine()) != null) { + out.println(output); + } + conn.disconnect(); + + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} diff --git a/StackExchangeClient/src/java/Servlet/votedownquestion.java b/StackExchangeClient/src/java/Servlet/votedownquestion.java new file mode 100644 index 00000000..3a931d24 --- /dev/null +++ b/StackExchangeClient/src/java/Servlet/votedownquestion.java @@ -0,0 +1,97 @@ +package Servlet; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class votedownquestion extends HttpServlet { + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + String token = request.getParameter("token"); + String qid = request.getParameter("qid"); + String useragent = request.getParameter("user-agent"); + String ip = request.getParameter("X-FORWARDED-FOR"); + + try { + PrintWriter out = response.getWriter(); + + URL url = new URL("http://localhost:48567/StackExchangeCV/VoteDownQuestion"); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setDoOutput(true); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", "application/json"); + + String input = "{\"token\":\""+token+"\",\"id_question\":"+qid+",\"user-agent\":\""+useragent+"\",\"ip\":\""+ip+"\"}"; + + OutputStream os = conn.getOutputStream(); + os.write(input.getBytes()); + os.flush(); + if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) { + throw new RuntimeException("Failed : HTTP error code : " + + conn.getResponseCode()); + } + BufferedReader br = new BufferedReader(new InputStreamReader( + (conn.getInputStream()))); + String output; + while ((output = br.readLine()) != null) { + out.println(output); + } + conn.disconnect(); + + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} diff --git a/StackExchangeClient/src/java/Servlet/votequestion.java b/StackExchangeClient/src/java/Servlet/votequestion.java deleted file mode 100644 index 778dd549..00000000 --- a/StackExchangeClient/src/java/Servlet/votequestion.java +++ /dev/null @@ -1,117 +0,0 @@ -package Servlet; - -import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.ws.WebServiceRef; -import questionmodel.QuestionWS_Service; - -public class votequestion extends HttpServlet { - @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_15534/StackExchangeService/QuestionWS.wsdl") - private QuestionWS_Service service; - - protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - int idQuestion = Integer.parseInt(request.getParameter("id")); - String token = ""; - boolean found = false; - int i=0; - Cookie[] cookies = null; - cookies = request.getCookies(); - if (cookies != null) { - while (!found && i < cookies.length){ - if (cookies[i].getName().equals("tokenCookie")) { - token = cookies[i].getValue(); - found = true; - } - i++; - } - } - if (isValidToken(token)) { - int k = Integer.parseInt(request.getParameter("type")); - if (k==1) - voteUp(idQuestion, token); - else - voteDown(idQuestion,token); - response.sendRedirect("viewpost?id="+idQuestion); - } - else { - int count = 0; - i = 0; - while (count<2 && i - /** - * Handles the HTTP GET method. - * - * @param request servlet request - * @param response servlet response - * @throws ServletException if a servlet-specific error occurs - * @throws IOException if an I/O error occurs - */ - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - processRequest(request, response); - } - - /** - * Handles the HTTP POST method. - * - * @param request servlet request - * @param response servlet response - * @throws ServletException if a servlet-specific error occurs - * @throws IOException if an I/O error occurs - */ - @Override - protected void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - processRequest(request, response); - } - - /** - * Returns a short description of the servlet. - * - * @return a String containing servlet description - */ - @Override - public String getServletInfo() { - return "Short description"; - }// - - private int voteUp(int qid, java.lang.String token) { - // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. - // If the calling of port operations may lead to race condition some synchronization is required. - questionmodel.QuestionWS port = service.getQuestionWSPort(); - return port.voteUp(qid, token); - } - - private int voteDown(int qid, java.lang.String token) { - // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. - // If the calling of port operations may lead to race condition some synchronization is required. - questionmodel.QuestionWS port = service.getQuestionWSPort(); - return port.voteDown(qid, token); - } - - private Boolean isValidToken(java.lang.String token) { - // Note that the injected javax.xml.ws.Service reference as well as port objects are not thread safe. - // If the calling of port operations may lead to race condition some synchronization is required. - questionmodel.QuestionWS port = service.getQuestionWSPort(); - return port.isValidToken(token); - } - -} diff --git a/StackExchangeClient/src/java/Servlet/voteupanswer.java b/StackExchangeClient/src/java/Servlet/voteupanswer.java new file mode 100644 index 00000000..f90770cf --- /dev/null +++ b/StackExchangeClient/src/java/Servlet/voteupanswer.java @@ -0,0 +1,111 @@ +package Servlet; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import javax.servlet.ServletException; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class voteupanswer extends HttpServlet { + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + String token = request.getParameter("token"); + String aid = request.getParameter("aid"); + String useragent = request.getHeader("user-agent"); + String ip = request.getHeader("X-FORWARDED-FOR"); + + if(ip==null){ + ip = request.getRemoteAddr(); + } + +// Cookie ipCookie = new Cookie("ipCookie", ip); +// ipCookie.setMaxAge(6*60*60); +// ipCookie.setPath("/"); +// response.addCookie(ipCookie); +// Cookie uaCookie = new Cookie("uaCookie", useragent); +// uaCookie.setMaxAge(6*60*60); +// uaCookie.setPath("/"); +// response.addCookie(uaCookie); + + try { + PrintWriter out = response.getWriter(); + + URL url = new URL("http://localhost:48567/StackExchangeCV/VoteUpAnswer"); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setDoOutput(true); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", "application/json"); + + String input = "{\"token\":\""+token+"\",\"id_answer\":"+aid+",\"useragent\":\""+useragent+"\",\"ip\":\""+ip+"\"}"; + + OutputStream os = conn.getOutputStream(); + os.write(input.getBytes()); + os.flush(); + if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) { + throw new RuntimeException("Failed : HTTP error code : " + + conn.getResponseCode()); + } + BufferedReader br = new BufferedReader(new InputStreamReader( + (conn.getInputStream()))); + String output; + while ((output = br.readLine()) != null) { + out.println(output); + } + conn.disconnect(); + + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} diff --git a/StackExchangeClient/src/java/Servlet/voteupquestion.java b/StackExchangeClient/src/java/Servlet/voteupquestion.java new file mode 100644 index 00000000..295e4bb8 --- /dev/null +++ b/StackExchangeClient/src/java/Servlet/voteupquestion.java @@ -0,0 +1,97 @@ +package Servlet; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class voteupquestion extends HttpServlet { + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + String token = request.getParameter("token"); + String qid = request.getParameter("qid"); + String useragent = request.getParameter("user-agent"); + String ip = request.getParameter("X-FORWARDED-FOR"); + + try { + PrintWriter out = response.getWriter(); + + URL url = new URL("http://localhost:48567/StackExchangeCV/VoteUpQuestion"); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setDoOutput(true); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", "application/json"); + + String input = "{\"token\":\""+token+"\",\"id_question\":"+qid+",\"useragent\":\""+useragent+"\",\"ip\":\""+ip+"\"}"; + + OutputStream os = conn.getOutputStream(); + os.write(input.getBytes()); + os.flush(); + if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) { + throw new RuntimeException("Failed : HTTP error code : " + + conn.getResponseCode()); + } + BufferedReader br = new BufferedReader(new InputStreamReader( + (conn.getInputStream()))); + String output; + while ((output = br.readLine()) != null) { + out.println(output); + } + conn.disconnect(); + + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} diff --git a/StackExchangeClient/web/WEB-INF/web.xml b/StackExchangeClient/web/WEB-INF/web.xml index 01241cc2..57df15cf 100644 --- a/StackExchangeClient/web/WEB-INF/web.xml +++ b/StackExchangeClient/web/WEB-INF/web.xml @@ -52,6 +52,30 @@ search Servlet.search + + getcomments + Servlet.getcomments + + + voteupquestion + Servlet.voteupquestion + + + votedownquestion + Servlet.votedownquestion + + + voteupanswer + Servlet.voteupanswer + + + votedownanswer + Servlet.votedownanswer + + + addcomment + Servlet.addcomment + viewpost /viewpost @@ -104,6 +128,30 @@ search /search + + getcomments + /getcomments + + + voteupquestion + /voteupquestion + + + votedownquestion + /votedownquestion + + + voteupanswer + /voteupanswer + + + votedownanswer + /votedownanswer + + + addcomment + /addcomment + 30 diff --git a/StackExchangeClient/web/commentjs.jsp b/StackExchangeClient/web/commentjs.jsp deleted file mode 100644 index c51e448f..00000000 --- a/StackExchangeClient/web/commentjs.jsp +++ /dev/null @@ -1,49 +0,0 @@ -<%-- - Document : nyobaVote - Created on : Dec 5, 2015, 3:28:56 PM - Author : FiqieUlya ---%> - -<%@page contentType="text/html" pageEncoding="UTF-8"%> - - - - - - - -
- -
-
- - -
- - -

-
-
- -

Comment

- - -
    -
    -
  • {{comments.content}}
  • -
  • {{comments.username}}
  • -
  • {{comments.id}}
  • -
    -
- -
-
- - - - \ No newline at end of file diff --git a/StackExchangeClient/web/controller.js b/StackExchangeClient/web/controller.js deleted file mode 100644 index ef7bfd92..00000000 --- a/StackExchangeClient/web/controller.js +++ /dev/null @@ -1,22 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - - -var myApp = angular.module('myApp', []); - -myApp.controller('myController', ['$scope', function ($comment) { - $comment.add = function (id, username) { - - // ADD A NEW ELEMENT. - if(id < 5 ){ - $comment.list.push({ username: username, content: $comment.content, id: id }); - } - // CLEAR THE FIELDS. - $comment.username = ''; - $comment.content = ''; - } -} ] -); \ No newline at end of file diff --git a/StackExchangeClient/web/style.css b/StackExchangeClient/web/style.css index 75b26be7..382bbf8e 100644 --- a/StackExchangeClient/web/style.css +++ b/StackExchangeClient/web/style.css @@ -141,13 +141,18 @@ form.search-box > input[type="submit"]{ padding: 20px; } +#question { + width:100%; +} #question #countvote { width:15%; text-align:center; padding: 20px; + vertical-align: top; } #question #display { vertical-align:top; + width: 80%; } form.RegisterForm > input[type="text"], form.RegisterForm > input[type="password"] { @@ -190,3 +195,8 @@ form.AnswerForm > textarea { resize: none; padding-left:1%; } + +#comment { + border-top: 1px solid lightgray; + padding-top: 5px; +} diff --git a/StackExchangeClient/web/viewpost.jsp b/StackExchangeClient/web/viewpost.jsp index 8e83bfe4..38c51eb9 100644 --- a/StackExchangeClient/web/viewpost.jsp +++ b/StackExchangeClient/web/viewpost.jsp @@ -10,7 +10,7 @@ Stack Exchange - +
@@ -38,38 +38,50 @@
-
+

-
+

- ${question.content}
+ ${question.content}

+ + + +

+ asked by ${question.username} | + + + ">edit + | + + + " + onclick="return confirm('Are you sure you want to delete this item?')">delete + +

+
+ +

asked by ${question.username}

+
+
+ +
+
+ {{comments.content}} - {{comments.username}} +
+
+ + +
+
+
- - -

- asked by ${question.username} | - - - ">edit - | - - - " - onclick="return confirm('Are you sure you want to delete this item?')">delete - -

-
- -

asked by ${question.username}

-
-

${count} Answer


@@ -78,11 +90,11 @@
-
+

-
+
${answer.content}

answered by ${answer.username} at ${answer.date}

@@ -101,40 +113,134 @@