diff --git a/Build/Packaging.targets b/Build/Packaging.targets index 8c58ace1b4513eea95338b41735d0b409b24a22d..2d57de687171b089a23d2c62c046e1f6256b4742 100644 --- a/Build/Packaging.targets +++ b/Build/Packaging.targets @@ -56,7 +56,7 @@ <Target Name="AfterBuild" Condition="$(Configuration) == 'Deploy'"> <ItemGroup> <VectoCoreAssembly Include="$(OutputPath)VectoCore.dll" /> - <VectoCommandLine Include="$(SolutionDir)VectoConsole\bin\Deploy\vectocmd.exe*"/> + <VectoCommandLine Include="$(SolutionDir)VectoConsole\bin\Release\vectocmd.exe*"/> <GenericVehicles Include="$(SolutionDir)Generic Vehicles\**\*.*" Exclude="$(SolutionDir)**\*.vmod;$(SolutionDir)**\*.vsum;$(SolutionDir)**\*RSLT_*.xml;$(SolutionDir)**\*.pdf"/> <MissionProfiles Include="$(SolutionDir)VectoCore\VectoCore\Resources\Declaration\MissionCycles\**\*.*"/> @@ -72,7 +72,7 @@ <UserManual Include="$(SolutionDir)Documentation\Cdv_Generator_VECTO3.2.xlsx"/> <ReleaseNotes Include="$(SolutionDir)Documentation\User Manual Source\Release Notes Vecto3.x.pdf"/> - <HashingTool Include="$(SolutionDir)HashingTool\bin\Deploy\HashingTool.exe"/> + <HashingTool Include="$(SolutionDir)HashingTool\bin\Release\HashingTool.exe"/> <HashingTool Include="$(SolutionDir)VectoCommon\VectoHashing\bin\Release\VectoHashing.XML"/> <HashingTool Include="$(SolutionDir)HashingCmd\bin\Release\hashingcmd.exe"/> </ItemGroup> diff --git a/Documentation/Checklist_Release_VECTO_3.3.0.1250.docx b/Documentation/Checklist_Release_VECTO_3.3.0.1250.docx new file mode 100644 index 0000000000000000000000000000000000000000..a51a816b062a576487f34f3d7cbb51d69778f876 Binary files /dev/null and b/Documentation/Checklist_Release_VECTO_3.3.0.1250.docx differ diff --git a/Documentation/User Manual Source/Release Notes Vecto3.x.pdf b/Documentation/User Manual Source/Release Notes Vecto3.x.pdf index f5c86ddbcef258fdd7ea2435a699e1661c8010e2..c8e2dafb6654057a2b4646da117aefa84bd3ce33 100644 Binary files a/Documentation/User Manual Source/Release Notes Vecto3.x.pdf and b/Documentation/User Manual Source/Release Notes Vecto3.x.pdf differ diff --git a/Documentation/User Manual Source/Release Notes Vecto3.x.pptx b/Documentation/User Manual Source/Release Notes Vecto3.x.pptx index 737f4eb1964cece32025967014dce2fd38489e89..2f96aca28965e7fc7c3eda73b7a463444d0cf677 100644 Binary files a/Documentation/User Manual Source/Release Notes Vecto3.x.pptx and b/Documentation/User Manual Source/Release Notes Vecto3.x.pptx differ diff --git a/Documentation/User Manual/1-user-interface/0_start.md b/Documentation/User Manual/1-user-interface/0_start.md index b6f350d9eeb520c78f8545579b2cb621ff28ae3b..8962a35db8bc27aa1637bde6a067dbfb434dd1c3 100644 --- a/Documentation/User Manual/1-user-interface/0_start.md +++ b/Documentation/User Manual/1-user-interface/0_start.md @@ -16,7 +16,7 @@ User Manual ==================================== \ \ -Version: VECTO 3.2 / VectoCore 3.2.0 / VectoCmd 3.2.0 +Version: VECTO 3.3 / VectoCore 3.3.0 / VectoCmd 3.3.0 --- @@ -34,6 +34,6 @@ This User Manual consists of 4 Parts: - [Input and Output](#input-and-output): : Describes the input and output file formats. -This user manual describes verson 3.2.x of Vecto. +This user manual describes verson 3.3.x of Vecto. diff --git a/Documentation/User Manual/2-calculation-modes/verification-test.md b/Documentation/User Manual/2-calculation-modes/verification-test.md index 45356638f5b6573183a6f44100b4806940d52a06..a1beecf8775824d92e6bc2aecf0759a5b5c2f5ff 100644 --- a/Documentation/User Manual/2-calculation-modes/verification-test.md +++ b/Documentation/User Manual/2-calculation-modes/verification-test.md @@ -2,6 +2,7 @@ The purpose of the verification test is to simulate a vehicle defined in declaration mode on a measured real-driving cycle. This simulation mode uses its own [cyle format](#verification-test-cycle), requiring mainly vehicle speed, wheel speed, wheel torque, engine-fan speed, and engine speed. VECTO then calculates the appropriate gear and simulates the cycle. Auxiliary power is according to the technologies defined in the vehicle. However, the engine fan auxiliary is ignored and the power demand for the engine fan is calcuated based on the engine-fan speed. The power demand for the other auxiliaries depends on the vehicle's actual speed. The fuel consumption is calculated using the engine speed from the driving cycle and the torque demand as given in the cycle, adding the losses of all powertrain components. +<div class="engineering"> ###Requirements - One or more checked job files in the Job List @@ -12,3 +13,33 @@ The purpose of the verification test is to simulate a vehicle defined in declara - Modal results (.vmod). One file for each vehicle/cycle combination. Modal results are only written if the modal output is enabled in the 'Options' tab on the [Main Window](#main-form) - Sum results (.vsum). One file for each invocation of VECTO. +</div> + + +<div class="declaration"> +###Requirements + +- One or more checked job files in the Job List +- Each job must include a vehicle in declaration mode (XML) +- Each job must include the manufacturer report (XML) of the vehicle as generated for the vehicle delcaration +- Each job file must include exactly one driving cycle (in case multiple driving cycles are provided, only the first cycle is simulated!) + +###Results + +- VTP Report (.xml). Contains a description of the vehicle and its components, the verification test analysis according to the draft legislation, and a validation of the input data digest values +- Modal results (.vmod). One file for each vehicle/cycle combination. Modal results are only written if the modal output is enabled in the 'Options' tab on the [Main Window](#main-form) +- Sum results (.vsum). One file for each invocation of VECTO. + + +###Validations + +- Before the simulation of the measured VTP cycle starts, the provided cycle data is passed through some sanity checks: + * The cycle is provided in 2Hz + * The ratio of wheel speeds (left/right) should be lower than 1.4 for wheel speeds above 0.1rpm + * The absolute difference of wheel speeds (left/right) should be lower than 1rpm for wheel speeds below 0.1rpm + * The torque ratio (left/right) should be lower than 3 and the absoulte difference should be lower than 200Nm. + * The fan speed shall be between 20 and 4000rpm, unless the vehicle is equipped with an electric fan + * The fuel consumption within a window off 10min should be between 180 and 600 g/kWh_(PWheel_pos) + +In case the provided cycle exceeds these limits an according warning message is shown in the user interface and written to the report. +</div> \ No newline at end of file diff --git a/Documentation/User Manual/5-input-and-output-files/VDRI.md b/Documentation/User Manual/5-input-and-output-files/VDRI.md index 5888c1a51e60f0eba17ea9629f211bff033846d9..29b6f900d76e435e3c2957558db4eefab36e38f0 100644 --- a/Documentation/User Manual/5-input-and-output-files/VDRI.md +++ b/Documentation/User Manual/5-input-and-output-files/VDRI.md @@ -78,6 +78,9 @@ Header: **\<s>, \<v>, \<stop>***\[, \<Padd>]\[, \<grad>]\[, \<PTO>]\[, \<vair\_r **Bold columns** are mandatory. *Italic columns* are optional. Only the listed columns are allowed (no other columns!).<br /> Units are optional and are enclosed in [square-brackets] after the header-column. Comments may be written with a preceding hash-sign "#". +**Note:** if the cycle starts with a target speed of 0 km/h and the stop-time for the first entry is 0, VECTO sets the stop-time to 1s automatically. + + | Identifier | Unit | Description | |-------------|--------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **s** | [m] | Traveled distance. Must always be increasing. | diff --git a/Documentation/User Manual/6-changelog/changelog.md b/Documentation/User Manual/6-changelog/changelog.md index 2d6299afe6cfb9c0b915fd324af01523623f76cf..b05b37e62abb5592f5f4a9a46a0e8b0e120acb52 100644 --- a/Documentation/User Manual/6-changelog/changelog.md +++ b/Documentation/User Manual/6-changelog/changelog.md @@ -1,5 +1,33 @@ #Changelog +**VECTO 3.3.0** + +***Build 1250 (2018-06-04)*** + + +- Improvement + * [VECTO-665] - Adding style information to XML Reports + * [VECTO-669] - Group 1 vehicle comprises vehicles with gross vehicle weight > 7.5t + * [VECTO-672] - Keep manual choice for "Validate data" + * [VECTO-682] - VTP Simulation in declaration mode + * [VECTO-652] - VTP: Check Cycle matches simulation mode + * [VECTO-683] - VTP: Quality and plausibility checks for recorded data from VTP + * [VECTO-685] - VTP Programming of standard VECTO VTP report + * [VECTO-689] - Additional Tyre sizes + * [VECTO-702] - Hashing tool: adapt warnings + * [VECTO-667] - Removing NCV Correction Factor + * [VECTO-679] - Engine n95h computation gives wrong (too high) engine speed (above measured FLD, n70h) + * [VECTO-693] - extend vehicle performance in manufacturer record + +- Bugfixes + * [VECTO-656] - Distance computation in vsum + * [VECTO-666] - CF_RegPer no effect in vehicle simulation -- added to the engine correction factors + * [VECTO-687] - Saving a Engine-Only Job is not possible + * [VECTO-695] - Bug in vectocmd.exe - process does not terminate + * [VECTO-699] - Output in manufacturer report and customer report (VECTO) uses different units than described in legislation + * [VECTO-700] - errorr in simulation with 0 stop time at the beginning of the cycle + + **VECTO 3.2.1** ***Build 1133 (2018-02-07)*** diff --git a/Documentation/User Manual/help.html b/Documentation/User Manual/help.html index ca39efdf38665769cea514c6cef5327032664db6..30d7f5e60d43310fdd7e1c72ef96ef3911501d76 100644 --- a/Documentation/User Manual/help.html +++ b/Documentation/User Manual/help.html @@ -246,7 +246,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf <h1>User Manual</h1> <p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhgAAADRCAIAAAABnlwSAAAKQ2lDQ1BJQ0MgcHJvZmlsZQAAeNqdU3dYk/cWPt/3ZQ9WQtjwsZdsgQAiI6wIyBBZohCSAGGEEBJAxYWIClYUFRGcSFXEgtUKSJ2I4qAouGdBiohai1VcOO4f3Ke1fXrv7e371/u855zn/M55zw+AERImkeaiagA5UoU8Otgfj09IxMm9gAIVSOAEIBDmy8JnBcUAAPADeXh+dLA//AGvbwACAHDVLiQSx+H/g7pQJlcAIJEA4CIS5wsBkFIAyC5UyBQAyBgAsFOzZAoAlAAAbHl8QiIAqg0A7PRJPgUA2KmT3BcA2KIcqQgAjQEAmShHJAJAuwBgVYFSLALAwgCgrEAiLgTArgGAWbYyRwKAvQUAdo5YkA9AYACAmUIszAAgOAIAQx4TzQMgTAOgMNK/4KlfcIW4SAEAwMuVzZdL0jMUuJXQGnfy8ODiIeLCbLFCYRcpEGYJ5CKcl5sjE0jnA0zODAAAGvnRwf44P5Dn5uTh5mbnbO/0xaL+a/BvIj4h8d/+vIwCBAAQTs/v2l/l5dYDcMcBsHW/a6lbANpWAGjf+V0z2wmgWgrQevmLeTj8QB6eoVDIPB0cCgsL7SViob0w44s+/zPhb+CLfvb8QB7+23rwAHGaQJmtwKOD/XFhbnauUo7nywRCMW735yP+x4V//Y4p0eI0sVwsFYrxWIm4UCJNx3m5UpFEIcmV4hLpfzLxH5b9CZN3DQCshk/ATrYHtctswH7uAQKLDljSdgBAfvMtjBoLkQAQZzQyefcAAJO/+Y9AKwEAzZek4wAAvOgYXKiUF0zGCAAARKCBKrBBBwzBFKzADpzBHbzAFwJhBkRADCTAPBBCBuSAHAqhGJZBGVTAOtgEtbADGqARmuEQtMExOA3n4BJcgetwFwZgGJ7CGLyGCQRByAgTYSE6iBFijtgizggXmY4EImFINJKApCDpiBRRIsXIcqQCqUJqkV1II/ItchQ5jVxA+pDbyCAyivyKvEcxlIGyUQPUAnVAuagfGorGoHPRdDQPXYCWomvRGrQePYC2oqfRS+h1dAB9io5jgNExDmaM2WFcjIdFYIlYGibHFmPlWDVWjzVjHVg3dhUbwJ5h7wgkAouAE+wIXoQQwmyCkJBHWExYQ6gl7CO0EroIVwmDhDHCJyKTqE+0JXoS+cR4YjqxkFhGrCbuIR4hniVeJw4TX5NIJA7JkuROCiElkDJJC0lrSNtILaRTpD7SEGmcTCbrkG3J3uQIsoCsIJeRt5APkE+S+8nD5LcUOsWI4kwJoiRSpJQSSjVlP+UEpZ8yQpmgqlHNqZ7UCKqIOp9aSW2gdlAvU4epEzR1miXNmxZDy6Qto9XQmmlnafdoL+l0ugndgx5Fl9CX0mvoB+nn6YP0dwwNhg2Dx0hiKBlrGXsZpxi3GS+ZTKYF05eZyFQw1zIbmWeYD5hvVVgq9ip8FZHKEpU6lVaVfpXnqlRVc1U/1XmqC1SrVQ+rXlZ9pkZVs1DjqQnUFqvVqR1Vu6k2rs5Sd1KPUM9RX6O+X/2C+mMNsoaFRqCGSKNUY7fGGY0hFsYyZfFYQtZyVgPrLGuYTWJbsvnsTHYF+xt2L3tMU0NzqmasZpFmneZxzQEOxrHg8DnZnErOIc4NznstAy0/LbHWaq1mrX6tN9p62r7aYu1y7Rbt69rvdXCdQJ0snfU6bTr3dQm6NrpRuoW623XP6j7TY+t56Qn1yvUO6d3RR/Vt9KP1F+rv1u/RHzcwNAg2kBlsMThj8MyQY+hrmGm40fCE4agRy2i6kcRoo9FJoye4Ju6HZ+M1eBc+ZqxvHGKsNN5l3Gs8YWJpMtukxKTF5L4pzZRrmma60bTTdMzMyCzcrNisyeyOOdWca55hvtm82/yNhaVFnMVKizaLx5balnzLBZZNlvesmFY+VnlW9VbXrEnWXOss623WV2xQG1ebDJs6m8u2qK2brcR2m23fFOIUjynSKfVTbtox7PzsCuya7AbtOfZh9iX2bfbPHcwcEh3WO3Q7fHJ0dcx2bHC866ThNMOpxKnD6VdnG2ehc53zNRemS5DLEpd2lxdTbaeKp26fesuV5RruutK10/Wjm7ub3K3ZbdTdzD3Ffav7TS6bG8ldwz3vQfTw91jicczjnaebp8LzkOcvXnZeWV77vR5Ps5wmntYwbcjbxFvgvct7YDo+PWX6zukDPsY+Ap96n4e+pr4i3z2+I37Wfpl+B/ye+zv6y/2P+L/hefIW8U4FYAHBAeUBvYEagbMDawMfBJkEpQc1BY0FuwYvDD4VQgwJDVkfcpNvwBfyG/ljM9xnLJrRFcoInRVaG/owzCZMHtYRjobPCN8Qfm+m+UzpzLYIiOBHbIi4H2kZmRf5fRQpKjKqLupRtFN0cXT3LNas5Fn7Z72O8Y+pjLk722q2cnZnrGpsUmxj7Ju4gLiquIF4h/hF8ZcSdBMkCe2J5MTYxD2J43MC52yaM5zkmlSWdGOu5dyiuRfm6c7Lnnc8WTVZkHw4hZgSl7I/5YMgQlAvGE/lp25NHRPyhJuFT0W+oo2iUbG3uEo8kuadVpX2ON07fUP6aIZPRnXGMwlPUit5kRmSuSPzTVZE1t6sz9lx2S05lJyUnKNSDWmWtCvXMLcot09mKyuTDeR55m3KG5OHyvfkI/lz89sVbIVM0aO0Uq5QDhZML6greFsYW3i4SL1IWtQz32b+6vkjC4IWfL2QsFC4sLPYuHhZ8eAiv0W7FiOLUxd3LjFdUrpkeGnw0n3LaMuylv1Q4lhSVfJqedzyjlKD0qWlQyuCVzSVqZTJy26u9Fq5YxVhlWRV72qX1VtWfyoXlV+scKyorviwRrjm4ldOX9V89Xlt2treSrfK7etI66Trbqz3Wb+vSr1qQdXQhvANrRvxjeUbX21K3nShemr1js20zcrNAzVhNe1bzLas2/KhNqP2ep1/XctW/a2rt77ZJtrWv913e/MOgx0VO97vlOy8tSt4V2u9RX31btLugt2PGmIbur/mft24R3dPxZ6Pe6V7B/ZF7+tqdG9s3K+/v7IJbVI2jR5IOnDlm4Bv2pvtmne1cFoqDsJB5cEn36Z8e+NQ6KHOw9zDzd+Zf7f1COtIeSvSOr91rC2jbaA9ob3v6IyjnR1eHUe+t/9+7zHjY3XHNY9XnqCdKD3x+eSCk+OnZKeenU4/PdSZ3Hn3TPyZa11RXb1nQ8+ePxd07ky3X/fJ897nj13wvHD0Ivdi2yW3S609rj1HfnD94UivW2/rZffL7Vc8rnT0Tes70e/Tf/pqwNVz1/jXLl2feb3vxuwbt24m3Ry4Jbr1+Hb27Rd3Cu5M3F16j3iv/L7a/eoH+g/qf7T+sWXAbeD4YMBgz8NZD+8OCYee/pT/04fh0kfMR9UjRiONj50fHxsNGr3yZM6T4aeypxPPyn5W/3nrc6vn3/3i+0vPWPzY8Av5i8+/rnmp83Lvq6mvOscjxx+8znk98ab8rc7bfe+477rfx70fmSj8QP5Q89H6Y8en0E/3Pud8/vwv94Tz+4A5JREAAAAJcEhZcwAAHsIAAB7CAW7QdT4AAAAHdElNRQfcCh4HLTa5gZcKAAAgAElEQVR42uxdd5xU1fX/nvtmZhd2AUU0iGLFAih2mqKxpwiaKBZE9KeJscXeY4pRwBJjNxor9t41JmqsUVGMLQpKrLEivezu7My75/fHfe+++8rMzs68mZ1l35UPn3WZee+Wc08/30PMjGQkIxnJSEYyyh0i2YJkJCMZyUhGIkiSkYxkJCMZdSNIGGAGg1HnLi+WzAA7k4352cwAZNWen4xyDybyx4InGMO7uLTpsPsnGTWgAuaqOuT1wwMvqnEUIPz2eg5DkG+uAHmMk4lE/ZISAFJXl4iq8QZJRGpviNTLklEXsoTd06DC1BEPTXDHx85xUIa6b1SFvTIuelyTk+HHu6dB5U0tPDt1goXO0WRZHR50GcSgn6+/6PAbqikTCEyjS+ZQ+kj5pYo6YHU76tjrRY6kcy2omHdXsSpmgAgc//OTUcnRU1Emzp28bMUkAXXE7GOiDHLYBHXI9zvHFisRHiSNh7hCggEI4wB8kynC98O/p45Yf4crXbZsWS6XK7Z0IgBSyjL47+effb58xXJyrj+YecWKFZsN36ypuanG9N6vX79UKlX/KVHkn6L6PwbRrI/fmzn37TpXTAWJIWuus+eInaqhDXw+/+vH3nwWBIr7EOtQrSCijvVXd9pUQNmN4BdEYY+P+7GwoUfOo0M2oPoK6VmS92nymSf6H0g4vxH6t+T9RIptk7ci/QZPfxJE5E1JcVPSTyD3gd5/6veOliPcB/rn7z2E1CfA7tO8J6svqJ8EmVtGZD7EeGxwMuqX3lvItyLhrJ6c1+uHOK9Ub1B74bxEkNpCMl6rn0LmxAnOVwlgsBDC3CJnemqGrtg39oqIIEh0eEdqd4kUAQiC7Bpu/sijj04YP75E+VoXFgkrDZwEMWzOn3XvJQ3phvgs+HhZvVQHfODYCbtvviOBCBIQTIhJR5TfLJp37kOXgy1QnMuPkQ6KSDjBmjtKsKlFgilCnQxPjzymaKqKglkKIZTHVjM/zclJCHcHmaRgsLAooP8LWAZDUbyGtE4jhHDkBbN6kQCIhHDkiPMZl7m7fIwhyGDCgKUeCkv/xvuAEGr5QjhsGkSWy6Vd6UQpEu7VFUJY6vVkDAukfg+QUAxaCIIAYKWYmSwS7kyEAISwGEyCBMjllUSCUiCALMtSrxMkBJEQAoBwJk1EggRSJMhZh1DvdnYMajLCEYZqE2ERqS9Yek+EnrwQggSRUEdtCUu4j/I+o58EIqIUCec/dQSA+xwCkSACI2WlwGxZltLzQGSRJYQAs6UkCmBZlvKckyPyU+ogBcgSgpkzqXTH14QgLEvm7RoorQC6SoqkMum9J0w4++yzp06dWs92iQjbg4orjB6y9agNRhAkMSsDgFA3f5hBAiAmcc2ztwkihg0Ihk3xUA4TibFn7QV2dTOg3v4oaSEQ/ccQfCIgBCW5fhpjlOCBZeWqjZA3plHin2HI4hDGJ0hvrpJJ5kx8EwaYHBI0bAhAsksPmpDVT4QoO8jnnTf+l3Q0zNlVAshx44BdjZkiffRukF16P3hGEzE7qStMYC++Q2xaSb7ILkdwMXbFLitfueNIIPdfWXIwbCCNDBHyTpbNs2P9AgnDdcWOEGdt93vzcJ/BxruIQeyaa+7ClfRjePoBu9EVvz2qrSUGsePiK1nT2nTTTXllHz/96U8haPqFF/x8v33NYEldC5IABe86YgfDrquj2TMRsW0xA3bfTPNLH74hSEgwK1U3Dj/81wu/69V3FYJgkj0nGSeSj8d/fP5cFKWZKl92MkxhZwq8Dg5OEPWYQJ6ZVbXSr/HhBx+6YPp0lvLxxx8fttnw1tZWT8zX0/JFYWaNsyb8av6SeU7cmepsnyEkhGArbaXuefVxKVkA5CiGMZzip99/2ZTpzYam1nNkSbUdzm5WoNajuWYyrPudQol7wpBS9rQNXIkT89V1UAd6xulnPPzQw7lc7uOPPx44aM1PP/u0Di+LKBYlYPuvv7gIBAHHkq6jfXZoyGaia5+5WwgVHRFcSaoK6yQw2uE3e0uGgGQIimntdX7PTeqMy4iOyKoqHMUKyDDzf4k7EnXs47qdShOK+PeohRfLNu6krkGdovTSNsr3y6j4lt8KpEJmUKHAGxUnaa7djTCkbE/RJyZMmPDh7DkNjQ2tbdkNN9jwH0//Q0XO6oelFHFtMZEYPnhIa75dUn0ZJCpgqiKUADJWCq7bmMrdWQYxbLATQaCG3oKIVe4PxU8ZdStF4p4hhTmOGV8JbK4vBKJ/Q+G024LOIBXvKHTBCl486vCYGFHCLBQvKW1LQvW+zMbTuGLqoohFhP6/8E0IxJP8Hy/CvML7VujDsZDZyu3N8ylSRBtttNF3X3+7/nrrpjLpPffY87IrLne8JfVRqFjEtUWQGLvJNtusM1zlsdTtaGpomnTliZLALMtO7CcGkwBIgp5867kBzasmDpZ4b0Xxa1/EmChVE9A0LUSRC1nqszpr0oTeWxbXYJ22XJpxEo+lS1RxDDSptKrmUEfc2Nj40ZwPd99tNwg66cQTJx9ySAGFpq4sEsd/xFMPODmbz1PdWpEMIv5m8TwBlXlZrkVCIAYxCZL/eOdfMsG7qMZ1QLWy4AUJE7HEdc159cClJ+CzoTUxd0KwOR920o7KoR8nrbkIt64eVXbo+0uqcuvAQGHmJ5948uSTTgLRPffes8WWW7a3t9fD6RSJkTCDibHDptsua1kCUpmMXHeefmIGvfHxu64qWYlFonIfxRVP39I9GDPVxk3s5bNq9YdDVc1hbswBvxCT3/jgEpVrKlgfGZgAdwLTolQqjnASlQLLwXCKTjrk0uR/Zgc6pltfQn5vnv6KEejSOEIdyobgJM1sbHipwP5Kf8OEDCzRW4p/98j4YkTQNUm1KExOXrEnETNf8qdL7rzjDjtvz/lwztrrDP7qq6+6fJKiKJciBpjtqw47F0xOgnmdWbHEJCGFlX7943dRAV9lgmAAeOKt5/v36V//gTwCJHVgC1diR/s5pq7+0Mo+B7xVQfbK5JaeICCHAIRR3MrTqMw5cFi75mLoJwFPlPY1+6EMyBUMzKWJEJdfBtUUn1R1QNxcDcYPzVeERgmigIBBKLoePNACk1eQelx8u4IL8lcRhU7PKXPyVd8URYgg46kJsl1HChMAHHTgQe+++24qnVqyZMngwYNffvlldGm8RBQ9W5VhYx2755RFLYuEqvCm+oI5ZWJLUq+UNeOF+5i5bBccKbcL0bP/eUVA1nVQqPP0l4xSPUvddM9LIPswi4lkO0WCNOHFmgncCcnV0sEFYPiwYV998eVag9ay0qlx48Zde+21XVixWDjYrrCASSrdZtSQrZSyxSqDs75sEuSBv/7zXiFE+bqMqxle8eQtkIKqQwRJqUTZW9dtdo/rdAMDf4OLJVKXL3q5rC1IBFAnvQXKJdCvX79PP/lkh+23Fynr6GOOPuKXv+gqWS6KsGci9TcDcvr+p7Xn2wEmrq9cYBXbsFikU5ZWssrqpkIEPPHWP1ftu4oku+4JqoIkUY5WHgu76SnKt0EcUEejYgls4NoaHrPw9SiyUI4ChQx1jGBEuV5Mx05RG4IDYp6Lp21pZ5EJ+wgXa9aM6kTHVwyQEiqtJj0C+dLngIuuCzHqGksgFyq4TZoCyI+nGXhsxEq0jswdiA5KoiSdVAj0NXz+ueePPuooMGbMmDFq9Ch9L2rZTKW4a0vBdApA7Dhsu6Uty10/eV25tkCgPKGpoemgq050mQ+XA7JG9PwHr0vOE1tVpYN4Tq68QyAXjKuwpoPogsRoltHRemSgzrEMghYcUVtHETzQ93DhwWgphi0LXSeOAjAmZ5NkkPsX4oRGyDmgpqsaTH/BoI48m48tlqYsAgLJz81FZ6guqp8HuckR0dGUcLORQP1jkG+ErMkw4LzRzoRYAXYldklZsgTAVVdedfMttzDz2++8M2CN1RcsXOBLlKg+pEpJTmFmMMurj/g9sbrU9XXgxJyCBPD94oUueit1VuCpj/75yRstpKgH60YmNkPlZrgDJ05hld/Edndi8qVk6DKzC/1bkDlGu1/Y+bnzRe8FjZhCMoY7rMM3zT4py7hQJR8PFWJDoYlxzQjMD5KZeLfiGYcdeujM115j5uXLlw9aa63XX389oA5W1eslSjt7AHTM7lMWtSxlyVR3uFvEgGDx8tw3HSuFCejcRIn58beeW725vySWFH8Tkm6ENBcfwRmKvtFWg5mlrAwtgSgA8qjx0UMV42xy9hL655Z8c4TwfFl+0DBylRgjt82nPyp4fOieHsWpGyAi6V+YIBHj+RY58QqJoVPh305V7SQjTOfbbL3N/Hnfr7rqqsw8atSoW2bMCPuru9QicT0D264/XBDVVziRiWBLkITs29h7/yuPZ8d/bJUwUQ9fC0Qvz5llI09MkFUBhanlJensu6gETKdCfqGCryP2G7Xs2BO+XFAvDFN621SKigoYsRAvmVVXXfgcRwBc88gUSOEFEpk2jd9QM3yASlboZiRw8hupAGQIFWgG4yQPhy8/RQgcDnuN/K2l1EYxOLqSo4hINfc55LyiCNnAgZKmAgBcUa5BF26eEpOkckcCEfXp0+fbr7/ZbtttRcr6v8MOO+GEE8LnVQ1dtjSLBIAkCTn1wFPb87k620EwWQIEIgkM6NWPYTMTuOMUXg9fixnARY9fD1ggrztTfev78VhI5RoZuobAY0+FlsbwG4eCyVeIHt2uNVJx9gw7MMziD9+HpZkg4DJhgQg5ofpmOHV8ymnGriPOLI8nf0VMQJA4Jq1ul8ukL5bpJzR9YlI60SOp6yfcJocdx58KxLS9S23U5ptV/dEYmj5ioJC0Ypid3UIGn9OLNnSY7j+Yu0ReNSL5tTm320oyKmQs6rhf+dcrhx16KICr/3LNnj/aU2lLJinGLktK5pgkBPMuw8cMXXPDuj1xYlz3/L2CUiAGiQ7dUx6+FtFj/362qvhaic1eiYcsuuJdtQIMSf1O3ZHSbX9HHMVQa+Jjx0I47jgyeuIG4uHKVPHkaESuVCeiqRQyLwrVjpRCtKIzjrLAGSWXonpq4o033HjVNVfbefv5F14YvO46S5Yu7foYCZxEKMHME8f+pG4Pn4HmdOP7//sITlfHjiwSA19r5ofvSCS9lepd4SrRtHIwgynWBsmEgCus3Ese+D/2/54iYOGL7oNKrqWyGDqCubkGYEEJXyejPtm1ESMKFYsbt4k4qdJNOfboY5555mkACxYsGLD66u9/8EH1QialxkiEi4h6yk+OmL9knqcX1VXomCiTyVz2txmGBtmBRQKoangx/Ym/VK9AJkZD0qz3Io5+RYWvK0Bkxfpb+KbnAm0Zaa2+fC1ywQdN0K1CMB7B70a5+/1QLmzoPv50egqaqIU3yiuccJxlbtsoIw4RzfEd64FNnb9Q/IkAMrrdMJwkrgIhK6OMg0OmEkJRmSIJu5FlLqGp+ut+CpeY+L/oVceEY0SR66pO/4JkAMAuO+/yv8+/6NPcV5DYbPjw+++/X+95vN6tkmMkJNTdkcw3/upPgpmYie26SuEiZgl8vuArBz6ow51yPGBywbJFjSJTVZkYbwWJiiALv1oXyXBLlHMB4D+DDZBRIsGFknACTEoxR9Nhoh+renKz6xLxdfAujAIZZNZRgo2IiIQhLITZZ1Avz02qigyuQDAkgZwYhwSEymA22ShHbWChmhunyMMHp+j3zvkFgE7oCmsQhuykku5wVJc3v04abPZOhRlAwawKI/rCzORYbCRUbyB/12B/CWdVNK1kBE559dVXn//9vKFDN7VS1sSJE39zzjlmNKXWri3jC7T2gIG5vLRJgCyqr+JEsiT/68M3AZRmmxPYBov3/vdRr169aGWhnkrMprJpq3oQJuFOcDpmXdxUN0K7wQaIKrjihh+o+BNKWaPORgubHeEIhPqwfrUvcwxc/HQKhc1DvN38X1HIycaMqCBTJ2MtpjRyn6Zi7b6QDxf2QyajqoyR+Z23395vv4kQdOFFF+41fi9tYcd1ZzstSJh4j8132GDgmkKCIeuqmTuBJYmmTGbiFccSSsBYZxAJItr5nH2wUreALp0vxNGdKe6JCQpbJIHMukKhiw4ljUo/ZeZIt76xG1yKf8ZMNCYiKWVkm0I3DTqq8pUROQEhKPJDhfyQESZcEaOkGJBz1D0qkCweMKdCkyhYGZfIkmrfa2a++667pk+dZufy/3j66Y022Xj5iuVxukk6z6zBzJN32M8lsHqySJhAkomWtbSqZP2OhCKYedGKRZk+/at9lrU03kt8nY4gmKZuZ+fJJbwFvla+CHvdw5VopOtBohxJAsSIbELuYb2Ho75clHOFHWtexw34Yh4eVny4rwY73ad8rTj8bJy9mBBHSjtflrPjiyO9cfqRVMgJ5vdHmd7IQqumqMKSQD8Vs3bHc2Q5lSrRpgwb2czBNZrvcfczESfVFSeMM88888mn/iaE+OrLr/utsspnn32myaNCBlWG+kkAn/STw+Yv+95iUW9VRARI0EsfzizFs6VE4dufz+7X0JtAK0dFVCmhy0IlGiX12zB8+ooGS0mcJX/hAAglTkBEulycQAGFPFesviGYtQpPFNSpAyiTZKrMbmlh0HINRhAiOmi5/y5BpnyhUEN4kzQDXw+gyDiol0QWICnQGKxgyq80t7jDLAwfHgAVOHH/v5BLA0KbjGqeAWwYLlKRqGt9iCFBSYyk+kYJmJl/vOePPvrww95NvVKp1Prrr//UU0/FouyWIUgYEJLzN/3qYhZcV2VE5FghnKb03G8/K2ElLEjscs5+tsNrqrKW0pu8xks3ZYifcr5LVM01Fovqs48LF/RckZGPYHK3QKmgTj2KiPNHPdvhpCFPYKRv0Pswe7JA/SqGjuuCdEFlgacV6WXp31JpZNCBwttbKBGgs8RjWKiJFVJTzsDMg9cevGjBwnXXWUekUz/+8Y+nTZum1biyqbE8i0QSxJqrrtFu23VHBcQpKdJpcfFjN3S4KQRavGJJY3M/ixnMVUocKF4WUIfWTD1MwyzzDs7KqHLQuxqMkRD5wsgmgqcrW7xgezG9xHAThZpCBnKCEZptwQ/rELSLGVOCWhBNP2abd+f5TiTfDCNxcZiAoPEYlT4X0SNAuw3ds5CdkQ2JCOkSKaJ/mPvR3J/86Mdkid/9/nf77rdvhepg54Ptbqrmj7bYcf3V1mTS8HR10DmRAQjbYkbq5hfuVSa76x03axZ091R+67PZzb16S2IQqpHKHDtrLu4DKE4KHeYHFyn6i3wyu64tw5nODrI/caFXe/Ti+qiICm5UQec+R7jamM3sWMPtyyW53cgICOuIDoXUeTJ6upjwMIFCk3D3QCPNCQbeeqAg0bd4jTZPIfsGjEj7iXwRo4gqE/1d10Jjcy8KbbiOY4XD8lrQBR2AOqSDQlhaCp8GgYTphOlX18flkutjjz76m7PPtm352ONPbL3tNm1tbWVjqJQRbGcGgVmCpx10hp3PQeQcjafL3VzkFDEQkE41KEWQ2Way2YgTSkiAGDYR7fK7fRmCmCCrkspcFbWLyn+jj5sU+KdC3g/yF5gUFlcUnKQ/lMoy0OHK16XHV9SCgtUk5Pe3EFmq5sMF3zW4Ekn9CxW78Dm1jCRIYoVtQBYsJ5uX3W5PxquFX0oWaZYOo+zDbQUm9dqFEBTo1k4FD4iisMkiq9x9tYFM+o6L6J2kwEsKVtQjWop4xwfVuwj+M/JJXEO+kqtDCHLeWzKJJ6MyjmRenPP+eN5DDz1MwAcffNB/tdW++vqr8hhX511b7N4sxo+33HFxy2JIi8nmOkufbWroNfHy4wAiWBy4+RAMFkSLW5b2alqVwQQphewWFkm8EwuUIgZoKFS8UVp5QZRhFNCLNbMPdCIxJ6N4IqGgd94fRtbfcu1mM4bhZnAJISK9SUZNCSgSntDMsCKfbu4tlnxwhB26NFXeLbuNUoQQxEEhrdGLCUE9h0AdaxWCOkuchoFCATW2iB8gciYqIUJ7HQvaOong6FImsPeE8W++8UZDQ4Mt7cFrD37ppZdqYZGwU6BBANnSvv7IC5ksYiEg64oaGNza2kZExE47XoNuVd4vvfnpe029GomJYVHJjLJs+V+HRm6Hni4pubieWADMIzpRynCteL6gCEe9UdGiI8kdYk+Zoe9gjpgo2N/JXJRb2xG14gJ9baMiHGHjwVus83k3+kIB5yEMgactDEGSpQcdpuMrRgfkUAJxVPetoJbAIVHn+w2VTkgU3BZTDSm1MolrnSWfDJ2dMXyzzRbOXzBo0KBUJr3jjjv+6ZI/dfYsyqojceKgbJH4xc77L25ZyESOg6h+GCXon3NeA5wWokb7C92vj3b7/US1EAJIxpy1VcUrEeuDC3tFlf7oRL+IfLDt0U9wAyS+Mgun4YTxYa+Y3MfHArZRwQQhf45QMMPUcJe5DqvohC5nLWZXc18oItjuPBAAUJfQl6zLPkgZ52MGYL4jERHuMO9jwvpjjpxjF5pev8eHYxbpsihWJRP0CuoPGFJHO7IoKrXBJyThJpaqWQrSTklRVFnRWDVE3hklEfia2SKBrbYs67NPPt1h++3JEqefccYRRxyhXc2lVJmIsni0G4QkANh04AYAUz0E2/36UEqIL+Z/DXJIVauL6n+Xti7v1WsVZiLVFFyIeEm4xMqMcjyLHb20UyKkaO03ERWDwIowCzjI4ogITJJlYWqKNuMYbPnDJw4TNeYgo3qMC4CloVkzAcGK64CnWAtCN9ziW5SqlhIut7fBbtW64vKa1QqAzGIK8jukdKTAVdKD+F0RzmEmsPo8MUshnF4jGvWkQCWXEQNX5l0Y0pFICRGdOIDCxfAcyYb88l41ifNCKQGjlAOGkXn6vo6kiSyppUMiEPh87p/PnX7qacx82x23b73N1u3t7SUeiqiMWROYLzrorJydZ+K66lNCQCad/uODV0MqP7TB4NiGpNf/+07v3r1XJprtbGJ+IDm1U11Ri8iVyPw90+5AqEquswmjAZAPjURihHm8dSGQ7GtOINBRynDPGKm6pO0qn09JVVQJrXazq2D5/Tnk579eDAkKFNJh+uxL5A265wISwtXlC3mNAgX1hYxOR0vwykupk0fvT74oUMxYNpZoMrpkXHDBBbfcfEsul3v/gw9+sObAefPmldSWpjKxBgZ+uvUPl65YhjpzbSnbesYL9ztITWxqRoIE7f6H/VDlBIHa+3w7KwzCIZwyevSGl1kIJdDngncTdov70DsQM0Qmaq1Xo83B7wYkjBFNMZw2ZCYF6GRiUFT8XcXtdSSZ/InZ3hfZF/Jhv4QgcnsPm58JZ/Q6EaBC3YULVpNFwpMUNAdLjooUclX5PIqgImQZbDqZCJh6GlMOOeS9d95NpVItLS0DBw58//33qytIVBdOyXzjkRfU4XYIUGND41cLv5UBg0QyAGroU1XiDdevxSEdS8KSKCTAOomM4lT7B3CfipsIMLumK18X+6V1oLN6Yf4S0EuUsyu4HRzg3iwE3EIWCoCjcLjmNFjrUhC+UE1MmTXhEhaVlUBOHYbn3pFSaqPHyGx2G0AZbLc4FCv512paRRGBB2MOweXpnLYokjDxxAKhb9PBSd6qnZl4XsdQurbXiiB0FzyIrZDjKxld69ggouHDh3/7zbdrrLFGprHhV0cdVV1BwsTEIODwnfdbvHxJXeVbEChPsjGVOue+SwVkADfv4TefHtB3VZIltYGrL+lYOCegPBWvcAhECxJpihwqBZzf9OdIVdoTrQsTFevTHjJ3SBfNKblCbPI1BqQAMwtPExeeuBJCUGFwDpKO10l4lXcikhELBHN/mVmQpXxFAk7pRhF/kWOFGB7XCKvO2BBpnLlQ0FYc7Vo0cRV9cMERNUC+ukVEcXOvfoh9T9QpYaS2jTRel9T7xv7ctUDA1t0cAZKEJFOrnjine+jNTU0XTJ+ey+VSKavKri2QVo02GLh+XREEEyxJgJi/ZCHI8qVkkvXfbz6zmaWQ1evwWGMNK5auiAXcI8UKDoq4nthBTmSPHRXDIwk75TjAZLUZEyiQZH8eV8AFVAQdxGeQ+VNewzMNuOB0lEXDDDOzZGnWxgfi+boi3cAyMaZhqvCuv8tL9PJZZrpMJqp2w5AkpbkuKezaCh5HZH9fHWHyQ5a5dh0VyikPICgDFAsNJyP2kc/bJfIxUTHzIkCC5cWTTstLu65MNLUBz87+l/+WMIDT7r7IYiakqmSRdMmVqFB0Fb75AgUafhQ3UMzQFEV9njlCGfesE4Nx+xwrISuKCnQBLtQ4PDKiEDAddLhCRy90oB6BasfQb8Kw8OEDUuZRZJmO4zMypuehMXpC3eekMiRrMVKMTsdgryKwmPcSQS+okZgV5bbymaVRxMlBoZ14t+rNNGlrawOgc7eqZpE4JRkWgyZss9vqfVdjR93ieqhyZxCDmjLN+15+nGNZMzPTw7OeXr1pFWZIJ3203i0SFx+sWICkRAT4yN+HoaI8J6A/ElD0jeyPahixESZpONMN2LPILCxo4yMoYBgoHAFyGazJu5lcxBBHcQ7AwLCnekel3vrTosgp0PCe4KsiAbN0+tV7OF3RfJyNcEI0WrC5iQarZelPQAwIKkNe68f44LDcuL3O/RU+y9N7DiHQjIS9TASTTky4SsOsM5N/A5mmAe5hutcSi6SuBjM3NjYwcyaTqa4gMUkTwPE/PkRIASdw0uXKBcG507xqQx/nOhKI8Mm8zyDBxIKq1U8ldt1K9WkXqKhoMqTIU9i2CPRpVz6bEgGMHa5tlASwZPKQqlhXF1DRRkYqp0BE/JINd1aBWRFUQrCzRghwEMjJiZmbgQchAEiwBcsVeEKQUV7uFsJQ0Agw+lMJMKQqE3HjzzJs4kRZY6y8VL74dqgploLncuJEIcR7t6hFc3NHpLmtsaKllbuh0lf+4vdl+UpjQnoJKYVBEoQNCUMAACAASURBVJFFJDRL4QIQkJ6nTs/W8FPWvudCMoqyi1LPQsT1VgYft/uU75d/zxCS0OW6hSJJFmCmW/71gHCKhBnAaXdewAIgQVyVQF/tL0MZbywSFCn0/E618lbav5dlK8wkXXSYslVIJJtg7H5vG/s9PL62wVzAq+NDww0W6wUr+TW6SXjmYceOg7ZClin5jIc45pWn0AeMs1DehBCCSOjQgokYH9afjH0O76TvRcL1XgoEG714olpEIjwWFi1EhfLqXQedN5MO+24lo1uM2AQJMdksbzvmUsFM3PW4W0xEbBOzINk71ev7pQuZGBAPvfHkas0DJFiwZEmxw8XVWIoEGtl2dp4dJmLpp+qKxfDXw364Ii66aKM2SmMNpmwxkxDhilx3CSL8WDfNlhwnlSF7CunohTx4gcWaHU30KShzIRAmgT+1l1TqObOvkW0B+92rHXENl+AuhswyD8JZiW+9YwbKWZHD6SjxjwObH3DGOecVRmHkgk2Fu1D9SkY9ChIGC4jm3r3y0gaJLs/gImaQlScCU0M6fcbdF5MEET6f/51kKZR/O75Zdnn5bpHUKb+hwIGgSIfKYIAzFuh8rnJx/ZyCI5iJL5e3yEI4WG0HKgQA7AEjBn1BzAGd3Z+MRGE54muWYrhdtILtT202eKJTp6JNGTuirpBIsuvFEtFZ1yb6CMw6C8+RbBwNCXNjSVD4rAMIjEVw4CNZvNdrxG/tBQBQfFtvACSbjrLw61ylgQIg0MnowRYJEZj32WaP/s39DAdoV3r4AKScwKG47aX7FU855fZpUI0ThIiL5XfhBSjFFikILWWYIyV2MTGZS5BR+tuQaA5v6PKOGu5i+hfqbwGNnljc0+UuSzFTCVVkg2iDQMkVL7LNPrh7ATO+IIWAEIKNaDkbQCBGX1szjVjJIfL5nUzCMCwbCUg27Bj42714F0qxa9WDXQbXLnTis9508jIAmAIo95Gp1e5HAzRMWlK4fr8w4yBWkGY+X5yqI3H6t+tKGv+rXS2TnOeQhwSWSJEeL0jUTbXBp/z0CGLJdUYSmVQjgAff+Hv/5n6xG0uB+ufaw6KUdwNL/1aH2BuRctw0hpgksY5jU3EBHMDZNcvf9G/8rjamyBRgl+NrlC3l2nKhqrwm51JKNqI7BTfBb2Z5T2ALgFSgih6/pEJiWAhheTQjC58QJMswNErI9tKLsoUI+bg42NnerLzxsipEWFHQIkWBKvrLeoxIbNj6DCAdmNnJAZjhZCSCJOg9JZCQfPTuk+cvW1RfNELone7988uO+3LhN8yienMrpYFgXeyHEWAoxZwK4kh31NA3otzP6xMYBuaiwHcDbaPgByjUT9CpWUAwgCGE0DJDGmzdPB0lA9RjhVsbCH+vrZBHiANKg5tQwOQma2lPIId6JepsMfMcinR5UQJVyGiQ5lBcREQGikKfD/xvlFwnX1qdC+pLFOhib8onM7xUWE4w+3BUElmSCJKCLEqyffsxlzphQRUh5K7v5c5kN6RSp955kVU1ayleQ0TXjhQvH+HCsdNIWP/IfojGQ1j7NNy01AgDi90WhF5xnBMg8VhtdPzYy9mhYp4rA4fKjEDAb+Uozdpl3H5JBqNKsbCZqAvmdccRN804VCABALAkfGo7qSwyACCLzVZOgVIMDXocrhokglBwL/5JGlDz7nwcE6GIyetDC/NqgMxu846EEPDFhPz2oAt+b6SURYYT3U4pZot4B07FaQQQJcbczQ5BNSdZW4kg0XTBINGroRfLnO20Q8p3fSNNAkE8894r/RqbpaiuRRLjfdC1I0XKR4oYQOHUZtPLUTjSTpEg8IHYKQWUYlUGKMwgsb+NIJNZQYIoSEGj/0c4vkKQjGAql+UwRLIACDDBMlACfY2VKKjLe/nBAiSJCSRYaLASp/m5P8Jv9nl0IahAEAFAfoDI6QTmE40KLdRmhmQi4UZHHJkfgbRPUPEDISznqho1h0GAegPQjCD95B+BKeB0SycWwm2cHhASTgWQYPgcWZ4uoFQchpNlb0Bk+lYSkHLKEQdyspn99JbYKD3eIjF6uf985B59ejW59VGiJzRk1tGRWgbeOyuxzPKIwM8miwl4eKK9E6YRwwSXcYZzZ0MxXicpNwBFFcB1D7drDCOp6DCMh/ERDtH7q1f8io9RKcIea3bapxOxG0fR7i/TLaYLvN32gMGMKX+IItqpaMra0EH4TMbAhqg5Cz8kF9yABLv+vWB2OIf5NYWtxzDCphKBOl8goEYggLwZpe3AaLGsJJRZm5nIj0SQeHKEoPq2k2T70sm/ZVbQW1ZPAPfsquhIGW8sXivg584lLpZCaLM+A0intLrV3Qg0XoycmD8+7IkZM8weFBPsdz3p8jf2WTM6fKJLJo0e6UFHXEDuutF1Q/IhYg9JGK3XKVie6d9tH0qKI1GMaIqXA+bKukCRo/MooVOByecYDIv2gi5HioyEm9ZPoUIQZecbTSw9ZJdCoJ9hoyXp2Z4IEqeXO4FAUrD42cg9lyxfwWAUSUpZicyRsH+my6UIuWmrhbxbUQ/x9SDpjGhkE40c7CT5FMJ/jfzZw78KwMG6AVqvto6CZQ0mSzd9RFxICpp5ypGczt/nUaPzRlSA6vRXDvLZIk3jTQchg4PZ1cwqUOElU/kjCuQPdzObPX19Oy8MYeDhwVMw1Sq6hSWZmbrQGGGFioS8mnV3j6OOyYfHQwWM5mT0VNeW18tdQJCU+VuOupBg+dscrczmCOrKw6uc6wU6TKBgjETh6AmztiAKa08zOwdby6xlZsfP6SuhIF9ZdjSuu9M8KtDKws0cMlqMELtYKdqfIwCCBQ86xWkKYtZ+e71DDH6nGmIAsGCZCxUkBAkTakUY1gCbfJwhBPlL/W3//L32iVrlCFdu6hC5+09CdVgBpIccb7Yb4YDzSMDk/aZYMsQseeemf+245wKlizCC835keBbsHIlhmsADVTNRtpxsGza9Wy7Qi4SzLhHmJMnouYLEzxpSh+z4s0XLFwUxYZPRpX6tsOUUjalOxWyvCLPG0MF1DxL24YTrtxCienV4biu/YGZ/XpGU0sHeDLl3AuEfHzSIIa6U78hbdVD/pYBsg7/Bu7NG19bRLbb0d90qjehm5kVOzLerUfWYKo+OOchszZBDIGjucw8WeZ2/6UtI+SjmlOo07LSXDu653cJBoGQkgsQzQQausmowv2Slc2p1SRFiXOKnUGtCrYFGf93vUGLH7cHwOz2ET+nWHa6CqC0wOzj5mYvDMQ191v1AQRdioPIuMtLuk2FGPlKotYkXvdD152qSKk5jhnwUBxZCLdryvcsfBSE3eu+YJoWzCB113Zcy52J8BfcNurMwuxGLUEgmwm7W6N16880wDPyJaj7sfSJJQcAb1bWLvMy+IJ6Cgauv6+8jTi3hy4kg0da5ZObLD/lDXuZX8h0M5dsUlzrw6muK/VH+oeh/4k7ka0XC65oeGwOXyfs7MnWKjV5+zN4SDF7AnpcmiD3uZvH6K0jCfZ1MgHSHN7oqrGk+sIkiTME2JEGNJgD0q5HkDSeVu7Wkn0vmVJm1PFNeL6+8w2kTasJb+YpXDOxhJ9bCrv/HDC2RDz3G2QZigAR0VQo5ZpkSLwbIjQ6suBdQp0UZEDXeKgHhN5hMq0Ubjq7TiRBpoRgeOeXcM11bnv+TgsaZcRbEfvdmQTumiLqajDoYqerovJBMArTv6B/tf/nx/fuusrKaI51BGVHaqJRSCMkbr7meXVlDyfK6smt50OHTIn4TKPD2d1IPMxqf0IrwuIQbH+r6aBIekzI1XL8R43IsQQALA6tKgixo7hvo/Oric3khB1aVFMbv3QxaDeohDGea8DR7ErAMkew+nAQAi1Q+GCmrw8kRUx3XnS8LZk4JSz1fGStEBLKEuUCilHAEmJqAxe50jXWpbwqRIob3ryBL1Ym4bxQMJhKCLBDIgQd2pgSLiCxy60qInDcaZetCqCUIJliqfIcEEVmGUkIOAAx5gRMiEFmsu6k4IPvkFjuGnWyR/b6iL1UyVlZBArcBLzFmHHPxSbdPXSn3rpBfqNCOCCa2SRBtM2TzJ0+/ITHhS/eTUmm/7PjbUV/zKQQRrW8j1V+KRb0ovpDqJQEWeHLEGsPhtIQgk1Ez15b239DkcXsvXL5kpTRHOmcWMOcFWFB7vvVvZ9yYXMjiXji47ZoL8dm4pIjvENkoiQkW+JP/T6csRfYvy+fApDiMzuild7oxc8QayWuFwq7Pz/RrdnpG5XwzGT1TkBBBmdcqELt631W54yq37ufU6mSMnQQzgTLpXolVXmhLvcIRQhxJGtQ54UPlCKsSuCcZYS8qSRzF4hOgUudXguXt/VGRIe78CkoVxeUebzJWNkEClbHj+qAvP/Qc2BJQ/QtWEgba2QwTJraYGPmfbv1DDnURT4ZvP2nl4RVkgrfU4Wo6z9Qjk4m7kGaSsTILEnMcMHovYaUItHIo4qVGAkOSxCa2kLr5yAtRqKV1MpKRjGQkgiSS7YJ56oGnsNuxsKdq3AzQFusPdRPqE2UqGclIRiJISjWdiQm/3Hn/hcsXdvcYmw+2r5TPwyjQAHLtrX8/4xYXMSOxSJKRjGQkgqR0SSIhmW87+s9MdvfFSwm3LC3pO06zJ5DEjsPHsGQwGDKxSJKRjGQkgqRk/uukqrBlEdvdWxPvLBSKrqcTBElylV59SVDe2fbEIklGMpKRCJJSDRJASrA4cMx4CNmtEy0623FEdRaHi+h66zEXM9hiAHaSupiMZCQjESSdYadkgfLMuPCgs6ASlrib1SRp1NhOSh4mFgIsmUeut6XbH0QSLC7tpQkkajJ67Aj14vT9Hkis+p4kSBhEZINTBPsXO09cuGwRHB+RQPdEzO2MNUYMtoFsvv2JM2+AA8dklZ6zlfT5SUaPHWYLmcovYzK6tyAhZsBiYkBItm879hLBJMkm2NxNCCIAmtspKapgWHceNlpKps6IBA1Xjs73Zk9GMlYOi0S3aUh2o85HqupvICKWzJAQRBYEWBILEix0k7U6FyGlA8VHGSVoz+UfPeVasCzWeqKoJcTMra2tCbEmo8dKlF69eoWrgG3bTjanxwgSQJIgSDDActKYCUff+JsGbmQqh7HWXopU2GzHBtJpC0U6MXVk1wP45JNPhgwZkoTnk9Fjx5uz3tx66619HgLG3Llzk53pQYJEqL8Iqo/edYdPO/aWP6qO4nXOHCu0qZmQZrnLiHFO2lZZEFvq2qQy6VQqldBrMnrgkFL6WkyqJpTp1NChQ5PN6UGCxOTMIBw4dvzBV53Sv09f5vqVI2UCagVWy2iV2buOvVTCJhZUlhQBsMEGG+Sy7QmxJiMZ+l7k23NIWqTUzRC1pwBm+9ZjL0YdE0BsbdgJO288VjKDIxpclDKHhECTUQNqRx0ndEROTF3PJAmlhwoSBgQxYB28/d4LWxarihKvpXU9SRGU7ddyOmowwG257COnXSeIhRJMnTHAdJi9iEiLvEuaL+h/qvbudtP7HGCggR0z/7XI/od/7na7UWEUsAbTC2yp+b/1Nu0wUXWkVXN3lO7hUVPXFoElQ0XYe6d7A5JY2ICoG8SQSqUIAEX3RAROp9KOtBZq+Z2X80Yr7FL0MrPdVuc6Acdx1c0EgW7BQE05rfq067urySDgoA+TipOiKqizTTOT0SlRh/Lw7mrswAgRVYesJlwlo6VIN7pQtY6REJjBJHHdL887/uY/wrJTNtlcL+lbnQVBiba6ABs2Sdp987GoZkKB82yD2hRTy+Vydj6/bPny2f/54KWXXrRqFaVvbGw8+dRTuqNdom+sZM7lcrlc7ssv/jd79uzZs2e/9tprYZIYOXLksGHDhg4duvbgtdOZTDqdJhAISd1DDzR8TZtJ3cd8Pp/L5WTefuedd958882FCxfOmjXLVEeYefjw4QMGDBg1atRWW21tpa10Om1ZVoAgu5FyVuvCacksSP0trMkbrtp7NSZpseCurikxk31joHgC5+X8G2ZVfdqunMpmsx988MHll17297//PZNKWZalZUxV1TeTyvv27fvWe+92OxFi23Y2m33qyb/NmDHjzTfesCzLEsKyLFtKbReGvSuO5JbSltK27W22227KoVN+/JOfNDY2Vp6mkYwi51Wf08tms/PnfX/XXXdd95e/tLW1WZZluhPMa6ISeaSU+p+klLZtrz148Aknn7TPPvuYQqVr13vLjBmHH3H4juPGPf/c8/UkSJQxAoAFYN/1yt9OuPX3jgEHi7qURmOzl5lZAKBRG2zx2GnXktOlO2aWrS+VlPKzTz494IADvv/uu1QqFfDah4m4qrvX3LfvO/UqSMK7IaVsaWk547TTH3344VQqFVAjlCaobntAK9Q6h/RLGmJIcC6XG7/33hf/6U+9m3qT31isEz546JQpSxYv6V5SZPmKFc88+0zXeq78YUvnWre3t7/91lsnnXjS/z7/PG2llOM+TGzF76D5CillWzY7afLkc357Tr9+/SId1DWjpXoVJCFV2pq80Wq9VgFJCaurrlicUgRgsCVFi2xZesO7zBIxFV0Gou7q55mvvDphwoTmpqbaCIwORx0KksCOqf3JZrN333nX2Wef3ZjJVGnfmLk1m50+ffrBh0xWBUB1ckYARm69zYIFC7qXIFm8ePGCJYu7VoqYtATmZcuWTznkkH/PmmVZVjXoB0B7Pj9jxoydd93FZFC1jJ2ULki6zAZXwFONqUYpwLBAXeYAJXfERAIkhb3bsDEsJRBb7CcQvlu2dOnQTTY9eNKkPs3NmqoS13xxG46IstnssUcfs/GQjf74hz8oKVI9ourV0HDeueduuO56086fms/lTBaQ5K12l2FKEU1LH3zwwVZbbLnFZpu9+/bbypat0tsb0ulfHnHEmmv84InHHg9E4Otto7rOmUtg5uuPPB+SGLkukSPVsBCJwEyWlSHBgB3jVPU8n3j08U032bS9rS0sZpIR4AJaUbBz9pmnn7HRhkOeevLJlBHzqJ4AVk9Op9M3Xn/9RhtseMtNNydn1B11EfP2LVy4cIvNtxj/458sXbLETK+qKvU29e59/HHHDVx9jddefa1uY+9dGBUkJkwau/eK3HLiVO2RgGM8D6caBsyqKiafu++EKxkCRLHQmKkTTT3v/ON/fVxjJuOkq3bnCoZq33/98+uvv77+euvef889KSEACCFMl3SV9k2FWNRbrJR13rnnDl5r7W+//ZaIkNgldU8/jpbpOiyY+dDJh2y75VYrli3Vn6lqVoUnqAAC+jQ3H3zAAdtuvY3Cb6033bELBQkTE4OvO3xqVwnYuLRRYmKSLAFqF8xjhm3nlMVIQZWZWoHE+elTp918442GUQfUsF6ke0kRFQlvb2/fbpttD5q4f0MmI40wu+m1qKpF4jycAaAxk9l+1OgzTz+DXQGTiJP6pB/PI0rMzO++/c56g9d5+aWXApBf1Qt6m5aHIDdhh2jh/PkbbzjkkYcfLqQ29ThBwqz6mWPKjj9buGJxzVxbOtM/Rm2CwUSCRR6cbs1nHzvlryCbJEFUBCcW8IdedfkVN15/fVKmUKJPQAjx0ZwPN1x/g0ULFtRVecd9d989bNOhuVwuKWCsc1nCzAT6xeFH7DNhQsqy6kTkNzY0nHz8CRP2Gm8yhy6fW9cF2xUYMFgy33bMJVwTSaK2O36DlCCkJE5JsnYZPlayzax6eVXq29L08dab/77k4ot1q5/kqhcW6g4XuOqKK3+0xx5py9JJuvWyb0TtbW0bbbDhd998W20/ezLKNiUVFW252ebPPfts2dDd1ZiblJKB9997b8j6G6xYtrxOEm26snJKLV0wbEgXcwvVA0uJ3RDxFsJkE5FALr/84ZP/QmSBbALJCohP0wcRtba27rn77uTWNyU6bCFxCxcac+edfnjZn/+sTZP6AdXQU0qnUmNGjZr1+huFGsomo6toSY3v5n234brrLVu2jDToUR0ckNlqj6XcYP31v/jii0jMtx4kSEAgCAiavP3ey1qXE0siZsQf/PQlgFfnfIkACaFqEcEEC1RRaYxZxXbW6Wc0Nzcn8qPIXmlDTUo5fONNvvjss/p0HJn2hxBi/333vfWWGXXlo+jh8kMpajNfmzl625GBy4i6UUS05tGnuXn70WNmzpyJELZKTxIkhj/i+iOnMTOYAasaxIFqeLQ8MaIyt2i34eNYyrjQtdTMv//++/vuvTe56qXcMdu2h286tL29vcsVtFLPV4hzf//7W2662ezFmciSLiEerXPMfPW1/ffd1xKiW8j1hkxm331+NvO117qWcupCkDBhyrifLWxZRhBgGRfKoenQqKpmSkwAZ/Pt9598VWxqCztznnre+Q0NDYk50qHEtW17+NBh2bY21FMZebG757Kq88499803Znkpp8lZd5GlCOD112ZO3HffdDrdXcQ5ETU2NPz8Zz+f+drMLqT5uhAkBEiWdxx1iSQWThuoeMyR4jDsMS6AgV2GjWZmEMcT5SEw89KlS+++666Es3R4l5h59113y2WzqHJeZuzuFOXvnrjvvvO+/U7VBiUWSReIEFVvOH/Bz/fZR0mRbgC463p0mbkxk5mw115f/u/LrnKT1olriwWRJNsGpFWpQaI1uxpJEQDMbfncw6f8BQBkPA2EFSm//5/3m3v3Tm57h4zgsCmHfv7pp90uam2WC4zcdtv29nYk6d21pRw3zRcAttlqq4aGBlOK1PlZmO6W5qamsaNHt7S0oCviJXXi2iJIHLzDPsuWL0VlaVs6q6GWFMCEPYaOUeKLhIjl7NT8p02dKhP9tKPjvv3W215+8UWzI0t3XItlWSM22xyJRdIlFgmw9ZZbWXVTLFLeKjLp9E7jduy5ri1AeYfkjKMvhLSoLFFi+rJqapkqb5bC3nAzOWN5cC6Xm/nqq5Ft1JKhXUALv1/wu3POCSto3WuoYG8um71w+gWJRVJLc1D9sM9e45csWtR9wU/1nBfOn3/6KafWPkZYJzESlgRicfAO+yxesUiJBfWnRPYZqBGpyfaxA60FtOfaHzzpaoDBAp6hXOnTv/3228bGxkSKRB83ACIp5VZbbqGBT7p1QYbKC1ZtkeACtyVHXwMWfOXlV7zzzjvdHbRGZ5bfe889zz7zbM+0SEiAQRLAjKMuZgYJMEF2Juxea7cmExETWDB2HrE9ACIBUihv8dD3ksVL0kYri2SYSgMAAo74v8NTbiNhM4O2W3I0RUNCbDliCxetL4mXVF2KZNuyl/zpT2bVanelH3f+lmUdNmWKtO1aLqRe6kgYDBaScfC4fRa1LgYDUkGycwdGgVHqWdMpk4qpi7Zc9qETr65GQf7LL73EftaZDNPmmP/dvBeff37lw4zJZbNv//stDdSRHHpVx4Tx41PdNjRS6I5k0ukjf3lkD7RIAAhJtnCsMyFZzUxSgRQoHRHRIqSm0XWA2MF33nXzMewqlPGO/86dmxSphdUuXcG+1ZZbav1xJWMEe48fL22ZKBDV3ucnHn9izgcf6PbpK80dIaK//+1vr7/+es/K2gKBwEIKJsmQtx11MQFEEg70Yd2IEAUIBhBDMEsSzJyHgxEW+/j3v/8NoMKsLYZR4u9GnsCBX1c0HD5eQ1ZORC+/+FLGrRqrkAA4tBve1hlpYB1+IK4hgXQ6/dILLzhYgfXBc2MBl6wQdTSufWaXin5z5pnpdLoae2VuV2DJ4btTDas6k8n8+phjzQ6hPcEiYbCAICKLIA4eN2HhimWSLAKZmn7XWiEAmGBJWBKCwYAFamtve+Tkv6A6s2htaWFmUaE5ovDmtGUDQLc3iNfdVMPjkFJOmjSJ46tgD7RbdrpdGdVI+ggsIVTHKm2EKoKM8a4qiLZDJk+2bZvrQ1OOZZ/1nS3bwo7F+mRWTUb4oukXLFmyRINDx75dgR9M5AKdGeQF/GL1OigC/vabb5575p+1sddTdWKNaV7MAFjecvS0k2dcIIUkdtrJ6WhY16foKQA3BgO7bDaWmYkJgmP3bs2dO7dfv36xEJl6Ql7Kn+2zz5RDD91iqy1j1wRUokFtTuBfL73cYIBYVMjdApdc/37bkSMPP/zwPfbcUy1L3/kH7rv/5ptumjN7tmVg1Meo1iio8Ewm8+nHnwzZeKN6uJ9SyljCkEKI8vxIMTN7IgJuvfVWtajY+9fqZ2ZzuSlTphx26KEbbbqJR66gj+bMueHGG+9/4AGrCoel355Kpc4668zXdnsd/tLXqjDFenMusxvGTk8a2re5tyVS1Tjp8mZGKjRCznG12nLJjbOc/JoqTG7AKquussoqga7RZVCVui1jd9jhtjturwYQci0PSM1/nTUHZRoa4n2mFieD1l778ccf77fqKp6d4XQ59EkaKeWXX345bvsd0kJU4woRUbqh4YM5s2Pf1WuuvrplRUtntZCFCxfefeedlU+mf//+kyZPtm27U9/KZrO/+e05Jr1VeNwzbrnl3N/9XqmnMcZI1Nxy+fxBkyZNnTZVWJZpcJjXRFPdySeedP9996VTqXivibr1ufb2Bx55ZNvtti3v1t8yY8bhRxy+47hxzz/3fLewSEzJRiAbsCTylrBM068LJRsAy/lB1Y4QCLsNG8lKvFTHARGX55SZ+/fvr6SIWf4dowZdG3VE+bLmzZuXSqdBYFn+EnwtTNyHNDc3v/Xeu5ZlBQSM09TIf/+FEOuss85nX3z+2iuvTjrwQFNhr9zPpg6orbW1ra1N1RLFSP/HHHtsGd+aM2fOnXfcYVUcjlqlf/+TTjm5HKvIdfNWvhVEdNNNNwmjILFy4aQfsvMuu1x3/fVWyipEbyadMPOfL7v0z5dduv+++816441YrFvTyE6l05dfeuntd91ZbT2vfrK23F0gMJOEPePYi6kOslZ0XIQJxCwFJFm24Da75YFTrqEq+x8DSPhlP2SnnXeGjpFUIVm+Nrmqasa/PvoYIUSFUsT8xT2YogAAIABJREFUrtrh444//p33/6OtEJ8H1fB3BbaOQGO2H/vx5581NTXFtQ/Kwa3CY2eefka9pKUplaliF2v5KnYcUkQ94cv/ffnZx5+wIbMrl/0A2rLZRx5/7PqbbrRSVkALNLsumgE5TS333H/fg488nM1mK7+b5qKI6Jmnn57//ffVZqR1J0iUfi+YJm+/z/ylixncpXcHlnQZhjoiCYi8kGBbx8pE9bo6BoLAZVNV3359zfhw9WZb7RPJ5/MzZ86MSy1VQwKPPPbYiSefBKOqK/L5Eb8kKMfIO+//p0+fPtpYqYThmof+wAMPdNYLhG5+xEXeG8uhM/Mfzz03lUrFVYGozjqXy83+6MPhm21WZK+KvIiIttxqq7mffJyJA8HeTItvbmp68MEHq62L1J9FAiYmFby57deX1ix+W9wo0ZOTBLAgwi7DxzIzIKrl2IrPphFCzP1oLlaK8dknn1qWFVf2gfr50ccf23yLEeUxFO2MJqK3333XZtZILbGsN21Zqk9XUksUo0z696xZMUpEImprb//wv//t27evZledOi+dB9ird+/Zcz/KNDTEedZEd91xZ7WVgDq0SAhsq5D2pLF7LVqx1JD7tbpIbr0IAFvAV8pCDCCbzz106rVOg3CGVC0S6/XaAJj15qyAmhxvSn5tJCKAadOmxXIltB952gUXjBgxopLd8GSJJT759NOYU4GFddYZZ3Zr6Jd6G4sXL/5u3jzEVBMDYPny5W++9e+G3o1EREydcpf5+rcyiCCJXnntVdu2YwmRqsm8//778+fP71muLTBIWOpEANz4y+kkmdg28qVqYYKouIiOjmj5koIF5h9uNkYZIk5KODGjTi+5otT21rZtttwqEGmPhdm5IjSGarUOh7TtZ/7xD5VmE4t/Zs211jrgoAMr0fdN3zcAEnTWb34To0XC4Afvv7+uvFvdezCu/ctfrDjaTKgn2Lb90KOPDBw4EJLZZQOlW7dmpERBdBJz/9VWu+qaa/L5fOXhMfXdXo2Nr8+sbpV73WVtebahEnSCiKy8QnHUiZjVpTTXBKHAjECgPNCeb3vopGuYTY9W/eqKms0tWrhwg3XXa8hkMpnMdtttx8x2XEYJMxGde94f11133erJQiLKtudSqZRt25XXNKhnvvyvf8WSFuh8l0FER/zyF9POPz/GtQshstlsr169EoskFvby4vMvqL4jleynSiEjovETJozdfvvKs7/M/GBmHr/3hNvvuGPWzJmVUyYzW5b1wnPP/eSnP+lJgsQ/Ju+w9yFXnzCgzxqgWkChmtH1SPXQAu0yfEdIlTNUOyMpFr8QAa3ZbFt7+zP//KdSpOOSVVLKluUrqpRiqO/Y1199ZYIaVPi6Y447LjasZpdJqbk9/+KLO40bF9eThRDPPv3MXhPGJ1IglvHVl19WnqylvrZ02bJpF14QF8pG4An33HvP4EFrZWLq+/viiy/2MNdWgANKedfxV6tcfqqqQ54jbBGHCbvwxASSJG2Zl0K5dLqVFCECYBGpP8LwzFQyAnegSuazTmGqJJRtghoJIU457dR4J8xuct/gddcx04gj0brCWEyRP6tNvvLKK5Nge1xj4cKFcSVEnHnWWX369IkrgmXeU/Xz/gceIKVExTUlRDR37txY0NK6qSBhEB045qeLWhcJtqp6jVRcJAx0opB9bUAKSMiW9uyjp14rpCBG3QbYIzV6PXSZQiwqcyDuUg2LRJP+008/7STsVsYImHmjTTZhGfPxEcDkeCemT59u7o/O7Arsm1lbAEBKKaXMS5mz7Wwu19be3tLWtvmIEZlMZiVDqO2q8eYbs5SMr1AwE9GKFSsOOXQK+29B5W4os2r4t+f8tq2tjSq+ngDS6fSHc+ZUT9urc9cWMRicv/4X08+440Li6icDFwCtTzmpv9aPRowDQxIDUrDVTWyS7p3wo0Es3n///cZMprzlmLEQKeV11/81Zr+WQz7OKyYedOAZZ53FUirJbdu2WkLOtpl51KhRRDRy5EhmHj16NBGNHD1KFaAo0A7F7HTPLg8WMxEFlY1XXnklrm7cI0eNWmONNZTxGGOZi0nzq/RfdauttpozZ06FCA5ElE6lvvzyq0023bRKpm1dCxJmFmCQSIkUx133pxxZpM0OKiTKSArYgIDVlmu5/4SrwA7EPZKrXUNZYlfW8c3nfBNinXXWMdMrqyFo333vPTCLlKUEg0JeSRWFVAo4N7QvImzQJKO88eknnwRswbIfdcQRR1RPRfMg8saNmz27Irw1BZSZTqe//urLMORXj3BtEYGJmDF5h72/XzTPSTOtUJoYPUWIWTjRl6JOL2ZiYSG/64idVDd5sCAAnFzsGukT5CJAV54KGUjTqp47rrlPc1PfPr179+7Vq1cmk7EsK5VKhUt5AlGTAMS1k16cFCRWdhb6h6+//jqWlszZbHazEZurNPQqQXYqGtht113z+Xws1+e/H38csM57iiABSEW0JfMdx19OkIy86hRR9umZPUW0z4TYVy8SlGYgkM0yZefb4V5wJk6skZqZI8xs23ZKiAqvk/p50003jbeYppABpIpszChIOEwSFmnhaArFCrLZk9WRJUuWxBJzbm9vHzhwYFX9jerYR48dU4kg8eFuhQivNMcNSlliXQsSpwsTmECTth+/aMViRooEg8qUJL68LDL2lFC0mQaDaXl7yyOnXWcUlyS3uqYsoEJNynzCmDFjYlFLS1OFOnhFEQHj+1AiRSrW7gtteBkjn883NTfDK8itoiGlmhJVsny12I/mzg08uVQ5VMIS69u1BZBkSUKVe113xDRAEJPgclLiVI1IpxtQMZhYWKndNh/NSJwLXcYIpG1XaEBoE6TCm5mM7khC6odsNhvLA4cNHeoRVZWn3RhX6x32yZXSr0wpn65v1xazJBATk4TE4T+cuKRlMRNYio6L6dxYiP5DpVpp2qCDI43JamtvefiUvyY6YVdZJHCbkVRu1gBYa621ajPvSO3PdNkX+qdkVEO1B9DW1hYPi3dziKtthVfjySWieDHzQQce9P138x595NEOP1zfWVtO3Zzq6A4A+WwLevUhkhIWdfBdt0Y9YOOUJEXI7YzntDXadfj2rnFSz3goK79GWaFZA0AI8fXXX1c75KCef/SvjmLwdttuZ/ZVHDlqFLmVJQA2G7F5jMtMRnG+bFnxqM5KkHA1CT6ugvnIJ5fyWCJqaGhoKM0eqmtBEohHsJR3Hn/1CbeeL4mJO/eITr1WbbRwPGrcarc/eNJVzDbBSiIjXSJF4kqBDZfiV3U8/fe/M/M//vZUKfqmWmMqldK1h5ZlqbKSbC73/uwPMplMQgxlH7ra8+bmPrE8873//EcbndUeucqytsKOlmpYPKJ7UcRB249ftGKpqGbKVEgRINvOq3hNku7bhbwgrgwrZn7zzTdrMOFPP/5EiwSdyKsEg2qpEok3k8vlVIqabdvt7e1tbW2tra1tLS26AXAyKvMUxcP605bV2tJqcoyYJ2wEMxYsWBDLMzfYcENEdfnsWYJEo+3+5fBzfSlTHAyEUAWlJkorFCSYbHaeiN2Gj2XVvSpxYdcBGVTCSpR3+NXXXqtBNOKZZ55Bgba+Tv2BHw8j0HvVdGTncrlEkMRCM3379ouF9Wcyme/mfVd5A9MinhRFAG+/9VbxItYSd4CZNexCNTa52wgSImKWYPxil/0XLV+mCSHQOwSAKgopWBdSdK9dzzUzLCmkJF6Ryz586rXEAERSFNaFvMCyLDuOPj9CiPZstgZHecP115vl9HoESg41blgAt9G88Pv8/OcJ4VXMPRjA6quvHotXJ5PJzJ49uzbqSDqdrty/QkRDhmxYPdzG7uPaYoAsZWzk2tuDlEBGLQh1WBcSsdcK5sghMiKwBIQAdhk+WlGipsjkWnaJRimEkBX0dzLD3SIOE6fDsXDBggCIr1m8YkZrAr8M17jsvffeiRJT4dGrvzcaMqTCrmh63H7rbdU7FC0AXnrhRVFBHa4moXw+P2jQIF2C3YMFCSloLJvZvvPEy+PcAqNdmqctggiyJdf+wIlXJ9e3HhiBZVl2ZXfAbGRy0w03wgApiX3OuWy7asAVC0PZcaedEiUmljFqzBgtSCo892f+8Y/FixdXSZY4ndza2t6cNavy5zNzLp8fOGhQ9dAculOwnQlMFmAdNHb894u+Q+eRUgJIR4WNXCKwAO0+fKQlBHVDSeJ52NlB6WDmbDbb0tLSGvuf1tbW1lbJsipRR4P7b7311hXGSPTOTJ8+nRT6Taw+br3Vh0yZEksGp0KrTKVTSEYcY/TYMXkpqWLvAhE1NTU98MAD8Qp4s8aImadOnZrJZGJ5fj6fH7LhhqgauFx3IlAHJ5HAzPefet0x1/+OCJCd40eapxRHkyYQk8yyhNOHuTspgz69gwApB6+33u23395/wGrVSyFNpVLVa4+ofthvv/3Oe//9SswavTN2Lrd40aJ+q66COPurO9FMALNmzoyrk2NrNpvJZBKsrbjGwDXWUJZE5WR5zplnTZ48uaGhIZaaD98RExFw+4xbY+mXRUSDBq3Vu6mpersquhkVOMhY9PPt9ljcuhgQLLjErdTxzLAvK2yP2KDlK1ofO+V6A2y+m/mC9BgzbocXXnpx8Lrr9O7dO12FkUqlKk8sKeV2/XzffWOsIxk7dmyMWcWeGsl80QUXOmCgFcM6SSmPOuooSrC24htr/OAHcXUz7N279/Sp0wIaT4XEqbtiH3Xkryr3vyl2B2DUqJFV3VXRLWmBQKArDv0DmCE7thZ8hgiJjh1iDCaMH7UbS+6OYPGmfkREd9x5J1cNPtZMSy8ReqE8i4TBvXr3ysdRnKWemW1tveP2O2LcFnJj6n+99toYG7afeNJJVdrbHjiYeeSoUZXHxvQVu+mGG2a//0ER2Jvy/FqvvvLqk088UWHfBLgNsqSUu+y6ayJIInfd7tO7mUAkOjg8s003QBB2AexgdpqzMwDkcm23HHkxBLrj3TW5WJ8+fVDNOG2gP2iVXkREBEqn0+3t7ZXfWD3P3559duWhV+/+Cwaw8447xVU4CSCfzzf3aa4SWkZPHERHH310LperfD8Vj06n03vusUfLipaARlUG/ej55NpzUw4+OJ1KxXXo2Wx2ZGKRFNh9MWns+O8WfQMmnegbiYKnwyEAiBjSAgtEBNCJyZaWZMESvNOw0ZlU2ilx7M7BdmnsQ5WC4dpBVD0pon84+dRT41qOesiwTYfCH4ovW4sE49JL/vzZp59WrpnqkqZ+q66qg0+JRRKHLwNrrjVotdVWq3A/zVaDacsaPXIkgQJ4iKU/P9DZbOyoUUq/UQ7SShGvQX369l1/gw2qSj/dUpAwg0gy84On3QDkQSE3iL/fnPEDuZ1IKOzOAiAkgUkISMlucmj3Q0YxlaO2lhZUs79ejdGrfnX0Ua5xicobWQPIZ7PDhw4L2FWdM5XcvX3pxZeuvPzyykvQleqjZMnlV1yeVJDErmANHzEiLtw2VXbW2tKy1YgR2lxG58Gs9Ie33WrrRYsWBV9RySQJhx9+eLVvaLcUJAQGWQBP2HrXxa2tJnKJ1hQ0ryl5+5hgMRGTvay15dFTr5MEcls0dkfXltqH9vb2GbfMWGlyfpqamrLZrIYYqdx3JJnbWlqGDx22YvmKSmTS+eedP+Xgg5UWiYoD7OohOdvefocdqtpYvud5tgjAhRdckLftuMSz7r24+fDNPvn4E69BMpeaB6R++PJ/X2668SaLFi6Md8mtra37TpxY7Y3tpsF2dUhkWXTZ5HPY78xxHVncySaGJImJWXBqjxHjbGaSANtld2OM0T1Vnr9F+XCFEOf94Q9Tzz+/Npyourozs7CsY445pkJPmvl1pfu3rlgxYvjwP577xyJLiP49QTJvP2bszTfcEFfqms4qHDhwYFxlBMkwj3/tdQavNWiQCUtToXBS5GTncnvsuuvvzvktAt5X7vi7p51y6k477JBvb0cciRUmJM9GG200ZKMh1TZqu6fVzJBgAZLge1998sRbz82DU0gR5SFdpHenlVUneoEJEgy5vL192U1vKfeZ5/Xqirv8wx3GffHFF2V3mQ0EEqSU/fr2tTIZVUoSo40iVOdq5ua+ff/xzNPVPHaAub0tu+nGG1eIKq83R2PUA7Dz+b6rrnr8Cccf8YtfFFIbAzJs8qSDZ776qu1it/gyOCtuw/Xsc8+tt8H6sXQarnzMmT3nx3vsUXmt/gZDhjz97DNdyTykBNFlf770yssuI5eKKtxb8yFSyubm5l8dffRxx//aIwYDsinwxquvvOov11zTsmJFNQKNUsqLLrlkv4n7Vduo7ZaCRHeecnyI+w9eo/8gJrK4ApbPLAVZTKM22uKhU67lOihB3HWnH3722WeKzcWCkBOEmDWFZcWPJUaffn3feu/dGhz/6FGj5s+bFxdqkG9bpLSlbGxsHDho0KSDD54wYfzANdcMfP6F556/5957Zs18fd5335EQ1SjyYOa2trYvv/majJqnrh0rjyBxj3vEsM1WrFheDQmt8AgaGhpWW331SZMmHXDQgQMGDDA/8P138+677757773366++yudy1aAfpytBPv/FV1/GIixXTkGi8FEEwOAHZv79+Bl/kMSSYUmBToL+msefzbX/75qXemeaiLpelPz62OOefPxxpeOUrU2EqSden7v5/D79+r397js1cPctWLBg1DbbxrKEyP0RQkCyzU5mcCaT0Qy0paVFNRQp/pAKpySEOP7EE399wvH149daOQSJaSyeftrp9919dywN08LeKvONUkpVtOsUMGXbpbQVCZn8PS6Oo1VPAOeed94hh06pQfp49wy2MxiSAAkmxn6jf7xgxRIGlRgUMR2IwhgM2W63NzU0kYuL0rVjxIgRMGpTYyFrGE2WYr+iovpcQM18wIABTU1N8aYzmZl+qnuDilUIIfL5fHt7ezabzWazqVRKSxH9dsWMKi9G0xPIZrPHHndskq8VP+swEC4uuviiJrfKKl5C8ilqRGRZzJzL5bLZbC6XE4IUMrzpXEV8eqt+YN62ayNFuqsgYYIg4ZSpCwHwJZN/QzbB6UXVsbj2hIdBQIJotxE7sFQtYLr+Am+97TaVK7wmpbJ/xEi1TrCx2gE9A3fr+ZdeiqUK0px/eKP0vwbQ9Mx/hZvvH8tdVQ854aSTrFQqwdeqqjoC4NTTTrUr6E1QRB1RhggzE7MwIGJ1ZzOTdOOXZEQs5aWXXabkUw2oqJum//odXYwjdzlgaduyMnCxyIior8i1PHzytUwOznCXL/MHP/iBKsFFBdlQAXoNNMaIUcurpV+Cmfuv1n/0qFGxQLMEuoMEjDYqPBBHpn/ATGTmtmz2pJNPrvDck9HxlQcO+7//W2vw4GrcBY9IoprNhN8Y7xwgeYMhQ/ZVMfaa3E3R7cmCiYFMKtPauphQ0JLoUA1n8C6bbq+2ncD1UIQ4cODAFS0t6Op0nXpjAVqczLjjjpbW1pVJU1ZLu+yyy6yUlYiQ2uglf3vqqaxRSLhyjOXLl11/4w21JKFuL0jgqqT3n3Kj6i8RFh4Bd5amIWWCKtGTzbfffMyFDAlJXB+o8alUatyOOyKpRItS+piRzqTvuffeQGCzuy8tL+XEA/ZPVIeayZK+/foefsQRusS1W5OQ9qqd/bvfbrDhhlRDNiZWAloACQLtO+pHC5cvheHLLhQL8W4pK/RggOUOQ0ev0rsfsYAAEaE+6Omc3/22el38uimrdS0SMPO4nXYcOmwY3CrUynOKupwRzHz9dRjYZYk4qbaBC+Dc8/643vrrd6oivW4VLAAbb7LJCSeeyCrBv1Zr6faChImIwcQALpx0eiFbQhONGfICIIUliUAiTU7+nXaW1wNbGTp06PLly5M7H3mUajz2xBNLly41xW23zGhnJtCkgw8euObABOu3dnvuOkufe/GFhobGahdbVHUtimyy7e2PPPZY7a/AShAjcVruMuOoXQ9a2rq8uH1qShEisgABubx1yQMnX1OHoFpNTU2H/d//JY6OIkdJgubMnauzErqpFk9EqUz6/OnTkrPuEv5LRM+9+HxbW1s3tUgUzSxbtuzvT/8j05CJVLkSQVJ8C536RLBszDS2tC0XJIQgQULTSnjTVYkAMxPAoH1G78XVaTleCYmrv088+eRsNht72u7KwQXUD6sNWO3hRx/VmbhlY5R1FRcD0NbS+u+3307OtMbM18y+XX2NNWbcfnt7NktRNFbPV0D93dLaeuPNNw/fbDMvkzAm6IqeIUgYqqJEweY8cOp1INWfKhfO6TZrhVx/KLXns38++CzlJKtDKh+01qADJ00SLhRHoq4Gtkhxga233eaiP/3JhGJENcHz45q/it7l8/mXX3+tV+9eiTnSZXYtEYBdd9v1siuvzOZy3QVxWcuMXC43bfr08XtPMP2itSSmlSNry9vWn4/c85v5XzMRI23upNnBQpGO0xqP5Lih2w3osyrIqreVOeEc8PQLLmhtaUmi7sV5wX77T9SypFswAq3Z3PPA/euvv37Svapr2bHa/H0n7nf5FVcoT2m3MEcA5PP5k0899f+OCDYdqSXpi5WJIBhg5sfPngFm4SDSMkJQBEqEKB3fQkqINLNNLrBSfUkRZjDSmfTjTz2Vrbg4caXnBfvtP/HCiy8ur0tdlwzJfMFFF40eNTpcXZ+M2l83LUsuveLybDaL+jZHnA4IbW3n/O53J558Utd6dFcqQaI6H+4ybNSytmVMKFSBTIJc+GAsbln84IlXAULW21r8avVWW2919llnmeSexEsiFfyJB+x/66232vl8vUW8IseFF164/4EHgHwYUIl3qwuvm2PdTpz4wEMPtbvdQerTkJVStrS0XPfXv/7yV0cGNOZEkFSu46FXQ68/7HcSsRdmMNU9rb8yIAR+stWukqW6yPVJ33oJxx7/618ffwL8AFOJLAnsFTNv/8OdnnrmmZYVK+rn5sOI6ChTOJfL3XHP3fsfdGDgM8k5dvldU3+PGjP6X6++Kg2+XA93zeRjy1es+OcLz4/fe4IpC7uKhFY6QUJg5vVXX5uEZeb2ma2BCFK10W3Jtt1zwuUEkl3WBbFjd41JQyedevKxxx8vbZv8AD7J8G0a89BhQz+Y+1EqkzFRF7uKEZjkp/5etHjxiy+/PHbsWLhpZoUOPRldqPWvs+46/5n9weo/+IFzQPVQW+bOYbUBAz7673+HDR9uWrFdSDwrlyBhAFJVuX+94IuwrupsN6CamYzb5P/be/a4nq/+z/l0Fbllk7AUKxPZVxLxoG0ZipZ7JiOlYuY6Nhu57JnLsNgTm260PM/DWBu5howSTR63kqJSyCii+/fyOb8/3pwdn8/3+61Z/Crn/cf3db6fz/mc6/u87+ec3n+u3nof4QOJeQvmb4uJefTsFjwOcjNFq1atrmVnTZ4yRaVW14eAN4qEdvb2hff+sOlsW09IAAetGiSAmZnZmdSzs+fOraysrA8zZIBxVVVVwPTAs7+ntmjZov4YQhsXI8GIIIFgDRHJgcU7mGNanzmrWYMMMBaVSuWWaV89UUWIiIhY/0P9oP2D3nHLvHatS5cu7BWB9PQw+dlTr7JDJWT5siMJCdXV1aykybolX9DISDyfcHR4eXn5xu++O3jksLGxMctCuIO9Hq41VvKYPXfOb6dOmZqaakGduovskJ/O8OQaU4RopYZGRsdOJH72xedIsvD/v/GnsZm2MMKIYITRP+x7lVaVw21XBInUPI0wNkQiIgZVymqr1q8jjASMMRYwEkhDwG9AXIvX2hw5fuynPXtUarVao6GvsGzrPnoxdx40CEIA6bccut26W7h85crS0lL5IfB1rqmw1tQn3IIQtUo1ZNiwrBvXIdL/hZ4izqGutH9EvakIvWlvl56ZuWbdN9XV1Rg2FshuZJCc6fd8q1tSOy3uwYMHIStWXL12retbbz01oqAXcSsEZyRPFzISECLNTJt94R2MBY2INQT9OR8YERELAsHDe71L2IuwMMINB8uBVfTu45x/+9be+H2OPXtS3zKcVim5qKPhHiJUV5rBpMm+eQUFvh999Li0VKsRo67qotQEBlypVL7t5HQiKWnLD9+bN28u5+6ccNd/4ZQmxo4bl3k9e3pQUEV5OZKpAqyF4Pnwhw0eo+v9YUnJrNmzbxcWTp7y0TPb5uoTxWqEjARhQpBAiNilrY1ADDFCAqKn+RKwf1WoK3d9EvosmjQYyigRQHq+/Xbc3l/Tr13bviN20ODBxQ8eVFRUaJ6qKawi8goauNixamLWZNmK5TcLCpavXKlSqdRqdd1GvrEBHQihioqKIUOHnjh1ak/czza2Nq+aUtgohRKEkLm5+aLPP8u8nr04ZKlKrXmyr7ku1ErJuhZFsVqp/DIk5ObtW3PnzzNravY3GdWLXWiNC7OJSDBGIr1fEo+3sWxjhQkRmHN9CRGdbLrv/XQrQSImAsINGK21IvHdwrv3i+7n5928dOlSXm5u5tWr1dXV2dnZ6AXbUpu3bJmXf7Pecl/0bJTtxQsXdvwYGxUZadakiRHjtKCCof5Fy+7yIU8vQhMJqaiocHJy+mTe3H79+rVo0QI9e7Fjw1VBMq6ku/bt+/cP6n/T3v7s76kNmpewG5wz0tPDNn23Z8+eJqam9HZkuOwWPRs6rD+MmL5Vq9VlZWXeo0Z9PGvW2woFwlIErqcbFRoTI3mibiA6YeL+84lB0SHkidTw5HmVWnn+61+tW7cjGIyQDfLUaF2EqZZ08EWT7Po8bmxaFMXsrOzjx479e8e/r17NMDEyMjYxYcml3OckWdVKpbKqurq1hcXIkSPHT5jQ5c0uLVu2lE8E32nYUJCkNuKIBIuUSuW1zGsH9+/fuXPnzZs3m5iaGhsZId3zzm4+JYQolcpqpdLKymrChAkjvLzsu9obGRk1rOFqxLo2QQQhjM0md2/VjNroqjeyAAAaOUlEQVSmCSGoV2eHffPDRSJijDHBiK/uV9VMIVEUqquri+7fLywszEjPuHz58v1793JycsrKy/NyczEhECBua2Nr1qypra2tmZmZo6Njtx7draysrNpZmTU1a+iEkkOd8MWK8oo7hXeKi4ovX7p06eLF7OzsysrKzKtXlU8v9G1mbt7Jxsbc3Lxjh46Ojj2c+/Rp81qb19u2bdq0qQQzG9AgNF5GAtGwGH0d931YQuyTG7AIETDua++0a9ZGguAUFYQ4J3lVV75Ez3ju1Ss3iyHuSH/1hJLnwyWt91w0uEFo1N4/QhAmjyrK3/hkgLlJM3j2qKK0NPrSn2wfcY2EsxMt7ETrcZ9anSjchMURSYInEszRb2rW7zJpKCA05glGCBGhhZn547JSjLGIMMFowgDPpwelYIwR4Uv+VQU2wlKSZkPj2Fda3ebybHxsX0FEkuxMkpxZoAcrJBtBGui5R0KjnmLy5GD5RZEYI4GISrXyc4+gJ/ME88vXAYdayIOcW3D4myhUm08aLl4JjXw2EdEg5KFwKyp9KAq4r83btpZv8FB+Dhw4cOCMpBbKyBONhBggjBD6bGSgAcLNmpghQphzBzhw4MCBw9+W2Rtz+C/CdGfJw/JHrQMU5N85hBDuYOfAgQMHzkj+KkshGOG0nMuKTg4YP7kikQMHDhw4cEbyV3jJ00ML0BMPO2clHDhw4FA3ILw6XcVPb+zgXIQDBw4cuEbyF9WRP4/fQgiDoYtPPQcOHDhwRsKBAwcOHOoBCHwIOHDgwIEDZySvBOjRHWt8pSvDy9FHtdZSD1Vh/e1sZLq75Fb5lzOqutK1aWcdzkKdXK5e5+MjKbYOa3kJqMsZSYNhIXqu89N/kg9CKDY29sMPP1y1alWNPEYPy6mqqho3bpyvr28tUZM8Ba3Nq4enQWi9TbJRHotCDxOjRwpCZwsLCydNmrR8+fK6rQjpPuNWvwwEn6empvr4+EyfPv3vtCQtLW3ChAn+/v61JK8SBvbw4cOJEycuXLjwRWCdVgSj8/J8bCArK2vcuHFTpkx5SeyEcGgI8NFHH2mdr9KnN5Bv3bpVFEVdn3t6eiKELC0t2YfiU7h//z4Ucvz4cXiutZAHDx5AtrNnz9bYYCgEylepVFpxLzMzs76NM202/C0uLh48eHCTJk2gwQ4ODj/++GPjwCh2likm9OvXD3paWlpat3UBVFVVDR8+HC6ORAjZ2dmFhobW+OHq1ashf3l5+XM3IDQ0lHZNz0rR1XI/Pz/4PC8vD57Uychs2rTpRRBnURR/+uknKOT+/ft11Vo9wDWShgGffvopJA4ePMhKFnl5eZAICAjQKjKzmeX3pMInjx8/plKMLgWCfW5gYFBL6R4+UavVWvM0b968XtmLJCd+Hzt2zMLC4sSJE5WVlZAhPT3d19e3odu4qJALOMOeRwnySosWLUxMTOrcrnL58mVTU9MDBw48evSI4tucOXP++OMP/doMi2/PMfhQjvzWSz2frFq1CjOAEPLy8oKWtGnTpg5PV6QyyotQN2lna+wvN229KqatN998E9KLFy9m0eLzzz/HGLdv317XMqvx4nGMsbW1dXh4eExMTGBgIJufVav14KLcyKvL7PvFF1+wUoylpaWkebrsbDV6WaiZ7i9Z5CX5aR/h97333oPnqampkDMpKalVq1Y1OgBqYzOsZY/kD2vv7tLVfTrmZWVlEiNSYGAgIaSkpMTIyEh/d2rTC1osgLOzMzxPSEiAV2lpae3atavRT6Droa4hktuE5SVIblCXlFleXg5vQZZHCI0cOZIQolarzczMUK2djjWSb39/f4kFeOPGjXJ5v5ZV1Ka/LwgMOZmu/4AxNjY29vT0jI+Pz87OpsihUqni4+MRQjNmzKAr9ttvv718+bKxsXFgYKBCoZCIJwih0NDQCxcuuLq6Tp8+HRBOqVSeOHHCxMRk9OjRZmZmFO3WrFlz7dq1Tp06hYSEyHGRPgkLC0tLSzM0NPT393dxcZHcxMACvW2Uxfhffvll7969QUFBLi4u69evT09Pd3Jy+vjjjyW0b8uWLb///jvGeOrUqQMGDIBaNBqNn5+fkZFRRETEunXrMjIyfvjhB0NDQ4zxihUr8vLyqJIhCIK3t/eePXsEQYiMjKSFg8kiOjpasvaoCpibm2ttbQ1pV1dXat8D09zatWthqfv6+r777ru0X35+fhqNZvv27adOnYqOjhZFMTg4GAYHvr19+/ayZcs0Go0oijNnznR2dsYYBwQEqNXqjRs3Nm/eHCH06NGjOXPmqNXqbdu2CYKQmJj4448/+vj4DBkyZM2aNZmZmX369AkODkYIXbp0adOmTSqVau7cuW+//TZUcfLkyW3btk2dOnXgwIExMTEnTpzo2LHjihUroIUzZsw4e/YsHQR2sqqrq2NjYwVBgNE7c+bMDz/8IAiCQqGYOXMmPEcIwXNvb28vL6/vv//+zJkzdnZ2ixcvllM0Qsi//vUvmP0TJ04MGjQIKlIoFHfu3KH5k5KSIiMjEUIqlerDDz8cNmyYnqsGIyIikpOTmzdvvnbtWlNTU0JISkrK1q1bzczMNm/eDC0HHPDy8vrggw/k0tXFixf37t2bk5ODEHJycgoKCjI0NATh7MCBA1pHpqKiYseOHQYGBvDw3r17mzZtun37tlqtHjNmDGgthJCMjIzVq1e7ubn5+flFR0fDyC9duhRuYpfIapILb6qrq1mt4sGDB2FhYTk5OWq1etSoUd7e3ujZ63jT0tJCQ0ONjIxsbGyCg4Nfe+21/x9/JHc/NBRzdnp6OkzZ6dOn4eGNGzfYSdy7d69kcqdOnQqvRowYgRAyMzMDeQqga9euUE5RURE8OXfuHNS1e/duOZ48fPhQku3IkSOSbOPGjaOWZdp+ahpaunSpvHfjx49HCPn4+LDltG/fnnb85MmTklpGjBgBb2HVGRgY9OrVi7p5bt++rXUtHTx4EBIajQaqzs/Pp71jvSOiKFJLiNyjADBy5EhJFQ4ODjQnLF13d3c2w88//wwZYmJiJN+qVCpCCNhwLl68CANIO15VVUUImT17NkJo9OjRxsbG9ENLS0vWoYoQOnz4MHy+YMECsF9ZWlqy5k2lUkkIgRvCdcHjx49FUSwuLm7ZsqXkFTBdQsjSpUsRQp6enmxRBgYGlZWVdLhogqrU5eXlEvSAtNyY5urqChnWrl3LfpuRkSHJeeHCBTo+YEqFD7t27YoQmjx5MiFk48aNVA8TRXHbtm3yXl++fJkQ0qlTJz0jk5ubCw3+4osvJK9at2796NEjURQjIiIQQgMGDGjbti2bobi4WI9/BVCOiiaEkK+//lpuDS4qKqIOp44dO0oyLF68GIZ0z5498KSoqOgl0CjOSBoML6mqqgLMcHNzg4fz589HCHXo0IEQQv0cLi4uUVFRVKAGswwwEoCYmBjqU7127RrLSM6fP08IoSbs1q1bR0dHz5o1C1x2EkZC2YNCoYiMjKTr6uTJk5LG05wsuLu7w4qaOHEifRgVFfXOO+9Q6iCKIlViunfvHhkZuWzZMmoeoYyEhaNHjwJJcnBwCA8PHzVqFFDPyMhIURQhT3BwMFQ9cOBAhJChoaE8QABydujQQeJ+h3R4eDhkGDZs2NatW4EXIoTAg8KKmUOGDAEpGwB4GKRnzpwZHh4+Z84cykiAlFy6dAlqSUpKoiqCRqOZN28eLWfLli2geUBFbm5u0dHR9C10gQ0xCgsLo3+HDh1KCImOju7Tpw88CQ8P37p1a3h4eGBgIOtsB8UIIbRp06bo6GjKwB4+fCiKIp0LMMjQedyxYwcrTMDv66+/jhAC1UErY0YIvfvuu1u2bAkPD6ehJbm5uRJGQgihvvqNGzcCqd25c6coinPnzmUHmRDy1ltvgeOHZSTQtejo6A4dOixYsCAiImL79u3QU0dHR0LIrl27hg8fTmNYwsPDw8PD6YK6efOmKIqnTp2Cvz169IiKiqJV9+7dmxASFRVFR+af//znjBkzIL1kyRJ9/mqGkYiimJqaCl/Z29tHRUXR6evRowfkp9MXEhKybds2ylSSk5NFUaSyIGckHKRKiYeHB0KoZcuW8AQQZeXKlYQQkLBee+01+gmY+EF4B0Zibm4OH1ZUVMC369atI4RIGMmuXbsQQmAlh3rT0tJEUWQZCSEkLi6OlsnqPYMGDZKQCa2M5IMPPoC3oIsYGxurVCqWiH/55ZdU6TE2NqaljR07FmwRLCNRKBQlJSUSuzkbwgtpqiIQQjQaDeWsrJzItqFz585aRUh427dvX/qEqkRAxYC+BwUFQYHff/89q3kAyQACJyclly5dghpZRkIIodSKkgYwlbi7u0MtoCJQDYaSnsePH0N+R0dHtsAJEyawIjwb6lNaWpqZmQnpnJwcigmgM0GoVUhICGQoKCiA8lu3bo0QmjBhAhvvxL5q0aKFVi5Cde6QkBB/f39grgihK1euiKLIMpLc3FxIZ2RkwLe3bt26desWOz5qtRoK1MVIaANSUlICAgL8/f1Bd6FoQ6UisD0SQn777TfKSAghvXv3RghZWVnRxlN96P79+1R0gJVCCHFwcGBFwNpoJCBRtW3bllaxZMkSKLawsJBGWu7evZtmANc9aGAvmZFwZ3uDcZMQQr755huEUElJSX5+PjXgfPnllwih/fv3AxJT3+bRo0dhKdJCzM3NJeFbZWVlcn8gmMhARgOCqFAo5E0CRlJaWkpr3LdvH4Q26doiALwBIC4ujs1gZGQEFmpK38HhCetBqVTSWoDYXblyhbX8bt68GYgUIQTK6dKlS2BgoIuLC9uSHTt2QOLu3bu3bt2CDsLOGNpmttj8/HytXll4CFIqjYCSDxGYvzDGQNFoZqCM27dvxxgPHDiQEkc9gQAsUJEc5nHIkCGSWiRuWFNTU/hLJX1JQLbkFnp2fhFC4A9nUUjSYBBfEEKgC4KYIvHMAc+jyq58PMeMGePg4LB8+fKIiAgaqgvzztYF9kmqiBNC2rdvb2VlJelOjV6B69evY4z79esXHh4eERFBuWYtHQx3795FCE2aNImOHngvYEXQbNSgBxZCkKhqGUB18+ZNhBAtFiFE9aSHDx+ePn0a0tRfCMoKQgii4F7ytifubG8wgVsIIVtbW/g7f/58ME916NCBJRZyoKKWroUhRzg2Wpd160my6YpctLOz0+UjBUFYK8nWWgsVsuQgIZpg94c0eKRv3LhBfUg0ZtrCwgKeTJ8+HUgbUEm2SZBTEAR2B4yktZAH3sJzqsTUJrpp/vz5AwYMWLly5f79+0+dOmVra6vRaCh3p/Ga8nDt2iCJ1sGEV3RmqcNcT/wP7ZG8ZPYVW5fWoEEYulatWgGBKykpAZbPcuiUlBSw6bu5uY0fP97ExMTPz0/rSFI5Q+7Pr32cEsb4/fffh/Tq1atbtGixbds2GnogaZueCQUEqE1Um9aoOf0Ag0z7KymEToFGo5EUCK9ecpA610gajEaCMTYxMQGpJCkpCazDEK9JhRELCwuJyknjT2oP/fv3Z4VHjLHcvYkQ6tmzJ0KoadOmkhqTk5N1iYSSkHb9uA6ZQRliTVsA//vf/7QuTlEUfXx8DAwMMjIywsLCNm/e/ODBg6FDh0IeQRDWrVuHENq3b9/PP/+MEIqNjZVTQ4wxjVwYO3Ys2x1qpAKTN+3Fhg0baBW1IfcuLi7x8fGPHj0CYxG4Z6GWCxcuQDosLKxOkIdqjXT7G6gO7ERIpgxjDGgA0jdlloAVw4YN+0uxPKwu6OnpyaJBbGxsWVlZYmIijZUICAiYMmWKLtwAFRMhlJeXB62qqKjIzs7GGFNFjfrVtIZdUHMfQujIkSOLFi0KCgpidRqMMcsptWIySCRbt26leWgAhUQ9em6AEAkWP3fu3AkJGxubbt26QRpsbjBc586dQwhBmDXXSDjoXJMY43Xr1h04cAA0a9ZYNHny5IULFxYXF3fu3NnDw0MUxfz8/JMnT6akpOiyeOiqxcfHZ9asWWq1ulmzZn5+foWFhbt37z5z5oy9vT2bbdKkSTNmzCgvL7exsRkxYoQoigUFBadPn05ISAAeIzeYJCQklJWVUXotJ5TyPRMTJ06cMmWKUql84403vLy8CCF37txJSUmJi4vr27evZHCoHK3RaDZs2ADO4ejo6BEjRoCRASIUIJwJWujm5iZpAEjrHh4exsbGSqVy9+7dDg4OgwcPRggdOnQoJycnMDBw2rRpkZGR2dnZrq6uCoXi7NmzoP1ANHZtZAI3N7du3bpVV1dDg4E+gvjp6+t7+vTp8+fPUxn5b4KFhUVgYGBWVhYQ1iVLlkAfaVhzcHDw9evXJTLHoEGDQC2zsbEJCAgwNTUNCwuDCaIBEbXsLPiQbG1tc3JykpOTra2tPTw8DA0Njx49evXq1dzcXOphGj9+fLt27ag/Q46uzs7OJiYm1dXVPXv29Pf3F0UxKipqzZo1Cxcu9PT0BP+/QqEYOnQotY9phWbNmhUVFY0dO3bSpElZWVkJCQlsjZQZ+Pr6FhcXx8bGSjBzxowZQUFB5eXlXbt2dXd3z87OPnz4MELos88+e469nFpj62fOnJmSklJZWdmlS5fhw4fn5OSA+To4ONjU1NTOzq5du3aFhYUTJ06Mj49v06bN9u3bAZfmzZunVZF6sbtJuB+7gcZugVmGfUs9pSzk5+dTLz0ckcIGXC1dupQ9IgWc6oQQNtCI2ruosz01NRWyaaWb2dnZklBats0s/PbbbzT8t0mTJpCZWpNmz54NJbCLnMKVK1cIIbTkxMREOg7seUoUvvvuO+r+pfEtdnZ2ek6PUCqVrq6uknIcHR3hE2obofDJJ59INpfFx8dD5mPHjslNcKztGxp26NAhSYGgr4BJkLpzwWNPQ2ZXrVoFtVDptaqqShRFGmjEBqF27tyZdXdLFJf//ve/NC2K4sWLFyVNNTY2Bs+2KIrU91tZWQmlQUWenp5aDxohhEj2cyCE2rdvX1FRQQihIjbrjDl//jx7RApE7qalpUkKuXjxIlTk5OT0p7FFEKZOnYqeOp8lR6RImDTdLEnbDJ42qv0cP36cpiEDnQ52HqGzoF+CHQ8ygyEaNhJpPYKFzsWaNWvoBC1atEhSxXvvvUe/unPnDhvNDwAxk5IjUvSce1RXwDWSBuYmMTExSUpKgmiQd955h5UyxowZo9Fo4uPjAdetrKx69eoFRPPTTz91d3eHzUpgItu0aZMoiu+//z7GuHnz5uvXrzcwMHBwcIDS/Pz8hg8fvmfPHrVabW1tDRFWTZs2hWw9evQAMdPDwwOsZ9evX4cQz169enXp0kViMzExMYmIiKD7qClA9O2cOXP69etHffsGBgZhYWEqlcrNzQ1qgcVz6NChrKwskK8VCkW3bt0gbOnbb78VBMHZ2RkqrayshGW8dOnS1q1bAwXJz8+fNWvWxx9/DE06ffo0DMv27dv1SGqGhobJyclXrlyBI8hAjaDBl4cOHUpPT4eIBtjLCT5nuj9ZFMX+/ftDF1xcXOCJgYEBIeTKlSuJiYmgfwwePBgUOGBOGRkZENk8bNgwe3t7Ozs7lUoFRG3atGk2NjZGRkZQCMZ4w4YNKpVqzJgxdKBCQ0M1Go1k49vdu3f/85//3Lt3r3fv3v3792ddQX/88cdPP/2k0Wj69evXtGnT4cOHb9iwQRRFcE1BZxMTE2GDhaurK4wzlDBx4kQLCwtBEExMTGh7ioqK6I5I+dbUuLi4nJychIQEYHWDBw8G0yWEbB0+fDgzM9PMzGzatGlxcXEFBQXW1tYY49GjR5uYmGCMgW4qFIrS0tJff/21qKioVatWPj4+dB/+uXPn4uPjb9y48cYbb3h7e+fk5Dg6OoK6A+GLgiDArhdnZ+eCgoL9+/dXVlY6OTn94x//CA0NpcoEhDLu2rWrsrKye/fu1tbWlpaW69evF0URmCXg1YIFCw4fPlxWViYIwqhRo2DzE0LI3d19w4YNgiDAIUAY4yVLlmRlZVG1WLIJEdLR0dElJSXUo04IWb169Zw5cw4ePPj48WOMsbe3d8eOHalzyNLSsry8PDk5OTU1VRCEbt26sfuW+vfvv379ekEQYBW8cNs74RdbNRwuwmIem9DvcSXaDg9mMVjr8SdgKaaEQFIXefZUV2oRoh/K3bnsWbOS9sjbVktPsnwo1q5du2jRIgMDg5KSkmbNmiGEvLy8wOFBmxoQEBAZGQntZPceaq1Ra7N1WQxITYfdag1hkAQgSMZE3gD5X9YzT0tbtGgRhIcplUogtTW6xHVNkP5sugqUdFzraTR/CR/kNbLmU12xBpIyJXQc1eJ0bT1t1uVF19VUedvksSfyh5I+SozG8rc1Bl9wH8kr7W+ny0AXzZUvMPky04Pcksx6YntoZlbkpN/S0zV0LRWtywNpC8KRr1VdcV/wCpwZGo2GxjoDfPXVV5SOgOEOwhP0cBE97E0ytnr6oot/6KLF5Nlz3eU1Skg5kR0Ir6c7ukQQ9q1WDzx9pYflyBuph7tIxlOerpE9SCrSWrI8skuOMFpxW1e9euQJ+fLRlVlXG3QJi3Ic0yqO1HKuXxDwqK2GxEVYkqELgfTk0Ur35SxH68Jmi9V1lJYkv3zla2UnWtuGnt0NIO+XVqUEY9ynT5+YmBjWhe7u7v7LL7/AeZEYYxrmHxUVJQ9jrXG1y8mK1rScsuuaHTYh76+uMdc6uZJBoyeXSEpGsp0WEnzQU7hW5JEzVz24IT+MVitH0SMryMdZPoASRqh1jnSNM0ug5cXWOKeSevWIffIZ0TrjetayrgZLaMVLOP2Xm7Y4NBLTX22sT3qOnnwVxofjCQeukXDgUFvrn9xEIz91XG4nbHzMQ5LgwIFrJBw41Ew3tXqttbp5kY6jQRqfIqInoIADB85IOHD4ayT1FbTwvLId58AZCQcOHDhwaDDAFV4OHDhw4MAZCQcOHDhw4IyEAwcOHDg0UPg/EZyCAsLAcW8AAAAASUVORK5CYII=" /><br /> <br /> -Version: VECTO 3.2 / VectoCore 3.2.0 / VectoCmd 3.2.0</p> +Version: VECTO 3.3 / VectoCore 3.3.0 / VectoCmd 3.3.0</p> <hr /> <p>VECTO is a tool for the calculation of energy consumption and CO<sub>2</sub> emissions of vehicles. It models the components of a heavy-duty vehicle and simulates a virtual drive on a route. The goal is to provide a standardized way of calculating the energy consumption (fuel consumption) and corresponding CO<sub>2</sub> emissions.</p> <p>This User Manual consists of 4 Parts:</p> @@ -272,7 +272,7 @@ Version: VECTO 3.2 / VectoCore 3.2.0 / VectoCmd 3.2.0</p> </dd> </dl></li> </ul> -<p>This user manual describes verson 3.2.x of Vecto.</p> +<p>This user manual describes verson 3.3.x of Vecto.</p> </div> <div id="user-interface" class="section level1"> <h1>User Interface</h1> @@ -2754,20 +2754,44 @@ Example: “Gears\Gear1.vtlm†points to the “Gears†subdirectory of the Ge <div id="verification-test-mode" class="section level2"> <h2>Verification Test Mode</h2> <p>The purpose of the verification test is to simulate a vehicle defined in declaration mode on a measured real-driving cycle. This simulation mode uses its own <a href="#verification-test-cycle">cyle format</a>, requiring mainly vehicle speed, wheel speed, wheel torque, engine-fan speed, and engine speed. VECTO then calculates the appropriate gear and simulates the cycle. Auxiliary power is according to the technologies defined in the vehicle. However, the engine fan auxiliary is ignored and the power demand for the engine fan is calcuated based on the engine-fan speed. The power demand for the other auxiliaries depends on the vehicle’s actual speed. The fuel consumption is calculated using the engine speed from the driving cycle and the torque demand as given in the cycle, adding the losses of all powertrain components.</p> -<div id="requirements-2" class="section level3"> -<h3>Requirements</h3> +<div class="engineering"> +<h3 id="requirements-2">Requirements</h3> <ul> <li>One or more checked job files in the Job List</li> <li>Each job must include a vehicle in declaration mode (XML)</li> <li>Each job file must include at least one driving cycle</li> </ul> +<h3 id="results-2">Results</h3> +<ul> +<li>Modal results (.vmod). One file for each vehicle/cycle combination. Modal results are only written if the modal output is enabled in the ‘Options’ tab on the <a href="#main-form">Main Window</a></li> +<li>Sum results (.vsum). One file for each invocation of VECTO.</li> +</ul> </div> -<div id="results-2" class="section level3"> -<h3>Results</h3> +<div class="declaration"> +<h3 id="requirements-3">Requirements</h3> <ul> +<li>One or more checked job files in the Job List</li> +<li>Each job must include a vehicle in declaration mode (XML)</li> +<li>Each job must include the manufacturer report (XML) of the vehicle as generated for the vehicle delcaration</li> +<li>Each job file must include exactly one driving cycle (in case multiple driving cycles are provided, only the first cycle is simulated!)</li> +</ul> +<h3 id="results-3">Results</h3> +<ul> +<li>VTP Report (.xml). Contains a description of the vehicle and its components, the verification test analysis according to the draft legislation, and a validation of the input data digest values</li> <li>Modal results (.vmod). One file for each vehicle/cycle combination. Modal results are only written if the modal output is enabled in the ‘Options’ tab on the <a href="#main-form">Main Window</a></li> <li>Sum results (.vsum). One file for each invocation of VECTO.</li> </ul> +<h3 id="validations">Validations</h3> +<ul> +<li>Before the simulation of the measured VTP cycle starts, the provided cycle data is passed through some sanity checks:</li> +<li>The cycle is provided in 2Hz</li> +<li>The ratio of wheel speeds (left/right) should be lower than 1.4 for wheel speeds above 0.1rpm</li> +<li>The absolute difference of wheel speeds (left/right) should be lower than 1rpm for wheel speeds below 0.1rpm</li> +<li>The torque ratio (left/right) should be lower than 3 and the absoulte difference should be lower than 200Nm.</li> +<li>The fan speed shall be between 20 and 4000rpm, unless the vehicle is equipped with an electric fan</li> +<li>The fuel consumption within a window off 10min should be between 180 and 600 g/kWh_(PWheel_pos)</li> +</ul> +<p>In case the provided cycle exceeds these limits an according warning message is shown in the user interface and written to the report.</p> </div> </div> <div id="engine-only-mode" class="section level2"> @@ -3629,7 +3653,7 @@ Example: “Gears\Gear1.vtlm†points to the “Gears†subdirectory of the Ge <div id="pwheel-input-sico-mode" class="section level2"> <h2>P<sub>wheel</sub>-Input (SiCo Mode)</h2> <p>For verification tasks it is possible to manually input the power at wheels (P<sub>wheel</sub>) which is normally calculated via longitudinal dynamics. In this case VECTO only calculates the losses between wheels and engine and adds auxiliary power demand. This mode is active as soon as P<sub>wheel</sub>, Gear and Engine Speed are defined in the driving cycle.</p> -<div id="requirements-3" class="section level3"> +<div id="requirements-4" class="section level3"> <h3>Requirements</h3> <ul> <li>Driving Cycle must include t, P<sub>wheel</sub> (Pwheel), Gear (Gear) and Engine Speed (n), see <a href="#driving-cycles-.vdri">Driving Cycle (.vdri) format</a>.</li> @@ -5406,6 +5430,7 @@ CycleTime,UnknownCycleName,3600</code></pre> <p>This driving cycle defines the target speed over distance. Vecto tries to achieve and maintain this target speed.</p> <p>Header: <strong><s>, <v>, <stop></strong><em>[, <Padd>][, <grad>][, <PTO>][, <vair_res>, <vair_beta>][, <Aux_ID>]</em></p> <p><strong>Bold columns</strong> are mandatory. <em>Italic columns</em> are optional. Only the listed columns are allowed (no other columns!).<br /> Units are optional and are enclosed in [square-brackets] after the header-column. Comments may be written with a preceding hash-sign “#â€.</p> +<p><strong>Note:</strong> if the cycle starts with a target speed of 0 km/h and the stop-time for the first entry is 0, VECTO sets the stop-time to 1s automatically.</p> <table style="width:100%;"> <colgroup> <col width="4%"></col> @@ -6566,6 +6591,34 @@ CycleTime,UnknownCycleName,3600</code></pre> </div> <div id="changelog" class="section level1"> <h1>Changelog</h1> +<p><strong>VECTO 3.3.0</strong></p> +<p><strong><em>Build 1250 (2018-06-04)</em></strong></p> +<ul> +<li>Improvement +<ul> +<li>[VECTO-665] - Adding style information to XML Reports</li> +<li>[VECTO-669] - Group 1 vehicle comprises vehicles with gross vehicle weight > 7.5t</li> +<li>[VECTO-672] - Keep manual choice for “Validate dataâ€</li> +<li>[VECTO-682] - VTP Simulation in declaration mode</li> +<li>[VECTO-652] - VTP: Check Cycle matches simulation mode</li> +<li>[VECTO-683] - VTP: Quality and plausibility checks for recorded data from VTP</li> +<li>[VECTO-685] - VTP Programming of standard VECTO VTP report</li> +<li>[VECTO-689] - Additional Tyre sizes</li> +<li>[VECTO-702] - Hashing tool: adapt warnings</li> +<li>[VECTO-667] - Removing NCV Correction Factor</li> +<li>[VECTO-679] - Engine n95h computation gives wrong (too high) engine speed (above measured FLD, n70h)</li> +<li>[VECTO-693] - extend vehicle performance in manufacturer record</li> +</ul></li> +<li>Bugfixes +<ul> +<li>[VECTO-656] - Distance computation in vsum</li> +<li>[VECTO-666] - CF_RegPer no effect in vehicle simulation – added to the engine correction factors</li> +<li>[VECTO-687] - Saving a Engine-Only Job is not possible</li> +<li>[VECTO-695] - Bug in vectocmd.exe - process does not terminate</li> +<li>[VECTO-699] - Output in manufacturer report and customer report (VECTO) uses different units than described in legislation</li> +<li>[VECTO-700] - errorr in simulation with 0 stop time at the beginning of the cycle</li> +</ul></li> +</ul> <p><strong>VECTO 3.2.1</strong></p> <p><strong><em>Build 1133 (2018-02-07)</em></strong></p> <ul> diff --git a/Documentation/VectoResults_3.3.0.1250.xlsx b/Documentation/VectoResults_3.3.0.1250.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..cd29096806df1bb05918c9ba533ca4e3189b526a Binary files /dev/null and b/Documentation/VectoResults_3.3.0.1250.xlsx differ diff --git a/Documentation/VehiclesReleaseComparisonDeclarationMode/Rigid Truck_4x2_vehicle-class-1_EURO6_2018.xml b/Documentation/VehiclesReleaseComparisonDeclarationMode/Rigid Truck_4x2_vehicle-class-1_EURO6_2018.xml index fc119c93680a9b1b0b0585d63b7c5c4795cbdf91..def793341ac2cca6285c554b283455f60c5bc83e 100644 --- a/Documentation/VehiclesReleaseComparisonDeclarationMode/Rigid Truck_4x2_vehicle-class-1_EURO6_2018.xml +++ b/Documentation/VehiclesReleaseComparisonDeclarationMode/Rigid Truck_4x2_vehicle-class-1_EURO6_2018.xml @@ -10,7 +10,7 @@ <VehicleCategory>Rigid Truck</VehicleCategory> <AxleConfiguration>4x2</AxleConfiguration> <CurbMassChassis>4010</CurbMassChassis> - <GrossVehicleMass>7500</GrossVehicleMass> + <GrossVehicleMass>7501</GrossVehicleMass> <IdlingSpeed>600</IdlingSpeed> <RetarderType>None</RetarderType> <AngledriveType>None</AngledriveType> diff --git a/Documentation/XML/CSS/VectoReports.css b/Documentation/XML/CSS/VectoReports.css index db813a5dd23f383b17ffb08462dd2cad7fcd68fe..4fa9df36af5a0c541274d298e3e4856b25549963 100644 --- a/Documentation/XML/CSS/VectoReports.css +++ b/Documentation/XML/CSS/VectoReports.css @@ -36,6 +36,8 @@ Result * { display: block; } ApplicationInformation { display: block; } Signature { display: none; } ResultDataSignature { display: none; } +VectoVTPReport General {display: none; } +VectoVTPReport TestConditions { display: none; } *[unit]:after { display: inline-block; min-width: 5em; padding-left: 0.3em; text-align: left; } *[unit="g/km"]:after { content: "g/km"; } @@ -52,6 +54,14 @@ ResultDataSignature { display: none; } *[unit="kg"]:after { content: "kg" } *[unit="km/h"]:after { content: "km/h" } *[unit="m/s²"]:after { content: "m/s²" } +*[unit="kW"]:after { content: "kW" } +*[unit="kWh"]:after { content: "kWh" } +*[unit="MJ/kg"]:after { content: "MJ/kg" } +*[unit="g/kWh"]:after { content: "g/kWh" } +*[unit="rpm"]:after { content: "rpm" } +*[unit="t"]:after { content: "t" } +*[unit="ltr"]:after { content: "ltr" } + Data { @@ -81,6 +91,10 @@ VectoOutput Data:before { VectoCustomerInformation Data:before { content: "Customer Information"; } +VectoVTPReport Data:before { + content: "VT Report"; +} + Data:after { content: "Note: this presentation of the report does not show all details!"; display: block; @@ -187,13 +201,13 @@ Vehicle *:after { padding-left: 0.3em; text-align: left; } -Vehicle CurbMassChassis:after { content: "kg"; } +/*Vehicle CurbMassChassis:after { content: "kg"; } Vehicle GrossVehicleMass:after { content: "kg"; } Vehicle RatedPower:after, Vehicle EngineRatedPower:after { content: "W"; } Vehicle Displacement:after, Vehicle EngineDisplacement:after { content: "cm³"; } - +*/ Vehicle Components { /*margin-left: 20px;*/ display: flex; @@ -392,12 +406,13 @@ Payload { margin-right: 20px; text-align: right; } -Payload { - order: 0 -} -TotalVehicleMass { - order: 2; -} +Payload { order: 0 } +TotalVehicleMass { order: 2; } +AverageSpeed {order: 3;} +AverageDrivingSpeed {order: 4;} +MaxSpeed { order: 5; } +GearshiftCount {order: 6;} +EngineSpeedDriving {order: 10;} VectoCustomerInformation Payload:before, VectoCustomerInformation AverageSpeed:before { @@ -420,15 +435,31 @@ Result VehiclePerformance FullLoadDrivingtimePercentage display: none; } VehiclePerformance AverageSpeed:before, -Result AverageSpeed:before { - content: "Average Speed:" -} +Result AverageSpeed:before { content: "Average Speed:" } +VehiclePerformance AverageDrivingSpeed:before { content: "Average Driving Speed:" } VehiclePerformance MaxSpeed:before { content: "Max. Speed:"; } +VehiclePerformance EngineSpeedDriving:before { content: "Engine Speed driving:"; position: relative; font-style: italic; } +VehiclePerformance EngineSpeedDriving Min:before { content: "Min:"; } +VehiclePerformance EngineSpeedDriving Max:before { content: "Max:"; } +VehiclePerformance EngineSpeedDriving Average:before { content: "Average:"; } +VehiclePerformance EngineSpeedDriving *:before { padding-left: 20px; } VehiclePerformance GearshiftCount:before { content: "# Gearshifts:"; } -VehiclePerformance GearshiftCount:after { display: inline-block; min-width: 5em; padding-left: 0.3em; text-align: left; content: " "} +VehiclePerformance GearshiftCount:after, +VehiclePerformance EngineSpeedDriving Min:after, +VehiclePerformance EngineSpeedDriving Max:after, +VehiclePerformance EngineSpeedDriving Average:after + { display: inline-block; min-width: 5em; padding-left: 0.3em; text-align: left; content: " "} + +VehiclePerformance EngineSpeedDriving { margin-top: 0.5em;} + AverageSpeed, MaxSpeed, -GearshiftCount { +GearshiftCount, +AverageDrivingSpeed, +EngineSpeedDriving Min, +EngineSpeedDriving Max, +EngineSpeedDriving Average + { width: 100%; margin-right: 20px; text-align: right; @@ -490,3 +521,273 @@ Result CO2:first-of-type:before { margin: 10px 0 5px 40px; } +DataIntegrityCheck, +VectoVTPReport Results +{ + display: flex; + flex-flow: row wrap; + border: 2px solid #1f6032; + padding: 5px 10px; + margin: 5px 0; +} +DataIntegrityCheck { + order: 10; +} + +DataIntegrityCheck[status=failed] { + border-color: red; +} + +DataIntegrityCheck > * { + display: flex; + flex-flow: column; + flex-basis: calc(100% - 20px); + width: calc(100% - 20px); + padding-left: 40px; +} +DataIntegrityCheck JobData { + order: 1; + border-bottom: 2px solid #1f6032; + padding-bottom: 10px; + margin-bottom: 10px; +} +DataIntegrityCheck JobData:before { content: "Job Data Integrity" } + +DataIntegrityCheck ManufacturerReport { + order: 2; + border-bottom: 2px solid #1f6032; + padding-bottom: 10px; + margin-bottom: 10px; +} +DataIntegrityCheck ManufacturerReport:before { content: "Manufacturer Record Integrity" } + +DataIntegrityCheck Components:before { + content: "Component Integrity"; + margin-left: -20px; +} +DataIntegrityCheck Components { + order: 3; + padding-left: 20px; +} +DataIntegrityCheck ManufacturerReport[status=failed], +DataIntegrityCheck JobData[status=failed], +DataIntegrityCheck Component[status='failed'] +{ + background-color: rgba(255, 0, 0, 0.3); +} + +DataIntegrityCheck > *:before { + display: block; + font-weight: bold; + font-style: normal; + margin: 10px 0 5px; + margin-left: -40px; + color: #1f6032; +} + +DataIntegrityCheck Component:before { + display: block; + /*font-weight: bold;*/ + font-style: normal; + margin: 10px 0 5px; + margin-left: -20px; + color: #1f6032; +} +DataIntegrityCheck Component[componentName='Engine']:before {content: "Engine";} +DataIntegrityCheck Component[componentName='Gearbox']:before {content: "Transmission";} +DataIntegrityCheck Component[componentName='Torqueconverter']:before {content: "Torque Converter";} +DataIntegrityCheck Component[componentName='Retarder']:before {content: "Retarder";} +DataIntegrityCheck Component[componentName='Angledrive']:before {content: "Angledrive";} +DataIntegrityCheck Component[componentName='Axlegear']:before {content: "Axlegear";} +DataIntegrityCheck Component[componentName='AirDrag']:before {content: "Cabin/Airdrag";} +DataIntegrityCheck Component[componentName='Axle']:before {content: "Wheels";} +DataIntegrityCheck Component[componentName='Tyre (1)']:before {content: "Tyre Axle 1";} +DataIntegrityCheck Component[componentName='Tyre (2)']:before {content: "Tyre Axle 2";} +DataIntegrityCheck Component[componentName='Tyre (3)']:before {content: "Tyre Axle 3";} +DataIntegrityCheck Component[componentName='Tyre (4)']:before {content: "Tyre Axle 4";} +DataIntegrityCheck Component[componentName='Auxiliaries']:before {content: "Auxiliaries";} + +DataIntegrityCheck Components Component { + display: flex; + flex-flow: column; + flex-basis: calc(100% - 20px); + width: calc(100% - 20px); + /*margin-bottom: 20px;*/ + padding-left: 20px; + /*border-bottom: 2px solid #1f6032;*/ +} + +DataIntegrityCheck Component > *:before, +DataIntegrityCheck ManufacturerReport > *:before, +DataIntegrityCheck JobData > *:before + { + min-width: 20em; + padding: 0 5px 0 0; + display: inline-block; + font-style: italic; +} + +DataIntegrityCheck DigestValueRead, +DataIntegrityCheck DigestValueRecomputed +{ + /*order: 99;*/ + overflow: hidden; + margin-right: 2em; + text-overflow: ellipsis; + white-space: nowrap; + font-family: monospace; + font-size: larger; +} +DataIntegrityCheck DigestValueRead:before, +DataIntegrityCheck DigestValueRecomputed:before +{ + font-family: sans-serif; + font-size: medium; +} +DataIntegrityCheck DigestValueRecomputed:before { content: "Digest Value Recomputed:"; } +DataIntegrityCheck DigestValueRead[source='JobData']:before { content: "Digest Value in Job Data:"; } +DataIntegrityCheck DigestValueRead[source='ManufacturerRecord']:before { content: "Digest Value in ManufacturerRecord:"; } + +VectoVTPReport Results { + display: flex; + flex-flow: column; + flex-basis: calc(100% - 20px); + width: calc(100% - 20px); + padding: 5px 10px; + margin: 5px 0; +} +VectoVTPReport Results:before { + content: "Results"; + display: block; + font-weight: bold; + font-style: normal; + margin: 10px 0 5px; + /*margin-left: -20px;*/ + color: #1f6032; +} + +VectoVTPReport Results AverageFanPower:before {content: "Average Fan Power:";} +VectoVTPReport Results WorkPosVT:before {content: "E_Wheel_pos.:";} +VectoVTPReport Results TestFuelNCV:before {content: "NCV of Test Fuel:";} +VectoVTPReport Results Measured:before {content: "Measured:";} +VectoVTPReport Results MeasuredCorrected:before {content: "Corrected measured:";} +VectoVTPReport Results Simulated:before {content: "Simulated:";} +VectoVTPReport Results Declared:before {content: "Declared:";} +VectoVTPReport Results Verified:before {content: "Verified:";} +VectoVTPReport Results VTRatio:before {content: "VT Ratio";} +VectoVTPReport Results Mission:before {content: "Simulated Mission:";} + +VectoVTPReport Results AverageFanPower, +VectoVTPReport Results WorkPosVT, +VectoVTPReport Results TestFuelNCV, +VectoVTPReport Results Measured, +VectoVTPReport Results MeasuredCorrected, +VectoVTPReport Results Simulated, +VectoVTPReport Results Declared, +VectoVTPReport Results Verified, +VectoVTPReport Results Mission +{ + position: relative; + width: calc(40% - 40px); + display: block; + text-align: right; + margin-left: 40px; + padding: 5px 0; +} +VectoVTPReport Results Mission { + text-align: left; + padding-left: 13em; +} + +VectoVTPReport Results AverageFanPower:before, +VectoVTPReport Results WorkPosVT:before, +VectoVTPReport Results TestFuelNCV:before, +VectoVTPReport Results Measured:before, +VectoVTPReport Results MeasuredCorrected:before, +VectoVTPReport Results Simulated:before, +VectoVTPReport Results Declared:before, +VectoVTPReport Results Verified:before, +VectoVTPReport Results Mission:before +{ + position: absolute; + left: 0px; +} + + +VectoVTPReport Results > * { + flex-basis: calc(100% - 40px); + width: 100%; + /*padding-left: 40px;*/ +} +VectoVTPReport Results > *:before, +VectoVTPReport Results FuelConsumption > *:before, +VectoVTPReport Results CO2 > *:before + { + min-width: 12em; + width: 12em; + padding: 0 5px 0 0; + display: inline-block; + font-style: italic; + text-align: left; +} + +VectoVTPReport Results FuelConsumption, +VectoVTPReport Results CO2 +{ + display: flex; + flex-flow: column; + padding-left: 0px; +} + +VectoVTPReport Results FuelConsumption:before { content: "Fuel Consumption Calculations"; } +VectoVTPReport Results CO2:before { content: "CO2"; } + +VectoVTPReport Results FuelConsumption:before, +VectoVTPReport Results CO2:before, +VectoVTPReport Results VTRatio:before +{ + display: block; + font-weight: bold; + font-style: normal; + margin: 10px 0 5px; + /*margin-left: -40px;*/ + color: #1f6032; + font-size: medium; + width: 100%; +} + +VectoVTPReport Results VTRatio { + font-size: larger; + margin-top: 10px; + margin-bottom: 10px; + font-weight: bold; + padding-left: 40px; +} +VectoVTPReport Results VTRatio:before { + margin-left: -40px; +} + +VectoVTPReport Results Warnings:before { + content: "Simulation Warnings:"; + display: block; + font-size: larger; + margin-top: 10px; + margin-bottom: 10px; + font-weight: bold; + font-style: normal; + + /*padding-left: 40px;*/ +} +VectoVTPReport Results Warnings { + display: flex; + flex-direction: column; + flex-basis: 100%; + border: 2px solid #ff9d00; + background-color: rgba(255, 157, 0,0.3) + +} +VectoVTPReport Results Warnings Warning { + display: block; + margin-left: 40px; +} + diff --git a/Documentation/XML/VectoParameters.html b/Documentation/XML/VectoParameters.html index 85b56480635151eb4b62496ddd3f039022b82018..9db3c812e6b37872549c9f294df063d7371c9ef2 100644 --- a/Documentation/XML/VectoParameters.html +++ b/Documentation/XML/VectoParameters.html @@ -222,7 +222,7 @@ div.filter span.hidden span.icon {max-width: 256px;max-height: 256px;background- <!--/*--></root><!--*/--></style></head><body> <h1>Vecto Input Parameters</h1> <div class="schemaVersion">Schema Version: 0.6 1.0 1.0</div> - <div class="generated">Generated: 15.12.2017 10:50</div> + <div class="generated">Generated: 04.06.2018 14:04</div> <div class="nextParameter">Next free parameter: 269</div> <table border="1" class="parameters"> <thead> @@ -1144,9 +1144,9 @@ div.filter span.hidden span.icon {max-width: 256px;max-height: 256px;background- <td class="xmltype">tns:TyreDimensionType</td> <td class="comment"> <div class="declaration"> - Allowed values: <span class="enumEntry">"9 R22.5"</span>, <span class="enumEntry">"9.00 R20"</span>, <span class="enumEntry">"9.5 R17.5"</span>, <span class="enumEntry">"10 R17.5"</span>, <span class="enumEntry">"10 R22.5"</span>, <span class="enumEntry">"10.00 R20"</span>, <span class="enumEntry">"11 R22.5"</span>, <span class="enumEntry">"11.00 R20"</span>, <span class="enumEntry">"12 R22.5"</span>, <span class="enumEntry">"12.00 R20"</span>, <span class="enumEntry">"12.00 R24"</span>, <span class="enumEntry">"12.5 R20"</span>, <span class="enumEntry">"13 R22.5"</span>, <span class="enumEntry">"14.00 R20"</span>, <span class="enumEntry">"14.5 R20"</span>, <span class="enumEntry">"16.00 R20"</span>, <span class="enumEntry">"205/75 R17.5"</span>, <span class="enumEntry">"215/75 R17.5"</span>, <span class="enumEntry">"225/70 R17.5"</span>, <span class="enumEntry">"225/75 R17.5"</span>, <span class="enumEntry">"235/75 R17.5"</span>, <span class="enumEntry">"245/70 R17.5"</span>, <span class="enumEntry">"245/70 R19.5"</span>, <span class="enumEntry">"255/70 R22.5"</span>, <span class="enumEntry">"265/70 R17.5"</span>, <span class="enumEntry">"265/70 R19.5"</span>, <span class="enumEntry">"275/70 R22.5"</span>, <span class="enumEntry">"275/80 R22.5"</span>, <span class="enumEntry">"285/60 R22.5"</span>, <span class="enumEntry">"285/70 R19.5"</span>, <span class="enumEntry">"295/55 R22.5"</span>, <span class="enumEntry">"295/60 R22.5"</span>, <span class="enumEntry">"295/80 R22.5"</span>, <span class="enumEntry">"305/60 R22.5"</span>, <span class="enumEntry">"305/70 R19.5"</span>, <span class="enumEntry">"305/70 R22.5"</span>, <span class="enumEntry">"305/75 R24.5"</span>, <span class="enumEntry">"315/45 R22.5"</span>, <span class="enumEntry">"315/60 R22.5"</span>, <span class="enumEntry">"315/70 R22.5"</span>, <span class="enumEntry">"315/80 R22.5"</span>, <span class="enumEntry">"325/95 R24"</span>, <span class="enumEntry">"335/80 R20"</span>, <span class="enumEntry">"355/50 R22.5"</span>, <span class="enumEntry">"365/70 R22.5"</span>, <span class="enumEntry">"365/80 R20"</span>, <span class="enumEntry">"365/85 R20"</span>, <span class="enumEntry">"375/45 R22.5"</span>, <span class="enumEntry">"375/50 R22.5"</span>, <span class="enumEntry">"375/90 R22.5"</span>, <span class="enumEntry">"385/55 R22.5"</span>, <span class="enumEntry">"385/65 R22.5"</span>, <span class="enumEntry">"395/85 R20"</span>, <span class="enumEntry">"425/65 R22.5"</span>, <span class="enumEntry">"495/45 R22.5"</span>, <span class="enumEntry">"525/65 R20.5"</span></div> + Allowed values: <span class="enumEntry">"9 R22.5"</span>, <span class="enumEntry">"9.00 R20"</span>, <span class="enumEntry">"9.5 R17.5"</span>, <span class="enumEntry">"10 R17.5"</span>, <span class="enumEntry">"10 R22.5"</span>, <span class="enumEntry">"10.00 R20"</span>, <span class="enumEntry">"11 R22.5"</span>, <span class="enumEntry">"11.00 R20"</span>, <span class="enumEntry">"12 R22.5"</span>, <span class="enumEntry">"12.00 R20"</span>, <span class="enumEntry">"12.00 R24"</span>, <span class="enumEntry">"12.5 R20"</span>, <span class="enumEntry">"13 R22.5"</span>, <span class="enumEntry">"14.00 R20"</span>, <span class="enumEntry">"14.5 R20"</span>, <span class="enumEntry">"16.00 R20"</span>, <span class="enumEntry">"205/75 R17.5"</span>, <span class="enumEntry">"215/75 R17.5"</span>, <span class="enumEntry">"225/70 R17.5"</span>, <span class="enumEntry">"225/75 R17.5"</span>, <span class="enumEntry">"235/75 R17.5"</span>, <span class="enumEntry">"245/70 R17.5"</span>, <span class="enumEntry">"245/70 R19.5"</span>, <span class="enumEntry">"255/70 R22.5"</span>, <span class="enumEntry">"265/70 R17.5"</span>, <span class="enumEntry">"265/70 R19.5"</span>, <span class="enumEntry">"275/70 R22.5"</span>, <span class="enumEntry">"275/80 R22.5"</span>, <span class="enumEntry">"285/60 R22.5"</span>, <span class="enumEntry">"285/70 R19.5"</span>, <span class="enumEntry">"295/55 R22.5"</span>, <span class="enumEntry">"295/60 R22.5"</span>, <span class="enumEntry">"295/80 R22.5"</span>, <span class="enumEntry">"305/60 R22.5"</span>, <span class="enumEntry">"305/70 R19.5"</span>, <span class="enumEntry">"305/70 R22.5"</span>, <span class="enumEntry">"305/75 R24.5"</span>, <span class="enumEntry">"315/45 R22.5"</span>, <span class="enumEntry">"315/60 R22.5"</span>, <span class="enumEntry">"315/70 R22.5"</span>, <span class="enumEntry">"315/80 R22.5"</span>, <span class="enumEntry">"325/95 R24"</span>, <span class="enumEntry">"335/80 R20"</span>, <span class="enumEntry">"355/50 R22.5"</span>, <span class="enumEntry">"365/70 R22.5"</span>, <span class="enumEntry">"365/80 R20"</span>, <span class="enumEntry">"365/85 R20"</span>, <span class="enumEntry">"375/45 R22.5"</span>, <span class="enumEntry">"375/50 R22.5"</span>, <span class="enumEntry">"375/90 R22.5"</span>, <span class="enumEntry">"385/55 R22.5"</span>, <span class="enumEntry">"385/65 R22.5"</span>, <span class="enumEntry">"395/85 R20"</span>, <span class="enumEntry">"425/65 R22.5"</span>, <span class="enumEntry">"495/45 R22.5"</span>, <span class="enumEntry">"525/65 R20.5"</span>, <span class="enumEntry">"11.00 R16"</span>, <span class="enumEntry">"6.00 R9"</span>, <span class="enumEntry">"205/65 R17.5"</span>, <span class="enumEntry">"225/75 R16C"</span>, <span class="enumEntry">"255/100 R16"</span>, <span class="enumEntry">"255/60 R19.5"</span>, <span class="enumEntry">"265/55 R19.5"</span>, <span class="enumEntry">"275/60 R19.5"</span>, <span class="enumEntry">"275/80 R20"</span>, <span class="enumEntry">"285/65 R16C"</span>, <span class="enumEntry">"295/75 R22.5"</span>, <span class="enumEntry">"325/85 R16"</span>, <span class="enumEntry">"435/50 R19.5"</span>, <span class="enumEntry">"435/50 R22.5"</span>, <span class="enumEntry">"445/40 R22.5"</span>, <span class="enumEntry">"445/45 R19.5"</span>, <span class="enumEntry">"445/65 R22.5"</span>, <span class="enumEntry">"445/75 R22.5"</span>, <span class="enumEntry">"455/40 R22.5"</span>, <span class="enumEntry">"455/45 R22.5"</span>, <span class="enumEntry">"475/80 R20"</span>, <span class="enumEntry">"7.00 R16C"</span>, <span class="enumEntry">"7.50 R15"</span>, <span class="enumEntry">"7.50 R16"</span>, <span class="enumEntry">"7.50 R16C"</span>, <span class="enumEntry">"8.25 R15"</span>, <span class="enumEntry">"8.25 R16C"</span>, <span class="enumEntry">"8.5 R17.5"</span>, <span class="enumEntry">"8 R17.5"</span>, <span class="enumEntry">"LT265/75 R16"</span>, <span class="enumEntry">"385/55 R19.5"</span></div> <div class="engineering"> - Allowed values: <span class="enumEntry">"9 R22.5"</span>, <span class="enumEntry">"9.00 R20"</span>, <span class="enumEntry">"9.5 R17.5"</span>, <span class="enumEntry">"10 R17.5"</span>, <span class="enumEntry">"10 R22.5"</span>, <span class="enumEntry">"10.00 R20"</span>, <span class="enumEntry">"11 R22.5"</span>, <span class="enumEntry">"11.00 R20"</span>, <span class="enumEntry">"12 R22.5"</span>, <span class="enumEntry">"12.00 R20"</span>, <span class="enumEntry">"12.00 R24"</span>, <span class="enumEntry">"12.5 R20"</span>, <span class="enumEntry">"13 R22.5"</span>, <span class="enumEntry">"14.00 R20"</span>, <span class="enumEntry">"14.5 R20"</span>, <span class="enumEntry">"16.00 R20"</span>, <span class="enumEntry">"205/75 R17.5"</span>, <span class="enumEntry">"215/75 R17.5"</span>, <span class="enumEntry">"225/70 R17.5"</span>, <span class="enumEntry">"225/75 R17.5"</span>, <span class="enumEntry">"235/75 R17.5"</span>, <span class="enumEntry">"245/70 R17.5"</span>, <span class="enumEntry">"245/70 R19.5"</span>, <span class="enumEntry">"255/70 R22.5"</span>, <span class="enumEntry">"265/70 R17.5"</span>, <span class="enumEntry">"265/70 R19.5"</span>, <span class="enumEntry">"275/70 R22.5"</span>, <span class="enumEntry">"275/80 R22.5"</span>, <span class="enumEntry">"285/60 R22.5"</span>, <span class="enumEntry">"285/70 R19.5"</span>, <span class="enumEntry">"295/55 R22.5"</span>, <span class="enumEntry">"295/60 R22.5"</span>, <span class="enumEntry">"295/80 R22.5"</span>, <span class="enumEntry">"305/60 R22.5"</span>, <span class="enumEntry">"305/70 R19.5"</span>, <span class="enumEntry">"305/70 R22.5"</span>, <span class="enumEntry">"305/75 R24.5"</span>, <span class="enumEntry">"315/45 R22.5"</span>, <span class="enumEntry">"315/60 R22.5"</span>, <span class="enumEntry">"315/70 R22.5"</span>, <span class="enumEntry">"315/80 R22.5"</span>, <span class="enumEntry">"325/95 R24"</span>, <span class="enumEntry">"335/80 R20"</span>, <span class="enumEntry">"355/50 R22.5"</span>, <span class="enumEntry">"365/70 R22.5"</span>, <span class="enumEntry">"365/80 R20"</span>, <span class="enumEntry">"365/85 R20"</span>, <span class="enumEntry">"375/45 R22.5"</span>, <span class="enumEntry">"375/50 R22.5"</span>, <span class="enumEntry">"375/90 R22.5"</span>, <span class="enumEntry">"385/55 R22.5"</span>, <span class="enumEntry">"385/65 R22.5"</span>, <span class="enumEntry">"395/85 R20"</span>, <span class="enumEntry">"425/65 R22.5"</span>, <span class="enumEntry">"495/45 R22.5"</span>, <span class="enumEntry">"525/65 R20.5"</span></div> + Allowed values: <span class="enumEntry">"9 R22.5"</span>, <span class="enumEntry">"9.00 R20"</span>, <span class="enumEntry">"9.5 R17.5"</span>, <span class="enumEntry">"10 R17.5"</span>, <span class="enumEntry">"10 R22.5"</span>, <span class="enumEntry">"10.00 R20"</span>, <span class="enumEntry">"11 R22.5"</span>, <span class="enumEntry">"11.00 R20"</span>, <span class="enumEntry">"12 R22.5"</span>, <span class="enumEntry">"12.00 R20"</span>, <span class="enumEntry">"12.00 R24"</span>, <span class="enumEntry">"12.5 R20"</span>, <span class="enumEntry">"13 R22.5"</span>, <span class="enumEntry">"14.00 R20"</span>, <span class="enumEntry">"14.5 R20"</span>, <span class="enumEntry">"16.00 R20"</span>, <span class="enumEntry">"205/75 R17.5"</span>, <span class="enumEntry">"215/75 R17.5"</span>, <span class="enumEntry">"225/70 R17.5"</span>, <span class="enumEntry">"225/75 R17.5"</span>, <span class="enumEntry">"235/75 R17.5"</span>, <span class="enumEntry">"245/70 R17.5"</span>, <span class="enumEntry">"245/70 R19.5"</span>, <span class="enumEntry">"255/70 R22.5"</span>, <span class="enumEntry">"265/70 R17.5"</span>, <span class="enumEntry">"265/70 R19.5"</span>, <span class="enumEntry">"275/70 R22.5"</span>, <span class="enumEntry">"275/80 R22.5"</span>, <span class="enumEntry">"285/60 R22.5"</span>, <span class="enumEntry">"285/70 R19.5"</span>, <span class="enumEntry">"295/55 R22.5"</span>, <span class="enumEntry">"295/60 R22.5"</span>, <span class="enumEntry">"295/80 R22.5"</span>, <span class="enumEntry">"305/60 R22.5"</span>, <span class="enumEntry">"305/70 R19.5"</span>, <span class="enumEntry">"305/70 R22.5"</span>, <span class="enumEntry">"305/75 R24.5"</span>, <span class="enumEntry">"315/45 R22.5"</span>, <span class="enumEntry">"315/60 R22.5"</span>, <span class="enumEntry">"315/70 R22.5"</span>, <span class="enumEntry">"315/80 R22.5"</span>, <span class="enumEntry">"325/95 R24"</span>, <span class="enumEntry">"335/80 R20"</span>, <span class="enumEntry">"355/50 R22.5"</span>, <span class="enumEntry">"365/70 R22.5"</span>, <span class="enumEntry">"365/80 R20"</span>, <span class="enumEntry">"365/85 R20"</span>, <span class="enumEntry">"375/45 R22.5"</span>, <span class="enumEntry">"375/50 R22.5"</span>, <span class="enumEntry">"375/90 R22.5"</span>, <span class="enumEntry">"385/55 R22.5"</span>, <span class="enumEntry">"385/65 R22.5"</span>, <span class="enumEntry">"395/85 R20"</span>, <span class="enumEntry">"425/65 R22.5"</span>, <span class="enumEntry">"495/45 R22.5"</span>, <span class="enumEntry">"525/65 R20.5"</span>, <span class="enumEntry">"11.00 R16"</span>, <span class="enumEntry">"6.00 R9"</span>, <span class="enumEntry">"205/65 R17.5"</span>, <span class="enumEntry">"225/75 R16C"</span>, <span class="enumEntry">"255/100 R16"</span>, <span class="enumEntry">"255/60 R19.5"</span>, <span class="enumEntry">"265/55 R19.5"</span>, <span class="enumEntry">"275/60 R19.5"</span>, <span class="enumEntry">"275/80 R20"</span>, <span class="enumEntry">"285/65 R16C"</span>, <span class="enumEntry">"295/75 R22.5"</span>, <span class="enumEntry">"325/85 R16"</span>, <span class="enumEntry">"435/50 R19.5"</span>, <span class="enumEntry">"435/50 R22.5"</span>, <span class="enumEntry">"445/40 R22.5"</span>, <span class="enumEntry">"445/45 R19.5"</span>, <span class="enumEntry">"445/65 R22.5"</span>, <span class="enumEntry">"445/75 R22.5"</span>, <span class="enumEntry">"455/40 R22.5"</span>, <span class="enumEntry">"455/45 R22.5"</span>, <span class="enumEntry">"475/80 R20"</span>, <span class="enumEntry">"7.00 R16C"</span>, <span class="enumEntry">"7.50 R15"</span>, <span class="enumEntry">"7.50 R16"</span>, <span class="enumEntry">"7.50 R16C"</span>, <span class="enumEntry">"8.25 R15"</span>, <span class="enumEntry">"8.25 R16C"</span>, <span class="enumEntry">"8.5 R17.5"</span>, <span class="enumEntry">"8 R17.5"</span>, <span class="enumEntry">"LT265/75 R16"</span>, <span class="enumEntry">"385/55 R19.5"</span></div> <br> <span class="optionalEngineering">optional in Engineering mode</span> </td> diff --git a/Documentation/XML/VectoVTPReport.png b/Documentation/XML/VectoVTPReport.png new file mode 100644 index 0000000000000000000000000000000000000000..ba8b4c9ab5b686a1735edf08405d0c5ce769d583 Binary files /dev/null and b/Documentation/XML/VectoVTPReport.png differ diff --git a/HashingCmd/Program.cs b/HashingCmd/Program.cs index 89e4fa896363391aacb673b9869aadf39a222b93..785345ff8fc615c80d386e735496b26b11f95416 100644 --- a/HashingCmd/Program.cs +++ b/HashingCmd/Program.cs @@ -37,6 +37,7 @@ using System.Reflection; using System.Text; using System.Xml; using System.Xml.Schema; +using TUGraz.VectoCommon.Hashing; using TUGraz.VectoCore.Utils; using TUGraz.VectoHashing; diff --git a/HashingTool/Helper/HashingHelper.cs b/HashingTool/Helper/HashingHelper.cs index d838db3b2a68162e60557a5fd6464816683372d9..f44877b648cc8d3396943fb6748ee160ca7f78a2 100644 --- a/HashingTool/Helper/HashingHelper.cs +++ b/HashingTool/Helper/HashingHelper.cs @@ -35,6 +35,7 @@ using System.Linq; using System.Xml; using HashingTool.ViewModel; using HashingTool.ViewModel.UserControl; +using TUGraz.VectoCommon.Hashing; using TUGraz.VectoCommon.Resources; using TUGraz.VectoHashing; diff --git a/HashingTool/Properties/Version.cs b/HashingTool/Properties/Version.cs index 73b45c2c1c60a2d69dd9ec0353807ac421766e81..da2a6ce07434258a47dc4f1cb286d7e0e8ed8421 100644 --- a/HashingTool/Properties/Version.cs +++ b/HashingTool/Properties/Version.cs @@ -11,7 +11,7 @@ * by the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use VECTO except in compliance with the Licence. * You may obtain a copy of the Licence at: -* +* * https://joinup.ec.europa.eu/community/eupl/og_page/eupl * * Unless required by applicable law or agreed to in writing, VECTO @@ -30,5 +30,5 @@ */ using System.Reflection; -[assembly: AssemblyVersion("0.2.0.1133")] -[assembly: AssemblyFileVersion("0.2.0.1133")] +[assembly: AssemblyVersion("0.2.0.1250")] +[assembly: AssemblyFileVersion("0.2.0.1250")] diff --git a/HashingTool/ViewModel/UserControl/ManufacturerReportXMLFile.cs b/HashingTool/ViewModel/UserControl/ManufacturerReportXMLFile.cs index 577aed3639e0560225ff8a4fa03b0bb68a615551..eba02fac30b1b922403b1ea9b39992f868e5cca9 100644 --- a/HashingTool/ViewModel/UserControl/ManufacturerReportXMLFile.cs +++ b/HashingTool/ViewModel/UserControl/ManufacturerReportXMLFile.cs @@ -34,9 +34,11 @@ using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Xml; +using TUGraz.VectoCommon.Hashing; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Resources; using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration; using TUGraz.VectoHashing; namespace HashingTool.ViewModel.UserControl @@ -75,11 +77,15 @@ namespace HashingTool.ViewModel.UserControl RaisePropertyChanged("Components"); return; } - var components = GetContainigComponents().GroupBy(s => s) + var components = XMLManufacturerReportReader.GetContainingComponents(_xmlFile.Document).GroupBy(s => s) .Select(g => new { Entry = g.Key, Count = g.Count() }); - var jobComponents = _jobData == null ? new ViewModel.ComponentEntry[] { } : _jobData.Components.ToArray(); + var jobComponents = _jobData?.JobDataValid == null || !_jobData.JobDataValid.Value ? new ViewModel.ComponentEntry[] { } : _jobData.Components.ToArray(); _validationErrors.Clear(); + if (_jobData != null && _jobData.JobDataValid != null && !_jobData.JobDataValid.Value) { + _validationErrors.Add("Verifying Manufacturer Report: Job data is not valid - no validation checks against job data."); + } + var hasComponentsFromJob = _jobData != null && _jobData.JobDataValid != null && _jobData.JobDataValid.Value && jobComponents.Any(); @@ -87,21 +93,19 @@ namespace HashingTool.ViewModel.UserControl // collect c14n, digest method, digest value read, certification nr., digest value from job (re-computed) var componentData = new List<ComponentEntry>(); foreach (var component in components) { - if (component.Entry == XMLNames.Component_Vehicle) { + if (component.Entry == VectoComponents.Vehicle) { continue; } for (var i = 0; i < component.Count; i++) { - var node = GetNodes(component.Entry, i); + var node = XMLManufacturerReportReader.GetNodes(_xmlFile.Document, component.Entry, i); var entry = new ComponentEntry { Component = component.Count == 1 - ? component.Entry - : string.Format("{0} ({1})", component.Entry, i + 1), + ? component.Entry.XMLElementName() + : string.Format("{0} ({1})", component.Entry.XMLElementName(), i + 1), DigestValue = ReadElementValue(node, XMLNames.DI_Signature_Reference_DigestValue), CertificationMethod = ReadElementValue(node, XMLNames.Report_Component_CertificationMethod), }; - // rename 'Axle' from report to 'Tyre' as in job - if (entry.Component.StartsWith("Axle ")) { - entry.Component = entry.Component.Replace("Axle", "Tyre"); + if (entry.Component.StartsWith("Tyre ")) { entry.CertificationNumber = ReadElementValue(node, XMLNames.Report_Tyre_TyreCertificationNumber); } else { entry.CertificationNumber = ReadElementValue(node, XMLNames.Report_Component_CertificationNumber) ?? @@ -171,51 +175,9 @@ namespace HashingTool.ViewModel.UserControl return node.InnerText; } - protected XmlNode GetNodes(string component, int index) - { - var nodes = _xmlFile.Document.SelectNodes(GetComponentQueryString(component)); - if (nodes == null || nodes.Count == 0) { - throw new Exception(component == null - ? "No component found" - : string.Format("Component {0} not found", component)); - } - if (index >= nodes.Count) { - throw new Exception(string.Format("index exceeds number of components found! index: {0}, #components: {1}", index, - nodes.Count)); - } - return nodes[index]; - } - - protected static string GetComponentQueryString(string component = null) - { - if (component == null) { - return "(//*[@id])[1]"; - } - return string.Format("//*[local-name()='{0}']", component); - } - - protected IList<string> GetContainigComponents() - { - var retVal = new List<string>(); - foreach (var component in EnumHelper.GetValues<VectoComponents>()) { - var nodes = _xmlFile.Document.SelectNodes(string.Format("//*[local-name()='{0}']//*[local-name()='{1}']/*[local-name()='Model']", - XMLNames.VectoManufacturerReport, component.XMLElementName())); - var count = nodes == null ? 0 : nodes.Count; - for (var i = 0; i < count; i++) { - retVal.Add(component.XMLElementName()); - } - } - foreach (var component in new[] { XMLNames.AxleWheels_Axles_Axle }) { - var nodes = _xmlFile.Document.SelectNodes(string.Format("//*[local-name()='{0}']//*[local-name()='{1}']", - XMLNames.VectoManufacturerReport, component)); - var count = nodes == null ? 0 : nodes.Count; - for (var i = 0; i < count; i++) { - retVal.Add(component); - } - } - return retVal; - } + + public ComponentEntry[] Components { get; private set; } diff --git a/HashingTool/ViewModel/UserControl/ReportXMLFile.cs b/HashingTool/ViewModel/UserControl/ReportXMLFile.cs index 770390873b789d6cee01e40dfeab85d178af0d5c..6c639360d96e3042c9d9af7240d2d95a5f5e9fb0 100644 --- a/HashingTool/ViewModel/UserControl/ReportXMLFile.cs +++ b/HashingTool/ViewModel/UserControl/ReportXMLFile.cs @@ -34,6 +34,8 @@ using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; using System.Xml; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration; using TUGraz.VectoHashing; namespace HashingTool.ViewModel.UserControl @@ -130,37 +132,19 @@ namespace HashingTool.ViewModel.UserControl // readout all required fields from the report xml: c14n, digest method, digest value of job, VIN, ... protected virtual void ReadReportData() { - var jobDigest = ""; - var jobDigestMethod = ""; + var digestData = new DigestData("", new string[]{}, "", ""); var vin = ""; - var jobc14NMethod = new string[] { }; - + if (_xmlFile.Document != null && _xmlFile.Document.DocumentElement != null) { - var digestValueNode = - _xmlFile.Document.SelectSingleNode("//*[local-name()='InputDataSignature']//*[local-name()='DigestValue']"); - if (digestValueNode != null) { - jobDigest = digestValueNode.InnerText; - } - var digestMethodNode = - _xmlFile.Document.SelectSingleNode( - "//*[local-name()='InputDataSignature']//*[local-name()='DigestMethod']/@Algorithm"); - if (digestMethodNode != null) { - jobDigestMethod = digestMethodNode.InnerText; - } - - var c14NtMethodNodes = - _xmlFile.Document.SelectNodes("//*[local-name()='InputDataSignature']//*[local-name()='Transform']/@Algorithm"); - if (c14NtMethodNodes != null) { - jobc14NMethod = (from XmlNode node in c14NtMethodNodes select node.InnerText).ToArray(); - } + digestData = new DigestData(_xmlFile.Document.SelectSingleNode("//*[local-name()='InputDataSignature']")); var vinNode = _xmlFile.Document.SelectSingleNode("//*[local-name()='VIN']"); if (vinNode != null) { vin = vinNode.InnerText; } } - JobCanonicalizationMethodRead = jobc14NMethod; - JobDigestMethodRead = jobDigestMethod; - JobDigestValueRead = jobDigest; + JobCanonicalizationMethodRead = digestData.CanonicalizationMethods; + JobDigestMethodRead = digestData.DigestMethod; + JobDigestValueRead = digestData.DigestValue; ReportVIN = vin; RaisePropertyChanged(GeneralUpdate); } diff --git a/HashingTool/ViewModel/UserControl/VectoJobFile.cs b/HashingTool/ViewModel/UserControl/VectoJobFile.cs index 1ce4e843ff5434ffabc8fc10759d0b3a6be46669..87a584106a1b5d3ddeb6090d8f837760652123fc 100644 --- a/HashingTool/ViewModel/UserControl/VectoJobFile.cs +++ b/HashingTool/ViewModel/UserControl/VectoJobFile.cs @@ -35,6 +35,7 @@ using System.ComponentModel; using System.Linq; using System.Xml; using HashingTool.Helper; +using TUGraz.VectoCommon.Hashing; using TUGraz.VectoCommon.Resources; using TUGraz.VectoHashing; diff --git a/HashingTool/ViewModel/VerifyComponentInputDataViewModel.cs b/HashingTool/ViewModel/VerifyComponentInputDataViewModel.cs index b6f2334a41024b5e0e2642590d277bc579d19884..b23738e40f6cae12bc66d300d37feecdb8204e13 100644 --- a/HashingTool/ViewModel/VerifyComponentInputDataViewModel.cs +++ b/HashingTool/ViewModel/VerifyComponentInputDataViewModel.cs @@ -38,6 +38,7 @@ using System.Windows; using System.Windows.Input; using HashingTool.Helper; using HashingTool.ViewModel.UserControl; +using TUGraz.VectoCommon.Hashing; using TUGraz.VectoHashing; namespace HashingTool.ViewModel diff --git a/Tools/DeclarationCycleZip/Program.cs b/Tools/DeclarationCycleZip/Program.cs index ceb8b8441ebdb72ca0b4e4a0fc506710e7376c73..c44dd79336481b6cce6a988f983bac34c3079a08 100644 --- a/Tools/DeclarationCycleZip/Program.cs +++ b/Tools/DeclarationCycleZip/Program.cs @@ -64,8 +64,8 @@ namespace DeclarationCycleZip } var row = table.NewRow(); row["<s>"] = x.Distance.Value().ToString(CultureInfo.InvariantCulture); - row["<v>"] = x.VehicleTargetSpeed.ConvertToKiloMeterPerHour().ToString(CultureInfo.InvariantCulture); - row["<grad>"] = x.RoadGradientPercent.Value().ToString(CultureInfo.InvariantCulture); + row["<v>"] = x.VehicleTargetSpeed.ConvertToKiloMeterPerHour().Value.ToString(CultureInfo.InvariantCulture); + row["<grad>"] = x.RoadGradientPercent.Value().ToString(CultureInfo.InvariantCulture); row["<stop>"] = x.StoppingTime.Value().ToString(CultureInfo.InvariantCulture); table.Rows.Add(row); lastDistance = x.Distance; diff --git a/VECTO/File Browser/FileBrowserModule.vb b/VECTO/File Browser/FileBrowserModule.vb index 253a85419cde24483dcf4fe6d4a3473a298f33d6..31de0ae1c5411180674af979d3a1f8202af35699 100644 --- a/VECTO/File Browser/FileBrowserModule.vb +++ b/VECTO/File Browser/FileBrowserModule.vb @@ -24,6 +24,7 @@ Public Module FileBrowserModule Public TextFileBrowser As FileBrowser Public VehicleFileBrowser As FileBrowser Public VehicleXMLFileBrowser As FileBrowser + public ManRXMLFileBrowser As FileBrowser Public DrivingCycleFileBrowser As FileBrowser Public PTODrivingCycleFileBrowser As FileBrowser Public FuelConsumptionMapFileBrowser As FileBrowser diff --git a/VECTO/GUI/MainForm.vb b/VECTO/GUI/MainForm.vb index 46fe44d37175e04e2615a69bed81c31cc31df2a0..22c645fda730b6966a9760508703c81b284dc6df 100644 --- a/VECTO/GUI/MainForm.vb +++ b/VECTO/GUI/MainForm.vb @@ -57,1983 +57,2027 @@ Imports TUGraz.VectoCore.Utils ''' </summary> ''' <remarks></remarks> -Public Class MainForm - Private _jobListView As FileListView - Private _cycleListView As FileListView + Public Class MainForm + Private _jobListView As FileListView + Private _cycleListView As FileListView - Private _lastModeName As String - Private _conMenTarget As ListView - Private _conMenTarJob As Boolean + Private _lastModeName As String + Private _conMenTarget As ListView + Private _conMenTarJob As Boolean - Private _guIlocked As Boolean + Private _guIlocked As Boolean - Private _checkLock As Boolean - Private _genChecked As Integer - Private _genCheckAllLock As Boolean + Private _checkLock As Boolean + Private _genChecked As Integer + Private _genCheckAllLock As Boolean - Private _cbDeclLock As Boolean = False + Private _cbDeclLock As Boolean = False #Region "SLEEP Control - Prevent sleep while VECTO is running" - Private Declare Function SetThreadExecutionState Lib "kernel32" (esFlags As Long) As Long + Private Declare Function SetThreadExecutionState Lib "kernel32"(esFlags As Long) As Long - Private Shared Sub AllowSleepOff() + Private Shared Sub AllowSleepOff() #If Not PLATFORM = "x86" Then - SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS Or EXECUTION_STATE.ES_SYSTEM_REQUIRED) + SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS Or EXECUTION_STATE.ES_SYSTEM_REQUIRED) #End If - End Sub + End Sub - Private Shared Sub AllowSleepOn() + Private Shared Sub AllowSleepOn() #If Not PLATFORM = "x86" Then - SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS) + SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS) #End If - End Sub + End Sub - Private Enum EXECUTION_STATE As Integer - ''' Informs the system that the state being set should remain in effect until the next call that uses ES_CONTINUOUS and one of the other state flags is cleared. - ES_CONTINUOUS = &H80000000 - ''' Forces the display to be on by resetting the display idle timer. - ES_DISPLAY_REQUIRED = &H2 - ''' Forces the system to be in the working state by resetting the system idle timer. - ES_SYSTEM_REQUIRED = &H1 - End Enum + Private Enum EXECUTION_STATE As Integer + ''' Informs the system that the state being set should remain in effect until the next call that uses ES_CONTINUOUS and one of the other state flags is cleared. + ES_CONTINUOUS = &H80000000 + ''' Forces the display to be on by resetting the display idle timer. + ES_DISPLAY_REQUIRED = &H2 + ''' Forces the system to be in the working state by resetting the system idle timer. + ES_SYSTEM_REQUIRED = &H1 + End Enum #End Region #Region "FileBrowser Init/Close" - Private Sub FB_Initialize() - FileBrowserFolderHistoryIninialized = False - Try - COREvers = VectoSimulationCore.VersionNumber() - Catch ex As Exception - LogFile.WriteToLog(MessageType.Err, ex.StackTrace) - End Try - - - FolderFileBrowser = New FileBrowser("WorkDir", True) - TextFileBrowser = New FileBrowser("FileLists") - JobfileFileBrowser = New FileBrowser("vecto") - VehicleFileBrowser = New FileBrowser("vveh") - VehicleXMLFileBrowser = New FileBrowser("vveh_xml") - FuelConsumptionMapFileBrowser = New FileBrowser("vmap") - DrivingCycleFileBrowser = New FileBrowser("vdri") - FullLoadCurveFileBrowser = New FileBrowser("vfld") - EngineFileBrowser = New FileBrowser("veng") - GearboxFileBrowser = New FileBrowser("vgbx") - DriverAccelerationFileBrowser = New FileBrowser("vacc") - AuxFileBrowser = New FileBrowser("vaux") - GearboxShiftPolygonFileBrowser = New FileBrowser("vgbs") - RetarderLossMapFileBrowser = New FileBrowser("vrlm") - TransmissionLossMapFileBrowser = New FileBrowser("vtlm") - PtoLossMapFileBrowser = New FileBrowser("vptol") - PTODrivingCycleFileBrowser = New FileBrowser("vptoc") - TorqueConverterFileBrowser = New FileBrowser("vtcc") - TorqueConverterShiftPolygonFileBrowser = New FileBrowser("vgbs") - CrossWindCorrectionFileBrowser = New FileBrowser("vcdx") - DriverDecisionFactorVelocityDropFileBrowser = New FileBrowser("DfVelocityDrop") - DriverDecisionFactorTargetSpeedFileBrowser = New FileBrowser("DfTargetSpeed") - DriverDecisionFactorVelocityDropFileBrowser.Extensions = New String() {"csv"} - DriverDecisionFactorTargetSpeedFileBrowser.Extensions = New String() {"csv"} - - ModalResultsFileBrowser = New FileBrowser("vmod") - - - '------------------------------------------------------- - TextFileBrowser.Extensions = New String() {"txt"} - JobfileFileBrowser.Extensions = New String() {"vecto"} - VehicleFileBrowser.Extensions = New String() {"vveh"} - VehicleXMLFileBrowser.Extensions = New String() {"xml"} - FuelConsumptionMapFileBrowser.Extensions = New String() {"vmap"} - DrivingCycleFileBrowser.Extensions = New String() {"vdri"} - FullLoadCurveFileBrowser.Extensions = New String() {"vfld"} - EngineFileBrowser.Extensions = New String() {"veng"} - GearboxFileBrowser.Extensions = New String() {"vgbx"} - DriverAccelerationFileBrowser.Extensions = New String() {"vacc"} - AuxFileBrowser.Extensions = New String() {"vaux"} - GearboxShiftPolygonFileBrowser.Extensions = New String() {"vgbs"} - RetarderLossMapFileBrowser.Extensions = New String() {"vrlm"} - TransmissionLossMapFileBrowser.Extensions = New String() {"vtlm"} - PtoLossMapFileBrowser.Extensions = New String() {"vptol"} - PTODrivingCycleFileBrowser.Extensions = New String() {"vptoc"} - TorqueConverterFileBrowser.Extensions = New String() {"vtcc"} - TorqueConverterShiftPolygonFileBrowser.Extensions = New String() {"vgbs"} - CrossWindCorrectionFileBrowser.Extensions = New String() {"vcdv", "vcdb"} - - ModalResultsFileBrowser.Extensions = New String() {"vmod"} - End Sub - - Private Sub FB_Close() - FolderFileBrowser.Close() - TextFileBrowser.Close() - JobfileFileBrowser.Close() - VehicleFileBrowser.Close() - VehicleXMLFileBrowser.Close() - FuelConsumptionMapFileBrowser.Close() - DrivingCycleFileBrowser.Close() - FullLoadCurveFileBrowser.Close() - EngineFileBrowser.Close() - GearboxFileBrowser.Close() - DriverAccelerationFileBrowser.Close() - AuxFileBrowser.Close() - GearboxShiftPolygonFileBrowser.Close() - RetarderLossMapFileBrowser.Close() - TransmissionLossMapFileBrowser.Close() - PtoLossMapFileBrowser.Close() - PTODrivingCycleFileBrowser.Close() - TorqueConverterFileBrowser.Close() - TorqueConverterShiftPolygonFileBrowser.Close() - CrossWindCorrectionFileBrowser.Close() - ModalResultsFileBrowser.Close() - End Sub + Private Sub FB_Initialize() + FileBrowserFolderHistoryIninialized = False + Try + COREvers = VectoSimulationCore.VersionNumber() + Catch ex As Exception + LogFile.WriteToLog(MessageType.Err, ex.StackTrace) + End Try + + + FolderFileBrowser = New FileBrowser("WorkDir", True) + TextFileBrowser = New FileBrowser("FileLists") + JobfileFileBrowser = New FileBrowser("vecto") + VehicleFileBrowser = New FileBrowser("vveh") + VehicleXMLFileBrowser = New FileBrowser("vveh_xml") + ManRXMLFileBrowser = new FileBrowser("xml") + FuelConsumptionMapFileBrowser = New FileBrowser("vmap") + DrivingCycleFileBrowser = New FileBrowser("vdri") + FullLoadCurveFileBrowser = New FileBrowser("vfld") + EngineFileBrowser = New FileBrowser("veng") + GearboxFileBrowser = New FileBrowser("vgbx") + DriverAccelerationFileBrowser = New FileBrowser("vacc") + AuxFileBrowser = New FileBrowser("vaux") + GearboxShiftPolygonFileBrowser = New FileBrowser("vgbs") + RetarderLossMapFileBrowser = New FileBrowser("vrlm") + TransmissionLossMapFileBrowser = New FileBrowser("vtlm") + PtoLossMapFileBrowser = New FileBrowser("vptol") + PTODrivingCycleFileBrowser = New FileBrowser("vptoc") + TorqueConverterFileBrowser = New FileBrowser("vtcc") + TorqueConverterShiftPolygonFileBrowser = New FileBrowser("vgbs") + CrossWindCorrectionFileBrowser = New FileBrowser("vcdx") + DriverDecisionFactorVelocityDropFileBrowser = New FileBrowser("DfVelocityDrop") + DriverDecisionFactorTargetSpeedFileBrowser = New FileBrowser("DfTargetSpeed") + DriverDecisionFactorVelocityDropFileBrowser.Extensions = New String() {"csv"} + DriverDecisionFactorTargetSpeedFileBrowser.Extensions = New String() {"csv"} + + ModalResultsFileBrowser = New FileBrowser("vmod") + + + '------------------------------------------------------- + TextFileBrowser.Extensions = New String() {"txt"} + JobfileFileBrowser.Extensions = New String() {"vecto"} + VehicleFileBrowser.Extensions = New String() {"vveh"} + VehicleXMLFileBrowser.Extensions = New String() {"xml"} + ManRXMLFileBrowser.Extensions = New String() {"xml"} + FuelConsumptionMapFileBrowser.Extensions = New String() {"vmap"} + DrivingCycleFileBrowser.Extensions = New String() {"vdri"} + FullLoadCurveFileBrowser.Extensions = New String() {"vfld"} + EngineFileBrowser.Extensions = New String() {"veng"} + GearboxFileBrowser.Extensions = New String() {"vgbx"} + DriverAccelerationFileBrowser.Extensions = New String() {"vacc"} + AuxFileBrowser.Extensions = New String() {"vaux"} + GearboxShiftPolygonFileBrowser.Extensions = New String() {"vgbs"} + RetarderLossMapFileBrowser.Extensions = New String() {"vrlm"} + TransmissionLossMapFileBrowser.Extensions = New String() {"vtlm"} + PtoLossMapFileBrowser.Extensions = New String() {"vptol"} + PTODrivingCycleFileBrowser.Extensions = New String() {"vptoc"} + TorqueConverterFileBrowser.Extensions = New String() {"vtcc"} + TorqueConverterShiftPolygonFileBrowser.Extensions = New String() {"vgbs"} + CrossWindCorrectionFileBrowser.Extensions = New String() {"vcdv", "vcdb"} + + ModalResultsFileBrowser.Extensions = New String() {"vmod"} + End Sub + + Private Sub FB_Close() + FolderFileBrowser.Close() + TextFileBrowser.Close() + JobfileFileBrowser.Close() + VehicleFileBrowser.Close() + VehicleXMLFileBrowser.Close() + ManRXMLFileBrowser.Close() + FuelConsumptionMapFileBrowser.Close() + DrivingCycleFileBrowser.Close() + FullLoadCurveFileBrowser.Close() + EngineFileBrowser.Close() + GearboxFileBrowser.Close() + DriverAccelerationFileBrowser.Close() + AuxFileBrowser.Close() + GearboxShiftPolygonFileBrowser.Close() + RetarderLossMapFileBrowser.Close() + TransmissionLossMapFileBrowser.Close() + PtoLossMapFileBrowser.Close() + PTODrivingCycleFileBrowser.Close() + TorqueConverterFileBrowser.Close() + TorqueConverterShiftPolygonFileBrowser.Close() + CrossWindCorrectionFileBrowser.Close() + ModalResultsFileBrowser.Close() + End Sub #End Region - 'Lock certain GUI elements while VECTO is running - Private Sub LockGUI(lock As Boolean) - _guIlocked = lock + 'Lock certain GUI elements while VECTO is running + Private Sub LockGUI(lock As Boolean) + _guIlocked = lock - PanelOptAllg.Enabled = Not lock + PanelOptAllg.Enabled = Not lock - BtGENup.Enabled = Not lock - BtGENdown.Enabled = Not lock - ButtonGENadd.Enabled = Not lock - ButtonGENremove.Enabled = Not lock - LvGEN.LabelEdit = Not lock - ChBoxAllGEN.Enabled = Not lock + BtGENup.Enabled = Not lock + BtGENdown.Enabled = Not lock + ButtonGENadd.Enabled = Not lock + ButtonGENremove.Enabled = Not lock + LvGEN.LabelEdit = Not lock + ChBoxAllGEN.Enabled = Not lock - btStartV3.Enabled = Not lock - End Sub + btStartV3.Enabled = Not lock + End Sub #Region "Form Init/Close" - 'Initialise - Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load - Dim x As Integer + 'Initialise + Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load + Dim x As Integer - _guIlocked = False - _checkLock = False - _genCheckAllLock = False - _genChecked = 0 + _guIlocked = False + _checkLock = False + _genCheckAllLock = False + _genChecked = 0 - 'Load Tabs properly (otherwise problem with ListViews) - For x = 0 To TabControl1.TabCount - 1 - TabControl1.TabPages(x).Show() - Next + 'Load Tabs properly (otherwise problem with ListViews) + For x = 0 To TabControl1.TabCount - 1 + TabControl1.TabPages(x).Show() + Next - _lastModeName = "" + _lastModeName = "" - FB_Initialize() + FB_Initialize() - Text = "VECTO " & VECTOvers & " / VectoCore " & COREvers + Text = "VECTO " & VECTOvers & " / VectoCore " & COREvers - 'FileLists - _jobListView = New FileListView(MyConfPath & "joblist.txt") - _jobListView.LVbox = LvGEN - _cycleListView = New FileListView(MyConfPath & "cyclelist.txt") + 'FileLists + _jobListView = New FileListView(MyConfPath & "joblist.txt") + _jobListView.LVbox = LvGEN + _cycleListView = New FileListView(MyConfPath & "cyclelist.txt") - _jobListView.LoadList() + _jobListView.LoadList() - LoadOptions() + LoadOptions() - 'Resize columns ... after Loading the @file-lists - LvGEN.Columns(1).Width = -2 - LvMsg.Columns(2).Width = -2 + 'Resize columns ... after Loading the @file-lists + LvGEN.Columns(1).Width = - 2 + LvMsg.Columns(2).Width = - 2 - 'Initialize BackgroundWorker + 'Initialize BackgroundWorker - VectoWorkerV3 = New BackgroundWorker() - AddHandler VectoWorkerV3.DoWork, AddressOf VectoWorkerV3_OnDoWork - AddHandler VectoWorkerV3.ProgressChanged, AddressOf VectoWorkerV3_OnProgressChanged - AddHandler VectoWorkerV3.RunWorkerCompleted, AddressOf VectoWorkerV3_OnRunWorkerCompleted + VectoWorkerV3 = New BackgroundWorker() + AddHandler VectoWorkerV3.DoWork, AddressOf VectoWorkerV3_OnDoWork + AddHandler VectoWorkerV3.ProgressChanged, AddressOf VectoWorkerV3_OnProgressChanged + AddHandler VectoWorkerV3.RunWorkerCompleted, AddressOf VectoWorkerV3_OnRunWorkerCompleted - VectoWorkerV3.WorkerReportsProgress = True - VectoWorkerV3.WorkerSupportsCancellation = True + VectoWorkerV3.WorkerReportsProgress = True + VectoWorkerV3.WorkerSupportsCancellation = True - 'Set mode (Batch/Standard) - ModeUpdate() + 'Set mode (Batch/Standard) + ModeUpdate() - DeclOnOff() - End Sub + DeclOnOff() + End Sub - ' ReSharper disable once UnusedMember.Global -- used via Logging Framework! - Public Shared Sub LogMethod(level As String, message As String) - If VectoWorkerV3.IsBusy AndAlso Not VectoWorkerV3.CancellationPending Then - If level = "Warn" Then - VectoWorkerV3.ReportProgress(100, New VectoProgress With {.Target = "ListBoxWarning", .Message = message}) - ElseIf level = "Error" Or level = "Fatal" Then - VectoWorkerV3.ReportProgress(100, New VectoProgress With {.Target = "ListBoxError", .Message = message}) - End If - End If - End Sub + ' ReSharper disable once UnusedMember.Global -- used via Logging Framework! + Public Shared Sub LogMethod(level As String, message As String) + If VectoWorkerV3.IsBusy AndAlso Not VectoWorkerV3.CancellationPending Then + If level = "Warn" Then + VectoWorkerV3.ReportProgress(100, + New VectoProgress With {.Target = "ListBoxWarning", .Message = message}) + ElseIf level = "Error" Or level = "Fatal" Then + VectoWorkerV3.ReportProgress(100, New VectoProgress With {.Target = "ListBoxError", .Message = message}) + End If + End If + End Sub - 'Declaration mode GUI settings - Private Sub DeclOnOff() + 'Declaration mode GUI settings + Private Sub DeclOnOff() - If Cfg.DeclMode Then - Text = "VECTO " & COREvers & " - Declaration Mode" - Cfg.DeclInit() - Else - Text = "VECTO " & COREvers - End If + If Cfg.DeclMode Then + Text = "VECTO " & COREvers & " - Declaration Mode" + Cfg.DeclInit() + Else + Text = "VECTO " & COREvers + End If - If Cfg.DeclMode Then - _lastModeName = "Declaration" - Else - _lastModeName = "Engineering" - End If + If Cfg.DeclMode Then + _lastModeName = "Declaration" + Else + _lastModeName = "Engineering" + End If - Status(_lastModeName & " Mode") + Status(_lastModeName & " Mode") - LoadOptions() + LoadOptions() - LbDecl.Visible = Cfg.DeclMode - End Sub + LbDecl.Visible = Cfg.DeclMode + End Sub - 'Shown Event (Form-Load finished) ... here StartUp Forms are loaded (DEV, GEN/ADV- Editor ..) - Private Sub F01_MAINForm_Shown(sender As Object, e As EventArgs) Handles Me.Shown - Dim fwelcome As WelcomeDialog + 'Shown Event (Form-Load finished) ... here StartUp Forms are loaded (DEV, GEN/ADV- Editor ..) + Private Sub F01_MAINForm_Shown(sender As Object, e As EventArgs) Handles Me.Shown + Dim fwelcome As WelcomeDialog - If Cfg.FirstRun Then - Cfg.FirstRun = False - fwelcome = New WelcomeDialog - fwelcome.ShowDialog() - End If - End Sub + If Cfg.FirstRun Then + Cfg.FirstRun = False + fwelcome = New WelcomeDialog + fwelcome.ShowDialog() + End If + End Sub - 'Open file + 'Open file - 'Close - Private Sub F01_MAINForm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing + 'Close + Private Sub F01_MAINForm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing - 'Save File-Lists - SaveFileLists() + 'Save File-Lists + SaveFileLists() - 'Close log - LogFile.CloseLog() + 'Close log + LogFile.CloseLog() - 'Config save - SetOptions() - Cfg.Save() + 'Config save + SetOptions() + Cfg.Save() - 'File browser instances close - FB_Close() - End Sub + 'File browser instances close + FB_Close() + End Sub #End Region - 'Open file - Job, vehicle, engine, gearbox or signature file - Public Sub OpenVectoFile(file As String) - - If Not IO.File.Exists(file) Then - - GUIMsg(MessageType.Err, "File not found! (" & file & ")") - MsgBox("File not found! (" & file & ")", MsgBoxStyle.Critical) - - Else - - Select Case UCase(GetExtension(file)) - Case ".VGBX" - If Not GearboxForm.Visible Then - GearboxForm.Show() - Else - GearboxForm.JobDir = "" - If GearboxForm.WindowState = FormWindowState.Minimized Then GearboxForm.WindowState = FormWindowState.Normal - GearboxForm.BringToFront() - End If - Try - GearboxForm.OpenGbx(file, VehicleCategory.RigidTruck) - Catch ex As Exception - MsgBox("Failed to open Gearbox File: " + ex.Message) - End Try - Case ".VVEH" - If Not VehicleForm.Visible Then - VehicleForm.Show() - Else - VehicleForm.JobDir = "" - If VehicleForm.WindowState = FormWindowState.Minimized Then VehicleForm.WindowState = FormWindowState.Normal - VehicleForm.BringToFront() - End If - Try - VehicleForm.OpenVehicle(file) - Catch ex As Exception - MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Error loading Vehicle File") - End Try - Case ".VENG" - If Not EngineForm.Visible Then - EngineForm.Show() - Else - EngineForm.JobDir = "" - If EngineForm.WindowState = FormWindowState.Minimized Then EngineForm.WindowState = FormWindowState.Normal - EngineForm.BringToFront() - End If - Try - EngineForm.OpenEngineFile(file) - Catch ex As Exception - MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Error loading Engine File") - End Try - Case ".VECTO" - OpenVECTOeditor(file) - Case Else - MsgBox("Type '" & GetExtension(file) & "' unknown!", MsgBoxStyle.Critical) - End Select - - End If - End Sub + 'Open file - Job, vehicle, engine, gearbox or signature file + Public Sub OpenVectoFile(file As String) + + If Not IO.File.Exists(file) Then + + GUIMsg(MessageType.Err, "File not found! (" & file & ")") + MsgBox("File not found! (" & file & ")", MsgBoxStyle.Critical) + + Else + + Select Case UCase(GetExtension(file)) + Case ".VGBX" + If Not GearboxForm.Visible Then + GearboxForm.Show() + Else + GearboxForm.JobDir = "" + If GearboxForm.WindowState = FormWindowState.Minimized Then _ + GearboxForm.WindowState = FormWindowState.Normal + GearboxForm.BringToFront() + End If + Try + GearboxForm.OpenGbx(file, VehicleCategory.RigidTruck) + Catch ex As Exception + MsgBox("Failed to open Gearbox File: " + ex.Message) + End Try + Case ".VVEH" + If Not VehicleForm.Visible Then + VehicleForm.Show() + Else + VehicleForm.JobDir = "" + If VehicleForm.WindowState = FormWindowState.Minimized Then _ + VehicleForm.WindowState = FormWindowState.Normal + VehicleForm.BringToFront() + End If + Try + VehicleForm.OpenVehicle(file) + Catch ex As Exception + MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Error loading Vehicle File") + End Try + Case ".VENG" + If Not EngineForm.Visible Then + EngineForm.Show() + Else + EngineForm.JobDir = "" + If EngineForm.WindowState = FormWindowState.Minimized Then _ + EngineForm.WindowState = FormWindowState.Normal + EngineForm.BringToFront() + End If + Try + EngineForm.OpenEngineFile(file) + Catch ex As Exception + MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Error loading Engine File") + End Try + Case ".VECTO" + OpenVECTOeditor(file) + Case Else + MsgBox("Type '" & GetExtension(file) & "' unknown!", MsgBoxStyle.Critical) + End Select + + End If + End Sub #Region "Events" - Private Sub ButtonGENremove_Click(sender As Object, e As EventArgs) _ - Handles ButtonGENremove.Click - RemoveJobFile() - End Sub - - Private Sub ButtonGENadd_Click(sender As Object, e As EventArgs) _ - Handles ButtonGENadd.Click - AddJobFile() - End Sub - - Private Sub ListViewGEN_KeyDown(sender As Object, e As KeyEventArgs) _ - Handles LvGEN.KeyDown - Select Case e.KeyCode - Case Keys.Delete, Keys.Back - If Not _guIlocked Then RemoveJobFile() - Case Keys.Enter - OpenJobFile() - End Select - End Sub - - Private Sub ListViewGEN_DoubleClick(sender As Object, e As EventArgs) Handles LvGEN.DoubleClick - If LvGEN.SelectedItems.Count > 0 Then - LvGEN.SelectedItems(0).Checked = Not LvGEN.SelectedItems(0).Checked - OpenJobFile() - End If - End Sub - - Private Sub LvGEN_ItemChecked(sender As Object, e As ItemCheckedEventArgs) _ - Handles LvGEN.ItemChecked - - If e.Item.Checked Then - _genChecked += 1 - Else - _genChecked -= 1 - End If - - If _checkLock Then Exit Sub - UpdateJobTabText() - End Sub - - Private Sub ChBoxAllGEN_CheckedChanged(sender As Object, e As EventArgs) _ - Handles ChBoxAllGEN.CheckedChanged - - If _genCheckAllLock And ChBoxAllGEN.CheckState = CheckState.Indeterminate Then Exit Sub - - CheckAllGen(ChBoxAllGEN.Checked) - End Sub - - Private Sub CheckAllGen(check As Boolean) - Dim x As ListViewItem - - _checkLock = True - LvGEN.BeginUpdate() - - For Each x In LvGEN.Items - x.Checked = check - Next - - LvGEN.EndUpdate() - _checkLock = False - - _genChecked = LvGEN.CheckedItems.Count - UpdateJobTabText() - End Sub - - Private Sub ListGEN_DragEnter(sender As Object, e As DragEventArgs) _ - Handles LvGEN.DragEnter - If (e.Data.GetDataPresent(DataFormats.FileDrop)) Then - e.Effect = DragDropEffects.Copy - End If - End Sub - - Private Sub ListGEN_DragDrop(sender As Object, e As DragEventArgs) _ - Handles LvGEN.DragDrop - Dim f As String() - f = CType(e.Data.GetData(DataFormats.FileDrop), String()) - AddToJobListView(f) - End Sub - - Private Sub BtGENup_Click(sender As Object, e As EventArgs) Handles BtGENup.Click - MoveItem(LvGEN, True) - End Sub - - Private Sub BtGENdown_Click(sender As Object, e As EventArgs) Handles BtGENdown.Click - MoveItem(LvGEN, False) - End Sub + Private Sub ButtonGENremove_Click(sender As Object, e As EventArgs) _ + Handles ButtonGENremove.Click + RemoveJobFile() + End Sub + + Private Sub ButtonGENadd_Click(sender As Object, e As EventArgs) _ + Handles ButtonGENadd.Click + AddJobFile() + End Sub + + Private Sub ListViewGEN_KeyDown(sender As Object, e As KeyEventArgs) _ + Handles LvGEN.KeyDown + Select Case e.KeyCode + Case Keys.Delete, Keys.Back + If Not _guIlocked Then RemoveJobFile() + Case Keys.Enter + OpenJobFile() + End Select + End Sub + + Private Sub ListViewGEN_DoubleClick(sender As Object, e As EventArgs) Handles LvGEN.DoubleClick + If LvGEN.SelectedItems.Count > 0 Then + LvGEN.SelectedItems(0).Checked = Not LvGEN.SelectedItems(0).Checked + OpenJobFile() + End If + End Sub + + Private Sub LvGEN_ItemChecked(sender As Object, e As ItemCheckedEventArgs) _ + Handles LvGEN.ItemChecked + + If e.Item.Checked Then + _genChecked += 1 + Else + _genChecked -= 1 + End If + + If _checkLock Then Exit Sub + UpdateJobTabText() + End Sub + + Private Sub ChBoxAllGEN_CheckedChanged(sender As Object, e As EventArgs) _ + Handles ChBoxAllGEN.CheckedChanged + + If _genCheckAllLock And ChBoxAllGEN.CheckState = CheckState.Indeterminate Then Exit Sub + + CheckAllGen(ChBoxAllGEN.Checked) + End Sub + + Private Sub CheckAllGen(check As Boolean) + Dim x As ListViewItem + + _checkLock = True + LvGEN.BeginUpdate() + + For Each x In LvGEN.Items + x.Checked = check + Next + + LvGEN.EndUpdate() + _checkLock = False + + _genChecked = LvGEN.CheckedItems.Count + UpdateJobTabText() + End Sub + + Private Sub ListGEN_DragEnter(sender As Object, e As DragEventArgs) _ + Handles LvGEN.DragEnter + If (e.Data.GetDataPresent(DataFormats.FileDrop)) Then + e.Effect = DragDropEffects.Copy + End If + End Sub + + Private Sub ListGEN_DragDrop(sender As Object, e As DragEventArgs) _ + Handles LvGEN.DragDrop + Dim f As String() + f = CType(e.Data.GetData(DataFormats.FileDrop), String()) + AddToJobListView(f) + End Sub + + Private Sub BtGENup_Click(sender As Object, e As EventArgs) Handles BtGENup.Click + MoveItem(LvGEN, True) + End Sub + + Private Sub BtGENdown_Click(sender As Object, e As EventArgs) Handles BtGENdown.Click + MoveItem(LvGEN, False) + End Sub #End Region - 'Remove selected file(s) from job list - Private Sub RemoveJobFile() - Dim lastindx As Integer - Dim selIx() As Integer - Dim i As Integer - - If LvGEN.SelectedItems.Count < 1 Then - If LvGEN.Items.Count = 1 Then - LvGEN.Items(0).Selected = True - Else - Exit Sub - End If - End If - - LvGEN.BeginUpdate() - _checkLock = True - - ReDim selIx(LvGEN.SelectedItems.Count - 1) - LvGEN.SelectedIndices.CopyTo(selIx, 0) - - lastindx = LvGEN.SelectedIndices(LvGEN.SelectedItems.Count - 1) - - For i = UBound(selIx) To 0 Step -1 - LvGEN.Items.RemoveAt(selIx(i)) - Next - - If lastindx < LvGEN.Items.Count Then - LvGEN.Items(lastindx).Selected = True - Else - If LvGEN.Items.Count > 0 Then LvGEN.Items(LvGEN.Items.Count - 1).Selected = True - End If - - LvGEN.EndUpdate() - _checkLock = False - - _genChecked = LvGEN.CheckedItems.Count - UpdateJobTabText() - End Sub - - 'Browse for job file(s) and add to job list with AddToJobListView - Private Sub AddJobFile() - Dim x As String() - Dim chck As Boolean = False - - x = New String() {""} - - Dim extensions As String = "vecto" - Dim inputDataExtensions As String() = New String() {"xml"} - If (inputDataExtensions.Any()) Then extensions = String.Join(",", extensions, String.Join(",", inputDataExtensions)) - - 'STANDARD/BATCH - If JobfileFileBrowser.OpenDialog("", True, extensions) Then - chck = True - x = JobfileFileBrowser.Files - End If - - If chck Then AddToJobListView(x) - End Sub - - 'Open file in list - Private Sub OpenJobFile() - Dim f As String - - If LvGEN.SelectedItems.Count < 1 Then - If LvGEN.Items.Count = 1 Then - LvGEN.Items(0).Selected = True - Else - Exit Sub - End If - End If - - f = LvGEN.SelectedItems(0).SubItems(0).Text - f = FileRepl(f) - If Path.GetExtension(f) <> VectoCore.Configuration.Constants.FileExtensions.VectoJobFile Then - MsgBox("Job File " + f + " can not be opened in Job Editor. Try importing the file.") - Exit Sub - End If - If Not File.Exists(f) Then - MsgBox(f & " not found!") - Else - OpenVECTOeditor(f) - End If - End Sub - - 'Add File to job listview (multiple files) - Private Sub AddToJobListView(path As String(), Optional ByVal txt As String = " ") - Dim pDim As Integer - Dim p As Integer - Dim f As Integer - Dim fList As String() - Dim fListDim As Integer = -1 - Dim listViewItem As ListViewItem - - 'If VECTO runs: Cancel operation (because Mode-change during calculation is not very clever) - If VectoWorkerV3.IsBusy Then Exit Sub - - pDim = UBound(path) - ReDim fList(0) 'um Nullverweisausnahme-Warnung zu verhindern - - '******************************************* Begin Update '******************************************* - LvGEN.BeginUpdate() - _checkLock = True - - LvGEN.SelectedIndices.Clear() - - If pDim = 0 Then - fListDim = LvGEN.Items.Count - 1 - ReDim fList(fListDim) - For f = 0 To fListDim - fList(f) = FileRepl(LvGEN.Items(f).SubItems(0).Text) - Next - End If - - For p = 0 To pDim - - If pDim = 0 Then - - For f = 0 To fListDim - - 'If file already exists in the list: Do not append (only when a single file) - If UCase(path(p)) = UCase(fList(f)) Then - - 'Status reset - LvGEN.Items(f).SubItems(1).Text = txt - LvGEN.Items(f).BackColor = Color.FromKnownColor(KnownColor.Window) - LvGEN.Items(f).ForeColor = Color.FromKnownColor(KnownColor.WindowText) - - 'Element auswählen und anhaken |@@| Element selection and hook - LvGEN.Items(f).Selected = True - LvGEN.Items(f).Checked = True - LvGEN.Items(f).EnsureVisible() - - GoTo lbFound - End If - Next - - End If - - 'Otherwise: Add File (without WorkDir) - listViewItem = New ListViewItem(path(p)) 'fFileWD(Path(p))) - listViewItem.SubItems.Add(" ") - listViewItem.Checked = True - listViewItem.Selected = True - LvGEN.Items.Add(listViewItem) - listViewItem.EnsureVisible() -lbFound: - Next - - LvGEN.EndUpdate() - _checkLock = False - '******************************************* End Update '******************************************* - - 'Number update - _genChecked = LvGEN.CheckedItems.Count - UpdateJobTabText() - End Sub - - 'Add File to job listview (single file) - Public Sub AddToJobListView(path As String, Optional ByVal txt As String = " ") - Dim p(0) As String - p(0) = path - AddToJobListView(p, txt) - End Sub - - 'Update job files counter in tab titel - Private Sub UpdateJobTabText() - Dim count As Integer = LvGEN.Items.Count - - TabPageGEN.Text = String.Format("Job Files ( {0} / {1} )", _genChecked, count) - - _genCheckAllLock = True - - If _genChecked = 0 Then - ChBoxAllGEN.CheckState = CheckState.Unchecked - ElseIf _genChecked = count Then - ChBoxAllGEN.CheckState = CheckState.Checked - Else - ChBoxAllGEN.CheckState = CheckState.Indeterminate - End If - - _genCheckAllLock = False - End Sub + 'Remove selected file(s) from job list + Private Sub RemoveJobFile() + Dim lastindx As Integer + Dim selIx() As Integer + Dim i As Integer + + If LvGEN.SelectedItems.Count < 1 Then + If LvGEN.Items.Count = 1 Then + LvGEN.Items(0).Selected = True + Else + Exit Sub + End If + End If + + LvGEN.BeginUpdate() + _checkLock = True + + ReDim selIx(LvGEN.SelectedItems.Count - 1) + LvGEN.SelectedIndices.CopyTo(selIx, 0) + + lastindx = LvGEN.SelectedIndices(LvGEN.SelectedItems.Count - 1) + + For i = UBound(selIx) To 0 Step - 1 + LvGEN.Items.RemoveAt(selIx(i)) + Next + + If lastindx < LvGEN.Items.Count Then + LvGEN.Items(lastindx).Selected = True + Else + If LvGEN.Items.Count > 0 Then LvGEN.Items(LvGEN.Items.Count - 1).Selected = True + End If + + LvGEN.EndUpdate() + _checkLock = False + + _genChecked = LvGEN.CheckedItems.Count + UpdateJobTabText() + End Sub + + 'Browse for job file(s) and add to job list with AddToJobListView + Private Sub AddJobFile() + Dim x As String() + Dim chck As Boolean = False + + x = New String() {""} + + Dim extensions As String = "vecto" + Dim inputDataExtensions As String() = New String() {"xml"} + If (inputDataExtensions.Any()) Then _ + extensions = String.Join(",", extensions, String.Join(",", inputDataExtensions)) + + 'STANDARD/BATCH + If JobfileFileBrowser.OpenDialog("", True, extensions) Then + chck = True + x = JobfileFileBrowser.Files + End If + + If chck Then AddToJobListView(x) + End Sub + + 'Open file in list + Private Sub OpenJobFile() + Dim f As String + + If LvGEN.SelectedItems.Count < 1 Then + If LvGEN.Items.Count = 1 Then + LvGEN.Items(0).Selected = True + Else + Exit Sub + End If + End If + + f = LvGEN.SelectedItems(0).SubItems(0).Text + f = FileRepl(f) + If Path.GetExtension(f) <> VectoCore.Configuration.Constants.FileExtensions.VectoJobFile Then + MsgBox("Job File " + f + " can not be opened in Job Editor. Try importing the file.") + Exit Sub + End If + If Not File.Exists(f) Then + MsgBox(f & " not found!") + Else + OpenVECTOeditor(f) + End If + End Sub + + 'Add File to job listview (multiple files) + Private Sub AddToJobListView(path As String(), Optional ByVal txt As String = " ") + Dim pDim As Integer + Dim p As Integer + Dim f As Integer + Dim fList As String() + Dim fListDim As Integer = - 1 + Dim listViewItem As ListViewItem + + 'If VECTO runs: Cancel operation (because Mode-change during calculation is not very clever) + If VectoWorkerV3.IsBusy Then Exit Sub + + pDim = UBound(path) + ReDim fList(0) 'um Nullverweisausnahme-Warnung zu verhindern + + '******************************************* Begin Update '******************************************* + LvGEN.BeginUpdate() + _checkLock = True + + LvGEN.SelectedIndices.Clear() + + If pDim = 0 Then + fListDim = LvGEN.Items.Count - 1 + ReDim fList(fListDim) + For f = 0 To fListDim + fList(f) = FileRepl(LvGEN.Items(f).SubItems(0).Text) + Next + End If + + For p = 0 To pDim + + If pDim = 0 Then + + For f = 0 To fListDim + + 'If file already exists in the list: Do not append (only when a single file) + If UCase(path(p)) = UCase(fList(f)) Then + + 'Status reset + LvGEN.Items(f).SubItems(1).Text = txt + LvGEN.Items(f).BackColor = Color.FromKnownColor(KnownColor.Window) + LvGEN.Items(f).ForeColor = Color.FromKnownColor(KnownColor.WindowText) + + 'Element auswählen und anhaken |@@| Element selection and hook + LvGEN.Items(f).Selected = True + LvGEN.Items(f).Checked = True + LvGEN.Items(f).EnsureVisible() + + GoTo lbFound + End If + Next + + End If + + 'Otherwise: Add File (without WorkDir) + listViewItem = New ListViewItem(path(p)) 'fFileWD(Path(p))) + listViewItem.SubItems.Add(" ") + listViewItem.Checked = True + listViewItem.Selected = True + LvGEN.Items.Add(listViewItem) + listViewItem.EnsureVisible() + lbFound: + Next + + LvGEN.EndUpdate() + _checkLock = False + '******************************************* End Update '******************************************* + + 'Number update + _genChecked = LvGEN.CheckedItems.Count + UpdateJobTabText() + End Sub + + 'Add File to job listview (single file) + Public Sub AddToJobListView(path As String, Optional ByVal txt As String = " ") + Dim p(0) As String + p(0) = path + AddToJobListView(p, txt) + End Sub + + 'Update job files counter in tab titel + Private Sub UpdateJobTabText() + Dim count As Integer = LvGEN.Items.Count + + TabPageGEN.Text = String.Format("Job Files ( {0} / {1} )", _genChecked, count) + + _genCheckAllLock = True + + If _genChecked = 0 Then + ChBoxAllGEN.CheckState = CheckState.Unchecked + ElseIf _genChecked = count Then + ChBoxAllGEN.CheckState = CheckState.Checked + Else + ChBoxAllGEN.CheckState = CheckState.Indeterminate + End If + + _genCheckAllLock = False + End Sub #Region "Toolstrip" - 'New Job file - Private Sub ToolStripBtNew_Click(sender As Object, e As EventArgs) Handles ToolStripBtNew.Click - OpenVECTOeditor("<New>") - End Sub - - 'Open input file - Private Sub ToolStripBtOpen_Click(sender As Object, e As EventArgs) Handles ToolStripBtOpen.Click - - If JobfileFileBrowser.OpenDialog("", False, "vecto,vveh,vgbx,veng") Then - OpenVectoFile(JobfileFileBrowser.Files(0)) - End If - End Sub - - Private Sub GENEditorToolStripMenuItem1_Click(sender As Object, e As EventArgs) _ - Handles GENEditorToolStripMenuItem1.Click - OpenVECTOeditor("<New>") - End Sub - - Private Sub VEHEditorToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles VEHEditorToolStripMenuItem.Click - If Not VehicleForm.Visible Then - VehicleForm.Show() - Else - If VehicleForm.WindowState = FormWindowState.Minimized Then VehicleForm.WindowState = FormWindowState.Normal - VehicleForm.BringToFront() - End If - End Sub - - Private Sub EngineEditorToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles EngineEditorToolStripMenuItem.Click - If Not EngineForm.Visible Then - EngineForm.Show() - Else - If EngineForm.WindowState = FormWindowState.Minimized Then EngineForm.WindowState = FormWindowState.Normal - EngineForm.BringToFront() - End If - End Sub - - Private Sub GearboxEditorToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles GearboxEditorToolStripMenuItem.Click - If Not GearboxForm.Visible Then - GearboxForm.Show() - Else - If GearboxForm.WindowState = FormWindowState.Minimized Then GearboxForm.WindowState = FormWindowState.Normal - GearboxForm.BringToFront() - End If - End Sub - - Private Sub GraphToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles GraphToolStripMenuItem.Click - Dim graphForm As New GraphForm - graphForm.Show() - End Sub - - Private Sub OpenLogToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles OpenLogToolStripMenuItem.Click - Process.Start(MyAppPath & "log.txt") - End Sub - - Private Sub SettingsToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles SettingsToolStripMenuItem.Click - Settings.ShowDialog() - End Sub - - Private Sub UserManualToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles UserManualToolStripMenuItem.Click - If File.Exists(MyAppPath & "User Manual\help.html") Then - Dim defaultBrowserPath As String = BrowserUtils.GetDefaultBrowserPath() - Process.Start(defaultBrowserPath, String.Format("""file://{0}{1}""", MyAppPath, "User Manual\help.html")) - Else - MsgBox("User Manual not found!", MsgBoxStyle.Critical) - End If - End Sub - - Private Sub UpdateNotesToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles UpdateNotesToolStripMenuItem.Click - If File.Exists(MyAppPath & "User Manual\Release Notes.pdf") Then - Process.Start(MyAppPath & "User Manual\Release Notes.pdf") - Else - MsgBox("Release Notes not found!", MsgBoxStyle.Critical) - End If - End Sub - - Private Sub ReportBugViaCITnetToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles ReportBugViaCITnetToolStripMenuItem.Click - JiraDialog.ShowDialog() - End Sub - - Private Sub AboutVECTOToolStripMenuItem1_Click(sender As Object, e As EventArgs) _ - Handles AboutVECTOToolStripMenuItem1.Click - AboutBox.ShowDialog() - End Sub + 'New Job file + Private Sub ToolStripBtNew_Click(sender As Object, e As EventArgs) Handles ToolStripBtNew.Click + OpenVECTOeditor("<New>") + End Sub + + 'Open input file + Private Sub ToolStripBtOpen_Click(sender As Object, e As EventArgs) Handles ToolStripBtOpen.Click + + If JobfileFileBrowser.OpenDialog("", False, "vecto,vveh,vgbx,veng") Then + OpenVectoFile(JobfileFileBrowser.Files(0)) + End If + End Sub + + Private Sub GENEditorToolStripMenuItem1_Click(sender As Object, e As EventArgs) _ + Handles GENEditorToolStripMenuItem1.Click + OpenVECTOeditor("<New>") + End Sub + + Private Sub VEHEditorToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles VEHEditorToolStripMenuItem.Click + If Not VehicleForm.Visible Then + VehicleForm.Show() + Else + If VehicleForm.WindowState = FormWindowState.Minimized Then VehicleForm.WindowState = FormWindowState.Normal + VehicleForm.BringToFront() + End If + End Sub + + Private Sub EngineEditorToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles EngineEditorToolStripMenuItem.Click + If Not EngineForm.Visible Then + EngineForm.Show() + Else + If EngineForm.WindowState = FormWindowState.Minimized Then EngineForm.WindowState = FormWindowState.Normal + EngineForm.BringToFront() + End If + End Sub + + Private Sub GearboxEditorToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles GearboxEditorToolStripMenuItem.Click + If Not GearboxForm.Visible Then + GearboxForm.Show() + Else + If GearboxForm.WindowState = FormWindowState.Minimized Then GearboxForm.WindowState = FormWindowState.Normal + GearboxForm.BringToFront() + End If + End Sub + + Private Sub GraphToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles GraphToolStripMenuItem.Click + Dim graphForm As New GraphForm + graphForm.Show() + End Sub + + Private Sub OpenLogToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles OpenLogToolStripMenuItem.Click + Process.Start(MyAppPath & "log.txt") + End Sub + + Private Sub SettingsToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles SettingsToolStripMenuItem.Click + Settings.ShowDialog() + End Sub + + Private Sub UserManualToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles UserManualToolStripMenuItem.Click + If File.Exists(MyAppPath & "User Manual\help.html") Then + Dim defaultBrowserPath As String = BrowserUtils.GetDefaultBrowserPath() + Process.Start(defaultBrowserPath, String.Format("""file://{0}{1}""", MyAppPath, "User Manual\help.html")) + Else + MsgBox("User Manual not found!", MsgBoxStyle.Critical) + End If + End Sub + + Private Sub UpdateNotesToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles UpdateNotesToolStripMenuItem.Click + If File.Exists(MyAppPath & "User Manual\Release Notes.pdf") Then + Process.Start(MyAppPath & "User Manual\Release Notes.pdf") + Else + MsgBox("Release Notes not found!", MsgBoxStyle.Critical) + End If + End Sub + + Private Sub ReportBugViaCITnetToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles ReportBugViaCITnetToolStripMenuItem.Click + JiraDialog.ShowDialog() + End Sub + + Private Sub AboutVECTOToolStripMenuItem1_Click(sender As Object, e As EventArgs) _ + Handles AboutVECTOToolStripMenuItem1.Click + AboutBox.ShowDialog() + End Sub #End Region - 'Move job/cycle file up or down in list view - Private Sub MoveItem(ByRef listView As ListView, moveUp As Boolean) - Dim x As Integer - Dim y As Integer - Dim y1 As Integer - Dim items() As String - Dim check() As Boolean - Dim index() As Integer - Dim listViewItem As ListViewItem - - If _guIlocked Then Exit Sub - - 'Cache Selected Items - y1 = listView.SelectedItems.Count - 1 - ReDim items(y1) - ReDim check(y1) - ReDim index(y1) - y = 0 - For Each x In listView.SelectedIndices - items(y) = listView.Items(x).SubItems(0).Text - check(y) = listView.Items(x).Checked - If moveUp Then - If x = 0 Then Exit Sub - index(y) = x - 1 - Else - If x = listView.Items.Count - 1 Then Exit Sub - index(y) = x + 1 - End If - y += 1 - Next - - listView.BeginUpdate() - - 'Delete Selected Items - For Each listViewItem In listView.SelectedItems - listViewItem.Remove() - Next - - 'Items select and Insert - For y = 0 To y1 - If Not check(y) Then _genChecked += 1 - listViewItem = listView.Items.Insert(index(y), items(y)) - listViewItem.SubItems.Add(" ") - listViewItem.Checked = check(y) - listView.SelectedIndices.Add(index(y)) - Next - - listView.EndUpdate() - End Sub + 'Move job/cycle file up or down in list view + Private Sub MoveItem(ByRef listView As ListView, moveUp As Boolean) + Dim x As Integer + Dim y As Integer + Dim y1 As Integer + Dim items() As String + Dim check() As Boolean + Dim index() As Integer + Dim listViewItem As ListViewItem + + If _guIlocked Then Exit Sub + + 'Cache Selected Items + y1 = listView.SelectedItems.Count - 1 + ReDim items(y1) + ReDim check(y1) + ReDim index(y1) + y = 0 + For Each x In listView.SelectedIndices + items(y) = listView.Items(x).SubItems(0).Text + check(y) = listView.Items(x).Checked + If moveUp Then + If x = 0 Then Exit Sub + index(y) = x - 1 + Else + If x = listView.Items.Count - 1 Then Exit Sub + index(y) = x + 1 + End If + y += 1 + Next + + listView.BeginUpdate() + + 'Delete Selected Items + For Each listViewItem In listView.SelectedItems + listViewItem.Remove() + Next + + 'Items select and Insert + For y = 0 To y1 + If Not check(y) Then _genChecked += 1 + listViewItem = listView.Items.Insert(index(y), items(y)) + listViewItem.SubItems.Add(" ") + listViewItem.Checked = check(y) + listView.SelectedIndices.Add(index(y)) + Next + + listView.EndUpdate() + End Sub #Region "job/cycle file List - Context Menu" - 'Save List - Private Sub SaveListToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles SaveListToolStripMenuItem.Click - If TextFileBrowser.SaveDialog("") Then - If _conMenTarJob Then - _jobListView.SaveList(TextFileBrowser.Files(0)) - Else - _cycleListView.SaveList(TextFileBrowser.Files(0)) - End If - End If - End Sub + 'Save List + Private Sub SaveListToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles SaveListToolStripMenuItem.Click + If TextFileBrowser.SaveDialog("") Then + If _conMenTarJob Then + _jobListView.SaveList(TextFileBrowser.Files(0)) + Else + _cycleListView.SaveList(TextFileBrowser.Files(0)) + End If + End If + End Sub - 'Load List - Private Sub LoadListToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles LoadListToolStripMenuItem.Click + 'Load List + Private Sub LoadListToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles LoadListToolStripMenuItem.Click - If _guIlocked Then Exit Sub + If _guIlocked Then Exit Sub - If TextFileBrowser.OpenDialog("") Then + If TextFileBrowser.OpenDialog("") Then - If _conMenTarJob Then 'GEN - _jobListView.LoadList(TextFileBrowser.Files(0)) - _genChecked = LvGEN.CheckedItems.Count - UpdateJobTabText() - Else 'DRI - 'Mode toggle - _cycleListView.LoadList(TextFileBrowser.Files(0)) - End If + If _conMenTarJob Then 'GEN + _jobListView.LoadList(TextFileBrowser.Files(0)) + _genChecked = LvGEN.CheckedItems.Count + UpdateJobTabText() + Else 'DRI + 'Mode toggle + _cycleListView.LoadList(TextFileBrowser.Files(0)) + End If - End If - End Sub + End If + End Sub - 'Load Default List - Private Sub LoadDefaultListToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles LoadDefaultListToolStripMenuItem.Click + 'Load Default List + Private Sub LoadDefaultListToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles LoadDefaultListToolStripMenuItem.Click - If _guIlocked Then Exit Sub + If _guIlocked Then Exit Sub - If _conMenTarJob Then + If _conMenTarJob Then - _jobListView.LoadList() + _jobListView.LoadList() - _genChecked = LvGEN.CheckedItems.Count - UpdateJobTabText() - Else - _cycleListView.LoadList() + _genChecked = LvGEN.CheckedItems.Count + UpdateJobTabText() + Else + _cycleListView.LoadList() - End If - End Sub + End If + End Sub - 'Clear List - Private Sub ClearListToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles ClearListToolStripMenuItem.Click + 'Clear List + Private Sub ClearListToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles ClearListToolStripMenuItem.Click - If _guIlocked Then Exit Sub + If _guIlocked Then Exit Sub - _conMenTarget.Items.Clear() - If _conMenTarJob Then - _genChecked = LvGEN.CheckedItems.Count - UpdateJobTabText() - End If - End Sub + _conMenTarget.Items.Clear() + If _conMenTarJob Then + _genChecked = LvGEN.CheckedItems.Count + UpdateJobTabText() + End If + End Sub #End Region - 'VECTO Start button - Calls VECTO_Launcher or aborts calculation - - Private Sub btStartV3_Click(sender As Object, e As EventArgs) Handles btStartV3.Click - If Not VectoWorkerV3.IsBusy Then - 'Save Lists for Crash - SaveFileLists() - - LvGEN.SelectedItems.Clear() - - If LvGEN.CheckedItems.Count = 0 Then - GUIMsg(MessageType.Err, "No job file selected!") - Exit Sub - End If - - Status("Launching VECTO ...") - JobFileList.Clear() - JobFileList.AddRange( - From listViewItem As ListViewItem In LvGEN.CheckedItems.Cast(Of ListViewItem)() - Select fFileRepl = FileRepl(listViewItem.SubItems(0).Text)) - - SetOptions() - Cfg.Save() - ClearMsg() - - LockGUI(True) - btStartV3.Enabled = True - btStartV3.Text = "STOP" - btStartV3.Image = My.Resources.Stop_icon - - ToolStripProgBarOverall.Value = 0 - ToolStripProgBarOverall.Style = ProgressBarStyle.Continuous - ToolStripProgBarOverall.Visible = True - - VectoWorkerV3.RunWorkerAsync() - Else - btStartV3.Enabled = False - btStartV3.Text = "Aborting..." - btStartV3.Image = My.Resources.Play_icon_gray - VectoWorkerV3.CancelAsync() - End If - End Sub - - - Private Sub VectoWorkerV3_OnDoWork(theSender As Object, e As DoWorkEventArgs) - Dim sender As BackgroundWorker = TryCast(theSender, BackgroundWorker) - If sender Is Nothing Then Exit Sub - - AllowSleepOff() - - Dim sumFileWriter As FileOutputWriter = New FileOutputWriter(JobFileList(0)) - Dim sumWriter As SummaryDataContainer = New SummaryDataContainer(sumFileWriter) - Dim jobContainer As JobContainer = New JobContainer(sumWriter) - - Dim mode As ExecutionMode - If Cfg.DeclMode Then - mode = ExecutionMode.Declaration - Else - mode = ExecutionMode.Engineering - Physics.AirDensity = Cfg.AirDensity.SI(Of KilogramPerCubicMeter)() - End If - - 'dictionary of run-identifiers to fileWriters (used for output directory of modfile) - Dim fileWriters As Dictionary(Of Integer, FileOutputWriter) = New Dictionary(Of Integer, FileOutputWriter) - - 'list of finished runs - Dim finishedRuns As List(Of Integer) = New List(Of Integer) - For Each jobFile As String In JobFileList - Try - sender.ReportProgress(0, - New VectoProgress With {.Target = "ListBox", .Message = "Reading File " + jobFile, .Link = jobFile}) - - Dim extension As String = Path.GetExtension(jobFile) - Dim input As IInputDataProvider = Nothing - Select Case extension - Case VectoCore.Configuration.Constants.FileExtensions.VectoJobFile - input = JSONInputDataFactory.ReadJsonJob(jobFile) - Case ".xml" - Dim xDocument As XDocument = xDocument.Load(jobFile) - Dim rootNode As String = If(xDocument Is Nothing, "", xDocument.Root.Name.LocalName) - Select Case rootNode - Case XMLNames.VectoInputEngineering - input = New XMLEngineeringInputDataProvider(jobFile, True) - Case XMLNames.VectoInputDeclaration - input = New XMLDeclarationInputDataProvider(XmlReader.Create(jobFile), True) - End Select - End Select - - If input Is Nothing Then - sender.ReportProgress(0, - New VectoProgress With {.Target = "ListBoxError", .Message = "No Input Provider for job: " + jobFile}) - Continue For - End If - - Dim fileWriter As FileOutputWriter = New FileOutputWriter(jobFile) - - Dim runsFactory As SimulatorFactory = New SimulatorFactory(mode, input, fileWriter) - runsFactory.WriteModalResults = Cfg.ModOut - runsFactory.ModalResults1Hz = Cfg.Mod1Hz - runsFactory.Validate = cbValidateRunData.Checked - runsFactory.ActualModalData = cbActVmod.Checked - - For Each runId As Integer In jobContainer.AddRuns(runsFactory) - fileWriters.Add(runId, fileWriter) - Next - - - sender.ReportProgress(0, - New VectoProgress With {.Target = "ListBox", .Message = "Finished Reading Data for job: " + jobFile}) - - Catch ex As Exception - MsgBox(String.Format("ERROR running job {0}: {1}", jobFile, ex.Message), MsgBoxStyle.Critical) - sender.ReportProgress(0, New VectoProgress With {.Target = "ListBoxError", .Message = ex.Message}) - Return - End Try - Next - - 'print detected cycles - For Each cycle As JobContainer.CycleTypeDescription In jobContainer.GetCycleTypes() - sender.ReportProgress(0, - New VectoProgress _ - With {.Target = "ListBox", .Message = String.Format("Detected Cycle {0}: {1}", cycle.Name, cycle.CycleType)}) - Next - - sender.ReportProgress(0, New VectoProgress With {.Target = "ListBox", - .Message = _ - String.Format("Starting Simulation ({0} Jobs, {1} Runs)", JobFileList.Count, jobContainer.GetProgress().Count)}) - - jobContainer.Execute(True) - - Dim start As DateTime = DateTime.Now() - - While Not jobContainer.AllCompleted - 'cancel the job if thread is interrupted (button "Stop" clicked) - If sender.CancellationPending Then - jobContainer.Cancel() - Return - End If - - Dim progress As Dictionary(Of Integer, JobContainer.ProgressEntry) = jobContainer.GetProgress() - Dim sumProgress As Double = progress.Sum(Function(pair) pair.Value.Progress) - Dim duration As Double = (DateTime.Now() - start).TotalSeconds - - sender.ReportProgress(Convert.ToInt32((sumProgress * 100.0) / progress.Count), - New VectoProgress With {.Target = "Status", - .Message = _ - String.Format("Duration: {0:0}s, Current Progress: {1:P} ({2})", duration, sumProgress / progress.Count, - String.Join(", ", progress.Select(Function(pair) String.Format("{0,4:P}", pair.Value.Progress))))}) - - Dim justFinished As Dictionary(Of Integer, JobContainer.ProgressEntry) = - progress.Where(Function(proc) proc.Value.Done AndAlso Not finishedRuns.Contains(proc.Key)).ToDictionary( - Function(pair) pair.Key, Function(pair) pair.Value) - PrintRuns(justFinished, fileWriters) - finishedRuns.AddRange(justFinished.Select(Function(pair) pair.Key)) - Thread.Sleep(100) - End While - - Dim remainingRuns As Dictionary(Of Integer, JobContainer.ProgressEntry) = - jobContainer.GetProgress().Where(Function(proc) proc.Value.Done AndAlso Not finishedRuns.Contains(proc.Key)). - ToDictionary(Function(pair) pair.Key, Function(pair) pair.Value) - PrintRuns(remainingRuns, fileWriters) - - finishedRuns.Clear() - fileWriters.Clear() - - For Each progressEntry As KeyValuePair(Of Integer, JobContainer.ProgressEntry) In jobContainer.GetProgress() - sender.ReportProgress(100, New VectoProgress With {.Target = "ListBox", - .Message = String.Format("{0,-60} {1,8:P} {2,10:F2}s - {3}", - String.Format("{0} {1} {2}", progressEntry.Value.RunName, progressEntry.Value.CycleName, - progressEntry.Value.RunSuffix), - progressEntry.Value.Progress, progressEntry.Value.ExecTime / 1000.0, - IIf(progressEntry.Value.Success, "Success", "Aborted"))}) - If (Not progressEntry.Value.Success) Then - sender.ReportProgress(100, - New VectoProgress With {.Target = "ListBox", .Message = progressEntry.Value.Error.Message}) - End If - - Next - - For Each job As String In JobFileList - Dim report As String = New FileOutputWriter(job).XMLFullReportName - If File.Exists(report) Then - sender.ReportProgress(100, New VectoProgress With {.Target = "ListBox", - .Message = String.Format("XML Manufacturer Report for '{0}' written to {1}", Path.GetFileName(job), report), - .Link = "<XML>" + report}) - End If - report = New FileOutputWriter(job).XMLCustomerReportName - If File.Exists(report) Then - sender.ReportProgress(100, New VectoProgress With {.Target = "ListBox", - .Message = String.Format("XML Customer Report for '{0}' written to {1}", Path.GetFileName(job), report), - .Link = "<XML>" + report}) - End If - Next - - If File.Exists(sumFileWriter.SumFileName) Then - sender.ReportProgress(100, New VectoProgress With {.Target = "ListBox", - .Message = String.Format("Sum File written to {0}", sumFileWriter.SumFileName), - .Link = sumFileWriter.SumFileName}) - End If - - sender.ReportProgress(100, New VectoProgress With {.Target = "ListBox", - .Message = String.Format("Simulation Finished in {0:0}s", (DateTime.Now() - start).TotalSeconds)}) - End Sub - - - Private Shared Sub PrintRuns(progress As Dictionary(Of Integer, JobContainer.ProgressEntry), - fileWriters As Dictionary(Of Integer, FileOutputWriter)) - For Each p As KeyValuePair(Of Integer, JobContainer.ProgressEntry) In progress - Dim modFilename As String = fileWriters(p.Key).GetModDataFileName(p.Value.RunName, p.Value.CycleName, - p.Value.RunSuffix + If(Cfg.Mod1Hz, "_1Hz", "")) - - Dim runName As String = String.Format("{0} {1} {2}", p.Value.RunName, p.Value.CycleName, p.Value.RunSuffix) - - If Not p.Value.Error Is Nothing Then - VectoWorkerV3.ReportProgress(0, New VectoProgress With {.Target = "ListBoxError", - .Message = String.Format("Finished Run {0} with ERROR: {1}", runName, p.Value.Error.Message), - .Link = modFilename}) - Else - VectoWorkerV3.ReportProgress(0, - New VectoProgress _ - With {.Target = "ListBox", .Message = String.Format("Finished Run {0} successfully.", runName)}) - End If - - If (File.Exists(modFilename)) Then - VectoWorkerV3.ReportProgress(0, New VectoProgress With {.Target = "ListBox", - .Message = String.Format("Run {0}: Modal Results written to {1}", runName, modFilename), .Link = modFilename - }) - End If - Next - End Sub - - Private Sub VectoWorkerV3_OnProgressChanged(sender As Object, e As ProgressChangedEventArgs) - Dim progress As VectoProgress = TryCast(e.UserState, VectoProgress) - If progress Is Nothing Then Exit Sub - - Select Case progress.Target - Case "ListBox" - If progress.Link Is Nothing Then - MsgToForm(MessageType.Normal, progress.Message, "", "") - Else - MsgToForm(MessageType.Normal, progress.Message, "", progress.Link) - End If - Case "ListBoxWarning" - MsgToForm(MessageType.Warn, progress.Message, "", "") - Return - Case "ListBoxError" - MsgToForm(MessageType.Err, progress.Message, "", "") - Return - Case "Status" - Status(progress.Message) - End Select - - ToolStripProgBarOverall.Value = e.ProgressPercentage - End Sub - - Private Sub VectoWorkerV3_OnRunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) - - 'Progbar reset - ToolStripProgBarOverall.Visible = False - ToolStripProgBarOverall.Style = ProgressBarStyle.Continuous - ToolStripProgBarOverall.Value = 0 - ProgSecStop() - - LvGEN.SelectedIndices.Clear() - - 'ShutDown when Unexpected Error - If e.Error IsNot Nothing Then - MsgBox("An Unexpected Error occurred!" & ChrW(10) & ChrW(10) & - e.Error.Message.ToString, MsgBoxStyle.Critical, "Unexpected Error") - LogFile.WriteToLog(MessageType.Err, ">>>Unexpected Error:" & e.Error.ToString()) - End If - - 'Options enable / GUI reset - LockGUI(False) - btStartV3.Text = "START" - btStartV3.Image = My.Resources.Play_icon - Status(_lastModeName & " Mode") - - 'SLEEP reactivate - AllowSleepOn() - End Sub - - - Private Sub ModeUpdate() - - 'Save lists - _jobListView.SaveList() - - 'GUI changes according to current mode - - If Cfg.DeclMode Then - _lastModeName = "Declaration" - Else - _lastModeName = "Engineering" - End If - - 'Update job counter - _genChecked = LvGEN.CheckedItems.Count - UpdateJobTabText() - - 'Status label - Status(_lastModeName & " Mode") - End Sub - - 'Class for ListView control - Job and cycle lists - Private Class FileListView - Private ReadOnly _filePath As String - Private _loadedDefault As Boolean - Public LVbox As ListView - - Public Sub New(path As String) - _filePath = path - _loadedDefault = False - End Sub - - Public Sub SaveList(Optional ByVal path As String = "") - Dim x As Integer - If path = "" Then - If Not _loadedDefault Then Exit Sub - path = _filePath - End If - Dim file As StreamWriter = My.Computer.FileSystem.OpenTextFileWriter(path, False, Encoding.UTF8) - For x = 1 To LVbox.Items.Count - file.WriteLine(String.Join("?", LVbox.Items(x - 1).SubItems(0).Text, Math.Abs(CInt(LVbox.Items(x - 1).Checked)))) - Next - file.Close() - End Sub - - Public Sub LoadList(Optional ByVal path As String = "") - 'Dim line As String() - Dim noCheck As Boolean - 'Dim file As CsvFile - Dim listViewItem As ListViewItem - - If path = "" Then - path = _filePath - _loadedDefault = True - End If - - 'file = New CsvFile - - If Not File.Exists(path) Then - If Not _loadedDefault Then GUIMsg(MessageType.Err, "Cannot open file (" & path & ")!") - Exit Sub - End If - - MainForm._checkLock = True - LVbox.BeginUpdate() - - LVbox.Items.Clear() - - noCheck = False - Dim reader As TextFieldParser = New TextFieldParser(path, Encoding.Default) - reader.TextFieldType = FieldType.Delimited - reader.Delimiters = New String() {"?"} - - Do While Not reader.EndOfData - Dim line As String() = reader.ReadFields() - If Strings.Left(Trim(line(0)), 1) = "#" Then Continue Do - - listViewItem = New ListViewItem(line(0)) - listViewItem.SubItems.Add(" ") - - If noCheck Then - listViewItem.Checked = True - Else - If UBound(line) < 1 Then - noCheck = True - listViewItem.Checked = True - Else - If IsNumeric(line(1)) Then - listViewItem.Checked = CBool(line(1)) - Else - listViewItem.Checked = True - End If - End If - End If - LVbox.Items.Add(listViewItem) - Loop - - reader.Close() - - LVbox.EndUpdate() - MainForm._checkLock = False - - If LVbox.Items.Count > 0 Then LVbox.Items(LVbox.Items.Count - 1).EnsureVisible() - End Sub - End Class - - - 'Open Job Editor and open file (or new file) - Friend Sub OpenVECTOeditor(x As String) - - If x = "<New>" Then - ShowVectoJobForm() - VectoJobForm.VectoNew() - ElseIf x = "<VTP>" Then - ShowVectoEPTPJobForm() - VectoVTPJobForm.VectoNew() - Else - Try - Dim job As IVTPInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(x), IVTPInputDataProvider) - If job Is Nothing Then - ShowVectoJobForm() - VectoJobForm.VECTOload2Form(x) - Else - ShowVectoEPTPJobForm() - VectoVTPJobForm.VECTOload2Form(x) - End If - Catch ex As Exception - MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Error loading Vecto Job File") - End Try - End If - - VectoJobForm.Activate() - End Sub - - Private Sub ShowVectoJobForm() - If Not VectoJobForm.Visible Then - VectoJobForm.Show() - Else - If VectoJobForm.WindowState = FormWindowState.Minimized Then VectoJobForm.WindowState = FormWindowState.Normal - VectoJobForm.BringToFront() - End If - End Sub - - Private Sub ShowVectoEPTPJobForm() - If Not VectoVTPJobForm.Visible Then - VectoVTPJobForm.Show() - Else - If VectoVTPJobForm.WindowState = FormWindowState.Minimized Then _ - VectoVTPJobForm.WindowState = FormWindowState.Normal - VectoVTPJobForm.BringToFront() - End If - End Sub - - 'Save job and cycle file lists - Private Sub SaveFileLists() - _jobListView.SaveList() - 'If Cfg.BatchMode Then CycleListView.SaveList() - End Sub + 'VECTO Start button - Calls VECTO_Launcher or aborts calculation + + Private Sub btStartV3_Click(sender As Object, e As EventArgs) Handles btStartV3.Click + If Not VectoWorkerV3.IsBusy Then + 'Save Lists for Crash + SaveFileLists() + + LvGEN.SelectedItems.Clear() + + If LvGEN.CheckedItems.Count = 0 Then + GUIMsg(MessageType.Err, "No job file selected!") + Exit Sub + End If + + Status("Launching VECTO ...") + JobFileList.Clear() + JobFileList.AddRange( + From listViewItem As ListViewItem In LvGEN.CheckedItems.Cast (Of ListViewItem)() + Select fFileRepl = FileRepl(listViewItem.SubItems(0).Text)) + + SetOptions() + Cfg.Save() + ClearMsg() + + LockGUI(True) + btStartV3.Enabled = True + btStartV3.Text = "STOP" + btStartV3.Image = My.Resources.Stop_icon + + ToolStripProgBarOverall.Value = 0 + ToolStripProgBarOverall.Style = ProgressBarStyle.Continuous + ToolStripProgBarOverall.Visible = True + + VectoWorkerV3.RunWorkerAsync() + Else + btStartV3.Enabled = False + btStartV3.Text = "Aborting..." + btStartV3.Image = My.Resources.Play_icon_gray + VectoWorkerV3.CancelAsync() + End If + End Sub + + + Private Sub VectoWorkerV3_OnDoWork(theSender As Object, e As DoWorkEventArgs) + Dim sender As BackgroundWorker = TryCast(theSender, BackgroundWorker) + If sender Is Nothing Then Exit Sub + + AllowSleepOff() + + Dim sumFileWriter As FileOutputWriter = New FileOutputWriter(JobFileList(0)) + Dim sumWriter As SummaryDataContainer = New SummaryDataContainer(sumFileWriter) + Dim jobContainer As JobContainer = New JobContainer(sumWriter) + + Dim mode As ExecutionMode + If Cfg.DeclMode Then + mode = ExecutionMode.Declaration + Else + mode = ExecutionMode.Engineering + Physics.AirDensity = Cfg.AirDensity.SI (Of KilogramPerCubicMeter)() + End If + + 'dictionary of run-identifiers to fileWriters (used for output directory of modfile) + Dim fileWriters As Dictionary(Of Integer, FileOutputWriter) = New Dictionary(Of Integer, FileOutputWriter) + + 'list of finished runs + Dim finishedRuns As List(Of Integer) = New List(Of Integer) + For Each jobFile As String In JobFileList + Try + sender.ReportProgress(0, + New VectoProgress _ + With {.Target = "ListBox", .Message = "Reading File " + jobFile, + .Link = jobFile}) + + Dim extension As String = Path.GetExtension(jobFile) + Dim input As IInputDataProvider = Nothing + Select Case extension + Case VectoCore.Configuration.Constants.FileExtensions.VectoJobFile + input = JSONInputDataFactory.ReadJsonJob(jobFile) + Case ".xml" + Dim xDocument As XDocument = xDocument.Load(jobFile) + Dim rootNode As String = If(xDocument Is Nothing, "", xDocument.Root.Name.LocalName) + Select Case rootNode + Case XMLNames.VectoInputEngineering + input = New XMLEngineeringInputDataProvider(jobFile, True) + Case XMLNames.VectoInputDeclaration + input = New XMLDeclarationInputDataProvider(XmlReader.Create(jobFile), True) + End Select + End Select + + If input Is Nothing Then + sender.ReportProgress(0, + New VectoProgress _ + With {.Target = "ListBoxError", + .Message = "No Input Provider for job: " + jobFile}) + Continue For + End If + + Dim fileWriter As FileOutputWriter = New FileOutputWriter(jobFile) + + Dim runsFactory As SimulatorFactory = New SimulatorFactory(mode, input, fileWriter) + runsFactory.WriteModalResults = Cfg.ModOut + runsFactory.ModalResults1Hz = Cfg.Mod1Hz + runsFactory.Validate = cbValidateRunData.Checked + runsFactory.ActualModalData = cbActVmod.Checked + + For Each runId As Integer In jobContainer.AddRuns(runsFactory) + fileWriters.Add(runId, fileWriter) + Next + + + sender.ReportProgress(0, + New VectoProgress _ + With {.Target = "ListBox", + .Message = "Finished Reading Data for job: " + jobFile}) + + Catch ex As Exception + MsgBox(String.Format("ERROR running job {0}: {1}", jobFile, ex.Message), MsgBoxStyle.Critical) + sender.ReportProgress(0, New VectoProgress With {.Target = "ListBoxError", .Message = ex.Message}) + Return + End Try + Next + + 'print detected cycles + For Each cycle As JobContainer.CycleTypeDescription In jobContainer.GetCycleTypes() + sender.ReportProgress(0, + New VectoProgress _ + With {.Target = "ListBox", + .Message = String.Format("Detected Cycle {0}: {1}", cycle.Name, cycle.CycleType)}) + Next + + sender.ReportProgress(0, New VectoProgress With {.Target = "ListBox", + .Message = _ + String.Format("Starting Simulation ({0} Jobs, {1} Runs)", JobFileList.Count, + jobContainer.GetProgress().Count)}) + + jobContainer.Execute(True) + + Dim start As DateTime = DateTime.Now() + + While Not jobContainer.AllCompleted + 'cancel the job if thread is interrupted (button "Stop" clicked) + If sender.CancellationPending Then + jobContainer.Cancel() + Return + End If + + Dim progress As Dictionary(Of Integer, JobContainer.ProgressEntry) = jobContainer.GetProgress() + Dim sumProgress As Double = progress.Sum(Function(pair) pair.Value.Progress) + Dim duration As Double = (DateTime.Now() - start).TotalSeconds + + sender.ReportProgress(Convert.ToInt32((sumProgress*100.0)/progress.Count), + New VectoProgress With {.Target = "Status", + .Message = _ + String.Format("Duration: {0:0}s, Current Progress: {1:P} ({2})", duration, + sumProgress/progress.Count, + String.Join(", ", + progress.Select( + Function(pair) _ + String.Format("{0,4:P}", + pair.Value.Progress))))}) + + Dim justFinished As Dictionary(Of Integer, JobContainer.ProgressEntry) = + progress.Where(Function(proc) proc.Value.Done AndAlso Not finishedRuns.Contains(proc.Key)). + ToDictionary( + Function(pair) pair.Key, Function(pair) pair.Value) + PrintRuns(justFinished, fileWriters) + finishedRuns.AddRange(justFinished.Select(Function(pair) pair.Key)) + Thread.Sleep(100) + End While + + Dim remainingRuns As Dictionary(Of Integer, JobContainer.ProgressEntry) = + jobContainer.GetProgress().Where( + Function(proc) proc.Value.Done AndAlso Not finishedRuns.Contains(proc.Key)). + ToDictionary(Function(pair) pair.Key, Function(pair) pair.Value) + PrintRuns(remainingRuns, fileWriters) + + finishedRuns.Clear() + fileWriters.Clear() + + For Each progressEntry As KeyValuePair(Of Integer, JobContainer.ProgressEntry) In jobContainer.GetProgress() + sender.ReportProgress(100, New VectoProgress With {.Target = "ListBox", + .Message = String.Format("{0,-60} {1,8:P} {2,10:F2}s - {3}", + String.Format("{0} {1} {2}", progressEntry.Value.RunName, + progressEntry.Value.CycleName, + progressEntry.Value.RunSuffix), + progressEntry.Value.Progress, + progressEntry.Value.ExecTime/1000.0, + IIf(progressEntry.Value.Success, "Success", "Aborted"))}) + If (Not progressEntry.Value.Success) Then + sender.ReportProgress(100, + New VectoProgress _ + With {.Target = "ListBox", .Message = progressEntry.Value.Error.Message}) + End If + + Next + + For Each job As String In JobFileList + dim w as FileOutputWriter = new FileOutputWriter(job) + For Each entry as KeyValuePair(Of string, string) In _ + new Dictionary(Of string, string) _ + from {{w.XMLFullReportName, "XML Manufacturer Report"}, {w.XMLCustomerReportName, "Customer Report"}, + {w.XMLVTPReportName, "VTP Report"}} + If File.Exists(entry.Key) Then + sender.ReportProgress(100, New VectoProgress With {.Target = "ListBox", + .Message = + String.Format("{2} for '{0}' written to {1}", Path.GetFileName(job), + entry.Key, entry.Value), + .Link = "<XML>" + entry.Key}) + End If + Next + Next + + If File.Exists(sumFileWriter.SumFileName) Then + sender.ReportProgress(100, New VectoProgress With {.Target = "ListBox", + .Message = String.Format("Sum File written to {0}", sumFileWriter.SumFileName), + .Link = sumFileWriter.SumFileName}) + End If + + sender.ReportProgress(100, New VectoProgress With {.Target = "ListBox", + .Message = + String.Format("Simulation Finished in {0:0}s", (DateTime.Now() - start).TotalSeconds)}) + End Sub + + + Private Shared Sub PrintRuns(progress As Dictionary(Of Integer, JobContainer.ProgressEntry), + fileWriters As Dictionary(Of Integer, FileOutputWriter)) + For Each p As KeyValuePair(Of Integer, JobContainer.ProgressEntry) In progress + Dim modFilename As String = fileWriters(p.Key).GetModDataFileName(p.Value.RunName, p.Value.CycleName, + p.Value.RunSuffix + + If(Cfg.Mod1Hz, "_1Hz", "")) + + Dim runName As String = String.Format("{0} {1} {2}", p.Value.RunName, p.Value.CycleName, p.Value.RunSuffix) + + If Not p.Value.Error Is Nothing Then + VectoWorkerV3.ReportProgress(0, New VectoProgress With {.Target = "ListBoxError", + .Message = + String.Format("Finished Run {0} with ERROR: {1}", runName, + p.Value.Error.Message), + .Link = modFilename}) + Else + VectoWorkerV3.ReportProgress(0, + New VectoProgress _ + With {.Target = "ListBox", + .Message = String.Format("Finished Run {0} successfully.", runName)}) + End If + + If (File.Exists(modFilename)) Then + VectoWorkerV3.ReportProgress(0, New VectoProgress With {.Target = "ListBox", + .Message = + String.Format("Run {0}: Modal Results written to {1}", runName, + modFilename), .Link = modFilename + }) + End If + Next + End Sub + + Private Sub VectoWorkerV3_OnProgressChanged(sender As Object, e As ProgressChangedEventArgs) + Dim progress As VectoProgress = TryCast(e.UserState, VectoProgress) + If progress Is Nothing Then Exit Sub + + Select Case progress.Target + Case "ListBox" + If progress.Link Is Nothing Then + MsgToForm(MessageType.Normal, progress.Message, "", "") + Else + MsgToForm(MessageType.Normal, progress.Message, "", progress.Link) + End If + Case "ListBoxWarning" + MsgToForm(MessageType.Warn, progress.Message, "", "") + Return + Case "ListBoxError" + MsgToForm(MessageType.Err, progress.Message, "", "") + Return + Case "Status" + Status(progress.Message) + End Select + + ToolStripProgBarOverall.Value = e.ProgressPercentage + End Sub + + Private Sub VectoWorkerV3_OnRunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) + + 'Progbar reset + ToolStripProgBarOverall.Visible = False + ToolStripProgBarOverall.Style = ProgressBarStyle.Continuous + ToolStripProgBarOverall.Value = 0 + ProgSecStop() + + LvGEN.SelectedIndices.Clear() + + 'ShutDown when Unexpected Error + If e.Error IsNot Nothing Then + MsgBox("An Unexpected Error occurred!" & ChrW(10) & ChrW(10) & + e.Error.Message.ToString, MsgBoxStyle.Critical, "Unexpected Error") + LogFile.WriteToLog(MessageType.Err, ">>>Unexpected Error:" & e.Error.ToString()) + End If + + 'Options enable / GUI reset + LockGUI(False) + btStartV3.Text = "START" + btStartV3.Image = My.Resources.Play_icon + Status(_lastModeName & " Mode") + + 'SLEEP reactivate + AllowSleepOn() + End Sub + + + Private Sub ModeUpdate() + + 'Save lists + _jobListView.SaveList() + + 'GUI changes according to current mode + + If Cfg.DeclMode Then + _lastModeName = "Declaration" + Else + _lastModeName = "Engineering" + End If + + 'Update job counter + _genChecked = LvGEN.CheckedItems.Count + UpdateJobTabText() + + 'Status label + Status(_lastModeName & " Mode") + End Sub + + 'Class for ListView control - Job and cycle lists + Private Class FileListView + Private ReadOnly _filePath As String + Private _loadedDefault As Boolean + Public LVbox As ListView + + Public Sub New(path As String) + _filePath = path + _loadedDefault = False + End Sub + + Public Sub SaveList(Optional ByVal path As String = "") + Dim x As Integer + If path = "" Then + If Not _loadedDefault Then Exit Sub + path = _filePath + End If + Dim file As StreamWriter = My.Computer.FileSystem.OpenTextFileWriter(path, False, Encoding.UTF8) + For x = 1 To LVbox.Items.Count + file.WriteLine(String.Join("?", LVbox.Items(x - 1).SubItems(0).Text, + Math.Abs(CInt(LVbox.Items(x - 1).Checked)))) + Next + file.Close() + End Sub + + Public Sub LoadList(Optional ByVal path As String = "") + 'Dim line As String() + Dim noCheck As Boolean + 'Dim file As CsvFile + Dim listViewItem As ListViewItem + + If path = "" Then + path = _filePath + _loadedDefault = True + End If + + 'file = New CsvFile + + If Not File.Exists(path) Then + If Not _loadedDefault Then GUIMsg(MessageType.Err, "Cannot open file (" & path & ")!") + Exit Sub + End If + + MainForm._checkLock = True + LVbox.BeginUpdate() + + LVbox.Items.Clear() + + noCheck = False + Dim reader As TextFieldParser = New TextFieldParser(path, Encoding.Default) + reader.TextFieldType = FieldType.Delimited + reader.Delimiters = New String() {"?"} + + Do While Not reader.EndOfData + Dim line As String() = reader.ReadFields() + If Strings.Left(Trim(line(0)), 1) = "#" Then Continue Do + + listViewItem = New ListViewItem(line(0)) + listViewItem.SubItems.Add(" ") + + If noCheck Then + listViewItem.Checked = True + Else + If UBound(line) < 1 Then + noCheck = True + listViewItem.Checked = True + Else + If IsNumeric(line(1)) Then + listViewItem.Checked = CBool(line(1)) + Else + listViewItem.Checked = True + End If + End If + End If + LVbox.Items.Add(listViewItem) + Loop + + reader.Close() + + LVbox.EndUpdate() + MainForm._checkLock = False + + If LVbox.Items.Count > 0 Then LVbox.Items(LVbox.Items.Count - 1).EnsureVisible() + End Sub + End Class + + + 'Open Job Editor and open file (or new file) + Friend Sub OpenVECTOeditor(x As String) + + If x = "<New>" Then + ShowVectoJobForm() + VectoJobForm.VectoNew() + ElseIf x = "<VTP>" Then + ShowVectoEPTPJobForm() + VectoVTPJobForm.VectoNew() + Else + Try + Dim engJob As IVTPEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(x), + IVTPEngineeringInputDataProvider) + Dim declJob As IVTPDeclarationInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(x), + IVTPDeclarationInputDataProvider) + If engJob Is Nothing AndAlso declJob is Nothing Then + ShowVectoJobForm() + VectoJobForm.VECTOload2Form(x) + Else + ShowVectoEPTPJobForm() + VectoVTPJobForm.VECTOload2Form(x) + End If + Catch ex As Exception + MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Error loading Vecto Job File") + End Try + End If + + VectoJobForm.Activate() + End Sub + + Private Sub ShowVectoJobForm() + If Not VectoJobForm.Visible Then + VectoJobForm.Show() + Else + If VectoJobForm.WindowState = FormWindowState.Minimized Then _ + VectoJobForm.WindowState = FormWindowState.Normal + VectoJobForm.BringToFront() + End If + End Sub + + Private Sub ShowVectoEPTPJobForm() + If Not VectoVTPJobForm.Visible Then + VectoVTPJobForm.Show() + Else + If VectoVTPJobForm.WindowState = FormWindowState.Minimized Then _ + VectoVTPJobForm.WindowState = FormWindowState.Normal + VectoVTPJobForm.BringToFront() + End If + End Sub + + 'Save job and cycle file lists + Private Sub SaveFileLists() + _jobListView.SaveList() + 'If Cfg.BatchMode Then CycleListView.SaveList() + End Sub #Region "Progressbar controls" - 'Initialise progress bar (Start of next job in calculation) + 'Initialise progress bar (Start of next job in calculation) - 'Stop - Hide progress bar - Private Sub ProgSecStop() - TmProgSec.Stop() - ToolStripProgBarJob.Visible = False - ToolStripProgBarJob.Value = 0 - End Sub + 'Stop - Hide progress bar + Private Sub ProgSecStop() + TmProgSec.Stop() + ToolStripProgBarJob.Visible = False + ToolStripProgBarJob.Value = 0 + End Sub - 'Timer to update progress bar regularly - Private Sub TmProgSec_Tick(sender As Object, e As EventArgs) Handles TmProgSec.Tick - If _guItest.TestActive Then - Call _guItest.TestTick() - Exit Sub - Else - If Not ProgBarCtrl.ProgLock Then ProgSecUpdate() - End If - End Sub + 'Timer to update progress bar regularly + Private Sub TmProgSec_Tick(sender As Object, e As EventArgs) Handles TmProgSec.Tick + If _guItest.TestActive Then + Call _guItest.TestTick() + Exit Sub + Else + If Not ProgBarCtrl.ProgLock Then ProgSecUpdate() + End If + End Sub - 'Update progress bar (timer controlled) - Private Sub ProgSecUpdate() + 'Update progress bar (timer controlled) + Private Sub ProgSecUpdate() - With ProgBarCtrl + With ProgBarCtrl - If .ProgJobInt > 0 AndAlso ToolStripProgBarJob.Style = ProgressBarStyle.Marquee Then - ToolStripProgBarJob.Style = ProgressBarStyle.Continuous - End If + If .ProgJobInt > 0 AndAlso ToolStripProgBarJob.Style = ProgressBarStyle.Marquee Then + ToolStripProgBarJob.Style = ProgressBarStyle.Continuous + End If - If .ProgJobInt < 0 Then - .ProgJobInt = 0 - ElseIf .ProgJobInt > 100 Then - .ProgJobInt = 100 - End If + If .ProgJobInt < 0 Then + .ProgJobInt = 0 + ElseIf .ProgJobInt > 100 Then + .ProgJobInt = 100 + End If - ToolStripProgBarJob.Value = .ProgJobInt + ToolStripProgBarJob.Value = .ProgJobInt - If .ProgOverallStartInt > -1 Then - ToolStripProgBarOverall.Value = - CInt(.ProgOverallStartInt + (.PgroOverallEndInt - .ProgOverallStartInt) * .ProgJobInt / 100) - End If + If .ProgOverallStartInt > - 1 Then + ToolStripProgBarOverall.Value = + CInt(.ProgOverallStartInt + (.PgroOverallEndInt - .ProgOverallStartInt)*.ProgJobInt/100) + End If - End With - End Sub + End With + End Sub #End Region #Region "Options Tab" - 'Load options from config class - Public Sub LoadOptions() - ChBoxModOut.Checked = Cfg.ModOut - ChBoxMod1Hz.Checked = Cfg.Mod1Hz + 'Load options from config class + Public Sub LoadOptions() + ChBoxModOut.Checked = Cfg.ModOut + ChBoxMod1Hz.Checked = Cfg.Mod1Hz - RbDecl.Checked = Cfg.DeclMode + RbDecl.Checked = Cfg.DeclMode cbValidateRunData.Checked = cfg.ValidateRunData - End Sub + End Sub - 'Update config class from options in GUI, e.g. before running calculations - Private Sub SetOptions() - Cfg.ModOut = ChBoxModOut.Checked - Cfg.Mod1Hz = ChBoxMod1Hz.Checked + 'Update config class from options in GUI, e.g. before running calculations + Private Sub SetOptions() + Cfg.ModOut = ChBoxModOut.Checked + Cfg.Mod1Hz = ChBoxMod1Hz.Checked Cfg.ValidateRunData = cbValidateRunData.Checked - End Sub + End Sub #End Region - 'Add message to message list - Public Sub MsgToForm(id As MessageType, msg As String, source As String, link As String) - - If (InvokeRequired) Then - 'Me.Invoke(New MsgToFormDelegate(AddressOf MSGtoForm), ID, Msg, Source, Link) - Exit Sub - End If - Dim lv0 As ListViewItem - - lv0 = New ListViewItem - lv0.Text = msg - lv0.SubItems.Add(Now.ToString("HH:mm:ss.ff")) - lv0.SubItems.Add(source) - - If LvMsg.Items.Count > 9999 Then LvMsg.Items.RemoveAt(0) - - LogFile.WriteToLog(id, msg & vbTab & source) - - Select Case id - - Case MessageType.Err - - lv0.BackColor = Color.Red - lv0.ForeColor = Color.White - - Case MessageType.Warn - - lv0.BackColor = Color.Khaki 'FromArgb(218, 125, 0) 'DarkOrange - lv0.ForeColor = Color.Black - - Case Else - - If id = MessageType.NewJob Then - lv0.BackColor = Color.LightGray - lv0.ForeColor = Color.DarkBlue - End If - - End Select - - If link <> "" Then - If Not id = MessageType.Err Then lv0.ForeColor = Color.Blue - lv0.SubItems(0).Font = New Font(LvMsg.Font, FontStyle.Underline) - lv0.Tag = link - End If - - - LvMsg.Items.Add(lv0) - - lv0.EnsureVisible() - End Sub - - - 'Open link in message list - Private Sub LvMsg_MouseClick(sender As Object, e As MouseEventArgs) Handles LvMsg.MouseClick - Dim txt As String - If LvMsg.SelectedIndices.Count > 0 Then - If Not LvMsg.SelectedItems(0).Tag Is Nothing Then - If _ - Len(CStr(LvMsg.SelectedItems(0).Tag)) > 4 AndAlso - Microsoft.VisualBasic.Left(CStr(LvMsg.SelectedItems(0).Tag), 4) = "<UM>" Then - txt = CStr(LvMsg.SelectedItems(0).Tag).Replace("<UM>", MyAppPath & "User Manual") - txt = txt.Replace(" ", "%20") - txt = txt.Replace("\", "/") - txt = "file:///" & txt - Try - Process.Start(txt) - Catch ex As Exception - MsgBox("Cannot open link! (-_-;)") - End Try - ElseIf _ - Len(CStr(LvMsg.SelectedItems(0).Tag)) > 5 AndAlso - Microsoft.VisualBasic.Left(CStr(LvMsg.SelectedItems(0).Tag), 5) = "<GUI>" Then - txt = CStr(LvMsg.SelectedItems(0).Tag).Replace("<GUI>", "") - OpenVectoFile(txt) - ElseIf _ - Len(CStr(LvMsg.SelectedItems(0).Tag)) > 5 AndAlso - Microsoft.VisualBasic.Left(CStr(LvMsg.SelectedItems(0).Tag), 5) = "<RUN>" Then - txt = CStr(LvMsg.SelectedItems(0).Tag).Replace("<RUN>", "") - Try - Process.Start(txt) - Catch ex As Exception - GUIMsg(MessageType.Err, "Could not run '" & txt & "'!") - End Try - ElseIf _ - Len(CStr(LvMsg.SelectedItems(0).Tag)) > 5 AndAlso - Microsoft.VisualBasic.Left(CStr(LvMsg.SelectedItems(0).Tag), 5) = "<XML>" Then - txt = CStr(LvMsg.SelectedItems(0).Tag).Replace("<XML>", "") - OpenFiles(txt) - Else - OpenFiles(CStr(LvMsg.SelectedItems(0).Tag)) - End If - End If - End If - End Sub - - 'Link-cursor (Hand) for links - Private Sub LvMsg_MouseMove(sender As Object, e As MouseEventArgs) Handles LvMsg.MouseMove - Dim lv0 As ListViewItem - lv0 = LvMsg.GetItemAt(e.Location.X, e.Location.Y) - If lv0 Is Nothing OrElse lv0.Tag Is Nothing Then - LvMsg.Cursor = Cursors.Arrow - Else - LvMsg.Cursor = Cursors.Hand - End If - If _mouseDownOnListView Then - Try - LvMsg.HitTest(e.Location).Item.Selected = True - Catch - End Try - End If - End Sub + 'Add message to message list + Public Sub MsgToForm(id As MessageType, msg As String, source As String, link As String) + + If (InvokeRequired) Then + 'Me.Invoke(New MsgToFormDelegate(AddressOf MSGtoForm), ID, Msg, Source, Link) + Exit Sub + End If + Dim lv0 As ListViewItem + + lv0 = New ListViewItem + lv0.Text = msg + lv0.SubItems.Add(Now.ToString("HH:mm:ss.ff")) + lv0.SubItems.Add(source) + + If LvMsg.Items.Count > 9999 Then LvMsg.Items.RemoveAt(0) + + LogFile.WriteToLog(id, msg & vbTab & source) + + Select Case id + + Case MessageType.Err + + lv0.BackColor = Color.Red + lv0.ForeColor = Color.White + + Case MessageType.Warn + + lv0.BackColor = Color.Khaki 'FromArgb(218, 125, 0) 'DarkOrange + lv0.ForeColor = Color.Black + + Case Else + + If id = MessageType.NewJob Then + lv0.BackColor = Color.LightGray + lv0.ForeColor = Color.DarkBlue + End If + + End Select + + If link <> "" Then + If Not id = MessageType.Err Then lv0.ForeColor = Color.Blue + lv0.SubItems(0).Font = New Font(LvMsg.Font, FontStyle.Underline) + lv0.Tag = link + End If + + + LvMsg.Items.Add(lv0) + + lv0.EnsureVisible() + End Sub + + + 'Open link in message list + Private Sub LvMsg_MouseClick(sender As Object, e As MouseEventArgs) Handles LvMsg.MouseClick + Dim txt As String + If LvMsg.SelectedIndices.Count > 0 Then + If Not LvMsg.SelectedItems(0).Tag Is Nothing Then + If _ + Len(CStr(LvMsg.SelectedItems(0).Tag)) > 4 AndAlso + Microsoft.VisualBasic.Left(CStr(LvMsg.SelectedItems(0).Tag), 4) = "<UM>" Then + txt = CStr(LvMsg.SelectedItems(0).Tag).Replace("<UM>", MyAppPath & "User Manual") + txt = txt.Replace(" ", "%20") + txt = txt.Replace("\", "/") + txt = "file:///" & txt + Try + Process.Start(txt) + Catch ex As Exception + MsgBox("Cannot open link! (-_-;)") + End Try + ElseIf _ + Len(CStr(LvMsg.SelectedItems(0).Tag)) > 5 AndAlso + Microsoft.VisualBasic.Left(CStr(LvMsg.SelectedItems(0).Tag), 5) = "<GUI>" Then + txt = CStr(LvMsg.SelectedItems(0).Tag).Replace("<GUI>", "") + OpenVectoFile(txt) + ElseIf _ + Len(CStr(LvMsg.SelectedItems(0).Tag)) > 5 AndAlso + Microsoft.VisualBasic.Left(CStr(LvMsg.SelectedItems(0).Tag), 5) = "<RUN>" Then + txt = CStr(LvMsg.SelectedItems(0).Tag).Replace("<RUN>", "") + Try + Process.Start(txt) + Catch ex As Exception + GUIMsg(MessageType.Err, "Could not run '" & txt & "'!") + End Try + ElseIf _ + Len(CStr(LvMsg.SelectedItems(0).Tag)) > 5 AndAlso + Microsoft.VisualBasic.Left(CStr(LvMsg.SelectedItems(0).Tag), 5) = "<XML>" Then + txt = CStr(LvMsg.SelectedItems(0).Tag).Replace("<XML>", "") + OpenFiles(txt) + Else + OpenFiles(CStr(LvMsg.SelectedItems(0).Tag)) + End If + End If + End If + End Sub + + 'Link-cursor (Hand) for links + Private Sub LvMsg_MouseMove(sender As Object, e As MouseEventArgs) Handles LvMsg.MouseMove + Dim lv0 As ListViewItem + lv0 = LvMsg.GetItemAt(e.Location.X, e.Location.Y) + If lv0 Is Nothing OrElse lv0.Tag Is Nothing Then + LvMsg.Cursor = Cursors.Arrow + Else + LvMsg.Cursor = Cursors.Hand + End If + If _mouseDownOnListView Then + Try + LvMsg.HitTest(e.Location).Item.Selected = True + Catch + End Try + End If + End Sub #Region "Open File Context Menu" - Private _contextMenuFiles As String() + Private _contextMenuFiles As String() - 'Initialise and open context menu - Private Sub OpenFiles(ParamArray files() As String) + 'Initialise and open context menu + Private Sub OpenFiles(ParamArray files() As String) - If files.Length = 0 Then Exit Sub + If files.Length = 0 Then Exit Sub - _contextMenuFiles = files + _contextMenuFiles = files - OpenInGraphWindowToolStripMenuItem.Enabled = (UCase(GetExtension(_contextMenuFiles(0))) = ".VMOD") + OpenInGraphWindowToolStripMenuItem.Enabled = (UCase(GetExtension(_contextMenuFiles(0))) = ".VMOD") - OpenWithToolStripMenuItem.Text = "Open with " & Cfg.OpenCmdName + OpenWithToolStripMenuItem.Text = "Open with " & Cfg.OpenCmdName - CmOpenFile.Show(Cursor.Position) - End Sub + CmOpenFile.Show(Cursor.Position) + End Sub - 'Open with tool defined in Settings - Private Sub OpenWithToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles OpenWithToolStripMenuItem.Click - If Not FileOpenAlt(_contextMenuFiles(0)) Then MsgBox("Failed to open file!") - End Sub + 'Open with tool defined in Settings + Private Sub OpenWithToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles OpenWithToolStripMenuItem.Click + If Not FileOpenAlt(_contextMenuFiles(0)) Then MsgBox("Failed to open file!") + End Sub - Private Sub OpenInGraphWindowToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles OpenInGraphWindowToolStripMenuItem.Click - Dim graphForm As New GraphForm - graphForm.Show() - graphForm.LoadNewFile(_contextMenuFiles(0)) - End Sub + Private Sub OpenInGraphWindowToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles OpenInGraphWindowToolStripMenuItem.Click + Dim graphForm As New GraphForm + graphForm.Show() + graphForm.LoadNewFile(_contextMenuFiles(0)) + End Sub - 'Show in folder - Private Sub ShowInFolderToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles ShowInFolderToolStripMenuItem.Click - If File.Exists(_contextMenuFiles(0)) Then - Try - Process.Start("explorer", "/select,""" & _contextMenuFiles(0) & "") - Catch ex As Exception - MsgBox("Failed to open file!") - End Try - Else - MsgBox("File not found!") - End If - End Sub + 'Show in folder + Private Sub ShowInFolderToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles ShowInFolderToolStripMenuItem.Click + If File.Exists(_contextMenuFiles(0)) Then + Try + Process.Start("explorer", "/select,""" & _contextMenuFiles(0) & "") + Catch ex As Exception + MsgBox("Failed to open file!") + End Try + Else + MsgBox("File not found!") + End If + End Sub #End Region - 'Change Declaraion Mode - Private Sub RbDecl_CheckedChanged(sender As Object, e As EventArgs) Handles RbDecl.CheckedChanged - If _cbDeclLock Then Exit Sub + 'Change Declaraion Mode + Private Sub RbDecl_CheckedChanged(sender As Object, e As EventArgs) Handles RbDecl.CheckedChanged + If _cbDeclLock Then Exit Sub - If VectoJobForm.Visible Or VehicleForm.Visible Or GearboxForm.Visible Or EngineForm.Visible Then - _cbDeclLock = True - RbDecl.Checked = Not RbDecl.Checked - _cbDeclLock = False - MsgBox("Please close all dialog windows (e.g. Job Editor) before changing mode!") - Else - Cfg.DeclMode = RbDecl.Checked - RbDev.Checked = Not RbDecl.Checked - DeclOnOff() - End If - End Sub + If VectoJobForm.Visible Or VehicleForm.Visible Or GearboxForm.Visible Or EngineForm.Visible Then + _cbDeclLock = True + RbDecl.Checked = Not RbDecl.Checked + _cbDeclLock = False + MsgBox("Please close all dialog windows (e.g. Job Editor) before changing mode!") + Else + Cfg.DeclMode = RbDecl.Checked + RbDev.Checked = Not RbDecl.Checked + DeclOnOff() + End If + End Sub #Region "GUI Tests" - Private ReadOnly _guItest As New GUItest(Me) - Private _mouseDownOnListView As Boolean - - Private Class GUItest - Private Const RowLim As Integer = 9 - Private Const ColLim As Integer = 45 - Public TestActive As Boolean = False - Private _testAborted As Boolean - Private _xCtrl As Integer - Private _xPanel As Integer - Private _scr As Integer - Private _pRbAlt As Boolean - Private ReadOnly _ctrls(RowLim + 1) As Integer - Private ReadOnly _pnls(RowLim + 1) As Integer - Private _ctrlC As Integer - Private _ctrlCl As Integer - Private _pnDir As Integer - Private _pnDirC As Integer - Private _pnDirCl As Integer - Private _pnDirRnd As Integer - Private _ctrlRnd As Integer - Private _diffC As Integer - Private _diffLvl As Integer - Private _bInit As Integer - Private ReadOnly _mainForm As MainForm - Private ReadOnly _keyCode As List(Of Integer) - - Private Sub TestRun() - - Dim z As Integer - - _xPanel = ColLim - 10 - _xCtrl = ColLim - 10 - _pRbAlt = False - _scr = 0 - _pnDir = 0 - _pnDirCl = 10 - _pnDirC = 0 ' StrDirCL - _ctrlCl = 5 - _ctrlC = _ctrlCl - _pnDirRnd = 5 - _ctrlRnd = 8 - _diffC = 0 - _diffLvl = 1 - _bInit = 0 - _testAborted = False - Randomize() - - - _mainForm.LvMsg.Items.Clear() - _mainForm.ToolStripLbStatus.Text = "Score: 0000 Press <Esc> to Quit" - - For z = 1 To RowLim - 6 - _pRbAlt = Not _pRbAlt - If Not _pRbAlt Then - _mainForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| |*") - Else - _mainForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| | |*") - End If - Next - - _pRbAlt = False - - _mainForm.LvMsg.Items.Add(" VECTO Interactive Mode" & Space(ColLim - 35) & "*| |*") - _mainForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| | |*") - _mainForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| |*") - _mainForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| | |*") - _mainForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| |*") - _mainForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| ∆ |*") - - For z = 1 To RowLim + 1 - _pnls(z) = ColLim - 10 - _ctrls(z) = 0 - Next - - _mainForm.TmProgSec.Interval = 200 - - _mainForm.LvMsg.Focus() - - _mainForm.TmProgSec.Start() - End Sub - - Public Sub TestStop() - _mainForm.TmProgSec.Stop() - TestActive = False - _mainForm.LvMsg.Items.Clear() - _ctrlC = 0 - _mainForm.ToolStripLbStatus.Text = _mainForm._lastModeName & " Mode" - End Sub - - Public Sub TestTick() - - If _bInit = 24 Then GoTo LbRace - _bInit += 1 - - Select Case _bInit - Case 10 - _mainForm.LvMsg.Items.RemoveAt(RowLim - 6) - _mainForm.LvMsg.Items.RemoveAt(RowLim - 5) - _mainForm.LvMsg.Items.Insert(RowLim - 6, Space(ColLim - 11) & "*| |*") - _mainForm.LvMsg.Items.Insert(RowLim - 4, Space(ColLim - 30) & " 3 " & Space(10) & "*| |*") - Case 14 - _mainForm.LvMsg.Items.RemoveAt(RowLim - 4) - _mainForm.LvMsg.Items.Insert(RowLim - 4, Space(ColLim - 30) & " 2 " & Space(10) & "*| |*") - Case 18 - _mainForm.LvMsg.Items.RemoveAt(RowLim - 4) - _mainForm.LvMsg.Items.Insert(RowLim - 4, Space(ColLim - 30) & " 1 " & Space(10) & "*| |*") - Case 22 - _mainForm.LvMsg.Items.RemoveAt(RowLim - 4) - _mainForm.LvMsg.Items.Insert(RowLim - 4, Space(ColLim - 30) & " Go! " & Space(10) & "*| |*") - Case 24 - _mainForm.LvMsg.Items.RemoveAt(RowLim - 4) - _mainForm.LvMsg.Items.Insert(RowLim - 4, Space(ColLim - 30) & " " & Space(10) & "*| |*") - End Select - Exit Sub -LbRace: - - _pRbAlt = Not _pRbAlt - - _mainForm.LvMsg.BeginUpdate() - - Lists() - - Align() - - SetCtrl() - - SetPanel() - - _mainForm.LvMsg.Items.RemoveAt(RowLim) - - UpdateCtrl() - - _mainForm.LvMsg.EndUpdate() - - If Math.Abs(_xCtrl - _pnls(2)) > 4 Then - Abort() - Exit Sub - ElseIf _ctrls(2) <> 0 Then - If _xCtrl = _pnls(2) + _ctrls(2) - 4 Then - Abort() - Exit Sub - End If - _scr += 5 * _diffLvl - End If - - _scr += _diffLvl - _diffC += 1 - - 'Erhöhe Schwierigkeitsgrad - If _diffC = (_diffLvl + 3) * 4 Then - _diffC = 0 - _diffLvl += 1 - If _diffLvl > 2 And _diffLvl < 7 Then _mainForm.TmProgSec.Interval = 300 - (_diffLvl) * 30 - _scr += 100 - Select Case _diffLvl - Case 3 - _pnDirCl = 3 - _ctrlCl = 4 - _ctrlRnd = 6 - Case 5 - _pnDirCl = 2 - _pnDirRnd = 4 - Case 8 - _ctrlCl = 2 - Case 10 - _ctrlRnd = 4 - _pnDirRnd = 3 - End Select - End If - End Sub - - Public Sub TestKey(key As Integer) - - If TestActive Then - Select Case key - Case Keys.Left - _xCtrl -= 1 - UpdateCtrl() - Case Keys.Right - _xCtrl += 1 - UpdateCtrl() - Case Keys.Escape - TestStop() - End Select - Else - - If _keyCode(_ctrlC) = key Then - _ctrlC += 1 - If _ctrlC = _keyCode.Count Then - TestActive = True - TestRun() - End If - Else - _ctrlC = 0 - End If - - End If - End Sub - - Private Sub Abort() - - Dim s As String, s1 As String - - If _testAborted Then Exit Sub - - _testAborted = True - - _mainForm.TmProgSec.Stop() - - _mainForm.LvMsg.BeginUpdate() - - s = _mainForm.LvMsg.Items(0).Text - _mainForm.LvMsg.Items.RemoveAt(0) - _mainForm.LvMsg.Items.Insert(0, "You crashed!" & Microsoft.VisualBasic.Right(s, Len(s) - 12)) - - s = _mainForm.LvMsg.Items(1).Text - s1 = "Score: " & _scr & " " - _mainForm.LvMsg.Items.RemoveAt(1) - _mainForm.LvMsg.Items.Insert(1, s1 & Microsoft.VisualBasic.Right(s, Len(s) - Len(s1))) - - _mainForm.LvMsg.EndUpdate() - - LogFile.WriteToLog(MessageType.Normal, "*** Race Score: " & _scr.ToString("0000") & " ***") - - _ctrlC = 0 - TestActive = False - - _mainForm.ToolStripLbStatus.Text = _mainForm._lastModeName & " Mode" - End Sub - - Private Sub SetCtrl() - Dim x As Integer - If _scr < 10 Then Exit Sub - _ctrls(RowLim + 1) = 0 - _ctrlC += 1 - If _ctrlC < _ctrlCl Then Exit Sub - Select Case CInt(Int((_ctrlRnd * Rnd()) + 1)) - Case 1, 2 - _ctrlC = 0 - x = CInt(Int((7 * Rnd()) + 1)) - _ctrls(RowLim + 1) = x - End Select - End Sub - - Private Sub UpdateCtrl() - Dim s As String - If _bInit < 21 Then - _xCtrl = ColLim - 10 - Exit Sub - End If - If Math.Abs(_xCtrl - _pnls(1)) > 5 Then - Abort() - Exit Sub - End If - s = Replace(_mainForm.LvMsg.Items(RowLim - 1).Text.ToString, "∆", " ") & " " - s = Microsoft.VisualBasic.Left(s, ColLim + 15) - 's = s.Remove(0, 20) - 's = "Press <Esc> to Quit " & s - If Mid(s, _xCtrl + 5, 1) = "X" Then - Abort() - Exit Sub - End If - s = s.Remove(_xCtrl + 4, 1) - 's = Trim(s.Insert(xCar + 4, "∆")) & Space(ColLim + 5 - Streets(2)) & "Pts: " & Pts & " Lv: " & DiffLvl - s = Space(_pnls(2) - 1) & Trim(s.Insert(_xCtrl + 4, "∆")) - _mainForm.LvMsg.Items.RemoveAt(RowLim - 1) - _mainForm.LvMsg.Items.Insert(RowLim - 1, s) - _mainForm.ToolStripLbStatus.Text = "Score: " & _scr.ToString("0000") & " Press <Esc> to Quit" - End Sub - - Private Sub SetPanel() - Dim s As String - s = "*| | |*" - If _pRbAlt Then - s = s.Remove(5, 1) - s = s.Insert(5, " ") - End If - If _ctrls(RowLim + 1) <> 0 Then - s = s.Remove(_ctrls(RowLim + 1) + 1, 1) - s = s.Insert(_ctrls(RowLim + 1) + 1, "X") - End If - Select Case _xPanel - _pnls(RowLim) - Case -1 - s = Replace(s, "|", "\") - Case 1 - s = Replace(s, "|", "/") - End Select - _mainForm.LvMsg.Items.Insert(0, Space(_xPanel - 1) & s) - End Sub - - Private Sub Align() - _pnDirC += 1 - If _pnDirC < _pnDirCl Then GoTo Lb1 - _pnDirC = 0 - Select Case CInt(Int((_pnDirRnd * Rnd()) + 1)) - Case 1 - _pnDir = 1 - Case 2 - _pnDir = -1 - Case Else - _pnDir = 0 - End Select -Lb1: - _xPanel += _pnDir - If _xPanel > ColLim Then - _xPanel = ColLim - ElseIf _xPanel < 22 Then - _xPanel = 22 - End If - _pnls(RowLim + 1) = _xPanel - End Sub - - Private Sub Lists() - Dim x As Integer - For x = 2 To RowLim + 1 - _ctrls(x - 1) = _ctrls(x) - _pnls(x - 1) = _pnls(x) - Next - End Sub - - Public Sub New(form As MainForm) - _mainForm = form - _keyCode = New List(Of Integer) - _keyCode.Add(Keys.Up) - _keyCode.Add(Keys.Up) - _keyCode.Add(Keys.Down) - _keyCode.Add(Keys.Down) - _keyCode.Add(Keys.Left) - _keyCode.Add(Keys.Right) - _keyCode.Add(Keys.Left) - _keyCode.Add(Keys.Right) - _keyCode.Add(Keys.B) - _keyCode.Add(Keys.A) - _ctrlC = 0 - End Sub - End Class - - Private Sub LvMsg_KeyDown(sender As Object, e As KeyEventArgs) Handles LvMsg.KeyDown - _guItest.TestKey(e.KeyValue) - If _guItest.TestActive Then e.SuppressKeyPress = True - End Sub - - Private Sub LvMsg_LostFocus(sender As Object, e As EventArgs) Handles LvMsg.LostFocus - If _guItest.TestActive Then _guItest.TestStop() - End Sub + Private ReadOnly _guItest As New GUItest(Me) + Private _mouseDownOnListView As Boolean + + Private Class GUItest + Private Const RowLim As Integer = 9 + Private Const ColLim As Integer = 45 + Public TestActive As Boolean = False + Private _testAborted As Boolean + Private _xCtrl As Integer + Private _xPanel As Integer + Private _scr As Integer + Private _pRbAlt As Boolean + Private ReadOnly _ctrls(RowLim + 1) As Integer + Private ReadOnly _pnls(RowLim + 1) As Integer + Private _ctrlC As Integer + Private _ctrlCl As Integer + Private _pnDir As Integer + Private _pnDirC As Integer + Private _pnDirCl As Integer + Private _pnDirRnd As Integer + Private _ctrlRnd As Integer + Private _diffC As Integer + Private _diffLvl As Integer + Private _bInit As Integer + Private ReadOnly _mainForm As MainForm + Private ReadOnly _keyCode As List(Of Integer) + + Private Sub TestRun() + + Dim z As Integer + + _xPanel = ColLim - 10 + _xCtrl = ColLim - 10 + _pRbAlt = False + _scr = 0 + _pnDir = 0 + _pnDirCl = 10 + _pnDirC = 0 ' StrDirCL + _ctrlCl = 5 + _ctrlC = _ctrlCl + _pnDirRnd = 5 + _ctrlRnd = 8 + _diffC = 0 + _diffLvl = 1 + _bInit = 0 + _testAborted = False + Randomize() + + + _mainForm.LvMsg.Items.Clear() + _mainForm.ToolStripLbStatus.Text = "Score: 0000 Press <Esc> to Quit" + + For z = 1 To RowLim - 6 + _pRbAlt = Not _pRbAlt + If Not _pRbAlt Then + _mainForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| |*") + Else + _mainForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| | |*") + End If + Next + + _pRbAlt = False + + _mainForm.LvMsg.Items.Add(" VECTO Interactive Mode" & Space(ColLim - 35) & "*| |*") + _mainForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| | |*") + _mainForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| |*") + _mainForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| | |*") + _mainForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| |*") + _mainForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| ∆ |*") + + For z = 1 To RowLim + 1 + _pnls(z) = ColLim - 10 + _ctrls(z) = 0 + Next + + _mainForm.TmProgSec.Interval = 200 + + _mainForm.LvMsg.Focus() + + _mainForm.TmProgSec.Start() + End Sub + + Public Sub TestStop() + _mainForm.TmProgSec.Stop() + TestActive = False + _mainForm.LvMsg.Items.Clear() + _ctrlC = 0 + _mainForm.ToolStripLbStatus.Text = _mainForm._lastModeName & " Mode" + End Sub + + Public Sub TestTick() + + If _bInit = 24 Then GoTo LbRace + _bInit += 1 + + Select Case _bInit + Case 10 + _mainForm.LvMsg.Items.RemoveAt(RowLim - 6) + _mainForm.LvMsg.Items.RemoveAt(RowLim - 5) + _mainForm.LvMsg.Items.Insert(RowLim - 6, Space(ColLim - 11) & "*| |*") + _mainForm.LvMsg.Items.Insert(RowLim - 4, + Space(ColLim - 30) & " 3 " & Space(10) & "*| |*") + Case 14 + _mainForm.LvMsg.Items.RemoveAt(RowLim - 4) + _mainForm.LvMsg.Items.Insert(RowLim - 4, + Space(ColLim - 30) & " 2 " & Space(10) & "*| |*") + Case 18 + _mainForm.LvMsg.Items.RemoveAt(RowLim - 4) + _mainForm.LvMsg.Items.Insert(RowLim - 4, + Space(ColLim - 30) & " 1 " & Space(10) & "*| |*") + Case 22 + _mainForm.LvMsg.Items.RemoveAt(RowLim - 4) + _mainForm.LvMsg.Items.Insert(RowLim - 4, + Space(ColLim - 30) & " Go! " & Space(10) & "*| |*") + Case 24 + _mainForm.LvMsg.Items.RemoveAt(RowLim - 4) + _mainForm.LvMsg.Items.Insert(RowLim - 4, + Space(ColLim - 30) & " " & Space(10) & "*| |*") + End Select + Exit Sub + LbRace: + + _pRbAlt = Not _pRbAlt + + _mainForm.LvMsg.BeginUpdate() + + Lists() + + Align() + + SetCtrl() + + SetPanel() + + _mainForm.LvMsg.Items.RemoveAt(RowLim) + + UpdateCtrl() + + _mainForm.LvMsg.EndUpdate() + + If Math.Abs(_xCtrl - _pnls(2)) > 4 Then + Abort() + Exit Sub + ElseIf _ctrls(2) <> 0 Then + If _xCtrl = _pnls(2) + _ctrls(2) - 4 Then + Abort() + Exit Sub + End If + _scr += 5*_diffLvl + End If + + _scr += _diffLvl + _diffC += 1 + + 'Erhöhe Schwierigkeitsgrad + If _diffC = (_diffLvl + 3)*4 Then + _diffC = 0 + _diffLvl += 1 + If _diffLvl > 2 And _diffLvl < 7 Then _mainForm.TmProgSec.Interval = 300 - (_diffLvl)*30 + _scr += 100 + Select Case _diffLvl + Case 3 + _pnDirCl = 3 + _ctrlCl = 4 + _ctrlRnd = 6 + Case 5 + _pnDirCl = 2 + _pnDirRnd = 4 + Case 8 + _ctrlCl = 2 + Case 10 + _ctrlRnd = 4 + _pnDirRnd = 3 + End Select + End If + End Sub + + Public Sub TestKey(key As Integer) + + If TestActive Then + Select Case key + Case Keys.Left + _xCtrl -= 1 + UpdateCtrl() + Case Keys.Right + _xCtrl += 1 + UpdateCtrl() + Case Keys.Escape + TestStop() + End Select + Else + + If _keyCode(_ctrlC) = key Then + _ctrlC += 1 + If _ctrlC = _keyCode.Count Then + TestActive = True + TestRun() + End If + Else + _ctrlC = 0 + End If + + End If + End Sub + + Private Sub Abort() + + Dim s As String, s1 As String + + If _testAborted Then Exit Sub + + _testAborted = True + + _mainForm.TmProgSec.Stop() + + _mainForm.LvMsg.BeginUpdate() + + s = _mainForm.LvMsg.Items(0).Text + _mainForm.LvMsg.Items.RemoveAt(0) + _mainForm.LvMsg.Items.Insert(0, "You crashed!" & Microsoft.VisualBasic.Right(s, Len(s) - 12)) + + s = _mainForm.LvMsg.Items(1).Text + s1 = "Score: " & _scr & " " + _mainForm.LvMsg.Items.RemoveAt(1) + _mainForm.LvMsg.Items.Insert(1, s1 & Microsoft.VisualBasic.Right(s, Len(s) - Len(s1))) + + _mainForm.LvMsg.EndUpdate() + + LogFile.WriteToLog(MessageType.Normal, "*** Race Score: " & _scr.ToString("0000") & " ***") + + _ctrlC = 0 + TestActive = False + + _mainForm.ToolStripLbStatus.Text = _mainForm._lastModeName & " Mode" + End Sub + + Private Sub SetCtrl() + Dim x As Integer + If _scr < 10 Then Exit Sub + _ctrls(RowLim + 1) = 0 + _ctrlC += 1 + If _ctrlC < _ctrlCl Then Exit Sub + Select Case CInt(Int((_ctrlRnd*Rnd()) + 1)) + Case 1, 2 + _ctrlC = 0 + x = CInt(Int((7*Rnd()) + 1)) + _ctrls(RowLim + 1) = x + End Select + End Sub + + Private Sub UpdateCtrl() + Dim s As String + If _bInit < 21 Then + _xCtrl = ColLim - 10 + Exit Sub + End If + If Math.Abs(_xCtrl - _pnls(1)) > 5 Then + Abort() + Exit Sub + End If + s = Replace(_mainForm.LvMsg.Items(RowLim - 1).Text.ToString, "∆", " ") & " " + s = Microsoft.VisualBasic.Left(s, ColLim + 15) + 's = s.Remove(0, 20) + 's = "Press <Esc> to Quit " & s + If Mid(s, _xCtrl + 5, 1) = "X" Then + Abort() + Exit Sub + End If + s = s.Remove(_xCtrl + 4, 1) + 's = Trim(s.Insert(xCar + 4, "∆")) & Space(ColLim + 5 - Streets(2)) & "Pts: " & Pts & " Lv: " & DiffLvl + s = Space(_pnls(2) - 1) & Trim(s.Insert(_xCtrl + 4, "∆")) + _mainForm.LvMsg.Items.RemoveAt(RowLim - 1) + _mainForm.LvMsg.Items.Insert(RowLim - 1, s) + _mainForm.ToolStripLbStatus.Text = "Score: " & _scr.ToString("0000") & " Press <Esc> to Quit" + End Sub + + Private Sub SetPanel() + Dim s As String + s = "*| | |*" + If _pRbAlt Then + s = s.Remove(5, 1) + s = s.Insert(5, " ") + End If + If _ctrls(RowLim + 1) <> 0 Then + s = s.Remove(_ctrls(RowLim + 1) + 1, 1) + s = s.Insert(_ctrls(RowLim + 1) + 1, "X") + End If + Select Case _xPanel - _pnls(RowLim) + Case - 1 + s = Replace(s, "|", "\") + Case 1 + s = Replace(s, "|", "/") + End Select + _mainForm.LvMsg.Items.Insert(0, Space(_xPanel - 1) & s) + End Sub + + Private Sub Align() + _pnDirC += 1 + If _pnDirC < _pnDirCl Then GoTo Lb1 + _pnDirC = 0 + Select Case CInt(Int((_pnDirRnd*Rnd()) + 1)) + Case 1 + _pnDir = 1 + Case 2 + _pnDir = - 1 + Case Else + _pnDir = 0 + End Select + Lb1: + _xPanel += _pnDir + If _xPanel > ColLim Then + _xPanel = ColLim + ElseIf _xPanel < 22 Then + _xPanel = 22 + End If + _pnls(RowLim + 1) = _xPanel + End Sub + + Private Sub Lists() + Dim x As Integer + For x = 2 To RowLim + 1 + _ctrls(x - 1) = _ctrls(x) + _pnls(x - 1) = _pnls(x) + Next + End Sub + + Public Sub New(form As MainForm) + _mainForm = form + _keyCode = New List(Of Integer) + _keyCode.Add(Keys.Up) + _keyCode.Add(Keys.Up) + _keyCode.Add(Keys.Down) + _keyCode.Add(Keys.Down) + _keyCode.Add(Keys.Left) + _keyCode.Add(Keys.Right) + _keyCode.Add(Keys.Left) + _keyCode.Add(Keys.Right) + _keyCode.Add(Keys.B) + _keyCode.Add(Keys.A) + _ctrlC = 0 + End Sub + End Class + + Private Sub LvMsg_KeyDown(sender As Object, e As KeyEventArgs) Handles LvMsg.KeyDown + _guItest.TestKey(e.KeyValue) + If _guItest.TestActive Then e.SuppressKeyPress = True + End Sub + + Private Sub LvMsg_LostFocus(sender As Object, e As EventArgs) Handles LvMsg.LostFocus + If _guItest.TestActive Then _guItest.TestStop() + End Sub #End Region - Private Sub LvMsg_KeyUp(sender As Object, e As KeyEventArgs) Handles LvMsg.KeyUp - If (e.Control And e.KeyCode = Keys.C) Then - Dim builder As StringBuilder = New StringBuilder() - For Each selectedItem As ListViewItem In LvMsg.SelectedItems - builder.AppendLine(String.Join(", ", - selectedItem.SubItems.Cast(Of ListViewItem.ListViewSubItem).Select( - Function(item) item.Text))) - Next - Clipboard.SetText(builder.ToString()) - End If - End Sub - - Private Sub LvMsg_MouseDown(sender As Object, e As MouseEventArgs) Handles LvMsg.MouseDown - _mouseDownOnListView = True - End Sub - - Private Sub LvMsg_MouseUp(sender As Object, e As MouseEventArgs) Handles LvMsg.MouseUp - _mouseDownOnListView = False - End Sub - - Private Sub RbDev_CheckedChanged(sender As Object, e As EventArgs) Handles RbDev.CheckedChanged - End Sub - - - Private Class VectoProgress - Public Target As String - Public Message As String - Public Link As String - End Class - - Private Sub btnExportXML_Click(sender As Object, e As EventArgs) Handles btnExportXML.Click - - If LvGEN.SelectedItems.Count < 1 Then - If LvGEN.Items.Count = 1 Then - LvGEN.Items(0).Selected = True - Else - Exit Sub - End If - End If - - Dim f As String = LvGEN.SelectedItems(0).SubItems(0).Text - f = FileRepl(f) - If Not File.Exists(f) Then - MsgBox(f & " not found!") - Return - End If - Try - Dim input As IInputDataProvider = Nothing - Dim extension As String = Path.GetExtension(f) - Select Case extension - Case ".vecto" - input = JSONInputDataFactory.ReadJsonJob(f) - Case ".xml" - Dim xDocument As XDocument = xDocument.Load(f) - Dim rootNode As String = If(xDocument Is Nothing, "", xDocument.Root.Name.LocalName) - Select Case rootNode - Case XMLNames.VectoInputEngineering - input = New XMLEngineeringInputDataProvider(f, True) - Case XMLNames.VectoInputDeclaration - input = New XMLDeclarationInputDataProvider(XmlReader.Create(f), True) - End Select - End Select - - If input Is Nothing Then Throw New VectoException("No InputDataProvider for file {0} found!", f) - - XMLExportJobDialog.Initialize(input) - XMLExportJobDialog.ShowDialog() - Catch ex As Exception - MsgBox("Exporting job failed: " + ex.Message) - End Try - End Sub - - Private Sub LvGEN_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LvGEN.SelectedIndexChanged - btnExportXML.Enabled = (LvGEN.SelectedItems.Count = 1) - End Sub - - Private Sub btnImportXML_Click(sender As Object, e As EventArgs) Handles btnImportXML.Click - 'Try - ' Dim jobFile As String = PluginRegistry.Instance.GetImportPlugin("TUG.IVT.Vecto.XMLImport").ImportJob() - ' AddToJobListView(jobFile) - 'Catch ex As Exception - ' MsgBox("Importing job failed: " + ex.Message) - 'End Try - End Sub - - Private Sub LvGEN_MouseClick(sender As Object, e As MouseEventArgs) Handles LvGEN.MouseClick - If e.Button = MouseButtons.Right Then - _conMenTarget = LvGEN - _conMenTarJob = True - - 'Locked functions show/hide - LoadListToolStripMenuItem.Enabled = Not _guIlocked - LoadDefaultListToolStripMenuItem.Enabled = Not _guIlocked - ClearListToolStripMenuItem.Enabled = Not _guIlocked - - ConMenFilelist.Show(MousePosition) - End If - End Sub - - Private Sub ShowInFolderMenuItem_Click(sender As Object, e As EventArgs) Handles ShowInFolderMenuItem.Click - - For Each item As ListViewItem In LvGEN.SelectedItems - Dim fileName As String = FileRepl(item.SubItems(0).Text) - If File.Exists(fileName) Then - Try - Process.Start("explorer", "/select,""" & fileName & "") - Catch ex As Exception - MsgBox("Failed to open file!") - End Try - Else - MsgBox("File not found: " & fileName) - End If - Next - End Sub - - Private Sub EPTPJobEditorToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles EPTPJobEditorToolStripMenuItem.Click - OpenVECTOeditor("<VTP>") - End Sub + Private Sub LvMsg_KeyUp(sender As Object, e As KeyEventArgs) Handles LvMsg.KeyUp + If (e.Control And e.KeyCode = Keys.C) Then + Dim builder As StringBuilder = New StringBuilder() + For Each selectedItem As ListViewItem In LvMsg.SelectedItems + builder.AppendLine(String.Join(", ", + selectedItem.SubItems.Cast (Of ListViewItem.ListViewSubItem).Select( + Function(item) item.Text))) + Next + Clipboard.SetText(builder.ToString()) + End If + End Sub + + Private Sub LvMsg_MouseDown(sender As Object, e As MouseEventArgs) Handles LvMsg.MouseDown + _mouseDownOnListView = True + End Sub + + Private Sub LvMsg_MouseUp(sender As Object, e As MouseEventArgs) Handles LvMsg.MouseUp + _mouseDownOnListView = False + End Sub + + Private Sub RbDev_CheckedChanged(sender As Object, e As EventArgs) Handles RbDev.CheckedChanged + End Sub + + + Private Class VectoProgress + Public Target As String + Public Message As String + Public Link As String + End Class + + Private Sub btnExportXML_Click(sender As Object, e As EventArgs) Handles btnExportXML.Click + + If LvGEN.SelectedItems.Count < 1 Then + If LvGEN.Items.Count = 1 Then + LvGEN.Items(0).Selected = True + Else + Exit Sub + End If + End If + + Dim f As String = LvGEN.SelectedItems(0).SubItems(0).Text + f = FileRepl(f) + If Not File.Exists(f) Then + MsgBox(f & " not found!") + Return + End If + Try + Dim input As IInputDataProvider = Nothing + Dim extension As String = Path.GetExtension(f) + Select Case extension + Case ".vecto" + input = JSONInputDataFactory.ReadJsonJob(f) + Case ".xml" + Dim xDocument As XDocument = xDocument.Load(f) + Dim rootNode As String = If(xDocument Is Nothing, "", xDocument.Root.Name.LocalName) + Select Case rootNode + Case XMLNames.VectoInputEngineering + input = New XMLEngineeringInputDataProvider(f, True) + Case XMLNames.VectoInputDeclaration + input = New XMLDeclarationInputDataProvider(XmlReader.Create(f), True) + End Select + End Select + + If input Is Nothing Then Throw New VectoException("No InputDataProvider for file {0} found!", f) + + XMLExportJobDialog.Initialize(input) + XMLExportJobDialog.ShowDialog() + Catch ex As Exception + MsgBox("Exporting job failed: " + ex.Message) + End Try + End Sub + + Private Sub LvGEN_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LvGEN.SelectedIndexChanged + btnExportXML.Enabled = (LvGEN.SelectedItems.Count = 1) + End Sub + + Private Sub btnImportXML_Click(sender As Object, e As EventArgs) Handles btnImportXML.Click + 'Try + ' Dim jobFile As String = PluginRegistry.Instance.GetImportPlugin("TUG.IVT.Vecto.XMLImport").ImportJob() + ' AddToJobListView(jobFile) + 'Catch ex As Exception + ' MsgBox("Importing job failed: " + ex.Message) + 'End Try + End Sub + + Private Sub LvGEN_MouseClick(sender As Object, e As MouseEventArgs) Handles LvGEN.MouseClick + If e.Button = MouseButtons.Right Then + _conMenTarget = LvGEN + _conMenTarJob = True + + 'Locked functions show/hide + LoadListToolStripMenuItem.Enabled = Not _guIlocked + LoadDefaultListToolStripMenuItem.Enabled = Not _guIlocked + ClearListToolStripMenuItem.Enabled = Not _guIlocked + + ConMenFilelist.Show(MousePosition) + End If + End Sub + + Private Sub ShowInFolderMenuItem_Click(sender As Object, e As EventArgs) Handles ShowInFolderMenuItem.Click + + For Each item As ListViewItem In LvGEN.SelectedItems + Dim fileName As String = FileRepl(item.SubItems(0).Text) + If File.Exists(fileName) Then + Try + Process.Start("explorer", "/select,""" & fileName & "") + Catch ex As Exception + MsgBox("Failed to open file!") + End Try + Else + MsgBox("File not found: " & fileName) + End If + Next + End Sub + + Private Sub EPTPJobEditorToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles EPTPJobEditorToolStripMenuItem.Click + OpenVECTOeditor("<VTP>") + End Sub End Class diff --git a/VECTO/GUI/VectoVTPJobForm.Designer.vb b/VECTO/GUI/VectoVTPJobForm.Designer.vb index 3f8c030922b68896b0e6e78296b4ab9626d373e9..e48b7747164d954afadc3083e1ba13d31d42ab7a 100644 --- a/VECTO/GUI/VectoVTPJobForm.Designer.vb +++ b/VECTO/GUI/VectoVTPJobForm.Designer.vb @@ -69,6 +69,7 @@ Partial Class VectoVTPJobForm Me.lblEngineCharacteristics = New System.Windows.Forms.Label() Me.PictureBox2 = New System.Windows.Forms.PictureBox() Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.Label7 = New System.Windows.Forms.Label() Me.tbFanDiameter = New System.Windows.Forms.TextBox() Me.Label6 = New System.Windows.Forms.Label() Me.tbC3 = New System.Windows.Forms.TextBox() @@ -78,7 +79,16 @@ Partial Class VectoVTPJobForm Me.tbC1 = New System.Windows.Forms.TextBox() Me.Label1 = New System.Windows.Forms.Label() Me.Label5 = New System.Windows.Forms.Label() - Me.Label7 = New System.Windows.Forms.Label() + Me.pnManufacturerRecord = New System.Windows.Forms.Panel() + Me.lblMileageUnit = New System.Windows.Forms.Label() + Me.tbMileage = New System.Windows.Forms.TextBox() + Me.lblMileage = New System.Windows.Forms.Label() + Me.lblNCVUnit = New System.Windows.Forms.Label() + Me.tbNCV = New System.Windows.Forms.TextBox() + Me.lblNCV = New System.Windows.Forms.Label() + Me.Label8 = New System.Windows.Forms.Label() + Me.tbManufacturerRecord = New System.Windows.Forms.TextBox() + Me.ButtonManR = New System.Windows.Forms.Button() Me.GrCycles.SuspendLayout Me.GrAux.SuspendLayout Me.StatusStrip1.SuspendLayout @@ -89,6 +99,7 @@ Partial Class VectoVTPJobForm CType(Me.PicBox,System.ComponentModel.ISupportInitialize).BeginInit CType(Me.PictureBox2,System.ComponentModel.ISupportInitialize).BeginInit Me.GroupBox1.SuspendLayout + Me.pnManufacturerRecord.SuspendLayout Me.SuspendLayout ' 'GrCycles @@ -99,7 +110,7 @@ Partial Class VectoVTPJobForm Me.GrCycles.Controls.Add(Me.LvCycles) Me.GrCycles.Controls.Add(Me.BtDRIrem) Me.GrCycles.Controls.Add(Me.BtDRIadd) - Me.GrCycles.Location = New System.Drawing.Point(12, 260) + Me.GrCycles.Location = New System.Drawing.Point(11, 324) Me.GrCycles.Name = "GrCycles" Me.GrCycles.Size = New System.Drawing.Size(515, 138) Me.GrCycles.TabIndex = 10 @@ -169,7 +180,7 @@ Partial Class VectoVTPJobForm Me.GrAux.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles) Me.GrAux.Controls.Add(Me.LvAux) - Me.GrAux.Location = New System.Drawing.Point(12, 114) + Me.GrAux.Location = New System.Drawing.Point(11, 178) Me.GrAux.Name = "GrAux" Me.GrAux.Size = New System.Drawing.Size(515, 140) Me.GrAux.TabIndex = 9 @@ -213,9 +224,9 @@ Partial Class VectoVTPJobForm ' Me.TbVEH.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles) - Me.TbVEH.Location = New System.Drawing.Point(90, 86) + Me.TbVEH.Location = New System.Drawing.Point(128, 86) Me.TbVEH.Name = "TbVEH" - Me.TbVEH.Size = New System.Drawing.Size(411, 20) + Me.TbVEH.Size = New System.Drawing.Size(373, 20) Me.TbVEH.TabIndex = 1 ' 'ButtonVEH @@ -232,7 +243,7 @@ Partial Class VectoVTPJobForm 'StatusStrip1 ' Me.StatusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripStatusLabelGEN}) - Me.StatusStrip1.Location = New System.Drawing.Point(0, 568) + Me.StatusStrip1.Location = New System.Drawing.Point(0, 609) Me.StatusStrip1.Name = "StatusStrip1" Me.StatusStrip1.Size = New System.Drawing.Size(944, 22) Me.StatusStrip1.SizingGrip = false @@ -248,7 +259,7 @@ Partial Class VectoVTPJobForm 'ButOK ' Me.ButOK.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles) - Me.ButOK.Location = New System.Drawing.Point(778, 541) + Me.ButOK.Location = New System.Drawing.Point(778, 582) Me.ButOK.Name = "ButOK" Me.ButOK.Size = New System.Drawing.Size(75, 23) Me.ButOK.TabIndex = 0 @@ -259,7 +270,7 @@ Partial Class VectoVTPJobForm ' Me.ButCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles) Me.ButCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.ButCancel.Location = New System.Drawing.Point(859, 541) + Me.ButCancel.Location = New System.Drawing.Point(859, 582) Me.ButCancel.Name = "ButCancel" Me.ButCancel.Size = New System.Drawing.Size(75, 23) Me.ButCancel.TabIndex = 1 @@ -476,13 +487,22 @@ Partial Class VectoVTPJobForm Me.GroupBox1.Controls.Add(Me.tbC1) Me.GroupBox1.Controls.Add(Me.Label1) Me.GroupBox1.Controls.Add(Me.PictureBox2) - Me.GroupBox1.Location = New System.Drawing.Point(11, 404) + Me.GroupBox1.Location = New System.Drawing.Point(10, 468) Me.GroupBox1.Name = "GroupBox1" Me.GroupBox1.Size = New System.Drawing.Size(515, 135) Me.GroupBox1.TabIndex = 39 Me.GroupBox1.TabStop = false Me.GroupBox1.Text = "Fan Power" ' + 'Label7 + ' + Me.Label7.AutoSize = true + Me.Label7.Location = New System.Drawing.Point(477, 32) + Me.Label7.Name = "Label7" + Me.Label7.Size = New System.Drawing.Size(29, 13) + Me.Label7.TabIndex = 47 + Me.Label7.Text = "[mm]" + ' 'tbFanDiameter ' Me.tbFanDiameter.Location = New System.Drawing.Point(371, 29) @@ -556,14 +576,104 @@ Partial Class VectoVTPJobForm Me.Label5.TabIndex = 40 Me.Label5.Text = "Vehicle XML:" ' - 'Label7 + 'pnManufacturerRecord + ' + Me.pnManufacturerRecord.Controls.Add(Me.lblMileageUnit) + Me.pnManufacturerRecord.Controls.Add(Me.tbMileage) + Me.pnManufacturerRecord.Controls.Add(Me.lblMileage) + Me.pnManufacturerRecord.Controls.Add(Me.lblNCVUnit) + Me.pnManufacturerRecord.Controls.Add(Me.tbNCV) + Me.pnManufacturerRecord.Controls.Add(Me.lblNCV) + Me.pnManufacturerRecord.Controls.Add(Me.Label8) + Me.pnManufacturerRecord.Controls.Add(Me.tbManufacturerRecord) + Me.pnManufacturerRecord.Controls.Add(Me.ButtonManR) + Me.pnManufacturerRecord.Location = New System.Drawing.Point(11, 112) + Me.pnManufacturerRecord.Name = "pnManufacturerRecord" + Me.pnManufacturerRecord.Size = New System.Drawing.Size(525, 66) + Me.pnManufacturerRecord.TabIndex = 41 + ' + 'lblMileageUnit + ' + Me.lblMileageUnit.AutoSize = true + Me.lblMileageUnit.Location = New System.Drawing.Point(476, 43) + Me.lblMileageUnit.Name = "lblMileageUnit" + Me.lblMileageUnit.Size = New System.Drawing.Size(27, 13) + Me.lblMileageUnit.TabIndex = 49 + Me.lblMileageUnit.Text = "[km]" + ' + 'tbMileage + ' + Me.tbMileage.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles) + Me.tbMileage.Location = New System.Drawing.Point(394, 40) + Me.tbMileage.Name = "tbMileage" + Me.tbMileage.Size = New System.Drawing.Size(76, 20) + Me.tbMileage.TabIndex = 48 ' - Me.Label7.AutoSize = true - Me.Label7.Location = New System.Drawing.Point(477, 32) - Me.Label7.Name = "Label7" - Me.Label7.Size = New System.Drawing.Size(29, 13) - Me.Label7.TabIndex = 47 - Me.Label7.Text = "[mm]" + 'lblMileage + ' + Me.lblMileage.AutoSize = true + Me.lblMileage.Location = New System.Drawing.Point(281, 43) + Me.lblMileage.Name = "lblMileage" + Me.lblMileage.Size = New System.Drawing.Size(47, 13) + Me.lblMileage.TabIndex = 47 + Me.lblMileage.Text = "Mileage:" + ' + 'lblNCVUnit + ' + Me.lblNCVUnit.AutoSize = true + Me.lblNCVUnit.Location = New System.Drawing.Point(199, 43) + Me.lblNCVUnit.Name = "lblNCVUnit" + Me.lblNCVUnit.Size = New System.Drawing.Size(44, 13) + Me.lblNCVUnit.TabIndex = 46 + Me.lblNCVUnit.Text = "[MJ/kg]" + ' + 'tbNCV + ' + Me.tbNCV.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles) + Me.tbNCV.Location = New System.Drawing.Point(117, 40) + Me.tbNCV.Name = "tbNCV" + Me.tbNCV.Size = New System.Drawing.Size(76, 20) + Me.tbNCV.TabIndex = 45 + ' + 'lblNCV + ' + Me.lblNCV.AutoSize = true + Me.lblNCV.Location = New System.Drawing.Point(4, 43) + Me.lblNCV.Name = "lblNCV" + Me.lblNCV.Size = New System.Drawing.Size(79, 13) + Me.lblNCV.TabIndex = 44 + Me.lblNCV.Text = "NCV Test Fuel:" + ' + 'Label8 + ' + Me.Label8.AutoSize = true + Me.Label8.Location = New System.Drawing.Point(3, 11) + Me.Label8.Name = "Label8" + Me.Label8.Size = New System.Drawing.Size(111, 13) + Me.Label8.TabIndex = 43 + Me.Label8.Text = "Manufacturer Record:" + ' + 'tbManufacturerRecord + ' + Me.tbManufacturerRecord.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles) + Me.tbManufacturerRecord.Location = New System.Drawing.Point(117, 8) + Me.tbManufacturerRecord.Name = "tbManufacturerRecord" + Me.tbManufacturerRecord.Size = New System.Drawing.Size(374, 20) + Me.tbManufacturerRecord.TabIndex = 41 + ' + 'ButtonManR + ' + Me.ButtonManR.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles) + Me.ButtonManR.Image = CType(resources.GetObject("ButtonManR.Image"),System.Drawing.Image) + Me.ButtonManR.Location = New System.Drawing.Point(492, 6) + Me.ButtonManR.Name = "ButtonManR" + Me.ButtonManR.Size = New System.Drawing.Size(24, 24) + Me.ButtonManR.TabIndex = 42 + Me.ButtonManR.TabStop = false + Me.ButtonManR.UseVisualStyleBackColor = true ' 'VectoVTPJobForm ' @@ -571,7 +681,8 @@ Partial Class VectoVTPJobForm Me.AutoScaleDimensions = New System.Drawing.SizeF(6!, 13!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.CancelButton = Me.ButCancel - Me.ClientSize = New System.Drawing.Size(944, 590) + Me.ClientSize = New System.Drawing.Size(944, 631) + Me.Controls.Add(Me.pnManufacturerRecord) Me.Controls.Add(Me.Label5) Me.Controls.Add(Me.GroupBox1) Me.Controls.Add(Me.GrAux) @@ -612,6 +723,8 @@ Partial Class VectoVTPJobForm CType(Me.PictureBox2,System.ComponentModel.ISupportInitialize).EndInit Me.GroupBox1.ResumeLayout(false) Me.GroupBox1.PerformLayout + Me.pnManufacturerRecord.ResumeLayout(false) + Me.pnManufacturerRecord.PerformLayout Me.ResumeLayout(false) Me.PerformLayout @@ -668,4 +781,14 @@ End Sub Friend WithEvents tbFanDiameter As TextBox Friend WithEvents Label6 As Label Friend WithEvents Label7 As Label + Friend WithEvents pnManufacturerRecord As Panel + Friend WithEvents Label8 As Label + Friend WithEvents tbManufacturerRecord As TextBox + Friend WithEvents ButtonManR As Button + Friend WithEvents lblMileageUnit As Label + Friend WithEvents tbMileage As TextBox + Friend WithEvents lblMileage As Label + Friend WithEvents lblNCVUnit As Label + Friend WithEvents tbNCV As TextBox + Friend WithEvents lblNCV As Label End Class diff --git a/VECTO/GUI/VectoVTPJobForm.resx b/VECTO/GUI/VectoVTPJobForm.resx index 772cde37b8c682d55372aeed731935d7f4247349..1af59968ed8acfa877b95f9880de6db76ae820f2 100644 --- a/VECTO/GUI/VectoVTPJobForm.resx +++ b/VECTO/GUI/VectoVTPJobForm.resx @@ -296,6 +296,24 @@ C8aYB81CY4z5BqQVkREGdf7kRUA5jcELbowxTzQLjTHmW1A2KP9o7WPOA8rPkzzVTz0aY/rQLDTGmF9A CuvaoDw5KK/ctiFpjGnSLDTGmF9B2UPpR8icDJTzPG1IGmMmaRYaY8waoGxQ+pFBJwHlRwD5ezPGvKVZ aIwxazEaJsq786NkToS/M2PMPP75H/8P3C2RO8+dg8cAAAAASUVORK5CYII= +</value> + </data> + <data name="ButtonManR.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAtVJREFUOE+FkmtIk2EYhhc6zU1zyjyAlZn5Q0QS6k/EMDDSQiuzkmxM5wpEA00S + zTzbsozQEDUyVKjQbejUPGQSyyjUmofysFRKU/M859J5qORu77s1KX/0wPXju7/vvp4X3o/RVsHv7pDy + 0VklwIfaCPTXCzHQEPkXn5pEUDWJNH31kRGMf4eUocvF7GAShlqjQZ6H3qZjYUICQGliVfscvc+EGmNt + c0hhY/kONpYMrC/cwowqiYowchcYNaKRoa7mDDyfcuFRYpdnrBsEv7S3KT8XCTkUkq/3xGOj9xrQn0Cp + qQrGvnJ7uJTuwK58G4VJ8GMhh25eV29Ccp0yDmvd8SZBV7UA7sW2R5wfWsO+0ApO2ewMKlibE2N11siM + GCt6SL7YEQtdZxxUShECq7wQ9MQLZKnTfbbcqpQJuwxLDRWsTN+EbiobuslsLBsh+eybK3j/WgBfmQeq + 1RKcqPalAgexlYIIrNMtQAVLE1lYGs/Cd8JYJrR6SK5ovoCzjTzI1VLE9gjgVsiBYza7jJvHAhGwkpkG + gfZrJhZHM6D5QtBf4ed0yKSnENLEg0L3AlHKIBxq2Ik9BRy4FNrA4bFBYJlgbhCQgno4DeqhNMwPpuFb + TyICan3waqUF0coAHGtxpwJvuSPcJBwqYBUzwby8TUEF84OpmFOlYnYghR69XcLHUdl+RLX7I6TVc4uA + W8aCZZy5hhnO8KECUpzuu4Gpj8lU0FgShuIHgeAVucK/0d0k8KzgwjGXje0xZiPMS/oyGVIgxcme65jo + MvyBNUWhqMw/j7ryi+Dlu+KwfDcVcNNYEOfx6E2Ypq0iVKN6GYNxZRLG3iVSQXnOcRSk+EGadxK1j4Jx + IMsZPhXOsE+2QnPZOcPmP9MtD+d0SMPkXTVCDLdeRadciPjIg7H6V3sNXzAYtrEMjmW0udxCZFZmjLZO + eyX/NDkNOcG9FD9vY/yfYTB+A9kMOLKC3dXwAAAAAElFTkSuQmCC </value> </data> <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> diff --git a/VECTO/GUI/VectoVTPJobForm.vb b/VECTO/GUI/VectoVTPJobForm.vb index 3f54094b6bbdf4b6d6026d5b1497abed3a9af338..05e9f9ce6b843cdd908ccb5bf2cfb04c664effaa 100644 --- a/VECTO/GUI/VectoVTPJobForm.vb +++ b/VECTO/GUI/VectoVTPJobForm.vb @@ -57,6 +57,8 @@ Public Class VectoVTPJobForm LvAux.Columns(AuxViewColumns.AuxInputOrTech).Text = "Technology" + pnManufacturerRecord.Visible = cfg.DeclMode + GrCycles.Enabled = True _changed = False @@ -162,11 +164,11 @@ Public Class VectoVTPJobForm VectoNew() 'Read GEN - Dim vectoJob As IVTPJobInputData = Nothing - Dim inputData As IVTPInputDataProvider = Nothing + Dim vectoJob As IVTPEngineeringJobInputData = Nothing + Dim inputData As IVTPEngineeringInputDataProvider = Nothing Try inputData = TryCast(JSONInputDataFactory.ReadComponentData(file), - IVTPInputDataProvider) + IVTPEngineeringInputDataProvider) vectoJob = inputData.JobInputData() Catch ex As Exception MsgBox("Failed to read Job-File" + Environment.NewLine + ex.Message) @@ -192,11 +194,15 @@ Public Class VectoVTPJobForm 'Files ----------------------------- TbVEH.Text = GetRelativePath(inputData.JobInputData.Vehicle.Source, _basePath) + tbManufacturerRecord.Text = If (cfg.DeclMode, GetRelativePath(inputData.JobInputData.ManufacturerReportInputData.Source, _basePath), "") Dim auxInput As IAuxiliariesDeclarationInputData = inputData.JobInputData.Vehicle.AuxiliaryInputData() PopulateAuxiliaryList(auxInput) + tbMileage.Text = if(Cfg.DeclMode, inputData.JobInputData.Mileage.ConvertToKiloMeter().Value.ToGUIFormat(), "") + tbNCV.Text = if (Cfg.DeclMode, inputData.JobInputData.NetCalorificValueTestFuel.ConvertToMegaJoulePerKilogram().Value.ToGUIFormat(), "") + Dim coefficients As Double() = vectoJob.FanPowerCoefficents.ToArray() If (coefficients.Length >= 1) Then tbC1.Text = coefficients(0).ToGUIFormat() @@ -268,6 +274,8 @@ Public Class VectoVTPJobForm 'Files ------------------------------------------------- ----------------- vectoJob.PathVeh = TbVEH.Text + vectoJob.ManufacturerRecord = If(cfg.DeclMode, tbManufacturerRecord.Text, "") + For Each lv0 As ListViewItem In LvCycles.Items Dim sb As SubPath = New SubPath @@ -275,6 +283,10 @@ Public Class VectoVTPJobForm vectoJob.CycleFiles.Add(sb) Next + vectoJob.Mileage = tbMileage.Text.ToDouble(0).SI(Unit.SI.Kilo.Meter).Cast(of Meter) + + vectoJob.NetCalorificValueTestFuel = tbNCV.Text.ToDouble(0).SI(Unit.SI.Mega.Joule.Per.Kilo.Gramm).Cast(of JoulePerKilogramm) + vectoJob.FanCoefficients = New Double() { tbC1.Text.ToDouble(0), tbC2.Text.ToDouble(0), @@ -638,15 +650,6 @@ Public Class VectoVTPJobForm HDVclass = "-" Else HDVclass = s0.VehicleClass.GetClassNumber() - - If Cfg.DeclMode Then - LvCycles.Items.Clear() - Dim m0 As Mission - For Each m0 In s0.Missions - LvCycles.Items.Add(m0.MissionType.ToString()) - Next - End If - End If PicVehicle.Image = ConvPicPath(If(Not s0.Found, -1, HDVclass.ToInt()), False) _ @@ -702,7 +705,13 @@ Public Class VectoVTPJobForm Private Sub LvAux_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LvAux.SelectedIndexChanged End Sub + Private Sub ButtonManR_Click(sender As Object, e As EventArgs) Handles ButtonManR.Click + If ManRXMLFileBrowser.OpenDialog(FileRepl(tbManufacturerRecord.Text, GetPath(VectoFile))) Then + tbManufacturerRecord.Text = GetFilenameWithoutDirectory(ManRXMLFileBrowser.Files(0), GetPath(VectoFile)) + End If + End Sub + End Class diff --git a/VECTO/Input Files/Engine.vb b/VECTO/Input Files/Engine.vb index 8844e6825d2e925780f3eb268d3d0459d1229c14..2231cd359a1777e630ae4d7c3bcfc9fa5feb8b7f 100644 --- a/VECTO/Input Files/Engine.vb +++ b/VECTO/Input Files/Engine.vb @@ -313,9 +313,9 @@ Public Class Engine End Get End Property - Public ReadOnly Property DigestValue As String Implements IComponentInputData.DigestValue + Public ReadOnly Property DigestValue As DigestData Implements IComponentInputData.DigestValue Get - Return "" + Return Nothing End Get End Property diff --git a/VECTO/Input Files/Gearbox.vb b/VECTO/Input Files/Gearbox.vb index 7e7114271978b843958bfd2eb2a92587d0222212..b57974624124dff169d282b0c74ab0e2b31e06db 100644 --- a/VECTO/Input Files/Gearbox.vb +++ b/VECTO/Input Files/Gearbox.vb @@ -331,9 +331,9 @@ Public Class Gearbox End Get End Property - Public ReadOnly Property DigestValue As String Implements IComponentInputData.DigestValue + Public ReadOnly Property DigestValue As DigestData Implements IComponentInputData.DigestValue Get - Return "" + Return Nothing End Get End Property diff --git a/VECTO/Input Files/VectoEPTPJob.vb b/VECTO/Input Files/VectoEPTPJob.vb index 9028c6209127686fa8feff4b1093581db4011966..ccac7979eaa23317aadf5943af6d08d0c5624e77 100644 --- a/VECTO/Input Files/VectoEPTPJob.vb +++ b/VECTO/Input Files/VectoEPTPJob.vb @@ -6,6 +6,7 @@ Imports System.Linq Imports System.Xml Imports TUGraz.VECTO.Input_Files Imports TUGraz.VectoCommon.Exceptions +Imports TUGraz.VectoCommon.Hashing Imports TUGraz.VectoCommon.InputData Imports TUGraz.VectoCommon.Models Imports TUGraz.VectoCommon.Utils @@ -14,15 +15,18 @@ Imports TUGraz.VectoCore.InputData.FileIO.XML.Declaration Imports TUGraz.VectoCore.InputData.Impl Imports TUGraz.VectoCore.Models.Declaration Imports TUGraz.VectoCore.Utils +Imports TUGraz.VectoHashing <CustomValidation(GetType(VectoVTPJob), "ValidateJob")> Public Class VectoVTPJob - Implements IVTPInputDataProvider, IVTPJobInputData + Implements IVTPEngineeringInputDataProvider, IVTPEngineeringJobInputData, IVTPDeclarationInputDataProvider, + IVTPDeclarationJobInputData, IManufacturerReport - Private _sFilePath As String - Private _myPath As String + Private _sFilePath As String + Private _myPath As String Private ReadOnly _vehicleFile As SubPath + Private ReadOnly _manufacturerRecord As SubPath Public ReadOnly CycleFiles As List(Of SubPath) Public FanCoefficients As Double() @@ -32,125 +36,147 @@ Public Class VectoVTPJob Public Sub New() CycleFiles = New List(Of SubPath) _vehicleFile = New SubPath + _manufacturerRecord = New SubPath() End Sub Public Property FilePath As String - Get - Return _sFilePath - End Get - Set(value As String) - _sFilePath = value - If _sFilePath = "" Then - _myPath = "" - Else - _myPath = Path.GetDirectoryName(_sFilePath) & "\" - End If - End Set - End Property - - - Public Property PathVeh(Optional ByVal original As Boolean = False) As String - Get - If original Then - Return _vehicleFile.OriginalPath - Else - Return _vehicleFile.FullPath - End If - End Get - Set(value As String) - _vehicleFile.Init(_myPath, value) - End Set - End Property - - - Public Function SaveFile() As Boolean - Dim validationResults As IList(Of ValidationResult) = - Validate(ExecutionMode.Declaration, Nothing, False) - - If validationResults.Count > 0 Then - Dim messages As IEnumerable(Of String) = - validationResults.Select(Function(r) r.ErrorMessage + String.Join(", ", r.MemberNames.Distinct())) - MsgBox("Invalid input." + Environment.NewLine + String.Join(Environment.NewLine, messages), MsgBoxStyle.OkOnly, - "Failed to save Vecto Job") - Return False - End If - - Try - Dim writer As JSONFileWriter = JSONFileWriter.Instance - writer.SaveJob(Me, _sFilePath) - Catch ex As Exception - MsgBox("Failed to save Job file: " + ex.Message) - Return False - End Try - Return True - End Function - - ' ReSharper disable once UnusedMember.Global -- used by Validation - Public Shared Function ValidateJob(vectoJob As VectoVTPJob, validationContext As ValidationContext) As ValidationResult - Dim modeService As VectoValidationModeServiceContainer = - TryCast(validationContext.GetService(GetType(VectoValidationModeServiceContainer)), - VectoValidationModeServiceContainer) - Dim mode As ExecutionMode = If(modeService Is Nothing, ExecutionMode.Declaration, modeService.Mode) - - Return ValidateVehicleJob(vectoJob, mode) - End Function - - Private Shared Function ValidateVehicleJob(vectoJob As VectoVTPJob, mode As ExecutionMode) As ValidationResult + Get + Return _sFilePath + End Get + Set(value As String) + _sFilePath = value + If _sFilePath = "" Then + _myPath = "" + Else + _myPath = Path.GetDirectoryName(_sFilePath) & "\" + End If + End Set + End Property + + + Public Property PathVeh(Optional ByVal original As Boolean = False) As String + Get + If original Then + Return _vehicleFile.OriginalPath + Else + Return _vehicleFile.FullPath + End If + End Get + Set(value As String) + _vehicleFile.Init(_myPath, value) + End Set + End Property - ' TODO!! + Public Function SaveFile() As Boolean + Dim validationResults As IList(Of ValidationResult) = + Validate(ExecutionMode.Declaration, Nothing, False) + + If validationResults.Count > 0 Then + Dim messages As IEnumerable(Of String) = + validationResults.Select(Function(r) r.ErrorMessage + String.Join(", ", r.MemberNames.Distinct())) + MsgBox("Invalid input." + Environment.NewLine + String.Join(Environment.NewLine, messages), + MsgBoxStyle.OkOnly, + "Failed to save Vecto Job") + Return False + End If + + Try + Dim writer As JSONFileWriter = JSONFileWriter.Instance + if Cfg.DeclMode Then + writer.SaveJob(CType(Me, IVTPDeclarationInputDataProvider), _sFilePath) + else + writer.SaveJob(CType(Me, IVTPEngineeringInputDataProvider), _sFilePath) + End If + Catch ex As Exception + MsgBox("Failed to save Job file: " + ex.Message) + Return False + End Try + Return True + End Function + + ' ReSharper disable once UnusedMember.Global -- used by Validation + Public Shared Function ValidateJob(vectoJob As VectoVTPJob, validationContext As ValidationContext) _ + As ValidationResult + Dim modeService As VectoValidationModeServiceContainer = + TryCast(validationContext.GetService(GetType(VectoValidationModeServiceContainer)), + VectoValidationModeServiceContainer) + Dim mode As ExecutionMode = If(modeService Is Nothing, ExecutionMode.Declaration, modeService.Mode) + + Return ValidateVehicleJob(vectoJob, mode) End Function - Public ReadOnly Property Vehicle As IVehicleDeclarationInputData Implements IVTPJobInputData.Vehicle - Get - If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing + Private Shared Function ValidateVehicleJob(vectoJob As VectoVTPJob, mode As ExecutionMode) As ValidationResult + + ' TODO!! + End Function + + Public ReadOnly Property Vehicle As IVehicleDeclarationInputData Implements IVTPEngineeringJobInputData.Vehicle + Get + If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing 'Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle Return New XMLDeclarationInputDataProvider(_vehicleFile.FullPath, True).JobInputData.Vehicle End Get - End Property - - Public ReadOnly Property Cycles As IList(Of ICycleData) Implements IVTPJobInputData.Cycles - Get - Dim retVal As ICycleData() = New ICycleData(CycleFiles.Count - 1) {} - Dim i As Integer = 0 - For Each cycleFile As SubPath In CycleFiles - Dim cycleData As TableData - If (File.Exists(cycleFile.FullPath)) Then - cycleData = VectoCSVFile.Read(cycleFile.FullPath) - Else - Try - Dim resourceName As String = DeclarationData.DeclarationDataResourcePrefix + ".MissionCycles." + - cycleFile.OriginalPath + TUGraz.VectoCore.Configuration.Constants.FileExtensions.CycleFile - Dim cycleDataRes As Stream = RessourceHelper.ReadStream(resourceName) - cycleData = VectoCSVFile.ReadStream(cycleDataRes, source:=resourceName) - Catch ex As Exception - Throw New VectoException("Driving Cycle could not be read: " + cycleFile.OriginalPath) - End Try - End If - retVal(i) = New CycleInputData With { - .Name = Path.GetFileNameWithoutExtension(cycleFile.FullPath), - .CycleData = cycleData - } - i += 1 - Next - Return retVal - - End Get - End Property - - Public ReadOnly Property FanPowerCoefficents As IEnumerable(Of Double) Implements IVTPJobInputData.FanPowerCoefficents + End Property + + Public ReadOnly Property IVTPDeclarationJobInputData_ManufacturerReportInputData As IManufacturerReport Implements IVTPDeclarationJobInputData.ManufacturerReportInputData + get + Return me + End Get + End Property + + Public ReadOnly Property VectoJobHash As IVectoHash Implements IVTPDeclarationJobInputData.VectoJobHash + + Public ReadOnly Property VectoManufacturerReportHash As IVectoHash Implements IVTPDeclarationJobInputData.VectoManufacturerReportHash + Public Property Mileage As Meter Implements IVTPDeclarationJobInputData.Mileage + + Public Property NetCalorificValueTestFuel As JoulePerKilogramm Implements IVTPDeclarationJobInputData.NetCalorificValueTestFuel + + + Public ReadOnly Property Cycles As IList(Of ICycleData) Implements IVTPEngineeringJobInputData.Cycles + Get + Dim retVal As ICycleData() = New ICycleData(CycleFiles.Count - 1) {} + Dim i As Integer = 0 + For Each cycleFile As SubPath In CycleFiles + Dim cycleData As TableData + If (File.Exists(cycleFile.FullPath)) Then + cycleData = VectoCSVFile.Read(cycleFile.FullPath) + Else + Try + Dim resourceName As String = DeclarationData.DeclarationDataResourcePrefix + ".MissionCycles." + + cycleFile.OriginalPath + + TUGraz.VectoCore.Configuration.Constants.FileExtensions.CycleFile + Dim cycleDataRes As Stream = RessourceHelper.ReadStream(resourceName) + cycleData = VectoCSVFile.ReadStream(cycleDataRes, source := resourceName) + Catch ex As Exception + Throw New VectoException("Driving Cycle could not be read: " + cycleFile.OriginalPath) + End Try + End If + retVal(i) = New CycleInputData With { + .Name = Path.GetFileNameWithoutExtension(cycleFile.FullPath), + .CycleData = cycleData + } + i += 1 + Next + Return retVal + End Get + End Property + + Public ReadOnly Property FanPowerCoefficents As IEnumerable(Of Double) _ + Implements IVTPEngineeringJobInputData.FanPowerCoefficents Get Return FanCoefficients End Get End Property - Public ReadOnly Property SavedInDeclarationMode As Boolean Implements IVTPJobInputData.SavedInDeclarationMode + Public ReadOnly Property SavedInDeclarationMode As Boolean _ + Implements IVTPEngineeringJobInputData.SavedInDeclarationMode Get Return False End Get End Property - Public Property FanDiameter As Meter Implements IVTPJobInputData.FanDiameter + Public Property FanDiameter As Meter Implements IVTPEngineeringJobInputData.FanDiameter Get Return _fanDiameter End Get @@ -159,9 +185,40 @@ Public Class VectoVTPJob End Set End Property - Public ReadOnly Property JobInputData As IVTPJobInputData Implements IVTPInputDataProvider.JobInputData + Public ReadOnly Property JobInputData As IVTPEngineeringJobInputData _ + Implements IVTPEngineeringInputDataProvider.JobInputData Get Return Me End Get End Property + + + Public ReadOnly Property IVTPDeclarationInputDataProvider_JobInputData As IVTPDeclarationJobInputData _ + Implements IVTPDeclarationInputDataProvider.JobInputData + get + return Me + End Get + End Property + + Public Property ManufacturerRecord(Optional ByVal original As Boolean = False) As String + Get + If original Then + Return _manufacturerRecord.OriginalPath + Else + Return _manufacturerRecord.FullPath + End If + End Get + Set(value As String) + _manufacturerRecord.Init(_myPath, value) + End Set + End Property + + Public ReadOnly Property Source As String Implements IManufacturerReport.Source + get + Return _manufacturerRecord.FullPath + End Get + End Property + + Public ReadOnly Property ComponentDigests As IDictionary(Of VectoComponents,IList(Of String)) Implements IManufacturerReport.ComponentDigests + Public ReadOnly Property JobDigest As DigestData Implements IManufacturerReport.JobDigest End Class diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb index 73b06f1558974ca94c525f64bc13f230d374084d..49bc8665e1a88a67d92501dd51d38b817e416e70 100644 --- a/VECTO/Input Files/Vehicle.vb +++ b/VECTO/Input Files/Vehicle.vb @@ -300,9 +300,9 @@ Public Class Vehicle End Get End Property - Public ReadOnly Property DigestValue As String Implements IComponentInputData.DigestValue + Public ReadOnly Property DigestValue As DigestData Implements IComponentInputData.DigestValue Get - Return "" + Return Nothing End Get End Property diff --git a/VECTO/OutputData/JSONFileWriter.vb b/VECTO/OutputData/JSONFileWriter.vb index 778458c593a59fcf08fc25a0fda2f699f7923b86..e1060c9e3fa01798f8893ad826b123011556127a 100644 --- a/VECTO/OutputData/JSONFileWriter.vb +++ b/VECTO/OutputData/JSONFileWriter.vb @@ -42,7 +42,7 @@ Public Class JSONFileWriter body.Add("ModelName", eng.Model) - body.Add("Displacement", eng.Displacement.ConvertToCubicCentiMeter().ToString()) + body.Add("Displacement", eng.Displacement.ConvertToCubicCentiMeter().ToString()) body.Add("IdlingSpeed", eng.IdleSpeed.AsRPM) body.Add("Inertia", eng.Inertia.Value()) @@ -206,8 +206,8 @@ Public Class JSONFileWriter {"CurbWeight", vehicle.CurbMassChassis.Value()}, {"CurbWeightExtra", vehicle.CurbMassExtra.Value()}, {"Loading", vehicle.Loading.Value()}, - {"MassMax", vehicle.GrossVehicleMassRating.ConvertToTon().Value}, - {"rdyn", vehicle.DynamicTyreRadius.ConvertToMilliMeter().Value}, + {"MassMax", vehicle.GrossVehicleMassRating.ConvertToTon().Value}, + {"rdyn", vehicle.DynamicTyreRadius.ConvertToMilliMeter().Value}, {"CdCorrMode", airdrag.CrossWindCorrectionMode.GetName()}, {"CdCorrFile", If((airdrag.CrossWindCorrectionMode = CrossWindCorrectionMode.SpeedDependentCorrectionFactor OrElse @@ -254,8 +254,8 @@ Public Class JSONFileWriter Dim job As IEngineeringJobInputData = input.JobInputData() - body.Add("SavedInDeclMode", job.SavedInDeclarationMode) - body.Add("EngineOnlyMode", job.EngineOnlyMode) + body.Add("SavedInDeclMode", job.SavedInDeclarationMode) + body.Add("EngineOnlyMode", job.EngineOnlyMode) If job.EngineOnlyMode Then body.Add("EngineFile", GetRelativePath(job.EngineOnly.Source, basePath)) @@ -270,8 +270,8 @@ Public Class JSONFileWriter body.Add("EngineFile", GetRelativePath(input.JobInputData.Vehicle.EngineInputData.Source, basePath)) body.Add("GearboxFile", GetRelativePath(input.JobInputData.Vehicle.GearboxInputData.Source, basePath)) - - Dim aux As IAuxiliariesEngineeringInputData = job.Vehicle.AuxiliaryInputData() + + Dim aux As IAuxiliariesEngineeringInputData = job.Vehicle.AuxiliaryInputData() 'AA-TB 'ADVANCED AUXILIARIES body.Add("AuxiliaryAssembly", aux.AuxiliaryAssembly.GetName()) @@ -301,12 +301,12 @@ Public Class JSONFileWriter Next body.Add("Aux", auxList) - If Not job.SavedInDeclarationMode Then - body.Add("Padd", pAdd) - End If - - Dim driver As IDriverEngineeringInputData = input.DriverInputData - + If Not job.SavedInDeclarationMode Then + body.Add("Padd", pAdd) + End If + + Dim driver As IDriverEngineeringInputData = input.DriverInputData + If Not job.SavedInDeclarationMode Then body.Add("VACC", GetRelativePath(driver.AccelerationCurve.Source, basePath)) End If @@ -353,23 +353,34 @@ Public Class JSONFileWriter WriteFile(header, body, filename) End Sub - Public Sub SaveJob(input As IVTPInputDataProvider, filename As String) Implements IOutputFileWriter.SaveJob - Dim basePath As String = Path.GetDirectoryName(filename) - 'Header + Public Sub SaveJob(input As IVTPDeclarationInputDataProvider, filename As String) Implements IOutputFileWriter.SaveJob + Dim header As Dictionary(Of String, Object) = GetHeader(VectoJobFormatVersion) + Dim body As Dictionary(Of string, Object) = SaveVTPJob(input.JobInputData, filename, true) + WriteFile(header, body, filename) + end Sub + Public Sub SaveJob(input As IVTPEngineeringInputDataProvider, filename As String) Implements IOutputFileWriter.SaveJob Dim header As Dictionary(Of String, Object) = GetHeader(VectoJobFormatVersion) + Dim body As Dictionary(Of string, Object) = SaveVTPJob(input.JobInputData, filename, False) + WriteFile(header, body, filename) + End Sub + Private Function SaveVTPJob(job As IVTPDeclarationJobInputData, filename As String, declarationmode As Boolean) As Dictionary(Of String,Object) + 'Body Dim body As Dictionary(Of String, Object) = New Dictionary(Of String, Object) - Dim job As IVTPJobInputData = input.JobInputData - body.Add("SavedInDeclMode", False) - body.Add("DeclarationVehicle", GetRelativePath(job.Vehicle.Source, Path.GetDirectoryName(filename))) - body.Add("FanPowerCoefficients", job.FanPowerCoefficents) - body.Add("FanDiameter", job.FanDiameter.Value()) - body.Add("Cycles", - job.Cycles.Select(Function(x) GetRelativePath(x.CycleData.Source, Path.GetDirectoryName(filename))).ToArray()) - - WriteFile(header, body, filename) - End Sub + body.Add("SavedInDeclMode", declarationmode) + body.Add("DeclarationVehicle", GetRelativePath(job.Vehicle.Source, Path.GetDirectoryName(filename))) + if declarationmode Then + body.add("ManufacturerRecord", GetRelativePath(job.ManufacturerReportInputData.Source, Path.GetDirectoryName(filename))) + body.Add("Mileage", job.Mileage.ConvertToKiloMeter().Value) + body.add("NCVTestFuel", job.NetCalorificValueTestFuel.ConvertToMegaJoulePerKilogram().Value()) + End If + body.Add("FanPowerCoefficients", job.FanPowerCoefficents) + body.Add("FanDiameter", job.FanDiameter.Value()) + body.Add("Cycles", + job.Cycles.Select(Function(x) GetRelativePath(x.CycleData.Source, Path.GetDirectoryName(filename))).ToArray()) + return body + End Function Public Sub ExportJob(input As IEngineeringInputDataProvider, filename As String, separateFiles As Boolean) _ Implements IOutputFileWriter.ExportJob @@ -409,3 +420,4 @@ Public Class JSONFileWriter WriteFile(JToken.FromObject(New Dictionary(Of String, Object) From {{"Header", header}, {"Body", body}}), path) End Sub End Class + diff --git a/VECTO_XML-Schema.spp b/VECTO_XML-Schema.spp new file mode 100644 index 0000000000000000000000000000000000000000..8b84fe0f81feecf7dbd5aef5393dc5669f2bb5ee --- /dev/null +++ b/VECTO_XML-Schema.spp @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Project> + <Folder FolderName="XML Files" ExtStr="xml;cml;math;rdf;smil;svg;wml"> + <File FilePath="VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\vecto_engine-sample.xml" HomeFolder="Yes"/> + <File FilePath="VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\vecto_gearbox-sample.xml" HomeFolder="Yes"/> + <File FilePath="VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\vecto_vehicle-sample.xml" HomeFolder="Yes"/> + <File FilePath="VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\vecto_vehicle-sample_certificationOptions.xml" HomeFolder="Yes"/> + <File FilePath="VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\vecto_vehicle-sample_FULL.xml" HomeFolder="Yes"/> + <File FilePath="VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\vecto_vehicle-sample_noAirdrag.xml" HomeFolder="Yes"/> + </Folder> + <Folder FolderName="XSL Files" ExtStr="xsl;xslt"> + <File FilePath="Documentation\XML\RenderTable.xslt" HomeFolder="Yes"/> + </Folder> + <Folder FolderName="XQuery Files" ExtStr="xq;xql;xquery;xqu"/> + <Folder FolderName="HTML Files" ExtStr="html;htm;xhtml;asp"/> + <Folder FolderName="DTD/Schemas" ExtStr="dtd;dcd;xdr;biz;xsd"> + <File FilePath="VectoCore\VectoCore\Resources\XSD\ParameterDocumentation.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\VectoCore\Resources\XSD\VectoComponent.1.0.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\VectoCore\Resources\XSD\VectoDeclarationDefinitions.1.0.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\VectoCore\Resources\XSD\VectoDefinitions.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\VectoCore\Resources\XSD\VectoEngineeringDefinitions.0.7.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\VectoCore\Resources\XSD\VectoEngineeringInput.0.7.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\VectoCore\Resources\XSD\VectoInput.1.0.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\VectoCore\Resources\XSD\VectoOutputCustomer.0.4.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\VectoCore\Resources\XSD\VectoOutputManufacturer.0.4.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\VectoCore\Resources\XSD\VectoOutputManufacturer.0.5.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\VectoCore\Resources\XSD\VTPReport.0.1.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\VectoCore\Resources\XSD\xmldsig-core-schema.xsd" HomeFolder="Yes"/> + </Folder> + <Folder FolderName="Entities" ExtStr="ent"/> +</Project> diff --git a/VectoCommon/VectoHashing/IVectoHash.cs b/VectoCommon/VectoCommon/Hashing/IVectoHash.cs similarity index 98% rename from VectoCommon/VectoHashing/IVectoHash.cs rename to VectoCommon/VectoCommon/Hashing/IVectoHash.cs index e41eb4599abef200a1bf05958923ebeef083119c..96a9b21bb41d9d5c05240718604004d20d43b5b3 100644 --- a/VectoCommon/VectoHashing/IVectoHash.cs +++ b/VectoCommon/VectoCommon/Hashing/IVectoHash.cs @@ -1,166 +1,167 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2017 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System.Collections.Generic; -using System.Xml.Linq; - -namespace TUGraz.VectoHashing -{ - /// <summary> - /// Interface definition for hashing and verifying VECTO XML files - /// </summary> - public interface IVectoHash - { - /// <summary> - /// Get a list of all vecto components contained in the XML file. If a certain - /// component appears multiple times (e.g. tires) it is provided multiple times - /// in the returned list. - /// to get a list with unique entries (and the number of occurences) use e.g. - /// GetContainigComponents().GroupBy(s => s).Select(g => new { Entry = g.Key, Count = g.Count() }) - /// </summary> - /// <returns>List of components contained in the current XML document</returns> - IList<VectoComponents> GetContainigComponents(); - - - /// <summary> - /// Get the digest method used to compute the digest value of the top-level Signature element - /// if there is no top-level Signature element, the default digest method is returned (see XMLHashProvider.DefaultDigestMethod) - /// </summary> - /// <returns>identifier (urn) of the digest method</returns> - string GetDigestMethod(); - - - /// <summary> - /// Get the digest method of the Signature element for the given component. If a component exists - /// multiple times (e.g., tires), the index specifies for which component the digest method is returned - /// </summary> - /// <param name="component">VectoComponent to get the digest method for</param> - /// <param name="index">index of the component to use if a component may exist multiple times. Default: 0</param> - /// <returns>identifier (urn) of the digest method</returns> - string GetDigestMethod(VectoComponents component, int index = 0); - - - /// <summary> - /// Get the list of canonicalization methods used to compute the digest value of the top-level Signature element - /// If there is no top-level Signature element, the default digest method is returned (see XMLHashProvider.DefaulCanonicalizationMethod) - /// </summary> - /// <returns>returns a list of identifiers (urns) of the canonicalization methods</returns> - IEnumerable<string> GetCanonicalizationMethods(); - - - /// <summary> - /// Get the list of canonicalization methods used to compute the digest value of the Signature element - /// for the given component. If a component exists multiple times (e.g., tires) the indes specifies for which - /// component the canonicalization method is returned - /// If there is no top-level Signature element, the default digest method is returned (see XMLHashProvider.DefaulCanonicalizationMethod) - /// </summary> - /// <param name="component">VectoComponent to get the canonicalization methods for</param> - /// <param name="index">index of the component to use if a component may exist multiple times. Default: 0</param> - /// <returns>returns a list of identifiers (urns) of the canonicalization methods</returns> - IEnumerable<string> GetCanonicalizationMethods(VectoComponents component, int index = 0); - - - /// <summary> - /// Reads the hash-value of the top-level Signature element - /// </summary> - /// <returns>base64 encoded hash value</returns> - string ReadHash(); - - - /// <summary> - /// Reads the hash-value of the Signature element for the given component. If a component can exist - /// multiple times (i.e., tires), the index specifies for which component the hash is computed - /// </summary> - /// <param name="component">VectoComponent to get the canonicalization methods for</param> - /// <param name="index">index of the component to use if a component may exist multiple times. Default: 0</param> - /// <returns>base64 encoded hash value</returns> - string ReadHash(VectoComponents component, int index = 0); - - - /// <summary> - /// Computes the hash-value of the top-level Data element (or vehicle) - /// If the canoonicalizationMethods is null the canonicalizationMethods from - /// the signature element are read if available or the default canonicalization is applied - /// If the digestMethod is null the digestMethod from the signature element is read if - /// available or the default digestMethod is used - /// Note: the top-level Data element is required to have an id attribute! - /// </summary> - /// <param name="canonicalizationMethods">Canonicalization methods to use. If null the default methods are applied</param> - /// <param name="digestMethod">Digest method to use. If null, the default digest method is used.</param> - /// <returns>base64 encoded hash value</returns> - string ComputeHash(IEnumerable<string> canonicalizationMethods = null, string digestMethod = null); - - - /// <summary> - /// Computes the hash-value for the given component. If a component can exist multiple times - /// (i.e., Tyres) the index specifies for which component the hash is computed - /// If the canoonicalizationMethods is null the canonicalizationMethods from - /// the signature element are read if available or the default canonicalization is applied - /// If the digestMethod is null the digestMethod from the signature element is read if - /// available or the default digestMethod is used - /// Note: the Data element is required to have an id attribute! - /// </summary> - /// <param name="component">VectoComponent to get the canonicalization methods for</param> - /// <param name="index">index of the component to use if a component may exist multiple times. Default: 0</param> - /// <param name="canonicalizationMethods">list of identifiers (urn) of the canonicalization methods to apply. If null, the default canonicalization methods are used</param> - /// <param name="digestMethod">identifier (urn) of the digest method to use. If null, the default digest method is used</param> - /// <returns></returns> - string ComputeHash(VectoComponents component, int index = 0, IEnumerable<string> canonicalizationMethods = null, - string digestMethod = null); - - - /// <summary> - /// Validates the hash of the top-level component (or vehicle) - /// </summary> - /// <returns>true, if the re-computed digest value matches the document's digest value, false otherwise</returns> - bool ValidateHash(); - - - /// <summary> - /// Validates the hash for the given component. - /// </summary> - /// <param name="component">VectoComponent to get the canonicalization methods for</param> - /// <param name="index">index of the component to use if a component may exist multiple times. Default: 0</param> - /// <returns>true, if the re-computed digest value matches the document's digest value, false otherwise</returns> - bool ValidateHash(VectoComponents component, int index = 0); - - - /// <summary> - /// Computes the hash-value of the outer Data element and adds the according Signature element - /// after the Data element. - /// The default CaonocalizationMethods and DigestMethod are used. - /// Note: the id attribute is added to the Data element automatically. if an id attribute is already - /// present its value is overwritten unless its lenth is more than 5 characters. - /// </summary> - /// <returns>returns the given document including the Signature element with the hash of the Data block</returns> - XDocument AddHash(); - } -} +/* +* This file is part of VECTO. +* +* Copyright © 2012-2017 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System.Collections.Generic; +using System.Xml.Linq; +using TUGraz.VectoCommon.Hashing; + +namespace TUGraz.VectoHashing +{ + /// <summary> + /// Interface definition for hashing and verifying VECTO XML files + /// </summary> + public interface IVectoHash + { + /// <summary> + /// Get a list of all vecto components contained in the XML file. If a certain + /// component appears multiple times (e.g. tires) it is provided multiple times + /// in the returned list. + /// to get a list with unique entries (and the number of occurences) use e.g. + /// GetContainigComponents().GroupBy(s => s).Select(g => new { Entry = g.Key, Count = g.Count() }) + /// </summary> + /// <returns>List of components contained in the current XML document</returns> + IList<VectoComponents> GetContainigComponents(); + + + /// <summary> + /// Get the digest method used to compute the digest value of the top-level Signature element + /// if there is no top-level Signature element, the default digest method is returned (see XMLHashProvider.DefaultDigestMethod) + /// </summary> + /// <returns>identifier (urn) of the digest method</returns> + string GetDigestMethod(); + + + /// <summary> + /// Get the digest method of the Signature element for the given component. If a component exists + /// multiple times (e.g., tires), the index specifies for which component the digest method is returned + /// </summary> + /// <param name="component">VectoComponent to get the digest method for</param> + /// <param name="index">index of the component to use if a component may exist multiple times. Default: 0</param> + /// <returns>identifier (urn) of the digest method</returns> + string GetDigestMethod(VectoComponents component, int index = 0); + + + /// <summary> + /// Get the list of canonicalization methods used to compute the digest value of the top-level Signature element + /// If there is no top-level Signature element, the default digest method is returned (see XMLHashProvider.DefaulCanonicalizationMethod) + /// </summary> + /// <returns>returns a list of identifiers (urns) of the canonicalization methods</returns> + IEnumerable<string> GetCanonicalizationMethods(); + + + /// <summary> + /// Get the list of canonicalization methods used to compute the digest value of the Signature element + /// for the given component. If a component exists multiple times (e.g., tires) the indes specifies for which + /// component the canonicalization method is returned + /// If there is no top-level Signature element, the default digest method is returned (see XMLHashProvider.DefaulCanonicalizationMethod) + /// </summary> + /// <param name="component">VectoComponent to get the canonicalization methods for</param> + /// <param name="index">index of the component to use if a component may exist multiple times. Default: 0</param> + /// <returns>returns a list of identifiers (urns) of the canonicalization methods</returns> + IEnumerable<string> GetCanonicalizationMethods(VectoComponents component, int index = 0); + + + /// <summary> + /// Reads the hash-value of the top-level Signature element + /// </summary> + /// <returns>base64 encoded hash value</returns> + string ReadHash(); + + + /// <summary> + /// Reads the hash-value of the Signature element for the given component. If a component can exist + /// multiple times (i.e., tires), the index specifies for which component the hash is computed + /// </summary> + /// <param name="component">VectoComponent to get the canonicalization methods for</param> + /// <param name="index">index of the component to use if a component may exist multiple times. Default: 0</param> + /// <returns>base64 encoded hash value</returns> + string ReadHash(VectoComponents component, int index = 0); + + + /// <summary> + /// Computes the hash-value of the top-level Data element (or vehicle) + /// If the canoonicalizationMethods is null the canonicalizationMethods from + /// the signature element are read if available or the default canonicalization is applied + /// If the digestMethod is null the digestMethod from the signature element is read if + /// available or the default digestMethod is used + /// Note: the top-level Data element is required to have an id attribute! + /// </summary> + /// <param name="canonicalizationMethods">Canonicalization methods to use. If null the default methods are applied</param> + /// <param name="digestMethod">Digest method to use. If null, the default digest method is used.</param> + /// <returns>base64 encoded hash value</returns> + string ComputeHash(IEnumerable<string> canonicalizationMethods = null, string digestMethod = null); + + + /// <summary> + /// Computes the hash-value for the given component. If a component can exist multiple times + /// (i.e., Tyres) the index specifies for which component the hash is computed + /// If the canoonicalizationMethods is null the canonicalizationMethods from + /// the signature element are read if available or the default canonicalization is applied + /// If the digestMethod is null the digestMethod from the signature element is read if + /// available or the default digestMethod is used + /// Note: the Data element is required to have an id attribute! + /// </summary> + /// <param name="component">VectoComponent to get the canonicalization methods for</param> + /// <param name="index">index of the component to use if a component may exist multiple times. Default: 0</param> + /// <param name="canonicalizationMethods">list of identifiers (urn) of the canonicalization methods to apply. If null, the default canonicalization methods are used</param> + /// <param name="digestMethod">identifier (urn) of the digest method to use. If null, the default digest method is used</param> + /// <returns></returns> + string ComputeHash(VectoComponents component, int index = 0, IEnumerable<string> canonicalizationMethods = null, + string digestMethod = null); + + + /// <summary> + /// Validates the hash of the top-level component (or vehicle) + /// </summary> + /// <returns>true, if the re-computed digest value matches the document's digest value, false otherwise</returns> + bool ValidateHash(); + + + /// <summary> + /// Validates the hash for the given component. + /// </summary> + /// <param name="component">VectoComponent to get the canonicalization methods for</param> + /// <param name="index">index of the component to use if a component may exist multiple times. Default: 0</param> + /// <returns>true, if the re-computed digest value matches the document's digest value, false otherwise</returns> + bool ValidateHash(VectoComponents component, int index = 0); + + + /// <summary> + /// Computes the hash-value of the outer Data element and adds the according Signature element + /// after the Data element. + /// The default CaonocalizationMethods and DigestMethod are used. + /// Note: the id attribute is added to the Data element automatically. if an id attribute is already + /// present its value is overwritten unless its lenth is more than 5 characters. + /// </summary> + /// <returns>returns the given document including the Signature element with the hash of the Data block</returns> + XDocument AddHash(); + } +} diff --git a/VectoCommon/VectoHashing/VectoComponents.cs b/VectoCommon/VectoCommon/Hashing/VectoComponents.cs similarity index 96% rename from VectoCommon/VectoHashing/VectoComponents.cs rename to VectoCommon/VectoCommon/Hashing/VectoComponents.cs index 81665bc0e7f19511112365273f643a9e5f949907..0b4d642d43c102cc2fa53e87dd55084b4bfc40f3 100644 --- a/VectoCommon/VectoHashing/VectoComponents.cs +++ b/VectoCommon/VectoCommon/Hashing/VectoComponents.cs @@ -1,112 +1,112 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2017 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System; -using TUGraz.VectoCommon.Resources; - -namespace TUGraz.VectoHashing -{ - public enum VectoComponents - { - Engine, - Gearbox, - Axlegear, - Retarder, - TorqueConverter, - Angledrive, - Airdrag, - Tyre, - Vehicle, - VectoOutput, - VectoCustomerInformation - } - - public static class VectoComponentsExtensionMethods - { - public static string XMLElementName(this VectoComponents component) - { - switch (component) { - case VectoComponents.Engine: - return XMLNames.Component_Engine; - case VectoComponents.Gearbox: - return XMLNames.Component_Gearbox; - case VectoComponents.Axlegear: - return XMLNames.Component_Axlegear; - case VectoComponents.Retarder: - return XMLNames.Component_Retarder; - case VectoComponents.TorqueConverter: - return XMLNames.Component_TorqueConverter; - case VectoComponents.Angledrive: - return XMLNames.Component_Angledrive; - case VectoComponents.Airdrag: - return XMLNames.Component_AirDrag; - case VectoComponents.Tyre: - return XMLNames.AxleWheels_Axles_Axle_Tyre; - case VectoComponents.Vehicle: - return XMLNames.Component_Vehicle; - case VectoComponents.VectoOutput: - return "VectoOutput"; - case VectoComponents.VectoCustomerInformation: - return "VectoCustomerInformation"; - default: - throw new ArgumentOutOfRangeException("VectoComponents", component, null); - } - } - - public static string HashIdPrefix(this VectoComponents component) - { - switch (component) { - case VectoComponents.Engine: - return "ENG-"; - case VectoComponents.Gearbox: - return "GBX-"; - case VectoComponents.Axlegear: - return "AXL-"; - case VectoComponents.Retarder: - return "RET-"; - case VectoComponents.TorqueConverter: - return "TC-"; - case VectoComponents.Angledrive: - return "ANGL-"; - case VectoComponents.Airdrag: - return "AD-"; - case VectoComponents.Tyre: - return "TYRE-"; - case VectoComponents.VectoOutput: - return "RESULT-"; - case VectoComponents.VectoCustomerInformation: - return "COC-"; - default: - throw new ArgumentOutOfRangeException("VectoComponents", component, null); - } - } - } +/* +* This file is part of VECTO. +* +* Copyright © 2012-2017 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System; +using TUGraz.VectoCommon.Resources; + +namespace TUGraz.VectoCommon.Hashing +{ + public enum VectoComponents + { + Engine, + Gearbox, + Axlegear, + Retarder, + TorqueConverter, + Angledrive, + Airdrag, + Tyre, + Vehicle, + VectoOutput, + VectoCustomerInformation + } + + public static class VectoComponentsExtensionMethods + { + public static string XMLElementName(this VectoComponents component) + { + switch (component) { + case VectoComponents.Engine: + return XMLNames.Component_Engine; + case VectoComponents.Gearbox: + return XMLNames.Component_Gearbox; + case VectoComponents.Axlegear: + return XMLNames.Component_Axlegear; + case VectoComponents.Retarder: + return XMLNames.Component_Retarder; + case VectoComponents.TorqueConverter: + return XMLNames.Component_TorqueConverter; + case VectoComponents.Angledrive: + return XMLNames.Component_Angledrive; + case VectoComponents.Airdrag: + return XMLNames.Component_AirDrag; + case VectoComponents.Tyre: + return XMLNames.AxleWheels_Axles_Axle_Tyre; + case VectoComponents.Vehicle: + return XMLNames.Component_Vehicle; + case VectoComponents.VectoOutput: + return "VectoOutput"; + case VectoComponents.VectoCustomerInformation: + return "VectoCustomerInformation"; + default: + throw new ArgumentOutOfRangeException("VectoComponents", component, null); + } + } + + public static string HashIdPrefix(this VectoComponents component) + { + switch (component) { + case VectoComponents.Engine: + return "ENG-"; + case VectoComponents.Gearbox: + return "GBX-"; + case VectoComponents.Axlegear: + return "AXL-"; + case VectoComponents.Retarder: + return "RET-"; + case VectoComponents.TorqueConverter: + return "TC-"; + case VectoComponents.Angledrive: + return "ANGL-"; + case VectoComponents.Airdrag: + return "AD-"; + case VectoComponents.Tyre: + return "TYRE-"; + case VectoComponents.VectoOutput: + return "RESULT-"; + case VectoComponents.VectoCustomerInformation: + return "COC-"; + default: + throw new ArgumentOutOfRangeException("VectoComponents", component, null); + } + } + } } \ No newline at end of file diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs index 9bbbb02469d54d708effc76a292701ee5de55ed8..740bd2adbf92234e5605274f9038571e65fd4603 100644 --- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs +++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs @@ -62,7 +62,7 @@ namespace TUGraz.VectoCommon.InputData string CertificationNumber { get; } - string DigestValue { get; } + DigestData DigestValue { get; } } public interface IVehicleDeclarationInputData : IComponentInputData diff --git a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs index eff5db7421653aa7f026719f4e98752a2beff4aa..2f3bbdd57c614faeda63a7b9dda5386af8ddaf40 100644 --- a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs +++ b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs @@ -51,19 +51,4 @@ namespace TUGraz.VectoCommon.InputData IDriverEngineeringInputData DriverInputData { get; } } - public interface IVTPInputDataProvider : IInputDataProvider - { - IVTPJobInputData JobInputData { get; } - } - - public interface IVTPJobInputData - { - IVehicleDeclarationInputData Vehicle { get; } - - IList<ICycleData> Cycles { get; } - - IEnumerable<double> FanPowerCoefficents { get; } - bool SavedInDeclarationMode { get; } - Meter FanDiameter { get; } - } } diff --git a/VectoCommon/VectoCommon/InputData/VTPDeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/VTPDeclarationInputData.cs new file mode 100644 index 0000000000000000000000000000000000000000..3b7d829092dbb5b80081257c88a045eab5737400 --- /dev/null +++ b/VectoCommon/VectoCommon/InputData/VTPDeclarationInputData.cs @@ -0,0 +1,130 @@ +/* +* This file is part of VECTO. +* +* Copyright © 2012-2017 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System.Collections.Generic; +using System.Xml; +using System.Xml.XPath; +using TUGraz.VectoCommon.Hashing; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoHashing; + +namespace TUGraz.VectoCommon.InputData +{ + public interface IVTPDeclarationInputDataProvider : IInputDataProvider + { + IVTPDeclarationJobInputData JobInputData { get; } + + } + + public interface IVTPDeclarationJobInputData + { + IVehicleDeclarationInputData Vehicle { get; } + + IManufacturerReport ManufacturerReportInputData { get; } + + IVectoHash VectoJobHash { get; } + + IVectoHash VectoManufacturerReportHash { get; } + + Meter Mileage { get; } + + JoulePerKilogramm NetCalorificValueTestFuel { get; } + + IList<ICycleData> Cycles { get; } + + IEnumerable<double> FanPowerCoefficents { get; } + + bool SavedInDeclarationMode { get; } + + Meter FanDiameter { get; } + } + + public interface IManufacturerReport + { + string Source { get; } + + IDictionary<VectoComponents,IList<string>> ComponentDigests { get; } + + DigestData JobDigest { get; } + } + + public class DigestData + { + private const string ReferenceQueryXPath = ".//*[local-name()='Reference']/@URI"; + private const string AlgorithmQueryXPath = ".//*[local-name()='Transform']/@Algorithm"; + private const string DigestMethodQueryXPath = ".//*[local-name()='DigestMethod']/@Algorithm"; + private const string DigestValueQuerXPath = ".//*[local-name()='DigestValue']"; + + public DigestData(string reference, string[] c14n, string digestMethod, string digestValue) + { + Reference = reference; + CanonicalizationMethods = c14n; + DigestMethod = digestMethod; + DigestValue = digestValue; + } + + public DigestData(XPathNavigator navigator) + { + Reference = navigator.SelectSingleNode(ReferenceQueryXPath)?.InnerXml; + var nodes = navigator.Select(AlgorithmQueryXPath); + var c14n = new List<string>(); + while (nodes.MoveNext()) { + c14n.Add(nodes.Current.InnerXml); + } + CanonicalizationMethods = c14n.ToArray(); + DigestMethod = navigator.SelectSingleNode(DigestMethodQueryXPath)?.InnerXml; + DigestValue = navigator.SelectSingleNode(DigestValueQuerXPath)?.InnerXml; + } + + public DigestData(XmlNode xmlNode) + { + Reference = xmlNode.SelectSingleNode(ReferenceQueryXPath)?.InnerXml; + var nodes = xmlNode.SelectNodes(AlgorithmQueryXPath); + var c14n = new List<string>(); + if (nodes != null) { + for (var i = 0; i < nodes.Count; i++) { + c14n.Add(nodes[i].InnerXml); + } + } + CanonicalizationMethods = c14n.ToArray(); + DigestMethod = xmlNode.SelectSingleNode(DigestMethodQueryXPath)?.InnerXml; + DigestValue = xmlNode.SelectSingleNode(DigestValueQuerXPath)?.InnerXml; + } + + public string DigestValue { get; } + + public string Reference { get; } + + public string[] CanonicalizationMethods { get; } + public string DigestMethod { get; } + + } +} diff --git a/VectoCommon/VectoCommon/InputData/VTPEngineeringInputData.cs b/VectoCommon/VectoCommon/InputData/VTPEngineeringInputData.cs new file mode 100644 index 0000000000000000000000000000000000000000..a16d4bfc6f8546cbfafdb07582c7c2863d7bde2d --- /dev/null +++ b/VectoCommon/VectoCommon/InputData/VTPEngineeringInputData.cs @@ -0,0 +1,40 @@ +/* +* This file is part of VECTO. +* +* Copyright © 2012-2017 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +namespace TUGraz.VectoCommon.InputData +{ + public interface IVTPEngineeringInputDataProvider : IInputDataProvider + { + IVTPEngineeringJobInputData JobInputData { get; } + } + + public interface IVTPEngineeringJobInputData : IVTPDeclarationJobInputData { } +} diff --git a/VectoCommon/VectoCommon/Models/SimulationType.cs b/VectoCommon/VectoCommon/Models/SimulationType.cs index 4d5c5c587a75f4e860d539fea916e477366dd482..c62ad7faba703c1d0d02aa78df57cb697406b3a9 100644 --- a/VectoCommon/VectoCommon/Models/SimulationType.cs +++ b/VectoCommon/VectoCommon/Models/SimulationType.cs @@ -1,4 +1,35 @@ -using System; +/* +* This file is part of VECTO. +* +* Copyright © 2012-2017 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System; namespace TUGraz.VectoCore.InputData.Reader.Impl { [Flags] diff --git a/VectoCommon/VectoCommon/OutputData/IOutputFileWriter.cs b/VectoCommon/VectoCommon/OutputData/IOutputFileWriter.cs index b98e453798131ba712f3c588926d5cd4f550aa80..f4bad8501d99d575a7d62d385a91145bb27ce6fc 100644 --- a/VectoCommon/VectoCommon/OutputData/IOutputFileWriter.cs +++ b/VectoCommon/VectoCommon/OutputData/IOutputFileWriter.cs @@ -45,7 +45,9 @@ namespace TUGraz.VectoCommon.OutputData void SaveJob(IEngineeringInputDataProvider input, string filename); - void SaveJob(IVTPInputDataProvider input, string filename); + void SaveJob(IVTPEngineeringInputDataProvider input, string filename); + + void SaveJob(IVTPDeclarationInputDataProvider input, string filename); void ExportJob(IEngineeringInputDataProvider input, string filename, bool separateFiles); } diff --git a/VectoCommon/VectoCommon/Properties/Version.cs b/VectoCommon/VectoCommon/Properties/Version.cs index e439021ada7de912554531de13ec82eda6c4564b..19ad6af946ae6becb21b3105d2fde0531adbed04 100644 --- a/VectoCommon/VectoCommon/Properties/Version.cs +++ b/VectoCommon/VectoCommon/Properties/Version.cs @@ -30,5 +30,5 @@ */ using System.Reflection; -[assembly: AssemblyVersion("3.2.1.1133")] -[assembly: AssemblyFileVersion("3.2.1.1133")] \ No newline at end of file +[assembly: AssemblyVersion("3.3.0.1250")] +[assembly: AssemblyFileVersion("3.3.0.1250")] \ No newline at end of file diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs index f2e449a56bc7017177ed2411afa0ebb489b574b2..a4164e8484164b50ab2a997147c925c94777e414 100644 --- a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs +++ b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs @@ -28,2406 +28,2532 @@ * Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ - -namespace TUGraz.VectoCommon.Resources { - using System; - - - /// <summary> - /// A strongly-typed resource class, for looking up localized strings, etc. - /// </summary> - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - public class XMLNames { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal XMLNames() { - } - - /// <summary> - /// Returns the cached ResourceManager instance used by this class. - /// </summary> - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TUGraz.VectoCommon.Resources.XMLNames", typeof(XMLNames).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// <summary> - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// </summary> - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// <summary> - /// Looks up a localized string similar to DeclaredCdxA. - /// </summary> - public static string AirDrag_DeclaredCdxA { - get { - return ResourceManager.GetString("AirDrag_DeclaredCdxA", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Efficiency. - /// </summary> - public static string AngleDrive_Efficiency { - get { - return ResourceManager.GetString("AngleDrive_Efficiency", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Entry. - /// </summary> - public static string Angledrive_LossMap_Entry { - get { - return ResourceManager.GetString("Angledrive_LossMap_Entry", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Ratio. - /// </summary> - public static string AngleDrive_Ratio { - get { - return ResourceManager.GetString("AngleDrive_Ratio", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to TorqueLossMap. - /// </summary> - public static string AngleDrive_TorqueLossMap { - get { - return ResourceManager.GetString("AngleDrive_TorqueLossMap", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to auxiliarySpeed. - /// </summary> - public static string Aux_AuxMap_AuxiliarySpeed_Attr { - get { - return ResourceManager.GetString("Aux_AuxMap_AuxiliarySpeed_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to mechanicalPower. - /// </summary> - public static string Aux_AuxMap_MechanicalPower_Attr { - get { - return ResourceManager.GetString("Aux_AuxMap_MechanicalPower_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Auxiliary. - /// </summary> - public static string Auxiliaries_Auxiliary { - get { - return ResourceManager.GetString("Auxiliaries_Auxiliary", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to AuxMap. - /// </summary> - public static string Auxiliaries_Auxiliary_AuxMap { - get { - return ResourceManager.GetString("Auxiliaries_Auxiliary_AuxMap", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Entry. - /// </summary> - public static string Auxiliaries_Auxiliary_AuxMap_Entry { - get { - return ResourceManager.GetString("Auxiliaries_Auxiliary_AuxMap_Entry", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to ConstantAuxLoad. - /// </summary> - public static string Auxiliaries_Auxiliary_ConstantAuxLoad { - get { - return ResourceManager.GetString("Auxiliaries_Auxiliary_ConstantAuxLoad", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to EfficiencyAuxSupply. - /// </summary> - public static string Auxiliaries_Auxiliary_EfficiencyAuxSupply { - get { - return ResourceManager.GetString("Auxiliaries_Auxiliary_EfficiencyAuxSupply", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to EfficiencyToEngine. - /// </summary> - public static string Auxiliaries_Auxiliary_EfficiencyToEngine { - get { - return ResourceManager.GetString("Auxiliaries_Auxiliary_EfficiencyToEngine", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to id. - /// </summary> - public static string Auxiliaries_Auxiliary_ID_Attr { - get { - return ResourceManager.GetString("Auxiliaries_Auxiliary_ID_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Technology. - /// </summary> - public static string Auxiliaries_Auxiliary_Technology { - get { - return ResourceManager.GetString("Auxiliaries_Auxiliary_Technology", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to TransmissionRatioToEngine. - /// </summary> - public static string Auxiliaries_Auxiliary_TransmissionRatioToEngine { - get { - return ResourceManager.GetString("Auxiliaries_Auxiliary_TransmissionRatioToEngine", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to supplyPower. - /// </summary> - public static string Auxr_AuxMapMapping_SupplyPower_Attr { - get { - return ResourceManager.GetString("Auxr_AuxMapMapping_SupplyPower_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Efficiency. - /// </summary> - public static string Axlegear_Efficiency { - get { - return ResourceManager.GetString("Axlegear_Efficiency", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to LineType. - /// </summary> - public static string Axlegear_LineType { - get { - return ResourceManager.GetString("Axlegear_LineType", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Ratio. - /// </summary> - public static string Axlegear_Ratio { - get { - return ResourceManager.GetString("Axlegear_Ratio", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to TorqueLossMap. - /// </summary> - public static string Axlegear_TorqueLossMap { - get { - return ResourceManager.GetString("Axlegear_TorqueLossMap", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Entry. - /// </summary> - public static string Axlegear_TorqueLossMap_Entry { - get { - return ResourceManager.GetString("Axlegear_TorqueLossMap_Entry", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Axles. - /// </summary> - public static string AxleWheels_Axles { - get { - return ResourceManager.GetString("AxleWheels_Axles", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Axle. - /// </summary> - public static string AxleWheels_Axles_Axle { - get { - return ResourceManager.GetString("AxleWheels_Axles_Axle", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to axleNumber. - /// </summary> - public static string AxleWheels_Axles_Axle_AxleNumber_Attr { - get { - return ResourceManager.GetString("AxleWheels_Axles_Axle_AxleNumber_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to AxleType. - /// </summary> - public static string AxleWheels_Axles_Axle_AxleType { - get { - return ResourceManager.GetString("AxleWheels_Axles_Axle_AxleType", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to AxleType. - /// </summary> - public static string AxleWheels_Axles_Axle_AxleType_Attr { - get { - return ResourceManager.GetString("AxleWheels_Axles_Axle_AxleType_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Dimension. - /// </summary> - public static string AxleWheels_Axles_Axle_Dimension { - get { - return ResourceManager.GetString("AxleWheels_Axles_Axle_Dimension", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to DynamicTyreRadius. - /// </summary> - public static string AxleWheels_Axles_Axle_DynamicTyreRadius { - get { - return ResourceManager.GetString("AxleWheels_Axles_Axle_DynamicTyreRadius", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to FzISO. - /// </summary> - public static string AxleWheels_Axles_Axle_FzISO { - get { - return ResourceManager.GetString("AxleWheels_Axles_Axle_FzISO", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Inertia. - /// </summary> - public static string AxleWheels_Axles_Axle_Inertia { - get { - return ResourceManager.GetString("AxleWheels_Axles_Axle_Inertia", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to RRCDeclared. - /// </summary> - public static string AxleWheels_Axles_Axle_RRCDeclared { - get { - return ResourceManager.GetString("AxleWheels_Axles_Axle_RRCDeclared", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to RRCISO. - /// </summary> - public static string AxleWheels_Axles_Axle_RRCISO { - get { - return ResourceManager.GetString("AxleWheels_Axles_Axle_RRCISO", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Steered. - /// </summary> - public static string AxleWheels_Axles_Axle_Steered { - get { - return ResourceManager.GetString("AxleWheels_Axles_Axle_Steered", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to TwinTyres. - /// </summary> - public static string AxleWheels_Axles_Axle_TwinTyres { - get { - return ResourceManager.GetString("AxleWheels_Axles_Axle_TwinTyres", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to TwinTyres. - /// </summary> - public static string AxleWheels_Axles_Axle_TwinTyres_Attr { - get { - return ResourceManager.GetString("AxleWheels_Axles_Axle_TwinTyres_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Tyre. - /// </summary> - public static string AxleWheels_Axles_Axle_Tyre { - get { - return ResourceManager.GetString("AxleWheels_Axles_Axle_Tyre", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to WeightShare. - /// </summary> - public static string AxleWheels_Axles_Axle_WeightShare { - get { - return ResourceManager.GetString("AxleWheels_Axles_Axle_WeightShare", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to AirDrag. - /// </summary> - public static string Component_AirDrag { - get { - return ResourceManager.GetString("Component_AirDrag", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Angledrive. - /// </summary> - public static string Component_Angledrive { - get { - return ResourceManager.GetString("Component_Angledrive", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to AppVersion. - /// </summary> - public static string Component_AppVersion { - get { - return ResourceManager.GetString("Component_AppVersion", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Auxiliaries. - /// </summary> - public static string Component_Auxiliaries { - get { - return ResourceManager.GetString("Component_Auxiliaries", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Axlegear. - /// </summary> - public static string Component_Axlegear { - get { - return ResourceManager.GetString("Component_Axlegear", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to AxleWheels. - /// </summary> - public static string Component_AxleWheels { - get { - return ResourceManager.GetString("Component_AxleWheels", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to CertificationMethod. - /// </summary> - public static string Component_CertificationMethod { - get { - return ResourceManager.GetString("Component_CertificationMethod", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to CertificationNumber. - /// </summary> - public static string Component_CertificationNumber { - get { - return ResourceManager.GetString("Component_CertificationNumber", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Creator. - /// </summary> - public static string Component_Creator { - get { - return ResourceManager.GetString("Component_Creator", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Date. - /// </summary> - public static string Component_Date { - get { - return ResourceManager.GetString("Component_Date", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to DriverModel. - /// </summary> - public static string Component_DriverModel { - get { - return ResourceManager.GetString("Component_DriverModel", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Engine. - /// </summary> - public static string Component_Engine { - get { - return ResourceManager.GetString("Component_Engine", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Gearbox. - /// </summary> - public static string Component_Gearbox { - get { - return ResourceManager.GetString("Component_Gearbox", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to MainCertificationMethod. - /// </summary> - public static string Component_Gearbox_CertificationMethod { - get { - return ResourceManager.GetString("Component_Gearbox_CertificationMethod", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to id. - /// </summary> - public static string Component_ID_Attr { - get { - return ResourceManager.GetString("Component_ID_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Manufacturer. - /// </summary> - public static string Component_Manufacturer { - get { - return ResourceManager.GetString("Component_Manufacturer", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to ManufacturerAddress. - /// </summary> - public static string Component_ManufacturerAddress { - get { - return ResourceManager.GetString("Component_ManufacturerAddress", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Model. - /// </summary> - public static string Component_Model { - get { - return ResourceManager.GetString("Component_Model", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Retarder. - /// </summary> - public static string Component_Retarder { - get { - return ResourceManager.GetString("Component_Retarder", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to TechnicalReportId. - /// </summary> - public static string Component_TechnicalReportId { - get { - return ResourceManager.GetString("Component_TechnicalReportId", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to TorqueConverter. - /// </summary> - public static string Component_TorqueConverter { - get { - return ResourceManager.GetString("Component_TorqueConverter", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Vehicle. - /// </summary> - public static string Component_Vehicle { - get { - return ResourceManager.GetString("Component_Vehicle", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Data. - /// </summary> - public static string ComponentDataWrapper { - get { - return ResourceManager.GetString("ComponentDataWrapper", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Signature. - /// </summary> - public static string DI_Signature { - get { - return ResourceManager.GetString("DI_Signature", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Algorithm. - /// </summary> - public static string DI_Signature_Algorithm_Attr { - get { - return ResourceManager.GetString("DI_Signature_Algorithm_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Reference. - /// </summary> - public static string DI_Signature_Reference { - get { - return ResourceManager.GetString("DI_Signature_Reference", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to DigestMethod. - /// </summary> - public static string DI_Signature_Reference_DigestMethod { - get { - return ResourceManager.GetString("DI_Signature_Reference_DigestMethod", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to DigestValue. - /// </summary> - public static string DI_Signature_Reference_DigestValue { - get { - return ResourceManager.GetString("DI_Signature_Reference_DigestValue", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Transforms. - /// </summary> - public static string DI_Signature_Reference_Transforms { - get { - return ResourceManager.GetString("DI_Signature_Reference_Transforms", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Transform. - /// </summary> - public static string DI_Signature_Reference_Transforms_Transform { - get { - return ResourceManager.GetString("DI_Signature_Reference_Transforms_Transform", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to URI. - /// </summary> - public static string DI_Signature_Reference_URI_Attr { - get { - return ResourceManager.GetString("DI_Signature_Reference_URI_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to decisionFactorVel. - /// </summary> - public static string Driver_CoastingDFTargetSpeedLookupMapping_DecisionFactor_Attr { - get { - return ResourceManager.GetString("Driver_CoastingDFTargetSpeedLookupMapping_DecisionFactor_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to targetVelocity. - /// </summary> - public static string Driver_CoastingDFTargetSpeedLookupMapping_TargetVelocity_Attr { - get { - return ResourceManager.GetString("Driver_CoastingDFTargetSpeedLookupMapping_TargetVelocity_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to decisionFactorDrop. - /// </summary> - public static string Driver_CoastingDFVelocityDropLookupMapping_DecisionFactorDrop_Attr { - get { - return ResourceManager.GetString("Driver_CoastingDFVelocityDropLookupMapping_DecisionFactorDrop_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to velocityDrop. - /// </summary> - public static string Driver_CoastingDFVelocityDropLookupMapping_VelocityDrop_Attr { - get { - return ResourceManager.GetString("Driver_CoastingDFVelocityDropLookupMapping_VelocityDrop_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to DriverAccelerationCurve. - /// </summary> - public static string DriverModel_DriverAccelerationCurve { - get { - return ResourceManager.GetString("DriverModel_DriverAccelerationCurve", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Entry. - /// </summary> - public static string DriverModel_DriverAccelerationCurve_Entry { - get { - return ResourceManager.GetString("DriverModel_DriverAccelerationCurve_Entry", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to LookAheadCoasting. - /// </summary> - public static string DriverModel_LookAheadCoasting { - get { - return ResourceManager.GetString("DriverModel_LookAheadCoasting", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to DecisionFactorOffset. - /// </summary> - public static string DriverModel_LookAheadCoasting_DecisionFactorOffset { - get { - return ResourceManager.GetString("DriverModel_LookAheadCoasting_DecisionFactorOffset", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to DecisionFactorScaling. - /// </summary> - public static string DriverModel_LookAheadCoasting_DecisionFactorScaling { - get { - return ResourceManager.GetString("DriverModel_LookAheadCoasting_DecisionFactorScaling", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Enabled. - /// </summary> - public static string DriverModel_LookAheadCoasting_Enabled { - get { - return ResourceManager.GetString("DriverModel_LookAheadCoasting_Enabled", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to MinSpeed. - /// </summary> - public static string DriverModel_LookAheadCoasting_MinSpeed { - get { - return ResourceManager.GetString("DriverModel_LookAheadCoasting_MinSpeed", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to PreviewDistanceFactor. - /// </summary> - public static string DriverModel_LookAheadCoasting_PreviewDistanceFactor { - get { - return ResourceManager.GetString("DriverModel_LookAheadCoasting_PreviewDistanceFactor", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to SpeedDependentDecisionFactor. - /// </summary> - public static string DriverModel_LookAheadCoasting_SpeedDependentDecisionFactor { - get { - return ResourceManager.GetString("DriverModel_LookAheadCoasting_SpeedDependentDecisionFactor", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to VelocityDropDecisionFactor. - /// </summary> - public static string DriverModel_LookAheadCoasting_VelocityDropDecisionFactor { - get { - return ResourceManager.GetString("DriverModel_LookAheadCoasting_VelocityDropDecisionFactor", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Overspeed. - /// </summary> - public static string DriverModel_Overspeed { - get { - return ResourceManager.GetString("DriverModel_Overspeed", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to AllowedOverspeed. - /// </summary> - public static string DriverModel_Overspeed_AllowedOverspeed { - get { - return ResourceManager.GetString("DriverModel_Overspeed_AllowedOverspeed", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to AllowedUnderspeed. - /// </summary> - public static string DriverModel_Overspeed_AllowedUnderspeed { - get { - return ResourceManager.GetString("DriverModel_Overspeed_AllowedUnderspeed", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to MinSpeed. - /// </summary> - public static string DriverModel_Overspeed_MinSpeed { - get { - return ResourceManager.GetString("DriverModel_Overspeed_MinSpeed", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Mode. - /// </summary> - public static string DriverModel_Overspeed_Mode { - get { - return ResourceManager.GetString("DriverModel_Overspeed_Mode", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to ShiftStrategyParameters. - /// </summary> - public static string DriverModel_ShiftStrategyParameters { - get { - return ResourceManager.GetString("DriverModel_ShiftStrategyParameters", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to DownshiftAfterUpshiftDelay. - /// </summary> - public static string DriverModel_ShiftStrategyParameters_DownshiftAfterUpshiftDelay { - get { - return ResourceManager.GetString("DriverModel_ShiftStrategyParameters_DownshiftAfterUpshiftDelay", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to StartAcceleration. - /// </summary> - public static string DriverModel_ShiftStrategyParameters_StartAcceleration { - get { - return ResourceManager.GetString("DriverModel_ShiftStrategyParameters_StartAcceleration", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to StartSpeed. - /// </summary> - public static string DriverModel_ShiftStrategyParameters_StartSpeed { - get { - return ResourceManager.GetString("DriverModel_ShiftStrategyParameters_StartSpeed", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to StartTorqueReserve. - /// </summary> - public static string DriverModel_ShiftStrategyParameters_StartTorqueReserve { - get { - return ResourceManager.GetString("DriverModel_ShiftStrategyParameters_StartTorqueReserve", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to TimeBetweenGearshift. - /// </summary> - public static string DriverModel_ShiftStrategyParameters_TimeBetweenGearshift { - get { - return ResourceManager.GetString("DriverModel_ShiftStrategyParameters_TimeBetweenGearshift", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to TorqueReserve. - /// </summary> - public static string DriverModel_ShiftStrategyParameters_TorqueReserve { - get { - return ResourceManager.GetString("DriverModel_ShiftStrategyParameters_TorqueReserve", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to UpshiftAfterDownshiftDelay. - /// </summary> - public static string DriverModel_ShiftStrategyParameters_UpshiftAfterDownshiftDelay { - get { - return ResourceManager.GetString("DriverModel_ShiftStrategyParameters_UpshiftAfterDownshiftDelay", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to UpshiftMinAcceleration. - /// </summary> - public static string DriverModel_ShiftStrategyParameters_UpshiftMinAcceleration { - get { - return ResourceManager.GetString("DriverModel_ShiftStrategyParameters_UpshiftMinAcceleration", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to BFColdHot. - /// </summary> - public static string Engine_ColdHotBalancingFactor { - get { - return ResourceManager.GetString("Engine_ColdHotBalancingFactor", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to CFNCV. - /// </summary> - public static string Engine_CorrecionFactor_NCV { - get { - return ResourceManager.GetString("Engine_CorrecionFactor_NCV", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to CFRegPer. - /// </summary> - public static string Engine_CorrectionFactor_RegPer { - get { - return ResourceManager.GetString("Engine_CorrectionFactor_RegPer", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Displacement. - /// </summary> - public static string Engine_Displacement { - get { - return ResourceManager.GetString("Engine_Displacement", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to engineSpeed. - /// </summary> - public static string Engine_EngineFullLoadCurve_EngineSpeed_Attr { - get { - return ResourceManager.GetString("Engine_EngineFullLoadCurve_EngineSpeed_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to FuelConsumptionMap. - /// </summary> - public static string Engine_FuelConsumptionMap { - get { - return ResourceManager.GetString("Engine_FuelConsumptionMap", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to engineSpeed. - /// </summary> - public static string Engine_FuelConsumptionMap_EngineSpeed_Attr { - get { - return ResourceManager.GetString("Engine_FuelConsumptionMap_EngineSpeed_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Entry. - /// </summary> - public static string Engine_FuelConsumptionMap_Entry { - get { - return ResourceManager.GetString("Engine_FuelConsumptionMap_Entry", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to fuelConsumption. - /// </summary> - public static string Engine_FuelConsumptionMap_FuelConsumption_Attr { - get { - return ResourceManager.GetString("Engine_FuelConsumptionMap_FuelConsumption_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to torque. - /// </summary> - public static string Engine_FuelConsumptionMap_Torque_Attr { - get { - return ResourceManager.GetString("Engine_FuelConsumptionMap_Torque_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to FuelType. - /// </summary> - public static string Engine_FuelType { - get { - return ResourceManager.GetString("Engine_FuelType", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to FullLoadAndDragCurve. - /// </summary> - public static string Engine_FullLoadAndDragCurve { - get { - return ResourceManager.GetString("Engine_FullLoadAndDragCurve", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to dragTorque. - /// </summary> - public static string Engine_FullLoadCurve_DragTorque_Attr { - get { - return ResourceManager.GetString("Engine_FullLoadCurve_DragTorque_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Entry. - /// </summary> - public static string Engine_FullLoadCurve_Entry { - get { - return ResourceManager.GetString("Engine_FullLoadCurve_Entry", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to maxTorque. - /// </summary> - public static string Engine_FullLoadCurve_MaxTorque_Attr { - get { - return ResourceManager.GetString("Engine_FullLoadCurve_MaxTorque_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to IdlingSpeed. - /// </summary> - public static string Engine_IdlingSpeed { - get { - return ResourceManager.GetString("Engine_IdlingSpeed", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Inertia. - /// </summary> - public static string Engine_Inertia { - get { - return ResourceManager.GetString("Engine_Inertia", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to MaxEngineTorque. - /// </summary> - public static string Engine_MaxTorque { - get { - return ResourceManager.GetString("Engine_MaxTorque", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to RatedPower. - /// </summary> - public static string Engine_RatedPower { - get { - return ResourceManager.GetString("Engine_RatedPower", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to RatedSpeed. - /// </summary> - public static string Engine_RatedSpeed { - get { - return ResourceManager.GetString("Engine_RatedSpeed", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to WHTCEngineering. - /// </summary> - public static string Engine_WHTCEngineering { - get { - return ResourceManager.GetString("Engine_WHTCEngineering", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to WHTCMotorway. - /// </summary> - public static string Engine_WHTCMotorway { - get { - return ResourceManager.GetString("Engine_WHTCMotorway", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to WHTCRural. - /// </summary> - public static string Engine_WHTCRural { - get { - return ResourceManager.GetString("Engine_WHTCRural", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to WHTCUrban. - /// </summary> - public static string Engine_WHTCUrban { - get { - return ResourceManager.GetString("Engine_WHTCUrban", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Resource. - /// </summary> - public static string ExternalResource { - get { - return ResourceManager.GetString("ExternalResource", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to component. - /// </summary> - public static string ExtResource_Component_Attr { - get { - return ResourceManager.GetString("ExtResource_Component_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to file. - /// </summary> - public static string ExtResource_File_Attr { - get { - return ResourceManager.GetString("ExtResource_File_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to type. - /// </summary> - public static string ExtResource_Type_Attr { - get { - return ResourceManager.GetString("ExtResource_Type_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to csv. - /// </summary> - public static string ExtResource_Type_Value_CSV { - get { - return ResourceManager.GetString("ExtResource_Type_Value_CSV", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to xml. - /// </summary> - public static string ExtResource_Type_Value_XML { - get { - return ResourceManager.GetString("ExtResource_Type_Value_XML", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to engineTorque. - /// </summary> - public static string Gear_ShiftPolygon_EngineTorque_Attr { - get { - return ResourceManager.GetString("Gear_ShiftPolygon_EngineTorque_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to downshiftSpeed. - /// </summary> - public static string Gear_ShiftPolygonMapping_DownshiftSpeed_Attr { - get { - return ResourceManager.GetString("Gear_ShiftPolygonMapping_DownshiftSpeed_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to upshiftSpeed. - /// </summary> - public static string Gear_ShiftPolygonMapping_UpshiftSpeed_Attr { - get { - return ResourceManager.GetString("Gear_ShiftPolygonMapping_UpshiftSpeed_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Efficiency. - /// </summary> - public static string Gearbox_Gear_Efficiency { - get { - return ResourceManager.GetString("Gearbox_Gear_Efficiency", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to number. - /// </summary> - public static string Gearbox_Gear_GearNumber_Attr { - get { - return ResourceManager.GetString("Gearbox_Gear_GearNumber_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to MaxSpeed. - /// </summary> - public static string Gearbox_Gear_MaxSpeed { - get { - return ResourceManager.GetString("Gearbox_Gear_MaxSpeed", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Ratio. - /// </summary> - public static string Gearbox_Gear_Ratio { - get { - return ResourceManager.GetString("Gearbox_Gear_Ratio", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to TorqueLossMap. - /// </summary> - public static string Gearbox_Gear_TorqueLossMap { - get { - return ResourceManager.GetString("Gearbox_Gear_TorqueLossMap", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Entry. - /// </summary> - public static string Gearbox_Gear_TorqueLossMap_Entry { - get { - return ResourceManager.GetString("Gearbox_Gear_TorqueLossMap_Entry", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Gears. - /// </summary> - public static string Gearbox_Gears { - get { - return ResourceManager.GetString("Gearbox_Gears", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Gear. - /// </summary> - public static string Gearbox_Gears_Gear { - get { - return ResourceManager.GetString("Gearbox_Gears_Gear", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to ShiftPolygon. - /// </summary> - public static string Gearbox_Gears_Gear_ShiftPolygon { - get { - return ResourceManager.GetString("Gearbox_Gears_Gear_ShiftPolygon", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Entry. - /// </summary> - public static string Gearbox_Gears_Gear_ShiftPolygon_Entry { - get { - return ResourceManager.GetString("Gearbox_Gears_Gear_ShiftPolygon_Entry", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to MaxTorque. - /// </summary> - public static string Gearbox_Gears_MaxTorque { - get { - return ResourceManager.GetString("Gearbox_Gears_MaxTorque", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Inertia. - /// </summary> - public static string Gearbox_Inertia { - get { - return ResourceManager.GetString("Gearbox_Inertia", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to TractionInterruption. - /// </summary> - public static string Gearbox_TractionInterruption { - get { - return ResourceManager.GetString("Gearbox_TractionInterruption", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to TransmissionType. - /// </summary> - public static string Gearbox_TransmissionType { - get { - return ResourceManager.GetString("Gearbox_TransmissionType", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Entry. - /// </summary> - public static string LookAheadCoasting_SpeedDependentDecisionFactor_Entry { - get { - return ResourceManager.GetString("LookAheadCoasting_SpeedDependentDecisionFactor_Entry", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Entry. - /// </summary> - public static string LookAheadCoasting_VelocityDropDecisionFactor_Entry { - get { - return ResourceManager.GetString("LookAheadCoasting_VelocityDropDecisionFactor_Entry", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Cycle. - /// </summary> - public static string Missions_Cycle { - get { - return ResourceManager.GetString("Missions_Cycle", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to CdxA. - /// </summary> - public static string Report_AirDrag_CdxA { - get { - return ResourceManager.GetString("Report_AirDrag_CdxA", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to ApplicationInformation. - /// </summary> - public static string Report_ApplicationInfo_ApplicationInformation { - get { - return ResourceManager.GetString("Report_ApplicationInfo_ApplicationInformation", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Date. - /// </summary> - public static string Report_ApplicationInfo_Date { - get { - return ResourceManager.GetString("Report_ApplicationInfo_Date", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to SimulationToolVersion. - /// </summary> - public static string Report_ApplicationInfo_SimulationToolVersion { - get { - return ResourceManager.GetString("Report_ApplicationInfo_SimulationToolVersion", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to CertificationMethod. - /// </summary> - public static string Report_Component_CertificationMethod { - get { - return ResourceManager.GetString("Report_Component_CertificationMethod", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to CertificationNumber. - /// </summary> - public static string Report_Component_CertificationNumber { - get { - return ResourceManager.GetString("Report_Component_CertificationNumber", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to TransmissionRatioFinalGear. - /// </summary> - public static string Report_Gearbox_TransmissionRatioFinalGear { - get { - return ResourceManager.GetString("Report_Gearbox_TransmissionRatioFinalGear", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to GearsCount. - /// </summary> - public static string Report_GetGearbox_GearsCount { - get { - return ResourceManager.GetString("Report_GetGearbox_GearsCount", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to InputDataSignature. - /// </summary> - public static string Report_Input_Signature { - get { - return ResourceManager.GetString("Report_Input_Signature", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Mission. - /// </summary> - public static string Report_Result_Mission { - get { - return ResourceManager.GetString("Report_Result_Mission", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Result. - /// </summary> - public static string Report_Result_Result { - get { - return ResourceManager.GetString("Report_Result_Result", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Status. - /// </summary> - public static string Report_Result_Status { - get { - return ResourceManager.GetString("Report_Result_Status", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to status. - /// </summary> - public static string Report_Result_Status_Attr { - get { - return ResourceManager.GetString("Report_Result_Status_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to AverageSpeed. - /// </summary> - public static string Report_ResultEntry_AverageSpeed { - get { - return ResourceManager.GetString("Report_ResultEntry_AverageSpeed", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Distance. - /// </summary> - public static string Report_ResultEntry_Distance { - get { - return ResourceManager.GetString("Report_ResultEntry_Distance", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to FuelType. - /// </summary> - public static string Report_ResultEntry_FuelType { - get { - return ResourceManager.GetString("Report_ResultEntry_FuelType", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to FullLoadDrivingtimePercentage. - /// </summary> - public static string Report_ResultEntry_FullLoadDrivingtimePercentage { - get { - return ResourceManager.GetString("Report_ResultEntry_FullLoadDrivingtimePercentage", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to GearshiftCount. - /// </summary> - public static string Report_ResultEntry_GearshiftCount { - get { - return ResourceManager.GetString("Report_ResultEntry_GearshiftCount", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to MaxAcceleration. - /// </summary> - public static string Report_ResultEntry_MaxAcceleration { - get { - return ResourceManager.GetString("Report_ResultEntry_MaxAcceleration", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to MaxDeceleration. - /// </summary> - public static string Report_ResultEntry_MaxDeceleration { - get { - return ResourceManager.GetString("Report_ResultEntry_MaxDeceleration", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to MaxSpeed. - /// </summary> - public static string Report_ResultEntry_MaxSpeed { - get { - return ResourceManager.GetString("Report_ResultEntry_MaxSpeed", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to MinSpeed. - /// </summary> - public static string Report_ResultEntry_MinSpeed { - get { - return ResourceManager.GetString("Report_ResultEntry_MinSpeed", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Payload. - /// </summary> - public static string Report_ResultEntry_Payload { - get { - return ResourceManager.GetString("Report_ResultEntry_Payload", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to SimulationParameters. - /// </summary> - public static string Report_ResultEntry_SimulationParameters { - get { - return ResourceManager.GetString("Report_ResultEntry_SimulationParameters", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to TotalVehicleMass. - /// </summary> - public static string Report_ResultEntry_TotalVehicleMass { - get { - return ResourceManager.GetString("Report_ResultEntry_TotalVehicleMass", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to VehiclePerformance. - /// </summary> - public static string Report_ResultEntry_VehiclePerformance { - get { - return ResourceManager.GetString("Report_ResultEntry_VehiclePerformance", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to CO2. - /// </summary> - public static string Report_Results_CO2 { - get { - return ResourceManager.GetString("Report_Results_CO2", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Error. - /// </summary> - public static string Report_Results_Error { - get { - return ResourceManager.GetString("Report_Results_Error", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to ErrorDetails. - /// </summary> - public static string Report_Results_ErrorDetails { - get { - return ResourceManager.GetString("Report_Results_ErrorDetails", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to FuelConsumption. - /// </summary> - public static string Report_Results_FuelConsumption { - get { - return ResourceManager.GetString("Report_Results_FuelConsumption", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to unit. - /// </summary> - public static string Report_Results_Unit_Attr { - get { - return ResourceManager.GetString("Report_Results_Unit_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to TyreCertificationNumber. - /// </summary> - public static string Report_Tyre_TyreCertificationNumber { - get { - return ResourceManager.GetString("Report_Tyre_TyreCertificationNumber", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to TyreDimension. - /// </summary> - public static string Report_Tyre_TyreDimension { - get { - return ResourceManager.GetString("Report_Tyre_TyreDimension", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to TyreRRCDeclared. - /// </summary> - public static string Report_Tyre_TyreRRCDeclared { - get { - return ResourceManager.GetString("Report_Tyre_TyreRRCDeclared", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to AverageRRC. - /// </summary> - public static string Report_Vehicle_AverageRRC { - get { - return ResourceManager.GetString("Report_Vehicle_AverageRRC", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to AxleRatio. - /// </summary> - public static string Report_Vehicle_AxleRatio { - get { - return ResourceManager.GetString("Report_Vehicle_AxleRatio", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to EngineDisplacement. - /// </summary> - public static string Report_Vehicle_EngineDisplacement { - get { - return ResourceManager.GetString("Report_Vehicle_EngineDisplacement", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to EngineRatedPower. - /// </summary> - public static string Report_Vehicle_EngineRatedPower { - get { - return ResourceManager.GetString("Report_Vehicle_EngineRatedPower", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Retarder. - /// </summary> - public static string Report_Vehicle_Retarder { - get { - return ResourceManager.GetString("Report_Vehicle_Retarder", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to TransmissionMainCertificationMethod. - /// </summary> - public static string Report_Vehicle_TransmissionCertificationMethod { - get { - return ResourceManager.GetString("Report_Vehicle_TransmissionCertificationMethod", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to VehicleGroup. - /// </summary> - public static string Report_Vehicle_VehicleGroup { - get { - return ResourceManager.GetString("Report_Vehicle_VehicleGroup", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to RetarderLossMap. - /// </summary> - public static string Retarder_RetarderLossMap { - get { - return ResourceManager.GetString("Retarder_RetarderLossMap", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Entry. - /// </summary> - public static string Retarder_RetarderLossMap_Entry { - get { - return ResourceManager.GetString("Retarder_RetarderLossMap_Entry", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to retarderSpeed. - /// </summary> - public static string Retarder_RetarderLossmap_RetarderSpeed_Attr { - get { - return ResourceManager.GetString("Retarder_RetarderLossmap_RetarderSpeed_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to torqueLoss. - /// </summary> - public static string Retarder_RetarderLossmap_TorqueLoss_Attr { - get { - return ResourceManager.GetString("Retarder_RetarderLossmap_TorqueLoss_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Characteristics. - /// </summary> - public static string TorqueConverter_Characteristics { - get { - return ResourceManager.GetString("TorqueConverter_Characteristics", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Entry. - /// </summary> - public static string TorqueConverter_Characteristics_Entry { - get { - return ResourceManager.GetString("TorqueConverter_Characteristics_Entry", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Inertia. - /// </summary> - public static string TorqueConverter_Inertia { - get { - return ResourceManager.GetString("TorqueConverter_Inertia", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to ReferenceRPM. - /// </summary> - public static string TorqueConverter_ReferenceRPM { - get { - return ResourceManager.GetString("TorqueConverter_ReferenceRPM", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to ShiftPolygon. - /// </summary> - public static string TorqueConverter_ShiftPolygon { - get { - return ResourceManager.GetString("TorqueConverter_ShiftPolygon", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Entry. - /// </summary> - public static string TorqueConverter_ShiftPolygon_Entry { - get { - return ResourceManager.GetString("TorqueConverter_ShiftPolygon_Entry", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to speedRatio. - /// </summary> - public static string TorqueConverterData_SpeedRatio_Attr { - get { - return ResourceManager.GetString("TorqueConverterData_SpeedRatio_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to torqueRatio. - /// </summary> - public static string TorqueConverterData_TorqueRatio_Attr { - get { - return ResourceManager.GetString("TorqueConverterData_TorqueRatio_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to inputTorqueRef. - /// </summary> - public static string TorqueConverterDataMapping_InputTorqueRef_Attr { - get { - return ResourceManager.GetString("TorqueConverterDataMapping_InputTorqueRef_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to inputSpeed. - /// </summary> - public static string TransmissionLossmap_InputSpeed_Attr { - get { - return ResourceManager.GetString("TransmissionLossmap_InputSpeed_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to inputTorque. - /// </summary> - public static string TransmissionLossmap_InputTorque_Attr { - get { - return ResourceManager.GetString("TransmissionLossmap_InputTorque_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to torqueLoss. - /// </summary> - public static string TransmissionLossmap_TorqueLoss_Attr { - get { - return ResourceManager.GetString("TransmissionLossmap_TorqueLoss_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to VectoComponentEngineering. - /// </summary> - public static string VectoComponentEngineering { - get { - return ResourceManager.GetString("VectoComponentEngineering", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to VectoCustomerInformation. - /// </summary> - public static string VectoCustomerReport { - get { - return ResourceManager.GetString("VectoCustomerReport", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to VectoInputDeclaration. - /// </summary> - public static string VectoInputDeclaration { - get { - return ResourceManager.GetString("VectoInputDeclaration", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to VectoInputEngineering. - /// </summary> - public static string VectoInputEngineering { - get { - return ResourceManager.GetString("VectoInputEngineering", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to EngineOnlyMode. - /// </summary> - public static string VectoJob_EngineOnlyMode { - get { - return ResourceManager.GetString("VectoJob_EngineOnlyMode", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to MissionCycles. - /// </summary> - public static string VectoJob_MissionCycles { - get { - return ResourceManager.GetString("VectoJob_MissionCycles", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to VectoOutput. - /// </summary> - public static string VectoManufacturerReport { - get { - return ResourceManager.GetString("VectoManufacturerReport", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to maxAcceleration. - /// </summary> - public static string Vehicle_AccelerationCurve_MaxAcceleration_Attr { - get { - return ResourceManager.GetString("Vehicle_AccelerationCurve_MaxAcceleration_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to maxDeceleration. - /// </summary> - public static string Vehicle_AccelerationCurve_MaxDeceleration_Attr { - get { - return ResourceManager.GetString("Vehicle_AccelerationCurve_MaxDeceleration_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to vehicleSpeed. - /// </summary> - public static string Vehicle_AccelerationCurve_VehicleSpeed_Attr { - get { - return ResourceManager.GetString("Vehicle_AccelerationCurve_VehicleSpeed_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to AdvancedDriverAssist. - /// </summary> - public static string Vehicle_AdvancedDriverAssist { - get { - return ResourceManager.GetString("Vehicle_AdvancedDriverAssist", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to EngineStartStop. - /// </summary> - public static string Vehicle_AdvancedDriverAssist_EngineStartStop { - get { - return ResourceManager.GetString("Vehicle_AdvancedDriverAssist_EngineStartStop", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to ActivationDelay. - /// </summary> - public static string Vehicle_AdvancedDriverAssist_EngineStartStop_ActivationDelay { - get { - return ResourceManager.GetString("Vehicle_AdvancedDriverAssist_EngineStartStop_ActivationDelay", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Enabled. - /// </summary> - public static string Vehicle_AdvancedDriverAssist_EngineStartStop_Enabled { - get { - return ResourceManager.GetString("Vehicle_AdvancedDriverAssist_EngineStartStop_Enabled", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to MaxSpeed. - /// </summary> - public static string Vehicle_AdvancedDriverAssist_EngineStartStop_MaxSpeed { - get { - return ResourceManager.GetString("Vehicle_AdvancedDriverAssist_EngineStartStop_MaxSpeed", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to MinOnTime. - /// </summary> - public static string Vehicle_AdvancedDriverAssist_EngineStartStop_MinOnTime { - get { - return ResourceManager.GetString("Vehicle_AdvancedDriverAssist_EngineStartStop_MinOnTime", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to CdxA. - /// </summary> - public static string Vehicle_AirDragArea { - get { - return ResourceManager.GetString("Vehicle_AirDragArea", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to AngledriveType. - /// </summary> - public static string Vehicle_AngledriveType { - get { - return ResourceManager.GetString("Vehicle_AngledriveType", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to AxleConfiguration. - /// </summary> - public static string Vehicle_AxleConfiguration { - get { - return ResourceManager.GetString("Vehicle_AxleConfiguration", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Components. - /// </summary> - public static string Vehicle_Components { - get { - return ResourceManager.GetString("Vehicle_Components", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to CrossWindCorrectionData. - /// </summary> - public static string Vehicle_CrosswindCorrectionData { - get { - return ResourceManager.GetString("Vehicle_CrosswindCorrectionData", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Entry. - /// </summary> - public static string Vehicle_CrosswindCorrectionData_Entry { - get { - return ResourceManager.GetString("Vehicle_CrosswindCorrectionData_Entry", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to beta. - /// </summary> - public static string Vehicle_CrosswindCorrectionMap_Beta { - get { - return ResourceManager.GetString("Vehicle_CrosswindCorrectionMap_Beta", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to CdScalingFactor. - /// </summary> - public static string Vehicle_CrosswindCorrectionMap_CdScalingFactor { - get { - return ResourceManager.GetString("Vehicle_CrosswindCorrectionMap_CdScalingFactor", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to deltaCdxA. - /// </summary> - public static string Vehicle_CrosswindCorrectionMap_DeltaCdxA { - get { - return ResourceManager.GetString("Vehicle_CrosswindCorrectionMap_DeltaCdxA", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to vehicleSpeed. - /// </summary> - public static string Vehicle_CrosswindCorrectionMap_VehicleSpeed_Attr { - get { - return ResourceManager.GetString("Vehicle_CrosswindCorrectionMap_VehicleSpeed_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to CrossWindCorrectionMode. - /// </summary> - public static string Vehicle_CrossWindCorrectionMode { - get { - return ResourceManager.GetString("Vehicle_CrossWindCorrectionMode", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to CurbMassChassis. - /// </summary> - public static string Vehicle_CurbMassChassis { - get { - return ResourceManager.GetString("Vehicle_CurbMassChassis", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to CurbMassExtra. - /// </summary> - public static string Vehicle_CurbMassExtra { - get { - return ResourceManager.GetString("Vehicle_CurbMassExtra", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to CurbWeightChassis. - /// </summary> - public static string Vehicle_CurbWeightChassis { - get { - return ResourceManager.GetString("Vehicle_CurbWeightChassis", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to CurbWeightExtra. - /// </summary> - public static string Vehicle_CurbWeightExtra { - get { - return ResourceManager.GetString("Vehicle_CurbWeightExtra", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to GrossVehicleMass. - /// </summary> - public static string Vehicle_GrossVehicleMass { - get { - return ResourceManager.GetString("Vehicle_GrossVehicleMass", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to IdlingSpeed. - /// </summary> - public static string Vehicle_IdlingSpeed { - get { - return ResourceManager.GetString("Vehicle_IdlingSpeed", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to LegislativeClass. - /// </summary> - public static string Vehicle_LegislativeClass { - get { - return ResourceManager.GetString("Vehicle_LegislativeClass", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Loading. - /// </summary> - public static string Vehicle_Loading { - get { - return ResourceManager.GetString("Vehicle_Loading", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to PTO. - /// </summary> - public static string Vehicle_PTO { - get { - return ResourceManager.GetString("Vehicle_PTO", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to PTOOtherElements. - /// </summary> - public static string Vehicle_PTO_OtherElements { - get { - return ResourceManager.GetString("Vehicle_PTO_OtherElements", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to PTOShaftsGearWheels. - /// </summary> - public static string Vehicle_PTO_ShaftsGearWheels { - get { - return ResourceManager.GetString("Vehicle_PTO_ShaftsGearWheels", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to PTOCycle. - /// </summary> - public static string Vehicle_PTOCycle { - get { - return ResourceManager.GetString("Vehicle_PTOCycle", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to engineSpeed. - /// </summary> - public static string Vehicle_PTOCycle_EngineSpeed_Attr { - get { - return ResourceManager.GetString("Vehicle_PTOCycle_EngineSpeed_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Entry. - /// </summary> - public static string Vehicle_PTOCycle_Entry { - get { - return ResourceManager.GetString("Vehicle_PTOCycle_Entry", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to time. - /// </summary> - public static string Vehicle_PTOCycle_Time_Attr { - get { - return ResourceManager.GetString("Vehicle_PTOCycle_Time_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to torque. - /// </summary> - public static string Vehicle_PTOCycle_Torque_Attr { - get { - return ResourceManager.GetString("Vehicle_PTOCycle_Torque_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to PTOIdleLossMap. - /// </summary> - public static string Vehicle_PTOIdleLossMap { - get { - return ResourceManager.GetString("Vehicle_PTOIdleLossMap", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to engineSpeed. - /// </summary> - public static string Vehicle_PTOIdleLossMap_EngineSpeed_Attr { - get { - return ResourceManager.GetString("Vehicle_PTOIdleLossMap_EngineSpeed_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Entry. - /// </summary> - public static string Vehicle_PTOIdleLossMap_Entry { - get { - return ResourceManager.GetString("Vehicle_PTOIdleLossMap_Entry", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to ptoTorqueLoss. - /// </summary> - public static string Vehicle_PTOIdleLossMap_TorqueLoss_Attr { - get { - return ResourceManager.GetString("Vehicle_PTOIdleLossMap_TorqueLoss_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to PTOType. - /// </summary> - public static string Vehicle_PTOType { - get { - return ResourceManager.GetString("Vehicle_PTOType", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to RetarderRatio. - /// </summary> - public static string Vehicle_RetarderRatio { - get { - return ResourceManager.GetString("Vehicle_RetarderRatio", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to RetarderType. - /// </summary> - public static string Vehicle_RetarderType { - get { - return ResourceManager.GetString("Vehicle_RetarderType", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to SteeredAxles. - /// </summary> - public static string Vehicle_SteeredAxles { - get { - return ResourceManager.GetString("Vehicle_SteeredAxles", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to TorqueLimits. - /// </summary> - public static string Vehicle_TorqueLimits { - get { - return ResourceManager.GetString("Vehicle_TorqueLimits", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to Entry. - /// </summary> - public static string Vehicle_TorqueLimits_Entry { - get { - return ResourceManager.GetString("Vehicle_TorqueLimits_Entry", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to gear. - /// </summary> - public static string Vehicle_TorqueLimits_Entry_Gear_Attr { - get { - return ResourceManager.GetString("Vehicle_TorqueLimits_Entry_Gear_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to maxTorque. - /// </summary> - public static string Vehicle_TorqueLimits_Entry_MaxTorque_Attr { - get { - return ResourceManager.GetString("Vehicle_TorqueLimits_Entry_MaxTorque_Attr", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to VehicleCategory. - /// </summary> - public static string Vehicle_VehicleCategory { - get { - return ResourceManager.GetString("Vehicle_VehicleCategory", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to VIN. - /// </summary> - public static string Vehicle_VIN { - get { - return ResourceManager.GetString("Vehicle_VIN", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace TUGraz.VectoCommon.Resources { + using System; + + + /// <summary> + /// A strongly-typed resource class, for looking up localized strings, etc. + /// </summary> + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class XMLNames { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal XMLNames() { + } + + /// <summary> + /// Returns the cached ResourceManager instance used by this class. + /// </summary> + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TUGraz.VectoCommon.Resources.XMLNames", typeof(XMLNames).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// <summary> + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// </summary> + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// <summary> + /// Looks up a localized string similar to DeclaredCdxA. + /// </summary> + public static string AirDrag_DeclaredCdxA { + get { + return ResourceManager.GetString("AirDrag_DeclaredCdxA", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Efficiency. + /// </summary> + public static string AngleDrive_Efficiency { + get { + return ResourceManager.GetString("AngleDrive_Efficiency", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Entry. + /// </summary> + public static string Angledrive_LossMap_Entry { + get { + return ResourceManager.GetString("Angledrive_LossMap_Entry", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Ratio. + /// </summary> + public static string AngleDrive_Ratio { + get { + return ResourceManager.GetString("AngleDrive_Ratio", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to TorqueLossMap. + /// </summary> + public static string AngleDrive_TorqueLossMap { + get { + return ResourceManager.GetString("AngleDrive_TorqueLossMap", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to auxiliarySpeed. + /// </summary> + public static string Aux_AuxMap_AuxiliarySpeed_Attr { + get { + return ResourceManager.GetString("Aux_AuxMap_AuxiliarySpeed_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to mechanicalPower. + /// </summary> + public static string Aux_AuxMap_MechanicalPower_Attr { + get { + return ResourceManager.GetString("Aux_AuxMap_MechanicalPower_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Auxiliary. + /// </summary> + public static string Auxiliaries_Auxiliary { + get { + return ResourceManager.GetString("Auxiliaries_Auxiliary", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to AuxMap. + /// </summary> + public static string Auxiliaries_Auxiliary_AuxMap { + get { + return ResourceManager.GetString("Auxiliaries_Auxiliary_AuxMap", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Entry. + /// </summary> + public static string Auxiliaries_Auxiliary_AuxMap_Entry { + get { + return ResourceManager.GetString("Auxiliaries_Auxiliary_AuxMap_Entry", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to ConstantAuxLoad. + /// </summary> + public static string Auxiliaries_Auxiliary_ConstantAuxLoad { + get { + return ResourceManager.GetString("Auxiliaries_Auxiliary_ConstantAuxLoad", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to EfficiencyAuxSupply. + /// </summary> + public static string Auxiliaries_Auxiliary_EfficiencyAuxSupply { + get { + return ResourceManager.GetString("Auxiliaries_Auxiliary_EfficiencyAuxSupply", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to EfficiencyToEngine. + /// </summary> + public static string Auxiliaries_Auxiliary_EfficiencyToEngine { + get { + return ResourceManager.GetString("Auxiliaries_Auxiliary_EfficiencyToEngine", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to id. + /// </summary> + public static string Auxiliaries_Auxiliary_ID_Attr { + get { + return ResourceManager.GetString("Auxiliaries_Auxiliary_ID_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Technology. + /// </summary> + public static string Auxiliaries_Auxiliary_Technology { + get { + return ResourceManager.GetString("Auxiliaries_Auxiliary_Technology", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to TransmissionRatioToEngine. + /// </summary> + public static string Auxiliaries_Auxiliary_TransmissionRatioToEngine { + get { + return ResourceManager.GetString("Auxiliaries_Auxiliary_TransmissionRatioToEngine", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to supplyPower. + /// </summary> + public static string Auxr_AuxMapMapping_SupplyPower_Attr { + get { + return ResourceManager.GetString("Auxr_AuxMapMapping_SupplyPower_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Efficiency. + /// </summary> + public static string Axlegear_Efficiency { + get { + return ResourceManager.GetString("Axlegear_Efficiency", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to LineType. + /// </summary> + public static string Axlegear_LineType { + get { + return ResourceManager.GetString("Axlegear_LineType", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Ratio. + /// </summary> + public static string Axlegear_Ratio { + get { + return ResourceManager.GetString("Axlegear_Ratio", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to TorqueLossMap. + /// </summary> + public static string Axlegear_TorqueLossMap { + get { + return ResourceManager.GetString("Axlegear_TorqueLossMap", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Entry. + /// </summary> + public static string Axlegear_TorqueLossMap_Entry { + get { + return ResourceManager.GetString("Axlegear_TorqueLossMap_Entry", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Axles. + /// </summary> + public static string AxleWheels_Axles { + get { + return ResourceManager.GetString("AxleWheels_Axles", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Axle. + /// </summary> + public static string AxleWheels_Axles_Axle { + get { + return ResourceManager.GetString("AxleWheels_Axles_Axle", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to axleNumber. + /// </summary> + public static string AxleWheels_Axles_Axle_AxleNumber_Attr { + get { + return ResourceManager.GetString("AxleWheels_Axles_Axle_AxleNumber_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to AxleType. + /// </summary> + public static string AxleWheels_Axles_Axle_AxleType { + get { + return ResourceManager.GetString("AxleWheels_Axles_Axle_AxleType", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to AxleType. + /// </summary> + public static string AxleWheels_Axles_Axle_AxleType_Attr { + get { + return ResourceManager.GetString("AxleWheels_Axles_Axle_AxleType_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Dimension. + /// </summary> + public static string AxleWheels_Axles_Axle_Dimension { + get { + return ResourceManager.GetString("AxleWheels_Axles_Axle_Dimension", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to DynamicTyreRadius. + /// </summary> + public static string AxleWheels_Axles_Axle_DynamicTyreRadius { + get { + return ResourceManager.GetString("AxleWheels_Axles_Axle_DynamicTyreRadius", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to FzISO. + /// </summary> + public static string AxleWheels_Axles_Axle_FzISO { + get { + return ResourceManager.GetString("AxleWheels_Axles_Axle_FzISO", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Inertia. + /// </summary> + public static string AxleWheels_Axles_Axle_Inertia { + get { + return ResourceManager.GetString("AxleWheels_Axles_Axle_Inertia", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to RRCDeclared. + /// </summary> + public static string AxleWheels_Axles_Axle_RRCDeclared { + get { + return ResourceManager.GetString("AxleWheels_Axles_Axle_RRCDeclared", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to RRCISO. + /// </summary> + public static string AxleWheels_Axles_Axle_RRCISO { + get { + return ResourceManager.GetString("AxleWheels_Axles_Axle_RRCISO", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Steered. + /// </summary> + public static string AxleWheels_Axles_Axle_Steered { + get { + return ResourceManager.GetString("AxleWheels_Axles_Axle_Steered", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to TwinTyres. + /// </summary> + public static string AxleWheels_Axles_Axle_TwinTyres { + get { + return ResourceManager.GetString("AxleWheels_Axles_Axle_TwinTyres", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to TwinTyres. + /// </summary> + public static string AxleWheels_Axles_Axle_TwinTyres_Attr { + get { + return ResourceManager.GetString("AxleWheels_Axles_Axle_TwinTyres_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Tyre. + /// </summary> + public static string AxleWheels_Axles_Axle_Tyre { + get { + return ResourceManager.GetString("AxleWheels_Axles_Axle_Tyre", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to WeightShare. + /// </summary> + public static string AxleWheels_Axles_Axle_WeightShare { + get { + return ResourceManager.GetString("AxleWheels_Axles_Axle_WeightShare", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to AirDrag. + /// </summary> + public static string Component_AirDrag { + get { + return ResourceManager.GetString("Component_AirDrag", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Angledrive. + /// </summary> + public static string Component_Angledrive { + get { + return ResourceManager.GetString("Component_Angledrive", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to AppVersion. + /// </summary> + public static string Component_AppVersion { + get { + return ResourceManager.GetString("Component_AppVersion", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Auxiliaries. + /// </summary> + public static string Component_Auxiliaries { + get { + return ResourceManager.GetString("Component_Auxiliaries", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Axlegear. + /// </summary> + public static string Component_Axlegear { + get { + return ResourceManager.GetString("Component_Axlegear", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to AxleWheels. + /// </summary> + public static string Component_AxleWheels { + get { + return ResourceManager.GetString("Component_AxleWheels", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to CertificationMethod. + /// </summary> + public static string Component_CertificationMethod { + get { + return ResourceManager.GetString("Component_CertificationMethod", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to CertificationNumber. + /// </summary> + public static string Component_CertificationNumber { + get { + return ResourceManager.GetString("Component_CertificationNumber", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Creator. + /// </summary> + public static string Component_Creator { + get { + return ResourceManager.GetString("Component_Creator", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Date. + /// </summary> + public static string Component_Date { + get { + return ResourceManager.GetString("Component_Date", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to DriverModel. + /// </summary> + public static string Component_DriverModel { + get { + return ResourceManager.GetString("Component_DriverModel", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Engine. + /// </summary> + public static string Component_Engine { + get { + return ResourceManager.GetString("Component_Engine", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Gearbox. + /// </summary> + public static string Component_Gearbox { + get { + return ResourceManager.GetString("Component_Gearbox", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to MainCertificationMethod. + /// </summary> + public static string Component_Gearbox_CertificationMethod { + get { + return ResourceManager.GetString("Component_Gearbox_CertificationMethod", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to id. + /// </summary> + public static string Component_ID_Attr { + get { + return ResourceManager.GetString("Component_ID_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Manufacturer. + /// </summary> + public static string Component_Manufacturer { + get { + return ResourceManager.GetString("Component_Manufacturer", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to ManufacturerAddress. + /// </summary> + public static string Component_ManufacturerAddress { + get { + return ResourceManager.GetString("Component_ManufacturerAddress", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Model. + /// </summary> + public static string Component_Model { + get { + return ResourceManager.GetString("Component_Model", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Retarder. + /// </summary> + public static string Component_Retarder { + get { + return ResourceManager.GetString("Component_Retarder", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to TechnicalReportId. + /// </summary> + public static string Component_TechnicalReportId { + get { + return ResourceManager.GetString("Component_TechnicalReportId", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to TorqueConverter. + /// </summary> + public static string Component_TorqueConverter { + get { + return ResourceManager.GetString("Component_TorqueConverter", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Vehicle. + /// </summary> + public static string Component_Vehicle { + get { + return ResourceManager.GetString("Component_Vehicle", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Data. + /// </summary> + public static string ComponentDataWrapper { + get { + return ResourceManager.GetString("ComponentDataWrapper", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Signature. + /// </summary> + public static string DI_Signature { + get { + return ResourceManager.GetString("DI_Signature", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Algorithm. + /// </summary> + public static string DI_Signature_Algorithm_Attr { + get { + return ResourceManager.GetString("DI_Signature_Algorithm_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Reference. + /// </summary> + public static string DI_Signature_Reference { + get { + return ResourceManager.GetString("DI_Signature_Reference", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to DigestMethod. + /// </summary> + public static string DI_Signature_Reference_DigestMethod { + get { + return ResourceManager.GetString("DI_Signature_Reference_DigestMethod", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to DigestValue. + /// </summary> + public static string DI_Signature_Reference_DigestValue { + get { + return ResourceManager.GetString("DI_Signature_Reference_DigestValue", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Transforms. + /// </summary> + public static string DI_Signature_Reference_Transforms { + get { + return ResourceManager.GetString("DI_Signature_Reference_Transforms", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Transform. + /// </summary> + public static string DI_Signature_Reference_Transforms_Transform { + get { + return ResourceManager.GetString("DI_Signature_Reference_Transforms_Transform", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to URI. + /// </summary> + public static string DI_Signature_Reference_URI_Attr { + get { + return ResourceManager.GetString("DI_Signature_Reference_URI_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to decisionFactorVel. + /// </summary> + public static string Driver_CoastingDFTargetSpeedLookupMapping_DecisionFactor_Attr { + get { + return ResourceManager.GetString("Driver_CoastingDFTargetSpeedLookupMapping_DecisionFactor_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to targetVelocity. + /// </summary> + public static string Driver_CoastingDFTargetSpeedLookupMapping_TargetVelocity_Attr { + get { + return ResourceManager.GetString("Driver_CoastingDFTargetSpeedLookupMapping_TargetVelocity_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to decisionFactorDrop. + /// </summary> + public static string Driver_CoastingDFVelocityDropLookupMapping_DecisionFactorDrop_Attr { + get { + return ResourceManager.GetString("Driver_CoastingDFVelocityDropLookupMapping_DecisionFactorDrop_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to velocityDrop. + /// </summary> + public static string Driver_CoastingDFVelocityDropLookupMapping_VelocityDrop_Attr { + get { + return ResourceManager.GetString("Driver_CoastingDFVelocityDropLookupMapping_VelocityDrop_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to DriverAccelerationCurve. + /// </summary> + public static string DriverModel_DriverAccelerationCurve { + get { + return ResourceManager.GetString("DriverModel_DriverAccelerationCurve", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Entry. + /// </summary> + public static string DriverModel_DriverAccelerationCurve_Entry { + get { + return ResourceManager.GetString("DriverModel_DriverAccelerationCurve_Entry", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to LookAheadCoasting. + /// </summary> + public static string DriverModel_LookAheadCoasting { + get { + return ResourceManager.GetString("DriverModel_LookAheadCoasting", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to DecisionFactorOffset. + /// </summary> + public static string DriverModel_LookAheadCoasting_DecisionFactorOffset { + get { + return ResourceManager.GetString("DriverModel_LookAheadCoasting_DecisionFactorOffset", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to DecisionFactorScaling. + /// </summary> + public static string DriverModel_LookAheadCoasting_DecisionFactorScaling { + get { + return ResourceManager.GetString("DriverModel_LookAheadCoasting_DecisionFactorScaling", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Enabled. + /// </summary> + public static string DriverModel_LookAheadCoasting_Enabled { + get { + return ResourceManager.GetString("DriverModel_LookAheadCoasting_Enabled", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to MinSpeed. + /// </summary> + public static string DriverModel_LookAheadCoasting_MinSpeed { + get { + return ResourceManager.GetString("DriverModel_LookAheadCoasting_MinSpeed", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to PreviewDistanceFactor. + /// </summary> + public static string DriverModel_LookAheadCoasting_PreviewDistanceFactor { + get { + return ResourceManager.GetString("DriverModel_LookAheadCoasting_PreviewDistanceFactor", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to SpeedDependentDecisionFactor. + /// </summary> + public static string DriverModel_LookAheadCoasting_SpeedDependentDecisionFactor { + get { + return ResourceManager.GetString("DriverModel_LookAheadCoasting_SpeedDependentDecisionFactor", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to VelocityDropDecisionFactor. + /// </summary> + public static string DriverModel_LookAheadCoasting_VelocityDropDecisionFactor { + get { + return ResourceManager.GetString("DriverModel_LookAheadCoasting_VelocityDropDecisionFactor", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Overspeed. + /// </summary> + public static string DriverModel_Overspeed { + get { + return ResourceManager.GetString("DriverModel_Overspeed", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to AllowedOverspeed. + /// </summary> + public static string DriverModel_Overspeed_AllowedOverspeed { + get { + return ResourceManager.GetString("DriverModel_Overspeed_AllowedOverspeed", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to AllowedUnderspeed. + /// </summary> + public static string DriverModel_Overspeed_AllowedUnderspeed { + get { + return ResourceManager.GetString("DriverModel_Overspeed_AllowedUnderspeed", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to MinSpeed. + /// </summary> + public static string DriverModel_Overspeed_MinSpeed { + get { + return ResourceManager.GetString("DriverModel_Overspeed_MinSpeed", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Mode. + /// </summary> + public static string DriverModel_Overspeed_Mode { + get { + return ResourceManager.GetString("DriverModel_Overspeed_Mode", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to ShiftStrategyParameters. + /// </summary> + public static string DriverModel_ShiftStrategyParameters { + get { + return ResourceManager.GetString("DriverModel_ShiftStrategyParameters", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to DownshiftAfterUpshiftDelay. + /// </summary> + public static string DriverModel_ShiftStrategyParameters_DownshiftAfterUpshiftDelay { + get { + return ResourceManager.GetString("DriverModel_ShiftStrategyParameters_DownshiftAfterUpshiftDelay", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to StartAcceleration. + /// </summary> + public static string DriverModel_ShiftStrategyParameters_StartAcceleration { + get { + return ResourceManager.GetString("DriverModel_ShiftStrategyParameters_StartAcceleration", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to StartSpeed. + /// </summary> + public static string DriverModel_ShiftStrategyParameters_StartSpeed { + get { + return ResourceManager.GetString("DriverModel_ShiftStrategyParameters_StartSpeed", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to StartTorqueReserve. + /// </summary> + public static string DriverModel_ShiftStrategyParameters_StartTorqueReserve { + get { + return ResourceManager.GetString("DriverModel_ShiftStrategyParameters_StartTorqueReserve", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to TimeBetweenGearshift. + /// </summary> + public static string DriverModel_ShiftStrategyParameters_TimeBetweenGearshift { + get { + return ResourceManager.GetString("DriverModel_ShiftStrategyParameters_TimeBetweenGearshift", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to TorqueReserve. + /// </summary> + public static string DriverModel_ShiftStrategyParameters_TorqueReserve { + get { + return ResourceManager.GetString("DriverModel_ShiftStrategyParameters_TorqueReserve", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to UpshiftAfterDownshiftDelay. + /// </summary> + public static string DriverModel_ShiftStrategyParameters_UpshiftAfterDownshiftDelay { + get { + return ResourceManager.GetString("DriverModel_ShiftStrategyParameters_UpshiftAfterDownshiftDelay", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to UpshiftMinAcceleration. + /// </summary> + public static string DriverModel_ShiftStrategyParameters_UpshiftMinAcceleration { + get { + return ResourceManager.GetString("DriverModel_ShiftStrategyParameters_UpshiftMinAcceleration", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to BFColdHot. + /// </summary> + public static string Engine_ColdHotBalancingFactor { + get { + return ResourceManager.GetString("Engine_ColdHotBalancingFactor", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to CFNCV. + /// </summary> + public static string Engine_CorrecionFactor_NCV { + get { + return ResourceManager.GetString("Engine_CorrecionFactor_NCV", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to CFRegPer. + /// </summary> + public static string Engine_CorrectionFactor_RegPer { + get { + return ResourceManager.GetString("Engine_CorrectionFactor_RegPer", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Displacement. + /// </summary> + public static string Engine_Displacement { + get { + return ResourceManager.GetString("Engine_Displacement", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to engineSpeed. + /// </summary> + public static string Engine_EngineFullLoadCurve_EngineSpeed_Attr { + get { + return ResourceManager.GetString("Engine_EngineFullLoadCurve_EngineSpeed_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to FuelConsumptionMap. + /// </summary> + public static string Engine_FuelConsumptionMap { + get { + return ResourceManager.GetString("Engine_FuelConsumptionMap", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to engineSpeed. + /// </summary> + public static string Engine_FuelConsumptionMap_EngineSpeed_Attr { + get { + return ResourceManager.GetString("Engine_FuelConsumptionMap_EngineSpeed_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Entry. + /// </summary> + public static string Engine_FuelConsumptionMap_Entry { + get { + return ResourceManager.GetString("Engine_FuelConsumptionMap_Entry", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to fuelConsumption. + /// </summary> + public static string Engine_FuelConsumptionMap_FuelConsumption_Attr { + get { + return ResourceManager.GetString("Engine_FuelConsumptionMap_FuelConsumption_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to torque. + /// </summary> + public static string Engine_FuelConsumptionMap_Torque_Attr { + get { + return ResourceManager.GetString("Engine_FuelConsumptionMap_Torque_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to FuelType. + /// </summary> + public static string Engine_FuelType { + get { + return ResourceManager.GetString("Engine_FuelType", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to FullLoadAndDragCurve. + /// </summary> + public static string Engine_FullLoadAndDragCurve { + get { + return ResourceManager.GetString("Engine_FullLoadAndDragCurve", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to dragTorque. + /// </summary> + public static string Engine_FullLoadCurve_DragTorque_Attr { + get { + return ResourceManager.GetString("Engine_FullLoadCurve_DragTorque_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Entry. + /// </summary> + public static string Engine_FullLoadCurve_Entry { + get { + return ResourceManager.GetString("Engine_FullLoadCurve_Entry", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to maxTorque. + /// </summary> + public static string Engine_FullLoadCurve_MaxTorque_Attr { + get { + return ResourceManager.GetString("Engine_FullLoadCurve_MaxTorque_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to IdlingSpeed. + /// </summary> + public static string Engine_IdlingSpeed { + get { + return ResourceManager.GetString("Engine_IdlingSpeed", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Inertia. + /// </summary> + public static string Engine_Inertia { + get { + return ResourceManager.GetString("Engine_Inertia", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to MaxEngineTorque. + /// </summary> + public static string Engine_MaxTorque { + get { + return ResourceManager.GetString("Engine_MaxTorque", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to RatedPower. + /// </summary> + public static string Engine_RatedPower { + get { + return ResourceManager.GetString("Engine_RatedPower", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to RatedSpeed. + /// </summary> + public static string Engine_RatedSpeed { + get { + return ResourceManager.GetString("Engine_RatedSpeed", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to WHTCEngineering. + /// </summary> + public static string Engine_WHTCEngineering { + get { + return ResourceManager.GetString("Engine_WHTCEngineering", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to WHTCMotorway. + /// </summary> + public static string Engine_WHTCMotorway { + get { + return ResourceManager.GetString("Engine_WHTCMotorway", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to WHTCRural. + /// </summary> + public static string Engine_WHTCRural { + get { + return ResourceManager.GetString("Engine_WHTCRural", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to WHTCUrban. + /// </summary> + public static string Engine_WHTCUrban { + get { + return ResourceManager.GetString("Engine_WHTCUrban", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Resource. + /// </summary> + public static string ExternalResource { + get { + return ResourceManager.GetString("ExternalResource", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to component. + /// </summary> + public static string ExtResource_Component_Attr { + get { + return ResourceManager.GetString("ExtResource_Component_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to file. + /// </summary> + public static string ExtResource_File_Attr { + get { + return ResourceManager.GetString("ExtResource_File_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to type. + /// </summary> + public static string ExtResource_Type_Attr { + get { + return ResourceManager.GetString("ExtResource_Type_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to csv. + /// </summary> + public static string ExtResource_Type_Value_CSV { + get { + return ResourceManager.GetString("ExtResource_Type_Value_CSV", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to xml. + /// </summary> + public static string ExtResource_Type_Value_XML { + get { + return ResourceManager.GetString("ExtResource_Type_Value_XML", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to engineTorque. + /// </summary> + public static string Gear_ShiftPolygon_EngineTorque_Attr { + get { + return ResourceManager.GetString("Gear_ShiftPolygon_EngineTorque_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to downshiftSpeed. + /// </summary> + public static string Gear_ShiftPolygonMapping_DownshiftSpeed_Attr { + get { + return ResourceManager.GetString("Gear_ShiftPolygonMapping_DownshiftSpeed_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to upshiftSpeed. + /// </summary> + public static string Gear_ShiftPolygonMapping_UpshiftSpeed_Attr { + get { + return ResourceManager.GetString("Gear_ShiftPolygonMapping_UpshiftSpeed_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Efficiency. + /// </summary> + public static string Gearbox_Gear_Efficiency { + get { + return ResourceManager.GetString("Gearbox_Gear_Efficiency", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to number. + /// </summary> + public static string Gearbox_Gear_GearNumber_Attr { + get { + return ResourceManager.GetString("Gearbox_Gear_GearNumber_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to MaxSpeed. + /// </summary> + public static string Gearbox_Gear_MaxSpeed { + get { + return ResourceManager.GetString("Gearbox_Gear_MaxSpeed", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Ratio. + /// </summary> + public static string Gearbox_Gear_Ratio { + get { + return ResourceManager.GetString("Gearbox_Gear_Ratio", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to TorqueLossMap. + /// </summary> + public static string Gearbox_Gear_TorqueLossMap { + get { + return ResourceManager.GetString("Gearbox_Gear_TorqueLossMap", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Entry. + /// </summary> + public static string Gearbox_Gear_TorqueLossMap_Entry { + get { + return ResourceManager.GetString("Gearbox_Gear_TorqueLossMap_Entry", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Gears. + /// </summary> + public static string Gearbox_Gears { + get { + return ResourceManager.GetString("Gearbox_Gears", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Gear. + /// </summary> + public static string Gearbox_Gears_Gear { + get { + return ResourceManager.GetString("Gearbox_Gears_Gear", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to ShiftPolygon. + /// </summary> + public static string Gearbox_Gears_Gear_ShiftPolygon { + get { + return ResourceManager.GetString("Gearbox_Gears_Gear_ShiftPolygon", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Entry. + /// </summary> + public static string Gearbox_Gears_Gear_ShiftPolygon_Entry { + get { + return ResourceManager.GetString("Gearbox_Gears_Gear_ShiftPolygon_Entry", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to MaxTorque. + /// </summary> + public static string Gearbox_Gears_MaxTorque { + get { + return ResourceManager.GetString("Gearbox_Gears_MaxTorque", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Inertia. + /// </summary> + public static string Gearbox_Inertia { + get { + return ResourceManager.GetString("Gearbox_Inertia", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to TractionInterruption. + /// </summary> + public static string Gearbox_TractionInterruption { + get { + return ResourceManager.GetString("Gearbox_TractionInterruption", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to TransmissionType. + /// </summary> + public static string Gearbox_TransmissionType { + get { + return ResourceManager.GetString("Gearbox_TransmissionType", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Entry. + /// </summary> + public static string LookAheadCoasting_SpeedDependentDecisionFactor_Entry { + get { + return ResourceManager.GetString("LookAheadCoasting_SpeedDependentDecisionFactor_Entry", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Entry. + /// </summary> + public static string LookAheadCoasting_VelocityDropDecisionFactor_Entry { + get { + return ResourceManager.GetString("LookAheadCoasting_VelocityDropDecisionFactor_Entry", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Cycle. + /// </summary> + public static string Missions_Cycle { + get { + return ResourceManager.GetString("Missions_Cycle", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to CdxA. + /// </summary> + public static string Report_AirDrag_CdxA { + get { + return ResourceManager.GetString("Report_AirDrag_CdxA", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to ApplicationInformation. + /// </summary> + public static string Report_ApplicationInfo_ApplicationInformation { + get { + return ResourceManager.GetString("Report_ApplicationInfo_ApplicationInformation", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Date. + /// </summary> + public static string Report_ApplicationInfo_Date { + get { + return ResourceManager.GetString("Report_ApplicationInfo_Date", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to SimulationToolVersion. + /// </summary> + public static string Report_ApplicationInfo_SimulationToolVersion { + get { + return ResourceManager.GetString("Report_ApplicationInfo_SimulationToolVersion", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to CertificationMethod. + /// </summary> + public static string Report_Component_CertificationMethod { + get { + return ResourceManager.GetString("Report_Component_CertificationMethod", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to CertificationNumber. + /// </summary> + public static string Report_Component_CertificationNumber { + get { + return ResourceManager.GetString("Report_Component_CertificationNumber", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to TransmissionRatioFinalGear. + /// </summary> + public static string Report_Gearbox_TransmissionRatioFinalGear { + get { + return ResourceManager.GetString("Report_Gearbox_TransmissionRatioFinalGear", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to GearsCount. + /// </summary> + public static string Report_GetGearbox_GearsCount { + get { + return ResourceManager.GetString("Report_GetGearbox_GearsCount", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to InputDataSignature. + /// </summary> + public static string Report_Input_Signature { + get { + return ResourceManager.GetString("Report_Input_Signature", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Mission. + /// </summary> + public static string Report_Result_Mission { + get { + return ResourceManager.GetString("Report_Result_Mission", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Result. + /// </summary> + public static string Report_Result_Result { + get { + return ResourceManager.GetString("Report_Result_Result", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Status. + /// </summary> + public static string Report_Result_Status { + get { + return ResourceManager.GetString("Report_Result_Status", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to status. + /// </summary> + public static string Report_Result_Status_Attr { + get { + return ResourceManager.GetString("Report_Result_Status_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to AverageSpeed. + /// </summary> + public static string Report_ResultEntry_AverageSpeed { + get { + return ResourceManager.GetString("Report_ResultEntry_AverageSpeed", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to AverageDrivingSpeed. + /// </summary> + public static string Report_ResultEntry_AvgDrivingSpeed { + get { + return ResourceManager.GetString("Report_ResultEntry_AvgDrivingSpeed", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Distance. + /// </summary> + public static string Report_ResultEntry_Distance { + get { + return ResourceManager.GetString("Report_ResultEntry_Distance", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to EngineSpeedDriving. + /// </summary> + public static string Report_ResultEntry_EngineSpeedDriving { + get { + return ResourceManager.GetString("Report_ResultEntry_EngineSpeedDriving", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Average. + /// </summary> + public static string Report_ResultEntry_EngineSpeedDriving_Avg { + get { + return ResourceManager.GetString("Report_ResultEntry_EngineSpeedDriving_Avg", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Max. + /// </summary> + public static string Report_ResultEntry_EngineSpeedDriving_Max { + get { + return ResourceManager.GetString("Report_ResultEntry_EngineSpeedDriving_Max", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Min. + /// </summary> + public static string Report_ResultEntry_EngineSpeedDriving_Min { + get { + return ResourceManager.GetString("Report_ResultEntry_EngineSpeedDriving_Min", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to FuelType. + /// </summary> + public static string Report_ResultEntry_FuelType { + get { + return ResourceManager.GetString("Report_ResultEntry_FuelType", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to FullLoadDrivingtimePercentage. + /// </summary> + public static string Report_ResultEntry_FullLoadDrivingtimePercentage { + get { + return ResourceManager.GetString("Report_ResultEntry_FullLoadDrivingtimePercentage", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to GearshiftCount. + /// </summary> + public static string Report_ResultEntry_GearshiftCount { + get { + return ResourceManager.GetString("Report_ResultEntry_GearshiftCount", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to MaxAcceleration. + /// </summary> + public static string Report_ResultEntry_MaxAcceleration { + get { + return ResourceManager.GetString("Report_ResultEntry_MaxAcceleration", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to MaxDeceleration. + /// </summary> + public static string Report_ResultEntry_MaxDeceleration { + get { + return ResourceManager.GetString("Report_ResultEntry_MaxDeceleration", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to MaxSpeed. + /// </summary> + public static string Report_ResultEntry_MaxSpeed { + get { + return ResourceManager.GetString("Report_ResultEntry_MaxSpeed", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to MinSpeed. + /// </summary> + public static string Report_ResultEntry_MinSpeed { + get { + return ResourceManager.GetString("Report_ResultEntry_MinSpeed", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Payload. + /// </summary> + public static string Report_ResultEntry_Payload { + get { + return ResourceManager.GetString("Report_ResultEntry_Payload", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to SimulationParameters. + /// </summary> + public static string Report_ResultEntry_SimulationParameters { + get { + return ResourceManager.GetString("Report_ResultEntry_SimulationParameters", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to TotalVehicleMass. + /// </summary> + public static string Report_ResultEntry_TotalVehicleMass { + get { + return ResourceManager.GetString("Report_ResultEntry_TotalVehicleMass", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to VehiclePerformance. + /// </summary> + public static string Report_ResultEntry_VehiclePerformance { + get { + return ResourceManager.GetString("Report_ResultEntry_VehiclePerformance", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to CO2. + /// </summary> + public static string Report_Results_CO2 { + get { + return ResourceManager.GetString("Report_Results_CO2", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Error. + /// </summary> + public static string Report_Results_Error { + get { + return ResourceManager.GetString("Report_Results_Error", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to ErrorDetails. + /// </summary> + public static string Report_Results_ErrorDetails { + get { + return ResourceManager.GetString("Report_Results_ErrorDetails", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to FuelConsumption. + /// </summary> + public static string Report_Results_FuelConsumption { + get { + return ResourceManager.GetString("Report_Results_FuelConsumption", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to unit. + /// </summary> + public static string Report_Results_Unit_Attr { + get { + return ResourceManager.GetString("Report_Results_Unit_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to TyreCertificationNumber. + /// </summary> + public static string Report_Tyre_TyreCertificationNumber { + get { + return ResourceManager.GetString("Report_Tyre_TyreCertificationNumber", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to TyreDimension. + /// </summary> + public static string Report_Tyre_TyreDimension { + get { + return ResourceManager.GetString("Report_Tyre_TyreDimension", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to TyreRRCDeclared. + /// </summary> + public static string Report_Tyre_TyreRRCDeclared { + get { + return ResourceManager.GetString("Report_Tyre_TyreRRCDeclared", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to AverageRRC. + /// </summary> + public static string Report_Vehicle_AverageRRC { + get { + return ResourceManager.GetString("Report_Vehicle_AverageRRC", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to AxleRatio. + /// </summary> + public static string Report_Vehicle_AxleRatio { + get { + return ResourceManager.GetString("Report_Vehicle_AxleRatio", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to EngineDisplacement. + /// </summary> + public static string Report_Vehicle_EngineDisplacement { + get { + return ResourceManager.GetString("Report_Vehicle_EngineDisplacement", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to EngineRatedPower. + /// </summary> + public static string Report_Vehicle_EngineRatedPower { + get { + return ResourceManager.GetString("Report_Vehicle_EngineRatedPower", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Retarder. + /// </summary> + public static string Report_Vehicle_Retarder { + get { + return ResourceManager.GetString("Report_Vehicle_Retarder", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to TransmissionMainCertificationMethod. + /// </summary> + public static string Report_Vehicle_TransmissionCertificationMethod { + get { + return ResourceManager.GetString("Report_Vehicle_TransmissionCertificationMethod", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to VehicleGroup. + /// </summary> + public static string Report_Vehicle_VehicleGroup { + get { + return ResourceManager.GetString("Report_Vehicle_VehicleGroup", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to RetarderLossMap. + /// </summary> + public static string Retarder_RetarderLossMap { + get { + return ResourceManager.GetString("Retarder_RetarderLossMap", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Entry. + /// </summary> + public static string Retarder_RetarderLossMap_Entry { + get { + return ResourceManager.GetString("Retarder_RetarderLossMap_Entry", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to retarderSpeed. + /// </summary> + public static string Retarder_RetarderLossmap_RetarderSpeed_Attr { + get { + return ResourceManager.GetString("Retarder_RetarderLossmap_RetarderSpeed_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to torqueLoss. + /// </summary> + public static string Retarder_RetarderLossmap_TorqueLoss_Attr { + get { + return ResourceManager.GetString("Retarder_RetarderLossmap_TorqueLoss_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Characteristics. + /// </summary> + public static string TorqueConverter_Characteristics { + get { + return ResourceManager.GetString("TorqueConverter_Characteristics", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Entry. + /// </summary> + public static string TorqueConverter_Characteristics_Entry { + get { + return ResourceManager.GetString("TorqueConverter_Characteristics_Entry", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Inertia. + /// </summary> + public static string TorqueConverter_Inertia { + get { + return ResourceManager.GetString("TorqueConverter_Inertia", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to ReferenceRPM. + /// </summary> + public static string TorqueConverter_ReferenceRPM { + get { + return ResourceManager.GetString("TorqueConverter_ReferenceRPM", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to ShiftPolygon. + /// </summary> + public static string TorqueConverter_ShiftPolygon { + get { + return ResourceManager.GetString("TorqueConverter_ShiftPolygon", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Entry. + /// </summary> + public static string TorqueConverter_ShiftPolygon_Entry { + get { + return ResourceManager.GetString("TorqueConverter_ShiftPolygon_Entry", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to speedRatio. + /// </summary> + public static string TorqueConverterData_SpeedRatio_Attr { + get { + return ResourceManager.GetString("TorqueConverterData_SpeedRatio_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to torqueRatio. + /// </summary> + public static string TorqueConverterData_TorqueRatio_Attr { + get { + return ResourceManager.GetString("TorqueConverterData_TorqueRatio_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to inputTorqueRef. + /// </summary> + public static string TorqueConverterDataMapping_InputTorqueRef_Attr { + get { + return ResourceManager.GetString("TorqueConverterDataMapping_InputTorqueRef_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to inputSpeed. + /// </summary> + public static string TransmissionLossmap_InputSpeed_Attr { + get { + return ResourceManager.GetString("TransmissionLossmap_InputSpeed_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to inputTorque. + /// </summary> + public static string TransmissionLossmap_InputTorque_Attr { + get { + return ResourceManager.GetString("TransmissionLossmap_InputTorque_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to torqueLoss. + /// </summary> + public static string TransmissionLossmap_TorqueLoss_Attr { + get { + return ResourceManager.GetString("TransmissionLossmap_TorqueLoss_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to kg. + /// </summary> + public static string Unit_kg { + get { + return ResourceManager.GetString("Unit_kg", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to km. + /// </summary> + public static string Unit_km { + get { + return ResourceManager.GetString("Unit_km", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to km/h. + /// </summary> + public static string Unit_kmph { + get { + return ResourceManager.GetString("Unit_kmph", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to kW. + /// </summary> + public static string Unit_kW { + get { + return ResourceManager.GetString("Unit_kW", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to ltr. + /// </summary> + public static string Unit_ltr { + get { + return ResourceManager.GetString("Unit_ltr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to m/s². + /// </summary> + public static string Unit_mps2 { + get { + return ResourceManager.GetString("Unit_mps2", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to rpm. + /// </summary> + public static string Unit_RPM { + get { + return ResourceManager.GetString("Unit_RPM", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to t. + /// </summary> + public static string Unit_t { + get { + return ResourceManager.GetString("Unit_t", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to VectoComponentEngineering. + /// </summary> + public static string VectoComponentEngineering { + get { + return ResourceManager.GetString("VectoComponentEngineering", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to VectoCustomerInformation. + /// </summary> + public static string VectoCustomerReport { + get { + return ResourceManager.GetString("VectoCustomerReport", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to VectoInputDeclaration. + /// </summary> + public static string VectoInputDeclaration { + get { + return ResourceManager.GetString("VectoInputDeclaration", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to VectoInputEngineering. + /// </summary> + public static string VectoInputEngineering { + get { + return ResourceManager.GetString("VectoInputEngineering", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to EngineOnlyMode. + /// </summary> + public static string VectoJob_EngineOnlyMode { + get { + return ResourceManager.GetString("VectoJob_EngineOnlyMode", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to MissionCycles. + /// </summary> + public static string VectoJob_MissionCycles { + get { + return ResourceManager.GetString("VectoJob_MissionCycles", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to VectoOutput. + /// </summary> + public static string VectoManufacturerReport { + get { + return ResourceManager.GetString("VectoManufacturerReport", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to maxAcceleration. + /// </summary> + public static string Vehicle_AccelerationCurve_MaxAcceleration_Attr { + get { + return ResourceManager.GetString("Vehicle_AccelerationCurve_MaxAcceleration_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to maxDeceleration. + /// </summary> + public static string Vehicle_AccelerationCurve_MaxDeceleration_Attr { + get { + return ResourceManager.GetString("Vehicle_AccelerationCurve_MaxDeceleration_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to vehicleSpeed. + /// </summary> + public static string Vehicle_AccelerationCurve_VehicleSpeed_Attr { + get { + return ResourceManager.GetString("Vehicle_AccelerationCurve_VehicleSpeed_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to AdvancedDriverAssist. + /// </summary> + public static string Vehicle_AdvancedDriverAssist { + get { + return ResourceManager.GetString("Vehicle_AdvancedDriverAssist", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to EngineStartStop. + /// </summary> + public static string Vehicle_AdvancedDriverAssist_EngineStartStop { + get { + return ResourceManager.GetString("Vehicle_AdvancedDriverAssist_EngineStartStop", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to ActivationDelay. + /// </summary> + public static string Vehicle_AdvancedDriverAssist_EngineStartStop_ActivationDelay { + get { + return ResourceManager.GetString("Vehicle_AdvancedDriverAssist_EngineStartStop_ActivationDelay", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Enabled. + /// </summary> + public static string Vehicle_AdvancedDriverAssist_EngineStartStop_Enabled { + get { + return ResourceManager.GetString("Vehicle_AdvancedDriverAssist_EngineStartStop_Enabled", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to MaxSpeed. + /// </summary> + public static string Vehicle_AdvancedDriverAssist_EngineStartStop_MaxSpeed { + get { + return ResourceManager.GetString("Vehicle_AdvancedDriverAssist_EngineStartStop_MaxSpeed", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to MinOnTime. + /// </summary> + public static string Vehicle_AdvancedDriverAssist_EngineStartStop_MinOnTime { + get { + return ResourceManager.GetString("Vehicle_AdvancedDriverAssist_EngineStartStop_MinOnTime", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to CdxA. + /// </summary> + public static string Vehicle_AirDragArea { + get { + return ResourceManager.GetString("Vehicle_AirDragArea", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to AngledriveType. + /// </summary> + public static string Vehicle_AngledriveType { + get { + return ResourceManager.GetString("Vehicle_AngledriveType", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to AxleConfiguration. + /// </summary> + public static string Vehicle_AxleConfiguration { + get { + return ResourceManager.GetString("Vehicle_AxleConfiguration", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Components. + /// </summary> + public static string Vehicle_Components { + get { + return ResourceManager.GetString("Vehicle_Components", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to CrossWindCorrectionData. + /// </summary> + public static string Vehicle_CrosswindCorrectionData { + get { + return ResourceManager.GetString("Vehicle_CrosswindCorrectionData", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Entry. + /// </summary> + public static string Vehicle_CrosswindCorrectionData_Entry { + get { + return ResourceManager.GetString("Vehicle_CrosswindCorrectionData_Entry", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to beta. + /// </summary> + public static string Vehicle_CrosswindCorrectionMap_Beta { + get { + return ResourceManager.GetString("Vehicle_CrosswindCorrectionMap_Beta", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to CdScalingFactor. + /// </summary> + public static string Vehicle_CrosswindCorrectionMap_CdScalingFactor { + get { + return ResourceManager.GetString("Vehicle_CrosswindCorrectionMap_CdScalingFactor", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to deltaCdxA. + /// </summary> + public static string Vehicle_CrosswindCorrectionMap_DeltaCdxA { + get { + return ResourceManager.GetString("Vehicle_CrosswindCorrectionMap_DeltaCdxA", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to vehicleSpeed. + /// </summary> + public static string Vehicle_CrosswindCorrectionMap_VehicleSpeed_Attr { + get { + return ResourceManager.GetString("Vehicle_CrosswindCorrectionMap_VehicleSpeed_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to CrossWindCorrectionMode. + /// </summary> + public static string Vehicle_CrossWindCorrectionMode { + get { + return ResourceManager.GetString("Vehicle_CrossWindCorrectionMode", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to CurbMassChassis. + /// </summary> + public static string Vehicle_CurbMassChassis { + get { + return ResourceManager.GetString("Vehicle_CurbMassChassis", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to CurbMassExtra. + /// </summary> + public static string Vehicle_CurbMassExtra { + get { + return ResourceManager.GetString("Vehicle_CurbMassExtra", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to CurbWeightChassis. + /// </summary> + public static string Vehicle_CurbWeightChassis { + get { + return ResourceManager.GetString("Vehicle_CurbWeightChassis", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to CurbWeightExtra. + /// </summary> + public static string Vehicle_CurbWeightExtra { + get { + return ResourceManager.GetString("Vehicle_CurbWeightExtra", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to GrossVehicleMass. + /// </summary> + public static string Vehicle_GrossVehicleMass { + get { + return ResourceManager.GetString("Vehicle_GrossVehicleMass", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to IdlingSpeed. + /// </summary> + public static string Vehicle_IdlingSpeed { + get { + return ResourceManager.GetString("Vehicle_IdlingSpeed", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to LegislativeClass. + /// </summary> + public static string Vehicle_LegislativeClass { + get { + return ResourceManager.GetString("Vehicle_LegislativeClass", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Loading. + /// </summary> + public static string Vehicle_Loading { + get { + return ResourceManager.GetString("Vehicle_Loading", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to PTO. + /// </summary> + public static string Vehicle_PTO { + get { + return ResourceManager.GetString("Vehicle_PTO", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to PTOOtherElements. + /// </summary> + public static string Vehicle_PTO_OtherElements { + get { + return ResourceManager.GetString("Vehicle_PTO_OtherElements", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to PTOShaftsGearWheels. + /// </summary> + public static string Vehicle_PTO_ShaftsGearWheels { + get { + return ResourceManager.GetString("Vehicle_PTO_ShaftsGearWheels", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to PTOCycle. + /// </summary> + public static string Vehicle_PTOCycle { + get { + return ResourceManager.GetString("Vehicle_PTOCycle", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to engineSpeed. + /// </summary> + public static string Vehicle_PTOCycle_EngineSpeed_Attr { + get { + return ResourceManager.GetString("Vehicle_PTOCycle_EngineSpeed_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Entry. + /// </summary> + public static string Vehicle_PTOCycle_Entry { + get { + return ResourceManager.GetString("Vehicle_PTOCycle_Entry", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to time. + /// </summary> + public static string Vehicle_PTOCycle_Time_Attr { + get { + return ResourceManager.GetString("Vehicle_PTOCycle_Time_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to torque. + /// </summary> + public static string Vehicle_PTOCycle_Torque_Attr { + get { + return ResourceManager.GetString("Vehicle_PTOCycle_Torque_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to PTOIdleLossMap. + /// </summary> + public static string Vehicle_PTOIdleLossMap { + get { + return ResourceManager.GetString("Vehicle_PTOIdleLossMap", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to engineSpeed. + /// </summary> + public static string Vehicle_PTOIdleLossMap_EngineSpeed_Attr { + get { + return ResourceManager.GetString("Vehicle_PTOIdleLossMap_EngineSpeed_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Entry. + /// </summary> + public static string Vehicle_PTOIdleLossMap_Entry { + get { + return ResourceManager.GetString("Vehicle_PTOIdleLossMap_Entry", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to ptoTorqueLoss. + /// </summary> + public static string Vehicle_PTOIdleLossMap_TorqueLoss_Attr { + get { + return ResourceManager.GetString("Vehicle_PTOIdleLossMap_TorqueLoss_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to PTOType. + /// </summary> + public static string Vehicle_PTOType { + get { + return ResourceManager.GetString("Vehicle_PTOType", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to RetarderRatio. + /// </summary> + public static string Vehicle_RetarderRatio { + get { + return ResourceManager.GetString("Vehicle_RetarderRatio", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to RetarderType. + /// </summary> + public static string Vehicle_RetarderType { + get { + return ResourceManager.GetString("Vehicle_RetarderType", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to SteeredAxles. + /// </summary> + public static string Vehicle_SteeredAxles { + get { + return ResourceManager.GetString("Vehicle_SteeredAxles", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to TorqueLimits. + /// </summary> + public static string Vehicle_TorqueLimits { + get { + return ResourceManager.GetString("Vehicle_TorqueLimits", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Entry. + /// </summary> + public static string Vehicle_TorqueLimits_Entry { + get { + return ResourceManager.GetString("Vehicle_TorqueLimits_Entry", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to gear. + /// </summary> + public static string Vehicle_TorqueLimits_Entry_Gear_Attr { + get { + return ResourceManager.GetString("Vehicle_TorqueLimits_Entry_Gear_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to maxTorque. + /// </summary> + public static string Vehicle_TorqueLimits_Entry_MaxTorque_Attr { + get { + return ResourceManager.GetString("Vehicle_TorqueLimits_Entry_MaxTorque_Attr", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to VehicleCategory. + /// </summary> + public static string Vehicle_VehicleCategory { + get { + return ResourceManager.GetString("Vehicle_VehicleCategory", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to VIN. + /// </summary> + public static string Vehicle_VIN { + get { + return ResourceManager.GetString("Vehicle_VIN", resourceCulture); + } + } + } +} diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.resx b/VectoCommon/VectoCommon/Resources/XMLNames.resx index 21bb6e6475561240cda315d4a060dd686de8907f..6e513e9e849df6a17070de222fe05281209cb804 100644 --- a/VectoCommon/VectoCommon/Resources/XMLNames.resx +++ b/VectoCommon/VectoCommon/Resources/XMLNames.resx @@ -900,4 +900,43 @@ <data name="VectoCustomerReport" xml:space="preserve"> <value>VectoCustomerInformation</value> </data> + <data name="Report_ResultEntry_AvgDrivingSpeed" xml:space="preserve"> + <value>AverageDrivingSpeed</value> + </data> + <data name="Report_ResultEntry_EngineSpeedDriving" xml:space="preserve"> + <value>EngineSpeedDriving</value> + </data> + <data name="Report_ResultEntry_EngineSpeedDriving_Min" xml:space="preserve"> + <value>Min</value> + </data> + <data name="Report_ResultEntry_EngineSpeedDriving_Avg" xml:space="preserve"> + <value>Average</value> + </data> + <data name="Report_ResultEntry_EngineSpeedDriving_Max" xml:space="preserve"> + <value>Max</value> + </data> + <data name="Unit_RPM" xml:space="preserve"> + <value>rpm</value> + </data> + <data name="Unit_km" xml:space="preserve"> + <value>km</value> + </data> + <data name="Unit_kg" xml:space="preserve"> + <value>kg</value> + </data> + <data name="Unit_kmph" xml:space="preserve"> + <value>km/h</value> + </data> + <data name="Unit_mps2" xml:space="preserve"> + <value>m/s²</value> + </data> + <data name="Unit_t" xml:space="preserve"> + <value>t</value> + </data> + <data name="Unit_kW" xml:space="preserve"> + <value>kW</value> + </data> + <data name="Unit_ltr" xml:space="preserve"> + <value>ltr</value> + </data> </root> \ No newline at end of file diff --git a/VectoCommon/VectoCommon/Utils/SI.cs b/VectoCommon/VectoCommon/Utils/SI.cs index 658a9a8b3244e427321b99adf62ca896b26d114b..d8158aaf5eb5bd6be4bee26b8b299e8dd1abdd03 100644 --- a/VectoCommon/VectoCommon/Utils/SI.cs +++ b/VectoCommon/VectoCommon/Utils/SI.cs @@ -42,1720 +42,1722 @@ using TUGraz.VectoCommon.Exceptions; namespace TUGraz.VectoCommon.Utils { - /// <summary> - /// SI Class for Scalar Values. Converts implicitely to double and is only castable if the SI value has no units. - /// </summary> - public class Scalar : SIBase<Scalar> - { - private static readonly int[] Units = { 0, 0, 0, 0, 0, 0, 0 }; - - [DebuggerHidden] - private Scalar(double val) : base(val, Units) { } - - public static implicit operator double(Scalar self) - { - return self.Val; - } - - [DebuggerHidden] - public static Scalar operator +(Scalar si1, Scalar si2) - { - return Create(si1.Val + si2.Val); - } - - [DebuggerHidden] - public static Scalar operator +(Scalar si1, double si2) - { - return Create(si1.Val + si2); - } - - [DebuggerHidden] - public static Scalar operator +(double si1, Scalar si2) - { - return Create(si1 + si2.Val); - } - - [DebuggerHidden] - public static Scalar operator -(Scalar si1, Scalar si2) - { - return Create(si1.Val - si2.Val); - } - - [DebuggerHidden] - public static Scalar operator -(Scalar si1, double si2) - { - return Create(si1.Val - si2); - } - - [DebuggerHidden] - public static Scalar operator -(double si1, Scalar si2) - { - return Create(si1 - si2.Val); - } - } - - /// <summary> - /// SI Class for Newton [N]. - /// </summary> - public class Newton : SIBase<Newton> - { - private static readonly int[] Units = { 1, 1, -2, 0, 0, 0, 0 }; - - [DebuggerHidden] - private Newton(double val) : base(val, Units) { } - - public override string UnitString { get { return "N"; } } + /// <summary> + /// SI Class for Scalar Values. Converts implicitely to double and is only castable if the SI value has no units. + /// </summary> + public class Scalar : SIBase<Scalar> + { + private static readonly int[] Units = { 0, 0, 0, 0, 0, 0, 0 }; [DebuggerHidden] - public static NewtonMeter operator *(Newton newton, Meter meter) - { - return SIBase<NewtonMeter>.Create(newton.Val * meter.Value()); - } - - [DebuggerHidden] - public static Watt operator *(Newton newton, MeterPerSecond meterPerSecond) - { - return SIBase<Watt>.Create(newton.Val * meterPerSecond.Value()); - } - - [DebuggerHidden] - public static Watt operator *(MeterPerSecond meterPerSecond, Newton newton) - { - return SIBase<Watt>.Create(newton.Val * meterPerSecond.Value()); - } - } - - /// <summary> - /// SI Class for Radian [] (rad). - /// </summary> - public class Radian : SIBase<Radian> - { - private static readonly int[] Units = { 0, 0, 0, 0, 0, 0, 0 }; - - [DebuggerHidden] - private Radian(double val) : base(val, Units) { } - } - - /// <summary> - /// SI Class for PerSquareSecond [1/s^2]. - /// </summary> - public class PerSquareSecond : SIBase<PerSquareSecond> - { - private static readonly int[] Units = { 0, 0, -2, 0, 0, 0, 0 }; - - [DebuggerHidden] - private PerSquareSecond(double val) : base(val, Units) { } - - [DebuggerHidden] - public static PerSecond operator *(PerSquareSecond perSquareSecond, Second second) - { - return SIBase<PerSecond>.Create(perSquareSecond.Val * second.Value()); - } - } - - /// <summary> - /// SI Class for Meter per square second [m/s^2]. - /// </summary> - public class MeterPerSquareSecond : SIBase<MeterPerSquareSecond> - { - private static readonly int[] Units = { 0, 1, -2, 0, 0, 0, 0 }; - - [DebuggerHidden] - private MeterPerSquareSecond(double val) : base(val, Units) { } - - /// <summary> - /// Implements the operator *. - /// </summary> - [DebuggerHidden] - public static MeterPerSecond operator *(MeterPerSquareSecond meterPerSecond, Second second) - { - return SIBase<MeterPerSecond>.Create(meterPerSecond.Val * second.Value()); - } - } - - /// <summary> - /// SI Class for Second [s]. - /// </summary> - public class Second : SIBase<Second> - { - private static readonly int[] Units = { 0, 0, 1, 0, 0, 0, 0 }; - - [DebuggerHidden] - private Second(double val) : base(val, Units) { } - } - - /// <summary> - /// SI Class for Meter [m]. - /// </summary> - public class Meter : SIBase<Meter> - { - private static readonly int[] Units = { 0, 1, 0, 0, 0, 0, 0 }; - - [DebuggerHidden] - private Meter(double val) : base(val, Units) { } - - [DebuggerHidden] - public static MeterPerSecond operator /(Meter meter, Second second) - { - return SIBase<MeterPerSecond>.Create(meter.Val / second.Value()); - } - - [DebuggerHidden] - public static MeterPerSecond operator *(Meter meter, PerSecond perSecond) - { - return SIBase<MeterPerSecond>.Create(meter.Val * perSecond.Value()); - } - - /// <summary> - /// Implements the operator /. - /// </summary> - [DebuggerHidden] - public static Second operator /(Meter second, MeterPerSecond meterPerSecond) - { - return SIBase<Second>.Create(second.Val / meterPerSecond.Value()); - } - } - - /// <summary> - /// SI Class for KilogramPerMeter [kg/m]. - /// </summary> - public class KilogramPerMeter : SIBase<KilogramPerMeter> - { - private static readonly int[] Units = { 1, -1, 0, 0, 0, 0, 0 }; - - [DebuggerHidden] - private KilogramPerMeter(double val) : base(val, Units) { } - - public override string UnitString { get { return "kg/m"; } } + private Scalar(double val) : base(val, Units) { } - public static KilogramPerMeterMass operator /(KilogramPerMeter kpm, Kilogram kg) + public static implicit operator double(Scalar self) { - return SIBase<KilogramPerMeterMass>.Create(kpm.Val / kg.Value()); + return self.Val; } - public static KilogramPerMeterCubicMeter operator /(KilogramPerMeter kpm, CubicMeter vol) + [DebuggerHidden] + public static Scalar operator +(Scalar si1, Scalar si2) { - return SIBase<KilogramPerMeterCubicMeter>.Create(kpm.Val / vol.Value()); + return Create(si1.Val + si2.Val); } - } - /// <summary> - /// SI Class for Liter per Second [l/s]. - /// </summary> - public class LiterPerSecond : SIBase<LiterPerSecond> - { - private static readonly int[] Units = { 0, 3, -1, 0, 0, 0, 0 }; + [DebuggerHidden] + public static Scalar operator +(Scalar si1, double si2) + { + return Create(si1.Val + si2); + } - private LiterPerSecond(double val) : base(val, 0.001, Units) { } + [DebuggerHidden] + public static Scalar operator +(double si1, Scalar si2) + { + return Create(si1 + si2.Val); + } - public override string UnitString { get { return "l/s"; } } + [DebuggerHidden] + public static Scalar operator -(Scalar si1, Scalar si2) + { + return Create(si1.Val - si2.Val); + } [DebuggerHidden] - public static Liter operator *(LiterPerSecond l, Second second) + public static Scalar operator -(Scalar si1, double si2) { - return SIBase<Liter>.Create(l.Val * second.Value()); + return Create(si1.Val - si2); } [DebuggerHidden] - public static Liter operator *(Second second, LiterPerSecond l) + public static Scalar operator -(double si1, Scalar si2) { - return SIBase<Liter>.Create(l.Val * second.Value()); + return Create(si1 - si2.Val); } } - /// <summary> - /// SI Class for Kilogram [kg]. - /// </summary> - public class Kilogram : SIBase<Kilogram> - { - private static readonly int[] Units = { 1, 0, 0, 0, 0, 0, 0 }; - - [DebuggerHidden] - private Kilogram(double val) : base(val, Units) { } - - [DebuggerHidden] - public static KilogramPerSecond operator /(Kilogram kg, Second second) - { - return SIBase<KilogramPerSecond>.Create(kg.Val / second.Value()); - } - - //[DebuggerHidden] - //public static SI operator /(Kilogram kg, Joule j) - //{ - // return (kg as SI) / j; - //} - - [DebuggerHidden] - public static Scalar operator /(Kilogram kg, Kilogram kg2) - { - return SIBase<Scalar>.Create(kg.Val / kg2.Val); - } - - [DebuggerHidden] - public static KilogramPerMeter operator /(Kilogram kg, Meter m) - { - return SIBase<KilogramPerMeter>.Create(kg.Val / m.Value()); - } + /// <summary> + /// SI Class for Newton [N]. + /// </summary> + public class Newton : SIBase<Newton> + { + private static readonly int[] Units = { 1, 1, -2, 0, 0, 0, 0 }; [DebuggerHidden] - public static SpecificFuelConsumption operator /(Kilogram kg, WattSecond ws) + private Newton(double val) : base(val, Units) { } + + public override string UnitString { get { return "N"; } } + + [DebuggerHidden] + public static NewtonMeter operator *(Newton newton, Meter meter) { - return SIBase<SpecificFuelConsumption>.Create(kg.Val / ws.Value()); + return SIBase<NewtonMeter>.Create(newton.Val * meter.Value()); } [DebuggerHidden] - public static Newton operator *(Kilogram kg, MeterPerSquareSecond m) - { - return SIBase<Newton>.Create(kg.Val * m.Value()); - } + public static Watt operator *(Newton newton, MeterPerSecond meterPerSecond) + { + return SIBase<Watt>.Create(newton.Val * meterPerSecond.Value()); + } - [DebuggerHidden] - public static Kilogram operator *(Kilogram kg, double d) - { - return new Kilogram(kg.Val * d); - } + [DebuggerHidden] + public static Watt operator *(MeterPerSecond meterPerSecond, Newton newton) + { + return SIBase<Watt>.Create(newton.Val * meterPerSecond.Value()); + } + } - [DebuggerHidden] - public static Kilogram operator *(double d, Kilogram kg) - { - return new Kilogram(d * kg.Val); - } + /// <summary> + /// SI Class for Radian [] (rad). + /// </summary> + public class Radian : SIBase<Radian> + { + private static readonly int[] Units = { 0, 0, 0, 0, 0, 0, 0 }; - public static CubicMeter operator /(Kilogram kilogram, KilogramPerCubicMeter kilogramPerCubicMeter) - { - return SIBase<CubicMeter>.Create(kilogram.Value() / kilogramPerCubicMeter.Value()); - } - } + [DebuggerHidden] + private Radian(double val) : base(val, Units) { } + } - public class Liter : SIBase<Liter> - { - private static readonly int[] Units = { 0, 3, 0, 0, 0, 0, 0 }; + /// <summary> + /// SI Class for PerSquareSecond [1/s^2]. + /// </summary> + public class PerSquareSecond : SIBase<PerSquareSecond> + { + private static readonly int[] Units = { 0, 0, -2, 0, 0, 0, 0 }; - [DebuggerHidden] - //[DebuggerHidden] - private Liter(double val) : base(val , 0.001, Units) { } + [DebuggerHidden] + private PerSquareSecond(double val) : base(val, Units) { } - public override string UnitString { get { return "l"; } } + [DebuggerHidden] + public static PerSecond operator *(PerSquareSecond perSquareSecond, Second second) + { + return SIBase<PerSecond>.Create(perSquareSecond.Val * second.Value()); + } + } - public static Kilogram operator *(Liter liter, KilogramPerCubicMeter kilogramPerCubicMeter) - { - return SIBase<Kilogram>.Create(liter.AsBasicUnit * kilogramPerCubicMeter.Value()); - } - } + /// <summary> + /// SI Class for Meter per square second [m/s^2]. + /// </summary> + public class MeterPerSquareSecond : SIBase<MeterPerSquareSecond> + { + private static readonly int[] Units = { 0, 1, -2, 0, 0, 0, 0 }; - /// <summary> - /// - /// </summary> - public class NormLiter : SIBase<NormLiter> - { - private static readonly int[] Units = { 0, 3, 0, 0, 0, 0, 0 }; + [DebuggerHidden] + private MeterPerSquareSecond(double val) : base(val, Units) { } - //[DebuggerHidden] - private NormLiter(double val) : base(val , 0.001, Units) { } + /// <summary> + /// Implements the operator *. + /// </summary> + [DebuggerHidden] + public static MeterPerSecond operator *(MeterPerSquareSecond meterPerSecond, Second second) + { + return SIBase<MeterPerSecond>.Create(meterPerSecond.Val * second.Value()); + } + } - public override string UnitString { get { return "Nl"; } } + /// <summary> + /// SI Class for Second [s]. + /// </summary> + public class Second : SIBase<Second> + { + private static readonly int[] Units = { 0, 0, 1, 0, 0, 0, 0 }; - public static NormLiterPerSecond operator /(NormLiter nl, Second s) - { - return SIBase<NormLiterPerSecond>.Create(nl.Val / s.Value()); - } - } - - /// <summary> - /// - /// </summary> - public class NormLiterPerSecond : SIBase<NormLiterPerSecond> - { - private static readonly int[] Units = { 0, 3, -1, 0, 0, 0, 0 }; + [DebuggerHidden] + private Second(double val) : base(val, Units) { } + } - //[DebuggerHidden] - private NormLiterPerSecond(double val) : base(val, 0.001, Units) { } + /// <summary> + /// SI Class for Meter [m]. + /// </summary> + public class Meter : SIBase<Meter> + { + private static readonly int[] Units = { 0, 1, 0, 0, 0, 0, 0 }; - public override string UnitString { get { return "Nl/s"; } } + [DebuggerHidden] + private Meter(double val) : base(val, Units) { } - public static NormLiter operator *(NormLiterPerSecond nips, Second s) - { - return SIBase<NormLiter>.Create(nips.Val * s.Value()); - } + [DebuggerHidden] + public static MeterPerSecond operator /(Meter meter, Second second) + { + return SIBase<MeterPerSecond>.Create(meter.Val / second.Value()); + } - public static NormLiterPerSecond operator *(NormLiterPerSecond nps, double val) - { - return Create(nps.Val * val); - } + [DebuggerHidden] + public static MeterPerSecond operator *(Meter meter, PerSecond perSecond) + { + return SIBase<MeterPerSecond>.Create(meter.Val * perSecond.Value()); + } - public static NormLiterPerSecond operator /(NormLiterPerSecond nps, double val) + /// <summary> + /// Implements the operator /. + /// </summary> + [DebuggerHidden] + public static Second operator /(Meter second, MeterPerSecond meterPerSecond) { - return Create(nps.Val / val); + return SIBase<Second>.Create(second.Val / meterPerSecond.Value()); } } - /// <summary> - /// SI Class for Kilogram per Second [kg]. - /// </summary> - public class KilogramPerSecond : SIBase<KilogramPerSecond> - { - private static readonly int[] Units = { 1, 0, -1, 0, 0, 0, 0 }; - - [DebuggerHidden] - private KilogramPerSecond(double value) : base(value, Units) { } - - [DebuggerHidden] - public static Kilogram operator *(KilogramPerSecond kilogramPerSecond, Second second) - { - return SIBase<Kilogram>.Create(kilogramPerSecond.Val * second.Value()); - } - } - - /// <summary> - /// SI Class for Square meter [m^2]. - /// </summary> - public class SquareMeter : SIBase<SquareMeter> - { - private static readonly int[] Units = { 0, 2, 0, 0, 0, 0, 0 }; - - [DebuggerHidden] - private SquareMeter(double value) : base(value, Units) { } - } - - /// <summary> - /// SI Class for cubic meter [m^3]. - /// </summary> - public class CubicMeter : SIBase<CubicMeter> - { - private static readonly int[] Units = { 0, 3, 0, 0, 0, 0, 0 }; - - [DebuggerHidden] - private CubicMeter(double value) - : base(value, Units) { } - } - - /// <summary> - /// SI Class for Kilogram Square Meter [kgm^2]. - /// </summary> - public class KilogramSquareMeter : SIBase<KilogramSquareMeter> - { - private static readonly int[] Units = { 1, 2, 0, 0, 0, 0, 0 }; - - [DebuggerHidden] - private KilogramSquareMeter(double value) : base(value, Units) { } - - [DebuggerHidden] - public static NewtonMeter operator *(KilogramSquareMeter kilogramSquareMeter, PerSquareSecond perSquareSecond) - { - return SIBase<NewtonMeter>.Create(kilogramSquareMeter.Val * perSquareSecond.Value()); - } - } - - /// <summary> - /// SI Class for Kilogram per Cubic Meter [kg/m^3]. - /// </summary> - public class KilogramPerCubicMeter : SIBase<KilogramPerCubicMeter> - { - private static readonly int[] Units = { 1, -3, 0, 0, 0, 0, 0 }; - - [DebuggerHidden] - private KilogramPerCubicMeter(double value) : base(value, Units) { } - - public override string UnitString { get { return "kg/m^3"; } } + /// <summary> + /// SI Class for KilogramPerMeter [kg/m]. + /// </summary> + public class KilogramPerMeter : SIBase<KilogramPerMeter> + { + private static readonly int[] Units = { 1, -1, 0, 0, 0, 0, 0 }; [DebuggerHidden] - public static Kilogram operator *(KilogramPerCubicMeter kilogramPerCubicMeter, CubicMeter cubicMeter) - { - return SIBase<Kilogram>.Create(kilogramPerCubicMeter.Val * cubicMeter.Value()); - } - - } + private KilogramPerMeter(double val) : base(val, Units) { } - /// <summary> - /// SI Class for Kilogramm per watt second [kg/Ws]. - /// W = kgm^2/s^3 - /// </summary> - public class KilogramPerWattSecond : SIBase<KilogramPerWattSecond> - { - private static readonly int[] Units = { 0, -2, 2, 0, 0, 0, 0 }; + public override string UnitString { get { return "kg/m"; } } - [DebuggerHidden] - private KilogramPerWattSecond(double val) : base(val, Units) { } + public static KilogramPerMeterMass operator /(KilogramPerMeter kpm, Kilogram kg) + { + return SIBase<KilogramPerMeterMass>.Create(kpm.Val / kg.Value()); + } - public override string UnitString { get { return "kg/Ws"; } } + public static KilogramPerMeterCubicMeter operator /(KilogramPerMeter kpm, CubicMeter vol) + { + return SIBase<KilogramPerMeterCubicMeter>.Create(kpm.Val / vol.Value()); + } } - /// <summary> - /// SI Class for watt second [Ws]. - /// W = kgm^2/s^3 - /// </summary> - public class WattSecond : SIBase<WattSecond> - { - private static readonly int[] Units = { 1, 2, -2, 0, 0, 0, 0 }; + /// <summary> + /// SI Class for Liter per Second [l/s]. + /// </summary> + public class LiterPerSecond : SIBase<LiterPerSecond> + { + private static readonly int[] Units = { 0, 3, -1, 0, 0, 0, 0 }; - [DebuggerHidden] - private WattSecond(double val) : base(val, Units) { } + private LiterPerSecond(double val) : base(val, 0.001, Units) { } - public override string UnitString { get { return "Ws"; } } + public override string UnitString { get { return "l/s"; } } [DebuggerHidden] - public static Watt operator /(WattSecond wattSecond, Second second) - { - return SIBase<Watt>.Create(wattSecond.Val / second.Value()); - } - } - - /// <summary> - /// SI Class for Watt [W]. - /// </summary> - public class Watt : SIBase<Watt> - { - private static readonly int[] Units = { 1, 2, -3, 0, 0, 0, 0 }; + public static Liter operator *(LiterPerSecond l, Second second) + { + return SIBase<Liter>.Create(l.Val * second.Value()); + } - [DebuggerHidden] - private Watt(double val) : base(val, Units) { } + [DebuggerHidden] + public static Liter operator *(Second second, LiterPerSecond l) + { + return SIBase<Liter>.Create(l.Val * second.Value()); + } + } - public override string UnitString { get { return "W"; } } + /// <summary> + /// SI Class for Kilogram [kg]. + /// </summary> + public class Kilogram : SIBase<Kilogram> + { + private static readonly int[] Units = { 1, 0, 0, 0, 0, 0, 0 }; - /// <summary> - /// Implements the operator /. - /// </summary> - /// <param name="watt">The watt.</param> - /// <param name="newtonMeter">The newton meter.</param> - /// <returns> - /// The result of the operator. - /// </returns> [DebuggerHidden] - public static PerSecond operator /(Watt watt, NewtonMeter newtonMeter) - { - return SIBase<PerSecond>.Create(watt.Val / newtonMeter.Value()); - } - - [DebuggerHidden] - public static Newton operator /(Watt watt, MeterPerSecond meterPerSecond) - { - return SIBase<Newton>.Create(watt.Val / meterPerSecond.Value()); - } - - /// <summary> - /// Implements the operator /. - /// </summary> - /// <param name="watt">The watt.</param> - /// <param name="perSecond">The per second.</param> - /// <returns> - /// The result of the operator. - /// </returns> - [DebuggerHidden] - public static NewtonMeter operator /(Watt watt, PerSecond perSecond) - { - return SIBase<NewtonMeter>.Create(watt.Val / perSecond.Value()); - } - - [DebuggerHidden] - public static WattSecond operator *(Watt watt, Second second) - { - return SIBase<WattSecond>.Create(watt.Val * second.Value()); - } - - [DebuggerHidden] - public static Watt operator *(Watt watt, double val) - { - return Create(watt.Val * val); - } - } - - /// <summary> - /// SI Class for Joule [J]. - /// J = Ws = kgm^2/s^2 - /// </summary> - public class Joule : SIBase<Joule> - { - private static readonly int[] Units = { 1, 2, -2, 0, 0, 0, 0 }; - - [DebuggerHidden] - private Joule(double val) : base(val, Units) { } - - public override string UnitString { get { return "J"; } } + private Kilogram(double val) : base(val, Units) { } - public static implicit operator Joule(WattSecond self) - { - return Create(self.Value()); - } + [DebuggerHidden] + public static KilogramPerSecond operator /(Kilogram kg, Second second) + { + return SIBase<KilogramPerSecond>.Create(kg.Val / second.Value()); + } - public static Joule operator +(Joule joule, WattSecond ws) - { - return Create(joule.Val + ws.Value()); - } + //[DebuggerHidden] + //public static SI operator /(Kilogram kg, Joule j) + //{ + // return (kg as SI) / j; + //} - public static Watt operator /(Joule joule, Second s) - { - return SIBase<Watt>.Create(joule.Val / s.Value()); - } + [DebuggerHidden] + public static Scalar operator /(Kilogram kg, Kilogram kg2) + { + return SIBase<Scalar>.Create(kg.Val / kg2.Val); + } - public static JoulePerMeter operator /(Joule joule, Meter meter) - { - return SIBase<JoulePerMeter>.Create(joule.Val / meter.Value()); - } - } + [DebuggerHidden] + public static KilogramPerMeter operator /(Kilogram kg, Meter m) + { + return SIBase<KilogramPerMeter>.Create(kg.Val / m.Value()); + } - /// <summary> - /// SI Class for Joule / kg. - /// </summary> - public class JoulePerKilogramm : SIBase<JoulePerKilogramm> - { - private static readonly int[] Units = { 0, 2, -2, 0, 0, 0, 0 }; + [DebuggerHidden] + public static SpecificFuelConsumption operator /(Kilogram kg, WattSecond ws) + { + return SIBase<SpecificFuelConsumption>.Create(kg.Val / ws.Value()); + } - private JoulePerKilogramm(double val) : base(val, Units) { } + [DebuggerHidden] + public static Newton operator *(Kilogram kg, MeterPerSquareSecond m) + { + return SIBase<Newton>.Create(kg.Val * m.Value()); + } - public override string UnitString { get { return "J/kg"; } } + [DebuggerHidden] + public static Kilogram operator *(Kilogram kg, double d) + { + return new Kilogram(kg.Val * d); + } - public static Joule operator *(Kilogram kg, JoulePerKilogramm jpg) - { - return SIBase<Joule>.Create(kg.Value() * jpg.Val); - } - } - - /// <summary> - /// SI Class for Joule per Meter [J/m]. - /// J = Ws - /// W = kgm^2/s^3 - /// </summary> - public class JoulePerMeter : SIBase<JoulePerMeter> - { - private static readonly int[] Units = { 1, 1, -2, 0, 0, 0, 0 }; - - [DebuggerHidden] - private JoulePerMeter(double val) : base(val, Units) { } + [DebuggerHidden] + public static Kilogram operator *(double d, Kilogram kg) + { + return new Kilogram(d * kg.Val); + } - public override string UnitString { get { return "J/m"; } } + public static CubicMeter operator /(Kilogram kilogram, KilogramPerCubicMeter kilogramPerCubicMeter) + { + return SIBase<CubicMeter>.Create(kilogram.Value() / kilogramPerCubicMeter.Value()); + } } - /// <summary> - /// SI Class for one per second [1/s]. - /// </summary> - [DebuggerDisplay("rad/s: {Val} | rpm: {AsRPM}")] - public class PerSecond : SIBase<PerSecond> - { - private static readonly int[] Units = { 0, 0, -1, 0, 0, 0, 0 }; - - [DebuggerHidden] - private PerSecond(double val) : base(val, Units) { } - - [DebuggerHidden] - public static PerSquareSecond operator /(PerSecond perSecond, Second second) - { - return SIBase<PerSquareSecond>.Create(perSecond.Val / second.Value()); - } - - public double AsRPM - { - get { return Val * 60 / (2 * Math.PI); } - } - } - - /// <summary> - /// SI Class for Meter per second [m/s]. - /// </summary> - [DebuggerDisplay("{Val} | {AsKmph}")] - public class MeterPerSecond : SIBase<MeterPerSecond> - { - private static readonly int[] Units = { 0, 1, -1, 0, 0, 0, 0 }; - - [DebuggerHidden] - private MeterPerSecond(double val) : base(val, Units) { } - - public double AsKmph - { - get { return Val * 3.6; } - } - - /// <summary> - /// Implements the operator /. - /// </summary> - [DebuggerHidden] - public static PerSecond operator /(MeterPerSecond meterPerSecond, Meter meter) - { - return SIBase<PerSecond>.Create(meterPerSecond.Val / meter.Value()); - } - - /// <summary> - /// Implements the operator /. - /// </summary> - [DebuggerHidden] - public static Second operator /(MeterPerSecond meterPerSecond, MeterPerSquareSecond meterPerSquareSecond) - { - return SIBase<Second>.Create(meterPerSecond.Val / meterPerSquareSecond.Value()); - } - - /// <summary> - /// Implements the operator /. - /// </summary> - [DebuggerHidden] - public static MeterPerSquareSecond operator /(MeterPerSecond meterPerSecond, Second second) - { - return SIBase<MeterPerSquareSecond>.Create(meterPerSecond.Val / second.Value()); - } - - /// <summary> - /// Implements the operator *. - /// </summary> - [DebuggerHidden] - public static Meter operator *(MeterPerSecond meterPerSecond, Second second) - { - return SIBase<Meter>.Create(meterPerSecond.Val * second.Value()); - } - - /// <summary> - /// Implements the operator *. - /// </summary> - [DebuggerHidden] - public static MeterPerSquareSecond operator *(MeterPerSecond meterPerSecond, PerSecond perSecond) - { - return SIBase<MeterPerSquareSecond>.Create(meterPerSecond.Val * perSecond.Value()); - } - - /// <summary> - /// Implements the operator *. - /// </summary> - [DebuggerHidden] - public static Meter operator *(Second second, MeterPerSecond meterPerSecond) - { - return SIBase<Meter>.Create(second.Value() * meterPerSecond.Val); - } - } - - /// <summary> - /// SI Class for NewtonMeter [Nm]. - /// N = kgm/s^2 - /// </summary> - public class NewtonMeter : SIBase<NewtonMeter> - { - private static readonly int[] Units = { 1, 2, -2, 0, 0, 0, 0 }; - - [DebuggerHidden] - private NewtonMeter(double val) : base(val, Units) { } - - public override string UnitString { get { return "Nm"; } } + public class Liter : SIBase<Liter> + { + private static readonly int[] Units = { 0, 3, 0, 0, 0, 0, 0 }; [DebuggerHidden] - public static Watt operator *(NewtonMeter newtonMeter, PerSecond perSecond) - { - return SIBase<Watt>.Create(newtonMeter.Val * perSecond.Value()); - } - - [DebuggerHidden] - public static Watt operator *(PerSecond perSecond, NewtonMeter newtonMeter) - { - return SIBase<Watt>.Create(perSecond.Value() * newtonMeter.Val); - } - - [DebuggerHidden] - public static Second operator /(NewtonMeter newtonMeter, Watt watt) - { - return SIBase<Second>.Create(newtonMeter.Val / watt.Value()); - } - - [DebuggerHidden] - public static PerSquareSecond operator /(NewtonMeter newtonMeter, KilogramSquareMeter kgKilogramSquareMeter) - { - return SIBase<PerSquareSecond>.Create(newtonMeter.Val / kgKilogramSquareMeter.Value()); - } - - [DebuggerHidden] - public static PerSecond operator /(NewtonMeter newtonMeter, NewtonMeterSecond newtonMeterSecond) - { - return SIBase<PerSecond>.Create(newtonMeter.Val / newtonMeterSecond.Value()); - } - - [DebuggerHidden] - public static Newton operator /(NewtonMeter newtonMeter, Meter meter) - { - return SIBase<Newton>.Create(newtonMeter.Val / meter.Value()); - } - - [DebuggerHidden] - public static NewtonMeterSecond operator /(NewtonMeter newtonMeter, PerSecond perSecond) - { - return SIBase<NewtonMeterSecond>.Create(newtonMeter.Val / perSecond.Value()); - } - } - - /// <summary> - /// SI Class for NewtonMeterSecond [Nms]. - /// N = kgm/s^2 - /// </summary> - public class NewtonMeterSecond : SIBase<NewtonMeterSecond> - { - private static readonly int[] Units = { 1, 2, -1, 0, 0, 0, 0 }; - private NewtonMeterSecond(double val) : base(val, Units) { } + //[DebuggerHidden] + private Liter(double val) : base(val , 0.001, Units) { } - public override string UnitString { get { return "Nms"; } } + public override string UnitString { get { return "l"; } } + + public static Kilogram operator *(Liter liter, KilogramPerCubicMeter kilogramPerCubicMeter) + { + return SIBase<Kilogram>.Create(liter.AsBasicUnit * kilogramPerCubicMeter.Value()); + } } - /// <summary> - /// SI Class for Amperer [A]. - /// </summary> - public class Ampere : SIBase<Ampere> - { - private static readonly int[] Units = { 0, 0, 0, 1, 0, 0, 0 }; - private Ampere(double val) : base(val, Units) { } - - public static Watt operator *(Ampere ampere, Volt volt) - { - return SIBase<Watt>.Create(volt.Value() * ampere.Val); - } - - public static Ampere operator *(Ampere ampere, double val) - { - return Create(ampere.Val * val); - } - - public static Volt operator /(Watt watt, Ampere ampere) - { - return SIBase<Volt>.Create(watt.Value() / ampere.Value()); - } - } - - /// <summary> - /// SI Class for Amperer [V]. - /// V = kgm^2/As^2 - /// </summary> - public class Volt : SIBase<Volt> - { - private static readonly int[] Units = { 1, 2, -2, -1, 0, 0, 0 }; - private Volt(double val) : base(val, Units) { } + /// <summary> + /// + /// </summary> + public class NormLiter : SIBase<NormLiter> + { + private static readonly int[] Units = { 0, 3, 0, 0, 0, 0, 0 }; - public override string UnitString { get { return "V"; } } + //[DebuggerHidden] + private NormLiter(double val) : base(val , 0.001, Units) { } - public static Watt operator *(Volt volt, Ampere ampere) - { - return SIBase<Watt>.Create(volt.Val * ampere.Value()); - } + public override string UnitString { get { return "Nl"; } } - public static Ampere operator /(Watt watt, Volt volt) - { - return SIBase<Ampere>.Create(watt.Value() / volt.Value()); - } - } + public static NormLiterPerSecond operator /(NormLiter nl, Second s) + { + return SIBase<NormLiterPerSecond>.Create(nl.Val / s.Value()); + } + } - public class VolumePerMeter : SIBase<VolumePerMeter> + /// <summary> + /// + /// </summary> + public class NormLiterPerSecond : SIBase<NormLiterPerSecond> { - private static readonly int[] Units = { 0, 2, 0, 0, 0, 0, 0 }; - private VolumePerMeter(double val) : base(val, Units) { } + private static readonly int[] Units = { 0, 3, -1, 0, 0, 0, 0 }; - public override string UnitString { get { return "m^3/m"; } } + //[DebuggerHidden] + private NormLiterPerSecond(double val) : base(val, 0.001, Units) { } - public static VolumePerMeterMass operator /(VolumePerMeter vpm, Kilogram kg) + public override string UnitString { get { return "Nl/s"; } } + + public static NormLiter operator *(NormLiterPerSecond nips, Second s) { - return SIBase<VolumePerMeterMass>.Create(vpm.Val / kg.Value()); + return SIBase<NormLiter>.Create(nips.Val * s.Value()); } - public static VolumePerMeterVolume operator /(VolumePerMeter vpm, CubicMeter vol) + public static NormLiterPerSecond operator *(NormLiterPerSecond nps, double val) { - return SIBase<VolumePerMeterVolume>.Create(vpm.Val / vol.Value()); + return Create(nps.Val * val); } + public static NormLiterPerSecond operator /(NormLiterPerSecond nps, double val) + { + return Create(nps.Val / val); + } } - public class VolumePerMeterMass : SIBase<VolumePerMeterMass> + /// <summary> + /// SI Class for Kilogram per Second [kg]. + /// </summary> + public class KilogramPerSecond : SIBase<KilogramPerSecond> { - private static readonly int[] Units = { -1, 2, 0, 0, 0, 0, 0 }; + private static readonly int[] Units = { 1, 0, -1, 0, 0, 0, 0 }; - private VolumePerMeterMass(double val) : base (val, Units) { } + [DebuggerHidden] + private KilogramPerSecond(double value) : base(value, Units) { } - public override string UnitString { get { return "m^3/kgm"; } } + [DebuggerHidden] + public static Kilogram operator *(KilogramPerSecond kilogramPerSecond, Second second) + { + return SIBase<Kilogram>.Create(kilogramPerSecond.Val * second.Value()); + } } - public class VolumePerMeterVolume : SIBase<VolumePerMeterVolume> + /// <summary> + /// SI Class for Square meter [m^2]. + /// </summary> + public class SquareMeter : SIBase<SquareMeter> { - private static readonly int[] Units = { 0, -1, 0, 0, 0, 0, 0 }; - - private VolumePerMeterVolume(double val) : base (val, Units) { } + private static readonly int[] Units = { 0, 2, 0, 0, 0, 0, 0 }; - public override string UnitString { get { return "m^3/kgm^3"; } } + [DebuggerHidden] + private SquareMeter(double value) : base(value, Units) { } } - public class KilogramPerMeterCubicMeter : SIBase<KilogramPerMeterCubicMeter> + /// <summary> + /// SI Class for cubic meter [m^3]. + /// </summary> + public class CubicMeter : SIBase<CubicMeter> { - private static readonly int[] Units = { 1, -4, 0, 0, 0, 0, 0 }; + private static readonly int[] Units = { 0, 3, 0, 0, 0, 0, 0 }; - private KilogramPerMeterCubicMeter(double val) : base(val, Units) { } - - public override string UnitString { get { return "kg/(m m^3)"; } } + [DebuggerHidden] + private CubicMeter(double value) + : base(value, Units) { } } - - public class KilogramPerMeterMass : SIBase<KilogramPerMeterMass> + /// <summary> + /// SI Class for Kilogram Square Meter [kgm^2]. + /// </summary> + public class KilogramSquareMeter : SIBase<KilogramSquareMeter> { - private static readonly int[] Units = { 0, -1, 0, 0, 0, 0, 0 }; + private static readonly int[] Units = { 1, 2, 0, 0, 0, 0, 0 }; - private KilogramPerMeterMass(double val) : base(val, Units) { } + [DebuggerHidden] + private KilogramSquareMeter(double value) : base(value, Units) { } - public override string UnitString { get { return "kg/(m kg)"; } } + [DebuggerHidden] + public static NewtonMeter operator *(KilogramSquareMeter kilogramSquareMeter, PerSquareSecond perSquareSecond) + { + return SIBase<NewtonMeter>.Create(kilogramSquareMeter.Val * perSquareSecond.Value()); + } } - public class SpecificFuelConsumption : SIBase<SpecificFuelConsumption> + /// <summary> + /// SI Class for Kilogram per Cubic Meter [kg/m^3]. + /// </summary> + public class KilogramPerCubicMeter : SIBase<KilogramPerCubicMeter> { - private static readonly int[] Units = { 0, -2,2, 0, 0, 0, 0 }; + private static readonly int[] Units = { 1, -3, 0, 0, 0, 0, 0 }; - private SpecificFuelConsumption(double val) : base(val, Units) { } - } + [DebuggerHidden] + private KilogramPerCubicMeter(double value) : base(value, Units) { } - /// <summary> - /// Base Class for all special SI Classes. Not intended to be used directly. + public override string UnitString { get { return "kg/m^3"; } } + + [DebuggerHidden] + public static Kilogram operator *(KilogramPerCubicMeter kilogramPerCubicMeter, CubicMeter cubicMeter) + { + return SIBase<Kilogram>.Create(kilogramPerCubicMeter.Val * cubicMeter.Value()); + } + + } + + /// <summary> + /// SI Class for Kilogramm per watt second [kg/Ws]. + /// W = kgm^2/s^3 + /// </summary> + public class KilogramPerWattSecond : SIBase<KilogramPerWattSecond> + { + private static readonly int[] Units = { 0, -2, 2, 0, 0, 0, 0 }; + + [DebuggerHidden] + private KilogramPerWattSecond(double val) : base(val, Units) { } + + public override string UnitString { get { return "kg/Ws"; } } + } + + /// <summary> + /// SI Class for watt second [Ws]. + /// W = kgm^2/s^3 + /// </summary> + public class WattSecond : SIBase<WattSecond> + { + private static readonly int[] Units = { 1, 2, -2, 0, 0, 0, 0 }; + + [DebuggerHidden] + private WattSecond(double val) : base(val, Units) { } + + public override string UnitString { get { return "Ws"; } } + + [DebuggerHidden] + public static Watt operator /(WattSecond wattSecond, Second second) + { + return SIBase<Watt>.Create(wattSecond.Val / second.Value()); + } + } + + /// <summary> + /// SI Class for Watt [W]. + /// </summary> + public class Watt : SIBase<Watt> + { + private static readonly int[] Units = { 1, 2, -3, 0, 0, 0, 0 }; + + [DebuggerHidden] + private Watt(double val) : base(val, Units) { } + + public override string UnitString { get { return "W"; } } + + /// <summary> + /// Implements the operator /. + /// </summary> + /// <param name="watt">The watt.</param> + /// <param name="newtonMeter">The newton meter.</param> + /// <returns> + /// The result of the operator. + /// </returns> + [DebuggerHidden] + public static PerSecond operator /(Watt watt, NewtonMeter newtonMeter) + { + return SIBase<PerSecond>.Create(watt.Val / newtonMeter.Value()); + } + + [DebuggerHidden] + public static Newton operator /(Watt watt, MeterPerSecond meterPerSecond) + { + return SIBase<Newton>.Create(watt.Val / meterPerSecond.Value()); + } + + /// <summary> + /// Implements the operator /. + /// </summary> + /// <param name="watt">The watt.</param> + /// <param name="perSecond">The per second.</param> + /// <returns> + /// The result of the operator. + /// </returns> + [DebuggerHidden] + public static NewtonMeter operator /(Watt watt, PerSecond perSecond) + { + return SIBase<NewtonMeter>.Create(watt.Val / perSecond.Value()); + } + + [DebuggerHidden] + public static WattSecond operator *(Watt watt, Second second) + { + return SIBase<WattSecond>.Create(watt.Val * second.Value()); + } + + [DebuggerHidden] + public static Watt operator *(Watt watt, double val) + { + return Create(watt.Val * val); + } + } + + /// <summary> + /// SI Class for Joule [J]. + /// J = Ws = kgm^2/s^2 + /// </summary> + public class Joule : SIBase<Joule> + { + private static readonly int[] Units = { 1, 2, -2, 0, 0, 0, 0 }; + + [DebuggerHidden] + private Joule(double val) : base(val, Units) { } + + public override string UnitString { get { return "J"; } } + + public static implicit operator Joule(WattSecond self) + { + return Create(self.Value()); + } + + public static Joule operator +(Joule joule, WattSecond ws) + { + return Create(joule.Val + ws.Value()); + } + + public static Watt operator /(Joule joule, Second s) + { + return SIBase<Watt>.Create(joule.Val / s.Value()); + } + + public static JoulePerMeter operator /(Joule joule, Meter meter) + { + return SIBase<JoulePerMeter>.Create(joule.Val / meter.Value()); + } + } + + /// <summary> + /// SI Class for Joule / kg. + /// </summary> + public class JoulePerKilogramm : SIBase<JoulePerKilogramm> + { + private static readonly int[] Units = { 0, 2, -2, 0, 0, 0, 0 }; + + private JoulePerKilogramm(double val) : base(val, Units) { } + + public override string UnitString { get { return "J/kg"; } } + + public static Joule operator *(Kilogram kg, JoulePerKilogramm jpg) + { + return SIBase<Joule>.Create(kg.Value() * jpg.Val); + } + } + + /// <summary> + /// SI Class for Joule per Meter [J/m]. + /// J = Ws + /// W = kgm^2/s^3 + /// </summary> + public class JoulePerMeter : SIBase<JoulePerMeter> + { + private static readonly int[] Units = { 1, 1, -2, 0, 0, 0, 0 }; + + [DebuggerHidden] + private JoulePerMeter(double val) : base(val, Units) { } + + public override string UnitString { get { return "J/m"; } } + } + + /// <summary> + /// SI Class for one per second [1/s]. + /// </summary> + [DebuggerDisplay("rad/s: {Val} | rpm: {AsRPM}")] + public class PerSecond : SIBase<PerSecond> + { + private static readonly int[] Units = { 0, 0, -1, 0, 0, 0, 0 }; + + [DebuggerHidden] + private PerSecond(double val) : base(val, Units) { } + + [DebuggerHidden] + public static PerSquareSecond operator /(PerSecond perSecond, Second second) + { + return SIBase<PerSquareSecond>.Create(perSecond.Val / second.Value()); + } + + public double AsRPM + { + get { return Val * 60 / (2 * Math.PI); } + } + } + + /// <summary> + /// SI Class for Meter per second [m/s]. + /// </summary> + [DebuggerDisplay("{Val} | {AsKmph}")] + public class MeterPerSecond : SIBase<MeterPerSecond> + { + private static readonly int[] Units = { 0, 1, -1, 0, 0, 0, 0 }; + + [DebuggerHidden] + private MeterPerSecond(double val) : base(val, Units) { } + + public double AsKmph + { + get { return Val * 3.6; } + } + + /// <summary> + /// Implements the operator /. + /// </summary> + [DebuggerHidden] + public static PerSecond operator /(MeterPerSecond meterPerSecond, Meter meter) + { + return SIBase<PerSecond>.Create(meterPerSecond.Val / meter.Value()); + } + + /// <summary> + /// Implements the operator /. + /// </summary> + [DebuggerHidden] + public static Second operator /(MeterPerSecond meterPerSecond, MeterPerSquareSecond meterPerSquareSecond) + { + return SIBase<Second>.Create(meterPerSecond.Val / meterPerSquareSecond.Value()); + } + + /// <summary> + /// Implements the operator /. + /// </summary> + [DebuggerHidden] + public static MeterPerSquareSecond operator /(MeterPerSecond meterPerSecond, Second second) + { + return SIBase<MeterPerSquareSecond>.Create(meterPerSecond.Val / second.Value()); + } + + /// <summary> + /// Implements the operator *. + /// </summary> + [DebuggerHidden] + public static Meter operator *(MeterPerSecond meterPerSecond, Second second) + { + return SIBase<Meter>.Create(meterPerSecond.Val * second.Value()); + } + + /// <summary> + /// Implements the operator *. + /// </summary> + [DebuggerHidden] + public static MeterPerSquareSecond operator *(MeterPerSecond meterPerSecond, PerSecond perSecond) + { + return SIBase<MeterPerSquareSecond>.Create(meterPerSecond.Val * perSecond.Value()); + } + + /// <summary> + /// Implements the operator *. + /// </summary> + [DebuggerHidden] + public static Meter operator *(Second second, MeterPerSecond meterPerSecond) + { + return SIBase<Meter>.Create(second.Value() * meterPerSecond.Val); + } + } + + /// <summary> + /// SI Class for NewtonMeter [Nm]. + /// N = kgm/s^2 + /// </summary> + public class NewtonMeter : SIBase<NewtonMeter> + { + private static readonly int[] Units = { 1, 2, -2, 0, 0, 0, 0 }; + + [DebuggerHidden] + private NewtonMeter(double val) : base(val, Units) { } + + public override string UnitString { get { return "Nm"; } } + + [DebuggerHidden] + public static Watt operator *(NewtonMeter newtonMeter, PerSecond perSecond) + { + return SIBase<Watt>.Create(newtonMeter.Val * perSecond.Value()); + } + + [DebuggerHidden] + public static Watt operator *(PerSecond perSecond, NewtonMeter newtonMeter) + { + return SIBase<Watt>.Create(perSecond.Value() * newtonMeter.Val); + } + + [DebuggerHidden] + public static Second operator /(NewtonMeter newtonMeter, Watt watt) + { + return SIBase<Second>.Create(newtonMeter.Val / watt.Value()); + } + + [DebuggerHidden] + public static PerSquareSecond operator /(NewtonMeter newtonMeter, KilogramSquareMeter kgKilogramSquareMeter) + { + return SIBase<PerSquareSecond>.Create(newtonMeter.Val / kgKilogramSquareMeter.Value()); + } + + [DebuggerHidden] + public static PerSecond operator /(NewtonMeter newtonMeter, NewtonMeterSecond newtonMeterSecond) + { + return SIBase<PerSecond>.Create(newtonMeter.Val / newtonMeterSecond.Value()); + } + + [DebuggerHidden] + public static Newton operator /(NewtonMeter newtonMeter, Meter meter) + { + return SIBase<Newton>.Create(newtonMeter.Val / meter.Value()); + } + + [DebuggerHidden] + public static NewtonMeterSecond operator /(NewtonMeter newtonMeter, PerSecond perSecond) + { + return SIBase<NewtonMeterSecond>.Create(newtonMeter.Val / perSecond.Value()); + } + } + + /// <summary> + /// SI Class for NewtonMeterSecond [Nms]. + /// N = kgm/s^2 + /// </summary> + public class NewtonMeterSecond : SIBase<NewtonMeterSecond> + { + private static readonly int[] Units = { 1, 2, -1, 0, 0, 0, 0 }; + private NewtonMeterSecond(double val) : base(val, Units) { } + + public override string UnitString { get { return "Nms"; } } + } + + /// <summary> + /// SI Class for Amperer [A]. + /// </summary> + public class Ampere : SIBase<Ampere> + { + private static readonly int[] Units = { 0, 0, 0, 1, 0, 0, 0 }; + private Ampere(double val) : base(val, Units) { } + + public static Watt operator *(Ampere ampere, Volt volt) + { + return SIBase<Watt>.Create(volt.Value() * ampere.Val); + } + + public static Ampere operator *(Ampere ampere, double val) + { + return Create(ampere.Val * val); + } + + public static Volt operator /(Watt watt, Ampere ampere) + { + return SIBase<Volt>.Create(watt.Value() / ampere.Value()); + } + } + + /// <summary> + /// SI Class for Amperer [V]. + /// V = kgm^2/As^2 + /// </summary> + public class Volt : SIBase<Volt> + { + private static readonly int[] Units = { 1, 2, -2, -1, 0, 0, 0 }; + private Volt(double val) : base(val, Units) { } + + public override string UnitString { get { return "V"; } } + + public static Watt operator *(Volt volt, Ampere ampere) + { + return SIBase<Watt>.Create(volt.Val * ampere.Value()); + } + + public static Ampere operator /(Watt watt, Volt volt) + { + return SIBase<Ampere>.Create(watt.Value() / volt.Value()); + } + } + + public class VolumePerMeter : SIBase<VolumePerMeter> + { + private static readonly int[] Units = { 0, 2, 0, 0, 0, 0, 0 }; + private VolumePerMeter(double val) : base(val, Units) { } + + public override string UnitString { get { return "m^3/m"; } } + + public static VolumePerMeterMass operator /(VolumePerMeter vpm, Kilogram kg) + { + return SIBase<VolumePerMeterMass>.Create(vpm.Val / kg.Value()); + } + + public static VolumePerMeterVolume operator /(VolumePerMeter vpm, CubicMeter vol) + { + return SIBase<VolumePerMeterVolume>.Create(vpm.Val / vol.Value()); + } + + } + + public class VolumePerMeterMass : SIBase<VolumePerMeterMass> + { + private static readonly int[] Units = { -1, 2, 0, 0, 0, 0, 0 }; + + private VolumePerMeterMass(double val) : base (val, Units) { } + + public override string UnitString { get { return "m^3/kgm"; } } + } + + public class VolumePerMeterVolume : SIBase<VolumePerMeterVolume> + { + private static readonly int[] Units = { 0, -1, 0, 0, 0, 0, 0 }; + + private VolumePerMeterVolume(double val) : base (val, Units) { } + + public override string UnitString { get { return "m^3/kgm^3"; } } + } + + public class KilogramPerMeterCubicMeter : SIBase<KilogramPerMeterCubicMeter> + { + private static readonly int[] Units = { 1, -4, 0, 0, 0, 0, 0 }; + + private KilogramPerMeterCubicMeter(double val) : base(val, Units) { } + + public override string UnitString { get { return "kg/(m m^3)"; } } + } + + + public class KilogramPerMeterMass : SIBase<KilogramPerMeterMass> + { + private static readonly int[] Units = { 0, -1, 0, 0, 0, 0, 0 }; + + private KilogramPerMeterMass(double val) : base(val, Units) { } + + public override string UnitString { get { return "kg/(m kg)"; } } + } + + public class SpecificFuelConsumption : SIBase<SpecificFuelConsumption> + { + private static readonly int[] Units = { 0, -2,2, 0, 0, 0, 0 }; + + private SpecificFuelConsumption(double val) : base(val, Units) { } + + public override string UnitString { get { return "kg/Ws"; } } + } + + /// <summary> + /// Base Class for all special SI Classes. Not intended to be used directly. /// Implements templated operators for type safety and convenience. /// </summary> /// <typeparam name="T"></typeparam> public abstract class SIBase<T> : SI where T : SIBase<T> - { - private static readonly T ZeroPrototype; - - static SIBase() - { - const BindingFlags bindingFlags = BindingFlags.NonPublic | BindingFlags.Instance; - var constructorInfo = typeof(T).GetConstructor(bindingFlags, null, new[] { typeof(double) }, null); - var parameter = Expression.Parameter(typeof(double)); - var lambda = Expression.Lambda<Func<double, T>>(Expression.New(constructorInfo, parameter), parameter); - Constructor = lambda.Compile(); - ZeroPrototype = Constructor(0); - } - - /// <summary> - /// The constructor for the generic type T. - /// </summary> - private static readonly Func<double, T> Constructor; - - /// <summary> - /// Creates the specified special SI object. - /// </summary> - /// <param name="val">The value of the SI object.</param> - [DebuggerStepThrough] - public static T Create(double val) - { - if (val == 0) { - return ZeroPrototype; - } - - return Constructor(val); - } - - [DebuggerStepThrough] - protected SIBase(double value, int[] units) : base(value, units) { } + { + private static readonly T ZeroPrototype; + + static SIBase() + { + const BindingFlags bindingFlags = BindingFlags.NonPublic | BindingFlags.Instance; + var constructorInfo = typeof(T).GetConstructor(bindingFlags, null, new[] { typeof(double) }, null); + var parameter = Expression.Parameter(typeof(double)); + var lambda = Expression.Lambda<Func<double, T>>(Expression.New(constructorInfo, parameter), parameter); + Constructor = lambda.Compile(); + ZeroPrototype = Constructor(0); + } + + /// <summary> + /// The constructor for the generic type T. + /// </summary> + private static readonly Func<double, T> Constructor; + + /// <summary> + /// Creates the specified special SI object. + /// </summary> + /// <param name="val">The value of the SI object.</param> + [DebuggerStepThrough] + public static T Create(double val) + { + if (val == 0) { + return ZeroPrototype; + } + + return Constructor(val); + } + + [DebuggerStepThrough] + protected SIBase(double value, int[] units) : base(value, units) { } + + protected SIBase(double value, double unitFactor, int[] units) : base(value, unitFactor, units) { } + + [DebuggerStepThrough] + public new T Abs() + { + return Create(Math.Abs(Val)); + } + + #region Operators + + /// <summary> + /// Implements the operator + for two specialized SI Classes. + /// </summary> + /// <param name="si1">The si1.</param> + /// <param name="si2">The si2.</param> + /// <returns> + /// The result of the operator. + /// </returns> + [DebuggerHidden] + public static T operator +(SIBase<T> si1, SIBase<T> si2) + { + return Create(si1.Val + si2.Val); + } + + /// <summary> + /// Implements the operator + for a specialized SI Class and a generic SI Class. + /// </summary> + /// <param name="si1">The si1.</param> + /// <param name="si2">The si2.</param> + /// <returns> + /// The result of the operator. + /// </returns> + [DebuggerHidden] + public static T operator +(SIBase<T> si1, SI si2) + { + return ((si1 as SI) + si2).Cast<T>(); + } + + /// <summary> + /// Implements the operator + for a generic SI Class and a specialized SI Class. + /// </summary> + /// <param name="si1">The si1.</param> + /// <param name="si2">The si2.</param> + /// <returns> + /// The result of the operator. + /// </returns> + [DebuggerHidden] + public static T operator +(SI si1, SIBase<T> si2) + { + return (si1 + (si2 as SI)).Cast<T>(); + } + + /// <summary> + /// Implements the unary operator -. + /// </summary> + /// <param name="si1">The si1.</param> + /// <returns> + /// The result of the operator. + /// </returns> + [DebuggerHidden] + public static T operator -(SIBase<T> si1) + { + return Create(-si1.Val); + } + + /// <summary> + /// Implements the operator - for two specialized SI classes. + /// </summary> + /// <param name="si1">The si1.</param> + /// <param name="si2">The si2.</param> + /// <returns> + /// The result of the operator. + /// </returns> + [DebuggerHidden] + public static T operator -(SIBase<T> si1, SIBase<T> si2) + { + return Create(si1.Val - si2.Val); + } + + /// <summary> + /// Implements the operator - for a specialized SI class and a generic SI class. + /// </summary> + /// <param name="si1">The si1.</param> + /// <param name="si2">The si2.</param> + /// <returns> + /// The result of the operator. + /// </returns> + [DebuggerHidden] + public static T operator -(SIBase<T> si1, SI si2) + { + return ((si1 as SI) - si2).Cast<T>(); + } + + /// <summary> + /// Implements the operator - for a generic SI class and a specialized SI class. + /// </summary> + /// <param name="si1">The si1.</param> + /// <param name="si2">The si2.</param> + /// <returns> + /// The result of the operator. + /// </returns> + [DebuggerHidden] + public static T operator -(SI si1, SIBase<T> si2) + { + return (si1 - (si2 as SI)).Cast<T>(); + } + + /// <summary> + /// Implements the operator * for a double and a specialized SI class. + /// </summary> + /// <param name="d">The double value.</param> + /// <param name="si">The si.</param> + /// <returns> + /// The result of the operator. + /// </returns> + [DebuggerHidden] + public static T operator *(double d, SIBase<T> si) + { + return Create(d * si.Val); + } + + /// <summary> + /// Implements the operator * for a specialized SI class and a double. + /// </summary> + /// <param name="si">The si.</param> + /// <param name="d">The double.</param> + /// <returns> + /// The result of the operator. + /// </returns> + [DebuggerHidden] + public static T operator *(SIBase<T> si, double d) + { + return Create(si.Val * d); + } + + /// <summary> + /// Implements the operator / for a specialized SI class and a double. + /// </summary> + /// <param name="si">The si.</param> + /// <param name="d">The double.</param> + /// <returns> + /// The result of the operator. + /// </returns> + [DebuggerHidden] + public static T operator /(SIBase<T> si, double d) + { + return Create(si.Val / d); + } + + [DebuggerHidden] + public static Scalar operator /(SIBase<T> si, SIBase<T> si2) + { + return SIBase<Scalar>.Create(si.Val / si2.Val); + } + + #endregion + } + + /// <summary> + /// Class for representing generic SI Units. + /// </summary> + /// <remarks> + /// Usage: new SI(1.0).Newton.Meter, new SI(2.3).Rounds.Per.Minute + /// </remarks> + [DebuggerDisplay("{Val} [{UnitString}]")] + public class SI : IComparable + { + /// <summary> + /// The basic scalar value of the SI. + /// </summary> + protected readonly double Val; + + /// <summary> + /// The array of the SI units. + /// </summary> + private readonly int[] _units; + + private double UnitFactor; + + /// <summary> + /// Initializes a new instance of the <see cref="SI"/> class which allows to construct a new SI with all parameters. + /// </summary> + /// <param name="val">The value.</param> + /// <param name="unitFactor"></param> + /// <param name="units">The units.</param> + protected SI(double val, double unitFactor, int[] units) + { + Val = val; + _units = units; + UnitFactor = unitFactor; + + if (double.IsNaN(Val)) { + throw new VectoException("NaN [{0}] is not allowed for SI-Values in Vecto.", GetUnitString()); + } + + if (double.IsInfinity(Val)) { + throw new VectoException("Infinity [{0}] is not allowed for SI-Values in Vecto.", GetUnitString()); + } + } + + protected SI(double val, int[] units) : this(val, 1, units) { } + + + public SI(UnitInstance si, double val = 0) : this(val * si.Factor, si.GetSIUnits()) { } + + /// <summary> + /// Initializes a new instance of the <see cref="SI"/> class which copies the units from an already existing SI. + /// </summary> + /// <param name="val">The value.</param> + /// <param name="unit">The unit.</param> + [DebuggerHidden] + private SI(double val, SI unit) : this(val, unit.UnitFactor,unit._units) { } + + /// <summary> + /// Casts the SI Unit to the concrete unit type (if the units allow such an cast). + /// </summary> + /// <typeparam name="T">the specialized SI unit. e.g. Watt, NewtonMeter, Second</typeparam> + [DebuggerHidden] + public T Cast<T>() where T : SIBase<T> + { + var si = ToBasicUnits(); + var zero = SIBase<T>.Create(0); + var t = SIBase<T>.Create(si.Val / zero.UnitFactor); + if (!si.HasEqualUnit(t)) { + throw new VectoException("SI Unit Conversion failed: From {0} to {1}", si, t); + } + return t; + } + + /// <summary> + /// Converts the derived SI units to the basic units and returns this as a new SI object. + /// </summary> + public SI ToBasicUnits() + { + return new SI(Val * UnitFactor, _units); + } + + protected double AsBasicUnit + { + get { return Val * UnitFactor; } + } + + + /// <summary> + /// Gets the underlying scalar double value. + /// </summary> + [DebuggerHidden] + public double Value() + { + return Val; + } + + /// <summary> + /// Clones this instance. + /// </summary> + public SI Clone() + { + return new SI(Val, _units); + } + + /// <summary> + /// Returns the absolute value. + /// </summary> + public SI Abs() + { + return new SI(Math.Abs(Val), this); + } + + /// <summary> + /// Returns the numerical sign of the SI. + /// </summary> + /// <returns>-1 if si < 0. 0 if si==0, 1 if si > 0.</returns> + [DebuggerHidden] + public int Sign() + { + return Math.Sign(Val); + } + + #region Operators + + [DebuggerHidden] + public static SI operator +(SI si1, SI si2) + { + if (!si1.HasEqualUnit(si2)) { + throw new VectoException("Operator '+' can only operate on SI Objects with the same unit. Got: {0} + {1}", si1, si2); + } + + + return new SI(si1.Val + si2.Val, si1); + } + + [DebuggerHidden] + public static SI operator -(SI si1, SI si2) + { + if (!si1.HasEqualUnit(si2)) { + throw new VectoException("Operator '-' can only operate on SI Objects with the same unit. Got: {0} - {1}", si1, si2); + } + return new SI(si1.Val - si2.Val, si1); + } + + [DebuggerHidden] + public static SI operator -(SI si1) + { + return new SI(-si1.Val, si1); + } + + public static SI operator *(SI si1, SI si2) + { + var unitArray = SIUtils.CombineUnits(si1._units, si2._units); + return new SI(si1.AsBasicUnit * si2.AsBasicUnit, unitArray); + } - protected SIBase(double value, double unitFactor, int[] units) : base(value, unitFactor, units) { } + [DebuggerHidden] + public static SI operator *(SI si1, double d) + { + return new SI(si1.Val * d, si1); + } - [DebuggerStepThrough] - public new T Abs() - { - return Create(Math.Abs(Val)); - } - - #region Operators - - /// <summary> - /// Implements the operator + for two specialized SI Classes. - /// </summary> - /// <param name="si1">The si1.</param> - /// <param name="si2">The si2.</param> - /// <returns> - /// The result of the operator. - /// </returns> - [DebuggerHidden] - public static T operator +(SIBase<T> si1, SIBase<T> si2) - { - return Create(si1.Val + si2.Val); - } - - /// <summary> - /// Implements the operator + for a specialized SI Class and a generic SI Class. - /// </summary> - /// <param name="si1">The si1.</param> - /// <param name="si2">The si2.</param> - /// <returns> - /// The result of the operator. - /// </returns> - [DebuggerHidden] - public static T operator +(SIBase<T> si1, SI si2) - { - return ((si1 as SI) + si2).Cast<T>(); - } - - /// <summary> - /// Implements the operator + for a generic SI Class and a specialized SI Class. - /// </summary> - /// <param name="si1">The si1.</param> - /// <param name="si2">The si2.</param> - /// <returns> - /// The result of the operator. - /// </returns> - [DebuggerHidden] - public static T operator +(SI si1, SIBase<T> si2) - { - return (si1 + (si2 as SI)).Cast<T>(); - } - - /// <summary> - /// Implements the unary operator -. - /// </summary> - /// <param name="si1">The si1.</param> - /// <returns> - /// The result of the operator. - /// </returns> - [DebuggerHidden] - public static T operator -(SIBase<T> si1) - { - return Create(-si1.Val); - } - - /// <summary> - /// Implements the operator - for two specialized SI classes. - /// </summary> - /// <param name="si1">The si1.</param> - /// <param name="si2">The si2.</param> - /// <returns> - /// The result of the operator. - /// </returns> - [DebuggerHidden] - public static T operator -(SIBase<T> si1, SIBase<T> si2) - { - return Create(si1.Val - si2.Val); - } - - /// <summary> - /// Implements the operator - for a specialized SI class and a generic SI class. - /// </summary> - /// <param name="si1">The si1.</param> - /// <param name="si2">The si2.</param> - /// <returns> - /// The result of the operator. - /// </returns> - [DebuggerHidden] - public static T operator -(SIBase<T> si1, SI si2) - { - return ((si1 as SI) - si2).Cast<T>(); - } - - /// <summary> - /// Implements the operator - for a generic SI class and a specialized SI class. - /// </summary> - /// <param name="si1">The si1.</param> - /// <param name="si2">The si2.</param> - /// <returns> - /// The result of the operator. - /// </returns> - [DebuggerHidden] - public static T operator -(SI si1, SIBase<T> si2) - { - return (si1 - (si2 as SI)).Cast<T>(); - } - - /// <summary> - /// Implements the operator * for a double and a specialized SI class. - /// </summary> - /// <param name="d">The double value.</param> - /// <param name="si">The si.</param> - /// <returns> - /// The result of the operator. - /// </returns> - [DebuggerHidden] - public static T operator *(double d, SIBase<T> si) - { - return Create(d * si.Val); - } - - /// <summary> - /// Implements the operator * for a specialized SI class and a double. - /// </summary> - /// <param name="si">The si.</param> - /// <param name="d">The double.</param> - /// <returns> - /// The result of the operator. - /// </returns> - [DebuggerHidden] - public static T operator *(SIBase<T> si, double d) - { - return Create(si.Val * d); - } - - /// <summary> - /// Implements the operator / for a specialized SI class and a double. - /// </summary> - /// <param name="si">The si.</param> - /// <param name="d">The double.</param> - /// <returns> - /// The result of the operator. - /// </returns> - [DebuggerHidden] - public static T operator /(SIBase<T> si, double d) - { - return Create(si.Val / d); - } - - [DebuggerHidden] - public static Scalar operator /(SIBase<T> si, SIBase<T> si2) - { - return SIBase<Scalar>.Create(si.Val / si2.Val); - } - - #endregion - } - - /// <summary> - /// Class for representing generic SI Units. - /// </summary> - /// <remarks> - /// Usage: new SI(1.0).Newton.Meter, new SI(2.3).Rounds.Per.Minute - /// </remarks> - [DebuggerDisplay("{Val} [{UnitString}]")] - public class SI : IComparable - { - /// <summary> - /// The basic scalar value of the SI. - /// </summary> - protected readonly double Val; - - /// <summary> - /// The array of the SI units. - /// </summary> - private readonly int[] _units; + [DebuggerHidden] + public static SI operator *(double d, SI si1) + { + return new SI(d * si1.Val, si1); + } - private double UnitFactor; + public static SI operator /(SI si1, SI si2) + { + double result; + try { + result = si1.AsBasicUnit / si2.AsBasicUnit; + + // bad cases: Infinity = x / 0.0 (for x != 0), NaN = 0.0 / 0.0 + if (double.IsInfinity(result) || double.IsNaN(result)) { + throw new DivideByZeroException(); + } + } catch (DivideByZeroException ex) { + throw new VectoException( + string.Format("Can not compute division by zero ([{0}] / 0[{1}])", si1.UnitString, si2.UnitString), ex); + } - /// <summary> - /// Initializes a new instance of the <see cref="SI"/> class which allows to construct a new SI with all parameters. - /// </summary> - /// <param name="val">The value.</param> - /// <param name="unitFactor"></param> - /// <param name="units">The units.</param> - protected SI(double val, double unitFactor, int[] units) - { - Val = val; - _units = units; - UnitFactor = unitFactor; + var unitArray = SIUtils.CombineUnits(si1._units, SIUtils.MultiplyUnits(si2._units, -1)); - if (double.IsNaN(Val)) { - throw new VectoException("NaN [{0}] is not allowed for SI-Values in Vecto.", GetUnitString()); - } + return new SI(result, unitArray); + } - if (double.IsInfinity(Val)) { - throw new VectoException("Infinity [{0}] is not allowed for SI-Values in Vecto.", GetUnitString()); - } - } + [DebuggerHidden] + public static SI operator /(SI si1, double d) + { + if (d.IsEqual(0)) { + throw new VectoException(string.Format("Can not compute division by zero ([{0}] / 0)", si1.UnitString), new DivideByZeroException()); + } - protected SI(double val, int[] units) : this(val, 1, units) { } + return new SI(si1.Val / d, si1); + } + [DebuggerHidden] + public static SI operator /(double d, SI si1) + { + if (si1.IsEqual(0)) { + throw new VectoException(string.Format("Can not compute division by zero (x / 0[{0}])", si1.UnitString), + new DivideByZeroException()); + } - public SI(UnitInstance si, double val = 0) : this(val * si.Factor, si.GetSIUnits()) { } + return new SI(d / si1.AsBasicUnit, si1._units.Select(u => -u).ToArray()); + } - /// <summary> - /// Initializes a new instance of the <see cref="SI"/> class which copies the units from an already existing SI. - /// </summary> - /// <param name="val">The value.</param> - /// <param name="unit">The unit.</param> - [DebuggerHidden] - private SI(double val, SI unit) : this(val, unit.UnitFactor,unit._units) { } - - /// <summary> - /// Casts the SI Unit to the concrete unit type (if the units allow such an cast). - /// </summary> - /// <typeparam name="T">the specialized SI unit. e.g. Watt, NewtonMeter, Second</typeparam> - [DebuggerHidden] - public T Cast<T>() where T : SIBase<T> - { - var si = ToBasicUnits(); - var zero = SIBase<T>.Create(0); - var t = SIBase<T>.Create(si.Val / zero.UnitFactor); - if (!si.HasEqualUnit(t)) { - throw new VectoException("SI Unit Conversion failed: From {0} to {1}", si, t); - } - return t; - } - - /// <summary> - /// Converts the derived SI units to the basic units and returns this as a new SI object. - /// </summary> - public SI ToBasicUnits() - { - return new SI(Val * UnitFactor, _units); - } + [DebuggerHidden] + public static bool operator <(SI si1, SI si2) + { + if (!si1.HasEqualUnit(si2)) { + throw new VectoException("Operator '<' can only operate on SI Objects with the same unit. Got: {0} < {1}", si1, si2); + } + return si1.AsBasicUnit < si2.AsBasicUnit; + } - protected double AsBasicUnit + [DebuggerHidden] + public static bool operator <(SI si1, double d) { - get { return Val * UnitFactor; } + return si1 != null && si1.Val < d; + } + + [DebuggerHidden] + public static bool operator >(SI si1, SI si2) + { + if (!si1.HasEqualUnit(si2)) { + throw new VectoException("Operator '>' can only operate on SI Objects with the same unit. Got: {0} > {1}", si1, si2); + } + return si1.AsBasicUnit > si2.AsBasicUnit; + } + + [DebuggerHidden] + public static bool operator >(SI si1, double d) + { + return si1 != null && si1.Val > d; + } + + [DebuggerHidden] + public static bool operator >(double d, SI si1) + { + return si1 != null && d > si1.Val; + } + + [DebuggerHidden] + public static bool operator <(double d, SI si1) + { + return si1 != null && d < si1.Val; + } + + [DebuggerHidden] + public static bool operator <=(SI si1, SI si2) + { + if (!si1.HasEqualUnit(si2)) { + throw new VectoException("Operator '<=' can only operate on SI Objects with the same unit. Got: {0} <= {1}", si1, + si2); + } + return si1.AsBasicUnit <= si2.AsBasicUnit; + } + + [DebuggerHidden] + public static bool operator <=(SI si1, double d) + { + return si1 != null && si1.Val <= d; + } + + [DebuggerHidden] + public static bool operator >=(SI si1, SI si2) + { + if (!si1.HasEqualUnit(si2)) { + throw new VectoException("Operator '>=' can only operate on SI Objects with the same unit. Got: {0} >= {1}", si1, + si2); + } + return si1.AsBasicUnit >= si2.AsBasicUnit; + } + + [DebuggerHidden] + public static bool operator >=(SI si1, double d) + { + return si1 != null && si1.Val >= d; + } + + [DebuggerHidden] + public static bool operator >=(double d, SI si1) + { + return si1 != null && d >= si1.Val; + } + + [DebuggerHidden] + public static bool operator <=(double d, SI si1) + { + return si1 != null && d <= si1.Val; + } + + /// <summary> + /// Determines whether the SI is between lower and uppper bound. + /// </summary> + /// <param name="lower">The lower bound.</param> + /// <param name="upper">The upper bound.</param> + /// <returns></returns> + public bool IsBetween(SI lower, SI upper) + { + return lower <= Val && Val <= upper; } + /// <summary> + /// Determines whether the SI is between lower and upper bound. + /// </summary> + /// <param name="lower">The lower bound.</param> + /// <param name="upper">The upper bound.</param> + /// <returns></returns> + public bool IsBetween(double lower, double upper) + { + return lower <= Val && Val <= upper; + } - /// <summary> - /// Gets the underlying scalar double value. - /// </summary> - [DebuggerHidden] - public double Value() - { - return Val; - } - - /// <summary> - /// Clones this instance. - /// </summary> - public SI Clone() - { - return new SI(Val, _units); - } - - /// <summary> - /// Returns the absolute value. - /// </summary> - public SI Abs() - { - return new SI(Math.Abs(Val), this); - } - - /// <summary> - /// Returns the numerical sign of the SI. - /// </summary> - /// <returns>-1 if si < 0. 0 if si==0, 1 if si > 0.</returns> - [DebuggerHidden] - public int Sign() - { - return Math.Sign(Val); - } - - #region Operators - - [DebuggerHidden] - public static SI operator +(SI si1, SI si2) - { - if (!si1.HasEqualUnit(si2)) { - throw new VectoException("Operator '+' can only operate on SI Objects with the same unit. Got: {0} + {1}", si1, si2); - } - - - return new SI(si1.Val + si2.Val, si1); - } - - [DebuggerHidden] - public static SI operator -(SI si1, SI si2) - { - if (!si1.HasEqualUnit(si2)) { - throw new VectoException("Operator '-' can only operate on SI Objects with the same unit. Got: {0} - {1}", si1, si2); - } - return new SI(si1.Val - si2.Val, si1); - } - - [DebuggerHidden] - public static SI operator -(SI si1) - { - return new SI(-si1.Val, si1); - } - - public static SI operator *(SI si1, SI si2) - { - var unitArray = SIUtils.CombineUnits(si1._units, si2._units); - return new SI(si1.AsBasicUnit * si2.AsBasicUnit, unitArray); - } - - [DebuggerHidden] - public static SI operator *(SI si1, double d) - { - return new SI(si1.Val * d, si1); - } - - [DebuggerHidden] - public static SI operator *(double d, SI si1) - { - return new SI(d * si1.Val, si1); - } - - public static SI operator /(SI si1, SI si2) - { - double result; - try { - result = si1.AsBasicUnit / si2.AsBasicUnit; - - // bad cases: Infinity = x / 0.0 (for x != 0), NaN = 0.0 / 0.0 - if (double.IsInfinity(result) || double.IsNaN(result)) { - throw new DivideByZeroException(); - } - } catch (DivideByZeroException ex) { - throw new VectoException( - string.Format("Can not compute division by zero ([{0}] / 0[{1}])", si1.UnitString, si2.UnitString), ex); - } - - var unitArray = SIUtils.CombineUnits(si1._units, SIUtils.MultiplyUnits(si2._units, -1)); - - return new SI(result, unitArray); - } - - [DebuggerHidden] - public static SI operator /(SI si1, double d) - { - if (d.IsEqual(0)) { - throw new VectoException(string.Format("Can not compute division by zero ([{0}] / 0)", si1.UnitString), new DivideByZeroException()); - } - - return new SI(si1.Val / d, si1); - } - - [DebuggerHidden] - public static SI operator /(double d, SI si1) - { - if (si1.IsEqual(0)) { - throw new VectoException(string.Format("Can not compute division by zero (x / 0[{0}])", si1.UnitString), - new DivideByZeroException()); - } - - return new SI(d / si1.AsBasicUnit, si1._units.Select(u => -u).ToArray()); - } - - [DebuggerHidden] - public static bool operator <(SI si1, SI si2) - { - if (!si1.HasEqualUnit(si2)) { - throw new VectoException("Operator '<' can only operate on SI Objects with the same unit. Got: {0} < {1}", si1, si2); - } - return si1.AsBasicUnit < si2.AsBasicUnit; - } - - [DebuggerHidden] - public static bool operator <(SI si1, double d) - { - return si1 != null && si1.Val < d; - } - - [DebuggerHidden] - public static bool operator >(SI si1, SI si2) - { - if (!si1.HasEqualUnit(si2)) { - throw new VectoException("Operator '>' can only operate on SI Objects with the same unit. Got: {0} > {1}", si1, si2); - } - return si1.AsBasicUnit > si2.AsBasicUnit; - } - - [DebuggerHidden] - public static bool operator >(SI si1, double d) - { - return si1 != null && si1.Val > d; - } - - [DebuggerHidden] - public static bool operator >(double d, SI si1) - { - return si1 != null && d > si1.Val; - } - - [DebuggerHidden] - public static bool operator <(double d, SI si1) - { - return si1 != null && d < si1.Val; - } - - [DebuggerHidden] - public static bool operator <=(SI si1, SI si2) - { - if (!si1.HasEqualUnit(si2)) { - throw new VectoException("Operator '<=' can only operate on SI Objects with the same unit. Got: {0} <= {1}", si1, - si2); - } - return si1.AsBasicUnit <= si2.AsBasicUnit; - } - - [DebuggerHidden] - public static bool operator <=(SI si1, double d) - { - return si1 != null && si1.Val <= d; - } - - [DebuggerHidden] - public static bool operator >=(SI si1, SI si2) - { - if (!si1.HasEqualUnit(si2)) { - throw new VectoException("Operator '>=' can only operate on SI Objects with the same unit. Got: {0} >= {1}", si1, - si2); - } - return si1.AsBasicUnit >= si2.AsBasicUnit; - } - - [DebuggerHidden] - public static bool operator >=(SI si1, double d) - { - return si1 != null && si1.Val >= d; - } - - [DebuggerHidden] - public static bool operator >=(double d, SI si1) - { - return si1 != null && d >= si1.Val; - } - - [DebuggerHidden] - public static bool operator <=(double d, SI si1) - { - return si1 != null && d <= si1.Val; - } - - /// <summary> - /// Determines whether the SI is between lower and uppper bound. - /// </summary> - /// <param name="lower">The lower bound.</param> - /// <param name="upper">The upper bound.</param> - /// <returns></returns> - public bool IsBetween(SI lower, SI upper) - { - return lower <= Val && Val <= upper; - } - - /// <summary> - /// Determines whether the SI is between lower and upper bound. - /// </summary> - /// <param name="lower">The lower bound.</param> - /// <param name="upper">The upper bound.</param> - /// <returns></returns> - public bool IsBetween(double lower, double upper) - { - return lower <= Val && Val <= upper; - } - - #endregion - - #region ToString - - /// <summary> - /// Returns the Unit Part of the SI Unit Expression. - /// </summary> - public static string GetUnitString(int[] units = null) - { - if (units == null) { + #endregion + + #region ToString + + /// <summary> + /// Returns the Unit Part of the SI Unit Expression. + /// </summary> + public static string GetUnitString(int[] units = null) + { + if (units == null) { return ""; } - return Unit.GetUnitString(units); - } + return Unit.GetUnitString(units); + } - public override string ToString() - { - return ToString(null); - } + public override string ToString() + { + return ToString(null); + } public virtual string UnitString { get { return GetUnitString(_units); } } - private string ToString(string format) - { - if (string.IsNullOrEmpty(format)) { - format = "F4"; - } - - return string.Format(CultureInfo.InvariantCulture, "{0:" + format + "} [{2}]", Val, format, UnitString); - } - - #endregion - - #region Equality members - - /// <summary> - /// Compares the Unit-Parts of two SI Units. - /// </summary> - /// <param name="si">The si.</param> - /// <returns></returns> - [DebuggerHidden] - public bool HasEqualUnit(SI si) - { - return SIUtils.CompareUnits(_units, si._units); - } - - /// <summary> - /// Determines whether the specified <see cref="System.Object" />, is equal to this instance. - /// </summary> - /// <param name="obj">The <see cref="System.Object" /> to compare with this instance.</param> - /// <returns> - /// <c>true</c> if the specified <see cref="System.Object" /> is equal to this instance; otherwise, <c>false</c>. - /// </returns> - public override bool Equals(object obj) - { - if (ReferenceEquals(null, obj)) { - return false; - } - if (ReferenceEquals(this, obj)) { - return true; - } - var other = obj as SI; - - return other != null && AsBasicUnit.Equals(other.AsBasicUnit) && HasEqualUnit(other); - } - - /// <summary> - /// Determines whether the specified si is equal. - /// </summary> - /// <param name="si">The si.</param> - /// <param name="tolerance">The tolerance.</param> - /// <returns></returns> - public bool IsEqual(SI si, SI tolerance = null) - { - return (tolerance == null || HasEqualUnit(tolerance)) && HasEqualUnit(si) && - AsBasicUnit.IsEqual(si.AsBasicUnit, tolerance == null ? DoubleExtensionMethods.Tolerance : tolerance.Value()); - } - - /// <summary> - /// Determines whether the specified value is equal. - /// </summary> - /// <param name="val">The value.</param> - /// <param name="tolerance">The tolerance.</param> - /// <returns></returns> - [DebuggerHidden] - public bool IsEqual(double val, double tolerance = DoubleExtensionMethods.Tolerance) - { - return Val.IsEqual(val, tolerance); - } - - /// <summary> - /// Determines whether the specified si is smaller. - /// </summary> - /// <param name="si">The si.</param> - /// <param name="tolerance">The tolerance.</param> - /// <returns></returns> - public bool IsSmaller(SI si, SI tolerance = null) - { - if (!HasEqualUnit(si)) { - throw new VectoException("compared value has to be the same unit. Got: {0} <=> {1}", this, si); - } - if (tolerance != null && !HasEqualUnit(tolerance)) { - throw new VectoException("tolerance has to be the same unit. Got: {0} <=> {1}", this, tolerance); - } - - return AsBasicUnit.IsSmaller(si.AsBasicUnit, tolerance == null ? DoubleExtensionMethods.Tolerance : tolerance.Value()); - } - - /// <summary> - /// Determines whether the specified si is smaller. - /// </summary> - /// <param name="si">The si.</param> - /// <param name="tolerance">The tolerance.</param> - /// <returns></returns> - public bool IsSmaller(SI si, double tolerance) - { - if (!HasEqualUnit(si)) { - throw new VectoException("compared value has to be the same unit. Got: {0} <=> {1}", this, si); - } - - return Val.IsSmaller(si.Val, tolerance); - } - - /// <summary> - /// Determines whether [is smaller or equal] [the specified si]. - /// </summary> - /// <param name="si">The si.</param> - /// <param name="tolerance">The tolerance.</param> - /// <returns></returns> - public bool IsSmallerOrEqual(SI si, SI tolerance = null) - { - if (!HasEqualUnit(si)) { - throw new VectoException("compared value has to be the same unit. Got: {0} <=> {1}", this, si); - } - if (tolerance != null && !HasEqualUnit(tolerance)) { - throw new VectoException("tolerance has to be the same unit. Got: {0} <=> {1}", this, tolerance); - } - - return AsBasicUnit.IsSmallerOrEqual(si.AsBasicUnit, tolerance == null ? DoubleExtensionMethods.Tolerance : tolerance.Value()); - } - - /// <summary> - /// Determines whether the specified si is greater. - /// </summary> - /// <param name="si">The si.</param> - /// <param name="tolerance">The tolerance.</param> - /// <returns></returns> - public bool IsGreater(SI si, SI tolerance = null) - { - if (!HasEqualUnit(si)) { - throw new VectoException("compared value has to be the same unit. Got: {0} <=> {1}", this, si); - } - if (tolerance != null && !HasEqualUnit(tolerance)) { - throw new VectoException("tolerance has to be the same unit. Got: {0} <=> {1}", this, tolerance); - } - - return AsBasicUnit.IsGreater(si.AsBasicUnit, tolerance == null ? DoubleExtensionMethods.Tolerance : tolerance.Value()); - } - - /// <summary> - /// Determines whether the specified si is greater. - /// </summary> - /// <param name="si">The si.</param> - /// <param name="tolerance">The tolerance.</param> - /// <returns></returns> - [DebuggerStepThrough] - public bool IsGreater(SI si, double tolerance) - { - if (!HasEqualUnit(si)) { - throw new VectoException("compared value has to be the same unit. Got: {0} <=> {1}", this, si); - } - - return Val.IsGreater(si.Val, tolerance); - } - - /// <summary> - /// Determines whether [is greater or equal] [the specified si]. - /// </summary> - /// <param name="si">The si.</param> - /// <param name="tolerance">The tolerance.</param> - /// <returns></returns> - [DebuggerStepThrough] - public bool IsGreaterOrEqual(SI si, SI tolerance = null) - { - if (!HasEqualUnit(si)) { - throw new VectoException("compared value has to be the same unit. Got: {0} <=> {1}", this, si); - } - if (tolerance != null && !HasEqualUnit(tolerance)) { - throw new VectoException("tolerance has to be the same unit. Got: {0} <=> {1}", this, tolerance); - } - - return AsBasicUnit.IsGreaterOrEqual(si.AsBasicUnit, tolerance == null ? DoubleExtensionMethods.Tolerance : tolerance.Value()); - } - - /// <summary> - /// Determines whether the specified value is smaller. - /// </summary> - /// <param name="val">The value.</param> - /// <param name="tolerance">The tolerance.</param> - /// <returns></returns> - [DebuggerStepThrough] - public bool IsSmaller(double val, double tolerance = DoubleExtensionMethods.Tolerance) - { - return Val.IsSmaller(val, tolerance); - } - - /// <summary> - /// Determines whether [is smaller or equal] [the specified value]. - /// </summary> - /// <param name="val">The value.</param> - /// <param name="tolerance">The tolerance.</param> - /// <returns></returns> - [DebuggerStepThrough] - public bool IsSmallerOrEqual(double val, double tolerance = DoubleExtensionMethods.Tolerance) - { - return Val.IsSmallerOrEqual(val, tolerance); - } - - /// <summary> - /// Determines whether the specified value is greater. - /// </summary> - /// <param name="val">The value.</param> - /// <param name="tolerance">The tolerance.</param> - /// <returns></returns> - [DebuggerStepThrough] - public bool IsGreater(double val, double tolerance = DoubleExtensionMethods.Tolerance) - { - return Val.IsGreater(val, tolerance); - } - - /// <summary> - /// Determines whether [is greater or equal] [the specified value]. - /// </summary> - /// <param name="val">The value.</param> - /// <param name="tolerance">The tolerance.</param> - /// <returns></returns> - [DebuggerStepThrough] - public bool IsGreaterOrEqual(double val, double tolerance = DoubleExtensionMethods.Tolerance) - { - return Val.IsGreaterOrEqual(val, tolerance); - } - - public override int GetHashCode() - { - unchecked { - // ReSharper disable once NonReadonlyMemberInGetHashCode - var hashCode = Val.GetHashCode(); - hashCode = (hashCode * 397) ^ (_units != null ? _units.GetHashCode() : 0); - return hashCode; - } - } - - public int CompareTo(object obj) - { - var si = obj as SI; - if (si == null) { - return 1; - } - - if (!HasEqualUnit(si)) { + private string ToString(string format) + { + if (string.IsNullOrEmpty(format)) { + format = "F4"; + } + + return string.Format(CultureInfo.InvariantCulture, "{0:" + format + "} [{2}]", Val, format, UnitString); + } + + #endregion + + #region Equality members + + /// <summary> + /// Compares the Unit-Parts of two SI Units. + /// </summary> + /// <param name="si">The si.</param> + /// <returns></returns> + [DebuggerHidden] + public bool HasEqualUnit(SI si) + { + return SIUtils.CompareUnits(_units, si._units); + } + + /// <summary> + /// Determines whether the specified <see cref="System.Object" />, is equal to this instance. + /// </summary> + /// <param name="obj">The <see cref="System.Object" /> to compare with this instance.</param> + /// <returns> + /// <c>true</c> if the specified <see cref="System.Object" /> is equal to this instance; otherwise, <c>false</c>. + /// </returns> + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) { + return false; + } + if (ReferenceEquals(this, obj)) { + return true; + } + var other = obj as SI; + + return other != null && AsBasicUnit.Equals(other.AsBasicUnit) && HasEqualUnit(other); + } + + /// <summary> + /// Determines whether the specified si is equal. + /// </summary> + /// <param name="si">The si.</param> + /// <param name="tolerance">The tolerance.</param> + /// <returns></returns> + public bool IsEqual(SI si, SI tolerance = null) + { + return (tolerance == null || HasEqualUnit(tolerance)) && HasEqualUnit(si) && + AsBasicUnit.IsEqual(si.AsBasicUnit, tolerance == null ? DoubleExtensionMethods.Tolerance : tolerance.Value()); + } + + /// <summary> + /// Determines whether the specified value is equal. + /// </summary> + /// <param name="val">The value.</param> + /// <param name="tolerance">The tolerance.</param> + /// <returns></returns> + [DebuggerHidden] + public bool IsEqual(double val, double tolerance = DoubleExtensionMethods.Tolerance) + { + return Val.IsEqual(val, tolerance); + } + + /// <summary> + /// Determines whether the specified si is smaller. + /// </summary> + /// <param name="si">The si.</param> + /// <param name="tolerance">The tolerance.</param> + /// <returns></returns> + public bool IsSmaller(SI si, SI tolerance = null) + { + if (!HasEqualUnit(si)) { + throw new VectoException("compared value has to be the same unit. Got: {0} <=> {1}", this, si); + } + if (tolerance != null && !HasEqualUnit(tolerance)) { + throw new VectoException("tolerance has to be the same unit. Got: {0} <=> {1}", this, tolerance); + } + + return AsBasicUnit.IsSmaller(si.AsBasicUnit, tolerance == null ? DoubleExtensionMethods.Tolerance : tolerance.Value()); + } + + /// <summary> + /// Determines whether the specified si is smaller. + /// </summary> + /// <param name="si">The si.</param> + /// <param name="tolerance">The tolerance.</param> + /// <returns></returns> + public bool IsSmaller(SI si, double tolerance) + { + if (!HasEqualUnit(si)) { + throw new VectoException("compared value has to be the same unit. Got: {0} <=> {1}", this, si); + } + + return Val.IsSmaller(si.Val, tolerance); + } + + /// <summary> + /// Determines whether [is smaller or equal] [the specified si]. + /// </summary> + /// <param name="si">The si.</param> + /// <param name="tolerance">The tolerance.</param> + /// <returns></returns> + public bool IsSmallerOrEqual(SI si, SI tolerance = null) + { + if (!HasEqualUnit(si)) { + throw new VectoException("compared value has to be the same unit. Got: {0} <=> {1}", this, si); + } + if (tolerance != null && !HasEqualUnit(tolerance)) { + throw new VectoException("tolerance has to be the same unit. Got: {0} <=> {1}", this, tolerance); + } + + return AsBasicUnit.IsSmallerOrEqual(si.AsBasicUnit, tolerance == null ? DoubleExtensionMethods.Tolerance : tolerance.Value()); + } + + /// <summary> + /// Determines whether the specified si is greater. + /// </summary> + /// <param name="si">The si.</param> + /// <param name="tolerance">The tolerance.</param> + /// <returns></returns> + public bool IsGreater(SI si, SI tolerance = null) + { + if (!HasEqualUnit(si)) { + throw new VectoException("compared value has to be the same unit. Got: {0} <=> {1}", this, si); + } + if (tolerance != null && !HasEqualUnit(tolerance)) { + throw new VectoException("tolerance has to be the same unit. Got: {0} <=> {1}", this, tolerance); + } + + return AsBasicUnit.IsGreater(si.AsBasicUnit, tolerance == null ? DoubleExtensionMethods.Tolerance : tolerance.Value()); + } + + /// <summary> + /// Determines whether the specified si is greater. + /// </summary> + /// <param name="si">The si.</param> + /// <param name="tolerance">The tolerance.</param> + /// <returns></returns> + [DebuggerStepThrough] + public bool IsGreater(SI si, double tolerance) + { + if (!HasEqualUnit(si)) { + throw new VectoException("compared value has to be the same unit. Got: {0} <=> {1}", this, si); + } + + return Val.IsGreater(si.Val, tolerance); + } + + /// <summary> + /// Determines whether [is greater or equal] [the specified si]. + /// </summary> + /// <param name="si">The si.</param> + /// <param name="tolerance">The tolerance.</param> + /// <returns></returns> + [DebuggerStepThrough] + public bool IsGreaterOrEqual(SI si, SI tolerance = null) + { + if (!HasEqualUnit(si)) { + throw new VectoException("compared value has to be the same unit. Got: {0} <=> {1}", this, si); + } + if (tolerance != null && !HasEqualUnit(tolerance)) { + throw new VectoException("tolerance has to be the same unit. Got: {0} <=> {1}", this, tolerance); + } + + return AsBasicUnit.IsGreaterOrEqual(si.AsBasicUnit, tolerance == null ? DoubleExtensionMethods.Tolerance : tolerance.Value()); + } + + /// <summary> + /// Determines whether the specified value is smaller. + /// </summary> + /// <param name="val">The value.</param> + /// <param name="tolerance">The tolerance.</param> + /// <returns></returns> + [DebuggerStepThrough] + public bool IsSmaller(double val, double tolerance = DoubleExtensionMethods.Tolerance) + { + return Val.IsSmaller(val, tolerance); + } + + /// <summary> + /// Determines whether [is smaller or equal] [the specified value]. + /// </summary> + /// <param name="val">The value.</param> + /// <param name="tolerance">The tolerance.</param> + /// <returns></returns> + [DebuggerStepThrough] + public bool IsSmallerOrEqual(double val, double tolerance = DoubleExtensionMethods.Tolerance) + { + return Val.IsSmallerOrEqual(val, tolerance); + } + + /// <summary> + /// Determines whether the specified value is greater. + /// </summary> + /// <param name="val">The value.</param> + /// <param name="tolerance">The tolerance.</param> + /// <returns></returns> + [DebuggerStepThrough] + public bool IsGreater(double val, double tolerance = DoubleExtensionMethods.Tolerance) + { + return Val.IsGreater(val, tolerance); + } + + /// <summary> + /// Determines whether [is greater or equal] [the specified value]. + /// </summary> + /// <param name="val">The value.</param> + /// <param name="tolerance">The tolerance.</param> + /// <returns></returns> + [DebuggerStepThrough] + public bool IsGreaterOrEqual(double val, double tolerance = DoubleExtensionMethods.Tolerance) + { + return Val.IsGreaterOrEqual(val, tolerance); + } + + public override int GetHashCode() + { + unchecked { + // ReSharper disable once NonReadonlyMemberInGetHashCode + var hashCode = Val.GetHashCode(); + hashCode = (hashCode * 397) ^ (_units != null ? _units.GetHashCode() : 0); + return hashCode; + } + } + + public int CompareTo(object obj) + { + var si = obj as SI; + if (si == null) { + return 1; + } + + if (!HasEqualUnit(si)) { // TODO: thow exception! - var sum1 = 0; - var sum2 = 0; - for (var i = 0; i < _units.Length; i++) { - sum1 += Math.Abs(si._units[i]); - sum2 += Math.Abs(_units[i]); - } - return sum1 >= sum2 ? -1 : 1; - } - - if (this > si) { - return 1; - } - - if (this < si) { - return -1; - } - - return 0; - } - - public static bool operator ==(SI left, SI right) - { - return Equals(left, right); - } - - public static bool operator !=(SI left, SI right) - { - return !Equals(left, right); - } - - #endregion - - /// <summary> - /// Convert the SI to a string in the wished output format. - /// </summary> - /// <param name="decimals">The decimals.</param> - /// <param name="outputFactor">The output factor.</param> - /// <param name="showUnit">The show unit.</param> - /// <returns></returns> - public string ToOutputFormat(uint? decimals = null, double? outputFactor = null, bool? showUnit = null) - { - decimals = decimals ?? 4; - outputFactor = outputFactor ?? 1.0; - showUnit = showUnit ?? false; - - if (showUnit.Value) { - return (Val * outputFactor.Value).ToString("F" + decimals.Value, CultureInfo.InvariantCulture) + " [" + - UnitString + "]"; - } - - return (Val * outputFactor.Value).ToString("F" + decimals.Value, CultureInfo.InvariantCulture); - } - - public string ToGUIFormat() - { - return Val.ToGUIFormat(); - } - - public string ToXMLFormat(uint? decimals = null) - { - decimals = decimals ?? 2; - return Val.ToString("F" + decimals.Value, CultureInfo.InvariantCulture); - } - - public class EqualityComparer<T> : IEqualityComparer<T> where T : SI - { - private readonly double _precision; - - public EqualityComparer(double precision = DoubleExtensionMethods.Tolerance) - { - _precision = precision; - } - - public bool Equals(T x, T y) - { - return y != null && x != null && x.IsEqual(y.Value(), _precision); - } - - public int GetHashCode(T obj) - { - return obj.Value().GetHashCode(); - } - } - } + var sum1 = 0; + var sum2 = 0; + for (var i = 0; i < _units.Length; i++) { + sum1 += Math.Abs(si._units[i]); + sum2 += Math.Abs(_units[i]); + } + return sum1 >= sum2 ? -1 : 1; + } + + if (this > si) { + return 1; + } + + if (this < si) { + return -1; + } + + return 0; + } + + public static bool operator ==(SI left, SI right) + { + return Equals(left, right); + } + + public static bool operator !=(SI left, SI right) + { + return !Equals(left, right); + } + + #endregion + + /// <summary> + /// Convert the SI to a string in the wished output format. + /// </summary> + /// <param name="decimals">The decimals.</param> + /// <param name="outputFactor">The output factor.</param> + /// <param name="showUnit">The show unit.</param> + /// <returns></returns> + public string ToOutputFormat(uint? decimals = null, double? outputFactor = null, bool? showUnit = null) + { + decimals = decimals ?? 4; + outputFactor = outputFactor ?? 1.0; + showUnit = showUnit ?? false; + + if (showUnit.Value) { + return (Val * outputFactor.Value).ToString("F" + decimals.Value, CultureInfo.InvariantCulture) + " [" + + UnitString + "]"; + } + + return (Val * outputFactor.Value).ToString("F" + decimals.Value, CultureInfo.InvariantCulture); + } + + public string ToGUIFormat() + { + return Val.ToGUIFormat(); + } + + public string ToXMLFormat(uint? decimals = null) + { + decimals = decimals ?? 2; + return Val.ToString("F" + decimals.Value, CultureInfo.InvariantCulture); + } + + public class EqualityComparer<T> : IEqualityComparer<T> where T : SI + { + private readonly double _precision; + + public EqualityComparer(double precision = DoubleExtensionMethods.Tolerance) + { + _precision = precision; + } + + public bool Equals(T x, T y) + { + return y != null && x != null && x.IsEqual(y.Value(), _precision); + } + + public int GetHashCode(T obj) + { + return obj.Value().GetHashCode(); + } + } + } } \ No newline at end of file diff --git a/VectoCommon/VectoCommon/Utils/SIConvertExtensionMethods.cs b/VectoCommon/VectoCommon/Utils/SIConvertExtensionMethods.cs index 923dc0bfebd89ec8c181ad82225e3a80b1b16ad1..17a38dc03b50cb61118f680de405fb146011d1e5 100644 --- a/VectoCommon/VectoCommon/Utils/SIConvertExtensionMethods.cs +++ b/VectoCommon/VectoCommon/Utils/SIConvertExtensionMethods.cs @@ -34,16 +34,16 @@ using System.Globalization; namespace TUGraz.VectoCommon.Utils { - public class ConvertedSI - { - private readonly double _value; - public string Units { get; } + public class ConvertedSI + { + private readonly double _value; + public string Units { get; } - public ConvertedSI(double value, string units) - { - _value = value; - Units = units; - } + public ConvertedSI(double value, string units) + { + _value = value; + Units = units; + } public double Value { get { return _value; } } @@ -71,25 +71,25 @@ namespace TUGraz.VectoCommon.Utils } public static implicit operator double(ConvertedSI self) - { - return self._value; - } - - public static implicit operator ConvertedSI(SI self) - { - return self == null ? null : new ConvertedSI(self.Value(), self.UnitString); - } - - public override string ToString() - { - // todo mk2017-10-13: decimal places? - return _value.ToString(CultureInfo.InvariantCulture); // + " [" + _units + "]"; - } - - public object ToString(CultureInfo invariantCulture) - { - throw new NotImplementedException(); - } + { + return self._value; + } + + public static implicit operator ConvertedSI(SI self) + { + return self == null ? null : new ConvertedSI(self.Value(), self.UnitString); + } + + public override string ToString() + { + // todo mk2017-10-13: decimal places? + return _value.ToString(CultureInfo.InvariantCulture); // + " [" + _units + "]"; + } + + public object ToString(CultureInfo invariantCulture) + { + throw new NotImplementedException(); + } public string ToOutputFormat(uint? decimals = null, double? outputFactor = null, bool? showUnit = null) { @@ -106,27 +106,27 @@ namespace TUGraz.VectoCommon.Utils } } - public static class SIConvertExtensionMethods - { - private const int Kilo = 1000; - private const int SecondsPerHour = 60 * 60; - - public static ConvertedSI ConvertToGramm(this Kilogram value) - { - return new ConvertedSI(value.Value() * Kilo, "g"); - } - public static ConvertedSI ConvertToTon(this Kilogram value) - { - return new ConvertedSI(value.Value() / Kilo, "t"); - } - public static ConvertedSI ConvertToKiloMeterPerHour(this MeterPerSecond value) - { - return new ConvertedSI(value.Value() * SecondsPerHour / Kilo, "km/h"); - } - public static ConvertedSI ConvertToGrammPerKiloMeter(this KilogramPerMeter value) - { - return value == null ? null : new ConvertedSI(value.Value() * Kilo * Kilo, "g/km"); - } + public static class SIConvertExtensionMethods + { + private const int Kilo = 1000; + private const int SecondsPerHour = 60 * 60; + + public static ConvertedSI ConvertToGramm(this Kilogram value) + { + return new ConvertedSI(value.Value() * Kilo, "g"); + } + public static ConvertedSI ConvertToTon(this Kilogram value) + { + return new ConvertedSI(value.Value() / Kilo, "t"); + } + public static ConvertedSI ConvertToKiloMeterPerHour(this MeterPerSecond value) + { + return new ConvertedSI(value.Value() * SecondsPerHour / Kilo, "km/h"); + } + public static ConvertedSI ConvertToGrammPerKiloMeter(this KilogramPerMeter value) + { + return value == null ? null : new ConvertedSI(value.Value() * Kilo * Kilo, "g/km"); + } public static ConvertedSI ConvertToGramPerKiloWattHour(this SpecificFuelConsumption value) { @@ -135,73 +135,83 @@ namespace TUGraz.VectoCommon.Utils public static ConvertedSI ConvertToLiterPer100Kilometer(this VolumePerMeter value) - { - return value == null ? null : new ConvertedSI(value.Value() * (10*10*10) * (100*1000), "l/100km"); - } - - public static ConvertedSI ConvertToLiterPer100TonKiloMeter(this VolumePerMeterMass value) - { - const int CubicMeterToLiter = 10 * 10 * 10; - const int MeterTo100KiloMeter = 100 * Kilo; - const int KilogrammToTon = Kilo; - - return value == null ? null : new ConvertedSI(value.Value() * CubicMeterToLiter * (MeterTo100KiloMeter * KilogrammToTon), "l/100tkm"); - } + { + return value == null ? null : new ConvertedSI(value.Value() * (10*10*10) * (100*1000), "l/100km"); + } + + public static ConvertedSI ConvertToLiterPer100TonKiloMeter(this VolumePerMeterMass value) + { + const int CubicMeterToLiter = 10 * 10 * 10; + const int MeterTo100KiloMeter = 100 * Kilo; + const int KilogrammToTon = Kilo; + + return value == null ? null : new ConvertedSI(value.Value() * CubicMeterToLiter * (MeterTo100KiloMeter * KilogrammToTon), "l/100tkm"); + } public static ConvertedSI ConvertToLiterPerCubicMeter100KiloMeter(this VolumePerMeterVolume value) - { - const int CubicMeterToLiter = 10 * 10 * 10; - const int MeterTo100KiloMeter = 100 * Kilo; - return new ConvertedSI(value.Value() * CubicMeterToLiter * MeterTo100KiloMeter, "l/100m^3km"); - } - - public static ConvertedSI ConvertToGrammPerHour(this KilogramPerSecond value) - { - return new ConvertedSI(value.Value() * Kilo * SecondsPerHour, "g/h"); - } - - public static ConvertedSI ConvertToKiloMeter(this Meter value) - { - return new ConvertedSI(value.Value() / Kilo, "km"); - } - - public static ConvertedSI ConvertToCubicCentiMeter(this CubicMeter value) - { - return new ConvertedSI(value.Value() * 100 * 100 * 100, "cm^3"); - } - - public static ConvertedSI ConvertToGrammPerCubicMeterKiloMeter(this KilogramPerMeterCubicMeter value) - { - return new ConvertedSI(value.Value() * Kilo * Kilo, "g/m^3km"); - } - - public static ConvertedSI ConvertToGrammPerTonKilometer(this KilogramPerMeterMass value) - { - return new ConvertedSI(value.Value() * Kilo * Kilo * Kilo, "g/tkm"); - } - - public static ConvertedSI ConvertToKiloWattHour(this WattSecond value) - { - return new ConvertedSI(value.Value() / Kilo / SecondsPerHour, "kWh"); - } - public static ConvertedSI ConvertToKiloWatt(this Watt value) - { - return new ConvertedSI(value.Value() / Kilo, "kW"); - } - - public static ConvertedSI ConvertToRoundsPerMinute(this PerSecond value) - { - return new ConvertedSI(value.AsRPM, "rpm"); - } - public static ConvertedSI ConvertToCubicDeziMeter(this CubicMeter value) - { - return new ConvertedSI(value.Value() * 10 * 10 * 10, "dm^3"); - } - public static ConvertedSI ConvertToMilliMeter(this Meter value) - { - return new ConvertedSI(value.Value() * Kilo, "mm"); - } - } + { + const int CubicMeterToLiter = 10 * 10 * 10; + const int MeterTo100KiloMeter = 100 * Kilo; + return new ConvertedSI(value.Value() * CubicMeterToLiter * MeterTo100KiloMeter, "l/100m^3km"); + } + + public static ConvertedSI ConvertToGrammPerHour(this KilogramPerSecond value) + { + return new ConvertedSI(value.Value() * Kilo * SecondsPerHour, "g/h"); + } + + public static ConvertedSI ConvertToKiloMeter(this Meter value) + { + return new ConvertedSI(value.Value() / Kilo, "km"); + } + + public static ConvertedSI ConvertToCubicCentiMeter(this CubicMeter value) + { + return new ConvertedSI(value.Value() * 100 * 100 * 100, "cm^3"); + } + + public static ConvertedSI ConvertToGrammPerCubicMeterKiloMeter(this KilogramPerMeterCubicMeter value) + { + return new ConvertedSI(value.Value() * Kilo * Kilo, "g/m^3km"); + } + + public static ConvertedSI ConvertToGrammPerTonKilometer(this KilogramPerMeterMass value) + { + return new ConvertedSI(value.Value() * Kilo * Kilo * Kilo, "g/tkm"); + } + + public static ConvertedSI ConvertToKiloWattHour(this WattSecond value) + { + return new ConvertedSI(value.Value() / Kilo / SecondsPerHour, "kWh"); + } + public static ConvertedSI ConvertToKiloWatt(this Watt value) + { + return new ConvertedSI(value.Value() / Kilo, "kW"); + } + + public static ConvertedSI ConvertToRoundsPerMinute(this PerSecond value) + { + return new ConvertedSI(value.AsRPM, "rpm"); + } + public static ConvertedSI ConvertToCubicDeziMeter(this CubicMeter value) + { + return new ConvertedSI(value.Value() * 10 * 10 * 10, "dm^3"); + } + public static ConvertedSI ConvertToMilliMeter(this Meter value) + { + return new ConvertedSI(value.Value() * Kilo, "mm"); + } + + public static ConvertedSI ConvertToMegaJoulePerKilogram(this JoulePerKilogramm value) + { + return new ConvertedSI(value.Value() / Kilo / Kilo, "MJ/kg"); + } + + public static ConvertedSI ConvertToMinutes(this Second sec) + { + return new ConvertedSI(sec.Value() / 60.0, "min"); + } + } } diff --git a/VectoCommon/VectoCommon/Utils/SIUtils.cs b/VectoCommon/VectoCommon/Utils/SIUtils.cs index 8516ee8955620793a9109d7560f2d04c270de1d7..c99f8320c1df02b57b49e2b8bf7ac560c70f30a0 100644 --- a/VectoCommon/VectoCommon/Utils/SIUtils.cs +++ b/VectoCommon/VectoCommon/Utils/SIUtils.cs @@ -206,6 +206,18 @@ namespace TUGraz.VectoCommon.Utils } } + /// <summary> + /// Quantifier for Mega (1E6). + /// </summary> + public UnitInstance Mega + { + get { + Factor *= Math.Pow(1E6, _exponent * _reciproc); + + return this; + } + } + /// <summary> /// [m] /// </summary> diff --git a/VectoCommon/VectoCommon/VectoCommon.csproj b/VectoCommon/VectoCommon/VectoCommon.csproj index d719873531d8524039b3341a827cb603522842d2..ada7b6397cef7d1a54ad72d3ea092578c8cbb962 100644 --- a/VectoCommon/VectoCommon/VectoCommon.csproj +++ b/VectoCommon/VectoCommon/VectoCommon.csproj @@ -44,10 +44,14 @@ <Reference Include="System.Xml" /> </ItemGroup> <ItemGroup> + <Compile Include="Hashing\IVectoHash.cs" /> + <Compile Include="Hashing\VectoComponents.cs" /> <Compile Include="InputData\DataSourceType.cs" /> <Compile Include="InputData\TableData.cs"> <SubType>Component</SubType> </Compile> + <Compile Include="InputData\VTPDeclarationInputData.cs" /> + <Compile Include="InputData\VTPEngineeringInputData.cs" /> <Compile Include="Models\AuxiliaryType.cs" /> <Compile Include="Exceptions\VectoExceptions.cs" /> <Compile Include="Exceptions\VectoSimulationException.cs" /> diff --git a/VectoCommon/VectoHashing/Properties/Version.cs b/VectoCommon/VectoHashing/Properties/Version.cs index a3e81eb57441c90f6131874290219289328e6c4b..10c9c5e1ec7156b0c4e9ead1b57ad479e7f428d7 100644 --- a/VectoCommon/VectoHashing/Properties/Version.cs +++ b/VectoCommon/VectoHashing/Properties/Version.cs @@ -30,5 +30,5 @@ */ using System.Reflection; -[assembly: AssemblyVersion("1.2.0.1133")] -[assembly: AssemblyFileVersion("1.2.0.1133")] +[assembly: AssemblyVersion("1.2.0.1250")] +[assembly: AssemblyFileVersion("1.2.0.1250")] diff --git a/VectoCommon/VectoHashing/VectoHash.cs b/VectoCommon/VectoHashing/VectoHash.cs index 8b42dd4bd2dc4eee1b29e69c108681f2eba70a0b..60b5ae0156aad74b794260ff6e73abaf07a34014 100644 --- a/VectoCommon/VectoHashing/VectoHash.cs +++ b/VectoCommon/VectoHashing/VectoHash.cs @@ -37,6 +37,7 @@ using System.Linq; using System.Security.Cryptography.X509Certificates; using System.Xml; using System.Xml.Linq; +using TUGraz.VectoCommon.Hashing; using TUGraz.VectoCommon.Resources; using TUGraz.VectoCommon.Utils; using TUGraz.VectoHashing.Impl; diff --git a/VectoCommon/VectoHashing/VectoHashing.csproj b/VectoCommon/VectoHashing/VectoHashing.csproj index ef6a15de8ad1d5699d0746b43c76fdf1003847ba..8d496c1df758544767cf3891ffe0b7b60c586f1d 100644 --- a/VectoCommon/VectoHashing/VectoHashing.csproj +++ b/VectoCommon/VectoHashing/VectoHashing.csproj @@ -44,9 +44,7 @@ </ItemGroup> <ItemGroup> <Compile Include="Impl\XmlDsigVectoTransform.cs" /> - <Compile Include="IVectoHash.cs" /> <Compile Include="Util\XmlDocumentExtensions.cs" /> - <Compile Include="VectoComponents.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="VectoHash.cs" /> <Compile Include="Impl\XmlHashProvider.cs" /> @@ -59,12 +57,6 @@ <ItemGroup> <EmbeddedResource Include="Resources\XSLT\SortInputData.xslt" /> </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\VectoCommon\VectoCommon.csproj"> - <Project>{79A066AD-69A9-4223-90F6-6ED5D2D084F4}</Project> - <Name>VectoCommon</Name> - </ProjectReference> - </ItemGroup> <ItemGroup> <None Include="Properties\Version.tt"> <Generator>TextTemplatingFileGenerator</Generator> @@ -74,6 +66,12 @@ <ItemGroup> <Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" /> </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\VectoCommon\VectoCommon.csproj"> + <Project>{79A066AD-69A9-4223-90F6-6ED5D2D084F4}</Project> + <Name>VectoCommon</Name> + </ProjectReference> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets. diff --git a/VectoCommon/VectoHashingTest/VectoHashTest.cs b/VectoCommon/VectoHashingTest/VectoHashTest.cs index 163bff91ce847268ef8aed8f8e784e81f6e6f884..a627545a3790ecdeacd5bd6bd074e9d945b8c1b8 100644 --- a/VectoCommon/VectoHashingTest/VectoHashTest.cs +++ b/VectoCommon/VectoHashingTest/VectoHashTest.cs @@ -38,6 +38,7 @@ using System.Xml.Linq; using System.Xml.Schema; using System.Xml.XPath; using NUnit.Framework; +using TUGraz.VectoCommon.Hashing; using TUGraz.VectoCore.Utils; using TUGraz.VectoHashing; using VectoHashingTest.Utils; diff --git a/VectoConsole/Program.cs b/VectoConsole/Program.cs index 86600c2a818a406bab03580c2a0eb07562e65329..99f43f9f7b80ca308926fb1a77efcf1493473a48 100644 --- a/VectoConsole/Program.cs +++ b/VectoConsole/Program.cs @@ -226,7 +226,7 @@ Examples: ModalResults1Hz = args.Contains("-1Hz"), WriteModalResults = args.Contains("-mod"), ActualModalData = args.Contains("-act"), - Validate = args.Contains("-nv"), + Validate = !args.Contains("-nv"), }; _jobContainer.AddRuns(runsFactory); diff --git a/VectoConsole/Properties/Version.cs b/VectoConsole/Properties/Version.cs index 33ca99df0f4ec4a77e5eee733d498194ad6048f3..19ad6af946ae6becb21b3105d2fde0531adbed04 100644 --- a/VectoConsole/Properties/Version.cs +++ b/VectoConsole/Properties/Version.cs @@ -11,7 +11,7 @@ * by the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use VECTO except in compliance with the Licence. * You may obtain a copy of the Licence at: -* +* * https://joinup.ec.europa.eu/community/eupl/og_page/eupl * * Unless required by applicable law or agreed to in writing, VECTO @@ -30,5 +30,5 @@ */ using System.Reflection; -[assembly: AssemblyVersion("3.2.1.1133")] -[assembly: AssemblyFileVersion("3.2.1.1133")] \ No newline at end of file +[assembly: AssemblyVersion("3.3.0.1250")] +[assembly: AssemblyFileVersion("3.3.0.1250")] \ No newline at end of file diff --git a/VectoCore/ModelbasedTests/ModelbasedTests.csproj b/VectoCore/ModelbasedTests/ModelbasedTests.csproj index 83f6d3c5f95f01c26be5eb562d0c7f345e9faab8..7d87d2f1fa3dcedfef67106d36f574499a6b217e 100644 --- a/VectoCore/ModelbasedTests/ModelbasedTests.csproj +++ b/VectoCore/ModelbasedTests/ModelbasedTests.csproj @@ -42,7 +42,7 @@ </Reference> <Reference Include="System" /> <Reference Include="VectoCore"> - <HintPath>..\VectoCore\bin\Debug\VectoCore.dll</HintPath> + <HintPath>..\VectoCore\obj\Debug\VectoCore.dll</HintPath> </Reference> </ItemGroup> <Choose> diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs index 2a028c292ff441952a345c2b5fd01a3030a29733..3ad0ed8663c1ab549d8118dde909b60777145019 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs @@ -124,7 +124,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public string Date { get; private set; } public CertificationMethod CertificationMethod { get; private set; } public string CertificationNumber { get; private set; } - public string DigestValue { get; private set; } + public DigestData DigestValue { get; private set; } IVehicleDeclarationInputData IDeclarationJobInputData.Vehicle { diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONEngineData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONEngineData.cs index d3971d189c5c60b96f44aefca74f5d4899c0fff9..a6af4ce772b5e0e33670e9314ceaf61e2a13ab72 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONEngineData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONEngineData.cs @@ -241,9 +241,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return "N/A"; } } - public string DigestValue + public DigestData DigestValue { - get { return "N/A"; } + get { return null; } } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs index e541d37d536e0c69b9eb4190ca42f8f3fc5d1fed..ae7c0ba2f0fa9a00171f9cd421e69265abac645f 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs @@ -500,9 +500,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return "N/A"; } } - public string DigestValue + public DigestData DigestValue { - get { return ""; } + get { return null; } } } } diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs index 349a5fc15f21e6147b5a7662d2fb21b38336d385..b31860e425695f1ae77ad4ce00b5365954908bef 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs @@ -37,6 +37,7 @@ using System.Linq; using System.Xml; using System.Xml.Linq; using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.Hashing; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Resources; @@ -47,6 +48,7 @@ using TUGraz.VectoCore.InputData.Impl; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Utils; +using TUGraz.VectoHashing; namespace TUGraz.VectoCore.InputData.FileIO.JSON { @@ -98,9 +100,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON throw new VectoException("Failed to read file for {0}: {1}", e, tableType, filename); } } + if (required) { throw new VectoException("Invalid filename for {0}: {1}", tableType, filename); } + return null; } @@ -113,10 +117,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public static JObject GetDummyJSONStructure() { - return JObject.FromObject(new Dictionary<string, object>() { - { JsonKeys.JsonHeader, new object() }, - { JsonKeys.JsonBody, new object() } - }); + return JObject.FromObject( + new Dictionary<string, object>() { + { JsonKeys.JsonHeader, new object() }, + { JsonKeys.JsonBody, new object() } + }); } } @@ -175,11 +180,14 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON Path.Combine(BasePath, vehicleFile), this); } catch (Exception e) { if (!TolerateMissing) { - throw new VectoException("JobFile: Failed to read Vehicle file '{0}': {1}", e, + throw new VectoException( + "JobFile: Failed to read Vehicle file '{0}': {1}", e, Body[JsonKeys.Vehicle_VehicleFile], e.Message); } - return new JSONVehicleDataV7(GetDummyJSONStructure(), + + return new JSONVehicleDataV7( + GetDummyJSONStructure(), Path.Combine(BasePath, Body.GetEx(JsonKeys.Vehicle_VehicleFile).Value<string>()) + MissingFileSuffix, this); } @@ -193,11 +201,14 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON return JSONInputDataFactory.ReadGearbox(Path.Combine(BasePath, gearboxFile)); } catch (Exception e) { if (!TolerateMissing) { - throw new VectoException("JobFile: Failed to read Gearbox file '{0}': {1}", e, + throw new VectoException( + "JobFile: Failed to read Gearbox file '{0}': {1}", e, Body[JsonKeys.Vehicle_GearboxFile], e.Message); } - return new JSONGearboxDataV6(GetDummyJSONStructure(), + + return new JSONGearboxDataV6( + GetDummyJSONStructure(), Path.Combine(BasePath, Body.GetEx(JsonKeys.Vehicle_GearboxFile).Value<string>()) + MissingFileSuffix); } @@ -210,13 +221,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON Path.Combine(BasePath, Body.GetEx(JsonKeys.Vehicle_EngineFile).Value<string>())); } catch (Exception e) { if (!TolerateMissing) { - throw new VectoException("JobFile: Failed to read Engine file '{0}': {1}", e, + throw new VectoException( + "JobFile: Failed to read Engine file '{0}': {1}", e, Body[JsonKeys.Vehicle_EngineFile], e.Message); } return - new JSONEngineDataV3(GetDummyJSONStructure(), + new JSONEngineDataV3( + GetDummyJSONStructure(), Path.Combine(BasePath, Body.GetEx(JsonKeys.Vehicle_EngineFile).Value<string>()) + MissingFileSuffix); } @@ -246,26 +259,28 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public virtual IVehicleEngineeringInputData VehicleInputData { - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", + [System.Diagnostics.CodeAnalysis.SuppressMessage( + "Microsoft.Design", "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")] - get - { + get { if (VehicleData == null) { throw new InvalidFileFormatException("VehicleData not found "); } + return VehicleData; } } public virtual IEngineEngineeringInputData EngineOnly { - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", + [System.Diagnostics.CodeAnalysis.SuppressMessage( + "Microsoft.Design", "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")] - get - { + get { if (Engine == null) { throw new InvalidFileFormatException("EngineData not found"); } + return Engine; } } @@ -286,14 +301,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public virtual IList<ICycleData> Cycles { - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", + [System.Diagnostics.CodeAnalysis.SuppressMessage( + "Microsoft.Design", "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")] - get - { + get { var retVal = new List<ICycleData>(); if (Body[JsonKeys.Job_Cycles] == null) { return retVal; } + foreach (var cycle in Body.GetEx(JsonKeys.Job_Cycles)) { //.Select(cycle => var cycleFile = Path.Combine(BasePath, cycle.Value<string>()); @@ -304,21 +320,26 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON try { var resourceName = DeclarationData.DeclarationDataResourcePrefix + ".MissionCycles." + cycle.Value<string>() + Constants.FileExtensions.CycleFile; - cycleData = VectoCSVFile.ReadStream(RessourceHelper.ReadStream(resourceName), + cycleData = VectoCSVFile.ReadStream( + RessourceHelper.ReadStream(resourceName), source: resourceName); } catch (Exception e) { Log.Debug("Driving Cycle could not be read: " + cycleFile); if (!TolerateMissing) { throw new VectoException("Driving Cycle could not be read: " + cycleFile, e); } + cycleData = new TableData(cycleFile + MissingFileSuffix, DataSourceType.Missing); } } - retVal.Add(new CycleInputData() { - Name = Path.GetFileNameWithoutExtension(cycle.Value<string>()), - CycleData = cycleData - }); + + retVal.Add( + new CycleInputData() { + Name = Path.GetFileNameWithoutExtension(cycle.Value<string>()), + CycleData = cycleData + }); } + return retVal; } } @@ -339,8 +360,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public virtual ILookaheadCoastingInputData Lookahead { - get - { + get { if (Body[JsonKeys.DriverData_LookaheadCoasting] == null) { return null; } @@ -362,6 +382,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON : DeclarationData.Driver.LookAhead.MinimumSpeed; return new LookAheadCoastingInputData() { Enabled = lac.GetEx<bool>(JsonKeys.DriverData_Lookahead_Enabled), + //Deceleration = lac.GetEx<double>(JsonKeys.DriverData_Lookahead_Deceleration).SI<MeterPerSquareSecond>(), MinSpeed = minSpeed, LookaheadDistanceFactor = distanceScalingFactor, @@ -379,8 +400,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON string.IsNullOrWhiteSpace(lac["Df_velocityDropLookup"].Value<string>())) { return null; } + try { - return ReadTableData(lac.GetEx<string>("Df_velocityDropLookup"), + return ReadTableData( + lac.GetEx<string>("Df_velocityDropLookup"), "Lookahead Coasting Decisionfactor - Velocity drop"); } catch (Exception) { if (TolerateMissing) { @@ -390,6 +413,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON DataSourceType.Missing); } } + return null; } @@ -399,8 +423,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON string.IsNullOrWhiteSpace(lac["DF_targetSpeedLookup"].Value<string>())) { return null; } + try { - return ReadTableData(lac.GetEx<string>("DF_targetSpeedLookup"), + return ReadTableData( + lac.GetEx<string>("DF_targetSpeedLookup"), "Lookahead Coasting Decisionfactor - Target speed"); } catch (Exception) { if (TolerateMissing) { @@ -410,21 +436,21 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON DataSourceType.Missing); } } + return null; } public virtual IOverSpeedEcoRollEngineeringInputData OverSpeedEcoRoll { - get - { + get { var overspeed = Body.GetEx(JsonKeys.DriverData_OverspeedEcoRoll); return new OverSpeedEcoRollInputData() { Mode = DriverData.ParseDriverMode( overspeed.GetEx<string>(JsonKeys.DriverData_OverspeedEcoRoll_Mode)), MinSpeed = overspeed.GetEx<double>(JsonKeys.DriverData_OverspeedEcoRoll_MinSpeed) - .KMPHtoMeterPerSecond(), + .KMPHtoMeterPerSecond(), OverSpeed = overspeed.GetEx<double>(JsonKeys.DriverData_OverspeedEcoRoll_OverSpeed) - .KMPHtoMeterPerSecond(), + .KMPHtoMeterPerSecond(), UnderSpeed = overspeed.GetEx<double>(JsonKeys.DriverData_OverspeedEcoRoll_UnderSpeed).KMPHtoMeterPerSecond() }; @@ -433,15 +459,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public virtual TableData AccelerationCurve { - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", + [System.Diagnostics.CodeAnalysis.SuppressMessage( + "Microsoft.Design", "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")] - get - { + get { var acceleration = Body[JsonKeys.DriverData_AccelerationCurve]; if (acceleration == null || EmptyOrInvalidFileName(acceleration.Value<string>())) { return null; + // throw new VectoException("AccelerationCurve (VACC) required"); } + try { return ReadTableData(acceleration.Value<string>(), "DriverAccelerationCurve"); } catch (VectoException e) { @@ -455,7 +483,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON if (!TolerateMissing) { throw new VectoException("Failed to read Driver Acceleration Curve: " + e.Message, e); } - return new TableData(Path.Combine(BasePath, acceleration.Value<string>()) + MissingFileSuffix, + + return new TableData( + Path.Combine(BasePath, acceleration.Value<string>()) + MissingFileSuffix, DataSourceType.Missing); } } @@ -512,9 +542,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON continue; } - AuxiliaryFileHelper.FillAuxiliaryDataInputData(auxData, + AuxiliaryFileHelper.FillAuxiliaryDataInputData( + auxData, Path.Combine(BasePath, auxFile.Value<string>())); } + return retVal; } @@ -535,6 +567,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON newTech = tech; break; } + return newTech; } @@ -544,11 +577,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public AuxiliaryModel AuxiliaryAssembly { - get - { - return AuxiliaryModelHelper.Parse(Body["AuxiliaryAssembly"] == null - ? "" - : Body["AuxiliaryAssembly"].ToString()); + get { + return AuxiliaryModelHelper.Parse( + Body["AuxiliaryAssembly"] == null + ? "" + : Body["AuxiliaryAssembly"].ToString()); } } @@ -559,8 +592,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public string AdvancedAuxiliaryFilePath { - get - { + get { return Body["AdvancedAuxiliaryFilePath"] != null ? Path.Combine(Path.GetFullPath(BasePath), Body["AdvancedAuxiliaryFilePath"].Value<string>()) : ""; @@ -579,11 +611,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON { var retVal = new List<AuxiliaryDataInputData>(); if (Body["Padd"] != null) { - retVal.Add(new AuxiliaryDataInputData() { - ID = "ConstantAux", - AuxiliaryType = AuxiliaryDemandType.Constant, - ConstantPowerDemand = Body.GetEx<double>("Padd").SI<Watt>() - }); + retVal.Add( + new AuxiliaryDataInputData() { + ID = "ConstantAux", + AuxiliaryType = AuxiliaryDemandType.Constant, + ConstantPowerDemand = Body.GetEx<double>("Padd").SI<Watt>() + }); } foreach (var aux in Body["Aux"] ?? Enumerable.Empty<JToken>()) { try { @@ -608,9 +641,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON if (auxFile == null || EmptyOrInvalidFileName(auxFile.Value<string>())) { continue; } - AuxiliaryFileHelper.FillAuxiliaryDataInputData(auxData, + + AuxiliaryFileHelper.FillAuxiliaryDataInputData( + auxData, Path.Combine(BasePath, auxFile.Value<string>())); } + return retVal; } } @@ -622,44 +658,76 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON : base(data, filename, tolerateMissing) { } } - public class JSONVTPInputDataV4 : JSONFile, IVTPInputDataProvider, IVTPJobInputData + public class JSONVTPInputDataV4 : JSONFile, IVTPEngineeringInputDataProvider, IVTPEngineeringJobInputData, + IVTPDeclarationInputDataProvider, IManufacturerReport { - public JSONVTPInputDataV4(JObject data, string filename, bool tolerateMissing = false) : base(data, filename, - tolerateMissing) { } + private IDictionary<VectoComponents, IList<string>> _componentDigests = null; + private DigestData _jobDigest = null; - public IVTPJobInputData JobInputData + public JSONVTPInputDataV4(JObject data, string filename, bool tolerateMissing = false) : base( + data, filename, tolerateMissing) + { + VectoJobHash = VectoHash.Load( + Path.Combine(Path.GetFullPath(BasePath), Body["DeclarationVehicle"].Value<string>())); + VectoManufacturerReportHash = Body["ManufacturerRecord"] != null ? VectoHash.Load( + Path.Combine(Path.GetFullPath(BasePath), Body["ManufacturerRecord"].Value<string>())) : null; + } + + public IVTPEngineeringJobInputData JobInputData + { + get { return this; } + } + + public IManufacturerReport ManufacturerReportInputData { get { return this; } } public IVehicleDeclarationInputData Vehicle { - get - { + get { return new XMLDeclarationInputDataProvider( Path.Combine(Path.GetFullPath(BasePath), Body["DeclarationVehicle"].Value<string>()), true).JobInputData.Vehicle; } } + public IVectoHash VectoJobHash { get; } + + public IVectoHash VectoManufacturerReportHash { get; } + + public Meter Mileage + { + get { return Body.GetEx<double>("Mileage").SI(Unit.SI.Kilo.Meter).Cast<Meter>(); } + } + + public JoulePerKilogramm NetCalorificValueTestFuel + { + get { return Body.GetEx<double>("NCVTestFuel").SI(Unit.SI.Mega.Joule.Per.Kilo.Gramm).Cast<JoulePerKilogramm>(); } + } + + string IManufacturerReport.Source { get { return Body["ManufacturerRecord"].Value<string>(); } } + public IList<ICycleData> Cycles { - get - { + get { var retVal = new List<ICycleData>(); if (Body[JsonKeys.Job_Cycles] == null) { return retVal; } + foreach (var cycle in Body.GetEx(JsonKeys.Job_Cycles)) { var cycleFile = Path.Combine(BasePath, cycle.Value<string>()); if (File.Exists(cycleFile)) { var cycleData = VectoCSVFile.Read(cycleFile); - retVal.Add(new CycleInputData() { - Name = Path.GetFileNameWithoutExtension(cycle.Value<string>()), - CycleData = cycleData - }); + retVal.Add( + new CycleInputData() { + Name = Path.GetFileNameWithoutExtension(cycle.Value<string>()), + CycleData = cycleData + }); } } + return retVal; } } @@ -673,5 +741,69 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON { get { return Body.GetEx<double>("FanDiameter").SI<Meter>(); } } + + #region Implementation of IVTPDeclarationInputDataProvider + + IVTPDeclarationJobInputData IVTPDeclarationInputDataProvider.JobInputData + { + get { return JobInputData; } + } + + #endregion + + #region Implementation of IManufacturerReport + + IDictionary<VectoComponents, IList<string>> IManufacturerReport.ComponentDigests + { + get { + if (_componentDigests == null) { + ReadManufacturerReport(); + } + return _componentDigests; + } + } + + public DigestData JobDigest + { + get { + if (_jobDigest == null) { + ReadManufacturerReport(); + } + return _jobDigest; + } + } + + #endregion + + private void ReadManufacturerReport() + { + var xmlDoc = new XmlDocument(); + xmlDoc.Load(Path.Combine(Path.GetFullPath(BasePath), Body["ManufacturerRecord"].Value<string>())); + var components = XMLManufacturerReportReader.GetContainingComponents(xmlDoc).GroupBy(s => s) + .Select(g => new { Entry = g.Key, Count = g.Count() }); + _componentDigests = new Dictionary<VectoComponents, IList<string>>(); + + try { + foreach (var component in components) { + if (component.Entry == VectoComponents.Vehicle) { + continue; + } + + for (var i = 0; i < component.Count; i++) { + if (!_componentDigests.ContainsKey(component.Entry)) { + _componentDigests[component.Entry] = new List<string>(); + } + _componentDigests[component.Entry].Add( + XMLManufacturerReportReader.GetComponentDataDigestValue(xmlDoc, component.Entry, i)); + } + } + } catch (Exception) { } + + try { + _jobDigest = new DigestData(xmlDoc.SelectSingleNode("//*[local-name()='InputDataSignature']")); + } catch (Exception) { + _jobDigest = new DigestData("", new string[] {},"","" ); + } + } } -} \ No newline at end of file +} diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs index 0f44e5907db96318c92c2d05b069cd56081ffb41..0382ce6c7e8146bd1860c254de3c4cd504202e33 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs @@ -486,9 +486,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return "N.A."; } } - public string DigestValue + public DigestData DigestValue { - get { return ""; } + get { return null; } } } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/AbstractDeclarationXMLComponentDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/AbstractDeclarationXMLComponentDataProvider.cs index 09dd2e462eadbae8a5d552b5bbbe2eaf18e5eeee..2b292d27376d997104406157f5c2c39a47dafbc1 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/AbstractDeclarationXMLComponentDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/AbstractDeclarationXMLComponentDataProvider.cs @@ -112,17 +112,16 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration get { return GetElementValue(XMLNames.Component_CertificationNumber); } } - public virtual string DigestValue + public virtual DigestData DigestValue { - get { return GetElementValue("..//*[local-name()='DigestValue']"); } + get { return new DigestData(Navigator.SelectSingleNode(XBasePath + "/..", Manager)); } } protected bool ElementExists(string relativePath) { var path = Helper.Query(XBasePath, relativePath.Any() ? relativePath : null); - //new StringBuilder(XBasePath + (relativePath.Any() ? "/" + relativePath : "")); - + var node = Navigator.SelectSingleNode(path, Manager); return node != null; } @@ -138,6 +137,19 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration return node.InnerXml; } + protected string[] GetElementValues(string querypath) + { + var path = Helper.Query(XBasePath, querypath.Any() ? querypath : null); + + var nodes = Navigator.Select(path, Manager); + var retVal = new List<string>(); + while (nodes.MoveNext()) { + retVal.Add(nodes.Current.InnerXml); + } + + return retVal.ToArray(); + } + protected double GetDoubleElementValue(string relativePath) { return GetElementValue(relativePath).ToDouble(); diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationInputDataProvider.cs index 63ad01d6dd44a51b61f11623da1f677426b7f3f8..f583290f3e4778afb37792426aff0f999a14a485 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationInputDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationInputDataProvider.cs @@ -49,19 +49,19 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration private readonly XMLDeclarationJobInputDataProvider _xmlJobData; - public XMLDeclarationInputDataProvider(string filename, bool verifyXml) : - this(XmlReader.Create(filename), filename, verifyXml) - { - } + public XMLDeclarationInputDataProvider(string filename, bool verifyXml) : + this(XmlReader.Create(filename), filename, verifyXml) + { + } - public XMLDeclarationInputDataProvider(XmlReader inputData, bool verifyXml) : this(inputData, "", verifyXml) - { - - } + public XMLDeclarationInputDataProvider(XmlReader inputData, bool verifyXml) : this(inputData, "", verifyXml) + { + + } - protected XMLDeclarationInputDataProvider(XmlReader inputData, string source, bool verifyXml) - { - Source = source; + protected XMLDeclarationInputDataProvider(XmlReader inputData, string source, bool verifyXml) + { + Source = source; var xmldoc = new XmlDocument(); xmldoc.Load(inputData); @@ -72,13 +72,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration var h = VectoHash.Load(xmldoc); XMLHash = h.ComputeXmlHash(); Document = new XPathDocument(new XmlNodeReader(xmldoc)); - + _xmlJobData = new XMLDeclarationJobInputDataProvider(this); } - public string Source { get; protected set; } + public string Source { get; protected set; } - private static void ValidationCallBack(XmlSeverityType severity, ValidationEvent evt) + private static void ValidationCallBack(XmlSeverityType severity, ValidationEvent evt) { if (severity == XmlSeverityType.Error) { var args = evt.ValidationEventArgs; diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationVehicleDataProvider.cs index c4a8d1c726e8bfbf3aadc5337de42958a141b363..842f2050a783e73b5e6d2b89c2d1f6e66ad43e7f 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationVehicleDataProvider.cs @@ -139,7 +139,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration var rollResistance = tyre.SelectSingleNode(Helper.NSPrefix(XMLNames.AxleWheels_Axles_Axle_RRCDeclared), Manager); var tyreTestLoad = tyre.SelectSingleNode(Helper.NSPrefix(XMLNames.AxleWheels_Axles_Axle_FzISO), Manager); var certirficationNumber = tyre.SelectSingleNode(Helper.NSPrefix(XMLNames.Component_CertificationNumber), Manager); - var digestValue = tyre.SelectSingleNode(Helper.Query("..//*[local-name()='DigestValue']"), Manager); retVal[axleNumber - 1] = new AxleInputData { AxleType = axleType == null ? AxleType.VehicleNonDriven : axleType.Value.ParseEnum<AxleType>(), TwinTyres = twinTyres != null && XmlConvert.ToBoolean(twinTyres.Value), @@ -150,7 +149,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration Dimension = dimension == null ? null : dimension.Value, CertificationNumber = certirficationNumber == null ? null : certirficationNumber.Value, CertificationMethod = CertificationMethod.Measured, - DigestValue = digestValue == null ? "" : digestValue.Value + DigestValue = new DigestData(tyre.SelectSingleNode(Helper.Query("..//*[local-name()='DigestValue']/.."), Manager)) } }; } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLManufacturerReportReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLManufacturerReportReader.cs new file mode 100644 index 0000000000000000000000000000000000000000..b7e4f6900623b7431d8c1f0014af3d304e36c429 --- /dev/null +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLManufacturerReportReader.cs @@ -0,0 +1,103 @@ +/* +* This file is part of VECTO. +* +* Copyright © 2012-2017 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System; +using System.Collections.Generic; +using System.Xml; +using TUGraz.VectoCommon.Hashing; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; + +namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration +{ + public class XMLManufacturerReportReader + { + public static IList<VectoComponents> GetContainingComponents(XmlDocument xmlDocument) + { + var retVal = new List<VectoComponents>(); + foreach (var component in EnumHelper.GetValues<VectoComponents>()) { + var nodes = xmlDocument.SelectNodes(string.Format("//*[local-name()='{0}']//*[local-name()='{1}']/*[local-name()='Model']", + XMLNames.VectoManufacturerReport, component.XMLElementName())); + var count = nodes == null ? 0 : nodes.Count; + for (var i = 0; i < count; i++) { + retVal.Add(component); + } + } + foreach (var component in new[] { XMLNames.AxleWheels_Axles_Axle }) { + var nodes = xmlDocument.SelectNodes(string.Format("//*[local-name()='{0}']//*[local-name()='{1}']", + XMLNames.VectoManufacturerReport, component)); + var count = nodes == null ? 0 : nodes.Count; + for (var i = 0; i < count; i++) { + retVal.Add(VectoComponents.Tyre); + } + } + return retVal; + } + + public static string GetComponentDataDigestValue(XmlDocument xmlDocument, VectoComponents component, int i) + { + var node = GetNodes(xmlDocument, component, i); + + return ReadElementValue(node, XMLNames.DI_Signature_Reference_DigestValue); + } + + public static XmlNode GetNodes(XmlDocument xmlDocument, VectoComponents component, int index) + { + var nodes = xmlDocument.SelectNodes(GetComponentQueryString(component == VectoComponents.Tyre ? "Axle" : component.XMLElementName())); + if (nodes == null || nodes.Count == 0) { + throw new Exception(string.Format("Component {0} not found", component)); + } + if (index >= nodes.Count) { + throw new Exception(string.Format("index exceeds number of components found! index: {0}, #components: {1}", index, + nodes.Count)); + } + return nodes[index]; + } + + static string GetComponentQueryString(string component = null) + { + if (component == null) { + return "(//*[@id])[1]"; + } + return string.Format("//*[local-name()='{0}']", component); + } + + static string ReadElementValue(XmlNode xmlNode, string elementName) + { + var node = xmlNode.SelectSingleNode(string.Format("./*[local-name()='{0}']", elementName)); + if (node == null) { + return null; + } + return node.InnerText; + } + } +} diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/AbstractEngineeringXMLComponentDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/AbstractEngineeringXMLComponentDataProvider.cs index b4bc0fb6f90006db1a633465dfd6596b9da8af59..c8060152b61acfea62d46a0d8e6043f35ea2f8c8 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/AbstractEngineeringXMLComponentDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/AbstractEngineeringXMLComponentDataProvider.cs @@ -89,9 +89,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering get { return GetElementValue(XMLNames.Component_Date); } } - public override string DigestValue + public override DigestData DigestValue { - get { return ""; } + get { return null; } } public override string CertificationNumber diff --git a/VectoCore/VectoCore/InputData/Impl/InputData.cs b/VectoCore/VectoCore/InputData/Impl/InputData.cs index 968031b99718288eaa4a62b2fb85811c94beff45..24f1862055ba86a2f7d23ee7b7d86369636b7df1 100644 --- a/VectoCore/VectoCore/InputData/Impl/InputData.cs +++ b/VectoCore/VectoCore/InputData/Impl/InputData.cs @@ -125,7 +125,7 @@ namespace TUGraz.VectoCore.InputData.Impl public string CertificationNumber { get; internal set; } - public string DigestValue { get; internal set; } + public DigestData DigestValue { get; internal set; } public string Dimension { get; internal set; } diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs index ec5307606e6d07285b2ae874a4981d238f6fd898..97a6e5c6950ff3f45e4985a581f84b197ce90916 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs @@ -56,7 +56,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter ModelName = data.Model, Date = data.Date, //CertificationNumber = data.CertificationNumber, - DigestValueInput = data.DigestValue, + DigestValueInput = data.DigestValue != null ? data.DigestValue.DigestValue : "", VehicleCategory = data.VehicleCategory, AxleConfiguration = data.AxleConfiguration, CurbWeight = data.CurbMassChassis, @@ -76,7 +76,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter Date = data.Date, CertificationMethod = data.CertificationMethod, CertificationNumber = data.CertificationNumber, - DigestValueInput = data.DigestValue, + DigestValueInput = data.DigestValue != null ? data.DigestValue.DigestValue : "", }; return retVal; } @@ -113,7 +113,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter retarder.Date = data.Date; retarder.CertificationMethod = data.CertificationMethod; retarder.CertificationNumber = data.CertificationNumber; - retarder.DigestValueInput = data.DigestValue; + retarder.DigestValueInput = data.DigestValue != null ? data.DigestValue.DigestValue : ""; return retarder; } catch (Exception e) { @@ -129,7 +129,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter ModelName = data.Model, Date = data.Date, CertificationNumber = data.CertificationNumber, - DigestValueInput = data.DigestValue, + DigestValueInput = data.DigestValue != null ? data.DigestValue.DigestValue : "", Displacement = data.Displacement, IdleSpeed = data.IdleSpeed, ConsumptionMap = FuelConsumptionMapReader.Create(data.FuelConsumptionMap), @@ -150,7 +150,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter Date = data.Date, CertificationMethod = data.CertificationMethod, CertificationNumber = data.CertificationNumber, - DigestValueInput = data.DigestValue, + DigestValueInput = data.DigestValue != null ? data.DigestValue.DigestValue : "", Type = data.Type }; } @@ -224,7 +224,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter Date = data.Date, CertificationMethod = data.CertificationMethod, CertificationNumber = data.CertificationNumber, - DigestValueInput = data.DigestValue, + DigestValueInput = data.DigestValue != null ? data.DigestValue.DigestValue : "", AxleGear = new GearData { Ratio = data.Ratio } }; } @@ -252,7 +252,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter Date = data.Date, CertificationMethod = data.CertificationMethod, CertificationNumber = data.CertificationNumber, - DigestValueInput = data.DigestValue, + DigestValueInput = data.DigestValue != null ? data.DigestValue.DigestValue : "", Type = type, Angledrive = new TransmissionData { Ratio = data.Ratio } }; diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs index 0c934c136da9254da922d9ac94abaa27b84e7d3d..ea986e9a0f88c8b8d6c804f2892ae3b76c8ef47f 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs @@ -122,7 +122,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter TyreTestLoad = axleInput.Tyre.TyreTestLoad, Inertia = DeclarationData.Wheels.Lookup(axleInput.Tyre.Dimension.RemoveWhitespace()).Inertia, CertificationNumber = axleInput.Tyre.CertificationNumber, - DigestValueInput = axleInput.Tyre.DigestValue, + DigestValueInput = axleInput.Tyre.DigestValue == null ? "" : axleInput.Tyre.DigestValue.DigestValue, }; axleData.Add(axle); } diff --git a/VectoCore/VectoCore/InputData/Reader/DrivingCycleDataReader.cs b/VectoCore/VectoCore/InputData/Reader/DrivingCycleDataReader.cs index 18879c3ce7dbc134bbfe11aaaf1a273117645b02..b1f78cf7c1b4ec8cb602bef38a6f97ab33c1aa14 100644 --- a/VectoCore/VectoCore/InputData/Reader/DrivingCycleDataReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/DrivingCycleDataReader.cs @@ -74,9 +74,9 @@ namespace TUGraz.VectoCore.InputData.Reader if (DistanceBasedCycleDataParser.ValidateHeader(cols, false)) { return CycleType.DistanceBased; } - if (VTPCycleDataParser.ValidateHeader(cols, false)) { - return CycleType.VTP; - } + if (VTPCycleDataParser.ValidateHeader(cols, false)) { + return CycleType.VTP; + } throw new VectoException("CycleFile format is unknown."); } @@ -95,10 +95,10 @@ namespace TUGraz.VectoCore.InputData.Reader return new MeasuredSpeedDataParser(); case CycleType.PTO: return new PTOCycleDataParser(); - case CycleType.VTP: - return new VTPCycleDataParser(); + case CycleType.VTP: + return new VTPCycleDataParser(); - default: + default: throw new ArgumentOutOfRangeException("Cycle Type", type.ToString()); } } @@ -213,6 +213,9 @@ namespace TUGraz.VectoCore.InputData.Reader var altitude = current.Altitude; for (var i = 0; i < entries.Count; i++) { var entry = entries[i]; + if (i == 0 && entry.VehicleTargetSpeed.IsEqual(0) && entry.StoppingTime.IsEqual(0)) { + entry.StoppingTime = 1.SI<Second>(); + } if (!entry.StoppingTime.IsEqual(0) && !entry.VehicleTargetSpeed.IsEqual(0)) { throw new VectoException( "Error in DrivingCycle: stop time specified but target-speed > 0! Distance: {0}, stop-time: {1}, target speed: {2}", @@ -233,7 +236,7 @@ namespace TUGraz.VectoCore.InputData.Reader filtered.Add(entry); current = entry; } - if (!entry.StoppingTime.IsEqual(0) && entry.VehicleTargetSpeed.IsEqual(0)) { + if (entry.VehicleTargetSpeed.IsEqual(0)) { // vehicle stops. duplicate current distance entry with 0 waiting time var tmp = new DrivingCycleData.DrivingCycleEntry(entry) { StoppingTime = 0.SI<Second>(), @@ -317,8 +320,8 @@ namespace TUGraz.VectoCore.InputData.Reader public const string RoadGradient = "grad"; public const string StoppingTime = "stop"; public const string EngineSpeed = "n"; - public const string EngineSpeedSuffix = "n_eng"; - public const string FanSpeed = "n_fan"; + public const string EngineSpeedSuffix = "n_eng"; + public const string FanSpeed = "n_fan"; public const string WheelTorqueLeft = "tq_left"; public const string WheelTorqueRight = "tq_right"; public const string WheelSpeedLeft = "n_wh_left"; @@ -414,7 +417,7 @@ namespace TUGraz.VectoCore.InputData.Reader VehicleTargetSpeed = row.ParseDouble(Fields.VehicleSpeed).KMPHtoMeterPerSecond(), RoadGradient = VectoMath.InclinationToAngle(row.ParseDoubleOrGetDefault(Fields.RoadGradient) / 100.0), StoppingTime = row.ParseDouble(Fields.StoppingTime).SI<Second>(), - AdditionalAuxPowerDemand = row.ParseDoubleOrGetDefault(Fields.AdditionalAuxPowerDemand).SI(Unit.SI.Kilo.Watt).Cast<Watt>(), + AdditionalAuxPowerDemand = row.ParseDoubleOrGetDefault(Fields.AdditionalAuxPowerDemand).SI(Unit.SI.Kilo.Watt).Cast<Watt>(), AngularVelocity = row.ParseDoubleOrGetDefault(Fields.EngineSpeed).RPMtoRad(), Gear = (uint)row.ParseDoubleOrGetDefault(Fields.Gear), AirSpeedRelativeToVehicle = @@ -467,7 +470,7 @@ namespace TUGraz.VectoCore.InputData.Reader Time = row.ParseDoubleOrGetDefault(Fields.Time, absTime).SI<Second>(), AngularVelocity = row.ParseDoubleOrGetDefault(Fields.EngineSpeed).RPMtoRad(), AdditionalAuxPowerDemand = - row.ParseDoubleOrGetDefault(Fields.AdditionalAuxPowerDemand).SI(Unit.SI.Kilo.Watt).Cast<Watt>(), + row.ParseDoubleOrGetDefault(Fields.AdditionalAuxPowerDemand).SI(Unit.SI.Kilo.Watt).Cast<Watt>(), AuxiliarySupplyPower = row.GetAuxiliaries() }; @@ -481,7 +484,7 @@ namespace TUGraz.VectoCore.InputData.Reader if (row.Field<string>(Fields.EnginePower).Equals("<DRAG>")) { entry.Drag = true; } else { - entry.Torque = row.ParseDouble(Fields.EnginePower).SI(Unit.SI.Kilo.Watt).Cast<Watt>() / entry.AngularVelocity; + entry.Torque = row.ParseDouble(Fields.EnginePower).SI(Unit.SI.Kilo.Watt).Cast<Watt>() / entry.AngularVelocity; } } absTime += 1; @@ -542,10 +545,10 @@ namespace TUGraz.VectoCore.InputData.Reader var entries = table.Rows.Cast<DataRow>().Select(row => new DrivingCycleData.DrivingCycleEntry { Time = row.ParseDouble(Fields.Time).SI<Second>(), - PWheel = row.ParseDouble(Fields.PWheel).SI(Unit.SI.Kilo.Watt).Cast<Watt>(), + PWheel = row.ParseDouble(Fields.PWheel).SI(Unit.SI.Kilo.Watt).Cast<Watt>(), Gear = (uint)row.ParseDouble(Fields.Gear), AngularVelocity = row.ParseDouble(Fields.EngineSpeed).RPMtoRad(), - AdditionalAuxPowerDemand = row.ParseDoubleOrGetDefault(Fields.AdditionalAuxPowerDemand).SI(Unit.SI.Kilo.Watt).Cast<Watt>(), + AdditionalAuxPowerDemand = row.ParseDoubleOrGetDefault(Fields.AdditionalAuxPowerDemand).SI(Unit.SI.Kilo.Watt).Cast<Watt>(), }).ToArray(); return entries; @@ -585,7 +588,7 @@ namespace TUGraz.VectoCore.InputData.Reader Time = row.ParseDouble(Fields.Time).SI<Second>(), VehicleTargetSpeed = row.ParseDouble(Fields.VehicleSpeed).KMPHtoMeterPerSecond(), RoadGradient = VectoMath.InclinationToAngle(row.ParseDoubleOrGetDefault(Fields.RoadGradient) / 100.0), - AdditionalAuxPowerDemand = row.ParseDoubleOrGetDefault(Fields.AdditionalAuxPowerDemand).SI(Unit.SI.Kilo.Watt).Cast<Watt>(), + AdditionalAuxPowerDemand = row.ParseDoubleOrGetDefault(Fields.AdditionalAuxPowerDemand).SI(Unit.SI.Kilo.Watt).Cast<Watt>(), AirSpeedRelativeToVehicle = crossWindRequired ? row.ParseDouble(Fields.AirSpeedRelativeToVehicle).KMPHtoMeterPerSecond() : null, WindYawAngle = crossWindRequired ? row.ParseDouble(Fields.WindYawAngle) : 0, @@ -632,7 +635,7 @@ namespace TUGraz.VectoCore.InputData.Reader Time = row.ParseDouble(Fields.Time).SI<Second>(), VehicleTargetSpeed = row.ParseDouble(Fields.VehicleSpeed).KMPHtoMeterPerSecond(), RoadGradient = VectoMath.InclinationToAngle(row.ParseDoubleOrGetDefault(Fields.RoadGradient) / 100.0), - AdditionalAuxPowerDemand = row.ParseDoubleOrGetDefault(Fields.AdditionalAuxPowerDemand).SI(Unit.SI.Kilo.Watt).Cast<Watt>(), + AdditionalAuxPowerDemand = row.ParseDoubleOrGetDefault(Fields.AdditionalAuxPowerDemand).SI(Unit.SI.Kilo.Watt).Cast<Watt>(), AngularVelocity = row.ParseDoubleOrGetDefault(Fields.EngineSpeed).RPMtoRad(), Gear = (uint)row.ParseDouble(Fields.Gear), TorqueConverterActive = table.Columns.Contains(Fields.TorqueConverterActive) @@ -712,53 +715,54 @@ namespace TUGraz.VectoCore.InputData.Reader } } - /// <summary> - /// Parser for PTO Cycles. - /// </summary> - // <t>,<v> [km/h],<Pwheel> [kW],<n_eng> [rpm],<n_fan> [rpm], <Padd> [kW] - private class VTPCycleDataParser : AbstractCycleDataParser - { - public override IEnumerable<DrivingCycleData.DrivingCycleEntry> Parse(DataTable table, bool crossWindRequired) - { - ValidateHeader(table.Columns); - - var entries = table.Rows.Cast<DataRow>().Select(row => { - var wheelSpeed = - ((row.ParseDouble(Fields.WheelSpeedLeft) + row.ParseDouble(Fields.WheelSpeedRight)) / 2).RPMtoRad(); - var wheelPower = row.ParseDouble(Fields.WheelTorqueLeft).SI<NewtonMeter>() * row.ParseDouble(Fields.WheelSpeedLeft).RPMtoRad() + - row.ParseDouble(Fields.WheelTorqueRight).SI<NewtonMeter>() * row.ParseDouble(Fields.WheelSpeedRight).RPMtoRad(); + /// <summary> + /// Parser for PTO Cycles. + /// </summary> + // <t>,<v> [km/h],<Pwheel> [kW],<n_eng> [rpm],<n_fan> [rpm], <Padd> [kW] + private class VTPCycleDataParser : AbstractCycleDataParser + { + public override IEnumerable<DrivingCycleData.DrivingCycleEntry> Parse(DataTable table, bool crossWindRequired) + { + ValidateHeader(table.Columns); + + var entries = table.Rows.Cast<DataRow>().Select(row => { + var tqLeft = row.ParseDouble(Fields.WheelTorqueLeft).SI<NewtonMeter>(); + var tqRight = row.ParseDouble(Fields.WheelTorqueRight).SI<NewtonMeter>(); + var speedLeft = row.ParseDouble(Fields.WheelSpeedLeft).RPMtoRad(); + var speedRight = row.ParseDouble(Fields.WheelSpeedRight).RPMtoRad(); return new DrivingCycleData.DrivingCycleEntry { Time = row.ParseDouble(Fields.Time).SI<Second>(), VehicleTargetSpeed = row.ParseDouble(Fields.VehicleSpeed).KMPHtoMeterPerSecond(), AdditionalAuxPowerDemand = row.ParseDoubleOrGetDefault(Fields.AdditionalAuxPowerDemand).SI(Unit.SI.Kilo.Watt).Cast<Watt>(), EngineSpeed = row.ParseDouble(Fields.EngineSpeedSuffix).RPMtoRad(), - WheelAngularVelocity = wheelSpeed, - Torque = wheelSpeed.IsEqual(0, 1e-3) ? 0.SI<NewtonMeter>() : wheelPower / wheelSpeed, - PWheel = wheelPower, FanSpeed = row.ParseDouble(Fields.FanSpeed).RPMtoRad(), Gear = (uint)row.ParseDoubleOrGetDefault(Fields.Gear), Fuelconsumption = row.ParseDoubleOrGetDefault(Fields.FuelConsumption).SI(Unit.SI.Gramm.Per.Hour).Cast<KilogramPerSecond>(), + TorqueWheelLeft = tqLeft, + TorqueWheelRight = tqRight, + WheelSpeedLeft = speedLeft, + WheelSpeedRight = speedRight }; }).ToArray(); - return entries; - } + return entries; + } - public static bool ValidateHeader(DataColumnCollection header, bool throwExceptions = true) - { - var requiredCols = new[] { - Fields.Time, - Fields.VehicleSpeed, - Fields.EngineSpeedSuffix, - Fields.FanSpeed, + public static bool ValidateHeader(DataColumnCollection header, bool throwExceptions = true) + { + var requiredCols = new[] { + Fields.Time, + Fields.VehicleSpeed, + Fields.EngineSpeedSuffix, + Fields.FanSpeed, Fields.WheelSpeedLeft, Fields.WheelSpeedRight, Fields.WheelTorqueLeft, Fields.WheelTorqueRight, - }; + }; - var allowedCols = new[] { + var allowedCols = new[] { Fields.Time, Fields.VehicleSpeed, Fields.EngineSpeedSuffix, @@ -771,14 +775,14 @@ namespace TUGraz.VectoCore.InputData.Reader Fields.FuelConsumption }; - const bool allowAux = true; + const bool allowAux = true; - return CheckColumns(header, allowedCols, requiredCols, throwExceptions, allowAux) && - CheckComboColumns(header, new[] { Fields.AirSpeedRelativeToVehicle, Fields.WindYawAngle }, throwExceptions); - } - } + return CheckColumns(header, allowedCols, requiredCols, throwExceptions, allowAux) && + CheckComboColumns(header, new[] { Fields.AirSpeedRelativeToVehicle, Fields.WindYawAngle }, throwExceptions); + } + } - } + } #endregion } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs index 03f10e3002c166248bf32b2e6ef11027b5fe443c..7352abc28ead060d446fa1fc835f2f70490e81bd 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs @@ -167,7 +167,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl _dao.CreateVehicleData(InputDataProvider.JobInputData.Vehicle, mission, loading.Value, _segment.MunicipalBodyWeight), AirdragData = _dao.CreateAirdragData(InputDataProvider.JobInputData.Vehicle.AirdragInputData, mission, _segment), - EngineData = _engineData.Copy(), + EngineData = _engineData, GearboxData = _gearboxData, AxleGearData = _axlegearData, AngledriveData = _angledriveData, @@ -185,7 +185,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl ? _municipalPtoTransmissionData : _ptoTransmissionData, InputDataHash = InputDataProvider.XMLHash, - SimulationType = SimulationType.DistanceCycle + SimulationType = SimulationType.DistanceCycle }; simulationRunData.EngineData.FuelConsumptionCorrectionFactor = DeclarationData.WHTCCorrection.Lookup( diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs new file mode 100644 index 0000000000000000000000000000000000000000..c76a1a3c04efdbe585f829a6758ab74a6b06c8a9 --- /dev/null +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs @@ -0,0 +1,274 @@ +/* +* This file is part of VECTO. +* +* Copyright © 2012-2017 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.OutputData; + +namespace TUGraz.VectoCore.InputData.Reader.Impl +{ + internal class DeclarationVTPModeVectoRunDataFactory : IVectoRunDataFactory + { + protected IVTPDeclarationJobInputData JobInputData; + private DriverData _driverdata; + private AirdragData _airdragData; + private CombustionEngineData _engineData; + private AxleGearData _axlegearData; + private AngledriveData _angledriveData; + private GearboxData _gearboxData; + private RetarderData _retarderData; + private PTOData _ptoTransmissionData; + protected List<VectoRunData.AuxData> _auxVTP; + protected Segment _segment; + private DeclarationDataAdapter _dao; + protected Exception _initException; + + public IVTPReport Report; + + public DeclarationVTPModeVectoRunDataFactory(IVTPDeclarationInputDataProvider ivtpProvider, IVTPReport report) : this( + ivtpProvider.JobInputData, report) { } + + protected DeclarationVTPModeVectoRunDataFactory(IVTPDeclarationJobInputData job, IVTPReport report) + { + JobInputData = job; + Report = report; + try { + Initialize(); + if (Report != null) { + InitializeReport(); + } + } catch (Exception e) { + _initException = e; + } + } + + private void InitializeReport() + { + var powertrainConfig = new VectoRunData() { + VehicleData = + _dao.CreateVehicleData( + JobInputData.Vehicle, _segment.Missions.First(), + _segment.Missions.First().Loadings.First().Value, _segment.MunicipalBodyWeight), + AirdragData = _airdragData, + EngineData = _engineData, + GearboxData = _gearboxData, + AxleGearData = _axlegearData, + Retarder = _retarderData, + Aux = + _dao.CreateAuxiliaryData( + JobInputData.Vehicle.AuxiliaryInputData(), + _segment.Missions.First().MissionType, + _segment.VehicleClass), + }; + powertrainConfig.VehicleData.VehicleClass = _segment.VehicleClass; + Report.InputDataHash = JobInputData.VectoJobHash; + Report.ManufacturerRecord = JobInputData.ManufacturerReportInputData; + Report.ManufacturerRecordHash = JobInputData.VectoManufacturerReportHash; + Report.InitializeReport(powertrainConfig); + } + + + protected void Initialize() + { + _dao = new DeclarationDataAdapter(); + var vehicle = JobInputData.Vehicle; + _segment = DeclarationData.Segments.Lookup( + vehicle.VehicleCategory, + vehicle.AxleConfiguration, + vehicle.GrossVehicleMassRating, + vehicle.CurbMassChassis); + _driverdata = _dao.CreateDriverData(); + _driverdata.AccelerationCurve = AccelerationCurveReader.ReadFromStream(_segment.AccelerationFile); + var tempVehicle = _dao.CreateVehicleData( + vehicle, _segment.Missions.First(), + _segment.Missions.First().Loadings.First().Value, _segment.MunicipalBodyWeight); + _airdragData = _dao.CreateAirdragData( + vehicle.AirdragInputData, + _segment.Missions.First(), _segment); + _engineData = _dao.CreateEngineData( + vehicle.EngineInputData, + vehicle.EngineIdleSpeed, + vehicle.GearboxInputData, vehicle.TorqueLimits); + _axlegearData = _dao.CreateAxleGearData(vehicle.AxleGearInputData, false); + _angledriveData = _dao.CreateAngledriveData(vehicle.AngledriveInputData, false); + _gearboxData = _dao.CreateGearboxData( + vehicle.GearboxInputData, _engineData, + _axlegearData.AxleGear.Ratio, + tempVehicle.DynamicTyreRadius, tempVehicle.VehicleCategory, false); + _retarderData = _dao.CreateRetarderData(vehicle.RetarderInputData); + + _ptoTransmissionData = + _dao.CreatePTOTransmissionData(vehicle.PTOTransmissionInputData); + + _auxVTP = CreateVTPAuxData(_dao, vehicle, _segment); + } + + #region Implementation of IVectoRunDataFactory + + public virtual IEnumerable<VectoRunData> NextRun() + { + if (_initException != null) { + throw _initException; + } + + // simulate the LongHaul cycle with RefLoad + var mission = _segment.Missions.FirstOrDefault(m => m.MissionType == DeclarationData.VTPMode.SelectedMission); + if (mission == null) { + throw new VectoException("Mission {0} not found in segmentation matrix", DeclarationData.VTPMode.SelectedMission); + } + var loading = mission.Loadings.FirstOrDefault(l => l.Key == DeclarationData.VTPMode.SelectedLoading); + var runData = CreateVectoRunData(_segment, mission, loading.Value); + runData.ModFileSuffix = loading.Key.ToString(); + var cycle = DrivingCycleDataReader.ReadFromStream(mission.CycleFile, CycleType.DistanceBased, "", false); + runData.Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()); + runData.DriverData = _driverdata; + runData.Aux = _dao.CreateAuxiliaryData( + JobInputData.Vehicle.AuxiliaryInputData(), mission.MissionType, _segment.VehicleClass); + runData.ExecutionMode = ExecutionMode.Declaration; + runData.SimulationType = SimulationType.DistanceCycle; + runData.Mission = mission; + runData.Loading = loading.Key; + yield return runData; + + + // simulate the Measured cycle + var vtpCycle = JobInputData.Cycles.FirstOrDefault(); + if (vtpCycle == null) { + throw new VectoException("no VTP-Cycle provided!"); + } + var drivingCycle = DrivingCycleDataReader.ReadFromDataTable(vtpCycle.CycleData, vtpCycle.Name, false); + + // Loading is not relevant as we use P_wheel + var vtpRunData = CreateVectoRunData(_segment, _segment.Missions.First(), 0.SI<Kilogram>()); + vtpRunData.Cycle = new DrivingCycleProxy(drivingCycle, vtpCycle.Name); + vtpRunData.Aux = _auxVTP; + vtpRunData.FanData = new AuxFanData() { + FanCoefficients = JobInputData.FanPowerCoefficents.ToArray(), + FanDiameter = JobInputData.FanDiameter, + }; + vtpRunData.ExecutionMode = ExecutionMode.Declaration; + vtpRunData.SimulationType = SimulationType.VerificationTest; + vtpRunData.Mission = new Mission() { + MissionType = MissionType.VerificationTest + }; + var ncvStd = DeclarationData.FuelData.Lookup(JobInputData.Vehicle.EngineInputData.FuelType).LowerHeatingValue; + var ncvCorrection = ncvStd / JobInputData.NetCalorificValueTestFuel; + var mileageCorrection = GetMileagecorrectionFactor(JobInputData.Mileage); + vtpRunData.VTPData = new VTPData() { + CorrectionFactor = ncvCorrection * mileageCorrection, + FuelNetCalorificValue = JobInputData.NetCalorificValueTestFuel //0.SI<JoulePerKilogramm>() + }; + yield return vtpRunData; + + } + + private double GetMileagecorrectionFactor(Meter mileage) + { + if (mileage > DeclarationData.VTPMode.RunInThreshold) { + return 1; + } + + return DeclarationData.VTPMode.EvolutionCoefficient + (1 - DeclarationData.VTPMode.EvolutionCoefficient) * mileage / + DeclarationData.VTPMode.RunInThreshold; + } + + protected VectoRunData CreateVectoRunData(Segment segment, Mission mission, Kilogram loading) + { + return new VectoRunData { + JobName = JobInputData.Vehicle.VIN, + EngineData = _engineData, + GearboxData = _gearboxData, + AxleGearData = _axlegearData, + AngledriveData = _angledriveData, + VehicleData = _dao.CreateVehicleData( + JobInputData.Vehicle, mission, + loading, segment.MunicipalBodyWeight), + AirdragData = _airdragData, + DriverData = null, + AdvancedAux = null, + Retarder = _retarderData, + PTO = _ptoTransmissionData, + Report = Report, + }; + } + + protected virtual List<VectoRunData.AuxData> CreateVTPAuxData( + DeclarationDataAdapter dao, IVehicleDeclarationInputData vehicle, Segment segment) + { + var auxRD = dao.CreateAuxiliaryData( + vehicle.AuxiliaryInputData(), MissionType.RegionalDelivery, segment.VehicleClass) + .ToList(); + foreach (var entry in auxRD) { + entry.MissionType = MissionType.RegionalDelivery; + } + + var auxLH = dao.CreateAuxiliaryData( + vehicle.AuxiliaryInputData(), MissionType.LongHaul, segment.VehicleClass) + .ToList(); + foreach (var entry in auxLH) { + entry.MissionType = MissionType.LongHaul; + } + + var auxUD = dao.CreateAuxiliaryData( + vehicle.AuxiliaryInputData(), MissionType.UrbanDelivery, segment.VehicleClass) + .ToList(); + foreach (var entry in auxUD) { + entry.MissionType = MissionType.UrbanDelivery; + } + + var aux = new List<VectoRunData.AuxData>(); + aux.AddRange(auxRD); + aux.AddRange(auxLH); + aux.AddRange(auxUD); + + aux.RemoveAll(x => x.ID == Constants.Auxiliaries.IDs.Fan); + aux.Add( + new VectoRunData.AuxData { + DemandType = AuxiliaryDemandType.Direct, + ID = DrivingCycleDataReader.Fields.AdditionalAuxPowerDemand + }); + return aux; + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringVTPModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringVTPModeVectoRunDataFactory.cs index af3ecc3d949607252a2bc789c0cd4c5632f998ac..a7adb89460fe66ed6132bfaffaab0b1451dae424 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringVTPModeVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringVTPModeVectoRunDataFactory.cs @@ -41,91 +41,36 @@ using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; -namespace TUGraz.VectoCore.InputData.Reader.Impl { - internal class EngineeringVTPModeVectoRunDataFactory : IVectoRunDataFactory - { - protected IVTPInputDataProvider InputDataProvider; +namespace TUGraz.VectoCore.InputData.Reader.Impl +{ + internal class EngineeringVTPModeVectoRunDataFactory : DeclarationVTPModeVectoRunDataFactory + { + + public EngineeringVTPModeVectoRunDataFactory(IVTPEngineeringInputDataProvider ivtpProvider) : base(ivtpProvider.JobInputData, null) + { + + } - public EngineeringVTPModeVectoRunDataFactory(IVTPInputDataProvider ivtpProvider) - { - InputDataProvider = ivtpProvider; - } - - public IEnumerable<VectoRunData> NextRun() - { - var dao = new DeclarationDataAdapter(); - var segment = DeclarationData.Segments.Lookup(InputDataProvider.JobInputData.Vehicle.VehicleCategory, - InputDataProvider.JobInputData.Vehicle.AxleConfiguration, - InputDataProvider.JobInputData.Vehicle.GrossVehicleMassRating, - InputDataProvider.JobInputData.Vehicle.CurbMassChassis); - var driverdata = dao.CreateDriverData(); - driverdata.AccelerationCurve = AccelerationCurveReader.ReadFromStream(segment.AccelerationFile); - var tempVehicle = dao.CreateVehicleData(InputDataProvider.JobInputData.Vehicle, segment.Missions.First(), - segment.Missions.First().Loadings.First().Value, segment.MunicipalBodyWeight); - var airdragData = dao.CreateAirdragData(InputDataProvider.JobInputData.Vehicle.AirdragInputData, - segment.Missions.First(), segment); - var engineData = dao.CreateEngineData(InputDataProvider.JobInputData.Vehicle.EngineInputData, - InputDataProvider.JobInputData.Vehicle.EngineIdleSpeed, - InputDataProvider.JobInputData.Vehicle.GearboxInputData, InputDataProvider.JobInputData.Vehicle.TorqueLimits); - var axlegearData = dao.CreateAxleGearData(InputDataProvider.JobInputData.Vehicle.AxleGearInputData, false); - var angledriveData = dao.CreateAngledriveData(InputDataProvider.JobInputData.Vehicle.AngledriveInputData, false); - var gearboxData = dao.CreateGearboxData(InputDataProvider.JobInputData.Vehicle.GearboxInputData, engineData, - axlegearData.AxleGear.Ratio, - tempVehicle.DynamicTyreRadius, tempVehicle.VehicleCategory, false); - var retarderData = dao.CreateRetarderData(InputDataProvider.JobInputData.Vehicle.RetarderInputData); - - var ptoTransmissionData = dao.CreatePTOTransmissionData(InputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData); - - - var auxRD = dao.CreateAuxiliaryData(InputDataProvider.JobInputData.Vehicle.AuxiliaryInputData(), MissionType.RegionalDelivery, segment.VehicleClass).ToList(); - foreach (var entry in auxRD) { - entry.MissionType = MissionType.RegionalDelivery; - } - var auxLH = dao.CreateAuxiliaryData(InputDataProvider.JobInputData.Vehicle.AuxiliaryInputData(), MissionType.LongHaul, segment.VehicleClass).ToList(); - foreach (var entry in auxLH) { - entry.MissionType = MissionType.LongHaul; + public override IEnumerable<VectoRunData> NextRun() + { + if (_initException != null) { + throw _initException; } - var auxUD = dao.CreateAuxiliaryData(InputDataProvider.JobInputData.Vehicle.AuxiliaryInputData(), MissionType.UrbanDelivery, segment.VehicleClass).ToList(); - foreach (var entry in auxUD) { - entry.MissionType = MissionType.UrbanDelivery; - } - - var aux = new List<VectoRunData.AuxData>(); - aux.AddRange(auxRD); - aux.AddRange(auxLH); - aux.AddRange(auxUD); - - aux.RemoveAll(x => x.ID == Constants.Auxiliaries.IDs.Fan); - aux.Add(new VectoRunData.AuxData { - DemandType = AuxiliaryDemandType.Direct, - ID = DrivingCycleDataReader.Fields.AdditionalAuxPowerDemand - }); - - return InputDataProvider.JobInputData.Cycles.Select(cycle => { - var drivingCycle = DrivingCycleDataReader.ReadFromDataTable(cycle.CycleData, cycle.Name, false); - return new VectoRunData { - JobName = InputDataProvider.JobInputData.Vehicle.VIN, - EngineData = engineData, - GearboxData = gearboxData, - AxleGearData = axlegearData, - AngledriveData = angledriveData, - VehicleData = dao.CreateVehicleData(InputDataProvider.JobInputData.Vehicle, segment.Missions.First(), - 0.SI<Kilogram>(), segment.MunicipalBodyWeight), - AirdragData =airdragData, - DriverData = null, - Aux = aux, - AdvancedAux = null, - Retarder = retarderData, - PTO = ptoTransmissionData, - Cycle = new DrivingCycleProxy(drivingCycle, cycle.Name), - ExecutionMode = ExecutionMode.Engineering, - FanData = new AuxFanData() { - FanCoefficients = InputDataProvider.JobInputData.FanPowerCoefficents.ToArray(), - FanDiameter = InputDataProvider.JobInputData.FanDiameter, - }, - SimulationType = SimulationType.VerificationTest - }; - }); - } - } -} \ No newline at end of file + return JobInputData.Cycles.Select( + cycle => { + var drivingCycle = DrivingCycleDataReader.ReadFromDataTable(cycle.CycleData, cycle.Name, false); + // loading is not relevant as we use P_wheel + var runData = CreateVectoRunData(_segment, _segment.Missions.First(), 0.SI<Kilogram>()); + runData.Cycle = new DrivingCycleProxy(drivingCycle, cycle.Name); + runData.Aux = _auxVTP; + runData.FanData = new AuxFanData() { + FanCoefficients = JobInputData.FanPowerCoefficents.ToArray(), + FanDiameter = JobInputData.FanDiameter, + }; + runData.ExecutionMode = ExecutionMode.Engineering; + runData.SimulationType = SimulationType.VerificationTest; + return runData; + }); + } + } +} diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs index f4ec537cbe4070e8a02d035c00d71384239b7b5b..2dceb5620745b060bf2f79413da91e8aab03ce01 100644 --- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs +++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs @@ -499,5 +499,34 @@ namespace TUGraz.VectoCore.Models.Declaration public const string DefaultPTOActivationCycle = DeclarationDataResourcePrefix + ".MissionCycles.MunicipalUtility_PTO_generic.vptoc"; } + + public static class VTPMode + { + public static readonly Meter RunInThreshold = 15000.SI(Unit.SI.Kilo.Meter).Cast<Meter>(); + public const double EvolutionCoefficient = 0.98; + + public const MissionType SelectedMission = MissionType.LongHaul; + public const LoadingType SelectedLoading = LoadingType.ReferenceLoad; + + // verification of input data + + public const double WheelSpeedDifferenceFactor = 1.4; + public const double WheelTorqueDifferenceFactor = 3; + + public static readonly PerSecond WheelSpeedZeroTolerance = 0.1.RPMtoRad(); + public static readonly PerSecond MaxWheelSpeedDifferenceStandstill = 1.RPMtoRad(); + + public static readonly NewtonMeter MaxWheelTorqueDifference = 200.SI<NewtonMeter>(); + + public static readonly PerSecond MinFanSpeed = 20.RPMtoRad(); + public static readonly PerSecond MaxFanSpeed = 4000.RPMtoRad(); + + public static readonly Second SamplingInterval = 0.5.SI<Second>(); + + public static readonly WattSecond MinPosWorkAtWheelsForFC = 1.SI(Unit.SI.Kilo.Watt.Hour).Cast<WattSecond>(); + public static readonly SpecificFuelConsumption LowerFCThreshold = 180.SI(Unit.SI.Gramm.Per.Kilo.Watt.Hour).Cast<SpecificFuelConsumption>(); + public static readonly SpecificFuelConsumption UpperFCThreshold = 600.SI(Unit.SI.Gramm.Per.Kilo.Watt.Hour).Cast<SpecificFuelConsumption>(); + public static readonly Second FCAccumulationWindow = 10.SI(Unit.SI.Minute).Cast<Second>(); + } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/Declaration/Fan.cs b/VectoCore/VectoCore/Models/Declaration/Fan.cs index 3a576c5d04d0a6b6bda5543afe71755c7627e00c..0f161d59cb53777c51f41e5afa17071c533dd776 100644 --- a/VectoCore/VectoCore/Models/Declaration/Fan.cs +++ b/VectoCore/VectoCore/Models/Declaration/Fan.cs @@ -30,6 +30,7 @@ */ using System; +using System.Collections.Generic; using System.Data; using System.Linq; using TUGraz.VectoCommon.Utils; @@ -39,6 +40,8 @@ namespace TUGraz.VectoCore.Models.Declaration { public sealed class Fan : LookupData<MissionType, string, AuxDemandEntry>, IDeclarationAuxiliaryTable { + private readonly List<string> FullyElectricFanTechnologies = new List<string>(); + protected override string ResourceId { get { return DeclarationData.DeclarationDataResourcePrefix + ".VAUX.Fan-Tech.csv"; } @@ -53,10 +56,15 @@ namespace TUGraz.VectoCore.Models.Declaration { foreach (DataRow row in table.Rows) { var name = row.Field<string>("technology"); - + var electric = row.ParseBoolean("fullyelectric"); + if (electric) { + FullyElectricFanTechnologies.Add(name); + } foreach (DataColumn col in table.Columns) { - if (col.Caption != "technology") { - Data[Tuple.Create(col.Caption.ParseEnum<MissionType>(), name)] = new AuxDemandEntry(){PowerDemand = row.ParseDouble(col).SI<Watt>()}; + if (col.Caption != "technology" && col.Caption != "fullyelectric") { + Data[Tuple.Create(col.Caption.ParseEnum<MissionType>(), name)] = new AuxDemandEntry { + PowerDemand = row.ParseDouble(col).SI<Watt>(), + }; } } } @@ -70,6 +78,11 @@ namespace TUGraz.VectoCore.Models.Declaration return base.Lookup(mission, technology); } + public string[] FullyElectricTechnologies() + { + return FullyElectricFanTechnologies.ToArray(); + } + public string[] GetTechnologies() { return Data.Keys.Select(x => x.Item2).Distinct().ToArray(); diff --git a/VectoCore/VectoCore/Models/Declaration/MissionType.cs b/VectoCore/VectoCore/Models/Declaration/MissionType.cs index 977ec1abbe9bbd127350d967596c128690fda370..893376efc85a1ff21b59503c767448c557476ebf 100644 --- a/VectoCore/VectoCore/Models/Declaration/MissionType.cs +++ b/VectoCore/VectoCore/Models/Declaration/MissionType.cs @@ -46,7 +46,8 @@ namespace TUGraz.VectoCore.Models.Declaration Urban, Suburban, Interurban, - Coach + Coach, + VerificationTest } public static class MissionTypeHelper @@ -56,9 +57,14 @@ namespace TUGraz.VectoCore.Models.Declaration return self.ToString().ToLowerInvariant(); } - public static bool IsEMS(this MissionType self) - { - return self == MissionType.LongHaulEMS || self == MissionType.RegionalDeliveryEMS; + public static bool IsEMS(this MissionType self) + { + return self == MissionType.LongHaulEMS || self == MissionType.RegionalDeliveryEMS; + } + + public static bool IsDeclarationMission(this MissionType self) + { + return self != MissionType.VerificationTest; } public static MissionType GetNonEMSMissionType(this MissionType self) diff --git a/VectoCore/VectoCore/Models/Declaration/Segments.cs b/VectoCore/VectoCore/Models/Declaration/Segments.cs index a2be84ae2b7aeb997583ed361265b39157e795dd..53a29d8f79261bba7677cefd6e8b42f3fd91c33e 100644 --- a/VectoCore/VectoCore/Models/Declaration/Segments.cs +++ b/VectoCore/VectoCore/Models/Declaration/Segments.cs @@ -180,7 +180,7 @@ namespace TUGraz.VectoCore.Models.Declaration { var missionTypes = Enum.GetValues(typeof(MissionType)).Cast<MissionType>(); var missions = new List<Mission>(); - foreach (var missionType in missionTypes.Where(m => row.Field<string>(m.ToString()) != "-")) { + foreach (var missionType in missionTypes.Where(m => m.IsDeclarationMission() && row.Field<string>(m.ToString()) != "-")) { var body = DeclarationData.StandardBodies.Lookup(row.Field<string>("body")); var maxGVW = Constants.SimulationSettings.MaximumGrossVehicleWeight; diff --git a/VectoCore/VectoCore/Models/Declaration/WHTCCorrection.cs b/VectoCore/VectoCore/Models/Declaration/WHTCCorrection.cs index 94e7ea1ed6641251467d3161d48b9a7c2605ab65..fe131c8a4ca558818af343ce4a2834257fa5a22e 100644 --- a/VectoCore/VectoCore/Models/Declaration/WHTCCorrection.cs +++ b/VectoCore/VectoCore/Models/Declaration/WHTCCorrection.cs @@ -62,7 +62,7 @@ namespace TUGraz.VectoCore.Models.Declaration protected override void ParseData(DataTable table) { foreach (MissionType mission in Enum.GetValues(typeof(MissionType))) { - if (mission.IsEMS()) { + if (mission.IsEMS() || !mission.IsDeclarationMission()) { continue; } var values = table.Columns[mission.ToString().ToLower()].Values<string>().ToDouble().ToArray(); diff --git a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs index 1ab02409adecb5b48ddb752b4a8ecf474f20dfd9..21cfcb0a6f79ecf87b4841cdf21d8030ef374f06 100644 --- a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs +++ b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs @@ -104,10 +104,12 @@ namespace TUGraz.VectoCore.Models.Simulation.Data public int JobRunId { get; internal set; } - public AuxFanData FanData { get; internal set; } + public AuxFanData FanData { get; internal set; } public SimulationType SimulationType { get; set; } + public VTPData VTPData { get; set; } + public class AuxData { // ReSharper disable once InconsistentNaming @@ -205,7 +207,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data } catch (VectoException) { return new ValidationResult( string.Format("Interpolation of Gear-{0}-LossMap failed with torque={1} and angularSpeed={2}", gear.Key, - inTorque, angularVelocity.ConvertToRoundsPerMinute())); + inTorque, angularVelocity.ConvertToRoundsPerMinute())); } var axlegearTorque = angledriveTorque; try { @@ -216,7 +218,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data } catch (VectoException) { return new ValidationResult( string.Format("Interpolation of Angledrive-LossMap failed with torque={0} and angularSpeed={1}", - angledriveTorque, (angularVelocity / gear.Value.Ratio).ConvertToRoundsPerMinute())); + angledriveTorque, (angularVelocity / gear.Value.Ratio).ConvertToRoundsPerMinute())); } if (axleGearData != null) { @@ -228,13 +230,20 @@ namespace TUGraz.VectoCore.Models.Simulation.Data new ValidationResult( string.Format( "Interpolation of AxleGear-LossMap failed with torque={0} and angularSpeed={1} (gear={2}, velocity={3})", - axlegearTorque, axleAngularVelocity.ConvertToRoundsPerMinute(), gear.Key, velocity)); + axlegearTorque, axleAngularVelocity.ConvertToRoundsPerMinute(), gear.Key, velocity)); } } return null; } } + public class VTPData + { + public double CorrectionFactor; + + public JoulePerKilogramm FuelNetCalorificValue; + } + public class AuxFanData { public double[] FanCoefficients; diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs index ce9a92b600ffcaddf7c7b009f242f07389cea3e8..9ce663527c2fe8fb6d9a3325bfc3db798ac3d6f0 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs @@ -133,12 +133,11 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl throw new VectoException("CycleType must be VTP."); } - var container = new VehicleContainer(ExecutionMode.Engineering, _modData, _sumWriter) { RunData = data }; + var container = new VehicleContainer(data.ExecutionMode, _modData, _sumWriter) { RunData = data }; var gearbox = new VTPGearbox(container, data); // VTPCycle --> AxleGear --> Clutch --> Engine <-- Aux - var powertrain = new VTPCycle(container, data.Cycle, data.AxleGearData.AxleGear.Ratio, data.VehicleData, - gearbox.ModelData.Gears.ToDictionary(g => g.Key, g => g.Value.Ratio)) + var powertrain = new VTPCycle(container, data.Cycle) .AddComponent(new AxleGear(container, data.AxleGearData)) .AddComponent(data.AngledriveData != null ? new Angledrive(container, data.AngledriveData) : null) .AddComponent(gearbox, data.Retarder, container) diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs index 05657c87f1984a4c7d792f5b2e87ff74986b1e9d..2d3520853d47e45db5113a54da9418f22f8db9f5 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs @@ -57,7 +57,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl private bool _engineOnlyMode; public SimulatorFactory(ExecutionMode mode, IInputDataProvider dataProvider, IOutputDataWriter writer, - IDeclarationReport declarationReport = null, bool validate = true) + IDeclarationReport declarationReport = null, IVTPReport vtpReport = null, bool validate = true) { Log.Info("########## VectoCore Version {0} ##########", Assembly.GetExecutingAssembly().GetName().Version); JobNumber = Interlocked.Increment(ref _jobNumberCounter); @@ -75,9 +75,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl switch (mode) { case ExecutionMode.Declaration: - var declDataProvider = ToDeclarationInputDataProvider(dataProvider); - var report = declarationReport ?? new XMLDeclarationReport(writer); - DataReader = new DeclarationModeVectoRunDataFactory(declDataProvider, report); + CreateDeclarationDataReader(dataProvider, declarationReport, vtpReport); break; case ExecutionMode.Engineering: CreateEngineeringDataReader(dataProvider); @@ -87,11 +85,28 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl } } + private void CreateDeclarationDataReader(IInputDataProvider dataProvider, IDeclarationReport declarationReport, IVTPReport vtpReport) + { + if (dataProvider is IVTPDeclarationInputDataProvider) { + var vtpProvider = dataProvider as IVTPDeclarationInputDataProvider; + var report = vtpReport ?? new XMLVTPReport(ModWriter); + DataReader = new DeclarationVTPModeVectoRunDataFactory(vtpProvider, report); + return; + } + if (dataProvider is IDeclarationInputDataProvider) { + var declDataProvider = dataProvider as IDeclarationInputDataProvider; + var report = declarationReport ?? new XMLDeclarationReport(ModWriter); + DataReader = new DeclarationModeVectoRunDataFactory(declDataProvider, report); + return; + } + throw new VectoException("Unknown InputData for Declaration Mode!"); + } + private void CreateEngineeringDataReader(IInputDataProvider dataProvider) { - if (dataProvider is IVTPInputDataProvider) { - var eptpProvider = dataProvider as IVTPInputDataProvider; - DataReader = new EngineeringVTPModeVectoRunDataFactory(eptpProvider); + if (dataProvider is IVTPEngineeringInputDataProvider) { + var vtpProvider = dataProvider as IVTPEngineeringInputDataProvider; + DataReader = new EngineeringVTPModeVectoRunDataFactory(vtpProvider); return; } if (dataProvider is IEngineeringInputDataProvider) { @@ -107,18 +122,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl throw new VectoException("Unknown InputData for Engineering Mode!"); } - private static IDeclarationInputDataProvider ToDeclarationInputDataProvider(IInputDataProvider dataProvider) - { - var declDataProvider = dataProvider as IDeclarationInputDataProvider; - if (declDataProvider == null) { - throw new VectoException("InputDataProvider does not implement DeclarationData interface"); - } - return declDataProvider; - } - public bool Validate { get; set; } - public IVectoRunDataFactory DataReader { get; private set; } + protected internal IVectoRunDataFactory DataReader { get; private set; } public SummaryDataContainer SumData { get; set; } diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/VectoRun.cs b/VectoCore/VectoCore/Models/Simulation/Impl/VectoRun.cs index 044834a701c44473ff16645ed27c67fcec90cff3..c66eee78a9855d7a5dd3c460e2b1e4ac65416064 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/VectoRun.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/VectoRun.cs @@ -101,6 +101,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl public void Run() { + if (Container.RunStatus != Status.Pending) { + return; + } var debug = new DebugData(); Log.Info("VectoJob started running."); diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs b/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs index 57f4a2e5ea2204c41b9486cb832dc69dcf9941d9..48467a2291bf74ab0e1835cb4c2f9ac2ddba78fb 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs @@ -36,6 +36,7 @@ using System.Linq; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.Reader.Impl; using TUGraz.VectoCore.Models.Connector.Ports; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.DataBus; @@ -351,11 +352,15 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl public Meter Distance { get { - if (MilageCounter == null) { - Log.Warn("No MileageCounter in VehicleContainer. Distance cannot be measured."); + if (RunData == null || (RunData.SimulationType & SimulationType.DistanceCycle) == 0 ) { return 0.SI<Meter>(); } - return MilageCounter.Distance; + if (MilageCounter != null) { + return MilageCounter.Distance; + } + + Log.Warn("No MileageCounter in VehicleContainer. Distance cannot be measured."); + return 0.SI<Meter>(); } } @@ -411,7 +416,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl } public VectoRunData RunData { get; set; } - public ExecutionMode ExecutionMode { get; set; } + public ExecutionMode ExecutionMode { get; } + + public CycleData CycleData { diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/CombustionEngineData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/CombustionEngineData.cs index 732d7fb4f0f9669a5bb9d7b5c6369eca07d34aa2..ff8b9bd232d1119f18edb64cd225b725c4c65740 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/CombustionEngineData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/CombustionEngineData.cs @@ -90,29 +90,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data FuelConsumptionCorrectionFactor = 1; } - public CombustionEngineData Copy() - { - return new CombustionEngineData { - Manufacturer = Manufacturer, - ModelName = ModelName, - Displacement = Displacement, - IdleSpeed = IdleSpeed, - Inertia = Inertia, - WHTCUrban = WHTCUrban, - WHTCRural = WHTCRural, - WHTCMotorway = WHTCMotorway, - ConsumptionMap = ConsumptionMap, - FullLoadCurves = FullLoadCurves, - CorrectionFactorRegPer = CorrectionFactorRegPer, - ColdHotCorrectionFactor = ColdHotCorrectionFactor, - FuelConsumptionCorrectionFactor = FuelConsumptionCorrectionFactor, - RatedPowerDeclared = RatedPowerDeclared, - RatedSpeedDeclared = RatedSpeedDeclared, - MaxTorqueDeclared = MaxTorqueDeclared, - FuelType = FuelType - }; - } - // ReSharper disable once UnusedMember.Global -- used in CustomValidation public static ValidationResult ValidateData(CombustionEngineData data, ValidationContext context) { diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/DrivingCycleData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/DrivingCycleData.cs index 13e3415b6034382675ed07aed02297c57973b471..b565df6044119b33fe4cfff8cc5f92b994966c88 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/DrivingCycleData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/DrivingCycleData.cs @@ -47,7 +47,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data MeasuredSpeed, MeasuredSpeedGear, PTO, - VTP + VTP } public static class CycleTypeHelper @@ -138,9 +138,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data Drag = entry.Drag; PTOActive = entry.PTOActive; AuxiliarySupplyPower = new Dictionary<string, Watt>(entry.AuxiliarySupplyPower); - EngineSpeed = entry.EngineSpeed; - FanSpeed = entry.FanSpeed; - } + EngineSpeed = entry.EngineSpeed; + FanSpeed = entry.FanSpeed; + } /// <summary> /// Travelled distance used for distance-based cycles. If "t" is also defined this column will be ignored. @@ -225,7 +225,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data /// </summary> public Watt PWheel; - public bool? TorqueConverterActive; + public bool? TorqueConverterActive; /// <summary> /// The angular velocity at the wheel. only used in PWheelCycle. @@ -237,9 +237,19 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data /// </summary> public bool PTOActive; - public PerSecond EngineSpeed; + public PerSecond EngineSpeed; + + public PerSecond FanSpeed; + + // required for VTP Mode (validation of cycle data in declaration mode) + public NewtonMeter TorqueWheelLeft; + + public NewtonMeter TorqueWheelRight; - public PerSecond FanSpeed; - } + public PerSecond WheelSpeedLeft; + + public PerSecond WheelSpeedRight; + + } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/TransmissionLossMap.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/TransmissionLossMap.cs index ccc17e5f94578d5f7df4b2ff30145d6d2a194a80..ea99a0124c754b2f8f185ce7de1c494a771972e5 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/TransmissionLossMap.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/TransmissionLossMap.cs @@ -29,135 +29,135 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Diagnostics; -using TUGraz.VectoCommon.Exceptions; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.Configuration; -using TUGraz.VectoCore.Utils; - -namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox -{ - public sealed class TransmissionLossMap : LoggingObject - { - [ValidateObject] private readonly IReadOnlyList<GearLossMapEntry> _entries; - - private readonly double _ratio; - - /// <summary> - /// The Loss map. [X=Output EngineSpeed, Y=Output Torque] => Z=Torque Loss - /// </summary> - private readonly DelaunayMap _lossMap; - - /// <summary> - /// The inverted loss map for range sanity checks. [X=Input EngineSpeed, Y=Input Torque] => Z=Output Torque - /// </summary> - private readonly DelaunayMap _invertedLossMap; - - public string GearName { get; private set; } - - public TransmissionLossMap(IReadOnlyList<GearLossMapEntry> entries, double gearRatio, string gearName) - { - GearName = gearName; - _ratio = gearRatio; - _entries = entries; - _lossMap = new DelaunayMap("TransmissionLossMap " + GearName); - _invertedLossMap = new DelaunayMap("TransmissionLossMapInv. " + GearName); - foreach (var entry in _entries) { - _lossMap.AddPoint(entry.InputSpeed.Value(), (entry.InputTorque - entry.TorqueLoss).Value(), entry.TorqueLoss.Value()); - _invertedLossMap.AddPoint(entry.InputSpeed.Value(), entry.InputTorque.Value(), entry.TorqueLoss.Value()); - } - - _lossMap.Triangulate(); - _invertedLossMap.Triangulate(); - } - - /// <summary> - /// Computes the torque loss (input side) given by the output gearbox speed and the output-torque. - /// </summary> - /// <param name="outAngularVelocity">Angular speed at output side.</param> - /// <param name="outTorque">Torque at output side (as requested by the previous componend towards the wheels).</param> - /// <returns>Torque loss as seen on input side (towards the engine).</returns> - public LossMapResult GetTorqueLoss(PerSecond outAngularVelocity, NewtonMeter outTorque) - { - var result = new LossMapResult(); - var torqueLoss = _lossMap.Interpolate(outAngularVelocity.Value() * _ratio, outTorque.Value() / _ratio); - - if (!torqueLoss.HasValue) { - torqueLoss = _lossMap.Extrapolate(outAngularVelocity.Value() * _ratio, outTorque.Value() / _ratio); - result.Extrapolated = true; - } - - result.Value = torqueLoss.Value.SI<NewtonMeter>(); - - Log.Debug("GearboxLoss {0}: {1}, outAngularVelocity: {2}, outTorque: {3}", GearName, torqueLoss, - outAngularVelocity, outTorque); - return result; - } - - [DebuggerDisplay("{Value} (extrapolated: {Extrapolated})")] - public class LossMapResult - { - public bool Extrapolated; - public NewtonMeter Value; - } - - /// <summary> - /// Computes the OUTPUT torque given by the input engineSpeed and the input torque. - /// </summary> - /// <param name="inAngularVelocity">Angular speed at input side.</param> - /// <param name="inTorque">Torque at input side.</param> - /// <param name="allowExtrapolation"></param> - /// <returns>Torque needed at output side (towards the wheels).</returns> - public NewtonMeter GetOutTorque(PerSecond inAngularVelocity, NewtonMeter inTorque, bool allowExtrapolation = false) - { - var torqueLoss = _invertedLossMap.Interpolate(inAngularVelocity.Value(), inTorque.Value()); - if (torqueLoss.HasValue) { - return (inTorque - torqueLoss.Value.SI<NewtonMeter>()) / _ratio; - } - - if (allowExtrapolation) { - torqueLoss = _invertedLossMap.Extrapolate(inAngularVelocity.Value(), inTorque.Value()); - return (inTorque - torqueLoss.Value.SI<NewtonMeter>()) / _ratio; - } - - throw new VectoException("TransmissionLossMap {0}: Interpolation failed. inTorque: {1}, inAngularVelocity: {2}", - GearName, inTorque, - inAngularVelocity.AsRPM); - } - - public GearLossMapEntry this[int i] - { - get { return _entries[i]; } - } - -#if DEBUG - public void DrawGraph() - { - _lossMap.DrawGraph(); - } -#endif - - [DebuggerDisplay("GearLossMapEntry({InputSpeed}, {InputTorque}, {TorqueLoss})")] - public class GearLossMapEntry - { - [Required, SIRange(0, 10000 * Constants.RPMToRad)] - public PerSecond InputSpeed { get; private set; } - - [Required, SIRange(-100000, 100000)] - public NewtonMeter InputTorque { get; private set; } - - [Required, SIRange(0, 100000)] - public NewtonMeter TorqueLoss { get; private set; } - - public GearLossMapEntry(PerSecond inputSpeed, NewtonMeter inputTorque, NewtonMeter torqueLoss) - { - InputSpeed = inputSpeed; - InputTorque = inputTorque; - TorqueLoss = torqueLoss; - } - } - } +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Diagnostics; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox +{ + public sealed class TransmissionLossMap : LoggingObject + { + [ValidateObject] private readonly IReadOnlyList<GearLossMapEntry> _entries; + + private readonly double _ratio; + + /// <summary> + /// The Loss map. [X=Output EngineSpeed, Y=Output Torque] => Z=Torque Loss + /// </summary> + private readonly DelaunayMap _lossMap; + + /// <summary> + /// The inverted loss map for range sanity checks. [X=Input EngineSpeed, Y=Input Torque] => Z=Output Torque + /// </summary> + private readonly DelaunayMap _invertedLossMap; + + public string GearName { get; private set; } + + public TransmissionLossMap(IReadOnlyList<GearLossMapEntry> entries, double gearRatio, string gearName) + { + GearName = gearName; + _ratio = gearRatio; + _entries = entries; + _lossMap = new DelaunayMap("TransmissionLossMap " + GearName); + _invertedLossMap = new DelaunayMap("TransmissionLossMapInv. " + GearName); + foreach (var entry in _entries) { + _lossMap.AddPoint(entry.InputSpeed.Value(), (entry.InputTorque - entry.TorqueLoss).Value(), entry.TorqueLoss.Value()); + _invertedLossMap.AddPoint(entry.InputSpeed.Value(), entry.InputTorque.Value(), entry.TorqueLoss.Value()); + } + + _lossMap.Triangulate(); + _invertedLossMap.Triangulate(); + } + + /// <summary> + /// Computes the torque loss (input side) given by the output gearbox speed and the output-torque. + /// </summary> + /// <param name="outAngularVelocity">Angular speed at output side.</param> + /// <param name="outTorque">Torque at output side (as requested by the previous componend towards the wheels).</param> + /// <returns>Torque loss as seen on input side (towards the engine).</returns> + public LossMapResult GetTorqueLoss(PerSecond outAngularVelocity, NewtonMeter outTorque) + { + var result = new LossMapResult(); + var torqueLoss = _lossMap.Interpolate(outAngularVelocity.Value() * _ratio, outTorque.Value() / _ratio); + + if (!torqueLoss.HasValue) { + torqueLoss = _lossMap.Extrapolate(outAngularVelocity.Value() * _ratio, outTorque.Value() / _ratio); + result.Extrapolated = true; + } + + result.Value = torqueLoss.Value.SI<NewtonMeter>(); + + Log.Debug("GearboxLoss {0}: {1}, outAngularVelocity: {2}, outTorque: {3}", GearName, torqueLoss, + outAngularVelocity, outTorque); + return result; + } + + [DebuggerDisplay("{Value} (extrapolated: {Extrapolated})")] + public class LossMapResult + { + public bool Extrapolated; + public NewtonMeter Value; + } + + /// <summary> + /// Computes the OUTPUT torque given by the input engineSpeed and the input torque. + /// </summary> + /// <param name="inAngularVelocity">Angular speed at input side.</param> + /// <param name="inTorque">Torque at input side.</param> + /// <param name="allowExtrapolation"></param> + /// <returns>Torque needed at output side (towards the wheels).</returns> + public NewtonMeter GetOutTorque(PerSecond inAngularVelocity, NewtonMeter inTorque, bool allowExtrapolation = false) + { + var torqueLoss = _invertedLossMap.Interpolate(inAngularVelocity.Value(), inTorque.Value()); + if (torqueLoss.HasValue) { + return (inTorque - torqueLoss.Value.SI<NewtonMeter>()) / _ratio; + } + + if (allowExtrapolation) { + torqueLoss = _invertedLossMap.Extrapolate(inAngularVelocity.Value(), inTorque.Value()); + return (inTorque - torqueLoss.Value.SI<NewtonMeter>()) / _ratio; + } + + throw new VectoException("TransmissionLossMap {0}: Interpolation failed. inTorque: {1}, inAngularVelocity: {2}", + GearName, inTorque, + inAngularVelocity.AsRPM); + } + + public GearLossMapEntry this[int i] + { + get { return _entries[i]; } + } + +#if DEBUG + public void DrawGraph() + { + _lossMap.DrawGraph(); + } +#endif + + [DebuggerDisplay("GearLossMapEntry({InputSpeed}, {InputTorque}, {TorqueLoss})")] + public class GearLossMapEntry + { + [Required, SIRange(0, 10000 * Constants.RPMToRad)] + public PerSecond InputSpeed { get; private set; } + + [Required, SIRange(-100000, 100000)] + public NewtonMeter InputTorque { get; private set; } + + [Required, SIRange(0, 100000)] + public NewtonMeter TorqueLoss { get; private set; } + + public GearLossMapEntry(PerSecond inputSpeed, NewtonMeter inputTorque, NewtonMeter torqueLoss) + { + InputSpeed = inputSpeed; + InputTorque = inputTorque; + TorqueLoss = torqueLoss; + } + } + } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs index 4bdde41d73769f9b909f285630a7558e58133ebc..af42da7f9ba6b27e6bd1dbe90b2a79ffe78827d9 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs @@ -29,255 +29,255 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using System; -using System.IO; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.Models.Declaration; -using TUGraz.VectoCore.Models.Simulation.Data; -using TUGraz.VectoCore.Models.Simulation.DataBus; -using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; -using TUGraz.VectoCore.OutputData; -using VectoAuxiliaries; -using VectoAuxiliaries.Pneumatics; - -namespace TUGraz.VectoCore.Models.SimulationComponent.Impl -{ - public class BusAuxiliariesAdapter : LoggingObject, IAuxInProvider, IAuxPort - { - protected readonly IDataBus DataBus; - protected internal BusAuxState CurrentState; - protected internal BusAuxState PreviousState; - - protected internal readonly IAuxPort AdditionalAux; - - protected IAdvancedAuxiliaries Auxiliaries; - private readonly FuelConsumptionAdapter _fcMapAdapter; - - public BusAuxiliariesAdapter(IDataBus container, string aauxFile, string cycleName, Kilogram vehicleWeight, - FuelConsumptionMap fcMap, PerSecond engineIdleSpeed, IAuxPort additionalAux = null) - { - // mAAUX_Global.advancedAuxModel.Signals.DeclarationMode = Cfg.DeclMode - // mAAUX_Global.advancedAuxModel.Signals.WHTC = Declaration.WHTCcorrFactor - CurrentState = new BusAuxState(); - PreviousState = new BusAuxState { AngularSpeed = engineIdleSpeed }; - - AdditionalAux = additionalAux; - - DataBus = container; - var tmpAux = new AdvancedAuxiliaries { - VectoInputs = { - Cycle = DetermineCycle(cycleName), - VehicleWeightKG = vehicleWeight - } - }; - - _fcMapAdapter = new FuelConsumptionAdapter() { FcMap = fcMap }; - tmpAux.VectoInputs.FuelMap = _fcMapAdapter; - tmpAux.VectoInputs.FuelDensity = FuelData.Instance().Lookup(container.FuelType).FuelDensity; - - //'Set Signals - tmpAux.Signals.EngineIdleSpeed = engineIdleSpeed; - tmpAux.Initialise(Path.GetFileName(aauxFile), Path.GetDirectoryName(Path.GetFullPath(aauxFile)) + @"\"); - - tmpAux.Signals.TotalCycleTimeSeconds = - tmpAux.actuationsMap.GetNumActuations(new ActuationsKey("CycleTime", tmpAux.VectoInputs.Cycle)); - - // call initialize again _after_ setting the cycle time to get the correct consumtions - tmpAux.Initialise(Path.GetFileName(aauxFile), Path.GetDirectoryName(Path.GetFullPath(aauxFile)) + @"\"); - - - Auxiliaries = tmpAux; - } - - private static string DetermineCycle(string cycleName) - { - var cycle = cycleName.ToLower(); - - if (cycle.Contains("bus")) { - if (cycle.Contains("heavy_urban")) { - return "Heavy urban"; - } - if (cycle.Contains("suburban")) { - return "Suburban"; - } - if (cycle.Contains("interurban")) { - return "Interurban"; - } - if (cycle.Contains("urban")) { - return "Urban"; - } - } - if (cycle.Contains("coach")) { - return "Coach"; - } - Logger<BusAuxiliariesAdapter>() - .Warn("UnServiced Cycle Name '{0}' in Pneumatics Actuations Map 0 Actuations returned", cycleName); - return cycleName; - } - - public IAuxPort Port() - { - return this; - } - - public NewtonMeter Initialize(NewtonMeter torque, PerSecond angularSpeed) - { - //PreviousState.TotalFuelConsumption = 0.SI<Kilogram>(); - PreviousState.AngularSpeed = angularSpeed; - CurrentState.AngularSpeed = angularSpeed; - if (AdditionalAux != null) { - AdditionalAux.Initialize(torque, angularSpeed); - } - PreviousState.PowerDemand = GetBusAuxPowerDemand(0.SI<Second>(), 1.SI<Second>(), torque, torque, angularSpeed); - return PreviousState.PowerDemand / angularSpeed; - } - - - public NewtonMeter TorqueDemand(Second absTime, Second dt, NewtonMeter torquePowerTrain, NewtonMeter torqueEngine, - PerSecond angularSpeed, bool dryRun = false) - { - CurrentState.AngularSpeed = angularSpeed; - CurrentState.dt = dt; - CurrentState.PowerDemand = GetBusAuxPowerDemand(absTime, dt, torquePowerTrain, torqueEngine, angularSpeed, dryRun); - - var avgAngularSpeed = (CurrentState.AngularSpeed + PreviousState.AngularSpeed) / 2.0; - return CurrentState.PowerDemand / avgAngularSpeed; - } - - - protected internal void DoWriteModalResults(IModalDataContainer container) - { - _fcMapAdapter.AllowExtrapolation = true; - // cycleStep has to be called here and not in DoCommit, write is called before Commit! - var message = String.Empty; - Auxiliaries.CycleStep(CurrentState.dt, ref message); - Log.Warn(message); - - CurrentState.TotalFuelConsumption = Auxiliaries.TotalFuelGRAMS; - container[ModalResultField.P_aux] = CurrentState.PowerDemand; - - container[ModalResultField.AA_NonSmartAlternatorsEfficiency] = Auxiliaries.AA_NonSmartAlternatorsEfficiency; - if (Auxiliaries.AA_SmartIdleCurrent_Amps != null) { - container[ModalResultField.AA_SmartIdleCurrent_Amps] = Auxiliaries.AA_SmartIdleCurrent_Amps; - } - container[ModalResultField.AA_SmartIdleAlternatorsEfficiency] = Auxiliaries.AA_SmartIdleAlternatorsEfficiency; - if (Auxiliaries.AA_SmartTractionCurrent_Amps != null) { - container[ModalResultField.AA_SmartTractionCurrent_Amps] = - Auxiliaries.AA_SmartTractionCurrent_Amps; - } - container[ModalResultField.AA_SmartTractionAlternatorEfficiency] = Auxiliaries.AA_SmartTractionAlternatorEfficiency; - if (Auxiliaries.AA_SmartOverrunCurrent_Amps != null) { - container[ModalResultField.AA_SmartOverrunCurrent_Amps] = Auxiliaries.AA_SmartOverrunCurrent_Amps; - } - container[ModalResultField.AA_SmartOverrunAlternatorEfficiency] = Auxiliaries.AA_SmartOverrunAlternatorEfficiency; - if (Auxiliaries.AA_CompressorFlowRate_LitrePerSec != null) { - container[ModalResultField.AA_CompressorFlowRate_LitrePerSec] = - Auxiliaries.AA_CompressorFlowRate_LitrePerSec; - } - container[ModalResultField.AA_OverrunFlag] = Auxiliaries.AA_OverrunFlag; - container[ModalResultField.AA_EngineIdleFlag] = Auxiliaries.AA_EngineIdleFlag; - container[ModalResultField.AA_CompressorFlag] = Auxiliaries.AA_CompressorFlag; - if (Auxiliaries.AA_TotalCycleFC_Grams != null) { - container[ModalResultField.AA_TotalCycleFC_Grams] = Auxiliaries.AA_TotalCycleFC_Grams; - } - if (Auxiliaries.AA_TotalCycleFC_Litres != null) { - container[ModalResultField.AA_TotalCycleFC_Litres] = Auxiliaries.AA_TotalCycleFC_Litres; - } - if (Auxiliaries.AA_AveragePowerDemandCrankHVACMechanicals != null) { - container[ModalResultField.AA_AveragePowerDemandCrankHVACMechanicals] = - Auxiliaries.AA_AveragePowerDemandCrankHVACMechanicals; - } - if (Auxiliaries.AA_AveragePowerDemandCrankHVACElectricals != null) { - container[ModalResultField.AA_AveragePowerDemandCrankHVACElectricals] = - Auxiliaries.AA_AveragePowerDemandCrankHVACElectricals; - } - if (Auxiliaries.AA_AveragePowerDemandCrankElectrics != null) { - container[ModalResultField.AA_AveragePowerDemandCrankElectrics] = - Auxiliaries.AA_AveragePowerDemandCrankElectrics; - } - if (Auxiliaries.AA_AveragePowerDemandCrankPneumatics != null) { - container[ModalResultField.AA_AveragePowerDemandCrankPneumatics] = - Auxiliaries.AA_AveragePowerDemandCrankPneumatics; - } - if (Auxiliaries.AA_TotalCycleFuelConsumptionCompressorOff != null) { - container[ModalResultField.AA_TotalCycleFuelConsumptionCompressorOff] = - Auxiliaries.AA_TotalCycleFuelConsumptionCompressorOff; - } - container[ModalResultField.AA_TotalCycleFuelConsumptionCompressorOn] = - Auxiliaries.AA_TotalCycleFuelConsumptionCompressorOn; - } - - protected internal void DoCommitSimulationStep() - { - PreviousState = CurrentState; - CurrentState = new BusAuxState(); - } - - protected internal KilogramPerSecond AAuxFuelConsumption - { - get { return (CurrentState.TotalFuelConsumption - PreviousState.TotalFuelConsumption) / CurrentState.dt; } - } - - private Watt GetBusAuxPowerDemand(Second absTime, Second dt, NewtonMeter torquePowerTrain, NewtonMeter torqueEngine, - PerSecond angularSpeed, bool dryRun = false) - { - _fcMapAdapter.AllowExtrapolation = true; - - Auxiliaries.Signals.ClutchEngaged = DataBus.ClutchClosed(absTime); - Auxiliaries.Signals.EngineDrivelinePower = torquePowerTrain * angularSpeed; - Auxiliaries.Signals.EngineDrivelineTorque = torquePowerTrain; - Auxiliaries.Signals.InternalEnginePower = torqueEngine * angularSpeed - DataBus.BrakePower; - if (DataBus.DriverBehavior == DrivingBehavior.Coasting) { - // make sure smart aux are _not_ enabled for now - // set internal_engine_power a little bit lower so there is no excessive power for smart aux - Auxiliaries.Signals.InternalEnginePower = 0.9 * torqueEngine * angularSpeed /*- DataBus.BrakePower*/; - // if smart aux should be on during coasting use the following line - // set internal_engine_power to a large value (*10) so that there's excessive power for smart aux (alreadin during search operating point) - //(float)DataBus.EngineDragPower(angularSpeed).Value() / 100; - } else { - if (DataBus.DriverBehavior != DrivingBehavior.Braking) { - Auxiliaries.Signals.InternalEnginePower = 0.SI<Watt>(); - //(float)((0.9 * torqueEngine * angularSpeed - DataBus.BrakePower) / 1000).Value(); - } else { - // smart aux should be on during braking - } - } - Auxiliaries.Signals.EngineMotoringPower = -DataBus.EngineDragPower(angularSpeed); - Auxiliaries.Signals.EngineSpeed = angularSpeed; - var avgAngularSpeed = (PreviousState.AngularSpeed + CurrentState.AngularSpeed) / 2; - Auxiliaries.Signals.PreExistingAuxPower = AdditionalAux != null - ? AdditionalAux.TorqueDemand(absTime, dt, torquePowerTrain, torqueEngine, angularSpeed, dryRun) * avgAngularSpeed - : 0.SI<Watt>(); - //mAAUX_Global.PreExistingAuxPower; - Auxiliaries.Signals.Idle = DataBus.VehicleStopped; - Auxiliaries.Signals.InNeutral = DataBus.Gear == 0; - Auxiliaries.Signals.RunningCalc = true; - - //mAAUX_Global.Internal_Engine_Power; - //'Power coming out of Advanced Model is in Watts. - - return Auxiliaries.AuxiliaryPowerAtCrankWatts + Auxiliaries.Signals.PreExistingAuxPower; - } - - protected class FuelConsumptionAdapter : IFuelConsumptionMap - { - protected internal FuelConsumptionMap FcMap; - - public bool AllowExtrapolation { get; set; } - - public KilogramPerSecond GetFuelConsumption(NewtonMeter torque, PerSecond angularVelocity) - { - return FcMap.GetFuelConsumption(torque, angularVelocity, AllowExtrapolation).Value; - } - } - - public class BusAuxState - { - public Second dt; - public PerSecond AngularSpeed; - public Watt PowerDemand; - public Kilogram TotalFuelConsumption = 0.SI<Kilogram>(); - } - } +using System; +using System.IO; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.Simulation.DataBus; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; +using TUGraz.VectoCore.OutputData; +using VectoAuxiliaries; +using VectoAuxiliaries.Pneumatics; + +namespace TUGraz.VectoCore.Models.SimulationComponent.Impl +{ + public class BusAuxiliariesAdapter : LoggingObject, IAuxInProvider, IAuxPort + { + protected readonly IDataBus DataBus; + protected internal BusAuxState CurrentState; + protected internal BusAuxState PreviousState; + + protected internal readonly IAuxPort AdditionalAux; + + protected IAdvancedAuxiliaries Auxiliaries; + private readonly FuelConsumptionAdapter _fcMapAdapter; + + public BusAuxiliariesAdapter(IDataBus container, string aauxFile, string cycleName, Kilogram vehicleWeight, + FuelConsumptionMap fcMap, PerSecond engineIdleSpeed, IAuxPort additionalAux = null) + { + // mAAUX_Global.advancedAuxModel.Signals.DeclarationMode = Cfg.DeclMode + // mAAUX_Global.advancedAuxModel.Signals.WHTC = Declaration.WHTCcorrFactor + CurrentState = new BusAuxState(); + PreviousState = new BusAuxState { AngularSpeed = engineIdleSpeed }; + + AdditionalAux = additionalAux; + + DataBus = container; + var tmpAux = new AdvancedAuxiliaries { + VectoInputs = { + Cycle = DetermineCycle(cycleName), + VehicleWeightKG = vehicleWeight + } + }; + + _fcMapAdapter = new FuelConsumptionAdapter() { FcMap = fcMap }; + tmpAux.VectoInputs.FuelMap = _fcMapAdapter; + tmpAux.VectoInputs.FuelDensity = FuelData.Instance().Lookup(container.FuelType).FuelDensity; + + //'Set Signals + tmpAux.Signals.EngineIdleSpeed = engineIdleSpeed; + tmpAux.Initialise(Path.GetFileName(aauxFile), Path.GetDirectoryName(Path.GetFullPath(aauxFile)) + @"\"); + + tmpAux.Signals.TotalCycleTimeSeconds = + tmpAux.actuationsMap.GetNumActuations(new ActuationsKey("CycleTime", tmpAux.VectoInputs.Cycle)); + + // call initialize again _after_ setting the cycle time to get the correct consumtions + tmpAux.Initialise(Path.GetFileName(aauxFile), Path.GetDirectoryName(Path.GetFullPath(aauxFile)) + @"\"); + + + Auxiliaries = tmpAux; + } + + private static string DetermineCycle(string cycleName) + { + var cycle = cycleName.ToLower(); + + if (cycle.Contains("bus")) { + if (cycle.Contains("heavy_urban")) { + return "Heavy urban"; + } + if (cycle.Contains("suburban")) { + return "Suburban"; + } + if (cycle.Contains("interurban")) { + return "Interurban"; + } + if (cycle.Contains("urban")) { + return "Urban"; + } + } + if (cycle.Contains("coach")) { + return "Coach"; + } + Logger<BusAuxiliariesAdapter>() + .Warn("UnServiced Cycle Name '{0}' in Pneumatics Actuations Map 0 Actuations returned", cycleName); + return cycleName; + } + + public IAuxPort Port() + { + return this; + } + + public NewtonMeter Initialize(NewtonMeter torque, PerSecond angularSpeed) + { + //PreviousState.TotalFuelConsumption = 0.SI<Kilogram>(); + PreviousState.AngularSpeed = angularSpeed; + CurrentState.AngularSpeed = angularSpeed; + if (AdditionalAux != null) { + AdditionalAux.Initialize(torque, angularSpeed); + } + PreviousState.PowerDemand = GetBusAuxPowerDemand(0.SI<Second>(), 1.SI<Second>(), torque, torque, angularSpeed); + return PreviousState.PowerDemand / angularSpeed; + } + + + public NewtonMeter TorqueDemand(Second absTime, Second dt, NewtonMeter torquePowerTrain, NewtonMeter torqueEngine, + PerSecond angularSpeed, bool dryRun = false) + { + CurrentState.AngularSpeed = angularSpeed; + CurrentState.dt = dt; + CurrentState.PowerDemand = GetBusAuxPowerDemand(absTime, dt, torquePowerTrain, torqueEngine, angularSpeed, dryRun); + + var avgAngularSpeed = (CurrentState.AngularSpeed + PreviousState.AngularSpeed) / 2.0; + return CurrentState.PowerDemand / avgAngularSpeed; + } + + + protected internal void DoWriteModalResults(IModalDataContainer container) + { + _fcMapAdapter.AllowExtrapolation = true; + // cycleStep has to be called here and not in DoCommit, write is called before Commit! + var message = String.Empty; + Auxiliaries.CycleStep(CurrentState.dt, ref message); + Log.Warn(message); + + CurrentState.TotalFuelConsumption = Auxiliaries.TotalFuelGRAMS; + container[ModalResultField.P_aux] = CurrentState.PowerDemand; + + container[ModalResultField.AA_NonSmartAlternatorsEfficiency] = Auxiliaries.AA_NonSmartAlternatorsEfficiency; + if (Auxiliaries.AA_SmartIdleCurrent_Amps != null) { + container[ModalResultField.AA_SmartIdleCurrent_Amps] = Auxiliaries.AA_SmartIdleCurrent_Amps; + } + container[ModalResultField.AA_SmartIdleAlternatorsEfficiency] = Auxiliaries.AA_SmartIdleAlternatorsEfficiency; + if (Auxiliaries.AA_SmartTractionCurrent_Amps != null) { + container[ModalResultField.AA_SmartTractionCurrent_Amps] = + Auxiliaries.AA_SmartTractionCurrent_Amps; + } + container[ModalResultField.AA_SmartTractionAlternatorEfficiency] = Auxiliaries.AA_SmartTractionAlternatorEfficiency; + if (Auxiliaries.AA_SmartOverrunCurrent_Amps != null) { + container[ModalResultField.AA_SmartOverrunCurrent_Amps] = Auxiliaries.AA_SmartOverrunCurrent_Amps; + } + container[ModalResultField.AA_SmartOverrunAlternatorEfficiency] = Auxiliaries.AA_SmartOverrunAlternatorEfficiency; + if (Auxiliaries.AA_CompressorFlowRate_LitrePerSec != null) { + container[ModalResultField.AA_CompressorFlowRate_LitrePerSec] = + Auxiliaries.AA_CompressorFlowRate_LitrePerSec; + } + container[ModalResultField.AA_OverrunFlag] = Auxiliaries.AA_OverrunFlag; + container[ModalResultField.AA_EngineIdleFlag] = Auxiliaries.AA_EngineIdleFlag; + container[ModalResultField.AA_CompressorFlag] = Auxiliaries.AA_CompressorFlag; + if (Auxiliaries.AA_TotalCycleFC_Grams != null) { + container[ModalResultField.AA_TotalCycleFC_Grams] = Auxiliaries.AA_TotalCycleFC_Grams; + } + if (Auxiliaries.AA_TotalCycleFC_Litres != null) { + container[ModalResultField.AA_TotalCycleFC_Litres] = Auxiliaries.AA_TotalCycleFC_Litres; + } + if (Auxiliaries.AA_AveragePowerDemandCrankHVACMechanicals != null) { + container[ModalResultField.AA_AveragePowerDemandCrankHVACMechanicals] = + Auxiliaries.AA_AveragePowerDemandCrankHVACMechanicals; + } + if (Auxiliaries.AA_AveragePowerDemandCrankHVACElectricals != null) { + container[ModalResultField.AA_AveragePowerDemandCrankHVACElectricals] = + Auxiliaries.AA_AveragePowerDemandCrankHVACElectricals; + } + if (Auxiliaries.AA_AveragePowerDemandCrankElectrics != null) { + container[ModalResultField.AA_AveragePowerDemandCrankElectrics] = + Auxiliaries.AA_AveragePowerDemandCrankElectrics; + } + if (Auxiliaries.AA_AveragePowerDemandCrankPneumatics != null) { + container[ModalResultField.AA_AveragePowerDemandCrankPneumatics] = + Auxiliaries.AA_AveragePowerDemandCrankPneumatics; + } + if (Auxiliaries.AA_TotalCycleFuelConsumptionCompressorOff != null) { + container[ModalResultField.AA_TotalCycleFuelConsumptionCompressorOff] = + Auxiliaries.AA_TotalCycleFuelConsumptionCompressorOff; + } + container[ModalResultField.AA_TotalCycleFuelConsumptionCompressorOn] = + Auxiliaries.AA_TotalCycleFuelConsumptionCompressorOn; + } + + protected internal void DoCommitSimulationStep() + { + PreviousState = CurrentState; + CurrentState = new BusAuxState(); + } + + protected internal KilogramPerSecond AAuxFuelConsumption + { + get { return (CurrentState.TotalFuelConsumption - PreviousState.TotalFuelConsumption) / CurrentState.dt; } + } + + private Watt GetBusAuxPowerDemand(Second absTime, Second dt, NewtonMeter torquePowerTrain, NewtonMeter torqueEngine, + PerSecond angularSpeed, bool dryRun = false) + { + _fcMapAdapter.AllowExtrapolation = true; + + Auxiliaries.Signals.ClutchEngaged = DataBus.ClutchClosed(absTime); + Auxiliaries.Signals.EngineDrivelinePower = torquePowerTrain * angularSpeed; + Auxiliaries.Signals.EngineDrivelineTorque = torquePowerTrain; + Auxiliaries.Signals.InternalEnginePower = torqueEngine * angularSpeed - DataBus.BrakePower; + if (DataBus.DriverBehavior == DrivingBehavior.Coasting) { + // make sure smart aux are _not_ enabled for now + // set internal_engine_power a little bit lower so there is no excessive power for smart aux + Auxiliaries.Signals.InternalEnginePower = 0.9 * torqueEngine * angularSpeed /*- DataBus.BrakePower*/; + // if smart aux should be on during coasting use the following line + // set internal_engine_power to a large value (*10) so that there's excessive power for smart aux (alreadin during search operating point) + //(float)DataBus.EngineDragPower(angularSpeed).Value() / 100; + } else { + if (DataBus.DriverBehavior != DrivingBehavior.Braking) { + Auxiliaries.Signals.InternalEnginePower = 0.SI<Watt>(); + //(float)((0.9 * torqueEngine * angularSpeed - DataBus.BrakePower) / 1000).Value(); + } else { + // smart aux should be on during braking + } + } + Auxiliaries.Signals.EngineMotoringPower = -DataBus.EngineDragPower(angularSpeed); + Auxiliaries.Signals.EngineSpeed = angularSpeed; + var avgAngularSpeed = (PreviousState.AngularSpeed + CurrentState.AngularSpeed) / 2; + Auxiliaries.Signals.PreExistingAuxPower = AdditionalAux != null + ? AdditionalAux.TorqueDemand(absTime, dt, torquePowerTrain, torqueEngine, angularSpeed, dryRun) * avgAngularSpeed + : 0.SI<Watt>(); + //mAAUX_Global.PreExistingAuxPower; + Auxiliaries.Signals.Idle = DataBus.VehicleStopped; + Auxiliaries.Signals.InNeutral = DataBus.Gear == 0; + Auxiliaries.Signals.RunningCalc = true; + + //mAAUX_Global.Internal_Engine_Power; + //'Power coming out of Advanced Model is in Watts. + + return Auxiliaries.AuxiliaryPowerAtCrankWatts + Auxiliaries.Signals.PreExistingAuxPower; + } + + protected class FuelConsumptionAdapter : IFuelConsumptionMap + { + protected internal FuelConsumptionMap FcMap; + + public bool AllowExtrapolation { get; set; } + + public KilogramPerSecond GetFuelConsumption(NewtonMeter torque, PerSecond angularVelocity) + { + return FcMap.GetFuelConsumption(torque, angularVelocity, AllowExtrapolation).Value; + } + } + + public class BusAuxState + { + public Second dt; + public PerSecond AngularSpeed; + public Watt PowerDemand; + public Kilogram TotalFuelConsumption = 0.SI<Kilogram>(); + } + } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Clutch.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Clutch.cs index 225a758ce3ddf313ad3da34cf3632a997277c38c..32fe6889d770c64d4e10844e078e0e2f3590451f 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Clutch.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Clutch.cs @@ -114,7 +114,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl NewtonMeter torqueIn; PerSecond angularVelocityIn; - var slippingClutchWhenDriving = (DataBus.Gear == 1 && DataBus.DriverBehavior != DrivingBehavior.Braking); + var slippingClutchWhenDriving = (DataBus.Gear <= 2 && DataBus.DriverBehavior != DrivingBehavior.Braking); var slippingClutchDuringBraking = DataBus.Gear == 1 && DataBus.DriverBehavior == DrivingBehavior.Braking && outTorque > 0; //var slippingClutchWhenDriving = (DataBus.Gear == 1 && outTorque > 0); AddClutchLoss(outTorque, outAngularVelocity, diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs index 032a25d0a6a5a49ef4d60bcead23aa470a5f13d4..5881f2ae2f25a93d436d659f71b1a1ad4f894a2f 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs @@ -366,7 +366,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl var avgEngineSpeed = GetEngineSpeed(CurrentState.EngineSpeed); if (avgEngineSpeed.IsSmaller(EngineIdleSpeed, DataBus.ExecutionMode == ExecutionMode.Engineering ? 20.RPMtoRad() : 1e-3.RPMtoRad())) { - Log.Warn("EngineSpeed below idling speed! n_eng_avg: {0}, n_idle: {1}", avgEngineSpeed, EngineIdleSpeed); + Log.Warn("EngineSpeed below idling speed! n_eng_avg: {0}, n_idle: {1}", avgEngineSpeed.AsRPM, EngineIdleSpeed.AsRPM); } container[ModalResultField.P_eng_fcmap] = CurrentState.EngineTorque * avgEngineSpeed; container[ModalResultField.P_eng_out] = container[ModalResultField.P_eng_out] is DBNull diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DrivingCycleEnumerator.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DrivingCycleEnumerator.cs index 74f8018540815a815ac74c57e3c99ac3f0f56e83..559b4896d854ed9039e3535bb8868dc672459886 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DrivingCycleEnumerator.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DrivingCycleEnumerator.cs @@ -30,16 +30,16 @@ */ using System; -using System.Collections.Generic; -using TUGraz.VectoCore.Models.SimulationComponent.Data; - -namespace TUGraz.VectoCore.Models.SimulationComponent.Impl -{ - public sealed class DrivingCycleEnumerator : IEnumerator<DrivingCycleData.DrivingCycleEntry> - { - private int _currentCycleIndex; - private readonly IDrivingCycleData _data; - +using System.Collections.Generic; +using TUGraz.VectoCore.Models.SimulationComponent.Data; + +namespace TUGraz.VectoCore.Models.SimulationComponent.Impl +{ + public sealed class DrivingCycleEnumerator : IEnumerator<DrivingCycleData.DrivingCycleEntry> + { + private int _currentCycleIndex; + private readonly IDrivingCycleData _data; + public DrivingCycleEnumerator(IDrivingCycleData data) { _currentCycleIndex = 0; @@ -52,59 +52,59 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl var retVal = new DrivingCycleEnumerator(_data); retVal._currentCycleIndex = Math.Max(0, _currentCycleIndex - 1); return retVal; - } - - public DrivingCycleEnumerator Clone() - { - return new DrivingCycleEnumerator(_data) { - _currentCycleIndex = _currentCycleIndex, - LastEntry = LastEntry - }; - } - - public DrivingCycleData.DrivingCycleEntry Current - { - get { return LeftSample; } - } - - public DrivingCycleData.DrivingCycleEntry LeftSample - { - get { return _data.Entries[_currentCycleIndex]; } - } - - public DrivingCycleData.DrivingCycleEntry RightSample - { - get { return _currentCycleIndex + 1 >= _data.Entries.Count ? null : _data.Entries[_currentCycleIndex + 1]; } - } - - public bool LastEntry { get; private set; } - - object System.Collections.IEnumerator.Current - { - get { return LeftSample; } - } - - public bool MoveNext() - { - // cycleIndex has to be max. next to last (so that rightSample is still valid. - if (_currentCycleIndex >= _data.Entries.Count - 2) { - LastEntry = true; - return false; - } - _currentCycleIndex++; - if (_currentCycleIndex == _data.Entries.Count - 2) { - LastEntry = true; - } - - return true; - } - - public void Reset() - { - _currentCycleIndex = 0; - LastEntry = false; - } - - public void Dispose() {} - } + } + + public DrivingCycleEnumerator Clone() + { + return new DrivingCycleEnumerator(_data) { + _currentCycleIndex = _currentCycleIndex, + LastEntry = LastEntry + }; + } + + public DrivingCycleData.DrivingCycleEntry Current + { + get { return LeftSample; } + } + + public DrivingCycleData.DrivingCycleEntry LeftSample + { + get { return _data.Entries[_currentCycleIndex]; } + } + + public DrivingCycleData.DrivingCycleEntry RightSample + { + get { return _currentCycleIndex + 1 >= _data.Entries.Count ? null : _data.Entries[_currentCycleIndex + 1]; } + } + + public bool LastEntry { get; private set; } + + object System.Collections.IEnumerator.Current + { + get { return LeftSample; } + } + + public bool MoveNext() + { + // cycleIndex has to be max. next to last (so that rightSample is still valid. + if (_currentCycleIndex >= _data.Entries.Count - 2) { + LastEntry = true; + return false; + } + _currentCycleIndex++; + if (_currentCycleIndex == _data.Entries.Count - 2) { + LastEntry = true; + } + + return true; + } + + public void Reset() + { + _currentCycleIndex = 0; + LastEntry = false; + } + + public void Dispose() {} + } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs index 477ec7b5cd4435dd4b1c2ff7529fa63a0841928b..31e770803a5dc23b8a37bbfa53829e9fa43ac78e 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs @@ -218,6 +218,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl var avgOutAngularVelocity = (PreviousState.OutAngularVelocity + outAngularVelocity) / 2.0; var inTorqueLossResult = ModelData.Gears[gear].LossMap.GetTorqueLoss(avgOutAngularVelocity, outTorque); + if (avgOutAngularVelocity.IsEqual(0, 1e-9)) { + inTorqueLossResult.Value = 0.SI<NewtonMeter>(); + } var inTorque = outTorque / ModelData.Gears[gear].Ratio + inTorqueLossResult.Value; var inAngularVelocity = outAngularVelocity * ModelData.Gears[gear].Ratio; @@ -411,12 +414,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl if (CurrentState.TorqueLossResult != null && CurrentState.TorqueLossResult.Extrapolated) { Log.Warn( "Gear {0} LossMap data was extrapolated: range for loss map is not sufficient: n:{1}, torque:{2}, ratio:{3}", - Gear, CurrentState.OutAngularVelocity.ConvertToRoundsPerMinute(), CurrentState.OutTorque, + Gear, CurrentState.OutAngularVelocity.ConvertToRoundsPerMinute(), CurrentState.OutTorque, ModelData.Gears[Gear].Ratio); if (DataBus.ExecutionMode == ExecutionMode.Declaration) { throw new VectoException( "Gear {0} LossMap data was extrapolated in Declaration Mode: range for loss map is not sufficient: n:{1}, torque:{2}, ratio:{3}", - Gear, CurrentState.InAngularVelocity.ConvertToRoundsPerMinute(), CurrentState.InTorque, + Gear, CurrentState.InAngularVelocity.ConvertToRoundsPerMinute(), CurrentState.InTorque, ModelData.Gears[Gear].Ratio); } } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Retarder.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Retarder.cs index db4b5668e5478d6889776eb61a197a7815c8e55b..f72c63bad8e106e335a86a1b976f78af19211840 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Retarder.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Retarder.cs @@ -49,6 +49,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { private readonly RetarderLossMap _lossMap; private readonly double _ratio; + private bool _primaryRetarder; /// <summary> /// Creates a new Retarder. @@ -60,6 +61,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { _lossMap = lossMap; _ratio = ratio; + _primaryRetarder = container.RunData != null && container.RunData.Retarder.Type == RetarderType.TransmissionInputRetarder; } public IResponse Initialize(NewtonMeter torque, PerSecond angularVelocity) @@ -71,11 +73,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl public IResponse Request(Second absTime, Second dt, NewtonMeter torque, PerSecond angularVelocity, bool dryRun = false) { - if (angularVelocity == null) { - return NextComponent.Request(absTime, dt, torque, null, dryRun); + if (angularVelocity == null || (_primaryRetarder && !DataBus.ClutchClosed(absTime))) { + return NextComponent.Request(absTime, dt, torque, angularVelocity, dryRun); } var avgAngularSpeed = (PreviousState.InAngularVelocity + angularVelocity) / 2.0; - var retarderTorqueLoss = _lossMap.GetTorqueLoss(avgAngularSpeed * _ratio) * _ratio; + var retarderTorqueLoss = avgAngularSpeed.IsEqual(0, 1e-9) ? 0.SI<NewtonMeter>() : _lossMap.GetTorqueLoss(avgAngularSpeed * _ratio) * _ratio; CurrentState.SetState(torque + retarderTorqueLoss, angularVelocity, torque, angularVelocity); return NextComponent.Request(absTime, dt, CurrentState.InTorque, CurrentState.InAngularVelocity, dryRun); } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/TransmissionComponent.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/TransmissionComponent.cs index 6eaea024e817638f72b59464afd4779e72a5fa3f..4068e1ed60fbf3422aadec6e5908b14f65d5f783 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/TransmissionComponent.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/TransmissionComponent.cs @@ -80,6 +80,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl var avgOutAngularVelocity = (PreviousState.OutAngularVelocity + outAngularVelocity) / 2.0; var torqueLossResult = ModelData.LossMap.GetTorqueLoss(avgOutAngularVelocity, outTorque); + if (avgOutAngularVelocity.IsEqual(0, 1e-9)) { + torqueLossResult.Value = 0.SI<NewtonMeter>(); + } var inTorque = outTorque / ModelData.Ratio + torqueLossResult.Value; CurrentState.SetState(inTorque, inAngularVelocity, outTorque, outAngularVelocity); @@ -105,12 +108,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { if (CurrentState.TorqueLossResult.Extrapolated) { Log.Warn("{2} LossMap data was extrapolated: range for loss map is not sufficient: n:{0}, torque:{1}", - CurrentState.OutAngularVelocity.ConvertToRoundsPerMinute(), CurrentState.OutTorque, GetType().Name); + CurrentState.OutAngularVelocity.ConvertToRoundsPerMinute(), CurrentState.OutTorque, GetType().Name); if (DataBus.ExecutionMode == ExecutionMode.Declaration) { throw new VectoException( "{2} LossMap data was extrapolated in Declaration Mode: range for loss map is not sufficient: n:{0}, torque:{1}", - CurrentState.OutAngularVelocity.ConvertToRoundsPerMinute(), CurrentState.OutTorque, GetType().Name); + CurrentState.OutAngularVelocity.ConvertToRoundsPerMinute(), CurrentState.OutTorque, GetType().Name); } } AdvanceState(); diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/VTPCycle.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/VTPCycle.cs index 22e133cccd8ef00da4fdba88a164c0e7850ef404..5d79e47420347d413db431a9c6a66159741159e2 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/VTPCycle.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/VTPCycle.cs @@ -36,6 +36,7 @@ using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.Models.Connector.Ports.Impl; +using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.Models.SimulationComponent.Data; @@ -48,15 +49,138 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { private uint StartGear; - public VTPCycle(VehicleContainer container, IDrivingCycleData cycle, double axleGearRatio, - VehicleData vehicleData, Dictionary<uint, double> gearRatios) : base(container, cycle) { } + public VTPCycle(VehicleContainer container, IDrivingCycleData cycle) : base(container, cycle) { } public override IResponse Initialize() { + PrepareCycleData(); + if (DataBus.ExecutionMode == ExecutionMode.Declaration) { + VerifyInputData(); + } SelectStartGear(); return base.Initialize(); } + protected internal void PrepareCycleData() + { + foreach (var entry in Data.Entries) { + var wheelSpeed = (entry.WheelSpeedLeft + entry.WheelSpeedRight) / 2; + var wheelPower = entry.TorqueWheelLeft * entry.WheelSpeedLeft + entry.TorqueWheelRight * entry.WheelSpeedRight; + entry.PWheel = wheelPower; + entry.WheelAngularVelocity = wheelSpeed; + entry.Torque = wheelSpeed.IsEqual(0, 1e-3) ? 0.SI<NewtonMeter>() : wheelPower / wheelSpeed; + } + } + + protected internal void VerifyInputData() + { + var electricFanTechs = DeclarationData.Fan.FullyElectricTechnologies(); + var hasElectricFan = RunData.Aux.Any( + x => x.ID == Constants.Auxiliaries.IDs.Fan && x.Technology.Any(t => electricFanTechs.Contains(t))); + + foreach (var tuple in Data.Entries.Pairwise()) { + if (!(tuple.Item2.Time - tuple.Item1.Time).IsEqual( + DeclarationData.VTPMode.SamplingInterval, 0.1 * DeclarationData.VTPMode.SamplingInterval)) { + Log.Error("Cycle Data exceeds expected sampling frequence of {0}: t: {1}, dt: {2}", + DeclarationData.VTPMode.SamplingInterval, tuple.Item1.Time, tuple.Item2.Time - tuple.Item1.Time); + } + } + + foreach (var entry in Data.Entries) { + VerifyWheelSpeeds(entry); + + VerifyWheelTorque(entry); + + VerifyFanSpeed(hasElectricFan, entry); + } + + VerifyFCInput(); + } + + private void VerifyFCInput() + { + var idx = 0L; + var count = Convert.ToInt32(DeclarationData.VTPMode.FCAccumulationWindow / DeclarationData.VTPMode.SamplingInterval); + var sumFC= 0.SI<Kilogram>(); + var sumEWheel = 0.SI<WattSecond>(); + + var window = new {FC = 0.SI<Kilogram>(), EWheel = 0.SI<WattSecond>()}.Repeat(count).ToArray(); + + foreach (var entry in Data.Entries.Pairwise()) { + var dt = entry.Item2.Time - entry.Item1.Time; + var fc = entry.Item1.Fuelconsumption * dt; + var eWheel = entry.Item1.PWheel > 0 ? entry.Item1.PWheel * dt : 0.SI<WattSecond>(); + window[idx % count] = new {FC= fc, EWheel = eWheel}; + sumFC += window[idx % count].FC; + sumFC -= window[(idx + 1) % count].FC; + sumEWheel += window[idx % count].EWheel; + sumEWheel -= window[(idx + 1) % count].EWheel; + idx++; + + if (sumEWheel.IsSmaller(DeclarationData.VTPMode.MinPosWorkAtWheelsForFC)) { + continue; + } + if (sumFC / sumEWheel < DeclarationData.VTPMode.LowerFCThreshold ) { + Log.Error("Fuel consumption for the previous {0} [min] below threshold of {1} [g/kWh]. t: {2} [s], FC: {3} [g/kWh]", DeclarationData.VTPMode.FCAccumulationWindow.ConvertToMinutes(), + DeclarationData.VTPMode.LowerFCThreshold.ConvertToGramPerKiloWattHour(), entry.Item1.Time, (sumFC / sumEWheel).ConvertToGramPerKiloWattHour()); + } + if (sumFC / sumEWheel > DeclarationData.VTPMode.UpperFCThreshold) { + Log.Error("Fuel consumption for the previous {0} [min] above threshold of {1} [g/kWh]. t: {2} [s], FC: {3} [g/kWh]", DeclarationData.VTPMode.FCAccumulationWindow.ConvertToMinutes(), + DeclarationData.VTPMode.UpperFCThreshold.ConvertToGramPerKiloWattHour(), entry.Item1.Time, (sumFC / sumEWheel).ConvertToGramPerKiloWattHour()); + } + } + } + + private void VerifyFanSpeed(bool hasElectricFan, DrivingCycleData.DrivingCycleEntry entry) + { + if (hasElectricFan) { + if (entry.FanSpeed.IsSmaller(0)) { + Log.Error("Fan speed (electric) below zero! t: {0}, n_fan: {1}", entry.Time, entry.FanSpeed); + } + } else { + if (entry.FanSpeed.IsSmaller(DeclarationData.VTPMode.MinFanSpeed) || + entry.FanSpeed.IsGreater(DeclarationData.VTPMode.MaxFanSpeed)) { + Log.Error( + "Fan speed (non-electric) exceeds range {0} < n_fan < {1}. t: {2}, n_fan: {3}", DeclarationData.VTPMode.MinFanSpeed, + DeclarationData.VTPMode.MaxFanSpeed, entry.Time, entry.FanSpeed); + } + } + } + + private void VerifyWheelTorque(DrivingCycleData.DrivingCycleEntry entry) + { + var torqueRatio = VectoMath.Max( + entry.TorqueWheelLeft / entry.TorqueWheelRight, entry.TorqueWheelRight / entry.TorqueWheelLeft); + var torqueDiff = VectoMath.Abs(entry.TorqueWheelLeft - entry.TorqueWheelRight); + if (torqueRatio > DeclarationData.VTPMode.WheelTorqueDifferenceFactor && + torqueDiff > DeclarationData.VTPMode.MaxWheelTorqueDifference) { + Log.Error( + "Torque difference (L/R) too high! t: {0} tq_left: {1}, tq_right: {2}", entry.Time, entry.TorqueWheelLeft, + entry.TorqueWheelRight); + } + } + + private void VerifyWheelSpeeds(DrivingCycleData.DrivingCycleEntry entry) + { + if (!entry.WheelSpeedLeft.IsEqual(0.RPMtoRad(), DeclarationData.VTPMode.WheelSpeedZeroTolerance) && + !entry.WheelSpeedRight.IsEqual(0.RPMtoRad(), DeclarationData.VTPMode.WheelSpeedZeroTolerance)) { + var wheelSpeedRatio = VectoMath.Max( + entry.WheelSpeedLeft / entry.WheelSpeedRight, entry.WheelSpeedRight / entry.WheelSpeedLeft); + if (wheelSpeedRatio > DeclarationData.VTPMode.WheelSpeedDifferenceFactor) { + Log.Error( + "Wheel-speed difference rel. (L/R) too high! t: {0} n_left: {1} rpm, n_right: {2} rpm", entry.Time, + entry.WheelSpeedLeft.AsRPM, entry.WheelSpeedRight.AsRPM); + } + } else { + if (VectoMath.Abs(entry.WheelSpeedLeft - entry.WheelSpeedRight) > + DeclarationData.VTPMode.MaxWheelSpeedDifferenceStandstill) { + Log.Error( + "Wheel-speed difference abs. (L/R) too high! t: {0} n_left: {1} rpm, n_right: {2} rpm", entry.Time, + entry.WheelSpeedLeft.AsRPM, entry.WheelSpeedRight.AsRPM); + } + } + } + private void SelectStartGear() { var transmissionRatio = RunData.AxleGearData.AxleGear.Ratio * diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs index 8bacad4cfdb0347ab9afce2c4371d8bfda373ac8..7e079e472c033ab1375a2d3fb85454a2675a3b46 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs @@ -107,7 +107,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl CurrentState.Distance = PreviousState.Distance + PreviousState.Velocity * dt + acceleration * dt * dt / 2; CurrentState.DriverAcceleration = DriverAcceleration(acceleration); - CurrentState.RollingResistance = RollingResistance(gradient); + CurrentState.RollingResistance = (PreviousState.Velocity + CurrentState.Velocity).IsEqual(0, 1e-9) ? 0.SI<Newton>() : RollingResistance(gradient); try { CurrentState.AirDragResistance = AirDragResistance(PreviousState.Velocity, CurrentState.Velocity); } catch (VectoException ex) { diff --git a/VectoCore/VectoCore/OutputData/DeclarationReport.cs b/VectoCore/VectoCore/OutputData/DeclarationReport.cs index b70bbb0ffbf4cd50bd90761afc0318c64a1737fc..5226da768a02ae14c98a36c4b6535acd669ad8cc 100644 --- a/VectoCore/VectoCore/OutputData/DeclarationReport.cs +++ b/VectoCore/VectoCore/OutputData/DeclarationReport.cs @@ -71,7 +71,7 @@ namespace TUGraz.VectoCore.OutputData { public MissionType Mission; - public Dictionary<LoadingType, TEntry> ModData; + public Dictionary<LoadingType, TEntry> ResultEntry; } @@ -103,10 +103,10 @@ namespace TUGraz.VectoCore.OutputData if (!Missions.ContainsKey(mission.MissionType)) { Missions[mission.MissionType] = new ResultContainer<T>() { Mission = mission.MissionType, - ModData = new Dictionary<LoadingType, T>(), + ResultEntry = new Dictionary<LoadingType, T>(), }; } - Missions[mission.MissionType].ModData[loading] = new T(); + Missions[mission.MissionType].ResultEntry[loading] = new T(); _resultCount++; } @@ -118,12 +118,12 @@ namespace TUGraz.VectoCore.OutputData if (!Missions.ContainsKey(mission.MissionType)) { throw new VectoException("Unknown mission type {0} for generating declaration report", mission.MissionType); } - if (!Missions[mission.MissionType].ModData.ContainsKey(loadingType)) { + if (!Missions[mission.MissionType].ResultEntry.ContainsKey(loadingType)) { throw new VectoException("Unknown loading type {0} for mission {1}", loadingType, mission.MissionType); } _resultCount--; - DoAddResult(Missions[mission.MissionType].ModData[loadingType], runData, modData); + DoAddResult(Missions[mission.MissionType].ResultEntry[loadingType], runData, modData); if (_resultCount == 0) { DoWriteReport(); diff --git a/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs index e26d90445d1de3f80dbfa4d4a4b8dd5a0c737bbd..cc139e4276e3c9e44ae0a6fc2e59f4bac400937c 100644 --- a/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs +++ b/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs @@ -65,6 +65,10 @@ namespace TUGraz.VectoCore.OutputData.FileIO get { return Path.ChangeExtension(_jobFile, "RSLT_CUSTOMER.xml"); } } + public string XMLVTPReportName + { + get { return Path.ChangeExtension(_jobFile, "VTP_Report.xml"); } + } public string SumFileName { @@ -112,8 +116,11 @@ namespace TUGraz.VectoCore.OutputData.FileIO case ReportType.DeclarationReportCustomerXML: fileName = XMLCustomerReportName; break; + case ReportType.DeclarationVTPReportXML: + fileName = XMLVTPReportName; + break; default: - throw new ArgumentOutOfRangeException("type"); + throw new ArgumentOutOfRangeException("ReportType"); } using (var writer = new FileStream(fileName, FileMode.Create)) { using (var xmlWriter = new XmlTextWriter(writer, Encoding.UTF8)) { @@ -125,6 +132,8 @@ namespace TUGraz.VectoCore.OutputData.FileIO } } + + public virtual void WriteReport(ReportType type, Stream data) { Stream stream = null; diff --git a/VectoCore/VectoCore/OutputData/IDataWriter.cs b/VectoCore/VectoCore/OutputData/IDataWriter.cs index 288ccf0be5ebe245144b4a3fc036d895552bae93..651bbd4c025c72b6a6c7490d53026384aef655fb 100644 --- a/VectoCore/VectoCore/OutputData/IDataWriter.cs +++ b/VectoCore/VectoCore/OutputData/IDataWriter.cs @@ -58,6 +58,7 @@ namespace TUGraz.VectoCore.OutputData { DeclarationReportPdf, DeclarationReportManufacturerXML, - DeclarationReportCustomerXML + DeclarationReportCustomerXML, + DeclarationVTPReportXML } } \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs index 6e235c440260496e4fe3a8fb8e70f3d7f5a0b48e..d089ff8e198a48929c4eeacf0ada344476845dfe 100644 --- a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs +++ b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs @@ -79,8 +79,8 @@ namespace TUGraz.VectoCore.OutputData public bool WriteAdvancedAux { get; set; } - public ModalDataContainer(string runName, FuelType fuel, IModalDataWriter writer, bool writeEngineOnly = false) - : this(0, runName, "", fuel, "", writer, _ => { }, writeEngineOnly) {} + public ModalDataContainer(string runName, FuelType fuel, IModalDataWriter writer, bool writeEngineOnly = false, params IModalDataFilter[] filters) + : this(0, runName, "", fuel, "", writer, _ => { }, writeEngineOnly, filters) {} public ModalDataContainer(VectoRunData runData, IModalDataWriter writer, Action<ModalDataContainer> addReportResult, bool writeEngineOnly, params IModalDataFilter[] filter) diff --git a/VectoCore/VectoCore/OutputData/VTPReport.cs b/VectoCore/VectoCore/OutputData/VTPReport.cs new file mode 100644 index 0000000000000000000000000000000000000000..ea16cc1ea438a3d6253a61c034911458d2924193 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/VTPReport.cs @@ -0,0 +1,42 @@ +/* +* This file is part of VECTO. +* +* Copyright © 2012-2017 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoHashing; + +namespace TUGraz.VectoCore.OutputData { + public interface IVTPReport : IDeclarationReport { + IVectoHash InputDataHash { set; } + + IManufacturerReport ManufacturerRecord { set; } + IVectoHash ManufacturerRecordHash { set; } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs index 068610a21838be77dbdd175c94626fbd4d1f11be..d90d1a40f1be732412a86f729d29cb210b6c1e1c 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs @@ -50,7 +50,7 @@ namespace TUGraz.VectoCore.OutputData.XML { public class XMLCustomerReport { - public const string CURRENT_SCHEMA_VERSION = "0.4"; + public const string CURRENT_SCHEMA_VERSION = "0.5"; protected readonly XElement VehiclePart; @@ -80,11 +80,11 @@ namespace TUGraz.VectoCore.OutputData.XML new XElement(tns + XMLNames.Vehicle_LegislativeClass, modelData.VehicleData.LegislativeClass.ToXMLFormat()), new XElement(tns + XMLNames.Report_Vehicle_VehicleGroup, modelData.VehicleData.VehicleClass.GetClassNumber()), new XElement(tns + XMLNames.Vehicle_AxleConfiguration, modelData.VehicleData.AxleConfiguration.GetName()), - new XElement(tns + XMLNames.Vehicle_GrossVehicleMass, modelData.VehicleData.GrossVehicleWeight.ToXMLFormat(0)), - new XElement(tns + XMLNames.Vehicle_CurbMassChassis, modelData.VehicleData.CurbWeight.ToXMLFormat(0)), - new XElement(tns + XMLNames.Report_Vehicle_EngineRatedPower, modelData.EngineData.RatedPowerDeclared.ToXMLFormat(0)), - new XElement(tns + XMLNames.Report_Vehicle_EngineDisplacement, - modelData.EngineData.Displacement.ConvertToCubicCentiMeter().ToXMLFormat(0)), + new XElement(tns + XMLNames.Vehicle_GrossVehicleMass, XMLHelper.ValueAsUnit(modelData.VehicleData.GrossVehicleWeight, XMLNames.Unit_t, 1)), + + new XElement(tns + XMLNames.Vehicle_CurbMassChassis, XMLHelper.ValueAsUnit(modelData.VehicleData.CurbWeight, XMLNames.Unit_kg)), + new XElement(tns + XMLNames.Report_Vehicle_EngineRatedPower, XMLHelper.ValueAsUnit(modelData.EngineData.RatedPowerDeclared, XMLNames.Unit_kW)), + new XElement(tns + XMLNames.Report_Vehicle_EngineDisplacement, XMLHelper.ValueAsUnit(modelData.EngineData.Displacement, XMLNames.Unit_ltr, 1)), new XElement(tns + XMLNames.Engine_FuelType, modelData.EngineData.FuelType.ToXMLFormat()), new XElement(tns + XMLNames.Report_Vehicle_TransmissionCertificationMethod, modelData.GearboxData.CertificationMethod.ToXMLFormat()), @@ -111,7 +111,7 @@ namespace TUGraz.VectoCore.OutputData.XML public void AddResult( DeclarationReport<XMLDeclarationReport.ResultEntry>.ResultContainer<XMLDeclarationReport.ResultEntry> entry) { - foreach (var resultEntry in entry.ModData) { + foreach (var resultEntry in entry.ResultEntry) { allSuccess &= resultEntry.Value.Status == VectoRun.Status.Success; Results.Add(new XElement(tns + XMLNames.Report_Result_Result, new XAttribute(XMLNames.Report_Result_Status_Attr, diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs index a5876323b2763a1a77581e472f22876a043f240a..295efdb0915b69add340bfc3fd31d9d0ee02d069 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs @@ -30,6 +30,7 @@ */ using System.Collections.Generic; +using System.Data; using System.Linq; using System.Text; using System.Xml; @@ -55,6 +56,8 @@ namespace TUGraz.VectoCore.OutputData.XML { public MeterPerSecond AverageSpeed { get; private set; } + public MeterPerSecond AverageDrivingSpeed { get; private set; } + public Joule EnergyConsumptionTotal { get; private set; } public Kilogram CO2Total { get; private set; } @@ -88,9 +91,12 @@ namespace TUGraz.VectoCore.OutputData.XML public Kilogram TotalVehicleWeight { get; private set; } public CubicMeter CargoVolume { get; private set; } + public PerSecond EngineSpeedDrivingMin { get; private set; } + public PerSecond EngineSpeedDrivingAvg { get; private set; } + public PerSecond EngineSpeedDrivingMax { get; private set; } - public void SetResultData(VectoRunData runData, IModalDataContainer data) + public virtual void SetResultData(VectoRunData runData, IModalDataContainer data) { FuelType = data.FuelData.FuelType; Payload = runData.VehicleData.Loading; @@ -100,6 +106,7 @@ namespace TUGraz.VectoCore.OutputData.XML Error = data.Error; StackTrace = data.StackTrace; AverageSpeed = data.Speed(); + MinSpeed = data.MinSpeed(); MaxSpeed = data.MaxSpeed(); MaxAcceleration = data.MaxAcceleration(); @@ -107,6 +114,18 @@ namespace TUGraz.VectoCore.OutputData.XML FullLoadPercentage = data.EngineMaxLoadTimeShare(); GearshiftCount = data.GearshiftCount(); + var entriesDriving = data.GetValues( + r => new { + dt = r.Field<Second>((int)ModalResultField.simulationInterval), + v = r.Field<MeterPerSecond>((int)ModalResultField.v_act), + nEng = r.Field<PerSecond>((int)ModalResultField.n_eng_avg) + }).Where(x => x.v.IsGreater(0)).ToArray(); + var drivingTime = entriesDriving.Sum(x => x.dt); + + AverageDrivingSpeed = entriesDriving.Sum(x => x.v * x.dt) / drivingTime; + EngineSpeedDrivingAvg = (entriesDriving.Sum(x => (x.nEng * x.dt).Value()) / drivingTime.Value()).SI<PerSecond>(); + EngineSpeedDrivingMin = entriesDriving.Min(x => x.nEng); + EngineSpeedDrivingMax = entriesDriving.Max(x => x.nEng); Distance = data.Distance(); FuelConsumptionTotal = data.TimeIntegral<Kilogram>(ModalResultField.FCFinal); diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs index e51859b927dfaff71288a392165b92608d07c782..a2cd3fe47124ec45114203cffaae2b5220e51fe4 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs @@ -52,7 +52,7 @@ namespace TUGraz.VectoCore.OutputData.XML { public class XMLManufacturerReport { - public const string CURRENT_SCHEMA_VERSION = "0.4"; + public const string CURRENT_SCHEMA_VERSION = "0.5"; protected XElement VehiclePart; @@ -62,7 +62,7 @@ namespace TUGraz.VectoCore.OutputData.XML protected XNamespace tns; protected XNamespace di; - private bool allSuccess = true; + private bool _allSuccess = true; public XMLManufacturerReport() { @@ -79,8 +79,8 @@ namespace TUGraz.VectoCore.OutputData.XML new XElement(tns + XMLNames.Vehicle_LegislativeClass, modelData.VehicleData.LegislativeClass.ToXMLFormat()), new XElement(tns + XMLNames.Report_Vehicle_VehicleGroup, modelData.VehicleData.VehicleClass.GetClassNumber()), new XElement(tns + XMLNames.Vehicle_AxleConfiguration, modelData.VehicleData.AxleConfiguration.GetName()), - new XElement(tns + XMLNames.Vehicle_GrossVehicleMass, modelData.VehicleData.GrossVehicleWeight.ToXMLFormat(0)), - new XElement(tns + XMLNames.Vehicle_CurbMassChassis, modelData.VehicleData.CurbWeight.ToXMLFormat(0)), + new XElement(tns + XMLNames.Vehicle_GrossVehicleMass, XMLHelper.ValueAsUnit(modelData.VehicleData.GrossVehicleWeight, XMLNames.Unit_t, 1)), + new XElement(tns + XMLNames.Vehicle_CurbMassChassis, XMLHelper.ValueAsUnit(modelData.VehicleData.CurbWeight, XMLNames.Unit_kg)), new XElement(tns + XMLNames.Vehicle_PTO, modelData.PTO != null), GetTorqueLimits(modelData.EngineData), new XElement(tns + XMLNames.Vehicle_Components, @@ -130,11 +130,10 @@ namespace TUGraz.VectoCore.OutputData.XML { return new XElement(tns + XMLNames.Component_Engine, GetCommonDescription(engineData), - new XElement(tns + XMLNames.Engine_RatedPower, engineData.RatedPowerDeclared.ToXMLFormat(0)), - new XElement(tns + XMLNames.Engine_IdlingSpeed, engineData.IdleSpeed.AsRPM.ToXMLFormat(0)), - new XElement(tns + XMLNames.Engine_RatedSpeed, engineData.RatedSpeedDeclared.AsRPM.ToXMLFormat(0)), - new XElement(tns + XMLNames.Engine_Displacement, - engineData.Displacement.ConvertToCubicCentiMeter().ToXMLFormat(0)), + new XElement(tns + XMLNames.Engine_RatedPower, XMLHelper.ValueAsUnit(engineData.RatedPowerDeclared, XMLNames.Unit_kW)), + new XElement(tns + XMLNames.Engine_IdlingSpeed, XMLHelper.ValueAsUnit(engineData.IdleSpeed, XMLNames.Unit_RPM)), + new XElement(tns + XMLNames.Engine_RatedSpeed, XMLHelper.ValueAsUnit(engineData.RatedSpeedDeclared, XMLNames.Unit_RPM)), + new XElement(tns + XMLNames.Engine_Displacement, XMLHelper.ValueAsUnit(engineData.Displacement, XMLNames.Unit_ltr, 1)), new XElement(tns + XMLNames.Engine_FuelType, engineData.FuelType.ToXMLFormat()) ); } @@ -271,8 +270,8 @@ namespace TUGraz.VectoCore.OutputData.XML public void AddResult( DeclarationReport<XMLDeclarationReport.ResultEntry>.ResultContainer<XMLDeclarationReport.ResultEntry> entry) { - foreach (var resultEntry in entry.ModData) { - allSuccess &= resultEntry.Value.Status == VectoRun.Status.Success; + foreach (var resultEntry in entry.ResultEntry) { + _allSuccess &= resultEntry.Value.Status == VectoRun.Status.Success; Results.Add(new XElement(tns + XMLNames.Report_Result_Result, new XAttribute(XMLNames.Report_Result_Status_Attr, resultEntry.Value.Status == VectoRun.Status.Success ? "success" : "error"), @@ -303,29 +302,28 @@ namespace TUGraz.VectoCore.OutputData.XML private object[] GetSuccessResultEntry(XMLDeclarationReport.ResultEntry result) { return new object[] { - new XElement(tns + XMLNames.Report_ResultEntry_Distance, new XAttribute(XMLNames.Report_Results_Unit_Attr, "km"), + new XElement(tns + XMLNames.Report_ResultEntry_Distance, new XAttribute(XMLNames.Report_Results_Unit_Attr, XMLNames.Unit_km), result.Distance.ConvertToKiloMeter().ToXMLFormat(3)), new XElement(tns + XMLNames.Report_ResultEntry_SimulationParameters, - new XElement(tns + XMLNames.Report_ResultEntry_TotalVehicleMass, - new XAttribute(XMLNames.Report_Results_Unit_Attr, "kg"), result.TotalVehicleWeight.ToXMLFormat(0)), - new XElement(tns + XMLNames.Report_ResultEntry_Payload, new XAttribute(XMLNames.Report_Results_Unit_Attr, "kg"), - result.Payload.ToXMLFormat(0)), + new XElement(tns + XMLNames.Report_ResultEntry_TotalVehicleMass, XMLHelper.ValueAsUnit(result.TotalVehicleWeight, XMLNames.Unit_kg)), + new XElement(tns + XMLNames.Report_ResultEntry_Payload, XMLHelper.ValueAsUnit(result.Payload, XMLNames.Unit_kg)), new XElement(tns + XMLNames.Report_ResultEntry_FuelType, result.FuelType.ToXMLFormat()) ), new XElement(tns + XMLNames.Report_ResultEntry_VehiclePerformance, - new XElement(tns + XMLNames.Report_ResultEntry_AverageSpeed, - new XAttribute(XMLNames.Report_Results_Unit_Attr, "km/h"), result.AverageSpeed.AsKmph.ToXMLFormat(1)), - new XElement(tns + XMLNames.Report_ResultEntry_MinSpeed, new XAttribute(XMLNames.Report_Results_Unit_Attr, "km/h"), - result.MinSpeed.AsKmph.ToXMLFormat(1)), - new XElement(tns + XMLNames.Report_ResultEntry_MaxSpeed, new XAttribute(XMLNames.Report_Results_Unit_Attr, "km/h"), - result.MaxSpeed.AsKmph.ToXMLFormat(1)), - new XElement(tns + XMLNames.Report_ResultEntry_MaxDeceleration, - new XAttribute(XMLNames.Report_Results_Unit_Attr, "m/s²"), result.MaxDeceleration.ToXMLFormat(2)), - new XElement(tns + XMLNames.Report_ResultEntry_MaxAcceleration, - new XAttribute(XMLNames.Report_Results_Unit_Attr, "m/s²"), result.MaxAcceleration.ToXMLFormat(2)), + new XElement(tns + XMLNames.Report_ResultEntry_AverageSpeed, XMLHelper.ValueAsUnit(result.AverageSpeed, XMLNames.Unit_kmph, 1)), + new XElement(tns + XMLNames.Report_ResultEntry_AvgDrivingSpeed, XMLHelper.ValueAsUnit(result.AverageDrivingSpeed, XMLNames.Unit_kmph, 1)), + new XElement(tns + XMLNames.Report_ResultEntry_MinSpeed, XMLHelper.ValueAsUnit(result.MinSpeed, XMLNames.Unit_kmph, 1)), + new XElement(tns + XMLNames.Report_ResultEntry_MaxSpeed, XMLHelper.ValueAsUnit(result.MaxSpeed, XMLNames.Unit_kmph, 1)), + new XElement(tns + XMLNames.Report_ResultEntry_MaxDeceleration, XMLHelper.ValueAsUnit(result.MaxDeceleration, XMLNames.Unit_mps2, 2)), + new XElement(tns + XMLNames.Report_ResultEntry_MaxAcceleration, XMLHelper.ValueAsUnit(result.MaxAcceleration, XMLNames.Unit_mps2, 2)), new XElement(tns + XMLNames.Report_ResultEntry_FullLoadDrivingtimePercentage, result.FullLoadPercentage.ToXMLFormat(2)), - new XElement(tns + XMLNames.Report_ResultEntry_GearshiftCount, result.GearshiftCount.ToXMLFormat(0)) + new XElement(tns + XMLNames.Report_ResultEntry_GearshiftCount, result.GearshiftCount.ToXMLFormat(0)), + new XElement(tns + XMLNames.Report_ResultEntry_EngineSpeedDriving, + new XElement(tns + XMLNames.Report_ResultEntry_EngineSpeedDriving_Min, XMLHelper.ValueAsUnit(result.EngineSpeedDrivingMin, XMLNames.Unit_RPM, 1)), + new XElement(tns + XMLNames.Report_ResultEntry_EngineSpeedDriving_Avg, XMLHelper.ValueAsUnit(result.EngineSpeedDrivingAvg, XMLNames.Unit_RPM, 1)), + new XElement(tns + XMLNames.Report_ResultEntry_EngineSpeedDriving_Max, XMLHelper.ValueAsUnit(result.EngineSpeedDrivingMax, XMLNames.Unit_RPM, 1)) + ) ), //FC XMLDeclarationReport.GetResults(result, tns, true).Cast<object>().ToArray() @@ -345,7 +343,7 @@ namespace TUGraz.VectoCore.OutputData.XML var xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); var retVal = new XDocument(); var results = new XElement(Results); - results.AddFirst(new XElement(tns + XMLNames.Report_Result_Status, allSuccess ? "success" : "error")); + results.AddFirst(new XElement(tns + XMLNames.Report_Result_Status, _allSuccess ? "success" : "error")); var vehicle = new XElement(VehiclePart); vehicle.Add(InputDataIntegrity); retVal.Add(new XProcessingInstruction("xml-stylesheet", "href=\"https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/CSS/VectoReports.css\"")); diff --git a/VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs new file mode 100644 index 0000000000000000000000000000000000000000..f9face57e24637c892b29aaf2c3daba527efdd44 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs @@ -0,0 +1,631 @@ +/* +* This file is part of VECTO. +* +* Copyright © 2012-2017 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Xml; +using System.Xml.Linq; +using NLog.Config; +using NLog.Targets; +using TUGraz.IVT.VectoXML.Writer; +using TUGraz.VectoCommon.Hashing; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.InputData.Reader.Impl; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; +using TUGraz.VectoCore.Utils; +using TUGraz.VectoHashing; +using NLog; +using TUGraz.VectoCore.Models.SimulationComponent.Impl; +using LogManager = NLog.LogManager; + +namespace TUGraz.VectoCore.OutputData.XML +{ + internal class XMLVTPReport : DeclarationReport<XMLVTPReport.ResultEntry>, IVTPReport + { + public const string CURRENT_SCHEMA_VERSION = "0.1"; + + private const string VTPReportTartetName = "VTPReportTarget"; + + protected XElement VehiclePart; + protected XElement GeneralPart; + protected XElement DataIntegrityPart; + protected XElement TestConditionsPart; + + protected XElement Results; + + protected XNamespace tns; + + private IOutputDataWriter _writer; + private static List<string> LogList = new List<string>(); + private LoggingRule cycleChecksRule; + + //protected XNamespace di; + //private bool allSuccess = true; + + public class ResultEntry : XMLDeclarationReport.ResultEntry + { + public Watt AverageFanPower; + public Kilogram VTPFcFinalSimulated; + public WattSecond VTPWorkPWheelPos; + public double VTPFcCorrectionFactor; + public JoulePerKilogramm VTPNCV; + public Kilogram VTPFcMeasured; + + #region Overrides of ResultEntry + + public override void SetResultData(VectoRunData runData, IModalDataContainer data) + { + base.SetResultData(runData, data); + + if (runData.SimulationType != SimulationType.VerificationTest) { + return; + } + + var aux = data.Auxiliaries.FirstOrDefault(x => x.Key == Constants.Auxiliaries.IDs.Fan); + AverageFanPower = data.AuxiliaryWork(aux.Value) / data.Duration(); + var cycleEntries = runData.Cycle.Entries.Pairwise().Select( + x => new { + PWheel = x.Item1.PWheel > 0 ? x.Item1.PWheel : 0.SI<Watt>(), + dt = x.Item2.Time - x.Item1.Time, + FC = x.Item1.Fuelconsumption + }).ToArray(); + + VTPWorkPWheelPos = cycleEntries.Sum(x => x.PWheel * x.dt).Cast<WattSecond>(); + VTPFcMeasured = cycleEntries.Sum(x => x.FC * x.dt).Cast<Kilogram>(); + VTPFcFinalSimulated = data.TimeIntegral<Kilogram>(ModalResultField.FCFinal); + VTPFcCorrectionFactor = runData.VTPData.CorrectionFactor; + VTPNCV = runData.VTPData.FuelNetCalorificValue; + } + + #endregion + } + + public XMLVTPReport(IOutputDataWriter writer) + { + //di = "http://www.w3.org/2000/09/xmldsig#"; + tns = "urn:tugraz:ivt:VectoAPI:VTPReport:v" + CURRENT_SCHEMA_VERSION; + VehiclePart = new XElement(tns + XMLNames.Component_Vehicle); + GeneralPart = new XElement(tns + "General"); + DataIntegrityPart = new XElement(tns + "DataIntegrityCheck"); + TestConditionsPart = new XElement(tns + "TestConditions"); + Results = new XElement(tns + "Results"); + + _writer = writer; + + + AddLogging(); + } + + private void AddLogging() + { + LogList.Clear(); + var target = new MethodCallTarget { + ClassName = typeof(XMLVTPReport).AssemblyQualifiedName, + MethodName = "LogMethod" + }; + target.Parameters.Add(new MethodCallParameter("${level}")); + target.Parameters.Add(new MethodCallParameter("${message}")); + var config = LogManager.Configuration; + if (config == null) { + config = new LoggingConfiguration(); + LogManager.Configuration = config; + } + cycleChecksRule = new LoggingRule(typeof(VTPCycle).FullName, LogLevel.Error, target); + config.AddTarget(VTPReportTartetName, target); + config.LoggingRules.Add(cycleChecksRule); + LogManager.Configuration.Reload(); + } + + // ReSharper disable once UnusedMember.Global -- see AddLogging Method + public static void LogMethod(string level, string message) + { + LogList.Add(message); + } + + #region Overrides of DeclarationReport<ResultEntry> + + protected override void DoAddResult( + ResultEntry entry, VectoRunData runData, IModalDataContainer modData) + { + entry.SetResultData(runData, modData); + } + + protected internal override void DoWriteReport() + { + var config = LogManager.Configuration; + config.LoggingRules.Remove(cycleChecksRule); + config.RemoveTarget(VTPReportTartetName); + LogManager.Configuration.Reload(); + + GenerateResults(); + + var report = GenerateReport(); + if (_writer != null) { + _writer.WriteReport(ReportType.DeclarationVTPReportXML, report); + } + } + + private void GenerateResults() + { + var vtpResult = Missions.FirstOrDefault(x => x.Key == MissionType.VerificationTest).Value.ResultEntry + .FirstOrDefault().Value; + + const MissionType selectedMission = DeclarationData.VTPMode.SelectedMission; + const LoadingType selectedLoading = DeclarationData.VTPMode.SelectedLoading; + var result = Missions.FirstOrDefault(x => x.Key == selectedMission).Value.ResultEntry + .FirstOrDefault(x => x.Key == selectedLoading).Value; + var vtpFcMeasured = vtpResult.VTPFcMeasured / vtpResult.VTPWorkPWheelPos; + var vtpFcMeasuredCorr = vtpResult.VTPFcMeasured / vtpResult.VTPWorkPWheelPos * vtpResult.VTPFcCorrectionFactor; + var vtpFcSimulated = vtpResult.VTPFcFinalSimulated / vtpResult.VTPWorkPWheelPos; + var cVtp = vtpFcMeasuredCorr / vtpFcSimulated; + var declaredCO2 = result.FuelConsumptionTotal / result.Distance / result.Payload; + var verifiedCO2 = declaredCO2 * cVtp; + + Results.Add( + new XElement(tns + "Status", cVtp < 1.075 ? "Passed" : "Failed"), + new XElement( + tns + "AverageFanPower", + new XAttribute(XMLNames.Report_Results_Unit_Attr, "kW"), + vtpResult.AverageFanPower.ConvertToKiloWatt().ToXMLFormat(3)), + new XElement( + tns + "WorkPosVT", new XAttribute(XMLNames.Report_Results_Unit_Attr, "kWh"), + vtpResult.VTPWorkPWheelPos.ConvertToKiloWattHour().ToXMLFormat(3)), + new XElement( + tns + "TestFuelNCV", new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/kg"), + (vtpResult.VTPNCV / 1e6).ToXMLFormat(3)), + new XElement( + tns + "FuelConsumption", + new XElement( + tns + "Measured", + new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/kWh"), + vtpFcMeasured.ConvertToGramPerKiloWattHour().ToXMLFormat(3) + ), + new XElement( + tns + "MeasuredCorrected", + new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/kWh"), + vtpFcMeasuredCorr.ConvertToGramPerKiloWattHour().ToXMLFormat(3) + ), + new XElement( + tns + "Simulated", + new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/kWh"), + vtpFcSimulated.ConvertToGramPerKiloWattHour().ToXMLFormat(3) + ) + ), + new XElement( + tns + "CO2", + new XElement( + tns + "Mission", + string.Format("{0}, {1}", selectedMission.ToXMLFormat(), selectedLoading.ToString()) + ), + new XElement( + tns + "Declared", new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/t-km"), + declaredCO2.ConvertToGrammPerTonKilometer().ToMinSignificantDigits(3, 1) + ), + new XElement( + tns + "Verified", new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/t-km"), + verifiedCO2.ConvertToGrammPerTonKilometer().ToMinSignificantDigits(3, 1) + ) + ), + new XElement(tns + "VTRatio", cVtp.ToXMLFormat(4))); + if (LogList.Any()) { + Results.Add(new XElement(tns + "Warnings", LogList.Select(x => new XElement(tns + "Warning", x)))); + } + } + + private XDocument GenerateReport() + { + var xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); + var retVal = new XDocument(); + retVal.Add( + new XProcessingInstruction( + "xml-stylesheet", "href=\"https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/CSS/VectoReports.css\"")); + retVal.Add( + new XElement( + tns + "VectoVTPReport", + new XAttribute("schemaVersion", CURRENT_SCHEMA_VERSION), + new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName), + new XAttribute("xmlns", tns), + + //new XAttribute(XNamespace.Xmlns + "di", di), + new XAttribute( + xsi + "schemaLocation", + string.Format("{0} {1}VTPReport.{2}.xsd", tns, AbstractXMLWriter.SchemaLocationBaseUrl, CURRENT_SCHEMA_VERSION)), + new XElement( + tns + "Data", + new XElement(GeneralPart), + new XElement(VehiclePart), + new XElement(DataIntegrityPart), + new XElement(TestConditionsPart), + new XElement(Results), + GetApplicationInfo() + ) + ) + ); + + return retVal; + } + + public override void InitializeReport(VectoRunData modelData) + { + GeneralPart.Add( + new XElement(tns + XMLNames.Component_Manufacturer, modelData.VehicleData.Manufacturer), + new XElement(tns + XMLNames.Component_ManufacturerAddress, modelData.VehicleData.ManufacturerAddress)); + VehiclePart.Add( + new XElement(tns + XMLNames.Component_Model, modelData.VehicleData.ModelName), + new XElement(tns + XMLNames.Vehicle_VIN, modelData.VehicleData.VIN), + new XElement(tns + XMLNames.Vehicle_LegislativeClass, modelData.VehicleData.LegislativeClass.ToXMLFormat()), + new XElement(tns + XMLNames.Report_Vehicle_VehicleGroup, modelData.VehicleData.VehicleClass.GetClassNumber()), + new XElement(tns + XMLNames.Vehicle_AxleConfiguration, modelData.VehicleData.AxleConfiguration.GetName()), + new XElement(tns + XMLNames.Vehicle_GrossVehicleMass, modelData.VehicleData.GrossVehicleWeight.ToXMLFormat(0)), + new XElement(tns + XMLNames.Vehicle_CurbMassChassis, modelData.VehicleData.CurbWeight.ToXMLFormat(0)), + modelData.Retarder.Type.IsDedicatedComponent() + ? new XElement(tns + XMLNames.Vehicle_RetarderRatio, modelData.Retarder.Ratio.ToXMLFormat(3)) + : null, + new XElement(tns + XMLNames.Vehicle_PTO, modelData.PTO != null), + new XElement( + tns + XMLNames.Vehicle_Components, + GetEngineDescription(modelData.EngineData), + GetGearboxDescription(modelData.GearboxData), + GetTorqueConverterDescription(modelData.GearboxData.TorqueConverterData), + GetRetarderDescription(modelData.Retarder), + GetAngledriveDescription(modelData.AngledriveData), + GetAxlegearDescription(modelData.AxleGearData), + GetAirDragDescription(modelData.AirdragData), + GetAxleWheelsDescription(modelData.VehicleData), + GetAuxiliariesDescription(modelData.Aux) + ) + ); + + if (InputDataHash == null) { + return; + } + + var allSuccess = true; + + var componentChecks = ComponentIntegrityChecks(ref allSuccess); + var jobIntegrity = JobIntegrityChecks(ref allSuccess); + var manufacturerReportIntegrity = ManufacturerReportIntegrityChecks(ref allSuccess); + + DataIntegrityPart.Add( + new XAttribute("status", allSuccess ? "success" : "failed"), + new XElement( + tns + "Components", + componentChecks.ToArray() + ), + manufacturerReportIntegrity, + jobIntegrity + ); + } + + private List<object> ComponentIntegrityChecks(ref bool allSuccess) + { + var componentChecks = new List<object>(); + var components = InputDataHash.GetContainigComponents().GroupBy(s => s) + .Select(g => new { Entry = g.Key, Count = g.Count() }); + foreach (var component in components) { + if (component.Entry == VectoComponents.Vehicle) { + continue; + } + + for (var i = 0; i < component.Count; i++) { + componentChecks.Add(CheckComponent(ref allSuccess, component.Entry, i, component.Count)); + } + } + + return componentChecks; + } + + private XElement CheckComponent(ref bool allSuccess, VectoComponents component, int i, int count) + { + bool status; + var componentName = count == 1 + ? VectoComponentsExtensionMethods.XMLElementName(component) + : string.Format("{0} ({1})", VectoComponentsExtensionMethods.XMLElementName(component), i + 1); + XElement retVal; + try { + var recomputed = InputDataHash.ComputeHash(component, i); + var readJob = InputDataHash.ReadHash(component, i); + var read = ManufacturerRecord.ComponentDigests[component][i]; + status = string.Equals(readJob, recomputed) && string.Equals(recomputed, read); + retVal = new XElement( + tns + "Component", + new XAttribute("componentName", componentName), + new XAttribute("status", status ? "success" : "failed"), + new XElement(tns + "DigestValueRecomputed", recomputed), + new XElement( + tns + "DigestValueRead", + new XAttribute("source", "JobData"), + readJob + ), + new XElement( + tns + "DigestValueRead", + new XAttribute("source", "ManufacturerRecord"), + read + ) + ); + } catch (Exception e) { + status = false; + retVal = new XElement( + tns + "Component", + new XAttribute("componentName", componentName), + new XAttribute("status", "failed"), + new XElement(tns + "Error", e.Message)); + } + allSuccess = allSuccess && status; + return retVal; + } + + private XElement ManufacturerReportIntegrityChecks(ref bool allSuccess) + { + bool mrStatus; + XElement manufacturerReportIntegrity; + try { + var mrHashRead = ManufacturerRecordHash.ReadHash(); + var mrHashRecomputed = ManufacturerRecordHash.ComputeHash(); + mrStatus = ManufacturerRecordHash.ValidateHash(); + manufacturerReportIntegrity = new XElement( + tns + "ManufacturerReport", + new XAttribute("status", mrStatus ? "success" : "failed"), + new XElement(tns + "DigestValueRecomputed", mrHashRecomputed), + new XElement( + tns + "DigestValueRead", + new XAttribute("source", "ManufacturerRecord"), mrHashRead) + ); + } catch (Exception e) { + mrStatus = false; + var mrError = e.Message; + manufacturerReportIntegrity = new XElement( + tns + "ManufacturerReport", + new XAttribute("status", "failed"), + new XElement(tns + "Error", mrError) + ); + } + allSuccess = allSuccess && mrStatus; + return manufacturerReportIntegrity; + } + + private XElement JobIntegrityChecks(ref bool allSuccess) + { + bool jobStatus; + XElement jobIntegrity; + try { + var jobHashMethods = ManufacturerRecord.JobDigest; + var jobHashRecomputed = InputDataHash.ComputeHash( + jobHashMethods.CanonicalizationMethods, jobHashMethods.DigestMethod); + var jobHashRead = jobHashMethods.DigestValue; + jobStatus = string.Equals(jobHashRecomputed, jobHashRead); + jobIntegrity = new XElement( + tns + "JobData", + new XAttribute("status", jobStatus ? "success" : "failed"), + new XElement( + tns + "DigestValueRecomputed", + jobHashRecomputed), + new XElement( + tns + "DigestValueRead", + new XAttribute("source", "ManufacturerRecord"), + jobHashRead) + ); + } catch (Exception e) { + jobStatus = false; + var jobError = e.Message; + jobIntegrity = new XElement( + tns + "JobData", + new XAttribute("status", "failed"), + new XElement(tns + "Error", jobError) + ); + } + allSuccess = allSuccess && jobStatus; + return jobIntegrity; + } + + #endregion + + private XElement GetApplicationInfo() + { + return new XElement( + tns + XMLNames.Report_ApplicationInfo_ApplicationInformation, + new XElement(tns + XMLNames.Report_ApplicationInfo_SimulationToolVersion, VectoSimulationCore.VersionNumber), + new XElement( + tns + XMLNames.Report_ApplicationInfo_Date, + XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc))); + } + + private XElement GetEngineDescription(CombustionEngineData engineData) + { + return new XElement( + tns + XMLNames.Component_Engine, + GetCommonDescription(engineData), + new XElement(tns + XMLNames.Engine_RatedPower, engineData.RatedPowerDeclared.ToXMLFormat(0)), + new XElement( + tns + XMLNames.Engine_Displacement, + engineData.Displacement.ConvertToCubicCentiMeter().ToXMLFormat(0)), + new XElement(tns + XMLNames.Engine_FuelType, engineData.FuelType.ToXMLFormat()) + ); + } + + private XElement GetGearboxDescription(GearboxData gearboxData) + { + return new XElement( + tns + XMLNames.Component_Gearbox, + GetCommonDescription(gearboxData), + new XElement(tns + XMLNames.Gearbox_TransmissionType, gearboxData.Type.ToXMLFormat()), + new XElement(tns + XMLNames.Report_GetGearbox_GearsCount, gearboxData.Gears.Count), + new XElement( + tns + XMLNames.Report_Gearbox_TransmissionRatioFinalGear, + gearboxData.Gears.Last().Value.Ratio.ToXMLFormat(3)) + ); + } + + private XElement GetTorqueConverterDescription(TorqueConverterData torqueConverterData) + { + if (torqueConverterData == null) { + return null; + } + + return new XElement( + tns + XMLNames.Component_TorqueConverter, + GetCommonDescription(torqueConverterData)); + } + + private XElement GetRetarderDescription(RetarderData retarder) + { + return new XElement( + tns + XMLNames.Component_Retarder, + new XElement(tns + XMLNames.Vehicle_RetarderType, retarder.Type.ToXMLFormat()), + retarder.Type.IsDedicatedComponent() ? GetCommonDescription(retarder) : null); + } + + private object GetAngledriveDescription(AngledriveData angledriveData) + { + if (angledriveData == null) { + return null; + } + + return new XElement( + tns + XMLNames.Component_Angledrive, + GetCommonDescription(angledriveData), + new XElement(tns + XMLNames.AngleDrive_Ratio, angledriveData.Angledrive.Ratio)); + } + + private XElement GetAxlegearDescription(AxleGearData axleGearData) + { + return new XElement( + tns + XMLNames.Component_Axlegear, + GetCommonDescription(axleGearData), + new XElement(tns + XMLNames.Axlegear_LineType, axleGearData.LineType.ToXMLFormat()), + new XElement(tns + XMLNames.Axlegear_Ratio, axleGearData.AxleGear.Ratio.ToXMLFormat(3))); + } + + private XElement GetAirDragDescription(AirdragData airdragData) + { + if (airdragData.CertificationMethod == CertificationMethod.StandardValues) { + return new XElement( + tns + XMLNames.Component_AirDrag, + new XElement(tns + XMLNames.Report_Component_CertificationMethod, airdragData.CertificationMethod.ToXMLFormat()), + new XElement(tns + XMLNames.Report_AirDrag_CdxA, airdragData.DeclaredAirdragArea.ToXMLFormat(2)) + ); + } + + return new XElement( + tns + XMLNames.Component_AirDrag, + new XElement(tns + XMLNames.Component_Model, airdragData.ModelName), + new XElement(tns + XMLNames.Report_Component_CertificationMethod, airdragData.CertificationMethod.ToXMLFormat()), + new XElement(tns + XMLNames.Report_Component_CertificationNumber, airdragData.CertificationNumber), + new XElement(tns + XMLNames.Report_AirDrag_CdxA, airdragData.DeclaredAirdragArea.ToXMLFormat(2)) + ); + } + + private XElement GetAxleWheelsDescription(VehicleData vehicleData) + { + var retVal = new XElement(tns + XMLNames.Component_AxleWheels); + var axleData = vehicleData.AxleData; + for (var i = 0; i < axleData.Count; i++) { + if (axleData[i].AxleType == AxleType.Trailer) { + continue; + } + + retVal.Add(GetAxleDescription(i + 1, axleData[i])); + } + + return retVal; + } + + private XElement GetAxleDescription(int i, Axle axle) + { + return new XElement( + tns + XMLNames.AxleWheels_Axles_Axle, + new XAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, i), + new XElement(tns + XMLNames.Report_Tyre_TyreDimension, axle.WheelsDimension), + new XElement(tns + XMLNames.Component_CertificationNumber, axle.CertificationNumber), + new XElement(tns + XMLNames.Report_Tyre_TyreRRCDeclared, axle.RollResistanceCoefficient.ToXMLFormat(4)), + new XElement(tns + XMLNames.AxleWheels_Axles_Axle_TwinTyres, axle.TwinTyres)); + } + + private XElement GetAuxiliariesDescription(IEnumerable<VectoRunData.AuxData> aux) + { + var auxData = aux.ToDictionary(a => a.ID); + var auxList = new[] { + AuxiliaryType.Fan, AuxiliaryType.SteeringPump, AuxiliaryType.ElectricSystem, AuxiliaryType.PneumaticSystem, + AuxiliaryType.HVAC + }; + var retVal = new XElement(tns + XMLNames.Component_Auxiliaries); + foreach (var auxId in auxList) { + foreach (var entry in auxData[auxId.Key()].Technology) { + retVal.Add(new XElement(tns + GetTagName(auxId), entry)); + } + } + + return retVal; + } + + private string GetTagName(AuxiliaryType auxId) + { + return auxId.ToString() + "Technology"; + } + + private object[] GetCommonDescription(CombustionEngineData data) + { + return new object[] { + new XElement(tns + XMLNames.Component_Model, data.ModelName), + new XElement(tns + XMLNames.Report_Component_CertificationNumber, data.CertificationNumber), + }; + } + + private object[] GetCommonDescription(SimulationComponentData data) + { + return new object[] { + new XElement(tns + XMLNames.Component_Model, data.ModelName), + new XElement(tns + XMLNames.Report_Component_CertificationMethod, data.CertificationMethod.ToXMLFormat()), + data.CertificationMethod == CertificationMethod.StandardValues + ? null + : new XElement(tns + XMLNames.Report_Component_CertificationNumber, data.CertificationNumber), + }; + } + + #region Implementation of IVTPReport + + public IVectoHash InputDataHash { protected get; set; } + + public IManufacturerReport ManufacturerRecord { protected get; set; } + + public IVectoHash ManufacturerRecordHash { protected get; set; } + + #endregion + } +} diff --git a/VectoCore/VectoCore/Properties/Version.cs b/VectoCore/VectoCore/Properties/Version.cs index 7e94075668471c23ac6b1a84f96417283a3ed51b..875fea7840a24998d4e328986502ff4cc0f501b4 100644 --- a/VectoCore/VectoCore/Properties/Version.cs +++ b/VectoCore/VectoCore/Properties/Version.cs @@ -30,5 +30,5 @@ */ using System.Reflection; -[assembly: AssemblyVersion("3.2.1.1133")] -[assembly: AssemblyFileVersion("3.2.1.1133")] +[assembly: AssemblyVersion("3.3.0.1250")] +[assembly: AssemblyFileVersion("3.3.0.1250")] diff --git a/VectoCore/VectoCore/Resources/Declaration/MissionCycles/Construction.vdri b/VectoCore/VectoCore/Resources/Declaration/MissionCycles/Construction.vdri index 1f28adfadf9da69e4b1223ab077df905c8e3a029..9d10afba3b5d5f6ece2f1fb210cbe9601d69dc88 100644 --- a/VectoCore/VectoCore/Resources/Declaration/MissionCycles/Construction.vdri +++ b/VectoCore/VectoCore/Resources/Declaration/MissionCycles/Construction.vdri @@ -1,486 +1,23822 @@ <s>,<v>,<grad>,<stop> -0,0,-3.049,2 -1,34,-3.049,0 -40,34,-2.864,0 -50,34,-1.938,0 -60,34,-1.012,0 -70,34,-0.087,0 -80,34,0.858,0 -90,34,1.858,0 -100,34,2.808,0 -110,34,2.949,0 -136,0,2.949,3 -137,82,2.949,0 -150,82,2.84,0 -160,82,2.044,0 -170,82,1.152,0 -180,82,0.356,0 -190,82,-0.44,0 -200,82,-1.236,0 -210,82,-2.032,0 -270,82,-1.264,0 -280,82,-0.493,0 -290,82,0.277,0 -300,82,1.048,0 -310,82,1.819,0 -320,82,2.435,0 -440,82,2.183,0 -450,82,1.763,0 -460,82,1.343,0 -470,82,0.923,0 -480,82,0.503,0 -490,82,0.082,0 -500,82,-0.044,0 -600,82,0.445,0 -610,82,1.144,0 -620,82,1.843,0 -630,82,2.541,0 -640,82,3.24,0 -650,82,3.939,0 -660,82,4.078,0 -1050,82,3.209,0 -1060,82,2.34,0 -1070,82,1.471,0 -1080,82,0.602,0 -1090,82,-0.267,0 -1100,82,-1.049,0 -1230,82,-1.543,0 -1240,82,-2.038,0 -1250,82,-2.532,0 -1260,82,-3.026,0 -1270,82,-3.521,0 -1280,82,-3.966,0 -1560,82,-3.142,0 -1570,82,-2.319,0 -1580,82,-1.495,0 -1590,82,-0.671,0 -1600,82,0.152,0 -1610,82,0.893,0 -2410,82,0.742,0 -2430,82,0.583,0 -2450,82,0.424,0 -2880,82,0.258,0 -2900,82,0.099,0 -2920,82,0.283,0 -2930,82,0.535,0 -2940,82,0.786,0 -2950,82,1.038,0 -2960,82,1.289,0 -2970,82,1.44,0 -3180,82,0.772,0 -3190,82,-0.064,0 -3200,82,-0.9,0 -3210,82,-1.736,0 -3220,82,-2.572,0 -3230,82,-3.408,0 -3240,82,-3.569,0 -3300,82,-3.428,0 -3350,82,-2.988,0 -3360,82,-2.336,0 -3370,82,-1.684,0 -3380,82,-1.032,0 -3390,82,-0.38,0 -3400,82,0.272,0 -3410,82,0.467,0 -3740,82,0.216,0 -3750,82,-0.203,0 -3760,82,-0.622,0 -3770,82,-1.041,0 -3780,82,-1.46,0 -3790,82,-1.879,0 -3800,82,-2.005,0 -3880,82,-1.866,0 -3890,82,-1.174,0 -3900,82,-0.482,0 -3910,82,0.21,0 -3920,82,0.902,0 -3930,82,1.594,0 -3940,82,2.078,0 -4090,82,1.819,0 -4100,82,0.819,0 -4110,82,-0.181,0 -4120,82,-1.181,0 -4130,82,-2.181,0 -4140,82,-3.181,0 -4150,82,-4.181,0 -4160,82,-5.181,0 -4170,82,-5.579,0 -4250,82,-5.447,0 -4260,82,-5.182,0 -4270,82,-4.918,0 -4280,82,-4.654,0 -4290,82,-4.39,0 -4300,82,-4.125,0 -4310,82,-4.02,0 -4400,82,-3.346,0 -4410,82,-2.672,0 -4419,0,-2.672,5 -4420,39,-2.672,0 -4430,39,-1.324,0 -4440,39,-0.65,0 -4450,39,-0.044,0 -4530,39,0.316,0 -4540,39,0.592,0 -4550,39,0.869,0 -4560,39,1.146,0 -4570,39,1.422,0 -4580,39,1.588,0 -4820,39,1.712,0 -4830,39,1.824,0 -4838,0,1.824,3 -4839,58,1.824,0 -4840,58,1.936,0 -4850,58,2.048,0 -4860,58,2.161,0 -5020,58,1.749,0 -5030,58,1.416,0 -5040,58,1.082,0 -5050,58,0.748,0 -5060,58,0.414,0 -5070,58,0.28,0 -6060,58,0.561,0 -6070,58,1.123,0 -6080,58,1.684,0 -6090,58,2.246,0 -6100,58,2.807,0 -6110,58,3.369,0 -6120,58,3.593,0 -6140,58,3.019,0 -6150,58,2.445,0 -6159,0,2.445,30 -6160,62,2.445,0 -6170,62,1.296,0 -6180,62,0.722,0 -6190,62,0.205,0 -6350,62,0.104,0 -6970,62,0.204,0 -6985,0,0.204,5 -6986,54,0.204,0 -6990,54,0.347,0 -7010,54,0.491,0 -7320,54,0.642,0 -7340,54,0.819,0 -7360,54,0.997,0 -7500,54,1.154,0 -7510,54,1.258,0 -7520,54,1.361,0 -7530,54,1.465,0 -7540,54,1.569,0 -7560,54,0.854,0 -7570,54,0.12,0 -7578,0,0.12,26 -7579,38,0.12,0 -7580,38,-0.614,0 -7590,38,-1.349,0 -7600,38,-2.083,0 -7610,38,-2.671,0 -7630,38,-1.905,0 -7640,38,-0.905,0 -7650,38,0.095,0 -7660,38,1.095,0 -7670,38,2.095,0 -7680,38,3.095,0 -7690,38,4.095,0 -7700,38,5.095,0 -7710,38,6.095,0 -7720,38,6.203,0 -7736,0,6.203,28 -7737,54,6.203,0 -7760,54,6.095,0 -8300,54,5.986,0 -8490,54,6.122,0 -8491,0,6.122,39 -8492,24,6.122,0 -8524,0,6.122,3 -8525,59,6.122,0 -9010,59,5.442,0 -9020,59,4.442,0 -9030,59,3.442,0 -9040,59,2.442,0 -9050,59,1.442,0 -9060,59,0.442,0 -9070,59,-0.558,0 -9080,59,-1.558,0 -9090,59,-2.558,0 -9100,59,-3.558,0 -9110,59,-4.558,0 -9120,59,-5.558,0 -9130,59,-5.816,0 -9220,59,-5.567,0 -9230,59,-5.376,0 -9236,0,-5.376,16 -9237,64,-5.376,0 -9240,64,-5.185,0 -9250,64,-4.994,0 -9260,64,-4.802,0 -9270,64,-4.688,0 -9430,64,-3.688,0 -9440,64,-2.688,0 -9450,64,-1.688,0 -9460,64,-0.688,0 -9470,64,0.312,0 -9480,64,1.312,0 -9490,64,2.312,0 -9500,64,3.312,0 -9510,64,4.312,0 -9520,64,4.883,0 -9630,64,4.663,0 -9640,64,4.222,0 -9650,64,3.782,0 -9660,64,3.341,0 -9670,64,2.9,0 -9680,64,2.46,0 -9690,64,2.283,0 -10063,0,2.283,24 -10064,52,2.283,0 -10790,52,2.085,0 -10800,52,1.691,0 -10810,52,1.297,0 -10814,0,1.297,12 -10815,54,1.297,0 -10820,54,0.902,0 -10830,54,0.508,0 -10840,54,0.114,0 -10850,54,-0.044,0 -11000,54,-0.164,0 -11030,54,-0.303,0 -11180,54,-0.726,0 -11190,54,-1.726,0 -11200,54,-2.726,0 -11206,44,-2.726,0 -11210,44,-3.726,0 -11220,44,-4.726,0 -11230,44,-5.726,0 -11240,44,-6.355,0 -11310,44,-6.019,0 -11320,44,-5.346,0 -11330,44,-4.674,0 -11340,44,-4.002,0 -11350,44,-3.33,0 -11360,44,-2.658,0 -11370,44,-2.389,0 -11470,44,-3.009,0 -11480,44,-4.009,0 -11490,44,-5.009,0 -11496,59,-5.009,0 -11500,59,-6.009,0 -11510,59,-7.009,0 -11520,59,-8.009,0 -11530,59,-9.009,0 -11540,59,-10.009,0 -11550,59,-11.009,0 -11560,59,-11.533,0 -11780,59,-10.533,0 -11790,59,-9.533,0 -11800,59,-8.533,0 -11810,59,-7.533,0 -11820,59,-6.533,0 -11830,59,-5.533,0 -11840,59,-4.533,0 -11850,59,-3.791,0 -12700,59,-3.391,0 -12710,59,-3.083,0 -12720,59,-2.776,0 -12730,59,-2.468,0 -12740,59,-2.16,0 -12750,59,-1.976,0 -13080,59,-2.102,0 -13100,59,-2.586,0 -13110,59,-3.009,0 -13119,0,-3.009,25 -13120,39,-3.009,0 -13130,39,-3.84,0 -13140,39,-4.256,0 -13150,39,-4.63,0 -13160,39,-3.787,0 -13170,39,-2.787,0 -13180,39,-1.787,0 -13190,39,-0.787,0 -13200,39,0.213,0 -13210,39,1.213,0 -13220,39,0.213,0 -13230,39,-0.787,0 -13240,39,-1.787,0 -13250,39,-2.787,0 -13260,39,-3.787,0 -13270,39,-4.787,0 -13280,39,-5.787,0 -13340,39,-5.516,0 -13350,39,-4.532,0 -13360,39,-3.547,0 -13370,39,-2.562,0 -13380,39,-1.577,0 -13390,39,-0.593,0 -13400,39,-0.002,0 -14248,0,-0.002,296 -14249,64,-0.002,0 -14360,64,-0.267,0 -14370,64,-0.439,0 -14380,64,-0.611,0 -14390,64,-0.783,0 -14400,64,-0.955,0 -14410,64,-1.058,0 -14950,64,-0.869,0 -14960,64,-0.697,0 -14970,64,-0.525,0 -14980,44,-0.157,0 -14990,44,0.669,0 -15000,44,1.461,0 -15010,44,2.115,0 -15020,44,2.769,0 -15030,44,3.423,0 -15040,44,3.815,0 -15140,44,3.292,0 -15150,44,2.638,0 -15160,44,1.984,0 -15162,64,1.984,0 -15170,64,1.33,0 -15180,64,0.676,0 -15190,64,0.022,0 -15500,64,0.188,0 -15510,64,0.342,0 -15520,64,0.497,0 -15530,64,0.651,0 -15540,64,0.806,0 -15610,64,0.636,0 -15620,64,0.481,0 -15630,64,0.327,0 -15640,64,0.172,0 -15646,0,0.172,28 -15647,32,0.172,0 -15650,32,0.018,0 -15827,37,0.018,0 -15910,37,0.259,0 -15920,37,1.259,0 -15930,37,2.259,0 -15940,37,3.259,0 -15950,37,3.443,0 -15970,0,3.159,15 -15971,36,3.159,0 -15980,36,2.209,0 -15990,36,1.258,0 -16000,36,0.308,0 -16070,36,-0.034,0 -16080,36,-0.524,0 -16090,36,-1.013,0 -16100,36,-1.503,0 -16110,36,-1.992,0 -16120,36,-2.482,0 -16160,36,-2.589,0 -16180,36,-2.778,0 -16188,0,-2.778,10 -16189,54,-2.778,0 -16200,54,-2.967,0 -16220,54,-3.137,0 -16360,54,-2.77,0 -16370,54,-2.246,0 -16380,54,-1.721,0 -16390,54,-1.197,0 -16400,54,-0.673,0 -16410,54,-0.149,0 -16420,54,-0.044,0 -16531,0,-0.044,11 -16532,64,-0.044,0 -16780,64,0.483,0 -16790,64,1.068,0 -16800,64,1.653,0 -16810,64,2.238,0 -16820,64,2.823,0 -16830,64,3.408,0 -16920,64,3.205,0 -16930,64,2.698,0 -16940,64,2.19,0 -16950,64,1.682,0 -16960,64,1.175,0 -16970,64,0.667,0 -16980,64,0.413,0 -17080,64,0.151,0 -17090,64,-0.286,0 -17100,64,-0.723,0 -17110,64,-1.16,0 -17120,64,-1.597,0 -17130,64,-2.035,0 -17140,64,-2.166,0 -17290,64,-1.681,0 -17300,64,-0.989,0 -17310,64,-0.297,0 -17320,64,0.395,0 -17330,64,1.087,0 -17340,64,1.779,0 -17350,64,1.917,0 -17430,64,1.79,0 -17440,64,1.366,0 -17450,64,0.942,0 -17460,64,0.518,0 -17470,64,0.095,0 -17480,64,-0.329,0 -17490,64,-0.584,0 -17890,64,-0.435,0 -17900,64,-0.27,0 -17910,0,-0.104,4 -17911,44,-0.104,0 -17920,44,0.061,0 -17930,44,0.226,0 -17940,44,0.391,0 -18280,44,0.096,0 -18290,44,-0.149,0 -18300,44,-0.395,0 -18310,44,-0.641,0 -18320,44,-0.887,0 -18330,44,-1.059,0 -18520,44,-0.811,0 -18530,44,-0.634,0 -18535,0,-0.634,3 -18536,62,-0.634,0 -18540,62,-0.457,0 -18550,62,-0.279,0 -18560,62,-0.102,0 -18780,62,0.028,0 -18800,62,0.195,0 -18820,62,0.362,0 -18840,62,0.479,0 -20130,62,-0.151,0 -20140,62,-0.938,0 -20150,62,-1.725,0 -20160,62,-2.512,0 -20170,62,-3.3,0 -20180,62,-4.087,0 -20580,62,-3.397,0 -20590,62,-2.699,0 -20600,62,-2,0 -20610,62,-1.301,0 -20620,62,-0.603,0 -20630,62,-0.044,0 -20680,0,-0.044,60 -20681,44,-0.044,0 -20740,44,-0.548,0 -20750,44,-0.968,0 -20760,44,-1.388,0 -20770,44,-1.808,0 -20780,44,-2.229,0 -20790,44,-2.523,0 -20910,44,-1.983,0 -20920,44,-1.213,0 -20930,44,-0.442,0 -20940,44,0.329,0 -20950,44,1.099,0 -20960,44,1.87,0 -20970,44,2.024,0 -21020,44,1.149,0 -21030,44,0.352,0 -21040,44,-0.444,0 -21050,44,-1.24,0 -21060,44,-2.115,0 -21070,44,-2.911,0 -21080,44,-3.071,0 -21113,19,-3.071,0 -21120,19,-2.914,0 -21130,19,-2.078,0 -21140,19,-1.078,0 -21150,19,-0.078,0 -21153,57.5,-0.078,0 -21160,57.5,0.922,0 -21170,57.5,1.851,0 -21180,57.5,2.776,0 -21190,57.5,2.961,0 -21219,0,2.961,2 \ No newline at end of file +1,0,0,1 +2,67,0,0 +3,67,-0.033489705,0 +4,67,-0.044652939,0 +5,67,-0.055816174,0 +6,67,-0.066979409,0 +7,67,-0.078142644,0 +8,67,-0.089305879,0 +9,67,-0.100469114,0 +10,67,-0.111632349,0 +11,67,-0.122795583,0 +12,67,-0.133958818,0 +13,67,-0.145122053,0 +14,67,-0.156285288,0 +15,67,-0.167448523,0 +16,67,-0.178611758,0 +17,67,-0.189774993,0 +18,67,-0.200938227,0 +19,67,-0.212101462,0 +20,67,-0.223264697,0 +21,67,-0.234427932,0 +22,67,-0.245591167,0 +23,67,-0.256754402,0 +24,67,-0.267917637,0 +25,67,-0.279080872,0 +26,67,-0.290244106,0 +27,67,-0.301407341,0 +28,67,-0.312570576,0 +29,67,-0.323733811,0 +30,67,-0.334897046,0 +31,67,-0.346060281,0 +32,67,-0.357223516,0 +33,67,-0.36838675,0 +34,67,-0.379549985,0 +35,67,-0.39071322,0 +36,67,-0.401876455,0 +37,67,-0.41303969,0 +38,67,-0.424202925,0 +39,67,-0.43536616,0 +40,67,-0.446529394,0 +41,67,-0.457692629,0 +42,67,-0.468855864,0 +43,67,-0.480019099,0 +44,67,-0.491182334,0 +45,67,-0.502345569,0 +46,67,-0.513508804,0 +47,67,-0.524672038,0 +48,67,-0.535835273,0 +49,67,-0.546998508,0 +50,67,-0.558161743,0 +51,67,-0.569324978,0 +52,67,-0.580488213,0 +53,67,-0.591651448,0 +54,67,-0.602814682,0 +55,67,-0.613977917,0 +56,67,-0.625141152,0 +57,67,-0.636304387,0 +58,67,-0.647467622,0 +59,67,-0.658630857,0 +60,67,-0.669794092,0 +61,67,-0.680957326,0 +62,67,-0.692120561,0 +63,67,-0.703283796,0 +64,67,-0.714447031,0 +65,67,-0.725610266,0 +66,67,-0.736773501,0 +67,67,-0.747936736,0 +68,67,-0.75909997,0 +69,67,-0.770263205,0 +70,67,-0.78142644,0 +71,67,-0.792589675,0 +72,67,-0.80375291,0 +73,67,-0.814916145,0 +74,67,-0.82607938,0 +75,67,-0.837242615,0 +76,67,-0.848405849,0 +77,67,-0.859569084,0 +78,67,-0.870732319,0 +79,67,-0.881895554,0 +80,67,-0.893058789,0 +81,67,-0.904222024,0 +82,67,-0.915385259,0 +83,67,-0.926548493,0 +84,67,-0.937711728,0 +85,67,-0.948874963,0 +86,67,-0.960038198,0 +87,67,-0.971201433,0 +88,67,-0.982364668,0 +89,67,-0.993527903,0 +90,67,-1.004691137,0 +91,67,-1.015854372,0 +92,67,-1.027017607,0 +93,67,-1.038180842,0 +94,67,-1.049344077,0 +95,67,-1.060507312,0 +96,67,-1.071670547,0 +97,67,-1.082833781,0 +98,67,-1.093997016,0 +99,67,-1.105160251,0 +100,67,-1.116323486,0 +101,67,-1.127486721,0 +102,67,-1.138649956,0 +103,67,-1.149813191,0 +104,67,-1.160976425,0 +105,67,-1.17213966,0 +106,67,-1.183302895,0 +107,67,-1.19446613,0 +108,67,-1.205629365,0 +109,67,-1.2167926,0 +110,67,-1.227955835,0 +111,67,-1.239119069,0 +112,67,-1.250282304,0 +113,67,-1.261445539,0 +114,67,-1.272608774,0 +115,67,-1.283772009,0 +116,67,-1.294935244,0 +117,67,-1.306098479,0 +118,67,-1.317261713,0 +119,67,-1.328424948,0 +120,67,-1.339588183,0 +121,67,-1.350751418,0 +122,67,-1.361914653,0 +123,67,-1.373077888,0 +124,67,-1.384241123,0 +125,67,-1.395404358,0 +126,67,-1.406567592,0 +127,67,-1.417730827,0 +128,67,-1.428894062,0 +129,67,-1.440057297,0 +130,67,-1.451220532,0 +131,67,-1.462383767,0 +132,67,-1.473547002,0 +133,67,-1.484710236,0 +134,67,-1.495873471,0 +135,67,-1.507036706,0 +136,67,-1.518199941,0 +137,67,-1.529363176,0 +138,67,-1.540526411,0 +139,67,-1.551689646,0 +140,67,-1.56285288,0 +141,67,-1.574016115,0 +142,67,-1.58517935,0 +143,67,-1.596342585,0 +144,67,-1.60750582,0 +145,67,-1.618669055,0 +146,67,-1.62983229,0 +147,67,-1.640995524,0 +148,67,-1.652158759,0 +149,67,-1.663321994,0 +150,67,-1.674485229,0 +151,67,-1.685648464,0 +152,67,-1.696811699,0 +153,67,-1.707974934,0 +154,67,-1.719138168,0 +155,67,-1.730301403,0 +156,67,-1.741464638,0 +157,67,-1.752627873,0 +158,67,-1.763791108,0 +159,67,-1.774954343,0 +160,67,-1.786117578,0 +161,67,-1.797280812,0 +162,67,-1.808444047,0 +163,67,-1.819607282,0 +164,67,-1.830770517,0 +165,67,-1.841933752,0 +166,67,-1.853096987,0 +167,67,-1.864260222,0 +168,67,-1.875423456,0 +169,67,-1.886586691,0 +170,67,-1.897749926,0 +171,67,-1.908913161,0 +172,67,-1.920076396,0 +173,67,-1.931239631,0 +174,67,-1.942402866,0 +175,67,-1.953566101,0 +176,67,-1.964729335,0 +177,67,-1.97589257,0 +178,67,-1.987055805,0 +179,67,-1.99821904,0 +180,67,-2.009382275,0 +181,67,-2.02054551,0 +182,67,-2.031708745,0 +183,67,-2.042871979,0 +184,67,-2.054035214,0 +185,67,-2.065198449,0 +186,67,-2.076361684,0 +187,67,-2.087524919,0 +188,67,-2.098688154,0 +189,67,-2.109851389,0 +190,67,-2.121014623,0 +191,67,-2.132177858,0 +192,67,-2.143341093,0 +193,67,-2.154504328,0 +194,67,-2.165667563,0 +195,67,-2.176830798,0 +196,67,-2.187994033,0 +197,67,-2.199157267,0 +198,67,-2.210320502,0 +199,67,-2.221483737,0 +200,67,-2.232646972,0 +212,67,-0.862214016,0 +229,67,-1.089128514,0 +245,67,-1.632027725,0 +307,67,-0.319396339,0 +321,67,-0.214675828,0 +334,67,0.717342627,0 +358,67,-0.349067268,0 +378,67,-0.740033112,0 +405,0,-0.740033112,14 +406,33,-0.740033112,0 +409,33,-0.504404432,0 +429,33,-0.43458972,0 +439,33,-0.504404432,0 +465,33,-0.495677567,0 +482,33,-0.415390751,0 +501,33,-0.195477125,0 +531,19,-0.312414953,0 +541,48,-0.312414953,0 +552,48,-0.600400477,0 +566,48,-0.598655085,0 +593,48,-0.441571171,0 +613,48,-0.275762721,0 +623,48,-0.101229131,0 +634,48,0.020943951,0 +645,48,0.129154436,0 +656,48,0.179769107,0 +679,48,0.036651916,0 +691,48,-0.363030079,0 +703,48,-0.445061898,0 +716,48,-0.225147854,0 +742,48,-0.089011815,0 +755,48,-0.307178915,0 +781,48,-0.853486727,0 +794,48,-1.232264818,0 +832,48,-1.647739913,0 +855,48,-1.481892996,0 +865,48,-1.272413688,0 +881,48,-0.959960575,0 +888,48,-0.846504906,0 +896,25,-0.846504906,0 +902,25,-0.726069727,0 +909,50,-0.726069727,0 +916,50,-0.609127442,0 +924,50,-0.537566588,0 +950,50,-0.528839693,0 +992,50,-0.624836004,0 +1062,50,0.565492705,0 +1088,50,0.638799195,0 +1101,50,0.685925153,0 +1114,50,0.539311968,0 +1128,50,0.143117096,0 +1142,50,-0.155334428,0 +1169,50,-0.013962634,0 +1183,50,0.394446457,0 +1210,50,0.598655085,0 +1237,50,0.448552626,0 +1249,50,0.052359882,0 +1262,50,-0.083775824,0 +1274,50,0.347321918,0 +1285,50,0.811595921,0 +1305,50,1.164187202,0 +1325,50,0.298452188,0 +1335,50,0.47996923,0 +1338,17,0.47996923,0 +1345,46,0.47996923,0 +1350,46,0.916323502,0 +1355,46,1.090874051,0 +1368,46,1.389371473,0 +1390,46,2.237885576,0 +1398,46,2.688454487,0 +1428,46,2.875349296,0 +1437,46,2.803733096,0 +1447,46,2.693694266,0 +1490,46,2.431722793,0 +1501,46,2.34964543,0 +1525,46,1.902638422,0 +1550,46,1.185134043,0 +1576,46,0.472987754,0 +1614,46,-0.490441452,0 +1639,46,-1.111820542,0 +1651,46,-1.534264783,0 +1675,46,-1.923590039,0 +1678,46,-2.12613131,0 +1699,46,-2.34964543,0 +1734,46,-1.911368242,0 +1757,46,-1.55346798,0 +1759,46,-1.534264783,0 +1779,46,-1.300343577,0 +1790,46,-0.925050888,0 +1808,46,0.272272036,0 +1829,46,-0.221657178,0 +1842,46,-1.426030651,0 +1856,46,-1.151968259,0 +1871,46,-0.84825036,0 +1886,46,-0.919814455,0 +1892,46,-0.932032807,0 +1905,0,-0.932032807,21 +1906,31,-0.932032807,0 +1916,31,-0.811595921,0 +1958,31,-0.349067268,0 +2037,31,0.413645392,0 +2118,31,0.376992904,0 +2177,31,0.399682527,0 +2193,31,0.424117551,0 +2253,31,0.478223861,0 +2260,31,0.452043355,0 +2328,31,0.33684982,0 +2338,11,0.33684982,0 +2344,13,0.33684982,0 +2390,13,0.408409316,0 +2406,13,0.439825808,0 +2449,0,0.439825808,53 +2450,10,0.439825808,0 +2452,10,0.483459969,0 +2462,0,0.483459969,59 +2463,10,0.483459969,0 +2476,0,0.483459969,28 +2477,10,0.483459969,0 +2509,10,0.464260917,0 +2514,0,0.464260917,35 +2515,10,0.464260917,0 +2540,0,0.464260917,29 +2541,10,0.464260917,0 +2574,0,0.404918599,13 +2575,10,0.404918599,0 +2595,0,0.404918599,79 +2596,10,0.404918599,0 +2604,24,0.404918599,0 +2622,24,0.329868425,0 +2758,24,0.136135766,0 +2820,21,0.136135766,0 +2832,24,0.136135766,0 +2855,24,0.034906586,0 +2868,24,-0.181514442,0 +3078,0,-0.181514442,61 +3079,50,-0.181514442,0 +3108,50,-0.209439816,0 +3178,50,-0.258309304,0 +3204,50,-0.036651916,0 +3215,50,0.179769107,0 +3226,50,0.150098428,0 +3249,50,0.026179939,0 +3260,50,-0.005235988,0 +3271,50,-0.031415928,0 +3306,50,-0.169297099,0 +3318,50,0.075049172,0 +3341,50,1.080400841,0 +3354,50,1.618061404,0 +3356,50,1.686147826,0 +3406,50,0.195477125,0 +3433,50,-2.003906149,0 +3447,50,-1.927081991,0 +3460,50,-1.651231521,0 +3474,50,-1.600603591,0 +3478,50,-1.605840925,0 +3487,50,-1.668689623,0 +3500,50,-1.740268915,0 +3526,50,-1.827563154,0 +3539,50,-1.834546812,0 +3551,50,-1.710589484,0 +3564,50,-1.495858725,0 +3619,16,-1.495858725,0 +3628,47,-1.495858725,0 +3633,47,-0.933778288,0 +3665,47,-0.965197047,0 +3683,47,-0.872686779,0 +3692,47,-0.830795838,0 +3703,47,-0.876177704,0 +3716,47,-0.940760219,0 +3728,47,-0.947742158,0 +3730,47,-0.926796367,0 +3741,47,-0.863959475,0 +3767,47,-0.656253219,0 +3780,47,0.373502197,0 +3793,47,1.36493223,0 +3806,47,1.640756708,0 +3819,47,0.289725466,0 +3844,47,0.802868706,0 +3868,47,0.696397629,0 +3880,47,0.37001149,0 +3892,47,-0.017453293,0 +3916,47,-0.722578886,0 +3927,47,-1.041999273,0 +3939,47,-1.40333683,0 +3960,47,-2.059779744,0 +3971,47,-2.840414201,0 +3981,47,-3.119915077,0 +4001,47,-3.866083399,0 +4020,47,-3.691301222,0 +4037,47,-3.474602479,0 +4045,26,-3.474602479,0 +4052,26,-3.534016548,0 +4059,48,-3.534016548,0 +4067,48,-3.726255822,0 +4074,48,2.859628417,0 +4090,48,4.441288991,0 +4099,48,4.254185697,0 +4110,48,3.167085534,0 +4133,48,0.504404432,0 +4145,48,-0.841268545,0 +4157,48,-1.295106707,0 +4170,48,-0.801123265,0 +4183,48,-0.029670598,0 +4184,48,0.832541288,0 +4209,48,1.649485716,0 +4222,48,1.420793603,0 +4235,48,1.237501605,0 +4248,48,1.593620493,0 +4260,48,2.169784673,0 +4273,48,2.634310956,0 +4276,48,3.025578304,0 +4285,48,3.626637581,0 +4297,48,4.29789871,0 +4308,48,4.798096393,0 +4319,48,5.370295864,0 +4321,48,6.242405574,0 +4331,48,6.641992671,0 +4342,48,6.331769213,0 +4365,48,4.582948506,0 +4386,48,3.820637807,0 +4414,48,2.754826128,0 +4439,48,1.529027566,0 +4462,48,0.42062683,0 +4491,48,-1.083891908,0 +4495,18,-1.083891908,0 +4502,66,-1.083891908,0 +4520,66,-2.442200988,0 +4532,66,-3.207268885,0 +4546,66,-4.165016163,0 +4577,66,-5.037784929,0 +4590,66,-5.270530482,0 +4602,66,-5.097278513,0 +4639,66,-4.205229048,0 +4668,66,-2.92076597,0 +4683,66,-2.003906149,0 +4715,66,-0.926796367,0 +4749,66,0.108210456,0 +4750,66,0.537566588,0 +4766,66,0.387465033,0 +4784,66,1.076909777,0 +4820,66,2.494592769,0 +4874,66,3.291133138,0 +4892,66,3.163591378,0 +4944,66,1.738523057,0 +4962,66,0.713851789,0 +4980,66,-1.089128514,0 +4997,66,-2.012636315,0 +5032,66,-3.416938227,0 +5067,66,-4.032148299,0 +5084,66,-3.874823118,0 +5102,66,-3.388980621,0 +5137,66,-1.632027725,0 +5154,66,-0.928541847,0 +5171,66,-0.483459969,0 +5189,66,-0.335104471,0 +5220,66,0,0 +5234,66,0.031415928,0 +5283,66,-0.338595169,0 +5302,66,0.003490659,0 +5330,66,0.579455797,0 +5351,12,0.579455797,0 +5355,12,0.21991184,0 +5358,61,0.21991184,0 +5362,61,-0.022689281,0 +5426,61,-0.493932195,0 +5437,61,-0.401427884,0 +5449,61,-0.270526694,0 +5493,61,0.061086531,0 +5523,61,0.385719678,0 +5538,61,0.373502197,0 +5570,61,0.230383869,0 +5586,61,0.226893192,0 +5619,61,0.157079762,0 +5669,61,0.040142575,0 +5720,61,-0.010471976,0 +5785,61,0.343831218,0 +5794,61,0.410154674,0 +5843,61,0.680688921,0 +5856,61,0.647526202,0 +5898,61,0.293216155,0 +5933,61,-0.001745329,0 +5934,0,-0.001745329,31 +5935,59,-0.001745329,0 +5960,59,-0.127409104,0 +5987,59,0.043633234,0 +6020,59,-0.078539832,0 +6033,59,-0.240855903,0 +6048,59,0.137881098,0 +6063,59,0.691161389,0 +6094,59,1.160696072,0 +6110,59,0.720833466,0 +6113,59,0.368266137,0 +6127,59,1.672181255,0 +6143,59,0.88839596,0 +6159,59,0.21991184,0 +6175,59,-0.274017378,0 +6190,59,-0.56374732,0 +6206,59,-0.759232812,0 +6221,59,-0.856977641,0 +6237,59,-0.930287327,0 +6252,59,-0.898868772,0 +6267,59,-0.7749417,0 +6268,59,-0.556765784,0 +6283,59,-0.289725466,0 +6298,59,0.198967797,0 +6301,59,0.415390751,0 +6314,59,0.335104471,0 +6328,59,0.132645101,0 +6341,59,0.151843762,0 +6354,59,0.322887034,0 +6366,59,0.422372191,0 +6378,38,0.422372191,0 +6389,38,-1.691385307,0 +6400,53,-1.691385307,0 +6434,53,-1.911368242,0 +6501,53,-2.271063687,0 +6545,53,-1.682656177,0 +6560,53,-0.855232184,0 +6574,53,2.698934061,0 +6589,53,3.990193001,0 +6603,53,3.894050708,0 +6646,53,4.081097939,0 +6672,53,3.90104263,0 +6685,42,3.90104263,0 +6708,85,3.90104263,0 +6746,85,2.431722793,0 +6787,85,0.975670009,0 +6881,85,1.228773631,0 +6954,85,0.993124993,0 +6971,0,0.993124993,14 +6972,58,0.993124993,0 +6989,58,-0.595164302,0 +7005,58,-0.570728862,0 +7021,58,-0.537566588,0 +7037,58,0.115191782,0 +7053,58,0.562001936,0 +7069,58,0.172787768,0 +7085,58,5.030785919,0 +7100,58,3.822385685,0 +7116,58,1.96549378,0 +7130,58,-0.027925269,0 +7145,58,-1.701860297,0 +7159,58,-2.733866403,0 +7172,58,-3.156603089,0 +7186,58,-2.686707897,0 +7199,58,-1.755981678,0 +7226,58,-0.987888492,0 +7240,58,-1.406828178,0 +7253,58,-1.942795835,0 +7254,58,-2.136608043,0 +7278,58,-1.864227557,0 +7288,58,-1.185134043,0 +7316,0,-1.185134043,17 +7317,47,-1.185134043,0 +7331,47,0.029670598,0 +7347,47,0.190241118,0 +7364,47,0.12391844,0 +7376,47,-0.047123893,0 +7383,47,-0.357794023,0 +7398,47,-0.41888147,0 +7407,47,-0.314160299,0 +7427,47,-0.143117096,0 +7437,47,-0.20769448,0 +7447,47,-0.303688223,0 +7459,47,-0.448552626,0 +7471,47,-0.466006284,0 +7484,47,-0.342085868,0 +7508,47,-0.209439816,0 +7521,47,-0.30892426,0 +7534,47,-0.492186823,0 +7547,47,-0.675452692,0 +7560,47,-0.701633873,0 +7573,47,-0.626581401,0 +7574,47,-0.446807262,0 +7586,47,-0.106465125,0 +7598,47,0.130899769,0 +7611,47,0.542802728,0 +7623,47,0.588182741,0 +7647,47,-0.169297099,0 +7657,47,-0.626581401,0 +7667,47,0.083775824,0 +7715,46,0.083775824,0 +7733,46,-3.032566027,0 +7770,46,-3.936002814,0 +7787,46,-3.682562713,0 +7817,46,0.813341366,0 +7835,46,1.504587335,0 +7865,46,2.981905704,0 +7875,46,3.719264829,0 +7886,46,4.074105014,0 +7897,46,3.997185453,0 +7920,46,3.502561733,0 +7932,46,1.272413688,0 +7955,46,-1.897400544,0 +7966,46,-2.590647944,0 +7989,46,0.258309304,0 +8013,46,3.771698162,0 +8024,46,3.748976798,0 +8048,46,1.471418737,0 +8060,46,0.111701119,0 +8084,46,-0.012217305,0 +8096,46,0.48695071,0 +8108,46,3.811898451,0 +8120,46,5.197025853,0 +8144,46,5.459568657,0 +8157,46,4.420303923,0 +8169,46,1.515061698,0 +8182,46,-1.679164532,0 +8208,46,-3.355781651,0 +8233,46,-3.705282953,0 +8246,46,-3.205521761,0 +8258,46,-0.947742158,0 +8282,46,-0.595164302,0 +8293,46,4.642415961,0 +8304,46,1.26194003,0 +8315,46,-1.330019306,0 +8326,46,-2.73211977,0 +8349,46,-3.481592242,0 +8372,46,-4.943302414,0 +8394,46,-6.28971449,0 +8405,46,-6.912007985,0 +8426,46,-7.038283095,0 +8447,46,-7.004958344,0 +8465,46,-6.570121888,0 +8514,0,-6.570121888,25 +8515,29,-6.570121888,0 +8540,29,-2.030096739,0 +8561,29,-2.788012854,0 +8566,29,-3.280649856,0 +8578,29,-3.764706932,0 +8597,29,-3.467612751,0 +8625,29,-1.743760632,0 +8632,29,-1.275904913,0 +8639,29,3.137385454,0 +8641,29,-1.085637443,0 +8645,29,-0.881414097,0 +8652,29,-0.664980247,0 +8659,29,-0.455534086,0 +8674,29,-0.307178915,0 +8713,29,-0.153589095,0 +8721,27,-0.153589095,0 +8729,27,-0.211185153,0 +8737,27,-0.500913685,0 +8752,27,-1.284632989,0 +8767,27,-2.059779744,0 +8782,27,-1.864227557,0 +8798,27,-1.600603591,0 +8805,27,-1.656468941,0 +8836,27,-1.5639425,0 +8866,27,-0.884905027,0 +8874,27,-0.675452692,0 +8888,27,-0.520112807,0 +8896,27,-0.417136111,0 +8901,30,-0.417136111,0 +8910,30,-0.354303321,0 +8925,30,-0.364775432,0 +8933,30,-0.326377729,0 +8957,30,0.635308395,0 +8973,30,2.42473736,0 +8987,30,3.535764058,0 +9000,30,4.110818314,0 +9018,30,4.137042777,0 +9037,22,4.137042777,0 +9039,22,3.815394186,0 +9059,22,3.228234521,0 +9075,22,2.300749789,0 +9086,22,1.679164532,0 +9092,22,1.031526172,0 +9098,22,0.499168312,0 +9109,22,-0.120427777,0 +9120,22,-0.605636655,0 +9131,22,-0.809850477,0 +9138,22,-0.916323502,0 +9149,22,-1.017562072,0 +9164,0,-1.017562072,29 +9165,27,-1.017562072,0 +9180,27,-1.069927655,0 +9222,27,-0.926796367,0 +9242,27,-0.752251097,0 +9255,27,-0.457279451,0 +9277,27,0.075049172,0 +9278,25,0.075049172,0 +9305,25,0.626581401,0 +9325,25,0.644035398,0 +9331,27,0.644035398,0 +9354,27,0.865704935,0 +9367,27,1.193861924,0 +9373,27,1.600603591,0 +9376,21,1.600603591,0 +9379,21,1.970731796,0 +9386,21,2.232646972,0 +9388,32,2.232646972,0 +9392,32,2.173276978,0 +9398,32,1.834546812,0 +9405,32,0.48520534,0 +9418,32,-0.422372191,0 +9426,32,-1.066436598,0 +9427,32,-1.474910153,0 +9442,32,-1.925336014,0 +9450,32,-2.405527539,0 +9451,32,-2.63780404,0 +9465,32,-2.952208987,0 +9481,32,-2.691947671,0 +9504,32,-1.684402001,0 +9555,32,-0.448552626,0 +9591,32,0.757487383,0 +9608,32,1.380643153,0 +9626,32,2.396795862,0 +9644,32,3.198533286,0 +9669,32,0.019198622,0 +9686,32,0.710360954,0 +9690,29,0.710360954,0 +9702,29,0.783668876,0 +9707,30,0.783668876,0 +9718,30,0.237365224,0 +9735,30,-0.926796367,0 +9751,30,-2.251855247,0 +9777,30,-3.065758114,0 +9785,30,-3.144373658,0 +9794,30,-2.939981078,0 +9802,30,-2.573183017,0 +9810,30,-2.068510108,0 +9818,30,-1.54124775,0 +9826,30,-0.942505703,0 +9832,58,-1.03676272,0 +9834,58,-1.305580453,0 +9842,58,-1.529027566,0 +9851,58,-1.790899242,0 +9860,58,-2.129623549,0 +9868,58,-2.258840115,0 +9885,58,-1.865973494,0 +9887,58,-1.501095888,0 +9894,58,0.951233131,0 +9900,58,-1.059454493,0 +9911,58,-0.195477125,0 +9929,58,0.431098996,0 +9940,58,-0.076794502,0 +9965,58,-0.368266137,0 +9978,58,-0.157079762,0 +9992,58,0.064577191,0 +10006,58,0.361284727,0 +10020,58,0.549784254,0 +10021,58,0.567238091,0 +10036,58,0.315905645,0 +10051,58,-0.02443461,0 +10067,58,-0.319396339,0 +10099,58,-0.446807262,0 +10131,58,-0.078539832,0 +10147,58,0.638799195,0 +10162,58,0.366520784,0 +10177,58,0.191986454,0 +10181,58,0.027925269,0 +10192,58,-0.071558512,0 +10197,58,0.017453293,0 +10206,58,0.136135766,0 +10209,58,0.424117551,0 +10220,58,0.708615537,0 +10224,58,0.883159562,0 +10234,58,1.040253755,0 +10248,58,1.158950508,0 +10262,58,1.162441637,0 +10263,49,1.162441637,0 +10276,49,0.928541847,0 +10290,49,0.158825095,0 +10298,54,0.158825095,0 +10304,54,-0.499168312,0 +10307,54,-1.075164245,0 +10318,54,-1.328273669,0 +10323,54,-1.272413688,0 +10332,54,-1.043744792,0 +10338,54,-0.750505669,0 +10346,54,-0.361284727,0 +10351,54,-0.701633873,0 +10361,54,-0.239110563,0 +10375,54,-0.342085868,0 +10404,54,-0.710360954,0 +10433,54,-0.729560571,0 +10462,54,-0.080285163,0 +10477,54,0.265290669,0 +10492,54,0.008726646,0 +10507,54,-0.183259777,0 +10522,54,0.045378564,0 +10537,54,0.307178915,0 +10551,54,0.394446457,0 +10581,54,0.534075829,0 +10625,54,0.415390751,0 +10639,54,0.186750447,0 +10667,54,-0.116937113,0 +10680,54,-0.415390751,0 +10716,54,-0.466006284,0 +10746,54,-0.11344645,0 +10766,0,-0.11344645,14 +10767,29,-0.11344645,0 +10772,29,0.239110563,0 +10794,29,0.343831218,0 +10829,29,0.080285163,0 +10874,0,0.080285163,65 +10875,38,0.080285163,0 +10912,38,0.745269388,0 +10932,38,0.856977641,0 +10950,38,0.593418911,0 +10964,38,0.410154674,0 +10972,38,0.191986454,0 +11028,38,-0.041887904,0 +11069,38,-0.087266485,0 +11090,38,-0.158825095,0 +11100,38,-0.354303321,0 +11132,38,-0.242601242,0 +11163,38,0.260054645,0 +11194,38,0.513131304,0 +11226,38,0.356048672,0 +11247,38,-0.073303842,0 +11288,38,-0.804614148,0 +11291,38,-0.729560571,0 +11298,38,-0.256563963,0 +11318,38,0.294961499,0 +11336,38,0.446807262,0 +11361,0,0.446807262,57 +11362,27,0.446807262,0 +11366,27,0.137881098,0 +11388,27,0.155334428,0 +11397,27,0.696397629,0 +11405,27,0.947742158,0 +11415,27,0.905850658,0 +11425,27,0.47996923,0 +11437,27,-0.054105212,0 +11458,27,-1.230519225,0 +11465,27,-1.333510584,0 +11473,27,-1.338747506,0 +11480,27,-1.179897323,0 +11488,27,-0.804614148,0 +11502,27,-0.157079762,0 +11509,27,0.701633873,0 +11521,27,1.00883453,0 +11538,27,0.84825036,0 +11564,27,-0.436335082,0 +11581,10,-0.436335082,0 +11584,10,0.279253406,0 +11602,10,0.905850658,0 +11619,10,2.445693731,0 +11632,10,3.90104263,0 +11644,10,4.556713894,0 +11646,13,4.556713894,0 +11656,13,4.413308987,0 +11676,13,3.883562896,0 +11697,13,4.032148299,0 +11704,13,4.638917785,0 +11720,13,5.820250507,0 +11738,13,6.54207659,0 +11754,13,6.81731607,0 +11772,13,6.64900482,0 +11787,13,6.615697694,0 +11806,13,4.346859232,0 +11826,13,-5.830758021,0 +11838,13,0.506149805,0 +11848,13,0.553275018,0 +11887,13,0.520112807,0 +11905,12,0.520112807,0 +11921,12,0.534075829,0 +11948,12,0.500913685,0 +11958,12,0.956469596,0 +11966,12,0.860468557,0 +11973,12,0.956469596,0 +11981,12,1.200844242,0 +11986,12,1.467927324,0 +11993,12,1.761219285,0 +11999,12,1.855497892,0 +12008,12,1.651231521,0 +12017,12,1.144986021,0 +12030,12,0.551529636,0 +12036,12,0.562001936,0 +12057,12,-2.700680662,0 +12069,12,-1.343984436,0 +12072,10,-1.343984436,0 +12077,12,-1.343984436,0 +12088,12,1.078655309,0 +12104,12,2.625578274,0 +12117,12,3.198533286,0 +12130,12,3.333066992,0 +12150,23,3.333066992,0 +12170,23,2.237885576,0 +12185,23,0.692906802,0 +12196,23,0.659744029,0 +12205,0,0.659744029,24 +12206,23,0.659744029,0 +12215,23,0.691161389,0 +12244,23,0.684179742,0 +12290,23,0.581201185,0 +12305,15,0.581201185,0 +12314,22,0.581201185,0 +12345,22,0.602145869,0 +12358,22,0.670216468,0 +12376,22,1.281141756,0 +12399,22,2.70417387,0 +12416,16,2.70417387,0 +12425,16,4.268173684,0 +12450,16,4.913559748,0 +12470,0,4.112566594,36 +12471,19,4.112566594,0 +12488,19,1.892162676,0 +12507,19,0.804614148,0 +12514,0,0.804614148,14 +12515,35,0.804614148,0 +12531,35,1.185134043,0 +12557,35,2.255347678,0 +12572,35,2.651776441,0 +12587,35,2.538253631,0 +12603,35,1.937557877,0 +12620,35,0.849995815,0 +12638,35,0.054105212,0 +12694,35,-0.399682527,0 +12781,35,-0.987888492,0 +12799,31,-0.987888492,0 +12816,31,-1.253212004,0 +12821,34,-1.253212004,0 +12880,34,-1.281141756,0 +12927,34,-1.014071054,0 +12964,34,-0.930287327,0 +13010,34,-1.031526172,0 +13052,34,-1.265431246,0 +13075,32,-1.265431246,0 +13089,32,-1.61282405,0 +13147,32,-2.426483716,0 +13177,32,-2.557464716,0 +13185,32,-2.721640008,0 +13209,32,-3.448391172,0 +13225,32,-3.913278586,0 +13258,32,-4.418555185,0 +13292,32,-4.528730999,0 +13309,32,-4.362596984,0 +13335,32,-3.656347523,0 +13356,32,-2.651776441,0 +13368,0,-2.651776441,44 +13369,10,-2.651776441,0 +13381,10,-1.719318697,0 +13396,33,-1.719318697,0 +13400,33,-1.069927655,0 +13418,33,-0.715597208,0 +13438,33,-0.654507815,0 +13450,33,-0.734796839,0 +13457,33,-0.862214016,0 +13464,33,-0.900614243,0 +13494,33,-0.759232812,0 +13518,33,-0.366520784,0 +13527,33,-0.216421165,0 +13544,33,-0.251327941,0 +13586,33,-1.244483997,0 +13604,33,-1.146731579,0 +13649,33,0.013962634,0 +13676,33,0.403173242,0 +13695,33,0.383974322,0 +13752,33,0.186750447,0 +13767,0,0.186750447,22 +13768,38,0.186750447,0 +13777,38,0,0 +13801,38,0.169297099,0 +13845,38,1.658214749,0 +13871,38,1.515061698,0 +13918,38,0.877923168,0 +13970,62,0.32114169,0 +13990,62,-0.32637773,0 +13992,71,-0.32637773,0 +14005,71,-0.84126855,0 +14025,71,-0.74177854,0 +14045,71,-0.15184376,0 +14060,71,0.3735022,0 +14080,71,0.49044145,0 +14087,71,0.4939322,0 +14100,71,0.50091368,0 +14102,71,0.50964055,0 +14120,71,0.52185818,0 +14140,71,0.34557657,0 +14160,71,-0.09250248,0 +14167,71,-0.49218682,0 +14180,71,-0.76795997,0 +14215,71,-1.38762581,0 +14218,71,-1.6966228,0 +14235,71,-2.07374834,0 +14255,71,-2.56969005,0 +14275,71,-2.81421333,0 +14295,71,-2.93474057,0 +14301,71,-2.92425961,0 +14315,71,-2.90504468,0 +14316,71,1.30732608,0 +14327,71,-2.06327189,0 +14331,71,-2.34789914,0 +14335,71,-2.40203486,0 +14338,71,-2.2902723,0 +14341,71,-1.94104985,0 +14345,71,-1.30383483,0 +14350,71,-2.00041409,0 +14355,71,-2.32519747,0 +14357,71,-2.70068066,0 +14366,71,-2.9819057,0 +14395,71,-3.26492507,0 +14415,71,-2.79674631,0 +14417,71,-2.00565218,0 +14435,71,-1.2741593,0 +14475,71,1.21306333,0 +14495,71,2.35663061,0 +14515,71,2.92425961,0 +14517,71,3.20377464,0 +14535,71,3.16708553,0 +14555,71,2.90853829,0 +14575,71,2.49284635,0 +14577,71,1.96549378,0 +14595,71,1.50458734,0 +14615,71,1.17640618,0 +14635,71,0.431099,0 +14641,71,0.18325978,0 +14655,71,0.1483531,0 +14660,71,0.20943982,0 +14667,69,0.20943982,0 +14675,69,0.41015467,0 +14677,69,0.66148943,0 +14695,69,0.58120119,0 +14715,69,0.31939634,0 +14735,69,-0.21293049,0 +14775,69,-0.56025655,0 +14835,69,-0.6440354,0 +14875,69,-0.1431171,0 +14878,77,-0.1431171,0 +14895,77,-0.06108653,0 +14915,77,-0.35255797,0 +14935,77,-0.6929068,0 +14955,77,-0.81508681,0 +14975,77,-0.73479684,0 +14984,77,-0.61087284,0 +14995,77,-0.37873826,0 +15015,77,0.23038387,0 +15035,77,0.24434658,0 +15055,77,-0.03665192,0 +15075,77,0.48695071,0 +15095,77,0.91981446,0 +15115,77,0.60214587,0 +15135,77,-0.05235988,0 +15155,77,-0.41190003,0 +15162,77,-0.32463238,0 +15180,77,0.17278777,0 +15220,77,0.61959981,0 +15245,77,0.29845219,0 +15265,77,-0.49567757,0 +15285,77,-1.13102158,0 +15310,77,-1.01581656,0 +15330,77,-0.61436363,0 +15355,77,-0.27925341,0 +15395,77,0.07155851,0 +15420,77,0.23736522,0 +15440,77,0.31590565,0 +15465,77,0.36652078,0 +15485,77,0.39095574,0 +15530,77,0.38222897,0 +15570,77,0.27227204,0 +15615,77,0.20245847,0 +15635,77,0.2181665,0 +15660,77,0.27401738,0 +15680,77,0.2181665,0 +15700,73,0.2181665,0 +15720,73,0.15009843,0 +15745,73,0.35255797,0 +15747,75,0.35255797,0 +15765,75,0.71385179,0 +15785,75,0.91806898,0 +15850,75,1.04723583,0 +15875,75,1.38413448,0 +15895,75,1.81359589,0 +15915,75,2.13136967,0 +15940,75,2.46490393,0 +15941,76,2.46490393,0 +15960,76,2.69718746,0 +16000,76,2.51904273,0 +16025,76,2.46141115,0 +16045,76,2.52078917,0 +16170,76,2.63431096,0 +16230,76,2.47363589,0 +16285,76,3.31384716,0 +16325,76,3.47110761,0 +16360,76,3.85384789,0 +16395,76,4.46752088,0 +16415,59,4.46752088,0 +16430,59,4.63192147,0 +16450,63,4.63192147,0 +16465,63,4.32762449,0 +16485,63,3.74722902,0 +16500,63,3.11816805,0 +16520,63,2.34440656,0 +16526,63,0.06108653,0 +16540,63,0.11519178,0 +16543,63,0.16057043,0 +16546,63,0.19547713,0 +16550,63,0.21293049,0 +16555,63,0.69639763,0 +16556,63,0.36477543,0 +16559,63,0.33335912,0 +16563,63,0.23212921,0 +16567,63,0.08726648,0 +16575,63,-0.41364539,0 +16580,63,-0.4939322,0 +16584,63,-1.02105309,0 +16595,63,1.23575601,0 +16610,63,2.82818708,0 +16611,63,4.15277773,0 +16630,63,5.10252812,0 +16645,63,5.56985881,0 +16660,63,5.90781706,0 +16677,58,5.90781706,0 +16695,58,5.75370588,0 +16704,69,5.75370588,0 +16715,69,5.45431708,0 +16730,69,4.85057814,0 +16750,69,4.24019788,0 +16765,69,3.57246227,0 +16785,69,2.75133282,0 +16791,69,2.19597709,0 +16805,69,1.67043544,0 +16825,69,1.28986984,0 +16840,69,1.12578492,0 +16860,69,1.02803514,0 +16880,69,1.07516425,0 +16900,69,0.94599667,0 +16920,69,0.91283255,0 +16940,69,1.20258982,0 +16980,69,1.13276713,0 +17000,69,0.44157117,0 +17015,69,-0.11344645,0 +17035,69,-0.87443224,0 +17055,69,-2.76879941,0 +17090,69,-5.1987759,0 +17110,69,-7.15580916,0 +17145,69,-7.7086261,0 +17146,69,-7.39267549,0 +17165,69,-6.82608333,0 +17180,69,-6.17933135,0 +17200,69,-5.77121713,0 +17215,69,-5.25652916,0 +17245,69,-4.73512178,0 +17260,69,-3.79616776,0 +17295,69,-2.76530608,0 +17330,69,-1.67392707,0 +17344,0,-1.67392707,30 +17345,63,-1.67392707,0 +17360,63,-0.80985048,0 +17375,63,-0.25307328,0 +17390,63,-0.87268678,0 +17391,63,0.19722246,0 +17394,63,-0.46077018,0 +17400,63,-1.03327169,0 +17404,63,-1.20084424,0 +17406,63,-1.31954549,0 +17410,63,-1.31605423,0 +17413,63,-1.23401041,0 +17416,63,-1.14149491,0 +17420,63,-0.979161,0 +17423,63,-0.77145083,0 +17426,63,-0.52360356,0 +17430,63,-0.8220686,0 +17440,63,-0.979161,0 +17450,63,-1.12927603,0 +17475,63,-1.29336109,0 +17490,63,-1.36842354,0 +17492,63,-1.38064315,0 +17505,63,-1.3701692,0 +17511,63,-1.34573008,0 +17520,63,-1.30383483,0 +17524,63,-1.22353686,0 +17535,63,-1.13276713,0 +17550,63,-1.00185251,0 +17565,63,-0.82905039,0 +17580,63,-0.23038387,0 +17582,63,0.43633508,0 +17610,63,3.37500202,0 +17630,63,4.58994451,0 +17645,63,5.08677939,0 +17647,63,4.9223075,0 +17660,63,4.09333565,0 +17680,63,2.84390768,0 +17684,63,1.72804794,0 +17715,63,-0.5951643,0 +17730,63,-2.48760712,0 +17733,63,-3.85384789,0 +17750,63,-4.97304595,0 +17765,63,-5.46657081,0 +17785,63,-5.33178867,0 +17820,63,-1.39460848,0 +17840,63,-0.80461415,0 +17875,63,-0.431099,0 +17890,63,-0.39619181,0 +17925,63,-0.82032315,0 +17940,63,-0.86395947,0 +17960,63,-0.61261823,0 +17990,63,-0.53756659,0 +18010,63,-0.32986843,0 +18025,63,0.35081262,0 +18040,63,1.10832945,0 +18060,63,1.78042393,0 +18075,63,-0.21293049,0 +18090,63,-0.03839725,0 +18110,63,-0.59341891,0 +18125,63,-1.48887585,0 +18140,63,-2.30598855,0 +18142,63,-2.76530608,0 +18155,63,-3.14612071,0 +18170,63,-3.42742247,0 +18185,63,-3.20202752,0 +18200,63,-2.77403942,0 +18201,63,-2.50507129,0 +18215,63,-2.30773481,0 +18219,63,-2.1104163,0 +18230,63,-1.79613691,0 +18235,63,-1.36493223,0 +18245,63,-0.69814304,0 +18249,63,0.31590565,0 +18260,63,1.13102158,0 +18270,63,1.67567289,0 +18280,63,1.81010409,0 +18295,63,0.91108708,0 +18315,63,1.1956075,0 +18339,0,1.1956075,31 +18340,59,1.1956075,0 +18380,59,2.34615285,0 +18435,59,0.5794558,0 +18460,59,0.14486243,0 +18475,59,0.44331653,0 +18490,59,0.88490503,0 +18515,59,1.18513404,0 +18560,59,0.91981446,0 +18590,59,0.67894351,0 +18620,59,0.98439749,0 +18635,59,1.12054828,0 +18650,59,0.91457803,0 +18665,59,0.38222897,0 +18700,59,0.25307328,0 +18703,59,0.35081262,0 +18730,59,0.40666396,0 +18745,59,0.18675045,0 +18765,59,-0.26179999,0 +18795,59,-0.51487668,0 +18830,59,-0.13962643,0 +18845,59,0.65974403,0 +18880,59,1.82407133,0 +18895,59,2.90679148,0 +18915,59,3.66159052,0 +18930,59,3.99718545,0 +18950,59,3.8660834,0 +18965,59,3.67557195,0 +18980,59,3.27366104,0 +19000,59,2.92950008,0 +19015,59,2.45093286,0 +19030,59,1.9724778,0 +19050,59,1.45221601,0 +19080,59,0.80286871,0 +19095,59,0.32463238,0 +19130,59,-0.12915444,0 +19145,59,-0.17278777,0 +19175,59,-0.26529067,0 +19190,59,-0.30543357,0 +19225,59,-0.32463238,0 +19255,59,-0.28972547,0 +19300,59,-0.20769448,0 +19415,59,-0.29845219,0 +19505,59,-0.47822386,0 +19530,22,-0.47822386,0 +19545,32,-0.47822386,0 +19575,32,-0.47647849,0 +19610,32,-0.41888147,0 +19650,32,-0.33684982,0 +19675,32,-0.07504917,0 +19735,32,0.15184376,0 +19785,17,0.15184376,0 +19810,17,0.35953938,0 +19845,17,0.44157117,0 +19865,17,0.48695071,0 +19870,10,0.48695071,0 +19875,13,0.48695071,0 +19895,18,0.48695071,0 +19910,0,0.48695071,17 +19911,38,0.48695071,0 +19945,38,0.79239606,0 +20000,38,1.03152617,0 +20030,38,1.16593277,0 +20050,33,1.16593277,0 +20100,33,1.32652803,0 +20109,40,1.32652803,0 +20140,40,1.31779986,0 +20185,40,1.30034358,0 +20220,39,1.30034358,0 +20230,39,1.33525622,0 +20265,39,1.37191485,0 +20285,39,1.37889749,0 +20320,45,1.37889749,0 +20365,45,1.33176494,0 +20368,45,1.3247824,0 +20435,45,1.26194003,0 +20495,45,1.21480891,0 +20580,45,1.18338847,0 +20690,45,1.19211635,0 +20820,45,1.2741593,0 +20860,15,1.2741593,0 +20915,15,1.33700186,0 +20925,12,1.33700186,0 +20940,12,1.34747573,0 +20959,0,1.34747573,71 +20960,52,1.34747573,0 +20970,52,-2.080732671,0 +20977,41,-2.080732671,0 +20980,41,-1.941049848,0 +20990,41,-1.757727546,0 +20998,72,-1.757727546,0 +21005,72,-1.555213731,0 +21015,72,-1.232264818,0 +21025,72,-0.680688921,0 +21040,72,0.37524755,0 +21055,72,1.15371382,0 +21065,72,1.652977327,0 +21080,72,1.824071332,0 +21095,72,2.052795475,0 +21097,72,2.344406558,0 +21110,72,2.42473736,0 +21125,72,2.410766564,0 +21140,72,2.337421415,0 +21155,72,2.297257285,0 +21170,72,2.236139374,0 +21174,72,2.110416298,0 +21200,72,2.178515444,0 +21215,72,2.305988554,0 +21235,72,1.962001775,0 +21250,72,1.572671293,0 +21265,72,1.19037077,0 +21285,72,3.623142336,0 +21300,72,4.840081575,0 +21302,72,5.349291746,0 +21310,72,5.554102253,0 +21320,72,5.53659529,0 +21323,72,5.225026951,0 +21335,72,5.137526211,0 +21338,72,4.418555185,0 +21355,72,3.693048931,0 +21356,72,2.953955838,0 +21366,72,2.440454618,0 +21375,72,1.923590039,0 +21379,72,1.333510584,0 +21386,72,0.637053795,0 +21410,72,-0.347321918,0 +21430,72,-0.399682527,0 +21432,72,-0.324632381,0 +21450,72,-0.242601242,0 +21475,72,-0.33684982,0 +21495,70,-0.33684982,0 +21530,70,-0.378738259,0 +21570,70,-0.006981317,0 +21585,84,-0.006981317,0 +21665,84,0.829050388,0 +21730,84,0.860468557,0 +21770,84,0.902359714,0 +21810,84,0.490441452,0 +21811,84,0.064577191,0 +21835,84,-0.157079762,0 +21855,84,-0.230383869,0 +21875,84,-0.294961499,0 +21895,84,-0.298452188,0 +21940,84,-0.300197533,0 +21960,84,-0.356048672,0 +22005,84,-0.593418911,0 +22045,84,-0.886650494,0 +22110,84,-0.685925153,0 +22155,84,-0.061086531,0 +22200,84,0.127409104,0 +22245,84,-0.050614553,0 +22265,84,-0.21991184,0 +22310,84,-0.253073282,0 +22335,84,-0.186750447,0 +22337,84,-0.102974462,0 +22380,84,-0.080285163,0 +22405,84,-0.118682445,0 +22425,84,-0.314160299,0 +22450,84,-0.619599813,0 +22495,84,-0.987888492,0 +22535,84,-1.146731579,0 +22600,84,-1.099601744,0 +22810,84,-0.945996672,0 +22840,84,-0.944251187,0 +22864,0,-0.944251187,17 +22865,52,-0.944251187,0 +22885,52,-0.959960575,0 +22980,52,-0.939014735,0 +23030,52,-0.926796367,0 +23055,52,-0.979161001,0 +23160,39,-0.979161001,0 +23185,51,-0.979161001,0 +23295,51,-0.919814455,0 +23350,51,-0.890141428,0 +23370,26,-0.890141428,0 +23390,41,-0.890141428,0 +23445,41,-1.005343518,0 +23465,41,-1.029780657,0 +23500,41,-1.062945544,0 +23525,41,-1.087382978,0 +23555,16,-1.087382978,0 +23560,16,-1.108329454,0 +23569,58,-1.108329454,0 +23610,58,-1.125784924,0 +23655,58,-1.132767132,0 +23674,0,-1.132767132,14 +23675,25,-1.132767132,0 +23705,25,-1.122293825,0 +23750,14,-1.122293825,0 +23760,26,-1.122293825,0 +23770,26,-1.087382978,0 +23820,26,-1.076909777,0 +23859,0,-1.076909777,14 +23860,35,-1.076909777,0 +23870,35,-1.103092826,0 +23910,35,-1.064691071,0 +23950,35,-0.820323148,0 +24020,35,-0.638799195,0 +24035,35,-0.70687012,0 +24055,21,-0.70687012,0 +24070,35,-0.70687012,0 +24145,35,-1.239247202,0 +24180,35,-1.235756008,0 +24240,19,-1.235756008,0 +24250,19,-1.188625193,0 +24260,42,-1.188625193,0 +24325,42,-1.211317741,0 +24445,42,-1.384134479,0 +24490,11,-1.384134479,0 +24495,35,-1.384134479,0 +24530,35,-1.338747506,0 +24580,35,-1.138003794,0 +24650,35,-0.527094315,0 +24660,19,-0.527094315,0 +24670,47,-0.527094315,0 +24675,47,-0.427608273,0 +24685,47,-0.46251555,0 +24710,47,-0.527094315,0 +24755,47,-0.239110563,0 +24785,47,-0.125663772,0 +24795,47,-0.223402516,0 +24900,47,-0.322887034,0 +24930,47,-0.106465125,0 +24980,47,0.832541288,0 +25035,19,0.832541288,0 +25050,30,0.832541288,0 +25065,30,0.357794023,0 +25140,30,-0.171042433,0 +25185,16,-0.171042433,0 +25195,30,-0.171042433,0 +25295,30,-1.17640618,0 +25300,12,-1.17640618,0 +25305,21,-1.17640618,0 +25379,0,-1.17640618,200 +25380,36,-1.17640618,0 +25410,36,-2.391556873,0 +25415,14,-2.391556873,0 +25420,32,-2.391556873,0 +25475,32,-2.651776441,0 +25550,32,-1.96549378,0 +25585,16,-1.96549378,0 +25590,34,-1.96549378,0 +25685,11,-0.911087077,0 +25690,34,-0.911087077,0 +25775,34,-0.26703601,0 +25778,31,-0.26703601,0 +25810,31,-0.315905645,0 +25850,31,-0.680688921,0 +25859,32,-0.680688921,0 +25870,32,-0.883159562,0 +25900,32,-1.005343518,0 +25901,21,-1.005343518,0 +25915,46,-1.005343518,0 +25920,46,-1.03676272,0 +25935,46,-0.9983615,0 +25960,46,-0.911087077,0 +25970,46,-0.844759452,0 +25995,46,-0.78192344,0 +25999,46,-0.090757146,0 +26015,46,-0.097738469,0 +26025,46,0.010471976,0 +26045,46,0.705124704,0 +26065,46,1.745506493,0 +26075,46,2.606366514,0 +26085,46,3.402959358,0 +26100,46,-4.682645801,0 +26108,46,4.126552924,0 +26110,46,4.518237595,0 +26120,46,4.635419621,0 +26125,46,4.500748811,0 +26135,46,4.234952486,0 +26145,46,3.899294646,0 +26155,46,3.546249164,0 +26156,46,3.109432943,0 +26165,46,2.618592157,0 +26175,46,2.157561649,0 +26190,46,1.439996153,0 +26200,46,1.087382978,0 +26210,46,0.682434331,0 +26220,46,-0.005235988,0 +26275,46,-2.232646972,0 +26285,17,-2.232646972,0 +26300,62,-2.232646972,0 +26320,62,-4.565458695,0 +26340,62,-4.995791603,0 +26360,62,-4.749115814,0 +26375,62,-4.147532721,0 +26385,62,-3.037806838,0 +26415,62,2.672735236,0 +26422,62,-1.752489945,0 +26425,62,-1.534264783,0 +26445,62,-1.165932768,0 +26460,62,-0.506149805,0 +26475,62,-0.062831861,0 +26490,62,0.438080445,0 +26505,62,1.138003794,0 +26515,62,1.813595892,0 +26530,62,2.103431882,0 +26545,62,2.05454154,0 +26560,62,1.59012895,0 +26575,62,1.342238792,0 +26577,62,1.343984436,0 +26590,62,0.811595921,0 +26605,62,0.506149805,0 +26615,62,0.431098996,0 +26625,62,0.504404432,0 +26640,62,0.58992813,0 +26641,62,0.66847106,0 +26649,62,0.712106371,0 +26655,62,0.778432569,0 +26690,62,0.804614148,0 +26790,62,0.408409316,0 +26805,62,0.343831218,0 +26806,62,0.254818622,0 +26820,62,0.186750447,0 +26835,62,0.116937113,0 +26836,62,0.045378564,0 +26850,62,-0.013962634,0 +26860,45,-0.013962634,0 +26875,45,-0.143117096,0 +26885,56,-0.143117096,0 +26930,56,-0.286234779,0 +26975,56,-0.274017378,0 +27020,54,-0.274017378,0 +27035,54,0.010471976,0 +27065,54,0.753996525,0 +27080,54,1.371914854,0 +27095,57,1.371914854,0 +27170,57,1.532519043,0 +27235,57,1.003598012,0 +27250,57,0.720833466,0 +27265,57,0.464260917,0 +27280,57,0.246091921,0 +27300,57,0.385719678,0 +27308,40,0.385719678,0 +27325,62,0.385719678,0 +27340,62,0.764469104,0 +27365,62,0.610872837,0 +27395,62,0.130899769,0 +27415,62,-0.630072198,0 +27430,62,-2.346152847,0 +27445,62,-3.839864594,0 +27465,62,-4.780603067,0 +27466,62,-5.023786958,0 +27480,62,-4.554964943,0 +27500,62,-3.502561733,0 +27515,62,-1.647739913,0 +27530,62,-1.55346798,0 +27550,62,-2.230900774,0 +27635,62,-1.640756708,0 +27660,62,-0.928541847,0 +27670,62,0.364775432,0 +27690,62,2.180261603,0 +27691,18,2.180261603,0 +27696,0,2.180261603,20 +27697,18,2.180261603,0 +27700,18,3.381991302,0 +27702,53,3.381991302,0 +27710,53,3.696544354,0 +27750,53,3.492076949,0 +27820,53,3.591685526,0 +27830,53,2.730373139,0 +27845,53,1.429522021,0 +27860,53,-1.303834827,0 +27885,53,-1.228773631,0 +27886,53,-1.179897323,0 +27900,53,-1.096110665,0 +27910,53,-1.029780657,0 +27950,80,-4.74,0 +27956,80,-4.55,0 +27964,80,-4.45,0 +27971,80,-4.35,0 +27978,80,-4.26,0 +27984,80,-4.16,0 +27989,80,-4.05,0 +27994,80,-3.94,0 +27998,80,-3.85,0 +28001,80,-3.71,0 +28007,80,-3.5,0 +28013,80,-3.29,0 +28018,80,-3.09,0 +28023,80,-2.95,0 +28025,80,-2.79,0 +28028,76,-2.79,0 +28030,77,-2.79,0 +28031,77,-2.65,0 +28033,77,-2.51,0 +28039,77,-2.36,0 +28042,77,-2.2,0 +28049,77,-2.04,0 +28052,77,-1.94,0 +28055,77,-1.85,0 +28057,77,-1.7,0 +28063,77,-1.54,0 +28066,77,-1.45,0 +28068,77,-1.3,0 +28074,77,-1.15,0 +28076,77,-1.01,0 +28082,77,-0.8,0 +28089,77,-0.63,0 +28092,77,-0.48,0 +28098,77,-0.29,0 +28104,77,-0.15,0 +28107,77,0,0 +28114,77,0.2,0 +28121,77,0.41,0 +28122,76,0.41,0 +28128,76,0.61,0 +28134,76,0.76,0 +28138,76,0.86,0 +28142,76,1.02,0 +28187,76,0.85,0 +28196,76,0.75,0 +28205,76,0.65,0 +28214,76,0.55,0 +28224,76,0.4,0 +28234,73,0.4,0 +28246,73,0.25,0 +28257,73,0.15,0 +28258,75,0.15,0 +28266,75,0.05,0 +28274,75,-0.05,0 +28281,75,-0.2,0 +28297,75,-0.35,0 +28305,75,-0.5,0 +28324,75,-0.71,0 +28344,75,-0.91,0 +28362,75,-1.05,0 +28373,75,-1.18,0 +28485,75,-1.06,0 +28534,75,-0.95,0 +28570,75,-0.79,0 +28695,75,-0.65,0 +28739,75,-0.5,0 +28891,75,-0.35,0 +28939,75,-0.2,0 +29064,75,0,0 +29191,75,0.14,0 +29231,75,0.3,0 +29381,75,0.53,0 +29510,75,0.65,0 +29535,75,0.76,0 +29585,75,0.87,0 +29769,75,0.78,0 +29884,75,0.97,0 +30050,75,0.91,0 +30087,75,0.79,0 +30208,75,0.88,0 +30267,75,0.73,0 +30351,75,0.88,0 +30463,75,0.76,0 +30477,75,0.64,0 +30486,75,0.5,0 +30508,75,0.35,0 +30518,75,0.25,0 +30529,75,0.09,0 +30553,75,-0.05,0 +30564,75,-0.15,0 +30579,75,-0.29,0 +30672,75,-0.52,0 +30925,75,-0.65,0 +30943,75,-0.75,0 +30954,75,-0.85,0 +30963,75,-1,0 +30982,75,-1.15,0 +30991,75,-1.3,0 +31009,75,-1.45,0 +31017,75,-1.55,0 +31025,75,-1.7,0 +31029,78,-1.7,0 +31039,78,-1.85,0 +31047,78,-1.95,0 +31055,78,-2.05,0 +31064,78,-2.15,0 +31073,78,-2.25,0 +31083,78,-2.4,0 +31105,78,-2.55,0 +31115,78,-2.65,0 +31124,78,-2.75,0 +31133,78,-2.85,0 +31140,78,-2.95,0 +31148,78,-3.1,0 +31167,78,-3.25,0 +31176,78,-3.35,0 +31184,78,-3.45,0 +31191,78,-3.55,0 +31198,78,-3.65,0 +31204,78,-3.75,0 +31211,78,-3.85,0 +31218,78,-3.95,0 +31226,78,-4.05,0 +31236,78,-4.2,0 +31261,74,-4.2,0 +31263,75,-4.2,0 +31322,74,-4.2,0 +31324,80,-4.2,0 +31382,80,-4.05,0 +31395,80,-3.95,0 +31405,80,-3.8,0 +31423,80,-3.65,0 +31433,80,-3.55,0 +31444,80,-3.45,0 +31459,80,-3.31,0 +31498,80,-3.15,0 +31504,78,-3.15,0 +31508,78,-3.05,0 +31516,78,-2.95,0 +31524,78,-2.85,0 +31531,78,-2.75,0 +31538,78,-2.65,0 +31545,78,-2.55,0 +31553,78,-2.45,0 +31562,78,-2.35,0 +31572,78,-2.25,0 +31583,78,-2.1,0 +31609,78,-1.95,0 +31622,78,-1.85,0 +31633,78,-1.75,0 +31642,78,-1.6,0 +31660,78,-1.45,0 +31668,78,-1.3,0 +31684,78,-1.16,0 +31692,78,-1.05,0 +31700,78,-0.9,0 +31719,78,-0.75,0 +31728,78,-0.65,0 +31738,78,-0.5,0 +31760,78,-0.29,0 +31781,78,-0.14,0 +31785,77,-0.14,0 +31791,77,-0.05,0 +31801,77,0.05,0 +31813,77,0.15,0 +31831,77,0.29,0 +31855,76,0.29,0 +31857,75,0.29,0 +32106,75,0.34,0 +32174,75,0.21,0 +32184,75,0.14,0 +32221,75,-0.01,0 +32376,75,-0.15,0 +32427,75,-0.3,0 +32781,75,-0.5,0 +32802,75,-0.67,0 +32837,75,-0.55,0 +32842,75,-0.45,0 +32845,75,-0.35,0 +32848,75,-0.25,0 +32850,75,-0.12,0 +32854,75,0.1,0 +32858,75,0.27,0 +32860,75,0.42,0 +32863,75,0.61,0 +32866,75,0.81,0 +32868,28,0.81,0 +32869,28,1.01,0 +32870,37,1.01,0 +32872,37,1.23,0 +32875,37,1.46,0 +32878,37,1.7,0 +32881,37,1.85,0 +32882,37,2.01,0 +32885,37,2.24,0 +32888,37,2.44,0 +32890,37,2.55,0 +32891,37,2.71,0 +32894,37,2.92,0 +32897,37,3.13,0 +32900,37,3.25,0 +32901,37,3.39,0 +32905,37,3.54,0 +32907,37,3.65,0 +32910,37,3.76,0 +32913,37,3.92,0 +32961,37,3.75,0 +32965,37,3.66,0 +32968,37,3.56,0 +32971,37,3.39,0 +32976,37,3.23,0 +32978,37,3.09,0 +32982,37,2.89,0 +32987,37,2.75,0 +32989,37,2.65,0 +32992,37,2.55,0 +32995,37,2.45,0 +32999,37,2.35,0 +33003,37,2.25,0 +33006,11,2.25,0 +33008,50,2.15,0 +33015,50,2.02,0 +33079,50,1.85,0 +33088,50,1.7,0 +33109,50,1.55,0 +33117,50,1.45,0 +33123,50,1.35,0 +33130,50,1.25,0 +33136,50,1.15,0 +33144,50,1.05,0 +33153,50,0.88,0 +33233,64,0.88,0 +33294,64,1.05,0 +33318,64,1.22,0 +33394,64,1.34,0 +33415,64,1.45,0 +33429,64,1.55,0 +33431,63,1.55,0 +33441,63,1.65,0 +33451,63,1.8,0 +33469,63,1.95,0 +33472,65,1.95,0 +33479,65,2.1,0 +33501,65,2.25,0 +33510,65,2.4,0 +33527,65,2.61,0 +33544,65,2.75,0 +33552,65,2.85,0 +33560,65,2.95,0 +33568,65,3.05,0 +33577,65,3.15,0 +33587,65,3.29,0 +33648,65,3.18,0 +33682,74,3.18,0 +33738,74,3.05,0 +33750,74,2.95,0 +33758,74,2.85,0 +33766,74,2.75,0 +33774,74,2.61,0 +33792,74,2.4,0 +33810,74,2.25,0 +33818,74,2.15,0 +33824,74,2.05,0 +33830,74,1.95,0 +33835,74,1.8,0 +33845,74,1.65,0 +33849,74,1.5,0 +33859,74,1.35,0 +33863,74,1.25,0 +33868,74,1.15,0 +33874,74,1.05,0 +33883,74,0.88,0 +33956,74,0.75,0 +33976,74,0.65,0 +33990,74,0.55,0 +34002,74,0.45,0 +34016,74,0.35,0 +34031,74,0.2,0 +34064,74,0.05,0 +34077,74,-0.04,0 +34087,74,-0.15,0 +34096,74,-0.25,0 +34104,74,-0.35,0 +34106,75,-0.35,0 +34111,75,-0.45,0 +34119,75,-0.55,0 +34128,75,-0.7,0 +34149,75,-0.9,0 +34170,75,-1.05,0 +34178,76,-1.05,0 +34180,76,-1.15,0 +34189,76,-1.25,0 +34197,76,-1.35,0 +34206,76,-1.46,0 +34216,76,-1.55,0 +34230,76,-1.65,0 +34247,76,-1.76,0 +34269,76,-1.88,0 +34302,79,-1.88,0 +34354,79,-1.79,0 +34484,79,-1.95,0 +34512,79,-1.97,0 +34531,79,-1.85,0 +34542,79,-1.66,0 +34611,79,-1.76,0 +34630,79,-1.89,0 +34764,79,-2.09,0 +34852,79,-1.95,0 +34866,79,-1.79,0 +35019,79,-2,0 +35090,79,-1.85,0 +35099,79,-1.75,0 +35105,79,-1.65,0 +35111,79,-1.55,0 +35116,79,-1.45,0 +35121,79,-1.3,0 +35130,79,-1.1,0 +35139,79,-0.95,0 +35143,79,-0.81,0 +35151,79,-0.61,0 +35159,79,-0.4,0 +35167,79,-0.25,0 +35170,79,-0.11,0 +35178,79,0.1,0 +35186,79,0.3,0 +35194,79,0.45,0 +35198,79,0.6,0 +35207,79,0.81,0 +35216,79,0.95,0 +35220,79,1.05,0 +35225,79,1.21,0 +35236,79,1.35,0 +35241,79,1.45,0 +35248,79,1.55,0 +35256,79,1.66,0 +35277,79,1.81,0 +35309,74,1.81,0 +35311,75,1.81,0 +35422,75,1.65,0 +35431,75,1.55,0 +35438,75,1.45,0 +35444,75,1.3,0 +35456,75,1.15,0 +35462,75,1.05,0 +35467,75,0.95,0 +35473,75,0.85,0 +35480,75,0.75,0 +35487,75,0.65,0 +35495,75,0.55,0 +35503,75,0.45,0 +35514,75,0.3,0 +35545,75,0.15,0 +35556,75,0.05,0 +35566,75,-0.05,0 +35575,75,-0.15,0 +35585,75,-0.25,0 +35600,75,-0.39,0 +35758,75,-0.6,0 +35855,75,-0.37,0 +35957,75,-0.25,0 +35971,75,-0.15,0 +35987,75,-0.05,0 +35999,75,0.05,0 +36005,75,0.2,0 +36017,75,0.35,0 +36023,75,0.46,0 +36029,75,0.56,0 +36039,75,0.69,0 +36068,75,0.85,0 +36076,75,0.95,0 +36082,75,1.11,0 +36093,75,1.26,0 +36098,75,1.41,0 +36103,74,1.41,0 +36108,74,1.55,0 +36112,74,1.7,0 +36120,74,1.91,0 +36128,74,2.05,0 +36131,74,2.2,0 +36139,74,2.35,0 +36143,74,2.45,0 +36148,74,2.55,0 +36153,74,2.65,0 +36160,74,2.76,0 +36168,74,2.89,0 +36228,74,2.75,0 +36252,74,2.66,0 +36267,74,2.55,0 +36278,74,2.44,0 +36342,74,2.21,0 +36422,74,2.06,0 +36439,74,1.95,0 +36449,74,1.85,0 +36456,74,1.75,0 +36463,74,1.65,0 +36468,74,1.5,0 +36476,42,1.5,0 +36479,42,1.35,0 +36484,42,1.25,0 +36490,42,1.11,0 +36525,42,1.25,0 +36531,42,1.35,0 +36536,42,1.45,0 +36541,42,1.55,0 +36545,42,1.7,0 +36553,42,1.91,0 +36560,42,2.13,0 +36567,42,2.27,0 +36569,42,2.4,0 +36577,42,2.56,0 +36581,42,2.66,0 +36586,42,2.83,0 +36620,42,2.65,0 +36624,42,2.55,0 +36628,42,2.45,0 +36631,42,2.31,0 +36637,42,2.11,0 +36643,42,1.91,0 +36649,42,1.7,0 +36656,42,1.55,0 +36659,42,1.45,0 +36663,42,1.35,0 +36664,38,1.35,0 +36666,39,1.35,0 +36668,39,1.25,0 +36675,39,1.15,0 +36683,39,1.05,0 +36698,39,0.88,0 +36704,40,0.88,0 +36762,41,0.88,0 +36774,41,1.05,0 +36786,41,1.15,0 +36797,41,1.25,0 +36808,41,1.36,0 +36818,41,1.46,0 +36833,41,1.55,0 +36848,41,1.7,0 +36939,41,1.55,0 +36949,41,1.45,0 +36959,41,1.35,0 +36972,41,1.22,0 +37056,35,1.22,0 +37058,76,1.22,0 +37066,76,1.34,0 +37074,76,1.45,0 +37080,76,1.55,0 +37085,76,1.65,0 +37090,76,1.75,0 +37094,76,1.85,0 +37099,76,1.95,0 +37104,76,2.1,0 +37130,76,1.96,0 +37133,76,1.81,0 +37139,76,1.59,0 +37144,76,1.43,0 +37146,76,1.28,0 +37150,76,1.15,0 +37151,76,1.02,0 +37155,76,0.8,0 +37159,76,0.63,0 +37161,76,0.55,0 +37162,76,0.4,0 +37166,76,0.23,0 +37168,76,0.15,0 +37169,76,0,0 +37173,76,-0.17,0 +37175,76,-0.26,0 +37176,76,-0.4,0 +37180,76,-0.55,0 +37181,76,-0.69,0 +37185,76,-0.91,0 +37189,76,-1.12,0 +37193,76,-1.32,0 +37197,76,-1.46,0 +37199,76,-1.55,0 +37201,76,-1.7,0 +37207,76,-1.86,0 +37210,76,-1.96,0 +37214,76,-2.06,0 +37219,76,-2.16,0 +37226,76,-2.28,0 +37533,76,-2.15,0 +37549,76,-2.05,0 +37563,76,-1.95,0 +37576,76,-1.85,0 +37590,76,-1.75,0 +37604,76,-1.65,0 +37619,76,-1.5,0 +37654,76,-1.35,0 +37668,76,-1.25,0 +37680,76,-1.15,0 +37690,76,-1.05,0 +37704,76,-0.95,0 +37722,76,-0.85,0 +37737,76,-0.7,0 +37775,76,-0.55,0 +37791,76,-0.45,0 +37806,76,-0.35,0 +37820,76,-0.25,0 +37832,76,-0.15,0 +37847,76,0.01,0 +37884,76,0.15,0 +37887,75,0.15,0 +37900,75,0.25,0 +37911,75,0.35,0 +37924,75,0.45,0 +37926,74,0.45,0 +37934,74,0.55,0 +37944,74,0.71,0 +37950,45,1.81,0 +37962,45,1.64,0 +37969,45,1.55,0 +37976,45,1.45,0 +37984,45,1.3,0 +38024,45,1.48,0 +38042,52,1.48,0 +38155,52,1.36,0 +38156,66,1.36,0 +38174,66,1.25,0 +38187,66,1.1,0 +38212,66,0.9,0 +38236,66,0.75,0 +38248,66,0.61,0 +38312,66,0.75,0 +38326,66,0.85,0 +38339,66,0.95,0 +38351,66,1.05,0 +38363,66,1.15,0 +38375,66,1.25,0 +38388,66,1.41,0 +38416,66,1.55,0 +38429,68,1.65,0 +38440,68,1.75,0 +38451,68,1.85,0 +38462,68,2,0 +38491,68,2.15,0 +38505,68,2.25,0 +38517,68,2.35,0 +38530,68,2.53,0 +38663,73,2.53,0 +38664,73,2.35,0 +38672,73,2.25,0 +38678,73,2.15,0 +38684,73,2.05,0 +38689,73,1.95,0 +38694,73,1.8,0 +38705,73,1.65,0 +38710,73,1.5,0 +38720,73,1.3,0 +38731,73,1.09,0 +38742,73,0.89,0 +38753,73,0.74,0 +38758,73,0.6,0 +38768,73,0.4,0 +38778,73,0.19,0 +38788,73,-0.01,0 +38798,73,-0.21,0 +38809,73,-0.41,0 +38820,73,-0.61,0 +38830,73,-0.8,0 +38840,73,-0.96,0 +38845,73,-1.11,0 +38854,73,-1.25,0 +38858,73,-1.4,0 +38868,85,-1.6,0 +38879,85,-1.76,0 +38884,85,-1.91,0 +38894,85,-2.06,0 +38899,85,-2.15,0 +38903,85,-2.29,0 +38913,85,-2.49,0 +38923,85,-2.7,0 +38934,85,-2.91,0 +38945,85,-3.11,0 +38955,85,-3.31,0 +38965,85,-3.45,0 +38970,85,-3.6,0 +38981,85,-3.75,0 +38986,85,-3.85,0 +38992,85,-3.95,0 +38998,85,-4.05,0 +39005,85,-4.15,0 +39014,85,-4.3,0 +39250,85,-4.16,0 +39273,85,-3.99,0 +39318,85,-3.85,0 +39337,85,-3.75,0 +39351,85,-3.65,0 +39364,85,-3.55,0 +39376,85,-3.45,0 +39388,85,-3.35,0 +39399,85,-3.25,0 +39411,85,-3.08,0 +39490,83,-3.08,0 +39502,83,-3.02,0 +39571,85,-3.02,0 +39640,85,-3.15,0 +39659,85,-3.3,0 +39816,85,-3.06,0 +39934,85,-2.95,0 +39949,85,-2.85,0 +39963,85,-2.7,0 +39995,85,-2.56,0 +40009,85,-2.45,0 +40020,85,-2.35,0 +40030,85,-2.25,0 +40041,85,-2.09,0 +40114,85,-1.95,0 +40133,85,-1.89,0 +40155,84,-1.89,0 +40176,84,-2.05,0 +40185,84,-2.15,0 +40194,84,-2.27,0 +40892,84,-2.16,0 +40953,84,-2.06,0 +40971,84,-1.95,0 +40980,84,-1.85,0 +40988,84,-1.75,0 +40994,84,-1.65,0 +40999,84,-1.55,0 +41004,84,-1.4,0 +41013,84,-1.25,0 +41017,84,-1.11,0 +41025,84,-0.91,0 +41033,84,-0.74,0 +41037,84,-0.59,0 +41044,84,-0.45,0 +41047,84,-0.3,0 +41055,84,-0.09,0 +41062,84,0.06,0 +41065,84,0.2,0 +41071,84,0.34,0 +41074,84,0.5,0 +41081,84,0.7,0 +41087,84,0.9,0 +41095,84,1.05,0 +41099,84,1.15,0 +41104,84,1.26,0 +41109,84,1.42,0 +41151,84,1.25,0 +41158,84,1.1,0 +41173,84,0.95,0 +41181,84,0.85,0 +41188,84,0.7,0 +41205,84,0.5,0 +41224,84,0.35,0 +41233,84,0.2,0 +41254,84,0.05,0 +41264,84,-0.05,0 +41273,84,-0.15,0 +41281,84,-0.3,0 +41297,84,-0.45,0 +41305,84,-0.6,0 +41319,84,-0.75,0 +41327,84,-0.85,0 +41335,84,-1,0 +41336,58,-1,0 +41354,58,-1.15,0 +41364,58,-1.25,0 +41375,58,-1.4,0 +41393,60,-1.4,0 +41399,60,-1.55,0 +41411,60,-1.65,0 +41424,60,-1.8,0 +41537,60,-1.7,0 +41550,60,-1.79,0 +41703,60,-1.67,0 +41753,60,-1.85,0 +41758,60,-1.95,0 +41762,60,-2.05,0 +41765,60,-2.21,0 +41771,60,-2.36,0 +41773,60,-2.44,0 +41775,60,-2.6,0 +41780,60,-2.83,0 +41784,60,-3.03,0 +41787,60,-3.15,0 +41788,60,-3.3,0 +41792,60,-3.54,0 +41795,60,-3.74,0 +41798,60,-3.95,0 +41801,60,-4.16,0 +41804,60,-4.36,0 +41807,60,-4.56,0 +41810,60,-4.72,0 +41812,60,-4.91,0 +41816,60,-5.05,0 +41817,60,-5.19,0 +41821,60,-5.34,0 +41823,60,-5.44,0 +41825,60,-5.6,0 +41831,60,-5.76,0 +41834,60,-5.85,0 +41837,60,-5.94,0 +41842,60,-6.09,0 +41869,60,-5.96,0 +41873,60,-5.86,0 +41876,60,-5.75,0 +41879,60,-5.64,0 +41881,60,-5.54,0 +41883,60,-5.45,0 +41884,60,-5.3,0 +41888,60,-5.06,0 +41891,60,-4.86,0 +41893,60,-4.7,0 +41895,60,-4.52,0 +41897,60,-4.33,0 +41899,60,-4.14,0 +41901,60,-3.94,0 +41903,60,-3.73,0 +41905,60,-3.52,0 +41907,60,-3.31,0 +41909,60,-3.1,0 +41911,60,-2.89,0 +41913,60,-2.69,0 +41915,60,-2.5,0 +41917,60,-2.31,0 +41919,60,-2.09,0 +41922,60,-1.85,0 +41925,60,-1.64,0 +41928,60,-1.48,0 +41930,60,-1.3,0 +41935,60,-1.09,0 +41939,60,-0.96,0 +41942,60,-0.85,0 +41946,60,-0.69,0 +41954,25,-0.69,0 +41955,25,-0.54,0 +41959,25,-0.45,0 +41962,25,-0.3,0 +41968,25,-0.15,0 +41971,25,-0.04,0 +41975,25,0.08,0 +41989,0,0.08,15 +41990,20,0.08,0 +41991,46,0.08,0 +41992,46,-0.04,0 +41996,46,-0.16,0 +41999,46,-0.26,0 +42001,46,-0.39,0 +42005,46,-0.58,0 +42009,46,-0.78,0 +42013,46,-1,0 +42017,46,-1.15,0 +42018,46,-1.3,0 +42022,46,-1.44,0 +42023,46,-1.59,0 +42027,46,-1.76,0 +42029,46,-1.85,0 +42030,46,-1.99,0 +42034,46,-2.21,0 +42038,46,-2.42,0 +42042,46,-2.57,0 +42044,46,-2.66,0 +42046,46,-2.75,0 +42049,46,-2.92,0 +42079,46,-2.75,0 +42084,46,-2.65,0 +42089,46,-2.5,0 +42098,46,-2.34,0 +42102,46,-2.25,0 +42105,46,-2.1,0 +42113,46,-1.88,0 +42120,46,-1.67,0 +42127,46,-1.46,0 +42134,46,-1.34,0 +42136,46,-1.21,0 +42137,45,-1.21,0 +42144,45,-1.06,0 +42148,45,-0.9,0 +42157,45,-0.69,0 +42166,45,-0.55,0 +42170,45,-0.41,0 +42180,45,-0.25,0 +42185,45,-0.1,0 +42194,45,0.05,0 +42198,45,0.15,0 +42202,45,0.3,0 +42211,45,0.45,0 +42215,45,0.55,0 +42221,45,0.65,0 +42227,45,0.78,0 +42260,45,0.65,0 +42266,45,0.55,0 +42272,45,0.45,0 +42276,45,0.31,0 +42284,45,0.15,0 +42288,45,-0.01,0 +42295,45,-0.23,0 +42302,45,-0.36,0 +42304,45,-0.45,0 +42308,45,-0.54,0 +42312,45,-0.65,0 +42318,45,-0.75,0 +42324,45,-0.89,0 +42365,45,-0.75,0 +42370,45,-0.65,0 +42375,45,-0.55,0 +42379,45,-0.4,0 +42383,0,-0.4,20 +42384,45,-0.4,0 +42387,45,-0.26,0 +42391,45,-0.16,0 +42395,45,-0.05,0 +42397,34,-0.05,0 +42400,34,0.05,0 +42406,34,0.16,0 +42413,34,0.26,0 +42423,34,0.4,0 +42448,34,0.55,0 +42455,34,0.65,0 +42461,34,0.75,0 +42466,34,0.85,0 +42470,34,1,0 +42478,34,1.16,0 +42481,34,1.26,0 +42484,34,1.35,0 +42486,34,1.5,0 +42492,34,1.65,0 +42493,33,1.65,0 +42494,33,1.79,0 +42500,33,2,0 +42502,51,2,0 +42506,51,2.21,0 +42512,51,2.35,0 +42515,51,2.51,0 +42523,51,2.65,0 +42527,51,2.74,0 +42532,51,2.9,0 +42543,51,3.06,0 +42548,51,3.16,0 +42553,51,3.25,0 +42557,51,3.34,0 +42562,51,3.45,0 +42567,51,3.55,0 +42573,51,3.65,0 +42579,51,3.75,0 +42586,51,3.85,0 +42593,51,3.95,0 +42602,51,4.1,0 +42646,51,3.94,0 +42652,51,3.85,0 +42657,51,3.7,0 +42667,51,3.54,0 +42671,51,3.4,0 +42679,51,3.2,0 +42687,51,3.05,0 +42691,51,2.9,0 +42700,51,2.75,0 +42704,51,2.6,0 +42714,51,2.41,0 +42724,51,2.26,0 +42729,51,2.15,0 +42734,51,2.05,0 +42740,51,1.9,0 +42755,51,1.75,0 +42762,51,1.65,0 +42768,51,1.5,0 +42780,51,1.3,0 +42791,51,1.15,0 +42796,51,1,0 +42808,51,0.85,0 +42814,61,0.75,0 +42819,61,0.59,0 +42828,61,0.44,0 +42832,61,0.3,0 +42840,61,0.14,0 +42844,61,-0.01,0 +42851,61,-0.15,0 +42854,61,-0.3,0 +42862,61,-0.5,0 +42870,61,-0.71,0 +42878,61,-0.85,0 +42882,61,-0.95,0 +42887,61,-1.05,0 +42892,61,-1.15,0 +42898,61,-1.25,0 +42904,61,-1.35,0 +42911,61,-1.45,0 +42919,61,-1.55,0 +42927,61,-1.65,0 +42937,61,-1.75,0 +42949,61,-1.9,0 +42977,61,-2.11,0 +43026,61,-1.95,0 +43033,61,-1.84,0 +43039,61,-1.7,0 +43051,61,-1.5,0 +43064,61,-1.3,0 +43076,61,-1.1,0 +43091,61,-0.95,0 +43097,61,-0.8,0 +43110,61,-0.59,0 +43122,61,-0.44,0 +43128,61,-0.35,0 +43134,61,-0.25,0 +43141,61,-0.09,0 +43165,61,0.05,0 +43176,61,0.15,0 +43178,69,0.15,0 +43185,69,0.25,0 +43307,69,0.11,0 +43501,69,0.25,0 +43513,69,0.35,0 +43522,69,0.45,0 +43529,69,0.55,0 +43537,69,0.69,0 +43582,69,0.55,0 +43591,69,0.4,0 +43605,69,0.25,0 +43614,69,0.15,0 +43748,69,-0.05,0 +43758,69,-0.15,0 +43768,69,-0.29,0 +43772,65,-0.29,0 +43824,65,-0.15,0 +43833,65,0,0 +43853,65,0.15,0 +43863,65,0.25,0 +43875,65,0.4,0 +44030,65,0.3,0 +44081,65,0.45,0 +44090,65,0.55,0 +44098,65,0.65,0 +44105,65,0.75,0 +44111,65,0.85,0 +44117,65,0.95,0 +44123,65,1.05,0 +44131,65,1.19,0 +44174,65,1.06,0 +44181,65,0.95,0 +44188,65,0.85,0 +44195,65,0.74,0 +44203,65,0.65,0 +44213,65,0.5,0 +44229,55,0.5,0 +44238,55,0.35,0 +44247,55,0.25,0 +44254,55,0.15,0 +44261,55,0.01,0 +44266,59,0.01,0 +44304,59,0.15,0 +44313,59,0.25,0 +44321,59,0.35,0 +44328,59,0.45,0 +44336,59,0.58,0 +44434,60,0.58,0 +44549,60,0.67,0 +44574,62,0.67,0 +44586,62,0.49,0 +44665,61,0.49,0 +44980,61,0.35,0 +45001,61,0.25,0 +45023,61,0.15,0 +45039,61,0,0 +45068,61,-0.15,0 +45083,61,-0.29,0 +45131,61,-0.44,0 +45143,61,-0.55,0 +45155,61,-0.71,0 +45244,61,-0.56,0 +45257,61,-0.45,0 +45266,61,-0.35,0 +45274,61,-0.25,0 +45282,61,-0.15,0 +45290,61,-0.05,0 +45299,61,0.1,0 +45320,61,0.25,0 +45330,61,0.35,0 +45339,61,0.45,0 +45349,61,0.55,0 +45362,61,0.65,0 +45374,61,0.77,0 +45389,59,0.77,0 +45391,60,0.77,0 +45428,60,0.59,0 +45510,60,0.74,0 +45552,60,0.85,0 +45570,60,0.95,0 +45584,60,1.08,0 +45677,60,0.95,0 +45689,60,0.85,0 +45697,69,0.75,0 +45705,69,0.6,0 +45724,69,0.45,0 +45732,69,0.35,0 +45740,69,0.25,0 +45748,69,0.08,0 +45805,69,0.25,0 +45818,69,0.35,0 +45832,69,0.46,0 +45856,69,0.57,0 +46008,70,0.57,0 +46192,70,0.48,0 +46291,70,0.72,0 +46330,70,0.86,0 +46346,70,0.95,0 +46359,70,1.05,0 +46371,70,1.2,0 +46439,70,1.05,0 +46449,70,0.95,0 +46459,70,0.85,0 +46470,70,0.69,0 +46510,70,0.56,0 +46522,70,0.45,0 +46533,70,0.3,0 +46587,70,0.45,0 +46596,70,0.56,0 +46610,70,0.66,0 +46703,70,0.78,0 +46897,70,0.66,0 +46976,70,0.86,0 +47026,70,0.69,0 +47125,70,0.85,0 +47135,70,1.03,0 +47217,70,0.85,0 +47224,70,0.75,0 +47231,70,0.59,0 +47242,70,0.45,0 +47248,70,0.35,0 +47255,70,0.25,0 +47264,70,0.15,0 +47274,70,-0.01,0 +47303,70,-0.2,0 +47355,70,-0.05,0 +47362,70,0.05,0 +47368,70,0.15,0 +47374,70,0.25,0 +47380,70,0.35,0 +47387,70,0.45,0 +47398,70,0.62,0 +47455,70,0.47,0 +47553,70,0.31,0 +47608,70,0.45,0 +47620,70,0.54,0 +47632,70,0.65,0 +47641,70,0.75,0 +47647,70,0.85,0 +47652,70,0.95,0 +47658,70,1.06,0 +47664,70,1.15,0 +47674,70,1.34,0 +47762,70,1.45,0 +47769,69,1.45,0 +47771,70,1.45,0 +47773,70,1.56,0 +47820,70,1.46,0 +47841,70,1.35,0 +47849,70,1.25,0 +47856,70,1.15,0 +47864,70,1.05,0 +47872,70,0.95,0 +47882,70,0.85,0 +47893,70,0.75,0 +47905,70,0.6,0 +47950,51,4.5396,0 +47951,51,4.5454,0 +47952,51,4.5512,0 +47953,51,4.5575,0 +47954,51,4.5636,0 +47955,51,4.5697,0 +47956,51,4.5758,0 +47957,51,4.5825,0 +47958,51,4.5894,0 +47959,51,4.5961,0 +47960,51,4.6028,0 +47961,51,4.6098,0 +47962,51,4.6168,0 +47963,51,4.6241,0 +47964,51,4.6315,0 +47965,51,4.639,0 +47966,51,4.6469,0 +47967,51,4.6555,0 +47968,51,4.6645,0 +47969,51,4.6738,0 +47970,51,4.6839,0 +47971,51,4.6952,0 +47972,51,4.7076,0 +47973,51,4.7207,0 +47974,51,4.7342,0 +47975,51,4.7484,0 +47976,51,4.763,0 +47977,51,4.7778,0 +47978,51,4.7933,0 +47979,51,4.8089,0 +47980,51,4.8247,0 +47981,51,4.8407,0 +47982,51,4.8574,0 +47983,51,4.8745,0 +47984,51,4.8921,0 +47985,51,4.9097,0 +47986,51,4.928,0 +47987,51,4.9468,0 +47988,51,4.9669,0 +47989,51,4.9875,0 +47990,51,5.0086,0 +47991,51,5.0305,0 +47992,51,5.0531,0 +47993,51,5.0761,0 +47994,51,5.0996,0 +47995,51,5.1238,0 +47996,51,5.1481,0 +47997,51,5.1731,0 +47998,51,5.1986,0 +47999,51,5.224,0 +48000,51,5.2492,0 +48001,51,5.2736,0 +48002,51,5.2978,0 +48003,51,5.3215,0 +48004,51,5.3451,0 +48005,51,5.369,0 +48006,51,5.3931,0 +48007,51,5.4174,0 +48008,51,5.4419,0 +48009,51,5.4662,0 +48010,51,5.4894,0 +48011,51,5.5114,0 +48012,51,5.532,0 +48013,51,5.5517,0 +48014,51,5.5698,0 +48015,51,5.5866,0 +48016,51,5.6024,0 +48017,51,5.6173,0 +48018,51,5.6317,0 +48019,51,5.6452,0 +48020,51,5.6578,0 +48021,51,5.6704,0 +48022,51,5.6825,0 +48023,51,5.6941,0 +48024,51,5.7052,0 +48025,51,5.7155,0 +48026,51,5.725,0 +48027,51,5.734,0 +48028,51,5.7432,0 +48029,51,5.7524,0 +48030,51,5.7614,0 +48031,51,5.7698,0 +48032,51,5.778,0 +48033,51,5.7862,0 +48034,51,5.794,0 +48035,51,5.8016,0 +48036,51,5.8086,0 +48037,51,5.8152,0 +48038,51,5.8212,0 +48039,51,5.8262,0 +48040,51,5.8299,0 +48041,51,5.8324,0 +48042,51,5.8338,0 +48043,51,5.8343,0 +48044,51,5.834,0 +48045,51,5.8333,0 +48046,51,5.8321,0 +48047,51,5.8303,0 +48048,51,5.8279,0 +48049,51,5.8255,0 +48050,51,5.8228,0 +48051,51,5.8195,0 +48052,51,5.8154,0 +48053,51,5.7986,0 +48054,51,5.779,0 +48055,51,5.7586,0 +48056,51,5.7381,0 +48057,51,5.7172,0 +48058,51,5.6961,0 +48059,51,5.6744,0 +48060,51,5.6519,0 +48061,51,5.6295,0 +48062,51,5.607,0 +48063,51,5.5842,0 +48064,51,5.5614,0 +48065,51,5.5382,0 +48066,51,5.5148,0 +48067,51,5.4909,0 +48068,51,5.4668,0 +48069,51,5.4426,0 +48070,51,5.4182,0 +48071,51,5.3935,0 +48072,51,5.369,0 +48073,51,5.3438,0 +48074,51,5.3182,0 +48075,51,5.2921,0 +48076,51,5.2657,0 +48077,51,5.2389,0 +48078,51,5.2122,0 +48079,51,5.1861,0 +48080,51,5.1603,0 +48081,51,5.1353,0 +48082,51,5.1108,0 +48083,51,5.0869,0 +48084,51,5.0633,0 +48085,51,5.0401,0 +48086,51,5.0172,0 +48087,51,4.9944,0 +48088,51,4.9722,0 +48089,51,4.9503,0 +48090,51,4.9284,0 +48091,51,4.907,0 +48092,51,4.8857,0 +48093,51,4.8651,0 +48094,51,4.845,0 +48095,51,4.8258,0 +48096,51,4.8066,0 +48097,51,4.7875,0 +48098,51,4.7683,0 +48099,51,4.7495,0 +48100,51,4.731,0 +48101,51,4.7126,0 +48102,51,4.6943,0 +48103,51,4.6763,0 +48104,51,4.6586,0 +48105,51,4.641,0 +48106,51,4.6239,0 +48107,51,4.607,0 +48108,51,4.5907,0 +48109,51,4.5746,0 +48110,51,4.5592,0 +48111,51,4.5449,0 +48112,51,4.5307,0 +48113,51,4.5166,0 +48114,51,4.5031,0 +48115,51,4.4897,0 +48116,51,4.4766,0 +48117,51,4.4637,0 +48118,51,4.4506,0 +48119,51,4.4377,0 +48120,51,4.4249,0 +48121,51,4.4262,0 +48122,51,4.4431,0 +48123,51,4.4604,0 +48124,51,4.4764,0 +48125,51,4.4913,0 +48126,51,4.5054,0 +48127,51,4.5193,0 +48128,51,4.5326,0 +48129,51,4.5457,0 +48130,51,4.5585,0 +48131,51,4.5708,0 +48132,51,4.5825,0 +48133,51,4.5939,0 +48134,51,4.6048,0 +48135,51,4.6157,0 +48136,51,4.6265,0 +48137,51,4.6373,0 +48138,51,4.6485,0 +48139,51,4.6598,0 +48140,51,4.6707,0 +48141,51,4.6817,0 +48142,51,4.6924,0 +48143,51,4.7032,0 +48144,51,4.7138,0 +48145,51,4.7242,0 +48146,51,4.7345,0 +48147,51,4.7442,0 +48148,51,4.7538,0 +48149,51,4.763,0 +48150,51,4.7715,0 +48151,51,4.7797,0 +48152,51,4.788,0 +48153,51,4.7956,0 +48154,51,4.8032,0 +48155,51,4.8103,0 +48156,51,4.8167,0 +48157,51,4.823,0 +48158,51,4.8286,0 +48159,51,4.8337,0 +48160,51,4.8383,0 +48161,51,4.8421,0 +48162,51,4.8452,0 +48163,51,4.8474,0 +48164,51,4.8487,0 +48165,51,4.8492,0 +48166,51,4.849,0 +48167,51,4.848,0 +48168,51,4.8462,0 +48169,51,4.8437,0 +48170,51,4.8404,0 +48171,51,4.8364,0 +48172,51,4.8313,0 +48173,51,4.8256,0 +48174,51,4.8181,0 +48175,51,4.8011,0 +48176,51,4.7834,0 +48177,51,4.7649,0 +48178,51,4.745,0 +48179,51,4.724,0 +48180,51,4.7025,0 +48181,51,4.6801,0 +48182,51,4.6565,0 +48183,51,4.6322,0 +48184,51,4.6067,0 +48185,51,4.5802,0 +48186,51,4.553,0 +48187,51,4.5248,0 +48188,51,4.4958,0 +48189,51,4.4561,0 +48190,51,4.4106,0 +48191,51,4.3644,0 +48192,51,4.3187,0 +48193,51,4.2726,0 +48194,51,4.2264,0 +48195,51,4.1799,0 +48196,51,4.1331,0 +48197,51,4.0853,0 +48198,51,4.037,0 +48199,51,3.9881,0 +48200,51,3.9388,0 +48201,51,3.8892,0 +48202,51,3.8393,0 +48203,51,3.789,0 +48204,51,3.7382,0 +48205,51,3.6865,0 +48206,51,3.6338,0 +48207,51,3.5805,0 +48208,51,3.5269,0 +48209,51,3.4725,0 +48210,51,3.4178,0 +48211,51,3.3624,0 +48212,51,3.3068,0 +48213,51,3.251,0 +48214,51,3.1948,0 +48215,51,3.1382,0 +48216,51,3.0809,0 +48217,51,3.0234,0 +48218,51,2.9658,0 +48219,51,2.908,0 +48220,51,2.85,0 +48221,51,2.7918,0 +48222,51,2.7334,0 +48223,51,2.6749,0 +48224,51,2.6163,0 +48225,51,2.5573,0 +48226,51,2.4987,0 +48227,51,2.4398,0 +48228,51,2.3808,0 +48229,51,2.3218,0 +48230,51,2.263,0 +48231,51,2.2042,0 +48232,51,2.1458,0 +48233,51,2.0875,0 +48234,51,2.0297,0 +48235,51,1.9722,0 +48236,51,1.9152,0 +48237,51,1.8583,0 +48238,51,1.8018,0 +48239,51,1.7455,0 +48240,51,1.6894,0 +48241,51,1.6338,0 +48242,51,1.5782,0 +48243,51,1.5386,0 +48244,51,1.5024,0 +48245,51,1.4665,0 +48246,51,1.4314,0 +48247,51,1.397,0 +48248,51,1.3629,0 +48249,51,1.3291,0 +48250,51,1.2959,0 +48251,51,1.2633,0 +48252,50,1.2313,0 +48253,50,1.2002,0 +48254,50,1.1697,0 +48255,50,1.1398,0 +48256,50,1.1105,0 +48257,50,1.0817,0 +48258,50,1.0536,0 +48259,50,1.0259,0 +48260,50,0.99842,0 +48261,50,0.97124,0 +48262,50,0.9445,0 +48263,50,0.91819,0 +48264,50,0.89226,0 +48265,50,0.86686,0 +48266,50,0.842,0 +48267,50,0.81776,0 +48268,50,0.79407,0 +48269,59,0.77085,0 +48270,59,0.7481,0 +48271,59,0.72539,0 +48272,59,0.70283,0 +48273,59,0.68079,0 +48274,59,0.65951,0 +48275,59,0.63889,0 +48276,59,0.61914,0 +48277,59,0.60013,0 +48278,59,0.58211,0 +48279,59,0.56448,0 +48280,59,0.54771,0 +48281,59,0.53139,0 +48282,59,0.51567,0 +48283,59,0.50033,0 +48284,59,0.48596,0 +48285,59,0.47215,0 +48286,59,0.45879,0 +48287,59,0.44615,0 +48288,59,0.43428,0 +48289,59,0.42293,0 +48290,59,0.41189,0 +48291,59,0.40162,0 +48292,59,0.39167,0 +48293,59,0.38245,0 +48294,59,0.37378,0 +48295,59,0.36562,0 +48296,59,0.35773,0 +48297,59,0.35056,0 +48298,59,0.34369,0 +48299,59,0.33754,0 +48300,59,0.33168,0 +48301,59,0.32628,0 +48302,59,0.32129,0 +48303,59,0.31648,0 +48304,59,0.31214,0 +48305,59,0.30793,0 +48306,59,0.3038,0 +48307,59,0.30014,0 +48308,59,0.29661,0 +48309,59,0.29347,0 +48310,59,0.29061,0 +48311,59,0.28821,0 +48312,59,0.2862,0 +48313,59,0.2842,0 +48314,59,0.27431,0 +48315,59,0.26469,0 +48316,59,0.25536,0 +48317,59,0.2463,0 +48318,59,0.23728,0 +48319,59,0.22869,0 +48320,59,0.22045,0 +48321,59,0.21255,0 +48322,59,0.20461,0 +48323,59,0.19694,0 +48324,59,0.18919,0 +48325,59,0.18137,0 +48326,59,0.17364,0 +48327,59,0.16602,0 +48328,59,0.15866,0 +48329,59,0.15139,0 +48330,59,0.14408,0 +48331,59,0.13726,0 +48332,59,0.13085,0 +48333,59,0.1247,0 +48334,59,0.11879,0 +48335,59,0.11318,0 +48336,59,0.10783,0 +48337,59,0.10273,0 +48338,59,0.097722,0 +48339,59,0.092944,0 +48340,59,0.088675,0 +48341,59,0.08458,0 +48342,59,0.080804,0 +48343,59,0.077353,0 +48344,59,0.074508,0 +48345,59,0.071971,0 +48346,59,0.06974,0 +48347,59,0.067598,0 +48348,59,0.065659,0 +48349,59,0.063819,0 +48350,59,0.061991,0 +48351,59,0.060239,0 +48352,59,0.058589,0 +48353,59,0.057117,0 +48354,59,0.055712,0 +48355,59,0.054497,0 +48356,59,0.053383,0 +48357,59,0.052488,0 +48358,59,0.0517,0 +48359,59,0.050926,0 +48360,59,0.050549,0 +48361,59,0.050499,0 +48362,59,0.050524,0 +48363,59,0.050545,0 +48364,59,0.050644,0 +48365,59,0.050939,0 +48366,59,0.051017,0 +48367,59,0.05111,0 +48368,59,0.051399,0 +48369,59,0.051764,0 +48370,59,0.052133,0 +48371,59,0.052567,0 +48372,59,0.053103,0 +48373,59,0.053648,0 +48374,59,0.054388,0 +48375,59,0.055098,0 +48376,59,0.055753,0 +48377,59,0.056458,0 +48378,59,0.057167,0 +48379,59,0.058041,0 +48380,59,0.059063,0 +48381,59,0.060127,0 +48382,59,0.061516,0 +48383,59,0.063094,0 +48384,59,0.064852,0 +48385,59,0.066701,0 +48386,59,0.068815,0 +48387,58,0.071186,0 +48388,58,0.073878,0 +48389,58,0.076654,0 +48390,58,0.079638,0 +48391,58,0.082728,0 +48392,58,0.085955,0 +48393,58,0.089468,0 +48394,58,0.093125,0 +48395,58,0.096876,0 +48396,58,0.10077,0 +48397,58,0.10484,0 +48398,58,0.10893,0 +48399,58,0.11314,0 +48400,58,0.1175,0 +48401,58,0.12217,0 +48402,58,0.12699,0 +48403,58,0.13214,0 +48404,58,0.13743,0 +48405,58,0.14311,0 +48406,58,0.14902,0 +48407,58,0.15502,0 +48408,58,0.16127,0 +48409,58,0.1678,0 +48410,58,0.17453,0 +48411,58,0.18133,0 +48412,58,0.1883,0 +48413,58,0.19538,0 +48414,58,0.20268,0 +48415,58,0.21023,0 +48416,58,0.21787,0 +48417,58,0.22575,0 +48418,58,0.2337,0 +48419,58,0.24159,0 +48420,58,0.24964,0 +48421,58,0.25786,0 +48422,58,0.26614,0 +48423,58,0.27441,0 +48424,58,0.28275,0 +48425,58,0.29121,0 +48426,58,0.29963,0 +48427,58,0.30819,0 +48428,58,0.31681,0 +48429,58,0.32563,0 +48430,58,0.33464,0 +48431,58,0.34398,0 +48432,58,0.35321,0 +48433,58,0.36271,0 +48434,58,0.37247,0 +48435,58,0.3822,0 +48436,58,0.39224,0 +48437,58,0.40247,0 +48438,58,0.41265,0 +48439,58,0.42306,0 +48440,58,0.43353,0 +48441,58,0.44386,0 +48442,58,0.45412,0 +48443,58,0.46465,0 +48444,58,0.47539,0 +48445,58,0.48614,0 +48446,58,0.49731,0 +48447,58,0.50883,0 +48448,58,0.52047,0 +48449,58,0.53224,0 +48450,58,0.54433,0 +48451,58,0.55671,0 +48452,58,0.56946,0 +48453,58,0.58251,0 +48454,58,0.59557,0 +48455,58,0.6091,0 +48456,58,0.62282,0 +48457,58,0.63692,0 +48458,58,0.65109,0 +48459,58,0.6655,0 +48460,58,0.68006,0 +48461,58,0.69449,0 +48462,58,0.70889,0 +48463,58,0.72351,0 +48464,58,0.73806,0 +48465,58,0.75248,0 +48466,58,0.76675,0 +48467,58,0.78128,0 +48468,58,0.7955,0 +48469,58,0.80953,0 +48470,58,0.82323,0 +48471,58,0.83723,0 +48472,58,0.85076,0 +48473,58,0.86416,0 +48474,58,0.87771,0 +48475,58,0.89116,0 +48476,58,0.90412,0 +48477,58,0.91714,0 +48478,58,0.92993,0 +48479,58,0.94225,0 +48480,58,0.95416,0 +48481,58,0.96619,0 +48482,58,0.97753,0 +48483,58,0.98871,0 +48484,58,0.99934,0 +48485,58,1.0098,0 +48486,58,1.0196,0 +48487,58,1.0295,0 +48488,58,1.0389,0 +48489,58,1.0482,0 +48490,58,1.0571,0 +48491,58,1.0655,0 +48492,58,1.0735,0 +48493,58,1.0815,0 +48494,58,1.0889,0 +48495,58,1.0956,0 +48496,58,1.1022,0 +48497,58,1.1082,0 +48498,58,1.114,0 +48499,58,1.119,0 +48500,58,1.1234,0 +48501,58,1.1273,0 +48502,58,1.132,0 +48503,58,1.1368,0 +48504,58,1.1416,0 +48505,58,1.1462,0 +48506,58,1.1501,0 +48507,58,1.1535,0 +48508,58,1.1561,0 +48509,58,1.1592,0 +48510,58,1.1616,0 +48511,58,1.1637,0 +48512,58,1.1658,0 +48514,58,1.1625,0 +48515,58,1.161,0 +48516,58,1.1609,0 +48517,58,1.1624,0 +48518,58,1.1634,0 +48519,58,1.1629,0 +48520,58,1.1613,0 +48521,58,1.1586,0 +48522,58,1.155,0 +48523,58,1.1509,0 +48524,58,1.1468,0 +48525,58,1.1425,0 +48526,0,1.1404,22 +48527,37,1.1404,0 +48528,37,0.83282,0 +48529,37,0.77269,0 +48530,37,0.7149,0 +48531,37,0.66003,0 +48532,37,0.60941,0 +48533,37,0.55547,0 +48534,37,0.50707,0 +48535,37,0.45903,0 +48536,37,0.4172,0 +48537,37,0.37235,0 +48538,37,0.32711,0 +48539,37,0.28833,0 +48540,37,0.25728,0 +48541,37,0.22433,0 +48542,37,0.19617,0 +48543,37,0.16906,0 +48544,37,0.14026,0 +48545,37,0.11385,0 +48546,37,0.08841,0 +48547,37,0.065297,0 +48548,37,0.044133,0 +48549,37,0.021614,0 +48550,37,0.00137,0 +48551,37,-0.011806,0 +48552,37,-0.024147,0 +48553,37,-0.038623,0 +48554,37,-0.052281,0 +48555,37,-0.061988,0 +48556,37,-0.067547,0 +48557,37,-0.072672,0 +48558,37,-0.079933,0 +48559,37,-0.087132,0 +48560,37,-0.090131,0 +48562,37,-0.089213,0 +48563,37,-0.086272,0 +48564,37,-0.082618,0 +48565,37,-0.077321,0 +48566,37,-0.071333,0 +48567,37,-0.065125,0 +48568,37,-0.058968,0 +48569,37,-0.051223,0 +48570,37,-0.043583,0 +48571,37,-0.035881,0 +48572,37,-0.02783,0 +48573,37,-0.019404,0 +48574,37,-0.0098019,0 +48575,37,0.00075808,0 +48576,37,0.011601,0 +48577,37,0.022909,0 +48578,37,0.034672,0 +48579,37,0.046913,0 +48580,37,0.059884,0 +48581,37,0.074709,0 +48582,37,0.089783,0 +48583,37,0.10489,0 +48584,37,0.11932,0 +48585,37,0.13372,0 +48586,37,0.14859,0 +48587,37,0.16533,0 +48588,37,0.18291,0 +48589,37,0.20087,0 +48590,37,0.21898,0 +48591,37,0.23622,0 +48592,37,0.25352,0 +48593,37,0.271,0 +48594,37,0.28897,0 +48595,37,0.30707,0 +48596,37,0.32607,0 +48597,37,0.34537,0 +48598,37,0.36498,0 +48599,37,0.38478,0 +48600,37,0.40437,0 +48601,37,0.42424,0 +48602,37,0.44457,0 +48603,37,0.46462,0 +48604,37,0.48425,0 +48605,37,0.50395,0 +48606,37,0.52412,0 +48607,37,0.54434,0 +48608,36,0.56527,0 +48609,36,0.58661,0 +48610,36,0.60837,0 +48611,36,0.62957,0 +48612,36,0.65055,0 +48613,36,0.67096,0 +48614,36,0.69227,0 +48615,36,0.71373,0 +48616,36,0.7356,0 +48617,36,0.75789,0 +48618,53,0.7804,0 +48619,53,0.80273,0 +48620,53,0.82404,0 +48621,53,0.8449,0 +48622,53,0.86657,0 +48623,53,0.88781,0 +48624,53,0.90943,0 +48625,53,0.93005,0 +48626,53,0.95073,0 +48627,53,0.97112,0 +48628,53,0.99089,0 +48629,53,1.0097,0 +48630,53,1.0282,0 +48631,53,1.0471,0 +48632,53,1.0656,0 +48633,53,1.0843,0 +48634,53,1.102,0 +48635,53,1.1192,0 +48636,53,1.1356,0 +48637,53,1.1518,0 +48638,53,1.1678,0 +48639,53,1.1834,0 +48640,53,1.1986,0 +48641,53,1.2136,0 +48642,53,1.2279,0 +48643,53,1.2413,0 +48644,53,1.2544,0 +48645,53,1.2665,0 +48646,53,1.2783,0 +48647,53,1.2889,0 +48648,53,1.2989,0 +48649,53,1.3086,0 +48650,53,1.3172,0 +48651,53,1.3252,0 +48652,53,1.3326,0 +48653,53,1.3394,0 +48654,53,1.3452,0 +48655,53,1.3504,0 +48656,53,1.3554,0 +48657,53,1.3596,0 +48658,53,1.3631,0 +48659,53,1.3663,0 +48660,53,1.3689,0 +48661,53,1.3709,0 +48662,53,1.3724,0 +48663,53,1.3733,0 +48664,53,1.374,0 +48665,53,1.3743,0 +48667,53,1.3733,0 +48668,53,1.3717,0 +48669,53,1.3696,0 +48670,53,1.3669,0 +48671,53,1.3638,0 +48672,53,1.36,0 +48673,53,1.3555,0 +48674,53,1.3508,0 +48675,53,1.346,0 +48676,53,1.3406,0 +48677,53,1.3344,0 +48678,53,1.3275,0 +48679,53,1.3202,0 +48680,53,1.313,0 +48681,53,1.3053,0 +48682,53,1.2971,0 +48683,53,1.2885,0 +48684,53,1.2794,0 +48685,53,1.27,0 +48686,53,1.26,0 +48687,53,1.2493,0 +48688,53,1.2384,0 +48689,53,1.2268,0 +48690,53,1.2149,0 +48691,53,1.2031,0 +48692,53,1.1906,0 +48693,53,1.1779,0 +48694,53,1.1645,0 +48695,53,1.1507,0 +48696,53,1.1365,0 +48697,53,1.1222,0 +48698,53,1.1077,0 +48699,53,1.0932,0 +48700,53,1.0784,0 +48701,53,1.0637,0 +48702,53,1.0488,0 +48703,53,1.0337,0 +48704,53,1.0188,0 +48705,53,1.0037,0 +48706,53,0.98876,0 +48707,53,0.97397,0 +48708,53,0.95912,0 +48709,53,0.94419,0 +48710,53,0.92935,0 +48711,53,0.91467,0 +48712,53,0.89959,0 +48713,53,0.88448,0 +48714,53,0.86913,0 +48715,53,0.85391,0 +48716,53,0.83877,0 +48717,53,0.82337,0 +48718,53,0.808,0 +48719,53,0.79249,0 +48720,53,0.77685,0 +48721,53,0.76083,0 +48722,53,0.74484,0 +48723,53,0.72862,0 +48724,53,0.71234,0 +48725,53,0.69585,0 +48726,53,0.67916,0 +48727,53,0.66235,0 +48728,53,0.64548,0 +48729,53,0.62855,0 +48730,53,0.61173,0 +48731,53,0.59481,0 +48732,53,0.57794,0 +48733,53,0.56104,0 +48734,53,0.54397,0 +48735,53,0.52688,0 +48736,53,0.50971,0 +48737,53,0.49266,0 +48738,53,0.47547,0 +48739,53,0.45836,0 +48740,53,0.44104,0 +48741,53,0.42381,0 +48742,53,0.4068,0 +48743,53,0.38954,0 +48744,53,0.37249,0 +48745,53,0.35496,0 +48746,53,0.33753,0 +48747,53,0.31982,0 +48748,53,0.30231,0 +48749,53,0.28501,0 +48750,53,0.26777,0 +48751,53,0.25032,0 +48752,53,0.23311,0 +48753,53,0.21594,0 +48754,53,0.19876,0 +48755,53,0.18178,0 +48756,53,0.16455,0 +48757,53,0.14729,0 +48758,53,0.13003,0 +48759,53,0.11295,0 +48760,53,0.096072,0 +48761,53,0.079247,0 +48762,53,0.062517,0 +48763,53,0.0457,0 +48764,53,0.028857,0 +48765,53,0.012015,0 +48766,53,-0.0049526,0 +48767,53,-0.022172,0 +48768,52,-0.039343,0 +48769,52,-0.056688,0 +48770,52,-0.074186,0 +48771,52,-0.091655,0 +48772,52,-0.10923,0 +48773,52,-0.12714,0 +48774,52,-0.14515,0 +48775,52,-0.16348,0 +48776,52,-0.18223,0 +48777,52,-0.2012,0 +48778,61,-0.22025,0 +48779,61,-0.2394,0 +48780,61,-0.25859,0 +48781,61,-0.27813,0 +48782,61,-0.29785,0 +48783,61,-0.31759,0 +48784,61,-0.33728,0 +48785,61,-0.35727,0 +48786,61,-0.37736,0 +48787,61,-0.39767,0 +48788,61,-0.41789,0 +48789,61,-0.43836,0 +48790,61,-0.45881,0 +48791,61,-0.47917,0 +48792,61,-0.49954,0 +48793,61,-0.52,0 +48794,61,-0.54039,0 +48795,61,-0.56069,0 +48796,61,-0.58091,0 +48797,61,-0.60093,0 +48798,61,-0.62095,0 +48799,61,-0.641,0 +48800,61,-0.66117,0 +48801,61,-0.68135,0 +48802,61,-0.7016,0 +48803,61,-0.72192,0 +48804,61,-0.74238,0 +48805,61,-0.76315,0 +48806,61,-0.7838,0 +48807,61,-0.80461,0 +48808,61,-0.82524,0 +48809,61,-0.84621,0 +48810,61,-0.86717,0 +48811,61,-0.88813,0 +48812,61,-0.90928,0 +48813,61,-0.93031,0 +48814,61,-0.95139,0 +48815,61,-0.97266,0 +48816,61,-0.99376,0 +48817,61,-1.0149,0 +48818,61,-1.0362,0 +48819,61,-1.0572,0 +48820,61,-1.0783,0 +48821,61,-1.0991,0 +48822,61,-1.1205,0 +48823,61,-1.1417,0 +48824,61,-1.1627,0 +48825,61,-1.1837,0 +48826,61,-1.205,0 +48827,61,-1.2263,0 +48828,61,-1.2478,0 +48829,61,-1.2696,0 +48830,61,-1.2914,0 +48831,61,-1.3131,0 +48832,61,-1.3349,0 +48833,61,-1.3568,0 +48834,61,-1.3789,0 +48835,61,-1.4012,0 +48836,61,-1.4235,0 +48837,61,-1.4459,0 +48838,61,-1.4688,0 +48839,61,-1.4919,0 +48840,61,-1.5152,0 +48841,61,-1.5388,0 +48842,61,-1.5618,0 +48843,61,-1.5849,0 +48844,61,-1.6084,0 +48845,61,-1.6322,0 +48846,61,-1.6559,0 +48847,61,-1.6797,0 +48848,61,-1.7037,0 +48849,61,-1.7273,0 +48850,61,-1.7512,0 +48851,61,-1.7751,0 +48852,61,-1.7987,0 +48853,61,-1.8224,0 +48854,61,-1.8459,0 +48855,61,-1.8695,0 +48856,61,-1.8929,0 +48857,61,-1.9164,0 +48858,61,-1.9399,0 +48859,61,-1.9633,0 +48860,61,-1.9866,0 +48861,61,-2.0098,0 +48862,61,-2.0326,0 +48863,61,-2.0552,0 +48864,61,-2.0777,0 +48865,61,-2.1002,0 +48866,61,-2.1222,0 +48867,61,-2.1442,0 +48868,61,-2.1664,0 +48869,61,-2.1881,0 +48870,61,-2.21,0 +48871,61,-2.2319,0 +48872,61,-2.2536,0 +48873,61,-2.2753,0 +48874,61,-2.297,0 +48875,61,-2.3188,0 +48876,61,-2.3405,0 +48877,61,-2.3624,0 +48878,61,-2.3843,0 +48879,61,-2.4061,0 +48880,61,-2.4276,0 +48881,61,-2.4492,0 +48882,66,-2.4706,0 +48883,66,-2.4917,0 +48884,66,-2.5124,0 +48885,66,-2.5328,0 +48886,66,-2.5531,0 +48887,66,-2.5734,0 +48888,66,-2.5931,0 +48889,66,-2.6126,0 +48890,66,-2.632,0 +48891,66,-2.6507,0 +48892,66,-2.6693,0 +48893,66,-2.6879,0 +48894,66,-2.7062,0 +48895,66,-2.7242,0 +48896,66,-2.7419,0 +48897,66,-2.7599,0 +48898,66,-2.7776,0 +48899,66,-2.7952,0 +48900,66,-2.8121,0 +48901,66,-2.8289,0 +48902,66,-2.8458,0 +48903,66,-2.8626,0 +48904,66,-2.879,0 +48905,66,-2.8949,0 +48906,66,-2.911,0 +48907,66,-2.927,0 +48908,66,-2.9427,0 +48909,66,-2.9581,0 +48910,66,-2.9731,0 +48911,66,-2.9879,0 +48912,66,-3.0024,0 +48913,66,-3.0165,0 +48914,66,-3.0304,0 +48915,66,-3.0441,0 +48916,66,-3.0574,0 +48917,66,-3.0705,0 +48918,66,-3.0833,0 +48919,66,-3.0958,0 +48920,66,-3.108,0 +48921,66,-3.1199,0 +48922,66,-3.1314,0 +48923,66,-3.1422,0 +48924,66,-3.1526,0 +48925,66,-3.1625,0 +48926,66,-3.1722,0 +48927,66,-3.1819,0 +48928,66,-3.1913,0 +48929,66,-3.2001,0 +48930,66,-3.2083,0 +48931,66,-3.2165,0 +48932,66,-3.2243,0 +48933,66,-3.2318,0 +48934,66,-3.2393,0 +48935,66,-3.2463,0 +48936,66,-3.2529,0 +48937,66,-3.2594,0 +48938,66,-3.2656,0 +48939,66,-3.2715,0 +48940,66,-3.2771,0 +48941,66,-3.2828,0 +48942,66,-3.2882,0 +48943,66,-3.2932,0 +48944,66,-3.298,0 +48945,66,-3.3026,0 +48946,66,-3.307,0 +48947,66,-3.3113,0 +48948,66,-3.3155,0 +48949,66,-3.3196,0 +48950,66,-3.3237,0 +48951,66,-3.3275,0 +48952,66,-3.3314,0 +48953,66,-3.3353,0 +48954,66,-3.3389,0 +48955,66,-3.3423,0 +48956,66,-3.3459,0 +48957,66,-3.349,0 +48958,66,-3.352,0 +48959,66,-3.3549,0 +48960,66,-3.3576,0 +48961,66,-3.36,0 +48962,66,-3.3622,0 +48963,66,-3.3644,0 +48964,66,-3.3664,0 +48965,66,-3.3682,0 +48966,66,-3.3698,0 +48967,66,-3.3714,0 +48968,66,-3.3728,0 +48969,66,-3.3739,0 +48970,66,-3.3751,0 +48971,66,-3.3763,0 +48972,66,-3.3773,0 +48973,66,-3.3783,0 +48974,66,-3.3792,0 +48975,66,-3.3799,0 +48976,66,-3.3808,0 +48977,66,-3.3815,0 +48978,66,-3.3822,0 +48979,66,-3.3831,0 +48980,66,-3.3839,0 +48981,66,-3.3844,0 +48982,66,-3.3848,0 +48983,66,-3.3853,0 +48984,66,-3.3858,0 +48985,66,-3.386,0 +48986,66,-3.3859,0 +48987,66,-3.386,0 +48988,66,-3.3862,0 +48989,66,-3.387,0 +48990,66,-3.3873,0 +48991,66,-3.3872,0 +48993,66,-3.3874,0 +48994,66,-3.3876,0 +48995,66,-3.3874,0 +48998,66,-3.3873,0 +48999,66,-3.3874,0 +49000,66,-3.3875,0 +49001,66,-3.3876,0 +49002,66,-3.3877,0 +49003,66,-3.3879,0 +49004,66,-3.3882,0 +49005,66,-3.3884,0 +49006,66,-3.3888,0 +49007,66,-3.3891,0 +49008,66,-3.3895,0 +49009,66,-3.3899,0 +49010,66,-3.3902,0 +49011,66,-3.3906,0 +49012,66,-3.3911,0 +49013,66,-3.3918,0 +49014,66,-3.3926,0 +49015,66,-3.3934,0 +49016,66,-3.3944,0 +49017,66,-3.3954,0 +49018,66,-3.3961,0 +49019,66,-3.397,0 +49020,66,-3.398,0 +49021,66,-3.399,0 +49022,66,-3.4,0 +49023,66,-3.4009,0 +49024,66,-3.402,0 +49025,66,-3.4031,0 +49026,66,-3.4043,0 +49027,66,-3.4057,0 +49028,66,-3.407,0 +49029,66,-3.4085,0 +49030,66,-3.41,0 +49031,66,-3.4115,0 +49032,66,-3.4131,0 +49033,66,-3.4148,0 +49034,66,-3.4166,0 +49035,66,-3.4184,0 +49036,66,-3.4202,0 +49037,66,-3.4221,0 +49038,66,-3.4239,0 +49039,66,-3.4258,0 +49040,66,-3.4279,0 +49041,66,-3.43,0 +49042,66,-3.4319,0 +49043,66,-3.4338,0 +49044,66,-3.4358,0 +49045,66,-3.4378,0 +49046,66,-3.4399,0 +49047,66,-3.442,0 +49048,66,-3.4442,0 +49049,66,-3.4465,0 +49050,66,-3.4489,0 +49051,66,-3.4515,0 +49052,66,-3.4541,0 +49053,66,-3.4568,0 +49054,66,-3.4594,0 +49055,66,-3.462,0 +49056,66,-3.4648,0 +49057,66,-3.4676,0 +49058,66,-3.4704,0 +49059,66,-3.4732,0 +49060,66,-3.4762,0 +49061,66,-3.4791,0 +49062,66,-3.482,0 +49063,66,-3.4849,0 +49064,66,-3.4878,0 +49065,66,-3.491,0 +49066,66,-3.4942,0 +49067,66,-3.4974,0 +49068,66,-3.5007,0 +49069,66,-3.504,0 +49070,66,-3.5075,0 +49071,66,-3.511,0 +49072,66,-3.5146,0 +49073,66,-3.5182,0 +49074,66,-3.522,0 +49075,66,-3.5259,0 +49076,66,-3.5296,0 +49077,66,-3.5333,0 +49078,66,-3.5371,0 +49079,66,-3.5407,0 +49080,66,-3.5442,0 +49081,66,-3.5477,0 +49082,66,-3.5514,0 +49083,66,-3.5552,0 +49084,66,-3.559,0 +49085,66,-3.5629,0 +49086,66,-3.5668,0 +49087,66,-3.5707,0 +49088,66,-3.5747,0 +49089,66,-3.5785,0 +49090,66,-3.5822,0 +49091,66,-3.5859,0 +49092,66,-3.5894,0 +49093,66,-3.5931,0 +49094,66,-3.5968,0 +49095,66,-3.6003,0 +49096,66,-3.6036,0 +49097,66,-3.6071,0 +49098,66,-3.6104,0 +49099,66,-3.6136,0 +49100,66,-3.6166,0 +49101,66,-3.6198,0 +49102,66,-3.6228,0 +49103,66,-3.6257,0 +49104,66,-3.6284,0 +49105,66,-3.631,0 +49106,66,-3.6336,0 +49107,66,-3.6362,0 +49108,66,-3.6388,0 +49109,66,-3.6413,0 +49110,66,-3.6441,0 +49111,66,-3.6466,0 +49112,66,-3.6492,0 +49113,66,-3.6518,0 +49114,66,-3.6543,0 +49115,66,-3.6567,0 +49116,66,-3.6591,0 +49117,66,-3.6614,0 +49118,66,-3.6637,0 +49119,66,-3.6657,0 +49120,66,-3.6676,0 +49121,66,-3.6694,0 +49122,66,-3.671,0 +49123,66,-3.6724,0 +49124,66,-3.6737,0 +49125,66,-3.675,0 +49126,66,-3.676,0 +49127,66,-3.677,0 +49128,66,-3.6778,0 +49129,66,-3.6786,0 +49130,66,-3.6793,0 +49131,66,-3.6799,0 +49132,66,-3.6803,0 +49133,66,-3.6804,0 +49134,66,-3.6807,0 +49135,66,-3.681,0 +49137,66,-3.6809,0 +49138,66,-3.6807,0 +49139,66,-3.6803,0 +49140,66,-3.6798,0 +49141,66,-3.6792,0 +49142,66,-3.6783,0 +49143,66,-3.6772,0 +49144,66,-3.676,0 +49145,66,-3.6747,0 +49146,66,-3.6734,0 +49147,66,-3.6721,0 +49148,66,-3.6707,0 +49149,66,-3.6693,0 +49150,66,-3.6679,0 +49151,66,-3.6666,0 +49152,66,-3.6651,0 +49153,66,-3.6637,0 +49154,66,-3.6626,0 +49155,66,-3.6616,0 +49156,66,-3.6607,0 +49157,66,-3.6596,0 +49158,66,-3.6585,0 +49159,66,-3.6575,0 +49160,66,-3.6562,0 +49161,66,-3.655,0 +49162,66,-3.6537,0 +49163,66,-3.6523,0 +49164,66,-3.651,0 +49165,66,-3.6498,0 +49166,66,-3.6488,0 +49167,66,-3.6477,0 +49168,66,-3.6468,0 +49169,66,-3.6461,0 +49170,66,-3.6454,0 +49171,66,-3.6448,0 +49172,66,-3.6442,0 +49173,66,-3.6437,0 +49174,66,-3.6432,0 +49175,66,-3.6426,0 +49176,66,-3.6418,0 +49177,66,-3.6412,0 +49178,66,-3.6404,0 +49179,66,-3.6398,0 +49180,66,-3.6392,0 +49181,66,-3.6388,0 +49182,66,-3.6385,0 +49183,66,-3.6384,0 +49184,66,-3.6386,0 +49185,66,-3.6388,0 +49186,66,-3.6393,0 +49187,66,-3.6401,0 +49188,66,-3.6413,0 +49189,66,-3.6427,0 +49190,66,-3.6442,0 +49191,66,-3.6463,0 +49192,66,-3.6486,0 +49193,66,-3.6512,0 +49194,66,-3.6541,0 +49195,66,-3.6574,0 +49196,66,-3.6611,0 +49197,66,-3.6652,0 +49198,66,-3.6697,0 +49199,66,-3.6743,0 +49200,66,-3.6792,0 +49201,66,-3.6845,0 +49202,66,-3.6899,0 +49203,66,-3.6959,0 +49204,66,-3.7024,0 +49205,66,-3.7092,0 +49206,66,-3.7166,0 +49207,66,-3.7244,0 +49208,66,-3.7326,0 +49209,66,-3.7412,0 +49210,66,-3.7503,0 +49211,66,-3.7602,0 +49212,66,-3.7706,0 +49213,66,-3.7819,0 +49214,66,-3.7937,0 +49215,66,-3.8059,0 +49216,66,-3.8186,0 +49217,66,-3.8318,0 +49218,66,-3.8454,0 +49219,66,-3.8597,0 +49220,66,-3.8745,0 +49221,66,-3.89,0 +49222,66,-3.9062,0 +49223,66,-3.9228,0 +49224,66,-3.9402,0 +49225,66,-3.9582,0 +49226,66,-3.9769,0 +49227,66,-3.9962,0 +49228,66,-4.0161,0 +49229,66,-4.0367,0 +49230,66,-4.0578,0 +49231,66,-4.0795,0 +49232,66,-4.1019,0 +49233,66,-4.1248,0 +49234,66,-4.1484,0 +49235,66,-4.1726,0 +49236,66,-4.1973,0 +49237,66,-4.2223,0 +49238,66,-4.248,0 +49239,66,-4.2742,0 +49240,66,-4.3008,0 +49241,66,-4.3281,0 +49242,66,-4.3559,0 +49243,66,-4.3842,0 +49244,66,-4.4131,0 +49245,66,-4.4425,0 +49246,66,-4.4725,0 +49247,66,-4.5029,0 +49248,66,-4.5336,0 +49249,66,-4.5649,0 +49250,66,-4.5966,0 +49251,66,-4.6287,0 +49252,66,-4.6613,0 +49253,66,-4.6944,0 +49254,66,-4.7278,0 +49255,66,-4.7617,0 +49256,66,-4.7962,0 +49257,66,-4.831,0 +49258,66,-4.866,0 +49259,66,-4.9014,0 +49260,66,-4.9371,0 +49261,66,-4.9728,0 +49262,66,-5.0086,0 +49263,66,-5.0449,0 +49264,66,-5.0814,0 +49265,66,-5.1184,0 +49266,66,-5.1562,0 +49267,66,-5.1945,0 +49268,66,-5.2332,0 +49269,66,-5.2724,0 +49270,66,-5.312,0 +49271,66,-5.3521,0 +49272,66,-5.3927,0 +49273,66,-5.4337,0 +49274,66,-5.4746,0 +49275,66,-5.5158,0 +49276,66,-5.5573,0 +49277,66,-5.5986,0 +49278,66,-5.6398,0 +49279,66,-5.6811,0 +49280,66,-5.7223,0 +49281,66,-5.7635,0 +49282,66,-5.8047,0 +49283,66,-5.8459,0 +49284,66,-5.8871,0 +49285,66,-5.9287,0 +49286,66,-5.9704,0 +49287,66,-6.012,0 +49288,66,-6.0537,0 +49289,66,-6.095,0 +49290,66,-6.1357,0 +49291,66,-6.1765,0 +49292,66,-6.217,0 +49293,66,-6.2572,0 +49294,66,-6.2972,0 +49295,66,-6.3367,0 +49296,66,-6.3759,0 +49297,66,-6.4146,0 +49298,66,-6.4528,0 +49299,66,-6.4904,0 +49300,66,-6.5277,0 +49301,66,-6.5647,0 +49302,66,-6.6012,0 +49303,66,-6.637,0 +49304,66,-6.6721,0 +49305,66,-6.7065,0 +49306,66,-6.7401,0 +49307,66,-6.7733,0 +49308,66,-6.806,0 +49309,66,-6.8382,0 +49310,66,-6.8698,0 +49311,66,-6.9007,0 +49312,66,-6.9308,0 +49313,66,-6.96,0 +49314,66,-6.9882,0 +49315,66,-7.0159,0 +49316,66,-7.0429,0 +49317,66,-7.0691,0 +49318,66,-7.0945,0 +49319,66,-7.1189,0 +49320,66,-7.1427,0 +49321,66,-7.1658,0 +49322,66,-7.1881,0 +49323,66,-7.2098,0 +49324,66,-7.2307,0 +49325,66,-7.2509,0 +49326,66,-7.2706,0 +49327,66,-7.2897,0 +49328,66,-7.3085,0 +49329,66,-7.3268,0 +49330,66,-7.3445,0 +49331,66,-7.3617,0 +49332,66,-7.3783,0 +49333,66,-7.3941,0 +49334,66,-7.4092,0 +49335,68,-7.4236,0 +49336,68,-7.437,0 +49337,68,-7.4495,0 +49338,68,-7.4615,0 +49339,68,-7.4729,0 +49340,68,-7.4841,0 +49341,68,-7.4945,0 +49342,68,-7.5041,0 +49343,68,-7.513,0 +49344,68,-7.5215,0 +49345,68,-7.5294,0 +49346,68,-7.5368,0 +49347,68,-7.5437,0 +49348,68,-7.5498,0 +49349,68,-7.5548,0 +49350,68,-7.5591,0 +49351,68,-7.5627,0 +49352,68,-7.5655,0 +49353,68,-7.5677,0 +49354,68,-7.5694,0 +49355,68,-7.5708,0 +49356,68,-7.5715,0 +49357,68,-7.5714,0 +49358,68,-7.5706,0 +49359,68,-7.5689,0 +49360,68,-7.5665,0 +49361,68,-7.5634,0 +49362,68,-7.5598,0 +49363,68,-7.5555,0 +49364,68,-7.5504,0 +49365,68,-7.5448,0 +49366,68,-7.5383,0 +49367,68,-7.5314,0 +49368,68,-7.5238,0 +49369,68,-7.5154,0 +49370,68,-7.5068,0 +49371,68,-7.4978,0 +49372,68,-7.4884,0 +49373,66,-7.4786,0 +49374,66,-7.4683,0 +49375,66,-7.4577,0 +49376,66,-7.4462,0 +49377,66,-7.4344,0 +49378,66,-7.4217,0 +49379,66,-7.4081,0 +49380,66,-7.394,0 +49381,66,-7.3794,0 +49382,66,-7.3643,0 +49383,66,-7.3491,0 +49384,66,-7.3336,0 +49385,66,-7.3179,0 +49386,66,-7.3019,0 +49387,66,-7.2856,0 +49388,66,-7.269,0 +49389,66,-7.2523,0 +49390,66,-7.2353,0 +49391,66,-7.2183,0 +49392,66,-7.2011,0 +49393,66,-7.1837,0 +49394,66,-7.1661,0 +49395,66,-7.1483,0 +49396,66,-7.1302,0 +49397,66,-7.112,0 +49398,66,-7.0939,0 +49399,66,-7.0758,0 +49400,66,-7.0576,0 +49401,66,-7.0394,0 +49402,66,-7.021,0 +49403,66,-7.0026,0 +49404,66,-6.9843,0 +49405,66,-6.9662,0 +49406,66,-6.9485,0 +49407,66,-6.9313,0 +49408,66,-6.9146,0 +49409,66,-6.8979,0 +49410,66,-6.8813,0 +49411,66,-6.865,0 +49412,66,-6.849,0 +49413,66,-6.8333,0 +49414,66,-6.8175,0 +49415,66,-6.8019,0 +49416,66,-6.7863,0 +49417,66,-6.7709,0 +49418,66,-6.7555,0 +49419,66,-6.7403,0 +49420,66,-6.7246,0 +49421,66,-6.7085,0 +49422,66,-6.692,0 +49423,66,-6.6754,0 +49424,66,-6.6589,0 +49425,66,-6.6423,0 +49426,66,-6.6255,0 +49427,66,-6.6087,0 +49428,66,-6.5919,0 +49429,66,-6.575,0 +49430,66,-6.558,0 +49431,66,-6.5409,0 +49432,66,-6.5235,0 +49433,66,-6.5055,0 +49434,66,-6.4871,0 +49435,66,-6.4687,0 +49436,66,-6.4503,0 +49437,66,-6.4318,0 +49438,66,-6.4127,0 +49439,66,-6.3937,0 +49440,66,-6.3744,0 +49441,66,-6.3548,0 +49442,66,-6.3354,0 +49443,66,-6.3162,0 +49444,66,-6.2972,0 +49445,66,-6.2782,0 +49446,66,-6.2592,0 +49447,66,-6.2404,0 +49448,66,-6.2217,0 +49449,66,-6.2029,0 +49450,66,-6.1842,0 +49451,66,-6.1658,0 +49452,66,-6.1473,0 +49453,66,-6.1285,0 +49454,66,-6.1098,0 +49455,66,-6.0911,0 +49456,66,-6.0723,0 +49457,66,-6.0535,0 +49458,66,-6.0343,0 +49459,66,-6.015,0 +49460,66,-5.9957,0 +49461,66,-5.9762,0 +49462,66,-5.957,0 +49463,66,-5.9383,0 +49464,66,-5.9195,0 +49465,66,-5.9003,0 +49466,66,-5.8809,0 +49467,66,-5.8617,0 +49468,66,-5.8427,0 +49469,66,-5.8235,0 +49470,66,-5.8046,0 +49471,66,-5.7856,0 +49472,66,-5.7668,0 +49473,66,-5.748,0 +49474,66,-5.7293,0 +49475,66,-5.7106,0 +49476,66,-5.6922,0 +49477,66,-5.6737,0 +49478,66,-5.6554,0 +49479,66,-5.6373,0 +49480,66,-5.6192,0 +49481,66,-5.601,0 +49482,66,-5.5829,0 +49483,66,-5.5648,0 +49484,66,-5.5465,0 +49485,66,-5.5282,0 +49486,66,-5.51,0 +49487,66,-5.4917,0 +49488,66,-5.4735,0 +49489,66,-5.4556,0 +49490,66,-5.4375,0 +49491,66,-5.4195,0 +49492,66,-5.4015,0 +49493,66,-5.3834,0 +49494,66,-5.3655,0 +49495,66,-5.3475,0 +49496,66,-5.3293,0 +49497,66,-5.3111,0 +49498,66,-5.2927,0 +49499,66,-5.2739,0 +49500,66,-5.2547,0 +49501,66,-5.2354,0 +49502,66,-5.2158,0 +49503,66,-5.1959,0 +49504,66,-5.1758,0 +49505,66,-5.1555,0 +49506,66,-5.1348,0 +49507,66,-5.1143,0 +49508,66,-5.0934,0 +49509,66,-5.0723,0 +49510,66,-5.0511,0 +49511,66,-5.0301,0 +49512,66,-5.0063,0 +49513,66,-4.9768,0 +49514,66,-4.9473,0 +49515,66,-4.918,0 +49516,66,-4.8887,0 +49517,66,-4.8596,0 +49518,66,-4.8304,0 +49519,66,-4.8015,0 +49520,66,-4.7728,0 +49521,66,-4.7443,0 +49522,66,-4.716,0 +49523,66,-4.6881,0 +49524,66,-4.6605,0 +49525,66,-4.6333,0 +49526,66,-4.6064,0 +49527,66,-4.5795,0 +49528,66,-4.5529,0 +49529,66,-4.5268,0 +49530,66,-4.5009,0 +49531,66,-4.4756,0 +49532,66,-4.4504,0 +49533,66,-4.4256,0 +49534,66,-4.401,0 +49535,66,-4.3767,0 +49536,66,-4.3525,0 +49537,66,-4.3284,0 +49538,66,-4.3048,0 +49539,66,-4.2812,0 +49540,66,-4.2576,0 +49541,66,-4.2342,0 +49542,66,-4.2109,0 +49543,66,-4.1875,0 +49544,66,-4.1643,0 +49545,66,-4.1412,0 +49546,66,-4.1184,0 +49547,66,-4.0958,0 +49548,66,-4.0732,0 +49549,66,-4.0509,0 +49550,66,-4.029,0 +49551,66,-4.0075,0 +49552,66,-3.9863,0 +49553,66,-3.9654,0 +49554,66,-3.9449,0 +49555,66,-3.9242,0 +49556,66,-3.9036,0 +49557,66,-3.8835,0 +49558,66,-3.8639,0 +49559,66,-3.8445,0 +49560,66,-3.825,0 +49561,66,-3.8058,0 +49562,66,-3.7868,0 +49563,66,-3.7679,0 +49564,66,-3.7491,0 +49565,66,-3.7304,0 +49566,66,-3.7118,0 +49567,66,-3.6934,0 +49568,66,-3.6753,0 +49569,66,-3.6573,0 +49570,66,-3.6395,0 +49571,66,-3.6216,0 +49572,66,-3.6039,0 +49573,66,-3.5865,0 +49574,66,-3.5692,0 +49575,66,-3.5521,0 +49576,66,-3.5353,0 +49577,66,-3.5188,0 +49578,66,-3.5024,0 +49579,66,-3.4864,0 +49580,66,-3.4705,0 +49581,66,-3.4545,0 +49582,66,-3.4387,0 +49583,66,-3.4232,0 +49584,66,-3.4078,0 +49585,66,-3.3926,0 +49586,66,-3.3774,0 +49587,66,-3.3626,0 +49588,66,-3.3481,0 +49589,66,-3.3338,0 +49590,66,-3.3197,0 +49591,66,-3.3059,0 +49592,66,-3.2927,0 +49593,66,-3.2797,0 +49594,66,-3.2669,0 +49595,66,-3.2545,0 +49596,66,-3.2424,0 +49597,66,-3.2305,0 +49598,66,-3.219,0 +49599,66,-3.2077,0 +49600,66,-3.1967,0 +49601,66,-3.1861,0 +49602,66,-3.1757,0 +49603,66,-3.1654,0 +49604,66,-3.1553,0 +49605,66,-3.1611,0 +49606,66,-3.1692,0 +49607,66,-3.1775,0 +49608,66,-3.1858,0 +49609,66,-3.1943,0 +49610,66,-3.203,0 +49611,66,-3.2117,0 +49612,66,-3.2204,0 +49613,66,-3.2294,0 +49614,66,-3.2384,0 +49615,66,-3.2474,0 +49616,66,-3.2565,0 +49617,66,-3.2657,0 +49618,66,-3.2748,0 +49619,66,-3.2843,0 +49620,66,-3.2937,0 +49621,66,-3.303,0 +49622,66,-3.3123,0 +49623,66,-3.3214,0 +49624,66,-3.3303,0 +49625,66,-3.3392,0 +49626,66,-3.348,0 +49627,66,-3.3568,0 +49628,66,-3.3655,0 +49629,66,-3.3744,0 +49630,66,-3.3833,0 +49631,66,-3.3921,0 +49632,66,-3.4013,0 +49633,66,-3.4105,0 +49634,66,-3.4197,0 +49635,66,-3.4292,0 +49636,66,-3.4387,0 +49637,66,-3.4483,0 +49638,66,-3.458,0 +49639,66,-3.4677,0 +49640,66,-3.4776,0 +49641,66,-3.4876,0 +49642,66,-3.4976,0 +49643,66,-3.5075,0 +49644,66,-3.5174,0 +49645,66,-3.5273,0 +49646,66,-3.5372,0 +49647,66,-3.5472,0 +49648,66,-3.5573,0 +49649,66,-3.5673,0 +49650,66,-3.5776,0 +49651,66,-3.5879,0 +49652,66,-3.5983,0 +49653,66,-3.6087,0 +49654,66,-3.6193,0 +49655,66,-3.6298,0 +49656,66,-3.6404,0 +49657,66,-3.6514,0 +49658,66,-3.6623,0 +49659,66,-3.6733,0 +49660,66,-3.6844,0 +49661,66,-3.6954,0 +49662,66,-3.7065,0 +49663,66,-3.7177,0 +49664,66,-3.7289,0 +49665,66,-3.7399,0 +49666,66,-3.7511,0 +49667,66,-3.7622,0 +49668,66,-3.773,0 +49669,66,-3.7839,0 +49670,66,-3.7947,0 +49671,66,-3.8054,0 +49672,66,-3.8161,0 +49673,66,-3.8268,0 +49674,66,-3.8375,0 +49675,66,-3.8483,0 +49676,66,-3.859,0 +49677,66,-3.8697,0 +49678,66,-3.8804,0 +49679,66,-3.8909,0 +49680,66,-3.9012,0 +49681,66,-3.9114,0 +49682,66,-3.9215,0 +49683,66,-3.9313,0 +49684,66,-3.9409,0 +49685,66,-3.9505,0 +49686,66,-3.9599,0 +49687,66,-3.969,0 +49688,66,-3.9783,0 +49689,66,-3.9873,0 +49690,66,-3.996,0 +49691,66,-4.0048,0 +49692,66,-4.0133,0 +49693,66,-4.0216,0 +49694,66,-4.0299,0 +49695,66,-4.0378,0 +49696,66,-4.0456,0 +49697,66,-4.0483,0 +49698,66,-4.0471,0 +49699,66,-4.0454,0 +49700,66,-4.0438,0 +49701,66,-4.042,0 +49702,66,-4.0401,0 +49703,66,-4.0381,0 +49704,66,-4.0361,0 +49705,66,-4.034,0 +49706,66,-4.0317,0 +49707,66,-4.0293,0 +49708,66,-4.0268,0 +49709,66,-4.0239,0 +49710,66,-4.0208,0 +49711,66,-4.0175,0 +49712,66,-4.014,0 +49713,66,-4.0105,0 +49714,66,-4.0069,0 +49715,66,-4.0032,0 +49716,66,-3.9994,0 +49717,66,-3.9957,0 +49718,66,-3.9916,0 +49719,66,-3.9875,0 +49720,66,-3.9832,0 +49721,66,-3.9784,0 +49722,66,-3.9735,0 +49723,66,-3.9685,0 +49724,66,-3.9631,0 +49725,66,-3.9575,0 +49726,66,-3.9519,0 +49727,66,-3.9459,0 +49728,66,-3.9394,0 +49729,66,-3.9328,0 +49730,66,-3.9259,0 +49731,66,-3.9188,0 +49732,66,-3.9113,0 +49733,66,-3.9033,0 +49734,66,-3.8952,0 +49735,66,-3.8869,0 +49736,66,-3.8782,0 +49737,66,-3.8693,0 +49738,66,-3.8601,0 +49739,66,-3.8507,0 +49740,66,-3.8407,0 +49741,66,-3.8305,0 +49742,66,-3.8199,0 +49743,66,-3.8088,0 +49744,66,-3.7973,0 +49745,66,-3.7857,0 +49746,66,-3.7736,0 +49747,66,-3.7612,0 +49748,66,-3.7485,0 +49749,66,-3.7355,0 +49750,66,-3.7222,0 +49751,66,-3.7085,0 +49752,66,-3.6944,0 +49753,66,-3.68,0 +49754,66,-3.6653,0 +49755,66,-3.6504,0 +49756,66,-3.6351,0 +49757,66,-3.6196,0 +49758,66,-3.6039,0 +49759,66,-3.588,0 +49760,66,-3.5719,0 +49761,66,-3.5556,0 +49762,66,-3.5389,0 +49763,66,-3.5221,0 +49764,66,-3.505,0 +49765,66,-3.4876,0 +49766,66,-3.4698,0 +49767,66,-3.4517,0 +49768,66,-3.4333,0 +49769,66,-3.4146,0 +49770,66,-3.3956,0 +49771,66,-3.3763,0 +49772,66,-3.3569,0 +49773,66,-3.3374,0 +49774,66,-3.3177,0 +49775,66,-3.2978,0 +49776,66,-3.2777,0 +49777,66,-3.2573,0 +49778,66,-3.2367,0 +49779,66,-3.216,0 +49780,66,-3.1949,0 +49781,66,-3.1735,0 +49782,66,-3.1521,0 +49783,66,-3.1303,0 +49784,66,-3.1084,0 +49785,66,-3.0862,0 +49786,66,-3.064,0 +49787,66,-3.0414,0 +49788,66,-3.0188,0 +49789,66,-2.9959,0 +49790,66,-2.9728,0 +49791,66,-2.9497,0 +49792,66,-2.9264,0 +49793,66,-2.9028,0 +49794,66,-2.8791,0 +49795,66,-2.855,0 +49796,66,-2.8305,0 +49797,66,-2.8058,0 +49798,66,-2.7809,0 +49799,66,-2.7559,0 +49800,66,-2.7307,0 +49801,66,-2.7056,0 +49802,66,-2.6803,0 +49803,66,-2.6551,0 +49804,66,-2.6297,0 +49805,66,-2.6041,0 +49806,66,-2.5784,0 +49807,66,-2.5528,0 +49808,66,-2.5271,0 +49809,66,-2.5012,0 +49810,66,-2.4753,0 +49811,66,-2.4494,0 +49812,66,-2.4234,0 +49813,66,-2.3976,0 +49814,66,-2.3716,0 +49815,66,-2.3456,0 +49816,66,-2.3196,0 +49817,66,-2.2937,0 +49818,66,-2.2675,0 +49819,66,-2.2413,0 +49820,66,-2.2153,0 +49821,66,-2.1895,0 +49822,66,-2.1637,0 +49823,66,-2.1379,0 +49824,66,-2.1123,0 +49825,66,-2.0868,0 +49826,66,-2.0614,0 +49827,66,-2.0358,0 +49828,66,-2.0105,0 +49829,66,-1.9851,0 +49830,66,-1.96,0 +49831,66,-1.9349,0 +49832,66,-1.91,0 +49833,66,-1.8852,0 +49834,66,-1.8604,0 +49835,66,-1.8357,0 +49836,66,-1.8112,0 +49837,66,-1.7867,0 +49838,66,-1.7624,0 +49839,66,-1.7381,0 +49840,66,-1.7138,0 +49841,66,-1.6896,0 +49842,66,-1.6656,0 +49843,66,-1.6416,0 +49844,66,-1.6179,0 +49845,66,-1.5943,0 +49846,66,-1.5706,0 +49847,66,-1.547,0 +49848,66,-1.5234,0 +49849,66,-1.4999,0 +49850,66,-1.4765,0 +49851,66,-1.453,0 +49852,66,-1.4296,0 +49853,66,-1.4063,0 +49854,66,-1.383,0 +49855,66,-1.3597,0 +49856,66,-1.3365,0 +49857,66,-1.3135,0 +49858,66,-1.2907,0 +49859,66,-1.268,0 +49860,66,-1.2454,0 +49861,66,-1.2231,0 +49862,66,-1.2011,0 +49863,66,-1.1793,0 +49864,66,-1.1576,0 +49865,66,-1.136,0 +49866,66,-1.1146,0 +49867,66,-1.0934,0 +49868,66,-1.0725,0 +49869,66,-1.0518,0 +49870,66,-1.0313,0 +49871,66,-1.0111,0 +49872,66,-0.9911,0 +49873,66,-0.97136,0 +49874,66,-0.95191,0 +49875,66,-0.93284,0 +49876,66,-0.91385,0 +49877,66,-0.89522,0 +49878,66,-0.87678,0 +49879,66,-0.8587,0 +49880,66,-0.84081,0 +49881,66,-0.82317,0 +49882,66,-0.80575,0 +49883,66,-0.78855,0 +49884,66,-0.7715,0 +49885,66,-0.75483,0 +49886,66,-0.73837,0 +49887,66,-0.72232,0 +49888,66,-0.70656,0 +49889,66,-0.69104,0 +49890,66,-0.67569,0 +49891,66,-0.6605,0 +49892,66,-0.64565,0 +49893,66,-0.63084,0 +49894,66,-0.61609,0 +49895,66,-0.60155,0 +49896,66,-0.58725,0 +49897,66,-0.57313,0 +49898,66,-0.55918,0 +49899,66,-0.5453,0 +49900,66,-0.53154,0 +49901,66,-0.51786,0 +49902,66,-0.50451,0 +49903,66,-0.49132,0 +49904,66,-0.47829,0 +49905,66,-0.46542,0 +49906,66,-0.45281,0 +49907,66,-0.44028,0 +49908,66,-0.42811,0 +49909,66,-0.41618,0 +49910,66,-0.40445,0 +49911,66,-0.39295,0 +49912,66,-0.38149,0 +49913,66,-0.37017,0 +49914,66,-0.35907,0 +49915,66,-0.34803,0 +49916,66,-0.33712,0 +49917,66,-0.32628,0 +49918,66,-0.3158,0 +49919,66,-0.30554,0 +49920,66,-0.29548,0 +49921,66,-0.28542,0 +49922,66,-0.27553,0 +49923,66,-0.26582,0 +49924,66,-0.25647,0 +49925,66,-0.24729,0 +49926,66,-0.23836,0 +49927,66,-0.22968,0 +49928,66,-0.22129,0 +49929,66,-0.21305,0 +49930,66,-0.2053,0 +49931,66,-0.19787,0 +49932,66,-0.1907,0 +49933,66,-0.18381,0 +49934,66,-0.17718,0 +49935,66,-0.17074,0 +49936,66,-0.16442,0 +49937,66,-0.15847,0 +49938,66,-0.15265,0 +49939,66,-0.14675,0 +49940,66,-0.14097,0 +49941,66,-0.13533,0 +49942,66,-0.12981,0 +49943,66,-0.12462,0 +49944,66,-0.11962,0 +49945,66,-0.11492,0 +49946,66,-0.1106,0 +49947,66,-0.10651,0 +49948,66,-0.10248,0 +49949,66,-0.098531,0 +49950,66,-0.094912,0 +49951,66,-0.091487,0 +49952,66,-0.088171,0 +49953,66,-0.084789,0 +49954,66,-0.081534,0 +49955,66,-0.078345,0 +49956,66,-0.075061,0 +49957,66,-0.071728,0 +49958,66,-0.068504,0 +49959,66,-0.06519,0 +49960,66,-0.061969,0 +49961,66,-0.05875,0 +49962,66,-0.055532,0 +49963,66,-0.052304,0 +49964,66,-0.049069,0 +49965,66,-0.04584,0 +49966,66,-0.042606,0 +49967,66,-0.039364,0 +49968,66,-0.036191,0 +49969,66,-0.033067,0 +49970,66,-0.02994,0 +49971,66,-0.026808,0 +49972,66,-0.023698,0 +49973,66,-0.020682,0 +49974,66,-0.017664,0 +49975,66,-0.01464,0 +49976,66,-0.011706,0 +49977,66,-0.0086891,0 +49978,66,-0.0056554,0 +49979,66,-0.0026124,0 +49980,66,0.00025547,0 +49981,66,0.0029954,0 +49982,66,0.0057906,0 +49983,66,0.0084685,0 +49984,66,0.010631,0 +49985,66,0.012724,0 +49986,66,0.014633,0 +49987,66,0.016404,0 +49988,66,0.017977,0 +49989,66,0.019403,0 +49990,66,0.020541,0 +49991,66,0.021608,0 +49992,66,0.022711,0 +49993,66,0.023739,0 +49994,66,0.024591,0 +49995,66,0.025367,0 +49996,66,0.026124,0 +49997,66,0.026809,0 +49998,66,0.027584,0 +49999,66,0.028287,0 +50000,66,0.029028,0 +50001,66,0.029697,0 +50002,66,0.030367,0 +50003,66,0.03111,0 +50004,66,0.031704,0 +50005,66,0.032229,0 +50006,66,0.032562,0 +50007,66,0.033057,0 +50008,66,0.033559,0 +50009,66,0.033952,0 +50010,66,0.034284,0 +50011,66,0.034469,0 +50012,66,0.034606,0 +50013,66,0.034974,0 +50014,66,0.035238,0 +50015,66,0.035501,0 +50016,66,0.035901,0 +50017,66,0.036338,0 +50018,66,0.036731,0 +50019,66,0.037506,0 +50020,66,0.038363,0 +50021,66,0.039407,0 +50022,66,0.040608,0 +50023,66,0.041917,0 +50024,66,0.043223,0 +50025,66,0.044586,0 +50026,66,0.046159,0 +50027,66,0.047136,0 +50028,66,0.047528,0 +50029,66,0.047708,0 +50030,66,0.047808,0 +50031,66,0.047709,0 +50032,66,0.047705,0 +50033,66,0.047625,0 +50034,66,0.047584,0 +50035,66,0.047459,0 +50036,66,0.047268,0 +50037,66,0.046818,0 +50038,66,0.046346,0 +50039,66,0.045939,0 +50040,66,0.045422,0 +50041,66,0.044625,0 +50042,66,0.043783,0 +50043,66,0.042727,0 +50044,66,0.041443,0 +50045,66,0.039809,0 +50046,66,0.038059,0 +50047,66,0.036058,0 +50048,66,0.033908,0 +50049,66,0.031509,0 +50050,66,0.028923,0 +50051,66,0.026256,0 +50052,66,0.023323,0 +50053,66,0.020398,0 +50054,66,0.017348,0 +50055,66,0.014146,0 +50056,66,0.010806,0 +50057,66,0.007453,0 +50058,66,0.0040424,0 +50059,66,0.000385,0 +50060,66,-0.0033451,0 +50061,66,-0.0070976,0 +50062,66,-0.011214,0 +50063,66,-0.015351,0 +50064,66,-0.019661,0 +50065,66,-0.024206,0 +50066,66,-0.029046,0 +50067,66,-0.033983,0 +50068,66,-0.038888,0 +50069,66,-0.04412,0 +50070,66,-0.049413,0 +50071,66,-0.054581,0 +50072,66,-0.05969,0 +50073,66,-0.064668,0 +50074,61,-0.069591,0 +50075,61,-0.07437,0 +50076,62,-0.079087,0 +50077,62,-0.083687,0 +50078,62,-0.088381,0 +50079,62,-0.093005,0 +50080,62,-0.097779,0 +50081,62,-0.10254,0 +50082,62,-0.10724,0 +50083,62,-0.11211,0 +50084,62,-0.11708,0 +50085,62,-0.12213,0 +50086,62,-0.12733,0 +50087,62,-0.13246,0 +50088,62,-0.13772,0 +50089,62,-0.14314,0 +50090,62,-0.14859,0 +50091,62,-0.15406,0 +50092,62,-0.15968,0 +50093,62,-0.1651,0 +50094,62,-0.1708,0 +50095,62,-0.17651,0 +50096,62,-0.18216,0 +50097,62,-0.18791,0 +50098,62,-0.19358,0 +50099,62,-0.19944,0 +50100,62,-0.20545,0 +50101,62,-0.21144,0 +50102,62,-0.21749,0 +50103,62,-0.22377,0 +50104,62,-0.22999,0 +50105,62,-0.23641,0 +50106,62,-0.24307,0 +50107,62,-0.25,0 +50108,62,-0.25712,0 +50109,62,-0.26453,0 +50110,62,-0.2721,0 +50111,62,-0.27982,0 +50112,62,-0.2879,0 +50113,62,-0.29618,0 +50114,62,-0.30398,0 +50115,62,-0.31189,0 +50116,62,-0.31988,0 +50117,62,-0.32792,0 +50118,62,-0.33609,0 +50119,62,-0.34452,0 +50120,62,-0.35289,0 +50121,62,-0.36135,0 +50122,62,-0.36999,0 +50123,62,-0.37882,0 +50124,62,-0.38757,0 +50125,62,-0.39664,0 +50126,62,-0.40587,0 +50127,62,-0.4152,0 +50128,62,-0.4248,0 +50129,62,-0.43444,0 +50130,62,-0.44427,0 +50131,62,-0.45423,0 +50132,62,-0.46418,0 +50133,62,-0.47428,0 +50134,62,-0.48468,0 +50135,62,-0.49504,0 +50136,62,-0.50562,0 +50137,62,-0.51646,0 +50138,62,-0.52749,0 +50139,62,-0.53879,0 +50140,62,-0.55029,0 +50141,62,-0.56201,0 +50142,62,-0.57377,0 +50143,62,-0.58569,0 +50144,62,-0.59784,0 +50145,62,-0.61007,0 +50146,62,-0.6223,0 +50147,62,-0.63478,0 +50148,62,-0.6472,0 +50149,62,-0.65981,0 +50150,62,-0.67271,0 +50151,62,-0.68555,0 +50152,62,-0.69838,0 +50153,62,-0.71135,0 +50154,62,-0.72461,0 +50155,62,-0.7378,0 +50156,62,-0.75122,0 +50157,62,-0.76471,0 +50158,62,-0.7784,0 +50159,62,-0.79233,0 +50160,62,-0.80653,0 +50161,62,-0.82089,0 +50162,62,-0.83549,0 +50163,62,-0.85033,0 +50164,62,-0.8652,0 +50165,62,-0.88042,0 +50166,62,-0.89577,0 +50167,62,-0.91109,0 +50168,62,-0.92675,0 +50169,62,-0.94257,0 +50170,62,-0.95835,0 +50171,62,-0.97424,0 +50172,62,-0.99013,0 +50173,62,-1.0062,0 +50174,62,-1.0225,0 +50175,62,-1.0387,0 +50176,62,-1.0552,0 +50177,62,-1.072,0 +50178,62,-1.0887,0 +50179,62,-1.1057,0 +50180,62,-1.1228,0 +50181,62,-1.1399,0 +50182,62,-1.1573,0 +50183,62,-1.1749,0 +50184,62,-1.1926,0 +50185,62,-1.2104,0 +50186,62,-1.2282,0 +50187,62,-1.2463,0 +50188,62,-1.2644,0 +50189,62,-1.2828,0 +50190,62,-1.3013,0 +50191,62,-1.32,0 +50192,62,-1.3388,0 +50193,62,-1.3576,0 +50194,62,-1.3766,0 +50195,62,-1.3956,0 +50196,62,-1.4146,0 +50197,62,-1.4338,0 +50198,62,-1.4528,0 +50199,62,-1.4717,0 +50200,62,-1.4905,0 +50201,62,-1.5094,0 +50202,62,-1.5283,0 +50203,62,-1.547,0 +50204,62,-1.5657,0 +50205,62,-1.5843,0 +50206,62,-1.603,0 +50207,62,-1.6216,0 +50208,62,-1.6399,0 +50209,62,-1.658,0 +50210,62,-1.6761,0 +50211,62,-1.694,0 +50212,66,-1.7119,0 +50213,66,-1.7295,0 +50214,66,-1.7467,0 +50215,66,-1.7636,0 +50216,66,-1.7803,0 +50217,66,-1.7967,0 +50218,66,-1.813,0 +50219,66,-1.829,0 +50220,66,-1.8447,0 +50221,66,-1.8603,0 +50222,66,-1.8757,0 +50223,66,-1.8907,0 +50224,66,-1.9055,0 +50225,66,-1.9199,0 +50226,66,-1.934,0 +50227,66,-1.948,0 +50228,66,-1.9616,0 +50229,66,-1.9751,0 +50230,66,-1.9885,0 +50231,66,-2.0018,0 +50232,66,-2.0148,0 +50233,66,-2.0278,0 +50234,66,-2.0408,0 +50235,66,-2.0536,0 +50236,66,-2.0661,0 +50237,66,-2.0783,0 +50238,66,-2.0904,0 +50239,66,-2.1023,0 +50240,66,-2.1139,0 +50241,66,-2.1251,0 +50242,66,-2.1361,0 +50243,66,-2.1469,0 +50244,66,-2.1574,0 +50245,66,-2.1677,0 +50246,66,-2.1779,0 +50247,66,-2.1876,0 +50248,66,-2.1971,0 +50249,66,-2.2065,0 +50250,66,-2.2156,0 +50251,66,-2.2245,0 +50252,66,-2.2332,0 +50253,66,-2.2414,0 +50254,66,-2.2496,0 +50255,66,-2.2575,0 +50256,66,-2.2648,0 +50257,66,-2.272,0 +50258,66,-2.2791,0 +50259,66,-2.286,0 +50260,66,-2.2926,0 +50261,66,-2.299,0 +50262,66,-2.3052,0 +50263,66,-2.3111,0 +50264,66,-2.3166,0 +50265,66,-2.3217,0 +50266,66,-2.3267,0 +50267,66,-2.3316,0 +50268,66,-2.3361,0 +50269,66,-2.3404,0 +50270,66,-2.3445,0 +50271,66,-2.3483,0 +50272,66,-2.3518,0 +50273,66,-2.3551,0 +50274,66,-2.3582,0 +50275,66,-2.3609,0 +50276,66,-2.3633,0 +50277,66,-2.3654,0 +50278,66,-2.367,0 +50279,66,-2.3682,0 +50280,66,-2.3691,0 +50281,66,-2.3696,0 +50283,66,-2.3694,0 +50284,66,-2.3689,0 +50285,66,-2.3681,0 +50286,66,-2.3671,0 +50287,66,-2.3659,0 +50288,66,-2.3647,0 +50289,66,-2.3632,0 +50290,66,-2.3615,0 +50291,66,-2.3597,0 +50292,66,-2.3578,0 +50293,66,-2.3557,0 +50294,66,-2.3534,0 +50295,66,-2.3511,0 +50296,66,-2.3487,0 +50297,66,-2.3462,0 +50298,66,-2.3437,0 +50299,66,-2.3409,0 +50300,66,-2.338,0 +50301,66,-2.3348,0 +50302,66,-2.3316,0 +50303,66,-2.3285,0 +50304,66,-2.3253,0 +50305,66,-2.3222,0 +50306,66,-2.319,0 +50307,66,-2.3158,0 +50308,66,-2.3124,0 +50309,66,-2.3089,0 +50310,66,-2.3053,0 +50311,66,-2.3016,0 +50312,66,-2.2977,0 +50313,66,-2.2938,0 +50314,66,-2.2898,0 +50315,66,-2.2857,0 +50316,66,-2.2816,0 +50317,66,-2.2777,0 +50318,66,-2.2738,0 +50319,66,-2.2697,0 +50320,66,-2.2654,0 +50321,66,-2.2613,0 +50322,66,-2.257,0 +50323,66,-2.2525,0 +50324,66,-2.2481,0 +50325,66,-2.2437,0 +50326,66,-2.2394,0 +50327,66,-2.2353,0 +50328,66,-2.2313,0 +50329,66,-2.2275,0 +50330,66,-2.224,0 +50331,66,-2.2207,0 +50332,66,-2.2174,0 +50333,66,-2.2143,0 +50334,66,-2.2115,0 +50335,66,-2.2088,0 +50336,66,-2.2062,0 +50337,66,-2.2039,0 +50338,66,-2.2018,0 +50339,66,-2.1997,0 +50340,66,-2.198,0 +50341,66,-2.1965,0 +50342,66,-2.1952,0 +50343,66,-2.1943,0 +50344,66,-2.1937,0 +50345,66,-2.1934,0 +50346,66,-2.1936,0 +50347,66,-2.194,0 +50348,66,-2.1946,0 +50349,66,-2.1954,0 +50350,66,-2.1967,0 +50351,66,-2.198,0 +50352,66,-2.2,0 +50353,66,-2.2022,0 +50354,66,-2.2049,0 +50355,66,-2.2081,0 +50356,66,-2.2116,0 +50357,66,-2.2154,0 +50358,66,-2.2196,0 +50359,66,-2.2244,0 +50360,66,-2.2295,0 +50361,66,-2.235,0 +50362,66,-2.2409,0 +50363,66,-2.2472,0 +50364,66,-2.254,0 +50365,66,-2.2614,0 +50366,66,-2.2691,0 +50367,66,-2.2774,0 +50368,66,-2.2864,0 +50369,66,-2.2961,0 +50370,66,-2.3063,0 +50371,66,-2.317,0 +50372,66,-2.3284,0 +50373,66,-2.3402,0 +50374,66,-2.3525,0 +50375,66,-2.3654,0 +50376,66,-2.3787,0 +50377,66,-2.3927,0 +50378,66,-2.4073,0 +50379,66,-2.4224,0 +50380,66,-2.4377,0 +50381,66,-2.4533,0 +50382,66,-2.4695,0 +50383,66,-2.4864,0 +50384,66,-2.5038,0 +50385,66,-2.5217,0 +50386,66,-2.54,0 +50387,66,-2.559,0 +50388,66,-2.5783,0 +50389,66,-2.5977,0 +50390,66,-2.6177,0 +50391,66,-2.6381,0 +50392,66,-2.6589,0 +50393,66,-2.6801,0 +50394,66,-2.7017,0 +50395,66,-2.7235,0 +50396,66,-2.7459,0 +50397,66,-2.7688,0 +50398,66,-2.792,0 +50399,66,-2.816,0 +50400,66,-2.8405,0 +50401,66,-2.8657,0 +50402,66,-2.8912,0 +50403,66,-2.9174,0 +50404,66,-2.9441,0 +50405,66,-2.9713,0 +50406,66,-2.999,0 +50407,66,-3.0267,0 +50408,66,-3.055,0 +50409,66,-3.0836,0 +50410,66,-3.1127,0 +50411,66,-3.1421,0 +50412,66,-3.1718,0 +50413,66,-3.2021,0 +50414,66,-3.2325,0 +50415,66,-3.2636,0 +50416,66,-3.2951,0 +50417,66,-3.3269,0 +50418,62,-3.3592,0 +50419,62,-3.3918,0 +50420,62,-3.4245,0 +50421,62,-3.4577,0 +50422,62,-3.4913,0 +50423,62,-3.5252,0 +50424,62,-3.5595,0 +50425,62,-3.5939,0 +50426,62,-3.6285,0 +50427,62,-3.6636,0 +50428,62,-3.6989,0 +50429,62,-3.7342,0 +50430,62,-3.7695,0 +50431,62,-3.8049,0 +50432,62,-3.8404,0 +50433,62,-3.8757,0 +50434,62,-3.9111,0 +50435,62,-3.9464,0 +50436,62,-3.9816,0 +50437,62,-4.0169,0 +50438,62,-4.052,0 +50439,62,-4.0868,0 +50440,62,-4.1215,0 +50441,62,-4.1559,0 +50442,62,-4.1902,0 +50443,62,-4.2241,0 +50444,62,-4.2578,0 +50445,62,-4.2908,0 +50446,62,-4.3235,0 +50447,62,-4.3558,0 +50448,62,-4.3878,0 +50449,62,-4.4193,0 +50450,62,-4.4503,0 +50451,62,-4.4809,0 +50452,62,-4.511,0 +50453,62,-4.5405,0 +50454,62,-4.5698,0 +50455,62,-4.5984,0 +50456,62,-4.6265,0 +50457,62,-4.6539,0 +50458,62,-4.6809,0 +50459,62,-4.7077,0 +50460,62,-4.734,0 +50461,62,-4.7599,0 +50462,62,-4.7857,0 +50463,62,-4.8111,0 +50464,62,-4.836,0 +50465,62,-4.8603,0 +50466,62,-4.884,0 +50467,62,-4.9071,0 +50468,62,-4.9301,0 +50469,62,-4.953,0 +50470,62,-4.9752,0 +50471,62,-4.9968,0 +50472,62,-5.0179,0 +50473,62,-5.0384,0 +50474,62,-5.0585,0 +50475,62,-5.0782,0 +50476,62,-5.0977,0 +50477,62,-5.1171,0 +50478,62,-5.1365,0 +50479,62,-5.1556,0 +50480,62,-5.1742,0 +50481,62,-5.1925,0 +50482,62,-5.2105,0 +50483,62,-5.228,0 +50484,62,-5.2451,0 +50485,62,-5.2615,0 +50486,62,-5.2776,0 +50487,62,-5.2929,0 +50488,62,-5.3076,0 +50489,62,-5.3221,0 +50490,62,-5.3358,0 +50491,62,-5.3491,0 +50492,62,-5.362,0 +50493,62,-5.3745,0 +50494,62,-5.3868,0 +50495,62,-5.3986,0 +50496,62,-5.41,0 +50497,62,-5.4212,0 +50498,62,-5.4319,0 +50499,62,-5.4423,0 +50500,62,-5.4523,0 +50501,62,-5.4618,0 +50502,62,-5.4707,0 +50503,62,-5.4789,0 +50504,62,-5.4865,0 +50505,62,-5.4934,0 +50506,62,-5.4995,0 +50507,62,-5.505,0 +50508,62,-5.5098,0 +50509,62,-5.514,0 +50510,62,-5.5174,0 +50511,62,-5.5201,0 +50512,62,-5.5219,0 +50513,62,-5.5232,0 +50514,62,-5.5237,0 +50516,62,-5.523,0 +50517,62,-5.5218,0 +50518,62,-5.5202,0 +50519,62,-5.5181,0 +50520,62,-5.5156,0 +50521,62,-5.5125,0 +50522,62,-5.5089,0 +50523,62,-5.5049,0 +50524,62,-5.5006,0 +50525,62,-5.496,0 +50526,62,-5.4913,0 +50527,62,-5.4864,0 +50528,62,-5.4814,0 +50529,62,-5.4762,0 +50530,62,-5.4707,0 +50531,62,-5.4653,0 +50532,62,-5.4598,0 +50533,62,-5.4544,0 +50534,62,-5.4492,0 +50535,62,-5.4439,0 +50536,62,-5.4386,0 +50537,62,-5.4333,0 +50538,62,-5.4282,0 +50539,62,-5.4232,0 +50540,62,-5.4184,0 +50541,62,-5.4134,0 +50542,62,-5.4085,0 +50543,62,-5.4035,0 +50544,62,-5.3987,0 +50545,62,-5.3939,0 +50546,62,-5.3889,0 +50547,62,-5.3839,0 +50548,62,-5.3791,0 +50549,62,-5.374,0 +50550,62,-5.3691,0 +50551,62,-5.3641,0 +50552,62,-5.3592,0 +50553,62,-5.3543,0 +50554,62,-5.3498,0 +50555,62,-5.3452,0 +50556,62,-5.3404,0 +50557,62,-5.3359,0 +50558,62,-5.3312,0 +50559,62,-5.3266,0 +50560,62,-5.3222,0 +50561,62,-5.3177,0 +50562,62,-5.3131,0 +50563,62,-5.3085,0 +50564,62,-5.3037,0 +50565,62,-5.2987,0 +50566,62,-5.2935,0 +50567,62,-5.2885,0 +50568,62,-5.2835,0 +50569,62,-5.2784,0 +50570,62,-5.2734,0 +50571,62,-5.2685,0 +50572,62,-5.2638,0 +50573,62,-5.2592,0 +50574,62,-5.2548,0 +50575,62,-5.2507,0 +50576,62,-5.2464,0 +50577,62,-5.2423,0 +50578,62,-5.2384,0 +50579,62,-5.2345,0 +50580,62,-5.2307,0 +50581,62,-5.2267,0 +50582,62,-5.2231,0 +50583,62,-5.2192,0 +50584,62,-5.2153,0 +50585,62,-5.2118,0 +50586,62,-5.2082,0 +50587,62,-5.2046,0 +50588,62,-5.2011,0 +50589,62,-5.1977,0 +50590,62,-5.1945,0 +50591,62,-5.1914,0 +50592,62,-5.1885,0 +50593,62,-5.1857,0 +50594,62,-5.1831,0 +50595,62,-5.1807,0 +50596,62,-5.1783,0 +50597,62,-5.1762,0 +50598,62,-5.1742,0 +50599,62,-5.1726,0 +50600,62,-5.1709,0 +50601,62,-5.1694,0 +50602,62,-5.1681,0 +50603,62,-5.167,0 +50604,62,-5.1661,0 +50605,62,-5.1654,0 +50606,62,-5.1648,0 +50607,62,-5.1646,0 +50609,62,-5.1649,0 +50610,62,-5.1654,0 +50611,62,-5.1662,0 +50612,62,-5.1669,0 +50613,62,-5.1678,0 +50614,62,-5.1689,0 +50615,62,-5.17,0 +50616,62,-5.1711,0 +50617,62,-5.172,0 +50618,62,-5.1731,0 +50619,62,-5.1742,0 +50620,62,-5.1752,0 +50621,62,-5.1758,0 +50622,62,-5.1763,0 +50623,62,-5.177,0 +50624,62,-5.1775,0 +50625,62,-5.1778,0 +50626,62,-5.1782,0 +50627,62,-5.1784,0 +50628,62,-5.1787,0 +50629,62,-5.179,0 +50630,62,-5.1795,0 +50631,62,-5.1799,0 +50632,62,-5.1804,0 +50633,62,-5.181,0 +50634,62,-5.1815,0 +50635,62,-5.182,0 +50636,62,-5.1828,0 +50637,62,-5.1834,0 +50638,62,-5.1842,0 +50639,62,-5.185,0 +50640,62,-5.1859,0 +50641,62,-5.1868,0 +50642,62,-5.1878,0 +50643,62,-5.1889,0 +50644,62,-5.19,0 +50645,62,-5.1913,0 +50646,62,-5.1927,0 +50647,62,-5.1942,0 +50648,62,-5.1958,0 +50649,62,-5.1977,0 +50650,62,-5.1999,0 +50651,62,-5.2022,0 +50652,62,-5.2049,0 +50653,62,-5.2077,0 +50654,62,-5.2106,0 +50655,62,-5.2137,0 +50656,62,-5.2169,0 +50657,62,-5.2203,0 +50658,62,-5.2236,0 +50659,62,-5.227,0 +50660,62,-5.2307,0 +50661,62,-5.2347,0 +50662,62,-5.2389,0 +50663,62,-5.2435,0 +50664,62,-5.2481,0 +50665,62,-5.2529,0 +50666,62,-5.2578,0 +50667,62,-5.2628,0 +50668,62,-5.268,0 +50669,62,-5.2731,0 +50670,62,-5.2787,0 +50671,62,-5.2842,0 +50672,62,-5.2897,0 +50673,62,-5.2954,0 +50674,62,-5.301,0 +50675,62,-5.3068,0 +50676,62,-5.3127,0 +50677,62,-5.3186,0 +50678,62,-5.3243,0 +50679,62,-5.3297,0 +50680,62,-5.3348,0 +50681,62,-5.3399,0 +50682,62,-5.3452,0 +50683,62,-5.3507,0 +50684,62,-5.3566,0 +50685,62,-5.3626,0 +50686,62,-5.3687,0 +50687,62,-5.3752,0 +50688,62,-5.382,0 +50689,62,-5.389,0 +50690,62,-5.3964,0 +50691,62,-5.4042,0 +50692,62,-5.412,0 +50693,62,-5.4201,0 +50694,62,-5.4282,0 +50695,62,-5.4364,0 +50696,62,-5.4444,0 +50697,62,-5.4522,0 +50698,62,-5.4599,0 +50699,62,-5.4675,0 +50700,62,-5.4752,0 +50701,62,-5.4829,0 +50702,62,-5.4904,0 +50703,62,-5.4978,0 +50704,62,-5.5052,0 +50705,62,-5.5125,0 +50706,62,-5.5195,0 +50707,62,-5.5265,0 +50708,62,-5.5334,0 +50709,62,-5.5403,0 +50710,62,-5.5471,0 +50711,62,-5.5538,0 +50712,62,-5.5607,0 +50713,62,-5.5675,0 +50714,62,-5.5742,0 +50715,62,-5.5809,0 +50716,62,-5.5875,0 +50717,62,-5.5937,0 +50718,62,-5.5997,0 +50719,62,-5.6056,0 +50720,62,-5.6112,0 +50721,62,-5.6167,0 +50722,62,-5.622,0 +50723,62,-5.6269,0 +50724,62,-5.6314,0 +50725,62,-5.6355,0 +50726,62,-5.6393,0 +50727,62,-5.6427,0 +50728,62,-5.6456,0 +50729,62,-5.6484,0 +50730,62,-5.6507,0 +50731,62,-5.6528,0 +50732,62,-5.6545,0 +50733,62,-5.6556,0 +50734,62,-5.6565,0 +50735,62,-5.6568,0 +50736,62,-5.6567,0 +50737,62,-5.6561,0 +50738,62,-5.655,0 +50739,62,-5.6532,0 +50740,62,-5.6511,0 +50741,62,-5.6485,0 +50742,62,-5.6453,0 +50743,62,-5.6417,0 +50744,62,-5.638,0 +50745,62,-5.6337,0 +50746,62,-5.629,0 +50747,62,-5.6234,0 +50748,62,-5.6169,0 +50749,62,-5.6095,0 +50750,62,-5.6012,0 +50751,62,-5.5928,0 +50752,62,-5.5835,0 +50753,62,-5.5737,0 +50754,62,-5.5635,0 +50755,62,-5.5525,0 +50756,62,-5.5413,0 +50757,62,-5.5294,0 +50758,62,-5.5173,0 +50759,62,-5.5047,0 +50760,62,-5.4918,0 +50761,62,-5.4786,0 +50762,62,-5.4651,0 +50763,62,-5.4513,0 +50764,62,-5.4372,0 +50765,62,-5.4233,0 +50766,62,-5.4098,0 +50767,62,-5.397,0 +50768,62,-5.3841,0 +50769,62,-5.3707,0 +50770,62,-5.3566,0 +50771,62,-5.3418,0 +50772,62,-5.3268,0 +50773,62,-5.3114,0 +50774,62,-5.2952,0 +50775,62,-5.2786,0 +50776,62,-5.2615,0 +50777,62,-5.2436,0 +50778,62,-5.2247,0 +50779,62,-5.2056,0 +50780,62,-5.1859,0 +50781,62,-5.1659,0 +50782,62,-5.1454,0 +50783,62,-5.125,0 +50784,62,-5.1046,0 +50785,62,-5.084,0 +50786,62,-5.0633,0 +50787,62,-5.0375,0 +50788,62,-5.0099,0 +50789,62,-4.9824,0 +50790,62,-4.9551,0 +50791,62,-4.928,0 +50792,62,-4.901,0 +50793,62,-4.8741,0 +50794,62,-4.8478,0 +50795,62,-4.8216,0 +50796,62,-4.7956,0 +50797,62,-4.7697,0 +50798,62,-4.7437,0 +50799,62,-4.7176,0 +50800,62,-4.6914,0 +50801,62,-4.6653,0 +50802,62,-4.639,0 +50803,62,-4.6127,0 +50804,62,-4.5866,0 +50805,62,-4.5603,0 +50806,62,-4.5341,0 +50807,62,-4.508,0 +50808,62,-4.482,0 +50809,62,-4.456,0 +50810,62,-4.4303,0 +50811,62,-4.4048,0 +50812,62,-4.3795,0 +50813,62,-4.3546,0 +50814,62,-4.3299,0 +50815,62,-4.3054,0 +50816,62,-4.2812,0 +50817,62,-4.2571,0 +50818,62,-4.2332,0 +50819,62,-4.21,0 +50820,62,-4.1869,0 +50821,62,-4.1639,0 +50822,62,-4.1414,0 +50823,62,-4.119,0 +50824,62,-4.0966,0 +50825,62,-4.0747,0 +50826,62,-4.0531,0 +50827,62,-4.0316,0 +50828,62,-4.0104,0 +50829,62,-3.9895,0 +50830,62,-3.969,0 +50831,62,-3.9487,0 +50832,62,-3.929,0 +50833,62,-3.9095,0 +50834,62,-3.8907,0 +50835,62,-3.8723,0 +50836,62,-3.8546,0 +50837,62,-3.8374,0 +50838,62,-3.8204,0 +50839,62,-3.804,0 +50840,62,-3.7879,0 +50841,62,-3.7724,0 +50842,62,-3.7572,0 +50843,62,-3.7422,0 +50844,62,-3.7276,0 +50845,62,-3.7131,0 +50846,62,-3.6991,0 +50847,62,-3.6852,0 +50848,62,-3.6715,0 +50849,62,-3.658,0 +50850,62,-3.6446,0 +50851,62,-3.6317,0 +50852,62,-3.6185,0 +50853,62,-3.6052,0 +50854,62,-3.5917,0 +50855,62,-3.5786,0 +50856,62,-3.566,0 +50857,62,-3.554,0 +50858,62,-3.5421,0 +50859,62,-3.5304,0 +50860,62,-3.5192,0 +50861,62,-3.5082,0 +50862,62,-3.4976,0 +50863,62,-3.4873,0 +50864,62,-3.4774,0 +50865,62,-3.4679,0 +50866,62,-3.4585,0 +50867,62,-3.4492,0 +50868,62,-3.4402,0 +50869,62,-3.4313,0 +50870,62,-3.4226,0 +50871,62,-3.414,0 +50872,62,-3.4056,0 +50873,62,-3.3999,0 +50874,62,-3.4045,0 +50875,62,-3.4094,0 +50876,62,-3.4144,0 +50877,62,-3.4191,0 +50878,62,-3.4239,0 +50879,62,-3.4288,0 +50880,62,-3.4335,0 +50881,62,-3.4379,0 +50882,62,-3.4425,0 +50883,62,-3.4472,0 +50884,62,-3.4519,0 +50885,62,-3.4568,0 +50886,62,-3.462,0 +50887,62,-3.4672,0 +50888,62,-3.4727,0 +50889,62,-3.4786,0 +50890,62,-3.4846,0 +50891,62,-3.4909,0 +50892,62,-3.4975,0 +50893,62,-3.5041,0 +50894,62,-3.5111,0 +50895,62,-3.5181,0 +50896,62,-3.5253,0 +50897,62,-3.5326,0 +50898,62,-3.54,0 +50899,62,-3.5474,0 +50900,62,-3.5548,0 +50901,62,-3.5624,0 +50902,62,-3.5701,0 +50903,62,-3.5778,0 +50904,62,-3.5857,0 +50905,62,-3.5933,0 +50906,62,-3.601,0 +50907,62,-3.6088,0 +50908,62,-3.6166,0 +50909,62,-3.6244,0 +50910,62,-3.6324,0 +50911,62,-3.6405,0 +50912,62,-3.6486,0 +50913,62,-3.6568,0 +50914,62,-3.6651,0 +50915,62,-3.6736,0 +50916,62,-3.682,0 +50917,62,-3.6905,0 +50918,62,-3.6989,0 +50919,62,-3.707,0 +50920,62,-3.7153,0 +50921,62,-3.7235,0 +50922,62,-3.7319,0 +50923,62,-3.74,0 +50924,62,-3.7481,0 +50925,62,-3.7564,0 +50926,62,-3.7646,0 +50927,62,-3.7728,0 +50928,62,-3.7809,0 +50929,62,-3.7893,0 +50930,62,-3.7977,0 +50931,62,-3.8059,0 +50932,62,-3.8143,0 +50933,62,-3.8226,0 +50934,62,-3.8309,0 +50935,62,-3.8395,0 +50936,62,-3.8478,0 +50937,62,-3.8562,0 +50938,62,-3.8646,0 +50939,62,-3.8729,0 +50940,62,-3.8813,0 +50941,62,-3.8897,0 +50942,62,-3.898,0 +50943,62,-3.9063,0 +50944,62,-3.9147,0 +50945,62,-3.9232,0 +50946,62,-3.9317,0 +50947,62,-3.9402,0 +50948,62,-3.9488,0 +50949,62,-3.9573,0 +50950,62,-3.966,0 +50951,62,-3.9744,0 +50952,62,-3.9832,0 +50953,62,-3.9922,0 +50954,62,-4.0014,0 +50955,62,-4.0107,0 +50956,62,-4.0201,0 +50957,62,-4.0293,0 +50958,62,-4.0386,0 +50959,62,-4.0478,0 +50960,62,-4.0532,0 +50961,62,-4.056,0 +50962,62,-4.0585,0 +50963,62,-4.0613,0 +50964,62,-4.0639,0 +50965,62,-4.0663,0 +50966,62,-4.0689,0 +50967,62,-4.0715,0 +50968,62,-4.0741,0 +50969,62,-4.0764,0 +50970,62,-4.0786,0 +50971,62,-4.0808,0 +50972,62,-4.0828,0 +50973,62,-4.0847,0 +50974,62,-4.0866,0 +50975,62,-4.0883,0 +50976,62,-4.0899,0 +50977,62,-4.0914,0 +50978,62,-4.0927,0 +50979,62,-4.0942,0 +50980,62,-4.0955,0 +50981,62,-4.0966,0 +50982,62,-4.0978,0 +50983,62,-4.099,0 +50984,62,-4.1002,0 +50985,62,-4.1013,0 +50986,62,-4.1023,0 +50987,62,-4.1032,0 +50988,62,-4.1041,0 +50989,62,-4.1048,0 +50990,62,-4.1055,0 +50991,62,-4.1062,0 +50992,62,-4.107,0 +50993,62,-4.1076,0 +50994,62,-4.1082,0 +50995,62,-4.109,0 +50996,62,-4.1097,0 +50997,62,-4.1104,0 +50998,62,-4.1111,0 +50999,62,-4.1118,0 +51000,62,-4.1124,0 +51001,62,-4.113,0 +51002,62,-4.1135,0 +51003,62,-4.114,0 +51004,62,-4.1143,0 +51005,62,-4.1148,0 +51006,62,-4.1153,0 +51007,62,-4.1158,0 +51008,62,-4.1161,0 +51009,62,-4.1168,0 +51010,62,-4.1174,0 +51011,62,-4.1178,0 +51012,62,-4.118,0 +51013,62,-4.1182,0 +51014,62,-4.1184,0 +51015,62,-4.1183,0 +51016,62,-4.1181,0 +51018,62,-4.118,0 +51019,62,-4.1178,0 +51020,62,-4.1175,0 +51021,62,-4.1173,0 +51022,62,-4.1171,0 +51023,62,-4.1169,0 +51024,62,-4.1166,0 +51025,62,-4.1163,0 +51026,62,-4.1159,0 +51027,62,-4.1154,0 +51028,62,-4.1149,0 +51029,62,-4.1142,0 +51030,62,-4.1136,0 +51031,62,-4.1128,0 +51032,62,-4.1121,0 +51033,62,-4.1115,0 +51034,62,-4.1108,0 +51035,62,-4.1102,0 +51036,62,-4.1097,0 +51037,62,-4.1091,0 +51038,62,-4.1088,0 +51039,62,-4.1084,0 +51040,62,-4.1078,0 +51041,62,-4.1073,0 +51042,62,-4.1068,0 +51043,62,-4.1063,0 +51044,62,-4.1058,0 +51045,62,-4.1053,0 +51046,62,-4.105,0 +51047,62,-4.1046,0 +51048,62,-4.1043,0 +51049,62,-4.1042,0 +51050,62,-4.1039,0 +51054,62,-4.104,0 +51055,62,-4.1043,0 +51056,62,-4.1044,0 +51057,62,-4.1048,0 +51058,62,-4.1052,0 +51059,62,-4.1057,0 +51060,62,-4.1063,0 +51061,62,-4.1068,0 +51062,62,-4.1076,0 +51063,62,-4.1083,0 +51064,62,-4.1091,0 +51065,62,-4.1097,0 +51066,62,-4.1105,0 +51067,62,-4.1112,0 +51068,62,-4.1119,0 +51069,62,-4.1125,0 +51070,62,-4.113,0 +51071,62,-4.1137,0 +51072,62,-4.1145,0 +51073,62,-4.1152,0 +51074,62,-4.1161,0 +51075,62,-4.1172,0 +51076,62,-4.1183,0 +51077,62,-4.1195,0 +51078,62,-4.1206,0 +51079,62,-4.1218,0 +51080,62,-4.123,0 +51081,62,-4.1243,0 +51082,62,-4.1256,0 +51083,62,-4.1268,0 +51084,62,-4.1281,0 +51085,62,-4.1293,0 +51086,62,-4.1307,0 +51087,62,-4.132,0 +51088,62,-4.1333,0 +51089,62,-4.1348,0 +51090,62,-4.1364,0 +51091,62,-4.1379,0 +51092,62,-4.1396,0 +51093,62,-4.141,0 +51094,62,-4.1425,0 +51095,62,-4.1438,0 +51096,62,-4.145,0 +51097,62,-4.1463,0 +51098,62,-4.1475,0 +51099,62,-4.1489,0 +51100,62,-4.1502,0 +51101,62,-4.1515,0 +51102,62,-4.1529,0 +51103,62,-4.1543,0 +51104,62,-4.1558,0 +51105,62,-4.1572,0 +51106,62,-4.1586,0 +51107,62,-4.1601,0 +51108,62,-4.1615,0 +51109,62,-4.1629,0 +51110,62,-4.1645,0 +51111,62,-4.1662,0 +51112,62,-4.1678,0 +51113,62,-4.1697,0 +51114,62,-4.1716,0 +51115,62,-4.1734,0 +51116,62,-4.1754,0 +51117,62,-4.1773,0 +51118,62,-4.1791,0 +51119,62,-4.1807,0 +51120,62,-4.1822,0 +51121,62,-4.1836,0 +51122,62,-4.1847,0 +51123,62,-4.1857,0 +51124,62,-4.1866,0 +51125,62,-4.1873,0 +51126,62,-4.1881,0 +51127,62,-4.1888,0 +51128,62,-4.1894,0 +51129,62,-4.19,0 +51130,62,-4.1904,0 +51131,62,-4.1908,0 +51132,62,-4.1912,0 +51133,62,-4.1915,0 +51134,62,-4.1917,0 +51135,62,-4.192,0 +51136,62,-4.1921,0 +51137,62,-4.1923,0 +51140,62,-4.1922,0 +51141,62,-4.192,0 +51142,62,-4.1916,0 +51143,62,-4.1915,0 +51144,62,-4.191,0 +51145,62,-4.1905,0 +51146,62,-4.1898,0 +51147,62,-4.1892,0 +51148,62,-4.1884,0 +51149,62,-4.1875,0 +51150,62,-4.1865,0 +51151,62,-4.1855,0 +51152,62,-4.1845,0 +51153,62,-4.1834,0 +51154,62,-4.1824,0 +51155,62,-4.1815,0 +51156,62,-4.1806,0 +51157,62,-4.1797,0 +51158,62,-4.1784,0 +51159,62,-4.177,0 +51160,62,-4.1756,0 +51161,62,-4.1738,0 +51162,62,-4.1717,0 +51163,62,-4.1694,0 +51164,62,-4.1672,0 +51165,62,-4.1646,0 +51166,62,-4.1622,0 +51167,62,-4.1595,0 +51168,62,-4.1566,0 +51169,62,-4.1536,0 +51170,62,-4.1505,0 +51171,62,-4.1472,0 +51172,62,-4.1436,0 +51173,62,-4.1401,0 +51174,62,-4.1364,0 +51175,62,-4.1324,0 +51176,62,-4.1281,0 +51177,62,-4.1237,0 +51178,62,-4.1192,0 +51179,62,-4.1144,0 +51180,62,-4.1097,0 +51181,62,-4.1049,0 +51182,62,-4.1,0 +51183,62,-4.0951,0 +51184,62,-4.09,0 +51185,62,-4.0848,0 +51186,62,-4.0794,0 +51187,62,-4.0739,0 +51188,62,-4.0684,0 +51189,62,-4.0626,0 +51190,62,-4.0568,0 +51191,62,-4.0508,0 +51192,62,-4.0445,0 +51193,62,-4.0382,0 +51194,62,-4.0316,0 +51195,62,-4.0248,0 +51196,62,-4.0179,0 +51197,62,-4.0107,0 +51198,62,-4.0034,0 +51199,62,-3.9957,0 +51200,62,-3.9877,0 +51201,62,-3.9796,0 +51202,62,-3.9712,0 +51203,62,-3.9626,0 +51204,62,-3.9536,0 +51205,62,-3.9446,0 +51206,62,-3.9352,0 +51207,62,-3.9255,0 +51208,62,-3.9154,0 +51209,62,-3.905,0 +51210,62,-3.8942,0 +51211,62,-3.883,0 +51212,62,-3.8712,0 +51213,62,-3.8591,0 +51214,62,-3.8464,0 +51215,62,-3.8334,0 +51216,62,-3.82,0 +51217,62,-3.8062,0 +51218,62,-3.7921,0 +51219,62,-3.7778,0 +51220,62,-3.7631,0 +51221,62,-3.7481,0 +51222,62,-3.7326,0 +51223,62,-3.7168,0 +51224,62,-3.7007,0 +51225,62,-3.6839,0 +51226,62,-3.6669,0 +51227,62,-3.6495,0 +51228,62,-3.6316,0 +51229,62,-3.6131,0 +51230,62,-3.5943,0 +51231,62,-3.5753,0 +51232,62,-3.5556,0 +51233,62,-3.5356,0 +51234,62,-3.515,0 +51235,62,-3.4939,0 +51236,62,-3.4724,0 +51237,62,-3.4503,0 +51238,62,-3.4277,0 +51239,62,-3.4047,0 +51240,62,-3.3812,0 +51241,62,-3.3571,0 +51242,62,-3.3325,0 +51243,62,-3.3076,0 +51244,62,-3.2825,0 +51245,62,-3.2571,0 +51246,62,-3.2314,0 +51247,62,-3.2054,0 +51248,62,-3.1792,0 +51249,62,-3.1528,0 +51250,62,-3.1258,0 +51251,62,-3.0984,0 +51252,62,-3.0707,0 +51253,62,-3.0428,0 +51254,62,-3.0143,0 +51255,62,-2.9855,0 +51256,62,-2.9563,0 +51257,62,-2.9268,0 +51258,62,-2.897,0 +51259,62,-2.8669,0 +51260,62,-2.8365,0 +51261,62,-2.8058,0 +51262,62,-2.7748,0 +51263,62,-2.7437,0 +51264,62,-2.7123,0 +51265,62,-2.6806,0 +51266,62,-2.6486,0 +51267,62,-2.6163,0 +51268,62,-2.5837,0 +51269,62,-2.5509,0 +51270,62,-2.5178,0 +51271,62,-2.4844,0 +51272,62,-2.451,0 +51273,62,-2.4173,0 +51274,62,-2.3834,0 +51275,62,-2.3494,0 +51276,62,-2.3153,0 +51277,62,-2.2808,0 +51278,62,-2.2463,0 +51279,62,-2.2118,0 +51280,62,-2.177,0 +51281,62,-2.1425,0 +51282,62,-2.1076,0 +51283,62,-2.0725,0 +51284,62,-2.0374,0 +51285,62,-2.002,0 +51286,62,-1.9667,0 +51287,62,-1.9311,0 +51288,62,-1.8955,0 +51289,62,-1.8599,0 +51290,62,-1.8245,0 +51291,62,-1.7893,0 +51292,62,-1.7542,0 +51293,62,-1.7196,0 +51294,62,-1.6855,0 +51295,62,-1.6518,0 +51296,62,-1.6182,0 +51297,62,-1.5851,0 +51298,62,-1.552,0 +51299,62,-1.5193,0 +51300,62,-1.4868,0 +51301,62,-1.4545,0 +51302,62,-1.4225,0 +51303,62,-1.3909,0 +51304,62,-1.3594,0 +51305,62,-1.3281,0 +51306,62,-1.2969,0 +51307,62,-1.2659,0 +51308,62,-1.2354,0 +51309,62,-1.2052,0 +51310,62,-1.1753,0 +51311,62,-1.1458,0 +51312,62,-1.1168,0 +51313,62,-1.0882,0 +51314,62,-1.0599,0 +51315,62,-1.0322,0 +51316,62,-1.0047,0 +51317,62,-0.97736,0 +51318,62,-0.95048,0 +51319,62,-0.92399,0 +51320,62,-0.8979,0 +51321,62,-0.87222,0 +51322,62,-0.84703,0 +51323,62,-0.82225,0 +51324,62,-0.79803,0 +51325,62,-0.77436,0 +51326,62,-0.75107,0 +51327,62,-0.72815,0 +51328,62,-0.70578,0 +51329,62,-0.68355,0 +51330,62,-0.66165,0 +51331,62,-0.64002,0 +51332,62,-0.61871,0 +51333,62,-0.59787,0 +51334,62,-0.57733,0 +51335,62,-0.5571,0 +51336,62,-0.53743,0 +51337,62,-0.51834,0 +51338,62,-0.49958,0 +51339,62,-0.48105,0 +51340,62,-0.46307,0 +51341,62,-0.4455,0 +51342,62,-0.42832,0 +51343,62,-0.4115,0 +51344,62,-0.39508,0 +51345,62,-0.37901,0 +51346,62,-0.36318,0 +51347,62,-0.34769,0 +51348,62,-0.3326,0 +51349,62,-0.31778,0 +51350,62,-0.3033,0 +51351,62,-0.28919,0 +51352,62,-0.27547,0 +51353,62,-0.26205,0 +51354,62,-0.24892,0 +51355,62,-0.23609,0 +51356,62,-0.22346,0 +51357,62,-0.21117,0 +51358,62,-0.19894,0 +51359,62,-0.18703,0 +51360,62,-0.17502,0 +51361,62,-0.16312,0 +51362,60,-0.15129,0 +51363,60,-0.13956,0 +51364,60,-0.12785,0 +51365,60,-0.11616,0 +51366,60,-0.10447,0 +51367,60,-0.092734,0 +51368,60,-0.08087,0 +51369,60,-0.068787,0 +51370,60,-0.056748,0 +51371,60,-0.044554,0 +51372,60,-0.032108,0 +51373,60,-0.019554,0 +51374,60,-0.0068623,0 +51375,60,0.0061599,0 +51376,60,0.019355,0 +51377,60,0.032741,0 +51378,60,0.046514,0 +51379,60,0.060661,0 +51380,60,0.075015,0 +51381,60,0.089537,0 +51382,60,0.10421,0 +51383,60,0.11884,0 +51384,60,0.13364,0 +51385,60,0.14874,0 +51386,60,0.16413,0 +51387,60,0.17981,0 +51388,60,0.19597,0 +51389,60,0.21259,0 +51390,60,0.22964,0 +51391,60,0.24706,0 +51392,60,0.26521,0 +51393,60,0.28425,0 +51394,60,0.30382,0 +51395,60,0.32412,0 +51396,60,0.34501,0 +51397,60,0.36666,0 +51398,60,0.38882,0 +51399,60,0.41128,0 +51400,60,0.43402,0 +51401,60,0.45711,0 +51402,60,0.48056,0 +51403,60,0.50428,0 +51404,60,0.52848,0 +51405,60,0.55312,0 +51406,60,0.57814,0 +51407,60,0.60372,0 +51408,60,0.62981,0 +51409,60,0.65644,0 +51410,60,0.68396,0 +51411,60,0.71211,0 +51412,60,0.74087,0 +51413,60,0.77036,0 +51414,60,0.80046,0 +51415,60,0.83118,0 +51416,60,0.8624,0 +51417,60,0.89439,0 +51418,60,0.92719,0 +51419,60,0.96083,0 +51420,60,0.99559,0 +51421,60,1.0313,0 +51422,60,1.0675,0 +51423,60,1.1045,0 +51424,60,1.1422,0 +51425,60,1.1804,0 +51426,60,1.2194,0 +51427,60,1.2591,0 +51428,60,1.2994,0 +51429,60,1.3406,0 +51430,60,1.3824,0 +51431,60,1.425,0 +51432,60,1.4683,0 +51433,60,1.5122,0 +51434,60,1.5569,0 +51435,60,1.6025,0 +51436,60,1.6488,0 +51437,60,1.6957,0 +51438,60,1.7435,0 +51439,60,1.7922,0 +51440,60,1.8417,0 +51441,60,1.8917,0 +51442,60,1.9426,0 +51443,60,1.994,0 +51444,60,2.046,0 +51445,60,2.0983,0 +51446,60,2.1511,0 +51447,60,2.204,0 +51448,60,2.2575,0 +51449,60,2.3108,0 +51450,60,2.3643,0 +51451,60,2.4179,0 +51452,60,2.4718,0 +51453,60,2.5259,0 +51454,60,2.5801,0 +51455,60,2.6341,0 +51456,60,2.6883,0 +51457,60,2.7429,0 +51458,60,2.7967,0 +51459,60,2.8503,0 +51460,60,2.904,0 +51461,60,2.9574,0 +51462,60,3.0101,0 +51463,60,3.0632,0 +51464,60,3.1164,0 +51465,60,3.1695,0 +51466,60,3.2225,0 +51467,60,3.2751,0 +51468,60,3.327,0 +51469,60,3.3784,0 +51470,60,3.4294,0 +51471,60,3.48,0 +51472,60,3.53,0 +51473,60,3.5792,0 +51474,60,3.6278,0 +51475,60,3.6762,0 +51476,60,3.7241,0 +51477,60,3.7717,0 +51478,60,3.8186,0 +51479,60,3.8657,0 +51480,60,3.913,0 +51481,60,3.96,0 +51482,60,4.0073,0 +51483,60,4.0542,0 +51484,60,4.1003,0 +51485,60,4.1458,0 +51486,60,4.1901,0 +51487,60,4.2334,0 +51488,60,4.2753,0 +51489,60,4.3157,0 +51490,60,4.3546,0 +51491,60,4.3914,0 +51492,60,4.427,0 +51493,60,4.4606,0 +51494,60,4.4924,0 +51495,60,4.5224,0 +51496,60,4.5499,0 +51497,60,4.5757,0 +51498,60,4.6,0 +51499,60,4.6224,0 +51500,60,4.643,0 +51501,60,4.6612,0 +51502,60,4.6777,0 +51503,60,4.692,0 +51504,60,4.7037,0 +51505,60,4.7127,0 +51506,60,4.7189,0 +51507,60,4.722,0 +51509,60,4.7203,0 +51510,60,4.7159,0 +51511,60,4.7079,0 +51512,60,4.6974,0 +51513,60,4.6832,0 +51514,60,4.6666,0 +51515,60,4.6474,0 +51516,60,4.6266,0 +51517,60,4.6044,0 +51518,60,4.5799,0 +51519,60,4.5532,0 +51520,60,4.5249,0 +51521,60,4.4947,0 +51522,60,4.4635,0 +51523,60,4.4325,0 +51524,60,4.4013,0 +51525,60,4.3709,0 +51526,60,4.3396,0 +51527,60,4.3087,0 +51528,60,4.278,0 +51529,60,4.2476,0 +51530,60,4.2173,0 +51531,60,4.1867,0 +51532,60,4.1547,0 +51533,60,4.1217,0 +51534,60,4.0861,0 +51535,60,4.0479,0 +51536,60,4.0076,0 +51537,60,3.964,0 +51538,60,3.9166,0 +51539,60,3.8658,0 +51540,60,3.8132,0 +51541,60,3.7591,0 +51542,60,3.7039,0 +51543,60,3.6483,0 +51544,60,3.5928,0 +51545,60,3.5365,0 +51546,60,3.4811,0 +51547,60,3.4277,0 +51548,60,3.373,0 +51549,60,3.3192,0 +51550,60,3.2639,0 +51551,60,3.2088,0 +51552,60,3.1544,0 +51553,60,3.1001,0 +51554,60,3.047,0 +51555,60,2.9946,0 +51556,60,2.9434,0 +51557,60,2.894,0 +51558,60,2.846,0 +51559,60,2.7969,0 +51560,60,2.7498,0 +51561,60,2.703,0 +51562,60,2.6578,0 +51563,60,2.6131,0 +51564,60,2.5683,0 +51565,60,2.5237,0 +51566,60,2.4787,0 +51567,60,2.433,0 +51568,60,2.3895,0 +51569,60,2.3459,0 +51570,60,2.3018,0 +51571,60,2.2562,0 +51572,60,2.2097,0 +51573,60,2.1621,0 +51574,60,2.1132,0 +51575,60,2.0636,0 +51576,60,2.0133,0 +51577,60,1.9619,0 +51578,60,1.9107,0 +51579,60,1.8612,0 +51580,60,1.813,0 +51581,60,1.7666,0 +51582,60,1.7239,0 +51583,60,1.6821,0 +51584,60,1.6423,0 +51585,60,1.6067,0 +51586,60,1.575,0 +51587,60,1.5451,0 +51588,60,1.5119,0 +51589,60,1.4834,0 +51590,60,1.4558,0 +51591,60,1.4262,0 +51592,60,1.3954,0 +51593,60,1.3619,0 +51594,60,1.3266,0 +51595,60,1.2905,0 +51596,60,1.2557,0 +51597,60,1.2189,0 +51598,0,1.1762,300 +51599,41,1.1762,0 +51600,41,1.022,0 +51601,41,1.0201,0 +51602,41,1.0164,0 +51603,41,1.0108,0 +51604,41,1.0115,0 +51605,41,1.0074,0 +51606,41,1.0058,0 +51607,41,1.0003,0 +51608,41,0.97699,0 +51609,41,0.94724,0 +51610,41,0.90128,0 +51611,41,0.84793,0 +51612,41,0.78694,0 +51613,41,0.72945,0 +51614,41,0.67171,0 +51615,41,0.60586,0 +51616,41,0.54435,0 +51617,41,0.48464,0 +51618,41,0.41822,0 +51619,41,0.35135,0 +51620,41,0.28728,0 +51621,41,0.21779,0 +51622,41,0.14246,0 +51623,41,0.071369,0 +51624,41,-0.001197,0 +51625,41,-0.075481,0 +51626,41,-0.1362,0 +51627,41,-0.1891,0 +51628,41,-0.23108,0 +51629,41,-0.26513,0 +51630,41,-0.28677,0 +51631,41,-0.30358,0 +51632,41,-0.32052,0 +51633,41,-0.33306,0 +51634,41,-0.3427,0 +51635,41,-0.3516,0 +51636,41,-0.35996,0 +51637,41,-0.36852,0 +51638,41,-0.37349,0 +51639,41,-0.37789,0 +51640,41,-0.3805,0 +51641,41,-0.38202,0 +51642,41,-0.38298,0 +51643,41,-0.38318,0 +51644,41,-0.38126,0 +51645,41,-0.37801,0 +51646,41,-0.37455,0 +51647,41,-0.37008,0 +51648,41,-0.36428,0 +51649,41,-0.3565,0 +51650,41,-0.34788,0 +51651,41,-0.33843,0 +51652,41,-0.32957,0 +51653,41,-0.32146,0 +51654,41,-0.31316,0 +51655,41,-0.30351,0 +51656,41,-0.29128,0 +51657,41,-0.27867,0 +51658,41,-0.26793,0 +51659,41,-0.25865,0 +51660,41,-0.24794,0 +51661,41,-0.2375,0 +51662,41,-0.22518,0 +51663,41,-0.21243,0 +51664,41,-0.19931,0 +51665,41,-0.18637,0 +51666,41,-0.17263,0 +51667,41,-0.15904,0 +51668,41,-0.14489,0 +51669,41,-0.13006,0 +51670,41,-0.11401,0 +51671,41,-0.095846,0 +51672,41,-0.076703,0 +51673,41,-0.057728,0 +51674,41,-0.037577,0 +51675,41,-0.016792,0 +51676,41,0.0052996,0 +51677,41,0.028698,0 +51678,41,0.052663,0 +51679,41,0.077207,0 +51680,41,0.10216,0 +51681,41,0.12753,0 +51682,41,0.15262,0 +51683,41,0.17794,0 +51684,41,0.20308,0 +51685,41,0.22856,0 +51686,41,0.25468,0 +51687,41,0.28021,0 +51688,41,0.30573,0 +51689,41,0.3302,0 +51690,41,0.35379,0 +51691,41,0.37743,0 +51692,41,0.40117,0 +51693,41,0.42599,0 +51694,41,0.45065,0 +51695,41,0.47506,0 +51696,41,0.49849,0 +51697,41,0.52111,0 +51698,41,0.54352,0 +51699,41,0.56603,0 +51700,41,0.5888,0 +51701,41,0.61205,0 +51702,41,0.63513,0 +51703,41,0.65794,0 +51704,41,0.68053,0 +51705,41,0.70286,0 +51706,41,0.72507,0 +51707,41,0.7473,0 +51708,41,0.7695,0 +51709,41,0.79165,0 +51710,41,0.81365,0 +51711,41,0.83554,0 +51712,41,0.85789,0 +51713,41,0.88005,0 +51714,41,0.90133,0 +51715,41,0.92204,0 +51716,41,0.94171,0 +51717,41,0.96033,0 +51718,41,0.9786,0 +51719,41,0.99716,0 +51720,41,1.0152,0 +51721,41,1.0326,0 +51722,41,1.0488,0 +51723,41,1.0644,0 +51724,41,1.0786,0 +51725,41,1.0922,0 +51726,41,1.1053,0 +51727,41,1.1176,0 +51728,41,1.1296,0 +51729,41,1.1409,0 +51730,41,1.1515,0 +51731,40,1.1611,0 +51732,40,1.1702,0 +51733,40,1.1789,0 +51734,40,1.1871,0 +51735,40,1.1946,0 +51736,40,1.2017,0 +51737,40,1.2084,0 +51738,40,1.2147,0 +51739,40,1.2213,0 +51740,40,1.2269,0 +51741,40,1.2318,0 +51742,40,1.2363,0 +51743,40,1.2401,0 +51744,40,1.2428,0 +51745,40,1.2449,0 +51746,40,1.2454,0 +51747,40,1.2447,0 +51748,40,1.2428,0 +51749,42,1.2401,0 +51750,42,1.2366,0 +51751,42,1.2317,0 +51752,42,1.2257,0 +51753,42,1.2184,0 +51754,42,1.21,0 +51755,42,1.2004,0 +51756,42,1.1892,0 +51757,42,1.1765,0 +51758,42,1.1621,0 +51759,42,1.1463,0 +51760,42,1.1289,0 +51761,42,1.1105,0 +51762,42,1.0906,0 +51763,42,1.0688,0 +51764,42,1.0456,0 +51765,42,1.0216,0 +51766,42,0.99616,0 +51767,42,0.96923,0 +51768,42,0.94041,0 +51769,42,0.91008,0 +51770,42,0.87911,0 +51771,42,0.84711,0 +51772,42,0.81448,0 +51773,42,0.7811,0 +51774,42,0.74644,0 +51775,42,0.71012,0 +51776,42,0.67272,0 +51777,42,0.63401,0 +51778,42,0.59484,0 +51779,42,0.55493,0 +51780,42,0.51488,0 +51781,42,0.47435,0 +51782,42,0.43277,0 +51783,42,0.39018,0 +51784,42,0.34752,0 +51785,42,0.30387,0 +51786,42,0.25913,0 +51787,42,0.21438,0 +51788,42,0.16931,0 +51789,42,0.1237,0 +51790,42,0.077959,0 +51791,42,0.031866,0 +51792,42,-0.014451,0 +51793,42,-0.061435,0 +51794,42,-0.10958,0 +51795,42,-0.15898,0 +51796,42,-0.20973,0 +51797,42,-0.26067,0 +51798,42,-0.31159,0 +51799,42,-0.3627,0 +51800,42,-0.41334,0 +51801,42,-0.4634,0 +51802,42,-0.51298,0 +51803,42,-0.56184,0 +51804,42,-0.61041,0 +51805,42,-0.65853,0 +51806,42,-0.7061,0 +51807,42,-0.75292,0 +51808,42,-0.79858,0 +51809,42,-0.84314,0 +51810,42,-0.88651,0 +51811,42,-0.9287,0 +51812,42,-0.9705,0 +51813,42,-1.0103,0 +51814,42,-1.0488,0 +51815,42,-1.0862,0 +51816,42,-1.1215,0 +51817,42,-1.155,0 +51818,42,-1.1874,0 +51819,42,-1.2182,0 +51820,42,-1.2476,0 +51821,42,-1.2751,0 +51822,42,-1.3017,0 +51823,42,-1.3269,0 +51824,42,-1.3509,0 +51825,42,-1.373,0 +51826,42,-1.393,0 +51827,42,-1.4113,0 +51828,42,-1.428,0 +51829,42,-1.4432,0 +51830,42,-1.4575,0 +51831,42,-1.4705,0 +51832,42,-1.4819,0 +51833,42,-1.4918,0 +51834,42,-1.5001,0 +51835,42,-1.5063,0 +51836,42,-1.5114,0 +51837,42,-1.5152,0 +51838,42,-1.5181,0 +51839,42,-1.5195,0 +51840,42,-1.5193,0 +51841,42,-1.5174,0 +51842,42,-1.5148,0 +51843,42,-1.5105,0 +51844,42,-1.5042,0 +51845,42,-1.4967,0 +51846,42,-1.488,0 +51847,42,-1.4777,0 +51848,42,-1.4667,0 +51849,42,-1.4547,0 +51850,42,-1.4418,0 +51851,42,-1.4276,0 +51852,42,-1.4114,0 +51853,42,-1.3937,0 +51854,42,-1.3744,0 +51855,42,-1.3547,0 +51856,42,-1.3343,0 +51857,42,-1.3131,0 +51858,42,-1.2919,0 +51859,42,-1.2706,0 +51860,42,-1.249,0 +51861,42,-1.2274,0 +51862,42,-1.2053,0 +51863,42,-1.1829,0 +51864,42,-1.1604,0 +51865,42,-1.1382,0 +51866,42,-1.1161,0 +51867,42,-1.0944,0 +51868,42,-1.0731,0 +51869,42,-1.0524,0 +51870,42,-1.0317,0 +51871,42,-1.0108,0 +51872,42,-0.99065,0 +51873,42,-0.97167,0 +51874,42,-0.95376,0 +51875,42,-0.93675,0 +51876,42,-0.92057,0 +51877,42,-0.90475,0 +51878,42,-0.88914,0 +51879,42,-0.87443,0 +51880,42,-0.85987,0 +51881,42,-0.84596,0 +51882,42,-0.83216,0 +51883,42,-0.8189,0 +51884,42,-0.80693,0 +51885,42,-0.79622,0 +51886,42,-0.78691,0 +51887,42,-0.77916,0 +51888,42,-0.77177,0 +51889,42,-0.76497,0 +51890,42,-0.75937,0 +51891,42,-0.75535,0 +51892,42,-0.7526,0 +51893,42,-0.75144,0 +51894,42,-0.75152,0 +51895,42,-0.75265,0 +51896,42,-0.75498,0 +51897,42,-0.75851,0 +51898,42,-0.76324,0 +51899,42,-0.76942,0 +51900,42,-0.777,0 +51901,42,-0.78542,0 +51902,42,-0.79566,0 +51903,42,-0.80805,0 +51904,42,-0.8221,0 +51905,42,-0.83749,0 +51906,42,-0.85412,0 +51907,42,-0.87272,0 +51908,42,-0.89261,0 +51909,42,-0.91466,0 +51910,42,-0.93854,0 +51911,42,-0.96401,0 +51912,42,-0.99104,0 +51913,42,-1.0199,0 +51914,42,-1.05,0 +51915,42,-1.0822,0 +51916,42,-1.1161,0 +51917,42,-1.1511,0 +51918,42,-1.1874,0 +51919,42,-1.2251,0 +51920,42,-1.2642,0 +51921,42,-1.3044,0 +51922,42,-1.346,0 +51923,42,-1.3884,0 +51924,42,-1.4322,0 +51925,42,-1.4776,0 +51926,42,-1.524,0 +51927,42,-1.571,0 +51928,42,-1.6197,0 +51929,42,-1.6693,0 +51930,40,-1.719,0 +51931,40,-1.7692,0 +51932,40,-1.8199,0 +51933,40,-1.871,0 +51934,40,-1.9232,0 +51935,40,-1.9773,0 +51936,40,-2.032,0 +51937,40,-2.0874,0 +51938,40,-2.1437,0 +51939,40,-2.2009,0 +51940,40,-2.2589,0 +51941,40,-2.3181,0 +51942,42,-2.3776,0 +51943,42,-2.4372,0 +51944,42,-2.4968,0 +51945,42,-2.5561,0 +51946,42,-2.6156,0 +51947,42,-2.6753,0 +51948,42,-2.7346,0 +51949,42,-2.7939,0 +51950,42,-2.8534,0 +51951,42,-2.9137,0 +51952,42,-2.9744,0 +51953,42,-3.0351,0 +51954,42,-3.0961,0 +51955,42,-3.1569,0 +51956,42,-3.218,0 +51957,42,-3.2793,0 +51958,42,-3.3405,0 +51959,42,-3.4012,0 +51960,42,-3.461,0 +51961,42,-3.5202,0 +51962,42,-3.5795,0 +51963,42,-3.6383,0 +51964,42,-3.6959,0 +51965,42,-3.7523,0 +51966,42,-3.807,0 +51967,42,-3.86,0 +51968,42,-3.9119,0 +51969,42,-3.9626,0 +51970,42,-4.0124,0 +51971,42,-4.0608,0 +51972,42,-4.1079,0 +51973,42,-4.1532,0 +51974,42,-4.1968,0 +51975,42,-4.2388,0 +51976,42,-4.2804,0 +51977,42,-4.3213,0 +51978,42,-4.3616,0 +51979,42,-4.4007,0 +51980,42,-4.4383,0 +51981,42,-4.4742,0 +51982,42,-4.5087,0 +51983,42,-4.5414,0 +51984,42,-4.5722,0 +51985,42,-4.6007,0 +51986,42,-4.6275,0 +51987,42,-4.6528,0 +51988,42,-4.6761,0 +51989,42,-4.6984,0 +51990,42,-4.7191,0 +51991,42,-4.738,0 +51992,42,-4.7547,0 +51993,42,-4.7694,0 +51994,42,-4.783,0 +51995,42,-4.7953,0 +51996,42,-4.8051,0 +51997,42,-4.8129,0 +51998,42,-4.8182,0 +51999,42,-4.8219,0 +52000,42,-4.8259,0 +52001,42,-4.8326,0 +52002,42,-4.8382,0 +52003,42,-4.8429,0 +52004,42,-4.8463,0 +52005,42,-4.8479,0 +52006,42,-4.8474,0 +52007,38,-4.8437,0 +52008,38,-4.8375,0 +52009,40,-4.829,0 +52010,40,-4.8181,0 +52011,40,-4.8055,0 +52012,40,-4.7907,0 +52013,40,-4.7731,0 +52014,40,-4.7525,0 +52015,40,-4.7294,0 +52016,40,-4.7053,0 +52017,40,-4.6799,0 +52018,40,-4.6526,0 +52019,40,-4.623,0 +52020,40,-4.5915,0 +52021,40,-4.5588,0 +52022,40,-4.5258,0 +52023,40,-4.4921,0 +52024,40,-4.4577,0 +52025,40,-4.4221,0 +52026,40,-4.3847,0 +52027,40,-4.3459,0 +52028,40,-4.3058,0 +52029,40,-4.2653,0 +52030,40,-4.2241,0 +52031,40,-4.181,0 +52032,40,-4.135,0 +52033,40,-4.0871,0 +52034,40,-4.0381,0 +52035,40,-3.9896,0 +52036,40,-3.9403,0 +52037,40,-3.8895,0 +52038,38,-3.8375,0 +52039,38,-3.7852,0 +52040,38,-3.7332,0 +52041,38,-3.6809,0 +52042,38,-3.6296,0 +52043,38,-3.5773,0 +52044,38,-3.5237,0 +52045,38,-3.4688,0 +52046,38,-3.4114,0 +52047,38,-3.3529,0 +52048,38,-3.2928,0 +52049,39,-3.2317,0 +52050,39,-3.17,0 +52051,39,-3.1076,0 +52052,39,-3.0439,0 +52053,39,-2.9791,0 +52054,39,-2.9117,0 +52055,39,-2.8291,0 +52056,39,-2.7443,0 +52057,39,-2.657,0 +52058,39,-2.5676,0 +52059,39,-2.4771,0 +52060,39,-2.3857,0 +52061,39,-2.2944,0 +52062,39,-2.2021,0 +52063,39,-2.1092,0 +52064,39,-2.0152,0 +52065,39,-1.92,0 +52066,39,-1.8249,0 +52067,39,-1.7308,0 +52068,39,-1.6382,0 +52069,39,-1.5459,0 +52070,39,-1.4534,0 +52071,39,-1.3616,0 +52072,39,-1.2725,0 +52073,39,-1.1859,0 +52074,39,-1.0989,0 +52075,39,-1.0134,0 +52076,39,-0.92838,0 +52077,39,-0.84501,0 +52078,39,-0.76349,0 +52079,39,-0.68364,0 +52080,39,-0.6053,0 +52081,39,-0.52844,0 +52082,39,-0.4539,0 +52083,39,-0.38286,0 +52084,39,-0.31353,0 +52085,39,-0.24548,0 +52086,39,-0.17945,0 +52087,39,-0.11615,0 +52088,39,-0.055933,0 +52089,39,0.0022232,0 +52090,32,0.058187,0 +52091,32,0.11306,0 +52092,47,0.16502,0 +52093,47,0.21251,0 +52094,47,0.2549,0 +52095,47,0.29193,0 +52096,47,0.32463,0 +52097,47,0.35544,0 +52098,47,0.38216,0 +52099,47,0.40496,0 +52100,47,0.42393,0 +52101,47,0.43763,0 +52102,47,0.43859,0 +52103,47,0.43583,0 +52104,47,0.42997,0 +52105,47,0.42054,0 +52106,47,0.40921,0 +52107,47,0.39575,0 +52108,47,0.38098,0 +52109,47,0.36475,0 +52110,47,0.34646,0 +52111,47,0.32508,0 +52112,47,0.3011,0 +52113,47,0.27613,0 +52114,47,0.25077,0 +52115,47,0.22498,0 +52116,47,0.19867,0 +52117,47,0.17275,0 +52118,47,0.14875,0 +52119,47,0.12415,0 +52120,47,0.099393,0 +52121,47,0.074631,0 +52122,47,0.050746,0 +52123,47,0.028497,0 +52124,47,0.0068884,0 +52125,47,-0.013573,0 +52126,47,-0.032757,0 +52127,47,-0.049953,0 +52128,47,-0.064481,0 +52129,47,-0.076916,0 +52130,47,-0.088249,0 +52131,47,-0.097775,0 +52132,47,-0.1054,0 +52133,47,-0.11106,0 +52134,47,-0.11513,0 +52135,47,-0.11824,0 +52136,47,-0.12028,0 +52137,47,-0.12097,0 +52138,47,-0.12073,0 +52139,47,-0.11873,0 +52140,47,-0.11502,0 +52141,47,-0.1089,0 +52142,47,-0.10056,0 +52143,47,-0.090595,0 +52144,47,-0.078843,0 +52145,47,-0.065762,0 +52146,47,-0.051576,0 +52147,47,-0.035355,0 +52148,47,-0.016832,0 +52149,47,0.0035834,0 +52150,47,0.026492,0 +52151,47,0.051668,0 +52152,47,0.078052,0 +52153,47,0.10538,0 +52154,47,0.13377,0 +52155,47,0.16347,0 +52156,47,0.19443,0 +52157,47,0.22734,0 +52158,47,0.26178,0 +52159,47,0.29752,0 +52160,47,0.33445,0 +52161,47,0.37219,0 +52162,47,0.41133,0 +52163,47,0.45235,0 +52164,47,0.49535,0 +52165,47,0.53993,0 +52166,47,0.58548,0 +52167,47,0.63237,0 +52168,47,0.68061,0 +52169,47,0.72985,0 +52170,47,0.77993,0 +52171,47,0.83061,0 +52172,47,0.88298,0 +52173,47,0.9373,0 +52174,47,0.99352,0 +52175,47,1.0511,0 +52176,47,1.1086,0 +52177,47,1.1662,0 +52178,47,1.2243,0 +52179,47,1.2836,0 +52180,47,1.3443,0 +52181,47,1.4057,0 +52182,47,1.4674,0 +52183,47,1.5289,0 +52184,47,1.5899,0 +52185,47,1.6516,0 +52186,47,1.7139,0 +52187,47,1.776,0 +52188,47,1.838,0 +52189,47,1.8997,0 +52190,47,1.9612,0 +52191,47,2.0235,0 +52192,47,2.0864,0 +52193,47,2.1497,0 +52194,47,2.2131,0 +52195,47,2.2763,0 +52196,47,2.3398,0 +52197,47,2.4035,0 +52198,47,2.4676,0 +52199,47,2.5314,0 +52200,47,2.595,0 +52201,47,2.6582,0 +52202,47,2.7208,0 +52203,47,2.7839,0 +52204,47,2.8476,0 +52205,47,2.9117,0 +52206,47,2.9751,0 +52207,47,3.0387,0 +52208,47,3.1018,0 +52209,47,3.1648,0 +52210,47,3.2279,0 +52211,47,3.2916,0 +52212,47,3.3559,0 +52213,47,3.4206,0 +52214,47,3.4857,0 +52215,47,3.5508,0 +52216,47,3.6159,0 +52217,47,3.681,0 +52218,47,3.7462,0 +52219,47,3.8117,0 +52220,47,3.8772,0 +52221,47,3.9427,0 +52222,47,4.0085,0 +52223,47,4.0744,0 +52224,47,4.1402,0 +52225,47,4.2055,0 +52226,47,4.2704,0 +52227,47,4.3347,0 +52228,47,4.3987,0 +52229,47,4.4625,0 +52230,47,4.5264,0 +52231,47,4.5899,0 +52232,47,4.6524,0 +52233,47,4.7136,0 +52234,47,4.7738,0 +52235,47,4.8331,0 +52236,47,4.8915,0 +52237,47,4.9493,0 +52238,47,5.007,0 +52239,47,5.0641,0 +52240,47,5.1207,0 +52241,47,5.1772,0 +52242,47,5.2327,0 +52243,47,5.2872,0 +52244,47,5.3413,0 +52245,47,5.3948,0 +52246,47,5.448,0 +52247,47,5.5013,0 +52248,47,5.554,0 +52249,47,5.6053,0 +52250,47,5.6559,0 +52251,47,5.7069,0 +52252,47,5.7579,0 +52253,47,5.8083,0 +52254,47,5.8588,0 +52255,47,5.9086,0 +52256,47,5.9574,0 +52257,47,6.0061,0 +52258,47,6.054,0 +52259,47,6.1015,0 +52260,47,6.1481,0 +52261,47,6.1933,0 +52262,47,6.2384,0 +52263,47,6.2827,0 +52264,47,6.326,0 +52265,47,6.3694,0 +52266,47,6.4119,0 +52267,47,6.4537,0 +52268,47,6.4946,0 +52269,47,6.535,0 +52270,47,6.5751,0 +52271,47,6.6148,0 +52272,47,6.654,0 +52273,47,6.6935,0 +52274,47,6.7318,0 +52275,47,6.7696,0 +52276,47,6.807,0 +52277,47,6.8436,0 +52278,47,6.8802,0 +52279,47,6.9165,0 +52280,47,6.9525,0 +52281,47,6.9872,0 +52282,47,7.0207,0 +52283,47,7.0527,0 +52284,47,7.0837,0 +52285,47,7.1144,0 +52286,47,7.1439,0 +52287,47,7.1727,0 +52288,47,7.2005,0 +52289,47,7.2275,0 +52290,47,7.254,0 +52291,47,7.2794,0 +52292,47,7.3042,0 +52293,47,7.328,0 +52294,47,7.3503,0 +52295,47,7.3717,0 +52296,47,7.3936,0 +52297,47,7.4152,0 +52298,47,7.4359,0 +52299,47,7.4559,0 +52300,47,7.4749,0 +52301,47,7.4926,0 +52302,47,7.51,0 +52303,47,7.5275,0 +52304,47,7.5443,0 +52305,47,7.5598,0 +52306,47,7.5746,0 +52307,47,7.5885,0 +52308,47,7.6015,0 +52309,47,7.614,0 +52310,47,7.6259,0 +52311,47,7.6372,0 +52312,47,7.6479,0 +52313,47,7.6588,0 +52314,47,7.6685,0 +52315,47,7.6769,0 +52316,47,7.6847,0 +52317,47,7.692,0 +52318,47,7.6987,0 +52319,47,7.7052,0 +52320,47,7.7109,0 +52321,47,7.7164,0 +52322,47,7.7212,0 +52323,47,7.7264,0 +52324,47,7.7306,0 +52325,47,7.7343,0 +52326,47,7.7388,0 +52327,47,7.7424,0 +52328,47,7.7461,0 +52329,47,7.7498,0 +52330,47,7.7535,0 +52331,47,7.7562,0 +52332,47,7.7586,0 +52333,47,7.7609,0 +52334,47,7.7622,0 +52335,47,7.7632,0 +52336,47,7.7643,0 +52338,47,7.7636,0 +52339,47,7.7621,0 +52340,47,7.76,0 +52341,47,7.7576,0 +52342,47,7.7552,0 +52343,47,7.7528,0 +52344,47,7.7501,0 +52345,47,7.7471,0 +52346,47,7.7442,0 +52347,47,7.741,0 +52348,47,7.7375,0 +52349,47,7.7337,0 +52350,47,7.7297,0 +52351,47,7.7254,0 +52352,47,7.7208,0 +52353,47,7.7166,0 +52354,47,7.7127,0 +52355,47,7.7083,0 +52356,47,7.7039,0 +52357,47,7.6998,0 +52358,47,7.6955,0 +52359,47,7.6914,0 +52360,47,7.6876,0 +52361,47,7.6854,0 +52362,47,7.6835,0 +52363,47,7.6828,0 +52364,47,7.6833,0 +52365,47,7.6852,0 +52366,47,7.6876,0 +52367,47,7.6901,0 +52368,47,7.6923,0 +52369,47,7.6964,0 +52370,47,7.7014,0 +52371,47,7.7075,0 +52372,47,7.7136,0 +52373,47,7.7172,0 +52374,47,7.7238,0 +52375,47,7.73,0 +52376,47,7.7365,0 +52377,47,7.7439,0 +52378,47,7.7508,0 +52379,47,7.7582,0 +52380,47,7.7668,0 +52381,47,7.7752,0 +52382,47,7.7826,0 +52383,47,7.791,0 +52384,47,7.7993,0 +52385,47,7.8071,0 +52386,47,7.814,0 +52387,47,7.8216,0 +52388,47,7.8288,0 +52389,47,7.8361,0 +52390,47,7.8433,0 +52391,47,7.85,0 +52392,47,7.8565,0 +52393,47,7.8638,0 +52394,47,7.8713,0 +52395,47,7.8784,0 +52396,47,7.8861,0 +52397,47,7.8939,0 +52398,47,7.9019,0 +52399,47,7.9094,0 +52400,47,7.9168,0 +52401,47,7.924,0 +52402,47,7.9313,0 +52403,47,7.9395,0 +52404,47,7.9479,0 +52405,47,7.9557,0 +52406,47,7.9634,0 +52407,47,7.9701,0 +52408,47,7.9751,0 +52409,47,7.9801,0 +52410,47,7.986,0 +52411,47,7.9911,0 +52412,47,7.9944,0 +52413,47,7.9963,0 +52414,47,7.9965,0 +52415,47,7.9956,0 +52416,47,7.9939,0 +52417,47,7.993,0 +52418,47,7.99,0 +52419,47,7.9852,0 +52420,47,7.9788,0 +52421,47,7.9713,0 +52422,47,7.9669,0 +52423,47,7.9633,0 +52424,47,7.9572,0 +52425,47,7.952,0 +52426,47,7.9456,0 +52427,47,7.9403,0 +52428,47,7.9354,0 +52429,47,7.9302,0 +52430,47,7.9258,0 +52431,47,7.9207,0 +52432,47,7.9154,0 +52433,47,7.9105,0 +52434,47,7.9073,0 +52435,47,7.9036,0 +52436,47,7.899,0 +52437,47,7.8943,0 +52438,47,7.8895,0 +52439,47,7.8855,0 +52440,47,7.8819,0 +52441,47,7.8781,0 +52442,47,7.8738,0 +52443,47,7.8691,0 +52444,47,7.8632,0 +52445,47,7.8579,0 +52446,47,7.8535,0 +52447,47,7.8497,0 +52448,47,7.8473,0 +52449,47,7.8447,0 +52450,47,7.8409,0 +52451,47,7.8375,0 +52452,47,7.8355,0 +52453,47,7.8333,0 +52454,47,7.8322,0 +52455,47,7.8321,0 +52456,47,7.8335,0 +52457,47,7.834,0 +52458,47,7.8357,0 +52459,47,7.8387,0 +52460,47,7.8413,0 +52461,47,7.8447,0 +52462,47,7.8483,0 +52463,47,7.8512,0 +52464,47,7.8532,0 +52465,47,7.8562,0 +52466,47,7.8617,0 +52467,47,7.8678,0 +52468,47,7.8737,0 +52469,47,7.8781,0 +52470,47,7.8815,0 +52471,47,7.8864,0 +52472,47,7.8903,0 +52473,47,7.8934,0 +52474,47,7.8954,0 +52475,47,7.8971,0 +52476,47,7.8975,0 +52477,47,7.8978,0 +52478,47,7.898,0 +52479,47,7.8963,0 +52480,47,7.8942,0 +52481,47,7.8925,0 +52482,47,7.889,0 +52483,47,7.8857,0 +52484,47,7.883,0 +52485,47,7.8803,0 +52486,47,7.8768,0 +52487,47,7.8735,0 +52488,47,7.8702,0 +52489,47,7.8669,0 +52490,47,7.8635,0 +52491,47,7.8607,0 +52492,47,7.858,0 +52493,47,7.8553,0 +52494,47,7.8517,0 +52495,47,7.8476,0 +52496,47,7.8435,0 +52497,47,7.8409,0 +52498,47,7.8377,0 +52499,47,7.8337,0 +52500,47,7.8299,0 +52501,47,7.8251,0 +52502,47,7.8208,0 +52503,47,7.8157,0 +52504,47,7.8089,0 +52505,47,7.8016,0 +52506,47,7.7944,0 +52507,47,7.7863,0 +52508,47,7.7773,0 +52509,47,7.7688,0 +52510,47,7.7607,0 +52511,47,7.7516,0 +52512,47,7.7432,0 +52513,47,7.7337,0 +52514,47,7.7225,0 +52515,47,7.7108,0 +52516,47,7.7001,0 +52517,47,7.6888,0 +52518,47,7.6768,0 +52519,47,7.6641,0 +52520,47,7.6527,0 +52521,47,7.6412,0 +52522,47,7.629,0 +52523,47,7.6166,0 +52524,47,7.6032,0 +52525,47,7.5889,0 +52526,47,7.5758,0 +52527,47,7.5634,0 +52528,47,7.5502,0 +52529,47,7.5378,0 +52530,47,7.5265,0 +52531,47,7.5158,0 +52532,47,7.5057,0 +52533,47,7.4963,0 +52534,47,7.4868,0 +52535,47,7.4778,0 +52536,47,7.4678,0 +52537,47,7.4584,0 +52538,47,7.449,0 +52539,47,7.4396,0 +52540,47,7.4297,0 +52541,47,7.4197,0 +52542,47,7.4092,0 +52543,47,7.3989,0 +52544,47,7.3874,0 +52545,47,7.3766,0 +52546,47,7.3664,0 +52547,47,7.3563,0 +52548,47,7.3478,0 +52549,47,7.3399,0 +52550,47,7.3335,0 +52551,47,7.3299,0 +52552,47,7.3275,0 +52553,47,7.3256,0 +52554,47,7.3257,0 +52555,47,7.3274,0 +52556,47,7.3294,0 +52557,47,7.3313,0 +52558,47,7.3351,0 +52559,47,7.3397,0 +52560,47,7.3452,0 +52561,47,7.3517,0 +52562,47,7.3594,0 +52563,47,7.367,0 +52564,47,7.3758,0 +52565,47,7.3849,0 +52566,47,7.394,0 +52567,47,7.4024,0 +52568,47,7.4121,0 +52569,47,7.423,0 +52570,47,7.4347,0 +52571,47,7.448,0 +52572,47,7.4624,0 +52573,47,7.4775,0 +52574,47,7.4934,0 +52575,47,7.5097,0 +52576,47,7.5249,0 +52577,47,7.5393,0 +52578,47,7.5528,0 +52579,47,7.5659,0 +52580,47,7.5775,0 +52581,47,7.5892,0 +52582,47,7.6008,0 +52583,47,7.6124,0 +52584,47,7.6238,0 +52585,47,7.6371,0 +52586,47,7.6504,0 +52587,47,7.6634,0 +52588,47,7.6779,0 +52589,47,7.6929,0 +52590,47,7.7071,0 +52591,47,7.722,0 +52592,47,7.7365,0 +52593,47,7.75,0 +52594,47,7.7625,0 +52595,47,7.7733,0 +52596,47,7.7818,0 +52597,47,7.7881,0 +52598,47,7.7914,0 +52599,47,7.7917,0 +52600,47,7.7887,0 +52601,47,7.782,0 +52602,47,7.772,0 +52603,47,7.7604,0 +52604,47,7.7455,0 +52605,47,7.7275,0 +52606,47,7.7065,0 +52607,47,7.6835,0 +52608,47,7.6571,0 +52609,47,7.6283,0 +52610,47,7.5988,0 +52611,47,7.5687,0 +52612,47,7.5374,0 +52613,47,7.5065,0 +52614,47,7.4746,0 +52615,47,7.4409,0 +52616,47,7.4068,0 +52617,47,7.3719,0 +52618,47,7.3353,0 +52619,47,7.2995,0 +52620,47,7.2645,0 +52621,47,7.2294,0 +52622,47,7.1951,0 +52623,47,7.1613,0 +52624,47,7.1269,0 +52625,47,7.0929,0 +52626,47,7.0671,0 +52627,47,7.0466,0 +52628,47,7.0264,0 +52629,47,7.0067,0 +52630,47,6.9875,0 +52631,47,6.966,0 +52632,47,6.946,0 +52633,47,6.9254,0 +52634,47,6.9028,0 +52635,47,6.8808,0 +52636,47,6.8588,0 +52637,47,6.8365,0 +52638,47,6.8152,0 +52639,47,6.7942,0 +52640,47,6.7746,0 +52641,47,6.7562,0 +52642,47,6.7392,0 +52643,47,6.7246,0 +52644,47,6.7128,0 +52645,47,6.705,0 +52646,47,6.7008,0 +52647,47,6.7,0 +52648,47,6.7044,0 +52649,47,6.7112,0 +52650,47,6.7232,0 +52651,47,6.7397,0 +52652,47,6.7594,0 +52653,47,6.7841,0 +52654,47,6.8124,0 +52655,47,6.8439,0 +52656,47,6.8755,0 +52657,47,6.9096,0 +52658,47,6.9463,0 +52659,47,6.9822,0 +52660,47,7.0197,0 +52661,47,7.0581,0 +52662,47,7.0971,0 +52663,47,7.137,0 +52664,47,7.1762,0 +52665,47,7.212,0 +52666,47,7.2458,0 +52667,47,7.2801,0 +52668,47,7.3131,0 +52669,47,7.3481,0 +52670,47,7.3832,0 +52671,47,7.4076,0 +52672,47,7.4175,0 +52673,47,7.4261,0 +52674,47,7.4346,0 +52675,47,7.4423,0 +52676,47,7.4508,0 +52677,47,7.4597,0 +52678,47,7.4685,0 +52679,47,7.4793,0 +52680,47,7.4891,0 +52681,47,7.4996,0 +52682,47,7.51,0 +52683,47,7.52,0 +52684,47,7.5305,0 +52685,47,7.5397,0 +52686,47,7.5495,0 +52687,47,7.5574,0 +52688,47,7.5646,0 +52689,47,7.5712,0 +52690,47,7.5748,0 +52691,47,7.5781,0 +52692,47,7.5788,0 +52693,47,7.5774,0 +52694,47,7.5737,0 +52695,47,7.5672,0 +52696,47,7.5583,0 +52697,47,7.5466,0 +52698,47,7.5317,0 +52699,47,7.5155,0 +52700,47,7.4982,0 +52701,47,7.4803,0 +52702,47,7.4597,0 +52703,47,7.4384,0 +52704,47,7.4173,0 +52705,47,7.3972,0 +52706,47,7.377,0 +52707,47,7.3562,0 +52708,47,7.336,0 +52709,47,7.3162,0 +52710,47,7.2996,0 +52711,47,7.2824,0 +52712,47,7.2646,0 +52713,47,7.2462,0 +52714,47,7.2267,0 +52715,47,7.2072,0 +52716,47,7.1987,0 +52717,47,7.1896,0 +52718,47,7.1794,0 +52719,47,7.1682,0 +52720,47,7.1562,0 +52721,47,7.1422,0 +52722,47,7.1261,0 +52723,47,7.1088,0 +52724,47,7.0897,0 +52725,47,7.0699,0 +52726,47,7.0488,0 +52727,47,7.0263,0 +52728,47,7.0022,0 +52729,47,6.9778,0 +52730,47,6.952,0 +52731,47,6.9252,0 +52732,47,6.8988,0 +52733,47,6.8706,0 +52734,47,6.8413,0 +52735,47,6.8116,0 +52736,47,6.7813,0 +52737,47,6.7488,0 +52738,47,6.7166,0 +52739,47,6.6839,0 +52740,47,6.6499,0 +52741,47,6.616,0 +52742,47,6.5824,0 +52743,47,6.5479,0 +52744,47,6.5124,0 +52745,47,6.4768,0 +52746,47,6.4395,0 +52747,47,6.4037,0 +52748,47,6.3677,0 +52749,47,6.3303,0 +52750,47,6.2913,0 +52751,47,6.252,0 +52752,47,6.2119,0 +52753,47,6.1709,0 +52754,47,6.1296,0 +52755,47,6.0873,0 +52756,47,6.0447,0 +52757,47,6.0028,0 +52758,47,5.9606,0 +52759,47,5.9188,0 +52760,47,5.8778,0 +52761,47,5.8363,0 +52762,47,5.7957,0 +52763,47,5.7556,0 +52764,47,5.7167,0 +52765,47,5.6783,0 +52766,47,5.6411,0 +52767,47,5.6045,0 +52768,47,5.5693,0 +52769,47,5.535,0 +52770,47,5.5018,0 +52771,47,5.469,0 +52772,47,5.4371,0 +52773,47,5.4059,0 +52774,47,5.3761,0 +52775,47,5.3468,0 +52776,47,5.3182,0 +52777,47,5.2908,0 +52778,47,5.2636,0 +52779,47,5.2369,0 +52780,47,5.2121,0 +52781,47,5.1874,0 +52782,47,5.1625,0 +52783,47,5.1392,0 +52784,47,5.1176,0 +52785,47,5.0957,0 +52786,47,5.0757,0 +52787,47,5.0564,0 +52788,47,5.0372,0 +52789,47,5.0186,0 +52790,47,5.0011,0 +52791,47,4.9839,0 +52792,47,4.9667,0 +52793,47,4.951,0 +52794,47,4.9344,0 +52795,47,4.9169,0 +52796,47,4.8994,0 +52797,47,4.8819,0 +52798,47,4.8641,0 +52799,47,4.8456,0 +52800,47,4.8273,0 +52801,47,4.8088,0 +52802,47,4.7901,0 +52803,47,4.7711,0 +52804,47,4.7518,0 +52805,47,4.732,0 +52806,47,4.7124,0 +52807,47,4.6922,0 +52808,47,4.6711,0 +52809,47,4.65,0 +52810,47,4.6291,0 +52811,47,4.6078,0 +52812,47,4.5859,0 +52813,47,4.5638,0 +52814,47,4.5409,0 +52815,47,4.5169,0 +52816,47,4.4931,0 +52817,47,4.4686,0 +52818,47,4.4441,0 +52819,47,4.4199,0 +52820,47,4.3959,0 +52821,47,4.372,0 +52822,47,4.3476,0 +52823,47,4.3234,0 +52824,47,4.2996,0 +52825,47,4.2756,0 +52826,47,4.2516,0 +52827,47,4.2277,0 +52828,47,4.2039,0 +52829,47,4.1801,0 +52830,47,4.1557,0 +52831,47,4.1311,0 +52832,47,4.1068,0 +52833,47,4.0825,0 +52834,47,4.0581,0 +52835,47,4.033,0 +52836,47,4.0079,0 +52837,47,3.9822,0 +52838,47,3.9569,0 +52839,47,3.9323,0 +52840,47,3.9085,0 +52841,47,3.8862,0 +52842,47,3.8655,0 +52843,47,3.8463,0 +52844,47,3.8277,0 +52845,47,3.811,0 +52846,47,3.7973,0 +52847,47,3.7858,0 +52848,47,3.7766,0 +52849,47,3.7693,0 +52850,47,3.763,0 +52851,47,3.7582,0 +52852,47,3.7553,0 +52853,47,3.754,0 +52854,47,3.7542,0 +52855,47,3.7563,0 +52856,47,3.7595,0 +52857,47,3.7639,0 +52858,47,3.7696,0 +52859,47,3.7766,0 +52860,47,3.7848,0 +52861,47,3.7941,0 +52862,47,3.8048,0 +52863,41,3.8163,0 +52864,41,3.8289,0 +52865,41,3.8427,0 +52866,41,3.8578,0 +52867,41,3.8739,0 +52868,41,3.8916,0 +52869,41,3.9108,0 +52870,41,3.9313,0 +52871,41,3.9533,0 +52872,41,3.9758,0 +52873,41,3.9978,0 +52874,41,4.0198,0 +52875,41,4.0423,0 +52876,41,4.0654,0 +52877,41,4.0893,0 +52878,41,4.1133,0 +52879,41,4.1363,0 +52880,41,4.1593,0 +52881,41,4.1823,0 +52882,41,4.2045,0 +52883,41,4.2269,0 +52884,41,4.2496,0 +52885,41,4.2731,0 +52886,39,4.2972,0 +52887,39,4.3217,0 +52888,53,4.347,0 +52889,53,4.3722,0 +52890,53,4.3988,0 +52891,53,4.4263,0 +52892,53,4.4546,0 +52893,53,4.4833,0 +52894,53,4.5118,0 +52895,53,4.54,0 +52896,53,4.566,0 +52897,53,4.5899,0 +52898,53,4.6118,0 +52899,53,4.6338,0 +52900,53,4.653,0 +52901,53,4.6692,0 +52902,53,4.6832,0 +52903,53,4.695,0 +52904,53,4.7049,0 +52905,53,4.7142,0 +52906,53,4.7229,0 +52907,53,4.7303,0 +52908,53,4.7366,0 +52909,53,4.7416,0 +52910,53,4.7444,0 +52911,53,4.7468,0 +52912,53,4.7481,0 +52914,53,4.7473,0 +52915,53,4.7452,0 +52916,53,4.7425,0 +52917,53,4.7385,0 +52918,53,4.7341,0 +52919,53,4.7289,0 +52920,53,4.7227,0 +52921,53,4.7156,0 +52922,53,4.7084,0 +52923,53,4.7004,0 +52924,53,4.6915,0 +52925,53,4.6815,0 +52926,53,4.6712,0 +52927,53,4.6599,0 +52928,53,4.6486,0 +52929,53,4.638,0 +52930,53,4.6268,0 +52931,53,4.6149,0 +52932,53,4.6032,0 +52933,53,4.591,0 +52934,53,4.5788,0 +52935,53,4.5669,0 +52936,53,4.5551,0 +52937,53,4.5431,0 +52938,53,4.5321,0 +52939,53,4.5205,0 +52940,53,4.509,0 +52941,53,4.4973,0 +52942,53,4.4851,0 +52943,53,4.4725,0 +52944,53,4.4593,0 +52945,53,4.4462,0 +52946,53,4.4321,0 +52947,53,4.4171,0 +52948,53,4.4014,0 +52949,53,4.3846,0 +52950,53,4.3676,0 +52951,53,4.3496,0 +52952,53,4.3311,0 +52953,53,4.3129,0 +52954,53,4.2949,0 +52955,53,4.277,0 +52956,53,4.2584,0 +52957,53,4.2401,0 +52958,53,4.2225,0 +52959,53,4.2051,0 +52960,53,4.1876,0 +52961,53,4.1702,0 +52962,53,4.1527,0 +52963,53,4.1348,0 +52964,53,4.1168,0 +52965,53,4.0984,0 +52966,53,4.0796,0 +52967,53,4.0609,0 +52968,53,4.0428,0 +52969,53,4.0248,0 +52970,53,4.0064,0 +52971,53,3.9883,0 +52972,53,3.9705,0 +52973,53,3.9526,0 +52974,53,3.9351,0 +52975,53,3.9175,0 +52976,53,3.9002,0 +52977,53,3.8827,0 +52978,53,3.8655,0 +52979,53,3.8482,0 +52980,53,3.8317,0 +52981,53,3.8149,0 +52982,53,3.7982,0 +52983,53,3.7815,0 +52984,53,3.765,0 +52985,53,3.7489,0 +52986,53,3.7328,0 +52987,53,3.717,0 +52988,53,3.7013,0 +52989,53,3.685,0 +52990,53,3.6689,0 +52991,53,3.6531,0 +52992,53,3.6372,0 +52993,53,3.6213,0 +52994,53,3.6058,0 +52995,53,3.5907,0 +52996,53,3.5758,0 +52997,53,3.561,0 +52998,53,3.5468,0 +52999,53,3.5325,0 +53000,53,3.5186,0 +53001,53,3.5048,0 +53002,53,3.4914,0 +53003,53,3.4781,0 +53004,53,3.4654,0 +53005,53,3.4535,0 +53006,53,3.4418,0 +53007,53,3.4304,0 +53008,53,3.4197,0 +53009,53,3.4089,0 +53010,53,3.3992,0 +53011,53,3.3899,0 +53012,53,3.3808,0 +53013,53,3.3728,0 +53014,53,3.3656,0 +53015,53,3.3589,0 +53016,53,3.3531,0 +53017,53,3.348,0 +53018,53,3.3431,0 +53019,53,3.3389,0 +53020,53,3.3351,0 +53021,53,3.3317,0 +53022,53,3.3288,0 +53023,53,3.3265,0 +53024,53,3.3246,0 +53025,53,3.3231,0 +53026,53,3.3222,0 +53027,53,3.3212,0 +53029,53,3.3218,0 +53030,53,3.323,0 +53031,53,3.3247,0 +53032,53,3.3265,0 +53033,53,3.3289,0 +53034,53,3.3248,0 +53035,53,3.311,0 +53036,53,3.2972,0 +53037,53,3.2836,0 +53038,53,3.2701,0 +53039,53,3.2567,0 +53040,53,3.2436,0 +53041,53,3.2311,0 +53042,53,3.2184,0 +53043,53,3.2059,0 +53044,53,3.193,0 +53045,53,3.1802,0 +53046,53,3.1676,0 +53047,53,3.1552,0 +53048,53,3.1432,0 +53049,53,3.1316,0 +53050,53,3.1199,0 +53051,53,3.1084,0 +53052,53,3.0972,0 +53053,53,3.0864,0 +53054,53,3.0761,0 +53055,53,3.0659,0 +53056,53,3.0562,0 +53057,53,3.0464,0 +53058,53,3.0369,0 +53059,53,3.0275,0 +53060,53,3.0178,0 +53061,53,3.0081,0 +53062,53,2.9988,0 +53063,53,2.9893,0 +53064,53,2.9798,0 +53065,53,2.9706,0 +53066,53,2.961,0 +53067,53,2.9511,0 +53068,53,2.9407,0 +53069,53,2.9303,0 +53070,53,2.9195,0 +53071,53,2.908,0 +53072,53,2.8965,0 +53073,53,2.885,0 +53074,53,2.873,0 +53075,53,2.8611,0 +53076,53,2.8489,0 +53077,53,2.8365,0 +53078,53,2.8241,0 +53079,53,2.8112,0 +53080,53,2.7982,0 +53081,53,2.7849,0 +53082,53,2.7711,0 +53083,53,2.7568,0 +53084,53,2.7428,0 +53085,53,2.7286,0 +53086,53,2.7142,0 +53087,53,2.7,0 +53088,53,2.6857,0 +53089,53,2.6715,0 +53090,53,2.6571,0 +53091,53,2.6429,0 +53092,53,2.6288,0 +53093,53,2.6147,0 +53094,53,2.6006,0 +53095,53,2.5864,0 +53096,53,2.5718,0 +53097,53,2.557,0 +53098,53,2.5422,0 +53099,53,2.5269,0 +53100,53,2.5117,0 +53101,53,2.4964,0 +53102,53,2.4979,0 +53103,53,2.5135,0 +53104,53,2.5298,0 +53105,53,2.5463,0 +53106,53,2.5629,0 +53107,53,2.5798,0 +53108,53,2.5966,0 +53109,53,2.613,0 +53110,53,2.6294,0 +53111,53,2.6459,0 +53112,53,2.6627,0 +53113,53,2.6799,0 +53114,53,2.6969,0 +53115,53,2.7139,0 +53116,53,2.7308,0 +53117,53,2.7476,0 +53118,53,2.7639,0 +53119,53,2.7805,0 +53120,53,2.797,0 +53121,53,2.8133,0 +53122,53,2.8295,0 +53123,53,2.8456,0 +53124,53,2.8616,0 +53125,53,2.8778,0 +53126,53,2.8939,0 +53127,53,2.9099,0 +53128,53,2.9257,0 +53129,53,2.9417,0 +53130,53,2.9577,0 +53131,53,2.9736,0 +53132,53,2.9895,0 +53133,53,3.0056,0 +53134,53,3.0217,0 +53135,53,3.0381,0 +53136,53,3.0549,0 +53137,53,3.0721,0 +53138,53,3.0899,0 +53139,53,3.108,0 +53140,53,3.1264,0 +53141,53,3.1452,0 +53142,53,3.1643,0 +53143,53,3.1836,0 +53144,53,3.2033,0 +53145,53,3.2232,0 +53146,53,3.2434,0 +53147,53,3.2639,0 +53148,53,3.2844,0 +53149,53,3.3053,0 +53150,53,3.3262,0 +53151,53,3.347,0 +53152,53,3.3683,0 +53153,53,3.3899,0 +53154,53,3.4115,0 +53155,53,3.433,0 +53156,53,3.455,0 +53157,53,3.4771,0 +53158,53,3.499,0 +53159,53,3.5213,0 +53160,53,3.5435,0 +53161,53,3.566,0 +53162,53,3.5888,0 +53163,53,3.6114,0 +53164,53,3.634,0 +53165,53,3.6572,0 +53166,53,3.6802,0 +53167,53,3.7033,0 +53168,53,3.7267,0 +53169,53,3.7501,0 +53170,53,3.7737,0 +53171,53,3.7975,0 +53172,53,3.8218,0 +53173,53,3.8459,0 +53174,53,3.8562,0 +53175,53,3.8663,0 +53176,53,3.876,0 +53177,53,3.8859,0 +53178,53,3.896,0 +53179,53,3.9063,0 +53180,53,3.9165,0 +53181,53,3.9273,0 +53182,53,3.9383,0 +53183,53,3.9492,0 +53184,53,3.9605,0 +53185,53,3.9718,0 +53186,53,3.9831,0 +53187,53,3.9949,0 +53188,53,4.0065,0 +53189,53,4.0183,0 +53190,53,4.0305,0 +53191,53,4.0429,0 +53192,53,4.0552,0 +53193,53,4.0681,0 +53194,53,4.0809,0 +53195,53,4.0938,0 +53196,53,4.1071,0 +53197,53,4.1205,0 +53198,53,4.1338,0 +53199,53,4.1473,0 +53200,53,4.1613,0 +53201,53,4.1757,0 +53202,53,4.1902,0 +53203,53,4.2053,0 +53204,53,4.2204,0 +53205,53,4.2353,0 +53206,53,4.2505,0 +53207,53,4.2657,0 +53208,53,4.2822,0 +53209,53,4.2998,0 +53210,53,4.3175,0 +53211,53,4.3347,0 +53212,53,4.3523,0 +53213,53,4.37,0 +53214,53,4.3873,0 +53215,53,4.4047,0 +53216,53,4.4221,0 +53217,53,4.4395,0 +53218,53,4.457,0 +53219,53,4.4744,0 +53220,53,4.4913,0 +53221,53,4.5087,0 +53222,53,4.5258,0 +53223,53,4.5431,0 +53224,53,4.5606,0 +53225,53,4.578,0 +53226,53,4.5949,0 +53227,53,4.6121,0 +53228,53,4.6296,0 +53229,53,4.6469,0 +53230,53,4.6642,0 +53231,53,4.682,0 +53232,53,4.6999,0 +53233,53,4.7174,0 +53234,53,4.7351,0 +53235,53,4.7526,0 +53236,53,4.7699,0 +53237,53,4.7873,0 +53238,53,4.8045,0 +53239,53,4.8215,0 +53240,53,4.8391,0 +53241,53,4.8569,0 +53242,53,4.8745,0 +53243,53,4.8924,0 +53244,53,4.9103,0 +53245,53,4.9278,0 +53246,53,4.9456,0 +53247,53,4.9634,0 +53248,53,4.981,0 +53249,53,4.9986,0 +53250,53,5.0165,0 +53251,53,5.0341,0 +53252,53,5.0517,0 +53253,53,5.0694,0 +53254,53,5.0869,0 +53255,53,5.1044,0 +53256,53,5.1219,0 +53257,53,5.1393,0 +53258,53,5.1561,0 +53259,53,5.1732,0 +53260,53,5.1902,0 +53261,53,5.2067,0 +53262,53,5.2237,0 +53263,53,5.2407,0 +53264,53,5.2575,0 +53265,53,5.2742,0 +53266,53,5.291,0 +53267,53,5.3072,0 +53268,53,5.3237,0 +53269,53,5.3404,0 +53270,53,5.3567,0 +53271,53,5.3732,0 +53272,53,5.39,0 +53273,53,5.4067,0 +53274,53,5.4229,0 +53275,53,5.4389,0 +53276,53,5.4542,0 +53277,53,5.4692,0 +53278,53,5.4844,0 +53279,53,5.4993,0 +53280,53,5.5138,0 +53281,53,5.5284,0 +53282,53,5.5392,0 +53283,53,5.5486,0 +53284,53,5.5576,0 +53285,53,5.5663,0 +53286,53,5.5746,0 +53287,53,5.5828,0 +53288,53,5.5911,0 +53289,53,5.5988,0 +53290,53,5.6066,0 +53291,53,5.6144,0 +53292,53,5.6216,0 +53293,53,5.6289,0 +53294,53,5.6361,0 +53295,53,5.6429,0 +53296,53,5.6496,0 +53297,53,5.6563,0 +53298,53,5.6624,0 +53299,53,5.6687,0 +53300,53,5.6754,0 +53301,53,5.6818,0 +53302,53,5.6878,0 +53303,53,5.6937,0 +53304,53,5.6992,0 +53305,53,5.7041,0 +53306,53,5.7091,0 +53307,53,5.7142,0 +53308,53,5.7189,0 +53309,53,5.7236,0 +53310,53,5.7287,0 +53311,53,5.7336,0 +53312,53,5.7383,0 +53313,53,5.7428,0 +53314,53,5.7464,0 +53315,53,5.7497,0 +53316,53,5.7528,0 +53317,53,5.7554,0 +53318,53,5.7578,0 +53319,53,5.7601,0 +53320,53,5.762,0 +53321,53,5.7635,0 +53322,53,5.7646,0 +53323,53,5.7652,0 +53324,53,5.7653,0 +53325,53,5.765,0 +53326,53,5.7639,0 +53327,53,5.7625,0 +53328,53,5.7608,0 +53329,53,5.7589,0 +53330,53,5.7565,0 +53331,53,5.7541,0 +53332,53,5.7514,0 +53333,53,5.748,0 +53334,53,5.7444,0 +53335,53,5.7405,0 +53336,53,5.7361,0 +53337,53,5.7311,0 +53338,53,5.7261,0 +53339,53,5.7206,0 +53340,53,5.7149,0 +53341,53,5.7088,0 +53342,53,5.7019,0 +53343,53,5.6946,0 +53344,53,5.6868,0 +53345,53,5.6783,0 +53346,53,5.6696,0 +53347,53,5.6608,0 +53348,53,5.6522,0 +53349,53,5.6435,0 +53350,53,5.6341,0 +53351,53,5.6246,0 +53352,53,5.615,0 +53353,53,5.6052,0 +53354,53,5.5956,0 +53355,53,5.5879,0 +53356,53,5.5799,0 +53357,53,5.5725,0 +53358,53,5.5651,0 +53359,53,5.5573,0 +53360,53,5.5493,0 +53361,53,5.5416,0 +53362,53,5.5338,0 +53363,53,5.5253,0 +53364,53,5.5168,0 +53365,53,5.5083,0 +53366,53,5.4998,0 +53367,53,5.4912,0 +53368,53,5.4827,0 +53369,53,5.4738,0 +53370,53,5.465,0 +53371,53,5.4557,0 +53372,53,5.4459,0 +53373,53,5.436,0 +53374,53,5.4259,0 +53375,53,5.4157,0 +53376,53,5.4054,0 +53377,53,5.3948,0 +53378,53,5.3836,0 +53379,53,5.3721,0 +53380,53,5.3604,0 +53381,53,5.3479,0 +53382,53,5.3349,0 +53383,53,5.3216,0 +53384,53,5.3076,0 +53385,53,5.2939,0 +53386,53,5.2804,0 +53387,53,5.2662,0 +53388,53,5.2518,0 +53389,53,5.2374,0 +53390,53,5.2228,0 +53391,53,5.2079,0 +53392,53,5.1927,0 +53393,53,5.1774,0 +53394,53,5.162,0 +53395,53,5.1465,0 +53396,53,5.1311,0 +53397,53,5.1157,0 +53398,53,5.1004,0 +53399,53,5.085,0 +53400,53,5.0692,0 +53401,53,5.0536,0 +53402,53,5.038,0 +53403,53,5.0218,0 +53404,53,5.0063,0 +53405,53,4.9911,0 +53406,53,4.9753,0 +53407,53,4.9594,0 +53408,53,4.9439,0 +53409,53,4.9279,0 +53410,53,4.9117,0 +53411,53,4.8957,0 +53412,53,4.8793,0 +53413,53,4.863,0 +53414,53,4.8469,0 +53415,53,4.8302,0 +53416,53,4.8133,0 +53417,53,4.7963,0 +53418,53,4.7789,0 +53419,53,4.761,0 +53420,53,4.7434,0 +53421,53,4.7257,0 +53422,53,4.7075,0 +53423,53,4.6895,0 +53424,53,4.6712,0 +53425,53,4.6519,0 +53426,53,4.6329,0 +53427,53,4.6135,0 +53428,53,4.5935,0 +53429,53,4.5736,0 +53430,53,4.5535,0 +53431,53,4.5331,0 +53432,53,4.5122,0 +53433,53,4.4915,0 +53434,53,4.4705,0 +53435,53,4.4492,0 +53436,53,4.4279,0 +53437,53,4.4062,0 +53438,53,4.3843,0 +53439,53,4.3623,0 +53440,53,4.3399,0 +53441,53,4.3174,0 +53442,53,4.2954,0 +53443,53,4.2729,0 +53444,53,4.2503,0 +53445,53,4.2278,0 +53446,53,4.2049,0 +53447,53,4.1821,0 +53448,53,4.1597,0 +53449,53,4.1376,0 +53450,53,4.1154,0 +53451,53,4.0939,0 +53452,53,4.0723,0 +53453,53,4.0509,0 +53454,53,4.0299,0 +53455,53,4.0089,0 +53456,53,3.9876,0 +53457,53,3.967,0 +53458,53,3.9467,0 +53459,53,3.9263,0 +53460,53,3.9062,0 +53461,53,3.8861,0 +53462,53,3.8662,0 +53463,53,3.8464,0 +53464,53,3.8269,0 +53465,53,3.8073,0 +53466,53,3.7881,0 +53467,53,3.7692,0 +53468,53,3.7501,0 +53469,53,3.7314,0 +53470,53,3.7129,0 +53471,53,3.6945,0 +53472,53,3.6761,0 +53473,53,3.6579,0 +53474,53,3.6396,0 +53475,53,3.621,0 +53476,53,3.6026,0 +53477,53,3.5844,0 +53478,53,3.5663,0 +53479,53,3.5485,0 +53480,53,3.5309,0 +53481,53,3.5135,0 +53482,53,3.4961,0 +53483,53,3.4793,0 +53484,53,3.4626,0 +53485,53,3.4465,0 +53486,53,3.4313,0 +53487,53,3.4165,0 +53488,53,3.4021,0 +53489,53,3.3881,0 +53490,53,3.3744,0 +53491,53,3.3609,0 +53492,53,3.3479,0 +53493,53,3.3351,0 +53494,53,3.3223,0 +53495,53,3.3101,0 +53496,53,3.2982,0 +53497,53,3.2866,0 +53498,53,3.2761,0 +53499,53,3.2659,0 +53500,53,3.2555,0 +53501,53,3.2455,0 +53502,53,3.2357,0 +53503,53,3.2264,0 +53504,53,3.2169,0 +53505,53,3.2077,0 +53506,53,3.199,0 +53507,53,3.1905,0 +53508,53,3.1823,0 +53509,53,3.1746,0 +53510,53,3.1671,0 +53511,53,3.1598,0 +53512,53,3.153,0 +53513,53,3.1464,0 +53514,53,3.14,0 +53515,53,3.1343,0 +53516,53,3.1288,0 +53517,53,3.1234,0 +53518,52,3.1185,0 +53519,52,3.1139,0 +53520,52,3.1094,0 +53521,52,3.105,0 +53522,52,3.101,0 +53523,52,3.0969,0 +53524,52,3.0933,0 +53525,52,3.0898,0 +53526,52,3.0864,0 +53527,52,3.0834,0 +53528,52,3.0807,0 +53529,52,3.0781,0 +53530,52,3.0757,0 +53531,52,3.0735,0 +53532,52,3.0716,0 +53533,52,3.0697,0 +53534,52,3.068,0 +53535,52,3.0669,0 +53536,52,3.0661,0 +53537,52,3.0652,0 +53538,52,3.0646,0 +53539,52,3.0643,0 +53541,52,3.0644,0 +53542,52,3.0643,0 +53543,52,3.0644,0 +53544,52,3.0645,0 +53545,52,3.0648,0 +53546,52,3.0653,0 +53547,52,3.0663,0 +53548,52,3.0675,0 +53549,50,3.0687,0 +53550,50,3.07,0 +53551,67,3.0712,0 +53552,67,3.0723,0 +53553,67,3.0738,0 +53554,67,3.0754,0 +53555,67,3.0769,0 +53556,67,3.0784,0 +53557,67,3.08,0 +53558,67,3.0809,0 +53559,67,3.082,0 +53560,67,3.0833,0 +53561,67,3.0845,0 +53562,67,3.0857,0 +53563,67,3.0869,0 +53564,67,3.0882,0 +53565,67,3.0897,0 +53566,67,3.0914,0 +53567,67,3.0932,0 +53568,67,3.0953,0 +53569,67,3.097,0 +53570,67,3.0983,0 +53571,67,3.1001,0 +53572,67,3.1021,0 +53573,67,3.1041,0 +53574,67,3.1063,0 +53575,67,3.1087,0 +53576,67,3.1118,0 +53577,67,3.1148,0 +53578,67,3.1178,0 +53579,67,3.1209,0 +53580,67,3.1237,0 +53581,67,3.1264,0 +53582,67,3.1293,0 +53583,67,3.1322,0 +53584,67,3.1351,0 +53585,67,3.1379,0 +53586,67,3.1404,0 +53587,67,3.1427,0 +53588,67,3.145,0 +53589,67,3.1469,0 +53590,67,3.1483,0 +53591,67,3.1496,0 +53592,67,3.1507,0 +53593,67,3.1514,0 +53594,67,3.1521,0 +53595,67,3.1526,0 +53596,67,3.1528,0 +53597,67,3.153,0 +53598,67,3.1528,0 +53599,67,3.1521,0 +53600,67,3.1511,0 +53601,67,3.1495,0 +53602,67,3.1476,0 +53603,67,3.1455,0 +53604,67,3.1432,0 +53605,67,3.1407,0 +53606,67,3.1377,0 +53607,67,3.1343,0 +53608,67,3.1308,0 +53609,67,3.1269,0 +53610,67,3.1224,0 +53611,67,3.1174,0 +53612,67,3.1123,0 +53613,67,3.1069,0 +53614,67,3.1015,0 +53615,67,3.0962,0 +53616,67,3.0908,0 +53617,67,3.085,0 +53618,67,3.079,0 +53619,67,3.0726,0 +53620,67,3.0659,0 +53621,67,3.0589,0 +53622,67,3.0517,0 +53623,67,3.0445,0 +53624,67,3.0371,0 +53625,67,3.0293,0 +53626,67,3.0212,0 +53627,67,3.0129,0 +53628,67,3.0044,0 +53629,67,2.9954,0 +53630,67,2.9861,0 +53631,67,2.9763,0 +53632,67,2.966,0 +53633,67,2.9555,0 +53634,67,2.9449,0 +53635,67,2.9337,0 +53636,67,2.9221,0 +53637,67,2.91,0 +53638,67,2.8974,0 +53639,67,2.8844,0 +53640,67,2.871,0 +53641,67,2.857,0 +53642,67,2.8427,0 +53643,67,2.8278,0 +53644,67,2.8124,0 +53645,67,2.7962,0 +53646,67,2.7796,0 +53647,67,2.7624,0 +53648,67,2.7445,0 +53649,67,2.726,0 +53650,67,2.7073,0 +53651,67,2.6882,0 +53652,67,2.669,0 +53653,67,2.6496,0 +53654,67,2.6299,0 +53655,67,2.6099,0 +53656,67,2.5896,0 +53657,67,2.5689,0 +53658,67,2.5482,0 +53659,67,2.5275,0 +53660,67,2.5064,0 +53661,67,2.4849,0 +53662,67,2.4635,0 +53663,67,2.442,0 +53664,67,2.4205,0 +53665,67,2.3987,0 +53666,67,2.3767,0 +53667,67,2.3542,0 +53668,67,2.3314,0 +53669,67,2.3083,0 +53670,67,2.2848,0 +53671,67,2.2612,0 +53672,67,2.2374,0 +53673,67,2.2136,0 +53674,67,2.1897,0 +53675,67,2.1656,0 +53676,67,2.1411,0 +53677,67,2.1166,0 +53678,67,2.0921,0 +53679,67,2.0675,0 +53680,67,2.0428,0 +53681,67,2.018,0 +53682,67,1.993,0 +53683,67,1.9682,0 +53684,67,1.9434,0 +53685,67,1.9186,0 +53686,67,1.8938,0 +53687,67,1.869,0 +53688,67,1.8442,0 +53689,67,1.8193,0 +53690,67,1.7942,0 +53691,67,1.7691,0 +53692,67,1.7439,0 +53693,67,1.7187,0 +53694,67,1.6936,0 +53695,67,1.6687,0 +53696,67,1.6437,0 +53697,67,1.6184,0 +53698,67,1.5931,0 +53699,67,1.5678,0 +53700,67,1.5424,0 +53701,67,1.5169,0 +53702,67,1.4912,0 +53703,67,1.4657,0 +53704,67,1.4403,0 +53705,67,1.4151,0 +53706,67,1.3898,0 +53707,67,1.3647,0 +53708,67,1.3395,0 +53709,67,1.3144,0 +53710,67,1.2896,0 +53711,67,1.2648,0 +53712,67,1.2402,0 +53713,67,1.2158,0 +53714,67,1.1916,0 +53715,67,1.1674,0 +53716,67,1.1435,0 +53717,67,1.1198,0 +53718,67,1.0962,0 +53719,67,1.0728,0 +53720,67,1.0503,0 +53721,67,1.0281,0 +53722,67,1.0061,0 +53723,67,0.98425,0 +53724,67,0.96275,0 +53725,67,0.94146,0 +53726,67,0.92023,0 +53727,67,0.89907,0 +53728,67,0.8779,0 +53729,67,0.8569,0 +53730,67,0.83596,0 +53731,67,0.81493,0 +53732,67,0.79406,0 +53733,67,0.77358,0 +53734,67,0.75298,0 +53735,67,0.73244,0 +53736,67,0.71245,0 +53737,67,0.69263,0 +53738,67,0.67321,0 +53739,67,0.65407,0 +53740,67,0.63518,0 +53741,67,0.61645,0 +53742,67,0.59814,0 +53743,67,0.58041,0 +53744,67,0.56319,0 +53745,67,0.5465,0 +53746,67,0.53047,0 +53747,67,0.51489,0 +53748,67,0.49976,0 +53749,67,0.48507,0 +53750,67,0.47078,0 +53751,67,0.45705,0 +53752,67,0.44393,0 +53753,67,0.43135,0 +53754,67,0.41925,0 +53755,67,0.40729,0 +53756,67,0.3955,0 +53757,67,0.38408,0 +53758,67,0.37306,0 +53759,67,0.36239,0 +53760,67,0.35209,0 +53761,67,0.34238,0 +53762,67,0.33292,0 +53763,67,0.32372,0 +53764,67,0.31478,0 +53765,67,0.30587,0 +53766,67,0.29705,0 +53767,67,0.28827,0 +53768,67,0.27964,0 +53769,67,0.27133,0 +53770,67,0.26337,0 +53771,67,0.25552,0 +53772,67,0.24782,0 +53773,67,0.24034,0 +53774,67,0.23306,0 +53775,67,0.22599,0 +53776,67,0.21931,0 +53777,67,0.21303,0 +53778,67,0.20698,0 +53779,67,0.20107,0 +53780,67,0.19544,0 +53781,67,0.19033,0 +53782,67,0.18554,0 +53783,67,0.18094,0 +53784,67,0.17652,0 +53785,67,0.17229,0 +53786,67,0.16848,0 +53787,67,0.16491,0 +53788,67,0.16147,0 +53789,67,0.15815,0 +53790,67,0.15499,0 +53791,67,0.15201,0 +53792,67,0.14924,0 +53793,67,0.14664,0 +53794,67,0.14413,0 +53795,67,0.14176,0 +53796,67,0.13945,0 +53797,67,0.13731,0 +53798,67,0.13529,0 +53799,67,0.13346,0 +53800,67,0.13166,0 +53801,67,0.12993,0 +53802,67,0.12786,0 +53803,67,0.12579,0 +53804,67,0.1238,0 +53805,67,0.12199,0 +53806,67,0.12023,0 +53807,67,0.11851,0 +53808,67,0.11691,0 +53809,67,0.11539,0 +53810,67,0.11396,0 +53811,67,0.11263,0 +53812,67,0.11137,0 +53813,67,0.11024,0 +53814,67,0.10922,0 +53815,67,0.10833,0 +53816,67,0.10731,0 +53817,67,0.10634,0 +53818,67,0.10542,0 +53819,67,0.10447,0 +53820,67,0.10335,0 +53821,67,0.10233,0 +53822,67,0.1013,0 +53823,67,0.10019,0 +53824,67,0.098946,0 +53825,67,0.09758,0 +53826,67,0.096241,0 +53827,67,0.094626,0 +53828,67,0.092815,0 +53829,67,0.090837,0 +53830,67,0.088575,0 +53831,67,0.085995,0 +53832,67,0.08334,0 +53833,67,0.080383,0 +53834,67,0.077375,0 +53835,67,0.074168,0 +53836,67,0.070866,0 +53837,67,0.067182,0 +53838,67,0.063378,0 +53839,67,0.059431,0 +53840,67,0.055371,0 +53841,67,0.051347,0 +53842,67,0.047371,0 +53843,67,0.043233,0 +53844,67,0.038995,0 +53845,67,0.034744,0 +53846,67,0.030274,0 +53847,67,0.025771,0 +53848,67,0.021034,0 +53849,67,0.016112,0 +53850,67,0.011095,0 +53851,67,0.0060237,0 +53852,67,0.0009487,0 +53853,67,-0.0039953,0 +53854,67,-0.0089131,0 +53855,67,-0.013692,0 +53856,67,-0.018478,0 +53857,67,-0.023265,0 +53858,67,-0.028035,0 +53859,67,-0.032753,0 +53860,67,-0.037408,0 +53861,66,-0.042139,0 +53862,66,-0.046924,0 +53863,66,-0.051735,0 +53864,66,-0.057152,0 +53865,66,-0.070314,0 +53866,66,-0.083598,0 +53867,66,-0.096847,0 +53868,66,-0.1101,0 +53869,66,-0.12343,0 +53870,66,-0.13698,0 +53871,66,-0.15063,0 +53872,66,-0.16423,0 +53873,66,-0.17796,0 +53874,66,-0.19171,0 +53875,66,-0.20546,0 +53876,66,-0.21927,0 +53877,66,-0.23313,0 +53878,66,-0.24688,0 +53879,66,-0.26051,0 +53880,66,-0.27413,0 +53881,66,-0.28777,0 +53882,66,-0.30141,0 +53883,66,-0.31499,0 +53884,66,-0.3285,0 +53885,66,-0.34193,0 +53886,66,-0.35532,0 +53887,66,-0.36857,0 +53888,66,-0.3818,0 +53889,66,-0.39461,0 +53890,66,-0.40705,0 +53891,66,-0.41931,0 +53892,66,-0.43156,0 +53893,66,-0.44346,0 +53894,66,-0.45521,0 +53895,66,-0.46698,0 +53896,66,-0.47878,0 +53897,66,-0.49036,0 +53898,66,-0.50194,0 +53899,66,-0.51357,0 +53900,66,-0.52504,0 +53901,66,-0.53656,0 +53902,66,-0.54797,0 +53903,66,-0.55932,0 +53904,66,-0.57058,0 +53905,66,-0.58167,0 +53906,66,-0.59275,0 +53907,66,-0.60357,0 +53908,66,-0.61409,0 +53909,66,-0.6245,0 +53910,66,-0.6348,0 +53911,66,-0.64484,0 +53912,66,-0.6548,0 +53913,66,-0.6648,0 +53914,66,-0.67473,0 +53915,66,-0.68438,0 +53916,66,-0.69379,0 +53917,66,-0.70301,0 +53918,66,-0.71194,0 +53919,66,-0.72065,0 +53920,66,-0.72896,0 +53921,66,-0.73701,0 +53922,66,-0.74458,0 +53923,66,-0.752,0 +53924,66,-0.7591,0 +53925,66,-0.76604,0 +53926,66,-0.7726,0 +53927,66,-0.77888,0 +53928,66,-0.78493,0 +53929,66,-0.79067,0 +53930,66,-0.79625,0 +53931,66,-0.80158,0 +53932,66,-0.8067,0 +53933,66,-0.81162,0 +53934,66,-0.81619,0 +53935,66,-0.82055,0 +53936,66,-0.82481,0 +53937,66,-0.82888,0 +53938,66,-0.83291,0 +53939,66,-0.83691,0 +53940,66,-0.84073,0 +53941,63,-0.84432,0 +53942,63,-0.84768,0 +53943,64,-0.85084,0 +53944,64,-0.85384,0 +53945,64,-0.85671,0 +53946,64,-0.85944,0 +53947,64,-0.86203,0 +53948,64,-0.86447,0 +53949,64,-0.86673,0 +53950,64,-0.8687,0 +53951,64,-0.87046,0 +53952,64,-0.87186,0 +53953,64,-0.87302,0 +53954,64,-0.87398,0 +53955,64,-0.86127,0 +53956,64,-0.84436,0 +53957,64,-0.82726,0 +53958,64,-0.80968,0 +53959,64,-0.79178,0 +53960,64,-0.77352,0 +53961,64,-0.75491,0 +53962,64,-0.73609,0 +53963,64,-0.71685,0 +53964,64,-0.69749,0 +53965,64,-0.67794,0 +53966,64,-0.65819,0 +53967,64,-0.63829,0 +53968,64,-0.61832,0 +53969,64,-0.59834,0 +53970,64,-0.57825,0 +53971,64,-0.55809,0 +53972,64,-0.53787,0 +53973,64,-0.51759,0 +53974,64,-0.49733,0 +53975,64,-0.47699,0 +53976,64,-0.45667,0 +53977,64,-0.43638,0 +53978,64,-0.41618,0 +53979,64,-0.39599,0 +53980,64,-0.37609,0 +53981,64,-0.35615,0 +53982,64,-0.3362,0 +53983,64,-0.31625,0 +53984,64,-0.29621,0 +53985,64,-0.27593,0 +53986,64,-0.25557,0 +53987,64,-0.23514,0 +53988,64,-0.21451,0 +53989,64,-0.19374,0 +53990,64,-0.17278,0 +53991,64,-0.1517,0 +53992,64,-0.13043,0 +53993,64,-0.1092,0 +53994,64,-0.088214,0 +53995,64,-0.067217,0 +53996,64,-0.046347,0 +53997,64,-0.025816,0 +53998,64,-0.0054201,0 +53999,64,0.015009,0 +54000,64,0.035351,0 +54001,64,0.055811,0 +54002,64,0.076212,0 +54003,64,0.096319,0 +54004,64,0.11638,0 +54005,64,0.1364,0 +54006,64,0.15604,0 +54007,64,0.17543,0 +54008,64,0.19477,0 +54009,64,0.21395,0 +54010,64,0.23284,0 +54011,64,0.25158,0 +54012,64,0.27036,0 +54013,64,0.2889,0 +54014,64,0.30751,0 +54015,64,0.32593,0 +54016,64,0.34417,0 +54017,64,0.36234,0 +54018,64,0.38045,0 +54019,64,0.39839,0 +54020,64,0.41613,0 +54021,64,0.43376,0 +54022,64,0.45116,0 +54023,64,0.46832,0 +54024,64,0.48539,0 +54025,64,0.50251,0 +54026,64,0.51956,0 +54027,64,0.53681,0 +54028,64,0.55405,0 +54029,64,0.57111,0 +54030,64,0.58833,0 +54031,64,0.60544,0 +54032,64,0.62223,0 +54033,64,0.63904,0 +54034,64,0.65582,0 +54035,64,0.67234,0 +54036,64,0.68875,0 +54037,64,0.70525,0 +54038,64,0.72147,0 +54039,64,0.73734,0 +54040,64,0.75304,0 +54041,64,0.76849,0 +54042,64,0.78356,0 +54043,64,0.79675,0 +54044,64,0.80266,0 +54045,64,0.80824,0 +54046,64,0.81349,0 +54047,64,0.81834,0 +54048,64,0.82304,0 +54049,64,0.82746,0 +54050,64,0.83167,0 +54051,64,0.83572,0 +54052,64,0.83962,0 +54053,64,0.84348,0 +54054,64,0.8469,0 +54055,64,0.85019,0 +54056,64,0.85337,0 +54057,62,0.85661,0 +54058,62,0.85981,0 +54059,63,0.86319,0 +54060,63,0.8665,0 +54061,63,0.86987,0 +54062,63,0.87328,0 +54063,63,0.87672,0 +54064,63,0.88,0 +54065,63,0.88328,0 +54066,63,0.88652,0 +54067,63,0.88966,0 +54068,63,0.89297,0 +54069,63,0.89627,0 +54070,63,0.8995,0 +54071,63,0.90289,0 +54072,63,0.90635,0 +54073,63,0.90974,0 +54074,63,0.91298,0 +54075,63,0.91627,0 +54076,63,0.91952,0 +54077,63,0.9228,0 +54078,63,0.92636,0 +54079,63,0.92996,0 +54080,63,0.93356,0 +54081,63,0.93745,0 +54082,63,0.94157,0 +54083,63,0.94588,0 +54084,63,0.95032,0 +54085,63,0.95505,0 +54086,63,0.96009,0 +54087,63,0.96545,0 +54088,63,0.97111,0 +54089,63,0.97701,0 +54090,63,0.98313,0 +54091,63,0.98964,0 +54092,63,0.99649,0 +54093,63,1.0034,0 +54094,63,1.0107,0 +54095,63,1.0183,0 +54096,63,1.0262,0 +54097,63,1.0342,0 +54098,63,1.0427,0 +54099,63,1.0513,0 +54100,63,1.0602,0 +54101,63,1.0692,0 +54102,63,1.0785,0 +54103,63,1.0879,0 +54104,63,1.0975,0 +54105,63,1.1071,0 +54106,63,1.117,0 +54107,63,1.1271,0 +54108,63,1.1376,0 +54109,63,1.1483,0 +54110,63,1.1594,0 +54111,63,1.1707,0 +54112,63,1.1823,0 +54113,63,1.1941,0 +54114,63,1.2061,0 +54115,63,1.2184,0 +54116,63,1.231,0 +54117,63,1.2439,0 +54118,63,1.2569,0 +54119,63,1.2703,0 +54120,63,1.284,0 +54121,63,1.2978,0 +54122,63,1.312,0 +54123,63,1.3266,0 +54124,63,1.3413,0 +54125,63,1.3563,0 +54126,63,1.3717,0 +54127,63,1.3874,0 +54128,63,1.4035,0 +54129,63,1.4198,0 +54130,63,1.4367,0 +54131,63,1.4538,0 +54132,63,1.471,0 +54133,63,1.4887,0 +54134,63,1.5067,0 +54135,63,1.525,0 +54136,63,1.5435,0 +54137,63,1.5621,0 +54138,63,1.581,0 +54139,63,1.6,0 +54140,63,1.6194,0 +54141,63,1.6389,0 +54142,63,1.6587,0 +54143,63,1.6788,0 +54144,63,1.6991,0 +54145,63,1.7194,0 +54146,63,1.7398,0 +54147,63,1.7604,0 +54148,63,1.7811,0 +54149,63,1.802,0 +54150,63,1.8229,0 +54151,63,1.844,0 +54152,63,1.8653,0 +54153,63,1.8867,0 +54154,63,1.9083,0 +54155,63,1.93,0 +54156,63,1.9518,0 +54157,63,1.9737,0 +54158,63,1.9956,0 +54159,63,2.0178,0 +54160,63,2.0402,0 +54161,63,2.0626,0 +54162,63,2.0853,0 +54163,63,2.1079,0 +54164,63,2.1305,0 +54165,63,2.153,0 +54166,63,2.1753,0 +54167,63,2.1975,0 +54168,63,2.2198,0 +54169,63,2.2421,0 +54170,63,2.2643,0 +54171,63,2.2863,0 +54172,63,2.3082,0 +54173,63,2.3303,0 +54174,63,2.3523,0 +54175,63,2.3743,0 +54176,63,2.3958,0 +54177,63,2.4174,0 +54178,63,2.439,0 +54179,63,2.4602,0 +54180,63,2.4816,0 +54181,63,2.503,0 +54182,63,2.5241,0 +54183,63,2.5452,0 +54184,63,2.5659,0 +54185,63,2.5865,0 +54186,63,2.6068,0 +54187,63,2.6271,0 +54188,63,2.647,0 +54189,63,2.6667,0 +54190,63,2.686,0 +54191,63,2.7053,0 +54192,63,2.7245,0 +54193,63,2.7436,0 +54194,63,2.7623,0 +54195,63,2.7807,0 +54196,63,2.7985,0 +54197,63,2.8159,0 +54198,63,2.833,0 +54199,63,2.8497,0 +54200,63,2.8659,0 +54201,63,2.8815,0 +54202,63,2.8965,0 +54203,63,2.9112,0 +54204,63,2.9255,0 +54205,63,2.9392,0 +54206,63,2.9524,0 +54207,63,2.965,0 +54208,63,2.9771,0 +54209,63,2.9888,0 +54210,63,2.9996,0 +54211,63,3.01,0 +54212,63,3.02,0 +54213,63,3.0295,0 +54214,63,3.0383,0 +54215,63,3.0466,0 +54216,63,3.0544,0 +54217,63,3.0616,0 +54218,63,3.0683,0 +54219,63,3.0746,0 +54220,63,3.0803,0 +54221,63,3.0855,0 +54222,63,3.0902,0 +54223,63,3.0943,0 +54224,63,3.0981,0 +54225,63,3.1014,0 +54226,63,3.1039,0 +54227,63,3.106,0 +54228,63,3.1076,0 +54229,63,3.1086,0 +54230,63,3.1091,0 +54232,63,3.1086,0 +54233,63,3.1077,0 +54234,63,3.1063,0 +54235,63,3.1042,0 +54236,63,3.1017,0 +54237,63,3.0986,0 +54238,63,3.0952,0 +54239,63,3.0911,0 +54240,63,3.0865,0 +54241,63,3.0816,0 +54242,63,3.0762,0 +54243,63,3.0703,0 +54244,63,3.0637,0 +54245,63,3.0565,0 +54246,63,3.0488,0 +54247,63,3.0405,0 +54248,63,3.032,0 +54249,63,3.023,0 +54250,63,3.0137,0 +54251,63,3.004,0 +54252,63,2.9941,0 +54253,63,2.9835,0 +54254,63,2.9724,0 +54255,63,2.9614,0 +54256,63,2.9498,0 +54257,63,2.9374,0 +54258,63,2.9245,0 +54259,63,2.9113,0 +54260,63,2.8977,0 +54261,63,2.8837,0 +54262,63,2.8695,0 +54263,63,2.8548,0 +54264,63,2.8396,0 +54265,63,2.8243,0 +54266,63,2.8086,0 +54267,63,2.7927,0 +54268,63,2.7768,0 +54269,63,2.7602,0 +54270,63,2.7436,0 +54271,63,2.7269,0 +54272,63,2.71,0 +54273,63,2.693,0 +54274,63,2.6758,0 +54275,63,2.6583,0 +54276,63,2.6405,0 +54277,63,2.6226,0 +54278,63,2.6048,0 +54279,63,2.5869,0 +54280,63,2.5692,0 +54281,63,2.5515,0 +54282,63,2.5341,0 +54283,63,2.517,0 +54284,63,2.4996,0 +54285,63,2.4824,0 +54286,63,2.4654,0 +54287,63,2.4483,0 +54288,63,2.4315,0 +54289,63,2.4148,0 +54290,63,2.3983,0 +54291,63,2.3817,0 +54292,63,2.3652,0 +54293,63,2.3489,0 +54294,63,2.3327,0 +54295,63,2.3168,0 +54296,63,2.301,0 +54297,63,2.2853,0 +54298,63,2.27,0 +54299,63,2.2546,0 +54300,63,2.2395,0 +54301,63,2.2247,0 +54302,63,2.2099,0 +54303,63,2.1953,0 +54304,63,2.1811,0 +54305,63,2.167,0 +54306,63,2.1528,0 +54307,63,2.1386,0 +54308,63,2.1244,0 +54309,63,2.1103,0 +54310,63,2.0963,0 +54311,63,2.0824,0 +54312,63,2.0687,0 +54313,63,2.0554,0 +54314,63,2.0419,0 +54315,63,2.0288,0 +54316,63,2.0157,0 +54317,63,2.0027,0 +54318,63,1.9901,0 +54319,63,1.9777,0 +54320,63,1.9654,0 +54321,63,1.9533,0 +54322,63,1.9415,0 +54323,63,1.9299,0 +54324,63,1.9184,0 +54325,63,1.9069,0 +54326,63,1.8951,0 +54327,63,1.8834,0 +54328,63,1.8714,0 +54329,63,1.8596,0 +54330,63,1.8479,0 +54331,63,1.836,0 +54332,63,1.8241,0 +54333,63,1.812,0 +54334,63,1.7993,0 +54335,63,1.7865,0 +54336,63,1.7732,0 +54337,63,1.76,0 +54338,63,1.7466,0 +54339,63,1.7328,0 +54340,63,1.7186,0 +54341,63,1.7036,0 +54342,63,1.6885,0 +54343,63,1.6729,0 +54344,63,1.6566,0 +54345,63,1.6401,0 +54346,63,1.6232,0 +54347,63,1.6058,0 +54348,63,1.5877,0 +54349,63,1.5686,0 +54350,63,1.5488,0 +54351,63,1.5282,0 +54352,63,1.5067,0 +54353,63,1.4849,0 +54354,63,1.4624,0 +54355,63,1.4393,0 +54356,63,1.4159,0 +54357,63,1.3922,0 +54358,63,1.3688,0 +54359,63,1.345,0 +54360,63,1.3208,0 +54361,63,1.2965,0 +54362,63,1.2719,0 +54363,63,1.2469,0 +54364,63,1.2216,0 +54365,63,1.1957,0 +54366,63,1.1694,0 +54367,63,1.1424,0 +54368,63,1.1152,0 +54369,63,1.0875,0 +54370,63,1.0598,0 +54371,63,1.0322,0 +54372,63,1.0043,0 +54373,63,0.97633,0 +54374,63,0.94822,0 +54375,63,0.91989,0 +54376,63,0.89132,0 +54377,63,0.86256,0 +54378,63,0.83369,0 +54379,63,0.80442,0 +54380,63,0.77452,0 +54381,63,0.74454,0 +54382,63,0.71429,0 +54383,63,0.68344,0 +54384,63,0.65226,0 +54385,63,0.62121,0 +54386,63,0.59066,0 +54387,63,0.56022,0 +54388,63,0.52973,0 +54389,63,0.49979,0 +54390,63,0.47009,0 +54391,63,0.44075,0 +54392,38,0.41217,0 +54393,38,0.38421,0 +54394,53,0.35693,0 +54395,53,0.3303,0 +54396,53,0.30345,0 +54397,53,0.27753,0 +54398,53,0.25398,0 +54399,53,0.2309,0 +54400,53,0.20901,0 +54401,53,0.18845,0 +54402,53,0.169,0 +54403,53,0.15116,0 +54404,53,0.13497,0 +54405,53,0.12053,0 +54406,53,0.10742,0 +54407,53,0.095543,0 +54408,53,0.08529,0 +54409,53,0.075866,0 +54410,53,0.06778,0 +54411,53,0.060318,0 +54412,53,0.053508,0 +54413,53,0.047053,0 +54414,53,0.040698,0 +54415,53,0.034956,0 +54416,53,0.02947,0 +54417,53,0.024027,0 +54418,53,0.019151,0 +54419,53,0.014464,0 +54420,53,0.010155,0 +54421,53,0.0062687,0 +54422,53,0.0026663,0 +54423,53,-0.00063343,0 +54424,53,-0.0036112,0 +54425,53,-0.0062298,0 +54426,53,-0.0087408,0 +54427,53,-0.011082,0 +54428,53,-0.013175,0 +54429,53,-0.014985,0 +54430,53,-0.016604,0 +54431,53,-0.017947,0 +54432,53,-0.019172,0 +54433,53,-0.020335,0 +54434,53,-0.021362,0 +54435,53,-0.022072,0 +54436,53,-0.022143,0 +54437,53,-0.022141,0 +54438,53,-0.022051,0 +54439,53,-0.021546,0 +54440,53,-0.020611,0 +54441,53,-0.019778,0 +54442,53,-0.019076,0 +54443,53,-0.018381,0 +54444,53,-0.017639,0 +54445,53,-0.016719,0 +54446,53,-0.016016,0 +54447,53,-0.015141,0 +54448,53,-0.014183,0 +54449,53,-0.013422,0 +54450,53,-0.012706,0 +54451,53,-0.012487,0 +54452,53,-0.012269,0 +54453,53,-0.012005,0 +54454,53,-0.011745,0 +54455,53,-0.011494,0 +54456,53,-0.011599,0 +54457,53,-0.012079,0 +54458,53,-0.013052,0 +54459,53,-0.014137,0 +54460,53,-0.015779,0 +54461,53,-0.017643,0 +54462,53,-0.020099,0 +54463,53,-0.022975,0 +54464,53,-0.026225,0 +54465,53,-0.030403,0 +54466,53,-0.03462,0 +54467,53,-0.039441,0 +54468,53,-0.044318,0 +54469,53,-0.049585,0 +54470,53,-0.0549,0 +54471,53,-0.060682,0 +54472,53,-0.066583,0 +54473,53,-0.07247,0 +54474,53,-0.078419,0 +54475,53,-0.084584,0 +54476,53,-0.090631,0 +54477,53,-0.096654,0 +54478,53,-0.10271,0 +54479,53,-0.10877,0 +54480,53,-0.11469,0 +54481,53,-0.12055,0 +54482,53,-0.1263,0 +54483,53,-0.13184,0 +54484,53,-0.13748,0 +54485,53,-0.14308,0 +54486,53,-0.14832,0 +54487,53,-0.15345,0 +54488,53,-0.15854,0 +54489,53,-0.16367,0 +54490,53,-0.16877,0 +54491,53,-0.17343,0 +54492,53,-0.17784,0 +54493,53,-0.18207,0 +54494,53,-0.18628,0 +54495,53,-0.19041,0 +54496,53,-0.19419,0 +54497,53,-0.19794,0 +54498,53,-0.20129,0 +54499,53,-0.20439,0 +54500,53,-0.20724,0 +54501,53,-0.20978,0 +54502,53,-0.21248,0 +54503,53,-0.21523,0 +54504,53,-0.21773,0 +54505,53,-0.21985,0 +54506,53,-0.22174,0 +54507,52,-0.22364,0 +54508,52,-0.22541,0 +54509,52,-0.22669,0 +54510,52,-0.22774,0 +54511,52,-0.22853,0 +54512,52,-0.22907,0 +54513,58,-0.22911,0 +54514,58,-0.22928,0 +54515,58,-0.22913,0 +54516,58,-0.22898,0 +54517,58,-0.22884,0 +54518,58,-0.22851,0 +54519,58,-0.22801,0 +54520,58,-0.2276,0 +54521,58,-0.22706,0 +54522,58,-0.22644,0 +54523,58,-0.22555,0 +54524,58,-0.22466,0 +54525,58,-0.22377,0 +54526,58,-0.22287,0 +54527,58,-0.2219,0 +54528,58,-0.22054,0 +54529,58,-0.2191,0 +54530,58,-0.21746,0 +54531,58,-0.21549,0 +54532,58,-0.21352,0 +54533,58,-0.21128,0 +54534,58,-0.20879,0 +54535,58,-0.20624,0 +54536,58,-0.20324,0 +54537,58,-0.20006,0 +54538,58,-0.19682,0 +54539,58,-0.19336,0 +54540,58,-0.18993,0 +54541,58,-0.18662,0 +54542,58,-0.18331,0 +54543,58,-0.17985,0 +54544,58,-0.17638,0 +54545,58,-0.17289,0 +54546,58,-0.16942,0 +54547,58,-0.16582,0 +54548,58,-0.16216,0 +54549,58,-0.1585,0 +54550,58,-0.15484,0 +54551,58,-0.15109,0 +54552,58,-0.14719,0 +54553,58,-0.14339,0 +54554,58,-0.13962,0 +54555,58,-0.13588,0 +54556,58,-0.13224,0 +54557,58,-0.12828,0 +54558,58,-0.12434,0 +54559,58,-0.12032,0 +54560,58,-0.11643,0 +54561,58,-0.11257,0 +54562,58,-0.10872,0 +54563,58,-0.1048,0 +54564,58,-0.10079,0 +54565,58,-0.096953,0 +54566,58,-0.0932,0 +54567,58,-0.089578,0 +54568,58,-0.085958,0 +54569,58,-0.082194,0 +54570,58,-0.078541,0 +54571,58,-0.074975,0 +54572,58,-0.0713,0 +54573,58,-0.067766,0 +54574,58,-0.064245,0 +54575,58,-0.060769,0 +54576,58,-0.057382,0 +54577,58,-0.053706,0 +54578,58,-0.049917,0 +54579,58,-0.046145,0 +54580,58,-0.04248,0 +54581,58,-0.038898,0 +54582,58,-0.035444,0 +54583,58,-0.031875,0 +54584,58,-0.028431,0 +54585,58,-0.025204,0 +54586,58,-0.022048,0 +54587,58,-0.019014,0 +54588,58,-0.01611,0 +54589,58,-0.013718,0 +54590,58,-0.011214,0 +54591,58,-0.0086271,0 +54592,58,-0.0061034,0 +54593,58,-0.0035867,0 +54594,58,-0.00107,0 +54595,58,0.0013309,0 +54596,58,0.0037227,0 +54597,58,0.0064365,0 +54598,58,0.0092438,0 +54599,58,0.012043,0 +54600,58,0.014678,0 +54601,58,0.017373,0 +54602,58,0.020155,0 +54603,58,0.02294,0 +54604,58,0.02586,0 +54605,58,0.028704,0 +54606,58,0.03146,0 +54607,58,0.034213,0 +54608,58,0.036915,0 +54609,58,0.039505,0 +54610,58,0.042202,0 +54611,58,0.044919,0 +54612,58,0.047504,0 +54613,58,0.050088,0 +54614,58,0.052434,0 +54615,58,0.054712,0 +54616,58,0.056989,0 +54617,58,0.059368,0 +54618,58,0.061531,0 +54619,58,0.063691,0 +54620,58,0.065966,0 +54621,58,0.06834,0 +54622,58,0.070762,0 +54623,58,0.07318,0 +54624,58,0.0756,0 +54625,58,0.078021,0 +54626,58,0.080431,0 +54627,58,0.082845,0 +54628,58,0.085347,0 +54629,58,0.087901,0 +54630,58,0.090456,0 +54631,60,0.092944,0 +54632,60,0.095673,0 +54633,60,0.098526,0 +54634,60,0.10138,0 +54635,60,0.10431,0 +54636,60,0.10731,0 +54637,60,0.11029,0 +54638,60,0.11333,0 +54639,60,0.11628,0 +54640,60,0.11922,0 +54641,60,0.12223,0 +54642,60,0.12534,0 +54643,60,0.12856,0 +54644,60,0.13156,0 +54645,60,0.13472,0 +54646,60,0.13797,0 +54647,60,0.14133,0 +54648,60,0.14487,0 +54649,60,0.14836,0 +54650,60,0.15184,0 +54651,60,0.15538,0 +54652,60,0.15898,0 +54653,60,0.16235,0 +54654,60,0.16572,0 +54655,60,0.16884,0 +54656,60,0.17191,0 +54657,60,0.17477,0 +54658,60,0.17728,0 +54659,60,0.17972,0 +54660,60,0.18188,0 +54661,60,0.18405,0 +54662,60,0.18621,0 +54663,60,0.18834,0 +54664,60,0.1902,0 +54665,60,0.19199,0 +54666,60,0.1937,0 +54667,60,0.19528,0 +54668,60,0.19684,0 +54669,60,0.19832,0 +54670,60,0.19984,0 +54671,60,0.20124,0 +54672,60,0.20245,0 +54673,60,0.20357,0 +54674,60,0.20458,0 +54675,60,0.20555,0 +54676,60,0.20647,0 +54677,60,0.20729,0 +54678,60,0.2079,0 +54679,60,0.20816,0 +54680,60,0.20835,0 +54681,60,0.20845,0 +54682,60,0.20854,0 +54683,60,0.20824,0 +54684,60,0.20786,0 +54685,60,0.20723,0 +54686,60,0.20646,0 +54687,60,0.20556,0 +54688,60,0.20461,0 +54689,60,0.20356,0 +54690,60,0.20241,0 +54691,60,0.20119,0 +54692,60,0.19956,0 +54693,60,0.19787,0 +54694,60,0.19611,0 +54695,60,0.19434,0 +54696,60,0.19252,0 +54697,60,0.19047,0 +54698,60,0.18842,0 +54699,60,0.18605,0 +54700,60,0.1837,0 +54701,60,0.18133,0 +54702,60,0.17885,0 +54703,60,0.17618,0 +54704,60,0.17342,0 +54705,60,0.17066,0 +54706,60,0.1679,0 +54707,60,0.16514,0 +54708,60,0.16227,0 +54709,60,0.15938,0 +54710,60,0.15638,0 +54711,60,0.15312,0 +54712,60,0.14982,0 +54713,60,0.14649,0 +54714,60,0.1429,0 +54715,60,0.13902,0 +54716,60,0.13516,0 +54717,60,0.13127,0 +54718,60,0.12716,0 +54719,60,0.12302,0 +54720,60,0.11874,0 +54721,60,0.11422,0 +54722,60,0.10975,0 +54723,60,0.10505,0 +54724,60,0.10019,0 +54725,60,0.095224,0 +54726,60,0.090008,0 +54727,60,0.084811,0 +54728,60,0.079218,0 +54729,60,0.073404,0 +54730,60,0.067333,0 +54731,60,0.060953,0 +54732,60,0.05451,0 +54733,60,0.047828,0 +54734,60,0.041032,0 +54735,60,0.033983,0 +54736,60,0.027038,0 +54737,60,0.020097,0 +54738,61,0.013356,0 +54739,61,0.0066927,0 +54740,61,2.28E-05,0 +54741,61,-0.0063344,0 +54742,61,-0.012692,0 +54743,61,-0.018923,0 +54744,61,-0.025127,0 +54745,61,-0.03133,0 +54746,61,-0.037532,0 +54747,61,-0.043629,0 +54748,61,-0.049656,0 +54749,61,-0.055436,0 +54750,61,-0.061086,0 +54751,61,-0.066489,0 +54752,61,-0.071843,0 +54753,61,-0.076783,0 +54754,61,-0.081567,0 +54755,61,-0.085995,0 +54756,61,-0.090135,0 +54757,61,-0.094057,0 +54758,61,-0.097721,0 +54759,61,-0.10131,0 +54760,61,-0.10463,0 +54761,61,-0.10774,0 +54762,61,-0.1105,0 +54763,61,-0.11302,0 +54764,61,-0.1154,0 +54765,61,-0.11754,0 +54766,61,-0.11962,0 +54767,61,-0.1213,0 +54768,61,-0.1228,0 +54769,61,-0.12398,0 +54770,61,-0.1251,0 +54771,61,-0.12595,0 +54772,61,-0.12671,0 +54773,61,-0.12727,0 +54774,61,-0.12765,0 +54775,61,-0.12793,0 +54776,61,-0.12765,0 +54777,61,-0.12727,0 +54778,61,-0.12672,0 +54779,61,-0.12606,0 +54780,61,-0.12512,0 +54781,61,-0.124,0 +54782,61,-0.12289,0 +54783,61,-0.12154,0 +54784,61,-0.1199,0 +54785,61,-0.1182,0 +54786,61,-0.11622,0 +54787,61,-0.11407,0 +54788,61,-0.11184,0 +54789,61,-0.10961,0 +54790,61,-0.10724,0 +54791,61,-0.10487,0 +54792,61,-0.10237,0 +54793,61,-0.099625,0 +54794,61,-0.096715,0 +54795,61,-0.093589,0 +54796,61,-0.090157,0 +54797,61,-0.086621,0 +54798,61,-0.082932,0 +54799,61,-0.078928,0 +54800,61,-0.074816,0 +54801,61,-0.070581,0 +54802,61,-0.066292,0 +54803,61,-0.062159,0 +54804,61,-0.057816,0 +54805,61,-0.053422,0 +54806,61,-0.048925,0 +54807,61,-0.044331,0 +54808,61,-0.03969,0 +54809,61,-0.034758,0 +54810,61,-0.029777,0 +54811,61,-0.024629,0 +54812,61,-0.019305,0 +54813,61,-0.013581,0 +54814,61,-0.0077643,0 +54815,61,-0.001706,0 +54816,61,0.0045128,0 +54817,61,0.01084,0 +54818,61,0.017349,0 +54819,61,0.024021,0 +54820,61,0.030791,0 +54821,61,0.037671,0 +54822,61,0.044585,0 +54823,61,0.05125,0 +54824,61,0.058159,0 +54825,61,0.065246,0 +54826,61,0.072337,0 +54827,61,0.079573,0 +54828,61,0.086858,0 +54829,61,0.09424,0 +54830,61,0.10163,0 +54831,61,0.10915,0 +54832,61,0.11666,0 +54833,61,0.12417,0 +54834,61,0.13175,0 +54835,61,0.13923,0 +54836,61,0.14639,0 +54837,61,0.1535,0 +54838,61,0.16039,0 +54839,61,0.1671,0 +54840,61,0.1734,0 +54841,61,0.17949,0 +54842,61,0.1854,0 +54843,61,0.19131,0 +54844,61,0.19697,0 +54845,61,0.2024,0 +54846,61,0.20762,0 +54847,61,0.21267,0 +54848,61,0.21761,0 +54849,61,0.2225,0 +54850,61,0.22716,0 +54851,61,0.23174,0 +54852,61,0.23637,0 +54853,61,0.24064,0 +54854,61,0.24493,0 +54855,61,0.24924,0 +54856,61,0.25349,0 +54857,61,0.25776,0 +54858,61,0.26202,0 +54859,61,0.26629,0 +54860,61,0.27027,0 +54861,61,0.27423,0 +54862,61,0.27807,0 +54863,61,0.28179,0 +54864,61,0.28526,0 +54865,61,0.28867,0 +54866,61,0.2921,0 +54867,61,0.29546,0 +54868,61,0.29855,0 +54869,61,0.30155,0 +54870,61,0.30437,0 +54871,61,0.30707,0 +54872,61,0.30979,0 +54873,61,0.3125,0 +54874,61,0.31492,0 +54875,61,0.31739,0 +54876,61,0.31989,0 +54877,61,0.32209,0 +54878,61,0.32393,0 +54879,61,0.32576,0 +54880,61,0.32743,0 +54881,61,0.32898,0 +54882,61,0.33036,0 +54883,61,0.33161,0 +54884,61,0.33269,0 +54885,61,0.33377,0 +54886,61,0.3349,0 +54887,61,0.33603,0 +54888,61,0.33707,0 +54889,61,0.33817,0 +54890,61,0.33926,0 +54891,61,0.34042,0 +54892,61,0.34147,0 +54893,61,0.34243,0 +54894,61,0.34345,0 +54895,61,0.34424,0 +54896,61,0.34494,0 +54897,61,0.3457,0 +54898,61,0.34641,0 +54899,61,0.3469,0 +54900,61,0.3474,0 +54901,61,0.34802,0 +54902,61,0.34852,0 +54903,61,0.34909,0 +54904,61,0.34963,0 +54905,61,0.35016,0 +54906,61,0.35088,0 +54907,61,0.35138,0 +54908,61,0.35177,0 +54909,61,0.35211,0 +54910,61,0.35236,0 +54911,61,0.35263,0 +54912,61,0.35284,0 +54913,61,0.35317,0 +54914,61,0.35342,0 +54915,58,0.3539,0 +54916,58,0.35421,0 +54917,59,0.35454,0 +54918,59,0.3551,0 +54919,59,0.35569,0 +54920,59,0.35645,0 +54921,59,0.35723,0 +54922,59,0.3581,0 +54923,59,0.35915,0 +54924,59,0.36035,0 +54925,59,0.36149,0 +54926,59,0.36281,0 +54927,59,0.36429,0 +54928,59,0.36607,0 +54929,59,0.36769,0 +54930,59,0.36959,0 +54931,59,0.37148,0 +54932,59,0.37361,0 +54933,59,0.37595,0 +54934,59,0.37831,0 +54935,59,0.38082,0 +54936,59,0.38352,0 +54937,59,0.38617,0 +54938,59,0.389,0 +54939,59,0.39178,0 +54940,59,0.39464,0 +54941,59,0.39746,0 +54942,59,0.40054,0 +54943,59,0.40362,0 +54944,59,0.40681,0 +54945,59,0.41012,0 +54946,59,0.41373,0 +54947,59,0.41752,0 +54948,59,0.42153,0 +54949,59,0.42572,0 +54950,59,0.43019,0 +54951,59,0.43491,0 +54952,59,0.43976,0 +54953,59,0.44457,0 +54954,59,0.44956,0 +54955,59,0.45474,0 +54956,59,0.46015,0 +54957,59,0.46559,0 +54958,59,0.47097,0 +54959,59,0.47665,0 +54960,59,0.48264,0 +54961,59,0.48847,0 +54962,59,0.49439,0 +54963,59,0.5004,0 +54964,59,0.5064,0 +54965,59,0.5124,0 +54966,59,0.51854,0 +54967,59,0.52456,0 +54968,59,0.53055,0 +54969,59,0.53675,0 +54970,59,0.54282,0 +54971,59,0.54896,0 +54972,59,0.55511,0 +54973,59,0.5612,0 +54974,59,0.56736,0 +54975,59,0.57348,0 +54976,59,0.57957,0 +54977,59,0.58575,0 +54978,59,0.59191,0 +54979,59,0.59797,0 +54980,59,0.60419,0 +54981,59,0.61052,0 +54982,59,0.61684,0 +54983,59,0.62299,0 +54984,59,0.62904,0 +54985,59,0.63483,0 +54986,59,0.64042,0 +54987,59,0.64588,0 +54988,59,0.65129,0 +54989,59,0.65644,0 +54990,59,0.66142,0 +54991,59,0.66634,0 +54992,59,0.67095,0 +54993,59,0.67533,0 +54994,59,0.67959,0 +54995,59,0.68368,0 +54996,59,0.68751,0 +54997,59,0.691,0 +54998,59,0.69448,0 +54999,59,0.69759,0 +55000,59,0.70072,0 +55001,59,0.70364,0 +55002,59,0.70634,0 +55003,59,0.70891,0 +55004,59,0.71155,0 +55005,58,0.71394,0 +55006,58,0.71622,0 +55007,58,0.71818,0 +55008,58,0.72001,0 +55009,58,0.72145,0 +55010,58,0.72284,0 +55011,58,0.72393,0 +55012,58,0.72469,0 +55013,58,0.72515,0 +55014,58,0.72523,0 +55015,58,0.72492,0 +55016,58,0.72435,0 +55017,58,0.7234,0 +55018,58,0.72218,0 +55019,58,0.72055,0 +55020,58,0.71863,0 +55021,58,0.7164,0 +55022,58,0.71387,0 +55023,58,0.71097,0 +55024,58,0.70779,0 +55025,58,0.70416,0 +55026,58,0.70037,0 +55027,58,0.69619,0 +55028,58,0.6915,0 +55029,58,0.68631,0 +55030,58,0.68055,0 +55031,58,0.67433,0 +55032,58,0.66756,0 +55033,58,0.66046,0 +55034,58,0.65312,0 +55035,58,0.64531,0 +55036,58,0.63694,0 +55037,61,0.62832,0 +55038,61,0.61932,0 +55039,61,0.61004,0 +55040,61,0.60018,0 +55041,61,0.5899,0 +55042,61,0.57955,0 +55043,61,0.56875,0 +55044,61,0.5576,0 +55045,61,0.54617,0 +55046,61,0.53451,0 +55047,61,0.52261,0 +55048,61,0.51034,0 +55049,61,0.49783,0 +55050,61,0.48489,0 +55051,61,0.47173,0 +55052,61,0.4581,0 +55053,61,0.44429,0 +55054,61,0.42998,0 +55055,61,0.41544,0 +55056,61,0.40055,0 +55057,61,0.38531,0 +55058,61,0.36983,0 +55059,61,0.35409,0 +55060,61,0.33811,0 +55061,61,0.32169,0 +55062,61,0.30493,0 +55063,61,0.28789,0 +55064,61,0.27073,0 +55065,61,0.25347,0 +55066,61,0.23618,0 +55067,61,0.2187,0 +55068,61,0.20116,0 +55069,61,0.18335,0 +55070,61,0.16552,0 +55071,61,0.14756,0 +55072,61,0.12953,0 +55073,61,0.11152,0 +55074,61,0.093348,0 +55075,61,0.075131,0 +55076,61,0.05656,0 +55077,61,0.03794,0 +55078,61,0.019171,0 +55079,61,0.00020854,0 +55080,61,-0.018773,0 +55081,61,-0.038309,0 +55082,61,-0.057894,0 +55083,61,-0.077589,0 +55084,61,-0.097332,0 +55085,61,-0.11747,0 +55086,61,-0.1377,0 +55087,61,-0.15809,0 +55088,61,-0.17845,0 +55089,61,-0.19907,0 +55090,61,-0.2197,0 +55091,61,-0.24054,0 +55092,61,-0.26147,0 +55093,61,-0.28239,0 +55094,61,-0.30344,0 +55095,61,-0.32455,0 +55096,61,-0.34564,0 +55097,61,-0.36686,0 +55098,61,-0.38815,0 +55099,61,-0.40943,0 +55100,61,-0.4308,0 +55101,61,-0.45218,0 +55102,61,-0.47367,0 +55103,61,-0.49521,0 +55104,61,-0.5168,0 +55105,61,-0.53836,0 +55106,61,-0.56001,0 +55107,61,-0.5815,0 +55108,61,-0.60316,0 +55109,61,-0.62485,0 +55110,61,-0.64627,0 +55111,61,-0.66758,0 +55112,61,-0.68864,0 +55113,61,-0.70952,0 +55114,61,-0.73012,0 +55115,61,-0.75061,0 +55116,61,-0.7709,0 +55117,61,-0.79108,0 +55118,61,-0.81103,0 +55119,61,-0.83079,0 +55120,61,-0.85041,0 +55121,61,-0.86976,0 +55122,61,-0.88884,0 +55123,61,-0.90752,0 +55124,61,-0.92603,0 +55125,61,-0.94439,0 +55126,61,-0.96231,0 +55127,61,-0.97996,0 +55128,61,-0.99722,0 +55129,61,-1.0143,0 +55130,61,-1.0313,0 +55131,61,-1.0478,0 +55132,61,-1.064,0 +55133,61,-1.0799,0 +55134,61,-1.0955,0 +55135,61,-1.1108,0 +55136,61,-1.1259,0 +55137,61,-1.1405,0 +55138,61,-1.1551,0 +55139,61,-1.169,0 +55140,61,-1.1823,0 +55141,61,-1.1956,0 +55142,61,-1.2087,0 +55143,61,-1.2214,0 +55144,61,-1.2338,0 +55145,61,-1.2458,0 +55146,61,-1.2575,0 +55147,61,-1.2689,0 +55148,61,-1.2802,0 +55149,61,-1.2913,0 +55150,61,-1.3019,0 +55151,61,-1.3124,0 +55152,61,-1.3226,0 +55153,61,-1.3324,0 +55154,61,-1.342,0 +55155,61,-1.3513,0 +55156,61,-1.3605,0 +55157,61,-1.3695,0 +55158,61,-1.3783,0 +55159,61,-1.3869,0 +55160,61,-1.395,0 +55161,61,-1.403,0 +55162,61,-1.4106,0 +55163,61,-1.4178,0 +55164,61,-1.4247,0 +55165,61,-1.4311,0 +55166,61,-1.4372,0 +55167,61,-1.443,0 +55168,61,-1.4485,0 +55169,61,-1.4538,0 +55170,61,-1.4588,0 +55171,61,-1.4634,0 +55172,61,-1.4678,0 +55173,61,-1.4721,0 +55174,62,-1.4761,0 +55175,62,-1.4795,0 +55176,62,-1.4826,0 +55177,62,-1.4855,0 +55178,62,-1.488,0 +55179,62,-1.4902,0 +55180,62,-1.4922,0 +55181,62,-1.4939,0 +55182,62,-1.4951,0 +55183,62,-1.496,0 +55184,62,-1.4967,0 +55185,62,-1.497,0 +55186,62,-1.4971,0 +55187,62,-1.4967,0 +55188,62,-1.496,0 +55189,62,-1.4948,0 +55190,62,-1.4934,0 +55191,62,-1.4916,0 +55192,62,-1.4894,0 +55193,62,-1.4868,0 +55194,62,-1.484,0 +55195,62,-1.481,0 +55196,62,-1.4778,0 +55197,62,-1.4744,0 +55198,62,-1.4707,0 +55199,62,-1.467,0 +55200,62,-1.463,0 +55201,62,-1.4588,0 +55202,62,-1.4542,0 +55203,63,-1.4495,0 +55204,63,-1.4446,0 +55205,63,-1.4395,0 +55206,63,-1.4344,0 +55207,63,-1.4292,0 +55208,63,-1.424,0 +55209,63,-1.4188,0 +55210,63,-1.4133,0 +55211,63,-1.4079,0 +55212,63,-1.4024,0 +55213,63,-1.397,0 +55214,63,-1.3915,0 +55215,63,-1.3861,0 +55216,63,-1.3802,0 +55217,63,-1.3745,0 +55218,63,-1.3688,0 +55219,63,-1.3631,0 +55220,63,-1.3573,0 +55221,63,-1.3513,0 +55222,63,-1.3454,0 +55223,63,-1.3394,0 +55224,63,-1.3331,0 +55225,63,-1.327,0 +55226,63,-1.3212,0 +55227,63,-1.3151,0 +55228,63,-1.3089,0 +55229,63,-1.3029,0 +55230,63,-1.2968,0 +55231,63,-1.2907,0 +55232,63,-1.2845,0 +55233,63,-1.2783,0 +55234,63,-1.2719,0 +55235,63,-1.2656,0 +55236,63,-1.2592,0 +55237,63,-1.2526,0 +55238,63,-1.2461,0 +55239,63,-1.2396,0 +55240,63,-1.2328,0 +55241,63,-1.226,0 +55242,63,-1.2192,0 +55243,63,-1.212,0 +55244,63,-1.2048,0 +55245,63,-1.1973,0 +55246,63,-1.1898,0 +55247,63,-1.1821,0 +55248,63,-1.1743,0 +55249,63,-1.1665,0 +55250,63,-1.1587,0 +55251,63,-1.1508,0 +55252,63,-1.1429,0 +55253,63,-1.1351,0 +55254,62,-1.1272,0 +55255,62,-1.1192,0 +55256,62,-1.1112,0 +55257,62,-1.1031,0 +55258,62,-1.0949,0 +55259,62,-1.0863,0 +55260,62,-1.0774,0 +55261,62,-1.0686,0 +55262,62,-1.0598,0 +55263,62,-1.0509,0 +55264,62,-1.042,0 +55265,62,-1.0331,0 +55266,62,-1.024,0 +55267,62,-1.0146,0 +55268,62,-1.0053,0 +55269,62,-0.99611,0 +55270,62,-0.98686,0 +55271,62,-0.97765,0 +55272,62,-0.96846,0 +55273,62,-0.95926,0 +55274,62,-0.95021,0 +55275,62,-0.94133,0 +55276,62,-0.93261,0 +55277,62,-0.92395,0 +55278,62,-0.91552,0 +55279,62,-0.90717,0 +55280,62,-0.89907,0 +55281,62,-0.89125,0 +55282,62,-0.88349,0 +55283,62,-0.87576,0 +55284,62,-0.86824,0 +55285,62,-0.86081,0 +55286,62,-0.85358,0 +55287,62,-0.84635,0 +55288,62,-0.83944,0 +55289,62,-0.83266,0 +55290,62,-0.82609,0 +55291,62,-0.81983,0 +55292,62,-0.81384,0 +55293,62,-0.80783,0 +55294,62,-0.80184,0 +55295,62,-0.79598,0 +55296,62,-0.79015,0 +55297,62,-0.78423,0 +55298,62,-0.77839,0 +55299,62,-0.77253,0 +55300,62,-0.76681,0 +55301,62,-0.76106,0 +55302,62,-0.75534,0 +55303,62,-0.74945,0 +55304,62,-0.74386,0 +55305,62,-0.73823,0 +55306,62,-0.73241,0 +55307,62,-0.72642,0 +55308,62,-0.72067,0 +55309,62,-0.715,0 +55310,62,-0.70907,0 +55311,62,-0.70306,0 +55312,62,-0.69729,0 +55313,62,-0.69153,0 +55314,62,-0.68557,0 +55315,62,-0.67986,0 +55316,62,-0.67404,0 +55317,62,-0.66802,0 +55318,62,-0.662,0 +55319,62,-0.65598,0 +55320,62,-0.65,0 +55321,62,-0.64405,0 +55322,62,-0.63828,0 +55323,62,-0.63253,0 +55324,62,-0.62684,0 +55325,62,-0.62138,0 +55326,62,-0.61582,0 +55327,62,-0.61047,0 +55328,62,-0.6052,0 +55329,62,-0.60006,0 +55330,62,-0.5949,0 +55331,62,-0.58989,0 +55332,62,-0.5847,0 +55333,62,-0.57971,0 +55334,62,-0.57467,0 +55335,62,-0.56982,0 +55336,62,-0.56503,0 +55337,62,-0.56029,0 +55338,62,-0.55567,0 +55339,62,-0.5512,0 +55340,62,-0.54678,0 +55341,62,-0.54243,0 +55342,62,-0.53816,0 +55343,62,-0.53404,0 +55344,62,-0.52995,0 +55345,62,-0.52605,0 +55346,62,-0.52246,0 +55347,62,-0.51932,0 +55348,62,-0.5166,0 +55349,62,-0.51405,0 +55350,62,-0.51184,0 +55351,62,-0.50983,0 +55352,62,-0.50795,0 +55353,62,-0.50637,0 +55354,62,-0.5052,0 +55355,62,-0.50436,0 +55356,62,-0.50359,0 +55357,62,-0.50313,0 +55358,62,-0.50284,0 +55359,62,-0.50255,0 +55360,62,-0.50248,0 +55361,62,-0.50231,0 +55362,62,-0.50215,0 +55363,62,-0.50193,0 +55364,62,-0.50164,0 +55365,62,-0.50136,0 +55366,62,-0.50106,0 +55367,62,-0.50065,0 +55368,62,-0.50018,0 +55369,62,-0.49954,0 +55370,62,-0.49886,0 +55371,62,-0.49808,0 +55372,62,-0.49726,0 +55373,62,-0.49634,0 +55374,62,-0.49534,0 +55375,62,-0.49419,0 +55376,62,-0.49284,0 +55377,62,-0.49158,0 +55378,62,-0.49,0 +55379,62,-0.48812,0 +55380,62,-0.48604,0 +55381,62,-0.48399,0 +55382,62,-0.48172,0 +55383,62,-0.47929,0 +55384,62,-0.47681,0 +55385,62,-0.4744,0 +55386,62,-0.47207,0 +55387,62,-0.46957,0 +55388,62,-0.46729,0 +55389,62,-0.46495,0 +55390,62,-0.46261,0 +55391,62,-0.46032,0 +55392,62,-0.45804,0 +55393,62,-0.45591,0 +55394,62,-0.45392,0 +55395,62,-0.4519,0 +55396,62,-0.44982,0 +55397,62,-0.44789,0 +55398,62,-0.44609,0 +55399,62,-0.44419,0 +55400,62,-0.44232,0 +55401,62,-0.44061,0 +55402,62,-0.43876,0 +55403,62,-0.43695,0 +55404,62,-0.4353,0 +55405,62,-0.43378,0 +55406,62,-0.43231,0 +55407,62,-0.43089,0 +55408,62,-0.42938,0 +55409,62,-0.42785,0 +55410,62,-0.42634,0 +55411,62,-0.42473,0 +55412,62,-0.42293,0 +55413,62,-0.42122,0 +55414,62,-0.4193,0 +55415,62,-0.41745,0 +55416,62,-0.41549,0 +55417,62,-0.41363,0 +55418,62,-0.41182,0 +55419,62,-0.41027,0 +55420,62,-0.40871,0 +55421,62,-0.40711,0 +55422,62,-0.40542,0 +55423,62,-0.40372,0 +55424,62,-0.40202,0 +55425,62,-0.40019,0 +55426,62,-0.39829,0 +55427,62,-0.39633,0 +55428,62,-0.39426,0 +55429,62,-0.39202,0 +55430,62,-0.3897,0 +55431,62,-0.3872,0 +55432,62,-0.38451,0 +55433,62,-0.38162,0 +55434,62,-0.37827,0 +55435,62,-0.37466,0 +55436,62,-0.37086,0 +55437,62,-0.36667,0 +55438,62,-0.36225,0 +55439,62,-0.35751,0 +55440,62,-0.3524,0 +55441,62,-0.34686,0 +55442,62,-0.34109,0 +55443,62,-0.33507,0 +55444,62,-0.32867,0 +55445,62,-0.32211,0 +55446,62,-0.31526,0 +55447,62,-0.3083,0 +55448,62,-0.30126,0 +55449,62,-0.29423,0 +55450,62,-0.28732,0 +55451,61,-0.28026,0 +55452,61,-0.27306,0 +55453,61,-0.26596,0 +55454,61,-0.25873,0 +55455,61,-0.25137,0 +55456,61,-0.244,0 +55457,61,-0.23662,0 +55458,61,-0.2292,0 +55459,61,-0.22153,0 +55460,61,-0.21386,0 +55461,61,-0.20617,0 +55462,61,-0.19828,0 +55463,61,-0.19021,0 +55464,61,-0.18223,0 +55465,61,-0.17424,0 +55466,61,-0.16625,0 +55467,61,-0.15823,0 +55468,61,-0.15024,0 +55469,61,-0.14236,0 +55470,61,-0.13445,0 +55471,61,-0.12644,0 +55472,61,-0.11828,0 +55473,61,-0.11012,0 +55474,61,-0.10162,0 +55475,61,-0.093124,0 +55476,61,-0.084613,0 +55477,61,-0.075964,0 +55478,61,-0.067168,0 +55479,61,-0.058322,0 +55480,61,-0.049404,0 +55481,61,-0.040567,0 +55482,61,-0.031609,0 +55483,61,-0.022604,0 +55484,61,-0.01351,0 +55485,61,-0.0043951,0 +55486,61,0.0048574,0 +55487,61,0.014117,0 +55488,61,0.023376,0 +55489,61,0.032743,0 +55490,61,0.042174,0 +55491,61,0.051756,0 +55492,61,0.061463,0 +55493,61,0.071175,0 +55494,61,0.08089,0 +55495,61,0.090731,0 +55496,61,0.10055,0 +55497,61,0.11013,0 +55498,61,0.11974,0 +55499,61,0.12925,0 +55500,61,0.13882,0 +55501,61,0.14818,0 +55502,61,0.15761,0 +55503,61,0.16711,0 +55504,61,0.1765,0 +55505,61,0.18586,0 +55506,61,0.19498,0 +55507,61,0.20393,0 +55508,61,0.21268,0 +55509,61,0.22134,0 +55510,61,0.22975,0 +55511,61,0.23817,0 +55512,61,0.24668,0 +55513,61,0.25513,0 +55514,61,0.26344,0 +55515,61,0.27162,0 +55516,61,0.27965,0 +55517,61,0.28769,0 +55518,61,0.29555,0 +55519,61,0.30331,0 +55520,61,0.3111,0 +55521,61,0.31865,0 +55522,61,0.32611,0 +55523,61,0.33356,0 +55524,61,0.34092,0 +55525,61,0.34806,0 +55526,61,0.35498,0 +55527,61,0.36189,0 +55528,61,0.36872,0 +55529,61,0.37542,0 +55530,61,0.38205,0 +55531,61,0.38834,0 +55532,61,0.39467,0 +55533,61,0.40102,0 +55534,61,0.40743,0 +55535,61,0.4139,0 +55536,61,0.42016,0 +55537,61,0.4265,0 +55538,61,0.43268,0 +55539,61,0.43878,0 +55540,61,0.44477,0 +55541,61,0.45067,0 +55542,61,0.45662,0 +55543,61,0.46218,0 +55544,61,0.4676,0 +55545,61,0.47294,0 +55546,61,0.47789,0 +55547,61,0.48259,0 +55548,61,0.48725,0 +55549,61,0.49171,0 +55550,61,0.49592,0 +55551,61,0.50016,0 +55552,61,0.50415,0 +55553,61,0.50819,0 +55554,61,0.51216,0 +55555,61,0.51611,0 +55556,61,0.51994,0 +55557,61,0.52364,0 +55558,61,0.52724,0 +55559,61,0.5308,0 +55560,59,0.53444,0 +55561,59,0.53794,0 +55562,59,0.54153,0 +55563,59,0.54511,0 +55564,59,0.5488,0 +55565,59,0.55255,0 +55566,59,0.55632,0 +55567,59,0.56006,0 +55568,59,0.56375,0 +55569,59,0.5675,0 +55570,59,0.57127,0 +55571,59,0.57499,0 +55572,59,0.57878,0 +55573,59,0.58255,0 +55574,59,0.58643,0 +55575,59,0.59015,0 +55576,59,0.59394,0 +55577,59,0.59764,0 +55578,59,0.60138,0 +55579,59,0.60517,0 +55580,59,0.60912,0 +55581,59,0.61328,0 +55582,59,0.61762,0 +55583,59,0.62192,0 +55584,59,0.62644,0 +55585,59,0.6311,0 +55586,59,0.63571,0 +55587,59,0.64058,0 +55588,59,0.64582,0 +55589,59,0.65116,0 +55590,59,0.65677,0 +55591,59,0.66266,0 +55592,59,0.66877,0 +55593,59,0.6752,0 +55594,59,0.68161,0 +55595,59,0.68777,0 +55596,59,0.69397,0 +55597,59,0.70011,0 +55598,59,0.70637,0 +55599,59,0.7126,0 +55600,59,0.71874,0 +55601,59,0.72471,0 +55602,59,0.73066,0 +55603,59,0.73655,0 +55604,59,0.74239,0 +55605,59,0.748,0 +55606,59,0.75343,0 +55607,59,0.75886,0 +55608,59,0.76421,0 +55609,59,0.76954,0 +55610,59,0.77481,0 +55611,59,0.78,0 +55612,59,0.78518,0 +55613,59,0.79019,0 +55614,59,0.79537,0 +55615,59,0.80043,0 +55616,59,0.80541,0 +55617,59,0.81033,0 +55618,59,0.81507,0 +55619,59,0.81979,0 +55620,59,0.82449,0 +55621,59,0.82923,0 +55622,59,0.83383,0 +55623,59,0.8384,0 +55624,59,0.84293,0 +55625,59,0.8472,0 +55626,59,0.85165,0 +55627,59,0.85598,0 +55628,59,0.86025,0 +55629,59,0.86471,0 +55630,59,0.86906,0 +55631,59,0.87337,0 +55632,59,0.87752,0 +55633,59,0.88158,0 +55634,59,0.8854,0 +55635,59,0.88924,0 +55636,59,0.89281,0 +55637,59,0.89632,0 +55638,59,0.89954,0 +55639,59,0.9026,0 +55640,59,0.90568,0 +55641,59,0.90855,0 +55642,59,0.91114,0 +55643,59,0.91344,0 +55644,59,0.91559,0 +55645,59,0.91744,0 +55646,59,0.91903,0 +55647,59,0.92029,0 +55648,59,0.92125,0 +55649,59,0.92189,0 +55650,59,0.9223,0 +55651,59,0.92218,0 +55652,59,0.92164,0 +55653,59,0.92088,0 +55654,59,0.91988,0 +55655,59,0.91847,0 +55656,59,0.91662,0 +55657,59,0.91435,0 +55658,59,0.91187,0 +55659,59,0.90905,0 +55660,59,0.90589,0 +55661,59,0.90235,0 +55662,59,0.89846,0 +55663,59,0.89391,0 +55664,59,0.88892,0 +55665,59,0.88349,0 +55666,59,0.87774,0 +55667,59,0.87154,0 +55668,59,0.86487,0 +55669,59,0.85788,0 +55670,59,0.85052,0 +55671,59,0.84237,0 +55672,59,0.83392,0 +55673,59,0.82502,0 +55674,59,0.81564,0 +55675,59,0.80586,0 +55676,59,0.79557,0 +55677,59,0.78507,0 +55678,59,0.77449,0 +55679,59,0.76346,0 +55680,59,0.75237,0 +55681,59,0.74088,0 +55682,59,0.72922,0 +55683,59,0.71728,0 +55684,59,0.70525,0 +55685,59,0.69289,0 +55686,59,0.68018,0 +55687,59,0.66749,0 +55688,59,0.65454,0 +55689,59,0.64134,0 +55690,59,0.62779,0 +55691,59,0.61395,0 +55692,59,0.59995,0 +55693,59,0.58555,0 +55694,59,0.57093,0 +55695,59,0.5559,0 +55696,59,0.54084,0 +55697,59,0.52542,0 +55698,59,0.50981,0 +55699,59,0.49401,0 +55700,59,0.47815,0 +55701,59,0.46211,0 +55702,59,0.44588,0 +55703,59,0.4294,0 +55704,59,0.41272,0 +55705,59,0.39574,0 +55706,59,0.37865,0 +55707,59,0.36155,0 +55708,59,0.34442,0 +55709,59,0.32714,0 +55710,59,0.30987,0 +55711,59,0.29259,0 +55712,59,0.27499,0 +55713,59,0.25735,0 +55714,59,0.23968,0 +55715,59,0.22207,0 +55716,59,0.20462,0 +55717,59,0.18725,0 +55718,59,0.16982,0 +55719,59,0.15237,0 +55720,59,0.13489,0 +55721,59,0.11749,0 +55722,59,0.10003,0 +55723,59,0.082266,0 +55724,59,0.064299,0 +55725,59,0.046364,0 +55726,59,0.02841,0 +55727,59,0.010207,0 +55728,59,-0.0081242,0 +55729,59,-0.026481,0 +55730,59,-0.044915,0 +55731,64,-0.063397,0 +55732,64,-0.081864,0 +55733,64,-0.10049,0 +55734,64,-0.11887,0 +55735,64,-0.13705,0 +55736,64,-0.15536,0 +55737,64,-0.17375,0 +55738,64,-0.1921,0 +55739,64,-0.21031,0 +55740,64,-0.22849,0 +55741,64,-0.24671,0 +55742,64,-0.26505,0 +55743,64,-0.28318,0 +55744,64,-0.3013,0 +55745,64,-0.31938,0 +55746,64,-0.33723,0 +55747,64,-0.35502,0 +55748,64,-0.37267,0 +55749,64,-0.39023,0 +55750,64,-0.40777,0 +55751,64,-0.42516,0 +55752,64,-0.44247,0 +55753,64,-0.45995,0 +55754,64,-0.47717,0 +55755,64,-0.49438,0 +55756,64,-0.51163,0 +55757,64,-0.52895,0 +55758,64,-0.54625,0 +55759,64,-0.56345,0 +55760,64,-0.58062,0 +55761,64,-0.59781,0 +55762,64,-0.61492,0 +55763,64,-0.63216,0 +55764,64,-0.64932,0 +55765,64,-0.66642,0 +55766,64,-0.68365,0 +55767,64,-0.70081,0 +55768,64,-0.71772,0 +55769,64,-0.73449,0 +55770,64,-0.75123,0 +55771,64,-0.76798,0 +55772,64,-0.78463,0 +55773,64,-0.80111,0 +55774,64,-0.81728,0 +55775,64,-0.83345,0 +55776,64,-0.84969,0 +55777,64,-0.86565,0 +55778,64,-0.88148,0 +55779,64,-0.89733,0 +55780,64,-0.91329,0 +55781,64,-0.92931,0 +55782,64,-0.94519,0 +55783,64,-0.96115,0 +55784,64,-0.97719,0 +55785,64,-0.99323,0 +55786,64,-1.0092,0 +55787,64,-1.0253,0 +55788,64,-1.0412,0 +55789,64,-1.0569,0 +55790,64,-1.0727,0 +55791,64,-1.0886,0 +55792,64,-1.1046,0 +55793,64,-1.1207,0 +55794,64,-1.1369,0 +55795,64,-1.1532,0 +55796,64,-1.1695,0 +55797,64,-1.1858,0 +55798,64,-1.2022,0 +55799,64,-1.2185,0 +55800,64,-1.235,0 +55801,64,-1.2516,0 +55802,64,-1.2682,0 +55803,64,-1.2848,0 +55804,64,-1.3016,0 +55805,64,-1.3186,0 +55806,64,-1.3353,0 +55807,64,-1.3519,0 +55808,64,-1.3683,0 +55809,64,-1.3846,0 +55810,64,-1.4007,0 +55811,64,-1.4167,0 +55812,64,-1.4324,0 +55813,64,-1.448,0 +55814,64,-1.4635,0 +55815,64,-1.4788,0 +55816,64,-1.494,0 +55817,64,-1.509,0 +55818,64,-1.524,0 +55819,64,-1.5389,0 +55820,64,-1.5537,0 +55821,64,-1.5685,0 +55822,64,-1.5831,0 +55823,64,-1.5978,0 +55824,64,-1.6125,0 +55825,64,-1.627,0 +55826,64,-1.6413,0 +55827,64,-1.6558,0 +55828,64,-1.6701,0 +55829,64,-1.6845,0 +55830,64,-1.699,0 +55831,64,-1.7134,0 +55832,64,-1.7279,0 +55833,64,-1.7424,0 +55834,64,-1.7568,0 +55835,64,-1.771,0 +55836,64,-1.7853,0 +55837,64,-1.7993,0 +55838,64,-1.8129,0 +55839,64,-1.8267,0 +55840,64,-1.8401,0 +55841,64,-1.8531,0 +55842,64,-1.8661,0 +55843,64,-1.8789,0 +55844,64,-1.8915,0 +55845,64,-1.9042,0 +55846,64,-1.9168,0 +55847,64,-1.9295,0 +55848,64,-1.942,0 +55849,64,-1.9546,0 +55850,64,-1.9668,0 +55851,64,-1.9792,0 +55852,64,-1.9916,0 +55853,64,-2.004,0 +55854,64,-2.0165,0 +55855,64,-2.0291,0 +55856,64,-2.0416,0 +55857,64,-2.054,0 +55858,64,-2.0665,0 +55859,64,-2.0792,0 +55860,64,-2.0917,0 +55861,64,-2.1041,0 +55862,64,-2.1165,0 +55863,64,-2.129,0 +55864,64,-2.1416,0 +55865,64,-2.1541,0 +55866,64,-2.1664,0 +55867,64,-2.1789,0 +55868,64,-2.1913,0 +55869,64,-2.2036,0 +55870,64,-2.2161,0 +55871,64,-2.2286,0 +55872,64,-2.2409,0 +55873,64,-2.2536,0 +55874,64,-2.2663,0 +55875,64,-2.279,0 +55876,64,-2.2917,0 +55877,64,-2.3045,0 +55878,64,-2.3171,0 +55879,64,-2.3298,0 +55880,64,-2.3426,0 +55881,64,-2.3552,0 +55882,64,-2.3681,0 +55883,64,-2.381,0 +55884,64,-2.3939,0 +55885,64,-2.4071,0 +55886,64,-2.4203,0 +55887,64,-2.4333,0 +55888,64,-2.4463,0 +55889,64,-2.4594,0 +55890,64,-2.4722,0 +55891,64,-2.4853,0 +55892,64,-2.4986,0 +55893,64,-2.5117,0 +55894,64,-2.525,0 +55895,64,-2.5384,0 +55896,64,-2.5518,0 +55897,64,-2.5651,0 +55898,64,-2.5786,0 +55899,64,-2.5923,0 +55900,64,-2.6059,0 +55901,64,-2.6198,0 +55902,64,-2.6337,0 +55903,64,-2.6476,0 +55904,64,-2.6616,0 +55905,64,-2.6757,0 +55906,64,-2.6897,0 +55907,64,-2.7034,0 +55908,64,-2.7171,0 +55909,64,-2.7306,0 +55910,64,-2.744,0 +55911,64,-2.7573,0 +55912,64,-2.7704,0 +55913,64,-2.7833,0 +55914,64,-2.7961,0 +55915,64,-2.8088,0 +55916,64,-2.821,0 +55917,64,-2.8329,0 +55918,64,-2.8446,0 +55919,64,-2.8563,0 +55920,64,-2.8678,0 +55921,64,-2.8792,0 +55922,64,-2.8907,0 +55923,64,-2.9022,0 +55924,64,-2.9137,0 +55925,64,-2.925,0 +55926,64,-2.9362,0 +55927,64,-2.9476,0 +55928,64,-2.9588,0 +55929,64,-2.9701,0 +55930,64,-2.9814,0 +55931,64,-2.9925,0 +55932,64,-3.0036,0 +55933,64,-3.0142,0 +55934,64,-3.0246,0 +55935,64,-3.0349,0 +55936,64,-3.045,0 +55937,64,-3.055,0 +55938,64,-3.0645,0 +55939,64,-3.0737,0 +55940,64,-3.0828,0 +55941,64,-3.0915,0 +55942,64,-3.0999,0 +55943,64,-3.108,0 +55944,64,-3.1162,0 +55945,64,-3.124,0 +55946,64,-3.1314,0 +55947,64,-3.1388,0 +55948,64,-3.1459,0 +55949,64,-3.1528,0 +55950,64,-3.1595,0 +55951,64,-3.1658,0 +55952,64,-3.1715,0 +55953,64,-3.1772,0 +55954,64,-3.1825,0 +55955,64,-3.1876,0 +55956,64,-3.1924,0 +55957,64,-3.197,0 +55958,64,-3.201,0 +55959,64,-3.2047,0 +55960,64,-3.2082,0 +55961,64,-3.2113,0 +55962,64,-3.2141,0 +55963,64,-3.2166,0 +55964,64,-3.2186,0 +55965,64,-3.2204,0 +55966,64,-3.222,0 +55967,64,-3.223,0 +55968,64,-3.2236,0 +55969,64,-3.2238,0 +55970,64,-3.2236,0 +55971,64,-3.2229,0 +55972,64,-3.2219,0 +55973,64,-3.2203,0 +55974,64,-3.2184,0 +55975,64,-3.2164,0 +55976,64,-3.2139,0 +55977,64,-3.211,0 +55978,64,-3.2079,0 +55979,64,-3.2043,0 +55980,64,-3.2002,0 +55981,64,-3.1957,0 +55982,64,-3.191,0 +55983,64,-3.1859,0 +55984,64,-3.1807,0 +55985,64,-3.1752,0 +55986,64,-3.1694,0 +55987,64,-3.1631,0 +55988,64,-3.1566,0 +55989,64,-3.1496,0 +55990,64,-3.1421,0 +55991,64,-3.1343,0 +55992,64,-3.126,0 +55993,64,-3.1174,0 +55994,64,-3.1085,0 +55995,64,-3.0995,0 +55996,64,-3.0903,0 +55997,64,-3.081,0 +55998,64,-3.0713,0 +55999,64,-3.0613,0 +56000,64,-3.0514,0 +56001,64,-3.0412,0 +56002,64,-3.0308,0 +56003,64,-3.0201,0 +56004,64,-3.0095,0 +56005,64,-2.9985,0 +56006,64,-2.9876,0 +56007,64,-2.9765,0 +56008,64,-2.965,0 +56009,64,-2.9533,0 +56010,64,-2.9414,0 +56011,64,-2.929,0 +56012,64,-2.9164,0 +56013,64,-2.9037,0 +56014,64,-2.8907,0 +56015,64,-2.8776,0 +56016,64,-2.8641,0 +56017,64,-2.8505,0 +56018,64,-2.8365,0 +56019,64,-2.8223,0 +56020,64,-2.8077,0 +56021,64,-2.7928,0 +56022,64,-2.778,0 +56023,64,-2.763,0 +56024,64,-2.7478,0 +56025,64,-2.7324,0 +56026,64,-2.7169,0 +56027,64,-2.7012,0 +56028,64,-2.6855,0 +56029,64,-2.6697,0 +56030,64,-2.6539,0 +56031,64,-2.6381,0 +56032,64,-2.6222,0 +56033,64,-2.6062,0 +56034,64,-2.5899,0 +56035,64,-2.5736,0 +56036,64,-2.5571,0 +56037,64,-2.5406,0 +56038,64,-2.524,0 +56039,64,-2.5072,0 +56040,64,-2.4904,0 +56041,64,-2.4738,0 +56042,64,-2.4568,0 +56043,64,-2.4398,0 +56044,64,-2.4228,0 +56045,64,-2.4055,0 +56046,64,-2.3881,0 +56047,64,-2.3707,0 +56048,64,-2.3533,0 +56049,64,-2.3358,0 +56050,64,-2.3183,0 +56051,64,-2.3006,0 +56052,64,-2.2828,0 +56053,64,-2.265,0 +56054,64,-2.2471,0 +56055,64,-2.229,0 +56056,64,-2.2109,0 +56057,64,-2.1929,0 +56058,64,-2.1749,0 +56059,64,-2.157,0 +56060,64,-2.139,0 +56061,64,-2.1209,0 +56062,64,-2.1029,0 +56063,64,-2.0848,0 +56064,64,-2.0666,0 +56065,64,-2.0484,0 +56066,64,-2.0303,0 +56067,64,-2.0121,0 +56068,64,-1.9939,0 +56069,64,-1.9757,0 +56070,64,-1.9576,0 +56071,64,-1.9393,0 +56072,64,-1.921,0 +56073,64,-1.9026,0 +56074,64,-1.8839,0 +56075,64,-1.8654,0 +56076,64,-1.8474,0 +56077,64,-1.8295,0 +56078,64,-1.8115,0 +56079,64,-1.7936,0 +56080,64,-1.7757,0 +56081,64,-1.758,0 +56082,64,-1.7401,0 +56083,64,-1.722,0 +56084,64,-1.7039,0 +56085,64,-1.6858,0 +56086,64,-1.6674,0 +56087,64,-1.6492,0 +56088,64,-1.6307,0 +56089,64,-1.6121,0 +56090,64,-1.5934,0 +56091,64,-1.5747,0 +56092,64,-1.556,0 +56093,64,-1.537,0 +56094,64,-1.5181,0 +56095,64,-1.4991,0 +56096,64,-1.4799,0 +56097,64,-1.4609,0 +56098,64,-1.4417,0 +56099,64,-1.4226,0 +56100,64,-1.4034,0 +56101,64,-1.3842,0 +56102,64,-1.3647,0 +56103,64,-1.3453,0 +56104,64,-1.3259,0 +56105,64,-1.3065,0 +56106,64,-1.2872,0 +56107,64,-1.2679,0 +56108,64,-1.2484,0 +56109,64,-1.2291,0 +56110,64,-1.2099,0 +56111,64,-1.1904,0 +56112,64,-1.1711,0 +56113,64,-1.1517,0 +56114,64,-1.1325,0 +56115,64,-1.1134,0 +56116,64,-1.0942,0 +56117,64,-1.075,0 +56118,64,-1.0557,0 +56119,64,-1.0365,0 +56120,64,-1.0171,0 +56121,64,-0.99771,0 +56122,64,-0.97833,0 +56123,64,-0.95893,0 +56124,64,-0.93962,0 +56125,64,-0.92038,0 +56126,64,-0.90098,0 +56127,64,-0.88163,0 +56128,64,-0.86242,0 +56129,64,-0.84313,0 +56130,64,-0.82371,0 +56131,64,-0.80458,0 +56132,64,-0.78553,0 +56133,64,-0.76645,0 +56134,64,-0.74745,0 +56135,64,-0.72853,0 +56136,64,-0.70957,0 +56137,64,-0.69061,0 +56138,64,-0.67176,0 +56139,64,-0.65291,0 +56140,64,-0.63417,0 +56141,64,-0.61552,0 +56142,64,-0.59706,0 +56143,64,-0.57868,0 +56144,64,-0.56045,0 +56145,64,-0.54217,0 +56146,64,-0.52401,0 +56147,64,-0.50587,0 +56148,64,-0.48767,0 +56149,64,-0.46958,0 +56150,64,-0.45177,0 +56151,64,-0.43385,0 +56152,64,-0.41613,0 +56153,64,-0.39851,0 +56154,64,-0.38099,0 +56155,64,-0.36339,0 +56156,64,-0.34606,0 +56157,64,-0.32878,0 +56158,64,-0.31167,0 +56159,64,-0.29463,0 +56160,64,-0.27782,0 +56161,64,-0.26104,0 +56162,64,-0.24456,0 +56163,64,-0.22833,0 +56164,64,-0.21162,0 +56165,64,-0.19427,0 +56166,64,-0.17713,0 +56167,64,-0.15999,0 +56168,64,-0.14314,0 +56169,64,-0.12644,0 +56170,64,-0.10979,0 +56171,64,-0.093588,0 +56172,64,-0.077618,0 +56173,64,-0.061819,0 +56174,64,-0.046122,0 +56175,64,-0.030915,0 +56176,64,-0.015946,0 +56177,64,-0.0012626,0 +56178,64,0.013256,0 +56179,64,0.027417,0 +56180,64,0.041322,0 +56181,64,0.055028,0 +56182,64,0.068453,0 +56183,64,0.081722,0 +56184,64,0.094564,0 +56185,64,0.10732,0 +56186,64,0.11977,0 +56187,64,0.13193,0 +56188,64,0.14379,0 +56189,64,0.15547,0 +56190,64,0.16685,0 +56191,64,0.17787,0 +56192,64,0.18888,0 +56193,64,0.19967,0 +56194,64,0.21024,0 +56195,64,0.22056,0 +56196,64,0.23061,0 +56197,64,0.24056,0 +56198,64,0.25023,0 +56199,64,0.25961,0 +56200,64,0.26889,0 +56201,64,0.27782,0 +56202,64,0.28685,0 +56203,64,0.29565,0 +56204,64,0.30424,0 +56205,64,0.31248,0 +56206,64,0.32062,0 +56207,64,0.32857,0 +56208,64,0.33631,0 +56209,64,0.34396,0 +56210,64,0.35141,0 +56211,64,0.35868,0 +56212,64,0.36577,0 +56213,64,0.37262,0 +56214,64,0.37939,0 +56215,64,0.3863,0 +56216,64,0.3928,0 +56217,64,0.39924,0 +56218,64,0.40553,0 +56219,64,0.41178,0 +56220,64,0.41781,0 +56221,64,0.42376,0 +56222,64,0.42938,0 +56223,64,0.43487,0 +56224,64,0.44013,0 +56225,64,0.44524,0 +56226,64,0.45016,0 +56227,64,0.45484,0 +56228,64,0.45941,0 +56229,64,0.46391,0 +56230,64,0.46836,0 +56231,64,0.47252,0 +56232,64,0.47658,0 +56233,64,0.48047,0 +56234,64,0.48418,0 +56235,64,0.4878,0 +56236,64,0.49118,0 +56237,64,0.49452,0 +56238,64,0.49759,0 +56239,64,0.50068,0 +56240,64,0.50353,0 +56241,64,0.50637,0 +56242,64,0.50891,0 +56243,64,0.51128,0 +56244,64,0.51365,0 +56245,64,0.51587,0 +56246,64,0.51786,0 +56247,60,0.5197,0 +56248,60,0.52141,0 +56249,60,0.52312,0 +56250,60,0.5245,0 +56251,60,0.52524,0 +56252,60,0.52584,0 +56253,60,0.52631,0 +56254,60,0.52676,0 +56255,60,0.52715,0 +56256,60,0.52746,0 +56257,60,0.52787,0 +56258,60,0.52806,0 +56259,60,0.52818,0 +56260,60,0.52826,0 +56261,60,0.52841,0 +56262,60,0.52844,0 +56263,60,0.52841,0 +56264,60,0.52819,0 +56265,60,0.52806,0 +56266,60,0.52772,0 +56267,60,0.52741,0 +56268,60,0.52698,0 +56269,60,0.52661,0 +56270,60,0.52613,0 +56271,60,0.52556,0 +56272,60,0.52505,0 +56273,60,0.52432,0 +56274,60,0.52342,0 +56275,60,0.5224,0 +56276,60,0.52146,0 +56277,60,0.52015,0 +56278,60,0.51875,0 +56279,60,0.51728,0 +56280,60,0.51568,0 +56281,60,0.51399,0 +56282,60,0.51215,0 +56283,60,0.51038,0 +56284,60,0.50848,0 +56285,60,0.5063,0 +56286,60,0.50398,0 +56287,60,0.50149,0 +56288,60,0.49889,0 +56289,60,0.49628,0 +56290,60,0.49369,0 +56291,60,0.49092,0 +56292,60,0.48804,0 +56293,60,0.48496,0 +56294,60,0.48157,0 +56295,60,0.47794,0 +56296,60,0.47418,0 +56297,60,0.47033,0 +56298,60,0.46619,0 +56299,60,0.46145,0 +56300,60,0.4566,0 +56301,60,0.45149,0 +56302,60,0.44605,0 +56303,60,0.44041,0 +56304,60,0.43463,0 +56305,60,0.42861,0 +56306,60,0.42245,0 +56307,60,0.41613,0 +56308,60,0.40963,0 +56309,60,0.40295,0 +56310,60,0.39611,0 +56311,60,0.38927,0 +56312,60,0.38217,0 +56313,60,0.37486,0 +56314,60,0.36728,0 +56315,60,0.35972,0 +56316,60,0.35182,0 +56317,60,0.34373,0 +56318,60,0.3355,0 +56319,60,0.32685,0 +56320,60,0.31809,0 +56321,60,0.30914,0 +56322,60,0.30009,0 +56323,60,0.29059,0 +56324,60,0.28089,0 +56325,60,0.27091,0 +56326,60,0.26091,0 +56327,60,0.25084,0 +56328,60,0.24032,0 +56329,60,0.22977,0 +56330,60,0.21918,0 +56331,60,0.20853,0 +56332,60,0.19782,0 +56333,60,0.18685,0 +56334,60,0.17561,0 +56335,60,0.1643,0 +56336,60,0.15282,0 +56337,60,0.14114,0 +56338,60,0.12946,0 +56339,60,0.1174,0 +56340,60,0.10507,0 +56341,60,0.092815,0 +56342,60,0.080492,0 +56343,60,0.06775,0 +56344,60,0.054927,0 +56345,60,0.041979,0 +56346,60,0.028866,0 +56347,60,0.015694,0 +56348,60,0.0022955,0 +56349,60,-0.011278,0 +56350,60,-0.024875,0 +56351,60,-0.038786,0 +56352,60,-0.052806,0 +56353,60,-0.066904,0 +56354,60,-0.081088,0 +56355,60,-0.095354,0 +56356,60,-0.10963,0 +56357,60,-0.12385,0 +56358,60,-0.13812,0 +56359,60,-0.15253,0 +56360,60,-0.16675,0 +56361,60,-0.18101,0 +56362,60,-0.19544,0 +56363,60,-0.20987,0 +56364,60,-0.22443,0 +56365,60,-0.23905,0 +56366,60,-0.25379,0 +56367,60,-0.26861,0 +56368,60,-0.28334,0 +56369,60,-0.29805,0 +56370,60,-0.31287,0 +56371,60,-0.32784,0 +56372,60,-0.343,0 +56373,60,-0.3583,0 +56374,60,-0.37384,0 +56375,60,-0.38932,0 +56376,60,-0.40483,0 +56377,60,-0.42005,0 +56378,60,-0.43531,0 +56379,60,-0.45052,0 +56380,60,-0.46566,0 +56381,60,-0.48053,0 +56382,60,-0.495,0 +56383,60,-0.50948,0 +56384,60,-0.52382,0 +56385,60,-0.53811,0 +56386,60,-0.55236,0 +56387,60,-0.56657,0 +56388,60,-0.58074,0 +56389,60,-0.59463,0 +56390,60,-0.60837,0 +56391,60,-0.6221,0 +56392,60,-0.63563,0 +56393,60,-0.64912,0 +56394,60,-0.66257,0 +56395,60,-0.67589,0 +56396,60,-0.68915,0 +56397,60,-0.70235,0 +56398,60,-0.71525,0 +56399,60,-0.72802,0 +56400,60,-0.74052,0 +56401,60,-0.7528,0 +56402,60,-0.76497,0 +56403,60,-0.77682,0 +56404,60,-0.78812,0 +56405,60,-0.79918,0 +56406,60,-0.81001,0 +56407,60,-0.82086,0 +56408,60,-0.83127,0 +56409,60,-0.84139,0 +56410,60,-0.85165,0 +56411,60,-0.8617,0 +56412,60,-0.8717,0 +56413,60,-0.88112,0 +56414,60,-0.89006,0 +56415,60,-0.89891,0 +56416,60,-0.90718,0 +56417,60,-0.91509,0 +56418,60,-0.92266,0 +56419,60,-0.93018,0 +56420,60,-0.93748,0 +56421,60,-0.94428,0 +56422,60,-0.95107,0 +56423,60,-0.95721,0 +56424,60,-0.96278,0 +56425,60,-0.96761,0 +56426,60,-0.97226,0 +56427,60,-0.97688,0 +56428,60,-0.98156,0 +56429,60,-0.98666,0 +56430,60,-0.99221,0 +56431,60,-0.99786,0 +56432,60,-1.0035,0 +56433,60,-1.0093,0 +56434,60,-1.015,0 +56435,60,-1.0201,0 +56436,60,-1.0254,0 +56437,60,-1.031,0 +56438,60,-1.0378,0 +56439,60,-1.0454,0 +56440,60,-1.0539,0 +56441,60,-1.063,0 +56442,60,-1.0729,0 +56443,60,-1.0826,0 +56444,60,-1.0927,0 +56445,60,-1.1036,0 +56446,60,-1.1149,0 +56447,60,-1.1277,0 +56448,60,-1.1418,0 +56449,60,-1.156,0 +56450,60,-1.1715,0 +56451,60,-1.1883,0 +56452,60,-1.2055,0 +56453,60,-1.2238,0 +56454,60,-1.2423,0 +56455,60,-1.2588,0 +56456,60,-1.2746,0 +56457,60,-1.2887,0 +56458,60,-1.3005,0 +56459,60,-1.313,0 +56460,60,-1.3256,0 +56461,60,-1.3395,0 +56462,60,-1.3523,0 +56463,60,-1.3656,0 +56464,60,-1.3819,0 +56465,60,-1.3999,0 +56466,60,-1.4168,0 +56467,60,-1.4356,0 +56468,60,-1.4532,0 +56469,60,-1.4628,0 +56470,0,-1.462,20 +56471,16,-1.462,0 +56472,61,-1.4407,0 +56473,61,-1.4083,0 +56474,61,-1.3637,0 +56475,61,-1.3128,0 +56476,61,-1.2556,0 +56477,61,-1.1926,0 +56478,61,-1.1255,0 +56479,61,-1.0583,0 +56480,61,-0.9915,0 +56481,61,-0.93135,0 +56482,61,-0.87631,0 +56483,61,-0.82758,0 +56484,61,-0.77978,0 +56485,61,-0.73166,0 +56486,61,-0.68474,0 +56487,61,-0.64029,0 +56488,61,-0.59586,0 +56489,61,-0.55102,0 +56490,61,-0.5076,0 +56491,61,-0.46636,0 +56492,61,-0.42606,0 +56493,61,-0.38745,0 +56494,61,-0.35007,0 +56495,61,-0.31441,0 +56496,61,-0.28252,0 +56497,61,-0.25578,0 +56498,61,-0.23174,0 +56499,61,-0.20984,0 +56500,61,-0.19141,0 +56501,61,-0.17754,0 +56502,61,-0.16759,0 +56503,61,-0.16186,0 +56504,61,-0.15901,0 +56505,61,-0.15657,0 +56506,61,-0.15539,0 +56507,61,-0.15712,0 +56508,61,-0.16106,0 +56509,61,-0.16528,0 +56510,61,-0.16917,0 +56511,61,-0.17267,0 +56512,61,-0.17718,0 +56513,61,-0.18085,0 +56514,61,-0.1835,0 +56515,61,-0.18591,0 +56516,61,-0.1888,0 +56517,61,-0.19161,0 +56518,61,-0.19522,0 +56519,61,-0.19872,0 +56520,61,-0.20336,0 +56521,61,-0.20862,0 +56522,61,-0.21457,0 +56523,61,-0.2207,0 +56524,61,-0.22712,0 +56525,61,-0.23378,0 +56526,61,-0.24086,0 +56527,61,-0.24889,0 +56528,61,-0.25726,0 +56529,61,-0.26516,0 +56530,61,-0.2733,0 +56531,61,-0.28091,0 +56532,61,-0.28859,0 +56533,61,-0.29654,0 +56534,61,-0.30526,0 +56535,61,-0.31372,0 +56536,61,-0.32162,0 +56537,61,-0.32839,0 +56538,61,-0.33488,0 +56539,61,-0.34117,0 +56540,61,-0.34772,0 +56541,61,-0.35368,0 +56542,61,-0.35991,0 +56543,61,-0.36502,0 +56544,61,-0.3696,0 +56545,61,-0.37371,0 +56546,61,-0.37831,0 +56547,61,-0.38288,0 +56548,61,-0.38772,0 +56549,61,-0.39174,0 +56550,61,-0.39519,0 +56551,61,-0.39785,0 +56552,61,-0.40085,0 +56553,61,-0.40433,0 +56554,61,-0.40844,0 +56555,61,-0.41294,0 +56556,61,-0.4171,0 +56557,61,-0.42138,0 +56558,61,-0.426,0 +56559,61,-0.43106,0 +56560,61,-0.43624,0 +56561,61,-0.44195,0 +56562,61,-0.44694,0 +56563,61,-0.45252,0 +56564,61,-0.458,0 +56565,61,-0.46346,0 +56566,61,-0.46959,0 +56567,61,-0.47575,0 +56568,61,-0.48227,0 +56569,61,-0.48867,0 +56570,61,-0.49486,0 +56571,61,-0.50134,0 +56572,61,-0.50756,0 +56573,61,-0.51423,0 +56574,61,-0.52073,0 +56575,61,-0.52737,0 +56576,61,-0.53387,0 +56577,61,-0.54019,0 +56578,61,-0.54692,0 +56579,61,-0.55406,0 +56580,61,-0.5612,0 +56581,61,-0.56898,0 +56582,61,-0.57719,0 +56583,61,-0.58565,0 +56584,61,-0.59452,0 +56585,61,-0.60349,0 +56586,61,-0.61288,0 +56587,61,-0.62257,0 +56588,61,-0.63295,0 +56589,61,-0.64378,0 +56590,61,-0.65483,0 +56591,61,-0.66615,0 +56592,61,-0.67784,0 +56593,61,-0.68982,0 +56594,61,-0.70184,0 +56595,61,-0.7145,0 +56596,61,-0.72745,0 +56597,61,-0.74104,0 +56598,61,-0.75463,0 +56599,61,-0.76863,0 +56600,61,-0.78306,0 +56601,61,-0.79801,0 +56602,61,-0.81342,0 +56603,61,-0.82936,0 +56604,61,-0.84552,0 +56605,61,-0.86239,0 +56606,61,-0.87916,0 +56607,61,-0.89625,0 +56608,61,-0.91338,0 +56609,61,-0.93069,0 +56610,61,-0.94812,0 +56611,61,-0.9658,0 +56612,61,-0.98379,0 +56613,61,-1.0017,0 +56614,61,-1.0198,0 +56615,61,-1.0378,0 +56616,61,-1.0562,0 +56617,61,-1.0741,0 +56618,61,-1.0923,0 +56619,61,-1.1104,0 +56620,61,-1.1284,0 +56621,61,-1.1463,0 +56622,61,-1.1645,0 +56623,61,-1.1825,0 +56624,61,-1.2003,0 +56625,61,-1.2181,0 +56626,61,-1.2359,0 +56627,61,-1.2539,0 +56628,61,-1.2721,0 +56629,61,-1.2906,0 +56630,61,-1.3093,0 +56631,61,-1.3284,0 +56632,61,-1.3478,0 +56633,61,-1.3675,0 +56634,61,-1.3871,0 +56635,61,-1.407,0 +56636,61,-1.4272,0 +56637,61,-1.4475,0 +56638,61,-1.4677,0 +56639,61,-1.488,0 +56640,61,-1.5087,0 +56641,61,-1.5297,0 +56642,61,-1.5504,0 +56643,61,-1.5713,0 +56644,61,-1.5921,0 +56645,61,-1.6131,0 +56646,61,-1.6341,0 +56647,61,-1.6547,0 +56648,61,-1.6753,0 +56649,61,-1.6959,0 +56650,61,-1.7163,0 +56651,61,-1.7366,0 +56652,61,-1.7564,0 +56653,61,-1.7764,0 +56654,61,-1.7963,0 +56655,61,-1.8161,0 +56656,61,-1.8357,0 +56657,61,-1.8553,0 +56658,61,-1.8749,0 +56659,61,-1.8944,0 +56660,61,-1.9139,0 +56661,61,-1.9335,0 +56662,61,-1.9528,0 +56663,61,-1.9722,0 +56664,61,-1.9917,0 +56665,61,-2.0112,0 +56666,61,-2.0305,0 +56667,61,-2.0496,0 +56668,61,-2.0688,0 +56669,61,-2.0877,0 +56670,61,-2.1068,0 +56671,61,-2.126,0 +56672,61,-2.1452,0 +56673,61,-2.1647,0 +56674,61,-2.1841,0 +56675,61,-2.2037,0 +56676,61,-2.2233,0 +56677,61,-2.2432,0 +56678,61,-2.2628,0 +56679,61,-2.2827,0 +56680,61,-2.3026,0 +56681,61,-2.3224,0 +56682,61,-2.3425,0 +56683,61,-2.3623,0 +56684,61,-2.3822,0 +56685,61,-2.4017,0 +56686,61,-2.4212,0 +56687,61,-2.4407,0 +56688,61,-2.4599,0 +56689,61,-2.4789,0 +56690,61,-2.498,0 +56691,61,-2.5175,0 +56692,61,-2.5368,0 +56693,61,-2.5558,0 +56694,61,-2.5754,0 +56695,61,-2.5953,0 +56696,61,-2.6152,0 +56697,61,-2.6352,0 +56698,61,-2.6554,0 +56699,61,-2.6756,0 +56700,61,-2.6958,0 +56701,61,-2.7158,0 +56702,61,-2.7359,0 +56703,61,-2.7559,0 +56704,61,-2.7761,0 +56705,61,-2.7961,0 +56706,61,-2.8156,0 +56707,61,-2.8356,0 +56708,61,-2.8558,0 +56709,61,-2.8755,0 +56710,61,-2.8953,0 +56711,61,-2.9152,0 +56712,61,-2.935,0 +56713,61,-2.9547,0 +56714,61,-2.9739,0 +56715,61,-2.9933,0 +56716,61,-3.0126,0 +56717,61,-3.0317,0 +56718,61,-3.0512,0 +56719,61,-3.0701,0 +56720,61,-3.0891,0 +56721,61,-3.1081,0 +56722,61,-3.1271,0 +56723,61,-3.1461,0 +56724,61,-3.1651,0 +56725,61,-3.1841,0 +56726,61,-3.2032,0 +56727,61,-3.2224,0 +56728,61,-3.2416,0 +56729,61,-3.2608,0 +56730,61,-3.2801,0 +56731,61,-3.2996,0 +56732,61,-3.3189,0 +56733,61,-3.3383,0 +56734,61,-3.3578,0 +56735,61,-3.377,0 +56736,61,-3.3963,0 +56737,61,-3.4155,0 +56738,61,-3.4345,0 +56739,61,-3.4535,0 +56740,61,-3.4723,0 +56741,61,-3.4909,0 +56742,61,-3.5095,0 +56743,61,-3.5282,0 +56744,61,-3.5468,0 +56745,61,-3.565,0 +56746,61,-3.5835,0 +56747,61,-3.6018,0 +56748,61,-3.6199,0 +56749,61,-3.6377,0 +56750,61,-3.6552,0 +56751,61,-3.6724,0 +56752,61,-3.6897,0 +56753,61,-3.7065,0 +56754,61,-3.7232,0 +56755,61,-3.7398,0 +56756,61,-3.7561,0 +56757,61,-3.7723,0 +56758,61,-3.7881,0 +56759,61,-3.8036,0 +56760,61,-3.8193,0 +56761,61,-3.8352,0 +56762,61,-3.851,0 +56763,61,-3.8668,0 +56764,61,-3.8828,0 +56765,61,-3.8986,0 +56766,61,-3.9146,0 +56767,61,-3.9306,0 +56768,61,-3.9464,0 +56769,61,-3.9619,0 +56770,61,-3.9774,0 +56771,61,-3.9929,0 +56772,61,-4.0078,0 +56773,61,-4.0223,0 +56774,61,-4.0366,0 +56775,61,-4.0507,0 +56776,61,-4.0644,0 +56777,61,-4.078,0 +56778,61,-4.0914,0 +56779,61,-4.1044,0 +56780,61,-4.1172,0 +56781,61,-4.1297,0 +56782,61,-4.142,0 +56783,61,-4.1535,0 +56784,61,-4.165,0 +56785,61,-4.1767,0 +56786,61,-4.1874,0 +56787,61,-4.1977,0 +56788,61,-4.2079,0 +56789,61,-4.2179,0 +56790,61,-4.2275,0 +56791,61,-4.237,0 +56792,61,-4.246,0 +56793,61,-4.255,0 +56794,61,-4.2636,0 +56795,61,-4.2718,0 +56796,61,-4.2797,0 +56797,61,-4.2875,0 +56798,61,-4.2947,0 +56799,61,-4.3021,0 +56800,61,-4.3092,0 +56801,61,-4.316,0 +56802,61,-4.3227,0 +56803,61,-4.3293,0 +56804,61,-4.3357,0 +56805,61,-4.3421,0 +56806,61,-4.3485,0 +56807,61,-4.3546,0 +56808,61,-4.3605,0 +56809,61,-4.3665,0 +56810,61,-4.3724,0 +56811,61,-4.3781,0 +56812,61,-4.3837,0 +56813,61,-4.3892,0 +56814,61,-4.3945,0 +56815,61,-4.3995,0 +56816,61,-4.4039,0 +56817,61,-4.4079,0 +56818,61,-4.4112,0 +56819,61,-4.4141,0 +56820,61,-4.4166,0 +56821,61,-4.4185,0 +56822,61,-4.42,0 +56823,61,-4.4213,0 +56824,61,-4.4221,0 +56825,61,-4.4228,0 +56826,61,-4.4233,0 +56827,61,-4.4234,0 +56828,61,-4.423,0 +56829,61,-4.4225,0 +56830,61,-4.4216,0 +56831,61,-4.4205,0 +56832,61,-4.4194,0 +56833,61,-4.4181,0 +56834,61,-4.4163,0 +56835,61,-4.4145,0 +56836,61,-4.4123,0 +56837,61,-4.4099,0 +56838,61,-4.4075,0 +56839,61,-4.4046,0 +56840,61,-4.4014,0 +56841,61,-4.3982,0 +56842,61,-4.3946,0 +56843,61,-4.3908,0 +56844,61,-4.3865,0 +56845,61,-4.3818,0 +56846,61,-4.3768,0 +56847,61,-4.3713,0 +56848,61,-4.3658,0 +56849,61,-4.3601,0 +56850,61,-4.3539,0 +56851,61,-4.3474,0 +56852,61,-4.3411,0 +56853,61,-4.3349,0 +56854,61,-4.3278,0 +56855,61,-4.3201,0 +56856,61,-4.3126,0 +56857,58,-4.305,0 +56858,58,-4.2968,0 +56859,61,-4.2882,0 +56860,61,-4.2793,0 +56861,61,-4.2699,0 +56862,61,-4.2601,0 +56863,61,-4.2503,0 +56864,61,-4.2404,0 +56865,61,-4.2301,0 +56866,61,-4.2196,0 +56867,61,-4.2091,0 +56868,61,-4.1982,0 +56869,61,-4.1872,0 +56870,61,-4.1764,0 +56871,61,-4.1653,0 +56872,61,-4.1541,0 +56873,61,-4.1426,0 +56874,61,-4.1309,0 +56875,61,-4.1189,0 +56876,61,-4.1068,0 +56877,61,-4.0944,0 +56878,61,-4.082,0 +56879,61,-4.0693,0 +56880,61,-4.0565,0 +56881,61,-4.0435,0 +56882,61,-4.0304,0 +56883,61,-4.017,0 +56884,61,-4.0033,0 +56885,61,-3.9894,0 +56886,61,-3.9752,0 +56887,60,-3.9606,0 +56888,60,-3.9458,0 +56889,60,-3.9304,0 +56890,60,-3.9143,0 +56891,60,-3.8979,0 +56892,60,-3.8812,0 +56893,60,-3.864,0 +56894,60,-3.8463,0 +56895,60,-3.8282,0 +56896,60,-3.8097,0 +56897,60,-3.7909,0 +56898,60,-3.7721,0 +56899,60,-3.7529,0 +56900,60,-3.734,0 +56901,60,-3.7152,0 +56902,60,-3.6967,0 +56903,60,-3.6784,0 +56904,60,-3.6602,0 +56905,60,-3.6423,0 +56906,60,-3.6246,0 +56907,60,-3.6071,0 +56908,60,-3.5895,0 +56909,60,-3.5718,0 +56910,60,-3.5539,0 +56911,60,-3.5357,0 +56912,60,-3.5176,0 +56913,60,-3.4992,0 +56914,60,-3.4807,0 +56915,60,-3.4618,0 +56916,60,-3.4427,0 +56917,60,-3.4236,0 +56918,60,-3.4041,0 +56919,60,-3.3847,0 +56920,60,-3.3652,0 +56921,60,-3.3453,0 +56922,60,-3.3253,0 +56923,60,-3.3053,0 +56924,60,-3.285,0 +56925,60,-3.2646,0 +56926,60,-3.2442,0 +56927,60,-3.2237,0 +56928,60,-3.2031,0 +56929,60,-3.1824,0 +56930,60,-3.1616,0 +56931,60,-3.1407,0 +56932,60,-3.1193,0 +56933,60,-3.098,0 +56934,60,-3.0765,0 +56935,60,-3.0551,0 +56936,60,-3.033,0 +56937,60,-3.0107,0 +56938,60,-2.9893,0 +56939,60,-2.9678,0 +56940,60,-2.946,0 +56941,60,-2.9245,0 +56942,60,-2.9033,0 +56943,60,-2.8823,0 +56944,60,-2.8615,0 +56945,60,-2.8409,0 +56946,60,-2.8202,0 +56947,60,-2.7995,0 +56948,60,-2.779,0 +56949,60,-2.7584,0 +56950,60,-2.7379,0 +56951,60,-2.7173,0 +56952,60,-2.6965,0 +56953,60,-2.676,0 +56954,60,-2.6552,0 +56955,60,-2.6345,0 +56956,60,-2.6139,0 +56957,60,-2.5936,0 +56958,60,-2.5732,0 +56959,60,-2.5531,0 +56960,60,-2.5333,0 +56961,60,-2.5135,0 +56962,60,-2.494,0 +56963,60,-2.4749,0 +56964,60,-2.4558,0 +56965,60,-2.4367,0 +56966,60,-2.4179,0 +56967,60,-2.399,0 +56968,60,-2.3803,0 +56969,60,-2.3618,0 +56970,60,-2.3436,0 +56971,60,-2.3254,0 +56972,60,-2.3076,0 +56973,60,-2.2901,0 +56974,60,-2.2731,0 +56975,60,-2.2561,0 +56976,60,-2.2396,0 +56977,60,-2.2231,0 +56978,60,-2.2067,0 +56979,60,-2.1902,0 +56980,60,-2.174,0 +56981,60,-2.1576,0 +56982,60,-2.1412,0 +56983,60,-2.1249,0 +56984,60,-2.1086,0 +56985,60,-2.0921,0 +56986,60,-2.0754,0 +56987,60,-2.0587,0 +56988,60,-2.0421,0 +56989,60,-2.0253,0 +56990,60,-2.0085,0 +56991,60,-1.9919,0 +56992,60,-1.9752,0 +56993,60,-1.959,0 +56994,60,-1.9432,0 +56995,60,-1.9275,0 +56996,60,-1.9121,0 +56997,60,-1.8971,0 +56998,60,-1.8824,0 +56999,60,-1.8678,0 +57000,60,-1.8535,0 +57001,60,-1.8396,0 +57002,60,-1.8257,0 +57003,60,-1.8122,0 +57004,60,-1.7989,0 +57005,60,-1.7859,0 +57006,60,-1.7732,0 +57007,60,-1.7609,0 +57008,60,-1.7487,0 +57009,60,-1.7368,0 +57010,60,-1.7251,0 +57011,60,-1.7138,0 +57012,60,-1.7028,0 +57013,60,-1.6922,0 +57014,60,-1.682,0 +57015,60,-1.672,0 +57016,60,-1.6624,0 +57017,60,-1.6531,0 +57018,60,-1.6437,0 +57019,60,-1.6346,0 +57020,60,-1.6257,0 +57021,60,-1.6167,0 +57022,60,-1.608,0 +57023,60,-1.5992,0 +57024,60,-1.5904,0 +57025,60,-1.5816,0 +57026,60,-1.5727,0 +57027,60,-1.5638,0 +57028,60,-1.5552,0 +57029,60,-1.5466,0 +57030,60,-1.5382,0 +57031,60,-1.5299,0 +57032,60,-1.5216,0 +57033,60,-1.5136,0 +57034,60,-1.506,0 +57035,60,-1.4987,0 +57036,60,-1.4915,0 +57037,60,-1.4847,0 +57038,60,-1.478,0 +57039,60,-1.4715,0 +57040,60,-1.465,0 +57041,60,-1.4588,0 +57042,60,-1.4526,0 +57043,60,-1.4462,0 +57044,60,-1.4399,0 +57045,60,-1.4335,0 +57046,60,-1.4267,0 +57047,60,-1.4202,0 +57048,60,-1.4137,0 +57049,60,-1.4075,0 +57050,60,-1.4013,0 +57051,60,-1.395,0 +57052,60,-1.3889,0 +57053,60,-1.3828,0 +57054,60,-1.3769,0 +57055,60,-1.371,0 +57056,60,-1.365,0 +57057,60,-1.3591,0 +57058,60,-1.3533,0 +57059,60,-1.3474,0 +57060,60,-1.3417,0 +57061,60,-1.3363,0 +57062,60,-1.3314,0 +57063,60,-1.3265,0 +57064,60,-1.3221,0 +57065,60,-1.3179,0 +57066,60,-1.314,0 +57067,60,-1.3101,0 +57068,60,-1.3067,0 +57069,60,-1.3035,0 +57070,60,-1.3005,0 +57071,60,-1.2976,0 +57072,60,-1.2948,0 +57073,60,-1.2922,0 +57074,60,-1.2896,0 +57075,60,-1.2871,0 +57076,60,-1.2843,0 +57077,60,-1.2816,0 +57078,60,-1.2791,0 +57079,60,-1.2765,0 +57080,60,-1.274,0 +57081,60,-1.2716,0 +57082,60,-1.2695,0 +57083,60,-1.2674,0 +57084,60,-1.2655,0 +57085,60,-1.2637,0 +57086,60,-1.2621,0 +57087,60,-1.2606,0 +57088,60,-1.2594,0 +57089,60,-1.2582,0 +57090,60,-1.2574,0 +57091,60,-1.2566,0 +57092,60,-1.2559,0 +57093,60,-1.2553,0 +57094,60,-1.2547,0 +57095,60,-1.2542,0 +57096,60,-1.2536,0 +57097,60,-1.253,0 +57098,60,-1.2526,0 +57099,60,-1.2523,0 +57100,60,-1.2521,0 +57103,60,-1.2524,0 +57104,60,-1.2526,0 +57105,60,-1.2527,0 +57106,60,-1.2532,0 +57107,60,-1.2539,0 +57108,60,-1.2549,0 +57109,60,-1.2561,0 +57110,60,-1.2574,0 +57111,60,-1.2588,0 +57112,60,-1.2603,0 +57113,60,-1.2619,0 +57114,60,-1.2638,0 +57115,60,-1.2657,0 +57116,60,-1.2674,0 +57117,60,-1.2691,0 +57118,60,-1.2708,0 +57119,60,-1.2723,0 +57120,60,-1.2737,0 +57121,60,-1.275,0 +57122,60,-1.2763,0 +57123,60,-1.2775,0 +57124,60,-1.2789,0 +57125,60,-1.2803,0 +57126,60,-1.2821,0 +57127,60,-1.2842,0 +57128,60,-1.2865,0 +57129,60,-1.2894,0 +57130,60,-1.2925,0 +57131,60,-1.2958,0 +57132,60,-1.2993,0 +57133,60,-1.3031,0 +57134,60,-1.3072,0 +57135,60,-1.3115,0 +57136,60,-1.3158,0 +57137,60,-1.3203,0 +57138,60,-1.3248,0 +57139,60,-1.3296,0 +57140,60,-1.3345,0 +57141,60,-1.3393,0 +57142,60,-1.3443,0 +57143,60,-1.3493,0 +57144,60,-1.3544,0 +57145,60,-1.3593,0 +57146,60,-1.3643,0 +57147,60,-1.3694,0 +57148,60,-1.3744,0 +57149,60,-1.3794,0 +57150,60,-1.3847,0 +57151,60,-1.3902,0 +57152,60,-1.3959,0 +57153,60,-1.4017,0 +57154,60,-1.4077,0 +57155,60,-1.4139,0 +57156,60,-1.4201,0 +57157,60,-1.4265,0 +57158,60,-1.4332,0 +57159,60,-1.4402,0 +57160,60,-1.4472,0 +57161,60,-1.4544,0 +57162,60,-1.4618,0 +57163,60,-1.4694,0 +57164,60,-1.477,0 +57165,60,-1.4848,0 +57166,60,-1.4924,0 +57167,60,-1.5002,0 +57168,60,-1.508,0 +57169,60,-1.5157,0 +57170,60,-1.5235,0 +57171,60,-1.5311,0 +57172,60,-1.5386,0 +57173,60,-1.546,0 +57174,60,-1.5534,0 +57175,60,-1.5609,0 +57176,60,-1.5684,0 +57177,60,-1.576,0 +57178,60,-1.5837,0 +57179,60,-1.5912,0 +57180,60,-1.5987,0 +57181,60,-1.6063,0 +57182,60,-1.6139,0 +57183,60,-1.6213,0 +57184,60,-1.6288,0 +57185,60,-1.6364,0 +57186,60,-1.6439,0 +57187,60,-1.6516,0 +57188,60,-1.6597,0 +57189,60,-1.668,0 +57190,60,-1.6762,0 +57191,60,-1.6844,0 +57192,60,-1.6927,0 +57193,60,-1.7009,0 +57194,60,-1.7093,0 +57195,60,-1.7178,0 +57196,60,-1.7265,0 +57197,60,-1.7353,0 +57198,60,-1.7442,0 +57199,60,-1.7533,0 +57200,60,-1.7627,0 +57201,60,-1.7722,0 +57202,60,-1.7819,0 +57203,60,-1.7918,0 +57204,60,-1.8019,0 +57205,60,-1.8119,0 +57206,60,-1.822,0 +57207,60,-1.8322,0 +57208,60,-1.8423,0 +57209,60,-1.8524,0 +57210,60,-1.8622,0 +57211,60,-1.8719,0 +57212,60,-1.8815,0 +57213,60,-1.8907,0 +57214,60,-1.8997,0 +57215,60,-1.9085,0 +57216,60,-1.9171,0 +57217,60,-1.9253,0 +57218,60,-1.9335,0 +57219,60,-1.9414,0 +57220,60,-1.9493,0 +57221,60,-1.9571,0 +57222,60,-1.9647,0 +57223,60,-1.9722,0 +57224,60,-1.9799,0 +57225,60,-1.9873,0 +57226,60,-1.9947,0 +57227,60,-2.0019,0 +57228,60,-2.0089,0 +57229,60,-2.0158,0 +57230,60,-2.0226,0 +57231,60,-2.0291,0 +57232,60,-2.0357,0 +57233,60,-2.0419,0 +57234,60,-2.0481,0 +57235,60,-2.0538,0 +57236,60,-2.0593,0 +57237,60,-2.0645,0 +57238,60,-2.0692,0 +57239,60,-2.0738,0 +57240,60,-2.0781,0 +57241,60,-2.0823,0 +57242,60,-2.0862,0 +57243,60,-2.0897,0 +57244,60,-2.0932,0 +57245,60,-2.0962,0 +57246,60,-2.099,0 +57247,60,-2.1014,0 +57248,60,-2.1034,0 +57249,60,-2.1053,0 +57250,60,-2.1071,0 +57251,60,-2.1086,0 +57252,60,-2.11,0 +57253,60,-2.1112,0 +57254,60,-2.1123,0 +57255,60,-2.1133,0 +57256,60,-2.1143,0 +57257,61,-2.1155,0 +57258,61,-2.1166,0 +57259,61,-2.1174,0 +57260,61,-2.1179,0 +57261,61,-2.1182,0 +57263,61,-2.118,0 +57264,61,-2.1175,0 +57265,61,-2.1169,0 +57266,61,-2.1159,0 +57267,61,-2.1145,0 +57268,61,-2.1129,0 +57269,61,-2.111,0 +57270,61,-2.1088,0 +57271,61,-2.1063,0 +57272,61,-2.1033,0 +57273,61,-2.1,0 +57274,61,-2.0963,0 +57275,61,-2.0921,0 +57276,61,-2.0877,0 +57277,61,-2.0829,0 +57278,61,-2.0776,0 +57279,61,-2.072,0 +57280,61,-2.0662,0 +57281,61,-2.0598,0 +57282,61,-2.0529,0 +57283,61,-2.0456,0 +57284,61,-2.0378,0 +57285,61,-2.0297,0 +57286,61,-2.0213,0 +57287,61,-2.0123,0 +57288,61,-2.0029,0 +57289,61,-1.9934,0 +57290,61,-1.9836,0 +57291,61,-1.9736,0 +57292,61,-1.9631,0 +57293,61,-1.9523,0 +57294,61,-1.9413,0 +57295,61,-1.9301,0 +57296,61,-1.9185,0 +57297,61,-1.9067,0 +57298,61,-1.8945,0 +57299,61,-1.8821,0 +57300,61,-1.8697,0 +57301,61,-1.857,0 +57302,61,-1.844,0 +57303,61,-1.8307,0 +57304,61,-1.8171,0 +57305,61,-1.8031,0 +57306,61,-1.7889,0 +57307,61,-1.7742,0 +57308,61,-1.759,0 +57309,61,-1.7437,0 +57310,61,-1.7283,0 +57311,61,-1.7127,0 +57312,61,-1.697,0 +57313,61,-1.6813,0 +57314,61,-1.6656,0 +57315,61,-1.6496,0 +57316,61,-1.6336,0 +57317,61,-1.6175,0 +57318,61,-1.6011,0 +57319,61,-1.5847,0 +57320,61,-1.5683,0 +57321,61,-1.5522,0 +57322,61,-1.5362,0 +57323,61,-1.5202,0 +57324,61,-1.5041,0 +57325,61,-1.488,0 +57326,61,-1.4719,0 +57327,61,-1.4555,0 +57328,55,-1.4391,0 +57329,55,-1.4227,0 +57330,55,-1.4062,0 +57331,55,-1.3896,0 +57332,55,-1.3729,0 +57333,55,-1.3563,0 +57334,55,-1.3396,0 +57335,55,-1.3226,0 +57336,55,-1.3052,0 +57337,55,-1.2877,0 +57338,55,-1.2695,0 +57339,55,-1.2512,0 +57340,55,-1.2328,0 +57341,55,-1.2144,0 +57342,55,-1.196,0 +57343,55,-1.1775,0 +57344,55,-1.159,0 +57345,55,-1.1407,0 +57346,55,-1.1223,0 +57347,55,-1.1039,0 +57348,55,-1.0858,0 +57349,55,-1.0675,0 +57350,55,-1.0492,0 +57351,55,-1.031,0 +57352,55,-1.0129,0 +57353,55,-0.99469,0 +57354,55,-0.97654,0 +57355,55,-0.9585,0 +57356,55,-0.94037,0 +57357,55,-0.92227,0 +57358,55,-0.90419,0 +57359,55,-0.88591,0 +57360,55,-0.86759,0 +57361,55,-0.84946,0 +57362,55,-0.8313,0 +57363,55,-0.81325,0 +57364,55,-0.7951,0 +57365,55,-0.77727,0 +57366,55,-0.75957,0 +57367,55,-0.74193,0 +57368,55,-0.72432,0 +57369,55,-0.7067,0 +57370,55,-0.68926,0 +57371,55,-0.67183,0 +57372,55,-0.65432,0 +57373,55,-0.63695,0 +57374,55,-0.61948,0 +57375,55,-0.60211,0 +57376,55,-0.58468,0 +57377,55,-0.56707,0 +57378,55,-0.54936,0 +57379,55,-0.53149,0 +57380,55,-0.51365,0 +57381,55,-0.49593,0 +57382,55,-0.47833,0 +57383,55,-0.46086,0 +57384,55,-0.44362,0 +57385,55,-0.4267,0 +57386,55,-0.40974,0 +57387,55,-0.39278,0 +57388,55,-0.37587,0 +57389,55,-0.35904,0 +57390,55,-0.34185,0 +57391,62,-0.32419,0 +57392,62,-0.30668,0 +57393,62,-0.28896,0 +57394,62,-0.2709,0 +57395,62,-0.25299,0 +57396,62,-0.23482,0 +57397,62,-0.21642,0 +57398,62,-0.19751,0 +57399,62,-0.17823,0 +57400,62,-0.15842,0 +57401,62,-0.13825,0 +57402,62,-0.11803,0 +57403,62,-0.097631,0 +57404,62,-0.077449,0 +57405,62,-0.057142,0 +57406,62,-0.036929,0 +57407,62,-0.016619,0 +57408,62,0.003725,0 +57409,62,0.023919,0 +57410,62,0.0442,0 +57411,62,0.064546,0 +57412,62,0.084636,0 +57413,62,0.10453,0 +57414,62,0.12463,0 +57415,62,0.1447,0 +57416,62,0.16487,0 +57417,62,0.1851,0 +57418,62,0.20555,0 +57419,62,0.22613,0 +57420,62,0.24657,0 +57421,62,0.26713,0 +57422,62,0.28786,0 +57423,62,0.3087,0 +57424,62,0.32937,0 +57425,62,0.35011,0 +57426,62,0.37092,0 +57427,62,0.39174,0 +57428,62,0.41217,0 +57429,62,0.43282,0 +57430,62,0.45346,0 +57431,62,0.47377,0 +57432,62,0.49417,0 +57433,62,0.51437,0 +57434,62,0.53436,0 +57435,62,0.55421,0 +57436,62,0.57387,0 +57437,62,0.59343,0 +57438,62,0.61285,0 +57439,62,0.63238,0 +57440,62,0.65184,0 +57441,62,0.67128,0 +57442,62,0.69088,0 +57443,62,0.71063,0 +57444,62,0.73063,0 +57445,62,0.75093,0 +57446,62,0.77115,0 +57447,62,0.7912,0 +57448,62,0.81129,0 +57449,62,0.83114,0 +57450,62,0.85102,0 +57451,62,0.87077,0 +57452,62,0.89048,0 +57453,62,0.90994,0 +57454,62,0.92914,0 +57455,62,0.94819,0 +57456,62,0.96711,0 +57457,62,0.98583,0 +57458,62,1.0046,0 +57459,62,1.0234,0 +57460,62,1.0421,0 +57461,62,1.0608,0 +57462,62,1.0798,0 +57463,62,1.0988,0 +57464,62,1.1178,0 +57465,62,1.1368,0 +57466,62,1.1557,0 +57467,62,1.1748,0 +57468,62,1.1936,0 +57469,62,1.212,0 +57470,62,1.2305,0 +57471,62,1.2488,0 +57472,62,1.2669,0 +57473,62,1.2848,0 +57474,62,1.3024,0 +57475,62,1.3198,0 +57476,62,1.337,0 +57477,62,1.3537,0 +57478,62,1.3701,0 +57479,62,1.3862,0 +57480,62,1.4022,0 +57481,62,1.4181,0 +57482,62,1.434,0 +57483,62,1.4497,0 +57484,62,1.4652,0 +57485,62,1.4808,0 +57486,62,1.4962,0 +57487,62,1.5117,0 +57488,62,1.5272,0 +57489,62,1.543,0 +57490,62,1.5587,0 +57491,62,1.5744,0 +57492,62,1.59,0 +57493,62,1.6051,0 +57494,62,1.6199,0 +57495,62,1.6346,0 +57496,62,1.6489,0 +57497,62,1.6629,0 +57498,62,1.6769,0 +57499,62,1.6907,0 +57500,62,1.7042,0 +57501,62,1.7175,0 +57502,62,1.7307,0 +57503,62,1.7441,0 +57504,62,1.7572,0 +57505,62,1.7703,0 +57506,62,1.7833,0 +57507,62,1.7965,0 +57508,62,1.8097,0 +57509,62,1.8228,0 +57510,62,1.836,0 +57511,62,1.8494,0 +57512,62,1.863,0 +57513,62,1.8766,0 +57514,62,1.8903,0 +57515,62,1.904,0 +57516,62,1.9176,0 +57517,62,1.931,0 +57518,62,1.9442,0 +57519,62,1.957,0 +57520,62,1.9696,0 +57521,62,1.9819,0 +57522,62,1.9939,0 +57523,62,2.0056,0 +57524,62,2.0168,0 +57525,62,2.0277,0 +57526,62,2.0385,0 +57527,62,2.0489,0 +57528,62,2.0593,0 +57529,62,2.0694,0 +57530,62,2.0795,0 +57531,62,2.0894,0 +57532,62,2.099,0 +57533,62,2.1087,0 +57534,62,2.1184,0 +57535,62,2.128,0 +57536,62,2.1374,0 +57537,62,2.1466,0 +57538,62,2.1556,0 +57539,62,2.1644,0 +57540,62,2.1728,0 +57541,62,2.1811,0 +57542,62,2.189,0 +57543,62,2.1966,0 +57544,62,2.2039,0 +57545,62,2.2112,0 +57546,62,2.2183,0 +57547,62,2.2251,0 +57548,62,2.2319,0 +57549,62,2.2385,0 +57550,62,2.2448,0 +57551,62,2.2509,0 +57552,62,2.2571,0 +57553,62,2.2633,0 +57554,62,2.2694,0 +57555,62,2.2754,0 +57556,62,2.2813,0 +57557,62,2.2872,0 +57558,62,2.2929,0 +57559,62,2.2987,0 +57560,62,2.3043,0 +57561,62,2.3098,0 +57562,62,2.3151,0 +57563,62,2.3201,0 +57564,62,2.3251,0 +57565,62,2.3299,0 +57566,62,2.3344,0 +57567,62,2.3386,0 +57568,62,2.3427,0 +57569,62,2.3465,0 +57570,62,2.3499,0 +57571,62,2.3532,0 +57572,62,2.3563,0 +57573,62,2.3593,0 +57574,62,2.3622,0 +57575,62,2.3651,0 +57576,62,2.3677,0 +57577,62,2.3703,0 +57578,62,2.3728,0 +57579,62,2.375,0 +57580,62,2.3772,0 +57581,62,2.3794,0 +57582,62,2.3815,0 +57583,62,2.3835,0 +57584,62,2.3853,0 +57585,62,2.3872,0 +57586,62,2.3888,0 +57587,62,2.3902,0 +57588,62,2.3917,0 +57589,62,2.3931,0 +57590,62,2.394,0 +57591,62,2.3949,0 +57592,62,2.3955,0 +57594,62,2.3954,0 +57595,62,2.3952,0 +57596,62,2.3947,0 +57597,62,2.3942,0 +57598,62,2.3938,0 +57599,62,2.3935,0 +57600,62,2.3933,0 +57603,62,2.3936,0 +57604,62,2.394,0 +57605,62,2.3943,0 +57606,62,2.3948,0 +57607,62,2.3951,0 +57608,62,2.3956,0 +57609,62,2.3959,0 +57610,62,2.3963,0 +57611,62,2.3965,0 +57612,62,2.3968,0 +57613,62,2.3972,0 +57614,62,2.3978,0 +57615,62,2.3983,0 +57616,62,2.3987,0 +57617,62,2.3991,0 +57618,62,2.3994,0 +57619,62,2.3998,0 +57620,62,2.4002,0 +57621,62,2.4005,0 +57622,62,2.401,0 +57623,62,2.4014,0 +57624,62,2.4018,0 +57625,62,2.4026,0 +57626,62,2.4034,0 +57627,62,2.4041,0 +57628,62,2.4048,0 +57629,62,2.4055,0 +57630,62,2.4061,0 +57631,62,2.4069,0 +57632,62,2.4079,0 +57633,62,2.4087,0 +57634,62,2.4093,0 +57635,62,2.4098,0 +57636,62,2.4104,0 +57637,62,2.4109,0 +57638,62,2.4115,0 +57639,62,2.4119,0 +57640,62,2.4123,0 +57641,62,2.4125,0 +57642,62,2.4127,0 +57644,62,2.413,0 +57645,62,2.4135,0 +57646,62,2.4141,0 +57647,62,2.4148,0 +57648,62,2.4158,0 +57649,62,2.417,0 +57650,62,2.4182,0 +57651,62,2.4195,0 +57652,62,2.4209,0 +57653,62,2.4223,0 +57654,62,2.4238,0 +57655,62,2.4253,0 +57656,62,2.4269,0 +57657,62,2.4285,0 +57658,62,2.4303,0 +57659,62,2.4322,0 +57660,62,2.4342,0 +57661,62,2.4364,0 +57662,62,2.4387,0 +57663,62,2.4411,0 +57664,62,2.4435,0 +57665,62,2.4458,0 +57666,62,2.4482,0 +57667,62,2.4504,0 +57668,62,2.4525,0 +57669,62,2.4547,0 +57670,62,2.4569,0 +57671,62,2.4589,0 +57672,62,2.4609,0 +57673,62,2.4632,0 +57674,62,2.4654,0 +57675,62,2.4678,0 +57676,62,2.4703,0 +57677,62,2.4728,0 +57678,62,2.4753,0 +57679,62,2.4778,0 +57680,62,2.4802,0 +57681,62,2.4826,0 +57682,62,2.4848,0 +57683,62,2.4869,0 +57684,62,2.4889,0 +57685,62,2.491,0 +57686,62,2.4928,0 +57687,62,2.4945,0 +57688,62,2.4963,0 +57689,62,2.4984,0 +57690,62,2.5005,0 +57691,62,2.5028,0 +57692,62,2.5054,0 +57693,62,2.5081,0 +57694,62,2.511,0 +57695,62,2.5139,0 +57696,62,2.5166,0 +57697,62,2.5193,0 +57698,62,2.522,0 +57699,62,2.5247,0 +57700,62,2.5274,0 +57701,62,2.5303,0 +57702,62,2.5331,0 +57703,62,2.536,0 +57704,62,2.539,0 +57705,62,2.5421,0 +57706,62,2.5453,0 +57707,62,2.5485,0 +57708,62,2.5514,0 +57709,62,2.5543,0 +57710,62,2.5572,0 +57711,62,2.5601,0 +57712,62,2.5629,0 +57713,62,2.5658,0 +57714,62,2.5688,0 +57715,62,2.5716,0 +57716,62,2.5746,0 +57717,62,2.5779,0 +57718,62,2.5811,0 +57719,62,2.5843,0 +57720,62,2.5875,0 +57721,62,2.5907,0 +57722,62,2.5942,0 +57723,62,2.5977,0 +57724,62,2.6013,0 +57725,62,2.605,0 +57726,62,2.6088,0 +57727,62,2.6126,0 +57728,62,2.6161,0 +57729,62,2.6195,0 +57730,62,2.6228,0 +57731,62,2.6257,0 +57732,62,2.6286,0 +57733,62,2.6315,0 +57734,62,2.6344,0 +57735,62,2.6374,0 +57736,62,2.6405,0 +57737,62,2.6437,0 +57738,62,2.6468,0 +57739,62,2.6499,0 +57740,62,2.6529,0 +57741,62,2.6559,0 +57742,62,2.6589,0 +57743,62,2.6618,0 +57744,62,2.6649,0 +57745,62,2.6678,0 +57746,62,2.6706,0 +57747,62,2.6735,0 +57748,62,2.6764,0 +57749,62,2.6794,0 +57750,62,2.6823,0 +57751,62,2.6853,0 +57752,62,2.6883,0 +57753,62,2.6914,0 +57754,62,2.6943,0 +57755,62,2.6973,0 +57756,62,2.7001,0 +57757,62,2.703,0 +57758,62,2.7059,0 +57759,62,2.7088,0 +57760,62,2.712,0 +57761,62,2.7151,0 +57762,62,2.7184,0 +57763,62,2.7217,0 +57764,62,2.7251,0 +57765,62,2.7285,0 +57766,62,2.732,0 +57767,62,2.7355,0 +57768,62,2.739,0 +57769,62,2.7425,0 +57770,62,2.746,0 +57771,62,2.7495,0 +57772,62,2.7529,0 +57773,62,2.7562,0 +57774,62,2.7594,0 +57775,62,2.7622,0 +57776,62,2.7648,0 +57777,62,2.7672,0 +57778,62,2.7695,0 +57779,62,2.7719,0 +57780,62,2.7741,0 +57781,62,2.7763,0 +57782,62,2.7785,0 +57783,62,2.7806,0 +57784,62,2.7826,0 +57785,62,2.7847,0 +57786,62,2.7869,0 +57787,62,2.7888,0 +57788,62,2.7908,0 +57789,62,2.7928,0 +57790,62,2.7948,0 +57791,62,2.7971,0 +57792,62,2.7997,0 +57793,62,2.8023,0 +57794,62,2.8049,0 +57795,62,2.8077,0 +57796,62,2.8105,0 +57797,62,2.813,0 +57798,62,2.8155,0 +57799,62,2.8178,0 +57800,62,2.82,0 +57801,62,2.8219,0 +57802,62,2.8238,0 +57803,62,2.8257,0 +57804,62,2.8276,0 +57805,62,2.8291,0 +57806,62,2.8304,0 +57807,62,2.8318,0 +57808,62,2.833,0 +57809,62,2.834,0 +57810,62,2.8351,0 +57811,62,2.8362,0 +57812,62,2.8372,0 +57813,62,2.8384,0 +57814,62,2.8396,0 +57815,62,2.8408,0 +57816,62,2.8421,0 +57817,62,2.8433,0 +57818,62,2.8442,0 +57819,62,2.8452,0 +57820,62,2.8459,0 +57821,62,2.8465,0 +57822,62,2.8471,0 +57823,62,2.8477,0 +57824,62,2.8484,0 +57825,62,2.8489,0 +57826,62,2.8494,0 +57827,62,2.8499,0 +57828,62,2.8503,0 +57829,62,2.8506,0 +57830,62,2.8508,0 +57831,62,2.851,0 +57832,62,2.8513,0 +57833,62,2.8515,0 +57834,62,2.8519,0 +57835,62,2.852,0 +57836,62,2.8522,0 +57837,62,2.8527,0 +57838,62,2.8533,0 +57839,62,2.8538,0 +57840,62,2.8544,0 +57841,62,2.855,0 +57842,62,2.8553,0 +57843,62,2.8556,0 +57845,62,2.8555,0 +57846,62,2.8553,0 +57847,62,2.8551,0 +57848,62,2.8548,0 +57849,62,2.8542,0 +57850,62,2.8536,0 +57851,62,2.853,0 +57852,62,2.8523,0 +57853,62,2.8516,0 +57854,62,2.8508,0 +57855,62,2.8501,0 +57856,62,2.8492,0 +57857,62,2.8484,0 +57858,62,2.8476,0 +57859,62,2.847,0 +57860,62,2.8466,0 +57861,62,2.8463,0 +57862,62,2.846,0 +57863,62,2.8457,0 +57864,62,2.8456,0 +57865,62,2.8454,0 +57866,62,2.8452,0 +57867,62,2.8451,0 +57868,62,2.8447,0 +57869,62,2.8443,0 +57870,62,2.8438,0 +57871,62,2.8434,0 +57872,62,2.8428,0 +57873,62,2.842,0 +57874,62,2.841,0 +57875,62,2.8399,0 +57876,62,2.8387,0 +57877,62,2.8373,0 +57878,62,2.836,0 +57879,62,2.8345,0 +57880,62,2.8332,0 +57881,62,2.8321,0 +57882,62,2.831,0 +57883,62,2.8301,0 +57884,62,2.8292,0 +57885,62,2.8285,0 +57886,62,2.828,0 +57887,62,2.8273,0 +57888,62,2.8268,0 +57889,62,2.8265,0 +57890,62,2.8259,0 +57891,62,2.8255,0 +57892,62,2.8251,0 +57893,62,2.8247,0 +57894,62,2.8242,0 +57895,62,2.8239,0 +57896,62,2.8236,0 +57897,62,2.8233,0 +57898,62,2.8231,0 +57899,62,2.8228,0 +57900,62,2.8225,0 +57901,62,2.8224,0 +57902,62,2.8221,0 +57903,62,2.822,0 +57905,62,2.8219,0 +57906,62,2.822,0 +57907,62,2.8221,0 +57908,62,2.8219,0 +57910,62,2.8216,0 +57911,62,2.8214,0 +57912,62,2.8209,0 +57913,62,2.8206,0 +57914,62,2.8204,0 +57915,62,2.8197,0 +57916,62,2.8192,0 +57917,62,2.8185,0 +57918,62,2.8178,0 +57919,62,2.8172,0 +57920,62,2.8164,0 +57921,62,2.8152,0 +57922,62,2.8141,0 +57923,62,2.8128,0 +57924,62,2.8115,0 +57925,62,2.8101,0 +57926,62,2.8088,0 +57927,62,2.8074,0 +57928,62,2.8061,0 +57929,62,2.8048,0 +57930,62,2.8033,0 +57931,62,2.8019,0 +57932,62,2.8005,0 +57933,62,2.7992,0 +57934,62,2.7979,0 +57935,62,2.7965,0 +57936,62,2.7949,0 +57937,62,2.7933,0 +57938,62,2.7918,0 +57939,62,2.7901,0 +57940,62,2.7883,0 +57941,62,2.7865,0 +57942,62,2.7845,0 +57943,62,2.7823,0 +57944,62,2.78,0 +57945,62,2.7775,0 +57946,62,2.775,0 +57947,62,2.7722,0 +57948,62,2.7694,0 +57949,62,2.7664,0 +57950,70,0.24819,0 +57951,70,0.24933,0 +57952,70,0.24998,0 +57953,70,0.25005,0 +57954,70,0.24965,0 +57955,70,0.24886,0 +57956,70,0.24789,0 +57957,70,0.24701,0 +57958,70,0.24645,0 +57959,70,0.24646,0 +57960,70,0.2473,0 +57961,70,0.24929,0 +57962,70,0.2527,0 +57963,70,0.25768,0 +57964,70,0.2644,0 +57965,70,0.27303,0 +57966,70,0.28364,0 +57967,70,0.29627,0 +57968,70,0.31073,0 +57969,70,0.32694,0 +57970,70,0.34435,0 +57971,70,0.36271,0 +57972,70,0.38148,0 +57973,70,0.40027,0 +57974,70,0.41859,0 +57975,70,0.43604,0 +57976,70,0.45222,0 +57977,70,0.46715,0 +57978,70,0.48088,0 +57979,70,0.49333,0 +57980,70,0.50487,0 +57981,70,0.51581,0 +57982,70,0.5265,0 +57983,70,0.53744,0 +57984,70,0.54892,0 +57985,70,0.56125,0 +57986,70,0.57472,0 +57987,70,0.58941,0 +57988,70,0.60533,0 +57989,70,0.62232,0 +57990,70,0.64003,0 +57991,70,0.65796,0 +57992,70,0.6756,0 +57993,70,0.69246,0 +57994,70,0.70821,0 +57995,70,0.72249,0 +57996,70,0.73546,0 +57997,70,0.74726,0 +57998,70,0.75822,0 +57999,70,0.76869,0 +58000,70,0.77905,0 +58001,70,0.78984,0 +58002,70,0.80158,0 +58003,70,0.81483,0 +58004,70,0.82982,0 +58005,70,0.84644,0 +58006,70,0.86426,0 +58007,70,0.88238,0 +58008,70,0.89963,0 +58009,70,0.91457,0 +58010,70,0.92586,0 +58011,70,0.9323,0 +58012,70,0.93268,0 +58013,70,0.92594,0 +58014,70,0.91141,0 +58015,70,0.88894,0 +58016,70,0.85893,0 +58017,70,0.82268,0 +58018,70,0.78176,0 +58019,70,0.7383,0 +58020,70,0.6945,0 +58021,70,0.65244,0 +58022,70,0.61425,0 +58023,70,0.58222,0 +58024,70,0.55766,0 +58025,70,0.54139,0 +58026,70,0.53345,0 +58028,70,0.5407,0 +58029,70,0.55377,0 +58030,70,0.57162,0 +58031,70,0.59336,0 +58032,70,0.61811,0 +58033,70,0.64493,0 +58034,70,0.67348,0 +58035,70,0.70374,0 +58036,70,0.73609,0 +58037,70,0.77094,0 +58038,70,0.80897,0 +58039,70,0.85078,0 +58040,70,0.89609,0 +58041,70,0.94461,0 +58042,70,0.99546,0 +58043,70,1.0465,0 +58044,70,1.0952,0 +58045,70,1.1382,0 +58046,70,1.1725,0 +58047,70,1.1939,0 +58048,70,1.2014,0 +58049,70,1.1928,0 +58050,70,1.1694,0 +58051,70,1.1314,0 +58052,70,1.0825,0 +58053,70,1.0254,0 +58054,70,0.96488,0 +58055,70,0.90533,0 +58056,70,0.85089,0 +58057,70,0.80388,0 +58058,70,0.76588,0 +58059,70,0.73716,0 +58060,70,0.71691,0 +58061,70,0.70434,0 +58062,70,0.69747,0 +58063,70,0.69396,0 +58064,70,0.6914,0 +58065,70,0.68794,0 +58066,70,0.6823,0 +58067,70,0.67323,0 +58068,70,0.65968,0 +58069,70,0.64089,0 +58070,70,0.61646,0 +58071,70,0.58741,0 +58072,70,0.55531,0 +58073,70,0.52136,0 +58074,70,0.48803,0 +58075,70,0.45787,0 +58076,70,0.43309,0 +58077,70,0.41625,0 +58078,70,0.40831,0 +58079,70,0.40845,0 +58080,70,0.41657,0 +58081,70,0.43038,0 +58082,70,0.44659,0 +58083,70,0.4614,0 +58084,70,0.47017,0 +58085,70,0.46864,0 +58086,70,0.45395,0 +58087,70,0.42318,0 +58088,70,0.37665,0 +58089,70,0.3166,0 +58090,70,0.24676,0 +58091,70,0.17225,0 +58092,70,0.099557,0 +58093,70,0.034788,0 +58094,24,-0.017117,0 +58095,24,-0.054855,0 +58096,24,-0.079541,0 +58097,24,-0.093245,0 +58098,24,-0.099045,0 +58099,24,-0.10107,0 +58100,24,-0.10195,0 +58101,24,-0.10146,0 +58102,24,-0.096283,0 +58103,24,-0.081747,0 +58104,24,-0.054466,0 +58105,24,-0.012284,0 +58106,24,0.046151,0 +58107,24,0.11862,0 +58108,24,0.19866,0 +58109,24,0.27677,0 +58110,24,0.34221,0 +58111,24,0.38671,0 +58112,24,0.40493,0 +58113,24,0.39387,0 +58114,24,0.35649,0 +58115,24,0.29978,0 +58116,24,0.23377,0 +58117,24,0.16962,0 +58118,23,0.11593,0 +58119,23,0.079111,0 +58120,39,0.062551,0 +58121,39,0.068198,0 +58122,39,0.097394,0 +58123,39,0.15043,0 +58124,39,0.22727,0 +58125,39,0.32738,0 +58126,39,0.45036,0 +58127,39,0.59491,0 +58128,39,0.75769,0 +58129,39,0.9342,0 +58130,39,1.1188,0 +58131,39,1.3049,0 +58132,39,1.4845,0 +58133,39,1.6487,0 +58134,39,1.7903,0 +58135,39,1.9053,0 +58136,39,1.991,0 +58137,39,2.0489,0 +58138,39,2.0828,0 +58139,39,2.0984,0 +58140,39,2.1039,0 +58141,39,2.1079,0 +58142,39,2.1163,0 +58143,39,2.133,0 +58144,39,2.1601,0 +58145,39,2.1971,0 +58146,39,2.2434,0 +58147,39,2.2966,0 +58148,39,2.3541,0 +58149,39,2.4123,0 +58150,39,2.4684,0 +58151,39,2.5199,0 +58152,39,2.5651,0 +58153,39,2.6028,0 +58154,39,2.6335,0 +58155,39,2.6582,0 +58156,39,2.6782,0 +58157,39,2.6951,0 +58158,39,2.7103,0 +58159,39,2.7246,0 +58160,39,2.7385,0 +58161,39,2.7524,0 +58162,39,2.7661,0 +58163,39,2.7795,0 +58164,39,2.7926,0 +58165,39,2.8053,0 +58166,39,2.8176,0 +58167,39,2.8298,0 +58168,39,2.8424,0 +58169,39,2.8565,0 +58170,39,2.873,0 +58171,39,2.8926,0 +58172,39,2.916,0 +58173,39,2.9437,0 +58174,39,2.9758,0 +58175,39,3.0123,0 +58176,39,3.0524,0 +58177,39,3.0952,0 +58178,39,3.1402,0 +58179,39,3.1863,0 +58180,39,3.2323,0 +58181,39,3.2769,0 +58182,39,3.3189,0 +58183,39,3.3574,0 +58184,39,3.3914,0 +58185,39,3.4201,0 +58186,39,3.4435,0 +58187,39,3.4615,0 +58188,39,3.4747,0 +58189,39,3.4838,0 +58190,39,3.4898,0 +58191,52,3.494,0 +58192,52,3.4976,0 +58193,52,3.5016,0 +58194,52,3.5067,0 +58195,52,3.5138,0 +58196,52,3.5234,0 +58197,52,3.5357,0 +58198,52,3.5506,0 +58199,52,3.5682,0 +58200,52,3.5882,0 +58201,52,3.6101,0 +58202,52,3.6331,0 +58203,52,3.6564,0 +58204,52,3.6791,0 +58205,52,3.7003,0 +58206,52,3.7191,0 +58207,52,3.7349,0 +58208,52,3.7468,0 +58209,52,3.7543,0 +58210,52,3.7564,0 +58211,52,3.7528,0 +58212,52,3.743,0 +58213,52,3.7272,0 +58214,52,3.7054,0 +58215,52,3.6783,0 +58216,52,3.6467,0 +58217,52,3.6116,0 +58218,52,3.5738,0 +58219,52,3.5339,0 +58220,52,3.4928,0 +58221,52,3.451,0 +58222,52,3.4096,0 +58223,52,3.3696,0 +58224,52,3.3314,0 +58225,52,3.2955,0 +58226,52,3.2624,0 +58227,52,3.2319,0 +58228,52,3.2039,0 +58229,52,3.1781,0 +58230,52,3.1538,0 +58231,52,3.1305,0 +58232,52,3.1081,0 +58233,52,3.0861,0 +58234,52,3.0641,0 +58235,52,3.0416,0 +58236,52,3.0183,0 +58237,52,2.9939,0 +58238,52,2.9681,0 +58239,52,2.9405,0 +58240,52,2.911,0 +58241,52,2.8793,0 +58242,52,2.8457,0 +58243,52,2.8105,0 +58244,52,2.7737,0 +58245,52,2.7356,0 +58246,52,2.6964,0 +58247,52,2.6566,0 +58248,52,2.6165,0 +58249,52,2.5766,0 +58250,52,2.5371,0 +58251,52,2.4988,0 +58252,52,2.4622,0 +58253,52,2.4286,0 +58254,52,2.3983,0 +58255,52,2.3723,0 +58256,52,2.3508,0 +58257,52,2.3344,0 +58258,52,2.3229,0 +58259,52,2.3167,0 +58260,52,2.3155,0 +58261,52,2.3189,0 +58262,52,2.327,0 +58263,52,2.3393,0 +58264,52,2.3558,0 +58265,52,2.376,0 +58266,52,2.3994,0 +58267,52,2.4256,0 +58268,52,2.4538,0 +58269,52,2.4835,0 +58270,52,2.5141,0 +58271,52,2.545,0 +58272,52,2.5757,0 +58273,52,2.6057,0 +58274,52,2.635,0 +58275,52,2.6632,0 +58276,52,2.6902,0 +58277,52,2.7159,0 +58278,52,2.7399,0 +58279,52,2.7624,0 +58280,52,2.7826,0 +58281,52,2.8008,0 +58282,52,2.8168,0 +58283,52,2.8303,0 +58284,52,2.8417,0 +58285,52,2.8504,0 +58286,52,2.8569,0 +58287,52,2.861,0 +58288,52,2.863,0 +58289,52,2.8631,0 +58290,51,2.8611,0 +58291,51,2.8574,0 +58292,51,2.8522,0 +58293,51,2.8457,0 +58294,51,2.8384,0 +58295,51,2.8305,0 +58296,51,2.8227,0 +58297,51,2.8153,0 +58298,51,2.8089,0 +58299,51,2.8038,0 +58300,51,2.8007,0 +58301,51,2.7995,0 +58302,51,2.8007,0 +58303,51,2.8041,0 +58304,51,2.8096,0 +58305,51,2.8173,0 +58306,51,2.8267,0 +58307,51,2.8376,0 +58308,51,2.8495,0 +58309,51,2.862,0 +58310,62,2.8748,0 +58311,62,2.8876,0 +58312,62,2.8997,0 +58313,62,2.9111,0 +58314,62,2.9211,0 +58315,62,2.9296,0 +58316,62,2.9364,0 +58317,62,2.9411,0 +58318,62,2.9441,0 +58319,62,2.9449,0 +58320,62,2.944,0 +58321,62,2.9415,0 +58322,62,2.9377,0 +58323,62,2.9333,0 +58324,62,2.9284,0 +58325,62,2.9237,0 +58326,62,2.9196,0 +58327,62,2.9167,0 +58328,62,2.9154,0 +58329,62,2.9166,0 +58330,62,2.9203,0 +58331,62,2.927,0 +58332,62,2.9372,0 +58333,62,2.9506,0 +58334,62,2.968,0 +58335,62,2.9888,0 +58336,62,3.0128,0 +58337,62,3.0401,0 +58338,62,3.0699,0 +58339,62,3.1021,0 +58340,62,3.136,0 +58341,62,3.1712,0 +58342,62,3.2072,0 +58343,62,3.2436,0 +58344,62,3.2799,0 +58345,62,3.3155,0 +58346,62,3.3501,0 +58347,62,3.383,0 +58348,62,3.414,0 +58349,62,3.4427,0 +58350,62,3.4688,0 +58351,62,3.492,0 +58352,62,3.5128,0 +58353,62,3.5307,0 +58354,62,3.5464,0 +58355,62,3.5601,0 +58356,62,3.572,0 +58357,62,3.5826,0 +58358,62,3.5924,0 +58359,62,3.6018,0 +58360,62,3.6112,0 +58361,62,3.621,0 +58362,62,3.6317,0 +58363,62,3.6438,0 +58364,62,3.6575,0 +58365,62,3.6735,0 +58366,62,3.6919,0 +58367,62,3.7127,0 +58368,62,3.7363,0 +58369,62,3.7625,0 +58370,62,3.7909,0 +58371,62,3.8214,0 +58372,62,3.8537,0 +58373,62,3.8872,0 +58374,62,3.9217,0 +58375,62,3.9567,0 +58376,62,3.9919,0 +58377,62,4.0268,0 +58378,62,4.0609,0 +58379,62,4.0938,0 +58380,62,4.1251,0 +58381,62,4.1542,0 +58382,62,4.1802,0 +58383,62,4.203,0 +58384,62,4.2222,0 +58385,62,4.2368,0 +58386,62,4.2472,0 +58387,62,4.2535,0 +58388,62,4.2553,0 +58389,62,4.2527,0 +58390,62,4.2465,0 +58391,62,4.237,0 +58392,62,4.2239,0 +58393,62,4.2083,0 +58394,62,4.1905,0 +58395,62,4.1708,0 +58396,62,4.1498,0 +58397,62,4.1279,0 +58398,62,4.1059,0 +58399,62,4.0844,0 +58400,62,4.0642,0 +58401,62,4.0456,0 +58402,62,4.0294,0 +58403,62,4.0165,0 +58404,62,4.0071,0 +58405,62,4.0014,0 +58406,62,4,0 +58407,62,4.0031,0 +58408,62,4.0103,0 +58409,62,4.0215,0 +58410,62,4.0369,0 +58411,62,4.0564,0 +58412,62,4.0794,0 +58413,62,4.1055,0 +58414,62,4.1347,0 +58415,62,4.1663,0 +58416,62,4.1995,0 +58417,62,4.2338,0 +58418,62,4.2687,0 +58419,62,4.3035,0 +58420,62,4.3375,0 +58421,62,4.3701,0 +58422,62,4.4009,0 +58423,62,4.4294,0 +58424,62,4.4556,0 +58425,62,4.4793,0 +58426,62,4.5002,0 +58427,62,4.518,0 +58428,62,4.5327,0 +58429,62,4.5444,0 +58430,62,4.5529,0 +58431,62,4.5578,0 +58432,62,4.5595,0 +58433,62,4.5583,0 +58434,62,4.5543,0 +58435,62,4.5477,0 +58436,62,4.5389,0 +58437,62,4.5285,0 +58438,62,4.5168,0 +58439,62,4.5042,0 +58440,62,4.4911,0 +58441,62,4.4778,0 +58442,62,4.4646,0 +58443,62,4.4516,0 +58444,62,4.439,0 +58445,62,4.427,0 +58446,62,4.4158,0 +58447,62,4.4055,0 +58448,62,4.3963,0 +58449,62,4.3883,0 +58450,62,4.3815,0 +58451,62,4.3762,0 +58452,62,4.3722,0 +58453,62,4.3698,0 +58454,62,4.369,0 +58455,62,4.3697,0 +58456,62,4.3718,0 +58457,62,4.3751,0 +58458,62,4.3797,0 +58459,62,4.3852,0 +58460,62,4.3914,0 +58461,62,4.3981,0 +58462,62,4.405,0 +58463,62,4.4118,0 +58464,62,4.4183,0 +58465,62,4.4242,0 +58466,62,4.4295,0 +58467,62,4.4338,0 +58468,62,4.4368,0 +58469,62,4.4385,0 +58470,62,4.4388,0 +58471,62,4.4376,0 +58472,62,4.435,0 +58473,62,4.4306,0 +58474,62,4.4248,0 +58475,62,4.4177,0 +58476,62,4.4097,0 +58477,62,4.4008,0 +58478,62,4.3916,0 +58479,62,4.3823,0 +58480,62,4.3734,0 +58481,62,4.365,0 +58482,62,4.3576,0 +58483,62,4.3513,0 +58484,62,4.3465,0 +58485,62,4.3432,0 +58486,62,4.3415,0 +58488,62,4.3431,0 +58489,62,4.3462,0 +58490,62,4.3509,0 +58491,62,4.3569,0 +58492,62,4.3641,0 +58493,62,4.3723,0 +58494,62,4.381,0 +58495,62,4.3901,0 +58496,62,4.3991,0 +58497,62,4.4077,0 +58498,62,4.4157,0 +58499,62,4.4228,0 +58500,62,4.4287,0 +58501,62,4.4333,0 +58502,62,4.4365,0 +58503,62,4.4385,0 +58504,62,4.4393,0 +58505,62,4.4392,0 +58506,62,4.4382,0 +58507,62,4.4367,0 +58508,62,4.4348,0 +58509,62,4.4329,0 +58510,62,4.4309,0 +58511,62,4.4293,0 +58512,62,4.428,0 +58513,62,4.4272,0 +58514,62,4.4273,0 +58515,62,4.4282,0 +58516,62,4.43,0 +58517,62,4.4327,0 +58518,62,4.4364,0 +58519,62,4.4411,0 +58520,62,4.4468,0 +58521,62,4.4532,0 +58522,62,4.4603,0 +58523,62,4.4677,0 +58524,62,4.4752,0 +58525,62,4.4826,0 +58526,62,4.4895,0 +58527,62,4.4956,0 +58528,62,4.5006,0 +58529,62,4.5045,0 +58530,62,4.5069,0 +58531,62,4.5076,0 +58532,62,4.5066,0 +58533,62,4.5035,0 +58534,62,4.4985,0 +58535,62,4.4916,0 +58536,62,4.4829,0 +58537,62,4.4727,0 +58538,62,4.461,0 +58539,62,4.448,0 +58540,62,4.434,0 +58541,62,4.4193,0 +58542,62,4.404,0 +58543,62,4.3884,0 +58544,62,4.3727,0 +58545,63,4.357,0 +58546,63,4.3414,0 +58547,63,4.326,0 +58548,63,4.3109,0 +58549,63,4.2961,0 +58550,63,4.2815,0 +58551,63,4.2673,0 +58552,63,4.2533,0 +58553,63,4.2395,0 +58554,63,4.2257,0 +58555,63,4.2117,0 +58556,63,4.1972,0 +58557,63,4.1822,0 +58558,63,4.1661,0 +58559,63,4.1489,0 +58560,63,4.1303,0 +58561,63,4.1099,0 +58562,63,4.0876,0 +58563,63,4.0631,0 +58564,63,4.0361,0 +58565,63,4.0066,0 +58566,63,3.9745,0 +58567,63,3.9398,0 +58568,63,3.9026,0 +58569,63,3.8629,0 +58570,63,3.8208,0 +58571,63,3.7764,0 +58572,63,3.7302,0 +58573,63,3.6826,0 +58574,63,3.6338,0 +58575,63,3.5842,0 +58576,63,3.5341,0 +58577,63,3.4842,0 +58578,63,3.4348,0 +58579,63,3.3865,0 +58580,63,3.3398,0 +58581,63,3.295,0 +58582,63,3.2526,0 +58583,63,3.2131,0 +58584,63,3.177,0 +58585,63,3.1443,0 +58586,63,3.1154,0 +58587,63,3.0904,0 +58588,63,3.0692,0 +58589,63,3.0518,0 +58590,63,3.0383,0 +58591,63,3.0282,0 +58592,63,3.0211,0 +58593,63,3.0166,0 +58594,63,3.0144,0 +58595,63,3.0139,0 +58596,63,3.0146,0 +58597,63,3.0159,0 +58598,63,3.0174,0 +58599,63,3.0183,0 +58600,63,3.0184,0 +58601,63,3.017,0 +58602,63,3.0137,0 +58603,63,3.0079,0 +58604,63,2.9992,0 +58605,63,2.9873,0 +58606,63,2.9721,0 +58607,63,2.9534,0 +58608,63,2.9313,0 +58609,63,2.9057,0 +58610,63,2.8766,0 +58611,63,2.8441,0 +58612,63,2.8085,0 +58613,63,2.7702,0 +58614,63,2.7295,0 +58615,63,2.6865,0 +58616,63,2.6416,0 +58617,63,2.5949,0 +58618,63,2.5469,0 +58619,63,2.4979,0 +58620,63,2.4482,0 +58621,63,2.3982,0 +58622,63,2.3482,0 +58623,63,2.2985,0 +58624,63,2.2493,0 +58625,63,2.201,0 +58626,63,2.1536,0 +58627,63,2.1073,0 +58628,63,2.0621,0 +58629,63,2.018,0 +58630,63,1.9751,0 +58631,63,1.9333,0 +58632,63,1.8928,0 +58633,63,1.8535,0 +58634,63,1.8154,0 +58635,63,1.7785,0 +58636,63,1.7427,0 +58637,63,1.7081,0 +58638,63,1.6747,0 +58639,63,1.6425,0 +58640,63,1.6115,0 +58641,63,1.5813,0 +58642,63,1.552,0 +58643,63,1.5234,0 +58644,63,1.4952,0 +58645,63,1.4674,0 +58646,63,1.4398,0 +58647,63,1.4124,0 +58648,63,1.3851,0 +58649,63,1.3578,0 +58650,63,1.3305,0 +58651,63,1.3031,0 +58652,63,1.2756,0 +58653,63,1.2482,0 +58654,63,1.2207,0 +58655,63,1.1932,0 +58656,63,1.1656,0 +58657,63,1.1379,0 +58658,63,1.1102,0 +58659,63,1.0825,0 +58660,63,1.0548,0 +58661,63,1.0273,0 +58662,63,0.99998,0 +58663,63,0.973,0 +58664,63,0.94645,0 +58665,63,0.92037,0 +58666,63,0.89481,0 +58667,63,0.86983,0 +58668,63,0.84548,0 +58669,63,0.82177,0 +58670,63,0.79863,0 +58671,63,0.77596,0 +58672,63,0.7537,0 +58673,63,0.73181,0 +58674,63,0.71026,0 +58675,63,0.68902,0 +58676,63,0.66794,0 +58677,63,0.64691,0 +58678,63,0.62581,0 +58679,63,0.60453,0 +58680,63,0.58298,0 +58681,63,0.56109,0 +58682,63,0.53878,0 +58683,63,0.51594,0 +58684,63,0.49247,0 +58685,63,0.46818,0 +58686,63,0.44309,0 +58687,63,0.41721,0 +58688,63,0.39056,0 +58689,63,0.36315,0 +58690,63,0.3349,0 +58691,63,0.30592,0 +58692,63,0.27629,0 +58693,63,0.24611,0 +58694,63,0.21545,0 +58695,63,0.18447,0 +58696,63,0.15327,0 +58697,63,0.12194,0 +58698,63,0.090551,0 +58699,63,0.059161,0 +58700,63,0.027865,0 +58701,63,-0.0032453,0 +58702,63,-0.034081,0 +58703,63,-0.064521,0 +58704,63,-0.094559,0 +58705,63,-0.12414,0 +58706,63,-0.15317,0 +58707,63,-0.1815,0 +58708,63,-0.20912,0 +58709,63,-0.23601,0 +58710,63,-0.2621,0 +58711,63,-0.28735,0 +58712,63,-0.31178,0 +58713,63,-0.33535,0 +58714,63,-0.35792,0 +58715,63,-0.37958,0 +58716,63,-0.40034,0 +58717,63,-0.42016,0 +58718,63,-0.43896,0 +58719,63,-0.45688,0 +58720,63,-0.47394,0 +58721,63,-0.49004,0 +58722,63,-0.5053,0 +58723,63,-0.51983,0 +58724,63,-0.53363,0 +58725,63,-0.54672,0 +58726,63,-0.55921,0 +58727,63,-0.57115,0 +58728,63,-0.58265,0 +58729,63,-0.59395,0 +58730,63,-0.60517,0 +58731,63,-0.61647,0 +58732,63,-0.62798,0 +58733,63,-0.63992,0 +58734,63,-0.65253,0 +58735,63,-0.66591,0 +58736,63,-0.68033,0 +58737,63,-0.69582,0 +58738,63,-0.71245,0 +58739,63,-0.73044,0 +58740,63,-0.74968,0 +58741,63,-0.77045,0 +58742,63,-0.7927,0 +58743,63,-0.81633,0 +58744,63,-0.84139,0 +58745,63,-0.86757,0 +58746,63,-0.89502,0 +58747,63,-0.92358,0 +58748,63,-0.95316,0 +58749,63,-0.98369,0 +58750,63,-1.0149,0 +58751,63,-1.0471,0 +58752,63,-1.08,0 +58753,63,-1.1139,0 +58754,63,-1.1487,0 +58755,63,-1.1842,0 +58756,63,-1.2206,0 +58757,63,-1.2576,0 +58758,63,-1.2951,0 +58759,63,-1.3331,0 +58760,63,-1.3712,0 +58761,63,-1.4094,0 +58762,63,-1.4473,0 +58763,63,-1.4845,0 +58764,63,-1.5211,0 +58765,63,-1.5566,0 +58766,63,-1.5908,0 +58767,51,-1.6233,0 +58768,51,-1.6536,0 +58769,52,-1.6819,0 +58770,52,-1.7079,0 +58771,52,-1.7317,0 +58772,52,-1.7536,0 +58773,52,-1.7735,0 +58774,52,-1.792,0 +58775,52,-1.8097,0 +58776,52,-1.827,0 +58777,52,-1.8446,0 +58778,52,-1.863,0 +58779,52,-1.8827,0 +58780,52,-1.9047,0 +58781,52,-1.9292,0 +58782,52,-1.9569,0 +58783,52,-1.9884,0 +58784,52,-2.0236,0 +58785,52,-2.0635,0 +58786,52,-2.1073,0 +58787,52,-2.1554,0 +58788,52,-2.2073,0 +58789,52,-2.2625,0 +58790,52,-2.3206,0 +58791,52,-2.3807,0 +58792,52,-2.4422,0 +58793,52,-2.5043,0 +58794,52,-2.5662,0 +58795,52,-2.6268,0 +58796,52,-2.6856,0 +58797,52,-2.7414,0 +58798,52,-2.794,0 +58799,52,-2.8424,0 +58800,52,-2.8864,0 +58801,52,-2.9257,0 +58802,52,-2.9595,0 +58803,52,-2.9886,0 +58804,52,-3.0126,0 +58805,52,-3.0318,0 +58806,52,-3.0468,0 +58807,52,-3.0575,0 +58808,52,-3.0648,0 +58809,52,-3.0689,0 +58810,52,-3.0706,0 +58812,52,-3.0692,0 +58813,52,-3.0672,0 +58814,52,-3.065,0 +58815,52,-3.0632,0 +58816,52,-3.0623,0 +58817,52,-3.0629,0 +58818,52,-3.0651,0 +58819,52,-3.0693,0 +58820,52,-3.0756,0 +58821,52,-3.0841,0 +58822,52,-3.0952,0 +58823,52,-3.1086,0 +58824,52,-3.1245,0 +58825,52,-3.143,0 +58826,52,-3.1638,0 +58827,52,-3.1874,0 +58828,52,-3.2133,0 +58829,52,-3.2416,0 +58830,52,-3.2727,0 +58831,52,-3.3062,0 +58832,52,-3.3423,0 +58833,52,-3.381,0 +58834,52,-3.422,0 +58835,52,-3.4659,0 +58836,52,-3.5121,0 +58837,52,-3.5605,0 +58838,52,-3.6113,0 +58839,52,-3.6639,0 +58840,52,-3.7179,0 +58841,52,-3.7731,0 +58842,52,-3.8288,0 +58843,52,-3.8847,0 +58844,52,-3.9403,0 +58845,52,-3.995,0 +58846,52,-4.0482,0 +58847,52,-4.0999,0 +58848,52,-4.1493,0 +58849,52,-4.1962,0 +58850,52,-4.2406,0 +58851,52,-4.2818,0 +58852,52,-4.32,0 +58853,52,-4.3552,0 +58854,52,-4.3868,0 +58855,52,-4.4155,0 +58856,52,-4.4409,0 +58857,52,-4.4633,0 +58858,52,-4.4832,0 +58859,52,-4.5003,0 +58860,52,-4.5154,0 +58861,52,-4.5285,0 +58862,52,-4.5399,0 +58863,52,-4.5502,0 +58864,52,-4.5594,0 +58865,52,-4.5679,0 +58866,52,-4.5757,0 +58867,52,-4.583,0 +58868,52,-4.5897,0 +58869,52,-4.5958,0 +58870,52,-4.6012,0 +58871,52,-4.6058,0 +58872,52,-4.6091,0 +58873,52,-4.611,0 +58874,52,-4.6114,0 +58875,52,-4.6098,0 +58876,52,-4.6063,0 +58877,52,-4.6006,0 +58878,52,-4.5926,0 +58879,52,-4.5826,0 +58880,52,-4.5702,0 +58881,52,-4.5562,0 +58882,52,-4.5407,0 +58883,52,-4.5241,0 +58884,52,-4.5069,0 +58885,52,-4.4897,0 +58886,52,-4.4731,0 +58887,52,-4.4576,0 +58888,52,-4.4442,0 +58889,52,-4.4328,0 +58890,52,-4.4244,0 +58891,52,-4.419,0 +58892,52,-4.4169,0 +58893,52,-4.4185,0 +58894,52,-4.4233,0 +58895,52,-4.4316,0 +58896,52,-4.4426,0 +58897,52,-4.4558,0 +58898,52,-4.4709,0 +58899,52,-4.4869,0 +58900,52,-4.5032,0 +58901,52,-4.5191,0 +58902,52,-4.5339,0 +58903,52,-4.547,0 +58904,52,-4.5582,0 +58905,51,-4.5668,0 +58906,51,-4.5729,0 +58907,51,-4.5761,0 +58909,51,-4.5735,0 +58910,51,-4.5676,0 +58911,51,-4.5592,0 +58912,51,-4.5484,0 +58913,51,-4.5355,0 +58914,51,-4.5213,0 +58915,51,-4.5059,0 +58916,51,-4.4899,0 +58917,51,-4.4737,0 +58918,51,-4.4576,0 +58919,51,-4.4419,0 +58920,51,-4.4269,0 +58921,51,-4.4128,0 +58922,51,-4.3996,0 +58923,51,-4.3877,0 +58924,51,-4.3769,0 +58925,51,-4.3676,0 +58926,51,-4.3593,0 +58927,51,-4.3522,0 +58928,51,-4.3461,0 +58929,51,-4.3408,0 +58930,51,-4.3363,0 +58931,51,-4.3323,0 +58932,51,-4.329,0 +58933,51,-4.3261,0 +58934,51,-4.3235,0 +58935,51,-4.3212,0 +58936,51,-4.3191,0 +58937,51,-4.3169,0 +58938,51,-4.3145,0 +58939,51,-4.3117,0 +58940,51,-4.308,0 +58941,51,-4.3035,0 +58942,51,-4.2977,0 +58943,51,-4.2903,0 +58944,51,-4.281,0 +58945,51,-4.2691,0 +58946,51,-4.2548,0 +58947,51,-4.2371,0 +58948,51,-4.216,0 +58949,51,-4.1913,0 +58950,51,-4.1621,0 +58951,51,-4.1291,0 +58952,51,-4.0914,0 +58953,51,-4.0495,0 +58954,51,-4.0035,0 +58955,51,-3.9534,0 +58956,51,-3.9,0 +58957,51,-3.8434,0 +58958,51,-3.7847,0 +58959,51,-3.7244,0 +58960,51,-3.6635,0 +58961,51,-3.6025,0 +58962,51,-3.5426,0 +58963,51,-3.4841,0 +58964,51,-3.4277,0 +58965,51,-3.3741,0 +58966,51,-3.3233,0 +58967,51,-3.2761,0 +58968,51,-3.2323,0 +58969,51,-3.1921,0 +58970,51,-3.1557,0 +58971,51,-3.1225,0 +58972,51,-3.093,0 +58973,51,-3.0661,0 +58974,51,-3.0418,0 +58975,51,-3.0196,0 +58976,51,-2.9988,0 +58977,51,-2.9791,0 +58978,51,-2.9599,0 +58979,51,-2.9408,0 +58980,51,-2.9212,0 +58981,51,-2.9007,0 +58982,51,-2.8789,0 +58983,51,-2.8554,0 +58984,51,-2.8297,0 +58985,51,-2.8016,0 +58986,51,-2.7709,0 +58987,51,-2.7371,0 +58988,51,-2.7006,0 +58989,51,-2.661,0 +58990,51,-2.6187,0 +58991,51,-2.5738,0 +58992,51,-2.5263,0 +58993,51,-2.4769,0 +58994,51,-2.4252,0 +58995,51,-2.372,0 +58996,51,-2.3174,0 +58997,51,-2.2617,0 +58998,51,-2.2054,0 +58999,51,-2.149,0 +59000,51,-2.0929,0 +59001,51,-2.0379,0 +59002,51,-1.9841,0 +59003,51,-1.9323,0 +59004,51,-1.883,0 +59005,51,-1.8361,0 +59006,51,-1.7927,0 +59007,51,-1.7525,0 +59008,51,-1.7161,0 +59009,51,-1.6839,0 +59010,51,-1.6559,0 +59011,51,-1.633,0 +59012,51,-1.6147,0 +59013,51,-1.6018,0 +59014,51,-1.5939,0 +59015,51,-1.5912,0 +59016,51,-1.5941,0 +59017,51,-1.6016,0 +59018,51,-1.6149,0 +59019,51,-1.6326,0 +59020,51,-1.6551,0 +59021,51,-1.6818,0 +59022,51,-1.7119,0 +59023,51,-1.7453,0 +59024,51,-1.7806,0 +59025,51,-1.8173,0 +59026,51,-1.8542,0 +59027,51,-1.8905,0 +59028,51,-1.9249,0 +59029,51,-1.9567,0 +59030,51,-1.9846,0 +59031,51,-2.0081,0 +59032,51,-2.0258,0 +59033,51,-2.0377,0 +59034,51,-2.0429,0 +59035,51,-2.0413,0 +59036,51,-2.0333,0 +59037,51,-2.0182,0 +59038,51,-1.9976,0 +59039,51,-1.9709,0 +59040,51,-1.9398,0 +59041,51,-1.9045,0 +59042,51,-1.866,0 +59043,51,-1.8255,0 +59044,51,-1.7834,0 +59045,51,-1.7409,0 +59046,51,-1.699,0 +59047,51,-1.6582,0 +59048,51,-1.6194,0 +59049,51,-1.5835,0 +59050,51,-1.5507,0 +59051,51,-1.5223,0 +59052,51,-1.4977,0 +59053,51,-1.478,0 +59054,51,-1.4629,0 +59055,51,-1.4526,0 +59056,51,-1.4475,0 +59057,51,-1.4468,0 +59058,51,-1.4515,0 +59059,51,-1.4603,0 +59060,51,-1.4737,0 +59061,51,-1.4912,0 +59062,51,-1.5122,0 +59063,51,-1.5369,0 +59064,51,-1.5643,0 +59065,51,-1.5942,0 +59066,51,-1.6257,0 +59067,51,-1.6584,0 +59068,51,-1.6917,0 +59069,51,-1.7251,0 +59070,51,-1.7579,0 +59071,51,-1.7899,0 +59072,51,-1.8204,0 +59073,51,-1.8493,0 +59074,51,-1.8763,0 +59075,51,-1.9012,0 +59076,51,-1.9238,0 +59077,51,-1.9439,0 +59078,51,-1.9618,0 +59079,51,-1.9771,0 +59080,51,-1.9906,0 +59081,51,-2.0021,0 +59082,51,-2.0122,0 +59083,51,-2.0211,0 +59084,51,-2.0289,0 +59085,51,-2.0361,0 +59086,51,-2.0428,0 +59087,51,-2.0493,0 +59088,51,-2.0558,0 +59089,51,-2.0627,0 +59090,51,-2.0702,0 +59091,51,-2.0787,0 +59092,51,-2.0886,0 +59093,51,-2.1004,0 +59094,51,-2.1139,0 +59095,51,-2.1297,0 +59096,51,-2.1477,0 +59097,51,-2.1685,0 +59098,51,-2.1919,0 +59099,51,-2.2186,0 +59100,51,-2.2483,0 +59101,51,-2.2814,0 +59102,51,-2.3177,0 +59103,51,-2.3575,0 +59104,51,-2.4006,0 +59105,51,-2.4467,0 +59106,51,-2.4955,0 +59107,51,-2.5466,0 +59108,51,-2.5996,0 +59109,51,-2.6542,0 +59110,51,-2.7098,0 +59111,51,-2.7658,0 +59112,51,-2.8215,0 +59113,51,-2.8761,0 +59114,51,-2.9288,0 +59115,51,-2.9791,0 +59116,51,-3.026,0 +59117,51,-3.069,0 +59118,51,-3.1072,0 +59119,51,-3.1406,0 +59120,51,-3.1687,0 +59121,51,-3.1915,0 +59122,51,-3.2092,0 +59123,51,-3.2218,0 +59124,51,-3.2303,0 +59125,51,-3.2349,0 +59126,51,-3.2372,0 +59127,51,-3.2378,0 +59128,51,-3.2379,0 +59129,51,-3.2388,0 +59130,51,-3.2413,0 +59131,46,-3.2466,0 +59132,46,-3.2557,0 +59133,46,-3.2689,0 +59134,46,-3.2876,0 +59135,46,-3.3116,0 +59136,46,-3.3418,0 +59137,46,-3.3781,0 +59138,46,-3.4204,0 +59139,46,-3.4685,0 +59140,46,-3.5211,0 +59141,46,-3.5781,0 +59142,46,-3.6376,0 +59143,46,-3.6989,0 +59144,46,-3.7605,0 +59145,46,-3.8211,0 +59146,46,-3.8797,0 +59147,46,-3.9356,0 +59148,46,-3.9875,0 +59149,46,-4.0354,0 +59150,46,-4.0779,0 +59151,46,-4.1157,0 +59152,46,-4.1481,0 +59153,46,-4.1759,0 +59154,46,-4.1994,0 +59155,46,-4.2192,0 +59156,46,-4.2362,0 +59157,46,-4.2513,0 +59158,46,-4.2655,0 +59159,46,-4.2798,0 +59160,46,-4.2949,0 +59161,46,-4.3117,0 +59162,46,-4.3309,0 +59163,46,-4.353,0 +59164,46,-4.3789,0 +59165,46,-4.4086,0 +59166,46,-4.4426,0 +59167,46,-4.4804,0 +59168,46,-4.5216,0 +59169,46,-4.5658,0 +59170,45,-4.6119,0 +59171,45,-4.6592,0 +59172,48,-4.7065,0 +59173,48,-4.7529,0 +59174,48,-4.7974,0 +59175,48,-4.8399,0 +59176,48,-4.8795,0 +59177,48,-4.916,0 +59178,48,-4.9498,0 +59179,48,-4.9808,0 +59180,48,-5.0099,0 +59181,48,-5.0374,0 +59182,48,-5.0641,0 +59183,48,-5.0906,0 +59184,48,-5.1176,0 +59185,48,-5.1457,0 +59186,48,-5.1755,0 +59187,48,-5.2072,0 +59188,48,-5.241,0 +59189,48,-5.2772,0 +59190,48,-5.3155,0 +59191,48,-5.3559,0 +59192,48,-5.3978,0 +59193,48,-5.441,0 +59194,48,-5.4847,0 +59195,48,-5.5286,0 +59196,48,-5.5717,0 +59197,48,-5.6136,0 +59198,48,-5.6537,0 +59199,48,-5.6917,0 +59200,48,-5.7273,0 +59201,48,-5.7605,0 +59202,48,-5.7913,0 +59203,48,-5.8203,0 +59204,48,-5.8479,0 +59205,48,-5.875,0 +59206,48,-5.9022,0 +59207,48,-5.9302,0 +59208,48,-5.96,0 +59209,48,-5.992,0 +59210,48,-6.0274,0 +59211,48,-6.066,0 +59212,48,-6.1085,0 +59213,48,-6.1545,0 +59214,48,-6.2043,0 +59215,48,-6.2573,0 +59216,48,-6.3134,0 +59217,48,-6.3717,0 +59218,48,-6.4317,0 +59219,48,-6.4927,0 +59220,50,-6.5541,0 +59221,50,-6.6153,0 +59222,50,-6.6756,0 +59223,50,-6.7343,0 +59224,50,-6.7908,0 +59225,50,-6.8445,0 +59226,50,-6.895,0 +59227,50,-6.9414,0 +59228,50,-6.9832,0 +59229,50,-7.0194,0 +59230,50,-7.0496,0 +59231,50,-7.0734,0 +59232,50,-7.0906,0 +59233,50,-7.1015,0 +59234,50,-7.1061,0 +59235,50,-7.1057,0 +59236,50,-7.101,0 +59237,50,-7.0936,0 +59238,50,-7.0844,0 +59239,50,-7.0749,0 +59240,50,-7.0664,0 +59241,50,-7.0598,0 +59242,50,-7.0568,0 +59243,50,-7.0576,0 +59244,50,-7.0641,0 +59245,50,-7.0765,0 +59246,49,-7.0957,0 +59247,49,-7.1223,0 +59248,49,-7.1561,0 +59249,49,-7.198,0 +59250,49,-7.2466,0 +59251,49,-7.3026,0 +59252,49,-7.364,0 +59253,49,-7.4308,0 +59254,49,-7.5012,0 +59255,49,-7.5746,0 +59256,49,-7.6493,0 +59257,49,-7.7243,0 +59258,49,-7.7986,0 +59259,49,-7.8711,0 +59260,49,-7.941,0 +59261,49,-8.0078,0 +59262,49,-8.0707,0 +59263,49,-8.1299,0 +59264,49,-8.1848,0 +59265,49,-8.2359,0 +59266,49,-8.2827,0 +59267,49,-8.3256,0 +59268,49,-8.3639,0 +59269,49,-8.3983,0 +59270,49,-8.4279,0 +59271,49,-8.4533,0 +59272,49,-8.4732,0 +59273,49,-8.4883,0 +59274,49,-8.4976,0 +59275,49,-8.5016,0 +59276,49,-8.4995,0 +59277,49,-8.4921,0 +59278,49,-8.4789,0 +59279,49,-8.4607,0 +59280,49,-8.4372,0 +59281,49,-8.409,0 +59282,49,-8.3758,0 +59283,49,-8.338,0 +59284,49,-8.2952,0 +59285,49,-8.2477,0 +59286,49,-8.1952,0 +59287,49,-8.1384,0 +59288,49,-8.0777,0 +59289,49,-8.0144,0 +59290,49,-7.9499,0 +59291,49,-7.8858,0 +59292,49,-7.8237,0 +59293,49,-7.7653,0 +59294,49,-7.7117,0 +59295,49,-7.664,0 +59296,49,-7.6219,0 +59297,49,-7.5862,0 +59298,49,-7.5552,0 +59299,49,-7.5287,0 +59300,49,-7.5055,0 +59301,46,-7.4847,0 +59302,46,-7.4658,0 +59303,46,-7.4481,0 +59304,46,-7.4314,0 +59305,46,-7.4157,0 +59306,46,-7.4011,0 +59307,46,-7.3876,0 +59308,46,-7.3751,0 +59309,46,-7.3636,0 +59310,46,-7.3532,0 +59311,46,-7.344,0 +59312,46,-7.3358,0 +59313,46,-7.329,0 +59314,46,-7.3238,0 +59315,46,-7.3204,0 +59316,46,-7.3193,0 +59317,46,-7.3205,0 +59318,46,-7.3245,0 +59319,46,-7.331,0 +59320,46,-7.3401,0 +59321,46,-7.3513,0 +59322,46,-7.3643,0 +59323,46,-7.3784,0 +59324,46,-7.3927,0 +59325,46,-7.4068,0 +59326,46,-7.4199,0 +59327,46,-7.4315,0 +59328,46,-7.4413,0 +59329,46,-7.4486,0 +59330,46,-7.4534,0 +59331,46,-7.455,0 +59332,46,-7.4533,0 +59333,46,-7.4479,0 +59334,46,-7.4382,0 +59335,46,-7.4243,0 +59336,46,-7.4057,0 +59337,46,-7.3832,0 +59338,46,-7.357,0 +59339,46,-7.3281,0 +59340,46,-7.297,0 +59341,46,-7.2649,0 +59342,46,-7.2324,0 +59343,46,-7.2004,0 +59344,46,-7.1689,0 +59345,46,-7.1381,0 +59346,46,-7.1078,0 +59347,46,-7.0775,0 +59348,46,-7.0469,0 +59349,46,-7.0156,0 +59350,46,-6.9831,0 +59351,46,-6.9493,0 +59352,46,-6.9139,0 +59353,46,-6.8776,0 +59354,46,-6.8404,0 +59355,46,-6.8028,0 +59356,46,-6.765,0 +59357,46,-6.7274,0 +59358,46,-6.6898,0 +59359,46,-6.6522,0 +59360,46,-6.6142,0 +59361,46,-6.5757,0 +59362,46,-6.5365,0 +59363,46,-6.4965,0 +59364,46,-6.4563,0 +59365,46,-6.4164,0 +59366,46,-6.3776,0 +59367,46,-6.3403,0 +59368,46,-6.3049,0 +59369,46,-6.2717,0 +59370,46,-6.2402,0 +59371,46,-6.2098,0 +59372,46,-6.1797,0 +59373,46,-6.1487,0 +59374,46,-6.1156,0 +59375,46,-6.0794,0 +59376,44,-6.0388,0 +59377,44,-5.9922,0 +59378,46,-5.939,0 +59379,46,-5.8778,0 +59380,46,-5.8079,0 +59381,46,-5.7295,0 +59382,46,-5.6417,0 +59383,46,-5.5459,0 +59384,46,-5.4428,0 +59385,46,-5.3329,0 +59386,46,-5.2183,0 +59387,46,-5.1,0 +59388,46,-4.9794,0 +59389,46,-4.8577,0 +59390,46,-4.736,0 +59391,46,-4.6153,0 +59392,46,-4.4967,0 +59393,46,-4.3811,0 +59394,46,-4.269,0 +59395,46,-4.1618,0 +59396,46,-4.0593,0 +59397,46,-3.9628,0 +59398,46,-3.8721,0 +59399,46,-3.7874,0 +59400,46,-3.7087,0 +59401,46,-3.6351,0 +59402,46,-3.5671,0 +59403,46,-3.503,0 +59404,46,-3.443,0 +59405,46,-3.3857,0 +59406,46,-3.3309,0 +59407,46,-3.2778,0 +59408,46,-3.2258,0 +59409,46,-3.1745,0 +59410,46,-3.1232,0 +59411,46,-3.0716,0 +59412,46,-3.0193,0 +59413,46,-2.9661,0 +59414,46,-2.9118,0 +59415,46,-2.8564,0 +59416,46,-2.7998,0 +59417,46,-2.7421,0 +59418,46,-2.6837,0 +59419,46,-2.6248,0 +59420,46,-2.566,0 +59421,46,-2.5081,0 +59422,46,-2.4519,0 +59423,46,-2.3983,0 +59424,46,-2.3481,0 +59425,46,-2.3017,0 +59426,46,-2.2602,0 +59427,46,-2.2231,0 +59428,46,-2.1907,0 +59429,46,-2.1625,0 +59430,46,-2.1378,0 +59431,46,-2.1161,0 +59432,46,-2.0956,0 +59433,46,-2.0753,0 +59434,46,-2.0534,0 +59435,44,-2.0283,0 +59436,44,-1.998,0 +59437,45,-1.9615,0 +59438,45,-1.9178,0 +59439,45,-1.8653,0 +59440,45,-1.8049,0 +59441,45,-1.7361,0 +59442,45,-1.6596,0 +59443,45,-1.5767,0 +59444,45,-1.4881,0 +59445,45,-1.3958,0 +59446,45,-1.3015,0 +59447,45,-1.2068,0 +59448,45,-1.1137,0 +59449,45,-1.0242,0 +59450,45,-0.93972,0 +59451,45,-0.86151,0 +59452,45,-0.79156,0 +59453,45,-0.72962,0 +59454,45,-0.67666,0 +59455,45,-0.63304,0 +59456,45,-0.598,0 +59457,45,-0.57211,0 +59458,45,-0.55418,0 +59459,45,-0.54341,0 +59460,45,-0.53979,0 +59461,45,-0.54151,0 +59462,45,-0.54784,0 +59463,45,-0.5579,0 +59464,45,-0.57042,0 +59465,45,-0.58463,0 +59466,45,-0.59969,0 +59467,45,-0.61481,0 +59468,45,-0.62926,0 +59469,45,-0.64228,0 +59470,45,-0.65354,0 +59471,45,-0.66254,0 +59472,45,-0.66862,0 +59473,45,-0.67173,0 +59474,45,-0.67168,0 +59475,45,-0.66803,0 +59476,45,-0.66098,0 +59477,45,-0.65045,0 +59478,45,-0.63617,0 +59479,45,-0.61835,0 +59480,45,-0.5974,0 +59481,45,-0.57374,0 +59482,45,-0.54775,0 +59483,45,-0.52028,0 +59484,45,-0.49212,0 +59485,45,-0.46424,0 +59486,45,-0.43745,0 +59487,45,-0.41239,0 +59488,45,-0.38981,0 +59489,45,-0.37053,0 +59490,45,-0.3556,0 +59491,45,-0.34532,0 +59492,45,-0.33989,0 +59493,45,-0.33931,0 +59494,45,-0.34323,0 +59495,45,-0.35106,0 +59496,45,-0.36163,0 +59497,45,-0.37354,0 +59498,45,-0.38575,0 +59499,45,-0.39723,0 +59500,45,-0.40685,0 +59501,45,-0.41356,0 +59502,45,-0.41667,0 +59503,45,-0.41584,0 +59504,45,-0.41091,0 +59505,45,-0.40218,0 +59506,45,-0.39021,0 +59507,45,-0.37583,0 +59508,45,-0.36016,0 +59509,45,-0.3442,0 +59510,45,-0.32871,0 +59511,45,-0.31442,0 +59512,45,-0.30186,0 +59513,45,-0.29117,0 +59514,45,-0.28219,0 +59515,45,-0.27489,0 +59516,45,-0.26927,0 +59517,45,-0.26569,0 +59518,45,-0.26435,0 +59519,45,-0.26539,0 +59520,45,-0.26913,0 +59521,45,-0.2761,0 +59522,45,-0.28676,0 +59523,45,-0.30168,0 +59524,45,-0.32151,0 +59525,45,-0.34636,0 +59526,45,-0.37527,0 +59527,45,-0.40672,0 +59528,45,-0.43924,0 +59529,45,-0.47151,0 +59530,45,-0.50215,0 +59531,45,-0.52979,0 +59532,45,-0.55317,0 +59533,45,-0.57078,0 +59534,45,-0.58148,0 +59535,45,-0.58503,0 +59536,45,-0.58122,0 +59537,45,-0.57092,0 +59538,45,-0.55487,0 +59539,45,-0.53347,0 +59540,45,-0.50805,0 +59541,45,-0.48074,0 +59542,45,-0.45366,0 +59543,45,-0.42944,0 +59544,45,-0.41046,0 +59545,45,-0.39809,0 +59546,45,-0.39297,0 +59547,45,-0.39574,0 +59548,45,-0.40389,0 +59549,45,-0.41418,0 +59550,45,-0.42265,0 +59551,45,-0.42626,0 +59552,45,-0.4257,0 +59553,45,-0.42501,0 +59554,45,-0.43063,0 +59555,45,-0.44883,0 +59556,45,-0.48271,0 +59557,45,-0.53041,0 +59558,45,-0.58448,0 +59559,45,-0.63527,0 +59560,19,-0.67404,0 +59561,19,-0.69629,0 +59562,62,-0.70159,0 +59563,62,-0.69481,0 +59564,62,-0.68371,0 +59565,62,-0.67737,0 +59566,62,-0.68372,0 +59567,62,-0.70573,0 +59568,62,-0.74021,0 +59569,62,-0.77771,0 +59570,62,-0.80942,0 +59571,62,-0.82562,0 +59572,62,-0.82053,0 +59573,62,-0.79228,0 +59574,62,-0.74455,0 +59575,62,-0.6844,0 +59576,62,-0.61772,0 +59577,62,-0.55099,0 +59578,62,-0.48798,0 +59579,62,-0.43113,0 +59580,62,-0.38195,0 +59581,62,-0.33944,0 +59582,62,-0.30227,0 +59583,62,-0.27026,0 +59584,62,-0.24265,0 +59585,62,-0.21932,0 +59586,62,-0.20123,0 +59587,62,-0.18886,0 +59588,62,-0.18256,0 +59589,62,-0.18272,0 +59590,62,-0.18962,0 +59591,62,-0.2022,0 +59592,62,-0.21958,0 +59593,62,-0.24102,0 +59594,62,-0.26511,0 +59595,62,-0.29067,0 +59596,62,-0.31674,0 +59597,62,-0.3425,0 +59598,62,-0.3671,0 +59599,62,-0.39006,0 +59600,62,-0.41086,0 +59601,62,-0.42941,0 +59602,62,-0.44572,0 +59603,62,-0.45993,0 +59604,62,-0.47223,0 +59605,62,-0.48269,0 +59606,62,-0.49136,0 +59607,62,-0.4982,0 +59608,62,-0.50323,0 +59609,62,-0.5065,0 +59610,62,-0.50808,0 +59612,62,-0.50649,0 +59613,62,-0.50334,0 +59614,62,-0.49857,0 +59615,62,-0.49204,0 +59616,62,-0.48375,0 +59617,62,-0.47381,0 +59618,62,-0.46245,0 +59619,62,-0.45002,0 +59620,62,-0.43685,0 +59621,62,-0.42336,0 +59622,62,-0.40996,0 +59623,62,-0.39717,0 +59624,62,-0.38562,0 +59625,62,-0.37593,0 +59626,62,-0.36891,0 +59627,62,-0.36521,0 +59628,62,-0.36541,0 +59629,62,-0.36989,0 +59630,62,-0.379,0 +59631,62,-0.39259,0 +59632,62,-0.41036,0 +59633,62,-0.43189,0 +59634,62,-0.4567,0 +59635,62,-0.48392,0 +59636,62,-0.51268,0 +59637,62,-0.54205,0 +59638,62,-0.57103,0 +59639,62,-0.59862,0 +59640,62,-0.62406,0 +59641,62,-0.64667,0 +59642,62,-0.66538,0 +59643,62,-0.67988,0 +59644,62,-0.68998,0 +59645,62,-0.69517,0 +59646,62,-0.69554,0 +59647,62,-0.69137,0 +59648,62,-0.6824,0 +59649,62,-0.66924,0 +59650,62,-0.65236,0 +59651,62,-0.63163,0 +59652,62,-0.60803,0 +59653,62,-0.58185,0 +59654,62,-0.55369,0 +59655,62,-0.52442,0 +59656,62,-0.49464,0 +59657,62,-0.46503,0 +59658,62,-0.43626,0 +59659,62,-0.40902,0 +59660,62,-0.38402,0 +59661,62,-0.36198,0 +59662,62,-0.34329,0 +59663,62,-0.32876,0 +59664,62,-0.31852,0 +59665,62,-0.31344,0 +59666,62,-0.31326,0 +59667,62,-0.31866,0 +59668,62,-0.32905,0 +59669,62,-0.34462,0 +59670,62,-0.36477,0 +59671,62,-0.38925,0 +59672,62,-0.41755,0 +59673,62,-0.44884,0 +59674,62,-0.4826,0 +59675,62,-0.51776,0 +59676,62,-0.55372,0 +59677,62,-0.5896,0 +59678,62,-0.62449,0 +59679,62,-0.6577,0 +59680,62,-0.68849,0 +59681,62,-0.71591,0 +59682,62,-0.73989,0 +59683,62,-0.75921,0 +59684,62,-0.77411,0 +59685,62,-0.78393,0 +59686,62,-0.78833,0 +59687,62,-0.78789,0 +59688,62,-0.78171,0 +59689,62,-0.77106,0 +59690,62,-0.75585,0 +59691,62,-0.73657,0 +59692,62,-0.71414,0 +59693,62,-0.68859,0 +59694,62,-0.66113,0 +59695,62,-0.63222,0 +59696,62,-0.6026,0 +59697,62,-0.5729,0 +59698,62,-0.54384,0 +59699,62,-0.51594,0 +59700,62,-0.49003,0 +59701,62,-0.46655,0 +59702,62,-0.44568,0 +59703,62,-0.42813,0 +59704,62,-0.41346,0 +59705,62,-0.40203,0 +59706,62,-0.39362,0 +59707,62,-0.38773,0 +59708,62,-0.38452,0 +59709,62,-0.38316,0 +59710,62,-0.38331,0 +59711,62,-0.38451,0 +59712,62,-0.38619,0 +59713,62,-0.38789,0 +59714,62,-0.38905,0 +59715,62,-0.38921,0 +59716,62,-0.38758,0 +59717,62,-0.384,0 +59718,62,-0.37824,0 +59719,62,-0.36974,0 +59720,62,-0.35881,0 +59721,62,-0.3454,0 +59722,62,-0.32928,0 +59723,62,-0.31106,0 +59724,62,-0.29092,0 +59725,62,-0.26895,0 +59726,62,-0.2459,0 +59727,62,-0.2221,0 +59728,62,-0.19792,0 +59729,62,-0.17386,0 +59730,62,-0.15031,0 +59731,62,-0.12782,0 +59732,62,-0.10696,0 +59733,62,-0.088034,0 +59734,62,-0.071315,0 +59735,62,-0.057403,0 +59736,62,-0.046148,0 +59737,62,-0.037628,0 +59738,62,-0.031989,0 +59739,62,-0.029548,0 +59740,62,-0.029841,0 +59741,62,-0.032716,0 +59742,62,-0.038021,0 +59743,62,-0.045703,0 +59744,62,-0.055256,0 +59745,62,-0.066426,0 +59746,62,-0.078943,0 +59747,62,-0.092605,0 +59748,62,-0.10687,0 +59749,62,-0.12138,0 +59750,62,-0.13577,0 +59751,62,-0.14974,0 +59752,62,-0.16305,0 +59753,62,-0.17548,0 +59754,62,-0.18684,0 +59755,62,-0.19695,0 +59756,62,-0.2055,0 +59757,62,-0.21254,0 +59758,62,-0.21804,0 +59759,62,-0.222,0 +59760,62,-0.22439,0 +59761,62,-0.22504,0 +59762,62,-0.22407,0 +59763,62,-0.22159,0 +59764,62,-0.21769,0 +59765,62,-0.21245,0 +59766,62,-0.20594,0 +59767,62,-0.19817,0 +59768,62,-0.18938,0 +59769,62,-0.17967,0 +59770,62,-0.16915,0 +59771,62,-0.15791,0 +59772,62,-0.14608,0 +59773,62,-0.13366,0 +59774,62,-0.12079,0 +59775,62,-0.10756,0 +59776,62,-0.09404,0 +59777,62,-0.080327,0 +59778,62,-0.066503,0 +59779,62,-0.052646,0 +59780,62,-0.038812,0 +59781,62,-0.025044,0 +59782,62,-0.011402,0 +59783,62,0.0020502,0 +59784,62,0.015241,0 +59785,62,0.028114,0 +59786,62,0.04059,0 +59787,62,0.052691,0 +59788,62,0.064402,0 +59789,62,0.075713,0 +59790,62,0.086621,0 +59791,62,0.097132,0 +59792,64,0.10719,0 +59793,64,0.11681,0 +59794,64,0.12604,0 +59795,64,0.13489,0 +59796,64,0.14337,0 +59797,64,0.15144,0 +59798,64,0.15907,0 +59799,64,0.16618,0 +59800,64,0.17282,0 +59801,64,0.179,0 +59802,64,0.18474,0 +59803,64,0.19005,0 +59804,64,0.19492,0 +59805,64,0.19937,0 +59806,64,0.2034,0 +59807,64,0.20705,0 +59808,64,0.21032,0 +59809,64,0.21318,0 +59810,64,0.21564,0 +59811,64,0.2177,0 +59812,64,0.21933,0 +59813,64,0.2205,0 +59814,64,0.22126,0 +59815,64,0.22163,0 +59816,64,0.22162,0 +59817,64,0.22128,0 +59818,64,0.22062,0 +59819,64,0.21962,0 +59820,64,0.21821,0 +59821,64,0.21641,0 +59822,64,0.2142,0 +59823,64,0.21152,0 +59824,64,0.20831,0 +59825,64,0.20451,0 +59826,64,0.20008,0 +59827,64,0.19504,0 +59828,64,0.18934,0 +59829,64,0.18301,0 +59830,64,0.17612,0 +59831,64,0.1687,0 +59832,64,0.16081,0 +59833,64,0.15253,0 +59834,64,0.14392,0 +59835,64,0.13507,0 +59836,64,0.12607,0 +59837,64,0.11704,0 +59838,64,0.10815,0 +59839,64,0.099554,0 +59840,64,0.091396,0 +59841,64,0.083818,0 +59842,64,0.076997,0 +59843,64,0.071118,0 +59844,64,0.066324,0 +59845,64,0.062806,0 +59846,64,0.06054,0 +59847,64,0.059531,0 +59848,64,0.059756,0 +59849,64,0.061163,0 +59850,68,0.063702,0 +59851,68,0.067316,0 +59852,68,0.071928,0 +59853,68,0.077515,0 +59854,68,0.083959,0 +59855,68,0.091167,0 +59856,68,0.099068,0 +59857,68,0.10757,0 +59858,68,0.1166,0 +59859,68,0.12611,0 +59860,68,0.136,0 +59861,68,0.14619,0 +59862,68,0.15656,0 +59863,68,0.16704,0 +59864,68,0.1776,0 +59865,68,0.18824,0 +59866,68,0.19895,0 +59867,68,0.20975,0 +59868,68,0.22065,0 +59869,68,0.23162,0 +59870,68,0.24265,0 +59871,68,0.25365,0 +59872,68,0.26453,0 +59873,68,0.27516,0 +59874,68,0.28537,0 +59875,68,0.29494,0 +59876,68,0.30364,0 +59877,68,0.31123,0 +59878,68,0.31744,0 +59879,68,0.32194,0 +59880,68,0.32467,0 +59881,68,0.32551,0 +59882,68,0.32437,0 +59883,68,0.32114,0 +59884,68,0.3158,0 +59885,68,0.30834,0 +59886,68,0.29881,0 +59887,68,0.28729,0 +59888,68,0.2738,0 +59889,68,0.25854,0 +59890,68,0.24176,0 +59891,68,0.22368,0 +59892,68,0.20456,0 +59893,68,0.18469,0 +59894,68,0.16445,0 +59895,68,0.14421,0 +59896,68,0.12436,0 +59897,68,0.1053,0 +59898,68,0.08745,0 +59899,68,0.071188,0 +59900,68,0.056724,0 +59901,68,0.044267,0 +59902,68,0.033977,0 +59903,68,0.025947,0 +59904,68,0.020187,0 +59905,68,0.016648,0 +59906,68,0.015244,0 +59907,68,0.01585,0 +59908,68,0.018324,0 +59909,68,0.022524,0 +59910,68,0.028291,0 +59911,68,0.035353,0 +59912,68,0.043526,0 +59913,68,0.052586,0 +59914,68,0.06228,0 +59915,68,0.072373,0 +59916,68,0.082638,0 +59917,68,0.092845,0 +59918,68,0.10277,0 +59919,68,0.11219,0 +59920,68,0.12094,0 +59921,68,0.12885,0 +59922,68,0.13578,0 +59923,68,0.14168,0 +59924,68,0.14659,0 +59925,68,0.15054,0 +59926,68,0.15359,0 +59927,68,0.15583,0 +59928,68,0.15738,0 +59929,68,0.15837,0 +59930,68,0.15894,0 +59931,68,0.15922,0 +59932,68,0.15935,0 +59933,68,0.15947,0 +59934,68,0.15975,0 +59935,68,0.1603,0 +59936,68,0.16125,0 +59937,68,0.16272,0 +59938,68,0.16481,0 +59939,68,0.16759,0 +59940,68,0.17116,0 +59941,68,0.17556,0 +59942,68,0.18079,0 +59943,68,0.1868,0 +59944,68,0.19354,0 +59945,68,0.20093,0 +59946,68,0.20889,0 +59947,68,0.21729,0 +59948,68,0.22598,0 +59949,68,0.23479,0 +59950,68,0.24356,0 +59951,68,0.25211,0 +59952,68,0.26025,0 +59953,68,0.26781,0 +59954,68,0.27462,0 +59955,68,0.28055,0 +59956,68,0.28547,0 +59957,68,0.28926,0 +59958,68,0.29183,0 +59959,68,0.29313,0 +59961,68,0.29184,0 +59962,68,0.28932,0 +59963,68,0.28569,0 +59964,68,0.28106,0 +59965,68,0.27558,0 +59966,68,0.26937,0 +59967,68,0.2626,0 +59968,68,0.25548,0 +59969,68,0.2482,0 +59970,68,0.24096,0 +59971,68,0.23399,0 +59972,68,0.22746,0 +59973,68,0.22159,0 +59974,68,0.21655,0 +59975,68,0.21252,0 +59976,68,0.20966,0 +59977,68,0.20811,0 +59978,68,0.20798,0 +59979,68,0.20935,0 +59980,68,0.21224,0 +59981,68,0.21663,0 +59982,68,0.22247,0 +59983,68,0.22964,0 +59984,68,0.23801,0 +59985,68,0.24744,0 +59986,68,0.25774,0 +59987,68,0.26871,0 +59988,68,0.28011,0 +59989,68,0.29172,0 +59990,68,0.30327,0 +59991,68,0.31455,0 +59992,68,0.32532,0 +59993,68,0.33531,0 +59994,68,0.3443,0 +59995,68,0.35207,0 +59996,68,0.35839,0 +59997,68,0.36309,0 +59998,68,0.36602,0 +59999,68,0.36707,0 +60000,68,0.36618,0 +60001,68,0.36334,0 +60002,68,0.35855,0 +60003,68,0.35186,0 +60004,68,0.34338,0 +60005,68,0.33323,0 +60006,68,0.3216,0 +60007,68,0.3087,0 +60008,68,0.29479,0 +60009,68,0.28016,0 +60010,68,0.26508,0 +60011,68,0.24984,0 +60012,68,0.23471,0 +60013,68,0.22003,0 +60014,68,0.2061,0 +60015,68,0.19318,0 +60016,68,0.18155,0 +60017,68,0.1714,0 +60018,68,0.16293,0 +60019,68,0.15623,0 +60020,68,0.15141,0 +60021,68,0.1485,0 +60022,68,0.14751,0 +60023,68,0.14841,0 +60024,68,0.15107,0 +60025,68,0.15541,0 +60026,68,0.16127,0 +60027,68,0.16832,0 +60028,68,0.17628,0 +60029,68,0.18488,0 +60030,68,0.19383,0 +60031,68,0.20284,0 +60032,68,0.2116,0 +60033,68,0.21978,0 +60034,68,0.22709,0 +60035,68,0.23324,0 +60036,68,0.23799,0 +60037,68,0.24112,0 +60038,68,0.24245,0 +60039,68,0.24187,0 +60040,68,0.23927,0 +60041,68,0.23461,0 +60042,68,0.22785,0 +60043,68,0.21903,0 +60044,68,0.20831,0 +60045,68,0.19583,0 +60046,68,0.18175,0 +60047,68,0.16634,0 +60048,68,0.14983,0 +60049,68,0.1325,0 +60050,68,0.11462,0 +60051,68,0.096495,0 +60052,68,0.078409,0 +60053,68,0.060652,0 +60054,68,0.043495,0 +60055,68,0.027201,0 +60056,68,0.012014,0 +60057,68,-0.001856,0 +60058,68,-0.014194,0 +60059,68,-0.024798,0 +60060,68,-0.0336,0 +60061,68,-0.040528,0 +60062,68,-0.045564,0 +60063,68,-0.048709,0 +60064,68,-0.04998,0 +60065,68,-0.049407,0 +60066,68,-0.047066,0 +60067,68,-0.043053,0 +60068,68,-0.03748,0 +60069,68,-0.030468,0 +60070,68,-0.022174,0 +60071,68,-0.012764,0 +60072,68,-0.0023933,0 +60073,68,0.0087791,0 +60074,68,0.020603,0 +60075,68,0.032866,0 +60076,68,0.045403,0 +60077,68,0.058046,0 +60078,68,0.070623,0 +60079,68,0.082973,0 +60080,68,0.094967,0 +60081,68,0.10651,0 +60082,68,0.11749,0 +60083,68,0.1278,0 +60084,68,0.13735,0 +60085,68,0.14604,0 +60086,68,0.1538,0 +60087,68,0.16054,0 +60088,68,0.16621,0 +60089,68,0.17073,0 +60090,68,0.17412,0 +60091,68,0.17639,0 +60092,68,0.17753,0 +60093,68,0.17759,0 +60094,68,0.1766,0 +60095,68,0.17462,0 +60096,68,0.17172,0 +60097,68,0.16798,0 +60098,68,0.16351,0 +60099,68,0.15839,0 +60100,68,0.1527,0 +60101,68,0.14652,0 +60102,68,0.14,0 +60103,68,0.13329,0 +60104,68,0.12654,0 +60105,68,0.11989,0 +60106,68,0.11347,0 +60107,68,0.10741,0 +60108,68,0.10181,0 +60109,68,0.096757,0 +60110,68,0.092337,0 +60111,68,0.088623,0 +60112,68,0.085651,0 +60113,68,0.083419,0 +60114,68,0.08191,0 +60115,68,0.081103,0 +60116,68,0.080966,0 +60117,68,0.081465,0 +60118,68,0.082582,0 +60119,68,0.084273,0 +60120,68,0.086472,0 +60121,68,0.089073,0 +60122,68,0.091931,0 +60123,68,0.094908,0 +60124,68,0.097868,0 +60125,68,0.10067,0 +60126,68,0.10319,0 +60127,68,0.10529,0 +60128,68,0.10683,0 +60129,68,0.10771,0 +60130,68,0.10779,0 +60131,68,0.10701,0 +60132,68,0.1053,0 +60133,68,0.10269,0 +60134,68,0.099199,0 +60135,68,0.094868,0 +60136,68,0.089721,0 +60137,68,0.083798,0 +60138,68,0.077146,0 +60139,68,0.069826,0 +60140,68,0.061941,0 +60141,68,0.053641,0 +60142,68,0.04509,0 +60143,68,0.036452,0 +60144,68,0.027908,0 +60145,68,0.019661,0 +60146,68,0.011976,0 +60147,68,0.0050605,0 +60148,68,-0.00087665,0 +60149,68,-0.0056351,0 +60150,68,-0.0090491,0 +60151,67,-0.011003,0 +60152,67,-0.011411,0 +60153,67,-0.010212,0 +60154,67,-0.0073733,0 +60155,67,-0.0029044,0 +60156,67,0.0031347,0 +60157,67,0.010647,0 +60158,67,0.019509,0 +60159,67,0.029586,0 +60160,67,0.040667,0 +60161,67,0.05245,0 +60162,67,0.064658,0 +60163,67,0.076992,0 +60164,67,0.089127,0 +60165,67,0.10071,0 +60166,67,0.1114,0 +60167,67,0.12087,0 +60168,67,0.12883,0 +60169,67,0.13502,0 +60170,67,0.13923,0 +60171,67,0.14128,0 +60172,67,0.14103,0 +60173,67,0.1383,0 +60174,67,0.13309,0 +60175,67,0.1255,0 +60176,67,0.11565,0 +60177,67,0.10371,0 +60178,67,0.089869,0 +60179,67,0.074366,0 +60180,67,0.057478,0 +60181,68,0.039526,0 +60182,68,0.020874,0 +60183,68,0.0019042,0 +60184,68,-0.016996,0 +60185,68,-0.035447,0 +60186,68,-0.053102,0 +60187,68,-0.069571,0 +60188,68,-0.084631,0 +60189,68,-0.098047,0 +60190,68,-0.10962,0 +60191,68,-0.11919,0 +60192,68,-0.12664,0 +60193,68,-0.13189,0 +60194,68,-0.13493,0 +60195,68,-0.13575,0 +60196,68,-0.13442,0 +60197,68,-0.13099,0 +60198,68,-0.12551,0 +60199,68,-0.11805,0 +60200,68,-0.10871,0 +60201,68,-0.097549,0 +60202,68,-0.084794,0 +60203,68,-0.070602,0 +60204,68,-0.055088,0 +60205,68,-0.038341,0 +60206,68,-0.020432,0 +60207,68,-0.0014354,0 +60208,68,0.018567,0 +60209,68,0.039497,0 +60210,68,0.061276,0 +60211,68,0.083844,0 +60212,68,0.10715,0 +60213,68,0.13114,0 +60214,68,0.15572,0 +60215,68,0.18081,0 +60216,68,0.20628,0 +60217,68,0.23198,0 +60218,68,0.25774,0 +60219,68,0.28335,0 +60220,68,0.30865,0 +60221,68,0.33349,0 +60222,68,0.3577,0 +60223,68,0.38107,0 +60224,68,0.40339,0 +60225,68,0.42442,0 +60226,68,0.44394,0 +60227,68,0.46176,0 +60228,68,0.47769,0 +60229,68,0.4916,0 +60230,68,0.50335,0 +60231,68,0.51281,0 +60232,68,0.51988,0 +60233,68,0.5244,0 +60234,68,0.52647,0 +60235,68,0.52615,0 +60236,68,0.52354,0 +60237,68,0.51873,0 +60238,68,0.51185,0 +60239,68,0.50306,0 +60240,68,0.49252,0 +60241,68,0.48036,0 +60242,68,0.46676,0 +60243,68,0.45192,0 +60244,68,0.43605,0 +60245,68,0.41934,0 +60246,68,0.40199,0 +60247,68,0.3842,0 +60248,68,0.36615,0 +60249,68,0.34799,0 +60250,68,0.32986,0 +60251,68,0.3119,0 +60252,68,0.29424,0 +60253,68,0.27695,0 +60254,68,0.26011,0 +60255,68,0.24373,0 +60256,68,0.22784,0 +60257,68,0.21246,0 +60258,68,0.19759,0 +60259,68,0.18323,0 +60260,68,0.1694,0 +60261,68,0.15613,0 +60262,68,0.1434,0 +60263,68,0.13123,0 +60264,68,0.1196,0 +60265,68,0.10855,0 +60266,68,0.098086,0 +60267,68,0.088214,0 +60268,68,0.078979,0 +60269,68,0.070408,0 +60270,68,0.06255,0 +60271,68,0.05542,0 +60272,68,0.049029,0 +60273,68,0.043392,0 +60274,68,0.038512,0 +60275,68,0.034385,0 +60276,68,0.031007,0 +60277,68,0.028365,0 +60278,68,0.026436,0 +60279,68,0.025179,0 +60280,68,0.02453,0 +60281,68,0.024433,0 +60282,68,0.024859,0 +60283,68,0.025765,0 +60284,68,0.027104,0 +60285,68,0.028788,0 +60286,68,0.030759,0 +60287,68,0.032947,0 +60288,68,0.03527,0 +60289,68,0.037648,0 +60290,68,0.040019,0 +60291,68,0.042346,0 +60292,68,0.044607,0 +60293,68,0.046802,0 +60294,68,0.048954,0 +60295,68,0.051095,0 +60296,68,0.053262,0 +60297,68,0.05551,0 +60298,68,0.057914,0 +60299,68,0.060551,0 +60300,68,0.063484,0 +60301,68,0.066755,0 +60302,68,0.070404,0 +60303,68,0.074482,0 +60304,68,0.079028,0 +60305,68,0.084078,0 +60306,68,0.089664,0 +60307,68,0.095814,0 +60308,68,0.10254,0 +60309,68,0.10984,0 +60310,68,0.11769,0 +60311,68,0.12607,0 +60312,68,0.13491,0 +60313,68,0.14408,0 +60314,68,0.15347,0 +60315,68,0.16297,0 +60316,68,0.17246,0 +60317,68,0.1818,0 +60318,68,0.19089,0 +60319,68,0.19965,0 +60320,68,0.20801,0 +60321,68,0.21592,0 +60322,68,0.22332,0 +60323,68,0.23017,0 +60324,68,0.23647,0 +60325,68,0.2422,0 +60326,68,0.2474,0 +60327,68,0.25211,0 +60328,68,0.25637,0 +60329,68,0.26022,0 +60330,68,0.26374,0 +60331,68,0.26702,0 +60332,68,0.27021,0 +60333,68,0.27346,0 +60334,68,0.2769,0 +60335,68,0.28072,0 +60336,68,0.28505,0 +60337,68,0.28998,0 +60338,68,0.29562,0 +60339,68,0.30203,0 +60340,68,0.30925,0 +60341,68,0.31728,0 +60342,68,0.3261,0 +60343,68,0.33568,0 +60344,66,0.346,0 +60345,66,0.35699,0 +60346,67,0.36853,0 +60347,67,0.38051,0 +60348,67,0.39285,0 +60349,67,0.40545,0 +60350,67,0.41817,0 +60351,67,0.43088,0 +60352,67,0.4434,0 +60353,67,0.4556,0 +60354,67,0.46731,0 +60355,67,0.47833,0 +60356,67,0.48859,0 +60357,67,0.49798,0 +60358,67,0.50639,0 +60359,67,0.51375,0 +60360,67,0.52002,0 +60361,67,0.5252,0 +60362,67,0.52928,0 +60363,67,0.53225,0 +60364,67,0.53414,0 +60365,67,0.53494,0 +60366,67,0.53467,0 +60367,67,0.53342,0 +60368,67,0.53122,0 +60369,67,0.52809,0 +60370,67,0.52409,0 +60371,67,0.51926,0 +60372,67,0.51366,0 +60373,67,0.50732,0 +60374,67,0.50028,0 +60375,67,0.49256,0 +60376,67,0.48416,0 +60377,67,0.4751,0 +60378,67,0.46541,0 +60379,67,0.45508,0 +60380,67,0.44409,0 +60381,67,0.4324,0 +60382,67,0.41997,0 +60383,67,0.40679,0 +60384,67,0.39281,0 +60385,67,0.378,0 +60386,67,0.3623,0 +60387,67,0.34572,0 +60388,67,0.32823,0 +60389,67,0.30991,0 +60390,67,0.29081,0 +60391,67,0.27102,0 +60392,67,0.25063,0 +60393,67,0.22976,0 +60394,67,0.20855,0 +60395,67,0.18719,0 +60396,67,0.16589,0 +60397,67,0.14486,0 +60398,67,0.1243,0 +60399,67,0.10447,0 +60400,67,0.085669,0 +60401,67,0.068121,0 +60402,67,0.052084,0 +60403,67,0.037811,0 +60404,67,0.025579,0 +60405,67,0.015654,0 +60406,67,0.0082553,0 +60407,67,0.0035603,0 +60408,67,0.0017192,0 +60409,67,0.0028311,0 +60410,67,0.0069312,0 +60411,67,0.014008,0 +60412,67,0.024177,0 +60413,67,0.037103,0 +60414,67,0.052587,0 +60415,67,0.070349,0 +60416,67,0.090073,0 +60417,67,0.11143,0 +60418,67,0.13406,0 +60419,67,0.1576,0 +60420,67,0.18164,0 +60421,67,0.20579,0 +60422,67,0.22965,0 +60423,67,0.25284,0 +60424,67,0.27493,0 +60425,67,0.29545,0 +60426,67,0.31408,0 +60427,67,0.3305,0 +60428,67,0.34443,0 +60429,67,0.35563,0 +60430,67,0.3639,0 +60431,67,0.36908,0 +60432,67,0.37107,0 +60433,67,0.3698,0 +60434,67,0.36532,0 +60435,67,0.3577,0 +60436,67,0.34708,0 +60437,67,0.3336,0 +60438,67,0.31748,0 +60439,67,0.2988,0 +60440,67,0.27792,0 +60441,67,0.25511,0 +60442,67,0.23061,0 +60443,67,0.20466,0 +60444,67,0.17755,0 +60445,67,0.14955,0 +60446,67,0.12096,0 +60447,67,0.092079,0 +60448,67,0.063207,0 +60449,67,0.034647,0 +60450,67,0.00672,0 +60451,67,-0.020252,0 +60452,67,-0.045885,0 +60453,67,-0.069883,0 +60454,67,-0.092051,0 +60455,67,-0.11219,0 +60456,67,-0.13012,0 +60457,67,-0.14569,0 +60458,67,-0.15878,0 +60459,67,-0.1693,0 +60460,67,-0.17718,0 +60461,67,-0.18235,0 +60462,67,-0.18475,0 +60463,67,-0.1844,0 +60464,67,-0.18127,0 +60465,67,-0.17536,0 +60466,67,-0.16692,0 +60467,67,-0.15613,0 +60468,67,-0.14316,0 +60469,67,-0.12826,0 +60470,67,-0.11169,0 +60471,67,-0.093778,0 +60472,67,-0.074828,0 +60473,67,-0.055114,0 +60474,67,-0.034885,0 +60475,67,-0.014403,0 +60476,67,0.0060827,0 +60477,67,0.026373,0 +60478,67,0.046306,0 +60479,67,0.065716,0 +60480,67,0.084443,0 +60481,67,0.10236,0 +60482,67,0.11938,0 +60483,67,0.13544,0 +60484,67,0.15047,0 +60485,67,0.16446,0 +60486,67,0.17744,0 +60487,67,0.18943,0 +60488,67,0.20053,0 +60489,67,0.2109,0 +60490,67,0.2207,0 +60491,67,0.2301,0 +60492,67,0.23922,0 +60493,67,0.24816,0 +60494,67,0.25703,0 +60495,67,0.26591,0 +60496,67,0.27484,0 +60497,67,0.28384,0 +60498,67,0.29292,0 +60499,67,0.30208,0 +60500,67,0.31132,0 +60501,67,0.32061,0 +60502,67,0.32992,0 +60503,67,0.33922,0 +60504,67,0.34849,0 +60505,67,0.35766,0 +60506,67,0.36666,0 +60507,67,0.37542,0 +60508,67,0.3838,0 +60509,67,0.39168,0 +60510,67,0.39891,0 +60511,67,0.40538,0 +60512,67,0.41099,0 +60513,67,0.41566,0 +60514,67,0.41931,0 +60515,67,0.42189,0 +60516,67,0.42335,0 +60517,67,0.42366,0 +60518,67,0.42289,0 +60519,67,0.42101,0 +60520,67,0.41805,0 +60521,67,0.41401,0 +60522,67,0.40887,0 +60523,67,0.40262,0 +60524,67,0.39521,0 +60525,67,0.38661,0 +60526,67,0.37688,0 +60527,67,0.36605,0 +60528,67,0.3542,0 +60529,67,0.34143,0 +60530,67,0.32783,0 +60531,67,0.31347,0 +60532,67,0.29844,0 +60533,67,0.28292,0 +60534,67,0.26702,0 +60535,67,0.25085,0 +60536,67,0.23452,0 +60537,67,0.21815,0 +60538,67,0.2019,0 +60539,67,0.18589,0 +60540,67,0.17029,0 +60541,67,0.15525,0 +60542,67,0.14091,0 +60543,67,0.12757,0 +60544,67,0.11533,0 +60545,67,0.10432,0 +60546,67,0.094627,0 +60547,67,0.086303,0 +60548,67,0.079589,0 +60549,67,0.074315,0 +60550,67,0.070396,0 +60551,67,0.067733,0 +60552,67,0.066261,0 +60553,67,0.065813,0 +60554,67,0.066119,0 +60555,67,0.066961,0 +60556,67,0.068091,0 +60557,67,0.069202,0 +60558,67,0.070008,0 +60559,67,0.070284,0 +60560,67,0.06974,0 +60561,67,0.06806,0 +60562,67,0.065125,0 +60563,67,0.060745,0 +60564,67,0.05456,0 +60565,67,0.046539,0 +60566,67,0.03672,0 +60567,67,0.025044,0 +60568,67,0.011383,0 +60569,67,-0.0039054,0 +60570,67,-0.020705,0 +60571,67,-0.039091,0 +60572,67,-0.058582,0 +60573,67,-0.0789,0 +60574,67,-0.099876,0 +60575,67,-0.12121,0 +60576,67,-0.14269,0 +60577,67,-0.16411,0 +60578,67,-0.18528,0 +60579,67,-0.20607,0 +60580,67,-0.22621,0 +60581,67,-0.24569,0 +60582,67,-0.26436,0 +60583,67,-0.28215,0 +60584,67,-0.29913,0 +60585,67,-0.31512,0 +60586,67,-0.33028,0 +60587,67,-0.34452,0 +60588,67,-0.35798,0 +60589,67,-0.37067,0 +60590,67,-0.38252,0 +60591,67,-0.39363,0 +60592,67,-0.40385,0 +60593,67,-0.41319,0 +60594,67,-0.42135,0 +60595,67,-0.42839,0 +60596,67,-0.43394,0 +60597,67,-0.438,0 +60598,67,-0.44028,0 +60599,67,-0.44066,0 +60600,67,-0.4391,0 +60601,67,-0.43539,0 +60602,67,-0.42969,0 +60603,67,-0.42196,0 +60604,67,-0.41241,0 +60605,67,-0.4012,0 +60606,67,-0.38834,0 +60607,67,-0.37422,0 +60608,67,-0.35917,0 +60609,67,-0.34359,0 +60610,67,-0.32796,0 +60611,67,-0.31284,0 +60612,67,-0.29884,0 +60613,67,-0.28667,0 +60614,67,-0.27725,0 +60615,67,-0.27141,0 +60616,67,-0.26996,0 +60617,67,-0.27396,0 +60618,67,-0.28452,0 +60619,67,-0.30243,0 +60620,67,-0.32804,0 +60621,67,-0.36175,0 +60622,67,-0.40341,0 +60623,67,-0.45209,0 +60624,67,-0.50629,0 +60625,67,-0.56411,0 +60626,67,-0.62326,0 +60627,67,-0.68073,0 +60628,67,-0.73369,0 +60629,67,-0.77985,0 +60630,67,-0.81723,0 +60631,67,-0.84485,0 +60632,67,-0.86288,0 +60633,67,-0.8738,0 +60634,67,-0.88474,0 +60635,67,-0.90853,0 +60636,67,-0.9627,0 +60637,67,-1.0658,0 +60638,67,-1.2317,0 +60639,67,-1.4684,0 +60640,67,-1.7728,0 +60641,67,-2.1284,0 +60642,21,-2.5095,0 +60643,21,-2.8842,0 +60644,56,-3.224,0 +60645,56,-3.504,0 +60646,56,-3.7057,0 +60647,56,-3.8211,0 +60648,56,-3.8595,0 +60649,56,-3.8407,0 +60650,56,-3.7858,0 +60651,56,-3.7136,0 +60652,56,-3.6385,0 +60653,56,-3.5686,0 +60654,56,-3.507,0 +60655,56,-3.4539,0 +60656,56,-3.4093,0 +60657,56,-3.3736,0 +60658,56,-3.3485,0 +60659,56,-3.3362,0 +60660,56,-3.3395,0 +60661,56,-3.3599,0 +60662,56,-3.3994,0 +60663,56,-3.4567,0 +60664,56,-3.5308,0 +60665,56,-3.6177,0 +60666,56,-3.7141,0 +60667,56,-3.8168,0 +60668,56,-3.9219,0 +60669,56,-4.0261,0 +60670,56,-4.1261,0 +60671,56,-4.2187,0 +60672,56,-4.3018,0 +60673,56,-4.3747,0 +60674,56,-4.4379,0 +60675,56,-4.493,0 +60676,56,-4.5425,0 +60677,56,-4.5892,0 +60678,56,-4.6359,0 +60679,56,-4.685,0 +60680,56,-4.7388,0 +60681,56,-4.7985,0 +60682,56,-4.865,0 +60683,56,-4.938,0 +60684,56,-5.0168,0 +60685,56,-5.1001,0 +60686,56,-5.186,0 +60687,56,-5.2721,0 +60688,56,-5.356,0 +60689,56,-5.4355,0 +60690,56,-5.5085,0 +60691,56,-5.5732,0 +60692,56,-5.628,0 +60693,56,-5.6724,0 +60694,56,-5.7066,0 +60695,56,-5.7315,0 +60696,56,-5.748,0 +60697,56,-5.7575,0 +60698,56,-5.7623,0 +60699,56,-5.7639,0 +60700,56,-5.7636,0 +60701,56,-5.7628,0 +60702,56,-5.7623,0 +60703,56,-5.7625,0 +60704,56,-5.7639,0 +60705,56,-5.7665,0 +60706,56,-5.7704,0 +60707,56,-5.7757,0 +60708,56,-5.782,0 +60709,56,-5.7892,0 +60710,56,-5.7969,0 +60711,56,-5.8043,0 +60712,56,-5.8105,0 +60713,56,-5.8149,0 +60714,56,-5.8164,0 +60715,56,-5.8143,0 +60716,56,-5.8079,0 +60717,56,-5.7965,0 +60718,56,-5.78,0 +60719,56,-5.7577,0 +60720,56,-5.7299,0 +60721,56,-5.696,0 +60722,56,-5.6562,0 +60723,56,-5.61,0 +60724,56,-5.5574,0 +60725,56,-5.4985,0 +60726,56,-5.4329,0 +60727,56,-5.3614,0 +60728,56,-5.2829,0 +60729,56,-5.199,0 +60730,56,-5.1094,0 +60731,56,-5.0145,0 +60732,56,-4.9155,0 +60733,56,-4.8119,0 +60734,56,-4.705,0 +60735,56,-4.5952,0 +60736,56,-4.4826,0 +60737,56,-4.368,0 +60738,56,-4.2518,0 +60739,56,-4.1343,0 +60740,56,-4.0161,0 +60741,56,-3.8973,0 +60742,56,-3.7783,0 +60743,56,-3.6594,0 +60744,56,-3.5408,0 +60745,56,-3.4229,0 +60746,56,-3.3057,0 +60747,56,-3.1893,0 +60748,56,-3.0739,0 +60749,56,-2.9594,0 +60750,56,-2.8457,0 +60751,56,-2.7328,0 +60752,56,-2.6205,0 +60753,56,-2.5087,0 +60754,56,-2.3972,0 +60755,56,-2.2858,0 +60756,56,-2.1743,0 +60757,56,-2.0624,0 +60758,56,-1.95,0 +60759,56,-1.8368,0 +60760,56,-1.7228,0 +60761,56,-1.6079,0 +60762,56,-1.4916,0 +60763,56,-1.3741,0 +60764,56,-1.2555,0 +60765,56,-1.1355,0 +60766,56,-1.0142,0 +60767,56,-0.89173,0 +60768,56,-0.76823,0 +60769,56,-0.64355,0 +60770,56,-0.518,0 +60771,56,-0.39171,0 +60772,56,-0.26476,0 +60773,56,-0.13727,0 +60774,56,-0.0094468,0 +60775,56,0.11865,0 +60776,56,0.24691,0 +60777,56,0.37523,0 +60778,56,0.50352,0 +60779,56,0.63171,0 +60780,56,0.75983,0 +60781,56,0.88787,0 +60782,56,1.0158,0 +60783,56,1.1438,0 +60784,56,1.2717,0 +60785,56,1.3996,0 +60786,56,1.5275,0 +60787,56,1.6557,0 +60788,56,1.784,0 +60789,56,1.9127,0 +60790,56,2.0418,0 +60791,56,2.1714,0 +60792,56,2.3016,0 +60793,56,2.4324,0 +60794,56,2.5638,0 +60795,56,2.6958,0 +60796,56,2.8282,0 +60797,56,2.961,0 +60798,56,3.0937,0 +60799,56,3.2264,0 +60800,56,3.3586,0 +60801,56,3.4901,0 +60802,56,3.6206,0 +60803,56,3.7497,0 +60804,56,3.8767,0 +60805,56,4.0013,0 +60806,56,4.123,0 +60807,56,4.241,0 +60808,56,4.355,0 +60809,56,4.4648,0 +60810,56,4.569,0 +60811,56,4.6679,0 +60812,56,4.7614,0 +60813,56,4.8484,0 +60814,56,4.9297,0 +60815,56,5.0049,0 +60816,56,5.0735,0 +60817,56,5.1362,0 +60818,56,5.1922,0 +60819,56,5.2425,0 +60820,56,5.2872,0 +60821,56,5.326,0 +60822,56,5.3601,0 +60823,56,5.3895,0 +60824,56,5.4151,0 +60825,56,5.4377,0 +60826,56,5.4575,0 +60827,56,5.4756,0 +60828,56,5.492,0 +60829,56,5.5073,0 +60830,56,5.5217,0 +60831,56,5.5352,0 +60832,56,5.548,0 +60833,56,5.5596,0 +60834,56,5.5699,0 +60835,56,5.5786,0 +60836,56,5.5853,0 +60837,56,5.5899,0 +60838,56,5.5917,0 +60839,56,5.5908,0 +60840,56,5.5865,0 +60841,56,5.5788,0 +60842,56,5.5677,0 +60843,56,5.553,0 +60844,56,5.5352,0 +60845,56,5.514,0 +60846,56,5.4904,0 +60847,56,5.4644,0 +60848,56,5.4369,0 +60849,56,5.4084,0 +60850,56,5.3797,0 +60851,56,5.3515,0 +60852,56,5.3245,0 +60853,56,5.2993,0 +60854,56,5.2765,0 +60855,56,5.256,0 +60856,56,5.2386,0 +60857,56,5.2235,0 +60858,56,5.2104,0 +60859,56,5.1982,0 +60860,56,5.1857,0 +60861,56,5.1717,0 +60862,56,5.1544,0 +60863,56,5.1325,0 +60864,56,5.1038,0 +60865,48,5.0671,0 +60866,48,5.02,0 +60867,50,4.9621,0 +60868,50,4.8913,0 +60869,50,4.8079,0 +60870,50,4.7113,0 +60871,50,4.6025,0 +60872,50,4.4823,0 +60873,50,4.3526,0 +60874,50,4.2155,0 +60875,50,4.0732,0 +60876,50,3.9281,0 +60877,50,3.7826,0 +60878,50,3.6392,0 +60879,50,3.5005,0 +60880,50,3.3685,0 +60881,50,3.2462,0 +60882,50,3.1348,0 +60883,50,3.0375,0 +60884,50,2.9535,0 +60885,50,2.8867,0 +60886,50,2.8342,0 +60887,50,2.7992,0 +60888,50,2.7789,0 +60889,50,2.7746,0 +60890,50,2.7842,0 +60891,50,2.8073,0 +60892,50,2.8426,0 +60893,50,2.8882,0 +60894,50,2.9433,0 +60895,50,3.0049,0 +60896,50,3.0723,0 +60897,50,3.1424,0 +60898,50,3.2136,0 +60899,50,3.2841,0 +60900,50,3.3519,0 +60901,50,3.4155,0 +60902,50,3.4738,0 +60903,50,3.5244,0 +60904,50,3.5676,0 +60905,50,3.601,0 +60906,50,3.6255,0 +60907,50,3.6397,0 +60908,50,3.644,0 +60909,50,3.6387,0 +60910,50,3.6233,0 +60911,50,3.5996,0 +60912,50,3.5666,0 +60913,50,3.5269,0 +60914,50,3.48,0 +60915,50,3.428,0 +60916,50,3.3712,0 +60917,50,3.311,0 +60918,50,3.2485,0 +60919,50,3.1846,0 +60920,50,3.1203,0 +60921,50,3.0565,0 +60922,50,2.9936,0 +60923,50,2.9326,0 +60924,50,2.8735,0 +60925,50,2.8173,0 +60926,50,2.7637,0 +60927,50,2.7136,0 +60928,50,2.6666,0 +60929,50,2.6228,0 +60930,50,2.5822,0 +60931,50,2.5445,0 +60932,50,2.5094,0 +60933,50,2.4765,0 +60934,50,2.4453,0 +60935,50,2.4153,0 +60936,50,2.3859,0 +60937,50,2.3566,0 +60938,50,2.3268,0 +60939,50,2.2959,0 +60940,50,2.2635,0 +60941,50,2.2289,0 +60942,50,2.1919,0 +60943,50,2.1521,0 +60944,50,2.1092,0 +60945,50,2.063,0 +60946,50,2.0135,0 +60947,50,1.9605,0 +60948,50,1.9044,0 +60949,50,1.8452,0 +60950,50,1.7836,0 +60951,50,1.72,0 +60952,50,1.6553,0 +60953,50,1.5899,0 +60954,50,1.5248,0 +60955,50,1.4607,0 +60956,50,1.3982,0 +60957,50,1.3383,0 +60958,50,1.2812,0 +60959,50,1.2278,0 +60960,50,1.1783,0 +60961,50,1.1333,0 +60962,50,1.0926,0 +60963,50,1.0564,0 +60964,50,1.0243,0 +60965,50,0.99589,0 +60966,50,0.97078,0 +60967,50,0.94813,0 +60968,50,0.92759,0 +60969,50,0.9083,0 +60970,50,0.88979,0 +60971,50,0.87137,0 +60972,50,0.85262,0 +60973,50,0.8332,0 +60974,50,0.81272,0 +60975,50,0.79102,0 +60976,50,0.76802,0 +60977,47,0.74373,0 +60978,47,0.71844,0 +60979,48,0.69235,0 +60980,48,0.66576,0 +60981,48,0.63896,0 +60982,48,0.61228,0 +60983,48,0.58606,0 +60984,48,0.56051,0 +60985,48,0.53588,0 +60986,48,0.51216,0 +60987,48,0.48953,0 +60988,48,0.4681,0 +60989,48,0.44795,0 +60990,48,0.42915,0 +60991,48,0.41167,0 +60992,48,0.39573,0 +60993,48,0.38128,0 +60994,48,0.36881,0 +60995,48,0.35812,0 +60996,48,0.34977,0 +60997,48,0.34352,0 +60998,48,0.34008,0 +60999,48,0.33924,0 +61000,48,0.34158,0 +61001,48,0.34673,0 +61002,48,0.35494,0 +61003,48,0.36589,0 +61004,48,0.37966,0 +61005,48,0.39585,0 +61006,48,0.41418,0 +61007,48,0.43409,0 +61008,48,0.45506,0 +61009,48,0.47649,0 +61010,48,0.49778,0 +61011,48,0.51819,0 +61012,48,0.53703,0 +61013,48,0.55351,0 +61014,48,0.56721,0 +61015,48,0.57751,0 +61016,48,0.58426,0 +61017,48,0.58687,0 +61018,48,0.58543,0 +61019,48,0.57954,0 +61020,48,0.56962,0 +61021,48,0.55544,0 +61022,48,0.53771,0 +61023,48,0.5165,0 +61024,48,0.49274,0 +61025,48,0.46681,0 +61026,48,0.43959,0 +61027,48,0.4116,0 +61028,48,0.3835,0 +61029,48,0.35591,0 +61030,48,0.32922,0 +61031,48,0.30418,0 +61032,48,0.28083,0 +61033,48,0.25989,0 +61034,48,0.24116,0 +61035,48,0.22533,0 +61036,48,0.21193,0 +61037,48,0.20132,0 +61038,48,0.19277,0 +61039,48,0.18637,0 +61040,48,0.18159,0 +61041,48,0.17857,0 +61042,48,0.17693,0 +61043,48,0.17669,0 +61044,48,0.17755,0 +61045,48,0.17948,0 +61046,48,0.18223,0 +61047,48,0.18573,0 +61048,48,0.18974,0 +61049,48,0.19406,0 +61050,48,0.19848,0 +61051,48,0.20291,0 +61052,48,0.20731,0 +61053,48,0.21164,0 +61054,48,0.21568,0 +61055,48,0.21916,0 +61056,48,0.22187,0 +61057,48,0.22365,0 +61058,48,0.2243,0 +61059,48,0.22383,0 +61060,48,0.22217,0 +61061,48,0.21943,0 +61062,48,0.21561,0 +61063,48,0.21091,0 +61064,48,0.20542,0 +61065,48,0.19936,0 +61066,48,0.1928,0 +61067,48,0.18594,0 +61068,48,0.17902,0 +61069,48,0.17231,0 +61070,48,0.16605,0 +61071,48,0.16032,0 +61072,48,0.15537,0 +61073,48,0.15106,0 +61074,48,0.14754,0 +61075,48,0.1446,0 +61076,48,0.1423,0 +61077,48,0.14047,0 +61078,48,0.13907,0 +61079,48,0.13793,0 +61080,48,0.13697,0 +61081,48,0.13604,0 +61082,48,0.13502,0 +61083,48,0.13375,0 +61084,48,0.13212,0 +61085,48,0.13004,0 +61086,48,0.12741,0 +61087,48,0.12423,0 +61088,48,0.1205,0 +61089,48,0.11626,0 +61090,48,0.11158,0 +61091,51,0.10664,0 +61092,51,0.1017,0 +61093,51,0.097057,0 +61094,51,0.092936,0 +61095,51,0.089698,0 +61096,51,0.087481,0 +61097,51,0.086758,0 +61098,51,0.087543,0 +61099,51,0.09044,0 +61100,51,0.09529,0 +61101,51,0.1027,0 +61102,51,0.11226,0 +61103,51,0.12447,0 +61104,51,0.13876,0 +61105,51,0.15518,0 +61106,51,0.17298,0 +61107,51,0.19183,0 +61108,51,0.21108,0 +61109,51,0.23023,0 +61110,51,0.24871,0 +61111,51,0.26584,0 +61112,51,0.28116,0 +61113,51,0.2938,0 +61114,51,0.30341,0 +61115,51,0.30917,0 +61116,51,0.311,0 +61117,51,0.3082,0 +61118,51,0.30102,0 +61119,51,0.28911,0 +61120,51,0.27308,0 +61121,51,0.25297,0 +61122,51,0.22949,0 +61123,51,0.20286,0 +61124,51,0.17388,0 +61125,51,0.14309,0 +61126,51,0.11136,0 +61127,51,0.079467,0 +61128,51,0.048344,0 +61129,51,0.018872,0 +61130,51,-0.0081604,0 +61131,51,-0.031876,0 +61132,51,-0.051759,0 +61133,51,-0.067064,0 +61134,51,-0.077604,0 +61135,51,-0.082891,0 +61136,51,-0.083017,0 +61137,51,-0.077515,0 +61138,51,-0.066807,0 +61139,51,-0.050731,0 +61140,51,-0.029981,0 +61141,51,-0.0045449,0 +61142,51,0.024619,0 +61143,51,0.05737,0 +61144,51,0.092643,0 +61145,51,0.13007,0 +61146,51,0.1687,0 +61147,51,0.20793,0 +61148,51,0.24699,0 +61149,51,0.28512,0 +61150,51,0.32186,0 +61151,51,0.35612,0 +61152,51,0.38773,0 +61153,51,0.41571,0 +61154,51,0.44004,0 +61155,51,0.45986,0 +61156,51,0.47514,0 +61157,51,0.48536,0 +61158,51,0.49046,0 +61159,51,0.4905,0 +61160,51,0.48531,0 +61161,51,0.47549,0 +61162,51,0.46079,0 +61163,51,0.44218,0 +61164,51,0.41941,0 +61165,51,0.3938,0 +61166,51,0.36548,0 +61167,51,0.33553,0 +61168,51,0.30448,0 +61169,51,0.2732,0 +61170,51,0.24262,0 +61171,51,0.21356,0 +61172,51,0.18678,0 +61173,51,0.16307,0 +61174,51,0.14272,0 +61175,51,0.12672,0 +61176,51,0.1148,0 +61177,51,0.10832,0 +61178,51,0.10656,0 +61179,51,0.11039,0 +61180,51,0.11919,0 +61181,51,0.13317,0 +61182,51,0.15205,0 +61183,51,0.17527,0 +61184,51,0.20268,0 +61185,51,0.2331,0 +61186,51,0.26644,0 +61187,51,0.30159,0 +61188,51,0.33814,0 +61189,51,0.37528,0 +61190,51,0.41233,0 +61191,51,0.44855,0 +61192,51,0.48328,0 +61193,51,0.51564,0 +61194,51,0.54546,0 +61195,51,0.57156,0 +61196,51,0.59412,0 +61197,51,0.61236,0 +61198,51,0.62635,0 +61199,51,0.63612,0 +61200,51,0.64147,0 +61201,51,0.64308,0 +61202,51,0.64046,0 +61203,51,0.6347,0 +61204,51,0.62569,0 +61205,51,0.61411,0 +61206,51,0.60045,0 +61207,51,0.58517,0 +61208,51,0.56894,0 +61209,51,0.55223,0 +61210,51,0.53561,0 +61211,51,0.51961,0 +61212,51,0.50453,0 +61213,51,0.49072,0 +61214,51,0.47839,0 +61215,51,0.46756,0 +61216,51,0.45857,0 +61217,51,0.45114,0 +61218,51,0.44552,0 +61219,51,0.44158,0 +61220,51,0.43933,0 +61221,51,0.43874,0 +61222,51,0.43957,0 +61223,51,0.44196,0 +61224,51,0.44553,0 +61225,51,0.45033,0 +61226,51,0.45616,0 +61227,51,0.46292,0 +61228,51,0.47064,0 +61229,51,0.47919,0 +61230,51,0.48867,0 +61231,51,0.49892,0 +61232,51,0.50995,0 +61233,51,0.52162,0 +61234,51,0.5337,0 +61235,51,0.54602,0 +61236,51,0.55831,0 +61237,51,0.5703,0 +61238,51,0.58179,0 +61239,51,0.59256,0 +61240,51,0.60235,0 +61241,51,0.61109,0 +61242,51,0.61835,0 +61243,51,0.62415,0 +61244,51,0.62812,0 +61245,51,0.63007,0 +61246,51,0.62996,0 +61247,51,0.62719,0 +61248,51,0.62212,0 +61249,51,0.61446,0 +61250,51,0.60441,0 +61251,51,0.59219,0 +61252,51,0.57775,0 +61253,51,0.56162,0 +61254,51,0.54375,0 +61255,51,0.52462,0 +61256,51,0.50459,0 +61257,51,0.48404,0 +61258,51,0.46347,0 +61259,51,0.44342,0 +61260,51,0.42428,0 +61261,51,0.40677,0 +61262,51,0.39148,0 +61263,51,0.37879,0 +61264,51,0.36949,0 +61265,51,0.36336,0 +61266,51,0.36125,0 +61267,51,0.36294,0 +61268,51,0.36873,0 +61269,51,0.37886,0 +61270,51,0.39276,0 +61271,51,0.4109,0 +61272,51,0.43219,0 +61273,51,0.45657,0 +61274,51,0.48332,0 +61275,51,0.51179,0 +61276,51,0.54125,0 +61277,51,0.57076,0 +61278,51,0.59942,0 +61279,51,0.62674,0 +61280,51,0.65178,0 +61281,51,0.67407,0 +61282,51,0.69289,0 +61283,51,0.70747,0 +61284,51,0.71771,0 +61285,51,0.72247,0 +61286,51,0.72243,0 +61287,51,0.71642,0 +61288,51,0.70534,0 +61289,51,0.68863,0 +61290,51,0.66692,0 +61291,51,0.6406,0 +61292,51,0.61015,0 +61293,51,0.57638,0 +61294,51,0.53963,0 +61295,51,0.50093,0 +61296,51,0.46076,0 +61297,51,0.42012,0 +61298,51,0.37984,0 +61299,51,0.34062,0 +61300,51,0.30353,0 +61301,51,0.26903,0 +61302,51,0.23821,0 +61303,51,0.21139,0 +61304,51,0.18948,0 +61305,51,0.17265,0 +61306,51,0.16133,0 +61307,51,0.15564,0 +61308,51,0.1555,0 +61309,51,0.16095,0 +61310,51,0.17142,0 +61311,51,0.18685,0 +61312,51,0.20627,0 +61313,51,0.22947,0 +61314,51,0.25532,0 +61315,51,0.28343,0 +61316,51,0.31276,0 +61317,51,0.34268,0 +61318,51,0.37234,0 +61319,51,0.40079,0 +61320,51,0.42759,0 +61321,51,0.45159,0 +61322,51,0.47273,0 +61323,51,0.48997,0 +61324,51,0.50357,0 +61325,51,0.51277,0 +61326,51,0.51806,0 +61327,51,0.51907,0 +61328,51,0.5164,0 +61329,51,0.5101,0 +61330,51,0.50076,0 +61331,51,0.48863,0 +61332,51,0.47432,0 +61333,51,0.4583,0 +61334,51,0.44115,0 +61335,51,0.42344,0 +61336,51,0.40575,0 +61337,51,0.38855,0 +61338,51,0.37231,0 +61339,51,0.35742,0 +61340,51,0.34431,0 +61341,51,0.33329,0 +61342,51,0.32465,0 +61343,51,0.31837,0 +61344,51,0.31465,0 +61345,51,0.31339,0 +61346,51,0.31468,0 +61347,51,0.31827,0 +61348,51,0.32409,0 +61349,51,0.33181,0 +61350,51,0.3413,0 +61351,51,0.35226,0 +61352,51,0.36451,0 +61353,51,0.37765,0 +61354,51,0.39129,0 +61355,51,0.40486,0 +61356,51,0.41794,0 +61357,51,0.43011,0 +61358,51,0.44094,0 +61359,51,0.45002,0 +61360,51,0.45711,0 +61361,51,0.46187,0 +61362,51,0.46432,0 +61363,51,0.46419,0 +61364,51,0.46156,0 +61365,51,0.45608,0 +61366,51,0.448,0 +61367,51,0.43686,0 +61368,51,0.42328,0 +61369,51,0.4069,0 +61370,51,0.38832,0 +61371,51,0.3673,0 +61372,51,0.34443,0 +61373,51,0.3197,0 +61374,51,0.29353,0 +61375,51,0.26601,0 +61376,51,0.23736,0 +61377,51,0.20783,0 +61378,51,0.17774,0 +61379,51,0.14752,0 +61380,51,0.11773,0 +61381,51,0.088777,0 +61382,51,0.061395,0 +61383,51,0.035992,0 +61384,51,0.013579,0 +61385,51,-0.0054709,0 +61386,51,-0.020547,0 +61387,51,-0.031204,0 +61388,51,-0.037336,0 +61389,51,-0.038144,0 +61390,51,-0.034194,0 +61391,51,-0.024532,0 +61392,51,-0.010164,0 +61393,51,0.0092516,0 +61394,51,0.032994,0 +61395,51,0.060746,0 +61396,51,0.091977,0 +61397,51,0.12571,0 +61398,51,0.16139,0 +61399,51,0.19809,0 +61400,51,0.23528,0 +61401,51,0.27234,0 +61402,51,0.30873,0 +61403,51,0.34397,0 +61404,51,0.37782,0 +61405,51,0.40975,0 +61406,51,0.4398,0 +61407,51,0.46744,0 +61408,51,0.49271,0 +61409,51,0.51528,0 +61410,51,0.53511,0 +61411,51,0.55235,0 +61412,51,0.56665,0 +61413,51,0.57839,0 +61414,51,0.58723,0 +61415,51,0.59342,0 +61416,51,0.59693,0 +61417,51,0.59762,0 +61418,51,0.59576,0 +61419,51,0.59097,0 +61420,51,0.5838,0 +61421,51,0.5742,0 +61422,51,0.56261,0 +61423,51,0.54932,0 +61424,51,0.53459,0 +61425,51,0.51901,0 +61426,45,0.5029,0 +61427,45,0.48667,0 +61428,47,0.47064,0 +61429,47,0.45504,0 +61430,47,0.4401,0 +61431,47,0.42619,0 +61432,47,0.4133,0 +61433,47,0.40167,0 +61434,47,0.3914,0 +61435,47,0.38247,0 +61436,47,0.37526,0 +61437,47,0.36967,0 +61438,47,0.36605,0 +61439,47,0.36433,0 +61440,47,0.36483,0 +61441,47,0.36794,0 +61442,47,0.3738,0 +61443,47,0.38331,0 +61444,47,0.39635,0 +61445,47,0.41391,0 +61446,47,0.43613,0 +61447,47,0.46332,0 +61448,47,0.49606,0 +61449,47,0.53379,0 +61450,47,0.57721,0 +61451,47,0.62525,0 +61452,47,0.67819,0 +61453,47,0.73518,0 +61454,47,0.79574,0 +61455,47,0.85917,0 +61456,47,0.92449,0 +61457,47,0.99106,0 +61458,47,1.0579,0 +61459,47,1.1241,0 +61460,47,1.1891,0 +61461,47,1.2522,0 +61462,47,1.3132,0 +61463,47,1.3717,0 +61464,47,1.4278,0 +61465,47,1.4816,0 +61466,47,1.533,0 +61467,47,1.5826,0 +61468,47,1.6305,0 +61469,47,1.6773,0 +61470,47,1.7235,0 +61471,47,1.7696,0 +61472,47,1.8162,0 +61473,47,1.8637,0 +61474,47,1.9127,0 +61475,47,1.9636,0 +61476,47,2.0168,0 +61477,47,2.0723,0 +61478,47,2.1303,0 +61479,47,2.1909,0 +61480,47,2.254,0 +61481,47,2.3198,0 +61482,47,2.3877,0 +61483,47,2.4577,0 +61484,47,2.5293,0 +61485,47,2.6026,0 +61486,47,2.6769,0 +61487,47,2.7519,0 +61488,47,2.8271,0 +61489,47,2.902,0 +61490,47,2.9761,0 +61491,47,3.0486,0 +61492,47,3.1191,0 +61493,47,3.1867,0 +61494,47,3.2508,0 +61495,47,3.3111,0 +61496,47,3.3668,0 +61497,47,3.4178,0 +61498,47,3.4632,0 +61499,47,3.5032,0 +61500,47,3.5365,0 +61501,47,3.5641,0 +61502,47,3.5845,0 +61503,47,3.5991,0 +61504,47,3.6071,0 +61505,47,3.6095,0 +61506,47,3.6063,0 +61507,47,3.5982,0 +61508,47,3.5858,0 +61509,47,3.5693,0 +61510,47,3.5495,0 +61511,47,3.5266,0 +61512,47,3.5013,0 +61513,47,3.4741,0 +61514,47,3.4457,0 +61515,47,3.4168,0 +61516,47,3.388,0 +61517,47,3.3599,0 +61518,47,3.3331,0 +61519,47,3.308,0 +61520,47,3.2849,0 +61521,47,3.2639,0 +61522,47,3.2454,0 +61523,47,3.229,0 +61524,47,3.2152,0 +61525,47,3.2033,0 +61526,47,3.1934,0 +61527,47,3.185,0 +61528,47,3.1775,0 +61529,47,3.1706,0 +61530,47,3.1634,0 +61531,47,3.1553,0 +61532,47,3.1457,0 +61533,47,3.134,0 +61534,47,3.1199,0 +61535,47,3.1026,0 +61536,47,3.0819,0 +61537,47,3.0577,0 +61538,47,3.0295,0 +61539,47,2.9978,0 +61540,47,2.9619,0 +61541,47,2.9226,0 +61542,47,2.8798,0 +61543,47,2.8341,0 +61544,47,2.7858,0 +61545,47,2.7355,0 +61546,47,2.6834,0 +61547,47,2.6298,0 +61548,47,2.5752,0 +61549,47,2.5197,0 +61550,47,2.4635,0 +61551,47,2.4067,0 +61552,47,2.3493,0 +61553,47,2.2914,0 +61554,47,2.2328,0 +61555,47,2.1736,0 +61556,47,2.1137,0 +61557,47,2.0532,0 +61558,47,1.992,0 +61559,47,1.9302,0 +61560,47,1.8681,0 +61561,47,1.8059,0 +61562,47,1.7438,0 +61563,47,1.6821,0 +61564,47,1.621,0 +61565,47,1.5612,0 +61566,47,1.5027,0 +61567,47,1.4462,0 +61568,47,1.3917,0 +61569,47,1.3401,0 +61570,47,1.2912,0 +61571,47,1.2456,0 +61572,47,1.2033,0 +61573,47,1.1646,0 +61574,47,1.1293,0 +61575,47,1.0975,0 +61576,47,1.0691,0 +61577,47,1.0437,0 +61578,47,1.0216,0 +61579,47,1.0021,0 +61580,47,0.98535,0 +61581,47,0.97071,0 +61582,47,0.95828,0 +61583,47,0.94742,0 +61584,47,0.93812,0 +61585,47,0.9299,0 +61586,47,0.9226,0 +61587,47,0.91585,0 +61588,47,0.90944,0 +61589,47,0.9031,0 +61590,47,0.89653,0 +61591,47,0.88942,0 +61592,47,0.88161,0 +61593,47,0.87281,0 +61594,47,0.863,0 +61595,47,0.85193,0 +61596,47,0.83981,0 +61597,47,0.8265,0 +61598,47,0.81232,0 +61599,47,0.79733,0 +61600,47,0.78187,0 +61601,47,0.76629,0 +61602,47,0.75104,0 +61603,47,0.73658,0 +61604,47,0.72364,0 +61605,47,0.71248,0 +61606,47,0.70391,0 +61607,47,0.69793,0 +61608,47,0.69502,0 +61609,47,0.6952,0 +61610,47,0.69834,0 +61611,47,0.7045,0 +61612,47,0.71304,0 +61613,47,0.72376,0 +61614,47,0.73591,0 +61615,47,0.74888,0 +61616,47,0.76191,0 +61617,47,0.7743,0 +61618,47,0.78539,0 +61619,47,0.79464,0 +61620,47,0.80186,0 +61621,47,0.80654,0 +61622,47,0.80865,0 +61623,47,0.80826,0 +61624,47,0.80534,0 +61625,47,0.80016,0 +61626,47,0.79315,0 +61627,47,0.78463,0 +61628,47,0.77493,0 +61629,47,0.76456,0 +61630,47,0.75369,0 +61631,47,0.74234,0 +61632,47,0.73033,0 +61633,47,0.71757,0 +61634,47,0.70388,0 +61635,47,0.68906,0 +61636,47,0.67298,0 +61637,47,0.65565,0 +61638,47,0.63728,0 +61639,47,0.61841,0 +61640,47,0.59969,0 +61641,47,0.58193,0 +61642,47,0.56623,0 +61643,47,0.55378,0 +61644,47,0.54565,0 +61645,47,0.54276,0 +61646,47,0.54595,0 +61647,47,0.55586,0 +61648,47,0.5729,0 +61649,47,0.59699,0 +61650,47,0.62768,0 +61651,47,0.66426,0 +61652,47,0.70558,0 +61653,47,0.75005,0 +61654,47,0.79562,0 +61655,47,0.84039,0 +61656,47,0.88264,0 +61657,47,0.92057,0 +61658,47,0.95245,0 +61659,47,0.97703,0 +61660,47,0.99289,0 +61661,47,0.99839,0 +61662,47,0.99335,0 +61663,47,0.97793,0 +61664,47,0.95314,0 +61665,47,0.92007,0 +61666,47,0.8793,0 +61667,47,0.83247,0 +61668,47,0.78081,0 +61669,47,0.72643,0 +61670,47,0.67222,0 +61671,47,0.62149,0 +61672,47,0.57669,0 +61673,47,0.54109,0 +61674,47,0.51767,0 +61675,47,0.51004,0 +61676,47,0.52026,0 +61677,47,0.55107,0 +61678,47,0.60267,0 +61679,47,0.67413,0 +61680,47,0.7632,0 +61681,47,0.86543,0 +61682,47,0.97548,0 +61683,47,1.087,0 +61684,47,1.1943,0 +61685,47,1.2923,0 +61686,47,1.3766,0 +61687,47,1.4444,0 +61688,47,1.4948,0 +61689,47,1.5278,0 +61690,47,1.5455,0 +61691,47,1.5487,0 +61692,47,1.5372,0 +61693,47,1.5095,0 +61694,47,1.4648,0 +61695,47,1.4011,0 +61696,47,1.3136,0 +61697,47,1.1948,0 +61698,47,1.0362,0 +61699,47,0.83237,0 +61700,47,0.58207,0 +61701,47,0.28532,0 +61702,47,-0.059784,0 +61703,47,-0.45411,0 +61704,47,-0.90133,0 +61705,47,-1.4042,0 +61706,47,-1.9624,0 +61707,47,-2.5697,0 +61708,47,-3.2088,0 +61709,47,-3.8513,0 +61710,47,-4.4607,0 +61711,47,-4.9977,0 +61712,19,-5.4246,0 +61713,19,-5.7132,0 +61714,53,-5.8546,0 +61715,53,-5.8593,0 +61716,53,-5.7411,0 +61717,53,-5.5197,0 +61718,53,-5.2241,0 +61719,53,-4.8864,0 +61720,53,-4.5326,0 +61721,53,-4.1767,0 +61722,53,-3.8197,0 +61723,53,-3.4589,0 +61724,53,-3.095,0 +61725,53,-2.7343,0 +61726,53,-2.3914,0 +61727,53,-2.0838,0 +61728,53,-1.8356,0 +61729,53,-1.6643,0 +61730,53,-1.5829,0 +61731,53,-1.5931,0 +61732,53,-1.6902,0 +61733,53,-1.8624,0 +61734,53,-2.0844,0 +61735,53,-2.3259,0 +61736,53,-2.5568,0 +61737,53,-2.7574,0 +61738,53,-2.9192,0 +61739,53,-3.0432,0 +61740,53,-3.136,0 +61741,53,-3.2059,0 +61742,53,-3.2596,0 +61743,53,-3.3022,0 +61744,53,-3.3363,0 +61745,53,-3.3621,0 +61746,53,-3.379,0 +61747,53,-3.386,0 +61748,53,-3.3837,0 +61749,53,-3.3724,0 +61750,53,-3.353,0 +61751,53,-3.3266,0 +61752,53,-3.2927,0 +61753,53,-3.2524,0 +61754,53,-3.2071,0 +61755,53,-3.1586,0 +61756,53,-3.109,0 +61757,53,-3.0607,0 +61758,53,-3.0151,0 +61759,53,-2.9731,0 +61760,53,-2.9352,0 +61761,53,-2.9013,0 +61762,53,-2.8706,0 +61763,53,-2.8423,0 +61764,53,-2.8157,0 +61765,53,-2.7904,0 +61766,53,-2.7662,0 +61767,53,-2.7426,0 +61768,53,-2.7196,0 +61769,53,-2.6966,0 +61770,53,-2.6734,0 +61771,53,-2.6493,0 +61772,53,-2.6234,0 +61773,53,-2.5948,0 +61774,53,-2.5626,0 +61775,53,-2.5258,0 +61776,53,-2.4832,0 +61777,53,-2.4336,0 +61778,53,-2.3754,0 +61779,53,-2.3079,0 +61780,53,-2.2304,0 +61781,53,-2.1422,0 +61782,53,-2.0424,0 +61783,53,-1.9323,0 +61784,53,-1.8129,0 +61785,53,-1.6846,0 +61786,53,-1.55,0 +61787,53,-1.4112,0 +61788,53,-1.2703,0 +61789,53,-1.13,0 +61790,53,-0.99255,0 +61791,53,-0.86106,0 +61792,53,-0.73764,0 +61793,53,-0.62401,0 +61794,53,-0.52337,0 +61795,53,-0.43548,0 +61796,53,-0.36102,0 +61797,53,-0.30141,0 +61798,53,-0.25465,0 +61799,53,-0.2208,0 +61800,53,-0.19884,0 +61801,53,-0.18667,0 +61802,53,-0.18428,0 +61803,53,-0.18921,0 +61804,53,-0.20048,0 +61805,53,-0.21659,0 +61806,53,-0.23603,0 +61807,53,-0.25799,0 +61808,53,-0.28116,0 +61809,53,-0.30482,0 +61810,53,-0.32813,0 +61811,53,-0.35037,0 +61812,53,-0.37107,0 +61813,53,-0.38972,0 +61814,53,-0.40617,0 +61815,53,-0.42,0 +61816,53,-0.43125,0 +61817,53,-0.43964,0 +61818,53,-0.44548,0 +61819,53,-0.44854,0 +61820,53,-0.44934,0 +61821,53,-0.4474,0 +61822,53,-0.44336,0 +61823,53,-0.43698,0 +61824,53,-0.4287,0 +61825,53,-0.4186,0 +61826,53,-0.4069,0 +61827,53,-0.39393,0 +61828,53,-0.37962,0 +61829,53,-0.36437,0 +61830,53,-0.3482,0 +61831,53,-0.33117,0 +61832,53,-0.31336,0 +61833,53,-0.29453,0 +61834,53,-0.27475,0 +61835,53,-0.25386,0 +61836,53,-0.23182,0 +61837,53,-0.20878,0 +61838,53,-0.18472,0 +61839,53,-0.15997,0 +61840,53,-0.13481,0 +61841,53,-0.10954,0 +61842,53,-0.084582,0 +61843,53,-0.060346,0 +61844,53,-0.037253,0 +61845,53,-0.015474,0 +61846,53,0.0044559,0 +61847,53,0.022454,0 +61848,53,0.038338,0 +61849,53,0.051452,0 +61850,53,0.062021,0 +61851,53,0.069654,0 +61852,53,0.074246,0 +61853,53,0.076205,0 +61854,53,0.075402,0 +61855,53,0.072508,0 +61856,53,0.067987,0 +61857,53,0.062209,0 +61858,53,0.055953,0 +61859,53,0.049746,0 +61860,53,0.044127,0 +61861,53,0.039367,0 +61862,53,0.035863,0 +61863,53,0.033713,0 +61864,53,0.033007,0 +61865,52,0.034228,0 +61866,52,0.037168,0 +61867,52,0.042007,0 +61868,52,0.048943,0 +61869,52,0.057667,0 +61870,52,0.068278,0 +61871,52,0.080581,0 +61872,52,0.094292,0 +61873,52,0.10944,0 +61874,52,0.12558,0 +61875,52,0.14252,0 +61876,52,0.16023,0 +61877,52,0.17859,0 +61878,52,0.19777,0 +61879,53,0.21789,0 +61880,53,0.23896,0 +61881,53,0.26137,0 +61882,53,0.28512,0 +61883,53,0.31048,0 +61884,53,0.33784,0 +61885,53,0.3672,0 +61886,53,0.39907,0 +61887,53,0.43361,0 +61888,53,0.47083,0 +61889,53,0.51155,0 +61890,53,0.55557,0 +61891,53,0.60314,0 +61892,53,0.655,0 +61893,53,0.71061,0 +61894,53,0.77038,0 +61895,53,0.8344,0 +61896,53,0.90217,0 +61897,53,0.97401,0 +61898,53,1.0493,0 +61899,53,1.1275,0 +61900,53,1.2087,0 +61901,53,1.2919,0 +61902,53,1.3767,0 +61903,53,1.4629,0 +61904,53,1.5497,0 +61905,53,1.6365,0 +61906,53,1.7228,0 +61907,53,1.8081,0 +61908,53,1.8916,0 +61909,53,1.9729,0 +61910,53,2.0515,0 +61911,53,2.1269,0 +61912,53,2.199,0 +61913,53,2.2679,0 +61914,53,2.3332,0 +61915,53,2.3954,0 +61916,53,2.4547,0 +61917,53,2.5107,0 +61918,53,2.5642,0 +61919,53,2.6153,0 +61920,53,2.6639,0 +61921,53,2.7105,0 +61922,53,2.7555,0 +61923,53,2.799,0 +61924,53,2.8414,0 +61925,53,2.8832,0 +61926,53,2.9245,0 +61927,53,2.9655,0 +61928,53,3.0062,0 +61929,53,3.0466,0 +61930,53,3.0867,0 +61931,53,3.1264,0 +61932,53,3.1656,0 +61933,53,3.2045,0 +61934,53,3.2428,0 +61935,53,3.2807,0 +61936,53,3.3182,0 +61937,53,3.3554,0 +61938,53,3.3925,0 +61939,53,3.4296,0 +61940,53,3.467,0 +61941,53,3.5051,0 +61942,53,3.5442,0 +61943,53,3.5851,0 +61944,53,3.6281,0 +61945,53,3.674,0 +61946,53,3.7231,0 +61947,53,3.7757,0 +61948,53,3.8327,0 +61949,53,3.8937,0 +61950,53,3.9593,0 +61951,53,4.0297,0 +61952,53,4.1045,0 +61953,53,4.1846,0 +61954,53,4.2692,0 +61955,53,4.3584,0 +61956,53,4.4522,0 +61957,53,4.5496,0 +61958,53,4.6505,0 +61959,53,4.7537,0 +61960,53,4.8585,0 +61961,53,4.9641,0 +61962,53,5.0696,0 +61963,53,5.1742,0 +61964,53,5.2775,0 +61965,53,5.3787,0 +61966,53,5.4779,0 +61967,53,5.5746,0 +61968,53,5.6687,0 +61969,53,5.7601,0 +61970,53,5.8485,0 +61971,53,5.9339,0 +61972,53,6.0157,0 +61973,53,6.0941,0 +61974,53,6.1684,0 +61975,53,6.2392,0 +61976,53,6.3059,0 +61977,53,6.3694,0 +61978,53,6.4293,0 +61979,53,6.4863,0 +61980,53,6.5403,0 +61981,53,6.5914,0 +61982,53,6.6393,0 +61983,53,6.6843,0 +61984,53,6.726,0 +61985,53,6.7646,0 +61986,53,6.8002,0 +61987,53,6.833,0 +61988,53,6.8638,0 +61989,53,6.8931,0 +61990,53,6.9218,0 +61991,53,6.9506,0 +61992,53,6.9802,0 +61993,53,7.0116,0 +61994,53,7.0455,0 +61995,53,7.0823,0 +61996,53,7.123,0 +61997,53,7.1673,0 +61998,53,7.2159,0 +61999,53,7.2684,0 +62000,53,7.3247,0 +62001,53,7.3844,0 +62002,53,7.4466,0 +62003,53,7.5105,0 +62004,53,7.5751,0 +62005,53,7.6392,0 +62006,53,7.7018,0 +62007,53,7.7617,0 +62008,53,7.8181,0 +62009,53,7.8701,0 +62010,53,7.9173,0 +62011,53,7.9603,0 +62012,53,7.9992,0 +62013,53,8.0348,0 +62014,53,8.0685,0 +62015,53,8.1017,0 +62016,53,8.1358,0 +62017,53,8.1724,0 +62018,53,8.2125,0 +62019,53,8.2574,0 +62020,53,8.3085,0 +62021,53,8.3659,0 +62022,53,8.4295,0 +62023,53,8.4989,0 +62024,53,8.5734,0 +62025,53,8.6511,0 +62026,53,8.7301,0 +62027,53,8.8095,0 +62028,53,8.8885,0 +62029,53,8.966,0 +62030,53,9.0413,0 +62031,53,9.1141,0 +62032,39,9.1839,0 +62033,39,9.2493,0 +62034,42,9.3091,0 +62035,42,9.3626,0 +62036,42,9.4091,0 +62037,42,9.4486,0 +62038,42,9.4809,0 +62039,42,9.5065,0 +62040,42,9.5251,0 +62041,42,9.5367,0 +62042,42,9.5413,0 +62043,42,9.5398,0 +62044,42,9.5331,0 +62045,42,9.5221,0 +62046,42,9.5084,0 +62047,42,9.4933,0 +62048,42,9.4785,0 +62049,42,9.465,0 +62050,42,9.4536,0 +62051,42,9.4452,0 +62052,42,9.4404,0 +62053,42,9.4392,0 +62054,42,9.4416,0 +62055,42,9.4471,0 +62056,42,9.4553,0 +62057,42,9.4656,0 +62058,42,9.4772,0 +62059,42,9.4893,0 +62060,42,9.5012,0 +62061,42,9.512,0 +62062,42,9.5212,0 +62063,42,9.528,0 +62064,42,9.532,0 +62065,42,9.5326,0 +62066,42,9.5298,0 +62067,42,9.5238,0 +62068,42,9.5152,0 +62069,42,9.5049,0 +62070,42,9.4942,0 +62071,42,9.4844,0 +62072,42,9.4772,0 +62073,42,9.4742,0 +62074,42,9.476,0 +62075,42,9.4833,0 +62076,42,9.4965,0 +62077,42,9.5148,0 +62078,42,9.5373,0 +62079,42,9.5628,0 +62080,42,9.5897,0 +62081,42,9.6159,0 +62082,42,9.6394,0 +62083,42,9.6577,0 +62084,42,9.6687,0 +62085,42,9.6698,0 +62086,42,9.6592,0 +62087,42,9.6361,0 +62088,42,9.6002,0 +62089,42,9.5521,0 +62090,42,9.4932,0 +62091,42,9.4257,0 +62092,42,9.3523,0 +62093,38,9.2755,0 +62094,38,9.1985,0 +62095,53,9.1238,0 +62096,53,9.0533,0 +62097,53,8.989,0 +62098,53,8.9322,0 +62099,53,8.8847,0 +62100,53,8.8476,0 +62101,53,8.8218,0 +62102,53,8.8075,0 +62103,53,8.8042,0 +62104,53,8.8111,0 +62105,53,8.8263,0 +62106,53,8.8482,0 +62107,53,8.8753,0 +62108,53,8.906,0 +62109,53,8.9385,0 +62110,53,8.9718,0 +62111,53,9.005,0 +62112,53,9.0369,0 +62113,53,9.0666,0 +62114,53,9.0928,0 +62115,53,9.1151,0 +62116,53,9.133,0 +62117,53,9.146,0 +62118,53,9.1538,0 +62119,53,9.1563,0 +62120,53,9.154,0 +62121,53,9.1471,0 +62122,53,9.1364,0 +62123,53,9.1228,0 +62124,53,9.1074,0 +62125,53,9.0915,0 +62126,53,9.076,0 +62127,53,9.0613,0 +62128,53,9.0477,0 +62129,53,9.0349,0 +62130,53,9.0226,0 +62131,53,9.0102,0 +62132,53,8.9969,0 +62133,53,8.9823,0 +62134,53,8.9657,0 +62135,53,8.9465,0 +62136,53,8.9235,0 +62137,53,8.8969,0 +62138,53,8.8667,0 +62139,53,8.8332,0 +62140,53,8.7972,0 +62141,53,8.7603,0 +62142,53,8.7235,0 +62143,53,8.6882,0 +62144,53,8.6554,0 +62145,53,8.6257,0 +62146,53,8.5998,0 +62147,53,8.5783,0 +62148,53,8.5611,0 +62149,53,8.548,0 +62150,53,8.5388,0 +62151,53,8.5323,0 +62152,53,8.5273,0 +62153,53,8.522,0 +62154,53,8.5144,0 +62155,53,8.5033,0 +62156,53,8.4868,0 +62157,53,8.4638,0 +62158,53,8.4338,0 +62159,53,8.3958,0 +62160,53,8.3506,0 +62161,53,8.299,0 +62162,53,8.2413,0 +62163,53,8.1796,0 +62164,53,8.1155,0 +62165,53,8.0504,0 +62166,53,7.9864,0 +62167,53,7.9243,0 +62168,53,7.8656,0 +62169,53,7.8106,0 +62170,53,7.76,0 +62171,53,7.714,0 +62172,53,7.6724,0 +62173,53,7.6357,0 +62174,53,7.603,0 +62175,53,7.5744,0 +62176,53,7.5494,0 +62177,53,7.527,0 +62178,53,7.5068,0 +62179,53,7.4878,0 +62180,53,7.4697,0 +62181,53,7.4519,0 +62182,53,7.434,0 +62183,53,7.4155,0 +62184,53,7.3962,0 +62185,53,7.3759,0 +62186,53,7.3546,0 +62187,53,7.3322,0 +62188,53,7.3085,0 +62189,53,7.2838,0 +62190,53,7.258,0 +62191,53,7.2313,0 +62192,53,7.2033,0 +62193,53,7.174,0 +62194,53,7.1428,0 +62195,53,7.1094,0 +62196,53,7.0738,0 +62197,53,7.0355,0 +62198,53,6.9952,0 +62199,53,6.9527,0 +62200,53,6.9088,0 +62201,53,6.8639,0 +62202,53,6.8186,0 +62203,53,6.7734,0 +62204,53,6.7284,0 +62205,53,6.6841,0 +62206,53,6.6404,0 +62207,53,6.5977,0 +62208,53,6.5562,0 +62209,53,6.5159,0 +62210,53,6.477,0 +62211,53,6.4395,0 +62212,53,6.4037,0 +62213,53,6.3693,0 +62214,53,6.3361,0 +62215,53,6.3039,0 +62216,53,6.2721,0 +62217,53,6.2404,0 +62218,53,6.2083,0 +62219,53,6.1753,0 +62220,53,6.1412,0 +62221,53,6.1055,0 +62222,53,6.0685,0 +62223,53,6.0301,0 +62224,53,5.9907,0 +62225,53,5.9502,0 +62226,53,5.9092,0 +62227,53,5.8677,0 +62228,53,5.8262,0 +62229,53,5.7851,0 +62230,53,5.7446,0 +62231,53,5.7051,0 +62232,53,5.6671,0 +62233,53,5.631,0 +62234,53,5.5979,0 +62235,53,5.5677,0 +62236,53,5.5416,0 +62237,53,5.5195,0 +62238,53,5.502,0 +62239,53,5.4894,0 +62240,53,5.4817,0 +62241,53,5.4795,0 +62242,53,5.4821,0 +62243,53,5.4904,0 +62244,53,5.5033,0 +62245,53,5.5212,0 +62246,53,5.5437,0 +62247,53,5.57,0 +62248,53,5.6001,0 +62249,53,5.6329,0 +62250,53,5.6679,0 +62251,53,5.7045,0 +62252,53,5.742,0 +62253,53,5.78,0 +62254,53,5.8178,0 +62255,53,5.8551,0 +62256,53,5.8913,0 +62257,53,5.9262,0 +62258,53,5.9594,0 +62259,53,5.9908,0 +62260,53,6.02,0 +62261,53,6.0468,0 +62262,53,6.0715,0 +62263,53,6.0941,0 +62264,53,6.1149,0 +62265,53,6.1344,0 +62266,53,6.1529,0 +62267,53,6.1712,0 +62268,53,6.1897,0 +62269,53,6.2092,0 +62270,53,6.2301,0 +62271,53,6.2528,0 +62272,53,6.2779,0 +62273,53,6.3053,0 +62274,53,6.3354,0 +62275,53,6.3683,0 +62276,53,6.4037,0 +62277,53,6.4424,0 +62278,53,6.4837,0 +62279,53,6.5277,0 +62280,53,6.5741,0 +62281,53,6.6222,0 +62282,53,6.6714,0 +62283,53,6.7206,0 +62284,53,6.7686,0 +62285,53,6.8136,0 +62286,53,6.8547,0 +62287,53,6.8891,0 +62288,53,6.9164,0 +62289,53,6.9348,0 +62290,53,6.9426,0 +62291,53,6.9399,0 +62292,53,6.923,0 +62293,53,6.8936,0 +62294,53,6.8484,0 +62295,53,6.7881,0 +62296,50,6.7122,0 +62297,50,6.6196,0 +62298,54,6.5129,0 +62299,54,6.39,0 +62300,54,6.2551,0 +62301,54,6.1083,0 +62302,54,5.9526,0 +62303,54,5.79,0 +62304,54,5.6224,0 +62305,54,5.4525,0 +62306,54,5.2825,0 +62307,54,5.1146,0 +62308,54,4.9514,0 +62309,54,4.7946,0 +62310,54,4.6457,0 +62311,54,4.5073,0 +62312,54,4.3788,0 +62313,54,4.2627,0 +62314,54,4.1583,0 +62315,54,4.0654,0 +62316,54,3.9847,0 +62317,54,3.914,0 +62318,54,3.854,0 +62319,54,3.8031,0 +62320,54,3.7601,0 +62321,54,3.7251,0 +62322,54,3.696,0 +62323,54,3.6724,0 +62324,54,3.6534,0 +62325,54,3.6378,0 +62326,54,3.6254,0 +62327,54,3.6152,0 +62328,54,3.6067,0 +62329,54,3.5995,0 +62330,54,3.5933,0 +62331,54,3.5877,0 +62332,54,3.5828,0 +62333,54,3.5782,0 +62334,54,3.5739,0 +62335,54,3.5699,0 +62336,54,3.5661,0 +62337,54,3.5625,0 +62338,54,3.559,0 +62339,54,3.5557,0 +62340,54,3.5525,0 +62341,54,3.5495,0 +62342,54,3.5467,0 +62343,54,3.5441,0 +62344,54,3.5418,0 +62345,54,3.5399,0 +62346,54,3.5384,0 +62347,54,3.5375,0 +62348,54,3.5372,0 +62349,54,3.5376,0 +62350,54,3.5387,0 +62351,54,3.5407,0 +62352,54,3.5434,0 +62353,54,3.5469,0 +62354,54,3.5511,0 +62355,54,3.5561,0 +62356,54,3.5616,0 +62357,54,3.5677,0 +62358,54,3.5742,0 +62359,54,3.5811,0 +62360,54,3.5883,0 +62361,54,3.5956,0 +62362,54,3.6031,0 +62363,54,3.6105,0 +62364,54,3.6179,0 +62365,54,3.6252,0 +62366,54,3.6323,0 +62367,54,3.6391,0 +62368,54,3.6456,0 +62369,54,3.6518,0 +62370,54,3.6577,0 +62371,54,3.6632,0 +62372,54,3.6683,0 +62373,54,3.6728,0 +62374,54,3.6769,0 +62375,54,3.6805,0 +62376,54,3.6834,0 +62377,54,3.6858,0 +62378,54,3.6876,0 +62379,54,3.6889,0 +62380,54,3.6897,0 +62381,51,3.6899,0 +62383,53,3.6894,0 +62384,53,3.6887,0 +62385,53,3.6874,0 +62386,53,3.6856,0 +62387,53,3.6831,0 +62388,53,3.6794,0 +62389,53,3.6744,0 +62390,53,3.6678,0 +62391,53,3.6589,0 +62392,53,3.6477,0 +62393,53,3.6334,0 +62394,53,3.6159,0 +62395,53,3.5948,0 +62396,53,3.5694,0 +62397,53,3.5398,0 +62398,53,3.5049,0 +62399,53,3.4649,0 +62400,53,3.4199,0 +62401,53,3.3693,0 +62402,53,3.314,0 +62403,53,3.2539,0 +62404,53,3.1896,0 +62405,53,3.1219,0 +62406,53,3.0508,0 +62407,53,2.9776,0 +62408,53,2.9027,0 +62409,53,2.8266,0 +62410,53,2.75,0 +62411,53,2.6735,0 +62412,53,2.5978,0 +62413,53,2.5237,0 +62414,53,2.4521,0 +62415,53,2.383,0 +62416,53,2.3173,0 +62417,53,2.2553,0 +62418,53,2.1967,0 +62419,53,2.1426,0 +62420,53,2.0921,0 +62421,53,2.0456,0 +62422,53,2.003,0 +62423,53,1.964,0 +62424,53,1.929,0 +62425,53,1.8977,0 +62426,53,1.8697,0 +62427,53,1.8454,0 +62428,53,1.824,0 +62429,53,1.8054,0 +62430,53,1.7895,0 +62431,53,1.7757,0 +62432,53,1.764,0 +62433,53,1.7541,0 +62434,53,1.7457,0 +62435,53,1.7387,0 +62436,53,1.7326,0 +62437,53,1.7274,0 +62438,53,1.7227,0 +62439,53,1.7181,0 +62440,53,1.7133,0 +62441,53,1.708,0 +62442,53,1.7021,0 +62443,53,1.6953,0 +62444,53,1.6876,0 +62445,53,1.6789,0 +62446,53,1.669,0 +62447,53,1.6581,0 +62448,53,1.6463,0 +62449,53,1.6337,0 +62450,53,1.6203,0 +62451,53,1.6063,0 +62452,53,1.5919,0 +62453,53,1.5773,0 +62454,53,1.5628,0 +62455,53,1.5488,0 +62456,53,1.5353,0 +62457,53,1.5228,0 +62458,53,1.5113,0 +62459,53,1.501,0 +62460,53,1.4921,0 +62461,53,1.4844,0 +62462,53,1.478,0 +62463,53,1.4726,0 +62464,53,1.4679,0 +62465,53,1.4639,0 +62466,53,1.4604,0 +62467,53,1.4569,0 +62468,53,1.4532,0 +62469,53,1.4489,0 +62470,53,1.4437,0 +62471,53,1.4374,0 +62472,53,1.4298,0 +62473,53,1.4207,0 +62474,53,1.4101,0 +62475,53,1.3979,0 +62476,53,1.3844,0 +62477,53,1.3698,0 +62478,53,1.3545,0 +62479,53,1.3388,0 +62480,53,1.3229,0 +62481,53,1.3071,0 +62482,53,1.2916,0 +62483,53,1.2768,0 +62484,53,1.2631,0 +62485,53,1.2504,0 +62486,53,1.2391,0 +62487,53,1.2289,0 +62488,53,1.2201,0 +62489,53,1.2124,0 +62490,53,1.2056,0 +62491,53,1.1995,0 +62492,53,1.1936,0 +62493,53,1.1874,0 +62494,53,1.1807,0 +62495,51,1.173,0 +62496,51,1.1642,0 +62497,54,1.1542,0 +62498,54,1.1425,0 +62499,54,1.1293,0 +62500,54,1.1143,0 +62501,54,1.0979,0 +62502,54,1.0802,0 +62503,54,1.0611,0 +62504,54,1.041,0 +62505,54,1.0201,0 +62506,54,0.99867,0 +62507,54,0.97693,0 +62508,54,0.95505,0 +62509,54,0.93314,0 +62510,54,0.91114,0 +62511,54,0.889,0 +62512,54,0.86661,0 +62513,54,0.84376,0 +62514,54,0.82034,0 +62515,54,0.79598,0 +62516,54,0.7704,0 +62517,54,0.74342,0 +62518,54,0.71439,0 +62519,54,0.68341,0 +62520,54,0.65007,0 +62521,54,0.614,0 +62522,54,0.57533,0 +62523,54,0.53352,0 +62524,54,0.48884,0 +62525,54,0.44141,0 +62526,54,0.391,0 +62527,54,0.3383,0 +62528,54,0.28338,0 +62529,54,0.2266,0 +62530,54,0.16853,0 +62531,54,0.10944,0 +62532,54,0.049893,0 +62533,54,-0.0096562,0 +62534,54,-0.068694,0 +62535,54,-0.12692,0 +62536,54,-0.18387,0 +62537,54,-0.23894,0 +62538,54,-0.29197,0 +62539,54,-0.34226,0 +62540,54,-0.38928,0 +62541,54,-0.43298,0 +62542,54,-0.47244,0 +62543,54,-0.50751,0 +62544,54,-0.53815,0 +62545,54,-0.56327,0 +62546,54,-0.58318,0 +62547,54,-0.59788,0 +62548,54,-0.60626,0 +62549,54,-0.60918,0 +62550,54,-0.60666,0 +62551,54,-0.59761,0 +62552,54,-0.58324,0 +62553,54,-0.56364,0 +62554,54,-0.53843,0 +62555,54,-0.50903,0 +62556,54,-0.47586,0 +62557,54,-0.43923,0 +62558,54,-0.40049,0 +62559,54,-0.36044,0 +62560,54,-0.32002,0 +62561,54,-0.28029,0 +62562,54,-0.24213,0 +62563,54,-0.20681,0 +62564,54,-0.17465,0 +62565,54,-0.14626,0 +62566,54,-0.12308,0 +62567,54,-0.1048,0 +62568,54,-0.091768,0 +62569,54,-0.085227,0 +62570,54,-0.084248,0 +62571,54,-0.088684,0 +62572,54,-0.099286,0 +62573,54,-0.11497,0 +62574,54,-0.13517,0 +62575,54,-0.15987,0 +62576,54,-0.18793,0 +62577,54,-0.21851,0 +62578,54,-0.2511,0 +62579,54,-0.28486,0 +62580,54,-0.31912,0 +62581,54,-0.35323,0 +62582,54,-0.38658,0 +62583,54,-0.41868,0 +62584,54,-0.44891,0 +62585,54,-0.47679,0 +62586,54,-0.50225,0 +62587,54,-0.52479,0 +62588,54,-0.54395,0 +62589,54,-0.55989,0 +62590,54,-0.57233,0 +62591,54,-0.58098,0 +62592,54,-0.58637,0 +62593,54,-0.58846,0 +62594,54,-0.58705,0 +62595,54,-0.58271,0 +62596,54,-0.57556,0 +62597,54,-0.56551,0 +62598,54,-0.55329,0 +62599,54,-0.53918,0 +62600,54,-0.52331,0 +62601,54,-0.5063,0 +62602,54,-0.48853,0 +62603,54,-0.47041,0 +62604,54,-0.45242,0 +62605,54,-0.43497,0 +62606,54,-0.41859,0 +62607,54,-0.40344,0 +62608,54,-0.38981,0 +62609,54,-0.37834,0 +62610,54,-0.36904,0 +62611,54,-0.36218,0 +62612,54,-0.35843,0 +62613,54,-0.35747,0 +62614,54,-0.35947,0 +62615,54,-0.36491,0 +62616,54,-0.37331,0 +62617,54,-0.38476,0 +62618,54,-0.39941,0 +62619,54,-0.41667,0 +62620,54,-0.43657,0 +62621,54,-0.45905,0 +62622,54,-0.48362,0 +62623,54,-0.51026,0 +62624,54,-0.53864,0 +62625,54,-0.56826,0 +62626,54,-0.59892,0 +62627,54,-0.63019,0 +62628,54,-0.66177,0 +62629,54,-0.69336,0 +62630,54,-0.72468,0 +62631,54,-0.75541,0 +62632,54,-0.78536,0 +62633,54,-0.81443,0 +62634,54,-0.84229,0 +62635,54,-0.86891,0 +62636,54,-0.89381,0 +62637,54,-0.91696,0 +62638,54,-0.93809,0 +62639,54,-0.95697,0 +62640,54,-0.97382,0 +62641,54,-0.98807,0 +62642,54,-1,0 +62643,54,-1.009,0 +62644,54,-1.0149,0 +62645,54,-1.0173,0 +62646,54,-1.0159,0 +62647,54,-1.0107,0 +62648,54,-1.0007,0 +62649,54,-0.98675,0 +62650,54,-0.96799,0 +62651,54,-0.94551,0 +62652,54,-0.9191,0 +62653,54,-0.88943,0 +62654,54,-0.85662,0 +62655,54,-0.82103,0 +62656,54,-0.78306,0 +62657,54,-0.74311,0 +62658,54,-0.70204,0 +62659,54,-0.66038,0 +62660,54,-0.61878,0 +62661,54,-0.57796,0 +62662,54,-0.53833,0 +62663,54,-0.50067,0 +62664,54,-0.46482,0 +62665,54,-0.43113,0 +62666,54,-0.39907,0 +62667,54,-0.36867,0 +62668,54,-0.33957,0 +62669,54,-0.31174,0 +62670,54,-0.28491,0 +62671,54,-0.25909,0 +62672,54,-0.23401,0 +62673,54,-0.20968,0 +62674,54,-0.18602,0 +62675,54,-0.16311,0 +62676,54,-0.1409,0 +62677,54,-0.11949,0 +62678,54,-0.098959,0 +62679,54,-0.079564,0 +62680,54,-0.061437,0 +62681,54,-0.044939,0 +62682,54,-0.030121,0 +62683,54,-0.0173,0 +62684,54,-0.0064639,0 +62685,54,0.0021368,0 +62686,54,0.0087083,0 +62687,54,0.013173,0 +62688,54,0.015963,0 +62689,54,0.017118,0 +62690,54,0.017028,0 +62691,54,0.015769,0 +62692,54,0.013716,0 +62693,54,0.010809,0 +62694,54,0.0072096,0 +62695,54,0.0028125,0 +62696,54,-0.0022097,0 +62697,54,-0.007874,0 +62698,54,-0.0139,0 +62699,54,-0.020175,0 +62700,54,-0.026518,0 +62701,54,-0.032848,0 +62702,54,-0.039156,0 +62703,54,-0.045364,0 +62704,54,-0.051377,0 +62705,54,-0.057218,0 +62706,54,-0.062878,0 +62707,54,-0.068209,0 +62708,54,-0.072931,0 +62709,54,-0.076907,0 +62710,54,-0.079853,0 +62711,54,-0.081943,0 +62712,54,-0.083068,0 +62713,54,-0.08346,0 +62714,54,-0.083147,0 +62715,54,-0.082333,0 +62716,54,-0.081101,0 +62717,54,-0.07969,0 +62718,54,-0.078198,0 +62719,54,-0.076533,0 +62720,54,-0.074637,0 +62721,54,-0.072466,0 +62722,54,-0.070056,0 +62723,54,-0.067343,0 +62724,54,-0.064281,0 +62725,54,-0.060721,0 +62726,54,-0.056737,0 +62727,54,-0.052333,0 +62728,54,-0.047521,0 +62729,54,-0.042312,0 +62730,54,-0.036661,0 +62731,54,-0.030596,0 +62732,54,-0.024257,0 +62733,54,-0.017988,0 +62734,54,-0.012163,0 +62735,54,-0.0070617,0 +62736,54,-0.0030908,0 +62737,54,-0.00056394,0 +62738,54,0.00025162,0 +62739,54,-0.00073304,0 +62740,54,-0.0032317,0 +62741,54,-0.0072616,0 +62742,54,-0.012445,0 +62743,54,-0.018807,0 +62744,46,-0.026015,0 +62745,46,-0.033949,0 +62746,47,-0.042171,0 +62747,47,-0.050253,0 +62748,47,-0.057695,0 +62749,47,-0.06413,0 +62750,47,-0.068921,0 +62751,47,-0.071919,0 +62752,47,-0.072558,0 +62753,47,-0.07126,0 +62754,47,-0.067959,0 +62755,47,-0.062972,0 +62756,47,-0.056415,0 +62757,47,-0.048453,0 +62758,47,-0.039322,0 +62759,47,-0.029178,0 +62760,47,-0.018486,0 +62761,47,-0.0075834,0 +62762,47,0.0031592,0 +62763,47,0.013365,0 +62764,47,0.022764,0 +62765,47,0.031,0 +62766,47,0.038017,0 +62767,47,0.043894,0 +62768,47,0.048762,0 +62769,47,0.052812,0 +62770,47,0.05609,0 +62771,47,0.058792,0 +62772,47,0.060954,0 +62773,47,0.062855,0 +62774,47,0.064711,0 +62775,47,0.066675,0 +62776,47,0.068788,0 +62777,47,0.071036,0 +62778,47,0.073431,0 +62779,47,0.075946,0 +62780,47,0.078494,0 +62781,47,0.080878,0 +62782,47,0.08288,0 +62783,47,0.084326,0 +62784,47,0.085148,0 +62785,47,0.085183,0 +62786,47,0.084431,0 +62787,47,0.082672,0 +62788,47,0.080005,0 +62789,47,0.07647,0 +62790,47,0.072489,0 +62791,47,0.068317,0 +62792,47,0.064283,0 +62793,47,0.060716,0 +62794,47,0.057748,0 +62795,47,0.055618,0 +62796,47,0.054372,0 +62797,47,0.054098,0 +62798,47,0.054766,0 +62799,47,0.056426,0 +62800,47,0.059023,0 +62801,47,0.062492,0 +62802,47,0.066763,0 +62803,47,0.071569,0 +62804,47,0.076675,0 +62805,47,0.081827,0 +62806,47,0.086756,0 +62807,47,0.091363,0 +62808,47,0.095611,0 +62809,47,0.099662,0 +62810,47,0.10362,0 +62811,47,0.10765,0 +62812,47,0.11182,0 +62813,47,0.11611,0 +62814,47,0.1206,0 +62815,47,0.12525,0 +62816,47,0.12995,0 +62817,47,0.13454,0 +62818,47,0.13886,0 +62819,47,0.14264,0 +62820,47,0.14567,0 +62821,47,0.14755,0 +62822,47,0.14801,0 +62823,47,0.1465,0 +62824,47,0.14301,0 +62825,47,0.13697,0 +62826,47,0.12872,0 +62827,47,0.11788,0 +62828,47,0.10504,0 +62829,47,0.090059,0 +62830,47,0.073704,0 +62831,47,0.056205,0 +62832,47,0.038207,0 +62833,47,0.020261,0 +62834,47,0.002978,0 +62835,47,-0.012922,0 +62836,47,-0.027054,0 +62837,47,-0.038877,0 +62838,47,-0.048227,0 +62839,47,-0.05469,0 +62840,47,-0.058264,0 +62841,47,-0.058915,0 +62842,47,-0.056915,0 +62843,47,-0.052583,0 +62844,47,-0.046332,0 +62845,47,-0.038583,0 +62846,47,-0.029783,0 +62847,47,-0.020445,0 +62848,47,-0.011131,0 +62849,47,-0.0022712,0 +62850,47,0.0057994,0 +62851,47,0.012917,0 +62852,47,0.018821,0 +62853,47,0.023484,0 +62854,47,0.026792,0 +62855,47,0.028979,0 +62856,47,0.030249,0 +62857,47,0.03103,0 +62858,47,0.031707,0 +62859,47,0.032674,0 +62860,47,0.034448,0 +62861,47,0.037319,0 +62862,47,0.041832,0 +62863,47,0.048041,0 +62864,47,0.056309,0 +62865,47,0.066432,0 +62866,47,0.07861,0 +62867,47,0.092342,0 +62868,47,0.10734,0 +62869,47,0.12286,0 +62870,47,0.1381,0 +62871,47,0.15223,0 +62872,47,0.16398,0 +62873,47,0.17272,0 +62874,47,0.17684,0 +62875,47,0.17611,0 +62876,47,0.16886,0 +62877,47,0.15536,0 +62878,47,0.13401,0 +62879,47,0.10564,0 +62880,47,0.068965,0 +62881,47,0.025402,0 +62882,47,-0.025467,0 +62883,47,-0.08173,0 +62884,47,-0.14298,0 +62885,47,-0.20717,0 +62886,47,-0.27309,0 +62887,47,-0.33905,0 +62888,47,-0.40329,0 +62889,47,-0.46474,0 +62890,47,-0.52131,0 +62891,47,-0.57262,0 +62892,47,-0.61634,0 +62893,47,-0.65296,0 +62894,47,-0.68014,0 +62895,47,-0.69918,0 +62896,47,-0.70815,0 +62897,47,-0.7091,0 +62898,47,-0.70056,0 +62899,47,-0.68487,0 +62900,47,-0.66093,0 +62901,47,-0.63089,0 +62902,47,-0.59406,0 +62903,47,-0.55216,0 +62904,47,-0.50477,0 +62905,47,-0.45348,0 +62906,47,-0.39826,0 +62907,47,-0.34043,0 +62908,47,-0.28033,0 +62909,47,-0.21897,0 +62910,47,-0.15696,0 +62911,47,-0.095099,0 +62912,47,-0.034122,0 +62913,47,0.025394,0 +62914,47,0.082384,0 +62915,47,0.13639,0 +62916,47,0.18627,0 +62917,47,0.23163,0 +62918,47,0.27139,0 +62919,47,0.30553,0 +62920,47,0.33331,0 +62921,47,0.355,0 +62922,47,0.37015,0 +62923,47,0.37922,0 +62924,47,0.38223,0 +62925,47,0.37979,0 +62926,47,0.37215,0 +62927,47,0.35994,0 +62928,47,0.34378,0 +62929,47,0.32443,0 +62930,47,0.30265,0 +62931,47,0.27916,0 +62932,47,0.25472,0 +62933,47,0.22999,0 +62934,47,0.20548,0 +62935,47,0.18169,0 +62936,47,0.15893,0 +62937,47,0.13761,0 +62938,47,0.11776,0 +62939,47,0.099782,0 +62940,49,0.083595,0 +62941,49,0.069629,0 +62942,49,0.057578,0 +62943,49,0.047778,0 +62944,49,0.039827,0 +62945,49,0.034104,0 +62946,49,0.030092,0 +62947,49,0.028037,0 +62948,49,0.027474,0 +62949,49,0.028559,0 +62950,49,0.030882,0 +62951,49,0.034462,0 +62952,49,0.038834,0 +62953,49,0.043804,0 +62954,49,0.049009,0 +62955,49,0.054221,0 +62956,49,0.059256,0 +62957,49,0.063927,0 +62958,49,0.06809,0 +62959,49,0.071574,0 +62960,49,0.074372,0 +62961,49,0.076396,0 +62962,49,0.077703,0 +62963,49,0.078325,0 +62964,49,0.078417,0 +62965,49,0.078189,0 +62966,49,0.078052,0 +62967,49,0.078407,0 +62968,49,0.079582,0 +62969,49,0.081821,0 +62970,49,0.085174,0 +62971,49,0.089733,0 +62972,49,0.095448,0 +62973,49,0.10226,0 +62974,49,0.11002,0 +62975,49,0.11861,0 +62976,49,0.12782,0 +62977,49,0.13743,0 +62978,49,0.14719,0 +62979,49,0.15676,0 +62980,49,0.1657,0 +62981,49,0.17349,0 +62982,49,0.17978,0 +62983,49,0.18431,0 +62984,49,0.18711,0 +62985,49,0.18809,0 +62986,49,0.18749,0 +62987,49,0.18538,0 +62988,49,0.18204,0 +62989,49,0.17762,0 +62990,49,0.17244,0 +62991,49,0.16663,0 +62992,49,0.16048,0 +62993,49,0.15422,0 +62994,49,0.14818,0 +62995,49,0.14287,0 +62996,49,0.13859,0 +62997,49,0.13575,0 +62998,49,0.13425,0 +62999,49,0.13444,0 +63000,49,0.13607,0 +63001,49,0.13941,0 +63002,49,0.14417,0 +63003,49,0.15057,0 +63004,49,0.1582,0 +63005,49,0.16734,0 +63006,49,0.17769,0 +63007,49,0.18934,0 +63008,49,0.20196,0 +63009,49,0.21532,0 +63010,49,0.22904,0 +63011,49,0.24284,0 +63012,49,0.25651,0 +63013,49,0.26981,0 +63014,49,0.28259,0 +63015,49,0.29465,0 +63016,49,0.30579,0 +63017,49,0.31591,0 +63018,49,0.32494,0 +63019,49,0.33279,0 +63020,49,0.33921,0 +63021,49,0.34429,0 +63022,49,0.34781,0 +63023,49,0.34998,0 +63024,49,0.35068,0 +63025,49,0.35016,0 +63026,49,0.34813,0 +63027,49,0.34488,0 +63028,49,0.34004,0 +63029,49,0.33386,0 +63030,49,0.32606,0 +63031,49,0.3169,0 +63032,49,0.30606,0 +63033,49,0.29373,0 +63034,49,0.27981,0 +63035,49,0.26455,0 +63036,49,0.24797,0 +63037,49,0.23033,0 +63038,49,0.21173,0 +63039,49,0.19248,0 +63040,49,0.17306,0 +63041,49,0.15393,0 +63042,49,0.13562,0 +63043,49,0.11874,0 +63044,49,0.10379,0 +63045,49,0.091299,0 +63046,49,0.081797,0 +63047,49,0.075838,0 +63048,49,0.073684,0 +63049,49,0.075696,0 +63050,49,0.081892,0 +63051,49,0.092477,0 +63052,49,0.10733,0 +63053,49,0.12644,0 +63054,49,0.14925,0 +63055,49,0.17542,0 +63056,49,0.20434,0 +63057,49,0.23546,0 +63058,49,0.26811,0 +63059,49,0.30168,0 +63060,49,0.33544,0 +63061,49,0.36876,0 +63062,49,0.40092,0 +63063,49,0.43146,0 +63064,49,0.45972,0 +63065,49,0.48542,0 +63066,49,0.50779,0 +63067,49,0.52697,0 +63068,49,0.54227,0 +63069,49,0.5543,0 +63070,49,0.56237,0 +63071,49,0.56725,0 +63072,49,0.56854,0 +63073,49,0.56684,0 +63074,49,0.56212,0 +63075,49,0.55482,0 +63076,49,0.54518,0 +63077,49,0.53335,0 +63078,49,0.51967,0 +63079,49,0.50428,0 +63080,49,0.48764,0 +63081,49,0.46972,0 +63082,49,0.45087,0 +63083,49,0.43102,0 +63084,49,0.41044,0 +63085,49,0.38931,0 +63086,49,0.36791,0 +63087,49,0.34651,0 +63088,49,0.32532,0 +63089,49,0.30452,0 +63090,49,0.28467,0 +63091,49,0.26617,0 +63092,49,0.24946,0 +63093,49,0.23501,0 +63094,49,0.22301,0 +63095,49,0.2143,0 +63096,49,0.20877,0 +63097,49,0.20697,0 +63098,49,0.20857,0 +63099,49,0.21327,0 +63100,49,0.22086,0 +63101,49,0.2306,0 +63102,49,0.24237,0 +63103,49,0.25538,0 +63104,49,0.26893,0 +63105,49,0.28232,0 +63106,49,0.29502,0 +63107,49,0.30615,0 +63108,49,0.3153,0 +63109,49,0.3219,0 +63110,45,0.32543,0 +63111,45,0.32611,0 +63112,48,0.3236,0 +63113,48,0.31859,0 +63114,48,0.31136,0 +63115,48,0.30218,0 +63116,48,0.29152,0 +63117,48,0.27978,0 +63118,48,0.26761,0 +63119,48,0.25548,0 +63120,48,0.24406,0 +63121,48,0.23376,0 +63122,48,0.22525,0 +63123,48,0.2187,0 +63124,48,0.21468,0 +63125,48,0.21331,0 +63126,48,0.21466,0 +63127,48,0.2189,0 +63128,48,0.22566,0 +63129,48,0.23545,0 +63130,48,0.24779,0 +63131,48,0.2627,0 +63132,48,0.2798,0 +63133,48,0.29862,0 +63134,48,0.31883,0 +63135,48,0.33995,0 +63136,48,0.36168,0 +63137,48,0.38355,0 +63138,48,0.40519,0 +63139,48,0.42625,0 +63140,48,0.44649,0 +63141,48,0.46565,0 +63142,48,0.4836,0 +63143,48,0.49988,0 +63144,48,0.51456,0 +63145,48,0.52721,0 +63146,48,0.53818,0 +63147,48,0.54734,0 +63148,48,0.5548,0 +63149,48,0.56055,0 +63150,48,0.5646,0 +63151,48,0.56712,0 +63152,48,0.56808,0 +63153,48,0.56769,0 +63154,48,0.56569,0 +63155,48,0.56236,0 +63156,48,0.55748,0 +63157,48,0.5513,0 +63158,48,0.54374,0 +63159,48,0.53491,0 +63160,48,0.5247,0 +63161,48,0.51317,0 +63162,48,0.50049,0 +63163,48,0.48665,0 +63164,48,0.47185,0 +63165,48,0.45595,0 +63166,48,0.43915,0 +63167,48,0.42145,0 +63168,48,0.40313,0 +63169,48,0.38424,0 +63170,48,0.36508,0 +63171,48,0.34578,0 +63172,48,0.32655,0 +63173,48,0.30765,0 +63174,48,0.28938,0 +63175,48,0.27191,0 +63176,48,0.25546,0 +63177,48,0.24012,0 +63178,48,0.22628,0 +63179,48,0.214,0 +63180,48,0.20376,0 +63181,48,0.19527,0 +63182,48,0.18899,0 +63183,48,0.18454,0 +63184,48,0.18217,0 +63185,48,0.18158,0 +63186,48,0.18291,0 +63187,48,0.18585,0 +63188,48,0.19042,0 +63189,48,0.19634,0 +63190,48,0.2036,0 +63191,48,0.21206,0 +63192,48,0.22156,0 +63193,48,0.23183,0 +63194,48,0.24272,0 +63195,48,0.25414,0 +63196,48,0.26595,0 +63197,48,0.27806,0 +63198,48,0.29033,0 +63199,48,0.3026,0 +63200,48,0.31478,0 +63201,48,0.32672,0 +63202,48,0.33837,0 +63203,48,0.34962,0 +63204,48,0.36043,0 +63205,48,0.37062,0 +63206,48,0.38031,0 +63207,48,0.38947,0 +63208,48,0.39821,0 +63209,48,0.40645,0 +63210,48,0.41433,0 +63211,48,0.42184,0 +63212,48,0.42912,0 +63213,48,0.43626,0 +63214,48,0.44329,0 +63215,48,0.45017,0 +63216,48,0.45687,0 +63217,48,0.46325,0 +63218,48,0.46922,0 +63219,48,0.47447,0 +63220,48,0.47881,0 +63221,48,0.48174,0 +63222,48,0.48321,0 +63223,48,0.48263,0 +63224,48,0.48003,0 +63225,48,0.4748,0 +63226,48,0.46725,0 +63227,48,0.45686,0 +63228,48,0.44407,0 +63229,48,0.42864,0 +63230,48,0.41116,0 +63231,48,0.39169,0 +63232,48,0.37095,0 +63233,48,0.34928,0 +63234,48,0.3274,0 +63235,48,0.30595,0 +63236,48,0.28548,0 +63237,48,0.26684,0 +63238,48,0.25037,0 +63239,48,0.23685,0 +63240,48,0.22612,0 +63241,48,0.2188,0 +63242,48,0.2145,0 +63243,48,0.21365,0 +63244,48,0.21563,0 +63245,48,0.2205,0 +63246,48,0.22754,0 +63247,48,0.23673,0 +63248,48,0.24737,0 +63249,48,0.2592,0 +63250,48,0.27151,0 +63251,48,0.28375,0 +63252,48,0.29541,0 +63253,48,0.30593,0 +63254,48,0.31526,0 +63255,48,0.32286,0 +63256,48,0.32887,0 +63257,48,0.33284,0 +63258,48,0.33514,0 +63259,48,0.33561,0 +63260,48,0.33474,0 +63261,48,0.33231,0 +63262,48,0.32878,0 +63263,48,0.32414,0 +63264,48,0.31892,0 +63265,48,0.31347,0 +63266,48,0.30822,0 +63267,48,0.30352,0 +63268,48,0.29951,0 +63269,48,0.29669,0 +63270,48,0.29509,0 +63271,48,0.29516,0 +63272,48,0.29672,0 +63273,48,0.3,0 +63274,48,0.30464,0 +63275,48,0.31092,0 +63276,48,0.31848,0 +63277,48,0.32736,0 +63278,48,0.3372,0 +63279,48,0.34781,0 +63280,48,0.35881,0 +63281,48,0.37011,0 +63282,48,0.38153,0 +63283,48,0.39283,0 +63284,48,0.40387,0 +63285,48,0.41444,0 +63286,48,0.42446,0 +63287,48,0.43387,0 +63288,48,0.44271,0 +63289,48,0.4509,0 +63290,48,0.45848,0 +63291,48,0.46541,0 +63292,48,0.47174,0 +63293,48,0.47746,0 +63294,48,0.48259,0 +63295,48,0.48705,0 +63296,48,0.49073,0 +63297,48,0.49351,0 +63298,48,0.49527,0 +63299,48,0.49583,0 +63300,48,0.49502,0 +63301,48,0.4926,0 +63302,48,0.48839,0 +63303,48,0.4822,0 +63304,48,0.47381,0 +63305,48,0.46319,0 +63306,48,0.45012,0 +63307,48,0.43459,0 +63308,48,0.41645,0 +63309,48,0.39579,0 +63310,48,0.37242,0 +63311,48,0.3466,0 +63312,48,0.31819,0 +63313,48,0.2876,0 +63314,48,0.25486,0 +63315,48,0.22048,0 +63316,48,0.18457,0 +63317,48,0.14762,0 +63318,48,0.10988,0 +63319,48,0.071775,0 +63320,48,0.033709,0 +63321,48,-0.0038963,0 +63322,48,-0.040509,0 +63323,48,-0.075813,0 +63324,48,-0.10901,0 +63325,48,-0.13995,0 +63326,48,-0.16763,0 +63327,48,-0.19219,0 +63328,48,-0.21249,0 +63329,48,-0.229,0 +63330,48,-0.24047,0 +63331,48,-0.24764,0 +63332,48,-0.24931,0 +63333,48,-0.24637,0 +63334,48,-0.23781,0 +63335,48,-0.22467,0 +63336,48,-0.20628,0 +63337,48,-0.18366,0 +63338,48,-0.15653,0 +63339,48,-0.12592,0 +63340,48,-0.092009,0 +63341,48,-0.055747,0 +63342,48,-0.017712,0 +63343,48,0.021278,0 +63344,48,0.060539,0 +63345,49,0.099385,0 +63346,49,0.13716,0 +63347,49,0.17334,0 +63348,49,0.20748,0 +63349,49,0.23928,0 +63350,49,0.26865,0 +63351,49,0.29543,0 +63352,49,0.31986,0 +63353,49,0.34201,0 +63354,49,0.36239,0 +63355,49,0.38136,0 +63356,49,0.39963,0 +63357,49,0.41779,0 +63358,49,0.43643,0 +63359,49,0.45623,0 +63360,49,0.47757,0 +63361,49,0.50112,0 +63362,49,0.52694,0 +63363,49,0.55547,0 +63364,49,0.58647,0 +63365,49,0.62012,0 +63366,49,0.65586,0 +63367,49,0.69357,0 +63368,49,0.73258,0 +63369,49,0.77239,0 +63370,49,0.8122,0 +63371,49,0.85124,0 +63372,49,0.88883,0 +63373,49,0.92415,0 +63374,49,0.95666,0 +63375,49,0.98547,0 +63376,49,1.0102,0 +63377,49,1.0302,0 +63378,49,1.0451,0 +63379,49,1.0546,0 +63380,49,1.0584,0 +63381,49,1.0566,0 +63382,49,1.0487,0 +63383,49,1.0354,0 +63384,49,1.0162,0 +63385,49,0.99213,0 +63386,49,0.96282,0 +63387,49,0.92936,0 +63388,47,0.89155,0 +63389,47,0.8507,0 +63390,49,0.8069,0 +63391,49,0.76127,0 +63392,49,0.71437,0 +63393,49,0.66715,0 +63394,49,0.6204,0 +63395,49,0.57499,0 +63396,49,0.5319,0 +63397,49,0.49194,0 +63398,49,0.456,0 +63399,49,0.42505,0 +63400,49,0.39977,0 +63401,49,0.38121,0 +63402,49,0.36952,0 +63403,49,0.36562,0 +63404,49,0.369,0 +63405,49,0.38041,0 +63406,49,0.39868,0 +63407,49,0.42417,0 +63408,49,0.45544,0 +63409,49,0.49252,0 +63410,49,0.53381,0 +63411,49,0.57905,0 +63412,49,0.62672,0 +63413,49,0.67595,0 +63414,49,0.72543,0 +63415,49,0.77392,0 +63416,49,0.82056,0 +63417,49,0.864,0 +63418,49,0.90399,0 +63419,49,0.93924,0 +63420,49,0.97017,0 +63421,49,0.99592,0 +63422,49,1.0172,0 +63423,49,1.0334,0 +63424,49,1.0455,0 +63425,49,1.0529,0 +63426,49,1.0567,0 +63427,49,1.0566,0 +63428,49,1.0535,0 +63429,49,1.0474,0 +63430,49,1.039,0 +63431,49,1.0281,0 +63432,49,1.0155,0 +63433,49,1.0012,0 +63434,49,0.98534,0 +63435,49,0.968,0 +63436,49,0.94947,0 +63437,49,0.92955,0 +63438,49,0.90847,0 +63439,49,0.8862,0 +63440,49,0.86297,0 +63441,49,0.8388,0 +63442,49,0.81399,0 +63443,49,0.78874,0 +63444,49,0.76338,0 +63445,49,0.73832,0 +63446,49,0.71378,0 +63447,49,0.69008,0 +63448,49,0.66732,0 +63449,49,0.64571,0 +63450,49,0.62521,0 +63451,49,0.60612,0 +63452,49,0.58844,0 +63453,49,0.57246,0 +63454,49,0.55823,0 +63455,49,0.54599,0 +63456,49,0.53576,0 +63457,49,0.52764,0 +63458,49,0.5214,0 +63459,49,0.51679,0 +63460,49,0.51352,0 +63461,49,0.51125,0 +63462,49,0.50969,0 +63463,49,0.50854,0 +63464,49,0.50755,0 +63465,49,0.50638,0 +63466,49,0.50468,0 +63467,49,0.50211,0 +63468,49,0.49818,0 +63469,49,0.4928,0 +63470,49,0.48533,0 +63471,49,0.476,0 +63472,49,0.46462,0 +63473,49,0.4519,0 +63474,49,0.43822,0 +63475,49,0.42433,0 +63476,49,0.41097,0 +63477,49,0.39888,0 +63478,49,0.38891,0 +63479,49,0.3818,0 +63480,49,0.37812,0 +63481,49,0.37882,0 +63482,49,0.38397,0 +63483,49,0.39482,0 +63484,49,0.41082,0 +63485,49,0.43346,0 +63486,49,0.46152,0 +63487,49,0.49558,0 +63488,49,0.53439,0 +63489,49,0.57765,0 +63490,49,0.62438,0 +63491,49,0.67362,0 +63492,49,0.72442,0 +63493,49,0.77576,0 +63494,49,0.82679,0 +63495,49,0.87689,0 +63496,49,0.92507,0 +63497,49,0.97108,0 +63498,49,1.0138,0 +63499,49,1.0532,0 +63500,49,1.0884,0 +63501,49,1.1195,0 +63502,49,1.1462,0 +63503,49,1.1685,0 +63504,49,1.1867,0 +63505,49,1.2009,0 +63506,49,1.2118,0 +63507,49,1.2198,0 +63508,49,1.2256,0 +63509,49,1.2295,0 +63510,49,1.2324,0 +63511,49,1.2347,0 +63512,49,1.2372,0 +63513,49,1.2408,0 +63514,49,1.2462,0 +63515,49,1.2542,0 +63516,49,1.2656,0 +63517,49,1.281,0 +63518,49,1.3009,0 +63519,49,1.3254,0 +63520,49,1.3547,0 +63521,49,1.3883,0 +63522,49,1.4261,0 +63523,49,1.4672,0 +63524,49,1.5114,0 +63525,49,1.5575,0 +63526,49,1.6051,0 +63527,49,1.653,0 +63528,49,1.7001,0 +63529,49,1.7453,0 +63530,49,1.7869,0 +63531,49,1.8244,0 +63532,49,1.8558,0 +63533,49,1.881,0 +63534,49,1.8984,0 +63535,49,1.9085,0 +63536,49,1.9102,0 +63537,49,1.9046,0 +63538,49,1.891,0 +63539,49,1.8707,0 +63540,49,1.8437,0 +63541,49,1.8115,0 +63542,49,1.7744,0 +63543,49,1.7339,0 +63544,49,1.6906,0 +63545,49,1.6457,0 +63546,49,1.6,0 +63547,49,1.5542,0 +63548,49,1.509,0 +63549,49,1.4646,0 +63550,49,1.4212,0 +63551,49,1.3788,0 +63552,49,1.3372,0 +63553,49,1.2961,0 +63554,49,1.255,0 +63555,49,1.2132,0 +63556,49,1.1701,0 +63557,49,1.1246,0 +63558,49,1.0763,0 +63559,49,1.0238,0 +63560,49,0.96707,0 +63561,49,0.90428,0 +63562,49,0.83572,0 +63563,49,0.76017,0 +63564,49,0.67743,0 +63565,49,0.5868,0 +63566,49,0.48718,0 +63567,49,0.37883,0 +63568,49,0.25951,0 +63569,49,0.13023,0 +63570,49,-0.011051,0 +63571,46,-0.16422,0 +63572,46,-0.32969,0 +63573,51,-0.50847,0 +63574,51,-0.69908,0 +63575,51,-0.90346,0 +63576,51,-1.1192,0 +63577,51,-1.3469,0 +63578,51,-1.5848,0 +63579,51,-1.8313,0 +63580,51,-2.0848,0 +63581,51,-2.3426,0 +63582,51,-2.6022,0 +63583,51,-2.8605,0 +63584,51,-3.1143,0 +63585,51,-3.3609,0 +63586,51,-3.5978,0 +63587,51,-3.8222,0 +63588,51,-4.0335,0 +63589,51,-4.228,0 +63590,51,-4.4077,0 +63591,51,-4.5694,0 +63592,51,-4.716,0 +63593,51,-4.8459,0 +63594,51,-4.9617,0 +63595,51,-5.0636,0 +63596,51,-5.1541,0 +63597,51,-5.2345,0 +63598,51,-5.3072,0 +63599,51,-5.3735,0 +63600,51,-5.4352,0 +63601,51,-5.4937,0 +63602,51,-5.5501,0 +63603,51,-5.6052,0 +63604,51,-5.6594,0 +63605,51,-5.7127,0 +63606,51,-5.765,0 +63607,51,-5.8158,0 +63608,51,-5.8648,0 +63609,51,-5.9108,0 +63610,51,-5.9536,0 +63611,51,-5.9912,0 +63612,51,-6.0237,0 +63613,51,-6.0485,0 +63614,51,-6.0659,0 +63615,51,-6.0735,0 +63616,51,-6.071,0 +63617,51,-6.0571,0 +63618,51,-6.0313,0 +63619,51,-5.994,0 +63620,51,-5.9442,0 +63621,51,-5.8843,0 +63622,51,-5.8131,0 +63623,51,-5.7335,0 +63624,51,-5.6459,0 +63625,51,-5.5519,0 +63626,51,-5.4531,0 +63627,51,-5.3504,0 +63628,51,-5.2456,0 +63629,51,-5.14,0 +63630,51,-5.035,0 +63631,51,-4.9319,0 +63632,51,-4.832,0 +63633,51,-4.736,0 +63634,51,-4.6453,0 +63635,51,-4.56,0 +63636,51,-4.4805,0 +63637,51,-4.4071,0 +63638,51,-4.3389,0 +63639,51,-4.2765,0 +63640,51,-4.2185,0 +63641,51,-4.1649,0 +63642,51,-4.115,0 +63643,51,-4.068,0 +63644,51,-4.0236,0 +63645,51,-3.9809,0 +63646,51,-3.9395,0 +63647,51,-3.8989,0 +63648,51,-3.8586,0 +63649,51,-3.8182,0 +63650,51,-3.7773,0 +63651,51,-3.7359,0 +63652,51,-3.694,0 +63653,51,-3.6518,0 +63654,51,-3.6094,0 +63655,51,-3.5672,0 +63656,51,-3.5253,0 +63657,51,-3.4839,0 +63658,51,-3.4432,0 +63659,51,-3.4033,0 +63660,51,-3.3644,0 +63661,51,-3.3267,0 +63662,51,-3.2906,0 +63663,51,-3.2561,0 +63664,51,-3.224,0 +63665,51,-3.194,0 +63666,51,-3.167,0 +63667,51,-3.1427,0 +63668,51,-3.1221,0 +63669,51,-3.1051,0 +63670,51,-3.0922,0 +63671,51,-3.0842,0 +63672,51,-3.0811,0 +63673,51,-3.0839,0 +63674,51,-3.0924,0 +63675,51,-3.1071,0 +63676,51,-3.1286,0 +63677,51,-3.1565,0 +63678,51,-3.1917,0 +63679,51,-3.2346,0 +63680,51,-3.2852,0 +63681,51,-3.3447,0 +63682,51,-3.4132,0 +63683,51,-3.4911,0 +63684,51,-3.5802,0 +63685,51,-3.6802,0 +63686,51,-3.7914,0 +63687,51,-3.9155,0 +63688,51,-4.0519,0 +63689,51,-4.2004,0 +63690,51,-4.3611,0 +63691,51,-4.5331,0 +63692,51,-4.7148,0 +63693,51,-4.9053,0 +63694,51,-5.1031,0 +63695,51,-5.3057,0 +63696,51,-5.5112,0 +63697,51,-5.7175,0 +63698,51,-5.9223,0 +63699,51,-6.1234,0 +63700,51,-6.3186,0 +63701,51,-6.5058,0 +63702,51,-6.684,0 +63703,51,-6.8519,0 +63704,51,-7.0076,0 +63705,51,-7.1504,0 +63706,51,-7.2805,0 +63707,51,-7.3976,0 +63708,51,-7.501,0 +63709,51,-7.5921,0 +63710,51,-7.6715,0 +63711,51,-7.7396,0 +63712,51,-7.7965,0 +63713,51,-7.8428,0 +63714,51,-7.878,0 +63715,51,-7.9011,0 +63716,51,-7.9124,0 +63717,51,-7.9123,0 +63718,51,-7.9009,0 +63719,51,-7.8779,0 +63720,51,-7.845,0 +63721,51,-7.803,0 +63722,51,-7.7521,0 +63723,51,-7.6916,0 +63724,51,-7.6219,0 +63725,51,-7.5431,0 +63726,51,-7.455,0 +63727,51,-7.3569,0 +63728,51,-7.2497,0 +63729,51,-7.1339,0 +63730,51,-7.0104,0 +63731,51,-6.8801,0 +63732,51,-6.7448,0 +63733,51,-6.6059,0 +63734,51,-6.4652,0 +63735,51,-6.3245,0 +63736,51,-6.1857,0 +63737,51,-6.0504,0 +63738,51,-5.9203,0 +63739,51,-5.7971,0 +63740,51,-5.6829,0 +63741,51,-5.5784,0 +63742,51,-5.4844,0 +63743,51,-5.4011,0 +63744,51,-5.3284,0 +63745,51,-5.2654,0 +63746,51,-5.2102,0 +63747,51,-5.1609,0 +63748,51,-5.1157,0 +63749,51,-5.0726,0 +63750,51,-5.0294,0 +63751,51,-4.9844,0 +63752,51,-4.9364,0 +63753,51,-4.8847,0 +63754,51,-4.8291,0 +63755,51,-4.7698,0 +63756,51,-4.7072,0 +63757,51,-4.6417,0 +63758,51,-4.5738,0 +63759,51,-4.5034,0 +63760,51,-4.4302,0 +63761,51,-4.354,0 +63762,51,-4.2743,0 +63763,51,-4.1904,0 +63764,51,-4.1012,0 +63765,51,-4.0048,0 +63766,51,-3.8987,0 +63767,51,-3.7802,0 +63768,51,-3.6472,0 +63769,51,-3.4988,0 +63770,51,-3.3357,0 +63771,51,-3.1598,0 +63772,51,-2.9744,0 +63773,51,-2.7835,0 +63774,51,-2.5911,0 +63775,51,-2.4012,0 +63776,51,-2.2182,0 +63777,51,-2.0473,0 +63778,37,-1.8932,0 +63779,37,-1.7596,0 +63780,40,-1.6488,0 +63781,40,-1.5612,0 +63782,40,-1.4966,0 +63783,40,-1.4544,0 +63784,40,-1.434,0 +63785,40,-1.4359,0 +63786,40,-1.4611,0 +63787,40,-1.5101,0 +63788,40,-1.582,0 +63789,40,-1.6749,0 +63790,40,-1.786,0 +63791,40,-1.912,0 +63792,40,-2.0492,0 +63793,40,-2.1929,0 +63794,40,-2.3378,0 +63795,40,-2.4782,0 +63796,40,-2.6078,0 +63797,40,-2.7199,0 +63798,40,-2.8087,0 +63799,40,-2.8708,0 +63800,40,-2.9051,0 +63801,40,-2.9126,0 +63802,40,-2.8963,0 +63803,40,-2.8608,0 +63804,40,-2.8116,0 +63805,40,-2.7549,0 +63806,40,-2.6962,0 +63807,40,-2.6414,0 +63808,40,-2.5962,0 +63809,40,-2.5649,0 +63810,40,-2.5502,0 +63811,40,-2.5524,0 +63812,40,-2.571,0 +63813,40,-2.602,0 +63814,40,-2.6411,0 +63815,40,-2.684,0 +63816,40,-2.7268,0 +63817,40,-2.766,0 +63818,40,-2.7984,0 +63819,40,-2.821,0 +63820,40,-2.8326,0 +63821,40,-2.8332,0 +63822,40,-2.8233,0 +63823,40,-2.8045,0 +63824,40,-2.7788,0 +63825,40,-2.7496,0 +63826,40,-2.7197,0 +63827,40,-2.691,0 +63828,40,-2.6653,0 +63829,40,-2.6444,0 +63830,40,-2.6304,0 +63831,40,-2.6242,0 +63832,40,-2.6264,0 +63833,40,-2.6365,0 +63834,40,-2.6538,0 +63835,40,-2.6769,0 +63836,40,-2.7039,0 +63837,40,-2.7332,0 +63838,40,-2.7637,0 +63839,40,-2.795,0 +63840,40,-2.8269,0 +63841,40,-2.8589,0 +63842,40,-2.8909,0 +63843,40,-2.9231,0 +63844,40,-2.9558,0 +63845,40,-2.9896,0 +63846,40,-3.025,0 +63847,40,-3.0627,0 +63848,40,-3.1028,0 +63849,40,-3.1453,0 +63850,40,-3.1895,0 +63851,40,-3.2352,0 +63852,40,-3.2821,0 +63853,40,-3.3298,0 +63854,40,-3.3781,0 +63855,40,-3.4267,0 +63856,40,-3.4752,0 +63857,40,-3.5233,0 +63858,40,-3.5711,0 +63859,40,-3.6191,0 +63860,40,-3.6681,0 +63861,40,-3.7186,0 +63862,40,-3.7702,0 +63863,40,-3.8223,0 +63864,40,-3.8738,0 +63865,40,-3.9237,0 +63866,40,-3.9715,0 +63867,40,-4.0174,0 +63868,40,-4.0614,0 +63869,40,-4.1038,0 +63870,40,-4.1445,0 +63871,40,-4.1837,0 +63872,40,-4.221,0 +63873,40,-4.2561,0 +63874,40,-4.2881,0 +63875,40,-4.3158,0 +63876,40,-4.3376,0 +63877,40,-4.3524,0 +63878,40,-4.3592,0 +63879,24,-4.3588,0 +63880,24,-4.3527,0 +63881,24,-4.3436,0 +63882,24,-4.3339,0 +63883,24,-4.3248,0 +63884,24,-4.3175,0 +63885,24,-4.3136,0 +63886,24,-4.3145,0 +63887,24,-4.3208,0 +63888,24,-4.3318,0 +63889,24,-4.3454,0 +63890,24,-4.3613,0 +63891,24,-4.3779,0 +63892,24,-4.3931,0 +63893,24,-4.4022,0 +63894,24,-4.3979,0 +63895,24,-4.3709,0 +63896,24,-4.3064,0 +63897,24,-4.1883,0 +63898,24,-4.0074,0 +63899,24,-3.7657,0 +63900,24,-3.4793,0 +63901,24,-3.1704,0 +63902,24,-2.863,0 +63903,38,-2.5868,0 +63904,38,-2.3657,0 +63905,38,-2.2105,0 +63906,38,-2.1161,0 +63907,38,-2.0665,0 +63908,38,-2.0463,0 +63909,38,-2.0399,0 +63910,38,-2.0338,0 +63911,38,-2.0196,0 +63912,38,-1.9945,0 +63913,38,-1.9585,0 +63914,38,-1.913,0 +63915,38,-1.858,0 +63916,38,-1.7936,0 +63917,38,-1.7212,0 +63918,38,-1.6444,0 +63919,38,-1.5664,0 +63920,38,-1.4902,0 +63921,38,-1.4186,0 +63922,38,-1.3537,0 +63923,38,-1.2981,0 +63924,38,-1.2541,0 +63925,38,-1.2222,0 +63926,38,-1.202,0 +63927,38,-1.1915,0 +63928,38,-1.1877,0 +63929,38,-1.1865,0 +63930,38,-1.1837,0 +63931,38,-1.175,0 +63932,38,-1.1567,0 +63933,38,-1.1255,0 +63934,38,-1.0789,0 +63935,38,-1.0153,0 +63936,38,-0.934,0 +63937,38,-0.8355,0 +63938,38,-0.72135,0 +63939,38,-0.59378,0 +63940,38,-0.45587,0 +63941,38,-0.3116,0 +63942,38,-0.1652,0 +63943,38,-0.021204,0 +63944,38,0.1161,0 +63945,38,0.2428,0 +63946,38,0.35535,0 +63947,38,0.45103,0 +63948,38,0.52811,0 +63949,38,0.58592,0 +63950,38,0.62471,0 +63951,38,0.64571,0 +63952,38,0.65129,0 +63953,38,0.64413,0 +63954,38,0.62803,0 +63955,38,0.6068,0 +63956,38,0.58422,0 +63957,38,0.56392,0 +63958,38,0.54894,0 +63959,38,0.54167,0 +63960,38,0.54378,0 +63961,38,0.55633,0 +63962,38,0.57994,0 +63963,38,0.6147,0 +63964,38,0.66052,0 +63965,38,0.71676,0 +63966,38,0.78239,0 +63967,38,0.85622,0 +63968,38,0.93667,0 +63969,38,1.0222,0 +63970,37,1.1115,0 +63971,37,1.2035,0 +63972,37,1.2968,0 +63973,37,1.3903,0 +63974,37,1.4825,0 +63975,37,1.572,0 +63976,37,1.6574,0 +63977,37,1.7372,0 +63978,37,1.8101,0 +63979,37,1.8751,0 +63980,37,1.9313,0 +63981,37,1.9781,0 +63982,37,2.0157,0 +63983,37,2.045,0 +63984,37,2.0671,0 +63985,37,2.0837,0 +63986,37,2.0968,0 +63987,38,2.1082,0 +63988,38,2.1202,0 +63989,38,2.1348,0 +63990,38,2.1543,0 +63991,38,2.1807,0 +63992,38,2.2154,0 +63993,38,2.2598,0 +63994,38,2.3139,0 +63995,38,2.3769,0 +63996,38,2.4479,0 +63997,38,2.5254,0 +63998,38,2.6075,0 +63999,38,2.6922,0 +64000,38,2.7776,0 +64001,38,2.862,0 +64002,38,2.9429,0 +64003,38,3.0175,0 +64004,38,3.083,0 +64005,38,3.137,0 +64006,38,3.1759,0 +64007,38,3.1983,0 +64008,38,3.2042,0 +64009,38,3.1949,0 +64010,38,3.1721,0 +64011,38,3.1399,0 +64012,38,3.1033,0 +64013,38,3.0675,0 +64014,38,3.0379,0 +64015,38,3.0205,0 +64016,38,3.0233,0 +64017,38,3.0525,0 +64018,38,3.1136,0 +64019,38,3.2148,0 +64020,38,3.3572,0 +64021,38,3.5436,0 +64022,38,3.7748,0 +64023,38,4.0466,0 +64024,38,4.3557,0 +64025,29,4.6905,0 +64026,29,5.0401,0 +64027,33,5.3921,0 +64028,33,5.7351,0 +64029,33,6.0588,0 +64030,33,6.3566,0 +64031,33,6.6206,0 +64032,33,6.8479,0 +64033,33,7.0356,0 +64034,33,7.1868,0 +64035,33,7.3054,0 +64036,33,7.3955,0 +64037,33,7.4643,0 +64038,33,7.5157,0 +64039,33,7.552,0 +64040,33,7.5763,0 +64041,33,7.5908,0 +64042,33,7.5974,0 +64043,33,7.5984,0 +64044,33,7.5961,0 +64045,33,7.5924,0 +64046,33,7.5887,0 +64047,33,7.5862,0 +64048,33,7.5859,0 +64049,33,7.5887,0 +64050,33,7.5953,0 +64051,33,7.6066,0 +64052,33,7.6243,0 +64053,33,7.6513,0 +64054,33,7.6919,0 +64055,33,7.7522,0 +64056,33,7.8401,0 +64057,33,7.9605,0 +64058,33,8.1154,0 +64059,33,8.3053,0 +64060,33,8.5236,0 +64061,33,8.7628,0 +64062,33,9.0141,0 +64063,33,9.2667,0 +64064,33,9.5099,0 +64065,33,9.7344,0 +64066,33,9.9313,0 +64067,33,10.097,0 +64068,33,10.23,0 +64069,33,10.331,0 +64070,33,10.402,0 +64071,33,10.444,0 +64072,33,10.459,0 +64073,33,10.45,0 +64074,33,10.422,0 +64075,33,10.375,0 +64076,33,10.312,0 +64077,33,10.233,0 +64078,33,10.135,0 +64079,33,10.019,0 +64080,33,9.8862,0 +64081,33,9.7399,0 +64082,33,9.5916,0 +64083,33,9.453,0 +64084,33,9.3339,0 +64085,33,9.2416,0 +64086,33,9.1727,0 +64087,33,9.118,0 +64088,33,9.0658,0 +64089,33,8.9997,0 +64090,33,8.9055,0 +64091,33,8.7695,0 +64092,33,8.578,0 +64093,33,8.3229,0 +64094,33,8.0021,0 +64095,33,7.6229,0 +64096,33,7.2028,0 +64097,33,6.7619,0 +64098,33,6.3212,0 +64099,33,5.9003,0 +64100,33,5.5173,0 +64101,33,5.1796,0 +64102,33,4.8799,0 +64103,0,4.5979,15 +64104,22,4.5979,0 +64105,50,4.0088,0 +64106,50,3.6819,0 +64107,50,3.3314,0 +64108,50,2.9637,0 +64109,50,2.5913,0 +64110,50,2.2276,0 +64111,50,1.884,0 +64112,50,1.5673,0 +64113,50,1.2785,0 +64114,50,1.016,0 +64115,50,0.77732,0 +64116,50,0.56195,0 +64117,50,0.37399,0 +64118,50,0.22087,0 +64119,50,0.11193,0 +64120,50,0.057006,0 +64121,50,0.061574,0 +64122,50,0.12639,0 +64123,50,0.24648,0 +64124,50,0.40861,0 +64125,50,0.5883,0 +64126,50,0.75716,0 +64127,50,0.88613,0 +64128,50,0.94899,0 +64129,50,0.93188,0 +64130,50,0.83017,0 +64131,50,0.64683,0 +64132,50,0.4035,0 +64133,50,0.12304,0 +64134,50,-0.16891,0 +64135,50,-0.45089,0 +64136,50,-0.70557,0 +64137,50,-0.92454,0 +64138,50,-1.1011,0 +64139,50,-1.2368,0 +64140,50,-1.3354,0 +64141,50,-1.4024,0 +64142,50,-1.4471,0 +64143,50,-1.4765,0 +64144,50,-1.4965,0 +64145,50,-1.5116,0 +64146,50,-1.5252,0 +64147,50,-1.5394,0 +64148,50,-1.5551,0 +64149,50,-1.5726,0 +64150,50,-1.5917,0 +64151,50,-1.6115,0 +64152,50,-1.6308,0 +64153,50,-1.6488,0 +64154,50,-1.6648,0 +64155,50,-1.6781,0 +64156,50,-1.6883,0 +64157,50,-1.695,0 +64158,50,-1.6978,0 +64159,50,-1.6963,0 +64160,50,-1.6905,0 +64161,50,-1.6806,0 +64162,50,-1.667,0 +64163,50,-1.6505,0 +64164,50,-1.6321,0 +64165,50,-1.6124,0 +64166,50,-1.5923,0 +64167,50,-1.572,0 +64168,50,-1.5516,0 +64169,50,-1.5308,0 +64170,50,-1.5089,0 +64171,50,-1.4852,0 +64172,50,-1.4585,0 +64173,50,-1.4274,0 +64174,50,-1.3907,0 +64175,50,-1.3468,0 +64176,50,-1.2945,0 +64177,50,-1.2331,0 +64178,50,-1.1628,0 +64179,50,-1.084,0 +64180,50,-0.99752,0 +64181,50,-0.90397,0 +64182,50,-0.80517,0 +64183,50,-0.70223,0 +64184,50,-0.59624,0 +64185,50,-0.48803,0 +64186,50,-0.37871,0 +64187,50,-0.26896,0 +64188,50,-0.15934,0 +64189,50,-0.05022,0 +64190,50,0.058225,0 +64191,50,0.16596,0 +64192,50,0.27294,0 +64193,50,0.37929,0 +64194,50,0.48512,0 +64195,50,0.59044,0 +64196,50,0.69523,0 +64197,50,0.79922,0 +64198,50,0.90185,0 +64199,50,1.0028,0 +64200,50,1.1011,0 +64201,50,1.1963,0 +64202,50,1.2879,0 +64203,50,1.3744,0 +64204,50,1.4562,0 +64205,50,1.5318,0 +64206,50,1.6014,0 +64207,50,1.6643,0 +64208,50,1.7199,0 +64209,50,1.7686,0 +64210,50,1.8095,0 +64211,50,1.844,0 +64212,50,1.8711,0 +64213,50,1.8923,0 +64214,50,1.9072,0 +64215,50,1.9168,0 +64216,50,1.9209,0 +64217,50,1.9201,0 +64218,50,1.9141,0 +64219,50,1.9032,0 +64220,50,1.887,0 +64221,50,1.8661,0 +64222,50,1.8397,0 +64223,50,1.8085,0 +64224,50,1.7716,0 +64225,50,1.7297,0 +64226,50,1.6815,0 +64227,50,1.6281,0 +64228,50,1.568,0 +64229,50,1.5019,0 +64230,50,1.4288,0 +64231,50,1.3492,0 +64232,50,1.2628,0 +64233,50,1.1696,0 +64234,50,1.0705,0 +64235,50,0.96502,0 +64236,50,0.85477,0 +64237,50,0.7395,0 +64238,50,0.62078,0 +64239,50,0.49899,0 +64240,50,0.37518,0 +64241,50,0.24997,0 +64242,50,0.12404,0 +64243,50,-0.0018898,0 +64244,50,-0.12722,0 +64245,50,-0.25155,0 +64246,50,-0.37417,0 +64247,50,-0.49508,0 +64248,50,-0.61368,0 +64249,50,-0.73012,0 +64250,50,-0.84415,0 +64251,50,-0.95604,0 +64252,50,-1.0659,0 +64253,50,-1.174,0 +64254,50,-1.2806,0 +64255,50,-1.3854,0 +64256,50,-1.4889,0 +64257,50,-1.5904,0 +64258,50,-1.6901,0 +64259,50,-1.7875,0 +64260,50,-1.8826,0 +64261,50,-1.9748,0 +64262,50,-2.0643,0 +64263,50,-2.1509,0 +64264,50,-2.2345,0 +64265,50,-2.3153,0 +64266,50,-2.3932,0 +64267,50,-2.4685,0 +64268,50,-2.541,0 +64269,50,-2.6115,0 +64270,50,-2.6799,0 +64271,50,-2.7471,0 +64272,50,-2.8134,0 +64273,50,-2.8796,0 +64274,50,-2.9463,0 +64275,50,-3.014,0 +64276,50,-3.0832,0 +64277,50,-3.1544,0 +64278,50,-3.2278,0 +64279,50,-3.3038,0 +64280,50,-3.3822,0 +64281,50,-3.4637,0 +64282,50,-3.5477,0 +64283,50,-3.6345,0 +64284,50,-3.7235,0 +64285,50,-3.8145,0 +64286,50,-3.9069,0 +64287,50,-3.9999,0 +64288,50,-4.0931,0 +64289,50,-4.1857,0 +64290,50,-4.2771,0 +64291,50,-4.367,0 +64292,50,-4.4548,0 +64293,50,-4.5406,0 +64294,50,-4.624,0 +64295,50,-4.7052,0 +64296,50,-4.7841,0 +64297,50,-4.8607,0 +64298,50,-4.9354,0 +64299,50,-5.0078,0 +64300,50,-5.0784,0 +64301,50,-5.1473,0 +64302,50,-5.2148,0 +64303,50,-5.2811,0 +64304,50,-5.3462,0 +64305,50,-5.4102,0 +64306,50,-5.4731,0 +64307,50,-5.5351,0 +64308,50,-5.5956,0 +64309,50,-5.6547,0 +64310,50,-5.7117,0 +64311,50,-5.7666,0 +64312,50,-5.8188,0 +64313,50,-5.8682,0 +64314,50,-5.9143,0 +64315,50,-5.9571,0 +64316,50,-5.9964,0 +64317,50,-6.0319,0 +64318,50,-6.0641,0 +64319,50,-6.0925,0 +64320,50,-6.1175,0 +64321,50,-6.1387,0 +64322,50,-6.1569,0 +64323,50,-6.1717,0 +64324,50,-6.1842,0 +64325,50,-6.1946,0 +64326,50,-6.204,0 +64327,50,-6.2132,0 +64328,50,-6.223,0 +64329,50,-6.2345,0 +64330,50,-6.2482,0 +64331,50,-6.2651,0 +64332,50,-6.2851,0 +64333,50,-6.3092,0 +64334,50,-6.3366,0 +64335,50,-6.3678,0 +64336,50,-6.402,0 +64337,50,-6.4393,0 +64338,50,-6.4785,0 +64339,50,-6.5193,0 +64340,50,-6.5608,0 +64341,50,-6.6025,0 +64342,50,-6.6439,0 +64343,50,-6.6844,0 +64344,50,-6.7238,0 +64345,50,-6.7618,0 +64346,50,-6.798,0 +64347,50,-6.8322,0 +64348,50,-6.8639,0 +64349,50,-6.8927,0 +64350,50,-6.9183,0 +64351,50,-6.9399,0 +64352,50,-6.9576,0 +64353,50,-6.9708,0 +64354,50,-6.9795,0 +64355,50,-6.9841,0 +64357,50,-6.98,0 +64358,50,-6.9721,0 +64359,44,-6.9601,0 +64360,44,-6.9449,0 +64361,47,-6.9269,0 +64362,47,-6.9066,0 +64363,47,-6.8848,0 +64364,47,-6.862,0 +64365,47,-6.8393,0 +64366,47,-6.8172,0 +64367,47,-6.7968,0 +64368,47,-6.7785,0 +64369,47,-6.7627,0 +64370,47,-6.7501,0 +64371,47,-6.7405,0 +64372,47,-6.7343,0 +64373,47,-6.7312,0 +64374,47,-6.7303,0 +64375,47,-6.7315,0 +64376,47,-6.7339,0 +64377,47,-6.7373,0 +64378,47,-6.7412,0 +64379,47,-6.7453,0 +64380,47,-6.7497,0 +64381,47,-6.7545,0 +64382,47,-6.7604,0 +64383,47,-6.7678,0 +64384,47,-6.7774,0 +64385,47,-6.7896,0 +64386,47,-6.8053,0 +64387,47,-6.8252,0 +64388,47,-6.8498,0 +64389,47,-6.8798,0 +64390,47,-6.9147,0 +64391,47,-6.9554,0 +64392,47,-7.0006,0 +64393,47,-7.0505,0 +64394,47,-7.1035,0 +64395,47,-7.1588,0 +64396,47,-7.2149,0 +64397,47,-7.2703,0 +64398,47,-7.3236,0 +64399,47,-7.3733,0 +64400,47,-7.4185,0 +64401,47,-7.4576,0 +64402,47,-7.4904,0 +64403,47,-7.5162,0 +64404,47,-7.5353,0 +64405,47,-7.548,0 +64406,47,-7.5552,0 +64407,47,-7.5582,0 +64408,47,-7.558,0 +64409,47,-7.5563,0 +64410,47,-7.5544,0 +64411,47,-7.5534,0 +64412,47,-7.5546,0 +64413,47,-7.5582,0 +64414,47,-7.5651,0 +64415,47,-7.5749,0 +64416,47,-7.5879,0 +64417,47,-7.6031,0 +64418,47,-7.6202,0 +64419,47,-7.6378,0 +64420,47,-7.6548,0 +64421,47,-7.6696,0 +64422,47,-7.6808,0 +64423,47,-7.6864,0 +64424,47,-7.6852,0 +64425,47,-7.675,0 +64426,50,-7.6552,0 +64427,50,-7.6232,0 +64428,50,-7.5798,0 +64429,50,-7.522,0 +64430,50,-7.452,0 +64431,50,-7.3678,0 +64432,50,-7.2718,0 +64433,50,-7.1636,0 +64434,50,-7.0456,0 +64435,50,-6.9188,0 +64436,50,-6.785,0 +64437,50,-6.646,0 +64438,50,-6.5033,0 +64439,50,-6.3586,0 +64440,50,-6.2133,0 +64441,50,-6.0688,0 +64442,50,-5.9265,0 +64443,50,-5.7871,0 +64444,50,-5.6521,0 +64445,50,-5.5213,0 +64446,50,-5.396,0 +64447,50,-5.2755,0 +64448,50,-5.1605,0 +64449,50,-5.05,0 +64450,50,-4.9444,0 +64451,50,-4.8429,0 +64452,50,-4.7459,0 +64453,50,-4.6527,0 +64454,50,-4.5637,0 +64455,50,-4.4787,0 +64456,50,-4.3981,0 +64457,50,-4.3219,0 +64458,50,-4.2506,0 +64459,50,-4.184,0 +64460,50,-4.1231,0 +64461,50,-4.0676,0 +64462,50,-4.0182,0 +64463,50,-3.9746,0 +64464,50,-3.9378,0 +64465,50,-3.9067,0 +64466,50,-3.8824,0 +64467,50,-3.8635,0 +64468,50,-3.8508,0 +64469,50,-3.8427,0 +64470,50,-3.8398,0 +64471,50,-3.8406,0 +64472,50,-3.845,0 +64473,50,-3.8518,0 +64474,50,-3.8608,0 +64475,50,-3.8709,0 +64476,50,-3.8816,0 +64477,50,-3.8923,0 +64478,50,-3.9025,0 +64479,50,-3.9116,0 +64480,50,-3.9197,0 +64481,50,-3.9265,0 +64482,50,-3.9322,0 +64483,50,-3.937,0 +64484,50,-3.9409,0 +64485,50,-3.9445,0 +64486,50,-3.948,0 +64487,50,-3.952,0 +64488,50,-3.9568,0 +64489,50,-3.9632,0 +64490,50,-3.9714,0 +64491,50,-3.9822,0 +64492,50,-3.9959,0 +64493,50,-4.013,0 +64494,50,-4.0339,0 +64495,50,-4.0584,0 +64496,50,-4.0872,0 +64497,50,-4.1195,0 +64498,50,-4.1555,0 +64499,50,-4.1946,0 +64500,50,-4.2365,0 +64501,50,-4.2804,0 +64502,50,-4.3256,0 +64503,50,-4.3718,0 +64504,50,-4.4181,0 +64505,50,-4.464,0 +64506,50,-4.5092,0 +64507,50,-4.5532,0 +64508,50,-4.5959,0 +64509,50,-4.6372,0 +64510,50,-4.6774,0 +64511,50,-4.7169,0 +64512,50,-4.7562,0 +64513,50,-4.7961,0 +64514,50,-4.8377,0 +64515,50,-4.8821,0 +64516,50,-4.9303,0 +64517,50,-4.9837,0 +64518,50,-5.0431,0 +64519,48,-5.1094,0 +64520,48,-5.1833,0 +64521,51,-5.265,0 +64522,51,-5.355,0 +64523,51,-5.4526,0 +64524,51,-5.5579,0 +64525,51,-5.6694,0 +64526,51,-5.7868,0 +64527,51,-5.9085,0 +64528,51,-6.0333,0 +64529,51,-6.1596,0 +64530,51,-6.2857,0 +64531,51,-6.4102,0 +64532,51,-6.5312,0 +64533,51,-6.6481,0 +64534,51,-6.7584,0 +64535,51,-6.8621,0 +64536,51,-6.957,0 +64537,51,-7.0432,0 +64538,51,-7.1195,0 +64539,51,-7.1858,0 +64540,51,-7.242,0 +64541,51,-7.2875,0 +64542,51,-7.324,0 +64543,51,-7.3501,0 +64544,51,-7.3683,0 +64545,51,-7.3781,0 +64546,51,-7.3811,0 +64547,51,-7.378,0 +64548,51,-7.3694,0 +64549,51,-7.357,0 +64550,51,-7.3409,0 +64551,51,-7.3226,0 +64552,51,-7.3028,0 +64553,51,-7.2823,0 +64554,51,-7.2622,0 +64555,51,-7.2434,0 +64556,51,-7.2265,0 +64557,51,-7.2125,0 +64558,51,-7.2019,0 +64559,51,-7.1955,0 +64560,51,-7.194,0 +64561,51,-7.1971,0 +64562,51,-7.2059,0 +64563,51,-7.2196,0 +64564,51,-7.2379,0 +64565,51,-7.2607,0 +64566,51,-7.2867,0 +64567,51,-7.3158,0 +64568,51,-7.3466,0 +64569,51,-7.3783,0 +64570,51,-7.4101,0 +64571,51,-7.4411,0 +64572,51,-7.4704,0 +64573,51,-7.4976,0 +64574,51,-7.5217,0 +64575,51,-7.5426,0 +64576,51,-7.5595,0 +64577,51,-7.5722,0 +64578,51,-7.5807,0 +64579,51,-7.5842,0 +64580,51,-7.5837,0 +64581,51,-7.5785,0 +64582,51,-7.5694,0 +64583,51,-7.5566,0 +64584,51,-7.5405,0 +64585,51,-7.522,0 +64586,51,-7.5011,0 +64587,51,-7.4786,0 +64588,51,-7.4548,0 +64589,51,-7.4301,0 +64590,51,-7.4046,0 +64591,51,-7.3782,0 +64592,51,-7.3512,0 +64593,51,-7.3231,0 +64594,51,-7.2942,0 +64595,51,-7.2643,0 +64596,51,-7.2334,0 +64597,51,-7.2017,0 +64598,51,-7.1691,0 +64599,51,-7.136,0 +64600,51,-7.1026,0 +64601,51,-7.0693,0 +64602,51,-7.0362,0 +64603,51,-7.0035,0 +64604,51,-6.9711,0 +64605,51,-6.9391,0 +64606,51,-6.9072,0 +64607,51,-6.8751,0 +64608,51,-6.8424,0 +64609,51,-6.8085,0 +64610,51,-6.7724,0 +64611,51,-6.734,0 +64612,51,-6.692,0 +64613,51,-6.6463,0 +64614,51,-6.5959,0 +64615,51,-6.5405,0 +64616,51,-6.4799,0 +64617,51,-6.4133,0 +64618,51,-6.3418,0 +64619,51,-6.2648,0 +64620,51,-6.1836,0 +64621,51,-6.0987,0 +64622,51,-6.0109,0 +64623,51,-5.9218,0 +64624,51,-5.8325,0 +64625,51,-5.7444,0 +64626,51,-5.6592,0 +64627,51,-5.578,0 +64628,51,-5.5025,0 +64629,51,-5.4339,0 +64630,51,-5.3729,0 +64631,51,-5.3212,0 +64632,51,-5.2782,0 +64633,51,-5.2459,0 +64634,51,-5.2225,0 +64635,51,-5.2088,0 +64636,51,-5.2037,0 +64637,51,-5.2064,0 +64638,51,-5.2159,0 +64639,51,-5.2306,0 +64640,51,-5.2497,0 +64641,51,-5.271,0 +64642,51,-5.2937,0 +64643,51,-5.3163,0 +64644,51,-5.3375,0 +64645,51,-5.3565,0 +64646,51,-5.3722,0 +64647,51,-5.384,0 +64648,51,-5.3914,0 +64649,51,-5.394,0 +64650,51,-5.392,0 +64651,51,-5.3848,0 +64652,51,-5.3733,0 +64653,51,-5.3571,0 +64654,51,-5.3373,0 +64655,51,-5.3137,0 +64656,51,-5.2873,0 +64657,51,-5.2581,0 +64658,51,-5.2268,0 +64659,51,-5.1937,0 +64660,51,-5.1591,0 +64661,51,-5.1234,0 +64662,51,-5.0868,0 +64663,51,-5.0496,0 +64664,51,-5.012,0 +64665,51,-4.9738,0 +64666,51,-4.935,0 +64667,51,-4.8951,0 +64668,51,-4.8536,0 +64669,51,-4.81,0 +64670,51,-4.7632,0 +64671,51,-4.7129,0 +64672,51,-4.658,0 +64673,51,-4.5983,0 +64674,51,-4.533,0 +64675,51,-4.4621,0 +64676,51,-4.3849,0 +64677,51,-4.302,0 +64678,51,-4.2131,0 +64679,51,-4.1191,0 +64680,51,-4.0203,0 +64681,51,-3.9184,0 +64682,51,-3.8142,0 +64683,51,-3.7098,0 +64684,51,-3.6072,0 +64685,51,-3.5078,0 +64686,51,-3.4142,0 +64687,51,-3.3275,0 +64688,51,-3.25,0 +64689,51,-3.1828,0 +64690,51,-3.1269,0 +64691,51,-3.0838,0 +64692,51,-3.0527,0 +64693,46,-3.0355,0 +64694,46,-3.0298,0 +64695,47,-3.037,0 +64696,47,-3.0544,0 +64697,47,-3.0817,0 +64698,47,-3.117,0 +64699,47,-3.1587,0 +64700,47,-3.2054,0 +64701,47,-3.2549,0 +64702,47,-3.3051,0 +64703,47,-3.3542,0 +64704,47,-3.3991,0 +64705,47,-3.4385,0 +64706,47,-3.4693,0 +64707,47,-3.4901,0 +64708,47,-3.4991,0 +64709,47,-3.4952,0 +64710,47,-3.4782,0 +64711,47,-3.4471,0 +64712,47,-3.4035,0 +64713,47,-3.3464,0 +64714,47,-3.2785,0 +64715,47,-3.199,0 +64716,47,-3.1109,0 +64717,47,-3.0142,0 +64718,47,-2.9113,0 +64719,47,-2.8031,0 +64720,47,-2.6916,0 +64721,47,-2.5781,0 +64722,47,-2.464,0 +64723,47,-2.3505,0 +64724,47,-2.2385,0 +64725,47,-2.1289,0 +64726,47,-2.0222,0 +64727,47,-1.9188,0 +64728,47,-1.8191,0 +64729,47,-1.7229,0 +64730,47,-1.6308,0 +64731,47,-1.5423,0 +64732,47,-1.458,0 +64733,47,-1.3774,0 +64734,47,-1.3012,0 +64735,47,-1.2289,0 +64736,47,-1.1616,0 +64737,47,-1.0985,0 +64738,47,-1.0409,0 +64739,47,-0.98837,0 +64740,47,-0.94196,0 +64741,47,-0.9011,0 +64742,47,-0.8667,0 +64743,47,-0.83807,0 +64744,47,-0.81572,0 +64745,47,-0.79885,0 +64746,47,-0.78744,0 +64747,47,-0.78061,0 +64748,47,-0.77784,0 +64749,47,-0.7782,0 +64750,47,-0.78087,0 +64751,47,-0.78483,0 +64752,47,-0.78904,0 +64753,47,-0.79248,0 +64754,47,-0.79431,0 +64755,47,-0.79352,0 +64756,47,-0.7897,0 +64757,47,-0.78188,0 +64758,47,-0.77007,0 +64759,47,-0.75332,0 +64760,47,-0.73215,0 +64761,47,-0.70571,0 +64762,47,-0.67504,0 +64763,47,-0.63953,0 +64764,47,-0.60041,0 +64765,47,-0.55745,0 +64766,47,-0.51185,0 +64767,47,-0.46383,0 +64768,47,-0.41437,0 +64769,47,-0.36389,0 +64770,47,-0.31304,0 +64771,47,-0.26236,0 +64772,47,-0.21253,0 +64773,47,-0.16439,0 +64774,47,-0.11862,0 +64775,47,-0.07613,0 +64776,47,-0.037344,0 +64777,47,-0.0029491,0 +64778,47,0.026703,0 +64779,47,0.051163,0 +64780,47,0.070379,0 +64781,47,0.084332,0 +64782,47,0.093097,0 +64783,47,0.096783,0 +64784,47,0.095268,0 +64785,47,0.088884,0 +64786,47,0.07785,0 +64787,47,0.062942,0 +64788,47,0.044598,0 +64789,47,0.023742,0 +64790,47,0.00084981,0 +64791,47,-0.023214,0 +64792,47,-0.047778,0 +64793,47,-0.072254,0 +64794,47,-0.096155,0 +64795,47,-0.11925,0 +64796,47,-0.14101,0 +64797,47,-0.1613,0 +64798,47,-0.17933,0 +64799,47,-0.19527,0 +64800,47,-0.20864,0 +64801,47,-0.2197,0 +64802,47,-0.22821,0 +64803,47,-0.23453,0 +64804,47,-0.23867,0 +64805,47,-0.24113,0 +64806,47,-0.24217,0 +64807,47,-0.24211,0 +64808,47,-0.24121,0 +64809,47,-0.23972,0 +64810,47,-0.23789,0 +64811,47,-0.23598,0 +64812,47,-0.23421,0 +64813,47,-0.23262,0 +64814,47,-0.23127,0 +64815,47,-0.23033,0 +64816,47,-0.22975,0 +64817,47,-0.22951,0 +64818,47,-0.22935,0 +64819,47,-0.22906,0 +64820,47,-0.22848,0 +64821,47,-0.22738,0 +64822,47,-0.22552,0 +64823,47,-0.22281,0 +64824,47,-0.21931,0 +64825,47,-0.21512,0 +64826,47,-0.21049,0 +64827,47,-0.20571,0 +64828,47,-0.20097,0 +64829,47,-0.19644,0 +64830,47,-0.19235,0 +64831,47,-0.18876,0 +64832,47,-0.18586,0 +64833,47,-0.18346,0 +64834,47,-0.18146,0 +64835,47,-0.17985,0 +64836,47,-0.17852,0 +64837,47,-0.17707,0 +64838,47,-0.17509,0 +64839,47,-0.17203,0 +64840,47,-0.16752,0 +64841,47,-0.1609,0 +64842,47,-0.15205,0 +64843,47,-0.14017,0 +64844,47,-0.12557,0 +64845,47,-0.1077,0 +64846,47,-0.087294,0 +64847,47,-0.064413,0 +64848,47,-0.039684,0 +64849,47,-0.013378,0 +64850,47,0.01389,0 +64851,47,0.041549,0 +64852,47,0.069032,0 +64853,47,0.095982,0 +64854,47,0.122,0 +64855,47,0.14687,0 +64856,47,0.17003,0 +64857,47,0.19156,0 +64858,47,0.21088,0 +64859,47,0.22834,0 +64860,47,0.24377,0 +64861,47,0.25754,0 +64862,47,0.26967,0 +64863,47,0.28055,0 +64864,47,0.29038,0 +64865,47,0.29939,0 +64866,47,0.3077,0 +64867,47,0.31512,0 +64868,47,0.32158,0 +64869,47,0.32679,0 +64870,47,0.33072,0 +64871,47,0.33289,0 +64872,47,0.33345,0 +64873,47,0.33197,0 +64874,47,0.32856,0 +64875,47,0.32295,0 +64876,47,0.31508,0 +64877,47,0.30478,0 +64878,47,0.29195,0 +64879,47,0.27667,0 +64880,47,0.25875,0 +64881,47,0.23862,0 +64882,47,0.2162,0 +64883,47,0.19213,0 +64884,47,0.16651,0 +64885,47,0.13989,0 +64886,47,0.11254,0 +64887,48,0.084853,0 +64888,48,0.057223,0 +64889,48,0.030188,0 +64890,48,0.0041962,0 +64891,48,-0.020079,0 +64892,48,-0.042399,0 +64893,48,-0.061883,0 +64894,48,-0.078492,0 +64895,48,-0.091246,0 +64896,48,-0.10049,0 +64897,48,-0.10555,0 +64898,48,-0.10669,0 +64899,48,-0.10372,0 +64900,48,-0.096818,0 +64901,48,-0.086256,0 +64902,48,-0.072324,0 +64903,48,-0.055722,0 +64904,48,-0.036707,0 +64905,48,-0.01607,0 +64906,48,0.006009,0 +64907,48,0.028921,0 +64908,48,0.052392,0 +64909,48,0.076121,0 +64910,48,0.099953,0 +64911,48,0.12368,0 +64912,48,0.14723,0 +64913,48,0.17063,0 +64914,48,0.19394,0 +64915,48,0.21734,0 +64916,48,0.2411,0 +64917,48,0.26552,0 +64918,48,0.29081,0 +64919,48,0.31716,0 +64920,48,0.34443,0 +64921,48,0.37254,0 +64922,48,0.40116,0 +64923,48,0.42994,0 +64924,48,0.45858,0 +64925,48,0.4867,0 +64926,48,0.51401,0 +64927,48,0.53988,0 +64928,48,0.56416,0 +64929,48,0.58598,0 +64930,48,0.60529,0 +64931,48,0.62102,0 +64932,48,0.63328,0 +64933,48,0.64125,0 +64934,48,0.6454,0 +64935,48,0.64534,0 +64936,48,0.64177,0 +64937,48,0.63466,0 +64938,48,0.6247,0 +64939,48,0.61213,0 +64940,48,0.59765,0 +64941,48,0.58172,0 +64942,48,0.56504,0 +64943,48,0.54816,0 +64944,48,0.53184,0 +64945,48,0.51677,0 +64946,48,0.50366,0 +64947,48,0.49298,0 +64948,48,0.48529,0 +64949,48,0.48074,0 +64950,48,0.4797,0 +64951,48,0.48213,0 +64952,48,0.48825,0 +64953,48,0.49771,0 +64954,48,0.51061,0 +64955,48,0.52647,0 +64956,48,0.54524,0 +64957,48,0.56644,0 +64958,48,0.58987,0 +64959,48,0.61496,0 +64960,48,0.64156,0 +64961,48,0.66928,0 +64962,48,0.69799,0 +64963,48,0.72745,0 +64964,48,0.75762,0 +64965,47,0.78835,0 +64966,47,0.8198,0 +64967,47,0.85201,0 +64968,47,0.88526,0 +64969,47,0.91963,0 +64970,47,0.95558,0 +64971,47,0.99312,0 +64972,47,1.0329,0 +64973,47,1.0748,0 +64974,47,1.1193,0 +64975,47,1.1663,0 +64976,47,1.2161,0 +64977,47,1.2682,0 +64978,47,1.3231,0 +64979,47,1.3802,0 +64980,47,1.4395,0 +64981,47,1.5004,0 +64982,47,1.5626,0 +64983,47,1.6254,0 +64984,47,1.6883,0 +64985,47,1.7509,0 +64986,47,1.8121,0 +64987,47,1.8718,0 +64988,47,1.9292,0 +64989,47,1.9841,0 +64990,47,2.0358,0 +64991,47,2.0842,0 +64992,47,2.1285,0 +64993,47,2.1686,0 +64994,47,2.2037,0 +64995,47,2.2342,0 +64996,47,2.2594,0 +64997,47,2.2797,0 +64998,47,2.2947,0 +64999,47,2.3046,0 +65000,47,2.3097,0 +65002,47,2.3045,0 +65003,47,2.2936,0 +65004,47,2.2773,0 +65005,47,2.2548,0 +65006,47,2.2271,0 +65007,47,2.1936,0 +65008,47,2.1556,0 +65009,47,2.1126,0 +65010,47,2.0659,0 +65011,47,2.0156,0 +65012,47,1.9624,0 +65013,47,1.9065,0 +65014,47,1.8483,0 +65015,47,1.788,0 +65016,50,1.7265,0 +65017,50,1.6643,0 +65018,50,1.6025,0 +65019,50,1.5417,0 +65020,50,1.483,0 +65021,50,1.4268,0 +65022,50,1.3741,0 +65023,50,1.3246,0 +65024,50,1.2791,0 +65025,50,1.2372,0 +65026,50,1.1992,0 +65027,50,1.1647,0 +65028,50,1.1343,0 +65029,50,1.1076,0 +65030,50,1.0849,0 +65031,50,1.0658,0 +65032,50,1.0502,0 +65033,50,1.0375,0 +65034,50,1.027,0 +65035,50,1.0182,0 +65036,50,1.0102,0 +65037,50,1.0023,0 +65038,50,0.99378,0 +65039,50,0.98397,0 +65040,50,0.97238,0 +65041,50,0.95816,0 +65042,50,0.94086,0 +65043,50,0.91955,0 +65044,50,0.89402,0 +65045,50,0.86348,0 +65046,50,0.8281,0 +65047,50,0.7875,0 +65048,50,0.74226,0 +65049,50,0.6925,0 +65050,50,0.63899,0 +65051,50,0.58217,0 +65052,50,0.5229,0 +65053,50,0.46175,0 +65054,50,0.39953,0 +65055,50,0.33695,0 +65056,50,0.27473,0 +65057,50,0.21356,0 +65058,50,0.1539,0 +65059,50,0.096181,0 +65060,50,0.04054,0 +65061,50,-0.012932,0 +65062,50,-0.064439,0 +65063,50,-0.11419,0 +65064,50,-0.16237,0 +65065,50,-0.20913,0 +65066,50,-0.2546,0 +65067,50,-0.29884,0 +65068,50,-0.34188,0 +65069,50,-0.38372,0 +65070,50,-0.42428,0 +65071,50,-0.46349,0 +65072,50,-0.50112,0 +65073,50,-0.53701,0 +65074,50,-0.57067,0 +65075,50,-0.60186,0 +65076,50,-0.62975,0 +65077,50,-0.65436,0 +65078,50,-0.67487,0 +65079,50,-0.69186,0 +65080,50,-0.70472,0 +65081,50,-0.71442,0 +65082,50,-0.72072,0 +65083,50,-0.72481,0 +65084,50,-0.72699,0 +65085,50,-0.72819,0 +65086,50,-0.72901,0 +65087,50,-0.73017,0 +65088,50,-0.73248,0 +65089,50,-0.73661,0 +65090,50,-0.74332,0 +65091,50,-0.7532,0 +65092,50,-0.76659,0 +65093,50,-0.78406,0 +65094,50,-0.80538,0 +65095,50,-0.83119,0 +65096,50,-0.8607,0 +65097,50,-0.89439,0 +65098,50,-0.93113,0 +65099,50,-0.97115,0 +65100,50,-1.0136,0 +65101,50,-1.0583,0 +65102,50,-1.1046,0 +65103,50,-1.1521,0 +65104,50,-1.2002,0 +65105,50,-1.2486,0 +65106,50,-1.2968,0 +65107,50,-1.3445,0 +65108,50,-1.3911,0 +65109,50,-1.4366,0 +65110,50,-1.4802,0 +65111,50,-1.5221,0 +65112,50,-1.5618,0 +65113,50,-1.5994,0 +65114,50,-1.6347,0 +65115,50,-1.6674,0 +65116,50,-1.6978,0 +65117,50,-1.7258,0 +65118,50,-1.7517,0 +65119,50,-1.775,0 +65120,50,-1.7964,0 +65121,50,-1.8155,0 +65122,50,-1.8327,0 +65123,50,-1.8479,0 +65124,50,-1.861,0 +65125,50,-1.8722,0 +65126,50,-1.8812,0 +65127,50,-1.8882,0 +65128,50,-1.8925,0 +65129,50,-1.8946,0 +65130,50,-1.8937,0 +65131,50,-1.8901,0 +65132,50,-1.8833,0 +65133,50,-1.8732,0 +65134,50,-1.8601,0 +65135,50,-1.8434,0 +65136,50,-1.8236,0 +65137,50,-1.8003,0 +65138,50,-1.7741,0 +65139,50,-1.745,0 +65140,50,-1.7134,0 +65141,50,-1.6798,0 +65142,50,-1.6443,0 +65143,50,-1.6075,0 +65144,50,-1.5697,0 +65145,50,-1.5315,0 +65146,50,-1.4932,0 +65147,50,-1.4552,0 +65148,50,-1.4176,0 +65149,50,-1.3809,0 +65150,50,-1.345,0 +65151,50,-1.3104,0 +65152,50,-1.2767,0 +65153,50,-1.2441,0 +65154,50,-1.2125,0 +65155,50,-1.1817,0 +65156,50,-1.1518,0 +65157,50,-1.1224,0 +65158,50,-1.0936,0 +65159,50,-1.0652,0 +65160,50,-1.0373,0 +65161,50,-1.0096,0 +65162,50,-0.98227,0 +65163,50,-0.95528,0 +65164,50,-0.92859,0 +65165,50,-0.90238,0 +65166,50,-0.8767,0 +65167,50,-0.85187,0 +65168,50,-0.82802,0 +65169,50,-0.80539,0 +65170,50,-0.78419,0 +65171,50,-0.76453,0 +65172,50,-0.74696,0 +65173,50,-0.73133,0 +65174,50,-0.71825,0 +65175,50,-0.7076,0 +65176,50,-0.69985,0 +65177,50,-0.69514,0 +65178,50,-0.69364,0 +65179,50,-0.69587,0 +65180,50,-0.70137,0 +65181,50,-0.71093,0 +65182,50,-0.72376,0 +65183,50,-0.74036,0 +65184,50,-0.76022,0 +65185,50,-0.78334,0 +65186,50,-0.80932,0 +65187,50,-0.83766,0 +65188,50,-0.86804,0 +65189,50,-0.89975,0 +65190,50,-0.93237,0 +65191,50,-0.96516,0 +65192,50,-0.99738,0 +65193,50,-1.0285,0 +65194,50,-1.0576,0 +65195,50,-1.0844,0 +65196,50,-1.1081,0 +65197,50,-1.1284,0 +65198,50,-1.1447,0 +65199,50,-1.1567,0 +65200,50,-1.1641,0 +65201,50,-1.1666,0 +65202,50,-1.1642,0 +65203,50,-1.1567,0 +65204,50,-1.1442,0 +65205,50,-1.1265,0 +65206,50,-1.1042,0 +65207,50,-1.0769,0 +65208,50,-1.0455,0 +65209,50,-1.0096,0 +65210,50,-0.9701,0 +65211,50,-0.92705,0 +65212,50,-0.8814,0 +65213,50,-0.8332,0 +65214,50,-0.78341,0 +65215,50,-0.73237,0 +65216,50,-0.68085,0 +65217,50,-0.62942,0 +65218,50,-0.57854,0 +65219,50,-0.52882,0 +65220,50,-0.48035,0 +65221,50,-0.4337,0 +65222,50,-0.38864,0 +65223,50,-0.3456,0 +65224,50,-0.30413,0 +65225,50,-0.26429,0 +65226,50,-0.22545,0 +65227,50,-0.18737,0 +65228,50,-0.14948,0 +65229,50,-0.11118,0 +65230,50,-0.072031,0 +65231,50,-0.031105,0 +65232,50,0.011766,0 +65233,50,0.057357,0 +65234,50,0.10529,0 +65235,50,0.15613,0 +65236,50,0.20924,0 +65237,50,0.26482,0 +65238,50,0.32205,0 +65239,50,0.38061,0 +65240,50,0.43961,0 +65241,50,0.4983,0 +65242,50,0.55588,0 +65243,50,0.6113,0 +65244,50,0.6638,0 +65245,50,0.71214,0 +65246,50,0.75553,0 +65247,50,0.79323,0 +65248,50,0.82469,0 +65249,50,0.84976,0 +65250,50,0.86783,0 +65251,50,0.87952,0 +65252,50,0.88413,0 +65253,50,0.88296,0 +65254,50,0.87527,0 +65255,50,0.86265,0 +65256,50,0.84492,0 +65257,50,0.8233,0 +65258,50,0.79834,0 +65259,50,0.77107,0 +65260,50,0.74248,0 +65261,50,0.71338,0 +65262,50,0.68452,0 +65263,50,0.65679,0 +65264,50,0.6306,0 +65265,50,0.60659,0 +65266,50,0.5851,0 +65267,50,0.56639,0 +65268,50,0.55089,0 +65269,50,0.53839,0 +65270,50,0.5295,0 +65271,50,0.52365,0 +65272,50,0.521,0 +65273,50,0.52104,0 +65274,50,0.5232,0 +65275,50,0.52704,0 +65276,50,0.53173,0 +65277,50,0.53661,0 +65278,50,0.54104,0 +65279,50,0.5444,0 +65280,50,0.54598,0 +65281,50,0.5455,0 +65282,50,0.54204,0 +65283,50,0.53543,0 +65284,50,0.52493,0 +65285,50,0.50991,0 +65286,50,0.49033,0 +65287,50,0.46525,0 +65288,50,0.43538,0 +65289,50,0.40025,0 +65290,50,0.36027,0 +65291,50,0.31576,0 +65292,50,0.26646,0 +65293,50,0.21318,0 +65294,50,0.15561,0 +65295,50,0.094283,0 +65296,50,0.029486,0 +65297,45,-0.038659,0 +65298,45,-0.10924,0 +65299,52,-0.18194,0 +65300,52,-0.25601,0 +65301,52,-0.33095,0 +65302,52,-0.40626,0 +65303,52,-0.48147,0 +65304,52,-0.5561,0 +65305,52,-0.62991,0 +65306,52,-0.70266,0 +65307,52,-0.7741,0 +65308,52,-0.84437,0 +65309,52,-0.91339,0 +65310,52,-0.9815,0 +65311,52,-1.0489,0 +65312,52,-1.1161,0 +65313,52,-1.1832,0 +65314,52,-1.2508,0 +65315,52,-1.3189,0 +65316,52,-1.3879,0 +65317,52,-1.4577,0 +65318,52,-1.5281,0 +65319,52,-1.5988,0 +65320,52,-1.6692,0 +65321,52,-1.7384,0 +65322,52,-1.8057,0 +65323,52,-1.8697,0 +65324,52,-1.9295,0 +65325,52,-1.9846,0 +65326,52,-2.0334,0 +65327,52,-2.0765,0 +65328,52,-2.1128,0 +65329,52,-2.1431,0 +65330,52,-2.1674,0 +65331,52,-2.1864,0 +65332,52,-2.2015,0 +65333,52,-2.2135,0 +65334,52,-2.2243,0 +65335,52,-2.2352,0 +65336,52,-2.248,0 +65337,52,-2.264,0 +65338,52,-2.2844,0 +65339,52,-2.3099,0 +65340,52,-2.3409,0 +65341,52,-2.3772,0 +65342,52,-2.4188,0 +65343,52,-2.4645,0 +65344,52,-2.5144,0 +65345,52,-2.5668,0 +65346,52,-2.6214,0 +65347,52,-2.6769,0 +65348,52,-2.7326,0 +65349,52,-2.7877,0 +65350,52,-2.8415,0 +65351,52,-2.8933,0 +65352,52,-2.9428,0 +65353,52,-2.9898,0 +65354,52,-3.0347,0 +65355,52,-3.0775,0 +65356,52,-3.1189,0 +65357,52,-3.1594,0 +65358,52,-3.1997,0 +65359,52,-3.2404,0 +65360,52,-3.2821,0 +65361,52,-3.3251,0 +65362,52,-3.3697,0 +65363,52,-3.4163,0 +65364,52,-3.4649,0 +65365,52,-3.5159,0 +65366,52,-3.5689,0 +65367,52,-3.6239,0 +65368,52,-3.6805,0 +65369,52,-3.7387,0 +65370,52,-3.7979,0 +65371,52,-3.858,0 +65372,52,-3.9185,0 +65373,52,-3.9792,0 +65374,52,-4.0397,0 +65375,52,-4.1,0 +65376,52,-4.1599,0 +65377,52,-4.2192,0 +65378,52,-4.2777,0 +65379,52,-4.335,0 +65380,52,-4.391,0 +65381,52,-4.4452,0 +65382,52,-4.4975,0 +65383,52,-4.5467,0 +65384,52,-4.593,0 +65385,52,-4.635,0 +65386,52,-4.6733,0 +65387,52,-4.7066,0 +65388,52,-4.7354,0 +65389,52,-4.7589,0 +65390,52,-4.7776,0 +65391,52,-4.7913,0 +65392,52,-4.8003,0 +65393,52,-4.8047,0 +65394,52,-4.8046,0 +65395,52,-4.8004,0 +65396,52,-4.7917,0 +65397,52,-4.7793,0 +65398,52,-4.7624,0 +65399,52,-4.7416,0 +65400,52,-4.7161,0 +65401,52,-4.6861,0 +65402,52,-4.6513,0 +65403,52,-4.6115,0 +65404,52,-4.567,0 +65405,52,-4.5169,0 +65406,52,-4.4622,0 +65407,52,-4.4025,0 +65408,52,-4.3385,0 +65409,52,-4.2702,0 +65410,52,-4.1977,0 +65411,52,-4.1216,0 +65412,52,-4.0414,0 +65413,52,-3.958,0 +65414,52,-3.8708,0 +65415,52,-3.7801,0 +65416,52,-3.686,0 +65417,52,-3.5881,0 +65418,52,-3.4869,0 +65419,52,-3.382,0 +65420,52,-3.2736,0 +65421,52,-3.1616,0 +65422,52,-3.0457,0 +65423,52,-2.9264,0 +65424,52,-2.8035,0 +65425,52,-2.6771,0 +65426,52,-2.5477,0 +65427,52,-2.4152,0 +65428,52,-2.2803,0 +65429,52,-2.1432,0 +65430,52,-2.0043,0 +65431,52,-1.8641,0 +65432,52,-1.7227,0 +65433,52,-1.5808,0 +65434,52,-1.4385,0 +65435,52,-1.2963,0 +65436,52,-1.1544,0 +65437,52,-1.0132,0 +65438,52,-0.87289,0 +65439,52,-0.73379,0 +65440,52,-0.59632,0 +65441,52,-0.4603,0 +65442,52,-0.32588,0 +65443,52,-0.19306,0 +65444,52,-0.061623,0 +65445,52,0.068227,0 +65446,52,0.19687,0 +65447,52,0.32443,0 +65448,52,0.45106,0 +65449,52,0.57706,0 +65450,52,0.7025,0 +65451,52,0.82757,0 +65452,52,0.95242,0 +65453,52,1.0772,0 +65454,52,1.2021,0 +65455,52,1.3272,0 +65456,52,1.4526,0 +65457,52,1.5782,0 +65458,52,1.7041,0 +65459,52,1.8302,0 +65460,52,1.9566,0 +65461,52,2.0832,0 +65462,52,2.2098,0 +65463,52,2.3365,0 +65464,52,2.4631,0 +65465,52,2.5897,0 +65466,52,2.7161,0 +65467,52,2.8424,0 +65468,52,2.9684,0 +65469,52,3.094,0 +65470,52,3.2193,0 +65471,52,3.3442,0 +65472,52,3.4688,0 +65473,52,3.5929,0 +65474,52,3.7166,0 +65475,52,3.8399,0 +65476,52,3.963,0 +65477,52,4.0858,0 +65478,52,4.2083,0 +65479,52,4.3304,0 +65480,52,4.452,0 +65481,52,4.5731,0 +65482,52,4.6932,0 +65483,52,4.8122,0 +65484,52,4.9295,0 +65485,52,5.0446,0 +65486,52,5.1569,0 +65487,52,5.2655,0 +65488,52,5.3702,0 +65489,52,5.469,0 +65490,52,5.5624,0 +65491,52,5.6486,0 +65492,52,5.7282,0 +65493,52,5.8001,0 +65494,52,5.8648,0 +65495,52,5.9216,0 +65496,52,5.9708,0 +65497,52,6.0123,0 +65498,52,6.0459,0 +65499,52,6.0715,0 +65500,52,6.0885,0 +65501,52,6.0969,0 +65502,52,6.0961,0 +65503,52,6.086,0 +65504,52,6.0662,0 +65505,52,6.0363,0 +65506,52,5.9958,0 +65507,52,5.9445,0 +65508,52,5.8816,0 +65509,52,5.8068,0 +65510,52,5.7196,0 +65511,52,5.6195,0 +65512,52,5.5069,0 +65513,52,5.3813,0 +65514,52,5.2445,0 +65515,52,5.0961,0 +65516,52,4.9388,0 +65517,52,4.7732,0 +65518,52,4.6025,0 +65519,52,4.4283,0 +65520,52,4.2535,0 +65521,52,4.0806,0 +65522,52,3.9121,0 +65523,52,3.7503,0 +65524,52,3.5983,0 +65525,52,3.4569,0 +65526,52,3.3295,0 +65527,52,3.2156,0 +65528,52,3.1166,0 +65529,52,3.0326,0 +65530,52,2.9619,0 +65531,52,2.9055,0 +65532,52,2.86,0 +65533,45,2.8248,0 +65534,45,2.7982,0 +65535,45,2.7782,0 +65536,45,2.7639,0 +65537,45,2.7533,0 +65538,45,2.7453,0 +65539,45,2.7388,0 +65540,45,2.7331,0 +65541,45,2.728,0 +65542,45,2.7234,0 +65543,45,2.7195,0 +65544,45,2.7168,0 +65545,45,2.7161,0 +65546,45,2.7181,0 +65547,45,2.7233,0 +65548,45,2.7325,0 +65549,45,2.7459,0 +65550,45,2.7641,0 +65551,45,2.788,0 +65552,45,2.8173,0 +65553,45,2.8532,0 +65554,45,2.8947,0 +65555,45,2.9421,0 +65556,46,2.9944,0 +65557,46,3.0508,0 +65558,46,3.1098,0 +65559,46,3.1698,0 +65560,46,3.2294,0 +65561,46,3.2873,0 +65562,46,3.342,0 +65563,46,3.3926,0 +65564,46,3.4377,0 +65565,46,3.4759,0 +65566,46,3.5067,0 +65567,46,3.5276,0 +65568,46,3.5392,0 +65569,46,3.5401,0 +65570,46,3.5306,0 +65571,46,3.5116,0 +65572,46,3.4832,0 +65573,46,3.4478,0 +65574,46,3.4063,0 +65575,46,3.3597,0 +65576,46,3.3095,0 +65577,46,3.256,0 +65578,46,3.2004,0 +65579,46,3.1431,0 +65580,46,3.085,0 +65581,46,3.027,0 +65582,46,2.9699,0 +65583,46,2.915,0 +65584,46,2.8629,0 +65585,46,2.8142,0 +65586,46,2.7697,0 +65587,46,2.7294,0 +65588,46,2.6937,0 +65589,46,2.6626,0 +65590,46,2.6354,0 +65591,46,2.6119,0 +65592,46,2.5916,0 +65593,46,2.5734,0 +65594,46,2.5563,0 +65595,46,2.5392,0 +65596,46,2.5208,0 +65597,46,2.4998,0 +65598,46,2.4749,0 +65599,46,2.4445,0 +65600,46,2.4074,0 +65601,46,2.363,0 +65602,46,2.3107,0 +65603,46,2.2503,0 +65604,46,2.1817,0 +65605,46,2.1055,0 +65606,46,2.022,0 +65607,46,1.9322,0 +65608,46,1.8369,0 +65609,46,1.7374,0 +65610,46,1.6355,0 +65611,46,1.5337,0 +65612,46,1.4342,0 +65613,46,1.3392,0 +65614,46,1.2499,0 +65615,46,1.1676,0 +65616,46,1.0927,0 +65617,46,1.0249,0 +65618,46,0.96327,0 +65619,46,0.90662,0 +65620,46,0.85277,0 +65621,46,0.79897,0 +65622,46,0.74337,0 +65623,46,0.68515,0 +65624,46,0.62424,0 +65625,46,0.56413,0 +65626,46,0.51496,0 +65627,46,0.5122,0 +65628,46,0.63873,0 +65629,46,1.1148,0 +65630,46,1.5508,0 +65631,0,0.76364,15 +65632,20,0.76364,0 +65633,20,-0.73843,0 +65634,20,-0.99667,0 +65635,20,-1.2652,0 +65636,20,-1.3912,0 +65637,20,-1.3828,0 +65638,20,-1.2702,0 +65639,20,-1.11,0 +65640,20,-1.0248,0 +65641,20,-1.0563,0 +65642,20,-1.1564,0 +65643,20,-1.2519,0 +65644,20,-1.3005,0 +65645,20,-1.2898,0 +65646,20,-1.2199,0 +65647,20,-1.1008,0 +65648,20,-0.949,0 +65649,20,-0.78195,0 +65650,20,-0.61227,0 +65651,20,-0.44571,0 +65652,20,-0.28565,0 +65653,20,-0.13672,0 +65654,20,-0.0037589,0 +65655,20,0.10432,0 +65656,20,0.17992,0 +65657,20,0.218,0 +65658,20,0.22068,0 +65659,20,0.19649,0 +65660,70,0.15572,0 +65661,70,0.10987,0 +65662,70,0.068079,0 +65663,70,0.038251,0 +65664,70,0.022422,0 +65665,70,0.017843,0 +65666,70,0.019779,0 +65667,70,0.024302,0 +65668,70,0.02952,0 +65669,70,0.032986,0 +65670,70,0.035478,0 +65671,70,0.039493,0 +65672,70,0.048347,0 +65673,70,0.065139,0 +65674,70,0.090679,0 +65675,70,0.12463,0 +65676,70,0.16714,0 +65677,70,0.21596,0 +65678,70,0.26743,0 +65679,70,0.3172,0 +65680,70,0.35998,0 +65681,70,0.39278,0 +65682,70,0.4161,0 +65683,70,0.43125,0 +65684,70,0.44034,0 +65685,70,0.44556,0 +65686,70,0.44846,0 +65687,70,0.45013,0 +65688,70,0.45114,0 +65689,70,0.45076,0 +65690,70,0.44807,0 +65691,70,0.44256,0 +65692,70,0.4336,0 +65693,70,0.42127,0 +65694,70,0.40618,0 +65695,70,0.38905,0 +65696,70,0.37055,0 +65697,70,0.3518,0 +65698,70,0.33377,0 +65699,70,0.31723,0 +65700,70,0.30249,0 +65701,70,0.28965,0 +65702,70,0.27854,0 +65703,70,0.26863,0 +65704,70,0.2592,0 +65705,70,0.24987,0 +65706,70,0.24039,0 +65707,70,0.23052,0 +65708,70,0.22072,0 +65709,70,0.21181,0 +65710,70,0.2049,0 +65711,70,0.20112,0 +65712,70,0.20134,0 +65713,70,0.20627,0 +65714,70,0.21632,0 +65715,70,0.23144,0 +65716,70,0.25093,0 +65717,70,0.274,0 +65718,70,0.29965,0 +65719,70,0.32651,0 +65720,70,0.35315,0 +65721,70,0.37825,0 +65722,70,0.40055,0 +65723,70,0.41889,0 +65724,70,0.43262,0 +65725,70,0.44127,0 +65726,70,0.44468,0 +65727,70,0.44269,0 +65728,70,0.43607,0 +65729,70,0.42525,0 +65730,70,0.41063,0 +65731,70,0.39265,0 +65732,70,0.37215,0 +65733,70,0.34966,0 +65734,70,0.32565,0 +65735,70,0.30085,0 +65736,70,0.27606,0 +65737,70,0.252,0 +65738,70,0.2295,0 +65739,70,0.20906,0 +65740,70,0.19115,0 +65741,70,0.17662,0 +65742,70,0.16575,0 +65743,70,0.15899,0 +65744,70,0.15723,0 +65745,70,0.1609,0 +65746,70,0.17015,0 +65747,70,0.18557,0 +65748,70,0.20728,0 +65749,70,0.23465,0 +65750,70,0.26757,0 +65751,70,0.30534,0 +65752,70,0.34686,0 +65753,70,0.39146,0 +65754,70,0.43777,0 +65755,70,0.48463,0 +65756,70,0.53062,0 +65757,70,0.57458,0 +65758,70,0.61516,0 +65759,70,0.6513,0 +65760,70,0.68214,0 +65761,70,0.70635,0 +65762,70,0.72423,0 +65763,70,0.73421,0 +65764,70,0.7377,0 +65765,70,0.73369,0 +65766,70,0.7238,0 +65767,70,0.70784,0 +65768,70,0.68749,0 +65769,70,0.66324,0 +65770,70,0.63671,0 +65771,70,0.60879,0 +65772,70,0.58076,0 +65773,70,0.55393,0 +65774,70,0.52917,0 +65775,70,0.50816,0 +65776,70,0.49109,0 +65777,70,0.47938,0 +65778,70,0.47295,0 +65779,70,0.47226,0 +65780,70,0.47731,0 +65781,70,0.4874,0 +65782,70,0.50292,0 +65783,70,0.52242,0 +65784,70,0.54579,0 +65785,70,0.57208,0 +65786,70,0.60051,0 +65787,70,0.63056,0 +65788,70,0.66128,0 +65789,70,0.69204,0 +65790,70,0.72216,0 +65791,70,0.75125,0 +65792,70,0.77876,0 +65793,70,0.80469,0 +65794,70,0.82916,0 +65795,70,0.85226,0 +65796,70,0.87461,0 +65797,70,0.89663,0 +65798,70,0.9189,0 +65799,70,0.94187,0 +65800,70,0.96594,0 +65801,70,0.99173,0 +65802,70,1.0193,0 +65803,70,1.0488,0 +65804,70,1.0805,0 +65805,70,1.114,0 +65806,70,1.1492,0 +65807,70,1.186,0 +65808,70,1.2237,0 +65809,70,1.2618,0 +65810,70,1.2995,0 +65811,70,1.3359,0 +65812,70,1.3703,0 +65813,70,1.4014,0 +65814,70,1.4289,0 +65815,70,1.4523,0 +65816,70,1.4701,0 +65817,70,1.483,0 +65818,70,1.4907,0 +65819,70,1.4924,0 +65820,70,1.4892,0 +65821,70,1.4818,0 +65822,70,1.4699,0 +65823,70,1.455,0 +65824,70,1.4377,0 +65825,70,1.4189,0 +65826,70,1.3996,0 +65827,70,1.3806,0 +65828,70,1.3626,0 +65829,70,1.3464,0 +65830,70,1.3321,0 +65831,70,1.32,0 +65832,70,1.3106,0 +65833,70,1.3034,0 +65834,70,1.2984,0 +65835,70,1.2955,0 +65836,70,1.2944,0 +65837,70,1.2948,0 +65838,70,1.2962,0 +65839,70,1.2984,0 +65840,70,1.3008,0 +65841,70,1.3029,0 +65842,70,1.3044,0 +65843,70,1.3047,0 +65844,70,1.3037,0 +65845,70,1.3012,0 +65846,70,1.2968,0 +65847,70,1.2904,0 +65848,70,1.2823,0 +65849,70,1.2726,0 +65850,70,1.2613,0 +65851,70,1.2485,0 +65852,70,1.2347,0 +65853,70,1.2199,0 +65854,70,1.2042,0 +65855,70,1.1878,0 +65856,70,1.1709,0 +65857,70,1.1537,0 +65858,70,1.1363,0 +65859,70,1.119,0 +65860,70,1.1018,0 +65861,70,1.0849,0 +65862,70,1.0685,0 +65863,70,1.0526,0 +65864,70,1.0375,0 +65865,70,1.0233,0 +65866,70,1.01,0 +65867,70,0.99782,0 +65868,70,0.98669,0 +65869,70,0.97675,0 +65870,70,0.96811,0 +65871,70,0.96072,0 +65872,70,0.95459,0 +65873,70,0.94971,0 +65874,70,0.94607,0 +65875,70,0.94373,0 +65876,70,0.94248,0 +65877,70,0.94223,0 +65878,70,0.9429,0 +65879,70,0.94443,0 +65880,70,0.94668,0 +65881,70,0.94961,0 +65882,70,0.95304,0 +65883,70,0.9569,0 +65884,70,0.96113,0 +65885,70,0.96568,0 +65886,70,0.9705,0 +65887,70,0.97558,0 +65888,70,0.98082,0 +65889,70,0.98614,0 +65890,70,0.99149,0 +65891,70,0.9968,0 +65892,70,1.002,0 +65893,70,1.007,0 +65894,70,1.0118,0 +65895,70,1.0162,0 +65896,70,1.0202,0 +65897,70,1.0238,0 +65898,70,1.0268,0 +65899,70,1.0292,0 +65900,70,1.031,0 +65901,70,1.0322,0 +65902,70,1.0327,0 +65903,70,1.0324,0 +65904,70,1.0311,0 +65905,70,1.0289,0 +65906,70,1.0256,0 +65907,70,1.0212,0 +65908,70,1.0157,0 +65909,70,1.0092,0 +65910,70,1.0014,0 +65911,70,0.99253,0 +65912,70,0.98256,0 +65913,70,0.97159,0 +65914,70,0.9598,0 +65915,70,0.94732,0 +65916,70,0.9343,0 +65917,70,0.92088,0 +65918,70,0.90718,0 +65919,70,0.89335,0 +65920,70,0.87951,0 +65921,70,0.86586,0 +65922,70,0.85254,0 +65923,70,0.83974,0 +65924,70,0.82769,0 +65925,70,0.81653,0 +65926,70,0.8064,0 +65927,70,0.79739,0 +65928,70,0.78958,0 +65929,70,0.78307,0 +65930,70,0.77791,0 +65931,70,0.77411,0 +65932,70,0.77161,0 +65933,70,0.77038,0 +65934,70,0.77034,0 +65935,70,0.77137,0 +65936,70,0.77337,0 +65937,70,0.77624,0 +65938,70,0.77989,0 +65939,70,0.78424,0 +65940,70,0.78912,0 +65941,70,0.79437,0 +65942,70,0.79985,0 +65943,70,0.80537,0 +65944,70,0.81071,0 +65945,70,0.81568,0 +65946,70,0.8201,0 +65947,70,0.82381,0 +65948,70,0.82669,0 +65949,70,0.82859,0 +65950,70,0.82939,0 +65951,70,0.82901,0 +65952,70,0.82741,0 +65953,70,0.82457,0 +65954,70,0.82047,0 +65955,70,0.81515,0 +65956,70,0.80862,0 +65957,70,0.8009,0 +65958,70,0.792,0 +65959,70,0.78193,0 +65960,70,0.77073,0 +65961,70,0.75848,0 +65962,70,0.74524,0 +65963,70,0.7311,0 +65964,70,0.71618,0 +65965,70,0.70063,0 +65966,70,0.68458,0 +65967,70,0.6682,0 +65968,70,0.65163,0 +65969,70,0.63504,0 +65970,70,0.6186,0 +65971,70,0.60249,0 +65972,70,0.58683,0 +65973,70,0.57176,0 +65974,73,0.55742,0 +65975,73,0.54394,0 +65976,73,0.53144,0 +65977,73,0.52006,0 +65978,73,0.50992,0 +65979,73,0.50115,0 +65980,73,0.49387,0 +65981,73,0.48814,0 +65982,73,0.48401,0 +65983,73,0.48153,0 +65984,73,0.48072,0 +65985,73,0.48159,0 +65986,73,0.4841,0 +65987,73,0.4882,0 +65988,73,0.49382,0 +65989,73,0.50088,0 +65990,73,0.50926,0 +65991,73,0.51887,0 +65992,73,0.52961,0 +65993,73,0.54135,0 +65994,73,0.55398,0 +65995,73,0.56734,0 +65996,73,0.58128,0 +65997,73,0.59567,0 +65998,73,0.61035,0 +65999,73,0.62518,0 +66000,73,0.63999,0 +66001,73,0.65467,0 +66002,73,0.66909,0 +66003,73,0.68314,0 +66004,73,0.69673,0 +66005,73,0.70979,0 +66006,73,0.72223,0 +66007,73,0.73401,0 +66008,73,0.74509,0 +66009,73,0.75544,0 +66010,73,0.76504,0 +66011,73,0.77388,0 +66012,73,0.78194,0 +66013,73,0.78923,0 +66014,73,0.79576,0 +66015,73,0.80158,0 +66016,73,0.80673,0 +66017,73,0.81127,0 +66018,73,0.81525,0 +66019,73,0.81874,0 +66020,73,0.82181,0 +66021,73,0.82454,0 +66022,73,0.82698,0 +66023,73,0.8292,0 +66024,73,0.83122,0 +66025,73,0.83308,0 +66026,73,0.83477,0 +66027,73,0.83631,0 +66028,73,0.83768,0 +66029,73,0.8389,0 +66030,73,0.83994,0 +66031,73,0.84081,0 +66032,73,0.84148,0 +66033,73,0.84198,0 +66034,73,0.84231,0 +66035,73,0.84248,0 +66036,73,0.84251,0 +66037,73,0.84242,0 +66038,73,0.84222,0 +66039,73,0.84196,0 +66040,73,0.84164,0 +66041,73,0.84131,0 +66042,73,0.84099,0 +66043,73,0.8407,0 +66044,73,0.84047,0 +66045,73,0.84035,0 +66046,73,0.84039,0 +66047,73,0.84065,0 +66048,73,0.8412,0 +66049,73,0.8421,0 +66050,73,0.84338,0 +66051,73,0.8451,0 +66052,73,0.84729,0 +66053,73,0.84999,0 +66054,73,0.85323,0 +66055,73,0.85702,0 +66056,73,0.86135,0 +66057,73,0.86621,0 +66058,73,0.87159,0 +66059,74,0.87746,0 +66060,74,0.8838,0 +66061,74,0.89057,0 +66062,74,0.89775,0 +66063,74,0.90529,0 +66064,74,0.91316,0 +66065,74,0.92131,0 +66066,74,0.92969,0 +66067,74,0.93823,0 +66068,74,0.94683,0 +66069,74,0.95542,0 +66070,74,0.9639,0 +66071,74,0.97223,0 +66072,74,0.98033,0 +66073,74,0.98817,0 +66074,74,0.99571,0 +66075,74,1.0029,0 +66076,74,1.0098,0 +66077,74,1.0163,0 +66078,74,1.0224,0 +66079,74,1.0281,0 +66080,74,1.0335,0 +66081,74,1.0384,0 +66082,74,1.0429,0 +66083,74,1.0468,0 +66084,74,1.0503,0 +66085,74,1.0532,0 +66086,74,1.0556,0 +66087,74,1.0574,0 +66088,74,1.0587,0 +66089,74,1.0594,0 +66090,74,1.0598,0 +66092,74,1.0596,0 +66093,74,1.0591,0 +66094,74,1.0586,0 +66095,74,1.058,0 +66096,74,1.0574,0 +66097,74,1.0568,0 +66098,74,1.0563,0 +66099,74,1.056,0 +66100,74,1.0558,0 +66102,74,1.056,0 +66103,74,1.0566,0 +66104,74,1.0575,0 +66105,74,1.0589,0 +66106,74,1.0608,0 +66107,74,1.0633,0 +66108,74,1.0665,0 +66109,74,1.0704,0 +66110,74,1.0751,0 +66111,74,1.0806,0 +66112,74,1.0869,0 +66113,74,1.0941,0 +66114,74,1.102,0 +66115,74,1.1108,0 +66116,74,1.1204,0 +66117,74,1.1308,0 +66118,74,1.1419,0 +66119,74,1.1537,0 +66120,74,1.1663,0 +66121,74,1.1797,0 +66122,74,1.1937,0 +66123,74,1.2083,0 +66124,74,1.2235,0 +66125,74,1.2391,0 +66126,74,1.2551,0 +66127,74,1.2714,0 +66128,74,1.2878,0 +66129,74,1.3042,0 +66130,74,1.3206,0 +66131,74,1.3368,0 +66132,74,1.3527,0 +66133,74,1.3682,0 +66134,74,1.3831,0 +66135,74,1.3974,0 +66136,74,1.411,0 +66137,74,1.4237,0 +66138,74,1.4355,0 +66139,74,1.4464,0 +66140,74,1.4562,0 +66141,74,1.4648,0 +66142,74,1.4722,0 +66143,74,1.4783,0 +66144,74,1.4832,0 +66145,74,1.4868,0 +66146,74,1.4891,0 +66147,74,1.4903,0 +66149,74,1.4892,0 +66150,74,1.4872,0 +66151,74,1.4843,0 +66152,74,1.4807,0 +66153,74,1.4764,0 +66154,74,1.4715,0 +66155,74,1.4663,0 +66156,74,1.4607,0 +66157,74,1.4548,0 +66158,74,1.4488,0 +66159,74,1.4426,0 +66160,74,1.4365,0 +66161,74,1.4303,0 +66162,74,1.4242,0 +66163,74,1.4182,0 +66164,74,1.4124,0 +66165,74,1.4068,0 +66166,74,1.4014,0 +66167,74,1.3962,0 +66168,74,1.3913,0 +66169,74,1.3866,0 +66170,74,1.3822,0 +66171,74,1.378,0 +66172,74,1.374,0 +66173,74,1.3703,0 +66174,74,1.3667,0 +66175,74,1.3634,0 +66176,74,1.3603,0 +66177,74,1.3574,0 +66178,74,1.3548,0 +66179,74,1.3525,0 +66180,74,1.3505,0 +66181,74,1.3488,0 +66182,74,1.3475,0 +66183,74,1.3465,0 +66184,74,1.346,0 +66185,74,1.3458,0 +66186,74,1.346,0 +66187,74,1.3465,0 +66188,74,1.3475,0 +66189,74,1.3488,0 +66190,74,1.3506,0 +66191,74,1.3526,0 +66192,74,1.355,0 +66193,74,1.3577,0 +66194,74,1.3607,0 +66195,74,1.364,0 +66196,75,1.3675,0 +66197,75,1.3712,0 +66198,75,1.3751,0 +66199,75,1.379,0 +66200,75,1.383,0 +66201,75,1.387,0 +66202,75,1.391,0 +66203,75,1.395,0 +66204,75,1.399,0 +66205,75,1.4029,0 +66206,75,1.4068,0 +66207,75,1.4106,0 +66208,75,1.4144,0 +66209,75,1.4182,0 +66210,75,1.422,0 +66211,75,1.4257,0 +66212,75,1.4295,0 +66213,75,1.4334,0 +66214,75,1.4373,0 +66215,75,1.4412,0 +66216,75,1.4451,0 +66217,75,1.449,0 +66218,75,1.453,0 +66219,75,1.4569,0 +66220,75,1.4608,0 +66221,75,1.4646,0 +66222,75,1.4684,0 +66223,75,1.4721,0 +66224,75,1.4757,0 +66225,75,1.4792,0 +66226,75,1.4825,0 +66227,75,1.4856,0 +66228,75,1.4885,0 +66229,75,1.4912,0 +66230,75,1.4937,0 +66231,75,1.496,0 +66232,75,1.498,0 +66233,75,1.4999,0 +66234,75,1.5015,0 +66235,75,1.5029,0 +66236,75,1.5041,0 +66237,75,1.505,0 +66238,75,1.5058,0 +66239,75,1.5062,0 +66240,75,1.5065,0 +66241,75,1.5064,0 +66242,75,1.5062,0 +66243,75,1.5057,0 +66244,75,1.5049,0 +66245,75,1.5039,0 +66246,75,1.5027,0 +66247,75,1.5013,0 +66248,75,1.4997,0 +66249,75,1.4979,0 +66250,75,1.4959,0 +66251,75,1.4937,0 +66252,75,1.4912,0 +66253,75,1.4884,0 +66254,75,1.4852,0 +66255,75,1.4818,0 +66256,75,1.4779,0 +66257,75,1.4736,0 +66258,75,1.469,0 +66259,75,1.4639,0 +66260,75,1.4586,0 +66261,75,1.453,0 +66262,75,1.4472,0 +66263,75,1.4414,0 +66264,75,1.4355,0 +66265,75,1.4297,0 +66266,75,1.424,0 +66267,75,1.4184,0 +66268,75,1.4131,0 +66269,75,1.408,0 +66270,75,1.4031,0 +66271,75,1.3984,0 +66272,75,1.3939,0 +66273,75,1.3895,0 +66274,75,1.3854,0 +66275,75,1.3814,0 +66276,75,1.3776,0 +66277,75,1.3739,0 +66278,75,1.3704,0 +66279,75,1.3671,0 +66280,75,1.3639,0 +66281,75,1.3608,0 +66282,75,1.3578,0 +66283,75,1.355,0 +66284,75,1.3521,0 +66285,75,1.3494,0 +66286,75,1.3466,0 +66287,75,1.3439,0 +66288,75,1.3413,0 +66289,75,1.3387,0 +66290,75,1.3362,0 +66291,75,1.3338,0 +66292,75,1.3316,0 +66293,75,1.3297,0 +66294,75,1.3281,0 +66295,75,1.3268,0 +66296,75,1.3259,0 +66297,75,1.3254,0 +66298,75,1.3253,0 +66299,75,1.3256,0 +66300,75,1.3261,0 +66301,75,1.327,0 +66302,75,1.3281,0 +66303,75,1.3293,0 +66304,75,1.3305,0 +66305,75,1.3316,0 +66306,75,1.3325,0 +66307,75,1.3332,0 +66308,75,1.3334,0 +66309,75,1.3332,0 +66310,75,1.3325,0 +66311,75,1.3312,0 +66312,75,1.3293,0 +66313,75,1.3268,0 +66314,75,1.3236,0 +66315,75,1.3198,0 +66316,75,1.3155,0 +66317,75,1.3106,0 +66318,75,1.3053,0 +66319,75,1.2997,0 +66320,75,1.2939,0 +66321,75,1.2879,0 +66322,75,1.2819,0 +66323,75,1.276,0 +66324,75,1.2704,0 +66325,75,1.2651,0 +66326,70,1.2603,0 +66327,70,1.2561,0 +66328,70,1.2526,0 +66329,70,1.2497,0 +66330,70,1.2476,0 +66331,70,1.2462,0 +66332,70,1.2454,0 +66333,70,1.2453,0 +66334,70,1.2457,0 +66335,70,1.2466,0 +66336,70,1.2479,0 +66337,70,1.2493,0 +66338,70,1.2509,0 +66339,70,1.2524,0 +66340,70,1.2539,0 +66341,70,1.2552,0 +66342,70,1.2562,0 +66343,70,1.2569,0 +66344,70,1.2573,0 +66345,70,1.2572,0 +66346,70,1.2567,0 +66347,70,1.2558,0 +66348,70,1.2543,0 +66349,70,1.2524,0 +66350,70,1.2501,0 +66351,70,1.2476,0 +66352,70,1.2448,0 +66353,70,1.242,0 +66354,70,1.2392,0 +66355,70,1.2365,0 +66356,70,1.2342,0 +66357,70,1.2323,0 +66358,70,1.2311,0 +66359,70,1.2306,0 +66360,70,1.231,0 +66361,70,1.2324,0 +66362,70,1.2348,0 +66363,70,1.2383,0 +66364,70,1.2429,0 +66365,70,1.2488,0 +66366,70,1.2559,0 +66367,70,1.2643,0 +66368,70,1.2741,0 +66369,70,1.2852,0 +66370,70,1.2977,0 +66371,70,1.3116,0 +66372,70,1.3267,0 +66373,70,1.3432,0 +66374,70,1.3609,0 +66375,70,1.3799,0 +66376,70,1.4,0 +66377,70,1.4211,0 +66378,70,1.4433,0 +66379,70,1.4664,0 +66380,70,1.4904,0 +66381,70,1.5152,0 +66382,70,1.5407,0 +66383,70,1.567,0 +66384,70,1.594,0 +66385,70,1.6219,0 +66386,70,1.6504,0 +66387,70,1.6796,0 +66388,70,1.7096,0 +66389,70,1.7403,0 +66390,70,1.7716,0 +66391,70,1.8036,0 +66392,70,1.8363,0 +66393,70,1.8696,0 +66394,70,1.9036,0 +66395,70,1.9382,0 +66396,70,1.9734,0 +66397,70,2.009,0 +66398,70,2.0451,0 +66399,70,2.0816,0 +66400,70,2.1184,0 +66401,70,2.1556,0 +66402,70,2.1931,0 +66403,70,2.2307,0 +66404,70,2.2684,0 +66405,70,2.3061,0 +66406,70,2.3436,0 +66407,70,2.3808,0 +66408,70,2.4176,0 +66409,70,2.4538,0 +66410,70,2.4893,0 +66411,70,2.5239,0 +66412,70,2.5575,0 +66413,70,2.5898,0 +66414,70,2.6208,0 +66415,70,2.6504,0 +66416,70,2.6786,0 +66417,70,2.7052,0 +66418,70,2.7304,0 +66419,70,2.7541,0 +66420,70,2.7764,0 +66421,70,2.7974,0 +66422,70,2.8172,0 +66423,70,2.8358,0 +66424,70,2.8536,0 +66425,70,2.8706,0 +66426,70,2.8871,0 +66427,70,2.9033,0 +66428,70,2.9195,0 +66429,70,2.9359,0 +66430,70,2.9526,0 +66431,70,2.9701,0 +66432,70,2.9885,0 +66433,70,3.008,0 +66434,70,3.0288,0 +66435,70,3.0509,0 +66436,70,3.0746,0 +66437,70,3.0997,0 +66438,70,3.1265,0 +66439,70,3.1548,0 +66440,70,3.1847,0 +66441,70,3.2162,0 +66442,70,3.2492,0 +66443,70,3.2838,0 +66444,70,3.3197,0 +66445,70,3.3569,0 +66446,70,3.3952,0 +66447,70,3.4344,0 +66448,70,3.4742,0 +66449,70,3.5143,0 +66450,70,3.5542,0 +66451,70,3.5935,0 +66452,70,3.6317,0 +66453,70,3.6683,0 +66454,70,3.7031,0 +66455,70,3.7356,0 +66456,70,3.7654,0 +66457,70,3.7923,0 +66458,70,3.8163,0 +66459,70,3.8372,0 +66460,70,3.8549,0 +66461,70,3.8695,0 +66462,70,3.881,0 +66463,70,3.8893,0 +66464,70,3.8945,0 +66465,70,3.8966,0 +66466,70,3.8956,0 +66467,70,3.8916,0 +66468,70,3.8847,0 +66469,70,3.8753,0 +66470,70,3.8636,0 +66471,70,3.85,0 +66472,70,3.8346,0 +66473,70,3.8179,0 +66474,70,3.8002,0 +66475,70,3.7817,0 +66476,70,3.7629,0 +66477,70,3.7439,0 +66478,70,3.725,0 +66479,70,3.7065,0 +66480,70,3.6886,0 +66481,70,3.6713,0 +66482,70,3.6549,0 +66483,70,3.6393,0 +66484,70,3.6249,0 +66485,70,3.6115,0 +66486,70,3.5992,0 +66487,70,3.5878,0 +66488,70,3.5773,0 +66489,70,3.5677,0 +66490,70,3.5587,0 +66491,70,3.5502,0 +66492,70,3.5423,0 +66493,70,3.5349,0 +66494,70,3.5278,0 +66495,70,3.5209,0 +66496,70,3.5143,0 +66497,70,3.508,0 +66498,70,3.5019,0 +66499,70,3.4962,0 +66500,70,3.4908,0 +66501,70,3.4858,0 +66502,70,3.4813,0 +66503,70,3.4772,0 +66504,70,3.4737,0 +66505,70,3.4709,0 +66506,70,3.4686,0 +66507,64,3.4669,0 +66508,64,3.4658,0 +66509,66,3.4652,0 +66510,66,3.4648,0 +66511,66,3.4646,0 +66512,66,3.4644,0 +66513,66,3.4642,0 +66514,66,3.4638,0 +66515,66,3.463,0 +66516,66,3.4616,0 +66517,66,3.4597,0 +66518,66,3.4571,0 +66519,66,3.4538,0 +66520,66,3.4496,0 +66521,66,3.4445,0 +66522,66,3.4384,0 +66523,66,3.4312,0 +66524,66,3.4231,0 +66525,66,3.4142,0 +66526,66,3.4046,0 +66527,66,3.3946,0 +66528,66,3.3844,0 +66529,66,3.3742,0 +66530,66,3.3643,0 +66531,66,3.3551,0 +66532,66,3.3469,0 +66533,66,3.3398,0 +66534,66,3.3341,0 +66535,66,3.3299,0 +66536,66,3.3273,0 +66537,66,3.3264,0 +66538,66,3.3273,0 +66539,66,3.3303,0 +66540,66,3.335,0 +66541,66,3.3415,0 +66542,66,3.3495,0 +66543,66,3.359,0 +66544,66,3.3698,0 +66545,66,3.3816,0 +66546,66,3.3942,0 +66547,66,3.4074,0 +66548,66,3.4207,0 +66549,66,3.434,0 +66550,66,3.4468,0 +66551,66,3.4588,0 +66552,66,3.4699,0 +66553,66,3.4798,0 +66554,66,3.4883,0 +66555,66,3.495,0 +66556,66,3.4998,0 +66557,66,3.5026,0 +66558,66,3.5034,0 +66559,66,3.5022,0 +66560,66,3.499,0 +66561,66,3.4939,0 +66562,66,3.4871,0 +66563,66,3.4788,0 +66564,66,3.4689,0 +66565,66,3.458,0 +66566,66,3.4462,0 +66567,66,3.4336,0 +66568,66,3.4207,0 +66569,66,3.4075,0 +66570,66,3.3942,0 +66571,66,3.381,0 +66572,66,3.3681,0 +66573,66,3.3555,0 +66574,66,3.3435,0 +66575,66,3.332,0 +66576,66,3.3212,0 +66577,66,3.3111,0 +66578,66,3.3017,0 +66579,66,3.2931,0 +66580,66,3.2852,0 +66581,66,3.2781,0 +66582,66,3.2716,0 +66583,66,3.2658,0 +66584,66,3.2605,0 +66585,66,3.2557,0 +66586,66,3.2515,0 +66587,66,3.2477,0 +66588,66,3.2444,0 +66589,66,3.2416,0 +66590,66,3.2393,0 +66591,66,3.2374,0 +66592,66,3.236,0 +66593,66,3.2351,0 +66594,66,3.2346,0 +66595,66,3.2345,0 +66596,66,3.2349,0 +66597,66,3.2357,0 +66598,66,3.2368,0 +66599,66,3.2384,0 +66600,66,3.2404,0 +66601,66,3.2427,0 +66602,66,3.2452,0 +66603,66,3.2479,0 +66604,66,3.2508,0 +66605,66,3.2536,0 +66606,66,3.2563,0 +66607,66,3.2587,0 +66608,66,3.2607,0 +66609,66,3.2621,0 +66610,66,3.2629,0 +66612,66,3.262,0 +66613,66,3.2603,0 +66614,66,3.2576,0 +66615,66,3.254,0 +66616,66,3.2496,0 +66617,66,3.2444,0 +66618,66,3.2384,0 +66619,66,3.2316,0 +66620,66,3.2243,0 +66621,66,3.2165,0 +66622,66,3.2085,0 +66623,66,3.2003,0 +66624,66,3.1922,0 +66625,66,3.1842,0 +66626,66,3.1767,0 +66627,66,3.1697,0 +66628,66,3.1635,0 +66629,66,3.1581,0 +66630,66,3.1537,0 +66631,66,3.1505,0 +66632,66,3.1484,0 +66633,66,3.1475,0 +66634,66,3.148,0 +66635,66,3.1498,0 +66636,66,3.1529,0 +66637,66,3.1574,0 +66638,66,3.1634,0 +66639,66,3.1707,0 +66640,66,3.1793,0 +66641,66,3.189,0 +66642,66,3.1999,0 +66643,66,3.2118,0 +66644,66,3.2246,0 +66645,66,3.2382,0 +66646,66,3.2525,0 +66647,66,3.2674,0 +66648,66,3.2828,0 +66649,66,3.2985,0 +66650,66,3.3144,0 +66651,66,3.3304,0 +66652,66,3.3463,0 +66653,66,3.3619,0 +66654,66,3.377,0 +66655,66,3.3915,0 +66656,66,3.4052,0 +66657,66,3.418,0 +66658,66,3.4297,0 +66659,66,3.4401,0 +66660,66,3.4492,0 +66661,66,3.457,0 +66662,66,3.4634,0 +66663,66,3.4684,0 +66664,66,3.472,0 +66665,66,3.474,0 +66666,66,3.4745,0 +66667,66,3.4735,0 +66668,66,3.4708,0 +66669,66,3.4665,0 +66670,66,3.4607,0 +66671,66,3.4535,0 +66672,66,3.4451,0 +66673,66,3.4358,0 +66674,66,3.4257,0 +66675,66,3.4149,0 +66676,66,3.4039,0 +66677,66,3.3927,0 +66678,66,3.3815,0 +66679,66,3.3705,0 +66680,66,3.3598,0 +66681,66,3.3494,0 +66682,66,3.3393,0 +66683,66,3.3297,0 +66684,66,3.3206,0 +66685,66,3.3119,0 +66686,66,3.3038,0 +66687,66,3.2961,0 +66688,66,3.289,0 +66689,66,3.2824,0 +66690,66,3.2763,0 +66691,66,3.2705,0 +66692,66,3.2649,0 +66693,66,3.2595,0 +66694,66,3.254,0 +66695,66,3.2484,0 +66696,66,3.2424,0 +66697,66,3.236,0 +66698,66,3.2291,0 +66699,66,3.2215,0 +66700,66,3.2132,0 +66701,66,3.2042,0 +66702,66,3.1946,0 +66703,66,3.1843,0 +66704,66,3.1733,0 +66705,66,3.1618,0 +66706,66,3.1497,0 +66707,66,3.1371,0 +66708,66,3.1241,0 +66709,66,3.1106,0 +66710,66,3.0968,0 +66711,66,3.0827,0 +66712,66,3.0684,0 +66713,66,3.054,0 +66714,66,3.0395,0 +66715,66,3.025,0 +66716,66,3.0105,0 +66717,66,2.9962,0 +66718,66,2.9821,0 +66719,66,2.9682,0 +66720,66,2.9546,0 +66721,66,2.9413,0 +66722,66,2.9285,0 +66723,66,2.916,0 +66724,66,2.9041,0 +66725,66,2.8926,0 +66726,66,2.8817,0 +66727,66,2.8715,0 +66728,66,2.862,0 +66729,66,2.8533,0 +66730,66,2.8455,0 +66731,66,2.8386,0 +66732,66,2.8327,0 +66733,66,2.8279,0 +66734,66,2.8242,0 +66735,66,2.8218,0 +66736,66,2.8207,0 +66737,66,2.8209,0 +66738,66,2.8225,0 +66739,66,2.8255,0 +66740,66,2.8299,0 +66741,66,2.8357,0 +66742,66,2.843,0 +66743,66,2.8515,0 +66744,66,2.8611,0 +66745,66,2.8719,0 +66746,66,2.8837,0 +66747,66,2.8962,0 +66748,66,2.9094,0 +66749,66,2.9232,0 +66750,66,2.9374,0 +66751,66,2.9518,0 +66752,66,2.9663,0 +66753,66,2.9807,0 +66754,66,2.995,0 +66755,66,3.0088,0 +66756,66,3.0223,0 +66757,66,3.0351,0 +66758,66,3.0473,0 +66759,66,3.0589,0 +66760,66,3.0696,0 +66761,66,3.0795,0 +66762,66,3.0886,0 +66763,66,3.0967,0 +66764,66,3.104,0 +66765,66,3.1105,0 +66766,66,3.1161,0 +66767,66,3.121,0 +66768,66,3.1251,0 +66769,66,3.1286,0 +66770,66,3.1314,0 +66771,66,3.1335,0 +66772,66,3.1351,0 +66773,66,3.136,0 +66774,66,3.1365,0 +66775,66,3.1364,0 +66776,66,3.1358,0 +66777,66,3.1347,0 +66778,68,3.1331,0 +66779,68,3.1308,0 +66780,68,3.1281,0 +66781,68,3.1247,0 +66782,68,3.1208,0 +66783,68,3.1164,0 +66784,68,3.1116,0 +66785,68,3.1062,0 +66786,68,3.1005,0 +66787,68,3.0943,0 +66788,68,3.0878,0 +66789,68,3.0811,0 +66790,68,3.0742,0 +66791,68,3.0672,0 +66792,68,3.0603,0 +66793,68,3.0535,0 +66794,68,3.0469,0 +66795,68,3.0408,0 +66796,68,3.0352,0 +66797,68,3.0303,0 +66798,68,3.0263,0 +66799,68,3.0231,0 +66800,68,3.0208,0 +66801,68,3.0196,0 +66802,68,3.0194,0 +66803,68,3.0202,0 +66804,68,3.022,0 +66805,68,3.0248,0 +66806,68,3.0284,0 +66807,68,3.0328,0 +66808,68,3.0379,0 +66809,68,3.0436,0 +66810,68,3.0497,0 +66811,68,3.0561,0 +66812,68,3.0626,0 +66813,68,3.0691,0 +66814,68,3.0753,0 +66815,68,3.081,0 +66816,68,3.0859,0 +66817,68,3.09,0 +66818,68,3.0931,0 +66819,68,3.095,0 +66820,68,3.0958,0 +66821,68,3.0952,0 +66822,68,3.0934,0 +66823,68,3.0902,0 +66824,68,3.0859,0 +66825,68,3.0804,0 +66826,68,3.0738,0 +66827,68,3.0664,0 +66828,68,3.0581,0 +66829,68,3.0491,0 +66830,68,3.0396,0 +66831,68,3.0296,0 +66832,68,3.0193,0 +66833,68,3.0089,0 +66834,68,2.9985,0 +66835,68,2.9883,0 +66836,68,2.9786,0 +66837,68,2.9692,0 +66838,68,2.9605,0 +66839,68,2.9523,0 +66840,68,2.9449,0 +66841,68,2.9381,0 +66842,68,2.9319,0 +66843,68,2.9264,0 +66844,68,2.9215,0 +66845,68,2.9169,0 +66846,68,2.9128,0 +66847,68,2.9089,0 +66848,68,2.9053,0 +66849,68,2.9019,0 +66850,68,2.8985,0 +66851,68,2.895,0 +66852,68,2.8915,0 +66853,68,2.8877,0 +66854,68,2.8836,0 +66855,68,2.879,0 +66856,68,2.874,0 +66857,68,2.8683,0 +66858,68,2.862,0 +66859,68,2.8549,0 +66860,68,2.8471,0 +66861,68,2.8384,0 +66862,68,2.829,0 +66863,68,2.8188,0 +66864,68,2.8078,0 +66865,68,2.7962,0 +66866,68,2.7838,0 +66867,68,2.7707,0 +66868,68,2.757,0 +66869,68,2.7425,0 +66870,68,2.7273,0 +66871,68,2.7114,0 +66872,68,2.6949,0 +66873,68,2.6778,0 +66874,68,2.6601,0 +66875,68,2.642,0 +66876,68,2.6236,0 +66877,68,2.6049,0 +66878,68,2.5861,0 +66879,68,2.5673,0 +66880,68,2.5486,0 +66881,68,2.5301,0 +66882,68,2.5119,0 +66883,68,2.4941,0 +66884,68,2.4769,0 +66885,68,2.4602,0 +66886,68,2.4444,0 +66887,68,2.4294,0 +66888,68,2.4154,0 +66889,68,2.4025,0 +66890,68,2.3909,0 +66891,68,2.3806,0 +66892,68,2.3717,0 +66893,68,2.3642,0 +66894,68,2.358,0 +66895,68,2.3529,0 +66896,68,2.3489,0 +66897,68,2.3458,0 +66898,68,2.3434,0 +66899,68,2.3416,0 +66900,68,2.3402,0 +66901,68,2.339,0 +66902,68,2.3377,0 +66903,68,2.3362,0 +66904,68,2.3343,0 +66905,68,2.3318,0 +66906,68,2.3284,0 +66907,68,2.3241,0 +66908,68,2.3185,0 +66909,68,2.3115,0 +66910,68,2.3028,0 +66911,68,2.2925,0 +66912,68,2.2802,0 +66913,68,2.2659,0 +66914,68,2.2495,0 +66915,68,2.231,0 +66916,68,2.2104,0 +66917,68,2.1875,0 +66918,68,2.1625,0 +66919,68,2.1355,0 +66920,68,2.1065,0 +66921,68,2.0756,0 +66922,68,2.0428,0 +66923,68,2.0084,0 +66924,68,1.9725,0 +66925,68,1.9351,0 +66926,68,1.8965,0 +66927,68,1.8568,0 +66928,68,1.8161,0 +66929,68,1.7747,0 +66930,68,1.7327,0 +66931,68,1.6905,0 +66932,68,1.6481,0 +66933,68,1.6059,0 +66934,68,1.5641,0 +66935,68,1.523,0 +66936,68,1.4827,0 +66937,68,1.4435,0 +66938,68,1.4055,0 +66939,68,1.3688,0 +66940,68,1.3335,0 +66941,68,1.2997,0 +66942,68,1.2674,0 +66943,68,1.2368,0 +66944,68,1.2078,0 +66945,68,1.1805,0 +66946,68,1.1547,0 +66947,68,1.1306,0 +66948,68,1.1079,0 +66949,68,1.0867,0 +66950,68,1.0668,0 +66951,68,1.0481,0 +66952,68,1.0306,0 +66953,68,1.014,0 +66954,68,0.99799,0 +66955,68,0.98254,0 +66956,68,0.96748,0 +66957,68,0.95268,0 +66958,68,0.93803,0 +66959,68,0.92343,0 +66960,68,0.90876,0 +66961,68,0.89393,0 +66962,68,0.87884,0 +66963,68,0.86341,0 +66964,68,0.84758,0 +66965,68,0.83131,0 +66966,68,0.8146,0 +66967,68,0.79741,0 +66968,68,0.77978,0 +66969,68,0.76173,0 +66970,68,0.74331,0 +66971,68,0.72457,0 +66972,68,0.70561,0 +66973,68,0.68657,0 +66974,68,0.66756,0 +66975,68,0.64872,0 +66976,68,0.63012,0 +66977,68,0.61189,0 +66978,68,0.59412,0 +66979,68,0.5769,0 +66980,68,0.56035,0 +66981,68,0.54462,0 +66982,68,0.52981,0 +66983,68,0.51606,0 +66984,68,0.5035,0 +66985,68,0.49217,0 +66986,68,0.48215,0 +66987,68,0.47349,0 +66988,68,0.46622,0 +66989,68,0.46038,0 +66990,68,0.45601,0 +66991,68,0.45307,0 +66992,68,0.45156,0 +66993,68,0.45142,0 +66994,68,0.45257,0 +66995,68,0.45497,0 +66996,68,0.45853,0 +66997,68,0.4632,0 +66998,68,0.46888,0 +66999,68,0.47545,0 +67000,68,0.48281,0 +67001,68,0.49076,0 +67002,68,0.49913,0 +67003,68,0.50776,0 +67004,68,0.51647,0 +67005,68,0.5251,0 +67006,68,0.53348,0 +67007,68,0.54147,0 +67008,68,0.54893,0 +67009,68,0.55575,0 +67010,68,0.56182,0 +67011,68,0.56704,0 +67012,68,0.57134,0 +67013,68,0.57467,0 +67014,68,0.577,0 +67015,68,0.5783,0 +67016,68,0.57852,0 +67017,68,0.57771,0 +67018,68,0.57593,0 +67019,68,0.57323,0 +67020,68,0.56971,0 +67021,68,0.56548,0 +67022,68,0.56065,0 +67023,68,0.55536,0 +67024,68,0.54975,0 +67025,68,0.54397,0 +67026,68,0.53815,0 +67027,68,0.53244,0 +67028,68,0.52695,0 +67029,68,0.52177,0 +67030,68,0.51702,0 +67031,68,0.5128,0 +67032,68,0.50913,0 +67033,68,0.50606,0 +67034,68,0.50357,0 +67035,68,0.50166,0 +67036,68,0.5003,0 +67037,68,0.49942,0 +67038,68,0.49894,0 +67039,68,0.49876,0 +67041,68,0.49881,0 +67042,68,0.49879,0 +67043,68,0.49857,0 +67044,68,0.49804,0 +67045,68,0.49709,0 +67046,68,0.49557,0 +67047,68,0.49345,0 +67048,68,0.4907,0 +67049,68,0.48728,0 +67050,68,0.48317,0 +67051,68,0.47839,0 +67052,68,0.47299,0 +67053,68,0.46703,0 +67054,68,0.4606,0 +67055,68,0.45379,0 +67056,68,0.44673,0 +67057,68,0.43953,0 +67058,68,0.43231,0 +67059,68,0.42519,0 +67060,68,0.41834,0 +67061,68,0.41187,0 +67062,68,0.40589,0 +67063,68,0.40045,0 +67064,68,0.39564,0 +67065,68,0.3915,0 +67066,68,0.38807,0 +67067,68,0.38534,0 +67068,68,0.38333,0 +67069,68,0.38202,0 +67070,68,0.3814,0 +67071,68,0.38142,0 +67072,68,0.382,0 +67073,68,0.38312,0 +67074,67,0.3847,0 +67075,67,0.38671,0 +67076,67,0.3891,0 +67077,67,0.39187,0 +67078,67,0.39508,0 +67079,67,0.39879,0 +67080,67,0.40308,0 +67081,67,0.40807,0 +67082,67,0.41396,0 +67083,67,0.42096,0 +67084,67,0.42929,0 +67085,67,0.4392,0 +67086,67,0.45093,0 +67087,67,0.46469,0 +67088,67,0.4807,0 +67089,67,0.49919,0 +67090,67,0.5204,0 +67091,67,0.54438,0 +67092,67,0.57126,0 +67093,67,0.60109,0 +67094,67,0.63393,0 +67095,67,0.66978,0 +67096,67,0.70858,0 +67097,67,0.75023,0 +67098,67,0.79456,0 +67099,67,0.84139,0 +67100,67,0.89046,0 +67101,67,0.94147,0 +67102,67,0.99406,0 +67103,67,1.0478,0 +67104,67,1.1024,0 +67105,67,1.1572,0 +67106,67,1.212,0 +67107,67,1.2663,0 +67108,67,1.3198,0 +67109,67,1.3722,0 +67110,67,1.4232,0 +67111,67,1.4726,0 +67112,67,1.5203,0 +67113,67,1.566,0 +67114,67,1.6097,0 +67115,67,1.6513,0 +67116,67,1.6907,0 +67117,67,1.7279,0 +67118,67,1.763,0 +67119,67,1.7961,0 +67120,67,1.8272,0 +67121,67,1.8567,0 +67122,67,1.8846,0 +67123,67,1.9112,0 +67124,67,1.9368,0 +67125,67,1.9616,0 +67126,67,1.9858,0 +67127,67,2.0097,0 +67128,67,2.0333,0 +67129,67,2.057,0 +67130,67,2.0807,0 +67131,67,2.1046,0 +67132,67,2.1287,0 +67133,67,2.1529,0 +67134,67,2.1773,0 +67135,67,2.202,0 +67136,67,2.2268,0 +67137,67,2.2518,0 +67138,67,2.277,0 +67139,67,2.3025,0 +67140,67,2.3281,0 +67141,67,2.3539,0 +67142,67,2.3798,0 +67143,67,2.4058,0 +67144,67,2.4318,0 +67145,67,2.4578,0 +67146,67,2.4838,0 +67147,67,2.5098,0 +67148,67,2.5357,0 +67149,67,2.5617,0 +67150,67,2.5878,0 +67151,67,2.6141,0 +67152,67,2.6405,0 +67153,67,2.6672,0 +67154,67,2.6942,0 +67155,67,2.7216,0 +67156,67,2.7493,0 +67157,67,2.7774,0 +67158,67,2.8058,0 +67159,67,2.8346,0 +67160,67,2.8637,0 +67161,67,2.8932,0 +67162,67,2.923,0 +67163,67,2.9531,0 +67164,67,2.9835,0 +67165,67,3.0143,0 +67166,67,3.0453,0 +67167,67,3.0766,0 +67168,67,3.1079,0 +67169,67,3.1392,0 +67170,67,3.1705,0 +67171,67,3.2015,0 +67172,67,3.2321,0 +67173,67,3.2622,0 +67174,67,3.2915,0 +67175,67,3.3199,0 +67176,67,3.3471,0 +67177,67,3.3732,0 +67178,67,3.398,0 +67179,67,3.4211,0 +67180,67,3.4427,0 +67181,67,3.4626,0 +67182,67,3.4807,0 +67183,67,3.497,0 +67184,67,3.5116,0 +67185,67,3.5244,0 +67186,67,3.5353,0 +67187,67,3.5445,0 +67188,67,3.552,0 +67189,67,3.5576,0 +67190,65,3.5617,0 +67191,65,3.5642,0 +67192,68,3.5654,0 +67194,68,3.5641,0 +67195,68,3.5618,0 +67196,68,3.5586,0 +67197,68,3.5546,0 +67198,68,3.5498,0 +67199,68,3.5443,0 +67200,68,3.5382,0 +67201,68,3.5315,0 +67202,68,3.5242,0 +67203,68,3.5163,0 +67204,68,3.5078,0 +67205,68,3.4986,0 +67206,68,3.4888,0 +67207,68,3.4783,0 +67208,68,3.4669,0 +67209,68,3.4547,0 +67210,68,3.4417,0 +67211,68,3.4277,0 +67212,68,3.4128,0 +67213,68,3.3969,0 +67214,68,3.3801,0 +67215,68,3.3624,0 +67216,68,3.3438,0 +67217,68,3.3244,0 +67218,68,3.3042,0 +67219,68,3.2835,0 +67220,68,3.2622,0 +67221,68,3.2406,0 +67222,68,3.2185,0 +67223,68,3.1962,0 +67224,68,3.1736,0 +67225,68,3.1508,0 +67226,68,3.1278,0 +67227,68,3.1048,0 +67228,68,3.0818,0 +67229,68,3.0588,0 +67230,68,3.0359,0 +67231,68,3.0131,0 +67232,68,2.9905,0 +67233,68,2.9682,0 +67234,68,2.946,0 +67235,68,2.924,0 +67236,68,2.9022,0 +67237,68,2.8805,0 +67238,68,2.8587,0 +67239,68,2.8368,0 +67240,68,2.8147,0 +67241,68,2.7925,0 +67242,68,2.7702,0 +67243,68,2.7476,0 +67244,68,2.7249,0 +67245,68,2.7022,0 +67246,68,2.6794,0 +67247,68,2.6568,0 +67248,68,2.6343,0 +67249,68,2.6121,0 +67250,68,2.5903,0 +67251,68,2.5689,0 +67252,68,2.5479,0 +67253,68,2.5274,0 +67254,68,2.5076,0 +67255,68,2.4883,0 +67256,68,2.4699,0 +67257,68,2.4521,0 +67258,68,2.4352,0 +67259,68,2.4191,0 +67260,68,2.4037,0 +67261,68,2.3892,0 +67262,68,2.3754,0 +67263,68,2.3625,0 +67264,68,2.3501,0 +67265,68,2.3384,0 +67266,68,2.3272,0 +67267,68,2.3164,0 +67268,68,2.3059,0 +67269,68,2.2958,0 +67270,68,2.2858,0 +67271,68,2.276,0 +67272,68,2.2662,0 +67273,68,2.2564,0 +67274,68,2.2464,0 +67275,68,2.2363,0 +67276,68,2.2258,0 +67277,68,2.215,0 +67278,68,2.2039,0 +67279,68,2.1922,0 +67280,68,2.18,0 +67281,68,2.1673,0 +67282,68,2.154,0 +67283,68,2.14,0 +67284,68,2.1253,0 +67285,68,2.1099,0 +67286,68,2.0938,0 +67287,68,2.0769,0 +67288,68,2.0591,0 +67289,68,2.0406,0 +67290,68,2.0212,0 +67291,68,2.0009,0 +67292,68,1.9798,0 +67293,68,1.9579,0 +67294,68,1.9351,0 +67295,68,1.9117,0 +67296,68,1.8876,0 +67297,68,1.8629,0 +67298,68,1.8376,0 +67299,68,1.8118,0 +67300,68,1.7855,0 +67301,68,1.7589,0 +67302,68,1.7319,0 +67303,68,1.7048,0 +67304,68,1.6774,0 +67305,68,1.6501,0 +67306,68,1.6228,0 +67307,68,1.5958,0 +67308,68,1.5691,0 +67309,68,1.5428,0 +67310,68,1.5172,0 +67311,68,1.4923,0 +67312,68,1.4682,0 +67313,68,1.4449,0 +67314,68,1.4225,0 +67315,68,1.4011,0 +67316,68,1.3805,0 +67317,68,1.361,0 +67318,68,1.3423,0 +67319,68,1.3246,0 +67320,68,1.3078,0 +67321,68,1.2918,0 +67322,68,1.2766,0 +67323,68,1.2622,0 +67324,68,1.2486,0 +67325,68,1.2356,0 +67326,68,1.2232,0 +67327,68,1.2113,0 +67328,68,1.1998,0 +67329,68,1.1885,0 +67330,68,1.1775,0 +67331,68,1.1666,0 +67332,68,1.1556,0 +67333,68,1.1446,0 +67334,68,1.1334,0 +67335,68,1.1219,0 +67336,68,1.11,0 +67337,68,1.0975,0 +67338,68,1.0844,0 +67339,68,1.0704,0 +67340,68,1.0556,0 +67341,68,1.0399,0 +67342,68,1.0233,0 +67343,68,1.0057,0 +67344,68,0.98699,0 +67345,68,0.96734,0 +67346,68,0.94671,0 +67347,68,0.92513,0 +67348,68,0.90267,0 +67349,68,0.8794,0 +67350,68,0.85537,0 +67351,68,0.83067,0 +67352,68,0.80537,0 +67353,68,0.77957,0 +67354,68,0.75342,0 +67355,68,0.72706,0 +67356,68,0.70066,0 +67357,68,0.67439,0 +67358,68,0.64842,0 +67359,68,0.62289,0 +67360,68,0.59796,0 +67361,68,0.57374,0 +67362,68,0.55038,0 +67363,68,0.52795,0 +67364,68,0.5065,0 +67365,68,0.48604,0 +67366,68,0.46657,0 +67367,68,0.44809,0 +67368,68,0.43055,0 +67369,68,0.41388,0 +67370,68,0.39798,0 +67371,68,0.38279,0 +67372,68,0.36816,0 +67373,68,0.35393,0 +67374,68,0.33996,0 +67375,68,0.32611,0 +67376,68,0.31222,0 +67377,68,0.29811,0 +67378,68,0.28363,0 +67379,68,0.26864,0 +67380,68,0.25299,0 +67381,68,0.23656,0 +67382,68,0.21922,0 +67383,68,0.20089,0 +67384,68,0.18151,0 +67385,68,0.16102,0 +67386,68,0.1394,0 +67387,68,0.11658,0 +67388,68,0.092557,0 +67389,68,0.067379,0 +67390,68,0.041056,0 +67391,68,0.013628,0 +67392,68,-0.014867,0 +67393,68,-0.044378,0 +67394,68,-0.074865,0 +67395,68,-0.10629,0 +67396,68,-0.13861,0 +67397,68,-0.17174,0 +67398,68,-0.20564,0 +67399,68,-0.24022,0 +67400,68,-0.27537,0 +67401,68,-0.31101,0 +67402,68,-0.34702,0 +67403,68,-0.38328,0 +67404,68,-0.41965,0 +67405,68,-0.45599,0 +67406,68,-0.49212,0 +67407,68,-0.52786,0 +67408,68,-0.56303,0 +67409,68,-0.59743,0 +67410,68,-0.63088,0 +67411,68,-0.66317,0 +67412,68,-0.69409,0 +67413,68,-0.72345,0 +67414,68,-0.75104,0 +67415,68,-0.77662,0 +67416,68,-0.79999,0 +67417,68,-0.82098,0 +67418,68,-0.83945,0 +67419,68,-0.85528,0 +67420,68,-0.86842,0 +67421,68,-0.87873,0 +67422,68,-0.88628,0 +67423,68,-0.89118,0 +67424,68,-0.89354,0 +67425,68,-0.89353,0 +67426,68,-0.89135,0 +67427,68,-0.88725,0 +67428,68,-0.8815,0 +67429,68,-0.87437,0 +67430,68,-0.86612,0 +67431,68,-0.85706,0 +67432,68,-0.84746,0 +67433,68,-0.83761,0 +67434,68,-0.8278,0 +67435,68,-0.81832,0 +67436,68,-0.80944,0 +67437,68,-0.8014,0 +67438,68,-0.79447,0 +67439,68,-0.78874,0 +67440,68,-0.78433,0 +67441,68,-0.78128,0 +67442,68,-0.77961,0 +67443,68,-0.77929,0 +67444,68,-0.78023,0 +67445,68,-0.78229,0 +67446,68,-0.78528,0 +67447,68,-0.78898,0 +67448,68,-0.79316,0 +67449,68,-0.79761,0 +67450,68,-0.80213,0 +67451,68,-0.80652,0 +67452,68,-0.81062,0 +67453,68,-0.81425,0 +67454,68,-0.81726,0 +67455,68,-0.81956,0 +67456,68,-0.82104,0 +67457,68,-0.82166,0 +67458,68,-0.82137,0 +67459,68,-0.82016,0 +67460,68,-0.81806,0 +67461,68,-0.81512,0 +67462,68,-0.81139,0 +67463,68,-0.80695,0 +67464,68,-0.8019,0 +67465,68,-0.79635,0 +67466,68,-0.79045,0 +67467,68,-0.78432,0 +67468,68,-0.77807,0 +67469,68,-0.77186,0 +67470,68,-0.76576,0 +67471,68,-0.75984,0 +67472,68,-0.75413,0 +67473,68,-0.74864,0 +67474,68,-0.74334,0 +67475,68,-0.7382,0 +67476,68,-0.73315,0 +67477,68,-0.72813,0 +67478,68,-0.72306,0 +67479,68,-0.71784,0 +67480,68,-0.7124,0 +67481,68,-0.70666,0 +67482,68,-0.70059,0 +67483,68,-0.69418,0 +67484,68,-0.68742,0 +67485,68,-0.68037,0 +67486,68,-0.67305,0 +67487,68,-0.66554,0 +67488,68,-0.6579,0 +67489,68,-0.65019,0 +67490,68,-0.64251,0 +67491,68,-0.63494,0 +67492,68,-0.62757,0 +67493,68,-0.62049,0 +67494,68,-0.6138,0 +67495,68,-0.60758,0 +67496,68,-0.60192,0 +67497,68,-0.59697,0 +67498,68,-0.59281,0 +67499,68,-0.58951,0 +67500,68,-0.58714,0 +67501,68,-0.5857,0 +67502,68,-0.5852,0 +67503,68,-0.5856,0 +67504,68,-0.58686,0 +67505,68,-0.58888,0 +67506,68,-0.59153,0 +67507,68,-0.5947,0 +67508,68,-0.59825,0 +67509,68,-0.60203,0 +67510,68,-0.6059,0 +67511,68,-0.60972,0 +67512,68,-0.61337,0 +67513,68,-0.61675,0 +67514,68,-0.61978,0 +67515,68,-0.62238,0 +67516,68,-0.62448,0 +67517,68,-0.62601,0 +67518,68,-0.62692,0 +67519,68,-0.62713,0 +67520,68,-0.62662,0 +67521,68,-0.62538,0 +67522,68,-0.62336,0 +67523,68,-0.62053,0 +67524,68,-0.61697,0 +67525,68,-0.61272,0 +67526,68,-0.60787,0 +67527,68,-0.60247,0 +67528,68,-0.5966,0 +67529,68,-0.59037,0 +67530,68,-0.5839,0 +67531,68,-0.57729,0 +67532,68,-0.57065,0 +67533,68,-0.56409,0 +67534,68,-0.5577,0 +67535,68,-0.55157,0 +67536,68,-0.54575,0 +67537,68,-0.5403,0 +67538,68,-0.53528,0 +67539,68,-0.5307,0 +67540,68,-0.52661,0 +67541,68,-0.523,0 +67542,68,-0.51989,0 +67543,68,-0.51723,0 +67544,66,-0.51499,0 +67545,66,-0.5131,0 +67546,67,-0.5115,0 +67547,67,-0.51015,0 +67548,67,-0.50892,0 +67549,67,-0.50772,0 +67550,67,-0.50643,0 +67551,67,-0.50492,0 +67552,67,-0.50305,0 +67553,67,-0.50071,0 +67554,67,-0.49778,0 +67555,67,-0.49414,0 +67556,67,-0.4897,0 +67557,67,-0.48435,0 +67558,67,-0.47795,0 +67559,67,-0.47045,0 +67560,67,-0.4618,0 +67561,67,-0.45199,0 +67562,67,-0.44103,0 +67563,67,-0.42892,0 +67564,67,-0.41573,0 +67565,67,-0.40152,0 +67566,67,-0.38633,0 +67567,67,-0.37027,0 +67568,67,-0.35343,0 +67569,67,-0.33594,0 +67570,67,-0.31792,0 +67571,67,-0.29954,0 +67572,67,-0.28095,0 +67573,67,-0.26229,0 +67574,67,-0.24369,0 +67575,67,-0.2253,0 +67576,67,-0.20727,0 +67577,67,-0.18973,0 +67578,67,-0.17283,0 +67579,67,-0.1567,0 +67580,67,-0.14143,0 +67581,67,-0.12712,0 +67582,67,-0.11387,0 +67583,67,-0.10168,0 +67584,67,-0.090564,0 +67585,67,-0.080515,0 +67586,67,-0.071523,0 +67587,67,-0.063556,0 +67588,67,-0.056559,0 +67589,67,-0.050471,0 +67590,67,-0.045226,0 +67591,67,-0.040762,0 +67592,67,-0.037015,0 +67593,67,-0.033923,0 +67594,67,-0.031437,0 +67595,67,-0.029487,0 +67596,67,-0.02798,0 +67597,67,-0.026849,0 +67598,67,-0.026023,0 +67599,67,-0.025444,0 +67600,67,-0.025057,0 +67601,67,-0.024814,0 +67602,67,-0.024675,0 +67603,67,-0.024604,0 +67604,67,-0.024576,0 +67605,67,-0.024569,0 +67606,67,-0.02457,0 +67611,67,-0.024569,0 +67612,67,-0.024568,0 +67614,67,-0.024567,0 +67615,67,-0.024566,0 +67617,67,-0.024565,0 +67620,67,-0.024563,0 +67621,67,-0.024554,0 +67622,67,-0.024522,0 +67623,67,-0.024453,0 +67624,67,-0.024331,0 +67625,67,-0.024135,0 +67626,67,-0.023847,0 +67627,67,-0.02345,0 +67628,67,-0.02293,0 +67629,67,-0.02227,0 +67630,67,-0.021455,0 +67631,67,-0.020474,0 +67632,67,-0.019335,0 +67633,67,-0.018053,0 +67634,67,-0.016641,0 +67635,67,-0.015115,0 +67636,67,-0.013487,0 +67637,67,-0.011758,0 +67638,67,-0.0099236,0 +67639,67,-0.0079815,0 +67640,67,-0.0059403,0 +67641,67,-0.0038263,0 +67642,67,-0.0016616,0 +67643,67,0.00053974,0 +67644,67,0.0027454,0 +67645,67,0.0049281,0 +67646,67,0.0070852,0 +67647,67,0.009213,0 +67648,67,0.011307,0 +67649,67,0.013364,0 +67650,67,0.015406,0 +67651,67,0.017498,0 +67652,67,0.019723,0 +67653,67,0.02216,0 +67654,67,0.024908,0 +67655,67,0.028066,0 +67656,67,0.031716,0 +67657,67,0.035882,0 +67658,67,0.040571,0 +67659,67,0.045805,0 +67660,67,0.051617,0 +67661,67,0.05802,0 +67662,67,0.064995,0 +67663,67,0.072519,0 +67664,67,0.08056,0 +67665,67,0.089054,0 +67666,67,0.097921,0 +67667,67,0.10708,0 +67668,67,0.11643,0 +67669,67,0.12587,0 +67670,67,0.13519,0 +67671,67,0.14419,0 +67672,67,0.15266,0 +67673,67,0.16038,0 +67674,67,0.16714,0 +67675,67,0.17274,0 +67676,67,0.17706,0 +67677,67,0.18002,0 +67678,67,0.18157,0 +67679,67,0.18165,0 +67680,67,0.18026,0 +67681,67,0.17739,0 +67682,67,0.17322,0 +67683,67,0.16787,0 +67684,67,0.16152,0 +67685,67,0.15434,0 +67686,67,0.14654,0 +67687,67,0.13832,0 +67688,67,0.12992,0 +67689,67,0.12163,0 +67690,67,0.11377,0 +67691,67,0.10664,0 +67692,67,0.10057,0 +67693,67,0.096007,0 +67694,67,0.093168,0 +67695,67,0.092287,0 +67696,67,0.093546,0 +67697,67,0.097071,0 +67698,67,0.10295,0 +67699,67,0.11122,0 +67700,67,0.12183,0 +67701,67,0.1347,0 +67702,67,0.14969,0 +67703,67,0.16662,0 +67704,67,0.18531,0 +67705,67,0.20565,0 +67706,67,0.22733,0 +67707,67,0.25011,0 +67708,67,0.27374,0 +67709,67,0.29793,0 +67710,67,0.3224,0 +67711,67,0.34685,0 +67712,67,0.37098,0 +67713,67,0.3945,0 +67714,67,0.41712,0 +67715,67,0.43861,0 +67716,67,0.45876,0 +67717,67,0.47734,0 +67718,67,0.49417,0 +67719,67,0.50923,0 +67720,67,0.5225,0 +67721,67,0.53399,0 +67722,67,0.54373,0 +67723,67,0.55176,0 +67724,67,0.55813,0 +67725,67,0.5629,0 +67726,67,0.56611,0 +67727,67,0.56784,0 +67728,67,0.56818,0 +67729,67,0.56721,0 +67730,67,0.56495,0 +67731,67,0.5616,0 +67732,67,0.55725,0 +67733,67,0.552,0 +67734,67,0.54597,0 +67735,67,0.53924,0 +67736,67,0.53187,0 +67737,67,0.52393,0 +67738,67,0.51547,0 +67739,67,0.50651,0 +67740,67,0.49705,0 +67741,67,0.48706,0 +67742,67,0.47652,0 +67743,67,0.46546,0 +67744,67,0.45388,0 +67745,67,0.44176,0 +67746,67,0.42914,0 +67747,67,0.41603,0 +67748,67,0.40247,0 +67749,67,0.38851,0 +67750,67,0.37423,0 +67751,67,0.3597,0 +67752,67,0.34498,0 +67753,67,0.33016,0 +67754,67,0.31536,0 +67755,67,0.30075,0 +67756,67,0.28648,0 +67757,67,0.27272,0 +67758,67,0.25965,0 +67759,67,0.24747,0 +67760,67,0.23635,0 +67761,67,0.22648,0 +67762,67,0.21802,0 +67763,67,0.21117,0 +67764,67,0.20608,0 +67765,67,0.2029,0 +67766,67,0.20182,0 +67767,67,0.20277,0 +67768,67,0.20576,0 +67769,67,0.21076,0 +67770,67,0.21773,0 +67771,67,0.22665,0 +67772,67,0.23744,0 +67773,67,0.25,0 +67774,67,0.26414,0 +67775,67,0.27965,0 +67776,67,0.29633,0 +67777,67,0.31392,0 +67778,67,0.33221,0 +67779,67,0.35091,0 +67780,67,0.36977,0 +67781,67,0.38853,0 +67782,67,0.40695,0 +67783,67,0.42478,0 +67784,67,0.44182,0 +67785,67,0.45791,0 +67786,67,0.47295,0 +67787,67,0.48687,0 +67788,67,0.49964,0 +67789,67,0.51124,0 +67790,67,0.52156,0 +67791,67,0.53059,0 +67792,67,0.53835,0 +67793,67,0.54487,0 +67794,67,0.55022,0 +67795,67,0.55445,0 +67796,67,0.55763,0 +67797,67,0.55984,0 +67798,67,0.56117,0 +67799,67,0.56167,0 +67800,67,0.56145,0 +67801,67,0.5606,0 +67802,67,0.55923,0 +67803,67,0.55742,0 +67804,67,0.55528,0 +67805,67,0.55284,0 +67806,67,0.55012,0 +67807,67,0.54711,0 +67808,67,0.54379,0 +67809,67,0.54015,0 +67810,67,0.53622,0 +67811,67,0.53202,0 +67812,67,0.52759,0 +67813,67,0.52298,0 +67814,67,0.51821,0 +67815,67,0.51335,0 +67816,67,0.50846,0 +67817,67,0.50359,0 +67818,67,0.49883,0 +67819,67,0.49426,0 +67820,67,0.4899,0 +67821,67,0.48581,0 +67822,67,0.48199,0 +67823,67,0.47844,0 +67824,67,0.47515,0 +67825,67,0.47211,0 +67826,67,0.46935,0 +67827,67,0.46688,0 +67828,67,0.46472,0 +67829,67,0.4628,0 +67830,67,0.46109,0 +67831,67,0.45954,0 +67832,67,0.45807,0 +67833,67,0.45661,0 +67834,67,0.45509,0 +67835,67,0.45341,0 +67836,67,0.45152,0 +67837,67,0.44932,0 +67838,67,0.44675,0 +67839,67,0.44373,0 +67840,67,0.44026,0 +67841,67,0.43628,0 +67842,67,0.43183,0 +67843,67,0.42696,0 +67844,67,0.42168,0 +67845,67,0.41605,0 +67846,67,0.4101,0 +67847,67,0.40386,0 +67848,67,0.39736,0 +67849,67,0.39069,0 +67850,67,0.38392,0 +67851,67,0.37711,0 +67852,67,0.37034,0 +67853,67,0.3637,0 +67854,67,0.35729,0 +67855,67,0.35116,0 +67856,67,0.34535,0 +67857,67,0.33995,0 +67858,67,0.33499,0 +67859,67,0.33049,0 +67860,67,0.32645,0 +67861,67,0.32285,0 +67862,67,0.31966,0 +67863,67,0.31686,0 +67864,67,0.3144,0 +67865,67,0.31223,0 +67866,67,0.31038,0 +67867,67,0.30881,0 +67868,67,0.3075,0 +67869,67,0.30641,0 +67870,67,0.30549,0 +67871,67,0.30472,0 +67872,67,0.30405,0 +67873,67,0.30342,0 +67874,67,0.30282,0 +67875,67,0.30221,0 +67876,67,0.30157,0 +67877,67,0.30084,0 +67878,67,0.30001,0 +67879,67,0.29908,0 +67880,67,0.29809,0 +67881,67,0.29707,0 +67882,67,0.29606,0 +67883,67,0.29513,0 +67884,67,0.29434,0 +67885,67,0.29375,0 +67886,67,0.29339,0 +67887,67,0.29331,0 +67888,67,0.29356,0 +67889,67,0.2942,0 +67890,67,0.29531,0 +67891,67,0.29695,0 +67892,67,0.29917,0 +67893,67,0.30198,0 +67894,67,0.30539,0 +67895,67,0.30939,0 +67896,67,0.31401,0 +67897,67,0.31921,0 +67898,67,0.32493,0 +67899,67,0.33109,0 +67900,67,0.33758,0 +67901,67,0.3443,0 +67902,67,0.35112,0 +67903,67,0.35788,0 +67904,67,0.36441,0 +67905,67,0.37059,0 +67906,67,0.37626,0 +67907,67,0.3813,0 +67908,67,0.38559,0 +67909,67,0.38899,0 +67910,67,0.39141,0 +67911,67,0.39275,0 +67912,67,0.39294,0 +67913,67,0.39195,0 +67914,67,0.38977,0 +67915,67,0.38641,0 +67916,67,0.38191,0 +67917,67,0.3763,0 +67918,67,0.3698,0 +67919,67,0.36257,0 +67920,67,0.35475,0 +67921,67,0.34653,0 +67922,67,0.3381,0 +67923,67,0.32967,0 +67924,67,0.32141,0 +67925,67,0.31353,0 +67926,67,0.30622,0 +67927,67,0.29961,0 +67928,67,0.29386,0 +67929,67,0.28909,0 +67930,67,0.28547,0 +67931,67,0.28307,0 +67932,67,0.28192,0 +67933,67,0.28207,0 +67934,67,0.28352,0 +67935,67,0.28626,0 +67936,67,0.29021,0 +67937,67,0.29527,0 +67938,67,0.30133,0 +67939,67,0.30826,0 +67940,67,0.31593,0 +67941,67,0.32419,0 +67942,67,0.33288,0 +67943,67,0.34188,0 +67944,67,0.35102,0 +67945,67,0.36016,0 +67946,67,0.36915,0 +67947,67,0.37788,0 +67948,67,0.38626,0 +67949,67,0.39417,0 +67950,89,0.48,0 +67980,89,0.26,0 +68030,89,0.2,0 +68100,89,0,0 +68130,89,-0.12,0 +68180,89,-0.38,0 +68230,89,-0.62,0 +68250,89,-0.7,0 +68430,89,-0.76,0 +68450,89,-1.04,0 +68500,89,-1.18,0 +68520,89,-1.44,0 +68580,89,-1.7,0 +68650,89,-1.62,0 +68700,89,-1.32,0 +68720,89,-0.7,0 +68770,89,-0.42,0 +68800,89,-0.02,0 +68840,89,0.06,0 +68870,89,0.14,0 +68900,89,0.18,0 +68920,89,0.14,0 +68950,89,0.1,0 +68970,89,0.06,0 +69000,89,0,0 +69760,89,-0.02,0 +69790,89,-0.06,0 +69810,89,-0.1,0 +69840,89,-0.12,0 +69860,89,-0.16,0 +69880,89,-0.18,0 +69940,89,-0.08,0 +69960,89,0.04,0 +69980,89,0.14,0 +70010,89,0.3,0 +70030,89,0.52,0 +70050,89,0.7,0 +70080,89,0.9,0 +70110,89,1.14,0 +70130,89,1.36,0 +70160,89,1.6,0 +70180,89,1.84,0 +70200,89,1.94,0 +70230,89,1.98,0 +70260,89,2.04,0 +70280,89,2.08,0 +70300,89,1.98,0 +70330,89,1.88,0 +70360,89,1.78,0 +70380,89,1.66,0 +70400,89,1.48,0 +70430,89,1.3,0 +70450,89,1.14,0 +70480,89,0.96,0 +70500,89,0.78,0 +70520,89,0.62,0 +70550,89,0.48,0 +70580,89,0.32,0 +70600,89,0.16,0 +70630,89,0.02,0 +70650,89,-0.14,0 +70680,89,-0.3,0 +70700,89,-0.44,0 +70730,89,-0.6,0 +70750,89,-0.76,0 +70770,89,-0.92,0 +70800,89,-1.08,0 +70830,89,-1.24,0 +70850,89,-1.42,0 +70880,89,-1.58,0 +70900,89,-1.74,0 +70930,89,-1.9,0 +70950,89,-1.96,0 +70980,89,-2.02,0 +71000,89,-2.1,0 +71020,89,-2.08,0 +71050,89,-2.02,0 +71080,89,-1.96,0 +71100,89,-1.92,0 +71130,89,-1.74,0 +71150,89,-1.56,0 +71180,89,-1.36,0 +71200,89,-1.18,0 +71230,89,-0.98,0 +71250,89,-0.7,0 +71270,89,-0.36,0 +71300,89,-0.2,0 +71330,89,-0.16,0 +71350,89,-0.12,0 +71380,89,-0.08,0 +71400,89,-0.04,0 +71430,89,-0.02,0 +71450,89,0,0 +72120,89,0.04,0 +72140,89,0.08,0 +72160,89,0.1,0 +72190,89,0.14,0 +72220,89,0.16,0 +72240,89,0.2,0 +72270,89,0.32,0 +72290,89,0.42,0 +72320,89,0.52,0 +72340,89,0.62,0 +72370,89,0.74,0 +72390,89,0.86,0 +72410,89,0.98,0 +72440,89,1.08,0 +72470,89,1.18,0 +72480,89,1.4,0 +72510,89,1.42,0 +72540,89,1.46,0 +72560,89,1.5,0 +72590,89,1.52,0 +72610,89,1.56,0 +72630,89,1.6,0 +72660,89,1.44,0 +72690,89,1.28,0 +72710,89,1.14,0 +72730,89,1,0 +72760,89,0.82,0 +72790,89,0.66,0 +72810,89,0.5,0 +72840,89,0.34,0 +72860,89,0.18,0 +72880,89,0.02,0 +72910,89,0,0 +72930,89,-0.18,0 +72950,89,-0.4,0 +72980,89,-0.58,0 +73010,89,-0.76,0 +73030,89,-0.92,0 +73050,89,-1.08,0 +73080,89,-1.2,0 +73110,89,-1.28,0 +73130,89,-1.42,0 +73160,89,-1.58,0 +73180,89,-1.6,0 +73200,89,-1.5,0 +73230,89,-1.4,0 +73260,89,-1.3,0 +73280,89,-1.2,0 +73300,89,-1.08,0 +73330,89,-0.98,0 +73360,89,-0.88,0 +73380,89,-0.78,0 +73410,89,-0.66,0 +73430,89,-0.52,0 +73450,89,-0.38,0 +73480,89,-0.26,0 +73510,89,-0.12,0 +73530,89,0,0 +73550,89,0.1,0 +73580,89,0.18,0 +73600,89,0.26,0 +73630,89,0.36,0 +73650,89,0.44,0 +73680,89,0.5,0 +74050,89,0.52,0 +74070,89,0.56,0 +74090,89,0.58,0 +74120,89,0.62,0 +74150,89,0.66,0 +74170,89,0.7,0 +74300,89,0.74,0 +74320,89,0.88,0 +74340,89,1,0 +74370,89,1.14,0 +74390,89,1.26,0 +74410,89,1.38,0 +74440,89,1.4,0 +74520,89,1.52,0 +74540,89,1.6,0 +74570,89,1.62,0 +74590,89,1.66,0 +74620,89,1.68,0 +74640,89,1.46,0 +74660,89,1.26,0 +74690,89,1.02,0 +74710,89,0.78,0 +74730,89,0.56,0 +74760,89,0.42,0 +74790,89,0.32,0 +74800,89,0.2,0 +74830,89,0.02,0 +74860,89,-0.16,0 +74880,89,-0.3,0 +74900,89,-0.44,0 +74930,84,-0.62,0 +74950,84,-0.8,0 +74970,86,-0.96,0 +75000,86,-1.16,0 +75020,86,-1.34,0 +75050,86,-1.56,0 +75070,86,-1.78,0 +75090,86,-1.96,0 +75120,86,-2.06,0 +75160,86,-1.94,0 +75190,86,-1.82,0 +75210,86,-1.68,0 +75230,86,-1.54,0 +75260,86,-1.42,0 +75280,86,-1.28,0 +75300,86,-1.14,0 +75330,86,-1,0 +75350,86,-0.88,0 +75380,86,-0.76,0 +75400,86,-0.64,0 +75430,86,-0.52,0 +75450,86,-0.42,0 +75470,86,-0.3,0 +75500,86,-0.24,0 +75520,86,-0.16,0 +75540,86,-0.1,0 +75570,86,-0.02,0 +75590,86,0,0 +75610,84,0,0 +77850,84,0.02,0 +77870,84,0.08,0 +77900,84,0.12,0 +77920,84,0.16,0 +77940,84,0.22,0 +77970,84,0.28,0 +77990,84,0.34,0 +78010,84,0.42,0 +78040,84,0.48,0 +78060,84,0.56,0 +78080,84,0.66,0 +78110,84,0.76,0 +78130,84,0.84,0 +78150,84,0.9,0 +78180,84,0.94,0 +78200,84,0.98,0 +78220,84,1.04,0 +78250,84,1.14,0 +78270,84,1.2,0 +78340,84,1.3,0 +78360,84,1.42,0 +78380,84,1.54,0 +78410,84,1.6,0 +78430,86,1.64,0 +78450,86,1.68,0 +78480,86,1.7,0 +78550,86,1.68,0 +78570,86,1.64,0 +78590,86,1.6,0 +78620,86,1.46,0 +78640,86,1.26,0 +78660,86,1.06,0 +78690,86,0.84,0 +78710,86,0.66,0 +78730,86,0.56,0 +78760,86,0.5,0 +78780,86,0.42,0 +78800,86,0.26,0 +78830,86,0,0 +78850,86,-0.28,0 +78880,86,-0.4,0 +78900,86,-0.5,0 +78920,86,-0.64,0 +78950,86,-0.76,0 +78970,86,-0.9,0 +78990,86,-1.06,0 +79020,86,-1.16,0 +79040,86,-1.34,0 +79060,86,-1.54,0 +79090,86,-1.64,0 +79110,86,-1.68,0 +79130,86,-1.7,0 +79200,86,-1.68,0 +79230,86,-1.64,0 +79250,86,-1.6,0 +79270,86,-1.5,0 +79300,86,-1.42,0 +79320,86,-1.28,0 +79340,86,-1.12,0 +79370,86,-1,0 +79400,86,-0.96,0 +79410,86,-0.92,0 +79440,86,-0.9,0 +79560,86,-0.82,0 +79580,86,-0.74,0 +79610,86,-0.62,0 +79630,86,-0.46,0 +79650,86,-0.32,0 +79680,86,-0.18,0 +79700,84,-0.02,0 +79720,84,0,0 +79750,89,0,0 +81230,89,0.02,0 +81260,89,0.04,0 +81290,89,0.06,0 +81340,89,0.08,0 +81360,89,0.1,0 +81380,89,0.12,0 +81410,89,0.14,0 +81440,89,0.16,0 +81480,89,0.18,0 +81510,89,0.24,0 +81540,89,0.3,0 +81550,89,0.38,0 +81580,89,0.46,0 +81610,89,0.52,0 +81630,89,0.6,0 +81660,89,0.68,0 +81680,89,0.76,0 +81700,89,0.82,0 +81730,89,0.9,0 +81760,89,0.98,0 +81780,89,1.08,0 +81800,89,1.16,0 +81830,89,1.22,0 +81860,89,1.3,0 +81880,89,1.36,0 +81910,89,1.42,0 +81930,89,1.48,0 +81950,89,1.56,0 +81980,89,1.6,0 +82250,89,1.62,0 +82300,89,1.64,0 +82330,89,1.66,0 +82340,89,1.68,0 +82370,89,1.7,0 +82750,89,1.68,0 +82770,89,1.66,0 +82790,89,1.64,0 +82820,89,1.6,0 +82910,89,1.56,0 +82940,89,1.52,0 +82970,89,1.46,0 +82990,89,1.42,0 +83020,89,1.34,0 +83040,89,1.26,0 +83070,89,1.18,0 +83090,89,1.12,0 +83120,89,1.08,0 +83140,89,1.02,0 +83160,89,0.96,0 +83190,89,0.92,0 +83220,89,0.88,0 +83240,89,0.82,0 +83260,89,0.78,0 +83290,89,0.74,0 +83310,89,0.7,0 +83340,89,0.66,0 +83360,89,0.6,0 +83380,89,0.56,0 +83410,89,0.52,0 +83440,89,0.48,0 +83460,89,0.46,0 +83480,89,0.42,0 +83510,89,0.4,0 +83540,89,0.36,0 +83560,89,0.34,0 +83590,89,0.3,0 +83610,89,0.28,0 +83630,89,0.26,0 +83690,89,0.24,0 +83710,89,0.22,0 +83760,89,0.2,0 +83880,89,0.16,0 +83910,89,0.12,0 +83930,84,-0.37957,0 +83950,84,-0.40451,0 +83970,84,-0.42607,0 +84000,84,-0.44416,0 +84020,84,-0.4588,0 +84040,84,-0.46977,0 +84070,84,-0.47697,0 +84090,84,-0.48106,0 +84110,84,-0.48267,0 +84140,84,-0.48246,0 +84160,84,-0.48135,0 +84190,84,-0.47961,0 +84210,84,-0.47748,0 +84230,84,-0.47544,0 +84260,84,-0.47438,0 +84280,84,-0.47449,0 +84300,84,-0.47568,0 +84330,84,-0.47811,0 +84350,84,-0.48169,0 +84370,84,-0.48616,0 +84390,84,-0.4911,0 +84420,84,-0.49569,0 +84440,84,-0.49918,0 +84460,84,-0.50047,0 +84490,84,-0.49893,0 +84510,84,-0.49445,0 +84540,84,-0.48696,0 +84560,84,-0.47558,0 +84580,84,-0.45986,0 +84610,84,-0.43984,0 +84630,84,-0.41562,0 +84650,84,-0.3873,0 +84680,84,-0.35559,0 +84700,84,-0.32096,0 +84720,84,-0.28477,0 +84750,84,-0.24822,0 +84770,84,-0.21304,0 +84790,84,-0.18031,0 +84820,84,-0.15093,0 +84840,84,-0.12529,0 +84860,84,-0.10385,0 +84890,84,-0.086786,0 +84910,84,-0.073923,0 +84930,84,-0.064502,0 +84950,84,-0.05846,0 +84980,84,-0.055196,0 +85000,84,-0.054657,0 +85020,84,-0.05621,0 +85050,84,-0.059253,0 +85070,84,-0.062139,0 +85090,84,-0.064203,0 +85120,84,-0.064408,0 +85140,84,-0.061705,0 +85160,84,-0.055593,0 +85190,84,-0.045834,0 +85210,84,-0.032557,0 +85230,84,-0.016781,0 +85260,84,0.0013414,0 +85280,84,0.02115,0 +85300,84,0.042381,0 +85330,84,0.064875,0 +85350,84,0.088413,0 +85370,84,0.11195,0 +85400,84,0.13509,0 +85420,84,0.15683,0 +85440,84,0.17604,0 +85470,84,0.1916,0 +85490,84,0.20232,0 +85510,84,0.20783,0 +85540,84,0.20856,0 +85560,84,0.20456,0 +85580,84,0.19654,0 +85610,84,0.18536,0 +85630,84,0.17171,0 +85650,84,0.15623,0 +85680,84,0.13913,0 +85700,84,0.12022,0 +85720,84,0.099975,0 +85750,84,0.078231,0 +85770,84,0.055219,0 +85790,84,0.031704,0 +85820,84,0.0078677,0 +85840,84,-0.016185,0 +85860,84,-0.040142,0 +85890,84,-0.064089,0 +85910,84,-0.08849,0 +85930,84,-0.11363,0 +85960,84,-0.13989,0 +85980,84,-0.16651,0 +86000,84,-0.1923,0 +86030,84,-0.21678,0 +86050,84,-0.23839,0 +86070,84,-0.25605,0 +86100,84,-0.26903,0 +86120,84,-0.27725,0 +86140,84,-0.28084,0 +86170,84,-0.28032,0 +86190,84,-0.27603,0 +86210,84,-0.268,0 +86240,84,-0.25637,0 +86260,84,-0.2411,0 +86280,84,-0.22283,0 +86310,84,-0.20268,0 +86330,84,-0.18095,0 +86350,84,-0.15887,0 +86380,84,-0.13703,0 +86400,84,-0.11676,0 +86420,84,-0.097584,0 +86450,84,-0.079252,0 +86470,84,-0.061873,0 +86490,84,-0.045559,0 +86520,84,-0.030293,0 +86540,84,-0.016518,0 +86560,84,-0.004676,0 +86590,84,0.0048578,0 +86610,84,0.012447,0 +86630,84,0.017897,0 +86660,84,0.021469,0 +86680,84,0.023104,0 +86700,84,0.024062,0 +86730,84,0.024061,0 +86750,84,0.022689,0 +86770,84,0.02123,0 +86800,84,0.020504,0 +86820,84,0.020535,0 +86840,84,0.021514,0 +86870,84,0.02334,0 +86890,84,0.026406,0 +86910,84,0.030473,0 +86940,84,0.035146,0 +86960,84,0.040326,0 +86980,84,0.04598,0 +87010,84,0.051439,0 +87030,84,0.056561,0 +87050,84,0.061935,0 +87080,84,0.06603,0 +87100,84,0.068095,0 +87120,84,0.068072,0 +87150,84,0.066216,0 +87170,84,0.063729,0 +87190,84,0.060568,0 +87220,84,0.057095,0 +87240,84,0.054216,0 +87260,84,0.052053,0 +87290,84,0.050509,0 +87310,84,0.049079,0 +87330,84,0.047395,0 +87360,84,0.044847,0 +87380,84,0.042853,0 +87400,84,0.042237,0 +87430,84,0.043582,0 +87450,84,0.047676,0 +87470,84,0.054144,0 +87500,84,0.06377,0 +87520,84,0.076863,0 +87540,84,0.093359,0 +87570,84,0.11362,0 +87590,84,0.13809,0 +87610,84,0.16844,0 +87640,84,0.20575,0 +87660,84,0.25113,0 +87680,84,0.30404,0 +87710,84,0.36395,0 +87730,84,0.43027,0 +87750,84,0.50168,0 +87780,84,0.57693,0 +87800,84,0.65443,0 +87820,84,0.73247,0 +87850,84,0.8094,0 +87870,84,0.88367,0 +87890,84,0.95403,0 +87920,84,1.0177,0 +87940,84,1.0727,0 +87960,84,1.1165,0 +87990,84,1.1469,0 +88010,84,1.1623,0 +88030,84,1.1615,0 +88060,84,1.144,0 +88080,84,1.1102,0 +88100,84,1.0606,0 +88120,84,0.99671,0 +88150,84,0.92,0 +88170,84,0.83194,0 +88190,84,0.73348,0 +88220,84,0.62668,0 +88240,84,0.51226,0 +88260,84,0.39188,0 +88290,84,0.26743,0 +88310,84,0.14053,0 +88330,84,0.012361,0 +88360,84,-0.11518,0 +88380,84,-0.24075,0 +88400,84,-0.36267,0 +88430,84,-0.47997,0 +88450,84,-0.59163,0 +88470,84,-0.69643,0 +88500,84,-0.7925,0 +88520,84,-0.87845,0 +88540,84,-0.9521,0 +88570,84,-1.0112,0 +88590,84,-1.0541,0 +88610,84,-1.0791,0 +88640,84,-1.0851,0 +88660,84,-1.0719,0 +88690,84,-1.0399,0 +88710,84,-0.99022,0 +88730,84,-0.92423,0 +88760,84,-0.84394,0 +88780,84,-0.75177,0 +88800,84,-0.65079,0 +88830,84,-0.54397,0 +88850,84,-0.43426,0 +88870,84,-0.32495,0 +88900,84,-0.21904,0 +88920,84,-0.11947,0 +88940,84,-0.027815,0 +88970,84,0.05399,0 +88990,84,0.12505,0 +89010,84,0.18472,0 +89040,84,0.23294,0 +89060,84,0.27039,0 +89080,84,0.29797,0 +89110,84,0.31695,0 +89130,84,0.32872,0 +89150,84,0.33479,0 +89180,84,0.33661,0 +89200,84,0.3356,0 +89220,84,0.3332,0 +89250,84,0.32915,0 +89270,84,0.32402,0 +89290,84,0.31755,0 +89320,84,0.30961,0 +89340,84,0.30014,0 +89360,84,0.28856,0 +89390,84,0.27481,0 +89410,84,0.25871,0 +89430,84,0.24016,0 +89460,84,0.21871,0 +89480,84,0.1943,0 +89500,84,0.16687,0 +89530,84,0.13637,0 +89550,84,0.10368,0 +89570,84,0.069778,0 +89590,84,0.035705,0 +89620,84,0.0026016,0 +89640,84,-0.028769,0 +89670,84,-0.057243,0 +89690,84,-0.082619,0 +89710,84,-0.10455,0 +89740,84,-0.12326,0 +89760,84,-0.13858,0 +89780,84,-0.15108,0 +89810,84,-0.16107,0 +89830,84,-0.16818,0 +89850,84,-0.1721,0 +89880,84,-0.1727,0 +89900,84,-0.16941,0 +89920,84,-0.16196,0 +89950,84,-0.14994,0 +89970,84,-0.13327,0 +89990,84,-0.11185,0 +90020,84,-0.085767,0 +90040,84,-0.054289,0 +90060,84,-0.017456,0 +90090,84,0.026242,0 +90110,84,0.077914,0 +90130,84,0.13771,0 +90160,84,0.20538,0 +90180,84,0.28042,0 +90200,84,0.36149,0 +90230,84,0.44713,0 +90250,84,0.53583,0 +90270,84,0.62582,0 +90300,84,0.71674,0 +90320,84,0.8081,0 +90340,84,0.89856,0 +90370,84,0.98766,0 +90390,84,1.0732,0 +90410,84,1.1531,0 +90430,84,1.2254,0 +90460,84,1.2885,0 +90480,84,1.3413,0 +90500,84,1.3835,0 +90530,84,1.4153,0 +90550,84,1.4373,0 +90570,84,1.4512,0 +90600,84,1.4569,0 +90620,84,1.455,0 +90640,84,1.4465,0 +90670,84,1.4324,0 +90690,84,1.4142,0 +90710,84,1.3938,0 +90740,84,1.3722,0 +90760,84,1.3505,0 +90780,84,1.3289,0 +90810,84,1.3065,0 +90830,84,1.2825,0 +90850,85,1.2559,0 +90880,85,1.2252,0 +90900,85,1.1896,0 +90920,85,1.1485,0 +90940,85,1.1011,0 +90970,85,1.0463,0 +90990,85,0.98294,0 +91010,85,0.90986,0 +91040,85,0.82643,0 +91060,85,0.73231,0 +91080,85,0.62772,0 +91110,85,0.51456,0 +91130,85,0.39433,0 +91150,85,0.2684,0 +91180,85,0.13784,0 +91200,85,0.0037345,0 +91220,85,-0.13295,0 +91250,85,-0.27134,0 +91270,85,-0.4104,0 +91290,85,-0.54895,0 +91320,85,-0.68608,0 +91340,85,-0.82047,0 +91360,85,-0.95027,0 +91390,85,-1.0735,0 +91410,85,-1.1894,0 +91430,85,-1.2974,0 +91460,85,-1.3967,0 +91480,85,-1.4865,0 +91500,85,-1.5655,0 +91530,85,-1.6327,0 +91550,85,-1.688,0 +91580,85,-1.7313,0 +91600,85,-1.7622,0 +91620,85,-1.7791,0 +91650,85,-1.781,0 +91670,85,-1.7677,0 +91690,85,-1.7394,0 +91720,85,-1.6966,0 +91740,85,-1.6393,0 +91770,85,-1.5677,0 +91790,85,-1.4827,0 +91810,85,-1.3863,0 +91840,85,-1.2808,0 +91860,85,-1.1673,0 +91880,85,-1.0475,0 +91910,85,-0.92327,0 +91930,85,-0.79797,0 +91960,85,-0.67491,0 +91980,85,-0.55705,0 +92000,85,-0.44665,0 +92030,85,-0.34512,0 +92050,85,-0.25445,0 +92070,85,-0.17564,0 +92100,85,-0.10985,0 +92120,85,-0.056173,0 +92140,83,-0.014239,0 +92170,83,0.016652,0 +92190,84,0.037693,0 +92210,84,0.050037,0 +92240,84,0.055658,0 +92260,84,0.056401,0 +92280,84,0.054426,0 +92310,84,0.050446,0 +92330,84,0.045455,0 +92350,84,0.040236,0 +92380,84,0.035133,0 +92400,84,0.030497,0 +92420,84,0.02583,0 +92450,84,0.022731,0 +92470,84,0.021351,0 +92490,84,0.02217,0 +92520,84,0.025694,0 +92540,84,0.032283,0 +92560,84,0.042538,0 +92590,84,0.056688,0 +92610,84,0.075552,0 +92630,84,0.099726,0 +92660,84,0.13005,0 +92680,84,0.16727,0 +92700,84,0.2134,0 +92730,84,0.27027,0 +92750,84,0.33741,0 +92770,84,0.41505,0 +92800,84,0.50265,0 +92820,84,0.59943,0 +92840,84,0.70386,0 +92860,84,0.81451,0 +92890,84,0.92931,0 +92910,84,1.0465,0 +92930,84,1.1639,0 +92960,84,1.2799,0 +92980,84,1.3932,0 +93000,84,1.501,0 +93030,84,1.6002,0 +93050,84,1.6888,0 +93070,84,1.765,0 +93100,84,1.8273,0 +93120,84,1.8745,0 +93140,85,1.907,0 +93170,85,1.9245,0 +93190,85,1.9279,0 +93210,85,1.9179,0 +93230,85,1.8959,0 +93260,85,1.8628,0 +93280,85,1.8189,0 +93300,85,1.7642,0 +93330,85,1.6992,0 +93350,85,1.6249,0 +93370,85,1.5417,0 +93400,85,1.4507,0 +93420,85,1.3533,0 +93440,85,1.2493,0 +93470,85,1.1395,0 +93490,85,1.025,0 +93510,85,0.90598,0 +93540,85,0.7825,0 +93560,85,0.65428,0 +93580,85,0.52068,0 +93600,85,0.38343,0 +93630,85,0.2436,0 +93650,85,0.1022,0 +93670,85,-0.039459,0 +93700,85,-0.18076,0 +93720,85,-0.32114,0 +93750,85,-0.45837,0 +93770,85,-0.59054,0 +93790,85,-0.71662,0 +93820,85,-0.83476,0 +93840,85,-0.94295,0 +93860,85,-1.0392,0 +93890,85,-1.1202,0 +93910,85,-1.1849,0 +93930,85,-1.2325,0 +93960,85,-1.2627,0 +93980,85,-1.2754,0 +94000,85,-1.2701,0 +94030,85,-1.2467,0 +94050,85,-1.207,0 +94070,84,-1.1535,0 +94100,84,-1.0882,0 +94120,84,-1.0137,0 +94140,84,-0.93268,0 +94170,84,-0.84772,0 +94190,84,-0.76181,0 +94210,84,-0.67646,0 +94240,84,-0.59282,0 +94260,84,-0.51177,0 +94280,84,-0.43369,0 +94310,84,-0.3603,0 +94330,84,-0.29303,0 +94350,84,-0.23269,0 +94380,84,-0.17936,0 +94400,84,-0.13293,0 +94420,84,-0.093444,0 +94450,84,-0.060564,0 +94470,84,-0.033328,0 +94490,84,-0.01086,0 +94520,84,0.006954,0 +94540,84,0.019961,0 +94560,84,0.028423,0 +94590,84,0.032246,0 +94610,84,0.032371,0 +94630,84,0.029863,0 +94660,84,0.025801,0 +94680,84,0.020969,0 +94700,84,0.015705,0 +94730,84,0.010369,0 +94750,84,0.0050311,0 +94770,84,-0.0011439,0 +94800,84,-0.0088387,0 +94820,84,-0.019031,0 +94840,84,-0.031527,0 +94870,84,-0.046693,0 +94890,84,-0.064539,0 +94910,84,-0.085508,0 +94940,84,-0.10969,0 +94960,84,-0.13695,0 +94980,84,-0.16712,0 +95010,84,-0.20013,0 +95030,84,-0.23494,0 +95050,84,-0.27041,0 +95080,84,-0.30536,0 +95100,84,-0.33871,0 +95120,84,-0.36856,0 +95150,84,-0.39485,0 +95170,84,-0.41701,0 +95200,84,-0.435,0 +95220,84,-0.44844,0 +95240,84,-0.4577,0 +95270,84,-0.4633,0 +95290,84,-0.46567,0 +95310,84,-0.46454,0 +95340,84,-0.46076,0 +95360,84,-0.45515,0 +95380,84,-0.44829,0 +95410,84,-0.44074,0 +95430,84,-0.43362,0 +95450,84,-0.42643,0 +95480,84,-0.41977,0 +95500,84,-0.41365,0 +95520,84,-0.40835,0 +95550,84,-0.40365,0 +95570,84,-0.39972,0 +95590,84,-0.39629,0 +95620,84,-0.39349,0 +95640,84,-0.39069,0 +95660,84,-0.38706,0 +95690,84,-0.38192,0 +95710,84,-0.37436,0 +95730,84,-0.36341,0 +95760,84,-0.34933,0 +95780,84,-0.33155,0 +95800,84,-0.30993,0 +95830,84,-0.28445,0 +95850,84,-0.25553,0 +95870,84,-0.22235,0 +95900,84,-0.18518,0 +95920,84,-0.14435,0 +95940,84,-0.10077,0 +95970,84,-0.055705,0 +95990,84,-0.010355,0 +96010,84,0.033677,0 +96040,84,0.074959,0 +96060,84,0.11263,0 +96080,84,0.14601,0 +96110,84,0.17502,0 +96130,84,0.20003,0 +96150,84,0.22191,0 +96180,84,0.24029,0 +96200,84,0.2553,0 +96220,84,0.26701,0 +96250,84,0.27592,0 +96270,84,0.28222,0 +96290,84,0.28599,0 +96320,84,0.28798,0 +96340,84,0.2886,0 +96360,84,0.28825,0 +96390,84,0.28722,0 +96410,84,0.28534,0 +96430,84,0.28176,0 +96460,84,0.27582,0 +96480,84,0.26711,0 +96500,84,0.25564,0 +96530,84,0.24161,0 +96550,84,0.22476,0 +96570,84,0.20577,0 +96600,84,0.18574,0 +96620,84,0.16448,0 +96640,84,0.14237,0 +96670,84,0.1197,0 +96690,84,0.096475,0 +96710,84,0.072728,0 +96740,84,0.049498,0 +96760,84,0.027337,0 +96780,84,0.0070074,0 +96810,84,-0.011107,0 +96830,84,-0.026421,0 +96850,84,-0.038036,0 +96880,84,-0.045988,0 +96900,84,-0.051083,0 +96920,84,-0.05314,0 +96950,84,-0.0522,0 +96970,84,-0.048215,0 +96990,84,-0.040774,0 +97020,84,-0.029467,0 +97040,84,-0.014904,0 +97060,84,0.0027608,0 +97090,84,0.0233,0 +97110,84,0.046466,0 +97130,84,0.071367,0 +97160,84,0.096834,0 +97180,84,0.12227,0 +97200,84,0.14733,0 +97230,84,0.17207,0 +97250,84,0.1962,0 +97270,84,0.21954,0 +97300,84,0.24118,0 +97320,84,0.26057,0 +97340,84,0.27766,0 +97370,84,0.29205,0 +97390,84,0.3031,0 +97410,84,0.31042,0 +97430,84,0.31404,0 +97460,84,0.31455,0 +97480,84,0.31228,0 +97500,84,0.30795,0 +97530,84,0.30188,0 +97550,84,0.29468,0 +97570,84,0.28679,0 +97600,84,0.27916,0 +97620,84,0.27221,0 +97640,84,0.2663,0 +97670,84,0.26169,0 +97690,84,0.25892,0 +97710,84,0.25816,0 +97740,84,0.25984,0 +97760,84,0.26325,0 +97780,84,0.26821,0 +97810,84,0.27477,0 +97830,84,0.28236,0 +97850,84,0.29044,0 +97880,84,0.2983,0 +97900,84,0.30548,0 +97920,84,0.31186,0 +97950,84,0.31718,0 +97970,84,0.32153,0 +97990,84,0.32499,0 +98020,84,0.32758,0 +98040,84,0.32884,0 +98060,84,0.32953,0 +98090,84,0.3298,0 +98110,84,0.32933,0 +98130,84,0.32827,0 +98160,84,0.32667,0 +98180,84,0.32488,0 +98200,84,0.32264,0 +98230,84,0.31917,0 +98250,84,0.31385,0 +98270,84,0.30579,0 +98300,84,0.29359,0 +98320,84,0.27682,0 +98340,84,0.25503,0 +98370,84,0.22776,0 +98390,84,0.19492,0 +98410,84,0.15634,0 +98440,84,0.11215,0 +98460,84,0.062261,0 +98480,84,0.006712,0 +98510,84,-0.054318,0 +98530,84,-0.11953,0 +98550,84,-0.18763,0 +98580,84,-0.25714,0 +98600,84,-0.32523,0 +98620,84,-0.38997,0 +98650,84,-0.44861,0 +98670,84,-0.49923,0 +98700,84,-0.54006,0 +98720,84,-0.56937,0 +98740,84,-0.58616,0 +98770,84,-0.58968,0 +98790,84,-0.57952,0 +98810,84,-0.55477,0 +98840,84,-0.51577,0 +98860,84,-0.4631,0 +98880,84,-0.39704,0 +98910,84,-0.31937,0 +98930,84,-0.23194,0 +98950,84,-0.13747,0 +98980,84,-0.038485,0 +99000,84,0.062017,0 +99020,84,0.1612,0 +99050,84,0.25637,0 +99070,84,0.3463,0 +99090,84,0.42972,0 +99120,84,0.50472,0 +99140,84,0.57025,0 +99160,84,0.62509,0 +99180,84,0.66711,0 +99210,84,0.69487,0 +99230,84,0.70727,0 +99250,84,0.70336,0 +99280,84,0.68267,0 +99300,84,0.64569,0 +99320,84,0.59339,0 +99350,84,0.52792,0 +99370,84,0.44967,0 +99390,84,0.36,0 +99420,84,0.26089,0 +99440,84,0.15345,0 +99460,84,0.03992,0 +99490,84,-0.076685,0 +99510,84,-0.19366,0 +99530,84,-0.30803,0 +99560,84,-0.41639,0 +99580,84,-0.51552,0 +99600,84,-0.60268,0 +99630,84,-0.67576,0 +99650,84,-0.73382,0 +99670,84,-0.77485,0 +99692,84,-0.770956281,0 +99693,84,-0.767062563,0 +99694,84,-0.763168844,0 +99695,84,-0.759275126,0 +99696,84,-0.755381407,0 +99697,84,-0.751487688,0 +99698,84,-0.74759397,0 +99699,84,-0.743700251,0 +99700,84,-0.739806533,0 +99701,84,-0.735912814,0 +99702,84,-0.732019095,0 +99703,84,-0.728125377,0 +99704,84,-0.724231658,0 +99705,84,-0.72033794,0 +99706,84,-0.716444221,0 +99707,84,-0.712550503,0 +99708,84,-0.708656784,0 +99709,84,-0.704763065,0 +99710,84,-0.700869347,0 +99711,84,-0.696975628,0 +99712,84,-0.69308191,0 +99713,84,-0.689188191,0 +99714,84,-0.685294472,0 +99715,84,-0.681400754,0 +99716,84,-0.677507035,0 +99717,84,-0.673613317,0 +99718,84,-0.669719598,0 +99719,84,-0.665825879,0 +99720,84,-0.661932161,0 +99721,84,-0.658038442,0 +99722,84,-0.654144724,0 +99723,84,-0.650251005,0 +99724,84,-0.646357286,0 +99725,84,-0.642463568,0 +99726,84,-0.638569849,0 +99727,84,-0.634676131,0 +99728,84,-0.630782412,0 +99729,84,-0.626888693,0 +99730,84,-0.622994975,0 +99731,84,-0.619101256,0 +99732,84,-0.615207538,0 +99733,84,-0.611313819,0 +99734,84,-0.607420101,0 +99735,84,-0.603526382,0 +99736,84,-0.599632663,0 +99737,84,-0.595738945,0 +99738,84,-0.591845226,0 +99739,84,-0.587951508,0 +99740,84,-0.584057789,0 +99741,84,-0.58016407,0 +99742,84,-0.576270352,0 +99743,84,-0.572376633,0 +99744,84,-0.568482915,0 +99745,84,-0.564589196,0 +99746,84,-0.560695477,0 +99747,84,-0.556801759,0 +99748,84,-0.55290804,0 +99749,84,-0.549014322,0 +99750,84,-0.545120603,0 +99751,84,-0.541226884,0 +99752,84,-0.537333166,0 +99753,84,-0.533439447,0 +99754,84,-0.529545729,0 +99755,84,-0.52565201,0 +99756,84,-0.521758291,0 +99757,84,-0.517864573,0 +99758,84,-0.513970854,0 +99759,84,-0.510077136,0 +99760,84,-0.506183417,0 +99761,84,-0.502289698,0 +99762,84,-0.49839598,0 +99763,84,-0.494502261,0 +99764,84,-0.490608543,0 +99765,84,-0.486714824,0 +99766,84,-0.482821106,0 +99767,84,-0.478927387,0 +99768,84,-0.475033668,0 +99769,84,-0.47113995,0 +99770,84,-0.467246231,0 +99771,84,-0.463352513,0 +99772,84,-0.459458794,0 +99773,84,-0.455565075,0 +99774,84,-0.451671357,0 +99775,84,-0.447777638,0 +99776,84,-0.44388392,0 +99777,84,-0.439990201,0 +99778,84,-0.436096482,0 +99779,84,-0.432202764,0 +99780,84,-0.428309045,0 +99781,84,-0.424415327,0 +99782,84,-0.420521608,0 +99783,84,-0.416627889,0 +99784,84,-0.412734171,0 +99785,84,-0.408840452,0 +99786,84,-0.404946734,0 +99787,84,-0.401053015,0 +99788,84,-0.397159296,0 +99789,84,-0.393265578,0 +99790,84,-0.389371859,0 +99791,84,-0.385478141,0 +99792,84,-0.381584422,0 +99793,84,-0.377690704,0 +99794,84,-0.373796985,0 +99795,84,-0.369903266,0 +99796,84,-0.366009548,0 +99797,84,-0.362115829,0 +99798,84,-0.358222111,0 +99799,84,-0.354328392,0 +99800,84,-0.350434673,0 +99801,84,-0.346540955,0 +99802,84,-0.342647236,0 +99803,84,-0.338753518,0 +99804,84,-0.334859799,0 +99805,84,-0.33096608,0 +99806,84,-0.327072362,0 +99807,84,-0.323178643,0 +99808,84,-0.319284925,0 +99809,84,-0.315391206,0 +99810,84,-0.311497487,0 +99811,84,-0.307603769,0 +99812,84,-0.30371005,0 +99813,84,-0.299816332,0 +99814,84,-0.295922613,0 +99815,84,-0.292028894,0 +99816,84,-0.288135176,0 +99817,84,-0.284241457,0 +99818,84,-0.280347739,0 +99819,84,-0.27645402,0 +99820,84,-0.272560302,0 +99821,84,-0.268666583,0 +99822,84,-0.264772864,0 +99823,84,-0.260879146,0 +99824,84,-0.256985427,0 +99825,84,-0.253091709,0 +99826,84,-0.24919799,0 +99827,84,-0.245304271,0 +99828,84,-0.241410553,0 +99829,84,-0.237516834,0 +99830,84,-0.233623116,0 +99831,84,-0.229729397,0 +99832,84,-0.225835678,0 +99833,84,-0.22194196,0 +99834,84,-0.218048241,0 +99835,84,-0.214154523,0 +99836,84,-0.210260804,0 +99837,84,-0.206367085,0 +99838,84,-0.202473367,0 +99839,84,-0.198579648,0 +99840,84,-0.19468593,0 +99841,84,-0.190792211,0 +99842,84,-0.186898492,0 +99843,84,-0.183004774,0 +99844,84,-0.179111055,0 +99845,84,-0.175217337,0 +99846,84,-0.171323618,0 +99847,84,-0.167429899,0 +99848,84,-0.163536181,0 +99849,84,-0.159642462,0 +99850,84,-0.155748744,0 +99851,84,-0.151855025,0 +99852,84,-0.147961307,0 +99853,84,-0.144067588,0 +99854,84,-0.140173869,0 +99855,84,-0.136280151,0 +99856,84,-0.132386432,0 +99857,84,-0.128492714,0 +99858,84,-0.124598995,0 +99859,84,-0.120705276,0 +99860,84,-0.116811558,0 +99861,84,-0.112917839,0 +99862,84,-0.109024121,0 +99863,84,-0.105130402,0 +99864,84,-0.101236683,0 +99865,84,-0.097342965,0 +99866,84,-0.093449246,0 +99867,84,-0.089555528,0 +99868,84,-0.085661809,0 +99869,84,-0.08176809,0 +99870,84,-0.077874372,0 +99871,84,-0.073980653,0 +99872,84,-0.070086935,0 +99873,84,-0.066193216,0 +99874,84,-0.062299497,0 +99875,84,-0.058405779,0 +99876,84,-0.05451206,0 +99877,84,-0.050618342,0 +99878,84,-0.046724623,0 +99879,84,-0.042830905,0 +99880,84,-0.038937186,0 +99881,84,-0.035043467,0 +99882,84,-0.031149749,0 +99883,84,-0.02725603,0 +99884,84,-0.023362312,0 +99885,84,-0.019468593,0 +99886,84,-0.015574874,0 +99887,84,-0.011681156,0 +99888,84,-0.007787437,0 +99889,84,-0.003893719,0 +99890,0,0,11 diff --git a/VectoCore/VectoCore/Resources/Declaration/MissionCycles/UrbanDelivery.vdri b/VectoCore/VectoCore/Resources/Declaration/MissionCycles/UrbanDelivery.vdri index 1f179ab4c72ef4f6f12f39f270f8b9b469cc96f8..3c49e4d8529881267202ec733ea47793a38376c0 100644 --- a/VectoCore/VectoCore/Resources/Declaration/MissionCycles/UrbanDelivery.vdri +++ b/VectoCore/VectoCore/Resources/Declaration/MissionCycles/UrbanDelivery.vdri @@ -1,2036 +1,4805 @@ <s>,<v>,<grad>,<stop> -0,0,-0.000772284811190119,2 -1,12,-0.000772284811190119,0 -13,68,-0.000772284811190119,0 -30,68,0.270414155866776,0 -40,68,0.43651585078203,0 -50,68,0.606007376205759,0 -60,68,0.756854833832878,0 -80,68,0.872109071121014,0 -100,68,0.622956528748131,0 -110,68,0.429736189765081,0 -120,68,0.244990427053217,0 -130,68,0.09922771518881,0 -170,68,0.219566698239657,0 -180,68,0.328041274510844,0 -290,68,0.14329551179898,0 -300,68,-0.0278909288789864,0 -310,68,-0.241450250912885,0 -320,68,-0.475348555997631,0 -330,68,-0.695687539048478,0 -340,68,-0.816026522099326,0 -380,68,-0.531280759387461,0 -390,68,-0.310941776336614,0 -400,68,-0.0922977085400037,0 -410,68,0.100922630443047,0 -420,68,0.238210766036268,0 -421,63,0.238210766036268,0 -470,63,0.0924480541718608,0 -480,63,-0.0160265220993257,0 -490,63,-0.116026522099326,0 -510,63,-0.261789233963732,0 -540,63,-0.1194163526078,0 -550,63,0.0161768677311827,0 -560,63,0.1805836473922,0 -570,63,0.333126020273555,0 -580,63,0.500922630443047,0 -590,63,0.639905681290505,0 -600,63,0.763634494849827,0 -610,63,0.873803986375251,0 -620,63,0.973803986375252,0 -630,63,1.07549890162949,0 -660,63,1.18905822366339,0 -700,63,1.35685483383288,0 -720,63,1.55515991857864,0 -740,63,1.67719381688372,0 -770,63,1.49753279993457,0 -790,63,1.31956669823966,0 -840,63,1.47380398637525,0 -860,63,1.65177008807017,0 -889,47.9,1.65177008807017,0 -910,47.9,1.47380398637525,0 -950,47.9,1.62126161349389,0 -960,47.9,1.81787178298542,0 -970,47.9,2.02465144400237,0 -980,47.9,2.20431246095152,0 -990,47.9,2.35685483383288,0 -1030,47.9,2.11787178298542,0 -1040,47.9,1.92973618976508,0 -1050,47.9,1.72634635925661,0 -1060,47.9,1.55685483383288,0 -1080,47.9,1.45515991857864,0 -1110,47.9,1.63651585078203,0 -1150,47.9,1.41787178298542,0 -1160,47.9,1.22465144400237,0 -1170,47.9,0.970414155866776,0 -1180,47.9,0.704312460951521,0 -1190,47.9,0.438210766036267,0 -1200,47.9,0.182278562646437,0 -1201,25.9,0.182278562646437,0 -1210,25.9,-0.0685688949806816,0 -1220,25.9,-0.312636691590851,0 -1230,25.9,-0.532975674641699,0 -1240,25.9,-0.732975674641699,0 -1250,25.9,-0.907551945828139,0 -1260,25.9,-1.07195872548916,0 -1270,25.9,-1.22789092887899,0 -1280,25.9,-1.36009431870949,0 -1290,25.9,-1.49568753904848,0 -1300,25.9,-1.65839940345526,0 -1310,25.9,-1.83806042040441,0 -1320,25.9,-2.01094177633661,0 -1330,25.9,-2.18043330176034,0 -1333,19,-2.18043330176034,0 -1340,19,-2.33636550515017,0 -1370,19,-2.16856889498068,0 -1380,19,-1.92789092887899,0 -1390,19,-1.62958584413323,0 -1400,19,-1.3194163526078,0 -1410,19,-1.04822991192983,0 -1420,19,-0.877043471251869,0 -1440,19,-0.741450250912885,0 -1470,19,-0.570263810234919,0 -1480,19,-0.375348555997631,0 -1490,19,-0.121111267862038,0 -1500,0,0.138210766036268,25 -1501,15,0.138210766036268,0 -1510,15,0.373803986375251,0 -1520,15,0.556854833832878,0 -1570,15,0.663634494849827,0 -1590,15,0.929736189765081,0 -1600,15,1.11448195247695,0 -1610,15,1.26193957959559,0 -1620,15,1.37888873213796,0 -1632,0,1.37888873213796,20 -1633,23,1.37888873213796,0 -1670,23,1.25685483383288,0 -1690,23,1.04329551179898,0 -1710,23,0.843295511798979,0 -1730,23,0.64329551179898,0 -1750,23,0.489058223663386,0 -1770,23,0.360244664341353,0 -1776,0,0.360244664341353,20 -1777,48,0.360244664341353,0 -1790,48,0.21787178298542,0 -1810,48,0.0144819524769455,0 -1820,48,-0.121111267862038,0 -1830,48,-0.256704488201021,0 -1840,48,-0.404162115319665,0 -1850,48,-0.553314657692546,0 -1860,48,-0.710941776336614,0 -1870,48,-0.892297708540003,0 -1880,48,-1.1194163526078,0 -1890,48,-1.40755194582814,0 -1900,48,-1.67534855599763,0 -1910,48,-1.95500957294679,0 -1920,48,-2.20416211531967,0 -1930,48,-2.39060279328577,0 -1940,48,-2.50755194582814,0 -1970,48,-2.29399262379424,0 -1980,48,-2.04992482718407,0 -1990,48,-1.72619601362475,0 -2000,48,-1.31263669159085,0 -2005,32,-1.31263669159085,0 -2010,32,-0.787212962777293,0 -2020,32,-0.14484008142136,0 -2030,32,0.555159918578641,0 -2040,32,1.28227856264644,0 -2041,38,1.28227856264644,0 -2050,38,2.00600737620576,0 -2060,38,2.68736330840915,0 -2070,38,3.26363449484982,0 -2080,38,3.6534650033244,0 -2090,38,3.90939720671423,0 -2100,38,4.03312602027355,0 -2120,38,3.8941429694261,0 -2130,38,3.69075313891763,0 -2140,38,3.47210907112101,0 -2150,38,3.26532941010407,0 -2160,38,3.11787178298542,0 -2161,29.7,3.11787178298542,0 -2210,29.7,3.22804127451084,0 -2230,29.7,3.12126161349389,0 -2240,29.7,3.00431246095152,0 -2250,29.7,2.90261754569728,0 -2300,29.7,3.09583788468034,0 -2310,29.7,3.19753279993458,0 -2340,29.7,3.08905822366338,0 -2350,29.7,2.94160059654474,0 -2360,29.7,2.77888873213796,0 -2370,29.7,2.66024466434135,0 -2450,29.7,2.51278703722271,0 -2460,29.7,2.40261754569728,0 -2480,29.7,2.23482093552779,0 -2510,29.7,2.42634635925661,0 -2520,29.7,2.53482093552779,0 -2533,45,2.53482093552779,0 -2540,45,2.67888873213796,0 -2560,45,2.53143110501932,0 -2570,45,2.36363449484982,0 -2580,45,2.17719381688373,0 -2590,45,1.99922771518881,0 -2600,45,1.8399056812905,0 -2610,45,1.72126161349389,0 -2720,45,1.60600737620576,0 -2730,45,1.50431246095152,0 -2737,49,1.50431246095152,0 -2740,49,1.37380398637525,0 -2750,49,1.23821076603627,0 -2760,49,1.12126161349389,0 -2780,49,1.01448195247695,0 -2830,49,0.783973477900673,0 -2840,49,0.538210766036268,0 -2850,49,0.216176867731183,0 -2860,49,-0.180433301760343,0 -2870,49,-0.6194163526078,0 -2880,49,-1.08551804752305,0 -2890,49,-1.57195872548916,0 -2900,49,-2.06856889498068,0 -2910,49,-2.54314516616712,0 -2920,49,-2.96178923396373,0 -2930,49,-3.31772143735356,0 -2940,49,-3.58551804752306,0 -2941,32,-3.58551804752306,0 -2950,32,-3.75839940345526,0 -2970,32,-3.90077228481119,0 -3030,32,-3.72789092887899,0 -3040,32,-3.57873838650611,0 -3050,32,-3.40416211531966,0 -3060,32,-3.19399262379424,0 -3070,32,-2.93975533565865,0 -3080,32,-2.63128075938746,0 -3090,32,-2.24145025091289,0 -3100,32,-1.71772143735356,0 -3109,17,-1.71772143735356,0 -3110,17,-1.08551804752305,0 -3120,17,-0.380433301760342,0 -3130,17,0.344990427053217,0 -3140,17,1.02973618976508,0 -3150,17,1.60600737620576,0 -3160,17,1.91956669823966,0 -3180,17,1.7805836473922,0 -3190,17,1.34160059654474,0 -3200,17,0.707702291459996,0 -3210,17,-0.139755335658648,0 -3216,0,-0.139755335658648,35 -3217,21,-0.139755335658648,0 -3220,21,-1.00924686108238,0 -3230,21,-1.81772143735356,0 -3240,21,-2.49229770854,0 -3250,21,-2.98551804752305,0 -3260,21,-3.25331465769254,0 -3280,21,-3.10755194582814,0 -3290,21,-2.84992482718407,0 -3300,21,-2.55331465769255,0 -3301,39,-2.55331465769255,0 -3310,39,-2.27195872548916,0 -3320,39,-2.03128075938746,0 -3330,39,-1.84484008142136,0 -3380,39,-2.13128075938746,0 -3390,39,-2.35161974243831,0 -3400,39,-2.53806042040441,0 -3410,39,-2.67365364074339,0 -3450,39,-2.5058570305739,0 -3457,30,-2.5058570305739,0 -3460,30,-2.40246720006543,0 -3510,30,-2.57195872548916,0 -3520,30,-2.75331465769255,0 -3530,30,-2.98721296277729,0 -3540,30,-3.25500957294679,0 -3550,30,-3.54484008142136,0 -3560,30,-3.83975533565865,0 -3570,30,-4.11094177633661,0 -3580,30,-4.36178923396373,0 -3590,30,-4.58551804752305,0 -3600,30,-4.78212821701458,0 -3610,30,-4.94822991192984,0 -3620,30,-5.07195872548916,0 -3650,30,-4.92111126786204,0 -3660,30,-4.68890787803153,0 -3670,30,-4.37026381023492,0 -3680,30,-3.9787383865061,0 -3690,30,-3.52111126786204,0 -3700,30,-2.99568753904848,0 -3709,25,-2.99568753904848,0 -3710,25,-2.38890787803153,0 -3720,25,-1.71094177633661,0 -3730,25,-0.98721296277729,0 -3740,25,-0.25670448820102,0 -3750,25,0.45515991857864,0 -3757,50,0.45515991857864,0 -3760,50,1.04329551179898,0 -3770,50,1.50092263044305,0 -3780,50,1.80600737620576,0 -3790,50,1.9534650033244,0 -3810,50,1.75515991857864,0 -3820,50,1.39583788468033,0 -3830,50,0.951770088070165,0 -3840,50,0.446685342307453,0 -3850,50,-0.0770434712518681,0 -3860,50,-0.568568894980682,0 -3870,50,-1.02619601362475,0 -3880,50,-1.42450109837051,0 -3890,50,-1.80924686108238,0 -3900,50,-2.18890787803153,0 -3910,50,-2.59399262379424,0 -3920,50,-3.04822991192983,0 -3930,50,-3.53975533565865,0 -3940,50,-4.05331465769255,0 -3950,50,-4.58212821701458,0 -3960,50,-5.12280618311628,0 -3970,50,-5.67534855599763,0 -3980,50,-6.23975533565865,0 -3990,50,-6.79907736955696,0 -4000,50,-7.25500957294679,0 -4010,50,-7.5600943187095,0 -4040,50,-7.01094177633662,0 -4050,50,-6.28212821701459,0 -4060,50,-5.35331465769255,0 -4068,0,-5.35331465769255,20 -4069,52,-5.35331465769255,0 -4070,52,-4.36687397972644,0 -4080,52,-3.38551804752305,0 -4090,52,-2.44653499667559,0 -4100,52,-1.56687397972644,0 -4110,52,-0.787212962777294,0 -4120,52,-0.134670589895936,0 -4130,52,0.426346359256607,0 -4140,52,0.894142969426098,0 -4150,52,1.25007517281593,0 -4160,52,1.48736330840915,0 -4170,52,1.65685483383288,0 -4220,52,1.47888873213796,0 -4230,52,1.32634635925661,0 -4240,52,1.14668534230745,0 -4250,52,0.914481952476945,0 -4260,52,0.646685342307454,0 -4270,52,0.338210766036268,0 -4280,52,-0.00755194582813933,0 -4290,52,-0.329585844133224,0 -4300,52,-0.614331606845089,0 -4310,52,-0.882128217014581,0 -4320,52,-1.1465349966756,0 -4330,52,-1.4058570305739,0 -4340,52,-1.66009431870949,0 -4350,52,-1.94822991192983,0 -4360,52,-2.20246720006543,0 -4370,52,-2.34314516616712,0 -4390,52,-2.18890787803153,0 -4400,52,-1.85331465769255,0 -4410,52,-1.31094177633661,0 -4416,0,-1.31094177633661,25 -4417,29,-1.31094177633661,0 -4420,29,-0.661789233963732,0 -4430,29,0.0144819524769453,0 -4440,29,0.672109071121013,0 -4450,29,1.26871924061254,0 -4460,29,1.78736330840915,0 -4470,29,2.26193957959559,0 -4480,29,2.70939720671423,0 -4490,29,3.15515991857864,0 -4500,29,3.58905822366339,0 -4510,29,3.99075313891763,0 -4520,29,4.33821076603627,0 -4530,29,4.55854974908712,0 -4550,29,4.43651585078203,0 -4560,29,4.19583788468033,0 -4570,29,3.92295652874813,0 -4580,29,3.67041415586678,0 -4590,29,3.5348209355278,0 -4609,16,3.5348209355278,0 -4620,16,3.69244805417186,0 -4640,16,3.56363449484983,0 -4650,16,3.24160059654474,0 -4660,16,2.77719381688373,0 -4670,16,2.25854974908711,0 -4680,16,1.69753279993457,0 -4690,16,1.10770229146,0 -4700,16,0.490753138917624,0 -4704,0,0.490753138917624,30 -4705,28,0.490753138917624,0 -4710,28,-0.170263810234919,0 -4720,28,-0.836365505150173,0 -4730,28,-1.48043330176034,0 -4740,28,-2.05331465769255,0 -4750,28,-2.49568753904848,0 -4760,28,-2.76687397972645,0 -4770,28,-2.90246720006543,0 -4790,28,-3.08212821701458,0 -4800,28,-3.24314516616713,0 -4810,28,-3.49229770854001,0 -4820,28,-3.83128075938747,0 -4830,28,-4.17026381023492,0 -4840,28,-4.42619601362475,0 -4850,28,-4.58721296277729,0 -4900,28,-4.45670448820102,0 -4909,15,-4.45670448820102,0 -4920,15,-4.28043330176034,0 -4930,15,-4.12958584413322,0 -4940,15,-3.9058570305739,0 -4944,0,-3.9058570305739,25 -4945,53.6,-3.9058570305739,0 -4950,53.6,-3.63467058989593,0 -4960,53.6,-3.33467058989594,0 -4970,53.6,-3.02111126786204,0 -4980,53.6,-2.72280618311627,0 -4990,53.6,-2.45839940345526,0 -5000,53.6,-2.22619601362475,0 -5010,53.6,-1.97195872548916,0 -5020,53.6,-1.73806042040441,0 -5030,53.6,-1.49399262379424,0 -5040,53.6,-1.24314516616712,0 -5050,53.6,-0.997382454302716,0 -5060,53.6,-0.775348555997631,0 -5070,53.6,-0.605857030573901,0 -5080,53.6,-0.439755335658648,0 -5090,53.6,-0.28890787803153,0 -5100,53.6,-0.139755335658648,0 -5110,53.6,0.0212616134938948,0 -5120,53.6,0.206007376205759,0 -5130,53.6,0.392448054171861,0 -5140,53.6,0.529736189765081,0 -5170,53.6,0.363634494849827,0 -5180,53.6,0.11787178298542,0 -5190,53.6,-0.187212962777292,0 -5200,53.6,-0.490602793285767,0 -5210,53.6,-0.729585844133224,0 -5220,53.6,-0.871958725489156,0 -5270,53.6,-0.749924827184072,0 -5300,53.6,-0.593992623794241,0 -5320,53.6,-0.477043471251868,0 -5340,53.6,-0.260094318709495,0 -5350,53.6,-0.116026522099326,0 -5360,53.6,0.0246514440023692,0 -5370,53.6,0.211092121968471,0 -5380,53.6,0.3805836473922,0 -5390,53.6,0.509397206714233,0 -5450,53.6,0.370414155866776,0 -5480,53.6,0.51787178298542,0 -5490,53.6,0.653465003324403,0 -5500,53.6,0.787363308409149,0 -5520,53.6,0.931431105019318,0 -5550,53.6,0.806007376205759,0 -5560,53.6,0.656854833832878,0 -5570,53.6,0.470414155866776,0 -5580,53.6,0.261939579595589,0 -5590,53.6,0.0331260202735557,0 -5600,53.6,-0.217721437353563,0 -5610,53.6,-0.488907878031529,0 -5620,53.6,-0.741450250912885,0 -5630,53.6,-0.941450250912884,0 -5640,53.6,-1.08890787803153,0 -5670,53.6,-0.953314657692548,0 -5680,53.6,-0.705857030573903,0 -5690,53.6,-0.404162115319664,0 -5700,53.6,-0.0668739797264443,0 -5710,53.6,0.265329410104064,0 -5720,53.6,0.555159918578641,0 -5730,53.6,0.792448054171861,0 -5737,49,0.792448054171861,0 -5740,49,0.977193816883726,0 -5750,49,1.09753279993457,0 -5790,49,0.84838025756169,0 -5800,49,0.633126020273555,0 -5810,49,0.450075172815929,0 -5820,49,0.328041274510844,0 -5850,49,0.660244664341352,0 -5856,0,0.660244664341352,20 -5857,11,0.660244664341352,0 -5860,11,1.02634635925661,0 -5870,11,1.43143110501932,0 -5880,11,1.84329551179898,0 -5890,11,2.19922771518881,0 -5900,11,2.43651585078203,0 -5928,0,2.43651585078203,35 -5929,22,2.43651585078203,0 -5930,22,2.02804127451084,0 -5940,22,1.50939720671423,0 -5950,22,0.834820935527792,0 -5960,22,0.0348209355277923,0 -5970,22,-0.86348414921797,0 -5980,22,-1.70077228481119,0 -5990,22,-2.4600943187095,0 -6000,22,-3.09229770854,0 -6001,40,-3.09229770854,0 -6010,40,-3.56009431870949,0 -6020,40,-3.84314516616712,0 -6030,40,-3.94484008142136,0 -6050,40,-3.67026381023491,0 -6060,40,-3.38890787803153,0 -6070,40,-3.07026381023492,0 -6080,40,-2.75670448820102,0 -6090,40,-2.46856889498068,0 -6100,40,-2.24992482718407,0 -6110,40,-2.08551804752306,0 -6120,40,-1.94822991192983,0 -6130,40,-1.8058570305739,0 -6140,40,-1.63128075938746,0 -6145,36,-1.63128075938746,0 -6150,36,-1.39399262379424,0 -6160,36,-1.11263669159085,0 -6170,36,-0.778738386506107,0 -6180,36,-0.44484008142136,0 -6181,40,-0.44484008142136,0 -6190,40,-0.144840081421359,0 -6200,40,0.109397206714234,0 -6210,40,0.295837884680335,0 -6220,40,0.429736189765081,0 -6270,40,0.207702291459996,0 -6280,40,0.00939720671423364,0 -6290,40,-0.190602793285766,0 -6300,40,-0.40077228481119,0 -6310,40,-0.610941776336614,0 -6320,40,-0.810941776336614,0 -6330,40,-1.03128075938746,0 -6337,27,-1.03128075938746,0 -6340,27,-1.26178923396373,0 -6350,27,-1.5194163526078,0 -6360,27,-1.79568753904848,0 -6370,27,-2.08043330176034,0 -6380,27,-2.35670448820102,0 -6390,27,-2.59399262379424,0 -6400,27,-2.74822991192984,0 -6445,40,-2.74822991192984,0 -6450,40,-2.62111126786204,0 -6480,40,-2.82280618311628,0 -6490,40,-3.09738245430272,0 -6500,40,-3.45839940345526,0 -6510,40,-3.89907736955695,0 -6520,40,-4.38382313226882,0 -6530,40,-4.84145025091288,0 -6540,40,-5.25500957294678,0 -6550,40,-5.60924686108237,0 -6560,40,-5.89399262379424,0 -6570,40,-6.11433160684509,0 -6580,40,-6.29738245430272,0 -6590,40,-6.42958584413322,0 -6630,40,-6.08043330176034,0 -6640,40,-5.62280618311627,0 -6650,40,-5.0651790644722,0 -6660,0,-4.42789092887899,25 -6661,20,-4.42789092887899,0 -6670,20,-3.74314516616712,0 -6680,20,-3.06178923396373,0 -6690,20,-2.36687397972645,0 -6697,30,-2.36687397972645,0 -6700,30,-1.76517906447221,0 -6710,30,-1.1787383865061,0 -6720,30,-0.653314657692545,0 -6730,30,-0.171958725489156,0 -6740,30,0.302617545697285,0 -6750,30,0.760244664341352,0 -6760,30,1.25515991857864,0 -6770,30,1.77719381688373,0 -6780,30,2.32126161349389,0 -6790,30,2.85515991857864,0 -6800,30,3.34499042705322,0 -6810,30,3.76871924061254,0 -6820,30,4.02634635925661,0 -6860,30,3.73821076603627,0 -6870,30,3.43312602027355,0 -6880,30,3.10092263044304,0 -6890,30,2.76871924061254,0 -6900,30,2.42804127451085,0 -6910,30,2.05685483383288,0 -6920,30,1.63482093552779,0 -6930,30,1.14329551179898,0 -6940,30,0.551770088070167,0 -6950,30,-0.146534996675596,0 -6960,30,-0.917721437353563,0 -6970,30,-1.70924686108238,0 -6973,27,-1.70924686108238,0 -6980,27,-2.46348414921797,0 -6990,27,-3.14145025091289,0 -7000,27,-3.64822991192984,0 -7010,27,-3.98212821701458,0 -7020,27,-4.17026381023492,0 -7050,27,-4.04992482718407,0 -7060,27,-3.8058570305739,0 -7070,27,-3.5058570305739,0 -7080,27,-3.1600943187095,0 -7090,27,-2.80416211531967,0 -7100,27,-2.4736536407434,0 -7110,27,-2.16856889498068,0 -7120,27,-1.98043330176034,0 -7140,0,-1.98043330176034,15 -7141,28,-1.98043330176034,0 -7150,28,-2.11094177633661,0 -7160,28,-2.41433160684509,0 -7170,28,-2.83806042040441,0 -7180,28,-3.32111126786204,0 -7190,28,-3.80755194582814,0 -7200,28,-4.22111126786204,0 -7210,28,-4.49738245430272,0 -7220,28,-4.59907736955696,0 -7240,28,-4.20755194582814,0 -7250,28,-3.69060279328577,0 -7260,28,-3.01602652209933,0 -7270,28,-2.21094177633662,0 -7280,28,-1.28212821701458,0 -7284,0,-1.28212821701458,30 -7285,10,-1.28212821701458,0 -7290,10,-0.282128217014579,0 -7300,10,0.687363308409149,0 -7308,0,0.687363308409149,20 -7309,33,0.687363308409149,0 -7310,33,1.5534650033244,0 -7320,33,2.29583788468033,0 -7330,33,2.88736330840915,0 -7340,33,3.32804127451084,0 -7350,33,3.63312602027356,0 -7360,33,3.81787178298542,0 -7380,33,3.95177008807017,0 -7410,33,3.74668534230746,0 -7420,33,3.61109212196847,0 -7430,33,3.50261754569729,0 -7450,33,3.37549890162949,0 -7510,33,3.0805836473922,0 -7520,33,2.7670243253583,0 -7530,33,2.36024466434135,0 -7540,33,1.8805836473922,0 -7550,33,1.37041415586678,0 -7560,33,0.861939579595589,0 -7570,33,0.380583647392199,0 -7580,33,-0.0600943187094951,0 -7590,33,-0.466873979726445,0 -7600,33,-0.770263810234919,0 -7610,33,-0.960094318709495,0 -7640,33,-0.693992623794241,0 -7650,33,-0.321111267862038,0 -7660,33,0.09922771518881,0 -7669,24,0.09922771518881,0 -7670,24,0.504312460951522,0 -7680,24,0.848380257561691,0 -7690,24,1.11278703722271,0 -7700,24,1.29244805417186,0 -7705,29,1.29244805417186,0 -7730,29,1.1670243253583,0 -7740,29,0.91109212196847,0 -7750,29,0.558549749087115,0 -7760,29,0.136515850782031,0 -7770,29,-0.304162115319665,0 -7780,29,-0.705857030573902,0 -7790,29,-1.02111126786204,0 -7800,29,-1.22958584413322,0 -7840,29,-0.883823132268817,0 -7850,29,-0.621111267862038,0 -7860,29,-0.351619742438309,0 -7870,29,-0.0990773695569528,0 -7880,29,0.13651585078203,0 -7890,29,0.407702291459996,0 -7900,29,0.702617545697285,0 -7910,29,1.08566839315491,0 -7920,29,1.5670243253583,0 -7921,40.9,1.5670243253583,0 -7930,40.9,2.12973618976508,0 -7940,40.9,2.74838025756169,0 -7950,40.9,3.37549890162949,0 -7960,40.9,3.94668534230745,0 -7970,40.9,4.42295652874813,0 -7980,40.9,4.80770229145999,0 -7990,40.9,5.08736330840915,0 -8000,40.9,5.25515991857864,0 -8040,40.9,5.02295652874813,0 -8050,40.9,4.79414296942609,0 -8060,40.9,4.53482093552779,0 -8065,50,4.53482093552779,0 -8070,50,4.21278703722271,0 -8080,50,3.89753279993458,0 -8090,50,3.54499042705322,0 -8100,50,3.17041415586678,0 -8110,50,2.79075313891763,0 -8120,50,2.43143110501932,0 -8130,50,2.10939720671424,0 -8140,50,1.87041415586678,0 -8150,50,1.72634635925661,0 -8210,50,1.54668534230745,0 -8220,50,1.43482093552779,0 -8230,50,1.32126161349389,0 -8250,50,1.19753279993457,0 -8270,50,1.40092263044305,0 -8280,50,1.57888873213796,0 -8290,50,1.77380398637525,0 -8300,50,1.99583788468034,0 -8310,50,2.25007517281593,0 -8320,50,2.45177008807017,0 -8329,35,2.45177008807017,0 -8330,35,2.64838025756169,0 -8340,35,2.87549890162949,0 -8350,35,3.11448195247694,0 -8360,35,3.32804127451085,0 -8370,35,3.53143110501932,0 -8380,35,3.70261754569729,0 -8400,35,3.82126161349389,0 -8448,0,3.82126161349389,35 -8449,38,3.82126161349389,0 -8450,38,3.96024466434135,0 -8460,38,4.1805836473922,0 -8470,38,4.46193957959559,0 -8480,38,4.76193957959559,0 -8490,38,5.05007517281593,0 -8500,38,5.27210907112101,0 -8510,38,5.37719381688373,0 -8530,38,5.21448195247694,0 -8540,38,5.00431246095152,0 -8550,38,4.75007517281593,0 -8560,38,4.52804127451084,0 -8570,38,4.37380398637525,0 -8581,31,4.37380398637525,0 -8593,43,4.37380398637525,0 -8610,43,4.51617686773118,0 -8650,43,4.31109212196847,0 -8660,43,4.10261754569729,0 -8670,43,3.83143110501932,0 -8680,43,3.55007517281592,0 -8690,43,3.24160059654474,0 -8700,43,2.96024466434135,0 -8710,43,2.71448195247695,0 -8720,43,2.49922771518881,0 -8730,43,2.39753279993457,0 -8760,43,2.59075313891762,0 -8770,43,2.73312602027356,0 -8780,43,2.87888873213796,0 -8790,43,3.01448195247694,0 -8800,43,3.11617686773118,0 -8810,43,3.22634635925661,0 -8820,43,3.33312602027355,0 -8830,43,3.4399056812905,0 -8840,43,3.55007517281593,0 -8860,43,3.68566839315491,0 -8890,43,3.55515991857864,0 -8900,43,3.41617686773119,0 -8905,36.9,3.41617686773119,0 -8910,36.9,3.22973618976508,0 -8920,36.9,2.9670243253583,0 -8930,36.9,2.67549890162948,0 -8940,36.9,2.36532941010406,0 -8950,36.9,2.0534650033244,0 -8960,36.9,1.75854974908712,0 -8970,36.9,1.48736330840915,0 -8980,36.9,1.2399056812905,0 -8990,36.9,0.992448054171861,0 -9000,36.9,0.734820935527794,0 -9010,36.9,0.446685342307454,0 -9020,36.9,0.112787037222708,0 -9030,36.9,-0.209246861082377,0 -9037,26.1,-0.209246861082377,0 -9040,26.1,-0.448229911929834,0 -9050,26.1,-0.571958725489156,0 -9070,26.1,-0.44484008142136,0 -9080,26.1,-0.202467200065428,0 -9090,26.1,0.0687192406125384,0 -9096,0,0.0687192406125384,25 -9097,37,0.0687192406125384,0 -9100,37,0.307702291459996,0 -9110,37,0.465329410104064,0 -9160,37,0.283973477900674,0 -9170,37,0.160244664341352,0 -9180,37,0.000922630443047254,0 -9190,37,-0.197382454302716,0 -9200,37,-0.439755335658648,0 -9210,37,-0.727890928878987,0 -9220,37,-1.07365364074339,0 -9230,37,-1.43636550515017,0 -9240,37,-1.81094177633661,0 -9250,37,-2.18721296277729,0 -9260,37,-2.55500957294678,0 -9270,37,-2.92789092887899,0 -9277,45,-2.92789092887899,0 -9280,45,-3.21433160684509,0 -9290,45,-3.44822991192984,0 -9300,45,-3.60924686108238,0 -9350,45,-3.36856889498068,0 -9360,45,-3.21772143735356,0 -9370,45,-3.07365364074339,0 -9380,45,-2.94314516616712,0 -9390,45,-2.82450109837051,0 -9410,45,-2.66178923396373,0 -9450,45,-2.83467058989594,0 -9460,45,-2.93806042040441,0 -9480,45,-3.06009431870949,0 -9510,45,-3.25161974243831,0 -9520,45,-3.43128075938746,0 -9530,45,-3.64314516616712,0 -9540,45,-3.82789092887899,0 -9570,45,-3.58551804752305,0 -9577,30,-3.58551804752305,0 -9580,30,-3.0465349966756,0 -9590,30,-2.37873838650611,0 -9600,30,-1.65500957294678,0 -9610,30,-0.938060420404411,0 -9613,50,-0.938060420404411,0 -9620,50,-0.273653640743394,0 -9630,50,0.302617545697285,0 -9640,50,0.690753138917623,0 -9650,50,0.983973477900674,0 -9660,50,1.20431246095152,0 -9670,50,1.34668534230745,0 -9710,50,1.19244805417186,0 -9720,50,1.07380398637525,0 -9730,50,0.963634494849826,0 -9750,50,0.79922771518881,0 -9780,50,0.939905681290505,0 -9790,50,1.0805836473922,0 -9800,50,1.26871924061254,0 -9810,50,1.48905822366338,0 -9820,50,1.7534650033244,0 -9830,50,2.01956669823966,0 -9840,50,2.2941429694261,0 -9850,50,2.5670243253583,0 -9860,50,2.80770229146,0 -9870,50,2.97719381688372,0 -9910,50,2.79075313891763,0 -9920,50,2.59244805417186,0 -9930,50,2.40600737620576,0 -9940,50,2.23821076603627,0 -9950,50,2.08397347790068,0 -9960,50,1.97210907112101,0 -9980,50,1.8534650033244,0 -10040,50,1.73651585078203,0 -10057,53,1.73651585078203,0 -10080,53,1.61617686773118,0 -10100,53,1.37041415586678,0 -10110,53,1.13312602027356,0 -10120,53,0.865329410104064,0 -10130,53,0.560244664341353,0 -10140,53,0.270414155866777,0 -10150,53,0.0212616134938944,0 -10160,53,-0.183823132268817,0 -10170,53,-0.336365505150173,0 -10180,53,-0.470263810234919,0 -10200,53,-0.646534996675597,0 -10220,53,-0.856704488201021,0 -10230,53,-0.97534855599763,0 -10240,53,-1.10755194582814,0 -10250,53,-1.25331465769255,0 -10260,53,-1.42111126786204,0 -10270,53,-1.60246720006543,0 -10280,53,-1.78721296277729,0 -10290,53,-1.97365364074339,0 -10300,53,-2.14145025091289,0 -10310,53,-2.30755194582814,0 -10320,53,-2.43806042040441,0 -10321,45,-2.43806042040441,0 -10340,45,-2.53975533565865,0 -10360,45,-2.40924686108238,0 -10370,45,-2.24484008142136,0 -10380,45,-2.03467058989594,0 -10390,45,-1.80416211531966,0 -10393,38,-1.80416211531966,0 -10400,38,-1.59229770854,0 -10410,38,-1.4058570305739,0 -10420,38,-1.27026381023492,0 -10470,38,-1.51094177633661,0 -10480,38,-1.71094177633661,0 -10490,38,-1.88890787803153,0 -10500,38,-2.00416211531966,0 -10530,38,-1.84822991192984,0 -10537,19,-1.84822991192984,0 -10540,19,-1.74145025091289,0 -10580,19,-1.89229770854,0 -10610,19,-1.57534855599763,0 -10620,19,-1.21602652209933,0 -10630,19,-0.768568894980682,0 -10640,19,-0.271958725489157,0 -10644,0,-0.271958725489157,30 -10645,12,-0.271958725489157,0 -10650,12,0.202617545697284,0 -10660,12,0.560244664341352,0 -10670,12,0.773803986375251,0 -10700,12,0.651770088070166,0 -10710,12,0.465329410104065,0 -10720,12,0.311092121968471,0 -10730,12,0.200922630443047,0 -10752,0,0.200922630443047,25 -10753,31,0.200922630443047,0 -10770,31,0.0839734779006742,0 -10780,31,-0.0295858441332241,0 -10790,31,-0.158399403455258,0 -10800,31,-0.321111267862037,0 -10810,31,-0.50077228481119,0 -10820,31,-0.660094318709494,0 -10830,31,-0.778738386506105,0 -10900,31,-0.632975674641699,0 -10910,31,-0.465179064472207,0 -10920,31,-0.271958725489157,0 -10930,31,-0.058399403455258,0 -10933,25,-0.058399403455258,0 -10940,25,0.168719240612539,0 -10945,52,0.168719240612539,0 -10950,52,0.372109071121013,0 -10960,52,0.524651444002369,0 -10970,52,0.660244664341353,0 -10980,52,0.783973477900675,0 -10990,52,0.89922771518881,0 -11000,52,1.01109212196847,0 -11020,52,1.21109212196847,0 -11030,52,1.32634635925661,0 -11040,52,1.43482093552779,0 -11060,52,1.61448195247695,0 -11070,52,1.71617686773118,0 -11080,52,1.82973618976508,0 -11100,52,2.01448195247695,0 -11120,52,2.1670243253583,0 -11190,52,2.06193957959559,0 -11220,52,1.91109212196847,0 -11221,48.9,1.91109212196847,0 -11260,48.9,1.80261754569728,0 -11300,48.9,1.66871924061254,0 -11320,48.9,1.48397347790067,0 -11330,48.9,1.38227856264644,0 -11350,48.9,1.2670243253583,0 -11400,48.9,1.11787178298542,0 -11410,48.9,0.990753138917624,0 -11420,48.9,0.831431105019318,0 -11430,48.9,0.628041274510843,0 -11440,48.9,0.441600596544743,0 -11450,48.9,0.272109071121013,0 -11460,48.9,0.124651444002369,0 -11470,48.9,-0.000772284811190119,0 -11480,48.9,-0.116026522099326,0 -11490,48.9,-0.234670589895936,0 -11500,48.9,-0.368568894980682,0 -11510,48.9,-0.50077228481119,0 -11520,48.9,-0.634670589895936,0 -11530,48.9,-0.766873979726444,0 -11540,48.9,-0.897382454302716,0 -11550,48.9,-1.01602652209933,0 -11560,48.9,-1.16348414921797,0 -11570,48.9,-1.31263669159085,0 -11580,48.9,-1.47195872548916,0 -11590,48.9,-1.63806042040441,0 -11600,48.9,-1.80246720006543,0 -11610,48.9,-1.93806042040441,0 -11690,48.9,-2.18382313226882,0 -11700,48.9,-2.3787383865061,0 -11710,48.9,-2.59229770854,0 -11720,48.9,-2.78382313226881,0 -11730,48.9,-2.9194163526078,0 -11770,48.9,-2.72450109837051,0 -11780,48.9,-2.55161974243831,0 -11790,48.9,-2.33128075938746,0 -11800,48.9,-2.09907736955695,0 -11810,48.9,-1.83975533565865,0 -11820,48.9,-1.60077228481119,0 -11830,48.9,-1.38382313226882,0 -11840,48.9,-1.17704347125187,0 -11850,48.9,-1.02450109837051,0 -11860,48.9,-0.922806183116273,0 -11880,48.9,-0.792297708540005,0 -11930,48.9,-1.00246720006543,0 -11940,48.9,-1.19738245430272,0 -11950,48.9,-1.42111126786204,0 -11960,48.9,-1.65331465769255,0 -11965,42,-1.65331465769255,0 -11970,42,-1.85670448820102,0 -11980,42,-1.99229770854,0 -12000,42,-2.12789092887898,0 -12020,42,-2.28212821701458,0 -12030,42,-2.46856889498068,0 -12040,42,-2.73128075938746,0 -12050,42,-3.06178923396373,0 -12060,42,-3.46517906447221,0 -12070,42,-3.92111126786204,0 -12080,42,-4.38551804752306,0 -12090,42,-4.84314516616712,0 -12100,42,-5.2465349966756,0 -12110,42,-5.56178923396373,0 -12120,42,-5.72619601362474,0 -12140,42,-5.53128075938747,0 -12150,42,-5.09060279328577,0 -12157,31,-5.09060279328577,0 -12160,31,-4.40246720006543,0 -12170,31,-3.56348414921797,0 -12180,31,-2.6058570305739,0 -12190,31,-1.6058570305739,0 -12192,0,-1.6058570305739,15 -12193,29,-1.6058570305739,0 -12200,29,-0.631280759387461,0 -12210,29,0.233126020273555,0 -12220,29,0.890753138917624,0 -12230,29,1.37549890162949,0 -12240,29,1.70092263044305,0 -12250,29,1.92973618976508,0 -12260,29,2.11956669823966,0 -12270,29,2.27210907112101,0 -12280,29,2.40600737620576,0 -12290,29,2.52973618976508,0 -12330,29,2.29244805417186,0 -12340,29,1.99583788468034,0 -12350,29,1.64499042705322,0 -12360,29,1.26871924061254,0 -12370,29,0.890753138917624,0 -12380,29,0.529736189765081,0 -12390,29,0.190753138917624,0 -12400,29,-0.0634841492179698,0 -12410,29,-0.261789233963732,0 -12420,29,-0.390602793285766,0 -12470,29,-0.25670448820102,0 -12520,29,-0.461789233963732,0 -12530,29,-0.638060420404411,0 -12540,29,-0.804162115319665,0 -12550,29,-0.94484008142136,0 -12560,29,-1.04822991192984,0 -12590,29,-0.902467200065427,0 -12600,29,-0.741450250912885,0 -12610,29,-0.551619742438309,0 -12620,29,-0.353314657692546,0 -12630,29,-0.149924827184071,0 -12640,29,0.0670243253583014,0 -12650,29,0.258549749087115,0 -12660,29,0.422956528748132,0 -12670,29,0.567024325358301,0 -12680,29,0.695837884680335,0 -12690,29,0.814481952476946,0 -12700,29,0.914481952476946,0 -12720,29,1.10600737620576,0 -12740,29,1.24838025756169,0 -12760,29,1.35177008807017,0 -12793,48,1.35177008807017,0 -12810,48,1.16871924061254,0 -12820,48,0.972109071121014,0 -12830,48,0.695837884680337,0 -12840,48,0.411092121968471,0 -12850,48,0.170414155866775,0 -12860,48,0.00261754569728449,0 -12900,48,0.251770088070166,0 -12910,48,0.407702291459996,0 -12920,48,0.529736189765081,0 -12970,48,0.343295511798979,0 -12990,48,0.143295511798979,0 -13010,48,-0.0787383865061054,0 -13020,48,-0.248229911929834,0 -13021,43,-0.248229911929834,0 -13030,43,-0.460094318709495,0 -13040,43,-0.693992623794241,0 -13050,43,-0.931280759387461,0 -13060,43,-1.1194163526078,0 -13070,43,-1.24145025091289,0 -13100,43,-1.12111126786204,0 -13105,48,-1.12111126786204,0 -13110,48,-0.985518047523055,0 -13120,48,-0.866873979726445,0 -13130,48,-0.751619742438309,0 -13150,48,-0.573653640743393,0 -13170,48,-0.404162115319664,0 -13190,48,-0.229585844133224,0 -13210,48,-0.124501098370512,0 -13230,48,-0.0228061831162749,0 -13290,48,-0.271958725489156,0 -13300,48,-0.455009572946783,0 -13310,48,-0.627890928878987,0 -13320,48,-0.777043471251868,0 -13340,48,-0.899077369556953,0 -13360,48,-0.751619742438309,0 -13370,48,-0.621111267862038,0 -13380,48,-0.468568894980682,0 -13390,48,-0.309246861082377,0 -13400,48,-0.158399403455258,0 -13410,48,-0.00585703057390199,0 -13420,48,0.111092121968471,0 -13440,48,0.260244664341352,0 -13480,48,0.0636344948498267,0 -13500,48,-0.1194163526078,0 -13520,48,-0.268568894980682,0 -13540,48,-0.465179064472207,0 -13550,48,-0.622806183116275,0 -13560,48,-0.810941776336613,0 -13570,48,-0.995687539048478,0 -13580,48,-1.13806042040441,0 -13610,48,-1.0194163526078,0 -13620,48,-0.839755335658648,0 -13630,48,-0.665179064472206,0 -13640,48,-0.526196013624749,0 -13657,38,-0.526196013624749,0 -13670,38,-0.836365505150173,0 -13680,38,-1.15839940345526,0 -13690,38,-1.53975533565865,0 -13700,38,-1.93128075938746,0 -13710,38,-2.25331465769255,0 -13720,38,-2.39738245430271,0 -13740,38,-2.18551804752306,0 -13750,38,-1.83467058989594,0 -13760,38,-1.39229770854001,0 -13764,0,-1.39229770854001,35 -13765,50,-1.39229770854001,0 -13770,50,-0.917721437353564,0 -13780,50,-0.527890928878986,0 -13790,50,-0.25670448820102,0 -13800,50,-0.151619742438309,0 -13820,50,-0.404162115319665,0 -13830,50,-0.760094318709495,0 -13840,50,-1.20755194582814,0 -13850,50,-1.68551804752305,0 -13860,50,-2.1329756746417,0 -13870,50,-2.52280618311627,0 -13880,50,-2.83467058989593,0 -13890,50,-3.03806042040441,0 -13940,50,-2.89060279328576,0 -13990,50,-3.02619601362475,0 -13993,36,-3.02619601362475,0 -14060,36,-3.12789092887898,0 -14070,36,-2.78890787803153,0 -14080,36,-2.48382313226882,0 -14090,36,-1.99907736955695,0 -14100,0,-1.57365364074339,20 -14101,11,-1.57365364074339,0 -14110,11,-1.13975533565865,0 -14120,11,-0.597382454302715,0 -14130,11,-0.444840081421359,0 -14140,11,-0.231280759387461,0 -14160,11,-0.0685688949806816,0 -14170,11,0.102617545697284,0 -14180,11,0.211092121968471,0 -14208,0,0.211092121968471,20 -14209,48,0.211092121968471,0 -14250,48,0.485668393154912,0 -14260,48,0.79922771518881,0 -14270,48,1.12804127451084,0 -14280,48,1.48227856264644,0 -14290,48,1.83143110501932,0 -14300,48,2.13990568129051,0 -14310,48,2.41109212196847,0 -14320,48,2.62804127451084,0 -14330,48,2.78227856264644,0 -14380,48,2.47380398637525,0 -14390,48,2.25515991857864,0 -14400,48,2.04838025756169,0 -14410,48,1.84329551179898,0 -14420,48,1.63482093552779,0 -14430,48,1.46532941010406,0 -14440,48,1.28566839315491,0 -14450,48,1.08905822366339,0 -14460,48,0.880583647392201,0 -14470,48,0.660244664341353,0 -14480,48,0.41787178298542,0 -14490,48,0.112787037222708,0 -14500,48,-0.185518047523055,0 -14510,48,-0.510941776336614,0 -14520,48,-0.861789233963733,0 -14530,48,-1.22789092887899,0 -14540,48,-1.58890787803153,0 -14550,48,-1.92789092887899,0 -14560,48,-2.2600943187095,0 -14570,48,-2.55670448820102,0 -14580,48,-2.77704347125187,0 -14590,48,-2.90416211531966,0 -14620,48,-2.63806042040441,0 -14630,48,-2.3329756746417,0 -14640,48,-1.97195872548916,0 -14650,48,-1.57704347125187,0 -14660,48,-1.16178923396373,0 -14670,48,-0.738060420404412,0 -14680,48,-0.305857030573901,0 -14690,48,0.100922630443048,0 -14700,48,0.47380398637525,0 -14710,48,0.806007376205759,0 -14720,48,1.09583788468034,0 -14730,48,1.33312602027356,0 -14737,38,1.33312602027356,0 -14740,38,1.50092263044305,0 -14780,38,1.28397347790067,0 -14785,47.9,1.28397347790067,0 -14790,47.9,0.995837884680336,0 -14800,47.9,0.59922771518881,0 -14810,47.9,0.185668393154911,0 -14820,47.9,-0.214331606845088,0 -14830,47.9,-0.568568894980682,0 -14840,47.9,-0.85670448820102,0 -14850,47.9,-1.07704347125187,0 -14860,47.9,-1.24145025091288,0 -14870,47.9,-1.38043330176034,0 -14880,47.9,-1.52958584413322,0 -14890,47.9,-1.71772143735356,0 -14900,47.9,-1.96348414921797,0 -14910,47.9,-2.28551804752306,0 -14920,47.9,-2.60246720006543,0 -14930,47.9,-2.92111126786204,0 -14940,47.9,-3.21094177633661,0 -14950,47.9,-3.44822991192984,0 -14960,47.9,-3.61602652209933,0 -14977,55,-3.61602652209933,0 -14980,55,-3.73467058989593,0 -15090,55,-3.62450109837051,0 -15110,55,-3.49399262379424,0 -15140,55,-3.61772143735356,0 -15150,55,-3.75331465769254,0 -15160,55,-3.93467058989593,0 -15170,55,-4.09568753904848,0 -15180,55,-4.20246720006543,0 -15200,55,-4.06856889498068,0 -15210,55,-3.76348414921797,0 -15220,55,-3.27026381023492,0 -15230,55,-2.66856889498068,0 -15240,55,-1.98721296277729,0 -15241,48,-1.98721296277729,0 -15250,48,-1.28721296277729,0 -15260,48,-0.63806042040441,0 -15270,48,-0.0956875390484788,0 -15277,57.7,-0.0956875390484788,0 -15280,57.7,0.324651444002369,0 -15290,57.7,0.602617545697284,0 -15300,57.7,0.750075172815928,0 -15340,57.7,0.531431105019318,0 -15350,57.7,0.411092121968471,0 -15360,57.7,0.294142969426098,0 -15370,57.7,0.183973477900674,0 -15390,57.7,0.00261754569728446,0 -15410,57.7,-0.175348555997631,0 -15430,57.7,-0.355009572946783,0 -15450,57.7,-0.53806042040441,0 -15470,57.7,-0.710941776336613,0 -15490,57.7,-0.868568894980681,0 -15510,57.7,-1.07534855599763,0 -15520,57.7,-1.2058570305739,0 -15530,57.7,-1.35331465769255,0 -15540,57.7,-1.48721296277729,0 -15550,57.7,-1.59738245430272,0 -15570,57.7,-1.76009431870949,0 -15620,57.7,-1.55839940345526,0 -15630,57.7,-1.37195872548916,0 -15640,57.7,-1.17026381023492,0 -15650,57.7,-0.943145166167123,0 -15660,57.7,-0.746534996675597,0 -15670,57.7,-0.592297708540003,0 -15680,57.7,-0.466873979726444,0 -15690,57.7,-0.365179064472207,0 -15697,52,-0.365179064472207,0 -15700,52,-0.249924827184072,0 -15710,52,-0.134670589895936,0 -15720,52,-0.0329756746416986,0 -15733,58,-0.0329756746416986,0 -15760,58,-0.180433301760343,0 -15770,58,-0.383823132268817,0 -15780,58,-0.60077228481119,0 -15790,58,-0.800772284811191,0 -15800,58,-0.960094318709496,0 -15810,58,-1.07873838650611,0 -15850,58,-0.895687539048479,0 -15860,58,-0.758399403455258,0 -15870,58,-0.605857030573901,0 -15880,58,-0.471958725489156,0 -15890,58,-0.353314657692546,0 -15900,58,-0.227890928878987,0 -15910,58,-0.0956875390484782,0 -15920,58,0.0399056812905048,0 -15930,58,0.192448054171861,0 -15940,58,0.343295511798979,0 -15950,58,0.49244805417186,0 -15960,58,0.641600596544742,0 -15970,58,0.785668393154912,0 -15980,58,0.912787037222709,0 -16000,58,1.05007517281593,0 -16020,58,0.941600596544743,0 -16030,58,0.761939579595591,0 -16040,58,0.524651444002369,0 -16050,58,0.270414155866776,0 -16060,58,0.00261754569728435,0 -16070,58,-0.227890928878987,0 -16080,58,-0.405857030573902,0 -16090,58,-0.531280759387461,0 -16110,58,-0.660094318709495,0 -16200,58,-0.527890928878987,0 -16210,58,-0.405857030573902,0 -16220,58,-0.232975674641699,0 -16230,58,-0.0295858441332239,0 -16240,58,0.124651444002369,0 -16250,58,0.238210766036268,0 -16340,58,0.465329410104064,0 -16350,58,0.668719240612538,0 -16360,58,0.931431105019318,0 -16370,58,1.25854974908711,0 -16380,58,1.6534650033244,0 -16390,58,2.10431246095152,0 -16400,58,2.59075313891762,0 -16410,58,3.09922771518881,0 -16420,58,3.58397347790067,0 -16430,58,3.96871924061254,0 -16440,58,4.21956669823965,0 -16441,48,4.21956669823965,0 -16450,48,4.32804127451084,0 -16470,48,4.11448195247694,0 -16477,62.5,4.11448195247694,0 -16480,62.5,3.73821076603627,0 -16490,62.5,3.29075313891762,0 -16500,62.5,2.79753279993458,0 -16510,62.5,2.27380398637525,0 -16520,62.5,1.74499042705321,0 -16530,62.5,1.23651585078203,0 -16540,62.5,0.817871782985421,0 -16550,62.5,0.475498901629488,0 -16560,62.5,0.241600596544742,0 -16570,62.5,0.121261613493895,0 -16600,62.5,0.341600596544742,0 -16610,62.5,0.494142969426098,0 -16620,62.5,0.64329551179898,0 -16630,62.5,0.7805836473922,0 -16640,62.5,0.894142969426099,0 -16650,62.5,1.01278703722271,0 -16660,62.5,1.17549890162949,0 -16670,62.5,1.35685483383288,0 -16680,62.5,1.53143110501932,0 -16690,62.5,1.68905822366339,0 -16700,62.5,1.81617686773118,0 -16710,62.5,1.91787178298542,0 -16730,62.5,2.07210907112101,0 -16740,62.5,2.1805836473922,0 -16750,62.5,2.31617686773118,0 -16760,62.5,2.48736330840915,0 -16770,62.5,2.69075313891762,0 -16780,62.5,2.87549890162949,0 -16790,62.5,3.06871924061254,0 -16800,62.5,3.27719381688372,0 -16810,62.5,3.50431246095152,0 -16820,62.5,3.7534650033244,0 -16830,62.5,4.00770229146,0 -16840,62.5,4.26024466434135,0 -16849,56.9,4.26024466434135,0 -16850,56.9,4.46024466434135,0 -16860,56.9,4.60770229146,0 -16900,56.9,4.41787178298542,0 -16910,56.9,4.24160059654474,0 -16920,56.9,4.06532941010406,0 -16930,56.9,3.92126161349389,0 -16970,56.9,4.06193957959559,0 -16980,56.9,4.26532941010406,0 -16990,56.9,4.51617686773118,0 -17000,56.9,4.79922771518881,0 -17010,56.9,5.08736330840915,0 -17020,56.9,5.37041415586678,0 -17030,56.9,5.62973618976508,0 -17040,56.9,5.84329551179898,0 -17050,56.9,6.00261754569728,0 -17060,56.9,6.11109212196846,0 -17130,56.9,5.98227856264644,0 -17140,56.9,5.87210907112102,0 -17150,56.9,5.69244805417186,0 -17160,0,5.45515991857864,30 -17161,52,5.45515991857864,0 -17170,52,5.17210907112102,0 -17180,52,4.84668534230745,0 -17190,52,4.47380398637525,0 -17200,52,4.10939720671423,0 -17210,52,3.71956669823965,0 -17220,52,3.31956669823965,0 -17230,52,2.9263463592566,0 -17240,52,2.54668534230745,0 -17250,52,2.19075313891762,0 -17260,52,1.87380398637525,0 -17270,52,1.58566839315491,0 -17280,52,1.28736330840915,0 -17290,52,0.972109071121014,0 -17300,52,0.650075172815928,0 -17310,52,0.294142969426098,0 -17320,52,-0.0414502509128849,0 -17330,52,-0.32619601362475,0 -17340,52,-0.54484008142136,0 -17350,52,-0.699077369556953,0 -17370,52,-0.802467200065427,0 -17430,52,-0.956704488201021,0 -17450,52,-1.16856889498068,0 -17460,52,-1.27704347125187,0 -17473,71,-1.27704347125187,0 -17480,71,-1.45161974243831,0 -17500,71,-1.58382313226882,0 -17520,71,-1.77195872548916,0 -17530,71,-1.92111126786204,0 -17540,71,-2.11433160684509,0 -17550,71,-2.36856889498068,0 -17560,71,-2.64992482718407,0 -17570,71,-2.9465349966756,0 -17580,71,-3.23806042040441,0 -17590,71,-3.48890787803153,0 -17600,71,-3.65670448820102,0 -17630,71,-3.46348414921797,0 -17640,71,-3.18043330176034,0 -17650,71,-2.82958584413322,0 -17660,71,-2.44484008142136,0 -17670,71,-2.05500957294678,0 -17680,71,-1.76517906447221,0 -17690,71,-1.52111126786204,0 -17700,71,-1.31772143735356,0 -17710,71,-1.15500957294678,0 -17720,71,-1.02111126786204,0 -17730,71,-0.85161974243831,0 -17740,71,-0.58890787803153,0 -17750,71,-0.285518047523054,0 -17760,71,0.0500751728159289,0 -17770,71,0.407702291459996,0 -17780,71,0.767024325358301,0 -17790,71,1.08905822366339,0 -17800,71,1.31109212196847,0 -17810,71,1.43990568129051,0 -17850,71,1.22634635925661,0 -17857,67,1.22634635925661,0 -17860,67,1.09075313891762,0 -17870,67,0.970414155866775,0 -17890,67,0.804312460951523,0 -17920,67,1.01787178298542,0 -17930,67,1.24329551179898,0 -17940,67,1.53143110501932,0 -17950,67,1.86024466434135,0 -17960,67,2.20939720671423,0 -17970,67,2.56532941010406,0 -17980,67,2.88397347790067,0 -17990,67,3.13821076603627,0 -18000,67,3.30939720671423,0 -18030,67,3.11448195247694,0 -18040,67,2.75515991857864,0 -18050,67,2.31109212196847,0 -18060,67,1.83312602027356,0 -18070,67,1.37041415586678,0 -18080,67,0.970414155866774,0 -18090,67,0.682278562646436,0 -18100,67,0.560244664341352,0 -18130,67,0.751770088070166,0 -18140,67,0.900922630443048,0 -18150,67,1.0534650033244,0 -18160,67,1.23312602027356,0 -18170,67,1.41617686773118,0 -18180,67,1.60770229146,0 -18190,67,1.82465144400237,0 -18200,67,2.07719381688373,0 -18210,67,2.34838025756169,0 -18220,67,2.61278703722271,0 -18230,67,2.90431246095152,0 -18240,67,3.20431246095152,0 -18250,67,3.49244805417186,0 -18260,67,3.7534650033244,0 -18270,67,3.97380398637525,0 -18280,67,4.11109212196847,0 -18320,67,3.84668534230745,0 -18330,67,3.59244805417186,0 -18340,67,3.27888873213797,0 -18350,67,2.96024466434135,0 -18360,67,2.64329551179898,0 -18370,67,2.35515991857864,0 -18380,67,2.12804127451084,0 -18390,67,1.92465144400237,0 -18400,67,1.82126161349389,0 -18420,67,1.64329551179898,0 -18440,67,1.49075313891762,0 -18460,67,1.29244805417186,0 -18470,67,1.17210907112101,0 -18480,67,1.04668534230745,0 -18490,67,0.907702291459996,0 -18500,67,0.758549749087115,0 -18510,67,0.622956528748132,0 -18530,67,0.45515991857864,0 -18570,67,0.339905681290505,0 -18600,67,0.231431105019318,0 -18670,67,0.392448054171861,0 -18680,67,0.494142969426098,0 -18690,67,0.595837884680335,0 -18710,67,0.738210766036267,0 -18750,67,0.622956528748132,0 -18770,67,0.487363308409148,0 -18820,67,0.602617545697284,0 -18840,67,0.763634494849827,0 -18860,67,0.951770088070167,0 -18880,67,1.10431246095152,0 -18920,67,0.919566698239657,0 -18930,67,0.767024325358301,0 -18940,67,0.59922771518881,0 -18950,67,0.456854833832878,0 -18960,67,0.333126020273556,0 -18970,67,0.229736189765081,0 -18990,67,0.0449904270532167,0 -19000,67,-0.0855180475230545,0 -19010,67,-0.268568894980682,0 -19020,67,-0.521111267862037,0 -19030,67,-0.849924827184071,0 -19040,67,-1.23806042040441,0 -19050,67,-1.66178923396373,0 -19060,67,-2.12619601362475,0 -19070,67,-2.61772143735356,0 -19080,67,-3.08043330176034,0 -19090,67,-3.49060279328577,0 -19100,67,-3.8465349966756,0 -19110,67,-4.13467058989594,0 -19120,67,-4.29060279328577,0 -19150,67,-4.10924686108237,0 -19160,67,-3.8787383865061,0 -19170,67,-3.55670448820102,0 -19180,67,-3.16178923396373,0 -19190,67,-2.73636550515017,0 -19200,67,-2.28551804752306,0 -19210,67,-1.81263669159085,0 -19220,67,-1.33467058989593,0 -19230,67,-0.877043471251866,0 -19240,67,-0.477043471251868,0 -19250,67,-0.13806042040441,0 -19260,67,0.114481952476945,0 -19270,67,0.283973477900674,0 -19280,67,0.387363308409149,0 -19340,67,0.551770088070166,0 -19360,67,0.704312460951521,0 -19400,67,0.604312460951521,0 -19410,67,0.485668393154912,0 -19420,67,0.351770088070166,0 -19430,67,0.241600596544742,0 -19450,67,0.13651585078203,0 -19480,67,0.24329551179898,0 -19500,67,0.346685342307454,0 -19530,67,0.477193816883725,0 -19600,67,0.309397206714234,0 -19610,67,0.190753138917624,0 -19620,67,0.0653294101040642,0 -19630,67,-0.0567044882010206,0 -19650,67,-0.2194163526078,0 -19680,67,-0.366873979726445,0 -19700,67,-0.492297708540004,0 -19720,67,-0.646534996675597,0 -19750,67,-0.746534996675597,0 -19800,67,-0.85670448820102,0 -19820,67,-0.973653640743394,0 -19840,67,-1.10924686108238,0 -19880,67,-0.983823132268817,0 -19890,67,-0.848229911929834,0 -19900,67,-0.697382454302715,0 -19910,67,-0.534670589895936,0 -19920,67,-0.377043471251868,0 -19930,67,-0.229585844133224,0 -19940,67,-0.0753485559976307,0 -19950,67,0.128041274510844,0 -19960,67,0.390753138917624,0 -19970,67,0.682278562646437,0 -19980,67,0.977193816883726,0 -19990,67,1.23482093552779,0 -20000,67,1.41787178298542,0 -20030,67,1.2399056812905,0 -20040,67,0.994142969426097,0 -20050,67,0.716176867731183,0 -20060,67,0.411092121968471,0 -20070,67,0.0721090711210132,0 -20080,67,-0.273653640743394,0 -20090,67,-0.622806183116275,0 -20100,67,-0.982128217014581,0 -20110,67,-1.34314516616712,0 -20120,67,-1.69060279328577,0 -20130,67,-2.02958584413323,0 -20140,67,-2.29738245430272,0 -20150,67,-2.53806042040441,0 -20160,67,-2.74314516616712,0 -20170,67,-2.91433160684509,0 -20180,67,-3.05331465769255,0 -20220,67,-2.88721296277729,0 -20230,67,-2.62450109837051,0 -20240,67,-2.26856889498068,0 -20245,46,-2.26856889498068,0 -20250,46,-1.87873838650611,0 -20257,72,-1.87873838650611,0 -20260,72,-1.46178923396373,0 -20270,72,-1.08043330176034,0 -20280,72,-0.777043471251867,0 -20290,72,-0.57534855599763,0 -20300,72,-0.473653640743393,0 -20340,72,-0.592297708540004,0 -20370,72,-0.465179064472207,0 -20390,72,-0.277043471251868,0 -20410,72,-0.132975674641698,0 -20480,72,-0.0160265220993257,0 -20510,72,-0.14484008142136,0 -20520,72,-0.28212821701458,0 -20530,72,-0.439755335658648,0 -20540,72,-0.604162115319664,0 -20550,72,-0.75670448820102,0 -20600,72,-0.6194163526078,0 -20610,72,-0.466873979726445,0 -20620,72,-0.302467200065428,0 -20630,72,-0.112636691590851,0 -20640,72,0.114481952476946,0 -20650,72,0.370414155866776,0 -20660,72,0.639905681290505,0 -20670,72,0.928041274510844,0 -20680,72,1.1805836473922,0 -20689,67,1.1805836473922,0 -20690,67,1.36871924061254,0 -20700,67,1.48905822366339,0 -20730,67,1.38736330840915,0 -20740,67,1.20600737620576,0 -20750,67,0.985668393154912,0 -20760,67,0.707702291459997,0 -20770,67,0.375498901629488,0 -20780,67,0.00431246095152172,0 -20790,67,-0.402467200065428,0 -20800,67,-0.8194163526078,0 -20810,67,-1.2600943187095,0 -20820,67,-1.69060279328577,0 -20830,67,-2.10924686108238,0 -20840,67,-2.54314516616712,0 -20850,67,-3.00077228481119,0 -20860,67,-3.43636550515017,0 -20870,67,-3.83128075938746,0 -20880,67,-4.19738245430272,0 -20890,67,-4.49568753904848,0 -20900,67,-4.67873838650611,0 -20910,67,-4.78043330176035,0 -20917,73,-4.78043330176035,0 -20980,73,-4.91433160684508,0 -21010,73,-4.6600943187095,0 -21020,73,-4.39229770854,0 -21030,73,-4.03636550515017,0 -21040,73,-3.67026381023492,0 -21050,73,-3.29060279328576,0 -21060,73,-2.93636550515017,0 -21070,73,-2.62111126786204,0 -21080,73,-2.3465349966756,0 -21090,73,-2.12619601362475,0 -21100,73,-1.95839940345526,0 -21120,73,-1.83806042040441,0 -21160,73,-1.97026381023492,0 -21180,73,-1.86178923396373,0 -21200,73,-2.00077228481119,0 -21210,73,-2.20416211531967,0 -21217,50,-2.20416211531967,0 -21220,50,-2.3465349966756,0 -21229,59,-2.3465349966756,0 -21230,59,-2.46009431870949,0 -21240,59,-2.65161974243831,0 -21260,59,-2.37195872548915,0 -21270,59,-2.01602652209932,0 -21280,59,-1.62111126786204,0 -21290,59,-1.17195872548916,0 -21300,59,-0.697382454302716,0 -21310,59,-0.207551945828139,0 -21320,59,0.289058223663386,0 -21330,59,0.763634494849827,0 -21340,59,1.15007517281593,0 -21350,59,1.45685483383288,0 -21360,59,1.67549890162949,0 -21370,59,1.81109212196847,0 -21390,59,1.93821076603627,0 -21420,59,2.12126161349389,0 -21430,59,2.24499042705322,0 -21440,59,2.37888873213796,0 -21450,59,2.51448195247695,0 -21460,59,2.63312602027356,0 -21480,59,2.77210907112101,0 -21520,59,2.61956669823966,0 -21540,59,2.4534650033244,0 -21560,59,2.24160059654474,0 -21570,59,2.10600737620576,0 -21580,59,1.94160059654475,0 -21590,59,1.76193957959559,0 -21600,59,1.56024466434135,0 -21610,59,1.35515991857864,0 -21620,59,1.17380398637525,0 -21630,59,1.00431246095152,0 -21640,59,0.900922630443047,0 -21660,59,0.768719240612539,0 -21697,52.9,0.768719240612539,0 -21710,52.9,0.889058223663386,0 -21730,52.9,0.997532799934573,0 -21790,52.9,0.885668393154911,0 -21800,52.9,0.7805836473922,0 -21810,52.9,0.644990427053217,0 -21820,52.9,0.511092121968471,0 -21840,52.9,0.341600596544742,0 -21841,48,0.341600596544742,0 -21860,48,0.189058223663386,0 -21880,48,0.0212616134938946,0 -21889,55,0.0212616134938946,0 -21900,55,-0.168568894980682,0 -21920,55,-0.28212821701458,0 -21990,55,-0.397382454302716,0 -22010,55,-0.5194163526078,0 -22030,55,-0.63806042040441,0 -22080,55,-0.741450250912886,0 -22110,55,-0.624501098370512,0 -22130,55,-0.470263810234919,0 -22150,55,-0.287212962777292,0 -22160,55,-0.183823132268817,0 -22170,55,-0.0482299119298341,0 -22177,50.9,-0.0482299119298341,0 -22180,50.9,0.131431105019318,0 -22190,50.9,0.365329410104064,0 -22200,50.9,0.641600596544742,0 -22210,50.9,0.953465003324404,0 -22220,50.9,1.29244805417186,0 -22230,50.9,1.68227856264644,0 -22240,50.9,2.06532941010406,0 -22250,50.9,2.43651585078203,0 -22260,50.9,2.78397347790067,0 -22270,50.9,3.10600737620576,0 -22280,50.9,3.39583788468034,0 -22290,50.9,3.65007517281593,0 -22300,50.9,3.82126161349389,0 -22310,50.9,3.92634635925661,0 -22333,47.9,3.92634635925661,0 -22340,47.9,3.72465144400237,0 -22350,47.9,3.4534650033244,0 -22360,47.9,3.13821076603626,0 -22370,47.9,2.80770229145999,0 -22380,47.9,2.49244805417186,0 -22390,47.9,2.20431246095152,0 -22400,47.9,1.94668534230746,0 -22410,47.9,1.72634635925661,0 -22420,47.9,1.54329551179898,0 -22430,47.9,1.36193957959559,0 -22440,47.9,1.19583788468033,0 -22441,44.9,1.19583788468033,0 -22450,44.9,1.05177008807017,0 -22460,44.9,0.919566698239657,0 -22470,44.9,0.783973477900675,0 -22480,44.9,0.667024325358301,0 -22500,44.9,0.550075172815928,0 -22550,44.9,0.665329410104065,0 -22573,37,0.665329410104065,0 -22580,37,0.565329410104064,0 -22590,37,0.463634494849826,0 -22610,37,0.306007376205759,0 -22660,37,0.163634494849827,0 -22670,37,0.0297361897650809,0 -22680,37,-0.143145166167122,0 -22690,37,-0.314331606845088,0 -22700,37,-0.45670448820102,0 -22750,37,-0.197382454302716,0 -22760,37,-0.0143316068450883,0 -22765,23,-0.0143316068450883,0 -22770,23,0.172109071121013,0 -22780,23,0.294142969426098,0 -22810,23,0.150075172815928,0 -22820,23,-0.0838231322688173,0 -22830,23,-0.405857030573902,0 -22840,23,-0.755009572946784,0 -22850,23,-1.07026381023492,0 -22860,23,-1.30755194582814,0 -22870,23,-1.42958584413323,0 -22890,23,-1.25500957294679,0 -22900,23,-0.958399403455257,0 -22910,23,-0.629585844133223,0 -22920,23,-0.200772284811189,0 -22930,23,0.243295511798979,0 -22940,23,0.504312460951522,0 -22950,23,0.60600737620576,0 -22956,0,0.60600737620576,30 -22957,26,0.60600737620576,0 -22980,26,0.282278562646437,0 -22990,26,-0.0499248271840715,0 -23000,26,-0.36348414921797,0 -23010,26,-0.702467200065427,0 -23020,26,-1.16009431870949,0 -23030,26,-1.70246720006543,0 -23040,26,-2.29060279328576,0 -23050,26,-2.86009431870949,0 -23060,26,-3.34653499667559,0 -23070,26,-3.75331465769254,0 -23080,26,-3.89907736955695,0 -23090,26,-4.08043330176034,0 -23100,26,-3.80924686108238,0 -23110,26,-3.03806042040441,0 -23120,26,-2.20416211531966,0 -23130,26,-1.35670448820102,0 -23136,0,-1.35670448820102,25 -23137,24,-1.35670448820102,0 -23140,24,-0.809246861082378,0 -23150,24,-0.143145166167122,0 -23160,24,0.0653294101040642,0 -23170,24,-0.0448400814213595,0 -23200,24,0.144990427053216,0 -23210,24,0.509397206714234,0 -23220,24,0.856854833832878,0 -23230,24,1.12465144400237,0 -23240,24,1.26363449484983,0 -23257,85,1.26363449484983,0 -23260,85,1.0212616134939,0 -23270,85,0.677193816883726,0 -23280,85,0.243295511798979,0 -23290,85,-0.214331606845089,0 -23300,85,-0.63806042040441,0 -23310,85,-1.01094177633661,0 -23320,85,-1.23467058989594,0 -23330,85,-1.3600943187095,0 -23370,85,-1.16687397972644,0 -23380,85,-1.06517906447221,0 -23390,85,-0.939755335658647,0 -23400,85,-0.832975674641699,0 -23420,85,-0.671958725489156,0 -23440,85,-0.521111267862037,0 -23460,85,-0.365179064472207,0 -23480,85,-0.185518047523054,0 -23490,85,-0.0668739797264443,0 -23500,85,0.0348209355277929,0 -23520,85,0.197532799934573,0 -23580,85,0.0127870372227082,0 -23600,85,-0.170263810234919,0 -23620,85,-0.366873979726445,0 -23630,85,-0.485518047523055,0 -23640,85,-0.631280759387462,0 -23650,85,-0.793992623794242,0 -23660,85,-0.943145166167123,0 -23670,85,-1.07873838650611,0 -23690,85,-1.2194163526078,0 -23710,85,-1.37365364074339,0 -23720,85,-1.47365364074339,0 -23740,85,-1.59568753904848,0 -23770,85,-1.35331465769254,0 -23780,85,-1.1465349966756,0 -23790,85,-0.892297708540004,0 -23800,85,-0.59568753904848,0 -23810,85,-0.270263810234919,0 -23820,85,0.0517700880701661,0 -23830,85,0.365329410104064,0 -23840,85,0.658549749087115,0 -23850,85,0.912787037222708,0 -23860,85,1.05177008807017,0 -23900,85,0.833126020273556,0 -23910,85,0.646685342307454,0 -23920,85,0.463634494849827,0 -23930,85,0.29244805417186,0 -23940,85,0.134820935527793,0 -23950,85,0.00939720671423367,0 -23990,85,0.128041274510844,0 -24000,85,0.316176867731183,0 -24010,85,0.541600596544742,0 -24020,85,0.763634494849828,0 -24030,85,0.916176867731184,0 -24040,85,1.03482093552779,0 -24120,85,0.922956528748131,0 -24140,85,0.724651444002369,0 -24150,85,0.606007376205759,0 -24160,85,0.456854833832877,0 -24170,85,0.294142969426098,0 -24180,85,0.168719240612539,0 -24210,85,0.306007376205759,0 -24220,85,0.522956528748132,0 -24230,85,0.746685342307454,0 -24240,85,0.867024325358302,0 -24260,85,0.678888732137963,0 -24270,85,0.339905681290505,0 -24280,85,-0.0939926237942415,0 -24290,85,-0.531280759387461,0 -24300,85,-0.90077228481119,0 -24310,85,-1.18043330176034,0 -24320,85,-1.3787383865061,0 -24330,85,-1.48043330176034,0 -24360,85,-1.34822991192983,0 -24380,85,-1.17704347125187,0 -24400,85,-1.36687397972645,0 -24410,85,-1.68721296277729,0 -24420,85,-2.11433160684509,0 -24430,85,-2.59060279328577,0 -24440,85,-3.06517906447221,0 -24450,85,-3.47195872548916,0 -24460,85,-3.69738245430271,0 -24490,85,-3.54314516616712,0 -24500,85,-3.30416211531967,0 -24510,85,-3.04992482718407,0 -24520,85,-2.80077228481119,0 -24530,85,-2.58721296277729,0 -24540,85,-2.41602652209933,0 -24550,85,-2.28551804752306,0 -24560,85,-2.18382313226882,0 -24570,85,-2.06517906447221,0 -24590,85,-1.88551804752305,0 -24600,85,-1.77704347125187,0 -24610,85,-1.6600943187095,0 -24620,85,-1.54484008142136,0 -24630,85,-1.42619601362475,0 -24640,85,-1.2787383865061,0 -24650,85,-1.11602652209933,0 -24660,85,-0.949924827184071,0 -24670,85,-0.787212962777292,0 -24680,85,-0.639755335658648,0 -24690,85,-0.504162115319664,0 -24700,85,-0.388907878031529,0 -24710,85,-0.273653640743394,0 -24720,85,-0.166873979726445,0 -24730,85,-0.0550095729467833,0 -24740,85,0.0805836473921997,0 -24750,85,0.233126020273556,0 -24760,85,0.367024325358301,0 -24770,85,0.522956528748132,0 -24780,85,0.707702291459996,0 -24790,85,0.933126020273556,0 -24800,85,1.22295652874813,0 -24810,85,1.56193957959559,0 -24820,85,1.94499042705322,0 -24830,85,2.31617686773118,0 -24840,85,2.67549890162949,0 -24850,85,2.9941429694261,0 -24860,85,3.25515991857864,0 -24870,85,3.50939720671423,0 -24880,85,3.74160059654474,0 -24890,85,3.96193957959559,0 -24900,85,4.1534650033244,0 -24910,85,4.2941429694261,0 -24940,85,3.97719381688372,0 -24950,85,3.59075313891762,0 -24960,85,3.14329551179898,0 -24970,85,2.68397347790067,0 -24980,85,2.26532941010406,0 -24990,85,1.92634635925661,0 -25000,85,1.72295652874813,0 -25010,85,1.58905822366339,0 -25030,85,1.43651585078203,0 -25050,85,1.24668534230745,0 -25060,85,1.03651585078203,0 -25070,85,0.758549749087115,0 -25080,85,0.421261613493896,0 -25090,85,0.039905681290505,0 -25100,85,-0.355009572946783,0 -25110,85,-0.710941776336613,0 -25120,85,-0.980433301760342,0 -25130,85,-1.17026381023492,0 -25140,85,-1.28890787803153,0 -25160,85,-1.45161974243831,0 -25180,85,-1.63467058989594,0 -25190,85,-1.7600943187095,0 -25200,85,-1.90416211531966,0 -25210,85,-2.0465349966756,0 -25220,85,-2.18212821701458,0 -25230,85,-2.33467058989594,0 -25240,85,-2.48382313226882,0 -25250,85,-2.66856889498068,0 -25260,85,-2.91263669159085,0 -25270,85,-3.21772143735356,0 -25280,85,-3.57026381023492,0 -25290,85,-3.92619601362475,0 -25300,85,-4.2329756746417,0 -25310,85,-4.38721296277729,0 -25330,85,-4.14314516616712,0 -25340,85,-3.75331465769255,0 -25350,85,-3.24484008142136,0 -25360,85,-2.67704347125187,0 -25370,85,-2.17195872548916,0 -25380,85,-1.74484008142136,0 -25390,85,-1.39907736955695,0 -25400,85,-1.12958584413322,0 -25410,85,-0.92619601362475,0 -25420,85,-0.777043471251868,0 -25430,85,-0.639755335658647,0 -25440,85,-0.507551945828139,0 -25450,85,-0.380433301760343,0 -25460,85,-0.260094318709495,0 -25470,85,-0.107551945828139,0 -25480,85,0.011092121968471,0 -25490,85,0.139905681290505,0 -25520,85,-0.277043471251868,0 -25530,85,-0.751619742438309,0 -25540,85,-1.27195872548916,0 -25550,85,-1.84822991192983,0 -25560,85,-2.37026381023492,0 -25570,85,-2.71263669159085,0 -25580,85,-2.83128075938746,0 -25640,85,-2.71263669159085,0 -25660,85,-2.59399262379424,0 -25800,85,-2.70077228481119,0 -25830,85,-2.81772143735356,0 -25870,85,-2.94145025091289,0 -25920,85,-2.78721296277729,0 -25930,85,-2.68212821701458,0 -25940,85,-2.55839940345526,0 -25950,85,-2.38890787803153,0 -25960,85,-2.22280618311628,0 -25970,85,-2.02958584413323,0 -25980,85,-1.85670448820102,0 -25990,85,-1.71772143735356,0 -26000,85,-1.61094177633661,0 -26060,85,-1.48890787803153,0 -26070,85,-1.38721296277729,0 -26090,85,-1.17195872548916,0 -26100,85,-1.07195872548916,0 -26180,85,-0.765179064472207,0 -26190,85,-0.493992623794241,0 -26200,85,-0.177043471251868,0 -26210,85,0.102617545697284,0 -26220,85,0.333126020273555,0 -26230,85,0.512787037222708,0 -26240,85,0.65515991857864,0 -26250,85,0.756854833832877,0 -26300,85,0.587363308409149,0 -26320,85,0.485668393154912,0 -26420,85,0.606007376205759,0 -26500,85,0.500922630443047,0 -26540,85,0.602617545697285,0 -26600,85,0.706007376205758,0 -26620,85,0.836515850782031,0 -26640,85,1.04329551179898,0 -26650,85,1.16024466434135,0 -26660,85,1.2805836473922,0 -26670,85,1.43312602027355,0 -26680,85,1.56532941010406,0 -26690,85,1.71109212196847,0 -26700,85,1.86193957959559,0 -26710,85,2.01278703722271,0 -26720,85,2.15177008807017,0 -26750,85,1.98397347790067,0 -26760,85,1.6941429694261,0 -26770,85,1.31109212196847,0 -26780,85,0.875498901629488,0 -26790,85,0.451770088070165,0 -26800,85,0.160244664341352,0 -26810,85,-0.00924686108237656,0 -26840,85,0.121261613493895,0 -26850,85,0.273803986375251,0 -26860,85,0.407702291459996,0 -26869,67,0.407702291459996,0 -26870,67,0.539905681290505,0 -26880,67,0.663634494849826,0 -26890,67,0.778888732137962,0 -26900,67,0.895837884680335,0 -26910,67,1.01448195247695,0 -26920,67,1.13143110501932,0 -26930,67,1.23482093552779,0 -26950,67,1.3670243253583,0 -26953,46,1.3670243253583,0 -26990,46,1.5534650033244,0 -27000,46,1.77549890162949,0 -27010,46,2.14329551179898,0 -27020,46,2.66193957959559,0 -27025,64,2.66193957959559,0 -27030,64,3.28905822366339,0 -27040,64,3.94160059654474,0 -27050,64,4.52126161349389,0 -27060,64,4.96363449484982,0 -27070,64,5.22973618976508,0 -27100,64,5.08566839315491,0 -27110,64,4.82804127451084,0 -27120,64,4.47719381688373,0 -27130,64,4.00770229146,0 -27140,64,3.39753279993458,0 -27150,64,2.60092263044305,0 -27160,64,1.70261754569728,0 -27170,64,0.844990427053215,0 -27180,64,0.168719240612539,0 -27190,64,-0.2194163526078,0 -27210,64,0.104312460951522,0 -27220,64,0.812787037222708,0 -27230,64,1.68736330840915,0 -27240,64,2.58227856264644,0 -27250,64,3.39075313891763,0 -27260,64,4.06024466434135,0 -27270,64,4.56871924061254,0 -27280,64,4.84329551179898,0 -27290,64,4.95515991857864,0 -27320,64,4.83651585078203,0 -27330,64,4.6670243253583,0 -27340,64,4.50092263044304,0 -27350,64,4.33482093552779,0 -27360,64,4.16532941010407,0 -27370,64,4.01109212196848,0 -27380,64,3.88397347790067,0 -27390,64,3.78227856264643,0 -27420,64,3.64329551179898,0 -27440,64,3.4805836473922,0 -27450,64,3.31109212196847,0 -27460,64,3.06363449484983,0 -27470,64,2.77549890162949,0 -27480,64,2.49075313891762,0 -27490,64,2.23312602027356,0 -27500,64,2.01956669823966,0 -27505,32,2.01956669823966,0 -27510,32,1.91787178298542,0 -27517,51,1.91787178298542,0 -27570,51,1.80431246095152,0 -27580,51,1.67380398637525,0 -27590,51,1.5399056812905,0 -27600,51,1.39753279993457,0 -27610,51,1.23990568129051,0 -27620,51,1.07888873213796,0 -27630,51,0.943295511798979,0 -27650,51,0.74329551179898,0 -27670,51,0.606007376205759,0 -27800,51,0.450840618414617,0 -27816,0,0.450840618414617,2 +1,0,0,1 +2,85,0,0 +25,85,1.233905,0 +51,85,1.925336014,0 +62,85,1.920098091,0 +74,85,1.845022332,0 +85,85,1.330019306,0 +147,85,1.157204945,0 +219,85,1.684402001,0 +290,85,1.895654587,0 +309,85,2.012636315,0 +329,85,1.93406591,0 +350,85,2.028350691,0 +369,85,2.358376912,0 +393,85,2.512056999,0 +427,85,1.90787631,0 +484,85,0.582946573,0 +503,85,-0.356048672,0 +518,85,-0.467751651,0 +535,85,-0.371756843,0 +551,85,-0.043633234,0 +579,85,0.132645101,0 +608,85,0.050614553,0 +625,85,-0.136135766,0 +640,85,-0.272272036,0 +657,85,-0.471242386,0 +719,85,-0.528839693,0 +734,85,-0.635308395,0 +741,85,-0.846504906,0 +748,85,-1.047235832,0 +755,85,-1.090874051,0 +762,85,-1.061200018,0 +772,85,-1.000107003,0 +834,85,-1.012325545,0 +847,85,-1.028035143,0 +857,85,-1.043744792,0 +866,85,-1.062945544,0 +877,85,-1.111820542,0 +891,85,-1.15371382,0 +905,85,-0.949487644,0 +956,85,-0.942505703,0 +980,85,-0.944251187,0 +992,85,-0.968688032,0 +1001,85,-1.010580037,0 +1012,85,-1.022798605,0 +1018,85,-1.000107003,0 +1026,85,-0.92330541,0 +1035,85,-1.258448818,0 +1048,85,-1.302089201,0 +1064,85,-1.286378607,0 +1089,85,-1.275904913,0 +1127,85,-1.279396141,0 +1149,85,-1.289869845,0 +1170,85,-1.307326081,0 +1192,85,-1.356203968,0 +1233,85,-0.959960575,0 +1258,85,-0.584691962,0 +1270,85,-0.495677567,0 +1277,85,-0.694652215,0 +1292,85,-1.014071054,0 +1303,85,-1.242738398,0 +1314,85,-1.380643153,0 +1345,85,-1.340493149,0 +1362,85,-1.312562967,0 +1377,85,-0.912832552,0 +1404,85,-0.609127442,0 +1421,85,-0.478223861,0 +1453,85,-1.424284967,0 +1503,85,-1.78216981,0 +1529,85,-1.860735688,0 +1559,85,-2.416005601,0 +1590,85,-2.681468137,0 +1603,85,-2.831680536,0 +1624,85,-2.337421415,0 +1658,85,-1.920098091,0 +1683,85,-1.206080988,0 +1753,85,-0.012217305,0 +1824,85,0.335104471,0 +1842,85,2.295511036,0 +1857,85,2.045811226,0 +1866,85,1.649485716,0 +1874,85,0.897123302,0 +1885,85,0.21991184,0 +1896,85,0.319396339,0 +1916,85,0.926796367,0 +1932,85,1.420793603,0 +1957,85,1.422539285,0 +1981,85,1.399845486,0 +2006,85,1.443487537,0 +2052,85,1.401591157,0 +2078,85,0.417136111,0 +2158,85,0.29147081,0 +2180,85,0.181514442,0 +2209,85,-0.036651916,0 +2254,85,0.059341202,0 +2301,85,0.411900033,0 +2395,85,0.242601242,0 +2413,85,0.069813181,0 +2435,85,0.181514442,0 +2471,85,0.048869223,0 +2547,85,0.205949143,0 +2650,85,-0.006981317,0 +2700,85,-0.500913685,0 +2733,85,-0.799377824,0 +2759,85,-0.919814455,0 +2781,85,-0.928541847,0 +2799,85,-0.830795838,0 +2826,85,-0.729560571,0 +2844,85,-0.513131304,0 +2879,85,-0.499168312,0 +2921,85,-0.570728862,0 +2951,85,-0.340340518,0 +2990,85,-0.314160299,0 +3011,85,-0.389210388,0 +3061,85,-0.247837261,0 +3148,85,-0.703379288,0 +3235,85,-0.982651995,0 +3300,85,-0.895377833,0 +3336,85,-0.881414097,0 +3349,85,-1.118802728,0 +3547,85,-0.933778288,0 +3711,85,-0.897123302,0 +3763,85,-1.015816563,0 +3815,85,-1.108329454,0 +3934,85,-0.275762721,0 +3965,34,-0.275762721,0 +3986,38,-0.275762721,0 +4105,27,-0.275762721,0 +4121,49,-0.275762721,0 +4145,49,-0.258309304,0 +4159,49,-0.254818622,0 +4270,49,0.003490659,0 +4328,49,0.373502197,0 +4379,49,0.319396339,0 +4397,49,-0.006981317,0 +4423,49,-0.102974462,0 +4443,49,-0.125663772,0 +4468,49,-0.12391844,0 +4487,49,0.064577191,0 +4535,18,0.064577191,0 +4553,18,0.581201185,0 +4566,12,0.581201185,0 +4605,14,0.581201185,0 +4621,14,0.804614148,0 +4644,14,0.689415977,0 +4650,6,0.689415977,0 +4656,23,0.689415977,0 +4667,23,0.378738259,0 +4685,23,0.214675828,0 +4698,23,0.057595872,0 +4717,23,0.026179939,0 +4728,23,0.068067851,0 +4740,23,0.179769107,0 +4749,0,0.179769107,24 +4750,30,0.179769107,0 +4752,30,0.387465033,0 +4765,30,1.080400841,0 +4780,30,0.996615997,0 +4795,30,0.717342627,0 +4822,30,0.741778537,0 +4854,30,0.808105034,0 +4893,30,0.813341366,0 +4940,30,0.598655085,0 +4971,30,0.080285163,0 +4996,44,0.080285163,0 +5018,44,0.132645101,0 +5041,44,1.303834827,0 +5090,25,1.303834827,0 +5109,25,1.202589823,0 +5121,35,1.202589823,0 +5189,35,0.933778288,0 +5222,35,0.317650992,0 +5281,35,0.464260917,0 +5285,30,0.464260917,0 +5301,50,0.464260917,0 +5317,50,0.616109021,0 +5328,50,0.939014735,0 +5354,50,1.00883453,0 +5362,50,1.439996153,0 +5421,50,1.495858725,0 +5462,50,1.148477139,0 +5504,50,0.797632383,0 +5551,50,0.535821208,0 +5572,50,-0.366520784,0 +5601,50,-0.607382049,0 +5614,50,-0.376992904,0 +5641,43,-0.376992904,0 +5666,51,-0.376992904,0 +5672,51,-0.968688032,0 +5716,51,-1.305580453,0 +5745,51,-1.256703212,0 +5756,51,-0.263545327,0 +5796,51,0.083775824,0 +5808,51,0.619599813,0 +5871,52,0.619599813,0 +5877,52,0.410154674,0 +5946,52,0.29147081,0 +5996,52,0.97217902,0 +6100,52,0.699888458,0 +6187,52,0.48695071,0 +6195,19,0.48695071,0 +6205,47,0.48695071,0 +6225,47,0.376992904,0 +6272,47,0.394446457,0 +6294,47,0.242601242,0 +6329,47,0.195477125,0 +6372,47,0.22863853,0 +6402,47,0.174533102,0 +6434,47,0.603891262,0 +6492,47,0.778432569,0 +6522,47,0.582946573,0 +6534,0,0.582946573,18 +6535,28,0.582946573,0 +6551,28,0.258309304,0 +6607,28,0.780178004,0 +6641,10,0.780178004,0 +6646,47,0.780178004,0 +6664,47,1.195607503,0 +6707,47,1.148477139,0 +6790,47,1.186879618,0 +6815,47,1.066436598,0 +6871,47,0.767959967,0 +6955,26,0.767959967,0 +6971,50,0.767959967,0 +6975,50,0.382228968,0 +7101,50,0.399682527,0 +7127,50,0.619599813,0 +7164,50,0.698143043,0 +7192,50,0.642289997,0 +7225,50,0.694652215,0 +7243,50,0.467751651,0 +7267,50,0.314160299,0 +7273,50,0.02443461,0 +7275,43,0.02443461,0 +7288,43,-0.108210456,0 +7301,51,-0.108210456,0 +7303,51,-0.080285163,0 +7319,51,0.048869223,0 +7330,51,0.333359122,0 +7352,51,0.495677567,0 +7369,51,0.617854417,0 +7428,51,0.70687012,0 +7512,51,0.84825036,0 +7533,51,0.799377824,0 +7555,51,0.296706844,0 +7577,51,-0.410154674,0 +7579,0,-0.410154674,9 +7580,28,-0.410154674,0 +7594,28,-0.987888492,0 +7607,28,-1.300343577,0 +7617,28,-1.536010523,0 +7624,0,-1.536010523,6 +7625,26,-1.536010523,0 +7629,26,-1.647739913,0 +7643,26,-1.654723133,0 +7654,26,-1.659960559,0 +7665,26,-1.682656177,0 +7704,0,-1.682656177,5 +7705,34,-1.682656177,0 +7727,34,-1.687893652,0 +7740,34,-1.656468941,0 +7825,34,-1.55172223,0 +7854,34,-0.949487644,0 +7879,34,-0.689415977,0 +7893,34,-1.057708968,0 +7907,34,-1.801374596,0 +7910,39,-1.801374596,0 +7932,39,-0.874432242,0 +7947,39,-0.413645392,0 +7955,39,-0.017453293,0 +7964,39,0.033161257,0 +7971,11,0.033161257,0 +7974,11,-0.109955787,0 +7976,53,-0.109955787,0 +7986,53,-0.160570429,0 +7997,53,-0.003490659,0 +8033,53,0.165806431,0 +8048,53,0.347321918,0 +8063,53,0.555020401,0 +8102,53,0.523603561,0 +8123,53,0.452043355,0 +8128,53,0.137881098,0 +8137,53,-0.225147854,0 +8144,53,-0.724324306,0 +8152,53,-1.413810883,0 +8161,53,-2.061525814,0 +8173,53,-2.311227333,0 +8186,53,-2.077240504,0 +8201,53,-0.321141686,0 +8232,53,0.272272036,0 +8247,53,0.692906802,0 +8262,53,0.727815149,0 +8274,53,0.53233045,0 +8287,53,0.394446457,0 +8298,53,0.307178915,0 +8311,53,0.301942878,0 +8329,53,0.455534086,0 +8350,53,0.415390751,0 +8375,53,-0.305433569,0 +8400,53,-1.012325545,0 +8426,53,-0.745269388,0 +8460,53,0.516622055,0 +8478,53,2.293764787,0 +8483,10,2.293764787,0 +8494,47,2.293764787,0 +8496,47,2.587154946,0 +8508,47,2.023112554,0 +8516,47,1.279396141,0 +8524,47,-0.499168312,0 +8532,47,1.916606148,0 +8542,47,1.125784924,0 +8553,47,1.808358187,0 +8565,47,2.405527539,0 +8578,47,2.119146847,0 +8592,47,0.493932195,0 +8633,47,0.263545327,0 +8661,47,0.340340518,0 +8666,42,0.340340518,0 +8680,42,0.329868425,0 +8699,42,0.307178915,0 +8707,42,0.277508063,0 +8716,47,0.277508063,0 +8721,47,0.286234779,0 +8730,47,0.298452188,0 +8750,47,-0.054105212,0 +8781,47,-0.268781352,0 +8808,47,0.193731789,0 +8832,47,1.134512685,0 +8872,47,1.958509776,0 +8920,62,1.958509776,0 +8958,62,2.012636315,0 +8982,62,2.037080943,0 +8994,62,2.049303348,0 +9006,62,2.052795475,0 +9018,62,2.047557286,0 +9030,62,2.040573052,0 +9043,62,1.937557877,0 +9078,62,0.478223861,0 +9105,62,-0.094247808,0 +9124,62,-0.275762721,0 +9168,62,-0.240855903,0 +9189,62,-0.378738259,0 +9236,62,-0.53233045,0 +9249,62,-2.346152847,0 +9293,62,-3.546249164,0 +9367,62,-3.455380807,0 +9384,62,-2.948715289,0 +9396,62,-1.700114463,0 +9413,62,-0.598655085,0 +9426,62,0.387465033,0 +9442,62,0.488696081,0 +9457,62,0.280998749,0 +9472,62,-0.216421165,0 +9487,62,2.700680662,0 +9490,35,2.700680662,0 +9505,35,4.0478819,0 +9515,35,4.649412347,0 +9526,35,4.904812071,0 +9558,35,4.715880288,0 +9573,21,4.715880288,0 +9575,30,4.715880288,0 +9586,30,5.170775561,0 +9613,30,5.463069727,0 +9629,17,5.463069727,0 +9631,25,5.463069727,0 +9634,25,5.233777462,0 +9674,26,5.3527924,0 +9690,10,5.3527924,0 +9701,16,5.3527924,0 +9727,16,4.822587543,0 +9744,12,4.822587543,0 +9746,31,4.822587543,0 +9788,31,5.037784929,0 +9827,31,5.142776033,0 +9835,10,5.142776033,0 +9846,26,5.142776033,0 +9854,26,4.738620272,0 +9880,26,3.780437251,0 +9898,10,3.780437251,0 +9906,10,3.303363726,0 +9909,30,3.303363726,0 +9915,30,2.74609288,0 +9928,30,2.311227333,0 +9940,30,2.000414091,0 +9954,30,0.937269252,0 +9973,26,0.937269252,0 +9975,52,0.937269252,0 +9999,52,0.003490659,0 +10026,52,-0.783668876,0 +10045,52,-1.192116346,0 +10062,52,-1.024544117,0 +10101,52,-1.249720799,0 +10180,52,-0.804614148,0 +10212,10,-0.804614148,0 +10223,29,-0.804614148,0 +10283,29,-0.911087077,0 +10310,10,-0.911087077,0 +10321,21,-0.911087077,0 +10363,0,-0.911087077,5 +10364,50,-0.911087077,0 +10375,50,-0.827304939,0 +10501,50,-1.286378607,0 +10508,49,-1.286378607,0 +10519,49,-2.178515444,0 +10522,48,-2.178515444,0 +10547,48,-2.065017959,0 +10575,48,-1.337001865,0 +10596,48,0.492186823,0 +10628,48,1.537756265,0 +10651,48,2.695440863,0 +10699,48,2.714653533,0 +10720,0,2.714653533,10 +10721,42,2.714653533,0 +10734,42,1.988191927,0 +10771,42,0.863959475,0 +10801,41,0.863959475,0 +10809,42,0.863959475,0 +10821,43,0.863959475,0 +10832,43,0.136135766,0 +10861,43,-0.518367431,0 +10875,43,-1.441741844,0 +10887,10,-1.441741844,0 +10890,10,-2.305988554,0 +10898,45,-2.305988554,0 +10908,45,-2.524282051,0 +10920,45,-2.613352586,0 +10929,45,-2.683214722,0 +10936,45,-2.774039421,0 +10945,45,-2.817706761,0 +10953,45,-2.843907679,0 +10962,45,-2.852641405,0 +10983,45,-2.843907679,0 +10994,45,-2.79325292,0 +11008,44,-2.79325292,0 +11011,44,-2.311227333,0 +11064,44,-2.080732671,0 +11081,44,-1.941049848,0 +11091,44,-1.757727546,0 +11102,44,-1.555213731,0 +11111,44,-1.232264818,0 +11120,44,-0.680688921,0 +11131,44,0.37524755,0 +11149,10,1.15371382,0 +11163,10,1.652977327,0 +11178,10,1.824071332,0 +11180,48,1.824071332,0 +11189,48,2.052795475,0 +11201,48,2.344406558,0 +11212,48,2.42473736,0 +11227,48,2.410766564,0 +11240,48,2.337421415,0 +11254,48,2.297257285,0 +11267,48,2.236139374,0 +11279,48,2.110416298,0 +11289,48,2.178515444,0 +11313,48,2.305988554,0 +11331,48,1.962001775,0 +11351,48,1.572671293,0 +11369,48,1.19037077,0 +11382,48,3.623142336,0 +11394,18,3.623142336,0 +11396,25,3.623142336,0 +11397,25,4.840081575,0 +11407,25,5.349291746,0 +11414,25,5.554102253,0 +11421,25,5.53659529,0 +11427,25,5.225026951,0 +11436,25,5.137526211,0 +11442,10,5.137526211,0 +11443,10,4.418555185,0 +11452,10,3.693048931,0 +11453,11,3.693048931,0 +11456,10,3.693048931,0 +11460,10,2.953955838,0 +11463,14,2.953955838,0 +11470,14,2.440454618,0 +11477,14,1.923590039,0 +11484,14,1.333510584,0 +11491,14,0.637053795,0 +11492,6,0.637053795,0 +11494,7,0.637053795,0 +11499,7,-0.347321918,0 +11516,32,-0.347321918,0 +11518,32,-0.399682527,0 +11536,32,-0.324632381,0 +11554,32,-0.242601242,0 +11574,32,-0.33684982,0 +11596,32,-0.378738259,0 +11623,26,-0.378738259,0 +11625,31,-0.378738259,0 +11647,31,-0.006981317,0 +11689,31,0.829050388,0 +11760,7,0.829050388,0 +11762,41,0.829050388,0 +11775,41,0.860468557,0 +11851,41,0.902359714,0 +11891,41,0.490441452,0 +11916,41,0.064577191,0 +11935,41,-0.157079762,0 +11955,41,-0.230383869,0 +11972,41,-0.294961499,0 +11996,6,-0.294961499,0 +11998,36,-0.294961499,0 +11999,36,-0.298452188,0 +12024,36,-0.300197533,0 +12050,36,-0.356048672,0 +12076,34,-0.356048672,0 +12077,34,-0.593418911,0 +12078,38,-0.593418911,0 +12112,45,-0.593418911,0 +12124,45,-0.886650494,0 +12166,45,-0.685925153,0 +12221,45,-0.061086531,0 +12275,45,0.127409104,0 +12292,0,0.127409104,17 +12293,23,0.127409104,0 +12318,23,-0.050614553,0 +12361,23,-0.21991184,0 +12389,23,-0.253073282,0 +12419,23,-0.186750447,0 +12441,23,-0.102974462,0 +12451,18,-0.102974462,0 +12453,28,-0.102974462,0 +12464,28,-0.080285163,0 +12489,28,-2.763559418,0 +12515,30,-2.763559418,0 +12538,30,-2.601126976,0 +12569,30,-2.113908514,0 +12593,29,-2.113908514,0 +12600,29,-1.36493223,0 +12628,8,-1.36493223,0 +12630,28,-1.36493223,0 +12638,28,-1.071673185,0 +12656,28,-0.851741271,0 +12676,28,-0.909341604,0 +12697,28,-1.035017203,0 +12720,10,-1.035017203,0 +12729,10,-0.84825036,0 +12731,20,-0.84825036,0 +12758,20,-0.703379288,0 +12778,10,-0.703379288,0 +12789,8,-0.687670565,0 +12794,6,-0.687670565,0 +12796,56,-0.687670565,0 +12815,56,-0.684179742,0 +12828,56,-0.682434331,0 +12849,56,-0.694652215,0 +12883,56,-0.713851789,0 +12909,56,-0.724324306,0 +12923,56,-0.726069727,0 +12956,56,-0.684179742,0 +13000,56,-0.603891262,0 +13039,56,-0.488696081,0 +13041,10,-0.488696081,0 +13052,27,-0.488696081,0 +13076,27,-0.287980123,0 +13085,26,-0.287980123,0 +13110,27,-0.287980123,0 +13122,27,-0.214675828,0 +13141,27,-0.183259777,0 +13148,23,-0.183259777,0 +13150,26,-0.183259777,0 +13164,26,-0.233874546,0 +13174,25,-0.233874546,0 +13192,25,-0.376992904,0 +13220,25,-0.612618231,0 +13245,13,-0.612618231,0 +13247,36,-0.530585072,0 +13275,36,-0.333359122,0 +13289,36,-0.205949143,0 +13305,36,-0.139626431,0 +13320,36,-0.068067851,0 +13345,36,-0.047123893,0 +13349,7,-0.047123893,0 +13351,19,-0.047123893,0 +13377,19,-0.092502477,0 +13391,10,-0.092502477,0 +13402,23,-0.092502477,0 +13404,23,-0.277508063,0 +13434,32,-0.277508063,0 +13445,32,-0.752251097,0 +13491,40,-0.752251097,0 +13512,40,-0.815086811,0 +13551,40,-0.104719793,0 +13559,41,-0.104719793,0 +13589,38,-0.104719793,0 +13591,42,-0.104719793,0 +13596,42,0.129154436,0 +13609,42,0.136135766,0 +13621,42,-0.289725466,0 +13669,40,-0.574219635,0 +13715,43,-0.574219635,0 +13719,43,-0.626581401,0 +13765,43,-0.542802728,0 +13846,7,-0.542802728,0 +13848,29,-0.542802728,0 +13899,29,-0.574219635,0 +13932,29,-1.619807191,0 +13948,25,-1.619807191,0 +13950,29,-1.619807191,0 +13979,29,-3.423927712,0 +14026,29,-4.554964943,0 +14060,6,-4.554964943,0 +14062,49,-4.554964943,0 +14078,49,-4.009422337,0 +14106,49,-1.340493149,0 +14160,49,-0.776687134,0 +14175,49,-0.253073282,0 +14189,49,0.282744092,0 +14203,49,0.820323148,0 +14220,49,1.279396141,0 +14237,49,3.221245944,0 +14269,22,3.221245944,0 +14271,33,3.221245944,0 +14305,33,3.200280402,0 +14330,33,2.574929502,0 +14335,30,2.574929502,0 +14337,31,2.574929502,0 +14354,31,1.820579514,0 +14372,31,1.17466061,0 +14388,31,-1.539502007,0 +14404,22,-1.539502007,0 +14406,38,-1.539502007,0 +14408,38,0.345576568,0 +14427,38,0.092502477,0 +14439,38,0.527094315,0 +14456,38,-0.696397629,0 +14460,38,-0.808105034,0 +14463,38,-0.869195856,0 +14467,38,-0.870941317,0 +14470,38,-0.78715975,0 +14474,38,-0.623090606,0 +14478,38,-0.294961499,0 +14482,38,-0.389210388,0 +14512,38,0.087266485,0 +14541,7,0.087266485,0 +14543,30,0.087266485,0 +14559,30,0.010471976,0 +14583,30,-0.293216155,0 +14625,30,-0.425862912,0 +14631,10,-0.425862912,0 +14642,31,-0.425862912,0 +14666,31,-0.471242386,0 +14735,0,-0.471242386,7 +14736,51,-0.471242386,0 +14785,51,-0.307178915,0 +14816,51,0.188495782,0 +14847,51,0.277508063,0 +14868,51,-0.038397245,0 +14881,51,-0.282744092,0 +14894,51,-0.406663957,0 +14971,51,-0.314160299,0 +14980,0,-0.314160299,12 +14981,57,-0.314160299,0 +15019,57,-0.268781352,0 +15034,57,-0.209439816,0 +15063,57,-0.185005112,0 +15101,58,-0.185005112,0 +15105,58,-0.301942878,0 +15137,60,-0.301942878,0 +15172,64,-0.301942878,0 +15211,64,-0.35255797,0 +15232,64,-0.136135766,0 +15234,62,-0.136135766,0 +15254,61,-0.136135766,0 +15272,62,-0.136135766,0 +15316,62,-0.143117096,0 +15349,62,-0.411900033,0 +15389,61,-0.411900033,0 +15391,60,-0.411900033,0 +15412,62,-0.347321918,0 +15442,62,-0.017453293,0 +15455,61,-0.017453293,0 +15488,61,0.195477125,0 +15529,61,0.476478492,0 +15585,61,0.197222461,0 +15618,61,-0.284489436,0 +15632,64,-0.284489436,0 +15639,64,-0.614363626,0 +15661,64,-0.771450833,0 +15691,64,-0.734796839,0 +15704,64,-0.558511168,0 +15730,61,-0.558511168,0 +15732,59,-0.558511168,0 +15759,59,-0.287980123,0 +15784,59,0.537566588,0 +15812,59,0.715597208,0 +15822,59,0.268781352,0 +15829,57,0.268781352,0 +15852,57,-0.095993138,0 +15864,57,-0.237365224,0 +15875,57,0.246091921,0 +15896,58,0.246091921,0 +15914,58,-0.059341202,0 +15924,56,-0.059341202,0 +15938,56,-0.333359122,0 +15944,57,-0.333359122,0 +15963,57,0.464260917,0 +16002,57,-1.040253755,0 +16007,57,-1.513315968,0 +16029,57,-1.467927324,0 +16050,57,-0.900614243,0 +16085,11,-0.900614243,0 +16087,30,-0.900614243,0 +16135,30,-0.914578027,0 +16153,30,-1.078655309,0 +16161,28,-1.078655309,0 +16163,34,-1.078655309,0 +16216,34,-0.986142992,0 +16260,34,-0.37001149,0 +16299,10,-0.37001149,0 +16303,10,0.108210456,0 +16318,16,0.108210456,0 +16325,16,0.441571171,0 +16347,16,0.670216468,0 +16348,13,0.670216468,0 +16350,20,0.670216468,0 +16392,20,0.689415977,0 +16422,20,0.619599813,0 +16439,8,0.619599813,0 +16441,9,0.619599813,0 +16456,10,0.619599813,0 +16467,8,0.619599813,0 +16477,6,0.619599813,0 +16479,17,0.619599813,0 +16485,17,0.736542263,0 +16515,17,1.429522021,0 +16529,10,1.429522021,0 +16540,21,1.429522021,0 +16546,21,1.607586704,0 +16561,21,1.185134043,0 +16577,21,0.242601242,0 +16589,11,0.242601242,0 +16591,29,0.242601242,0 +16599,29,0.080285163,0 +16605,29,0.048869223,0 +16611,29,0.460770183,0 +16621,29,0.879668632,0 +16642,29,0.760978242,0 +16662,29,0.204203806,0 +16687,29,0.118682445,0 +16711,23,0.118682445,0 +16712,23,-0.031415928,0 +16713,25,-0.031415928,0 +16733,25,-2.255347678,0 +16768,11,-2.255347678,0 +16770,33,-2.255347678,0 +16783,33,-2.553971778,0 +16799,33,-2.183753923,0 +16817,33,1.022798605,0 +16835,33,0.822068595,0 +16880,33,0.66847106,0 +16894,10,0.66847106,0 +16902,10,-0.020943951,0 +16905,47,-0.020943951,0 +16930,47,-0.467751651,0 +16941,47,-1.565688257,0 +16975,47,-1.326528032,0 +16989,47,-0.342085868,0 +17003,47,1.062945544,0 +17019,47,1.831054981,0 +17029,47,2.358376912,0 +17041,47,2.353138019,0 +17054,47,2.13136967,0 +17061,47,1.722810389,0 +17069,47,0.305433569,0 +17088,47,-0.633562995,0 +17097,47,-3.432664615,0 +17122,47,-4.348607861,0 +17133,47,-4.820838156,0 +17138,16,-4.820838156,0 +17140,26,-4.820838156,0 +17143,26,-4.764859322,0 +17154,26,-4.025155651,0 +17166,26,-1.300343577,0 +17190,26,0.155334428,0 +17201,26,1.338747506,0 +17213,26,2.305988554,0 +17224,14,2.305988554,0 +17226,19,2.305988554,0 +17233,19,1.927081991,0 +17238,18,1.927081991,0 +17246,24,1.927081991,0 +17252,24,-0.240855903,0 +17292,24,-0.745269388,0 +17308,33,-0.745269388,0 +17316,33,-0.326377729,0 +17330,33,0.492186823,0 +17345,32,0.492186823,0 +17352,32,0.822068595,0 +17361,42,0.822068595,0 +17374,42,0.657998624,0 +17391,42,0.319396339,0 +17402,42,-0.58992813,0 +17411,41,-0.58992813,0 +17425,51,-0.58992813,0 +17427,51,-1.078655309,0 +17459,51,-0.710360954,0 +17490,51,-0.474733123,0 +17509,51,-0.544548109,0 +17525,51,-0.797632383,0 +17536,52,-0.797632383,0 +17539,52,-1.581400109,0 +17551,52,-2.354884315,0 +17558,52,-3.502561733,0 +17565,52,-4.910060668,0 +17577,51,-4.910060668,0 +17578,51,-5.363294439,0 +17590,51,-4.656408778,0 +17605,49,-4.656408778,0 +17606,49,-2.670988661,0 +17607,50,-2.670988661,0 +17621,50,-1.045490312,0 +17637,50,-0.7749417,0 +17645,48,-0.7749417,0 +17646,48,-0.62134521,0 +17660,48,-0.736542263,0 +17662,56,-0.736542263,0 +17671,56,-0.834286738,0 +17691,56,-0.303688223,0 +17707,57,-0.303688223,0 +17711,57,0.492186823,0 +17724,60,0.492186823,0 +17727,60,0.757487383,0 +17731,60,1.19037077,0 +17741,60,1.239247202,0 +17761,60,0.836032189,0 +17778,0,0.689415977,45 +17779,60,0.689415977,0 +17785,60,0.605636655,0 +17789,60,0.078539832,0 +17814,58,0.078539832,0 +17816,57,0.078539832,0 +17844,57,-0.401427884,0 +17852,56,-0.401427884,0 +17862,56,-0.678943511,0 +17925,56,-0.682434331,0 +17952,56,-0.127409104,0 +17956,10,-0.127409104,0 +17967,30,-0.127409104,0 +17979,30,-0.167551765,0 +17994,30,0.544548109,0 +18005,30,0.884905027,0 +18010,30,1.270668076,0 +18026,30,2.129623549,0 +18040,30,-1.211317741,0 +18047,30,-1.099601744,0 +18049,37,-1.099601744,0 +18081,37,-1.073418715,0 +18085,39,-1.073418715,0 +18108,39,-1.082146375,0 +18131,41,-1.082146375,0 +18140,41,-1.206080988,0 +18180,41,0.003490659,0 +18203,32,0.439825808,0 +18206,51,0.439825808,0 +18227,51,0.448552626,0 +18251,51,0.052359882,0 +18274,51,-0.275762721,0 +18293,51,-0.026179939,0 +18311,51,0.7697054,0 +18329,51,2.540000086,0 +18349,44,2.540000086,0 +18359,44,2.087717021,0 +18363,51,2.087717021,0 +18373,51,0.720833466,0 +18386,51,1.324782396,0 +18399,51,2.391556873,0 +18410,51,4.854077013,0 +18417,51,4.771856513,0 +18427,50,4.771856513,0 +18429,50,3.969215878,0 +18437,50,2.388064221,0 +18452,50,1.433013395,0 +18467,50,0.265290669,0 +18525,50,-1.303834827,0 +18566,50,-1.118802728,0 +18572,39,-1.118802728,0 +18574,41,-1.118802728,0 +18584,41,-1.726302086,0 +18598,41,-2.917272337,0 +18652,10,-2.917272337,0 +18663,7,-2.917272337,0 +18664,7,-7.061085137,0 +18665,41,-7.061085137,0 +18685,41,-8.815700402,0 +18704,41,-8.052835512,0 +18723,41,-5.083279701,0 +18739,41,2.274556149,0 +18759,42,2.274556149,0 +18869,10,2.274556149,0 +18880,28,2.274556149,0 +18988,12,2.274556149,0 +18989,26,2.274556149,0 +18991,61,2.274556149,0 +19053,61,2.356630613,0 +19067,61,3.175820958,0 +19080,61,4.201732221,0 +19098,61,4.268173684,0 +19115,61,3.460623056,0 +19137,61,-2.422991005,0 +19158,61,2.194230916,0 +19174,61,2.110416298,0 +19179,61,1.918352119,0 +19190,61,1.605840925,0 +19206,61,0.958215085,0 +19231,61,0.635308395,0 +19256,61,0.720833466,0 +19281,61,0.677198102,0 +19302,61,0.052359882,0 +19323,61,-0.654507815,0 +19339,61,-1.13974935,0 +19351,61,-1.797882807,0 +19372,61,-1.979461846,0 +19393,61,-1.071673185,0 +19427,61,-0.071558512,0 +19454,61,0.200713134,0 +19464,61,0.918068978,0 +19475,61,1.88867077,0 +19547,61,2.31821239,0 +19598,61,7.554142625,0 +19608,61,7.287391532,0 +19618,61,7.113708026,0 +19620,25,7.113708026,0 +19632,25,7.187386662,0 +19635,67,7.187386662,0 +19645,67,7.394430356,0 +19656,67,7.543610975,0 +19667,67,7.562919128,0 +19677,67,7.324239076,0 +19691,67,2.464903927,0 +19752,67,2.463157538,0 +19849,67,2.466650317,0 +19912,67,2.471889497,0 +19995,67,2.470143102,0 +20120,36,2.470143102,0 +20187,36,2.468396709,0 +20220,36,2.466650317,0 +20252,36,2.464903927,0 +20268,10,2.464903927,0 +20271,10,2.463157538,0 +20279,72,2.463157538,0 +20289,72,2.456171997,0 +20367,72,2.452679236,0 +20406,72,2.450932857,0 +20437,72,2.44918648,0 +20503,72,2.445693731,0 +20549,72,2.443947359,0 +20568,72,2.440454618,0 +20618,72,2.435215519,0 +20664,72,2.431722793,0 +20712,72,2.42473736,0 +20833,72,2.269317458,0 +20920,39,2.269317458,0 +20946,48,2.269317458,0 +20978,48,2.185500085,0 +21022,48,1.768202776,0 +21050,45,1.768202776,0 +21063,45,1.240992799,0 +21091,45,1.048981353,0 +21112,45,1.151968259,0 +21116,52,1.151968259,0 +21127,52,1.260194424,0 +21146,52,0.912832552,0 +21176,52,0.492186823,0 +21222,52,0.350812619,0 +21249,52,0.125663772,0 +21261,52,-0.256563963,0 +21284,52,0.169297099,0 +21308,52,-2.375839984,0 +21330,52,-5.324787537,0 +21353,52,-6.873428318,0 +21370,52,-7.254054974,0 +21388,52,-6.77874138,0 +21399,52,-6.089984561,0 +21413,52,-3.610909048,0 +21423,52,5.160275643,0 +21435,52,7.433038644,0 +21443,52,-3.942994966,0 +21462,52,-1.815341796,0 +21504,52,0.862214016,0 +21549,52,2.082478757,0 +21550,33,2.082478757,0 +21565,85,2.082478757,0 +21580,85,2.295511036,0 +21600,85,2.229154577,0 +21611,85,2.646536778,0 +21634,85,3.69829207,0 +21661,85,4.313635795,0 +21687,85,4.283910368,0 +21714,85,3.200280402,0 +21723,85,2.082478757,0 +21748,85,1.181642896,0 +21767,85,0.493932195,0 +21781,85,-0.762723673,0 +21804,85,-1.745506493,0 +21826,85,-2.581915461,0 +21867,85,-2.443947359,0 +21897,85,-2.145338689,0 +21924,85,-1.874703193,0 +21984,85,-1.906130346,0 +22003,85,-1.88343292,0 +22044,85,-1.87819508,0 +22056,85,-2.098193584,0 +22124,85,-2.159307791,0 +22140,85,-2.583661954,0 +22177,85,-2.833427265,0 +22210,85,0.7697054,0 +22231,85,3.326077935,0 +22248,85,5.223276859,0 +22263,85,6.685819668,0 +22283,85,7.117216357,0 +22299,85,7.343540959,0 +22315,85,7.33125788,0 +22327,85,7.348805204,0 +22337,85,7.550632057,0 +22348,85,7.90353821,0 +22364,85,8.102023578,0 +22381,85,8.040539101,0 +22392,85,7.598026299,0 +22405,85,7.057577083,0 +22419,85,6.906747001,0 +22433,85,7.675268643,0 +22448,85,9.715225999,0 +22469,85,10.49983598,0 +22482,85,10.45925256,0 +22495,85,10.08004879,0 +22518,85,10.61454681,0 +22539,85,11.31577624,0 +22559,85,11.54209657,0 +22584,85,11.04010278,0 +22604,85,9.877337271,0 +22622,85,8.312873995,0 +22640,85,6.584144922,0 +22656,85,5.072780722,0 +22668,85,3.948239105,0 +22679,85,3.037806838,0 +22694,85,2.674481813,0 +22709,85,2.969677581,0 +22732,85,2.580168969,0 +22745,85,1.647739913,0 +22758,85,-0.710360954,0 +22785,85,-1.717572852,0 +22808,85,-1.824071332,0 +22836,85,-0.853486727,0 +22858,85,-1.2741593,0 +22874,85,-1.58838318,0 +22904,85,-1.497604445,0 +22937,85,-1.342238792,0 +22959,85,-0.893632364,0 +22981,85,-0.406663957,0 +23012,85,-0.649271605,0 +23020,85,-1.048981353,0 +23031,85,-1.293361086,0 +23041,85,-1.46094451,0 +23052,85,-1.520298892,0 +23069,85,-1.295106707,0 +23088,85,-1.035017203,0 +23099,85,-0.867450395,0 +23105,85,0.441571171,0 +23120,85,-0.568983476,0 +23133,85,-0.21991184,0 +23157,85,-0.455534086,0 +23166,85,-0.66323484,0 +23178,85,-0.905850658,0 +23198,85,-1.029780657,0 +23222,85,-1.00883453,0 +23244,85,-0.900614243,0 +23261,85,-0.790650626,0 +23272,85,-0.698143043,0 +23282,85,-0.607382049,0 +23291,85,-0.528839693,0 +23297,85,-0.368266137,0 +23307,85,-0.188495782,0 +23326,85,-0.364775432,0 +23339,85,-0.640544596,0 +23363,85,-0.406663957,0 +23387,85,-0.307178915,0 +23397,85,-0.364775432,0 +23409,85,-0.368266137,0 +23425,85,-0.211185153,0 +23450,85,-0.555020401,0 +23475,85,-5.578612571,0 +23486,85,-5.370295864,0 +23498,85,-5.263529797,0 +23513,85,-5.268780306,0 +23526,85,-5.501582377,0 +23552,85,-5.942846198,0 +23607,85,-5.678411513,0 +23634,85,-4.950300815,0 +23649,85,-3.99194111,0 +23664,85,-3.245706101,0 +23681,85,-2.866615457,0 +23694,85,-2.691947671,0 +23704,85,-2.609859547,0 +23711,85,-2.581915461,0 +23721,85,-2.662255809,0 +23732,85,-2.805479798,0 +23745,85,-2.960943261,0 +23772,85,-2.976665069,0 +23788,85,-2.906791481,0 +23803,85,-2.742599592,0 +23816,85,-2.485860711,0 +23829,85,-2.459664764,0 +23845,85,-3.242211769,0 +23870,85,-4.266425176,0 +23899,85,-4.94855121,0 +23916,85,-5.438562519,0 +23925,85,-5.744950393,0 +23933,85,-5.753705885,0 +23946,85,-4.966047394,0 +23961,85,0.010471976,0 +23980,85,-0.350812619,0 +24004,85,-0.303688223,0 +24026,85,-0.071558512,0 +24046,85,0.230383869,0 +24070,85,0.724324306,0 +24076,60,0.724324306,0 +24099,60,1.375406171,0 +24111,67,1.375406171,0 +24126,67,2.047557286,0 +24154,67,2.613352586,0 +24184,67,3.006362219,0 +24206,67,3.701787507,0 +24238,67,3.995437336,0 +24274,67,3.908034591,0 +24311,67,4.175506351,0 +24350,67,4.397570538,0 +24386,67,4.135294462,0 +24427,67,3.586442794,0 +24441,67,2.498085603,0 +24454,67,-0.586437351,0 +24483,67,-3.448391172,0 +24507,67,-4.483260301,0 +24517,67,-5.109527638,0 +24527,67,-6.153051866,0 +24559,67,-6.556099111,0 +24586,67,-6.463204669,0 +24619,67,-6.2371492,0 +24645,67,-6.209115785,0 +24665,67,-6.221380284,0 +24681,67,-6.189843376,0 +24693,67,-6.377331014,0 +24722,67,-5.900811403,0 +24734,67,-0.584691962,0 +24760,67,-0.432844358,0 +24790,67,-0.244346582,0 +24858,67,-0.221657178,0 +24901,67,-0.232129207,0 +24932,67,-0.233874546,0 +24940,53,-0.233874546,0 +24952,53,-0.235619885,0 +24971,56,-0.235619885,0 +24985,56,0.562001936,0 +24999,56,0.661489434,0 +25019,56,0.691161389,0 +25035,56,0.678943511,0 +25051,56,0.628326799,0 +25066,56,0.54629349,0 +25080,56,0.464260917,0 +25094,56,0.411900033,0 +25109,56,0.396191813,0 +25124,56,0.422372191,0 +25140,56,0.48695071,0 +25155,56,0.588182741,0 +25172,56,0.691161389,0 +25189,56,0.7749417,0 +25205,56,0.844759452,0 +25220,56,0.900614243,0 +25234,56,0.944251187,0 +25248,56,0.968688032,0 +25264,56,0.930287327,0 +25280,47,0.930287327,0 +25283,47,0.534075829,0 +25311,54,0.534075829,0 +25323,54,-0.286234779,0 +25362,54,-0.675452692,0 +25455,54,-0.705124704,0 +25476,54,-0.715597208,0 +25498,54,-0.708615537,0 +25515,54,-0.651017008,0 +25531,54,-0.518367431,0 +25545,54,-0.389210388,0 +25562,54,-0.396191813,0 +25579,54,-0.495677567,0 +25592,54,-0.602145869,0 +25603,54,-0.514876679,0 +25612,54,0.427608273,0 +25615,54,0.329868425,0 +25619,54,0.214675828,0 +25622,54,0.101229131,0 +25625,54,0.001745329,0 +25628,54,-0.094247808,0 +25630,54,-0.22863853,0 +25633,54,-1.096110665,0 +25637,54,-0.797632383,0 +25646,54,-0.460770183,0 +25657,54,-0.223402516,0 +25668,54,-0.153589095,0 +25680,54,-0.216421165,0 +25688,54,-0.326377729,0 +25702,54,-0.307178915,0 +25716,54,-0.094247808,0 +25730,54,0.335104471,0 +25750,54,0.605636655,0 +25770,54,0.70687012,0 +25771,25,0.70687012,0 +25785,50,0.70687012,0 +25812,50,0.476478492,0 +25833,50,0.015707963,0 +25854,50,-0.467751651,0 +25876,50,-0.640544596,0 +25896,50,-0.523603561,0 +25915,50,-0.212930491,0 +25927,50,0.357794023,0 +25942,50,0.785414313,0 +25961,50,0.942505703,0 +25981,50,0.7697054,0 +26001,50,0.502659058,0 +26017,50,0.232129207,0 +26033,50,-0.109955787,0 +26051,50,-0.46251555,0 +26066,50,-0.692906802,0 +26084,50,-0.277508063,0 +26100,50,0.275762721,0 +26111,50,0.902359714,0 +26130,50,1.146731579,0 +26149,50,0.947742158,0 +26175,50,0.551529636,0 +26201,50,0.181514442,0 +26236,50,0.193731789,0 +26254,50,0.359539375,0 +26268,50,0.562001936,0 +26282,50,0.708615537,0 +26297,50,0.743523962,0 +26311,50,0.692906802,0 +26324,50,0.598655085,0 +26333,50,0.548038872,0 +26347,50,0.659744029,0 +26357,50,0.858723099,0 +26365,0,0.858723099,31 +26366,46,0.858723099,0 +26370,46,1.024544117,0 +26383,46,1.181642896,0 +26397,46,1.256703212,0 +26428,46,0.909341604,0 +26459,46,0.509640554,0 +26498,46,0.778432569,0 +26538,46,0.70687012,0 +26558,46,-0.040142575,0 +26577,46,-0.553275018,0 +26589,46,-0.657998624,0 +26601,20,-0.657998624,0 +26602,20,-0.216421165,0 +26611,59,-0.216421165,0 +26619,59,0.275762721,0 +26630,59,0.579455797,0 +26642,59,0.637053795,0 +26654,59,0.895377833,0 +26679,59,0.801123265,0 +26693,59,-0.319396339,0 +26731,59,-0.904105185,0 +26747,59,-1.148477139,0 +26765,59,-1.014071054,0 +26782,59,-0.410154674,0 +26801,59,-0.094247808,0 +26815,59,0.171042433,0 +26890,59,0.275762721,0 +26906,59,0.350812619,0 +26922,59,0.340340518,0 +26940,59,0.240855903,0 +26957,59,0.069813181,0 +26971,34,0.069813181,0 +26972,34,-0.146607762,0 +26987,34,-0.371756843,0 +26991,49,-0.371756843,0 +27004,49,-0.535821208,0 +27021,49,-0.640544596,0 +27037,49,-0.691161389,0 +27069,49,-0.678943511,0 +27080,49,-0.66847106,0 +27093,49,-0.666725653,0 +27105,49,-0.66847106,0 +27114,49,-0.584691962,0 +27122,49,-0.237365224,0 +27133,49,-0.020943951,0 +27138,49,0.326377729,0 +27144,49,0.612618231,0 +27149,49,-0.301942878,0 +27156,49,-0.005235988,0 +27160,42,-0.005235988,0 +27161,42,0.387465033,0 +27169,42,0.825559491,0 +27180,42,1.024544117,0 +27181,46,1.024544117,0 +27189,46,1.089128514,0 +27197,46,0.973924514,0 +27209,46,0.691161389,0 +27223,46,0.466006284,0 +27236,49,0.466006284,0 +27239,49,0.417136111,0 +27253,49,0.525348938,0 +27267,49,0.799377824,0 +27281,49,1.183388469,0 +27296,49,1.619807191,0 +27312,49,2.023112554,0 +27327,49,2.283287327,0 +27331,26,2.283287327,0 +27343,26,2.276302382,0 +27346,46,2.276302382,0 +27359,46,2.094701391,0 +27373,46,1.87819508,0 +27386,46,1.625044557,0 +27400,46,1.371914854,0 +27413,46,0.930287327,0 +27432,46,0.349067268,0 +27450,46,-0.205949143,0 +27467,46,-0.586437351,0 +27486,46,-0.797632383,0 +27500,0,-0.797632383,16 +27501,52,-0.797632383,0 +27521,52,-0.753996525,0 +27540,52,-0.748760242,0 +27557,52,-0.736542263,0 +27574,52,-0.719088046,0 +27590,52,-0.696397629,0 +27605,52,-0.673707284,0 +27620,52,-0.647526202,0 +27634,52,-0.612618231,0 +27652,52,-0.570728862,0 +27671,52,-0.528839693,0 +27689,52,-0.469497018,0 +27715,52,-0.415390751,0 +27736,52,-0.132645101,0 +27755,52,0.263545327,0 +27770,52,0.431098996,0 +27787,52,0.45378872,0 +27804,52,0.528839693,0 +27818,52,0.584691962,0 +27834,52,0.605636655,0 +27852,52,0.562001936,0 +27870,40,0.562001936,0 +27878,40,0.376992904,0 +27896,42,0.376992904,0 +27911,42,0.127409104,0 +27941,42,-0.146607762,0 +27956,44,-0.146607762,0 +27967,44,-0.410154674,0 +27992,44,-0.591673521,0 +28024,44,-0.497422939,0 +28056,44,-0.33684982,0 +28070,0,-0.33684982,10 +28071,46,-0.33684982,0 +28080,46,-0.209439816,0 +28103,46,-0.115191782,0 +28122,46,-0.031415928,0 +28144,46,-0.008726646,0 +28159,46,0.010471976,0 +28170,46,0.127409104,0 +28186,46,0.411900033,0 +28218,46,0.553275018,0 +28243,46,0.649271605,0 +28281,52,0.649271605,0 +28288,52,0.537566588,0 +28331,52,0.376992904,0 +28357,52,0.204203806,0 +28377,52,0.141371764,0 +28394,52,0.275762721,0 +28410,52,0.582946573,0 +28426,52,1.040253755,0 +28441,52,1.246229597,0 +28445,52,0.671961876,0 +28449,52,0.741778537,0 +28452,52,0.740033112,0 +28455,52,0.743523962,0 +28476,52,0.623090606,0 +28486,33,0.214675828,0 +28494,33,-0.059341202,0 +28503,33,-0.404918599,0 +28516,33,-0.722578886,0 +28529,33,-0.886650494,0 +28537,33,-1.092619588,0 +28549,33,-1.15371382,0 +28564,33,-0.813341366,0 +28581,33,-0.048869223,0 +28597,33,1.012325545,0 +28610,29,1.012325545,0 +28618,29,1.361440923,0 +28627,38,1.361440923,0 +28643,38,0.752251097,0 +28660,38,0.120427777,0 +28671,38,-0.886650494,0 +28689,38,-1.455707409,0 +28706,38,-1.618061404,0 +28718,38,-1.467927324,0 +28733,38,-0.88839596,0 +28755,38,-0.312414953,0 +28774,38,0.387465033,0 +28795,38,0.822068595,0 +28797,37,0.822068595,0 +28812,37,0.808105034,0 +28831,37,0.727815149,0 +28838,37,0.729560571,0 +28849,37,0.776687134,0 +28858,38,0.776687134,0 +28863,38,0.685925153,0 +28879,38,0.321141686,0 +28901,38,-0.326377729,0 +28923,38,-0.841268545,0 +28946,38,-0.741778537,0 +28969,38,-0.151843762,0 +28989,38,0.373502197,0 +29006,38,0.490441452,0 +29018,38,0.493932195,0 +29024,38,0.500913685,0 +29026,43,0.500913685,0 +29033,43,0.509640554,0 +29045,43,0.521858184,0 +29057,43,0.520112807,0 +29071,43,0.345576568,0 +29085,43,-0.092502477,0 +29098,43,-0.492186823,0 +29110,43,-0.767959967,0 +29121,43,-1.387625808,0 +29148,43,-1.696622797,0 +29161,43,-2.073748342,0 +29174,43,-2.56969005,0 +29195,43,-2.814213335,0 +29210,43,-2.934740572,0 +29232,43,-2.92425961,0 +29241,43,-2.905044678,0 +29247,43,1.307326081,0 +29258,43,-2.063271886,0 +29262,43,-2.347899138,0 +29266,43,-2.402034864,0 +29269,43,-2.290272295,0 +29272,43,-1.941049848,0 +29276,43,-1.303834827,0 +29281,43,-2.32519747,0 +29288,43,-2.700680662,0 +29297,43,-2.981905704,0 +29304,43,-3.264925068,0 +29331,43,-2.796746305,0 +29348,43,-2.00565218,0 +29364,30,-2.00565218,0 +29366,30,-1.2741593,0 +29379,30,1.213063327,0 +29381,48,1.213063327,0 +29414,48,2.356630613,0 +29433,48,2.92425961,0 +29448,48,3.203774639,0 +29465,48,3.167085534,0 +29481,48,2.908538286,0 +29494,48,2.492846354,0 +29508,48,1.96549378,0 +29523,48,1.504587335,0 +29538,48,1.17640618,0 +29549,48,0.431098996,0 +29572,48,0.183259777,0 +29584,48,0.148353095,0 +29591,48,0.209439816,0 +29598,48,0.410154674,0 +29608,48,0.661489434,0 +29621,48,0.581201185,0 +29640,48,0.319396339,0 +29652,48,-0.212930491,0 +29680,48,-0.560256552,0 +29710,48,-0.644035398,0 +29769,48,-0.143117096,0 +29809,48,-0.061086531,0 +29837,48,-0.35255797,0 +29856,48,-0.692906802,0 +29876,48,-0.815086811,0 +29904,48,-0.734796839,0 +29915,48,-0.610872837,0 +29926,48,-0.378738259,0 +29939,48,0.230383869,0 +29962,48,0.244346582,0 +29974,0,0.244346582,48 +29975,31,0.244346582,0 +29977,31,-0.036651916,0 +29999,31,0.48695071,0 +30021,31,0.919814455,0 +30041,31,0.602145869,0 +30060,31,-0.052359882,0 +30077,31,-0.411900033,0 +30093,31,-0.324632381,0 +30110,31,0.172787768,0 +30130,31,0.619599813,0 +30152,31,0.298452188,0 +30177,31,-0.495677567,0 +30179,10,-0.495677567,0 +30190,26,-0.495677567,0 +30199,26,-1.131021579,0 +30225,26,-1.015816563,0 +30251,26,-0.614363626,0 +30275,26,-0.279253406,0 +30298,26,0.071558512,0 +30300,10,0.071558512,0 +30333,10,0.237365224,0 +30347,9,0.237365224,0 +30360,9,0.315905645,0 +30376,0,0.315905645,6 +30377,10,0.315905645,0 +30382,10,0.366520784,0 +30401,0,0.366520784,28 +30402,9,0.366520784,0 +30408,9,0.390955744,0 +30414,6,0.390955744,0 +30424,11,0.390955744,0 +30434,11,0.382228968,0 +30463,11,0.272272036,0 +30474,0,0.272272036,8 +30475,7,0.272272036,0 +30504,0,0.272272036,186 +30505,10,0.272272036,0 +30518,10,0.20245847,0 +30540,8,0.20245847,0 +30561,8,0.218166503,0 +30584,8,0.274017378,0 +30585,0,0.274017378,15 +30586,10,0.274017378,0 +30608,10,0.218166503,0 +30631,10,0.150098428,0 +30634,0,0.150098428,42 +30635,19,0.150098428,0 +30654,19,0.35255797,0 +30678,19,0.713851789,0 +30688,40,0.713851789,0 +30707,40,0.918068978,0 +30733,40,0.991379492,0 +30781,40,1.047235832,0 +30802,40,1.384134479,0 +30824,40,1.813595892,0 +30838,40,2.13136967,0 +30852,40,2.464903927,0 +30872,40,2.697187461,0 +30910,40,2.519042734,0 +30942,40,2.46141115,0 +30969,40,2.520789171,0 +30994,40,2.634310956,0 +31041,41,2.634310956,0 +31115,41,2.473635894,0 +31167,41,3.313847165,0 +31193,25,3.313847165,0 +31207,34,3.313847165,0 +31227,34,3.471107611,0 +31262,34,3.853847891,0 +31304,34,4.467520876,0 +31341,24,4.467520876,0 +31344,24,4.631921468,0 +31355,33,4.631921468,0 +31368,33,4.327624495,0 +31401,33,3.747229017,0 +31422,33,3.11816805,0 +31440,33,2.344406558,0 +31457,33,0.061086531,0 +31468,24,0.061086531,0 +31470,24,0.115191782,0 +31474,24,0.160570429,0 +31477,24,0.195477125,0 +31480,24,0.212930491,0 +31482,37,0.212930491,0 +31483,37,0.696397629,0 +31487,37,0.364775432,0 +31490,37,0.333359122,0 +31494,37,0.232129207,0 +31498,37,0.087266485,0 +31502,37,1.480147283,0 +31506,37,-0.413645392,0 +31511,37,-0.493932195,0 +31515,37,-1.021053093,0 +31519,37,1.235756008,0 +31532,37,2.828187082,0 +31542,37,4.152777727,0 +31554,37,5.102528119,0 +31568,37,5.569858809,0 +31580,37,5.907817057,0 +31608,37,5.753705885,0 +31635,37,5.454317078,0 +31650,37,4.850578136,0 +31671,37,4.240197876,0 +31688,37,3.57246227,0 +31704,37,2.751332824,0 +31722,37,2.195977087,0 +31734,37,1.670435438,0 +31746,37,1.289869845,0 +31763,37,1.125784924,0 +31777,38,1.125784924,0 +31778,38,1.028035143,0 +31798,38,1.075164245,0 +31825,38,0.945996672,0 +31845,38,0.912832552,0 +31862,38,1.202589823,0 +31886,38,1.132767132,0 +31913,38,0.441571171,0 +31940,38,-0.11344645,0 +31953,38,-0.874432242,0 +31967,38,-2.768799412,0 +31993,38,-5.198775898,0 +32023,38,-7.155809158,0 +32036,31,-7.155809158,0 +32054,31,-7.708626101,0 +32077,31,-7.392675485,0 +32094,31,-6.826083326,0 +32110,31,-6.179331346,0 +32127,31,-5.771217133,0 +32141,31,-5.256529164,0 +32160,31,-4.735121781,0 +32178,31,-3.796167757,0 +32203,22,-3.796167757,0 +32205,22,-2.765306081,0 +32216,31,-2.765306081,0 +32229,31,-1.673927073,0 +32261,31,-1.303834827,0 +32279,31,-0.809850477,0 +32296,31,-0.253073282,0 +32308,31,-0.872686779,0 +32322,31,0.197222461,0 +32325,31,-0.460770183,0 +32329,31,-0.719088046,0 +32331,31,-1.033271687,0 +32335,31,-1.200844242,0 +32337,31,-1.319545493,0 +32340,31,-1.316054228,0 +32344,31,-1.234010413,0 +32347,31,-1.141494906,0 +32350,31,-0.979161001,0 +32354,31,-0.771450833,0 +32357,31,-0.523603561,0 +32360,31,-0.822068595,0 +32368,31,-0.979161001,0 +32378,31,-1.129276027,0 +32384,26,-1.129276027,0 +32390,26,-1.293361086,0 +32399,30,-1.293361086,0 +32408,30,-1.36842354,0 +32423,30,-1.380643153,0 +32434,30,-1.370169197,0 +32441,30,-1.345730081,0 +32448,30,-1.303834827,0 +32455,30,-1.223536856,0 +32465,30,-1.132767132,0 +32474,30,-1.001852508,0 +32484,30,-0.829050388,0 +32497,30,-0.230383869,0 +32513,30,0.436335082,0 +32523,30,3.375002017,0 +32553,30,4.589944508,0 +32566,30,5.086779385,0 +32578,30,4.922307501,0 +32588,25,4.922307501,0 +32589,25,4.093335653,0 +32602,29,2.843907679,0 +32615,29,1.728047936,0 +32625,29,-0.595164302,0 +32646,29,-2.48760712,0 +32664,29,-3.853847891,0 +32677,29,-4.973045952,0 +32691,29,-5.46657081,0 +32701,29,-5.331788674,0 +32717,29,-1.394608476,0 +32725,0,-1.394608476,72 +32726,30,-1.394608476,0 +32760,30,-0.804614148,0 +32782,30,-0.431098996,0 +32807,30,-0.396191813,0 +32831,30,-0.820323148,0 +32862,30,-0.863959475,0 +32870,0,-0.863959475,136 +32871,32,-0.863959475,0 +32887,32,-0.612618231,0 +32905,32,-0.537566588,0 +32925,32,-0.329868425,0 +32942,32,0.350812619,0 +32958,32,1.108329454,0 +32975,32,1.780423927,0 +32993,32,-0.212930491,0 +33012,32,-0.038397245,0 +33031,32,-0.593418911,0 +33045,32,-1.488875853,0 +33059,32,-2.305988554,0 +33073,32,-2.765306081,0 +33084,32,-3.146120714,0 +33096,32,-3.427422467,0 +33099,16,-3.427422467,0 +33108,20,-3.20202752,0 +33122,20,-2.774039421,0 +33132,20,-2.505071289,0 +33141,20,-2.307734812,0 +33150,20,-2.110416298,0 +33158,20,-1.796136914,0 +33166,20,-1.36493223,0 +33172,20,-0.698143043,0 +33180,20,0.315905645,0 +33189,20,1.131021579,0 +33191,37,1.131021579,0 +33197,37,1.675672892,0 +33207,37,1.810104088,0 +33214,37,0.911087077,0 +33226,37,1.195607503,0 +33249,37,2.346152847,0 +33320,37,0.579455797,0 +33369,37,0.144862429,0 +33392,37,0.443316534,0 +33399,10,0.443316534,0 +33410,35,0.443316534,0 +33411,35,0.884905027,0 +33429,35,1.185134043,0 +33456,35,0.919814455,0 +33494,35,0.678943511,0 +33530,35,0.984397494,0 +33556,35,1.120548276,0 +33568,35,0.914578027,0 +33587,35,0.382228968,0 +33610,35,0.253073282,0 +33631,42,0.253073282,0 +33634,42,0.350812619,0 +33644,42,0.406663957,0 +33663,42,0.331613773,0 +33676,42,0.186750447,0 +33687,42,-0.261799986,0 +33711,42,-0.514876679,0 +33740,42,-0.139626431,0 +33769,42,0.659744029,0 +33793,42,1.824071332,0 +33816,42,2.906791481,0 +33836,42,3.661590521,0 +33855,42,3.997185453,0 +33878,42,3.866083399,0 +33893,42,3.675571947,0 +33903,42,3.273661041,0 +33922,42,2.929500083,0 +33937,28,2.450932857,0 +33952,40,2.450932857,0 +33956,40,1.972477804,0 +33974,40,1.452216012,0 +33993,40,0.802868706,0 +34018,40,0.324632381,0 +34038,40,-0.129154436,0 +34069,40,-0.172787768,0 +34077,40,-0.265290669,0 +34107,40,-0.305433569,0 +34129,40,-0.324632381,0 +34158,40,-0.289725466,0 +34195,40,-0.20769448,0 +34217,15,-0.20769448,0 +34226,40,-0.20769448,0 +34242,40,-0.298452188,0 +34349,40,-0.478223861,0 +34442,40,-0.476478492,0 +34463,34,-0.476478492,0 +34482,41,-0.476478492,0 +34506,41,-0.41888147,0 +34548,41,-0.33684982,0 +34583,41,-0.075049172,0 +34615,41,0.151843762,0 +34670,41,0.359539375,0 +34742,41,0.441571171,0 +34778,41,0.48695071,0 +34797,41,0.792396064,0 +34801,0,0.792396064,28 +34802,32,0.792396064,0 +34880,32,1.031526172,0 +34932,32,1.148477139,0 +34961,32,1.165932768,0 +34966,32,1.326528032,0 +35040,32,1.31779986,0 +35080,32,1.300343577,0 +35123,32,1.335256224,0 +35154,0,1.335256224,5 +35155,32,1.335256224,0 +35162,32,1.371914854,0 +35199,32,1.378897492,0 +35228,32,1.331764945,0 +35298,32,1.324782396,0 +35305,32,1.26194003,0 +35318,22,1.26194003,0 +35330,32,1.26194003,0 +35366,32,1.214808913,0 +35434,32,1.183388469,0 +35522,32,1.192116346,0 +35567,26,1.192116346,0 +35582,34,1.192116346,0 +35623,34,1.2741593,0 +35756,34,1.337001865,0 +35760,0,1.337001865,11 +35761,35,1.337001865,0 +35849,35,1.347475727,0 +35873,35,1.349221374,0 +35982,35,1.316054228,0 +35988,0,1.316054228,47 +35989,38,1.316054228,0 +36055,38,1.298597953,0 +36175,38,1.066436598,0 +36243,0,1.066436598,5 +36244,34,1.066436598,0 +36296,34,0.776687134,0 +36410,34,0.614363626,0 +36474,0,0.614363626,19 +36475,19,0.614363626,0 +36477,19,0.493932195,0 +36515,0,0.493932195,21 +36516,27,0.493932195,0 +36522,27,0.382228968,0 +36560,27,-0.064577191,0 +36670,10,-0.064577191,0 +36681,43,-0.064577191,0 +36723,43,-0.265290669,0 +36806,43,-0.452043355,0 +36894,43,-0.724324306,0 +36983,43,-1.014071054,0 +37081,43,-1.069927655,0 +37102,43,-1.113566088,0 +37121,43,-1.160696072,0 +37146,43,-1.197353082,0 +37150,0,-1.197353082,15 +37151,44,-1.197353082,0 +37172,44,-1.220045677,0 +37198,44,-1.230519225,0 +37242,44,-1.204335405,0 +37285,44,-1.129276027,0 +37328,44,-1.254957608,0 +37365,44,-1.412065206,0 +37379,44,-2.643043678,0 +37410,0,-2.643043678,7 +37411,55,-2.643043678,0 +37431,55,-3.803159153,0 +37462,55,-4.056622876,0 +37479,55,-10.92882032,0 +37490,55,-10.36751128,0 +37502,55,-9.392915031,0 +37514,55,-7.487444976,0 +37529,55,-2.838667465,0 +37549,55,-1.820579514,0 +37559,55,-2.494592769,0 +37580,55,-2.305988554,0 +37605,55,-4.402816663,0 +37615,55,-5.533093938,0 +37628,55,-6.719129895,0 +37642,55,-7.452343614,0 +37652,55,-8.631046225,0 +37682,55,-9.285521337,0 +37737,55,-9.403479501,0 +37784,55,-9.660612982,0 +37804,55,-9.93021072,0 +37824,55,-9.745177508,0 +37840,55,-9.246794408,0 +37854,55,-8.123105369,0 +37875,55,-7.580472482,0 +37893,55,-7.292655346,0 +37928,55,-7.061085137,0 +37979,55,-7.282127758,0 +37984,43,-7.282127758,0 +37995,43,-8.831530662,0 +38008,0,-8.831530662,16 +38009,30,-8.831530662,0 +38022,30,-9.953124254,0 +38048,30,-9.667659501,0 +38062,30,-9.030326004,0 +38091,30,-9.222151431,0 +38108,30,-9.805085728,0 +38145,30,-10.02187107,0 +38153,0,-10.02187107,14 +38154,40,-10.02187107,0 +38173,40,-9.718749616,0 +38187,40,-8.620496334,0 +38201,40,-7.648935008,0 +38215,40,-7.821000657,0 +38230,40,-7.935151165,0 +38242,40,-6.99443506,0 +38252,40,-2.15232323,0 +38278,40,0.54629349,0 +38297,40,1.467927324,0 +38311,40,1.841530487,0 +38323,40,1.963747777,0 +38334,40,1.953271785,0 +38345,40,1.52728183,0 +38390,40,0.537566588,0 +38434,40,-0.293216155,0 +38439,14,-0.293216155,0 +38449,41,-0.293216155,0 +38467,41,-1.125784924,0 +38504,41,-2.232646972,0 +38532,41,-2.973171321,0 +38553,41,-2.948715289,0 +38572,41,-2.622085212,0 +38586,41,-2.410766564,0 +38594,41,-2.199469431,0 +38600,41,-0.740033112,0 +38610,41,-1.131021579,0 +38628,41,-1.415556562,0 +38648,41,-1.508078786,0 +38658,41,-1.324782396,0 +38668,0,-1.324782396,23 +38669,54,-1.324782396,0 +38687,54,-0.722578886,0 +38713,54,-0.598655085,0 +38730,54,-0.549784254,0 +38748,54,-0.698143043,0 +38792,54,-0.0994838,0 +38854,54,0.013962634,0 +38919,54,0.019198622,0 +38943,54,0.116937113,0 +38993,54,-0.342085868,0 +38994,11,-0.342085868,0 +39004,50,-0.342085868,0 +39042,50,-0.47996923,0 +39065,50,-0.513131304,0 +39133,50,-1.824071332,0 +39160,50,-2.300749789,0 +39186,50,-2.000414091,0 +39199,50,0.666725653,0 +39211,50,0.471242386,0 +39239,50,0.537566588,0 +39251,50,-1.389371473,0 +39260,50,-1.593620493,0 +39273,50,-0.820323148,0 +39296,50,0.036651916,0 +39309,41,0.036651916,0 +39312,41,0.708615537,0 +39342,41,0.54629349,0 +39365,41,-1.886924819,0 +39377,41,-1.93406591,0 +39389,41,-1.762965156,0 +39395,41,-1.129276027,0 +39419,41,-0.951233131,0 +39444,41,-1.101347285,0 +39463,41,-0.905850658,0 +39482,41,-0.713851789,0 +39490,41,-0.438080445,0 +39502,41,-0.050614553,0 +39519,21,-0.050614553,0 +39533,21,-0.195477125,0 +39534,51,-0.195477125,0 +39565,51,-0.631817596,0 +39589,51,-1.021053093,0 +39607,51,-1.256703212,0 +39622,51,-0.555020401,0 +39636,51,-0.472987754,0 +39639,51,-0.256563963,0 +39642,51,-0.169297099,0 +39653,51,0.165806431,0 +39661,51,0.54629349,0 +39669,51,0.843013998,0 +39683,51,0.48695071,0 +39697,51,0.069813181,0 +39707,51,-0.193731789,0 +39717,51,-0.160570429,0 +39728,51,0.376992904,0 +39763,51,0.809850477,0 +39806,51,1.150222698,0 +39858,0,1.150222698,5 +39859,34,1.150222698,0 +39871,34,1.048981353,0 +39942,34,0.954724107,0 +39958,34,0.84825036,0 +39971,34,0.757487383,0 +39981,34,0.661489434,0 +39990,34,0.598655085,0 +39997,34,0.58992813,0 +40009,34,0.696397629,0 +40023,34,0.619599813,0 +40029,22,0.619599813,0 +40039,33,0.619599813,0 +40052,33,0.389210388,0 +40063,33,-0.015707963,0 +40083,33,-0.146607762,0 +40099,33,0.120427777,0 +40134,33,0.048869223,0 +40165,33,0.46251555,0 +40195,33,0.897123302,0 +40208,0,0.897123302,31 +40209,32,0.897123302,0 +40218,32,-0.542802728,0 +40225,32,0.596909693,0 +40230,32,0.143117096,0 +40244,32,0.436335082,0 +40265,32,1.206080988,0 +40285,32,1.131021579,0 +40305,32,0.452043355,0 +40321,32,-0.146607762,0 +40335,32,-0.350812619,0 +40350,32,-0.303688223,0 +40365,32,-0.254818622,0 +40375,32,-0.198967797,0 +40385,32,-0.120427777,0 +40396,32,-0.710360954,0 +40419,10,-0.710360954,0 +40421,10,-1.120548276,0 +40429,25,-1.120548276,0 +40448,25,-0.598655085,0 +40476,25,-0.118682445,0 +40497,25,-0.158825095,0 +40517,25,-0.33684982,0 +40550,25,-0.132645101,0 +40559,35,-0.132645101,0 +40582,35,-0.041887904,0 +40598,35,-0.144862429,0 +40614,35,-0.324632381,0 +40626,35,-0.492186823,0 +40636,35,-0.607382049,0 +40646,35,-0.70687012,0 +40664,35,-0.263545327,0 +40685,35,0.359539375,0 +40705,35,0.507895179,0 +40724,35,0.20245847,0 +40744,35,-0.176278437,0 +40765,35,-0.054105212,0 +40778,0,-0.054105212,138 +40779,47,-0.054105212,0 +40792,47,0.233874546,0 +40816,47,0.29147081,0 +40841,47,0.22863853,0 +40861,47,0.075049172,0 +40892,47,-0.094247808,0 +40894,13,-0.094247808,0 +40904,28,-0.094247808,0 +40942,28,-0.26703601,0 +40977,28,0.328123077,0 +41082,28,0.349067268,0 +41083,0,0.349067268,51 +41084,27,0.349067268,0 +41099,27,0.383974322,0 +41110,27,0.411900033,0 +41116,27,0.450297991,0 +41123,27,0.6457808,0 +41133,27,-0.474733123,0 +41137,27,-1.810104088,0 +41142,27,-3.093709869,0 +41147,27,-4.423801407,0 +41151,27,1.803120492,0 +41166,27,2.248362821,0 +41179,27,2.208200316,0 +41190,27,4.766608616,0 +41201,27,3.57246227,0 +41213,27,2.442200988,0 +41219,20,2.442200988,0 +41226,20,1.485384422,0 +41229,31,1.485384422,0 +41238,31,1.448724619,0 +41250,31,1.014071054,0 +41260,31,0.41888147,0 +41269,31,-0.303688223,0 +41279,31,-1.281141756,0 +41293,31,-2.166292374,0 +41307,31,-2.611606066,0 +41322,31,-2.209946497,0 +41324,17,-2.209946497,0 +41339,63,-2.209946497,0 +41345,63,-1.565688257,0 +41362,63,-0.527094315,0 +41397,63,-0.244346582,0 +41418,63,0.321141686,0 +41446,63,0.403173242,0 +41472,63,-0.062831861,0 +41517,63,-0.322887034,0 +41544,63,-0.466006284,0 +41599,63,0.357794023,0 +41691,63,0.101229131,0 +41746,63,0.010471976,0 +41819,63,0.066322521,0 +41878,63,0.085521154,0 +41901,63,0.157079762,0 +41930,63,0.111701119,0 +41997,63,-0.078539832,0 +42072,63,-0.216421165,0 +42124,57,-0.216421165,0 +42138,57,-0.307178915,0 +42159,62,-0.307178915,0 +42279,62,-0.272272036,0 +42363,62,-0.249582601,0 +42467,62,-0.268781352,0 +42505,62,-0.256563963,0 +42519,55,-0.256563963,0 +42554,71,-0.256563963,0 +42604,71,-0.083775824,0 +42675,71,0.305433569,0 +42746,71,0.425862912,0 +42787,71,0.204203806,0 +42843,71,-0.41888147,0 +42897,71,-0.755741954,0 +42934,71,-0.771450833,0 +42946,71,-0.373502197,0 +43009,71,-0.22863853,0 +43036,71,-0.387465033,0 +43082,71,0.48520534,0 +43109,71,-0.167551765,0 +43117,71,0.527094315,0 +43121,71,0.499168312,0 +43159,71,0.647526202,0 +43237,71,0.441571171,0 +43269,71,0.21991184,0 +43284,71,0.043633234,0 +43299,71,-0.11344645,0 +43330,71,-0.183259777,0 +43401,71,-0.158825095,0 +43444,62,-0.158825095,0 +43470,62,-0.068067851,0 +43479,71,-0.068067851,0 +43515,71,0.012217305,0 +43541,71,0.439825808,0 +43569,71,1.467927324,0 +43632,71,2.339167699,0 +43662,71,3.679067325,0 +43692,71,4.137042777,0 +43705,71,4.046133712,0 +43719,71,3.785680732,0 +43737,71,3.972712041,0 +43752,71,4.939803231,0 +43769,71,6.27394454,0 +43783,71,7.050561027,0 +43798,71,6.904993348,0 +43812,71,6.312493855,0 +43824,71,5.611877644,0 +43836,71,-4.429047654,0 +43850,71,3.181062235,0 +43868,71,2.412512908,0 +43877,71,1.691385307,0 +43884,71,0.801123265,0 +43894,71,0.115191782,0 +43904,71,-0.204203806,0 +43910,71,-0.504404432,0 +43919,71,-0.685925153,0 +43927,71,-0.757487383,0 +43936,71,-0.747014815,0 +43941,71,-0.649271605,0 +43949,71,-0.385719678,0 +43968,71,-0.673707284,0 +43988,71,-0.823814043,0 +44023,71,-0.940760219,0 +44048,71,-0.96694254,0 +44052,71,-0.720833466,0 +44067,71,0.134390433,0 +44093,71,0.429353634,0 +44108,71,0.383974322,0 +44121,71,0.240855903,0 +44135,71,0.181514442,0 +44144,69,0.181514442,0 +44149,69,0.109955787,0 +44167,69,-0.057595872,0 +44190,69,-0.205949143,0 +44213,69,-0.298452188,0 +44258,69,0.56374732,0 +44305,69,0.380483613,0 +44344,69,0.055850542,0 +44364,77,0.055850542,0 +44391,77,0.012217305,0 +44402,77,0.171042433,0 +44426,77,1.00883453,0 +44461,77,1.289869845,0 +44477,77,1.040253755,0 +44493,77,0.785414313,0 +44499,77,-0.167551765,0 +44516,77,-0.275762721,0 +44562,77,-0.005235988,0 +44596,77,0.158825095,0 +44639,77,0.560256552,0 +44659,77,1.366677885,0 +44684,77,1.576162817,0 +44702,77,1.188625193,0 +44721,77,0.766214536,0 +44737,77,0.652762411,0 +44748,77,0.673707284,0 +44757,77,0.275762721,0 +44765,77,-0.258309304,0 +44769,77,-0.240855903,0 +44773,77,-0.22863853,0 +44775,77,-0.211185153,0 +44779,77,-0.139626431,0 +44782,77,-0.040142575,0 +44786,77,0.075049172,0 +44788,77,-0.141371764,0 +44792,77,0.595164302,0 +44836,77,0.635308395,0 +44848,77,0.411900033,0 +44879,77,0.073303842,0 +44916,77,0.164061097,0 +44954,77,0.270526694,0 +45009,77,0.048869223,0 +45027,77,-0.349067268,0 +45041,77,-0.755741954,0 +45065,77,-0.638799195,0 +45078,77,-0.389210388,0 +45098,77,-0.404918599,0 +45122,77,-0.429353634,0 +45134,77,-0.314160299,0 +45150,77,0.048869223,0 +45173,77,0.321141686,0 +45189,73,0.321141686,0 +45192,73,0.345576568,0 +45207,73,0.340340518,0 +45230,73,0.478223861,0 +45234,75,0.478223861,0 +45252,75,-1.022798605,0 +45275,75,-0.520112807,0 +45279,75,-0.188495782,0 +45283,75,0.040142575,0 +45287,75,0.197222461,0 +45291,75,0.265290669,0 +45295,75,0.328123077,0 +45298,75,0.507895179,0 +45303,75,0.727815149,0 +45306,75,0.333359122,0 +45310,75,0.692906802,0 +45340,75,0.731305993,0 +45365,75,0.47996923,0 +45394,75,0.050614553,0 +45411,75,-0.48695071,0 +45429,76,-0.48695071,0 +45431,76,-0.624836004,0 +45453,76,-0.46251555,0 +45475,76,-0.216421165,0 +45498,76,0.019198622,0 +45518,76,0.191986454,0 +45538,76,0.324632381,0 +45560,76,0.390955744,0 +45580,76,0.403173242,0 +45602,76,0.329868425,0 +45629,76,0.218166503,0 +45673,76,0.214675828,0 +45728,76,0.459024817,0 +45777,76,0.455534086,0 +45801,76,0.136135766,0 +45819,76,-0.340340518,0 +45834,76,-1.019307583,0 +45851,76,-1.438250462,0 +45871,76,-0.93552377,0 +45892,76,0.29147081,0 +45904,59,0.29147081,0 +45918,59,0.610872837,0 +45933,59,0.872686779,0 +45939,63,0.872686779,0 +45949,63,1.064691071,0 +45967,63,1.134512685,0 +45981,63,1.125784924,0 +45997,63,1.02628963,0 +46013,63,0.853486727,0 +46027,63,0.605636655,0 +46042,63,0.425862912,0 +46055,63,0.376992904,0 +46068,63,0.460770183,0 +46081,63,0.649271605,0 +46092,63,0.7697054,0 +46109,63,0.516622055,0 +46123,63,0.132645101,0 +46137,63,-0.233874546,0 +46149,58,-0.233874546,0 +46154,58,-0.247837261,0 +46169,58,0.052359882,0 +46181,58,0.467751651,0 +46184,69,0.467751651,0 +46208,69,0.424117551,0 +46294,69,0.399682527,0 +46311,69,0.335104471,0 +46332,69,0.322887034,0 +46348,69,0.342085868,0 +46366,69,0.422372191,0 +46389,69,0.452043355,0 +46405,69,0.363030079,0 +46424,69,0.30892426,0 +46451,69,0.56374732,0 +46477,69,0.88839596,0 +46497,69,0.778432569,0 +46521,69,0.204203806,0 +46547,69,-0.064577191,0 +46568,69,0.144862429,0 +46586,69,0.699888458,0 +46611,69,0.801123265,0 +46635,69,0.469497018,0 +46659,69,0.371756843,0 +46686,69,0.58992813,0 +46706,69,0.633562995,0 +46722,69,0.565492705,0 +46738,69,0.441571171,0 +46749,69,0.382228968,0 +46760,69,0.521858184,0 +46772,69,0.825559491,0 +46791,69,0.942505703,0 +46804,69,0.883159562,0 +46817,69,0.567238091,0 +46830,69,0.29147081,0 +46833,0,0.29147081,8 +46834,63,0.29147081,0 +46844,63,0.415390751,0 +46862,63,0.56374732,0 +46875,63,0.516622055,0 +46892,63,0.438080445,0 +46905,63,0.502659058,0 +46919,63,0.626581401,0 +46934,63,0.687670565,0 +46946,63,0.736542263,0 +46954,63,0.771450833,0 +46962,63,0.839523093,0 +46972,63,0.904105185,0 +46984,63,0.914578027,0 +46995,63,0.886650494,0 +47005,63,0.747014815,0 +47022,63,0.478223861,0 +47040,63,0.21991184,0 +47083,63,0.389210388,0 +47099,63,0.628326799,0 +47111,63,0.945996672,0 +47124,63,0.97217902,0 +47137,63,0.945996672,0 +47147,63,0.932032807,0 +47161,63,0.886650494,0 +47182,63,0.874432242,0 +47206,63,0.993124993,0 +47231,63,1.522044625,0 +47264,63,2.056287607,0 +47290,63,2.531267829,0 +47321,63,2.761812756,0 +47347,63,2.798493,0 +47371,63,2.595887453,0 +47397,63,2.56619709,0 +47420,63,2.79150623,0 +47451,63,2.838667465,0 +47479,46,2.838667465,0 +47490,46,3.034312962,0 +47515,46,3.748976798,0 +47540,46,3.993689222,0 +47554,46,-0.90759613,0 +47564,46,-1.420793603,0 +47569,46,0.125663772,0 +47576,46,0.476478492,0 +47588,46,1.99342999,0 +47607,46,2.643043678,0 +47623,46,0.764469104,0 +47628,0,0.764469104,183 +47629,21,0.764469104,0 +47642,21,0.748760242,0 +47661,21,1.076909777,0 +47677,21,1.234010413,0 +47696,21,0.324632381,0 +47703,0,0.324632381,7 +47704,9,0.324632381,0 +47726,9,-0.020943951,0 +47728,0,-0.020943951,305 +47729,52,-0.020943951,0 +47754,52,0.42062683,0 +47765,52,0.562001936,0 +47777,52,-0.301942878,0 +47796,52,-1.186879618,0 +47812,52,-1.227028039,0 +47828,52,-0.664980247,0 +47850,52,0.20245847,0 +47891,52,0.527094315,0 +47921,52,0.638799195,0 +47937,52,0.70687012,0 +47950,52,0.755741954,0 +47968,52,0.692906802,0 +47977,52,0.474733123,0 +47986,52,0.061086531,0 +47996,52,-0.610872837,0 +48009,52,-1.385880143,0 +48022,52,-2.038826997,0 +48033,52,-2.880589621,0 +48049,52,-3.464117899,0 +48066,52,-3.666833539,0 +48086,52,-3.507804154,0 +48101,52,-2.892817106,0 +48119,52,2.082478757,0 +48166,52,2.794999612,0 +48196,52,3.298122033,0 +48220,52,3.350539776,0 +48243,52,3.298122033,0 +48257,52,3.52877403,0 +48288,52,3.73149909,0 +48333,52,3.320836164,0 +48365,52,2.508564141,0 +48396,52,0.815086811,0 +48447,52,0.279253406,0 +48465,52,-0.0994838,0 +48483,52,-0.53233045,0 +48494,31,-0.53233045,0 +48499,31,-2.199469431,0 +48514,53,-2.199469431,0 +48560,53,-2.375839984,0 +48623,53,-1.848514181,0 +48711,53,-1.277650526,0 +48788,53,-1.305580453,0 +48875,53,-1.36493223,0 +48967,53,-1.337001865,0 +48983,53,0.630072198,0 +49029,53,0.90759613,0 +49045,53,2.485860711,0 +49062,53,3.53226904,0 +49072,53,4.098580425,0 +49084,53,3.813646317,0 +49098,53,2.333928853,0 +49109,26,2.333928853,0 +49113,26,0.909341604,0 +49124,52,0.909341604,0 +49125,52,-0.137881098,0 +49136,52,-0.905850658,0 +49149,52,-1.055963444,0 +49164,52,-0.390955744,0 +49180,52,0.802868706,0 +49196,52,1.825817242,0 +49212,52,2.543492999,0 +49229,52,3.067505085,0 +49246,52,3.472855044,0 +49263,52,3.874823118,0 +49292,52,4.107321762,0 +49321,52,3.715769347,0 +49358,52,2.980158824,0 +49376,52,2.311227333,0 +49388,52,0.654507815,0 +49389,49,0.654507815,0 +49412,49,-0.46251555,0 +49428,49,-2.012636315,0 +49447,49,-4.119559739,0 +49469,53,-4.119559739,0 +49475,53,-5.356293066,0 +49491,53,-5.424558692,0 +49499,53,-5.239027807,0 +49505,53,-5.228527146,0 +49513,53,-5.120027009,0 +49525,53,-5.03953469,0 +49531,53,-4.885567443,0 +49540,53,-4.568956635,0 +49551,53,-4.033896467,0 +49563,53,-3.476349917,0 +49574,53,-2.967930713,0 +49584,53,-2.622085212,0 +49591,53,-2.019620469,0 +49602,53,-1.556959483,0 +49610,53,-1.007089024,0 +49619,53,-0.579455797,0 +49626,53,-0.185005112,0 +49634,53,0.226893192,0 +49643,53,0.588182741,0 +49653,53,0.797632383,0 +49664,53,0.806359591,0 +49676,53,0.139626431,0 +49687,53,0.116937113,0 +49728,53,-0.075049172,0 +49770,53,-0.188495782,0 +49786,53,-0.581201185,0 +49826,53,-0.877923168,0 +49870,53,-0.719088046,0 +49883,0,-0.719088046,20 +49884,31,-0.719088046,0 +49915,31,-0.565492705,0 +49944,31,-0.591673521,0 +49964,31,-4.156274411,0 +49983,31,-4.299647265,0 +50009,24,-4.299647265,0 +50014,24,-4.472767326,0 +50036,24,-4.829585121,0 +50064,24,-5.156775696,0 +50078,0,-5.156775696,8 +50079,20,-5.156775696,0 +50080,20,-5.737946062,0 +50105,20,-5.872789361,0 +50113,0,-5.969119007,62 +50114,37,-5.969119007,0 +50135,37,-5.748452579,0 +50152,37,-5.391300454,0 +50165,37,-4.518237595,0 +50181,37,-3.102444891,0 +50201,37,-2.450932857,0 +50217,37,-2.478875092,0 +50223,37,-2.595887453,0 +50230,37,-3.064011146,0 +50261,37,-2.978411946,0 +50280,37,-2.370601047,0 +50293,0,-2.370601047,21 +50294,47,-2.370601047,0 +50299,47,-1.647739913,0 +50314,47,-1.085637443,0 +50327,47,-0.466006284,0 +50349,47,-0.321141686,0 +50360,47,-0.272272036,0 +50371,47,-0.181514442,0 +50395,47,0.116937113,0 +50418,47,0.328123077,0 +50432,47,0.635308395,0 +50459,47,0.764469104,0 +50479,44,0.764469104,0 +50480,44,0.890141428,0 +50510,44,1.038508237,0 +50533,44,1.29685233,0 +50554,60,1.29685233,0 +50558,60,1.46967303,0 +50570,60,1.754235811,0 +50587,60,1.975969823,0 +50601,60,2.283287327,0 +50619,60,2.863121934,0 +50639,60,4.10557349,0 +50674,60,4.348607861,0 +50689,60,4.149281054,0 +50709,60,3.56721961,0 +50724,60,-1.078655309,0 +50757,60,-1.136258239,0 +50763,60,-0.961706065,0 +50770,60,-0.785414313,0 +50774,60,-0.457279451,0 +50780,60,-0.069813181,0 +50785,60,0.591673521,0 +50792,60,1.099601744,0 +50796,60,-2.48935353,0 +50802,60,-2.808973208,0 +50818,60,-2.845654421,0 +50828,60,-2.754826128,0 +50839,60,-1.328273669,0 +50844,60,-0.918068978,0 +50866,60,-0.853486727,0 +50876,60,-0.959960575,0 +50895,60,-1.157204945,0 +50905,60,-1.412065206,0 +50915,60,-1.640756708,0 +50926,60,-1.845022332,0 +50938,60,-2.124385192,0 +50961,60,-2.234393172,0 +50976,60,-2.272809917,0 +50985,60,-2.478875092,0 +51013,60,-2.70417387,0 +51031,60,-2.878842844,0 +51046,60,-2.964436984,0 +51102,60,-2.779279446,0 +51132,60,-2.681468137,0 +51149,60,-2.538253631,0 +51178,60,-2.442200988,0 +51205,60,-2.396795862,0 +51227,60,-2.227408381,0 +51263,60,-2.019620469,0 +51283,60,-1.607586704,0 +51308,60,-1.326528032,0 +51321,60,-1.157204945,0 +51330,60,-1.052472397,0 +51344,60,-1.204335405,0 +51363,60,-2.05454154,0 +51375,60,-1.649485716,0 +51390,60,-1.509824512,0 +51400,60,-1.169423903,0 +51411,60,-0.282744092,0 +51422,60,-1.265431246,0 +51433,60,-1.654723133,0 +51444,60,-1.057708968,0 +51454,60,0.808105034,0 +51464,6,0.808105034,0 +51469,48,0.808105034,0 +51472,48,2.218677422,0 +51488,48,2.829933808,0 +51505,48,2.559211188,0 +51568,48,2.681468137,0 +51609,48,2.237885576,0 +51627,48,0.582946573,0 +51651,48,-0.364775432,0 +51662,48,-1.089128514,0 +51673,48,-2.026604644,0 +51684,40,-2.026604644,0 +51694,40,-2.241377986,0 +51709,49,-2.241377986,0 +51713,49,-1.956763777,0 +51732,49,-1.899146502,0 +51752,49,-1.855497892,0 +51812,49,-1.604095146,0 +51859,49,-1.462690212,0 +51874,47,-0.666725653,0 +51922,47,0.001745329,0 +51954,60,0.001745329,0 +51957,60,0.26703601,0 +51978,60,0.717342627,0 +52052,60,0.726069727,0 +52079,60,0.605636655,0 +52119,60,0.607382049,0 +52132,60,0.715597208,0 +52160,60,0.701633873,0 +52219,60,0.78192344,0 +52280,60,1.113566088,0 +52300,60,1.865973494,0 +52319,60,2.994133917,0 +52351,60,3.163591378,0 +52368,60,3.109432943,0 +52378,60,2.597633959,0 +52407,60,2.330436295,0 +52429,60,2.389810546,0 +52440,60,2.24661661,0 +52453,60,1.593620493,0 +52465,60,0.825559491,0 +52478,60,0.476478492,0 +52491,60,-0.394446457,0 +52520,60,-1.410319529,0 +52546,60,-1.61282405,0 +52559,60,-1.487130137,0 +52570,60,-1.148477139,0 +52594,60,-0.521858184,0 +52609,53,-0.521858184,0 +52622,53,-0.071558512,0 +52634,53,0.246091921,0 +52639,58,0.246091921,0 +52648,58,0.247837261,0 +52661,58,-0.080285163,0 +52677,58,-0.738287687,0 +52696,58,-1.319545493,0 +52712,58,-1.757727546,0 +52729,58,-2.150577092,0 +52746,58,-2.726879881,0 +52768,58,-3.277155445,0 +52784,58,-3.923766641,0 +52803,58,-4.374837606,0 +52825,58,-4.147532721,0 +52854,58,-3.015096776,0 +52864,47,-3.015096776,0 +52883,47,-0.912832552,0 +52894,57,-0.912832552,0 +52918,57,0.53233045,0 +52945,57,1.302089201,0 +52970,57,1.314308597,0 +52988,57,1.300343577,0 +53018,57,2.044065167,0 +53050,57,3.841612498,0 +53081,57,4.145784391,0 +53101,57,0.595164302,0 +53199,57,-0.101229131,0 +53218,57,-0.914578027,0 +53236,57,-2.484114304,0 +53280,57,-2.468396709,0 +53294,57,-2.038826997,0 +53307,57,-0.567238091,0 +53330,57,0.537566588,0 +53354,57,1.272413688,0 +53383,57,1.609332485,0 +53429,57,1.586637411,0 +53466,57,1.494113005,0 +53501,57,1.46094451,0 +53617,57,1.595366266,0 +53629,32,1.595366266,0 +53649,43,1.595366266,0 +53672,43,1.63901091,0 +53729,43,1.179897323,0 +53759,43,-0.507895179,0 +53800,43,-1.010580037,0 +53822,43,-1.895654587,0 +53863,43,-2.608113029,0 +53900,43,-2.353138019,0 +53937,43,-1.012325545,0 +53974,25,-1.012325545,0 +53980,25,-0.602145869,0 +53989,36,-0.602145869,0 +54004,36,-0.642289997,0 +54058,36,-0.792396064,0 +54099,33,-0.792396064,0 +54127,33,-0.855232184,0 +54164,33,-0.891886895,0 +54204,36,-0.891886895,0 +54224,36,-0.617854417,0 +54278,36,-0.581201185,0 +54308,0,-0.581201185,59 +54309,45,-0.581201185,0 +54332,45,-1.918352119,0 +54423,45,-3.31209992,0 +54449,34,-3.31209992,0 +54504,42,-3.31209992,0 +54516,42,-4.705385075,0 +54611,42,-4.897813982,0 +54653,42,-4.46926969,0 +54695,42,-4.133546149,0 +54726,42,-4.170261246,0 +54755,42,-4.507744292,0 +54781,42,-4.882068459,0 +54801,42,-5.232027354,0 +54822,42,-5.456067601,0 +54834,18,-5.456067601,0 +54844,18,-5.461319191,0 +54849,34,-5.461319191,0 +54902,34,-5.109527638,0 +54938,34,-4.757862178,0 +54954,27,-4.757862178,0 +54960,27,-4.317132954,0 +54969,60,-4.317132954,0 +54981,60,-3.768202542,0 +55003,60,-2.763559418,0 +55033,60,-2.065017959,0 +55053,60,-1.46967303,0 +55090,60,-1.242738398,0 +55128,60,-0.54629349,0 +55167,60,0.591673521,0 +55195,60,-0.373502197,0 +55284,60,-0.197222461,0 +55308,60,0.20769448,0 +55360,60,0.406663957,0 +55391,60,0.39793717,0 +55417,60,0.186750447,0 +55435,60,-0.061086531,0 +55451,60,-0.235619885,0 +55466,60,-0.275762721,0 +55480,60,-0.164061097,0 +55498,60,0.12391844,0 +55509,45,0.12391844,0 +55521,45,0.272272036,0 +55532,45,0.630072198,0 +55534,58,0.630072198,0 +55587,58,0.602145869,0 +55601,58,0.750505669,0 +55620,58,1.103092826,0 +55633,58,-1.083891908,0 +55658,58,-2.693694266,0 +55682,58,-4.053126478,0 +55720,58,-4.647663246,0 +55747,58,-4.481511465,0 +55763,58,-3.233475974,0 +55789,28,-1.824071332,0 +55804,51,-1.824071332,0 +55810,51,-0.980906498,0 +55831,51,-0.701633873,0 +55878,51,0.347321918,0 +55912,51,0.53233045,0 +55932,51,0.541057348,0 +55983,51,-0.003490659,0 +56041,51,-0.221657178,0 +56054,51,-0.493932195,0 +56072,51,-0.62134521,0 +56092,51,-0.572474248,0 +56123,51,0.050614553,0 +56184,51,0.272272036,0 +56204,43,0.272272036,0 +56217,43,-0.068067851,0 +56229,58,-0.068067851,0 +56231,58,-0.492186823,0 +56253,58,-0.783668876,0 +56274,58,-1.242738398,0 +56296,58,-1.471418737,0 +56318,58,-2.34266027,0 +56346,58,-2.926006432,0 +56361,58,-2.981905704,0 +56382,58,-2.719893386,0 +56419,58,-2.808973208,0 +56433,58,-2.919019153,0 +56449,58,-2.908538286,0 +56476,58,-2.835173997,0 +56510,58,-2.910285093,0 +56537,58,-2.983652586,0 +56559,58,-2.964436984,0 +56590,58,-2.882336399,0 +56683,58,-3.018590611,0 +56745,58,-2.990640133,0 +56758,58,-2.845654421,0 +56783,58,-2.812466624,0 +56809,42,-2.812466624,0 +56829,42,-2.833427265,0 +56834,54,-2.833427265,0 +56895,54,-2.83692073,0 +56906,54,-2.964436984,0 +56917,54,-2.092955297,0 +56938,54,-0.448552626,0 +56953,54,0.076794502,0 +56979,24,0.076794502,0 +57067,24,0.178023772,0 +57087,24,0.275762721,0 +57103,24,0.329868425,0 +57110,24,0.459024817,0 +57114,24,0.759232812,0 +57117,24,1.986445909,0 +57124,12,1.986445909,0 +57125,12,2.83692073,0 +57132,12,2.932993741,0 +57134,46,2.932993741,0 +57136,46,2.953955838,0 +57147,46,2.98539947,0 +57168,46,3.027325232,0 +57193,46,3.062264179,0 +57207,46,3.100697883,0 +57218,46,3.165338455,0 +57234,46,3.177568048,0 +57237,46,3.210763138,0 +57247,46,3.22998167,0 +57255,46,3.242211769,0 +57265,46,3.238717445,0 +57275,46,3.22998167,0 +57282,46,3.219498805,0 +57289,46,3.161844303,0 +57349,46,3.19329195,0 +57380,46,3.226487374,0 +57384,12,3.226487374,0 +57394,37,3.226487374,0 +57456,37,3.224740229,0 +57474,37,3.228234521,0 +57482,37,3.245706101,0 +57495,37,3.268419451,0 +57507,37,3.315594411,0 +57526,37,3.322583419,0 +57530,37,3.294627582,0 +57546,37,3.20901601,0 +57558,37,3.114674002,0 +57567,37,2.983652586,0 +57578,37,2.948715289,0 +57589,37,2.987146356,0 +57592,37,3.210763138,0 +57618,37,3.224740229,0 +57628,37,3.217751667,0 +57643,37,3.191544842,0 +57663,37,3.132144321,0 +57693,37,3.097203872,0 +57716,37,3.083227905,0 +57745,37,2.138354169,0 +57760,37,3.6196471,0 +57774,13,3.6196471,0 +57776,13,4.144036063,0 +57786,13,4.166764522,0 +57797,13,3.815394186,0 +57819,13,3.785680732,0 +57833,0,3.785680732,11 +57834,48,3.785680732,0 +57848,0,3.785680732,7 +57849,47,3.785680732,0 +57854,47,3.588190369,0 +57868,0,3.588190369,13 +57869,40,3.588190369,0 +57880,40,2.840414201,0 +57900,40,0.799377824,0 +57928,0,0.799377824,16 +57929,16,0.799377824,0 +57931,16,-0.216421165,0 +57948,16,-0.523603561,0 +57964,19,-0.523603561,0 +57965,19,-0.413645392,0 +57974,19,-0.314160299,0 +57988,19,-0.389210388,0 +57994,9,-0.389210388,0 +58004,49,-0.389210388,0 +58017,49,-0.408409316,0 +58032,49,-0.242601242,0 +58045,49,0.005235988,0 +58058,49,0.209439816,0 +58072,49,0.560256552,0 +58119,49,0.460770183,0 +58147,49,-0.069813181,0 +58180,49,-0.734796839,0 +58232,49,0.141371764,0 +58311,49,0.703379288,0 +58329,30,0.703379288,0 +58349,44,0.703379288,0 +58383,44,0.687670565,0 +58395,44,0.326377729,0 +58451,44,0.26703601,0 +58467,44,0.319396339,0 +58484,34,0.319396339,0 +58504,48,0.319396339,0 +58510,48,0.296706844,0 +58534,48,0.223402516,0 +58561,48,0.363030079,0 +58602,48,0.495677567,0 +58613,48,0.619599813,0 +58630,48,0.685925153,0 +58666,48,0.762723673,0 +58684,48,0.97217902,0 +58715,48,1.132767132,0 +58733,48,1.396354145,0 +58748,0,1.396354145,5 +58749,34,1.396354145,0 +58756,34,1.534264783,0 +58769,34,1.93406591,0 +58813,34,1.867719431,0 +58842,34,1.293361086,0 +58879,19,1.293361086,0 +58881,19,1.211317741,0 +58889,38,1.211317741,0 +58899,38,1.227028039,0 +58924,38,0.813341366,0 +58949,38,0.523603561,0 +58959,38,-0.174533102,0 +58977,38,-0.806359591,0 +58995,38,-1.078655309,0 +59020,38,-0.490441452,0 +59049,38,0.057595872,0 +59054,32,0.057595872,0 +59062,32,0.84825036,0 +59074,45,0.84825036,0 +59075,45,3.904538606,0 +59096,45,5.260029474,0 +59121,45,5.193525773,0 +59138,45,4.931055328,0 +59164,45,5.034285418,0 +59179,45,5.081529863,0 +59186,45,4.609183747,0 +59206,45,3.20901601,0 +59226,45,1.66170637,0 +59241,45,-0.958215085,0 +59245,45,-3.402959358,0 +59266,45,-4.378334951,0 +59287,45,-4.689642449,0 +59304,45,-5.127026652,0 +59320,45,-5.142776033,0 +59331,45,-3.633628098,0 +59344,19,-3.633628098,0 +59352,19,-1.302089201,0 +59354,50,-1.302089201,0 +59372,50,-0.493932195,0 +59382,50,0.015707963,0 +59397,50,-0.073303842,0 +59430,50,-0.624836004,0 +59452,50,-0.860468557,0 +59470,50,-0.97217902,0 +59492,50,-1.017562072,0 +59516,50,-1.045490312,0 +59545,50,-1.539502007,0 +59559,46,-1.539502007,0 +59569,46,-1.625044557,0 +59584,52,-1.625044557,0 +59604,52,-1.54124775,0 +59641,52,-1.431267708,0 +59658,52,-1.235756008,0 +59672,52,-0.858723099,0 +59698,52,-0.778432569,0 +59714,52,-0.813341366,0 +59729,52,-0.940760219,0 +59743,52,-0.841268545,0 +59765,52,-0.464260917,0 +59777,52,-0.165806431,0 +59790,52,-0.294961499,0 +59802,52,-0.766214536,0 +59813,52,-1.609332485,0 +59836,52,-1.406828178,0 +59841,52,-0.846504906,0 +59847,52,0.21991184,0 +59855,52,2.148830957,0 +59889,52,1.858989755,0 +59896,52,1.562196744,0 +59902,52,1.263685638,0 +59908,52,0.811595921,0 +59916,52,0.916323502,0 +59924,52,-0.197222461,0 +59930,52,-1.282887372,0 +59937,52,-2.452679236,0 +59945,52,-3.525279029,0 +59949,41,-3.525279029,0 +59954,41,-4.254185697,0 +59966,41,-4.373088938,0 +59969,72,-4.373088938,0 +59976,72,-3.885310859,0 +59988,72,-3.188050632,0 +59997,72,-1.920098091,0 +60012,72,-1.214808913,0 +60027,72,-0.209439816,0 +60074,72,0.047123893,0 +60096,72,0.052359882,0 +60117,72,-0.02443461,0 +60152,72,0.150098428,0 +60186,72,0.567238091,0 +60218,72,0.841268545,0 +60235,72,1.244483997,0 +60275,72,0.422372191,0 +60291,72,-1.307326081,0 +60305,72,-1.247975197,0 +60318,72,0.446807262,0 +60343,72,1.95152579,0 +60360,72,2.92076597,0 +60379,72,3.172326782,0 +60403,72,2.601126976,0 +60421,72,1.518553159,0 +60434,72,-0.452043355,0 +60452,72,-2.030096739,0 +60470,72,-2.46141115,0 +60474,70,-2.46141115,0 +60487,70,-1.068182126,0 +60505,70,0.879668632,0 +60521,70,2.340913984,0 +60536,70,3.090215873,0 +60547,70,3.388980621,0 +60549,84,3.388980621,0 +60558,84,2.725133255,0 +60579,84,1.488875853,0 +60593,84,-0.410154674,0 +60607,84,-1.747252354,0 +60620,84,-2.288526051,0 +60634,84,-2.368854738,0 +60657,84,-2.227408381,0 +60706,84,-1.539502007,0 +60762,84,-0.870941317,0 +60789,84,0.059341202,0 +60827,84,0.495677567,0 +60873,84,0.521858184,0 +60901,84,0.562001936,0 +60914,84,0.305433569,0 +60957,84,-0.061086531,0 +60979,84,-0.223402516,0 +61003,84,-0.071558512,0 +61037,84,0.094247808,0 +61050,84,0.459024817,0 +61097,84,0.378738259,0 +61117,84,0.521858184,0 +61153,84,1.092619588,0 +61175,84,2.660509244,0 +61213,84,1.579654344,0 +61227,84,-0.176278437,0 +61238,84,-2.581915461,0 +61256,84,-3.006362219,0 +61275,84,-1.705351969,0 +61300,84,-0.644035398,0 +61318,84,-0.345576568,0 +61326,84,-0.089011815,0 +61340,84,-0.183259777,0 +61352,84,-0.886650494,0 +61368,84,-1.605840925,0 +61378,84,1.55346798,0 +61397,84,-1.083891908,0 +61411,84,-0.726069727,0 +61433,84,-0.226893192,0 +61455,84,0.068067851,0 +61469,84,0.254818622,0 +61476,84,0.314160299,0 +61493,84,0.363030079,0 +61510,84,0.562001936,0 +61545,84,0.656253219,0 +61563,84,0.633562995,0 +61578,84,0.535821208,0 +61591,84,0.438080445,0 +61602,84,0.593418911,0 +61630,84,0.570728862,0 +61646,84,0.666725653,0 +61667,84,0.944251187,0 +61690,84,1.167678335,0 +61720,84,1.007089024,0 +61744,84,0.919814455,0 +61753,84,0.856977641,0 +61777,84,0.918068978,0 +61800,84,0.968688032,0 +61817,84,1.059454493,0 +61843,0,1.059454493,7 +61844,52,1.059454493,0 +61861,52,0.860468557,0 +61880,52,0.406663957,0 +61919,52,0.443316534,0 +61930,52,0.488696081,0 +61939,52,0.504404432,0 +61954,52,0.459024817,0 +61965,52,0.3927011,0 +61984,52,0.441571171,0 +62003,52,0.425862912,0 +62014,52,0.287980123,0 +62025,52,0.148353095,0 +62031,52,-0.179769107,0 +62040,52,-0.541057348,0 +62054,52,-0.671961876,0 +62072,52,-0.677198102,0 +62082,52,-0.830795838,0 +62094,52,-1.055963444,0 +62107,52,-1.323036761,0 +62129,52,-1.314308597,0 +62139,39,-0.052359882,0 +62159,39,0.640544596,0 +62164,51,0.640544596,0 +62171,51,0.509640554,0 +62182,51,0.277508063,0 +62192,51,0.598655085,0 +62202,51,1.071673185,0 +62211,51,0.926796367,0 +62241,51,1.200844242,0 +62279,51,0.956469596,0 +62308,51,0.390955744,0 +62323,51,-0.275762721,0 +62344,51,-0.425862912,0 +62349,26,-0.425862912,0 +62366,26,-0.064577191,0 +62369,41,-0.064577191,0 +62386,41,0.467751651,0 +62409,41,0.539311968,0 +62432,41,0.144862429,0 +62455,41,1.005343518,0 +62473,41,1.972477804,0 +62488,41,2.43870825,0 +62504,41,2.365362124,0 +62519,41,1.548230733,0 +62534,16,1.548230733,0 +62539,58,1.548230733,0 +62542,58,1.373660512,0 +62556,58,1.640756708,0 +62572,58,2.466650317,0 +62589,58,4.04963009,0 +62614,58,5.121776915,0 +62640,58,5.251278724,0 +62653,0,5.251278724,11 +62654,25,5.251278724,0 +62665,25,5.139276149,0 +62680,25,5.078030197,0 +62695,25,5.071030903,0 +62710,25,5.050033316,0 +62726,25,4.964297762,0 +62729,14,4.964297762,0 +62739,26,4.789349694,0 +62755,26,4.376586277,0 +62770,26,3.130397281,0 +62794,26,2.148830957,0 +62812,26,1.045490312,0 +62832,26,0.026179939,0 +62838,0,0.026179939,134 +62839,35,0.026179939,0 +62852,35,-1.752489945,0 +62858,35,-2.608113029,0 +62865,35,-3.245706101,0 +62875,35,-2.066764033,0 +62884,35,0.064577191,0 +62898,35,1.17466061,0 +62908,35,-0.66323484,0 +62914,35,-1.064691071,0 +62920,35,-1.183388469,0 +62926,35,-0.104719793,0 +62931,35,0.408409316,0 +62942,35,0.609127442,0 +62957,35,0.623090606,0 +62969,35,0.541057348,0 +62978,35,0.567238091,0 +62986,35,-2.34266027,0 +63002,35,-1.282887372,0 +63009,35,-0.670216468,0 +63019,35,-0.078539832,0 +63027,35,0.891886895,0 +63034,21,0.891886895,0 +63043,21,1.328273669,0 +63049,35,1.328273669,0 +63059,35,1.817087701,0 +63080,35,3.039553779,0 +63096,35,-3.238717445,0 +63107,35,5.755456994,0 +63122,35,6.556099111,0 +63134,35,6.256422739,0 +63154,35,5.314285928,0 +63172,35,4.691391619,0 +63186,35,4.124804624,0 +63198,35,3.292880359,0 +63219,19,2.863121934,0 +63229,42,2.863121934,0 +63233,42,2.480621495,0 +63251,42,2.169784673,0 +63277,42,2.148830957,0 +63326,42,1.371914854,0 +63442,42,0.837777641,0 +63469,11,0.837777641,0 +63474,35,0.837777641,0 +63491,35,0.350812619,0 +63591,35,0.380483613,0 +63615,35,0.387465033,0 +63639,19,0.387465033,0 +63649,47,0.387465033,0 +63666,47,0.359539375,0 +63725,47,0.20769448,0 +63782,47,-0.314160299,0 +63851,47,-0.37001149,0 +63895,47,-0.3927011,0 +63964,47,-0.48695071,0 +64011,47,-0.558511168,0 +64014,19,-0.558511168,0 +64029,30,-0.558511168,0 +64091,30,-0.56374732,0 +64129,30,-0.549784254,0 +64164,16,-0.549784254,0 +64174,30,-0.549784254,0 +64175,30,-0.457279451,0 +64199,30,-0.705124704,0 +64219,30,-0.647526202,0 +64240,30,-0.235619885,0 +64261,30,0.514876679,0 +64274,12,1.148477139,0 +64284,21,1.148477139,0 +64288,21,1.87121131,0 +64316,21,1.813595892,0 +64337,21,1.132767132,0 +64357,21,0.020943951,0 +64358,0,0.020943951,8 +64359,36,0.020943951,0 +64379,36,-1.2165545,0 +64394,14,-1.2165545,0 +64399,32,-1.2165545,0 +64400,32,-1.995176014,0 +64421,32,-2.503324865,0 +64454,32,-2.534760727,0 +64489,32,-2.45791838,0 +64521,32,-2.384571574,0 +64550,32,-2.311227333,0 +64564,16,-2.311227333,0 +64569,34,-2.311227333,0 +64577,34,-2.187246249,0 +64612,34,-1.989937947,0 +64652,34,-1.602349368,0 +64664,11,-1.602349368,0 +64669,34,-1.602349368,0 +64711,34,-1.204335405,0 +64754,31,-1.204335405,0 +64764,31,-0.701633873,0 +64786,31,0.467751651,0 +64808,31,2.405527539,0 +64829,32,2.405527539,0 +64846,32,3.149614832,0 +64879,21,3.149614832,0 +64880,21,2.829933808,0 +64893,21,2.625578274,0 +64894,46,2.625578274,0 +64900,46,2.388064221,0 +64906,46,2.244870401,0 +64911,46,1.78566158,0 +64921,46,0.862214016,0 +64937,46,0.274017378,0 +64946,46,-0.537566588,0 +64958,46,-1.150222698,0 +64966,46,-1.937557877,0 +64977,46,-2.702427265,0 +64990,46,-2.941727917,0 +65001,46,-2.801986396,0 +65013,46,-0.726069727,0 +65033,46,1.787407466,0 +65048,46,4.082846176,0 +65064,46,-4.7561129,0 +65076,46,3.457128222,0 +65100,46,2.882336399,0 +65114,46,2.405527539,0 +65128,46,0.745269388,0 +65161,46,-0.186750447,0 +65182,46,-0.284489436,0 +65209,46,-0.048869223,0 +65223,46,0.216421165,0 +65241,46,0.37001149,0 +65253,46,0.567238091,0 +65264,17,0.567238091,0 +65274,17,0.638799195,0 +65279,62,0.638799195,0 +65289,62,-0.652762411,0 +65313,62,0.48520534,0 +65380,62,0.541057348,0 +65396,62,0.832541288,0 +65443,62,2.003906149,0 +65515,62,2.187246249,0 +65541,62,2.620338684,0 +65645,62,2.777532769,0 +65669,62,2.838667465,0 +65725,62,2.414259254,0 +65766,62,1.330019306,0 +65808,62,0.7749417,0 +65836,62,0.699888458,0 +65839,45,0.699888458,0 +65852,45,0.581201185,0 +65864,56,0.581201185,0 +65868,56,0.164061097,0 +65903,56,0.02443461,0 +65912,56,0.366520784,0 +65921,56,0.038397245,0 +65934,56,-0.296706844,0 +65945,56,-0.509640554,0 +65952,56,-0.734796839,0 +65959,56,-1.532519043,0 +65987,56,-2.031842788,0 +65999,54,-2.031842788,0 +66025,54,-1.857243823,0 +66065,54,-1.804866389,0 +66074,57,-1.804866389,0 +66092,57,-2.003906149,0 +66142,57,-2.326943744,0 +66156,57,-2.365362124,0 +66162,57,-2.208200316,0 +66168,57,-1.853751963,0 +66175,57,-1.110074998,0 +66187,57,0.874432242,0 +66192,57,-1.658214749,0 +66214,57,-1.715827008,0 +66236,57,-0.867450395,0 +66261,57,0.270526694,0 +66277,57,1.581400109,0 +66279,40,1.581400109,0 +66291,40,2.878842844,0 +66303,40,4.287407438,0 +66304,62,4.287407438,0 +66319,62,5.216276521,0 +66341,62,4.852327573,0 +66363,62,1.218300088,0 +66423,62,0.35255797,0 +66443,62,-0.038397245,0 +66460,62,-0.29147081,0 +66477,62,-0.591673521,0 +66478,0,-0.591673521,10 +66479,33,-0.591673521,0 +66492,33,-1.452216012,0 +66518,33,-2.363615819,0 +66588,33,-2.833427265,0 +66619,23,-2.833427265,0 +66630,23,-2.796746305,0 +66634,56,-2.796746305,0 +66672,56,-2.470143102,0 +66724,56,-2.108670192,0 +66801,56,-1.167678335,0 +66874,56,-1.005343518,0 +66882,56,-0.822068595,0 +66897,56,-0.792396064,0 +66900,56,-0.492186823,0 +66947,56,-0.474733123,0 +66973,56,-0.502659058,0 +66999,22,-0.502659058,0 +67006,22,-0.495677567,0 +67014,42,-0.495677567,0 +67060,42,-0.640544596,0 +67107,42,-0.727815149,0 +67136,42,-0.738287687,0 +67148,42,-0.541057348,0 +67187,42,-0.115191782,0 +67217,42,0.200713134,0 +67236,42,0.514876679,0 +67254,31,0.514876679,0 +67264,31,0.678943511,0 +67274,26,0.678943511,0 +67294,26,0.692906802,0 +67312,26,0.623090606,0 +67314,85,0.623090606,0 +67333,85,0.42062683,0 +67352,85,-0.469497018,0 +67398,85,-0.876177704,0 +67417,85,-1.371914854,0 +67429,85,-2.052795475,0 +67449,85,-2.353138019,0 +67460,85,-2.536507178,0 +67469,85,-2.644790228,0 +67476,85,-2.737359674,0 +67484,85,-2.845654421,0 +67492,85,-3.006362219,0 +67503,85,-3.200280402,0 +67512,85,-3.408201418,0 +67521,85,-3.665085864,0 +67531,85,-3.897546664,0 +67540,85,-4.166764522,0 +67549,85,-4.617928968,0 +67561,85,-5.109527638,0 +67573,85,-5.265279964,0 +67583,85,-5.085029541,0 +67584,32,-5.085029541,0 +67592,32,-4.598689575,0 +67601,32,-4.166764522,0 +67604,79,-4.166764522,0 +67606,79,-2.97142445,0 +67619,79,-1.204335405,0 +67642,79,-0.701633873,0 +67664,79,0.467751651,0 +67686,79,2.405527539,0 +67723,79,3.799663451,0 +67800,79,3.68605811,0 +67817,79,3.320836164,0 +67836,79,2.77229275,0 +67854,79,1.312562967,0 +67879,79,-0.006981317,0 +67893,79,-1.441741844,0 +67905,79,-4.177254724,0 +67934,79,-5.776470576,0 +67965,79,-6.133780785,0 +67974,46,-6.133780785,0 +68000,46,-5.209276233,0 +68033,46,-3.343550638,0 +68056,46,-1.279396141,0 +68078,46,-0.520112807,0 +68100,46,-0.712106371,0 +68196,46,-0.572474248,0 +68422,46,-0.591673521,0 +68458,46,-0.631817596,0 +68489,20,-0.631817596,0 +68504,45,-0.631817596,0 +68577,45,-0.635308395,0 +68623,45,-0.638799195,0 +68669,45,-1.150222698,0 +68743,0,-1.150222698,6 +68744,18,-1.150222698,0 +68758,18,-0.92330541,0 +68772,18,-0.792396064,0 +68778,0,-0.792396064,8 +68779,39,-0.792396064,0 +68797,39,-0.877923168,0 +68806,39,-0.937269252,0 +68811,39,-1.045490312,0 +68818,0,-1.045490312,49 +68819,39,-1.045490312,0 +68840,39,-1.249720799,0 +68860,39,-1.19037077,0 +68870,39,-1.045490312,0 +68880,39,-0.338595169,0 +68898,39,0.965197047,0 +68919,39,1.52728183,0 +68936,39,0.050614553,0 +69004,37,0.050614553,0 +69042,37,-3.607413842,0 +69069,37,-3.369760074,0 +69089,37,-3.154856022,0 +69108,37,-3.002868409,0 +69127,37,-2.932993741,0 +69144,37,-2.910285093,0 +69153,0,-2.910285093,5 +69154,49,-2.910285093,0 +69163,49,-3.175820958,0 +69213,49,-2.936487406,0 +69229,49,-1.031526172,0 +69266,49,-0.338595169,0 +69307,49,-0.403173242,0 +69341,49,-0.356048672,0 +69365,49,-0.155334428,0 +69389,49,0.198967797,0 +69404,22,0.198967797,0 +69414,50,0.675452692,0 +69431,50,1.466181619,0 +69448,50,2.712906918,0 +69475,50,3.070999032,0 +69491,50,2.807226502,0 +69507,50,2.202961781,0 +69521,50,1.314308597,0 +69538,50,0.314160299,0 +69560,50,-0.223402516,0 +69577,50,-0.438080445,0 +69594,50,-0.542802728,0 +69627,50,-0.753996525,0 +69649,50,-1.508078786,0 +69674,50,-2.391556873,0 +69694,50,-3.043047666,0 +69713,50,-3.216004532,0 +69733,50,-2.688454487,0 +69757,50,-1.600603591,0 +69785,50,-0.93552377,0 +69811,50,-0.764469104,0 +69836,50,-0.804614148,0 +69848,50,-0.755741954,0 +69889,50,-0.66847106,0 +69921,50,-0.991379492,0 +69943,0,-0.991379492,7 +69944,18,-0.991379492,0 +69953,0,-1.614569833,27 +69954,48,-1.614569833,0 +69981,48,-2.370601047,0 +70003,48,-3.140879552,0 +70025,48,-3.605666243,0 +70052,48,-3.617899485,0 +70077,48,-3.684310411,0 +70102,48,-3.782185076,0 +70122,48,-3.728003575,0 +70137,48,-3.56721961,0 +70152,48,-2.936487406,0 +70171,48,-2.085970932,0 +70185,48,-1.061200018,0 +70201,48,0.094247808,0 +70226,48,0.832541288,0 +70248,0,0.832541288,7 +70249,43,0.832541288,0 +70264,43,1.251466401,0 +70281,43,1.927081991,0 +70307,43,2.215185048,0 +70335,43,1.928827969,0 +70339,32,1.928827969,0 +70369,32,0.921559932,0 +70374,40,0.921559932,0 +70398,40,-0.218166503,0 +70424,40,-1.17291504,0 +70451,40,-1.810104088,0 +70480,40,-2.045811226,0 +70505,40,-2.010890279,0 +70529,40,-1.742014773,0 +70552,40,-1.138003794,0 +70578,0,-0.806359591,46 +70579,42,-0.806359591,0 +70594,42,-0.469497018,0 +70613,42,-0.127409104,0 +70629,42,-0.085521154,0 +70648,42,0.118682445,0 +70661,10,0.118682445,0 +70672,43,0.118682445,0 +70675,43,0.656253219,0 +70705,43,0.579455797,0 +70735,43,0.242601242,0 +70753,43,-0.143117096,0 +70769,43,-0.476478492,0 +70791,43,-0.539311968,0 +70807,43,-0.47996923,0 +70821,43,-0.263545327,0 +70838,43,0.118682445,0 +70851,43,0.727815149,0 +70868,43,1.204335405,0 +70885,43,1.534264783,0 +70901,43,1.745506493,0 +70925,43,1.338747506,0 +70957,43,0.684179742,0 +70979,20,0.684179742,0 +70990,20,0.39793717,0 +70994,35,0.39793717,0 +71034,35,0.518367431,0 +71050,35,0.553275018,0 +71068,35,0.549784254,0 +71082,35,0.448552626,0 +71094,35,0.106465125,0 +71105,35,-0.858723099,0 +71118,35,-1.031526172,0 +71126,35,-1.132767132,0 +71133,35,-1.151968259,0 +71145,35,-0.994870495,0 +71158,35,-0.717342627,0 +71170,35,0.017453293,0 +71196,35,0.415390751,0 +71220,35,0.396191813,0 +71270,35,0.492186823,0 +71274,64,0.492186823,0 +71289,64,3.525279029,0 +71328,0,3.525279029,5 +71329,85,3.525279029,0 +71336,85,4.233204028,0 +71363,85,2.347899138,0 +71417,85,2.519042734,0 +71443,85,2.906791481,0 +71456,85,3.18455643,0 +71468,85,3.588190369,0 +71512,85,3.462370477,0 +71571,85,2.641297131,0 +71600,85,0.794141503,0 +71631,85,-0.095993138,0 +71650,85,-0.410154674,0 +71689,85,-0.380483613,0 +71708,85,-0.37001149,0 +71740,85,-0.141371764,0 +71814,85,-0.415390751,0 +71831,85,-1.033271687,0 +71844,85,-1.817087701,0 +71859,85,-2.026604644,0 +71869,85,-1.157204945,0 +71889,85,-0.095993138,0 +71904,85,0.466006284,0 +71919,85,1.080400841,0 +71958,85,1.001852508,0 +72008,85,0.598655085,0 +72093,85,0.226893192,0 +72105,85,1.649485716,0 +72176,85,1.78566158,0 +72193,85,1.66170637,0 +72205,85,1.804866389,0 +72224,85,2.166292374,0 +72238,85,2.543492999,0 +72250,85,2.77054608,0 +72260,85,2.912031901,0 +72269,85,3.023831378,0 +72279,85,3.133891363,0 +72310,85,3.432664615,0 +72353,85,6.717376689,0 +72364,17,6.717376689,0 +72374,49,6.717376689,0 +72378,49,6.000647462,0 +72404,49,5.566357329,0 +72423,49,5.524340617,0 +72438,49,5.49282936,0 +72452,49,5.478824706,0 +72466,49,5.499831767,0 +72482,49,5.321286988,0 +72554,49,4.390575741,0 +72625,49,3.362770846,0 +72642,49,1.911368242,0 +72656,49,0.792396064,0 +72671,49,0.087266485,0 +72684,46,0.087266485,0 +72688,46,-0.040142575,0 +72703,46,0.034906586,0 +72717,46,0.031415928,0 +72731,46,-0.364775432,0 +72750,46,-1.846768256,0 +72797,46,-2.592394445,0 +72823,46,-2.571436533,0 +72848,46,-2.23963178,0 +72864,46,-2.115654624,0 +72877,46,-2.316466124,0 +72921,46,-2.295511036,0 +72931,46,-2.262332557,0 +72934,34,-2.262332557,0 +72939,34,-2.211692679,0 +72947,34,-2.133115793,0 +72954,47,-2.133115793,0 +72956,47,-1.982953875,0 +72970,47,-1.157204945,0 +73010,47,-0.801123265,0 +73027,47,-0.698143043,0 +73047,47,-0.823814043,0 +73101,47,-0.603891262,0 +73172,47,0.089011815,0 +73242,47,2.082478757,0 +73302,47,3.507804154,0 +73329,28,3.507804154,0 +73344,35,3.507804154,0 +73387,35,3.848604137,0 +73411,35,4.27691626,0 +73477,35,4.570705609,0 +73502,35,4.665154382,0 +73526,35,4.322378713,0 +73550,35,1.728047936,0 +73559,14,1.728047936,0 +73578,0,1.728047936,49 +73579,22,1.728047936,0 +73635,22,1.158950508,0 +73643,0,1.158950508,25 +73644,52,1.158950508,0 +73674,52,0.682434331,0 +73749,52,0.153589095,0 +73837,52,-0.127409104,0 +73857,52,0.029670598,0 +73874,52,0.204203806,0 +73894,52,0.478223861,0 +73924,52,0.918068978,0 +74004,52,0.755741954,0 +74022,52,0.356048672,0 +74035,52,-0.614363626,0 +74059,52,-2.023112554,0 +74089,52,-3.19503906,0 +74115,52,-3.859091666,0 +74146,52,-4.514739816,0 +74176,52,-5.298533735,0 +74215,52,-5.407054208,0 +74250,52,-5.400052506,0 +74281,10,-5.400052506,0 +74284,10,-5.274030843,0 +74292,53,-5.274030843,0 +74325,53,-4.668652643,0 +74357,53,-3.997185453,0 +74379,53,-3.231728821,0 +74410,53,-3.023831378,0 +74428,53,-3.009856036,0 +74457,53,-2.821200194,0 +74504,53,-2.602873487,0 +74528,53,-2.482367899,0 +74550,53,-2.426483716,0 +74569,53,-2.403781201,0 +74586,53,-2.409020221,0 +74601,53,-2.475382292,0 +74625,53,-3.189797736,0 +74667,53,-3.277155445,0 +74683,0,-3.277155445,6 +74684,42,-3.277155445,0 +74686,42,-2.978411946,0 +74701,42,-2.695440863,0 +74716,42,-2.396795862,0 +74733,42,-2.178515444,0 +74746,42,-1.824071332,0 +74762,42,-1.331764945,0 +74777,42,-0.963451556,0 +74791,42,-2.169784673,0 +74806,42,0.858723099,0 +74811,42,-0.287980123,0 +74814,42,-1.316054228,0 +74817,42,-2.567943569,0 +74821,42,-3.691301222,0 +74825,42,-4.236700947,0 +74828,42,-4.408062813,0 +74831,42,-4.177254724,0 +74835,42,-3.689553516,0 +74838,42,-2.557464716,0 +74841,42,-2.92425961,0 +74844,42,-3.048288511,0 +74853,0,-3.114674002,196 +74854,82,-3.114674002,0 +74862,82,-3.079733931,0 +74869,82,-2.931246911,0 +74876,82,-2.585408449,0 +74887,82,-2.154069368,0 +74901,82,-1.733285492,0 +74916,82,-1.532519043,0 +74928,82,-1.63901091,0 +74940,82,-1.913114209,0 +74952,82,0.169297099,0 +74980,82,0.588182741,0 +75002,82,0.56374732,0 +75023,82,-0.174533102,0 +75049,18,-0.673707284,0 +75061,18,-0.862214016,0 +75069,49,-0.837777641,0 +75077,49,-0.630072198,0 +75086,49,0.062831861,0 +75101,49,0.506149805,0 +75119,49,-0.270526694,0 +75136,49,-1.200844242,0 +75153,49,-1.298597953,0 +75169,31,-1.298597953,0 +75172,31,-0.911087077,0 +75189,57,-0.911087077,0 +75193,57,-0.684179742,0 +75212,57,-0.575965022,0 +75225,57,-0.478223861,0 +75238,57,-0.394446457,0 +75247,57,-0.073303842,0 +75275,57,0.136135766,0 +75291,57,0.340340518,0 +75311,57,0.544548109,0 +75335,57,0.698143043,0 +75361,57,0.760978242,0 +75388,57,0.284489436,0 +75449,25,0.284489436,0 +75454,25,-0.116937113,0 +75469,33,-0.116937113,0 +75473,33,-0.70687012,0 +75492,33,-0.937269252,0 +75504,39,-0.937269252,0 +75509,39,-0.548038872,0 +75526,39,-0.017453293,0 +75542,39,0.312414953,0 +75555,39,0.542802728,0 +75569,39,0.614363626,0 +75584,39,0.439825808,0 +75602,39,0.21991184,0 +75604,23,0.21991184,0 +75616,23,0.052359882,0 +75619,36,0.052359882,0 +75631,36,-0.061086531,0 +75660,36,-0.20769448,0 +75719,33,-0.20769448,0 +75740,33,-0.169297099,0 +75756,33,-0.006981317,0 +75767,33,0.085521154,0 +75780,33,-0.075049172,0 +75789,42,-0.075049172,0 +75793,42,-0.614363626,0 +75813,42,-1.092619588,0 +75822,42,-1.35969527,0 +75830,42,-1.431267708,0 +75840,42,-1.518553159,0 +75854,42,-1.497604445,0 +75866,42,-0.940760219,0 +75868,0,-0.940760219,29 +75869,20,-0.940760219,0 +75882,20,-0.635308395,0 +75888,20,-0.493932195,0 +75894,20,-0.499168312,0 +75898,20,-0.626581401,0 +75903,20,-1.452216012,0 +75915,20,-3.19329195,0 +75934,9,-3.19329195,0 +75939,31,-3.19329195,0 +75942,31,-1.602349368,0 +75952,31,0.127409104,0 +75966,31,1.340493149,0 +75969,83,1.340493149,0 +75984,83,1.600603591,0 +75996,83,1.410319529,0 +75999,27,1.410319529,0 +76007,27,1.2165545,0 +76014,85,1.2165545,0 +76019,85,2.230900774,0 +76056,85,2.436961884,0 +76138,85,2.389810546,0 +76158,0,2.389810546,18 +76159,85,2.389810546,0 +76212,85,3.077986948,0 +76221,85,3.006362219,0 +76230,85,2.828187082,0 +76241,85,2.562704136,0 +76251,85,2.24661661,0 +76262,85,2.010890279,0 +76267,85,2.072002263,0 +76279,85,2.494592769,0 +76292,85,2.919019153,0 +76303,85,3.687805812,0 +76318,85,3.455380807,0 +76330,85,3.116421025,0 +76345,85,2.842160939,0 +76358,0,2.842160939,31 +76359,43,2.842160939,0 +76366,43,2.819453477,0 +76389,85,2.819453477,0 +76404,85,3.048288511,0 +76450,85,3.088468878,0 +76499,85,3.750724582,0 +76514,21,3.750724582,0 +76529,77,3.750724582,0 +76535,77,4.532228822,0 +76567,77,4.817339391,0 +76589,77,4.703635883,0 +76594,16,4.703635883,0 +76609,85,4.703635883,0 +76611,85,4.112566594,0 +76627,85,3.301616493,0 +76643,85,3.158350159,0 +76654,16,3.158350159,0 +76659,85,3.457128222,0 +76680,85,3.616151872,0 +76683,0,3.616151872,13 +76684,85,3.616151872,0 +76697,85,3.560229427,0 +76711,85,3.432664615,0 +76729,85,3.395969973,0 +76757,85,3.659842853,0 +76790,85,3.73324685,0 +76820,85,3.175820958,0 +76849,85,2.794999612,0 +76863,0,2.794999612,8 +76864,85,2.794999612,0 +76870,85,2.92076597,0 +76891,85,3.142626604,0 +76902,85,4.380083627,0 +76959,38,4.380083627,0 +76960,38,4.869822108,0 +76979,38,5.690668297,0 +76984,79,5.690668297,0 +77015,79,5.627635216,0 +77052,79,5.331788674,0 +77090,79,5.333538967,0 +77104,79,5.375546967,0 +77117,79,5.464820267,0 +77132,79,4.792848365,0 +77175,79,4.981794218,0 +77217,79,5.281031605,0 +77244,79,5.370295864,0 +77262,79,5.190025705,0 +77279,28,4.824336933,0 +77294,28,4.303144381,0 +77304,85,4.303144381,0 +77309,85,3.121662107,0 +77335,85,2.216931234,0 +77349,85,1.181642896,0 +77363,85,0.654507815,0 +77377,85,0.354303321,0 +77405,85,-0.111701119,0 +77424,85,-0.729560571,0 +77444,85,-1.118802728,0 +77467,85,-0.895377833,0 +77494,85,-0.518367431,0 +77514,85,-0.242601242,0 +77532,85,0.003490659,0 +77553,85,0.095993138,0 +77565,85,0.383974322,0 +77568,0,0.383974322,7 +77569,47,0.383974322,0 +77580,47,-0.095993138,0 +77595,47,-0.003490659,0 +77607,47,0.242601242,0 +77629,47,0.518367431,0 +77647,47,0.895377833,0 +77666,47,1.118802728,0 +77693,47,0.729560571,0 +77716,47,0.111701119,0 +77737,47,-0.354303321,0 +77756,47,-0.654507815,0 +77783,47,-1.181642896,0 +77798,47,-2.216931234,0 +77812,47,-3.121662107,0 +77825,47,-4.303144381,0 +77839,30,-4.303144381,0 +77851,30,-4.824336933,0 +77854,41,-4.824336933,0 +77867,41,-5.190025705,0 +77882,41,-5.370295864,0 +77899,41,-5.281031605,0 +77917,41,-4.981794218,0 +77943,41,-4.792848365,0 +77985,41,-5.464820267,0 +78002,41,-5.375546967,0 +78017,41,-5.333538967,0 +78019,15,-5.333538967,0 +78024,45,-5.333538967,0 +78029,45,-5.331788674,0 +78043,45,-5.627635216,0 +78082,45,-5.690668297,0 +78118,45,-4.869822108,0 +78154,45,-4.381832306,0 +78173,45,-3.142626604,0 +78232,45,-2.92076597,0 +78243,45,-2.794999612,0 +78264,45,-3.175820958,0 +78285,45,-3.73324685,0 +78313,45,-3.659842853,0 +78343,45,-3.395969973,0 +78369,18,-3.395969973,0 +78374,58,-3.395969973,0 +78377,58,-3.432664615,0 +78404,58,-3.560229427,0 +78422,58,-3.616151872,0 +78437,58,-3.457128222,0 +78453,58,-3.158350159,0 +78474,58,-3.301616493,0 +78490,58,-4.112566594,0 +78507,58,-4.703635883,0 +78522,58,-4.817339391,0 +78545,58,-4.532228822,0 +78566,58,-3.750724582,0 +78599,58,-3.088468878,0 +78634,58,-3.048288511,0 +78639,27,-3.048288511,0 +78659,49,-3.048288511,0 +78684,49,-2.819453477,0 +78730,49,-2.842160939,0 +78768,49,-3.116421025,0 +78788,49,-3.455380807,0 +78794,16,-3.455380807,0 +78803,16,-3.687805812,0 +78809,51,-3.687805812,0 +78816,51,-2.919019153,0 +78825,51,-2.494592769,0 +78837,51,-2.072002263,0 +78849,51,-2.010890279,0 +78861,51,-2.24661661,0 +78869,51,-2.562704136,0 +78881,51,-2.828187082,0 +78891,51,-3.006362219,0 +78901,51,-3.077986948,0 +78911,51,-1.286378607,0 +78922,51,1.481892996,0 +78929,51,0.980906498,0 +78940,51,1.080400841,0 +78990,51,0.078539832,0 +79074,22,0.078539832,0 +79089,64,0.078539832,0 +79109,64,-0.172787768,0 +79163,64,-0.001745329,0 +79191,64,0.527094315,0 +79232,64,0.441571171,0 +79256,64,0.232129207,0 +79308,64,0.345576568,0 +79332,64,0.47996923,0 +79434,64,0.832541288,0 +79524,45,0.832541288,0 +79531,45,0.877923168,0 +79544,45,0.637053795,0 +79554,60,0.637053795,0 +79573,60,0.003490659,0 +79602,60,-0.815086811,0 +79657,60,-0.790650626,0 +79699,60,-0.726069727,0 +79709,60,-0.008726646,0 +79746,60,0.603891262,0 +79794,60,-0.012217305,0 +79811,60,-1.263685638,0 +79835,60,-1.733285492,0 +79860,60,-0.553275018,0 +79909,22,-0.553275018,0 +79924,32,-0.300197533,0 +79960,32,-0.495677567,0 +79975,32,-0.759232812,0 +79990,32,-1.080400841,0 +79994,22,-1.080400841,0 +80004,38,-1.080400841,0 +80009,38,-1.26194003,0 +80013,38,-0.7749417,0 +80037,38,-0.340340518,0 +80063,0,-0.340340518,7 +80064,18,-0.340340518,0 +80077,18,0.530585072,0 +80118,18,0.459024817,0 +80123,18,0.183259777,0 +80128,0,0.183259777,108 +80129,24,0.183259777,0 +80143,0,-0.939014735,14 +80144,56,-0.939014735,0 +80168,56,-0.493932195,0 +80196,56,-0.12391844,0 +80210,56,0.038397245,0 +80225,56,-0.197222461,0 +80245,56,-0.521858184,0 +80256,56,-0.010471976,0 +80264,16,-0.010471976,0 +80274,27,-0.010471976,0 +80279,27,1.010580037,0 +80290,27,2.491099941,0 +80312,27,2.636057497,0 +80323,27,2.375839984,0 +80334,27,2.141846427,0 +80346,27,2.492846354,0 +80359,27,3.257936325,0 +80372,27,3.617899485,0 +80381,27,3.691301222,0 +80393,27,3.368012764,0 +80406,27,2.644790228,0 +80419,27,1.518553159,0 +80424,34,1.518553159,0 +80432,34,0.019198622,0 +80457,34,-0.97217902,0 +80481,34,-1.927081991,0 +80521,34,-2.037080943,0 +80549,34,-1.803120492,0 +80558,0,-1.803120492,20 +80559,13,-1.803120492,0 +80562,13,-1.138003794,0 +80579,21,-1.138003794,0 +80581,21,0.350812619,0 +80617,21,0.289725466,0 +80638,21,0.651017008,0 +80668,0,0.651017008,33 +80669,72,0.651017008,0 +80671,72,0.29147081,0 +80688,0,0.29147081,25 +80689,59,0.29147081,0 +80702,59,-0.11344645,0 +80726,10,-0.11344645,0 +80737,29,-0.11344645,0 +80742,29,-0.027925269,0 +80780,29,-0.015707963,0 +80828,29,-0.087266485,0 +80844,29,-0.232129207,0 +80876,10,-0.232129207,0 +80887,27,-0.232129207,0 +80984,16,-0.232129207,0 +80994,30,-0.232129207,0 +81098,30,-0.233874546,0 +81102,30,-0.263545327,0 +81143,0,-0.263545327,81 +81144,66,-0.263545327,0 +81254,66,-0.265290669,0 +81341,66,-0.260054645,0 +81422,66,-0.261799986,0 +81438,66,-0.303688223,0 +81564,32,-0.303688223,0 +81584,54,-0.303688223,0 +81710,54,-0.305433569,0 +81728,54,-0.307178915,0 +81765,54,-0.305433569,0 +81823,54,-0.303688223,0 +81869,54,-0.298452188,0 +81926,54,-0.286234779,0 +81999,15,-0.286234779,0 +82005,15,-0.270526694,0 +82009,63,-0.270526694,0 +82042,63,-0.249582601,0 +82084,63,-0.312414953,0 +82210,63,-0.349067268,0 +82237,63,-0.383974322,0 +82258,63,-0.469497018,0 +82299,63,-0.502659058,0 +82313,63,-0.593418911,0 +82347,63,-0.651017008,0 +82366,63,0.83603219,0 +82401,63,3.21913976,0 +82420,63,7.03490659,0 +82440,63,10.65690854,0 +82454,63,6.149614832,0 +82469,63,2.300197533,0 +82480,63,0.249582601,0 +82491,63,1.221791266,0 +82502,63,0.033161257,0 +82508,63,0.698143043,0 +82524,63,0.006981317,0 +82544,63,-1.092619588,0 +82589,63,-2.70417387,0 +82660,63,-3.09545687,0 +82675,63,-3.406454062,0 +82684,63,-4.074105014,0 +82703,63,-4.273419222,0 +82713,63,1.045490312,0 +82720,63,0.254818622,0 +82732,63,-0.087266485,0 +82748,63,-1.47124239,0 +82769,63,-4.79937782,0 +82779,26,-4.79937782,0 +82791,26,-5.38921039,0 +82794,85,-5.38921039,0 +82802,85,-6.38882705,0 +82814,85,-9.16230882,0 +82829,85,-10.45219492,0 +82843,85,-8.639837947,0 +82857,85,-3.748976798,0 +82871,85,0.987888492,0 +82884,85,4.10049544,0 +82897,85,9.18055349,0 +82910,85,3.91068856,0 +82923,85,0.726256,0 +82937,85,-1.041999273,0 +82951,85,-4.10557349,0 +82964,85,-5.683664399,0 +82977,85,-5.722186524,0 +82991,85,-3.995437336,0 +83019,85,-1.654723133,0 +83045,85,-0.048869223,0 +83085,85,0.038397245,0 +83113,85,-0.151843762,0 +83144,85,0.019198622,0 +83175,85,0.20769448,0 +83194,85,0.30892426,0 +83260,85,0.083775824,0 +83314,85,0.562001936,0 +83376,85,1.061200018,0 +83400,85,1.570925532,0 +83437,85,1.335256224,0 +83474,85,0.818577702,0 +83490,85,-1.572671293,0 +83501,85,-1.975969823,0 +83524,85,-1.700114463,0 +83531,85,-1.00883453,0 +83544,85,0.158825095,0 +83564,85,0.755741954,0 +83580,85,1.012325545,0 +83597,85,1.131021579,0 +83621,85,1.015816563,0 +83648,85,0.780178004,0 +83670,85,0.4817146,0 +83688,85,0.005235988,0 +83734,85,0.270526694,0 +83779,85,0.839523093,0 +83817,85,0.006981317,0 +83854,85,-0.579455797,0 +83873,85,-0.432844358,0 +83905,85,0.141371764,0 +83937,85,0.385719678,0 +83962,85,-0.436335082,0 +84005,85,-0.317650992,0 +84032,85,-0.127409104,0 +84053,85,-0.253073282,0 +84069,85,-0.48520534,0 +84101,85,-0.399682527,0 +84119,85,0.001745329,0 +84145,85,0.649271605,0 +84168,85,2.138354169,0 +84227,85,1.963747777,0 +84241,85,0.795886943,0 +84265,85,-0.092502477,0 +84282,85,-0.172787768,0 +84290,85,0.396191813,0 +84362,85,0.305433569,0 +84369,85,0.178023772,0 +84377,85,-0.141371764,0 +84404,85,-0.270526694,0 +84431,85,-0.460770183,0 +84565,85,-0.328123077,0 +84626,85,-0.146607762,0 +84646,85,0.167551765,0 +84688,85,0.232129207,0 +84730,85,0.230383869,0 +84742,85,0.282744092,0 +84756,10,0.282744092,0 +84759,10,0.132645101,0 +84767,31,0.132645101,0 +84778,31,-0.162315763,0 +84788,31,-0.778432569,0 +84811,31,-1.474910153,0 +84858,31,-1.701860297,0 +84864,13,-1.701860297,0 +84874,36,-1.701860297,0 +84904,36,0.0994838,0 +84922,36,-0.101229131,0 +84943,36,-0.188495782,0 +84957,36,-0.21991184,0 +84967,36,-0.209439816,0 +84975,36,0.02443461,0 +84984,13,0.02443461,0 +84989,37,0.02443461,0 +85035,37,-0.089011815,0 +85090,37,-0.212930491,0 +85102,37,-0.136135766,0 +85164,20,-0.136135766,0 +85179,42,-0.136135766,0 +85190,42,0.223402516,0 +85267,42,0.891886895,0 +85358,42,0.816832256,0 +85388,42,-0.005235988,0 +85389,11,-0.005235988,0 +85394,23,-0.005235988,0 +85414,23,-0.696397629,0 +85427,23,-1.131021579,0 +85435,23,-1.5639425,0 +85451,23,-1.536010523,0 +85467,23,-1.019307583,0 +85469,0,-1.019307583,15 +85470,24,-1.019307583,0 +85483,24,-0.047123893,0 +85498,24,1.312562967,0 +85519,24,2.154069368,0 +85540,24,2.478875092,0 +85561,24,2.299003536,0 +85581,24,1.825817242,0 +85586,23,1.825817242,0 +85616,23,1.834546812,0 +85649,23,1.614569833,0 +85676,36,1.614569833,0 +85686,36,0.424117551,0 +85723,36,-0.226893192,0 +85743,36,-0.368266137,0 +85763,36,-0.022689281,0 +85821,22,-0.022689281,0 +85833,44,-0.022689281,0 +85836,44,-0.083775824,0 +85880,44,-0.303688223,0 +85905,44,-0.246091921,0 +85916,44,-0.214675828,0 +85935,44,-0.413645392,0 +85985,44,-0.041887904,0 +86010,44,0.673707284,0 +86036,44,0.961706065,0 +86055,44,0,0 +86084,44,-0.795886943,0 +86095,44,-2.735613037,0 +86114,44,-3.949987156,0 +86129,44,-4.000681693,0 +86144,44,-2.868362221,0 +86159,44,-0.558511168,0 +86174,44,0.961706065,0 +86186,44,1.035017203,0 +86197,44,0.249582601,0 +86206,26,0.249582601,0 +86210,26,-0.361284727,0 +86221,30,-0.361284727,0 +86226,30,-0.502659058,0 +86246,30,-0.144862429,0 +86264,30,0.015707963,0 +86281,30,0.013962634,0 +86294,30,-0.001745329,0 +86324,30,0.216421165,0 +86356,30,0.528839693,0 +86405,0,0.411900033,6 +86406,40,0.411900033,0 +86455,40,0.500913685,0 +86491,40,0.649271605,0 +86526,40,0.279253406,0 +86561,40,0.015707963,0 +86579,40,-0.136135766,0 +86614,40,0.071558512,0 +86642,40,0.474733123,0 +86665,40,0.562001936,0 +86675,0,0.562001936,38 +86676,39,0.562001936,0 +86684,39,0.125663772,0 +86737,39,0.127409104,0 +86790,39,0.191986454,0 +86869,39,0.300197533,0 +86939,39,1.118802728,0 +86965,39,2.634310956,0 +86992,39,3.352287065,0 +87021,39,3.836368794,0 +87046,39,3.472855044,0 +87059,19,3.472855044,0 +87068,19,2.903297877,0 +87069,27,2.903297877,0 +87085,27,2.498085603,0 +87093,27,1.88343292,0 +87102,27,0.942505703,0 +87118,27,0.863959475,0 +87137,27,1.155459382,0 +87149,27,1.345730081,0 +87159,27,1.343984436,0 +87168,27,1.223536856,0 +87175,27,0.829050388,0 +87189,27,0.338595169,0 +87198,27,0.087266485,0 +87232,0,0.087266485,11 +87233,37,0.087266485,0 +87237,37,0.164061097,0 +87258,37,0.378738259,0 +87318,37,0.284489436,0 +87357,37,0.102974462,0 +87434,37,1.405082503,0 +87488,40,1.405082503,0 +87535,40,0.630072198,0 +87635,40,0.478223861,0 +87660,40,0.53233045,0 +87674,40,0.567238091,0 +87702,40,0.499168312,0 +87721,40,0.284489436,0 +87765,40,0.185005112,0 +87777,40,0.080285163,0 +87788,40,-0.071558512,0 +87791,38,-0.071558512,0 +87798,38,-0.20769448,0 +87811,38,-1.874703193,0 +87812,48,-1.874703193,0 +87824,48,-1.752489945,0 +87834,48,-1.619807191,0 +87845,48,-1.57790858,0 +87856,48,-1.438250462,0 +87866,48,-1.58838318,0 +87881,48,-1.663452181,0 +87896,48,-1.534264783,0 +87930,48,-1.017562072,0 +87964,48,-0.778432569,0 +87989,48,-1.048981353,0 +88004,48,-1.762965156,0 +88018,48,-1.796136914,0 +88034,48,-1.024544117,0 +88050,48,-0.740033112,0 +88066,48,-1.656468941,0 +88102,48,-1.988191927,0 +88127,48,-1.855497892,0 +88156,48,-1.64599411,0 +88168,48,-1.03676272,0 +88173,46,-1.03676272,0 +88191,46,-1.007089024,0 +88212,46,-1.239247202,0 +88233,46,-1.410319529,0 +88246,46,-1.902638422,0 +88250,49,-1.902638422,0 +88304,49,-1.968985789,0 +88335,49,-1.642502508,0 +88377,49,-1.295106707,0 +88399,49,-0.890141428,0 +88426,49,-0.701633873,0 +88442,49,-0.553275018,0 +88480,49,-1.041999273,0 +88508,11,-1.041999273,0 +88522,8,-1.041999273,0 +88529,8,-1.569179773,0 +88534,14,-1.569179773,0 +88577,14,-1.410319529,0 +88603,0,-1.410319529,14 +88604,6,-1.410319529,0 +88607,10,-1.410319529,0 +88618,9,-1.410319529,0 +88624,9,-1.031526172,0 +88653,9,-0.647526202,0 +88661,0,-0.647526202,67 +88662,15,-0.647526202,0 +88674,15,-0.181514442,0 +88706,15,-0.003490659,0 +88724,9,-0.003490659,0 +88745,10,-0.003490659,0 +88749,10,-0.211185153,0 +88756,44,-0.211185153,0 +88781,44,-0.429353634,0 +88797,44,-0.818577702,0 +88817,44,-1.038508237,0 +88830,44,-1.19037077,0 +88857,44,-0.595164302,0 +88895,44,-0.144862429,0 +88914,44,0.171042433,0 +88933,44,0.380483613,0 +88965,44,0.179769107,0 +88998,44,0.013962634,0 +89011,44,-0.572474248,0 +89033,44,-2.147084822,0 +89096,44,-2.19073858,0 +89167,44,-1.082146375,0 +89311,0,-1.082146375,23 +89312,39,-1.082146375,0 +89327,39,-0.788905188,0 +89420,39,-0.116937113,0 +89513,39,0.356048672,0 +89552,38,0.356048672,0 +89578,38,0.26703601,0 +89599,38,-0.172787768,0 +89621,38,-0.314160299,0 +89650,38,-0.010471976,0 +89668,40,-0.010471976,0 +89670,40,0.258309304,0 +89708,40,0.394446457,0 +89741,34,0.394446457,0 +89760,38,0.394446457,0 +89836,38,0.411900033,0 +89883,38,0.415390751,0 +89910,38,0.413645392,0 +89928,38,0.438080445,0 +89946,38,0.53233045,0 +89967,38,0.673707284,0 +89985,38,0.860468557,0 +90002,38,1.061200018,0 +90017,38,1.279396141,0 +90031,38,1.822325422,0 +90062,38,2.092955297,0 +90077,38,2.297257285,0 +90083,0,2.297257285,7 +90084,31,2.297257285,0 +90091,31,2.405527539,0 +90105,31,2.398542194,0 +90123,31,2.24661661,0 +90168,41,2.24661661,0 +90181,41,2.416005601,0 +90244,41,3.126903205,0 +90365,41,2.106924088,0 +90434,41,0.507895179,0 +90471,0,0.507895179,7 +90472,12,0.507895179,0 +90476,12,-0.055850542,0 +90490,12,-0.22863853,0 +90496,12,-0.387465033,0 +90504,12,0.785414313,0 +90512,10,0.785414313,0 +90513,10,-0.223402516,0 +90517,10,2.726879881,0 +90523,37,2.726879881,0 +90532,37,3.399464661,0 +90544,37,4.511242049,0 +90560,37,5.49282936,0 +90582,37,5.799235863,0 +90619,37,5.869286671,0 +90669,26,5.869286671,0 +90683,41,5.869286671,0 +90695,41,5.449065528,0 +90720,41,4.593442526,0 +90745,41,2.058033675,0 +90819,41,0.232129207,0 +90874,41,-0.193731789,0 +90886,41,-0.568983476,0 +90897,41,-3.015096776,0 +90898,0,-3.015096776,15 +90899,47,-3.015096776,0 +90920,47,-3.016843693,0 +90934,47,-1.832800896,0 +90948,47,0.628326799,0 +90963,47,3.661590521,0 +90977,47,5.711680323,0 +90988,47,6.307237021,0 +90999,47,5.874540712,0 +91008,47,5.240777928,0 +91017,47,4.628423326,0 +91028,47,4.334618908,0 +91038,47,4.329373094,0 +91049,47,4.661656132,0 +91061,47,4.095083908,0 +91074,47,2.040573052,0 +91091,47,1.124039374,0 +91111,47,1.099601744,0 +91147,47,1.083891908,0 +91175,47,1.066436598,0 +91214,0,1.066436598,5 +91215,39,1.066436598,0 +91237,39,1.010580037,0 +91288,39,0.902359714,0 +91326,39,0.743523962,0 +91363,39,0.42062683,0 +91389,39,0.055850542,0 +91423,39,-0.272272036,0 +91450,31,-0.272272036,0 +91461,31,-1.029780657,0 +91467,40,-1.029780657,0 +91533,40,-1.487130137,0 +91572,40,-1.920098091,0 +91626,40,-2.096447487,0 +91679,40,-2.112162406,0 +91713,0,-2.112162406,16 +91714,38,-2.112162406,0 +91723,38,-2.061525814,0 +91782,38,-1.963747777,0 +91872,38,-1.991683968,0 +92016,38,-2.120892961,0 +92078,21,-2.120892961,0 +92089,31,-2.120892961,0 +92139,31,-2.112162406,0 +92239,31,-2.073748342,0 +92264,31,-2.031842788,0 +92299,0,-2.031842788,8 +92300,30,-2.031842788,0 +92338,30,-2.175023132,0 +92402,30,-3.140879552,0 +92465,0,-3.140879552,36 +92466,41,-3.140879552,0 +92475,41,-3.132144321,0 +92513,41,-0.314160299,0 +92526,41,-0.300197533,0 +92540,41,-0.493932195,0 +92565,41,-0.305433569,0 +92576,41,-0.759232812,0 +92586,41,-0.015707963,0 +92598,41,0.530585072,0 +92612,41,0.731305993,0 +92630,41,0.886650494,0 +92651,41,2.316466124,0 +92678,41,4.320630124,0 +92703,41,5.361544091,0 +92721,41,5.265279964,0 +92737,41,4.444786541,0 +92753,41,3.341803358,0 +92768,41,2.009144245,0 +92788,41,1.242738398,0 +92818,41,1.438250462,0 +92834,41,1.742014773,0 +92850,41,1.893908631,0 +92873,41,2.225662186,0 +92887,41,3.05527633,0 +92901,41,4.033896467,0 +92916,41,4.577701533,0 +92931,41,4.586446501,0 +92942,24,4.586446501,0 +92948,24,4.220964893,0 +92956,26,4.220964893,0 +92963,26,3.483339688,0 +92977,26,2.384571574,0 +92991,26,1.089128514,0 +92999,28,1.089128514,0 +93006,28,-0.055850542,0 +93022,28,-0.708615537,0 +93040,28,-0.954724107,0 +93058,28,-0.188495782,0 +93066,19,-0.188495782,0 +93077,29,-0.188495782,0 +93117,29,-0.158825095,0 +93138,29,-0.11344645,0 +93151,29,0.069813181,0 +93179,29,0.136135766,0 +93189,29,1.534264783,0 +93200,29,2.213438863,0 +93205,29,2.662255809,0 +93209,29,3.11816805,0 +93217,29,3.158350159,0 +93224,29,2.312973595,0 +93231,29,2.084224844,0 +93232,0,2.084224844,71 +93233,15,2.084224844,0 +93263,15,0.457279451,0 +93280,17,0.457279451,0 +93301,17,0.279253406,0 +93314,17,0.96694254,0 +93332,10,0.96694254,0 +93338,40,0.96694254,0 +93362,40,1.104838368,0 +93388,40,0.502659058,0 +93418,40,-1.082146375,0 +93464,40,-1.2165545,0 +93477,40,-1.00883453,0 +93494,40,-0.289725466,0 +93512,40,2.707667084,0 +93563,40,4.245443289,0 +93601,40,5.107777753,0 +93637,40,6.081225596,0 +93707,10,6.081225596,0 +93716,10,7.117216357,0 +93748,0,7.117216357,18 +93749,12,7.117216357,0 +93757,12,7.317220344,0 +93788,12,6.365064117,0 +93794,27,6.365064117,0 +93810,27,4.46227445,0 +93839,27,2.735613037,0 +93862,27,0.425862912,0 +93885,27,-1.068182126,0 +93901,27,-1.953271785,0 +93915,27,-2.150577092,0 +93926,27,-1.429522021,0 +93953,0,-1.850260107,18 +93954,45,-1.850260107,0 +93973,45,-3.18455643,0 +93989,45,-3.970963959,0 +94007,45,-3.990193001,0 +94034,45,-3.979704396,0 +94060,45,-3.817142057,0 +94099,45,-3.824133565,0 +94133,45,-4.343361983,0 +94167,45,-5.548850128,0 +94225,45,-5.611877644,0 +94241,45,-5.21277637,0 +94284,45,-4.478013801,0 +94316,45,-2.597633959,0 +94394,45,-0.678943511,0 +94400,39,-0.678943511,0 +94422,51,-0.678943511,0 +94433,51,-0.148353095,0 +94448,51,0.193731789,0 +94462,51,0.916323502,0 +94525,51,2.702427265,0 +94568,51,3.291133138,0 +94613,51,2.765306081,0 +94648,51,0.870941317,0 +94683,51,0.9983615,0 +94696,51,1.654723133,0 +94707,51,2.182007762,0 +94721,51,2.550478845,0 +94752,51,2.262332557,0 +94782,51,1.820579514,0 +94799,51,0.310669606,0 +94843,51,-1.167678335,0 +94888,51,-1.672181255,0 +94913,51,-1.780423927,0 +94934,51,-1.525536094,0 +94968,51,-0.010471976,0 +95026,51,0.438080445,0 +95050,51,0.757487383,0 +95054,48,0.757487383,0 +95056,58,0.757487383,0 +95065,58,1.611078267,0 +95084,58,2.405527539,0 +95102,58,2.574929502,0 +95121,58,2.010890279,0 +95144,58,1.279396141,0 +95165,58,0.813341366,0 +95192,58,0.684179742,0 +95212,58,0.656253219,0 +95227,53,-1.604095146,0 +95230,54,-1.604095146,0 +95290,47,-1.604095146,0 +95301,47,-2.141846427,0 +95330,47,-2.241377986,0 +95350,45,-2.241377986,0 +95360,45,-1.874703193,0 +95391,45,-1.247975197,0 +95413,50,-1.247975197,0 +95428,50,-0.909341604,0 +95457,50,-0.726069727,0 +95485,50,-0.664980247,0 +95508,50,-0.687670565,0 +95520,51,-0.687670565,0 +95531,51,-0.841268545,0 +95560,51,-0.881414097,0 +95594,51,-0.260054645,0 +95678,51,-0.300197533,0 +95697,46,-0.300197533,0 +95700,47,-0.300197533,0 +95719,47,-0.115191782,0 +95735,48,-0.115191782,0 +95797,44,-0.115191782,0 +95800,46,-0.115191782,0 +95824,46,-0.02443461,0 +95871,46,-0.045378564,0 +95884,45,-0.045378564,0 +95888,45,-0.090757146,0 +95903,45,-0.160570429,0 +95918,45,-0.247837261,0 +95926,44,-0.247837261,0 +95929,51,-0.247837261,0 +95933,51,-0.3927011,0 +95951,51,-0.534075829,0 +95964,51,-0.670216468,0 +95976,51,-0.818577702,0 +95987,51,-1.015816563,0 +96000,51,-1.614569833,0 +96041,51,-1.827563154,0 +96083,51,-2.007398212,0 +96112,51,-2.429976432,0 +96148,51,-2.45791838,0 +96184,51,-2.319958658,0 +96211,51,-2.688454487,0 +96237,51,-3.553239278,0 +96259,45,-3.553239278,0 +96262,49,-3.553239278,0 +96263,49,-4.967797029,0 +96290,49,-7.805196805,0 +96358,49,-8.251368455,0 +96375,49,-8.044052336,0 +96394,50,-5.674909606,0 +96440,50,-4.630172395,0 +96469,50,-6.056700988,0 +96515,50,-6.380835877,0 +96529,50,-6.026922082,0 +96544,50,-5.3020342,0 +96556,50,-4.294401609,0 +96568,50,-3.277155445,0 +96579,50,1.370169197,0 +96584,47,1.370169197,0 +96594,47,-2.014382352,0 +96598,47,-2.477128691,0 +96604,47,-2.433469155,0 +96608,47,-1.944541824,0 +96614,47,-1.199098661,0 +96618,47,-0.247837261,0 +96623,47,-1.340493149,0 +96631,47,-2.46141115,0 +96638,47,3.151361893,0 +96652,47,-2.517296298,0 +96662,47,-1.525536094,0 +96668,47,0.013962634,0 +96676,47,1.525536094,0 +96687,47,1.790899242,0 +96694,47,-0.015707963,0 +96702,47,0.254818622,0 +96707,47,0.396191813,0 +96713,47,0.37001149,0 +96718,47,0.324632381,0 +96721,47,0.263545327,0 +96725,47,0.218166503,0 +96728,47,0.164061097,0 +96734,47,-3.287638703,0 +96739,47,-3.121662107,0 +96751,47,-3.233475974,0 +96762,47,-3.581200081,0 +96771,47,-4.1947386,0 +96781,48,-5.415806409,0 +96794,48,-6.082977381,0 +96811,48,-4.584697502,0 +96828,48,-0.427608273,0 +96850,48,1.125784924,0 +96862,48,1.611078267,0 +96875,48,1.501095888,0 +96886,0,1.501095888,15 +96887,15,1.501095888,0 +96894,14,1.501095888,0 +96896,27,1.501095888,0 +96921,26,1.441741844,0 +96927,42,1.441741844,0 +96978,42,1.471418737,0 +97038,42,1.537756265,0 +97076,42,1.595366266,0 +97104,42,1.642502508,0 +97119,47,1.642502508,0 +97137,47,1.66170637,0 +97157,47,1.670435438,0 +97172,47,1.673927073,0 +97191,47,1.619807191,0 +97210,47,1.398099815,0 +97235,47,0.968688032,0 +97242,20,0.968688032,0 +97243,51,0.968688032,0 +97261,51,0.666725653,0 +97304,51,1.047235832,0 +97353,51,1.412065206,0 +97399,51,1.586637411,0 +97443,51,1.366677885,0 +97534,51,1.282887372,0 +97546,51,1.408573853,0 +97607,51,1.757727546,0 +97624,35,1.757727546,0 +97631,35,2.141846427,0 +97651,35,2.56969005,0 +97672,35,2.905044678,0 +97675,34,2.905044678,0 +97677,37,2.905044678,0 +97691,37,3.135638408,0 +97715,37,3.09545687,0 +97737,37,2.912031901,0 +97763,37,2.808973208,0 +97776,34,2.808973208,0 +97778,38,2.808973208,0 +97783,38,2.747839526,0 +97800,38,2.716400149,0 +97816,38,2.707667084,0 +97834,38,2.726879881,0 +97852,38,2.77229275,0 +97869,38,2.842160939,0 +97886,38,2.929500083,0 +97901,38,3.046541561,0 +97906,39,3.046541561,0 +97918,39,3.137385454,0 +97934,39,3.144373658,0 +97956,39,3.051782417,0 +97974,39,2.838667465,0 +97981,34,2.838667465,0 +97983,35,2.838667465,0 +97994,35,2.527774937,0 +98000,36,2.527774937,0 +98013,36,2.108670192,0 +98032,36,1.740268915,0 +98049,36,1.441741844,0 +98068,36,1.253212004,0 +98069,0,1.253212004,12 +98070,13,1.253212004,0 +98079,22,1.253212004,0 +98087,22,1.164187202,0 +98106,22,0.919814455,0 +98109,36,0.919814455,0 +98157,36,0.574219635,0 +98193,36,-0.139626431,0 +98199,35,-0.139626431,0 +98207,38,-0.139626431,0 +98242,38,-1.31779986,0 +98284,38,-1.808358187,0 +98305,38,-1.88343292,0 +98323,38,-1.64599411,0 +98344,38,2.227408381,0 +98357,10,2.227408381,0 +98362,10,-1.457453108,0 +98368,15,-1.457453108,0 +98374,28,-1.401591157,0 +98390,28,-1.366677885,0 +98400,44,-1.366677885,0 +98406,44,-1.354458318,0 +98421,44,-1.363186576,0 +98436,44,-1.394608476,0 +98452,44,-1.443487537,0 +98466,44,-3.804907008,0 +98500,41,-3.804907008,0 +98507,42,-3.804907008,0 +98602,14,-3.804907008,0 +98612,24,-3.736742378,0 +98623,24,-3.589937947,0 +98631,24,-3.257936325,0 +98634,41,-3.257936325,0 +98639,41,-2.686707897,0 +98648,41,-2.192484748,0 +98655,41,-1.626790347,0 +98663,41,-0.959960575,0 +98671,41,-0.279253406,0 +98679,41,0.371756843,0 +98687,41,1.076909777,0 +98696,41,1.288124225,0 +98719,41,0.736542263,0 +98747,41,-0.054105212,0 +98793,0,-0.054105212,29 +98794,28,-0.054105212,0 +98800,28,-1.003598012,0 +98829,44,-1.003598012,0 +98850,44,-1.532519043,0 +98868,44,-1.949779797,0 +98883,44,-2.41775195,0 +98908,50,-2.41775195,0 +98911,50,-2.480621495,0 +98929,50,-2.192484748,0 +98957,50,-1.897400544,0 +98960,49,-1.897400544,0 +98976,51,-1.165932768,0 +99011,51,-0.013962634,0 +99046,52,-0.013962634,0 +99048,52,0.84825036,0 +99082,52,1.200844242,0 +99120,52,1.413810883,0 +99129,51,1.413810883,0 +99158,51,1.892162676,0 +99165,52,1.892162676,0 +99192,52,1.967239784,0 +99229,52,1.213063327,0 +99274,49,1.213063327,0 +99276,49,0.535821208,0 +99277,50,0.535821208,0 +99305,50,0.104719793,0 +99326,50,-0.757487383,0 +99364,49,-0.757487383,0 +99373,49,-1.385880143,0 +99412,49,-2.122639076,0 +99468,49,-2.241377986,0 +99480,49,-2.347899138,0 +99534,49,-1.49062157,0 +99540,37,-1.49062157,0 +99542,40,-1.49062157,0 +99581,40,0.034906586,0 +99616,40,1.05421792,0 +99642,40,1.879941026,0 +99666,40,2.662255809,0 +99670,38,2.662255809,0 +99687,38,3.238717445,0 +99723,38,4.124804624,0 +99751,38,4.10382522,0 +99774,38,3.822385685,0 +99799,38,3.897546664,0 +99811,38,4.180751479,0 +99819,42,4.180751479,0 +99859,42,4.116063162,0 +99876,42,3.821231,0 +99901,42,2.423989,0 +99926,42,1.252921,0 +99944,40,1.252921,0 +99951,40,0.652184,0 +99976,40,0.229912,0 +100000,0,0,0 diff --git a/VectoCore/VectoCore/Resources/Declaration/VAUX/Fan-Tech.csv b/VectoCore/VectoCore/Resources/Declaration/VAUX/Fan-Tech.csv index 10e393a595fddeb9d65763c1a564eccbe92cd7da..a09dd8ea95d1d10d84245ed64b6da1cfb87242cc 100644 --- a/VectoCore/VectoCore/Resources/Declaration/VAUX/Fan-Tech.csv +++ b/VectoCore/VectoCore/Resources/Declaration/VAUX/Fan-Tech.csv @@ -1,12 +1,12 @@ -Technology , Long haul , Regional delivery , Urban delivery , Municipal utility , Construction -Crankshaft mounted - Electronically controlled visco clutch , 618 , 671 , 516 , 566 , 1037 -Crankshaft mounted - Bimetallic controlled visco clutch , 818 , 871 , 676 , 766 , 1277 -Crankshaft mounted - Discrete step clutch , 668 , 721 , 616 , 616 , 1157 -Crankshaft mounted - On/off clutch , 718 , 771 , 666 , 666 , 1237 -Belt driven or driven via transm. - Electronically controlled visco clutch , 989 , 1044 , 833 , 933 , 1478 -Belt driven or driven via transm. - Bimetallic controlled visco clutch , 1189 , 1244 , 993 , 1133 , 1718 -Belt driven or driven via transm. - Discrete step clutch , 1039 , 1094 , 983 , 983 , 1598 -Belt driven or driven via transm. - On/off clutch , 1089 , 1144 , 1033 , 1033 , 1678 -Hydraulic driven - Variable displacement pump , 938 , 1155 , 832 , 917 , 1872 -Hydraulic driven - Constant displacement pump , 1200 , 1400 , 1000 , 1100 , 2300 -Electrically driven - Electronically controlled , 700 , 800 , 600 , 600 , 1400 \ No newline at end of file +Technology , fully electric , Long haul , Regional delivery , Urban delivery , Municipal utility , Construction +Crankshaft mounted - Electronically controlled visco clutch , 0 , 618 , 671 , 516 , 566 , 1037 +Crankshaft mounted - Bimetallic controlled visco clutch , 0 , 818 , 871 , 676 , 766 , 1277 +Crankshaft mounted - Discrete step clutch , 0 , 668 , 721 , 616 , 616 , 1157 +Crankshaft mounted - On/off clutch , 0 , 718 , 771 , 666 , 666 , 1237 +Belt driven or driven via transm. - Electronically controlled visco clutch , 0 , 989 , 1044 , 833 , 933 , 1478 +Belt driven or driven via transm. - Bimetallic controlled visco clutch , 0 , 1189 , 1244 , 993 , 1133 , 1718 +Belt driven or driven via transm. - Discrete step clutch , 0 , 1039 , 1094 , 983 , 983 , 1598 +Belt driven or driven via transm. - On/off clutch , 0 , 1089 , 1144 , 1033 , 1033 , 1678 +Hydraulic driven - Variable displacement pump , 0 , 938 , 1155 , 832 , 917 , 1872 +Hydraulic driven - Constant displacement pump , 0 , 1200 , 1400 , 1000 , 1100 , 2300 +Electrically driven - Electronically controlled , 1 , 700 , 800 , 600 , 600 , 1400 \ No newline at end of file diff --git a/VectoCore/VectoCore/Resources/Declaration/Wheels.csv b/VectoCore/VectoCore/Resources/Declaration/Wheels.csv index be80d0c0378e617402bcdacbed1f0d62a199c408..0458291493b3f0513dbbfe3a4e4ad7c593897e92 100644 --- a/VectoCore/VectoCore/Resources/Declaration/Wheels.csv +++ b/VectoCore/VectoCore/Resources/Declaration/Wheels.csv @@ -1,58 +1,88 @@ -Wheel ,cross-sectional width [mm],tire aspect ratio [%],rim diameter [inch],d [mm],Inertia,F [-] -9.00 R20 ,258.00 ,0.95 ,20 ,1018.0,10.5 ,3.05 -9 R22.5 ,230.00 ,0.95 ,22.5 ,970.0 ,8.9 ,3.05 -9.5 R17.5 ,240.00 ,0.95 ,17.5 ,842.0 ,4.9 ,3.05 -10 R17.5 ,254.00 ,0.95 ,17.5 ,858.0 ,5 ,3.05 -10 R22.5 ,254.00 ,0.95 ,22.5 ,1020.0,11 ,3.05 -10.00 R20 ,275.00 ,0.95 ,20 ,1052.0,13.1 ,3.05 -11 R22.5 ,279.00 ,0.95 ,22.5 ,1050.0,14.4 ,3.05 -11.00 R20 ,286.00 ,0.95 ,20 ,1082.0,14.6 ,3.05 -11.00 R22.5 ,279.00 ,0.95 ,22.5 ,1050.0,16 ,3.05 -12 R22.5 ,300.00 ,0.95 ,22.5 ,1084.0,16.85 ,3.05 -12.00 R20 ,313.00 ,0.95 ,20 ,1122.0,19.5 ,3.05 -12.00 R24 ,313.00 ,0.95 ,24 ,1226.0,27.7 ,3.05 -12.5 R20 ,317.50 ,0.95 ,20 ,1120 ,12.7 ,3.05 -13 R22.5 ,320.00 ,0.95 ,22.5 ,1124.0,20 ,3.05 -14.00 R20 ,370.00 ,0.95 ,20 ,1238.0,30.8 ,3.05 -14.5 R20 ,368.30 ,0.95 ,20 ,1092 ,14.8 ,3.05 -16.00 R20 ,406.40 ,0.95 ,20 ,1343 ,47.5 ,3.05 -205/75 R17.5,205.00 ,0.75 ,17.5 ,753.0 ,3.5 ,3.05 -215/75 R17.5,212.00 ,0.75 ,17.5 ,767.0 ,3.9 ,3.05 -225/70 R17.5,226.00 ,0.7 ,17.5 ,761.0 ,4 ,3.05 -225/75 R17.5,226.00 ,0.75 ,17.5 ,783.0 ,4 ,3.05 -235/75 R17.5,233.00 ,0.75 ,17.5 ,797.0 ,4.5 ,3.05 -245/70 R17.5,248.00 ,0.7 ,17.5 ,789.0 ,5.2 ,3.05 -245/70 R19.5,248.00 ,0.7 ,19.5 ,839.0 ,6 ,3.05 -255/70 R22.5,255.00 ,0.7 ,22.5 ,930.0 ,9.5 ,3.05 -265/70 R17.5,262.00 ,0.7 ,17.5 ,817.0 ,5.6 ,3.05 -265/70 R19.5,262.00 ,0.7 ,19.5 ,867.0 ,6.5 ,3.05 -275/70 R22.5,276.00 ,0.7 ,22.5 ,958.0 ,11.9 ,3.05 -275/80 R22.5,276.00 ,0.8 ,22.5 ,1012.0,12.8 ,3.05 -285/60 R22.5,285.00 ,0.6 ,22.5 ,914.0 ,10.6 ,3.03 -285/70 R19.5,283.00 ,0.7 ,19.5 ,895.0 ,7.9 ,3.05 -295/55 R22.5,292.00 ,0.55 ,22.5 ,896.0 ,10.2 ,3.03 -295/60 R22.5,292.00 ,0.6 ,22.5 ,926.0 ,10.8 ,3.03 -295/80 R22.5,298.00 ,0.8 ,22.5 ,1044.0,15.5 ,3.05 -305/60 R22.5,306.00 ,0.6 ,22.5 ,938.0 ,11.4 ,3.03 -305/70 R19.5,305.00 ,0.7 ,19.5 ,923.0 ,9.2 ,3.05 -305/70 R22.5,305.00 ,0.7 ,22.5 ,1000.0,13.9 ,3.05 -305/75 R24.5,305.00 ,0.75 ,24.5 ,1080.0,21.2 ,3.05 -315/45 R22.5,307.00 ,0.45 ,22.5 ,856.0 ,9.9 ,3.03 -315/60 R22.5,313.00 ,0.6 ,22.5 ,950.0 ,12.8 ,3.03 -315/70 R22.5,312.00 ,0.7 ,22.5 ,1014.0,14.9 ,3.05 -315/80 R22.5,312.00 ,0.8 ,22.5 ,1076.0,17.6 ,3.05 -325/95 R24 ,325.00 ,0.95 ,24 ,1228.0,27.6 ,3.05 -335/80 R20 ,340.00 ,0.8 ,20 ,1044.0,13.5 ,3.05 -355/50 R22.5,361.00 ,0.5 ,22.5 ,928.0 ,12.2 ,3.03 -365/70 R22.5,375.00 ,0.7 ,22.5 ,1084.0,18.6 ,3.05 -365/80 R20 ,360.00 ,0.8 ,20 ,1092.0,17.2 ,3.05 -365/85 R20 ,364.00 ,0.85 ,20 ,1128.0,22.5 ,3.05 -375/45 R22.5,372.00 ,0.45 ,22.5 ,910.0 ,11.2 ,3.03 -375/50 R22.5,374.00 ,0.5 ,22.5 ,948.0 ,13 ,3.03 -375/90 R22.5,369.00 ,0.9 ,22.5 ,1248.0,33.8 ,3.05 -385/55 R22.5,386.00 ,0.55 ,22.5 ,996.0 ,15.9 ,3.03 -385/65 R22.5,389.00 ,0.65 ,22.5 ,1072.0,19.2 ,3.03 -395/85 R20 ,386.00 ,0.85 ,20 ,1180.0,27.9 ,3.05 -425/65 R22.5,430.00 ,0.65 ,22.5 ,1124.0,22.5 ,3.03 -495/45 R22.5,500.00 ,0.45 ,22.5 ,1018.0,20.7 ,3.03 -525/65 R20.5,530.00 ,0.65 ,20.5 ,1203.0,35 ,3.03 \ No newline at end of file +Wheel , cross-sectional width [mm] , tire aspect ratio [%] , rim diameter [inch] , d [mm] , Inertia , F [-] +9.00 R20 , 258.00 , 0.95 , 20 , 1018.0 , 10.5 , 3.05 +9 R22.5 , 230.00 , 0.95 , 22.5 , 970.0 , 8.9 , 3.05 +9.5 R17.5 , 240.00 , 0.95 , 17.5 , 842.0 , 4.9 , 3.05 +10 R17.5 , 254.00 , 0.95 , 17.5 , 858.0 , 5 , 3.05 +10 R22.5 , 254.00 , 0.95 , 22.5 , 1020.0 , 11 , 3.05 +10.00 R20 , 275.00 , 0.95 , 20 , 1052.0 , 13.1 , 3.05 +11 R22.5 , 279.00 , 0.95 , 22.5 , 1050.0 , 14.4 , 3.05 +11.00 R20 , 286.00 , 0.95 , 20 , 1082.0 , 14.6 , 3.05 +12 R22.5 , 300.00 , 0.95 , 22.5 , 1084.0 , 16.85 , 3.05 +12.00 R20 , 313.00 , 0.95 , 20 , 1122.0 , 19.5 , 3.05 +12.00 R24 , 313.00 , 0.95 , 24 , 1226.0 , 27.7 , 3.05 +12.5 R20 , 317.50 , 0.95 , 20 , 1120 , 12.7 , 3.05 +13 R22.5 , 320.00 , 0.95 , 22.5 , 1124.0 , 20 , 3.05 +14.00 R20 , 370.00 , 0.95 , 20 , 1238.0 , 30.8 , 3.05 +14.5 R20 , 368.30 , 0.95 , 20 , 1092 , 14.8 , 3.05 +16.00 R20 , 406.40 , 0.95 , 20 , 1343 , 47.5 , 3.05 +205/75 R17.5 , 205.00 , 0.75 , 17.5 , 753.0 , 3.5 , 3.05 +215/75 R17.5 , 212.00 , 0.75 , 17.5 , 767.0 , 3.9 , 3.05 +225/70 R17.5 , 226.00 , 0.7 , 17.5 , 761.0 , 4 , 3.05 +225/75 R17.5 , 226.00 , 0.75 , 17.5 , 783.0 , 4 , 3.05 +235/75 R17.5 , 233.00 , 0.75 , 17.5 , 797.0 , 4.5 , 3.05 +245/70 R17.5 , 248.00 , 0.7 , 17.5 , 789.0 , 5.2 , 3.05 +245/70 R19.5 , 248.00 , 0.7 , 19.5 , 839.0 , 6 , 3.05 +255/70 R22.5 , 255.00 , 0.7 , 22.5 , 930.0 , 9.5 , 3.05 +265/70 R17.5 , 262.00 , 0.7 , 17.5 , 817.0 , 5.6 , 3.05 +265/70 R19.5 , 262.00 , 0.7 , 19.5 , 867.0 , 6.5 , 3.05 +275/70 R22.5 , 276.00 , 0.7 , 22.5 , 958.0 , 11.9 , 3.05 +275/80 R22.5 , 276.00 , 0.8 , 22.5 , 1012.0 , 12.8 , 3.05 +285/60 R22.5 , 285.00 , 0.6 , 22.5 , 914.0 , 10.6 , 3.03 +285/70 R19.5 , 283.00 , 0.7 , 19.5 , 895.0 , 7.9 , 3.05 +295/55 R22.5 , 292.00 , 0.55 , 22.5 , 896.0 , 10.2 , 3.03 +295/60 R22.5 , 292.00 , 0.6 , 22.5 , 926.0 , 10.8 , 3.03 +295/80 R22.5 , 298.00 , 0.8 , 22.5 , 1044.0 , 15.5 , 3.05 +305/60 R22.5 , 306.00 , 0.6 , 22.5 , 938.0 , 11.4 , 3.03 +305/70 R19.5 , 305.00 , 0.7 , 19.5 , 923.0 , 9.2 , 3.05 +305/70 R22.5 , 305.00 , 0.7 , 22.5 , 1000.0 , 13.9 , 3.05 +305/75 R24.5 , 305.00 , 0.75 , 24.5 , 1080.0 , 21.2 , 3.05 +315/45 R22.5 , 307.00 , 0.45 , 22.5 , 856.0 , 9.9 , 3.03 +315/60 R22.5 , 313.00 , 0.6 , 22.5 , 950.0 , 12.8 , 3.03 +315/70 R22.5 , 312.00 , 0.7 , 22.5 , 1014.0 , 14.9 , 3.05 +315/80 R22.5 , 312.00 , 0.8 , 22.5 , 1076.0 , 17.6 , 3.05 +325/95 R24 , 325.00 , 0.95 , 24 , 1228.0 , 27.6 , 3.05 +355/50 R22.5 , 361.00 , 0.5 , 22.5 , 928.0 , 12.2 , 3.03 +365/70 R22.5 , 375.00 , 0.7 , 22.5 , 1084.0 , 18.6 , 3.05 +365/85 R20 , 364.00 , 0.85 , 20 , 1128.0 , 22.5 , 3.05 +375/45 R22.5 , 372.00 , 0.45 , 22.5 , 910.0 , 11.2 , 3.03 +375/50 R22.5 , 374.00 , 0.5 , 22.5 , 948.0 , 13 , 3.03 +375/90 R22.5 , 369.00 , 0.9 , 22.5 , 1248.0 , 33.8 , 3.05 +385/55 R22.5 , 386.00 , 0.55 , 22.5 , 996.0 , 15.9 , 3.03 +385/65 R22.5 , 389.00 , 0.65 , 22.5 , 1072.0 , 19.2 , 3.03 +395/85 R20 , 386.00 , 0.85 , 20 , 1180.0 , 27.9 , 3.05 +425/65 R22.5 , 430.00 , 0.65 , 22.5 , 1124.0 , 22.5 , 3.03 +495/45 R22.5 , 500.00 , 0.45 , 22.5 , 1018.0 , 20.7 , 3.03 +525/65 R20.5 , 530.00 , 0.65 , 20.5 , 1203.0 , 35 , 3.03 +11.00 R16 , 279 , 1.00 , 16 , 980 , 11.00 , 3.05 +6.00 R9 , 160 , 1.00 , 9 , 540 , 1.00 , 3.05 +205/65 R17.5 , 205 , 0.65 , 17.5 , 711 , 4.00 , 3.03 +225/75 R16C , 223 , 0.75 , 16 , 744 , 3.00 , 3.03 +255/100 R16 , 250 , 1.00 , 16 , 916 , 8.00 , 3.05 +255/60 R19.5 , 257 , 0.60 , 19.5 , 801 , 7.00 , 3.03 +265/55 R19.5 , 264 , 0.55 , 19.5 , 787 , 6.00 , 3.03 +275/60 R19.5 , 278 , 0.60 , 19.5 , 825 , 6.44 , 3.03 +275/80 R20 , 278 , 0.80 , 20 , 948 , 9.00 , 3.05 +285/65 R16C , 292 , 0.65 , 16 , 776 , 5.49 , 3.03 +295/75 R22.5 , 298 , 0.75 , 22.5 , 1014 , 14.00 , 3.05 +325/85 R16 , 325 , 0.85 , 16 , 958 , 12.00 , 3.05 +335/80 R20 , 340 , 0.80 , 20 , 1044 , 15.84 , 3.05 +365/80 R20 , 360 , 0.80 , 20 , 1092 , 21.00 , 3.05 +435/50 R19.5 , 438 , 0.50 , 19.5 , 931 , 16.00 , 3.03 +435/50 R22.5 , 438 , 0.50 , 22.5 , 1008 , 22.00 , 3.03 +445/40 R22.5 , 453 , 0.40 , 22.5 , 936 , 12.93 , 3.03 +445/45 R19.5 , 446 , 0.45 , 19.5 , 895 , 14.00 , 3.03 +445/65 R22.5 , 444 , 0.65 , 22.5 , 1150 , 29.00 , 3.03 +445/75 R22.5 , 444 , 0.75 , 22.5 , 1240 , 36.00 , 3.05 +455/40 R22.5 , 453 , 0.40 , 22.5 , 936 , 12.93 , 3.03 +455/45 R22.5 , 453 , 0.45 , 22.5 , 982 , 19.00 , 3.03 +475/80 R20 , 484 , 0.80 , 20 , 1268 , 48.00 , 3.05 +7.00 R16C , 198 , 1.00 , 16 , 778 , 4.00 , 3.05 +7.50 R15 , 212 , 0.92 , 15 , 772 , 4.00 , 3.05 +7.50 R16 , 210 , 1.00 , 16 , 806 , 4.00 , 3.05 +7.50 R16C , 210 , 0.94 , 16 , 802 , 5.13 , 3.05 +8.25 R15 , 230 , 1.00 , 15 , 836 , 5.00 , 3.05 +8.25 R16C , 230 , 1.00 , 16 , 860 , 6.00 , 3.05 +8.5 R17.5 , 215 , 0.80 , 17.5 , 802 , 4.00 , 3.05 +8 R17.5 , 208 , 0.80 , 17.5 , 784 , 4.00 , 3.05 +LT265/75 R16 , 267 , 0.75 , 16 , 804 , 5.82 , 3.05 +385/55 R19.5 , 386 , 0.55 , 19.5 , 919 , 11.14 , 3.03 diff --git a/VectoCore/VectoCore/Resources/XSD/VTPReport.0.1.xsd b/VectoCore/VectoCore/Resources/XSD/VTPReport.0.1.xsd new file mode 100644 index 0000000000000000000000000000000000000000..da213539d0d84b18b2285a4aa3ad8a121652ade4 --- /dev/null +++ b/VectoCore/VectoCore/Resources/XSD/VTPReport.0.1.xsd @@ -0,0 +1,551 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> +<xs:schema xmlns="urn:tugraz:ivt:VectoAPI:VTPReport:v0.1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" targetNamespace="urn:tugraz:ivt:VectoAPI:VTPReport:v0.1" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.1"> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/> + <xs:element name="VectoVTPReport"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data"> + <xs:complexType> + <xs:sequence> + <xs:element name="General"> + <xs:complexType> + <xs:sequence> + <xs:element name="Manufacturer" type="vdecdef:ManufacturerType"/> + <xs:element name="ManufacturerAddress" type="vdecdef:ManufacturerAddressType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="Vehicle" type="VehicleType"/> + <xs:element name="DataIntegrityCheck" type="DataIntegrityCheckType"/> + <xs:element name="TestConditions"/> + <xs:element name="Results" type="ResultsType"/> + <xs:element name="ApplicationInformation"> + <xs:complexType> + <xs:sequence> + <xs:element name="SimulationToolVersion"/> + <xs:element name="Date"/> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + <xs:attribute name="schemaVersion" type="xs:decimal" use="required"/> + </xs:complexType> + </xs:element> + <xs:complexType name="AirDragType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType" minOccurs="0"> + <xs:annotation> + <xs:documentation>P241</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationMethod" type="AirdragCertificationOptionType"> + <xs:annotation> + <xs:documentation>VECTO</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType" minOccurs="0"> + <xs:annotation> + <xs:documentation>P268</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CdxA" type="vdecdef:AirdragCdxAType"> + <xs:annotation> + <xs:documentation>P146</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="AngleDriveType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType"> + <xs:annotation> + <xs:documentation>P221</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationMethod" type="vdecdef:AngledriveCertificationOptionType"> + <xs:annotation> + <xs:documentation>P258</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType" minOccurs="0"> + <xs:annotation> + <xs:documentation>P265</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Ratio" type="vdecdef:AngledriveRatioType"> + <xs:annotation> + <xs:documentation>P176</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="AuxiliariesType"> + <xs:sequence> + <xs:element name="FanTechnology" type="vdecdef:AuxFanTechnologyType"> + <xs:annotation> + <xs:documentation>P181</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="SteeringPumpTechnology" type="vdecdef:AuxSPTechnologyType" maxOccurs="4"> + <xs:annotation> + <xs:documentation>P182</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="ElectricSystemTechnology" type="vdecdef:AuxESTechnologyType"> + <xs:annotation> + <xs:documentation>P183</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="PneumaticSystemTechnology" type="vdecdef:AuxPSTechnologyType"> + <xs:annotation> + <xs:documentation>P184</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="HVACTechnology" type="vdecdef:AuxHVACTechnologyType"> + <xs:annotation> + <xs:documentation>P185</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="AxlegearType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType"> + <xs:annotation> + <xs:documentation>P216</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationMethod" type="vdecdef:AxlegearCertificationOptionType"> + <xs:annotation> + <xs:documentation>P256</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType" minOccurs="0"> + <xs:annotation> + <xs:documentation>P264</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="LineType" type="vdecdef:AxlegearLineTypeType"> + <xs:annotation> + <xs:documentation>P253</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Ratio" type="vdecdef:AxlegearRatioType"> + <xs:annotation> + <xs:documentation>P150</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="AxleType"> + <xs:sequence> + <xs:element name="TyreDimension" type="vdecdef:TyreDimensionType"> + <xs:annotation> + <xs:documentation>P108</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType"> + <xs:annotation> + <xs:documentation>P267</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="TyreRRCDeclared" type="vdecdef:TyreRRCISOType"> + <xs:annotation> + <xs:documentation>P046</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="TwinTyres" type="vdecdef:AxleTwinTyresType"> + <xs:annotation> + <xs:documentation>P045</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + <xs:attribute name="axleNumber" use="required"> + <xs:simpleType> + <xs:restriction base="xs:int"> + <xs:minInclusive value="1"/> + <xs:maxInclusive value="4"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:complexType> + <xs:complexType name="AxleWheelsType"> + <xs:sequence minOccurs="2" maxOccurs="4"> + <xs:element name="Axle" type="AxleType"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="CO2ResultType"> + <xs:sequence> + <xs:element name="Mission"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:minLength value="1"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + <xs:element name="Declared"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="CO2UnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="Verified"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="CO2UnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="DataIntegrityCheckType"> + <xs:sequence> + <xs:element name="Components"> + <xs:complexType> + <xs:sequence> + <xs:element name="Component" minOccurs="0" maxOccurs="unbounded"> + <xs:complexType> + <xs:complexContent> + <xs:extension base="DataIntegrityResultType"> + <xs:attribute name="componentName" type="xs:token" use="required"/> + </xs:extension> + </xs:complexContent> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="ManufacturerReport" type="DataIntegrityResultType"/> + <xs:element name="JobData" type="DataIntegrityResultType"/> + </xs:sequence> + <xs:attribute name="status" type="DataIntegrityStatusType" use="required"/> + </xs:complexType> + <xs:complexType name="DataIntegrityResultType"> + <xs:choice> + <xs:sequence> + <xs:element name="DigestValueRecomputed" type="xs:token"/> + <xs:element name="DigestValueRead" maxOccurs="unbounded"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:token"> + <xs:attribute name="source" type="xs:token" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + </xs:sequence> + <xs:sequence> + <xs:element name="Error" type="xs:string"/> + </xs:sequence> + </xs:choice> + <xs:attribute name="status" type="DataIntegrityStatusType" use="required"/> + </xs:complexType> + <xs:complexType name="EngineType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType"> + <xs:annotation> + <xs:documentation>P201</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType"> + <xs:annotation> + <xs:documentation>P261</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="RatedPower" type="vdecdef:EngineRatedPower"> + <xs:annotation> + <xs:documentation>P250</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Displacement" type="vdecdef:EngineDisplacementType"> + <xs:annotation> + <xs:documentation>P061</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="FuelType" type="vdecdef:FuelTypeType"> + <xs:annotation> + <xs:documentation>P193</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="FuelConsumptionResultType"> + <xs:sequence> + <xs:element name="Measured"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="FCUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="MeasuredCorrected"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="FCUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="Simulated"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="FCUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="GearboxType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType"> + <xs:annotation> + <xs:documentation>P206</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationMethod" type="vdecdef:GearboxCertificationOptionType"> + <xs:annotation> + <xs:documentation>P254</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType" minOccurs="0"> + <xs:annotation> + <xs:documentation>P262</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="TransmissionType" type="vdecdef:GearboxTransmissionTypeType"> + <xs:annotation> + <xs:documentation>P076</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="GearsCount"> + <xs:annotation> + <xs:documentation>P199</xs:documentation> + </xs:annotation> + <xs:simpleType> + <xs:restriction base="xs:int"> + <xs:minInclusive value="1"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + <xs:element name="TransmissionRatioFinalGear" type="vdecdef:GearboxGearRatioType"> + <xs:annotation> + <xs:documentation>P078</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="ResultsType"> + <xs:sequence> + <xs:element name="Status" type="VTPStatusType"/> + <xs:element name="AverageFanPower"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="PowerUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="WorkPosVT"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="WorkUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="TestFuelNCV"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="NCVUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="FuelConsumption" type="FuelConsumptionResultType"/> + <xs:element name="CO2" type="CO2ResultType"/> + <xs:element name="VTRatio" type="xs:double"/> + <xs:element name="Warnings" minOccurs="0"> + <xs:complexType> + <xs:sequence> + <xs:element name="Warning" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="RetarderType"> + <xs:sequence> + <xs:element name="RetarderType" type="vdecdef:RetarderTypeType"> + <xs:annotation> + <xs:documentation>P052</xs:documentation> + </xs:annotation> + </xs:element> + <xs:sequence minOccurs="0"> + <xs:element name="Model" type="vdecdef:ModelType"> + <xs:annotation> + <xs:documentation>P226</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationMethod" type="vdecdef:RetarderCertificationOptionType"> + <xs:annotation> + <xs:documentation>P255</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType" minOccurs="0"> + <xs:annotation> + <xs:documentation>P266</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:sequence> + </xs:complexType> + <xs:complexType name="TorqueConverterType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType"> + <xs:annotation> + <xs:documentation>P211</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationMethod" type="vdecdef:TorqueConverterCertificationOptionType"> + <xs:annotation> + <xs:documentation>P257</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType" minOccurs="0"> + <xs:annotation> + <xs:documentation>P263</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="VehicleType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType"> + <xs:annotation> + <xs:documentation>P236</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="VIN" type="vdecdef:VINType"> + <xs:annotation> + <xs:documentation>P238</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="LegislativeClass" type="vdecdef:LegislativeClassDeclarationType"> + <xs:annotation> + <xs:documentation>P251</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="VehicleGroup" type="VehicleGroupType"> + <xs:annotation> + <xs:documentation>VECTO</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="AxleConfiguration" type="vdecdef:VehicleAxleConfigurationDeclarationType"> + <xs:annotation> + <xs:documentation>P037</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="GrossVehicleMass" type="vdecdef:VehicleGrossVehicleMassType"> + <xs:annotation> + <xs:documentation>P041</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CurbMassChassis" type="vdecdef:VehicleCurbMassChassisType"> + <xs:annotation> + <xs:documentation>P038</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="RetarderRatio" type="vdecdef:RetarderRatioType" minOccurs="0"> + <xs:annotation> + <xs:documentation>P053</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="PTO" type="xs:boolean"> + <xs:annotation> + <xs:documentation>P247</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Components"> + <xs:complexType> + <xs:sequence> + <xs:element name="Engine" type="EngineType"/> + <xs:element name="Gearbox" type="GearboxType"/> + <xs:element name="TorqueConverter" type="TorqueConverterType" minOccurs="0"/> + <xs:element name="Retarder" type="RetarderType"/> + <xs:element name="AngleDrive" type="AngleDriveType" minOccurs="0"/> + <xs:element name="Axlegear" type="AxlegearType"/> + <xs:element name="AirDrag" type="AirDragType"/> + <xs:element name="AxleWheels" type="AxleWheelsType"/> + <xs:element name="Auxiliaries" type="AuxiliariesType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:simpleType name="AirdragCertificationOptionType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="Measured"/> + <xs:enumeration value="Standard values"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="CO2UnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="g/t-km"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="DataIntegrityStatusType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="success"/> + <xs:enumeration value="failed"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="FCUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="g/kWh"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="NCVUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="MJ/kg"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="PowerUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="kW"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="VehicleGroupType"> + <xs:restriction base="xs:int"> + <xs:minInclusive value="1"/> + <xs:maxInclusive value="16"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="VTPStatusType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="Passed"/> + <xs:enumeration value="Failed"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="WorkUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="kWh"/> + </xs:restriction> + </xs:simpleType> +</xs:schema> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.1.0.xsd b/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.1.0.xsd index 9b783948381435d79ef605dc1cb80d272ddd8e9f..cebfc85eebf3e00c86ed85f9c302bf3a964955f7 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.1.0.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.1.0.xsd @@ -2269,6 +2269,37 @@ ToDo: -0.00 <xs:enumeration value="425/65 R22.5"/> <xs:enumeration value="495/45 R22.5"/> <xs:enumeration value="525/65 R20.5"/> + <xs:enumeration value="11.00 R16"/> + <xs:enumeration value="6.00 R9"/> + <xs:enumeration value="205/65 R17.5"/> + <xs:enumeration value="225/75 R16C"/> + <xs:enumeration value="255/100 R16"/> + <xs:enumeration value="255/60 R19.5"/> + <xs:enumeration value="265/55 R19.5"/> + <xs:enumeration value="275/60 R19.5"/> + <xs:enumeration value="275/80 R20"/> + <xs:enumeration value="285/65 R16C"/> + <xs:enumeration value="295/75 R22.5"/> + <xs:enumeration value="325/85 R16"/> + <xs:enumeration value="435/50 R19.5"/> + <xs:enumeration value="435/50 R22.5"/> + <xs:enumeration value="445/40 R22.5"/> + <xs:enumeration value="445/45 R19.5"/> + <xs:enumeration value="445/65 R22.5"/> + <xs:enumeration value="445/75 R22.5"/> + <xs:enumeration value="455/40 R22.5"/> + <xs:enumeration value="455/45 R22.5"/> + <xs:enumeration value="475/80 R20"/> + <xs:enumeration value="7.00 R16C"/> + <xs:enumeration value="7.50 R15"/> + <xs:enumeration value="7.50 R16"/> + <xs:enumeration value="7.50 R16C"/> + <xs:enumeration value="8.25 R15"/> + <xs:enumeration value="8.25 R16C"/> + <xs:enumeration value="8.5 R17.5"/> + <xs:enumeration value="8 R17.5"/> + <xs:enumeration value="LT265/75 R16"/> + <xs:enumeration value="385/55 R19.5"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="TyreFzISOType"> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputCustomer.0.5.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputCustomer.0.5.xsd new file mode 100644 index 0000000000000000000000000000000000000000..e5953441947a35adc5a141d98ab84b8343b9599c --- /dev/null +++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputCustomer.0.5.xsd @@ -0,0 +1,297 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> +<!--W3C XML Schema generated by XMLSpy vXMLSpy Professional Edition v2016 rel. 2 (x64) (http://www.altova.com)--> +<xs:schema xmlns="urn:tugraz:ivt:VectoAPI:CustomerOutput:v0.5" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" targetNamespace="urn:tugraz:ivt:VectoAPI:CustomerOutput:v0.5" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.5"> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/> + <xs:element name="VectoCustomerInformation"> + <xs:annotation> + <xs:documentation>Comment describing your root element</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:sequence> + <xs:element name="Data"> + <xs:complexType> + <xs:complexContent> + <xs:extension base="VectoOutputDataType"/> + </xs:complexContent> + </xs:complexType> + </xs:element> + <xs:element name="Signature" type="vdecdef:SignatureType"/> + </xs:sequence> + <xs:attribute name="schemaVersion" type="xs:decimal" use="required"/> + </xs:complexType> + </xs:element> + <xs:complexType name="CO2Type"> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="CO2UnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + <xs:complexType name="FuelConsumptionType"> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="FuelConsumptionUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + <xs:complexType name="ResultType"> + <xs:sequence> + <xs:element name="Mission" type="MissionTypeType"/> + <xs:choice> + <xs:sequence> + <xs:element name="Payload"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="MassUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="FuelType" type="vdecdef:FuelTypeType"/> + <xs:element name="AverageSpeed"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="SpeedUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="FuelConsumption" type="FuelConsumptionType" maxOccurs="unbounded"/> + <xs:element name="CO2" type="CO2Type" maxOccurs="unbounded"/> + </xs:sequence> + <xs:element name="Error"/> + </xs:choice> + </xs:sequence> + <xs:attribute name="status" use="required"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="success"/> + <xs:enumeration value="error"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:complexType> + <xs:complexType name="VectoOutputDataType"> + <xs:sequence> + <xs:element name="Vehicle" type="VehicleType"/> + <xs:element name="ResultDataSignature" type="vdecdef:SignatureType"/> + <xs:element name="Results"> + <xs:complexType> + <xs:sequence> + <xs:element name="Status"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="success"/> + <xs:enumeration value="error"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + <xs:element name="Result" type="ResultType" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="ApplicationInformation"> + <xs:complexType> + <xs:sequence> + <xs:element name="SimulationToolVersion"/> + <xs:element name="Date"/> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + <xs:attribute name="id" use="required"/> + </xs:complexType> + <xs:complexType name="VehiclePerformanceType"> + <xs:sequence/> + </xs:complexType> + <xs:complexType name="VehicleType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType"/> + <xs:element name="Manufacturer" type="vdecdef:ManufacturerType"/> + <xs:element name="ManufacturerAddress" type="vdecdef:ManufacturerAddressType"/> + <xs:element name="VIN"> + <xs:annotation> + <xs:documentation>P238</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="LegislativeClass" type="vdecdef:LegislativeClassDeclarationType"> + <xs:annotation> + <xs:documentation>P251</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="VehicleGroup" type="VehicleGroupType"> + <xs:annotation> + <xs:documentation>VECTO</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="AxleConfiguration" type="vdecdef:VehicleAxleConfigurationDeclarationType"> + <xs:annotation> + <xs:documentation>P037</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="GrossVehicleMass"> + <xs:annotation> + <xs:documentation>P041</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="MassUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="CurbMassChassis"> + <xs:annotation> + <xs:documentation>P038</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="vdecdef:VehicleCurbMassChassisType"> + <xs:attribute name="unit" type="MassUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="EngineRatedPower"> + <xs:annotation> + <xs:documentation>P250</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="vdecdef:EngineRatedPower"> + <xs:attribute name="unit" type="PowerUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="EngineDisplacement"> + <xs:annotation> + <xs:documentation>P061</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="DisplacementType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="FuelType" type="vdecdef:FuelTypeType"> + <xs:annotation> + <xs:documentation>P193</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="TransmissionMainCertificationMethod" type="vdecdef:GearboxCertificationOptionType"> + <xs:annotation> + <xs:documentation>P154</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="TransmissionType" type="vdecdef:GearboxTransmissionTypeType"> + <xs:annotation> + <xs:documentation>P076</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="GearsCount"> + <xs:annotation> + <xs:documentation>P199</xs:documentation> + </xs:annotation> + <xs:simpleType> + <xs:restriction base="xs:int"> + <xs:minInclusive value="1"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + <xs:element name="Retarder" type="xs:boolean"> + <xs:annotation> + <xs:documentation>P052</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="AxleRatio" type="vdecdef:AxlegearRatioType"> + <xs:annotation> + <xs:documentation>P150</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="AverageRRC" type="vdecdef:TyreRRCISOType"/> + <xs:element name="InputDataSignature" type="vdecdef:SignatureType"/> + </xs:sequence> + </xs:complexType> + <xs:simpleType name="AccelerationUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="m/s²"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="AirdragCertificationOptionType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="Measured"/> + <xs:enumeration value="Standard values"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="CO2UnitType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="g/km"/> + <xs:enumeration value="g/t-km"/> + <xs:enumeration value="g/p-km"/> + <xs:enumeration value="g/m³-km"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="DistanceUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="km"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="FuelConsumptionUnitType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="g/km"/> + <xs:enumeration value="g/t-km"/> + <xs:enumeration value="g/p-km"/> + <xs:enumeration value="g/m³-km"/> + <xs:enumeration value="l/100km"/> + <xs:enumeration value="l/t-km"/> + <xs:enumeration value="l/p-km"/> + <xs:enumeration value="l/m³-km"/> + <xs:enumeration value="MJ/km"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="MassUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="kg"/> + <xs:enumeration value="t"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="MissionTypeType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="Long Haul EMS"/> + <xs:enumeration value="Long Haul"/> + <xs:enumeration value="Regional Delivery EMS"/> + <xs:enumeration value="Regional Delivery"/> + <xs:enumeration value="Urban Delivery"/> + <xs:enumeration value="Municipal Utility"/> + <xs:enumeration value="Construction"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="SpeedUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="km/h"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="VehicleGroupType"> + <xs:restriction base="xs:int"> + <xs:minInclusive value="1"/> + <xs:maxInclusive value="16"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="PowerUnitType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="kW"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="DisplacementType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="ltr"/> + </xs:restriction> + </xs:simpleType> +</xs:schema> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.4.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.4.xsd index 22abd15020cf4d935675ef3b7b2e2c517c6fcc47..3953795422cf456bde0613fa02ec1c3b3a8294dd 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.4.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.4.xsd @@ -131,7 +131,14 @@ </xs:annotation> </xs:element> </xs:sequence> - <xs:attribute name="axleNumber" use="required"/> + <xs:attribute name="axleNumber" use="required"> + <xs:simpleType> + <xs:restriction base="xs:int"> + <xs:minInclusive value="1"/> + <xs:maxInclusive value="4"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> </xs:complexType> <xs:complexType name="AxleWheelsType"> <xs:sequence minOccurs="2" maxOccurs="4"> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.5.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.5.xsd new file mode 100644 index 0000000000000000000000000000000000000000..54f7fe161bd33a74fc08663c6cf2308ec3cbd92e --- /dev/null +++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.5.xsd @@ -0,0 +1,648 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> +<!--W3C XML Schema generated by XMLSpy vXMLSpy Professional Edition v2016 rel. 2 (x64) (http://www.altova.com)--> +<xs:schema xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.5" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.5" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.5"> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/> + <xs:element name="VectoOutput"> + <xs:annotation> + <xs:documentation>Comment describing your root element</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:sequence> + <xs:element name="Data"> + <xs:complexType> + <xs:complexContent> + <xs:extension base="VectoOutputDataType"/> + </xs:complexContent> + </xs:complexType> + </xs:element> + <xs:element name="Signature" type="vdecdef:SignatureType"/> + </xs:sequence> + <xs:attribute name="schemaVersion" type="xs:decimal" use="required"/> + </xs:complexType> + </xs:element> + <xs:complexType name="AirdragType"> + <xs:sequence> + <xs:element name="Model" minOccurs="0"/> + <xs:element name="CertificationMethod" type="AirdragCertificationOptionType"/> + <xs:element name="CertificationNumber" minOccurs="0"/> + <xs:element name="DigestValue" minOccurs="0"/> + <xs:element name="CdxA" type="vdecdef:AirdragCdxAType"> + <xs:annotation> + <xs:documentation>P245</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="AngledriveType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType"/> + <xs:element name="CertificationMethod" type="vdecdef:AngledriveCertificationOptionType"> + <xs:annotation> + <xs:documentation>P258</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType" minOccurs="0"/> + <xs:element name="DigestValue" type="xs:token"/> + <xs:element name="Ratio" type="vdecdef:AngledriveRatioType"> + <xs:annotation> + <xs:documentation>P176</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="AuxiliariesType"> + <xs:sequence> + <xs:element name="FanTechnology" type="vdecdef:AuxFanTechnologyType"> + <xs:annotation> + <xs:documentation>P181</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="SteeringPumpTechnology" maxOccurs="4"> + <xs:annotation> + <xs:documentation>P182</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="vdecdef:AuxSPTechnologyType"/> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="ElectricSystemTechnology" type="vdecdef:AuxESTechnologyType"> + <xs:annotation> + <xs:documentation>P183</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="PneumaticSystemTechnology" type="vdecdef:AuxPSTechnologyType"> + <xs:annotation> + <xs:documentation>P184</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="HVACTechnology" type="vdecdef:AuxHVACTechnologyType"> + <xs:annotation> + <xs:documentation>P185</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="AxlegearType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType"/> + <xs:element name="CertificationMethod" type="vdecdef:AxlegearCertificationOptionType"> + <xs:annotation> + <xs:documentation>P256</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType" minOccurs="0"/> + <xs:element name="DigestValue" type="xs:token"/> + <xs:element name="LineType" type="vdecdef:AxlegearLineTypeType"> + <xs:annotation> + <xs:documentation>P253</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Ratio" type="vdecdef:AxlegearRatioType"> + <xs:annotation> + <xs:documentation>P150</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="AxleType"> + <xs:sequence> + <xs:element name="TyreDimension" type="vdecdef:TyreDimensionType"> + <xs:annotation> + <xs:documentation>P108</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="TyreCertificationNumber" type="vdecdef:CertificationNumberType"> + <xs:annotation> + <xs:documentation>P267</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="DigestValue" type="xs:token"/> + <xs:element name="TyreRRCDeclared" type="vdecdef:TyreRRCISOType"> + <xs:annotation> + <xs:documentation>P046</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="TwinTyres" type="vdecdef:AxleTwinTyresType"> + <xs:annotation> + <xs:documentation>P045</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + <xs:attribute name="axleNumber" use="required"> + <xs:simpleType> + <xs:restriction base="xs:int"> + <xs:minInclusive value="1"/> + <xs:maxInclusive value="4"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:complexType> + <xs:complexType name="AxleWheelsType"> + <xs:sequence minOccurs="2" maxOccurs="4"> + <xs:element name="Axle" type="AxleType"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="CO2Type"> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="CO2UnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + <xs:complexType name="ComponentDescriptionType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType"/> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType"/> + <xs:element name="DigestValue" type="xs:token"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="EngineType"> + <xs:complexContent> + <xs:extension base="ComponentDescriptionType"> + <xs:sequence> + <xs:element name="RatedPower"> + <xs:annotation> + <xs:documentation>P250</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="vdecdef:EngineRatedPower"> + <xs:attribute name="unit" type="PowerUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="IdlingSpeed"> + <xs:annotation> + <xs:documentation>P063 / P198</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="vdecdef:EngineDeclaredSpeedType"> + <xs:attribute name="unit" type="AngularVelocityUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="RatedSpeed"> + <xs:annotation> + <xs:documentation>P249</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="vdecdef:EngineDeclaredSpeedType"> + <xs:attribute name="unit" type="AngularVelocityUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="Displacement"> + <xs:annotation> + <xs:documentation>P061</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="DisplacementType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="FuelType" type="vdecdef:FuelTypeType"> + <xs:annotation> + <xs:documentation>P193</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="FuelConsumptionType"> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="FuelConsumptionUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + <xs:complexType name="GearboxType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType"/> + <xs:element name="CertificationMethod" type="vdecdef:GearboxCertificationOptionType"> + <xs:annotation> + <xs:documentation>P154</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType" minOccurs="0"/> + <xs:element name="DigestValue" type="xs:token"/> + <xs:element name="TransmissionType" type="vdecdef:GearboxTransmissionTypeType"> + <xs:annotation> + <xs:documentation>P076</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="GearsCount"> + <xs:annotation> + <xs:documentation>P199</xs:documentation> + </xs:annotation> + <xs:simpleType> + <xs:restriction base="xs:int"> + <xs:minInclusive value="1"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + <xs:element name="TransmissionRatioFinalGear" type="vdecdef:GearboxGearRatioType"> + <xs:annotation> + <xs:documentation>P078</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="ResultType"> + <xs:sequence> + <xs:element name="Mission" type="MissionTypeType"/> + <xs:choice> + <xs:sequence> + <xs:element name="Distance"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="DistanceUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="SimulationParameters" type="SimulationParametersType"/> + <xs:element name="VehiclePerformance" type="VehiclePerformanceType"/> + <xs:element name="FuelConsumption" type="FuelConsumptionType" maxOccurs="unbounded"/> + <xs:element name="CO2" type="CO2Type" maxOccurs="unbounded"/> + </xs:sequence> + <xs:sequence> + <xs:element name="Error" type="xs:string"/> + <xs:element name="ErrorDetails" type="xs:string"/> + </xs:sequence> + </xs:choice> + </xs:sequence> + <xs:attribute name="status" use="required"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="success"/> + <xs:enumeration value="error"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:complexType> + <xs:complexType name="RetarderType"> + <xs:sequence> + <xs:element name="RetarderType" type="vdecdef:RetarderTypeType"> + <xs:annotation> + <xs:documentation>P052</xs:documentation> + </xs:annotation> + </xs:element> + <xs:sequence minOccurs="0"> + <xs:element name="Model" type="vdecdef:ModelType"/> + <xs:element name="CertificationMethod" type="vdecdef:RetarderCertificationOptionType"> + <xs:annotation> + <xs:documentation>P255</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType" minOccurs="0"/> + <xs:element name="DigestValue" type="xs:token"/> + </xs:sequence> + </xs:sequence> + </xs:complexType> + <xs:complexType name="SimulationParametersType"> + <xs:sequence> + <xs:element name="TotalVehicleMass"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="MassUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="Payload"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="MassUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="FuelType" type="vdecdef:FuelTypeType"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="TorqueconverterType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType"/> + <xs:element name="CertificationMethod" type="vdecdef:TorqueConverterCertificationOptionType"> + <xs:annotation> + <xs:documentation>P257</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType" minOccurs="0"/> + <xs:element name="DigestValue" type="xs:token"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="TorqueLimitsEntryType"> + <xs:attribute name="gear" type="vdecdef:GearboxGearNumberType" use="required"> + <xs:annotation> + <xs:documentation>P196</xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="torqueLimit" type="vdecdef:TorqueLimitEntryMaxTorqueType" use="required"> + <xs:annotation> + <xs:documentation>P197 / P194</xs:documentation> + </xs:annotation> + </xs:attribute> + </xs:complexType> + <xs:complexType name="TorqueLimitsType"> + <xs:sequence> + <xs:element name="Entry" type="TorqueLimitsEntryType"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="VectoOutputDataType"> + <xs:sequence> + <xs:element name="Vehicle" type="VehicleType"/> + <xs:element name="Results"> + <xs:complexType> + <xs:sequence> + <xs:element name="Status"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="success"/> + <xs:enumeration value="error"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + <xs:element name="Result" type="ResultType" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="ApplicationInformation"> + <xs:complexType> + <xs:sequence> + <xs:element name="SimulationToolVersion"/> + <xs:element name="Date"/> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + <xs:attribute name="id" use="required"/> + </xs:complexType> + <xs:complexType name="VehiclePerformanceType"> + <xs:sequence> + <xs:element name="AverageSpeed"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="SpeedUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="AverageDrivingSpeed"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="SpeedUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="MinSpeed"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="SpeedUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="MaxSpeed"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="SpeedUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="MaxDeceleration"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="AccelerationUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="MaxAcceleration"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="AccelerationUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="FullLoadDrivingtimePercentage"> + <xs:simpleType> + <xs:restriction base="xs:double"> + <xs:minInclusive value="0"/> + <xs:maxInclusive value="100"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + <xs:element name="GearshiftCount" type="xs:int"/> + <xs:element name="EngineSpeedDriving"> + <xs:complexType> + <xs:sequence> + <xs:element name="Min"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="AngularVelocityUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="Average"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="AngularVelocityUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="Max"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="AngularVelocityUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="VehicleType"> + <xs:sequence> + <xs:element name="VIN"> + <xs:annotation> + <xs:documentation>P238</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="LegislativeClass" type="vdecdef:LegislativeClassDeclarationType"> + <xs:annotation> + <xs:documentation>P251</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="VehicleGroup" type="VehicleGroupType"> + <xs:annotation> + <xs:documentation>VECTO</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="AxleConfiguration" type="vdecdef:VehicleAxleConfigurationDeclarationType"> + <xs:annotation> + <xs:documentation>P037</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="GrossVehicleMass"> + <xs:annotation> + <xs:documentation>P041</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="MassUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="CurbMassChassis"> + <xs:annotation> + <xs:documentation>P038</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="vdecdef:VehicleCurbMassChassisType"> + <xs:attribute name="unit" type="MassUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="PTO" type="xs:boolean"> + <xs:annotation> + <xs:documentation>P247</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="TorqueLimits" type="TorqueLimitsType" minOccurs="0"/> + <xs:element name="Components"> + <xs:complexType> + <xs:sequence> + <xs:element name="Engine" type="EngineType"/> + <xs:element name="Gearbox" type="GearboxType"/> + <xs:element name="Torqueconverter" type="TorqueconverterType" minOccurs="0"/> + <xs:element name="Retarder" type="RetarderType"/> + <xs:element name="Angledrive" type="AngledriveType" minOccurs="0"/> + <xs:element name="Axlegear" type="AxlegearType"/> + <xs:element name="AirDrag" type="AirdragType"/> + <xs:element name="AxleWheels" type="AxleWheelsType"/> + <xs:element name="Auxiliaries" type="AuxiliariesType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="InputDataSignature" type="vdecdef:SignatureType"/> + </xs:sequence> + </xs:complexType> + <xs:simpleType name="AccelerationUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="m/s²"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="AirdragCertificationOptionType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="Measured"/> + <xs:enumeration value="Standard values"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="CO2UnitType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="g/km"/> + <xs:enumeration value="g/t-km"/> + <xs:enumeration value="g/p-km"/> + <xs:enumeration value="g/m³-km"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="DistanceUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="km"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="FuelConsumptionUnitType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="g/km"/> + <xs:enumeration value="g/t-km"/> + <xs:enumeration value="g/p-km"/> + <xs:enumeration value="g/m³-km"/> + <xs:enumeration value="l/100km"/> + <xs:enumeration value="l/t-km"/> + <xs:enumeration value="l/p-km"/> + <xs:enumeration value="l/m³-km"/> + <xs:enumeration value="MJ/km"/> + <xs:enumeration value="MJ/t-km"/> + <xs:enumeration value="MJ/m³-km"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="MassUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="kg"/> + <xs:enumeration value="t"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="MissionTypeType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="Long Haul EMS"/> + <xs:enumeration value="Long Haul"/> + <xs:enumeration value="Regional Delivery EMS"/> + <xs:enumeration value="Regional Delivery"/> + <xs:enumeration value="Urban Delivery"/> + <xs:enumeration value="Municipal Utility"/> + <xs:enumeration value="Construction"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="SpeedUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="km/h"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="VehicleGroupType"> + <xs:restriction base="xs:int"> + <xs:minInclusive value="1"/> + <xs:maxInclusive value="16"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="AngularVelocityUnitType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="rpm"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="PowerUnitType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="kW"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="DisplacementType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="ltr"/> + </xs:restriction> + </xs:simpleType> +</xs:schema> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoVTPReport.xsd b/VectoCore/VectoCore/Resources/XSD/VectoVTPReport.xsd new file mode 100644 index 0000000000000000000000000000000000000000..26a7c71c24f38ccb3c4a5389aff120d84af2c9cf --- /dev/null +++ b/VectoCore/VectoCore/Resources/XSD/VectoVTPReport.xsd @@ -0,0 +1,544 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> +<xs:schema xmlns="urn:tugraz:ivt:VectoAPI:VTPReport:v0.1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" targetNamespace="urn:tugraz:ivt:VectoAPI:VTPReport:v0.1" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.1"> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/> + <xs:element name="VectoVTPReport"> + <xs:complexType> + <xs:sequence> + <xs:element name="Data"> + <xs:complexType> + <xs:sequence> + <xs:element name="General"> + <xs:complexType> + <xs:sequence> + <xs:element name="Manufacturer" type="vdecdef:ManufacturerType"/> + <xs:element name="ManufacturerAddress" type="vdecdef:ManufacturerAddressType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="Vehicle" type="VehicleType"/> + <xs:element name="DataIntegrityCheck" type="DataIntegrityCheckType"/> + <xs:element name="TestConditions"/> + <xs:element name="Results" type="ResultsType"/> + <xs:element name="ApplicationInformation"> + <xs:complexType> + <xs:sequence> + <xs:element name="SimulationToolVersion"/> + <xs:element name="Date"/> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + <xs:attribute name="schemaVersion" type="xs:decimal" use="required"/> + </xs:complexType> + </xs:element> + <xs:complexType name="AirDragType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType" minOccurs="0"> + <xs:annotation> + <xs:documentation>P241</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationMethod" type="AirdragCertificationOptionType"> + <xs:annotation> + <xs:documentation>VECTO</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType" minOccurs="0"> + <xs:annotation> + <xs:documentation>P268</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CdxA" type="vdecdef:AirdragCdxAType"> + <xs:annotation> + <xs:documentation>P146</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="AngleDriveType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType"> + <xs:annotation> + <xs:documentation>P221</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationMethod" type="vdecdef:AngledriveCertificationOptionType"> + <xs:annotation> + <xs:documentation>P258</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType" minOccurs="0"> + <xs:annotation> + <xs:documentation>P265</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Ratio" type="vdecdef:AngledriveRatioType"> + <xs:annotation> + <xs:documentation>P176</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="AuxiliariesType"> + <xs:sequence> + <xs:element name="FanTechnology" type="vdecdef:AuxFanTechnologyType"> + <xs:annotation> + <xs:documentation>P181</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="SteeringPumpTechnology" type="vdecdef:AuxSPTechnologyType" maxOccurs="4"> + <xs:annotation> + <xs:documentation>P182</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="ElectricSystemTechnology" type="vdecdef:AuxESTechnologyType"> + <xs:annotation> + <xs:documentation>P183</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="PneumaticSystemTechnology" type="vdecdef:AuxPSTechnologyType"> + <xs:annotation> + <xs:documentation>P184</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="HVACTechnology" type="vdecdef:AuxHVACTechnologyType"> + <xs:annotation> + <xs:documentation>P185</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="AxlegearType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType"> + <xs:annotation> + <xs:documentation>P216</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationMethod" type="vdecdef:AxlegearCertificationOptionType"> + <xs:annotation> + <xs:documentation>P256</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType" minOccurs="0"> + <xs:annotation> + <xs:documentation>P264</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="LineType" type="vdecdef:AxlegearLineTypeType"> + <xs:annotation> + <xs:documentation>P253</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Ratio" type="vdecdef:AxlegearRatioType"> + <xs:annotation> + <xs:documentation>P150</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="AxleType"> + <xs:sequence> + <xs:element name="TyreDimension" type="vdecdef:TyreDimensionType"> + <xs:annotation> + <xs:documentation>P108</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType"> + <xs:annotation> + <xs:documentation>P267</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="TyreRRCDeclared" type="vdecdef:TyreRRCISOType"> + <xs:annotation> + <xs:documentation>P046</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="TwinTyres" type="vdecdef:AxleTwinTyresType"> + <xs:annotation> + <xs:documentation>P045</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + <xs:attribute name="axleNumber" use="required"> + <xs:simpleType> + <xs:restriction base="xs:int"> + <xs:minInclusive value="1"/> + <xs:maxInclusive value="4"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:complexType> + <xs:complexType name="AxleWheelsType"> + <xs:sequence minOccurs="2" maxOccurs="4"> + <xs:element name="Axle" type="AxleType"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="CO2ResultType"> + <xs:sequence> + <xs:element name="Mission"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:minLength value="1"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + <xs:element name="Declared"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="CO2UnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="Verified"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="CO2UnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="DataIntegrityCheckType"> + <xs:sequence> + <xs:element name="Components"> + <xs:complexType> + <xs:sequence> + <xs:element name="Component" minOccurs="0" maxOccurs="unbounded"> + <xs:complexType> + <xs:complexContent> + <xs:extension base="DataIntegrityResultType"> + <xs:attribute name="componentName" type="xs:token" use="required"/> + </xs:extension> + </xs:complexContent> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="ManufacturerReport" type="DataIntegrityResultType"/> + <xs:element name="JobData" type="DataIntegrityResultType"/> + </xs:sequence> + <xs:attribute name="status" type="DataIntegrityStatusType" use="required"/> + </xs:complexType> + <xs:complexType name="DataIntegrityResultType"> + <xs:choice> + <xs:sequence> + <xs:element name="DigestValueRecomputed" type="xs:token"/> + <xs:element name="DigestValueRead" maxOccurs="unbounded"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:token"> + <xs:attribute name="source" type="xs:token" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + </xs:sequence> + <xs:sequence> + <xs:element name="Error" type="xs:string"/> + </xs:sequence> + </xs:choice> + <xs:attribute name="status" type="DataIntegrityStatusType" use="required"/> + </xs:complexType> + <xs:complexType name="EngineType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType"> + <xs:annotation> + <xs:documentation>P201</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType"> + <xs:annotation> + <xs:documentation>P261</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="RatedPower" type="vdecdef:EngineRatedPower"> + <xs:annotation> + <xs:documentation>P250</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Displacement" type="vdecdef:EngineDisplacementType"> + <xs:annotation> + <xs:documentation>P061</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="FuelType" type="vdecdef:FuelTypeType"> + <xs:annotation> + <xs:documentation>P193</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="FuelConsumptionResultType"> + <xs:sequence> + <xs:element name="Measured"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="FCUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="MeasuredCorrected"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="FCUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="Simulated"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="FCUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="GearboxType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType"> + <xs:annotation> + <xs:documentation>P206</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationMethod" type="vdecdef:GearboxCertificationOptionType"> + <xs:annotation> + <xs:documentation>P254</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType" minOccurs="0"> + <xs:annotation> + <xs:documentation>P262</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="TransmissionType" type="vdecdef:GearboxTransmissionTypeType"> + <xs:annotation> + <xs:documentation>P076</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="GearsCount"> + <xs:annotation> + <xs:documentation>P199</xs:documentation> + </xs:annotation> + <xs:simpleType> + <xs:restriction base="xs:int"> + <xs:minInclusive value="1"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + <xs:element name="TransmissionRatioFinalGear" type="vdecdef:GearboxGearRatioType"> + <xs:annotation> + <xs:documentation>P078</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="ResultsType"> + <xs:sequence> + <xs:element name="Status" type="VTPStatusType"/> + <xs:element name="AverageFanPower"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="PowerUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="WorkPosVT"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="WorkUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="TestFuelNCV"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="NCVUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="FuelConsumption" type="FuelConsumptionResultType"/> + <xs:element name="CO2" type="CO2ResultType"/> + <xs:element name="VTRatio" type="xs:double"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="RetarderType"> + <xs:sequence> + <xs:element name="RetarderType" type="vdecdef:RetarderTypeType"> + <xs:annotation> + <xs:documentation>P052</xs:documentation> + </xs:annotation> + </xs:element> + <xs:sequence minOccurs="0"> + <xs:element name="Model" type="vdecdef:ModelType"> + <xs:annotation> + <xs:documentation>P226</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationMethod" type="vdecdef:RetarderCertificationOptionType"> + <xs:annotation> + <xs:documentation>P255</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType" minOccurs="0"> + <xs:annotation> + <xs:documentation>P266</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:sequence> + </xs:complexType> + <xs:complexType name="TorqueConverterType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType"> + <xs:annotation> + <xs:documentation>P211</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationMethod" type="vdecdef:TorqueConverterCertificationOptionType"> + <xs:annotation> + <xs:documentation>P257</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="vdecdef:CertificationNumberType" minOccurs="0"> + <xs:annotation> + <xs:documentation>P263</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="VehicleType"> + <xs:sequence> + <xs:element name="Model" type="vdecdef:ModelType"> + <xs:annotation> + <xs:documentation>P236</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="VIN" type="vdecdef:VINType"> + <xs:annotation> + <xs:documentation>P238</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="LegislativeClass" type="vdecdef:LegislativeClassDeclarationType"> + <xs:annotation> + <xs:documentation>P251</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="VehicleGroup" type="VehicleGroupType"> + <xs:annotation> + <xs:documentation>VECTO</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="AxleConfiguration" type="vdecdef:VehicleAxleConfigurationDeclarationType"> + <xs:annotation> + <xs:documentation>P037</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="GrossVehicleMass" type="vdecdef:VehicleGrossVehicleMassType"> + <xs:annotation> + <xs:documentation>P041</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CurbMassChassis" type="vdecdef:VehicleCurbMassChassisType"> + <xs:annotation> + <xs:documentation>P038</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="RetarderRatio" type="vdecdef:RetarderRatioType" minOccurs="0"> + <xs:annotation> + <xs:documentation>P053</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="PTO" type="xs:boolean"> + <xs:annotation> + <xs:documentation>P247</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Components"> + <xs:complexType> + <xs:sequence> + <xs:element name="Engine" type="EngineType"/> + <xs:element name="Gearbox" type="GearboxType"/> + <xs:element name="TorqueConverter" type="TorqueConverterType" minOccurs="0"/> + <xs:element name="Retarder" type="RetarderType"/> + <xs:element name="AngleDrive" type="AngleDriveType" minOccurs="0"/> + <xs:element name="Axlegear" type="AxlegearType"/> + <xs:element name="AirDrag" type="AirDragType"/> + <xs:element name="AxleWheels" type="AxleWheelsType"/> + <xs:element name="Auxiliaries" type="AuxiliariesType"/> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:simpleType name="AirdragCertificationOptionType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="Measured"/> + <xs:enumeration value="Standard values"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="CO2UnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="g/t-km"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="DataIntegrityStatusType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="success"/> + <xs:enumeration value="failed"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="FCUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="g/kWh"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="NCVUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="MJ/kg"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="PowerUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="kW"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="VehicleGroupType"> + <xs:restriction base="xs:int"> + <xs:minInclusive value="1"/> + <xs:maxInclusive value="16"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="VTPStatusType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="Passed"/> + <xs:enumeration value="Failed"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="WorkUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="kWh"/> + </xs:restriction> + </xs:simpleType> +</xs:schema> diff --git a/VectoCore/VectoCore/Utils/VectoVersionCore.cs b/VectoCore/VectoCore/Utils/VectoVersionCore.cs index 4d6a9619af5a0a663b0e675a83ba5e7bc08e6511..9435e8f935a3c3d20524b9b40ce9615b6b00815c 100644 --- a/VectoCore/VectoCore/Utils/VectoVersionCore.cs +++ b/VectoCore/VectoCore/Utils/VectoVersionCore.cs @@ -36,7 +36,7 @@ namespace TUGraz.VectoCore.Utils public static string VersionNumber { get { - return "3.2.1.1133"; + return "3.3.0.1250"; } } diff --git a/VectoCore/VectoCore/Utils/XMLHelper.cs b/VectoCore/VectoCore/Utils/XMLHelper.cs new file mode 100644 index 0000000000000000000000000000000000000000..8f1620bacf01ee6a4e6ceafd732714e822baef3c --- /dev/null +++ b/VectoCore/VectoCore/Utils/XMLHelper.cs @@ -0,0 +1,103 @@ +/* +* This file is part of VECTO. +* +* Copyright © 2012-2017 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System; +using System.Xml.Linq; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; + +namespace TUGraz.VectoCore.Utils { + + public static class XMLHelper { + + + public static object[] ValueAsUnit(Kilogram mass, string unit, uint? decimals = 0) + { + switch (unit) { + case "t": return ValueAsUnit(mass.ConvertToTon(), unit, decimals); + case "kg": return ValueAsUnit(mass.Value(), unit, decimals); + } + throw new NotImplementedException(string.Format("unknown unit '{0}'", unit)); + } + + public static object[] ValueAsUnit(Watt power, string unit, uint? decimals = 0) + { + switch (unit) { + case "kW": return ValueAsUnit(power.ConvertToKiloWatt(), unit, decimals); + case "W": return ValueAsUnit(power.Value(), unit, decimals); + } + throw new NotImplementedException(string.Format("unknown unit '{0}'", unit)); + } + + public static object[] ValueAsUnit(CubicMeter volume, string unit, uint? decimals = 0) + { + switch (unit) { + case "ltr": return ValueAsUnit(volume.ConvertToCubicDeziMeter(), unit, decimals); + case "ccm": return ValueAsUnit(volume.ConvertToCubicCentiMeter(), unit, decimals); + case "m3": return ValueAsUnit(volume.Value(), unit, decimals); + } + throw new NotImplementedException(string.Format("unknown unit '{0}'", unit)); + } + + public static object[] ValueAsUnit(PerSecond angSpeed, string unit, uint? decimals = 0) + { + switch (unit) { + case "rpm": return ValueAsUnit(angSpeed.ConvertToRoundsPerMinute(), unit, decimals); + } + throw new NotImplementedException(string.Format("unknown unit '{0}'", unit)); + } + + + public static object[] ValueAsUnit(MeterPerSecond speed, string unit, uint? decimals) + { + switch (unit) { + case "km/h": return ValueAsUnit(speed.ConvertToKiloMeterPerHour(), unit, decimals); + } + throw new NotImplementedException(string.Format("unknown unit '{0}'", unit)); + } + + public static object[] ValueAsUnit(MeterPerSquareSecond acc, string unit, uint? decimals) + { + switch (unit) { + case "m/s²": return ValueAsUnit(acc.Value(), unit, decimals); + } + throw new NotImplementedException(string.Format("unknown unit '{0}'", unit)); + } + + private static object[] ValueAsUnit(double value, string unit, uint? decimals) + { + return new object[] { + new XAttribute(XMLNames.Report_Results_Unit_Attr, unit), + value.ToXMLFormat(decimals) + }; + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/Utils/XMLValidator.cs b/VectoCore/VectoCore/Utils/XMLValidator.cs index 220ae58dcda0daad0d0667a3052a1408df0a9b9c..92881d410583a98eeb9aa51177dabeb645073d27 100644 --- a/VectoCore/VectoCore/Utils/XMLValidator.cs +++ b/VectoCore/VectoCore/Utils/XMLValidator.cs @@ -51,8 +51,8 @@ namespace TUGraz.VectoCore.Utils {XmlDocumentType.DeclarationJobData, Tuple.Create("VectoInput{0}.xsd", new [] {"1.0"}) }, {XmlDocumentType.DeclarationComponentData, Tuple.Create("VectoComponent{0}.xsd", new [] {"1.0"}) }, {XmlDocumentType.EngineeringData, Tuple.Create("VectoEngineeringInput{0}.xsd", new [] {"0.7"}) }, - {XmlDocumentType.ManufacturerReport, Tuple.Create("VectoOutputManufacturer{0}.xsd", new [] {"0.4"}) }, - { XmlDocumentType.CustomerReport , Tuple.Create("VectoOutputCustomer{0}.xsd", new [] {"0.4"})}, + {XmlDocumentType.ManufacturerReport, Tuple.Create("VectoOutputManufacturer{0}.xsd", new [] {"0.4", "0.5"}) }, + { XmlDocumentType.CustomerReport , Tuple.Create("VectoOutputCustomer{0}.xsd", new [] {"0.4", "0.5"})}, }; private XMLValidator(Action<bool> resultaction, Action<XmlSeverityType, ValidationEvent> validationErrorAction) diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj deleted file mode 100644 index c34c5b71c3537df17a374a0591790da86e47a73f..0000000000000000000000000000000000000000 --- a/VectoCore/VectoCore/VectoCore.csproj +++ /dev/null @@ -1,493 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> - <PropertyGroup> - <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> - <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> - <ProjectGuid>{CD36938A-ADD9-4C65-96DA-B397CDEEA90A}</ProjectGuid> - <OutputType>Library</OutputType> - <AppDesignerFolder>Properties</AppDesignerFolder> - <RootNamespace>TUGraz.VectoCore</RootNamespace> - <AssemblyName>VectoCore</AssemblyName> - <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> - <FileAlignment>512</FileAlignment> - <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode> - <NuGetPackageImportStamp>5f3566e7</NuGetPackageImportStamp> - <TargetFrameworkProfile /> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> - <DebugSymbols>true</DebugSymbols> - <DebugType>full</DebugType> - <Optimize>false</Optimize> - <OutputPath>bin\Debug\</OutputPath> - <DefineConstants>DEBUG</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - <CheckForOverflowUnderflow>true</CheckForOverflowUnderflow> - <TreatWarningsAsErrors>true</TreatWarningsAsErrors> - <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies> - <CodeAnalysisIgnoreGeneratedCode>true</CodeAnalysisIgnoreGeneratedCode> - <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking> - <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface> - <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure> - <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires> - <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers> - <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis> - <CodeContractsNonNullObligations>True</CodeContractsNonNullObligations> - <CodeContractsBoundsObligations>True</CodeContractsBoundsObligations> - <CodeContractsArithmeticObligations>True</CodeContractsArithmeticObligations> - <CodeContractsEnumObligations>True</CodeContractsEnumObligations> - <CodeContractsRedundantAssumptions>True</CodeContractsRedundantAssumptions> - <CodeContractsAssertsToContractsCheckBox>False</CodeContractsAssertsToContractsCheckBox> - <CodeContractsRedundantTests>True</CodeContractsRedundantTests> - <CodeContractsMissingPublicRequiresAsWarnings>True</CodeContractsMissingPublicRequiresAsWarnings> - <CodeContractsMissingPublicEnsuresAsWarnings>True</CodeContractsMissingPublicEnsuresAsWarnings> - <CodeContractsInferRequires>True</CodeContractsInferRequires> - <CodeContractsInferEnsures>True</CodeContractsInferEnsures> - <CodeContractsInferEnsuresAutoProperties>True</CodeContractsInferEnsuresAutoProperties> - <CodeContractsInferObjectInvariants>True</CodeContractsInferObjectInvariants> - <CodeContractsSuggestAssumptions>True</CodeContractsSuggestAssumptions> - <CodeContractsSuggestAssumptionsForCallees>False</CodeContractsSuggestAssumptionsForCallees> - <CodeContractsSuggestRequires>True</CodeContractsSuggestRequires> - <CodeContractsNecessaryEnsures>False</CodeContractsNecessaryEnsures> - <CodeContractsSuggestObjectInvariants>True</CodeContractsSuggestObjectInvariants> - <CodeContractsSuggestReadonly>False</CodeContractsSuggestReadonly> - <CodeContractsRunInBackground>True</CodeContractsRunInBackground> - <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies> - <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine> - <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs> - <CodeContractsCustomRewriterAssembly /> - <CodeContractsCustomRewriterClass /> - <CodeContractsLibPaths /> - <CodeContractsExtraRewriteOptions /> - <CodeContractsExtraAnalysisOptions /> - <CodeContractsSQLServerOption /> - <CodeContractsBaseLineFile>baseline.xml</CodeContractsBaseLineFile> - <CodeContractsCacheAnalysisResults>True</CodeContractsCacheAnalysisResults> - <CodeContractsSkipAnalysisIfCannotConnectToCache>False</CodeContractsSkipAnalysisIfCannotConnectToCache> - <CodeContractsFailBuildOnWarnings>True</CodeContractsFailBuildOnWarnings> - <CodeContractsBeingOptimisticOnExternal>True</CodeContractsBeingOptimisticOnExternal> - <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel> - <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly> - <CodeContractsAnalysisWarningLevel>3</CodeContractsAnalysisWarningLevel> - <Prefer32Bit>false</Prefer32Bit> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> - <DebugType>pdbonly</DebugType> - <Optimize>true</Optimize> - <OutputPath>bin\Release\</OutputPath> - <DefineConstants> - </DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - <AllowUnsafeBlocks>false</AllowUnsafeBlocks> - <Prefer32Bit>false</Prefer32Bit> - </PropertyGroup> - <ItemGroup> - <Reference Include="DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> - <Reference Include="Microsoft.VisualBasic" /> - <Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll</HintPath> - </Reference> - <Reference Include="NLog"> - <HintPath>..\..\packages\NLog.4.2.3\lib\net45\NLog.dll</HintPath> - </Reference> - <Reference Include="System" /> - <Reference Include="System.ComponentModel.DataAnnotations" /> - <Reference Include="System.Core" /> - <Reference Include="System.Drawing" /> - <Reference Include="System.Runtime.Serialization" /> - <Reference Include="System.Windows.Forms" /> - <Reference Include="System.Windows.Forms.DataVisualization" /> - <Reference Include="System.Data.DataSetExtensions" /> - <Reference Include="Microsoft.CSharp" /> - <Reference Include="System.Data" /> - <Reference Include="System.Xml" /> - <Reference Include="System.Xml.Linq" /> - </ItemGroup> - <ItemGroup> - <Compile Include="Configuration\Constants.cs" /> - <Compile Include="InputData\AuxiliaryFileHelper.cs" /> - <Compile Include="InputData\FileIO\JSON\IJSONVehicleComponents.cs" /> - <Compile Include="InputData\FileIO\JSON\JSONComponentInputData.cs" /> - <Compile Include="InputData\FileIO\JSON\JsonExtensionMethods.cs" /> - <Compile Include="InputData\FileIO\XML\Declaration\AbstractDeclarationXMLComponentDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationAirdragDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationAngledriveDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationAuxiliaryDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationAxlegearDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationEngineDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationGearboxDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationJobInputDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationRetarderDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationTorqueConverterDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationVehicleDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationInputDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\AbstractEngineeringXMLComponentDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringAirdragDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringAngledriveDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringAuxiliaryDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringAxlegearDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringDriverDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringEngineDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringGearboxDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringInputDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringJobInputDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringRetarderDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringTorqueConverterDataProvider.cs" /> - <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringVehicleDataProvider.cs" /> - <Compile Include="InputData\FileIO\JSON\JSONEngineData.cs" /> - <Compile Include="InputData\FileIO\JSON\JSONGearboxData.cs" /> - <Compile Include="InputData\FileIO\JSON\JSONInputData.cs" /> - <Compile Include="InputData\FileIO\JSON\JSONInputDataFactory.cs" /> - <Compile Include="InputData\FileIO\JSON\JSONVehicleData.cs" /> - <Compile Include="InputData\Impl\InputData.cs" /> - <Compile Include="InputData\IVectoRunDataFactory.cs" /> - <Compile Include="InputData\Reader\ComponentData\AccelerationCurveReader.cs" /> - <Compile Include="InputData\Reader\ComponentData\AuxiliaryDataReader.cs" /> - <Compile Include="InputData\Reader\ComponentData\CrossWindCorrectionCurveReader.cs" /> - <Compile Include="InputData\Reader\ComponentData\PTOIdleLossMapReader.cs" /> - <Compile Include="InputData\Reader\ComponentData\RetarderLossMapReader.cs" /> - <Compile Include="InputData\Reader\ComponentData\TorqueConverterDataReader.cs" /> - <Compile Include="InputData\Reader\ComponentData\TransmissionLossMapReader.cs" /> - <Compile Include="InputData\Reader\DataObjectAdapter\AbstractSimulationDataAdapter.cs" /> - <Compile Include="InputData\Reader\DataObjectAdapter\DeclarationDataAdapter.cs" /> - <Compile Include="InputData\Reader\DataObjectAdapter\EngineeringDataAdapter.cs" /> - <Compile Include="InputData\Reader\DrivingCycleDataReader.cs" /> - <Compile Include="InputData\Reader\FullLoadCurveReader.cs" /> - <Compile Include="InputData\Reader\Impl\DeclarationModeVectoRunDataFactory.cs" /> - <Compile Include="InputData\Reader\Impl\DrivingCycleProxy.cs" /> - <Compile Include="InputData\Reader\Impl\EngineeringModeVectoRunDataFactory.cs" /> - <Compile Include="InputData\Reader\Impl\EngineOnlyVectoRunDataFactory.cs" /> - <Compile Include="InputData\Reader\ShiftPolygonReader.cs" /> - <Compile Include="Models\Declaration\AuxDemandEntry.cs" /> - <Compile Include="Models\Declaration\AuxiliaryTypeHelper.cs" /> - <Compile Include="Models\Connector\Ports\IDriverDemandPort.cs" /> - <Compile Include="Models\Connector\Ports\IDrivingCyclePort.cs" /> - <Compile Include="Models\Connector\Ports\Impl\Response.cs" /> - <Compile Include="Models\Connector\Ports\IFvPort.cs" /> - <Compile Include="Models\Connector\Ports\ITnPort.cs" /> - <Compile Include="Models\Declaration\FuelData.cs" /> - <Compile Include="Models\Declaration\PTOTransmission.cs" /> - <Compile Include="Models\Declaration\IDeclarationAuxiliaryTable.cs" /> - <Compile Include="Models\SimulationComponent\Data\AngledriveData.cs" /> - <Compile Include="Models\SimulationComponent\Data\Engine\FuelConsumptionMapReader.cs" /> - <Compile Include="Models\SimulationComponent\Data\PTOData.cs" /> - <Compile Include="Models\SimulationComponent\ILossMap.cs" /> - <Compile Include="Models\SimulationComponent\Data\PTOLossMap.cs" /> - <Compile Include="Models\SimulationComponent\Impl\AbstractGearbox.cs" /> - <Compile Include="Models\SimulationComponent\Impl\ATGearbox.cs" /> - <Compile Include="Models\SimulationComponent\Impl\ATShiftStrategy.cs" /> - <Compile Include="Models\SimulationComponent\Impl\BaseShiftStrategy.cs" /> - <Compile Include="Models\SimulationComponent\Impl\DrivingCycleEnumerator.cs" /> - <Compile Include="Models\SimulationComponent\Impl\EngineFanAuxiliary.cs" /> - <Compile Include="Models\SimulationComponent\Impl\VTPCombustionEngine.cs" /> - <Compile Include="Models\SimulationComponent\Impl\MeasuredSpeedDrivingCycle.cs" /> - <Compile Include="Models\SimulationComponent\Impl\PTOCycleController.cs" /> - <Compile Include="Models\SimulationComponent\Impl\PWheelCycle.cs" /> - <Compile Include="Models\SimulationComponent\Impl\TorqueConverter.cs" /> - <Compile Include="Models\SimulationComponent\Impl\IdleControllerSwitcher.cs" /> - <Compile Include="Models\SimulationComponent\Impl\VTPGearbox.cs" /> - <Compile Include="Models\Simulation\Data\ModalResultField.cs" /> - <Compile Include="InputData\Reader\Impl\EngineeringVTPModeVectoRunDataFactory.cs" /> - <Compile Include="Models\SimulationComponent\Impl\VTPCycle.cs" /> - <Compile Include="OutputData\ModFilter\ActualModalDataFilter.cs" /> - <Compile Include="OutputData\ModFilter\ModalData1HzFilter.cs" /> - <Compile Include="OutputData\XML\AbstractXMLWriter.cs" /> - <Compile Include="OutputData\XML\AttributeMappings.cs" /> - <Compile Include="OutputData\XML\XMLCustomerReport.cs" /> - <Compile Include="OutputData\XML\XMLDeclarationReport.cs" /> - <Compile Include="OutputData\XML\XMLDeclarationWriter.cs" /> - <Compile Include="OutputData\XML\XMLEngineeringWriter.cs" /> - <Compile Include="OutputData\XML\XMLManufacturerReport.cs" /> - <Compile Include="Utils\ProviderExtensions.cs" /> - <Compile Include="Models\Declaration\AirDrag.cs" /> - <Compile Include="Models\Declaration\Fan.cs" /> - <Compile Include="Models\Declaration\HVAC.cs" /> - <Compile Include="Models\Declaration\LACDecisionFactor.cs" /> - <Compile Include="Models\Declaration\Payloads.cs" /> - <Compile Include="Models\Declaration\PneumaticSystem.cs" /> - <Compile Include="Models\Declaration\PT1.cs" /> - <Compile Include="Models\Declaration\Segments.cs" /> - <Compile Include="Models\Declaration\StandardBodies.cs" /> - <Compile Include="Models\Declaration\SteeringPump.cs" /> - <Compile Include="Models\Declaration\VehicleClass.cs" /> - <Compile Include="Models\Declaration\Wheels.cs" /> - <Compile Include="Models\Declaration\WHTCCorrection.cs" /> - <Compile Include="Models\SimulationComponent\Data\CrosswindCorrectionCdxALookup.cs" /> - <Compile Include="Models\SimulationComponent\Data\AuxiliaryData.cs" /> - <Compile Include="Models\SimulationComponent\Data\AuxSupplyPowerReader.cs" /> - <Compile Include="Models\SimulationComponent\Data\AxleGearData.cs" /> - <Compile Include="Models\SimulationComponent\Data\CycleData.cs" /> - <Compile Include="Models\SimulationComponent\Data\AccelerationCurve.cs" /> - <Compile Include="Models\Declaration\DeclarationData.cs" /> - <Compile Include="Models\Declaration\ElectricSystem.cs" /> - <Compile Include="Models\Declaration\LookupData.cs" /> - <Compile Include="Models\Declaration\Mission.cs" /> - <Compile Include="Models\Declaration\MissionType.cs" /> - <Compile Include="Models\SimulationComponent\Data\DriverData.cs" /> - <Compile Include="Models\SimulationComponent\Data\ICrossWindCorrection.cs" /> - <Compile Include="Models\SimulationComponent\Data\CrosswindCorrectionVAirBeta.cs" /> - <Compile Include="Models\SimulationComponent\IAxlegear.cs" /> - <Compile Include="Models\SimulationComponent\IBrakes.cs" /> - <Compile Include="Models\SimulationComponent\IIdleController.cs" /> - <Compile Include="Models\SimulationComponent\IDriverActions.cs" /> - <Compile Include="Models\SimulationComponent\IDriverStrategy.cs" /> - <Compile Include="Models\SimulationComponent\IDrivingCycleInfo.cs" /> - <Compile Include="Models\SimulationComponent\IAuxPort.cs" /> - <Compile Include="Models\SimulationComponent\Impl\AMTShiftStrategy.cs" /> - <Compile Include="Models\SimulationComponent\Impl\Angledrive.cs" /> - <Compile Include="Models\SimulationComponent\Impl\Brakes.cs" /> - <Compile Include="Models\SimulationComponent\Impl\BusAuxiliariesAdapter.cs" /> - <Compile Include="Models\SimulationComponent\Impl\CycleGearbox.cs" /> - <Compile Include="Models\SimulationComponent\Impl\DefaultDriverStrategy.cs" /> - <Compile Include="Models\SimulationComponent\Impl\DummyRetarder.cs" /> - <Compile Include="Models\SimulationComponent\Impl\EngineAuxiliary.cs" /> - <Compile Include="Models\SimulationComponent\Impl\EngineOnlyCombustionEngine.cs" /> - <Compile Include="Models\SimulationComponent\Impl\MTShiftStrategy.cs" /> - <Compile Include="Models\SimulationComponent\Impl\TransmissionComponent.cs" /> - <Compile Include="Models\SimulationComponent\IShiftStrategy.cs" /> - <Compile Include="Models\SimulationComponent\Impl\ShiftStrategy.cs" /> - <Compile Include="Models\Simulation\DataBus\IAxlegearInfo.cs" /> - <Compile Include="Models\Simulation\DataBus\IClutchInfo.cs" /> - <Compile Include="Models\Simulation\DataBus\IDriverInfo.cs" /> - <Compile Include="Models\Simulation\DataBus\IWheelsInfo.cs" /> - <Compile Include="Models\Simulation\DataBus\IMileageCounter.cs" /> - <Compile Include="Utils\DebugData.cs" /> - <Compile Include="Models\Simulation\Impl\DistanceRun.cs" /> - <Compile Include="Models\Simulation\Impl\PowertrainBuilder.cs" /> - <Compile Include="Models\Simulation\Impl\TimeRun.cs" /> - <Compile Include="OutputData\DeclarationReport.cs" /> - <Compile Include="OutputData\FileIO\FileOutputWriter.cs" /> - <Compile Include="OutputData\IModalDataContainer.cs" /> - <Compile Include="OutputData\IDataWriter.cs" /> - <Compile Include="OutputData\ModalDataContainer.cs" /> - <Compile Include="OutputData\SummaryDataContainer.cs" /> - <Compile Include="Properties\Version.cs"> - <AutoGen>True</AutoGen> - <DesignTime>True</DesignTime> - <DependentUpon>Version.tt</DependentUpon> - </Compile> - <Compile Include="JsonKeys.Designer.cs"> - <AutoGen>True</AutoGen> - <DesignTime>True</DesignTime> - <DependentUpon>JsonKeys.resx</DependentUpon> - </Compile> - <Compile Include="Utils\DataTableExtensionMethods.cs" /> - <Compile Include="Utils\DateTimeFallbackDeserializer.cs" /> - <Compile Include="Utils\DictionaryExtensionMethods.cs" /> - <Compile Include="Utils\IterationStatistics.cs" /> - <Compile Include="Utils\RessourceHelper.cs" /> - <Compile Include="Models\Declaration\Segment.cs" /> - <Compile Include="Models\Declaration\Axle.cs" /> - <Compile Include="Models\SimulationComponent\Data\CombustionEngineData.cs" /> - <Compile Include="Models\SimulationComponent\Data\DrivingCycleData.cs" /> - <Compile Include="Models\SimulationComponent\Data\Engine\FuelConsumptionMap.cs" /> - <Compile Include="Models\SimulationComponent\Data\Engine\EngineFullLoadCurve.cs" /> - <Compile Include="Models\SimulationComponent\Data\GearboxData.cs" /> - <Compile Include="Models\SimulationComponent\Data\Gearbox\GearData.cs" /> - <Compile Include="Models\SimulationComponent\Data\Gearbox\TransmissionLossMap.cs" /> - <Compile Include="Models\SimulationComponent\Data\Gearbox\ShiftPolygon.cs" /> - <Compile Include="Models\SimulationComponent\Data\Gearbox\TorqueConverterData.cs" /> - <Compile Include="Models\SimulationComponent\Data\RetarderData.cs" /> - <Compile Include="Models\SimulationComponent\Data\RetarderLossMap.cs" /> - <Compile Include="Models\SimulationComponent\Data\VehicleData.cs" /> - <Compile Include="Models\SimulationComponent\IClutch.cs" /> - <Compile Include="Models\SimulationComponent\IDrivingCycle.cs" /> - <Compile Include="Models\SimulationComponent\IDriver.cs" /> - <Compile Include="Models\SimulationComponent\Impl\Vehicle.cs" /> - <Compile Include="Models\SimulationComponent\IVehicle.cs" /> - <Compile Include="Models\SimulationComponent\Impl\Clutch.cs" /> - <Compile Include="Models\SimulationComponent\Impl\AxleGear.cs" /> - <Compile Include="Models\SimulationComponent\Impl\Retarder.cs" /> - <Compile Include="Models\SimulationComponent\IPowerTrainComponent.cs" /> - <Compile Include="Models\Simulation\Data\VectoRunData.cs" /> - <Compile Include="Models\SimulationComponent\Impl\Driver.cs" /> - <Compile Include="Utils\Formulas.cs" /> - <Compile Include="Utils\Physics.cs" /> - <Compile Include="Utils\SearchAlgorithm.cs" /> - <Compile Include="Models\SimulationComponent\Data\SimulationComponentData.cs" /> - <Compile Include="Models\SimulationComponent\ICombustionEngine.cs" /> - <Compile Include="Models\SimulationComponent\IGearbox.cs" /> - <Compile Include="Models\Connector\Ports\ISimulationPort.cs" /> - <Compile Include="Models\SimulationComponent\Impl\DistanceBasedDrivingCycle.cs" /> - <Compile Include="Models\SimulationComponent\Impl\CombustionEngine.cs" /> - <Compile Include="Models\SimulationComponent\Impl\Gearbox.cs" /> - <Compile Include="Models\SimulationComponent\Impl\Wheels.cs" /> - <Compile Include="Models\SimulationComponent\IWheels.cs" /> - <Compile Include="Models\SimulationComponent\VectoSimulationComponent.cs" /> - <Compile Include="Models\SimulationComponent\Impl\PowertrainDrivingCycle.cs" /> - <Compile Include="Models\Simulation\Data\ModalResult.cs" /> - <Compile Include="Models\Simulation\IVectoRun.cs" /> - <Compile Include="Models\Simulation\Impl\SimulatorFactory.cs" /> - <Compile Include="Models\Simulation\Impl\VectoRun.cs" /> - <Compile Include="Models\Simulation\Impl\JobContainer.cs" /> - <Compile Include="Models\Simulation\Impl\VehicleContainer.cs" /> - <Compile Include="Models\Simulation\DataBus\IDataBus.cs" /> - <Compile Include="Models\Simulation\DataBus\IEngineInfo.cs" /> - <Compile Include="Models\Simulation\DataBus\IGearboxInfo.cs" /> - <Compile Include="Models\Simulation\DataBus\IVehicleInfo.cs" /> - <Compile Include="Models\Simulation\IVehicleContainer.cs" /> - <Compile Include="Properties\AssemblyInfo.cs" /> - <Compile Include="OutputData\FileIO\ShiftPolygonExport.cs" /> - <Compile Include="Utils\SwitchExtension.cs" /> - <Compile Include="Utils\VectoCSVFile.cs" /> - <Compile Include="Utils\DelaunayMap.cs" /> - <Compile Include="Utils\VectoVersionCore.cs"> - <AutoGen>True</AutoGen> - <DesignTime>True</DesignTime> - <DependentUpon>VectoVersionCore.tt</DependentUpon> - </Compile> - <Compile Include="Utils\XmlResourceResolver.cs" /> - <Compile Include="Utils\XMLValidator.cs" /> - <Compile Include="Utils\XPathHelper.cs" /> - </ItemGroup> - <ItemGroup> - <None Include="app.config" /> - <None Include="packages.config" /> - <EmbeddedResource Include="JsonKeys.resx"> - <Generator>ResXFileCodeGenerator</Generator> - <LastGenOutput>JsonKeys.Designer.cs</LastGenOutput> - <SubType>Designer</SubType> - </EmbeddedResource> - <EmbeddedResource Include="Resources\Declaration\Wheels.csv" /> - <EmbeddedResource Include="Resources\Declaration\SegmentTable.csv" /> - <EmbeddedResource Include="Resources\Declaration\MissionCycles\HeavyUrban.vdri" /> - <EmbeddedResource Include="Resources\Declaration\MissionCycles\Suburban.vdri" /> - <EmbeddedResource Include="Resources\Declaration\MissionCycles\Urban.vdri" /> - <EmbeddedResource Include="Resources\Declaration\MissionCycles\Coach.vdri" /> - <EmbeddedResource Include="Resources\Declaration\MissionCycles\Construction.vdri" /> - <EmbeddedResource Include="Resources\Declaration\MissionCycles\Interurban.vdri" /> - <EmbeddedResource Include="Resources\Declaration\MissionCycles\LongHaul.vdri" /> - <EmbeddedResource Include="Resources\Declaration\MissionCycles\MunicipalUtility.vdri" /> - <EmbeddedResource Include="Resources\Declaration\MissionCycles\RegionalDelivery.vdri" /> - <EmbeddedResource Include="Resources\Declaration\MissionCycles\UrbanDelivery.vdri" /> - <EmbeddedResource Include="Resources\Declaration\PT1.csv" /> - <EmbeddedResource Include="Resources\Declaration\VACC\Truck.vacc" /> - <EmbeddedResource Include="Resources\Declaration\VAUX\ES-Tech.csv" /> - <EmbeddedResource Include="Resources\Declaration\VAUX\Fan-Tech.csv" /> - <EmbeddedResource Include="Resources\Declaration\VAUX\HVAC-Table.csv" /> - <EmbeddedResource Include="Resources\Declaration\VAUX\PS-Table.csv" /> - <EmbeddedResource Include="Resources\Declaration\VAUX\SP-Table.csv" /> - <EmbeddedResource Include="Resources\Declaration\VAUX\SP-Tech.csv" /> - <EmbeddedResource Include="Resources\Declaration\VCDV\VCDV_parameters.csv" /> - <EmbeddedResource Include="Resources\Declaration\WHTC-Weighting-Factors.csv" /> - <EmbeddedResource Include="Resources\Declaration\VAUX\ALT-Tech.csv" /> - <EmbeddedResource Include="Resources\Declaration\Report\cyclePageTemplate.pdf" /> - <EmbeddedResource Include="Resources\Declaration\Report\title2CyclesTemplate.pdf" /> - <EmbeddedResource Include="Resources\Declaration\Report\title3CyclesTemplate.pdf" /> - <None Include="Properties\Version.tt"> - <Generator>TextTemplatingFileGenerator</Generator> - <LastGenOutput>Version.cs</LastGenOutput> - </None> - <EmbeddedResource Include="Resources\Declaration\LAC-DF-Vdrop.csv" /> - <EmbeddedResource Include="Resources\Declaration\LAC-DF-Vtarget.csv" /> - <EmbeddedResource Include="Resources\Declaration\Body_Trailers_Weights.csv" /> - <EmbeddedResource Include="Resources\Declaration\Payloads.csv" /> - <EmbeddedResource Include="Resources\Declaration\VAUX\SP-Axles.csv" /> - <EmbeddedResource Include="Resources\Declaration\VAUX\PTO-tech.csv" /> - <EmbeddedResource Include="Resources\Declaration\TorqueConverter.csv" /> - <EmbeddedResource Include="Resources\XSD\ParameterDocumentation.xsd"> - <SubType>Designer</SubType> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </EmbeddedResource> - <EmbeddedResource Include="Resources\XSD\VectoComponent.xsd"> - <SubType>Designer</SubType> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </EmbeddedResource> - <EmbeddedResource Include="Resources\XSD\VectoEngineeringDefinitions.0.6.xsd"> - <SubType>Designer</SubType> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </EmbeddedResource> - <EmbeddedResource Include="Resources\XSD\VectoEngineeringDefinitions.0.7.xsd"> - <SubType>Designer</SubType> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </EmbeddedResource> - <EmbeddedResource Include="Resources\XSD\VectoEngineeringInput.xsd"> - <SubType>Designer</SubType> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </EmbeddedResource> - <EmbeddedResource Include="Resources\XSD\VectoInput.xsd"> - <SubType>Designer</SubType> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </EmbeddedResource> - <EmbeddedResource Include="Resources\XSD\VectoOutputManufacturer.xsd"> - <SubType>Designer</SubType> - </EmbeddedResource> - <EmbeddedResource Include="Resources\XSD\xmldsig-core-schema.xsd"> - <SubType>Designer</SubType> - </EmbeddedResource> - <EmbeddedResource Include="Resources\Declaration\MissionCycles\MunicipalUtility_PTO_generic.vptoc" /> - <EmbeddedResource Include="Resources\Declaration\MissionCycles\MunicipalUtility_PTO_generic.vptol" /> - <EmbeddedResource Include="Resources\Declaration\FuelTypes.csv" /> - <EmbeddedResource Include="Resources\XSD\VectoDeclarationDefinitions.1.0.xsd"> - <SubType>Designer</SubType> - </EmbeddedResource> - <EmbeddedResource Include="Resources\XSD\VectoOutputCustomer.xsd"> - <SubType>Designer</SubType> - </EmbeddedResource> - <EmbeddedResource Include="Resources\XSD\VectoInput.1.0.xsd"> - <SubType>Designer</SubType> - </EmbeddedResource> - <EmbeddedResource Include="Resources\XSD\VectoOutputCustomer.0.4.xsd"> - <SubType>Designer</SubType> - </EmbeddedResource> - <EmbeddedResource Include="Resources\XSD\VectoOutputManufacturer.0.4.xsd"> - <SubType>Designer</SubType> - </EmbeddedResource> - <EmbeddedResource Include="Resources\XSD\VectoEngineeringInput.0.7.xsd"> - <SubType>Designer</SubType> - </EmbeddedResource> - <EmbeddedResource Include="Resources\XSD\VectoComponent.1.0.xsd"> - <SubType>Designer</SubType> - </EmbeddedResource> - <None Include="Utils\VectoVersionCore.tt"> - <Generator>TextTemplatingFileGenerator</Generator> - <LastGenOutput>VectoVersionCore.cs</LastGenOutput> - </None> - <None Include="VersionNumber.t4"> - <Generator>TextTemplatingFileGenerator</Generator> - <LastGenOutput>VersionNumber1.cs</LastGenOutput> - </None> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Resources\Declaration\Report\4x2r.png" /> - <EmbeddedResource Include="Resources\Declaration\Report\4x2rt.png" /> - <EmbeddedResource Include="Resources\Declaration\Report\4x2tt.png" /> - <EmbeddedResource Include="Resources\Declaration\Report\6x2r.png" /> - <EmbeddedResource Include="Resources\Declaration\Report\6x2rt.png" /> - <EmbeddedResource Include="Resources\Declaration\Report\6x2tt.png" /> - <EmbeddedResource Include="Resources\Declaration\Report\Undef.png" /> - </ItemGroup> - <ItemGroup> - <Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\..\VectoCommon\AdvancedAuxiliaryInterfaces\AdvancedAuxiliaryInterfaces.vbproj"> - <Project>{b4b9bd2f-fd8f-4bb8-82fa-e2154d2c7fbd}</Project> - <Name>AdvancedAuxiliaryInterfaces</Name> - </ProjectReference> - <ProjectReference Include="..\..\VECTOAux\VectoAuxiliaries\VectoAuxiliaries.vbproj"> - <Project>{fdeee460-0b8a-4ef6-8d9e-72f203a50f65}</Project> - <Name>VectoAuxiliaries</Name> - </ProjectReference> - <ProjectReference Include="..\..\VectoCommon\VectoCommon\VectoCommon.csproj"> - <Project>{79a066ad-69a9-4223-90f6-6ed5d2d084f4}</Project> - <Name>VectoCommon</Name> - </ProjectReference> - <ProjectReference Include="..\..\VectoCommon\VectoHashing\VectoHashing.csproj"> - <Project>{B673E12F-D323-4C4C-8805-9915B2C72D3D}</Project> - <Name>VectoHashing</Name> - </ProjectReference> - </ItemGroup> - <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> - <!-- To modify your build process, add your task inside one of the targets below and uncomment it. - Other similar extension points exist, see Microsoft.Common.targets. - <Target Name="BeforeBuild"> - </Target> - <Target Name="AfterBuild"> - </Target> - --> - <Import Project="$(SolutionDir)Build\TextPreProcessing.targets" /> -</Project> \ No newline at end of file diff --git a/VectoCore/VectoCore/VersionNumber.t4 b/VectoCore/VectoCore/VersionNumber.t4 index c2a37907d6ca63b1214c55dcda6aa212459e0e25..78d4e8ed1d7eb99bf028d07419c2b15a65db101d 100644 --- a/VectoCore/VectoCore/VersionNumber.t4 +++ b/VectoCore/VectoCore/VersionNumber.t4 @@ -6,6 +6,6 @@ int GetBuildNumber() string GetVectoCoreVersionNumber() { - return "3.2.1." + GetBuildNumber(); + return "3.3.0." + GetBuildNumber(); } #> \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/Integration/ATPowerTrain.cs b/VectoCore/VectoCoreTest/Integration/ATPowerTrain.cs index abfa03730ab76178750e975f0380fa14b93dcc6d..837a568ea814786a6129852569290799a6740918 100644 --- a/VectoCore/VectoCoreTest/Integration/ATPowerTrain.cs +++ b/VectoCore/VectoCoreTest/Integration/ATPowerTrain.cs @@ -38,6 +38,7 @@ using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.InputData.Reader; using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.InputData.Reader.Impl; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.Impl; @@ -104,7 +105,8 @@ namespace TUGraz.VectoCore.Tests.Integration JobName = modFileName, Cycle = cycleData, Retarder = new RetarderData() { Type = RetarderType.None }, - Aux = new List<VectoRunData.AuxData>() + Aux = new List<VectoRunData.AuxData>(), + SimulationType = SimulationType.DistanceCycle }; var container = new VehicleContainer(ExecutionMode.Engineering, modData) { RunData = runData, @@ -142,7 +144,7 @@ namespace TUGraz.VectoCore.Tests.Integration Gears = ratios.Select((ratio, i) => Tuple.Create((uint)i, new GearData { - //MaxTorque = 2300.SI<NewtonMeter>(), + //MaxTorque = 2300.SI<NewtonMeter>(), LossMap = ratio.IsEqual(1) ? TransmissionLossMapReader.Create(0.96, ratio, string.Format("Gear {0}", i)) : TransmissionLossMapReader.Create(0.98, ratio, string.Format("Gear {0}", i)), @@ -232,7 +234,7 @@ namespace TUGraz.VectoCore.Tests.Integration LookAheadCoasting = new DriverData.LACData { Enabled = true, MinSpeed = 50.KMPHtoMeterPerSecond(), - //Deceleration = -0.5.SI<MeterPerSquareSecond>() + //Deceleration = -0.5.SI<MeterPerSquareSecond>() LookAheadDistanceFactor = DeclarationData.Driver.LookAhead.LookAheadDistanceFactor, LookAheadDecisionFactor = new LACDecisionFactor() }, diff --git a/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs b/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs index f2f64156c4c3ac2c075b7b762af9d27189707a06..3de184dd2d5530425eb1bc90950b03aaa4692de3 100644 --- a/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs +++ b/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs @@ -36,6 +36,7 @@ using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.Reader; using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.InputData.Reader.Impl; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.Impl; @@ -79,9 +80,7 @@ namespace TUGraz.VectoCore.Tests.Integration WriteAdvancedAux = true, WriteModalResults = true }; - var container = new VehicleContainer(ExecutionMode.Engineering, modData) { - RunData = new VectoRunData { JobName = modFileName, Cycle = cycleData } - }; + var container = new VehicleContainer(ExecutionMode.Engineering, modData); var gearboxData = CreateGearboxData(); var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(highEnginePower ? EngineFileHigh : EngineFile, @@ -100,9 +99,10 @@ namespace TUGraz.VectoCore.Tests.Integration VehicleData = vehicleData, AirdragData = airdragData, GearboxData = gearboxData, - EngineData = engineData + EngineData = engineData, + SimulationType = SimulationType.DistanceCycle }; - + container.RunData = runData; cycle.AddComponent(new Driver(container, driverData, new DefaultDriverStrategy())) .AddComponent(new Vehicle(container, vehicleData, airdragData)) .AddComponent(new Wheels(container, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia)) diff --git a/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs b/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs index 01d338e7619542e875a9729859e7ace7f0a4da8c..6daeda68832d45d7e6b071f27941cc7e06f3fe96 100644 --- a/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs +++ b/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs @@ -38,6 +38,7 @@ using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.InputData.Reader; using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.InputData.Reader.Impl; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.Impl; @@ -76,9 +77,7 @@ namespace TUGraz.VectoCore.Tests.Integration { var fileWriter = new FileOutputWriter(modFileName); var modData = new ModalDataContainer(modFileName, FuelType.DieselCI, fileWriter) { WriteModalResults = true }; - var container = new VehicleContainer(ExecutionMode.Engineering, modData) { - RunData = new VectoRunData { JobName = modFileName, Cycle = cycleData } - }; + var container = new VehicleContainer(ExecutionMode.Engineering, modData); var gearboxData = CreateGearboxData(); var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(engineHighPower ? EngineFileHigh : EngineFile, @@ -102,9 +101,11 @@ namespace TUGraz.VectoCore.Tests.Integration AxleGearData = axleGearData, GearboxData = gearboxData, EngineData = engineData, - AirdragData = airDragData + AirdragData = airDragData, + SimulationType = SimulationType.DistanceCycle }; + container.RunData = runData; var tmp = cycle.AddComponent(new Driver(container, driverData, new DefaultDriverStrategy())) .AddComponent(new Vehicle(container, vehicleData, airDragData)) .AddComponent(new Wheels(container, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia)) diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/EngineInputDataTests.cs b/VectoCore/VectoCoreTest/Integration/Declaration/EngineInputDataTests.cs index f20843f544a5f6d09188c9cf5810b8a0ae244787..033f3e329aec7e9ff92016d7dcf41d2e2ed3f795 100644 --- a/VectoCore/VectoCoreTest/Integration/Declaration/EngineInputDataTests.cs +++ b/VectoCore/VectoCoreTest/Integration/Declaration/EngineInputDataTests.cs @@ -1,4 +1,35 @@ -using System.Data; +/* +* This file is part of VECTO. +* +* Copyright © 2012-2017 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System.Data; using System.IO; using System.Linq; using System.Xml; diff --git a/VectoCore/VectoCoreTest/Integration/FullCycleDeclarationTest.cs b/VectoCore/VectoCoreTest/Integration/FullCycleDeclarationTest.cs index 601b05a822bb74960cec0b5cf8c3bc541f161eaa..56237fe70b6396e19290eeaa1be20b0ce4a14681 100644 --- a/VectoCore/VectoCoreTest/Integration/FullCycleDeclarationTest.cs +++ b/VectoCore/VectoCoreTest/Integration/FullCycleDeclarationTest.cs @@ -60,6 +60,14 @@ namespace TUGraz.VectoCore.Tests.Integration public const string Class9RigidTruckPTOJob = @"TestData\Integration\DeclarationMode\Class9_RigidTruck_6x2\Class9_RigidTruck_DECL.vecto"; + public const string Class5TractorDeclPrimaryRetarder = + @"TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Class5_Tractor_DECL_primRet.vecto"; + + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } [TestCase] public void Truck40t_LongHaulCycle_RefLoad() @@ -358,5 +366,26 @@ namespace TUGraz.VectoCore.Tests.Integration Assert.IsTrue(jobContainer.Runs.All(r => r.Success), string.Concat(jobContainer.Runs.Select(r => r.ExecException))); } + + [TestCase] + public void DeclarationClass5PrimaryRetarder() + { + var inputData = JSONInputDataFactory.ReadJsonJob(Class5TractorDeclPrimaryRetarder); + var fileWriter = new FileOutputWriter(Class5TractorDeclPrimaryRetarder); + var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter) { + WriteModalResults = true + }; + var sumData = new SummaryDataContainer(fileWriter); + var jobContainer = new JobContainer(sumData); + jobContainer.AddRuns(factory); + + //var runs = jobContainer.Runs; + //runs[0].Run.Run(); + + jobContainer.Execute(); + jobContainer.WaitFinished(); + + Assert.IsTrue(jobContainer.Runs.All(r => r.Success), string.Concat(jobContainer.Runs.Select(r => r.ExecException))); + } } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs b/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs index 1826542ecd7ccbdcd62fd30fdb5738dc30628041..dee862d16dfa04eb84086abc67dbe551d1f2ee95 100644 --- a/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs +++ b/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs @@ -52,6 +52,7 @@ using TUGraz.VectoCore.Tests.Utils; using TUGraz.VectoCore.Utils; using Wheels = TUGraz.VectoCore.Models.SimulationComponent.Impl.Wheels; using NUnit.Framework; +using TUGraz.VectoCore.InputData.Reader.Impl; namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns { @@ -80,6 +81,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns var fileWriter = new FileOutputWriter("Coach_FullPowertrain_SimpleGearbox"); var modData = new ModalDataContainer("Coach_FullPowertrain_SimpleGearbox", FuelType.DieselCI, fileWriter); var container = new VehicleContainer(ExecutionMode.Engineering, modData); + container.RunData = new VectoRunData() { SimulationType = SimulationType.DistanceCycle }; var gearboxData = CreateSimpleGearboxData(); var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(EngineFile, gearboxData.Gears.Count); @@ -145,6 +147,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns var fileWriter = new FileOutputWriter("Coach_FullPowertrain"); var modData = new ModalDataContainer("Coach_FullPowertrain", FuelType.DieselCI, fileWriter); var container = new VehicleContainer(ExecutionMode.Engineering, modData); + container.RunData = new VectoRunData() {SimulationType = SimulationType.DistanceCycle }; var gearboxData = CreateGearboxData(); var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(EngineFile, gearboxData.Gears.Count); diff --git a/VectoCore/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs b/VectoCore/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs index 69924926e5201427486d41817bc880e6df253bff..e467f1f3b9b33c7349679e7a0fab1c4b5a2f8d61 100644 --- a/VectoCore/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs +++ b/VectoCore/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs @@ -49,6 +49,7 @@ using TUGraz.VectoCore.Utils; using Wheels = TUGraz.VectoCore.Models.SimulationComponent.Impl.Wheels; using NUnit.Framework; using System.IO; +using TUGraz.VectoCore.InputData.Reader.Impl; namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns { @@ -64,13 +65,13 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns public const string AccelerationFile2 = @"TestData\Components\Truck.vacc"; public const double Tolerance = 0.001; - [OneTimeSetUp] - public void RunBeforeAnyTests() - { - Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); - } + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } - [TestCase] + [TestCase] public void TestWheelsAndEngineInitialize() { var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(EngineFile, 1); @@ -202,6 +203,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns var fileWriter = new FileOutputWriter("Coach_MinimalPowertrainOverload"); var modData = new ModalDataContainer("Coach_MinimalPowertrainOverload", FuelType.DieselCI, fileWriter); var container = new VehicleContainer(ExecutionMode.Engineering, modData); + container.RunData = new VectoRunData() { SimulationType = SimulationType.DistanceCycle }; var cycle = new DistanceBasedDrivingCycle(container, cycleData); cycle.AddComponent(new Driver(container, driverData, new DefaultDriverStrategy())) diff --git a/VectoCore/VectoCoreTest/Integration/TorqueLimitsTest.cs b/VectoCore/VectoCoreTest/Integration/TorqueLimitsTest.cs index ce2eeb4836f9e909f4cd9a645ac2341381773596..f2e58d2bea8665ab0d33e9efba679f86ec18b604 100644 --- a/VectoCore/VectoCoreTest/Integration/TorqueLimitsTest.cs +++ b/VectoCore/VectoCoreTest/Integration/TorqueLimitsTest.cs @@ -29,6 +29,7 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ +using System.IO; using System.Linq; using NUnit.Framework; using TUGraz.VectoCommon.Models; @@ -62,6 +63,13 @@ namespace TUGraz.VectoCore.Tests.Integration const string EngineSpeedLimitJobDecl = @"TestData\Integration\DeclarationMode\Class2_RigidTruck_4x2_engineSpeedlimit\Class2_RigidTruck_DECL.vecto"; + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } + + [TestCase()] public void TestGearboxTorqueLimitsAbove90FLD() { diff --git a/VectoCore/VectoCoreTest/Integration/Truck40tPowerTrain.cs b/VectoCore/VectoCoreTest/Integration/Truck40tPowerTrain.cs index 900a1a51d80eeb5cdc8a4f29509853b6f85fd342..f5b3c4a4dfd9efc0ffad4488cd95ce9105360eb3 100644 --- a/VectoCore/VectoCoreTest/Integration/Truck40tPowerTrain.cs +++ b/VectoCore/VectoCoreTest/Integration/Truck40tPowerTrain.cs @@ -37,6 +37,7 @@ using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.Reader; using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.InputData.Reader.Impl; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.Impl; @@ -88,9 +89,7 @@ namespace TUGraz.VectoCore.Tests.Integration var modData = new ModalDataContainer(Path.GetFileName(modFileName), FuelType.DieselCI, fileWriter) { WriteModalResults = true }; - var container = new VehicleContainer(ExecutionMode.Engineering, modData) { - RunData = new VectoRunData { JobName = modFileName, Cycle = cycleData } - }; + var container = new VehicleContainer(ExecutionMode.Engineering, modData); var gearboxData = CreateGearboxData(); var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(EngineFile, gearboxData.Gears.Count); @@ -109,8 +108,11 @@ namespace TUGraz.VectoCore.Tests.Integration VehicleData = vehicleData, AirdragData = airdragData, AxleGearData = axleGearData, - GearboxData = gearboxData + GearboxData = gearboxData, + SimulationType = SimulationType.DistanceCycle, + Cycle = cycleData }; + container.RunData = runData; IShiftStrategy gbxStrategy; switch (gbxType) { diff --git a/VectoCore/VectoCoreTest/Integration/VTP/VTPTest.cs b/VectoCore/VectoCoreTest/Integration/VTP/VTPTest.cs index 7583608b9a2dd2e1e2864e72d93ae25dbe4f6aa7..5bb9aaf70f3b37f0f83fc579e02b2950322d6f73 100644 --- a/VectoCore/VectoCoreTest/Integration/VTP/VTPTest.cs +++ b/VectoCore/VectoCoreTest/Integration/VTP/VTPTest.cs @@ -65,6 +65,7 @@ namespace TUGraz.VectoCore.Tests.Integration.VTP jobContainer.AddRuns(runsFactory); + Assert.AreEqual(1, jobContainer.Runs.Count); //var i = 0; //jobContainer.Runs[i].Run.Run(); //Assert.IsTrue(jobContainer.Runs[i].Run.FinishedWithoutErrors); @@ -76,5 +77,32 @@ namespace TUGraz.VectoCore.Tests.Integration.VTP } + [TestCase(@"TestData\Integration\VTPMode\GenericVehicle\class_5_generic vehicle_DECL.vecto")] + public void RunVTP_Declaration(string jobFile) + { + var fileWriter = new FileOutputWriter(jobFile); + var sumWriter = new SummaryDataContainer(fileWriter); + var jobContainer = new JobContainer(sumWriter); + var dataProvider = JSONInputDataFactory.ReadJsonJob(jobFile); + var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter) { + ModalResults1Hz = false, + WriteModalResults = true, + ActualModalData = false, + Validate = false, + }; + + jobContainer.AddRuns(runsFactory); + + Assert.AreEqual(2, jobContainer.Runs.Count); + //var i = 0; + //jobContainer.Runs[i].Run.Run(); + //Assert.IsTrue(jobContainer.Runs[i].Run.FinishedWithoutErrors); + + jobContainer.Execute(); + jobContainer.WaitFinished(); + + Assert.AreEqual(true, jobContainer.AllCompleted); + } + } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs index 849d209af6c72225fc296cd5fadf273969c62944..15e331f5e13d36770c296bb2f14fe5131c1c899d 100644 --- a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs +++ b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs @@ -61,6 +61,13 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration MissionType.Construction, }; + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } + + [TestCase("285/60 R22.5", 10.6, 0.914, 3.03, 0.440766), TestCase("285/70 R19.5", 7.9, 0.895, 3.05, 0.434453), TestCase("395/85 R20", 27.9, 1.18, 3.05, 0.572798)] diff --git a/VectoCore/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs b/VectoCore/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs index 49d754b93ff76d252f1e58cde77bf9a02726a209..b946802f98896242b493f575aa144c442f64c5fd 100644 --- a/VectoCore/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs +++ b/VectoCore/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs @@ -30,9 +30,10 @@ */ using NUnit.Framework; -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.IO; using System.Linq; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.Models; @@ -60,9 +61,16 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation public const string GearboxIndirectLoss = @"TestData\Components\Indirect Gear.vtlm"; public const string GearboxDirectLoss = @"TestData\Components\Direct Gear.vtlm"; public const string GearboxLimited = @"TestData\Components\limited.vtlm"; - public const string GearboxShiftPolygonFile = @"TestData\Components\ShiftPolygons.vgbs"; - //public const string GearboxFullLoadCurveFile = @"TestData\Components\Gearbox.vfld"; - + public const string GearboxShiftPolygonFile = @"TestData\Components\ShiftPolygons.vgbs"; + //public const string GearboxFullLoadCurveFile = @"TestData\Components\Gearbox.vfld"; + + + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } + /// <summary> /// VECTO-173 /// </summary> diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/DistanceBasedDrivingCycleTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/DistanceBasedDrivingCycleTest.cs index 4da358922f1913f5210f2b1b2cf5a4eca6e60ff6..faa6945e94c1b60e548423b36421a014b7666ae3 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponent/DistanceBasedDrivingCycleTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/DistanceBasedDrivingCycleTest.cs @@ -29,16 +29,21 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ +using System.Globalization; +using System.IO; using NUnit.Framework; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.InputData.FileIO.JSON; using TUGraz.VectoCore.InputData.Reader; using TUGraz.VectoCore.Models.Connector.Ports.Impl; using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Impl; +using TUGraz.VectoCore.OutputData; +using TUGraz.VectoCore.OutputData.FileIO; using TUGraz.VectoCore.Tests.Integration; using TUGraz.VectoCore.Tests.Utils; @@ -51,6 +56,11 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent public const double Tolerance = 0.0001; + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } [TestCase] public void TestLimitRequst() @@ -219,5 +229,46 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent container.CommitSimulationStep(absTime, response.SimulationInterval); absTime += response.SimulationInterval; } + + [TestCase] + public void CycleStartsWithNoStopTime() + { + var data = new string[] { + // <s>,<v>,<grad>,<stop> + " 0, 0, 0, 0", + " 10, 50, 0, 0", + "100, 50, 0, 0" + }; + var cycleData = SimpleDrivingCycles.CreateCycleData(data); + + var modFileName = string.Format(CultureInfo.InvariantCulture, "CyccleStartWithoutStop.vmod"); + var run = Truck40tPowerTrain.CreateEngineeringRun(cycleData, modFileName); + + + run.Run(); + + Assert.IsTrue(run.FinishedWithoutErrors, "Cycle start witout stoptime FAILED"); + } + + [TestCase] + public void CycleWithZeroStopTime() + { + var data = new string[] { + // <s>,<v>,<grad>,<stop> + " 0, 0, 0, 2", + "100, 50, 0, 0", + "120, 0, 0, 0", + "200, 50, 0, 0" + }; + var cycleData = SimpleDrivingCycles.CreateCycleData(data); + + var modFileName = string.Format(CultureInfo.InvariantCulture, "CyccleWithZeroStoptime.vmod"); + var run = Truck40tPowerTrain.CreateEngineeringRun(cycleData, modFileName); + + + run.Run(); + + Assert.IsTrue(run.FinishedWithoutErrors, "Cycle start witout stoptime FAILED"); + } } } diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/VTPCycleValidationTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/VTPCycleValidationTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..3d0d1fd2679830b04e957893eb45905b4ddd1b37 --- /dev/null +++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/VTPCycleValidationTest.cs @@ -0,0 +1,564 @@ +/* +* This file is part of VECTO. +* +* Copyright © 2012-2017 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System.Collections.Generic; +using System.Linq; +using NLog; +using NLog.Config; +using NLog.Targets; +using NUnit.Framework; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.InputData.Reader; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Impl; +using TUGraz.VectoCore.Tests.Integration; +using TUGraz.VectoCore.Tests.Models.SimulationComponentData; +using TUGraz.VectoCore.Tests.Utils; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.Tests.Models.SimulationComponent +{ + [TestFixture] + public class VTPCycleValidationTest + { + public static List<string> LogList = new List<string>(); + + const string Header = "<t> [s],<v> [km/h],<n_eng> [rpm],<n_fan> [rpm],<tq_left> [Nm],<tq_right> [Nm],<n_wh_left> [rpm],<n_wh_right> [rpm],<fc> [g/h],<gear>"; + + + [TestCase()] + public void TestWheelSpeedRatioExceeds_Left() + { + SetupLogging(); + + var wheelSpeed = 100; + + var cycleEntries = string.Format( + @" 0 , 0, 600, 400, 200, 200, {0}, {0} , 100, 3 + 0.5 , 0, 600, 400, 200, 200, {0}, {0} , 100, 3 + 1 , 0, 600, 400, 200, 200, {0}, {1} , 100, 3 + 1.5 , 0, 600, 400, 200, 200, {1}, {1} , 100, 3 + ", wheelSpeed, wheelSpeed * DeclarationData.VTPMode.WheelSpeedDifferenceFactor * 1.1); + + var container = new VehicleContainer(ExecutionMode.Declaration) { + RunData = new VectoRunData() { + Aux = new List<VectoRunData.AuxData>() + } + }; + var cycle = InputDataHelper.InputDataAsStream(Header, cycleEntries.Split('\n')); + var cycleData = DrivingCycleDataReader.ReadFromDataTable(VectoCSVFile.ReadStream(cycle), "VTP Cycle", false); + var vtpCycle = new VTPCycle(container, cycleData); + + vtpCycle.VerifyInputData(); + + Assert.AreEqual(1, LogList.Count); + Assert.IsTrue(LogList[0].Contains("Wheel-speed difference rel.")); + } + + [TestCase()] + public void TestWheelSpeedRatioExceeds_Right() + { + SetupLogging(); + + var wheelSpeed = 100; + + var cycleEntries = string.Format( + @" 0 , 0, 600, 400, 200, 200, {0}, {0} , 100, 3 + 0.5 , 0, 600, 400, 200, 200, {0}, {0} , 100, 3 + 1 , 0, 600, 400, 200, 200, {0}, {1} , 100, 3 + 1.5 , 0, 600, 400, 200, 200, {1}, {1} , 100, 3 + ", wheelSpeed, wheelSpeed * DeclarationData.VTPMode.WheelSpeedDifferenceFactor * 1.1); + + var container = new VehicleContainer(ExecutionMode.Declaration) { + RunData = new VectoRunData() { + Aux = new List<VectoRunData.AuxData>() + } + }; + var cycle = InputDataHelper.InputDataAsStream(Header, cycleEntries.Split('\n')); + var cycleData = DrivingCycleDataReader.ReadFromDataTable(VectoCSVFile.ReadStream(cycle), "VTP Cycle", false); + var vtpCycle = new VTPCycle(container, cycleData); + + vtpCycle.VerifyInputData(); + + Assert.AreEqual(1, LogList.Count); + Assert.IsTrue(LogList[0].Contains("Wheel-speed difference rel.")); + } + + [TestCase()] + public void TestWheelSpeedDifferenceStandstillExceeds_Left() + { + SetupLogging(); + + var wheelSpeed = 0.95 * DeclarationData.VTPMode.WheelSpeedZeroTolerance.AsRPM; + + var cycleEntries = string.Format( + @" 0 , 0, 600, 400, 200, 200, {0}, {0} , 100, 3 + 0.5 , 0, 600, 400, 200, 200, {0}, {0} , 100, 3 + 1 , 0, 600, 400, 200, 200, {1}, {0} , 100, 3 + 1.5 , 0, 600, 400, 200, 200, {1}, {1} , 100, 3 + ", wheelSpeed, wheelSpeed + DeclarationData.VTPMode.MaxWheelSpeedDifferenceStandstill.AsRPM * 1.1); + + var container = new VehicleContainer(ExecutionMode.Declaration) { + RunData = new VectoRunData() { + Aux = new List<VectoRunData.AuxData>() + } + }; + var cycle = InputDataHelper.InputDataAsStream(Header, cycleEntries.Split('\n')); + var cycleData = DrivingCycleDataReader.ReadFromDataTable(VectoCSVFile.ReadStream(cycle), "VTP Cycle", false); + var vtpCycle = new VTPCycle(container, cycleData); + vtpCycle.VerifyInputData(); + + Assert.AreEqual(1, LogList.Count); + Assert.IsTrue(LogList[0].Contains("Wheel-speed difference abs.")); + } + + [TestCase()] + public void TestWheelSpeedDifferenceStandstillExceeds_Right() + { + SetupLogging(); + + var wheelSpeed = 0.95*DeclarationData.VTPMode.WheelSpeedZeroTolerance.AsRPM; + + var cycleEntries = string.Format( + @" 0 , 0, 600, 400, 200, 200, {0}, {0} , 100, 3 + 0.5 , 0, 600, 400, 200, 200, {0}, {0} , 100, 3 + 1 , 0, 600, 400, 200, 200, {0}, {1} , 100, 3 + 1.5 , 0, 600, 400, 200, 200, {1}, {1} , 100, 3 + ", wheelSpeed, wheelSpeed + DeclarationData.VTPMode.MaxWheelSpeedDifferenceStandstill.AsRPM * 1.1); + + var container = new VehicleContainer(ExecutionMode.Declaration) { + RunData = new VectoRunData() { + Aux = new List<VectoRunData.AuxData>() + } + }; + var cycle = InputDataHelper.InputDataAsStream(Header, cycleEntries.Split('\n')); + var cycleData = DrivingCycleDataReader.ReadFromDataTable(VectoCSVFile.ReadStream(cycle), "VTP Cycle", false); + var vtpCycle = new VTPCycle(container, cycleData); + + vtpCycle.VerifyInputData(); + + Assert.AreEqual(1, LogList.Count); + Assert.IsTrue(LogList[0].Contains("Wheel-speed difference abs.")); + } + + + + [TestCase()] + public void TestWheelTorqueRatioExceeds_Left() + { + SetupLogging(); + + var torque = 300; + + var cycleEntries = string.Format( + @" 0 , 0, 600, 400, {0}, {0} , 50 , 50 , 100, 3 + 0.5 , 0, 600, 400, {0}, {0} , 50 , 50 , 100, 3 + 1 , 0, 600, 400, {0}, {1} , 50 , 50 , 100, 3 + 1.5 , 0, 600, 400, {1}, {1} , 50 , 50 , 100, 3 + ", torque, torque * DeclarationData.VTPMode.WheelTorqueDifferenceFactor * 1.1); + + var container = new VehicleContainer(ExecutionMode.Declaration) { + RunData = new VectoRunData() { + Aux = new List<VectoRunData.AuxData>() + } + }; + var cycle = InputDataHelper.InputDataAsStream(Header, cycleEntries.Split('\n')); + var cycleData = DrivingCycleDataReader.ReadFromDataTable(VectoCSVFile.ReadStream(cycle), "VTP Cycle", false); + var vtpCycle = new VTPCycle(container, cycleData); + + vtpCycle.VerifyInputData(); + + Assert.AreEqual(1, LogList.Count); + Assert.IsTrue(LogList[0].Contains("Torque difference")); + } + + + [TestCase()] + public void TestWheelTorqueRatioExceeds_Right() + { + SetupLogging(); + + var torque = 300; + + var cycleEntries = string.Format( + @" 0 , 0, 600, 400, {0}, {0} , 50 , 50 , 100, 3 + 0.5 , 0, 600, 400, {0}, {0} , 50 , 50 , 100, 3 + 1 , 0, 600, 400, {1}, {0} , 50 , 50 , 100, 3 + 1.5 , 0, 600, 400, {1}, {1} , 50 , 50 , 100, 3 + ", torque, torque * DeclarationData.VTPMode.WheelTorqueDifferenceFactor * 1.1); + + var container = new VehicleContainer(ExecutionMode.Declaration) { + RunData = new VectoRunData() { + Aux = new List<VectoRunData.AuxData>() + } + }; + var cycle = InputDataHelper.InputDataAsStream(Header, cycleEntries.Split('\n')); + var cycleData = DrivingCycleDataReader.ReadFromDataTable(VectoCSVFile.ReadStream(cycle), "VTP Cycle", false); + var vtpCycle = new VTPCycle(container, cycleData); + + vtpCycle.VerifyInputData(); + + Assert.AreEqual(1, LogList.Count); + Assert.IsTrue(LogList[0].Contains("Torque difference")); + } + + [TestCase()] + public void TestWheelTorqueDiffExceeds_Left() + { + SetupLogging(); + + var torque = 30; //0.95*DeclarationData.VTPMode.WheelTorqueZeroTolerance.Value(); + + var cycleEntries = string.Format( + @" 0 , 0, 600, 400, {0}, {0} , 50 , 50 , 100, 3 + 0.5 , 0, 600, 400, {0}, {0} , 50 , 50 , 100, 3 + 1 , 0, 600, 400, {0}, {1} , 50 , 50 , 100, 3 + 1.5 , 0, 600, 400, {1}, {1} , 50 , 50 , 100, 3 + ", torque, torque + DeclarationData.VTPMode.MaxWheelTorqueDifference.Value() * 1.1); + + var container = new VehicleContainer(ExecutionMode.Declaration) { + RunData = new VectoRunData() { + Aux = new List<VectoRunData.AuxData>() + } + }; + var cycle = InputDataHelper.InputDataAsStream(Header, cycleEntries.Split('\n')); + var cycleData = DrivingCycleDataReader.ReadFromDataTable(VectoCSVFile.ReadStream(cycle), "VTP Cycle", false); + var vtpCycle = new VTPCycle(container, cycleData); + + vtpCycle.VerifyInputData(); + + Assert.AreEqual(1, LogList.Count); + Assert.IsTrue(LogList[0].Contains("Torque difference ")); + } + + [TestCase()] + public void TestWheelTorqueDiffExceeds_Right() + { + SetupLogging(); + + var torque = 30; //0.95 * DeclarationData.VTPMode.WheelTorqueZeroTolerance.Value(); + + var cycleEntries = string.Format( + @" 0 , 0, 600, 400, {0}, {0} , 50 , 50 , 100, 3 + 0.5 , 0, 600, 400, {0}, {0} , 50 , 50 , 100, 3 + 1 , 0, 600, 400, {1}, {0} , 50 , 50 , 100, 3 + 1.5 , 0, 600, 400, {1}, {1} , 50 , 50 , 100, 3 + ", torque, torque + DeclarationData.VTPMode.MaxWheelTorqueDifference.Value() * 1.1); + + var container = new VehicleContainer(ExecutionMode.Declaration) { + RunData = new VectoRunData() { + Aux = new List<VectoRunData.AuxData>() + } + }; + var cycle = InputDataHelper.InputDataAsStream(Header, cycleEntries.Split('\n')); + var cycleData = DrivingCycleDataReader.ReadFromDataTable(VectoCSVFile.ReadStream(cycle), "VTP Cycle", false); + var vtpCycle = new VTPCycle(container, cycleData); + + vtpCycle.VerifyInputData(); + + Assert.AreEqual(1, LogList.Count); + Assert.IsTrue(LogList[0].Contains("Torque difference")); + } + + [TestCase()] + public void TestFanSpeedTooLow() + { + SetupLogging(); + + var fanSpeed = 1.05 * DeclarationData.VTPMode.MinFanSpeed.AsRPM; + + var cycleEntries = string.Format( + @" 0 , 0, 600, {0}, 300 , 290 , 50 , 50 , 100, 3 + 0.5 , 0, 600, {0}, 300 , 290 , 50 , 50 , 100, 3 + 1 , 0, 600, {1}, 300 , 290 , 50 , 50 , 100, 3 + 1.5 , 0, 600, {0}, 300 , 290 , 50 , 50 , 100, 3 + ", fanSpeed, fanSpeed * 0.9); + + var container = new VehicleContainer(ExecutionMode.Declaration) { + RunData = new VectoRunData() { + Aux = new List<VectoRunData.AuxData>() { + new VectoRunData.AuxData() { + ID = Constants.Auxiliaries.IDs.Fan, + Technology = new List<string>() { "Crankshaft mounted - On/off clutch" } + } + } + } + }; + var cycle = InputDataHelper.InputDataAsStream(Header, cycleEntries.Split('\n')); + var cycleData = DrivingCycleDataReader.ReadFromDataTable(VectoCSVFile.ReadStream(cycle), "VTP Cycle", false); + var vtpCycle = new VTPCycle(container, cycleData); + vtpCycle.VerifyInputData(); + + Assert.AreEqual(1, LogList.Count); + Assert.IsTrue(LogList[0].Contains("Fan speed (non-electric) exceeds range")); + } + + [TestCase()] + public void TestFanSpeedTooHigh() + { + SetupLogging(); + + var fanSpeed = 0.95 * DeclarationData.VTPMode.MaxFanSpeed.AsRPM; + + var cycleEntries = string.Format( + @" 0 , 0, 600, {0}, 300 , 290 , 50 , 50 , 100, 3 + 0.5 , 0, 600, {0}, 300 , 290 , 50 , 50 , 100, 3 + 1 , 0, 600, {1}, 300 , 290 , 50 , 50 , 100, 3 + 1.5 , 0, 600, {0}, 300 , 290 , 50 , 50 , 100, 3 + ", fanSpeed, 1.1 * fanSpeed ); + + var container = new VehicleContainer(ExecutionMode.Declaration) { + RunData = new VectoRunData() { + Aux = new List<VectoRunData.AuxData>() { + new VectoRunData.AuxData() { + ID = Constants.Auxiliaries.IDs.Fan, + Technology = new List<string>() { "Crankshaft mounted - On/off clutch" } + } + } + } + }; + var cycle = InputDataHelper.InputDataAsStream(Header, cycleEntries.Split('\n')); + var cycleData = DrivingCycleDataReader.ReadFromDataTable(VectoCSVFile.ReadStream(cycle), "VTP Cycle", false); + var vtpCycle = new VTPCycle(container, cycleData); + vtpCycle.VerifyInputData(); + + Assert.AreEqual(1, LogList.Count); + Assert.IsTrue(LogList[0].Contains("Fan speed (non-electric) exceeds range")); + } + + + [TestCase()] + public void TestFanSpeedElectricLow() + { + SetupLogging(); + + var fanSpeed = 1.05 * DeclarationData.VTPMode.MinFanSpeed.AsRPM; + + var cycleEntries = string.Format( + @" 0 , 0, 600, {0}, 300 , 290 , 50 , 50 , 100, 3 + 0.5 , 0, 600, {0}, 300 , 290 , 50 , 50 , 100, 3 + 1 , 0, 600, {1}, 300 , 290 , 50 , 50 , 100, 3 + 1.5 , 0, 600, {0}, 300 , 290 , 50 , 50 , 100, 3 + ", fanSpeed, fanSpeed * 0.9); + + var container = new VehicleContainer(ExecutionMode.Declaration) { + RunData = new VectoRunData() { + Aux = new List<VectoRunData.AuxData>() { + new VectoRunData.AuxData() { + ID = Constants.Auxiliaries.IDs.Fan, + Technology = new List<string>() { "Electrically driven - Electronically controlled" } + } + } + } + }; + var cycle = InputDataHelper.InputDataAsStream(Header, cycleEntries.Split('\n')); + var cycleData = DrivingCycleDataReader.ReadFromDataTable(VectoCSVFile.ReadStream(cycle), "VTP Cycle", false); + var vtpCycle = new VTPCycle(container, cycleData); + vtpCycle.VerifyInputData(); + + Assert.AreEqual(0, LogList.Count); + } + + [TestCase()] + public void TestFanSpeedElectricHigh() + { + SetupLogging(); + + var fanSpeed = 0.95 * DeclarationData.VTPMode.MaxFanSpeed.AsRPM; + + var cycleEntries = string.Format( + @" 0 , 0, 600, {0}, 300 , 290 , 50 , 50 , 100, 3 + 0.5 , 0, 600, {0}, 300 , 290 , 50 , 50 , 100, 3 + 1 , 0, 600, {1}, 300 , 290 , 50 , 50 , 100, 3 + 1.5 , 0, 600, {0}, 300 , 290 , 50 , 50 , 100, 3 + ", fanSpeed, 1.1 * fanSpeed); + + var container = new VehicleContainer(ExecutionMode.Declaration) { + RunData = new VectoRunData() { + Aux = new List<VectoRunData.AuxData>() { + new VectoRunData.AuxData() { + ID = Constants.Auxiliaries.IDs.Fan, + Technology = new List<string>() { "Electrically driven - Electronically controlled" } + } + } + } + }; + var cycle = InputDataHelper.InputDataAsStream(Header, cycleEntries.Split('\n')); + var cycleData = DrivingCycleDataReader.ReadFromDataTable(VectoCSVFile.ReadStream(cycle), "VTP Cycle", false); + var vtpCycle = new VTPCycle(container, cycleData); + vtpCycle.VerifyInputData(); + + Assert.AreEqual(0, LogList.Count); + + } + + [TestCase()] + public void TestFuelConsumptionTooLow() + { + SetupLogging(); + + // Approach: calculate min. FC for a certain FC in g/kWh (cycle demands ~10kW constant, i.e., 500NM @ 100rpm at both wheels) + // construct cycle with slightly decreasing FC so that FC falls below threshold + + var fcLimit = (DeclarationData.VTPMode.LowerFCThreshold * (2 * 500.SI<NewtonMeter>() * 100.RPMtoRad())).Cast<KilogramPerSecond>(); + + var cycleEntries = ""; + for (var i = 0; i < 2000; i++) + cycleEntries += string.Format(" {0} , 0, 600, 400, 500 , 500 , 100 , 100 , {1}, 3 \n", i / 2.0, (fcLimit * 1.01 * (1 - i/100000.0)).ConvertToGrammPerHour().Value); + + var container = new VehicleContainer(ExecutionMode.Declaration) { + RunData = new VectoRunData() { + Aux = new List<VectoRunData.AuxData>() + } + }; + var cycle = InputDataHelper.InputDataAsStream(Header, cycleEntries.Split('\n')); + var cycleData = DrivingCycleDataReader.ReadFromDataTable(VectoCSVFile.ReadStream(cycle), "VTP Cycle", false); + var vtpCycle = new VTPCycle(container, cycleData); + vtpCycle.PrepareCycleData(); + vtpCycle.VerifyInputData(); + + Assert.Greater(LogList.Count, 1); + Assert.IsTrue(LogList.Any(x => x.StartsWith("Fuel consumption for the previous 10 [min] below threshold"))); + + } + + [TestCase()] + public void TestFuelConsumptionLowOK() + { + SetupLogging(); + + // Approach: calculate min. FC for a certain FC in g/kWh (cycle demands ~10kW constant, i.e., 500NM @ 100rpm at both wheels) + // construct cycle with constant FC slightly above min. FC + + var fcLimit = (DeclarationData.VTPMode.LowerFCThreshold * (2 * 500.SI<NewtonMeter>() * 100.RPMtoRad())).Cast<KilogramPerSecond>(); + + var cycleEntries = ""; + for (var i = 0; i < 2000; i++) + cycleEntries += string.Format(" {0} , 0, 600, 400, 500 , 500 , 100 , 100 , {1}, 3 \n", i / 2.0, (fcLimit * 1.0001).ConvertToGrammPerHour().Value); + + var container = new VehicleContainer(ExecutionMode.Declaration) { + RunData = new VectoRunData() { + Aux = new List<VectoRunData.AuxData>() + } + }; + var cycle = InputDataHelper.InputDataAsStream(Header, cycleEntries.Split('\n')); + var cycleData = DrivingCycleDataReader.ReadFromDataTable(VectoCSVFile.ReadStream(cycle), "VTP Cycle", false); + var vtpCycle = new VTPCycle(container, cycleData); + vtpCycle.PrepareCycleData(); + vtpCycle.VerifyInputData(); + + Assert.AreEqual(0, LogList.Count); + + } + + [TestCase()] + public void TestFuelConsumptionTooHigh() + { + SetupLogging(); + + // Approach: calculate max. FC for a certain FC in g/kWh (cycle demands ~10kW constant, i.e., 500NM @ 100rpm at both wheels) + // construct cycle with slightly decreasing FC so that FC falls below threshold + + var fcLimit = (DeclarationData.VTPMode.UpperFCThreshold * (2 * 500.SI<NewtonMeter>() * 100.RPMtoRad())).Cast<KilogramPerSecond>(); + + var cycleEntries = ""; + for (var i = 0; i < 2000; i++) + cycleEntries += string.Format(" {0} , 0, 600, 400, 500 , 500 , 100 , 100 , {1}, 3 \n", i / 2.0, (fcLimit * 0.99 * (1 + i / 100000.0)).ConvertToGrammPerHour().Value); + + var container = new VehicleContainer(ExecutionMode.Declaration) { + RunData = new VectoRunData() { + Aux = new List<VectoRunData.AuxData>() + } + }; + var cycle = InputDataHelper.InputDataAsStream(Header, cycleEntries.Split('\n')); + var cycleData = DrivingCycleDataReader.ReadFromDataTable(VectoCSVFile.ReadStream(cycle), "VTP Cycle", false); + var vtpCycle = new VTPCycle(container, cycleData); + vtpCycle.PrepareCycleData(); + vtpCycle.VerifyInputData(); + + Assert.Greater(LogList.Count, 1); + Assert.IsTrue(LogList.Any(x => x.StartsWith("Fuel consumption for the previous 10 [min] above threshold"))); + } + + [TestCase()] + public void TestFuelConsumptionHighOK() + { + SetupLogging(); + + // Approach: calculate max. FC for a certain FC in g/kWh (cycle demands ~10kW constant, i.e., 500NM @ 100rpm at both wheels) + // construct cycle with constant FC slightly below max FC + + var fcLimit = (DeclarationData.VTPMode.UpperFCThreshold * (2 * 500.SI<NewtonMeter>() * 100.RPMtoRad())).Cast<KilogramPerSecond>(); + + var cycleEntries = ""; + for (var i = 0; i < 2000; i++) + cycleEntries += string.Format(" {0} , 0, 600, 400, 500 , 500 , 100 , 100 , {1}, 3 \n", i / 2.0, (fcLimit * 0.9999).ConvertToGrammPerHour().Value); + + var container = new VehicleContainer(ExecutionMode.Declaration) { + RunData = new VectoRunData() { + Aux = new List<VectoRunData.AuxData>() + } + }; + var cycle = InputDataHelper.InputDataAsStream(Header, cycleEntries.Split('\n')); + var cycleData = DrivingCycleDataReader.ReadFromDataTable(VectoCSVFile.ReadStream(cycle), "VTP Cycle", false); + var vtpCycle = new VTPCycle(container, cycleData); + vtpCycle.PrepareCycleData(); + vtpCycle.VerifyInputData(); + + Assert.AreEqual(0, LogList.Count); + + } + + private static void SetupLogging() + { + LogList.Clear(); + var target = new MethodCallTarget { + ClassName = typeof(VTPCycleValidationTest).AssemblyQualifiedName, + MethodName = "LogMethod" + }; + target.Parameters.Add(new MethodCallParameter("${level}")); + target.Parameters.Add(new MethodCallParameter("${message}")); + SimpleConfigurator.ConfigureForTargetLogging(target, LogLevel.Error); + } + + + // ReSharper disable once UnusedMember.Global -- used by logging framework, see SetupLogging method + public static void LogMethod(string level, string message) + { + LogList.Add(message); + } + } +} diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs index e529782f2d5f2bd1a981373718015fdd853ec123..a6d639b66cacad8ea384c75a3a0cce26d1a96ec4 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs @@ -633,7 +633,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData } public string CertificationNumber { get; set; } - public string DigestValue { get; set; } + public DigestData DigestValue { get; set; } public GearboxType Type { get; set; } public IList<ITransmissionInputData> Gears { get; set; } diff --git a/VectoCore/VectoCoreTest/Reports/ModDataTest.cs b/VectoCore/VectoCoreTest/Reports/ModDataTest.cs index aa4ac83fd676e1fae089d2f9807c1c99b4be4954..a5b564cd665892655fda8c6877fbb7b29e09efb7 100644 --- a/VectoCore/VectoCoreTest/Reports/ModDataTest.cs +++ b/VectoCore/VectoCoreTest/Reports/ModDataTest.cs @@ -236,7 +236,7 @@ namespace TUGraz.VectoCore.Tests.Reports fcMap = FuelConsumptionMapReader.Create(engInput.JobInputData.Vehicle .EngineInputData.FuelConsumptionMap); } - var vtpInput = inputData as IVTPInputDataProvider; + var vtpInput = inputData as IVTPEngineeringInputDataProvider; if (vtpInput != null ) { fcMap = FuelConsumptionMapReader.Create(vtpInput.JobInputData.Vehicle .EngineInputData.FuelConsumptionMap); diff --git a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class2_RigidTruck_4x2_engineSpeedlimit/MT_6.vgbx b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class2_RigidTruck_4x2_engineSpeedlimit/MT_6.vgbx index aba03a85a1e5f2429860666eb3e253d7b6d811d4..179f41ce16c39246d851e487c955d8b3c4227ba8 100644 --- a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class2_RigidTruck_4x2_engineSpeedlimit/MT_6.vgbx +++ b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class2_RigidTruck_4x2_engineSpeedlimit/MT_6.vgbx @@ -38,7 +38,7 @@ "LossMap": "Gear_4.vtlm", "ShiftPolygon": "", "MaxTorque": "" - }, + } ], "TqReserve": 20.0, "ShiftTime": 2.0, diff --git a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class5_Tractor_4x2/Class5_Tractor_DECL_primRet.vecto b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class5_Tractor_4x2/Class5_Tractor_DECL_primRet.vecto new file mode 100644 index 0000000000000000000000000000000000000000..b8aa127a3ebcdfeb7ee85469aa24d45187b92369 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class5_Tractor_4x2/Class5_Tractor_DECL_primRet.vecto @@ -0,0 +1,67 @@ +{ + "Header": { + "CreatedBy": " ()", + "Date": "2016-10-13T10:08:21.7776564Z", + "AppVersion": "3", + "FileVersion": 3 + }, + "Body": { + "SavedInDeclMode": true, + "EngineOnlyMode": false, + "VehicleFile": "Class5_Tractor_primRet.vveh", + "EngineFile": "Engine_325kW_12.7l.veng", + "GearboxFile": "AMT_12.vgbx", + "AuxiliaryAssembly": "Classic", + "AuxiliaryVersion": "CLASSIC", + "AdvancedAuxiliaryFilePath": "", + "Aux": [ + { + "ID": "FAN", + "Type": "Fan", + "Technology": [ + "Belt driven or driven via transm. - Electronically controlled visco clutch" + ] + }, + { + "ID": "STP", + "Type": "Steering pump", + "Technology": [ + "Fixed displacement with elec. control" + ] + }, + { + "ID": "AC", + "Type": "HVAC", + "Technology": [ + "Default" + ] + }, + { + "ID": "ES", + "Type": "Electric System", + "Technology": [ + "Standard technology" + ] + }, + { + "ID": "PS", + "Type": "Pneumatic System", + "Technology": [ + "Medium Supply 2-stage + ESS + AMS" + ] + } + ], + "StartStop": { + "Enabled": false, + "MaxSpeed": 5.0, + "MinTime": 5.0, + "Delay": 5.0 + }, + "OverSpeedEcoRoll": { + "Mode": "Overspeed", + "MinSpeed": 50.0, + "OverSpeed": 5.0, + "UnderSpeed": 5.0 + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class5_Tractor_4x2/Class5_Tractor_primRet.vveh b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class5_Tractor_4x2/Class5_Tractor_primRet.vveh new file mode 100644 index 0000000000000000000000000000000000000000..dc32d200122d8260111f1b2029cc9b5257f82813 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/Class5_Tractor_4x2/Class5_Tractor_primRet.vveh @@ -0,0 +1,56 @@ +{ + "Header": { + "CreatedBy": " ()", + "Date": "2016-10-13T10:08:01.8366564Z", + "AppVersion": "3", + "FileVersion": 7 + }, + "Body": { + "SavedInDeclMode": true, + "VehCat": "Tractor", + "CurbWeight": 8229.0, + "CurbWeightExtra": 0.0, + "Loading": 0.0, + "MassMax": 18.0, + "CdA": 5.3, + "rdyn": 0.0, + "CdCorrMode": "CdofVdecl", + "CdCorrFile": "", + "Retarder": { + "Type": "primary", + "Ratio": 1.0, + "File": "Default.vrlm" + }, + "Angledrive": { + "Type": "None", + "Ratio": 0.0, + "LossMap": "" + }, + "PTO": { + "Type": "None", + "LossMap": "", + "Cycle": "" + }, + "AxleConfig": { + "Type": "4x2", + "Axles": [ + { + "Inertia": 14.9, + "Wheels": "315/70 R22.5", + "AxleWeightShare": 0.0, + "TwinTyres": false, + "RRCISO": 0.0055, + "FzISO": 33350.0 + }, + { + "Inertia": 14.9, + "Wheels": "315/70 R22.5", + "AxleWeightShare": 0.0, + "TwinTyres": true, + "RRCISO": 0.0065, + "FzISO": 33350.0 + } + ] + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/Tractor_4x2_vehicle-class-5_Generic vehicle.RSLT_MANUFACTURER.xml b/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/Tractor_4x2_vehicle-class-5_Generic vehicle.RSLT_MANUFACTURER.xml new file mode 100644 index 0000000000000000000000000000000000000000..6b5433a542edd5db65a165a4cd5f7ee16c526f76 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/Tractor_4x2_vehicle-class-5_Generic vehicle.RSLT_MANUFACTURER.xml @@ -0,0 +1,345 @@ +<?xml version="1.0" encoding="utf-8"?> +<?xml-stylesheet href="https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/CSS/VectoReports.css"?> +<VectoOutput schemaVersion="0.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.4" xmlns:di="http://www.w3.org/2000/09/xmldsig#" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.4 https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/XSD/VectoOutputManufacturer.0.4.xsd"> + <Data id="RESULT-b330b679d81a449f92ed"> + <Vehicle> + <VIN>standard values</VIN> + <LegislativeClass>N3</LegislativeClass> + <VehicleGroup>5</VehicleGroup> + <AxleConfiguration>4x2</AxleConfiguration> + <GrossVehicleMass>40000</GrossVehicleMass> + <CurbMassChassis>7800</CurbMassChassis> + <PTO>false</PTO> + <Components> + <Engine> + <Model>Generic Engine</Model> + <CertificationNumber>ENG-Generic Engine</CertificationNumber> + <DigestValue>UxwXPq/SM3L4WIYOBWlMy1KbUowxU670gdh+B1MXDpo=</DigestValue> + <RatedPower>325032</RatedPower> + <IdlingSpeed>600</IdlingSpeed> + <RatedSpeed>1736</RatedSpeed> + <Displacement>13000</Displacement> + <FuelType>Diesel CI</FuelType> + </Engine> + <Gearbox> + <Model>GB_12-gear</Model> + <CertificationMethod>Standard values</CertificationMethod> + <DigestValue>JN8KciKSKfvIE54oFkwnuOX1pcxsR//cklWLP8gtNvY=</DigestValue> + <TransmissionType>AMT</TransmissionType> + <GearsCount>12</GearsCount> + <TransmissionRatioFinalGear>1.000</TransmissionRatioFinalGear> + </Gearbox> + <Retarder> + <RetarderType>Transmission Output Retarder</RetarderType> + <Model>RET-generic</Model> + <CertificationMethod>Standard values</CertificationMethod> + <DigestValue>acR2Tz1XQ825YZRvDenOm9zarI6Dcw5QLgwPtDRVW1c=</DigestValue> + </Retarder> + <Axlegear> + <Model>N.A.</Model> + <CertificationMethod>Standard values</CertificationMethod> + <DigestValue>cKOhQhbRAelCtdfBGL8VjF5HcvQkVrw9sr0OkWeEYb0=</DigestValue> + <LineType>Single portal axle</LineType> + <Ratio>2.640</Ratio> + </Axlegear> + <AirDrag> + <Model>N.A.</Model> + <CertificationMethod>Measured</CertificationMethod> + <CertificationNumber>generic cabin</CertificationNumber> + <DigestValue>xbCnjthzGoDH8oiydVX5eQmUoaeZ4aXpKwHtvd3ZkNQ=</DigestValue> + <CdxA>5.50</CdxA> + </AirDrag> + <AxleWheels> + <Axle axleNumber="1"> + <TyreDimension>315/70 R22.5</TyreDimension> + <TyreCertificationNumber>TYRE-315/70 R22.5</TyreCertificationNumber> + <DigestValue>hr4Dcmy/uO+zoYr0KcPvcAOS93XYlCIKMyy1XeMO0AM=</DigestValue> + <TyreRRCDeclared>0.0045</TyreRRCDeclared> + <TwinTyres>false</TwinTyres> + </Axle> + <Axle axleNumber="2"> + <TyreDimension>315/70 R22.5</TyreDimension> + <TyreCertificationNumber>TYRE-315/70 R22.5</TyreCertificationNumber> + <DigestValue>AsCRWiSEqb1HYnmM1SPXdz6KVzEZjXfvDkFppwyImY0=</DigestValue> + <TyreRRCDeclared>0.0055</TyreRRCDeclared> + <TwinTyres>true</TwinTyres> + </Axle> + </AxleWheels> + <Auxiliaries> + <FanTechnology>Belt driven or driven via transm. - Electronically controlled visco clutch</FanTechnology> + <SteeringPumpTechnology>Variable displacement mech. controlled</SteeringPumpTechnology> + <ElectricSystemTechnology>Standard technology</ElectricSystemTechnology> + <PneumaticSystemTechnology>Medium Supply 1-stage</PneumaticSystemTechnology> + <HVACTechnology>Default</HVACTechnology> + </Auxiliaries> + </Components> + <InputDataSignature> + <di:Reference URI="#VEH-Tabelle1_Class-5_Genericvehicle"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>ybhnanqWvMZqZNAEZRXH47snqSvJqoCYB4ZvD+y/wRc=</di:DigestValue> + </di:Reference> + </InputDataSignature> + </Vehicle> + <Results> + <Status>success</Status> + <Result status="success"> + <Mission>Long Haul</Mission> + <Distance unit="km">100.185</Distance> + <SimulationParameters> + <TotalVehicleMass unit="kg">17900</TotalVehicleMass> + <Payload unit="kg">2600</Payload> + <FuelType>Diesel CI</FuelType> + </SimulationParameters> + <VehiclePerformance> + <AverageSpeed unit="km/h">79.6</AverageSpeed> + <MinSpeed unit="km/h">0.0</MinSpeed> + <MaxSpeed unit="km/h">87.5</MaxSpeed> + <MaxDeceleration unit="m/s²">1.00</MaxDeceleration> + <MaxAcceleration unit="m/s²">1.00</MaxAcceleration> + <FullLoadDrivingtimePercentage>2.77</FullLoadDrivingtimePercentage> + <GearshiftCount>47</GearshiftCount> + </VehiclePerformance> + <FuelConsumption unit="g/km">212.9</FuelConsumption> + <FuelConsumption unit="g/t-km">81.9</FuelConsumption> + <FuelConsumption unit="g/m³-km">2.34</FuelConsumption> + <FuelConsumption unit="MJ/km">9.09</FuelConsumption> + <FuelConsumption unit="MJ/t-km">3.50</FuelConsumption> + <FuelConsumption unit="MJ/m³-km">0.0999</FuelConsumption> + <FuelConsumption unit="l/100km">25.5</FuelConsumption> + <FuelConsumption unit="l/t-km">0.0979</FuelConsumption> + <FuelConsumption unit="l/m³-km">0.00280</FuelConsumption> + <CO2 unit="g/km">666.3</CO2> + <CO2 unit="g/t-km">256.3</CO2> + <CO2 unit="g/m³-km">7.32</CO2> + </Result> + <Result status="success"> + <Mission>Long Haul</Mission> + <Distance unit="km">100.185</Distance> + <SimulationParameters> + <TotalVehicleMass unit="kg">34600</TotalVehicleMass> + <Payload unit="kg">19300</Payload> + <FuelType>Diesel CI</FuelType> + </SimulationParameters> + <VehiclePerformance> + <AverageSpeed unit="km/h">78.7</AverageSpeed> + <MinSpeed unit="km/h">0.0</MinSpeed> + <MaxSpeed unit="km/h">87.5</MaxSpeed> + <MaxDeceleration unit="m/s²">1.00</MaxDeceleration> + <MaxAcceleration unit="m/s²">1.00</MaxAcceleration> + <FullLoadDrivingtimePercentage>12.19</FullLoadDrivingtimePercentage> + <GearshiftCount>53</GearshiftCount> + </VehiclePerformance> + <FuelConsumption unit="g/km">281.4</FuelConsumption> + <FuelConsumption unit="g/t-km">14.6</FuelConsumption> + <FuelConsumption unit="g/m³-km">3.09</FuelConsumption> + <FuelConsumption unit="MJ/km">12.0</FuelConsumption> + <FuelConsumption unit="MJ/t-km">0.623</FuelConsumption> + <FuelConsumption unit="MJ/m³-km">0.132</FuelConsumption> + <FuelConsumption unit="l/100km">33.7</FuelConsumption> + <FuelConsumption unit="l/t-km">0.0174</FuelConsumption> + <FuelConsumption unit="l/m³-km">0.00370</FuelConsumption> + <CO2 unit="g/km">880.8</CO2> + <CO2 unit="g/t-km">45.6</CO2> + <CO2 unit="g/m³-km">9.68</CO2> + </Result> + <Result status="success"> + <Mission>Long Haul EMS</Mission> + <Distance unit="km">100.185</Distance> + <SimulationParameters> + <TotalVehicleMass unit="kg">24200</TotalVehicleMass> + <Payload unit="kg">3500</Payload> + <FuelType>Diesel CI</FuelType> + </SimulationParameters> + <VehiclePerformance> + <AverageSpeed unit="km/h">79.2</AverageSpeed> + <MinSpeed unit="km/h">0.0</MinSpeed> + <MaxSpeed unit="km/h">87.5</MaxSpeed> + <MaxDeceleration unit="m/s²">1.00</MaxDeceleration> + <MaxAcceleration unit="m/s²">1.00</MaxAcceleration> + <FullLoadDrivingtimePercentage>5.93</FullLoadDrivingtimePercentage> + <GearshiftCount>51</GearshiftCount> + </VehiclePerformance> + <FuelConsumption unit="g/km">270.1</FuelConsumption> + <FuelConsumption unit="g/t-km">77.2</FuelConsumption> + <FuelConsumption unit="g/m³-km">1.92</FuelConsumption> + <FuelConsumption unit="MJ/km">11.5</FuelConsumption> + <FuelConsumption unit="MJ/t-km">3.30</FuelConsumption> + <FuelConsumption unit="MJ/m³-km">0.0821</FuelConsumption> + <FuelConsumption unit="l/100km">32.3</FuelConsumption> + <FuelConsumption unit="l/t-km">0.0923</FuelConsumption> + <FuelConsumption unit="l/m³-km">0.00230</FuelConsumption> + <CO2 unit="g/km">845.5</CO2> + <CO2 unit="g/t-km">241.6</CO2> + <CO2 unit="g/m³-km">6.02</CO2> + </Result> + <Result status="success"> + <Mission>Long Haul EMS</Mission> + <Distance unit="km">100.185</Distance> + <SimulationParameters> + <TotalVehicleMass unit="kg">47200</TotalVehicleMass> + <Payload unit="kg">26500</Payload> + <FuelType>Diesel CI</FuelType> + </SimulationParameters> + <VehiclePerformance> + <AverageSpeed unit="km/h">77.0</AverageSpeed> + <MinSpeed unit="km/h">0.0</MinSpeed> + <MaxSpeed unit="km/h">87.5</MaxSpeed> + <MaxDeceleration unit="m/s²">1.00</MaxDeceleration> + <MaxAcceleration unit="m/s²">1.00</MaxAcceleration> + <FullLoadDrivingtimePercentage>25.08</FullLoadDrivingtimePercentage> + <GearshiftCount>65</GearshiftCount> + </VehiclePerformance> + <FuelConsumption unit="g/km">366.0</FuelConsumption> + <FuelConsumption unit="g/t-km">13.8</FuelConsumption> + <FuelConsumption unit="g/m³-km">2.60</FuelConsumption> + <FuelConsumption unit="MJ/km">15.6</FuelConsumption> + <FuelConsumption unit="MJ/t-km">0.590</FuelConsumption> + <FuelConsumption unit="MJ/m³-km">0.111</FuelConsumption> + <FuelConsumption unit="l/100km">43.8</FuelConsumption> + <FuelConsumption unit="l/t-km">0.0165</FuelConsumption> + <FuelConsumption unit="l/m³-km">0.00312</FuelConsumption> + <CO2 unit="g/km">1145.5</CO2> + <CO2 unit="g/t-km">43.2</CO2> + <CO2 unit="g/m³-km">8.15</CO2> + </Result> + <Result status="success"> + <Mission>Regional Delivery</Mission> + <Distance unit="km">100.000</Distance> + <SimulationParameters> + <TotalVehicleMass unit="kg">17900</TotalVehicleMass> + <Payload unit="kg">2600</Payload> + <FuelType>Diesel CI</FuelType> + </SimulationParameters> + <VehiclePerformance> + <AverageSpeed unit="km/h">60.5</AverageSpeed> + <MinSpeed unit="km/h">0.0</MinSpeed> + <MaxSpeed unit="km/h">87.3</MaxSpeed> + <MaxDeceleration unit="m/s²">1.00</MaxDeceleration> + <MaxAcceleration unit="m/s²">1.00</MaxAcceleration> + <FullLoadDrivingtimePercentage>4.73</FullLoadDrivingtimePercentage> + <GearshiftCount>189</GearshiftCount> + </VehiclePerformance> + <FuelConsumption unit="g/km">224.1</FuelConsumption> + <FuelConsumption unit="g/t-km">86.2</FuelConsumption> + <FuelConsumption unit="g/m³-km">2.46</FuelConsumption> + <FuelConsumption unit="MJ/km">9.57</FuelConsumption> + <FuelConsumption unit="MJ/t-km">3.68</FuelConsumption> + <FuelConsumption unit="MJ/m³-km">0.105</FuelConsumption> + <FuelConsumption unit="l/100km">26.8</FuelConsumption> + <FuelConsumption unit="l/t-km">0.103</FuelConsumption> + <FuelConsumption unit="l/m³-km">0.00295</FuelConsumption> + <CO2 unit="g/km">701.4</CO2> + <CO2 unit="g/t-km">269.8</CO2> + <CO2 unit="g/m³-km">7.71</CO2> + </Result> + <Result status="success"> + <Mission>Regional Delivery</Mission> + <Distance unit="km">100.000</Distance> + <SimulationParameters> + <TotalVehicleMass unit="kg">28200</TotalVehicleMass> + <Payload unit="kg">12900</Payload> + <FuelType>Diesel CI</FuelType> + </SimulationParameters> + <VehiclePerformance> + <AverageSpeed unit="km/h">60.2</AverageSpeed> + <MinSpeed unit="km/h">0.0</MinSpeed> + <MaxSpeed unit="km/h">87.5</MaxSpeed> + <MaxDeceleration unit="m/s²">1.00</MaxDeceleration> + <MaxAcceleration unit="m/s²">1.00</MaxAcceleration> + <FullLoadDrivingtimePercentage>13.26</FullLoadDrivingtimePercentage> + <GearshiftCount>204</GearshiftCount> + </VehiclePerformance> + <FuelConsumption unit="g/km">280.8</FuelConsumption> + <FuelConsumption unit="g/t-km">21.8</FuelConsumption> + <FuelConsumption unit="g/m³-km">3.09</FuelConsumption> + <FuelConsumption unit="MJ/km">12.0</FuelConsumption> + <FuelConsumption unit="MJ/t-km">0.930</FuelConsumption> + <FuelConsumption unit="MJ/m³-km">0.132</FuelConsumption> + <FuelConsumption unit="l/100km">33.6</FuelConsumption> + <FuelConsumption unit="l/t-km">0.0260</FuelConsumption> + <FuelConsumption unit="l/m³-km">0.00369</FuelConsumption> + <CO2 unit="g/km">879.0</CO2> + <CO2 unit="g/t-km">68.1</CO2> + <CO2 unit="g/m³-km">9.66</CO2> + </Result> + <Result status="success"> + <Mission>Regional Delivery EMS</Mission> + <Distance unit="km">100.000</Distance> + <SimulationParameters> + <TotalVehicleMass unit="kg">24200</TotalVehicleMass> + <Payload unit="kg">3500</Payload> + <FuelType>Diesel CI</FuelType> + </SimulationParameters> + <VehiclePerformance> + <AverageSpeed unit="km/h">60.3</AverageSpeed> + <MinSpeed unit="km/h">0.0</MinSpeed> + <MaxSpeed unit="km/h">87.5</MaxSpeed> + <MaxDeceleration unit="m/s²">1.00</MaxDeceleration> + <MaxAcceleration unit="m/s²">1.00</MaxAcceleration> + <FullLoadDrivingtimePercentage>10.95</FullLoadDrivingtimePercentage> + <GearshiftCount>197</GearshiftCount> + </VehiclePerformance> + <FuelConsumption unit="g/km">285.5</FuelConsumption> + <FuelConsumption unit="g/t-km">81.6</FuelConsumption> + <FuelConsumption unit="g/m³-km">2.03</FuelConsumption> + <FuelConsumption unit="MJ/km">12.2</FuelConsumption> + <FuelConsumption unit="MJ/t-km">3.48</FuelConsumption> + <FuelConsumption unit="MJ/m³-km">0.0868</FuelConsumption> + <FuelConsumption unit="l/100km">34.2</FuelConsumption> + <FuelConsumption unit="l/t-km">0.0976</FuelConsumption> + <FuelConsumption unit="l/m³-km">0.00243</FuelConsumption> + <CO2 unit="g/km">893.7</CO2> + <CO2 unit="g/t-km">255.3</CO2> + <CO2 unit="g/m³-km">6.36</CO2> + </Result> + <Result status="success"> + <Mission>Regional Delivery EMS</Mission> + <Distance unit="km">100.000</Distance> + <SimulationParameters> + <TotalVehicleMass unit="kg">38200</TotalVehicleMass> + <Payload unit="kg">17500</Payload> + <FuelType>Diesel CI</FuelType> + </SimulationParameters> + <VehiclePerformance> + <AverageSpeed unit="km/h">59.4</AverageSpeed> + <MinSpeed unit="km/h">0.0</MinSpeed> + <MaxSpeed unit="km/h">87.5</MaxSpeed> + <MaxDeceleration unit="m/s²">1.00</MaxDeceleration> + <MaxAcceleration unit="m/s²">1.00</MaxAcceleration> + <FullLoadDrivingtimePercentage>22.04</FullLoadDrivingtimePercentage> + <GearshiftCount>211</GearshiftCount> + </VehiclePerformance> + <FuelConsumption unit="g/km">363.8</FuelConsumption> + <FuelConsumption unit="g/t-km">20.8</FuelConsumption> + <FuelConsumption unit="g/m³-km">2.59</FuelConsumption> + <FuelConsumption unit="MJ/km">15.5</FuelConsumption> + <FuelConsumption unit="MJ/t-km">0.888</FuelConsumption> + <FuelConsumption unit="MJ/m³-km">0.111</FuelConsumption> + <FuelConsumption unit="l/100km">43.5</FuelConsumption> + <FuelConsumption unit="l/t-km">0.0249</FuelConsumption> + <FuelConsumption unit="l/m³-km">0.00310</FuelConsumption> + <CO2 unit="g/km">1138.6</CO2> + <CO2 unit="g/t-km">65.1</CO2> + <CO2 unit="g/m³-km">8.10</CO2> + </Result> + </Results> + <ApplicationInformation> + <SimulationToolVersion>3.2.1.1133</SimulationToolVersion> + <Date>2018-04-26T11:58:46.2834602Z</Date> + </ApplicationInformation> + </Data> + <Signature> + <di:Reference URI="#RESULT-b330b679d81a449f92ed"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>ze5T5ev8jSBIKQ3ptNfhBrX+L9xjgWSB2joEQntFR5M=</di:DigestValue> + </di:Reference> + </Signature> +</VectoOutput> \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/Tractor_4x2_vehicle-class-5_Generic vehicle.xml b/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/Tractor_4x2_vehicle-class-5_Generic vehicle.xml index 3356681805bc32dd3dc6b96c2db2d7b4f3c2ef5d..634a24cbb62a2e16e975759659a5a4970944769e 100644 --- a/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/Tractor_4x2_vehicle-class-5_Generic vehicle.xml +++ b/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/Tractor_4x2_vehicle-class-5_Generic vehicle.xml @@ -1,5 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> -<tns:VectoInputDeclaration schemaVersion="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v1.0" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationInput:v1.0 https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/XSD/VectoInput.xsd"> +<tns:VectoInputDeclaration schemaVersion="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" + xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v1.0" + xmlns:di="http://www.w3.org/2000/09/xmldsig#" + xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationInput:v1.0 https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/XSD/VectoInput.xsd"> <Vehicle id="VEH-Tabelle1_Class-5_Genericvehicle"> <Manufacturer>Generic Vendor</Manufacturer> <ManufacturerAddress>N.A.</ManufacturerAddress> @@ -11,7 +15,7 @@ <AxleConfiguration>4x2</AxleConfiguration> <CurbMassChassis>7800</CurbMassChassis> <GrossVehicleMass>40000</GrossVehicleMass> - <IdlingSpeed>600</IdlingSpeed> + <IdlingSpeed>590</IdlingSpeed> <RetarderType>Transmission Output Retarder</RetarderType> <RetarderRatio>1.000</RetarderRatio> <AngledriveType>None</AngledriveType> @@ -28,7 +32,7 @@ <Date>2017-11-20T12:31:47.2109026Z</Date> <AppVersion>VectoCore</AppVersion> <Displacement>13000</Displacement> - <IdlingSpeed>600</IdlingSpeed> + <IdlingSpeed>590</IdlingSpeed> <RatedSpeed>1736</RatedSpeed> <RatedPower>325032</RatedPower> <MaxEngineTorque>2134</MaxEngineTorque> @@ -40,6 +44,18 @@ <CFNCV>1.0000</CFNCV> <FuelType>Diesel CI</FuelType> <FuelConsumptionMap> + <Entry engineSpeed="550.00" torque="-150.00" fuelConsumption="0.00" /> + <Entry engineSpeed="550.00" torque="0.00" fuelConsumption="1488.18" /> + <Entry engineSpeed="550.00" torque="216.90" fuelConsumption="3609.53" /> + <Entry engineSpeed="550.00" torque="433.80" fuelConsumption="6055.65" /> + <Entry engineSpeed="550.00" torque="650.70" fuelConsumption="8756.65" /> + <Entry engineSpeed="550.00" torque="867.60" fuelConsumption="10922.44" /> + <Entry engineSpeed="550.00" torque="1084.50" fuelConsumption="13315.08" /> + <Entry engineSpeed="550.00" torque="1301.40" fuelConsumption="15886.96" /> + <Entry engineSpeed="550.00" torque="1518.30" fuelConsumption="18459.52" /> + <Entry engineSpeed="550.00" torque="1735.20" fuelConsumption="21032.07" /> + <Entry engineSpeed="550.00" torque="1952.10" fuelConsumption="23604.64" /> + <Entry engineSpeed="550.00" torque="2169.00" fuelConsumption="26177.20" /> <Entry engineSpeed="600.00" torque="-150.00" fuelConsumption="0.00" /> <Entry engineSpeed="600.00" torque="0.00" fuelConsumption="1488.18" /> <Entry engineSpeed="600.00" torque="216.90" fuelConsumption="3609.53" /> @@ -176,12 +192,12 @@ </Data> <Signature> <Reference URI="#ENG-GenericEngine" xmlns="http://www.w3.org/2000/09/xmldsig#"> - <Transforms> - <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> - <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> - </Transforms> - <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <DigestValue></DigestValue> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>UxwXPq/SM3L4WIYOBWlMy1KbUowxU670gdh+B1MXDpo=</di:DigestValue> </Reference> </Signature> </Engine> @@ -379,12 +395,12 @@ </Data> <Signature> <Reference URI="#GBX-GB_12-gear" xmlns="http://www.w3.org/2000/09/xmldsig#"> - <Transforms> - <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> - <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> - </Transforms> - <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <DigestValue></DigestValue> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>JN8KciKSKfvIE54oFkwnuOX1pcxsR//cklWLP8gtNvY=</di:DigestValue> </Reference> </Signature> </Gearbox> @@ -432,12 +448,12 @@ </Data> <Signature> <Reference URI="#RET-RET-generic" xmlns="http://www.w3.org/2000/09/xmldsig#"> - <Transforms> - <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> - <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> - </Transforms> - <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <DigestValue></DigestValue> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>acR2Tz1XQ825YZRvDenOm9zarI6Dcw5QLgwPtDRVW1c=</di:DigestValue> </Reference> </Signature> </Retarder> @@ -466,12 +482,12 @@ </Data> <Signature> <Reference URI="#AXLGEAR-2640" xmlns="http://www.w3.org/2000/09/xmldsig#"> - <Transforms> - <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> - <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> - </Transforms> - <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <DigestValue></DigestValue> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>cKOhQhbRAelCtdfBGL8VjF5HcvQkVrw9sr0OkWeEYb0=</di:DigestValue> </Reference> </Signature> </Axlegear> @@ -494,14 +510,14 @@ <FzISO>33350</FzISO> </Data> <Signature> - <Reference URI="#TYRE-315_70R225" xmlns="http://www.w3.org/2000/09/xmldsig#"> - <Transforms> - <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> - <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> - </Transforms> - <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <DigestValue></DigestValue> - </Reference> + <di:Reference URI="#TYRE-315_70R225"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>hr4Dcmy/uO+zoYr0KcPvcAOS93XYlCIKMyy1XeMO0AM=</di:DigestValue> + </di:Reference> </Signature> </Tyre> </Axle> @@ -521,14 +537,14 @@ <FzISO>33350</FzISO> </Data> <Signature> - <Reference URI="#TYRE-315_70R225" xmlns="http://www.w3.org/2000/09/xmldsig#"> - <Transforms> - <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> - <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> - </Transforms> - <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <DigestValue></DigestValue> - </Reference> + <di:Reference URI="#TYRE-315_70R225"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>AsCRWiSEqb1HYnmM1SPXdz6KVzEZjXfvDkFppwyImY0=</di:DigestValue> + </di:Reference> </Signature> </Tyre> </Axle> @@ -567,12 +583,12 @@ </Data> <Signature> <Reference URI="#Airdrag-genericcabin" xmlns="http://www.w3.org/2000/09/xmldsig#"> - <Transforms> - <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> - <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> - </Transforms> - <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <DigestValue></DigestValue> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>xbCnjthzGoDH8oiydVX5eQmUoaeZ4aXpKwHtvd3ZkNQ=</di:DigestValue> </Reference> </Signature> </AirDrag> diff --git a/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/class_5_generic vehicle_DECL.vecto b/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/class_5_generic vehicle_DECL.vecto new file mode 100644 index 0000000000000000000000000000000000000000..2382aa6698270a8f0bf81be52e61c983f740021d --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/class_5_generic vehicle_DECL.vecto @@ -0,0 +1,24 @@ +{ + "Header": { + "CreatedBy": "", + "Date": "2018-05-02T11:40:41.8847449Z", + "AppVersion": "3", + "FileVersion": 4 + }, + "Body": { + "SavedInDeclMode": true, + "DeclarationVehicle": "Tractor_4x2_vehicle-class-5_Generic vehicle.xml", + "ManufacturerRecord": "Tractor_4x2_vehicle-class-5_Generic vehicle.RSLT_MANUFACTURER.xml", + "Mileage": 10000.0, + "NCVTestFuel": 41.0, + "FanPowerCoefficients": [ + 5.5E-07, + 15.0, + 108.5 + ], + "FanDiameter": 0.225, + "Cycles": [ + "VTP_rural_2Hz.vdri" + ] + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Jobs/Tractor_4x2_vehicle-class-5_Generic vehicle.xml b/VectoCore/VectoCoreTest/TestData/Jobs/Tractor_4x2_vehicle-class-5_Generic vehicle.xml new file mode 100644 index 0000000000000000000000000000000000000000..3356681805bc32dd3dc6b96c2db2d7b4f3c2ef5d --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Jobs/Tractor_4x2_vehicle-class-5_Generic vehicle.xml @@ -0,0 +1,581 @@ +<?xml version="1.0" encoding="utf-8"?> +<tns:VectoInputDeclaration schemaVersion="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v1.0" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationInput:v1.0 https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/XSD/VectoInput.xsd"> + <Vehicle id="VEH-Tabelle1_Class-5_Genericvehicle"> + <Manufacturer>Generic Vendor</Manufacturer> + <ManufacturerAddress>N.A.</ManufacturerAddress> + <Model>Tabelle1_Class-5_Genericvehicle</Model> + <VIN>standard values</VIN> + <Date>2017-11-20T12:31:47.179649Z</Date> + <LegislativeClass>N3</LegislativeClass> + <VehicleCategory>Tractor</VehicleCategory> + <AxleConfiguration>4x2</AxleConfiguration> + <CurbMassChassis>7800</CurbMassChassis> + <GrossVehicleMass>40000</GrossVehicleMass> + <IdlingSpeed>600</IdlingSpeed> + <RetarderType>Transmission Output Retarder</RetarderType> + <RetarderRatio>1.000</RetarderRatio> + <AngledriveType>None</AngledriveType> + <PTO> + <PTOShaftsGearWheels>none</PTOShaftsGearWheels> + <PTOOtherElements>none</PTOOtherElements> + </PTO> + <Components> + <Engine> + <Data id="ENG-GenericEngine"> + <Manufacturer>Generic Vendor</Manufacturer> + <Model>Generic Engine</Model> + <CertificationNumber>ENG-Generic Engine</CertificationNumber> + <Date>2017-11-20T12:31:47.2109026Z</Date> + <AppVersion>VectoCore</AppVersion> + <Displacement>13000</Displacement> + <IdlingSpeed>600</IdlingSpeed> + <RatedSpeed>1736</RatedSpeed> + <RatedPower>325032</RatedPower> + <MaxEngineTorque>2134</MaxEngineTorque> + <WHTCUrban>1.0400</WHTCUrban> + <WHTCRural>1.0100</WHTCRural> + <WHTCMotorway>1.0000</WHTCMotorway> + <BFColdHot>1.0000</BFColdHot> + <CFRegPer>1.0000</CFRegPer> + <CFNCV>1.0000</CFNCV> + <FuelType>Diesel CI</FuelType> + <FuelConsumptionMap> + <Entry engineSpeed="600.00" torque="-150.00" fuelConsumption="0.00" /> + <Entry engineSpeed="600.00" torque="0.00" fuelConsumption="1488.18" /> + <Entry engineSpeed="600.00" torque="216.90" fuelConsumption="3609.53" /> + <Entry engineSpeed="600.00" torque="433.80" fuelConsumption="6055.65" /> + <Entry engineSpeed="600.00" torque="650.70" fuelConsumption="8756.65" /> + <Entry engineSpeed="600.00" torque="867.60" fuelConsumption="10922.44" /> + <Entry engineSpeed="600.00" torque="1084.50" fuelConsumption="13315.08" /> + <Entry engineSpeed="600.00" torque="1301.40" fuelConsumption="15886.96" /> + <Entry engineSpeed="600.00" torque="1518.30" fuelConsumption="18459.52" /> + <Entry engineSpeed="600.00" torque="1735.20" fuelConsumption="21032.07" /> + <Entry engineSpeed="600.00" torque="1952.10" fuelConsumption="23604.64" /> + <Entry engineSpeed="600.00" torque="2169.00" fuelConsumption="26177.20" /> + <Entry engineSpeed="748.90" torque="-153.25" fuelConsumption="0.00" /> + <Entry engineSpeed="748.90" torque="0.00" fuelConsumption="1807.12" /> + <Entry engineSpeed="748.90" torque="216.90" fuelConsumption="4373.53" /> + <Entry engineSpeed="748.90" torque="433.80" fuelConsumption="7475.64" /> + <Entry engineSpeed="748.90" torque="650.70" fuelConsumption="10457.98" /> + <Entry engineSpeed="748.90" torque="867.60" fuelConsumption="13478.84" /> + <Entry engineSpeed="748.90" torque="1084.50" fuelConsumption="16596.51" /> + <Entry engineSpeed="748.90" torque="1301.40" fuelConsumption="19894.53" /> + <Entry engineSpeed="748.90" torque="1518.30" fuelConsumption="23170.22" /> + <Entry engineSpeed="748.90" torque="1735.20" fuelConsumption="26588.36" /> + <Entry engineSpeed="748.90" torque="1952.10" fuelConsumption="29968.67" /> + <Entry engineSpeed="748.90" torque="2169.00" fuelConsumption="33353.96" /> + <Entry engineSpeed="897.80" torque="-159.33" fuelConsumption="0.00" /> + <Entry engineSpeed="897.80" torque="0.00" fuelConsumption="2408.37" /> + <Entry engineSpeed="897.80" torque="216.90" fuelConsumption="5478.92" /> + <Entry engineSpeed="897.80" torque="433.80" fuelConsumption="8922.38" /> + <Entry engineSpeed="897.80" torque="650.70" fuelConsumption="12260.27" /> + <Entry engineSpeed="897.80" torque="867.60" fuelConsumption="15955.34" /> + <Entry engineSpeed="897.80" torque="1084.50" fuelConsumption="19735.59" /> + <Entry engineSpeed="897.80" torque="1301.40" fuelConsumption="23532.52" /> + <Entry engineSpeed="897.80" torque="1518.30" fuelConsumption="27401.60" /> + <Entry engineSpeed="897.80" torque="1735.20" fuelConsumption="31431.48" /> + <Entry engineSpeed="897.80" torque="1952.10" fuelConsumption="35551.49" /> + <Entry engineSpeed="897.80" torque="2169.00" fuelConsumption="39938.19" /> + <Entry engineSpeed="1046.70" torque="-167.79" fuelConsumption="0.00" /> + <Entry engineSpeed="1046.70" torque="0.00" fuelConsumption="3027.57" /> + <Entry engineSpeed="1046.70" torque="216.90" fuelConsumption="6592.96" /> + <Entry engineSpeed="1046.70" torque="433.80" fuelConsumption="10304.72" /> + <Entry engineSpeed="1046.70" torque="650.70" fuelConsumption="14130.84" /> + <Entry engineSpeed="1046.70" torque="867.60" fuelConsumption="18430.08" /> + <Entry engineSpeed="1046.70" torque="1084.50" fuelConsumption="22831.37" /> + <Entry engineSpeed="1046.70" torque="1301.40" fuelConsumption="27074.27" /> + <Entry engineSpeed="1046.70" torque="1518.30" fuelConsumption="31464.60" /> + <Entry engineSpeed="1046.70" torque="1735.20" fuelConsumption="36010.76" /> + <Entry engineSpeed="1046.70" torque="1952.10" fuelConsumption="40847.22" /> + <Entry engineSpeed="1046.70" torque="2169.00" fuelConsumption="46065.97" /> + <Entry engineSpeed="1195.57" torque="-178.58" fuelConsumption="0.00" /> + <Entry engineSpeed="1195.57" torque="0.00" fuelConsumption="3363.15" /> + <Entry engineSpeed="1195.57" torque="216.90" fuelConsumption="7335.38" /> + <Entry engineSpeed="1195.57" torque="433.80" fuelConsumption="11515.29" /> + <Entry engineSpeed="1195.57" torque="650.70" fuelConsumption="16035.00" /> + <Entry engineSpeed="1195.57" torque="867.60" fuelConsumption="20991.82" /> + <Entry engineSpeed="1195.57" torque="1084.50" fuelConsumption="25994.51" /> + <Entry engineSpeed="1195.57" torque="1301.40" fuelConsumption="30827.23" /> + <Entry engineSpeed="1195.57" torque="1518.30" fuelConsumption="35706.34" /> + <Entry engineSpeed="1195.57" torque="1735.20" fuelConsumption="40827.13" /> + <Entry engineSpeed="1195.57" torque="1952.10" fuelConsumption="46406.83" /> + <Entry engineSpeed="1195.57" torque="2169.00" fuelConsumption="51871.18" /> + <Entry engineSpeed="1359.19" torque="-197.42" fuelConsumption="0.00" /> + <Entry engineSpeed="1359.19" torque="0.00" fuelConsumption="4184.19" /> + <Entry engineSpeed="1359.19" torque="216.90" fuelConsumption="8425.73" /> + <Entry engineSpeed="1359.19" torque="433.80" fuelConsumption="13344.09" /> + <Entry engineSpeed="1359.19" torque="650.70" fuelConsumption="18488.94" /> + <Entry engineSpeed="1359.19" torque="867.60" fuelConsumption="23710.52" /> + <Entry engineSpeed="1359.19" torque="1084.50" fuelConsumption="29183.94" /> + <Entry engineSpeed="1359.19" torque="1301.40" fuelConsumption="34869.73" /> + <Entry engineSpeed="1359.19" torque="1518.30" fuelConsumption="40569.44" /> + <Entry engineSpeed="1359.19" torque="1735.20" fuelConsumption="46859.18" /> + <Entry engineSpeed="1359.19" torque="1952.10" fuelConsumption="53535.69" /> + <Entry engineSpeed="1359.19" torque="2169.00" fuelConsumption="59527.43" /> + <Entry engineSpeed="1484.00" torque="-216.03" fuelConsumption="0.00" /> + <Entry engineSpeed="1484.00" torque="0.00" fuelConsumption="4778.54" /> + <Entry engineSpeed="1484.00" torque="216.90" fuelConsumption="9374.62" /> + <Entry engineSpeed="1484.00" torque="433.80" fuelConsumption="14744.80" /> + <Entry engineSpeed="1484.00" torque="650.70" fuelConsumption="20327.76" /> + <Entry engineSpeed="1484.00" torque="867.60" fuelConsumption="26067.43" /> + <Entry engineSpeed="1484.00" torque="1084.50" fuelConsumption="31952.86" /> + <Entry engineSpeed="1484.00" torque="1301.40" fuelConsumption="38111.10" /> + <Entry engineSpeed="1484.00" torque="1518.30" fuelConsumption="44443.35" /> + <Entry engineSpeed="1484.00" torque="1735.20" fuelConsumption="51470.04" /> + <Entry engineSpeed="1484.00" torque="1952.10" fuelConsumption="58756.61" /> + <Entry engineSpeed="1484.00" torque="2169.00" fuelConsumption="65464.76" /> + <Entry engineSpeed="1608.90" torque="-236.34" fuelConsumption="0.00" /> + <Entry engineSpeed="1608.90" torque="0.00" fuelConsumption="5366.63" /> + <Entry engineSpeed="1608.90" torque="216.90" fuelConsumption="10403.91" /> + <Entry engineSpeed="1608.90" torque="433.80" fuelConsumption="16163.11" /> + <Entry engineSpeed="1608.90" torque="650.70" fuelConsumption="22182.12" /> + <Entry engineSpeed="1608.90" torque="867.60" fuelConsumption="28597.95" /> + <Entry engineSpeed="1608.90" torque="1084.50" fuelConsumption="34917.01" /> + <Entry engineSpeed="1608.90" torque="1301.40" fuelConsumption="41482.64" /> + <Entry engineSpeed="1608.90" torque="1518.30" fuelConsumption="48448.45" /> + <Entry engineSpeed="1608.90" torque="1735.20" fuelConsumption="56115.31" /> + <Entry engineSpeed="1608.90" torque="1952.10" fuelConsumption="63908.02" /> + <Entry engineSpeed="1608.90" torque="2169.00" fuelConsumption="71473.19" /> + <Entry engineSpeed="1733.80" torque="-253.92" fuelConsumption="0.00" /> + <Entry engineSpeed="1733.80" torque="0.00" fuelConsumption="6131.02" /> + <Entry engineSpeed="1733.80" torque="216.90" fuelConsumption="11766.81" /> + <Entry engineSpeed="1733.80" torque="433.80" fuelConsumption="17828.63" /> + <Entry engineSpeed="1733.80" torque="650.70" fuelConsumption="24479.55" /> + <Entry engineSpeed="1733.80" torque="867.60" fuelConsumption="31562.49" /> + <Entry engineSpeed="1733.80" torque="1084.50" fuelConsumption="38232.16" /> + <Entry engineSpeed="1733.80" torque="1301.40" fuelConsumption="45509.86" /> + <Entry engineSpeed="1733.80" torque="1518.30" fuelConsumption="53112.67" /> + <Entry engineSpeed="1733.80" torque="1735.20" fuelConsumption="61204.37" /> + <Entry engineSpeed="1733.80" torque="1952.10" fuelConsumption="69616.48" /> + <Entry engineSpeed="1733.80" torque="2169.00" fuelConsumption="77908.71" /> + <Entry engineSpeed="1858.61" torque="-274.22" fuelConsumption="0.00" /> + <Entry engineSpeed="1858.61" torque="0.00" fuelConsumption="7348.60" /> + <Entry engineSpeed="1858.61" torque="216.90" fuelConsumption="13406.42" /> + <Entry engineSpeed="1858.61" torque="433.80" fuelConsumption="19725.74" /> + <Entry engineSpeed="1858.61" torque="650.70" fuelConsumption="26797.91" /> + <Entry engineSpeed="1858.61" torque="867.60" fuelConsumption="34515.72" /> + <Entry engineSpeed="1858.61" torque="1084.50" fuelConsumption="42106.72" /> + <Entry engineSpeed="1858.61" torque="1301.40" fuelConsumption="50047.02" /> + <Entry engineSpeed="1858.61" torque="1518.30" fuelConsumption="58207.47" /> + <Entry engineSpeed="1858.61" torque="1735.20" fuelConsumption="66630.83" /> + <Entry engineSpeed="1858.61" torque="1952.10" fuelConsumption="75353.62" /> + <Entry engineSpeed="1858.61" torque="2169.00" fuelConsumption="84031.99" /> + </FuelConsumptionMap> + <FullLoadAndDragCurve> + <Entry engineSpeed="600.00" maxTorque="1188.00" dragTorque="-138.00" /> + <Entry engineSpeed="800.00" maxTorque="1661.00" dragTorque="-143.00" /> + <Entry engineSpeed="1000.00" maxTorque="2134.00" dragTorque="-152.00" /> + <Entry engineSpeed="1200.00" maxTorque="2134.00" dragTorque="-165.00" /> + <Entry engineSpeed="1400.00" maxTorque="2134.00" dragTorque="-187.00" /> + <Entry engineSpeed="1600.00" maxTorque="1928.00" dragTorque="-217.00" /> + <Entry engineSpeed="1800.00" maxTorque="1722.00" dragTorque="-244.00" /> + <Entry engineSpeed="2000.00" maxTorque="1253.00" dragTorque="-278.00" /> + <Entry engineSpeed="2100.00" maxTorque="750.00" dragTorque="-296.00" /> + <Entry engineSpeed="2200.00" maxTorque="0.00" dragTorque="-314.00" /> + </FullLoadAndDragCurve> + </Data> + <Signature> + <Reference URI="#ENG-GenericEngine" xmlns="http://www.w3.org/2000/09/xmldsig#"> + <Transforms> + <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> + <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + </Transforms> + <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <DigestValue></DigestValue> + </Reference> + </Signature> + </Engine> + <Gearbox> + <Data id="GBX-GB_12-gear"> + <Manufacturer>Generic Vendor</Manufacturer> + <Model>GB_12-gear</Model> + <CertificationNumber>GBX-GB_12-gear</CertificationNumber> + <Date>2017-11-20T12:31:47.2109026Z</Date> + <AppVersion>VectoCore</AppVersion> + <TransmissionType>AMT</TransmissionType> + <MainCertificationMethod>Standard values</MainCertificationMethod> + <Gears> + <Gear number="1"> + <Ratio>14.930</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="50000.00" torqueLoss="2000.00" /> + </TorqueLossMap> + </Gear> + <Gear number="2"> + <Ratio>11.640</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="50000.00" torqueLoss="2000.00" /> + </TorqueLossMap> + </Gear> + <Gear number="3"> + <Ratio>9.020</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="50000.00" torqueLoss="2000.00" /> + </TorqueLossMap> + </Gear> + <Gear number="4"> + <Ratio>7.040</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="50000.00" torqueLoss="2000.00" /> + </TorqueLossMap> + </Gear> + <Gear number="5"> + <Ratio>5.640</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="50000.00" torqueLoss="2000.00" /> + </TorqueLossMap> + </Gear> + <Gear number="6"> + <Ratio>4.400</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="50000.00" torqueLoss="2000.00" /> + </TorqueLossMap> + </Gear> + <Gear number="7"> + <Ratio>3.390</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="50000.00" torqueLoss="2000.00" /> + </TorqueLossMap> + </Gear> + <Gear number="8"> + <Ratio>2.650</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="50000.00" torqueLoss="2000.00" /> + </TorqueLossMap> + </Gear> + <Gear number="9"> + <Ratio>2.050</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="50000.00" torqueLoss="2000.00" /> + </TorqueLossMap> + </Gear> + <Gear number="10"> + <Ratio>1.600</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="50000.00" torqueLoss="2000.00" /> + </TorqueLossMap> + </Gear> + <Gear number="11"> + <Ratio>1.280</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="0.00" inputTorque="-125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="125.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="780.00" torqueLoss="31.00" /> + <Entry inputSpeed="5000.00" inputTorque="50000.00" torqueLoss="2000.00" /> + </TorqueLossMap> + </Gear> + <Gear number="12"> + <Ratio>1.000</Ratio> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-50000.00" torqueLoss="1000.00" /> + <Entry inputSpeed="0.00" inputTorque="-250.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="250.00" torqueLoss="5.00" /> + <Entry inputSpeed="0.00" inputTorque="50000.00" torqueLoss="1000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-50000.00" torqueLoss="1000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-845.00" torqueLoss="17.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="17.00" /> + <Entry inputSpeed="5000.00" inputTorque="845.00" torqueLoss="17.00" /> + <Entry inputSpeed="5000.00" inputTorque="50000.00" torqueLoss="1000.00" /> + </TorqueLossMap> + </Gear> + </Gears> + </Data> + <Signature> + <Reference URI="#GBX-GB_12-gear" xmlns="http://www.w3.org/2000/09/xmldsig#"> + <Transforms> + <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> + <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + </Transforms> + <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <DigestValue></DigestValue> + </Reference> + </Signature> + </Gearbox> + <Retarder> + <Data id="RET-RET-generic"> + <Manufacturer>Generic Vendor</Manufacturer> + <Model>RET-generic</Model> + <CertificationNumber>standard values</CertificationNumber> + <Date>2017-11-20T12:31:47.2109026Z</Date> + <AppVersion>VectoCore</AppVersion> + <CertificationMethod>Standard values</CertificationMethod> + <RetarderLossMap> + <Entry retarderSpeed="0.00" torqueLoss="10.00" /> + <Entry retarderSpeed="100.00" torqueLoss="10.00" /> + <Entry retarderSpeed="200.00" torqueLoss="10.10" /> + <Entry retarderSpeed="300.00" torqueLoss="10.20" /> + <Entry retarderSpeed="400.00" torqueLoss="10.30" /> + <Entry retarderSpeed="500.00" torqueLoss="10.50" /> + <Entry retarderSpeed="600.00" torqueLoss="10.70" /> + <Entry retarderSpeed="700.00" torqueLoss="11.00" /> + <Entry retarderSpeed="800.00" torqueLoss="11.30" /> + <Entry retarderSpeed="900.00" torqueLoss="11.60" /> + <Entry retarderSpeed="1000.00" torqueLoss="12.00" /> + <Entry retarderSpeed="1100.00" torqueLoss="12.40" /> + <Entry retarderSpeed="1200.00" torqueLoss="12.90" /> + <Entry retarderSpeed="1300.00" torqueLoss="13.40" /> + <Entry retarderSpeed="1400.00" torqueLoss="13.90" /> + <Entry retarderSpeed="1500.00" torqueLoss="14.50" /> + <Entry retarderSpeed="1600.00" torqueLoss="15.10" /> + <Entry retarderSpeed="1700.00" torqueLoss="15.80" /> + <Entry retarderSpeed="1800.00" torqueLoss="16.50" /> + <Entry retarderSpeed="1900.00" torqueLoss="17.20" /> + <Entry retarderSpeed="2000.00" torqueLoss="18.00" /> + <Entry retarderSpeed="2100.00" torqueLoss="18.80" /> + <Entry retarderSpeed="2200.00" torqueLoss="19.70" /> + <Entry retarderSpeed="2300.00" torqueLoss="20.60" /> + <Entry retarderSpeed="2400.00" torqueLoss="21.50" /> + <Entry retarderSpeed="2500.00" torqueLoss="22.50" /> + <Entry retarderSpeed="2600.00" torqueLoss="23.50" /> + <Entry retarderSpeed="2700.00" torqueLoss="24.60" /> + <Entry retarderSpeed="2800.00" torqueLoss="25.70" /> + <Entry retarderSpeed="2900.00" torqueLoss="26.80" /> + <Entry retarderSpeed="3000.00" torqueLoss="28.00" /> + </RetarderLossMap> + </Data> + <Signature> + <Reference URI="#RET-RET-generic" xmlns="http://www.w3.org/2000/09/xmldsig#"> + <Transforms> + <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> + <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + </Transforms> + <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <DigestValue></DigestValue> + </Reference> + </Signature> + </Retarder> + <Axlegear> + <Data id="AXLGEAR-2640"> + <Manufacturer>Generic Vendor</Manufacturer> + <Model>N.A.</Model> + <CertificationNumber>AXLGEAR-2640</CertificationNumber> + <Date>2017-11-20T12:31:47.2265469Z</Date> + <AppVersion>VectoCore</AppVersion> + <LineType>Single portal axle</LineType> + <Ratio>2.640</Ratio> + <CertificationMethod>Standard values</CertificationMethod> + <TorqueLossMap> + <Entry inputSpeed="0.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="0.00" inputTorque="-200.00" torqueLoss="8.00" /> + <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="8.00" /> + <Entry inputSpeed="0.00" inputTorque="200.00" torqueLoss="8.00" /> + <Entry inputSpeed="0.00" inputTorque="50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-50000.00" torqueLoss="2000.00" /> + <Entry inputSpeed="5000.00" inputTorque="-1253.00" torqueLoss="50.00" /> + <Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="50.00" /> + <Entry inputSpeed="5000.00" inputTorque="1253.00" torqueLoss="50.00" /> + <Entry inputSpeed="5000.00" inputTorque="50000.00" torqueLoss="2000.00" /> + </TorqueLossMap> + </Data> + <Signature> + <Reference URI="#AXLGEAR-2640" xmlns="http://www.w3.org/2000/09/xmldsig#"> + <Transforms> + <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> + <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + </Transforms> + <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <DigestValue></DigestValue> + </Reference> + </Signature> + </Axlegear> + <AxleWheels> + <Data> + <Axles> + <Axle axleNumber="1"> + <AxleType>VehicleNonDriven</AxleType> + <TwinTyres>false</TwinTyres> + <Steered>true</Steered> + <Tyre> + <Data id="TYRE-315_70R225"> + <Manufacturer>Generic Vendor</Manufacturer> + <Model>315/70 R22.5</Model> + <CertificationNumber>TYRE-315/70 R22.5</CertificationNumber> + <Date>2017-11-20T12:31:47.320285Z</Date> + <AppVersion>VectoCore</AppVersion> + <Dimension>315/70 R22.5</Dimension> + <RRCDeclared>0.0045</RRCDeclared> + <FzISO>33350</FzISO> + </Data> + <Signature> + <Reference URI="#TYRE-315_70R225" xmlns="http://www.w3.org/2000/09/xmldsig#"> + <Transforms> + <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> + <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + </Transforms> + <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <DigestValue></DigestValue> + </Reference> + </Signature> + </Tyre> + </Axle> + <Axle axleNumber="2"> + <AxleType>VehicleDriven</AxleType> + <TwinTyres>true</TwinTyres> + <Steered>false</Steered> + <Tyre> + <Data id="TYRE-315_70R225"> + <Manufacturer>Generic Vendor</Manufacturer> + <Model>315/70 R22.5</Model> + <CertificationNumber>TYRE-315/70 R22.5</CertificationNumber> + <Date>2017-11-20T12:31:47.320285Z</Date> + <AppVersion>VectoCore</AppVersion> + <Dimension>315/70 R22.5</Dimension> + <RRCDeclared>0.0055</RRCDeclared> + <FzISO>33350</FzISO> + </Data> + <Signature> + <Reference URI="#TYRE-315_70R225" xmlns="http://www.w3.org/2000/09/xmldsig#"> + <Transforms> + <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> + <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + </Transforms> + <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <DigestValue></DigestValue> + </Reference> + </Signature> + </Tyre> + </Axle> + </Axles> + </Data> + </AxleWheels> + <Auxiliaries> + <Data> + <Fan> + <Technology>Belt driven or driven via transm. - Electronically controlled visco clutch</Technology> + </Fan> + <SteeringPump> + <Technology>Variable displacement mech. controlled</Technology> + </SteeringPump> + <ElectricSystem> + <Technology>Standard technology</Technology> + </ElectricSystem> + <PneumaticSystem> + <Technology>Medium Supply 1-stage</Technology> + </PneumaticSystem> + <HVAC> + <Technology>Default</Technology> + </HVAC> + </Data> + </Auxiliaries> + <AirDrag> + <Data id="Airdrag-genericcabin"> + <Manufacturer>Generic Vendor</Manufacturer> + <Model>N.A.</Model> + <CertificationNumber>generic cabin</CertificationNumber> + <Date>2017-11-20T12:31:47.3359104Z</Date> + <AppVersion>VectoCore</AppVersion> + <CdxA_0>5.50</CdxA_0> + <TransferredCdxA>5.50</TransferredCdxA> + <DeclaredCdxA>5.50</DeclaredCdxA> + </Data> + <Signature> + <Reference URI="#Airdrag-genericcabin" xmlns="http://www.w3.org/2000/09/xmldsig#"> + <Transforms> + <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithoutComments" /> + <Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + </Transforms> + <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <DigestValue></DigestValue> + </Reference> + </Signature> + </AirDrag> + </Components> + </Vehicle> +</tns:VectoInputDeclaration> \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/Utils/InputDataHelper.cs b/VectoCore/VectoCoreTest/Utils/InputDataHelper.cs index 17f6f39a52601e6ed58faa04d1fe8b965b5b9ed7..c42ea75b75134127120072c94c9dcdf0e7ec0673 100644 --- a/VectoCore/VectoCoreTest/Utils/InputDataHelper.cs +++ b/VectoCore/VectoCoreTest/Utils/InputDataHelper.cs @@ -29,23 +29,23 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using System.IO; - -namespace TUGraz.VectoCore.Tests.Utils -{ - public class InputDataHelper - { - public static MemoryStream InputDataAsStream(string header, string[] entries) - { - var cycleData = new MemoryStream(); - var writer = new StreamWriter(cycleData); - writer.WriteLine(header); - foreach (var entry in entries) { - writer.WriteLine(entry); - } - writer.Flush(); - cycleData.Seek(0, SeekOrigin.Begin); - return cycleData; - } - } +using System.IO; + +namespace TUGraz.VectoCore.Tests.Utils +{ + public class InputDataHelper + { + public static MemoryStream InputDataAsStream(string header, string[] entries) + { + var cycleData = new MemoryStream(); + var writer = new StreamWriter(cycleData); + writer.WriteLine(header); + foreach (var entry in entries) { + writer.WriteLine(entry); + } + writer.Flush(); + cycleData.Seek(0, SeekOrigin.Begin); + return cycleData; + } + } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/Utils/MockEngineDataProvider.cs b/VectoCore/VectoCoreTest/Utils/MockEngineDataProvider.cs index f857cd088e1604a06af5a162e084678a160a5c44..7d6b8fe9010921d6d1dc6fbdbbce5299d58b52c9 100644 --- a/VectoCore/VectoCoreTest/Utils/MockEngineDataProvider.cs +++ b/VectoCore/VectoCoreTest/Utils/MockEngineDataProvider.cs @@ -48,7 +48,7 @@ namespace TUGraz.VectoCore.Tests.Utils public string TechnicalReportId { get; set; } public CertificationMethod CertificationMethod { get{return CertificationMethod.NotCertified;} } public string CertificationNumber { get; set; } - public string DigestValue { get; set; } + public DigestData DigestValue { get; set; } public CubicMeter Displacement { get; set; } public PerSecond IdleSpeed { get; set; } public double WHTCMotorway { get; set; } diff --git a/VectoCore/VectoCoreTest/Utils/SITest.cs b/VectoCore/VectoCoreTest/Utils/SITest.cs index 0f33c29dde7675d1c3565dbd7abd0bc3bc5fb2e2..6fda6e87e3ddfa70a8b130e682e173ef70a4248b 100644 --- a/VectoCore/VectoCoreTest/Utils/SITest.cs +++ b/VectoCore/VectoCoreTest/Utils/SITest.cs @@ -778,6 +778,15 @@ namespace TUGraz.VectoCore.Tests.Utils } + [TestCase(0.2/1000/3600, 200)] + public void SI_Convert_ConvertToGramPerKiloWattHour(double val, double converted) + { + var siVal = val.SI<SpecificFuelConsumption>(); + var siConv = siVal.ConvertToGramPerKiloWattHour(); + Assert.AreEqual(converted, siConv, 1e-12); + Assert.AreEqual("g/kWh", siConv.Units); + } + } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index fd7ee6d64adfd81d9587e8a85b5c58005e1aec4e..2e5632eab9edf0955430bfbb304033e90755218c 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -105,6 +105,7 @@ <Compile Include="Models\SimulationComponent\ATGearboxTest.cs" /> <Compile Include="Models\SimulationComponent\EngineFanAuxTest.cs" /> <Compile Include="Models\SimulationComponent\GearboxShiftLossesTest.cs" /> + <Compile Include="Models\SimulationComponent\VTPCycleValidationTest.cs" /> <Compile Include="Models\Simulation\FactoryTest.cs" /> <Compile Include="Models\Simulation\PTOIdleLossTest.cs" /> <Compile Include="Models\Simulation\LossMapRangeValidationTest.cs" /> @@ -978,6 +979,12 @@ <None Include="TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Axle_4x2_Tractor.vtlm"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Class5_Tractor_DECL_primRet.vecto"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Class5_Tractor_primRet.vveh"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\Integration\DeclarationMode\Class5_Tractor_4x2\Class5_Tractor_NoAirdrag.vveh"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> @@ -1733,6 +1740,9 @@ <None Include="TestData\Integration\FullPowerTrain\unlimited.vacc"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\Integration\VTPMode\GenericVehicle\class_5_generic vehicle_DECL.vecto"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\Integration\VTPMode\GenericVehicle\class_5_generic vehicle_noGear.vecto"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> @@ -2667,6 +2677,9 @@ <Content Include="TestData\Integration\VTPMode\GenericVehicle\Generic Engine.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="TestData\Integration\VTPMode\GenericVehicle\Tractor_4x2_vehicle-class-5_Generic vehicle.RSLT_MANUFACTURER.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="TestData\Integration\VTPMode\GenericVehicle\Tractor_4x2_vehicle-class-5_Generic vehicle.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content>