Compare commits

...
18 Commits
Author SHA1 Message Date
malte_langkabel ecfdd1ccb7 build: update Java indexer dependencies
* now using JavaParser version 3.2.4 (tagged with javaparser-parent-3.2.4)
* now using JavaSymbolSolver commit hash 5b96df7a
2017-06-20 16:55:24 +02:00
malte_langkabel ba549822c9 build: update windows installer
* changed windows installer to discard the first two digits of the version (17 instead of 2017)
* renamed vs plugin installer
* add game_object.h for TicTacToe to windows installer
* add eula.txt for eula window and keyboard shortcuts css to installer
* add eula and 3rd party licenses to windows install directory
2017-06-20 16:10:22 +02:00
Andreas Stallinger 8b6109be79 script: install script linux fix
install script failed when there were spaces in the path
2017-06-20 15:36:43 +02:00
Eberhard Graether ad3169c3c0 src: Fixes for release
* clear references count when clearing code view
* fixed scrolling to character in overview lists
* fixed aggregation activation shown in history menu
* fixed same snippet being added twice
* Sourcetrail [Trial] as window title
* fixed undoing trail expand will always reactivate symbol
2017-06-20 15:18:30 +02:00
Andreas Stallinger 81b88df3a2 gui: show eula on non windows versions 2017-06-20 14:45:52 +02:00
Eberhard Graether 738e13a664 resource: Updated EULA 2017-06-20 13:06:06 +02:00
Eberhard Graether d7fbaede79 src: Fixed crash when using shortcuts with focus on the graph (issue #390)
bug id = 390
2017-06-20 12:53:13 +02:00
Eberhard Graether 652a55b4fb logic: Fixed saving project name to ProjectSettings also sets project location to '/' 2017-06-19 23:38:39 +02:00
Eberhard Graether 05c2878eec src: Fixed old license partly shown and new placeholder in license dialog 2017-06-19 23:08:42 +02:00
Eberhard Graether 894beccb28 build: Added GameObject base to tictactoe sample
* Gets used in gifs and video
2017-06-19 22:15:34 +02:00
malte_langkabel e6c5ffa97a logic: apply some shared memory fixes
* corrections in estimating size of intermediate indexer commands
* avoided clearing and refilling the indexed files list every time files get added
* changed memory growth policy of InterprocessIndexingStatusManager to double allocated memory when it gets full
* added potential to grow memory when adding crashed file paths
2017-06-19 16:24:01 +02:00
malte_langkabel fba8dadee7 build: fix license compile errors on windows 2017-06-19 16:15:02 +02:00
Andreas Stallinger e953b35c62 logic: license format 2017-06-13 21:23:18 +02:00
malte_langkabel 72f3dcfc19 logic: improved plugin performance
* reduced file open/close events while writing cdb
* fixed detection of header paths
* refactored Visual Studio extension code
* removed very old menu option for converting a solution directly into a Coati project (which would have been performed by Coati itself, not by the plugin).
2017-06-12 12:10:48 +02:00
Andreas Stallinger 148588b179 logic: add 1MB buffer to pushIntermediateStorge 2017-06-12 12:05:34 +02:00
Andreas Stallinger 19ed6cb372 logic: versioning 2017-06-12 09:14:21 +02:00
Andreas Stallinger 419a2e27ba ui: subwindow when resize mainwindow
* disable drop in qtlineedit
    fixes bug where when file is dropped in the lineedit with text,
    the the file will be added as text midst the existing text
* move message to start from script before layout loading so it will load right
(only when started without script on linux)
* center subwindow when mainwindow size changes
2017-06-08 20:42:32 +02:00
malte_langkabel 699de2ee0a build: improve convenience for running Visual Studio plugin integration tests
* added testsettings file that causes Visual Studio to use the current build of the
    extension when running the integration tests. So no more uninstalling and installing
	of the extension before running the tests.
2017-06-08 14:57:18 +02:00
131 changed files with 3011 additions and 2727 deletions
+3 -2
View File
@@ -24,8 +24,9 @@
/ide_plugins/vs/vs2015/SourcetrailPlugin/SourcetrailPlugin/bin
/ide_plugins/vs/vs2015/SourcetrailPlugin/SourcetrailPlugin/obj
/ide_plugins/vs/vs2015/SourcetrailPlugin/SourcetrailPlugin.IntegrationTests/bin/
/ide_plugins/vs/vs2015/SourcetrailPlugin/SourcetrailPlugin.IntegrationTests/obj
/ide_plugins/vs/vs2015/SourcetrailPlugin/SourcetrailPluginTests/bin/Debug
/ide_plugins/vs/vs2015/SourcetrailPlugin/SourcetrailPluginTests/bin/Release
/ide_plugins/vs/vs2015/SourcetrailPlugin/SourcetrailPluginTests/obj
/ide_plugins/vs/vs2015/SourcetrailPlugin/SourcetrailPluginUtility/bin
/ide_plugins/vs/vs2015/SourcetrailPlugin/SourcetrailPluginUtility/obj
/ide_plugins/vs/vs2015/SourcetrailPlugin/VCProjectEngineWrapperInterfaces/bin
+2 -1
View File
@@ -50,10 +50,11 @@ Linux64_licenseGenerator:
script:
- ./script/setup.sh
- ./script/buildonly.sh r keygen
- mv build/Release/license_generator/Sourcetrail_license_generator .
artifacts:
name: "$CI_JOB_NAME"
paths:
- build/Release/license_generator/*_license_generator
- Sourcetrail_license_generator
expire_in: 3 days
Linux32:
+13 -6
View File
@@ -106,7 +106,7 @@ elseif(UNIX AND APPLE)
set(Boost_NO_SYSTEM_PATHS ON)
else()
STRING(REGEX REPLACE "\\\\" "/" BOOST_LIBRARYDIR ${BOOST_LIBRARYDIR})
if(${WINXXBITS} STREQUAL "Win32")
set(BOOST_ROOT "${BOOST_LIBRARYDIR}/win32")
else()
@@ -402,11 +402,10 @@ configure_file(
)
# configure public key for the sourcetrail version
include(cmake/publicKey.cmake)
include(cmake/public_key.cmake)
set(CMAKE_AUTOMOC OFF)
# Indexer App ------------------------------------------------------------------
if (UNIX)
@@ -583,6 +582,9 @@ endif ()
add_subdirectory(src/license_generator)
# configure private key for the sourcetrail version
include(cmake/private_key.cmake)
if (UNIX)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/license_generator/")
else ()
@@ -592,7 +594,7 @@ else ()
endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )
endif ()
add_executable(${LICENSE_GENERATOR_PROJECT_NAME} ${LICENSE_GENERATOR_FILES})
add_executable(${LICENSE_GENERATOR_PROJECT_NAME} ${LICENSE_GENERATOR_FILES} ${LICENSE_GENERATOR_MAIN})
create_source_groups(${LICENSE_GENERATOR_FILES})
@@ -600,6 +602,8 @@ set_property(
TARGET ${LICENSE_GENERATOR_PROJECT_NAME}
PROPERTY INCLUDE_DIRECTORIES
"${CMAKE_SOURCE_DIR}/src/lib_license"
"${CMAKE_BINARY_DIR}/src/license_generator"
"${CMAKE_BINARY_DIR}/src/lib_license"
)
target_include_directories(${LICENSE_GENERATOR_PROJECT_NAME} SYSTEM
@@ -632,7 +636,7 @@ set(TESTGEN_FILE ${CMAKE_CURRENT_BINARY_DIR}/test_main.cpp)
find_package(PythonInterp REQUIRED)
add_executable (${TEST_PROJECT_NAME} ${TESTGEN_FILE} ${TEST_FILES} )
add_executable (${TEST_PROJECT_NAME} ${TESTGEN_FILE} ${TEST_FILES} ${LICENSE_GENERATOR_FILES})
create_source_groups(${TEST_FILES})
@@ -650,6 +654,9 @@ if (CXXTEST_FOUND)
"${CMAKE_SOURCE_DIR}/src/lib_java"
"${CMAKE_SOURCE_DIR}/src/external"
"${CMAKE_SOURCE_DIR}/src/lib_license"
"${CMAKE_BINARY_DIR}/src/lib_license"
"${CMAKE_SOURCE_DIR}/src/license_generator"
"${CMAKE_BINARY_DIR}/src/license_generator"
"${Boost_INCLUDE_DIRS}"
)
endif (CXXTEST_FOUND)
@@ -719,6 +726,6 @@ if (UNIX)
)
# Linux package
include(cmake/LinuxPackage.cmake)
include(cmake/linux_package.cmake)
endif ()
endif ()
+401 -389
View File
@@ -1,389 +1,401 @@
{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch0\stshfloch31506\stshfhich31506\stshfbi31506\deflang1031\deflangfe1031\themelang1031\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}
{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f39\fbidi \fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Segoe UI;}
{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fhimajor\f31502\fbidi \froman\fcharset0\fprq0{\*\panose 00000000000000000000}Calibri Light;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f41\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\f42\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f44\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f45\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f46\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\f47\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f48\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f49\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f381\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}
{\f382\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f384\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f385\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f388\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}
{\f389\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}{\f411\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f412\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f414\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}
{\f415\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f418\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f419\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f431\fbidi \fswiss\fcharset238\fprq2 Segoe UI CE;}
{\f432\fbidi \fswiss\fcharset204\fprq2 Segoe UI Cyr;}{\f434\fbidi \fswiss\fcharset161\fprq2 Segoe UI Greek;}{\f435\fbidi \fswiss\fcharset162\fprq2 Segoe UI Tur;}{\f437\fbidi \fswiss\fcharset178\fprq2 Segoe UI (Arabic);}
{\f438\fbidi \fswiss\fcharset186\fprq2 Segoe UI Baltic;}{\f439\fbidi \fswiss\fcharset163\fprq2 Segoe UI (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}
{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;
\chyperlink\ctint255\cshade255\red5\green99\blue193;}{\*\defchp \f31506\fs22\lang2057\langfe1033\langnp2057\langfenp1033 }{\*\defpap \ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }
\noqfpromote {\stylesheet{\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang2057\langfe1033\cgrid\langnp2057\langfenp1033
\snext0 \sqformat \spriority0 \styrsid12137944 Normal;}{\s3\qc \li0\ri0\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel2\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0
\b\scaps\fs24\ul\cf1\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \slink23 \sqformat \spriority9 \styrsid15234004
heading 3,h3,3,Underrubrik2,h:3,h,l3,H3,list 3,Head 3,1.1.1,3rd level,Heading3,H31,Heading31,H32,H311,h3 sub heading,C Sub-Sub/Italic,Head 31,Head 32,C Sub-Sub/Italic1,Sub2Para,h31,h32,Para3,Title3,(Alt+3),3m,sub-sub-para,Table Attribute Heading,H33;}{\*
\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa160\sl259\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31506\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \snext11 \ssemihidden \sunhideused \sqformat Normal Table;}{
\s15\ql \li720\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\contextualspace \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang2057\langfe1033\cgrid\langnp2057\langfenp1033
\sbasedon0 \snext15 \sqformat \spriority34 \styrsid8484554 List Paragraph;}{\s16\qj \li0\ri0\widctlpar
\tx-17296\tx-16576\tx-15856\tx-15136\tx-14416\tx-13696\tx-12976\tx-12256\tx-11536\tx-10816\tx-10096\tx-9376\tx-8656\tx-7936\tx-7216\tx-6496\tx-5776\tx-5056\tx-4336\tx-3616\tx-2896\tx-2176\tx-1456\tx-736\tx-16\tx704\tx1424\tx2144\tx2864
\tx3584\tx4304\tx5024\tx5744\tx6464\tx7184\tx7920\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs24\cf1\lang1033\langfe1033\cgrid\langnp1033\langfenp1033
\sbasedon0 \snext16 \slink17 \styrsid14043460 Body Text 2;}{\*\cs17 \additive \rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\cf1\lang1033\langfe0\langnp1033\langfenp0 \sbasedon10 \slink16 \slocked \styrsid14043460 Textk\'f6rper 2 Zchn;}{
\s18\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af39\afs18\alang1025 \ltrch\fcs0 \f39\fs18\lang2057\langfe1033\cgrid\langnp2057\langfenp1033
\sbasedon0 \snext18 \slink19 \ssemihidden \sunhideused \styrsid14043460 Balloon Text;}{\*\cs19 \additive \rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \f39\fs18 \sbasedon10 \slink18 \slocked \ssemihidden \styrsid14043460 Sprechblasentext Zchn;}{
\s20\ql \li0\ri0\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext20 \slink21 \styrsid14043460
Body Text,bt;}{\*\cs21 \additive \rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\lang1033\langfe0\langnp1033\langfenp0 \sbasedon10 \slink20 \slocked \styrsid14043460 Textk\'f6rper Zchn,bt Zchn;}{\*\cs22 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf17
\sbasedon10 \sunhideused \styrsid15234004 Hyperlink;}{\*\cs23 \additive \rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \b\scaps\f0\fs20\ul\cf1\lang1033\langfe0\langnp1033\langfenp0 \sbasedon10 \slink3 \slocked \spriority0 \styrsid15234004
\'dcberschrift 3 Zchn,h3 Zchn,3 Zchn,Underrubrik2 Zchn,h:3 Zchn,h Zchn,l3 Zchn,H3 Zchn,list 3 Zchn,Head 3 Zchn,1.1.1 Zchn,3rd level Zchn,Heading3 Zchn,H31 Zchn,Heading31 Zchn,H32 Zchn,H311 Zchn,h3 sub heading Zchn,C Sub-Sub/Italic Zchn,Head 31 Zchn,3m Zchn;}
{\s24\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \snext24 \sqformat \spriority1 \styrsid8353839
No Spacing;}}{\*\listtable{\list\listtemplateid-237996820\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01*;}{\levelnumbers;}\hres0\chhres0 }{\listname ;}\listid-2}
{\list\listtemplateid767595270\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-345469290\'03(\'00);}{\levelnumbers\'02;}\rtlch\fcs1 \af0 \ltrch\fcs0
\b0\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698713\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0
\ltrch\fcs0 \hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698715\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0
\ltrch\fcs0 \hres0\chhres0 \fi-180\li2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698703\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0
\ltrch\fcs0 \hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698713\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0
\ltrch\fcs0 \hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698715\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0
\ltrch\fcs0 \hres0\chhres0 \fi-180\li4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698703\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0
\ltrch\fcs0 \hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698713\'02\'07.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0
\ltrch\fcs0 \hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698715\'02\'08.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0
\ltrch\fcs0 \hres0\chhres0 \fi-180\li6480\lin6480 }{\listname ;}\listid1617834509}}{\*\listoverridetable{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat0
\levelold\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 }}\ls1}{\listoverride\listid1617834509\listoverridecount0\ls2}}{\*\rsidtbl \rsid927059\rsid3111406\rsid3232479\rsid3763068\rsid5190140\rsid5327097\rsid5985810
\rsid6113920\rsid7799561\rsid8068493\rsid8353839\rsid8484554\rsid8879590\rsid8913734\rsid9175821\rsid9331093\rsid9637834\rsid9832860\rsid10748571\rsid11411570\rsid12137944\rsid13005862\rsid13784877\rsid13837067\rsid13897761\rsid14043460\rsid14622934
\rsid14825363\rsid14970534\rsid15234004\rsid16058252}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac1\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author Thomson, Clive}{\operator Malte}
{\creatim\yr2017\mo2\dy14\hr13\min47}{\revtim\yr2017\mo2\dy14\hr15\min47}{\version4}{\edmins0}{\nofpages5}{\nofwords1297}{\nofchars7007}{\*\company CSR}{\nofcharsws8288}{\vern32859}}{\*\userprops {\propname _AdHocReviewCycleID}\proptype3{\staticval -10657
70450}{\propname _NewReviewCycle}\proptype30{\staticval }{\propname _EmailSubject}\proptype30{\staticval Request for evaluation license and details of third party software}{\propname _AuthorEmail}\proptype30{\staticval mrae@qti.qualcomm.com}{\propname _Au
thorEmailDisplayName}\proptype30{\staticval Rae, Marika}{\propname _ReviewingToolsShownOnce}\proptype30{\staticval }}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}
\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect
\widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves1\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1
\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1440\dgvorigin1440\dghshow1\dgvshow1
\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct
\asianbrkrule\rsidroot3763068\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0
{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sectrsid8068493\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}
{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}
{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar
\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3763068 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 Sourcetrail
\par Software License Agreement}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid15234004\charrsid5327097 (}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid15234004\charrsid5327097 \'93}{\rtlch\fcs1 \af37
\ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid15234004\charrsid5327097 Agreement}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid15234004\charrsid5327097 \'94}{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid15234004\charrsid5327097 )}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
\par Effective }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid9331093\charrsid5327097 15}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 .}{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid9331093\charrsid5327097 2}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 .}{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid9331093\charrsid5327097 2017}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid13837067\charrsid5327097
\par }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid9331093\charrsid5327097
\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid14043460 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 BY INSTALLING OR USING THIS SOFTWARE, YOU ARE
BECOMING A PARTY TO, AND ARE CONSENTING TO BE BOUND BY, THIS AGREEMENT. IF YOU DO NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, DO NOT INSTALL OR USE THIS SOFTWARE.
\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3763068 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
\par }{\rtlch\fcs1 \ab\af37 \ltrch\fcs0 \b\f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 DEFINITIONS}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
\par "Software" means:
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid3763068 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 A major version of Sourcetrail in executable form. The major
version is defined by the leading number of the version string (e.g. th}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid9331093\charrsid5327097 e major version of Sourcetrail 1.x.x}{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 is version 1);
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid3763068 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 documentation for that major version of Sourcetrail;
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid9175821 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
minor updates included in software maintenance which are indicated by an increase in the numbers that follow the major version number (e.}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid9331093\charrsid5327097
g. the update from Sourcetrail 1.0.0 to Sourcetrail 1.1.0}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 ).
\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\faauto\rin0\lin0\itap0\pararsid9175821 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
"Licensor" means:
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid3763068 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 Coati Software OG, having a place of business at }{\rtlch\fcs1
\af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid9331093\charrsid5327097 Jakob-Haringer-Stra\'dfe 1/127, 5020}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 }{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid9331093\charrsid5327097 Salzburg}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 , Austria.
\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\faauto\rin0\lin0\itap0\pararsid13005862 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
"Licensee" means:}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid13005862\charrsid5327097
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid14825363\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid13005862 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid14825363\charrsid5327097 the individual who purch}{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid8484554\charrsid5327097 ased a License(s) for the Software;}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid14825363\charrsid5327097 }{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid13005862\charrsid5327097
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13005862\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid13005862 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid13005862\charrsid5327097 the individual }{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid5327097\charrsid5327097 who was granted a Test }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid13005862\charrsid5327097 License(s) for the Software;
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid13005862\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid13005862 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid13005862\charrsid5327097 the individual }{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid5327097\charrsid5327097 evaluating}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid13005862\charrsid5327097 the Software in trial mode; }{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid14825363\charrsid5327097
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid14825363\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid14825363 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid14825363\charrsid5327097
the company, corporation, or organization that purchased a License(s) for the Software;
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid14825363\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid14825363 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid14825363\charrsid5327097 the company, corporation, or organization }{\rtlch\fcs1
\af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid5327097\charrsid5327097 that was granted a Test }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid13005862\charrsid5327097 License(s) for the Software}{\rtlch\fcs1
\af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid8484554\charrsid5327097 .}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid14825363\charrsid5327097
\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\faauto\rin0\lin0\itap0\pararsid8484554 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid8484554\charrsid5327097
"Activation Key" means:
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid3763068 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 the name of the Licensee, the kind of lice
nse, the major version of the }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid5327097 S}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 oftware that is licensed, and a hash}{
\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid5327097 -}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 code; the combination of these values allows the Licensee to activate}{
\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid7799561\charrsid5327097 the full functionality of}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 a genuine copy of the Software.
\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\faauto\rin0\lin0\itap0\pararsid3763068 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
"Authorized User" means:
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid5327097\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid5327097 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid5327097\charrsid5327097 the
individual who purchased a License(s) for the Software; the individ}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid5327097 ual is the only Authorized User;}{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid5327097\charrsid5327097
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid5327097\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid5327097 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid5327097\charrsid5327097
the individual who was granted a Test License(s) for the Software; }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid5327097 }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid5327097\charrsid5327097
the individ}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid5327097 ual is the only Authorized User;}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid5327097\charrsid5327097
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid5327097\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid5327097 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid5327097\charrsid5327097 the individual evaluating the Software in trial mode; }{
\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid5327097\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid5327097 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid5327097\charrsid5327097
an employee or independent contractor who might at any time use the Software, of the company, corporation, or organization that purchased a License(s) for the Software; an entity has one Authorized User for each License purchased;
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid5327097\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid5327097 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid5327097\charrsid5327097 a
n employee or independent contractor who might at any time use the Software, of the company, corporation, or organization }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid5327097 was granted}{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid5327097\charrsid5327097 a }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid5327097 Test }{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid5327097\charrsid5327097 License(s) for the Software; an entity has one Authorized }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid5327097 User for each License purchased.}{\rtlch\fcs1
\af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid5327097\charrsid5327097
\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\faauto\rin0\lin0\itap0\pararsid9637834 {\rtlch\fcs1 \ab\af37 \ltrch\fcs0 \b\f37\lang1033\langfe1033\langnp1033\insrsid13897761
\par }{\rtlch\fcs1 \ab\af37 \ltrch\fcs0 \b\f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 GRANT}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid9637834\charrsid5327097
\par }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
Subject to the terms of this Agreement, the Licensor hereby grants the Licensee a non-transferable, non-exclusive, non-sub-licensable, limited license that allows:
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid3763068 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
the Licensee to distribute (an) Activation Key(s) to Authorized User(s);
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid3763068 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 Authorized Us
er(s) to install the licensed version of the Software on computer PCs where potential use of the Software is restricted exclusively to Authorized User(s);
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid16058252 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 Authorized User(s) to us}{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid5327097 e the Software on computer PCs and }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 in virtual machines}{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid5327097 .}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid3763068 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
Licensee to make a copy of the Software for archival purposes provided the copy contains all of the proprietary notices of the Software.
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid3763068 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
In case the Licensee of the software is a company, corporation, or organization the Licensor has the right to mention this usage of the Software on its own website.
\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\faauto\rin0\lin0\itap0\pararsid3763068 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
\par }{\rtlch\fcs1 \ab\af37 \ltrch\fcs0 \b\f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 RESTRICTIONS}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
\par Licensee will not, and will have no right to:
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid3763068 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
distribute, use, or transfer an Activation Key(s) that has been superseded by an Activation Key(s) provided with software maintenance;
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid3763068 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 modify
, translate, reverse engineer, decompile, disassemble (except to the extent applicable laws specifically prohibit such restriction), create derivative works based on, or otherwise attempt to discover the source code or underlying ideas or algorithms of th
e Software;
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid3763068 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
sell, rent, lease, distribute, or otherwise transfer rights to the Software without prior written consent from Licensor;
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid3763068 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 remove any proprietary notices or labels from the Software.
\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\faauto\rin0\lin0\itap0\pararsid3763068 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid8913734 Authorized User(s) }{
\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid8913734\charrsid5327097 will not, and will have no right to:}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid8913734\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid8353839 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid8913734\charrsid5327097 use the trial }{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid8913734 mode of the S}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid8913734\charrsid5327097 oftware }{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid16058252\charrsid5327097 for any commercial purposes}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid8913734\charrsid5327097 ;}{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid8913734\charrsid8913734
\par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af37\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1033\langnp1033\insrsid8913734\charrsid5327097 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault{\*\pn
\pnlvlblt\ilvl0\ls1\pnrnot0\pnf3 {\pntxtb \'b7}}\faauto\ls1\rin0\lin720\itap0\pararsid8913734 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid8913734\charrsid5327097 use a }{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid8913734 P}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid8913734\charrsid5327097 rivate/}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid8913734 A}{
\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid8913734\charrsid5327097 cademic }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid8913734 L}{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid8913734\charrsid5327097 icense of the software}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid16058252\charrsid16058252 }{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid16058252\charrsid5327097 for any commercial purposes}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid8913734 .}{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid8913734\charrsid8913734
\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3763068 {\rtlch\fcs1 \ab\af37 \ltrch\fcs0 \b\f37\lang1033\langfe1033\langnp1033\insrsid8353839
\par }{\rtlch\fcs1 \ab\af37 \ltrch\fcs0 \b\f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 TITLE AND COPYRIGHT}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
\par Title, ownership rights, intellectual property rights, and copyright to the Software, and any copies or portions thereof, shall remain in Licensor. The Software is protected by European copyright directives, Austrian copyright laws as well as United State
s copyright laws and international treaty provisions.
\par }{\rtlch\fcs1 \ab\af37 \ltrch\fcs0 \b\f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
\par DISCLAIMER OF WARRANTY}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
\par THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND. LICENSOR HEREBY DISCLAIMS ALL EXPRESS OR IMPLIED WARRANTIES, INCLUDING WITHOUT LIMITATION WARRANTIES OF MERCHANTABILI
TY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS AGREEMENT. SOME U.S. STATES DO NOT ALLOW EXCLUSIONS OF AN IMPLIED WARRANTY, SO THIS DISCLAIMER MAY NOT APPLY TO LICENSEE. LICENSE
E MAY HAVE OTHER LEGAL RIGHTS THAT VARY FROM STATE TO STATE OR BY JURISDICTION.
\par
\par }{\rtlch\fcs1 \ab\af37 \ltrch\fcs0 \b\f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 LIMITATION OF LIABILITY}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
\par LICENSEE ASSUMES THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE. LICENSOR ASSUMES NO LIABILITY FOR THE COST OF ANY SERVICE OR REPAIR
IF THE SOFTWARE IS DEFECTIVE. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT, STRICT LIABILITY, OR OTHERWISE, SHALL LICENSOR, OR ITS LICENSORS, SUPPLIERS OR RESELLERS, BE LIABLE TO LICENSEE OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL,
I
NCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES. IN NO EVENT WILL LICENSOR BE
LIABLE FOR ANY DAMAGES IN EXCESS OF THE MONEY PAID FOR THE SOFTWARE, EVEN IF LICENSOR SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR
PERSONAL INJURY TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. FURTHERMORE, SOME U.S. STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION AND EXCLUSION MAY NOT APPLY TO LICENSEE.
\par
\par }{\rtlch\fcs1 \ab\af37 \ltrch\fcs0 \b\f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 TERMINATION}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
\par T
he license granted herein shall be perpetual. If Licensee fails to comply with any of the terms of this Agreement, this Agreement and the rights granted herein will terminate immediately. Licensor may, at its sole discretion and at any time, terminate thi
s Agreement. On termination, Licensee must cease using and destroy all copies of the Software.
\par }{\rtlch\fcs1 \ab\af37 \ltrch\fcs0 \b\f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
\par EXPORT CONTROLS}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
\par Licensee shall comply with all export laws, restrictions and regulations of the United States, the Directive 2009/428/EC of the European Parliament and of the Council and the Austrian Au\'df
enwirtschaftsgesetz 2011, BGBl I No. 26/2011. Licensee shall not export, re-export or otherwise transfer the Software to any country for which the United States or the European Union or Austria maintains an embargo
, or to any person or entity on the U.S. Department of Treasury List of Specially Designated Nationals or the U.S. Department of Commerce Denied Persons List or Entity List. Licensee represents and warrants that licensee is not located in, under the contr
ol of, or a national or resident of any restricted country or on any such list.
\par
\par }{\rtlch\fcs1 \ab\af37 \ltrch\fcs0 \b\f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 THIRD PARTY CREDITS}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
\par Portions of the Software utilize or include third party software and other copyrighted materials. Credits, licensing terms, and disclaimers for such materials are contained in the installation directory for the Software, and are accessible via the \'93}{
\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid13897761 3rd Party }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 Licenses\'94
dialog for the Software. Licensee agrees that use of such copyrighted materials is governed by their respective terms.
\par
\par }{\rtlch\fcs1 \ab\af37 \ltrch\fcs0 \b\f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 ENTIRE AGREEMENT}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
\par This Agreement represents the complete agreement concerning this }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid13784877\charrsid5327097 Software}{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 between the parties and supersedes all prior agreements and representations between them. It may
be amended only in writing executed by both parties. Coati Software OG reserves the exclusive right to periodically update this }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid8353839 Agreement}{\rtlch\fcs1 \af37 \ltrch\fcs0
\f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 at its discretion at any time, with reasonable notice to you by posting the new }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid8353839 Agreement}{\rtlch\fcs1
\af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 at the following URL: }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\ul\cf2\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 <http://www.sourcetrail.com/>}{\rtlch\fcs1
\af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
. Any action arising out of or relating to this Agreement may be brought exclusively in Salzburg, Austria, and Coati Software OG and you irrevocably consent to the jurisdiction of such courts and venue in Salzburg, Austria.
\par
\par }{\rtlch\fcs1 \ab\af37 \ltrch\fcs0 \b\f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097 CONTACT}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1033\langfe1033\langnp1033\insrsid3763068\charrsid5327097
\par If you have questions regarding this agreement, contact:
\par }\pard\plain \ltrpar\s24\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8353839 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\rtlch\fcs1
\af31507 \ltrch\fcs0 \lang1031\langfe1033\langnp1031\insrsid3763068\charrsid16058252 Coati Software OG
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1031\langfe1033\langnp1031\insrsid8353839\charrsid8353839 Jakob-Haringer-Stra\'dfe 1/127
\par 5020 Salzburg
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1031\langfe1033\langnp1031\insrsid3763068\charrsid8353839 Austria
\par }\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3763068 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\rtlch\fcs1 \af37
\ltrch\fcs0 \f37\lang1031\langfe1033\langnp1031\insrsid3763068
\par }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1031\langfe1033\langnp1031\insrsid3232479 support@sourcetrail.com}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1031\langfe1033\langnp1031\insrsid3232479\charrsid8353839
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1033\langnp1033\insrsid9832860\charrsid5327097
\par }{\*\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8
72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7
2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b
44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7
065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000
00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08
84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc
52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353
bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468
656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c
070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7
29e245eb2b260a0238fd010000ffff0300504b0304140006000800000021008aa90d21b8060000581a0000160000007468656d652f7468656d652f7468656d65
312e786d6cec59cf6fdb3614be0fd8ff20e8eefa9724db419dc296ed666bd216b5dba147daa62d369468487452a32830b4c701038675c30e2bb0db0ec3b6022d
b04bf7d764ebb075c0fe853d52b24cdaf49206390443938b457deff1e37be4f748f1eab58721b58e709c101635edf295926de168c4c6249a36edbb835ea16e5b
0947d1185116e1a6bdc0897d6df7c30faea21d1ee0105b601f253ba869079ccf768ac56404cd28b9c26638827713168788c3633c2d8e63740c7e435aac944a5e
314424b2ad0885e0f6d6644246d81a0897f6eed27997c263c413d130a2715fb8c69a85c48e0fcb02912c129fc6d611a24d1bfa19b3e3017ec86d8ba284c38ba6
5d927f7671f76a11ed6446946fb155ec7af22fb3cb0cc68715d9673c1de69d3a8eeb78addcbf0450be89ebd6ba5ed7cbfd49001a8d60a42917d5a7db6eb43b6e
865540e94f83ef4ead532d6b78c57f758373cb15ff1a5e8252ffce06bed7f3218a1a5e8252bcbb81779c5ac57734bc04a5786f035f2bb53a4e4dc34b50404974
b8812eb95ed55f8e36874c18dd33c21baed3ab5532e72b14cc867c76892e262ce2dbe65a881eb0b8070001a48893c8e28b199ea011cc621f51328c89b54fa601
17dda01d8c94f769d328d968123d5ac9282633deb43f9e2158172bafffbcfef19fd72fad9327af4e9efc72f2f4e9c9939f53479ad51e8aa6aad5dbefbff8fbf9
a7d65f2fbf7bfbec2b333e51f1bffff4d96fbf7e6906c2225ad179f3f58b3f5ebd78f3cde77ffef0cc006fc568a8c20724c48975131f5b775808039351d199e3
61fc6e16830011d5a2154d131421d18bc17f97071afae6025164c0b5b11ec17b31888809787dfe4023dc0fe23927068f378250031e3046db2c3646e186e84b09
f3601e4dcd9dc773157707a12353df3e8ab4fc76e733504f6272e90758a3799ba288a3298e30b7c43b7688b16174f709d1e27a4046314bd8845bf789d546c418
9201196ab36965b44742c8cbc24410f2adc5e6e09ed566d434ea0e3ed291b02a1035901f60aa85f13a9a73149a5c0e5048d580ef231e9848f617f148c575130e
999e62caacee182789c9e6560ce355927e0304c49cf603ba087564ccc9a1c9e73e624c4576d8a11fa07066c2f64914a8d88f924398a2c8bacdb8097ec0f41522
9e210f28da9aee7b046be93e5d0dee8276aa94561344bc99c7865c5ec74c9bbffd059d202ca506a45d53ec9044a7ca77dac3c5093748e59b6f9f1b785f56c96e
c5c4b866f6d6847a1b6e5d9e7d168fc9e557e70e9a47b7312c88cd12f55e9cdf8bb3fdbf17e76debf9e22579a5c220d06233986eb7e5e63bdcbaf79e104afb7c
41f17e22b7df09d49e710f1a859d3c77e2fc2c360be0a758c9d081869bc648da5831e39f101ef4033483ad7bd9164ea649e67a9a583396c09151361b7d0b3c9d
87076c9c1e39cb6571bc4cc523417cd55e72f376382ef014edd556c7a8dcbd643b95c7dd250161fb2e2494ce7412550389dab25104491eae21680612726417c2
a261605117ee97a9da6001d4f2acc0e6c8822d55d3761d3001233833218ac7224f69aa97d995c9bcc84c6f0ba636034af05d239b01ab4c3704d7adc313a34ba7
da1932ad9150a69b4e424646d6b02440639ccd4ed17a161aef9aebc62aa51a3d118a2c160a8d5afdbf589c37d760b7ae0d3452958246d671d3f6aa2e4c99119a
35ed091cdde1673883b993884d2da253f8fe35e271bae0cfa32cb338e11d940469c0a5e8a46a10128e638b92b0698be1e769a091d410c9ad5c0141b8b4e41a20
2b978d1c245d4f329e4cf088ab69575a44a4d34750f8542b8c6fa5f9f9c1c292cd21ddfd607c6c0de93cbe83608ab9b5b208e09824f07da79c46734ce093642e
64abf9b7569832d955bf09ca3994b6233a0b50565154314fe152ca733af2298f81f2948d1902aa84242b84c3a928b06a50b56a9a578d94c3d6aa7bba91889c22
9aab9aa9a98aa89a6615d37a589681b5589eafc82bac96218672a956f854bad725b7b1d4bab57d425e2520e079fc0c55f70c0541a1b6ea4ca326186fcab0d0ec
ac55af1dcb019e42ed2c4542517d6fe9762d6e798d3076078de7aafc60b73e6ba169b2dc57ca48cbbb0bf57a810d1f807874e043ee9cf244a6122e0f62041ba2
bedc93a4b2014be421cf9606fcb2e63169da8f4a6ecbf12bae5f28d5dd6ec1a93aa542dd6d550b2dd7ad96bb6eb9d469571e4361e1415876d37b931e7c6ca28b
f4f6a469dbd9358a046c5ca584cb0f6b57462c2c327955529423905729e5caf6ab148b80fa3cf22abd46b5d1f60a8d6aab57703aed7aa1e17bed42c7f36b9d5e
c777eb8dde63db3a9260a755f51daf5b2f7865df2f385e498ca3de28d49c4aa5e5d45af5aed37a9ced672004a98e644181384b5ebbff020000ffff0300504b03
04140006000800000021000dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e7265
6c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae99571
9ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f1
9b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d001400
0600080000002100828abc13fa0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014
000600080000002100a5d6a7e7c0000000360100000b000000000000000000000000002b0100005f72656c732f2e72656c73504b01022d001400060008000000
21006b799616830000008a0000001c00000000000000000000000000140200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b0102
2d00140006000800000021008aa90d21b8060000581a00001600000000000000000000000000d10200007468656d652f7468656d652f7468656d65312e786d6c
504b01022d00140006000800000021000dd1909fb60000001b0100002700000000000000000000000000bd0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000b80a00000000}
{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d
617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169
6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363
656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}
{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority0 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;
\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;
\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7;
\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font;
\lsdpriority0 \lsdlocked0 Body Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdpriority0 \lsdlocked0 Body Text 2;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdpriority39 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;
\lsdunhideused0 \lsdlocked0 Revision;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;
\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 0105000002000000180000004d73786d6c322e534158584d4c5265616465722e352e30000000000000000000000e0000
d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff0900060000000000000000000000010000000100000000000000001000000200000001000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffdffffff04000000feffffff05000000fefffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffff01000000ec69d9888b8b3d4c859eaf6cd158be0f0000000000000000000000007002
3351d186d2010300000080020000000000004d0073006f004400610074006100530074006f0072006500000000000000000000000000000000000000000000000000000000000000000000000000000000001a000101ffffffffffffffff02000000000000000000000000000000000000000000000070023351d186d201
70023351d186d2010000000000000000000000004500c2004c00d1005400c100c200c800d600d4004b00520031003200d6004d00c60042004600cc00d20041003d003d000000000000000000000000000000000032000101ffffffffffffffff03000000000000000000000000000000000000000000000070023351d186
d20170023351d186d2010000000000000000000000004900740065006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffff04000000ffffffff000000000000000000000000000000000000000000000000
00000000000000000000000000000000cd00000000000000010000000200000003000000feffffff0500000006000000070000000800000009000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c623a536f757263657320786d6c6e733a623d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f6772617068792220786d6c6e733d
22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f677261706879222053656c65637465645374796c653d225c4150412e58534c22205374796c654e616d653d22415041222f3e000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a6461746173746f72654974656d2064733a6974656d49443d227b34454631
323231322d413831382d343244422d393136442d4344384339383131364343387d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573746f6d586d6c223e3c64733a736368656d61526566733e3c
64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6f70656e500072006f007000650072007400690065007300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff000000000000
0000000000000000000000000000000000000000000000000000000000000400000055010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f677261706879222f3e3c2f64733a736368656d61526566733e3c2f64733a6461746173746f
72654974656d3e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105000000000000}}
{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi31507\deflang1031\deflangfe1031\themelang1031\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}
{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f4\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Helvetica;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}
{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}
{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}
{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f39\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f40\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\f42\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f43\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f44\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f45\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\f46\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f47\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f59\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f60\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}
{\f62\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f63\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f64\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f65\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}
{\f66\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f67\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f79\fbidi \fswiss\fcharset238\fprq2 Helvetica CE;}{\f80\fbidi \fswiss\fcharset204\fprq2 Helvetica Cyr;}
{\f82\fbidi \fswiss\fcharset161\fprq2 Helvetica Greek;}{\f83\fbidi \fswiss\fcharset162\fprq2 Helvetica Tur;}{\f84\fbidi \fswiss\fcharset177\fprq2 Helvetica (Hebrew);}{\f85\fbidi \fswiss\fcharset178\fprq2 Helvetica (Arabic);}
{\f86\fbidi \fswiss\fcharset186\fprq2 Helvetica Baltic;}{\f87\fbidi \fswiss\fcharset163\fprq2 Helvetica (Vietnamese);}{\f379\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f380\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}
{\f382\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f383\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f386\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f387\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}
{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}
{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}
{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}
{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}
{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}
{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;
\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp \fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025
\ltrch\fcs0 \fs22\lang1031\langfe1031\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1031\langfe1031\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031
\snext11 \ssemihidden \sunhideused \sqformat Normal Table;}}{\*\listtable{\list\listtemplateid-193139844\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617
\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619
\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617
\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619
\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid27729033}{\list\listtemplateid300595816\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0
{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617
\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619
\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid253251691}{\list\listtemplateid-1917002558\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0
{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617
\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619
\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid731805719}{\list\listtemplateid-331980480\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0
{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617
\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619
\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid846598160}{\list\listtemplateid2109785220\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0
{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617
\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619
\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid1207254615}{\list\listtemplateid2097152234\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0
{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617
\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619
\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid1638951864}}{\*\listoverridetable{\listoverride\listid846598160\listoverridecount0\ls1}{\listoverride\listid253251691\listoverridecount0\ls2}
{\listoverride\listid731805719\listoverridecount0\ls3}{\listoverride\listid1638951864\listoverridecount0\ls4}{\listoverride\listid1207254615\listoverridecount0\ls5}{\listoverride\listid27729033\listoverridecount0\ls6}}{\*\rsidtbl \rsid3083065\rsid5338747}
{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author Thomson, Clive}{\operator Malte Langkabel}{\creatim\yr2017\mo6\dy20\hr14}{\revtim\yr2017\mo6\dy20\hr14\min8}
{\version3}{\edmins0}{\nofpages4}{\nofwords1481}{\nofchars8026}{\*\company CSR}{\nofcharsws9489}{\vern32859}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}
\paperw12240\paperh15840\margl1440\margr1440\margt1417\margb1134\gutter0\ltrsect
\widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves1\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120
\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\rsidroot3083065 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}
{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}
{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9
\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065 \hich\af4\dbch\af31505\loch\f4 Sourcetrail
\par \hich\af4\dbch\af31505\loch\f4 \hich\f4 Software License Agreement (\'93\loch\f4 \hich\f4 AGREEMENT\'94\loch\f4 )
\par \hich\af4\dbch\af31505\loch\f4 Last date of change: 2017-06-19
\par
\par \hich\af4\dbch\af31505\loch\f4 BY INSTALLING OR USING THIS SOFTWARE, YOU ARE BECOMING A PARTY TO, AND ARE CO\hich\af4\dbch\af31505\loch\f4
NSENTING TO BE BOUND BY, THIS AGREEMENT. IF YOU DO NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, DO NOT INSTALL OR USE THIS SOFTWARE.
\par
\par
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \b\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 DEFINITIONS
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065
\par \hich\af4\dbch\af31505\loch\f4 "SOFTWARE" means:}{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\insrsid5338747
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid3083065 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar
\ql \fi-360\li720\ri0\nowidctlpar\wrapdefault\faauto\ls1\rin0\lin720\itap0\pararsid5338747 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065 \hich\af4\dbch\af31505\loch\f4
A version of the cross-platform source code explorer known as Sourcetrail in executa\hich\af4\dbch\af31505\loch\f4
ble form. The version is defined by the two leading numbers of the version string (e.g. the version of Sourcetrail 2017.1.x is version 2017.1);}{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid5338747 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 documentation for that version of Sourcetrail;}{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid5338747 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 minor updates included in software maintenance which are indi\hich\af4\dbch\af31505\loch\f4
cated by an increase in the digits that follow the first two leading numbers of the version string (e.g. the update from Sourcetrail 2017.1.0 to Sourcetrail 2017.1.1 is a minor update).
\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065 \hich\af4\dbch\af31505\loch\f4 "LICENSE" means:
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid3083065 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar
\ql \fi-360\li720\ri0\nowidctlpar\wrapdefault\faauto\ls2\rin0\lin720\itap0\pararsid5338747 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065 \hich\af4\dbch\af31505\loch\f4
the permission to use, reproduction and distributio\hich\af4\dbch\af31505\loch\f4 n of the SOFTWARE as defined by the following sections of this document.
\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065 \hich\af4\dbch\af31505\loch\f4 "LICENSOR" means:
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid3083065 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar
\ql \fi-360\li720\ri0\nowidctlpar\wrapdefault\faauto\ls2\rin0\lin720\itap0\pararsid5338747 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065 \hich\af4\dbch\af31505\loch\f4 \hich\f4
Coati Software OG, having a place of business at Jakob-Haringer-Stra\'df\loch\f4 e 1/127, 5020 Salzburg, Austria.
\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065 \hich\af4\dbch\af31505\loch\f4 "LICENSEE" means:
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid3083065 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar
\ql \fi-360\li720\ri0\nowidctlpar\wrapdefault\faauto\ls2\rin0\lin720\itap0\pararsid5338747 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065 \hich\af4\dbch\af31505\loch\f4
the individual who purchased a LICENSE(s)\hich\af4\dbch\af31505\loch\f4 for the SOFTWARE; }{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid5338747 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 the individual who was granted a LICENSE(s) for the SOFTWARE by the LICENSOR;}{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid5338747 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 the individual evaluating the SOFTWARE in trial mode; }{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid5338747 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 the company, corporation, or organization that purchased a LICENSE(s) for the SOFTWARE;}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid5338747 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 the com\hich\af4\dbch\af31505\loch\f4 pany, corporation, or organization that was granted a LICENSE(s) for the SOFTWARE by the LICENSOR.
\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065 \hich\af4\dbch\af31505\loch\f4 "PARTIES" means:
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid3083065 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar
\ql \fi-360\li720\ri0\nowidctlpar\wrapdefault\faauto\ls3\rin0\lin720\itap0\pararsid5338747 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065 \hich\af4\dbch\af31505\loch\f4
both LICENSOR and LICENSEE collectively.
\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065 \hich\af4\dbch\af31505\loch\f4 "ACTIVATION KEY" means:
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid3083065 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar
\ql \fi-360\li720\ri0\nowidctlpar\wrapdefault\faauto\ls3\rin0\lin720\itap0\pararsid5338747 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065 \hich\af4\dbch\af31505\loch\f4
a document that defines the parameters of the LICENSE. It specifies th\hich\af4\dbch\af31505\loch\f4
e name of the licensed SOFTWARE, the name of the LICENSEE, the license type, an upper limit for the licensed SOFTWARE version or an expiration date, and a hash-code; the combination of these values allows the LICENSEE to unlock the full functionality of a
\hich\af4\dbch\af31505\loch\f4 \hich\af4\dbch\af31505\loch\f4 genuine copy of the SOFTWARE.
\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065 \hich\af4\dbch\af31505\loch\f4 "AUTHORIZED USER" means:
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid3083065 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar
\ql \fi-360\li720\ri0\nowidctlpar\wrapdefault\faauto\ls3\rin0\lin720\itap0\pararsid5338747 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065 \hich\af4\dbch\af31505\loch\f4
the individual who purchased a LICENSE(s) for the SOFTWARE; the individual is the only AUTHORIZED USER;
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid3083065 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af4\dbch\af31505\loch\f4
the individual who was granted a LICENSE(s) for the SOFTWARE by the LICENSOR; the individual is the only AUTHORIZED USER;
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid3083065 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af4\dbch\af31505\loch\f4 the individual evaluating the SOFTWARE in trial mode;
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid3083065 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af4\dbch\af31505\loch\f4
an employee or independent contractor who might at any time use the SOFTWA\hich\af4\dbch\af31505\loch\f4
RE, of the LICENSEE; for each ACTIVATION KEY an entity has as many AUTHORIZED USER(s) as defined by the amount of seats specified in the ACTIVATION KEY; if no amount of seats is specified in the ACTIVATION KEY the entity has one AUTHORIZED USER for this A
\hich\af4\dbch\af31505\loch\f4 C\hich\af4\dbch\af31505\loch\f4 TIVATION KEY.
\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065
\par
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \b\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 GRANT
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065
\par \hich\af4\dbch\af31505\loch\f4 Subject to the terms of this AGREEMENT, the LICENSOR hereby grants the LICENSEE a worldwide, non-transferable, non-exclusive, non-sub-licensable, limited LICENSE that allows:
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid3083065 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar
\ql \fi-360\li720\ri0\nowidctlpar\wrapdefault\faauto\ls4\rin0\lin720\itap0\pararsid5338747 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065 \hich\af4\dbch\af31505\loch\f4
the LICENSEE to distribute (an) ACTIVATION KEY(s) to AUT\hich\af4\dbch\af31505\loch\f4 HORIZED USER(s);}{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid5338747 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4
the LICENSEE and AUTHORIZED USER(s) to install the SOFTWARE on computer PCs where potential use of the SOFTWARE is restricted exclusively to AUTHORIZED USER(s);}{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid5338747 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 the LICENSEE and AUTHORIZED USER(s) to use an ACTIVATION KEY to unlock the\hich\af4\dbch\af31505\loch\f4 SOFTWARE;}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid5338747 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 AUTHORIZED USER(s) to use any version of the SOFTWARE in trial mode;}{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid5338747 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4
AUTHORIZED USER(s) to use any version of the unlocked SOFTWARE that specifies a version number less than or equal to the version number denoted in the ACTIVATION KEY; if th\hich\af4\dbch\af31505\loch\f4
e ACTIVATION KEY does not denote a version number the AUTHORIZED USER is allowed to use any version of the SOFTWARE for a period of time that is limited by the expiration date specified in the ACTIVATION KEY;}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid5338747 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 LICENSEE to make a copy of the SOFTWARE for a\hich\af4\dbch\af31505\loch\f4
rchival purposes provided the copy contains all of the proprietary notices of the SOFTWARE.
\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065
\par
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \b\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 RESTRICTIONS AND CONFIDENTIALITY
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065
\par \hich\af4\dbch\af31505\loch\f4 The LICENSEE will not, and will have no right to:}{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid3083065 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar
\ql \fi-360\li720\ri0\nowidctlpar\wrapdefault\faauto\ls5\rin0\lin720\itap0\pararsid5338747 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065 \hich\af4\dbch\af31505\loch\f4
modify, translate, reverse engineer, decompile, disassemble (except to the e\hich\af4\dbch\af31505\loch\f4
xtent applicable laws specifically prohibit such restriction), create derivative works based on, or otherwise attempt to discover the source code or underlying ideas or algorithms of the SOFTWARE;}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid5338747 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 sell, rent, lease, distribute, or otherwise transfer righ\hich\af4\dbch\af31505\loch\f4 ts to the SOFTWARE without prior written consent from LICENSOR;}{
\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid5338747 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 remove any proprietary notices or labels from the SOFTWARE;}{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid5338747 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 distribute, use, or transfer an ACTIVATION KEY(s) that has been superseded by an ACTIVATION KEY(s) provided with software mainte
\hich\af4\dbch\af31505\loch\f4 nance.
\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065 \hich\af4\dbch\af31505\loch\f4
AUTHORIZED USER(s) will not, and will have no right to:
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid3083065 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar
\ql \fi-360\li720\ri0\nowidctlpar\wrapdefault\faauto\ls6\rin0\lin720\itap0\pararsid5338747 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065 \hich\af4\dbch\af31505\loch\f4
use an unlocked version of the SOFTWARE that exceeds the version string specified in the ACTIVATION KEY; }{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid5338747 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 use the trial mode of the SOFTWARE for any commercial purposes; }{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\charrsid5338747 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af4 \ltrch\fcs0
\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 use a Private/Ac\hich\af4\dbch\af31505\loch\f4 ademic License of the software for any commercial purposes.
\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065 \hich\af4\dbch\af31505\loch\f4
Unless a valid non-disclosure agreement exists between the Parties, in which case the terms of that non-disclosure agreement shall apply, the following terms shall: Except as necessary for its per\hich\af4\dbch\af31505\loch\f4
formance under the AGREEMENT or required by law, the LICENSOR shall not disclose to anyone any information furnished by the LICENSEE that is marked as confidential or proprietary.
\par
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \b\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 TITLE AND COPYRIGHT
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065
\par \hich\af4\dbch\af31505\loch\f4
Title, ownership rights, intellectual property rights, and copyright to the SOFTWARE, and any copies or portions thereof, shall remain in LICENSOR. The SOFTWARE is protected by European copyright directives, Austrian copyright laws as well as United State
\hich\af4\dbch\af31505\loch\f4 s\hich\af4\dbch\af31505\loch\f4 copyright laws and international treaty provisions.
\par
\par
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \b\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 DISCLAIMER OF WARRANTY
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065
\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND. LICENSOR HEREBY DISCLAIMS ALL EXPRESS OR IMPLIED WARRANTIES, INCLUDING WITHOUT LIMITATION WARRANTIES OF MERCHANTABI\hich\af4\dbch\af31505\loch\f4
LITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS AGREEMENT. SOME U.S. STATES DO NOT ALLOW EXCLUSIONS OF AN IMPLIED WARRANTY, SO THIS DISCLAIMER MAY NOT APPLY TO LICENSEE. LICEN
\hich\af4\dbch\af31505\loch\f4 S\hich\af4\dbch\af31505\loch\f4 EE MAY HAVE OTHER LEGAL RIGHTS THAT VARY FROM STATE TO STATE OR BY JURISDICTION.
\par
\par
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \b\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 LIMITATION OF LIABILITY
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065
\par \hich\af4\dbch\af31505\loch\f4 LICENSEE ASSUMES THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE. LICENSOR ASSUMES NO LIABILITY FOR THE COST OF ANY SERVICE OR REP\hich\af4\dbch\af31505\loch\f4
AIR IF THE SOFTWARE IS DEFECTIVE. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT, STRICT LIABILITY, OR OTHERWISE, SHALL LICENSOR, OR ITS LICENSORS, SUPPLIERS OR RESELLERS, BE LIABLE TO LICENSEE OR ANY OTHER PERSON FOR ANY INDIRECT, SPECI
\hich\af4\dbch\af31505\loch\f4 A\hich\af4\dbch\af31505\loch\f4
L, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES. IN NO EVENT WILL LICENSO
\hich\af4\dbch\af31505\loch\f4 R\hich\af4\dbch\af31505\loch\f4
BE LIABLE FOR ANY DAMAGES IN EXCESS OF THE MONEY PAID FOR THE SOFTWARE, EVEN IF LICENSOR SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH
\hich\af4\dbch\af31505\loch\f4 \hich\af4\dbch\af31505\loch\f4
OR PERSONAL INJURY TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. FURTHERMORE, SOME U.S. STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION AND EXCLUSION MAY NOT APPLY TO LICENSEE.
\par
\par
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \b\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 TERMINAT\hich\af4\dbch\af31505\loch\f4 ION
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065
\par \hich\af4\dbch\af31505\loch\f4
The license granted herein shall be perpetual. If LICENSEE fails to comply with any of the terms of this AGREEMENT, this AGREEMENT and the rights granted herein will terminate immediately. LICENSOR may, at its sole discretion and at any time, terminat
\hich\af4\dbch\af31505\loch\f4 e this AGREEMENT. On termination, LICENSEE must cease using and destroy all copies of the SOFTWARE.
\par
\par
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \b\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 EXPORT CONTROLS
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065
\par \hich\af4\dbch\af31505\loch\f4 LICENSEE shall comply with all export laws, restrictions and regulations of the United States, the Directive 2009/428/EC of the European \hich\af4\dbch\af31505\loch\f4 \hich\f4
Parliament and of the Council and the Austrian Au\'df\loch\f4
enwirtschaftsgesetz 2011, BGBl I No. 26/2011. LICENSEE shall not export, re-export or otherwise transfer the SOFTWARE to any country for which the United States or the European Union or Austria maintains a\hich\af4\dbch\af31505\loch\f4 n
\hich\af4\dbch\af31505\loch\f4
embargo, or to any person or entity on the U.S. Department of Treasury List of Specially Designated Nationals or the U.S. Department of Commerce Denied Persons List or Entity List. LICENSEE represents and warrants that licensee is not located in, under t
\hich\af4\dbch\af31505\loch\f4 h\hich\af4\dbch\af31505\loch\f4 e control of, or a national or resident of any restricted country or on any such list.
\par
\par
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \b\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 THIRD PARTY CREDITS
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065
\par \hich\af4\dbch\af31505\loch\f4 \hich\f4
Portions of the SOFTWARE utilize or include third party software and other copyrighted materials. Credits, licensing terms, and disclaimers for such materials are contained in the installation directory for the SOFTWARE, and are accessible via the \'93
\loch\f4 3rd Pa\hich\af4\dbch\af31505\loch\f4 r\hich\af4\dbch\af31505\loch\f4 \hich\f4 ty Licenses\'94\loch\f4 dialog for the SOFTWARE. LICENSEE agrees that use of such copyrighted materials is governed by their respective terms.
\par
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \b\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 ENTIRE AGREEMENT
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065
\par \hich\af4\dbch\af31505\loch\f4 This AGREEMENT represents the complete agreement concerning this SOFTWARE between the PARTIES and supers\hich\af4\dbch\af31505\loch\f4
edes all prior agreements and representations between them. It may be amended only in writing executed by both PARTIES. Coati Software OG reserves the exclusive right to periodically update this AGREEMENT at its discretion at any time, with reasonable not
\hich\af4\dbch\af31505\loch\f4 i\hich\af4\dbch\af31505\loch\f4
ce to LICENSEE by posting the new AGREEMENT at the following URL: <https://www.sourcetrail.com/terms-of-use>. Any action arising out of or relating to this AGREEMENT may be brought exclusively in Salzburg, Austria, and the PARTIES irrevocably consent to t
\hich\af4\dbch\af31505\loch\f4 h\hich\af4\dbch\af31505\loch\f4 e jurisdiction of such courts and venue in Salzburg, Austria.
\par
\par
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \b\f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid5338747 \hich\af4\dbch\af31505\loch\f4 CONTACT
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\lang1033\langfe1031\langnp1033\insrsid5338747\charrsid3083065
\par \hich\af4\dbch\af31505\loch\f4 If you have questions regarding this agreement, contact:
\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\insrsid5338747 \hich\af4\dbch\af31505\loch\f4 Coati Software OG
\par \hich\af4\dbch\af31505\loch\f4 \hich\f4 Jakob-Haringer-Stra\'df\loch\f4 e 1/127
\par \hich\af4\dbch\af31505\loch\f4 5020 Salzburg
\par \hich\af4\dbch\af31505\loch\f4 Austria
\par
\par \hich\af4\dbch\af31505\loch\f4 support@sourcetrail.com
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4 \ltrch\fcs0 \f4\insrsid5338747
\par }{\*\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8
72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7
2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b
44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7
065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000
00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08
84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc
52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353
bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468
656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c
070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7
29e245eb2b260a0238fd010000ffff0300504b030414000600080000002100e35a492797060000551b0000160000007468656d652f7468656d652f7468656d65
312e786d6cec594d6f1b4518be23f11f467b6f6327761a4775aad8b11b6852a2d82dea71bc3bde9d66766735334eea1b6a8f484888823850891b0704546a252e
e5d7048aa048fd0bbc33b3bbde89d72469235a417d48bcb3cfbcdf5f33be7aed5eccd0211192f2a4edd52fd73c44129f073409dbdead61ffd29a87a4c2498019
4f48db9b12e95ddb78ffbdab785d45242608f627721db7bd48a9747d6949fab08ce5659e9204de8db988b18247112e05021f01dd982d2dd76aab4b31a6898712
1c03d91d2ca894f8d21691344cbc8d9c7c8f018f4449bde03331d0c489bbc7808383ba86c8a9ec32810e316b7bc02ae04743724f798861a9e045dbab998fb7b4
717509af679b985ab0b7b4af6f3ed9be6c4370b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83aa569632cd467faddec9699640f6
eb3ced6ead596bb8f812fd9539995b9d4ea7d9ca64b1440dc87e6dcce1d76aab8dcd65076f4016df9cc3373a9bddeeaa8337208b5f9dc3f7afb4561b2ede8022
46938339b47668bf9f512f2063ceb62be16b005fab65f0190aa2a1082fcd62cc13b530d8627c978b3e203492614513a4a62919631f22b98be391a05873c0eb04
97ded8255fce2d696648fa82a6aaed7d9862c88a19bd97cf7e78f9ec093abefff4f8fecfc70f1e1cdfffc91272766de3242cef7af1dde77f3dfa04fdf9e4db17
0fbfacc6cb32feb71f3ffdf5972faa81903f33719e7ff5f8f7a78f9f7ffdd91fdf3fac806f0a3c2ac387342612dd2447689fc7a098b18a2b391989f3ed184698
96776c26a1c409d65c2ae8f754e4a06f4e31cbbce3c8d121ae056f0ba81f55c0eb93bb8ec083484c14ade07c238a1de02ee7acc345a5156e685e25330f274958
cd5c4ccab87d8c0fab787771e2f8b73749a172e661e928de8d8823e61ec389c221498842fa1d3f20a442bb3b943a76dda5bee0928f15ba435107d34a930ce9c8
89a6d9a66d1a835fa6553a83bf1ddbecde461dceaab4de22872e12b202b30ae187843966bc8e270ac755248738666583ef6015550939980abf8ceb49059e0e09
e3a81710686d15527c2440df92d36f602859956edf65d3d8450a450faa68ee60cecbc82d7ed08d709c5661073489cad80fe4018428467b5c55c177b99b21fa19
fc809385eebe4d89e3eed3abc12d1a3a22cd0244bf99086d45a8d54e058e69f24fe59851a8c7d6fa17578ea1003effe651854fdfd642bc093da92a13b64f94df
45b89345b7cb4540dffe9abb8527c91e81309f6f3cef4aeebb92ebfde74beea27c3e6ba19dd55628bb7a6eb053b19991e3c523f298323650534676a499922534
8aa00f8b7aa3392292e2cc9446f0352bec0e2e14d8ec4182ab8fa98a06114e61c2ae7b9a482833d2a144299770b433cb95b4351ea674650f864d7d64b0054162
b5cb03bbbca297f3934141c6b49bd09c3f73462b9ac05999ad5cc98882daafc2acae853a33b7ba11cdd43a875ba13238715e35582cac09130882b905acbc0a87
74cd1a4e26989140dbdd36dfdc2dc60b17e92219e180643ed27acffba86e9c94c78ab90c80d8a9f0913ee69d62b512b79626fb1adccee2a432bbc60276b9f75e
c74b7904cfbca413f7443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc3a116bec629785deaa10fb3106e877c256cd89f9acc26cb67de6ce58ab94950878b0a
6bf739859d3a900aa9b6b08c6c6898575908b04473b2f22f37c1ac17a5808df4579062650d82e18d490176745d4bc663e2abb2b34b2bda76f6312ba57ca28818
44c1111ab189d8c7e07e1daaa04f4025dc4d988aa01fe0264d5bdbbc728b739674e5fb2b83b3eb98a511cecaad4ed13c932ddce4712183792a8907ba55ca6e94
3bbf2a26e52f48957218ffcf54d1fd04ae0a5602ed011fee7205463a5fdb1e172ae25085d288fa7d019383a91d102d701b0baf21a8e046d9fc17e450ffb73967
6998b486139fdaa7211214fa918a04217b50964cf49d42ac9ef52e4b9265844c4495c495a9157b440e091bea1ab8aa7bbb87220875534db232607027e3cf7dce
326814ea21a79c6f4e0d297aafcd817f7bf2b1c90c4ab975d80c34b9fd0b112bbaaadd6fb6e7bdb7ac887e311bb31a795600b3522b686569ff8a229cb3d5da8a
35a7f17233170ebc38af312c1603510a173e48ff81fe4785cf880963dd50877c1f6a2b829f1a3431081b88ea4b76f040ba40dac5110c4e76d1069326654d9b8d
4eda6a79b3bee049b7e07bc2d85ab2b3f8fb9cc62e8633979d938b1769ecccc28eadedda425383674fa6282c8df3938c718cf95dabfcc3131fdd05476fc105ff
84296982097e55121846cf81c903487ecbd16cddf81b0000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f
7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f
2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e31
98720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d98505
28a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100828abc13fa0000001c02000013000000000000000000000000
00000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b0000000000000000000000
00002b0100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c000000000000000000000000001402000074
68656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d0014000600080000002100e35a492797060000551b0000160000000000000000
0000000000d10200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b0100002700000000
0000000000000000009c0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000970a00000000}
{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d
617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169
6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363
656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}
{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;
\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;
\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7;
\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000
4d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000
d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f000000000000000000000000d095
c2fbbde9d201feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000105000000000000}}
+102 -97
View File
@@ -1,97 +1,102 @@
Sourcetrail
Software License Agreement (“Agreement”)
Effective 15.2.2017
BY INSTALLING OR USING THIS SOFTWARE, YOU ARE BECOMING A PARTY TO, AND ARE CONSENTING TO BE BOUND BY, THIS AGREEMENT. IF YOU DO NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, DO NOT INSTALL OR USE THIS SOFTWARE.
DEFINITIONS
"Software" means:
• A major version of Sourcetrail in executable form. The major version is defined by the leading number of the version string (e.g. the major version of Sourcetrail 1.x.x is version 1);
• documentation for that major version of Sourcetrail;
• minor updates included in software maintenance which are indicated by an increase in the numbers that follow the major version number (e.g. the update from Sourcetrail 1.0.0 to Sourcetrail 1.1.0).
"Licensor" means:
Coati Software OG, having a place of business at Jakob-Haringer-Straße 1/127, 5020 Salzburg, Austria.
"Licensee" means:
the individual who purchased a License(s) for the Software;
• the individual who was granted a Test License(s) for the Software;
• the individual evaluating the Software in trial mode;
• the company, corporation, or organization that purchased a License(s) for the Software;
• the company, corporation, or organization that was granted a Test License(s) for the Software.
"Activation Key" means:
• the name of the Licensee, the kind of license, the major version of the Software that is licensed, and a hash-code; the combination of these values allows the Licensee to activate the full functionality of a genuine copy of the Software.
"Authorized User" means:
the individual who purchased a License(s) for the Software; the individual is the only Authorized User;
• the individual who was granted a Test License(s) for the Software; the individual is the only Authorized User;
the individual evaluating the Software in trial mode;
• an employee or independent contractor who might at any time use the Software, of the company, corporation, or organization that purchased a License(s) for the Software; an entity has one Authorized User for each License purchased;
an employee or independent contractor who might at any time use the Software, of the company, corporation, or organization was granted a Test License(s) for the Software; an entity has one Authorized User for each License purchased.
GRANT
Subject to the terms of this Agreement, the Licensor hereby grants the Licensee a non-transferable, non-exclusive, non-sub-licensable, limited license that allows:
• the Licensee to distribute (an) Activation Key(s) to Authorized User(s);
• Authorized User(s) to install the licensed version of the Software on computer PCs where potential use of the Software is restricted exclusively to Authorized User(s);
• Authorized User(s) to use the Software on computer PCs and in virtual machines.
Licensee to make a copy of the Software for archival purposes provided the copy contains all of the proprietary notices of the Software.
In case the Licensee of the software is a company, corporation, or organization the Licensor has the right to mention this usage of the Software on its own website.
RESTRICTIONS
Licensee will not, and will have no right to:
• distribute, use, or transfer an Activation Key(s) that has been superseded by an Activation Key(s) provided with software maintenance;
• modify, translate, reverse engineer, decompile, disassemble (except to the extent applicable laws specifically prohibit such restriction), create derivative works based on, or otherwise attempt to discover the source code or underlying ideas or algorithms of the Software;
• sell, rent, lease, distribute, or otherwise transfer rights to the Software without prior written consent from Licensor;
• remove any proprietary notices or labels from the Software.
Authorized User(s) will not, and will have no right to:
use the trial mode of the Software for any commercial purposes;
use a Private/Academic License of the software for any commercial purposes.
TITLE AND COPYRIGHT
Title, ownership rights, intellectual property rights, and copyright to the Software, and any copies or portions thereof, shall remain in Licensor. The Software is protected by European copyright directives, Austrian copyright laws as well as United States copyright laws and international treaty provisions.
DISCLAIMER OF WARRANTY
THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND. LICENSOR HEREBY DISCLAIMS ALL EXPRESS OR IMPLIED WARRANTIES, INCLUDING WITHOUT LIMITATION WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS AGREEMENT. SOME U.S. STATES DO NOT ALLOW EXCLUSIONS OF AN IMPLIED WARRANTY, SO THIS DISCLAIMER MAY NOT APPLY TO LICENSEE. LICENSEE MAY HAVE OTHER LEGAL RIGHTS THAT VARY FROM STATE TO STATE OR BY JURISDICTION.
LIMITATION OF LIABILITY
LICENSEE ASSUMES THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE. LICENSOR ASSUMES NO LIABILITY FOR THE COST OF ANY SERVICE OR REPAIR IF THE SOFTWARE IS DEFECTIVE. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT, STRICT LIABILITY, OR OTHERWISE, SHALL LICENSOR, OR ITS LICENSORS, SUPPLIERS OR RESELLERS, BE LIABLE TO LICENSEE OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES. IN NO EVENT WILL LICENSOR BE LIABLE FOR ANY DAMAGES IN EXCESS OF THE MONEY PAID FOR THE SOFTWARE, EVEN IF LICENSOR SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. FURTHERMORE, SOME U.S. STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION AND EXCLUSION MAY NOT APPLY TO LICENSEE.
TERMINATION
The license granted herein shall be perpetual. If Licensee fails to comply with any of the terms of this Agreement, this Agreement and the rights granted herein will terminate immediately. Licensor may, at its sole discretion and at any time, terminate this Agreement. On termination, Licensee must cease using and destroy all copies of the Software.
EXPORT CONTROLS
Licensee shall comply with all export laws, restrictions and regulations of the United States, the Directive 2009/428/EC of the European Parliament and of the Council and the Austrian Außenwirtschaftsgesetz 2011, BGBl I No. 26/2011. Licensee shall not export, re-export or otherwise transfer the Software to any country for which the United States or the European Union or Austria maintains an embargo, or to any person or entity on the U.S. Department of Treasury List of Specially Designated Nationals or the U.S. Department of Commerce Denied Persons List or Entity List. Licensee represents and warrants that licensee is not located in, under the control of, or a national or resident of any restricted country or on any such list.
THIRD PARTY CREDITS
Portions of the Software utilize or include third party software and other copyrighted materials. Credits, licensing terms, and disclaimers for such materials are contained in the installation directory for the Software, and are accessible via the “3rd Party Licenses” dialog for the Software. Licensee agrees that use of such copyrighted materials is governed by their respective terms.
ENTIRE AGREEMENT
This Agreement represents the complete agreement concerning this Software between the parties and supersedes all prior agreements and representations between them. It may be amended only in writing executed by both parties. Coati Software OG reserves the exclusive right to periodically update this Agreement at its discretion at any time, with reasonable notice to you by posting the new Agreement at the following URL: <http://www.sourcetrail.com/>. Any action arising out of or relating to this Agreement may be brought exclusively in Salzburg, Austria, and Coati Software OG and you irrevocably consent to the jurisdiction of such courts and venue in Salzburg, Austria.
CONTACT
If you have questions regarding this agreement, contact:
Coati Software OG
Jakob-Haringer-Straße 1/127
5020 Salzburg
Austria
support@sourcetrail.com
Sourcetrail
Software License Agreement (“AGREEMENT”)
Last date of change: 2017-06-19
BY INSTALLING OR USING THIS SOFTWARE, YOU ARE BECOMING A PARTY TO, AND ARE CONSENTING TO BE BOUND BY, THIS AGREEMENT. IF YOU DO NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, DO NOT INSTALL OR USE THIS SOFTWARE.
DEFINITIONS
"SOFTWARE" means:
• A version of the cross-platform source code explorer known as Sourcetrail in executable form. The version is defined by the two leading numbers of the version string (e.g. the version of Sourcetrail 2017.1.x is version 2017.1);
• documentation for that version of Sourcetrail;
• minor updates included in software maintenance which are indicated by an increase in the digits that follow the first two leading numbers of the version string (e.g. the update from Sourcetrail 2017.1.0 to Sourcetrail 2017.1.1 is a minor update).
"LICENSE" means:
the permission to use, reproduction and distribution of the SOFTWARE as defined by the following sections of this document.
"LICENSOR" means:
Coati Software OG, having a place of business at Jakob-Haringer-Straße 1/127, 5020 Salzburg, Austria.
"LICENSEE" means:
• the individual who purchased a LICENSE(s) for the SOFTWARE;
• the individual who was granted a LICENSE(s) for the SOFTWARE by the LICENSOR;
• the individual evaluating the SOFTWARE in trial mode;
• the company, corporation, or organization that purchased a LICENSE(s) for the SOFTWARE;
• the company, corporation, or organization that was granted a LICENSE(s) for the SOFTWARE by the LICENSOR.
"PARTIES" means:
both LICENSOR and LICENSEE collectively.
"ACTIVATION KEY" means:
a document that defines the parameters of the LICENSE. It specifies the name of the licensed SOFTWARE, the name of the LICENSEE, the license type, an upper limit for the licensed SOFTWARE version or an expiration date, and a hash-code; the combination of these values allows the LICENSEE to unlock the full functionality of a genuine copy of the SOFTWARE.
"AUTHORIZED USER" means:
the individual who purchased a LICENSE(s) for the SOFTWARE; the individual is the only AUTHORIZED USER;
• the individual who was granted a LICENSE(s) for the SOFTWARE by the LICENSOR; the individual is the only AUTHORIZED USER;
• the individual evaluating the SOFTWARE in trial mode;
• an employee or independent contractor who might at any time use the SOFTWARE, of the LICENSEE; for each ACTIVATION KEY an entity has as many AUTHORIZED USER(s) as defined by the amount of seats specified in the ACTIVATION KEY; if no amount of seats is specified in the ACTIVATION KEY the entity has one AUTHORIZED USER for this ACTIVATION KEY.
GRANT
Subject to the terms of this AGREEMENT, the LICENSOR hereby grants the LICENSEE a worldwide, non-transferable, non-exclusive, non-sub-licensable, limited LICENSE that allows:
the LICENSEE to distribute (an) ACTIVATION KEY(s) to AUTHORIZED USER(s);
the LICENSEE and AUTHORIZED USER(s) to install the SOFTWARE on computer PCs where potential use of the SOFTWARE is restricted exclusively to AUTHORIZED USER(s);
• the LICENSEE and AUTHORIZED USER(s) to use an ACTIVATION KEY to unlock the SOFTWARE;
• AUTHORIZED USER(s) to use any version of the SOFTWARE in trial mode;
• AUTHORIZED USER(s) to use any version of the unlocked SOFTWARE that specifies a version number less than or equal to the version number denoted in the ACTIVATION KEY; if the ACTIVATION KEY does not denote a version number the AUTHORIZED USER is allowed to use any version of the SOFTWARE for a period of time that is limited by the expiration date specified in the ACTIVATION KEY;
• LICENSEE to make a copy of the SOFTWARE for archival purposes provided the copy contains all of the proprietary notices of the SOFTWARE.
RESTRICTIONS AND CONFIDENTIALITY
The LICENSEE will not, and will have no right to:
• modify, translate, reverse engineer, decompile, disassemble (except to the extent applicable laws specifically prohibit such restriction), create derivative works based on, or otherwise attempt to discover the source code or underlying ideas or algorithms of the SOFTWARE;
• sell, rent, lease, distribute, or otherwise transfer rights to the SOFTWARE without prior written consent from LICENSOR;
remove any proprietary notices or labels from the SOFTWARE;
• distribute, use, or transfer an ACTIVATION KEY(s) that has been superseded by an ACTIVATION KEY(s) provided with software maintenance.
AUTHORIZED USER(s) will not, and will have no right to:
• use an unlocked version of the SOFTWARE that exceeds the version string specified in the ACTIVATION KEY;
• use the trial mode of the SOFTWARE for any commercial purposes;
• use a Private/Academic License of the software for any commercial purposes.
Unless a valid non-disclosure agreement exists between the Parties, in which case the terms of that non-disclosure agreement shall apply, the following terms shall: Except as necessary for its performance under the AGREEMENT or required by law, the LICENSOR shall not disclose to anyone any information furnished by the LICENSEE that is marked as confidential or proprietary.
TITLE AND COPYRIGHT
Title, ownership rights, intellectual property rights, and copyright to the SOFTWARE, and any copies or portions thereof, shall remain in LICENSOR. The SOFTWARE is protected by European copyright directives, Austrian copyright laws as well as United States copyright laws and international treaty provisions.
DISCLAIMER OF WARRANTY
THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND. LICENSOR HEREBY DISCLAIMS ALL EXPRESS OR IMPLIED WARRANTIES, INCLUDING WITHOUT LIMITATION WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS AGREEMENT. SOME U.S. STATES DO NOT ALLOW EXCLUSIONS OF AN IMPLIED WARRANTY, SO THIS DISCLAIMER MAY NOT APPLY TO LICENSEE. LICENSEE MAY HAVE OTHER LEGAL RIGHTS THAT VARY FROM STATE TO STATE OR BY JURISDICTION.
LIMITATION OF LIABILITY
LICENSEE ASSUMES THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE. LICENSOR ASSUMES NO LIABILITY FOR THE COST OF ANY SERVICE OR REPAIR IF THE SOFTWARE IS DEFECTIVE. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT, STRICT LIABILITY, OR OTHERWISE, SHALL LICENSOR, OR ITS LICENSORS, SUPPLIERS OR RESELLERS, BE LIABLE TO LICENSEE OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES. IN NO EVENT WILL LICENSOR BE LIABLE FOR ANY DAMAGES IN EXCESS OF THE MONEY PAID FOR THE SOFTWARE, EVEN IF LICENSOR SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. FURTHERMORE, SOME U.S. STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION AND EXCLUSION MAY NOT APPLY TO LICENSEE.
TERMINATION
The license granted herein shall be perpetual. If LICENSEE fails to comply with any of the terms of this AGREEMENT, this AGREEMENT and the rights granted herein will terminate immediately. LICENSOR may, at its sole discretion and at any time, terminate this AGREEMENT. On termination, LICENSEE must cease using and destroy all copies of the SOFTWARE.
EXPORT CONTROLS
LICENSEE shall comply with all export laws, restrictions and regulations of the United States, the Directive 2009/428/EC of the European Parliament and of the Council and the Austrian Außenwirtschaftsgesetz 2011, BGBl I No. 26/2011. LICENSEE shall not export, re-export or otherwise transfer the SOFTWARE to any country for which the United States or the European Union or Austria maintains an embargo, or to any person or entity on the U.S. Department of Treasury List of Specially Designated Nationals or the U.S. Department of Commerce Denied Persons List or Entity List. LICENSEE represents and warrants that licensee is not located in, under the control of, or a national or resident of any restricted country or on any such list.
THIRD PARTY CREDITS
Portions of the SOFTWARE utilize or include third party software and other copyrighted materials. Credits, licensing terms, and disclaimers for such materials are contained in the installation directory for the SOFTWARE, and are accessible via the “3rd Party Licenses” dialog for the SOFTWARE. LICENSEE agrees that use of such copyrighted materials is governed by their respective terms.
ENTIRE AGREEMENT
This AGREEMENT represents the complete agreement concerning this SOFTWARE between the PARTIES and supersedes all prior agreements and representations between them. It may be amended only in writing executed by both PARTIES. Coati Software OG reserves the exclusive right to periodically update this AGREEMENT at its discretion at any time, with reasonable notice to LICENSEE by posting the new AGREEMENT at the following URL: <https://www.sourcetrail.com/terms-of-use>. Any action arising out of or relating to this AGREEMENT may be brought exclusively in Salzburg, Austria, and the PARTIES irrevocably consent to the jurisdiction of such courts and venue in Salzburg, Austria.
CONTACT
If you have questions regarding this agreement, contact:
Coati Software OG
Jakob-Haringer-Straße 1/127
5020 Salzburg
Austria
support@sourcetrail.com
+3 -1
View File
@@ -1,7 +1,9 @@
#ifndef _FIELD_
#define _FIELD_
class Field {
#include "game_object.h"
class Field : public GameObject {
public:
enum Token {
None = 0,
@@ -0,0 +1,10 @@
#ifndef _GAME_OBJECT_
#define _GAME_OBJECT_
class GameObject {
public:
GameObject() {}
virtual ~GameObject() {}
};
#endif // _GAME_OBJECT_
+2 -1
View File
@@ -2,8 +2,9 @@
#define _PLAYER_
#include "field.h"
#include "game_object.h"
class Player {
class Player : public GameObject {
public:
Player( Field::Token token, const char* name );
virtual ~Player();
+10
View File
@@ -0,0 +1,10 @@
#ifndef PRIVATE_KEY_H
#define PRIVATE_KEY_H
// This File(PrivateKey.h) is generated with CMake
#include <string>
const std::string PRIVATE_KEY = "@KEY@";
#endif // PRIVATE_KEY_H
+1 -1
View File
@@ -5,6 +5,6 @@
#include <string>
static const std::string PublicKey = "@KEY@";
const std::string PUBLIC_KEY = "@KEY@";
#endif // PUBLIC_KEY_H
+22
View File
@@ -0,0 +1,22 @@
# searching for private key file of the Sourcetrail version in setup/RSA_keys
# if found the file will be put into a const string into the PrivateKey.h file
string(REGEX REPLACE "^([0-9]+)\\..*" "\\1" VERSION_MAJOR "${GIT_VERSION_NUMBER}")
message(STATUS "Get Public Key for Sourcetrail version: ${VERSION_MAJOR}")
message(STATUS "${CMAKE_SOURCE_DIR}/setup/RSA_keys/private-sourcetrail.pem")
set(privateKeyFile "${CMAKE_SOURCE_DIR}/setup/RSA_keys/private-sourcetrail.pem")
if(EXISTS ${privateKeyFile})
file(READ ${privateKeyFile} KEY)
STRING(REGEX REPLACE "\"" "\\\\\"" KEY "${KEY}")
STRING(REGEX REPLACE "\n" "\\\\n\"\n\t\"" KEY "${KEY}")
else()
message(FATAL_ERROR "private keyfile for Sourcetrail not found")
endif()
configure_file(
${CMAKE_SOURCE_DIR}/cmake/PrivateKey.h.in
${CMAKE_BINARY_DIR}/src/license_generator/PrivateKey.h
)
@@ -1,27 +1,23 @@
# searching for public key file of the Sourcetrail version in setup/RSA_keys
# if found the file will be put into a const string into the PubicKeh.h file
# if found the file will be put into a const string into the PubicKey.h file
string(REGEX REPLACE "^([0-9]+)\\..*" "\\1" VERSION_MAJOR "${GIT_VERSION_NUMBER}")
message(STATUS "Get Public Key for Sourcetrail version: ${VERSION_MAJOR}")
# message(STATUS "${CMAKE_SOURCE_DIR}/setup/RSA_keys/public-${VERSION_MAJOR}.pem")
message(STATUS "${CMAKE_SOURCE_DIR}/setup/RSA_keys/public-0.pem") # explain in Readme.md how to get this to work first
message(STATUS "${CMAKE_SOURCE_DIR}/setup/RSA_keys/public-sourcetrail.pem")
# set(pubKeyFile "${CMAKE_SOURCE_DIR}/setup/RSA_keys/public-${VERSION_MAJOR}.pem")
set(pubKeyFile "${CMAKE_SOURCE_DIR}/setup/RSA_keys/public-0.pem") # explain in Readme.md how to get this to work first
# message(STATUS "file: ${pubKeyFile}")
set(pubKeyFile "${CMAKE_SOURCE_DIR}/setup/RSA_keys/public-sourcetrail.pem")
if(EXISTS ${pubKeyFile})
file(READ ${pubKeyFile} KEY)
STRING(REGEX REPLACE "\"" "\\\\\"" KEY "${KEY}")
STRING(REGEX REPLACE "\n" "\\\\n\"\n\t\"" KEY "${KEY}")
# message(STATUS "key: ${KEY}")
else()
message(WARNING "public keyfile for this version of Sourcetrail not found")
message(FATAL_ERROR "public keyfile for Sourcetrail not found")
#message(WARNING "public keyfile for Sourcetrail not found")
endif()
configure_file(
${CMAKE_SOURCE_DIR}/cmake/PublicKey.h.in
${CMAKE_BINARY_DIR}/src/lib_license/PublicKey.h
)
)
+10 -3
View File
@@ -24,7 +24,7 @@ if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
)
execute_process(
COMMAND ${GIT_EXECUTABLE} describe --long --match "[0-9]*" --abbrev=7 HEAD
COMMAND ${GIT_EXECUTABLE} describe --long --match "[0-9]*" HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_VERSION_NUMBER
OUTPUT_STRIP_TRAILING_WHITESPACE
@@ -37,10 +37,17 @@ else(EXISTS "${CMAKE_SOURCE_DIR}/.git")
endif(EXISTS "${CMAKE_SOURCE_DIR}/.git")
string(REGEX REPLACE "^([0-9]+)\\..*" "\\1" VERSION_YEAR "${GIT_VERSION_NUMBER}")
string(REGEX REPLACE "^[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${GIT_VERSION_NUMBER}")
string(REGEX REPLACE "^[0-9]+\\.[0-9]+-([0-9]+).*" "\\1" VERSION_COMMIT "${GIT_VERSION_NUMBER}")
message(STATUS "Git current branch: ${GIT_BRANCH}")
message(STATUS "Git commit hash: ${GIT_COMMIT_HASH}")
message(STATUS "Git commit time: ${GIT_COMMIT_TIME}")
message(STATUS "Git version number: " ${GIT_VERSION_NUMBER} )
message(STATUS "Git commit hash: ${GIT_COMMIT_HASH}")
message(STATUS "Version year: ${VERSION_YEAR}")
message(STATUS "Version minor: ${VERSION_MINOR}")
message(STATUS "Version commit: ${VERSION_COMMIT}")
message(STATUS "Git commit time: ${GIT_COMMIT_TIME}")
configure_file(
${CMAKE_SOURCE_DIR}/cmake/version.h.in
+3
View File
@@ -5,5 +5,8 @@
#define GIT_VERSION_NUMBER "@GIT_VERSION_NUMBER@"
#define GIT_COMMIT_HASH "@GIT_COMMIT_HASH@"
#define GIT_COMMIT_TIME "@GIT_COMMIT_TIME@"
#define VERSION_YEAR @VERSION_YEAR@
#define VERSION_MINOR @VERSION_MINOR@
#define VERSION_COMMIT @VERSION_COMMIT@
#endif // SOURCETRAIL_VERSION_H
+1 -5
View File
@@ -48,18 +48,14 @@
<File Id='ArtificialPlayerHeader' Name='artificial_player.h' DiskId='1' Source='./../../../bin/app/user/projects/tictactoe/src/artificial_player.h' KeyPath='no' />
<File Id='Field' Name='field.cpp' DiskId='1' Source='./../../../bin/app/user/projects/tictactoe/src/field.cpp' KeyPath='no' />
<File Id='FieldHeader' Name='field.h' DiskId='1' Source='./../../../bin/app/user/projects/tictactoe/src/field.h' KeyPath='no' />
<File Id='GameObjectHeader' Name='game_object.h' DiskId='1' Source='./../../../bin/app/user/projects/tictactoe/src/game_object.h' KeyPath='no' />
<File Id='HumanPlayer' Name='human_player.cpp' DiskId='1' Source='./../../../bin/app/user/projects/tictactoe/src/human_player.cpp' KeyPath='no' />
<File Id='HumanPlayerHeader' Name='human_player.h' DiskId='1' Source='./../../../bin/app/user/projects/tictactoe/src/human_player.h' KeyPath='no' />
<File Id='IO' Name='io.cpp' DiskId='1' Source='./../../../bin/app/user/projects/tictactoe/src/io.cpp' KeyPath='no' />
<File Id='IOHeader' Name='io.h' DiskId='1' Source='./../../../bin/app/user/projects/tictactoe/src/io.h' KeyPath='no' />
<File Id='tictactoeMain' Name='main.cpp' DiskId='1' Source='./../../../bin/app/user/projects/tictactoe/src/main.cpp' KeyPath='no' />
<File Id='Player' Name='player.cpp' DiskId='1' Source='./../../../bin/app/user/projects/tictactoe/src/player.cpp' KeyPath='no' />
<File Id='PlayerHeader' Name='player.h' DiskId='1' Source='./../../../bin/app/user/projects/tictactoe/src/player.h' KeyPath='no' />
<File Id='tictactoeFile' Name='tictactoe.cpp' DiskId='1' Source='./../../../bin/app/user/projects/tictactoe/src/tictactoe.cpp' KeyPath='no' />
<File Id='tictactoeHeader' Name='tictactoe.h' DiskId='1' Source='./../../../bin/app/user/projects/tictactoe/src/tictactoe.h' KeyPath='no' />
</Component>
+1
View File
@@ -11,6 +11,7 @@ VERSION_STRING="${VERSION_STRING//-/_}"
VERSION_STRING="${VERSION_STRING//./_}"
VERSION_STRING="${VERSION_STRING%_*}"
VERSION_STRING="${VERSION_STRING//_/.}"
VERSION_STRING="${VERSION_STRING:2}"
echo "installer version is $VERSION_STRING"
PRODUCT_GUID=$(cmd.exe /c "VsDevCmd.bat & uuidgen")
+52 -2
View File
@@ -230,6 +230,47 @@
<File Id='qwindowsDLL' Name='qwindows.dll' DiskId='1' Source='$(var.PlatformSourceFolder)/platforms/qwindows.dll' KeyPath='yes' />
</Component>
</Directory>
<Directory Id='License' Name='license'>
<Component Id='EulaRtf' Guid='*' Win64="$(var.Win64)">
<File Id='EulaRtfId' Name='EULA.rtf' DiskId='1' Source='./../../../bin/app/data/gui/installer/EULA.rtf' KeyPath='yes' />
</Component>
<Directory Id='ThirdPartyLicenses' Name='3rd_party_licenses'>
<Component Id='LicenseBoostTxt' Guid='*' Win64="$(var.Win64)">
<File Id='LicenseBoost' Name='license_boost.txt' DiskId='1' Source='./../../../bin/app/data/3rd_party_licenses/license_boost.txt' KeyPath='yes' />
</Component>
<Component Id='LicenseBotanTxt' Guid='*' Win64="$(var.Win64)">
<File Id='LicenseBotan' Name='license_botan.txt' DiskId='1' Source='./../../../bin/app/data/3rd_party_licenses/license_botan.txt' KeyPath='yes' />
</Component>
<Component Id='LicenseClangTxt' Guid='*' Win64="$(var.Win64)">
<File Id='LicenseClang' Name='license_clang.txt' DiskId='1' Source='./../../../bin/app/data/3rd_party_licenses/license_clang.txt' KeyPath='yes' />
</Component>
<Component Id='LicenseCppSqliteTxt' Guid='*' Win64="$(var.Win64)">
<File Id='LicenseCppSqlite' Name='license_cpp_sqlite.txt' DiskId='1' Source='./../../../bin/app/data/3rd_party_licenses/license_cpp_sqlite.txt' KeyPath='yes' />
</Component>
<Component Id='LicenseGuavaTxt' Guid='*' Win64="$(var.Win64)">
<File Id='LicenseGuava' Name='license_guava.txt' DiskId='1' Source='./../../../bin/app/data/3rd_party_licenses/license_guava.txt' KeyPath='yes' />
</Component>
<Component Id='LicenseJavaSymbolSolverTxt' Guid='*' Win64="$(var.Win64)">
<File Id='LicenseJavaSymbolSolver' Name='license_java_symbol_solver.txt' DiskId='1' Source='./../../../bin/app/data/3rd_party_licenses/license_java_symbol_solver.txt' KeyPath='yes' />
</Component>
<Component Id='LicenseJavaparserTxt' Guid='*' Win64="$(var.Win64)">
<File Id='LicenseJavaparser' Name='license_javaparser.txt' DiskId='1' Source='./../../../bin/app/data/3rd_party_licenses/license_javaparser.txt' KeyPath='yes' />
</Component>
<Component Id='LicenseJavaslangTxt' Guid='*' Win64="$(var.Win64)">
<File Id='LicenseJavaslang' Name='license_javaslang.txt' DiskId='1' Source='./../../../bin/app/data/3rd_party_licenses/license_javaslang.txt' KeyPath='yes' />
</Component>
<Component Id='LicenseJavassistTxt' Guid='*' Win64="$(var.Win64)">
<File Id='LicenseJavassist' Name='license_javassist.txt' DiskId='1' Source='./../../../bin/app/data/3rd_party_licenses/license_javassist.txt' KeyPath='yes' />
</Component>
<Component Id='LicenseQtTxt' Guid='*' Win64="$(var.Win64)">
<File Id='LicenseQt' Name='license_qt.txt' DiskId='1' Source='./../../../bin/app/data/3rd_party_licenses/license_qt.txt' KeyPath='yes' />
</Component>
<Component Id='LicenseTinyxmlTxt' Guid='*' Win64="$(var.Win64)">
<File Id='LicenseTinyxml' Name='license_tinyxml.txt' DiskId='1' Source='./../../../bin/app/data/3rd_party_licenses/license_tinyxml.txt' KeyPath='yes' />
</Component>
</Directory>
</Directory>
<Directory Id='LieutenantCommanderData' Name='data'>
@@ -526,7 +567,6 @@
<Component Id='Vs_icon_Png' Guid='*' Win64="$(var.Win64)">
<File Id='Vs_icon' Name='vs_icon.png' DiskId='1' Source='./../../../bin/app/data/gui/icon/vs_icon.png' KeyPath='yes' />
</Component>
</Directory>
<Directory Id='DataIndexingDialog' Name='indexing_dialog'>
@@ -542,7 +582,18 @@
<Component Id='ProgressBarElementPng' Guid='*' Win64="$(var.Win64)">
<File Id='ProgressBarElement' Name='progress_bar_element.png' DiskId='1' Source='./../../../bin/app/data/gui/indexing_dialog/progress_bar_element.png' KeyPath='yes' />
</Component>
</Directory>
<Directory Id='DataInstaller' Name='installer'>
<Component Id='EulaTxt' Guid='*' Win64="$(var.Win64)">
<File Id='EulaTxtId' Name='EULA.txt' DiskId='1' Source='./../../../bin/app/data/gui/installer/EULA.txt' KeyPath='yes' />
</Component>
</Directory>
<Directory Id='DataKeyboardShortcuts' Name='keyboard_shortcuts'>
<Component Id='KeyboardShortcutsCss' Guid='*' Win64="$(var.Win64)">
<File Id='KeyboardShortcuts' Name='keyboard_shortcuts.css' DiskId='1' Source='./../../../bin/app/data/gui/keyboard_shortcuts/keyboard_shortcuts.css' KeyPath='yes' />
</Component>
</Directory>
<Directory Id='DataLicense' Name='license'>
@@ -561,7 +612,6 @@
<File Id='Refresh' Name='refresh.png' DiskId='1' Source='./../../../bin/app/data/gui/refresh_view/images/refresh.png' KeyPath='yes' />
</Component>
</Directory>
</Directory>
<Directory Id='DataSearchView' Name='search_view'>
+20 -4
View File
@@ -32,7 +32,7 @@
Description="$(var.ProductDisplayName) Installer"
Comments='$(var.ProductName) is a registered trademark of $(var.ProductAuthor)'
Manufacturer='$(var.ProductAuthor)'
InstallerVersion='100'
InstallerVersion='200'
Languages='1033'
Compressed='yes'
SummaryCodepage='1252' />
@@ -224,7 +224,20 @@
<ComponentRef Id='vcruntime140_dll'/>
<ComponentRef Id='QWindowsDll'/>
<ComponentRef Id='EulaRtf'/>
<ComponentRef Id='LicenseBoostTxt'/>
<ComponentRef Id='LicenseBotanTxt'/>
<ComponentRef Id='LicenseClangTxt'/>
<ComponentRef Id='LicenseCppSqliteTxt'/>
<ComponentRef Id='LicenseGuavaTxt'/>
<ComponentRef Id='LicenseJavaSymbolSolverTxt'/>
<ComponentRef Id='LicenseJavaparserTxt'/>
<ComponentRef Id='LicenseJavaslangTxt'/>
<ComponentRef Id='LicenseJavassistTxt'/>
<ComponentRef Id='LicenseQtTxt'/>
<ComponentRef Id='LicenseTinyxmlTxt'/>
<ComponentRef Id='FiraSansLicensetxt'/>
<ComponentRef Id='FiraSansRegularotf'/>
<ComponentRef Id='FiraSansSemiBoldotf'/>
@@ -324,6 +337,10 @@
<ComponentRef Id='ProgressBarElementPng'/>
<ComponentRef Id='LicenseCss'/>
<ComponentRef Id='EulaTxt'/>
<ComponentRef Id='KeyboardShortcutsCss'/>
<ComponentRef Id='RefreshViewCss'/>
<ComponentRef Id='RefreshPng'/>
@@ -389,9 +406,8 @@
<ComponentRef Id='SampleProjects'/>
<ComponentRef Id='TictactoeSourcetrailproject'/>
<ComponentRef Id='TictactoeCode'/>
<ComponentRef Id='TutorialSourcetrailproject'/>
<ComponentRef Id='TutorialCode'/>
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<TestSettings name="Integration Tests" id="6299ba98-e7db-415b-8d40-3472f579309a" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<Description>These are default test settings for a local test run.</Description>
<Execution>
<Hosts>
<VSSDKTestHostRunConfig name="VS IDE" HiveKind="DevEnv" HiveName="15.0Exp" xmlns="http://microsoft.com/schemas/VisualStudio/SDK/Tools/IdeHostAdapter/2006/06" />
</Hosts>
<TestTypeSpecific>
<UnitTestRunConfig testTypeId="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b">
<AssemblyResolution>
<TestDirectory useLoadContext="true" />
</AssemblyResolution>
</UnitTestRunConfig>
</TestTypeSpecific>
<AgentRule name="Execution Agents">
</AgentRule>
</Execution>
<Properties />
</TestSettings>
@@ -9,7 +9,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourcetrailPlugin", "Source
{8188D64D-E880-490C-B267-B493A2171BE3} = {8188D64D-E880-490C-B267-B493A2171BE3}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourcetrailPlugin.IntegrationTests", "SourcetrailPlugin.IntegrationTests\SourcetrailPlugin.IntegrationTests.csproj", "{9DE8C188-0F0E-4F5D-B3C4-ECF9CFB23E0D}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourcetrailPluginTests", "SourcetrailPluginTests\SourcetrailPluginTests.csproj", "{9DE8C188-0F0E-4F5D-B3C4-ECF9CFB23E0D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VCProjectEngineWrapperInterfaces", "VCProjectEngineWrapperInterfaces\VCProjectEngineWrapperInterfaces.csproj", "{F592DB46-0C77-470B-AAF8-80C51F44380E}"
EndProject
@@ -29,6 +29,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VCProjectEngineWrapperVs201
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourcetrailPluginUtility", "SourcetrailPluginUtility\SourcetrailPluginUtility.csproj", "{604B5751-AF34-4FF9-92C3-C85A6BCDF98E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{7298A53A-50A0-404A-B0C8-B408FE8AF2FB}"
ProjectSection(SolutionItems) = preProject
IntegrationTests.testsettings = IntegrationTests.testsettings
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -1,5 +1,6 @@
using System;
using System.Runtime.InteropServices;
using ComTypes = System.Runtime.InteropServices.ComTypes;
namespace ComUtils
@@ -1,7 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
@@ -1,14 +1,12 @@
// PkgCmdID.cs
// MUST match PkgCmdID.h
using System;
namespace CoatiSoftware.SourcetrailPlugin
{
static class PkgCmdIDList
{
public const uint cmdidSourcetrailSetActiveToken = 0x104;
public const uint cmdidSourcetrailCreateProject = 0x105;
public const uint cmdidSourcetrailCreateCDB = 0x106;
public const uint cmdidSourcetrailCreateCdb = 0x106;
public const uint cmdidSourcetrailOpenLogFolder = 0x107;
};
@@ -1,11 +1,5 @@
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Xml;
using Newtonsoft.Json.Linq;
using System.IO;
using System.Threading;
using System;
using Newtonsoft.Json;
using Newtonsoft.Json;
using System.Collections.Generic;
namespace CoatiSoftware.SourcetrailPlugin.SolutionParser
{
@@ -13,75 +7,72 @@ namespace CoatiSoftware.SourcetrailPlugin.SolutionParser
{
private List<CompileCommand> _compileCommands = new List<CompileCommand>();
// meta data
private string _name = "";
private string _sourceProject = "";
private string _directory = "";
private System.DateTime _lastUpdated = new System.DateTime();
private List<string> _includedProjects = new List<string>();
private string _configurationName = "";
private string _platformName = "";
public string Name
private bool TryLoadData(string filePath)
{
get { return _name; }
set { _name = value; }
if (filePath.Length > 0)
{
if (System.IO.File.Exists(filePath))
{
string data = "";
using (System.IO.StreamReader file = new System.IO.StreamReader(filePath))
{
string line = "";
while ((line = file.ReadLine()) != null)
{
data += line;
}
}
DeserializeFromJson(data);
return true;
}
else
{
Logging.Logging.LogError("The cdb file at \"" + filePath + "\" does not exist.");
}
}
else
{
Logging.Logging.LogWarning("Can't load cdb data. Filepath has not been set.");
}
return false;
}
public string SourceProject
{
get { return _sourceProject; }
set { _sourceProject = value; }
}
public string Directory
{
get { return _directory; }
set { _directory = value; }
}
public System.DateTime LastUpdated
{
get { return _lastUpdated; }
set { _lastUpdated = value; }
}
public List<string> IncludedProjects
{
get { return _includedProjects; }
set { _includedProjects = value; }
}
public string ConfigurationName
{
get { return _configurationName; }
set { _configurationName = value; }
}
public string PlatformName
{
get { return _platformName; }
set { _platformName = value; }
}
public int CompileCommandCount
{
get { return _compileCommands.Count; }
}
public static CompilationDatabase LoadFromFile(string filePath)
{
CompilationDatabase cdb = new CompilationDatabase();
cdb.Name = Path.GetFileNameWithoutExtension(filePath);
cdb.Directory = Path.GetDirectoryName(filePath);
bool success = cdb.TryLoadData();
bool success = cdb.TryLoadData(filePath);
return cdb;
}
public string SerializeToJson()
{
return JsonConvert.SerializeObject(_compileCommands, Newtonsoft.Json.Formatting.Indented);
}
public void DeserializeFromJson(string serialized)
{
_compileCommands.Clear();
if (serialized.Length > 0)
{
_compileCommands = JsonConvert.DeserializeObject<List<CompileCommand>>(serialized);
}
}
public int CompileCommandCount
{
get { return _compileCommands.Count; }
}
public static bool operator ==(CompilationDatabase a, CompilationDatabase b)
{
if (System.Object.ReferenceEquals(a, b))
@@ -116,257 +107,19 @@ namespace CoatiSoftware.SourcetrailPlugin.SolutionParser
return !(a == b);
}
public void AddCommandObject(CompileCommand commandObject)
public void AddCompileCommand(CompileCommand commandObject)
{
_compileCommands.Add(commandObject); // updating is not efficient as it is
_compileCommands.Add(commandObject);
}
// remove commandObjects for removed files
public void Clean()
public void SortAlphabetically()
{
for (int i = 0; i < _compileCommands.Count; i++)
{
if (System.IO.File.Exists(_compileCommands[i].File) == false)
{
_compileCommands.RemoveAt(i);
i--;
}
}
_compileCommands.Sort((c1, c2) => c1.File.CompareTo(c2.File));
}
public void ClearCommandObjects()
public void Clear()
{
_compileCommands.Clear();
}
public bool CheckCDBExists()
{
if (_directory.Length > 0 && _name.Length > 0)
{
string path = GetFilePath();
if(System.IO.File.Exists(path) == false)
{
_lastUpdated = System.DateTime.MinValue; // if file is missing, set date way back so it doesn't interfere with re-building
return false;
}
else
{
return true;
}
}
else
{
Logging.Logging.LogWarning("Can't check cdb data, directory and/or name has not been set: directory - '" + _directory + "', name - '" + _name + "'");
}
return false;
}
public bool TryLoadData()
{
if(_directory.Length > 0 && _name.Length > 0)
{
string path = GetFilePath();
if(System.IO.File.Exists(path))
{
string data = "";
using (System.IO.StreamReader file = new System.IO.StreamReader(path))
{
string line = "";
while ((line = file.ReadLine()) != null)
{
data += line;
}
}
DeserializeFromJson(data);
return true;
}
else
{
_lastUpdated = System.DateTime.MinValue; // if file is missing, set date way back so it doesn't interfere with re-building
Logging.Logging.LogError("The cdb file '" + path + "' does not exist.");
}
}
else
{
Logging.Logging.LogWarning("Can't load cdb data, directory and/or name has not been set: directory - '" + _directory + "', name - '" + _name + "'");
}
return false;
}
public void UnloadData()
{
_compileCommands.Clear();
}
public string SerializeToJson()
{
return JsonConvert.SerializeObject(_compileCommands, Newtonsoft.Json.Formatting.Indented);
}
public void DeserializeFromJson(string serialized)
{
_compileCommands.Clear();
if (serialized.Length > 0)
{
_compileCommands = JsonConvert.DeserializeObject<List<CompileCommand>>(serialized);
}
}
public XmlNode GetMetaDataXML(XmlDocument doc)
{
// XmlDocument doc = new XmlDocument();
XmlNode root = doc.CreateElement("cdb");
XmlElement name = doc.CreateElement("name");
name.InnerText = _name;
XmlElement sourceProject = doc.CreateElement("sourceProject");
sourceProject.InnerText = _sourceProject;
XmlElement directory = doc.CreateElement("directory");
directory.InnerText = _directory;
XmlElement lastUpdated = doc.CreateElement("lastUpdated");
lastUpdated.InnerText = _lastUpdated.ToString();
XmlElement includedProjects = doc.CreateElement("includedProjects");
foreach (string project in _includedProjects)
{
XmlElement includedProject = doc.CreateElement("includedProject");
includedProject.InnerText = project;
includedProjects.AppendChild(includedProject);
}
XmlElement configuration = doc.CreateElement("configuration");
configuration.InnerText = _configurationName;
XmlElement platform = doc.CreateElement("platform");
platform.InnerText = _platformName;
root.AppendChild(name);
root.AppendChild(sourceProject);
root.AppendChild(directory);
root.AppendChild(lastUpdated);
root.AppendChild(includedProjects);
root.AppendChild(configuration);
root.AppendChild(platform);
return root;
}
public string SerializeMetaDataXML()
{
XmlDocument doc = new XmlDocument();
XmlNode root = GetMetaDataXML(doc);
System.IO.StringWriter writer = new System.IO.StringWriter();
XmlSerializer serializer = new XmlSerializer(typeof(XmlElement));
serializer.Serialize(writer, root);
return writer.ToString();
}
public static List<CompilationDatabase> ParseCDBsMetaData(string data)
{
List<CompilationDatabase> cdbs = new List<CompilationDatabase>();
if(data.Length > 0)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(data);
XmlNode root = doc.SelectSingleNode("cdbs");
XmlNodeList nodes = root.SelectNodes("cdb");
foreach (XmlNode node in nodes)
{
cdbs.Add(ParseCDBMetaData(node));
}
}
return cdbs;
}
public static CompilationDatabase ParseCDBMetaData(XmlNode node)
{
CompilationDatabase cdb = new CompilationDatabase();
XmlNode nameNode = node.SelectSingleNode("name");
string name = nameNode.InnerText;
XmlNode sourceNode = node.SelectSingleNode("sourceProject");
string source = sourceNode.InnerText;
XmlNode directoryNode = node.SelectSingleNode("directory");
string directory = directoryNode.InnerText;
XmlNode updatedNode = node.SelectSingleNode("lastUpdated");
string updated = updatedNode.InnerText;
System.DateTime updatedDate;
if(System.DateTime.TryParse(updated, out updatedDate) == false)
{
updatedDate = System.DateTime.MinValue;
}
XmlNode includedProjects = node.SelectSingleNode("includedProjects");
XmlNodeList includedProjectNodes = includedProjects.SelectNodes("includedProject");
List<string> includedProjectsList = new List<string>();
foreach(XmlNode p in includedProjectNodes)
{
includedProjectsList.Add(p.InnerText);
}
XmlNode configurationNode = node.SelectSingleNode("configuration");
string configuration = configurationNode.InnerText;
XmlNode platformNode = node.SelectSingleNode("platform");
string platform = platformNode.InnerText;
// if cdb file is not there anymore, set the modified date back so that a full update will be performed
if(System.IO.File.Exists(directory + "\\" + name + ".json") == false)
{
updatedDate = System.DateTime.MinValue;
}
cdb.Name = name;
cdb.SourceProject = source;
cdb.Directory = directory;
cdb.LastUpdated = updatedDate;
cdb.IncludedProjects = includedProjectsList;
cdb.ConfigurationName = configuration;
cdb.PlatformName = platform;
return cdb;
}
private bool TryUpdateCommandObject(CompileCommand co)
{
CompileCommand old = _compileCommands.Find(x => x.File == co.File);
if(old != null)
{
_compileCommands.Remove(old);
_compileCommands.Add(co);
return true;
}
return false;
}
private string GetFilePath()
{
return _directory + "\\" + _name + ".json";
}
}
}
@@ -0,0 +1,218 @@
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
namespace CoatiSoftware.SourcetrailPlugin.SolutionParser
{
public class CompilationDatabaseSettings
{
private string _name = "";
private string _sourceProject = "";
private string _directory = "";
private System.DateTime _lastUpdated = new System.DateTime();
private List<string> _includedProjects = new List<string>();
private string _configurationName = "";
private string _platformName = "";
public string Name
{
get { return _name; }
set { _name = value; }
}
public string SourceProject
{
get { return _sourceProject; }
set { _sourceProject = value; }
}
public string Directory
{
get { return _directory; }
set { _directory = value; }
}
public System.DateTime LastUpdated
{
get { return _lastUpdated; }
set { _lastUpdated = value; }
}
public List<string> IncludedProjects
{
get { return _includedProjects; }
set { _includedProjects = value; }
}
public string ConfigurationName
{
get { return _configurationName; }
set { _configurationName = value; }
}
public string PlatformName
{
get { return _platformName; }
set { _platformName = value; }
}
public bool CheckCdbExists()
{
if (_directory.Length > 0 && _name.Length > 0)
{
string path = GetFilePath();
if(System.IO.File.Exists(path) == false)
{
_lastUpdated = System.DateTime.MinValue; // if file is missing, set date way back so it doesn't interfere with re-building
return false;
}
else
{
return true;
}
}
else
{
Logging.Logging.LogWarning("Can't check cdb data, directory and/or name has not been set: directory - '" + _directory + "', name - '" + _name + "'");
}
return false;
}
public XmlNode GetMetaDataXML(XmlDocument doc)
{
// XmlDocument doc = new XmlDocument();
XmlNode root = doc.CreateElement("cdb");
XmlElement name = doc.CreateElement("name");
name.InnerText = _name;
XmlElement sourceProject = doc.CreateElement("sourceProject");
sourceProject.InnerText = _sourceProject;
XmlElement directory = doc.CreateElement("directory");
directory.InnerText = _directory;
XmlElement lastUpdated = doc.CreateElement("lastUpdated");
lastUpdated.InnerText = _lastUpdated.ToString();
XmlElement includedProjects = doc.CreateElement("includedProjects");
foreach (string project in _includedProjects)
{
XmlElement includedProject = doc.CreateElement("includedProject");
includedProject.InnerText = project;
includedProjects.AppendChild(includedProject);
}
XmlElement configuration = doc.CreateElement("configuration");
configuration.InnerText = _configurationName;
XmlElement platform = doc.CreateElement("platform");
platform.InnerText = _platformName;
root.AppendChild(name);
root.AppendChild(sourceProject);
root.AppendChild(directory);
root.AppendChild(lastUpdated);
root.AppendChild(includedProjects);
root.AppendChild(configuration);
root.AppendChild(platform);
return root;
}
public string SerializeMetaDataXML()
{
XmlDocument doc = new XmlDocument();
XmlNode root = GetMetaDataXML(doc);
System.IO.StringWriter writer = new System.IO.StringWriter();
XmlSerializer serializer = new XmlSerializer(typeof(XmlElement));
serializer.Serialize(writer, root);
return writer.ToString();
}
public static List<CompilationDatabaseSettings> ParseCdbsMetaData(string data)
{
List<CompilationDatabaseSettings> cdbs = new List<CompilationDatabaseSettings>();
if(data.Length > 0)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(data);
XmlNode root = doc.SelectSingleNode("cdbs");
XmlNodeList nodes = root.SelectNodes("cdb");
foreach (XmlNode node in nodes)
{
cdbs.Add(ParseCdbMetaData(node));
}
}
return cdbs;
}
public static CompilationDatabaseSettings ParseCdbMetaData(XmlNode node)
{
CompilationDatabaseSettings cdb = new CompilationDatabaseSettings();
XmlNode nameNode = node.SelectSingleNode("name");
string name = nameNode.InnerText;
XmlNode sourceNode = node.SelectSingleNode("sourceProject");
string source = sourceNode.InnerText;
XmlNode directoryNode = node.SelectSingleNode("directory");
string directory = directoryNode.InnerText;
XmlNode updatedNode = node.SelectSingleNode("lastUpdated");
string updated = updatedNode.InnerText;
System.DateTime updatedDate;
if(System.DateTime.TryParse(updated, out updatedDate) == false)
{
updatedDate = System.DateTime.MinValue;
}
XmlNode includedProjects = node.SelectSingleNode("includedProjects");
XmlNodeList includedProjectNodes = includedProjects.SelectNodes("includedProject");
List<string> includedProjectsList = new List<string>();
foreach(XmlNode p in includedProjectNodes)
{
includedProjectsList.Add(p.InnerText);
}
XmlNode configurationNode = node.SelectSingleNode("configuration");
string configuration = configurationNode.InnerText;
XmlNode platformNode = node.SelectSingleNode("platform");
string platform = platformNode.InnerText;
// if cdb file is not there anymore, set the modified date back so that a full update will be performed
if(System.IO.File.Exists(directory + "\\" + name + ".json") == false)
{
updatedDate = System.DateTime.MinValue;
}
cdb.Name = name;
cdb.SourceProject = source;
cdb.Directory = directory;
cdb.LastUpdated = updatedDate;
cdb.IncludedProjects = includedProjectsList;
cdb.ConfigurationName = configuration;
cdb.PlatformName = platform;
return cdb;
}
private string GetFilePath()
{
return _directory + "\\" + _name + ".json";
}
}
}
@@ -1,5 +1,4 @@

using Newtonsoft.Json;
using Newtonsoft.Json;
namespace CoatiSoftware.SourcetrailPlugin.SolutionParser
{
@@ -1,11 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using CoatiSoftware.SourcetrailPlugin.Utility;
using EnvDTE;
using System.IO;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using CoatiSoftware.SourcetrailPlugin.Utility;
using System.IO;
using System.Linq;
using VCProjectEngineWrapper;
namespace CoatiSoftware.SourcetrailPlugin.SolutionParser
@@ -15,7 +14,8 @@ namespace CoatiSoftware.SourcetrailPlugin.SolutionParser
static private List<Guid> _reloadedProjectGuids = new List<Guid>();
static private List<string> _compatibilityFlags = new List<string>() { "-fms-extensions", "-fms-compatibility" };
static private string _compatibilityVersionFlagBase = "-fms-compatibility-version="; // We want to get the exact version at runtime for this flag, therefore keeping it seperate from the others makes things easier
static private List<string> _extensionWhiteList = new List<string>() { "c", "cc", "cpp", "cxx", "C", "h", "hpp" };
static private List<string> _sourceExtensionWhiteList = new List<string>() { "c", "cc", "cpp", "cxx" };
static private List<string> _headerExtensionWhiteList = new List<string>() { "h", "hpp" };
private string _compatibilityVersionFlag = _compatibilityVersionFlagBase + "19"; // This default version would correspond to VS2015
@@ -35,7 +35,7 @@ namespace CoatiSoftware.SourcetrailPlugin.SolutionParser
public List<CompileCommand> CreateCompileCommands(Project project, string configurationName, string platformName, string cStandard)
{
Logging.Logging.LogInfo("Creating command objects from project " + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(project.Name));
Logging.Logging.LogInfo("Creating command objects for project \"" + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(project.Name) + "\".");
List<CompileCommand> result = new List<CompileCommand>();
@@ -43,13 +43,13 @@ namespace CoatiSoftware.SourcetrailPlugin.SolutionParser
Guid projectGuid = Utility.ProjectUtility.ReloadProject(project);
IVCProjectWrapper vcProject = VCProjectEngineWrapper.VCProjectWrapperFactory.create(project.Object);
if (vcProject.isValid())
if (vcProject != null && vcProject.isValid())
{
Logging.Logging.LogInfo("Project '" + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(project.Name) + "' has been converted to VCProject " + vcProject.GetWrappedVersion() + ".");
Logging.Logging.LogInfo("Project \"" + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(project.Name) + "\" has been converted to VCProject " + vcProject.GetWrappedVersion() + ".");
}
else
{
Logging.Logging.LogWarning("Project '" + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(project.Name) + "' could not be converted to VCProject, skipping.");
Logging.Logging.LogWarning("Project \"" + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(project.Name) + "\" could not be converted to VCProject, skipping.");
return result;
}
@@ -84,7 +84,7 @@ namespace CoatiSoftware.SourcetrailPlugin.SolutionParser
private CompileCommand CreateCompileCommand(EnvDTE.ProjectItem item, List<string> includeDirectories, List<string> preprocessorDefinitions, string vcStandard, string cStandard, string configurationName, string platformName)
{
Logging.Logging.LogInfo("Starting to create Command Object from item '" + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(item.Name) + "'");
Logging.Logging.LogInfo("Starting to create Command Object from item \"" + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(item.Name) + "\"");
try
{
@@ -116,34 +116,11 @@ namespace CoatiSoftware.SourcetrailPlugin.SolutionParser
Logging.Logging.LogInfo("Unable to retrieve build tool. Using extension white-list to determine file type.");
}
if (IsSourceFile(item, compilerTool))
if (CheckIsSourceFile(item, compilerTool))
{
CompileCommand command = new CompileCommand();
command.File = item.Name;
// only write source files to cdb, headers are implicit
// however, retreive header directory
if (CheckIsHeader(item))
{
Properties props = item.Properties;
foreach (Property prop in props)
{
string propName = prop.Name;
string propValue = prop.Value as String;
if (propName == "FullPath")
{
int i = propValue.LastIndexOf('\\');
propValue = propValue.Substring(0, i);
_headerDirectories.Add(propValue);
}
}
return null;
}
string additionalOptions = "";
if (compilerTool != null && compilerTool.isValid())
{
@@ -202,6 +179,20 @@ namespace CoatiSoftware.SourcetrailPlugin.SolutionParser
return command;
}
else if (CheckIsHeaderFile(item, compilerTool))
{
if (ProjectUtility.HasProperty(item.Properties, "FullPath"))
{
string propValue = item.Properties.Item("FullPath").Value.ToString();
int i = propValue.LastIndexOf('\\');
propValue = propValue.Substring(0, i);
_headerDirectories.Add(propValue);
}
return null;
}
else
{
Logging.Logging.LogInfo("Item discarded, wrong code model");
@@ -217,7 +208,7 @@ namespace CoatiSoftware.SourcetrailPlugin.SolutionParser
return null;
}
static private bool IsSourceFile(ProjectItem item, IVCCLCompilerToolWrapper tool)
static private bool CheckIsSourceFile(ProjectItem item, IVCCLCompilerToolWrapper tool)
{
if (tool != null && tool.isValid()) // if the tool is null it's probably not a normal VC project, indicating that the file code model is unavailable
{
@@ -244,7 +235,7 @@ namespace CoatiSoftware.SourcetrailPlugin.SolutionParser
return true;
}
}
else if (_extensionWhiteList.Contains(GetFileExtension(item)))
else if (_sourceExtensionWhiteList.Contains(GetFileExtension(item).ToLower()))
{
return true;
}
@@ -252,35 +243,28 @@ namespace CoatiSoftware.SourcetrailPlugin.SolutionParser
return false;
}
static private bool CheckIsHeader(EnvDTE.ProjectItem item)
static private bool CheckIsHeaderFile(EnvDTE.ProjectItem item, IVCCLCompilerToolWrapper tool)
{
Properties props = item.Properties;
string propString = "";
try
if (tool != null && tool.isValid()) // if the tool is null it's probably not a normal VC project, indicating that the file code model is unavailable
{
foreach (Property prop in props)
try
{
string propName = prop.Name;
string propValue = prop.Value as String;
propString += propName + " - " + propValue + "; ";
if (propName == "ItemType")
if (ProjectUtility.HasProperty(item.Properties, "ItemType") && item.Properties.Item("ItemType").Value.ToString() == "ClInclude")
{
if (propValue as String == "ClInclude")
{
return true;
}
Logging.Logging.LogInfo("Accepting item because of its \"ItemType\" property");
return true;
}
}
catch (Exception e)
{
Logging.Logging.LogError("Exception: " + e.Message);
}
}
catch (Exception e)
else if (_headerExtensionWhiteList.Contains(GetFileExtension(item).ToLower()))
{
Logging.Logging.LogError("Exception: " + e.Message);
return true;
}
return false;
}
@@ -1,5 +1,5 @@
using System;
using CoatiSoftware.SourcetrailPlugin.Utility;
using CoatiSoftware.SourcetrailPlugin.Utility;
using System;
using VCProjectEngineWrapper;
namespace CoatiSoftware.SourcetrailPlugin.SolutionParser
@@ -139,9 +139,10 @@
<ItemGroup>
<Compile Include="ComUtils.cs" />
<Compile Include="Multitasking\LimitedThreadsTaskScheduler.cs" />
<Compile Include="SolutionParser\CompilationDatabase.cs" />
<Compile Include="Utility\IPathResolver.cs" />
<Compile Include="SolutionParser\VsPathResolver.cs" />
<Compile Include="Utility\CompilationDatabaseList.cs" />
<Compile Include="Utility\CompilationDatabaseSettingsList.cs" />
<Compile Include="Utility\DataUtility.cs" />
<Compile Include="Utility\FileUtility.cs" />
<Compile Include="Guids.cs" />
@@ -158,25 +159,25 @@
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="PkgCmdID.cs" />
<Compile Include="SolutionParser\CommandObject.cs" />
<Compile Include="SolutionParser\CompilationDatabase.cs" />
<Compile Include="SolutionParser\CompileCommand.cs" />
<Compile Include="SolutionParser\CompilationDatabaseSettings.cs" />
<Compile Include="SolutionParser\SolutionParser.cs" />
<Compile Include="Utility\ProjectUtility.cs" />
<Compile Include="Utility\QueuedFileWriter.cs" />
<Compile Include="Utility\SolutionUtility.cs" />
<Compile Include="Utility\SystemUtility.cs" />
<Compile Include="Utility\StringUtility.cs" />
<Compile Include="Wizard\WindowCDBReady.cs">
<Compile Include="Wizard\WindowCdbReady.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Wizard\WindowCDBReady.Designer.cs">
<DependentUpon>WindowCDBReady.cs</DependentUpon>
<Compile Include="Wizard\WindowCdbReady.Designer.cs">
<DependentUpon>WindowCdbReady.cs</DependentUpon>
</Compile>
<Compile Include="Wizard\WindowCreateCDB.cs">
<Compile Include="Wizard\WindowCreateCdb.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Wizard\WindowCreateCDB.Designer.cs">
<DependentUpon>WindowCreateCDB.cs</DependentUpon>
<Compile Include="Wizard\WindowCreateCdb.Designer.cs">
<DependentUpon>WindowCreateCdb.cs</DependentUpon>
</Compile>
<Compile Include="Wizard\ProjectSetupWindow.cs">
<SubType>Form</SubType>
@@ -202,11 +203,11 @@
<ManifestResourceName>VSPackage</ManifestResourceName>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Wizard\WindowCDBReady.resx">
<DependentUpon>WindowCDBReady.cs</DependentUpon>
<EmbeddedResource Include="Wizard\WindowCdbReady.resx">
<DependentUpon>WindowCdbReady.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Wizard\WindowCreateCDB.resx">
<DependentUpon>WindowCreateCDB.cs</DependentUpon>
<EmbeddedResource Include="Wizard\WindowCreateCdb.resx">
<DependentUpon>WindowCreateCdb.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Wizard\ProjectSetupWindow.resx">
<DependentUpon>ProjectSetupWindow.cs</DependentUpon>
@@ -257,6 +258,22 @@
<Project>{f592db46-0c77-470b-aaf8-80c51f44380e}</Project>
<Name>VCProjectEngineWrapperInterfaces</Name>
</ProjectReference>
<ProjectReference Include="..\VCProjectEngineWrapper\VCProjectEngineWrapperVs2012.csproj">
<Project>{c5439b90-42e7-414d-8c3f-bdcabb0592e2}</Project>
<Name>VCProjectEngineWrapperVs2012</Name>
</ProjectReference>
<ProjectReference Include="..\VCProjectEngineWrapper\VCProjectEngineWrapperVs2013.csproj">
<Project>{8718929c-5270-4e5a-8998-48ac7ce19dc2}</Project>
<Name>VCProjectEngineWrapperVs2013</Name>
</ProjectReference>
<ProjectReference Include="..\VCProjectEngineWrapper\VCProjectEngineWrapperVs2015.csproj">
<Project>{1c139999-9592-4891-aa62-2c8a16430d0a}</Project>
<Name>VCProjectEngineWrapperVs2015</Name>
</ProjectReference>
<ProjectReference Include="..\VCProjectEngineWrapper\VCProjectEngineWrapperVs2017.csproj">
<Project>{b49207f9-89a3-42d8-bc04-8bf77ed2e295}</Project>
<Name>VCProjectEngineWrapperVs2017</Name>
</ProjectReference>
</ItemGroup>
<PropertyGroup>
<UseCodebase>true</UseCodebase>
@@ -8,7 +8,7 @@
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<StartAction>Program</StartAction>
<StartProgram>D:\programme\Microsoft Visual Studio14\Common7\IDE\devenv.exe</StartProgram>
<StartProgram>D:\programme\Microsoft Visual Studio\2017\Community\Common7\IDE\devenv.exe</StartProgram>
<StartArguments>/rootsuffix Exp</StartArguments>
</PropertyGroup>
<PropertyGroup>
@@ -62,11 +62,11 @@
</Strings>
</Button>
<Button guid="guidSourcetrailPluginCmdSet" id="cmdidSourcetrailCreateCDB" priority="0x0100" type="Button">
<Button guid="guidSourcetrailPluginCmdSet" id="cmdidSourcetrailCreateCdb" priority="0x0100" type="Button">
<Parent guid="guidSourcetrailPluginCmdSet" id="SubMenu" />
<Icon guid="icon" id="icon0" />
<Strings>
<ButtonText>Create CDB</ButtonText>
<ButtonText>Create Compilation Database</ButtonText>
</Strings>
</Button>
@@ -129,8 +129,7 @@
<IDSymbol name="cmdidSourcetrailGetActiveFileName" value="0x0102"/>
<IDSymbol name="cmdidSourcetrailGetActiveLineNumber" value="0x0103"/>
<IDSymbol name="cmdidSourcetrailSetActiveToken" value="0x0104"/>
<IDSymbol name="cmdidSourcetrailCreateProject" value="0x0105"/>
<IDSymbol name="cmdidSourcetrailCreateCDB" value="0x0106"/>
<IDSymbol name="cmdidSourcetrailCreateCdb" value="0x0106"/>
<IDSymbol name="cmdidSourcetrailOpenLogFolder" value="0x0107"/>
<IDSymbol name="TopLevelMenu" value="0x1021"/>
<IDSymbol name="SubMenu" value="0x1022"/>
@@ -1,14 +1,12 @@
using System;
using EnvDTE;
using Microsoft.VisualStudio.Shell.Interop;
using Microsoft.VisualStudio.Shell;
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.ComponentModel.Design;
using Microsoft.VisualStudio.Shell.Interop;
using Microsoft.VisualStudio.Shell;
using System.Collections.Generic;
using EnvDTE;
using System.IO;
namespace CoatiSoftware.SourcetrailPlugin
{
@@ -122,15 +120,14 @@ namespace CoatiSoftware.SourcetrailPlugin
public sealed class SourcetrailPluginPackage : Package
{
private MenuCommand _menuItemSetActiveToken = null;
private MenuCommand _menuItemCreateProject = null;
private MenuCommand _menuItemCreateCDB = null;
private MenuCommand _menuItemCreateCdb = null;
private MenuCommand _menuItemOpenLogDir = null;
private SolutionEvents _solutionEvents = null;
private bool _validSolutionLoaded = false;
Utility.CompilationDatabaseList _cdbList = new Utility.CompilationDatabaseList();
Utility.CompilationDatabaseSettingsList _recentSettingsList = new Utility.CompilationDatabaseSettingsList();
public uint ServerPort
{
@@ -201,26 +198,22 @@ namespace CoatiSoftware.SourcetrailPlugin
// register the plugin UI elements
OleMenuCommandService mcs = GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
if ( null != mcs )
if (null != mcs)
{
CommandID setActiveTokenCommandID = new CommandID(GuidList.guidSourcetrailPluginCmdSet, (int)PkgCmdIDList.cmdidSourcetrailSetActiveToken);
CommandID createProjectID = new CommandID(GuidList.guidSourcetrailPluginCmdSet, (int)PkgCmdIDList.cmdidSourcetrailCreateProject);
CommandID createCDBID = new CommandID(GuidList.guidSourcetrailPluginCmdSet, (int)PkgCmdIDList.cmdidSourcetrailCreateCDB);
CommandID createCdbID = new CommandID(GuidList.guidSourcetrailPluginCmdSet, (int)PkgCmdIDList.cmdidSourcetrailCreateCdb);
CommandID openLogDirID = new CommandID(GuidList.guidSourcetrailPluginCmdSet, (int)PkgCmdIDList.cmdidSourcetrailOpenLogFolder);
_menuItemSetActiveToken = new MenuCommand(MenuItemCallback, setActiveTokenCommandID);
_menuItemCreateProject = new MenuCommand(MenuItemCallback, createProjectID);
_menuItemCreateCDB = new MenuCommand(MenuItemCallback, createCDBID);
_menuItemCreateCdb = new MenuCommand(MenuItemCallback, createCdbID);
_menuItemOpenLogDir = new MenuCommand(MenuItemCallback, openLogDirID);
_menuItemCreateProject.Enabled = false;
_menuItemSetActiveToken.Enabled = false;
_menuItemCreateCDB.Enabled = false;
_menuItemCreateCdb.Enabled = false;
_menuItemOpenLogDir.Enabled = true;
mcs.AddCommand(_menuItemSetActiveToken);
mcs.AddCommand(_menuItemCreateProject);
mcs.AddCommand(_menuItemCreateCDB);
mcs.AddCommand(_menuItemCreateCdb);
mcs.AddCommand(_menuItemOpenLogDir);
}
@@ -248,9 +241,9 @@ namespace CoatiSoftware.SourcetrailPlugin
string solutionPath = Utility.SolutionUtility.GetSolutionPath(dte);
if(_cdbList.CheckCDBForSolutionExists(solutionPath))
if(_recentSettingsList.CheckCdbForSolutionExists(solutionPath))
{
Logging.Logging.LogInfo("A CDB for the loaded solution already exists.");
Logging.Logging.LogInfo("A Cdb for the loaded solution already exists.");
}
bool enable = false;
@@ -268,8 +261,7 @@ namespace CoatiSoftware.SourcetrailPlugin
{
Logging.Logging.LogInfo("Enabling plugin UI");
_menuItemSetActiveToken.Enabled = true;
_menuItemCreateProject.Enabled = true;
_menuItemCreateCDB.Enabled = true;
_menuItemCreateCdb.Enabled = true;
_validSolutionLoaded = true;
}
@@ -292,8 +284,7 @@ namespace CoatiSoftware.SourcetrailPlugin
Logging.Logging.LogInfo("Solution closed, disabling plugin UI");
_menuItemSetActiveToken.Enabled = false;
_menuItemCreateProject.Enabled = false;
_menuItemCreateCDB.Enabled = false;
_menuItemCreateCdb.Enabled = false;
_validSolutionLoaded = false;
}
@@ -340,36 +331,36 @@ namespace CoatiSoftware.SourcetrailPlugin
{
DTE dte = (DTE)GetService(typeof(DTE));
Wizard.WindowCreateCDB createCDB = new Wizard.WindowCreateCDB();
createCDB.Projects = projects;
createCDB.ConfigurationName = configurationName;
createCDB.PlatformName = platformName;
createCDB.TargetDir = targetDir;
createCDB.FileName = fileName;
createCDB.CStandard = cStandard;
createCDB.ThreadCount = (int)ThreadCount;
createCDB.SolutionDir = Utility.SolutionUtility.GetSolutionPath(dte);
Wizard.WindowCreateCdb createCdbWindow = new Wizard.WindowCreateCdb();
createCdbWindow.Projects = projects;
createCdbWindow.ConfigurationName = configurationName;
createCdbWindow.PlatformName = platformName;
createCdbWindow.TargetDir = targetDir;
createCdbWindow.FileName = fileName;
createCdbWindow.CStandard = cStandard;
createCdbWindow.ThreadCount = (int)ThreadCount;
createCdbWindow.SolutionDir = Utility.SolutionUtility.GetSolutionPath(dte);
createCDB.CDB = _cdbList.GetCDBForSolution(createCDB.SolutionDir, targetDir + "\\" + fileName + ".json");
createCdbWindow.Cdb = _recentSettingsList.GetCdbForSolution(createCdbWindow.SolutionDir, targetDir + "\\" + fileName + ".json");
createCDB.CallbackOnFinishedCreatingCDB = HandleFinishedCDB;
createCdbWindow.CallbackOnFinishedCreatingCdb = HandleFinishedCdb;
createCDB.StartWorking();
createCDB.ShowDialog();
createCdbWindow.StartWorking();
createCdbWindow.ShowDialog();
}
private void HandleFinishedCDB(Wizard.WindowCreateCDB.CreationResult creationResult)
private void HandleFinishedCdb(Wizard.WindowCreateCdb.CreationResult creationResult)
{
if(creationResult._cdb != null && creationResult._cdbDirectory.Length > 0 && creationResult._cdbName.Length > 0)
if(creationResult._cdbSettings != null && creationResult._cdbDirectory.Length > 0 && creationResult._cdbName.Length > 0)
{
_cdbList.AppendOrUpdate(creationResult._cdb);
_cdbList.SaveMetaData();
_recentSettingsList.AppendOrUpdate(creationResult._cdbSettings);
_recentSettingsList.SaveMetaData();
Wizard.WindowCDBReady dialog = new Wizard.WindowCDBReady();
Wizard.WindowCdbReady dialog = new Wizard.WindowCdbReady();
dialog.setData(creationResult);
dialog.ShowDialog();
_cdbList.Refresh();
_recentSettingsList.Refresh();
}
else
{
@@ -397,20 +388,10 @@ namespace CoatiSoftware.SourcetrailPlugin
Utility.AsynchronousClient.Send(message);
}
else if(menuCommand.CommandID.ID == (int)PkgCmdIDList.cmdidSourcetrailCreateCDB)
else if(menuCommand.CommandID.ID == (int)PkgCmdIDList.cmdidSourcetrailCreateCdb)
{
CreateCompilationDatabase(dte);
}
else if(menuCommand.CommandID.ID == (int)PkgCmdIDList.cmdidSourcetrailCreateProject)
{
// show hint to use CDB methad (only for CDB beta) and create project on ok
Wizard.WindowMessage windowMessage = new Wizard.WindowMessage();
windowMessage.Title = "Hint";
windowMessage.Message = "Consider using 'Create CDB' if errors arise during Sourcetrail's indexing. This will become standard in the future.";
windowMessage.OnOK = CreateSourcetrailProjectOld;
windowMessage.RefreshWindow();
windowMessage.ShowDialog();
}
else if(menuCommand.CommandID.ID == (int)PkgCmdIDList.cmdidSourcetrailOpenLogFolder)
{
Utility.SystemUtility.OpenWindowsExplorerAtDirectory(Utility.DataUtility.GetStandardFolderDirectory());
@@ -418,35 +399,6 @@ namespace CoatiSoftware.SourcetrailPlugin
}
}
// will be removed once the CDB project creation is fully integrated
private void CreateSourcetrailProjectOld()
{
DTE dte = (DTE)GetService(typeof(DTE));
string solutionName = Utility.SolutionUtility.GetSolutionPath(dte);
if (solutionName == "") // TODO: make a better fallback for non-existant solution
{
List<string> items = Utility.SolutionUtility.GetSolutionProjectsFullNames(dte);
if (items.Count > 0)
{
solutionName = items[0];
}
}
if (solutionName.Length > 0)
{
string message = Utility.NetworkProtocolUtility.CreateCreateProjectMessage(solutionName);
Utility.AsynchronousClient.Send(message);
}
else
{
DisplayMessage("Sourcetrail", "Can not create a Sourcetrail Project. Please check whether your VS solution is a valid C or C++ solution and is saved.");
}
}
private void OnNetworkReadCallback(string message)
{
Utility.NetworkProtocolUtility.MESSAGE_TYPE messageType = Utility.NetworkProtocolUtility.GetMessageType(message);
@@ -542,17 +494,18 @@ namespace CoatiSoftware.SourcetrailPlugin
Guid clsid = Guid.Empty;
int result;
Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(uiShell.ShowMessageBox(
0,
ref clsid,
title,
message,
string.Empty,
0,
OLEMSGBUTTON.OLEMSGBUTTON_OK,
OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST,
OLEMSGICON.OLEMSGICON_INFO,
0, // false
out result));
0,
ref clsid,
title,
message,
string.Empty,
0,
OLEMSGBUTTON.OLEMSGBUTTON_OK,
OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST,
OLEMSGICON.OLEMSGICON_INFO,
0, // false
out result
));
}
private void CreateCompilationDatabase(DTE dte)
@@ -570,7 +523,7 @@ namespace CoatiSoftware.SourcetrailPlugin
bool containsCFiles = true; // Utility.SolutionUtility.ContainsCFiles(dte); // takes ridiculously long, I'd rather just display the option by default
window._containsCFiles = containsCFiles;
window._cdb = _cdbList.GetMostCurrentCDBForSolution(Utility.SolutionUtility.GetSolutionPath(dte));
window._cdb = _recentSettingsList.GetMostCurrentCdbForSolution(Utility.SolutionUtility.GetSolutionPath(dte));
window.UpdateGUI();
window._onCreateProject = OnCreateProject;
@@ -1,159 +0,0 @@
using System;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
namespace CoatiSoftware.SourcetrailPlugin.Utility
{
class CompilationDatabaseList
{
private List<SolutionParser.CompilationDatabase> _cdbs = new List<SolutionParser.CompilationDatabase>();
public List<SolutionParser.CompilationDatabase> CDBs
{
get { return _cdbs; }
// set { _cdbs = value; }
}
public CompilationDatabaseList()
{
Refresh();
}
public void AppendOrUpdate(SolutionParser.CompilationDatabase cdb)
{
if(_cdbs.Exists(item => item.Name == cdb.Name && item.Directory == cdb.Directory) == false)
{
_cdbs.Add(cdb);
}
else
{
int idx = _cdbs.FindIndex(item => item.Name == cdb.Name && item.Directory == cdb.Directory);
_cdbs[idx] = cdb;
}
}
public void Refresh()
{
List<SolutionParser.CompilationDatabase> cdbs = new List<SolutionParser.CompilationDatabase>();
try
{
string data = Utility.DataUtility.GetInstance().GetData();
cdbs = SolutionParser.CompilationDatabase.ParseCDBsMetaData(data);
foreach (SolutionParser.CompilationDatabase cdb in cdbs)
{
cdb.CheckCDBExists();
}
}
catch (Exception e)
{
Logging.Logging.LogError("Failed to aquire data: " + e.Message);
}
_cdbs = cdbs;
}
public List<SolutionParser.CompilationDatabase> GetCDBsForSolution(string solutionPath)
{
return _cdbs.FindAll(item => item.SourceProject == solutionPath);
}
public SolutionParser.CompilationDatabase GetCDBForSolution(string solutionPath)
{
return _cdbs.Find(item => item.SourceProject == solutionPath);
}
public SolutionParser.CompilationDatabase GetMostCurrentCDBForSolution(string solutionPath)
{
SolutionParser.CompilationDatabase result = null;
try
{
List<SolutionParser.CompilationDatabase> candidates = GetCDBsForSolution(solutionPath);
System.DateTime youngest = System.DateTime.MinValue;
foreach (SolutionParser.CompilationDatabase cdb in candidates)
{
if (cdb.LastUpdated >= youngest)
{
youngest = cdb.LastUpdated;
result = cdb;
}
}
}
catch(Exception e)
{
Logging.Logging.LogError("Failed to find cdb: " + e.Message);
}
return result;
}
public SolutionParser.CompilationDatabase GetCDBForSolution(string solutionPath, string cdbPath)
{
return _cdbs.Find(item => item.SourceProject == solutionPath && (item.Directory + "\\" + item.Name + ".json") == cdbPath);
}
public bool CheckCDBForSolutionExists(string solutionPath)
{
try
{
SolutionParser.CompilationDatabase cdb = GetCDBForSolution(solutionPath);
if (cdb != null && System.IO.File.Exists(cdb.Directory + "\\" + cdb.Name + ".json"))
{
return true;
}
}
catch(Exception e)
{
Logging.Logging.LogError("Failed to check cdb: " + e.Message);
}
return false;
}
public void SaveMetaData()
{
try
{
XmlDocument doc = new XmlDocument();
XmlNode root = doc.CreateElement("cdbs");
foreach (SolutionParser.CompilationDatabase cdb in _cdbs)
{
XmlNode metaData = cdb.GetMetaDataXML(doc);
root.AppendChild(metaData);
}
System.IO.StringWriter writer = new System.IO.StringWriter();
XmlSerializer serializer = new XmlSerializer(typeof(XmlElement));
serializer.Serialize(writer, root);
DataUtility.GetInstance().ClearData();
DataUtility.GetInstance().AppendData(writer.ToString());
}
catch(Exception e)
{
Logging.Logging.LogError("Failed to save meta data: " + e.Message);
}
}
public void UnloadCDBs()
{
if(_cdbs == null)
{
Logging.Logging.LogWarning("Member '_cdbs' is null, aborting.");
return;
}
foreach(SolutionParser.CompilationDatabase cdb in _cdbs)
{
cdb.ClearCommandObjects();
}
}
}
}
@@ -0,0 +1,145 @@
using CoatiSoftware.SourcetrailPlugin.SolutionParser;
using System;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
namespace CoatiSoftware.SourcetrailPlugin.Utility
{
class CompilationDatabaseSettingsList
{
private List<CompilationDatabaseSettings> _settings = new List<CompilationDatabaseSettings>();
public List<CompilationDatabaseSettings> Settings
{
get { return _settings; }
}
public CompilationDatabaseSettingsList()
{
Refresh();
}
public void AppendOrUpdate(CompilationDatabaseSettings cdb)
{
if(_settings.Exists(item => item.Name == cdb.Name && item.Directory == cdb.Directory) == false)
{
_settings.Add(cdb);
}
else
{
int idx = _settings.FindIndex(item => item.Name == cdb.Name && item.Directory == cdb.Directory);
_settings[idx] = cdb;
}
}
public void Refresh()
{
List<CompilationDatabaseSettings> cdbs = new List<CompilationDatabaseSettings>();
try
{
string data = Utility.DataUtility.GetInstance().GetData();
cdbs = CompilationDatabaseSettings.ParseCdbsMetaData(data);
foreach (CompilationDatabaseSettings cdb in cdbs)
{
cdb.CheckCdbExists();
}
}
catch (Exception e)
{
Logging.Logging.LogError("Failed to aquire data: " + e.Message);
}
_settings = cdbs;
}
public List<CompilationDatabaseSettings> GetCdbsForSolution(string solutionPath)
{
return _settings.FindAll(item => item.SourceProject == solutionPath);
}
public CompilationDatabaseSettings GetCdbForSolution(string solutionPath)
{
return _settings.Find(item => item.SourceProject == solutionPath);
}
public CompilationDatabaseSettings GetMostCurrentCdbForSolution(string solutionPath)
{
CompilationDatabaseSettings result = null;
try
{
List<CompilationDatabaseSettings> candidates = GetCdbsForSolution(solutionPath);
System.DateTime youngest = System.DateTime.MinValue;
foreach (CompilationDatabaseSettings cdb in candidates)
{
if (cdb.LastUpdated >= youngest)
{
youngest = cdb.LastUpdated;
result = cdb;
}
}
}
catch(Exception e)
{
Logging.Logging.LogError("Failed to find cdb: " + e.Message);
}
return result;
}
public CompilationDatabaseSettings GetCdbForSolution(string solutionPath, string cdbPath)
{
return _settings.Find(item => item.SourceProject == solutionPath && (item.Directory + "\\" + item.Name + ".json") == cdbPath);
}
public bool CheckCdbForSolutionExists(string solutionPath)
{
try
{
CompilationDatabaseSettings cdb = GetCdbForSolution(solutionPath);
if (cdb != null && System.IO.File.Exists(cdb.Directory + "\\" + cdb.Name + ".json"))
{
return true;
}
}
catch(Exception e)
{
Logging.Logging.LogError("Failed to check cdb: " + e.Message);
}
return false;
}
public void SaveMetaData()
{
try
{
XmlDocument doc = new XmlDocument();
XmlNode root = doc.CreateElement("cdbs");
foreach (CompilationDatabaseSettings cdb in _settings)
{
XmlNode metaData = cdb.GetMetaDataXML(doc);
root.AppendChild(metaData);
}
System.IO.StringWriter writer = new System.IO.StringWriter();
XmlSerializer serializer = new XmlSerializer(typeof(XmlElement));
serializer.Serialize(writer, root);
DataUtility.GetInstance().ClearData();
DataUtility.GetInstance().AppendData(writer.ToString());
}
catch(Exception e)
{
Logging.Logging.LogError("Failed to save meta data: " + e.Message);
}
}
}
}
@@ -1,5 +1,5 @@
using System;
using EnvDTE;
using EnvDTE;
using System;
namespace CoatiSoftware.SourcetrailPlugin.Utility
{
@@ -1,5 +1,5 @@
using System;
using VCProjectEngineWrapper;
using VCProjectEngineWrapper;
using System;
namespace CoatiSoftware.SourcetrailPlugin.Utility
{
@@ -1,8 +1,5 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CoatiSoftware.SourcetrailPlugin.Utility
{
@@ -12,12 +9,11 @@ namespace CoatiSoftware.SourcetrailPlugin.Utility
private static string s_setActiveTokenPrefix = "setActiveToken";
private static string s_moveCursorPrefix = "moveCursor";
private static string s_endOfMessageToken = "<EOM>";
private static string s_createProjectPrefix = "createProject"; // deprecate
private static string s_createCDBProjectPrefix = "createCDBProject";
private static string s_createCdbProjectPrefix = "createCDBProject";
private static string s_ideId = "vs";
private static string s_createCDBPrefix = "createCDB";
private static string s_createCdbPrefix = "createCDB";
private static string s_pingPrefix = "ping";
@@ -100,26 +96,9 @@ namespace CoatiSoftware.SourcetrailPlugin.Utility
return message;
}
public static string CreateCreateProjectMessage(string solutionPath)
{
string message = s_createProjectPrefix;
message += s_divider;
message += solutionPath;
message += s_divider;
message += s_ideId;
message += s_endOfMessageToken;
return message;
}
public static string CreateCreateProjectMessage(string cdbPath, List<string> headerPaths)
{
string message = s_createCDBProjectPrefix;
string message = s_createCdbProjectPrefix;
message += s_divider;
@@ -160,7 +139,7 @@ namespace CoatiSoftware.SourcetrailPlugin.Utility
if (tokens.Count > 0)
{
if (tokens[0] == s_createCDBPrefix)
if (tokens[0] == s_createCdbPrefix)
{
return MESSAGE_TYPE.CREATE_CDB;
}
@@ -1,9 +1,8 @@
using System;
using System.Text;
using System.Threading;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading;
namespace CoatiSoftware.SourcetrailPlugin.Utility
{
@@ -68,7 +68,6 @@ namespace CoatiSoftware.SourcetrailPlugin.Utility
}
_statusLock.ExitReadLock();
_statusLock.EnterWriteLock();
_working = true;
_workerThread = new Thread(new ThreadStart(Work));
@@ -125,39 +124,43 @@ namespace CoatiSoftware.SourcetrailPlugin.Utility
private void Commit()
{
_queueLock.EnterWriteLock();
Queue<string> tmpQueue = _inputQueue;
_inputQueue = _outputQueue;
_outputQueue = tmpQueue;
_queueLock.ExitWriteLock();
{
_queueLock.EnterWriteLock();
Queue<string> tmpQueue = _inputQueue;
_inputQueue = _outputQueue;
_outputQueue = tmpQueue;
_queueLock.ExitWriteLock();
}
WriteQueueToFile(ref _outputQueue);
}
private void WriteQueueToFile(ref Queue<string> messageQueue)
{
_fileLock.EnterWriteLock();
try
if (messageQueue.Count > 0)
{
while(messageQueue.Count > 0)
_fileLock.EnterWriteLock();
try
{
_messageWrittenCount++;
StreamWriter writer = System.IO.File.AppendText(_targetDirectory + "\\" + _fileName);
string message = messageQueue.Dequeue();
while (messageQueue.Count > 0)
{
_messageWrittenCount++;
writer.WriteLine(messageQueue.Dequeue());
}
File.AppendAllText(_targetDirectory + "\\" + _fileName, message);
writer.Close();
}
catch (Exception e)
{
Logging.Logging.LogError(e.Message);
}
finally
{
_fileLock.ExitWriteLock();
}
}
catch (Exception e)
{
Logging.Logging.LogError(e.Message);
}
finally
{
_fileLock.ExitWriteLock();
}
}
}
@@ -1,13 +1,10 @@
using System;
using EnvDTE;
using EnvDTE80;
using System;
using System.Collections.Generic;
using System.Linq;
using EnvDTE;
using EnvDTE80;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
using Microsoft.VisualStudio;
namespace CoatiSoftware.SourcetrailPlugin.Utility
{
@@ -17,238 +17,242 @@
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProjectSetupWindow));
this.buttonCancel = new System.Windows.Forms.Button();
this.buttonCreate = new System.Windows.Forms.Button();
this.comboBoxConfiguration = new System.Windows.Forms.ComboBox();
this.comboBoxPlatform = new System.Windows.Forms.ComboBox();
this.labelConfiguration = new System.Windows.Forms.Label();
this.labelPlatform = new System.Windows.Forms.Label();
this.buttonSelectAll = new System.Windows.Forms.Button();
this.labelSelectProject = new System.Windows.Forms.Label();
this.folderBrowserTargetDirectory = new System.Windows.Forms.FolderBrowserDialog();
this.textBoxTargetDirectory = new System.Windows.Forms.TextBox();
this.buttonSelect = new System.Windows.Forms.Button();
this.textBoxFileName = new System.Windows.Forms.TextBox();
this.labelFileName = new System.Windows.Forms.Label();
this.labelFileNameEnding = new System.Windows.Forms.Label();
this.helpProvider1 = new System.Windows.Forms.HelpProvider();
this.comboBoxCStandard = new System.Windows.Forms.ComboBox();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
this.labelCStandard = new System.Windows.Forms.Label();
this.treeViewProjects = new System.Windows.Forms.TreeView();
this.SuspendLayout();
//
// buttonCancel
//
this.helpProvider1.SetHelpString(this.buttonCancel, "Abort creation of the CDB");
this.buttonCancel.Location = new System.Drawing.Point(12, 413);
this.buttonCancel.Name = "buttonCancel";
this.helpProvider1.SetShowHelp(this.buttonCancel, true);
this.buttonCancel.Size = new System.Drawing.Size(92, 23);
this.buttonCancel.TabIndex = 9;
this.buttonCancel.Text = "Cancel";
this.toolTip1.SetToolTip(this.buttonCancel, "Abort creation of the CDB");
this.buttonCancel.UseVisualStyleBackColor = true;
this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click);
//
// buttonCreate
//
this.helpProvider1.SetHelpString(this.buttonCreate, "Start creation of the CDB");
this.buttonCreate.Location = new System.Drawing.Point(178, 413);
this.buttonCreate.Name = "buttonCreate";
this.helpProvider1.SetShowHelp(this.buttonCreate, true);
this.buttonCreate.Size = new System.Drawing.Size(92, 23);
this.buttonCreate.TabIndex = 8;
this.buttonCreate.Text = "Create";
this.toolTip1.SetToolTip(this.buttonCreate, "Start creation of the CDB");
this.buttonCreate.UseVisualStyleBackColor = true;
this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click);
//
// comboBoxConfiguration
//
this.comboBoxConfiguration.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxConfiguration.FormattingEnabled = true;
this.helpProvider1.SetHelpKeyword(this.comboBoxConfiguration, "Build configuration for CDB");
this.helpProvider1.SetHelpString(this.comboBoxConfiguration, "The selected build configuration determines the compile flags for the CDB");
this.comboBoxConfiguration.Location = new System.Drawing.Point(87, 277);
this.comboBoxConfiguration.Name = "comboBoxConfiguration";
this.helpProvider1.SetShowHelp(this.comboBoxConfiguration, true);
this.comboBoxConfiguration.Size = new System.Drawing.Size(183, 21);
this.comboBoxConfiguration.TabIndex = 3;
this.toolTip1.SetToolTip(this.comboBoxConfiguration, "The selected build configuration determines the compile flags for the CDB");
//
// comboBoxPlatform
//
this.comboBoxPlatform.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxPlatform.FormattingEnabled = true;
this.helpProvider1.SetHelpString(this.comboBoxPlatform, "The target platform determines some compiler flags included in the CDB");
this.comboBoxPlatform.Location = new System.Drawing.Point(87, 304);
this.comboBoxPlatform.Name = "comboBoxPlatform";
this.helpProvider1.SetShowHelp(this.comboBoxPlatform, true);
this.comboBoxPlatform.Size = new System.Drawing.Size(183, 21);
this.comboBoxPlatform.TabIndex = 4;
this.toolTip1.SetToolTip(this.comboBoxPlatform, "The target platform determines some compiler flags included in the CDB");
//
// labelConfiguration
//
this.labelConfiguration.AutoSize = true;
this.labelConfiguration.Location = new System.Drawing.Point(12, 280);
this.labelConfiguration.Name = "labelConfiguration";
this.labelConfiguration.Size = new System.Drawing.Size(69, 13);
this.labelConfiguration.TabIndex = 6;
this.labelConfiguration.Text = "Configuration";
//
// labelPlatform
//
this.labelPlatform.AutoSize = true;
this.labelPlatform.Location = new System.Drawing.Point(12, 307);
this.labelPlatform.Name = "labelPlatform";
this.labelPlatform.Size = new System.Drawing.Size(45, 13);
this.labelPlatform.TabIndex = 7;
this.labelPlatform.Text = "Platform";
//
// buttonSelectAll
//
this.helpProvider1.SetHelpString(this.buttonSelectAll, "Select all projects if not all are ticked. Deselect all otherwise");
this.buttonSelectAll.Location = new System.Drawing.Point(178, 248);
this.buttonSelectAll.Name = "buttonSelectAll";
this.helpProvider1.SetShowHelp(this.buttonSelectAll, true);
this.buttonSelectAll.Size = new System.Drawing.Size(92, 23);
this.buttonSelectAll.TabIndex = 2;
this.buttonSelectAll.Text = "De/Select All";
this.toolTip1.SetToolTip(this.buttonSelectAll, "Select all projects if not all are ticked. Deselect all otherwise");
this.buttonSelectAll.UseVisualStyleBackColor = true;
this.buttonSelectAll.Click += new System.EventHandler(this.buttonSelectAll_Click);
//
// labelSelectProject
//
this.labelSelectProject.AutoSize = true;
this.labelSelectProject.Location = new System.Drawing.Point(9, 9);
this.labelSelectProject.Name = "labelSelectProject";
this.labelSelectProject.Size = new System.Drawing.Size(78, 13);
this.labelSelectProject.TabIndex = 9;
this.labelSelectProject.Text = "Select Projects";
this.labelSelectProject.Click += new System.EventHandler(this.label1_Click);
//
// textBoxTargetDirectory
//
this.helpProvider1.SetHelpString(this.textBoxTargetDirectory, "Target directory where the CDB will be stored");
this.textBoxTargetDirectory.Location = new System.Drawing.Point(12, 333);
this.textBoxTargetDirectory.Name = "textBoxTargetDirectory";
this.helpProvider1.SetShowHelp(this.textBoxTargetDirectory, true);
this.textBoxTargetDirectory.Size = new System.Drawing.Size(177, 20);
this.textBoxTargetDirectory.TabIndex = 10;
this.toolTip1.SetToolTip(this.textBoxTargetDirectory, "Target directory where the CDB will be stored");
//
// buttonSelect
//
this.helpProvider1.SetHelpString(this.buttonSelect, "Pick a target directory via folder browser");
this.buttonSelect.Location = new System.Drawing.Point(195, 331);
this.buttonSelect.Name = "buttonSelect";
this.helpProvider1.SetShowHelp(this.buttonSelect, true);
this.buttonSelect.Size = new System.Drawing.Size(75, 23);
this.buttonSelect.TabIndex = 5;
this.buttonSelect.Text = "Browse";
this.toolTip1.SetToolTip(this.buttonSelect, "Pick a target directory via folder browser");
this.buttonSelect.UseVisualStyleBackColor = true;
this.buttonSelect.Click += new System.EventHandler(this.buttonSelect_Click);
//
// textBoxFileName
//
this.textBoxFileName.Location = new System.Drawing.Point(87, 360);
this.textBoxFileName.Name = "textBoxFileName";
this.textBoxFileName.Size = new System.Drawing.Size(148, 20);
this.textBoxFileName.TabIndex = 6;
this.textBoxFileName.TextChanged += new System.EventHandler(this.textBoxFileName_TextChanged);
this.textBoxFileName.Leave += new System.EventHandler(this.textBoxFileName_Leave);
//
// labelFileName
//
this.labelFileName.AutoSize = true;
this.labelFileName.Location = new System.Drawing.Point(12, 363);
this.labelFileName.Name = "labelFileName";
this.labelFileName.Size = new System.Drawing.Size(60, 13);
this.labelFileName.TabIndex = 13;
this.labelFileName.Text = "CDB Name";
//
// labelFileNameEnding
//
this.labelFileNameEnding.AutoSize = true;
this.labelFileNameEnding.Location = new System.Drawing.Point(241, 363);
this.labelFileNameEnding.Name = "labelFileNameEnding";
this.labelFileNameEnding.Size = new System.Drawing.Size(29, 13);
this.labelFileNameEnding.TabIndex = 14;
this.labelFileNameEnding.Text = ".json";
//
// comboBoxCStandard
//
this.comboBoxCStandard.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxCStandard.FormattingEnabled = true;
this.helpProvider1.SetHelpString(this.comboBoxCStandard, "Your Solution contains C Files. Please specify which C standard is to be used for" +
" building.");
this.comboBoxCStandard.Location = new System.Drawing.Point(87, 386);
this.comboBoxCStandard.Name = "comboBoxCStandard";
this.helpProvider1.SetShowHelp(this.comboBoxCStandard, true);
this.comboBoxCStandard.Size = new System.Drawing.Size(183, 21);
this.comboBoxCStandard.TabIndex = 7;
this.toolTip1.SetToolTip(this.comboBoxCStandard, "Your Solution contains C Files. Please specify which C standard is to be used for" +
" building.");
//
// labelCStandard
//
this.labelCStandard.AutoSize = true;
this.labelCStandard.Location = new System.Drawing.Point(12, 389);
this.labelCStandard.Name = "labelCStandard";
this.labelCStandard.Size = new System.Drawing.Size(60, 13);
this.labelCStandard.TabIndex = 16;
this.labelCStandard.Text = "C Standard";
//
// treeViewProjects
//
this.treeViewProjects.CheckBoxes = true;
this.treeViewProjects.Location = new System.Drawing.Point(12, 26);
this.treeViewProjects.Name = "treeViewProjects";
this.treeViewProjects.Size = new System.Drawing.Size(258, 216);
this.treeViewProjects.TabIndex = 17;
this.treeViewProjects.MouseUp += new System.Windows.Forms.MouseEventHandler(this.ProjectCheckList_MouseUp);
this.treeViewProjects.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.treeViewProjects_NodeCheckChanged);
//
// ProjectSetupWindow
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoSize = true;
this.ClientSize = new System.Drawing.Size(282, 443);
this.Controls.Add(this.treeViewProjects);
this.Controls.Add(this.labelCStandard);
this.Controls.Add(this.comboBoxCStandard);
this.Controls.Add(this.labelFileNameEnding);
this.Controls.Add(this.labelFileName);
this.Controls.Add(this.textBoxFileName);
this.Controls.Add(this.buttonSelect);
this.Controls.Add(this.textBoxTargetDirectory);
this.Controls.Add(this.labelSelectProject);
this.Controls.Add(this.buttonSelectAll);
this.Controls.Add(this.labelPlatform);
this.Controls.Add(this.labelConfiguration);
this.Controls.Add(this.comboBoxPlatform);
this.Controls.Add(this.comboBoxConfiguration);
this.Controls.Add(this.buttonCreate);
this.Controls.Add(this.buttonCancel);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.helpProvider1.SetHelpString(this, "Create a CDB from the current C++ solution.");
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "ProjectSetupWindow";
this.helpProvider1.SetShowHelp(this, true);
this.Text = "Create Compilation Database";
this.toolTip1.SetToolTip(this, "Create a CDB from the current C++ solution.");
this.ResumeLayout(false);
this.PerformLayout();
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProjectSetupWindow));
this.buttonCancel = new System.Windows.Forms.Button();
this.buttonCreate = new System.Windows.Forms.Button();
this.comboBoxConfiguration = new System.Windows.Forms.ComboBox();
this.comboBoxPlatform = new System.Windows.Forms.ComboBox();
this.labelConfiguration = new System.Windows.Forms.Label();
this.labelPlatform = new System.Windows.Forms.Label();
this.buttonSelectAll = new System.Windows.Forms.Button();
this.labelSelectProject = new System.Windows.Forms.Label();
this.folderBrowserTargetDirectory = new System.Windows.Forms.FolderBrowserDialog();
this.textBoxTargetDirectory = new System.Windows.Forms.TextBox();
this.buttonSelect = new System.Windows.Forms.Button();
this.textBoxFileName = new System.Windows.Forms.TextBox();
this.labelFileName = new System.Windows.Forms.Label();
this.labelFileNameExtension = new System.Windows.Forms.Label();
this.helpProvider1 = new System.Windows.Forms.HelpProvider();
this.comboBoxCStandard = new System.Windows.Forms.ComboBox();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
this.labelCStandard = new System.Windows.Forms.Label();
this.treeViewProjects = new System.Windows.Forms.TreeView();
this.SuspendLayout();
//
// buttonCancel
//
this.helpProvider1.SetHelpString(this.buttonCancel, "Abort creation of the Compilation Database");
this.buttonCancel.Location = new System.Drawing.Point(12, 413);
this.buttonCancel.Name = "buttonCancel";
this.helpProvider1.SetShowHelp(this.buttonCancel, true);
this.buttonCancel.Size = new System.Drawing.Size(92, 23);
this.buttonCancel.TabIndex = 9;
this.buttonCancel.Text = "Cancel";
this.toolTip1.SetToolTip(this.buttonCancel, "Abort creation of the Compilation Database");
this.buttonCancel.UseVisualStyleBackColor = true;
this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click);
//
// buttonCreate
//
this.helpProvider1.SetHelpString(this.buttonCreate, "Start creation of the Compilation Database");
this.buttonCreate.Location = new System.Drawing.Point(178, 413);
this.buttonCreate.Name = "buttonCreate";
this.helpProvider1.SetShowHelp(this.buttonCreate, true);
this.buttonCreate.Size = new System.Drawing.Size(92, 23);
this.buttonCreate.TabIndex = 8;
this.buttonCreate.Text = "Create";
this.toolTip1.SetToolTip(this.buttonCreate, "Start creation of the Compilation Database");
this.buttonCreate.UseVisualStyleBackColor = true;
this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click);
//
// comboBoxConfiguration
//
this.comboBoxConfiguration.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxConfiguration.FormattingEnabled = true;
this.helpProvider1.SetHelpKeyword(this.comboBoxConfiguration, "Build configuration for Compilation Database");
this.helpProvider1.SetHelpString(this.comboBoxConfiguration, "The selected build configuration determines the compile flags for the Compilation" +
" Database");
this.comboBoxConfiguration.Location = new System.Drawing.Point(87, 277);
this.comboBoxConfiguration.Name = "comboBoxConfiguration";
this.helpProvider1.SetShowHelp(this.comboBoxConfiguration, true);
this.comboBoxConfiguration.Size = new System.Drawing.Size(183, 21);
this.comboBoxConfiguration.TabIndex = 3;
this.toolTip1.SetToolTip(this.comboBoxConfiguration, "The selected build configuration determines the compile flags for the Compilation" +
" Database");
//
// comboBoxPlatform
//
this.comboBoxPlatform.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxPlatform.FormattingEnabled = true;
this.helpProvider1.SetHelpString(this.comboBoxPlatform, "The target platform determines some compiler flags included in the Compilation Da" +
"tabase");
this.comboBoxPlatform.Location = new System.Drawing.Point(87, 304);
this.comboBoxPlatform.Name = "comboBoxPlatform";
this.helpProvider1.SetShowHelp(this.comboBoxPlatform, true);
this.comboBoxPlatform.Size = new System.Drawing.Size(183, 21);
this.comboBoxPlatform.TabIndex = 4;
this.toolTip1.SetToolTip(this.comboBoxPlatform, "The target platform determines some compiler flags included in the Compilation Da" +
"tabase");
//
// labelConfiguration
//
this.labelConfiguration.AutoSize = true;
this.labelConfiguration.Location = new System.Drawing.Point(12, 280);
this.labelConfiguration.Name = "labelConfiguration";
this.labelConfiguration.Size = new System.Drawing.Size(69, 13);
this.labelConfiguration.TabIndex = 6;
this.labelConfiguration.Text = "Configuration";
//
// labelPlatform
//
this.labelPlatform.AutoSize = true;
this.labelPlatform.Location = new System.Drawing.Point(12, 307);
this.labelPlatform.Name = "labelPlatform";
this.labelPlatform.Size = new System.Drawing.Size(45, 13);
this.labelPlatform.TabIndex = 7;
this.labelPlatform.Text = "Platform";
//
// buttonSelectAll
//
this.helpProvider1.SetHelpString(this.buttonSelectAll, "Select all projects if not all are ticked. Deselect all otherwise");
this.buttonSelectAll.Location = new System.Drawing.Point(178, 248);
this.buttonSelectAll.Name = "buttonSelectAll";
this.helpProvider1.SetShowHelp(this.buttonSelectAll, true);
this.buttonSelectAll.Size = new System.Drawing.Size(92, 23);
this.buttonSelectAll.TabIndex = 2;
this.buttonSelectAll.Text = "De/Select All";
this.toolTip1.SetToolTip(this.buttonSelectAll, "Select all projects if not all are ticked. Deselect all otherwise");
this.buttonSelectAll.UseVisualStyleBackColor = true;
this.buttonSelectAll.Click += new System.EventHandler(this.buttonSelectAll_Click);
//
// labelSelectProject
//
this.labelSelectProject.AutoSize = true;
this.labelSelectProject.Location = new System.Drawing.Point(9, 9);
this.labelSelectProject.Name = "labelSelectProject";
this.labelSelectProject.Size = new System.Drawing.Size(78, 13);
this.labelSelectProject.TabIndex = 9;
this.labelSelectProject.Text = "Select Projects";
this.labelSelectProject.Click += new System.EventHandler(this.label1_Click);
//
// textBoxTargetDirectory
//
this.helpProvider1.SetHelpString(this.textBoxTargetDirectory, "Target directory where the Compilation Database will be stored");
this.textBoxTargetDirectory.Location = new System.Drawing.Point(12, 333);
this.textBoxTargetDirectory.Name = "textBoxTargetDirectory";
this.helpProvider1.SetShowHelp(this.textBoxTargetDirectory, true);
this.textBoxTargetDirectory.Size = new System.Drawing.Size(177, 20);
this.textBoxTargetDirectory.TabIndex = 10;
this.toolTip1.SetToolTip(this.textBoxTargetDirectory, "Target directory where the Compilation Database will be stored");
//
// buttonSelect
//
this.helpProvider1.SetHelpString(this.buttonSelect, "Pick a target directory via folder browser");
this.buttonSelect.Location = new System.Drawing.Point(195, 331);
this.buttonSelect.Name = "buttonSelect";
this.helpProvider1.SetShowHelp(this.buttonSelect, true);
this.buttonSelect.Size = new System.Drawing.Size(75, 23);
this.buttonSelect.TabIndex = 5;
this.buttonSelect.Text = "Browse";
this.toolTip1.SetToolTip(this.buttonSelect, "Pick a target directory via folder browser");
this.buttonSelect.UseVisualStyleBackColor = true;
this.buttonSelect.Click += new System.EventHandler(this.buttonSelect_Click);
//
// textBoxFileName
//
this.textBoxFileName.Location = new System.Drawing.Point(87, 360);
this.textBoxFileName.Name = "textBoxFileName";
this.textBoxFileName.Size = new System.Drawing.Size(148, 20);
this.textBoxFileName.TabIndex = 6;
this.textBoxFileName.TextChanged += new System.EventHandler(this.textBoxFileName_TextChanged);
this.textBoxFileName.Leave += new System.EventHandler(this.textBoxFileName_Leave);
//
// labelFileName
//
this.labelFileName.AutoSize = true;
this.labelFileName.Location = new System.Drawing.Point(12, 363);
this.labelFileName.Name = "labelFileName";
this.labelFileName.Size = new System.Drawing.Size(49, 13);
this.labelFileName.TabIndex = 13;
this.labelFileName.Text = "Filename";
//
// labelFileNameExtension
//
this.labelFileNameExtension.AutoSize = true;
this.labelFileNameExtension.Location = new System.Drawing.Point(241, 363);
this.labelFileNameExtension.Name = "labelFileNameExtension";
this.labelFileNameExtension.Size = new System.Drawing.Size(29, 13);
this.labelFileNameExtension.TabIndex = 14;
this.labelFileNameExtension.Text = ".json";
//
// comboBoxCStandard
//
this.comboBoxCStandard.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxCStandard.FormattingEnabled = true;
this.helpProvider1.SetHelpString(this.comboBoxCStandard, "In case your solution contains C files, please specify which C standard is to be " +
"used for building.");
this.comboBoxCStandard.Location = new System.Drawing.Point(87, 386);
this.comboBoxCStandard.Name = "comboBoxCStandard";
this.helpProvider1.SetShowHelp(this.comboBoxCStandard, true);
this.comboBoxCStandard.Size = new System.Drawing.Size(183, 21);
this.comboBoxCStandard.TabIndex = 7;
this.toolTip1.SetToolTip(this.comboBoxCStandard, "In case your solution contains C files, please specify which C standard is to be " +
"used for building.");
//
// labelCStandard
//
this.labelCStandard.AutoSize = true;
this.labelCStandard.Location = new System.Drawing.Point(12, 389);
this.labelCStandard.Name = "labelCStandard";
this.labelCStandard.Size = new System.Drawing.Size(60, 13);
this.labelCStandard.TabIndex = 16;
this.labelCStandard.Text = "C Standard";
//
// treeViewProjects
//
this.treeViewProjects.CheckBoxes = true;
this.treeViewProjects.Location = new System.Drawing.Point(12, 26);
this.treeViewProjects.Name = "treeViewProjects";
this.treeViewProjects.Size = new System.Drawing.Size(258, 216);
this.treeViewProjects.TabIndex = 17;
this.treeViewProjects.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.treeViewProjects_NodeCheckChanged);
this.treeViewProjects.MouseUp += new System.Windows.Forms.MouseEventHandler(this.ProjectCheckList_MouseUp);
//
// ProjectSetupWindow
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoSize = true;
this.ClientSize = new System.Drawing.Size(282, 443);
this.Controls.Add(this.treeViewProjects);
this.Controls.Add(this.labelCStandard);
this.Controls.Add(this.comboBoxCStandard);
this.Controls.Add(this.labelFileNameExtension);
this.Controls.Add(this.labelFileName);
this.Controls.Add(this.textBoxFileName);
this.Controls.Add(this.buttonSelect);
this.Controls.Add(this.textBoxTargetDirectory);
this.Controls.Add(this.labelSelectProject);
this.Controls.Add(this.buttonSelectAll);
this.Controls.Add(this.labelPlatform);
this.Controls.Add(this.labelConfiguration);
this.Controls.Add(this.comboBoxPlatform);
this.Controls.Add(this.comboBoxConfiguration);
this.Controls.Add(this.buttonCreate);
this.Controls.Add(this.buttonCancel);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.helpProvider1.SetHelpString(this, "Create a Compilation Database from the current C/C++ solution.");
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "ProjectSetupWindow";
this.helpProvider1.SetShowHelp(this, true);
this.Text = "Create Compilation Database";
this.toolTip1.SetToolTip(this, "Create a Compilation Database from the current C/C++ solution.");
this.ResumeLayout(false);
this.PerformLayout();
}
@@ -266,7 +270,7 @@
private System.Windows.Forms.Button buttonSelect;
private System.Windows.Forms.TextBox textBoxFileName;
private System.Windows.Forms.Label labelFileName;
private System.Windows.Forms.Label labelFileNameEnding;
private System.Windows.Forms.Label labelFileNameExtension;
private System.Windows.Forms.HelpProvider helpProvider1;
private System.Windows.Forms.ToolTip toolTip1;
private System.ComponentModel.BackgroundWorker backgroundWorker1;
@@ -1,8 +1,8 @@
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.IO;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace CoatiSoftware.SourcetrailPlugin.Wizard
{
@@ -39,7 +39,7 @@ namespace CoatiSoftware.SourcetrailPlugin.Wizard
"c9x", "gnu9x", "iso9899:199x", "c99", "gnu99", "iso9899:1999", "iso9899:199409", "c90", "gnu90", "iso9899:1990",
"c89", "gnu89" };
public SolutionParser.CompilationDatabase _cdb = new SolutionParser.CompilationDatabase();
public SolutionParser.CompilationDatabaseSettings _cdb = new SolutionParser.CompilationDatabaseSettings();
public ProjectSetupWindow()
{
@@ -168,23 +168,30 @@ namespace CoatiSoftware.SourcetrailPlugin.Wizard
private void InitTextBoxTargetDirectory()
{
Logging.Logging.LogInfo("Setting default target directory: \"" + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(_solutionDirectory) + "\"");
folderBrowserTargetDirectory.SelectedPath = _solutionDirectory;
string rootDirectory = folderBrowserTargetDirectory.SelectedPath.ToString();
textBoxTargetDirectory.Text = rootDirectory;
if (_cdb == null)
{
Logging.Logging.LogInfo("Setting default target directory to default: \"" + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(_solutionDirectory) + "\"");
folderBrowserTargetDirectory.SelectedPath = _solutionDirectory;
textBoxTargetDirectory.Text = _solutionDirectory;
}
else
{
Logging.Logging.LogInfo("Setting default target directory to recent: \"" + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(_cdb.Directory) + "\"");
folderBrowserTargetDirectory.SelectedPath = _cdb.Directory;
textBoxTargetDirectory.Text = _cdb.Directory;
}
}
private void InitTextBoxFileName()
{
Logging.Logging.LogInfo("Setting default file name: '" + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(_solutionFileName) + "'");
if(_cdb == null)
{
Logging.Logging.LogInfo("Setting file name to default: '" + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(_solutionFileName) + "'");
textBoxFileName.Text = _solutionFileName;
}
else
{
Logging.Logging.LogInfo("Setting file name to recent: '" + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(_cdb.Name) + "'");
textBoxFileName.Text = _cdb.Name;
}
}
@@ -252,7 +259,7 @@ namespace CoatiSoftware.SourcetrailPlugin.Wizard
if(result == DialogResult.No)
{
Logging.Logging.LogInfo("Aborting CDB creation and attempting to make file name unique.");
Logging.Logging.LogInfo("Aborting Cdb creation and attempting to make file name unique.");
MakeFileNameUnique();
return;
}
@@ -286,7 +293,7 @@ namespace CoatiSoftware.SourcetrailPlugin.Wizard
}
else
{
Logging.Logging.LogError("CDB create callback is not set. Cannot start creating CDB.");
Logging.Logging.LogError("Cdb create callback is not set. Cannot start creating Cdb.");
}
}
@@ -305,7 +312,7 @@ namespace CoatiSoftware.SourcetrailPlugin.Wizard
{
string fileName = textBoxFileName.Text;
string path = textBoxTargetDirectory.Text;
string extension = labelFileNameEnding.Text;
string extension = labelFileNameExtension.Text;
return File.Exists(path + "\\" + fileName + extension);
}
@@ -1,6 +1,6 @@
namespace CoatiSoftware.SourcetrailPlugin.Wizard
{
partial class WindowCDBReady
partial class WindowCdbReady
{
/// <summary>
/// Required designer variable.
@@ -28,7 +28,7 @@
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WindowCDBReady));
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WindowCdbReady));
this.label_message = new System.Windows.Forms.Label();
this.button_ok = new System.Windows.Forms.Button();
this.button_import = new System.Windows.Forms.Button();
@@ -80,7 +80,7 @@
this.button_open.UseVisualStyleBackColor = true;
this.button_open.Click += new System.EventHandler(this.button_open_Click);
//
// WindowCDBReady
// WindowCdbReady
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
@@ -92,9 +92,9 @@
this.Controls.Add(this.label_message);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MinimumSize = new System.Drawing.Size(330, 160);
this.Name = "WindowCDBReady";
this.Text = "CDB Ready";
this.Resize += new System.EventHandler(this.WindowCDBReady_Resize);
this.Name = "WindowCdbReady";
this.Text = "Cdb Ready";
this.Resize += new System.EventHandler(this.WindowCdbReady_Resize);
this.ResumeLayout(false);
}
@@ -1,24 +1,14 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CoatiSoftware.SourcetrailPlugin.Wizard
{
public partial class WindowCDBReady : Form
public partial class WindowCdbReady : Form
{
private string _message0 = "The CDB ";
private string _message1 = " was created at directory ";
private string _message2 = "Do you want to auto-import it in Sourcetrail now?";
private WindowCreateCdb.CreationResult _creationResult = new WindowCreateCdb.CreationResult();
private WindowCreateCDB.CreationResult _creationResult = new WindowCreateCDB.CreationResult();
public WindowCDBReady()
public WindowCdbReady()
{
InitializeComponent();
@@ -26,12 +16,13 @@ namespace CoatiSoftware.SourcetrailPlugin.Wizard
label_message.MaximumSize = new Size((int)((float)MaximumSize.Width * 0.8f), 0);
}
public void setData(WindowCreateCDB.CreationResult creationResult)
public void setData(WindowCreateCdb.CreationResult creationResult)
{
_creationResult = creationResult;
label_message.Text = _message0 + "'" + creationResult._cdbName + "'" + _message1 + "\"" + creationResult._cdbDirectory + "\".";
label_message.Text += "\n" + _message2;
label_message.Text = "The Compilation Database \"" + creationResult._cdbName +
"\" was created at directory \"" + creationResult._cdbDirectory + "\".\n" +
"Do you want to auto-import it in Sourcetrail now?";
}
private void button_ok_Click(object sender, EventArgs e)
@@ -53,7 +44,7 @@ namespace CoatiSoftware.SourcetrailPlugin.Wizard
Close();
}
private void WindowCDBReady_Resize(object sender, EventArgs e)
private void WindowCdbReady_Resize(object sender, EventArgs e)
{
label_message.MaximumSize = new Size((int)((float)MaximumSize.Width * 0.8f), 0);
}
@@ -1,6 +1,6 @@
namespace CoatiSoftware.SourcetrailPlugin.Wizard
{
partial class WindowCreateCDB
partial class WindowCreateCdb
{
/// <summary>
/// Required designer variable.
@@ -28,7 +28,7 @@
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WindowCreateCDB));
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WindowCreateCdb));
this.progressBar = new System.Windows.Forms.ProgressBar();
this.labelStatus = new System.Windows.Forms.Label();
this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
@@ -57,7 +57,7 @@
this.backgroundWorker1.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.backgroundWorker1_ProgressChanged);
this.backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);
//
// WindowCreateCDB
// WindowCreateCdb
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
@@ -67,9 +67,9 @@
this.Cursor = System.Windows.Forms.Cursors.WaitCursor;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "WindowCreateCDB";
this.Name = "WindowCreateCdb";
this.Text = "Creating Compilation Data Base";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.WindowCreateCDB_FormClosed);
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.WindowCreateCdb_FormClosed);
this.ResumeLayout(false);
this.PerformLayout();
@@ -1,27 +1,27 @@
using System;
using CoatiSoftware.SourcetrailPlugin.SolutionParser;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Threading.Tasks;
using System.Threading;
using System.Windows.Forms;
using CoatiSoftware.SourcetrailPlugin.SolutionParser;
namespace CoatiSoftware.SourcetrailPlugin.Wizard
{
public partial class WindowCreateCDB : Form
public partial class WindowCreateCdb : Form
{
public struct CreationResult
{
public SolutionParser.CompilationDatabase _cdb;
public SolutionParser.CompilationDatabaseSettings _cdbSettings;
public string _cdbDirectory;
public string _cdbName;
public List<string> _headerDirectories;
}
public delegate void OnFinishedCreatingCDB(CreationResult result);
public delegate void OnFinishedCreatingCdb(CreationResult result);
private OnFinishedCreatingCDB _onFinishedCreateCDB = null;
private OnFinishedCreatingCdb _onFinishedCreateCdb = null;
private List<EnvDTE.Project> _projects = new List<EnvDTE.Project>();
@@ -33,19 +33,19 @@ namespace CoatiSoftware.SourcetrailPlugin.Wizard
private string _solutionDir = "";
private List<string> _headerDirectories;
private SolutionParser.CompilationDatabase _cdb = null;
private SolutionParser.CompilationDatabaseSettings _cdb = null;
CreationResult _result = new CreationResult();
private CreationResult _result = new CreationResult();
private int _threadCount = 1;
private static object _lockObject = new object();
private static ReaderWriterLockSlim _readWriteLock = new ReaderWriterLockSlim();
public OnFinishedCreatingCDB CallbackOnFinishedCreatingCDB
public OnFinishedCreatingCdb CallbackOnFinishedCreatingCdb
{
get { return _onFinishedCreateCDB; }
set { _onFinishedCreateCDB = value; }
get { return _onFinishedCreateCdb; }
set { _onFinishedCreateCdb = value; }
}
public List<EnvDTE.Project> Projects
@@ -96,14 +96,14 @@ namespace CoatiSoftware.SourcetrailPlugin.Wizard
set { _solutionDir = value; }
}
public SolutionParser.CompilationDatabase CDB
public SolutionParser.CompilationDatabaseSettings Cdb
{
get { return _cdb; }
set { _cdb = value; }
}
public WindowCreateCDB()
public WindowCreateCdb()
{
InitializeComponent();
@@ -116,57 +116,51 @@ namespace CoatiSoftware.SourcetrailPlugin.Wizard
public void StartWorking()
{
// Show();
backgroundWorker1.RunWorkerAsync();
}
private CreationResult CreateCDB()
private CreationResult CreateCdb()
{
CreationResult result = new CreationResult();
result._cdb = null;
result._cdbSettings = null;
result._cdbDirectory = "";
result._cdbName = "";
result._headerDirectories = new List<string>();
Logging.Logging.LogInfo("Starting to create CDB");
SolutionParser.CompilationDatabase cdb = null;
SolutionParser.CompilationDatabaseSettings cdbSettings = null;
_headerDirectories = new List<string>();
try
{
System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
watch.Start();
cdb = CreateCommandObjects();
CreateCompilationDatabase();
watch.Stop();
Logging.Logging.LogInfo("Finished, elapsed time: " + watch.ElapsedMilliseconds.ToString() + " ms");
Logging.Logging.LogInfo("Finished creating CDB, elapsed time: " + watch.ElapsedMilliseconds.ToString() + " ms");
cdb.Name = _fileName;
cdb.Directory = _targetDir;
cdb.SourceProject = _solutionDir;
cdb.LastUpdated = DateTime.Now;
cdb.ConfigurationName = _configurationName;
cdb.PlatformName = _platformName;
cdbSettings = new CompilationDatabaseSettings();
cdbSettings.Name = _fileName;
cdbSettings.Directory = _targetDir;
cdbSettings.SourceProject = _solutionDir;
cdbSettings.LastUpdated = DateTime.Now;
cdbSettings.ConfigurationName = _configurationName;
cdbSettings.PlatformName = _platformName;
cdb.IncludedProjects = new List<string>();
cdbSettings.IncludedProjects = new List<string>();
foreach (EnvDTE.Project p in _projects)
{
cdb.IncludedProjects.Add(p.Name);
cdbSettings.IncludedProjects.Add(p.Name);
}
cdb.Clean();
}
catch(Exception e)
{
Logging.Logging.LogError("Failed to create CDB: " + e.Message);
}
result._cdb = cdb;
result._cdbSettings = cdbSettings;
result._cdbDirectory = _targetDir;
result._cdbName = _fileName;
result._headerDirectories = _headerDirectories;
@@ -176,17 +170,11 @@ namespace CoatiSoftware.SourcetrailPlugin.Wizard
return result;
}
private SolutionParser.CompilationDatabase CreateCommandObjects()
private void CreateCompilationDatabase()
{
SolutionParser.CompilationDatabase cdb = new SolutionParser.CompilationDatabase();
cdb.Directory = _targetDir;
cdb.Name = _fileName;
File.WriteAllText(_targetDir + "\\" + _fileName + ".json", "");
File.AppendAllText(_targetDir + "\\" + _fileName + ".json", "[\n");
// Mutex commandObjectMutex = new Mutex();
Utility.QueuedFileWriter fileWriter = new Utility.QueuedFileWriter(_fileName + ".json", _targetDir);
fileWriter.StartWorking();
@@ -221,9 +209,6 @@ namespace CoatiSoftware.SourcetrailPlugin.Wizard
foreach (CompileCommand command in commands)
{
// cdb.AddOrUpdateCommandObject(obj, false); // since the data is written to file right away now, no need to store it
// the cdb is however still needed to store some meta data later
string serializedCommand = "";
foreach (string line in command.SerializeToJson().Split('\n'))
{
@@ -262,13 +247,11 @@ namespace CoatiSoftware.SourcetrailPlugin.Wizard
{
File.AppendAllText(_targetDir + "\\" + _fileName + ".json", "\n]");
}
return cdb;
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
_result = CreateCDB();
_result = CreateCdb();
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
@@ -291,17 +274,17 @@ namespace CoatiSoftware.SourcetrailPlugin.Wizard
{
if(e.Cancelled == false && e.Error == null /*&& progressBar.Value >= 100*/)
{
_onFinishedCreateCDB?.Invoke(_result);
_onFinishedCreateCdb?.Invoke(_result);
}
else
{
Logging.Logging.LogWarning("CDB creation was aborted by user");
Logging.Logging.LogWarning("Cdb creation was aborted by user");
}
Close();
}
private void WindowCreateCDB_FormClosed(object sender, FormClosedEventArgs e)
private void WindowCreateCdb_FormClosed(object sender, FormClosedEventArgs e)
{
backgroundWorker1.CancelAsync();
}
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
<Metadata>
<Identity Id="acf15780-03b5-440e-a41e-db79b7043fc2" Version="0.9.82" Language="en-US" Publisher="Coati Software OG" />
<Identity Id="acf15780-03b5-440e-a41e-db79b7043fc2" Version="0.9.83" Language="en-US" Publisher="Coati Software OG" />
<DisplayName>SourcetrailPlugin</DisplayName>
<Description xml:space="preserve">The Sourcetrail Plugin allows Visual Studio to communicate with Sourcetrail - an external source code exploration tool. It also enables Visual Studio to generate a Clang Compilation Database from any Visual Studio Solution which can be used to automate the Sourcetrail project setup and to run other Clang based tools.</Description>
<MoreInfo>https://www.sourcetrail.com/</MoreInfo>
@@ -1,12 +1,12 @@
using System;
using CoatiSoftware.SourcetrailPlugin.IntegrationTests.Helpers;
using CoatiSoftware.SourcetrailPlugin.SolutionParser;
using EnvDTE;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.VSSDK.Tools.VsIdeTesting;
using Microsoft.VisualStudio.Shell.Interop;
using EnvDTE;
using CoatiSoftware.SourcetrailPlugin.SolutionParser;
using System.IO;
using CoatiSoftware.SourcetrailPlugin.IntegrationTests.Helpers;
using System;
using System.Collections.Generic;
using System.IO;
namespace CoatiSoftware.SourcetrailPlugin.IntegrationTests
{
@@ -44,7 +44,7 @@ namespace CoatiSoftware.SourcetrailPlugin.IntegrationTests
UIThreadInvoker.Initialize();
UIThreadInvoker.Invoke(new Action(() =>
{
TestCompilationDatabaseForSolution("../../../SourcetrailPlugin.IntegrationTests/bin/data/cinder/cinder.sln");
TestCompilationDatabaseForSolution("../../../SourcetrailPluginTests/bin/data/cinder/cinder.sln");
}));
}
@@ -55,7 +55,7 @@ namespace CoatiSoftware.SourcetrailPlugin.IntegrationTests
UIThreadInvoker.Initialize();
UIThreadInvoker.Invoke(new Action(() =>
{
TestCompilationDatabaseForSolution("../../../SourcetrailPlugin.IntegrationTests/bin/data/all_in_same_folder/test.sln");
TestCompilationDatabaseForSolution("../../../SourcetrailPluginTests/bin/data/all_in_same_folder/test.sln");
}));
}
@@ -83,6 +83,7 @@ namespace CoatiSoftware.SourcetrailPlugin.IntegrationTests
string cdbPath = Path.ChangeExtension(solutionPath, "json");
if (_updateExpectedOutput)
{
output.SortAlphabetically();
Console.WriteLine("writing compilation database to file: " + cdbPath);
File.WriteAllText(cdbPath, output.SerializeToJson());
Assert.IsTrue(File.Exists(cdbPath));
@@ -120,7 +121,7 @@ namespace CoatiSoftware.SourcetrailPlugin.IntegrationTests
project, configurationNames[0], platformNames[0], "c11"
))
{
cdb.AddCommandObject(command);
cdb.AddCompileCommand(command);
}
}
@@ -1,5 +1,5 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using CoatiSoftware.SourcetrailPlugin.SolutionParser;
using CoatiSoftware.SourcetrailPlugin.SolutionParser;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace CoatiSoftware.SourcetrailPlugin.IntegrationTests.UnitTests
{
@@ -31,10 +31,10 @@ namespace CoatiSoftware.SourcetrailPlugin.IntegrationTests.UnitTests
command.Command = "D test test.cpp";
CompilationDatabase cdb1 = new CompilationDatabase();
cdb1.AddCommandObject(command);
cdb1.AddCompileCommand(command);
CompilationDatabase cdb2 = new CompilationDatabase();
cdb2.AddCommandObject(command);
cdb2.AddCompileCommand(command);
Assert.IsTrue(cdb1 == cdb2);
}
@@ -48,7 +48,7 @@ namespace CoatiSoftware.SourcetrailPlugin.IntegrationTests.UnitTests
command.Command = "D DEFINE=\"value\" test.cpp";
CompilationDatabase originalCompilationDatabase = new CompilationDatabase();
originalCompilationDatabase.AddCommandObject(command);
originalCompilationDatabase.AddCompileCommand(command);
string serialized = originalCompilationDatabase.SerializeToJson();
CompilationDatabase deserializedCompilationDatabase = new CompilationDatabase();
+3 -3
View File
@@ -82,7 +82,7 @@ if [ $UPDATE_DATABASES = true ]; then
cd temp
echo -e "$INFO saving license key"
../build/win32/Release/app/Sourcetrail.exe -z ../script/license.txt
../build/win32/Release/app/Sourcetrail.exe -z ../setup/license.txt
echo -e "$INFO creating database for tictactoe"
../build/win32/Release/app/Sourcetrail.exe -p ../bin/app/user/projects/tictactoe/tictactoe.srctrlprj -d
@@ -135,7 +135,7 @@ cp -u -r ide_plugins/sublime_text/* $APP_PACKAGE_DIR_WIN32/plugins/sublime_text/
mkdir -p $APP_PACKAGE_DIR_WIN32/plugins/vim/
cp -u -r ide_plugins/vim/* $APP_PACKAGE_DIR_WIN32/plugins/vim/
mkdir -p $APP_PACKAGE_DIR_WIN32/plugins/visual_studio/
cp -u -r ide_plugins/vs/sourcetrail_plugin_vs.vsix $APP_PACKAGE_DIR_WIN32/plugins/visual_studio/
cp -u -r ide_plugins/vs/sourcetrail_plugin.vsix $APP_PACKAGE_DIR_WIN32/plugins/visual_studio/
echo -e "$INFO creating package folder for win64"
@@ -160,7 +160,7 @@ cp -u -r ide_plugins/sublime_text/* $APP_PACKAGE_DIR_WIN64/plugins/sublime_text/
mkdir -p $APP_PACKAGE_DIR_WIN64/plugins/vim/
cp -u -r ide_plugins/vim/* $APP_PACKAGE_DIR_WIN64/plugins/vim/
mkdir -p $APP_PACKAGE_DIR_WIN64/plugins/visual_studio/
cp -u -r ide_plugins/vs/sourcetrail_plugin_vs.vsix $APP_PACKAGE_DIR_WIN64/plugins/visual_studio/
cp -u -r ide_plugins/vs/sourcetrail_plugin.vsix $APP_PACKAGE_DIR_WIN64/plugins/visual_studio/
# PACKAGING SOURCETRAIL
-13
View File
@@ -1,13 +0,0 @@
-----BEGIN LICENSE-----
Malte Langkabel
Private/Academic Single User License
Coati 0
$9$AQAKVgXEpRqHfGMwWj/TA5YWrVmWWJrk5PmADbFYkewV7Ddvq+JV
nT+lDlImNpfRQDY4YTJDYc0B/IW5n8ccn21HqLkRvR5t8T5/GvUzRNZ
PnZfA/sE0tVBpS1IMEhUd5JIztHKXHFDdwcvIS7Z+y6vxn0knD0/VF4
RjvvgicxikAnfF9cNxTb3IYAaUSREFTPejX6JABSai0jJhZLR4P9upK
rj6OYFerGI2/+6D2UyBJhaAc2P3zcd2ivd01IRjJNeXlGA3r5mCcl5y
SuPtreW3Yyq/uafyP1rV6uASIb+3oV6Y+jTo1kFYqEh8tjmrxOHbJLu
3+wHyJgMu5fLhJFWAKyxPjVbY5A0nvQAb0F+ROSZZ5IiKKCYIcofcxt
HrBYDDdP0rJw==
-----END LICENSE-----
+1 -1
View File
@@ -22,5 +22,5 @@ export LD_LIBRARY_PATH="$SOURCETRAIL_PATH/lib:$LD_LIBRARY_PATH"
export QT_XKB_CONFIG_ROOT="/usr/share/X11/xkb:$QT_XKB_CONFIG_ROOT"
export QT_QPA_PLATFORM_PLUGIN_PATH="$SOURCETRAIL_PATH/lib/platforms"
export QT_QPA_FONTDIR="$SOURCETRAIL_PATH/data/fonts:$QT_QPA_FONTDIR"
export SOURCETRAIL_VIA_SCRIPT
export SOURCETRAIL_VIA_SCRIPT=1
exec "$SOURCETRAIL_PATH/Sourcetrail" $@
+5 -5
View File
@@ -1,7 +1,7 @@
SCRIPT_DIR="$( cd "$( dirname "$0" )" && pwd )"
MY_PATH=$SCRIPT_DIR/..
cat ${MY_PATH}/EULA.txt
cat "${MY_PATH}/EULA.txt"
echo "Agree to the EULA"
printf 'enter [y/n] '
read ans
@@ -9,10 +9,10 @@ case ${ans:=y} in [yY]*) ;; *) exit ;; esac
echo "Run this script as root"
cp -rf $MY_PATH/ /opt/sourcetrail/ > /dev/null
cp -rf $MY_PATH/setup/share/ /usr > /dev/null
cp $MY_PATH/data/gui/icon/logo_1024_1024.png /usr/share/icons/sourcetrail.png > /dev/null
cp $MY_PATH/data/gui/icon/project_256_256.png /usr/share/icons/project-sourcetrail.png > /dev/null
cp -rf "$MY_PATH/" /opt/sourcetrail/ > /dev/null
cp -rf "$MY_PATH/setup/share/" /usr > /dev/null
cp "$MY_PATH/data/gui/icon/logo_1024_1024.png" /usr/share/icons/sourcetrail.png > /dev/null
cp "$MY_PATH/data/gui/icon/project_256_256.png" /usr/share/icons/project-sourcetrail.png > /dev/null
update-mime-database /usr/share/mime > /dev/null
update-desktop-database > /dev/null
+30
View File
@@ -0,0 +1,30 @@
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFNTBfBgkqhkiG9w0BBQ0wUjAxBgkqhkiG9w0BBQwwJAQMaL23TLlJPBcUKzOV
AgMDNFACASAwDAYIKoZIhvcNAgkFADAdBglghkgBZQMEASoEEGE6+JCRFOJ3gax9
foofctUEggTQe8MrLN9r4JI+HyQbB1LgERCohoWW0DKhFaK56nnlWtG5mPJksGeF
F5jw2qwTgiHkDXR8swCqLpJbHQII0cAJ0XYrso7opAwdtSrUQTZ1v6PUdR50pgND
+UzbdRbcp/TLfPfpgYGU4484S0WoHWeP9AbeSs1s8244U36MZTfkQck18psH/c0+
lnxJHsUurLuclEhlql5bTaIkslEc6bhiWWBH9hvY+o1wRDpoOtAmgn25UsFb7FSJ
PIjDBSJZe9tJPfuuQ8ltvtzz/eo03UJU0BNBalK5dibOoACCi9EGObFn8812DSOb
0ZqBafsNCRwavkdOMVJ9GwMfhTJROhz9d9/CTxeFjVzpE0d+UJ1zbGXQDUYswsvG
pA2udPvWVi8Sd8at1Mob47UXRkf5PLRXFNmcEwTE4Ui9maYGhA/KnhSPQq9cn2CF
HRBgOwRJFR7f4E7BVgAUs6WCrsCL/RhTjnR3dwKAgO/QehVFMd3T9kJwijbk30un
ksjMcjWtuDsDveBuldxRMlXbN5Ia3C9vNvWN4S7SIlJ7eUb9SQDcRmcj54tu5K41
y8mrqgl9UtX7BxwgKUGP7O9vkQLTkBExNaI5xFLKRYgF0Xzz6xfAb2BawBD2LWZF
RpXPAoOexPN7fyUSPYnMZMzboPxyD30SE8uXXf4s00ZpBlnxNhzBnpUVTxohRJUV
Y4keHadJr6rmxZ/lfWEUIvTeKdVJdmfrExbGAnyEWUxUtZ/N5e1ufgPGy7V8ZuR3
7ghotzx6HJYTajFD8VRbmJ1tIT5C/O2wEqg/yka8b7cQ8xoul8CPyQJ/hVSy9RXV
1q4Epc/oQ0dkuLb1oCRbgdJncOR02JnWniRrq8sn+yv8qgoxqtjAL4ng3nry4MWT
oo17kjXCEq/mAKHdXLX/dGIA4nGAyQC8xumpMKIiOUHXUJkiAfAjZXkocNu0UXxS
VW9aK9MOJjT1g2cYlo9Az1MJtfeOlsEx6oxRpVE8OyfUPa4tUzPMpE8zG6xiFpEw
v7cdAj8M9g+iMA5E6UkcA9gGw95wnkvif0AZUWWWXVQxNBelHB43yfvZ7hzANo2S
MOPbwDJOwrHFX//dFZJeaYT8voNpnznFlbNcg2LqD6N5l+pQzpDnA+MQ/XgBoL7c
4TRsUtIyvXEMFYV/3O9hIEr6GwvjbzOQdEIZfvWbGYV6KnmOnCD+rq10AlBbjmAC
8C2TS0R5nPUH/SWPSp2m6+GmO1xj/reAkvQvPgWyzDoOTfuLOm0B21esn5txvN/C
wAnTq0RvpnUi/gDnoX4H2lkks2YoU+1v1TKVLG0x+YbV0VH9g0EngGF4PsAV7/qN
yf8uBwJKPXPz43SF1GJNN6RcQftYAVbb0TqNMljGNh2fgY3N3echMIAOxHgis98f
/QBjYWA7GEc8WkI+EHVAdqMb4l7zI36tsPAg7sUiF2EXZVN9P9aTwkmc71NNUnt5
x563kqnv0MFCOAZpq6zq+j7BVxUr6wJDO1Tzot4HfhKbiDeMPvkHUFQJep3UaVLk
fAYFD1I1fRZOufUBLcL01KD5RY9QbNI0ouUkQhpTZlDJsA8hSvOlQJyF54hJSkt3
BDAkUNz0dqt4kag4GKXN89GOv5fEEMZSkedRBYY5VmwrI+4i6yuXHx0=
-----END ENCRYPTED PRIVATE KEY-----
+9
View File
@@ -0,0 +1,9 @@
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArAldN+gG7p94WgnKH2Wq
XOOqYUcyGUB7GQY66DINxGoZVR9wkawxqGHEOvBaG7Zc469m/0Ox8sCNIt8oGywe
le0XdyGnVwJdq02lDp4lLYur3jq15BsApsQCqcOG9zkBX0v9sQhKVxVY5+m0B4v4
9i2kHB81k6A2yWvSduoswrBbCsUfAqRmcXwCwT1O6LKN6XRzuzKXXq440fOhZiGX
1MkkVTkVMDB/J3uSl63ZkeQIqKTA6mH6qiX0x+xF8VAEwMf/ZvxWtP3S1Ryxbszb
MrK/qJfc8Bzp+gJtM36ZgXFMNXL0DshdnI0qXh1+7P6UKekSUEvlbAi/UPnGGYwq
8wIDAQAB
-----END PUBLIC KEY-----
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+14 -11
View File
@@ -1,13 +1,16 @@
-----BEGIN LICENSE-----
builder
builder license
Coati 0
$9$AQAKIJ1UwEq5cZQujDjiHaO9R7B/KN9a6JVxppbOcZ4VSvEFRlSn
hBa0BMnyCdcL95VDSSC13m+BC/GTxweqaR2lBrF6NzVlIDeCjhBGv80
L5SBw8yaNRx9LOZAnwGWw2IG7lclSuraqECIqVE3o2ooFC4xSg9KC6F
4Xqq2Fw8rtPCJ3HwkLZzhMhQg208cdLlyOPXL/dPa1AqZiIar4cnF/0
sJDjxpk5C8CvpD4dq0JOs6Xs6KF8Uc7Gwp0UfnwQ0nlOl8TL63ukb8T
/70Rmzm5cnwM4iz+BdzfCVnhBgyLwCzJe+/5dF4KlVJxiW/f0GinsmU
byuZAQUqcCuVSxZXHBthmsLCN9ZWeAsR+Xvv9WRCs018nuk67BnZ5Aq
sdDRu0Q4GBEg==
Product: Sourcetrail
Licensed to: builder
License type: buildlicense
Valid up to version: 2020.1
-
$9$AQAKHf3pw5lZp/tlQHb7HlYpXvtz77zOWfLC3PKPSaV9gsZtgb9Q
lLkQVn8+OSMma5EN/aK5Dzb30t+EKSBBRyJ43LZRUOsgfVSXO0MRNdu
w9WfVuBA0spZ2TtXLF1r4lR9F9XYu2uZ//xcQ3rqFnH8udn2Jakeu55
CJz/slxam41ZRDVVJ6AIkfeUVkQdtTDLh+1bmuOZVPMBhkD3V5BHrgU
TgKYDiwl1HDMdhJIh7V0u/clGToZUL8aesGFr35HeaUKWWD9GeZDs2p
4PizzREzLwPvbwXMcHAxpNaKOPrk2uQzBlfCe0b+FzTNQvZEioPeHI1
oS1uX3ZtWa99l/iVe7P24tJOmalR0ripNhqu8i6GXaFyBD5ES3c7cqQ
OHRKWqZA4ypw==
-----END LICENSE-----
+6 -1
View File
@@ -132,7 +132,12 @@ int main(int argc, char *argv[])
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling, true);
}
Version version = Version::fromString(GIT_VERSION_NUMBER);
Version version(
VERSION_YEAR,
VERSION_MINOR,
VERSION_COMMIT,
GIT_COMMIT_HASH
);
QApplication::setApplicationVersion(version.toDisplayString().c_str());
MessageStatus("Starting Sourcetrail " + version.toDisplayString()).dispatch();
+1 -1
View File
@@ -378,7 +378,7 @@ void Application::updateTitle()
{
if (m_hasGUI)
{
std::string title = m_isInTrial ? "Sourcetrail Trial" : "Sourcetrail";
std::string title = m_isInTrial ? "Sourcetrail [Trial]" : "Sourcetrail";
if (m_project)
{
-2
View File
@@ -492,8 +492,6 @@ add_files(
utility/utilityUuid.h
utility/utilityXml.cpp
utility/utilityXml.h
utility/Version.cpp
utility/Version.h
Application.cpp
Application.h
+1 -1
View File
@@ -166,7 +166,7 @@ void LicenseChecker::handleMessage(MessageEnteredLicense* message)
LicenseChecker::LicenseState LicenseChecker::checkLicense(License& license) const
{
license.loadPublicKeyFromString(PublicKey);
license.loadPublicKeyFromString(PUBLIC_KEY);
if (license.isExpired())
{
@@ -268,9 +268,12 @@ void GraphController::handleMessage(MessageGraphNodeExpand* message)
if (m_graph && m_graph->getTrailMode() != Graph::TRAIL_NONE)
{
MessageActivateNodes msg;
msg.addNode(message->tokenId, m_storageAccess->getNameHierarchyForNodeId(message->tokenId));
msg.dispatch();
if (!message->isReplayed())
{
MessageActivateNodes msg;
msg.addNode(message->tokenId, m_storageAccess->getNameHierarchyForNodeId(message->tokenId));
msg.dispatch();
}
return;
}
@@ -548,6 +548,11 @@ void UndoRedoController::updateHistory()
index++;
SearchMatch match = getSearchMatchForMessage(it->message.get());
if (!match.text.size())
{
continue;
}
if (!firstActiveMessage)
{
firstActiveMessage = true;
@@ -567,20 +572,17 @@ void UndoRedoController::updateHistory()
}
}
if (match.text.size())
matches.push_back(match);
if (matches.size() > historySize)
{
matches.push_back(match);
matches.erase(matches.begin());
m_historyOffset++;
}
if (matches.size() > historySize)
{
matches.erase(matches.begin());
m_historyOffset++;
}
if (matches.size() == historySize && currentIndex != -1 && currentIndex - m_historyOffset != historySize - 1)
{
break;
}
if (matches.size() == historySize && currentIndex != -1 && currentIndex - m_historyOffset != historySize - 1)
{
break;
}
}
}
+2 -2
View File
@@ -19,12 +19,12 @@ size_t IndexerCommand::getByteSize() const
for (auto i : m_indexedPaths)
{
size += i.str().size();
size += sizeof(std::string) + i.str().size();
}
for (auto i : m_excludedPaths)
{
size += i.str().size();
size += sizeof(std::string) + i.str().size();
}
return size;
@@ -25,14 +25,15 @@ void InterprocessIndexer::work()
{
try
{
LOG_INFO_STREAM(<< m_processId << " Starting to index");
LOG_INFO_STREAM(<< m_processId << " starting up indexer");
std::shared_ptr<IndexerBase> indexer = IndexerFactory::getInstance()->createCompositeIndexerForAllRegisteredModules();
while (std::shared_ptr<IndexerCommand> indexerCommand = m_interprocessIndexerCommandManager.popIndexerCommand())
{
LOG_INFO_STREAM(<< m_processId << " Indexing " << indexerCommand->getSourceFilePath().str());
LOG_INFO_STREAM(<< m_processId << " Commands left: " << (m_interprocessIndexerCommandManager.indexerCommandCount() + 1));
LOG_INFO_STREAM(<< m_processId << " fetched indexer command for \"" << indexerCommand->getSourceFilePath().str() << "\"");
LOG_INFO_STREAM(<< m_processId << " indexer commands left: " << (m_interprocessIndexerCommandManager.indexerCommandCount() + 1));
LOG_INFO_STREAM(<< m_processId << " updating indexer status with currently indexed filepath");
m_interprocessIndexingStatusManager.startIndexingSourceFile(indexerCommand->getSourceFilePath());
FileRegisterStateData data;
@@ -42,13 +43,19 @@ void InterprocessIndexer::work()
data, indexerCommand->getSourceFilePath(), indexerCommand->getIndexedPaths(), indexerCommand->getExcludedPath()
);
LOG_INFO_STREAM(<< m_processId << " starting to index current file");
std::shared_ptr<IntermediateStorage> result = indexer->index(indexerCommand, fileRegister);
LOG_INFO_STREAM(<< m_processId << " finished indexing current file, updating indexer status");
m_interprocessIndexingStatusManager.addIndexedFiles(fileRegister->getStateData().getIndexedFiles());
LOG_INFO_STREAM(<< m_processId << " pushing index to shared memory");
m_interprocessIntermediateStorageManager.pushIntermediateStorage(result);
LOG_INFO_STREAM(<< m_processId << " finalizing indexer status for current file");
m_interprocessIndexingStatusManager.finishIndexingSourceFile();
LOG_INFO_STREAM(<< m_processId << " all done");
}
}
catch (boost::interprocess::interprocess_exception& e)
@@ -61,6 +68,10 @@ void InterprocessIndexer::work()
LOG_ERROR(e.what());
throw e;
}
catch (...)
{
LOG_ERROR("something went wrong while running the indexer");
}
LOG_INFO_STREAM(<< "Finished indexing");
LOG_INFO_STREAM(<< "shutting down indexer");
}
@@ -19,26 +19,27 @@ InterprocessIndexerCommandManager::~InterprocessIndexerCommandManager()
void InterprocessIndexerCommandManager::setIndexerCommands(
const std::vector<std::shared_ptr<IndexerCommand>>& indexerCommands)
{
const unsigned int overestimationMultiplier = 3;
const unsigned int overestimationMultiplier = 2;
size_t size = 1000;
size_t estimatedSize = 1048576; /* 1 MB */
for (auto command : indexerCommands)
{
size += command->getByteSize() + sizeof(SharedIndexerCommand);
estimatedSize += command->getByteSize() + sizeof(SharedIndexerCommand);
}
size *= overestimationMultiplier;
estimatedSize *= overestimationMultiplier;
SharedMemory::ScopedAccess access(&m_sharedMemory);
size_t freeMemory = access.getFreeMemorySize();
if (freeMemory <= size)
if (freeMemory < estimatedSize)
{
LOG_INFO_STREAM(
<< "grow memory - est: " << size << " size: " << access.getMemorySize()
<< " free: " << access.getFreeMemorySize() << " alloc: " << (size - freeMemory));
<< "grow memory - est: " << estimatedSize << " size: " << access.getMemorySize()
<< " free: " << access.getFreeMemorySize() << " alloc: " << (estimatedSize - freeMemory));
access.growMemory(size - freeMemory);
access.growMemory(estimatedSize - freeMemory);
LOG_INFO("growing memory succeeded");
}
SharedMemory::Queue<SharedIndexerCommand>* queue =
@@ -39,6 +39,28 @@ void InterprocessIndexingStatusManager::startIndexingSourceFile(const FilePath&
SharedMemory::Map<Id, SharedMemory::String>::iterator it = currentFilesPtr->find(getProcessId());
if (it != currentFilesPtr->end())
{
const int overestimationMultiplier = 2;
const std::string crashedFilePath = it->second.c_str();
size_t estimatedSize = 262144 + sizeof(std::string) + crashedFilePath.size();
estimatedSize *= overestimationMultiplier;
while (access.getFreeMemorySize() < estimatedSize)
{
LOG_INFO_STREAM(
<< "grow memory - est: " << estimatedSize << " size: " << access.getMemorySize()
<< " free: " << access.getFreeMemorySize() << " alloc: " << (access.getMemorySize()));
access.growMemory(access.getMemorySize());
LOG_INFO("growing memory succeeded");
currentFilesPtr = access.accessValueWithAllocator<SharedMemory::Map<Id, SharedMemory::String>>(s_currentFilesKeyName);
if (!currentFilesPtr)
{
return;
}
}
SharedMemory::Vector<SharedMemory::String>* crashedFilesPtr =
access.accessValueWithAllocator<SharedMemory::Vector<SharedMemory::String>>(s_crashedFilesKeyName);
@@ -164,43 +186,58 @@ std::set<FilePath> InterprocessIndexingStatusManager::getIndexedFiles()
void InterprocessIndexingStatusManager::addIndexedFiles(std::set<FilePath> filePaths)
{
const unsigned int overestimationMultiplier = 3;
const unsigned int overestimationMultiplier = 2;
SharedMemory::ScopedAccess access(&m_sharedMemory);
SharedMemory::Vector<SharedMemory::String>* files =
SharedMemory::Vector<SharedMemory::String>* indexedFiles =
access.accessValueWithAllocator<SharedMemory::Vector<SharedMemory::String>>(s_indexedFilesKeyName);
if (!files)
if (!indexedFiles)
{
return;
}
for (auto file : *files)
std::set<std::string> oldFiles;
for (auto indexedFile : *indexedFiles)
{
filePaths.insert(FilePath(file.c_str()));
oldFiles.insert(indexedFile.c_str());
}
files->clear();
size_t size = 1000;
for (auto path : filePaths)
std::set<std::string> newFiles;
for (const FilePath& filePath : filePaths)
{
size += sizeof(std::string) + path.str().size();
if (oldFiles.find(filePath.str()) == oldFiles.end())
{
newFiles.insert(filePath.str());
}
}
size *= overestimationMultiplier;
size_t freeMemory = access.getFreeMemorySize();
if (freeMemory <= size)
size_t estimatedSize = 262144;
for (auto newFile : newFiles)
{
estimatedSize += sizeof(std::string) + newFile.size();
}
estimatedSize *= overestimationMultiplier;
while (access.getFreeMemorySize() < estimatedSize)
{
LOG_INFO_STREAM(
<< "grow memory - est: " << size << " size: " << access.getMemorySize()
<< " free: " << access.getFreeMemorySize() << " alloc: " << (size - freeMemory));
access.growMemory(size - freeMemory);
<< "grow memory - est: " << estimatedSize << " size: " << access.getMemorySize()
<< " free: " << access.getFreeMemorySize() << " alloc: " << (access.getMemorySize()));
access.growMemory(access.getMemorySize());
LOG_INFO("growing memory succeeded");
indexedFiles = access.accessValueWithAllocator<SharedMemory::Vector<SharedMemory::String>>(s_indexedFilesKeyName);
if (!indexedFiles)
{
return;
}
}
for (auto path : filePaths)
for (const std::string& newFile: newFiles)
{
files->push_back(SharedMemory::String(path.str().c_str(), access.getAllocator()));
indexedFiles->push_back(SharedMemory::String(newFile.c_str(), access.getAllocator()));
}
LOG_INFO(access.logString());
@@ -13,7 +13,7 @@ InterprocessIntermediateStorageManager::InterprocessIntermediateStorageManager(
)
: BaseInterprocessDataManager(
s_sharedMemoryNamePrefix + std::to_string(processId) + "_" + instanceUuid,
1048576 /* 1 MB */,
3 * 1048576 /* 3 MB */,
instanceUuid,
processId,
isOwner)
@@ -27,19 +27,21 @@ InterprocessIntermediateStorageManager::~InterprocessIntermediateStorageManager(
void InterprocessIntermediateStorageManager::pushIntermediateStorage(
const std::shared_ptr<IntermediateStorage>& intermediateStorage)
{
const unsigned int overestimationMultiplier = 3;
size_t size = intermediateStorage->getByteSize() * overestimationMultiplier;
const unsigned int overestimationMultiplier = 3;
size_t size = (intermediateStorage->getByteSize() + sizeof(SharedIntermediateStorage))* overestimationMultiplier + 1048576/* 1 MB */;
SharedMemory::ScopedAccess access(&m_sharedMemory);
size_t freeMemory = access.getFreeMemorySize();
if (freeMemory <= size)
if (freeMemory < size)
{
LOG_INFO_STREAM(
<< "grow memory - est: " << size << " size: " << access.getMemorySize()
<< " free: " << access.getFreeMemorySize() << " alloc: " << (size - freeMemory));
access.growMemory(size - freeMemory);
LOG_INFO("growing memory succeeded");
}
SharedMemory::Queue<SharedIntermediateStorage>* queue =
@@ -97,6 +99,7 @@ std::shared_ptr<IntermediateStorage> InterprocessIntermediateStorageManager::pop
storage->setNextId(sharedIntermediateStorage.getNextId());
queue->pop_front();
LOG_INFO(access.logString());
return storage;
}
@@ -198,6 +198,7 @@ void SharedIndexerCommand::setLanguageStandard(const std::string& languageStanda
std::vector<std::string> SharedIndexerCommand::getCompilerFlags() const
{
std::vector<std::string> result;
result.reserve(m_compilerFlags.size());
for (unsigned int i = 0; i < m_compilerFlags.size(); i++)
{
@@ -210,6 +211,7 @@ std::vector<std::string> SharedIndexerCommand::getCompilerFlags() const
void SharedIndexerCommand::setCompilerFlags(const std::vector<std::string>& compilerFlags)
{
m_compilerFlags.clear();
m_compilerFlags.reserve(compilerFlags.size());
for (unsigned int i = 0; i < compilerFlags.size(); i++)
{
@@ -222,6 +224,7 @@ void SharedIndexerCommand::setCompilerFlags(const std::vector<std::string>& comp
std::vector<FilePath> SharedIndexerCommand::getSystemHeaderSearchPaths() const
{
std::vector<FilePath> result;
result.reserve(m_systemHeaderSearchPaths.size());
for (unsigned int i = 0; i < m_systemHeaderSearchPaths.size(); i++)
{
@@ -234,6 +237,7 @@ std::vector<FilePath> SharedIndexerCommand::getSystemHeaderSearchPaths() const
void SharedIndexerCommand::setSystemHeaderSearchPaths(const std::vector<FilePath>& filePaths)
{
m_systemHeaderSearchPaths.clear();
m_systemHeaderSearchPaths.reserve(filePaths.size());
for (unsigned int i = 0; i < filePaths.size(); i++)
{
@@ -246,6 +250,7 @@ void SharedIndexerCommand::setSystemHeaderSearchPaths(const std::vector<FilePath
std::vector<FilePath> SharedIndexerCommand::getFrameworkSearchhPaths() const
{
std::vector<FilePath> result;
result.reserve(m_frameworkSearchPaths.size());
for (unsigned int i = 0; i < m_frameworkSearchPaths.size(); i++)
{
@@ -258,6 +263,7 @@ std::vector<FilePath> SharedIndexerCommand::getFrameworkSearchhPaths() const
void SharedIndexerCommand::setFrameworkSearchhPaths(const std::vector<FilePath>& searchPaths)
{
m_frameworkSearchPaths.clear();
m_frameworkSearchPaths.reserve(searchPaths.size());
for (unsigned int i = 0; i < searchPaths.size(); i++)
{
@@ -280,6 +286,7 @@ void SharedIndexerCommand::setPreprocessorOnly(bool preprocessorOnly)
std::vector<FilePath> SharedIndexerCommand::getClassPaths() const
{
std::vector<FilePath> result;
result.reserve(m_classPaths.size());
for (unsigned int i = 0; i < m_classPaths.size(); i++)
{
@@ -292,6 +299,7 @@ std::vector<FilePath> SharedIndexerCommand::getClassPaths() const
void SharedIndexerCommand::setClassPaths(const std::vector<FilePath>& classPaths)
{
m_classPaths.clear();
m_classPaths.reserve(classPaths.size());
for (unsigned int i = 0; i < classPaths.size(); i++)
{
+11 -11
View File
@@ -46,7 +46,7 @@ ProjectSettings::ProjectSettings(const FilePath& projectFilePath)
ProjectSettings::ProjectSettings(std::string projectName, const FilePath& projectFileLocation)
{
setFilePath(FilePath(projectFileLocation.str() + "/" + projectName + PROJECT_FILE_EXTENSION));
setProjectFilePath(projectName, projectFileLocation);
}
ProjectSettings::~ProjectSettings()
@@ -105,26 +105,26 @@ bool ProjectSettings::reload()
return Settings::load(getFilePath());
}
FilePath ProjectSettings::getProjectFilePath() const
{
return getFilePath();
}
void ProjectSettings::setProjectFilePath(std::string projectName, const FilePath& projectFileLocation)
{
setFilePath(FilePath(projectFileLocation.str() + "/" + projectName + PROJECT_FILE_EXTENSION));
}
std::string ProjectSettings::getProjectName() const
{
return getFilePath().withoutExtension().fileName();
}
void ProjectSettings::setProjectName(const std::string& name)
{
setFilePath(FilePath(getProjectFileLocation().str() + "/" + name + PROJECT_FILE_EXTENSION));
}
FilePath ProjectSettings::getProjectFileLocation() const
{
return getFilePath().parentDirectory();
}
void ProjectSettings::setProjectFileLocation(const FilePath& location)
{
setFilePath(FilePath(location.str() + "/" + getProjectName() + PROJECT_FILE_EXTENSION));
}
std::string ProjectSettings::getDescription() const
{
return getValue<std::string>("description", "");
+3 -3
View File
@@ -29,11 +29,11 @@ public:
bool reload();
std::string getProjectName() const;
void setProjectName(const std::string& name);
FilePath getProjectFilePath() const;
void setProjectFilePath(std::string projectName, const FilePath& projectFileLocation);
std::string getProjectName() const;
FilePath getProjectFileLocation() const;
void setProjectFileLocation(const FilePath& location);
std::string getDescription() const;
-84
View File
@@ -1,84 +0,0 @@
#include "utility/Version.h"
#include "utility/utilityString.h"
#include "utility/logging/logging.h"
Version Version::s_version;
Version Version::fromString(const std::string& versionString)
{
Version version;
std::vector<std::string> components = utility::splitToVector(versionString, '-');
if (components.size() != 3)
{
LOG_ERROR("Version string is invalid: " + versionString);
return version;
}
std::vector<std::string> numbers = utility::splitToVector(components[0], '.');
if (numbers.size() > 0)
{
version.m_majorNumber = std::stoi(numbers[0]);
}
if (numbers.size() > 1)
{
version.m_minorNumber = std::stoi(numbers[1]);
}
if (numbers.size() > 2)
{
version.m_refreshNumber = std::stoi(numbers[2]);
}
version.m_commitNumber = std::stoi(components[1]);
version.m_commitHash = components[2];
return version;
}
void Version::setApplicationVersion(const Version& version)
{
s_version = version;
}
const Version& Version::getApplicationVersion()
{
return s_version;
}
Version::Version()
: m_majorNumber(0)
, m_minorNumber(0)
, m_refreshNumber(-1)
, m_commitNumber(0)
{
}
bool Version::isEmpty() const
{
return m_majorNumber == 0 && m_minorNumber == 0 && m_refreshNumber == -1 && m_commitNumber == 0;
}
std::string Version::toString() const
{
std::stringstream ss;
ss << m_majorNumber << '.' << m_minorNumber;
if (m_refreshNumber != -1)
{
ss << '.' << m_refreshNumber;
}
ss << '-' << m_commitNumber << '-' << m_commitHash;
return ss.str();
}
std::string Version::toDisplayString() const
{
std::stringstream ss;
ss << m_majorNumber << '.' << m_minorNumber;
if (m_refreshNumber != -1)
{
ss << '.' << m_refreshNumber;
}
ss << '.' << m_commitNumber;
return ss.str();
}
@@ -110,7 +110,7 @@ void CommandLineParser::processLicense(const bool isLoaded)
{
std::cout << "Could not load License" << std::endl;
}
m_license.loadPublicKeyFromString(PublicKey);
m_license.loadPublicKeyFromString(PUBLIC_KEY);
if (!m_license.isValid())
{
std::cout << "License is not valid" << std::endl;
+1 -1
View File
@@ -9,6 +9,6 @@ namespace utility
boost::uuids::uuid getUuid();
std::string uuidToString(const boost::uuids::uuid& uuid);
std::string getUuidString();
};
}
#endif // UTILITY_UUID_H

Some files were not shown because too many files have changed in this diff Show More