ࡱ> #` 8Ebjbj\.\. ?x>D>D<w2228@2l2\Q,33(<3<3<3444sQuQuQuQuQuQuQ$ ShUzQE44EEQ<3<3QLLLE<3<3sQLEsQLLO[O<33 W׉0 2I0'OPQ0Q/O,VJ`V[OV[O44K:nL>EBl444QQ5LX444QEEEE$ ABSTRACT T O create custom dynamic web applications a programmer must utilize Ajax. Ajax is a group of technologies that provide asynchronous two-way communication between a server and the web browser. Asynchronous communication allows the user to continue to browse the web page as sections of it are being loaded. This also allows the page to display new and updated information with out refreshing the page. [1] Ajax development has exploded in recent years as companies have found customers prefer pages developed with it. ESPN uses Ajax extensively on their website to refresh scores and provide news headlines without the user having to update the page. [2] Creating an Ajax request requires three sections of code, the first section is writing in HTML, the second writing in JavaScript and the third is a server script writing PHP. [3] Each section of code provides a different portion of the Ajax request, if the request is missing any of the sections it will fail. [3] While Ajax is good for many scenarios a programmer must carefully examine its use to prevent problems from arising. [4] INTRODUCTION The technologies powering the internet are changing at an accelerated rate; one of these technologies is Ajax. Ajax or Asynchronous JavaScript and XML are a group of technologies that provide a rich web development platform. Jesse James Garrett introduced the term Ajax in February of 2005 to describe a new method of programming using readily available technologies. [5] Ajax requires four distinct components to provide a rich user interface. The components are JavaScript, XML, HTML, and CSS. [5] Ajax is unique because it allows for the creation of desktop like applications in a web environment. Typically a desktop application is very responsive and can have sections of the program change without refreshing the entire screen. [6] This occurs because the program is running on the local machine. Web applications usually run thru an internet browser like Microsoft Internet Explorer or Mozilla Firefox. These applications are usually slower because they require the server to process each request. Most web applications require the entire webpage to be processed at once. This means when a user clicks on a link in a webpage the whole page will be changed. With Ajax a user can click on a link and have a section of the page recreated for them without changing the whole page. [6] This removes a portion of the load from the server because it only has to parse a section of the page rather than the whole page. ORGINS OF AJAX Even though Ajax wasnt formally defined until February of 2005 the first Ajax type web application was released in 2000 by Microsoft for use with Outlook. Microsoft was looking to create a web based version of its popular email client that did not require the page to be refreshed to notify the user a new email had arrived. [3] Microsoft created the XMLHttpRequest object which became the basis for Ajax traffic. [7] The XMLHttpRequest allows a client computer to call a webpage in the background without interfering with the user. This type of transfer is called asynchronous because it passively waits for the server to respond. This is the first component in Ajax and is usually called thru JavaScript. [7] Using the XMLHttpRequest data can be gathered from the server. To update the webpage to show this new data Dynamic HTML must be used. Dynamic HTML uses CSS, HTML and JavaScript to rewrite sections of the webpage code at the browser instead of regenerating the page on the server. [8] The term Ajax became widely known after the release of Google Maps and Google Suggest. [5] These products showed flexibility never before seen in a web application and thus spurred developers to make new and innovative applications. AJAX EXAMPLE A trivial example of Ajax is a name retrieval service. The script will suggest names matching the letters entered into the box without requiring the page to be refreshed. If the script was written without Ajax after each letter entered, the page would need to be refreshed. This would create excess load on the web server and be distracting to the user. [9] HTML CODE Code Sample 1 shows the HTML code that generates the form. The code is standard hypertext markup language (HTML) with a few additions. The first addition is the clienthint.js which holds the Ajax calls and declares a function called showHint(). To make the script notify the user of new suggestions on each key stroke the input section of the form has the following code added onkeyup=showHint(this.value). [6] This piece of code makes the web browser call showHint every time the user releases a key in the field. The final portion of code required is this labels a section of the code as txtHint. [6] This label will be used later to output the result of the Ajax query. [9]
First Name:

Suggestions:

Code Sample 1 [9] Code Sample 1 produces an output similar to Figure 1 in web browser. The form will not work until the clientthint.js is created. This file will define the function showHint and perform the XMLHttpRequest to the server. [9]  Figure 1 [9] JAVASCRIPT CODE The JavaScript code (clientthint.js) consists of three functions and a global variable. The global variable is defined as an XMLHttpRequest and is named xmlHttp. The xmlHttp can be defined with the following line of code var xmlHttp. The three functions are showHint, stateChanged and GetXmlHttpObject. [9] FUNCTION showHint() The function showHint is the driver function of the JavaScript. The function takes the string inputted in the form and creates the request to the server. The function also tells the computer to call stateChanged when the request to the server has completed. Function showHint is shown in Code Sample 2. The first line of showHint defines the variable xmlHttp as an XmlHttpRequest by calling the GetXMLHttpObject function. The second line defines a variable named url which contains the location of the server side script. Url is also defined with two parameters q and sid. The q parameter represents the string being sent to the server, the sid parameter is used only to make each request unique. [6] If the sid parameter was not given the web browser may not call the server script and use a cached copy instead. [9] The next three lines setup the XmlHttpRequest parameters and perform the actual request. Setting onreadystatechange to the function stateChanged forces the web browser to call stateChanged when the request has completed. The call to function open sets the request to use the Get method to call the script located at variable url. The third parameter defines whether the request will be synchronous or asynchronous. [3] By passing the parameter of true the request is set to an asynchronous mode. The final step in the function is to call the send method. Send executes the request and ends the showHint function. [9] function showHint(str) { xmlHttp=GetXmlHttpObject() var url="getsug.php?q=" +str+"&sid="+Math.random() xmlHttp.onreadystatechange=stateChanged xmlHttp.open("GET",url,true) xmlHttp.send(null) } Code Sample 2 [9] FUNCTION stateChanged() This function processes changes in the state of the xml request. The function first checks if the readyState is equal to 4. The readyState changes based on the current status of the xml request. A status of 4 indicates the request is finished and the servers response is stored in responseText. [3] If the status is 4, the servers response is outputted in the section labeled txtHint. The function stateChanged in shown in Code Sample 3. [9] function stateChanged() { if(xmlHttp.readyState==4) { document.getElementById("txtHint").innerHTML=xmlHttp.responseText } }Code Sample 3 [9] FUNCTION GetXmlHttpObject() The function GetXmlHttpObject creates an XMLHttpRequest based on which browser is used. The function returns a valid XMLHttpRequest. The first line of the function creates a temporary variable. The first if statement checks to see if the browser supports window.XMLHttpRequest, if the browser does support it then the variable is initialized to a new XMLHttpRequest. The second if statement is only used when the previous check fails. This statement checks if an ActiveX object exists. If the object exists then the xml request is defined using ActiveX. The final step is to return the object that was created. The function GetXmlHttpObject is shown in Code Sample 4. [9] function GetXmlHttpObject() { var objXMLHttp=null if (window.XMLHttpRequest) { objXMLHttp=new XMLHttpRequest() } else if (window.ActiveXObject) { objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP") } return objXMLHttp }Code Sample 4 SERVER SCRIPT The server script is the last section needed to make the example work properly. The server script takes input as part of the url and displays the output in text. Simply put the server script is merely a webpage. For the example, the server script will be programmed in PHP an open source scripting language. The script should use the name that was defined in the JavaScript url of Code Sample 2. [9] The first part of the script is to define the list of words to match the input against. This list can be changed on the fly without the user having to refresh there webpage. The next step is to take the input which is stored in $_GET[q] and store it in a temporary variable named q. The next section of code takes the input string and compares it against each entry listed in the word list. Each entry that matches is concatenated on the hint variable. If no entries are found the servers response is no suggestions. If a hint is found but the hint is not the word typed in, the hint is returned in bolded letters. If the hint is the word typed in then the response is html code to output we have got a match in big red letters. The final step of the server script is to output the response that was generated. The server script is displayed in Code Sample 5. [9] ".$hint."<--We got a match"; else $response="".$hint.""; echo $response; //output the response ?>Code Sample 5 [9] SAMPLE OUTPUT The example presented will now operate properly if each of the files is placed on a web server. As text is entered into the First name field the suggestions box will change. A sample output is shown in Figure 2 and Figure 3. [9]  Figure 2 Suggesting Greg [9]  Figure 3- No Suggestion [9] AJAX BENEFITS The main benefit of the Ajax suite is its ability to provide a robust interactive web application. Ajax also removes the time the user spends waiting on a web page because the page can be loaded in sections. [10] Ajax is used in areas where large amounts of data need to be available to the user quickly but without the user having to wait for a new page to load. An example of this scenario is a calendar. The calendar will show all events but when the user moves their mouse over an event an Ajax call could load information on the particular event. This reduces the load on the server and the amount of traffic sent each time a user requests the calendar. Instead of sending the user the calendar and the information on each event when the page is loaded the user would only receive the calendar and the information about each event would be loaded as the user requests it. [10] The XMLHttpRequest was designed using a sandbox model. This means the XMLHttpRequest runs in a locked down mode where it can only access websites that are located on the same domain as the script it was called from. [8] This prevents Ajax from being used in cross-site-scripting. AJAX PROBLEMS/ISSUES Ajax can provide rich web applications but if used improperly can create a security nightmare. One issue with Ajax is that if the browser denies the Ajax request for any reason the users application loses all functionality. [6] The second issue involves executing malicious code. Developers often clean the input they are sending to the server. The input must be cleaned to prevent the server from accidentally executing a command an attacker tries to run. [4] With Ajax its tempting to clean the input on the client side using JavaScript and then not clean it on the server side. The problem with this is an attacker could call the server script without using the client script and compromise the server. Another issue with Ajax is that it can be used maliciously without the user discovering it. Since Ajax is designed to run without user interaction it can easily be run on a webpage hijacking session information and sending it to an attacker. [4] SUMMARY/CONCLUSIONS Ajax provides functionality to create a robust web application. If an Ajax web application is coded properly it will run faster than and as secure as a non-Ajax program. Ajax also allows websites to reduce their overall bandwidth usage and server load by reducing the amount of full page loads. One major advantage of Ajax is that it very easy to learn if you understand html. Since Ajax is a mixture of technologies a developer will learn how to write web pages and server scripts all while learning Ajax. The example shown in this paper could be written by an experienced Ajax developer in under ten minutes. As Ajax is becoming more popular many toolkits have been produced that allow developers to utilize Ajax functionality without having to code the actual requests. These toolkits are extremely useful when coding large projects because they provide a standard that is well defined and easy to use. References: W3Schools. 15 March 2006. Refsnes Data. 10 November 2006. . Rubel, Steve. MyEPSN will Change the Game for Start Pages. 27 October 2006. 10 November 2006. . Asleson, Ryan. Foundations of Ajax. Berkeley, Calif.: Apress, 2006. Stamos, Alex. Attacking AJAX Web Applications. Black Hat USA 2006. 3 August 2006. ISEC Partners. 9 November 2006. . Garrett, Jesse James. ajax: a new approach to web applications. 18 February 2005. 10 November 2006. . McLaughlin, Brett. Mastering Ajax. 06 December 2005. 10 November 2006. . Machanic, Adam. HTTPRequest-enabled RS. Online Posting. 18 June 2002. Microsoft Scripting. 11 November 2006. . Gehtland, Justin. Pragmatic Ajax. Raleight, NC: Pragmatic Bookshelf, 2006. McChesney, Gregory. Ajax Code Sample. 11 November 2006. . Taft, Darryl. Ajax, SOA to merge. eWeek 2 October 2006:18.      PAGE 2 Ajax for Dynamic Web Development Gregory McChesney, Texas Tech-Computer Science  PAGE 1     H I K L H J K L M Y Z Q y } LNOP<=?˷wooˇohVYCJaJhYCJaJhTCJaJhVuCJaJh"4CJaJhVuhVuCJaJ hVuh hVuhVu hAhAhONhACJaJhuCJH*aJhuhuCJH*aJhuCJaJhACJaJh#CJaJh#h#CJ:EHaJhA+    L M Z [ P hgd"4 $ ha$gd"4 $ ha$gd"4 $ ha$gd_$$ hd5& #$,D9Da$gd#gdA hgd"4D7E?@cdfgm>$DFGH<>?@PBDEFGQ¾¶Ҷʶڮʦʞ󞒎hhCJaJhEhECJaJh CJaJh.CJaJh\|CJaJhYht}CJaJh>lCJaJhYCJaJhuCJH*aJhuCJaJhVYCJaJhuhuCJH*aJ8FGQR$J_k h$Ifgd"4 $ ha$gd"4 hgd"4 hgd"4 $ ha$gd"4QRkpu~$,úץץúלqqmib huH*aJhuhR$hR$CJOJQJ^JaJ hR$hR$CJOJQJ^JaJhuhuCJH*aJhuCJH*aJhR$6CJaJhuh!bpCJH*aJh!bpCJH*aJh!bpCJaJhR$hR$6CJaJhR$CJaJhE6CJaJh>lCJaJhECJaJhCJaJ$:;OP! hgd"4 $ ha$gd"4 $ ha$gd"4 hgd"4 hgd"4Ckd$$Iflx, t644 laytkd/0H* ȼ魥ْيzzlzdXdXh/~jh-*6CJaJh-*CJaJhmrCJOJQJ^JaJhmrCJaJh/~jCJaJho|CJaJh huH*aJhuh-hR$CJaJjhhCJUaJhuhuCJH*aJhuCJH*aJhuCJaJhCJaJh1OCJaJh-CJaJhR$huhuH*aJ"$4689:;OP$68Sx" % ! !!!!!!!!!! ""#"'"7"C"M"y"}"׫vh/~jh/~j6CJaJhuh!bpCJH*aJh!bpCJH*aJh!bpCJaJh/~jhV|6CJaJhV|CJaJh1OCJaJh/~jCJaJhNO*hNO*CJaJhCJaJhuhuCJH*aJhuCJH*aJh/~jh-*6CJaJh-*CJaJ.}"~"'#(#*#+##########A$M$$$$$$$$$$$Y%𿶪{wslb^VRVhVhVCJaJhV|huhuH*aJ huH*aJhuh`hNO*CJaJh/~jCJOJQJ^JaJ h`h/~jCJOJQJ^JaJh-*CJaJhuhuCJH*aJhuCJH*aJhuCJaJh/~jhV|6CJaJhuh!bpCJH*aJh!bpCJH*aJh!bpCJaJhV|CJaJh/~jCJaJ!# $ $($A$h$$$$$$$$}$ h`a$gd"4Mkd!$$Ifl t 6644 layt/~j$ h$&#$/Ifa$gd/~j $ ha$gd/~j $$$$$&&&&&&3'7'9'$ h$Ifa$gd"4 $ ha$gd"4 $ ha$gd"4 hgd"4$ h`a$gd"4 hgd"4 Y%c%w%%&&&&!&"&7&;&C&q&x&&&&&&&&&8'9':'G'H'J'K'L'M'ƾƲƲƢ|qmibXThVhuhuH*aJ huH*aJhuhShShSCJaJ hAhSCJOJQJ^JaJhuhuCJH*aJhuCJH*aJhuCJaJh1OCJaJh/~jhS6CJaJh/~jCJaJhSCJaJhuh!bpCJH*aJh!bpCJH*aJh!bpCJaJhVCJaJh/~jhV6CJaJ9':'L'M'i'j' ***+*.*C*_*b*** h$Ifgd"4 $ ha$gd"4 hgd"4 $ ha$gd"4 hgd"4Akd$$IflP t644 laytSM'h'i'x''k(((( ))9)<)C))))))** * * * ***b*s**** + ++++ԸԸyumimah5CCJaJh ^h ^CJaJhAhAhACJaJhACJOJQJ^JaJ hAhACJOJQJ^JaJhuhuCJH*aJhuCJH*aJhuCJaJh1OCJaJh/~jhA6CJaJhACJaJh/~jCJaJh/~jhX,6CJaJhX,CJaJhShX,$********* + +++,t $ ha$gd"4 hgd1O $ ha$gd"4 hgd"4Ckd3$$Ifl0 t644 laytA$ h$Ifa$gd"4 h$Ifgd"4 +,P,,,,,,,,,--0-[-----..;/00000000T0`00051:11ȿȷԓȿȯtffh:CJOJQJ^JaJhCJOJQJ^JaJ h:h:CJOJQJ^JaJh:CJaJh;Gh6CJaJhCJaJhM6CJaJh ^CJaJhuCJH*aJhuhuCJH*aJh1OCJaJh;Gh%k6CJaJh%kCJaJh5CCJaJh;GCJaJ#,00080E0R0b0q0000001$151U1Z111126292 h$Ifgd"4$ h$Ifa$gd"4 $ ha$gd"411:2G2H2J2K2L2M2[2b22 3(3/34353<3=3>3@3A3B3C3D3M3N3O3`3a3c3d3e3f3g3h3333ļݼxtptptapjhEhECJUaJhEh)7j<h)7h)7CJUaJhuhuCJH*aJhuCJH*aJhuCJaJh1OCJaJhECJaJh)7CJaJh%kCJaJh:huhuH*aJ huH*aJhuh%k h:h:CJOJQJ^JaJh# CJOJQJ^JaJ&92:2L2M2[2\2B3D3e3f3h333337 $ ha$gdkd $ ha$gd"4 hgd"4 $ ha$gd"4 hgd"4Ckd$$Ifl-L tL644 layt# 33333d4e4h4i477777777777 8!8"878889999Q9R9: : : :::;;;;;;;<<<<ȰԔԔȰxhb@CJaJhMVhMVCJaJhiCJaJh5CJaJh=bCJaJhGhGCJaJh@9xCJaJh|~CJaJhtCJaJhuh!bpCJH*aJh!bpCJH*aJh!bpCJaJh# h# CJaJhEhuhuH*aJ/7!8"87888;;;<<9=????@@@AhBBC-D & F hh^hgdG5gdsj$a$gdsj $ ha$gd"4 hgd"4 $ ha$gd"4<8=9=?????@@CDDDDDDDDDDDDDDDDDDDDE(Eźvrg\T\hCJaJhID'h0CJaJhID'h0CJ aJ h0hxh0CJaJh0JCJaJmHnHuhxh00JCJaJ!jhxh00JCJUaJhT~jhT~UhsjhsjCJaJhG5hG5CJaJhG5hG56CJaJhsjhsjCJaJhDLCJaJhiCJaJhb@CJaJ -DDDDDDDDDDDDDDD(E)E*E5E6E7E8E$a$gdID'$a$gd*gdsj & F hh^hgdG5(E*E+E1E2E3E4E5E6E7E8EhsjhsjCJaJhT~hxh0CJaJh0JCJaJmHnHuhxh00JCJaJ!jhxh00JCJUaJh0 = 0&P1h:pID'/ =!"#$% P $$If!vh5#v:Vl t065aytkdDd 8>  C Abbdf#Rۼ+nbdf#Rۼ+PNG  IHDRHz<sRGB pHYs+pIDATx^=r0 FNBv)S>v2EγQ3"%G֒ t{>@`fg!"F@O!@h`zx)d N<&~.EE:,^9_?|G`ċ_^^[]& b1=D<2D' c]3hDا dDp :;#kbS{40=Zˉ ڭ}Ϙ{2">@é^`8rVe56[qZ=&7F{#\-/H`KuU)6vOgns `!bO_!P] *>b: Lk{0vѾ"(:8+aY1^H.f48=8sA$&('Lbԓ"/+F= bO2!Mbԓ"/+F= bO2!Mbԓ"/+F= bO2!Mbԓ"/+F= bO2!Mbԓ"/+F= bO2!Mbԓ"/+F= bO2!w|;6A 2}P<|&/_/m'Z} 8Z9j(wO C`F oBH[Fg %!.S}e^j8Eie7T"ZZ0N9 j. :l՛}WEz+){z7Ģ!8 `bcd8D'QL,:WӡEʷم>XŬ C% `E)G a}&/sdHfҵ+'^ J]d= _OR7moI1ҙ ¤M v72  C Abx/Ϩar.;~zgnx/Ϩar.;~zgPNG  IHDRLFlsRGB pHYsjIDATx^=r0 \'E\!egg)ru"q _AR|[dֲ@pw]5{upkTpyuF+{!܈i vNp V)-N2_2c100Q+J2* ZN#AMA>r8NǺ1$K T{FJVJяfdevu7htN4``69t8Ԟ']r!|$1F ="iTlxlpisFQ!.u.%JtI+n@Uha`oЅ;_t֢wW͙XCƣQ1`CNQ\j,`8\5Pi8mQ,uDž^V,z'{bJ?ک!p\ ߜY!*-C W2Ƚ!o@2W2mB3 XOw~|(? .@5<9*pń8nuqZÓQLSi O \G1a*N5<9*pń8nuqZÓQLSi O \G1a*N5<9*pń8nuqZÓQLSi O \G1a*N]ZWG0S[wQ;1;B1GeǃƧĂ?+ b?4|"z=9eELX 5 c͎6b {/^ *Y#MNT]j'oKy\(5raYqqY=:*._] t>  C AbUC%9*NYս@1n)C%9*NYս@PNG  IHDRLdsRGB pHYsodIDATx^]1S1 $\+PRp()Ϧ@PA)xYSvFl66ȂCwD4VܐtKM<6~JWnv'ϻ?L-OKlݙRRcmN),iN(N}6Y(3(*DkBx"]dFڬDqi!XJ~daN|MӉ& <2Pn 67ե.}K4DLsy2vR\<:BS8N 1HRkaY!Xkvu=,1qWMoIs$[1G憋8-`18C`_23K&،bGM_(S"àL2!; _(S"àL2!; _(S"àL2!; _(S"àL2!; _(S"àL2!; _(S"àL2!;ۢ+/FOt 2ܥv5v䀦@Dl.||@\JݖB ⏗j,mkퟂfӵH7簵)&q:_Xg̫őI-JLFU}p͘b4)xsx. U%Jd//͘b] ,ͷr)Mcc9`dfk6T.M=?թ>~S0ʙw1Hn)u4;TgMm>!l5ژu\sVIw\3Q!O[s4dv2T,jn |fwp=]d ҕgf,Ȍ19%)N%;kIwHi?ineLwʁD nMpsL;gmB2me9ki\ɡɕ_}IENDB`@@@ NormalCJ_HaJmH sH tH Z@Z ID' Heading 1$<@&5CJ KH OJQJ\^JaJ DA@D Default Paragraph FontRi@R  Table Normal4 l4a (k@(No Listj@j R$ Table Grid7:V04@4 ID'Header  !4 @4 ID'Footer  !:O: ID'TitleG$a$ 5CJaJ>o> * CodeSample$a$5CJ.)@A. * Page NumberHRH G5 Balloon TextCJOJQJ^JaJ8=x LMZ[P FGQR$J_k:;OP  (Ah379:LMij """+"."C"_"b""""""""""" # ###$(((8(E(R(b(q(((((()$)5)U)Z))))*6*9*:*L*M*[*\*B+D+e+f+h+++++/!0"07080333449577778889h::;-<<<<<<<<<<<<<<<(=)=*=5=9=0000000000000000000000000000000000000 0 000000000000000000000000 0 00000000000000 0 000000000000000000000 0 00000000000000000000000000000 0 0000000000000000000000000000 0 0 0 0 0 0 0 0 0 0 0@0h00@0h00@0h00@0h00@0h00 ou@0@0@0@0@0h00 LMZ[P FGQR$J_k:;OP  (Ah379:LMij ""+"."C"_"b""""""""""" # ###$(((8(E(R(b(q(((((()$)5)U)Z))))*6*9*:*L*M*[*\*B+D+e+f+h+++++/!0"07080333449577778889h::;-<<<9=0000000000000000000000000000000000000 0 000000000000000000000000 0 000000000000000 00000000000000000000 0 0h0d0Fedu0000000000000000000000000000 0000000000000000000000000000 0 0 0 0 0 0 0 0 0 0  jvy?Q}"Y%M'+13<(E8E#&(*+,/13579;!$9'*,927-D8E$')-.02468:7E% jqsy!!8@0(  B S  ?q)$$*$d+$6,$6-$7.$T7/$70$71$82$T83$84$85$96$T97$98$99$::$T:;$0<$T0=$0>$0?$1@$T1A$1B$1C$2D$T2E$2F$2G$3H$T3I$3J$3K$4L$T4M$4N$4O$5P$T5Q$5R$5S$6T$T6U$6V$6W$7X$T7Y$7Z$7[$8\$T8]$8^$8_$9`$T9a$9b$9c$:d$T:e$:f$:g$;h$T;i$;j$;k$<l$T<m$<n$<o$=p$T=q$=r$=s$>t$u$v$<.w$x$E#y$dz$${$|$}$d~$$$$$d$$$$$$$d$$$$$d$?$?$L$K$$T$ $܎$43$<$D$غ$lx$q$|tOOUUeeQQ H H ++++++j,j,--//"0"090900002233e3e344W4W444Q5Q5566Q6Q6y666888889999::;;<<<B<B<<<<<== =9=      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY[Z\]^_`abcdfeghijklmonpSSYYiiUU  L L   ++++++n,n,--//&0&0=0=00002233i3i344[4[444U5U55 6 6U6U6}666888889999::<< <<<F<F<<<<< ===9=  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY[Z\]^_`abcdfeghijklmonp9*urn:schemas-microsoft-com:office:smarttagsState9q*urn:schemas-microsoft-com:office:smarttagsplace8p*urn:schemas-microsoft-com:office:smarttagsCity qppqqppqpqqpqppqqppqqppqqpqppqppqpqpqqpqpqppqpqqpqpqpqpqpqpqpqppqpqpqppqqpqppqqppqpqppqpqpqpqpqpqpqpqpqpqpqpqp,/jx)$4DL"%]` %),-02>NWZei1Vfxk !!"("/"2"3"="H"]"d"n"""""""""""##$$((v(w(|(}((((((((((((( )!)^)h)q){)7788"8(888888899:; ;;;;< <<<<<<<<<<<<<<<6=9=<EDN"%]`*/zVh !##$$%%))**99<<<<<<<<<<<<6=9=333333333333333333/0rswx '+"!!!" # #$$$$((((&+(+4+5+33<<<<<<<<<<<<<<*=4=6=9=<<<<<<<<<<<<6=9=+L6vh ^`hH.h ^`hH.h pLp^p`LhH.h @ @ ^@ `hH.h ^`hH.h L^`LhH.h ^`hH.h ^`hH.h PLP^P`LhH.+         _^4*VY, =F "4TV#O#];$R$ID'm)-*NO*X,y/G5)7F85C;Gu.LDLO1OyQkZ|_Ba=bkdLg/~j>lkvluo!bpmruS5v@9x7|o|T~|~xG3~V?@ABCDEFGIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrsuvwxyz{}~Root Entry F 0 Data =i1TableHVWordDocument?xSummaryInformation(tDocumentSummaryInformation8|CompObjq  FMicrosoft Office Word Document MSWordDocWord.Document.89q