From 7a67d9b2cf56b33b00f7b5eadbd5a2c550fc8610 Mon Sep 17 00:00:00 2001 From: Bernd Gassmann Date: Thu, 25 Apr 2019 14:11:15 +0200 Subject: [PATCH] Allow multiple situations per ego vehicle/object pair Especially in intersection scenarios RSS has to check multiple configurations: ego vehicle as well as the other object have multiple possible routes through the intersection. Every route pair can introduce a new situation between the two vehicles. To cover the worst case all of them have to be analyzed. This has some further consequences for the implementation of the ad-rss- lib: Add RssSituationIdProvider and made RssSituationExtraction a class holding RssSituationIdProvider instance to keep track of the different situation classes. By this, multiple scenes of one time step might end up to represent actually the same situation. These situation descriptions are merged in the sense of the worst case within RssSituationExtraction to ensure, that the situation id in the resulting SituationVector is unique. Furthermore, the velocity components of the ego vehicle differ if the roadArea of the scene changes; therefore the egoVehicle object description (with occupied regions and velocity) had to be moved into the world::Scene. As this would have duplicated the egoVehicle dynamics, those had to be separated from the world::Object description. The type world::Dynamics was renamed to world::RssDynamics and expanded by the responseTime. world::Scene got the objectRssDynamics; whereas world::WorldModel got assigned the egoVehicleRssDynamics. RssCheckTestBaseT: egoVehicle response time became actually different from object response time, which requires some adaptions and fixes. --- CHANGELOG.md | 6 + CMakeLists.txt | 3 +- ...-rss-lib-Integrate_Into_Sense-Plan-Act.png | Bin 0 -> 50892 bytes ...l_be889d20-6794-4049-9794-d3555b46b011.tmp | Bin 213305 -> 0 bytes ...l_fbbf525c-6d26-4db6-be96-562cf15945e3.tmp | Bin 194438 -> 0 bytes ...l_cf35bf58-51f1-4c55-8eb1-fd3370252605.tmp | Bin 43136 -> 0 bytes ...l_90081a18-623a-4a47-80b5-3abc67de4368.tmp | Bin 142212 -> 0 bytes ...l_6a8e202b-427e-48f6-9808-d435d7eeaeb7.tmp | Bin 154334 -> 0 bytes ...l_713a53a1-6c2f-4b60-8556-f96db75de4c2.tmp | Bin 256537 -> 0 bytes ...l_ef5c4189-bcfd-44c3-a65e-ad0474f97336.tmp | Bin 226187 -> 0 bytes ...l_c2fb13b9-d00b-4b50-be4e-9e3fa5315c11.tmp | Bin 165281 -> 0 bytes ...l_a74eeada-8027-4d53-9713-8550ffb5b82b.tmp | Bin 133706 -> 0 bytes doc/images/rss_integration.png | Bin 37845 -> 0 bytes ...d_coordinate_system_creation_road_area.svg | 90 +- ...HLD-KeyDesignDecisionsAndAlternatives.adoc | 4 +- doc/includes/HLD-SwArchitecture.adoc | 608 +------- doc/includes/Overview.adoc | 4 +- include/ad_rss/core/RssCheck.hpp | 2 + .../ad_rss/core/RssSituationExtraction.hpp | 99 +- .../ad_rss/situation/VehicleState.hpp | 14 +- .../situation/VehicleStateValidInputRange.hpp | 11 +- include/generated/ad_rss/world/Object.hpp | 21 +- include/generated/ad_rss/world/ObjectType.hpp | 11 +- .../world/ObjectTypeValidInputRange.hpp | 3 +- .../ad_rss/world/ObjectValidInputRange.hpp | 14 +- .../world/{Dynamics.hpp => RssDynamics.hpp} | 44 +- ...nge.hpp => RssDynamicsValidInputRange.hpp} | 19 +- include/generated/ad_rss/world/Scene.hpp | 33 +- .../ad_rss/world/SceneValidInputRange.hpp | 6 +- include/generated/ad_rss/world/WorldModel.hpp | 14 +- .../world/WorldModelValidInputRange.hpp | 4 +- src/core/RssCheck.cpp | 7 +- src/core/RssResponseTransformation.cpp | 21 +- src/core/RssSituationExtraction.cpp | 169 ++- src/core/RssState.hpp | 4 +- src/generated/world/ObjectType.cpp | 10 + src/situation/RssFormulas.cpp | 18 +- src/situation/RssIntersectionChecker.cpp | 8 +- src/situation/RssSituation.cpp | 8 +- ...RssSituationCoordinateSystemConversion.cpp | 25 +- ...RssSituationCoordinateSystemConversion.hpp | 11 +- src/world/RssSituationIdProvider.cpp | 189 +++ src/world/RssSituationIdProvider.hpp | 136 ++ tests/CMakeLists.txt | 5 +- tests/core/RssCheckIntersectionTests.cpp | 25 +- tests/core/RssCheckLateralTests.cpp | 117 +- tests/core/RssCheckNotRelevantTests.cpp | 8 +- tests/core/RssCheckObjectTests.cpp | 36 +- tests/core/RssCheckOppositeDirectionTests.cpp | 14 +- tests/core/RssCheckSameDirectionTests.cpp | 36 +- tests/core/RssCheckTestBaseT.hpp | 74 +- .../RssSituationExtractionInputRangeTests.cpp | 24 +- ...ssSituationExtractionIntersectionTests.cpp | 209 +-- ...uationExtractionOppositeDirectionTests.cpp | 53 +- ...tuationExtractionRelativePositionTests.cpp | 34 +- ...sSituationExtractionSameDirectionTests.cpp | 243 ++- tests/core/RssSituationIdProviderTests.cpp | 167 +++ tests/generated/CMakeLists.txt | 4 +- tests/generated/situation/SituationTests.cpp | 36 +- .../SituationValidInputRangeTests.cpp | 180 +-- .../SituationVectorValidInputRangeTests.cpp | 40 +- .../generated/situation/VehicleStateTests.cpp | 26 +- .../VehicleStateValidInputRangeTests.cpp | 227 +-- tests/generated/world/ObjectTests.cpp | 81 +- tests/generated/world/ObjectTypeTests.cpp | 8 + .../world/ObjectTypeValidInputRangeTests.cpp | 2 + .../world/ObjectValidInputRangeTests.cpp | 502 +------ ...DynamicsTests.cpp => RssDynamicsTests.cpp} | 65 +- ...pp => RssDynamicsValidInputRangeTests.cpp} | 155 +- tests/generated/world/SceneTests.cpp | 336 +++-- .../world/SceneValidInputRangeTests.cpp | 1298 +++++++++++------ .../world/SceneVectorValidInputRangeTests.cpp | 188 ++- tests/generated/world/WorldModelTests.cpp | 402 +++-- .../world/WorldModelValidInputRangeTests.cpp | 899 ++++++------ .../RssFormulaTestsInputRangeChecks.cpp | 4 +- .../RssSituationCheckingInputRangeTests.cpp | 4 +- ...ituationCheckingTestsOppositeDirection.cpp | 4 +- tests/test_support/TestSupport.cpp | 179 ++- tests/test_support/TestSupport.hpp | 94 +- 79 files changed, 3876 insertions(+), 3519 deletions(-) create mode 100755 doc/images/ad-rss-lib-Integrate_Into_Sense-Plan-Act.png delete mode 100755 doc/images/img/0eba3100-9694-4554-be43-1f291486cf5d_url_be889d20-6794-4049-9794-d3555b46b011.tmp delete mode 100755 doc/images/img/143f273a-ef21-4afe-934b-398bcf53031c_url_fbbf525c-6d26-4db6-be96-562cf15945e3.tmp delete mode 100755 doc/images/img/28dd631b-76c7-4e12-b824-a8f15653a0ce_url_cf35bf58-51f1-4c55-8eb1-fd3370252605.tmp delete mode 100755 doc/images/img/350f4915-f1b4-4d00-8cd4-1f9bd746bdcf_url_90081a18-623a-4a47-80b5-3abc67de4368.tmp delete mode 100755 doc/images/img/66a7f86d-bcc6-47a9-87a6-896fa6db21b6_url_6a8e202b-427e-48f6-9808-d435d7eeaeb7.tmp delete mode 100755 doc/images/img/70831045-c2fe-4322-96c8-4dc16b0d0c5d_url_713a53a1-6c2f-4b60-8556-f96db75de4c2.tmp delete mode 100755 doc/images/img/73fea5f0-2901-442f-a7df-c22d230d98ba_url_ef5c4189-bcfd-44c3-a65e-ad0474f97336.tmp delete mode 100755 doc/images/img/828d3498-dd41-460a-85db-a3139aa151ec_url_c2fb13b9-d00b-4b50-be4e-9e3fa5315c11.tmp delete mode 100755 doc/images/img/c4815d4c-bf13-48dc-b30a-8ba5db2123bb_url_a74eeada-8027-4d53-9713-8550ffb5b82b.tmp delete mode 100755 doc/images/rss_integration.png rename include/generated/ad_rss/world/{Dynamics.hpp => RssDynamics.hpp} (77%) rename include/generated/ad_rss/world/{DynamicsValidInputRange.hpp => RssDynamicsValidInputRange.hpp} (79%) create mode 100644 src/world/RssSituationIdProvider.cpp create mode 100644 src/world/RssSituationIdProvider.hpp create mode 100644 tests/core/RssSituationIdProviderTests.cpp rename tests/generated/world/{DynamicsTests.cpp => RssDynamicsTests.cpp} (74%) rename tests/generated/world/{DynamicsValidInputRangeTests.cpp => RssDynamicsValidInputRangeTests.cpp} (68%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c92682dbe..89d0e3a436 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,10 @@ ## Latest changes + +## Release 1.3.0 +* Allow multiple situations per ego vehicle/object pair: Add RssSituationIdProvider and made RssSituationExtraction a class holding RssSituationIdProvider instance to keep track of the different situation classes +* Renamed world::Dynamics in world::RssDynamics, extended it by responseTime and separated it from world::Object; world::Scene got the objectRssDynamics and world::WorldModel the egoVehicleRssDynamics each as separate elements +* Extended world::Scene by egoVehicle object description as occupied regions and velocity are actually scene dependent (e.g. when considering different vehicle predictions) +* Added world::ObjectType::Invalid * Small updates to be compliant to clang-tidy-3.8 static code analysis * Added basic FAQ * Added official support for Ubuntu 14.04 (GCC 4.8, Clang 3.4 and 3.8/3.9) diff --git a/CMakeLists.txt b/CMakeLists.txt index 591b45b522..1bdc3c24a3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,7 +38,7 @@ set(BUILD_STATIC_ANALYSIS "OFF" CACHE BOOL "Enable static code analysis") include(GNUInstallDirs) include(CMakePackageConfigHelpers) -project(ad-rss-lib VERSION 1.2.0) +project(ad-rss-lib VERSION 1.3.0) set(CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD 11) @@ -115,6 +115,7 @@ add_library(${PROJECT_NAME} SHARED src/situation/RssIntersectionChecker.cpp src/situation/RssSituation.cpp src/world/RssSituationCoordinateSystemConversion.cpp + src/world/RssSituationIdProvider.cpp src/world/RssObjectPositionExtractor.cpp ${GENERATED_SOURCES} ) diff --git a/doc/images/ad-rss-lib-Integrate_Into_Sense-Plan-Act.png b/doc/images/ad-rss-lib-Integrate_Into_Sense-Plan-Act.png new file mode 100755 index 0000000000000000000000000000000000000000..9df2b11a0365dc42c1e586686e94b4cbff75eaa4 GIT binary patch literal 50892 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

ayj0 zp)PMIDta9w*ni`VB{h9zUb!ExK2n?u+L_)O$(di0^O=2NPZ^nSu#9aitx9h$QMMN| z2{Sz6e*YBX6O<4ltlC{8_FHgdUmPe~XlW63UV?J3uki3KZdu2{mJ8Fn^l?w-h8e63 zW0kWfMnYo^xN8^h=Zedxy#qaF&}a~FAMg)AQb76go5uK?cvmU~&fHDDAS=a5plzu5#D28Y z6&~ukweDA=r9)x7v!;+RE4qmpu<9H)#v60Nc$=Lupt*i zIp$5Lt0lH1DwCRs31I&uHL3E9f3_U1yp`pU?5MJV2wcSc;xe+CajXw*bb8%@(48Bk z0*F$1(b8wFch^FSK;zi4UbF>hq=ZRX+jgtu1ShtCWn7-SS)Yz4&+cnY7R z;;pReUvr{2vBJX5ZlE#cc5x+8kiUO|$x%n;>-z%$3(e5$U6*#eIwM=*qWAXe?gvV< z{W#M!MrZ<2f%813rS)!vd)IUGN-s>3v3UeY2{MoS&7&x#IIHEf@x9%#+{5VoI>>yU zrbd54a#a4Ay9s@5T{7+(*_4-PB3Apr5c zSsQB%!=o&^a+OON;Pe3Gq%ojHHHrZ6nASKbt>lS{{GMCgw-3)1Q#TiyH zCmdO-EFF?a66*R1uAsVzk0mPL;+Zlrl|-ir4Pg#F6uCWoZT}q(W+acF0MK$cR8>E` zEiiST!@f?Ju64q|Dac)wCO-*GPxG4Px}1Q)y80ZR0cz(7Wzr(rHCThz5cSwbGe`QX z&)zp0WrQxwizhW4I29x2Bh1Hy!3!D5QgsI1VVu0{b*SrX>7^!ZVBTloz=UW6;R)y@ ze`zv1kjc?-SX;A4MWdQ9p_K7}@!!84c33`Y!Irpt`a)J!XnF={3aY5Bmb>3Pd)a|{ z{nC5I?u)VG4(7kRGQHj%bg?S3t=e&BThlBDz%7{id>v-w)S$IJEhBewY&dhAGTZZ> zgZffdT=bX>Dc`-w@-FA*`?Aj<)uCQq<3^dYZ&qM>D|ebZe@vdlFmhX@;U9dX3A%ARrG51MSo-tPIUcfQS0Q zkYRYC9z6^-;?I8w8Gy@tJP^MyR`R5jyRcy~Ex1dJ?rAq6Pw_ z>?S8p>bcV4N-B*Jx~)Mv`-|wox`K$gW_F{=30SfdX2Z+IG7aD`m>Iod<=q~%wVxP9 zznN>j6FgtWNj-1|7%JsP@9=|cjpT#qz)C~I?V0%es?72BJKE!2AMDTfcVc@4(tt9b z00lqAMS4TwfY~IQ(e2$*s4&nZJ}Gp0!@Hzz_U{y&|<9@L>m3w7obFz?1`NPJ}l)0o|l56nTzVR z+-)TlwguZ;ebO{XpPk`&KllQdNz`$u?ZNSkYPnoCJ( za@tDI#vj|+0IEAgi{tdUTt1I6+T8sygfT9XCbs-Yj9|k>8@o0T;l`0%@`vSC3@jF% zhT)_vfNGPL#7YS4z_1MZSq*F(L9rL@%_FMgHNd+>b+kc|-~iyw)U7M+rJp&9lEumM zw1=}+aZ#rSS3l&rOP&6for?K|Jfht0r&+-vDvP?XHKepA(`v!7L4pyy_!!iA!%nuG zB2@}JhAUxcTgOVxuf9``3z=iMLN_XBKYf^^9e&;LfSH(if8A)R)C8&R-z3bXhX$T# z6K#WT5Z6rztoR8lD7X{~I{}6BF0-z~`#ycaV}WHGz`X`Cvjfah&j4fd)^dGtKh7*1y@&3Xbt_GLIU4&MmlIT%I1nDgnLXpvyRRYpVhQ!So1Eu*>Ib~BOS`wE!Wb=9*G7ZtwNyYjKz)FO*0}I8_b1S=6m62ZH zozg8=oKAgci&D-RDn;+dI^a$^Ib)|gxTwW%>v+N_9dKfe61l8QOqk2&S@v^wJMlvv z|H*I^K?@2KDY8hbGRf9@JqxRm@U~p8aYvD3>O5>F;m}yXu_uue@*tt2oWMfXWIcb3 zYwa6d!%FzhI$aJ9o2S3nKnN6K_^TkyDMsbO^k|2#E__z(6cOvq7V`3 zB_d4$6Ceb(BE1PHX*Qb7sS>87c;B_p{?5JU>@&`|-}vtM#vS+WKV&!}D?V-= ziOHvNFzdottDxDqf-r_+Fff*xqpltgHPG!P?>aw=qgB7u5x#Cecz@Jyw^GnaZotlW zhtN8(!6?M*CceEM}XP)w_fi0)^3Fl0!YL)c?q0DjYBKybL`DdRIXztr<`)dgx6%aY6(mQG%r=}k z`7C%*oculDWmEK}Yx}lgU2^4bcv^BbYV$dYGNoN^{Twx4Jo3=oAE)RV6;P8;YOkz;x}LbZhP}&pcVF z%{cY_=+YdUOXrhmLzUPA(<=GSPtKFf`pvp8zEjp}A>Ll6r_=sXi&;9D{DJ$CR5Acx zObB#H@IyL@fC|1rR!l)tMnJ1UJ>{oNS?dI*lek*i^iQCe21pe7O1R_*Qpjh=SCE|~ zmX5G}d%cX=G^;5ekZ-7l%4d^noD4*V5f|vH01qa%Ed8q~_baeYr3l-XOlgoPD*1L=ad9iE%?(A& zYnHb7rDW$C&FB-gqw}d)mn(vq;}vIO{e}X2o>UI8LqExGu}_83S0S{fh`(P1`3g7! z*^O66b`r1iR-b|xNgt5NeBUnw6rwt;V_vM5KL8!$?@XGYUR=W;Wby?E2LSOZJe|Y#r8mPWskgay|ekJjQIugGh z?a)t%C}R2-*c!Ecd=WJiI$EG|1!K9z=nOL9CJ&%D zdv|bkxXGPTBffwUb1`3c@M8H*x9-!~0T+|+d^WkWC)lNnlxLKZr=#L+@@`LuU%)q9 z(aDQbUCi{hni%b5kQ(9k+bX9pj5Bl>GTKr~* z7V7gRv5KrwZbIqIu|u*UO!KHA2M~l-Nj+snR6c0awB{awc5H&Ru^!%Rhmqy{(Mt~E zr(yQj_euS7Ln^;ymH((JOg?+AI?djV)&F?x$z-(N-{$SV;8%inCjiIKMOUvvc0k|7 ze*oJ7HB!HboyZQr(Qq~F)J9t?upe0^G@ce>66-&9(brrToI$cB;qopUHV2dzVTVz3+P}PD?`6M2^S=Fk)SE<6stZ}j@$x(4QJ?@Uv?mMTmu~a zci6s(8lNSYNyM;Zep zo8*6^u5GmB<5!R*K;-wJ@d7B$<4674Xi!H>&UQo_;XeX65%0P1tVnV+mWOV0pTmUaSFFT-8-w{6jyxD;lk^ksj>^li5PDvJDRb!iHuS^ogWHi3(nG`50TW&i?bxn4y3sGvmlR+uTFcC+0>@olRaH z6cZKL{{srYN;+#c5%4nm_*I8)_2lxIjgvLgVK&Zb#y0)su8|vz2JYlLc%M}RYuoCr ze(~<19^9W9r7a$JCj2e#YAPLU3Ek%W5*=JJK(C57I+T6*^_`O?hiXmS;(eZ{hEu~F z?&{Xd`+hA7o6D0p%9umX2{WLz&S5;tlN@A!F8pFj_(S?@5mOS?8S~*P(Q+O)CD;Gy z```YFkr>qts*F1F@VLQPXUt#!r%^n=vi~|e!Tz?{K|**>_xpVRn%ybf3GE03n!p#S?Z31%9H-+|*pqCTD*KGYzw=Q6H` zJQM+QM%{0SF?^OfJvg66xrEqEcf)l4Ma}oXz2bi5^)Y@sH-It3K3K{}gnIYhZ; zFteRi#LY383LOuW?z0yjSk9lm{|BHC!S=(;|Dq46OI=<_aP4fB2r!jhNl~YYSiAnR ztl)a${yvI02v>XC081t)%t28L7jWVv2^g+%H(;L{=B&78?A0Bfx8u=qkhJ4g+AA-X4D z!%#BhIuhd6QvODin5SJLZ+#&NYMv-SZj2jeHsRqM{Mta_YCAh8haE*q>`KiUU&(Kj zE`kbzs()iZKFVJF5lSzIKDX6@4FIbyy#K?NuCfoN^mBc@+JMg| zY|rUdB!tv28{Y}pl6UvisP)GG#3yB)7=4-1MVG1LrX>>FBXA5g*d9Sa9&)?&iVQup zfNp)<9@(|`^7vheB#IE<87PP zC1sqzK5OhxnL2|+CBAt!ocd;O86_m4J?63+zbGb5Q_o++qqsj?Z#fa^x~tezchb64v$0bpl&h%Mea6=*-rUgUZ9| zXA`jzMI%%GKu?g7nON}^YhNP=k%_ajK zIBL37Vu=)T*sG?&F~-*`B+8eQw+;OuB-EdN-&r#=p3PS_b%SaK>9J?G5zS_{eKnKX zuE-`@c9vIvJJi>#TJhqH*ZqL)FVyue@3wx8=0rs38zmfPQk1bjJZdPaTw_F{BMBB#F< zUZc7*^+HCze?8ZWc}D$`&XDN>)2{8Z6v}#p&NbKp&rYXEwjn(3xK*%kTaF1#od(S~qm{J@zUq44ZbRoR-fz^k-7^<{=+`2b zyBduR&$IAW+8pmU{*GQo-dXOs$%1#88@PKMYByRZzaS`F2wF4LY5Mwn+6kwlXToz% z-G6^pKg2=3=)73dsP$y1Kwp72TbLs#{!|@-JMGeedid#h%}S$wT4e$*@j1~tK{3+t202{$YPciU;qFGuz{CX_e<-gGRDmrS@8>DHB(2CF5bLgKANB7W zb+=i5O@G;ph0IPVOi4*8*sSdA*>XWm)w8Oar1iDc)wS0H6UIl!)eir0L+x;Gl8SY& z%WoS0*yC7Z+i$gr;OBp9JC=^oOloaYiMkW$Up-m$s%YeS@srWsmvwe-%QfSh1>2uJ z1d}RV)P7f&(4Ch;_CL6VcYh)r#k(`!|2Lz4^;iEVIbh;{Bc0&CBSjeeJ12tkzn2m* zN0{yzldJmT=H=_9VMNK4h|s!87B=$Fx?31C5?LqJ>u2oYi5RJ!3_qT>e7&B$W`?Eu zYtb#bh#*m+=>1wWF)vJ`;9DKu?aQec=?Z2|he!Nqj6IQJ81pT)0o=C12IU9Uyi%ic z|7)|zf0nJPDTib5gSvq2vIOfZ65k9EqG&@tD~k2LO=R)7xNG%?^3-c)zCMW9l8_G% z3%D5{E-$3tzYtXH?JWL&xYB=O{&HRIGxeN4;VMzOM?V;M|Biqo{tc%~6?{R4ft+&< zJ(cmzlmu`JtLd3vi@=mukR4-AIACw_=9@Hg)#??2^yd8qAz2Pjw%>bmNN3lrmQ$}B zF66l?x;p;;;eq4t)1-`x(`?-=VNhDr9{|81WFAuC1_Ynnva-=R^xetHmUG50eVn$= z*@gUDU&sAe3T!3~=xJ0bG&K=wikiEf$o@jjrV9G?e=X|hq(0q=Sy1_iL(Vn- zTJ-JqC&qvNqc8u}TeI#yrvJw`;z*VPN@(sjH}LXl^shz6|M!o{=+~m-)+ut@&tbX# z4xY3T_pd|x&ldq)xqqFde|ot7b(a41#Qn$h_W$SWl8~)RRz$*}b|I?CoZ37}Oe~wT zWhX~}y@{=7x1tj%X0>5T^y>ue+0$tjvl<|&qCeo_yAW|%-BTa?t9oH(>)vhFwA$hH zBmV+UoBAO{mP4Jc0xibEBRd^i1c{7T~dlY z-5#WR-t>C*B|Za4O&#vn=xsGf&`5q0u*DJOkgXHy`ubT{h>=_B$%pj~eshW-Sj=r0 z{Je(Mz9drwUP!!F^h~+#k-j0SFHxfYsSj13!)%QYI`W;T!c zr>{c)r{6SM$u-{7{yI@wIH;8j9BDsawU?SVpcd5S+o^&?1dP(U#4jj$t%M&6U~{*# z{k7;%8%o1XYL7qIl4BtXf%ij-rC$USOllMR$5sRn@a7p!@G7vu|L0##aj1gux6~dc z3^-D&?b~MMQPtFzv8Q0UA&3;@TJ$uYbT)W_zK+^s5DESqnU()$_pi_T52y8C=kQnEZr=*P{{Pk*m{GXzG)8p!fcdXhA^s?(eB1 zwPROu_SVjYH+uNiF4PilKY8}BX3ME((<(>KW)6P&5?!O_;vX>nKdW|mP1#BPTe+ZH zV#ceglQTir8~LM#+z;QDA0)1!j+~KYv*)PNUCjK_KG61WB%@@hRRr0=SLuq>Zx(?dexfvsCP`Wr-knj3jl3d0T(-GCFKjqViI#IUAOE|Ijtgdv)QRvj_Jtw1MJz?& zbo14Mc#WVLiB{7E9u!gxG(g#qKulyTGOxZy6AY(ek8hcpaE??>^ReAr=XY3^^f{#B zE+&ztcDlc6VKJhWEQ2q*S&GArF3_BO0}^(S?l$m) zr!^Jr$rLaf(tLB7jZ# z05D1iSrUMo9^9QUZi&1s2$gR`_Q5ERUg-vj1u00B$-UQT^%(HLV+CEY6-ay2s6tYG z5Umui?x5qmkovtn?x-JiNsd$78mOIQD_2$O4 zc9m^>7n8m_!{%PdmUB@iRYgyG3SXDFa}8;Qs|GSGaU)r#KSfZcR0GBJN5h45vZIKd z%mXz4rF_g{geM;Amz&Dp5S}qP81+{YKS~FB6=37eIEprpYa$&m{rF2+A;l26>etsu z41=lwfi`v@Y}JApnFK_=c@gz`1$K+jG4av}c8?It?pPa(}9)@38 zEU3gxX|@Oh55DfrCKVJExtBV1J@}kv@9@&h;^o7@=*Di<#Fn0TojVgk6Zf`{uho3s zeEXa%Gkwf9nIj^mnN4&BSrr$j##%?|C9JYrVlQNmS~b~N&EQ1DHDr@U#7aollXu)j zYg#gsSem`n%q7wQFyBxL`3l&57-7Ooem1d{y5a|F6{&BGlae3I+VG%tv@Pk;q}>H5 zQ?7JfvP&9yYna1RU};MK09$~YD?)ojw&?@X0s|yoqDH;|>(9-n*y)nJ5r!cA;&&ms z89fSy*H+W>g1xBYy{uJa`~Cu2J5`5lDkLh0)>}T5TR@)^8f`(u#MDAozV`4Z@v(;w zjeAOszP;Y%(kk2#&uPDP#A&G2v)J)%k4xlaU-_X%EuQtn>$2qM;lW>DnY=;4f9*PK8 zVnaR#d2tBwyjnB|H9~9xek*5BA*K=hE9WTN5L^BvvX!9c3xL;Zt0c-M`zvKYgUNXE zwxI4b)PA@(9E*b$1T`5S?@%^AMQ-Hi&w=}o|A?nB-KY;n8;Lgb>vC&flBp1#3?g9z z!6K6g1Q-e5NcA0U45-X*{iL1Jz#I{Ekncy}S`E99>Num@Ucf{FA>nj&9YTYH1UYF% z9nfsE|0a0g2>WRWv_;o2Q1LZ3Z?it8+u2oRi8O+sOy))l1>Cz?k z`%7LexSDyX+9rPCbQI*<1Z2y}>tltOmhL1?@$MXLm=MR>LuqFyV{t`3p>pk)@a6c@ zV7a-hgdM^d>1ejwRR{k?N*@o_@#1u=A{?&H%X-T>I_*=RFh_21u0yWq0^M$1J87^J z!f?=O)U~)E_Db?@XqJmgVFRknS-ENmd%1jdaE>A36aaTP_mK%tNW;R}IF=2G-3m#! z4NG-};g0r*Aw&>1_xrXR==D^5-2|^6`Vpgc(Qzu>E4gE`Egg5?T6QSn$<%)Du2Zbi zL&s8YwR(Nv)K_Mp!e;slvLBE<&=l`c^$XTUZZ!_~M%}|)IfDz?))9DhSM{)7`qNyU zjCY}jo`lpBAIel7vp2A;sm&)ruFjhrO=w%CTcqY~ZUg`|n)7j_PC@}XhyL5F{7fkNZD6AvwxF4A+o%G56I1CJ- zLl+bh$b@o)`cc_buC!R#fF4~;K8f{$##$Lq4QhllUhO$1$O9o0_5O>&R$yFhi_rO* zQdKb!j#>5q+2~}n!Tmsi@+Ki;=Il5IDK8@b4h^SR?%mb2aJRGw=wiI~L19;-4y~!( zTA*#+f2rtXsVCFNr7%9%Y;*Dcay_Rjc1JA_zxKX2P@H(_>GRP0XTlC>Cvr~ioOUwW z({?Q1p(LfOv>NK+Fo|xO3O08#j_MglG@dMWU7MhjqdDf)j&)Y%8wvB0^Nc}elbV+x zod$-rDYpgf&A1c-ni`6VyUWsr5*|og{DBvIz~f-58tx3{y8nhgxh5%vZ^a?d*-905 zTX^zOMh#(FCP<4Aw$*?qNUzf>5sQX+o-9~7J$KpYUgot_pEbo5?_<*P{t|nvBt2-) zS%QQJ=n7IFSRu`BC*sRzw$iWJSl&(Jr-V@Uf^>84BZkT(Rhy#IQ7YZn{|6c+Uoqi1 znkS8+>K@^DtCJMJ4e#qWlbQ?lK|W@4DL!$|In5`h%OvCQ;KQ9X8}$t)9?)FGo7(j7 zYn+oI11=eQMEi(yVH9Dw_o_+*4h`x-fzV0>>hO#wI~`5=BF53=h*;8c6zZYyD1A z-XS*RUw-lKu_@(3gA@({I!0J2{k;}h4=x8~6**M)=oHX05(H80v+CngQwINT8d#IA zqZQ@b?gv0YDRyRI3_X?wS*z}*<&htBT`f>Y_S$VC@2jf@hTbWl#8o(+MK|=FsgEqYKJZ$>rZ(J6 zk7KNwrr1gykS)OZb+(ydfH3w!Ae0Dr$$5dfeIO=oe2uK|1H3g`$WRTj8RoRzJpAJap~-E<)tExSWG+7fDBYR(|y!u)9fHqq!4zl zli*KCHw-hHo{j;j2{k2>X+ZMnZ<`OAE*ZLTXT$!NtIbJWs_{P74;@~v-g_4NxU`Rn zi*(3#aLG2b34K;Lv!T;9-@3tiast23sn~vGh|^a-9dEE zZw#HE$n%rje=UjuHxPQHTdtS_2)oY)e>m9!1(63_Ds;Xb2}Fa!!j#4o{w#RzQ?Zb z%F?9Em&?cOwj)dGKUIZ=3#p2vz#~JfJ>E!4%Qzq<#9j45()ih?f=&Uf-f0u5VL18l zR^*WB(zx?+e)#b-dpgZxQAReQp)W172E9X{aU?-UTAn;9cXkTwR9CPvYBN!P^7F$Z zfr)m^iLOhb#m^

Y@G1RrBgm%OsM;PR<>Ip$rc>9_qHxgv+}r^>NO2MMFG)M|xP zbLld>O(c#u6(-zZ8Ay#liZ1(9cigxZP#Bn!QT>g6aD_QloCWKW?&_OR<0!ZnL#pB{ zLvkym!xv~#I1Cl(5n_Vf%HGBU0)k@43|fiJe@t0{6vJ*UIMi9nGD2C1@whxJy zI@g00;}zB^LV@<)y7~@NQv<%7b?3yM?YqR@SzSlIm6@3W@zDW|(H7wjXX_JtL!T$L zJSV=@JhkWAS? zZN>vplD%M<+pQA}Fksx-@B?m$FLYbTsWEgrY`4GGi~dV#j;$1vs+s{y#|C9v2S2Wc|8%d>1H|AGxZZ==t*o%!hr zQfpiC$({j+atzdCa!kCb4Mxn@JQ}Z7vz@n&9D`gf4oiZf_sG}^uSGWt#aBS)UME=WC$AwB zel^kFv-2k&$hkGtxeHl26eZbb5JXWKkCAztz796~tmwtS2>t(&f5-nB+zIo<|7Q^C z-`v;#vM*Vp_)WL_r-_{*I35MTto#W<&2+f*Z$#XOB7`AtMbp>|H_6BT&DDGyxU{eP zh||V>@Pt0g?h;4Fel79>kF(8!4=V(D1;Cp+8g9CZ(#2a~%e9C51}8kgxv*1^w;gB7 zAAe|Hj{B(-h?`z&4x%?w2c-KDShAJU!COZSA&l;7#~H|%k|{7XnQSkbUGDgZl-b16 zkyXuNcal5+n>B@jPF=%CbiE;@{YWWG%q`NrO=63^ykwt#aVVBb)=N9 z*@7CS<6$BIfzUd3=(i`NOOO`=;Oh`8biOWe52^osIE&Vbzh=XTx43G`9^G{LzAXRB znk31X++hWn9=hQ#8J(dZ<0HFLU`&!qFvjry=igaO7eN~BoM_-^Q|fqoAe zRY4g%7OWGMV2QbbQ;g)Mj}P-dcp0p%xh3)&w0wE!)6R{9PoA^xewy>yGxJc)s3Nv^ zUt_D{g3AqCc#G{!$$s$5JA~yF<0%j>!`c{ztM>TxKzS%z#JIi?6+dUIi%;LN? z8xkXmF=;TgrtgIepTZPkpF3}3?P@RNgmK=f8}+=Y9O;Ls5)-U?LOv}XYcUyvpS;PD zV5WzTCjnmRFcR6)!_0-yuVa9eEQl$`50unz&-c|$BOw7FeIDj&b?e_dzffwjCT!~7o7xPUKTCbGjc}jt z*BLlOs-4CQrq(h;?5>m0DB)&1E+`d_#C~N4IS-N6&(C@vqFlJ zF>ztDu?9QCP%0Ay6>OLw+ff__S1{oQXRvh>k_h@`LgfBqX*e(wF(v7Y13DvX55j>h zv9>~7Le4rQQg|1dPdR4+6rnlmtNR-F%IJOMO#pU!(!C;vD)|rqnuqG?t-R$354VMr)Fn4>Ax6>U~>2vy)YIUb}kn1R+3UY z`=hg%tDUT$cUc#o{Al8SV((m%*kgOf_JOBgcgGnX@-X)5nCMSa>?Mu`e45*pX@1x< zT;k)X6c<^#$L7xGgz}E`X0KxZ8TXH+J|0i+6?YEgC3^t$P^a=vdK-0Qsi3BNx)Uad zJu>~_UL*!ilJ9*bOgkIuZ$QvF&Yn>fG4#m4!IeF8iv{#)UBYx{So>%vJDxkAFt;JF zz&GS+Xr51f!sNH_piK|%e!EmKJhMTh@5lvuUt&6L%@2kFkn4PIri0X)&m6x9!L-2= zS%IB0;?^3?O9Y%~w#HfP6{x#?^lMW7@8jFxPw`iT)Ejmiki9S(_;{yF4?GI>-`!AI z2aSF~?;ZgZTQ^JUve4cBSXn-69q4cONX(E@VbBa-WQG<|@n5(}pcoD!I zbBEGCu70}-CehoeYpaiAuNK$~Z7m0IK`4;%DqqW6`kwT4N>EFO4~X_q;}%i6c?wuJ z;gqt&a5GMuVgsOYMQP-dkZ5LdqrOlU(URq#TRs-#@YawrIk*}CrY2E!UdEJ$ z1MdFoeizWc^RD9*hsF2c!nOuSsyc#cHCT**EDLdb0}@{d#7-T+a!{Lm6{fdGqhcE! zMR@g4mQtB4lQrfDNJZQ02Q_}RHG8Nd^LJhshy|X zXa$+Jj+-OILa7}*ULzzbk|KoLN`%Ef6me6eb zu)hk7NoZVJf`ox>;RZ-@Aw_wCA|*G}$FK5`+Xs5(x$~v8=KL+uYf@GP)iv$PzLHHq-I#rNs6b#e_~v$jV4B68*<=GOsxqvLVtkdfUJP;n z2q_8>Y?(_Q@bH$np+&RP<}o7tQu$bPR11J3HdhU?&%Rf63U_Q`thMypLRl-dMwmna z(E9G7i{`IK;#VOmJW;`Q7{wV^0e-4AGbsC~NLkJryecbDQl#=`$5R#(%*;63mf|^FtocD5P#k==!p()RP{(WihI{! zO^*e}Amrl6UOJs@7#_iAYBg7oaIOPCY`Zu8bu%tkMQlarRH~lcY7pGYQ={mIvRC0k zP>Ph!EW>27BjhW-R)t&@@zjyArtuXpCVmv1l-1tcsUVrP*?_ z>F2`a+>EmN@~tHfm!94~ee|*iE!P!07~r<;6_V7Jpp<3#tgK;s;SI6Y37bM%oM%>s zL-iDX{!Zv%Wbx}0l^z#J_1+ zFwo=+&}ZS92k>o?W)m?Hw+0K8?}AQ7ihT7x$UlbQ54-_9XPdp`SZGZV#e%Ghw1?zQ zWPSY1;VHgDft{-cvTrrt{?@_=pE_;+b!)uT3XDM@M*w{LuY#oPzuu20PVKc@MtUH? z#DOI01g=AJ*B&vrjWdRRy?f^3A>=M>0MKizvZk!h}*PB;seb z&He}v*GY@#`NK$51zwG`h z9%Y9Jm}3&L5Bz?%)e)62z60iQGZ7DgvTd8(5)4)#C2<_W$vgg~o)<@63i{VIKEd^% zyFkb1nD$5mgxwmzD2^CQ_T}>yAyzKK(kKxcMVPdyi8Y#bZqa$sZn&l8>MEc5m`HazwbtFhgKqsEjE)WC1-#g-sW`K5nchAcoz^h14ZT zIu$WO&#geZ0`6Oh4nP|}&SOsQvs#APc3T)brR+ADdNW-E8Hf-Mv z?iB)8f0Ia`-tzKlGj3fqFKK+G>>*Y`R7^h3r>>E1hYAz60pk3|KF}{O_u~cEMu*em z(&m%Mk;{M?kg7|M1y%Wq$7iY96#pr5pZ~L5x{vyVto#CTgxh`L5t!YKq5H2uK$edb z$je|aaR?I0r^josmtX?{ki3Q*LeM4&SlF?H0(ycnM07#GLAro-D2b(iJal)?ral2| z0G#;Hh%s+k1~s&x_0CBRSmrPYm`2A@QF09F!M>h3b^=2W!2RnH(B;JXYYt=WMW|T0 zimZsd4~ja5=$A71AMa^V}9}r7N>JzJ3ZWkkt$-pH&(qIY@1>e;h_J zfrqND3Oc7Rc<61Dil`&!{pkzRqzKm9?{ts#*6CUd8XtlB# z{IzJhPDG&jt0AwVu0Z{sy+1GtlRlsf(3xbfWd||R7^ojJnhtePTfr1G>ov@3n%9iB zr$wTvP&beQihW_rGEH+KKG|O}i;zrErYOG;=4s*1P)8&9gyc&&J@Tnr;(oy%*elL% zm(&2#Om0N;*@+87*--+_aiG` zY_Mgh(DPx@_kauTA!nXNJX*v_ZcYGs!2Po=dx`1UU?6r>TAlQ zf)@fAp&7kq26T@4zD+rnh|^U#3cw3m*bNZI4`OpMBOo3jAr@*ESb_%#fZ>}2VPs2# zCCGKbYyxZZgO;dq?2y|LXznZhN9J{E7;j`sh)=Q8M>aLHY#Ro#_8@tcpwSotb&ZOe zcx!+7qVz}@K0Uc{2fsU!vJ?8$0PJs%_E=(8`b<$Qpi;z(yLK{YKXUWY)LlDsB%CVb zDcXh|`5x4SLyUtssAP(&tblw4HvElxgSA%1AUmBd3XabHR9Q@#oELUC5p_>Y+5|PD z(sT@JrSf~ebB4{u z&}=OB{9L6=ws(v5iGwX{B1LH^ayr3gKfxToIOOGcMGJVM<| zou35R%vG{lE)D3max@c*z4VG(*8205G*jX(IF6WDgnS|#D|xu%dy~U4A8NCug=|*~ zfR)cANlsDTMjOOKSGhhI0Fs`*H;uuao*@2ObZWw4uOXMUwhn;QEiZjtWto=BZbHqt z3W^po){0gnVr?aEe)8VkDx__`+5&Iv=_er+^Xfs^P^x-+AAGJn09GQ%igBU7%u&tX zX@Wo`Oq^BqT=wu1E}5b?$WnEJh28c;Gg#wClr9^>w4~HYh+ah+}t8vWA9Jg#U@%o-HfWu`?DSHV#oO6H0G1paQf&YkHc1JD6Tq?wwnbX0Jy zd<(s09jRT&Tvz3B6|eob({yJi@JUK#CLcPzRY)N1V%^-iy9i z>`Iy*UaF(+cciPVN;~j8Vs!Fz>cxym8+CvcXua^bn1AN4qUOJO^#Hgh7tubdE$!ysU>xcWfe)Sf{z0Iy| zj=D2nKgOl4-nzv4`N^M8-`y#)ff3)IR{u1@{~DSpH)mvLW&8U{0|OGXF%bSq*=?9= z5ks*hDvjoM$5mG&uy77yF$$Co-7Ed9IF2P@K7XqkXsi5|*+Tz|J%rMqplksSw1A+nD-vH%U9#yartwPb3_p@|hyAt+N0I5)w$%~*VvRN!b;vSHGcXG z05jNXAodK*8{?B4yB3;dapyWlpnH9zYRQr>$nd(eOoU`9dC6D zYSSb}l%etU$mardY!)-Fnvn#;A;edESSu!RdQzn*el7g@#$4K&jy5(5i@Tx;j9qgP zq1IODTpp2$wSh@K;a!=7ruLeth51{K^yV0l$XAk;V2o!4! zZL&>nmAYDP@Ql1`QsC#(=^Rm>f-%wlQ>Oqrdt~nbEG_qHAx#rUz70--P zn=w@WgJ`#~VFNwcbue#ctOy<70=1`MbxRON6RwKb0xn}`qZO>#ve12_@j}5{q`#T9 zwnysqgqb8Y6q-kI7GAbxlpXhb9}-<7EA9UH?zIkv#(SE;;HTlZnmWuGdx-a8&AfP7oBdX%F@M&fW3oTv!ow9~(0Qe2}?bc4#?IN)cBWZz={09tO z>ERx`&B%9Wn3`U5peV#j$Iw?qM2v!_RiT#drYN@BuSMa65l6vMsv35&U^bbtW=3uz z@4+duv?u*7kZ|GOK4o(J_ds87ikRxbIu(V2m|$N&`@*T+V&dt&-29Iv9pVR$_Z~x? z1i9kYVXEpM^~iCM3q8xFkDw1Am4HR1gwQ08q^qLF@QM-XL0O3fIzhf3u`dH~SWrGN zkU-tAGbgWqQH4xF+H<_5O`^}S7!8a;=y#HRGiw)^=pD6Z5*@Ve2?Ys-&UHhcyOv%P z?~HqQ{_Q)1v$@yvd@NP-u9w>HX^nAKVNT=5c0B7SG{jzdIwy?O*q92t-MO%~Fs}7e zWy!-ZuhQ67K~eWQf}*H1k;~Dh-PLHwkMqdc(bs%3(7F8RZjF45Kg5{c1sp!fF}2A1 z5ZG3vkt^s_Xve9_&7^j+>`2|&gkI@N(C21~JV25N>?Q1u-_$GDn!st*0PMX7zN8zQ+v3Gsa)bm=>E)>bhwwr{cMBcBg#6(+yFFwg zk|MyQpjFRe(O?+{Gf_$zh9B!3n=mv2ca z^>^=&H*<q)7Rp-5^>X;;D4h93(?kDvVcUt}aNZK3S^wdimC66~)W?_O&#CmoeB>cUeUt|h#PO&uSH+}l!9ioWoZjTTFk7>uXJV1$uyJ6b;V|Vsf8UnCEJ|uV75Ft+nrI~YF*^Tbjb0eJv0)U z_M}dpu?*>=v{VyTj7uGr;GDK8nB()027?nvNCc9Fgf)JS% zgoqTG#E5`I2}uQ+hdd5I6(L1Lga8o%QG`U20JT)ZjDQl7RFO&UTP55=lD?Pw+54Qe z&hC2ObJqF#eqe#i4A(vVumA8Hh)brQXvsIFshV(>%yco0_W4JuHchlvL{RvFz3V@h z4NQOKYK_1ZwF0cwmyYjcXRY*r46NexHc)>TwR2{D-zgTY=U2=nsQ*08m4CPBuXevH z`r)8bbM94C8`4TrQA>1yPd@aAiDHNOMcPpH3;AT^*yq4*G*rz7>+au)gn(e8l!5=^ z>-Hb3{@b&No-=e(Wc)&qIR<<^4}{Xyc0tp7Rz6-tpn!$nafSdKW)lhk`tQ;IX4&#U zFcN$pR{$=;K@?`?_C-a=XZ#2@S+25|fh5+0Q{ls~U%tqQ>?f8{?H11R}JG`J}Rik?WA@s2U7P~P7yNg%Jre5taMBZ5&c?r0IDRb;YGI4ZQQ|@G~$-= znNjbV=n4ew3vu!&p0#t*6(B-duhJc=_f#?Vc-6JSuv8`UW2*o(+Kw^av~8}I8HIK9 zIWcX%kYnv>>4jW$u$_3n=^^`)J!_I71#Ij!-q*gqq$$Z_~uarE)S13aFJPlvyD zk@3txbw1DU_Cl{-Qq2(Q+KHaodd)9DA3sOfsNOntaGO}GQbbFqstwpKgvbuYhDm^R zf|A#W2v#0US~xrSkH?LTS-#nGj`z|<9l^l^HWR^2X1xdDvS;1-6Tew9=|fZ?b{`Om ze*l#+=C36QHcTRlqu z+tFb&!z>?vqfOibvzDKR9g~bUD<=P7^~$ejPA3lk=%W~{UtqcnOU-9L(;lWa82i*# zdu@Mz=f6u@|J?()ygKP%bH3wBo)cnCglw} zu6J)Yx%a=VHcMo>p8ew9yu)m0wg#UxSmsdO>tm@X?kDQ}P0;$AN0RV=@U;AIex%z9 zs|47sPXN|S<|RYo(t%I1r|)TX{#_LOo2PtJR2;L=0`ttE1Iitx?5|AY9Ao@Ijxp7R+JkS79BOCtEV zSn>Y{@Ba?oOF$d{e{no2RJ?d}!7-V8zgfQj~aHKCk!m0hgcu*!N1)d*qnKY4c6Y11To{ zVRJ8Y@6Xf>`Mn-;xUK1ayX5V3*%QV<1X5D)Oti1?)?Jv4wKE#k_(jn+2yO`z9lI1{n>HZhAC2ivaVB`L6P#0)b>5>$8 zPgj5HTJ==)avqj+(Z>Z+2AtI`7_aUUZp0EXe9W5YN0X=lg&9R13b`?^nKeHF?V1mo z*K^~OvL=m3|I{A6J{xe2=v)yq`-Ki?Od#=9JbcU@)ISmPO6%J98n;`r`>>cWWp6xQ14qO0W z_3Kr0pws_7Ces$LM&?W@u8Q8c9#?3PgTEg-vy0OLXXV7T*Pjxnn2%gJ*#2FLaguCS z=g74KtwB1f_jF67FAleJ%MIz$N+x#f$-R+y`^9d8nosr6kb-48l(^HW8$YZAW&v8Q z%FZUNTkr-ieR|eo3xo5whWD9g6(4s_d+-_hSdc7|8e)g;4_4<@ILl8JIfRP{o0}{= z?e$txUU*0kBHzcuO$7O`iPmB;6PLL)4(}e>{RATAd`K)?=i5Ha@N9(#V%S>c`U~HD zLfbcZC?$`MSd|1X(yVm~I3<1lUY2I-Rjafu>+sv`(WlG*Rj2#h(pzkSfq) zWL_$PqD$=p)L?%j5oq712$@R!O=vt4+ z?lQFEN$in6@&R8lCAfk!kHs0Zj~=;|h_0gP;~YUVAOABYK_bv0rZyw`otH`qjiJ!2 z`$&Rfn_%nAi2atCkxQg2iI%jGzHf(@fVyDXq9>T>SVRn+sT`3VXU-TJHa~GJuZmvJ z4i;l3@_&g>SoaEtoyF~ML`b4JVz%L4 z7)KAc&$G?OYF=d86-(h@HS6Qh#6*mC;H`&a&P$M#+UdHL82Ib^Fozq$hm~i#9STt@ zX6++YI`15uS27KK^TPwxh#Rh?`J0PoX|`=ezrJ~0>G-lE*eIrGE7wCg|6J~gkM|(i zQTW)a?;X!GZ#f^}cZnVLJ&?^JF5r4mVAlK+$OJLD)J@a@(9AM|twqFa01wzAa{$B5 zF$euA*IZN%sI{333A{kgdWtf1mR8Eg0lGmyE@n_Jg1e3)J1*R{ue9elm!SucEjQ;Xz?yyqt-T=4=*L=i;L{ z`NC$qQYJ;KFHo9^M2ZP%dT;B&@QR>?cyxtE76KGhY`W zu7*?gASEy_0Pz%oCKGm8=8y_iPm#J%S7_U8&^c`V(a!+1M~NX6uH4om@bcmgs%7Qu z>XR8k=7I2S$LdVV_hOe3nbXDlvpM1SX37noaM<(h$5&5Ke-B+ZBwKd}z~yht%iDG9 zDE@G0#}pxB1$6aoDE82YYIs+Vp%(l@s1l4%r>qOBBNxA%>ozoprVC86xO&T3l!IE8 z;6~YV3xk@~y0Frm6O|H)b?@=6_a@BE?Iq`KzPpVn|8*vSd%(A1Ps<+?pL!^U(IlNc zzzAEql{m{Q@00qAw2II*B2ma-iKYFO+~dW1b+esSRzLbDh2>2rg?W_I9~C$zRHNz5 zM8t^jRZmwLSbm_%9$dyonGxJ8y+25c?$GX`wb*A;*O1Mfks8_^YCnD}B^KT|`U4zL ze{WW65(AH1ozjtc-if-R z9+daM?S%MEJ77;LhS?inRA&ut_Z-e1@c=#CEo8~jG|3dJV4iA9aiFDfwk8qPWPV^& zwgdFgEC9L#y*V$=gS+yw6j~&VP^?oD#GXVY(06rb>&D{tdfJOoor?vuHHz&qLJgcF zfVA5$Si_}90jB}r-f-~p{9+2c1NU82u{M~w{))W_TR$tFsQ|4crbJDjkJrQL08@-E zQ1oGynHR^0%b%o*7PbYgY^F_kNF7>888b<%$Eh#01n^UUp-RK40N;xp3N5ZsyFFSY z*v^|GZ9$wxm!6BOaCq1?T@nl!J9Y03x9dHsuR`vTDfrarjrHFJ+4;TkczZ2F`0U}l z_2I5hzARUr;}IXd_P57tMjCK5vo4gmA7e3V+1!W2Pr{~i-F+&2Y~wX!#iq{(n45dI zxoHr!op*S4-!<{rcHQ^Sp0L>JtYTtNhTf3GO~aEK^d1d)5cBcP+T8k-Db7L)jPC^g zJLS!s0(@&=p+XbzfWn~viYDsVI4zEAcj23RewOJ`G7#dW z?(4^@R09T1N<1pNg`xBck3#(_bTbjkUY;Id$w7hesmiYa!&b!S)JQ+GQv|zI-VkGhr-K*fkA>Q!qT|vh#KB}F9<}|$VXJ$cHq-LNxr{0J1@%GzX z`Y=;cZ4$iA;-ISGcO5^TgodJC#8Ah~G{Zg|dSq2#fDN0k5tZYtyZxVq-5)&aw|BNI z=$AGfy%?MKtL~3y{Uo8l;(}1ZiDJB(mROGd%pqL{BgHm1`cLwEOZ4@WFvJ#GR%oQ! zcZT8t+RhI#;n9>RMqpg4CDd;b8q6AQ9>#9?x*HNVQqh#qM(AD*6hzw=-8Pva-ZaQJ z#I_7264&!SXrmwCJLLpX0v;SrHPlH zkyK>~NQgE7_TaTF6l!GPqgKKfX6A?&lDn1_s{Po=7=VRpU`Q<8_~YeeHkZm-qWdpC z(5q(8lb=3gC7H0Jfs+GuON;<}DX@!}Iexo%awi8W_&r+T0ChKGj8NHno`Mn6OOZ}rw*o{|p0Z1b+CUo7WnUK{+027BO(%76Aw6T8bF&GjR8yb4L z_VgI)XeGZ>mRX%_EL5SR2RKv3LE4}Z{}U-6{SeQ?=lMocHNbP5hf|KlX#+l>>X0n@ zS7#7f(`cJHk+dr_5JN)Dpg6($q8HQMi1;cppdZI3FALRs;#T6(=j{}D) z9ocTEp=|2FpD=Sq4_C=V9%6DvZ?)WDic>s#qh#g@q>Tl&mY-WM5i92aWSIqSe@{Z! zib*alnl<)`7bM^t*HG{!-T*y9XO0$~j9qMJEp2S{NvTk|Mn-i?z{i`>I3l);hebGI*K|kG(v}^t)XZ zdgI(hxhik(^%}FYH_QU-J?l6+Z(=&!$@z}%esf_FndOGtCG%6&#I;wRi6S>2^{xy} z==A5FoDme?y-|jBjA=L6^~E0QRcy+rl-a@-_^kja5)NFdNVy925yd`=E3)lA^(FBk zt^m>&k$|WzoF}Gd0h$nsC&p(Hl@kT|IMXyt*7L|!eC!H}Ps_ZNmD^x~aHa_PR9j%? zfsGAIJd1T^J~xqRxc#Wt)AM9u3G>R&z9)}3ZtmTV^d^B6OxTZ>4nm}SPIRhvx0)na zfT9lHN?tI!I~j^tyTT+o)GPgaZdhsi1Wb`E^Q0t2(0$zE*tk$zV4A6kaQz0 z!@CVPU*{6F*vbe`nhF!15$HriTm1NS9!I}jxmIQXbzg;4dKk*>DxhHaYmN3yiT$K< zs+~S7r=(SHImZecS3QpSNVv&C7b?Qzjpheug3($u5(mh8;L70cF}AJD8o-O3r4%qT zB@_s^&?4y>U`C+OLQ13=>CdQo&~Qoa+aXJ~b|@lo8LqqTKVTcTIZodjwwN@87Jh@( zGY-Cd5*c0_9E$5_hGtl3Mzu9&>YM%Xfb1Bv_4Z7};}d7?m2SEp@H+12A7EnMzoRd9;N|<;jcA0K&aIeT;aIb226f?80;q2 zo-dII##{%xSI)9xC6=3~pRIuG!G@$66>3>H#~m2!p)nEC(Xwv`Dc%yb*zTN<%RB+H zYvXkhNQ$WlkwtEm9)qg6oN>-!1U-csHxVVzSFUORn-4_08@-9Wb&}%O4y@uS4iV9- zKTwX0V(noSiH+gGzIG=Gqd-rPO^K9v?&7X!vCB7rq>|b)#nPi-R;s~rAwR*`Q{Dw) z(`|_-EMJ#|4XhY??@;X`sOIP+I8?hCk$9<&~XZ<)ce_qIbtA7w3XU)5=usCW{T46IPv zC8xqHjP#JiiU7FtvDe)Y^&_XXi0xI`mA=+x1}>_>rQUqs?o+eks8i>L=WO$eE;To9 zH(7|#E#Gig(Ti^GP6w8yoQ7os6uWPT&>B%1~G!rJns5_Kw+0)SC^MG2spx2|uruGRMj> zTr0l=W{ggqXcT~mq|I^J2cX*b<$H4)+`8Tb^AC#)oLulqSclWnKmgh;&PZ)|P9ia* zO*{r#E|Nsqt0uYlXw29|Ct8bwhPHJx&^Q&~23pOxbV#DFk!ithUHElT;6LNERF`w5Wvn$3IKs}9mL`ZRucr`#dO*hn-?f?BwYqdhV6h+ zhVCY)kaI(vc`I*QdG#AfsMp8lXgg(Fz|OgcOqgmYxl49(VMvYoW&1>!Efk$6kdQCP zpg{z*IzF6B_JsHTbMtfM}crG3t(T}qLJoN#b{;Md%1MtQIC|uO+IGxWR zAUCb9v^si_!@cDiAY1_OQYS9!G6}bbF~O4Bqg4U!K$i!B)`%D*vsvuKBj2B)?tDEH zsJFoRc@Yc7I?5c`F6pH8<99JIYC9c#5{3>>>7Qsgt3QaJZGw*5AU=J3%J6wG3N*=41zs z1WH7HQme`tIEZiW{yy)+Bp!@_$ z<0QK>y>_?%M|BRXSt%-d!VA z^8>}3%dmcLP8{6Cn-cs?gIs_+%!YIxdj~W;I)Aw0J&^JV>{JWn(!icU>vWRY0**Hu zCS+2TC=?_DF7be-dpP6PTn5^>k7`9kct?=v>L}cS(PlbGqSO|a7Ikq9*eZ4XiD-f- z)op-n3(mF~T4KMDthC@zD|1G4FBRiK&pZs!U|1+bg60y)F@W{H^9cAK$L zp-LSDalOaM1Am3MRu&sS)sX;51skRWX(RR{3QL48VQ5T}OHPCU)%hiKA7D+l$cwP1 zH3;Vin6O~GiX+D!M^b@tWsl=n0Z)?s9fd0gzTHgnb55M5>Y1jV(l34LxKT*!|jkmc;@I@`HBF7~En50G> zv*rpff1{j&BeRDNWQU7vwF&!q0laX(pekVBR<8GGe}~a;qRm^X(!2b-2(MC12q+(0 zmR`*5lHXTGWm}ozjg1YldTEMbJ-gBfU>zun1%>%*DXr1)SNani;aK)5INV-yFv_CC~lFdVs@yntWJnPMo6 zk!U~&5jJP>83k=hd_ulZGm$_)N(t?NBDt0xBKprs91R()xv%H66KeK%PY3;m~qjhTIbaXT@%8srem~luj6M< zeKDPCdd>FRWgkFLz9o;`z}K$P^-40zFESefRPBp_MJF^(30rF4A{WCxR7Jb{@cl}5 zGsB^ab@#;g6U4Vic3GW2>`M&rH#2)|&{6gCm0E`|s4?L>%`u7yc?mN-A;uJn$Jjyf zkXMsh2$%8eaQZUTqfz!|>MO=0(tMeSwe1xJ+jnwc8~+xa2gDkr1rR#Du$B4RvTJC( zyk04ra#%C(RaBs%(NN+W{UaV!lRyxAFV5w`c56ZXQb-#EUYOYm3+hXTA=L_Ws7BLe z32>H#MrT`6dvBq5sVbuKityF1ZCgo!f*CGK^`>r+sSM%18>9RKA;RH33aeqPuJ~Zk zgqWIMN1mPY=~qkw6gZvx*P1m79rAT?N#2>37vY4yKl>8v&3QQO*1-nZaS2Hm>E&N? zO9SOI4$64cR2vnvTVaKyOE?8AAb1HXEA-$9TUSN^t(CLrb$}h6MYZn#{6?Ga9ewNVG7r5205YTN#^KtO4{`O`mOyIa>|0@~iN8!Mwze(+CP3hCe zQ-FP27b~0Abc!tL?5C`i-=!p1k=ul#Ycdl^yPJ_#hmC})JrNq@%bVPSurPEhqY-`4 zNPQjB(|Ku0PzW%a_HzJ7p)9k9^rwVeMjB47cm@3PTLiF_GDGzq59{?WdDNqxO&Scg z+ujR_A%(?;omwdvE-zK<`ZRWIEXa1~x@}8Uv(ZjM83^69iIQiGW)dAQ+T4%Rp@c&l zvU1qy7_<&`BjtM}Ckz_HDzAD_^ak2JtI5Gfks2s%`WbCodx|*Do_Apxw+pgk8q(oX za4T$*T}%}TvkkY8d=@HA9`~rny5O7bU0$ zBp965GP_<`I{G4Xe}00gM8EB0(UBuF!zGK5ZM@&Km)fB+(|10+cmCQ$nPY-0YuOw15k^ul>N2} z?6%&{D3+X7|B*ryx&aj&q~=_l;vhoT{i4_+GXpywB@%805)^g#g>AF6AbGN~3t>aa z?}8Jpma@GEB7`entUsyxpFMHf(S8D5xHzhN{PUN;)_8<|`qwA!QS=!Km%n0Uz%$%T zr~z(e{kZC-dPT!i{Olxc^!YC-H2dY=l|{K_ieOe(&S|J~I427q`*|>UHMDzt#|q4TUe{9~A)a^8a}-m9ukAiu!3e<$vQ?SmHVF zCrvo?=$m#HLgmN~K0*I*RmNK-us|0_Wcx_V;}lO}jz+>3k#IqCjt?H`K_Q3!xbya0 z!ilrdr=L)dy?-IUbUP*`adG}jlS22mCp+DR9X04B`l@TZ^v0KS4rd*c&z81E9B_C$ zmWeN~T*){081ub1{bK$hWzJq&G@H;f`zo3ip6ViYFh73^M)ssQB!EsRk-F`Hyp(Mw z`*B!dE5nXZG$gca-1<>ldZwW{9LZy4(`)Z#i5Y6ay;WrTGpfTNfZ~|iXu+;@(*2<0 z2%R@+F?esJp3~HBcB`Y7lOeN|7ky%6a{wrF4Y2#-_K0@$WK+NE66s^MQVzlT!6B_Y zl$J^f{Hp)6-0HWPay$|O5?-~LK@dY|ne7*xrlRQT$tl#Vn3!^ekkawq9$VRI-mRSblApku6wNG?&27SUn;BeFwm&QPMLUjKeL zNzGS!yV;S>iwhL@q%RRS#RdeWj$Exls=FQOT%m^Wy~g{>XDgj_zTKrl6qhi;ld>W0 zXRI;eGr*^*gi54wpj@*D)f@0so|fJjO{9TM%mX3X^D$Xyjdl+bH1}-M8h%TkcY`OS zNsu8&ykN}Z#Cr3HaQTN9rxua?Y?hZ(D(=?RfhR zrNf6$g%d7Y%Xn)unR;*x>= zIIk=7@2xVM9J@dD-lO1ryOzn8GE;xwOeNzN;en__MaM+YD`4m6(zDj=*e%8YBM*!< zOVLV{$Z90^A46rrnLOuD?;>u%I@inw zm1KPfUz!D?@K1(>&m4;@MJyCu1HlIm{`6IF3Ug0ks1QtULK4}UtD0}$Jp!HFk}j6g z_i-0R!VJas{-iRD1XDmUmvFS6*OP-qG#+Cu*==Du0Lo;LHcS?Y7OWRWTH9Vs=TyL2 z9W@?x^yv~e`BQw<3~mqETEtoaJ>Lzwi1n%&f^n1QQ7mB-kooGbVx#fvunADC^bI12 z7dsW`_ZWT$;pqxTiZN`LE{Vf;?mdQ3^%v9d>uoS=$jiW1D!k@IR7u|q8Y<`se@kmb zb2;gT2Wf~!VCP?J#QUW5Dzud{>8oUR!^Gj_p0H4ilCxC2=T`jM?fe?%3r68)rZh zosXm|d_COd%BnX2afnl*;1L&SkzbODSA9Q9Vj`^0wh!&gj%VpAF+H9@Wy(gb^5wbw zW_v`v;+YWok&c-3EIfhMaYNOh^e)E$IWFYVMCg+tn?H{I(hgp{VU4^AyYn9PS@|A$ z1wIbQRd_&I3s*(xi7aU*?E0%>y}UT_rb3^r0uH?ZP$;ZLMjc@0#k#Dpc<{J=@UzMy zYG%BwS?WlqV`EuJlW$)*tW|R#rT+T(g;VeWgYt&(tRlS+$Bi*)w{1aQn$^x*CarVt z%Y)d~nilR=zxZ{zs zTWl+Op{DQGq4@24-X6D?cE~GlCmcy@pAEb+>#;#j0c8M+vm(D8BN06y1MrG+Btxno*!!tMyb$_1Jc*w`q)yAjkd_I9H?}+Rdn>~vgTzyy2Sz0Uh3q0^~hUq{j1$AKRNE_|AgGSQEltx z%NyqToy)KCDZ|)R1s*6T#6(`BUd#ryh7oM70!PUly5Ny*KNslY8LS z**M=Tv#Wv9pQV4TVbc+B`L72#i{+S-YLG& zKo_Nob@5-X-A?=W89qlFHyKhi)BgF+|M{MSoYK{|@?=GE$MpaE_qYv@M#_T)D_{0X z6{N+ICE-fYGUH!Y&F$ZB4OIH)n%ty0OZa+pUDrV8dUq{lgtBsl;UssiJv&$R#>#sI~0xWy>2Njo2&#*h{4V@TH) z1065d7#a@UoHef|;f(uAAIR^scOf)s;UHUk<^jl4P?>?;W!lCMvgADsclj;qH=&;Q z)y|{x6dS+aF)e+#;i02>%hN+2NReA>oo8qd==1R)X&DQbvIki*4|t$gJdd-Mmr`wm zf?kcutR5p5<#|>)FkTvW%cI8RF;WVzTO}+UuF3YICJHy3OFD>YBdO20+w z{<=5ou^6JP`Ha-~sYM-x$n~B3N?AF53}-@?@HY~!(A3)fHKi?L39P~+B};#l9ceQx zi&;6gs!qQxr8v-s?lv zVH#J()F#9&kf=wlX$esZpy_s{CfxgC7t>alaW6zSVxL*{^ts<2){y$@DsUb9!$({ylrZ@nJG51IDHs}I(Pik zl#xj4oO!PEB-up$J!@&CoS;gnx}32oQk~h;?rP;{Nc5?jK3)?}W=Pec!luDzZt#p+BEOlTFZa*M-A0@d1!98x6*h6b9r{{w4fnt9o0; z0wdk=QFYxo#cCMHID@&{f-V#(VRZ*3%eM7MtC6r(+i@8NNr1I^<)*MRwa;#Ja(|x< zVcc5MI-ic=FOFeE_PkzJ8omj`O%aSgodUvFIl^W<53PkbJ)^237XUC)s$|LcLPR#%NH z4qkCg?J640M_2(JxEy%}T6a<4iOh&)S;3`}BLf ze>FA)yPF|Wdd5PGF$+bj2j)N?PqjeYm!%hw%M#%gHs%p*l>rU*pwYA_O=vkcae>gq zfxHvy-a9TXsE7sWG;Ox&xDZL<;vdn{Y~!4|*+$UUf!h}HB7agDK3yPA?BCcJF1h!P zMVq=tYmS&~xsNb=fV4RQ9>(oO+{Bo4sy)RVT9j=kDK;yusv)RDgY7P>0g6F9I`Mwu zf-e}xB#WKUOv+Ib6hL^v zm16s6Pn~vLz-Y<#L4Y!n-6pL}h^wy7vieNOyVS#fqs=RBb9o(fd%Uch8Ic4uclO7g z3!TwRt!n9bmn+pCzfq#yA3ezmvFdQk0a?{MCPCXGLfgc6=1Ctjlj&}2(9vAs?^os) zT6J6!J?dVs8e+=)WujQ~0etpaIa(=;wK?F<-3Ki@e|h`q+}#SVt-P02U)!%+crQzu zDnko`wiN79?0F4Z+Pf(GQdVuL0}8F-0F;)ZpQd9;i|Zw1jkofNbaXSGFSv{cHBiM@ zSWk$rO9$k}Wo7FLa&Y<-{n4`k`6U4`MLvBiaN2gNK(c((K6SS_$Ap>;w7b;_#Of?5 zU!H+;0zM6qU2^^_T9vV_-wE39Q5Y$P(ejU@U|whv0yN!phYvrSEnvCK`LT=I#rAM0=)@~Uj2dA z=|Q1QVe+mb95Eq>6UE8aTkMesOL>TiXoeCC`5r}#pyVGQ?Vn|yBF^|`aAFM`#RA}d zpui8acOwK|`L@B&%s8#lo@?Y1uyH$61)u?o&Y1+-&Vc!f0`NtKDj3%?GK5;7)WYkK z!KSC!j9EQT>pavV-0|K}P0rv%vog!K5>@RNN+ITj(9ZW!UX8e$@Ht;I-a^APP`Q%2$@x~vkyZ8Mbo+MgkQ;(Je+EObE-$z=wzN4 zj~G)gOGs%zFjl}NY>~OAM6p%CbTBZhWg&^JOR5_D4vV1lyC}UF15%gZ)Lcu z54mDRiLZM@)|0qCMvjY7XmY7LOzh&Ur5x*PN8cgqP&3JRabOxHrHK#>QLdQlrKQ!N> z@8mW6pnAh*9mhDc8>UB}H|l5xm{p;}FZWVwZUCY2l2u!O-`&N5Su4VaMMnh6H~u`< z9&zTh35I)0lC*m|pl;&N`_qNh#H)K=^lrt1zHp2hTbXkf~A<4+v*LFxV9>2y=eBnQOd45a?8>IlOb$$e0)M`5;~J&1g|nfFv&C|dhf-AdqWdG%L4!$80c z+(=pfxN(%&ZRmi6!P?^P>ov}C)vcNJGAF3F3$2DVVI7aLr`PnjveohRmwJJ$eerYad6Z zA-bqK4`|1aUzfH3v^f6_byRBF0iiEbv6Lh7JMC&Fd{qAArnnU8S-9(kkdNOM6-eES zIEzz2dXLwps**jt;MSk9creVpG%ed2ESc;;^>EbYfYx86_%QCfS;iwYADZ z)@ziZxp3+uiSiIL=*lj~U-Dh?sC<@}#=9iAC@h;V8sr|r2VAQmIQ2=%32_w_sEK?#X3DEJD1+R5o+Xd`JfwfFV_g-44( z(K#FEfdDkua$D!P9E=Q=?7JBSKssVnj8Z*p(B}dQ4S+uaeLF(@{kf4)UD|mheswch z`0Ns>)eT~ytW|nnQzs?UbS=d>v7#<1LNgFQVY9;G&a*J^Gdsxk|78>j5jVe)7kh2)Wh7)NTMBdT6y&^Vgaf)CQy)cx!rUgS`gD zHX+Y}2esW~iuDaW$Iyt=-@bE-voTg-+VXU;-T3*rHp9lsnYJZqk>@+(T^h>1a-3kNqXFkTUx}>VBPZ}cX_7Vn z1$K}rK`EXCSS5)0BjRGh`vMs3&V)4dw)RP5s58&YW8#*{{KeIT=ipYAfZR;D1KhIK z+~6 z?JT}fo4P(`JgKA*8!meOxze~Sx-M2op{UA183IO)_%1gtanlkf$MHqiXl4>xpB&Ct z7|F{)1B8~zP{kP`7>}XEkp0u$_zeJ}=!FDMEnX2CP)y8`>%8&IQZXT2VGFbK>X4Ms z{&wHHp+a)3@5ABhmF}`j=gY7mW)E&hosQ?%ex4Q>`Ksmq(S+^M&Z-D%s>!a*tiLIl z8@c~rsbY^nC6hN;Y(Xp%cTRk33>b}Bf{)p`r(svJ<3IW{sD%ig<46|nZ4({ zNScRQoyvkfSlu(OIt*mQ66N5jh+~YS1CX__Qx9(O#^W)M13$Lo4U%;`|5MFnLI7xWVU~^Ld=K+GuO|AF(J6bkT-ooA`N*6 zO>-A@6)%L1kz6BM zfw)r+=5x6JqSeB@r4_5;&yV$I>Z_kVDG7i6HhAKPK~Lk~ivCQ!T50!N|C`1u0jJjH zj1*|*@rTOHyqV7W2A=M@*DCaMUVEP4*_2&M^5yxjyxgThueWfuDvP;E*@v`U3^~F< z&71Zm`iUPT?x}e!+POqA+T&hVt<#pk6V3SCzYA;lMZMe}?p}1vS$jU3us750X^js{ zA^@4sNkRcbiFO)4?ki$FQ$muVz#f`5Zl~-UuzOb^<`PC%>_toJ7K#;u1|CO-FcGK` zN*@kUx5j|+zCA!QMvCx!;u?e?z1)vg{%Ys5y}#Y9LUy?CWFPfgth5bvlLA0+X%xi> zM+IwLiClM1pXyqsH?t<_U7Y4-ylOjbHAFFtH?Scq3@C@?1ryRx*gk6!h``_r0Max8 zkSod$LfubmXUiS?7uyNYz@iK6RdO#{v9*wpbs?yreNt0iizI_5Ym+PxQu@jxS{I-Y zLKr?t8A<6e1R89eH8aEs0EY~?9^DY-SS>x>5>XwiN1OQkbS{|H7}J(oSQ-27i}s`9 zW#!$bTma#^128^)2^8;iFsLk8kVRrT>A9iCpx!qM!OXE7hySU%O%!#sXHG1QkxVr{KtdGzl``dIvliM?5*%0Dz|b7 z_=bZL#SZZO_>RAPI2`c%{xf#Q_l)Z%^|gr_!73Jp;bo_F^3VFc)pSNevm#wHe+V@$G7L&56rm{UFGF|ACm`1lbj@wSY_Q|aYXR^{H%93q+>IW^RaZaPM4EHcZ z_il>t863!yn2Ub^C0e%@uW*rv%E)SXb~z$xLM``4R%ecSwe#D@rux ziRR*PA3kCUSKPbWMX z@ShD}I>x#BTc6IIj2plns$zC*;&mU$u>mB==c7k$<4J#n2v4+#f3y`}Fn{N}S161+Bvb%m(Z zvZy_$a703;@F=Ux4YD8lKX<6l1rA`HSaZZ*hXT%?^<(zc#N61YOh-&^lEiJTYo=lSW?QgRZyb7aAe3PnGdz93J?8GL-?O1--~aCA zxkpqpM9$qlRY{n;@%|LkwdI7}jse*Nc_Hm5G+n6FPJ`U>d5h3_bSABlG5=J|8QUej zFbwj->2AO&6Lu{sBTb%h(&C?C5}RP}Vaxwh0<$Hv)p? zcA*OH+xKns+$41-S$))+)gebYIEL?PtE~e=P%_f&CLv95MhxhD_LsTW11Ck+0 zi8DKl)r1zsN_?U!@a6-}JDdSQ4Wap7?<&{!3^!Wzt8{l9=KJ|Y`2-Es2YKJ9bkEoB z@VQ&5eAqYb#_e$9qU#T-3yw=wANqOT<-0WeX9%dQyVsea?ZT(-1vZ0aL4|wMqJRH! z*zfO5PRs_`J^ghq;Al(`uIcWq-8GNs`_Z@VF%n3rVJWc|kCrbqbz%2o z&zo<>$zpytltuYv=nc?2^lW1WlcEP|hld@DOico|lvO!KzclSSVY2$fJ750%l<6=t zD_=eqSd~@dRdnfwZxa)^UNzSY-*%|H%b@_bX;EYsqvCH!FDS4()D3L2(j@?60J?es_XpwxrpM7ydb@BqpX@$z!c`*fKu z$ViD(bcOfmOfynq(F?rvjK3>(^uPc1NhJ1uKkxTa=}oFu-Ngv3zr$14crU2n?ybPX z_Fq1KRORUtb#p3wmG%7Nzhs#)gPLQkjwD?=|1N*;@OK^W4>LXA1WC_FQz@xnL6v&t)s|RWQN{BUB4W|<=tE^P$_DC-Qff*D8LZuol4gbZ>U-9@)&ZlYc z8ZO1;uQhgGFpr6|kK+DXgFlBx@EULbT62^(`hvkglkk(YKfaDe|NRFw9UR&Lg@E|^ zdxa_(60jh*zt-#l)6@Sr^#1?+4*c+$2?ccu4^emZDt-kcwo*I}H%S9Waua}<{^wtE zrN8^UzdJU0{Bzp$OK@CQ5P~A^Bk>%qcC1w(MwH}~u`jUnlYCkx zK)nC;JMcaJ?>-8NM32oWvhke^nXO_IP;}aXo+||RB`yIkGvU%ck*=+#%L86;ra!C$ z7Hi`FhrKrsYwGITMzxB_7@0>&6%_>(6%a*CsuU3rA|Qhxq)3%Xj24lIF}sQo<~&vb z1tB6Lvk?JNh6D&h1uHTOR5DeOsqC#1wj|k}<@-MGcYWt=&vo8&zB7K;^M{wcknVA< zwb$?d-2*Tk!7Y8R0iF;6y0^t#l_(Bwc;10@@;*>xvJMY!Yr>03`Z5RPd)<*`N*i9u zD4^mx4)wKTuMaXfWviGQum-clzL+ylat{rnW?S z3)6*dHWQ{Rr`n1tlqp&%XEToN_s%-hA^7a$>;cEPxbWUkvTFYa$BW-zhdpZ{a2I&P zPjNDQGO&IsCCZhe={6=@i1|;S8W3ncCE&R7Qu10V5#o`{7#9 zrkRrDG_bDOR;>t#T3$ZoYdsM$Rkks+Y^7C5+4w}nqTa5WFq8p8*|v&UsgMF@8%0-2 zf>MYzFRzP1)W$?}L?y~}se?T-5XJAS;mNe~QnK2VVKXzaF7PtRY2ftfbwQBRkjIU+ z4V?5b+KUhMGxh(qrypiw`D>`>P^KQ<@ZtT)hU;yDEN5SBi;xh{-$J$X4~10gz(^jg zuQ0f7!;t-r^eTAxyr8VfLv7$lmHU2CwTE)Sx;|=Zq?KaN^PpGvW)A#b7i8#hFK5F= z=znZks3MLS=U_AtDo48ZW!XFa#zl?)$LExIZc^I&nFSa9^KbSm=x=5x{E}ERB3}a~ z5YZ?ZP^)y?|K-vZm#Xrh-rp55TsyGz!7qFao9z1Mhs*gtK44%i{hK2R??7SfrEdXZ z3&A6(>6c|U&qELQSjj$v6&+?NeOdM!$L&wt-we)PW<6`3_zrMC|M@o;tfYT;w7>ll z9RG>@`6F1+griUIq?yt=UF2G%KJGcH%0SXO7< zfA&kX*(vs^A<5|_S*E(dCU2#{TmxUSVpJVfSZa2vKRPJle13!JQ0cwY54gh?zy7Bf zGj=e09rz;uQY3<;Yv{nLe%c8+aHXnvYN;qbb@N^4n}16S`CKA4lci1=e@%3g?u9@v z0}Ug)`4#(N-vg+_;1qW$?S?TRTl^7`{$<%CRX}_8viAPWl0V{xu*UQxneu87(LSGy zSJ#sKl*7~I>;~q*x0oIKppG$0O2725{0>2pJaO>Jm{sfi+EM7#ii(bn_Y(qKf?c+) zc->m-LaYK`<6Y2?PzF?koBMf$tfMD5eZgd>Jda=%IJE_497A@MonMUC>%fhUxr`qV zx+G-qUJL6F#h%o4r|c@7-;lFhRO^E~Csh(bqYNQFjpidFfhtyZXrO7oNGetHYySmx z6tla4`+EGtk_Tv$R!Kq;}<<2y^OuLhyM2`fd}- zHbX8yOxnAeylK;U`?B1{$xcqpSlS= zM#l*j+XLqfr-ru*yJ{QyN?@RuxfbgNt?t3`(#GFo7PM_a&TU@r8@e)WMh8Tb4B16w zTaV2`@gH`=<_- zpSWB}ydy7?l-DHM1!#157yBOZ%2(F^-NZsAopJ?fgYBN3FEwhC%q+XZ`?4$> ztqQM@dlqNAqz3eHZVf2~Wb_>$23s4y}2Dyt?oYZ8!lv3_Wo)qImx$qZ{X-Q@j*%2Qwv4%fT?^0D<1jllSg z2Il_C5%~j<^IhK-Y>OhWk%T=++gDoBxi756L{pyKkT^ zNQM9*&JEn3A;RS{A2E>ua<|sZ7}|k4_BBuR@CITV%Vv;YV-AmNn_<1SIal1ww$!<7 z^Gf7XjlqZRX5-FdS-VF&b1TekBV5xwZ-$wxSCOlv1F=}O2WuW<&uu>1y8mF}aT_aT zpGVZ=I^S2$lN5Y?why>QdZtgck^PQ>z+P&seuH|{7`}HT1rprC17jDdDZOuu(vCBc z#iAL=u8&8*_Nb{$NhF9Ko7V@FXG4?(i#wrOy9{EuyJ9PSA6%b;8K6cj^j$*^fuL=3 zjjvPZzx4qS1CMmYJ73|8$SE7@`W@D>Ur%-Mj**{)$+Rj0o+1|th3ucn)x^Z6n0wRQ z8g2q%E!G9PlORb0m|}oovr-^0F-7YUl`gUdF=7Pfwgc{#SvyB>n0Aa!9S0`FkcKQo zo>vR-I1~DMYJzZENg=g&e-<;z3J_x7N2Ye?yLhp$vRB@GWV_Bw_jpbDl(70~0DW9X z(KzbPI%fNBQN)ReP#rmQm{4K=I=*4o8~ayT4=Nnog2&dhd)-HN&*~D+C246GKHc)l z2lga;vy-Z>R;YUH5S?9^7KI(b++^#ddVqL(kG4m=)=%Ou&s$)R=1EdtVf(=9=Osq0 zWZF62h*eAPiZ`^guN+Q_DC2mc-ZhRYdZ~k}Lf<6&US7&N%n+4iVn%3r|A2_y3JNcD zg%FZ$nPC~C+tfgO8ICt+*G{jI?gYoQu!MvgP+}1}AaMbwwS_O>neq5c%z>saFRf*w z8+wzlZz6qj{bspR61s+3)J9eWssvp+4ls=LhMQuM6)k{AlvPF}qnG2r+rmfq;?;f} zti8llM@^5Im|*$ui*TO8qRnkPe#zETNLmy4)C|I}_~;BjBG>~^Ty2MLQ>;tdcpxU;#WQn$P4A-PmdNyQ&eKnAL?diNI@v znVdXIvjfiK-Qff+lwC^A5t9-o4P|)k*`^pFbJ=^A3Sk@Vn=BBBqYJ&BwoqQb;GXd7NWHdri})?@6!ndb z{K@-TwPuz1hoeHT7)jQYsI=Afak-GBkX#T!R#-h65*2naBVe0WQZP(R<<|GkR+Z6Q z(PF7XB!M7LksSl1=xyjFQ2&m`NfOZg?7*lT@?+zzCA8y6eKIj@ymuvVHJeYwc7F{& z5F}IBRSpW`y;BZ>a9(S}M2#TYOLU2;M0InPM(5YiqyiFZX4VBILXTNM%qrB;;DGY3t`KB*y=xS4_Z1X1I_3SCK?_d?#tliD3-Mn_{RhD@SeMG^x`?ZpHzH&^n{~oWlkhAAM zzdbfs)uVH@P2^)A8!6vgBXokzE(j0SdrJm`#2SP%SaXRnBo4gyl55e0SGaCCJ4wpW(r@m zX|356nNO)qA2z#U`^Ijm{a!=3sJzc#zoUe-Jp05?-8O%)4J-q}**k|LI%9WaZ7KEi z%Wd<%cG8}D$d8>`MYgFj>}zbM(X5raCGuJG6Be5fDi0PJ9PRMSa-C+4RG1yeKON-i zZ_LprO%f$_;7UDcq_pplcV+O-$>ZpF74;)n?cL|E(u^LGsd}x$V8KR3o6ueam3J{nPkv_aWZ!Qum!o`9pKU z_-m1QXSd0KiurTF(C&efYe%;a!f?sKYg^cWrm)C;Vm9X}wT|L02Ok>LtiGL;^znVX zb6b9tsDuH2G=`Hz;FY=I88{)ggPRy%-$5E>3$mMGsn{x676D@E#5ugRrXq6UCm_^F z1&Q)PVFtv@vA0UV%p*7k{UCL=honrCOLsx7dt!T7OnXW@C7D>g$RMntza#*|%4(!! zb^zo}J|%qbj?QC@!WR~2*Kc_n4nU@Fhj)F0xJd);Ym{9n|#$evK|^J z^sNzx*R7_x3t7pAS-;&OziQU8H8s4^dGr_8hkJ2(o>e}_2EBiSHF_#el(`;%SzxB( znr}FII_J+v`sK0b^y7DA6Rnpd=YJ_mY!yru8}Cxoxz;Y6vMJW*DJm*cgO7c5@~kj8 znq*$7eeQL+)>1L;NBDec2w0k}SbC7)Cc!L05(&l`okpmY=Q&&wQ52{v1P`hrKp28L zaBd@`oA~YcWb9jc8OU{<6r4#YrkzKgFu`i~EnLqeo?@moEMBYSCt-GI)H&qDKxa1J zs7bFFWjOZJ^`pkPysD_q_*nK3SD6@k=sYv6_W||_dIT|vkv)7Z5WgBCmOaA+*({BwgI(3?kxtR)hEThIBE^1^=2<<$LlC4=rAO9 z^!_}t3SN?3%5z1H6go1PKV$l+^axA@tN=+1(siW>X#jw`5ME?98I{oN%|v*H%(My} zyKGKU7$6GnfH=L9R=g^;tHm!KM1+hn!B&eq+9e<)0Ld_SRg<38EKnM#;DY2im^GE$ z&e?^AhV58rb1A?fGSy z>nES#DsPRT6BbX0%PMYKcozpM?P>V@rv*!DUul-(mC!Lcw8QpM?e?3G{2QLCHiw>l zoeKq*WFC22yxOZ+!BugG7nDH4CLX#hvRy3>*ANqlv-azVr^rHY74cp61 zyuh!0!CiGeg1&uhhO63iim$;9V`e6 z;xGoBr^XtcQBWL-$)lNKaa@O$ZX_3W?Xend6hC3ZJ(8y=9sv>2oih|2?4>;(SjJh2 z`5CjHC<YW)%)4`>vn$K{rtaEqYHDqTPut~Sj(JWEwY;vPuPFGoXG85dn~f()+K;C19Z7i1 z^UPnp?O5lL3f=qDA5NGCM z2UN3Ey@38L*Zptc97xg54qT)73It>3ZrnQlXp;+N28Tq)0E_G8P0(IdRj^XK4ANjY122 zA{jUlk)=d3ZR2C0x~uxcUlTMfThdJ2TEh{f?=dM%uMU z>UVY=Eh|5pZIatEm}q|9$DqID_NkjwgXudm4xDqFx&B*`&+|&L0(p4~?PW|cqrLq4 z!$%7i_I29RWdlBD0X}bhl6dCjk*VAdK-zb>H$7NC55zxn46s&A8+K-V0x1)v&(H#n z5@I(y3HS2w_4u|g%aY0P5omNqk_0cdxm)|fq|DPzVP`>T-AVjPv`3KfGDEr_^%mAA zRBf9x0|9+ikv!q1XZY0leQW_+rYYfza2;-Pl9)BSUqDu%{~8ysIF|;&juLD1b_A^0 z5v(lFeT!a?ldc^_t=sJQ%9tTlEHZ1E2@32Awg>V!vG`pA1qRS}CtV$lfW*CZAc{}e zYZ6)Sy8}9S(@%Tz0sYNC(Cv?Y_qanePShN{QT(#29SL=v|Pp01;Qawe~ zIJo8-gagD&v#_~nK*XJ#%}{04sTTq#1+psiBmXLBRBxs_`XY-m?J&=wZP-StH?NR( ztRm8Wau)1!6vE_bm>!z>iT`Hp&KdGhlZu$76L}+o9b?tr9Jc?mqRXo?{HUX(0H&nI zl1C*(M!|ZtL`Y1>*WqT3q=%__67C~pm=OY6CoT4r*+N0@D8&h6v#@l-$wu68b}GN_ z&pJe}%aApj2?;eDOvQf$3^6+Qt;eSjjr@-G$-+e6%X{xNn`N@)MSeRO8_l1lkL~GP zpT7R>fhU^`hD_Ea?z!aW)fDcyyG?j5(xzgd!m6U}+H{YaSF_>oH>WzY4MGb4{BY93 zj5q9gEmC;4ukBUqK)(J#3)LB~!lYt-P>BvwbSDqSg}r5ThDwj(!Cp%dihN@&u?O=A zr!BJw!p>Hy9hv?TTaG@1)ukQv;E5C?L?KZ5wX!l}0N;Y$PEKHfEC?m!>jVl@TM>lh zTrEPJ02OehGjhqbe;v60)H>X1^tRS48$>K_YKC!N3s_8%TH#eU4EAUV0&*KGslasT z^qGfNm9}b^T1{5HlI^Js@(+G9<{vcS?_L@)q81t(8xneMUs=+z%DEpeTqPEUKa8}_ zGTwLEa_#%!0$mrEp#Drfjr`D1*E?BxiHD&zllo&1*>z=e=L)*>U8#o&dTNgG16dJ$ z**Asz#m_bmkQ<{6l8Xa0Zj{ZL*Ig|>sDIeh=V&p*!+$h%2W4g*@QzsX-}^@VU+NiQ zjJrzwqge(pkH?O%1qd@Cj;(KAYEo>)e+b6Rq0x0Hs42==a~i?&;Or=D!42zpW`~u* zW~&0Rd2fvOkt`1g{U&uY+h+c2qx=8tA3_8QShDNu!Hb`*0WQQ#Tx^ryUFv^EngUyzcn6m*}o?gvg$~r3OCjQ}_ z4M3(wg)hqvz$0?)dZ~RQyiM{-T^&J6pKsR7MpO|CozAP(9 zTLN8b+H<6vWYKE>J@;d;h(G&fnVB3xCWSSS>nHBqfP8+aqQ3&%C=Dl1uOZ8wo@auv z6`M}z^(rvY%M8k<@!ZQi3z*;d`h%tLV#(dF3*uSAYS1KFM7*)*xE8kjFn|P7|A3;b#>QKSkC_SQ z^PPhZ(MX6{S5Dj#z7)ELy+)m*}P0e9vvZYVfv(+qY0Bovw`FQylCn z7AGCB36tl=-csvLZ{Ljpj7uMH78af7=n0Rj!>HJX_|QwEj-mfs#(*3gT%}G7CpAr(Tj!juOo-@=_m<(P0ry!c2fY|blYll)G<7f>3dnCc~m5mxn zWXB^h2pjvi)v3(abAJG?7c^FlUCM%0I=L3t-T?@`#Mka+sI!ojzU{QFg_SB0{st8v zdoEzBx(V^PncVEU*bR1`x7P#lt=m>aikNF8Ge;igR=3Z}O>MGA;Bu z{EVdDyR-GA%%X#uK6LJZC-c|Rb0)EA-H%V(#Hg$CL{A^DVMumauVC#7-I29D_C0i3 zXzIMRqemw>eI^7YeFIGS>-cT2X3uyHB02*irl5O&4E`VuVmL)_oY()SHEodl^?;Q_>i zPoRjj6VA(YoV$pc=h+Orrcj=Ho~eqx4E`3O%;vyRqMQyT%)xfCy>~h7ocxhY0cN&i z%KaQ;nn{`<|K)YWSy*xvD0;u60SaL{VI9f_Z9a;IQ5C5p_gx~K({4yijP6Qa;*VKj zN?~D$V#|a&%xxiNaQ2}gB8qAhW;0|Ys_!B*@vs+b%vtnjei1s)8`Dh?;a8(8#EMB= zK{39jtCO^fY8?mxoZSzx<7GIDoYM(7lobd@DNqUe3G>jjgLT6dzjKVh?b{H4WF_Tx zwf1UH6{sT@N<{pt7%){7&Y2zIpw);MuZ^&4grI<~>J@T%R;ff?x-uHq8DQ2zP9^I% zZ4?5UaveO`VP!0{8gYmcGWuxSX*(+4KNrleb}szvA91A2p1D1}_@M2F_?^WJl8P5c zv%pNxVeEmSe`HF(&rdm5d%P=>OER+KJRV+hZ8kP8x#=TcRi0&k{8m(V)p73Lo93>r z_jsqYvh}1}{K|koS@GOtT6=$$+lsUn;p6v}Y=i7jZ_ z)UK`q9NcvUK=6E{*Jy(CaHZ}1N-DQCm%^j0m^M)ZBU$d&Ha2oi79<=e;;HeA?#N(H z@cO3|9v+CD1&p?65^03CPp^Zkg{HZ}BTSjm1GETuif)u1qQ9E3cnp_xsPLCh2k(OC zxBwKV`J-7P{ZE(uj-U~O@gBG3WtUm|pAJwq!n5&iGuV3jdSm*d!d~-#P{;g@Mbt>7 zFK9k`fj z;#W35j&Bs46jMsBbXnoJ!jVz82Sl zzwK|b70!?0I$4kXuITN51nb@q&Ks)jBf{=l2QX;7p3DgG;PV1lJaQ5qcOIvK?so_U*h)$2 z!=|-&(Hre!yQ)MLtLv(5zbun!U6LGr)(pR6-$yB;#h+=8!cv)Ev|bu#4Sk4P$7m%Q zQ*V%vl6KI64IZhbBx8F}N2IZpunlG3h1$9iX1YVjJ@k@@UMG@k0o89>lh=gqqrSU{ zNsYpMk@+oB)epaKez|-1(UvYFC6|}Qr+49(@Ak`F8`F7yGSEQPynIGVy1$?nqxLx!z6ZbeGjfjx<& zXCeP^*Y;ld%MQzkZ!>=kFaB;?e?#?dHRH7Whv_R!zq$XT;V;*ZnwO{lh-Txfif`sefM{;3PQx0LQb8tLtsdgor1f&0c6{qOS{-R^<1 z?)rWw?IX+o3x5=UBmS3aG(hkX@Bv>3kir08=X*f%0gZ**!B_s`O;Zfu*KYUO#-A76#Y1pMC$tF5W3)PR_c<*^JtC1l0QG*h@-^ zB9zYO9?ZCG+dz)Y_9R(GEX)5fYxzeO>Ouf@XrBU_4>p*JE%O+yZb3okecy|9Bo)<- z$5-L>l&Ps`@=>-WE%Km$DmBt)9c`PPntQ9|Ry&i(Gm#!~c^*5MYR9$9PlTnEWON9N zy%G(z67>be9-f8X8eW=U=Cq17J($>Z|74G?o{o`|%O1D4;8FeMytPo93qr(_fz63* zGeHsh_?BI|xnyD1O0M*nFEhFWeH>(!iHPr`Z$W}4_LpV(+#!C}*RZ~8H$;$p4LOC6 z9-#qc_+*c>Yy%6hZr)#&0YzS0f*=micLSELrV^SHL0aH0P^u=xFtK>XAcFt2>je=G z2K)4v{OS2_KIm%w=Zh%9G)dqUeA-VpgM|BG@CsR5FYkB42Lo8}Ro+(ck$u+nW!XN* zX)1Hc=oB8c0w}~JWg+e@1ysJE^AGlC-|LCuFm3z_?&lAEfCFs?Akn37xmsNKE();h z-fYg@drWo+^xhp5`GViYpcXG&aB!BZ)!<}$SznfYtY2#UP~QU>hrfKaAG)W4fQwMZ zUE#|7+A6Y6e#gaxDm`eATWuM38L7xNv>o1^a<~4aq z>m(Po+YRok^fF1~YdRtizU9!I0A5n~Bm`jm zAGp{BP%P1XKSO`>yzzg%^QdX%%}WwJ?Aj;=Q+rALJdO8mhhB|u2k+w|7!!M;3a$l> z`*%;9`PZQbhP?LWODZ6(_H;dfXeRNp1>C=e+P{X{zfZD%4YmKjtZIRKK@gM~dIc_+ zIf8nM@yg*Kp`xHpv@a|GQLl$NqHdKvm>%sQTvh8CNCnisl-NsY6&d9Au^%`8V=7wn z`+;5uxJ$`wx_ooxxm&$e@?(~}@G2w~1~vXXJg+GdA-mJP?@U-|q?Ep!K5?q{&JTt9 z8&?h%Z$0~zTrLl3asml9wnOn*7UjyWZa7EPA{|B{EeU{k1 z4X}XK|B6uuu<#rr%^vu(nFIk#Zsz5S5iEU@P~2U z*qprUDq$maU!6P9+;_TbwiyBHk2SKXBub|am2Swn|ZaUv4Up;u!U9RR^RB5a13C6a;)5H|KJ&H3vf_L zY}cgLI6vz@|DIrqx_LmEL^aEtwj2`&*sqnJMNpHSLuX*JU~$e=-0UV|0C__MKUuMp zRb$0tCI%}*nzE1q+P=$TekRAEkB$S*=tAUjXNn) zYC0((t2)EeBJlyZt8*^K3y6HUs7uqa^0Z@s?bYZyc)sG8On-o}XL6UQb&$ zD8ETiocfySXNV2rSJQ3j-DCU~5@zS&%Djxm)*LLkO`td$-Z;w`x&X@HtC zE`1K2!Y2nDOb`(hLE@nX84VR$rP=~d3IHOoS5dvBhem2kmv(yKTi)H?cB%bX`3p1e zBojY}Z7NE+KRh0L`hsvS(_b~(yf#X-S+v7HG0Dr{`D*%va;-3$2Qu~HT+Uww+U#d}L}wy@&l9uIrYxjnoTQ!<`G zeUX%Jsk3?T#SR^zA-+~|E=778>j1RX@nYGJkL4^Vf@D03{Yo^1BKSW~0Antg)d_u5 znRg6T5&_eC12jWGNdW{uOZosXE}5$%;if!gA?Rgbt=l#TG{9pB6BOYNfy~hCtxq}we#0xIK{aLxKWUuBUTGLD8Kz9h}{`Fhr|fF zW@pX`NDRDotkp7F+^}rF*lm7|%nQvZJ${^8AzYP@d|9?1{)O7>n$U^uf;%%#M1LaP z_r{do3g)%mll3j>1o|s{Eo+V_0&(>#9mvu>K_I88o(-dnz{Cbz74sD86e`AP$-YN75Y)_)wo)oNV9=tMU~GVASc_jl z!$*svEu7$OIkA^@CX- zgyjI$;*oW+9+pniNrZd=xb&ofg1beoNbU!@ITpbFKMGM1;%|tpQn|Q|!1-0`P4xpp zt{Wv&!KV5AR?SF`7V`4C5V|xBMYGZjzXp%NzyRp-U37)$Ni}f3B;F9RuR2^hm9sQ) z1$G0b5w<~>M8{d6ZV?`r9Yjj5#j=uF%Cj5=Z1@{-5UiN_Cr7`DqXM(9SIk`Ki}VZV z^$`Gv;9#bpSCtwnOy}2;<~+s3D|q!LZvYYUS94aP{WFrE20?UD0r3h~rwNaE3v-fW zw&E%)$+|{J}thgAgGF01}>^0@K>6wVBZsZpf)e)@TFG3iMCWXp< zf2`o;;yOT93AL^f6byC6kIi}vwNEB3R$CYakfi&iH+s$NFHQoX{QGNFBu9oFKswV$ceF@q6VCp(6L1W=F-T<-BNUNhn_5(Ru33AP-hq0!YtC5!jdqFX>6mTO zyM1`zrgqJNVt1ABgoK)hUAc<{R}@hjg`_U4B$F-hg$%^{I{@8IiU4o}gs(Iwq~r+N zbC=4K1cN**3Io$cK>FjDV<%tHDwdT}B|SphT?b!a6;IQ_|6OI35nV?zmK{g;>HX~B zeLs=|tTO*^ea-gdWMEZcb%m=*UnlcM%gU&|V)aBZGi5RNU9)2e);sNt`0m-<_uCCHz9u4ygSrHz3M%cZlXq#9tw5PjfSf}sqKR2aqj&Y z=4Q}VZf>Iw`|k-EHZ$@wFnDSF^m$)efm)Y#SxAiXt&?O$dmkTr9o$W99n^Zv z5<10C;p!~_R%K%gUX!ze>Wr;{Mq|E5-J}k(0HkZyS->`~2UT$L(&Aj)B~g#GH$4Ym zJ4meAmQaGGwUAd@%A8LDJ2faWTF)gFr!tPl9H^~BZ;0mX+Dy#kc3(y15o}P*KhbMp zt)Rc+E5@!GbWjxEAG!P3svLDB=XeY^Z4?ECwiaxCbqZ1B@wKU9;e7Jf*zHsqu_~M` z0#57WoxuttSeq?V5tum?7&i~Z=JB)ZfbmjimT2t{vhRV|BTgDH1G+pL6Zt#~fV^S- z^JcTpzyg#?P~@P#^gR(v8yd_KX$Dd&YM5YE9gvCIfxg6TSlSU_#>AA+Uf$S966I6H z{A?b@F#HK&E2)uVNOf*ESqUFZ6q2-MUI@Q4|B_4UG$`p)SXuxkObYPJkR4gnTl72I z`|vf*7^H3I37eaq>{`@_xKP9+<79hPUcVlDeo5`!gT;o7@wAfJYV$~Sc72=t7;o(0 z4xXisT|l?1N3o0OZP1D4`Wi`0iQ6;?KDwXfP!Tj-Xs!&h%H3uNBct73?M|+D2G@~B z+cNRL6zEc2_77KhdA-=kd{92b8!UO#=cJSJKO1bOp!1HX@8HL#TDJ^D1?xwzwS6x0 zgco@iyraf0|5& z55n2Ex%G4h=+y$802Z=IApiR;^OQFtVvNDQhDXC3!T`!6Y5?u!bdp?kCtvm}xSYn` zkFzhy3u!nISL_cUnnys!J3rkEAfUs2Wb40PeUUUy+$G16R}OEv&9Ec` z3ic!P`OV~KNeEUApqlq8_%F+{@v=AaW1q=Wxfbszb9^TL(>@wd$@2Dyi5R5)HwTyd zgX#W?2jH?7On}Y+@Raa^IBZFjFAx2)>;r(4^0*a53%Ruu?YF<&81t_usL*FE>7V3& zz78;{IM(DSW2pnI@pmmD%pdv~w-ELg)Ip4eN1``1AG-+!a#=~=n&`pgWQVn-;fs=BRfL>z zZ|Fhe5Pco`j(@Z!3Q~L%{vl#Z$b-YDhN>2vhBfzXbGJUaL}!jdn`?0Ma=#6wzO%XIN|A+Ie0ipEybF-bpW5vAyWlK!sO&g?;uGx5WnFrSj+EOyaLs` zJ8ag<{RX7tg|+u;9;1?430jXcKL!l5LmL}TMpZOkwmUpv^P9DMee*Er!D&P-b^OV? zOATxrTg56vZ*FKsJ?ir#~Bp06_eD8jY%dJML5Ryjlo^0!E&9dS*?9Br)_bOa>+(YzZJx59gu@^w;ln8W8 zZtVoMp(Z>VY#^%($0w-exWocGpo1=*S(&Leo_}xj)n$<3{yprj7@*eH6iT5E7AM;Ylx9-EmVoN7QXy#182}- zpO|}%u#2o31*+ot%eqMc9)k!}qD;x(?WmLv=fgDWJj&~?&a+6ox- zU-iJQ8|w6=El1CZ=d~iSorAQXs!)q!AszkJ|k2_wUbZeq3yWp=!#{&9TYowFo0@ngDO*D39oGp4=b zz^&rhl1;+Y?Z17PjZ->#wEVK;@=TGXceYKUqV4~-F#=adk`5z)g8p_-eB!w}>fIihZGgS0bv z3xZFjD~(SuVYY$H87q;Q$(O4q=J)T7PpCF1G)s3|f*S zooqvzMKgC0Q^SU=?b^2j3Qf&QZtaCK2+kBAlHZO65F{YU*`$O#jL;=2+VD-BL~2p3 zWA63s6xB%VTZ$eK;6rIKm=S2tZ38C4VUoO8K;ya{eU5CiVo0Dhz>zS4j0OTPTgZSI z&ex|hL@!fdoR~TLwvzgcL!eziN5tG@U&+LJ^c-R;%mx+U>IIqMaDHI`O{>51e2hYU z%1J|<4A%?)9ec-(&1aPTwF$BQoDB#; zh7Bye%mdkCK`H{h44Dd?Bb=Y5NMledG5sp5_9Q#gN@fb*ID|%vp%qkqJNL=9;*w)j zi=$8bID4_~1|ToEhOL_d?)wbU1=I(qS4@-*v1gK?dYQJJpqP6Nu;Nw(z2fX~6I!Xr zoD+mg0WyO8I&_AT!qxnwv=Ma!VE|Tkoy>%I#o00nVkSr`p%hU?O53V{d3~gbLCwI+ zOsl4d2+^GLG1xf~g9d;r0mm99%C-RYu(`a5MikDcbC(g;V9!}<1bu2_Cu@aO(>a0e zAOtG>W%O4>WtvYVIwS1NLP}a1dQ)t0XKdI5{=CEonxb10e@Bw zrvU4%kCICW(6H>fEu^H=mFv)T6~6=0Wucg_D+?khy`r0=BW($7OSOLWOHbIG5c?=S zuylm=d$)OJZpw7MKdEr+2>ZIF@mPh|gY~uNb`$5GUZT;>)KZImZ6o$_{E2;sX1Lf)DRdb+)yLw@qrFWc~!1JBI7rwM9O-x!l_4`o>_TBBEg_MxcAn8Gx zRx7tL$P6hO!| zdrY}UCF{sG zJ_OX;FUx*jpnQWCMxQ5Hw-@M=w5AHI2Pt25NM;~!2P7cySmTPqSP-v?tZ+fap;AXw zEOMT`UI}sw=sO$Gfe0xf{4749U^xuUIl=|dHGAi_UPby#lNGQZuX%45XPf-4?G~H8 zu?>i%S2-D^!Ur> zNbf4Q5C5a`wd3Ih`se|uF%7Qaoc&i3|>`6Pz0<}CAvbQ*OsWulF<{NbH zY`g5681Md7JF`5Emt4h&9~_2nFf$Jz9pDC?hdcYhq?ZP6sfix z&>v2zJfrK5zBe&NS>kB2Xd!)!#c;5N$0bqn2Lv;e*ESZ*PCE%J$QL_%SIHcJB|ilO zAMDEY%dD(puZpt6*P1Zl&aFlr!P-a{W5Ks(s7Xm|ik52{f$-;TJGtByJ2K5+PRUPz^iTK}AFv6$9q-IiTJY zkW@jSI0E+wM`rOND@EEj2qQ_RgAhe#?L^f`@^XSM>IgD2-!9G~V#PEOzuleK5&xi3 zOwOdQMLeEW9-}spS4S*n+vU=$iVq1*%>rOEc_UQ=@0d~j-*=NVZX;GgUX zyk;|8sn35veo8NK+*zV{@Ftcl&)`OZiHg0(zCm&_9QJ~?72%tlR=f^oF0&f4;o^aF z4_Dw8HHpR|)}6uM3@r4j&9JmFeHrlTp#{8S3H@#J;|JO_qF@?fq|T_9ftd{sv@fX_ z8eP6b-cIiUTy$BO)FGU!DbuT@xxS*WqXKW%9wbb};u*P77=8t62;-^^H=U)~6au7a z6PgGYpaQ}lsI2eN>x3K;-zf4)fdOKYB48!08fY7CICZ-!yaB6In@pi#tcTIY;kCIp zAE6OGX%n_@8O4_08~UZ5eK_sZsa55n_R~Q7iHOpXvWotPTg>7;yF$fDzl>2qN_*D| zn=$W5s?&jpp+xf!ULMWLI(Oa=fKK>#|Gh5kf9t<#126@1qG*7R_9^*2XaSNPW`75K zByU27UzWYT0Z)EeM&fEm^Be7{O)ZKt z;*a&pGOfu{gHY~*d0FdC=+_beN>yJ_0l1jwzJPyMf_*UR{cKJ!13y<3&SUq<+7=@f zzy2qaue(tZ@$}M(d#Rf>gxuP|)98=vJJDzsY+Ex`FJ|y+Sp84GEStkEg>x5&Vu`gC zr%_J;^Tdeot(!nR9eo#V9}$=aNZsV@VeTPeL+}7&s@dkH^+r$z{CUjo20?{b_B{W$ zxNdkY_r104$Imor{)mJjw;@ZXng2ZOS?(Blj$R8zKy^za?1fl4zY$Ypf2#W+=Ps1w zuofW42J97(jHQ9tVo!PDmu2pH*wRD2e>*30&Pu`!AUxzYEag?gXYVLwZy4=UzYKG0MYI18TtTAbz}zQ2QJd*Q4?*y{mOCa7UuwYS-+*A2k)?nF{?b5C?-IB04HOOyIDzL-`rj_lPvzf_ zFUgUTLFOR&jg%{h2l2+<<6o8qT)YU#VW0N0|9Rv1e_o>OmK;D=V6%d+wQFIGu|)Ij zECuw!j5o+>@uUwD6`S@6p+x=%Xb88K^}f}0NU$ct+}nDY6i1| zov#ef77z8HVTUtCR7_WXmn&$-G@wx}2?ym$H=xVwfbBZ@aaC^%caEpPrfg-4A0(}A*#KMIpdMcL+ckv7|>AFQu4CoLWM zZ%_8Wy?QneBt2p(m!*5?J$mtei5v%-4f;#~rEY1)8vGBNxZV#so zO%k^b+IP(bl>lNeIawB}d!v-f1T6?|*t{m~6q;0EoH+(*P{{`d7u5E;HGZnXVaj57 zZztc7vreWAJh9Ux*=UW3oCKOAGSWk|rWJIm%GKn&G^R5Mwk>U7AnwDjc;HlsN8!Sv<>I|~D{ zb?fX?&qU^>PlcY1)xP-In~SG8 zN(}(<8d9O}rYWHH(v9JS&72`C;wgN_lJSHZI)y~>Ch$*LJP-f|l3*pdsDVh|)?JO} zcsKG1j8Va8^ zR_nyR0l<4uqrc?f@`5vGB(+1bK&!bGBB=^VnYvSrV8qtzEt9S2r5STcl*6eAvg(2Epl~@G`Ecu?xx^V3VS#Ax3_VEz(uB&G(F=dq9hG_uHfQO9#g}pb8YAWs4MQsb|j7T4vl!b@_ z5*rXjOg=@R03p&NT?!TH#ApE;F(!&Y=u;|)(nUl>dJzysAdt|MqDJ~oNmoiQYpKAJ zG<9G19pB#j>^kGzx@U}Y?-}EKKODmmV6k}DyWTnHGoSf92U;qHuXj0nJ471uJf379 zdwkOA5==52Nco+ysdv7(sot;hrPCRdo5V|V3MHwwOhozF4?c0Y6|8)qGuv8?vM6(S%%kcL8)J@PR#fz z-SPHAC%LSTb(^jwTp+3^zTU}|yLmZKt>4(|7Ku@4x#Tbu z6vV>aKJNmFp2B>?Lm39E6HAg`6(#58CZI1;H&&e6JN@}XqC##=h+8H9Q8yHASOUU$IAD9B>bY`2(a+oWK2;xj{RiOGZfvqI zqZq&s@`ZCcf~sr*Oa2{|dqH)2)b2Vy$=q3gsjEdj6w@%2ATuU{ZueC_Lz~<=MtI%> z1oT3EBj;OrC~}tv;%z>9rsyFOuDrh;U&m~Jy`6ak%oA0S<3w&SwzIs_{b*l>k=6dG zvrn$_BZzne1mm@rdM%hE*Z8b7oTbDP-clp>N0vkrX{?jZQH!Uf%({SGU)rr$bB53m zu|JxtABIDv3cZ07A14qEd8G@w_u_sG$8ADx!u#!dzhV^w*$ty}<3)z~%}Y-lz~ymo zKjD6SC((hpvkdWZ@|cL0(4s$$QN!(!V4&}+Y8VYrF{k0S_k&5MZ%voWW>|H5=zP@1 z2psORjyo{f1|S5urw6&_+=m`I+B=8%j zG1>ilah_-U(Gn*VTJ_=6{n`ncu*b8@Ol4C&|LFJDwiG+Fa~81rqZsIRg=Ou7N2&5j zp8HCLXTLuB)@=GXFPtha$nvGwXN$H9o@Gskc*2kFmU(gbg;!y4A4<~Nmc5c6;OZ;* z(|@j5)zCh#9w=FjB%HfPCUuRgNb@Mp{GX|oL^9Fl3F7n+iRgGsiGd?Q$EU>*L37+; z%fuL(3eYgJ#t8DgJ7O7WG1>59Vd2!c+;`m5Q(Ab2x>uq#&|)AtAk70=JhWRd!Dg-k z&ClvYs`6yZI%u$5K+;B79YYv}N-BzsXD^NG)j_8NHR0{~^pqA8UxJ}D6Yb47t&7Bu zl4)L7tC|vLWQtkhA7_9stOb6guWhs>MW@q>$&hWLY=G$PTJ`f+8nfwVs8}+V6Z_%o z6HAP;scd&Rv+jJVV1#0S?>*vl7_`AsTULYu={Ue_3XLr6vnJ5)g~y(%rU9k^2>x;_ zDBFNc2v96po}araWU5L0fu)!`wAusV!E_HOoj1#Ygr7K^O4y(ir}5T|4`?^26yA#M zlt^LvaSmq)^?+gp6#57lWZW5Vci9oNc%M|4Pd=VGr)zgC>28^8$J@e$EL}bA69yJq zr*^;oHE&5fvD8mN zVvFhx$QL$l`762?a?Qe1OqWtr9>Gy*KFO{Q~bB zq^Lu9;p^ADYwm)HIBbi7&YX?#)N=u^mw63jW2)vT`sn&B_)d_s0zOeY z_lEWsJEAlL<3q*x5GR!ONA=2tsOUf5Z58U9pb}eqAHLVbJPi7E*%2tBSAQ-1OL_nX z2|*dm28O!T9rJpKr3m!E=TnI&tU2KdOP*>-Ch-*|+mI7glArtGIsyHU-zOmp`e~_2DF*vt2hxMjb?-M@yHn(240G<6P-DePV z>m!asS{D+)=vNAH^kQ^*?|nEr^J&pOps|*Hi}|Q1ImURed;D1dV&0kEshT;VPEh*% z4!5i6ocjm%V1}X=G*Esh{sFc3zmw^Ic>`uyd{a%TlZY!pNEetx)wAAkwg5ACHLNV0 zr($h%@xCMoi4qg2zhj`^kn9fXO87#GwF#`*iBa4Hfn;7zK-$0++&15jRSAedKe>MH z+ykU+8e12(XIB^t@->nIrU_rc}N6 zlt5|0e9M+;&A=T4_p{rmTbsd%{KK#d7lwQb%CQ*~=Lhcyq@a?pqr=+Auk}c5z@+*u_YBP54 zYwanwE7|2%lvd3ddCYe7zfrjmW`DyX#3ffc@ZYI=+UM7TwgU*2!I%`*2HYA77TE_t zwPczqP>KZT2P3Y<7$F^cGK3FdBx;UsNfxF1x%E`knamIX1q9QwA&@NU96d0eT*XSF z7($L?!p_PP-^qp{m5vylVQK9G@82rw=K?zm1Glr`M~l8BMsVPNcZi_YVu%S_ z@^_t4W+Vr0I=#Apxmva(O;*3CN7?z{y|hTkYQ6vF9E@s@{6Q1-p0aN^{`@7E1Z@Bvacv|s=u`a+q5}p@k0DKYwnsd5W zfv1hwW};fmZXOc5pgyx({J_^{@%kW_8Kdyx@oS%p_FIR*;^D8nz;tOdKvQV&ysSR< zShaWnE7tgfw_MVir%e(!6U3<3w1u#=1DF2oI*hr!_-=*In7R4o2*AgtEj*Ns15k#A zECFDnsjq2a{@=aY`I6w#a(DyD%fNgBJ%Sj^}(qu4-CCpEkug*5 z|J{t2k0|(cAGH&7btm#pxs{;nb}sk}A06BED?u*4-FEZWx)0ixk0U%G>w|Hx&K-OA zA+EK*gRLF7(#2!um#K#i!Y^L;294C|Hya1xwCwW*^o)PMXMEjd7Kj+K=1Tyo$Fwt+ zx8p#6oP({Vefb1TqW;Uh)Jq#Uw6E4|nm`|PoZoPXQ&WHZx#DC9@9UO!n!w8wkTwmv z{{51eQ5+96(f?c#*v$B^mjaJOi4GgcQVDS^sC$Md5kHiT30TYeL3oH^1;~RT)nC8j zAMc)DRy~e~%8kJ%*G0^KzaV1{Lz2*dSyW)xUoQkINE_t(pDS!j+K5Q-!o2KqKP?jC zNl`nPh!WjLE8KZ7CC zJ|Ka(YZ;t&xM}owqz6#5X<}LYFhgSelJ)Hm^29$cSR}Rwr61C!-(Cukm}++*t?UZOCccGEk)w}2L(*TNw&}5KU{y) z5M{qmj2d~B`Da~7ux4^__>&vAIxNX=~WIv~Y zrv1iKJ@2|JkdSutnZ_L3`;8y79|i_SWc#u{W&e%crnJ*v&&9k*X-Eze6yN&GR_CDF z`3QT(ECD=xPt>TB3bw68J-pu<4Xnu^vrcrc$F4?AboNiMzzND<1qf_qr`Xs zX<*~2YhlO92JiFKp9U#5+g}Y4P7py!bygw|UoM$zivUev4N4%``#hN{B$q(l7wC^< zvtwZFL6fGd0a~rFwEU(QRZ5NcEdWwE}I#`LLm{e%3alv>O=hSe{?RR}B z1(NC6BKsYkUgfEs?)OSLD#>}}18(I;2F5 z|M(WQmb;)8bhiI&c*!odVA73q^eBgIp3VOVZfwo3V2X`_qIkTOTmpD$A#(K+e91|A zyAHn*DQX9;UF`=EPtZoQ*M&fVHa?a}p92_xBAcqwS6O8Hq{rG}vrMP?`C#4ipFi2Y zW+t79(TiOw9ANRUV``n}p7lp#^(hyCqWSy%i%m#^IE-u{%D!ezfWEi@9m*jgsbibz zSQl<1biV!}#cY6r$Fd13HYGkIGq~08g+y!bAD)GTk=8dq3@C*Ck^hC-KRc zuf7y@Z~_nm!O8R9t5#pl(=#SdU=VP;{Ddc25H&pL^U5wL>tj9aSk~=n8~EhJ&EVTF zvpg~<{NxyzyslSIKp4o?-hVV{SV+PKLw)1DSR9>p9wlP#*g3UnE$ zt3X@&049NgDwP$O0K0qg?OY4MXiq{za}nZS$R?r-Dc><#CEN}Q5#lDd ztVU@_eudJ;P5YaU-L(Xo`$!8_#Z-TPpt4_Q%fA1U_ zEj1mM0fgf3tY3gBP5x+ffGJN-j$Wx`E2q2VlDO>ciz!H4s`#PN>W;ecG2EuelDFM^SAO&dUs?E^UT6DTZeq2oG9?V7w7R;?;+L;L# zV!81#b534FWiqpk2i)X^I+wAYExikRPVTig_6nt)e=m0DkUwoKLaP+#2}-421?UX) zSZaBRWJ`mlZ$4kAT-eXt}Q6sQUu))wZfErh#{Y#7#7<=4-T-}em{sERQAQl&Aa{N z9p{UkZf8sV%-9~K+Ae9nfYFl<{@R;}CY;-$ZwSb7*&_TL2Hq{qPHIsDU-cuw`#lF+ z6v*x!RP|heQO6~28b%qnnd~?w$ZqAXA`=`C2H1id-rL+CAvy?Bxr*UbbWI|sJ#gb7 ziDZ#a@Oa+~(kkYPND45DPSO7f=&cQPF#+LI>;qIAyI^bwLwyEB*n9AW4pa(G1-iU+ zMY63BneJlK6oB%0Ii4P<1GN!thZpd>BAz^zKKOf!S$2%RuBTk# zYpwrUt4tWH?Q*nr!oj_RyN`WN`H06R>75t4w*C_;!=G7P}k#^p-E zk9`!y;1V1D-1+WK{moEfVNhhDO+~lhfLny^P@ktyef*HL7?5qV@GAk|f`OK}!x@FJ z6L{;{KA_vY0rH*|!x3$O_F4~=n$EXugqa*J-FKk#Ie(03B(!8>lEE<$Pcn~~cuYhZ zWIsZ;vP=EKydH%w2i|RHoEpSO;Qvkz^eEwsLJ7SnA@M}E4eF5jCdbUP`$p4(=)Y?! z9=-O&Cr?D6UwlmNJmWOIyVSPatNeA}?9+xZYn#>+0T-+W)E$n0zT>FAQ@ed{T)nUV zNUBG8|C_1a*M@F4;$_e5(t{0+&7a{>6o7=RVMq%Aoe|YR(=^3xqrM$qixdhm0C8K( z3Uk)!Y(c?T_7Dr0AhE6zm9c;}Xh)Er(l-MXHLk*Vs8x32{6}W{C_bYOh2BzFX6zJ< z%l_q5U-7k8JoGc~DpUR|Gj0j5h_jUSQCA@KkU<9?O>y9JN97K~*tTwNa`qyzPNTFe zf~MA_Bb-+zGx&+mA%k|=`oV=t#{+?#oTJFD7%Xbq$}218?(}l>Z|`zh@0fp0ckKU? zoL8Pm7if7cx9_GHS|55ab*R~T&t--FQm$eqzuX?>r5znY_sP?+&HM#E6JOeNO4W=l zsBx*(`c}2cRQ6)ZPW-G5|Jhv?3!ni(cmMhE^ zkF*$)@r&-j>Yla=gCLghP$V(ZTHEu_-w0){fVg7g>Fne^z>buW}q{ zHsvKuvWu;b4X)2K7Q$N7*E1BYmTG)hC(8#&VzZfi*J7l&p?)9-ud0F)^=$kYX|3`2+qb@h;~SazTu`!s1{Ww_m%sjdHNJ@d zTMy$eHK&o-00&0l_85SG`nXzlQGcJb2mq*HB^M_D{nsqa(*9PmYrn`-1|xZ2G{j)%RBRJC`-- zoCH3qC?yJdj$6PIU7L|q;pBt3y>;L2 zMi}<}a>K#wL>}?*6Yg5>$O4=flEgk3LW?!c;T zv{Pb&WJ|W!l1A-l;ECCzPU)qqweZTf}h^fI= ze)uITkB6O}kDDIX6GH6rLVMH72HW0LeA{+tgG*HAv*S0L*mVm9v6*3Sn7Me9# zCIRF`4pzvL(bT_ss?oxQtcgKC5PeTG|6Fm~R+djf@~Oo0{E0=;}m@TIpUX@?ciqj5Wq0; zrhnbpzt-$u`|SV3chef23-q{o%1SZetx0;*m<+~kCQIt|Fv^c8UEt0+;WCWV3lz*P?O*0 z)$UauSXZ>p9h}2?Wga(5Ty~VKnb^|5jlCm<@+j^2jey&+=1~7O!DL5gx`O#+Z))a8 zk;{$vO`29WvK;EQ?tj?l_-pJ-7w3lQeplP$q3VBFGCzBKm-Rf3;_#$Dw`}#U_Wo_0 z_QDm$OOx;@+QLsr;Xej@ze-)3fq1RKOX@D#@09{BAi38zd?&dl#(b@(^uad)Lw-FC z5ajb&fFQrSy7+(S)A7*NR{dkX;BTnm{vE~Ke}0c#yd?O~71v7^L4p1FHONe+uOL$a z_2=-~v_Hb61+>{(5b2ih;;g(Q18?n@4gnr~O(aq3f2xEDvd@dJS+hY-fc9|gm+yC1 za0QI~u5b;+3+Gc`2pC|dX*U5#da=;qw{W^|C4`6m53h=zFpm0z zeZsiIW#flDPe-4NeK*r?rae2^d*eoINAbLeH~3@Np9X1@@e%-swq>`1h7si}?JplK zlq^37w)AzT`&@R}?r7{Y@v zd;s&;Po_Ubf*5<2hy2=2`&Rqg!gnE>8p6@@jgjH8z=yKkwIr#?(8^-6uhKEhyu_s}Ua%7tEO>=(%dHeS#xD?fhLEj zi7OlAsab1QknhbBBV-0cK17Fy-6vh$-t_MEdY$=|_e0BWGO2^6TSr<$#w^zN;KP*B zVu5`-6O7e5^e*tO>i?L{K{FGZh!E{(=u?p?01TV9-<{s0!W%_6?N7$NYR(ELMf~w>!MY}(P{DZ-CSvK4CpbBy;W?z)5y*I2 znoWQv*eG2ei`1&(GmA^gm5Rv$5007geTpt#j*!W-!~n@-)?S!PYG9#(7wq$6kKmBm zJ~(6O5M3~lDj^Cl3Y&UyTV-!{jXRau3u%c&l&Cg|^YGBE>JZ$6FZ=GCN*Otk{z1}N zfK4elC3637)Wkk;iGd5?|kh9l24yf%&Vb=VSQrfNcu)}Y8Nw2L% zt(Wg}%7?h&S0$o0e*LeKH~#9nwe%CIiD7=%c08R8Fbcdy)a?=N@L#Ca9wIX;2&#uX zBRsM#?6D*B=}bMK6@h8R?Sm)Muq~q$Wqz|$mns=+1MH1K!(k#hdPXNHdgg#7+e(8~ zHMt>tc_K-2@WKN?*VWiHy~lNiYC7J`ghA3I&hrx1X^f&DS*gJ{sEjBtUAC9z-83sudfWc$uQ4QRfdgbM#P03jU% zBU{fmvtV5sbYtoXh~eu&1M&c-HQOtPyU1n!o`GuoKjfLRP3w#JqMW+GtK29$P$^ExZ8yaB>A7hT1SA*@6QTa{YZllA@r16II?vlx-70TkTm`D)q4E)4tI~Kr@Z~A zYG_P-|N1ET73xv?vEGt-d(#fVxq{KRJ{3#bTLon=f{Z_Yk;)?%#V06Rk!+abg*Xcs z>J;k%$-c`_37^z~il?cXW0G5RhQ1Oqc2dF#8OwQS0w*={fHFPV;4M&OHSvb?tV$9o z2ZgqSlKmGSPA8vuFjb)YjMXyR1ZKafF9TQiOIF`QCKmIg1x?x&6i+y?nNLVqCZyub zDS&fb0vmMcYruyC7ZHhoL)hM|+J<(NzQho|+>jiNO)S`ph{gY?rZ>5lgi`?k5|^4E za&U+iO4Oj}AkDDLAizYxph&Gmr95oh0>)mU8X?!Zs9PXHsyRvZL6Su(M$gg$Bz|jd zN{h@ED(yQ0aS)45%P58EY`h9Z2YxOf(!aaxKu7Vzq}EuCd?9wUVet+kF19HN2QM{; zr7|q*DbO0S-Y#|w$LS0KO@VAdb%HnBcRmqYCD|{$9Pu-}SReA>{2Q$c8AXnH_a8Aw zH*$m_Zbuh;IE|j=y=Nb?MoO&m>L9MRJi)9e&}nR-L@p|S&qJZnfr!h5wcaR&9hs$$ z&(CpAZ7X||PVPdzFnw8|UzTX1>3FYA&|5KQ^R)pqK_Iv4L|<;2sxxv8x+EgD;uFxo z(>sHuV67}ZB01HM4@uw6$1|EPi}#O9>f4VgsnaWX85uat5}m)P+1;E-By4>@q7=K|9mU`TTc{N_H?LY zes)0Yg!p;-0M!;-$uEE*wjGB7jCZOv6%6XC;?_tk2%~fWbF0TVYb>>46u@WzZZi@I zkpiB9>L=Zj&D?111kw4Q=t4agMJ{?uxs=Rw1ST!`BrDdK>Y^Gl2cPI*YJNxby)d;; zkr=TD6*S_Nfd34jJdbZet_e|E2u5f*`(6M#Z@ZD})4$F>qu4!6_|R#i6b%rca-ew<(@oe#0s_L{QF!c}Kf8(Ga~ zqv%o9PHV4a>=aA|1uZ=Ds7xr<)h#dp7@707@D}w7Ib`vPG|M^y-tU7L@p+>Wixi*@Ls~x)G0IHB zsURUDJSY8<@I3ti;&=3>1B@%IAS*h;hP;%zZtVK-N8Jx1hAuQ7*${?~cRMz{(eGW6 z-M;N6iwn}k7~YC$ym}pB48KSiq-uug|I`d6R>DS(z>y6#ja%6(@p}-u5vg{CT8czE z1g+PCF|10MOe2o8aeOk{D$O_l!BwTkSBpJUJ_pWl+4GjL~=Q_ zI)Ib5A2`ubfR+|YXyp_K2#7Tpl}ve!Zm(u+hJn?5qO^d;&%>)W?T1tO7dkO17L%K-<=TAvj45Mju=nvBPv^OZqXu*Sqi)oE|H#UMVni@ z?)YFZz1Vwo!o)2<3qO^0!ZPYr$}VXO>m(Dv-I_8i~KOm{(Yt?}!t zzaCpP?M2<6gI)K|&t536O2B8c>KL<2z|@%t%6I5!WfZ4C3!L7OvQ3hsh$n~vFP2L< zq2EZ%vO!>ue2PQ<_BvsqFL#KPGz8X?4A4- zrA7{E%h|&yB{zzDDE8oJ;J&qvgouk55eFeAnGgxaQRw5w&|-5{0|%Q(H3KYnESeG! zX->HSvy$qGXoTil*NEAWz|FA8tzPXPI)qWQJ_wYp!U9c@1|Zpk*1YzWuv#h9(i-PK zy;XW*_>Y<0P5BD`!+B-Q#k|QXe_OIwcWu*pQbN1CPx!FEt&)pPTDOUChtI61e^c2r zt;QfXJ)?p{eRO?*A+$rhd??|oao$m`^d zx-UjabIc<(+lh4-y5{4UwE#SjIFz-}1@A9_v0B0^$+n()=^2w_*!w+S0|;HQi`Rn7 zrfWuQwu`0~cXQ9*s&P2`Hpw;5wwl^Ut0g4>>I{ZYPr--cugY|gKG@R!T0363Wy1_l z!+LEIcnsI>2GGK#x&9FTiiIAP*FiPy`GkK|&oXd-8=WiO#;RE$nw^(%pMR!erBCp| zs8Jo^8wTVJ6oah^48Ji&;Q|#TL-WD{7A#(j zg_!MF1`izqnbCtqse0e}IB60Ze_md4w4XvG2^qRbBY16bdOg_F)H4VG3Dy95b5)Bb zMIN~$-nva%VC@XeEZ&sn<8&z&NG-fbNW-X^V^cv+DIp0+BXVu{T8-KgvXP*Ixx(6^ zND_mDMLeYJ?WK4N>|jDC<7#6+nv~Y$cQ0^i=ev=yY2W^BFM3~})aqi>&fBLg9vWG%(JgXRhw4Lady~fO z&C1I8MRxU8JC2s$?v0)iPWHFClTTlG(#BO^1F3KIs$5nD7HZ%?io1+jHBNEGHxOsf z;IyY?yXgXernM81Fdi^!iyM~MJnOBp7^AHmCqI{|(h&Q(rjT>@d;=nOAc2twEnY;I zN2DLxuThuiko`L#;65NK+>=)P0!VmHVA43OaUvPF9f)>cxFXvUY8i+D&UX912ng4h zwM!lQ1N=H0({eKCRb(7VC!AHMagC2!eJr$5Go!B3JFuqyrU$$wQMRei)cXS?gIU9x zs}5Z0276dhl z9++y4szy@TELDjkL+F${hNt7U4w#!%5Z`Lza1z^U@98eNtFqyOfZU#ow_HSN$xmMOE%tPu@dw421EihtT(msy{g^s=soX}Ybl^lb;Gk$ymlj0YcDDpjyCp3O{ z;>bWuzL`mSIPY+PLco3x)^gPhAg{Du+D36!p6}$wpT9{qX~&}^hN7)!S~ipSj1%R7 zc-PBG63`CP-;xm!j5!F-xjGo1I3|##mZds7bvg<4l$-WNmMZ(UzN6wL-zA66$a)9S z4e3qWq21n4G_97IDl>=}EoOpa8buu@*3HlUJc_%9n&pXi00oKw;d_#hI9m@j_y7SU zAPXqR#;0g(q`sLEg18{r1`lS52+Cx7`#6@g0lDB<2Q6~JY9L0Ia~PnDL8~ElM%wrw zn)oCdNT0x&2K3}h$yQwO2B=gu?Sw^aoF)=hLEbN9b@24Vmw4;>&mJK)kh>RLl5$d- z5&f-czcBameoi(|Gn%VK?&GM+`ZQH3Yj*rrbS&tETU}wS|4x^>>E7jLZ*T1^hl!Y- zYI!rRoT0)TL8)z*B4AvfeR^gSd!Rfy4WaFCW1H+_tCt;8aL>@$*I~Nr;e-6}eNQ$P z_+8@&)qW}if`Q3h1I@9~aLmlfs(h=cV^ynFyuX?(CP<%9e~@wUwM%KNP;s-H82t5d zO`5_Nl+_oCB=U{m@nY1cW&8V@PRiE8*toBLcCcM~p_7oYX69C`5aHSN180Unav(+# zxntqOZ|V7DTK)_!nF|tQCFTu?(>Y+Ikc?m;mQ3?)4Q9=p%uwP9VXu&=+X)XJ#4nyF zt~aF|tD4fJn)d_LKc2}6HMQQizWDr>p*pg!%9i3&wG>McX*g=}D)KrCqS*|!Y^In= zZ#HQ|EK$i^0Q_=sX3+%XOnp^kK+RK$nb$y0@T-a{5PLv)Q3ak5o*=oU9E6y{3+>ga zvR>Tg0qacW>r&!K$*ZMKIXMI%XJbr)N|uN33&;h!dt(& zj|zxMJRzOaY%Jy!;QPPog*phvea(tWEWMZqe4nP7LLQldg9L@glz=1WF)ChXimmm+ z?<^?kE6OK#Se+|M=<@71z9VbLutjovWOCXjH!9o3Bh-FJk>_)lsCHUJXU3{#LrraO zPSEGQUaw}lPzp?9`@!I^5x{&S&m6HmeFsw!IWb$Xv;T}a zh1%CBzM(9~Cl19&Nsl(Fvv1a^|pr*wAU4#+;SX*IOu37I{I zQoDR00;4B5FA$7Nv43hM^zVWgjH(}XxQ1fW(?p?YixeyU z+BNjCh_{fmri-6`oY$dT_F=jCSXs*bTS0N0qZN|_#R^Z2$6tHD3g;WXPUjTQ8Ep-^ zS?#B|;Fzk3SxmFsUy2U@HU8ol*=j(VlW(;3MA-3@Qy(&GvX_fP+|tn-3WD9#cDN^o zS>2|Me^3_?7XjI|PMQ^?$Xhcth^gbwiZ4B+I6)QqR!CG(7@RA3{d%4uQH>GIt00YI zojCb=dOHK3(qwW@fR{rW+95LikdyQ$5(?;*#P(lEe=wPo|GGK>nUE=57Oz3D{3cqR zMadkH4V4^3%$Qm-U5U~_%VvoMG6jWnP}f0R1}HhN+4Rg-S`$QCO|%GsGa987W+g|1G&3w9J>k(OQ68nZ~yeTfasOu_#`OVVEfX|@x_x)$F^ADdT_ zIxsb?u4+}uF?i1%5f`MTX^10hBSpQ4a-_#X*~I=W1evsVv7 zMYjTuAaW>~7K*(}Lse6)$lV>(9}vBJD6I>H`)8^{Ja=x-GPn3W_%-+JPpxjIV=ObME3DWS%g6qIG_)4D|F?0$Y`G zmq&vO&Nd)pO_1%N92k;q9S$o%4}7x53lG?R5y-NHCM*r#VKR+a*Z6kf`LnO_4ZZc3 zBGUKBe#QpfSSvX>i09uS*3TBGAp*hno%mqCexOpKLph9Cz?}9`Ry!ei5ZJclH0>1f zMtMN$Y3TuZh;LR(g3uDmuLHBzCSu3&7nm!Q0L<(}$rMeUs*BLty=1uly7%Wjq4`mk z!k;UGXqu7(gb{j77svA%Vkr)n4FkswRtEO#hy}I*xyJb}b2{f8B53HV!mu?W%aL!} zWqZgPcy#{BupF|pW`L94g#d<2PoLMXaUPx?*;b`@>^#)Ne`OxfwJD6_l#bZk@W{80 z@qc5Doc0J_IAW%sR|F(_Oe{5BU8$pQHWs_GJp^tkZT%f@s%vk?Y|V3V>|peu$aW6a{>p$2WiW4GmO-3a($Q zCewYMWejfnbn=>W?`gAn!;De+s?9$;9#ne#*no_geJ}P51ApP3Vvs_Hv)0NiWL%<3 zi{1zs(~jnGFd2(9MIjtHbQQN{YPory16)$9Jm=fEDKxDn)pG)#>N_N)WBI44?7$t5 zVHSOXyKW|ymMYmK=p8+hQ}WTXL9#)0@x)s`k{Tr-ft>^V*DpXNA`%;k@xu?-%H;P$ zvU%H7Q3#uhrkD;`yTqZ=oUS;Z-PV{`8M+b)Qv;nU4`kJ}^mt2dG8{qIg$V&? zA3zfETzAA3a&Lzvfp9?rTrKPam2wmrEoKL*41L9~>=M%S5st%vMNN^~CKs1*Ppn&| zX`@2^&sH9fVs>iHdg(WN67x;n@84QQ&TM|S<%bpn6(yYU(Ng!-Rom@U;@GUnZlWId zSTQD2VRtvR*x4;};K%`M7ln(Tws@+WI^Dvr&g2_;uhczRlDfc>m%STb1=G65NO60Z zO4OZUGTou3C>SrWPE{qlIb($9E8$cZm=MQJp#C(q z6wAtxp@4}9`b{;&=|U3|Bw2+7t@982LN0%FqbNm zKE$79tt1b*z})nDOoq%7NfsaRk&t#t_QFJVsZ3*%x)Q=Cv;a)7ZlZ(qnEb^7=@ZS_ zbd1_3G@(dQ&=*c@VtvIlT5~$PU~Z)F^l87(yF*n)y63Ib{BCX3s_@uxGt9`;eCN|fviyS*_fcuc*2H6s_Ws-= zw}KPtUHsy>)(YLTFqo3RaR~Snf}#2U<{wHP>Hc$t0b%wF5LCzo9KwN>aPRYQA$1p! zU+fbDR?f(&0YIhw2PL{{wAu86xXKw68KbP_r>_b4wX!d{v|)C(tn6{?y%dwz2UdKi zQ+{Bmz0;vFsJlC{o-qyW&tlf2DuHOFXHS^dfG2tK-;*XC&%vrCswHk(8HpX&PwwxP>1LSlfK9* z-i-a*6&Z7?(==Zpbre5QDB%LM)qc!g@)dvQ`|l){f1^?ZsWf_J?P7QLa>D|6cK^>m z_Hdb%J@H{;0*M{|-|DA;Dri5keu+~(LO6(Az94*$>C!&{S9fBPsb~Zb0huB8oTcr6 zY%?&kOAv;gBuA6h9~3e-lJ^7k?!?rh(dj@#U~?`xC&H`)lVCaPvt!PcML>c6Vdt$9 zV>T%`uD=jC*rKECxHE0S>S^AopKfU?(u-XbJdKCig%Q1+w?!_yN`31cqYJfN9MEpR zmK$kpZ9vC_zj4b9Qiu+9%c9uE)^8EHq$?dzh%p(e^g3F6DBUV6{Egbw8>czqzda{> z9idbj@ughgEm8AZJPqtUzX-cPXM|isJ7oZ^7A7pUu^3b}=|c-3C`~aNY(Y^D#VwBV z?0T*Jgjy6Jxd~J~E~KBX*V8!$VNyV&L#`uG6+WL|F=AUZa{*mvRghh>G|B~ev<5lq zACP8>#6}Dh^p;UT6OB{)4rr5asf7XC%q9CS<>!VTi@je1PSI9IXpWm*bAjWn>}pMY zT}rU@su;CL{eNVz=k7JeBwbI~Cbm?l3pegon0%S<=Yib;ZV(Tou4`H8Da-+ zeQVU%8`ErJpJ9SQhv%%#>SvTHA6L{0fz(;;EbbgprVt^*Dp2+hwpfOb>oh#;TS)f; z3?_YL#HoCoyt{33biS1*AG(wJ7Pb}5Ya_XBdyLvgX`NsQGFMETI>{ED%EUkmKYCIqUWM%T-w zk-j#WT1`&qiT)Vzo?AakGSo`T>RX|xlK?kr=Y&;h^@bw z@y=qeDwDN-D>KqVJvf~)%eo(YcN7y8N*#ao`PqYI?0GJFCb(X=%!`2?49-2u?q@qz zNN=sLQr+3wnKr(s2?!t?6KQQ83$#SMk_<_eUN zN>~Kw1rkM3wH(lw+MbvtWF}(j?9;!_UzKSMffJgfN703`$+9()Lr5?rYFj=oIRd;T zF-g>&y%H06JB9ENbP3U3066yp!EGVk*%}`#3@|3F4;=OvzXio|a5qs!vKKN+qJ=WA z7HmM6a0o}X9yYpyQzK`Ki0oA0#A?#lbV-XO&q}nm2ogow5w&cq{VzVT+EUDa(PUeQ zBu}ay;|oIUFu`bX;ClpTmy43QYz&s8r!D>EvfuSt9jJ$00Zm&cMjFNErQIZZ=yw734f9f$qf%*N1V z3l@WdS;I4w0Szs8(#U=hHiH$sU9pW=%bZh&tWcvD1hjVA8re(y2At94cZLIycEZca z-dxyzQG{PPf=a~eQ@4{FK(xmAMcQ~jd5YW-5ain`Z6Ca=Loa-o8@vOZ{p&)%*95i| zEpcH(w3Pa#U8C`G3nNzfL6KpdsJrT=T9y?#_IBRkkg!uR;Wjr4bePIlUVkwP@bV0B z?4L;N_L5V+uhoh?{fTnK+CgZN#B_vC zT@^-N=J#${oWYD%FNP1`jAnRiqPe3+d}h3tK)ZlL6slWnv)uhRDE{jt<`k9=d59EZ;ym2P<=$GkZ= z>THpwwr%$`?LURrKUfL)`ia?km`7}es=;#{J;B%PB&vlq{zT4og?Mac8WV-vG_$C$ zd*hOmkL2K`BE-Hur?V*HoB;r&Z8tuu)2RQEnuR}FN;{P$Fn_nX zN@Stk`0Kf>IYabsc{(mH&t?V`Yj2&Hb30@9(&>8LryTcqj5|F6@B?vt8~w97jl zh)MtH9+Us$qL@g`m$&~Hdv6}qRJQgFYFUVa5)lDqN+~J=VpK*kCglVI3d%f3q!0ly zDpCXpiGs{SZi#@RkV3@B7!eRfNQ5MC6#veCfUia#EG`;M zl+Dyx#ZmYp|LbTMI)kw|TKg}0K4N}D%sJRcKlZIuSDY9=ir1%XES8}GLG8Jtl&Q?b zYf$IqQU^9xqSjTLO(w=A?I&P`f?ipq~F&r8@_)hOWJq*zb*W8UGWRR zfCq5sGCyzzRDx36s_9RW-xy*OMbL9Ws4$KM_{VC(f$*wJ}pMWJ}>ab~3ej%0>9cV^*$jXFvt0eCZR@`G!`BL2<%@ zu5^V*9oYmfz^5y`F37#fmz2M=p8p zdO*`)e5_YTRfWA7AJw;l!Z+HatfxjyfI|9@Z8~u2n~U_NN~(sw1L(qTklwrQ>e+%mTko=T-CIA(R0*NRet_q? zdZ^&^1k&1d-htqFW#et8ww=Ci7R4~^ThU@}s`#bXxt&+1p>w)xq1}JyulFvlO!mUn z=X6u+y^Ycc2UvzDKZZoyA5^{rNk*%!fQ^a@-XW!BT*9ve?IQoM&&?u?7F^{0;8p9s z-_ML+LdD*XTpVet3iSWf;(aqD+Mr0c`RnLT|M7PH9&CMQPWuD6nxl&|ehS61Gv@Va zy1r-piCLId3ype4w`ebZ)wIue>CJLDYxbZ^+K^=40x0!am*9^Le`q>}L*z$>Bo^nk zJbv&r57UduW&gmA1Q7ylG~3A3A?3+C(GOK~1~BSy*R$XsrFGd562U@~Qk;gYbOx-c zsA+o(iL8ZeEvh}x1sXisHM*TA`hY1-VLd1iNYNZ7ie%ggX7H$l_KjB!6J*u>?66}2 zT(p(~CGG3rYqcgx!-YVAQB2P^S_Kg#Pk?ATTLW2xbh1$j523yr&4#c7P`pbBn#g(z z$j-D|Ri$%cS-R9V5OTdGB;>qX`)cAD!3Ybu&z<8? zh#-%WBLgLBDE+jo3TMm8An|#>UlUI_Uhs%%`P#-twU}pj$B^EF7o7vQlVL!qkXc7xm|EZ*soU`nd!Ncf6+prniW4_?u~m_=;@RZZpZFRqwBn5PbT+`I3?atS z$vlbi$9G^FV%ktKVzTg&J!J9&T(4JpsR$F5`fj(h|inz!eYj z1M86+_ebkRDv_CCWC0bj#TXDj9?i}?hvq!oawuD1%{qUi6A$vAaRSfYB=0jjnlSFZ zXbqQuv|NT!-obvNY&|A`YSf6jmoS-Do#lBDf26Hbe>g*0Qt7%fLU8!Df&MPUPB- z`0G3#@611KRdV{vs0-WX>!{|>z?Ob=F0PjHclINn4E!(bTr}_&$}Ikxwm`c=0kxXs zVzR&TH`ZG6I%NqkrR$RY4%(MemriPv?d8@DB1x2}lPM*LmRE`;px+wD3!-)sR)Ml- zpMcR3(G=}SfRpM1r-Lzrt$T^6j0ENcP?ZK)9?Fg(tR~bQ2rfW_^MeQR;nd|p$TRy% z4mE?`G|I!L0Xx0wT5@~BhI@MOxbY0hCI}WdMSym9);qG3BX1?ki1w<{of%cGw1f;|B z!TQK2jCt$BRMSE*8zs?Ftz*((*>Y`oPBsU8mVh2j4j*z?qDAMbr8dOz4zbMEEwxnd zsj^mK2zhkS)kkI7*@u)@6<%V38u=HR?EC;lXM$`vbdK_qpG|g61cD!xAckk?T8C-z z^4$uwvW)T*DIZkmlVb_vRN0?Pq~Yy-y5z)HpOIa#H}NtZ@}a&?=Mqqj+wfsvicqHg znun2npi|b!@9N8K`FfRnK@8)x&Ma22frc$uMnnNxpXAn2MA6i<%|bRAdJuNbza{m$ z9#8f?tFvisPK9@gulT~bt5NRPPgQs^NEz)gx%dVr~0cUJFow_q@othGuj|s zJ()2tS;qC(d2*kG_b04|A9Xnn&nsQ$I^JzcLOV&O%7F{!QW zcXR`@b9QVLB&uqxAKsGPA* zn^d1e*J#Crih<>p%j1X8*JsT2QN+;lC>s`;4jBA(-Y{xg2ZgJ(;Ka3v8xOd zo!%Y!xXDAy#e_6|=}nk{;n6-bMs}s$NUhoWc#i4~;oM6G`angbZ)<~LzGsKHvg6U- z?Y^R_OI4>#n^70*w%Uc8QjOLJdYXE=uJNd;a#7EDvFmX}XAbnZ#wL8#q5Aca>&eHQ z2~|bxwXIqV1u!k>(C>+Q4rhwkDx{|(qbtBFPU7#@4DWqbJemTe>}o^h{^qK$B-DpZ zv9am=NX`x)rCxj6uR`u67_uB`r*RLmaTRaojYnu(+opNq8s1Chxe zs`uAFy=XHXEt)NuZo18Z1|An%N#B2}V0jK{?N|f*Q&X*t>(AFjaUjwf8 zMMkpP=l2q3YC}b;S3&ySFdMr!+FdRWkmyAhysu4T>?`cbZY2O{E}{eKW#o7fO#?P* z$F1p)#c09}oklxG=J~7PfDXi{U$TWgyfCXtO7VO0aNyE0UFZ7bs2&&3p*l&;+31ah zqA5~Y?i=b>{;F0jd18+!3FAM+P%_C$kc;pbL*i0Ss_q=2tAgjj2SA5LK9?|t;puhF zs7UpFpzs+fXv5zEIFT;mcvm}NZESP`I;#N=I4m9IVYJBbo}xbTr0js32ion35u7Ph`tax|F!W?_(9bLh@rm-a_&Lr1*|hJ)7cez2lmL08BA0 zE0f39F*^^t4@%(xA)xfnIsS|*I31*C925?_2BX#lDPtiIps}tl zBpOiqs2j-p#i)rmKPiz$jdGi4Xea0csg2nzf}!G|V70F7LYCV&-v{2Z3jZV4v8D$~ zd6sajv_eQto)kLr^oc*7L3RxZh7=g#1m0+hr6;v0%#AOI(<8-YW;J^2Yvz<}7;-OI zVKsH~{Kd-kn5f(mJ>UwZJ98!kvdj43Y3kLP8l7ANl+j? zO8G-tlsWIV$|Oq>FN)uq&Y`S?2BYFe%nsnj>m1(x@)>GRi*K1C030ulBaj z=mv1N55%5PN;@Y+G>HXtpzE2Dgvw*aA5|FkFgO{}TF9D%f+kD97IUMSsU%0u?3~}lX6svq z?w_i^p|<|)4z(&^P{GkAn7y=Ig*El^O?a~JsEw)D)oZ>b;$ywFdd|nQYY*hd>c_MT zqde18wImG&Np>xE2J0S-)ve9SPfdV2g%{?-ouLcm%9TFqAWs1&1nK8`sqW8EX_K-sbVbLVOeM*=V`P z!=bYhe6d?z3n9B{7C4_gP~Jq0L4n_sr9&I!W!8WL4_ zl)h4&-;OL*-o>A$O`wlKT5t#jV;%|cO<;H^ofk+S`$9pZPZgj28PT1#cU&e#3nwMb z;iOklXkFkgtU=b3(s`>x3Ghv+9L$#)0De^Y=`o0B%xoQgJ#|JGd^3%{7Bu|Ez~Nw} z@(%m78$irYrjwmwgni>0>bW*wxuttxOF>_Tw>{%B#R~RorB;yl4P7$as4c1g+x>ww zv}$IhQ)P!{sR`=ld)U|hMrQZad}wY5wu5!-Dz|TSW}m6}F>ymmiT(PQ(OA8l5Ie!` zFuSCv39s9c{kJcyGj%VcRnAm}g!Z_5RSuV@RooaZGlR+ZT6e*LN2ff?oh#g?U7tvZ zymwkq&xb1v5{-)(K}eaX?ZDR~P*YxWZA6RLWM*uT?SbLe6ZbzAt28NlS{HlELWCu% zfl_Tr;q4+@n--ny>c}~s5uFhnco0TckQ`+tP}ht^9-{D<7G+bTL6Ls6m`!gAbZgjbvo8+YmgtgVk!EOwL(0t9_CaDQ=Ut#~>LBJx*}L%Bd{;w5!U zRd^#R@V;2ltm?-x5%WN)&57&bSR=ROp4;(e4zU%vwFM5PgoEnAcI1Gr7kP1)3-!{> z@-)`ZoI_(@d>qX)H}10I*?g}RKUbb&h3oc!k|x z7AgCU@X3B8v*uI7n@{6)`IWEV>`!Dw+UVNq#68MC920Hz;O}`8){3WO5WCaHmM#RsA-bDb|t130LcH)yB>xsB8 zg{?i?YJB0OGWPtGb^UMIlx}r`_5q#9+Q`B3zkN^~ba~A)i)_M&T_65?y;tbpp*NoO z8|*9G*ZYZ0!0kTlkjie{wjpFvM&?5t*1zmqSuh;?hm!G7hS4^7aV6qOv0r2u=l!^G zU_MC8aWMK^>}nscp}N`{E4hCB=g*%vHm5o1-U6P}Q9_?C%(63lEkuoc6i$++3z-?c zzXQ4Abf~!#K$cPj(eaJBu5*WneH^|+o-GJJ4{O}4`Lvjpe_!43KulQW>vz6^-+a6W z57ASR9WX#ks<=M_mdrs10VXP?P7wvi3QH1YNidBHlJq~97$NGESGX&;^#Q#%rXTK5O$-ko5pP$Xu_kC zisV}q`-iRgy5zIcxAb<@xUnOgB#)p>u(q&a7v)nRFv?#Yi&;X70vCPg$ms#x3|)#H zNlWB?O8@{as#s0n?VkROXcR#)98$y!N-$jeuUU$4fll^*ge!fN%RJUwh6&57{5%Y5 z72HrDK)ZLOAaea1#>({ekq=qrYGbW221#ds+}9Y@X|V5xCyDG}R5Shl>t3^URTXBx zcKMX~dxh?Bz7e^>+juwANB#K*XZH?=t4WRb+OC%Syp}uLu`6G_#C-&G&HaiW;isZL z;D`#lN!daa=!zJU^+xhJ03W6cI{rQ>*eFq7YVf9OUwsD4Ur{#0F`R@EMh!{dKmYhE z>**f{6mH=aeCyAd)#EkGlWe}&B_*&|gKAqTYn_x!00)a-z)l1ZOc;_b7hm5zqavOi zqsvO9G%h}cs!1^bF#1 zVa(aB>Zp>F<=(n^>bp7HygN^LN?+fpl968iYKV_n9b95}crMYOGN_u$?akX1_*;e9 zyxC}_!^JyqqE}SC>JaOgsH6c<4tM`w$hQ2?mtI*4KoU=B#$tX3<>XUjjbi)Mg%Xw} z43bfv&z}GCC8?dw0gQmz4BWnHz>>O3LIp^h$8c*D7QhFyYq(Xb0vHe{m3LD0SUedW zK1%izQt=YjF+L!}$Y#xFt|^%_@4}eldx)?P+6V}ykigrk0dTcqVOkdW#YPYJ^j?5}Fzj*s;c$4{AnxnG^{J=z zhQ5pgZ`q4I7ti#m=XJ+yw>~oIXIWtIs|T&)!_A~vy&EmpKS1z|kx@&kuV;m=hVz5l zTkN_cExS&{S`?mcNG01~R5B{C46F0CSG$B!CoepXe=IC>-^C5trTx+Q62rC08kb-l z;gw@{@SAiP7^I^c?^R2^@e>}$rEW8SE~%jm`w*I4Gv)qK=p{{VTCfr<8YhJo$hDXD zK{3w=8f9=De^nhh#)L~yfpsEU!|#%Rxh25<+7BaNf_CtQywaj`#R{aK@x96$eia{y z&jjEbU=D47aBw@Mz~}(_VNSpV0X2nU2^UCxjzK0Jdm8x}@3u*8Xi1=6=tt?r{WOHz zMe-2o{3eQzW#$E=q$mzQnJGqR>U=F;sCz<;s(Bc}Zsh-)6D>vvZLnGE>y!TSOV;^k zAT7LFp=>K~T^GJXi*x>PWW-QsZ>=*aPp@70KszY1AhL46cibx?lo6omlkocG0DHtR zu-WQ*{fQIIE%~Q+#{41L?xuY_(hB<9RU+x8R))(i4pY<>8tf5d6KK}TQ@ z*HMKnbxUhQ&zx>@Y=cK-{-7}Hhl~*#9cO}|i+v&uz(5=8of9%< z@bV~1FIruJ7E1y|b=guk9>rc+(VEEQX)vT;+s8-Slhg>Ql;zO7Qhm?( zY3m^N2t7Q--9CseQ~#?KivHID9#z4n{FJ7vom?1Q=*c^jUsNv4AdGh0VmgYanIGr?YFEVJS({C>rBu8 zQK;uq_$WS?D>iG62Tl?9Tda&%9Q@V^VHBEkB6>3N6X^~yV;sW)B_Lrq_bGntAh(#G zZp{by^?qfc2o9H`1*pqpQ$h6caiC~{7cdP#arXE5eR{Lc5IrDXP@CAb=)<9}{TOG{ zCzRhx)L&m~y@IH)`aYhN5uoVJkniygj-oddRzoydqVgd-3O`OEX5pcS$QD`-AfR00 zkK-Mrt|j+;Nep2P`v+Rur9YQ!AjL0~*iZP3>Wh6cEEe|J^VYsS8D+PTzG(LEE%$2O zf`CQ`apix|BZl+BYB&(J=Crgx?Lyw#lCy#J z>(A~}o3f}e zNAbDBIkj=UNcm_J^NX=?_H~M^P1%B>p0zkk(IHvN5(Z=0AQx}91xn}mA#!4v{E%V~ zgvn+LuVX##kvLtt!E2$fozyX^ps2HU@6l#RnOawJ(i)v?Ls>`T`n-bU4oK58YUXRB z{0Aw6P`YAmqAah!)eEYA)OqTV>(oM|+ zh@Rpg1ZM4O3#|F?Ae5XT-4Q#(x#C>Bs4x4yl=j_%aD0Mf>0D}?hxthS_i}`)>g&IF z3GGIDcDG!s&FtL;SJCh=()2uR02J;%zz&;z-6i&!kxG|OwENHI z5HYb#BeDzJkLTuM{Gl9sHfL62A`+)ZbGpu{nX-R7a;4^8o&VnGwa9B_D>C=r%)x?h z8wIU+VQ&4rc6)GmZd~t|botDLO;@;YH}%mc)x4Lx+!=JN2M1p%`7|t=qv? zJM9ud{{JEF(ia7LWuXw@HNr-yUhVx}n-?liIF~ovYGVJBwS48j8Jve>KwEC!`Z*Q) zdOe;xL@W|d$NVQH{6CWT|7J?~-_6DyZ2-FHU|D2NDILC1aLs#mvF9y%@z5Z^ z^3P#_E7l@j_6xvGt*GJec`KgHwV(&_^(a5xMw%o>Af>-X6BFcXDF%No`SewkOJdIO zqN(9fa%Z2{1G@9D1vy@NXTp8p^XdA>PX?I+AVRR*yjwkUzWb@tCSvBZj!XRM!CB_n zU#{6Cx;(w1w}(F73bNxZ=uWn5vtrMmO9p3odJ0BHE%G4z(S>WsSkHFxwigyjzqZ{D z(-CiLs=6MK?H$obDfk;fu5QwDjXJg=b_j?`F4n47IygD+4zS)_oM3hHyL=g`tLlG_ zRA|4nAQ|@I)Ffa!31e?*ugFyRwA&|wL((I@ybGl5)1&|QpsWvkP2{Dd8XoP!S--;V zA&0?K6Rt(#QK=1EIIHHbSj&2)8!(8~5~7!Ek))7j1zox1{n4`8W$k(^S{@})67i3C zF)>lZ$Q{4rHQ|hqzFk0!W;KJG8z7qH5i#|$njhW#_R$3K*9oGBE%*CHa~czAC=#2~0{9O2I2=7D zt_;pUGPuxVG&Sio6m6YrCK4YVw)kAbpdTHs*&cfg=XWw<`+~l?%f#ut591p={_=u{ z3udE#We1p#k?RndN{bm|0<6APDh6po|JUPLdM>N-e|*4y{Cr8koxi$+pLIS~(f{kE z|G2|f|37|fBU5P+;y@ppM7nL5e=ez7Ca(B(xSf3RaTZaV(r0${8gBRWs*Agx!Aqqt zsk_bFm@bCMbUyXCx9tZT-NP?W_Q=ta$(mN^@>MgTI#u$eJK@&59VxYv?P4 z#hXaK_Uy0#2k>gwzDhli=cs2)ht@*fMNe%F}KW9#OA+%Yzi=L7}4mnm6ph47d@>Jfg}& zuZ%RZfuege?*he^$VcOoDcBSDsAsJDeS;&7mP_gBis-NkLQufLxC;!wX&;IgcRpMZwh` zIkoFCc5?yN0lhuf)NwlYW8z`ckZF^dZ{Gsn{M^RbA4rML(2ggS@Ew4^q-_Ak z6}pR^Wr>15ZFsANSyYgZaQ2F1{;BmNY3e)X)|#Tl+a1wc`7S{l2R-vW29R9FjS98+ zXjFtl#Zj9dE>$P0&0kn2bdS#q$;k1F)T(qKz8@2$M z2t|cD6)r#IQw2}*#)+KoxD8HM@k`xNdweq4LWI%xwVhsEjnl8b zW$s6;XnI(<_sD0Wg~hvHb5B1>-aWu5AQ>Yre4d+pGyVtmf~E3~`CeHkt91YrYzX7! z9)se?AhmQ=-p1Jxd^r)S<8|*_8{sffV)hwH^r4HlZlxDn`JU8tnLOf+xA+>pFYutZ zrmuWgG%mCxR#(IheH6^B#`f8~*ggKdWly@6+cGbQz-yPJ zV~QitT_dxH{jq$F>S>$>wD2KSGv zySa4YdCBSJ4!QWEBLI7efz1L>+;u9WjAt91`Rxwq!)bn+T&Z_;f4+Rj+VkZbHs=pr zi;|VgjHT=@v?lT_fsj|Lu(Ww9l^-8rpHUtsg^NnA(^v0Uz!;iH)TLotnxv=mqlHRc zM6>%_U3vVyetbQ7SL9bpaM6WWVL$+Y23ZO(vbHd8ghuw4UlApEetZwN2A1D?|N7|O z8ldRtP=YlXt{f}~JXG!`7kRA7xhrU-k0Z*1J3KVg2Hs6FpWoQ1^uk+t2U+k!Usd za(dlP&f21De!pC-G`Mi5;ptPA!zwo}uVhYUi<)_a3Dh$^phX*n$uiQF)}VE;OGOq` z*;!~ZwGO9wP`J-F0Kx#N)oivZc>_3}D)eheyidMz6<5x@8g`HcK=is>}tpkcxkXMmhY;{-ZMm@@??6EF8|4 z(q-g+MU*rVOzbuD^d%$@E?W=Lru29d>btm@@i-n;W7Gw{dG}4XloPCMrl3gvgQDg% z?6G@J5TK+a1YfzpP#j*o9prR8)z|$}q$ntG2TFC@kVm^um*`BNrU%Mi+T>3iYut6) zc012r?QZ0xv?4WaYbha{%X}t8U$n03yt}PSHT$JGFVQx*RDWe~sh;T;ch4|_VFsi4 z;L>9wCn{aGS7tNq*PlJT{GRb55t_|t#fy~74oL}Do8Id4jC7yi@ zmM%}N9zRUIJMF)<;a*=1BeKPn5qd%8bIJYJfp7fYjUUtQX&m5e+Ix0%PE~FS%I5o< zXld++%y#1CX1qb`#ygZ(JIMetmwXaN325!B{qaBeD%_;#nKmGt;xpqIAx`q(1gi~Q z3KikkDy&8qKnLO%Xdd)z=*Nc7&Z9MP^+L(s&hg+U!jipi0~BzUO#7R%ih7oqG72=k zq|!v0s`7q?bdu}#dhP_AD_;tWWyLU%)0q{<@y6KEvtyGEt*|2i|5Kn@g;t`F%A<{O z1f91o)BpiVHm?swd9~Ol0m_UTQ-$wT1}vKR>)y7DqNBQuYR?+Z;qME#GF;9aDhaXEs-x(SE$wG^GAU;C8d#yy$f1m1;Aq$#kA~=k3wqEty=q!AsE4 z^iYMWE{5;Xur74Pz6+V#Sd_hn4Jya zLzhhF-O^dup;#(7->yNnN8)~j&7t6F4=J^iZtz^7v~7R4seX{MF^Fubt5|nS{I)rz z)wY(QSci8Q!V57_(KC!DG7-F0s(OVA3e+pkfc}m1Y!=H}S|i)Vxa}^`vl0eh zGEFo%RDZM3FC#Vb6*EBXV@S-=Th{HKohP^>9djX2LxC?fDr{Hhr*6A}&XH@ueJb9! z1IzXJtreM-2Yj8j4VOE6O0^%5UTT;Msygkmt^sIJQB4O6wXTxt+vxKp8psJEN~YCK ziNYBADqDmd@iXQ3$*17{a)l9?f+dRc@N>C2^o#jnk?fX_;Dg- zm|EYQb+4agtoT`Zmu$KUr=cuCbfXAsyPnBwEdd&8?RLj4L_g$G>m(s&GXpIsx(}V4$s_nG3 zisNuu8HvF~%m57Qvh~)sfwO-Ah3eYxzQ(AFSe zA5~*V=IROn>*^}Msp(#(+#Y7F#tYM*)e^XRbjeNPeNsNqfuXHX=nkE2O}aBiMnUM5 zg}sE8PBrZ!8jWSaf`0K&YQC%^=HOiv%YkN5#5A?hCkwkrOjDimPoDw%SiBf+UUW3tt!F;hUNWQwlS4vBc?aQ$FbIEJM>IME-GZzg6Khq(i zo3f6gt=K^CMC&sK@u$I(q>KU33I^yX5QRp-ftzP!TO`Yao#dw|-NiQsV%fRH8f~J! zm88AFu*uzXK+XIE+)Lg7aU8$HJ5&e&@w|?#JsOK24{(0~YA)gUaaEa_^7k3Cj~Jic zf_m1?OhZ4MI19-2XlMx|wOGZCz61%#K+}B5?(&yyJEshX8M*OL$UC zaZ&qKDPH0x|4E^OyoQQquGB{0m#}szsK7hpV1V*&D@vLoKzGo9vOiD;YL-!@^clPq z6y^Z1Njr*ym8SCustVI#L>+lUU4=t`!eJrZbPAf(Cw$NQnxcp|;ht*^GCf&+3R;lp zJ>I^V17*vhAamFYZ@ zXTEEwtswxW!qL`9KWlw?h@7}ske68=v z4PAG$vX&~yC2XKZqSgYyVf*YD{~$G;povwzgYdL!>&JH#i zz!J+8j;(NW?Nd&~eV|;3T^g%*;5Jx)hG2uCr&H1Rvna5CG&oB9r2Wf>D6hJj5e zxnllA`q3ukH9($-fhOB&2EcFG5^|H6%AMg#kiXb=1TSSZ!p9(LAaFoOub&=Izg&x~ zf!&Tm&F$26K&OILFCd^kEuJom-8sB%Bv-G_sDFeP66SpS(~BmotG<2jV@mL7>7@tr zJFm}er)}8ojbm*s)J0u>w8yn^n|Nc|rr{$Fm%iPOv_DtibRaUh!e!Y+%du853?B9G&m?oORr7FOxkXCtBRWj}1@u{8qt zWcU0IG;};V6zJqo%&F~8tpUPZT~T2ZGzcK4)3k|GofvrQL@#kQP|;b z6MF^hbe8ESwgx+lnu6?u3xs%}2jU7R3fN;s+&(DkxYUqGlQ>Bo#k%c;39SzN50~g# z?GUHaXxS?ZYyMbQC&g0g$Ysw^mz}ZEQyG3&Euw0Oe|hkb>vFTVQ2k2O5MzbY6K}CW zWoRV+otbNz{tiGhNYAf5doXQBiSzvVev)5k?E&}d6^;cS_a7%$Rqt`wnQD-~izf)t z-TX(@NauD9vkF_sTdU2km+IvvJZ|w-;Fc{Ozr!vhr1Br(C46bVELK^Dvw1EjL>i%n zz_E-v=D-oP75)ZIe5X+;#q8xkvpikkMgyeXE>4@H2b?V?8X!II){g+ZV>+PGY?R|j zTbkw|+B0-Ra4j_{CP_qF(goe?^E6u5$l^E6O01h46NnyBkZU!MVA9A#d;pu|`>!F8`b@W@=Pz$BX!5|iU!;ocbGQF+khxJQk2wR4Hy z`pRL3ns(&mcr9u z6EIR{BF3<)z;@#s1`6;T{ywvhQ#NeRj9P~|}p zb7n%!9GmFk*MH^F(}2MXExSv^>~dSxEqsd>V>HK0YVq7Ub#VH1;1AV6x6IUw_eUSL!cIuU z2Ht@vJ<4D!qfnLLTz^V~eh zqAHPbMrqJWe7Hf9^TP@~_Hc!^f(v)aZYkTWfO(O^6)s^=#*NGy8U_#@ux?rV&ahO_ zKjKe6SL`cylB*-5g=jTEFR^SKs>7{w5oI%%C=Ng-nYSF_{#BLLDU?CGT(5qVA#Dw**TYC%c zHzsU(08YwX;ikE2du7+x8?8FAw2JiWcdE@c=-^m>*^`m3Ibj}#>6HgHlnwXZKQ~+0 zcA$2T%b|SPwGXs>6FQ>kr8x*lGgwvb79r zP+{czVr{|U?F5yR_lMqB+V3ba$rQcuGRv)WtvH(3gsm%$^3k*>na0ViraLW3nx{r3YhSJAZfO2G?sf@BIY3XRH&fgex7spp2lwtPerxxI> zH1Wsn^3yN2-Faw*i}<%%rjx)L6e#g{OVP?g;yCE$`GAtfi+R+_e-aRC+dhdnZeS{N z>iLTWo`M(nKRiJH@AXp^fKK05T6=h%PjOso{OUpJ%RlEik3(SreIQ~V`;^K8BzP|-(LH5JbJ zq&SXFK5TkOC*&;(h5fVdNztY21^i7d@y&|u%p3sAazS*d!s+kc;dYS=ke^Z5jS!?c zwc>#1zP6+GC1)wi)ZRuOFL%G|h4nVeb=t_^xDaPdWo9UzGq1^(*ihli2sN&MU-7^ieHU;^Ay0O!`1VAOrT(7(w+_Qna0 zdjIE=nEB_D+tz64ACzsu11>#<_F! zZ*$4uC;P{ z>{SQB{2TtyCAQy?q#M+lcsGTT2fD^g>o0&ZfU!#YZw%xRwdz}+;#)ga$Op6Z1Gv+^ z2Gjx#)UN1{*$V3qEW(1y2il!8%o4URj2sTA76j-iNZkmapZtvjN?CvLxE2TiwnewY zDE9sVXmtF^Z?X`i{yl!~D>zf9wT^Zpzqj_!AJd-us~Lv>tE>Fgv&N5L83+Z`6QI%J zZ`2{(VqE4O)~{gN6iDevCbeT$v5#U7_$I3z|6(5Fhsl!&8Mp$^=7UE^1+De;#jfjs zlktXt=*A`{J)$e|9Xi<=56re+q#J17b-%WQ^*0-^FK53KQr+^Gx0A1 z@Bcb6v9yt$jbG!_X|x=g%mNx-mQI7ML}nz#C>;p%bKerV%`Hii^kjvf*zSGNks+2g z?7C7Cp3)I#v*S~Z<94l}_TBCFn==UqMsM8+d;Ail?7ridKJ~T%F4RoD-C57@!^5=) zZ;gjUdEcWqm3eEdy;l6k)2y63e2V(cjt^E-LmjR$xq7S)Mk7bG^Ghxv%()rUz#S;J zX)B0ycRz8SJmUT#=NbT}3HBZU3gjB9?dUJTh#7TkBMi2zO1eZd2qjro{t+~$)TK{3 z$R??-Vv`Yil%h#?>R;gNfMe=gaLR(RKQ7W!Vyi9OxP;f6vq6Ac!>-1!!BjId=L5Dh~@4E zF1`V`0WSTzy9#@*pJu$Ha+Bqb11;B9@H6#1>orbzxNPd4xcX%1bm8HvtpQidtnN0F zujR}r$4pK?eXNsv)FJ6_ugcvk^oHSwRuNw1dhWH(6~V@pYO$scZD#Xf?rX1IH}=ns zbagVjUUdMXZo_9ITlPMs=PaJt@sf)I#R*B~W#4N*_wgQ{x9oJX`y4e*93vimFu+>% z>G&rELoih5>yuB7HeoawSFn!I^Q}@;CTllI&ZU?R3-a-X23}A5 z=f0oI{VB-BGO6rmRYV0O}yLMQHI{|?sx0{e!)@P8M6NJ85kR$>z4!y3G%`B=;@R1U3XL*PJZU;IqjXh zd9X^lw(ORhMXITr+#&7otr1Rl(aO!h->}O3n?jlW=aO@HeUc>tP6W_R;UHr8CJ1=# zHUSjCJLPY!w)eWDt69L0(^BlyPI%4qm72dBXJ%Xc!GiNON~BLa<4Sd|J&RcM^ll-f z*AW$#)%!!Mo>!A6M3{+0L=7!>rMyf)ahZUJjpq^6kY1`0*+ULAm4wY1K#>FVYF4nr z+1a+<=r!!f*((VuT{Ck6Vjg-GTW}v|EA8VR3lI@F%nc;^&qX4BhQd<5)bC>q$>TWi zD@(&##)!*>{ACGVkVjg`b`2xvMjar$w2SAJ^YMgNL(LAK8)4@jW^rA$FT|gVa?x^G z?R3hlw@qy<2_KPLnOu?Gn{yrN*7P14=eTHNv0GM-$~>pVP}3ARjK9kH_=@}fb%qz$ z^-{!vTdDCctP1?xk&38PI29Ug$7@?9ng1;PoULrTdxl~Sp}G5Z49Xq72as+tIxTot zKRHQ|6x!F%oS(k==aPDCfKY<=M*1EXM`PUO=-1YX=E~iosa|Rqb&SuWHamhsMoy`! zlAiC12Cj&T{WS5cL`z8jkuu7%kuoK@av#Na!A*cD6I4+&pUg2i3oRu1Jo@`o93h%n*u(|!mj6FBKj0RqY2H)B9HWcl8>XhI?U&oKk zfWAt1lzwV)_TcFh-}9%1;;_WcRjOVAgX`r%8xpg!PP^JjvDxO{5?j!gJ=|A4)pRTV zor(3OI>8_B{Z(A?FK`>#)s(RpP~&qCvU?rekEIno0cAK?St`iL6XvD9bB$T#tPW#u zdn9&!TomeeewbAp8d@Db>Y7Teo_G^FG+Oo~5{d8+8y?QSx;C8{G%@_Aq+aSn86c=A zY-Ri8x5*KgAfK*@Efni+2!RJyQ zT?BNfIEZkuS4}c? zXco)kk(%glfz*f0207*Q$gR_qOBh-}+l=VC$@z65RU<13n0Y@7XFkAgOs$?8|rG&g= zV7`tMw=zyIl{txR64`dXvxJSZXaNqvpy@`jY0=nZ*4O7XD$R31MXO%yAw0mWA{#&x zTw-bt2XfAg5fg|;CnavRP+=8-VP?y17NEsp+e8e0&5Qj*vzlI!9*qeGl ziK!5;bs4WOHfTYl0xe{3Xu9&A>ZHp6_XvnIZ{=UI7AQZ?Jn??%y+gr?%O2HZRloI; z$oh60S?N*6%^qzYT=&8q_TWGcDnNvrSR0G7*9?}Lx>`hH8r{PuO754RwKo2slVkF0 zk#3YIE^$Y-b+;PTfuavd;si*<6kZ*wPA?-xa}9KQ>v#y#74C|87CWyv#7`~t?ApBI zsZrO0(5>FNl)I(Vk|D_fE$_$2h@s)%{diQ@QTM?c*5ojs*#!ie$?JMSYkZ8ZM&-K7 z44y&wEZ~=jg*~LEic!WU^eO2zMV}V7uCY@;xWi6~hS@Rwiyt_-K_g`0`b6D@BH=b@9p0Qsg zDN-r+3La;x!ggG?8#0`ef~MRpAY0A6N!~7|cTFgR_BU(PN9fqWN@Nw!>LxNp^wenT zYHU!!(Y6&Tx93cNhoB*|n$$VgrdT&h@*8-cmNpQ$v}GW1&*l6er_G8N#fAL)l_x4( zPgQ&P*)}(rkOzNemj(oWR=#sFE3#Pe`q8UGxbb?rk=3BT=yB9V&4Uk0W{;hH(_~qE z7aQDtWPB)(bo=aQqv69P1{#(H_)xQebvqIXd?4J&s0l8|nXut=Ks2hVq#wte^#W$aZk-Im)WFcA$Ymzf7@?Qb|**lbdj&=x56 z{k_~>V_NuF%_VT}tzwhH86MSZ=ir`<^;8sGKzu7<$fDJB4|q^prbo zk$Q}xOTG+(o9mPz>>3J&glhA1$l}w}Krd5M>?pY^zsm`o(4U&9JiORoUBRlcwUOjvZ;4*}J^7zl*;nNZw@q$_!8mG5f{qY?#8HTf4mR-MP#Y`FWu_Vlj6unWzX z>h^h>I-8dJAWsa_%}t=b7G2i9Hf#Nh@D%@|?dezdOHER&9@{!S39G3z9(T%rlojg9 zTw(ITZ@p^tjb zP!n+q+u$>A$!EObN}}uJc{1l1F-yeAD3+J8O+&{wfYhdMOp-0;fyDb9E`gyQ)vbd1 zRz?Pkkt&&#-&n-1ll?6JtqzEk8N!>Shr^JYF$X|Y(Gw*OJ|T`u9|m~cuodle^0nZs zP&0GYv*!b*c&qUmkF9nTggqfSB9c0SOnf{Scw5!9mC`|B;5|6ib?jm&tM!r!Ej0J` zb8|b>Du&wJii`$V-g*?fjTe|?l!)(4*7;-|4p%Licrs*6M+i|R3E;jY$5N5!OlUD==>o7rIn=0?*L~nCGZsi z+^5W6UJXo;hef|b)pV(AN38I8wHY=j-Lw;L36a0@*5i2s?=0a7YtUASL|bh4_9X_{ zB$GxDo+&ao)$_sjk6V|t{BOE$&N}GXv%mT(?DRPQ(Ia4RweLxq{)OYX+yp05N@Q4n zu4iR0R~YDCHPsPVd2aK|*eP{>!=9BPOe}AWU8Z;lK$5U{ceNu zirK;qdE8}29U&vi-W9hVsZ&SMuMr>1Nvxwknlb5@xTj1q-CVPjd$WwMIA(5gC?Glb z8GBT&8~BlRq$JQE;b(2+15}j`w(T-}Rq`cR%`Ypo-u6?&v={K!of#M-yivEV zRQcBn`%i)b;vcmi7;)53rX;$e+h$(tREVfJ zM%?t(z)*glxvjz)OjE9#$@03+c|H^5w#d%3C>D~=r` z%2OW^R?Z}UrRoFztIx0F)E91ItUL*epf2rzi|{S@qaefE?FeR0vQ1|H*Q$Y3VZv&E z=l&&!B@MUl>1y)({=r-;>PML~tTVC9>q5{RSA5Ln_r^J(wWm8p4RsiS%6t@)?bw?x zfSM^g50j{+F-S?$60(#+=SH@a9d?;6yL8u_I;XM+q}ip+TTslB>&cJdY@ZxJ&Bcd* zh^CHim|dX*a_8X|s++>PjT%CCTXB=$w|AVzHx9O77I4@Z9-B>QSd=op0QV4z&qtuw zr8m5U6gf)bt}2RU;qi)IgW|=k9Kcc8*x!cL`S;+e)&G9> z{H7VK6Q&9nZGw68j$N{EWWEJ`s+HPLoaleg3ij`@oi_aY>7zRbD0gE0`#&y%p-5-0 z5phpJFK;RMJ!RqVH@2ewJ+>#fe?1*r=lDQww9?3YHw{LzJRliofQ~1af|v4%zh5`x zzs7cv@vmq9Jzq;i+_Qc#kcIO37R;mqynmLI^Y`2K{(EGCzn}g0WX+5-qM2YE6CPt% zV|g<0{#euH|5^(c3T_n=Q|%0IUa&^oRA@pA>1d)sWl@(_f-oXjs@oP}5aB**9~M%r zE9_KiN^C71ySWa45sb}gI3QsV%k0e(j@AW?ZNo8y@g}jAB91m?AeYciP?uk`tm4^^jxBvFBW476`1bD*YcUP!WD|KAHhdB; zr;6w)95syL7}=)JVv+b=w-SxAQPIoZRWktW;(N+wSVAdvEncP#2MT+FIvWbN4HLL4 zh4uGkI{n-F&<9ITeAoSOYUMz&$mQrn9WXI6M$KKSBn3Y&H1B7lT0Z264Mjd_*kI!N zk)zP0u$ELt1?FeP!@*+S%_z=l#@7Zi&Vj!!qK7=06Qc6lLr~ar5wp@*3knT5Qxu&TIR>hKl1w1~nM6>PAuGCyNDKmu zE1LyX(a6e$)a9!d&x~F#kS!thM8~+P%Q@2msC}yeaUx>p(-a$Xi+$botshbxl@4tq0*6ja%O<***e%dd~e3hcfDtt zp;Pl&TF>4m+C~T6f9Z4=n&?z)&M!X5wQO%@Wm`S+HQRv5Z?*=tgdTYrW;JQ3Uqpzb z7|G1VgN)~3$eVy?H7`-uWqXdj zyT%Us*05hmZ2{VC^L&5(pyznYNB#ECL|t9<3~DVNBwPs`RX(Q)`WgoV38oh%FwbVN1;hiW;LG>rAG^M(#V%$MNgxMNfey{iv?@{d1{-V1(RQ}BPgbH zr{AI-U8dA(^jx^(irFyPh>$CAL82p#5Y%{eVrpXAEuQ{;8q>= z0cxd60$d{7sJn<%vm#j+$=ftNuGaEe`OD|GVL$qh26QX!RFY}#RIHyCMqG_haTBwj z1y_e7HJZ0bv2Ym*N$KX)MaSW2m_0K&b`&Nw{G6dpY>t6^j@H5FR+c7H*A_uSk+77P zu!!CG?u5{vwT>{+Q$#9S98YjYc=Z(}w7>SM?3ZYI8oHK}FBooevPEl#yJa105_g{4 zf~)G}}6{5$&EyLLP@EG@Y2$5%>Trpp%Up!&#Jf@8x!Hl#D1DbMpQt5c zKw6OiK#*FLZKLFUFhR&k!frylS##o;gBEB_slB2Xvj+;kSt4FeG$#iOB5Z`T_7)xpRtNQ$rY4$;9^DP+z8ENZ zpX8g1^lKG{x|NiF64q`t5AmvU+Ut2vL_UC6uOl`3d?w(ySNlQ1WP)$loBCvCx6jDy zN?OO6kTcT<2k(5j_{8t^N((0RRVlVY@mU-1W%7zOh5Wz1#C&}I=XL+&{}cD*KgBGL z|MMM~|9^{EVz1>DW7~Pxf5+jHDcdgGTZEC~B&y%a3VZ9LXX-Lw*Ho1hFvlwWJKg4acwmpigK|lAW&VfG*dRZ&;EYp*MH>jf@;P5dcg~F z5Tqia#s4&9g;e7S8S%)?vV({uwAX_Jw*;}u0mRm;Lw5}x3thanHAPq+?l+hwMx`H) zxZu}~yD9wh@V+F6HwNqeLn?+QX&m%8BEQ24ZMl5RhwdORR9J=8?0oTOaajR0(Vlam z%HjpO^lW@$W_RrM>^E;lqlG@2&Kutwggi_|T}~hUK$mE37B@Zf@$qq*S#~6@K2mjh zc?a{zg@UX3-bD`gZ$6kFWNaEpKUi@&%zEp&fv3CrvYz_aVvbYk3gh5k2zr#(sfT~G zD$RF4*m&>uk(=1yeQj|Wam>Sg>^gb2Rd*+Xfb#CwMhJJ$khT-NG?(4YBhgkQ`pVzjLs=4zuv7&)va-E zn19f~R^*Vy#?I)K{QUjH`Dc==K{-1wb?^J`SKs_xxxPG;6B4TeE_Z)P*09wESMK2_ zV$}R@@oG{3lJP#zfsal~+oUSH|yn+P`VsLmBKc zP`_mOEp)Z>9DYk5-)>8e`kz~3?e4%lr4H1-PG=LLQ{BZ+o|jr2Y-kuH)fpKBW^L0XM5!UCIC01HPcEZ&eN1@Bp@lnsQhrC*HI&!l37@-eYL zADKo`0j+3tnSKd5bm-$E>iUE-HG~7u;fQJs_B5#&u-7!jmB;!bpDgn9Ll~;mGd=zi zG#qM$HxpyymwqD~im+pjg5h=#K2jruz2`OCU{-yGy`i5Rz6du!uOBcEcWcrLbsLcD zzIZvk`Gbc@OEj?J#{9B#y{gyMx~*Qp%Dy8n6LhW_dZ?#&Us3iw?p>KJw9lEoM(JeKtcEArsOkiX zhdj?;=y<&ju@3flKC#iCAIx1V=ER{vsbE78XBV&PL zn=ABgh;jB(vHvNT(A8Z8F6Xh&T!a9j4;Kq_KvMlPYa|EU{_4%dYJWJdld%cdBIyav zC4=xDzTMwxM{GZY+ej+zSRp1vG#_ToW{+cg>!@4DW=0!|qN#|q$SRxm-nSO@LE+c5 zCx_<}Ks3B+$VZ|BpAvEOU>`qmB8QLARzx(N*wK zK7IZeXptCpHUUygzmPy9)X}(%k#0#2Tq;VUY?ismOW7(iwAhd~(T1$U%G4RIuyHl{ zsu;&5Ceu71rJJC)Yq~I&!!6vN<0>v4288fRKhm|friHW?lQ&@lmZ-|W$@xl;o{*oW z&lI`qklNTWs*U@Z=>>jE#mSd;-h$`^8$@Zq`w2$aR zMW;zz$KELFhG~px-tqqTVv8KX#76woXm-oJ(9zkkhVrxbXRp#}XnWwy=~X}AZI|^i zp*R44*lHyp?N{gj;Y z;w3)NE$pP9760DN50?^Cnk=3PL#&O+UJ)YG2ydxJpUg#=G#_Pt=*OYp0a_QKmNrk7 z`i{sBL!9S5;R04WG99?blsy*b2pzc`;OO2Mhm+IU2i{S-3F}y3b~osC8d$1fNc8DzapJVu-BBG0e_&dv=3)+hs+EnxnG4u8(`5zx*D$rtJKDaeUGLL&#)!+<`@+)E$TQnNwZL5SLJpdM1ber`$Zjj+EYR;)C4LuwJu_y)b9 z>K!Sk75iNjeFT81F-(Zos@Tb9oO;R@D#Oi$K zMAe$&)G@dPSm#H8KFNUk+g9)`C9u?4Y)FrciTrETs>b%}OrfJp|`f65Tm2TM);~$iY4p7OT^-E#;PUc$a2>Kw$3v+M!-v1 z8P5||VY`}MKSORrtCzsOu;20z;&b)D)9H^OGcQ#a5;K`Ax(uKDt?8D034LyD-9>Tw z)%h!C&UY#TAN7@DLrj@wD7%a_vnwM z-j(HP38V*o?SVgkwzI5^%WdyotOYkvO=Bya#sOY-@YnKi!oy~zQkenlC?v)K`!fv~ z=?pEzQ8vhIAXYm1t4)gr%>E4i8=~2=Xxi^WCW~})vJJ1@e}T0#YwlrWgr-?tz#->Y z|8^VQuHLLK%qVH3>?DMv%dika$a>CN9RkXG!D-fvk(BP|6g9}E%jH@p{#)^fI5Ec) zrXkyTo2RfF(MKU|!K)_=kV+e44SOGHp?$>|4ws|{9|5he`1l-yE!3^gM{S~jj`v4k z5X&1?!OIJXvNaVUc$3~GRx(A4<_9gLG^50p++hIgIPuUCk)|aftUdj1Vv3?2pmZ8K z+fG3Zng#YZ12uI#_yif94*-tSzZpIyz@8(-f0^ZZ2Rg`;hyT9D#uc{UhrHCY=wrdzEM6KGJPT^PxO`J5WfW$A`I_9 z(}oTO=Pmq1Cq6kCbf#TWr@X2&^;$-OUM#1kE8Ut-WA6~t=XybAUfYgbCkv_Ab9~q;;^-uF1W_q1inp0`A=c*9V6%rRemke- z$zZW_{Y*Xm26DCRm|zOM6SVCK%27OJ|FCh(;i~3+56NgKgDIGejTTxN7}f(X)Wi43 zr#??V4jV@|h#S-90T`(3d}E=qr6nzuDyUJOx5RU~=!|jlii&txeXbDRNdV)@- z^f>Un&Qa(S47tE*xJfBBViBoKqWeJA+FiUc8%cW~`yjmh92kG(i8$98wN-S`p7ex` zi^$&cjAkVSpc((@2z|!M<9tNyyL^A@h{zL!V^_()G|;&@g+{FP9a$Hyx)Q~22@1!gh0&(lPg`1Gy zs7znZpsXVsHazZIirD;eLcnaJe*-!V4wExsY8#{8rURRDQsYR(EZuV zvi*bgvFd^WeV;fgzY>2?yp+fgU-@31Q|F8taYdvuYO!rZO_{qG+cnv%FrOaAf+(4A z-QW;JOlr1)?7I1#wfAP52yykGEy^uK!t@9sE*z z=uv}PwsNW2Go-OcIjz)j_DdSHmn#fTW*&AcCRqJZDX8RbEN{!U(M&B(@vLn2^tSL$ zG$?kzU5V36X_cCuIh$0P)z8$ehupY!eeH&ct%8}K*wsuAz4#(p`OWk&&*@K6D*daX zKrOPJI(m&iJbzHAqH-KXS;d8b2P0Nx5qo3e@rPsqL5T}pKYdzu060R4{kW2|bV&m= znMgKdIV&ZBrtvB`NRriyF*p$&Vr9x(|BhtnKHO|tDc36j{h-GgaY952#q2c*W(gxS z2QjY8erG#y;~NtO7y_+!pV=@dCao;8pDM$8i;I|-@d zHjl*gPU3asI*j%dVGCw6`GEY6b>#%@DlG{&ug?d3=CXc1E{PhB+DwXe>__8Dz}3l7 zC%Z)yO@Y950BC4MAV+tKIBjyJj#=pzl1T8eO1l%O1Hhp5HmMd03z^w#U}CA~2%o4V zAAZe7%MSKY!>J>c52F%gn<#3Y-m)VX{hpa{wEt>Cr zl&*IQOI;fub&toSbUMCExJpX-62JfLiVo``0QZPYM4>;ne$WutGTjTc67^>B-DYil z1^Pj2{M8+tN)5dm2QEIj`lx(MeD{iv>LXWb#Zd1Pvy~X z?7n0LJ5Y--1`shGy<_DqTLWSx%Jvy1M>)q5+b@%@9qqUB5wEQeFPc*5)DJE-_D4kI zc@3I3TMHHt@YQjJj2Ep&E1Ft4dATa_?pdNz9E_3}%F`5jVJkUF7=6kMWG(V~)O-*= zwZje=*MS30S!P~2!v;V?Hd35#uydf^9MP7o-8j04*$d?)kbSgRQC3ayl-&@IwlwfW zw=BKvoj+xt;&)CXSe#;+b{{nawS{~NUXmUr+YNAn0C!k+1kM5|N+8Pc2jlSqNVY~r zow`h}Gb*057JHVXK}O0G*hnB=F)5&?)xa#F>z#C{iyu8tdq9}Q7{Hdr0E)UBU>7jk z9PhznGpG@cLYXcOmi!7R_tf}Y!?~O?7~4f1!|I4&kxe@;8T1R;o8fQ)E&()lsI^fa z9}D$YAA`kGeX;?(EZT6iy>J!K&A_rq9^Z?*o}=R2@G#?W%j^0L#FG%Fyp-&jS3?S` z`>Z1nx#xdYJ%H3c=&F8a_szEVaPE_5_;+Y8YeHEL$()Ctp~w8Ml@Ik2y&dD!_jYoCt$xM=?QSm&sjT zDNGerAqBt0LH$C255U-k0mq&$h$VRpA?5|lk{cpa^zl*qAmSJ^iHAon#)e{;U5mh+C5F& z?h!wD;PDgc_)u+HxcuCGCN59YZ)4%o_T2<^hx_iVBczjiOf1|U2$s4MiV_k|FpZiv zr%f4qejr`d*t=BWU0|Z4dJ=?y5Ad4u4C>E>Z{aQ>wjKK&r5jmGk0VpXbewq4Epc=g z5J5mf-Q4kgaCs@|aNV_d!^t|!%u zwXLWn1l~U^B&fIua4OD%o?lEg2CYt@t?yy(Mum-H@*_BgXa7~%AK`2^2Pb@0G!Ug& zn+Gv{fy29(*k7RCNuV*d)=!Kc3RjR@`8_jL37_c$3W4akD#gK7g=G-SVGFIwL z;n^TJvA-j4f|lpM5iqo-6lTMUT|lnoSIic&)?>Isn71&(J2HsbI@?G&Brm#PB@gn2 zuxT=)0JVl}T|3z9^#FDjQZuZp)W3%Ri^Wd&+ud7x;{|vtNW-X?xyASaPbovFnzufY zxrXOgz5S<4^)<~}TGrvsv38G29dwesE+#*DwG?cG8$&znh+^7)ddk~cb2>I`Da@+8 zQ`4w7(MB8pW6_dLV!3dZZaJh^1gxdyu}8^pW=g^F*7Fj`Xt z9kQ2zn1K2A_V8)ATxz!ap&y%rxGsyhR^3iM5h|JNT7Zqg^Pba3scoFqJ_17;+mNIz z>Y%P?>&jdJLU7q1I71y}$+iI*g`3yRZMX)&zf3z38-&$Vyc}PXKVz^1a;UPnAvTo^ zL5A&P^wp$i&SGymH0hJ$4V_CDp?A*}CAK-aGHMEUl=&o-x(*7~2Zr;-IK=wE!PC}8 z{q5bTc4yU!&T4f{G-7Bf@Uhq4$Jtq)A|I{yyn`NG=lz|7VV7=~qPL>_>P$^YDH&`e zGKnjgks5Q6x-n^cz4lp!`ee#Ad)Z(Wp%2#!HK1j1e&!+)iic(T!UrVBXEP9FKoYu% zQ-II@JB2ZTg>lM5nh2dJO-k>$ra1ZrX6G2t4C7kTTY`TV%?m*wN&CmxZ1t_NWYU6XuN zo&j_eVvkDhgJWk{*f^Ibz^PFNvd7H_n}dZ!a6PIkR+Evh6-XJ8J;+{5+Ia-FxY*yspuP5ejOR1 z*UqS!NNoN_bp@I7=P<@%YI(AC#U{-ra>k*q!fAihpz89vFAK&G0!;+_Eq1hZZhp4% z%0Oj(&IhaQ$ZC(5Gi}z}YMM_LoJx^AT4_Fg+F++e$0?`1Ddi4XC#5DGQvVJ!%X|~z zMO$`MJnQc3%EV&tvf#u5Whx81maw@{*d46tm%IF%LKMMo9h+bff zWft%i@qVHb5Z3y0Vj~$LAn3aAkx8R#KqUjSjkJfT9+GYM2QcGoOpH1nQ4c(GS=>JS zflSuavIGj49xW{$ENyq|RySJIeR$H;o#maeokOJMaR=OU%U_sbKicQ!pS1-}Th^{y zZ{N|_sj2k)t@QQo1tw8OyUM-kjS2UrKb!ous^!YXJ3&S-i}Uio+%KCnK3ILOEyd`e z3oe(k;jdM{R|&CFvxz#K0u&RIv!?#j0wx9o>i>`I2b=*)<5p+*U#o)5q7|iHw)^Q{ zG~RP07Om9j6vIllW11fd1pkEjy1MkAk{B8rB2c(NJ%Ani7DJUY^MYHYlZpj8Mx{}o zLP$p<=*TScJAk7iEV4?$g%e@pHbhZ>8>(wJf~l$i@ugwebZB`1E{KUKjuqDm=BsW` zjE|0lMIZRZ<%-#nnVAWf0mH`YFU-7sF7IeHOr>&d0Z?~Q4Ymege{3hvIe2fn_)&`$ zSImWc^YQ8k!~74f``XWhyuR$bCNrSJEC2NEu%5~i8IMQGNZeB$V|Y|0iKUtKlSYB6 zeb`HLk!8TH=_6t0Rqnt1GW_#p?C4HV)N=v|s7giF@IU;R5s*^2B)^ZH(uctOsZrB` z9K%bWr%P`u6^SvyimiJK35(0!D>aSuB{Wx&@CFQUN5>axKV$aKSB?Pb#Q7JTjM~?< z00)CqM{#3fEeD!}C;nQMUy6iYfghHyW^bShcw#_CIp~CWmPLKdGXugHiR#^o!Y@>B zZw&J{DyZ>+@|7kM2kPrX{9y$ES?U3$g*(NH zEnSi%K!S{JWyuaIY=A(6vE%S%*2 zKTT5gd%~h6KuinbzYdX27|f!Ve?Tr;0Ahnc3)QX2|7#Ut&%d`ekPdB>ZFcV1H*K&R z;M#Xe@c0-yFL}|6oFNg?H3z%I#19IEc^5X z4ROL}$PF`o0Q?G{5O6f%tjGg(^!CvW4aH^`DNFyfA^vF%yfMSONliMFzrClcCo<qsVtQ8XroTk9#mI|MhZ4hD7tvNq6K3 zoDppN)1@!xOO-Qd^(F6b^juN3Dmd7-DE9c!T%?VhoD_hFH?G5*0C^HdMUu?nMSEN; zr?%w-;I`yRNUvE@3rgXI$N_4|!YH6mCy=*D9f8W=avT~PYrztv0&k=3N{Osp;>%OH zAD=xS#kFgXhQBDqcON-DH8;HYUUMe++_)AK>nB?>U=H*)eaaa`r~(_iY1JPWm|wUZ!&mmbAQrQN!xqBSRDe%a!lzB{pX znA>-+9CV@Hf8s_vYcjgGeqIyb<+y47flsQUhh=-DUU|g8e88=WR{qEAhppJ0bH1#w z854M+YUn|3rznu{<#7!N1k}gC_5n@BDD5tKJVl8(`c;p%COWZN8w96u5kR_Ep_wD` z6F(69ig%JWPlzUycZpFc7^7oA)=YlxbBAv1OE@FKu|1F#Q9a*`4O~RE6X0E=u+$%x zKSYkMuVcY@LL*{sQhF|r3WItqI0xcS%U1O-UPHh>2GKIJXV`gQ5RR=OPrxV9Ejy)3 zJh1Bp+C${3Pn18wq4Xd3!#^L{XKR$)HSvecBzMGAd_1RaO8SH~f4&$kX;|q($;_X1ugyk7T)q^Z_@F$w7sv=_AUnD{+CX}XYBvHGC%yEtLJ}*tLOh^ zROR*`LDl2`6I1=)##EMqYmc#=h#L=7E{S-X8|`gjl=vsApL{(levuVFp-EN}2l2gG zqCDKH!zFKJN5lqs7ZjS}oTTQX4+bn0O}l~%a9A?5e6Q}6CtWV#nd=KHrd zxI3b2$6`kan>y=_20PyG=MEL)8It`@rOJ=0TxSpTR6m`5>DF|uWO0sOEzpe$71Y`e zm3jlBP`&@fD%Z%e%$J{@*(l#iyM3)}h#d$t_BxTiz;kWY#eXnr8W32Ovx5#nA3u@=HD=*zxHb*YF zC7drdDK%VsXCUn7Cq^ea>UWjg$xFQydMLoUXzRg@s_Zj+pJwYH7Ve*0(9XD5Vcc|~ zLEWzXjIl{d{xo3jCtDTxa08la@mpB0*H`sUcC!sIS321S8T~twjYLB ziJv|$Auc&e_=-;oXN48@0%8I6Cr9Le&DPKKwpMz~nKMtlij(i`t$Ux8k?WI%R#VQe zsPw$pDme3}h<3l|Q-=GcJE!x~%1!pC60q$|ZgThq)EWl&#dn~i#p?)1 zs*J)pZFqAKC$s??#b}(QM6C3D;@fb_xA3idK>6B3hJx1!QE8*BR$KyTyEb1D6zEEi zyvFFlN^MO*4#3}qKO3+gyEaUhPWz~6`j0(C8m!d4Ri#_M(@!TSEy4GdQ^~&c*F?=N zWu;r4N#`x2`n~+QugS}$xa{3JFD>JXw;U<8vkE(M!uD0RzPG2btGS=&l-aQ;hs~~5 zgI8ZFo0NR1L9w^MJKf=1f`!z^(QOQ&b^=)))K_VKh$OY*%59G!BHfy`7N&Jv-PgC1 zHPjl&l+9a$l~nSA%D56$^?%91WI;c&qnyS=5pdOIwPQDCD4|D zl!mP`YdHg)Vp*f6-g(a%2#h*88sc?@^Wq7$w@-*`PckGYpx_j17Q(zlmpJ$08pJvZ z^~~XQhRvGoV-0UKn={`~eg$$te{Yk2?;Gnoo0(|q}n-v#%75o_>{e&`}i5f%kOHrA7%Ds-&w}WwLKy6mcEQ>`++tDa-+Eg(5p&GG6x`3lJl{=Iw0_5QBuNM}vt7JC4=lb)U;7fde z971}4AvKmMJ%WkiD}r4Lm1eQ_b%p)NXdT8YR@L z!g&n=81?an*O=Vb&D#70mD2%uQg9n(3pD?3DXZ}AwWy*HJN&InF=f-Eg`BF;mDqum z*sA76EpIzsO0!$#sZl51ng*uOg`!y3H|sla_DS@ApATHF>&Ey}qoQz6%hh^}v6v@QSC?48sdAQfGC*N{1j;W%_7~{+a(U}yj{VJ1AfHE)-G=J`x}|Uf=)F<72AXhr5Q5G&0$)#ip-vr~TnraZ zJRimzavGr@C8!4hKJYj_%?)-4*N$FIZ}eml@iG`ybI;m4sptaG;a@oB~wye7CTFZ|bC74q+c zr))#tdkJymlieqp;nNppUhEoC_XVG%8p-^rp&Cj4kOj3l>a54|?J7;>SCr3{Yq~=Q zFFz~Se4*kH?VNo8KhxM{2WoEW;gTc6A3w6xTd|v(cP$t01J3m^RcviaAGL0xb$(wI zGR-bAxe6SRayA`eiV$&DdDujTy39o&Kh(+C$VQBe9EKR36#H18uJIiZzF1^V4H&jY z9fk;VF4BEuG#o>On5`449uCkNRt8&*?9>Q-f;nBoy&WRlbzN-RJ0*d^qo%}CVP20f zGro>-b3%2l^Um<3!>|t*PfU)SKNlNB$njdymR_XBP0W z^61iSrnKJZ{nGTAi<`m@xcqd<%IM7A(CI{$LzW*p%ed`$xpd^C!PuIt8nKhd8UdV$m(EG&?N1)aVxmELPiod(8WOlW(s@jENJv> zA*(?ejQU3ILLvhwNU#9Tj@fY_^LegKCvuD?xmO2!2&qbNrl5=K%t_E?&XopB&8MiU zD4D4iOTbg9E@qO}5@{2WA&ke!xi7`jj16_qW)Z0r400XCa2Bb<-U>=(TR5Tg(I62g zMP@0IUjx!W7|ofhS)6o=l?*RlNL`4GhES<8m*P>9jn^=$S+nePxJ~ZIyMkHl#+tD5 zMe2Y5q>kkbP6zq{1C^q!R-rGh7`tUykd}1&vL=(L0p)0)I+jV6{x20zpLUviG7tK+ z3wIxEdeSslIh@1*NN+=nV%0r6Gy+{Ur#^Sq1JLa>^oCk5hukLc+L@|GLgLa}I_2&JD z#H<64#BRGAq{a^9vTyoD|Jpod|9d;JonN$W*0b;oxgBn&4~HTnZW(ty(<3O%JPk?-!bdUyo%0Q<0`sPKAj`oCFW`VWvHyH6)o{EG;L8KTx#IN zJhF{28$FS9jz7M&2hebU)Z{?(hEmf8Xb(juXR7Ygw#9!#bb)1w8SrPGmS-iAYb_=8Cyr+j*&7yw+qaYh`4G|V$d zl+&uquZ$ZCjqPZ$iJ}`*_dRazV}NTsKN6$*z4gb0rFEQG>DYM^pJsha7MzLO1)I02 z9Uztbh76Tuw!PavZ$8UpGQA^{o2+tBJs~vnE`z)PGnTIC{E9_-y(>@0-5=P1gMmB% ziGRo6)HA@YXggoR#zn00EVMk~Ta@NkCtSX{ z2*P&Dv|iGS{D%9|1$Jqpey@}ut&BB`|&cHJrHwl+$+vx4%P;5>!S@9bXw{t?C zO0XLp87ZjM;p3Dd{oR(x=ABUgQ0gHOQfzR z#}1Cbs99HqEmHMdjY5(iDt9PiGiVs4&J$G$RVNBlK>Kl+gak`)OH6*rQSHt9;B_U^ zF`~|tdTUQZR|adH1L$~DJ=23oU|C^Q2KN=cUA?2%A^p_3@rQy=P9&_1n>c2d-pnR)IE^}LFI^4ZKYDRK3; zDf+^9d0sOG(waHd=l5M&G(Mr8n5nb?s%F9X^)ORVpdpLp&j8Mwp@v9Yz}rZO_l^~@ z)_r-_Wk#AR)rB>3f%aw&pwRfH-kVy)=;4k%PA)j?oK%yNJsVYIeY!+f>@&dzcUm0n z5699?JkMJb!lvqfI?{lblUY0NHS#AW~;gnG9v2){Ii|NRf=Re1^5b0rfp~ zFH(DVgksu$#*t)*OOed$P=AHBvl#KwQnG%cVHPDuvG0GMqyK#^#|K=#J%k$?0LC-D zq`;Guu>Eg2RnD&@3#!iBCHTnLl$aNim=~%RnVd9O_OsKi8rI00#>7LOEE+BrHlg{16{D0qNowwCCe|Cm zh)9=sI`hiC63%+12||_1g*iao z45jjq^w69s3MspTmw$zN2p;MfV=+nV)UN6g@e2HwxKVbY(qe+eXll%$qTyreAp&ss z(IPTjiZ7~-m97o2$EDUE)cs<;FHC(3lOIZJJhid3_;*B)kJnV;{#V5QU*%@P)yX+K zgYb9G(y4xSWZ;%*=gN`vS5<#n7J3>aJ71x^2~0>ZsC6oyvwD3mYaz?*X7i7k9Ba3g z-c3FRTZ_9aQj741e2V3#$F&bWnEcs3KtG=CbE|-*O`-AIX&bw#*zz}tsiCn9`}2-J z_kE;#Ny$1$pCH&UH1PKB-Ssno$Wd7J5NYgi5j^^dSwYDYERA!d+DGC0{V4@Lii1y{ zG!-9z%KNYRM$YRLbBou0w*oBu z?7Z?ka!owgqW2$`@&6xTwm7!TT$wu#aKgG*iam4?r;%8aSMV!>G2yQuXcD+6i~#yy zFzBnhEQPjM@;;eA{~O4MfXk#m{Q9>excNY=>Ou@}>7O?<^?f7b$G{NH|25VNiLRNleU@DsT_9R(hIPmwf0b#;f1iN^9 zOfA&sEd*X$`R&0zfX_c+@ZlsC=ms&Lif%!S3DF7sWWE}o_V+SgM3?-7dT|=a(yCDu zwD9Iv7~iOoBN@VY^nEerG&{puQgk|g;NDblQ|q1kqmf~hJsmFECG*1^hq=RvXFtxp zf6AQuEUZ84<_lnWB$kr}U{|p;RgEDRl9X`bh#=ra?aA_>`&K*3{G1M~Gb?wB8BXZ- zZ~yHPa>yz0TD-e|{yVqVHofVd`<>pJ1sWX3jjz_Iv*x{?VC}#x&SL9)%-x5 z`YmQ$74($%AAeFDh;wNOfM;CQ=5&c10cdQOAv5O6-^;qs#DK3=V}S$1zR{zsFB-+5 zChr8$?rRolYO0rhoHN|TNtG7(!aw9U*sA5= z4?#`}=%3j`OKGQB|610bf3NW=`hP5B&wsbx|7CF*+*gDTD6ky-Yn%UGR)XjC_1*jT zvNHd*#)%+-{BM@>KUZ9Sh@jFqN^wvzoO!A(!0$_;B8oY{JqTOJe~djZs+#Q*3p;Nz2rdy znc(UEIQM_{?f==g|NrjWdw(xmzU4D@IUTF~f>gmDiHdnyqu`9XVHyw0?8{6UNuf&v z0d;CoT5u3zWZ0v=i!*FBhF;YS+-Jt8RFT{ayyj_`0*ue>(j@|?@SbO3wq z$2I-=v7KAHjQT5#UQGGyw{WdnGT1S^cAE*uyn#Of^;;^OJp)wbmH`s{eoy^(+fTWD zdT}u0_OUmc-WGo&ehE`n{wKxj|Hk#`6Dywu6v|Ekg|gYXe<_qnO3vGm?3Lhd{bv}T zB|pTAC9A;6Upq6E@TC$k*;p&SQO}0{Ugmo;`Vvc7V8@a#zXo)^+!LsO;Cx|Ghj=~S z=0l_=OlYTr29=~M|1@UJp)jOO!p_GXsupkbk}&u{D>PgjG2KM$5NizQk0URpUucDJ zov63G_MEx={{5jNDg6*HrxiOzGHl*6fz1vD7aU199th^8z^D#+s@Ylyol7;Xh#zHM zZ1#dU?!O*C`fbE-dT>do9+PhDYxX@f-1Ys^`DZqrqAmZ#w3ElQTs{@#KIPWel2w-<(~IDVI;#<2#I8AYq#pX9fD zVd+l~KKy#(1Uu2c$ZgBlJExXzp`SOe@yht|MlbB2QTz1s#9G7SN?cj{S%bCjjSG&i z;~x!t;FWD5Ex*+q`CWtOjq`Sse{#QdUcWh=VIy19{%gJya zb?hK5qvVO2hWIup!NKWL2WbAH(iq+x+FL!FvcIMpXAGnK;K(ZzEr%mgj?pEUGq5)J z4nOPDf2168pw~_5Cg=_CW4}4{HeBfpWCyn+>0m7BIv08Rkm}wG*y!7y_H*wK(NI*k zR`_Ab;qeXUylPD7sCWqR2xx@zA1R$$TA9+u_ILf%t+sj96q$Dk-u9cN8 z2P+{sc-B$j*EpNv*e=cyuVjew{$8e|Oo6a`Y)&g0nq>UF>@cuw#GpC6BfODd$#@yW z0x%c@s`^RQ^s$Bz?M1+VsxtTzZV${C24VEL+GiBcOE(~5SnHQ=oD*Q&+ehpP>ch9{ zUEw$Nr3Y@cwqi4UJbl@?_OoYpJ52uZ#?FaQ6Z16xN6&&|w%FxF$D*}~g}Mfl$}!9M z*LInn$r;gk1qppu$Ybs4qTizSp;nLAtPRq`zI+fUc-^u!Q*`vuDzh4g!qQ#V%#R-# zFoTc(0qKEFCn8D;pP}<;Mu>(aRSO~=NvX#y2lUItk2!M|@ckJfL}AINdQ(_PAk7l~rq+#Fol;;5pr+X_czJlGCrj`5%ZouC02w^M!tee?a2l&G`xb2aDGDm3MZT zJiH`$U5cJT>G+j6pQ<3lL~^APrwJ&e(kUgau-voIiF$NnK*rgt9}fTM0_Rs)dmnHJ z2?z;k$Mvc&(M)LLq|>S*&75ip(c5@=rIt|nWR{YcOqYnW%y96T+TD2)q9Nt7@Wl*&+z?(>!9Jf! z>Ke+SPh7{Ko8uLmX+5K40m=+GoEE^lKLa+^rA!J_o}jwnFmI&p8aF|RkW5JDIu;P( zyfxZru25r++87Af({>Nw!oWHKzCc5W&3$AH9ulQ_Tog-5Ia?ZfaX)f~r$qciq{p#J zy{gbB@R>Uj&IM8}0icU_r+M|fbo@rOh@h|BSgq6rV&s56KcQl8MjBx)5lM#-KLqgv zBom6cpcSyT4gqg%$$ST02Y5c-;*xR+X0%O|bcrqd4y9{v5i<*$qOAB?uQbg4)WK5o zk-m-qZ$gZ(1YVf_Q%Jpjz|r~u#oQnUJg?R)#(-75*Tl-9t)iIC$g(cVuzIv%07^D*g<|>RHb@xkC^et^ zW$6gP0GA5XzJso@41g*@@N*2PEF{EmWT@>#Lge;t8YaGV^8yQ`#cK{lgXnJFrosSO z6C(Jvob*S^bKS~RST-S=bGt`x+eUSS^!&KJJWx-K(x0bynCT*}U^R#9A^HW{53LO{ zPB!pB;t6WJz{}##0Fe@f=OZL>TY1@AB(=@t0t7SeSGoJ7Y0DtlJhfaG%DGsTDO1{%Mc!hxyeSBgr50y^;U|xs7WMuwxRx<(0LL<)}Dsd32P3s(Cr0QTl z&NTUfx+g6-mu3kRKSUh_27XJQts0#`)9wF4FB~m=CLwEP>><3YE^OAUAs)Cku<=DUSkOFV{;79}oo$^COiBc`X>Mx}#Yu+Es2v`Wy9yd75yH~yl=sVF5P;cZC`2)aTp)%y$_{Ky|gN#`owr$+j)A2 zaj`tf!n54?sMDK`E>AOJ87Xl>pPg+n#zll9vOhJAl)Gbds~GHznqMp0+>OtX!}o#N z?d>n}uYIRi<*{b1>wcdGmvt#t(Q*ALF_A^(nb%A*?DPZ{{_6W+xGxHjF;Ke7IOy@k z=!YZInD5l)Z9uW3KGAUWd`oGW)Ix0vAj7-Gts5?P`uCeZ>+xWyw|)ppI#n??h31EF z2Wo^j2M->aMk{#hTft$HL^8`0)vklQN2d!;30qenXUl;)ZEV6Qd$c(kb`-i`FHlis zUrijc%1&v>#d*|yWmAMv^m=~z6z`aV#yJ;tKkRMfUL~Sj1r|1d3e@x=z6TsDAZO7u z5tibZ(ot1OkMgFsk+`K5Qdf*1(upABzkqH$bl&^KV{Kh{`mUF|OziS5 z-@yfjpGmwR*OOoUbh}SuArLn-62xAYcDZ69{OG3qAA|0)yDsuS2bMbza&8=Ta&S-7 z`MDsZyRG|9y3oBLG{DYi7Qbl$`WiUkzchZASIQdmke^ij&Pya3PqXy5sxGR35L0HP zj(v83;#%*SIXz-l24241tQnEy02r$Yb zA_c$-s!T=@o~Iu`++rs%Mik<{TL+-`MJZF_RX|XGsknW9qq++WZ6wiS0jfAcO#w1= zs%On!ioME!+5wzF3~bdwuNMg|c!}qOC9F*4ep#nCO(rlA^O@^sKpe8Do+4;+Rm8yF zX6=Vvr2X^iAOpmcdb#{rSW zH6wKEqPzoyt$B2t+||*qx!)cnW=zLGZY}7YdR<;@;&fm~PPGAo&(ZmuNZr0~%G2L} z24b8ul41dUSSGhYwz8)P>+sI%m!QVms@MWBlcPL%31bLkXUy}|*0f#{s@0O})r&Wt zV(B&8QPn$;Qxl||p;l~Pb&6vz(DOg;#I53_<3Mxr`sV9GAq9Z`L>xmg!U6IO z>J8MB@YZ6{h;rq9ifQoKX1DvHrxh!4uZ;jRl8?f*8?9t^1h74?>eo8GFi0*cS|hFS zZV@)J5n7_@n-UZ1bQ`Z(9vbi_ zDd_$thbn2AW&qS1fUj^l3&foK%KUf>dn0`-fYNr#T_Amj|9-H+Ce;ll6ySfHCTQU> zvDFl`=w<{fw>kcva%Vrt(07+^7@Sw`BHu|2wQ0O?IwH}RY&6wW)Rj&O>1iOZ>frDS z>^sG%y~>vWCR#y{r4N&ZORw1qPueR|Ju90x!D?io32~FEQeO1@da8#iyVXFsySMq2 ztm`7C?w8gLNDsuH@R;+5Cnthu7ppoXEPcvm`IYYD&3nqY1VbfSO3yW65_nJ^Pc=8W!GwbQPjd4gRZh>NQai zL!SB!KFR_wqQJ}?km4Bjd%Ch%Tx=GOP=)Z@Zi=(1yJVePkc3tX5F>yY&Bhh&CP!;t z?QKFf9NoSCDGK*LK+en-DhR+XPl#~$nLJzBII*^SVAT{=wE#PHh>Un&W z4oz5!?>UVcNtN${x@KqKXnxa>aDL>4HdbEG1s>>}VU~brfHzQDJcUw)bD&UKh= zgmyobn!385*YoY;aUDSZ8mA?VY_`!%smI}sr54s^Hj^QqAva%1q8QiEuI&>$tH;pJ z71nsu9i0PI>WM(Tj-T`4ba&RphaA8x>?f_DjHxw=ARsv-|CBK^#%;NX0$Zrm1}U{3 z;xn@s7}40OyMfwNgt`iqj?;j`q#C)+QHfECUDVx3XGI)dqsM-p3E=Bl# zreX&i<}Z-ynVHHTt0|kojni1b%K_6IYr(sv?gb$ycYtQW%Al_y6XGnWNr`t6W_xI0 zX^zx2P1f-c(FV8J3^+0Q-qHesps83$$YIq53+fek%Fr)7qzC9u$YYUCY&PC9kymf7 z)FVCLeG@HsixIYBkc#S=ar6Lf3snPYB;=%U7$<>TV9OizDs@jUNJ(gYf^keUjM}D+ zJ236zpJkFO`4BB3qBXDHug3)idhKLqR#?({@0l0NwjVxO9iyplH{1jX{Hyk@s@L$s zhP}1}O6nF){VB=FO$W=K%C{~d$MC=?FJVv5)g$n5=%bhVY)kzeuk*^Ry^mQ{6|hxX z5Uh}M$Y$Xg}bw2>bL&Bz;wmmIN2x4w+P~WJG z9|~H09DL$em`Juix!E8ppmj6#XDGED^qhvIOo8ihj5dM-{Na>&6Qon1H%1bBlu=^& zE-|lbYZA7Jyc${uu%mrMZfV@CeW&SLPq~{{nAV=Er%{)PlX(JhElY^ir$(sqna1;O;3(yE`pU|B6G7EcGFKJ;}OPqfN?#PLht!~!m!?$V8B(sBj z%lvm0YOT!ga0=r4R=GQQvPMHDvpAie1)BYLeEW;gILSx9z{F8bUHiM?n_nuNd#Zv` zPFxloy&mpTfFs*()(9#Jx7`?~vmwy)dNAeOp?206HqF z?h-~< zElL)JtW2>f&Q7t1HpJro)w;aTo-{Ha3Iju4#m*0SV}uDa4q) zVDgw9QvgTH(MX95#b9womrj$0Q34avoRy4@nU1ufk1>8?$-gfa5J1E_YL0xKU}e{; z|1iPiwVET7QY_QnRH(XT-$@+FD6AwD|_G#xWz1~@VJSc_GqvuZKoih?84=j?-Yv_ z$|&e{5zK32Ew{B!8G;#wG$X1TQhRUu;8^^eq>BD+;M0RoTr)EmS|FQFp8m&7a2m6N zfbzZ<78W;j#?de+?Pc-Jq71ow_b9V!=+l*R;O-Hq?rcUJ9{{^I$9DSYGYKmr1|&!` z=jjrra4r}$Jb?D;n<=wRs^1B}&0`SJ1hb8qC9Vr%NJ+zFe&lKd2D0ZYp_LbDC72A4 zCA9N^&*vbO%vSe6A(TDR(mRz2JR(gbHszLpULPwg*epqHXQF7mY72;b zk$0?ypkDJXzFcXJypz(6Xn%m-fBRgtgwX~{{*-V!^L9^O76lm%M$vKi&fJLU!M{pNma{_HX)YPsk2xZmPWL@neFI8>ON>JL^NT6W(R1>Rsyn!iFuhG}4T0w0K1uBCXJ91UHb9Mq z7DX6M4&IPLmb>*e@N&(zA?MkNuV7tzme>F|31SSvJMELiZBdZ3$<210#83bh<+`E+ zRF|kn7Sk59m2O}Q-NEPrGf@>u$TA`0zQwa8(t5RE$poZ&WY9=FN(Vi+=OnFG2P{8~ zSvbh6%SC;cNLsCSR=S#q8ESJ95TiPR|AF2f2=VzYbF5sY$Jy8nQ~ALPC${rn*PH+B zWt*pkDDlZ**s`J*fl*#89VTB=dH7NM&xY*W_QR(%ieugkk9@H_an05##jl^vg^jS) ztzH4`eJ?(}IhG7(O!u+f^OHl~xEs=j)(@mys@brjBU<9W95p3BdwJaW;TBz^iQN77 zboSW@$~XNyyZO@h*UtWB$v(0}w54vhu6=5ZzjS3&OMz`N9(Xx2gyk+WR7 zgv8A5u@8~vmx$|?4$x=B)+SLfRB`U^m}6%2qo+vbgu)W+I9pAL_D7g!p-xFEA2lp` zj^T3hsB2{6^@%%>snBPoP!h)#_JfD_}>#9=a}Nv%qf3C99#LQs*R?$i>xFPWoh& zoBAFy^v!GUFY`NbQsDFWtbnqCXRx>XPVma~Kb+Wl-qBSOGt)I)dtWqLc=nXf1+B6g zb$N6(A^2r7H@U9Dr^dwg8hYimn4;RNmHk(fotlGUu1I1pwe{8n8(>Ckh=3(}no|Hy z-nCIUnE{N@XZ@i2l$Nw*Lgx9iW zgut`vi-Kc{F`IcCJGWJ_mex-IT~KDTFB~f!nypgo174aNY25^LGx@B-ma^F&>=5&V12`+#tV@RF-(nj7LNlEy z-2yolP*YvoR(DK%`s&Q79(?{jWRyFSN?Dht!q&oG^S#TFe)Zb%Dl8$1UOr3%Fl@nOpHQk{Tr=jMC-9{q$&N9zh>x zGr?P>7A=w5OR&En=5W^pMo2`_dRmtuj2g;|MZZ3J97r&B180*lIT4;LpiAtKa_C$K zN$dE+#fM1Ol1^2PXNgm9iAzsqrDfp@%bl0^}h4$=w8am3lr;5xe%3`l9q;ofHnUuwl4pE|1Y5&+sQbHFLliq}a13)dtq zRd#-tyPaeI1$_Sff8?W%Y7R`hFhZVuixMDcee)eAgVn76$|ks2Q$Dp+Ht^tX?)L_N zIkG+lPyuP@Fp4i${o1-cnDZZIU_TA^eo^_hxal9<{DQWV{zr|Z3y9LxH>x=x=S=z1 zK3w>Z`I$+Hc?Tk{Cbkg?ax9@`X_rKeRx$E@E|j;_&Np7 z;Xgra;KL6W+v%EQ?C~!wVqCDg`9y|+n@z3kJn?f(p(oat;dJj zivg>mj|5y~7q&v5!b$Gc(KfwGG^7nC847Q@K70nfknz8l zvN*q*ek`c#_3};`@M^%JcfvU?3be0($07gLzScu6XZ1!XiT*<^=zkT0^@#YG*UmuqNqiCXQx%=v!yJ>TH8GK|YW` zA9L9G5_ghq^!_sQaY*@v+~d`}6d%su#`weRRnwmJV5db!KiP~ed;X8t!MV4!^EwFY z>Xe--_jdTbWuwv0DTt$14#oHgIp4}Vpv{sMB8=e;SE2S{?~v9#I=zG2AFrOL6br^p zArhm3gQkcCE|?6Zg`{TZVi=6hQF>K{#6_BQ+b6kbH1#{2PYfNfwK@IP>cFGNgNql&U%6fgYt> z>YZ|a!kHz*nu@rauUYq}KZo9D(a+yYICHI0_f1HI2tA1wiZ7BH=p86#>S%Bt&f~lc zHL^k&kIqy^Phh{J47nk6doikc@4aagt#}h2W1+-Qu86>!z(IGSL4}_?s3qGziS$i) zg@6ln9fc_wVl?Z>=p%`8ky1LK#3}+mi0kgxNKv2;2QruBoN+u-4_yIwOIHVT6$LAQ z0|N;Q27NU>n#2IwED&nHmLrH@|Y@{)g}r>u0VH%JwS` zSjWdCG!wYHP_x(R`$l60obP8aI@Ad0md{{oA8wE`kWsPmC6Rn4& zXFavB#cJZK2V+nc{vv*T%c`J9)xYH-viUbJ)a_-35`Pnlp*3p0xWs@SgQO8 za<+mkB~Bi)Rl2NH{cNkGB~(HwZQA!cu7VC{~S9j_E2 z(!{7Ki-XVii*!Qo6YV#|r?RW?p~p*6D|5^DcaAE8vy=JKXw7~D&r@X=J1QHJ zDc8-3sN$2-+ee=okf%0-zT{kz!jgIj^f$$qNFd3M=Zt)o#tP}n9zId;K|DaqQbyo2 zjj2A6A0_%w12maK>S$dK{&Bz>P?D*xQqvh5t?;Di{q-h3^=A{y#kbDQWdBb8edg=4 zLEaJ4n3VuiM-no#UD$$G=lE%&=R7ldn>XHu_J?>4UX%8^6o*7BK>I5M_(BjyZ#|D( z3!iC#ql1C%{E7frexnN6BL#B^*eoFJ6ASrE>_;D$ag_KW+Y}CZYJ6iOL*N=bcLVw? zW3}_p31+L2n1}Q>59NMNJPY9dwgBthcuK+(5JzXEEdF^f`M_YSjq>L~_2xI~VYS`2 ze&0ru$+r3P50pBe?dfBO)u@qu?SC&@Y8p%dl#x2q2Sc&XQO9_?3BWD;l>**W?`>)JI8 z=F;==mLa-54wR+zHeyR;+JgX(pN1rVm4QMh&7rL_Y}2`3Z3(?j7D zPtZzgT{rDWSZ{sHZ4jUsm>DpDypBuExhrZ`-Jqe=-Msa<{eZ*a!kHr|=t%vTQbrHJuU!QGE{5l2mG8{mXCnQ1sVrJ9# ztcKJ}tv>)6+PiqPdNlM{>o(+;;vi~dNR~P~GeOTJEkE9B0mc_Y*#*tX=Cfdz@17+x1ZlgA%=62RNIz&ap1Ht`FT|sfbXXh8sCZ9I2ZINn?cU2Qv(VRH3m%D z)0s<|i=r7Xl=c*6y&6mT{43}(b}=H+weZkI{MI*zfYxSkzC&YePs1$|3Y2KB5azkd z5Wj^uL7X#4lv$xN4X<|>Kjyz{2oJ5uDZkR36`cKTzCr@?v~c3tH$*VlMk_!zN!6&V&|}u>VR`8W_;yl8B(Y zTrcKpoBJY-cN1J5r^_P9LK4?wb^z*AYX(a@L)6xkQ@=p1IpES_BrEkmMR7*m%Ujv{ z0}}QNQcjoB*CTAc+W8wJQkyiv;s1(Txh)UO0~^ewsfx3?q)raQ1&kAi5p!FO>r{jDT>l&dsWSRfwqMTjh5VU!7gNFPH-wvw~9z<@r087}^XDaEr;nbc@( z2OV6L#}XG^Nc@c$VI9I~E8W_Bd5+}auWg>qxzU?(zOwB%yM;&pCK|i|X(TOmS|<3^e}F5nSHFs9fAGiPau&j}F?V?q)l-cqSB; zHA`;ZS2eX{Q!=0399VsblFBz(Sw2{voU~HdASJF(2t5NNA`dh8Q==mVxKcF0qPW$Ea9!5Zu-cWC^_|OH`SGm=smt>b`>6R z*Sv3qS}m=;5vgG(tbDXot`WBNk6qPgVi;F%Z~64+!IyBqMeyYcqSebs!`Af%o02EGtSQq`LCiBeR7SbtV|O4^x3k}wKrTGZX};%q(SKatdR3B_+Q^=lji!e`7Z zx)B$fr{0L%xZgHG&k7Y~RAY}R&(5XA^7o(^7*jgAswJAwg8Vn?fg}jD*svpBQd(w( zx+`sdZkH68VN^*t*>uSj?!q8$<2mWu)Ckp0VC2A7{@O!Lk!wT-Q1Q&@;P_hls_8uAjINyr9u{cEfBLy~6D6D$e_i@$ z!@}`L%J?pZ<&qXmIBb|%mZ07_ zaGXn69UuCT11h}Y+=XX0=s?)!BUAFsv@`p7!>b_Rzi!sZc^khJ9vpmT$(C6;UDtli z<@_5+tv5w5Z9XKy43Ei+RIFwT$V<+}m~xqgq=t?1N0aiy;ALkkUAj-B{?*((PB%Tv zGNPGMe*?0;i<0?l+U^K&Cc6YB1lhWOLS1ryWGoS8NEumQ&I8+6$874J9|oF%vB@>{ z2IUT9M2cFeezo+CJ%AhsoOKOk1t1%2LM{LvEEw^D$Vvl^i6KFDt2TANs({RTuHFHo z+Qmiyt?f~qOyFtR08odc&$;9P+*lTwv@MYc;imz>mZhT!7isGvD7?0%-TLnXG6X1t6iE#w*y%GpE>dr7pDh(`LL54vva1|)iXr7xk`0l;9Tdk zb6Q?iGf#0 zEBC7I(~m!)?Lb6;;)2gqcq^@Y=`jSvg5JIgTFj1B)u=T_m5DIt0?@-F0WAtHSu{Va z!nsPizW)=B{&m2b@Ed6zFdcH1&S$D^`<17nBn7*kN3MWciqlmy@{(HBgDJL@y1Wa%0J4jzDJh4oO|( zrIR7=kN-_(eavcaPhs@6W}n#NfpUNAitHMa1^f1Ue|A=(+YR5cs!XR~(a%2q>1JJgRNEowGxB0Y=V=%lNt{BFyUum-Bi-VGh+7mh9=Ub(f9TD0hj1Wzfyx9Fa4`` zfv|cc;qlVD8*q4dIHUO2pY^T@MiUkR$ah^`i+!}F>d`H zIR#b?jO;zWM~2Yy0978t330)RDth7xfZ{^}bo}_#Mi%|~+jS>YQ@pdR@vCC@j|OzoUd|gAI{_V52Oa3QkO3)ZpRj;rMBAy3&yQsdb{@u z(Qbw`HK)ZoX05B{mk0he1}?3=UZeef@_@;u6u;hZ5kDPA!-fZz4ZgO}O5+bt5L_K_Z^oi!9 zl)9$_uK=ogV0%~- za$hV-om(?O&LFIB)|u$aZPkRB0Wb#&+ z*@n_ac=C0~`Eme1k3vJUwG$N$^CRirVA58ii-^CahiT{8vngcw9AC_h=<2B1+_9U` z=vtNF`(~8tl+{C!e2>@iZ}amh!A1D&=T*MuzH`4v;}n)`AMA+Q{@a5IOJ}0a%^}XU zqejEN^;GJwMl_JijWpg-XWoWfF=*-aW53!J$KlEkqf8aWGp*QeMMRI7dt z=Z~+0ikW3SN|k5(>#@MM65xsz7NqX(+1AgkRaMAWwV0G#D~pX+_EJ-Nl@T0D;zSGs z2>WByn&nWv{7e%@uWN3Flvl`F4g}zv#TeS|QFV7Z=*4LsL5LelQ4nhGM}<9Yc!_+0 z#n*z*h6N#39ORjNSDwiI90r3pD@myk?@+H326Tx~grsMCgy|v3Q-vSkrw!$+wDHvzn8XpXq*e2ZHnV^!8Z~?rmxpw!N)i;6n;7 z+i+axy}_qr+qO}T`J5$g|Sa9j~FDjQ$ zQp|IeRXc$TGL=~J7)m;n-yEihR(G@X$SLGY^i|XqH3?<%Nd$9mFT@bCz9SsbCP*9S zFwmsj5kX0T?$Pnap=M{70);{he%bQ1b7(6lp`Tlcft%yzUQVNxCw zV?sDy5-fSgn=_CWL2l#E;8+n)*8!t3<-*COVx^4`wrvKqO$qK@25I_mU4EJK#3!oZ zG1;GfyK1bHj#b)!S~3cS`OoH!wh232IRdvo$3GiRYig9|0?8ga(p zvx(-83LjtghE>7Wqa!U-fWdvKZb+K%j zM^B&Bw{UM--HI>I`sEB$fCtHPM)jNn#sJCt84|MSHF0>;+E#cShyCGkD)65Rs*RC| z*TxwZhZc2k(I!JVxV>P)&M>|F=lS#1iD-G~QP#?ix&HP0m47Nhb(l4xNNqzQUf?Q` z0<#-df+_?2Hw}jubUtV8>**h$vsqM&3mDAN${oPps^E?h~EP;DF7!6VGTeGouPB-pb#m< z=qY!BdZt)1SfQ{71HQtR+##(8ay3@-rV(!ue~Iu4#6JiJ@)!;0iGtAM z9FSZ;Y$;y|Eb}R%2D=6l*Q9p2hnV zp?mAWN7t`MnP*pCzFKN{`)mX?61_Y-w`#j&s%PnAOy-Mwu-@%*6U%(~^k*lF*LH#< z@X}Dj9cSSU)r$Di?a*LjC55@Kr`hdJ!qQMWXO_!B$1NS@u*K7*h64^ZW_*FmnOjm< z{Gc?fW!>M)4t6_4V8iR``y~xentB$jw0&0pRoC2DdI0-BcRkKf(;fjgra(wfg3Uex zE&b4 zc_N*VOt79ZE_yDm9};mkgeQu*;vD)BGP3Om&1A4S40;mACt&ZEPhh}!jQ+8J8KD2Bw@+tAa$%{;OmioI_ zZ}l@c`g!d(@?}Zf$v(mRK)c)6TNAF2BTAy8bM8MaUGC@qP84nBzKet2+ud0qjd8!` zsOR2TU%?2;-*{|yA|d|%ccp0O&e|8(_Sgz6Nqt)llvUJqpzT3^l&rXQbfdv^q`~^5$TLdrx=rK0|*ER2uK@|3kZmaKoKG2s5Fr_w-iK0h=>?k zBhuMmB828D3eqbmA&E#Yi9k4#&MU=;Pt1*zOpEkG(qHl6dB(l~<*NdpP_W>Eo`r zYnS-jHOdQfE6lg3^l#JX_@!9$wNF>{=dznuT#5*Y@}umc^?MJs){O4=sV)87^rnKT z{;oAI1--4+l29A%Y!!L+-+Utfy<8wz;y^2B-2m@&N#v*3^H0^D6|53s7qzzv zJT759p#+G>T1z_EU7Vs3&A3z`U;m)`LA}7Ys7-5d_?78E{ptb5JCSXk;E<+`ACH6g z0ecqJ3P}({y;e1Cn>Lm@sWDcv5w_~(?;!;XLD?j&oHdA^?}BE_q!@)HcAMNq=f)A; zR~Mf3W|tk`9#dvld`fp!t*$}NnFRye7k5T6ai`zCtExHbA`vU5HruPDGcg+4KBsry z3|M`7Tei-sV`bSBt)>(1$-7FLcKA)ZO%FXed%9CJ+eTf|X0C;}H-)sXGWaxnJsAtV zUJ!t~%<3@^H+_+~Ma-a0@ zUb5PeLa2O6w%-tX9kd7J$aj5}!7QcDOGxebKThJ-?;qyIs=-g({wl*c3Y~;{09=S! zvQ&#&`mr4nyv+q;#4JF6TWX0|THOY5+tA=OoN+Yj^e&^ZjHmn^Iwon`{7Q>Ge>q^xzU17f74o zP|@>yNk4-{+0DlzkTUe$? zf!-O-sqJO8^ofvZxw6ZEw=VMs`&YB~>chIW9$(3uo?M-SYIO z4~1SCW0h8xu7z?z4^tCPxfK4h8CRbq(%4i6Pl=S?R;tus`M!25Usx%{3_rxe-&(#$ST8wVIE- z54(zN(>vOaGb8T*Gzh+n>H~M+fWxmF6uDv4b@NAxtsfWZULE0T)39s3I)zuo#cdm`xJi#{C^ zYuig5)zTAXRvk4a21f-|E};!2CqBNnJX3^qny~oJ&i)5Rz2|#7vl{u!sQ>@gsDpCg z?;iQz-md%zpwTj_2f@{K;C1!`qPKZeg*&+RG8S1Mi4Yc)Cg3jxr2?oWZZSimu%?#x zOBcr{u?4-h!6M!~kv=?O=`bMK2(6X4jtqGZIanO&TbOFc)O(JbFGdYHRD^2#zMM0P zx>jef_$P8@=;`qxM8jlk4^x*Eb!zDo%oVO3TVVJIXp(FQBtYI=5sU$5FP3uHNcH2R z3HdPdLBjThrL5i5AJ|_ir>Sd*v@61L_@Jv@U;mW4_~XAKDUtMXx2|y^CgeA z1ntFE3qp+qF~Q5>bO&JvoVks7JDVHHO>GDeoF!=0-DJtkPZ@hI2+M|uKY63q?wNQ_ zH@|DF?DOP?Gw1C`j(hsS$MvwQU`YH6x6s@;ep!3DG-cP!hhx*s z?pHBiGO3d=rw9Ne5=LHH3Io~O{tWOJk!s;12x z7(x9AFKa>9JV3e#tFac96M#n~Glq7FX$%@oC$u#vP7j2-^_la~!{kHlYlOzTdd@b9 zcloWU^djDDI_G9rwkZHg_~&#B_AP~+c7u|=R^HAE;DU4}V=*+!hK(DAwe0z&C{VUJ%wNzGpX z9TPCvR7I%Km!u+?YDSFU+Iu7u*lc80?kzma(_=>@52)fSdPuSYLmMF@(=6NsaP4St z_u^aK@u)C-8(!c-8`5bRHWplg_lW)}&Bg~qGLyDK5Zf*%ZzT5uS#xFb3rGPVv-U_) zqCROcPVEg*GoGQ1fL8gNcukTa=s%8ScV6@gsve<&4;%m^0y{I~$m#r9*sj5fKf7+2 zWF?@aH7E^Xjf$v6xus1p`1GP-e^$p+}ikF zjOm2Oy;;Zn_1g053*BFrTkfjYR2p@7e0HhM-0c2BnROAnwRf;mZ%gh%t`(%GtpNm{ zins%fj6qkC08|L-LCPyv5+bl^BM973sXLH9!m3ePE2kDUv!|5N+&LK4gi`~PJJ&eC z`GKrOJWARspk{t**dyGjg;6C1N^gZPydsRWHNh1U6YlQOTxS8Nk5v~uV{wsAZ5f$S-fWSA%+`vGfipOc=paVO_!pWrwjY3NV+V zBjmlt0m}(lnHa^TOfy+)5IpF$162Gqof}B|;Vb;TPDfrh*gbN&JK1Sm6r=ftT75Bb zG274yMQyRmw>)yTtzUHX{?4)Dg;mGKW(wVR=_MtT9E>;9#6G1DJF+zI8mx-CxqT{E zJ_`iWSgTX^#kt%7gX<~l?v%HqU4Pi0Z(Ct)nd7B0;VP91#*#t0Pii&~$q{4s3+jH| zR(@~la){shZd0j}!xe9#b$toIw+^!3Ok5S!G0Ncd=D502#?<4)gQph~B3ydSeD{Z? zPqn9hc+VK612=gwncQbi6XX!Dh~lJ-nr{WTTL8h=f&uB`WMnhIdqo5C<4)YpT3Aa! zA90|}0Drq2RL3Yyv}L#rA*@;g#cZ!q8y=+Vf;m6>PWqX{i525CRTejBh)7`jDL8E) zb~bqx*8wNhE_Nor#cyZ;I5KX*ui!r0rTI)9qBjqqD^P48h625f1$iX8I7ku?$KG-h zV-S#WP$JoL(W=jjp~gMX-x)~+xgKYsEE_|Kt7m&VX_7mkwWNrEvI*L{3Wv<{7JMRY*ot+;SU*w4&t7ORfH4 z+>mQoK0C+CO^ftD8c1>i@FBSdSDN?N%Jrn^DWv96OwU|J`ZvK^5 zQ`^y=(W@&icRD|)d0Kb!Q+Q#HMc9{_2XHc<`gRNu*{Ue<^in`^n2IKXD%Ntq+mJ-7 z@o0hGy86Dx2M-NB0f!0+NmZKX%3EyiRDiwrfs%nFuD3=ErO?~F2B zxiF}fcuM=LOzUOIL0U6s|0GKVKT=r7lEwW%>}m3XvOx0%n%9xYr=`)>V%0zcM#`{G zH(7b2V2|+AuRK6^&XMb=4CkYg&0`CG7NlI~VNjA)!mQMiuoRRMQG2Kjtd1lGSi6MB zf?7sP`^%GdX5)cn*YN9R`UC|wBj?YmWVxC&*w&j-LpLW%}k01X_sgARIT|c)1qGR=_1hMvq07YQV3Veof*Iycsea! zJB$lVZLxGTd$f_llMq&jv1(P>le{VSSXSTavzu$Q zzj8GfeY`zzz1zFHg8*F$XMmgcI)pA;K< zI!!8$uvgpp*#`dl;!b31TF0kp6=l^EGFwtxy-?k38$JoD!vL8`qJ`*Af`>gEDU=lj zN(*qtBsF+em?&}(%(k!we{APX`>lNajX{8j77+kGd4-dZLJ-8X<^e^g1{VDM4!IZ9 z44|f`dc1)YtW)7QVZ|2E?8X<2QB7JN*PO|o>K5&+Olv){^PS4>KF9pSftts5Kk6;F z8QkZ;(RF9Lzh%v+OGW=q6Lxo{W0pa*<%V57jI3f82ewg>k@e1_Jidk9&YNzQrXXiw zbE$H=YE_Qq>mv0RNl2CDs%T%r_|yTRO$y10TdCJd)&$@p9$I#4$v8LF6r(a8$E1}L z!@LBaiUYNa>0wKbPy8bzizh9Ok$h9jpJK@c4A z4dB*KR|-5vbO+kdD^Id&e!?rWMy_f92>z+HL!viOl=zf;Eka2z+1%B1uAL+G4EbrtqvLd<;p}~Qx848_4vE7^$xmC zF=u)=>~_ns!@8v}-PJTWstgb``v%xNCL`t6l=Oh?4W2JL#4byfMD7x65|fII@LNt! z4V*n%=y=X;Wk2I(*~8XM-L0LdnW?@^wNysp-MfV@F#*!OU4-@lkU+eO2ev%m5~4$7 zgCaifBnW5-qGTzBtc!rnB}-b5_s=%~^Tp^OqL;W;GsD@IR`Vu2SedC7H z-r@xNW^`@tCFVxyWkQnZF(<>UoUsO~CDt^U?|8s~l*(saxG@8~L^#%@km%ZIf!i*q2M41>@@_bouQdx0 zB26^q`RZcO|1sC>w{l=1rI)y^=wd7HBfs-vGmmRzwko?Ssxq-D@GaT$T#9y`X0gv+ z(w@@vW^PWLS?KXHtn#FPZBuEfbVmT5N)p<|{VpP!4pCGOJFTGm@xo<$Z}m)xzrSvYn9I!OaeA1OUKI1zq{{-(EHTQve}R)0*9II5S3KiA zgGU)Je7P-LcN#<)pvLspgy%Fp08qBAdAxiZE_&LP4-MLL3Dc2xNc#N}3qJZ14lgaJ znSBF^Zov;&ihu8tI9Z5PXe|zUO@jnB>g}9uR|7fKU$tDI)Qni3DL}y$SC4#l49zsi zDW^N;8*Mlo?!Buw#~@n2KW4nc&K~8eX3+Cug1h|<)_NPUY}dP>9glY%rfD4=+@9mP zKOZ&hR_>u;m$8Muub&wDD_yfI`IvR>dXpTZxR#@>T}^IHP6{cvOFS6Yj?mE)NE+gS z4`d8kh&td!;gu$QbvSKibYxbQ7}ZKp$7$wDZ+~OLy2N_mF_V7J3jq0P)xk6QfPIm) z=QZ&At|A%fRaS5`FrN*PVl451ORB$=M%H}?<6R#Q)G!o@J*`W>l%kRwc3cpy5GW=hE>a2j5gm?vGq3y z(9y+&XgC+!U@8WabzPo#ywtICOQ80R_p&{RX}uvw8{Jy?j&}@P+-`I9>WcT1r~EpK z&jp>%2y`LUte+P+t`Cs+(b-&tT`AF&mf%doENKA96x#mY2ApcE2Aaz46ZVKM0By1Omd8^>S62Ze5en9_ zk4PQ#$U05ZDu%t@5CK1lBDZq4GkbtB{cbcRS+1{X-y^;*)=|s6xr=>-Zf6#9wAFF9 zgNflcHDlp2n;Fo_~+98n9UO})QKL=y{FIK zoooR=vOfdxE7sym%M8EBfmGco)?nud{(QI*6GQGnG^P2tjmO}`;8vO(QFTCMDX^IN zRoKqAz93$UJd5%KL92X?(;$s&UIeheWx_3~LNy*f&8dZ!9GBYyC30%$sq^xkvJ)U4 zFbs=?@dsh2dt#dw%%F{n^agngI1>IX+8Z-;r4=v7G$#2;s}XeziUcnt@StxpJ|JnK zHqxn#ykM;$MckEy!8t+{pE~U<-cKxghF&cR3>%>-k~<5OgyyvZ7C$JDM?(`Mnm7vc zVHX z=(#6tpBL`R__+{w$bRwcO?q0?5g=X8K0b_75$-JA)l-vjZ_V05jVAQ5r9SoU?DC_9 z)~tmMR*(@(o^=WuV)6B+r^Ne7;a5aV(Dze{{1e~-GAS+b#yZ?@UhA#6jjRAq2~p2z zXaGc~QsT1c0EjTWTbc(%(ZSgnh1&wS)JOvRurV(BJU-~D7qawG+@k#hmFrMYg4GWJ z9Zy=&>CSZA1_5QpjgMMGe($F(7?|-M!KV%`o}Yz|`^I`mZ;-UW$-P<>UoE}Wpe5+$ zi^}_J#H_bh_^~qq;Q@t6$5IBmCSkFSs;bwDddp$&fV(6Km4I!_sfnflHLZJlVw2$E zb*`bOdt!^PwKMIL;LSVjA5QE({{9d*%&oPjbfL7#boAvb;Cy0f;M)h$gNSJL-`C{mW-^>)Sk% zPmaDZvdjob@9^2awo?6QmTp)geZ8-b*)F@YSzGSz%o%re8{2=(^5NjloVd_Cd-Hd< z|1?S0k7A>|GCdm|USvaeCJhBo+8|X%4A8ucIL}-u@e!_g6eXX;$MgX zt(G3?{!hE{L9{fqibSE1+-=#`k`UHndCGl|LIJu~&}t||o{;f4VYo7$XKd0msFzL` z7H82`6o;7?&eJ8JEdo&nFtJTgEk?3)Oky|-2SmW3oV5_!0A$#2BEViHgSzcX4~ahO zB1=#Mac#kMJ;2V5k{Gh!5De^_hv)i1Ejl2L1xa)f8;K*nE{u6kp}TF2sOP@U6F;!7 zgoy=~NyGYw{-X@>%`H1UpCBF0206@H!q(0+@3Mz|Ci_2RS_^ic-sYGQ3Ro+~J1$qg zvXfW3(!T4qAm{zAb`6)i8n2ss?u`3Cz3X|Y`1=0SH@Vgjy#}CPG=Z+p-@b|0X#bh) zO|v8ru0{rD2Ikmk9Jne3e<6hfazi{#O}k9PXYN^9Z{3-}XzAEik~0EZ-?D ztH3}bg&bw(j{tDK5k`Ui*f-E%$faq+7#@{^{2U6Y;7^7J{H@yvdrrv1%L0C}fo3O= zPZ|lQQ?QCGix15 z;~cN@$HBHn&e~a=91z)ajp0M9kL_FW$gH*8_)}%huV`h@+) zaIFjhB8|=n_{k3ZvpbSkffx4sci0 zi*du`7jbPfI%3~RLiIfweJ}(ZG03VufK))H2e)z?ATnk{$`bvk5wzj~fh9ns-myc@1&o?qu%*Ln?f+fOx05U(*}bV7e%X>t11ug%#qc1$#lamDrh`v zeC&Fs&?bpKqtDx2oR+(;myW!0!B*v?%FA4ut$08ZoLL>(P<8WunTDTk<32qv^){D! z#YUHCZB0|1e{|>Ac;zjiK(O5CPhJj4+Q}F}5DgG(UIL$dhD2W+d=h;>pOq}pDk5pu zJ{1PHa+HYX1kLe!-1^>zSRtcPTZ_`D=B@|@n?L2{N3ktLOEte1cciM`+}vCASr@ph z_vFrcu;ByCCT{>TVGYvGUWtl0fI#vRP^e7#i9tG*ydLfmVQ;jMH=ZPKffGk&2hlFC zqc>Q$?kTZO=Q5U)F!1|u{)Ab$@u`Mbu13zxX;J{-U|A>MoJ$qVIm0?)TawKqVSh3B zoY%ln0N)q`=ta_<;X|yo-D6D!vV9F|Wy6v!U04ON8C!6PShp*vJ7V4m1rmdIhSwB` zv>us-Q6H%Ed=!OY;7uU=9wNg3FoA4+472!CPOAWYN8xL%7t>I9H&JDvHS>VzX@NX7 zL)!!{ErUH8nd<$z!t8D@Pn1HapG+_IhrnCKnU}X*KU;S{X-?lCPCMq66(+YZsBV<7 z@&$Qx)uYZO>Ob1IH9OOlpWbucX4E3wY$A6;XXbXv-#KsRv$uaqKD4A#9;jHEawMie z`<~u%zXtzpp|9KV{V#dDB-lxZVy7KGyD9&iJnp9Ddirkg!rMn4jop`tuE-i0XWat}oQ+ ziPaMS9AYDSEC@bt7Oo`nhBxwPN$cPzZjXe4fM`9FhHB8`IoLGCwfx!#w9^9k^=YPK zJ;4n%c`b%(>mP!W#o+~TBa{2@&9ubAk5&!pddH(9?kH0H%P zB(RORVD9x2w^iuTiXPPAd8B`kR+Dta(NjQv{%WPbv174?pg}@&ZAlvf?}o+MoJUrG zWXwO{WzOA!nDUdFvXtn(cHXt9K*pP)+&XgF!__bD1v^$4>>4R_$z0=A9lgqKRh+fTw7tIvkQmXET6li6eTY8UCrm2xHaiU!Bh z{t-P;n}dyAs%<`Y%wSiBgL>0lpXv%fo76@d#YDQ7S;>jvKuU{q<8i|QK3N5PqJc&Y z3gR815I7K?+H2DI09PsYmDowIgL)D}Q=-%Ws-++iQ%g%~&?~V+fQJ`=bG9fA?kSS& zhT{eNBVE%AJs`W@hOXH=o4D;X);MDm@G!fDH^1=ybl8|JRLDmei&uoroStnc|WPnD54ON$V#laEm|O0qNd0<{AILM9pQ zHBJMN<3|zq?lo9hOiS;Cp;s+b;++6Dl`)243MrF};k*bTp4+e#-uJw_0dptR!a_5t z!DA*D_-nEB7EX_GUJ@+u;5(&bW5frD5I4Auny8rz#-2e_1HF{%2MAnx>mK7xIwOR& zfOU@{QKIw4*r-d)b#<(I=F_1&M4J&7H9E)L8+~bU@o|k8CFM(1Waq@_f}VA@K>)cp zg-$7&KGVS%C=qmcIA)i7(9M!cgg(AbCRd{il$Ir*QwSwCl&j_P3s+aoyPUH+6|*b; zSU1}qom%R3XL5kP@Azb}M#`o;{y>hwFX`l&d4cKKCntn4{QTDiN*XDx#|_%F!@R&E zkeBV_sS2&DB7{4T4Meuc1C|xEV0cm{DOP)-&mvIR`-u;MMCK49D&E zCHE}ZOsAKVJ5p~;)<&d(lFL&bb$O^ZPT(ODm2k8@M&=7v3t5!tMH-uI3Ve47s8WmfLIEP z87aq8{ImqjLi4;Lq6e3g)bOLo4*O;SzcZ}v;et-$OP!2pgQGxq`&HHbnDK{4FF!Af z?D+AnYNcF%vR(DdqQ(W20pAlFvFr8Lr(~_U8P?P0Ld_N))uqG~su>+<7gW=&8GFr) zI@WJYOWBl9bj{xAv~1hfl%u6$4cC?zD2wvcE5%r2+jGmnmm6wykGTS||a(krI3Z-!dpSgi^K?k|A6s+m<|T<~z%NKl#Eyt2WYk5&T4 zSX=+KQnO~ng;O=-qz(7p64}iKYkQ51YqrK*C+U?roP4|#TCRG(KnN6^HUQW?dCwry z&5}d5OU_7hk?pLeJoH7sEdz+GpJY?7snZ6M+3Q;Sy@V#vD~^>F^0~4gKP;m=aB)F~D=m_W_FwhIP*@{$&KhJZakjN!jr1mS zInu?c8BP}P0OxHm_#DtHYtTt`(CP+20-koms({61DZG0Jc!6FC>RXwcdTUExZlP{J;hygsVF@)qQJRowA79hst*Bl_e^b6br=+fMT zdQJF5oII@HFUUBF*KTmS1M_+2IVE~c?=fxonpa5Gh!n%6CS#SB542F%N#X|(RXEPr z{oJ+&6^OTY%jcI?3->OF!8t%zCLi3&xkS0|b*WTGR;Ot4_6kp_;MA)Tm`U>R}SCP5Qjkb+mI8@wE!$_nBr!-+n^yY>9NCS0T%665@A z`A%~1ETWX}YA5udAUL-0#_-so2i-sS-09gC9`xk#WR}+UjO@`)UH3ZM)egIy*LA`CR0T2bNWA^I8X9~6{p|6UZ2y!lQ_q^I`1q}m9sb|3{V&G_aPfsE=wyQLN5{*c z%b~P2Y}tCdh{3jHGkMKUE5=?5t~7t+FG~n?wadghtXJMz;lh5zoeVHMp}XH6wQ7g&m?&3Fs6-DEX2`XTfWY8iQT_iM zLBvAr+k|$>%e~bI$Z=eN8W)hOPyhFR3GI=P`;PU0%kQw9kXH^Y?m>(c)GHt@Z)6F6 zD_jW$)*(hOL%6XW$*SGrS ztAsa$V-p(7m{wPqU#xw;%6#s>Fxl&DMQkhk@1bsF3m-cfHa<3bie;s9sy|$xe=D2? zRM2)JG?1yCTLPL2|C^vzEDFe|2`}J&2Ip>_U)U& ziKWv}?Y4V*4OgD0ESu&4Dc`Y$uQHl=AQ9X-g_!Zrp)vo*%f;p&AuxhG`xtsM|1ED_?vbx6CwyJJC$co-jf$cLnMU7|0aL@ zMGCc^-}C)X-jbDA!XW>jgsi7E5m57lX%y-mOmD-PqipW<&{ELS?-wZ9fHGUHWrVU8GX*vHkBE*(-`GH^R z=G?$rF;}Ma?an3y?tb181^(LMl6_|(JMT((T{B!HU_GO0Vwdrpl0lijW+f=rqSfEB z?}AE_h1y_oau%z&B|a=+%dcg&cL*Viv2o^wx_5qg-2bcb^PZR)1N&D>UbU>Q1$nW2 z!GfE!o8tbm^JQf}mX&2JKeAosxBs>qCjNU!|C*$tg<8o>e8RvlGqLZC?&a5d*e=)( zPW-|$iWq(&)_HpSA?Dv(@tfZDZ>uTupU&zUQQ8RW_oX-e_lzw2uiWwr%UYU^QyAy0 z-^Mz5k)}ej5t@6NO=apKNmcXA@}g8dmHJZ?Gtb)7e*Z|8WukW>(NjmuUam5#KbSfBV=J7Yz*VFNT)IoGklw zG1S0~SLAp3Moo@oS6b#Vy>=IU{nE|tTA0HWJ+kQhMYbGA7I=pn&rO&Vq3kdg}Mc@9G}u0I0H6g%hMcL3G;1uQKOe zv8Mg)zsk6I9tTRc9}CVqTPgoA2U0-nh&2Fex(Hfb#qWbU#X4M6BjW+|cOTDvAEA@P zPW}K*M6C;19I8u5LmRe#uKScrmfY)TLp18S1JV`W66_b2FkfZ18XEMArwQ7~CepKW ztd-QOW!5}NvOPw76%r&%GYL6srV#ix%U~(y?kkaa2Y+c};ebzORYIN>Fh4N@v z%hO;zy?fJwGv|VqDLU4M!d`9$o#^Xxj<%2Nb9c5_Tl9siw_tQXcIbTf?5&`EG8_g$ z+CG*BG(t`XGHt5>dZgZIv26kY+xhp0Q^gSIPAE*#nWX~q;SWrHxmXR9Ic{m9qgh`t zn9e7=sBjR6LYUVA^DR5hlH4l#?n#FA$a_2oP5)-NAST{PSoDXRjvy^BSmP@w?=gsd z``oAhqk}z(a5|uI|4U+!%m3#W%tL(DS;o>2g^OSXFMpPZt1tb@8{@foWuk}ZV*dPZ#(j>qq<#VigMY@^e?m?Blq2U)CV&FOhXxjIn)lr; z{x~D|IO6E9G9)q$*ysramf~BfGmf zDG)8%RG%xZ=_cz-;(EgW{^;-Vsm2v#ONmYGg)t&O&HOqq)yq9=>#sMf4s{)Jo+Ja; z{=Z7PpQAl1#d4N~K3JH;8IzzZ_*p>QaGBHp)T9ae>?{cbj6F_lniMB-u9$mdcdkET zxA~}14_e>iNp@9?cf_musKYl5c3XR@ms{^Xy+Ysk^07F5%w?Nz>g%Hg=f5Ld_j~Gh z02Ft1Z2(`1=;v=5c)jVo5+9u<)Op%vzeeHy>%HZq6#HV1rapN(u~|hE)_d7f~w! zN#)Vn1OlKesUl)ZU4SO+wXz3AX)P!GJy2OiDd|}TS!=G)4PtgmTu-CqUfwOUvOPNb z!RKc8+$6UO@-9tfpE%Q7ZaiB!Pu^>MS>)l1J}Z@ycFZOFd8n z0xfvWk;RYSBkcqgNs!Z))D__zYDs#1OAwfCbhlZSw!bmK+(3h9m zou=P9CRt$o52;9e91t%gWaGJo%r#J#4-8HZ$z#dTmv9@2sYPSwk|Aw1O91lnUuBHT zCzrO09^s`j9|>>_I2X=c+gkvNg8QyRh*l(8A_DO)Yb(S)KwAG*=Jq22m;(9ERluzc zQvW!29)0u9GiRZtA6~KqQ{c2dwmlx(gCv5tkeKuEUuHlxoqXiaR{HxFW|WT?4Sx74 zGr#OQ#2t|TD${XXbdD}v0p0@+Z-(ZE29~@eg@3YE-@h@zqsylD`B#~7SuhaxJ+-eg zHyfwtoR(IDHxUd0|2|gFn6LeE;JYdA{j-;5GHz4Du6&hwy#@@0;sdt8?!>nrY4aK& z-OsI81VDob!bI3-%6HRT@@Fp&wz&3RJL|8V_3d-|YiIpG)n?%VJ3AMBiM5Wr8uUK5 z6le)^S}*Wl#W!2NXC>FZ!Za(L98`z#Li>Hl+rAUs+h#ZS%rj=5##?m(a?sQLTKE~? z0Q(-vZ0)4#KVFHJE4vflIjrB`bO2>tx$4+q0E9OyZ&P&fc~jwT;F@#DU(f|t?MzF% zQ>nh?!%)z*!+X6@N|pAA}a}LfXY>){kM9e)S_x%ZVpGazOG+D4UF#W=QmSs7p60t{hO! z5zMt-UA!856)~$l^dY`nzwpKjuGjEE;s*emnx+lPB1xbd2_|BJ!Ry$>yn6eo#kHOr z^qJ4^R%|J@G~F5>TK&@BC0a1=zdtSe%$MX<7Rj1tlDT%+cMaVQ@9szz&fi=w&GOGI zbc_iFU6lOu**caBfnE%w@{usNnzD|wHD&g>*IUig(x|WSZ}BxKsT^%3BoGjReZFah z{_aYGu@#2l4~;uq1#q8tAZ#lrT)^5$6{=AZwH)BS>X)8;uK!Q(g!Tg-?{%Ir$YMWg z1OE5GB$2wL6@-Q{hQKj^-0x__4d?-M61}8^TMI1wh!EKMU1|95FD-ec;hqAgS7`1H zfMZcqB#zQ6M9-VQ#0&g@!|vcr&c5IP7yWnSHGX~zX(RAO06l<2Dnoy~qB38roDdIu z-u_edfVFuHEm=U7^6=x~*PxLG;IZ>reViO-2=ZKd3mQKR9{_$Rv6Ud<}r9DAU0mLaJ}dPV#Ha%97-~{~Ufm3V%lNp61Gsrzj<(!kqX=WLig5V~!1gi}^ z_n4y1_m>Fv&Nc)0S@T-}_tNP|;CzoP73d%-Zz+iU3qUY6B=!B`{gL+FCZ>LO1#D~T zUz_T$P4#V`{U@91C37tR`D-f(u$C5S)>)5d+R|_v;j4(T?2)H^(Rl%Ur%PmgVNPxS z-QtoEO@-0fH)R|&+*YqoCX=g+A zpO>^)#BZ+oMmbWUu>ZfzIHK%9lQ;>BXU}8N_)GKeH3ta2j!#EesAC}>gAI=ra$06H zu_0Vws=V6Il{Xem&As({>%?eFI3pNe{M=yPx%y1RufEtJMAf4eTG9pa152;~14DMx zEDkoJ?tBUCk#|#fp@H`B-3^X)_#cu_*KTz#bulO~RI$F3?SJX^yWaKaz1evgy`%=e zsN9iAv|IDhN=>9SpKN!`=(MhZTc}&Hqa*RuUaycB(V_P|bj{jhRn%0G)Z0v8n38jZ zG$a*jnw9J&f3xZeHWDL728b=}5jBWAB?OjmS171mxXsbN%z+Fpo9Xmb<`n|bf}+04 zRGf2?NLzsAXPA8k3@RAY1SKmHNO{T|^6}Dj;N~1SPV&vZYf@oPf(8gPawPzE#U9|X zkTbnd*_Teqmqv)o0pa6EK!VpY1kQ5B!D}vw& zFv5g1V7%DQfBKXK0tl07yD*YHAUu+A#=eOBk*ZPr+@cx?Fd7Ehky{O2^A0L=^?&k` z_&<9JQa*;C8(R*%2#NMpCQtHJ2KN%*kEJ7I9te;IZU9C*wHvtq!c^k>NMi_Tge8~- zanc+_8+%JxYRd-3`5gh#oFibCF3#C>nR;|^1P_=dUuC)gwjDg2(E>@hAV~UtwU!t+ z!7txbLpFSdkcc^n80?p0pJ`vj>0qAy!bSm4px?=*Eooo=Y=@!$^da9bHF`?h6|7Gr z1c$vMu_onTp$~Qu_CQT9;Lfiy2U*-$M4JV&5_2gPGIKJhkY4ovU*9My?;vUw4pE820Mr&UZncE}2H*meFH=7n@x~$8MS% znB1Q1FMKt#y|&!dY4CNqtemaGS>G0G=LpvFYyMH1F`@o?yIV5}{;q@mLiKajj0eTu zxo>$P&Ut<>YW4NEKE#FTM_Jo`i!?VBf=KgQ|IYvEKb|Z$OhDSAEBhW;js(&j|d75}1ZGqbaPVUr9%9g@weCONMW!ZB^uQYV1$J zK~yQ=WL~C)e1W-w@vky=qpTXOfdw?*7d5kW2&W9O6Zr6Qyx}4=s4%re1(nm^#%2akRNw9`y}j3F!lv&jZq^BmgGsNO z7t_9cm2oF~d;;l;-=@Uo_o0O){eE-t!8mF+wLC6ixB!eK!6|%V5kH4iNEq({Uh22^ zrT#v)0lD9AF1oaUE=If0i=Se_NN`I9Lp`4$Faci(PyY3`=--ESPwDr2|2A8=%8A9e zb6_M13w!J7?|{!=s{YK1{rCIge;=EV-tTw+ZMG7;0dgA*MLZcF;q(Zcixz@M$^Tjl zGjK3a$2tgu4+liwG;i}$+00pvCUjyV*)D)Y9fbWmaY9DBBSn;H5ze|$@RDHOJYKTu2s0Wy=xv0^2YwIwun%xAN`m^3)kH04 zI2q551DnAivZZ?;k0>$ZyWfAg2 z`-B!IHF>n~$}QDT8R4ogRjPM5DsTT}R=(RHvJ@XY&DHg6!cOMaWCzN5g_ZwQ#;dw^ zYMXY(4)qMTxMQKp2KH~8ib)6g*4gXdd+kV`bTrSN+%H%D>a!nW%V((p#tlLHlSE|sx*qG^z*o`Hx?oKjzVrYe*L=E=my$WcpEBJYUz+Nh-y)9Ai`MDdryV&-p_KNW(^CG^( zK2rj07z_kcc&rT5yi6V29(*u?f_@PE3>x%k~cFpf1Y3qR~7*qMakT#uHNbY!? zb)nJ|s24o~1U&lWZcV*bPBKdaDD&FD_IHTs+>Tn|n)qCSZ1WHy34qEyE}b^LWE$>q zV4xw8yVtvEFpC;>&a61=*72)hSZ!6HTcO}FRc5Ah{jj5se75zS-ZN$SyFMN*b4$S`du7$ernXNtawqqvKQAIoDQ6eD5JS(YDrKDP zl(%qnF1>#ASr;R(hdw)yA&gjV8GZlDFX-jT!6{4wAh1!>_AEkkkQ63}XhA14Evo_X zg*=dKl5&-Y2$E}W3IL%|YHAqbM zglk0^ZU}AXV%V=$C7_z1(sMyKsEJ5`A*f#xHY7VIZW82cef0kp6v*|mkUADwDHwCG zc0Y)oF+&8vlqDk$gc_Z-kmbh|^tl?D8w>6lmz)A+cxVV+)^K22#DoiK&jbDDR+?RiGuxd;n}l@JFTV`uNsc(U)C#k7*J zM-J==9pYZ`Pq}z4#W#u(iZa?mWVgJ#5D9(Ej8mV+t^%eLh*6a;E2Q3*VMB3l+L=~^ zO?lM#R@DtNBujFZ7oN#k@HWU5|utx`xX{K1VBGjJI3SU zvJ#2fG4A&LdhzUM){pYjv|9Msu}BF7X=S0^?;^=+?BX9qSltk$G73zAp{Oa*EY482 z^8rvKissKJ>l-Z-=`0hY? zk3^NDWFM&0ANSC8_kXgLg4nj>6c)s!V=O^TJ64nMffctGXuW+OH-NE&z(kT2s!$NC zKNEC5QPvU0e;jFz3@9Z8b>i#eYQ+xiq?N<~p(+r#vwK&wgt<{edy_$PF}ymjiQC|# zVoMo7T%**JI&ou$KSH=v%vwSvP8*Kt09sHX;;LiAp#Q?-ZU|GHPegMm`=HD_#joI! z{R1Z<*MgFnUAR(;I_%ewwVH?bnHUerS-58#_?-lja2kiDP9C~P4X;H* z`M09A-K(r8_j*ax zZ6C^?wlCA^H)V6$t&h-*ht8*agc6?qaw3(6qW%xq@U=U#{+~BJ;{O|$Z=Qwf<2E7nLB)5=8l)Y`Fjid??^WQhL`;-9vU|U*iYLPmf&gz z2cUuyw|%$)xHu`CuoeB%3{+_v&hgpP4VQ$Z6>O7qUwigsI?r*VFo-ZmJC0Rm=8bQV0*`QTXW9l=;(;DY4!2; zUvf-Ln$?cq=w=G?0nS`fB7)u!7DYr-oX=j0QSs^+5WuFcC}r}EXOV{5!d(`@dkwBV zt`Sx~Gjp^&#T|?bnrwC0ukMAuQIy!_mHOoVYS$$FhCof|cFk{5MV6Yw6}Glv5B4Gf zQvAHE6f{h70fe9V^PAlyv8)vX$c42q7)de~wB^WNo4j0l=K(Sd=sG~CXyZ^zmtV`h zec4NeAbGKGmZVTSDPvCcFTM}j0^lotp#)%3=9FKI%sgujBqshgACHG4Wf6embIXE* zz*{S>@>Vj%lQ0iZn59TRP=*+kLlUr*0j$CinN=o8_ovvmep%p>G{xu2_bM0%fmne< zmEsGy_mZ2`0HW@kycqjdPaFn55GeytMo$3Qw?-uWiS*o-Kcd(Kn!f?pbhBip*-O6W zeZS251e!TDpSu_sFny6MSE&V65C_sg>_NqjJkHMofS5E0KI@l}iROu)fxtk%oS{k* z^g~QgpWuZ3)0EtdjWGsknnG_dMr#an<#z8C)zz^$K&%yA0EE-3+Bp2ewjMt zUqS}_LQRW8hb;j~pSv*~blKi78V!?14qqFjn%DRR^Ioi2knrUrGVt8&tco|t1v56F zQ8iJ$iu}*Z@Y~K~|N9(*4_l?k9{I|&ZU5>xExxQ$BwY+rY}#3fU-;O&^q_VT%~B-3 z_@b`S{fWe(%>41p;qNo(@b__fH2;-3`|}uKTCz#c`$1C~D@naqQTU1E>4~AJ89IdDWmBQO*+wxZ_REhax3`xy=%U3 zx?#JkReCWuFWfTBrzq*^)H4kuzPa|1gc564ZS*fe%H2JOZ~jtYsAKQbU6$`xFt16n z!)yS#KP{q>7^I0kph<}X7qgd8*OfQYgG!xP4^xU|_#v6H;MKm#4xm?hx?UA2xeP~F z!HBLrYDyF-8M#)W17Bu&+N^94$bCIHT0MDZN`%_srQ+lvV9GiQ-%uzk3+DCTQj~~T zp`Mq-5%#)A+$Aq2Vxgw4OF^@jr3k}WR+-HGc|CsIXs1Lu5h2*v*b?@F37UxhydS=@{7f>B#%(OX2DocwbIXPgRod4C*;iJ- zH^{DTB#_l|8$HeT zCWKr@Tf}DAr0wjHu0Ha~i0{9xq@A^95&vwFDpLb8jJel{>f#ch1Xvo4OW~<7Rwdc&2jG&A(9Ktnn6{+x&urR(boq10NF9@z1}hcxH%GP zyqsmPfxr<&9ol9Qv;52(OPF!<^xck>&%Gw{oPf7$pvHE{% z7>&6Yq^pbQ{Z#XCFJx)pwTJ5IQLE#5@%FiG-!}f>an78OdW#5T@1V-){8tVcG;-x+ z;<=(thB(U#*Qmf;k%rAJ;u(z|o$yd6Z6e#K_dPmX*R@dBED>$*kVnnGd7GierQW;usuXJsw|0XdeMQkPP@1&<( zClZDk27N-_M$j!Z-^0`(D0Sa}!*Eb0Ez}aB0%HY!vkbl3;rbcBExugz{-B5x(#=vN zam91&Fa4vr{QlWR!KXY4DydMJ6IBr5V{N6s9V(d0^@b+XQKj#Tew#cDkBZx_%P;n!T2oVf9g~kSM@UN?ALQE49k7uo$&tCNOYv>4u}36K~Q{&+wN@t z7@r1Z_e?7_Pmf*N{gwReOLdtDgzlvP|8uvT3J!WI>Dm0+^@i}+<@l~cl85Qz>TCSB zMJ5DSo=e|_(!i^_rW?7jxKHbBekEh9)QtX%C$i_~Wq-Z`&&&V1O#TnJO#X8?Y5P}T z($T+A(*Gk$x-D*dK@lmn53P6ze06;b^MSDNeJm|5VWjhtS0~UeSPs{UO}wB!>Xq*Y zfeAYy%cY658t(1#-#p}6V%337%RN**?89XBEBhY!CA|9G(_F_2oQ>-ap|8=FLhm`o zEInD|b2C)<{`QHP!*rZf$G|P|s3$f0&Z&`O3$M4ovKzc~!C~ZVhE2VAG(XI(%APbv zd+15Ead&)u(eF;;&pnQIoG|>(;#81Xs9wFj_{zWJ@%YaUDLxN~hX1~G^zZRUmM381 z*Zt?q%8g)4z` zCqi-W6i8Qi<;DD)h}jn*vwy|oUoD3Azno0@l92g-J)!a%tAqW+Q#>ipi5MLRgb$mN7wfq(k1 zFZ*hM)E1Yvm?3ZKvZWG=>uL*?7o-<_b2A-(z$Wk-wPwww`+#CXBX-UXS}y2}d*%k8 z1Pat^Tg}yAD)3Qufo$+0lsa6@dL1(s0B6K9!;mwT=%73($lI#x$E4! zovjG1D?+o)ofZr9i9g+6-0qRS-J^gRjrjo}Wgu8WTp_}yOrVF#23pm`A3K*ou@Aob z$I>v}KOW(dh?Zq9XLR3`S!5wXmTH>IYba%7$6h@SD-CHH8Dy)dTn@pnimV4m;4;8- zM$?mgkjX_{beMp*95xr)H=IcK;!-2ihtpz3em32$ z){nkjb)=M>w6A6=l8#S#q-$m29?vOS{DGdZoq6d34~VPySdzPgP*FnA){F z?5zKkZft2o+nZF0*4WKlt$~mUI==VgEL*A*H_oiXr6`sYj}3obc8ZxyQIF~$1vxu$ z&7DAT(~oejbjzshI2W@q#D^l&P-$nZe~vZ`3lcG}QRA#&&c{n7)ikn=3fZlx~hTKO4RM&SS^0K(Ca8swhB@Br-O6WsGyK-ueT~NFJdO7gy z06%dTctU24;)SR*W;lM#UF0&7!H2MOoO?4^aiz>dgeCJffZe5Q1?KDpOIULQvW%va z@h=o;;MyV9>YQ_0J34T$cH!)=be-pgCrnk31>Q7rD=Q!Fa?l7bR>YQ6>>9-=K z0F4^f|Dn|8{G?mlleUoV&T}37+9PMD7xkR7H=Tu_+ElFiVD!9eU$jWa?P%Vu(EH{0 zYZES(%DKe*)GC;{Ar3A32~z6x!|j6#<4urj{AWJ7B^aU`)87=K zadp(x^1QewB`nbl_eT1sowv?-pAZif>3+(;|A3H7e0(x{jpi1|t%@dV$9)CHx9BIU zD#k3zMfV9l?l3=Xgk+r05%9tUm za2J;pm^I4uk>6$p(-0z_Ov4QOWmFxbvFl}P#C9WW)#W|@+vK$hHG(t0pA0;mn}iWv zxUrOl-{Xu4^8#inZ3o5}__oupV7{csfCvQr8h@zu@Ld^(Lv)zI)&XI_2W-W9T>KI? z1N+ODcf~86fIk+&^CEUf)>zulfK53FNAS0mhLpzj0wxwTd@H4*4aAof%C$jYMJ$v3 z7#qgMuS2T}NGU$KV6Mm`aVSWVeL_6!;_T2Op1)@KjX;EO@k|Hli?k%I6)7Lzm3W+l z{Cm!_DpRw)T{BjB*1R1lP3rE65^VC@FU_W@gMLL{{W%jnEGP#%EjMEiKDTzXoee_0sUXS&LZH zeD*d&%Nleta$h4VPLu~Wlw>^h55E?jTEVGEJ~s5qn%iw^{w9CglS=O1xBE?oZgla@ z`-GQe1fRa{fL)e#z@(FJ^vjE-dS*a5oyCNW@v~Qf-hR#&l+-9v(1_GXYzKof5@?$o&2Uw1!xS zijRcnJ1^uab_}4Gm%=H{2K#82o25plVyLbfvDI&1FWMED{$#|ZI#o{z=WK44_uT2> zmTI@IRNq+;%fG^5H{46}Ke0YK^5MC;MlcIzo)A#-^ggQse7Y znO(>4-=`;+%1@8v5YNIb0_GLG62?$=2Fl262HN8S?A2ChXnB_pDT!8%Lhru}B-xyr zhb>jYH91Fy>cjU;y624z{yba6;MR|O8~)-wA1>MfxbvN0Ifjm(z-No(?m# z+!FU<{wRzCwsou{Fjb+;UDDs+3 ztW*HC%xmDFs0Z?o>AIOTI?+d-V-XSmd07L#BOEW8XTTyM<%+&0m$+H#M931xWmm~! zU=^WiL}$G-MVKy9;-9_)$}4YqYpT#Af%c zSV=e=BA-Yh)!urgX~LAtCkm3hM?u`Q_8PmbG8JOqLI?rSo0J+dUTNI#br zwv_!!Qd@cSEk++8V={V|pupA}!lk3}LZ(`1o>vljBcG`p{D_xE3=|gNe-^V77yR)4 z+$g!tq!K@iokb?q8zwejwTRZ>yGbTkKS6rDgoe3|z&iQ!vNYbe=!@W;)x4+j>>HON zl7Z%Kq}Yl@NnTQa8Jwpe)28aCCp7Bnx!^@zxb+qDQ8VM0Z)3MDphn4T8&ZdfojO25 zvl@_!$g9hi^n#>No)V7>gEC}V(txQ#Wta`&dMMu!NpwP17ZM@+rUIE(xSWGt4tYsV zKo(h0RVP+wj)9WdA=PE>Lf;))2Vr{IG1#Bu)c|wYSd}xmm+9kW=ogJd&j0z zX8L{1>L+an*(z5G4%*p7O&zZ|L`z|F`#d+AP&e`K<-a`<%Eck}qT589`g*vjWo!zTjpd ze$0#~sfPPO@Y0t%dtHguKUT%p2WauT5y&eZqZ5K(%~%Wa0jNykauF|u(m+p$LcrT6 z6NyUaAgxa1x&}(JLPLH>7E}d$iBK#`%B6R8=ZeONKf_rNj`i^vr6U410IR(J8`*A{ zQU<5-adVMEZ2F_7YYN@Bl={-lHsL&MKmyw{h%zp65J$`*#5dT;O;M^?A$E3-D$|!& zG4{ZdBJverYpM?9SksvNBGQZZ(+X|408;6|Zj^=G^&=jH718{I zE_c};pb~xnMciwULoLU}6lWo1&d;mICf%C`QAxESRlXUP)pzTLP@hm^T9SM4E~(ku zJpDF^W%K6FIoewYA9q-0D8B;0XByvXPFegxV8wDlDwJdI58;;Rpi z1WAANiR;syOtfrnV8TZIvJE6jM(dppj4q@!I~rR8_d1LF=av^ctRbzppnaZ?shIep z)u(WyiYMZx&@wys@|+=}{YXx2p2iY0TQzK;6Sjon7UJ zZ(OKAjbv#MPs82-et1#zqx*HHvc$h}Iz2Jg@jaK;cuknqjS#J>ea8IYOEaCiq=Y%k zwxFJm3RA!R2OGqv;`wr`V6M`(|Qp(IwQF`z&uG$;ytircJ@YW@Q-^!QO5G~86aBj(z6oA zB$naF5W=Qe7DVnusskAigqV>bJRojk$2S;oFw5Z}XK_SVL~>rvRet~aP^Oke)|^qR zWq<&&VWMLZHG4vUNY%_m)=z?jE%1K=MovfN_n5&Ipo9>sgbom5$%TdxzYATsM`#b)9Oc;vDGn`o8WbP1O(GcSdie({n4AepV~AjGe?>O>^@ zBsS7P@rV}7PG8!Y6A>nG=B5 z2B5gCFu;MoX&j5=QuMIFs0YEi4(S+#gOH9WON7D>au(*6OCt|+WytbI+C7UV;KI14 zF*5OLN5o^q*oRJJ6FZrC8b5XcTyGI#UQgeC!At!;aOClbI6cMS7^>4{waX>sXg@!D zqI3g8s||i7ekXLX*Pf@L<%jEyJg2pqQY@9bn^Sqi0MzB{Z<0S~wUYYZ0-jDT>cXDv zQoN#%r-koaFLQ<$ONpma{r2?>V`kqystlGq0t`Y*#NFR_(0Axcgg-|mFb{`o=PZmR zG|D;)v0A2m;Cpdf$8wNT-~u(5cl(t7Uib7!M~87!xAp^8p7=*pubH*=weIoJ2HuUp zj%3$MwcG*z&p{^Lt}DBR6tZ_*prYgi;e&>6`eqy1#>B4HH4m(MG|DQEXXB~^cJpRE z$VIu&>Exp}+CHHcpt7sgSs0-TqgZ1jX{`Z5Jw#{R2J!Ii%QWC4tT5nKTc8lZx_b(i zzY5i5G|)nGH6NYHE<5V$V9-4$Uwo?Bc;Eg5&h%W#&eIrUad&_6JDFaD&~BxudstWV zjxcRrWq)|3j-q0UKLrSbt-m=wXUMWie=cm2=c`DgVCxh>N7x*__MUj zu{9J`Le-&Kh}0dn0=gL~3lSSs`;f?J2k{JRVim-kZIA{i&V?$pr2wZ*SoVD?b^s?4qpK5a(>!;4WVI!>94`pXIe)2yef7@f`7N3b4^Exu= zWiM7t28uG^&55 zDkMNvk!vs?jqgRw*3~Eguf8g7t4t4`gXTLvFKay2!l$pYV$sQM)aE6}KG5#|Y`yhI8?ou)*|{oD1vW63OY2hH%u;p}4)ozlp~PlynG*M1SPru`OSWNLk_)+}h+635UXq)P zj5tFgRt`RU2qM8P_#B{YRvOChyhE$->Emevs~+6wM=v-!BD_RqH*h*?2AAfKgb=6S z?w=Vtdvp2&2e7s)Lf@_3eV1$e;+D;=Q}XI_miHHKmLK0LN~XCvWn)4{H%;T4yF4g6 ztZ+)#y4~)*o{O#OvKBzQ5<^#)?j2|sa(y1Q9#p52dz;U>njcGTTDblNA~(vjF{UzC zD53+ENU9&1{REkduvff}k@RF+05kQ4LS+~djL^HP$Kc2=x{$XF{E?TN+G@?vhg27H z5^MI<-W$y@^loh!obPK}>^g*f9xZz{gMWaU%LWzbD4?^e=Po?eCTI)b%ge$d;}cgObx0|%6rLkkyY;ww z)UN9YF^Ea4aD9>i_}Rd@z!kmDh^&s|cBMY|Z{93-m|57>0G%swwYY!u^aS&Mw&_aU znh?1v2wMVkm{MQjPaL8jUC|wfmbc1Wq#^KSk(F!%(*eFyDRa3ax&Kg}!4U){fuhPV zk`i%)nA*80FBT49Phd3&Bb^kTE%JN|N@62VDS9I%S<|I>MwgVeC?%1747&ybCgPql zl>i%#PuAZGWBCPM5{jHD^A<;T^Yj;NnLsuC4j=e=^CX)gE!Ny>#3)HZc{CipNXo)D zDa~0yA4F%`1jtPU1tMV#QxPG?i|~nzjj&SBgu1wtmtdbEWG0i3j6Aio@;AS6^ZT5Q zE0PmRj6A5G)-QdFbcaf{D~_}uDx(_1OJ@r#(@MOSI~91h+8uOEe$A>0+3U)A8sK*G zxX3^K0oToP=fh-=s3{QExtGoG&uW<1N5B8X(z2-!l^!&}PK7yq@dn<1QD|rTH((81 z6RM9G&Sk~zs2y00#k#kOo02IGgT$Zml#=I8*BDZM8m6$86p1x8*%hU<55Y^rH!6}< zb4r8I;|;O}nAfRGo$VK)V552Vt8Z~*EgkrE7!6QXs{#~$ckBV#Fc*2b((DXyU5yrF zJLy-N@EclH1UuY&CaiBrz!JraURmt}w`^H&$KbSXOlGTLjStZ_7kH=Qm%$E#Zf@3q zE~SGq{$9i%X;*Gl6OodKDcY8x^&OBjShjqhRJ2%1PFetbqE_q0dqjKjB#W-{0-kB7 ztbb?PY9}`7(H(#BcC3$1=5_e%!w9}!m|%h`Hk70`K-uKZw1dIU<0sya)$BOZHTZa9 zPl1(=gOa=XlM3Oqt7Vl_lK$C_H`c@tM(pPmJ~=2;_AlI>52w%4GJ7?xD?t_^HJtUb zDkW3r37(y#rLo#WJz>L)@o$}?-RWm^&y}FfOjK{P)J*MllaT6exwFw4a102GoSWo# zs~32qEU8u(rG7Gt=y;E?T$l=z1-RL40d}0q=fz`eh$kO5!Xd?QkjEqWJs{H8wqH1s z$_!NX?ackC*ajh4;YyM+F`kVdC9(6O6-)s=rS5HRp?)Jw161V#X`KQ<6txA^dP17S z6asGL%a6$$ERbnDv0H|rFq+q+(m$4UNdDVtAf|twG&a(STtVC@RzzeumnhofcEMy| za&cYpOc%w9g7qpU2!j)o`$tS$!-U!xowv;Oj7}?QYQxkM4UfI2LORzH-|2)q*n3bA;Q~;W0VxV-}kj_g=ddXp6SsCTd=PGQ$$CfV4nFnGn;C2ZvcT%d$+5`u$w^sqCCR3hx~)>r9K)@CcTjG_*iGlLgMbfxb zWR@btr5Wi`|v*GIvxS*1xJYRX?qwZO^~Raq$_im?j=wK{XIx+ zQil@&h8z97B!x4}Kp_*F6t zSrRKIC6#<$b}d6@4<%iNVmcnV(uAb7#|R&K6c%un8EyFf)JT+FwQr`a>b2GlWpAec znBP-ntd`mk;&klc!Df4>oDf6f1rrX{sWNHZ%}qugd3jVDwXP%SH2YHRp}v3|`|N19 zcNxSjzjaMoG#h(9x&NWmW1yRpcU$fb2Xz-}K{eU(7XG~2TYuvL`%>Clwx{?F?F22P zqM8uq4Qkp`EXZvfYI9SThxlW16wUp|k*LY*5f;D-a>#JG)o0- z$YbEBDG62V=ANm?t_ty~p##T-+|F@Ue*C4$P=;ab_b0fvQw6O%VU0#ZJ!4aB1T z;*YGXR9+Jzy^E)%*hIv`TL9xRpUkkF04;7KT^U%>${XTd$q{%o1R@JbWQ%ZTdoebd zX#2zTgn{_uGvsQ9Ht{&5ltenUgCqfvBME}VOjlMIU1k_tJ*WvL%hFcN=!-=CnZZZ03418L~K(VJc>(@!FXy-?g6L z%Qu>$x1@A=P<8A#Y~HVwQtBU>Q5yyAE%eTDEnIJ7(?CTJr#~2F9NQM=uAF~j=Zl8a z$I!xCky~U*f`k*Fv-!v~qa&>D^G@--=d1g7m-;-qb3Q|tZkD*_fVJ_hYQvHD(+`T= z3bCtZNCzmo%-}4LdY7CQ4^u?AF_ehX!MozWmfKKH+*?Yh10*SL1<^!2OcicSvwdaH z`;oKA(+j(#nR}UrqfR}_Sg`SH7|Ipu^*9kp( zviWQ{0?Pe)7|XBl{|@d3h)ReBk|{;9UGP;A$i}mUT65iHp_(8YF(+u5UoYDZ(?MPu z!NMlvH-N_6K+48x|JC9%&A?NNu^O_PmC|{{72?3m#CvhiF>4^!#^7w|cks`!cqyUjZakxf$ z@k4+6BYeCiGV^f&pP8)tF&VRCYH64%XdxvQ;xm99IF6K~+KQ_`R(G?=d3kDHiN;=* zYUZHM#_=>^FOxJdG*$qj#9tr`Oq-7liFg zpE+(4aMRd{HY8pMbL+4szwDsDIBp%w624RH`J-w9C z9?(aa$?IU)3@?Nmw)56lgd3uLtDIM))AkWA-Ac9I6nM!P!_i2hCwFl22aDX-Fvsp+ zypw)bW|vvI{e=0`f!?i0(^m$!rBoZaExocaFPGnVT6uih_1MFUof&9L^nSXVHCbaH z&CqI5w!>L?es&Y7e%g(e5W<|Y67aHQTOfS9zA{|ISM`;W+L>ythJyJ`1gm4xmDEzw zX@YOJk4ste-D%2b9yh0;8pKf%gY&dAjPA-QiA@Im&L93`zAv}_N;RMon?sj7 zNp>0Jkn`-aX z+Bk10f8en7G=0=rf55&_P$%@K`p7l(c+6&acZ7NdNDgNV^sX6Y&Yr+}VeZ zK7^_l;a99a`>|~?wW7eiV&AcW!-Vu5Yv`z_(>9jI<14yuAKSIzZ1iT=GAvac8Q`w$ zVo~a;lONVed=}b>Ph*|PfBW!2$6-l!m|$`)5Ef{|0N~NUrM3>_mwd_^mwWW@M~+|0yBl63)mkaklMeE zEsfQYjFaY(y?_k#&&GdJ=aXgw!JeHqJ9yR|6w{WOE82JS!Y=mH~(fc1Yee-*?dy+9?E*lh%}}~oIzM#P(1N4KVut*y;EjbHyG6h!Yeg>Ao-2RpPgu?x*uSTgL<$c-og1QB>>R~GF=HEfQucdbFFf$iFN5NW z&fvn*quQF9mg;NasS|ee#-%5eq1VX-kJAqG!nQ2a&{FHtt$9lqgC2fz|KoLUfcx~} zUPkkp8wS+da#w51+{;RNoL=^LCj7P{tpGb>u|MAqjYj|r3coqi1!8?d^$x$ekkoD7# z-ZgK_7W8ew4Oom?GB<=>BBu~ts_imwM}&ng(UV&pszUP=E#(&W^IpS?JNA1FZF|UQ zeOTx+R`HMT?l2zyd08t7rD#Kryt*F~>l@B^=hDc#Fdp6pejVhk|MI502i~FWz)7<9 zt-py_{&Fd{Z-Ojz*@7FfxLj3Wc({JpqACq|qc=TzP#A0OdB2ux@hR}?y}F^(G*oz= z?VaGjufLXU>Al z9+!x2-H9S0UOfyEQ06-}#;6ja)TYPEm^IU?YAxKwHs?d!XyqCd-OTWY^FIeVs}W=w z2nxLX64sB^TRI~|i)z^Do zZ@0fkcM!hO-86=|PMyjvG=kO#FX71Ucu0?%-KsuwX^=qr+w*z@ZnV`Sh9C04U{r_o z1I}qa`KzB!Gozv8Y}B}qm8(0|?NE3qf7-3oO6y%Shq|q~NHc?5SmEesmg?wa?5POU zd1mzP=Do%nZI6tp|D3<@CIuv8E-id>CiQFcyUe$^@+*t~Z<=o_DgXA=fBgUR75|67 zw7$_-EO9!B#~-FfXvFm!C;W!lJ+tQgu6Fnv=qYKpNgLf+Pcd_Y^rDfjs4;i%?;y3l z;YoG^f%ey~*&B5T(;ziX- zSvFD~geCFfkDr&hp;9;ey~%##7pW<9jHtTM>uP<)rHdp@#xh6BM+{oFCt?b;{{9bF zmS%jKLIYAtZ$<3M5S%D!Y>5zNkqZs(r}+<|qG;Rx09Nh5B{MKGD5fH0$-eDkpk&-- zrEpLsIqLG~WoB=JeSTi!J4zh?vr6u%Lj9wyRVuF8$F_zZerm2WL``NNzklNpE$NBK zDb%|9fR3wqwr+*fYDa6wJ-1)Gww@i${2@9-m~YI#zcb4DZKq(d}-w9QTiuo4!Hg%4S`N3|F4(+Ye4?J4ESFwYuCx{}SIDfp4rwbsK`gdB+<=yXeIb*}Qe(@!qkD-Nd>l-(&O?hqH;>f@z--%=@JVn2i&RI&!e{=so0OoH~JgwU9nP3u7WaB@Pcp5#q>h)->p@D0gP4wQ_Qk!30I<^T+td4`$;aPm`;IYD_#$dYZ#3zB~$iv=lw79rppb{`>ihLn+>BiTGSj9~zDcMSYr9r%Vy;emn@ zU^4{&^^Cv9>aSJu*Z%nHWcce${OdOO>*oBgVFnLUyBDeg9_g`Z^*O@~r1lCTz72VP zEUXapMnYg$^_}g~H$m;s5b07@4T zA<`KU5T!|g(3GMgy?_#u2uLSc0%1wIZ`Izl_u0Fw@9cff`M&2q_udLmevo7(bB;CU z81Hz;JE!Q4XcD&F!PeduwqXMdwgLKsiN;~p(0~84$FE=VKl=vgYEdgpddmjx#%&un z?1p_MyW+tFJe1+Vu6; z(5Ej$@58>9-n3(v(ZS6!t^s1Zqh$A9xmLVo&!L(&Ik!H}x5g*WUEL}!udq{5NnJxz zOIydpbf4LNa|`S5ZEWp+uy=6x@bvON>f;;uV^DC&snD?K^D!4LVq-7GCnP2%r=+G` zzi~4=C->Ivyt^g$O3TRi%PSt$*4005c=EKdo!-&e)&0w}=luhNL&GC)M#q>e_WP;n znGdsbz^CPvRqh)2dHvUUZGdh3yUG4KvER*08k*NvUw^&vYq4MFwc)Fa&~u~o*PC`3 zZQgOvRV*M%X7}DJTVxMiE3RqVy2sd!BX{y#pSb+DCQNnU*QxzwX8+#AuKu@X_V-bQH{8YUEK-EAg!sC@(EV|$NqmXc%O+d^}ELy|1bsvQmLnJwPO8=p3g z#9-v#G)J`%({bjK^(}QMl`GejByN9uecCO^^LvMl>jJpf-R9&)k}Tmv2nQ}yW=Ip3 zUsLvjbRe<|^R-YGXAja@)sb|I6GNglOVl= zstuN~mn8XSoTA)&F98K^0vJ1)?}F|q((dnETuNyUx-&cM_0{y8-=lz|_eOM|1D}UO zbKj3fz^j6N%FHBlPn`W&tzuD~(K(!ifID~srdrGo+C$|#pFiGRuVZo}y3$RSt*zy$ z-RMlS^xWB(9qV!Cb>>d@m=G_w3l7`MO3lscPL89x@6ybvGQxLw1(3#8HDeAFSud^I z@fL&ih@IFo414ezPaB8hXeKW4<2bB&w};?0&OkdtG3F&6@e@G~7dPo-{T<**Z7Ale zf|Y=z!2(~IjgST}EFI^Nl1wu%4b0OX<6K3sVp1y_jKtZ9V7-SLmxW3!1G%nlebzDJ zzF&+6N>=lZ9%F1s>zVg%Zyb6EbTUg)OI_yoTV!*@9|R%J?6ABH^Udarw>?N8g8 zsA*fJG21gblvGiwRIaIGI%}_UQ`h>o&du;ca-mIKXEW-oE~S0;Yb7Y~0|9skK>=rU zcivyAo(3WTsa_^IEqDl}H21R)W4?hVg+lOM(w4rvKERe-81Z%ZfRJ7}V6HhBu~OMq zD@r3e1Ak~RgmKHxo0Sc>{G8s*1}#_>X_bH0n3LHnCksU zu6y?jTWn(C<0vf=>~-%Xf^SCMErQJy`%7~oxmUq#Ag%+WXsM1)dVo>@Z%pPAt8rp1 zeO;F3PdKA<>oZ(RVjWruOXw_8Xa<9Lj<_ENLO9(iI5U<$^2kHt@s`(?p20!ad;K}o z%*)$y=%+Q@iQOlnk9AAf%AI|xzRf_>ICuE$!|Eh@pi$l4xt-aG<-R+cZ4vWtstn}o zPn(JlJ{+n!dh}$F4eL~#jdqt*!H)}bF9#A!%>5k-=IY*_98^#@r-nZ1nmve$ZQslD zO5<3Ccd4OY8<_ZAw(Ia$3Lc?+T$wjt>5WHAoAxN%SJgTBbtovPeKT0+qB>_mNIXwl z5XgVpX-biKJF8?hQEQOP>~WmsTR-@a=U;5yik8N?0_fHWDQNPMs-W004u;4_-T`~t zeMk5@BADVVX>39X*q0k#_2E)3_d*Sz;4)N&8ZVphJ0>8y*F2&Nh_KNNt2FA8mAT@7nKRE;s|NyYUgI1mkxJNbUk)S9Qf!ix>aPOG zb+2oE_@0P) zo$snWX*BfkRzZ7~go5{mtL2AsjFnv^eamFFddtq~>03H$7@j}n(b4GXxy7?U-DjYD zVeqN?NwDlY~9NZJU)jGWK?)uKSEY?c1`Dr3gDX8Rfd8748+(r+?iBi&*s zIdhe^eO4%b3;RL}l#W={2F;#mw^zWCu;EIq(6v zvCB7dbTu+1Mv?v6D=xJXBC^G5Bz`!abwJp(HIcY;Qq%SG~4J z!aMUekMshaZ^y}6WmAf!iVd4@UQZ~jBHq)Y?Ba!VBGwi88%40BwGIq_Mfatp0zmcx zQ@`EVRyLqD&Ro9ACc!R}*VINZ#NxyN`avKt2CG5{ZQt*eWL#)37HvQ-?Yu zY{iidFY;FR5{oCNH>0JUP1O~ld#&K5JwW%mY2cQi-@Cs%&%tQ=Li4@;49~S2XP)Uk zUa_AgRGj*Q!Dj(39W-fB*Mnn_$s(wMVh)2Sb!g_Q=!Fk?%Z>$-LIxE2Ob$XjWnhQL>+xjrEg85q*axl)NR}! zW~w{nVR%!ARpZ%GsP!D*Bbiv@CzDcs#=%6}v)Z+*(A<7UR7Q}wgHggRof|g`OST*` zh%UIdlCf)(wzE^|&MvnI_2>`lx-;;Nd`AG$k%@F4=F71eu=z{Q*H{citkSvwrGV}4 zdWUo2@H&+!SNQ>CUn&{c@ynd_sR^yus}V|0E-nhbp6`Yd+Xj{%Fb`_8o8iDxN0B8M z#fnU`@G1{fNXBWhNa+(h1{Y)|$r*e*R#Tz%B&7qXz~2XWG%6%CO8^Ht8`o00N*-W! zJsUaH+r>U%YI}xPc$ua$)(yi3q#xp`KJqb}GG?9wgEP6)M=kS}ZOfFZEuEE3U&xzJ zewusZ)3rY(&Y}GT(me-_`@sY z(dPxM{+p*SU$Mbe0`6>h25LJPZVR}ino=YuX4hvrkckAzh+Tas#kqlr?gxB-Fq270 zLMb&pO?Cs@O1tH=11VsGQ`1PW&wFZp|2Nd4ZkIvI-FTO$E4^Ppi>Ep#jBY+Wdir^p z+C9VlFPx3HCU!hicYdsiB*#}~mWahYWzJ6T)b?=tHfMKXe$zv;7|Lee*>RTPx{)`#9PkAYVZNX1aWr6NaFHrkV7)>^pWwLknkO<}gi1B6e zxd7(^@vcw!NaM%CJM$Cj06Cq%rx?4ZT_`gW*^Fczh>+<*?E>U)GoAd8!#$24@OjFU zokF#LvHJRYp9H32{iKuIqtNh>0`s)404+A>)@h!0_tee|FEMF3OOzSh&XCTW^KSP} zcY`33qHCpmfu?%7VYO{l#i7D5Pfgon*~Q}53d)@r@5*;RX6mbde5U!a#|iHL2bfwJ z6v2R6R&FaY!G9mvhD`QjmEGouVBgaKbP7(F)6-g{oZMN?EL7^h?AYPEn8$Y$+@tOU zedosM>o(OBm6w0Cbjur>s;?dY;Ok#g{w$LGvNLO48uo}^X)9DV)rQ2U3F%h#zxxOw?8+8;~C#a)`_7+U{)71Cd zm=BgClVq8S9_0rP6$F{v?&XQ6ao)i@Fgr{I3O|gT=G#rCRGU^KU52UypMn=D>Mt&g zW#9AuS-sr`@H%z;Dz^IozwjVKML3hlL#;ojM)Mxh+tOYs4rgGI88%*5?1jk^Ml?$3u;+J z!8YLr5sV(kLJBX*UjF?HVt=cYAQOF&UbKGi@mlaaKA~s5_7jcr2Oz`s_o(9t!W44Y z+|`gN!XJ2Z$?q!0JE(9#1VhgCKL2B6ZTAJ%{th?77Gj1-f13Z->gG@LTZ#Ya{eLgn z{|r9=5PY5>HiS2FA6j~cvb5{c^BGduA}e{_7KOtt{rYFBgE^E${-NvkftRc12kfF$ z##Xqm=I@)Fv-{e4cWQb(;|OwoN&J&??`Iv9rU+Ie##|EK!^rB6RJJucmSW}zvN20F z*nB_E(zQv%hR?J&T%ihSu_!Wys=mN;;eV@!7`Y%I^$;`{NI~yrdbmXN_RrspU|fb& zUlI%&84Iaw!Wgm@Ek6Zr;;GL~z`&Luph+lxo~k3D)Jq0(KZW(WPG;jvpUzBQ_w z?JGz5MpZ6qv=r)Og}$aFN2O7mtF#?+rM0c4oh9Uw3p@|2pSB88s{H&;a2F>ri5$H! z-*zc?v6o}b^zKF{DtV`%&<9x&7g-IRm^W*5H{l3E8NcfkZCibB5~6+|Ws)#f$)0H^ zZNS#D;O&vgPzm1K+PfV*1cv6Kx7-`5%SVp-wQ^}+nd+h?`IbD#&NVNz798prCm zKYy6+pNjO~5UIf!f`c|OjCF1NJ`t=Ho{ZoxeSpA(_i+*IZZ12L4+En_uvbEAkMa8V zCzs!9CJ!1vkoOGdTvV9El1-~~0gcea_L;ucX~iCe-Tf~=747Ia8B`eTD3{)2 zh|N%rM3y8yHyri%yz+cD7I>!ZUTEhcjSlhFeRXcO;$ddktJr44pL5h%zMkLC>Y3G1 zwl4P~(koM5L}gb5@2?6*Dtr#&(6|m@F1j79gbREKW>)c!0WG9V5iA0pg?=Q~%21g{ zZ>kr;MqPdYT)Gj8{PQHHW=FasG!d#Sry&zEH$xgF$9H?89}1YUlQYk&n%RIQEaanE zp~6r={|u+M3$sN83qWL`;Z@Bs5$J_$fNrMNwOs-dRmZLr8lfM9e`o-&{DG?^f@Rh_1-9dN za$emKND|t0p}W=R2s8*`xcv~xMzG`WZd?+`(v%64VsxVL;_80*y*1UTK31d2C%kkA z6Qmf@PtIKq)ayP0#O_nxRD{~qK6y?r550LzOx!I)U?XzB|r8t(f*ux87c?$P0C)yL;+d?vpCCIYfF)QL1@R zIn1S{pb&x^cr+-{C4woSjQDzjpZUlLCUHkNYELpZNN|&?P8?lx;n*$IuvM+OwxHvr z3mkWv*oKy%>cA5(CEch1Z?yTVgED~G_XCz8ESD6NJSVGIZmG4_-`c$&Q?hi>8w_=}|vW zW>O)8Dvs|Msrf*)0FVpIfEr>O?i5h}iUP>kb2i`BpGh}elEYbY2=P@kGV3sTlhwo~GuwcF65dNBHe|nfs{P?U;2! zyUYHZkgRS%?y!^dx1F9ZrwWfHOL+Bj!MvDnmUV7UIeUcKnl4+aa6B~^W{;4!ye_p3 z)7@m_+BTH-pt7%0FL)o8G_}-*sPRsvT4EKL@D2fD(q&N|9pbVb8^>B*S^y>^NAcsr ztyiG+Yql_8P|G`s?;}XBAe6C2w6J;14$zEQNXdlQ*kz^$g)_i*SvUZMFRr&F|77C$ z%c_+(9fbhRS@FC$o;tYHDuV4m?Z-1Nb<-)zpdU+~7zordDTzo^+E#3>9UzyWrpf7E z80V0z0gWs7!|^+t2K7(ltnbWw<@$Q3=mo|MnjH5Un;xDXmT0<=h=-!=7cqkPdvnjv z;B42w51vqG8ZW3t(_=4eF4~(DmGp~xHoN9*c}_s>gc7Y!mp+nBv6 zx$+j>9ig#H$s*XJ+(lJRAomp5!f|2t@?}IY56(0NsO3t4(LBSj?R*P>vOr`axA@>L zfS6K#OuuCu5Z>)}5J>;7X|P!vxH`|uN~VB&I@fLES%g&oZ;E<+FzH2G!N6F_jK<^@ zRjBfR&?JJ{AiEgg1`b;UD-<9&Y4fxdH-3Z&_7g%1{h2XRPh9r}vcVhT1>BId+e{rT%3!pi5`ejC5NO zxJ!@05jNr{nGf6NY0@Z5tUKE-^E_#ju+3i)lm;}p(SS=kJXN?E3@SSoCX}up7QxOC zGkm)qaT#0Apma{55ta^?Tg9?ybunmhEDQ{xQ)QoUXlXbD!4;|&h-^bh)fI+tzZx(= z$>C5O!a_8YNMt;kPNm>`)-Mow-eCIVbUg1E_9DwJeWhAzgcXt8PE1)pPmn=r@zubk zkTPLk-U!{C9~a5|u!`P3%SB6Dnv%gV+TDLE>(yW!;oD0Rb2jJLwY@nk!xYLfpD@p@ zAM?xZFTKLt)^p&+qZdx_g;&V7S4k0?MJz*#S;_uj^9zWrxn92*DeenM!p{BtNJY~$ zw(&`-L(A!yi?IXs=F=vIAkL-M;i{_}Ie~8HsqHK)C;q51snEd`y{QffYLJP1Yfd~j zA)jTpAYfLzv$hCsE}kd6>81OBGb~h{zeHM?WuHRr#gC$;@zQ*4@N#7*3t|)`ahAZ^ z!t5k6m9&wn0;O>oOYMp`*tmnjE@3Aa1;E`nS(#Q-_$(nr3rOQ6IQh^re&~{k(gJ7N zNK(!EWx_$V-4AI1rUNa1iYm!zc~D*@{6z$->&h(g!GJd~O?3nMXJRtXtoPUt^xKbx zFWPd)UcJ)IuS^NJvC#Yb_5X)J!p{nrPkGXt!udR+bV4h5zmh~o$u^QkH~Z850PQHs z=E)}qjEb{Q8ruWvdQEVL98A*7Vy6=|Qq&M{!|K#*m+CfVeUj^;Oua+J>PoAeT8IGG zcAKKrkR6h(wwW0IeDt*ORqjqb<96o5l^}14D_J|@OO!Afjbg3Hu`{2WH%+=E(O^Op zz8A{wGgtW-o;jG`A%bndo8h8BF(9{fJu-v8k>@4s#arffpdUfG+k}`-lcnl|am?JG z@N(cDR$*BwXSrML8!%!r==A`zn$$-539ke=jbxnGNp5o)C9_BiWZ;qr)d(gGtRn)VVBfous4_zCx+@YR~|0=5!@t5(&eZajt=}Y%NPn zNC1FrQ)&?WUd2Q zrL^E=%~O9}?T*0c7td89RhCkWw=!#<?6BBAho(G3BFZ$M2 zZi7&+vs1w5P>)uRF7JEg?&}S;WTjip5r>0!wTqXAan{HSm2B;k5Tk|JhVQ`ChvB{x z5OGc{^ysqpYvH%}UN6MM$fP<g$!N757-U*x;n8}O5_cGM@=A684FAgz%(el(wHffaDR%8ll zUL@nfIJ7I4>Sg{mQ5?px;cBWvxDmE!X?^p*mD@gOuCxGZM>8ZZ#foiYdTp4T+J@S= zwR8VAlt$U6KtbZ+^M*J-+oR78#Xbm0xk@p2FV5`tdU5t)@hxk3TFFZ_L|b=uBUt|2 z@Ofy(^+I(wlShOHmwjbtoDWJ)ZuQ$%7=!`*CfE2fjpJPm*?WUj zBYgLS6enbX98DGu8-4QU91>gBD%%Uh;{x+-H z(I>+82hYfnkBEOOD#)Z*;@MdmT^ymVNolrcG2Q%?OW~CHkENuO=hi(xW%x&@mmhl6 zJ@e*8u!iFNt4cRkM#SkKmy33$j#B{tQbdomR1?&=Or$n#} zsuZVTVR4cmel(m`YsuiaR6BN~#c8MJT~x92T{K0Z;cPCtVJ-RIFeCtpXPtrc7I5s1 z??4LA2)lF;%rTApiXO_EKiZvuQkctW#3&FZ3)IY;L8FR!sN4V52TkrRAh#0(YE@w8 zyN%{)@GATsENODB+eH%pri6(|Y_VBMZ?t&t3eBAWvjhB zO6ByLHg1zr-kw|YsKa)<=gpBOJL#8tCR*+{%0w`gddjFv*ILnjKxYn7bF65$;LaIZ zcw`by79x9T_j0)bgTxf-mJg)*NIE>t*CpP)V+?B1#-Yc&ZHUaswul|{)~%dTymI&C zRg}Dd*q)bE8BzYhsoYNlyBdt|!lML*D6P3)H7t{uG4F#Q8QK2MuZEb6DTE3o;k6BdF8D+d_Lr^evvmY2oSR$bYV za$&Xen1`6(L#)0(z+u?W$^CYj%W6_A)Yi(IoEA$;npVK6;GLwvj-ypQlG_ZFiWJ?R z>jodQ&!YbbZf!46*?YKYYci8Bk)b{1SWko7ty?Q)Bd#GrN0ylCV zYYaXx$zMFssQ{%Rmqk;v4#YObhwxZ~`#DEGAa+>p&2^jejd`43aqxkC1o`bmPf&$T z2zW)IU14MeJsJ(c07aq1gm8RcBXQC3A`b~}Y_$kVrpLYWVbf?n?i;%D)Q!5GSik$;`59;k@} z<5rW5#nk@ioHx%$AG^>$D}1a~>Cqu4_dK~6U-MQw*&}>Xhi=w>5?ED$O5UOanlC?P zIEB7H*B&qz5SUIsxwoap=dz{S^=Q{~>+i@~I@hmuF|`B2-LB?7RWdGubTQRxc5YAy zu5H=VL;F=`68vwvS}%~o)$mL)K#_i;)KvC zSMj=d5sZat4@C#(Q$Q`vE)gu1AhCjo$4E8DaM0Y>{ieh*Z|?08La-wtO$`Msbqb;s zm>4=Ek)Vc><@-DYdOKX=@w*4=GEFVTAV63SY6by*%rm7L$&*AF&Ud8QOzJj=XCu7w z1p@ez65~A+7=SZ-JD4RMDpu`abImY>dP13>uruZwfm!W=%T*fDw`{Wl+)ZDeJs+*J z+}2;bZ3J;+dMJeV!Yjnuq?1)MR1E0iVQP$UZ9xgZ(xqBF{ zXS`*q$Va`%qv3HqBxua?s~n#nFAu1D_^>W1Zk#tdSzCKGuAG(nIr8^uWR6?NOsa25 z62Ux2R%x=wePWXxBce=p-t7-6($@d@psKnVUHrkT`f^nGp0UeRu5!<~qju!!mDz>r znB)GCI%W#zNvLAg>@V_nsXD3a{eF7-J-1%nJvXm!dTP4COfNEg)W6$SOmbCE9xk?M zMHw=Df-|d|de1Ftzo{Ml$sbq1Z+_d{KQ*4`5Qhot)hJbOviB{%g$VXD333r0qDll?^~G6GobN;uZW6wgdv8Yi zI48adnEpLkV&l7}akUmO~f`$`TcZ0>>>6gx~mt0EIx^vJ*_Q;0+4WFA3 z$(TGo}#FHpNQL@UsyR0q`cC zvnGPMA=BjMhrY1W5sA=C`1=!g)3mm`+Q`EGH+*ieV~+3>gqqMq1tB6>#Q<~YQcNt7 zPWil*4>?55I#gA8lIayIbDP&b+kHCdZw+aO)a@WQ;(o)o62S)3S&5fczqFR@S7ZL9 z3bV@T%hphslwZZD;C|?9HlpCnU$3AyVN2{e?=mdb=nNSw$*YMMLhs#(eLl@yavKop zU>#lrFL&n3|LkX7Le7o|k+8S?^veS37UjnI(G0>4yp`4xVD_CA)HBXg=A6C6^B&-| zD4AAHJJ&186{^&Z^&d?$sce^13(Dz>_Lx6({&P#V@6T>g5!%m(LtaIxhSl87&pPcjSd^IJCP6JQFH9ySV8CF05F|03BQBDN zm=#O@Zm3yp#zqPWo`gkx;ddgK5~`o^9u82-xF+ZiaDC|QV81C5>MK zfC!eXcM<9xf8z5VC3AbbDeG!@X#z7J$Q8lR73jx!E5hq#4pi}PV`R`i3p}9;z2Wml z{wba#;b(LgG0ocQ1PEy*sNziF zUC1QDSM^XlyW(%bfp>tG#()HioW)0Sc!&D=PBBaoOwKW&1eIF>HaHA6TL;BpO`G)L zz0I}#rplyRpJOvNCjcpFsLeR%fX&z^Zp_ny9(ZCn>!+s ziKa7w4nzg}XCBqJ54IQjKAL`EG@m1@!#*_}(a04Hovt-3H3e+TB;+;<}MNG<*Uk=lzmEZWp{hx;wJqH z5#9|zc6Ch-VVg_ooZ)=bn`eRNYH-znyHI=+r=gAUbqspUY_dC%Z^H}4?c}^r+uH;z z5eYwHQlOs0TGk32=8KhaZWvtsY`SRIO{+7bOX&N4k_a7#$TqPj03oINeZ%>|^XVI+ z$n|siZS*|waHDfUfZILop#99u7+9#cTs>|)XN5#oN1)qv&*Sn;;g1gKu&z*Z0BmcEcpe|D^z;gk-la?Tr z@r2X}Ed(udYD}txjo6Me1_#*aE790_Itjj@+0=kZ8C%Awf^ERXw!FwIOFs^*?uvZi z#8%B&EMs(5(97QX_H2>imJ9OkftkfPH6k|!RMhOG$y#2+hA_jRUe89HEg<_di0|#J zwJXN%f+|y|%4UDL!SfIY{zD%A_St7l-n>=NPXiB5JiWZfMbf;h!0@T3!;OrPo$fu4 zp1v%1u0|&9kF|F&y?;{6SyFqTBLI-qu{C|TTDG5{^ECR-Z$u`aekAl3~g*TV-6h} z`AH1yQ^JO}%k4_&(R8kgogK{b%X#9FY#e`6gqANjsJ~wi|qsc`=DzGA-kLdkY4aJ{_?2x z7f9#}Lsy7ke;wxKzmB=4SOohnHd3g(mw{YQ5>gLa{b|-e&H8_ow;rQqK^^h=HmU?b zfU-YR540&Kv}-d7+p#xz2ZVB(8C61tAo1S2InqfUhL6;xJQ7qcQ0>O>J<;!Diz2V> zW9T;#{!&YXzo44FHO47{k7*NN5WDa7Mb3i?tMJN=iS5H(ld~SJQ;*2ra>-;j^yt$| z(+P6}8Eh-3T103K9-2VICZxb7bdghqG=y4`r?=Xs~5xEG@|z*K2Q1X`5B$ zhdBu&?PO9bZL{rJz{ePE_kyt(Mn5~dWdvyyi}xkC$JrXWI(~os^?$tq7rFgyae1kbGUDjA9{~}ltW8z4q~EHED$MG zKLW76Dt)|CCufEwmTnnxe>}W_+lMu4TYp@C=W+9=S+7eu=Z^m1T%eisoUKz^;;b?n z>?b>u(!qS_;eLaDu6yic4K_^rTxgubYp0LCIXXuQe_$Cah)0!cKMUT^Em7Kk+IC-M z5&=+<<~cY{CeVM3K6Bq_u(MAF_P9mI+N5| z4K;Kpy|bD(0x0-4{voiOO_SiGUf0oNjzil#-QJw)EuEw4_tzu0j~@4zJkw*nyrj31 zX*;tp?2YPE=DNl)G>zg^`AQiBeept1#V-BuoQaY3+tp;3!T3R^z zuZWf7;Pc@(J?JFO{?(l^PZoZxd3v<+hQvZp3iep_kpw|OrK5gNpp)a=Exn7~dV7hw zZPWYp4hQGQm!y@LYTT2;-g@bd&3NWC_Bu8ReY?S}UR@0niH{6TqKLuM^D@65zHY(z z*J+)ShSwpqeMglC4@_o}dA9tW99jx30vWHS7~kcMw*rOt>v;$Yc_t4ys_VXGAbBFmrM- z4pPSK%e*s(G6KZt=uAlDreK!UY|at3$2G-(nG~}&Mg~Fwr&tE6ah=d^^6T#>j7HCl zMeu#AEFwCq9;Q&GR%IVPg?8wyuc`0RI zTIA`O#I4;p;BwTSQy8%l!Clm5dmyqC{w<{Z@g>RQU<~PIn{QEwTHtiw2mdXY z?IfA7C56NoRdh$c2C3}WUMzmS*XM-E{4E2_UCvTB<*E<~X0qY&R2h)QY3f8MpwxW* z!qm{950inwI{HCo3zrxO(_6v?OlF#SKLyN^A`D(G{`~mqa9xj9h}ng^nuIzVnx~!A z)E0q@{<-@VjZwlEJ+T!!(ixRckd^)p8NS(GH$3hR6kcz7>G@#rUX6Kt#vbSB>o1}f zZRN<%Y|r5*o|^_g)qXbWQOK5m*Y^SQKPR3}{s{#CHNN(o$4KB@2y8+U)EEn?poc_O zV4GTtqybcEB)QwfYddCMh!|M)`{ne>r%#%mq`lHjf4XDrKzilv>vA?ZtPsgPvE;u1 zXVXD^FX_`k)E2_%E-)Md_`&J^D8iwuJ#wd*oVp4+BB@l7$$4_xq^0l}YG2GAWaR+) zRjH20*v#})R9!?YX6TvjaL&nD2dYM?`H31ib#X8cOzd^0N*Ug~++zR9RH^x zB~JHJ@*hy%%YV=@0PNma30?U=f6*ZEZ}}r`9QHVuJeN5Kvdo)lsSGuR{kgiP`_s6IXs7T``qgu z)kR2MpGufEHa_4|A19;EG2H#J6j{r&*b%h5ZK6-uWBwqxpBw#o%J`=(P zQ)@_Q4;at*F3+1b4{54hxfH?(L_9pW_}k}Ef4%w*4L!#g;TyyMyyQ=d{SO_+8>+zN zXo2<6VIOY%y#jIsUMF11rkBp1bg9Fc57(&!$?^4x9Gj&M6^Sj#7=gLvzL=H+EU%Js zjPe1;wn$)4D`FFMk583%(T1Tqf}-FuHya`oAnhI^6!QrV4hnqYa2mT`4!5!bGTNUl zx=1_Akj1kkKY2Kqh9N_IO|=`oof6a1pp5stVR86<=cC?)1{fLM+=UEHE|?v>xkuaP z)y;xgcYOcN@}V?moiKw?zUDpQGt%}tW!%){RL)Z^aP+WS76XAlcIO#2R78`KFiq28GWs2vb68UU#DYDlrNDPy}0G zhn8X;J5b8QOD^#UPmsW-C}6|A$C=fHPJf;L9U~n%gj$HV_|+PHe=|-r^Ai{lcA~l6j0lC*9|9Q=7)Mt-u^RirSc)8=I_>9;97u~iKd!KccNo*C@sIRG|IJB7S z7_Gl3s2C(WY_CLzIwwRO8*o@v&n&lLMS1F!59jDmby_TLlKo52^3**dSQ`o*MoL!- zrg0qo0q<7AHk|l?DSZ5*Cx_4hhhyoisqRji{BitnBO?>%UF-v8fc3~kzG5k;@IA+B zCjBF{Ux*jE755{cQ4ehVt_UN2%6~T)aeo|{yks@rj;JAIF$LGq;qXK==)@8los@~G zyO@BpW2RTTxC-hB;qY-Y`g-R$4n=IE%8WqzDtB%Hr#iQTD0MLG$ES6qcA+YVT1gI7 z(tkjDj|p$M!l(2@Z8gegF{rKP0QJHNT@^WB6`Hvnd*EJurTC{xFV}>yL2`25O&#ab z{R0JM15w%L_RNT${Y@oZT&BFr#+bBQ65Z;+%vuJ1D(in;`N~e z6;pidehZIzYe|bi9UPp8!RZX*wfQFm`OQYmaHM>uV`rmxhf5+xc{Lod67)J^I@T7`4(W@Bxxf^@Ele}#+L;yF3#}Gaj`V8iKX1D3S!t+ow*BZlZa9GF0XwAsb=F4 z&iXtZBfWx@oyWjq(8-S(+iA?x;5Rt5BT;E~cme@jo~q-Puh0L@pZ>boh5|UQ#p!f5 z(yjEEsl)1rft%IICBCtcpzk$T_GIp(Vr#?=x~f~U$*`_*_w>-WW?f2#dYd+-avBDYnZK&uFhYd z6Ou|b4yAtE!0D0&}>JEE2Z)F0nCLdL7}y7`To*P-kXv-U6c>qyid=SbfQbUxlhwy z-<{EYMX|CUE_Cc*&7GW{^1qu64At)JdUlQl?8h?ahqyW1A-Nx-(IJqRoj*1uE?weK zsN>Oy{Ld0S<8LY3h)bKmoP(OS=-yh3|MU{8^kreSfIv6=^NK%h_5X?>|1&R%ZRqmL zWNbm{8eD=-0QqHpo_YBQ;Zh^vFQGO36&3kb7pD&1rP8FDPg|%7l?J=3F9Z$dy)c9y zH@fBBAV8BL_cP8_br&QnE)iZB>>&%xb8|_n!T97p8#%Ciy$?WKA&-WzhF%!~aqI>H zCKHcFm5lT^{RVnta}z?gA~HNy5eiguu9eUPyRyz3@%~%P!aqyBH?g~E#CHheT#xt+ zmFOW;`!D6tUmxpnFv)d!Pt0AV1fR$J6*;4ZmewIHi{~rBU)HkSUlz70u?9~VqEW!$ zh($s(bxP<@ApPf8n8Yc}2>hULN(%U&T!D)R{I~}&sfcUyjqck!TNX3v$2OT|U%Q!CcMTZ`m#B)H`}& z*|N!?i^+6;EPmrSQq|4#cq~sm`?%iYv=}Ydn|roZc(v8r)8FupzAjH`8=~l(X*sQ7 ztY}+m9~WwmH^l7|q|(mhJ^^pA30bu5_#M!>4J=GXvm;Lmd$;YQ@Y~soc@gD;>r@oP zfXSE=#r@_H+Xw+rwbM1=z{!QqEvud&ZAMi>8L1m;;|^0A=)NLYTC?XpbxNup6D0n+ z3E@|47YgN}HvPCx%m%&@NB8g`I^vyon+Ueu(uxgF&qc`dePVdN^LSIhKQV~4v~iZI zzzNQsJTB9^R)lQi5YiW$)qxuwc_ST?U&Z2Vim~a;$0et!h-N|QZ=i$tmvs_G{wedY z)oFcu=Ta5xE)R;*wGwqd>CEEXfG}2=wtG}eiM3u^yY!>tm(HGHedWF}VfF(rbo#3o zXD!Z_tJq3N+d7E5!1cZkZ%?!^!1Z&_?5~(Bxj*NbTh~~w=w3D}JcYI9B7wK)N1BTP zoU-|LXj@@4P|3}LPAB3U#gxyX9}^b?c)=jyXj5czA86KoX)Oh>gC8i8djwu%{-S?4 zci#;VL#HYXonPEzQ$N5@U%bFUXO9a<7~=JaG{R1F@X|J{Z%=258*nBYI=;%gOW@nx z?ypU1h4VDAMd+;{h4m_x<)UU?g1&m5B#$L_qNS*6pk}KOF%$#hFqg|fM%Owy*%D2- zJ1f*5GKr-Avtx}N4YGI=M#)2a=O_widFIYL!{oFq#2x065Q+}<$20;DC4{z9y;HlU zp2Q@S`pOh1gg`$w63^xXg7N+`Vl#!>ayTZJmnwJ$FYacANI8caAZms@4L2owhnPq;|?F{ zc>mPaCbd%M^?S;}p|&5N?BrSM`TQ-wU4-D-*w1aH> zSV1nW(>03hCPVg&4y-Y}-f^hTt-ROPB;2jUEjJ$j98p_JT&U%YxPcb~*_SVNhn8c< zJMab(-hSx|hlW*;jJ^rYyZj(8cRj%#*SPOS83TkC!MU;I4os@I&=f3wpiXUKA9omr zmkIwc=rXjNaRsm3-j~{DM21%!z2x!1HFFJjv%Gz4)3f^%PS5PAKRh>_p1Lqo?p4<~ zQF`f7wU_V2+aVnXFRzTq9=V;J>V20X=`B<_-T#f~@ILUjobX%G$opHA4vNDpA)gX* zNi(B`3S%uI7)JP<_*bMAP5bAPO0DzP6e6TCZ~cFCO^YrUCxTty%CQzcgVQkrYZG4p z{nz9j0m<14eik4qJ2cLxjHb$zYs%0ocnL7I456*1t2;pS!vG3z(#sV zIbzucwF5qji5;0~NDG$cp8(&JX+%qtOORmJ1jF3F%B9p#rYr{<2Qf4V>kZH0*I6^C z4UR(N2&1j~+|DP2VwMQ(Zoby9F)>aAQ$sV4G5*o3G0_Vc(rVPc?=MMC^IOmOh9p;2zs0S zvqSX#?N^cyEYJ|k7A|#^H5$Mc%0kEqj>c6dD6d{h~3|igv!z* zKH{JrX8g>#Fq$Q3Y;-tjbeEn>x2Y7%P3Yp)XUDNt6{Fz zMMQe_PXdzDnHu%gqt*numt|M(TdVeb_ly?4lw{3)9M3gtV?B+!He!mY=@fW!KKIr{gTYm zd~Pwghe;cY=bi^gc$Q%Guq2$VK*z{~;w=7nb_i;!W8P{EFOoed4$R~r<;npW_Q#>@^sJ_5c;8_g7d zN~vud>ZBX=)F=+i7kJkShuxkpZ`))UFX8D{t`wW3fX;Hvi*|bT*i5&3+M~R`>=D`0 zt}?mgD#dZbB18jtbOqiIikZ=T^-#(u$0toVRPErFP#Rx(T@N}b!Mw}ATk=-G-djW2 zX1B^o6*MKnWGVVlNIPP5nT1@`y^C|=%q(u?EHk~+Efpt8D%QMx;0Uv!^LX?j0GWk5 zeiv(I4>chdEg^;DrJ$+DB@|!(IWJ#o3mHQ%wZ0e~5qi-wYV4(E7j1liNlHYA&{7C0 zv=D+UA0{X>Kq+Ip+ts!J^6??Oqc|DxI8#yq10d4t;8J0}$aJA0w!~+!Sz?m7<3o<` zz}$ri1weLqtT!ccanaJe3{pFVg$?`g<-sNh4h#!QP&b@+OpGENXFN1p^a1>!{>;_;@I=xU_RtD(>>zqF?>b-M>PQ!3Tb%@E z=R17w*n2V7V0-UTAn7_)CBNNQJu~5}NIC1`eNCYup+U@?VVk-mnvUy(x^d?1_t<)$ zvZUm+-KR3nn$*O8ubxqj9lqKg_%OPg6*iD)XDNBi=CGt*ue2a%S;f`1XvbZ$xd+*C zl$jm2Qt9dL8SX{78BnBDP;9Ydx^3`9O?KdMttu}Wt@5;@9alSsN+9|BcS2J^83EdR zkR&wVtkFpb{%PnC5(t~C8P=FhNJ45lbZU|KYvFG2rIFSTeAUT!fyW+>@SW5ib4hvkQ$Jtf{Bm-kD^9uB#fkuB2DgFA>NWQ?=^eB z`<%1(v)4KMeb-s*taa9WfG>eN$yNX5S2_f(I%wrqlnQB2GZNQGM2omtip@Z*6|IgF z8bMa?OZhpZ?M#(LYTmI~{ji5{>7K*fFuAFWk3>jUktb*9f5v z%hxI0hbX5yDZJrsN^?MtldEY4*#Y4TmT0{Lsw%y_Z>(qfR(of?M{NdF?SyNZPbnOW zdpF2Vk1WcM66=maw%J)rnj@qw;SXme!CjK}853DKQUi9{!k}ymKld}eruy@^T20TF)N^r&q{bmGLRj3iEc$vZC+c5xmUq~Cb$>eKUWG@ ziw;T6OiY@;7xrChS^46lruRyk8bWtF0W;Cme|()}dW zlR)nLZgN7>E>hc$6S3h<-`ivHT7WUr7Lf-QatrZIyE`6}P@P@p)-m?zUWU?bkp)ZZ za^T#63Mk*27Dp6m=bG<}7KWxK*Z9=r4D9^U^R_1Vo<(@V2u#APPd=Jt?6aZvK;h zsmsXu3~#Tzzqd|wWWJR+b@ijSj-#+& zriqpuK(eKFBs+OsB=Q}i2|3-I+!FGY<&+%k4w5f&QmE_XC@PIVoDo11((>B^;9K7^ zTWPtIn>5_3kc#dmBEY434cW$8%-Zdi->JmqP?Y{$@hc56qp{Hi4hw7o&%L{BcRN=B zCZHPx)={W&l|IH6*!qdoFq)wXHcc!$b+S-|QVJ&GdcZ)orkdtjQz9cT#smkjO7Xql z{#>D{u!>H-!g~N@vq?G++|?@UV(?N!#kg@d4sxd(x$!87IWvcx5|>cSoOA85KMnscKq^xC2+|7&t8XelR!zjk~V*5E{=n+n*-p zUA0Y5Q!W-UIv+G42Ezpj$6{>ZHVaLP!Gcc_yDrR|iGHsc?zgNF zMjW{6sCT6THBI##OPVL(n@3wq4{&^jmK+`9Ts=lwXCKEW$zAZzGObT9)W=(ug`{;l zc3y~h-2SBF`r*i|pNmY1?*o7TKSNEz76l-Ct+Bz4w@3(x1?0$TA{}}3R$++j<{lch z;p8t*T_(B1#y_`}eg5i;MzK6u)i>K=LAVRp#B;9kY&&b~MBx6se6uDPD|)oYLR-+HNjqu{>S zto=rGZ@Xytd_r97V%&cx5f~%?N0xVo^mm~CcjokODe3=m=F|mhlCOI@dYHNSopcc4 z>ruPXkVJ2zTTlKY?L14-{H(>$l^r4wRw7+V&NAFXYVhp9v@NyUIjL7z#$Q~f{guML zIemJfTQpW8tOF+x&F3r5=i&W4nXde{Yyp}RZi8!!`mh*Mf_Pgp@HYt zz1PUB#u%6x{>ndB#Pi1|B)Kp%LuM}`WKC+r>-nk*o$3NQ$vv_Bz04oxusF*6nUC&r zEX#AK(a9^q>izpg%P;#QROjdECMO;Ic25m>`^H3)aM}G1N!9+xUcx~iL$hAbnhh6B zX}MT76f~GO=S$Qx>PKr1FLd{nMxPM-AIrGvSL)BQA1Txw*va|>nL8BZ@#aCrn%PsD zO|2CkFVdntyuua-m+fEz;HaoV`uv|dkq>aE5Z#?m(3;sejn#RA&|!;izFLFqNbU1$ z?$|rOd5GkZuGGMhEmxy{EgJBQy?c8ouvDzF^@gCNTBeDSoET)Drl~4e4#m{PG@#Z5 zbo0=?RvSa8S~6Tl&$q0v!NaZZb%bmTu0RBz?C&LPoDR+-PO!)uTA@OYgmWp5?sO#j zVO#4~dmNS-XT}u#Mrp&+?jw7IDRbZ88v;uA!X}a>B86C@l1;AEXwF zQGy!TO3}kqm-#^S-sR)LO0tbFaK9|%ckl>>3RFy(1)>Ls9D>mq$szb${dbhy*VRaW zw+@S?(-G{qz)HvW8(CxpEf$TEOizNwZuI2ogurS4slZJxX!$&UWjsQLPe?52S|jYURxIY5*^|CXiGB&PaZxVF(5;#0RSsO6Rz6TRLf=0b;> zkK~Qbf{%7t5cN&1?{n|!`Km8Z+?8|cyt}rzNG|tF>g9KA9T#$!Pu-OsBCQ*-#as?1 zm)DUZhv&!`;t!vtLha%Qcep_H(Ucd0Tz03fm|l(u{=KpMg6Q$$-B{zeeNV3MS%3G! zGlFDNUP!`K@QB%A@&@LqIE|l1oDNT_HgRn!RDw#l zT;YN`krEcSPLJ;!Y7jcO}tQrR(5{ zZ%_MkK7W4Ik)l`<(cV!d4M-@My;lJ3#hhb70Y4+5&~P8&QNUFvLuueUl3tVi8lY6^ z&oEp0`B;5Ksb@M7X7^8(zq%x25??6gLf3C<_HoZ#TIitklIYy=Eq@FMR z&1~1cda{0&^@Foo&B~JJhl$IjI=cb93BP9K@>88%3N4X zH)WS>uS>r#J52a7<^<%)qj259KVj(&$27qJZy>fX)&_Lsvlmm zZ~eW{PN95F8bWkrIaGs4RV8Yfle388fh`_GYdO>+=I7z`G(@;O<_QeX;2?5gHRG9p zu0kyCCu8A&{6+qFr?{w5{4)?n!mjQWtLm^6TZb)^4J}y9b{UJWEihU>yFj9DXz6^k zPxo+S0_(trBr-EVg$f5qcleyG#JU!CLsLH{+*tkLb>*#jwpTEIQEO^`ixd|PaA@=7ReV`8;v50@ zEe}~pF&TC=jV_%yIP6Pbn!T+qCXQ_Qy1_L6v(@%tQIW#pc56zO`@TP(y6!aIr-&sb zf*BJ4K=f9{09t#h1&NpXQF*a=#8hf3(|_x<3TBDWGL4yjVPv5bTIwiEggSav0J6#C znY?(;N$GSy>wGXi_cX~sjHANDfY2Lm@cLA%xxGE^xnS!>%4-xVl*NRq zt(}rZOtqP?wL>;Y+l#m#nZKo=TdU`!5#>Y<8{Aa*j1uxCh~Fz=qOjXyiz%928fy8F zRHXG`tT;SQfYYD(G8-K(r0D)0qd!Rvj~6zaOH+*zE%*;xiJGJ7^BW0MbV-&x8y8F4 zKz>7meB;L#09m&UtrNpYhuavh(=AULZ=9~QFd_9 z$xq1CL(EyAqLGuV8iv}4#JWMBYoZMw5hK~bW0i?Ucfv;DI)(BQ+|tK{yf~=YGCk-` zK57mJr-@AGW~IU8A^qCfFr(J4d`YJKW)dbxUnjFmyG&K_u61mw!C2Jxf!l-Gh|v5y z2HTu>#FJL1Sy$NTa4YG=FE8IMzdLG&RB3$}o&BTBk;>WSclPU* zlP)WZ-Q`i`x}1rCzNwo#b)7WJ&}bJ_=G-eYK{UsvOuNguY+ca&X+zzS!qnR{x}>D0 z@x9um2d&*6*Qbo_)T;0|&$Qfoyk*_HhocRb@A2m!pj&az^XYjG)aMhpLfkqGdGEA? zZ^_4MD25}#Wqc-E1V+KUgQVrkDb_#Rvf#MJdzOt>p9|;vt{FaTe|$M{=U+4^QvqJ4 z#Szf^zR645+?kh|tts7{Y)Tt7uge|a)xL`Oy@hsyYY>`^$qCbYJl0SR+1-FT#nnJ~ zWD|m8>vu5>;2(%*L4%|_OmistiA~yV%eH_gC4DN)3|!;_VoL9$t|7lo2`2PCWX2Ry zddfD+yBIskJlcBlcG5n$7|5bYonw}{R8u%^EWcKE*dwLqDQ>=7DK8nVjFb?v(Hop} zD*414&r@%l@GuSOfd0_7s80TK1q5VK5R>A9E?em?@=FP&t(vOX6HLO(OB)rI#13Kc z^H7&CME#-cFU@54UdC4VJuMq+@<|^EOs(W09eoPZ!B&(yC?KViF2KbiZNMAhNq&>? zPG-J;R@#1}RDYZe-3IfpvG8Qpi-g(@;5;u6m_{nvrj{!*3pX*W|t2ecLWz zwY=hT&&La$tnfYNPfmr+4i40~?_#-VDLW8r!p{;vaJ<~&5>z*Bw;1>GE}uHc>LPV@7^V=rjaU&jLc$1~UEJdi ze2G;>vtL9~M4^#*YEP=0VZ2vc0r?pD6`_eaZ+9Of(?}HJsEk!XvR%VC0Zp6M>V(#0 z>^%r83ERud6@z=x8)Z90v^7AzTkxUda+e2~U41;eu7Nz~q*7`kyCDAuSyg6*w8TlRr^$NqvH%Ggv6s5b4#=q0t1zSXB*L1_2qQ--NJ)&mPv6=*V5xn4>~-qy8f?*>ekGo{=1(!9Z3EHoU5>WWp|al%;P<6!O1heWj@(O1ZrR8 z+}V*2%5IhR+oz?e8uUXCnp*1e*uN+m^dHB(DT;8|brrpn9dULvO7JNh-cao--9OYj zfRaXw2#9&g+#+oQ?lj>N6V*mjBG!q&&1FK*Ng!NR7o!UaYZzL<4KA#Tv5_mo*AW9i zD52g4j_DcoPsYMOmi41(dL$1qdVSPW)1J;}As$b;WwG|#uH){XW}e1eQWzj7A;*4# zk;00kf~;zgor5Tuwm?dT7|{oeDs^6iy5&Mnk_X!N8N|QnbZ&XFSh$e)Ho7>t_gNt= z2joCDoDKV}uGUo1$89Y<{#Asr|7w-}Kr)5T z5hG2ju0m|X_l`&17OjoAWlwep-KpJ<=9;sa%73G zw)RKrha*x$@+eMa!G^Dao0~A5*F*QBkZtijw08l=AX_F?p)!4rq>3~PtxUZ$*iR{i zjZW!es>*Z;wVR_pNxXys-)#fQbPT&0DQ&Y_2OtIvm9e<1moAu^j(v3qB>A~sZpfpr z3pDG&`8OQW=nembZLUaAXN ztt$#YaElN=A5!O*yrW+y6PnbDIT2~!bF;F@k3+1}ukp@W7g+Phld>PqY^+p1N$Emw zWX3SZZwTI0rc?lMaRqiY$!v7aCeD-{upGdq=TEMHtSe6n%OESklh?4-)v-6C0f4K6wSf9m zwq>|-EGf>#Z^$;_(dg;MhP%gxmYiMiUAw+ZQi}I3Y~p+tPQR>pRpI4^QOP^o1_>!JU6?&Jzy*3&V+E z^6zbTLh!%7WZT=6@M3y$`D0+Htm*NeE56DdjJ~aZF<^UZzUnVE-jRFCGwA=UXjb>? zU)A6~_J2bCuS&l$_mSf5is54MWkI5ty50!H#Xm<1kIgUA2WP(1S-2k<`e18jz~2b) z)w?2#*Pg?ovdjnjt*^mKBJ`E{q8`2=pgaFvMY>~8nEBhq@oF9Y%wgL($@Q=o1_ysE zMy+mZJtmJ|D~9gGk@y;g%l%D3IOF98bHCcJc)OPu;?_Mbu(3b$Y---eJ*ws7KHBQs z{=tEr2tItiEcy+j*}qbs1gZttc=E0FKi_N{OxsKIr{2bnI4jKpJjcUS6jx?3&qsd6 zU&1Y}0!|G^)Iy33`ULupKO+FP@)OR0BK(AKfzp>6qfUNS_~tubVbFw@A=r3%0EaT; z1E41eN0EF1^BBpW2U5jMp(`)@H(*S{c>iBLg!*5+)$x6aj1=(4bD%weUG?{4{~mW$y8r@p9 z03F|4$W(FhFUvO8AWR3&8-^Dm`|;z6g8poUGU)_&@tHv{9FuC=!^sI|lv;6mnfbh1 zttrd#SK87h?5%C)@%?}RBU4WJG0v)}JUaPgvTl_1{M6+mThIL7kxxvminv&2~Z z@y#zB_ct7zD{?CZ`77`@2 zmzlyJFNyG4$Xz$s<4s2`uwni#8DCt;rZadAtpoY&*vvrnik5;99Ke@e0G`}b!wOy>aS)%Wz{`4;^jp42Wc zjN;OZMe^d&1g$!7G-(un{VF}ZUFU{48-u~wJtK$tz5egjVxH4Z|8J3UauHCKG{(=X zf&=^R;XhZ5u7s>RV?<mlVp z#p2MDup&?+HZG`B^aY~jZV%3$Vt%oB#hhEE2VPxLD*-o>&4N8>8!3)_t_Gu#CdvMD z#n>gJH0*ttu@p;r;XDFLwsi8_KUXZj#c9+{)D69%{E+~dp6~urP_OaB<8}b`0e?W0 zIw8|hRCup5yWchZ7W}^W-}?EU{V&UJIh7IquZ!)OIpK?GKjqzkIry%}|M)ud=Zb%F zSO4{{9B{0iyD@_O@A)>+Z5G4+Tw$g-Z1K-{+#e4Snu3kaW-ebN9ixZQw*VO0^$HP1 zx`7PfUo!{c0~bTwhnEg5CE(UD|A>~CGv`{O(aXPKS99ZzQa*KLOOaCy9ZCf=u8{*CYe$f ztdrd^Z8sxn zx!y2X_Zf@vJSE}zPSJR49WHy_q+^lC9#+Yz>bm2&Ojik8yU0#Q`-;ua)B!vaP6OUx zas!=tFuhl3GRmAGT zg1Ru<_m0AuKHnYI!QA{Slw%AHStMl2LcIh2r^p?#!K^eCp#24r-MWjR7H&hfD0MKJ z4pTX#mBL}rM_!BIddTPuAFfl7NPhl;HunhhEqmTpMf&0jUEd(k+WN%zfIb@J?Ga(* zIEvLLy5kuT=PEOD4N$X-t0Qt)B_FO(bjjA!IL$5#h!E1TF{;dzNimRZ83oQh=j5~` z`VYjG?y(YETH)edx;Am4J8U~l>7i(mFvzt=`8CK?XqweVf5#LMy5sYVR<@5g?WIJb zuaMWk*({pjr{UxEUeOeklU>y$lEMz&%hZ_ceHb0!Pd>{ENXDMOga@rzbm-Qb(MeVlNlxC~lbL1(I~eo_xqILa*}l6{q@S zu6t+x`1sLzBe&*WLG6hhryi#T6gtHnUu}8+!A?!s_Ul1}qCHY+y;T$~s8nXocTF<1 z>qku2@dIARia!lMl8l(Fe+}^TJ~s+#eu3W2^&8knR6)K?gjEV~PeA?)t7I0Vl<0+V zJgXxhY=yj@VI=zzVS;`p*$SUSXr3xueDB_mU5V^ThEGj?L0>k~mETubC72mh6b+i>h<|4M;beo z{WLqv>Wq_JMWVivT7H8*LW6`r*2_T?}d!DYLt-0bbWzSi8XcyHw+_F8{ zeC%d)AC9+ciq=x&cK4RPpSeR`p_$O{xQcJMf5TB+>&+cVLg6~%;~Iyyvzm$PpbuA` zBxvpC-HdR%b=a@&wfU_r0Vr3k)4u6#=mycJLxJ>@`j448P62BeH?G z(92v+m!Ybnuom+Bi)j5%#mWf@4YGai>51LnO1LAGA8>-&5<;$%MtTaIA=F{>al-6w z+D6%VgbObSJ1$uz@yCbwf~!;!4frUMS0YlOvkrjNZT-dq*)$DGEQLprTw@}};w+fYGC?@8 z(w)&2tZ!dsrU(@}|K|#i&Mw42x`(7QD#KUJkoAz_ni!pLVOAq;eDxzDL)1?rTe!cq zV>dT(<;LKnJSy&?5W!BnhDL%`^%EU^&h9$rRKF+ zw!9niP97Om9_|0a?e${4*{7uwRuCS1j`dMa@-RLVMr z0dSB_xQ`mwmP%4V%a^J}iiOv-)&34xQ}6ltZBb6KV*Z90GH%rAh*IYLCXnlb7_!?2 zxHAm<4FZ6#f#g0wrL7=J7WQ`yVRs{6p9c_HsQJL%EW~Gou?^vi*HnrL1w5sG%s5N* zjWvri;FH{uN*K=`isi47=|DLXy|9u$)KJ(~ec1;612MA4F+^pFcg{2Zhvp>T>DO)E z#3;dc;Tu7vnNR8Y=~GM59bvkSLBGC>7DT@m>2x&>dAkMnXI9vn`^2j1f9XB3<<0@@ z(A}E(2)9!Gd(O($2g9dK%SMW})`w?*UC3iXJ}4bmD8&zHfs`cfz$kFubicfjtV4d) zzMP#i53rXho(L`Bp<+ab-_qZE9`TD5F?o?fMU6=x^F`?eTtQ% z+My||;7E2KgddtTl0SA*7GdqEk597tX6bop1TtFF`ns=!r=CiKPGFEZPXnqJ1 zAL$3Cm(wuSGDE85~ zA%bo_?7M2QmUaPhm2@LG_*)>?2_xVjN0TUeQ6-^onw&J?RXq;0i(LVAK~Z1cMPqm6 z9~tU8Yg#^Mm*O~|Hu^QQ?Br|_$+ju!WicF;?@$4yX_cecjqWq2rbNR)WvHv*JOr(yN1tZ z1r3w-+>gNsrKs%}S}|+h9S=l8ScAto+rDX+84jY4ac%Pre|QsUlLQCk$>PP^A5pZ4 zQ+@hl9bcz%D1tHoK(&=yNb(+eq=~XF)sY9$8%R3v0lYSn*c*JNR7A)i??Dnoi%5;Y z&{gn&17H=VKea-feha1+DLE9~r|){Tm8woUgj^Ee?m8JE!v7E(E4b_aaJa_x#+_q@ z>(2GPEZtYTRC};rHB9fMe%qA0YM5_x@*Z;>fqkNBbeH|X^;$=SXTRTyxw+o?{*8tg z_VQSi?t%K5w0**m%%eZU$)CKh%zBy^H2q__QD+?=giNi@_ZYuDnv3i)0%yzRHzZ?( zE~Y8V4kK|X0873>W;~<-U_*#jpjb=XD3uVAaq)sCc{rHThkMumoWI&h9dLkia4QuS zvS4JF$Rnk68{47Jr8P6>!}c^mr8E$@ciY>b^Y-eK_y)KbJg-=crgk|B znH!^w*8C;AM;-5fPT4?OnOrM#Lk!{ko=G#Pi}C}Au+Ue^exz(9?M8~FIA9QOwEhO0 zycS+lSYyE12pm0a2x!E|FJpgGMFg1cF-UUpv{Sf%&#RVHLHK#JX(4$lakwAd)_w(d zN`+rY(3%jD3k7&JB8`RK&}Ai}k5k#SmR}X>`7FLNS?$v#dZ^0^ypz9}wU@uHYe!-^ z;oS_dA7R3tO-V%ts-CUCR=cC9lA#`Vo_|dq{T^Pg=%v=KvzLpEG?YdcL1V3&hzsuh%R+4LtJUYsEijMU{o@ zkF7Oc4ePwV@Ye(4F4=09qQ}rA8vi7}tuU7zhg=I4n-mjdE7-qAKtKVZWS`eu3mDa&}?e09uJ?gvMr~x2rLW-Q-L%NFMjFe^S(zO5|$jK+G5NErYy4ZbD3Nys9UNLA_ zoO+Rg_@pWI($y3rIPEyB9k}I9+4H7ehvZaNx^NyZETTc&eg?X2uwgMD zr*DWk#+^^T3UpuO8Cw7$14qmjrY{uAjzF|N!UjrosjK8J%*kP%V(QOM>PE%S13O}@ z1C-t4jAl=o4#y`C@UN8M0Ypy;(GaY8CLCXUX2c3Yd@5$Jnr~a_N}p0n$af#yPVvN` zT-67#M~_zrcWL1x%`v$Nw$<6y28Y^?YI$yYefDj6F5TR|OvQjjEHGxB(%j>;clVW% z&RfAZzgOrN7dm(s*b9|1#%b5Ei>9-Vb_58h!vaS3E8f*fpnuDmozA?}KmkUvg3f zET(|`B@FMzPx*klGBvN2k_?5R#&slBNVl*s1P`0eWx#hOwa^1Q9kL~|B_%mdAlK+y z#`Nu?2sMY3DQhMWN^j~`qO}4(I7Y0-88=c%%#S8?nEy#IsGij#42rL-1;4yijh&=FX>I zobd|f7r)6|psE|dzSu?bKwd+Mp|AaTXmXVFk(OJ_=YE zGh3+7sX8+oW{s4Q=6XJsS%+kJ!2ku_ic_6^iqAW3WEeAXd@7@6lS#5oWkD7`quMPX zuQFg?xx?+#VS9HcocW%)-dbg6(GQjSL1eYY@Y{k<=fXHB@> zJwEbi?xcQTy^#S52#4(+h!rOuZ5GFzFpr3-XPWexIN&w*pNi%~J{aZS_tzpJLGof| z3~jAquo>*E#zJrukE^iHqgx&$-(idg(kA5SBg}5{Zm6gN0B%$H&#g>*bd2VjK4jLhP>hn+QBug*ht*NqCH~vQq_MaawW`B za70pa394so=;IUMuHC3WO}7)88;hl`u9acPeZoYfFA^Y*-#E>yYKs%8M)r|4xSwUt zrk9h@21JX45V=BZ<=Aaxj9i=EOM#Bk*7d5Di%JQSYI$9km-GWx+dLIGu;rRwpX>0)3 zO17g0iEPMFC@%;f`?zuqBn9#Zrbx#F@?a`%-id7A%3on6ORpszY(bPO$*;q)aWFUqU5* zP07b%%VyFZGq=tkOfWH&6^8z`} zJ164`6RW@sig_Jlx+qsRH3LWESwo2{yw7qV(al ziB+tSVVTKFWPc*$B9c*lAo&Rv^6*tej(@0Q?=qb|f!B#L(rAIIWhTpq+G%RC#E0!2 zk=4`Z1N3QJKe%I#E46ZgLc}`r>2RlC3slO?$3@ffdGR^*aWc~cdMGany}rvpm}ZFX zNi`gpeevV@U=TkUx`+aLnR?Na22I1Vy=C@Dg~ce(vk zsWDCyx3rdPF<#e4iCXw>N2j7Chsb7>8TH11${Un_ib3hOxkw3=duul7(PepGG13)% zlo@B2s{45suN~jG{#z+Itp@D4Fgd7xFa1U~4Y*1krL?8W^q;;}Y>-(r4>~1E@uVY7 zM`Wu6rG87wGJC%?YD+T?k*|6~{_#*I`vniyS8mp`)(Lfm=PD&m>$ z`Xr7T@lpCgwajqX;OL+WlGZ)Bhby`PXh+Zl^$JtFmviv})RD{3I-jtrW)o*`lIV}I z$ik0a9XQjm+OKIgi#O+?s?p_89!8W{GA==9oE;^e&tONCUm7S49P%o2&_zYK&yJp} z)jA$^qQx!AzVb5bg!y2lH=S4GZ38Vmop+VgWJ_+yZz*tLB39Ifd>V*~01PdEx_d3w1 ziY>$&tg@|-N8_<*k|(Ui?V)8bet;=gFitL_Dkwg`3z&^7@nXokhZaL414mj9KOw9q z_izagnso|x^6bMLLrs%ZbInbq*Ir%`sXx9A7;qGp<2rg=r%vXPE1mCzzKAZG`8{@%RvV zBkm+^%_IxD@e|Sx>T&Pk$ZqX28|2v21vW}Ms2c?eTpEDz@H$+K-xxyrdCbXPc*n_0 zSVu6N4W!&9r%+}SUZvC0)o5B|T(YnYPzq9Wy{1WAp2=RG1#kxAc zwkB&L1Xx9qhA7nleULafQK38zLIBR7jIxL19FHPegg{9I_h1*I{MF#w!sZt^!ff+-X0E8f1$WW|9I;1}Vo{VdjlaAC&W-^q-%;aTv2cDkC zt|pHvcD2FW0`ls>PYefSi~52n%J2e^k=EwMsyz6EwU0Pnp$|Cf3Trr^d^N{a z_ZlmR9jm$0`|(2K9@FP<6B^czRu>BsF6>>kyDqoLU?cR-a%yH@fnU@Itps#X_T@@* zbYKbFOlXo_^TK|(+R|hFnpLVxGuM-}T%Ar~ly65wA1F0Bf;YI7Ny2X2-Op0}-X=Xn z>2_mA8~TV)z5D`Zi_&FE6lSC16=5ai7iuQDjl+s_ecq04-o{tLVq<{2^e*65^K|<& z=}-M|h3L#RsXO?->lPb~yTi~!GE?EgMN=VxeIBT`!iU6tDXH0+bh2J(EP+W;bMk3G zCY}S~uE<<08W6ZVJL%EKV)SV&rr{(Jbqws}&y|)2Zd^K9mnatDFIr=cnZNoKVqWd? zsQT{nb6t&7Pt^VI!@aoX6cz^^#W!4}=a6j?nmCrjbCsNi?B@Dm0y|}ye#HsbI0Nb| zR@uFdjuidqI061g#Pu+=z;;fh39Z!hI{vZz|IQ(vuv5YLPsT0;e84MQ%arUN_{(U?VX{8xT_sY@<-}ME|Il>+AqNn$N+p^_jSw8=N+0(tzRKS%L;#%$GMRCS| zuJBcQ{&c?XziPQZvqVW76G0D`M_7LRl8Vz)z_%#x((!V?kFFT$2}FDpNdUZ8>@Kd; zK@n;lk>U>1yQ7?r(24%vdV|T#NMT`wIEB@KVmE^#sM4=+>JdtLOmJ4ICD{(Ks| z7!qvp!t4-oR>37e`1s|01Rn7V<>N1M=JI(Q{9%#-@}|pq2%cr+D8Jzp4PteD}j`A9epF{R13q5A(^f&7E;i2COWd!Fo@z2bdYwAo3UeTUl21Us+SDIWP( zdv?X(HK=*Zk7|NTr}y=IO~`L8qW{XQmRS#w9N3T>JK-ut^u~)y@+%!=c|)@(YT3GW zwKAWc;liW9fMVNgjb8K7xTkComm(mRAQ`y$@w0iQ**TvVRS5Zfb&{?4E;Cc%j2NG^ekOE} zC8!~HpVKswnVC2>(vg~w_sD~3+y)Y*frK4f3`O@dRh>eGL^%pHaXG65&v(|ywr4_8TtLw|unW~Vyx~x~`zf>Nu(7DnxTJEk3>$bV0 z5Q@%$TWVWHsl>y>H!8|bePz`QmsFblvL_fRzF4TAyi<1l^;v{?a-Z9quITXU+b4Df zQfpkTSR?&D@`n^b`J^(kLl94Ws+L)W47&mzy^ajPI>daXD8S6eMN)VnEc7Zs^alM# zG^(-d!b4(gH`)-WI*Nt-9&|xNc-6%5m<}GMho2WPxvdNOOciruOxZb~7(CR>inW@KE6BIMK zo6C$Y4el2`QuH^}DY&Us*MPCy9;6MLlI)QsW-eb%fr|z=^vurK2 za2cyjO#B&&WYO0mR*T=a4ktZ}IJ`vJ1m@eUD-L!)+=(}l5%0f71T(qHB~{f#n0OYg z^RAjg{{jO|oAVg07_;mvdZ*86Fj~kOuu=kD-9I*<9p&zLY+daEvVuyustY}+_z-(JCfxP zdChSmU6P7CWUN4*z}iybt?GiLQae`9Hx{__Q}PyRYdT(|Rhfc(^jfPMLP;UqFAR`r z*!3z_Ljk?2IwD*SX*HyyP`&^({U$&WPVY?ylqkmZ%o`1hdXGYPY=WA_CQ6u)FZCVc zE32KnIlqshQ_(phi>@RAbPhU<{DROnNrOAtM%#en;lc))FZ54{J13<;<`ZICt_?~X z$W~yjVACs35#=PO5ht{0A|AM}aakpjnuiD_prvIv9@#;k3rj*P5$_L(A`5Jvt?JYF zo9s-f0kmz@yq4%OR`V0U6M#ncg5MZ3+Dk~kvRu!6bpBceD9kb(p|U46is5FNar2-p zKbx?zRUVvXuh>KsCZY13Vx_Cdzi%KVBPP;A(}Y%lAkM+HJ|%fUr}D*^0v+ZfZjQ_z zauIT#nhj_%h{cSF)J0QFd5fPC8}_g#U;Hao@E#!>Rl(`@{%n z))lJ0oE()LmU0~2yJ*C1wyz|h*B*cZgGpv=rx*vM&J09=7)XcOxsNgZHJ;ky3iJ&5;L5xP%xD`E9CU-fjd>4+>qAdl@M z+fLk2UE-aUTwg9|z8O7IU%A7#GIN>M-r&FE?Uk9nz$?&99c!r0MZ?^8%f9fvu4$3P~R;#O`%(0a2W4F!n;FX*ZZ5A0twdZI6A|M z((MiEZ`74CEDR(%R!md06*kk@b@B?buHyBiZSiwl%eQ&khUpTJ&PKzGuY%%&IGI%g zF+f1bZ@_LRQiWyBzado~k==Zh58L6^$IeJ0O6hfS#SBvuh^vTDl}QwEIt$ixnr1g7 z@wJJWZBz}JAMDy~i0R?dRLGXocVS`db6)kOIa#>yMwQHd@C+$P z-XaP`9f9N@@1%kIZcgq$Gu4aL>ll^cLgd+P{qiDf@(QA(c+FiQU2mGwT2wCeL^MQ) zs-f;K7hyW8Zx@+c%x|M-IoXTiv;6tM(IH(#RhnL|?CrSZWyB^eUX92SGxJD}6~r_# z2LuK($H$#82rx2|^*}wqQchE7MuF2Ija}RvUABfBX9*-IAGH|<5MYkxCb7HLx?JD- z*%KeGH0Yjt*k`}ji?FWNh4*;me{lDvVM*q1-*~%aDXF=q%v5HnNu^|&!DOYArj&bF zk~yYmMvgg>5>zg@Gc9UqN@YeaM5bmLL4xS7tjs;FWShy{^13SV8d>K5?LLnGoBO`s zJg&jvn#35YY6d!F&=Dh26x;sYxlu%}3A%Eq z+INH-K>oD7&dI7Y6T7U=*~R%)&EVffZWmuRc(`tMZCK%N&_4$}Or}hsoyu24Fq+lb zQwbeox5*V&gIK$_$@87w#@cRq@K^{^Q7@02xtPW?jQ8VAwCpR%-n5qO#aM+9+I0qL zf59;q_>s3ivzGz_U26z^0m4+?FS|trA7Sy}q_T>(2%M{-?NaMx){s(l^{vOxH6+AM ziF(e<)S1HQ*6G~TS+UkyE^Mcy_i);T#^ZEnqyW04TZ`Cx_c#Hb%s6fbG<&gaxVUzP z(#m@GUdDSq<=sY{&f@ZqDhMXj5-$OymF5Bq;7%gkl~eb<{9Ii!X7&0qZhT;4S zM`uFYq|FszbrPw*UmPLO`6j(-9fOR#!J{H7!NGOIRN46 z6(7w-Qazep?S~2bw#^8>bt5^&Mp+&fS*wk!axXgl_&@_Xr#kC)jRMzDNZZ-wWAUqh zv5jKF{cOvBDlY_m?RR*bzmM2|)O|;4*sNC>Z~vj>wO)d?=;DK!WQT)AD^`DVdOAVP z>8{P;WMmAOOnkjxbK)%+>-X=GL00Z5B zqz_VZbSNZBMT04AgzV5#9>Aas>2Cm))C7L%=VRd!SWT5GW2W{gK?QC`w+Bp=c2$YH zL3v+<6-+vxj4~u!MKd!d&pg#G__m+vZEMy;!$(yTzOExddu9Pou2Q~)SEGqVES0N} zJ#LdlX>u@LTgixOhr6cs$k%C0Tv3^&tJo;q3fhk-%-FnI{Dpt#&DX8@K-)R!L8#U^ zK@{;4L60UJcIj}Jj23zvXc^(g*Bm7#pB_7SqdG(qP=hwB+MnsN2kwb6I02ku%A z4c65hq#kkhz7aiBnNzLny4K(7W08NrA*fZUe~If;m6}+-z0;tuI-@egG??61zWR|M zcqWrrY<$=DP;$fSZIPMPo-T9kR>qmMU3TU<>ZDd76he6Ct*{%-YLqUa9fdc|Oy_f; zy|xyQ2kG;5JryWu>M!)F$qJ<$or48R8@B9I*-az`u-0CCTCNa(u+|>nf*Mqm^acC)wbivMk8ioPvm8PE)-86Qo1_h&+ z$!zEVVN$w~8r8~xo@%BMZ`^-P&jp~hCo@D%Uv)!(qCX#YX~P>a9tl97xlF?b!@tZX z?K3S)Tc)Z8`SAp`wF^So{o z)mO=!B&Wgm)oqNGnvH5VBwR&lflHWGS5&1?=*2qRYNQj4mQWt^Yp5MEVH=6bHsdC* zdkCLmMk^Dxbx8j7lTXEa<=d5e73>cQO4@Mfg~Rsk9o8kiqP{C_iZvhX(}Q7`xT^hi zUTaGFp~tC*k5nrX&t_Q@k6f%b)pIxZbAjeRjm6jbHuCQ#>bBC>L*Drw*ry9)(N+wLzD3KK?hSc}?BUXAC2}6< ziD%gjgy%w=Se$!57|=zv+pYt^r|6@#@&xOC9BwI$&!S)xOo)%6eZqnk>CiXT8e|Nz zZ?(c)1c$|NGcfy&LAviF-vCk2kiQs;YMYCB{vX`R5shsh&gwI|f$<#0#9RI_U>-(E z&#++`Dl&8{-eOUxahw5?A|o&bi($JrIZ>#|ezgJE%!vu=t)EGa z-cvTvgpzRa-+58^Xuul^n;_$b3TsRzk=MEb_mk$gep-~;lipp*W@$nz zH76Dy>NiHM9Y%Q_FaO|V1xLNn7H$jU)pQPp7O%G$ zukVbsRG89mXoK+OURN9R6K@r8y|UIPKX_d8?q%NmqB$N5FRMh?&x*O;A|mc7j6d2x z!$KqRfO6omtP)&TJ7J;X3s0GVQH*8^>=3D(%gJyB=b(Xx%utX_kPZ=APq&83@`gh4 zC~3-#XUZ4seBo+wdq9Ir4(`LtZsQ*cuFKd=wDBmcCwb4x0{FhNpX7^V-qCfUn?jz* zD2tkznqd2j9)tw=y<`~EdUOxi77c#086Lq2jN3>TL3=wHojEvS@T3Pj2=5bIq1>Es z3Ddk#+b~)^z`vBDTcs9A@x&p7q2PgS*@TfW3c>D1VdFopRTvB~p&Y?V%^__GC@N9s zL+Fl>u8I>&G-N?c*?OUD;j(V7=Fo2~Zwh!}uTyw&BR}6^Yajq&$9zq zvX_2^qfJ&DXlWnW8~8>3?T(!|Bo3|&xq8bbU+Kk<1Q5xp&ARsTeV(Up6?6nj2E{>= zw;Xp}FRCQymZybgo3&Bk#Hp;U1y=pl$74h9o_hi`L9JnoV;`4Cz!)Z$l&5oS>hoAz zhctK%o?=d_)%%Z7Q^92eYexa`6t|`kPT+|w`Hr=So?MUR)WH!vnOB`hr{eV8VTMbR@tsbjG#2tHSO)&kS+&$ zuk_Bv>F-yfbDE_n`n;ym)@l8ZNSSD^usltP&rNm95Lgs2_Q6~b@U(`i7U`Dv(Gn8n z?z0*b6E)>Ih~o6tID@6Z5FLWTRT^ZsmIGk*!8dA@#?8J%Yp!H#*5QwX3s;9}Vu*M; z@Q5-D%BJqy?QLNjFpjYcgbn}BE4Pb}>O68m_Ty#LY)uHn$yE{z zsfCoRxxI72pNeXaeYlnRd_O1D((Sqj?PpW}{9vo0x~=a5lWP9nGZA!p=){`ja1@fS;H3z8=o24uPwynK9Q1F*qwkjF6j!E%gc7q3;0wgImGZW0y~ z;6AhMXl8^xWkvk&v1lXusyMm}gySW|oBqwrwr>>nj<(F55bk6|qTeyw84nkCwe8pJ zgX2Mell`4yL5^6~&EE-?s2B)Vi5aR@Q6Ot-0Ks@99xyLTfU<)AmSIa@O~WHB*ew*s zzG;BHgAq#(AmCyOX3D}mytx{;7Wmv7jw1ZudEE}5xmH`Qnpzd!Rt0_dtFNf`_u-n{ zt3Um-qxa00GSw-M*M!n7{yM2~Wr`>E!|8^rK{0`b)xB}a#y2jP)r{8?&2n@9>aB=g zbto)65kyP{ZfrcuT>9=oH zXlcp~*5p6`&RaJNRBaERsrURlZ{in?|NT%^nf5Ngz;gOQXjl)%{TXiFnWU@@iv^4@GGQVd?9&8`n(9-MS7P0yLHJ?*fWVkaobY}Gb0srU7S4SmDlV)GS= zVodh?-{J2>SUBv!ihDg_ujtDcy572`+nRBmD(n zUUaFq$8A&DIznxaLcpKWf~Kwo)P?Pg6-~Pq9)&(iCF})Ap}OO8JbQ)45+?117JuQL zmF*(5e~TwAZ7L@PKp@a%NcIJ*IZ6ePgBi!f5IIF;M7v=)n`JMj&Wl z<>GccXztfx#?S_W5co6g*@% z;25F~K+}?EdJ;4Wdz5kr(qjVK&iJW#Fe%Azx&UTqBuN^cIf92efcYoc)(H}}vX)KY z3>)BL9?X{F^l4^;^ewtB#zRVna44#yLHCBSN(X)e>qf@%5n42qFg=BWr0s&0z>Iw& zO_*;s;s&K;(#UGJar{aTdnLdOHM@W-EH4ASl5eD#&X`>}e3L#?IL7RD)!%=Nr&edfHYeOp5H#dg~$^N+=4rk)r&+dhd#G#yP z9=qJjPIsXb>F$<{MKLt<*6XKCOfLm1kC2S}Yr!%mjm4~jF>6K8bU(STI$Z>Pa@4Z*SnwKmG5#eY8c|NBkYId7JyF2$er#&XVDQEis@B6QB+j&cc9k z5MjzT+y|V>GS+FnOsY-sq4y`q4lRCVjyc)A<#JX}9B z$^sU-d3#}LN7)oX+0`a292BmmZ_@k-q82AOid1vgVYX-jKh&!LQnsv!`OLQA%t0}4 z;kfYO_Y}rrooy!%nN^VT_(tnMvyiUnT15+l|Hw>Ctb-~56nK$LRF$@J#v&h%Hu!Xm1F~&+y7n(d!tw;nh;q1&>Yl z5t2V_e;((!Uq;D}=TU1tpXpu=Yyuv7NMO;vrC9&6dk?l-1O?r=8hyRzd8Ffspit9c9_cv790rnq4!?GZj35&vNN5$*}or5 z*lKgRmNhGjR`?q(H-oRyj#>%IZYxj@N)`B_W+kJ2LI|uM z8<{ zo7|<3Jl*Zj`{B`jo8CTm;`;4~*9t~KGqJseZDf}xe{%^KF%G%Uwtuw3WXwh^Z$@(5 z3UKp3Gv+m+3)m<*)JQVoFRUfKR`TXi|JVV>av(J3{)_v3m)fDYUTQONZM5s3WeJu8 zZ}dZ;^L)_r1-FR)B9%1x#I7S7XBMYh17Rd-2KWwq10f%~8zwv_q5-zBaGd@#;;q!W z06h$3F2P*<6Z!H6Z9_Fz;GW9W(>BC+#1E}pO&7${ElUHDJ)I02SHBn)Krqy3&4#y{ za5;WB<_J8U&39AlH)ql31C)Tip;c``P4hx15L5LVUm=xStC zVRj{9bKiHC#n|xu=Gu1?EydsRcQyBY4)S01fbaj{-7w6Uy7plknH}}}e#NKq4f4~E zHPz8?Gj{~4-o<(r&kvHED5{Q(E*)^K^|N!h#urYw?)VUy*&5XOz%_A8<%WQ^pxW%p z>pl(DA**Tvt4%|VCO61e*RNt6(&_1j(aUsL1P@LhNxVUth=^}RU9?^Iz?YO?pxo&w zU5E(f;Lx7@2fCulVk!PAZF1`7n5vCbu$IIL8_iiKJ#0W+4-mtZ zQ|PN`?#MSKCA0L@b#xxEVd^MCQwT2LdC{gS=XWbl!xtLGZK|hy{`}*bh6-gW>C?>R3{v3%z?KZLRqy z5;N7D^#x?L5225Ce>vqm!(J{ZZb|r9{-yk_W+hmgNA^Iq@=t*2!crL{XV0a;d8!bk z)-9I-Dp|z7xLj>3r3%nPWr{Ziu%9a>Z<`fq${P0R=ol`^x!Ysk^L^9rtu!=;x*&nk zMl3JMY4nnT^HC#$T^#EMEQr+yDh+tDZS+N%0?Cef9X-Lbo7 zOO^Y~#y8ZlwC2e@>NtQ!*V0ZP;fkXRI}Xu&v=#hAH>r3@#m;BiVxS@$63V4*DL@>o z*$%%Nu>*%+7JU~rLPpy*U|6Yq%C!S#@lrG0T8&q?>#nta@O^IT2pT@Y+N!%4`U<_2 zz7WKo;XBa7p^8Odt^&j+&R`Tm1`e(VY3?mZ^4UlwYa#8|UY+F+aFyqWk~mVbjXzhc zfo$tR<(fq_tGtT@jLN;P1L|6v+uX+$GfnOUUu zZp_s7$m-r#_7(y8v7Y58k2nl)R`0sEJt%+d;B%2LMzr_XSYO-j{r>rh*buV_HD%d) zj_1~*!*3c#{f&cae43|s$idbqb2_mO5Gc2bayQ&u@ZW#_Hz~fL0z{nrkF-^v5={;) zRc(DKoH5_wF(>?rZDqU@y8Lj~yfcGhlD?WCY*2{KuywTrX7E`5C;b0#+kCytT=)`y zS^ukb*FO$8d%*StB2wKQ(kjQn+W)TBziHO4>f_}bzbaYYhCBIOaIQR zStvW28it-dGOCj_3TG0FZ0RoAA5_u@bL_d=SGhoMGtII`$WTfMOvAZ7LMW!Ze7bS$ z9J}zoRJ{2;67>t!FywE+(4X=7`*)JYtHAr; zdAGd;)-Fu5;8#_Kw*OI<$;V_5F1Ps{Zv1`5v*~~rc0)~IyFBQ_ST8W3U$%3fS3u)2 z*5@w6uRsam0G&*vuchXBUrdU-;a46Bg^^~^mTfbMLv*yGyz~;!se0aaosnI$U*GyC}>Z6GtLRogP00TF1FV9X_pB=h4cz&`xG1f%OfL`lj;zc z{e#Kp;`YSY+`SS_c5QYuf0JfKJZ7gv?1lWscxia>P+pu_5F=_CT>+l`}9$W zl*9GdBV$=3zbocG+7EclS8A6_A`AznSVPHv&f~u(I8X7diQvsn#Hmv74^=EVCcDD2 zk8cjuDw^|8AddmZGw<0>iLD1RU&*jR+*H>GHAYE{J0s&;fJ`f$p$^mhge0YST(ECIl(^673xP`IxRL;80aamcAh$z03FbgJkl#KY|_7 zymXvvL9L4VzG&vvzpr+;_qX=7e+u6G5BVQG(?hq?yO7I;`b8V}=#`)7L@_hY723$5 z9aX6_oBQr{yxZ>N6`oOD@^@qP8{_J0C$>}K9$1_d1aFb<(*WMc#SGnRKy_QI-XoS% z^6-o4cDlEuhLYB4E6q{BN9Wz4B_he@?aypGTj{os26>G_3k1KX4@{GUi@i99x+f_! zwbJErX6`3T1?1Y|v@nFb~MoqbQO~qEMLRd=ldvDdlL04|dbD&6Dra6faAl7r0uznX?pmzw}Y#&kxSr(4_m@4S;dCc25jY%Fj)jM(CU0l3)Kn32^oJ%uLU zoe&P;8)I_V3VWsoe~vpgC^c-de&>NV5BgNGpdjuvDWbNx%hJKD+RD+$@N5@qX@3)O zlV{Ma70%9y?I23L=GN3Lha`5M)#*ZKSBF7HaMiU?QLw~QpL;m6+@d{eOE1&Ty?buJ zwyx62F~io{#xpFJntHXiN2DE7bRip2lm8^jrxxYQ&&)61Exs z1S&glOt-Te$kQ7XUz(#76f$UQS_lzkhLU*#fFHel$%o5V2tpyYMb~j*zXpJt&l2uP_Nmy|;hPSW%|~ zvt{J0dM{l(vP^qffFA#2?i5dnGN+ObJ?sODGEzsy&wy^A>O4Gw+tEu4<rq*r$9$pvvDB zKFf4kyT?fXT8nGVw>M1=kI8={`Jd^!yH?nMR!IkH#ojv~_xVusd#E(;#zTRH>(9~+ z?`#2%_QYay6JNdUy&U^%Vv}O6A6ZSKi-wuvw66SO^rMo=>uC_vANHHR(1gl;#BPjf zonU9FY`68EafNY}vWc$MVx>7G;pLw6z^oW$7%D zHJI#{rs*83i9O0M3|XPjvaxIBgutoa!v#_*v&z)JAfX)qJ8#r$-G$NV|ExX>vIq?)N-(rBxeMs-LjI*Jk|_hdx&S@2R=lSHEe5v34Hr zPs7MTSEE;i_QwtuTK*pF6I>sbYtcC2bte)(8NJ)y$D;|k5JbK4(BkAScZ$*6d*Gd| zzgulWTL^t>QZQEQdKimFIz$W;ojGkiJSDgSbQO*y&=R91tZX7vTwwT3v5weLcqW!+ zbNlmfGm}rLp;jmlKYk?a<>Mi#!fxhnS@jVFA6lRO+0P9?yasijhf&$zSp~wSGb9w1 zBO!7wcx<^p27mzTbCp1!KWAIOMe>Nysq`A+M8LaookKT}r?ZXYTR6+0p_}(%q7`{%7Y)hAq7LG#G*-0r&@|3$A{W9W=Xs+5D{IkI4 zZ}AF50;dH2sHzSBj1u7&RZJ*)L z#2RuHnrQZcz4*{Oq5Mo^wF# zT$nNGn&X^IS{1iM-6}P7<(i92FW_)6CKtmuttxlMET)-55qCyV2v){hOro-tm|Xf6 za0j4t%L?G%Q5g(~aL!t;E0?iWA!RBr?KP0#>IOeku8`U zK3UcUh|mx9GO_sVl8`?toDnzU5sf=66y;aQKG;h^H=&^grgE_FKY~xQY4tZ zO?yumL(w4M79W>Wu@h0;_NiR zpqz+BXABArz;fmseDd(&18A_2mXx3v^4KEZL|1(a=;dy5J;w;@ov|(}_k6iDp(6aA zF+q$Oj`|TC;ZJpu0rQ``8a;r#IP$OINi6JdnMD{$ZFSo_?nmk z=YTdI3n0(65mW9`(^TV#fkC4g+lEh&qlTzYDeHUgrP-&3so;9 zUHk|P%LO=17&JMj?u0QSD<5ithcDpdIL*!txKDMQqKwHb`7l1{`+UT>=976E)pTtFhjwZYETlUP!~&ve~>;X zDjry1)}&QOk-|@4Xwj#`(SFiq(``Q+Q*Wb?U$8rm?)1(J)RxjH_PNr1ErZS``};I& zR3YxKC0}^aHz$~!{R2f-4W~0I%R*E$fBT;*75&BEa$UCh>ff1{tLzJ3Cu(+IIVkDB zJGvT2V%Fw#Rx8Phjs0E7jmw{ccpg|o;+ap1XOALFkBuwFd)v16UltvMhW?0*$aLr% z>#xq?t-#qu)#=sS*s7S*K}hozQ)Q@Vt<3!)HVdL^XxLYnT=7zp8x#-*Qs zu2N8C#+4Pgbd=~eHA79nobdY-*Q3XGd5c3@>RS4*jJaPvGPHNV+!LTZji@OG(688M z&e-@54+bKG%FbQhvI=$#v{N>iLpO<_9UCxFWg#Uo;7oO{r&Mb8BiEr`QHxuqCR}Nq z*Xidb5ny0u7T@KpVY*^{egCO1u4%Q=nx_cZfs39Z{X9(?jPDRKAL*9D$&adGjN-L~ zE!yR%8qn4Yk8OJbws4G$GMOw3FF)~3**wXRZ=$qsrl#)!iE6w=%011-0gvTM5)(|o zIJw}iKY~<>arRI`@%7{>w$TrOl?Au~D2=0>aDlM|ABA5=)Hp)s8WRB~i|F+P-lKHU z>=6tIe`6F*z%Br~UrYybrD0yH5RFVr*o!=N%69?Qs9-6zIRuHSLk1Y;6C*g-KA*p_ z3cWHiN!(uGb2tdb#=WKHQw-{QT*({{;o^K|Q`a%=ojCV?=*(D6qhsWTsC$y*Rp;9r z4i_%-w)PVcdpQ1vcTS%zI)b&Dq3FLWJzMUyE!?l~?$`#;yT)~#91xD@{-(-2?{>xf zH$j58$XfL=DoXL`3GhXN8R?pHYOLloz*(~!rwztQ^YF1`-0IH^lT)7t`ECldC6yEc zMNf;tSknZAKLbOWtxs6;rYTl+>2p2PNrEJypqZ?M( z+V^Tq@L=s*p)JR|6k(0LrJXQCK1sLl`wNPMA0nb%_+J<+3qoMc2D+8T%ht{}e!sOR zZXW!ge{nT*|EUV~hG(XGA$-Kn)nTc4)n9zjh(>oIWR@Pl|7VJ?tKGzKnc_94btxT1 z!-3$&0L{*Zw_k*DUfK!_KdAGp@X$GrUF%xTjkfzm z?NlXdF9_oZ>A;UAMQI6c6W`~co9kd-)H#9~7&-@USP}-GB(2c>{NtRbOjW^BzbD1Y z4yi$c-BYMA$8E|4n(g%EnjiK3m?RdgdHf8jk~C#qPJYtXyn2_<)xNdisLY5FqhJS4 zUSULSYvh<`vVCsh+Lc!wwINMJ>S557CdUU=dKItf+n7e}$voUw6+uNs5+4SgD;Y=( z6o1+x87@<;eEE0kRr?qA*JPD@jLiK8>mYUzGOE)*r(T3$WPC;=mNONu#sS+0XSRiI zwPr=XV4VgF2yQVF`ckNig0Fn3`ZA+fa+DEK7u59 zAv21P>=mx;Y`P1Wgrnev&uteVIclnINczYN=*%irZr~-1Jly(TkF#nYdN+GnsDf~@ zk&*-a_o`y&j3BhgFGkEjHSL&jtYt7$d)|K_C=Mim8m&kj@j^~0v^DNEQ3XFEyx%Er zZX=|VR(tr>YW4y$s6skaE4JOF1%fp)g_RmpKwmIk3^=sBj*d+cVv(?sJ9!DwlXUCe zq|!^^Pp1~vx-9LoQF2+}QhW>)Vm?`@Cy{_W&C z$NqeWXbVQ9hjh7Vw&=;RJEQyh8>%++T>R_mkx>U0Is!ZX@Gqq$7xjM|rr3V+J})%ToZ=%dHIl)o;jEPnz7x(mv#Wi%(ib)c_D z)Wk=S^a9-mA+$y8fZ5p;|q><0_!pHv7Myh`(0uR=LkN- z>3t~tHC%HNa-w71|I_OVl{&W+yMK9VTV8pW`&HYlS!tq*dMiWnl0ab`>K>X+OMy5_ ziU>&#$G-#afjc4H^u9c0jHt_s=G2cZqgd*?*bo78fo<(H+WmdnDk5&n9yvST*1YUU z8t8s6&jv%P%DOQk%QV=|r|#?r`_+bPYT5$s)Gt$-S~Za)Kg(@=lI~UFqp}Kon#kTp zSf{;}83o>1w+1r`ZK>C^rvj?7=BAeV+_0H&S}r*rd)%P~&h+tVjFpcaue9j7SGhXb zeMN!=H(8^zdT2|L>u`yTTUdP#tW>wmb=^AqIH^VB z^eV&&2~{|=Q)-cE*=)MU{JQZUT$aQt01=cmTua7XjYu{sk>>~bYkV$aHgUIJHo#G+1>2=eQIaB z)nJweCFhw?%e=Y&iwpVJTAluW8M}bJ5Vw^Y4_IS&K8FHvU@IY0XWiJX`$=Ow!2f(- zw}gs&BgdjFsDpAXCu>sf&N}ZAH;{U&7G{R^x$=yVPSG%Eov=LW03n;*pkuma;+Crt z7km4KHNCcoeDSYttItp*9aP2 zd&5=D%6~LFkh*J>nZS3GpQA{uUZtL?*xJkAqI~}k-O~G<9AgzP*aY|*0E7sxp_a(% z`M{bMU}h!=CKw4{LrrP_x~r)qAF#w8@$!IYHA`mK)y5baRSf2VQ*pYmp8AEdjQ&cv zv=Ot6nxb&a2C$(rgsSm|*C*hW(`{XuIs?Q{HbGf7ZmSRf(R^2P45^a8juEA@+tB(n z=O<-E5}Syra_@xBAH&GdyQ@+Oqr{_C+4Onr-6ml98**)G@y6Rg=F52Cq@)0 zj(P)I#WM^h5WfiJth`ih*7ay5BhS1f!T{N&U;zv54&CyepO7us`&ZPU5)T@zn*zt! zd8xN%Ehv(A5|KS>G`*Wt|LCb~I%i}J;s!V*Zu0fDP=|^&kSqlT(J(tx=Ros?ULbk$ zL@?_aS)r|LqGSvM<}ezta~6KLF?s%I*gQk$OvMBNu(K9%u<=i`2^UL^8vSoz41>7h z&iwi?O_#xi!?kkZJ^9y`q6fcs5atJBMT)qnzkRCQv5Cf2zIvfcrz5f!+;_D4U}hQY z{y3)XfYR+&2}F;SXX#@K)W}Os#VTPWmlW zO@h8pmh<)lSxqt7wMTi6ar1QpLVX<$(DP5WjEZ=9bIv@a5QTIBi*wP41u(xuFODaz z_~K!QDqI76({3Sbi904ogTEcF@kCN;?b`@hAfkLwq>bMVm}Pz`;*o9rjXbm1l9bYV z`k?gTZ@O(r8q|XxW~%-GDtSql-Vn_boR&Haz$bo#o7<-6jT8Ui)R9NFBWd!z@RmUu zS*G2yzZ+W~(AfqorTQAfxjTRDn?CmJ@~~(;Ot27kn>11Hr4F`^xFRLVKv)#9Kzm=e znf?~{Gg7Y5hPPTV3r`7F)0~lL*jI)DQ=8vdt2J&AAvf6oNJ@DRsIaQ&{jc|0uQ5F>ep}b zs=q&{k(jvkO>9pnD^Ia=+BWH4wJ6}0#X#8V`7Qj-`b|eVoL|yMOLY2Z^_JJLdzaYVzMXYm_cP+lp;;lV zaJ&Kxy{l*`$hj0~Lhd14*2F&lM*}sc!|GYp--B6=mROd7h6cK${NMVq)8?@WcVcrY zKW-~wL@M$&dG$8*<7GGT4^A<`E5vBCWZwIDl~)fKPkxw)mv!Z&a;EGc3IPy*K0yOK z3b_4^fQB#KP}Zno<&^W9-JqfUroF4#0_{{C z1ao@!YMLvg2Tqiju6L=Jp(~O<0UCiS(4hclF|1FwM)%To9oUG{MZnaNA))}C1+a&r zuR~m9T@uW4w|1#M6^GBmqncP22&0{D0DYj_XEyoieL`iR>v>cCY8QInHXP9BJjVb= zk{OnlLq};J@ChCyOGW}7Y-$CdPGywh+g@W-i=cd*8LT&z05etLh!h|l&22U*VaOiE z`}dR;NP{?HX}W~IxKYU7-+yK~+7O@leQI>^6urtbkxQ&F&-rNejsD_9n1aBF=t2}ge+T(DMK!Z?8j+Ah^; zX4^xg9e;tX2d0${gjJm!=R&Mp##k{ng4XpmcNb3|JZjbc*SnJ5?}_(Fpe+rvPQXtM zvQMZF2zL)$`%mQ9aX1Jns#v?6U=(3-a_?=q140eH8ar^+%HNQSwS3%o<49dkTzlBr zpmKeeT3ernD*xcfm&z9b2lH;64Zp&2Dm!xDulDex8Ia=f+ zP24&vW!>VTvEah}Feu;$-+-?4+E*Z)e=zs`0>rN_e_KVJ~NO#b}IxV6p+ z(Bk$Ty1Lf<&8M4p?~D|a?M_I)1NGqb5bqpWbKWaW!b{qwHs4&A8y;If(DxOem}&5F z-Fn}$di6>BYf;es0{0|I(9K&uH?EFa?sz@Ch15rRUT_?461rV%v$0#}va~sKW*olw`$myyEa)jxX z@WBM<@9)#XUjwt+m_2y`|FFSnCt_Ir7g(GKbO#2s9q{L1~z`|mvCuoL4iXO$l*x@8ma zd#^rxOu<_J5;1P;!$De-LYOIRVgbr#6KKWJY`BRUWu|K&rLPel@1o1 zNeGv1W2=7}qT=Njfn=?pEoS9zM#|(uG5#W3uhGC-bq*}6p*_Xxv-C~v^#SwP)GdPi zBJIEl!@A8#MeyX-c#Qk-- z!@(N)vdFEPo@WP=w+Ekru`zkYp-diOQ{`l|(;v}!ow4!}hoStjJabp5PVpjy>FP+G4>kKN>b@J zHcFs}^vVg@fW2}Oj1BT=UeNSZ!oTyDm&hI!Ks`ZPj=)Mcd=NAYI-5@Lx`_4KTW5}@ z?T7U`cnf1kT!70cpifa0r`u=W7eA&>upW_4yBw z@t~vogE(0gYqHjt(FeHtK@-4UOmepmJ;ed^BS2WNpX{tcFhNKyzU?qtfyuiAVJ>_} zWs(*OwgXEWH`pyV66(mN#Uyda43uCVpbD2Ot8YJqnlm)}?#EeOhsMe7=L(Aw?WVr3 zcw1L46|r)4^APEef`PpXXA!S#t5^>EJ$u!1;@0}>b)VgfxFh9^_ESY#vArE*8S72x3zbxjJX ziDoy%5=(PNe)s|bd+169dqwm4`)B%lC;6sH_mJ=j8)F4@OeZ|kTn+T^heCdjaFszI%FZ-9nUZwAAuTXbtA1o=@H189sV{esm;K*EHZI$(mdl*`|wTrM1%kmDz>*MjTD$seG) zom^|TJ!?FDHPLrPQLuaNeMh6L8{}_+1>Q6J4+X(nfK$Wx;MMWyFk0`1DkpG^2T4~7 z?5Otg2v$|RZr6bD!I^@jcELjAY!y(C#l#JBhJml2Te~~vJPlR(j};U6P*e+-qm72sv1R)E?<0=kBy+I+gT<`nR{C%vy`#0s;) z6yaz|E5?*Mt>lP!dUR=oD@Y7M$oxpyC7i%anFYMk=6sLC(K6BkMA;Ex40#m_JYf5a zGvT~NoLpK6r(0k|?*fLK&FnVPqR+NQ(4*_>Z5sWaM)q*8CxW?0wxXBc)wpQuK#$H# zcZ3e~kHMx^qta{V(cAagnX8)bx_&-`sRo0FT3^zS1tXf3OH?z856=OQ= zYty9t;Be&yK;kRawltEKEkmv(D$#i_6i+FusK%giN;&W0a!v`FkY(dm{er8)Xn1|? zIXFfVu?@Csn!e~d_z-b{#$%JmXpuFbb1A-bk9HC%g2N;byH(gA{IpI8`2qj%#e#)2 z%U=2d`U||FNxJ|jbT6ikp%(}f%54XK(cbU?w|Snxy+olmS!tdMrwQg|Hs|?$1}bE|NotS327k|u~Uxx zwhAfD_9_P_V)-p%$&rv$$Y^av%x~wUQi`2I^CK-WN^ESy>!h0B!pUqqrTobAd15_l z&+U94eJ+>pAK%OO{rP_X`u_9%qf1>PZO=WQkH_PFzu#`x8-SgG`b<40SN7~oUn#gfKbredVA^3IB-v#GFIagoFJ!sRBf8b5NoG&(7VA@ z-fC9f7CzI=?JTLy(9wQTmm ztfLbhap$wQKQh(yE9-o1Ut#>>fvK8L@@#-!RZUlfo^{k*<1<~W9>IT*bkU2;(i8|LuVPm1opMT$v-4O9=wM~)ke%Q=lV z2Z#;fw`%UQlm{OSqd&1PB}mxok&>Q@Z55+@wWk%f27JPX!4$C`QtE$g@A&Cv(uNOh zkD6*;`;Czvw>`VImkh;!&v(p7pG`OK=769Yg+3)r<}sfr`2cnmYn}-}%WW7|sUyMe z%0CjQSYR|CNR_>EL|4JYo`^MwFRXbK3hu!cW7TQEIqeDtWJGmPdVAzJC`moLD3u^K z3-1ygl_uk^1^-P1N`8u1D*Pg-2b2})zDqDEM41Cvu(TeP;TT}=3<;f!=M}_!?l#q5 z=`034CUNy_Z+BVg)pji@CX={|um@zHXx1T%f{7c&nUBzY@t3AWYbgpL8I!E2-Ey#e z-^0Tlbw}07Tc;+I_Ox<=je0dC@HROG(F!u348OjhB`v&;dHOzsYfdG9x#&|8xq zIxv!wm}O$0FIg;}pFBM3@E)9=3e2I@tL=3CqQTj=O9h6v6V<^DJ<-S=csJ}Y?97s1 zoU*Hpsy%vChMq;9OL&*bY6Nri3|v_Btd`<00U;`0@G4;_J-gu{fL&j#qy&3D8+Fu7 z&>spIZcf-U<6ky0_{;n~?nv|GQS)DqE+)uqtyD(nY2~eCfH#-Y5sR4x(|Cn7V%ka8 z1$s}h8ZV(3Kt=9BpR%B=7!a>VWK;mFX`8EOUUK+nJGbE?@YO7 z4;C0HK*|PI>wTlLiWuhtT5}t@J5ZM)?p8`>clz2Awim!U2DXhYD@~<)Iv#~hPAcpp0>4L^Urq%J@?W%=&SY4_cE@2{KYF*l67wBi?3Ya~5+{m=ZQbwl=D znp3l|quw}Nyzl~HUu$hD?`JaUoZ$Sbf$LNhs_NlHgTO&rH)YedtifAIfAONin;M7Qm^NB8?*TrtRA>yfBxPYY5@VPf==@$~QLxOQFr^qdi9>?Q zg32#Vdt)SzYNd90$@iS02eUmJD0xtkVIp$4edH>mMZX?^907g3Vrh zzFXes%vdUgqGXtC+CIc?u9v3MIF`JyeW+Kg$2C5bAl;up81hR<1a?NS7a5>CV8=n% z2XW~gwS#P+1@7?saCmSXP2=6)!V33{iD_1lGh0bxoT0~O~k#%URDVQ$j)Lsm75_k$IM45PjB}+I@ zL_CS7=Ms^_phv)z--g9P45O{JT%iU|$R51NJO1)wb@H2d-ndxX5tsYL*$I$4#@iy8 z)3%`)z0kS42EYtDU1owGYuk$a2RP@YQ(<+ug4 z1~e4pNf^lE2NE9<0qL3yGUKW%hJMaS%)Jom-T?A)CR8^h0mFFzm`X~i>70Ri>Wh!c+~>B!+| z&%JqJeC?XMQMefAWwV1CO<9gtZkjqBy<~V});%RMbn{{3koS7KHq#&W`#zWj^{S(D zyZ8xxBVi{JBk3(9s3W?^8pqCX=*0xW7|ob+aK^J`Xl5w+?RNwBdi*8$qt_73QveUKMB@| z{fIdm0D`kID~fgLU0|#mz4#pfFbcFyll9XKp;oGdmZezp2DvCdg(S%^I`NW<>OBu5v-r|&IeDc|$~~7BgV)bLkl|ed z4TCdk{d^wA1yyEO`fxmb-A95<&Y#JvUH)${%Pjr+l*!(_H|hOJ$uh_Ms#^bY=O+S% zM&nrkLJw_l_EWW4uuVb2k{A02R1VSQ_9^FJb{LeH%iZNgU`Psa z-ZxZM03YUueEBn7%6vhPqFl`b@qGzzS^?O zGeGQM`2tGl{(MlUZB#pbd!EHZ@BeLY`2Xw?|G)j-9wP_F$&&Q%;>BNMqzu(P!*>@Q zDWV1Ae^=~ShGnY%in=k%gN`qjo+N(V3Ie!ycLIocplK$c3j7`s{qKt7n?*{Gn&khL z$DQ_HAkg@~GDd*n3nf9AuHqHQ9Vs0wOu8Wy*G}%n$6m_R@L~PglpIn@BJ1M>jme6Y ze<^EuF4am6YJc2M-6bhpEAWG{c~piKt5~3!JYu92l_UuA}}u@=DBD78{_R zPq@!`tz)RG>|#O$Q47eW>dh7z$vDi%u?bO^?LOK@O0RSaQV6#;IW}0NL#g%aif*p<<)`d?s*zIb$HI$t zW$D8>yG}O+HI&a!xoa9fP&Ip^hE}2K=NZs8pTaho=c#Pw42hZC-RO^_C{A+cw)EM} zA#kZQ@qyE%oVG`q_rs7@;kTC3dz4weZ2BFDSq-7a$cpvf0KDU;mT_Ak3-2Yb)%)&C7g4A}?K-!Upnx(Sec*g>s ztU)I!TeTfwzy_V#$VL8_DSSWv&@?^Ux(dfnb65m6tq3eM|BqL~*S8AeK83rt!XCYd zym~OV2(6MILs+$xux@%&seoxzymhw1X^eV6%Fdne2Es!8foWq8;0dfk4?<2?z&S{f z5Jda|p}Qj~(|wCZU^TuWv!v}sbs)Ont%vYJnW$G>iSCMp9}KxF!8Q|5XK=C4m2F`X zmVg9Wa!y6f#1)hhe!6*&*IQj#agj=Y&d{f68naO~6k&syO5TQ%k^S{ljUj?Q)w>_e zpj##EB2J<69C>UJ)IEY!!fIF_ImX^8{M9JLj#j`p78JH7sLDzb8>|{)yFb#@I_km7rXJ{PLJ8#GMj+AN&Y7>--eLJ;IkyVt zFs?S$*N;53~`iW}`YF=Jxg^}giq+PuD4|2|birciq7Me9dw7ZyBq8oX1y zmA$YL*s=3KVA>YLDV`+3&(`%nuu~>JSOVysB!8wGOwPbx0-tHGvr~5aB?#>M`Xdbw zhT6TRf%!FFz_sbeZ9GtaN`BsX?eYY=ca$D2nwa#xBL%5O;9p4^n0(PhCFt<=icS6k zBj@Z&nRsPf+Zdld{#iz!{{mE8QEjAL6Wf8sGpPDGY4Iu$rNQKrCuXFiOki7l-aFws z7qMbkg+=$n4B^|L8Sjy0QCYhis5;x>;H$iZ@cqITy2igN;zT;YLbRbt;T#LRCdJ+4 z%c*4O@P4)$x)E`Nm|$4UWSj>Kb%sndktqoEKsR9|yo~oSF_Ri!gM!G>`3?Z_HCcs} zPh;{-w)4ESWs6wqkwIMhZPCq*rBBLAI;Z1?Gs+&`yCwSJYR}2r>DRYy`SbX@B7rYo zre~hf`#n8-?}^CV7p$$MH&*93WU>31jopD+wQZ?aclD`XEx6%X_WDWoj)q?bQtF2U zgMuhR!}769`;Mrtq!0@TTLuBy+kV=tyQodI6BY?DIXr!ba!;cKmv+ZQi8wpL0(eqf z())bdFZsCm8OJU9g67M|=KS~s!%scZ7owxrKKnhcnChAIT~1deq~HK0wkI(Q+ms6A zIExv)C#?cS$5~qEw^lxGqLtrpPxTtR5p|O#=JK@hi3-d|oD#c{WxU>f;PE*!g4fm0my`#~MA^*71~6)27J%b|B|NE8uY^hR z79^^k;wt|OW_1>i$MjwxLSDb5U{+8}g(C2wq3SY>9_kFD9l#v`IEd+>rpePr549AN z5VPu8t||1MCw1}Yp0F#GYKk|;bN7z4mJ>q7e$^Hyb_IaJu>VBuMd!34+)uCUKSn-& zV^QsABHB`Nd?)3u$&NrB_SL{9&!xx6FE8$uHCK8z`4u`N?c9>;Pgb|^c3>TR9dh^Z zTtKCdeNl7-CA8UWultSIOQGfI9Er~j@<)R}C6|8E79$I4fG{DTnR3a#XF^Sg(WF|8 zwI8~ua8?bBf)0=aICktEXy5gSVlPp(Dtrz>x9KO}n)jI4w7{*IHXsRT!ByJbQrkc& z>E>>Mvda_BNjolj4V>ZDgTsF_;PHKA*L}SCZK2^|`lIKS%@L*$FSi|AYsA|ym!5s4 z=5QG?Kep{2fdwdHt**kKver3v5@NC#(U7RA>4b@fDs{ z0*9DWK>&&gcL6je8=G$c<_GW`81o8gYHuh;@|q`zrou_}l50rHBdkHjq)bh4tU3d1 zhn-ksl|dNgOV>AI&tlPcnI~K{H~spKgqTa%4A~XJyT3?-ZUdZ16EwqTu3ZA3m&p%G zHa&)(E#6A7{ch3K;+?vrE7t{*Jz}1?k)FfFfgY$H*PJ#%=8y^#@JZ0(ba4-R0xO8v zIYteJOAdnu|JubvK>dCRM4OWhagHQLrQ|(NGHFZZS73%X70mi0fxFv(I=4%BqVY}H z-nbIhpQN(DCtEi}t&4=NmH+b4|D{PZqr&7tl#R=JN5FJ?x_oD-JNozAhb{ti!7q^? zeD8(bRvbFG@n&>>*9oi9+R!4*7LCp6#Bn6oGcDZ4wJ@$JTmONv^Af#*ca?60H-$?; zt}$#bXleUYB3Z!p@C>M$m#{hW^9{>C4XZRkby3V0>66V`ey^GHJyab&H??kLamiAD zW??Md<{R}(8?C&?``m+2Kxskg5-b?CK%{QWia7D4Y7J5-Az~=9uC|#sjxN@UDE^ey zV1nZ-wE#dcdf2=WMN-g8FU6#CA42@Ph0~EKfvFiW}>bIzdkb5guEC6rhLAwUGG64ORzwqO)13zAdA_X z$Tw`Kxj+F<1Z$`d$gfg?n9To3{~u*&%Wt-_!kejjpAArZW?zsQXN2lfww&g+f7Z0nIL`jU= zaeI{p1tsSlQ|~;_*c7w(muQsS!+DyjU0AraK06+N60_oI)3!>#JPI>1c*}Z#6OLI2 zkl@$P4#y6tD!402e}q#t5nPId1di`~b4fh&Dmb6VKx0{S4m)KLaZgrn$5#GXNueuJ z{WNRl$ZsZ+!eYe}W3#Po#pB%Zlv92DWnWFf97M#`6Dif_eHHO9DZDVCj?Bp!h zqJQZtsx^IQY3%Pt&;{E5oSRKrkA%vJ8k7fKq>Xc4(N%x3vN`hXg)xs|@75l|$^np9 zR;g0&QxHG$)bI!5CB*z-UK6o1^(J`me4jLpJTg$}v9qe+9Sq5$5&2Zb{(jV0y5MPg zF6KVv%TWj`EH`rJMW&sTc>nCBr(|@}@X9h?yite$wETD3;s#(w=?w);jeV)o#BozO z8&2S|t3k`Mg}JsGZoNWtrjVrjg*dw*5CqsEf9pYy`X;$U8X3XULJB z$26gONMFUsE0Ce3uU*ElO&slNw z@ukMVB%5d(JO9kuf>KF)pnHWTQTmH{uQ{_&pd0HvZC~6SM8!=_6;q z`WP7(q|DZh?0U+cNA0%A!1U0sizWsN$a~YoET$Gd49@H&Y|H!wNt~vu$5l9kLAY&$ zqiy;`FF$?HogM6&_&xFn z-}Qe!t^Lf{)l#s+{ear)mChTr=w?h#78^KijAS6Y5M=SjfW~Ls^KfhF+FV5(Y6QyE zc?s)#b3EfV^*>0o+GPjcWv0QBIAdyGKLJM#LxvvGx~6tKMV`rUKLCq!>QyREfmOYX z*bHMcmT@K_AWoI`Q(Wn1q>PwD_NBT3f@{iK)OkR)8pS}p3nkHt5M-4s7~K>c$_1`% zt~N?8mRM8b$w<87)Ex1N4GHd*ZYX^~d&Sd3aY?n{VO?niQ1!MdGvG9&X}~7TX~2{F zG}hVHlABmH4%7~GvOo|@8wmsjdp%G! z6z#YQW827vyi>*B#cQXbQ2@I6Zba@9Uyj%?!l|L|tEM!`f`#HWRBLFIB{j<5|JGf6 zU}#xv9G|XVda;4T`q);u`Q@WGF zp6zgwyC|zw>SWdEH!`1?hixv-M?vi*cWVahyJYS4q* zNFhl!j?Qye&6V9~&2PUb`Gtyw#-yA@A$bkzFgPi35$7`l$C6!)dY{DSUp*Uej$`FD z@#3m!L`lY3mh+K5!t;n-@sl<`o9B>&_|lIruE)JdHec^}*f#XmUxZ}ayxMG*=Tdoy zMCLzd>n{)7b-U`HZ(iCjWq9MmxIHEhh?-V`GwyfKExSCaFi>Z_q+hIIzjF$Lvss{e zCu%h3Qp3RIIS+~FHD&Z7q9)bpVl@R6k6r#dluh_p_yRD?%AdiQUfc#s63LlXtw@=o zZejQj5P>Kv+#7mflz27NL+GvB8wz3wy?h4d@v+Hwi#h;V(c<*CRzW__gx1e%5p}XN zTU7dRHb=1?nN)4@P-!G6j-!E%Lucr5*rIeG5J6%aH0Ar0Ra_mUoM82V*;G9?FZ@=T z1@^5fo+fP%B{6I$0k@Q>8`}a7B{sZM3!1{POGh6j;LV#eufoYYuL=2|Sq6CQn7Ks_ z_>KqL?*yJN!2eqR{!JkM@HWPoLaW)i*+Jp+p=$zPVXsz@-nN``!V~e4m9M-HQk(x7 z@4ve@`^kA$$=G!ZH`%ZCZP-z44%Jt}R6jZqN3e$Vvm}Lte^-R|Q=OtNNsY;*fzyis zk=1abPr%*WZ)?Y~&Oc@6$kw4``VBSPs(EHjDMChZ^Ubdan)#D8KbBnJRWS2-O&-Pg zK!x^qLEz>`#50SzCi~jJx|2bnOPvba_e;e2bk5&I?RKJqh?;^g(qXfB)gv}gemn2PPN@;Z)!egW^8|Vh{+_gyHIWWSeBY-4b9H49gLpe2X zFmUxwl&2tG_dOJ`A4{Eq>OWT>T%u1)%wn-d72*Q1Z32N?u*0s>fNaAdckX~b&E3b zHEd~EsEKSU*s&+M+_NYZV z`CT$s)1w5ll7R3{u|LP{_%cuDva{*YScbS|G4nW3C@2nqDAXWGId;Wnp`9pMNbE5r zcVmoR$tcOy3HCw#c(MeROPf5i4FtJ&qiZ(hC{^IgVf#7sPCu5!8!vRVHJ2&_7?Z8T!umk2O@AH>&oQ z{c;8c9)Wmi>3o8MI!o48?T#D!QpRLd4bnEL-jcPrdqgSsCz*vU&JI8#clv~tXZhCA zfM?O{+?l2AY>Ews#yp3`Yo7x$GQP zHdVc6TGxjA?3~GO(9rF36ufA#2)Np~u{W?fgOwu?=oY-(=89uw64U~v zAl%nE;RG6q8BARQmKq6Or+p2M!QF=1!b}F?N5m*1!PLKfAO)~&!z3(9YQt?Eq{1}Ak7Hg_RQ_eu^^#jFPCMq2IrKF3#x;+fQ zbHogS9nyh!O-o~az)0xX6TLvf5zT(^jLs6j`KVR(p*6~{y|KOJiT$gD-R7UaLJA3e z0Ru)cq%nM?WU?5s0F(_Kng|Pdk;iqg<6=osZj#~{?PX(_YE-P5ESfNIMHtb<&i7A{ z_!{al7;iXp6~Cr(PK-e>NkICC3p|!(hi<9+i$WA~u`u@Pa{c0SdJJzXDAraiV+*lO zydKhcy=*3jupbRkHmb}}-zHdoMPW|$0W46mERY2*R{mq8avF4QHUWj-DkPB(nRkLk zOig9N7VuUhnce{5zY6rgH>x(fLAy>bHQ<5<=4poUG`poF!%fg;RDi+8=2mCa-&T^f z7{2wlPBue(XEz_-W3aZ=Os)8(rI%jOJ&z6W$W6m6byxLJy(X(?=090^f&`AcwLK|u zk*9|1&HEUA9o(b-yM@xm-_NJeYHtqT)U*-~*FecLw}RPQf(6cdo%fZ_m+PTy#8e<| ziOG*dfV4qQ0co+&FnIo56}`)CS)A9#TJXO27qE4JX8l4rq%qk&Mt)N9OlI)_ z@xG7RlC#d!Myz3@5M{QI+~iXVrE!hPaiu{gFlyml%eWr;6&?qdNz%9wf`U!7f#{10}i|bzgHmq zSgg~#5Lk=U5pxVZIz{;aG1VotW(}u}IL(&_`){axRm9p-2L%{)p4_*?4=!Q*kMk=? z1#ISY(=nd?4Oy-vF66Io0hZ1i`{tGvdzI%T`&hsh<5!aWVAd__>_}tYhC*VjQ-Q#b zFMW(W+?rNRvJauIkMllZ7QtA2d$tz#klZc%2RTaEPSHbsrf^KjKgc#_hv}uS))^#$ zmeweZI07ogQprz1K8RzqYqPzhswt+D*Nm#+Qh_sO{;eWCjZwQkt=KnZ^cZz~5 zyDr>pGY0@G)(85Ad32lMh=m^o=+#aQ3fkK!bxCE(^}So+ec@JHBDUX%Ugv5Yrj^(G zep8KaeNM>T%2oI|HL`YQL8Z-(ndP+MYD{dXj*xe<+Cby_PN-L`doWp9HG4#kP)&5I z-uc|EIk}f}Gbqa$^mLaK;1;SU03Zfs2hWgv?4i zixI2pFIil`D(4cxjM8vUO7A9Z{Y#7nBS#ghs6TW-s(irZn$iM*m&JT+lbR4Wk;G4D z2`-9_X1}#&EZ=T6Vl${Q1+4~QGd&m)m7XI(cPX}Ti3XHO= z*UUHBa041cod03v+*=^B?({vssOeQd_Y7YjW*z(KQ}mmE(t_jz4nv2Yn5AKVJ@x8| zL+a^By<3;l5*aiiRNPHpK{1yyE;}YJfXW1QhnS4^bJK5=<_#-uC>te-da--T-e=a) zPsRs@UT9<~d0t#jn?k>y^=5VtH}Ut2v59A|9sGX!@wp;SFp2tnp~# z#E^6s6h4}(*iHKjtQL19S{k3_zrueK)+p`E;>`DDgyelA0++SV_jw*pi#~UwbGswo1#P;f5`<8F%t-3leEO+(N4e1j!WccPgYjCW$7dtY z&vUuau9Fhz&C8QU;}3hXV>25Lnp}rCI_Fc$Y3a!g5!DgLK2`W0ys3WhP+*VG-CZHb z^sIAATz_TG)e8MI+O`o@^IR545n!)IzJwrv@dcFkBO@wZ$|#Y++-OT|;>2U;F`Hja zFRD|%xnM=Z4{a7W;Zr)WD2tQ0prw=G<%OMK9*-ZW9go{{f%$p^ct4u?3NyL{JP?c~ zAWY%%Bt!rUl#~-CA#{O&C*jar>5|n5XhCa)sSFlTQ##y8M1pxx6J63smjuxH;0DNB zrPvQz7pNT(siI3fgZr7Q2|!rW<-JTA?~`o`^=YV~{-k8L2P@pD8{yJ!(k7Bjoc-Oz znYh`7H@`*UfRLpePy|vVVI#Tv|2qDv3EQ@UlDjb2^BQq2Re#7qQJ5%5f5pv*oqpzk z93(AD_NlIbY`bPzM7i_6J(@dN+4Wv;WRilHNd=Xwyl_4JNq5hF%?`dQjDo2LZn_6r zy?aCTaVspc;@CvTZTd^rXXCQ>b^eXh7ZS2>kYlO%ns=MvN0b8muz!Q=&U!D5mz|Ka zZj`j649!^r~Zhp(!6gr7?LazdnKFnf0?5!f^#$ zYXl=%1PP2XjA7gtnsGlhSjuF8loN9v^d&b)m8ge?fQa_#;vY_xwrvf?x4kb+eTdWx z+w6*yluZvlLLcnI+ow!R4>dP&pSGYR7&m`T5kNgW!i(%yHlqh%fs|dSGNFwT4bVV? zT&|XCY|5d9w2r!egdQc%+vBVy%BAg~_0pdhpgLo2P+2(YIXI8EWyOK%P@vTNBpgsgyADCcxbyM7%onL3LY9usfBWCC;YDUlgsR9t4ot&v3Am-X$`iZU!G_=@gO* zijAge;^dG#6ix>4e}G-5Pl6D;ZqjPhm)S|&fV#p5y}hI!^BqvD{1RYxgJJTzxG4*; zP^bDrV~pnb#2>6YHL+K^PMB{|#_#I#&hm8Pt*HpR#LEF!b^RY4iOj z^Gt^{!m8bVs$u>pdvEUf$e6r)TPBLgX#e$P7@ow!bUmD1vX&tY zHxdxmA^ugUCt{nRG*oq!(F+{d<6e@Wav3{s$^{u=AMKLn_)87IQSk~7ON=3!#5wCw zhJ<7&{{xV*`78X8N?@n*DNT`JH_)RIPq7d%;iILZ91}w0fGx---Z^#4=S z{(t(r|F7jCOPCxibOp45)ntiCC>;W)N&aJSV|fUfP$QULAE!sr`9KM_4l8$DM9sdZ zGtv1TV1D-n-46CT`YG`Jhm_AjeVjO-2#)D-^gq5X&w${k|C>a_0-V)|22@wzX2(sB zWq@z>GFn`#>ipKzAi2|F&`r>Je5a=kBP8av=!C}y%b7;=@0y>eM8hg$EjzIgls%jN zjFb{L%mvAvTYHo{(QxDn^i3dH>{R`ws;e$LIe2a0J>|_?RP&Brp!vRp&2|kRpS-P7 z;T%ODAo03Ld#g9GCn}fmP3oHuosZn+zs0jqBc;hEprrCjU+jxmDSTtWvz(ZcG*atx z7xbLL>$}6u90fZ#J|5d!uHNnqiTvB3lUHg!Y@9uED)k#X7w;t#t*6i>BM%CtUd)Zi z!7+ZsHhRuC=2Z~`AN@U;eBC5ve|Y%*ZUc~w^Ov*N+y%UOCpjPcM0A<=t5^f|f@n<= z(G_MBBU=WqxjIqWP2BXcLVu{;pkW+!8*Mj}S(8kVq3((u!_5ljCJ`K-vfv~n>=;I) z*u?zy=(LnN^BmMQsllz5tO`*5N!C^EL=PyhgDSegny)ed$kBgSMDjFaYpbXRFunI8 z&=!zP^ajyLlRI#!#3|E;W)Vi2lmtD4^7%xJt>YwpT|8NrqX}62%ryj4kWa;$CF%i^ zV~ihE+F3CpE9NgwSj#UfONl2)1pgL`pI#E7IoJE z+ku@)(=G+IIk;`Sm{T$ypa5UWko1^swIg)x!}efrF&nT`laKIfHhojD&O z1Jkcx+#6hkU~{?mZW1=g*7FL_ecfT2XR!6e?iXH}mQaf!=WxqbBhtQF4Zm(!Kbl#W z)^gM{i(EhY--(yz2kqJJYV(T)DjSe|nWUu@330hh462q`O|b^+j1K1z8Y3faphOru zNyajayhvLRl`1^RuhEORhT^vT3gq2L>$8gw_8Wx^js^0XowNS9Bcd77MtM(IJ;mzB z!26wETyRtns3DLUvtWtHaH?CpO}$yd;GpfXfBf-NZA zT4LVqVgbk$NzVQq4qEtZh|ZgE~HPFe{;G**hA|h zuAy7{!CFzLAyt4)_T@Gz~{S29|EGJQ}&XJGc61Kmf}F!*~Up zJ>euhy@*Gq*wXekuBP34_N_?XIn_2`&>`_Vu%2V+#RmHEkA^daVC?hR>$&Rn2#3T0 z;+z36yq5cW%mPmzVR#JEo9(tSyoPAwa%F^EaJaRtJu?-=QD-OHdI{1A z&!o1R?jvY)-P=>Njf0$UGHHl|)0?{xYF94}dy5rZa4OySHomNZ#c*&*B)1JMJ$>|O zVJRFNI1-&@ldO0qQT=kipJs+0g_-jbD0ESXh5Sz{{{UJeW@d%6@|goJzg66#EM+V) z3nH|YJYwW+?vH?~wT49v7&2Afav-TwUBKy4W+2B2$#0lHHzUy?ob3F>oU?mV^(hZQ z*)2s(FR!UJ7jF+cNgUZiP2wbQpo)J0QcxUXDb68E$VlcvI*?*uvlDB@`Gm<4x z#BHn%YFIrhYl;i7j+}FEG0@9;k@Uz&@@M-R_xp`QJ@5B%?F~w#kyZir$2MTc6?lD9 zOi`ix?p}dC8=6%aP#aUXW3ce$DRwLWMIENu& ztL~NArU&r;CINj|<4rK*sd@J2%m~n0KGIZme`Ttw-kH}>fqMKmCRi5~*oXhFSPrE+ zvwhgRkd%K{Y$N7^5fJexkZ3j|DG}unu^&2AzUXhkzfIBq^o5Da93qCkydAk0(GlUA z_U{Ta5AajuKcX%mC?sE+wW6hzHCs3kDnYQF8_zB`Do%PGn4#}gQ{OF zKiXWZJc3<0HwcRPwi%+_w))={^#wJbVdmnNU?pSt-xVVfzXmE<^GntsOuVg}mjmG1 z96-gWfzQg#N7F^IOWA+o_vO z-w~06Tq}CND_{%(Z7mao=&F2!!$A}F0FqTlHCN`+tf=k-j@gikEy3u4mB?Ws<;38Q zgzcZO6Q+`%&(3bQr41b!_(@^(U-R+0H&Y=y585R>$WKl{B}~Kyx3Hc5e(sZV2|#bm z%y)rT{?>BwTk!j19^FS%G4FrBS0FqGrZT2DL16xW&uzTtdA7*hNb|(L`k|!SE##87 zal7t}JagbR;I~5lMO3fp^k==A?`X#F_u63eX7-)g26KH0Gxqg!o;(WsHZi?>N(>D^@|8P0OBdD;HKG|V1kOwOQ4pciK8EW4L7C}JPpBH4Iu)TlqWY2QJm5Gt z5*FJYe!LbmD8I5`H~OhpNny|>Mt8YUcRCr|kJI;^*S0EFq5cEn&QJ!UnW^#D2NU}N z&`#U%h5xOUkzhm0r(zQoo54u5MNL?%vPG^X{t%x&Q*6owWd#s3q3hs)-&B3XwKRd{ z`)=Q^{_1u9CHFEa(>OlY&+TnD4leEYJ+>U_wWWxa-Di2C+WUCziN@>q{5N(KS^BEd zq-~g0!mVB!L+qfC!*hG&ZTv^uLynomho5{i!Lb^?=T08Kov`&xY+*+rA#{^vK;f46 zY1I0ER~!Ut8K-R2064h1r*^>`7!n`_h(Fvhin>YZIOrBrs2TV}ukud@u0eJMzDfXDKpp8X{OXjxYqqrbot3`%6S`=o`Pc zN|*+KW+`(+=up12G()w6HVF_q%q@X3O z!-5c)6QXhK6UTG-`a8q(l|H-b$v3M#10wzK%O&18ZQq9Fn&~>LS7f*J95upt22v`^li_5-f!W6I{_dwVdC+oF0u~cN1(JK zPCu;J0^V_5|1wh@H3L~SnGjtjW+Z!u`6+J7A5cLIdB6>=Iq1chX#G6A?H95@X#iBw*O$l>{t{NEY9~k)F$YEX zrb+Y?60ESLS|Py_;8#GcJCIVC*-dN_<>1XBd$*3Ub~8FW*G*o@1xNw|BpMoSMK?>D*9u7Ha=!Ho|DsQMBPh=xg@$+n~8)PP0Y++WK)kJha`)7^sYmkTlC`%D^8j023-RIC~Fl`-2C_h%8SGdFka~TBc7lM zllbDx6%IoS?f$?|NYtVJ1TG=Dvtr*c)nm`Sdj}%lmwiDu;pEDaAmp4x!JM>~hay`f zn}HD?qoWe>02eq0em>nhpEXUMToimuTyTX&orG1eycV0oJI+el7(hmrZZ&>{oy%T>Ow7S+GVH@lBd^TA+3i~+acB!5D-VyqUg%cBSgqRr4igfb!djq&k=Sb zTC$(7_3@{4huVoUkSKWo;nc*dbej{ixkjTYwx<7q`l#N`@YoojO$;aw&5=1(;wCI= zi!(r4CE^U*W%fi1eM0Sj9YJGN7PLPBBf_hi;y=w4{5KJ`gr+bcbAas+(zHqWq3`dc zL0|X~QU;Lq%%(*~)u^4S8`jnp{&l46hE2fxj`Cx+r;q7v@w^M94Zsb*uZ-pB*Dt)} zZ+s_!6G&QvCvG@7@_0OZN3x1-bdCxYI?VbppIg1y&02TpkBy+35>g(|(7+eQUFLzgTGu60dD$4vlA5UeU1b%=YcaW_I82QnL)SpF#3JTe zM|L)`DZ3sx4WCOr3PCR&RHUSQ;#R8qAi0I!;yjzJ69w-)E}3P9i4UPv|zpzDaMX z8?F&(F={;n;|437aNk~^Idpv2t>HT%hpphH$lK$lbNu z1bTiBjrFTIac2r64tbiqc7&dKKFtCaK%sQk<}&|+fHYPp7~*a|0qfo~yb(K8zs}iY z@PW==-dskWicZ_5>L)gn=4G%~4@hjVQB74?gMi*}*C6F}@WgA%$G~O`4&QzdGnW`m z*P_M_fS%8|W1+R{aB-K5xtslNPt^0Emgi0LEmylv zJa&-e)|Wa&9;B2_4VD`oJ^#vFZ;jQWnpNJWckXxYZVL*$KP)p3-5j_3h7G|<_i8tY zAfOLb>!Fh#5Kf-1ENI3emIgo%St6$^@6b<@u;@Nz6KxY}(F}}(TU9Ty>U7BtWhsEv z=3+I7C*JOtl>)jR2K=qZ&R5<9(UM0G`)YR2dGq>42iY=guB@E0Ll6UpRXAXpDA z<8rySR1)H)_!(H5Jb|!Rv;az})dNT+WFT4QEpVpk<81jWutVOXu2q&3PXTv)vpDmi zW8#~nW6uCRrV25Vewh!0z)B+ZxT5-za!1PQnk0i)<0p0>#XCWjLjCiUgP)I;2)U-U z_f#V`Tn9sN{&;crD<>u*`GYc|!ZiEwu|tLdC3h>f(|YYYBV*f`K_P8(yF)MyBCGDf z(ARfs{nV=tu!AYPEa zKa$I)cRBLn0Pc5>LiXhfl`NxAtQ2(;H>>nwEAU7o>!Z4~__A1!x(x!zSQaqv`}-DH z21X3HYVUi9w;BpKw}JTP>)K16lsupFMS4MfPfKiDo9krjldDSuz$U))I&AN$TO%|0 z(;)p^tuJXJQs!i`T|QhJz%uaH4$6u!>T#<}PP2-fbv5!i&zHcQo#HocdZ-Xh1xd<_ zh2Pg|a0||W33jRcHv|J?Br#WL`X6|p$p|eT804zOk)MDoDrD-={sfMX#cm)-@q)~| zF@`9y86>h}e1~cK0D1ShvVxO_50gyBCg6`&{~&R>D1<3?pcP4225Epyy(L9Ql9U7@ zyhyR3 zCc8QK?dOy0Y7Z9K71RaSXR+3MYn=6~_0ZOUmFRt5aS~uQrz^`*a~9PAIR|b54JcUP z?W~YjgIg#U*Tc)9a}0WMKnWezf@s2C0&Fw)c^wdxSk|IHkMX9<#2m~O)aVkd=me<` zyoDcPrm+Qdjb@PvHDqY%D(umjmOTk@L=__-oyLq~_O|;^)pu(mQb*ra(Be{_Z z7pfof`!sJ8Y6$&outK-NJtYZMe@eKA@s+vvY}}mUjtGu)d-}&7>eVd*e$U8t zZZA^I!i;Yn{~&p{`lGb=goSM9=lYEL^*^`O9l2o>h~HXm5Zbce_zFw!Whp_;D4!p2 zBiN$HVg7O8Tu`w?h3@z;UwWxx&vj_-o5g+JHQQ8`hKnL%ZV27l0+}zcp*z#5S8%E= zvnG3xU>JPS7?#N$ls6Z6af@5r!00vx3gSo>qPpp7yc42{&wx$NYS)}*t5fz%TpoHW zw9zQ#O}uXdf|F_$3%5{zu>&Od(8O%!A=)6(&@r)?+4S!Ubkk6$3a8|v2PEVPCjn1` zcv@=>eflmPb6i;>4hLA+7zJ_HapFiNv8mL~ES%mws~iD(+J*b&G0 z_Wm}U{%NMO0t@}Ejkq-%TX~H0Q})%qxVx=<_Pe%k_%`Y(Xy?A)yAA#eG2HMYm*S_$rjW{&Ochx@X zd6!<*X8kpyRoP??y=KW4z=YfKH3JHkpBho^p#D0tBt|To|yj5b2$aGKw@~p@}gWWdH>s(mNSs5CIVt7z4&+lwNa&wn|N-_emO ze1@1jB+B6p=n^eQiH<;-)`R~Z9U?Ugk%3J`qD0i^31o4AuY!VV*wcr`0U>!d1YQM( zI#wa(Fkv=Oa=0&tWKG!hnSGm9SxgaIgE8fANwlUn;r1tD!cDCL3%IX^ldn>5&`hxF z&u_&{U^MLKS|QDp7L!+5Xjg31N*&?2&)++MU_%{oc-!KWz+(omh+xuBXrf>r9sgPRS3#=0s#_(3II*(fm#V#%}tacc=BvG4~^ zWRWagPQjjGWtK$(rRg;)jAENP$XkFK#t=Rvz;1=tdVt7lpc}7xL~@y(4zxuPhkhO< zCQAG`>!+Vd9u13jWzu``nkh`x`Kp7DI-Wcl`=<#%dsC2b`M0$}ec8)hJ7ijLo|v*t_Vc3|`tBDtoYMhDh5NjzEk)RAc0S|Ihcy4_ zf<{z~YQV1`alEz0_0(?B-nM4l^DFa19H084<@%h8eFksQCNXHG^f&3vjC6aD!{O== za#Rd0uyu8R)MqsM8Ln8pIYE>V(7ze0g?8<5LM^1{D}rV2Qr~#8O4knJ36L%wCdCs; z5(`R~J-Nq`{EL^LaQPZ($E1QoZm9%H1bd1;fh7iPG*_sFx5m=MYyg<9@!yFDq!>V! zehOaH6i^o0ukjGsEajA>+^(JDE4WSI^zf7Ilw_Ks7XOgqNK?o*NgH5uo>km`TVh_soe6eUy|kKtFR4_JjJ8|wyH>&Q1v5s(%QTOR zGrdPqD!#e{bJO{XI6I&UatA$t9?=PM?Mb6`t4%0*-Y9dU8y_Q`RE4hl^zG}Rz z$I4A=qXf$fL4|>w3IoYgQYnsbL&#ckm0FYDQMYy2CrT0m;KOuaI^s*66mRj`XyZn> zK6vC8_^Obfuh5gka+vTApa@a_s0|15h65ysEMk(FrACl?joATRSo_mH3i?zEU{yGg zZof$ztiR>67C+KIdhk@h=6Sl&o4#wbeo>?9!;1J1W1Fo zq(pMhFW8tTii7d(3Qb9P*S6Q#xMhUm)$~Tl;T9s7Xif)dS&A0Xv5qv!6qgtvJqCO< zS0F5xY&x|%3VMSa9^V-I3m@J^YPBIb$o9%hWtLa;*+9D|3xjV7$djI{w>sfiBquSA z4j~pB1uWeJsxk3bAm^fqs8^9HL>F;dM*y%aLCo$1yfPd=ZV!Bh`xqYQoZjk1evKbG zekyruS6Y#hrGJIFcL_jTY>h~Nm}R3~liPcW=Bbp;%%`8zqS%Umq-WFf3%^?IzI<@j z$)?OFUb8Z8G@yB;&WC=qDDKpIVFp_oekC}HGH>Ay<^)8SG|}NhKLPcBQ@j~steiu# zZ5~{?g7xbFd?l*;5b@{R%DGEtn=Gh5k5M`6imaxlQUA5C{fcoRXl}B>M+YEV!wC0pb0UfSgh0oYY6o#B0m; zr%6}lr{o-a-YC(MPMF1wb)e{R>w!3M00C0Zm$o5=1}x>`AL-|lEV%ax<_Z-ol+cW8h zwCfm0BzfF{jti);lt#t`IIGqdWVx50YQfgM@)t%#J!qr5OqbNz*qQCBt9{T?wZkdB z6|%da(YklOEfhO!t1GJ~0ULh%+R}3|@+$HXf{WBvykR|zWI_knpe^xwawYp~o;SwE>kC0>3@NdFaqrv1LtUGeUSQ61oh{z><2dqxEiV@QO2av`s z0YU@S8*x+!6aiGjD~BMK*n*3n7!bGT%ap(>Ve%6>+e`^uR;f`O)s&Sqphr9)FF{+1 z`5C~>wb~+0BRm=c`vYQO~?1?sgOP8ar! z80_#70t=G!Z!F<}7JSM7;n)|%wlkrfwL$CNZFdu#&#pQDR$n{+o8z{~xyhoem)y#w z+QINCFPr`5?f)U7$2ty+uoDAE$B7ouGldb36ACzr1@H95- zjRxH=T3m4QtmikDil zpT@g(DBj=^U{T`&hLZ@T%H+PMv@)9H*=m9Oj}AYeSWO&HxsS#Q5TMUf>(W|SN){oF z8xCU|247gQJ-*(p)mts}=fo#^iAPd!7Am=~^t# ziRwPJ<5bYEw3Es-+E-)Hw`*szXRl`kM8w*~c<--tZe{QeaQ&*S>MF2zRjogXh16b3 z(bK*qHS#^6<=g|`keKtFiIEOB1VKHNjj*M;{0~`lbgVET?>!)#E^V)E&ue2&dWy<2 zYFWM3mD<8fTvPmN#F#xxnUD+=g^r6#(W#PQ7kCO$@kTLTra-_T@K@&dOx{L}mHr$$ zkCb?Wj6!~^=|FauDXD)FG|*|%=qVX`kfbp`Od2vn;B?~xBlTf@5$gLs(PqkV&!@!7vb3?FxVUN00os+8;VQJuZZhx1F}%eLU)2%*t&$ILXwl z)2ZKw7V+XXy}2L0_Q-2utF6aPT4qMUeP|z>?fW6i`9_t+rfhm(#jH-1Uj5&DS9Xt= z@2JP|Gs7S>xdqef}Q*zrPF1g$YkbGd$7t+tB^RreuT{w}u z2B)Pb9zSjK3gUE`52bo-iWr{sxdh^?zNM1}8 zR^ob*dVo&r1V=s{??p_AMO8Nhjj^KBEy57=1rfrC(B2)`wMl*#9BH`7(0F8XQVz2L zo!US=+1vroNu%C{fD}9>W{%CuK(50L#W>4^_6TaKPXNdNR)RJABp<%3=XGv|Xe&f) zC7gee{_^e_=fInZXR8;=jLsMD@&#j(SVng3*PTl`GkHBx`y}xxBXh$uv;u#cN5@Ce zPTz|8!RjDoE2p}y%S^Q>-w(4~$K5>78)b#@r&9u4{~oSivWj^tsX|WqWI5LXe)hij z;4=#F%9a{?M)>VuYrUh@PX7+wXCP~}X83Lr)` zN(0V>x^u`AR8bBXyUvPGJ%+3}l<`MU$aEN<&69@5O8^k?k9)B5EGHCE1a?d{VWXs7 z;qOVWknNYaV5meI$8YXX5~HTHxfqb(mnuMQcpHb^h_)9}CpPzq$}>|8S<#+|e3C7k zBTXay-A+;ixvXcv$3@yX-u1)6Z;|^YppTg_2k5?}30(NKL~Y?TOE8fATf3gwE~sy( z^B;_@{vxsAFCV4xU+Vm6-se40^qWpkMi@q#GeyC|%8;>a!&CBsq{WH^&xdV>J|)9# z$9Tni9x`yZeeOR9Df#sD0bSW(tTZGjrRH8XtOhEo5y z4q!31#z9b7eQGuA;xU?f1?xT15!5(w<|#8TDTS>5W;)y@wJH8lmC5UsPSOHyNc8ks z`(VnIpnx)+=HY*4a{zr%e~BzcDJlL!YJgGFw^}JDl(5`)J4dD^UA-g!lZb4ZM?NgO zAy`06`t_0#GL)picZi&DXv*ud3*~3nGEOqI)_d}0vgA-;F$V{o#p>{v(uogX!^x?c z1adxBmmG(jQd=c};xkO4y03vWOx}1Fv!CD|DWQPTk(5JjUMpT1$VM6hmH$rCG>`&x zC*^e6fZ6Z0zSVQk9-5H4iI6PB7TPUgMat~u{74%(F$uDAgl75*wnL~)zZ2jlZAb|C zv&QPiT?jMic7T3Hc!0>UXtca?%I-@3>cr_C7YLsBc5YH~VmG|ADmk!q zmtI|p&^sVLuu5(3i_aAfW)(XFA4S~!Wz^M0-^R^&Ye1HV6VZFe`I+Ez?p7BWM|CZX zN-o3&QCjP_$OEgQ%Rd}E9PV;Gqi^QTMAVqMl6Tb}=8Cy18AY;@ccHxyKx-mIFJ(Vi_r3Ave^*ozlI8@#Anb#O~u^ zbnyUQD_NH5cyf(CWI@(m66IW?GwA@)5<2~urPa!Ml7gQs4;UqFCPqW|o`H&STnMI* zU^TcCd{-1D^da$>yto5(3EH$8H$wEgOFaFgL;ipmE97r-5g|6oydhL!tfV(5SYAog ztcNK*UC1uj$F56P-&vW`D!nu5b1r*F=iFmqymNrRwNG6|8NTT6l8-?(zW20sb4pE= z2sV+%nqgaND?@^cwaU!3U1Dg-F`y z8LiAIeh{3`YGy5Rk|nrMIGIN9?3Y(3Vss-2Uzb;qxwlgrVuiXC&Mx>a#>S1MX4|#> z;aNh^>M+a|EK`t5poGJ=u4O8aa6&H?DZ4DJM@&#wFAtG_MIpe70cd2kz;!$J-}hh6 z^iC*;LXI6M#H*wrw1}tVRZU%H@UFuLxGWuVG`>)Ql-~v6o&9_sS&L*2R4e_r$LL~& zT7pL=-Q?~bpLN~^d8LsRnjerA-nYBw^m#C@KJ&T(GKjx<`zAWVFlxJR)-hqs?$4)Y zJ=I?NdN_rLUB8{1|LqA3>;BsPsv_2@7FxC-ec88>s`2N?r&Sk(((6 zz;H?;>k;a^`Pyhx$t+INmub(OrsMz_e*m$ zRmi80yBqsfh7ya8KjH1qijN#b#RLqcKKR_2U4OJQ^6aM)32f3|v|HdEdju!YbT$6`;>+Gu+`EOEuTrZl&n*T4!i3|YU0+Xpea<*a*>F#{|!`Fv#cArhsn=R;>--ZEA#I*vWw#zD#^M ztkkiI343yYK+ujph$1@bq}w-@Ua97PEV^(Hmn?|wp{fAoj~dvWmG=ZW&nT`6%g38| z3{lurq6>bkjSBeb!4M@s^_T>c7lc>265+T`6#e;~V~-znsmnxgZM+QeBU_W`T2b>_$GA1=)mD=V9X zUl`;J7w<8^-Dh_M&`gkRMM?GCT{S=|zpt_+usL+%MkARGwqQ>qCg`igQFLMx zag)3XvzfSUOtEu%G9ItFLdgVUu1%70fB5SCH{tQ^WsVAm5wxLDuD8q$dK8rY&y&=+ z)TWo@!)?5lx`C~Eduo0gzFewvvbFGs)-0=(kHh&xc5}Yh=pH5Jt(L=d19ruZlBg~B zxw~txE*yNh;M|gG1^z7E8Dseh7xJ=}Y3XPYbLr3jx9HKJzp=ph@*mtag#;Oc`bwJmtgI9X{+l-$lC^&~ z_@eT4zMG7s);ZSa!S?@dFvl&a1Lp7@@ZKBUDB1HY{{K=PGd(vc7JwJ#&7*Qf)Bc(P z9=QYXXOZA$4@mpNWwmzrTq-gny`(IC?e`AH3xC23g1#bce~^hdfmRV*L~jCek+q`t z!}cuwzPoVV7v$2%4$QjVo%E+>K+&Ro#S@n~d2FZCS0wOG=CeK$OetNtsIhaE$1colyLIu;7q zHM$BAooAc2Xgba`gEDX2_1_I{0|HI369&>L^6;?2Yqos>uW}m-)X!|o?} z3$3K~HyQ>Owq=`}8Vpngr}qO!xVXQzg85s+UH%t~4Ftd5a58(_-}_nWme4d%z}^~D z7sW$m+F51zytG*Lp!%bB3*rZD`>G~OPaHn(|Gs4RCs()d;gX;w=Hi<0Inh+2CLm|V zj@cnKal)ibq&oVbV=mhIz5`Qu<+lj!p7cGpb~Ot-0|ae}xFaLeqs){mM;a4vui>hu z-}k7L@VZ!d6@tZThGez}4})8v8(%d2!;rlf9&j2y3nFG7-Ku>%7Z^B%C*0^Z(~q#V zXBoh^*M5??U+r*ccf0@+Hu=Z}U#XZ5Mt#_Eds^cFmxPkDz=Zz~dwEi~CQk6q z80^;fiI5u<&u?FuY0u~gse{dds(>s#3OsxXkVd_z6C*x4j6!2Yrm;M}S;xMHw?u9D znKNOk2V($RFerIQgu;k;0-&EHN!^jFK~kB6YOz@b%_6(nV;k;W0IMY-`i!77zF23b zu-Av4eG(nw?@`qXXGtp0Ryvd5R_l>pnGI@>0dvLQ0Q7L z?GpeCO51D?Q%5meesM|`2Uw_{JTuI=-OE_s8nU?^fLJdBw9@Ny08dh>7CwYgCcUBR zcU%(Sb1^0uIB&3`WX26Q@v3gMwQi((Y40e*>f!wo+{n81S2px*xjX>S z%q_?sU|FO0U>~6t_2cRkuP1R?vM>m-8Ylk)I69UoRW=}1)s(zSkl&R7xX~qG8e*Lt zfOjfqk+#D*Tr)FhmR+ejD{770Aip8|)|BN^8%nyU))8vW1K+rkt0ozY%0qB33VtOHFTfD+bPH(_$RFdBTrYM%AAVe`p z)#}(JInWJih#JAmWG;ClQAI$}l(|7@RFuFNpg{U0ZS%B)L-bsR@BVzwQ{rHzMQ%lP z5Gt)CMmMX7z`n>qy%W}Zl%z1Y@vBsIYL_pdq>Ts9vxm^~6WMB}M6mXrXMI^I$viQ zFuy1TsekHZZ*UZ!2H@52A@bEPsH;`Gz4pv>91tNjU^;g_usPYRTog)?=?(WO2epHE z4ssMVpS+D^E_24%w1PZSUCES(yiQ?{_#V#a!J2jLBYrmqfMg&QqlLV91nOgBwe34S zBY?DZS(D&Fo-_wLy^cd7Bx1hmyVK)erlepIS4LG!dJ{m%jnXQtAE{UMXYgnTt!^+3 zF!6qc@0?5iobfI**Hq~*HrCu7bwStilu6ts+=Qq0?&p4V&#kiuk9zpeouWnF+pJx9 zouOQqdBNasB|}%7VMa;IRvRm!mCesAlJ)PeNqVpvClU+pT7U`Syq=W(1XsrhmJak` zc3)rf>tc`PvH)QvIUIf_ zi5C7cR4ciZ!@DI$8Nk={$5CNDjt;k3haKvCdILRt)*HiJ4-Quztpz zSWi`Nss@1Z(CcCzQp4Vs%qi1$6_eHBhXdV{w^&a>CJt3OE{6xA(xSx${H?^(5_-?_ z%c8JVSWZX#0Hw?^xKo74P6l!Y;P@Br%4?D#B{Cab_WaV)1ZdQst6?y+z6%_2)l zU+=R~NtCCiq1DYZ@?@pkqK99dN8U0CQ!iy`%m!Tg}X`$L!qdfYSP> zOryWilJ5PqBwn~Zx1idutieprpx=Jqp7Vu!|4Ct-+UY?{_rSj%)rFPoL4%0HCLjvP zTkO3OgvjpYt6<7W+6&D4+45Z3fh&?&kY#KwTGAFLWukSZM`Yxj?zQO+^180AAePy- z9j=z{C-AxHy7$VX6UniX&!S6L+rZcaUhs!$5`D3L@8u+wGs$p09c~ADt+H{2I`LA%!@+Lr+A4FA(}3RzxUh-Quo8e?@O3*9B$s{RX7H)K@f5}` zG7}h+5wNmI`FDE@I2lNx!vW_49WDGaOay_6N1wDp-1grqEML_oII+XO#EXCU`04p5 z1GlMU#_%Q4bqn`+Q0;?TW2#mlU{1T_;QCnH+Y!BV6 z@Yc&RT8XH3^R3cqJnqlf{kmvNe{212pWdg~r>#NnR|aG{%B#79itX{NmcCrzu^Y&~ zO|X5xS0>pn5}CcITxYGfjB~#u6t2 zVNZtyEZz(2#uV7vT~eNp_KFeN;=?7(ssy~mmtQmvZdud5#U{{qU(!Lny|lof+ClsUle(U3a;6c-Sqq;AA0 zSWV=$f9e=?kI5iz97khm1h*+s3R~A|EI8C|CP??7o6dv5Qs-1_51*daIp<;8@u8v< zBm^Q%*Xj>;RC8)qeLmA&)4R<%joUL+ndWWx(T~#*5IXEPL(9GxZ@+U3JD_%+cc2l( zW0XJ!9fzH77Vb3q5@pGp^stsJ^n4pi#33ivPRbjBqLsheD8ENOYl%@+j36~wF^FsA z4W#WK!9%mm=5Ln$3|;EO0{GFO?9d3tT;>8}0m8)*VrIMDfDVW|M?n1x&fI#hdmpR5 z8?Ks1Wt(9ky~@o+BIG$a6`P1Gpn|dV*=OY6BM*bTTFISWylTfrsTUzhyv$~9CUl_+ zsy5yL+5&s#n?7*iwxYuXxI*VO_CTh>9VbNqS^su*cqNN=S0M?Q!pp=9cbnlI4R#><%xJ0H;&U`>NeqC4_wcSl^Dg zA;vn>m1GY>j8uoyMEGL9CfYbn>Hu@t*cRqBq6-Lccfd^+@X`@W0YY5PwBZ=}^cQH9 zUOEaLD@D*yZmDpM!IJinPOB&R-HSA%6L#>HSq^`|Ikpsx$(`dGcWn4(Z({pE0_1 z+UTCO@s@s*L55Wdw#1SA6ic!2y+a1>L3TL<;a%Uqqp^r%3lU}l#gO=0<&scdZKn0N5JcGfD zQ5A@WDdf`>Wdf1F0;|x6;ALOd4lU;r)!M;Oax!VP768>*;__=>u7q*1Z67)z>(zy) z^4p3{GDmn2%$KjRTKF8wRWrk3aMQDQM&WR23}!_S8c>!d*j1J{d-;0TA(hYUS15pqn+(P$4eb0h!4Eo z)j~5;EwYI?KAv&6#xWFuusm8{7~eB=?nZ^*s{LMrhL@t~KyRlsANn=6M{7xf^YH3p z!t0vQRR5r*R9z6yngm-im$a+F3yQ^k=OSQU`vR`awr`+?Bvc-&O`oHFNNl>6OT0jX zXICBJWdT1^ao`DTnXJ4hoRx(aTm}s3b#d!`J**8c~`|T=x*5CERFppsmju9{*I0xaVR?QR z<|7a?-m-i5-DhE0TOF9`mvhtx^6@%Tt4(lC1FMgpLvEq}PBI^mT8Ak5+ez3lYz!-} zYA>`V`_W8SewP)K=(5@~oP*LHDJQ8i+04vGR5g4s2(;Mxq{#t_&2BHb~Cp z(56YeD%}T9p~yRsvkKZ%FGtXb#6t~(I8ATeGj0LZzLc>a=6HT3bG!W-54vf3pYuPz z5?#=H#C^@H6SrcyM%KuYOUZTm`>b+;TofOVW$njM;l8 zatG8op3?<{;yuo_a(Yu2zznHCeTy}MFt3CoBgJPkNm}tw5sROtiSGylqOl^#vzxrF6-f25t(O*`i)~$mu{j<4g!rxS zxKKe&hVF2>oWMyXyCPz#z~W%|%Aa!%Mi$pn-k>i_6g(;S!N zm#l{Q@eH+<)=UNC%&Qli0ev3zNgP!Im-o2>2^(rmz z^A%R7bWad>dV7@A`PY_QoL>?8HahwC3S+amQ5Lz?`PIJFJLC5^bS}r@^aC3YIr-CY zn@miawHQmKPOii2i`$(&&b2wWUeHPKqX(A%$V%AF>^_WFsHRDSiDB@Ox&-_dg)$KV zyFfV{Fgjaw7v5RUz-p1>@cL(fba1CT|be2U=dLghwaxh&Y`5lfOFvfv_A7mzK~Y|;*bdru?+ zem`vpXMxff2})z2L#z=ayHOd6U2vlqp8;q$6r_TUSHs3!j_@8@?#6CIZ)9LO)X8Yk zY%$SNj6~eK1G4sTytRUCFFR`vZo)AwwAFf8!zDt?Phx9{Y7oWPR)Iem`~q!>V+r zk!H1FU}=o1Q@Q(EV7{#C33zk;t{61J_Sy!m5}AHJ$g7Px=C2vpG!4C!=x{xIxq~_PJoNx^dzMUH9V&PP$ zd%JEs=UjhF$Oh$YQk= z`YjJ?XPc?Y|5RW(g3HSrNTc}8=u1+)DKLk-g-#N6st$WLKVr4OY0#nWNdO5Wrq%&V zi5gTOI^3SwdQcW%kOKMi`2R`sEyL=UMeQCb+%;5|aPyb_i-$voeNx};4*L7S!$zZ& zx*&g=g?CZtAFD~BBeO0Gb#*7xh*q9D6?ebx^fqAdsQb@p1Vn0dI{RMquMnnsMnbG81gn@Y2JPB=GySQhPo(d<2w@{1s|0)({;dIRrd)^bTuL zrE)J{IgzxP5Y`h&RsI!>1Qzh4T}b#&FUuemr!ya@(2_V75|2p8Jw_iIcl{wm-XmEn z#<8vBo}`KODRCc#b?R&D8=}2*Cjbx2p%(TSzZJ`Q=OGqix%`}Ti_8_K2I*DV`Xg%f z+aBnH6F&_PMH&3v2h7+JZkUkQIfEe?$}bLZCI3lfwjMJ z@w~3s=1_jGU++lwFY~^|DEt18(OdjVPaI|USOh#~zw)^jP~||-$KAeI7@Cz*Qpa#c z*L6JkdY2^fxIEDsG ziU1~^1N|oDVSaqwWv1w>GJ`JV5RHMU8>@ysE>e$Py@}g0pCFkDuO^M0^zpXgGa%pyTZ)w`Z4_EUE+^JNtF zMxDP&@bj*(vM>%T+G?-A__g%l2s5|l=xDf(wU_UGp^sBTjZ=S7{F)E#Xyyg`80@>Y zqqPaIDvz=0HuF{`l9l*jfAK+on!)I`Qs4ux4Mb4OrA5Ig-9PWFEHNk!y`Lltm6LDz+h%WoEFcG)VC`zvUhi zitiKe%G2*f8G@w1wLEgn(kam-N4V=5uuA;9!TljjP7tDs(_fW~7oIH}!I%3k9{=-5 zt?cmQA%HkSQMyd;(<}$CmD(G<$-kKzGIEXMmy(Qbv0w&1+WF$maJ470BIe8C2KtK# zk@*V#+{pDO48P<;vAu8Q?y;1#9~autJ5Qv<@$$VJ>gAy&^WOQC*6RMT9d@C=t;Yg{ zn5!gKj3{m+=T_N5^rf`gg!Rd}7in~vEqJe7BTch55!JQ~wN80iy_rL*DO40gWJH${ z;R>zoVRppvFGv+2c8kYdYM5WTQa`W1HjWLQ3hRqYOiIx9hQf~Mb|fYzCttoe$T8v- zT}Vr_Su0O|cz^%fcR2gMKk1dF{aX5N>OE`Xkhq;U0FVe{EPZr@BuLoD=3fOT|Gq!r zHGy6;4dme}_u>kwY$e$I-lxp$6=VT^>w8#RKvp8|8e2iAgr5n0yRM%}vLnW4gQ20{ zv)8j@YH`#_eQG84k>gUIm^z`h+68wu0#}M+2f^_OtSqVFmLa#;4dgoOXUWX#;;Rh5 zi9D1n;3tifI7B|sczp!11PP8k_$_mnCRx{JC7Zj}n+k;LF1?r^$2%;AFTj8U&VJ{7 zlVF3c_CpvXzZ9A}|A*m5+e7fK4A;tUbkSB;@hep=iOMZ_m@;m6ZV}RI4BVfUev{yP zuTFZ*8#o8<=@kYd_1=FB;N178?GB)Y2FJNwFO0ujwfs*JXpf*+g(?+V>jpad=XBXI zdFdB^)4fgi8v6UAXthONFKF} zb|i>#s?!l5P+M|`eSv5SmkSKEMZ2njM;+dcS}Kqvb6IWNwS3HXL=;>OMvT};dom=R z!gfj$#!hxZGMmx0g<$j<*sGJEOTke4l4}ETzdT3rBOc_r>E8{Gj3i|AVomKYC*|GN z&mdlbG_YG_M@KqTBpGZ-7M`uu!LazpU9-gZ)kptQdF2T`bN%bWz3nCbm8x%^#J*8| zlTIi-;$Q9Xwe+}fF6buRY5I1lTeCq0_D8?f;$RPh4!0dCe-43pM9tM+zhutkbMdcJ z1hpd-x2WDPI{T*BSO1Y&>$=K{j+mx&P# zGMyotf6#{o3-UvKUCt0HzZKambItCap4Z1{j4_j}&R1GQ_!ks##z8?!-(N~Jb#B{N zGWR&yih@||EUduWhDRLx<-w~i)a1#G+RpaolO@_rca_|Gb^cj~RtAf%TOIToT|@of z83dH=sysda>9UPZ!Ux^Xs!i&-y+i8{yH3I5QgfLVEEfS*A_%j=FCF@G{&r*@B4??Q zq)M8?K1x~~7c$QN(8U_j68nJs+*vS2#%Ht@B{tbx=YD`38mlAW>mPWB)c1=6%DskK zUwC4RFu)OpLwy^VnE|@j6$#k|qHvaQTt5Ak0eW>h{ zvL7WD97;Az^9yw|q0V8rm9<5742Coc0srsiW4XSJeEey>;~YCZ4+A6QbY*7p#w|1$W!E5ayS%BFz7&+;~eZ4HbFd+{l zPJTzUg8F*+s&K{Jq${1nLdHir0$gx3^vg8i5a;8x@!-ngB$u3@A&UYuvNrxRp~Y49 zb_mpr52*TW*bQ(7*Ae;95jguqfNF$PPoZoh=<~3xSe~s~FY6&c6Z69vJ_sbeAZEgr zj#tI<+!aI->%n+-D*{2>_wX683>18u;se#iLL*mPw23=;2|Sdr-=n8=Zb4i?Ss zC;heYuj*6dlPyO|l0$FVhc^1R9p`>%U5GmT%)8Q~b-w>ViRG&cV@_#odvjIK8|vN# z6>+;b6?-9@&0#1N0qMCf2zNq|I}X*U~g3dSc;T9vIg1^$`CFWk#uFQgDl|= ziGD9`>jFjtD$bDC)XgEM%uFDq!pUmvqUz87f`Z7)e>s&HfrY`T3DV)W?mE2mLjJsmsD~~ z%Jj9}+Kv`s8?J=;ijN7=LO02k;28Fq>VCxN%9PTqY*hH`> z9qNC=34JV+M$(S?lha@Z1LC0eG^e!Z3@RKzyA>q!5p28q)c_2eJgn zY^)a1Me?jy(~(EffLp+p<*Get{!NG<@5Lq$kB+xc*Yo@RHyB&>lEZT5M;PABohR&% zpC)*~@dToO+$pOoVcJf9l_s|7B~Z;ksLuT5gGWXxoi#tSWO)qrS64YZ#V@Qm4MdlX z15CN3)Y`Ac=#PM%sy9xOTS|i7uk|3N$e`GwXhskZ!`p$+8LyLy2f?_a>=x(+7iq#e za~YehE*RLz1Z$mH0h9CcfG{46U`k~%bXgGOI#wz<(3f7C1EPZO%1}c@tWb{XamMC# z*%PE(=e1mPtQz+80K7Z4k2>kX;cwfMf|x+{I3P7;z@70sc@o+3H@|gp+8AI~4Pk9? zk$Mk%auhbBWI)ZItN%CYMw^kOST{ca{sDT4dG?lgwd+xGPI_3e5C4;wx64 zPe85;9mcEHCqGaf(c5=o-#(2ejF$7-k`fo?#kwNAbSCnI#b`8vu#GfY&3&Wp(Lt6QRqT zWP<+5!46jeC=zw!^)M=r$6Fi2aDy_xGkKpH`<4LU(oHcyLW48Rv$snhrb^?8F7k>U zAT*;06)bVgY(Qfjd3QF|k$P?qWB>!9i*TTuIk6@h==FzC>~HLo@u3OORpA$fg0Cq` zg9f@<^P~DHdl|~)UJPL;ke<=+)7$x34d|mz)3YNJ=9Npu0J_{e0$LTsQoC&R9 zjM97$l*H`8PxnLA$wLaS1#zGJ4{APgJu{*7YXsOyeEZ;+0qI>{B}=ArrMe-CzZKi% z06{hWuA#i$A-?@!+Su3q22x99k^)=ubFO?@;kd8 zz8wvD%u&v#EosT$&XZ$(xc+pN)JlWs-EOU+V0vq~(<%V)RaXLZd?KT!)7HAZj@!zV z>yI9t!JtU5pS()`OeDiM-?65dv5Gg8K{7P|)ls;saWx6V45;^>1+rmjF}Xm@?2TO{ zPcm_ecSt^#36Il&a_}!P5E?d@9RljZx+)S74(@1ZQE*|D+^zO9aSXAvn$~7!nV7w4J;_^KU7^^Bu{CsqZEhT|L3cNipl3F%hYk%ng97dua%p@ z=F-(SYF+%=7UrCr<{iygVC-W#vgYwT{ z+f=mS|HIE?xAFhaKh5Z8{{KbCeGRA&|GnA?RbWm0{u*%`=-*rdz_9JBr_3H$y&Oa<_S9M<|D#FNZO=Jt+%H(aj~k)_*6fbKN!3LX7D%yW3fZRG-X zGwXevyqdMx5{F#>6QeYq7>?^hc=9g@1=t>M zbR{q~D$_(dBAPE)ZWNu^6_J-;q%zJ>RxSjI%tyV(uiq{l`LPCZ!R~F>vX$6`Z_zI- ziLwf!XVGs)ANW!7bzFPKx6Ir$=f#83P8ynm>6eV&Wz5_p$2vbw8!t%RvEXqh(-O{E z{4DTXRsyV@Omy_?!txY0+|AIp-gl`Zx%>e%?ehg#XazE@!u|8u_Q26JkZK z?d*4W0gawNq^{Yz5D}<&A&hLhAb7T=?JxU7#_CpmoR_f)O0!w$eW|sVujmrueb|09 z@50(jBZ9|;y2*f;6+>Q=UUG$hlC$pJ`l0Kd6G8GNdzA_1ru}_^FE31FN9CVfeNst$ z)wQcaM_v%Zp{^Ef;nmK2&ck)dDb_;_=c?&z{`F6rK{5RuTn;=4Qhh>SZ{&}VMLx*{ zUdAVB$CGvJZ^=+~Bp}=aK}RS=Jl{x$72~!NLr1#Ih}&<7zJgJElT@U410;k~B_(fV z2P8?E_eN8_(ieKQpNxxIN0z<-!QQpAB%UM2aYUBNkXekjeO-x&7M*5UTm|c~%i^Sb zg>u{^i$~oG53sQYO!PtNLHLFUQ!i0w7eV-+0Uad^T)S+H(cCtI*dM|)ijdl_3^-dX z^&x${+sM`^IrG?cFx#j}RVUn!W@1YCG{$zj6aEJ$kn$|>nn&reIVbz-zh?g*_TD_I z>1^8?MJ+{Cj7TRzNZBAg*nkLzq$~>%D2Vh3Ldup-L}?^KNUEf7Qze~(5D`M8Ga{WJ z5FrU1LFpj^N=Q(VP7;OilQh2Vse8x!zGJ=bo$rou-y7q-`okL3P?DXM{abtOx#pVF z%*?6BF_dYes@rI0ezv%`J2~|7q5>koC8vhaAJ#LlLLvT6P?mzjwuardVAHlrjW2@6 zX|KgdfdR@8B7(77qVS=lg6_W=vv%$Z4%R{3;*8kgzs_GA0GFa z9QD>%JFDM<63+dc@4{b63<)Qn8v$MVT>?~tzy&KX`^_W-Osj@KAwc3Ast(}ox&8nm zc4D`PO_0}`JYws5Hw89$5L9zdDBv9gFY538?$5_OI5qd_)LdrZ;hd=O!-NJa-(Ah8 z18tNh_L-J-W&86G_32(N)Oo7oy|U+2$8dV2j_r{y^5embxB&^X*aFdbN6XPE+xT_Y zK?-)xgrfH23m|JJxd-|a9+LTBmkG2{vkfSvb0zu4Xs(+l?vM|(FzKWHl(SfNJa`zelEVBYkr zCAX$wA2*+&`*V7HmR?V2M9#iK6;C)W-d#Lfhg7z^Wf5WC$c-;^j`O0JxAhuak0Bel zq0bl?*VyWXz>uc}!#YiYeOJoT$_(6o;z=k3ugrJZM~;X&V19njq-;v-<{)Ct2f(5D z0dK$-hm?!$8wYAhns{sebg~I2DUZ%dC1->IKV-Us_$cqSKF{Muvo}@j{Uo!~cc%ar z+w4;m*t&h>TrEnasei%1Ah_ydv$Dtl=hDup)n*xw$-2;ESzeta)F!c(q_9@ws8_%0 z$zi-XpUREtOtrtZqW(hH#vLg7+cKgUfpTBJPjB_c~lqa_s); znN^iPxY3(aU)G9(a37|t`Mrrth^?dD7SFWmtt-Oy2$LERIy^~&&GuWF~bGM07m z3a{8PjH;AZtF5DN?O<-JXT0^M=k-vtWBN{)Gg}VN7+)2cRT?9%&Z#5h-gEd43fyq%9(?RVe_Z1gSAjG-Z}dFc7N^ z65zP@y#nm7ON(*7rhF?>oY>)sZ(r4X#HqbcE~$T=DkRO@S8xK&q81qdJkY8iLh$y^ za5>6^A#@!!1rICY;C+C^7E(ii@c>Po#ckqCL%{yqCz^LSbqaJc>FIS~Fbx-dY^2%Y z0dzye%4115DQOl%*dkZA@=P}^H^;!rVx6w9KdRZ>1f#<5u4cuI?i;(h;+vwNZ-4Y;+a01+PSC})aL%##n}$;LMSAk`LVG_;GN0T5@* zBeUr71XTZC=+J%KoD&pMhEwh2YzE`dy=r1J_L3}gdrBnNY|CHq;ddsPN@Q70>;$}h z*_@`vlVF3ZtE%(sfi5GKrb^@$i(9ZzgYd>c>pmQrsi`nv0yvzh?!$P~djS@1=eu-TYw;L2N50*Q#Z@XY zjlUX+*+O;P?rJ#SSR@xZp-U?ipAqSa*9unR00mAJ$RBb?kYFYs*Wf5vVWpZ0V5z~z zrgRPeJlJn|V4Dl~x0oQ)yn^Vk=2Kj6bOK?`5E8*NPV~x+HzjVw6}LCpq$5qQQ*iC; z9?*XSVg8OO`2*F>RT`|NjcsOFaAJ*6yC+VG!Gy^|ohTT$8MKQoOAP`i6i1qgVFGa0 z-T=dt!N9Y$!*+SDcMY_AmobYD$Bix(0A(|^z9s9ya0l4WgA4Q@bf^wZhbYde;pL!L zmJT*!PxyWALw@_2GUu#dz3_*S-Iew}>V{%_*v6Bk#ddmn6kSJTW)@|=?*rW*9lFq` z9+Xz_%zfAmmE{g@RUrXRj)9?ppf*rGO>DEIUq~e@eVt+!?*;=$!G9`EE&)jXc0bq)9hpHiF)pZ$5xn4t?q5Sfv+S z%Y&E{tcuhK$L3v3HjcjlJhe;s9Ti-<3J|hRES!B&8}s8o-ZyCrBgckZby&_qy#ua< zGR&I!n|8TFI-e|#82equlskvzQxh7h6HOX_X)Ivr>iu3x(ef(XGnX}6I(*{ntFmXj zB9qU>NukBoz7vLS?(?g(Oc9jhqLd*@GRH0=fc@ZZ}}g{ zrDnBst_48F~Dfa!8|=vQR7$6Gt)86|gjYjv_vM9pzKYqjB9RYo+1aVQb>%-k)hnNP<85XnKrjWo;nR<{uLc2W5ZRRQ&FSlo*H!l!-Fq^)c)9jj9U6wawqm=wnvxgX z@8+g5qxY(C)MZ84*S4#~vOK+os%6_#V!qgIZf7@;dAZ!|l$M*w4H3vIkDfJZy7^!r zdto7~qazWYhf|jJX%)6-vvj52Wj~7aSRM zvb%G}uAFAKNiOuh%Y*E|t9E_m*(WHbp|5SbPJg`f>b2MKomcspRY}Fmm#lm*E-nOd z2N)w|guq&lNBLQngHx6vQn}Bfy$}$#OG0S_vSLCpkF0>J+ZUobqp1TG38I-q`Q|hC zeZ^|SM89+_)7Ka>tAd0gu4+p2IUs=N^5i**hJ;35y>=; zvk@?Lh@&Bs8C329@#(}SK{h7^sXwJ3qVXPx$NwSdoMLy-c8&%`MKaKeV$FU7Y$rmk zbsvz{YG{?`_cCa3=m|r*4Jc?;zQ$YfqjCACNASknm_68`56hy#9mZWO8+Aculq9Me14V%mkj$|Js9C$tr$$B*Rm5b-WPV1580%!Wet*F%W{d%MS) z^1!7s_yVwtP8z6MtR<;?V!a%|@vb&A;`PdlMPXV@$DaS~l6W1M6mbkNn1F2p;1~Kr z$R^KOcWN8KT+mZofs5r*lW1Z;0d;D6K^8EYc=!RlhJcdG3`y|Sz@%b#5_AC(iW~x} z@(E-$%5Z?7;*D!UBozA&iLLIxf*g5MEY#i@kNH_WrL$SvQ|$8UOm5ocd6q+O?$)Px zzH-!7^B;`~Qot&R1M9T)vnZxIJW_dg`3dm_elZ3R znxlb~OS8SeZ?Y$!KiHw5og$W{;&%&ZHw^IFyx=ime8{=-XIkUGZ~!)MKs@W?D{^|m zCTIfsw_!cVxC+`BKqC_tNy^18lQCOGyv2C&naRbJD0-|E0X#}BQYS;!&T$lKu?UDI z4yHke7-L)Oc)^iO)d_2br*uS* z9BQXNw3sO6=hf!ljL^79DHm4logIB0ZGF>`sC?6-A7L!^mZSsjaQZ3Br|_`w%=o()>PwHsf_9 zL-Tv~5<+FpS506<^x1vdA`{Wc-IoQ;cQOyBlqwOz1{dD z$t5%HM1LnI%!*5dF5yEl)4-(w9U7ukHh8bv$f>q)ms7Fz%}P$K>x@e&rQ1-4_l0V%$gtxF zO+s0_cP7{>+}1d;E9-ZhDZe8f9Q&h^KY$kd#6jphsCLo5pnLy46cKPgu+UrrnsewR zzy>k9z>j7A0d;e&$$UC*h17Zom&@yID=_0y({=+{G?*h~HHH1o6T&dZ>lQXmbh_QN zuNOT^$=*SAwmaZh8PHx~>szVQRr0>QxNaKmQsM48rC%Oe=ImtK<1lb%AkFnnv08bx zorBI$dSjrKZ&zT~p!>~7HT?)BoVQeNN~Dc5;}OUL;&HxB2GAlo)Zc8wqpA5{4Z_yS zE-3Oy>mYzfqxj^cW>o>KV?q=7ml9LPI@@2b>mY9r4^e^g7I_}2wZsiCLBCf!rS7#$ zC&6@RnX}WUo3{^u-FysjbS>sPyaf~rW}s>S*BxLFoh0-Hpge3Q*5)X73T2-fC)c-b zt`X3GrPs=)TUV3=z4LL9$nZpd)||&!Zn_C)K7G|DX@2jJsdbCUB4xx>&x+L%mKwLq zaqGdGSE(3SM!QR#S3rjnzp?Z}LY!OiPSm-KVx=;kK;eGo)hw#YlzESvpJ@rz*{uwS zGdX*8g)*HezAnMfMktOIcz#-L7f}^}k;GBP6gepbc>$y7KSeBu)(@ez1R#T`Klt9Gt z*R!BYp1$m0_hHcrdLh`{fjZn2o!{ueG=mT2p_4s4`3t4w60ev{D;>x1w=W!><8t;T z9I)Gd^=8KzzfHGJyYU8Bd*I<^J@G_df58#EJ3OvR>D6?r9X)ziGc?YeEzQchQjz!4 zpBnyfuJGEuDu=MH{*?mhE`Zif7LXt1G(HIM)v4xpve1czx&u@}Nji^q15vvObXw6k zDpREu4R~K6X{~$u#1TBqZ*(<+W)M*UuSZwJ2TU2O;=+Kz16`mUk5>dwrsA>576d~G z7gqR1F2G6i{d{|OtZHfTWKC!*66)oPgmHq4AgZ`VM;d5udqP)`vOJ;x@>0;DB2pX~ z*5Ge(y_Vlmjz<9{z*%i~_EyS=A=kmnH%rUV=gaI|O3FkjS<@uO#moXzbsf9wg)rG$ zT~0MQXt{)r!vbI}6;LL~V7A?@@4!G@}6E;*K7Mp z&kq4Tpr_X|eMSuZ2FYB*&iH0y%KK~1Pyk*vf?A)pDtjnMwC+89hn65R1${XYIwbl* zj1gF+X)0?PK-&Dpsor@O_YHL24>WFgbVh}-{A}TtVPX)OL?c!nyNi#82G2`%2AXZT zBYC|Y_3^b=t8gBS)n(fIbfp5*?wdY(`zhTMhTMn4N1jpk8k zsq@Xz{7zBScxR!hz>JAjW`PknD$~+f@+VK7}Eg5|l zJ6hav7@=&ksDfMPD%eX@r~8q%NV~|&G}GQ>ta5}yPzPr%9)U=o>cb-{a5p}6drUDxb@q03=RyHJ{LgRV!mog3hv z1=xKkp&kcQx@KnDdY&muZ(ixUrWNS++@Qh_W$)+@r`Va4%#=G9C$;n5HwDV;Sa>#X zl~uL{T0whcL;jZ7{dfqL(oT?$fh*jXE?{fHti@Ep;G0%p z=V%^d>;AOem8#}kfYdnUSPH+x)j4_Rt=`qtESdng`~8OA$%Ar%=<--GxF9bGayz_? z8KA3!KLkaTi?>Vev>Hi!x8s7^HII&n&1hnqez60f*9$wrB>mAT?-0dV)OUQPRlL9- zwPU#1B7F19yTc)s%X8x=#KLZ=T(s!>nWnuKhsmYV{%anGJtlTG^^1doMPYy0pahF8) zUZ&I4lW$7zmX)9Wo$9C%KBBLj;goe|2WSb`PhGv$@g^Tv>8rhMyu!ESt?e`OI&x2Vm*rD3kjvtG#9I2kidwdBZ2+Cdti3ytzQV{h)YPO(KJ+LiB@e zCOp$b4;Ua%0ZISC(-JaL6_K%<&-ryX+%KhSZ@K3^vk+Zcq8%~_u!sLI6_s7ARkCLfwmWp}D5IDH=L6rP99aphrc?f@gL)kmxc z4ydY65!(qp*!2+$jzGJ8(18zQv_$o`1*nkj${_fWm_gW3H3|4~s=fhi;zpuBam;M8dSn3~COG5;v3Te$;$w+iV-|V+xY&)q z1$=qU_B^aY0C_7)`#5h=1{WsXj!_8EROe4*-kocDkQR zz&G{&9A`uG4;LZIS1^sNhP0w|i!7mcojhz?!8(TTL8wj;+0nY6pZhC*-BcBd!_2c` zpf?9Kp&4Z%=UW|Y+Swybg_MxU6-%WuJJ$`mbV=HM=WkNrg%6Ph{{!HNaGlUN2Zyje@VAD~X z@u&E*DfpvGV%oBCI(UwNgEE$l(gQMVehkQ@Q~5H`d9L*!J(W43o9YD)*IN`>hc+FH14WyR^s@&N)Hh?+CBz@DdbSe< zCSom6& zAFl-0TXXt(#5U;M(+PzUf;t4q96$3nfF3AgEJ93IZ?!Z|MY`P;M>N(Cp$__keS^QQ z%6t!Or^g+j+m)UHg?j`AlI2IyypOafO#K@hN} zFohuk3pIcW8Y#`bl!HGB(FB;O#EgqR9)O$0HuCTWxJ^X|b{lFR?#{96Wv{$v&M{k! zh7*#Dt*E##E0JvCQo8ofk5&tt{e<9ZlomRbk(B$p{HG# z$`XO=cxZIPwb!p-kAJw{_@L4Em%_eoLD%LIrT0U3hTQvI$Sr%TUKn40JsUm*6w9dB zd4tkkj=Xlu(Be(B#!LH(Ie14)Oh_^Q7l?j$rV3ymuFWIM`A>ooR)XP#%rioXmsBYA zH!!FQj%Piu+NqD{5Bh!3Z6fy?$geqtM4_Vx z@XUKf2iGrfwu))bVmgzF3>5yz7a1}M@GYSjsreU~PaS}~_KDjm7UMDCOkNZKT1KI1 zbg&Zf(llbp^f{gXMEQ$M_i>Rnc-5lISU_XK5v3k)TBn$FE*Z6x*xShjuMVbp!Sw0p zDJMYZ`V6L&2`FuFt6YJmzsU5$Tk2EL^J}U zv4|i0q|ds($h`N?1@EVc_#%`2+4!-*81e(8yH5fEcySoL6D`FJ{nbaO1>Ykr+?kRl zH0DZG&(c5p6VJaTE*W-%cO${R$aINwU*U59BHZY|_~ah-{WiiLu-fCN!S8Rb#)@mv zk3#9IDsMrkZ2+?SmSFz@Y5y0&M*QmsuNe0)7Wskisp!E4z&L(MlX@XW&9Rcr;3_TN z1L}{DbgdOlt-lI2>6;Heyin^TskuY!V;=<3o(Frv5H^2@CXH_-N)^DV`5AjtMB4tB zp|<&pk1ib3`JXph;@|u1f81xovlE(q;p9#4;fMqib<9J5!p{Ds*RodCpFUh}?JRjO zJQ=VWK^+UZ__+D8$g-e$|L2uR#aAzCo)-pO@Vmyo_mFvUhxoKI(%noonX0B+j!Sb0 z>~pbma&am%x3aZ%wzKuowe@|GfAZ<%!@-FCFOf!?myNcD?_Vl&XnWkCs&^&z>g5BM z4M!id#%8=o4BBToF?g=4SHWZLMrD*Q&3*!2Js%anCXaK=WN8H^(QRh<9})kr_>V`| z0Wx901dww4zjR~&@BBOEDKG^t&S!U$M0?Om=;e)U{n3gJqW|J&Ga3mYv?k~fXB8fJ zP%?@Cn9}>oP?QCXwX&URG;zu&W06b;an|y9>Ae*F7f0JubndSG-~6))y_Nn(TY#2! z&Y>mlcyy*>e%@~f%OdvEiJyz{u%Y~qdOx=zQ> zH2Zx(=(WQQq+|n_l;V8k5cae3JFIXG(3u#DO1$r6rTng7x(%2~oB^cElMurbFm=dl zg2rA4Vcx$p5IjvDqI#itTDh&~dqR^m2v$_|(na<}xHlSKE_2!D(Ocs^Pv`MKP4Ur$MgOjAa$_^9$F-u(h1N-Rg)msoR zsAI>g^Sj{7=QegKC#9WJcDmnjAZ;M+Y~@Ycy~XD%|M+Z;kc-XHjHAT1+c_88IcGgw zqUhST%Xc|n34T_0ZT!jQm6j@y654Yh-7hjfC2}LBfHDNypC3y}kTYjJ`u*=>BT#)3 zxd^E%`^=y3Z8K&AAd6P3bIbFc(pbT3^gClkP)lJf0#;BR9A_~0-=_kKG&%pz#IWww zM-8C%+vGh-m25}EbD$9M9#FsKp}F>Wr7tq~z>Er@5P;g1_}RrL@jqS|5uizxepZT! zKJZ26t~e6&IhFaDIM|aH)B7;Se%%+DA3V`wt>U+mUgO!WS46RH$PMz+34$t-OXrim z$moGfO1vT8MVbt2Ulf~36+ngOaP2=|vm}ZvdgJsLD{osifJxT;0xHZLQtk?pUZD>% zET7W4iP*mj@&RQSh!R>{R{ZT3HK}<-Qj1c=!Gx)NkNGEMr*J(0GfvE)bLFMoZ~}?q z1zjGODgqEMsy~#DjbjJzT2Mk8=}~}*T=2+A1EJb@$>*P zDTlp&PI`gC?t98rhDBi0di8FawYY&7ABZ2Ma zdch%K5a?pW*gNzs7>dzV_@4!YA}+T$2ri%c@?-O~N~6}Ym@(Su;if0?Q!4&32d0tx z%T*}l_Xy>H!Kck#8G5z*mnwLAlkd;Y0sDbM&68%=9W{+kUMIlDI%6$bX5)Qyq%y{^$~ybhk&_8V4^&~kRcbtc&Jy*TFqshlVw2JL)fz*(9!aQ!0bm?z zdWzc3iP5Iqit; z3rm)=tW|Uxez#QV$zwjNum))8Fi?kET3T(FXcwU0z`(U$A4&~x)DKJ#$XuHwqgo$( zU<Q@A}vKDrU?v0jtu`rfuZPOaDH@Oel2PH)DK( zuv=wcbXU&R6zYwNTSLzUzqdP8ScH`eaJP+4To^sR{l5LkI5_z$%^Y2zK1=RIr~_4l|i4R}ON# z^EQ^@k!^vy#hrC$I%jN13p^({f;8HD-F^FzWuc;Rh2C&^-<9}Hn_L4=GPzf>V~Wc* zUC9DSA(!G#ksC=sz$_j=|LHz=|E(q{r0%bhjLkRcB52YfQn(1!aA`>shaZigFD}Y= z@@=@-1r5HR@B(0aSaeQR0oRXzGzSSftsz}Rd|j`M7|{S33yG?b%TEG!r}1XUn^hA; z-j3f)8+$*p;;YB!B#Pa1avAlnI@^hm?u$hhEE%C#`w#j>OsWvEzF8d%jKUY=TS10v zR~0aR7;OHDAUo@okY8oR!zu&c0#^PA&(=ifBx^oOF?X(#X+edJtyRj+(Dr4>?xqUMh#!0~! zU8{#8qGbWzz>x0gH&rv}D3a81$Gf{}n{d5$VEdXNwnJF!)pZMdhQ7#fc0bWdea?OM zBE7S-FdN?Yj&;_=R=3c8a;xxINV`=nyy?zBw2E;&FSx_>cD`)sn!>6F!AZyNF&wWXyb#Ie;S@uU;R- zGz#@+JrS#G+W@p-h%o+eo#^g91%CeaO#6%N_E24KuEXuf0Rz=E?>Be{w7x1ab;P3X^)a(4A+V|9*;gVsIqX%TF zS=>E|Zu^%4*mtzIT!ty-Q(P1hQd2YFCxhJ_%&k5?+jnJ3_pF}1oC^$os8C&L?ubW) z#r`{5ajY|WZn}L;)4c+PJjZ+os|r@_bD#h>C|Ml7FMW-kka$&qrv@ed4wO#2_=%u& zqQ#;=+XFmk@hN6?H)11^KL#E8B9m3;+pP`0k#8q5vRh92>Ee-B`^Ji0u5qr9pCSZj4r675@H}ZP!}HO!ldfh4aAQ* zqzjo~KV7>3{;JaWiwx@c*hTV^>{p1d8`N1nWbDk$IZ^l*nds#}bOUCE?p_YwvX{OF z{XPl53oJcovRCTd4*)U|Us0Nr*p3h%ZUs$-w}zVk^Li6&U!dQ^z&kK0^#$v^#%=${9rzkUQ*rTJO(=fOFNrNN)k zwE1Ufhq2!V5CE$G8s*XRUu2dv0GwU18DPl23vW{;Yu*AVHIzyGL}jl=dH%Uk|BP%o z{hO^>3jp75Ht?fo04hETfKZ0JDuBUv{k>iP-mZUd*T1vt-`Vx=?27-p82Ep(81OwM z81yVdx334^ z4`|9E^F{6M9;-2utY=|boiWn5@h@6(tRLH|z*h>^&Bh`b>%v5c(^4pb%!c-B5-3#adHp1ffL=3-p z!KP12=AND&xBMa_7(QN z3LM)&r{T^WA6{;eudFLL#Jpx>GaRv5J#}IK7%tJOe|gU30&)ZA)Ij(PXT#hPl^Pa< zJ`W0YUu=r>2*fe_wRT3TgFgWUl!`S4^yCM|rqS`hFeP1Y>Mx*w=vxS1v=;f%rAKZ4Tz3~vPxcy#3&f z9JD-EHsfa6Jzk-iY%-I3AXuNb|7FUOe%L^T^Y)P=@A3W(D;XyORy=PG%9D`PBK%B17CEtD#yAL_2xAQI)B8NPK;+S)s0^ z7##rH2_mhvxAL?d0s3wbl$V*JBs;WCdc=$iYgc@Hmlu30c>r_;uDhJr? zDB5}Y0<~qQYk-Sq)`yDnD{j}b_W13*fHTwapvl>l!Yl6t_87Tcak|p3#4Zi|Ae`ODMW*z7D7zFQy78xfGgTIh3SwFdigEUgZBU{o+thfA*>9#X zE=-i}L;f|YY-+eV3>N5xPL9d{^SMA=S^=%ez_(U*6!?Ih+y3P%%kR4!ox|sT8Ozyv z&$%hAZRliGT&4pzXrMT$XnxL#;;g1uA8!|Q`^U-yO7F6BpQOI^tW(=Zkxe<7c6EDf zTE&n2`)@b!q{sW{XE3oR#o>TSBb zQw+-{tJgnL*XN`%xM@Lip ziwYd@L*+1H_P7fUQ|YRRZb4vSn~O`pOTILb+bb8)X~U-_)?&BJ7~Y?=coINB4Ae^09fQ4@ zUM)aZ>sYzEhQ-9#%UO#LEoHM_6E#t1MUGS;xjL3TUo+v;Ym)z;32*v8ve7@280{s^ zxaE(9?PH>bPnQ=KpF}kb&;GAdqbBQm%)I4)XJ*tujFE~Yz=8%V!~+o;IsS3!GZ+Ia zId0;`$Nn?v)-7Vc!MI|X{5Q`=#@=~4hw_`x7*CcIyHB9{z)>$h%;? zk<1`%4a(898L#z;?vSeWF9)IPypKl*3tNt!95!4ul=k~w4T+R3*mQklkb#W8m#xtP zZ*?5J%ml1g%UyfO$xZ7B#B~ID(v0ti<2l?)Izve54jU>fIeUY*EB}?I(0h$9O0sx#7+6>^F?s7Eu zZY#iiLcU@?i9pax-1Oj_=%*;s0BJ#C7Hx+fo~M33gcchzh@WZz5`h@MP5$%?nok1I zR4)uW6Ep}Gc?|y*JmY)?&$fC1@GQbcY@!OlGegk#B=Xq?cr+3Ow{@?wrIhiU|1|1N6*W`V~Fv`ihz-+FzM{kvVEfq!vjU!FPCg9SEBMA?7bj zb6U{fM$(n|ZNN`={<+RS_e8}g=Ho>o7~c>ifJ~!rc1smVtvo6TAAB7LK=@8jssBnzU1w(LlZo?yce7Hb(34 zCMUQ0CD+b*hpfdTAvX$S>^+E#yiTk<6#ze-*b!yJBF8pmd7-HH{SP;3kW!cDQpww} z#y4ozl(a{eGK?OD9B9={&{p()`Rb6X|0Fk|BBj9kQODi)POLtf^Y*~Ncq?q~%Z{*w z{ug1l^&D)zlhmDXrbs(|EHcS;Z{J`JIJ9-e+X3h9ixo|tk*2zcsB^Ipg%8 z(D(k?J?2g{q^VbUVEI)>4?f%Pwsn5M*@yj3&hN5MJ8Gu6RCwLdUJd^DGBuM;tf#fV zhOb!jTN}61!vyd}W&>gENVDo>%Q~#!OrLa@=iFgUO_XM)8`+949hZ-GZm~$b5g`e2 z`s7-aSs>IPZf`-05@jPkgm=6cc+-SX{1O=7O!G9B(#UpJa2?z%2 zd%!UV3Q(o9aOH&jNFGc+uuwtJkYWOc_-?RSs~(9t<1AG(iwm_4!IZ#{o=4s^D%~x& zE;Vv3c~k6eUbucBSIa^<(9YByJO6f5xWF@@r{w%h`;j~PSvQ$Z)7tsdN^iK};-u)P zkfoh_Zr72Xhyy0Yjwf?0?UXMdRZR5`+EqQoH697&26Z8d=>JyIz0QsY12v24xG-Rh z7jGKm5XK3aZS z8*+8AGtGGTfWkZBm9V$(R>h6i8@*ZzXwgScNhnrI9@Cw#5OoB$MbD0epk(2U0>=5GG?cp1uT`L9=#PP%ptGD#LV$%slc7;~ z!cO{N_$J?NaH9Qu&ETb~;G3_{4|#o&5x#P;sDA!Y{8K4GFm6m~`n%ad)|C&@ zzqU2HR5%ytRWsf}&l}XbbL^j*HL;><-7W`K17UfeN&O+1s zey0u}+BS9M$C4Sl2j20W+{R)A!SronzH7yh9|?aM(Cf-LVk2OGafZk>9$jwTi&>Jqvja&8dUZaDGs0!@9IQmy@KOB`OeN{+^ znjBC?6z}1}JZc1J27PTOKbm=UwskN6clKB`XXBjIkUx@J=`TbFKNM7YwG7~*(B}jk z@pciA(I~+3w5C%DMua{Of+n;Q!mpzT(qsb0K!q!jZ6nuNKjG*8JW!jynMG7uSTc@l zy7q)CAL2V$Yq@W*V}w&PLFd~r2>K0=GRB?yT&SbW`RYIo zC8LB1C$V}WZ%9*PM67teP$_njkXss{xh<9(7ZXxE#g)_)CRu{(8SxIHn20-FKhNwy`*Me(smuEo4)>lv8zE48nBJz2hQV>-BK9 zZPJ!pd`zC6-iGv;{9=)~B=eW>k z*qa;q)L5n4@LleO;1d5aQhKXgz~QnOt~V!1b?gPJFuP1Z73xXqU4$KyA}Jcb2l|sL|n*<~d6!=pNO+`L7-jo7W(}10(I@q*yP$!;FwH-h@8#il+ zjE-|@8|*7)N7w}QCpC>j5iK}rR)csuP>(nYG=x?dI>;bFsy(?AQLn*SU{j$L2R3pG zK8Vj2#*>**At{%ZNr_cuc;parAJV*NHp)NM4!l7IUV94nZt%m0g^2EgU!EyF{P=b$ z4Bq$jooS(As9SrlV&a|s(51*n#mor}zaw|n>nWF=Eb>anQ;m3c(EBXN!}{(td%ccf zU|s5>>RNDG!vLw{a7J@C#r#L#9?EHJ6=n98tB!64!Crq9cx91=J?Apd`6IP3l}_}&^JI`W3|w4p0Mw=p(~88M<6^{0 zM!iBSDDnaoBT|GSxzhNl-Z8`}!B+}*J+O7Q=gH^9@=jC&A75qgppw-<;eI%E^7ZCZ zgA3y53TT?;D;sUQtp5+O8keRK2tU@4`yP=F01G=(EJD+ioROEC+zNQn6PknQfc%gf zD+o=z?j&s+e%}DnT(GADy+-jT5_g(u`4d*W6SRO7nIkiI0h?&t%Ofs=4#T6_B^b05 z|K~wgfMGqYlMZQd+AyRh@&bGXn0){>K}15UqNFO^SQa2fwZPvdo}dE}i*ZMJ+R4Z@ zC9EO{%~Se>%jc3(fqLqqYCzP5jQF53FPsf)O!haiA1u-2K0bPqqts?pty1y8czymz z8&9XB`HU~lz+s~+!_~FOAUyO{18mcWinIeJd}YBQ%nRD|2HNx)L&d!(a z6&}V+C#d@r_&zdyq}>x>IP6BT`0Nl;SHPHZn0`v$PH3}m06M5@!0$Q~Z&o-B9`xoz z;K{_x^M9sqIx{HUa9pW%PfQqV%p{MUehFB2-yG4O9!9EtM+t7_@i}58d)D9_x}L`P zYDc>Xn7QwQ3Pc)hd_UhIV_;+Gtf4pwOG3f~Y@1APeqsvVN6_sJY2Wh^n*_thIz4Ly zIk$j~!!r|!i(>|xk(ZnL{ZQrQx6_2ZVE^b6{X$Z_LKeI!P;3VgUbz6I@il^kVQj)a z6!3^xJN}~Rwe4$&S)JiOd!1}&> z4#^9sEbtv7NJuLl5Oi5JPDT62oD-fA7||+lem;Cx1fM4M5bgDSJ&TqT+w(s%PV+ak zP$Z9EPrT4h2A82E6<;*}!=uACD#_Fi3dYUOJWkhs)LQZKkxNKj#!DB^z->>@_g5sf zGjg&mZl&PHPCcR~Fx?X1b?`1yZM*In0S*Os+mC8T^*`gCOJLaNMd&*oNxOiwcCw=& z-8}TN_av6x$nc*%tNSA^CBkh}A2s&7sNghyI+05OS z2zrY(LVw6-%JSeePbrGr@fq#Mkqc@frAc>+_djOWjlVEs5Nj9M%+FiNTq?N@P8Yr; zpOhTLLRyh+Lk&Z35O8_`FeZ)>c|rO@PK|)YP9i8`akOKSd%)q%6ThnxqS@wv%=)$` zWmTK$V6?F}4X;@7KCdBmX~ne$io6GHwn^aFC)zXVe0$939Frg?Xo#0hl^*oB;H02~ zfjQz5pUsr4V`|FPLnMCgl(3=7GjPR&yk%LRlQ@=`ScTMkINDo80vbOI)PbNDMb{z2 zWqZkwi}Pmn2NK%O6{S37)12(~Gk>W*G8;ZOTma7uZ{C-1!7ffen(Us9PbF2HWDFP0 zPpFzyB^F5vQhNN-+Lm|+%wtZY^b#~Id?(U>MyXTxnl^iiim5LDg_Fn?RWc4hzSCmA68O~i~#~@_HH$j zBBX95p`XluBu1153C8d?0@?X8Slqa49|-?;Tn(c^stU|`8>PEvy=ohB;mXpwNqKGC z5qBQvCIs5$>#d+F{)$vCMr0@*Cc{m8N5^?)Omb2o(8%Kv;lB7NNlEj15n{F#-OATa zZnn;8g+s^g1#mVt+jB!S#MZ-0(K{}M)8)JZTG#cb<(zz0j>{QabcuUK_zkZoNpD8; z?Rm1P&G!7xDNH9~i`Y~!O~U&L&@6II5cazWV@>=|H-%qhI#yq2;u5(=Rlu|5 zaO+;d*5YVh#o}h1J#Qj*@@1Xqc4;+#0f2Y`3t$GAIQct5rdf;2i7!;;Pj{fluqOtj z3Xt(sVmoH5<^RFnn?^O2^?Slvl%h-#0YMN_Y9TXm08zx`QA#L5h=9mU3KbC$BO($Z zBqa!85K>hLCx>NGU2Z22cn|L}ob=2uCv5yKXXQo(!Xc=YS@pF#~FpZw(*FE))6*O2Z>j7tvHUzH7W90OD{L8{8=+fxyaTC)%;PNq^D|m}3Qb zwAw77E&6Sh!4W~1;oy5hVLNHVA@Tap=h15kG+(fN1&^8zfuX|L+t6FSa5u16ugOf8 zMJEbJOmNR?p%02ssTOdCn?)Ou-q5P5iLMZ(1K34lI%q=+k_Nb{OqK}GNq;^f<_S5$ zJLR`!&LXTXuzsgy+kQoB6CLoIMyHYLHAP;W7A>*8V~K0jgGs#LXX36$+`A+2HO1s# zqWj;^z(sZO! zc8UpmK?v?1c)qRJ7^h9}>=Js*J4(r-aG)&KwJ~x4y{7Kne3OZA4k-j+0%Kv;Ha2VJ zL;)=ozp;1jw_uL#rfJSE3+uXHn~nE_=j-*Z#izDa*?C*JtFwi{Ru$Jd1NoMZd8L1x zx%%m720J98FLhgG$R8(O0a1vmqICmr^DL}$Sn?|y%hw(6G)d3aY1mz!)_UdTb%~(+SMi}FOx{(E}3rfAvjS$rQ`=&gHndw8jS8|o*}D~ zhHx86TV#InC$e1-)2qipT@+a;WvnHd!p1Q|WU5tySR_g30jAX(;Tbq;ZwkacQWIIU z=chuh$??8lY`=ig5MXD_y4rEDKOZ`76)9Mr8;OM~7X&CaW5`12JiA?L5llEBIn&Z8 zzi*4b!B+xS&iV_2k%=VWx>Fb=zpvOH2%PEs>vBr4VGviigCazzbP9Q2Y*l@u78h&f z3^-k?5Bs#^^lX?^j5^6uc1B)^HVu&3bt@1AN+4{AVKHWzhQwXaK*giTU~MQLnAVBO z0-yG-H8mvdKHH-3ru{;s225s;?(C_EO?YFE&?JXdlvdP7LkvK{Lb0&fv>N=}`n!=W zHvPnCDVE7Pir(r6r%DgK0P4%AHl`A76?_4wG89hQ(qpTBaOvQWwG(Mhbb4fX?Bkrh zw+h^fEf1x2Mia_UZ|v}9In`7@8k_d|lyz*4{!ojxpUcDYQ#zKh@%y)TYFFtEYi1*N zvOj50fT~n{d8R!?Jb29Jm+_Q)>3_6_R#j|%`AY9j?EZ@*#}Y>(E)eWvI3fE|j8h7W zh-)#b>x4UFPkSc87!D0OId1@Ce}V-f3+7OGEtSHrD!vBh<_2DY*vx34sXDqwT+f+b zONi_U-UrRMF;XtU2#$UnX9k}v3H~vK7!o7GWRTbYSn!E^vI_bV`DJP}kykbeQdchv zq!DS5tW7?Xh+xsw94sQoth89eDV0n>SG>-Ifu^>wC0&F|E#pcQd*sC=RafAts~^Vc zS~s=xrTq6e#vyT}bN~5Ti+~wARh=Dr_F3QsSqRAQB8ckn8xidW+GM~XN=##os>&ZQ z6h_mu8eSXnd$^Dlk7F^0l|0~3eAyu3?0g6J1ki5=vZoud4<=X8nP3+>ijjglXjHFF z<2fSMi2h@Kbxta z>#FY)H5+(M&QPc1ULP}36_b7vQ|mkjhO4Sx!ex#V3``OZ9t$5m2*0B}t9@IqW~5xx zBM{@R0hr8`zRrAxwV<~}mr&x~O|&bk&$d=1!OGxt-GHZ{bzsJQ7!TMAdM$g1IQRwl z^)K*()R<@pVY!UqAP3j`Ch3lgXNP4Z&m_PgOe%l^vjH(IT@O}2cM zH__qur}Bf%a(w@o$F9`3g57cqbqy5A3O&W2WDTN{SW6U_YKt7qX&>Dy4r@cDOB%TB zC}-hDM7k%K2BiUi#Z!?q)mq%D$k8q0v$?>=<8a>()K>p1<>6({VdyM+c>Eitr203I zQKDK_`@*iAVq`ZlTul3i*t%4D3gmYaP+Yr}1qZzjmxf!fI7s-j$-ZLZ*WhKr+<631B4vTa?=g#(l>yMi(%5MN&5J71s{aSmp z$?8wG;lIdhLY;Db&)hOHZ~f(TrpwJ;bafvs6O}%CFHbYQwV%z>7P;$`sP=k#-=k#j zE=F>E0kDyAX2ky~;R*kGgvh+zyWLgYQIk@-*@Nw;njSo22bDy;$ldSXIL8#azH@5`h`3vtV-*UYsdX+&&#wTFDR}6hOwz6cN>OF9_|iFkI$|qFRJ}! z5<=l(&@8%j2l4*~h;)vWwEWfi%b{S$tKU``J99v1^amNpk^3@*De+5xhbL)&HyliR zY)2QCS2j^IaE84ZT?N|NIh zCBP8w9Uj+5&Ppun=Y3%|lY=nm*{>+PJaT+O9`J7dfBb)E303O)mAo{Q{Leo?4y(_s zP{k$FGhcC|%t{*ViV=T>*V(mFe{Yn04lFS<|J$ly>Ksy%4|0ncp0fPzDD%-@Hgz=y zyd|W_`9D7IAajY4Pg}w}HYor_Eu4%}G$V&GbExret9X?N>7iz_hr)(@&W7ddX z<#R9gSwQ2UTmMpj^MmhP z(}h{L|NZXCz!ps66Lf_jfrL$TJCNTIjUk^*(pGrETTE%C7a6cd*F$;DBF2WG9aJ$_ zAYnWjWecckY;<+G@05OQ)<6Y4@wdZPi=77=Z-1`%A;UH8MfAmTry@J2{F-vF&G`b) zn$XTIXEEy6%YAbDN;fCy$CjS#rMn>h=r`|8zR3$#9uh{Mcr;KxTi#XlDsFuIc$r!0 z>%OlSge9@-Ya6c9EOFC#7HZgH3_quIF9K}}tBOkmb{%}RDSi5+e|=huCh(J`aEer2 zdE0AhnTZA-{W60mGyaKrkMr#6d>CbcAC6q9%fC{;LsOmO{*?xLqT$qJ=66e7$)j7~ za*+=3h!-ylN%>Huz=|f@-eNWYU}%Q z=UgS8nB#(2egmglNirZ%aP{41$cDgmgH$?3ql{V%Fa#9eUP1r;r?q3gldtsbI}!Gm z4N03)ZC{?C`|o;PosDb_ds>oQ;&L@*-*{h)!>cTZ&|^COmt%;9yE|tDbZ?gFXyuzYdB9KI z=WXWIM`k>x8{W+34M+-%2Oj0;?;6BjF_<{$d{~~2HiLy0^RNrZ|0qJ_+yRK$>c5;C zzycuo&UU0WdXwx2-c~X18tDh3Nj;RG^`v&a4RigBeO(r#3>-bFn*PDB>xxwqeK_@3 zfKhoyIPEopCD)aFg=g^6BLurZh%#4pA3&hKf^zwlylgI(aSf?y1MGfNi+}?cvZkWt z+3zw7I0&Q;k{)fuo1 z5q>+pNTrLV(1iHZ#ie>UwnT@%lIFdikiZ_-!)kfStPfx_H#_hV7 zlv$S6-pBD`!^ziPn{{6VFn2SbGS)4Jy~thc6AahQj%iib0sgReTwZoIBw5qJ|+NU{1{s9cUZaLkt036HF3L!TF{Mn4f=x}<>6zDRRQOQe;P%;ds1_t zdE*4DKqoIhR0eGLG8HOQU`7=vFC~W?>N?3QNT8&GmRa*dt`a=NZw+!ng3hS8qvC-K z11#M#m{CkB4uRg(DWp<#i%sAZQAL<%KjHGv8wxYs4bjd1CMVB#ft3TU?8CF#Cnh9;`;1T>Jn z;(Z66FeAZ3T#SO{Vy&^Jc#i(b<_dlU&IokD)nR-}9S3isi#6$s1&3I9BZFD9%n77YZ3HT80+U6V?%(t*;ZG%!Eu>yx{L3 zUdm-$22F(+5}FXLL94)ITH_r&?h=yt-Wfse3#?^yXllNirWBb3G*st@-V5YZiAkzV z`66*!-5x(@XoiEfgDJpk`s7@kVZpS1Z5fNa8Lr2{QDMTU;Dn>GR`~XT79C2v{ipg0 z0t45-lsSU$AX)Xt;2f!)%#9-9!BR1=1NW3cA)yJn z?ZeEuHgTwMK!G&iuU2#x0ObX9*hBy}%;sK&5lmXV&)08K`4Xc^efoxK8V@?$94-n? z%hs~ydb5ZZv$red`n2`8*`JWtOnTmdnq1SoCx8)T^q}Q?(oY?tj3$JA}AiA|-G;I#<2_66iYGm*lu@gl& zXMzp*oqxupOhW)=eA(9j8Lc&m~4Mba&_*+wHoF%-5gms z#9$*gM*PN~97bf4HizdK=>n~OeL|T3zy*hGR+nE*Em|;PQ(c*{{X6-CQt+4-B8TD> zy7e;c-zFW$ViY{OxKW|yNCq#lEy(BUS%=Yf;0#MPGO%aJ%*N}sj{&fW6eHM)986M~ zNR9N8VwAEupl4l&qD0^Rv@HvL23mT$cu6fvZPSietzv`Sub&PzJsSUdM&M6){i;$~ zRqaxlzi;|{0IC$L>5QOo9EV(Y`CZBxCzgi=dgr{V(7!yc*T?!r@Y^rdTdo+p(E4{j zIT1atZk$$1VS|SUpjQ7`Bm9rFSmq66wkKpdT^t;uWh>AHTEe|=;E7Pbg1B>&|Gmt6 ztPlezY4Ur(jyTIzQkyJFk!Q_X-IHw@uwkx|9fpT#>+$DlLR?a5jd(-LbGw2(reNmJ z#W&W|+?5%a{A7mLq6E23q__7F{+MT>4PJ;<`2Ll&_=b-wwl^D|jry*OO3CfvH@7~o z*)$*=J`SaA8yaWSA6BUiWKo|L?GIfVcY879)T~=9KI!OGx?@)U;4zeqG6>Fex4F1K z&&}VK?rLySkG!ok_~&09o0(aL>b-e1x)||9zeeHh~F#qd%E8ss$l9&Igfyi0^s$a=V|EKF$#(tPhW(tt)Hm_uS4dR7nOtYZq zSiH2K@!!i>-fD61SDFCNdC)Zq<~Tl&6ex}9?Yz;3FVpMK>gk3(+@rD_WC7SjsIJES z(f#k+PVtCVu{=eh>tAh$l^B4c6L4ou#;+>}=yRzp+%ZOaLo-umHJ=q6d`~c+Lf%L` zTJnM1{y|&`9N8oNl~Zc1wk-p3dtKz2=E7N?2R0m&AM<^;b6i|HX7Ud4EQozbaVBW| zWXQGuvT`q;CQE#n=g9JN$n^fX{*~YZH_8Rk&tLC(HR4QZKV@o93qC$^IpP%!W71dF z`R3)D&NmjpAA0(kT~MHfgA-zXn&0(b=z>Qlj}z=n)||X)()niT`NE|I+c%vC^RMbK z$T&idBAwfTm+b=WUFO%clD}U_()|}?UIBU0G+(g=G<z9rV&MQx^iN>sDehdc+p0m~A z$d$Y3HM~BkF4Wb$yihnTD9cQGrDNw*yltPKode&@C3wJ>=;E?>0R8gC<(qNnn6#%l zd(5w%)z90uFTCkZ*YMlxRhllF&z|{^cqdZuzIl<<9Z-$ggAqi^?147Fv<(M)PvT@x zOB9=!Y{m+*3C!|RfN6E(BJyMm1q51e zoFW04!G~%UhU9nhF^0^15vA}2f#-z08VC!7XA47C?2P zSrr&cXp>nyI2PC&EGID``a9;=5L~T|hobox%%n3oGT8kn1*n95NGCCUGQ3;^1ZOyc z4hXTQ#Q}d`pTDgkW4Pe2;QSQ1xV;^Gq3Qf@tM-%WObg^R$xcDpN0!-o1L9^C43JrW zTOZ_qT0@^XH*GS*7qOxVz-Z8t>$g>RnEm`*>JkPJfgSH)6#76dZedV%@^6bn{o4Xs zNFHWjcu$n&>%?R@9ux;}antj!xGS_Qa68_Da$nt>{B@RO@wdfs{@ViTNWG3AX9koM z*9lD7K~L~?P)l*+r{!4CDSS7904*z^VkW`pF#l`&i~6_SRrRmU^=}W~zc$yuHrKx* z*S{jyzmCQKM{4o^i(@e`j)P4v{*DQgMRWs<0qpeo^K#qhj+)xqI`Q7D=os+tKHqUo zbCV{{p&DybS=Fw6uIK1>^KI2Tm6s#_XO3J~#_vR3qu&l)%sZNqTn_wzy{@*KnZDqa z>6jpA2@5}te7IVY=(D@K@)-Mi)lEomm}+;=7`r~bFyqy9`%9-AAB7JV{7ma3O*$>` zVO71rYvHTM%KkqUU9>OQSd7$yUxQK9AUM;KX)zMuCysswgTc@Q2}t1vuE9mYBf)tw z-&SqE!Bcej&dXgMU;T=eWjyPW>W(p&^nddRtj}@?7ceO;223$N6F=Tt<7OXZKYY}x zX3opM4`r(!dE(i-MJofRcQpsBT!X~QKpdxX+W$g|U>C6osb z4|jS2!Ubln>?Cx7B32S8ULew%whK)!ob9Rgjbc3U8}3+{aqWA;xIE%H!1eBl4Kner zYUznBGB{aP)n60k-?8l4Z&`twv$hg_NvuUhJXH+P>MxIkIv1n+dpwWFdLLMj+U~tO z(fR5@AO6bkb8<%`2w~%E8PK^sGy6L~YCk>k@V>9zdE4|%GC!^~w09!b^RhShNqS1w zdmq1;`Ny2;{fu`XRZQ>y`oI18O8GCAF3sk+FD6{_U?-qi^aXxgnEtlvPu?1!Xd~+a zems|Q`q2N`HOJ@HUkUneG%yB~BAyPQqN z5_e)1?Z;`>o{u>e@b2?ca{fE2w%8J@vkHXXE62p{pKkaMUL-$PLggo^v zSUlKl>REo0T3hOJSzfWv=brt|uP+2DeWgF<{=7e7L?>N9)0`aL^_R$ekf0NwIS_=h zpL&{{?@lAb8fv6hvMPN8rsIPqhEQX*EwxhbtUfJy@t5JzX>~;qXTxiT{@lRtH^cPa zZoDBdEqC&W@VI$~vDwLG3b5eAYkC{r3F$5sDz&CQWu93Pwk9sM`cHH1YaaLJq`1VI zy)k1w*l{Opy|L-beJ^(ufbI0?HP~FM{!ji`{M`(y`hVi{^1rcfaRY6-g19@>f0Hv` z_5wwDv(ynlg#ICOXS}AqUzVgc_5*wi<~v0@Uz-sIua@p7I(MIs#pue8i=#fST%bsg zOyw_RVQ_Hb1DM8+ivd$DZGv?|^B#A&`~Gx1Bee-9vU21E8@?kFm|$0g9RzhC2e$5opyFv2-?6k}^$<6d6D*@_4J86zFBdyWvHOrU@d?Qh(dq*WYN z=u{ZUA13fRQAziGAJ>=dt@S8=14Kh~O_}L$FFonnKlWj-vRQ|tYG$#rb@}W}jHNX| zE$Vw!+!RIh)a^(`>`EdKkDRv@`0vcY4!_Gie-QuYw^i3LHK;61IEcKGLU_#+*#R+T zE*xSDwv4KF6OF~A1~^?pQsRXU>=we6DF*}LCO5Kx+fGi$ZBeX;!)?H%Rk2QNcda&2 zRY*&3vU>=l6q_nvK%F8`PNpcf6GK0eY{O~Qx=DAzNNDFEU<0d@!^p|F4U5>}1ENx1 zTh|)mnPhgjuo1Npk&H92Ro~N&R<465fb*zkZ+pu@c*vv`ndW~-zqpD)m?GH#FWBoO zv;HM&x+9ynjCq3G$UMuxKB^_BE|G^O1d3__eyCA^N|xC@sLOv6>>D26bxj5cl0NPB zaoMp>aDEw~>qK1@d<_igwnXU1%9$Nfya6EvPclD8G6l#(CZ{K&*tBn{{xjwbpQ4Xq z;lNZi?$@UM;vGEU=W8XC`T6m79K&5tD3sa}JC6M)x-eiLadT8zgyIJvWrCc%7`a|B zPifGpWHOF`ivRm?`?aYJqZRVvSk>avRIuiKfRD#Y)u8CRI%Ju9vVRfxEqvH}NKW%4 z2e89bB9&d09c?b>s_mKJJ~_YrhG&_JhOI@)moCjq8ABwkeZtSCZwdNTHPKGr(JjT> z@>eJUSyhDmbz#Wkk0-J?VX(E~ooD`p*~5}suc^g)uc{d*cYz*;9ZI7ih`+DqaU)hhQQ}mlr6M;j%HzHIlKfVvzjw!taKag;2e~{Tk%j zPO^vngi#pLg(jLNAO{?SUkJ-(jyrCbm8Ho1#;ni*Z|w2!x{~>;Ku_T{xdzpS8_EKDI zbY>XHV0sIfMud6R$}+{_Xe9x4qWdx#adeESNx=RreykYn4kkWk*-W$7W2cMX?-8Dl z_4A4@q*LDRtUdSfmVGzf{jwN2-A@R8o?%$K`=aAjf+HnALGINR=P;lHIYx^i{scLti~C)h zyLqAsoqa_68wDw14Y^QLDKj3xW^IgRsX9WpVyebY54W_ zFChMAQ85Kd@88h}6dis(iu)5LG#`c2bCgu~6L}@)=6}6&dbRBS|0g7EI&2GaQS6*L zNKp%a2Fb{3$ht8?NKz;N*(-G<51sA7Ed2wR$G9pfX6}4jHCUIgsN7xB)j@6w#YvFh zX!5@LyMPaQV$+v#Aj3M{l}6J!f3|yWo~R0@$_4TVimi1o8sFW2Q6s!TzT@DsRX8aMs^1GV% z{qL4AaN)E+U?3kd0rde<-N`F3P& zDbu>`tb=+Y3bn8FjsNXLsoN#Tyzqq)o7o4{X{5@+lg!m^p6t`I4Q(*}2GQ#d?`ob! z*6vZgJfGC^o6sA3J-ra|SEI9HmkR%V1)popA&)4pq94D8Vg3O*cK{7k2k_Lz62FI; zWBk=Y#3Q@_$$41kiQ|Jo=Zcn`(nA%*eNb~dFGJ=SDo8|jpfODlHC6CD3L8)bCyp_V zfV``+QT%yxFUQ;hB*){fzvcY_6l3l(^M;WXyjsi<#?2inC*%t(jkZB+%OIveIVBcPL24=X$o4?^ zWac@32CWWP&8HYcfaiZrp-J<7M?8W_Y1u%ufj*A@09D={W~M9+UB<4NY&cWEOaRVh?3Hk`xqE4CZC&IDIw2wF`yF2TD;m`ToGP3lW$TxvIoJW4Zdy|9OCok`#M!TV zQSL5f1sl`;!E-RPOC#=zOTZuONUn4f0DJTt_ND3J6M6Yx&KYgx*~C4!zfwVtie4N# zrlX>_--l91>4%QfDfDpX=`R4+avJ(jpQ~&psPd+d(Hq1?7#2*| z#A~cNmIu};eI8nq0Of;%9nAe1z%)NavEtZ(S5)n zd`&*p;i&X7(HU+Nr(zHUt^h-ISi_iJ;m)EUJC=U)P-Z*Y0M4zP+FPJa(`;eEpjcev zD4uVdAIfaQ7@mR1Y@FUS52;HYyN^~Kkg1nV>r*J724vf%Is``vizhpvkxb{q`JPmE z!JK?z_Ul*_Mre{@n}FSL&i^O-`E>kN=u@_}&7;fA?it!(nZ&k9%)O!5F`{^hsW#>T z=IQ+7qhf?my{i?U5(A64)QZUlM(R?Tn3ib_l|+u3CgRu)k{5R)vMOD`$3#SWi?u^pHi zQZDNHdGe|G8#EPi$b34#M)!IwZU`s2Bfe5DP<7=eBOzaWW}XM|FQcV77>r@l>Pco| z>|6rGI|gTl(*396F|3&)N0z!tdNaS3Ttl0CFWm!g7j@)_Pa#w78Oh{RT|=tJ<>kaf zAXQ5TG=7Dt;@zk*#Lto)mEt0BYZPk;U6RbF;#UM09tZG!3}hy-^F3l9{Pi*HCF&>_ z&fy(lN`j@rp+&5o-){3n}zZN^ECEe#YO;h`f24LT|!_2dI z9Yq)VJMnc)b&=#nsHhO7uK3Um@S5TgE+sZdS+*WGRiccE`Df_u!p$Citj}?GojhX5ODJDRA*-{N|N;=3Q zu>Eei+0FP$LL@8SjoukrqHa$P7EjE&NjDR{-jVcRA7R`qRl1Al1TotV8le!x%>Xux z{*GuaCM84EenGafjv-FQGVAt2M z7)(jyYk@#5+ESJvZy=eHI;&-V zJtUN(i~rq)S|n`BW8tph)GBH)*THcYD;?S1rceb(Y05ORx^_i&lJ^7?K2O=s^&lQi z#zLpyGQj$xw8bBMn;b4;Dz`LO9ub=y?L%*o+X)!M^P+z4+|dN7A)JT0UdPvzDG9M# zh{xdDqDk2rksGotM!~&8QKGE zIqZ%KHIiSRP~?B1#bQX7BDGfVFgl=BA>Sh`{$13STrL2FYWV7=dc26CHcXg51{FOl zeKh${PqypvFwq-gUTgBQozJeJJtLlhFXuHFGjA+XQ_P?Y>{TO^Mj*R zGsmOrdvVjAw%wLb->5zI{JAuX{p0U{-uQEJ+Pg3JmqXi{G%!PU65mX2%XctcceY!K zX%{;RaLGTwF%Vn$6M1cmp$U~_AUjwKTC8i|w-$dVPJ%BIC~XS0x_3)+F;2-Wg;C$- zxs8S<;C!8&J=x{alzR4SFIT$%5_fZ|VA?K1-e&;^A zBSr6*llE6f^iI6l{aU~B-m7xczQ8YKt~Oc5^Ot(_(5V6LH^TeNJuA0uU9N4NIV?e*>)IRXptAmh-Nzi8SD%}5f&I8GYoOjKB)yap47O(tt9G};8zR6t8} z*e<{fEeMs{$=S$f^{tb9k#1Tn{>JFuM!0*-(4IV;&F*NyQfg>J3!ZjHprA;(H2T9; zA}&&_^p6F^Fh)`y36fQXm52yz?s<*X&D7QtQW(p}3?iO}DaP8I<-)Xiwoj^HaTTAgP7<%O}9P%z(yRIwEa76$-|JAj4JQ|QRN z;A5j}2CRq{f*C`f*5Dlgw2%F6dT+trKk|$9i-WeiVW*&rxmXP`YbhYxo*lV5ighmbYqObqz$N?lC&Xwnho|lSnH<& z83LLS#3jkL3V&`gESVvhb=&fFU7rwgyr)x+*>i-C9S&R$57~ELZ=Xw(z_V%LhP(Ne z{i(6xgvwO^%-Mjax{`pQ{!3wqi6|%pJujKX|ioNdy98Z4ANfHT1g4NdqZi+Hm$0=xkb#=$~y zhv43^Ae_L2&CJHto6N2*eF<7iY2Q|DvY`z-xjBmJ%0uqLNxeTe^e@g+Xlq&w3Hd?L za{3}!kBAcElWPG|WZiqk!X)i!+3XPkV(0ch%>GB(;&OiAA%re+e43g)k2RBM9B?P%*40J|>Ar0Ni;zP&`N zs7EuTA88%MdccSF6VLWQVTC);&q#3OjZW1@?O=W8uX}O04zcm!sD*M?*11!s*Y)K0 z3s{g~_C&~G-4gefnCw_Msp6dUtCfH4vnMTt0^iq8zkDe(3j7hO&H!3Q=Z(#r3obQB z_~jn!h=~pGE^|sjozC;TXLdgROPpu!Udq35l(Onl{mOMknT`%eMBpPdV+v5*Cjs9Ca-hw0b4|g=u2KT{Ts09 zvs)qG%J*5}Wyv zG}EH_3=W8m7IZe!QtOHh`fV&K^xwDY>XI~|tUiTC>Pv?Mw%iorew%`rqxYt=BD-LW z#8IBpV&ps75cVtPEMiF1I*d>KJUcHtPzGbh7;L=S;H2&_pvxtmVl5x3=_cBS;!8&c zrvXuqWDrpow|7^YZCxp}+`9a(A&7uIl#iV(aj@J&)Y$vbuv7V3`zM_cN|U(@A>wOG zh!^UiC|D=FQ!7azBW?e&V}Rq}j@(z`qgLf>AA9NLsRd6`zaY$|$XV@(pJ2N0@g0G# zz2DhQDe(ze?h+lLwt|qQHCepTLu8Y|1+7DbgO?CcDo~O~Jkq8}%qCm1k_-cHhmbEAlV#gAm?4tnicL~!l6pBvRnO7XK9D-Ut=gzCB2-Ec8q^fB zfkIWLDz@WblqMJ8nK29(^Z+TI&)*Ssq|4$G$yHcM`ZFBk2F1;3LI*&x#AU9V9R6Sg zbmS}m`;(TWFeAjchz%=BKhvUw>UNIej`Yf@Jo}O6)RISjhaL|Px0BUN<#RQ0s_K1{ zvWE;QlJpY&1DqwK-mqVut(V$Il64)T1(Bf5#1j@XAXmY|Qn5k1LZ#_ll!HYa_(W~O z=mL8Wp^#&=sR3$Ep`?Cxz|bS&;*YJU=RTxbm4pwxd;cJ0#@0e~s%meE%Z;!%cHXXt zE#9cgzM`YA2zSmNSnahs?^H{@!x8;`H|pxOoQk(Qyxp~t6(xQ2=y7!Tm$O=hF53Q_ z)4OgRJ83ZVSo6BhmNoH&CKuxGj12avV5jL2s5>>p6;$RvbLmny#T(E9h?vhHS&5gg zp>2pJaHKSlcs>~%FUkXdiSQvDj*K;8DP+hcoEd&_4|^q_V}TvEYgZ_}fXVSTZ;Y(M zSfe|@L#CEft^85KS;?A~VBnLym zXvz-68f8Jt$Lke6eV9NKIp`mTH8L_T5o2D!T2O>YbfzKkVGgQevqF!s4WDso%Ab@; zCq%H1Jw`RCiYQ-xJLq-)!Wkt6zO*y3;I)ecJq0%^i!L;u!Z_ zwb1iH=1g3hE6tpJs*K{nZJLg`^ujYbC7gWjM6UC?ea@O$r1$D4wa-sJzItXNjn&m#<{=mS%vq0UyLJ-y_!c-T}@B>EZ1oMwW4 zo<@rUoGj$dR*7Bk$)t@iQ)&Y{i8}lhbU*@qnq?3q*5wdt@j8S?4o!pTC_vr4mp{rgbAa8Vicz?J1t@)0SP;WLnKBM@Sw5l!1i}e8HeUu z^+>vdBd``bSP24p{?}GYM;nEPj>0+`BT`}C0B2fJ*?bj3fM-K~Yw>Pca8i`g^xSF5 zMIf8v7#34D^KI4Y7PZJc-2!C}fBned3{tfTQ9d+62oMEVBhnPR;fPPe%Z|mH7XjC5 zYkfTs4xH>M0pczLzfewyz3b?S8{J!6m=G2-sE*cWv|X1|FsDDl4#i-|lX8ouqALl5 zEt%>*!u{PjY>MzZSesx<2qIn}9@LIU$c#_B=r2ob!b|1MS<|O#kEQ;7_ty3MM!d_m zzR+y1J!5vN%67pgg>Jr4a$?-seB~4FRxj&lr~0ifOFxYrMQYVrURp*OyYIQwu77oh z?osNqsYstXN^p7FDbF?Wdli!#&Q%Ur@9+~d@zAO9+dY8Re$T%uf)leZh@=v40_p?8FPdHU#Q(66`DUU|?OoyreeDZ26!RdbS-iMn~HOzuhcoCLwM7ZM5Vk}=^J*!V(@2%CC^ ziBN2tA?uQM5WV0B00R&=XGInwzn6h_Y06hY5ds`iNmkY^R#X0ADGmmSP?yL#gLp{5 zSQ9z?6;3Jn5GhF)kU#J@DcJlf9JSU8=PTyTUXxnGy*^?DN0ppuub>P0LjXICNn5gt z5tf!xBtZ<$n_#Iglsi69D*o>MG0<3wW!{(%rEx9}lJ9ZLt(c!@4lhV-<-f%ubYWK^ zsO@LVrF;1VX{(VgRG;LqUXCasLBHt*=^5t@F)p*PT~*pDlBa|B_(^|SkXBC<`)yLR0kAqL*On`iw1 ziiMi&T=I5UYnA@W78_o5=+J&PZJ2AK8(?T29g)4;Z)B>z(-^xaOJC1_R}tDTM3j? ziul}x3qCKj$F(Slv63Zu32ElvWqL4O!~|^eLix=WivXfNh`8!;?PN9L z9%%yU_2`y&v21}a<^pw?D?C~IfKbn-X*r-6Q^7yLB@kWWEIwNp^AM{IpzIe=v01K1 zA;coNgs27>$!}IWm z$$mJ^nPJ9t^eUMtG*DUrr#Lv@CA7uP1xuZvqTGSfCyY#@nEsySnpMGDWJtf>_6Vb8f#N;O%@l5f9QqREKXODd_cN={&!%ly;GW1zlSATK**U|v3 zyjR(Fh+Ax_g=w(1`60A_t?9eF6YDy5T@OE9)o)^Y_`~nnCT5)8SJ5?Bw?v!URQ+B~ zVO-DW0atGR;Csn^I2qb5i0a}R$dx5+Jxf5a5<1G*Nb2Wnk+c=V%sNC`%ifpLaKab% zVF;1lWC#fVAQ*h-SXT-`#Q zDd?IzEyevMJwE$hOpz?WULlZAD@H|O4NHa0U(vgLL9K-kDI?I>2&ocjsDYPhRRV97 z9#rtj&~c!N`Hp8_{ z{~+QvI3y+#I-v<&7#6jnwF~$HQ}pHr$OEZ%FX!kv*;+(0o&x;?KM?)~fx~>gOgmMT$`CyP^p>uBcREfG}#Ua}+ALKkCAAhj4pZ-kHgs6CyA5H1>FR z%*V?*ffIY)n7v&r(MhgQ(VN}7wkU8n-Bp#+Swdk6!pG>{ZR4K{GP3mE&bh}F+eaVI zjelI{l|SBZCiQ>yxZN}5{0@wc&W$qr!L*6prRf~^7O#{JAyWs;%fdkIO4?3P79v?> zB%fd>35LHyObJLJlg>`t+hqa87uRD@VqHBDkGm_s9|E~CQkp`bn6WUK_PivoVD!~| z07R3W*jvDyJ0QsN5!(G~I~OMST>jt4d#|Xb(mrm~Q4wiIM2a9}6cMRWX^J5kWe^o1 zN>vc@B7-zFDj*RKoWSB!Jw1~Druuglf5l*4=Hn=IhWt} z-kj@m!CEeH#jIrS{rvyG3O(t?+)dEz9;N0&whK>`zGT~;w5qMG^(qGuI}(lw1R0GM znm?DGj&=3xwW7k*%~)+^3R$io-|&WC!@_=XL6qwa=|hm-3nVmrwRKOF3B0u$;3Ypu zFeTw(xt%wN+VNKFM=0o}2r2zFU9lY^@Pr#cZ(iJdfpR<9SL(};bQkUi7wZ5Iy^OQ| zBN~NGtD9LWt!tiHA{4Vt>&XElJgV);>C`hZVWac&sZZUP#@`$rbF+AT((lF`kgYDP zkkERGx(U>kFR>UXOPZGZm6+45X_s+xJ@;P)cY9wtt`eFSSZ%%!Z~a4tT1Pe_jC9;c zBCJkY`gB8%F`Zd@abJpnq_v>?FtNZ1b2cvP#F%yW^^kg&4BujvD#6Cp?Ez-d?hF}#SZqJpR1ZvMQCTfo@_hHLtSiy{sH zVMNmek0n&0#tHoX2aQP*+K57^P2_CA>5aJ(*COAKLaoBW&Q{w%=seDdJJRVC`r*YF z-jCn*lyIa<5U}>oWOFyJffHU*&*)S4tKo`GmGRzLVe4w#M3!WWRsmSR<9xFE>MzYXy=qYE5N*8$s z0!~c_NLRzlr%N0)Xhbe&W~#iUt@uFr`|k)EoT*JVa2jthKbaB;Rn$ZDD0MYnQeb5> z##w&QbYVv$B0M}sOF)%OIfCLZ5bQ_^uT*d&FGTMDyfhG5CaA=(RoTLZ9Jh~(C>@9> zIH)=r4NkL2vhsU4@%4z}ryByio+{Y`teoyca$=^{`j-@KD58IzN*{@~Eu^kR(7f}+ zy;AWifK0AHPRvd%gBq@`VK#c-M$-B!(*u617u+TK#>6d;e6eM66d%i&C<+yEERg14 z^-a!-*(h7Yqc(oZ6!Dh%dxNoLZs@W!ESIvoai&U?$KC^pk3ELIR^?soaMC{ZGUZIf z{#V!?=YjVzig{ zgkFY;5s%T%&Bbk@j^Wz}dRj?6#EtB5#)i}xjr$x-CMrrt+SqR3-ql8kk~NHExiE*i z=asX@@)5(SpLf8l%JoiNqCX*d0 z^-q#iX5!ptIGzuYNab$TGH^!Jsgj_mx;x(Tr}*CP`nJx57G&Mhr`~Ua^!zE4QMXp@ zUQ;fO908ct3amjZGRNoWs;lsE|GptQK!|{3)IxTODF-B%aTmh@}PPPVIM#Gwn%AGBDd{yO?6=#cR^HhZbx zlObYyra0FX!!C`3>AI~OMzV?blCNE0Q&Gl&cM_u3=Gty=%^Zr($|~1)gjjm}&ez&? zbMvjN)VHa2nzvjqV8)@dxE*VXK=>^dNsuel^(+$G0V*2+p(^t;azY6QhwQzj(i^8* zkxhhhTM%v?q|xCi47WHL484p7EXVHY}7Z-)ivs=bia@w!s!z8 z&Ltd0_EK!lGl$%=H5<)$y?ozZ;dk6|QfGsHKXu4|m>E!ZEY@eFQCLt*7htCyhPWLr zW?!U#F+sMiG4FhRPRjjXpCy}f1BX5@!FTVkyLPHJfL$Nx64E$mxVo>#7E>Exa6Q@* z+kVhC9An|@!VKFG2;v_JIy$loZ%>x4x|Aj(0MuPl3*dQR3pPQ%^lEg~H@LA3UDeU? zdO&XCC%cYAoJuKJAz2wRT9$YtXFDZk1gAwt1&(n%G$6s~0rd$K#2-hm)|itoiegJRUI9qZT@iWJe?ClRll}Ls89jZ&pAXOxrp}44Sq9vdWRaTI1A1jyfkht)y zf$VVr2sN8!v;yow2_29P=;d5VEgF@IHdFa@=gIazz6ARQi@uUpk}n71mLq8r;i?le zOSz1;y-ac)KSmH9$;!sZXm)CzqaTPCEb!T9x$%SvmIO6$nU(k98(TXWu9QskxP?ZD zO{eL|ol%QE7qXaF^;eCB$L9p|!#Tm{)beT(f?%b5v~tM zcmnsOzeK}GR;XWRP~~ju-Iv8S9mRJZOg=hIu^VY!*fbCCu0D9`=(Wg| zcSnz(_{d&mUcMWokYT{%>?*C-S9J!?@=;&IMoYMvcx{{~nJ!D?73q;Ss-n~kCs)8< zArU~JOHtp|ILs{Ne4kfC78>0cWq_Bk;Izs|>0#4Zmn81QU+MIU`w33vr&sb8R}a=E zOilw4TNpQbv6QhEACJE>-A^%5I<=`0ks{ww4l>kt29Dt03E4te1qf64~SZ3Oskw z+K8Xe2*pE6(j$|+ALRMJq<}pO^>KVWJRq<3<5Ftp)7;8CGZhsN%`>j8ot%u|tvqP{ zH6SH+;l0^~#{&id*Di&$`l52PTJ7w%y=vYN#NT&k+sI#k+7{OAS^F`#KDY1Xhxd)A zv6spv>ej^Hro*nyo;u4hah9`(7zy!3yY(U2g;Q*~n}U}040!{A@ja&XpT8Y42dzbY(u5zJYUqZo$t z!(;6nN}6+hv~+PbWjVa+iB@|gQX~M-d_%PiRa~BH`@B1cEpH*X@uC}f0JqYE>0_UyVEToHG}KJ>!z8n;JXgF@rN z<{>Toy}vpF+aFF6|DXgUXT5+`7P-8?%<=&;zb0~bV7YH@BfT%E?$9xI7mD8T&$9L% zW|Q{8b}{eFpJ&%YucnuVP*+rVWz1^|8PQYj1ESoQ88Z4>il3Sxk`fD?se4pbqbG+| z_~w~=D&p`-aF;Q{VGv#b5gJm!VIZNI zAt;RzJ)5RqEy-}`o7w}SLTm8tSR5XigNPDLKYA5NpI?jhW&)_(gHAP71tMc`rBqak zMYYA_%pa=n;B==bKf)j|deMx5rkq#bN*P)q4H5EIz}kH^IyL60xhYX=K{TOb_+l=LlF>-eFwM;+it*RJxk^9ScPu>$-NaG=T(8jq^P{cG)#*@-8c>ie2^@rR$EX9u?rls6qK4s|=V_PXB@VJ7u|T-Y&dmJ0KIS!oHjVj&24|-*?)4EIb+S(pXb?5InTBS z_J+ts#pJ`djC@(*qq`r-?8r46ZXy>N*6q@Fa||_U!|ZAd-?h{+!~0Sv6)&X9F%yTr z$V1DUkm(QvR&E3}J9YmOmsh6D5W1WN_BCTLV`{cRUGwjO6-b;(wK$=Q9itG^8WGK4 zuh{sO`W8^oA7sdEn5ES1vkXHgfc+8q;WT=!(y^G*W(rPLV>B^PBbUIa6g+UtOFc~3_O@oazx_T0HG2VcJmKegg zPhiJK85lDq=P9V1Ys{O#IwHhcoA6@`z#Szzq zu>F@ElnzPxkAzm#XN(730z!et6nO*V6>(|?$66H!VLd~*nH*>2i$ug@n5qa6#oVMW zt@-1xWa7ZoCTOZo#zpb!5=Gx98_KQ9n!~qN-<^6lHRbr<5mra3-S~Pu|*>acL=)O6@rr~Bs`aY{N?0r6=MB|7h0$RPRBa957NMg+EVz3V zA2<3?eVrD^EfyPWR^KHExTcgdh;bA7$pJq`=6UKf04ZiWN`Wc{oY|%@y01p7EMyp; zaJghp|4!S5H2B2FF5LP~Si3CdQd1&z8Gv}^zZcNrfMB7&#;^kffl*gb%;2~yU;kOQ zi~!x{_2O)hNJ&OopF2_SY#VlWS~4^~!b@++Nv(?@FPAO$P8oJHdWR=$^G-d2Sb1B^ z0uo%kcC=E7Fh;eGsnK~aTU<}^9B1zZy!lXiWwyqI95zs64(0VW3n!G4oatUa3sCNd z)(fbY=OC9ZL!YMoAHtflI@KnKnS;g4B6mjOlF&Mwy4n+aFDFit6sNwV%!Vk|0&kdg zj*Q}L$oo!ru866Mn;1aJjrB$<989l;{#oZ|-h8s&8{ZhV=Kd&je=t#=>?rCDxIh^j z$6y2}@7!h;=jcDts*HiobPf6$6e&=Kc`4F>hTxALx#XO}Qnb$BXdnabQruNPq$B}a z`prJMG`AI#{TGs>^g=%Q|64Pf*$w2mKWkQeB(9!kfs{nH~eJiHcVH*jKLuBHhg;vuL?GlB#DLO#kOvBn1B;R{v1 zFkNFr(~2jeuv&GrU(i`r?p(3#Z(2eJV-@1Pm$vR%EfU5{cdT(4?eCK7xK^Y5Mi_$h z{|@vK@hnK+v}`!PPwU>GP4eveCkQ+;z$djXZLLJb& z_*l71wF+TEbv-+Q^1?_;=aaJ0C<+Ps(i?$ysq&XD5O~y$mEOZ`Z7Gpf z{%HU943~qC82%5oA0OJ{c+ys=^QyQ0>YaO!1JF8JW->cTQuODWXHk}gxmJlariN}+ zwCE2IICnWDKilSO(`JvOT~7S+PFim!swbMFNeSR?%e+=^50!@p_6?`bK0dkL#QfO2 ze~O?m}RPFY23({d5n&;)lx2Cta^y;?}ZBnN)wgE7)}@Y zcc0;_og*UJ}s8GZYq%{`wMMC*)3tLN+RlkmL%V|Sd%dHO3IleSnnt3FLTNR z3U2f)BNQJ?>)q)lrgOFd8Js#z&g}p0u{{N34uiMQXK{rM-GB>P8a5B*w~n-cu^=Ei2Bk^Q-f6}gRm zy3@y#gXxNf6<&XCDlR)#75v5g*f!tUkw)E(P1RumnblE=9kbD~p;PZYi%?dZvYWOE zY!?!b{`sKEZBxBD3qvlvSFzP~c5pcUcHsw)|7qs`|A~Pg+pN$azj9aOW4Wd(|1<7l z5WJObJHTz%ba(qt-CeSISZ~8xFo0OkA27n`{^P%l#5^v4Wy1D%I7(iz7~zn)(*N(% zG)d=6+RJuivX@<2SP}vFcp(*OsyrFy@xw1oF_Y zrd3RyDod_E9&s>32DZJ(l#X##j4bKhie9T#(B#{9{BACtLSrGs-bv&8rk)M0XSR%2 zbm5H=F8CfsWIv0(ahLhvvrIZ)XA zJ7|xzvZzDP(j^e8>_z2LSHk$5>j`N~XBio{5Y*3*rt{YJk$Uz^%;_`EPR=PZ$5Y*} zKAiy=s87XZU*BXtv7OjMG)@xhsR*qUJLq)PbT6a8kP?L?(W2{pZ+qlYw?t5!#x%O& z)wZb759`_lizr1>L{*s)d3bzj!Z-9K29W0pX2@ zMz>6EX(a@VTn*MiddV8BnbJV&h?O>SR2fAv2Ue-wX-?dJMiy};J6gVwe0ZEfIFQb3IeLhdYO?C20!$jrxFamd#p-4dNi8f^fwJZ= z06%9G;H+o4%P8B##$O5fHM@ufhM>Z??KkaGH-gdZ)F#+9oRNPP-)Y)(q0v#x{Cx2E z$p;fH0oDhGn{N!%1W)T8ZKxyYga!rA?h0gnOFvg!o5k8A7Wkp`gJaFcYF3p-M-JD9 zUMNp37uA^`DnH?UqcO~AKbhjb>GHwg>cldBV@$%x@7Y{?HVvStF6vuU#{nprXJrQw z7K)TwlZjx9DU$+Ei?_Op_6u$DvV6J-w+YcEs%!A^T&tNVOC(mZ_{K$}vsX&Yr*49M z^VpXl=Dx>BtLc@0)zp^p)U^<`RoWVgDJ)v`g!KkV`^d;KEK{Zh z;5c_V0fU=rIoX;|Gh`F=UXxdW$qxo8drvvWnm&L9h-m+AvMvCmW1-xtpPb}Z%Iy~KaBH@kbMy~D4^6&+2P@kQyD{$6(TcKg9`ftzk} zUtr_H&e^hh(}I%Iz7KQFs~w|EO6<#6e>3o^^~s8wR~kEnq#%j_c0kVtrRZmXZAgXH z^h0ipg&di`pQNOcM=Zo^bK^+`Q>JiN0o5HKAU4O52R!0PCl^S&)2?EPk_ zaRB@qU=9Q|+$# zXBpVJ`@}6Oz%;C^RNuhhr6I@2E|JKBB+|A=Y_sr8DG=VrDucdJTSI|Gp ztZdlu_+uH(64*Q~*n45^5H37Wg1s!a7@Sb~$;BHIt3JGaO>7%!oPX1!zEIqJ^w9Yx z=+|Bi9QgFoBhTyn#?e}=Pk6cY?wGrBX#4F4#rwvh>sKrPC*Xg z-Cn|*BMP^3W3~ILv7F4@$OzQUll2jM=>KJ`2MzC-HyDAqUHx4kzWT3X(+F9<3y6+# z811wxVwvfJ;ax#9@T_TmQzp#f+w=G{s^j%D;s*o#B2>;48h$+d^^ENS&d6V&#jGR4 zsGoxojT{~ZiSl3i6pXc+YY-?+kUhOD�V#b_q)2b*Bw9qYAl(SSLAGKY|iI%2Mr+ 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 Df)r(H diff --git a/doc/images/img/350f4915-f1b4-4d00-8cd4-1f9bd746bdcf_url_90081a18-623a-4a47-80b5-3abc67de4368.tmp b/doc/images/img/350f4915-f1b4-4d00-8cd4-1f9bd746bdcf_url_90081a18-623a-4a47-80b5-3abc67de4368.tmp deleted file mode 100755 index 89cec0edfaf18405943130a764b1d9cf6b573ff6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142212 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 z 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 T?(~HGv$KZ($M3iN)9C*Iz$7m0 diff --git a/doc/images/img/66a7f86d-bcc6-47a9-87a6-896fa6db21b6_url_6a8e202b-427e-48f6-9808-d435d7eeaeb7.tmp b/doc/images/img/66a7f86d-bcc6-47a9-87a6-896fa6db21b6_url_6a8e202b-427e-48f6-9808-d435d7eeaeb7.tmp deleted file mode 100755 index 2227c0a468cf8ce728e14922d04bef6b5f483c21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154334 zcmeFZ2~<DyF^fYPN9 zFwzF3Q-nlFfKtRr->8IyLZp+u6>v)$-md>Y=l}03&wKy5_r5XiyW<`h83R^!cGg^L zt~tN?%{lk#@ai~Xv*Tfh!-zF&5QsJKFJkpA!WRDTf9~hcoBYq+0si#rbA;l?HOp&n zORd>~SgW{3N^#992Z4g;x&GhpjriNonzd5v)^CvBC?hKeUr@gpv38A=)Y^4Y>({Sa z2VWfxzmHg_xPHs_y+3VGI_@vMBV2jktzQc_?zE|CRdMYBcI`iN`L>L#s+#&%4V~S( zdVBOu%?_9!w6L`O+3v9Y5eG*%cMnf5?-M=&X9Ld#oevJV5)pYdig@jMOl(|yLSj<# zos7GgS=smQ=R7DXE_q0QR9g19wywUR@yXMsHa4fdqx1I{FMIp?2L^|RM@IRAi9aSk zOnsc50Y86PTw4ALeOvict~Cg$|5&nr7wj)`DZ+BCUAInZo%Ek_tyvodzoZn`t>3

cUCKL2>e>Vzl`;VG~@HkW43 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

    !7I1k`*@Ul9}au!ob>MVOc(|gqDs)n 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 HcZ2^6RCg!{ diff --git a/doc/images/img/828d3498-dd41-460a-85db-a3139aa151ec_url_c2fb13b9-d00b-4b50-be4e-9e3fa5315c11.tmp b/doc/images/img/828d3498-dd41-460a-85db-a3139aa151ec_url_c2fb13b9-d00b-4b50-be4e-9e3fa5315c11.tmp deleted file mode 100755 index 6cfb0ebce3a920956e0edb41a6740750703c62f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165281 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 p|f1J#pM0+kt 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

    A^&vAhV1i(~6K5Ap{UeKZg5pmfJ#KKuHEBmqp`! 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 diff --git a/doc/images/rss_integration.png b/doc/images/rss_integration.png deleted file mode 100755 index 5a956d368546000f5ec889bc6fb797e45cbabac5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37845 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 diff --git a/doc/images/rss_situation_based_coordinate_system_creation_road_area.svg b/doc/images/rss_situation_based_coordinate_system_creation_road_area.svg index 89a2dce495..76446344d2 100644 --- a/doc/images/rss_situation_based_coordinate_system_creation_road_area.svg +++ b/doc/images/rss_situation_based_coordinate_system_creation_road_area.svg @@ -13,9 +13,9 @@ id="svg2" version="1.1" inkscape:version="0.91 r13725" - width="1035.3065" - height="296.65762" - viewBox="0 0 1035.3065 296.65762" + width="212.18651mm" + height="83.723373mm" + viewBox="0 0 751.84184 296.65762" sodipodi:docname="rss_situation_based_coordinate_system_creation_road_area.svg" inkscape:export-xdpi="90" inkscape:export-ydpi="90"> @@ -27,7 +27,7 @@ image/svg+xml - + @@ -93,7 +93,7 @@ id="namedview4" showgrid="true" inkscape:zoom="1.5581493" - inkscape:cx="449.41003" + inkscape:cx="361.78514" inkscape:cy="245.89162" inkscape:window-x="55" inkscape:window-y="24" @@ -102,7 +102,9 @@ fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" - fit-margin-bottom="0"> + fit-margin-bottom="0" + inkscape:document-units="px" + units="mm"> - - - Road Segments 0 1 2 3 4 + y="17.378914" + style="font-size:20px" /> 5 + y="19.946062" + style="font-size:20px" /> 6 + y="18.662485" + style="font-size:20px" /> + y="105.33462" /> of the ego vehicle and the object to be checked. - -Returns true if the situation could be created, false if there was an error during the operation. - -|==== -|returns |bool |Out |False on failure. -|egoVehicle |Object |In |The information on the ego vehicle object. -|objectToBeChecked |Object |In |The information on the object to be checked. -|situation |Situation |Out |The situation to be analyzed with RSS. -|==== - ====== RssSituationChecking Class providing functions required for the RSS checks of the situation. @@ -116,18 +85,6 @@ Returns true if the situations could be analyzed, false if an error occurred dur |responseStateVector |ResponseStateVector |Out |The vector of response states for the current situations. |==== -checkSituation - -Checks if the current situation pair is safe. - -Returns true if the situation could be analyzed, false if an error occurred during evaluation. - -|==== -|returns |bool |Out |False on failure. -|situation |Situation |In |The situation that should be analyzed. -|response |ResponseState |Out |The response state for the current situation. -|==== - ====== RssResponseResolving Class to resolve the responseStateVector of the different situation specific responses into a single responseState. This @@ -144,9 +101,8 @@ Returns true if the proper response state could be calculated, false otherwise. |==== |returns |bool |Out |False on failure. -|currentResponseStateVector |ResponseStateVector |In |Vector with all the responses gather for the current individual -situations -|properResponseState |ResponseState |Out |The proper overall response state. +|currentStates |ResponseStateVector |In |Vector with all the responses gather for the current situations +|responseState |ResponseState |Out |The proper overall response state. |==== ====== RssResponseTransformation @@ -181,6 +137,8 @@ The ad-rss-lib is implemented as a whole within the namespace ad_rss. .The RSS datatypes are organized within several sub-namespaces. image::img/1dab8fd5-c1cf-4a62-9232-66e2e9279428_url_c4da4d92-8fec-4665-bd03-914ad6ba8238.tmp[caption="Figure {counter:figure}. "] +For a detailed explanation of the individual types, please have a look into the doxygen documentation (https://intel.github.io/ad-rss-lib/doxygen/index.html). + ===== Namespace ad_rss::physics Namespace for RSS physics datatypes. @@ -188,142 +146,6 @@ Namespace for RSS physics datatypes. This contains types declaring physical measures referring time, distance, speed and basic combinations of that like ranges. -[[Figure:Namespace_ad_rss__physics]] -.The types describing the basic physics used within RSS implementation. -image::img/73fea5f0-2901-442f-a7df-c22d230d98ba_url_ef5c4189-bcfd-44c3-a65e-ad0474f97336.tmp[caption="Figure {counter:figure}. "] - -====== Acceleration (Typedef) - -The rate of change of (U) Speed of an object with respect to time. - -Unit: meter per second squared - -|==== -|dimension |Acceleration -|unit |MeterPerSecondSquared -|float64_t |[ 1 ] -|==== - -====== AccelerationRange (Structure) - -An acceleration range described by its borders: [minimum, maximum]. - -|==== -|minimum |Acceleration |The minimum value of the acceleration range. -|maximum |Acceleration |The maximum value of the acceleration range. -|==== - -====== Distance (Typedef) - -The length of a specific path traveled between two points. - -Unit: meter - -|==== -|dimension |Length -|unit |Meter -|float64_t |[ 1 ] -|==== - -====== DistanceSquared (Typedef) - -DistanceSquared represents a squared Distance. -Unit: square meter - -|==== -|unit |SquareMeter -|dimension |Area -|float64_t |[ 1 ] -|==== - -====== MetricRange (Structure) - -A metric range described by its borders: [minimum, maximum]. - -|==== -|minimum |Distance |The minimum value of the metric range. -|maximum |Distance |The maximum value of the metric range. -|==== - -====== Duration (Typedef) - -A duration represents a time interval - -Unit: second - -|==== -|unit |Second -|dimension |Time -|float64_t |[ 1 ] -|==== - -====== DurationSquared (Typedef) - -DurationSquared represents a squared Duration -Unit: second^2 - -|==== -|unit |SecondSquared -|float64_t |[ 1 ] -|==== - -====== ParametricValue (Typedef) - -A parametric value in the range of [0.0; 1.0] describing the relative progress. - -|==== -|float64_t |[ 1 ] -|==== - -====== Speed (Typedef) - -The rate of change of an object's position with respect to time. The speed of an object is the magnitude of its -velocity. - -Unit: meter per second - -|==== -|dimension |Velocity -|unit |MeterPerSecond -|float64_t |[ 1 ] -|==== - -====== SpeedSquared (Typedef) - -SpeedSquared represents a squared Speed. -Unit: square meter per second square - -|==== -|unit |SquareMeterPerSecondSquared -|float64_t |[ 1 ] -|==== - -====== ParametricRange (Structure) - -A parametric range within a lane segment described by its borders: [minimum, maximum]. - -|==== -|minimum |ParametricValue |The minimum value of the parametric range. -|maximum |ParametricValue |The maximum value of the parametric range. -|==== - -====== TimeIndex (Typedef) - -Defines a certain point in time. - -|==== -|uint64_t |[ 1 ] -|==== - -====== CoordinateSystemAxis (Enumeration) - -Enumeration defining the axis of the situation coordinate system. - -|==== -|Longitudinal |0 |longitudinal axis: ego vehicle is driving in positive direction -|Lateral |1 |lateral axis: ego vehicle left to right defines the positive direction -|==== - ===== Namespace ad_rss::world Namespace for RSS world datatypes. @@ -332,225 +154,6 @@ This contains types that are used to describe the local world model RSS is actin object states as well as the parts of the road network relevant to judge the situations between ego vehicle and the objects. -[[Figure:Namespace_ad_rss__world_road_types]] -.The types describing the road and lane geometries used within the local RSS world model. -image::img/828d3498-dd41-460a-85db-a3139aa151ec_url_c2fb13b9-d00b-4b50-be4e-9e3fa5315c11.tmp[caption="Figure {counter:figure}. "] - -[[Figure:Namespace_ad_rss__world_object_types]] -.The types describing the objects used within the local RSS world model. -image::img/0eba3100-9694-4554-be43-1f291486cf5d_url_be889d20-6794-4049-9794-d3555b46b011.tmp[caption="Figure {counter:figure}. "] - -[[Figure:Namespace_ad_rss__world]] -.The types describing the high level world model and object used within the local RSS world model. -image::img/350f4915-f1b4-4d00-8cd4-1f9bd746bdcf_url_90081a18-623a-4a47-80b5-3abc67de4368.tmp[caption="Figure {counter:figure}. "] - -====== LaneSegmentId (Typedef) - -Defines the unique id of a lane segment. - -|==== -|uint64_t |[ 1 ] -|==== - -====== LaneSegmentType (Enumeration) - -|==== -|Normal |0 |Normal lane segement. Nothing special to consider. -|Intersection |1 |Lane segment is intersecting with another lane segment of the intersecting road. -|==== - -====== LaneDrivingDirection (Enumeration) - -|==== -|Bidirectional |0 |Traffic flow in this lane segment is in both directions. -|Positive |1 |Nominal traffic flow in this lane segment is positive RoadArea direction. -|Negative |2 |Nominal traffic flow in this lane segment is negative RoadArea direction. -|==== - -====== LaneSegment (Structure) - -Defines a lane segment. - -|==== -|id |LaneSegmentId |The id of the lane segment. -|type |LaneSegmentType |The type of this lane segment in context of the RssArea it belongs to. -|drivingDirection |LaneDrivingDirection |The nominal direction of the traffic flow of this lane segment in context of -the RssArea it belongs to. -|length |MetricRange |The metric range of the lane segments length. -|width |MetricRange |The metric range of the lane segments width. -|==== - -====== RoadSegment (Typedef) - -A RoadSegment is defined by lateral neighboring lane segments. The lane segments within a road segment have to be -ordered from left to right in respect to the driving direction defined by the road area. - -|==== -|ad_rss::world::LaneSegment |[ * ] -|==== - -====== RoadArea (Typedef) - -A RoadArea is defined by longitudinal neighboring road segments. The road segments within a road area have to be ordered -from start to end in respect to the driving direction. - -|==== -|ad_rss::world::RoadSegment |[ * ] -|==== - -====== Scene (Structure) - -A Scene defines the relation between the ego vehicle and another object. It consists of the type of situation between -these two and the corresponding road areas of interest. All lane segments on the route between ego vehicle and the -object have to be part of this. RSS has to be able to calculate minimum and maximum distances between ego vehicle and -object as well as accelerated movements within this area. - -|==== -|situationType |SituationType |The type of the current situation. Depending on this type the other fields of the RssArea -might be left empty. -|egoVehicleRoad |RoadArea |The RssRoadArea the ego vehicle is driving in. The driving direction of the ego vehicle -define the ordering of the road segments. In non-intersection situations the object is also driving in this road area. -|intersectingRoad |RoadArea |The RssRoadArea an intersecting vehicle is driving in. The driving direction of the -intersecting vehicle define the ordering of the road segments. The road area should contain all neigboring lanes the -other vehcile is able to drive in. In non-intersection situations this road area is empty. -|object |Object |The object this scene refers to. -|==== - -====== ObjectId (Typedef) - -Defines the unique id of an object. - -|==== -|uint64_t |[ 1 ] -|==== - -====== ObjectType (Enumeration) - -Enumeration describing the types of object. - -|==== -|EgoVehicle |0 |The object is the ego vehicle. -|OtherVehicle |1 |The object is some other real vehicle. -|ArtificialObject |2 |The object is an artificial one. -|==== - -====== OccupiedRegion (Structure) - -Describes the region that an object covers within a lane segment. - -An object on a lane is described by the parametric range it spans in each of the two lane segment directions. - -|==== -|segmentId |LaneSegmentId |The id of the lane segment this region refers to. -|lonRange |ParametricRange |The parametric range an object spans in longitudinal direction within a lane segment. -|latRange |ParametricRange |The parametric range an object spans in lateral direction within a lane segment. -|==== - -====== OccupiedRegionVector (Typedef) - -A vector of occupied regions. - -|==== -|ad_rss::world::OccupiedRegion |[ * ] -|==== - -====== LongitudinalRssAccelerationValues (Structure) - -Collection of the RSS acceleration values in longitudinal direction. - -|==== -|accelMax |Acceleration |Absolute amount of the maximum allowed acceleration. This value has always to be positive, -zero is allowed. -|brakeMax |Acceleration |Absolute amount of the maximum allowed braking deceleration. This value has always to be -positive and not smaller than brakeMin. -|brakeMin |Acceleration |Absolute amount of the minimum allowed breaking deceleration. This value has always to be -positive and not smaller than brakeMinCorrect. -|brakeMinCorrect |Acceleration |Absolute amount of the minimum allowed breaking deceleration when driving on the correct -lane. This value has always to be positive. -|==== - -====== LateralRssAccelerationValues (Structure) - -Collection of the RSS acceleration values in lateral direction. - -|==== -|accelMax |Acceleration |Absolute amount of the maximum allowed acceleration. This value has always to be positive, zero -is allowed. -|brakeMin |Acceleration |Absolute amount of the minimum allowed breaking deceleration. This value has always to be -positive. -|==== - -====== Dynamics (Structure) - -Describes the RSS dynamics values to be applied for an object within the metric world frame. The dynamics consist of a -longitudinal component, a lateral component and a lateral fluctuation margin to be taken into account to compensate for -lateral fluctuations. - -|==== -|alphaLon |LongitudinalRssAccelerationValues |RSS dynamics values along longitudinal coordinate system axis. -|alphaLat |LateralRssAccelerationValues |RSS dynamics values along lateral coordinate system axis. -|lateralFluctuationMargin |Distance |Defines the lateral fluctuation margin to be taken into account. -|==== - -====== Object (Structure) - -An object is described by several aspects: the unique id of an object, the type of the object, the lane regions the -object occupies, the objects velocity within its lane and finally the area of interaction of ego vehicle and the object. - -|==== -|objectId |ObjectId |Defines the unique id of an object. This id has to be constant over time for the same object. -|objectType |ObjectType |Defines the type of the object. -|occupiedRegions |OccupiedRegionVector |Defines the lane regions the object occupies. -|dynamics |Dynamics |Defines the objects dynamics to be applied. This parameters are provided on a per object basis to -be able to adapt these e.g. in respect to object type or the weather conditions. -|velocity |Velocity |Defines the objects velocity in respect to its current major lane. -|responseTime |Duration |Defines the response time of the object within the current scene. -|==== - -====== WorldModel (Structure) - -The world model, RSS requires as input, consists of the egoVehicle and object description as well as the list of -relevant lane segments. - -|==== -|timeIndex |TimeIndex |The time index is required to distinguish different points in time when tracking states or -transforming responses back. Each world model referring to another point in time should get another time index. The time -index of the world model must not be zero. -|egoVehicle |Object |The ego vehicle. -|scenes |SceneVector |All scenes -|==== - -====== AccelerationRestriction (Structure) - -Defines restrictions of the vehicle acceleration. - -|==== -|timeIndex |TimeIndex |The time index these acceleration restrictions are referring to. -|lateralLeftRange |AccelerationRange |The range of the acceleration restriction in lateral left direction. -|longitudinalRange |AccelerationRange |The range of the acceleration restriction in longitudinal direction. -|lateralRightRange |AccelerationRange |The range of the acceleration restriction in lateral right direction. -|==== - -====== Velocity (Structure) - -Defines the velocity of an object within its current lane. The velocity consists of a longitudinal and a lateral -component. - -|==== -|speedLon |Speed |The longitudinal speed component of the velocity vector. -The longitudinal component of the velocity is always measured tangential to the center line of the current lane. -|speedLat |Speed |The lateral speed component of the velocity vector. -The lateral component of the velocity is always measured orthogonal to the center line of the current lane. -|==== - -====== SceneVector (Typedef) - -A vector of scenes. - -|==== -|ad_rss::world::Scene |[ * ] -|==== - ===== Namespace ad_rss::situation Namespace for RSS situation datatypes. @@ -558,211 +161,12 @@ Namespace for RSS situation datatypes. This contains types that are used within the calculation of the RSS formulas which are performed within the situation coordinate system. -[[Figure:Namespace_ad_rss__situation_vehicle_state]] -.The types describing the vehicle state used within the situation coordinate system. -image::img/143f273a-ef21-4afe-934b-398bcf53031c_url_fbbf525c-6d26-4db6-be96-562cf15945e3.tmp[caption="Figure {counter:figure}. "] - -[[Figure:Namespace_ad_rss__situation]] -.The types describing a situation used within the situation coordinate system. -image::img/c4815d4c-bf13-48dc-b30a-8ba5db2123bb_url_a74eeada-8027-4d53-9713-8550ffb5b82b.tmp[caption="Figure {counter:figure}. "] - -====== VehicleState (Structure) - -The state of an object in a RSS situation. - -The state consists of the following components in respect to the situation coordinate system: the velocity, the distance -to the intersection (if applicable), the dynamics, the response time, a Right-of-Way priority flag as well as a flag -stating if the vehicle is driving in its correct lane. - -|==== -|velocity |Velocity |The situation specific velocity. -|dynamics |Dynamics |The situation specific dynamics. -|responseTime |Duration |The situation specific response time. -|hasPriority |bool |Flag indicating if the situation specific Right-of-Way relation. -|isInCorrectLane |bool |Flag indicating if the vehicle driving in the correct lane -|distanceToEnterIntersection |Distance |The minimum distance to be covered by the vehicle to enter the intersection. -|distanceToLeaveIntersection |Distance |The maximum distance to cover by the vehicle to leave the intersection -completely. -|==== - -====== SituationId (Typedef) - -The unique id of an situation over time. - -|==== -|uint64_t |[ 1 ] -|==== - -====== SituationType (Enumeration) - -Enumeration describing the type of situation. - -|==== -|NotRelevant |0 |The other vehicle cannot conflict with the ego vehicle. This kind of situations are always considered -to be safe. Use this situation state to make the object visible in the result vector to be a known object, but not -relevant for RSS (e.g. object in opposite direction, but already passed by). -|SameDirection |1 |Both drive on the same road in the same direction. -|OppositeDirection |2 |Both drive on the same road in the opposite direction. -|IntersectionEgoHasPriority |3 |Both drive on individual roads which intersect at the end. Ego vehicle has priority over -object. -|IntersectionObjectHasPriority |4 |Both drive on individual roads which intersect at the end. Object has priority over -ego vehicle. -|IntersectionSamePriority |5 |Both drive on individual roads which intersect at the end. Object and ego vehicle have -same priority. -|==== - -====== LateralRelativePosition (Enumeration) - -Enumeration describing the relative lateral position between two objects, a and b, within their situation coordinate -system. - -|==== -|AtLeft |0 |The object a is completely left of object b. This means there is an actual lateral space between them. -|OverlapLeft |1 |The objects overlap. The left border of object a is left of the left border of object b AND the right -border of object a is left of the right border of object b. -|Overlap |2 |The objects overlap, but neither the conditions for OverlapLeft nor OverlapRight are applicable. -|OverlapRight |3 |The objects overlap. The left border of object a is right of the left border of object b AND the right -border of object a is right of the right border of object b. -|AtRight |4 |The object a is completely right of object b. This means there is an actual lateral space between them. -|==== - -====== LongitudinalRelativePosition (Enumeration) - -Enumeration describing the relative longitudinal position between two objects, a and b, within their situation -coordinate system. - -|==== -|InFront |0 |The object a is completely in front of object b. This means there is an actual longitudinal space between -them. -|OverlapFront |1 |The objects overlap. The front border of object a is in front of the front border of object b AND the -back border of object a is in front of the back border of object b. -|Overlap |2 |The objects overlap, but neither the conditions for OverlapFront nor OverlapBack are applicable. -|OverlapBack |3 |The objects overlap. The front border of object a is at back of the front border of object b AND the -back border of object a is at back of the back border of object b. -|AtBack |4 |The object a is completely at back of object b. This means there is an actual longitudinal space between -them. -|==== - -====== RelativePosition (Structure) - -Describes the relative position between two objects within their situation coordinate system. - -|==== -|longitudinalPosition |LongitudinalRelativePosition |The longitudinal relative position between to objects within their -situation coordinate system. -|longitudinalDistance |Distance |The longitudinal distance between the two objects within their situation coordinate -system. -|lateralPosition |LateralRelativePosition |The lateral relative position between to objects within their situation -coordinate system. -|lateralDistance |Distance |The lateral distance between the two objects within their situation coordinate system. -|==== - -====== Situation (Structure) - -Describes a RSS situation. - -A situation always considers the relative relation between two objects: the ego vehicle and one other vehicle. The -situation coordinate system is unique for one specific situation. As a consequence the vehicle state of the ego vehicle -in different RSS situations cannot be compared to each other. Consists of a situation id and type, the VehicleState of -the ego vehicle, the VehicleState of the other vehicle and the RelativePosition between ego vehicle and other vehicle. - -|==== -|timeIndex |TimeIndex |The time index is required to distinguish different points in time when tracking states or -transforming responses back. -|situationId |SituationId |The unique id of the situation.The situation id has to be constant over time for a pair of -ego vehicle and specific other vehicle. -E.g. might be filled with an id identifying the other vehicle unambiguously. -|situationType |SituationType |The type of the current situation. -|egoVehicleState |VehicleState |The vehicle state of the ego vehicle -|otherVehicleState |VehicleState |The vehicle state of the other vehicle within the situation. -|relativePosition |RelativePosition |The relative position between the ego vehicle and the other vehicle within this -situation. -|==== - -====== SituationVector (Typedef) - -A vector of situations. - -|==== -|ad_rss::situation::Situation |[ * ] -|==== - ===== Namespace ad_rss::state Namespace for RSS state datatypes. This contains types used in conjunction with the RSS state and responses. -[[Figure:Namespace_ad_rss__state]] -.The types describing the RSS response and the RSS state. -image::img/66a7f86d-bcc6-47a9-87a6-896fa6db21b6_url_6a8e202b-427e-48f6-9808-d435d7eeaeb7.tmp[caption="Figure {counter:figure}. "] - -====== LongitudinalResponse (Enumeration) - -Enumeration defining the possible longitudinal responses. - -Be aware: there has to be a strict order of the enumeration values according to the strictness of the response. - -|==== -|None |0 |No action required. -|BrakeMinCorrect |1 |Vehicle has to decerate at least with brake min correct longitudinally -|BrakeMin |2 |Vehicle has to decerate at least with brake min longitudinally -|==== - -====== LateralResponse (Enumeration) - -Enumeration defining the possible lateral responses. - -Be aware: there has to be a strict order of the enumeration values according to the strictness of the response. - -|==== -|None |0 |No action required. -|BrakeMin |1 |Vehicle has to decerate at least with brake min laterally -|==== - -====== LongitudinalRssState (Structure) - -Struct to store the longitudinal RSS state. - -|==== -|isSafe |bool |Flag to indicate if the state is longitudinal safe. -|response |LongitudinalResponse |required response in longitudinal direction -|==== - -====== LateralRssState (Structure) - -Struct to store the lateral RSS state. - -|==== -|isSafe |bool |Flag to indicate if the state is lateral safe. -|response |LateralResponse |required response in lateral direction -|==== - -====== ResponseState (Structure) - -Struct defining the RSS state of a single object. - -|==== -|timeIndex |TimeIndex |The time index is required to distinguish different points in time when tracking states or -transforming responses back. -|situationId |SituationId |Id of the situation this state refers to.The id has to remain unique over time representing -the situation (ego-vehicle / object pair) under investigation. -It is used to track the state of the ego-vehicle / object constellation i.e. at point of danger threshold time. -|longitudinalState |LongitudinalRssState |The current longitudinal rss state. -|lateralStateRight |LateralRssState |The current lateral rss state at right side in respect to ego-vehicle driving -direction. -|lateralStateLeft |LateralRssState |The current lateral rss state at left side in respect to ego-vehicle driving -direction. -|==== - -====== ResponseStateVector (Typedef) - -A vector of response states. - -|==== -|ad_rss::state::ResponseState |[ * ] -|==== - === Dynamic View [[Figure:RssSubsystemChecker]] @@ -778,7 +182,7 @@ received from the SensorSubsystem: 4. Right-of-Way is given, not taken In case a dangerous situation is detected a respective proper response is calculated and the actuator control commands -received +received from the PlanningSubsystem are restricted accordingly to realize planning safety. ==== RssSituationExtractionImpl diff --git a/doc/includes/Overview.adoc b/doc/includes/Overview.adoc index adcbc2407b..08285b8fff 100644 --- a/doc/includes/Overview.adoc +++ b/doc/includes/Overview.adoc @@ -73,7 +73,7 @@ command restrictions as output. [[Figure:Library]] .ad-rss-lib (implemented in the library) and its interfaces to the outside world -image::rss_integration.png[caption="Figure {counter:figure}. "] +image::ad-rss-lib-Integrate_Into_Sense-Plan-Act.png[caption="Figure {counter:figure}. "] In summary, the ad-rss-lib receives an object list, with information about all objects in the surrounding environment of the ego vehicle. Then, the ad-rss-lib @@ -127,4 +127,4 @@ The remainder of this document is structured as follows: well as <> are of particular importance. - <> provides some notes on security design aspects -- <> provides some notes on safety design aspects \ No newline at end of file +- <> provides some notes on safety design aspects diff --git a/include/ad_rss/core/RssCheck.hpp b/include/ad_rss/core/RssCheck.hpp index 8ad5a58655..90e9145467 100644 --- a/include/ad_rss/core/RssCheck.hpp +++ b/include/ad_rss/core/RssCheck.hpp @@ -50,6 +50,7 @@ namespace core { class RssResponseResolving; class RssSituationChecking; +class RssSituationExtraction; /** * @brief RssCheck @@ -82,6 +83,7 @@ class RssCheck private: std::unique_ptr mResponseResolving; std::unique_ptr mSituationChecking; + std::unique_ptr mSituationExtraction; }; } // namespace core diff --git a/include/ad_rss/core/RssSituationExtraction.hpp b/include/ad_rss/core/RssSituationExtraction.hpp index 61be8a3a64..b2a87431de 100644 --- a/include/ad_rss/core/RssSituationExtraction.hpp +++ b/include/ad_rss/core/RssSituationExtraction.hpp @@ -42,43 +42,88 @@ */ namespace ad_rss { +/*! + * @brief namespace world + */ +namespace world { +/*! + * @brief forward declaration of class RssSituationIdProvider + */ +class RssSituationIdProvider; +} // namespace world + /*! * @brief namespace core */ namespace core { /*! - * @brief namespace RssSituationExtraction + * @brief class RssSituationExtraction * - * Namespace providing functions required for the extraction of the RSS situations from the RSS world model. + * Class providing functions required for the extraction of the RSS situations from the RSS world model. */ -namespace RssSituationExtraction { +class RssSituationExtraction +{ +public: + /*! + * @brief constructor + */ + RssSituationExtraction(); -/** - * @brief Extract the RSS situation of the ego vehicle and the object to be checked. - * - * @param [in] timeIndex - the time index of the current situation - * @param [in] egoVehicle - the information on the ego vehicle object - * @param [in] currentScene - the information on the object to be checked and the according lane information - * @param [out] situation - the situation to be analyzed with RSS - * - * @return true if the situation could be created, false if there was an error during the operation. - */ -bool extractSituation(physics::TimeIndex const &timeIndex, - world::Object const &egoVehicle, - world::Scene const ¤tScene, - situation::Situation &situation); + /*! + * @brief destructor + */ + ~RssSituationExtraction(); -/** - * @brief Extract all RSS situations to be checked from the world model. - * - * @param [in] worldModel - the current world model information - * @param [out] situationVector - the vector of situations to be analyzed with RSS - * - * @return true if the situations could be created, false if there was an error during the operation. - */ -bool extractSituations(world::WorldModel const &worldModel, situation::SituationVector &situationVector); + /** + * @brief Extract all RSS situations to be checked from the world model. + * + * @param [in] worldModel - the current world model information + * @param [out] situationVector - the vector of situations to be analyzed with RSS + * + * @return true if the situations could be created, false if there was an error during the operation. + */ + bool extractSituations(world::WorldModel const &worldModel, situation::SituationVector &situationVector); + +private: + void calcluateRelativeLongitudinalPosition(physics::MetricRange const &egoMetricRange, + physics::MetricRange const &otherMetricRange, + situation::LongitudinalRelativePosition &longitudinalPosition, + physics::Distance &longitudinalDistance); + void calcluateRelativeLongitudinalPositionIntersection(physics::MetricRange const &egoMetricRange, + physics::MetricRange const &otherMetricRange, + situation::LongitudinalRelativePosition &longitudinalPosition, + physics::Distance &longitudinalDistance); + void calcluateRelativeLateralPosition(physics::MetricRange const &egoMetricRange, + physics::MetricRange const &otherMetricRange, + situation::LateralRelativePosition &lateralPosition, + physics::Distance &lateralDistance); + bool convertObjectsNonIntersection(world::Scene const ¤tScene, situation::Situation &situation); + void convertToIntersectionCentric(physics::MetricRange const &objectDimension, + physics::MetricRange const &intersectionPosition, + physics::MetricRange &dimensionsIntersection); + bool convertObjectsIntersection(world::Scene const ¤tScene, situation::Situation &situation); + + /** + * @brief Extract the RSS situation of the ego vehicle and the object to be checked. + * + * @param [in] timeIndex the time index of the current situation + * @param [in] egoVehicleRssDynamics the RSS dynamics of the ego vehicle + * @param [in] currentScene the information on the current scene with the object to be checked + * @param [out] situation the situation to be analyzed with RSS + * + * @return true if the situation could be created, false if there was an error during the operation. + */ + bool extractSituationInputRangeChecked(physics::TimeIndex const &timeIndex, + world::RssDynamics const &egoVehicleRssDynamics, + world::Scene const ¤tScene, + situation::Situation &situation); + bool mergeVehicleStates(situation::VehicleState const &otherVehicleState, + situation::VehicleState &mergedVehicleState); + bool mergeSituations(situation::Situation const &otherSituation, situation::Situation &mergedSituation); + + std::unique_ptr mSituationIdProvider; +}; -} // namespace RssSituationExtraction } // namespace core } // namespace ad_rss diff --git a/include/generated/ad_rss/situation/VehicleState.hpp b/include/generated/ad_rss/situation/VehicleState.hpp index e7c12c8518..64c36eb492 100644 --- a/include/generated/ad_rss/situation/VehicleState.hpp +++ b/include/generated/ad_rss/situation/VehicleState.hpp @@ -42,8 +42,7 @@ #include #include #include "ad_rss/physics/Distance.hpp" -#include "ad_rss/physics/Duration.hpp" -#include "ad_rss/world/Dynamics.hpp" +#include "ad_rss/world/RssDynamics.hpp" #include "ad_rss/world/Velocity.hpp" /*! * @brief namespace ad_rss @@ -112,8 +111,8 @@ struct VehicleState */ bool operator==(const VehicleState &other) const { - return (velocity == other.velocity) && (dynamics == other.dynamics) && (responseTime == other.responseTime) - && (hasPriority == other.hasPriority) && (isInCorrectLane == other.isInCorrectLane) + return (velocity == other.velocity) && (dynamics == other.dynamics) && (hasPriority == other.hasPriority) + && (isInCorrectLane == other.isInCorrectLane) && (distanceToEnterIntersection == other.distanceToEnterIntersection) && (distanceToLeaveIntersection == other.distanceToLeaveIntersection); } @@ -138,12 +137,7 @@ struct VehicleState /*! * The situation specific dynamics. */ - ::ad_rss::world::Dynamics dynamics; - - /*! - * The situation specific response time. - */ - ::ad_rss::physics::Duration responseTime{0.0}; + ::ad_rss::world::RssDynamics dynamics; /*! * Flag indicating if the situation specific Right-of-Way relation. diff --git a/include/generated/ad_rss/situation/VehicleStateValidInputRange.hpp b/include/generated/ad_rss/situation/VehicleStateValidInputRange.hpp index 0e814afb23..3a27fb22aa 100644 --- a/include/generated/ad_rss/situation/VehicleStateValidInputRange.hpp +++ b/include/generated/ad_rss/situation/VehicleStateValidInputRange.hpp @@ -42,9 +42,8 @@ #include #include #include "ad_rss/physics/DistanceValidInputRange.hpp" -#include "ad_rss/physics/DurationValidInputRange.hpp" #include "ad_rss/situation/VehicleState.hpp" -#include "ad_rss/world/DynamicsValidInputRange.hpp" +#include "ad_rss/world/RssDynamicsValidInputRange.hpp" #include "ad_rss/world/VelocityValidInputRange.hpp" /*! @@ -55,7 +54,6 @@ * \returns \c true if VehicleState is considered to be within the specified input range * * \note the specified input range is defined by the ranges of all members, plus: - * ::ad_rss::physics::Duration(0.) < responseTime <= ::ad_rss::physics::Duration(10.) * ::ad_rss::physics::Distance(0.) <= distanceToEnterIntersection <= distanceToLeaveIntersection * distanceToEnterIntersection <= distanceToLeaveIntersection <= ::ad_rss::physics::Distance(1e4) */ @@ -66,13 +64,10 @@ inline bool withinValidInputRange(::ad_rss::situation::VehicleState const &input // LCOV_EXCL_BR_START: not always possible to cover especially all exception branches // check for generic member input ranges bool const membersInValidInputRange = withinValidInputRange(input.velocity) && withinValidInputRange(input.dynamics) - && withinValidInputRange(input.responseTime) && withinValidInputRange(input.distanceToEnterIntersection) + && withinValidInputRange(input.distanceToEnterIntersection) && withinValidInputRange(input.distanceToLeaveIntersection); // check for individual input ranges - bool const responseTimeInInputRange = (::ad_rss::physics::Duration(0.) < input.responseTime) - && (input.responseTime <= ::ad_rss::physics::Duration(10.)); - bool const distanceToEnterIntersectionInInputRange = (::ad_rss::physics::Distance(0.) <= input.distanceToEnterIntersection) && (input.distanceToEnterIntersection <= input.distanceToLeaveIntersection); @@ -81,7 +76,7 @@ inline bool withinValidInputRange(::ad_rss::situation::VehicleState const &input = (input.distanceToEnterIntersection <= input.distanceToLeaveIntersection) && (input.distanceToLeaveIntersection <= ::ad_rss::physics::Distance(1e4)); - return membersInValidInputRange && responseTimeInInputRange && distanceToEnterIntersectionInInputRange + return membersInValidInputRange && distanceToEnterIntersectionInInputRange && distanceToLeaveIntersectionInInputRange; // LCOV_EXCL_BR_STOP: not always possible to cover especially all exception branches } diff --git a/include/generated/ad_rss/world/Object.hpp b/include/generated/ad_rss/world/Object.hpp index a704343cc6..1188275d3f 100644 --- a/include/generated/ad_rss/world/Object.hpp +++ b/include/generated/ad_rss/world/Object.hpp @@ -42,8 +42,6 @@ #include #include #include -#include "ad_rss/physics/Duration.hpp" -#include "ad_rss/world/Dynamics.hpp" #include "ad_rss/world/ObjectId.hpp" #include "ad_rss/world/ObjectType.hpp" #include "ad_rss/world/OccupiedRegionVector.hpp" @@ -61,8 +59,7 @@ namespace world { * \brief DataType Object * * An object is described by several aspects: the unique id of an object, the type of the object, the lane regions the - * object occupies, the objects velocity within its lane and finally the area of interaction of ego vehicle and the - * object. + * object occupies, the objects velocity within its lane. */ struct Object { @@ -114,8 +111,7 @@ struct Object bool operator==(const Object &other) const { return (objectId == other.objectId) && (objectType == other.objectType) - && (occupiedRegions == other.occupiedRegions) && (dynamics == other.dynamics) && (velocity == other.velocity) - && (responseTime == other.responseTime); + && (occupiedRegions == other.occupiedRegions) && (velocity == other.velocity); } /** @@ -138,28 +134,17 @@ struct Object /*! * Defines the type of the object. */ - ::ad_rss::world::ObjectType objectType; + ::ad_rss::world::ObjectType objectType{::ad_rss::world::ObjectType::Invalid}; /*! * Defines the lane regions the object occupies. */ ::ad_rss::world::OccupiedRegionVector occupiedRegions; - /*! - * Defines the objects dynamics to be applied. This parameters are provided on a per object basis to be able to adapt - * these e.g. in respect to object type or the weather conditions. - */ - ::ad_rss::world::Dynamics dynamics; - /*! * Defines the objects velocity in respect to its current major lane. */ ::ad_rss::world::Velocity velocity; - - /*! - * Defines the response time of the object within the current scene. - */ - ::ad_rss::physics::Duration responseTime; }; } // namespace world diff --git a/include/generated/ad_rss/world/ObjectType.hpp b/include/generated/ad_rss/world/ObjectType.hpp index 45e2f89f5e..54e09c32b3 100644 --- a/include/generated/ad_rss/world/ObjectType.hpp +++ b/include/generated/ad_rss/world/ObjectType.hpp @@ -57,20 +57,25 @@ namespace world { */ enum class ObjectType : int32_t { + /*! + * The object type is invalid. + */ + Invalid = 0, + /*! * The object is the ego vehicle. */ - EgoVehicle = 0, + EgoVehicle = 1, /*! * The object is some other real vehicle. */ - OtherVehicle = 1, + OtherVehicle = 2, /*! * The object is an artificial one. */ - ArtificialObject = 2 + ArtificialObject = 3 }; } // namespace world diff --git a/include/generated/ad_rss/world/ObjectTypeValidInputRange.hpp b/include/generated/ad_rss/world/ObjectTypeValidInputRange.hpp index 2177dc00b7..41f7571160 100644 --- a/include/generated/ad_rss/world/ObjectTypeValidInputRange.hpp +++ b/include/generated/ad_rss/world/ObjectTypeValidInputRange.hpp @@ -57,7 +57,8 @@ inline bool withinValidInputRange(::ad_rss::world::ObjectType const &input) try { // LCOV_EXCL_BR_START: not always possible to cover especially all exception branches - return (input == ::ad_rss::world::ObjectType::EgoVehicle) || (input == ::ad_rss::world::ObjectType::OtherVehicle) + return (input == ::ad_rss::world::ObjectType::Invalid) || (input == ::ad_rss::world::ObjectType::EgoVehicle) + || (input == ::ad_rss::world::ObjectType::OtherVehicle) || (input == ::ad_rss::world::ObjectType::ArtificialObject); // LCOV_EXCL_BR_STOP: not always possible to cover especially all exception branches } diff --git a/include/generated/ad_rss/world/ObjectValidInputRange.hpp b/include/generated/ad_rss/world/ObjectValidInputRange.hpp index 6ac7d76a83..fca4c377ee 100644 --- a/include/generated/ad_rss/world/ObjectValidInputRange.hpp +++ b/include/generated/ad_rss/world/ObjectValidInputRange.hpp @@ -41,8 +41,6 @@ #include #include -#include "ad_rss/physics/DurationValidInputRange.hpp" -#include "ad_rss/world/DynamicsValidInputRange.hpp" #include "ad_rss/world/Object.hpp" #include "ad_rss/world/ObjectTypeValidInputRange.hpp" #include "ad_rss/world/OccupiedRegionVectorValidInputRange.hpp" @@ -55,8 +53,7 @@ * * \returns \c true if Object is considered to be within the specified input range * - * \note the specified input range is defined by the ranges of all members, plus: - * ::ad_rss::physics::Duration(0.) < responseTime <= ::ad_rss::physics::Duration(10.) + * \note the specified input range is defined by the ranges of all members */ inline bool withinValidInputRange(::ad_rss::world::Object const &input) { @@ -65,14 +62,9 @@ inline bool withinValidInputRange(::ad_rss::world::Object const &input) // LCOV_EXCL_BR_START: not always possible to cover especially all exception branches // check for generic member input ranges bool const membersInValidInputRange = withinValidInputRange(input.objectType) - && withinValidInputRange(input.occupiedRegions) && withinValidInputRange(input.dynamics) - && withinValidInputRange(input.velocity) && withinValidInputRange(input.responseTime); + && withinValidInputRange(input.occupiedRegions) && withinValidInputRange(input.velocity); - // check for individual input ranges - bool const responseTimeInInputRange = (::ad_rss::physics::Duration(0.) < input.responseTime) - && (input.responseTime <= ::ad_rss::physics::Duration(10.)); - - return membersInValidInputRange && responseTimeInInputRange; + return membersInValidInputRange; // LCOV_EXCL_BR_STOP: not always possible to cover especially all exception branches } // LCOV_EXCL_START: not possible to cover these lines for all generated datatypes diff --git a/include/generated/ad_rss/world/Dynamics.hpp b/include/generated/ad_rss/world/RssDynamics.hpp similarity index 77% rename from include/generated/ad_rss/world/Dynamics.hpp rename to include/generated/ad_rss/world/RssDynamics.hpp index 5a0b98356d..375bac8620 100644 --- a/include/generated/ad_rss/world/Dynamics.hpp +++ b/include/generated/ad_rss/world/RssDynamics.hpp @@ -42,6 +42,7 @@ #include #include #include "ad_rss/physics/Distance.hpp" +#include "ad_rss/physics/Duration.hpp" #include "ad_rss/world/LateralRssAccelerationValues.hpp" #include "ad_rss/world/LongitudinalRssAccelerationValues.hpp" /*! @@ -54,73 +55,73 @@ namespace ad_rss { namespace world { /*! - * \brief DataType Dynamics + * \brief DataType RssDynamics * * Describes the RSS dynamics values to be applied for an object within the metric world frame. The dynamics consist of * a longitudinal component, a lateral component and a lateral fluctuation margin to be taken into account to compensate * for lateral fluctuations. */ -struct Dynamics +struct RssDynamics { /*! * \brief standard constructor */ - Dynamics() = default; + RssDynamics() = default; /*! * \brief standard destructor */ - ~Dynamics() = default; + ~RssDynamics() = default; /*! * \brief standard copy constructor */ - Dynamics(const Dynamics &other) = default; + RssDynamics(const RssDynamics &other) = default; /*! * \brief standard move constructor */ - Dynamics(Dynamics &&other) = default; + RssDynamics(RssDynamics &&other) = default; /** * \brief standard assignment operator * - * \param[in] other Other Dynamics + * \param[in] other Other RssDynamics * - * \returns Reference to this Dynamics. + * \returns Reference to this RssDynamics. */ - Dynamics &operator=(const Dynamics &other) = default; + RssDynamics &operator=(const RssDynamics &other) = default; /** * \brief standard move operator * - * \param[in] other Other Dynamics + * \param[in] other Other RssDynamics * - * \returns Reference to this Dynamics. + * \returns Reference to this RssDynamics. */ - Dynamics &operator=(Dynamics &&other) = default; + RssDynamics &operator=(RssDynamics &&other) = default; /** * \brief standard comparison operator * - * \param[in] other Other Dynamics + * \param[in] other Other RssDynamics * - * \returns \c true if both Dynamics are equal + * \returns \c true if both RssDynamics are equal */ - bool operator==(const Dynamics &other) const + bool operator==(const RssDynamics &other) const { return (alphaLon == other.alphaLon) && (alphaLat == other.alphaLat) - && (lateralFluctuationMargin == other.lateralFluctuationMargin); + && (lateralFluctuationMargin == other.lateralFluctuationMargin) && (responseTime == other.responseTime); } /** * \brief standard comparison operator * - * \param[in] other Other Dynamics. + * \param[in] other Other RssDynamics. * - * \returns \c true if both Dynamics are different + * \returns \c true if both RssDynamics are different */ - bool operator!=(const Dynamics &other) const + bool operator!=(const RssDynamics &other) const { return !operator==(other); } @@ -139,6 +140,11 @@ struct Dynamics * Defines the lateral fluctuation margin to be taken into account. */ ::ad_rss::physics::Distance lateralFluctuationMargin{0.0}; + + /*! + * Defines the response time of the object to be considered. + */ + ::ad_rss::physics::Duration responseTime; }; } // namespace world diff --git a/include/generated/ad_rss/world/DynamicsValidInputRange.hpp b/include/generated/ad_rss/world/RssDynamicsValidInputRange.hpp similarity index 79% rename from include/generated/ad_rss/world/DynamicsValidInputRange.hpp rename to include/generated/ad_rss/world/RssDynamicsValidInputRange.hpp index 16d8409ed9..b7a3e03d31 100644 --- a/include/generated/ad_rss/world/DynamicsValidInputRange.hpp +++ b/include/generated/ad_rss/world/RssDynamicsValidInputRange.hpp @@ -42,35 +42,40 @@ #include #include #include "ad_rss/physics/DistanceValidInputRange.hpp" -#include "ad_rss/world/Dynamics.hpp" +#include "ad_rss/physics/DurationValidInputRange.hpp" #include "ad_rss/world/LateralRssAccelerationValuesValidInputRange.hpp" #include "ad_rss/world/LongitudinalRssAccelerationValuesValidInputRange.hpp" +#include "ad_rss/world/RssDynamics.hpp" /*! - * \brief check if the given Dynamics is within valid input range + * \brief check if the given RssDynamics is within valid input range * - * \param[in] input the Dynamics as an input value + * \param[in] input the RssDynamics as an input value * - * \returns \c true if Dynamics is considered to be within the specified input range + * \returns \c true if RssDynamics is considered to be within the specified input range * * \note the specified input range is defined by the ranges of all members, plus: * ::ad_rss::physics::Distance(0.) <= lateralFluctuationMargin <= ::ad_rss::physics::Distance(1.) + * ::ad_rss::physics::Duration(0.) < responseTime <= ::ad_rss::physics::Duration(10.) */ -inline bool withinValidInputRange(::ad_rss::world::Dynamics const &input) +inline bool withinValidInputRange(::ad_rss::world::RssDynamics const &input) { try { // LCOV_EXCL_BR_START: not always possible to cover especially all exception branches // check for generic member input ranges bool const membersInValidInputRange = withinValidInputRange(input.alphaLon) && withinValidInputRange(input.alphaLat) - && withinValidInputRange(input.lateralFluctuationMargin); + && withinValidInputRange(input.lateralFluctuationMargin) && withinValidInputRange(input.responseTime); // check for individual input ranges bool const lateralFluctuationMarginInInputRange = (::ad_rss::physics::Distance(0.) <= input.lateralFluctuationMargin) && (input.lateralFluctuationMargin <= ::ad_rss::physics::Distance(1.)); - return membersInValidInputRange && lateralFluctuationMarginInInputRange; + bool const responseTimeInInputRange = (::ad_rss::physics::Duration(0.) < input.responseTime) + && (input.responseTime <= ::ad_rss::physics::Duration(10.)); + + return membersInValidInputRange && lateralFluctuationMarginInInputRange && responseTimeInInputRange; // LCOV_EXCL_BR_STOP: not always possible to cover especially all exception branches } // LCOV_EXCL_START: not possible to cover these lines for all generated datatypes diff --git a/include/generated/ad_rss/world/Scene.hpp b/include/generated/ad_rss/world/Scene.hpp index f15ee6b7e3..3721d69134 100644 --- a/include/generated/ad_rss/world/Scene.hpp +++ b/include/generated/ad_rss/world/Scene.hpp @@ -43,6 +43,7 @@ #include "ad_rss/situation/SituationType.hpp" #include "ad_rss/world/Object.hpp" #include "ad_rss/world/RoadArea.hpp" +#include "ad_rss/world/RssDynamics.hpp" /*! * @brief namespace ad_rss */ @@ -56,9 +57,9 @@ namespace world { * \brief DataType Scene * * A Scene defines the relation between the ego vehicle and another object. It consists of the type of situation between - * these two and the corresponding road areas of interest. All lane segments on the route between ego vehicle and the - * object have to be part of this. RSS has to be able to calculate minimum and maximum distances between ego vehicle and - * object as well as accelerated movements within this area. + * these two, the objects rss dynamics and the corresponding road areas of interest. All lane segments on the route + * between ego vehicle and the object have to be part of this. RSS has to be able to calculate minimum and maximum + * distances between ego vehicle and object as well as accelerated movements within this area. */ struct Scene { @@ -109,8 +110,9 @@ struct Scene */ bool operator==(const Scene &other) const { - return (situationType == other.situationType) && (egoVehicleRoad == other.egoVehicleRoad) - && (intersectingRoad == other.intersectingRoad) && (object == other.object); + return (situationType == other.situationType) && (egoVehicle == other.egoVehicle) && (object == other.object) + && (objectRssDynamics == other.objectRssDynamics) && (intersectingRoad == other.intersectingRoad) + && (egoVehicleRoad == other.egoVehicleRoad); } /** @@ -131,10 +133,20 @@ struct Scene ::ad_rss::situation::SituationType situationType{::ad_rss::situation::SituationType::SameDirection}; /*! - * The RssRoadArea the ego vehicle is driving in. The driving direction of the ego vehicle define the ordering of the - * road segments. In non-intersection situations the object is also driving in this road area. + * The ego vehicle in the context of this scene. */ - ::ad_rss::world::RoadArea egoVehicleRoad; + ::ad_rss::world::Object egoVehicle; + + /*! + * The object this scene refers to. + */ + ::ad_rss::world::Object object; + + /*! + * Defines the objects dynamics to be applied. This parameters are provided on a per object basis to be able to adapt + * these e.g. in respect to object type or the weather conditions. + */ + ::ad_rss::world::RssDynamics objectRssDynamics; /*! * The RssRoadArea an intersecting vehicle is driving in. The driving direction of the intersecting vehicle define the @@ -144,9 +156,10 @@ struct Scene ::ad_rss::world::RoadArea intersectingRoad; /*! - * The object this scene refers to. + * The RssRoadArea the ego vehicle is driving in. The driving direction of the ego vehicle define the ordering of the + * road segments. In non-intersection situations the object is also driving in this road area. */ - ::ad_rss::world::Object object; + ::ad_rss::world::RoadArea egoVehicleRoad; }; } // namespace world diff --git a/include/generated/ad_rss/world/SceneValidInputRange.hpp b/include/generated/ad_rss/world/SceneValidInputRange.hpp index 5bc377e6f9..f29fe87474 100644 --- a/include/generated/ad_rss/world/SceneValidInputRange.hpp +++ b/include/generated/ad_rss/world/SceneValidInputRange.hpp @@ -44,6 +44,7 @@ #include "ad_rss/situation/SituationTypeValidInputRange.hpp" #include "ad_rss/world/ObjectValidInputRange.hpp" #include "ad_rss/world/RoadAreaValidInputRange.hpp" +#include "ad_rss/world/RssDynamicsValidInputRange.hpp" #include "ad_rss/world/Scene.hpp" /*! @@ -62,8 +63,9 @@ inline bool withinValidInputRange(::ad_rss::world::Scene const &input) // LCOV_EXCL_BR_START: not always possible to cover especially all exception branches // check for generic member input ranges bool const membersInValidInputRange = withinValidInputRange(input.situationType) - && withinValidInputRange(input.egoVehicleRoad) && withinValidInputRange(input.intersectingRoad) - && withinValidInputRange(input.object); + && withinValidInputRange(input.egoVehicle) && withinValidInputRange(input.object) + && withinValidInputRange(input.objectRssDynamics) && withinValidInputRange(input.intersectingRoad) + && withinValidInputRange(input.egoVehicleRoad); return membersInValidInputRange; // LCOV_EXCL_BR_STOP: not always possible to cover especially all exception branches diff --git a/include/generated/ad_rss/world/WorldModel.hpp b/include/generated/ad_rss/world/WorldModel.hpp index f920955572..72301cf527 100644 --- a/include/generated/ad_rss/world/WorldModel.hpp +++ b/include/generated/ad_rss/world/WorldModel.hpp @@ -43,7 +43,7 @@ #include #include #include "ad_rss/physics/TimeIndex.hpp" -#include "ad_rss/world/Object.hpp" +#include "ad_rss/world/RssDynamics.hpp" #include "ad_rss/world/SceneVector.hpp" /*! * @brief namespace ad_rss @@ -57,8 +57,8 @@ namespace world { /*! * \brief DataType WorldModel * - * The world model, RSS requires as input, consists of the egoVehicle and object description as well as the list of - * relevant lane segments. + * The world model, RSS requires as input, consists of a timeIndex, the egoVehicleDynamics and object description as + * well as the list of relevant scenes. */ struct WorldModel { @@ -109,7 +109,8 @@ struct WorldModel */ bool operator==(const WorldModel &other) const { - return (timeIndex == other.timeIndex) && (egoVehicle == other.egoVehicle) && (scenes == other.scenes); + return (timeIndex == other.timeIndex) && (egoVehicleRssDynamics == other.egoVehicleRssDynamics) + && (scenes == other.scenes); } /** @@ -132,9 +133,10 @@ struct WorldModel ::ad_rss::physics::TimeIndex timeIndex{0u}; /*! - * The ego vehicle. + * Defines the ego vehicle dynamics to be applied. This parameters are provided on a per object basis to be able to + * adapt these e.g. in respect to object type or the weather conditions. */ - ::ad_rss::world::Object egoVehicle; + ::ad_rss::world::RssDynamics egoVehicleRssDynamics; /*! * All scenes diff --git a/include/generated/ad_rss/world/WorldModelValidInputRange.hpp b/include/generated/ad_rss/world/WorldModelValidInputRange.hpp index 2b67255c27..f7e19cb6ec 100644 --- a/include/generated/ad_rss/world/WorldModelValidInputRange.hpp +++ b/include/generated/ad_rss/world/WorldModelValidInputRange.hpp @@ -41,7 +41,7 @@ #include #include -#include "ad_rss/world/ObjectValidInputRange.hpp" +#include "ad_rss/world/RssDynamicsValidInputRange.hpp" #include "ad_rss/world/SceneVectorValidInputRange.hpp" #include "ad_rss/world/WorldModel.hpp" @@ -62,7 +62,7 @@ inline bool withinValidInputRange(::ad_rss::world::WorldModel const &input) // LCOV_EXCL_BR_START: not always possible to cover especially all exception branches // check for generic member input ranges bool const membersInValidInputRange - = withinValidInputRange(input.egoVehicle) && withinValidInputRange(input.scenes); + = withinValidInputRange(input.egoVehicleRssDynamics) && withinValidInputRange(input.scenes); // check for individual input ranges bool const timeIndexInInputRange = (::ad_rss::physics::TimeIndex(1) <= input.timeIndex); diff --git a/src/core/RssCheck.cpp b/src/core/RssCheck.cpp index 31e01df0cd..adc4040748 100644 --- a/src/core/RssCheck.cpp +++ b/src/core/RssCheck.cpp @@ -46,11 +46,13 @@ RssCheck::RssCheck() { mResponseResolving = std::unique_ptr(new RssResponseResolving()); mSituationChecking = std::unique_ptr(new RssSituationChecking()); + mSituationExtraction = std::unique_ptr(new RssSituationExtraction()); } catch (...) { mResponseResolving = nullptr; mSituationChecking = nullptr; + mSituationExtraction = nullptr; } } @@ -65,13 +67,14 @@ bool RssCheck::calculateAccelerationRestriction(world::WorldModel const &worldMo // global try catch block to ensure this library call doesn't throw an exception try { - if (!static_cast(mResponseResolving) || !static_cast(mSituationChecking)) + if (!static_cast(mResponseResolving) || !static_cast(mSituationChecking) + || !static_cast(mSituationExtraction)) { return false; } situation::SituationVector situationVector; - result = RssSituationExtraction::extractSituations(worldModel, situationVector); + result = mSituationExtraction->extractSituations(worldModel, situationVector); state::ResponseStateVector responseStateVector; if (result) diff --git a/src/core/RssResponseTransformation.cpp b/src/core/RssResponseTransformation.cpp index a8b9a18924..5d8ad2b69d 100644 --- a/src/core/RssResponseTransformation.cpp +++ b/src/core/RssResponseTransformation.cpp @@ -58,17 +58,18 @@ bool transformProperResponse(world::WorldModel const &worldModel, * given by the world model */ // LCOV_EXCL_BR_START: unreachable exceptions due to valid input range checks - accelerationRestriction.longitudinalRange.minimum = -1. * worldModel.egoVehicle.dynamics.alphaLon.brakeMax; + accelerationRestriction.longitudinalRange.minimum = -1. * worldModel.egoVehicleRssDynamics.alphaLon.brakeMax; switch (response.longitudinalState.response) { case ::ad_rss::state::LongitudinalResponse::BrakeMin: - accelerationRestriction.longitudinalRange.maximum = -1. * worldModel.egoVehicle.dynamics.alphaLon.brakeMin; + accelerationRestriction.longitudinalRange.maximum = -1. * worldModel.egoVehicleRssDynamics.alphaLon.brakeMin; break; case ::ad_rss::state::LongitudinalResponse::BrakeMinCorrect: - accelerationRestriction.longitudinalRange.maximum = -1. * worldModel.egoVehicle.dynamics.alphaLon.brakeMinCorrect; + accelerationRestriction.longitudinalRange.maximum + = -1. * worldModel.egoVehicleRssDynamics.alphaLon.brakeMinCorrect; break; case ::ad_rss::state::LongitudinalResponse::None: - accelerationRestriction.longitudinalRange.maximum = worldModel.egoVehicle.dynamics.alphaLon.accelMax; + accelerationRestriction.longitudinalRange.maximum = worldModel.egoVehicleRssDynamics.alphaLon.accelMax; break; default: return false; // LCOV_EXCL_LINE: unreachable code, keep to be on the safe side @@ -78,12 +79,12 @@ bool transformProperResponse(world::WorldModel const &worldModel, switch (response.lateralStateLeft.response) { case ::ad_rss::state::LateralResponse::BrakeMin: - accelerationRestriction.lateralLeftRange.maximum = -1. * worldModel.egoVehicle.dynamics.alphaLat.brakeMin; + accelerationRestriction.lateralLeftRange.maximum = -1. * worldModel.egoVehicleRssDynamics.alphaLat.brakeMin; accelerationRestriction.lateralLeftRange.minimum = std::numeric_limits::lowest(); break; case ::ad_rss::state::LateralResponse::None: - accelerationRestriction.lateralLeftRange.maximum = worldModel.egoVehicle.dynamics.alphaLat.accelMax; - accelerationRestriction.lateralLeftRange.minimum = -1. * worldModel.egoVehicle.dynamics.alphaLat.brakeMin; + accelerationRestriction.lateralLeftRange.maximum = worldModel.egoVehicleRssDynamics.alphaLat.accelMax; + accelerationRestriction.lateralLeftRange.minimum = -1. * worldModel.egoVehicleRssDynamics.alphaLat.brakeMin; break; default: return false; // LCOV_EXCL_LINE: unreachable code, keep to be on the safe side @@ -93,12 +94,12 @@ bool transformProperResponse(world::WorldModel const &worldModel, switch (response.lateralStateRight.response) { case ::ad_rss::state::LateralResponse::BrakeMin: - accelerationRestriction.lateralRightRange.maximum = -1. * worldModel.egoVehicle.dynamics.alphaLat.brakeMin; + accelerationRestriction.lateralRightRange.maximum = -1. * worldModel.egoVehicleRssDynamics.alphaLat.brakeMin; accelerationRestriction.lateralRightRange.minimum = std::numeric_limits::lowest(); break; case ::ad_rss::state::LateralResponse::None: - accelerationRestriction.lateralRightRange.maximum = worldModel.egoVehicle.dynamics.alphaLat.accelMax; - accelerationRestriction.lateralRightRange.minimum = -1. * worldModel.egoVehicle.dynamics.alphaLat.brakeMin; + accelerationRestriction.lateralRightRange.maximum = worldModel.egoVehicleRssDynamics.alphaLat.accelMax; + accelerationRestriction.lateralRightRange.minimum = -1. * worldModel.egoVehicleRssDynamics.alphaLat.brakeMin; break; default: return false; // LCOV_EXCL_LINE: unreachable code, keep to be on the safe side diff --git a/src/core/RssSituationExtraction.cpp b/src/core/RssSituationExtraction.cpp index 1e1a05fb4e..4a3980d3c6 100644 --- a/src/core/RssSituationExtraction.cpp +++ b/src/core/RssSituationExtraction.cpp @@ -30,22 +30,38 @@ // ----------------- END LICENSE BLOCK ----------------------------------- #include "ad_rss/core/RssSituationExtraction.hpp" +#include #include "ad_rss/world/WorldModelValidInputRange.hpp" - #include "world/RssSituationCoordinateSystemConversion.hpp" +#include "world/RssSituationIdProvider.hpp" namespace ad_rss { - namespace core { -namespace RssSituationExtraction { using physics::Distance; using physics::MetricRange; -void calcluateRelativeLongitudinalPosition(MetricRange const &egoMetricRange, - MetricRange const &otherMetricRange, - situation::LongitudinalRelativePosition &longitudinalPosition, - Distance &longitudinalDistance) +RssSituationExtraction::RssSituationExtraction() +{ + try + { + mSituationIdProvider = std::unique_ptr(new world::RssSituationIdProvider()); + } + catch (...) + { + mSituationIdProvider = nullptr; + } +} + +RssSituationExtraction::~RssSituationExtraction() +{ +} + +void RssSituationExtraction::calcluateRelativeLongitudinalPosition( + MetricRange const &egoMetricRange, + MetricRange const &otherMetricRange, + situation::LongitudinalRelativePosition &longitudinalPosition, + Distance &longitudinalDistance) { if (egoMetricRange.minimum > otherMetricRange.maximum) { @@ -75,10 +91,11 @@ void calcluateRelativeLongitudinalPosition(MetricRange const &egoMetricRange, } } -void calcluateRelativeLongitudinalPositionIntersection(MetricRange const &egoMetricRange, - MetricRange const &otherMetricRange, - situation::LongitudinalRelativePosition &longitudinalPosition, - Distance &longitudinalDistance) +void RssSituationExtraction::calcluateRelativeLongitudinalPositionIntersection( + MetricRange const &egoMetricRange, + MetricRange const &otherMetricRange, + situation::LongitudinalRelativePosition &longitudinalPosition, + Distance &longitudinalDistance) { if (egoMetricRange.maximum < otherMetricRange.minimum) { @@ -108,10 +125,10 @@ void calcluateRelativeLongitudinalPositionIntersection(MetricRange const &egoMet } } -void calcluateRelativeLateralPosition(MetricRange const &egoMetricRange, - MetricRange const &otherMetricRange, - situation::LateralRelativePosition &lateralPosition, - Distance &lateralDistance) +void RssSituationExtraction::calcluateRelativeLateralPosition(MetricRange const &egoMetricRange, + MetricRange const &otherMetricRange, + situation::LateralRelativePosition &lateralPosition, + Distance &lateralDistance) { if (egoMetricRange.minimum > otherMetricRange.maximum) { @@ -141,9 +158,8 @@ void calcluateRelativeLateralPosition(MetricRange const &egoMetricRange, } } -bool convertObjectsNonIntersection(world::Object const &egoVehicle, - world::Scene const ¤tScene, - situation::Situation &situation) +bool RssSituationExtraction::convertObjectsNonIntersection(world::Scene const ¤tScene, + situation::Situation &situation) { if (!currentScene.intersectingRoad.empty()) { @@ -154,7 +170,7 @@ bool convertObjectsNonIntersection(world::Object const &egoVehicle, world::ObjectDimensions egoVehicleDimension; world::ObjectDimensions objectToBeCheckedDimension; - result = calculateObjectDimensions(egoVehicle, currentScene, egoVehicleDimension, objectToBeCheckedDimension); + result = calculateObjectDimensions(currentScene, egoVehicleDimension, objectToBeCheckedDimension); situation::LongitudinalRelativePosition longitudinalPosition; Distance longitudinalDistance; @@ -195,22 +211,21 @@ bool convertObjectsNonIntersection(world::Object const &egoVehicle, return result; } -void convertToIntersectionCentric(MetricRange const &objectDimension, - MetricRange const &intersectionPosition, - MetricRange &dimensionsIntersection) +void RssSituationExtraction::convertToIntersectionCentric(MetricRange const &objectDimension, + MetricRange const &intersectionPosition, + MetricRange &dimensionsIntersection) { dimensionsIntersection.maximum = intersectionPosition.minimum - objectDimension.minimum; dimensionsIntersection.minimum = intersectionPosition.minimum - objectDimension.maximum; } -bool convertObjectsIntersection(world::Object const &egoVehicle, - world::Scene const ¤tScene, - situation::Situation &situation) +bool RssSituationExtraction::convertObjectsIntersection(world::Scene const ¤tScene, + situation::Situation &situation) { world::ObjectDimensions egoVehicleDimension; world::ObjectDimensions objectDimension; - bool result = calculateObjectDimensions(egoVehicle, currentScene.egoVehicleRoad, egoVehicleDimension); + bool result = calculateObjectDimensions(currentScene.egoVehicle, currentScene.egoVehicleRoad, egoVehicleDimension); result = result && calculateObjectDimensions(currentScene.object, currentScene.intersectingRoad, objectDimension); @@ -275,21 +290,25 @@ bool convertObjectsIntersection(world::Object const &egoVehicle, return result; } -bool extractSituationInputRangeChecked(physics::TimeIndex const &timeIndex, - world::Object const &egoVehicle, - world::Scene const ¤tScene, - situation::Situation &situation) +bool RssSituationExtraction::extractSituationInputRangeChecked(physics::TimeIndex const &timeIndex, + world::RssDynamics const &egoVehicleRssDynamics, + world::Scene const ¤tScene, + situation::Situation &situation) { // ensure the object types are semantically correct - // toDo: add this restriction to the data type model + // @toDo: add this restriction to the data type model // and extend generated withinValidInputRange by these if (((currentScene.object.objectType != world::ObjectType::OtherVehicle) && (currentScene.object.objectType != world::ObjectType::ArtificialObject)) - || (egoVehicle.objectType != world::ObjectType::EgoVehicle)) + || (currentScene.egoVehicle.objectType != world::ObjectType::EgoVehicle)) + { + return false; + } + if (currentScene.object.objectId == currentScene.egoVehicle.objectId) { return false; } - if (currentScene.object.objectId == egoVehicle.objectId) + if (!static_cast(mSituationIdProvider)) { return false; } @@ -299,7 +318,7 @@ bool extractSituationInputRangeChecked(physics::TimeIndex const &timeIndex, try { situation.timeIndex = timeIndex; - situation.situationId = situation::SituationId(currentScene.object.objectId); + situation.situationId = mSituationIdProvider->getSituationId(timeIndex, currentScene); situation.situationType = currentScene.situationType; situation.egoVehicleState.hasPriority = false; @@ -314,15 +333,15 @@ bool extractSituationInputRangeChecked(physics::TimeIndex const &timeIndex, situation.otherVehicleState.distanceToEnterIntersection = Distance(0.); situation.otherVehicleState.distanceToLeaveIntersection = Distance(1000.); - convertVehicleStateDynamics(egoVehicle, situation.egoVehicleState); - convertVehicleStateDynamics(currentScene.object, situation.otherVehicleState); + convertVehicleStateDynamics(currentScene.egoVehicle, egoVehicleRssDynamics, situation.egoVehicleState); + convertVehicleStateDynamics(currentScene.object, currentScene.objectRssDynamics, situation.otherVehicleState); switch (currentScene.situationType) { case ad_rss::situation::SituationType::SameDirection: case ad_rss::situation::SituationType::OppositeDirection: { - result = convertObjectsNonIntersection(egoVehicle, currentScene, situation); + result = convertObjectsNonIntersection(currentScene, situation); break; } @@ -330,7 +349,7 @@ bool extractSituationInputRangeChecked(physics::TimeIndex const &timeIndex, case ad_rss::situation::SituationType::IntersectionObjectHasPriority: case ad_rss::situation::SituationType::IntersectionSamePriority: { - result = convertObjectsIntersection(egoVehicle, currentScene, situation); + result = convertObjectsIntersection(currentScene, situation); break; } case ad_rss::situation::SituationType::NotRelevant: @@ -353,20 +372,61 @@ bool extractSituationInputRangeChecked(physics::TimeIndex const &timeIndex, return result; } -bool extractSituation(physics::TimeIndex const &timeIndex, - world::Object const &egoVehicle, - world::Scene const ¤tScene, - situation::Situation &situation) +bool RssSituationExtraction::mergeVehicleStates(situation::VehicleState const &otherVehicleState, + situation::VehicleState &mergedVehicleState) +{ + // on vehicle states there are only differences in intersection distances allowed due to different road definitions + if ((otherVehicleState.velocity.speedLat != mergedVehicleState.velocity.speedLat) + || (otherVehicleState.velocity.speedLon != mergedVehicleState.velocity.speedLon) + || (otherVehicleState.dynamics.alphaLat.accelMax != mergedVehicleState.dynamics.alphaLat.accelMax) + || (otherVehicleState.dynamics.alphaLat.brakeMin != mergedVehicleState.dynamics.alphaLat.brakeMin) + || (otherVehicleState.dynamics.alphaLon.accelMax != mergedVehicleState.dynamics.alphaLon.accelMax) + || (otherVehicleState.dynamics.alphaLon.brakeMinCorrect != mergedVehicleState.dynamics.alphaLon.brakeMinCorrect) + || (otherVehicleState.dynamics.alphaLon.brakeMin != mergedVehicleState.dynamics.alphaLon.brakeMin) + || (otherVehicleState.dynamics.alphaLon.brakeMax != mergedVehicleState.dynamics.alphaLon.brakeMax) + || (otherVehicleState.dynamics.lateralFluctuationMargin != mergedVehicleState.dynamics.lateralFluctuationMargin) + || (otherVehicleState.dynamics.responseTime != mergedVehicleState.dynamics.responseTime) + || (otherVehicleState.hasPriority != mergedVehicleState.hasPriority) + || (otherVehicleState.isInCorrectLane != mergedVehicleState.isInCorrectLane)) + { + return false; + } + // store the worst case + mergedVehicleState.distanceToEnterIntersection + = std::min(mergedVehicleState.distanceToEnterIntersection, otherVehicleState.distanceToEnterIntersection); + mergedVehicleState.distanceToLeaveIntersection + = std::max(mergedVehicleState.distanceToLeaveIntersection, otherVehicleState.distanceToLeaveIntersection); + return true; +} + +bool RssSituationExtraction::mergeSituations(situation::Situation const &otherSituation, + situation::Situation &mergedSituation) { - if (!withinValidInputRange(egoVehicle) || !withinValidInputRange(currentScene)) + if ( // basic data has to match + (otherSituation.timeIndex != mergedSituation.timeIndex) + || (otherSituation.situationId != mergedSituation.situationId) + || (otherSituation.situationType != mergedSituation.situationType) + // vehicle states + || !mergeVehicleStates(otherSituation.egoVehicleState, mergedSituation.egoVehicleState) + || !mergeVehicleStates(otherSituation.otherVehicleState, mergedSituation.otherVehicleState) + // relative position + || (otherSituation.relativePosition.longitudinalPosition != mergedSituation.relativePosition.longitudinalPosition) + || (otherSituation.relativePosition.lateralPosition != mergedSituation.relativePosition.lateralPosition)) { return false; } - return extractSituationInputRangeChecked(timeIndex, egoVehicle, currentScene, situation); + // worst case + mergedSituation.relativePosition.longitudinalDistance = std::min( + mergedSituation.relativePosition.longitudinalDistance, otherSituation.relativePosition.longitudinalDistance); + mergedSituation.relativePosition.lateralDistance + = std::min(mergedSituation.relativePosition.lateralDistance, otherSituation.relativePosition.lateralDistance); + + return true; } -bool extractSituations(world::WorldModel const &worldModel, situation::SituationVector &situationVector) +bool RssSituationExtraction::extractSituations(world::WorldModel const &worldModel, + situation::SituationVector &situationVector) { if (!withinValidInputRange(worldModel)) { @@ -380,14 +440,28 @@ bool extractSituations(world::WorldModel const &worldModel, situation::Situation { situation::Situation situation; bool const extractResult - = extractSituationInputRangeChecked(worldModel.timeIndex, worldModel.egoVehicle, scene, situation); + = extractSituationInputRangeChecked(worldModel.timeIndex, worldModel.egoVehicleRssDynamics, scene, situation); // if the situation is relevant, add it to situationVector if (scene.situationType != ad_rss::situation::SituationType::NotRelevant) { if (extractResult) { - situationVector.push_back(situation); + // situation id creation might detect that different scenes are representing identical situations + // ensure the situationVector is unique while containing the worst-case situation + auto findResult = std::find_if(situationVector.begin(), + situationVector.end(), + [&situation](ad_rss::situation::Situation const &checkSituation) { + return checkSituation.situationId == situation.situationId; + }); + if (findResult == situationVector.end()) + { + situationVector.push_back(situation); + } + else if (!mergeSituations(situation, *findResult)) + { + result = false; + } } else { @@ -403,6 +477,5 @@ bool extractSituations(world::WorldModel const &worldModel, situation::Situation return result; } -} // namespace RssSituationExtraction } // namespace core } // namespace ad_rss diff --git a/src/core/RssState.hpp b/src/core/RssState.hpp index 50710972f5..ce0eeed8ec 100644 --- a/src/core/RssState.hpp +++ b/src/core/RssState.hpp @@ -124,8 +124,8 @@ inline state::ResponseState createResponseState(physics::TimeIndex const &timeIn { bool const isSafe = (isSafeValue == IsSafe::Yes); state::ResponseInformation emptyResponseInfo; - emptyResponseInfo.currentDistance = physics::Distance::getMax(); - emptyResponseInfo.safeDistance = physics::Distance::getMax(); + emptyResponseInfo.currentDistance = std::numeric_limits::max(); + emptyResponseInfo.safeDistance = std::numeric_limits::max(); emptyResponseInfo.responseEvaluator = state::ResponseEvaluator::None; state::ResponseState safeResponse; diff --git a/src/generated/world/ObjectType.cpp b/src/generated/world/ObjectType.cpp index 67ad18042c..8b0673df37 100644 --- a/src/generated/world/ObjectType.cpp +++ b/src/generated/world/ObjectType.cpp @@ -44,6 +44,8 @@ std::string toString(::ad_rss::world::ObjectType const e) { switch (e) { + case ::ad_rss::world::ObjectType::Invalid: + return std::string("::ad_rss::world::ObjectType::Invalid"); // LCOV_EXCL_BR_LINE case ::ad_rss::world::ObjectType::EgoVehicle: return std::string("::ad_rss::world::ObjectType::EgoVehicle"); // LCOV_EXCL_BR_LINE case ::ad_rss::world::ObjectType::OtherVehicle: @@ -57,6 +59,14 @@ std::string toString(::ad_rss::world::ObjectType const e) template <>::ad_rss::world::ObjectType fromString(std::string const &str) { + if (str == std::string("::ad_rss::world::ObjectType::Invalid")) // LCOV_EXCL_BR_LINE + { + return ::ad_rss::world::ObjectType::Invalid; + } + if (str == std::string("Invalid")) // LCOV_EXCL_BR_LINE + { + return ::ad_rss::world::ObjectType::Invalid; + } if (str == std::string("::ad_rss::world::ObjectType::EgoVehicle")) // LCOV_EXCL_BR_LINE { return ::ad_rss::world::ObjectType::EgoVehicle; diff --git a/src/situation/RssFormulas.cpp b/src/situation/RssFormulas.cpp index 6b060118c1..b7b6db1630 100644 --- a/src/situation/RssFormulas.cpp +++ b/src/situation/RssFormulas.cpp @@ -90,7 +90,7 @@ bool calculateSafeLongitudinalDistanceSameDirection(VehicleState const &leadingV bool result = calculateDistanceOffsetAfterStatedBrakingPattern( // LCOV_EXCL_LINE: wrong detection CoordinateSystemAxis::Longitudinal, followingVehicle.velocity.speedLon, - followingVehicle.responseTime, + followingVehicle.dynamics.responseTime, followingVehicle.dynamics.alphaLon.accelMax, followingVehicle.dynamics.alphaLon.brakeMin, distanceStatedBraking); @@ -119,7 +119,7 @@ bool checkSafeLongitudinalDistanceSameDirection(VehicleState const &leadingVehic } isDistanceSafe = false; - safeDistance = Distance::getMax(); + safeDistance = std::numeric_limits::max(); bool const result = calculateSafeLongitudinalDistanceSameDirection(leadingVehicle, followingVehicle, safeDistance); @@ -144,7 +144,7 @@ bool calculateSafeLongitudinalDistanceOppositeDirection(VehicleState const &corr bool result = calculateDistanceOffsetAfterStatedBrakingPattern( // LCOV_EXCL_LINE: wrong detection CoordinateSystemAxis::Longitudinal, correctVehicle.velocity.speedLon, - correctVehicle.responseTime, + correctVehicle.dynamics.responseTime, correctVehicle.dynamics.alphaLon.accelMax, correctVehicle.dynamics.alphaLon.brakeMinCorrect, distanceStatedBrakingCorrect); @@ -156,7 +156,7 @@ bool calculateSafeLongitudinalDistanceOppositeDirection(VehicleState const &corr result = calculateDistanceOffsetAfterStatedBrakingPattern( // LCOV_EXCL_LINE: wrong detection CoordinateSystemAxis::Longitudinal, oppositeVehicle.velocity.speedLon, - oppositeVehicle.responseTime, + oppositeVehicle.dynamics.responseTime, oppositeVehicle.dynamics.alphaLon.accelMax, oppositeVehicle.dynamics.alphaLon.brakeMin, distanceStatedBrakingOpposite); @@ -182,7 +182,7 @@ bool checkSafeLongitudinalDistanceOppositeDirection(VehicleState const &correctV } isDistanceSafe = false; - safeDistance = Distance::getMax(); + safeDistance = std::numeric_limits::max(); bool const result = calculateSafeLongitudinalDistanceOppositeDirection(correctVehicle, oppositeVehicle, safeDistance); if (vehicleDistance > safeDistance) @@ -205,7 +205,7 @@ bool checkStopInFrontIntersection(VehicleState const &vehicle, Distance &safeDis bool result = calculateDistanceOffsetAfterStatedBrakingPattern( // LCOV_EXCL_LINE: wrong detection CoordinateSystemAxis::Longitudinal, vehicle.velocity.speedLon, - vehicle.responseTime, + vehicle.dynamics.responseTime, vehicle.dynamics.alphaLon.accelMax, vehicle.dynamics.alphaLon.brakeMin, safeDistance); @@ -234,7 +234,7 @@ bool calculateSafeLateralDistance(VehicleState const &leftVehicle, result = calculateDistanceOffsetAfterStatedBrakingPattern( // LCOV_EXCL_LINE: wrong detection CoordinateSystemAxis::Lateral, leftVehicle.velocity.speedLat, - leftVehicle.responseTime, + leftVehicle.dynamics.responseTime, leftVehicle.dynamics.alphaLat.accelMax, leftVehicle.dynamics.alphaLat.brakeMin, distanceOffsetStatedBrakingLeft); @@ -242,7 +242,7 @@ bool calculateSafeLateralDistance(VehicleState const &leftVehicle, result = result && calculateDistanceOffsetAfterStatedBrakingPattern( // LCOV_EXCL_LINE: wrong detection CoordinateSystemAxis::Lateral, rightVehicle.velocity.speedLat, - rightVehicle.responseTime, + rightVehicle.dynamics.responseTime, -rightVehicle.dynamics.alphaLat.accelMax, -rightVehicle.dynamics.alphaLat.brakeMin, distanceOffsetStatedBrakingRight); @@ -269,7 +269,7 @@ bool checkSafeLateralDistance(VehicleState const &leftVehicle, } isDistanceSafe = false; - safeDistance = Distance::getMax(); + safeDistance = std::numeric_limits::max(); bool const result = calculateSafeLateralDistance(leftVehicle, rightVehicle, safeDistance); if (vehicleDistance > safeDistance) diff --git a/src/situation/RssIntersectionChecker.cpp b/src/situation/RssIntersectionChecker.cpp index c155bf003e..f16654d982 100644 --- a/src/situation/RssIntersectionChecker.cpp +++ b/src/situation/RssIntersectionChecker.cpp @@ -67,28 +67,28 @@ bool checkLateralIntersect(Situation const &situation, bool &isSafe) Duration timeToLeaveOther; bool result = calculateTimeToCoverDistance(situation.egoVehicleState.velocity.speedLon, - situation.egoVehicleState.responseTime, + situation.egoVehicleState.dynamics.responseTime, situation.egoVehicleState.dynamics.alphaLon.accelMax, situation.egoVehicleState.dynamics.alphaLon.brakeMin, situation.egoVehicleState.distanceToEnterIntersection, timeToReachEgo); result = result && calculateTimeToCoverDistance(situation.otherVehicleState.velocity.speedLon, - situation.otherVehicleState.responseTime, + situation.otherVehicleState.dynamics.responseTime, situation.otherVehicleState.dynamics.alphaLon.accelMax, situation.otherVehicleState.dynamics.alphaLon.brakeMin, situation.otherVehicleState.distanceToEnterIntersection, timeToReachOther); result = result && calculateTimeToCoverDistance(situation.egoVehicleState.velocity.speedLon, - situation.egoVehicleState.responseTime, + situation.egoVehicleState.dynamics.responseTime, -1. * situation.egoVehicleState.dynamics.alphaLon.brakeMax, situation.egoVehicleState.dynamics.alphaLon.brakeMax, situation.egoVehicleState.distanceToLeaveIntersection, timeToLeaveEgo); result = result && calculateTimeToCoverDistance(situation.otherVehicleState.velocity.speedLon, - situation.otherVehicleState.responseTime, + situation.otherVehicleState.dynamics.responseTime, -1. * situation.otherVehicleState.dynamics.alphaLon.brakeMax, situation.otherVehicleState.dynamics.alphaLon.brakeMax, situation.otherVehicleState.distanceToLeaveIntersection, diff --git a/src/situation/RssSituation.cpp b/src/situation/RssSituation.cpp index c3ee01abc9..49c56d3a43 100644 --- a/src/situation/RssSituation.cpp +++ b/src/situation/RssSituation.cpp @@ -158,8 +158,8 @@ bool calculateLateralRssState(Situation const &situation, if (LateralRelativePosition::AtLeft == situation.relativePosition.lateralPosition) { rssStateLeft.responseInformation.responseEvaluator = state::ResponseEvaluator::None; - rssStateLeft.responseInformation.currentDistance = physics::Distance::getMax(); - rssStateLeft.responseInformation.safeDistance = physics::Distance::getMax(); + rssStateLeft.responseInformation.currentDistance = std::numeric_limits::max(); + rssStateLeft.responseInformation.safeDistance = std::numeric_limits::max(); // ego is the left vehicle, so right side has to be checked rssStateRight.responseInformation.responseEvaluator = state::ResponseEvaluator::LateralDistance; @@ -173,8 +173,8 @@ bool calculateLateralRssState(Situation const &situation, else if (LateralRelativePosition::AtRight == situation.relativePosition.lateralPosition) { rssStateRight.responseInformation.responseEvaluator = state::ResponseEvaluator::None; - rssStateRight.responseInformation.currentDistance = physics::Distance::getMax(); - rssStateRight.responseInformation.safeDistance = physics::Distance::getMax(); + rssStateRight.responseInformation.currentDistance = std::numeric_limits::max(); + rssStateRight.responseInformation.safeDistance = std::numeric_limits::max(); // ego is the right vehicle, so left side has to be checked rssStateLeft.responseInformation.responseEvaluator = state::ResponseEvaluator::LateralDistance; diff --git a/src/world/RssSituationCoordinateSystemConversion.cpp b/src/world/RssSituationCoordinateSystemConversion.cpp index 4ccff8205e..752b06a56d 100644 --- a/src/world/RssSituationCoordinateSystemConversion.cpp +++ b/src/world/RssSituationCoordinateSystemConversion.cpp @@ -32,13 +32,12 @@ * @file */ +#include "world/RssSituationCoordinateSystemConversion.hpp" + #include #include #include -#include "world/RssObjectPositionExtractor.hpp" -#include "world/RssSituationCoordinateSystemConversion.hpp" - /*! * @brief namespace ad_rss */ @@ -229,8 +228,7 @@ bool calculateObjectDimensions(std::vector const &objects, return result; } -bool calculateObjectDimensions(Object const &egoVehicle, - Scene const ¤tScene, +bool calculateObjectDimensions(Scene const ¤tScene, ObjectDimensions &egoVehiclePosition, ObjectDimensions &objectPosition) { @@ -239,7 +237,7 @@ bool calculateObjectDimensions(Object const &egoVehicle, try { std::vector objects; - objects.push_back(egoVehicle); + objects.push_back(currentScene.egoVehicle); objects.push_back(currentScene.object); std::vector objectDimensions; @@ -294,20 +292,13 @@ bool calculateObjectDimensions(Object const &object, return result; } -void convertVehicleStateDynamics(Object const &object, ::ad_rss::situation::VehicleState &vehicleState) +void convertVehicleStateDynamics(Object const &object, + RssDynamics const &rssDynamics, + ::ad_rss::situation::VehicleState &vehicleState) { - vehicleState.dynamics.alphaLon.accelMax = object.dynamics.alphaLon.accelMax; - vehicleState.dynamics.alphaLon.brakeMin = object.dynamics.alphaLon.brakeMin; - vehicleState.dynamics.alphaLon.brakeMinCorrect = object.dynamics.alphaLon.brakeMinCorrect; - vehicleState.dynamics.alphaLon.brakeMax = object.dynamics.alphaLon.brakeMax; - - vehicleState.dynamics.alphaLat.accelMax = object.dynamics.alphaLat.accelMax; - vehicleState.dynamics.alphaLat.brakeMin = object.dynamics.alphaLat.brakeMin; - + vehicleState.dynamics = rssDynamics; vehicleState.velocity.speedLon = object.velocity.speedLon; vehicleState.velocity.speedLat = object.velocity.speedLat; - - vehicleState.responseTime = object.responseTime; } } // namespace world diff --git a/src/world/RssSituationCoordinateSystemConversion.hpp b/src/world/RssSituationCoordinateSystemConversion.hpp index 6362e080bb..009a52756e 100644 --- a/src/world/RssSituationCoordinateSystemConversion.hpp +++ b/src/world/RssSituationCoordinateSystemConversion.hpp @@ -35,8 +35,7 @@ #pragma once #include "ad_rss/situation/VehicleState.hpp" -#include "ad_rss/world/Object.hpp" -#include "ad_rss/world/WorldModel.hpp" +#include "ad_rss/world/Scene.hpp" #include "world/RssObjectPositionExtractor.hpp" /*! @@ -51,13 +50,11 @@ namespace world { /** * @brief Calculate the object position ranges in the situation coordinate system * - * @param[in] egoVehicle information about the egoVehicle * @param[in] currentScene information about the other object and the lanes * @param[out] egoVehiclePosition: position ranges in the situation coordinate system of the egoVehicle * @param[out] objectPosition: position ranges in the situation coordinate system of the other object */ -bool calculateObjectDimensions(Object const &egoVehicle, - Scene const ¤tScene, +bool calculateObjectDimensions(Scene const ¤tScene, ObjectDimensions &egoVehiclePosition, ObjectDimensions &objectPosition); @@ -75,7 +72,9 @@ bool calculateObjectDimensions(Object const &object, RoadArea const &roadArea, O * * This functions only converts data from the structs. The values it self are not modified. */ -void convertVehicleStateDynamics(Object const &object, situation::VehicleState &vehicleState); +void convertVehicleStateDynamics(Object const &object, + RssDynamics const &rssDynamics, + situation::VehicleState &vehicleState); } // namespace world } // namespace ad_rss diff --git a/src/world/RssSituationIdProvider.cpp b/src/world/RssSituationIdProvider.cpp new file mode 100644 index 0000000000..a1025b219a --- /dev/null +++ b/src/world/RssSituationIdProvider.cpp @@ -0,0 +1,189 @@ +// ----------------- BEGIN LICENSE BLOCK --------------------------------- +// +// Copyright (c) 2018-2019 Intel Corporation +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors +// may be used to endorse or promote products derived from this software without +// specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// +// ----------------- END LICENSE BLOCK ----------------------------------- + +#include "world/RssSituationIdProvider.hpp" +#include + +namespace ad_rss { +namespace world { + +RssSituationIdProvider::SituationData::SituationData(physics::TimeIndex timeIndex, + situation::SituationId const situationId, + Scene const &scene) + : mTimeIndex(timeIndex) + , mSituationType(scene.situationType) + , mSituationId(situationId) +{ + if ((mSituationType == situation::SituationType::IntersectionEgoHasPriority) + || (mSituationType == situation::SituationType::IntersectionObjectHasPriority) + || (mSituationType == situation::SituationType::IntersectionSamePriority)) + { + mEgoVehicleIntersectionArea = getIntersectionArea(scene.egoVehicleRoad); + mObjectIntersectionArea = getIntersectionArea(scene.intersectingRoad); + } +} + +RssSituationIdProvider::SituationData::IntersectionArea +RssSituationIdProvider::SituationData::getIntersectionArea(RoadArea roadArea) +{ + IntersectionArea intersectionArea; + for (auto &roadSegment : roadArea) + { + for (auto &laneSegment : roadSegment) + { + if (laneSegment.type == LaneSegmentType::Intersection) + { + intersectionArea.insert(laneSegment.id); + } + } + } + return intersectionArea; +} + +bool RssSituationIdProvider::SituationData::isSmallerOrEqual( + RssSituationIdProvider::SituationData::IntersectionArea const &left, + RssSituationIdProvider::SituationData::IntersectionArea const &right) const +{ + if (right.size() < left.size()) + { + return false; + } + std::size_t const expectedDifference = right.size() - left.size(); + IntersectionArea differenceSet; + std::set_difference(right.begin(), + right.end(), + left.begin(), + left.end(), + std::insert_iterator(differenceSet, differenceSet.begin())); + return differenceSet.size() == expectedDifference; +} + +bool RssSituationIdProvider::SituationData::updateSituation(physics::TimeIndex const timeIndex, Scene const &scene) +{ + if (scene.situationType != mSituationType) + { + return false; + } + + IntersectionArea sceneEgoVehicleIntersectionArea; + IntersectionArea sceneObjectIntersectionArea; + + if ((mSituationType == situation::SituationType::IntersectionEgoHasPriority) + || (mSituationType == situation::SituationType::IntersectionObjectHasPriority) + || (mSituationType == situation::SituationType::IntersectionSamePriority)) + { + // extract the intersection areas of the scene + sceneEgoVehicleIntersectionArea = getIntersectionArea(scene.egoVehicleRoad); + if (!isSmallerOrEqual(sceneEgoVehicleIntersectionArea, mEgoVehicleIntersectionArea)) + { + return false; + } + + sceneObjectIntersectionArea = getIntersectionArea(scene.intersectingRoad); + if (!isSmallerOrEqual(sceneObjectIntersectionArea, mObjectIntersectionArea)) + { + return false; + } + } + else + { + // there must be only one situation of all other types between two objects + // therefore, the situation is treated to be the same if the situation type matches + } + + mTimeIndex = timeIndex; + return true; +} + +void RssSituationIdProvider::updateTime(physics::TimeIndex const &timeIndex) +{ + if (timeIndex != mCurrentTime) + { + mLastTime = mCurrentTime; + mCurrentTime = timeIndex; + + // next time step, remove outdated data + for (auto iter = mSituationData.begin(); iter != mSituationData.end();) + { + if ((iter->second.mTimeIndex != mLastTime) && (iter->second.mTimeIndex != mCurrentTime)) + { + iter = mSituationData.erase(iter); + } + else + { + ++iter; + } + } + } +} + +situation::SituationId RssSituationIdProvider::getSituationId(physics::TimeIndex const &timeIndex, Scene const &scene) +{ + updateTime(timeIndex); + + auto const objectDataRange = mSituationData.equal_range(scene.object.objectId); + auto findResult = std::find_if( + objectDataRange.first, objectDataRange.second, [&scene, this](SituationDataMap::value_type &situation) { + return situation.second.updateSituation(this->mCurrentTime, scene); + }); + if (findResult != objectDataRange.second) + { + return findResult->second.mSituationId; + } + auto insertResult = mSituationData.emplace_hint( + objectDataRange.first, scene.object.objectId, SituationData(mCurrentTime, getFreeSituationId(), scene)); + if (insertResult != mSituationData.end()) + { + return insertResult->second.mSituationId; + } + // LCOV_EXCL_START: unreachable code, keep to be on the safe side + throw std::runtime_error("RssSituationIdProvider::getSituationId>> cannot add scene to situation map"); + // LCOV_EXCL_STOP: unreachable code, keep to be on the safe side +} + +situation::SituationId RssSituationIdProvider::getFreeSituationId() +{ + bool situationIdFound = false; + do // LCOV_EXCL_LINE: lcov analysis misses this line + { + mNextSituationId++; + auto findResult = std::find_if( + mSituationData.begin(), mSituationData.end(), [this](SituationDataMap::value_type const &situation) { + return (situation.second.mSituationId == this->mNextSituationId); + }); + situationIdFound = findResult == mSituationData.end(); + } while (!situationIdFound); + + return mNextSituationId; +} + +} // namespace world +} // namespace ad_rss diff --git a/src/world/RssSituationIdProvider.hpp b/src/world/RssSituationIdProvider.hpp new file mode 100644 index 0000000000..fead71a601 --- /dev/null +++ b/src/world/RssSituationIdProvider.hpp @@ -0,0 +1,136 @@ +// ----------------- BEGIN LICENSE BLOCK --------------------------------- +// +// Copyright (c) 2018-2019 Intel Corporation +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors +// may be used to endorse or promote products derived from this software without +// specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// +// ----------------- END LICENSE BLOCK ----------------------------------- +/** + * @file + */ + +#pragma once + +#include +#include +#include "ad_rss/physics/TimeIndex.hpp" +#include "ad_rss/situation/SituationId.hpp" +#include "ad_rss/world/Scene.hpp" + +/*! + * @brief namespace ad_rss + */ +namespace ad_rss { +/*! + * @brief namespace world + */ +namespace world { + +/*! + * @brief class supporting to keep track of unique situation ids + * + * Situation id's have to be constant over time. + */ +class RssSituationIdProvider +{ +public: + /*! + * @brief default constructor + */ + RssSituationIdProvider() = default; + + /*! + * @brief default destructor + */ + ~RssSituationIdProvider() = default; + + /*! + * @brief get the situation id of the given scene + * + * @param[in] timeIndex the time index the scene refers to + * @param[in] scene the relevant scene + * + * @return the situation id assigned to the given scene + */ + situation::SituationId getSituationId(physics::TimeIndex const &timeIndex, Scene const &scene); + +private: + struct SituationData + { + SituationData(physics::TimeIndex timeIndex, situation::SituationId const situationId, Scene const &scene); + /*! + * @brief update the current situation data in case the scene matches the situation data + * + * @return \c true if the update succeeded, \c false if the scene doesn't match the situation + */ + bool updateSituation(physics::TimeIndex timeIndex, Scene const &scene); + + typedef std::set IntersectionArea; + + /*! + * Most of the time the intersection areas are identical + * If a vehicle has already entered the intersection, the areas are shrinking, + * but still have to be identical from end on + * As a consequence the whole new areas have to be within the old ones. + * + * @return \c true if the left intersection area is fully contained in the right one. + */ + bool isSmallerOrEqual(IntersectionArea const &left, IntersectionArea const &right) const; + + /*! + * @brief extract the intersection area from the RoadArea + */ + IntersectionArea getIntersectionArea(RoadArea roadArea); + + physics::TimeIndex mTimeIndex; + situation::SituationType mSituationType; + situation::SituationId mSituationId; + IntersectionArea mEgoVehicleIntersectionArea; + IntersectionArea mObjectIntersectionArea; + }; + + /*! + * Update the time and free outdated data. + * + * @param[in] timeIndex the current time index + */ + void updateTime(physics::TimeIndex const &timeIndex); + + /*! + * @brief get the next free situation id + */ + situation::SituationId getFreeSituationId(); + + typedef std::multimap SituationDataMap; + + physics::TimeIndex mCurrentTime{0}; + physics::TimeIndex mLastTime{0}; + situation::SituationId mNextSituationId{0}; + SituationDataMap mSituationData; +}; + +} // namespace world +} // namespace ad_rss diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index eba1bfc1c7..ea29ca2aec 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -39,6 +39,8 @@ set(EXEC_NAME ad-rss-tests) include(generated/CMakeLists.txt) set(RSS_TEST_SOURCES_WITH_PRIVATE_ACCESS + core/RssSituationExtractionInputRangeTests.cpp + core/RssSituationExtractionRelativePositionTests.cpp situation/RssSituationCheckingInputRangeTests.cpp situation/RssSituationCheckingTestsIntersectionInputRangeTests.cpp situation/RssSituationCheckingTestsIntersectionNoPriority.cpp @@ -60,11 +62,10 @@ set(RSS_TEST_SOURCES core/RssCheckTimeIndexTests.cpp core/RssResponseResolvingTests.cpp core/RssResponseTransformationTests.cpp - core/RssSituationExtractionInputRangeTests.cpp core/RssSituationExtractionIntersectionTests.cpp core/RssSituationExtractionOppositeDirectionTests.cpp - core/RssSituationExtractionRelativePositionTests.cpp core/RssSituationExtractionSameDirectionTests.cpp + core/RssSituationIdProviderTests.cpp core/RssStateCombineRssStateTests.cpp core/RssStateSafeTests.cpp physics/MathUnitTestsDistanceOffsetAfterResponseTime.cpp diff --git a/tests/core/RssCheckIntersectionTests.cpp b/tests/core/RssCheckIntersectionTests.cpp index 98a7eef147..b49ac5df4b 100644 --- a/tests/core/RssCheckIntersectionTests.cpp +++ b/tests/core/RssCheckIntersectionTests.cpp @@ -56,15 +56,25 @@ template class RssCheckIntersectionTestBase : public TESTBASE ::ad_rss::core::RssCheck rssCheck; for (auto egoVehicleSegmentId : {world::LaneSegmentId(0), world::LaneSegmentId(3)}) { - worldModel.egoVehicle.occupiedRegions[0].segmentId = egoVehicleSegmentId; + for (auto &scene : worldModel.scenes) + { + scene.egoVehicle.occupiedRegions[0].segmentId = egoVehicleSegmentId; + } for (uint32_t i = 0; i <= 90; i++) { - worldModel.egoVehicle.occupiedRegions[0].lonRange.minimum = ParametricValue(0.01 * i); - worldModel.egoVehicle.occupiedRegions[0].lonRange.maximum = ParametricValue(0.01 * i + 0.1); + for (auto &scene : worldModel.scenes) + { + scene.egoVehicle.occupiedRegions[0].lonRange.minimum = ParametricValue(0.01 * i); + scene.egoVehicle.occupiedRegions[0].lonRange.maximum = ParametricValue(0.01 * i + 0.1); + } worldModel.timeIndex++; ASSERT_TRUE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); +#if RSS_CHECK_TEST_DEBUG_OUT + std::cout << "Testing: segment[" << egoVehicleSegmentId << "] range min=" << i + << " brake?=" << isBrakeExpected(i) << std::endl; +#endif if (isBrakeExpected(i)) { TESTBASE::testRestrictions(accelerationRestriction, state::LongitudinalResponse::BrakeMin); @@ -90,9 +100,9 @@ class RssCheckIntersectionEgoHasPriorityTestBase : public RssCheckIntersectionTe bool isBrakeExpected(uint32_t i) override { bool const egoVehicleFaraway - = (i < 84) && (TESTBASE::worldModel.egoVehicle.occupiedRegions[0].segmentId == world::LaneSegmentId(0)); + = (i < 11) || (TESTBASE::worldModel.scenes[0].egoVehicle.occupiedRegions[0].segmentId == world::LaneSegmentId(0)); bool const egoVehicleInFront - = (i > 64) && (TESTBASE::worldModel.egoVehicle.occupiedRegions[0].segmentId == world::LaneSegmentId(3)); + = (i > 64) && (TESTBASE::worldModel.scenes[0].egoVehicle.occupiedRegions[0].segmentId == world::LaneSegmentId(3)); return !egoVehicleFaraway && !egoVehicleInFront; } @@ -133,7 +143,7 @@ class RssCheckIntersectionObjectHasPriorityTestBase : public RssCheckIntersectio bool isBrakeExpected(uint32_t i) override { bool const egoVehicleNearEnough - = (TESTBASE::worldModel.egoVehicle.occupiedRegions[0].segmentId == world::LaneSegmentId(3)) && (i > 27); + = (TESTBASE::worldModel.scenes[0].egoVehicle.occupiedRegions[0].segmentId == world::LaneSegmentId(3)) && (i > 54); return egoVehicleNearEnough; } @@ -166,7 +176,8 @@ template class RssCheckIntersectionSamePriorityTestBase : publi bool isBrakeExpected(uint32_t i) override { - return (TESTBASE::worldModel.egoVehicle.occupiedRegions[0].segmentId == world::LaneSegmentId(3)) && (i > 27); + return (TESTBASE::worldModel.scenes[0].egoVehicle.occupiedRegions[0].segmentId == world::LaneSegmentId(3)) + && (i > 54); } }; diff --git a/tests/core/RssCheckLateralTests.cpp b/tests/core/RssCheckLateralTests.cpp index dce2300d70..9cb279e8da 100644 --- a/tests/core/RssCheckLateralTests.cpp +++ b/tests/core/RssCheckLateralTests.cpp @@ -63,15 +63,22 @@ TEST_F(RssCheckLateralEgoRightTest, Lateral_Velocity_Towards_Each_Other) for (uint32_t i = 0; i <= 90; i++) { - worldModel.egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(1 - (0.01 * i)); - worldModel.egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(1 - (0.01 * i + 0.1)); + for (auto &scene : worldModel.scenes) + { + scene.egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(1 - (0.01 * i)); + scene.egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(1 - (0.01 * i + 0.1)); + } worldModel.timeIndex++; - Distance const dMin = calculateLateralMinSafeDistance(worldModel.scenes[0].object, worldModel.egoVehicle); + Distance const dMin = calculateLateralMinSafeDistance(worldModel.scenes[0].object.velocity, + worldModel.scenes[0].objectRssDynamics, + worldModel.scenes[0].egoVehicle.velocity, + worldModel.egoVehicleRssDynamics); ASSERT_TRUE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); - if (dMin < Distance(6) + worldModel.egoVehicle.occupiedRegions[0].latRange.minimum * Distance(5) - Distance(0.5)) + if (dMin < Distance(6) + worldModel.scenes[0].egoVehicle.occupiedRegions[0].latRange.minimum * Distance(5) + - Distance(0.5)) { testRestrictions(accelerationRestriction); } @@ -87,15 +94,20 @@ TEST_F(RssCheckLateralEgoRightTest, Lateral_Velocity_Towards_Each_Other) TEST_F(RssCheckLateralEgoRightTest, No_Lateral_Velocity) { - worldModel.egoVehicle.velocity.speedLat = kmhToMeterPerSec(0); - + for (auto &scene : worldModel.scenes) + { + scene.egoVehicle.velocity.speedLat = kmhToMeterPerSec(0); + } ::ad_rss::world::AccelerationRestriction accelerationRestriction; ::ad_rss::core::RssCheck rssCheck; for (uint32_t i = 0; i <= 90; i++) { - worldModel.egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(0.01 * i); - worldModel.egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(0.01 * i + 0.1); + for (auto &scene : worldModel.scenes) + { + scene.egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(0.01 * i); + scene.egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(0.01 * i + 0.1); + } worldModel.timeIndex++; ASSERT_TRUE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); @@ -106,7 +118,7 @@ TEST_F(RssCheckLateralEgoRightTest, No_Lateral_Velocity) TEST_F(RssCheckLateralEgoRightTest, Lateral_Velocity_Aways_From_Each_Other) { - worldModel.egoVehicle.velocity.speedLat = kmhToMeterPerSec(5); + worldModel.scenes[0].egoVehicle.velocity.speedLat = kmhToMeterPerSec(5); worldModel.scenes[0].object.velocity.speedLat = kmhToMeterPerSec(-5); ::ad_rss::world::AccelerationRestriction accelerationRestriction; @@ -114,8 +126,8 @@ TEST_F(RssCheckLateralEgoRightTest, Lateral_Velocity_Aways_From_Each_Other) for (uint32_t i = 0; i <= 90; i++) { - worldModel.egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(1 - (0.01 * i)); - worldModel.egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(1 - (0.01 * i + 0.1)); + worldModel.scenes[0].egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(1 - (0.01 * i)); + worldModel.scenes[0].egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(1 - (0.01 * i + 0.1)); worldModel.timeIndex++; ASSERT_TRUE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); @@ -153,15 +165,18 @@ TEST_F(RssCheckLateralEgoLeftTest, Lateral_Velocity_Towards_Each_Other) for (uint32_t i = 0; i <= 90; i++) { - worldModel.egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(0.01 * i); - worldModel.egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(0.01 * i + 0.1); + worldModel.scenes[0].egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(0.01 * i); + worldModel.scenes[0].egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(0.01 * i + 0.1); worldModel.timeIndex++; - Distance const dMin = calculateLateralMinSafeDistance(worldModel.egoVehicle, worldModel.scenes[0].object); + Distance const dMin = calculateLateralMinSafeDistance(worldModel.scenes[0].egoVehicle.velocity, + worldModel.egoVehicleRssDynamics, + worldModel.scenes[0].object.velocity, + worldModel.scenes[0].objectRssDynamics); ASSERT_TRUE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); - if (dMin < Distance(10) - worldModel.egoVehicle.occupiedRegions[0].latRange.maximum * Distance(5)) + if (dMin < Distance(10) - worldModel.scenes[0].egoVehicle.occupiedRegions[0].latRange.maximum * Distance(5)) { testRestrictions(accelerationRestriction); } @@ -229,28 +244,34 @@ template class RssCheckLateralEgoInTheMiddleTestBase : public T ::ad_rss::core::RssCheck rssCheck; bool safeLeftStateExists = false; bool safeRightStateExists = false; - for (uint32_t i = 0; i <= 12; i++) + for (uint32_t i = 0; i <= 9; i++) { - if (worldModel.egoVehicle.velocity.speedLat >= Speed(0.)) - { - worldModel.egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(0.075 * i); - worldModel.egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(0.075 * i + 0.1); - } - else + for (auto &scene : worldModel.scenes) { - worldModel.egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(1 - (0.075 * i)); - worldModel.egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(1 - (0.075 * i + 0.1)); + if (scene.egoVehicle.velocity.speedLat >= Speed(0.)) + { + scene.egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(0.1 * i); + scene.egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(0.1 * i + 0.1); + } + else + { + scene.egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(1 - (0.1 * i)); + scene.egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(1 - (0.1 * i + 0.1)); + } } worldModel.timeIndex++; - EXPECT_TRUE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); - state::LateralResponse expectedLatResponseLeft = state::LateralResponse::None; state::LateralResponse expectedLatResponseRight = state::LateralResponse::None; - Distance const dMinLeft = calculateLateralMinSafeDistance(worldModel.scenes[0].object, worldModel.egoVehicle); - if (dMinLeft > (ParametricValue(1) - worldModel.scenes[0].object.occupiedRegions[0].latRange.maximum - + worldModel.egoVehicle.occupiedRegions[0].latRange.minimum) - * Distance(5)) + Distance const dMinLeft = calculateLateralMinSafeDistance(worldModel.scenes[0].object.velocity, + worldModel.scenes[0].objectRssDynamics, + worldModel.scenes[0].egoVehicle.velocity, + worldModel.egoVehicleRssDynamics); + Distance const dActualLeft + = (ParametricValue(1) - worldModel.scenes[0].object.occupiedRegions[0].latRange.maximum + + worldModel.scenes[0].egoVehicle.occupiedRegions[0].latRange.minimum) + * Distance(5); + if (dMinLeft > dActualLeft) { expectedLatResponseLeft = state::LateralResponse::BrakeMin; } @@ -259,10 +280,15 @@ template class RssCheckLateralEgoInTheMiddleTestBase : public T safeLeftStateExists = true; } - Distance const dMinRight = calculateLateralMinSafeDistance(worldModel.egoVehicle, worldModel.scenes[1].object); - if (dMinRight > (ParametricValue(1) - worldModel.egoVehicle.occupiedRegions[0].latRange.maximum - + worldModel.scenes[1].object.occupiedRegions[0].latRange.minimum) - * Distance(5)) + Distance const dMinRight = calculateLateralMinSafeDistance(worldModel.scenes[1].egoVehicle.velocity, + worldModel.egoVehicleRssDynamics, + worldModel.scenes[1].object.velocity, + worldModel.scenes[1].objectRssDynamics); + Distance const dActualRight + = (ParametricValue(1) - worldModel.scenes[1].egoVehicle.occupiedRegions[0].latRange.maximum + + worldModel.scenes[1].object.occupiedRegions[0].latRange.minimum) + * Distance(5); + if (dMinRight > dActualRight) { expectedLatResponseRight = state::LateralResponse::BrakeMin; } @@ -276,6 +302,14 @@ template class RssCheckLateralEgoInTheMiddleTestBase : public T { expectedLonResponse = state::LongitudinalResponse::BrakeMin; } + +#if RSS_CHECK_TEST_DEBUG_OUT + std::cout << "Testing[j=" << j << ", i=" << i << "]: dMinLeft=" << static_cast(dMinLeft) + << " dActualLeft=" << static_cast(dActualLeft) + << " dMinRight=" << static_cast(dMinRight) + << " dActualRight=" << static_cast(dActualRight) << std::endl; +#endif + EXPECT_TRUE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); testRestrictions( accelerationRestriction, expectedLonResponse, expectedLatResponseLeft, expectedLatResponseRight); } @@ -296,21 +330,30 @@ INSTANTIATE_TEST_CASE_P(Range, TEST_F(RssCheckLateralEgoInTheMiddleTest, No_Lateral_Velocity) { - worldModel.egoVehicle.velocity.speedLat = kmhToMeterPerSec(0); + for (auto &scene : worldModel.scenes) + { + scene.egoVehicle.velocity.speedLat = kmhToMeterPerSec(0); + } performTest(); } TEST_F(RssCheckLateralEgoInTheMiddleTest, Lateral_Velocity_To_The_Left) { - worldModel.egoVehicle.velocity.speedLat = kmhToMeterPerSec(-3); + for (auto &scene : worldModel.scenes) + { + scene.egoVehicle.velocity.speedLat = kmhToMeterPerSec(-3); + } performTest(); } TEST_F(RssCheckLateralEgoInTheMiddleTest, Lateral_Velocity_To_The_Right) { - worldModel.egoVehicle.velocity.speedLat = kmhToMeterPerSec(3); + for (auto &scene : worldModel.scenes) + { + scene.egoVehicle.velocity.speedLat = kmhToMeterPerSec(3); + } performTest(); } diff --git a/tests/core/RssCheckNotRelevantTests.cpp b/tests/core/RssCheckNotRelevantTests.cpp index 606542473f..c9f482cb77 100644 --- a/tests/core/RssCheckNotRelevantTests.cpp +++ b/tests/core/RssCheckNotRelevantTests.cpp @@ -56,7 +56,7 @@ using RssCheckNotRelevantTest = RssCheckNotRelevantTestBase; TEST_F(RssCheckNotRelevantTest, NotRelevant) { - worldModel.egoVehicle.occupiedRegions[0].segmentId = 8; + worldModel.scenes[0].egoVehicle.occupiedRegions[0].segmentId = 8; worldModel.scenes[0].object.occupiedRegions[0].segmentId = 0; worldModel.scenes[0].situationType = ::ad_rss::situation::SituationType::NotRelevant; @@ -66,7 +66,7 @@ TEST_F(RssCheckNotRelevantTest, NotRelevant) for (uint32_t i = 0; i < 100; i++) { - worldModel.egoVehicle.velocity.speedLon = kmhToMeterPerSec(i); + worldModel.scenes[0].egoVehicle.velocity.speedLon = kmhToMeterPerSec(i); ASSERT_TRUE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); @@ -77,8 +77,8 @@ TEST_F(RssCheckNotRelevantTest, NotRelevant) using RssCheckNotRelevantOutOfMemoryTest = RssCheckNotRelevantTestBase; TEST_P(RssCheckNotRelevantOutOfMemoryTest, outOfMemoryAnyTime) { - // throw at 3 will succeed, but that's expected in this case as no actual calculations are performed. - performOutOfMemoryTest({3u}); + // throw at some vaules will succeed, but that's expected in this case as no actual calculations are performed. + performOutOfMemoryTest({3u, 5u, 6u}); } INSTANTIATE_TEST_CASE_P(Range, RssCheckNotRelevantOutOfMemoryTest, ::testing::Range(uint64_t(0u), uint64_t(50u))); diff --git a/tests/core/RssCheckObjectTests.cpp b/tests/core/RssCheckObjectTests.cpp index b772fd6b21..12a04180ff 100644 --- a/tests/core/RssCheckObjectTests.cpp +++ b/tests/core/RssCheckObjectTests.cpp @@ -52,7 +52,7 @@ TEST_F(RssCheckObjectTests, HugeEgoObjectId) ::ad_rss::world::AccelerationRestriction accelerationRestriction; ::ad_rss::core::RssCheck rssCheck; - worldModel.egoVehicle.objectId = std::numeric_limits::max(); + worldModel.scenes[0].egoVehicle.objectId = std::numeric_limits::max(); ASSERT_TRUE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); testRestrictions(accelerationRestriction); @@ -74,7 +74,7 @@ TEST_F(RssCheckObjectTests, SameObjectId) ::ad_rss::world::AccelerationRestriction accelerationRestriction; ::ad_rss::core::RssCheck rssCheck; - worldModel.scenes[0].object.objectId = worldModel.egoVehicle.objectId; + worldModel.scenes[0].object.objectId = worldModel.scenes[0].egoVehicle.objectId; ASSERT_FALSE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); } @@ -98,8 +98,8 @@ TEST_F(RssCheckObjectTests, EgoObjectTypeValidity) for (int32_t i = 0; i < 10; ++i) { worldModel.timeIndex++; - worldModel.egoVehicle.objectType = static_cast(i); - if (worldModel.egoVehicle.objectType == ad_rss::world::ObjectType::EgoVehicle) + worldModel.scenes[0].egoVehicle.objectType = static_cast(i); + if (worldModel.scenes[0].egoVehicle.objectType == ad_rss::world::ObjectType::EgoVehicle) { ASSERT_TRUE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); testRestrictions(accelerationRestriction); @@ -138,7 +138,7 @@ TEST_F(RssCheckObjectTests, HugeEgoVelocity) ::ad_rss::world::AccelerationRestriction accelerationRestriction; ::ad_rss::core::RssCheck rssCheck; - worldModel.egoVehicle.velocity.speedLon = Speed(300); + worldModel.scenes[0].egoVehicle.velocity.speedLon = Speed(300); ASSERT_FALSE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); } @@ -148,7 +148,7 @@ TEST_F(RssCheckObjectTests, HugeEgoAcceleration) ::ad_rss::world::AccelerationRestriction accelerationRestriction; ::ad_rss::core::RssCheck rssCheck; - worldModel.egoVehicle.dynamics.alphaLon.accelMax = Acceleration(120); + worldModel.egoVehicleRssDynamics.alphaLon.accelMax = Acceleration(120); ASSERT_FALSE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); } @@ -158,7 +158,7 @@ TEST_F(RssCheckObjectTests, EmptyEgoVehicleOccupiedRegion) ::ad_rss::world::AccelerationRestriction accelerationRestriction; ::ad_rss::core::RssCheck rssCheck; - worldModel.egoVehicle.occupiedRegions.clear(); + worldModel.scenes[0].egoVehicle.occupiedRegions.clear(); ASSERT_FALSE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); } @@ -168,8 +168,8 @@ TEST_F(RssCheckObjectTests, WrongEgoVehicleOccupiedRegion) ::ad_rss::world::AccelerationRestriction accelerationRestriction; ::ad_rss::core::RssCheck rssCheck; - worldModel.egoVehicle.occupiedRegions[0].lonRange.minimum = ParametricValue(0.5); - worldModel.egoVehicle.occupiedRegions[0].lonRange.maximum = ParametricValue(0.3); + worldModel.scenes[0].egoVehicle.occupiedRegions[0].lonRange.minimum = ParametricValue(0.5); + worldModel.scenes[0].egoVehicle.occupiedRegions[0].lonRange.maximum = ParametricValue(0.3); ASSERT_FALSE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); } @@ -179,7 +179,7 @@ TEST_F(RssCheckObjectTests, NegativeEgoVehicleLongitudinalAcceleration) ::ad_rss::world::AccelerationRestriction accelerationRestriction; ::ad_rss::core::RssCheck rssCheck; - worldModel.egoVehicle.dynamics.alphaLon.accelMax = Acceleration(-3); + worldModel.egoVehicleRssDynamics.alphaLon.accelMax = Acceleration(-3); ASSERT_FALSE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); } @@ -189,8 +189,8 @@ TEST_F(RssCheckObjectTests, IncorrectEgoVehicleLongitudinalAccelerationRange) ::ad_rss::world::AccelerationRestriction accelerationRestriction; ::ad_rss::core::RssCheck rssCheck; - worldModel.egoVehicle.dynamics.alphaLon.brakeMax = Acceleration(1); - worldModel.egoVehicle.dynamics.alphaLon.brakeMin = Acceleration(5); + worldModel.egoVehicleRssDynamics.alphaLon.brakeMax = Acceleration(1); + worldModel.egoVehicleRssDynamics.alphaLon.brakeMin = Acceleration(5); ASSERT_FALSE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); } @@ -200,8 +200,8 @@ TEST_F(RssCheckObjectTests, IncorrectEgoVehicleLongitudinalAccelerationRange2) ::ad_rss::world::AccelerationRestriction accelerationRestriction; ::ad_rss::core::RssCheck rssCheck; - worldModel.egoVehicle.dynamics.alphaLon.brakeMin = Acceleration(1); - worldModel.egoVehicle.dynamics.alphaLon.brakeMinCorrect = Acceleration(5); + worldModel.egoVehicleRssDynamics.alphaLon.brakeMin = Acceleration(1); + worldModel.egoVehicleRssDynamics.alphaLon.brakeMinCorrect = Acceleration(5); ASSERT_FALSE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); } @@ -211,7 +211,7 @@ TEST_F(RssCheckObjectTests, NegativeEgoVehicleLateralAcceleration) ::ad_rss::world::AccelerationRestriction accelerationRestriction; ::ad_rss::core::RssCheck rssCheck; - worldModel.egoVehicle.dynamics.alphaLat.brakeMin = Acceleration(-1); + worldModel.egoVehicleRssDynamics.alphaLat.brakeMin = Acceleration(-1); ASSERT_FALSE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); } @@ -221,7 +221,7 @@ TEST_F(RssCheckObjectTests, NegativeEgoVehicleLongitudinalVelocity) ::ad_rss::world::AccelerationRestriction accelerationRestriction; ::ad_rss::core::RssCheck rssCheck; - worldModel.egoVehicle.velocity.speedLon = Speed(-3.); + worldModel.scenes[0].egoVehicle.velocity.speedLon = Speed(-3.); ASSERT_FALSE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); } @@ -231,7 +231,7 @@ TEST_F(RssCheckObjectTests, NegativeEgoVehicleResponseTime) ::ad_rss::world::AccelerationRestriction accelerationRestriction; ::ad_rss::core::RssCheck rssCheck; - worldModel.egoVehicle.responseTime = Duration(-5.); + worldModel.egoVehicleRssDynamics.responseTime = Duration(-5.); ASSERT_FALSE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); } @@ -241,7 +241,7 @@ TEST_F(RssCheckObjectTests, ZeroEgoVehicleResponseTime) ::ad_rss::world::AccelerationRestriction accelerationRestriction; ::ad_rss::core::RssCheck rssCheck; - worldModel.egoVehicle.responseTime = Duration(0); + worldModel.egoVehicleRssDynamics.responseTime = Duration(0); ASSERT_FALSE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); } diff --git a/tests/core/RssCheckOppositeDirectionTests.cpp b/tests/core/RssCheckOppositeDirectionTests.cpp index 4a0bbb47a7..be5f37a79f 100644 --- a/tests/core/RssCheckOppositeDirectionTests.cpp +++ b/tests/core/RssCheckOppositeDirectionTests.cpp @@ -65,7 +65,7 @@ TEST_F(RssCheckOppositeDirectionEgoCorrectTest, DifferentVelocities) TEST_F(RssCheckOppositeDirectionEgoCorrectTest, DifferentVelocities_DifferentLaneSegements) { - worldModel.egoVehicle.occupiedRegions[0].segmentId = 2; + worldModel.scenes[0].egoVehicle.occupiedRegions[0].segmentId = 2; performDifferentVelocitiesTest(state::LongitudinalResponse::BrakeMinCorrect); } @@ -81,9 +81,9 @@ INSTANTIATE_TEST_CASE_P(Range, TEST_F(RssCheckOppositeDirectionEgoCorrectTest, DifferentVelocities_NoLateralConflict) { - worldModel.egoVehicle.occupiedRegions[0].segmentId = 0; - worldModel.egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(0.0); - worldModel.egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(0.1); + worldModel.scenes[0].egoVehicle.occupiedRegions[0].segmentId = 0; + worldModel.scenes[0].egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(0.0); + worldModel.scenes[0].egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(0.1); worldModel.scenes[0].object.occupiedRegions[0].segmentId = 8; @@ -92,7 +92,7 @@ TEST_F(RssCheckOppositeDirectionEgoCorrectTest, DifferentVelocities_NoLateralCon for (uint32_t i = 0; i < 100; i++) { - worldModel.egoVehicle.velocity.speedLon = kmhToMeterPerSec(i); + worldModel.scenes[0].egoVehicle.velocity.speedLon = kmhToMeterPerSec(i); worldModel.timeIndex++; ASSERT_TRUE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); @@ -137,7 +137,7 @@ TEST_F(RssCheckOppositeDirectionOtherCorrectTest, DifferentVelocities) TEST_F(RssCheckOppositeDirectionOtherCorrectTest, DifferentVelocities_DifferentLaneSegements) { - worldModel.egoVehicle.occupiedRegions[0].segmentId = 2; + worldModel.scenes[0].egoVehicle.occupiedRegions[0].segmentId = 2; performDifferentVelocitiesTest(state::LongitudinalResponse::BrakeMin); } @@ -187,7 +187,7 @@ TEST_F(RssCheckOppositeDirectionBothCorrectTest, DifferentVelocities) TEST_F(RssCheckOppositeDirectionBothCorrectTest, DifferentVelocities_DifferentLaneSegements) { - worldModel.egoVehicle.occupiedRegions[0].segmentId = 2; + worldModel.scenes[0].egoVehicle.occupiedRegions[0].segmentId = 2; performDifferentVelocitiesTest(state::LongitudinalResponse::BrakeMinCorrect); } diff --git a/tests/core/RssCheckSameDirectionTests.cpp b/tests/core/RssCheckSameDirectionTests.cpp index 3880f49150..cda9535c40 100644 --- a/tests/core/RssCheckSameDirectionTests.cpp +++ b/tests/core/RssCheckSameDirectionTests.cpp @@ -86,15 +86,15 @@ TEST_F(RssCheckSameDirectionOtherLeadingTest, DifferentVelocities) TEST_F(RssCheckSameDirectionOtherLeadingTest, DifferentVelocities_DifferentLaneSegements) { - worldModel.egoVehicle.occupiedRegions[0].segmentId = 2; + worldModel.scenes[0].egoVehicle.occupiedRegions[0].segmentId = 2; performDifferentVelocitiesTest(state::LongitudinalResponse::BrakeMin); } TEST_F(RssCheckSameDirectionOtherLeadingTest, DifferentVelocities_NoLateralConflict) { - worldModel.egoVehicle.occupiedRegions[0].segmentId = 0; - worldModel.egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(0.0); - worldModel.egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(0.1); + worldModel.scenes[0].egoVehicle.occupiedRegions[0].segmentId = 0; + worldModel.scenes[0].egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(0.0); + worldModel.scenes[0].egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(0.1); worldModel.scenes[0].object.occupiedRegions[0].segmentId = 8; @@ -103,7 +103,7 @@ TEST_F(RssCheckSameDirectionOtherLeadingTest, DifferentVelocities_NoLateralConfl for (uint32_t i = 0; i < 100; i++) { - worldModel.egoVehicle.velocity.speedLon = kmhToMeterPerSec(i); + worldModel.scenes[0].egoVehicle.velocity.speedLon = kmhToMeterPerSec(i); worldModel.timeIndex++; ASSERT_TRUE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); @@ -114,9 +114,9 @@ TEST_F(RssCheckSameDirectionOtherLeadingTest, DifferentVelocities_NoLateralConfl TEST_F(RssCheckSameDirectionOtherLeadingTest, _DifferentVelocities_NoLateralConflict_2Objects) { - worldModel.egoVehicle.occupiedRegions[0].segmentId = 0; - worldModel.egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(0.0); - worldModel.egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(0.1); + worldModel.scenes[0].egoVehicle.occupiedRegions[0].segmentId = 0; + worldModel.scenes[0].egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(0.0); + worldModel.scenes[0].egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(0.1); worldModel.scenes.push_back(worldModel.scenes.front()); worldModel.scenes[0].object.occupiedRegions[0].segmentId = 8; @@ -128,7 +128,7 @@ TEST_F(RssCheckSameDirectionOtherLeadingTest, _DifferentVelocities_NoLateralConf for (uint32_t i = 0; i < 100; i++) { - worldModel.egoVehicle.velocity.speedLon = kmhToMeterPerSec(i); + worldModel.scenes[0].egoVehicle.velocity.speedLon = kmhToMeterPerSec(i); worldModel.timeIndex++; ASSERT_TRUE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); @@ -158,9 +158,9 @@ TEST_F(RssCheckSameDirectionEgoLeadingTest, DifferentVelocities) TEST_F(RssCheckSameDirectionEgoLeadingTest, Overlap_Front) { - worldModel.egoVehicle.occupiedRegions[0].segmentId = 8; - worldModel.egoVehicle.occupiedRegions[0].lonRange.maximum = ParametricValue(0.5); - worldModel.egoVehicle.occupiedRegions[0].lonRange.minimum = ParametricValue(0.4); + worldModel.scenes[0].egoVehicle.occupiedRegions[0].segmentId = 8; + worldModel.scenes[0].egoVehicle.occupiedRegions[0].lonRange.maximum = ParametricValue(0.5); + worldModel.scenes[0].egoVehicle.occupiedRegions[0].lonRange.minimum = ParametricValue(0.4); worldModel.scenes[0].object.occupiedRegions[0].segmentId = 6; worldModel.scenes[0].object.occupiedRegions[0].lonRange.maximum = ParametricValue(0.45); @@ -183,9 +183,9 @@ TEST_F(RssCheckSameDirectionEgoLeadingTest, Overlap_Front) TEST_F(RssCheckSameDirectionEgoLeadingTest, Overlap_Right) { - worldModel.egoVehicle.occupiedRegions[0].segmentId = 5; - worldModel.egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(0.5); - worldModel.egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(0.4); + worldModel.scenes[0].egoVehicle.occupiedRegions[0].segmentId = 5; + worldModel.scenes[0].egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(0.5); + worldModel.scenes[0].egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(0.4); worldModel.scenes[0].object.occupiedRegions[0].segmentId = 2; worldModel.scenes[0].object.occupiedRegions[0].latRange.maximum = ParametricValue(0.45); @@ -208,9 +208,9 @@ TEST_F(RssCheckSameDirectionEgoLeadingTest, Overlap_Right) TEST_F(RssCheckSameDirectionEgoLeadingTest, Overlap_Left) { - worldModel.egoVehicle.occupiedRegions[0].segmentId = 5; - worldModel.egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(0.4); - worldModel.egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(0.3); + worldModel.scenes[0].egoVehicle.occupiedRegions[0].segmentId = 5; + worldModel.scenes[0].egoVehicle.occupiedRegions[0].latRange.maximum = ParametricValue(0.4); + worldModel.scenes[0].egoVehicle.occupiedRegions[0].latRange.minimum = ParametricValue(0.3); worldModel.scenes[0].object.occupiedRegions[0].segmentId = 2; worldModel.scenes[0].object.occupiedRegions[0].latRange.maximum = ParametricValue(0.45); diff --git a/tests/core/RssCheckTestBaseT.hpp b/tests/core/RssCheckTestBaseT.hpp index ed74b19b69..b3e41d9391 100644 --- a/tests/core/RssCheckTestBaseT.hpp +++ b/tests/core/RssCheckTestBaseT.hpp @@ -39,6 +39,8 @@ #include "ad_rss/core/RssCheck.hpp" #include "wrap_new.hpp" +#define RSS_CHECK_TEST_DEBUG_OUT 0 + namespace ad_rss { namespace core { @@ -156,12 +158,14 @@ template class RssCheckTestBaseT : public TESTBASE createRoadAreaNonIntersection(); } - worldModel.egoVehicle = objectAsEgo(getEgoObject()); + worldModel.egoVehicleRssDynamics = getEgoRssDynamics(); for (uint32_t index = 0u; index < getNumberOfSceneObjects(); index++) { ::ad_rss::world::Scene scene; scene.situationType = getSituationType(); scene.object = getSceneObject(index); + scene.objectRssDynamics = getObjectRssDynamics(); + scene.egoVehicle = objectAsEgo(getEgoObject()); scene.egoVehicleRoad = roadArea; scene.intersectingRoad = otherRoadArea; worldModel.scenes.push_back(scene); @@ -455,16 +459,16 @@ template class RssCheckTestBaseT : public TESTBASE switch (expectedLonResponse) { case state::LongitudinalResponse::None: - EXPECT_EQ(longitudinalRange.minimum, -1. * worldModel.egoVehicle.dynamics.alphaLon.brakeMax); - EXPECT_EQ(longitudinalRange.maximum, worldModel.egoVehicle.dynamics.alphaLon.accelMax); + EXPECT_EQ(longitudinalRange.minimum, -1. * worldModel.egoVehicleRssDynamics.alphaLon.brakeMax); + EXPECT_EQ(longitudinalRange.maximum, worldModel.egoVehicleRssDynamics.alphaLon.accelMax); break; case state::LongitudinalResponse::BrakeMin: - EXPECT_EQ(longitudinalRange.minimum, -1. * worldModel.egoVehicle.dynamics.alphaLon.brakeMax); - EXPECT_EQ(longitudinalRange.maximum, -1. * worldModel.egoVehicle.dynamics.alphaLon.brakeMin); + EXPECT_EQ(longitudinalRange.minimum, -1. * worldModel.egoVehicleRssDynamics.alphaLon.brakeMax); + EXPECT_EQ(longitudinalRange.maximum, -1. * worldModel.egoVehicleRssDynamics.alphaLon.brakeMin); break; case state::LongitudinalResponse::BrakeMinCorrect: - EXPECT_EQ(longitudinalRange.minimum, -1. * worldModel.egoVehicle.dynamics.alphaLon.brakeMax); - EXPECT_EQ(longitudinalRange.maximum, -1. * worldModel.egoVehicle.dynamics.alphaLon.brakeMinCorrect); + EXPECT_EQ(longitudinalRange.minimum, -1. * worldModel.egoVehicleRssDynamics.alphaLon.brakeMax); + EXPECT_EQ(longitudinalRange.maximum, -1. * worldModel.egoVehicleRssDynamics.alphaLon.brakeMinCorrect); break; default: EXPECT_TRUE(false); @@ -477,12 +481,12 @@ template class RssCheckTestBaseT : public TESTBASE switch (expectedLatResponse) { case state::LateralResponse::None: - EXPECT_EQ(lateralRange.minimum, -1. * worldModel.egoVehicle.dynamics.alphaLat.brakeMin); - EXPECT_EQ(lateralRange.maximum, worldModel.egoVehicle.dynamics.alphaLat.accelMax); + EXPECT_EQ(lateralRange.minimum, -1. * worldModel.egoVehicleRssDynamics.alphaLat.brakeMin); + EXPECT_EQ(lateralRange.maximum, worldModel.egoVehicleRssDynamics.alphaLat.accelMax); break; case state::LateralResponse::BrakeMin: EXPECT_EQ(lateralRange.minimum, std::numeric_limits::lowest()); - EXPECT_EQ(lateralRange.maximum, -1. * worldModel.egoVehicle.dynamics.alphaLat.brakeMin); + EXPECT_EQ(lateralRange.maximum, -1. * worldModel.egoVehicleRssDynamics.alphaLat.brakeMin); break; default: EXPECT_TRUE(false); @@ -536,25 +540,47 @@ template class RssCheckTestBaseT : public TESTBASE switch (getSituationType()) { case situation::SituationType::SameDirection: - dMin = calculateLongitudinalMinSafeDistance(worldModel.egoVehicle, scene.object); + dMin = calculateLongitudinalMinSafeDistance(scene.egoVehicle.velocity, + worldModel.egoVehicleRssDynamics, + scene.object.velocity, + scene.objectRssDynamics); break; case situation::SituationType::OppositeDirection: - dMin = calculateLongitudinalMinSafeDistanceOppositeDirection(worldModel.egoVehicle, scene.object); + if (getDrivingDirection() == ::ad_rss::world::LaneDrivingDirection::Negative) + { + dMin = calculateLongitudinalMinSafeDistanceOppositeDirection(scene.object.velocity, + scene.objectRssDynamics, + scene.egoVehicle.velocity, + worldModel.egoVehicleRssDynamics); + } + else + { + dMin = calculateLongitudinalMinSafeDistanceOppositeDirection(scene.egoVehicle.velocity, + worldModel.egoVehicleRssDynamics, + scene.object.velocity, + scene.objectRssDynamics); + } break; default: EXPECT_TRUE(false); break; } - Distance egoDistanceToSegmentEnd = getDistanceToSegmentEnd(worldModel.egoVehicle); + Distance egoDistanceToSegmentEnd = getDistanceToSegmentEnd(scene.egoVehicle); Distance objectDistanceFromSegmentBegin = getFrontObjectDistanceFromSegmentBegin(); Distance additionalLength{0u}; - if ((worldModel.egoVehicle.occupiedRegions[0].segmentId < 3) - || (worldModel.egoVehicle.occupiedRegions[0].segmentId > 5)) + if ((scene.egoVehicle.occupiedRegions[0].segmentId < 3) || (scene.egoVehicle.occupiedRegions[0].segmentId > 5)) { // ego in front or in the back, then the middle segment is relevant additionalLength = getMiddleRoadSegmentLength(); } +#if RSS_CHECK_TEST_DEBUG_OUT + std::cout << "isDistanceSafeLongitudinal: dMin=" << static_cast(dMin) + << " | additionalLength=" << static_cast(additionalLength) + << " egoDistanceToSegmentEnd=" << static_cast(egoDistanceToSegmentEnd) + << " objectDistanceFromSegmentBegin=" << static_cast(objectDistanceFromSegmentBegin) + << std::endl; +#endif if (dMin >= additionalLength + egoDistanceToSegmentEnd + objectDistanceFromSegmentBegin) { return false; @@ -570,11 +596,17 @@ template class RssCheckTestBaseT : public TESTBASE for (uint32_t i = 0; i < 100; i++) { - worldModel.egoVehicle.velocity.speedLon = kmhToMeterPerSec(i); + for (auto &scene : worldModel.scenes) + { + scene.egoVehicle.velocity.speedLon = kmhToMeterPerSec(i); + } worldModel.timeIndex++; ASSERT_TRUE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); +#if RSS_CHECK_TEST_DEBUG_OUT + std::cout << "TestingVelocity[i=" << i << "]: lonSafe=" << isDistanceSafeLongitudinal() << std::endl; +#endif if (isDistanceSafeLongitudinal()) { testRestrictions(accelerationRestriction); @@ -593,12 +625,18 @@ template class RssCheckTestBaseT : public TESTBASE for (uint32_t i = 0; i <= 90; i++) { - worldModel.egoVehicle.occupiedRegions[0].lonRange.minimum = ParametricValue(0.01 * i); - worldModel.egoVehicle.occupiedRegions[0].lonRange.maximum = ParametricValue(0.01 * i + 0.1); + for (auto &scene : worldModel.scenes) + { + scene.egoVehicle.occupiedRegions[0].lonRange.minimum = ParametricValue(0.01 * i); + scene.egoVehicle.occupiedRegions[0].lonRange.maximum = ParametricValue(0.01 * i + 0.1); + } worldModel.timeIndex++; ASSERT_TRUE(rssCheck.calculateAccelerationRestriction(worldModel, accelerationRestriction)); +#if RSS_CHECK_TEST_DEBUG_OUT + std::cout << "TestingDistance[i=" << i << "]: lonSafe=" << isDistanceSafeLongitudinal() << std::endl; +#endif if (isDistanceSafeLongitudinal()) { testRestrictions(accelerationRestriction); diff --git a/tests/core/RssSituationExtractionInputRangeTests.cpp b/tests/core/RssSituationExtractionInputRangeTests.cpp index 1466b8e941..26ac356a6e 100644 --- a/tests/core/RssSituationExtractionInputRangeTests.cpp +++ b/tests/core/RssSituationExtractionInputRangeTests.cpp @@ -35,34 +35,28 @@ namespace ad_rss { namespace core { -namespace RssSituationExtraction { - -bool extractSituationInputRangeChecked(physics::TimeIndex const &timeIndex, - world::Object const &egoVehicle, - world::Scene const ¤tScene, - situation::Situation &situation); - class RssSituationExtractionInputRangeTests : public RssCheckTestBase { protected: situation::Situation situation; + RssSituationExtraction situationExtraction; void performTestRun() { - EXPECT_FALSE(extractSituation(worldModel.timeIndex, worldModel.egoVehicle, worldModel.scenes[0], situation)); - EXPECT_FALSE( - extractSituationInputRangeChecked(worldModel.timeIndex, worldModel.egoVehicle, worldModel.scenes[0], situation)); + EXPECT_FALSE(situationExtraction.extractSituationInputRangeChecked( + worldModel.timeIndex, worldModel.egoVehicleRssDynamics, worldModel.scenes[0], situation)); } }; TEST_F(RssSituationExtractionInputRangeTests, validateTestSetup) { - ASSERT_TRUE(extractSituation(worldModel.timeIndex, worldModel.egoVehicle, worldModel.scenes[0], situation)); + ASSERT_TRUE(situationExtraction.extractSituationInputRangeChecked( + worldModel.timeIndex, worldModel.egoVehicleRssDynamics, worldModel.scenes[0], situation)); } TEST_F(RssSituationExtractionInputRangeTests, egoVehicleDataInvalid) { - worldModel.egoVehicle.occupiedRegions[0].lonRange.minimum = physics::ParametricValue(); + worldModel.scenes[0].egoVehicle.occupiedRegions[0].lonRange.minimum = physics::ParametricValue(); performTestRun(); } @@ -80,14 +74,15 @@ TEST_F(RssSituationExtractionInputRangeTests, egoVehicleAsObject) TEST_F(RssSituationExtractionInputRangeTests, objectAsEgoVehicle) { - worldModel.egoVehicle.objectType = world::ObjectType::OtherVehicle; + worldModel.scenes[0].egoVehicle.objectType = world::ObjectType::OtherVehicle; performTestRun(); } TEST_F(RssSituationExtractionInputRangeTests, situationNotRelevant) { worldModel.scenes[0].situationType = situation::SituationType::NotRelevant; - ASSERT_TRUE(extractSituation(worldModel.timeIndex, worldModel.egoVehicle, worldModel.scenes[0], situation)); + ASSERT_TRUE(situationExtraction.extractSituationInputRangeChecked( + worldModel.timeIndex, worldModel.egoVehicleRssDynamics, worldModel.scenes[0], situation)); } TEST_F(RssSituationExtractionInputRangeTests, situationTypeInvalid) @@ -96,6 +91,5 @@ TEST_F(RssSituationExtractionInputRangeTests, situationTypeInvalid) performTestRun(); } -} // namespace RssSituationExtraction } // namespace core } // namespace ad_rss diff --git a/tests/core/RssSituationExtractionIntersectionTests.cpp b/tests/core/RssSituationExtractionIntersectionTests.cpp index 3cedc16502..88080346a9 100644 --- a/tests/core/RssSituationExtractionIntersectionTests.cpp +++ b/tests/core/RssSituationExtractionIntersectionTests.cpp @@ -36,19 +36,19 @@ namespace ad_rss { namespace core { -namespace RssSituationExtraction { - class RssSituationExtractionIntersectionTests : public testing::Test { protected: virtual void SetUp() { + worldModel.egoVehicleRssDynamics = getEgoRssDynamics(); leadingObject = createObject(36., 0.); leadingObject.objectId = 0; scene.situationType = ad_rss::situation::SituationType::IntersectionEgoHasPriority; + scene.objectRssDynamics = getObjectRssDynamics(); { - ::ad_rss::world::OccupiedRegion occupiedRegion; + world::OccupiedRegion occupiedRegion; occupiedRegion.lonRange.minimum = ParametricValue(0.8); occupiedRegion.lonRange.maximum = ParametricValue(1.0); occupiedRegion.segmentId = 1.; @@ -61,7 +61,7 @@ class RssSituationExtractionIntersectionTests : public testing::Test followingObject = createObject(36., 0.); followingObject.objectId = 1; { - ::ad_rss::world::OccupiedRegion occupiedRegion; + world::OccupiedRegion occupiedRegion; occupiedRegion.lonRange.minimum = ParametricValue(0.1); occupiedRegion.lonRange.maximum = ParametricValue(0.2); occupiedRegion.segmentId = 1.; @@ -77,64 +77,110 @@ class RssSituationExtractionIntersectionTests : public testing::Test leadingObject.occupiedRegions.clear(); scene.egoVehicleRoad.clear(); } - ::ad_rss::world::Object followingObject; - ::ad_rss::world::Object leadingObject; - ::ad_rss::world::Scene scene; -}; -TEST_F(RssSituationExtractionIntersectionTests, noLongitudinalDifference) -{ - world::WorldModel worldModel; - situation::SituationVector situationVector; + world::RoadArea longitudinalNoDifferenceRoadArea() + { + world::RoadArea roadArea; + { + world::RoadSegment roadSegment; + world::LaneSegment laneSegment; - worldModel.egoVehicle = objectAsEgo(leadingObject); - scene.object = followingObject; + laneSegment.id = 1; + laneSegment.length.minimum = Distance(10); + laneSegment.length.maximum = Distance(10); - { - ::ad_rss::world::RoadSegment roadSegment; - ::ad_rss::world::LaneSegment laneSegment; + laneSegment.width.minimum = Distance(5); + laneSegment.width.maximum = Distance(5); + laneSegment.type = world::LaneSegmentType::Normal; + + roadSegment.push_back(laneSegment); + roadArea.push_back(roadSegment); + } - laneSegment.id = 1; - laneSegment.length.minimum = Distance(10); - laneSegment.length.maximum = Distance(10); + { + world::RoadSegment roadSegment; + world::LaneSegment laneSegment; + + laneSegment.id = 2; + laneSegment.length.minimum = Distance(5); + laneSegment.length.maximum = Distance(5); - laneSegment.width.minimum = Distance(5); - laneSegment.width.maximum = Distance(5); - laneSegment.type = ::ad_rss::world::LaneSegmentType::Normal; + laneSegment.width.minimum = Distance(5); + laneSegment.width.maximum = Distance(5); + laneSegment.type = world::LaneSegmentType::Intersection; - roadSegment.push_back(laneSegment); - scene.egoVehicleRoad.push_back(roadSegment); - scene.intersectingRoad.push_back(roadSegment); + roadSegment.push_back(laneSegment); + + roadArea.push_back(roadSegment); + } + return roadArea; } + world::RoadArea longitudinalDifferenceRoadArea() { - ::ad_rss::world::RoadSegment roadSegment; - ::ad_rss::world::LaneSegment laneSegment; + world::RoadArea roadArea; + { + world::RoadSegment roadSegment; + world::LaneSegment laneSegment; + + laneSegment.id = 1; + laneSegment.length.minimum = Distance(8); + laneSegment.length.maximum = Distance(10); + + laneSegment.width.minimum = Distance(5); + laneSegment.width.maximum = Distance(5); + laneSegment.type = world::LaneSegmentType::Normal; + + roadSegment.push_back(laneSegment); + roadArea.push_back(roadSegment); + } + + { + world::RoadSegment roadSegment; + world::LaneSegment laneSegment; - laneSegment.id = 2; - laneSegment.length.minimum = Distance(5); - laneSegment.length.maximum = Distance(5); + laneSegment.id = 2; + laneSegment.length.minimum = Distance(4); + laneSegment.length.maximum = Distance(5); - laneSegment.width.minimum = Distance(5); - laneSegment.width.maximum = Distance(5); - laneSegment.type = ::ad_rss::world::LaneSegmentType::Intersection; + laneSegment.width.minimum = Distance(5); + laneSegment.width.maximum = Distance(5); + laneSegment.type = world::LaneSegmentType::Intersection; - roadSegment.push_back(laneSegment); + roadSegment.push_back(laneSegment); - scene.egoVehicleRoad.push_back(roadSegment); - scene.intersectingRoad.push_back(roadSegment); + roadArea.push_back(roadSegment); + } + return roadArea; } + world::Object followingObject; + world::Object leadingObject; + world::WorldModel worldModel; + world::Scene scene; + RssSituationExtraction situationExtraction; +}; + +TEST_F(RssSituationExtractionIntersectionTests, noLongitudinalDifference) +{ + situation::SituationVector situationVector; + + scene.egoVehicle = objectAsEgo(leadingObject); + scene.object = followingObject; + + scene.egoVehicleRoad = longitudinalNoDifferenceRoadArea(); + scene.intersectingRoad = scene.egoVehicleRoad; + worldModel.scenes.push_back(scene); worldModel.timeIndex = 1; - ASSERT_TRUE(extractSituations(worldModel, situationVector)); + ASSERT_TRUE(situationExtraction.extractSituations(worldModel, situationVector)); ASSERT_EQ(situationVector.size(), 1); ASSERT_EQ(situationVector[0].relativePosition.longitudinalDistance, Distance(6.)); ASSERT_EQ(situationVector[0].egoVehicleState.velocity.speedLon, Speed(10.)); ASSERT_EQ(situationVector[0].egoVehicleState.dynamics.alphaLon.accelMax, - worldModel.egoVehicle.dynamics.alphaLon.accelMax); + worldModel.egoVehicleRssDynamics.alphaLon.accelMax); ASSERT_EQ(situationVector[0].egoVehicleState.distanceToEnterIntersection, Distance(0)); ASSERT_EQ(situationVector[0].egoVehicleState.distanceToLeaveIntersection, Distance(7)); @@ -144,69 +190,70 @@ TEST_F(RssSituationExtractionIntersectionTests, noLongitudinalDifference) ASSERT_EQ(situationVector[0].otherVehicleState.distanceToLeaveIntersection, Distance(14)); ASSERT_FALSE(situationVector[0].otherVehicleState.hasPriority); - ASSERT_EQ(situationVector[0].relativePosition.longitudinalPosition, - ::ad_rss::situation::LongitudinalRelativePosition::InFront); + ASSERT_EQ(situationVector[0].relativePosition.longitudinalPosition, situation::LongitudinalRelativePosition::InFront); - ASSERT_EQ(situationVector[0].relativePosition.lateralPosition, ::ad_rss::situation::LateralRelativePosition::Overlap); + ASSERT_EQ(situationVector[0].relativePosition.lateralPosition, situation::LateralRelativePosition::Overlap); ASSERT_EQ(situationVector[0].relativePosition.lateralDistance, Distance(0)); - - situation::Situation situation; - ASSERT_TRUE(extractSituation(worldModel.timeIndex, worldModel.egoVehicle, worldModel.scenes[0], situation)); - ASSERT_EQ(situation, situationVector[0]); } TEST_F(RssSituationExtractionIntersectionTests, longitudinalDifference) { - world::WorldModel worldModel; situation::SituationVector situationVector; - worldModel.egoVehicle = objectAsEgo(leadingObject); + scene.egoVehicle = objectAsEgo(leadingObject); scene.object = followingObject; - { - ::ad_rss::world::RoadSegment roadSegment; - ::ad_rss::world::LaneSegment laneSegment; + scene.egoVehicleRoad = longitudinalDifferenceRoadArea(); + scene.intersectingRoad = scene.egoVehicleRoad; - laneSegment.id = 1; - laneSegment.length.minimum = Distance(8); - laneSegment.length.maximum = Distance(10); + worldModel.scenes.push_back(scene); + worldModel.timeIndex = 1; - laneSegment.width.minimum = Distance(5); - laneSegment.width.maximum = Distance(5); - laneSegment.type = ::ad_rss::world::LaneSegmentType::Normal; + ASSERT_TRUE(situationExtraction.extractSituations(worldModel, situationVector)); + ASSERT_EQ(situationVector.size(), 1); - roadSegment.push_back(laneSegment); - scene.egoVehicleRoad.push_back(roadSegment); - scene.intersectingRoad.push_back(roadSegment); - } + ASSERT_EQ(situationVector[0].egoVehicleState.velocity.speedLon, Speed(10.)); + ASSERT_EQ(situationVector[0].egoVehicleState.dynamics.alphaLon.accelMax, + worldModel.egoVehicleRssDynamics.alphaLon.accelMax); - { - ::ad_rss::world::RoadSegment roadSegment; - ::ad_rss::world::LaneSegment laneSegment; + ASSERT_EQ(situationVector[0].egoVehicleState.distanceToEnterIntersection, Distance(0.)); + ASSERT_EQ(situationVector[0].egoVehicleState.distanceToLeaveIntersection, Distance(8.6)); + ASSERT_TRUE(situationVector[0].egoVehicleState.hasPriority); - laneSegment.id = 2; - laneSegment.length.minimum = Distance(4); - laneSegment.length.maximum = Distance(5); + ASSERT_EQ(situationVector[0].otherVehicleState.distanceToEnterIntersection, Distance(6.)); + ASSERT_EQ(situationVector[0].otherVehicleState.distanceToLeaveIntersection, Distance(14.2)); + ASSERT_FALSE(situationVector[0].otherVehicleState.hasPriority); - laneSegment.width.minimum = Distance(5); - laneSegment.width.maximum = Distance(5); - laneSegment.type = ::ad_rss::world::LaneSegmentType::Intersection; + ASSERT_EQ(situationVector[0].relativePosition.longitudinalPosition, situation::LongitudinalRelativePosition::InFront); - roadSegment.push_back(laneSegment); + ASSERT_EQ(situationVector[0].relativePosition.lateralPosition, situation::LateralRelativePosition::Overlap); + ASSERT_EQ(situationVector[0].relativePosition.lateralDistance, Distance(0)); +} - scene.egoVehicleRoad.push_back(roadSegment); - scene.intersectingRoad.push_back(roadSegment); - } +TEST_F(RssSituationExtractionIntersectionTests, mergeWorstCase) +{ + situation::SituationVector situationVector; + + scene.egoVehicle = objectAsEgo(leadingObject); + scene.object = followingObject; + + scene.egoVehicleRoad = longitudinalDifferenceRoadArea(); + scene.intersectingRoad = scene.egoVehicleRoad; + worldModel.scenes.push_back(scene); + + scene.egoVehicleRoad = longitudinalNoDifferenceRoadArea(); + scene.intersectingRoad = scene.egoVehicleRoad; + worldModel.scenes.push_back(scene); worldModel.scenes.push_back(scene); worldModel.timeIndex = 1; - ASSERT_TRUE(extractSituations(worldModel, situationVector)); + ASSERT_TRUE(situationExtraction.extractSituations(worldModel, situationVector)); ASSERT_EQ(situationVector.size(), 1); ASSERT_EQ(situationVector[0].egoVehicleState.velocity.speedLon, Speed(10.)); ASSERT_EQ(situationVector[0].egoVehicleState.dynamics.alphaLon.accelMax, - worldModel.egoVehicle.dynamics.alphaLon.accelMax); + worldModel.egoVehicleRssDynamics.alphaLon.accelMax); ASSERT_EQ(situationVector[0].egoVehicleState.distanceToEnterIntersection, Distance(0.)); ASSERT_EQ(situationVector[0].egoVehicleState.distanceToLeaveIntersection, Distance(8.6)); @@ -216,17 +263,11 @@ TEST_F(RssSituationExtractionIntersectionTests, longitudinalDifference) ASSERT_EQ(situationVector[0].otherVehicleState.distanceToLeaveIntersection, Distance(14.2)); ASSERT_FALSE(situationVector[0].otherVehicleState.hasPriority); - ASSERT_EQ(situationVector[0].relativePosition.longitudinalPosition, - ::ad_rss::situation::LongitudinalRelativePosition::InFront); + ASSERT_EQ(situationVector[0].relativePosition.longitudinalPosition, situation::LongitudinalRelativePosition::InFront); - ASSERT_EQ(situationVector[0].relativePosition.lateralPosition, ::ad_rss::situation::LateralRelativePosition::Overlap); + ASSERT_EQ(situationVector[0].relativePosition.lateralPosition, situation::LateralRelativePosition::Overlap); ASSERT_EQ(situationVector[0].relativePosition.lateralDistance, Distance(0)); - - situation::Situation situation; - ASSERT_TRUE(extractSituation(worldModel.timeIndex, worldModel.egoVehicle, worldModel.scenes[0], situation)); - ASSERT_EQ(situation, situationVector[0]); } -} // namespace RssSituationExtraction } // namespace core } // namespace ad_rss diff --git a/tests/core/RssSituationExtractionOppositeDirectionTests.cpp b/tests/core/RssSituationExtractionOppositeDirectionTests.cpp index d835830c7b..1f50b9f9e0 100644 --- a/tests/core/RssSituationExtractionOppositeDirectionTests.cpp +++ b/tests/core/RssSituationExtractionOppositeDirectionTests.cpp @@ -36,19 +36,19 @@ namespace ad_rss { namespace core { -namespace RssSituationExtraction { - class RssSituationExtractionOppositeDirectionTests : public testing::Test { protected: virtual void SetUp() { + worldModel.egoVehicleRssDynamics = getEgoRssDynamics(); leadingObject = createObject(36., 0.); leadingObject.objectId = 0; scene.situationType = ad_rss::situation::SituationType::OppositeDirection; + scene.objectRssDynamics = getObjectRssDynamics(); { - ::ad_rss::world::OccupiedRegion occupiedRegion; + world::OccupiedRegion occupiedRegion; occupiedRegion.lonRange.minimum = ParametricValue(0.8); occupiedRegion.lonRange.maximum = ParametricValue(1.0); occupiedRegion.segmentId = 1.; @@ -61,7 +61,7 @@ class RssSituationExtractionOppositeDirectionTests : public testing::Test followingObject = createObject(36., 0.); followingObject.objectId = 1; { - ::ad_rss::world::OccupiedRegion occupiedRegion; + world::OccupiedRegion occupiedRegion; occupiedRegion.lonRange.minimum = ParametricValue(0.1); occupiedRegion.lonRange.maximum = ParametricValue(0.2); occupiedRegion.segmentId = 1.; @@ -77,21 +77,22 @@ class RssSituationExtractionOppositeDirectionTests : public testing::Test leadingObject.occupiedRegions.clear(); scene.egoVehicleRoad.clear(); } - ::ad_rss::world::Object followingObject; - ::ad_rss::world::Object leadingObject; - ::ad_rss::world::Scene scene; + world::Object followingObject; + world::Object leadingObject; + world::WorldModel worldModel; + world::Scene scene; + RssSituationExtraction situationExtraction; }; TEST_F(RssSituationExtractionOppositeDirectionTests, noLongitudinalDifference) { - world::WorldModel worldModel; situation::SituationVector situationVector; - worldModel.egoVehicle = objectAsEgo(leadingObject); + scene.egoVehicle = objectAsEgo(leadingObject); scene.object = followingObject; - ::ad_rss::world::RoadSegment roadSegment; - ::ad_rss::world::LaneSegment laneSegment; + world::RoadSegment roadSegment; + world::LaneSegment laneSegment; laneSegment.id = 1; laneSegment.length.minimum = Distance(10); @@ -107,32 +108,27 @@ TEST_F(RssSituationExtractionOppositeDirectionTests, noLongitudinalDifference) worldModel.scenes.push_back(scene); worldModel.timeIndex = 1; - ASSERT_TRUE(extractSituations(worldModel, situationVector)); + ASSERT_TRUE(situationExtraction.extractSituations(worldModel, situationVector)); ASSERT_EQ(situationVector.size(), 1); ASSERT_EQ(situationVector[0].relativePosition.longitudinalDistance, Distance(6)); ASSERT_EQ(situationVector[0].egoVehicleState.velocity.speedLon, Speed(10)); ASSERT_EQ(situationVector[0].egoVehicleState.dynamics.alphaLon.accelMax, - worldModel.egoVehicle.dynamics.alphaLon.accelMax); + worldModel.egoVehicleRssDynamics.alphaLon.accelMax); - ASSERT_EQ(situationVector[0].relativePosition.lateralPosition, ::ad_rss::situation::LateralRelativePosition::AtLeft); + ASSERT_EQ(situationVector[0].relativePosition.lateralPosition, situation::LateralRelativePosition::AtLeft); ASSERT_EQ(situationVector[0].relativePosition.lateralDistance, Distance(1)); - - situation::Situation situation; - ASSERT_TRUE(extractSituation(worldModel.timeIndex, worldModel.egoVehicle, worldModel.scenes[0], situation)); - ASSERT_EQ(situation, situationVector[0]); } TEST_F(RssSituationExtractionOppositeDirectionTests, longitudinalDifference) { - world::WorldModel worldModel; situation::SituationVector situationVector; - worldModel.egoVehicle = objectAsEgo(followingObject); + scene.egoVehicle = objectAsEgo(followingObject); scene.object = leadingObject; - ::ad_rss::world::RoadSegment roadSegment; - ::ad_rss::world::LaneSegment laneSegment; + world::RoadSegment roadSegment; + world::LaneSegment laneSegment; laneSegment.id = 1; laneSegment.length.minimum = Distance(5); @@ -148,24 +144,19 @@ TEST_F(RssSituationExtractionOppositeDirectionTests, longitudinalDifference) worldModel.scenes.push_back(scene); worldModel.timeIndex = 1; - ASSERT_TRUE(extractSituations(worldModel, situationVector)); + ASSERT_TRUE(situationExtraction.extractSituations(worldModel, situationVector)); ASSERT_EQ(situationVector.size(), 1); ASSERT_EQ(situationVector[0].relativePosition.longitudinalDistance, Distance(2)); ASSERT_EQ(situationVector[0].egoVehicleState.velocity.speedLon, Speed(10)); ASSERT_EQ(situationVector[0].egoVehicleState.dynamics.alphaLon.accelMax, - worldModel.egoVehicle.dynamics.alphaLon.accelMax); + worldModel.egoVehicleRssDynamics.alphaLon.accelMax); ASSERT_EQ(situationVector[0].egoVehicleState.dynamics.alphaLon.brakeMin, - worldModel.egoVehicle.dynamics.alphaLon.brakeMin); + worldModel.egoVehicleRssDynamics.alphaLon.brakeMin); - ASSERT_EQ(situationVector[0].relativePosition.lateralPosition, ::ad_rss::situation::LateralRelativePosition::AtRight); + ASSERT_EQ(situationVector[0].relativePosition.lateralPosition, situation::LateralRelativePosition::AtRight); ASSERT_EQ(situationVector[0].relativePosition.lateralDistance, Distance(1)); - - situation::Situation situation; - ASSERT_TRUE(extractSituation(worldModel.timeIndex, worldModel.egoVehicle, worldModel.scenes[0], situation)); - ASSERT_EQ(situation, situationVector[0]); } -} // namespace RssSituationExtraction } // namespace core } // namespace ad_rss diff --git a/tests/core/RssSituationExtractionRelativePositionTests.cpp b/tests/core/RssSituationExtractionRelativePositionTests.cpp index 56a22e5d12..cac884d644 100644 --- a/tests/core/RssSituationExtractionRelativePositionTests.cpp +++ b/tests/core/RssSituationExtractionRelativePositionTests.cpp @@ -36,20 +36,8 @@ namespace ad_rss { namespace core { -namespace RssSituationExtraction { - using physics::MetricRange; -void calcluateRelativeLongitudinalPosition(MetricRange const &egoMetricRange, - MetricRange const &otherMetricRange, - situation::LongitudinalRelativePosition &longitudinalPosition, - Distance &longitudinalDistance); - -void calcluateRelativeLateralPosition(MetricRange const &egoMetricRange, - MetricRange const &otherMetricRange, - situation::LateralRelativePosition &lateralPosition, - Distance &lateralDistance); - void performCalculateRelativePositionTest(Distance minA, Distance maxA, Distance minB, @@ -60,6 +48,7 @@ void performCalculateRelativePositionTest(Distance minA, situation::LongitudinalRelativePosition expectedPositionLonBtoA, Distance expectedDistance) { + RssSituationExtraction situationExtraction; MetricRange vehicleALonMetricRange; MetricRange vehicleALatMetricRange; MetricRange vehicleBLonMetricRange; @@ -74,11 +63,11 @@ void performCalculateRelativePositionTest(Distance minA, vehicleBLatMetricRange.maximum = maxB; vehicleBLonMetricRange = vehicleBLatMetricRange; - calcluateRelativeLongitudinalPosition(vehicleALonMetricRange, - vehicleBLonMetricRange, - relativePosition.longitudinalPosition, - relativePosition.longitudinalDistance); - calcluateRelativeLateralPosition( + situationExtraction.calcluateRelativeLongitudinalPosition(vehicleALonMetricRange, + vehicleBLonMetricRange, + relativePosition.longitudinalPosition, + relativePosition.longitudinalDistance); + situationExtraction.calcluateRelativeLateralPosition( vehicleALatMetricRange, vehicleBLatMetricRange, relativePosition.lateralPosition, relativePosition.lateralDistance); ASSERT_EQ(expectedPositionLatAtoB, relativePosition.lateralPosition); @@ -86,11 +75,11 @@ void performCalculateRelativePositionTest(Distance minA, ASSERT_EQ(expectedDistance, relativePosition.lateralDistance); ASSERT_EQ(expectedDistance, relativePosition.longitudinalDistance); - calcluateRelativeLongitudinalPosition(vehicleBLonMetricRange, - vehicleALonMetricRange, - relativePosition.longitudinalPosition, - relativePosition.longitudinalDistance); - calcluateRelativeLateralPosition( + situationExtraction.calcluateRelativeLongitudinalPosition(vehicleBLonMetricRange, + vehicleALonMetricRange, + relativePosition.longitudinalPosition, + relativePosition.longitudinalDistance); + situationExtraction.calcluateRelativeLateralPosition( vehicleBLatMetricRange, vehicleALatMetricRange, relativePosition.lateralPosition, relativePosition.lateralDistance); ASSERT_EQ(expectedPositionLatBtoA, relativePosition.lateralPosition); @@ -229,6 +218,5 @@ TEST(CalcluateRelativePositionTest, full_overlap_mixed) Distance(0.)); } -} // namespace RssSituationExtraction } // namespace core } // namespace ad_rss diff --git a/tests/core/RssSituationExtractionSameDirectionTests.cpp b/tests/core/RssSituationExtractionSameDirectionTests.cpp index deb629c9b8..569006c59e 100644 --- a/tests/core/RssSituationExtractionSameDirectionTests.cpp +++ b/tests/core/RssSituationExtractionSameDirectionTests.cpp @@ -36,19 +36,19 @@ namespace ad_rss { namespace core { -namespace RssSituationExtraction { - class RssSituationExtractionSameDirectionTests : public testing::Test { protected: virtual void SetUp() { + worldModel.egoVehicleRssDynamics = getEgoRssDynamics(); scene.situationType = ad_rss::situation::SituationType::SameDirection; + scene.objectRssDynamics = getObjectRssDynamics(); leadingObject = createObject(36., 0.); leadingObject.objectId = 0; { - ::ad_rss::world::OccupiedRegion occupiedRegion; + world::OccupiedRegion occupiedRegion; occupiedRegion.lonRange.minimum = ParametricValue(0.8); occupiedRegion.lonRange.maximum = ParametricValue(1.0); occupiedRegion.segmentId = 1.; @@ -61,7 +61,7 @@ class RssSituationExtractionSameDirectionTests : public testing::Test followingObject = createObject(36., 0.); followingObject.objectId = 1; { - ::ad_rss::world::OccupiedRegion occupiedRegion; + world::OccupiedRegion occupiedRegion; occupiedRegion.lonRange.minimum = ParametricValue(0.1); occupiedRegion.lonRange.maximum = ParametricValue(0.2); occupiedRegion.segmentId = 1.; @@ -77,132 +77,233 @@ class RssSituationExtractionSameDirectionTests : public testing::Test leadingObject.occupiedRegions.clear(); scene.egoVehicleRoad.clear(); } - ::ad_rss::world::Object followingObject; - ::ad_rss::world::Object leadingObject; - ::ad_rss::world::Scene scene; + + world::RoadSegment longitudinalNoDifferenceRoadSegment() + { + world::RoadSegment roadSegment; + world::LaneSegment laneSegment; + + laneSegment.id = 1; + laneSegment.length.minimum = Distance(10); + laneSegment.length.maximum = Distance(10); + + laneSegment.width.minimum = Distance(5); + laneSegment.width.maximum = Distance(5); + + roadSegment.push_back(laneSegment); + return roadSegment; + } + + world::RoadSegment longitudinalDifferenceRoadSegment() + { + world::RoadSegment roadSegment; + world::LaneSegment laneSegment; + + laneSegment.id = 1; + laneSegment.length.minimum = Distance(5); + laneSegment.length.maximum = Distance(10); + + laneSegment.width.minimum = Distance(5); + laneSegment.width.maximum = Distance(5); + roadSegment.push_back(laneSegment); + return roadSegment; + } + + world::Object followingObject; + world::Object leadingObject; + world::WorldModel worldModel; + world::Scene scene; + RssSituationExtraction situationExtraction; }; TEST_F(RssSituationExtractionSameDirectionTests, noLongitudinalDifference) { - world::WorldModel worldModel; situation::SituationVector situationVector; - worldModel.egoVehicle = objectAsEgo(leadingObject); + scene.egoVehicle = objectAsEgo(leadingObject); scene.object = followingObject; - ::ad_rss::world::RoadSegment roadSegment; - ::ad_rss::world::LaneSegment laneSegment; - - laneSegment.id = 1; - laneSegment.length.minimum = Distance(10); - laneSegment.length.maximum = Distance(10); - - laneSegment.width.minimum = Distance(5); - laneSegment.width.maximum = Distance(5); - - roadSegment.push_back(laneSegment); - - scene.egoVehicleRoad.push_back(roadSegment); + scene.egoVehicleRoad.push_back(longitudinalNoDifferenceRoadSegment()); worldModel.scenes.push_back(scene); worldModel.timeIndex = 1; - ASSERT_TRUE(extractSituations(worldModel, situationVector)); + ASSERT_TRUE(situationExtraction.extractSituations(worldModel, situationVector)); ASSERT_EQ(situationVector.size(), 1); ASSERT_EQ(situationVector[0].relativePosition.longitudinalDistance, Distance(6)); ASSERT_EQ(situationVector[0].egoVehicleState.velocity.speedLon, Speed(10)); ASSERT_EQ(situationVector[0].egoVehicleState.dynamics.alphaLon.accelMax, - worldModel.egoVehicle.dynamics.alphaLon.accelMax); + worldModel.egoVehicleRssDynamics.alphaLon.accelMax); - ASSERT_EQ(situationVector[0].relativePosition.lateralPosition, ::ad_rss::situation::LateralRelativePosition::AtLeft); + ASSERT_EQ(situationVector[0].relativePosition.lateralPosition, situation::LateralRelativePosition::AtLeft); ASSERT_EQ(situationVector[0].relativePosition.lateralDistance, Distance(1)); - - situation::Situation situation; - ASSERT_TRUE(extractSituation(worldModel.timeIndex, worldModel.egoVehicle, worldModel.scenes[0], situation)); - ASSERT_EQ(situation, situationVector[0]); } TEST_F(RssSituationExtractionSameDirectionTests, longitudinalDifferenceEgoLeading) { - world::WorldModel worldModel; situation::SituationVector situationVector; - worldModel.egoVehicle = objectAsEgo(leadingObject); + scene.egoVehicle = objectAsEgo(leadingObject); scene.object = followingObject; scene.object.objectType = world::ObjectType::ArtificialObject; - - ::ad_rss::world::RoadSegment roadSegment; - ::ad_rss::world::LaneSegment laneSegment; - - laneSegment.id = 1; - laneSegment.length.minimum = Distance(5); - laneSegment.length.maximum = Distance(10); - - laneSegment.width.minimum = Distance(5); - laneSegment.width.maximum = Distance(5); - - roadSegment.push_back(laneSegment); - - scene.egoVehicleRoad.push_back(roadSegment); + scene.egoVehicleRoad.push_back(longitudinalDifferenceRoadSegment()); worldModel.scenes.push_back(scene); worldModel.timeIndex = 1; - ASSERT_TRUE(extractSituations(worldModel, situationVector)); + ASSERT_TRUE(situationExtraction.extractSituations(worldModel, situationVector)); ASSERT_EQ(situationVector.size(), 1); ASSERT_EQ(situationVector[0].relativePosition.longitudinalDistance, Distance(2)); ASSERT_EQ(situationVector[0].egoVehicleState.velocity.speedLon, Speed(10)); ASSERT_EQ(situationVector[0].egoVehicleState.dynamics.alphaLon.accelMax, - worldModel.egoVehicle.dynamics.alphaLon.accelMax); + worldModel.egoVehicleRssDynamics.alphaLon.accelMax); - ASSERT_EQ(situationVector[0].relativePosition.lateralPosition, ::ad_rss::situation::LateralRelativePosition::AtLeft); + ASSERT_EQ(situationVector[0].relativePosition.lateralPosition, situation::LateralRelativePosition::AtLeft); ASSERT_EQ(situationVector[0].relativePosition.lateralDistance, Distance(1)); - - situation::Situation situation; - ASSERT_TRUE(extractSituation(worldModel.timeIndex, worldModel.egoVehicle, worldModel.scenes[0], situation)); - ASSERT_EQ(situation, situationVector[0]); } TEST_F(RssSituationExtractionSameDirectionTests, longitudinalDifferenceEgoFollowing) { - world::WorldModel worldModel; situation::SituationVector situationVector; - worldModel.egoVehicle = objectAsEgo(followingObject); + scene.egoVehicle = objectAsEgo(followingObject); scene.object = leadingObject; + scene.egoVehicleRoad.push_back(longitudinalDifferenceRoadSegment()); + worldModel.scenes.push_back(scene); + worldModel.timeIndex = 1; - ::ad_rss::world::RoadSegment roadSegment; - ::ad_rss::world::LaneSegment laneSegment; + ASSERT_TRUE(situationExtraction.extractSituations(worldModel, situationVector)); + ASSERT_EQ(situationVector.size(), 1); - laneSegment.id = 1; - laneSegment.length.minimum = Distance(5); - laneSegment.length.maximum = Distance(10); + ASSERT_EQ(situationVector[0].relativePosition.longitudinalDistance, Distance(2)); + ASSERT_EQ(situationVector[0].egoVehicleState.velocity.speedLon, Speed(10)); + ASSERT_EQ(situationVector[0].egoVehicleState.dynamics.alphaLon.accelMax, scene.objectRssDynamics.alphaLon.accelMax); + ASSERT_EQ(situationVector[0].egoVehicleState.dynamics.alphaLon.brakeMin, scene.objectRssDynamics.alphaLon.brakeMin); - laneSegment.width.minimum = Distance(5); - laneSegment.width.maximum = Distance(5); + ASSERT_EQ(situationVector[0].relativePosition.lateralPosition, situation::LateralRelativePosition::AtRight); + ASSERT_EQ(situationVector[0].relativePosition.lateralDistance, Distance(1)); +} + +TEST_F(RssSituationExtractionSameDirectionTests, mergeWorstCase) +{ + situation::SituationVector situationVector; - roadSegment.push_back(laneSegment); + scene.egoVehicle = objectAsEgo(followingObject); + scene.object = leadingObject; - scene.egoVehicleRoad.push_back(roadSegment); + scene.egoVehicleRoad.push_back(longitudinalDifferenceRoadSegment()); + worldModel.scenes.push_back(scene); + scene.egoVehicleRoad.clear(); + scene.egoVehicleRoad.push_back(longitudinalNoDifferenceRoadSegment()); worldModel.scenes.push_back(scene); worldModel.timeIndex = 1; - ASSERT_TRUE(extractSituations(worldModel, situationVector)); + ASSERT_TRUE(situationExtraction.extractSituations(worldModel, situationVector)); ASSERT_EQ(situationVector.size(), 1); ASSERT_EQ(situationVector[0].relativePosition.longitudinalDistance, Distance(2)); ASSERT_EQ(situationVector[0].egoVehicleState.velocity.speedLon, Speed(10)); - ASSERT_EQ(situationVector[0].egoVehicleState.dynamics.alphaLon.accelMax, leadingObject.dynamics.alphaLon.accelMax); - ASSERT_EQ(situationVector[0].egoVehicleState.dynamics.alphaLon.brakeMin, leadingObject.dynamics.alphaLon.brakeMin); + ASSERT_EQ(situationVector[0].egoVehicleState.dynamics.alphaLon.accelMax, scene.objectRssDynamics.alphaLon.accelMax); + ASSERT_EQ(situationVector[0].egoVehicleState.dynamics.alphaLon.brakeMin, scene.objectRssDynamics.alphaLon.brakeMin); - ASSERT_EQ(situationVector[0].relativePosition.lateralPosition, ::ad_rss::situation::LateralRelativePosition::AtRight); + ASSERT_EQ(situationVector[0].relativePosition.lateralPosition, situation::LateralRelativePosition::AtRight); ASSERT_EQ(situationVector[0].relativePosition.lateralDistance, Distance(1)); +} + +TEST_F(RssSituationExtractionSameDirectionTests, mergeFails) +{ + situation::SituationVector situationVector; - situation::Situation situation; - ASSERT_TRUE(extractSituation(worldModel.timeIndex, worldModel.egoVehicle, worldModel.scenes[0], situation)); - ASSERT_EQ(situation, situationVector[0]); + scene.egoVehicle = objectAsEgo(followingObject); + scene.object = leadingObject; + + scene.egoVehicleRoad.push_back(longitudinalDifferenceRoadSegment()); + worldModel.scenes.push_back(scene); + scene.egoVehicleRoad.clear(); + scene.egoVehicleRoad.push_back(longitudinalNoDifferenceRoadSegment()); + worldModel.scenes.push_back(scene); + worldModel.timeIndex = 1; + + // validate setup + ASSERT_TRUE(situationExtraction.extractSituations(worldModel, situationVector)); + ASSERT_EQ(situationVector.size(), 1); + + // adapt velocities + auto originalObject = worldModel.scenes[0].egoVehicle; + + worldModel.scenes[0].egoVehicle.velocity.speedLat = Speed(2.2); + ASSERT_FALSE(situationExtraction.extractSituations(worldModel, situationVector)); + worldModel.scenes[0].egoVehicle = originalObject; + + worldModel.scenes[0].egoVehicle.velocity.speedLon = Speed(2.2); + ASSERT_FALSE(situationExtraction.extractSituations(worldModel, situationVector)); + worldModel.scenes[0].egoVehicle = originalObject; + + originalObject = worldModel.scenes[0].object; + worldModel.scenes[0].object.velocity.speedLat = Speed(2.2); + ASSERT_FALSE(situationExtraction.extractSituations(worldModel, situationVector)); + worldModel.scenes[0].object = originalObject; + + worldModel.scenes[0].object.velocity.speedLon = Speed(2.2); + ASSERT_FALSE(situationExtraction.extractSituations(worldModel, situationVector)); + worldModel.scenes[0].object = originalObject; + + // adapt dynamics + auto originalRssDynamics = worldModel.scenes[0].objectRssDynamics; + worldModel.scenes[0].objectRssDynamics.alphaLat.accelMax = Acceleration(3.33); + ASSERT_FALSE(situationExtraction.extractSituations(worldModel, situationVector)); + worldModel.scenes[0].objectRssDynamics = originalRssDynamics; + + worldModel.scenes[0].objectRssDynamics.alphaLat.brakeMin = Acceleration(3.33); + ASSERT_FALSE(situationExtraction.extractSituations(worldModel, situationVector)); + worldModel.scenes[0].objectRssDynamics = originalRssDynamics; + + worldModel.scenes[0].objectRssDynamics.alphaLon.accelMax = Acceleration(3.33); + ASSERT_FALSE(situationExtraction.extractSituations(worldModel, situationVector)); + worldModel.scenes[0].objectRssDynamics = originalRssDynamics; + + worldModel.scenes[0].objectRssDynamics.alphaLon.brakeMax + = worldModel.scenes[0].objectRssDynamics.alphaLon.brakeMax + Acceleration(1.); + ASSERT_FALSE(situationExtraction.extractSituations(worldModel, situationVector)); + worldModel.scenes[0].objectRssDynamics = originalRssDynamics; + + worldModel.scenes[0].objectRssDynamics.alphaLon.brakeMin + = worldModel.scenes[0].objectRssDynamics.alphaLon.brakeMin - Acceleration(1.); + ASSERT_FALSE(situationExtraction.extractSituations(worldModel, situationVector)); + worldModel.scenes[0].objectRssDynamics = originalRssDynamics; + + worldModel.scenes[0].objectRssDynamics.alphaLon.brakeMinCorrect + = worldModel.scenes[0].objectRssDynamics.alphaLon.brakeMinCorrect + Acceleration(.5); + ASSERT_FALSE(situationExtraction.extractSituations(worldModel, situationVector)); + worldModel.scenes[0].objectRssDynamics = originalRssDynamics; + + worldModel.scenes[0].objectRssDynamics.lateralFluctuationMargin = Distance(1.); + ASSERT_FALSE(situationExtraction.extractSituations(worldModel, situationVector)); + worldModel.scenes[0].objectRssDynamics = originalRssDynamics; + + worldModel.scenes[0].objectRssDynamics.responseTime = Duration(5.); + ASSERT_FALSE(situationExtraction.extractSituations(worldModel, situationVector)); + worldModel.scenes[0].objectRssDynamics = originalRssDynamics; + + // adapt lane correctness + worldModel.scenes[0].egoVehicleRoad.front().front().drivingDirection = world::LaneDrivingDirection::Negative; + ASSERT_FALSE(situationExtraction.extractSituations(worldModel, situationVector)); + worldModel.scenes[0].egoVehicleRoad.front().front().drivingDirection = world::LaneDrivingDirection::Positive; + + // influence relative position + auto const originalOccupiedRegion = worldModel.scenes[0].egoVehicle.occupiedRegions; + worldModel.scenes[0].egoVehicle.occupiedRegions.front().latRange.minimum = ParametricValue(0.); + ASSERT_FALSE(situationExtraction.extractSituations(worldModel, situationVector)); + worldModel.scenes[0].egoVehicle.occupiedRegions = originalOccupiedRegion; + + worldModel.scenes[0].egoVehicle.occupiedRegions.front().lonRange.maximum = ParametricValue(0.5); + ASSERT_FALSE(situationExtraction.extractSituations(worldModel, situationVector)); + worldModel.scenes[0].egoVehicle.occupiedRegions = originalOccupiedRegion; + + // validate resetting of error setup in the above test code + ASSERT_TRUE(situationExtraction.extractSituations(worldModel, situationVector)); + ASSERT_EQ(situationVector.size(), 1); } -} // namespace RssSituationExtraction } // namespace core } // namespace ad_rss diff --git a/tests/core/RssSituationIdProviderTests.cpp b/tests/core/RssSituationIdProviderTests.cpp new file mode 100644 index 0000000000..0e5bbc1c31 --- /dev/null +++ b/tests/core/RssSituationIdProviderTests.cpp @@ -0,0 +1,167 @@ +// ----------------- BEGIN LICENSE BLOCK --------------------------------- +// +// Copyright (c) 2019 Intel Corporation +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors +// may be used to endorse or promote products derived from this software without +// specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// +// ----------------- END LICENSE BLOCK ----------------------------------- + +#include "RssCheckTestBaseT.hpp" +#include "world/RssSituationIdProvider.hpp" + +namespace ad_rss { +namespace world { + +class RssSituationIdProviderTests : public core::RssCheckTestBaseT +{ +public: + ::ad_rss::world::Object &getEgoObject() override + { + return objectOnSegment0; + } + + ::ad_rss::world::Object &getSceneObject(uint32_t) override + { + return objectOnSegment8; + } + + situation::SituationType getSituationType() override + { + return situation::SituationType::IntersectionEgoHasPriority; + } + + RssSituationIdProvider situationIdProvider; +}; + +TEST_F(RssSituationIdProviderTests, same_scene_result_in_same_situations) +{ + auto const firstSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + auto secondSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + EXPECT_EQ(firstSituationId, secondSituationId); + + worldModel.timeIndex++; + secondSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + EXPECT_EQ(firstSituationId, secondSituationId); +} + +TEST_F(RssSituationIdProviderTests, different_objectids_result_in_different_situations) +{ + auto const firstSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + worldModel.scenes[0].object.objectId = 49; + auto const secondSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + EXPECT_NE(firstSituationId, secondSituationId); +} + +TEST_F(RssSituationIdProviderTests, different_situation_types_result_in_different_situations) +{ + auto const firstSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + worldModel.scenes[0].situationType = situation::SituationType::IntersectionObjectHasPriority; + auto const secondSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + EXPECT_NE(firstSituationId, secondSituationId); +} + +TEST_F(RssSituationIdProviderTests, different_ego_intersection_route_id_result_in_different_situations) +{ + auto const firstSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + + worldModel.scenes[0].egoVehicleRoad.back().back().id = 88; + auto secondSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + EXPECT_NE(firstSituationId, secondSituationId); +} + +TEST_F(RssSituationIdProviderTests, different_object_intersection_route_id_result_in_different_situations) +{ + auto const firstSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + + worldModel.scenes[0].intersectingRoad.back().back().id = 99; + auto secondSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + EXPECT_NE(firstSituationId, secondSituationId); +} + +TEST_F(RssSituationIdProviderTests, different_ego_intersection_route_size_result_in_different_situations) +{ + auto const firstSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + + worldModel.scenes[0].egoVehicleRoad.back().push_back(worldModel.scenes[0].egoVehicleRoad.back().back()); + worldModel.scenes[0].egoVehicleRoad.back().back().id = 88; + auto secondSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + EXPECT_NE(firstSituationId, secondSituationId); +} + +TEST_F(RssSituationIdProviderTests, different_object_intersection_route_size_result_in_different_situations) +{ + auto const firstSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + + worldModel.scenes[0].intersectingRoad.back().push_back(worldModel.scenes[0].intersectingRoad.back().back()); + worldModel.scenes[0].intersectingRoad.back().back().id = 99; + auto secondSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + EXPECT_NE(firstSituationId, secondSituationId); +} + +TEST_F(RssSituationIdProviderTests, different_ego_non_intersection_route_size_result_in_same_situations) +{ + auto const firstSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + + worldModel.scenes[0].egoVehicleRoad.erase(worldModel.scenes[0].egoVehicleRoad.begin()); + auto secondSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + EXPECT_EQ(firstSituationId, secondSituationId); +} + +TEST_F(RssSituationIdProviderTests, different_object_non_intersection_route_size_result_in_same_situations) +{ + auto const firstSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + + worldModel.scenes[0].intersectingRoad.erase(worldModel.scenes[0].intersectingRoad.begin()); + auto secondSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + EXPECT_EQ(firstSituationId, secondSituationId); +} + +TEST_F(RssSituationIdProviderTests, history_is_cleaned) +{ + auto const originalObjectId = worldModel.scenes[0].object.objectId; + auto const firstSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + + worldModel.scenes[0].object.objectId = 49; + auto const secondSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + EXPECT_NE(firstSituationId, secondSituationId); + + worldModel.timeIndex++; + auto thirdSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + EXPECT_EQ(secondSituationId, thirdSituationId); + + worldModel.timeIndex++; + // 49 still tracked + thirdSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + EXPECT_EQ(secondSituationId, thirdSituationId); + + // original already forgotten + worldModel.scenes[0].object.objectId = originalObjectId; + auto fourthSituationId = situationIdProvider.getSituationId(worldModel.timeIndex, worldModel.scenes[0]); + EXPECT_NE(firstSituationId, fourthSituationId); +} + +} // namespace world +} // namespace ad_rss diff --git a/tests/generated/CMakeLists.txt b/tests/generated/CMakeLists.txt index 0ea3bacdd2..9a2cb438d6 100644 --- a/tests/generated/CMakeLists.txt +++ b/tests/generated/CMakeLists.txt @@ -89,8 +89,6 @@ set(GENERATED_TEST_SOURCES generated/world/LaneSegmentValidInputRangeTests.cpp generated/world/ObjectTypeValidInputRangeTests.cpp generated/world/ObjectTypeTests.cpp - generated/world/DynamicsValidInputRangeTests.cpp - generated/world/DynamicsTests.cpp generated/world/AccelerationRestrictionValidInputRangeTests.cpp generated/world/AccelerationRestrictionTests.cpp generated/world/SceneVectorValidInputRangeTests.cpp @@ -109,6 +107,8 @@ set(GENERATED_TEST_SOURCES generated/world/VelocityValidInputRangeTests.cpp generated/world/OccupiedRegionTests.cpp generated/world/OccupiedRegionValidInputRangeTests.cpp + generated/world/RssDynamicsValidInputRangeTests.cpp + generated/world/RssDynamicsTests.cpp generated/world/RoadSegmentValidInputRangeTests.cpp generated/world/SceneTests.cpp generated/world/SceneValidInputRangeTests.cpp diff --git a/tests/generated/situation/SituationTests.cpp b/tests/generated/situation/SituationTests.cpp index 3707aa34f1..739eb80aa2 100644 --- a/tests/generated/situation/SituationTests.cpp +++ b/tests/generated/situation/SituationTests.cpp @@ -62,7 +62,7 @@ class SituationTests : public testing::Test valueEgoVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueEgoVehicleStateVelocity.speedLat = valueEgoVehicleStateVelocitySpeedLat; valueEgoVehicleState.velocity = valueEgoVehicleStateVelocity; - ::ad_rss::world::Dynamics valueEgoVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueEgoVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueEgoVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueEgoVehicleStateDynamicsAlphaLonAccelMax @@ -93,11 +93,11 @@ class SituationTests : public testing::Test valueEgoVehicleStateDynamics.alphaLat = valueEgoVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueEgoVehicleStateDynamicsLateralFluctuationMargin(0.); valueEgoVehicleStateDynamics.lateralFluctuationMargin = valueEgoVehicleStateDynamicsLateralFluctuationMargin; - valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; - ::ad_rss::physics::Duration valueEgoVehicleStateResponseTime(0.); - valueEgoVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueEgoVehicleStateDynamicsResponseTime(0.); + valueEgoVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleState.responseTime = valueEgoVehicleStateResponseTime; + valueEgoVehicleStateDynamics.responseTime = valueEgoVehicleStateDynamicsResponseTime; + valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; bool valueEgoVehicleStateHasPriority{true}; valueEgoVehicleState.hasPriority = valueEgoVehicleStateHasPriority; bool valueEgoVehicleStateIsInCorrectLane{true}; @@ -118,7 +118,7 @@ class SituationTests : public testing::Test valueOtherVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueOtherVehicleStateVelocity.speedLat = valueOtherVehicleStateVelocitySpeedLat; valueOtherVehicleState.velocity = valueOtherVehicleStateVelocity; - ::ad_rss::world::Dynamics valueOtherVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueOtherVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueOtherVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueOtherVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueOtherVehicleStateDynamicsAlphaLonAccelMax @@ -149,11 +149,11 @@ class SituationTests : public testing::Test valueOtherVehicleStateDynamics.alphaLat = valueOtherVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueOtherVehicleStateDynamicsLateralFluctuationMargin(0.); valueOtherVehicleStateDynamics.lateralFluctuationMargin = valueOtherVehicleStateDynamicsLateralFluctuationMargin; - valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; - ::ad_rss::physics::Duration valueOtherVehicleStateResponseTime(0.); - valueOtherVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueOtherVehicleStateDynamicsResponseTime(0.); + valueOtherVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueOtherVehicleState.responseTime = valueOtherVehicleStateResponseTime; + valueOtherVehicleStateDynamics.responseTime = valueOtherVehicleStateDynamicsResponseTime; + valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; bool valueOtherVehicleStateHasPriority{true}; valueOtherVehicleState.hasPriority = valueOtherVehicleStateHasPriority; bool valueOtherVehicleStateIsInCorrectLane{true}; @@ -262,7 +262,7 @@ TEST_F(SituationTests, comparisonOperatorEgoVehicleStateDiffers) egoVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(10.); // set to valid value within struct egoVehicleStateVelocity.speedLat = egoVehicleStateVelocitySpeedLat; egoVehicleState.velocity = egoVehicleStateVelocity; - ::ad_rss::world::Dynamics egoVehicleStateDynamics; + ::ad_rss::world::RssDynamics egoVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues egoVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration egoVehicleStateDynamicsAlphaLonAccelMax(1e2); egoVehicleStateDynamicsAlphaLon.accelMax = egoVehicleStateDynamicsAlphaLonAccelMax; @@ -286,10 +286,10 @@ TEST_F(SituationTests, comparisonOperatorEgoVehicleStateDiffers) ::ad_rss::physics::Distance egoVehicleStateDynamicsLateralFluctuationMargin(1e6); egoVehicleStateDynamicsLateralFluctuationMargin = ::ad_rss::physics::Distance(1.); // set to valid value within struct egoVehicleStateDynamics.lateralFluctuationMargin = egoVehicleStateDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration egoVehicleStateDynamicsResponseTime(100.); + egoVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration(10.); // set to valid value within struct + egoVehicleStateDynamics.responseTime = egoVehicleStateDynamicsResponseTime; egoVehicleState.dynamics = egoVehicleStateDynamics; - ::ad_rss::physics::Duration egoVehicleStateResponseTime(100.); - egoVehicleStateResponseTime = ::ad_rss::physics::Duration(10.); // set to valid value within struct - egoVehicleState.responseTime = egoVehicleStateResponseTime; bool egoVehicleStateHasPriority{false}; egoVehicleState.hasPriority = egoVehicleStateHasPriority; bool egoVehicleStateIsInCorrectLane{false}; @@ -319,7 +319,7 @@ TEST_F(SituationTests, comparisonOperatorOtherVehicleStateDiffers) otherVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(10.); // set to valid value within struct otherVehicleStateVelocity.speedLat = otherVehicleStateVelocitySpeedLat; otherVehicleState.velocity = otherVehicleStateVelocity; - ::ad_rss::world::Dynamics otherVehicleStateDynamics; + ::ad_rss::world::RssDynamics otherVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues otherVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration otherVehicleStateDynamicsAlphaLonAccelMax(1e2); otherVehicleStateDynamicsAlphaLon.accelMax = otherVehicleStateDynamicsAlphaLonAccelMax; @@ -344,10 +344,10 @@ TEST_F(SituationTests, comparisonOperatorOtherVehicleStateDiffers) otherVehicleStateDynamicsLateralFluctuationMargin = ::ad_rss::physics::Distance(1.); // set to valid value within struct otherVehicleStateDynamics.lateralFluctuationMargin = otherVehicleStateDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration otherVehicleStateDynamicsResponseTime(100.); + otherVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration(10.); // set to valid value within struct + otherVehicleStateDynamics.responseTime = otherVehicleStateDynamicsResponseTime; otherVehicleState.dynamics = otherVehicleStateDynamics; - ::ad_rss::physics::Duration otherVehicleStateResponseTime(100.); - otherVehicleStateResponseTime = ::ad_rss::physics::Duration(10.); // set to valid value within struct - otherVehicleState.responseTime = otherVehicleStateResponseTime; bool otherVehicleStateHasPriority{false}; otherVehicleState.hasPriority = otherVehicleStateHasPriority; bool otherVehicleStateIsInCorrectLane{false}; diff --git a/tests/generated/situation/SituationValidInputRangeTests.cpp b/tests/generated/situation/SituationValidInputRangeTests.cpp index 40ce08196a..a47dcb37dc 100644 --- a/tests/generated/situation/SituationValidInputRangeTests.cpp +++ b/tests/generated/situation/SituationValidInputRangeTests.cpp @@ -60,7 +60,7 @@ TEST(SituationValidInputRangeTests, testValidInputRange) valueEgoVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueEgoVehicleStateVelocity.speedLat = valueEgoVehicleStateVelocitySpeedLat; valueEgoVehicleState.velocity = valueEgoVehicleStateVelocity; - ::ad_rss::world::Dynamics valueEgoVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueEgoVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueEgoVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueEgoVehicleStateDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within @@ -91,11 +91,11 @@ TEST(SituationValidInputRangeTests, testValidInputRange) valueEgoVehicleStateDynamics.alphaLat = valueEgoVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueEgoVehicleStateDynamicsLateralFluctuationMargin(0.); valueEgoVehicleStateDynamics.lateralFluctuationMargin = valueEgoVehicleStateDynamicsLateralFluctuationMargin; - valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; - ::ad_rss::physics::Duration valueEgoVehicleStateResponseTime(0.); - valueEgoVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueEgoVehicleStateDynamicsResponseTime(0.); + valueEgoVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleState.responseTime = valueEgoVehicleStateResponseTime; + valueEgoVehicleStateDynamics.responseTime = valueEgoVehicleStateDynamicsResponseTime; + valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; bool valueEgoVehicleStateHasPriority{true}; valueEgoVehicleState.hasPriority = valueEgoVehicleStateHasPriority; bool valueEgoVehicleStateIsInCorrectLane{true}; @@ -116,7 +116,7 @@ TEST(SituationValidInputRangeTests, testValidInputRange) valueOtherVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueOtherVehicleStateVelocity.speedLat = valueOtherVehicleStateVelocitySpeedLat; valueOtherVehicleState.velocity = valueOtherVehicleStateVelocity; - ::ad_rss::world::Dynamics valueOtherVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueOtherVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueOtherVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueOtherVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueOtherVehicleStateDynamicsAlphaLonAccelMax @@ -147,11 +147,11 @@ TEST(SituationValidInputRangeTests, testValidInputRange) valueOtherVehicleStateDynamics.alphaLat = valueOtherVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueOtherVehicleStateDynamicsLateralFluctuationMargin(0.); valueOtherVehicleStateDynamics.lateralFluctuationMargin = valueOtherVehicleStateDynamicsLateralFluctuationMargin; - valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; - ::ad_rss::physics::Duration valueOtherVehicleStateResponseTime(0.); - valueOtherVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueOtherVehicleStateDynamicsResponseTime(0.); + valueOtherVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueOtherVehicleState.responseTime = valueOtherVehicleStateResponseTime; + valueOtherVehicleStateDynamics.responseTime = valueOtherVehicleStateDynamicsResponseTime; + valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; bool valueOtherVehicleStateHasPriority{true}; valueOtherVehicleState.hasPriority = valueOtherVehicleStateHasPriority; bool valueOtherVehicleStateIsInCorrectLane{true}; @@ -197,7 +197,7 @@ TEST(SituationValidInputRangeTests, testValidInputRangeSituationTypeTooSmall) valueEgoVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueEgoVehicleStateVelocity.speedLat = valueEgoVehicleStateVelocitySpeedLat; valueEgoVehicleState.velocity = valueEgoVehicleStateVelocity; - ::ad_rss::world::Dynamics valueEgoVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueEgoVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueEgoVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueEgoVehicleStateDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within @@ -228,11 +228,11 @@ TEST(SituationValidInputRangeTests, testValidInputRangeSituationTypeTooSmall) valueEgoVehicleStateDynamics.alphaLat = valueEgoVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueEgoVehicleStateDynamicsLateralFluctuationMargin(0.); valueEgoVehicleStateDynamics.lateralFluctuationMargin = valueEgoVehicleStateDynamicsLateralFluctuationMargin; - valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; - ::ad_rss::physics::Duration valueEgoVehicleStateResponseTime(0.); - valueEgoVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueEgoVehicleStateDynamicsResponseTime(0.); + valueEgoVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleState.responseTime = valueEgoVehicleStateResponseTime; + valueEgoVehicleStateDynamics.responseTime = valueEgoVehicleStateDynamicsResponseTime; + valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; bool valueEgoVehicleStateHasPriority{true}; valueEgoVehicleState.hasPriority = valueEgoVehicleStateHasPriority; bool valueEgoVehicleStateIsInCorrectLane{true}; @@ -253,7 +253,7 @@ TEST(SituationValidInputRangeTests, testValidInputRangeSituationTypeTooSmall) valueOtherVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueOtherVehicleStateVelocity.speedLat = valueOtherVehicleStateVelocitySpeedLat; valueOtherVehicleState.velocity = valueOtherVehicleStateVelocity; - ::ad_rss::world::Dynamics valueOtherVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueOtherVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueOtherVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueOtherVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueOtherVehicleStateDynamicsAlphaLonAccelMax @@ -284,11 +284,11 @@ TEST(SituationValidInputRangeTests, testValidInputRangeSituationTypeTooSmall) valueOtherVehicleStateDynamics.alphaLat = valueOtherVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueOtherVehicleStateDynamicsLateralFluctuationMargin(0.); valueOtherVehicleStateDynamics.lateralFluctuationMargin = valueOtherVehicleStateDynamicsLateralFluctuationMargin; - valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; - ::ad_rss::physics::Duration valueOtherVehicleStateResponseTime(0.); - valueOtherVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueOtherVehicleStateDynamicsResponseTime(0.); + valueOtherVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueOtherVehicleState.responseTime = valueOtherVehicleStateResponseTime; + valueOtherVehicleStateDynamics.responseTime = valueOtherVehicleStateDynamicsResponseTime; + valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; bool valueOtherVehicleStateHasPriority{true}; valueOtherVehicleState.hasPriority = valueOtherVehicleStateHasPriority; bool valueOtherVehicleStateIsInCorrectLane{true}; @@ -338,7 +338,7 @@ TEST(SituationValidInputRangeTests, testValidInputRangeSituationTypeTooBig) valueEgoVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueEgoVehicleStateVelocity.speedLat = valueEgoVehicleStateVelocitySpeedLat; valueEgoVehicleState.velocity = valueEgoVehicleStateVelocity; - ::ad_rss::world::Dynamics valueEgoVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueEgoVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueEgoVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueEgoVehicleStateDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within @@ -369,11 +369,11 @@ TEST(SituationValidInputRangeTests, testValidInputRangeSituationTypeTooBig) valueEgoVehicleStateDynamics.alphaLat = valueEgoVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueEgoVehicleStateDynamicsLateralFluctuationMargin(0.); valueEgoVehicleStateDynamics.lateralFluctuationMargin = valueEgoVehicleStateDynamicsLateralFluctuationMargin; - valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; - ::ad_rss::physics::Duration valueEgoVehicleStateResponseTime(0.); - valueEgoVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueEgoVehicleStateDynamicsResponseTime(0.); + valueEgoVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleState.responseTime = valueEgoVehicleStateResponseTime; + valueEgoVehicleStateDynamics.responseTime = valueEgoVehicleStateDynamicsResponseTime; + valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; bool valueEgoVehicleStateHasPriority{true}; valueEgoVehicleState.hasPriority = valueEgoVehicleStateHasPriority; bool valueEgoVehicleStateIsInCorrectLane{true}; @@ -394,7 +394,7 @@ TEST(SituationValidInputRangeTests, testValidInputRangeSituationTypeTooBig) valueOtherVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueOtherVehicleStateVelocity.speedLat = valueOtherVehicleStateVelocitySpeedLat; valueOtherVehicleState.velocity = valueOtherVehicleStateVelocity; - ::ad_rss::world::Dynamics valueOtherVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueOtherVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueOtherVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueOtherVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueOtherVehicleStateDynamicsAlphaLonAccelMax @@ -425,11 +425,11 @@ TEST(SituationValidInputRangeTests, testValidInputRangeSituationTypeTooBig) valueOtherVehicleStateDynamics.alphaLat = valueOtherVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueOtherVehicleStateDynamicsLateralFluctuationMargin(0.); valueOtherVehicleStateDynamics.lateralFluctuationMargin = valueOtherVehicleStateDynamicsLateralFluctuationMargin; - valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; - ::ad_rss::physics::Duration valueOtherVehicleStateResponseTime(0.); - valueOtherVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueOtherVehicleStateDynamicsResponseTime(0.); + valueOtherVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueOtherVehicleState.responseTime = valueOtherVehicleStateResponseTime; + valueOtherVehicleStateDynamics.responseTime = valueOtherVehicleStateDynamicsResponseTime; + valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; bool valueOtherVehicleStateHasPriority{true}; valueOtherVehicleState.hasPriority = valueOtherVehicleStateHasPriority; bool valueOtherVehicleStateIsInCorrectLane{true}; @@ -479,7 +479,7 @@ TEST(SituationValidInputRangeTests, testValidInputRangeEgoVehicleStateTooSmall) valueEgoVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueEgoVehicleStateVelocity.speedLat = valueEgoVehicleStateVelocitySpeedLat; valueEgoVehicleState.velocity = valueEgoVehicleStateVelocity; - ::ad_rss::world::Dynamics valueEgoVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueEgoVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueEgoVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueEgoVehicleStateDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within @@ -510,11 +510,11 @@ TEST(SituationValidInputRangeTests, testValidInputRangeEgoVehicleStateTooSmall) valueEgoVehicleStateDynamics.alphaLat = valueEgoVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueEgoVehicleStateDynamicsLateralFluctuationMargin(0.); valueEgoVehicleStateDynamics.lateralFluctuationMargin = valueEgoVehicleStateDynamicsLateralFluctuationMargin; - valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; - ::ad_rss::physics::Duration valueEgoVehicleStateResponseTime(0.); - valueEgoVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueEgoVehicleStateDynamicsResponseTime(0.); + valueEgoVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleState.responseTime = valueEgoVehicleStateResponseTime; + valueEgoVehicleStateDynamics.responseTime = valueEgoVehicleStateDynamicsResponseTime; + valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; bool valueEgoVehicleStateHasPriority{true}; valueEgoVehicleState.hasPriority = valueEgoVehicleStateHasPriority; bool valueEgoVehicleStateIsInCorrectLane{true}; @@ -535,7 +535,7 @@ TEST(SituationValidInputRangeTests, testValidInputRangeEgoVehicleStateTooSmall) valueOtherVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueOtherVehicleStateVelocity.speedLat = valueOtherVehicleStateVelocitySpeedLat; valueOtherVehicleState.velocity = valueOtherVehicleStateVelocity; - ::ad_rss::world::Dynamics valueOtherVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueOtherVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueOtherVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueOtherVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueOtherVehicleStateDynamicsAlphaLonAccelMax @@ -566,11 +566,11 @@ TEST(SituationValidInputRangeTests, testValidInputRangeEgoVehicleStateTooSmall) valueOtherVehicleStateDynamics.alphaLat = valueOtherVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueOtherVehicleStateDynamicsLateralFluctuationMargin(0.); valueOtherVehicleStateDynamics.lateralFluctuationMargin = valueOtherVehicleStateDynamicsLateralFluctuationMargin; - valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; - ::ad_rss::physics::Duration valueOtherVehicleStateResponseTime(0.); - valueOtherVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueOtherVehicleStateDynamicsResponseTime(0.); + valueOtherVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueOtherVehicleState.responseTime = valueOtherVehicleStateResponseTime; + valueOtherVehicleStateDynamics.responseTime = valueOtherVehicleStateDynamicsResponseTime; + valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; bool valueOtherVehicleStateHasPriority{true}; valueOtherVehicleState.hasPriority = valueOtherVehicleStateHasPriority; bool valueOtherVehicleStateIsInCorrectLane{true}; @@ -624,7 +624,7 @@ TEST(SituationValidInputRangeTests, testValidInputRangeEgoVehicleStateTooBig) valueEgoVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueEgoVehicleStateVelocity.speedLat = valueEgoVehicleStateVelocitySpeedLat; valueEgoVehicleState.velocity = valueEgoVehicleStateVelocity; - ::ad_rss::world::Dynamics valueEgoVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueEgoVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueEgoVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueEgoVehicleStateDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within @@ -655,11 +655,11 @@ TEST(SituationValidInputRangeTests, testValidInputRangeEgoVehicleStateTooBig) valueEgoVehicleStateDynamics.alphaLat = valueEgoVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueEgoVehicleStateDynamicsLateralFluctuationMargin(0.); valueEgoVehicleStateDynamics.lateralFluctuationMargin = valueEgoVehicleStateDynamicsLateralFluctuationMargin; - valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; - ::ad_rss::physics::Duration valueEgoVehicleStateResponseTime(0.); - valueEgoVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueEgoVehicleStateDynamicsResponseTime(0.); + valueEgoVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleState.responseTime = valueEgoVehicleStateResponseTime; + valueEgoVehicleStateDynamics.responseTime = valueEgoVehicleStateDynamicsResponseTime; + valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; bool valueEgoVehicleStateHasPriority{true}; valueEgoVehicleState.hasPriority = valueEgoVehicleStateHasPriority; bool valueEgoVehicleStateIsInCorrectLane{true}; @@ -680,7 +680,7 @@ TEST(SituationValidInputRangeTests, testValidInputRangeEgoVehicleStateTooBig) valueOtherVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueOtherVehicleStateVelocity.speedLat = valueOtherVehicleStateVelocitySpeedLat; valueOtherVehicleState.velocity = valueOtherVehicleStateVelocity; - ::ad_rss::world::Dynamics valueOtherVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueOtherVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueOtherVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueOtherVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueOtherVehicleStateDynamicsAlphaLonAccelMax @@ -711,11 +711,11 @@ TEST(SituationValidInputRangeTests, testValidInputRangeEgoVehicleStateTooBig) valueOtherVehicleStateDynamics.alphaLat = valueOtherVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueOtherVehicleStateDynamicsLateralFluctuationMargin(0.); valueOtherVehicleStateDynamics.lateralFluctuationMargin = valueOtherVehicleStateDynamicsLateralFluctuationMargin; - valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; - ::ad_rss::physics::Duration valueOtherVehicleStateResponseTime(0.); - valueOtherVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueOtherVehicleStateDynamicsResponseTime(0.); + valueOtherVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueOtherVehicleState.responseTime = valueOtherVehicleStateResponseTime; + valueOtherVehicleStateDynamics.responseTime = valueOtherVehicleStateDynamicsResponseTime; + valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; bool valueOtherVehicleStateHasPriority{true}; valueOtherVehicleState.hasPriority = valueOtherVehicleStateHasPriority; bool valueOtherVehicleStateIsInCorrectLane{true}; @@ -769,7 +769,7 @@ TEST(SituationValidInputRangeTests, testValidInputRangeOtherVehicleStateTooSmall valueEgoVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueEgoVehicleStateVelocity.speedLat = valueEgoVehicleStateVelocitySpeedLat; valueEgoVehicleState.velocity = valueEgoVehicleStateVelocity; - ::ad_rss::world::Dynamics valueEgoVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueEgoVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueEgoVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueEgoVehicleStateDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within @@ -800,11 +800,11 @@ TEST(SituationValidInputRangeTests, testValidInputRangeOtherVehicleStateTooSmall valueEgoVehicleStateDynamics.alphaLat = valueEgoVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueEgoVehicleStateDynamicsLateralFluctuationMargin(0.); valueEgoVehicleStateDynamics.lateralFluctuationMargin = valueEgoVehicleStateDynamicsLateralFluctuationMargin; - valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; - ::ad_rss::physics::Duration valueEgoVehicleStateResponseTime(0.); - valueEgoVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueEgoVehicleStateDynamicsResponseTime(0.); + valueEgoVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleState.responseTime = valueEgoVehicleStateResponseTime; + valueEgoVehicleStateDynamics.responseTime = valueEgoVehicleStateDynamicsResponseTime; + valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; bool valueEgoVehicleStateHasPriority{true}; valueEgoVehicleState.hasPriority = valueEgoVehicleStateHasPriority; bool valueEgoVehicleStateIsInCorrectLane{true}; @@ -825,7 +825,7 @@ TEST(SituationValidInputRangeTests, testValidInputRangeOtherVehicleStateTooSmall valueOtherVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueOtherVehicleStateVelocity.speedLat = valueOtherVehicleStateVelocitySpeedLat; valueOtherVehicleState.velocity = valueOtherVehicleStateVelocity; - ::ad_rss::world::Dynamics valueOtherVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueOtherVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueOtherVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueOtherVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueOtherVehicleStateDynamicsAlphaLonAccelMax @@ -856,11 +856,11 @@ TEST(SituationValidInputRangeTests, testValidInputRangeOtherVehicleStateTooSmall valueOtherVehicleStateDynamics.alphaLat = valueOtherVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueOtherVehicleStateDynamicsLateralFluctuationMargin(0.); valueOtherVehicleStateDynamics.lateralFluctuationMargin = valueOtherVehicleStateDynamicsLateralFluctuationMargin; - valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; - ::ad_rss::physics::Duration valueOtherVehicleStateResponseTime(0.); - valueOtherVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueOtherVehicleStateDynamicsResponseTime(0.); + valueOtherVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueOtherVehicleState.responseTime = valueOtherVehicleStateResponseTime; + valueOtherVehicleStateDynamics.responseTime = valueOtherVehicleStateDynamicsResponseTime; + valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; bool valueOtherVehicleStateHasPriority{true}; valueOtherVehicleState.hasPriority = valueOtherVehicleStateHasPriority; bool valueOtherVehicleStateIsInCorrectLane{true}; @@ -914,7 +914,7 @@ TEST(SituationValidInputRangeTests, testValidInputRangeOtherVehicleStateTooBig) valueEgoVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueEgoVehicleStateVelocity.speedLat = valueEgoVehicleStateVelocitySpeedLat; valueEgoVehicleState.velocity = valueEgoVehicleStateVelocity; - ::ad_rss::world::Dynamics valueEgoVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueEgoVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueEgoVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueEgoVehicleStateDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within @@ -945,11 +945,11 @@ TEST(SituationValidInputRangeTests, testValidInputRangeOtherVehicleStateTooBig) valueEgoVehicleStateDynamics.alphaLat = valueEgoVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueEgoVehicleStateDynamicsLateralFluctuationMargin(0.); valueEgoVehicleStateDynamics.lateralFluctuationMargin = valueEgoVehicleStateDynamicsLateralFluctuationMargin; - valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; - ::ad_rss::physics::Duration valueEgoVehicleStateResponseTime(0.); - valueEgoVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueEgoVehicleStateDynamicsResponseTime(0.); + valueEgoVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleState.responseTime = valueEgoVehicleStateResponseTime; + valueEgoVehicleStateDynamics.responseTime = valueEgoVehicleStateDynamicsResponseTime; + valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; bool valueEgoVehicleStateHasPriority{true}; valueEgoVehicleState.hasPriority = valueEgoVehicleStateHasPriority; bool valueEgoVehicleStateIsInCorrectLane{true}; @@ -970,7 +970,7 @@ TEST(SituationValidInputRangeTests, testValidInputRangeOtherVehicleStateTooBig) valueOtherVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueOtherVehicleStateVelocity.speedLat = valueOtherVehicleStateVelocitySpeedLat; valueOtherVehicleState.velocity = valueOtherVehicleStateVelocity; - ::ad_rss::world::Dynamics valueOtherVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueOtherVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueOtherVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueOtherVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueOtherVehicleStateDynamicsAlphaLonAccelMax @@ -1001,11 +1001,11 @@ TEST(SituationValidInputRangeTests, testValidInputRangeOtherVehicleStateTooBig) valueOtherVehicleStateDynamics.alphaLat = valueOtherVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueOtherVehicleStateDynamicsLateralFluctuationMargin(0.); valueOtherVehicleStateDynamics.lateralFluctuationMargin = valueOtherVehicleStateDynamicsLateralFluctuationMargin; - valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; - ::ad_rss::physics::Duration valueOtherVehicleStateResponseTime(0.); - valueOtherVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueOtherVehicleStateDynamicsResponseTime(0.); + valueOtherVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueOtherVehicleState.responseTime = valueOtherVehicleStateResponseTime; + valueOtherVehicleStateDynamics.responseTime = valueOtherVehicleStateDynamicsResponseTime; + valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; bool valueOtherVehicleStateHasPriority{true}; valueOtherVehicleState.hasPriority = valueOtherVehicleStateHasPriority; bool valueOtherVehicleStateIsInCorrectLane{true}; @@ -1059,7 +1059,7 @@ TEST(SituationValidInputRangeTests, testValidInputRangeRelativePositionTooSmall) valueEgoVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueEgoVehicleStateVelocity.speedLat = valueEgoVehicleStateVelocitySpeedLat; valueEgoVehicleState.velocity = valueEgoVehicleStateVelocity; - ::ad_rss::world::Dynamics valueEgoVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueEgoVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueEgoVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueEgoVehicleStateDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within @@ -1090,11 +1090,11 @@ TEST(SituationValidInputRangeTests, testValidInputRangeRelativePositionTooSmall) valueEgoVehicleStateDynamics.alphaLat = valueEgoVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueEgoVehicleStateDynamicsLateralFluctuationMargin(0.); valueEgoVehicleStateDynamics.lateralFluctuationMargin = valueEgoVehicleStateDynamicsLateralFluctuationMargin; - valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; - ::ad_rss::physics::Duration valueEgoVehicleStateResponseTime(0.); - valueEgoVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueEgoVehicleStateDynamicsResponseTime(0.); + valueEgoVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleState.responseTime = valueEgoVehicleStateResponseTime; + valueEgoVehicleStateDynamics.responseTime = valueEgoVehicleStateDynamicsResponseTime; + valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; bool valueEgoVehicleStateHasPriority{true}; valueEgoVehicleState.hasPriority = valueEgoVehicleStateHasPriority; bool valueEgoVehicleStateIsInCorrectLane{true}; @@ -1115,7 +1115,7 @@ TEST(SituationValidInputRangeTests, testValidInputRangeRelativePositionTooSmall) valueOtherVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueOtherVehicleStateVelocity.speedLat = valueOtherVehicleStateVelocitySpeedLat; valueOtherVehicleState.velocity = valueOtherVehicleStateVelocity; - ::ad_rss::world::Dynamics valueOtherVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueOtherVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueOtherVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueOtherVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueOtherVehicleStateDynamicsAlphaLonAccelMax @@ -1146,11 +1146,11 @@ TEST(SituationValidInputRangeTests, testValidInputRangeRelativePositionTooSmall) valueOtherVehicleStateDynamics.alphaLat = valueOtherVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueOtherVehicleStateDynamicsLateralFluctuationMargin(0.); valueOtherVehicleStateDynamics.lateralFluctuationMargin = valueOtherVehicleStateDynamicsLateralFluctuationMargin; - valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; - ::ad_rss::physics::Duration valueOtherVehicleStateResponseTime(0.); - valueOtherVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueOtherVehicleStateDynamicsResponseTime(0.); + valueOtherVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueOtherVehicleState.responseTime = valueOtherVehicleStateResponseTime; + valueOtherVehicleStateDynamics.responseTime = valueOtherVehicleStateDynamicsResponseTime; + valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; bool valueOtherVehicleStateHasPriority{true}; valueOtherVehicleState.hasPriority = valueOtherVehicleStateHasPriority; bool valueOtherVehicleStateIsInCorrectLane{true}; @@ -1203,7 +1203,7 @@ TEST(SituationValidInputRangeTests, testValidInputRangeRelativePositionTooBig) valueEgoVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueEgoVehicleStateVelocity.speedLat = valueEgoVehicleStateVelocitySpeedLat; valueEgoVehicleState.velocity = valueEgoVehicleStateVelocity; - ::ad_rss::world::Dynamics valueEgoVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueEgoVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueEgoVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueEgoVehicleStateDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within @@ -1234,11 +1234,11 @@ TEST(SituationValidInputRangeTests, testValidInputRangeRelativePositionTooBig) valueEgoVehicleStateDynamics.alphaLat = valueEgoVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueEgoVehicleStateDynamicsLateralFluctuationMargin(0.); valueEgoVehicleStateDynamics.lateralFluctuationMargin = valueEgoVehicleStateDynamicsLateralFluctuationMargin; - valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; - ::ad_rss::physics::Duration valueEgoVehicleStateResponseTime(0.); - valueEgoVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueEgoVehicleStateDynamicsResponseTime(0.); + valueEgoVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleState.responseTime = valueEgoVehicleStateResponseTime; + valueEgoVehicleStateDynamics.responseTime = valueEgoVehicleStateDynamicsResponseTime; + valueEgoVehicleState.dynamics = valueEgoVehicleStateDynamics; bool valueEgoVehicleStateHasPriority{true}; valueEgoVehicleState.hasPriority = valueEgoVehicleStateHasPriority; bool valueEgoVehicleStateIsInCorrectLane{true}; @@ -1259,7 +1259,7 @@ TEST(SituationValidInputRangeTests, testValidInputRangeRelativePositionTooBig) valueOtherVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueOtherVehicleStateVelocity.speedLat = valueOtherVehicleStateVelocitySpeedLat; valueOtherVehicleState.velocity = valueOtherVehicleStateVelocity; - ::ad_rss::world::Dynamics valueOtherVehicleStateDynamics; + ::ad_rss::world::RssDynamics valueOtherVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueOtherVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueOtherVehicleStateDynamicsAlphaLonAccelMax(-1e2); valueOtherVehicleStateDynamicsAlphaLonAccelMax @@ -1290,11 +1290,11 @@ TEST(SituationValidInputRangeTests, testValidInputRangeRelativePositionTooBig) valueOtherVehicleStateDynamics.alphaLat = valueOtherVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance valueOtherVehicleStateDynamicsLateralFluctuationMargin(0.); valueOtherVehicleStateDynamics.lateralFluctuationMargin = valueOtherVehicleStateDynamicsLateralFluctuationMargin; - valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; - ::ad_rss::physics::Duration valueOtherVehicleStateResponseTime(0.); - valueOtherVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueOtherVehicleStateDynamicsResponseTime(0.); + valueOtherVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueOtherVehicleState.responseTime = valueOtherVehicleStateResponseTime; + valueOtherVehicleStateDynamics.responseTime = valueOtherVehicleStateDynamicsResponseTime; + valueOtherVehicleState.dynamics = valueOtherVehicleStateDynamics; bool valueOtherVehicleStateHasPriority{true}; valueOtherVehicleState.hasPriority = valueOtherVehicleStateHasPriority; bool valueOtherVehicleStateIsInCorrectLane{true}; diff --git a/tests/generated/situation/SituationVectorValidInputRangeTests.cpp b/tests/generated/situation/SituationVectorValidInputRangeTests.cpp index f4ef820d11..61fc0f3e39 100644 --- a/tests/generated/situation/SituationVectorValidInputRangeTests.cpp +++ b/tests/generated/situation/SituationVectorValidInputRangeTests.cpp @@ -67,7 +67,7 @@ TEST(SituationVectorValidInputRangeTests, testValidInputRangeValidInputRangeMax) elementEgoVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct elementEgoVehicleStateVelocity.speedLat = elementEgoVehicleStateVelocitySpeedLat; elementEgoVehicleState.velocity = elementEgoVehicleStateVelocity; - ::ad_rss::world::Dynamics elementEgoVehicleStateDynamics; + ::ad_rss::world::RssDynamics elementEgoVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues elementEgoVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration elementEgoVehicleStateDynamicsAlphaLonAccelMax(-1e2); elementEgoVehicleStateDynamicsAlphaLonAccelMax @@ -98,11 +98,11 @@ TEST(SituationVectorValidInputRangeTests, testValidInputRangeValidInputRangeMax) elementEgoVehicleStateDynamics.alphaLat = elementEgoVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance elementEgoVehicleStateDynamicsLateralFluctuationMargin(0.); elementEgoVehicleStateDynamics.lateralFluctuationMargin = elementEgoVehicleStateDynamicsLateralFluctuationMargin; - elementEgoVehicleState.dynamics = elementEgoVehicleStateDynamics; - ::ad_rss::physics::Duration elementEgoVehicleStateResponseTime(0.); - elementEgoVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration elementEgoVehicleStateDynamicsResponseTime(0.); + elementEgoVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - elementEgoVehicleState.responseTime = elementEgoVehicleStateResponseTime; + elementEgoVehicleStateDynamics.responseTime = elementEgoVehicleStateDynamicsResponseTime; + elementEgoVehicleState.dynamics = elementEgoVehicleStateDynamics; bool elementEgoVehicleStateHasPriority{true}; elementEgoVehicleState.hasPriority = elementEgoVehicleStateHasPriority; bool elementEgoVehicleStateIsInCorrectLane{true}; @@ -123,7 +123,7 @@ TEST(SituationVectorValidInputRangeTests, testValidInputRangeValidInputRangeMax) elementOtherVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct elementOtherVehicleStateVelocity.speedLat = elementOtherVehicleStateVelocitySpeedLat; elementOtherVehicleState.velocity = elementOtherVehicleStateVelocity; - ::ad_rss::world::Dynamics elementOtherVehicleStateDynamics; + ::ad_rss::world::RssDynamics elementOtherVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues elementOtherVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration elementOtherVehicleStateDynamicsAlphaLonAccelMax(-1e2); elementOtherVehicleStateDynamicsAlphaLonAccelMax @@ -154,11 +154,11 @@ TEST(SituationVectorValidInputRangeTests, testValidInputRangeValidInputRangeMax) elementOtherVehicleStateDynamics.alphaLat = elementOtherVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance elementOtherVehicleStateDynamicsLateralFluctuationMargin(0.); elementOtherVehicleStateDynamics.lateralFluctuationMargin = elementOtherVehicleStateDynamicsLateralFluctuationMargin; - elementOtherVehicleState.dynamics = elementOtherVehicleStateDynamics; - ::ad_rss::physics::Duration elementOtherVehicleStateResponseTime(0.); - elementOtherVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration elementOtherVehicleStateDynamicsResponseTime(0.); + elementOtherVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - elementOtherVehicleState.responseTime = elementOtherVehicleStateResponseTime; + elementOtherVehicleStateDynamics.responseTime = elementOtherVehicleStateDynamicsResponseTime; + elementOtherVehicleState.dynamics = elementOtherVehicleStateDynamics; bool elementOtherVehicleStateHasPriority{true}; elementOtherVehicleState.hasPriority = elementOtherVehicleStateHasPriority; bool elementOtherVehicleStateIsInCorrectLane{true}; @@ -206,7 +206,7 @@ TEST(SituationVectorValidInputRangeTests, testValidInputRangeHigherThanInputRang elementEgoVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct elementEgoVehicleStateVelocity.speedLat = elementEgoVehicleStateVelocitySpeedLat; elementEgoVehicleState.velocity = elementEgoVehicleStateVelocity; - ::ad_rss::world::Dynamics elementEgoVehicleStateDynamics; + ::ad_rss::world::RssDynamics elementEgoVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues elementEgoVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration elementEgoVehicleStateDynamicsAlphaLonAccelMax(-1e2); elementEgoVehicleStateDynamicsAlphaLonAccelMax @@ -237,11 +237,11 @@ TEST(SituationVectorValidInputRangeTests, testValidInputRangeHigherThanInputRang elementEgoVehicleStateDynamics.alphaLat = elementEgoVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance elementEgoVehicleStateDynamicsLateralFluctuationMargin(0.); elementEgoVehicleStateDynamics.lateralFluctuationMargin = elementEgoVehicleStateDynamicsLateralFluctuationMargin; - elementEgoVehicleState.dynamics = elementEgoVehicleStateDynamics; - ::ad_rss::physics::Duration elementEgoVehicleStateResponseTime(0.); - elementEgoVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration elementEgoVehicleStateDynamicsResponseTime(0.); + elementEgoVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - elementEgoVehicleState.responseTime = elementEgoVehicleStateResponseTime; + elementEgoVehicleStateDynamics.responseTime = elementEgoVehicleStateDynamicsResponseTime; + elementEgoVehicleState.dynamics = elementEgoVehicleStateDynamics; bool elementEgoVehicleStateHasPriority{true}; elementEgoVehicleState.hasPriority = elementEgoVehicleStateHasPriority; bool elementEgoVehicleStateIsInCorrectLane{true}; @@ -262,7 +262,7 @@ TEST(SituationVectorValidInputRangeTests, testValidInputRangeHigherThanInputRang elementOtherVehicleStateVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct elementOtherVehicleStateVelocity.speedLat = elementOtherVehicleStateVelocitySpeedLat; elementOtherVehicleState.velocity = elementOtherVehicleStateVelocity; - ::ad_rss::world::Dynamics elementOtherVehicleStateDynamics; + ::ad_rss::world::RssDynamics elementOtherVehicleStateDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues elementOtherVehicleStateDynamicsAlphaLon; ::ad_rss::physics::Acceleration elementOtherVehicleStateDynamicsAlphaLonAccelMax(-1e2); elementOtherVehicleStateDynamicsAlphaLonAccelMax @@ -293,11 +293,11 @@ TEST(SituationVectorValidInputRangeTests, testValidInputRangeHigherThanInputRang elementOtherVehicleStateDynamics.alphaLat = elementOtherVehicleStateDynamicsAlphaLat; ::ad_rss::physics::Distance elementOtherVehicleStateDynamicsLateralFluctuationMargin(0.); elementOtherVehicleStateDynamics.lateralFluctuationMargin = elementOtherVehicleStateDynamicsLateralFluctuationMargin; - elementOtherVehicleState.dynamics = elementOtherVehicleStateDynamics; - ::ad_rss::physics::Duration elementOtherVehicleStateResponseTime(0.); - elementOtherVehicleStateResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration elementOtherVehicleStateDynamicsResponseTime(0.); + elementOtherVehicleStateDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - elementOtherVehicleState.responseTime = elementOtherVehicleStateResponseTime; + elementOtherVehicleStateDynamics.responseTime = elementOtherVehicleStateDynamicsResponseTime; + elementOtherVehicleState.dynamics = elementOtherVehicleStateDynamics; bool elementOtherVehicleStateHasPriority{true}; elementOtherVehicleState.hasPriority = elementOtherVehicleStateHasPriority; bool elementOtherVehicleStateIsInCorrectLane{true}; diff --git a/tests/generated/situation/VehicleStateTests.cpp b/tests/generated/situation/VehicleStateTests.cpp index 86004f0cdf..c30fc1b0e0 100644 --- a/tests/generated/situation/VehicleStateTests.cpp +++ b/tests/generated/situation/VehicleStateTests.cpp @@ -54,7 +54,7 @@ class VehicleStateTests : public testing::Test valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueVelocity.speedLat = valueVelocitySpeedLat; value.velocity = valueVelocity; - ::ad_rss::world::Dynamics valueDynamics; + ::ad_rss::world::RssDynamics valueDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct @@ -83,11 +83,11 @@ class VehicleStateTests : public testing::Test valueDynamics.alphaLat = valueDynamicsAlphaLat; ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueDynamicsResponseTime(0.); + valueDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; + valueDynamics.responseTime = valueDynamicsResponseTime; + value.dynamics = valueDynamics; bool valueHasPriority{true}; value.hasPriority = valueHasPriority; bool valueIsInCorrectLane{true}; @@ -158,7 +158,7 @@ TEST_F(VehicleStateTests, comparisonOperatorVelocityDiffers) TEST_F(VehicleStateTests, comparisonOperatorDynamicsDiffers) { ::ad_rss::situation::VehicleState valueA = mValue; - ::ad_rss::world::Dynamics dynamics; + ::ad_rss::world::RssDynamics dynamics; ::ad_rss::world::LongitudinalRssAccelerationValues dynamicsAlphaLon; ::ad_rss::physics::Acceleration dynamicsAlphaLonAccelMax(1e2); dynamicsAlphaLon.accelMax = dynamicsAlphaLonAccelMax; @@ -182,6 +182,9 @@ TEST_F(VehicleStateTests, comparisonOperatorDynamicsDiffers) ::ad_rss::physics::Distance dynamicsLateralFluctuationMargin(1e6); dynamicsLateralFluctuationMargin = ::ad_rss::physics::Distance(1.); // set to valid value within struct dynamics.lateralFluctuationMargin = dynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration dynamicsResponseTime(100.); + dynamicsResponseTime = ::ad_rss::physics::Duration(10.); // set to valid value within struct + dynamics.responseTime = dynamicsResponseTime; valueA.dynamics = dynamics; ::ad_rss::situation::VehicleState valueB = mValue; @@ -189,17 +192,6 @@ TEST_F(VehicleStateTests, comparisonOperatorDynamicsDiffers) EXPECT_TRUE(valueA != valueB); } -TEST_F(VehicleStateTests, comparisonOperatorResponseTimeDiffers) -{ - ::ad_rss::situation::VehicleState valueA = mValue; - ::ad_rss::physics::Duration responseTime(100.); - valueA.responseTime = responseTime; - ::ad_rss::situation::VehicleState valueB = mValue; - - EXPECT_FALSE(valueA == valueB); - EXPECT_TRUE(valueA != valueB); -} - TEST_F(VehicleStateTests, comparisonOperatorHasPriorityDiffers) { ::ad_rss::situation::VehicleState valueA = mValue; diff --git a/tests/generated/situation/VehicleStateValidInputRangeTests.cpp b/tests/generated/situation/VehicleStateValidInputRangeTests.cpp index 85aeae3a6c..b6ec063ccc 100644 --- a/tests/generated/situation/VehicleStateValidInputRangeTests.cpp +++ b/tests/generated/situation/VehicleStateValidInputRangeTests.cpp @@ -52,7 +52,7 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRange) valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueVelocity.speedLat = valueVelocitySpeedLat; value.velocity = valueVelocity; - ::ad_rss::world::Dynamics valueDynamics; + ::ad_rss::world::RssDynamics valueDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct @@ -81,11 +81,11 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRange) valueDynamics.alphaLat = valueDynamicsAlphaLat; ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueDynamicsResponseTime(0.); + valueDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; + valueDynamics.responseTime = valueDynamicsResponseTime; + value.dynamics = valueDynamics; bool valueHasPriority{true}; value.hasPriority = valueHasPriority; bool valueIsInCorrectLane{true}; @@ -110,7 +110,7 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRangeVelocityTooSmall) valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueVelocity.speedLat = valueVelocitySpeedLat; value.velocity = valueVelocity; - ::ad_rss::world::Dynamics valueDynamics; + ::ad_rss::world::RssDynamics valueDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct @@ -139,11 +139,11 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRangeVelocityTooSmall) valueDynamics.alphaLat = valueDynamicsAlphaLat; ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueDynamicsResponseTime(0.); + valueDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; + valueDynamics.responseTime = valueDynamicsResponseTime; + value.dynamics = valueDynamics; bool valueHasPriority{true}; value.hasPriority = valueHasPriority; bool valueIsInCorrectLane{true}; @@ -174,7 +174,7 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRangeVelocityTooBig) valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueVelocity.speedLat = valueVelocitySpeedLat; value.velocity = valueVelocity; - ::ad_rss::world::Dynamics valueDynamics; + ::ad_rss::world::RssDynamics valueDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct @@ -203,11 +203,11 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRangeVelocityTooBig) valueDynamics.alphaLat = valueDynamicsAlphaLat; ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueDynamicsResponseTime(0.); + valueDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; + valueDynamics.responseTime = valueDynamicsResponseTime; + value.dynamics = valueDynamics; bool valueHasPriority{true}; value.hasPriority = valueHasPriority; bool valueIsInCorrectLane{true}; @@ -238,7 +238,7 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRangeDynamicsTooSmall) valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueVelocity.speedLat = valueVelocitySpeedLat; value.velocity = valueVelocity; - ::ad_rss::world::Dynamics valueDynamics; + ::ad_rss::world::RssDynamics valueDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct @@ -267,11 +267,11 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRangeDynamicsTooSmall) valueDynamics.alphaLat = valueDynamicsAlphaLat; ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueDynamicsResponseTime(0.); + valueDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; + valueDynamics.responseTime = valueDynamicsResponseTime; + value.dynamics = valueDynamics; bool valueHasPriority{true}; value.hasPriority = valueHasPriority; bool valueIsInCorrectLane{true}; @@ -284,7 +284,7 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRangeDynamicsTooSmall) value.distanceToEnterIntersection = value.distanceToLeaveIntersection; // override member with invalid value - ::ad_rss::world::Dynamics invalidInitializedMember; + ::ad_rss::world::RssDynamics invalidInitializedMember; ::ad_rss::world::LongitudinalRssAccelerationValues invalidInitializedMemberAlphaLon; ::ad_rss::physics::Acceleration invalidInitializedMemberAlphaLonAccelMax(-1e2 * 1.1); invalidInitializedMemberAlphaLon.accelMax = invalidInitializedMemberAlphaLonAccelMax; @@ -304,7 +304,7 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRangeDynamicsTooBig) valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueVelocity.speedLat = valueVelocitySpeedLat; value.velocity = valueVelocity; - ::ad_rss::world::Dynamics valueDynamics; + ::ad_rss::world::RssDynamics valueDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct @@ -333,11 +333,11 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRangeDynamicsTooBig) valueDynamics.alphaLat = valueDynamicsAlphaLat; ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueDynamicsResponseTime(0.); + valueDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; + valueDynamics.responseTime = valueDynamicsResponseTime; + value.dynamics = valueDynamics; bool valueHasPriority{true}; value.hasPriority = valueHasPriority; bool valueIsInCorrectLane{true}; @@ -350,7 +350,7 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRangeDynamicsTooBig) value.distanceToEnterIntersection = value.distanceToLeaveIntersection; // override member with invalid value - ::ad_rss::world::Dynamics invalidInitializedMember; + ::ad_rss::world::RssDynamics invalidInitializedMember; ::ad_rss::world::LongitudinalRssAccelerationValues invalidInitializedMemberAlphaLon; ::ad_rss::physics::Acceleration invalidInitializedMemberAlphaLonAccelMax(1e2 * 1.1); invalidInitializedMemberAlphaLon.accelMax = invalidInitializedMemberAlphaLonAccelMax; @@ -359,139 +359,6 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRangeDynamicsTooBig) ASSERT_FALSE(withinValidInputRange(value)); } -TEST(VehicleStateValidInputRangeTests, testValidInputRangeResponseTimeTooSmall) -{ - ::ad_rss::situation::VehicleState value; - ::ad_rss::world::Velocity valueVelocity; - ::ad_rss::physics::Speed valueVelocitySpeedLon(-100.); - valueVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct - valueVelocity.speedLon = valueVelocitySpeedLon; - ::ad_rss::physics::Speed valueVelocitySpeedLat(-100.); - valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct - valueVelocity.speedLat = valueVelocitySpeedLat; - value.velocity = valueVelocity; - ::ad_rss::world::Dynamics valueDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); - valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLon.accelMax = valueDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMax(-1e2); - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMin(-1e2); - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLonBrakeMinCorrect; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMinCorrect; - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLon.brakeMin; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMax; - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLon.brakeMin; - valueDynamics.alphaLon = valueDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatAccelMax(-1e2); - valueDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLat.accelMax = valueDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatBrakeMin(-1e2); - valueDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLat.brakeMin = valueDynamicsAlphaLatBrakeMin; - valueDynamics.alphaLat = valueDynamicsAlphaLat; - ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); - valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; - bool valueHasPriority{true}; - value.hasPriority = valueHasPriority; - bool valueIsInCorrectLane{true}; - value.isInCorrectLane = valueIsInCorrectLane; - ::ad_rss::physics::Distance valueDistanceToEnterIntersection(0.); - value.distanceToEnterIntersection = valueDistanceToEnterIntersection; - ::ad_rss::physics::Distance valueDistanceToLeaveIntersection(0.); - value.distanceToLeaveIntersection = valueDistanceToLeaveIntersection; - value.distanceToLeaveIntersection = value.distanceToEnterIntersection; - value.distanceToEnterIntersection = value.distanceToLeaveIntersection; - - // override member with invalid value - ::ad_rss::physics::Duration invalidInitializedMember(0. - ::ad_rss::physics::Duration::cPrecisionValue); - value.responseTime = invalidInitializedMember; - ASSERT_FALSE(withinValidInputRange(value)); -} - -TEST(VehicleStateValidInputRangeTests, testValidInputRangeResponseTimeTooBig) -{ - ::ad_rss::situation::VehicleState value; - ::ad_rss::world::Velocity valueVelocity; - ::ad_rss::physics::Speed valueVelocitySpeedLon(-100.); - valueVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct - valueVelocity.speedLon = valueVelocitySpeedLon; - ::ad_rss::physics::Speed valueVelocitySpeedLat(-100.); - valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct - valueVelocity.speedLat = valueVelocitySpeedLat; - value.velocity = valueVelocity; - ::ad_rss::world::Dynamics valueDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); - valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLon.accelMax = valueDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMax(-1e2); - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMin(-1e2); - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLonBrakeMinCorrect; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMinCorrect; - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLon.brakeMin; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMax; - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLon.brakeMin; - valueDynamics.alphaLon = valueDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatAccelMax(-1e2); - valueDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLat.accelMax = valueDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatBrakeMin(-1e2); - valueDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLat.brakeMin = valueDynamicsAlphaLatBrakeMin; - valueDynamics.alphaLat = valueDynamicsAlphaLat; - ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); - valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; - bool valueHasPriority{true}; - value.hasPriority = valueHasPriority; - bool valueIsInCorrectLane{true}; - value.isInCorrectLane = valueIsInCorrectLane; - ::ad_rss::physics::Distance valueDistanceToEnterIntersection(0.); - value.distanceToEnterIntersection = valueDistanceToEnterIntersection; - ::ad_rss::physics::Distance valueDistanceToLeaveIntersection(0.); - value.distanceToLeaveIntersection = valueDistanceToLeaveIntersection; - value.distanceToLeaveIntersection = value.distanceToEnterIntersection; - value.distanceToEnterIntersection = value.distanceToLeaveIntersection; - - // override member with invalid value - ::ad_rss::physics::Duration invalidInitializedMember(100. * 1.1); - invalidInitializedMember = ::ad_rss::physics::Duration(10. * 1.1); // set to valid value within struct - value.responseTime = invalidInitializedMember; - ASSERT_FALSE(withinValidInputRange(value)); -} - -TEST(VehicleStateValidInputRangeTests, testValidInputRangeresponseTimeDefault) -{ - ::ad_rss::situation::VehicleState value; - ::ad_rss::physics::Duration valueDefault; - value.responseTime = valueDefault; - ASSERT_FALSE(withinValidInputRange(value)); -} - TEST(VehicleStateValidInputRangeTests, testValidInputRangeDistanceToEnterIntersectionTooSmall) { ::ad_rss::situation::VehicleState value; @@ -503,7 +370,7 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRangeDistanceToEnterInterse valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueVelocity.speedLat = valueVelocitySpeedLat; value.velocity = valueVelocity; - ::ad_rss::world::Dynamics valueDynamics; + ::ad_rss::world::RssDynamics valueDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct @@ -532,11 +399,11 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRangeDistanceToEnterInterse valueDynamics.alphaLat = valueDynamicsAlphaLat; ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueDynamicsResponseTime(0.); + valueDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; + valueDynamics.responseTime = valueDynamicsResponseTime; + value.dynamics = valueDynamics; bool valueHasPriority{true}; value.hasPriority = valueHasPriority; bool valueIsInCorrectLane{true}; @@ -565,7 +432,7 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRangeDistanceToEnterInterse valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueVelocity.speedLat = valueVelocitySpeedLat; value.velocity = valueVelocity; - ::ad_rss::world::Dynamics valueDynamics; + ::ad_rss::world::RssDynamics valueDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct @@ -594,11 +461,11 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRangeDistanceToEnterInterse valueDynamics.alphaLat = valueDynamicsAlphaLat; ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueDynamicsResponseTime(0.); + valueDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; + valueDynamics.responseTime = valueDynamicsResponseTime; + value.dynamics = valueDynamics; bool valueHasPriority{true}; value.hasPriority = valueHasPriority; bool valueIsInCorrectLane{true}; @@ -635,7 +502,7 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRangeDistanceToLeaveInterse valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueVelocity.speedLat = valueVelocitySpeedLat; value.velocity = valueVelocity; - ::ad_rss::world::Dynamics valueDynamics; + ::ad_rss::world::RssDynamics valueDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct @@ -664,11 +531,11 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRangeDistanceToLeaveInterse valueDynamics.alphaLat = valueDynamicsAlphaLat; ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueDynamicsResponseTime(0.); + valueDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; + valueDynamics.responseTime = valueDynamicsResponseTime; + value.dynamics = valueDynamics; bool valueHasPriority{true}; value.hasPriority = valueHasPriority; bool valueIsInCorrectLane{true}; @@ -697,7 +564,7 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRangeDistanceToLeaveInterse valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueVelocity.speedLat = valueVelocitySpeedLat; value.velocity = valueVelocity; - ::ad_rss::world::Dynamics valueDynamics; + ::ad_rss::world::RssDynamics valueDynamics; ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct @@ -726,11 +593,11 @@ TEST(VehicleStateValidInputRangeTests, testValidInputRangeDistanceToLeaveInterse valueDynamics.alphaLat = valueDynamicsAlphaLat; ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( + ::ad_rss::physics::Duration valueDynamicsResponseTime(0.); + valueDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; + valueDynamics.responseTime = valueDynamicsResponseTime; + value.dynamics = valueDynamics; bool valueHasPriority{true}; value.hasPriority = valueHasPriority; bool valueIsInCorrectLane{true}; diff --git a/tests/generated/world/ObjectTests.cpp b/tests/generated/world/ObjectTests.cpp index 7e7ef2e9ad..8205e28d39 100644 --- a/tests/generated/world/ObjectTests.cpp +++ b/tests/generated/world/ObjectTests.cpp @@ -48,40 +48,10 @@ class ObjectTests : public testing::Test ::ad_rss::world::Object value; ::ad_rss::world::ObjectId valueObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); value.objectId = valueObjectId; - ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::EgoVehicle); + ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::Invalid); value.objectType = valueObjectType; ::ad_rss::world::OccupiedRegionVector valueOccupiedRegions; value.occupiedRegions = valueOccupiedRegions; - ::ad_rss::world::Dynamics valueDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); - valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLon.accelMax = valueDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMax(-1e2); - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMin(-1e2); - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLonBrakeMinCorrect; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMinCorrect; - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLon.brakeMin; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMax; - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLon.brakeMin; - valueDynamics.alphaLon = valueDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatAccelMax(-1e2); - valueDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLat.accelMax = valueDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatBrakeMin(-1e2); - valueDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLat.brakeMin = valueDynamicsAlphaLatBrakeMin; - valueDynamics.alphaLat = valueDynamicsAlphaLat; - ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); - valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; ::ad_rss::world::Velocity valueVelocity; ::ad_rss::physics::Speed valueVelocitySpeedLon(-100.); valueVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct @@ -90,10 +60,6 @@ class ObjectTests : public testing::Test valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueVelocity.speedLat = valueVelocitySpeedLat; value.velocity = valueVelocity; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; mValue = value; } @@ -189,40 +155,6 @@ TEST_F(ObjectTests, comparisonOperatorOccupiedRegionsDiffers) EXPECT_TRUE(valueA != valueB); } -TEST_F(ObjectTests, comparisonOperatorDynamicsDiffers) -{ - ::ad_rss::world::Object valueA = mValue; - ::ad_rss::world::Dynamics dynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues dynamicsAlphaLon; - ::ad_rss::physics::Acceleration dynamicsAlphaLonAccelMax(1e2); - dynamicsAlphaLon.accelMax = dynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration dynamicsAlphaLonBrakeMax(1e2); - dynamicsAlphaLon.brakeMax = dynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration dynamicsAlphaLonBrakeMin(1e2); - dynamicsAlphaLon.brakeMin = dynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration dynamicsAlphaLonBrakeMinCorrect(1e2); - dynamicsAlphaLon.brakeMinCorrect = dynamicsAlphaLonBrakeMinCorrect; - dynamicsAlphaLon.brakeMax = dynamicsAlphaLon.brakeMin; - dynamicsAlphaLon.brakeMin = dynamicsAlphaLon.brakeMinCorrect; - dynamicsAlphaLon.brakeMinCorrect = dynamicsAlphaLon.brakeMin; - dynamicsAlphaLon.brakeMin = dynamicsAlphaLon.brakeMax; - dynamics.alphaLon = dynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues dynamicsAlphaLat; - ::ad_rss::physics::Acceleration dynamicsAlphaLatAccelMax(1e2); - dynamicsAlphaLat.accelMax = dynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration dynamicsAlphaLatBrakeMin(1e2); - dynamicsAlphaLat.brakeMin = dynamicsAlphaLatBrakeMin; - dynamics.alphaLat = dynamicsAlphaLat; - ::ad_rss::physics::Distance dynamicsLateralFluctuationMargin(1e6); - dynamicsLateralFluctuationMargin = ::ad_rss::physics::Distance(1.); // set to valid value within struct - dynamics.lateralFluctuationMargin = dynamicsLateralFluctuationMargin; - valueA.dynamics = dynamics; - ::ad_rss::world::Object valueB = mValue; - - EXPECT_FALSE(valueA == valueB); - EXPECT_TRUE(valueA != valueB); -} - TEST_F(ObjectTests, comparisonOperatorVelocityDiffers) { ::ad_rss::world::Object valueA = mValue; @@ -238,14 +170,3 @@ TEST_F(ObjectTests, comparisonOperatorVelocityDiffers) EXPECT_FALSE(valueA == valueB); EXPECT_TRUE(valueA != valueB); } - -TEST_F(ObjectTests, comparisonOperatorResponseTimeDiffers) -{ - ::ad_rss::world::Object valueA = mValue; - ::ad_rss::physics::Duration responseTime(100.); - valueA.responseTime = responseTime; - ::ad_rss::world::Object valueB = mValue; - - EXPECT_FALSE(valueA == valueB); - EXPECT_TRUE(valueA != valueB); -} diff --git a/tests/generated/world/ObjectTypeTests.cpp b/tests/generated/world/ObjectTypeTests.cpp index 4376a66419..9deb8a3e22 100644 --- a/tests/generated/world/ObjectTypeTests.cpp +++ b/tests/generated/world/ObjectTypeTests.cpp @@ -41,6 +41,10 @@ TEST(ObjectTypeTests, testFromString) { + ASSERT_EQ(fromString<::ad_rss::world::ObjectType>("Invalid"), ::ad_rss::world::ObjectType::Invalid); + ASSERT_EQ(fromString<::ad_rss::world::ObjectType>("::ad_rss::world::ObjectType::Invalid"), + ::ad_rss::world::ObjectType::Invalid); + ASSERT_EQ(fromString<::ad_rss::world::ObjectType>("EgoVehicle"), ::ad_rss::world::ObjectType::EgoVehicle); ASSERT_EQ(fromString<::ad_rss::world::ObjectType>("::ad_rss::world::ObjectType::EgoVehicle"), ::ad_rss::world::ObjectType::EgoVehicle); @@ -61,6 +65,10 @@ TEST(ObjectTypeTests, testToString) int32_t minValue = std::numeric_limits::max(); int32_t maxValue = std::numeric_limits::min(); + ASSERT_EQ(toString(::ad_rss::world::ObjectType::Invalid), "::ad_rss::world::ObjectType::Invalid"); + minValue = std::min(minValue, static_cast(::ad_rss::world::ObjectType::Invalid)); + maxValue = std::max(maxValue, static_cast(::ad_rss::world::ObjectType::Invalid)); + ASSERT_EQ(toString(::ad_rss::world::ObjectType::EgoVehicle), "::ad_rss::world::ObjectType::EgoVehicle"); minValue = std::min(minValue, static_cast(::ad_rss::world::ObjectType::EgoVehicle)); maxValue = std::max(maxValue, static_cast(::ad_rss::world::ObjectType::EgoVehicle)); diff --git a/tests/generated/world/ObjectTypeValidInputRangeTests.cpp b/tests/generated/world/ObjectTypeValidInputRangeTests.cpp index 84a6bc4974..2b39dd257e 100644 --- a/tests/generated/world/ObjectTypeValidInputRangeTests.cpp +++ b/tests/generated/world/ObjectTypeValidInputRangeTests.cpp @@ -43,6 +43,7 @@ TEST(ObjectTypeValidInputRangeTests, testValidInputRangeValid) { + ASSERT_TRUE(withinValidInputRange(::ad_rss::world::ObjectType::Invalid)); ASSERT_TRUE(withinValidInputRange(::ad_rss::world::ObjectType::EgoVehicle)); ASSERT_TRUE(withinValidInputRange(::ad_rss::world::ObjectType::OtherVehicle)); ASSERT_TRUE(withinValidInputRange(::ad_rss::world::ObjectType::ArtificialObject)); @@ -52,6 +53,7 @@ TEST(ObjectTypeValidInputRangeTests, testValidInputRangeInvalid) { int32_t minValue = std::numeric_limits::max(); + minValue = std::min(minValue, static_cast(::ad_rss::world::ObjectType::Invalid)); minValue = std::min(minValue, static_cast(::ad_rss::world::ObjectType::EgoVehicle)); minValue = std::min(minValue, static_cast(::ad_rss::world::ObjectType::OtherVehicle)); minValue = std::min(minValue, static_cast(::ad_rss::world::ObjectType::ArtificialObject)); diff --git a/tests/generated/world/ObjectValidInputRangeTests.cpp b/tests/generated/world/ObjectValidInputRangeTests.cpp index fb13c6dab5..132a9e02d1 100644 --- a/tests/generated/world/ObjectValidInputRangeTests.cpp +++ b/tests/generated/world/ObjectValidInputRangeTests.cpp @@ -46,40 +46,10 @@ TEST(ObjectValidInputRangeTests, testValidInputRange) ::ad_rss::world::Object value; ::ad_rss::world::ObjectId valueObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); value.objectId = valueObjectId; - ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::EgoVehicle); + ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::Invalid); value.objectType = valueObjectType; ::ad_rss::world::OccupiedRegionVector valueOccupiedRegions; value.occupiedRegions = valueOccupiedRegions; - ::ad_rss::world::Dynamics valueDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); - valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLon.accelMax = valueDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMax(-1e2); - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMin(-1e2); - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLonBrakeMinCorrect; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMinCorrect; - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLon.brakeMin; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMax; - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLon.brakeMin; - valueDynamics.alphaLon = valueDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatAccelMax(-1e2); - valueDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLat.accelMax = valueDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatBrakeMin(-1e2); - valueDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLat.brakeMin = valueDynamicsAlphaLatBrakeMin; - valueDynamics.alphaLat = valueDynamicsAlphaLat; - ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); - valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; ::ad_rss::world::Velocity valueVelocity; ::ad_rss::physics::Speed valueVelocitySpeedLon(-100.); valueVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct @@ -88,10 +58,6 @@ TEST(ObjectValidInputRangeTests, testValidInputRange) valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueVelocity.speedLat = valueVelocitySpeedLat; value.velocity = valueVelocity; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; ASSERT_TRUE(withinValidInputRange(value)); } @@ -100,40 +66,10 @@ TEST(ObjectValidInputRangeTests, testValidInputRangeObjectTypeTooSmall) ::ad_rss::world::Object value; ::ad_rss::world::ObjectId valueObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); value.objectId = valueObjectId; - ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::EgoVehicle); + ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::Invalid); value.objectType = valueObjectType; ::ad_rss::world::OccupiedRegionVector valueOccupiedRegions; value.occupiedRegions = valueOccupiedRegions; - ::ad_rss::world::Dynamics valueDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); - valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLon.accelMax = valueDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMax(-1e2); - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMin(-1e2); - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLonBrakeMinCorrect; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMinCorrect; - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLon.brakeMin; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMax; - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLon.brakeMin; - valueDynamics.alphaLon = valueDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatAccelMax(-1e2); - valueDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLat.accelMax = valueDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatBrakeMin(-1e2); - valueDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLat.brakeMin = valueDynamicsAlphaLatBrakeMin; - valueDynamics.alphaLat = valueDynamicsAlphaLat; - ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); - valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; ::ad_rss::world::Velocity valueVelocity; ::ad_rss::physics::Speed valueVelocitySpeedLon(-100.); valueVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct @@ -142,10 +78,6 @@ TEST(ObjectValidInputRangeTests, testValidInputRangeObjectTypeTooSmall) valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueVelocity.speedLat = valueVelocitySpeedLat; value.velocity = valueVelocity; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; // override member with invalid value ::ad_rss::world::ObjectType invalidInitializedMember(static_cast<::ad_rss::world::ObjectType>(-1)); @@ -158,40 +90,10 @@ TEST(ObjectValidInputRangeTests, testValidInputRangeObjectTypeTooBig) ::ad_rss::world::Object value; ::ad_rss::world::ObjectId valueObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); value.objectId = valueObjectId; - ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::EgoVehicle); + ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::Invalid); value.objectType = valueObjectType; ::ad_rss::world::OccupiedRegionVector valueOccupiedRegions; value.occupiedRegions = valueOccupiedRegions; - ::ad_rss::world::Dynamics valueDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); - valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLon.accelMax = valueDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMax(-1e2); - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMin(-1e2); - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLonBrakeMinCorrect; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMinCorrect; - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLon.brakeMin; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMax; - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLon.brakeMin; - valueDynamics.alphaLon = valueDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatAccelMax(-1e2); - valueDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLat.accelMax = valueDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatBrakeMin(-1e2); - valueDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLat.brakeMin = valueDynamicsAlphaLatBrakeMin; - valueDynamics.alphaLat = valueDynamicsAlphaLat; - ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); - valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; ::ad_rss::world::Velocity valueVelocity; ::ad_rss::physics::Speed valueVelocitySpeedLon(-100.); valueVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct @@ -200,10 +102,6 @@ TEST(ObjectValidInputRangeTests, testValidInputRangeObjectTypeTooBig) valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueVelocity.speedLat = valueVelocitySpeedLat; value.velocity = valueVelocity; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; // override member with invalid value ::ad_rss::world::ObjectType invalidInitializedMember(static_cast<::ad_rss::world::ObjectType>(-1)); @@ -216,40 +114,10 @@ TEST(ObjectValidInputRangeTests, testValidInputRangeOccupiedRegionsTooSmall) ::ad_rss::world::Object value; ::ad_rss::world::ObjectId valueObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); value.objectId = valueObjectId; - ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::EgoVehicle); + ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::Invalid); value.objectType = valueObjectType; ::ad_rss::world::OccupiedRegionVector valueOccupiedRegions; value.occupiedRegions = valueOccupiedRegions; - ::ad_rss::world::Dynamics valueDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); - valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLon.accelMax = valueDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMax(-1e2); - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMin(-1e2); - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLonBrakeMinCorrect; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMinCorrect; - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLon.brakeMin; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMax; - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLon.brakeMin; - valueDynamics.alphaLon = valueDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatAccelMax(-1e2); - valueDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLat.accelMax = valueDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatBrakeMin(-1e2); - valueDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLat.brakeMin = valueDynamicsAlphaLatBrakeMin; - valueDynamics.alphaLat = valueDynamicsAlphaLat; - ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); - valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; ::ad_rss::world::Velocity valueVelocity; ::ad_rss::physics::Speed valueVelocitySpeedLon(-100.); valueVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct @@ -258,10 +126,6 @@ TEST(ObjectValidInputRangeTests, testValidInputRangeOccupiedRegionsTooSmall) valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueVelocity.speedLat = valueVelocitySpeedLat; value.velocity = valueVelocity; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; // override member with invalid value ::ad_rss::world::OccupiedRegionVector invalidInitializedMember; @@ -306,40 +170,10 @@ TEST(ObjectValidInputRangeTests, testValidInputRangeOccupiedRegionsTooBig) ::ad_rss::world::Object value; ::ad_rss::world::ObjectId valueObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); value.objectId = valueObjectId; - ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::EgoVehicle); + ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::Invalid); value.objectType = valueObjectType; ::ad_rss::world::OccupiedRegionVector valueOccupiedRegions; value.occupiedRegions = valueOccupiedRegions; - ::ad_rss::world::Dynamics valueDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); - valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLon.accelMax = valueDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMax(-1e2); - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMin(-1e2); - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLonBrakeMinCorrect; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMinCorrect; - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLon.brakeMin; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMax; - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLon.brakeMin; - valueDynamics.alphaLon = valueDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatAccelMax(-1e2); - valueDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLat.accelMax = valueDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatBrakeMin(-1e2); - valueDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLat.brakeMin = valueDynamicsAlphaLatBrakeMin; - valueDynamics.alphaLat = valueDynamicsAlphaLat; - ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); - valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; ::ad_rss::world::Velocity valueVelocity; ::ad_rss::physics::Speed valueVelocitySpeedLon(-100.); valueVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct @@ -348,10 +182,6 @@ TEST(ObjectValidInputRangeTests, testValidInputRangeOccupiedRegionsTooBig) valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueVelocity.speedLat = valueVelocitySpeedLat; value.velocity = valueVelocity; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; // override member with invalid value ::ad_rss::world::OccupiedRegionVector invalidInitializedMember; @@ -391,169 +221,15 @@ TEST(ObjectValidInputRangeTests, testValidInputRangeOccupiedRegionsTooBig) ASSERT_FALSE(withinValidInputRange(value)); } -TEST(ObjectValidInputRangeTests, testValidInputRangeDynamicsTooSmall) -{ - ::ad_rss::world::Object value; - ::ad_rss::world::ObjectId valueObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); - value.objectId = valueObjectId; - ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::EgoVehicle); - value.objectType = valueObjectType; - ::ad_rss::world::OccupiedRegionVector valueOccupiedRegions; - value.occupiedRegions = valueOccupiedRegions; - ::ad_rss::world::Dynamics valueDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); - valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLon.accelMax = valueDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMax(-1e2); - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMin(-1e2); - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLonBrakeMinCorrect; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMinCorrect; - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLon.brakeMin; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMax; - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLon.brakeMin; - valueDynamics.alphaLon = valueDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatAccelMax(-1e2); - valueDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLat.accelMax = valueDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatBrakeMin(-1e2); - valueDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLat.brakeMin = valueDynamicsAlphaLatBrakeMin; - valueDynamics.alphaLat = valueDynamicsAlphaLat; - ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); - valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; - ::ad_rss::world::Velocity valueVelocity; - ::ad_rss::physics::Speed valueVelocitySpeedLon(-100.); - valueVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct - valueVelocity.speedLon = valueVelocitySpeedLon; - ::ad_rss::physics::Speed valueVelocitySpeedLat(-100.); - valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct - valueVelocity.speedLat = valueVelocitySpeedLat; - value.velocity = valueVelocity; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; - - // override member with invalid value - ::ad_rss::world::Dynamics invalidInitializedMember; - ::ad_rss::world::LongitudinalRssAccelerationValues invalidInitializedMemberAlphaLon; - ::ad_rss::physics::Acceleration invalidInitializedMemberAlphaLonAccelMax(-1e2 * 1.1); - invalidInitializedMemberAlphaLon.accelMax = invalidInitializedMemberAlphaLonAccelMax; - invalidInitializedMember.alphaLon = invalidInitializedMemberAlphaLon; - value.dynamics = invalidInitializedMember; - ASSERT_FALSE(withinValidInputRange(value)); -} - -TEST(ObjectValidInputRangeTests, testValidInputRangeDynamicsTooBig) -{ - ::ad_rss::world::Object value; - ::ad_rss::world::ObjectId valueObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); - value.objectId = valueObjectId; - ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::EgoVehicle); - value.objectType = valueObjectType; - ::ad_rss::world::OccupiedRegionVector valueOccupiedRegions; - value.occupiedRegions = valueOccupiedRegions; - ::ad_rss::world::Dynamics valueDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); - valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLon.accelMax = valueDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMax(-1e2); - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMin(-1e2); - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLonBrakeMinCorrect; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMinCorrect; - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLon.brakeMin; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMax; - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLon.brakeMin; - valueDynamics.alphaLon = valueDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatAccelMax(-1e2); - valueDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLat.accelMax = valueDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatBrakeMin(-1e2); - valueDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLat.brakeMin = valueDynamicsAlphaLatBrakeMin; - valueDynamics.alphaLat = valueDynamicsAlphaLat; - ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); - valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; - ::ad_rss::world::Velocity valueVelocity; - ::ad_rss::physics::Speed valueVelocitySpeedLon(-100.); - valueVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct - valueVelocity.speedLon = valueVelocitySpeedLon; - ::ad_rss::physics::Speed valueVelocitySpeedLat(-100.); - valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct - valueVelocity.speedLat = valueVelocitySpeedLat; - value.velocity = valueVelocity; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; - - // override member with invalid value - ::ad_rss::world::Dynamics invalidInitializedMember; - ::ad_rss::world::LongitudinalRssAccelerationValues invalidInitializedMemberAlphaLon; - ::ad_rss::physics::Acceleration invalidInitializedMemberAlphaLonAccelMax(1e2 * 1.1); - invalidInitializedMemberAlphaLon.accelMax = invalidInitializedMemberAlphaLonAccelMax; - invalidInitializedMember.alphaLon = invalidInitializedMemberAlphaLon; - value.dynamics = invalidInitializedMember; - ASSERT_FALSE(withinValidInputRange(value)); -} - TEST(ObjectValidInputRangeTests, testValidInputRangeVelocityTooSmall) { ::ad_rss::world::Object value; ::ad_rss::world::ObjectId valueObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); value.objectId = valueObjectId; - ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::EgoVehicle); + ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::Invalid); value.objectType = valueObjectType; ::ad_rss::world::OccupiedRegionVector valueOccupiedRegions; value.occupiedRegions = valueOccupiedRegions; - ::ad_rss::world::Dynamics valueDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); - valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLon.accelMax = valueDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMax(-1e2); - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMin(-1e2); - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLonBrakeMinCorrect; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMinCorrect; - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLon.brakeMin; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMax; - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLon.brakeMin; - valueDynamics.alphaLon = valueDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatAccelMax(-1e2); - valueDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLat.accelMax = valueDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatBrakeMin(-1e2); - valueDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLat.brakeMin = valueDynamicsAlphaLatBrakeMin; - valueDynamics.alphaLat = valueDynamicsAlphaLat; - ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); - valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; ::ad_rss::world::Velocity valueVelocity; ::ad_rss::physics::Speed valueVelocitySpeedLon(-100.); valueVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct @@ -562,10 +238,6 @@ TEST(ObjectValidInputRangeTests, testValidInputRangeVelocityTooSmall) valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueVelocity.speedLat = valueVelocitySpeedLat; value.velocity = valueVelocity; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; // override member with invalid value ::ad_rss::world::Velocity invalidInitializedMember; @@ -580,40 +252,10 @@ TEST(ObjectValidInputRangeTests, testValidInputRangeVelocityTooBig) ::ad_rss::world::Object value; ::ad_rss::world::ObjectId valueObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); value.objectId = valueObjectId; - ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::EgoVehicle); + ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::Invalid); value.objectType = valueObjectType; ::ad_rss::world::OccupiedRegionVector valueOccupiedRegions; value.occupiedRegions = valueOccupiedRegions; - ::ad_rss::world::Dynamics valueDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); - valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLon.accelMax = valueDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMax(-1e2); - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMin(-1e2); - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLonBrakeMinCorrect; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMinCorrect; - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLon.brakeMin; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMax; - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLon.brakeMin; - valueDynamics.alphaLon = valueDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatAccelMax(-1e2); - valueDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLat.accelMax = valueDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatBrakeMin(-1e2); - valueDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLat.brakeMin = valueDynamicsAlphaLatBrakeMin; - valueDynamics.alphaLat = valueDynamicsAlphaLat; - ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); - valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; ::ad_rss::world::Velocity valueVelocity; ::ad_rss::physics::Speed valueVelocitySpeedLon(-100.); valueVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct @@ -622,10 +264,6 @@ TEST(ObjectValidInputRangeTests, testValidInputRangeVelocityTooBig) valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueVelocity.speedLat = valueVelocitySpeedLat; value.velocity = valueVelocity; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; // override member with invalid value ::ad_rss::world::Velocity invalidInitializedMember; @@ -634,129 +272,3 @@ TEST(ObjectValidInputRangeTests, testValidInputRangeVelocityTooBig) value.velocity = invalidInitializedMember; ASSERT_FALSE(withinValidInputRange(value)); } - -TEST(ObjectValidInputRangeTests, testValidInputRangeResponseTimeTooSmall) -{ - ::ad_rss::world::Object value; - ::ad_rss::world::ObjectId valueObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); - value.objectId = valueObjectId; - ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::EgoVehicle); - value.objectType = valueObjectType; - ::ad_rss::world::OccupiedRegionVector valueOccupiedRegions; - value.occupiedRegions = valueOccupiedRegions; - ::ad_rss::world::Dynamics valueDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); - valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLon.accelMax = valueDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMax(-1e2); - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMin(-1e2); - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLonBrakeMinCorrect; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMinCorrect; - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLon.brakeMin; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMax; - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLon.brakeMin; - valueDynamics.alphaLon = valueDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatAccelMax(-1e2); - valueDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLat.accelMax = valueDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatBrakeMin(-1e2); - valueDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLat.brakeMin = valueDynamicsAlphaLatBrakeMin; - valueDynamics.alphaLat = valueDynamicsAlphaLat; - ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); - valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; - ::ad_rss::world::Velocity valueVelocity; - ::ad_rss::physics::Speed valueVelocitySpeedLon(-100.); - valueVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct - valueVelocity.speedLon = valueVelocitySpeedLon; - ::ad_rss::physics::Speed valueVelocitySpeedLat(-100.); - valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct - valueVelocity.speedLat = valueVelocitySpeedLat; - value.velocity = valueVelocity; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; - - // override member with invalid value - ::ad_rss::physics::Duration invalidInitializedMember(0. - ::ad_rss::physics::Duration::cPrecisionValue); - value.responseTime = invalidInitializedMember; - ASSERT_FALSE(withinValidInputRange(value)); -} - -TEST(ObjectValidInputRangeTests, testValidInputRangeResponseTimeTooBig) -{ - ::ad_rss::world::Object value; - ::ad_rss::world::ObjectId valueObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); - value.objectId = valueObjectId; - ::ad_rss::world::ObjectType valueObjectType(::ad_rss::world::ObjectType::EgoVehicle); - value.objectType = valueObjectType; - ::ad_rss::world::OccupiedRegionVector valueOccupiedRegions; - value.occupiedRegions = valueOccupiedRegions; - ::ad_rss::world::Dynamics valueDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonAccelMax(-1e2); - valueDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLon.accelMax = valueDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMax(-1e2); - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMin(-1e2); - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLonBrakeMinCorrect; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMinCorrect; - valueDynamicsAlphaLon.brakeMax = valueDynamicsAlphaLon.brakeMin; - valueDynamicsAlphaLon.brakeMin = valueDynamicsAlphaLon.brakeMax; - valueDynamicsAlphaLon.brakeMinCorrect = valueDynamicsAlphaLon.brakeMin; - valueDynamics.alphaLon = valueDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatAccelMax(-1e2); - valueDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueDynamicsAlphaLat.accelMax = valueDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueDynamicsAlphaLatBrakeMin(-1e2); - valueDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueDynamicsAlphaLat.brakeMin = valueDynamicsAlphaLatBrakeMin; - valueDynamics.alphaLat = valueDynamicsAlphaLat; - ::ad_rss::physics::Distance valueDynamicsLateralFluctuationMargin(0.); - valueDynamics.lateralFluctuationMargin = valueDynamicsLateralFluctuationMargin; - value.dynamics = valueDynamics; - ::ad_rss::world::Velocity valueVelocity; - ::ad_rss::physics::Speed valueVelocitySpeedLon(-100.); - valueVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct - valueVelocity.speedLon = valueVelocitySpeedLon; - ::ad_rss::physics::Speed valueVelocitySpeedLat(-100.); - valueVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct - valueVelocity.speedLat = valueVelocitySpeedLat; - value.velocity = valueVelocity; - ::ad_rss::physics::Duration valueResponseTime(0.); - valueResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - value.responseTime = valueResponseTime; - - // override member with invalid value - ::ad_rss::physics::Duration invalidInitializedMember(100. * 1.1); - invalidInitializedMember = ::ad_rss::physics::Duration(10. * 1.1); // set to valid value within struct - value.responseTime = invalidInitializedMember; - ASSERT_FALSE(withinValidInputRange(value)); -} - -TEST(ObjectValidInputRangeTests, testValidInputRangeresponseTimeDefault) -{ - ::ad_rss::world::Object value; - value.objectType = ::ad_rss::world::ObjectType::EgoVehicle; - ::ad_rss::physics::Duration valueDefault; - value.responseTime = valueDefault; - ASSERT_FALSE(withinValidInputRange(value)); -} diff --git a/tests/generated/world/DynamicsTests.cpp b/tests/generated/world/RssDynamicsTests.cpp similarity index 74% rename from tests/generated/world/DynamicsTests.cpp rename to tests/generated/world/RssDynamicsTests.cpp index d7290145f1..02e0563499 100644 --- a/tests/generated/world/DynamicsTests.cpp +++ b/tests/generated/world/RssDynamicsTests.cpp @@ -37,15 +37,15 @@ #include #include -#include "ad_rss/world/Dynamics.hpp" +#include "ad_rss/world/RssDynamics.hpp" -class DynamicsTests : public testing::Test +class RssDynamicsTests : public testing::Test { protected: virtual void SetUp() override { // valid initialization - ::ad_rss::world::Dynamics value; + ::ad_rss::world::RssDynamics value; ::ad_rss::world::LongitudinalRssAccelerationValues valueAlphaLon; ::ad_rss::physics::Acceleration valueAlphaLonAccelMax(-1e2); valueAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct @@ -74,50 +74,54 @@ class DynamicsTests : public testing::Test value.alphaLat = valueAlphaLat; ::ad_rss::physics::Distance valueLateralFluctuationMargin(0.); value.lateralFluctuationMargin = valueLateralFluctuationMargin; + ::ad_rss::physics::Duration valueResponseTime(0.); + valueResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + value.responseTime = valueResponseTime; mValue = value; } - ::ad_rss::world::Dynamics mValue; + ::ad_rss::world::RssDynamics mValue; }; -TEST_F(DynamicsTests, copyConstruction) +TEST_F(RssDynamicsTests, copyConstruction) { - ::ad_rss::world::Dynamics value(mValue); + ::ad_rss::world::RssDynamics value(mValue); EXPECT_EQ(mValue, value); } -TEST_F(DynamicsTests, moveConstruction) +TEST_F(RssDynamicsTests, moveConstruction) { - ::ad_rss::world::Dynamics value(std::move(::ad_rss::world::Dynamics(mValue))); + ::ad_rss::world::RssDynamics value(std::move(::ad_rss::world::RssDynamics(mValue))); EXPECT_EQ(mValue, value); } -TEST_F(DynamicsTests, copyAssignment) +TEST_F(RssDynamicsTests, copyAssignment) { - ::ad_rss::world::Dynamics value; + ::ad_rss::world::RssDynamics value; value = mValue; EXPECT_EQ(mValue, value); } -TEST_F(DynamicsTests, moveAssignment) +TEST_F(RssDynamicsTests, moveAssignment) { - ::ad_rss::world::Dynamics value; - value = std::move(::ad_rss::world::Dynamics(mValue)); + ::ad_rss::world::RssDynamics value; + value = std::move(::ad_rss::world::RssDynamics(mValue)); EXPECT_EQ(mValue, value); } -TEST_F(DynamicsTests, comparisonOperatorEqual) +TEST_F(RssDynamicsTests, comparisonOperatorEqual) { - ::ad_rss::world::Dynamics valueA = mValue; - ::ad_rss::world::Dynamics valueB = mValue; + ::ad_rss::world::RssDynamics valueA = mValue; + ::ad_rss::world::RssDynamics valueB = mValue; EXPECT_TRUE(valueA == valueB); EXPECT_FALSE(valueA != valueB); } -TEST_F(DynamicsTests, comparisonOperatorAlphaLonDiffers) +TEST_F(RssDynamicsTests, comparisonOperatorAlphaLonDiffers) { - ::ad_rss::world::Dynamics valueA = mValue; + ::ad_rss::world::RssDynamics valueA = mValue; ::ad_rss::world::LongitudinalRssAccelerationValues alphaLon; ::ad_rss::physics::Acceleration alphaLonAccelMax(1e2); alphaLon.accelMax = alphaLonAccelMax; @@ -132,33 +136,44 @@ TEST_F(DynamicsTests, comparisonOperatorAlphaLonDiffers) alphaLon.brakeMinCorrect = alphaLon.brakeMin; alphaLon.brakeMin = alphaLon.brakeMax; valueA.alphaLon = alphaLon; - ::ad_rss::world::Dynamics valueB = mValue; + ::ad_rss::world::RssDynamics valueB = mValue; EXPECT_FALSE(valueA == valueB); EXPECT_TRUE(valueA != valueB); } -TEST_F(DynamicsTests, comparisonOperatorAlphaLatDiffers) +TEST_F(RssDynamicsTests, comparisonOperatorAlphaLatDiffers) { - ::ad_rss::world::Dynamics valueA = mValue; + ::ad_rss::world::RssDynamics valueA = mValue; ::ad_rss::world::LateralRssAccelerationValues alphaLat; ::ad_rss::physics::Acceleration alphaLatAccelMax(1e2); alphaLat.accelMax = alphaLatAccelMax; ::ad_rss::physics::Acceleration alphaLatBrakeMin(1e2); alphaLat.brakeMin = alphaLatBrakeMin; valueA.alphaLat = alphaLat; - ::ad_rss::world::Dynamics valueB = mValue; + ::ad_rss::world::RssDynamics valueB = mValue; EXPECT_FALSE(valueA == valueB); EXPECT_TRUE(valueA != valueB); } -TEST_F(DynamicsTests, comparisonOperatorLateralFluctuationMarginDiffers) +TEST_F(RssDynamicsTests, comparisonOperatorLateralFluctuationMarginDiffers) { - ::ad_rss::world::Dynamics valueA = mValue; + ::ad_rss::world::RssDynamics valueA = mValue; ::ad_rss::physics::Distance lateralFluctuationMargin(1e6); valueA.lateralFluctuationMargin = lateralFluctuationMargin; - ::ad_rss::world::Dynamics valueB = mValue; + ::ad_rss::world::RssDynamics valueB = mValue; + + EXPECT_FALSE(valueA == valueB); + EXPECT_TRUE(valueA != valueB); +} + +TEST_F(RssDynamicsTests, comparisonOperatorResponseTimeDiffers) +{ + ::ad_rss::world::RssDynamics valueA = mValue; + ::ad_rss::physics::Duration responseTime(100.); + valueA.responseTime = responseTime; + ::ad_rss::world::RssDynamics valueB = mValue; EXPECT_FALSE(valueA == valueB); EXPECT_TRUE(valueA != valueB); diff --git a/tests/generated/world/DynamicsValidInputRangeTests.cpp b/tests/generated/world/RssDynamicsValidInputRangeTests.cpp similarity index 68% rename from tests/generated/world/DynamicsValidInputRangeTests.cpp rename to tests/generated/world/RssDynamicsValidInputRangeTests.cpp index afe7703ea1..df62b8ab98 100644 --- a/tests/generated/world/DynamicsValidInputRangeTests.cpp +++ b/tests/generated/world/RssDynamicsValidInputRangeTests.cpp @@ -39,11 +39,11 @@ #include -#include "ad_rss/world/DynamicsValidInputRange.hpp" +#include "ad_rss/world/RssDynamicsValidInputRange.hpp" -TEST(DynamicsValidInputRangeTests, testValidInputRange) +TEST(RssDynamicsValidInputRangeTests, testValidInputRange) { - ::ad_rss::world::Dynamics value; + ::ad_rss::world::RssDynamics value; ::ad_rss::world::LongitudinalRssAccelerationValues valueAlphaLon; ::ad_rss::physics::Acceleration valueAlphaLonAccelMax(-1e2); valueAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct @@ -72,12 +72,16 @@ TEST(DynamicsValidInputRangeTests, testValidInputRange) value.alphaLat = valueAlphaLat; ::ad_rss::physics::Distance valueLateralFluctuationMargin(0.); value.lateralFluctuationMargin = valueLateralFluctuationMargin; + ::ad_rss::physics::Duration valueResponseTime(0.); + valueResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + value.responseTime = valueResponseTime; ASSERT_TRUE(withinValidInputRange(value)); } -TEST(DynamicsValidInputRangeTests, testValidInputRangeAlphaLonTooSmall) +TEST(RssDynamicsValidInputRangeTests, testValidInputRangeAlphaLonTooSmall) { - ::ad_rss::world::Dynamics value; + ::ad_rss::world::RssDynamics value; ::ad_rss::world::LongitudinalRssAccelerationValues valueAlphaLon; ::ad_rss::physics::Acceleration valueAlphaLonAccelMax(-1e2); valueAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct @@ -106,6 +110,10 @@ TEST(DynamicsValidInputRangeTests, testValidInputRangeAlphaLonTooSmall) value.alphaLat = valueAlphaLat; ::ad_rss::physics::Distance valueLateralFluctuationMargin(0.); value.lateralFluctuationMargin = valueLateralFluctuationMargin; + ::ad_rss::physics::Duration valueResponseTime(0.); + valueResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + value.responseTime = valueResponseTime; // override member with invalid value ::ad_rss::world::LongitudinalRssAccelerationValues invalidInitializedMember; @@ -115,9 +123,9 @@ TEST(DynamicsValidInputRangeTests, testValidInputRangeAlphaLonTooSmall) ASSERT_FALSE(withinValidInputRange(value)); } -TEST(DynamicsValidInputRangeTests, testValidInputRangeAlphaLonTooBig) +TEST(RssDynamicsValidInputRangeTests, testValidInputRangeAlphaLonTooBig) { - ::ad_rss::world::Dynamics value; + ::ad_rss::world::RssDynamics value; ::ad_rss::world::LongitudinalRssAccelerationValues valueAlphaLon; ::ad_rss::physics::Acceleration valueAlphaLonAccelMax(-1e2); valueAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct @@ -146,6 +154,10 @@ TEST(DynamicsValidInputRangeTests, testValidInputRangeAlphaLonTooBig) value.alphaLat = valueAlphaLat; ::ad_rss::physics::Distance valueLateralFluctuationMargin(0.); value.lateralFluctuationMargin = valueLateralFluctuationMargin; + ::ad_rss::physics::Duration valueResponseTime(0.); + valueResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + value.responseTime = valueResponseTime; // override member with invalid value ::ad_rss::world::LongitudinalRssAccelerationValues invalidInitializedMember; @@ -155,9 +167,9 @@ TEST(DynamicsValidInputRangeTests, testValidInputRangeAlphaLonTooBig) ASSERT_FALSE(withinValidInputRange(value)); } -TEST(DynamicsValidInputRangeTests, testValidInputRangeAlphaLatTooSmall) +TEST(RssDynamicsValidInputRangeTests, testValidInputRangeAlphaLatTooSmall) { - ::ad_rss::world::Dynamics value; + ::ad_rss::world::RssDynamics value; ::ad_rss::world::LongitudinalRssAccelerationValues valueAlphaLon; ::ad_rss::physics::Acceleration valueAlphaLonAccelMax(-1e2); valueAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct @@ -186,6 +198,10 @@ TEST(DynamicsValidInputRangeTests, testValidInputRangeAlphaLatTooSmall) value.alphaLat = valueAlphaLat; ::ad_rss::physics::Distance valueLateralFluctuationMargin(0.); value.lateralFluctuationMargin = valueLateralFluctuationMargin; + ::ad_rss::physics::Duration valueResponseTime(0.); + valueResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + value.responseTime = valueResponseTime; // override member with invalid value ::ad_rss::world::LateralRssAccelerationValues invalidInitializedMember; @@ -195,9 +211,9 @@ TEST(DynamicsValidInputRangeTests, testValidInputRangeAlphaLatTooSmall) ASSERT_FALSE(withinValidInputRange(value)); } -TEST(DynamicsValidInputRangeTests, testValidInputRangeAlphaLatTooBig) +TEST(RssDynamicsValidInputRangeTests, testValidInputRangeAlphaLatTooBig) { - ::ad_rss::world::Dynamics value; + ::ad_rss::world::RssDynamics value; ::ad_rss::world::LongitudinalRssAccelerationValues valueAlphaLon; ::ad_rss::physics::Acceleration valueAlphaLonAccelMax(-1e2); valueAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct @@ -226,6 +242,10 @@ TEST(DynamicsValidInputRangeTests, testValidInputRangeAlphaLatTooBig) value.alphaLat = valueAlphaLat; ::ad_rss::physics::Distance valueLateralFluctuationMargin(0.); value.lateralFluctuationMargin = valueLateralFluctuationMargin; + ::ad_rss::physics::Duration valueResponseTime(0.); + valueResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + value.responseTime = valueResponseTime; // override member with invalid value ::ad_rss::world::LateralRssAccelerationValues invalidInitializedMember; @@ -235,9 +255,9 @@ TEST(DynamicsValidInputRangeTests, testValidInputRangeAlphaLatTooBig) ASSERT_FALSE(withinValidInputRange(value)); } -TEST(DynamicsValidInputRangeTests, testValidInputRangeLateralFluctuationMarginTooSmall) +TEST(RssDynamicsValidInputRangeTests, testValidInputRangeLateralFluctuationMarginTooSmall) { - ::ad_rss::world::Dynamics value; + ::ad_rss::world::RssDynamics value; ::ad_rss::world::LongitudinalRssAccelerationValues valueAlphaLon; ::ad_rss::physics::Acceleration valueAlphaLonAccelMax(-1e2); valueAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct @@ -266,6 +286,10 @@ TEST(DynamicsValidInputRangeTests, testValidInputRangeLateralFluctuationMarginTo value.alphaLat = valueAlphaLat; ::ad_rss::physics::Distance valueLateralFluctuationMargin(0.); value.lateralFluctuationMargin = valueLateralFluctuationMargin; + ::ad_rss::physics::Duration valueResponseTime(0.); + valueResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + value.responseTime = valueResponseTime; // override member with invalid value ::ad_rss::physics::Distance invalidInitializedMember(0. - ::ad_rss::physics::Distance::cPrecisionValue); @@ -273,9 +297,9 @@ TEST(DynamicsValidInputRangeTests, testValidInputRangeLateralFluctuationMarginTo ASSERT_FALSE(withinValidInputRange(value)); } -TEST(DynamicsValidInputRangeTests, testValidInputRangeLateralFluctuationMarginTooBig) +TEST(RssDynamicsValidInputRangeTests, testValidInputRangeLateralFluctuationMarginTooBig) { - ::ad_rss::world::Dynamics value; + ::ad_rss::world::RssDynamics value; ::ad_rss::world::LongitudinalRssAccelerationValues valueAlphaLon; ::ad_rss::physics::Acceleration valueAlphaLonAccelMax(-1e2); valueAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct @@ -304,6 +328,10 @@ TEST(DynamicsValidInputRangeTests, testValidInputRangeLateralFluctuationMarginTo value.alphaLat = valueAlphaLat; ::ad_rss::physics::Distance valueLateralFluctuationMargin(0.); value.lateralFluctuationMargin = valueLateralFluctuationMargin; + ::ad_rss::physics::Duration valueResponseTime(0.); + valueResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + value.responseTime = valueResponseTime; // override member with invalid value ::ad_rss::physics::Distance invalidInitializedMember(1e6 * 1.1); @@ -312,10 +340,103 @@ TEST(DynamicsValidInputRangeTests, testValidInputRangeLateralFluctuationMarginTo ASSERT_FALSE(withinValidInputRange(value)); } -TEST(DynamicsValidInputRangeTests, testValidInputRangelateralFluctuationMarginDefault) +TEST(RssDynamicsValidInputRangeTests, testValidInputRangelateralFluctuationMarginDefault) { - ::ad_rss::world::Dynamics value; + ::ad_rss::world::RssDynamics value; ::ad_rss::physics::Distance valueDefault; value.lateralFluctuationMargin = valueDefault; ASSERT_FALSE(withinValidInputRange(value)); } + +TEST(RssDynamicsValidInputRangeTests, testValidInputRangeResponseTimeTooSmall) +{ + ::ad_rss::world::RssDynamics value; + ::ad_rss::world::LongitudinalRssAccelerationValues valueAlphaLon; + ::ad_rss::physics::Acceleration valueAlphaLonAccelMax(-1e2); + valueAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueAlphaLon.accelMax = valueAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueAlphaLonBrakeMax(-1e2); + valueAlphaLon.brakeMax = valueAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueAlphaLonBrakeMin(-1e2); + valueAlphaLon.brakeMin = valueAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueAlphaLonBrakeMinCorrect(-1e2); + valueAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueAlphaLon.brakeMinCorrect = valueAlphaLonBrakeMinCorrect; + valueAlphaLon.brakeMin = valueAlphaLon.brakeMinCorrect; + valueAlphaLon.brakeMax = valueAlphaLon.brakeMin; + valueAlphaLon.brakeMin = valueAlphaLon.brakeMax; + valueAlphaLon.brakeMinCorrect = valueAlphaLon.brakeMin; + value.alphaLon = valueAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueAlphaLat; + ::ad_rss::physics::Acceleration valueAlphaLatAccelMax(-1e2); + valueAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueAlphaLat.accelMax = valueAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueAlphaLatBrakeMin(-1e2); + valueAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueAlphaLat.brakeMin = valueAlphaLatBrakeMin; + value.alphaLat = valueAlphaLat; + ::ad_rss::physics::Distance valueLateralFluctuationMargin(0.); + value.lateralFluctuationMargin = valueLateralFluctuationMargin; + ::ad_rss::physics::Duration valueResponseTime(0.); + valueResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + value.responseTime = valueResponseTime; + + // override member with invalid value + ::ad_rss::physics::Duration invalidInitializedMember(0. - ::ad_rss::physics::Duration::cPrecisionValue); + value.responseTime = invalidInitializedMember; + ASSERT_FALSE(withinValidInputRange(value)); +} + +TEST(RssDynamicsValidInputRangeTests, testValidInputRangeResponseTimeTooBig) +{ + ::ad_rss::world::RssDynamics value; + ::ad_rss::world::LongitudinalRssAccelerationValues valueAlphaLon; + ::ad_rss::physics::Acceleration valueAlphaLonAccelMax(-1e2); + valueAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueAlphaLon.accelMax = valueAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueAlphaLonBrakeMax(-1e2); + valueAlphaLon.brakeMax = valueAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueAlphaLonBrakeMin(-1e2); + valueAlphaLon.brakeMin = valueAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueAlphaLonBrakeMinCorrect(-1e2); + valueAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueAlphaLon.brakeMinCorrect = valueAlphaLonBrakeMinCorrect; + valueAlphaLon.brakeMin = valueAlphaLon.brakeMinCorrect; + valueAlphaLon.brakeMax = valueAlphaLon.brakeMin; + valueAlphaLon.brakeMin = valueAlphaLon.brakeMax; + valueAlphaLon.brakeMinCorrect = valueAlphaLon.brakeMin; + value.alphaLon = valueAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueAlphaLat; + ::ad_rss::physics::Acceleration valueAlphaLatAccelMax(-1e2); + valueAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueAlphaLat.accelMax = valueAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueAlphaLatBrakeMin(-1e2); + valueAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueAlphaLat.brakeMin = valueAlphaLatBrakeMin; + value.alphaLat = valueAlphaLat; + ::ad_rss::physics::Distance valueLateralFluctuationMargin(0.); + value.lateralFluctuationMargin = valueLateralFluctuationMargin; + ::ad_rss::physics::Duration valueResponseTime(0.); + valueResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + value.responseTime = valueResponseTime; + + // override member with invalid value + ::ad_rss::physics::Duration invalidInitializedMember(100. * 1.1); + invalidInitializedMember = ::ad_rss::physics::Duration(10. * 1.1); // set to valid value within struct + value.responseTime = invalidInitializedMember; + ASSERT_FALSE(withinValidInputRange(value)); +} + +TEST(RssDynamicsValidInputRangeTests, testValidInputRangeresponseTimeDefault) +{ + ::ad_rss::world::RssDynamics value; + ::ad_rss::physics::Duration valueDefault; + value.responseTime = valueDefault; + ASSERT_FALSE(withinValidInputRange(value)); +} diff --git a/tests/generated/world/SceneTests.cpp b/tests/generated/world/SceneTests.cpp index b8887b39ff..4308510e6f 100644 --- a/tests/generated/world/SceneTests.cpp +++ b/tests/generated/world/SceneTests.cpp @@ -48,47 +48,29 @@ class SceneTests : public testing::Test ::ad_rss::world::Scene value; ::ad_rss::situation::SituationType valueSituationType(::ad_rss::situation::SituationType::NotRelevant); value.situationType = valueSituationType; - ::ad_rss::world::RoadArea valueEgoVehicleRoad; - value.egoVehicleRoad = valueEgoVehicleRoad; - ::ad_rss::world::RoadArea valueIntersectingRoad; - value.intersectingRoad = valueIntersectingRoad; + ::ad_rss::world::Object valueEgoVehicle; + ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueEgoVehicle.objectId = valueEgoVehicleObjectId; + ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::Invalid); + valueEgoVehicle.objectType = valueEgoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; + valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; + ::ad_rss::world::Velocity valueEgoVehicleVelocity; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); + valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); + valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; + valueEgoVehicle.velocity = valueEgoVehicleVelocity; + value.egoVehicle = valueEgoVehicle; ::ad_rss::world::Object valueObject; ::ad_rss::world::ObjectId valueObjectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); valueObject.objectId = valueObjectObjectId; - ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::EgoVehicle); + ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::Invalid); valueObject.objectType = valueObjectObjectType; ::ad_rss::world::OccupiedRegionVector valueObjectOccupiedRegions; valueObject.occupiedRegions = valueObjectOccupiedRegions; - ::ad_rss::world::Dynamics valueObjectDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonAccelMax(-1e2); - valueObjectDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLon.accelMax = valueObjectDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMax(-1e2); - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMin(-1e2); - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueObjectDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLonBrakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMax; - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamics.alphaLon = valueObjectDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatAccelMax(-1e2); - valueObjectDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLat.accelMax = valueObjectDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatBrakeMin(-1e2); - valueObjectDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLat.brakeMin = valueObjectDynamicsAlphaLatBrakeMin; - valueObjectDynamics.alphaLat = valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Distance valueObjectDynamicsLateralFluctuationMargin(0.); - valueObjectDynamics.lateralFluctuationMargin = valueObjectDynamicsLateralFluctuationMargin; - valueObject.dynamics = valueObjectDynamics; ::ad_rss::world::Velocity valueObjectVelocity; ::ad_rss::physics::Speed valueObjectVelocitySpeedLon(-100.); valueObjectVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct @@ -97,11 +79,45 @@ class SceneTests : public testing::Test valueObjectVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueObjectVelocity.speedLat = valueObjectVelocitySpeedLat; valueObject.velocity = valueObjectVelocity; - ::ad_rss::physics::Duration valueObjectResponseTime(0.); - valueObjectResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueObject.responseTime = valueObjectResponseTime; value.object = valueObject; + ::ad_rss::world::RssDynamics valueObjectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonAccelMax(-1e2); + valueObjectRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.accelMax = valueObjectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMax(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueObjectRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLonBrakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMax; + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamics.alphaLon = valueObjectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatAccelMax(-1e2); + valueObjectRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.accelMax = valueObjectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.brakeMin = valueObjectRssDynamicsAlphaLatBrakeMin; + valueObjectRssDynamics.alphaLat = valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueObjectRssDynamicsLateralFluctuationMargin(0.); + valueObjectRssDynamics.lateralFluctuationMargin = valueObjectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueObjectRssDynamicsResponseTime(0.); + valueObjectRssDynamicsResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamics.responseTime = valueObjectRssDynamicsResponseTime; + value.objectRssDynamics = valueObjectRssDynamics; + ::ad_rss::world::RoadArea valueIntersectingRoad; + value.intersectingRoad = valueIntersectingRoad; + ::ad_rss::world::RoadArea valueEgoVehicleRoad; + value.egoVehicleRoad = valueEgoVehicleRoad; mValue = value; } @@ -154,39 +170,127 @@ TEST_F(SceneTests, comparisonOperatorSituationTypeDiffers) EXPECT_TRUE(valueA != valueB); } -TEST_F(SceneTests, comparisonOperatorEgoVehicleRoadDiffers) +TEST_F(SceneTests, comparisonOperatorEgoVehicleDiffers) { ::ad_rss::world::Scene valueA = mValue; - ::ad_rss::world::RoadArea egoVehicleRoad; - ::ad_rss::world::RoadSegment egoVehicleRoadElement; - ::ad_rss::world::LaneSegment egoVehicleRoadElementElement; - ::ad_rss::world::LaneSegmentId egoVehicleRoadElementElementId( + ::ad_rss::world::Object egoVehicle; + ::ad_rss::world::ObjectId egoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::max()); + egoVehicle.objectId = egoVehicleObjectId; + ::ad_rss::world::ObjectType egoVehicleObjectType(::ad_rss::world::ObjectType::ArtificialObject); + egoVehicle.objectType = egoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector egoVehicleOccupiedRegions; + ::ad_rss::world::OccupiedRegion egoVehicleOccupiedRegionsElement; + ::ad_rss::world::LaneSegmentId egoVehicleOccupiedRegionsElementSegmentId( std::numeric_limits<::ad_rss::world::LaneSegmentId>::max()); - egoVehicleRoadElementElement.id = egoVehicleRoadElementElementId; - ::ad_rss::world::LaneSegmentType egoVehicleRoadElementElementType(::ad_rss::world::LaneSegmentType::Intersection); - egoVehicleRoadElementElement.type = egoVehicleRoadElementElementType; - ::ad_rss::world::LaneDrivingDirection egoVehicleRoadElementElementDrivingDirection( - ::ad_rss::world::LaneDrivingDirection::Negative); - egoVehicleRoadElementElement.drivingDirection = egoVehicleRoadElementElementDrivingDirection; - ::ad_rss::physics::MetricRange egoVehicleRoadElementElementLength; - ::ad_rss::physics::Distance egoVehicleRoadElementElementLengthMinimum(1e6); - egoVehicleRoadElementElementLength.minimum = egoVehicleRoadElementElementLengthMinimum; - ::ad_rss::physics::Distance egoVehicleRoadElementElementLengthMaximum(1e6); - egoVehicleRoadElementElementLength.maximum = egoVehicleRoadElementElementLengthMaximum; - egoVehicleRoadElementElementLength.maximum = egoVehicleRoadElementElementLength.minimum; - egoVehicleRoadElementElementLength.minimum = egoVehicleRoadElementElementLength.maximum; - egoVehicleRoadElementElement.length = egoVehicleRoadElementElementLength; - ::ad_rss::physics::MetricRange egoVehicleRoadElementElementWidth; - ::ad_rss::physics::Distance egoVehicleRoadElementElementWidthMinimum(1e6); - egoVehicleRoadElementElementWidth.minimum = egoVehicleRoadElementElementWidthMinimum; - ::ad_rss::physics::Distance egoVehicleRoadElementElementWidthMaximum(1e6); - egoVehicleRoadElementElementWidth.maximum = egoVehicleRoadElementElementWidthMaximum; - egoVehicleRoadElementElementWidth.maximum = egoVehicleRoadElementElementWidth.minimum; - egoVehicleRoadElementElementWidth.minimum = egoVehicleRoadElementElementWidth.maximum; - egoVehicleRoadElementElement.width = egoVehicleRoadElementElementWidth; - egoVehicleRoadElement.resize(1 + 1, egoVehicleRoadElementElement); - egoVehicleRoad.resize(0 + 1, egoVehicleRoadElement); - valueA.egoVehicleRoad = egoVehicleRoad; + egoVehicleOccupiedRegionsElement.segmentId = egoVehicleOccupiedRegionsElementSegmentId; + ::ad_rss::physics::ParametricRange egoVehicleOccupiedRegionsElementLonRange; + ::ad_rss::physics::ParametricValue egoVehicleOccupiedRegionsElementLonRangeMinimum(1.); + egoVehicleOccupiedRegionsElementLonRange.minimum = egoVehicleOccupiedRegionsElementLonRangeMinimum; + ::ad_rss::physics::ParametricValue egoVehicleOccupiedRegionsElementLonRangeMaximum(1.); + egoVehicleOccupiedRegionsElementLonRange.maximum = egoVehicleOccupiedRegionsElementLonRangeMaximum; + egoVehicleOccupiedRegionsElementLonRange.maximum = egoVehicleOccupiedRegionsElementLonRange.minimum; + egoVehicleOccupiedRegionsElementLonRange.minimum = egoVehicleOccupiedRegionsElementLonRange.maximum; + egoVehicleOccupiedRegionsElement.lonRange = egoVehicleOccupiedRegionsElementLonRange; + ::ad_rss::physics::ParametricRange egoVehicleOccupiedRegionsElementLatRange; + ::ad_rss::physics::ParametricValue egoVehicleOccupiedRegionsElementLatRangeMinimum(1.); + egoVehicleOccupiedRegionsElementLatRange.minimum = egoVehicleOccupiedRegionsElementLatRangeMinimum; + ::ad_rss::physics::ParametricValue egoVehicleOccupiedRegionsElementLatRangeMaximum(1.); + egoVehicleOccupiedRegionsElementLatRange.maximum = egoVehicleOccupiedRegionsElementLatRangeMaximum; + egoVehicleOccupiedRegionsElementLatRange.maximum = egoVehicleOccupiedRegionsElementLatRange.minimum; + egoVehicleOccupiedRegionsElementLatRange.minimum = egoVehicleOccupiedRegionsElementLatRange.maximum; + egoVehicleOccupiedRegionsElement.latRange = egoVehicleOccupiedRegionsElementLatRange; + egoVehicleOccupiedRegions.resize(0 + 1, egoVehicleOccupiedRegionsElement); + egoVehicle.occupiedRegions = egoVehicleOccupiedRegions; + ::ad_rss::world::Velocity egoVehicleVelocity; + ::ad_rss::physics::Speed egoVehicleVelocitySpeedLon(100.); + egoVehicleVelocity.speedLon = egoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed egoVehicleVelocitySpeedLat(100.); + egoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(10.); // set to valid value within struct + egoVehicleVelocity.speedLat = egoVehicleVelocitySpeedLat; + egoVehicle.velocity = egoVehicleVelocity; + valueA.egoVehicle = egoVehicle; + ::ad_rss::world::Scene valueB = mValue; + + EXPECT_FALSE(valueA == valueB); + EXPECT_TRUE(valueA != valueB); +} + +TEST_F(SceneTests, comparisonOperatorObjectDiffers) +{ + ::ad_rss::world::Scene valueA = mValue; + ::ad_rss::world::Object object; + ::ad_rss::world::ObjectId objectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::max()); + object.objectId = objectObjectId; + ::ad_rss::world::ObjectType objectObjectType(::ad_rss::world::ObjectType::ArtificialObject); + object.objectType = objectObjectType; + ::ad_rss::world::OccupiedRegionVector objectOccupiedRegions; + ::ad_rss::world::OccupiedRegion objectOccupiedRegionsElement; + ::ad_rss::world::LaneSegmentId objectOccupiedRegionsElementSegmentId( + std::numeric_limits<::ad_rss::world::LaneSegmentId>::max()); + objectOccupiedRegionsElement.segmentId = objectOccupiedRegionsElementSegmentId; + ::ad_rss::physics::ParametricRange objectOccupiedRegionsElementLonRange; + ::ad_rss::physics::ParametricValue objectOccupiedRegionsElementLonRangeMinimum(1.); + objectOccupiedRegionsElementLonRange.minimum = objectOccupiedRegionsElementLonRangeMinimum; + ::ad_rss::physics::ParametricValue objectOccupiedRegionsElementLonRangeMaximum(1.); + objectOccupiedRegionsElementLonRange.maximum = objectOccupiedRegionsElementLonRangeMaximum; + objectOccupiedRegionsElementLonRange.maximum = objectOccupiedRegionsElementLonRange.minimum; + objectOccupiedRegionsElementLonRange.minimum = objectOccupiedRegionsElementLonRange.maximum; + objectOccupiedRegionsElement.lonRange = objectOccupiedRegionsElementLonRange; + ::ad_rss::physics::ParametricRange objectOccupiedRegionsElementLatRange; + ::ad_rss::physics::ParametricValue objectOccupiedRegionsElementLatRangeMinimum(1.); + objectOccupiedRegionsElementLatRange.minimum = objectOccupiedRegionsElementLatRangeMinimum; + ::ad_rss::physics::ParametricValue objectOccupiedRegionsElementLatRangeMaximum(1.); + objectOccupiedRegionsElementLatRange.maximum = objectOccupiedRegionsElementLatRangeMaximum; + objectOccupiedRegionsElementLatRange.maximum = objectOccupiedRegionsElementLatRange.minimum; + objectOccupiedRegionsElementLatRange.minimum = objectOccupiedRegionsElementLatRange.maximum; + objectOccupiedRegionsElement.latRange = objectOccupiedRegionsElementLatRange; + objectOccupiedRegions.resize(0 + 1, objectOccupiedRegionsElement); + object.occupiedRegions = objectOccupiedRegions; + ::ad_rss::world::Velocity objectVelocity; + ::ad_rss::physics::Speed objectVelocitySpeedLon(100.); + objectVelocity.speedLon = objectVelocitySpeedLon; + ::ad_rss::physics::Speed objectVelocitySpeedLat(100.); + objectVelocitySpeedLat = ::ad_rss::physics::Speed(10.); // set to valid value within struct + objectVelocity.speedLat = objectVelocitySpeedLat; + object.velocity = objectVelocity; + valueA.object = object; + ::ad_rss::world::Scene valueB = mValue; + + EXPECT_FALSE(valueA == valueB); + EXPECT_TRUE(valueA != valueB); +} + +TEST_F(SceneTests, comparisonOperatorObjectRssDynamicsDiffers) +{ + ::ad_rss::world::Scene valueA = mValue; + ::ad_rss::world::RssDynamics objectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues objectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration objectRssDynamicsAlphaLonAccelMax(1e2); + objectRssDynamicsAlphaLon.accelMax = objectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration objectRssDynamicsAlphaLonBrakeMax(1e2); + objectRssDynamicsAlphaLon.brakeMax = objectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration objectRssDynamicsAlphaLonBrakeMin(1e2); + objectRssDynamicsAlphaLon.brakeMin = objectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration objectRssDynamicsAlphaLonBrakeMinCorrect(1e2); + objectRssDynamicsAlphaLon.brakeMinCorrect = objectRssDynamicsAlphaLonBrakeMinCorrect; + objectRssDynamicsAlphaLon.brakeMax = objectRssDynamicsAlphaLon.brakeMin; + objectRssDynamicsAlphaLon.brakeMin = objectRssDynamicsAlphaLon.brakeMinCorrect; + objectRssDynamicsAlphaLon.brakeMinCorrect = objectRssDynamicsAlphaLon.brakeMin; + objectRssDynamicsAlphaLon.brakeMin = objectRssDynamicsAlphaLon.brakeMax; + objectRssDynamics.alphaLon = objectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues objectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration objectRssDynamicsAlphaLatAccelMax(1e2); + objectRssDynamicsAlphaLat.accelMax = objectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration objectRssDynamicsAlphaLatBrakeMin(1e2); + objectRssDynamicsAlphaLat.brakeMin = objectRssDynamicsAlphaLatBrakeMin; + objectRssDynamics.alphaLat = objectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance objectRssDynamicsLateralFluctuationMargin(1e6); + objectRssDynamicsLateralFluctuationMargin = ::ad_rss::physics::Distance(1.); // set to valid value within struct + objectRssDynamics.lateralFluctuationMargin = objectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration objectRssDynamicsResponseTime(100.); + objectRssDynamicsResponseTime = ::ad_rss::physics::Duration(10.); // set to valid value within struct + objectRssDynamics.responseTime = objectRssDynamicsResponseTime; + valueA.objectRssDynamics = objectRssDynamics; ::ad_rss::world::Scene valueB = mValue; EXPECT_FALSE(valueA == valueB); @@ -232,73 +336,39 @@ TEST_F(SceneTests, comparisonOperatorIntersectingRoadDiffers) EXPECT_TRUE(valueA != valueB); } -TEST_F(SceneTests, comparisonOperatorObjectDiffers) +TEST_F(SceneTests, comparisonOperatorEgoVehicleRoadDiffers) { ::ad_rss::world::Scene valueA = mValue; - ::ad_rss::world::Object object; - ::ad_rss::world::ObjectId objectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::max()); - object.objectId = objectObjectId; - ::ad_rss::world::ObjectType objectObjectType(::ad_rss::world::ObjectType::ArtificialObject); - object.objectType = objectObjectType; - ::ad_rss::world::OccupiedRegionVector objectOccupiedRegions; - ::ad_rss::world::OccupiedRegion objectOccupiedRegionsElement; - ::ad_rss::world::LaneSegmentId objectOccupiedRegionsElementSegmentId( + ::ad_rss::world::RoadArea egoVehicleRoad; + ::ad_rss::world::RoadSegment egoVehicleRoadElement; + ::ad_rss::world::LaneSegment egoVehicleRoadElementElement; + ::ad_rss::world::LaneSegmentId egoVehicleRoadElementElementId( std::numeric_limits<::ad_rss::world::LaneSegmentId>::max()); - objectOccupiedRegionsElement.segmentId = objectOccupiedRegionsElementSegmentId; - ::ad_rss::physics::ParametricRange objectOccupiedRegionsElementLonRange; - ::ad_rss::physics::ParametricValue objectOccupiedRegionsElementLonRangeMinimum(1.); - objectOccupiedRegionsElementLonRange.minimum = objectOccupiedRegionsElementLonRangeMinimum; - ::ad_rss::physics::ParametricValue objectOccupiedRegionsElementLonRangeMaximum(1.); - objectOccupiedRegionsElementLonRange.maximum = objectOccupiedRegionsElementLonRangeMaximum; - objectOccupiedRegionsElementLonRange.maximum = objectOccupiedRegionsElementLonRange.minimum; - objectOccupiedRegionsElementLonRange.minimum = objectOccupiedRegionsElementLonRange.maximum; - objectOccupiedRegionsElement.lonRange = objectOccupiedRegionsElementLonRange; - ::ad_rss::physics::ParametricRange objectOccupiedRegionsElementLatRange; - ::ad_rss::physics::ParametricValue objectOccupiedRegionsElementLatRangeMinimum(1.); - objectOccupiedRegionsElementLatRange.minimum = objectOccupiedRegionsElementLatRangeMinimum; - ::ad_rss::physics::ParametricValue objectOccupiedRegionsElementLatRangeMaximum(1.); - objectOccupiedRegionsElementLatRange.maximum = objectOccupiedRegionsElementLatRangeMaximum; - objectOccupiedRegionsElementLatRange.maximum = objectOccupiedRegionsElementLatRange.minimum; - objectOccupiedRegionsElementLatRange.minimum = objectOccupiedRegionsElementLatRange.maximum; - objectOccupiedRegionsElement.latRange = objectOccupiedRegionsElementLatRange; - objectOccupiedRegions.resize(0 + 1, objectOccupiedRegionsElement); - object.occupiedRegions = objectOccupiedRegions; - ::ad_rss::world::Dynamics objectDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues objectDynamicsAlphaLon; - ::ad_rss::physics::Acceleration objectDynamicsAlphaLonAccelMax(1e2); - objectDynamicsAlphaLon.accelMax = objectDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration objectDynamicsAlphaLonBrakeMax(1e2); - objectDynamicsAlphaLon.brakeMax = objectDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration objectDynamicsAlphaLonBrakeMin(1e2); - objectDynamicsAlphaLon.brakeMin = objectDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration objectDynamicsAlphaLonBrakeMinCorrect(1e2); - objectDynamicsAlphaLon.brakeMinCorrect = objectDynamicsAlphaLonBrakeMinCorrect; - objectDynamicsAlphaLon.brakeMax = objectDynamicsAlphaLon.brakeMin; - objectDynamicsAlphaLon.brakeMin = objectDynamicsAlphaLon.brakeMinCorrect; - objectDynamicsAlphaLon.brakeMinCorrect = objectDynamicsAlphaLon.brakeMin; - objectDynamicsAlphaLon.brakeMin = objectDynamicsAlphaLon.brakeMax; - objectDynamics.alphaLon = objectDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues objectDynamicsAlphaLat; - ::ad_rss::physics::Acceleration objectDynamicsAlphaLatAccelMax(1e2); - objectDynamicsAlphaLat.accelMax = objectDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration objectDynamicsAlphaLatBrakeMin(1e2); - objectDynamicsAlphaLat.brakeMin = objectDynamicsAlphaLatBrakeMin; - objectDynamics.alphaLat = objectDynamicsAlphaLat; - ::ad_rss::physics::Distance objectDynamicsLateralFluctuationMargin(1e6); - objectDynamicsLateralFluctuationMargin = ::ad_rss::physics::Distance(1.); // set to valid value within struct - objectDynamics.lateralFluctuationMargin = objectDynamicsLateralFluctuationMargin; - object.dynamics = objectDynamics; - ::ad_rss::world::Velocity objectVelocity; - ::ad_rss::physics::Speed objectVelocitySpeedLon(100.); - objectVelocity.speedLon = objectVelocitySpeedLon; - ::ad_rss::physics::Speed objectVelocitySpeedLat(100.); - objectVelocitySpeedLat = ::ad_rss::physics::Speed(10.); // set to valid value within struct - objectVelocity.speedLat = objectVelocitySpeedLat; - object.velocity = objectVelocity; - ::ad_rss::physics::Duration objectResponseTime(100.); - objectResponseTime = ::ad_rss::physics::Duration(10.); // set to valid value within struct - object.responseTime = objectResponseTime; - valueA.object = object; + egoVehicleRoadElementElement.id = egoVehicleRoadElementElementId; + ::ad_rss::world::LaneSegmentType egoVehicleRoadElementElementType(::ad_rss::world::LaneSegmentType::Intersection); + egoVehicleRoadElementElement.type = egoVehicleRoadElementElementType; + ::ad_rss::world::LaneDrivingDirection egoVehicleRoadElementElementDrivingDirection( + ::ad_rss::world::LaneDrivingDirection::Negative); + egoVehicleRoadElementElement.drivingDirection = egoVehicleRoadElementElementDrivingDirection; + ::ad_rss::physics::MetricRange egoVehicleRoadElementElementLength; + ::ad_rss::physics::Distance egoVehicleRoadElementElementLengthMinimum(1e6); + egoVehicleRoadElementElementLength.minimum = egoVehicleRoadElementElementLengthMinimum; + ::ad_rss::physics::Distance egoVehicleRoadElementElementLengthMaximum(1e6); + egoVehicleRoadElementElementLength.maximum = egoVehicleRoadElementElementLengthMaximum; + egoVehicleRoadElementElementLength.maximum = egoVehicleRoadElementElementLength.minimum; + egoVehicleRoadElementElementLength.minimum = egoVehicleRoadElementElementLength.maximum; + egoVehicleRoadElementElement.length = egoVehicleRoadElementElementLength; + ::ad_rss::physics::MetricRange egoVehicleRoadElementElementWidth; + ::ad_rss::physics::Distance egoVehicleRoadElementElementWidthMinimum(1e6); + egoVehicleRoadElementElementWidth.minimum = egoVehicleRoadElementElementWidthMinimum; + ::ad_rss::physics::Distance egoVehicleRoadElementElementWidthMaximum(1e6); + egoVehicleRoadElementElementWidth.maximum = egoVehicleRoadElementElementWidthMaximum; + egoVehicleRoadElementElementWidth.maximum = egoVehicleRoadElementElementWidth.minimum; + egoVehicleRoadElementElementWidth.minimum = egoVehicleRoadElementElementWidth.maximum; + egoVehicleRoadElementElement.width = egoVehicleRoadElementElementWidth; + egoVehicleRoadElement.resize(1 + 1, egoVehicleRoadElementElement); + egoVehicleRoad.resize(0 + 1, egoVehicleRoadElement); + valueA.egoVehicleRoad = egoVehicleRoad; ::ad_rss::world::Scene valueB = mValue; EXPECT_FALSE(valueA == valueB); diff --git a/tests/generated/world/SceneValidInputRangeTests.cpp b/tests/generated/world/SceneValidInputRangeTests.cpp index 0cb084ab84..514fd39ad7 100644 --- a/tests/generated/world/SceneValidInputRangeTests.cpp +++ b/tests/generated/world/SceneValidInputRangeTests.cpp @@ -46,47 +46,29 @@ TEST(SceneValidInputRangeTests, testValidInputRange) ::ad_rss::world::Scene value; ::ad_rss::situation::SituationType valueSituationType(::ad_rss::situation::SituationType::NotRelevant); value.situationType = valueSituationType; - ::ad_rss::world::RoadArea valueEgoVehicleRoad; - value.egoVehicleRoad = valueEgoVehicleRoad; - ::ad_rss::world::RoadArea valueIntersectingRoad; - value.intersectingRoad = valueIntersectingRoad; + ::ad_rss::world::Object valueEgoVehicle; + ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueEgoVehicle.objectId = valueEgoVehicleObjectId; + ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::Invalid); + valueEgoVehicle.objectType = valueEgoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; + valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; + ::ad_rss::world::Velocity valueEgoVehicleVelocity; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); + valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); + valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; + valueEgoVehicle.velocity = valueEgoVehicleVelocity; + value.egoVehicle = valueEgoVehicle; ::ad_rss::world::Object valueObject; ::ad_rss::world::ObjectId valueObjectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); valueObject.objectId = valueObjectObjectId; - ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::EgoVehicle); + ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::Invalid); valueObject.objectType = valueObjectObjectType; ::ad_rss::world::OccupiedRegionVector valueObjectOccupiedRegions; valueObject.occupiedRegions = valueObjectOccupiedRegions; - ::ad_rss::world::Dynamics valueObjectDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonAccelMax(-1e2); - valueObjectDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLon.accelMax = valueObjectDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMax(-1e2); - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMin(-1e2); - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueObjectDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLonBrakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMax; - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamics.alphaLon = valueObjectDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatAccelMax(-1e2); - valueObjectDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLat.accelMax = valueObjectDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatBrakeMin(-1e2); - valueObjectDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLat.brakeMin = valueObjectDynamicsAlphaLatBrakeMin; - valueObjectDynamics.alphaLat = valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Distance valueObjectDynamicsLateralFluctuationMargin(0.); - valueObjectDynamics.lateralFluctuationMargin = valueObjectDynamicsLateralFluctuationMargin; - valueObject.dynamics = valueObjectDynamics; ::ad_rss::world::Velocity valueObjectVelocity; ::ad_rss::physics::Speed valueObjectVelocitySpeedLon(-100.); valueObjectVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct @@ -95,11 +77,45 @@ TEST(SceneValidInputRangeTests, testValidInputRange) valueObjectVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueObjectVelocity.speedLat = valueObjectVelocitySpeedLat; valueObject.velocity = valueObjectVelocity; - ::ad_rss::physics::Duration valueObjectResponseTime(0.); - valueObjectResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueObject.responseTime = valueObjectResponseTime; value.object = valueObject; + ::ad_rss::world::RssDynamics valueObjectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonAccelMax(-1e2); + valueObjectRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.accelMax = valueObjectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMax(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueObjectRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLonBrakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMax; + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamics.alphaLon = valueObjectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatAccelMax(-1e2); + valueObjectRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.accelMax = valueObjectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.brakeMin = valueObjectRssDynamicsAlphaLatBrakeMin; + valueObjectRssDynamics.alphaLat = valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueObjectRssDynamicsLateralFluctuationMargin(0.); + valueObjectRssDynamics.lateralFluctuationMargin = valueObjectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueObjectRssDynamicsResponseTime(0.); + valueObjectRssDynamicsResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamics.responseTime = valueObjectRssDynamicsResponseTime; + value.objectRssDynamics = valueObjectRssDynamics; + ::ad_rss::world::RoadArea valueIntersectingRoad; + value.intersectingRoad = valueIntersectingRoad; + ::ad_rss::world::RoadArea valueEgoVehicleRoad; + value.egoVehicleRoad = valueEgoVehicleRoad; ASSERT_TRUE(withinValidInputRange(value)); } @@ -108,47 +124,29 @@ TEST(SceneValidInputRangeTests, testValidInputRangeSituationTypeTooSmall) ::ad_rss::world::Scene value; ::ad_rss::situation::SituationType valueSituationType(::ad_rss::situation::SituationType::NotRelevant); value.situationType = valueSituationType; - ::ad_rss::world::RoadArea valueEgoVehicleRoad; - value.egoVehicleRoad = valueEgoVehicleRoad; - ::ad_rss::world::RoadArea valueIntersectingRoad; - value.intersectingRoad = valueIntersectingRoad; + ::ad_rss::world::Object valueEgoVehicle; + ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueEgoVehicle.objectId = valueEgoVehicleObjectId; + ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::Invalid); + valueEgoVehicle.objectType = valueEgoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; + valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; + ::ad_rss::world::Velocity valueEgoVehicleVelocity; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); + valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); + valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; + valueEgoVehicle.velocity = valueEgoVehicleVelocity; + value.egoVehicle = valueEgoVehicle; ::ad_rss::world::Object valueObject; ::ad_rss::world::ObjectId valueObjectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); valueObject.objectId = valueObjectObjectId; - ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::EgoVehicle); + ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::Invalid); valueObject.objectType = valueObjectObjectType; ::ad_rss::world::OccupiedRegionVector valueObjectOccupiedRegions; valueObject.occupiedRegions = valueObjectOccupiedRegions; - ::ad_rss::world::Dynamics valueObjectDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonAccelMax(-1e2); - valueObjectDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLon.accelMax = valueObjectDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMax(-1e2); - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMin(-1e2); - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueObjectDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLonBrakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMax; - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamics.alphaLon = valueObjectDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatAccelMax(-1e2); - valueObjectDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLat.accelMax = valueObjectDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatBrakeMin(-1e2); - valueObjectDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLat.brakeMin = valueObjectDynamicsAlphaLatBrakeMin; - valueObjectDynamics.alphaLat = valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Distance valueObjectDynamicsLateralFluctuationMargin(0.); - valueObjectDynamics.lateralFluctuationMargin = valueObjectDynamicsLateralFluctuationMargin; - valueObject.dynamics = valueObjectDynamics; ::ad_rss::world::Velocity valueObjectVelocity; ::ad_rss::physics::Speed valueObjectVelocitySpeedLon(-100.); valueObjectVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct @@ -157,11 +155,45 @@ TEST(SceneValidInputRangeTests, testValidInputRangeSituationTypeTooSmall) valueObjectVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueObjectVelocity.speedLat = valueObjectVelocitySpeedLat; valueObject.velocity = valueObjectVelocity; - ::ad_rss::physics::Duration valueObjectResponseTime(0.); - valueObjectResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueObject.responseTime = valueObjectResponseTime; value.object = valueObject; + ::ad_rss::world::RssDynamics valueObjectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonAccelMax(-1e2); + valueObjectRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.accelMax = valueObjectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMax(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueObjectRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLonBrakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMax; + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamics.alphaLon = valueObjectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatAccelMax(-1e2); + valueObjectRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.accelMax = valueObjectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.brakeMin = valueObjectRssDynamicsAlphaLatBrakeMin; + valueObjectRssDynamics.alphaLat = valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueObjectRssDynamicsLateralFluctuationMargin(0.); + valueObjectRssDynamics.lateralFluctuationMargin = valueObjectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueObjectRssDynamicsResponseTime(0.); + valueObjectRssDynamicsResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamics.responseTime = valueObjectRssDynamicsResponseTime; + value.objectRssDynamics = valueObjectRssDynamics; + ::ad_rss::world::RoadArea valueIntersectingRoad; + value.intersectingRoad = valueIntersectingRoad; + ::ad_rss::world::RoadArea valueEgoVehicleRoad; + value.egoVehicleRoad = valueEgoVehicleRoad; // override member with invalid value ::ad_rss::situation::SituationType invalidInitializedMember(static_cast<::ad_rss::situation::SituationType>(-1)); @@ -174,47 +206,279 @@ TEST(SceneValidInputRangeTests, testValidInputRangeSituationTypeTooBig) ::ad_rss::world::Scene value; ::ad_rss::situation::SituationType valueSituationType(::ad_rss::situation::SituationType::NotRelevant); value.situationType = valueSituationType; + ::ad_rss::world::Object valueEgoVehicle; + ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueEgoVehicle.objectId = valueEgoVehicleObjectId; + ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::Invalid); + valueEgoVehicle.objectType = valueEgoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; + valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; + ::ad_rss::world::Velocity valueEgoVehicleVelocity; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); + valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); + valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; + valueEgoVehicle.velocity = valueEgoVehicleVelocity; + value.egoVehicle = valueEgoVehicle; + ::ad_rss::world::Object valueObject; + ::ad_rss::world::ObjectId valueObjectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueObject.objectId = valueObjectObjectId; + ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::Invalid); + valueObject.objectType = valueObjectObjectType; + ::ad_rss::world::OccupiedRegionVector valueObjectOccupiedRegions; + valueObject.occupiedRegions = valueObjectOccupiedRegions; + ::ad_rss::world::Velocity valueObjectVelocity; + ::ad_rss::physics::Speed valueObjectVelocitySpeedLon(-100.); + valueObjectVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueObjectVelocity.speedLon = valueObjectVelocitySpeedLon; + ::ad_rss::physics::Speed valueObjectVelocitySpeedLat(-100.); + valueObjectVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueObjectVelocity.speedLat = valueObjectVelocitySpeedLat; + valueObject.velocity = valueObjectVelocity; + value.object = valueObject; + ::ad_rss::world::RssDynamics valueObjectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonAccelMax(-1e2); + valueObjectRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.accelMax = valueObjectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMax(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueObjectRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLonBrakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMax; + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamics.alphaLon = valueObjectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatAccelMax(-1e2); + valueObjectRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.accelMax = valueObjectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.brakeMin = valueObjectRssDynamicsAlphaLatBrakeMin; + valueObjectRssDynamics.alphaLat = valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueObjectRssDynamicsLateralFluctuationMargin(0.); + valueObjectRssDynamics.lateralFluctuationMargin = valueObjectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueObjectRssDynamicsResponseTime(0.); + valueObjectRssDynamicsResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamics.responseTime = valueObjectRssDynamicsResponseTime; + value.objectRssDynamics = valueObjectRssDynamics; + ::ad_rss::world::RoadArea valueIntersectingRoad; + value.intersectingRoad = valueIntersectingRoad; ::ad_rss::world::RoadArea valueEgoVehicleRoad; value.egoVehicleRoad = valueEgoVehicleRoad; + + // override member with invalid value + ::ad_rss::situation::SituationType invalidInitializedMember(static_cast<::ad_rss::situation::SituationType>(-1)); + value.situationType = invalidInitializedMember; + ASSERT_FALSE(withinValidInputRange(value)); +} + +TEST(SceneValidInputRangeTests, testValidInputRangeEgoVehicleTooSmall) +{ + ::ad_rss::world::Scene value; + ::ad_rss::situation::SituationType valueSituationType(::ad_rss::situation::SituationType::NotRelevant); + value.situationType = valueSituationType; + ::ad_rss::world::Object valueEgoVehicle; + ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueEgoVehicle.objectId = valueEgoVehicleObjectId; + ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::Invalid); + valueEgoVehicle.objectType = valueEgoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; + valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; + ::ad_rss::world::Velocity valueEgoVehicleVelocity; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); + valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); + valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; + valueEgoVehicle.velocity = valueEgoVehicleVelocity; + value.egoVehicle = valueEgoVehicle; + ::ad_rss::world::Object valueObject; + ::ad_rss::world::ObjectId valueObjectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueObject.objectId = valueObjectObjectId; + ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::Invalid); + valueObject.objectType = valueObjectObjectType; + ::ad_rss::world::OccupiedRegionVector valueObjectOccupiedRegions; + valueObject.occupiedRegions = valueObjectOccupiedRegions; + ::ad_rss::world::Velocity valueObjectVelocity; + ::ad_rss::physics::Speed valueObjectVelocitySpeedLon(-100.); + valueObjectVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueObjectVelocity.speedLon = valueObjectVelocitySpeedLon; + ::ad_rss::physics::Speed valueObjectVelocitySpeedLat(-100.); + valueObjectVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueObjectVelocity.speedLat = valueObjectVelocitySpeedLat; + valueObject.velocity = valueObjectVelocity; + value.object = valueObject; + ::ad_rss::world::RssDynamics valueObjectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonAccelMax(-1e2); + valueObjectRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.accelMax = valueObjectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMax(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueObjectRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLonBrakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMax; + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamics.alphaLon = valueObjectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatAccelMax(-1e2); + valueObjectRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.accelMax = valueObjectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.brakeMin = valueObjectRssDynamicsAlphaLatBrakeMin; + valueObjectRssDynamics.alphaLat = valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueObjectRssDynamicsLateralFluctuationMargin(0.); + valueObjectRssDynamics.lateralFluctuationMargin = valueObjectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueObjectRssDynamicsResponseTime(0.); + valueObjectRssDynamicsResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamics.responseTime = valueObjectRssDynamicsResponseTime; + value.objectRssDynamics = valueObjectRssDynamics; ::ad_rss::world::RoadArea valueIntersectingRoad; value.intersectingRoad = valueIntersectingRoad; + ::ad_rss::world::RoadArea valueEgoVehicleRoad; + value.egoVehicleRoad = valueEgoVehicleRoad; + + // override member with invalid value + ::ad_rss::world::Object invalidInitializedMember; + ::ad_rss::world::ObjectType invalidInitializedMemberObjectType(static_cast<::ad_rss::world::ObjectType>(-1)); + invalidInitializedMember.objectType = invalidInitializedMemberObjectType; + value.egoVehicle = invalidInitializedMember; + ASSERT_FALSE(withinValidInputRange(value)); +} + +TEST(SceneValidInputRangeTests, testValidInputRangeEgoVehicleTooBig) +{ + ::ad_rss::world::Scene value; + ::ad_rss::situation::SituationType valueSituationType(::ad_rss::situation::SituationType::NotRelevant); + value.situationType = valueSituationType; + ::ad_rss::world::Object valueEgoVehicle; + ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueEgoVehicle.objectId = valueEgoVehicleObjectId; + ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::Invalid); + valueEgoVehicle.objectType = valueEgoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; + valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; + ::ad_rss::world::Velocity valueEgoVehicleVelocity; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); + valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); + valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; + valueEgoVehicle.velocity = valueEgoVehicleVelocity; + value.egoVehicle = valueEgoVehicle; ::ad_rss::world::Object valueObject; ::ad_rss::world::ObjectId valueObjectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); valueObject.objectId = valueObjectObjectId; - ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::EgoVehicle); + ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::Invalid); valueObject.objectType = valueObjectObjectType; ::ad_rss::world::OccupiedRegionVector valueObjectOccupiedRegions; valueObject.occupiedRegions = valueObjectOccupiedRegions; - ::ad_rss::world::Dynamics valueObjectDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonAccelMax(-1e2); - valueObjectDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLon.accelMax = valueObjectDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMax(-1e2); - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMin(-1e2); - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueObjectDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + ::ad_rss::world::Velocity valueObjectVelocity; + ::ad_rss::physics::Speed valueObjectVelocitySpeedLon(-100.); + valueObjectVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueObjectVelocity.speedLon = valueObjectVelocitySpeedLon; + ::ad_rss::physics::Speed valueObjectVelocitySpeedLat(-100.); + valueObjectVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueObjectVelocity.speedLat = valueObjectVelocitySpeedLat; + valueObject.velocity = valueObjectVelocity; + value.object = valueObject; + ::ad_rss::world::RssDynamics valueObjectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonAccelMax(-1e2); + valueObjectRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.accelMax = valueObjectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMax(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueObjectRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLonBrakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMax; - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamics.alphaLon = valueObjectDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatAccelMax(-1e2); - valueObjectDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLat.accelMax = valueObjectDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatBrakeMin(-1e2); - valueObjectDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLonBrakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMax; + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamics.alphaLon = valueObjectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatAccelMax(-1e2); + valueObjectRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.accelMax = valueObjectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLat.brakeMin = valueObjectDynamicsAlphaLatBrakeMin; - valueObjectDynamics.alphaLat = valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Distance valueObjectDynamicsLateralFluctuationMargin(0.); - valueObjectDynamics.lateralFluctuationMargin = valueObjectDynamicsLateralFluctuationMargin; - valueObject.dynamics = valueObjectDynamics; + valueObjectRssDynamicsAlphaLat.brakeMin = valueObjectRssDynamicsAlphaLatBrakeMin; + valueObjectRssDynamics.alphaLat = valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueObjectRssDynamicsLateralFluctuationMargin(0.); + valueObjectRssDynamics.lateralFluctuationMargin = valueObjectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueObjectRssDynamicsResponseTime(0.); + valueObjectRssDynamicsResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamics.responseTime = valueObjectRssDynamicsResponseTime; + value.objectRssDynamics = valueObjectRssDynamics; + ::ad_rss::world::RoadArea valueIntersectingRoad; + value.intersectingRoad = valueIntersectingRoad; + ::ad_rss::world::RoadArea valueEgoVehicleRoad; + value.egoVehicleRoad = valueEgoVehicleRoad; + + // override member with invalid value + ::ad_rss::world::Object invalidInitializedMember; + ::ad_rss::world::ObjectType invalidInitializedMemberObjectType(static_cast<::ad_rss::world::ObjectType>(-1)); + invalidInitializedMember.objectType = invalidInitializedMemberObjectType; + value.egoVehicle = invalidInitializedMember; + ASSERT_FALSE(withinValidInputRange(value)); +} + +TEST(SceneValidInputRangeTests, testValidInputRangeObjectTooSmall) +{ + ::ad_rss::world::Scene value; + ::ad_rss::situation::SituationType valueSituationType(::ad_rss::situation::SituationType::NotRelevant); + value.situationType = valueSituationType; + ::ad_rss::world::Object valueEgoVehicle; + ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueEgoVehicle.objectId = valueEgoVehicleObjectId; + ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::Invalid); + valueEgoVehicle.objectType = valueEgoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; + valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; + ::ad_rss::world::Velocity valueEgoVehicleVelocity; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); + valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); + valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; + valueEgoVehicle.velocity = valueEgoVehicleVelocity; + value.egoVehicle = valueEgoVehicle; + ::ad_rss::world::Object valueObject; + ::ad_rss::world::ObjectId valueObjectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueObject.objectId = valueObjectObjectId; + ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::Invalid); + valueObject.objectType = valueObjectObjectType; + ::ad_rss::world::OccupiedRegionVector valueObjectOccupiedRegions; + valueObject.occupiedRegions = valueObjectOccupiedRegions; ::ad_rss::world::Velocity valueObjectVelocity; ::ad_rss::physics::Speed valueObjectVelocitySpeedLon(-100.); valueObjectVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct @@ -223,64 +487,338 @@ TEST(SceneValidInputRangeTests, testValidInputRangeSituationTypeTooBig) valueObjectVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueObjectVelocity.speedLat = valueObjectVelocitySpeedLat; valueObject.velocity = valueObjectVelocity; - ::ad_rss::physics::Duration valueObjectResponseTime(0.); - valueObjectResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueObject.responseTime = valueObjectResponseTime; value.object = valueObject; + ::ad_rss::world::RssDynamics valueObjectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonAccelMax(-1e2); + valueObjectRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.accelMax = valueObjectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMax(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueObjectRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLonBrakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMax; + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamics.alphaLon = valueObjectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatAccelMax(-1e2); + valueObjectRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.accelMax = valueObjectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.brakeMin = valueObjectRssDynamicsAlphaLatBrakeMin; + valueObjectRssDynamics.alphaLat = valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueObjectRssDynamicsLateralFluctuationMargin(0.); + valueObjectRssDynamics.lateralFluctuationMargin = valueObjectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueObjectRssDynamicsResponseTime(0.); + valueObjectRssDynamicsResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamics.responseTime = valueObjectRssDynamicsResponseTime; + value.objectRssDynamics = valueObjectRssDynamics; + ::ad_rss::world::RoadArea valueIntersectingRoad; + value.intersectingRoad = valueIntersectingRoad; + ::ad_rss::world::RoadArea valueEgoVehicleRoad; + value.egoVehicleRoad = valueEgoVehicleRoad; // override member with invalid value - ::ad_rss::situation::SituationType invalidInitializedMember(static_cast<::ad_rss::situation::SituationType>(-1)); - value.situationType = invalidInitializedMember; + ::ad_rss::world::Object invalidInitializedMember; + ::ad_rss::world::ObjectType invalidInitializedMemberObjectType(static_cast<::ad_rss::world::ObjectType>(-1)); + invalidInitializedMember.objectType = invalidInitializedMemberObjectType; + value.object = invalidInitializedMember; ASSERT_FALSE(withinValidInputRange(value)); } -TEST(SceneValidInputRangeTests, testValidInputRangeEgoVehicleRoadTooSmall) +TEST(SceneValidInputRangeTests, testValidInputRangeObjectTooBig) { ::ad_rss::world::Scene value; ::ad_rss::situation::SituationType valueSituationType(::ad_rss::situation::SituationType::NotRelevant); value.situationType = valueSituationType; + ::ad_rss::world::Object valueEgoVehicle; + ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueEgoVehicle.objectId = valueEgoVehicleObjectId; + ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::Invalid); + valueEgoVehicle.objectType = valueEgoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; + valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; + ::ad_rss::world::Velocity valueEgoVehicleVelocity; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); + valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); + valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; + valueEgoVehicle.velocity = valueEgoVehicleVelocity; + value.egoVehicle = valueEgoVehicle; + ::ad_rss::world::Object valueObject; + ::ad_rss::world::ObjectId valueObjectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueObject.objectId = valueObjectObjectId; + ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::Invalid); + valueObject.objectType = valueObjectObjectType; + ::ad_rss::world::OccupiedRegionVector valueObjectOccupiedRegions; + valueObject.occupiedRegions = valueObjectOccupiedRegions; + ::ad_rss::world::Velocity valueObjectVelocity; + ::ad_rss::physics::Speed valueObjectVelocitySpeedLon(-100.); + valueObjectVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueObjectVelocity.speedLon = valueObjectVelocitySpeedLon; + ::ad_rss::physics::Speed valueObjectVelocitySpeedLat(-100.); + valueObjectVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueObjectVelocity.speedLat = valueObjectVelocitySpeedLat; + valueObject.velocity = valueObjectVelocity; + value.object = valueObject; + ::ad_rss::world::RssDynamics valueObjectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonAccelMax(-1e2); + valueObjectRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.accelMax = valueObjectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMax(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueObjectRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLonBrakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMax; + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamics.alphaLon = valueObjectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatAccelMax(-1e2); + valueObjectRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.accelMax = valueObjectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.brakeMin = valueObjectRssDynamicsAlphaLatBrakeMin; + valueObjectRssDynamics.alphaLat = valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueObjectRssDynamicsLateralFluctuationMargin(0.); + valueObjectRssDynamics.lateralFluctuationMargin = valueObjectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueObjectRssDynamicsResponseTime(0.); + valueObjectRssDynamicsResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamics.responseTime = valueObjectRssDynamicsResponseTime; + value.objectRssDynamics = valueObjectRssDynamics; + ::ad_rss::world::RoadArea valueIntersectingRoad; + value.intersectingRoad = valueIntersectingRoad; ::ad_rss::world::RoadArea valueEgoVehicleRoad; value.egoVehicleRoad = valueEgoVehicleRoad; + + // override member with invalid value + ::ad_rss::world::Object invalidInitializedMember; + ::ad_rss::world::ObjectType invalidInitializedMemberObjectType(static_cast<::ad_rss::world::ObjectType>(-1)); + invalidInitializedMember.objectType = invalidInitializedMemberObjectType; + value.object = invalidInitializedMember; + ASSERT_FALSE(withinValidInputRange(value)); +} + +TEST(SceneValidInputRangeTests, testValidInputRangeObjectRssDynamicsTooSmall) +{ + ::ad_rss::world::Scene value; + ::ad_rss::situation::SituationType valueSituationType(::ad_rss::situation::SituationType::NotRelevant); + value.situationType = valueSituationType; + ::ad_rss::world::Object valueEgoVehicle; + ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueEgoVehicle.objectId = valueEgoVehicleObjectId; + ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::Invalid); + valueEgoVehicle.objectType = valueEgoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; + valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; + ::ad_rss::world::Velocity valueEgoVehicleVelocity; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); + valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); + valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; + valueEgoVehicle.velocity = valueEgoVehicleVelocity; + value.egoVehicle = valueEgoVehicle; + ::ad_rss::world::Object valueObject; + ::ad_rss::world::ObjectId valueObjectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueObject.objectId = valueObjectObjectId; + ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::Invalid); + valueObject.objectType = valueObjectObjectType; + ::ad_rss::world::OccupiedRegionVector valueObjectOccupiedRegions; + valueObject.occupiedRegions = valueObjectOccupiedRegions; + ::ad_rss::world::Velocity valueObjectVelocity; + ::ad_rss::physics::Speed valueObjectVelocitySpeedLon(-100.); + valueObjectVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueObjectVelocity.speedLon = valueObjectVelocitySpeedLon; + ::ad_rss::physics::Speed valueObjectVelocitySpeedLat(-100.); + valueObjectVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueObjectVelocity.speedLat = valueObjectVelocitySpeedLat; + valueObject.velocity = valueObjectVelocity; + value.object = valueObject; + ::ad_rss::world::RssDynamics valueObjectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonAccelMax(-1e2); + valueObjectRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.accelMax = valueObjectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMax(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueObjectRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLonBrakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMax; + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamics.alphaLon = valueObjectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatAccelMax(-1e2); + valueObjectRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.accelMax = valueObjectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.brakeMin = valueObjectRssDynamicsAlphaLatBrakeMin; + valueObjectRssDynamics.alphaLat = valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueObjectRssDynamicsLateralFluctuationMargin(0.); + valueObjectRssDynamics.lateralFluctuationMargin = valueObjectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueObjectRssDynamicsResponseTime(0.); + valueObjectRssDynamicsResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamics.responseTime = valueObjectRssDynamicsResponseTime; + value.objectRssDynamics = valueObjectRssDynamics; ::ad_rss::world::RoadArea valueIntersectingRoad; value.intersectingRoad = valueIntersectingRoad; + ::ad_rss::world::RoadArea valueEgoVehicleRoad; + value.egoVehicleRoad = valueEgoVehicleRoad; + + // override member with invalid value + ::ad_rss::world::RssDynamics invalidInitializedMember; + ::ad_rss::world::LongitudinalRssAccelerationValues invalidInitializedMemberAlphaLon; + ::ad_rss::physics::Acceleration invalidInitializedMemberAlphaLonAccelMax(-1e2 * 1.1); + invalidInitializedMemberAlphaLon.accelMax = invalidInitializedMemberAlphaLonAccelMax; + invalidInitializedMember.alphaLon = invalidInitializedMemberAlphaLon; + value.objectRssDynamics = invalidInitializedMember; + ASSERT_FALSE(withinValidInputRange(value)); +} + +TEST(SceneValidInputRangeTests, testValidInputRangeObjectRssDynamicsTooBig) +{ + ::ad_rss::world::Scene value; + ::ad_rss::situation::SituationType valueSituationType(::ad_rss::situation::SituationType::NotRelevant); + value.situationType = valueSituationType; + ::ad_rss::world::Object valueEgoVehicle; + ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueEgoVehicle.objectId = valueEgoVehicleObjectId; + ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::Invalid); + valueEgoVehicle.objectType = valueEgoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; + valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; + ::ad_rss::world::Velocity valueEgoVehicleVelocity; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); + valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); + valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; + valueEgoVehicle.velocity = valueEgoVehicleVelocity; + value.egoVehicle = valueEgoVehicle; ::ad_rss::world::Object valueObject; ::ad_rss::world::ObjectId valueObjectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); valueObject.objectId = valueObjectObjectId; - ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::EgoVehicle); + ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::Invalid); valueObject.objectType = valueObjectObjectType; ::ad_rss::world::OccupiedRegionVector valueObjectOccupiedRegions; valueObject.occupiedRegions = valueObjectOccupiedRegions; - ::ad_rss::world::Dynamics valueObjectDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonAccelMax(-1e2); - valueObjectDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLon.accelMax = valueObjectDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMax(-1e2); - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMin(-1e2); - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueObjectDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + ::ad_rss::world::Velocity valueObjectVelocity; + ::ad_rss::physics::Speed valueObjectVelocitySpeedLon(-100.); + valueObjectVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueObjectVelocity.speedLon = valueObjectVelocitySpeedLon; + ::ad_rss::physics::Speed valueObjectVelocitySpeedLat(-100.); + valueObjectVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueObjectVelocity.speedLat = valueObjectVelocitySpeedLat; + valueObject.velocity = valueObjectVelocity; + value.object = valueObject; + ::ad_rss::world::RssDynamics valueObjectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonAccelMax(-1e2); + valueObjectRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.accelMax = valueObjectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMax(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueObjectRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLonBrakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMax; - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamics.alphaLon = valueObjectDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatAccelMax(-1e2); - valueObjectDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLat.accelMax = valueObjectDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatBrakeMin(-1e2); - valueObjectDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLonBrakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMax; + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamics.alphaLon = valueObjectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatAccelMax(-1e2); + valueObjectRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.accelMax = valueObjectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLat.brakeMin = valueObjectDynamicsAlphaLatBrakeMin; - valueObjectDynamics.alphaLat = valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Distance valueObjectDynamicsLateralFluctuationMargin(0.); - valueObjectDynamics.lateralFluctuationMargin = valueObjectDynamicsLateralFluctuationMargin; - valueObject.dynamics = valueObjectDynamics; + valueObjectRssDynamicsAlphaLat.brakeMin = valueObjectRssDynamicsAlphaLatBrakeMin; + valueObjectRssDynamics.alphaLat = valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueObjectRssDynamicsLateralFluctuationMargin(0.); + valueObjectRssDynamics.lateralFluctuationMargin = valueObjectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueObjectRssDynamicsResponseTime(0.); + valueObjectRssDynamicsResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamics.responseTime = valueObjectRssDynamicsResponseTime; + value.objectRssDynamics = valueObjectRssDynamics; + ::ad_rss::world::RoadArea valueIntersectingRoad; + value.intersectingRoad = valueIntersectingRoad; + ::ad_rss::world::RoadArea valueEgoVehicleRoad; + value.egoVehicleRoad = valueEgoVehicleRoad; + + // override member with invalid value + ::ad_rss::world::RssDynamics invalidInitializedMember; + ::ad_rss::world::LongitudinalRssAccelerationValues invalidInitializedMemberAlphaLon; + ::ad_rss::physics::Acceleration invalidInitializedMemberAlphaLonAccelMax(1e2 * 1.1); + invalidInitializedMemberAlphaLon.accelMax = invalidInitializedMemberAlphaLonAccelMax; + invalidInitializedMember.alphaLon = invalidInitializedMemberAlphaLon; + value.objectRssDynamics = invalidInitializedMember; + ASSERT_FALSE(withinValidInputRange(value)); +} + +TEST(SceneValidInputRangeTests, testValidInputRangeIntersectingRoadTooSmall) +{ + ::ad_rss::world::Scene value; + ::ad_rss::situation::SituationType valueSituationType(::ad_rss::situation::SituationType::NotRelevant); + value.situationType = valueSituationType; + ::ad_rss::world::Object valueEgoVehicle; + ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueEgoVehicle.objectId = valueEgoVehicleObjectId; + ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::Invalid); + valueEgoVehicle.objectType = valueEgoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; + valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; + ::ad_rss::world::Velocity valueEgoVehicleVelocity; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); + valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); + valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; + valueEgoVehicle.velocity = valueEgoVehicleVelocity; + value.egoVehicle = valueEgoVehicle; + ::ad_rss::world::Object valueObject; + ::ad_rss::world::ObjectId valueObjectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueObject.objectId = valueObjectObjectId; + ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::Invalid); + valueObject.objectType = valueObjectObjectType; + ::ad_rss::world::OccupiedRegionVector valueObjectOccupiedRegions; + valueObject.occupiedRegions = valueObjectOccupiedRegions; ::ad_rss::world::Velocity valueObjectVelocity; ::ad_rss::physics::Speed valueObjectVelocitySpeedLon(-100.); valueObjectVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct @@ -289,11 +827,45 @@ TEST(SceneValidInputRangeTests, testValidInputRangeEgoVehicleRoadTooSmall) valueObjectVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueObjectVelocity.speedLat = valueObjectVelocitySpeedLat; valueObject.velocity = valueObjectVelocity; - ::ad_rss::physics::Duration valueObjectResponseTime(0.); - valueObjectResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueObject.responseTime = valueObjectResponseTime; value.object = valueObject; + ::ad_rss::world::RssDynamics valueObjectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonAccelMax(-1e2); + valueObjectRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.accelMax = valueObjectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMax(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueObjectRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLonBrakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMax; + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamics.alphaLon = valueObjectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatAccelMax(-1e2); + valueObjectRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.accelMax = valueObjectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.brakeMin = valueObjectRssDynamicsAlphaLatBrakeMin; + valueObjectRssDynamics.alphaLat = valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueObjectRssDynamicsLateralFluctuationMargin(0.); + valueObjectRssDynamics.lateralFluctuationMargin = valueObjectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueObjectRssDynamicsResponseTime(0.); + valueObjectRssDynamicsResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamics.responseTime = valueObjectRssDynamicsResponseTime; + value.objectRssDynamics = valueObjectRssDynamics; + ::ad_rss::world::RoadArea valueIntersectingRoad; + value.intersectingRoad = valueIntersectingRoad; + ::ad_rss::world::RoadArea valueEgoVehicleRoad; + value.egoVehicleRoad = valueEgoVehicleRoad; // override member with invalid value ::ad_rss::world::RoadArea invalidInitializedMember; @@ -335,56 +907,38 @@ TEST(SceneValidInputRangeTests, testValidInputRangeEgoVehicleRoadTooSmall) invalidInitializedMemberRoadAreaElementElement.width = invalidInitializedMemberRoadAreaElementElementWidth; invalidInitializedMemberRoadAreaElement.resize(1, invalidInitializedMemberRoadAreaElementElement); invalidInitializedMember.resize(51, invalidInitializedMemberRoadAreaElement); - value.egoVehicleRoad = invalidInitializedMember; + value.intersectingRoad = invalidInitializedMember; ASSERT_FALSE(withinValidInputRange(value)); } -TEST(SceneValidInputRangeTests, testValidInputRangeEgoVehicleRoadTooBig) +TEST(SceneValidInputRangeTests, testValidInputRangeIntersectingRoadTooBig) { ::ad_rss::world::Scene value; ::ad_rss::situation::SituationType valueSituationType(::ad_rss::situation::SituationType::NotRelevant); value.situationType = valueSituationType; - ::ad_rss::world::RoadArea valueEgoVehicleRoad; - value.egoVehicleRoad = valueEgoVehicleRoad; - ::ad_rss::world::RoadArea valueIntersectingRoad; - value.intersectingRoad = valueIntersectingRoad; + ::ad_rss::world::Object valueEgoVehicle; + ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueEgoVehicle.objectId = valueEgoVehicleObjectId; + ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::Invalid); + valueEgoVehicle.objectType = valueEgoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; + valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; + ::ad_rss::world::Velocity valueEgoVehicleVelocity; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); + valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); + valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; + valueEgoVehicle.velocity = valueEgoVehicleVelocity; + value.egoVehicle = valueEgoVehicle; ::ad_rss::world::Object valueObject; ::ad_rss::world::ObjectId valueObjectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); valueObject.objectId = valueObjectObjectId; - ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::EgoVehicle); + ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::Invalid); valueObject.objectType = valueObjectObjectType; ::ad_rss::world::OccupiedRegionVector valueObjectOccupiedRegions; valueObject.occupiedRegions = valueObjectOccupiedRegions; - ::ad_rss::world::Dynamics valueObjectDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonAccelMax(-1e2); - valueObjectDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLon.accelMax = valueObjectDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMax(-1e2); - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMin(-1e2); - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueObjectDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLonBrakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMax; - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamics.alphaLon = valueObjectDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatAccelMax(-1e2); - valueObjectDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLat.accelMax = valueObjectDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatBrakeMin(-1e2); - valueObjectDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLat.brakeMin = valueObjectDynamicsAlphaLatBrakeMin; - valueObjectDynamics.alphaLat = valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Distance valueObjectDynamicsLateralFluctuationMargin(0.); - valueObjectDynamics.lateralFluctuationMargin = valueObjectDynamicsLateralFluctuationMargin; - valueObject.dynamics = valueObjectDynamics; ::ad_rss::world::Velocity valueObjectVelocity; ::ad_rss::physics::Speed valueObjectVelocitySpeedLon(-100.); valueObjectVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct @@ -393,11 +947,45 @@ TEST(SceneValidInputRangeTests, testValidInputRangeEgoVehicleRoadTooBig) valueObjectVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueObjectVelocity.speedLat = valueObjectVelocitySpeedLat; valueObject.velocity = valueObjectVelocity; - ::ad_rss::physics::Duration valueObjectResponseTime(0.); - valueObjectResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueObject.responseTime = valueObjectResponseTime; value.object = valueObject; + ::ad_rss::world::RssDynamics valueObjectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonAccelMax(-1e2); + valueObjectRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.accelMax = valueObjectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMax(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueObjectRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLonBrakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMax; + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamics.alphaLon = valueObjectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatAccelMax(-1e2); + valueObjectRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.accelMax = valueObjectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.brakeMin = valueObjectRssDynamicsAlphaLatBrakeMin; + valueObjectRssDynamics.alphaLat = valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueObjectRssDynamicsLateralFluctuationMargin(0.); + valueObjectRssDynamics.lateralFluctuationMargin = valueObjectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueObjectRssDynamicsResponseTime(0.); + valueObjectRssDynamicsResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamics.responseTime = valueObjectRssDynamicsResponseTime; + value.objectRssDynamics = valueObjectRssDynamics; + ::ad_rss::world::RoadArea valueIntersectingRoad; + value.intersectingRoad = valueIntersectingRoad; + ::ad_rss::world::RoadArea valueEgoVehicleRoad; + value.egoVehicleRoad = valueEgoVehicleRoad; // override member with invalid value ::ad_rss::world::RoadArea invalidInitializedMember; @@ -439,56 +1027,38 @@ TEST(SceneValidInputRangeTests, testValidInputRangeEgoVehicleRoadTooBig) invalidInitializedMemberRoadAreaElementElement.width = invalidInitializedMemberRoadAreaElementElementWidth; invalidInitializedMemberRoadAreaElement.resize(1 + 1, invalidInitializedMemberRoadAreaElementElement); invalidInitializedMember.resize(51, invalidInitializedMemberRoadAreaElement); - value.egoVehicleRoad = invalidInitializedMember; + value.intersectingRoad = invalidInitializedMember; ASSERT_FALSE(withinValidInputRange(value)); } -TEST(SceneValidInputRangeTests, testValidInputRangeIntersectingRoadTooSmall) +TEST(SceneValidInputRangeTests, testValidInputRangeEgoVehicleRoadTooSmall) { ::ad_rss::world::Scene value; ::ad_rss::situation::SituationType valueSituationType(::ad_rss::situation::SituationType::NotRelevant); value.situationType = valueSituationType; - ::ad_rss::world::RoadArea valueEgoVehicleRoad; - value.egoVehicleRoad = valueEgoVehicleRoad; - ::ad_rss::world::RoadArea valueIntersectingRoad; - value.intersectingRoad = valueIntersectingRoad; + ::ad_rss::world::Object valueEgoVehicle; + ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueEgoVehicle.objectId = valueEgoVehicleObjectId; + ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::Invalid); + valueEgoVehicle.objectType = valueEgoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; + valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; + ::ad_rss::world::Velocity valueEgoVehicleVelocity; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); + valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); + valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; + valueEgoVehicle.velocity = valueEgoVehicleVelocity; + value.egoVehicle = valueEgoVehicle; ::ad_rss::world::Object valueObject; ::ad_rss::world::ObjectId valueObjectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); valueObject.objectId = valueObjectObjectId; - ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::EgoVehicle); + ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::Invalid); valueObject.objectType = valueObjectObjectType; ::ad_rss::world::OccupiedRegionVector valueObjectOccupiedRegions; valueObject.occupiedRegions = valueObjectOccupiedRegions; - ::ad_rss::world::Dynamics valueObjectDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonAccelMax(-1e2); - valueObjectDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLon.accelMax = valueObjectDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMax(-1e2); - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMin(-1e2); - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueObjectDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLonBrakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMax; - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamics.alphaLon = valueObjectDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatAccelMax(-1e2); - valueObjectDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLat.accelMax = valueObjectDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatBrakeMin(-1e2); - valueObjectDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLat.brakeMin = valueObjectDynamicsAlphaLatBrakeMin; - valueObjectDynamics.alphaLat = valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Distance valueObjectDynamicsLateralFluctuationMargin(0.); - valueObjectDynamics.lateralFluctuationMargin = valueObjectDynamicsLateralFluctuationMargin; - valueObject.dynamics = valueObjectDynamics; ::ad_rss::world::Velocity valueObjectVelocity; ::ad_rss::physics::Speed valueObjectVelocitySpeedLon(-100.); valueObjectVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct @@ -497,11 +1067,45 @@ TEST(SceneValidInputRangeTests, testValidInputRangeIntersectingRoadTooSmall) valueObjectVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueObjectVelocity.speedLat = valueObjectVelocitySpeedLat; valueObject.velocity = valueObjectVelocity; - ::ad_rss::physics::Duration valueObjectResponseTime(0.); - valueObjectResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueObject.responseTime = valueObjectResponseTime; value.object = valueObject; + ::ad_rss::world::RssDynamics valueObjectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonAccelMax(-1e2); + valueObjectRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.accelMax = valueObjectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMax(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueObjectRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLonBrakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMax; + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamics.alphaLon = valueObjectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatAccelMax(-1e2); + valueObjectRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.accelMax = valueObjectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.brakeMin = valueObjectRssDynamicsAlphaLatBrakeMin; + valueObjectRssDynamics.alphaLat = valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueObjectRssDynamicsLateralFluctuationMargin(0.); + valueObjectRssDynamics.lateralFluctuationMargin = valueObjectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueObjectRssDynamicsResponseTime(0.); + valueObjectRssDynamicsResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamics.responseTime = valueObjectRssDynamicsResponseTime; + value.objectRssDynamics = valueObjectRssDynamics; + ::ad_rss::world::RoadArea valueIntersectingRoad; + value.intersectingRoad = valueIntersectingRoad; + ::ad_rss::world::RoadArea valueEgoVehicleRoad; + value.egoVehicleRoad = valueEgoVehicleRoad; // override member with invalid value ::ad_rss::world::RoadArea invalidInitializedMember; @@ -543,56 +1147,38 @@ TEST(SceneValidInputRangeTests, testValidInputRangeIntersectingRoadTooSmall) invalidInitializedMemberRoadAreaElementElement.width = invalidInitializedMemberRoadAreaElementElementWidth; invalidInitializedMemberRoadAreaElement.resize(1, invalidInitializedMemberRoadAreaElementElement); invalidInitializedMember.resize(51, invalidInitializedMemberRoadAreaElement); - value.intersectingRoad = invalidInitializedMember; + value.egoVehicleRoad = invalidInitializedMember; ASSERT_FALSE(withinValidInputRange(value)); } -TEST(SceneValidInputRangeTests, testValidInputRangeIntersectingRoadTooBig) +TEST(SceneValidInputRangeTests, testValidInputRangeEgoVehicleRoadTooBig) { ::ad_rss::world::Scene value; ::ad_rss::situation::SituationType valueSituationType(::ad_rss::situation::SituationType::NotRelevant); value.situationType = valueSituationType; - ::ad_rss::world::RoadArea valueEgoVehicleRoad; - value.egoVehicleRoad = valueEgoVehicleRoad; - ::ad_rss::world::RoadArea valueIntersectingRoad; - value.intersectingRoad = valueIntersectingRoad; + ::ad_rss::world::Object valueEgoVehicle; + ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + valueEgoVehicle.objectId = valueEgoVehicleObjectId; + ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::Invalid); + valueEgoVehicle.objectType = valueEgoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; + valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; + ::ad_rss::world::Velocity valueEgoVehicleVelocity; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); + valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); + valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; + valueEgoVehicle.velocity = valueEgoVehicleVelocity; + value.egoVehicle = valueEgoVehicle; ::ad_rss::world::Object valueObject; ::ad_rss::world::ObjectId valueObjectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); valueObject.objectId = valueObjectObjectId; - ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::EgoVehicle); + ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::Invalid); valueObject.objectType = valueObjectObjectType; ::ad_rss::world::OccupiedRegionVector valueObjectOccupiedRegions; valueObject.occupiedRegions = valueObjectOccupiedRegions; - ::ad_rss::world::Dynamics valueObjectDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonAccelMax(-1e2); - valueObjectDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLon.accelMax = valueObjectDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMax(-1e2); - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMin(-1e2); - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueObjectDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLonBrakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMax; - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamics.alphaLon = valueObjectDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatAccelMax(-1e2); - valueObjectDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLat.accelMax = valueObjectDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatBrakeMin(-1e2); - valueObjectDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLat.brakeMin = valueObjectDynamicsAlphaLatBrakeMin; - valueObjectDynamics.alphaLat = valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Distance valueObjectDynamicsLateralFluctuationMargin(0.); - valueObjectDynamics.lateralFluctuationMargin = valueObjectDynamicsLateralFluctuationMargin; - valueObject.dynamics = valueObjectDynamics; ::ad_rss::world::Velocity valueObjectVelocity; ::ad_rss::physics::Speed valueObjectVelocitySpeedLon(-100.); valueObjectVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct @@ -601,11 +1187,45 @@ TEST(SceneValidInputRangeTests, testValidInputRangeIntersectingRoadTooBig) valueObjectVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct valueObjectVelocity.speedLat = valueObjectVelocitySpeedLat; valueObject.velocity = valueObjectVelocity; - ::ad_rss::physics::Duration valueObjectResponseTime(0.); - valueObjectResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueObject.responseTime = valueObjectResponseTime; value.object = valueObject; + ::ad_rss::world::RssDynamics valueObjectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonAccelMax(-1e2); + valueObjectRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.accelMax = valueObjectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMax(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueObjectRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLonBrakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMinCorrect; + valueObjectRssDynamicsAlphaLon.brakeMax = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamicsAlphaLon.brakeMin = valueObjectRssDynamicsAlphaLon.brakeMax; + valueObjectRssDynamicsAlphaLon.brakeMinCorrect = valueObjectRssDynamicsAlphaLon.brakeMin; + valueObjectRssDynamics.alphaLon = valueObjectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatAccelMax(-1e2); + valueObjectRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.accelMax = valueObjectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueObjectRssDynamicsAlphaLatBrakeMin(-1e2); + valueObjectRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamicsAlphaLat.brakeMin = valueObjectRssDynamicsAlphaLatBrakeMin; + valueObjectRssDynamics.alphaLat = valueObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueObjectRssDynamicsLateralFluctuationMargin(0.); + valueObjectRssDynamics.lateralFluctuationMargin = valueObjectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueObjectRssDynamicsResponseTime(0.); + valueObjectRssDynamicsResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + valueObjectRssDynamics.responseTime = valueObjectRssDynamicsResponseTime; + value.objectRssDynamics = valueObjectRssDynamics; + ::ad_rss::world::RoadArea valueIntersectingRoad; + value.intersectingRoad = valueIntersectingRoad; + ::ad_rss::world::RoadArea valueEgoVehicleRoad; + value.egoVehicleRoad = valueEgoVehicleRoad; // override member with invalid value ::ad_rss::world::RoadArea invalidInitializedMember; @@ -647,142 +1267,6 @@ TEST(SceneValidInputRangeTests, testValidInputRangeIntersectingRoadTooBig) invalidInitializedMemberRoadAreaElementElement.width = invalidInitializedMemberRoadAreaElementElementWidth; invalidInitializedMemberRoadAreaElement.resize(1 + 1, invalidInitializedMemberRoadAreaElementElement); invalidInitializedMember.resize(51, invalidInitializedMemberRoadAreaElement); - value.intersectingRoad = invalidInitializedMember; - ASSERT_FALSE(withinValidInputRange(value)); -} - -TEST(SceneValidInputRangeTests, testValidInputRangeObjectTooSmall) -{ - ::ad_rss::world::Scene value; - ::ad_rss::situation::SituationType valueSituationType(::ad_rss::situation::SituationType::NotRelevant); - value.situationType = valueSituationType; - ::ad_rss::world::RoadArea valueEgoVehicleRoad; - value.egoVehicleRoad = valueEgoVehicleRoad; - ::ad_rss::world::RoadArea valueIntersectingRoad; - value.intersectingRoad = valueIntersectingRoad; - ::ad_rss::world::Object valueObject; - ::ad_rss::world::ObjectId valueObjectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); - valueObject.objectId = valueObjectObjectId; - ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::EgoVehicle); - valueObject.objectType = valueObjectObjectType; - ::ad_rss::world::OccupiedRegionVector valueObjectOccupiedRegions; - valueObject.occupiedRegions = valueObjectOccupiedRegions; - ::ad_rss::world::Dynamics valueObjectDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonAccelMax(-1e2); - valueObjectDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLon.accelMax = valueObjectDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMax(-1e2); - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMin(-1e2); - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueObjectDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLonBrakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMax; - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamics.alphaLon = valueObjectDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatAccelMax(-1e2); - valueObjectDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLat.accelMax = valueObjectDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatBrakeMin(-1e2); - valueObjectDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLat.brakeMin = valueObjectDynamicsAlphaLatBrakeMin; - valueObjectDynamics.alphaLat = valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Distance valueObjectDynamicsLateralFluctuationMargin(0.); - valueObjectDynamics.lateralFluctuationMargin = valueObjectDynamicsLateralFluctuationMargin; - valueObject.dynamics = valueObjectDynamics; - ::ad_rss::world::Velocity valueObjectVelocity; - ::ad_rss::physics::Speed valueObjectVelocitySpeedLon(-100.); - valueObjectVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct - valueObjectVelocity.speedLon = valueObjectVelocitySpeedLon; - ::ad_rss::physics::Speed valueObjectVelocitySpeedLat(-100.); - valueObjectVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct - valueObjectVelocity.speedLat = valueObjectVelocitySpeedLat; - valueObject.velocity = valueObjectVelocity; - ::ad_rss::physics::Duration valueObjectResponseTime(0.); - valueObjectResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueObject.responseTime = valueObjectResponseTime; - value.object = valueObject; - - // override member with invalid value - ::ad_rss::world::Object invalidInitializedMember; - ::ad_rss::world::ObjectType invalidInitializedMemberObjectType(static_cast<::ad_rss::world::ObjectType>(-1)); - invalidInitializedMember.objectType = invalidInitializedMemberObjectType; - value.object = invalidInitializedMember; - ASSERT_FALSE(withinValidInputRange(value)); -} - -TEST(SceneValidInputRangeTests, testValidInputRangeObjectTooBig) -{ - ::ad_rss::world::Scene value; - ::ad_rss::situation::SituationType valueSituationType(::ad_rss::situation::SituationType::NotRelevant); - value.situationType = valueSituationType; - ::ad_rss::world::RoadArea valueEgoVehicleRoad; - value.egoVehicleRoad = valueEgoVehicleRoad; - ::ad_rss::world::RoadArea valueIntersectingRoad; - value.intersectingRoad = valueIntersectingRoad; - ::ad_rss::world::Object valueObject; - ::ad_rss::world::ObjectId valueObjectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); - valueObject.objectId = valueObjectObjectId; - ::ad_rss::world::ObjectType valueObjectObjectType(::ad_rss::world::ObjectType::EgoVehicle); - valueObject.objectType = valueObjectObjectType; - ::ad_rss::world::OccupiedRegionVector valueObjectOccupiedRegions; - valueObject.occupiedRegions = valueObjectOccupiedRegions; - ::ad_rss::world::Dynamics valueObjectDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueObjectDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonAccelMax(-1e2); - valueObjectDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLon.accelMax = valueObjectDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMax(-1e2); - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMin(-1e2); - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueObjectDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLonBrakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMinCorrect; - valueObjectDynamicsAlphaLon.brakeMax = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamicsAlphaLon.brakeMin = valueObjectDynamicsAlphaLon.brakeMax; - valueObjectDynamicsAlphaLon.brakeMinCorrect = valueObjectDynamicsAlphaLon.brakeMin; - valueObjectDynamics.alphaLon = valueObjectDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatAccelMax(-1e2); - valueObjectDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueObjectDynamicsAlphaLat.accelMax = valueObjectDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueObjectDynamicsAlphaLatBrakeMin(-1e2); - valueObjectDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueObjectDynamicsAlphaLat.brakeMin = valueObjectDynamicsAlphaLatBrakeMin; - valueObjectDynamics.alphaLat = valueObjectDynamicsAlphaLat; - ::ad_rss::physics::Distance valueObjectDynamicsLateralFluctuationMargin(0.); - valueObjectDynamics.lateralFluctuationMargin = valueObjectDynamicsLateralFluctuationMargin; - valueObject.dynamics = valueObjectDynamics; - ::ad_rss::world::Velocity valueObjectVelocity; - ::ad_rss::physics::Speed valueObjectVelocitySpeedLon(-100.); - valueObjectVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct - valueObjectVelocity.speedLon = valueObjectVelocitySpeedLon; - ::ad_rss::physics::Speed valueObjectVelocitySpeedLat(-100.); - valueObjectVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct - valueObjectVelocity.speedLat = valueObjectVelocitySpeedLat; - valueObject.velocity = valueObjectVelocity; - ::ad_rss::physics::Duration valueObjectResponseTime(0.); - valueObjectResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueObject.responseTime = valueObjectResponseTime; - value.object = valueObject; - - // override member with invalid value - ::ad_rss::world::Object invalidInitializedMember; - ::ad_rss::world::ObjectType invalidInitializedMemberObjectType(static_cast<::ad_rss::world::ObjectType>(-1)); - invalidInitializedMember.objectType = invalidInitializedMemberObjectType; - value.object = invalidInitializedMember; + value.egoVehicleRoad = invalidInitializedMember; ASSERT_FALSE(withinValidInputRange(value)); } diff --git a/tests/generated/world/SceneVectorValidInputRangeTests.cpp b/tests/generated/world/SceneVectorValidInputRangeTests.cpp index 0c9a68df9f..ae83f21c2f 100644 --- a/tests/generated/world/SceneVectorValidInputRangeTests.cpp +++ b/tests/generated/world/SceneVectorValidInputRangeTests.cpp @@ -53,47 +53,29 @@ TEST(SceneVectorValidInputRangeTests, testValidInputRangeValidInputRangeMax) ::ad_rss::world::Scene element; ::ad_rss::situation::SituationType elementSituationType(::ad_rss::situation::SituationType::NotRelevant); element.situationType = elementSituationType; - ::ad_rss::world::RoadArea elementEgoVehicleRoad; - element.egoVehicleRoad = elementEgoVehicleRoad; - ::ad_rss::world::RoadArea elementIntersectingRoad; - element.intersectingRoad = elementIntersectingRoad; + ::ad_rss::world::Object elementEgoVehicle; + ::ad_rss::world::ObjectId elementEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + elementEgoVehicle.objectId = elementEgoVehicleObjectId; + ::ad_rss::world::ObjectType elementEgoVehicleObjectType(::ad_rss::world::ObjectType::Invalid); + elementEgoVehicle.objectType = elementEgoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector elementEgoVehicleOccupiedRegions; + elementEgoVehicle.occupiedRegions = elementEgoVehicleOccupiedRegions; + ::ad_rss::world::Velocity elementEgoVehicleVelocity; + ::ad_rss::physics::Speed elementEgoVehicleVelocitySpeedLon(-100.); + elementEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + elementEgoVehicleVelocity.speedLon = elementEgoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed elementEgoVehicleVelocitySpeedLat(-100.); + elementEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + elementEgoVehicleVelocity.speedLat = elementEgoVehicleVelocitySpeedLat; + elementEgoVehicle.velocity = elementEgoVehicleVelocity; + element.egoVehicle = elementEgoVehicle; ::ad_rss::world::Object elementObject; ::ad_rss::world::ObjectId elementObjectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); elementObject.objectId = elementObjectObjectId; - ::ad_rss::world::ObjectType elementObjectObjectType(::ad_rss::world::ObjectType::EgoVehicle); + ::ad_rss::world::ObjectType elementObjectObjectType(::ad_rss::world::ObjectType::Invalid); elementObject.objectType = elementObjectObjectType; ::ad_rss::world::OccupiedRegionVector elementObjectOccupiedRegions; elementObject.occupiedRegions = elementObjectOccupiedRegions; - ::ad_rss::world::Dynamics elementObjectDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues elementObjectDynamicsAlphaLon; - ::ad_rss::physics::Acceleration elementObjectDynamicsAlphaLonAccelMax(-1e2); - elementObjectDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - elementObjectDynamicsAlphaLon.accelMax = elementObjectDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration elementObjectDynamicsAlphaLonBrakeMax(-1e2); - elementObjectDynamicsAlphaLon.brakeMax = elementObjectDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration elementObjectDynamicsAlphaLonBrakeMin(-1e2); - elementObjectDynamicsAlphaLon.brakeMin = elementObjectDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration elementObjectDynamicsAlphaLonBrakeMinCorrect(-1e2); - elementObjectDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - elementObjectDynamicsAlphaLon.brakeMinCorrect = elementObjectDynamicsAlphaLonBrakeMinCorrect; - elementObjectDynamicsAlphaLon.brakeMin = elementObjectDynamicsAlphaLon.brakeMinCorrect; - elementObjectDynamicsAlphaLon.brakeMax = elementObjectDynamicsAlphaLon.brakeMin; - elementObjectDynamicsAlphaLon.brakeMin = elementObjectDynamicsAlphaLon.brakeMax; - elementObjectDynamicsAlphaLon.brakeMinCorrect = elementObjectDynamicsAlphaLon.brakeMin; - elementObjectDynamics.alphaLon = elementObjectDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues elementObjectDynamicsAlphaLat; - ::ad_rss::physics::Acceleration elementObjectDynamicsAlphaLatAccelMax(-1e2); - elementObjectDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - elementObjectDynamicsAlphaLat.accelMax = elementObjectDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration elementObjectDynamicsAlphaLatBrakeMin(-1e2); - elementObjectDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - elementObjectDynamicsAlphaLat.brakeMin = elementObjectDynamicsAlphaLatBrakeMin; - elementObjectDynamics.alphaLat = elementObjectDynamicsAlphaLat; - ::ad_rss::physics::Distance elementObjectDynamicsLateralFluctuationMargin(0.); - elementObjectDynamics.lateralFluctuationMargin = elementObjectDynamicsLateralFluctuationMargin; - elementObject.dynamics = elementObjectDynamics; ::ad_rss::world::Velocity elementObjectVelocity; ::ad_rss::physics::Speed elementObjectVelocitySpeedLon(-100.); elementObjectVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct @@ -102,11 +84,45 @@ TEST(SceneVectorValidInputRangeTests, testValidInputRangeValidInputRangeMax) elementObjectVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct elementObjectVelocity.speedLat = elementObjectVelocitySpeedLat; elementObject.velocity = elementObjectVelocity; - ::ad_rss::physics::Duration elementObjectResponseTime(0.); - elementObjectResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - elementObject.responseTime = elementObjectResponseTime; element.object = elementObject; + ::ad_rss::world::RssDynamics elementObjectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues elementObjectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration elementObjectRssDynamicsAlphaLonAccelMax(-1e2); + elementObjectRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + elementObjectRssDynamicsAlphaLon.accelMax = elementObjectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration elementObjectRssDynamicsAlphaLonBrakeMax(-1e2); + elementObjectRssDynamicsAlphaLon.brakeMax = elementObjectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration elementObjectRssDynamicsAlphaLonBrakeMin(-1e2); + elementObjectRssDynamicsAlphaLon.brakeMin = elementObjectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration elementObjectRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + elementObjectRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + elementObjectRssDynamicsAlphaLon.brakeMinCorrect = elementObjectRssDynamicsAlphaLonBrakeMinCorrect; + elementObjectRssDynamicsAlphaLon.brakeMin = elementObjectRssDynamicsAlphaLon.brakeMinCorrect; + elementObjectRssDynamicsAlphaLon.brakeMax = elementObjectRssDynamicsAlphaLon.brakeMin; + elementObjectRssDynamicsAlphaLon.brakeMin = elementObjectRssDynamicsAlphaLon.brakeMax; + elementObjectRssDynamicsAlphaLon.brakeMinCorrect = elementObjectRssDynamicsAlphaLon.brakeMin; + elementObjectRssDynamics.alphaLon = elementObjectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues elementObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration elementObjectRssDynamicsAlphaLatAccelMax(-1e2); + elementObjectRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + elementObjectRssDynamicsAlphaLat.accelMax = elementObjectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration elementObjectRssDynamicsAlphaLatBrakeMin(-1e2); + elementObjectRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + elementObjectRssDynamicsAlphaLat.brakeMin = elementObjectRssDynamicsAlphaLatBrakeMin; + elementObjectRssDynamics.alphaLat = elementObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance elementObjectRssDynamicsLateralFluctuationMargin(0.); + elementObjectRssDynamics.lateralFluctuationMargin = elementObjectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration elementObjectRssDynamicsResponseTime(0.); + elementObjectRssDynamicsResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + elementObjectRssDynamics.responseTime = elementObjectRssDynamicsResponseTime; + element.objectRssDynamics = elementObjectRssDynamics; + ::ad_rss::world::RoadArea elementIntersectingRoad; + element.intersectingRoad = elementIntersectingRoad; + ::ad_rss::world::RoadArea elementEgoVehicleRoad; + element.egoVehicleRoad = elementEgoVehicleRoad; value.resize(1000, element); ASSERT_TRUE(withinValidInputRange(value)); } @@ -117,47 +133,29 @@ TEST(SceneVectorValidInputRangeTests, testValidInputRangeHigherThanInputRangeMax ::ad_rss::world::Scene element; ::ad_rss::situation::SituationType elementSituationType(::ad_rss::situation::SituationType::NotRelevant); element.situationType = elementSituationType; - ::ad_rss::world::RoadArea elementEgoVehicleRoad; - element.egoVehicleRoad = elementEgoVehicleRoad; - ::ad_rss::world::RoadArea elementIntersectingRoad; - element.intersectingRoad = elementIntersectingRoad; + ::ad_rss::world::Object elementEgoVehicle; + ::ad_rss::world::ObjectId elementEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + elementEgoVehicle.objectId = elementEgoVehicleObjectId; + ::ad_rss::world::ObjectType elementEgoVehicleObjectType(::ad_rss::world::ObjectType::Invalid); + elementEgoVehicle.objectType = elementEgoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector elementEgoVehicleOccupiedRegions; + elementEgoVehicle.occupiedRegions = elementEgoVehicleOccupiedRegions; + ::ad_rss::world::Velocity elementEgoVehicleVelocity; + ::ad_rss::physics::Speed elementEgoVehicleVelocitySpeedLon(-100.); + elementEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct + elementEgoVehicleVelocity.speedLon = elementEgoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed elementEgoVehicleVelocitySpeedLat(-100.); + elementEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + elementEgoVehicleVelocity.speedLat = elementEgoVehicleVelocitySpeedLat; + elementEgoVehicle.velocity = elementEgoVehicleVelocity; + element.egoVehicle = elementEgoVehicle; ::ad_rss::world::Object elementObject; ::ad_rss::world::ObjectId elementObjectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); elementObject.objectId = elementObjectObjectId; - ::ad_rss::world::ObjectType elementObjectObjectType(::ad_rss::world::ObjectType::EgoVehicle); + ::ad_rss::world::ObjectType elementObjectObjectType(::ad_rss::world::ObjectType::Invalid); elementObject.objectType = elementObjectObjectType; ::ad_rss::world::OccupiedRegionVector elementObjectOccupiedRegions; elementObject.occupiedRegions = elementObjectOccupiedRegions; - ::ad_rss::world::Dynamics elementObjectDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues elementObjectDynamicsAlphaLon; - ::ad_rss::physics::Acceleration elementObjectDynamicsAlphaLonAccelMax(-1e2); - elementObjectDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - elementObjectDynamicsAlphaLon.accelMax = elementObjectDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration elementObjectDynamicsAlphaLonBrakeMax(-1e2); - elementObjectDynamicsAlphaLon.brakeMax = elementObjectDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration elementObjectDynamicsAlphaLonBrakeMin(-1e2); - elementObjectDynamicsAlphaLon.brakeMin = elementObjectDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration elementObjectDynamicsAlphaLonBrakeMinCorrect(-1e2); - elementObjectDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - elementObjectDynamicsAlphaLon.brakeMinCorrect = elementObjectDynamicsAlphaLonBrakeMinCorrect; - elementObjectDynamicsAlphaLon.brakeMin = elementObjectDynamicsAlphaLon.brakeMinCorrect; - elementObjectDynamicsAlphaLon.brakeMax = elementObjectDynamicsAlphaLon.brakeMin; - elementObjectDynamicsAlphaLon.brakeMin = elementObjectDynamicsAlphaLon.brakeMax; - elementObjectDynamicsAlphaLon.brakeMinCorrect = elementObjectDynamicsAlphaLon.brakeMin; - elementObjectDynamics.alphaLon = elementObjectDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues elementObjectDynamicsAlphaLat; - ::ad_rss::physics::Acceleration elementObjectDynamicsAlphaLatAccelMax(-1e2); - elementObjectDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - elementObjectDynamicsAlphaLat.accelMax = elementObjectDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration elementObjectDynamicsAlphaLatBrakeMin(-1e2); - elementObjectDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - elementObjectDynamicsAlphaLat.brakeMin = elementObjectDynamicsAlphaLatBrakeMin; - elementObjectDynamics.alphaLat = elementObjectDynamicsAlphaLat; - ::ad_rss::physics::Distance elementObjectDynamicsLateralFluctuationMargin(0.); - elementObjectDynamics.lateralFluctuationMargin = elementObjectDynamicsLateralFluctuationMargin; - elementObject.dynamics = elementObjectDynamics; ::ad_rss::world::Velocity elementObjectVelocity; ::ad_rss::physics::Speed elementObjectVelocitySpeedLon(-100.); elementObjectVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct @@ -166,11 +164,45 @@ TEST(SceneVectorValidInputRangeTests, testValidInputRangeHigherThanInputRangeMax elementObjectVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct elementObjectVelocity.speedLat = elementObjectVelocitySpeedLat; elementObject.velocity = elementObjectVelocity; - ::ad_rss::physics::Duration elementObjectResponseTime(0.); - elementObjectResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - elementObject.responseTime = elementObjectResponseTime; element.object = elementObject; + ::ad_rss::world::RssDynamics elementObjectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues elementObjectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration elementObjectRssDynamicsAlphaLonAccelMax(-1e2); + elementObjectRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + elementObjectRssDynamicsAlphaLon.accelMax = elementObjectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration elementObjectRssDynamicsAlphaLonBrakeMax(-1e2); + elementObjectRssDynamicsAlphaLon.brakeMax = elementObjectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration elementObjectRssDynamicsAlphaLonBrakeMin(-1e2); + elementObjectRssDynamicsAlphaLon.brakeMin = elementObjectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration elementObjectRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + elementObjectRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + elementObjectRssDynamicsAlphaLon.brakeMinCorrect = elementObjectRssDynamicsAlphaLonBrakeMinCorrect; + elementObjectRssDynamicsAlphaLon.brakeMin = elementObjectRssDynamicsAlphaLon.brakeMinCorrect; + elementObjectRssDynamicsAlphaLon.brakeMax = elementObjectRssDynamicsAlphaLon.brakeMin; + elementObjectRssDynamicsAlphaLon.brakeMin = elementObjectRssDynamicsAlphaLon.brakeMax; + elementObjectRssDynamicsAlphaLon.brakeMinCorrect = elementObjectRssDynamicsAlphaLon.brakeMin; + elementObjectRssDynamics.alphaLon = elementObjectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues elementObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration elementObjectRssDynamicsAlphaLatAccelMax(-1e2); + elementObjectRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + elementObjectRssDynamicsAlphaLat.accelMax = elementObjectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration elementObjectRssDynamicsAlphaLatBrakeMin(-1e2); + elementObjectRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + elementObjectRssDynamicsAlphaLat.brakeMin = elementObjectRssDynamicsAlphaLatBrakeMin; + elementObjectRssDynamics.alphaLat = elementObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance elementObjectRssDynamicsLateralFluctuationMargin(0.); + elementObjectRssDynamics.lateralFluctuationMargin = elementObjectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration elementObjectRssDynamicsResponseTime(0.); + elementObjectRssDynamicsResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + elementObjectRssDynamics.responseTime = elementObjectRssDynamicsResponseTime; + element.objectRssDynamics = elementObjectRssDynamics; + ::ad_rss::world::RoadArea elementIntersectingRoad; + element.intersectingRoad = elementIntersectingRoad; + ::ad_rss::world::RoadArea elementEgoVehicleRoad; + element.egoVehicleRoad = elementEgoVehicleRoad; value.resize(1001, element); ASSERT_FALSE(withinValidInputRange(value)); } diff --git a/tests/generated/world/WorldModelTests.cpp b/tests/generated/world/WorldModelTests.cpp index ef4cf50c57..08038ea503 100644 --- a/tests/generated/world/WorldModelTests.cpp +++ b/tests/generated/world/WorldModelTests.cpp @@ -49,56 +49,42 @@ class WorldModelTests : public testing::Test ::ad_rss::physics::TimeIndex valueTimeIndex(std::numeric_limits<::ad_rss::physics::TimeIndex>::lowest()); valueTimeIndex = ::ad_rss::physics::TimeIndex(1); // set to valid value within struct value.timeIndex = valueTimeIndex; - ::ad_rss::world::Object valueEgoVehicle; - ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); - valueEgoVehicle.objectId = valueEgoVehicleObjectId; - ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::EgoVehicle); - valueEgoVehicle.objectType = valueEgoVehicleObjectType; - ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; - valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; - ::ad_rss::world::Dynamics valueEgoVehicleDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonAccelMax(-1e2); - valueEgoVehicleDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLon.accelMax = valueEgoVehicleDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonBrakeMax(-1e2); - valueEgoVehicleDynamicsAlphaLon.brakeMax = valueEgoVehicleDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonBrakeMin(-1e2); - valueEgoVehicleDynamicsAlphaLon.brakeMin = valueEgoVehicleDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueEgoVehicleDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + ::ad_rss::world::RssDynamics valueEgoVehicleRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonAccelMax(-1e2); + valueEgoVehicleRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within + // struct + valueEgoVehicleRssDynamicsAlphaLon.accelMax = valueEgoVehicleRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonBrakeMax(-1e2); + valueEgoVehicleRssDynamicsAlphaLon.brakeMax = valueEgoVehicleRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonBrakeMin(-1e2); + valueEgoVehicleRssDynamicsAlphaLon.brakeMin = valueEgoVehicleRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueEgoVehicleRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleDynamicsAlphaLonBrakeMinCorrect; - valueEgoVehicleDynamicsAlphaLon.brakeMin = valueEgoVehicleDynamicsAlphaLon.brakeMinCorrect; - valueEgoVehicleDynamicsAlphaLon.brakeMax = valueEgoVehicleDynamicsAlphaLon.brakeMin; - valueEgoVehicleDynamicsAlphaLon.brakeMin = valueEgoVehicleDynamicsAlphaLon.brakeMax; - valueEgoVehicleDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleDynamicsAlphaLon.brakeMin; - valueEgoVehicleDynamics.alphaLon = valueEgoVehicleDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueEgoVehicleDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLatAccelMax(-1e2); - valueEgoVehicleDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLat.accelMax = valueEgoVehicleDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLatBrakeMin(-1e2); - valueEgoVehicleDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + valueEgoVehicleRssDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleRssDynamicsAlphaLonBrakeMinCorrect; + valueEgoVehicleRssDynamicsAlphaLon.brakeMin = valueEgoVehicleRssDynamicsAlphaLon.brakeMinCorrect; + valueEgoVehicleRssDynamicsAlphaLon.brakeMax = valueEgoVehicleRssDynamicsAlphaLon.brakeMin; + valueEgoVehicleRssDynamicsAlphaLon.brakeMin = valueEgoVehicleRssDynamicsAlphaLon.brakeMax; + valueEgoVehicleRssDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleRssDynamicsAlphaLon.brakeMin; + valueEgoVehicleRssDynamics.alphaLon = valueEgoVehicleRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueEgoVehicleRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLatAccelMax(-1e2); + valueEgoVehicleRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within + // struct + valueEgoVehicleRssDynamicsAlphaLat.accelMax = valueEgoVehicleRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLatBrakeMin(-1e2); + valueEgoVehicleRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLat.brakeMin = valueEgoVehicleDynamicsAlphaLatBrakeMin; - valueEgoVehicleDynamics.alphaLat = valueEgoVehicleDynamicsAlphaLat; - ::ad_rss::physics::Distance valueEgoVehicleDynamicsLateralFluctuationMargin(0.); - valueEgoVehicleDynamics.lateralFluctuationMargin = valueEgoVehicleDynamicsLateralFluctuationMargin; - valueEgoVehicle.dynamics = valueEgoVehicleDynamics; - ::ad_rss::world::Velocity valueEgoVehicleVelocity; - ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); - valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct - valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; - ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); - valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct - valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; - valueEgoVehicle.velocity = valueEgoVehicleVelocity; - ::ad_rss::physics::Duration valueEgoVehicleResponseTime(0.); - valueEgoVehicleResponseTime = ::ad_rss::physics::Duration( + valueEgoVehicleRssDynamicsAlphaLat.brakeMin = valueEgoVehicleRssDynamicsAlphaLatBrakeMin; + valueEgoVehicleRssDynamics.alphaLat = valueEgoVehicleRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueEgoVehicleRssDynamicsLateralFluctuationMargin(0.); + valueEgoVehicleRssDynamics.lateralFluctuationMargin = valueEgoVehicleRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueEgoVehicleRssDynamicsResponseTime(0.); + valueEgoVehicleRssDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueEgoVehicle.responseTime = valueEgoVehicleResponseTime; - value.egoVehicle = valueEgoVehicle; + valueEgoVehicleRssDynamics.responseTime = valueEgoVehicleRssDynamicsResponseTime; + value.egoVehicleRssDynamics = valueEgoVehicleRssDynamics; ::ad_rss::world::SceneVector valueScenes; value.scenes = valueScenes; mValue = value; @@ -153,73 +139,37 @@ TEST_F(WorldModelTests, comparisonOperatorTimeIndexDiffers) EXPECT_TRUE(valueA != valueB); } -TEST_F(WorldModelTests, comparisonOperatorEgoVehicleDiffers) +TEST_F(WorldModelTests, comparisonOperatorEgoVehicleRssDynamicsDiffers) { ::ad_rss::world::WorldModel valueA = mValue; - ::ad_rss::world::Object egoVehicle; - ::ad_rss::world::ObjectId egoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::max()); - egoVehicle.objectId = egoVehicleObjectId; - ::ad_rss::world::ObjectType egoVehicleObjectType(::ad_rss::world::ObjectType::ArtificialObject); - egoVehicle.objectType = egoVehicleObjectType; - ::ad_rss::world::OccupiedRegionVector egoVehicleOccupiedRegions; - ::ad_rss::world::OccupiedRegion egoVehicleOccupiedRegionsElement; - ::ad_rss::world::LaneSegmentId egoVehicleOccupiedRegionsElementSegmentId( - std::numeric_limits<::ad_rss::world::LaneSegmentId>::max()); - egoVehicleOccupiedRegionsElement.segmentId = egoVehicleOccupiedRegionsElementSegmentId; - ::ad_rss::physics::ParametricRange egoVehicleOccupiedRegionsElementLonRange; - ::ad_rss::physics::ParametricValue egoVehicleOccupiedRegionsElementLonRangeMinimum(1.); - egoVehicleOccupiedRegionsElementLonRange.minimum = egoVehicleOccupiedRegionsElementLonRangeMinimum; - ::ad_rss::physics::ParametricValue egoVehicleOccupiedRegionsElementLonRangeMaximum(1.); - egoVehicleOccupiedRegionsElementLonRange.maximum = egoVehicleOccupiedRegionsElementLonRangeMaximum; - egoVehicleOccupiedRegionsElementLonRange.maximum = egoVehicleOccupiedRegionsElementLonRange.minimum; - egoVehicleOccupiedRegionsElementLonRange.minimum = egoVehicleOccupiedRegionsElementLonRange.maximum; - egoVehicleOccupiedRegionsElement.lonRange = egoVehicleOccupiedRegionsElementLonRange; - ::ad_rss::physics::ParametricRange egoVehicleOccupiedRegionsElementLatRange; - ::ad_rss::physics::ParametricValue egoVehicleOccupiedRegionsElementLatRangeMinimum(1.); - egoVehicleOccupiedRegionsElementLatRange.minimum = egoVehicleOccupiedRegionsElementLatRangeMinimum; - ::ad_rss::physics::ParametricValue egoVehicleOccupiedRegionsElementLatRangeMaximum(1.); - egoVehicleOccupiedRegionsElementLatRange.maximum = egoVehicleOccupiedRegionsElementLatRangeMaximum; - egoVehicleOccupiedRegionsElementLatRange.maximum = egoVehicleOccupiedRegionsElementLatRange.minimum; - egoVehicleOccupiedRegionsElementLatRange.minimum = egoVehicleOccupiedRegionsElementLatRange.maximum; - egoVehicleOccupiedRegionsElement.latRange = egoVehicleOccupiedRegionsElementLatRange; - egoVehicleOccupiedRegions.resize(0 + 1, egoVehicleOccupiedRegionsElement); - egoVehicle.occupiedRegions = egoVehicleOccupiedRegions; - ::ad_rss::world::Dynamics egoVehicleDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues egoVehicleDynamicsAlphaLon; - ::ad_rss::physics::Acceleration egoVehicleDynamicsAlphaLonAccelMax(1e2); - egoVehicleDynamicsAlphaLon.accelMax = egoVehicleDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration egoVehicleDynamicsAlphaLonBrakeMax(1e2); - egoVehicleDynamicsAlphaLon.brakeMax = egoVehicleDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration egoVehicleDynamicsAlphaLonBrakeMin(1e2); - egoVehicleDynamicsAlphaLon.brakeMin = egoVehicleDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration egoVehicleDynamicsAlphaLonBrakeMinCorrect(1e2); - egoVehicleDynamicsAlphaLon.brakeMinCorrect = egoVehicleDynamicsAlphaLonBrakeMinCorrect; - egoVehicleDynamicsAlphaLon.brakeMax = egoVehicleDynamicsAlphaLon.brakeMin; - egoVehicleDynamicsAlphaLon.brakeMin = egoVehicleDynamicsAlphaLon.brakeMinCorrect; - egoVehicleDynamicsAlphaLon.brakeMinCorrect = egoVehicleDynamicsAlphaLon.brakeMin; - egoVehicleDynamicsAlphaLon.brakeMin = egoVehicleDynamicsAlphaLon.brakeMax; - egoVehicleDynamics.alphaLon = egoVehicleDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues egoVehicleDynamicsAlphaLat; - ::ad_rss::physics::Acceleration egoVehicleDynamicsAlphaLatAccelMax(1e2); - egoVehicleDynamicsAlphaLat.accelMax = egoVehicleDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration egoVehicleDynamicsAlphaLatBrakeMin(1e2); - egoVehicleDynamicsAlphaLat.brakeMin = egoVehicleDynamicsAlphaLatBrakeMin; - egoVehicleDynamics.alphaLat = egoVehicleDynamicsAlphaLat; - ::ad_rss::physics::Distance egoVehicleDynamicsLateralFluctuationMargin(1e6); - egoVehicleDynamicsLateralFluctuationMargin = ::ad_rss::physics::Distance(1.); // set to valid value within struct - egoVehicleDynamics.lateralFluctuationMargin = egoVehicleDynamicsLateralFluctuationMargin; - egoVehicle.dynamics = egoVehicleDynamics; - ::ad_rss::world::Velocity egoVehicleVelocity; - ::ad_rss::physics::Speed egoVehicleVelocitySpeedLon(100.); - egoVehicleVelocity.speedLon = egoVehicleVelocitySpeedLon; - ::ad_rss::physics::Speed egoVehicleVelocitySpeedLat(100.); - egoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(10.); // set to valid value within struct - egoVehicleVelocity.speedLat = egoVehicleVelocitySpeedLat; - egoVehicle.velocity = egoVehicleVelocity; - ::ad_rss::physics::Duration egoVehicleResponseTime(100.); - egoVehicleResponseTime = ::ad_rss::physics::Duration(10.); // set to valid value within struct - egoVehicle.responseTime = egoVehicleResponseTime; - valueA.egoVehicle = egoVehicle; + ::ad_rss::world::RssDynamics egoVehicleRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues egoVehicleRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration egoVehicleRssDynamicsAlphaLonAccelMax(1e2); + egoVehicleRssDynamicsAlphaLon.accelMax = egoVehicleRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration egoVehicleRssDynamicsAlphaLonBrakeMax(1e2); + egoVehicleRssDynamicsAlphaLon.brakeMax = egoVehicleRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration egoVehicleRssDynamicsAlphaLonBrakeMin(1e2); + egoVehicleRssDynamicsAlphaLon.brakeMin = egoVehicleRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration egoVehicleRssDynamicsAlphaLonBrakeMinCorrect(1e2); + egoVehicleRssDynamicsAlphaLon.brakeMinCorrect = egoVehicleRssDynamicsAlphaLonBrakeMinCorrect; + egoVehicleRssDynamicsAlphaLon.brakeMax = egoVehicleRssDynamicsAlphaLon.brakeMin; + egoVehicleRssDynamicsAlphaLon.brakeMin = egoVehicleRssDynamicsAlphaLon.brakeMinCorrect; + egoVehicleRssDynamicsAlphaLon.brakeMinCorrect = egoVehicleRssDynamicsAlphaLon.brakeMin; + egoVehicleRssDynamicsAlphaLon.brakeMin = egoVehicleRssDynamicsAlphaLon.brakeMax; + egoVehicleRssDynamics.alphaLon = egoVehicleRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues egoVehicleRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration egoVehicleRssDynamicsAlphaLatAccelMax(1e2); + egoVehicleRssDynamicsAlphaLat.accelMax = egoVehicleRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration egoVehicleRssDynamicsAlphaLatBrakeMin(1e2); + egoVehicleRssDynamicsAlphaLat.brakeMin = egoVehicleRssDynamicsAlphaLatBrakeMin; + egoVehicleRssDynamics.alphaLat = egoVehicleRssDynamicsAlphaLat; + ::ad_rss::physics::Distance egoVehicleRssDynamicsLateralFluctuationMargin(1e6); + egoVehicleRssDynamicsLateralFluctuationMargin = ::ad_rss::physics::Distance(1.); // set to valid value within struct + egoVehicleRssDynamics.lateralFluctuationMargin = egoVehicleRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration egoVehicleRssDynamicsResponseTime(100.); + egoVehicleRssDynamicsResponseTime = ::ad_rss::physics::Duration(10.); // set to valid value within struct + egoVehicleRssDynamics.responseTime = egoVehicleRssDynamicsResponseTime; + valueA.egoVehicleRssDynamics = egoVehicleRssDynamics; ::ad_rss::world::WorldModel valueB = mValue; EXPECT_FALSE(valueA == valueB); @@ -234,70 +184,50 @@ TEST_F(WorldModelTests, comparisonOperatorScenesDiffers) ::ad_rss::situation::SituationType scenesElementSituationType( ::ad_rss::situation::SituationType::IntersectionSamePriority); scenesElement.situationType = scenesElementSituationType; - ::ad_rss::world::RoadArea scenesElementEgoVehicleRoad; - ::ad_rss::world::RoadSegment scenesElementEgoVehicleRoadElement; - ::ad_rss::world::LaneSegment scenesElementEgoVehicleRoadElementElement; - ::ad_rss::world::LaneSegmentId scenesElementEgoVehicleRoadElementElementId( + ::ad_rss::world::Object scenesElementEgoVehicle; + ::ad_rss::world::ObjectId scenesElementEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::max()); + scenesElementEgoVehicle.objectId = scenesElementEgoVehicleObjectId; + ::ad_rss::world::ObjectType scenesElementEgoVehicleObjectType(::ad_rss::world::ObjectType::ArtificialObject); + scenesElementEgoVehicle.objectType = scenesElementEgoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector scenesElementEgoVehicleOccupiedRegions; + ::ad_rss::world::OccupiedRegion scenesElementEgoVehicleOccupiedRegionsElement; + ::ad_rss::world::LaneSegmentId scenesElementEgoVehicleOccupiedRegionsElementSegmentId( std::numeric_limits<::ad_rss::world::LaneSegmentId>::max()); - scenesElementEgoVehicleRoadElementElement.id = scenesElementEgoVehicleRoadElementElementId; - ::ad_rss::world::LaneSegmentType scenesElementEgoVehicleRoadElementElementType( - ::ad_rss::world::LaneSegmentType::Intersection); - scenesElementEgoVehicleRoadElementElement.type = scenesElementEgoVehicleRoadElementElementType; - ::ad_rss::world::LaneDrivingDirection scenesElementEgoVehicleRoadElementElementDrivingDirection( - ::ad_rss::world::LaneDrivingDirection::Negative); - scenesElementEgoVehicleRoadElementElement.drivingDirection - = scenesElementEgoVehicleRoadElementElementDrivingDirection; - ::ad_rss::physics::MetricRange scenesElementEgoVehicleRoadElementElementLength; - ::ad_rss::physics::Distance scenesElementEgoVehicleRoadElementElementLengthMinimum(1e6); - scenesElementEgoVehicleRoadElementElementLength.minimum = scenesElementEgoVehicleRoadElementElementLengthMinimum; - ::ad_rss::physics::Distance scenesElementEgoVehicleRoadElementElementLengthMaximum(1e6); - scenesElementEgoVehicleRoadElementElementLength.maximum = scenesElementEgoVehicleRoadElementElementLengthMaximum; - scenesElementEgoVehicleRoadElementElementLength.maximum = scenesElementEgoVehicleRoadElementElementLength.minimum; - scenesElementEgoVehicleRoadElementElementLength.minimum = scenesElementEgoVehicleRoadElementElementLength.maximum; - scenesElementEgoVehicleRoadElementElement.length = scenesElementEgoVehicleRoadElementElementLength; - ::ad_rss::physics::MetricRange scenesElementEgoVehicleRoadElementElementWidth; - ::ad_rss::physics::Distance scenesElementEgoVehicleRoadElementElementWidthMinimum(1e6); - scenesElementEgoVehicleRoadElementElementWidth.minimum = scenesElementEgoVehicleRoadElementElementWidthMinimum; - ::ad_rss::physics::Distance scenesElementEgoVehicleRoadElementElementWidthMaximum(1e6); - scenesElementEgoVehicleRoadElementElementWidth.maximum = scenesElementEgoVehicleRoadElementElementWidthMaximum; - scenesElementEgoVehicleRoadElementElementWidth.maximum = scenesElementEgoVehicleRoadElementElementWidth.minimum; - scenesElementEgoVehicleRoadElementElementWidth.minimum = scenesElementEgoVehicleRoadElementElementWidth.maximum; - scenesElementEgoVehicleRoadElementElement.width = scenesElementEgoVehicleRoadElementElementWidth; - scenesElementEgoVehicleRoadElement.resize(1 + 1, scenesElementEgoVehicleRoadElementElement); - scenesElementEgoVehicleRoad.resize(0 + 1, scenesElementEgoVehicleRoadElement); - scenesElement.egoVehicleRoad = scenesElementEgoVehicleRoad; - ::ad_rss::world::RoadArea scenesElementIntersectingRoad; - ::ad_rss::world::RoadSegment scenesElementIntersectingRoadElement; - ::ad_rss::world::LaneSegment scenesElementIntersectingRoadElementElement; - ::ad_rss::world::LaneSegmentId scenesElementIntersectingRoadElementElementId( - std::numeric_limits<::ad_rss::world::LaneSegmentId>::max()); - scenesElementIntersectingRoadElementElement.id = scenesElementIntersectingRoadElementElementId; - ::ad_rss::world::LaneSegmentType scenesElementIntersectingRoadElementElementType( - ::ad_rss::world::LaneSegmentType::Intersection); - scenesElementIntersectingRoadElementElement.type = scenesElementIntersectingRoadElementElementType; - ::ad_rss::world::LaneDrivingDirection scenesElementIntersectingRoadElementElementDrivingDirection( - ::ad_rss::world::LaneDrivingDirection::Negative); - scenesElementIntersectingRoadElementElement.drivingDirection - = scenesElementIntersectingRoadElementElementDrivingDirection; - ::ad_rss::physics::MetricRange scenesElementIntersectingRoadElementElementLength; - ::ad_rss::physics::Distance scenesElementIntersectingRoadElementElementLengthMinimum(1e6); - scenesElementIntersectingRoadElementElementLength.minimum = scenesElementIntersectingRoadElementElementLengthMinimum; - ::ad_rss::physics::Distance scenesElementIntersectingRoadElementElementLengthMaximum(1e6); - scenesElementIntersectingRoadElementElementLength.maximum = scenesElementIntersectingRoadElementElementLengthMaximum; - scenesElementIntersectingRoadElementElementLength.maximum = scenesElementIntersectingRoadElementElementLength.minimum; - scenesElementIntersectingRoadElementElementLength.minimum = scenesElementIntersectingRoadElementElementLength.maximum; - scenesElementIntersectingRoadElementElement.length = scenesElementIntersectingRoadElementElementLength; - ::ad_rss::physics::MetricRange scenesElementIntersectingRoadElementElementWidth; - ::ad_rss::physics::Distance scenesElementIntersectingRoadElementElementWidthMinimum(1e6); - scenesElementIntersectingRoadElementElementWidth.minimum = scenesElementIntersectingRoadElementElementWidthMinimum; - ::ad_rss::physics::Distance scenesElementIntersectingRoadElementElementWidthMaximum(1e6); - scenesElementIntersectingRoadElementElementWidth.maximum = scenesElementIntersectingRoadElementElementWidthMaximum; - scenesElementIntersectingRoadElementElementWidth.maximum = scenesElementIntersectingRoadElementElementWidth.minimum; - scenesElementIntersectingRoadElementElementWidth.minimum = scenesElementIntersectingRoadElementElementWidth.maximum; - scenesElementIntersectingRoadElementElement.width = scenesElementIntersectingRoadElementElementWidth; - scenesElementIntersectingRoadElement.resize(1 + 1, scenesElementIntersectingRoadElementElement); - scenesElementIntersectingRoad.resize(0 + 1, scenesElementIntersectingRoadElement); - scenesElement.intersectingRoad = scenesElementIntersectingRoad; + scenesElementEgoVehicleOccupiedRegionsElement.segmentId = scenesElementEgoVehicleOccupiedRegionsElementSegmentId; + ::ad_rss::physics::ParametricRange scenesElementEgoVehicleOccupiedRegionsElementLonRange; + ::ad_rss::physics::ParametricValue scenesElementEgoVehicleOccupiedRegionsElementLonRangeMinimum(1.); + scenesElementEgoVehicleOccupiedRegionsElementLonRange.minimum + = scenesElementEgoVehicleOccupiedRegionsElementLonRangeMinimum; + ::ad_rss::physics::ParametricValue scenesElementEgoVehicleOccupiedRegionsElementLonRangeMaximum(1.); + scenesElementEgoVehicleOccupiedRegionsElementLonRange.maximum + = scenesElementEgoVehicleOccupiedRegionsElementLonRangeMaximum; + scenesElementEgoVehicleOccupiedRegionsElementLonRange.maximum + = scenesElementEgoVehicleOccupiedRegionsElementLonRange.minimum; + scenesElementEgoVehicleOccupiedRegionsElementLonRange.minimum + = scenesElementEgoVehicleOccupiedRegionsElementLonRange.maximum; + scenesElementEgoVehicleOccupiedRegionsElement.lonRange = scenesElementEgoVehicleOccupiedRegionsElementLonRange; + ::ad_rss::physics::ParametricRange scenesElementEgoVehicleOccupiedRegionsElementLatRange; + ::ad_rss::physics::ParametricValue scenesElementEgoVehicleOccupiedRegionsElementLatRangeMinimum(1.); + scenesElementEgoVehicleOccupiedRegionsElementLatRange.minimum + = scenesElementEgoVehicleOccupiedRegionsElementLatRangeMinimum; + ::ad_rss::physics::ParametricValue scenesElementEgoVehicleOccupiedRegionsElementLatRangeMaximum(1.); + scenesElementEgoVehicleOccupiedRegionsElementLatRange.maximum + = scenesElementEgoVehicleOccupiedRegionsElementLatRangeMaximum; + scenesElementEgoVehicleOccupiedRegionsElementLatRange.maximum + = scenesElementEgoVehicleOccupiedRegionsElementLatRange.minimum; + scenesElementEgoVehicleOccupiedRegionsElementLatRange.minimum + = scenesElementEgoVehicleOccupiedRegionsElementLatRange.maximum; + scenesElementEgoVehicleOccupiedRegionsElement.latRange = scenesElementEgoVehicleOccupiedRegionsElementLatRange; + scenesElementEgoVehicleOccupiedRegions.resize(0 + 1, scenesElementEgoVehicleOccupiedRegionsElement); + scenesElementEgoVehicle.occupiedRegions = scenesElementEgoVehicleOccupiedRegions; + ::ad_rss::world::Velocity scenesElementEgoVehicleVelocity; + ::ad_rss::physics::Speed scenesElementEgoVehicleVelocitySpeedLon(100.); + scenesElementEgoVehicleVelocity.speedLon = scenesElementEgoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed scenesElementEgoVehicleVelocitySpeedLat(100.); + scenesElementEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(10.); // set to valid value within struct + scenesElementEgoVehicleVelocity.speedLat = scenesElementEgoVehicleVelocitySpeedLat; + scenesElementEgoVehicle.velocity = scenesElementEgoVehicleVelocity; + scenesElement.egoVehicle = scenesElementEgoVehicle; ::ad_rss::world::Object scenesElementObject; ::ad_rss::world::ObjectId scenesElementObjectObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::max()); scenesElementObject.objectId = scenesElementObjectObjectId; @@ -326,32 +256,6 @@ TEST_F(WorldModelTests, comparisonOperatorScenesDiffers) scenesElementObjectOccupiedRegionsElement.latRange = scenesElementObjectOccupiedRegionsElementLatRange; scenesElementObjectOccupiedRegions.resize(0 + 1, scenesElementObjectOccupiedRegionsElement); scenesElementObject.occupiedRegions = scenesElementObjectOccupiedRegions; - ::ad_rss::world::Dynamics scenesElementObjectDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues scenesElementObjectDynamicsAlphaLon; - ::ad_rss::physics::Acceleration scenesElementObjectDynamicsAlphaLonAccelMax(1e2); - scenesElementObjectDynamicsAlphaLon.accelMax = scenesElementObjectDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration scenesElementObjectDynamicsAlphaLonBrakeMax(1e2); - scenesElementObjectDynamicsAlphaLon.brakeMax = scenesElementObjectDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration scenesElementObjectDynamicsAlphaLonBrakeMin(1e2); - scenesElementObjectDynamicsAlphaLon.brakeMin = scenesElementObjectDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration scenesElementObjectDynamicsAlphaLonBrakeMinCorrect(1e2); - scenesElementObjectDynamicsAlphaLon.brakeMinCorrect = scenesElementObjectDynamicsAlphaLonBrakeMinCorrect; - scenesElementObjectDynamicsAlphaLon.brakeMax = scenesElementObjectDynamicsAlphaLon.brakeMin; - scenesElementObjectDynamicsAlphaLon.brakeMin = scenesElementObjectDynamicsAlphaLon.brakeMinCorrect; - scenesElementObjectDynamicsAlphaLon.brakeMinCorrect = scenesElementObjectDynamicsAlphaLon.brakeMin; - scenesElementObjectDynamicsAlphaLon.brakeMin = scenesElementObjectDynamicsAlphaLon.brakeMax; - scenesElementObjectDynamics.alphaLon = scenesElementObjectDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues scenesElementObjectDynamicsAlphaLat; - ::ad_rss::physics::Acceleration scenesElementObjectDynamicsAlphaLatAccelMax(1e2); - scenesElementObjectDynamicsAlphaLat.accelMax = scenesElementObjectDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration scenesElementObjectDynamicsAlphaLatBrakeMin(1e2); - scenesElementObjectDynamicsAlphaLat.brakeMin = scenesElementObjectDynamicsAlphaLatBrakeMin; - scenesElementObjectDynamics.alphaLat = scenesElementObjectDynamicsAlphaLat; - ::ad_rss::physics::Distance scenesElementObjectDynamicsLateralFluctuationMargin(1e6); - scenesElementObjectDynamicsLateralFluctuationMargin - = ::ad_rss::physics::Distance(1.); // set to valid value within struct - scenesElementObjectDynamics.lateralFluctuationMargin = scenesElementObjectDynamicsLateralFluctuationMargin; - scenesElementObject.dynamics = scenesElementObjectDynamics; ::ad_rss::world::Velocity scenesElementObjectVelocity; ::ad_rss::physics::Speed scenesElementObjectVelocitySpeedLon(100.); scenesElementObjectVelocity.speedLon = scenesElementObjectVelocitySpeedLon; @@ -359,10 +263,100 @@ TEST_F(WorldModelTests, comparisonOperatorScenesDiffers) scenesElementObjectVelocitySpeedLat = ::ad_rss::physics::Speed(10.); // set to valid value within struct scenesElementObjectVelocity.speedLat = scenesElementObjectVelocitySpeedLat; scenesElementObject.velocity = scenesElementObjectVelocity; - ::ad_rss::physics::Duration scenesElementObjectResponseTime(100.); - scenesElementObjectResponseTime = ::ad_rss::physics::Duration(10.); // set to valid value within struct - scenesElementObject.responseTime = scenesElementObjectResponseTime; scenesElement.object = scenesElementObject; + ::ad_rss::world::RssDynamics scenesElementObjectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues scenesElementObjectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration scenesElementObjectRssDynamicsAlphaLonAccelMax(1e2); + scenesElementObjectRssDynamicsAlphaLon.accelMax = scenesElementObjectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration scenesElementObjectRssDynamicsAlphaLonBrakeMax(1e2); + scenesElementObjectRssDynamicsAlphaLon.brakeMax = scenesElementObjectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration scenesElementObjectRssDynamicsAlphaLonBrakeMin(1e2); + scenesElementObjectRssDynamicsAlphaLon.brakeMin = scenesElementObjectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration scenesElementObjectRssDynamicsAlphaLonBrakeMinCorrect(1e2); + scenesElementObjectRssDynamicsAlphaLon.brakeMinCorrect = scenesElementObjectRssDynamicsAlphaLonBrakeMinCorrect; + scenesElementObjectRssDynamicsAlphaLon.brakeMax = scenesElementObjectRssDynamicsAlphaLon.brakeMin; + scenesElementObjectRssDynamicsAlphaLon.brakeMin = scenesElementObjectRssDynamicsAlphaLon.brakeMinCorrect; + scenesElementObjectRssDynamicsAlphaLon.brakeMinCorrect = scenesElementObjectRssDynamicsAlphaLon.brakeMin; + scenesElementObjectRssDynamicsAlphaLon.brakeMin = scenesElementObjectRssDynamicsAlphaLon.brakeMax; + scenesElementObjectRssDynamics.alphaLon = scenesElementObjectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues scenesElementObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration scenesElementObjectRssDynamicsAlphaLatAccelMax(1e2); + scenesElementObjectRssDynamicsAlphaLat.accelMax = scenesElementObjectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration scenesElementObjectRssDynamicsAlphaLatBrakeMin(1e2); + scenesElementObjectRssDynamicsAlphaLat.brakeMin = scenesElementObjectRssDynamicsAlphaLatBrakeMin; + scenesElementObjectRssDynamics.alphaLat = scenesElementObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance scenesElementObjectRssDynamicsLateralFluctuationMargin(1e6); + scenesElementObjectRssDynamicsLateralFluctuationMargin + = ::ad_rss::physics::Distance(1.); // set to valid value within struct + scenesElementObjectRssDynamics.lateralFluctuationMargin = scenesElementObjectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration scenesElementObjectRssDynamicsResponseTime(100.); + scenesElementObjectRssDynamicsResponseTime = ::ad_rss::physics::Duration(10.); // set to valid value within struct + scenesElementObjectRssDynamics.responseTime = scenesElementObjectRssDynamicsResponseTime; + scenesElement.objectRssDynamics = scenesElementObjectRssDynamics; + ::ad_rss::world::RoadArea scenesElementIntersectingRoad; + ::ad_rss::world::RoadSegment scenesElementIntersectingRoadElement; + ::ad_rss::world::LaneSegment scenesElementIntersectingRoadElementElement; + ::ad_rss::world::LaneSegmentId scenesElementIntersectingRoadElementElementId( + std::numeric_limits<::ad_rss::world::LaneSegmentId>::max()); + scenesElementIntersectingRoadElementElement.id = scenesElementIntersectingRoadElementElementId; + ::ad_rss::world::LaneSegmentType scenesElementIntersectingRoadElementElementType( + ::ad_rss::world::LaneSegmentType::Intersection); + scenesElementIntersectingRoadElementElement.type = scenesElementIntersectingRoadElementElementType; + ::ad_rss::world::LaneDrivingDirection scenesElementIntersectingRoadElementElementDrivingDirection( + ::ad_rss::world::LaneDrivingDirection::Negative); + scenesElementIntersectingRoadElementElement.drivingDirection + = scenesElementIntersectingRoadElementElementDrivingDirection; + ::ad_rss::physics::MetricRange scenesElementIntersectingRoadElementElementLength; + ::ad_rss::physics::Distance scenesElementIntersectingRoadElementElementLengthMinimum(1e6); + scenesElementIntersectingRoadElementElementLength.minimum = scenesElementIntersectingRoadElementElementLengthMinimum; + ::ad_rss::physics::Distance scenesElementIntersectingRoadElementElementLengthMaximum(1e6); + scenesElementIntersectingRoadElementElementLength.maximum = scenesElementIntersectingRoadElementElementLengthMaximum; + scenesElementIntersectingRoadElementElementLength.maximum = scenesElementIntersectingRoadElementElementLength.minimum; + scenesElementIntersectingRoadElementElementLength.minimum = scenesElementIntersectingRoadElementElementLength.maximum; + scenesElementIntersectingRoadElementElement.length = scenesElementIntersectingRoadElementElementLength; + ::ad_rss::physics::MetricRange scenesElementIntersectingRoadElementElementWidth; + ::ad_rss::physics::Distance scenesElementIntersectingRoadElementElementWidthMinimum(1e6); + scenesElementIntersectingRoadElementElementWidth.minimum = scenesElementIntersectingRoadElementElementWidthMinimum; + ::ad_rss::physics::Distance scenesElementIntersectingRoadElementElementWidthMaximum(1e6); + scenesElementIntersectingRoadElementElementWidth.maximum = scenesElementIntersectingRoadElementElementWidthMaximum; + scenesElementIntersectingRoadElementElementWidth.maximum = scenesElementIntersectingRoadElementElementWidth.minimum; + scenesElementIntersectingRoadElementElementWidth.minimum = scenesElementIntersectingRoadElementElementWidth.maximum; + scenesElementIntersectingRoadElementElement.width = scenesElementIntersectingRoadElementElementWidth; + scenesElementIntersectingRoadElement.resize(1 + 1, scenesElementIntersectingRoadElementElement); + scenesElementIntersectingRoad.resize(0 + 1, scenesElementIntersectingRoadElement); + scenesElement.intersectingRoad = scenesElementIntersectingRoad; + ::ad_rss::world::RoadArea scenesElementEgoVehicleRoad; + ::ad_rss::world::RoadSegment scenesElementEgoVehicleRoadElement; + ::ad_rss::world::LaneSegment scenesElementEgoVehicleRoadElementElement; + ::ad_rss::world::LaneSegmentId scenesElementEgoVehicleRoadElementElementId( + std::numeric_limits<::ad_rss::world::LaneSegmentId>::max()); + scenesElementEgoVehicleRoadElementElement.id = scenesElementEgoVehicleRoadElementElementId; + ::ad_rss::world::LaneSegmentType scenesElementEgoVehicleRoadElementElementType( + ::ad_rss::world::LaneSegmentType::Intersection); + scenesElementEgoVehicleRoadElementElement.type = scenesElementEgoVehicleRoadElementElementType; + ::ad_rss::world::LaneDrivingDirection scenesElementEgoVehicleRoadElementElementDrivingDirection( + ::ad_rss::world::LaneDrivingDirection::Negative); + scenesElementEgoVehicleRoadElementElement.drivingDirection + = scenesElementEgoVehicleRoadElementElementDrivingDirection; + ::ad_rss::physics::MetricRange scenesElementEgoVehicleRoadElementElementLength; + ::ad_rss::physics::Distance scenesElementEgoVehicleRoadElementElementLengthMinimum(1e6); + scenesElementEgoVehicleRoadElementElementLength.minimum = scenesElementEgoVehicleRoadElementElementLengthMinimum; + ::ad_rss::physics::Distance scenesElementEgoVehicleRoadElementElementLengthMaximum(1e6); + scenesElementEgoVehicleRoadElementElementLength.maximum = scenesElementEgoVehicleRoadElementElementLengthMaximum; + scenesElementEgoVehicleRoadElementElementLength.maximum = scenesElementEgoVehicleRoadElementElementLength.minimum; + scenesElementEgoVehicleRoadElementElementLength.minimum = scenesElementEgoVehicleRoadElementElementLength.maximum; + scenesElementEgoVehicleRoadElementElement.length = scenesElementEgoVehicleRoadElementElementLength; + ::ad_rss::physics::MetricRange scenesElementEgoVehicleRoadElementElementWidth; + ::ad_rss::physics::Distance scenesElementEgoVehicleRoadElementElementWidthMinimum(1e6); + scenesElementEgoVehicleRoadElementElementWidth.minimum = scenesElementEgoVehicleRoadElementElementWidthMinimum; + ::ad_rss::physics::Distance scenesElementEgoVehicleRoadElementElementWidthMaximum(1e6); + scenesElementEgoVehicleRoadElementElementWidth.maximum = scenesElementEgoVehicleRoadElementElementWidthMaximum; + scenesElementEgoVehicleRoadElementElementWidth.maximum = scenesElementEgoVehicleRoadElementElementWidth.minimum; + scenesElementEgoVehicleRoadElementElementWidth.minimum = scenesElementEgoVehicleRoadElementElementWidth.maximum; + scenesElementEgoVehicleRoadElementElement.width = scenesElementEgoVehicleRoadElementElementWidth; + scenesElementEgoVehicleRoadElement.resize(1 + 1, scenesElementEgoVehicleRoadElementElement); + scenesElementEgoVehicleRoad.resize(0 + 1, scenesElementEgoVehicleRoadElement); + scenesElement.egoVehicleRoad = scenesElementEgoVehicleRoad; scenes.resize(0 + 1, scenesElement); valueA.scenes = scenes; ::ad_rss::world::WorldModel valueB = mValue; diff --git a/tests/generated/world/WorldModelValidInputRangeTests.cpp b/tests/generated/world/WorldModelValidInputRangeTests.cpp index b0f0e89eb2..f86003dbd8 100644 --- a/tests/generated/world/WorldModelValidInputRangeTests.cpp +++ b/tests/generated/world/WorldModelValidInputRangeTests.cpp @@ -47,192 +47,148 @@ TEST(WorldModelValidInputRangeTests, testValidInputRange) ::ad_rss::physics::TimeIndex valueTimeIndex(std::numeric_limits<::ad_rss::physics::TimeIndex>::lowest()); valueTimeIndex = ::ad_rss::physics::TimeIndex(1); // set to valid value within struct value.timeIndex = valueTimeIndex; - ::ad_rss::world::Object valueEgoVehicle; - ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); - valueEgoVehicle.objectId = valueEgoVehicleObjectId; - ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::EgoVehicle); - valueEgoVehicle.objectType = valueEgoVehicleObjectType; - ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; - valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; - ::ad_rss::world::Dynamics valueEgoVehicleDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonAccelMax(-1e2); - valueEgoVehicleDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLon.accelMax = valueEgoVehicleDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonBrakeMax(-1e2); - valueEgoVehicleDynamicsAlphaLon.brakeMax = valueEgoVehicleDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonBrakeMin(-1e2); - valueEgoVehicleDynamicsAlphaLon.brakeMin = valueEgoVehicleDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueEgoVehicleDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + ::ad_rss::world::RssDynamics valueEgoVehicleRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonAccelMax(-1e2); + valueEgoVehicleRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueEgoVehicleRssDynamicsAlphaLon.accelMax = valueEgoVehicleRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonBrakeMax(-1e2); + valueEgoVehicleRssDynamicsAlphaLon.brakeMax = valueEgoVehicleRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonBrakeMin(-1e2); + valueEgoVehicleRssDynamicsAlphaLon.brakeMin = valueEgoVehicleRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueEgoVehicleRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleDynamicsAlphaLonBrakeMinCorrect; - valueEgoVehicleDynamicsAlphaLon.brakeMin = valueEgoVehicleDynamicsAlphaLon.brakeMinCorrect; - valueEgoVehicleDynamicsAlphaLon.brakeMax = valueEgoVehicleDynamicsAlphaLon.brakeMin; - valueEgoVehicleDynamicsAlphaLon.brakeMin = valueEgoVehicleDynamicsAlphaLon.brakeMax; - valueEgoVehicleDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleDynamicsAlphaLon.brakeMin; - valueEgoVehicleDynamics.alphaLon = valueEgoVehicleDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueEgoVehicleDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLatAccelMax(-1e2); - valueEgoVehicleDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLat.accelMax = valueEgoVehicleDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLatBrakeMin(-1e2); - valueEgoVehicleDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + valueEgoVehicleRssDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleRssDynamicsAlphaLonBrakeMinCorrect; + valueEgoVehicleRssDynamicsAlphaLon.brakeMin = valueEgoVehicleRssDynamicsAlphaLon.brakeMinCorrect; + valueEgoVehicleRssDynamicsAlphaLon.brakeMax = valueEgoVehicleRssDynamicsAlphaLon.brakeMin; + valueEgoVehicleRssDynamicsAlphaLon.brakeMin = valueEgoVehicleRssDynamicsAlphaLon.brakeMax; + valueEgoVehicleRssDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleRssDynamicsAlphaLon.brakeMin; + valueEgoVehicleRssDynamics.alphaLon = valueEgoVehicleRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueEgoVehicleRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLatAccelMax(-1e2); + valueEgoVehicleRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueEgoVehicleRssDynamicsAlphaLat.accelMax = valueEgoVehicleRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLatBrakeMin(-1e2); + valueEgoVehicleRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLat.brakeMin = valueEgoVehicleDynamicsAlphaLatBrakeMin; - valueEgoVehicleDynamics.alphaLat = valueEgoVehicleDynamicsAlphaLat; - ::ad_rss::physics::Distance valueEgoVehicleDynamicsLateralFluctuationMargin(0.); - valueEgoVehicleDynamics.lateralFluctuationMargin = valueEgoVehicleDynamicsLateralFluctuationMargin; - valueEgoVehicle.dynamics = valueEgoVehicleDynamics; - ::ad_rss::world::Velocity valueEgoVehicleVelocity; - ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); - valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct - valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; - ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); - valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct - valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; - valueEgoVehicle.velocity = valueEgoVehicleVelocity; - ::ad_rss::physics::Duration valueEgoVehicleResponseTime(0.); - valueEgoVehicleResponseTime = ::ad_rss::physics::Duration( + valueEgoVehicleRssDynamicsAlphaLat.brakeMin = valueEgoVehicleRssDynamicsAlphaLatBrakeMin; + valueEgoVehicleRssDynamics.alphaLat = valueEgoVehicleRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueEgoVehicleRssDynamicsLateralFluctuationMargin(0.); + valueEgoVehicleRssDynamics.lateralFluctuationMargin = valueEgoVehicleRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueEgoVehicleRssDynamicsResponseTime(0.); + valueEgoVehicleRssDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueEgoVehicle.responseTime = valueEgoVehicleResponseTime; - value.egoVehicle = valueEgoVehicle; + valueEgoVehicleRssDynamics.responseTime = valueEgoVehicleRssDynamicsResponseTime; + value.egoVehicleRssDynamics = valueEgoVehicleRssDynamics; ::ad_rss::world::SceneVector valueScenes; value.scenes = valueScenes; ASSERT_TRUE(withinValidInputRange(value)); } -TEST(WorldModelValidInputRangeTests, testValidInputRangeEgoVehicleTooSmall) +TEST(WorldModelValidInputRangeTests, testValidInputRangeEgoVehicleRssDynamicsTooSmall) { ::ad_rss::world::WorldModel value; ::ad_rss::physics::TimeIndex valueTimeIndex(std::numeric_limits<::ad_rss::physics::TimeIndex>::lowest()); valueTimeIndex = ::ad_rss::physics::TimeIndex(1); // set to valid value within struct value.timeIndex = valueTimeIndex; - ::ad_rss::world::Object valueEgoVehicle; - ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); - valueEgoVehicle.objectId = valueEgoVehicleObjectId; - ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::EgoVehicle); - valueEgoVehicle.objectType = valueEgoVehicleObjectType; - ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; - valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; - ::ad_rss::world::Dynamics valueEgoVehicleDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonAccelMax(-1e2); - valueEgoVehicleDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLon.accelMax = valueEgoVehicleDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonBrakeMax(-1e2); - valueEgoVehicleDynamicsAlphaLon.brakeMax = valueEgoVehicleDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonBrakeMin(-1e2); - valueEgoVehicleDynamicsAlphaLon.brakeMin = valueEgoVehicleDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueEgoVehicleDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + ::ad_rss::world::RssDynamics valueEgoVehicleRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonAccelMax(-1e2); + valueEgoVehicleRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueEgoVehicleRssDynamicsAlphaLon.accelMax = valueEgoVehicleRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonBrakeMax(-1e2); + valueEgoVehicleRssDynamicsAlphaLon.brakeMax = valueEgoVehicleRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonBrakeMin(-1e2); + valueEgoVehicleRssDynamicsAlphaLon.brakeMin = valueEgoVehicleRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueEgoVehicleRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleDynamicsAlphaLonBrakeMinCorrect; - valueEgoVehicleDynamicsAlphaLon.brakeMin = valueEgoVehicleDynamicsAlphaLon.brakeMinCorrect; - valueEgoVehicleDynamicsAlphaLon.brakeMax = valueEgoVehicleDynamicsAlphaLon.brakeMin; - valueEgoVehicleDynamicsAlphaLon.brakeMin = valueEgoVehicleDynamicsAlphaLon.brakeMax; - valueEgoVehicleDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleDynamicsAlphaLon.brakeMin; - valueEgoVehicleDynamics.alphaLon = valueEgoVehicleDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueEgoVehicleDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLatAccelMax(-1e2); - valueEgoVehicleDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLat.accelMax = valueEgoVehicleDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLatBrakeMin(-1e2); - valueEgoVehicleDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + valueEgoVehicleRssDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleRssDynamicsAlphaLonBrakeMinCorrect; + valueEgoVehicleRssDynamicsAlphaLon.brakeMin = valueEgoVehicleRssDynamicsAlphaLon.brakeMinCorrect; + valueEgoVehicleRssDynamicsAlphaLon.brakeMax = valueEgoVehicleRssDynamicsAlphaLon.brakeMin; + valueEgoVehicleRssDynamicsAlphaLon.brakeMin = valueEgoVehicleRssDynamicsAlphaLon.brakeMax; + valueEgoVehicleRssDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleRssDynamicsAlphaLon.brakeMin; + valueEgoVehicleRssDynamics.alphaLon = valueEgoVehicleRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueEgoVehicleRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLatAccelMax(-1e2); + valueEgoVehicleRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueEgoVehicleRssDynamicsAlphaLat.accelMax = valueEgoVehicleRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLatBrakeMin(-1e2); + valueEgoVehicleRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLat.brakeMin = valueEgoVehicleDynamicsAlphaLatBrakeMin; - valueEgoVehicleDynamics.alphaLat = valueEgoVehicleDynamicsAlphaLat; - ::ad_rss::physics::Distance valueEgoVehicleDynamicsLateralFluctuationMargin(0.); - valueEgoVehicleDynamics.lateralFluctuationMargin = valueEgoVehicleDynamicsLateralFluctuationMargin; - valueEgoVehicle.dynamics = valueEgoVehicleDynamics; - ::ad_rss::world::Velocity valueEgoVehicleVelocity; - ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); - valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct - valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; - ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); - valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct - valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; - valueEgoVehicle.velocity = valueEgoVehicleVelocity; - ::ad_rss::physics::Duration valueEgoVehicleResponseTime(0.); - valueEgoVehicleResponseTime = ::ad_rss::physics::Duration( + valueEgoVehicleRssDynamicsAlphaLat.brakeMin = valueEgoVehicleRssDynamicsAlphaLatBrakeMin; + valueEgoVehicleRssDynamics.alphaLat = valueEgoVehicleRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueEgoVehicleRssDynamicsLateralFluctuationMargin(0.); + valueEgoVehicleRssDynamics.lateralFluctuationMargin = valueEgoVehicleRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueEgoVehicleRssDynamicsResponseTime(0.); + valueEgoVehicleRssDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueEgoVehicle.responseTime = valueEgoVehicleResponseTime; - value.egoVehicle = valueEgoVehicle; + valueEgoVehicleRssDynamics.responseTime = valueEgoVehicleRssDynamicsResponseTime; + value.egoVehicleRssDynamics = valueEgoVehicleRssDynamics; ::ad_rss::world::SceneVector valueScenes; value.scenes = valueScenes; // override member with invalid value - ::ad_rss::world::Object invalidInitializedMember; - ::ad_rss::world::ObjectType invalidInitializedMemberObjectType(static_cast<::ad_rss::world::ObjectType>(-1)); - invalidInitializedMember.objectType = invalidInitializedMemberObjectType; - value.egoVehicle = invalidInitializedMember; + ::ad_rss::world::RssDynamics invalidInitializedMember; + ::ad_rss::world::LongitudinalRssAccelerationValues invalidInitializedMemberAlphaLon; + ::ad_rss::physics::Acceleration invalidInitializedMemberAlphaLonAccelMax(-1e2 * 1.1); + invalidInitializedMemberAlphaLon.accelMax = invalidInitializedMemberAlphaLonAccelMax; + invalidInitializedMember.alphaLon = invalidInitializedMemberAlphaLon; + value.egoVehicleRssDynamics = invalidInitializedMember; ASSERT_FALSE(withinValidInputRange(value)); } -TEST(WorldModelValidInputRangeTests, testValidInputRangeEgoVehicleTooBig) +TEST(WorldModelValidInputRangeTests, testValidInputRangeEgoVehicleRssDynamicsTooBig) { ::ad_rss::world::WorldModel value; ::ad_rss::physics::TimeIndex valueTimeIndex(std::numeric_limits<::ad_rss::physics::TimeIndex>::lowest()); valueTimeIndex = ::ad_rss::physics::TimeIndex(1); // set to valid value within struct value.timeIndex = valueTimeIndex; - ::ad_rss::world::Object valueEgoVehicle; - ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); - valueEgoVehicle.objectId = valueEgoVehicleObjectId; - ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::EgoVehicle); - valueEgoVehicle.objectType = valueEgoVehicleObjectType; - ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; - valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; - ::ad_rss::world::Dynamics valueEgoVehicleDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonAccelMax(-1e2); - valueEgoVehicleDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLon.accelMax = valueEgoVehicleDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonBrakeMax(-1e2); - valueEgoVehicleDynamicsAlphaLon.brakeMax = valueEgoVehicleDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonBrakeMin(-1e2); - valueEgoVehicleDynamicsAlphaLon.brakeMin = valueEgoVehicleDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueEgoVehicleDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + ::ad_rss::world::RssDynamics valueEgoVehicleRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonAccelMax(-1e2); + valueEgoVehicleRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueEgoVehicleRssDynamicsAlphaLon.accelMax = valueEgoVehicleRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonBrakeMax(-1e2); + valueEgoVehicleRssDynamicsAlphaLon.brakeMax = valueEgoVehicleRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonBrakeMin(-1e2); + valueEgoVehicleRssDynamicsAlphaLon.brakeMin = valueEgoVehicleRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueEgoVehicleRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleDynamicsAlphaLonBrakeMinCorrect; - valueEgoVehicleDynamicsAlphaLon.brakeMin = valueEgoVehicleDynamicsAlphaLon.brakeMinCorrect; - valueEgoVehicleDynamicsAlphaLon.brakeMax = valueEgoVehicleDynamicsAlphaLon.brakeMin; - valueEgoVehicleDynamicsAlphaLon.brakeMin = valueEgoVehicleDynamicsAlphaLon.brakeMax; - valueEgoVehicleDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleDynamicsAlphaLon.brakeMin; - valueEgoVehicleDynamics.alphaLon = valueEgoVehicleDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueEgoVehicleDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLatAccelMax(-1e2); - valueEgoVehicleDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLat.accelMax = valueEgoVehicleDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLatBrakeMin(-1e2); - valueEgoVehicleDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + valueEgoVehicleRssDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleRssDynamicsAlphaLonBrakeMinCorrect; + valueEgoVehicleRssDynamicsAlphaLon.brakeMin = valueEgoVehicleRssDynamicsAlphaLon.brakeMinCorrect; + valueEgoVehicleRssDynamicsAlphaLon.brakeMax = valueEgoVehicleRssDynamicsAlphaLon.brakeMin; + valueEgoVehicleRssDynamicsAlphaLon.brakeMin = valueEgoVehicleRssDynamicsAlphaLon.brakeMax; + valueEgoVehicleRssDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleRssDynamicsAlphaLon.brakeMin; + valueEgoVehicleRssDynamics.alphaLon = valueEgoVehicleRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueEgoVehicleRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLatAccelMax(-1e2); + valueEgoVehicleRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueEgoVehicleRssDynamicsAlphaLat.accelMax = valueEgoVehicleRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLatBrakeMin(-1e2); + valueEgoVehicleRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLat.brakeMin = valueEgoVehicleDynamicsAlphaLatBrakeMin; - valueEgoVehicleDynamics.alphaLat = valueEgoVehicleDynamicsAlphaLat; - ::ad_rss::physics::Distance valueEgoVehicleDynamicsLateralFluctuationMargin(0.); - valueEgoVehicleDynamics.lateralFluctuationMargin = valueEgoVehicleDynamicsLateralFluctuationMargin; - valueEgoVehicle.dynamics = valueEgoVehicleDynamics; - ::ad_rss::world::Velocity valueEgoVehicleVelocity; - ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); - valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct - valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; - ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); - valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct - valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; - valueEgoVehicle.velocity = valueEgoVehicleVelocity; - ::ad_rss::physics::Duration valueEgoVehicleResponseTime(0.); - valueEgoVehicleResponseTime = ::ad_rss::physics::Duration( + valueEgoVehicleRssDynamicsAlphaLat.brakeMin = valueEgoVehicleRssDynamicsAlphaLatBrakeMin; + valueEgoVehicleRssDynamics.alphaLat = valueEgoVehicleRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueEgoVehicleRssDynamicsLateralFluctuationMargin(0.); + valueEgoVehicleRssDynamics.lateralFluctuationMargin = valueEgoVehicleRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueEgoVehicleRssDynamicsResponseTime(0.); + valueEgoVehicleRssDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueEgoVehicle.responseTime = valueEgoVehicleResponseTime; - value.egoVehicle = valueEgoVehicle; + valueEgoVehicleRssDynamics.responseTime = valueEgoVehicleRssDynamicsResponseTime; + value.egoVehicleRssDynamics = valueEgoVehicleRssDynamics; ::ad_rss::world::SceneVector valueScenes; value.scenes = valueScenes; // override member with invalid value - ::ad_rss::world::Object invalidInitializedMember; - ::ad_rss::world::ObjectType invalidInitializedMemberObjectType(static_cast<::ad_rss::world::ObjectType>(-1)); - invalidInitializedMember.objectType = invalidInitializedMemberObjectType; - value.egoVehicle = invalidInitializedMember; + ::ad_rss::world::RssDynamics invalidInitializedMember; + ::ad_rss::world::LongitudinalRssAccelerationValues invalidInitializedMemberAlphaLon; + ::ad_rss::physics::Acceleration invalidInitializedMemberAlphaLonAccelMax(1e2 * 1.1); + invalidInitializedMemberAlphaLon.accelMax = invalidInitializedMemberAlphaLonAccelMax; + invalidInitializedMember.alphaLon = invalidInitializedMemberAlphaLon; + value.egoVehicleRssDynamics = invalidInitializedMember; ASSERT_FALSE(withinValidInputRange(value)); } @@ -242,56 +198,40 @@ TEST(WorldModelValidInputRangeTests, testValidInputRangeScenesTooSmall) ::ad_rss::physics::TimeIndex valueTimeIndex(std::numeric_limits<::ad_rss::physics::TimeIndex>::lowest()); valueTimeIndex = ::ad_rss::physics::TimeIndex(1); // set to valid value within struct value.timeIndex = valueTimeIndex; - ::ad_rss::world::Object valueEgoVehicle; - ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); - valueEgoVehicle.objectId = valueEgoVehicleObjectId; - ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::EgoVehicle); - valueEgoVehicle.objectType = valueEgoVehicleObjectType; - ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; - valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; - ::ad_rss::world::Dynamics valueEgoVehicleDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonAccelMax(-1e2); - valueEgoVehicleDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLon.accelMax = valueEgoVehicleDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonBrakeMax(-1e2); - valueEgoVehicleDynamicsAlphaLon.brakeMax = valueEgoVehicleDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonBrakeMin(-1e2); - valueEgoVehicleDynamicsAlphaLon.brakeMin = valueEgoVehicleDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueEgoVehicleDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + ::ad_rss::world::RssDynamics valueEgoVehicleRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonAccelMax(-1e2); + valueEgoVehicleRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueEgoVehicleRssDynamicsAlphaLon.accelMax = valueEgoVehicleRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonBrakeMax(-1e2); + valueEgoVehicleRssDynamicsAlphaLon.brakeMax = valueEgoVehicleRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonBrakeMin(-1e2); + valueEgoVehicleRssDynamicsAlphaLon.brakeMin = valueEgoVehicleRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueEgoVehicleRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleDynamicsAlphaLonBrakeMinCorrect; - valueEgoVehicleDynamicsAlphaLon.brakeMin = valueEgoVehicleDynamicsAlphaLon.brakeMinCorrect; - valueEgoVehicleDynamicsAlphaLon.brakeMax = valueEgoVehicleDynamicsAlphaLon.brakeMin; - valueEgoVehicleDynamicsAlphaLon.brakeMin = valueEgoVehicleDynamicsAlphaLon.brakeMax; - valueEgoVehicleDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleDynamicsAlphaLon.brakeMin; - valueEgoVehicleDynamics.alphaLon = valueEgoVehicleDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueEgoVehicleDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLatAccelMax(-1e2); - valueEgoVehicleDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLat.accelMax = valueEgoVehicleDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLatBrakeMin(-1e2); - valueEgoVehicleDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + valueEgoVehicleRssDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleRssDynamicsAlphaLonBrakeMinCorrect; + valueEgoVehicleRssDynamicsAlphaLon.brakeMin = valueEgoVehicleRssDynamicsAlphaLon.brakeMinCorrect; + valueEgoVehicleRssDynamicsAlphaLon.brakeMax = valueEgoVehicleRssDynamicsAlphaLon.brakeMin; + valueEgoVehicleRssDynamicsAlphaLon.brakeMin = valueEgoVehicleRssDynamicsAlphaLon.brakeMax; + valueEgoVehicleRssDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleRssDynamicsAlphaLon.brakeMin; + valueEgoVehicleRssDynamics.alphaLon = valueEgoVehicleRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueEgoVehicleRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLatAccelMax(-1e2); + valueEgoVehicleRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueEgoVehicleRssDynamicsAlphaLat.accelMax = valueEgoVehicleRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLatBrakeMin(-1e2); + valueEgoVehicleRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLat.brakeMin = valueEgoVehicleDynamicsAlphaLatBrakeMin; - valueEgoVehicleDynamics.alphaLat = valueEgoVehicleDynamicsAlphaLat; - ::ad_rss::physics::Distance valueEgoVehicleDynamicsLateralFluctuationMargin(0.); - valueEgoVehicleDynamics.lateralFluctuationMargin = valueEgoVehicleDynamicsLateralFluctuationMargin; - valueEgoVehicle.dynamics = valueEgoVehicleDynamics; - ::ad_rss::world::Velocity valueEgoVehicleVelocity; - ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); - valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct - valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; - ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); - valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct - valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; - valueEgoVehicle.velocity = valueEgoVehicleVelocity; - ::ad_rss::physics::Duration valueEgoVehicleResponseTime(0.); - valueEgoVehicleResponseTime = ::ad_rss::physics::Duration( + valueEgoVehicleRssDynamicsAlphaLat.brakeMin = valueEgoVehicleRssDynamicsAlphaLatBrakeMin; + valueEgoVehicleRssDynamics.alphaLat = valueEgoVehicleRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueEgoVehicleRssDynamicsLateralFluctuationMargin(0.); + valueEgoVehicleRssDynamics.lateralFluctuationMargin = valueEgoVehicleRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueEgoVehicleRssDynamicsResponseTime(0.); + valueEgoVehicleRssDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueEgoVehicle.responseTime = valueEgoVehicleResponseTime; - value.egoVehicle = valueEgoVehicle; + valueEgoVehicleRssDynamics.responseTime = valueEgoVehicleRssDynamicsResponseTime; + value.egoVehicleRssDynamics = valueEgoVehicleRssDynamics; ::ad_rss::world::SceneVector valueScenes; value.scenes = valueScenes; @@ -301,67 +241,43 @@ TEST(WorldModelValidInputRangeTests, testValidInputRangeScenesTooSmall) ::ad_rss::situation::SituationType invalidInitializedMemberSceneVectorElementSituationType( ::ad_rss::situation::SituationType::NotRelevant); invalidInitializedMemberSceneVectorElement.situationType = invalidInitializedMemberSceneVectorElementSituationType; - ::ad_rss::world::RoadArea invalidInitializedMemberSceneVectorElementEgoVehicleRoad; - invalidInitializedMemberSceneVectorElement.egoVehicleRoad = invalidInitializedMemberSceneVectorElementEgoVehicleRoad; - ::ad_rss::world::RoadArea invalidInitializedMemberSceneVectorElementIntersectingRoad; - invalidInitializedMemberSceneVectorElement.intersectingRoad - = invalidInitializedMemberSceneVectorElementIntersectingRoad; + ::ad_rss::world::Object invalidInitializedMemberSceneVectorElementEgoVehicle; + ::ad_rss::world::ObjectId invalidInitializedMemberSceneVectorElementEgoVehicleObjectId( + std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); + invalidInitializedMemberSceneVectorElementEgoVehicle.objectId + = invalidInitializedMemberSceneVectorElementEgoVehicleObjectId; + ::ad_rss::world::ObjectType invalidInitializedMemberSceneVectorElementEgoVehicleObjectType( + ::ad_rss::world::ObjectType::Invalid); + invalidInitializedMemberSceneVectorElementEgoVehicle.objectType + = invalidInitializedMemberSceneVectorElementEgoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegions; + invalidInitializedMemberSceneVectorElementEgoVehicle.occupiedRegions + = invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegions; + ::ad_rss::world::Velocity invalidInitializedMemberSceneVectorElementEgoVehicleVelocity; + ::ad_rss::physics::Speed invalidInitializedMemberSceneVectorElementEgoVehicleVelocitySpeedLon(-100.); + invalidInitializedMemberSceneVectorElementEgoVehicleVelocitySpeedLon + = ::ad_rss::physics::Speed(0.); // set to valid value within struct + invalidInitializedMemberSceneVectorElementEgoVehicleVelocity.speedLon + = invalidInitializedMemberSceneVectorElementEgoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed invalidInitializedMemberSceneVectorElementEgoVehicleVelocitySpeedLat(-100.); + invalidInitializedMemberSceneVectorElementEgoVehicleVelocitySpeedLat + = ::ad_rss::physics::Speed(-10.); // set to valid value within struct + invalidInitializedMemberSceneVectorElementEgoVehicleVelocity.speedLat + = invalidInitializedMemberSceneVectorElementEgoVehicleVelocitySpeedLat; + invalidInitializedMemberSceneVectorElementEgoVehicle.velocity + = invalidInitializedMemberSceneVectorElementEgoVehicleVelocity; + invalidInitializedMemberSceneVectorElement.egoVehicle = invalidInitializedMemberSceneVectorElementEgoVehicle; ::ad_rss::world::Object invalidInitializedMemberSceneVectorElementObject; ::ad_rss::world::ObjectId invalidInitializedMemberSceneVectorElementObjectObjectId( std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); invalidInitializedMemberSceneVectorElementObject.objectId = invalidInitializedMemberSceneVectorElementObjectObjectId; ::ad_rss::world::ObjectType invalidInitializedMemberSceneVectorElementObjectObjectType( - ::ad_rss::world::ObjectType::EgoVehicle); + ::ad_rss::world::ObjectType::Invalid); invalidInitializedMemberSceneVectorElementObject.objectType = invalidInitializedMemberSceneVectorElementObjectObjectType; ::ad_rss::world::OccupiedRegionVector invalidInitializedMemberSceneVectorElementObjectOccupiedRegions; invalidInitializedMemberSceneVectorElementObject.occupiedRegions = invalidInitializedMemberSceneVectorElementObjectOccupiedRegions; - ::ad_rss::world::Dynamics invalidInitializedMemberSceneVectorElementObjectDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon; - ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLonAccelMax(-1e2); - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLonAccelMax - = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.accelMax - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLonBrakeMax(-1e2); - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMax - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLonBrakeMin(-1e2); - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMin - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLonBrakeMinCorrect(-1e2); - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMinCorrect - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLonBrakeMinCorrect; - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMin - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMinCorrect; - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMax - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMin; - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMin - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMax; - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMinCorrect - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMin; - invalidInitializedMemberSceneVectorElementObjectDynamics.alphaLon - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLat; - ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLatAccelMax(-1e2); - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLatAccelMax - = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLat.accelMax - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLatBrakeMin(-1e2); - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( - 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLat.brakeMin - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLatBrakeMin; - invalidInitializedMemberSceneVectorElementObjectDynamics.alphaLat - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLat; - ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementObjectDynamicsLateralFluctuationMargin(0.); - invalidInitializedMemberSceneVectorElementObjectDynamics.lateralFluctuationMargin - = invalidInitializedMemberSceneVectorElementObjectDynamicsLateralFluctuationMargin; - invalidInitializedMemberSceneVectorElementObject.dynamics = invalidInitializedMemberSceneVectorElementObjectDynamics; ::ad_rss::world::Velocity invalidInitializedMemberSceneVectorElementObjectVelocity; ::ad_rss::physics::Speed invalidInitializedMemberSceneVectorElementObjectVelocitySpeedLon(-100.); invalidInitializedMemberSceneVectorElementObjectVelocitySpeedLon @@ -374,12 +290,65 @@ TEST(WorldModelValidInputRangeTests, testValidInputRangeScenesTooSmall) invalidInitializedMemberSceneVectorElementObjectVelocity.speedLat = invalidInitializedMemberSceneVectorElementObjectVelocitySpeedLat; invalidInitializedMemberSceneVectorElementObject.velocity = invalidInitializedMemberSceneVectorElementObjectVelocity; - ::ad_rss::physics::Duration invalidInitializedMemberSceneVectorElementObjectResponseTime(0.); - invalidInitializedMemberSceneVectorElementObjectResponseTime = ::ad_rss::physics::Duration( - 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - invalidInitializedMemberSceneVectorElementObject.responseTime - = invalidInitializedMemberSceneVectorElementObjectResponseTime; invalidInitializedMemberSceneVectorElement.object = invalidInitializedMemberSceneVectorElementObject; + ::ad_rss::world::RssDynamics invalidInitializedMemberSceneVectorElementObjectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLonAccelMax(-1e2); + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLonAccelMax + = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.accelMax + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLonBrakeMax(-1e2); + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMax + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLonBrakeMin(-1e2); + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMin + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLonBrakeMinCorrect( + -1e2); + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMinCorrect + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLonBrakeMinCorrect; + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMin + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMinCorrect; + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMax + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMin; + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMin + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMax; + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMinCorrect + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMin; + invalidInitializedMemberSceneVectorElementObjectRssDynamics.alphaLon + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLatAccelMax(-1e2); + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLatAccelMax + = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLat.accelMax + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLatBrakeMin(-1e2); + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLat.brakeMin + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLatBrakeMin; + invalidInitializedMemberSceneVectorElementObjectRssDynamics.alphaLat + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementObjectRssDynamicsLateralFluctuationMargin(0.); + invalidInitializedMemberSceneVectorElementObjectRssDynamics.lateralFluctuationMargin + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration invalidInitializedMemberSceneVectorElementObjectRssDynamicsResponseTime(0.); + invalidInitializedMemberSceneVectorElementObjectRssDynamicsResponseTime = ::ad_rss::physics::Duration( + 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct + invalidInitializedMemberSceneVectorElementObjectRssDynamics.responseTime + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsResponseTime; + invalidInitializedMemberSceneVectorElement.objectRssDynamics + = invalidInitializedMemberSceneVectorElementObjectRssDynamics; + ::ad_rss::world::RoadArea invalidInitializedMemberSceneVectorElementIntersectingRoad; + invalidInitializedMemberSceneVectorElement.intersectingRoad + = invalidInitializedMemberSceneVectorElementIntersectingRoad; + ::ad_rss::world::RoadArea invalidInitializedMemberSceneVectorElementEgoVehicleRoad; + invalidInitializedMemberSceneVectorElement.egoVehicleRoad = invalidInitializedMemberSceneVectorElementEgoVehicleRoad; invalidInitializedMember.resize(1001, invalidInitializedMemberSceneVectorElement); value.scenes = invalidInitializedMember; ASSERT_FALSE(withinValidInputRange(value)); @@ -391,56 +360,40 @@ TEST(WorldModelValidInputRangeTests, testValidInputRangeScenesTooBig) ::ad_rss::physics::TimeIndex valueTimeIndex(std::numeric_limits<::ad_rss::physics::TimeIndex>::lowest()); valueTimeIndex = ::ad_rss::physics::TimeIndex(1); // set to valid value within struct value.timeIndex = valueTimeIndex; - ::ad_rss::world::Object valueEgoVehicle; - ::ad_rss::world::ObjectId valueEgoVehicleObjectId(std::numeric_limits<::ad_rss::world::ObjectId>::lowest()); - valueEgoVehicle.objectId = valueEgoVehicleObjectId; - ::ad_rss::world::ObjectType valueEgoVehicleObjectType(::ad_rss::world::ObjectType::EgoVehicle); - valueEgoVehicle.objectType = valueEgoVehicleObjectType; - ::ad_rss::world::OccupiedRegionVector valueEgoVehicleOccupiedRegions; - valueEgoVehicle.occupiedRegions = valueEgoVehicleOccupiedRegions; - ::ad_rss::world::Dynamics valueEgoVehicleDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleDynamicsAlphaLon; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonAccelMax(-1e2); - valueEgoVehicleDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLon.accelMax = valueEgoVehicleDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonBrakeMax(-1e2); - valueEgoVehicleDynamicsAlphaLon.brakeMax = valueEgoVehicleDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonBrakeMin(-1e2); - valueEgoVehicleDynamicsAlphaLon.brakeMin = valueEgoVehicleDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLonBrakeMinCorrect(-1e2); - valueEgoVehicleDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( + ::ad_rss::world::RssDynamics valueEgoVehicleRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues valueEgoVehicleRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonAccelMax(-1e2); + valueEgoVehicleRssDynamicsAlphaLonAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueEgoVehicleRssDynamicsAlphaLon.accelMax = valueEgoVehicleRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonBrakeMax(-1e2); + valueEgoVehicleRssDynamicsAlphaLon.brakeMax = valueEgoVehicleRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonBrakeMin(-1e2); + valueEgoVehicleRssDynamicsAlphaLon.brakeMin = valueEgoVehicleRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLonBrakeMinCorrect(-1e2); + valueEgoVehicleRssDynamicsAlphaLonBrakeMinCorrect = ::ad_rss::physics::Acceleration( 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleDynamicsAlphaLonBrakeMinCorrect; - valueEgoVehicleDynamicsAlphaLon.brakeMin = valueEgoVehicleDynamicsAlphaLon.brakeMinCorrect; - valueEgoVehicleDynamicsAlphaLon.brakeMax = valueEgoVehicleDynamicsAlphaLon.brakeMin; - valueEgoVehicleDynamicsAlphaLon.brakeMin = valueEgoVehicleDynamicsAlphaLon.brakeMax; - valueEgoVehicleDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleDynamicsAlphaLon.brakeMin; - valueEgoVehicleDynamics.alphaLon = valueEgoVehicleDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues valueEgoVehicleDynamicsAlphaLat; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLatAccelMax(-1e2); - valueEgoVehicleDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLat.accelMax = valueEgoVehicleDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration valueEgoVehicleDynamicsAlphaLatBrakeMin(-1e2); - valueEgoVehicleDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( + valueEgoVehicleRssDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleRssDynamicsAlphaLonBrakeMinCorrect; + valueEgoVehicleRssDynamicsAlphaLon.brakeMin = valueEgoVehicleRssDynamicsAlphaLon.brakeMinCorrect; + valueEgoVehicleRssDynamicsAlphaLon.brakeMax = valueEgoVehicleRssDynamicsAlphaLon.brakeMin; + valueEgoVehicleRssDynamicsAlphaLon.brakeMin = valueEgoVehicleRssDynamicsAlphaLon.brakeMax; + valueEgoVehicleRssDynamicsAlphaLon.brakeMinCorrect = valueEgoVehicleRssDynamicsAlphaLon.brakeMin; + valueEgoVehicleRssDynamics.alphaLon = valueEgoVehicleRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues valueEgoVehicleRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLatAccelMax(-1e2); + valueEgoVehicleRssDynamicsAlphaLatAccelMax = ::ad_rss::physics::Acceleration(0.); // set to valid value within struct + valueEgoVehicleRssDynamicsAlphaLat.accelMax = valueEgoVehicleRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration valueEgoVehicleRssDynamicsAlphaLatBrakeMin(-1e2); + valueEgoVehicleRssDynamicsAlphaLatBrakeMin = ::ad_rss::physics::Acceleration( 0. + ::ad_rss::physics::Acceleration::cPrecisionValue); // set to valid value within struct - valueEgoVehicleDynamicsAlphaLat.brakeMin = valueEgoVehicleDynamicsAlphaLatBrakeMin; - valueEgoVehicleDynamics.alphaLat = valueEgoVehicleDynamicsAlphaLat; - ::ad_rss::physics::Distance valueEgoVehicleDynamicsLateralFluctuationMargin(0.); - valueEgoVehicleDynamics.lateralFluctuationMargin = valueEgoVehicleDynamicsLateralFluctuationMargin; - valueEgoVehicle.dynamics = valueEgoVehicleDynamics; - ::ad_rss::world::Velocity valueEgoVehicleVelocity; - ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLon(-100.); - valueEgoVehicleVelocitySpeedLon = ::ad_rss::physics::Speed(0.); // set to valid value within struct - valueEgoVehicleVelocity.speedLon = valueEgoVehicleVelocitySpeedLon; - ::ad_rss::physics::Speed valueEgoVehicleVelocitySpeedLat(-100.); - valueEgoVehicleVelocitySpeedLat = ::ad_rss::physics::Speed(-10.); // set to valid value within struct - valueEgoVehicleVelocity.speedLat = valueEgoVehicleVelocitySpeedLat; - valueEgoVehicle.velocity = valueEgoVehicleVelocity; - ::ad_rss::physics::Duration valueEgoVehicleResponseTime(0.); - valueEgoVehicleResponseTime = ::ad_rss::physics::Duration( + valueEgoVehicleRssDynamicsAlphaLat.brakeMin = valueEgoVehicleRssDynamicsAlphaLatBrakeMin; + valueEgoVehicleRssDynamics.alphaLat = valueEgoVehicleRssDynamicsAlphaLat; + ::ad_rss::physics::Distance valueEgoVehicleRssDynamicsLateralFluctuationMargin(0.); + valueEgoVehicleRssDynamics.lateralFluctuationMargin = valueEgoVehicleRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration valueEgoVehicleRssDynamicsResponseTime(0.); + valueEgoVehicleRssDynamicsResponseTime = ::ad_rss::physics::Duration( 0. + ::ad_rss::physics::Duration::cPrecisionValue); // set to valid value within struct - valueEgoVehicle.responseTime = valueEgoVehicleResponseTime; - value.egoVehicle = valueEgoVehicle; + valueEgoVehicleRssDynamics.responseTime = valueEgoVehicleRssDynamicsResponseTime; + value.egoVehicleRssDynamics = valueEgoVehicleRssDynamics; ::ad_rss::world::SceneVector valueScenes; value.scenes = valueScenes; @@ -450,103 +403,67 @@ TEST(WorldModelValidInputRangeTests, testValidInputRangeScenesTooBig) ::ad_rss::situation::SituationType invalidInitializedMemberSceneVectorElementSituationType( ::ad_rss::situation::SituationType::IntersectionSamePriority); invalidInitializedMemberSceneVectorElement.situationType = invalidInitializedMemberSceneVectorElementSituationType; - ::ad_rss::world::RoadArea invalidInitializedMemberSceneVectorElementEgoVehicleRoad; - ::ad_rss::world::RoadSegment invalidInitializedMemberSceneVectorElementEgoVehicleRoadElement; - ::ad_rss::world::LaneSegment invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElement; - ::ad_rss::world::LaneSegmentId invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementId( - std::numeric_limits<::ad_rss::world::LaneSegmentId>::max()); - invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElement.id - = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementId; - ::ad_rss::world::LaneSegmentType invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementType( - ::ad_rss::world::LaneSegmentType::Intersection); - invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElement.type - = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementType; - ::ad_rss::world::LaneDrivingDirection - invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementDrivingDirection( - ::ad_rss::world::LaneDrivingDirection::Negative); - invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElement.drivingDirection - = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementDrivingDirection; - ::ad_rss::physics::MetricRange invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLength; - ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLengthMinimum(1e6); - invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLength.minimum - = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLengthMinimum; - ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLengthMaximum(1e6); - invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLength.maximum - = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLengthMaximum; - invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLength.maximum - = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLength.minimum; - invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLength.minimum - = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLength.maximum; - invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElement.length - = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLength; - ::ad_rss::physics::MetricRange invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidth; - ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidthMinimum(1e6); - invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidth.minimum - = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidthMinimum; - ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidthMaximum(1e6); - invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidth.maximum - = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidthMaximum; - invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidth.maximum - = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidth.minimum; - invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidth.minimum - = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidth.maximum; - invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElement.width - = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidth; - invalidInitializedMemberSceneVectorElementEgoVehicleRoadElement.resize( - 1 + 1, invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElement); - invalidInitializedMemberSceneVectorElementEgoVehicleRoad.resize( - 0 + 1, invalidInitializedMemberSceneVectorElementEgoVehicleRoadElement); - invalidInitializedMemberSceneVectorElement.egoVehicleRoad = invalidInitializedMemberSceneVectorElementEgoVehicleRoad; - ::ad_rss::world::RoadArea invalidInitializedMemberSceneVectorElementIntersectingRoad; - ::ad_rss::world::RoadSegment invalidInitializedMemberSceneVectorElementIntersectingRoadElement; - ::ad_rss::world::LaneSegment invalidInitializedMemberSceneVectorElementIntersectingRoadElementElement; - ::ad_rss::world::LaneSegmentId invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementId( + ::ad_rss::world::Object invalidInitializedMemberSceneVectorElementEgoVehicle; + ::ad_rss::world::ObjectId invalidInitializedMemberSceneVectorElementEgoVehicleObjectId( + std::numeric_limits<::ad_rss::world::ObjectId>::max()); + invalidInitializedMemberSceneVectorElementEgoVehicle.objectId + = invalidInitializedMemberSceneVectorElementEgoVehicleObjectId; + ::ad_rss::world::ObjectType invalidInitializedMemberSceneVectorElementEgoVehicleObjectType( + ::ad_rss::world::ObjectType::ArtificialObject); + invalidInitializedMemberSceneVectorElementEgoVehicle.objectType + = invalidInitializedMemberSceneVectorElementEgoVehicleObjectType; + ::ad_rss::world::OccupiedRegionVector invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegions; + ::ad_rss::world::OccupiedRegion invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElement; + ::ad_rss::world::LaneSegmentId invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementSegmentId( std::numeric_limits<::ad_rss::world::LaneSegmentId>::max()); - invalidInitializedMemberSceneVectorElementIntersectingRoadElementElement.id - = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementId; - ::ad_rss::world::LaneSegmentType invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementType( - ::ad_rss::world::LaneSegmentType::Intersection); - invalidInitializedMemberSceneVectorElementIntersectingRoadElementElement.type - = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementType; - ::ad_rss::world::LaneDrivingDirection - invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementDrivingDirection( - ::ad_rss::world::LaneDrivingDirection::Negative); - invalidInitializedMemberSceneVectorElementIntersectingRoadElementElement.drivingDirection - = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementDrivingDirection; - ::ad_rss::physics::MetricRange invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLength; - ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLengthMinimum( - 1e6); - invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLength.minimum - = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLengthMinimum; - ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLengthMaximum( - 1e6); - invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLength.maximum - = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLengthMaximum; - invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLength.maximum - = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLength.minimum; - invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLength.minimum - = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLength.maximum; - invalidInitializedMemberSceneVectorElementIntersectingRoadElementElement.length - = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLength; - ::ad_rss::physics::MetricRange invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidth; - ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidthMinimum(1e6); - invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidth.minimum - = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidthMinimum; - ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidthMaximum(1e6); - invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidth.maximum - = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidthMaximum; - invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidth.maximum - = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidth.minimum; - invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidth.minimum - = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidth.maximum; - invalidInitializedMemberSceneVectorElementIntersectingRoadElementElement.width - = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidth; - invalidInitializedMemberSceneVectorElementIntersectingRoadElement.resize( - 1 + 1, invalidInitializedMemberSceneVectorElementIntersectingRoadElementElement); - invalidInitializedMemberSceneVectorElementIntersectingRoad.resize( - 0 + 1, invalidInitializedMemberSceneVectorElementIntersectingRoadElement); - invalidInitializedMemberSceneVectorElement.intersectingRoad - = invalidInitializedMemberSceneVectorElementIntersectingRoad; + invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElement.segmentId + = invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementSegmentId; + ::ad_rss::physics::ParametricRange invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLonRange; + ::ad_rss::physics::ParametricValue + invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLonRangeMinimum(1.); + invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLonRange.minimum + = invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLonRangeMinimum; + ::ad_rss::physics::ParametricValue + invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLonRangeMaximum(1.); + invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLonRange.maximum + = invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLonRangeMaximum; + invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLonRange.maximum + = invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLonRange.minimum; + invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLonRange.minimum + = invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLonRange.maximum; + invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElement.lonRange + = invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLonRange; + ::ad_rss::physics::ParametricRange invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLatRange; + ::ad_rss::physics::ParametricValue + invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLatRangeMinimum(1.); + invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLatRange.minimum + = invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLatRangeMinimum; + ::ad_rss::physics::ParametricValue + invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLatRangeMaximum(1.); + invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLatRange.maximum + = invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLatRangeMaximum; + invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLatRange.maximum + = invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLatRange.minimum; + invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLatRange.minimum + = invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLatRange.maximum; + invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElement.latRange + = invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElementLatRange; + invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegions.resize( + 0 + 1, invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegionsElement); + invalidInitializedMemberSceneVectorElementEgoVehicle.occupiedRegions + = invalidInitializedMemberSceneVectorElementEgoVehicleOccupiedRegions; + ::ad_rss::world::Velocity invalidInitializedMemberSceneVectorElementEgoVehicleVelocity; + ::ad_rss::physics::Speed invalidInitializedMemberSceneVectorElementEgoVehicleVelocitySpeedLon(100.); + invalidInitializedMemberSceneVectorElementEgoVehicleVelocity.speedLon + = invalidInitializedMemberSceneVectorElementEgoVehicleVelocitySpeedLon; + ::ad_rss::physics::Speed invalidInitializedMemberSceneVectorElementEgoVehicleVelocitySpeedLat(100.); + invalidInitializedMemberSceneVectorElementEgoVehicleVelocitySpeedLat + = ::ad_rss::physics::Speed(10.); // set to valid value within struct + invalidInitializedMemberSceneVectorElementEgoVehicleVelocity.speedLat + = invalidInitializedMemberSceneVectorElementEgoVehicleVelocitySpeedLat; + invalidInitializedMemberSceneVectorElementEgoVehicle.velocity + = invalidInitializedMemberSceneVectorElementEgoVehicleVelocity; + invalidInitializedMemberSceneVectorElement.egoVehicle = invalidInitializedMemberSceneVectorElementEgoVehicle; ::ad_rss::world::Object invalidInitializedMemberSceneVectorElementObject; ::ad_rss::world::ObjectId invalidInitializedMemberSceneVectorElementObjectObjectId( std::numeric_limits<::ad_rss::world::ObjectId>::max()); @@ -595,45 +512,6 @@ TEST(WorldModelValidInputRangeTests, testValidInputRangeScenesTooBig) 0 + 1, invalidInitializedMemberSceneVectorElementObjectOccupiedRegionsElement); invalidInitializedMemberSceneVectorElementObject.occupiedRegions = invalidInitializedMemberSceneVectorElementObjectOccupiedRegions; - ::ad_rss::world::Dynamics invalidInitializedMemberSceneVectorElementObjectDynamics; - ::ad_rss::world::LongitudinalRssAccelerationValues invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon; - ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLonAccelMax(1e2); - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.accelMax - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLonAccelMax; - ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLonBrakeMax(1e2); - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMax - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLonBrakeMax; - ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLonBrakeMin(1e2); - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMin - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLonBrakeMin; - ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLonBrakeMinCorrect(1e2); - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMinCorrect - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLonBrakeMinCorrect; - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMax - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMin; - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMin - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMinCorrect; - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMinCorrect - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMin; - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMin - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon.brakeMax; - invalidInitializedMemberSceneVectorElementObjectDynamics.alphaLon - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLon; - ::ad_rss::world::LateralRssAccelerationValues invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLat; - ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLatAccelMax(1e2); - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLat.accelMax - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLatAccelMax; - ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLatBrakeMin(1e2); - invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLat.brakeMin - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLatBrakeMin; - invalidInitializedMemberSceneVectorElementObjectDynamics.alphaLat - = invalidInitializedMemberSceneVectorElementObjectDynamicsAlphaLat; - ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementObjectDynamicsLateralFluctuationMargin(1e6); - invalidInitializedMemberSceneVectorElementObjectDynamicsLateralFluctuationMargin - = ::ad_rss::physics::Distance(1.); // set to valid value within struct - invalidInitializedMemberSceneVectorElementObjectDynamics.lateralFluctuationMargin - = invalidInitializedMemberSceneVectorElementObjectDynamicsLateralFluctuationMargin; - invalidInitializedMemberSceneVectorElementObject.dynamics = invalidInitializedMemberSceneVectorElementObjectDynamics; ::ad_rss::world::Velocity invalidInitializedMemberSceneVectorElementObjectVelocity; ::ad_rss::physics::Speed invalidInitializedMemberSceneVectorElementObjectVelocitySpeedLon(100.); invalidInitializedMemberSceneVectorElementObjectVelocity.speedLon @@ -644,12 +522,151 @@ TEST(WorldModelValidInputRangeTests, testValidInputRangeScenesTooBig) invalidInitializedMemberSceneVectorElementObjectVelocity.speedLat = invalidInitializedMemberSceneVectorElementObjectVelocitySpeedLat; invalidInitializedMemberSceneVectorElementObject.velocity = invalidInitializedMemberSceneVectorElementObjectVelocity; - ::ad_rss::physics::Duration invalidInitializedMemberSceneVectorElementObjectResponseTime(100.); - invalidInitializedMemberSceneVectorElementObjectResponseTime - = ::ad_rss::physics::Duration(10.); // set to valid value within struct - invalidInitializedMemberSceneVectorElementObject.responseTime - = invalidInitializedMemberSceneVectorElementObjectResponseTime; invalidInitializedMemberSceneVectorElement.object = invalidInitializedMemberSceneVectorElementObject; + ::ad_rss::world::RssDynamics invalidInitializedMemberSceneVectorElementObjectRssDynamics; + ::ad_rss::world::LongitudinalRssAccelerationValues + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon; + ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLonAccelMax(1e2); + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.accelMax + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLonAccelMax; + ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLonBrakeMax(1e2); + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMax + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLonBrakeMax; + ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLonBrakeMin(1e2); + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMin + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLonBrakeMin; + ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLonBrakeMinCorrect( + 1e2); + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMinCorrect + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLonBrakeMinCorrect; + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMax + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMin; + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMin + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMinCorrect; + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMinCorrect + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMin; + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMin + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon.brakeMax; + invalidInitializedMemberSceneVectorElementObjectRssDynamics.alphaLon + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLon; + ::ad_rss::world::LateralRssAccelerationValues invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLatAccelMax(1e2); + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLat.accelMax + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLatAccelMax; + ::ad_rss::physics::Acceleration invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLatBrakeMin(1e2); + invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLat.brakeMin + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLatBrakeMin; + invalidInitializedMemberSceneVectorElementObjectRssDynamics.alphaLat + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsAlphaLat; + ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementObjectRssDynamicsLateralFluctuationMargin(1e6); + invalidInitializedMemberSceneVectorElementObjectRssDynamicsLateralFluctuationMargin + = ::ad_rss::physics::Distance(1.); // set to valid value within struct + invalidInitializedMemberSceneVectorElementObjectRssDynamics.lateralFluctuationMargin + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsLateralFluctuationMargin; + ::ad_rss::physics::Duration invalidInitializedMemberSceneVectorElementObjectRssDynamicsResponseTime(100.); + invalidInitializedMemberSceneVectorElementObjectRssDynamicsResponseTime + = ::ad_rss::physics::Duration(10.); // set to valid value within struct + invalidInitializedMemberSceneVectorElementObjectRssDynamics.responseTime + = invalidInitializedMemberSceneVectorElementObjectRssDynamicsResponseTime; + invalidInitializedMemberSceneVectorElement.objectRssDynamics + = invalidInitializedMemberSceneVectorElementObjectRssDynamics; + ::ad_rss::world::RoadArea invalidInitializedMemberSceneVectorElementIntersectingRoad; + ::ad_rss::world::RoadSegment invalidInitializedMemberSceneVectorElementIntersectingRoadElement; + ::ad_rss::world::LaneSegment invalidInitializedMemberSceneVectorElementIntersectingRoadElementElement; + ::ad_rss::world::LaneSegmentId invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementId( + std::numeric_limits<::ad_rss::world::LaneSegmentId>::max()); + invalidInitializedMemberSceneVectorElementIntersectingRoadElementElement.id + = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementId; + ::ad_rss::world::LaneSegmentType invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementType( + ::ad_rss::world::LaneSegmentType::Intersection); + invalidInitializedMemberSceneVectorElementIntersectingRoadElementElement.type + = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementType; + ::ad_rss::world::LaneDrivingDirection + invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementDrivingDirection( + ::ad_rss::world::LaneDrivingDirection::Negative); + invalidInitializedMemberSceneVectorElementIntersectingRoadElementElement.drivingDirection + = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementDrivingDirection; + ::ad_rss::physics::MetricRange invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLength; + ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLengthMinimum( + 1e6); + invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLength.minimum + = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLengthMinimum; + ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLengthMaximum( + 1e6); + invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLength.maximum + = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLengthMaximum; + invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLength.maximum + = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLength.minimum; + invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLength.minimum + = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLength.maximum; + invalidInitializedMemberSceneVectorElementIntersectingRoadElementElement.length + = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementLength; + ::ad_rss::physics::MetricRange invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidth; + ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidthMinimum(1e6); + invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidth.minimum + = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidthMinimum; + ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidthMaximum(1e6); + invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidth.maximum + = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidthMaximum; + invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidth.maximum + = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidth.minimum; + invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidth.minimum + = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidth.maximum; + invalidInitializedMemberSceneVectorElementIntersectingRoadElementElement.width + = invalidInitializedMemberSceneVectorElementIntersectingRoadElementElementWidth; + invalidInitializedMemberSceneVectorElementIntersectingRoadElement.resize( + 1 + 1, invalidInitializedMemberSceneVectorElementIntersectingRoadElementElement); + invalidInitializedMemberSceneVectorElementIntersectingRoad.resize( + 0 + 1, invalidInitializedMemberSceneVectorElementIntersectingRoadElement); + invalidInitializedMemberSceneVectorElement.intersectingRoad + = invalidInitializedMemberSceneVectorElementIntersectingRoad; + ::ad_rss::world::RoadArea invalidInitializedMemberSceneVectorElementEgoVehicleRoad; + ::ad_rss::world::RoadSegment invalidInitializedMemberSceneVectorElementEgoVehicleRoadElement; + ::ad_rss::world::LaneSegment invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElement; + ::ad_rss::world::LaneSegmentId invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementId( + std::numeric_limits<::ad_rss::world::LaneSegmentId>::max()); + invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElement.id + = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementId; + ::ad_rss::world::LaneSegmentType invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementType( + ::ad_rss::world::LaneSegmentType::Intersection); + invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElement.type + = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementType; + ::ad_rss::world::LaneDrivingDirection + invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementDrivingDirection( + ::ad_rss::world::LaneDrivingDirection::Negative); + invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElement.drivingDirection + = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementDrivingDirection; + ::ad_rss::physics::MetricRange invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLength; + ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLengthMinimum(1e6); + invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLength.minimum + = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLengthMinimum; + ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLengthMaximum(1e6); + invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLength.maximum + = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLengthMaximum; + invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLength.maximum + = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLength.minimum; + invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLength.minimum + = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLength.maximum; + invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElement.length + = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementLength; + ::ad_rss::physics::MetricRange invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidth; + ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidthMinimum(1e6); + invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidth.minimum + = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidthMinimum; + ::ad_rss::physics::Distance invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidthMaximum(1e6); + invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidth.maximum + = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidthMaximum; + invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidth.maximum + = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidth.minimum; + invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidth.minimum + = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidth.maximum; + invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElement.width + = invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElementWidth; + invalidInitializedMemberSceneVectorElementEgoVehicleRoadElement.resize( + 1 + 1, invalidInitializedMemberSceneVectorElementEgoVehicleRoadElementElement); + invalidInitializedMemberSceneVectorElementEgoVehicleRoad.resize( + 0 + 1, invalidInitializedMemberSceneVectorElementEgoVehicleRoadElement); + invalidInitializedMemberSceneVectorElement.egoVehicleRoad = invalidInitializedMemberSceneVectorElementEgoVehicleRoad; invalidInitializedMember.resize(1001, invalidInitializedMemberSceneVectorElement); value.scenes = invalidInitializedMember; ASSERT_FALSE(withinValidInputRange(value)); diff --git a/tests/situation/RssFormulaTestsInputRangeChecks.cpp b/tests/situation/RssFormulaTestsInputRangeChecks.cpp index 95b1e57a45..24dd4b9147 100644 --- a/tests/situation/RssFormulaTestsInputRangeChecks.cpp +++ b/tests/situation/RssFormulaTestsInputRangeChecks.cpp @@ -76,7 +76,7 @@ TEST(RssFormulaTestsInputRangeChecks, calculateSafeLongitudinalDistanceOppositeD VehicleState correctVehicle = createVehicleStateForLongitudinalMotion(50); VehicleState oppositeVehicle = createVehicleStateForLongitudinalMotion(-50); - correctVehicle.responseTime = Duration(-1); + correctVehicle.dynamics.responseTime = Duration(-1); ASSERT_FALSE(calculateSafeLongitudinalDistanceOppositeDirection(correctVehicle, oppositeVehicle, safeDistance)); ASSERT_FALSE(calculateSafeLongitudinalDistanceOppositeDirection(oppositeVehicle, correctVehicle, safeDistance)); } @@ -86,7 +86,7 @@ TEST(RssFormulaTestsInputRangeChecks, checkStopInFrontIntersection) bool isSafe = false; Distance safeDistance(0.); VehicleState correctVehicle = createVehicleStateForLongitudinalMotion(50); - correctVehicle.responseTime = Duration(-1); + correctVehicle.dynamics.responseTime = Duration(-1); ASSERT_FALSE(checkStopInFrontIntersection(correctVehicle, safeDistance, isSafe)); } diff --git a/tests/situation/RssSituationCheckingInputRangeTests.cpp b/tests/situation/RssSituationCheckingInputRangeTests.cpp index 53dff45bd0..fb96cfb7e9 100644 --- a/tests/situation/RssSituationCheckingInputRangeTests.cpp +++ b/tests/situation/RssSituationCheckingInputRangeTests.cpp @@ -282,7 +282,7 @@ TEST_F(RssSituationCheckingInputRangeTests, lateral_invalid_acceleration_ego) TEST_F(RssSituationCheckingInputRangeTests, invalid_response_time_zero_ego) { - situation.otherVehicleState.responseTime = Duration(0.); + situation.otherVehicleState.dynamics.responseTime = Duration(0.); performTestRun(); } @@ -290,7 +290,7 @@ TEST_F(RssSituationCheckingInputRangeTests, invalid_response_time_negative_ego) { for (int i = 1; i < 1000; i++) { - situation.otherVehicleState.responseTime = -1. * Duration(i / 100.); + situation.otherVehicleState.dynamics.responseTime = -1. * Duration(i / 100.); performTestRun(); } } diff --git a/tests/situation/RssSituationCheckingTestsOppositeDirection.cpp b/tests/situation/RssSituationCheckingTestsOppositeDirection.cpp index 9c8db335a6..86e203ce0e 100644 --- a/tests/situation/RssSituationCheckingTestsOppositeDirection.cpp +++ b/tests/situation/RssSituationCheckingTestsOppositeDirection.cpp @@ -76,7 +76,7 @@ TEST_F(RssSituationCheckingTestsOppositeDirection, 50kmh_brake_min_correct) TEST_F(RssSituationCheckingTestsOppositeDirection, 50kmh_shorter_ego_reaction_time) { correctVehicle = createVehicleStateForLongitudinalMotion(50); - correctVehicle.responseTime = Duration(1.); + correctVehicle.dynamics.responseTime = Duration(1.); oppositeVehicle = createVehicleStateForLongitudinalMotion(50); oppositeVehicle.isInCorrectLane = false; @@ -146,7 +146,7 @@ TEST_F(RssSituationCheckingTestsOppositeDirection, 50kmh_BrakeMinCorrect) TEST_F(RssSituationCheckingTestsOppositeDirection, 50kmh_response_1s_safe) { correctVehicle = createVehicleStateForLongitudinalMotion(50); - correctVehicle.responseTime = Duration(1.); + correctVehicle.dynamics.responseTime = Duration(1.); oppositeVehicle = createVehicleStateForLongitudinalMotion(50); oppositeVehicle.isInCorrectLane = false; diff --git a/tests/test_support/TestSupport.cpp b/tests/test_support/TestSupport.cpp index 0d2a3d1072..27d4494c75 100644 --- a/tests/test_support/TestSupport.cpp +++ b/tests/test_support/TestSupport.cpp @@ -62,6 +62,38 @@ void resetRssState(state::ResponseState &responseState, situation::SituationId c resetRssState(responseState.lateralStateRight); } +world::RssDynamics getObjectRssDynamics() +{ + world::RssDynamics rssDynamics; + + rssDynamics.alphaLon.accelMax = cMaximumLongitudinalAcceleration; + rssDynamics.alphaLon.brakeMax = cMaximumLongitudinalBrakingDeceleleration; + rssDynamics.alphaLon.brakeMin = cMinimumLongitudinalBrakingDeceleleration; + rssDynamics.alphaLon.brakeMinCorrect = cMinimumLongitudinalBrakingDecelelerationCorrect; + + rssDynamics.alphaLat.accelMax = cMaximumLateralAcceleration; + rssDynamics.alphaLat.brakeMin = cMinimumLateralBrakingDeceleleration; + + rssDynamics.responseTime = cResponseTimeOtherVehicles; + return rssDynamics; +} + +world::RssDynamics getEgoRssDynamics() +{ + world::RssDynamics rssDynamics; + + rssDynamics.alphaLon.accelMax = cMaximumLongitudinalAcceleration; + rssDynamics.alphaLon.brakeMax = cMaximumLongitudinalBrakingDeceleleration; + rssDynamics.alphaLon.brakeMin = cMinimumLongitudinalBrakingDeceleleration; + rssDynamics.alphaLon.brakeMinCorrect = cMinimumLongitudinalBrakingDecelelerationCorrect; + + rssDynamics.alphaLat.accelMax = cMaximumLateralAcceleration; + rssDynamics.alphaLat.brakeMin = cMinimumLateralBrakingDeceleleration; + + rssDynamics.responseTime = cResponseTimeEgoVehicle; + return rssDynamics; +} + world::Object createObject(double const lonVelocity, double const latVelocity) { world::Object object; @@ -69,16 +101,6 @@ world::Object createObject(double const lonVelocity, double const latVelocity) object.objectType = world::ObjectType::OtherVehicle; object.velocity.speedLon = kmhToMeterPerSec(lonVelocity); object.velocity.speedLat = kmhToMeterPerSec(latVelocity); - object.dynamics.alphaLon.accelMax = cMaximumLongitudinalAcceleration; - object.dynamics.alphaLon.brakeMax = cMaximumLongitudinalBrakingDeceleleration; - object.dynamics.alphaLon.brakeMin = cMinimumLongitudinalBrakingDeceleleration; - object.dynamics.alphaLon.brakeMinCorrect = cMinimumLongitudinalBrakingDecelelerationCorrect; - - object.dynamics.alphaLat.accelMax = cMaximumLateralAcceleration; - object.dynamics.alphaLat.brakeMin = cMinimumLateralBrakingDeceleleration; - - object.responseTime = cResponseTimeOtherVehicles; - return object; } @@ -88,15 +110,7 @@ situation::VehicleState createVehicleState(double const lonVelocity, double cons state.velocity.speedLon = kmhToMeterPerSec(lonVelocity); state.velocity.speedLat = kmhToMeterPerSec(latVelocity); - state.dynamics.alphaLon.accelMax = cMaximumLongitudinalAcceleration; - state.dynamics.alphaLon.brakeMax = cMaximumLongitudinalBrakingDeceleleration; - state.dynamics.alphaLon.brakeMin = cMinimumLongitudinalBrakingDeceleleration; - state.dynamics.alphaLon.brakeMinCorrect = cMinimumLongitudinalBrakingDecelelerationCorrect; - - state.dynamics.alphaLat.accelMax = cMaximumLateralAcceleration; - state.dynamics.alphaLat.brakeMin = cMinimumLateralBrakingDeceleleration; - - state.responseTime = cResponseTimeOtherVehicles; + state.dynamics = getObjectRssDynamics(); state.distanceToEnterIntersection = Distance(0.); state.distanceToLeaveIntersection = Distance(1000.); state.hasPriority = false; @@ -127,6 +141,79 @@ situation::RelativePosition createRelativeLateralPosition(situation::LateralRela return relativePosition; } +Distance calculateLongitudinalStoppingDistance(world::Velocity const &objectVelocity, + Acceleration const &acceleration, + Acceleration const &deceleration, + Duration const &responseTime) +{ + Distance dMin = objectVelocity.speedLon * responseTime; + dMin += 0.5 * acceleration * responseTime * responseTime; + Speed const speedMax = objectVelocity.speedLon + responseTime * acceleration; + dMin += (speedMax * speedMax) / (2. * deceleration); + return dMin; +} + +Distance calculateLongitudinalMinSafeDistance(world::Velocity const &followingObjectVelocity, + world::RssDynamics const &followingObjectRssDynamics, + world::Velocity const &leadingObjectVelocity, + world::RssDynamics const &leadingObjectRssDynamics) +{ + Distance const followingStoppingDistance + = calculateLongitudinalStoppingDistance(followingObjectVelocity, + followingObjectRssDynamics.alphaLon.accelMax, + followingObjectRssDynamics.alphaLon.brakeMin, + followingObjectRssDynamics.responseTime); + Distance const leadingStoppingDistance + = calculateLongitudinalStoppingDistance(leadingObjectVelocity, + leadingObjectRssDynamics.alphaLon.accelMax, + leadingObjectRssDynamics.alphaLon.brakeMax, + Duration(0)); + Distance const dMin = followingStoppingDistance - leadingStoppingDistance; + return std::max(dMin, Distance(0.)); +} + +Distance +calculateLongitudinalMinSafeDistanceOppositeDirection(world::Velocity const &objectInCorrectLaneVelocity, + world::RssDynamics const &objectInCorrectLaneRssDynamics, + world::Velocity const &objectNotInCorrectLaneVelocity, + world::RssDynamics const &objectNotInCorrectLaneRssDynamics) +{ + Distance const correctStoppingDistance + = calculateLongitudinalStoppingDistance(objectInCorrectLaneVelocity, + objectInCorrectLaneRssDynamics.alphaLon.accelMax, + objectInCorrectLaneRssDynamics.alphaLon.brakeMinCorrect, + objectInCorrectLaneRssDynamics.responseTime); + Distance const notCorrectStoppingDistance + = calculateLongitudinalStoppingDistance(objectNotInCorrectLaneVelocity, + objectNotInCorrectLaneRssDynamics.alphaLon.accelMax, + objectNotInCorrectLaneRssDynamics.alphaLon.brakeMin, + objectNotInCorrectLaneRssDynamics.responseTime); + Distance const dMin = correctStoppingDistance + notCorrectStoppingDistance; + return dMin; +} + +Distance calculateLateralMinSafeDistance(world::Velocity const &leftObjectVelocity, + world::RssDynamics const &leftObjectRssDynamics, + world::Velocity const &rightObjectVelocity, + world::RssDynamics const &rightObjectRssDynamics) +{ + Speed lObjectVelAfterResTime + = leftObjectVelocity.speedLat + leftObjectRssDynamics.responseTime * leftObjectRssDynamics.alphaLat.accelMax; + Speed rObjectVelAfterResTime + = rightObjectVelocity.speedLat - rightObjectRssDynamics.responseTime * rightObjectRssDynamics.alphaLat.accelMax; + Distance dMin = (leftObjectVelocity.speedLat + lObjectVelAfterResTime) / 2. * leftObjectRssDynamics.responseTime; + if (lObjectVelAfterResTime > Speed(0.)) + { + dMin += lObjectVelAfterResTime * lObjectVelAfterResTime / (2 * leftObjectRssDynamics.alphaLat.brakeMin); + } + dMin -= (rightObjectVelocity.speedLat + rObjectVelAfterResTime) / 2. * rightObjectRssDynamics.responseTime; + if (rObjectVelAfterResTime < Speed(0.)) + { + dMin += rObjectVelAfterResTime * rObjectVelAfterResTime / (2 * rightObjectRssDynamics.alphaLat.brakeMin); + } + + return std::max(dMin, Distance(0.)); +} TestSupport::TestSupport() { resetRssState(cLongitudinalSafe); @@ -166,12 +253,18 @@ state::LateralRssState TestSupport::stateWithInformation(state::LateralRssState if (situation.relativePosition.lateralPosition == situation::LateralRelativePosition::AtLeft) { resultState.responseInformation.safeDistance - = calculateLateralMinSafeDistance(situation.egoVehicleState, situation.otherVehicleState); + = calculateLateralMinSafeDistance(situation.egoVehicleState.velocity, + situation.egoVehicleState.dynamics, + situation.otherVehicleState.velocity, + situation.otherVehicleState.dynamics); } else if (situation.relativePosition.lateralPosition == situation::LateralRelativePosition::AtRight) { resultState.responseInformation.safeDistance - = calculateLateralMinSafeDistance(situation.otherVehicleState, situation.egoVehicleState); + = calculateLateralMinSafeDistance(situation.otherVehicleState.velocity, + situation.otherVehicleState.dynamics, + situation.egoVehicleState.velocity, + situation.egoVehicleState.dynamics); } else { @@ -212,14 +305,20 @@ state::LongitudinalRssState TestSupport::stateWithInformation(state::Longitudina resultState.responseInformation.responseEvaluator = state::ResponseEvaluator::LongitudinalDistanceSameDirectionEgoFront; resultState.responseInformation.safeDistance - = calculateLongitudinalMinSafeDistance(situation.otherVehicleState, situation.egoVehicleState); + = calculateLongitudinalMinSafeDistance(situation.otherVehicleState.velocity, + situation.otherVehicleState.dynamics, + situation.egoVehicleState.velocity, + situation.egoVehicleState.dynamics); } else { resultState.responseInformation.responseEvaluator = state::ResponseEvaluator::LongitudinalDistanceSameDirectionOtherInFront; resultState.responseInformation.safeDistance - = calculateLongitudinalMinSafeDistance(situation.egoVehicleState, situation.otherVehicleState); + = calculateLongitudinalMinSafeDistance(situation.egoVehicleState.velocity, + situation.egoVehicleState.dynamics, + situation.otherVehicleState.velocity, + situation.otherVehicleState.dynamics); } break; case situation::SituationType::OppositeDirection: @@ -227,15 +326,21 @@ state::LongitudinalRssState TestSupport::stateWithInformation(state::Longitudina { resultState.responseInformation.responseEvaluator = state::ResponseEvaluator::LongitudinalDistanceOppositeDirectionEgoCorrectLane; - resultState.responseInformation.safeDistance = calculateLongitudinalMinSafeDistanceOppositeDirection( - situation.egoVehicleState, situation.otherVehicleState); + resultState.responseInformation.safeDistance + = calculateLongitudinalMinSafeDistanceOppositeDirection(situation.egoVehicleState.velocity, + situation.egoVehicleState.dynamics, + situation.otherVehicleState.velocity, + situation.otherVehicleState.dynamics); } else { resultState.responseInformation.responseEvaluator = state::ResponseEvaluator::LongitudinalDistanceOppositeDirection; - resultState.responseInformation.safeDistance = calculateLongitudinalMinSafeDistanceOppositeDirection( - situation.otherVehicleState, situation.egoVehicleState); + resultState.responseInformation.safeDistance + = calculateLongitudinalMinSafeDistanceOppositeDirection(situation.otherVehicleState.velocity, + situation.otherVehicleState.dynamics, + situation.egoVehicleState.velocity, + situation.egoVehicleState.dynamics); } break; case situation::SituationType::IntersectionEgoHasPriority: @@ -245,9 +350,10 @@ state::LongitudinalRssState TestSupport::stateWithInformation(state::Longitudina { resultState.responseInformation.currentDistance = situation.egoVehicleState.distanceToEnterIntersection; resultState.responseInformation.safeDistance - = calculateLongitudinalStoppingDistance(situation.egoVehicleState, + = calculateLongitudinalStoppingDistance(situation.egoVehicleState.velocity, + situation.egoVehicleState.dynamics.alphaLon.accelMax, situation.egoVehicleState.dynamics.alphaLon.brakeMin, - situation.egoVehicleState.responseTime); + situation.egoVehicleState.dynamics.responseTime); resultState.responseInformation.responseEvaluator = state::ResponseEvaluator::IntersectionOtherPriorityEgoAbleToStop; if (resultState.responseInformation.currentDistance > resultState.responseInformation.safeDistance) @@ -259,9 +365,10 @@ state::LongitudinalRssState TestSupport::stateWithInformation(state::Longitudina { resultState.responseInformation.currentDistance = situation.otherVehicleState.distanceToEnterIntersection; resultState.responseInformation.safeDistance - = calculateLongitudinalStoppingDistance(situation.otherVehicleState, + = calculateLongitudinalStoppingDistance(situation.otherVehicleState.velocity, + situation.otherVehicleState.dynamics.alphaLon.accelMax, situation.otherVehicleState.dynamics.alphaLon.brakeMin, - situation.otherVehicleState.responseTime); + situation.otherVehicleState.dynamics.responseTime); resultState.responseInformation.responseEvaluator = state::ResponseEvaluator::IntersectionEgoPriorityOtherAbleToStop; if (resultState.responseInformation.currentDistance > resultState.responseInformation.safeDistance) @@ -274,13 +381,19 @@ state::LongitudinalRssState TestSupport::stateWithInformation(state::Longitudina { resultState.responseInformation.responseEvaluator = state::ResponseEvaluator::IntersectionEgoInFront; resultState.responseInformation.safeDistance - = calculateLongitudinalMinSafeDistance(situation.otherVehicleState, situation.egoVehicleState); + = calculateLongitudinalMinSafeDistance(situation.otherVehicleState.velocity, + situation.otherVehicleState.dynamics, + situation.egoVehicleState.velocity, + situation.egoVehicleState.dynamics); } else if (situation.relativePosition.longitudinalPosition == situation::LongitudinalRelativePosition::AtBack) { resultState.responseInformation.responseEvaluator = state::ResponseEvaluator::IntersectionOtherInFront; resultState.responseInformation.safeDistance - = calculateLongitudinalMinSafeDistance(situation.egoVehicleState, situation.otherVehicleState); + = calculateLongitudinalMinSafeDistance(situation.egoVehicleState.velocity, + situation.egoVehicleState.dynamics, + situation.otherVehicleState.velocity, + situation.otherVehicleState.dynamics); } if (resultState.responseInformation.currentDistance > resultState.responseInformation.safeDistance) { diff --git a/tests/test_support/TestSupport.hpp b/tests/test_support/TestSupport.hpp index 6cdc2349a9..335506e132 100644 --- a/tests/test_support/TestSupport.hpp +++ b/tests/test_support/TestSupport.hpp @@ -116,6 +116,18 @@ inline world::Object objectAsEgo(world::Object const &iObject) return object; } +/** + * @return RssDynamics used within tests + * + */ +world::RssDynamics getObjectRssDynamics(); + +/** + * @return RssDynamics used within tests + * + */ +world::RssDynamics getEgoRssDynamics(); + /** * @brief create an object * @@ -189,92 +201,70 @@ situation::RelativePosition createRelativeLateralPosition(situation::LateralRela /** * @brief calculate the longitudinal stopping distance * - * @param[in] object the object providing speedLon and accelMax used for the calculation + * @param[in] objectVelocity the objectVelocity used for the calculation + * @param[in] acceleration the acceleration to be applied for acceleration within response time * @param[in] deceleration the deceleration to be applied for braking * @param[in] responseTime the responseTime to be applied before braking * * @returns the distance required to stop when applying accelMax during the responseTime and then brake to the full stop */ -template -Distance calculateLongitudinalStoppingDistance(ObjectType const &object, +Distance calculateLongitudinalStoppingDistance(world::Velocity const &objectVelocity, + Acceleration const &acceleration, Acceleration const &deceleration, - Duration const &responseTime) -{ - Distance dMin = object.velocity.speedLon * responseTime; - dMin += 0.5 * object.dynamics.alphaLon.accelMax * responseTime * responseTime; - Speed const speedMax = object.velocity.speedLon + responseTime * object.dynamics.alphaLon.accelMax; - dMin += (speedMax * speedMax) / (2. * deceleration); - return dMin; -} + Duration const &responseTime); /** * @brief calculate the longitudinal min safe distance in following >>> leading configuration * - * @param[in] followingObject the object following at back - * @param[in] leadingObject the object leading in front + * @param[in] followingObjectVelocity the object following at back: velocity + * @param[in] followingObjectRssDynamics the object following at back: RSS dynamics + * @param[in] leadingObjectVelocity the object leading in front: velocity + * @param[in] leadingObjectRssDynamics the object leading in front: RSS dynamics * * @returns the minimum safe distance required that the following object does not crash into the leading object * in case the leading object performs a brake with brakeMax and following object performs a stated braking pattern * with (see calculateLongitudinalStoppingDistance) with brakeMin */ -template -Distance calculateLongitudinalMinSafeDistance(ObjectType const &followingObject, ObjectType const &leadingObject) -{ - Distance const followingStoppingDistance = calculateLongitudinalStoppingDistance( - followingObject, followingObject.dynamics.alphaLon.brakeMin, followingObject.responseTime); - Distance const leadingStoppingDistance - = calculateLongitudinalStoppingDistance(leadingObject, leadingObject.dynamics.alphaLon.brakeMax, Duration(0)); - Distance const dMin = followingStoppingDistance - leadingStoppingDistance; - return std::max(dMin, Distance(0.)); -} +Distance calculateLongitudinalMinSafeDistance(world::Velocity const &followingObjectVelocity, + world::RssDynamics const &followingObjectRssDynamics, + world::Velocity const &leadingObjectVelocity, + world::RssDynamics const &leadingObjectRssDynamics); /** * @brief calculate the longitudinal min safe distance in opposite direction configuration with * one object in correct lane and the other in the wrong * - * @param[in] objectInCorrectLane the object driving in the correct lane direction - * @param[in] objectNotInCorrectLane the object driving in the wrong lane + * @param[in] objectInCorrectLaneVelocity the object driving in the correct lane direction: velocity + * @param[in] objectInCorrectLaneRssDynamics the object driving in the correct lane direction: RSS dynamics + * @param[in] objectNotInCorrectLaneVelocity the object driving in the wrong lane: velocity + * @param[in] objectNotInCorrectLaneRssDynamics the object driving in the wrong lane: RSS dynamics * * @returns the minimum safe distance required that both objects are still able to break and not crash into each other. * The object in correct lane performs a stated braking pattern (see calculateLongitudinalStoppingDistance) with * brakeMinCorrect; * the object in wrong lane performs a stated braking pattern with brakeMin. */ -template -Distance calculateLongitudinalMinSafeDistanceOppositeDirection(ObjectType const &objectInCorrectLane, - ObjectType const &objectNotInCorrectLane) -{ - Distance const correctStoppingDistance = calculateLongitudinalStoppingDistance( - objectInCorrectLane, objectInCorrectLane.dynamics.alphaLon.brakeMinCorrect, objectInCorrectLane.responseTime); - Distance const notCorrectStoppingDistance = calculateLongitudinalStoppingDistance( - objectNotInCorrectLane, objectNotInCorrectLane.dynamics.alphaLon.brakeMin, objectNotInCorrectLane.responseTime); - Distance const dMin = correctStoppingDistance + notCorrectStoppingDistance; - return dMin; -} +Distance +calculateLongitudinalMinSafeDistanceOppositeDirection(world::Velocity const &objectInCorrectLaneVelocity, + world::RssDynamics const &objectInCorrectLaneRssDynamics, + world::Velocity const &objectNotInCorrectLaneVelocity, + world::RssDynamics const &objectNotInCorrectLaneRssDynamics); /** * @brief calculate the lateral min safe distance of two objects * - * @param[in] leftObject the object driving on the left side - * @param[in] rightObject the object driving on the right side + * @param[in] leftObjectVelocity the object driving on the left side: velocity + * @param[in] leftObjectRssDynamics the object driving on the left side: RSS dynamics + * @param[in] rightObjectVelocity the object driving on the right side: velocity + * @param[in] rightObjectRssDynamics the object driving on the right side: RSS dynamics * * @returns the minimum safe distance required that both objects are still able to break and not crash into each other. * Both objects perform a stated braking pattern with brakeMin in lateral direction. */ -template -Distance calculateLateralMinSafeDistance(ObjectType const &leftObject, ObjectType const &rightObject) -{ - Speed lObjectVelAfterResTime - = leftObject.velocity.speedLat + leftObject.responseTime * leftObject.dynamics.alphaLat.accelMax; - Speed rObjectVelAfterResTime - = rightObject.velocity.speedLat - rightObject.responseTime * rightObject.dynamics.alphaLat.accelMax; - Distance dMin = (leftObject.velocity.speedLat + lObjectVelAfterResTime) / 2. * leftObject.responseTime; - dMin += lObjectVelAfterResTime * lObjectVelAfterResTime / (2 * leftObject.dynamics.alphaLat.brakeMin); - dMin -= (rightObject.velocity.speedLat + rObjectVelAfterResTime) / 2. * rightObject.responseTime; - dMin += rObjectVelAfterResTime * rObjectVelAfterResTime / (2 * rightObject.dynamics.alphaLat.brakeMin); - - return std::max(dMin, Distance(0.)); -} +Distance calculateLateralMinSafeDistance(world::Velocity const &leftObjectVelocity, + world::RssDynamics const &leftObjectRssDynamics, + world::Velocity const &rightObjectVelocity, + world::RssDynamics const &rightObjectRssDynamics); /** * @brief class providing constants for longitudinal/lateral RSS states

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%0Ad+` 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