From 217d14d0bfdc7e3c7da64b51379dce97a980b6aa Mon Sep 17 00:00:00 2001 From: Shruthik Musukula Date: Tue, 28 Jul 2020 18:27:55 -0700 Subject: [PATCH 1/5] Create test.txt --- WebApplication/test.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 WebApplication/test.txt diff --git a/WebApplication/test.txt b/WebApplication/test.txt new file mode 100644 index 0000000..9daeafb --- /dev/null +++ b/WebApplication/test.txt @@ -0,0 +1 @@ +test From 3311834e7bcb882de5de4d6eed7ca327625684ab Mon Sep 17 00:00:00 2001 From: Shruthik Musukula Date: Tue, 28 Jul 2020 18:50:10 -0700 Subject: [PATCH 2/5] added tomcat webapp/servlet files --- WebApplication/test.txt | 1 - webapp/WEB-INF/classes/1 | 13 ++ webapp/WEB-INF/classes/HelloWorld.class | Bin 0 -> 1264 bytes webapp/WEB-INF/classes/HelloWorld.java | 40 ++++++ .../classes/MetadataTableCreation.class | Bin 0 -> 3650 bytes .../classes/MetadataTableCreation.java | 136 ++++++++++++++++++ webapp/WEB-INF/classes/MstiffExtraction.class | Bin 0 -> 2359 bytes webapp/WEB-INF/classes/MstiffExtraction.java | 58 ++++++++ webapp/WEB-INF/scripts/1 | 23 +++ webapp/WEB-INF/scripts/mstiff.sh | 6 + webapp/WEB-INF/web.xml | 26 ++++ webapp/WEB-INF/web.xml~ | 26 ++++ webapp/WEB-INF/web_my.xml | 18 +++ webapp/index.html | 13 ++ webapp/index.html~ | 13 ++ 15 files changed, 372 insertions(+), 1 deletion(-) delete mode 100644 WebApplication/test.txt create mode 100644 webapp/WEB-INF/classes/1 create mode 100644 webapp/WEB-INF/classes/HelloWorld.class create mode 100644 webapp/WEB-INF/classes/HelloWorld.java create mode 100644 webapp/WEB-INF/classes/MetadataTableCreation.class create mode 100644 webapp/WEB-INF/classes/MetadataTableCreation.java create mode 100644 webapp/WEB-INF/classes/MstiffExtraction.class create mode 100644 webapp/WEB-INF/classes/MstiffExtraction.java create mode 100644 webapp/WEB-INF/scripts/1 create mode 100644 webapp/WEB-INF/scripts/mstiff.sh create mode 100644 webapp/WEB-INF/web.xml create mode 100644 webapp/WEB-INF/web.xml~ create mode 100644 webapp/WEB-INF/web_my.xml create mode 100644 webapp/index.html create mode 100644 webapp/index.html~ diff --git a/WebApplication/test.txt b/WebApplication/test.txt deleted file mode 100644 index 9daeafb..0000000 --- a/WebApplication/test.txt +++ /dev/null @@ -1 +0,0 @@ -test diff --git a/webapp/WEB-INF/classes/1 b/webapp/WEB-INF/classes/1 new file mode 100644 index 0000000..e3d57ed --- /dev/null +++ b/webapp/WEB-INF/classes/1 @@ -0,0 +1,13 @@ + + +DiDAP Job Monitor + + +

+

DiDAP Job Monitor

+ + + diff --git a/webapp/WEB-INF/classes/HelloWorld.class b/webapp/WEB-INF/classes/HelloWorld.class new file mode 100644 index 0000000000000000000000000000000000000000..37d7c285a27fc0b612b131a3bf9e8555806e8adb GIT binary patch literal 1264 zcmah|Yg5xe6g^v7vXt_$JPImUieihDh)<*el~O2(faNuO4DC)ECnPo9B7D-niMZ-Lreoy?6K5pYJ~bJV7ChL5y=eYR3f99FxlG3LbMzg^BT$ z;~B?uju#qUh7nQhX=Pt=%qW}TFgRv8<~Uw+yy1AOVO~R)p}QtL%d~fdSF>DadwGF@ ztuSeMp?RcJoI_hky&`2*&l7Am90l>IE^0FKUs|n7l0-&D4d;%EqAE#nO~ZnQ z9Jw~#x>pp7mI~gL7q;#0x}IH{RM8{2hd4u<6h}(HfvsUNf+gfh=l0fOdOCt-DR!pxZ2sB z5%(pGFvOG!-8P-Fz9~J+DbLp}yCggY&5)L~#askySZCmdelgy_2Q{sqN9#BC-O_P< zzg%=}*PBgzu2@neC|1y@Opyr@Q(0P}h>bsAIu+-t9t^`b_k*Fw7i+ot^7>_+uPr<8 zUK3&L=6wsI(LjbysumqDDIB?VT%~sPHO@$Lef&1}Dk4?aEK1?!oT6Kz%26B3LhgE$ zJ(Vw(O!)^#C%GF`*z<`@Qx;8bs!mmrY=_!tR;$7(F{J+$y|L-_hSA1cx{V$(^j<`7 zB4#jx0lKktTX37+J7n+DD1agQm^z7sBjgz(%gBbtPr<(V3lfB_zB5cXiu<%gQGcTa z>JomPhz8Ek62L?>c!m(!Gqf_SrK8#jcsknVW0)}7J`+s;KxFR}9nsDcbPWaxqTK{1 zxaHHLKK3ZQAogAo`"); + out.println(""); + out.println(""); + + String title = "Hello, World!"; + + out.println("" + title + ""); + out.println(""); + out.println(""); + + out.println("

" + title + "

"); + out.println(""); + out.println(""); + } +} + + + diff --git a/webapp/WEB-INF/classes/MetadataTableCreation.class b/webapp/WEB-INF/classes/MetadataTableCreation.class new file mode 100644 index 0000000000000000000000000000000000000000..cb2e0542bffbf6cffa422804794d7b9c6a63ea0a GIT binary patch literal 3650 zcmb7H`F9i775+vD&ma#=1~5w+7&{3z@*u_YL3gl1&y zwrSF|Y0@TL(l$*<(tRP_OA7`kZO`ei{ki{3f9vV@Mv^TE^qktqGjHy@_rCA$&;R_- zM}G(K1pXGn1kP{4Nj#_ELI}^}b22W9?-xSY3^Rmz6ciK{SRpK6QS6iyltZ|L%iXY1 z5tOP7CxnM!%BY2~6Xz9N5%0PJSAnOXp{L&1+x04*gk2lk zdC&B$idFTvyIly!UC*4i%WlakN|4S=*yJ=Q($ZLVA~W@J)tjxCJ*!TcuJLlU>`jnu z;P6=R;E#zx9SG9kEWT%cOFBw=&WIb~6Qt|_}5ajp82ZF!NB z=hY(9eB_&ioOPvPx!wu?i2udr)|{$q`3HyM%LS_@oaoBPQ*k|+&@)+s z)MVbs>ni?$KT3F2A6TGIXH2i8=Z#!4b81MZXDy~prKTq{#!%H8PQ{;;Cdh zX~Y@Ay@_Nz70c^1B%RFAsF*%Er}q!_OVIL0HplO%*gad51OlP{*SH@)gS;b#)Q$&24 zrQlb9o-paFVsEd6ExAUu%0d~VBX41qgoIxi+$FS)E}&1@j%yW1RNNMNws_XEsF8{- zVKIDn7!DijVPEhJ3s?mYp)@X5zYFof!9@qWVjgS!DI^9T(Z97fNQ` zwY-ykzJ@+M!mT~++R**t(A(7^K^|wMY>Pa~c%;3Q$0IGBJ>&CEaYdhBEI77PKiPM+ z#Gcbf?%;T7l&@_%bHZ!5W0V-32uT>c=OmHH`lLmt=qbl6GP@V*PDP)NCGuk`o)zXV zG67LI(#4GEt!r<*Xo)SR6M6?4ZBfWc?Tmov~{Pg zA1Fb!?wXMU4?a~Gm9yN2?d2_T0gzjg%*Xo)@iMTP?aO7P4~c^xoR?JU4^I{;+X18J z@rGfn)F`=25ZETn0=sa$T5yW2Pxc{3xp}Ez$7maSPadI{SDgu7?1Bi0!NpZTj3ocf z0qegx6#4FgB<3!kNq!w7AEzEd;oFeHn{FX+gI^LpD`?yUFK$8fkiw?WlKGc^3UEGr z6M^?|M%$Dcyo2EEb?itDlGe2fId}((wj~uF)IwV54!Una6+7D2Rcs4$rLJMS#BRJJ z9ORiDlA4gb!INcdhsK-eLE=pD#u)H1CAb3ibN3PAJ3yX3avdZ}9S_qB2We3s`Z0n5 z9K#?jAENvbY8XbE)H8@+j@RE5wWtW@WTaL0_l!#0vY2UE_z!I2FHjX0UPD<6r9Z~b zx!c&K?OsLCApf*I;;~me_KC-S@pzbzReUNfOl=E1LfTN1E^NPv9Ybq45CGlvP?{SD z1+%7e?*>noaRC?Ctqs#g;3%obxO$4ur`au^Ay154QM|wi7kPoIFtWm;EeQNuTpKf6 zsfum2WzK6Yb0(VRJk<%Wm(YYggx!KSxQ0H$^I<(o+I1*C&L+I0IKB?A4+;-W65g|P zeTuG56YLB*G6b7tO6Gi6G6Ks46(k(C^cJWW8Bvj6N1CAg#L*sWVOYcC61c%MImCs? zOTtJI=s^Kv2O}I_hjEB@gOQbSmOJOLj}h*}dGb6@uIHEq7Z~-6Z77#oQ1UPcfJGqn z&_A20Vs%LCU&BBEL)zgrgaZgORD&W-yL@jjS|Wg5+HiX@!i5&e2x2?lN9auM_h_S? zUhUGJXv=)MwP*`G*%ml@x4>rv-ztu2$H#)SyQk` zN0eA5m+&YqGcGpcQe|9fn8g*Qjf*lGcpXc43oCdVFX0+q=I#0&e28~(1Mk!359m_S QE&_DxES-LiUjfYh7kBHO2mk;8 literal 0 HcmV?d00001 diff --git a/webapp/WEB-INF/classes/MetadataTableCreation.java b/webapp/WEB-INF/classes/MetadataTableCreation.java new file mode 100644 index 0000000..b9da928 --- /dev/null +++ b/webapp/WEB-INF/classes/MetadataTableCreation.java @@ -0,0 +1,136 @@ +import java.io.IOException; +import java.io.PrintWriter; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.ResourceBundle; +import java.util.Arrays; + +import java.sql.SQLException; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; +import java.sql.DriverManager; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class MetadataTableCreation extends HttpServlet { + private Connection conn; + private Statement stmt; + private boolean connEstablished = false; + private PrintWriter out; + + public void DBinit() { + if (!connEstablished) { + try { + // Register driver and create driver instance + String driverName = "com.cloudera.hive.jdbc4.HS1Driver"; + Class.forName(driverName); + } catch (ClassNotFoundException e) { + e.printStackTrace(out); + System.exit(1); + } + + try { + // Establish connection + String url = "jdbc:hive://localhost:10000/metadata"; + conn = DriverManager.getConnection(url, "", ""); + out.println("Connected to Database!"); + + // Create statement + stmt = conn.createStatement(); + connEstablished = true; + } catch (SQLException e) { + e.printStackTrace(out); + System.exit(1); + } + } + } + + public void createTable(String tableName) { + if (connEstablished) { + try { + String query = ""; + // create hive table statement + query = "CREATE EXTERNAL TABLE IF NOT EXISTS " + tableName + + " (filePath STRING, dateStamp INT,navTime STRING,FathTime STRING,latitude DOUBLE,longitude DOUBLE,waterDepth FLOAT,towfishDepth FLOAT)" + + "ROW FORMAT DELIMITED" + + "FIELDS TERMINATED BY ','" + + "STORED AS TEXTFILE" + + "LOCATION '/user/cloudera/successfulOutput_fullScript'"; + out.println("Your query:" + query); + stmt.executeQuery(query); // executeUpdate + } catch (SQLException e) { + e.printStackTrace(); + out.println("Query Failed!!"); + } + } + } + + public void DBExecuteQuery(String query) { + if (connEstablished) { + try { + out.println("Running: " + query); + stmt.execute(query); + out.println("Finished!"); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + + public void DBfinish() { + if (connEstablished) { + out.println("Connection Closed."); + try { + stmt.close(); + conn.close(); + connEstablished = false; + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + + @Override + public void doGet(HttpServletRequest request, + HttpServletResponse response) + throws IOException, ServletException + { + response.setContentType("text/html"); + response.setCharacterEncoding("UTF-8"); + out = response.getWriter(); + + out.println(""); + out.println(""); + out.println(""); + + String title = "Metadata Table Creation"; + + out.println("" + title + ""); + out.println(""); + + out.println(""); + + out.println("

" + title + " Status:

\n"); + out.println("Metadata Table Data Being Loaded from HDFS:"); + + // Create DB Connection + DBinit(); + + // Create Actual Table + //createTable("florida"); + + // Display HDFS Data + String query = "LOAD DATA INPATH '/user/cloudera/successfulOutput_fullScript/part-m-00000' OVERWRITE INTO TABLE florida"; + DBExecuteQuery(query); + + out.println(""); + out.println(""); + + // Close DB Connection + DBfinish(); + } +} diff --git a/webapp/WEB-INF/classes/MstiffExtraction.class b/webapp/WEB-INF/classes/MstiffExtraction.class new file mode 100644 index 0000000000000000000000000000000000000000..c1d27cfc0d1403a72501cdabdba31c384dc37a31 GIT binary patch literal 2359 zcmai0Np}-R5dPX&p0N-H#;Y7KV}rp4i;01-$ifLWHkjZgmcdcTHj>)b7->e#w6L9x zkd4;`vCUDZ`zeO1*nfByH& zZvgh;dJqN%Rh(FllNeHQO0G{zaazT25F;2>F{a`v72^uxL4>6Bgj~<4I4jpl6;G>3 zsCY)jIR($EcuvLh3SI~zj2ERagGeH!ARWY3@M=t9T16%Z3!@5V6r7j(Y!KU#3!)9S z3MYs>E~s$jv!_C+D5$uoU{=8#LsiVOEz!%cuA}oTLuJ2{<_sH8TQ(ml|n z26SoK8}lXM3E^#dqAHf*W|~-QisiU4^;E`mJuZ&6`JUQzgH)S`;}b)JgZe5ChDM3R z$eQ-F5f`pyPxlq9Y?`|aN=#TH%X>q32k$bdF=P4p3f_}yqZF|rmUPnddU87DWF7Zt z+ib=Xyp7^j#xmWsX!?FcW;nk)7^222qS6PM$+^$3`dND=NcX*!42W$ zQl>CwdD6`1JtJ+U&Ac%=&=(mR88p0BXoKE-DY&Bv{@ZaYHfb39cLT(@jJW2PM^ z->Tqqh6dl8 z-7VNQl|)zYbqH7R4K;>tc~L!tZ)FJ>@knKm>=VthAhI)v+q>JXl;(p+grQvme6T@j zh8T7}%&s^@47JM{k5N~NNtb$pc&I(+Phok(^-yE_wtf?qDpq!WXmq6-_vBHU@G^rM zYWjYMDrt*}`MjLH;`Oj5qMYzLX-NG=1IgV1JLRN_X==i0z5=$fqqB&X3R;#00ao%d zsjN+NM?J~yG(+TmaqdaB)QRLm6;5&B2+DGtvN0r!hK~D?C7}mAVY+nl)vq~MVosu) zH7zmd5Z!cz4$ItA%+ZNkMyC6{ZfS=?r*A+pLEnr@S2 zM8sH`f*drJ=($TF)2Urm6-UCqfr}6e!pa)QT-TiU7?c{}Z*CxY0FTiTGG%`ufFP~)U0TI0 ztgAqmR(T5nT5q9>VI-m{3s56kwJ(Dtwe``;$Pz+{MQqS&7O*i~NkZF1VgZ|dGtHN^ zQZ5_Ttr*s?7zTbtLt>rQ7*AAcP4Q@83E@OIu!!bpRk&&ak3^L)1>Z7x16ouKs|#rP z3EMP%0j*1DODth~Lh5%cqJ0rNqpPuY$ykA((Lt-$xe`u#*qw-0|ACfeSYb+Qqqb+o zB95@(2P!OK?E&0g>4vv zjn6vPx9RnQBj;PIN"); + out.println(""); + out.println(""); + + String title = "MSTIFF Extraction"; + + out.println("" + title + ""); + out.println(""); + out.println(""); + + out.println("

" + title + " Job Status:

\n"); + + String[] command = {"/bin/bash", "/usr/share/tomcat/webapps/didap/WEB-INF/scripts/mstiff.sh"}; + ProcessBuilder p = new ProcessBuilder(command); + Process p2 = p.start(); + try { + p2.waitFor(); + } catch (InterruptedException e) { + e.printStackTrace(); + System.out.println("Did not execute in hadoop!"); + } + + BufferedReader br = new BufferedReader(new InputStreamReader(p2.getInputStream())); + String line; + + out.println("Output of running " + Arrays.toString(command) + " is: "); + while ((line = br.readLine()) != null) { + out.println(line + "\n"); + } + + out.println(""); + out.println(""); + } +} + diff --git a/webapp/WEB-INF/scripts/1 b/webapp/WEB-INF/scripts/1 new file mode 100644 index 0000000..9157cae --- /dev/null +++ b/webapp/WEB-INF/scripts/1 @@ -0,0 +1,23 @@ +#!/bin/bash + +su cloudera < + + HelloWorld + HelloWorld + + + MetadataTableCreation + MetadataTableCreation + + + MSTIFF_Extraction + MstiffExtraction + + + HelloWorld + /HelloWorld + + + MetadataTableCreation + /MetadataTableCreation + + + MSTIFF_Extraction + /MSTIFF_Extraction + + diff --git a/webapp/WEB-INF/web.xml~ b/webapp/WEB-INF/web.xml~ new file mode 100644 index 0000000..9db7f9c --- /dev/null +++ b/webapp/WEB-INF/web.xml~ @@ -0,0 +1,26 @@ + + + HelloWorld + HelloWorld + + + MetadataTableCreation + MetadataTableCreation + + + MSTIFF_Extraction + MstiffExtraction + + + HelloWorld + /HelloWorld + + + MetadataTableCreation + /MetadataTableCreation + + + MSTIFF_Extraction + /MSTIFF_Extraction + + diff --git a/webapp/WEB-INF/web_my.xml b/webapp/WEB-INF/web_my.xml new file mode 100644 index 0000000..3069058 --- /dev/null +++ b/webapp/WEB-INF/web_my.xml @@ -0,0 +1,18 @@ + + + HelloWorld + HelloWorld + + + MSTIFF_Extraction + MstiffExtraction + + + HelloWorld + /HelloWorld + + + MSTIFF_Extraction + /MSTIFF_Extraction + + diff --git a/webapp/index.html b/webapp/index.html new file mode 100644 index 0000000..894a95f --- /dev/null +++ b/webapp/index.html @@ -0,0 +1,13 @@ + + +DiDAP Job Monitor + + +

+

DiDAP Job Monitor

+ + + diff --git a/webapp/index.html~ b/webapp/index.html~ new file mode 100644 index 0000000..894a95f --- /dev/null +++ b/webapp/index.html~ @@ -0,0 +1,13 @@ + + +DiDAP Job Monitor + + +

+

DiDAP Job Monitor

+ + + From 9843059fa6201dc624deeed51af321e3aa5c669a Mon Sep 17 00:00:00 2001 From: Shruthik Musukula Date: Tue, 28 Jul 2020 19:08:10 -0700 Subject: [PATCH 3/5] Create LICENSE --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f49cf4e --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Shruthik Musukula + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From 9956e018c4755f8e7d23e2802b8599e0baa3e0f5 Mon Sep 17 00:00:00 2001 From: Shruthik Musukula Date: Tue, 28 Jul 2020 19:08:39 -0700 Subject: [PATCH 4/5] Delete LICENSE --- LICENSE | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 LICENSE diff --git a/LICENSE b/LICENSE deleted file mode 100644 index f49cf4e..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 Shruthik Musukula - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. From f414bcedae27ec2fc07c978c20b99be4ec1383be Mon Sep 17 00:00:00 2001 From: Shruthik Musukula Date: Thu, 30 Jul 2020 00:35:45 -0700 Subject: [PATCH 5/5] Create LICENSE --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7a5faf4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 The Naval Postgraduate School + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.