资源描述:
《基于反射机制的框架研究与实现毕业论文》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
基于反射机制的框架研究与实现RESEARCHANDIMPLEMENTATIONOFTHEFRAMEWORKBASEDONREFLECTION专 业:2010信息与计算科学指导教师姓名:申请学位级别:学士论文提交日期:2014年6月12日摘要 目前,随着互联网应用的快速发展,软件运行环境正从一个集中封闭计算的平台走向开放、动态的计算平台,并且基于服务的计算模式将逐渐取代它,因此这些变化传统软构件技术应对起来很困难。本文针对目前框架复用程度不高,无法适应动态运行环境和多变用户需求这些问题,基于反射理论,研究具有灵活性和自适应性的框架。框架具有减少代码冗余,提高运行速度,便于维护,规范编程等优点。Java反射机制是在运行状态当中,对于任何一个类,都可以知道这个类的所有属性及方法;对于任何一个对象,都能够调用它的一个方法及属性;这种动态获取信息和动态调用对象方法的功能称为Java语言的反射机制。反射其实就是程序可以对自身信息进行检查。在程序中能够检查某类中的方法属性等信息,而且能够动态调用。这样就能够写出很灵活的程序。例如想要把一个对象中属性名相同的数据复制到另外一个对象中,就可以利用反射,而且不需要指定每个属性名字,只需要动态从类中获取信息,再判断属性名是否相同就可以了。本课题旨在基于反射机制对框架进行研究,实现一个轻量级的框架以此来适应小的系统。轻量J2EE应用是对经典J2EE应用的简化,在保留经典J2EE应用的架构、良好的可扩展性、可维护性的基础上,简化了J2EE应用的开发,降低了J2EE应用的成本。关键词:反射机制;轻量级;框架ABSTRACTCurrently,withtherapiddevelopmentofInternetapplications,software operatingenvironmentismovingfromacentralizedclosedcomputingplatformtoanopenanddynamiccomputingplatform,service-basedcomputingmodelwillgraduallyreplaceit,therefore,thesechangestraditionalsoftwarecomponenttechnologyisverydifficulttodealwith.Inthisarticle,Fortheseissuesaboutcurrentsoftwarecomponentrepeatedutilizationisnothigh,dynamicoperatingenvironmentcannotmeetandthechangingneedsofusers,accordingtothetheoryofreflection,thisarticleresearchesasoftwarecomponenttechnologywhichishighflexibilityandadaptability.Theframeworkiswiththeadvantagesofreducingcoderedundancy,improvingthespeed,easeofmaintenance,standardizedprogrammingandsoon.JAVAreflectioncanknowallthepropertiesandmethodsofanyoneclassinrunningthem;Foranyobject,itisabletocalloneofitsmethodsandproperties;Thefunctionofaccessingtoinformationdynamicallyandcallingobjectmethoddynamicallyiscalledreflectionmechanismofjavalanguage.Actually,reflectionisaprogramcanchecktheinformationontheirown.JAVAreflectionmechanismcancheckthepropertiesofcertainmethodsininformation,andinvokedynamically.Thismakesitpossibletowriteaveryflexibleprogram.Forexample,someonewantstocopyanobjectattributewiththesamenameasthedatatoanother,hecanusereflection,withoutneedingtospecifythenameofeachattribute,onlyneedtogetinformationfromadynamicclass,andthendeterminewhetherthesamepropertynameonit.Thisarticleisbasedonresearchingthereflectionmechanismframework,achievingalightweightframeworkinordertoadapttothesmallsystem.ApplicationofLightweightJ2EEissimplifiedbyclassicJ2EE,Onthebasisofretainingtheclassicapplicationarchitecture,goodscalability,andgoodmaintainability,itSimplifiesapplicationdevelopmentandreducesapplicationcosts.Keywords:Reflection;lightweight;framework目录第一章绪论1 第一节论文的背景1第二节论文研究目标1第二章相关概念以及概念之间的关系2第一节反射机制2第二节轻量级2第三节设计模式简介2第四节框架3第五节架构4第六节框架与架构关系4第七节框架与设计模式关系4第三章系统开发环境技术介绍6第一节MyEclipse介绍6第二节MySQL数据库介绍6第四章框架研究8第一节Struts2框架8第二节Spring框架8第三节Hibernate框架9第四节Java优点10第五章框架与数据库连接工具12第一节JDBC介绍12第二节连接池13第三节几种常见的连接池14 第六章建立数据库17第一节数据库表的结构17第二节创建数据库部分代码及结果17第七章基于反射机制框架的设计与实现19第一节框架的总体设计19第二节具体代码介绍20第三节代码测试22第八章论文总结与展望30第一节本文总结30第二节未来展望30参考文献31致谢32 天津科技大学2014届本科生毕业设计第一章绪论第一节论文的背景随着软件不断升级的规模和复杂性,在软件工程中,大家更加深刻的认识到系统构造的整体设计及规格说明的重要程度早已高出数据结构以及特定算法的选择,而且系统的成功需要优良的体系结构来保证。伴随软件技术和软件领域的不断发展,复杂性越来越大。越来越多的问题需要开发人员的解决,当然解决的方法、方案各不相同。开发人员或者设计师如何在以前的工作基础之上开发新的设计,对以前的成功案例进行复用。因此,软件重用技术越来越被人们所重视了,设计模式和框架渐渐产生。由于开源软件兴起,框架更是层出不穷。架构是软件系统由整体到部分最高层次的划分,大多数是由多个不相同领域框架构成。一个成功的体系架构有助于成功的软件促成,但软件体系结构需要一个复杂的和不断改进以建立的过程。软件开发人员不可能为每个不同项目,使用不同的构架,那样既耗时又费力。能够重用以前构架,或者开发通用构架是每个开发者所想要的。在不同的框架中如何选择适合应用的框架,以及如何让每个应用层完美连接?如何整合框架,才能使各层之间互相作用是以都以一种松散耦合方式而不用去管底层技术细节?软件开发人员需要解决这些问题。第二节论文研究目标框架核心的价值是对知识的积累。但由于知识只存在于编程人员大脑之中,因此是很难进行累积的。在软件开发中,代码是确定的知识,人力或者机器可读取代码都能够理解代码的目的,而且会出现相同的理解,因此最好的办法是使用代码对知识进行积累。框架就是这种思想产物。框架包括了少许代码,它们描述了在某一个范围问题中抽象概念和抽象概念之间的关联。因此能够利用框架对知识进行积累。框架定义了扩展方式以此规范框架的使用行为。复用和在包装的思绪让软件能够保持总体构造稳定性及扩展性。针对当前有多种流行的Java框架,这些框架中有优秀的设计思想,有优秀的设计模式,也有数不清的成功的商业应用案例,同时,它们所使用的Jar文件也有成百个模型,所以对于小的系统不太适合,本课题旨在基于反射机制对框架进行研究,实现一个轻量级的框架以此来适应小的系统。轻量级J2EE是在对经典J2EE的应用的简化,同时在保存了经典的应用体系结构,优秀的可扩展性,可维护性基础之上,简化了应用的开发,削减应用成本。30 天津科技大学2014届本科生毕业设计第二章相关概念以及概念之间的关系第一节反射机制Java反射机制在运行时,对任何一个类都可以了解此类的全部属性及方法;对任意一个对象,都能够调出应用它的一种方法及属性;这类动态获得信息和以动态方式去调用目标的功能叫做Java语言反射机制[1]。Java语言产生的原因是为了适应网络应用。语言的反射机制的开发和实施,其目的是能够传递网络中的对象,并可以根据传递的对象的信息来重建对象本身,因此重建是动态的。在远程过程及远程方式调用功能达成中,反射机制起到了很大的功用。也的确是在这些基础之上孕育了Java的各类新技术。在Java语言中,一个类具有不同的属性和方法,通过相关类来实现对其信息的提取及重构。第二节轻量级所谓“轻量级”,并非“设计简陋、功用少、实现粗陋”的意思。它的设计理念哲学意义是“很多的操作不需要分布式以及不需要那些重量级的技能,比方说JNDI,将应用中没必要的技术隔离或者改造是有必要[2]。完全能针对目前最常见、简易的使用中的场景来设计,有特殊的需要时,再想办法解决问题就行”。“轻量级”包含两个概念:1、对编程模型和更具响应能力的容器简化,对传统J2EEAPI有关不必要的复杂性及限制进行清除。2、对于需求常常测试调试的开发,缩小应用程序部署时间是很有必要的。第三节设计模式简介一、模式的历史设计模式最早源于建筑学。在20世纪70年代,建筑学家CHRISTOPHERALEXANDER完成了许多专著,在这些专著中有些记录了建筑学以及土木工程学的模式。之后,软件开发的一些模式先驱们在CHRISTOPHERALEXANDER的专著中得到了灵感,从此软件开发就有模式这一观念了[3][4]。经过ErichGamma、JohnVlissides、RalphJphnson、RichardHelm四位作者的文章[5],软件开发中的模式观念得到了普及。GOF在他们的作品中共记录了常用的设计模式,这些模式后来被人们称为GOF模式。当然,他们的作品中描述的模式并非他们自己发明的。而是他们在发现许多类似的设计方案,这些设计方案在很多项目重复的出现,他们总结出这些模式,并记录在书中。当GOF的作品出版之后,大量类似的软件模式书籍相继出现,这些著作涉及到各个领域和用途。30 天津科技大学2014届本科生毕业设计二、模式的定义其实模式很难有固定的定义,Alexander描述的是:“模式描述了在人们四周不停的反复发生的问题和这个问题解决方案的主旨。如此,人们就可以屡次的运用该方案而不必去做同样的劳动了”。虽然Alexander说的是建筑的模式,但这个定义在软件设计中也能很好运用。一个模式一般有四个基本要素[5]。“模式名称”是一个助记名,对于模式想要解决的问题、效果以及解决方案能够利用一两个词汇进行描述。“问题”描述了模式适用场景并对设计问题以及问题存在的因果进行解释。“解决方案”表达了设计组成部分以及他们之间的合作方法和各自的任务。“效果”表达了了模式应用效果和使用模式权衡问题。三、模式的作用每个设计模式体系的评估、注解和定名了面向对象系统中一个首要并且反复出现得设计[6],用这样的模式会使我们获益良多。第一,模式可以让我们重用成功设计及体系结构。通过模式提供的方案都在不同时间、不同项目中被反复的用于解决相似的问题而总结的使用经验,模式形成了强大的重用机制,可以让软件开发人员避免重复编写代码。第二,模式提供大量共用词汇。使用这些词汇软件开发人员可以在更高层上进行设计以及交流。第三,模式制约了解决方案空间。模式增加了问题解决方案空间的约束,也可以说是创造出了一个边界,设计以及实施必须在边界里面完成,否则就会对模式及设计损坏,导致意想不到的“反模式”。第四节框架框架是提取工程软件开发当中特定范围软件具备相似属性的部份,框架是由一组联系紧密的classes(类)构成的,通过强调类相互的配合从而完成某种能够复用的设计概念。这些类相互之间以特定的方式合作。大多数框架的一般作用:因为是对特定领域软件具备相似属性部分的提取,所以在这一领域内开发新的程序过程中能够不需要重新编写代码,只需要基于现有的框架进行进一步开发和整合就可以了;这样就能够提升软件质量,大大的降低本钱,而且节省很多时间,使开发软件越来越方便,效果越来越好,最后产生一种好的循环效果。框架不是可以直接利用的现成应用系统,因为框架仅仅是一个半成品,需要软件开发人员对它进行第二次发开从而达成具有具体功能的应用系统。框架并不是“平台”,由于平台这个概念较模糊,它可以是一种通讯中间件,一种应用服务器,一种数据库软件,一种操作系统,所以在应用平台当中中,平台主要责任就是供应特定服务系统软件。30 天津科技大学2014届本科生毕业设计第五节架构软件系统架构一般具有两个要素:(1)架构是由总体到部份最高层次的划分的一个软件体系。一个体统一般是由元件组成,而这类元件怎么形成以及他们之间怎么产生作用,是关于系统自身构造的重要信息。更加详细的说,要包括任务流、架构元件、联结器。构架也就是系统核心的“砖瓦”,联结器才是对元件间通信机制、通信预想结果、通信途径很好的描述,任务流是对怎么运用这类元件来实现某项需要进行描述。(2)建立一个系统做出最高水平,在以后很难改变,商业与技术所决定。在构建系统之前要提前做出重要决定,如果系统已经开始了一个详细的设计或者构造,这些决定一般就无法更改了。因此,必须认真研究后再做出决定,这决定了设计成功与否。第六节框架与架构关系框架不是架构,架构决定了系统层次的区分、总体结构,不相同部份间的合作等设计思考。而框架比构架更加具体,更加侧重于技术。在确定框架之后,软件体系结构也随着确定了,对于同一个软件体系结构可以通过各种框架来实现。第七节框架与设计模式关系在软件设计当中框架与设计模式是不一样的钻研范围。设计模式是对设计问题找出解决的方法,一个模式能够被各种框架以及被各类语言所实现;框架不仅是一种应用体系结构,而且是设计模式与代码的混合体。他们之间虽然有差别,然而都协同让设计者的代码能够复用,因此框架在思路里有着同样的特点,所以设计模式的想法能在框架设计中运用。框架与设计模式有着明显区分,原因主要体现在他们给出的内容和致力的应用领域。(1)从内容看,设计模式是一个简单的设计,这个设计可以有很多不同的语言,用不用的方式去实现;而框架是一种混合体由设计和代码组成,软件开发人员可以不扩展框架,从而形成完全不同的应用。(2)从应用来看,框架给出了全部应用体系结构;设计模式是给了一种简单的方案以解决设计问题,而且这个方案能在各种不一样的应用程序或框架当中进行使用。30 天津科技大学2014届本科生毕业设计(3)以第一条为基础,可以看出设计模式相比框架更加容易移植;只要设计成形的框架,即使不构成一个完整的应用程序,但以此为基础进行的应用的开发会被框架的实现环境所制约;在这方面设计模式是和语言无关,因此能在更加广泛异构的环境中进行应用。框架是一个软件,设计模式则是软件的知识体,设计模式会对框架设计的水平进行提高。30 天津科技大学2014届本科生毕业设计第三章系统开发环境技术介绍第一节MyEclipse介绍MyEclipse是一个功能强大支持也非常的普遍,用于开发JAVA、J2EE十分杰出的Eclipse的插件集合,对支持各类开源品特别的擅长。作为一个专门为Eclipse所设计和开发的插件集合,MyEclipse研发的初衷只是为了简化Eclipse的操作,为开发人员提供一个良好的操作界面和相对简单的操作方式。然而由于其开源性,在之后的各个版本中MyEclipse不断的得到了功能上的加强。到如今,MyEclipse10的功能可谓是相当巨大,它不但为Eclipse供应了大量的Java工具的集合,极大的处理了不同开源工具的不相同问题,同样也在自身集成了Tomcat,使得任务的发布不再需要事先绑定Tomcat,极大的简化了开发人员所需要安装的开发程序的数量。使得Java/JSP应用开发的效率得到了很大的提升。在结构上,MyEclipse的特征能够被分为七类:WEB开发工具、JavaEE项目部署服务、EJB开发工具、数据库服务、应用程序服务器的连接器、JavaEE模型、MyEclipse整合帮助。关于以上各类功能上的类别,在Eclipse中能够查找到相应作用的部件,而且通过一系列插件去完成它们。MyEclipse构造上的模块化,可以是我们对任何一个模块进行独自扩大及升级而且不影响其他模块。也就是说MyEclipse是Eclipse的插件,同时是一个功用十分巨大的JavaEE集成开发环境,它的主要作用是对代码进行编写、测试配置和除错。MyEclipse作为Java、J2EE的开发插件集合中一个十分优秀的插件集合,它有着十分强大的功能和广泛的应用支持面。它本身自带了非常完善的编码、调试、测试功能,在MyEclipse的最新版本MyEclipse10中,甚至集成了发布功能,能够不再依赖于Tomcat来进行程序发布。并且MyEclipse能够完美的支持Struts、JSP、JavaScript、Spring、SQL等程序。可以说,在Eclipse开发工具中,几乎包括了目前所有主流开源产品的MyEclipse毫无疑问的成为了最闪耀的一点星光。第二节MySQL数据库介绍作为当今计算机科学技术的一大分支,数据库成为了数据管理的最新技术,同时也为各式各样的信息管理系统提供了一个数据储存和交换修改的方式[7]30 天津科技大学2014届本科生毕业设计。在如今的主流的网页开发和系统设计中,数据库的设计与实现已经成为了一个不可缺少的部分,它担当起了数据存储与维护的重任,是系统开发的灵魂部分。对于本系统而言,数据库用于存放学生的基础信息,是系统实现的基础部分。因此,数据库技术作为信息系统核心和基础得到愈来愈多的应用,从小型单项事务处理到大型信息系统(On-LineAnalysisProcessing,OLAP),从OLTP(OnlineTransactionProcessing,联机事务处理)到OLAP(On-LineAnalysisProcessing,联机分析处理);从一般企业管理到计算机辅助设计与制造(CAD/CAM)、计算机集成制造系统(CIMS)、电子政务(e-Government)、电子商务(e-Commerce)、地理信息系统(GIS)等[8],越来越多新的应用领域采用数据库技术来实现数据的储存和处理工作。作为一个关系型数据库管理系统,MySQL因为其开源性受到了广大程序员的青睐,其版权现属于Oracle公司。在Web应用开发方面MySQL是最好的关系类型数据库管理系统(RDBMS)应用软件之一,被广泛应用于各种各样的Web程序开发当中。MySQL是一种关联数据库管理系统,它将数据保存在不同的表中,而不是将各种各样的数据堆放在一起,通过表与表之间的关系来将数据连接在一起,这样就增加勒数据的处理速度,并且提高了灵活性[9]。MySQL在语言的选择上依旧采用了主流的SQL数据库标准化语言,这也使得其容易上手,并且编写相对规范。MySQL最大的优势在于开放源码,使得其成为了一般中小型网站的开发首选。SQL语句介绍:作为是一种功能非常强大的数据库语言,SQL被译为结构查询语言,其英文全称为StructuredQueryLanguage。通常会被应用在一些大型数据库的建立之中。SQL语句一般用于完成数据的日常操作任务,例如在数据库中对数据进行插入、更新、删除,或者对数据库进行检索操作[10]。常见的使用SQL的关系数据库系统有:MySQL、Oracle、SQLsever2000、Sybase、DB2、MicrosoftSQLServer、Access等。在不同的数据库中,绝大多数的SQL结构化查询语言都是可以通用的,只有个别情况下会有一定差异。但是例如:“Select”、“Insert”、“Update”、“Delete”、“Drop”、“Create”等标准SQL命令,即使在不同数据库中也是没有差异的。SQL概括起来大概可以分为以下几个部分:(1)DCL(DataControlLanguage数据控制语言)通常被用于对用户的权限进行赋予和取消;(2)DDL(DataDefinitionLanguage数据定义语言)通常被用于数据结构的定义,如创建、修改、删除等命令;(3)DML(DataManipulationLanguage数据操作语言)通常被用于检索或者修改数据库中的已有数据;30 天津科技大学2014届本科生毕业设计第四章框架研究第一节Struts2框架Struts2早先是ApacheJakarta项目构成成分,项目的先锋者想要改善及提升Servlet、JSP、标签库和面向对象技术水平,所以对此项目进行相信的研究。Struts2是建立在web的技术之上的一个MVC框架并不是完全独立出来的技术,脱离这些技术,Struts2框架也就不能运用了[11]。Struts2是Struts的升级品,Struts2框架是以struts1和WebWork的技术为基础进行了归并。其崭新的Struts2体系结构和Struts1体系结构大不相同。Struts2是以WebWork为核心,选用WebWork设计想法,而且选用拦截器的机制来解决客户要求,如此的设计也让业务逻辑控制器能够和ServletAPI彻底摆脱开,因此Struts2能够当成是WebWork更新之后的产物。虽然Struts1和Struts2有着十分大的改动,然而相对WebWork和Struts2改变倒是微不足道[12]。Struts2工作原理:首先客户端会发出一个要求,此要求可以通过多个过滤器最终到FilterDispatcher过滤器。然后FilterDispatcher会经过ActionMapper来判断此Request需求调用哪一个Action,如果需求调用的Action被寻找到,之前的请求处理就会被过滤器交给ActionProxy。然后ActionProxy会建立ActionInvocation实例,ActionInvocation此时会调用正确的Action,当然调用Action的过程当中会涉及到有关拦截器的调用。当Action执行完成,ActionInvocation会按照struts.xml中的配置找到对应的返回结果。第二节Spring框架Spring是一个开源框架,软件开发商为了解决企业应用开发的复杂性问题。利用基本的JavaBean来实现之前只可由EJB实现的工作,并且提供了许多企业应用的功能。但是,Spring用处不单限至于服务器端开发,从简约性、可测试性和松耦合的角度,每一个Java应用都能够从Spring当中得到好处。Spring不是专注于J2EE某一层的解决方法,而是寻找J2EE应用各层的解决方法。Spring为企业应用开发的“一站式”选取,Spring贯串持久层、业务层和表现层。但是,Spring不想代替现有的框架,而是以高度开放性与和他们完美联合。Spring框架是个分层构造,由七个定义优秀模块构成。如图4-1所示。30 天津科技大学2014届本科生毕业设计AOP元数据及动态代理实现MVC框架Web上下文Web应用环境和工具类ORM支持Hibernate,JDO,iBatis,ToplinkSpring上下文校验,JNDI,Mail,任务等SpringDAO事务,DAO,JDBC核心容器Bean容器及支持工具图4-1Spring框架的7个模版构成Spring框架的每一个模块都可以单独使用,或与其他的一个或者多个模块共同使用,每一个模块功能如下。(1)核心容器:核心容器为Spring框架提供了最基本的功能。重要构件是BeanFactory,是以工厂形式来实现的,利用IoC模式将应用程序的配置及依赖性规范和实际应用程序代码隔开。(2)Spring上下文:Spring上下文是一个配置文件,向Spring框架提供上下文信息。这些上下文包含企业服务。(3)AOP:通过配置管理功用模块,直接面向方面编程的功能集成到框架。因此,能够很轻易地利用Spring框架管理的任一个对象支持AOP。(4)SpringDAO:JDBCDAO抽象层供应了有实际意义的反常层次构造,我们可以使用该构造来管理异常办理和不正确的消息被不相同数据库供应商抛弃。异样层次构造简单化了错误处理,而且大大的降低了需求编写异常代码数目(例如开启和关闭连接)。(5)ORM:Spring框架为多个ORM框架,他提供了一个ORM对象关系的工具。(6)Web上下文:上下文模块提供了基于应用程序的上下文同时建在应用程序上下文模块的基础之上。因此Spring框架能够和JakartaStruts集成。该模块还简单化处理一般请求而且将要求参数绑定到域目标的工作。(7)MVC框架:MVC框架是构建Web应用程序功能齐全的MVC实现。经过计谋端口,框架包容了大批视图技术而变为高级可配置的。一般功能适用于不受制管理环境的影响,因此Spring框架功能能够在任何J2EE服务器中使用。Spring主旨是:支持没有绑定到指定J2EE服务并且可反复利用的业务和数据访问对象。第三节Hibernate框架30 天津科技大学2014届本科生毕业设计Hibernate框架是一个数据访问框架(也叫持久层框架,可将实体对象成持久对象)通过Hibernate框架可以对数据库进行增删改查,为业务层构建一个持久层。可以使用它替代以前的JDBC访问数据[13]。Hibernate在对数据库进行访问的时候可以对数据库操作代码进行简化,并且Hibernate能够自动生成SQL,也可以把ResultSet所记录的以及实体类自动映射。Hibernate的API每一个数据库都可以执行,这是由于Hibernate的API当中并没有设计SQL的语句,数据库会根据Hibernate配置文件自动的生成相对应的SQL语句。Hibernate的任务就是负责是对JAVA对象及数据库表中数据之间的映射。Hibernate是现在一个比较流行的ORM(对象-关系映射)工具,当然目前也有许多其他的ORM工具,比如:MyBtis、JPA。Hibernate属于全自动类型,因此比MyBtis功能强一些(MyBatis只属于半自动)。但是全自动类型会有很多不确定而且无法控制的因素。第四节Java优点Java是解释执行的高级编程语言,他的特点是平台无关性、简单性、面向对象、健壮性、多线程、自动内存管理。平台无关性是指Java语言平台无关,而Java的虚拟机却不是,需要下载对应平台JVM虚拟机的。自动内存管理的意思是对临时存储的数据自动进行回收,释放内存。如:引用类型的变量没有指向时,被回收;程序执行完成后,局部变量被回收。接下来主要介绍一下Java的优点。Java技术有下列优点:(1)简单:Java语言是面向对象语言,他只需要少些最基本的概念就能够很容易的写出各种情况下的应用并且他只需要供应基本方式去完成之前已经确定的任务。Java省去了运算号的重新载入以及多重继承不清楚观念,而且经过主动收取垃圾而极大的简单化了软件工作人员的管理内存的工作。此外,Java特别适合在小型机子上运转,他的基本注释器和累的支撑大约只有40kb,如果再加上标准库以及线程支撑也就是大约有215kb。(2)面向对象:Java的设计主要是对象和他的端口,他供应了简易的机制与动态的端口模型。由于在对象当中封装了其变量和相对的方法,因此完成模块化与信息的隐蔽;对于类就有所不同了,类供应了一类对象原来的模型而且经过继承机制,父类提供的方法可以被子类使用,这就完成了代码的复用。(3)分布性:Java是一种面向网络的语言。经过它供给的类库能够办理TCP/IP协议,用户能够在网上很方便地访问其他对象,但需要经过URL地址。(4)鲁棒性:Java30 天津科技大学2014届本科生毕业设计在编程的过程中要对可能出现的问题进行检测,认真改掉发生不对的地方。它提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生的错误。(5)安全性:既然要用于到网络,那么Java必须有可靠的安全性,必需阻止病毒侵入。Java一切内部的访问都要经过对象的实例化去完成,因此对于指针是不支持的,这样就可以组织软件开发人员使用一些病毒木马等手法去访问独有的成员,这样也能够避免了在指针操作中的容易犯下的错误。(6)体系结构中立:Java就能够在任何处理器上运行,只需要安装Java运转系统。Java生成的字节在解释器得到他之后就会对他进行转换,这样就可以让他在不同的平台上运转。(7)可移植性:由于Java和平台没有关系的特征这样就可以使Java程序在网络上不同的机子间进行移植。与此同时Java数据库也能够与不同的平台接口实现。Java本身也可以移植,因为Java运行是系统是由C语言完成的。(8)解释执行:解释器直接对字节码注解,字节码自身携带了大量信息这样就使连接非常的容易。(9)高性能:Java字节设计很简单是自己转变成对应特定CPU机码,以此得到更高的性能。(10)动态性:Java的设计使得它适合于开发环境。在库中能够随意的添加新方法及变量也不会对用户程序实行产生任何的影响。30 天津科技大学2014届本科生毕业设计第五章框架与数据库连接工具第一节JDBC介绍为了实现应用程序对数据库的访问,SUN公司推出了JDBC(JavaDatabaseConnectivity,Java数据库连接),它由一些Java语言编写的类和界面组成,并且定义了Java语言与各种数据库之间的编程接口。JDBC为数据库的应用程序前台开发人员提供了一种标准的应用程序接口设计方法,开发人员可以通过使用纯粹的Java语言就完成对数据库应用程序的编写。只需要通过JDBCAPI编写一个程序就可以轻松的访问Oracle、Informix或者Sybase等各种各样的不尽相同的数据库。在JDK的包“java.sql.*”中定义了一系列的类、接口、异常等,以及与这些类和接口相关的属性和方法,而JSP的开发人员只需要按照固定的规则来调用封包中的API即可,这样就可以轻易的实现对DBMS的访问和操作了。JDBC同样被分为了3个主要部分,分别是:(1)连接(Connection);(2)语句(Statement);(3)结果集(ResultSet);它的工作方式如下图所示:Servlet或JSP连接池DBMS线程1申请连接建立连接用户1request释放连接管理链接连接池连接池连接池线程2request线程2申请连接用户2释放连接释放连接图5-1JDBC工作方式图连接池连接池连接池连接池30 天津科技大学2014届本科生毕业设计第二节连接池连接池的技术基本处于这样:一般对很多的应用程序在处理一般的事务通常只需要几毫秒就能完成,这时仅仅需要访问JDBC的一个连接线程。当没有事务需要处理的时候连接就会空闲下来,如果连接池空闲下来连接就能让别的线程使用。实际上当线程需要一个连接的时候,这时候就会从连接池中寻找一个连接。这个线程对于这个连接使用完成之后就会把他送回到连接池当中,回到连接池的连接就可以被其他的线程使用了。连接池可以极大的改善用户的Java应用程序的性能,同时减少全部资源的使用。连接池主要的优点有:(1)缩减创建的连接时间:和别的数据库相比较,虽然JDBC的链接功能相对于迅速,可是他要重新创立新的连接方式,这样就会加大连接时间和开销。对于连接可以循环使用的方法,就可以大大的避免浪费时间和开销的弊处。(2)编程模式得到简化:在使用连接池的时候,每个独立线程在操作的时候犹如创立了一个自身JDBC连接,用户可以直接使用编程技术。(3)资源的利用会受控制:当使用者不需要连接池的时候,而在线程需要一个连接,那么程序只能为此创建一个新的连接,使用用户应用资源的时候就会产生十分高的浪费甚至导致由于过载而产生异常。我们们可以了解到,JDBC连接不管是在客户端还是在服务器都会产生花费。而且每一个连接都会对其程序和服务器的资源产生一些影响及限制。这些连接无论是否在做有用功都会使用资源。而连接池不会有这些问题,他会将性能的使用最大化,而且他还会控制资源的利用使之在一定的范围之内,假如超过了这个范围应用程序就不仅是变慢了而是直接崩溃。数据库连接池的主要操作如下:(1)创建数据库连接池的对象。(2)根据先前指定的参数创立初始数目的数据库连接(即闲置连接数)。(3)如过有数据库的访问请求,此时会从连接池中找到连接,如果连接池中没有闲置连接并且连接并没有到达最大的数量(也就是所说的最大活跃连接数),此时就要创立一个全新的连接了。(4)存取数据库。(5)关闭数据库,对各数据库的连接释放(关闭数据库连接,这不是真正关闭,而是放入空闲队列。如过实际空闲连接数大于初始空闲连接数的时,连接就会被释放)。30 天津科技大学2014届本科生毕业设计(6)在服务器维护或者停止的时段,要释放数据库连接池中的对象以及所有连接。第三节几种常见的连接池一、ODBCODBC其实就是开放式数据库,是由微软公司提出来的一种使用SQL应用程序接口。用户能够增加数据库驱动,将自己的程序连接到自己建立的数据库系统当中,ODBC的优势其实就是以统一方式处理全部数据库,而他自己程序与数据库没有关系。在结构上区分ODBC分为两种,单束式和多束式。单束式:单束式驱动程序类似中介驱动程序数据提供统一的一个数据访问方法,并且单束式驱动程序在应用程序与数据库之中[15]。有用户对数据库进行访问操作的时候,应用程序会给ODBC管理器传递一个ODBC的函数让其调用。之后会让ODBCAPI进行正确的判别是由谁来办理,由自己直接办理且返回结果还是交给驱动程序处理后返回结果。我们可以看出,单束式驱动程序自身就是数据库引擎,单束式驱动程序可以直接对数据库完成操作,虽然此数据库可以在网络的任意的一个地方。多束式:多束式驱动程序自身不实行任何的数据操作而是用作网络通信协议的一个界面的远程操作。多束式驱动程序主要负责的是在程序与数据库引擎之间传达指令与数据。如果应用程序对数据库处理提出要求,那么该请求就会发给ODBC管理器,当ODBC管理器根据请求当场实现,如果不行就会转给多束式驱动程序,此时多束式驱动程序会把请求编译成数据库通信借口能够明白的方式并且把且该请求交给借口去解决。之后接口会把这个请求通过网络传给服务器数据引擎,当服务器解决好这个请求之后会把结果传给数据库通信接口,这时通信接口回把最后的结果发给多束式驱动程序,由多束式驱动程序发给应用程序。二、C3P0连接池C3P0是一个开源的JDBC连接池,当前使用它的开源项目有Hibernate,Spring。C3P0与DBCP的区别:C3P0与DBCP的最大的区别就是有无自动回收空闲连接的功能,DBCP没有此项功能是而C3P0是有的。C3P0与一般的POOL是相似的,要对数据库连接池进行管理都是要靠阻塞机制的,如果连接池当中没有能用的connection则就会被阻塞,通常是经过wait(),等到连接池中有可用的connection,这时候就会经过notify()唤醒[10]。使用C3P0有三种方式:(1)直接初始化与配置ComboPooledDataSourceBean;(2)使用DataSourcesFactory;30 天津科技大学2014届本科生毕业设计(3)经过PoolBackedDataSource并设立ConectionPoolDataSource来创建。最常用的是第一种。不管用什么方式得到DataSource,C3P0都会供应一个叫做c3p0.properties的文件以此去配置此数据源。三、TustCP连接池TustCP是对已有的连接池进行研究学习的基础之上,自己所编写的一个简单的连接池。具体代码如下:packagecn.edu.tust.ConnectionPool;importjava.lang.reflect.InvocationHandler;importjava.lang.reflect.Method;importjava.lang.reflect.Proxy;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjava.util.LinkedList;//定义公开类TustCPpublicclassTustCP{//定义MySQL数据库urlprivatestaticStringurl="jdbc:mysql://127.0.0.1:3306/lml";//数据库IDprivatestaticStringusername="root";//数据库密码privatestaticStringpassword="10112106";//建立一个新的双向循环链表privatestaticLinkedListTustDataSource=newLinkedList();privatestaticintmaxconnection=20;static{try{//加载MySQL数据库的驱动类Class.forName("com.mysql.jdbc.Driver");}catch(ClassNotFoundExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}for(inti=0;istruts2org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterstruts2/*index.jspstruts.xml文件为当网页登录之后所需要显示的页面内容,本程序就是执行Index.jsp文件。具体代码如下:/WEB-INF/page/theresult.jsp/WEB-INF/page/theresult.jspindex.jsp30 天津科技大学2014届本科生毕业设计Index.jsp是一个对选择方式的显示页面,具体代码如下:<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="s"uri="/struts-tags"%>执行后的效果如图所示:图7-2选择连接数据库方式30 天津科技大学2014届本科生毕业设计整个程序具体实现过程如图7-3所示:ConnectionGetandClose.java执行对应方法ConnectionName.java输出对应数据库内容用户执行index.jsp选择连接方式(JDBC、C3P0、TustCP)选择JDBC、C3P0选择TustCPTustCP.java文件MyAdvice.java和Tustcpcallclass.javaConnectionGetandClose.java先调用反射框架的方法Tustcpcallclass.java调用通过接口调用图7-3程序实现过程此图说明当用户选择连接数据库的方式之后,ConnectionGetandClose.java会执行其内部对应的方法,当选择的方法是JDBC或者C3P0的时候则会在这行对应程序后由ConnectionName.java输出对应数据库内容;当选择我自己所写的连接池TustCP的时候,这个连接池工作流程是:ConnectionGetandClose.java文件会通过调我们之前所编译的方法,这个方法通过会共同的接口来调用MyAdvice.java和Tustcpcallclass.java这两个文件,Tustcpcallclass.java这个文件运行后会执行TustCP.java文件最后由ConnectionName.java输出对应数据库内容。选择JDBC时,执行结果页面:图7-4选择JDBC执行结果30 天津科技大学2014届本科生毕业设计选择C3P0时,执行结果页面:图7-5选择C3P0执行结果选择TustCP时,执行结果页面:图7-6选择TustCP执行结果30 天津科技大学2014届本科生毕业设计第八章论文总结与展望第一节本文总结软件重用技术是基于构件,这种技术对于提升软件的生产率与提高软件的质量有着很大的帮助。在文章中,对当今软构件重用程度低,没有办法适应动态开放的运行环境以及多变的用户需要的这类问题,基于反射机制对框架进行研究,最终实现一个轻量级的框架以此来适应小的系统。轻量级框架实现从被动复用到主动复用,为开发灵活性好、复用性好的软构件提供了一个新的思路,这将从根本上提高软件复用水平;另一方面,轻量级框架能够降低成本提高效率,在本文的项目中,采用了轻量级框架技术通过在实际中的应用,深深的感受到了开源代码技术的好处。在中小型WEB应用中,采用轻量级框架,符合简单化编程的精神,降低了技术难度,同时轻量级框架不用使用高价商业服务器,因此开发平台的成本大大的降低了。随着项目的不断开发和技术进步,基于轻量级框架的项目基础开发平台也会不断的完善和提高,通过不断时间完善,从而提高整个的开发效率和效果。第二节未来展望本文主要对基于反射机制对框架进行研究,实现一个轻量级的框架以此来适应小的系统。主要研究了可重用的小型框架,但未对复杂的大型框架进行研究。希望有机会在以后的时间再继续进行深入细致的研究,设计完善框架,进一步研究不同框架间的关系。30 参考文献[1]张薇.基于反射机制的自适应软构件技术研究[D].2007.11.[2]陈平.基于Spring的轻量级Web框架的研究与设计[D].2005.4.[3]FrankBuschmann,RegineMeunier,HansRohnert,etal.面向模式的软件体系结构,卷1:模式系统(贲可荣,郭福亮,赵皑等译)[M].北京:机械工业出版社,2003.239-240.[4]ErichGamma,RichardHelm,RalphJohnson,etal.设计模式:可复用面向对象软件的基础(李英军等译)[M].北京:机械工业出版社,2005.54-231.[5]ErichGamma.DesignPatterns:TenYearsLater[A].SoftwarePioneers:ContributionstoSoftwareEngineering[C].USA:2002.688-700.[6]高艳云.基于Web的职业院校教师考核系统的设计与实现[D].中国海洋大学,2010.[7]禤静.3W1H教学方法在MySQL数据库课程教学的应用[J].计算机与信息技术,2012,12(12):63-64.[8]严蔚敏,吴伟民.数据结构[M].第2版.清华大学出版社,2012.12.[9]萨师煊,王珊.数据库系统概论[M].北京:高教出版社,2006:41-76.[10]王珊,萨师煊.数据库系统概论[M].北京:高等教育出版社,2006.5:78-128.[11]蒲子明,许勇,王黎.Struts2+Hibernate+Spring整合开发技术详解[M].北京:清华大学出版社,2010:1-185.[12]杨少敏,樊双灵.Struts2Web开发学习实录[M].北京:清华大学出版社,2010:2-18.[13]孙卫琴,精通Hibernate:Java对象持久化技术详解[M].北京:电子工业出版社,2005.10:1-516.[14]EduardoGuerra,FelipeAlves,UiráKulesza,ClovisFernandes.Areferencearchitecturefororganizingtheinternalstructureofmetadata-basedframeworks[J].TheJournalofSystemsandSoftware,2012.12:45-146.[15]ThomasWürthinger,ChristianWimmerb,LukasStadler.UnrestrictedandsafedynamiccodeevolutionforJava[J].ScienceofComputerProgramming,2011,(5):1-5. 致谢四年的大学时光转瞬即逝,在这个人生的转折点上,我的心中感慨万千,对曾经给予过我帮助的校领导、老师以及同学们都抱有着浓浓的感恩之情。这篇毕业论文的完成是在我的导师李玉峰老师的细心指导下进行的。在每次遇到问题时,是李老师不辞辛苦的讲解才使得我的论文顺利进行。从论文的选题到资料的搜集直至最后论文修改的整个过程中,花费了李老师很多的宝贵时间和精力,在此向李老师表示衷心地感谢!此外,我还要感谢所有理学院的老师们,谢谢您们这几年来对我的教导。您们永远都是我的恩师。您们严谨的治学态度,开拓进取的精神和高度的责任心都将使学生受益终生。感谢我的父母,是他们无私的爱把我教育培养成人,支持我顺利完论文。 内部资料仅供参考9JWKffwvG#tYM*Jg&6a*CZ7H$dq8KqqfHVZFedswSyXTy#&QA9wkxFyeQ^!djs#XuyUP2kNXpRWXmA&UE9aQ@Gn8xp$R#͑Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmUE9aQ@Gn8xp$R#͑Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z8vG#tYM*Jg&6a*CZ7H$dq8KqqfHVZFedswSyXTy#&QA9wkxFyeQ^!djs#XuyUP2kNXpRWXmA&UE9aQ@Gn8xp$R#͑Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^G89AmUE9aQ@Gn8xp$R#͑Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z8vG#tYM*Jg&6a*CZ7H$dq8KqqfHVZFedswSyXTy#&QA9wkxFyeQ^!djs#XuyUP2kNXpRWXmA&UE9aQ@Gn8xp$R#͑Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmUE9aQ@Gn8xp$R#͑Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^GjqvadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%MadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*adNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%MzadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@adNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^GjqvUE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3adNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^GjqvtnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqvz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7Jv#nD6YWRrWwc^vR9CpbK!zn%MzFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7Jv#nD6YWRrWwc^vR9CpbK!zn%MzXNQExJB8VK#%W7m$ZA5JdkVWce9APz^FvJzwYWCcyAh*bnxBvaFQH8YHV$#&3Q3vdWe3YXvbJr内部资料仅供参考图2-3:地块位置图