*E@gvRlP,)gNone RocketX3StrangeShellVXCoreEngine SetValueSystem SLWeaponVXdebugSetPos SetHelpTextBotpackPostBeginPlayTickASSsnamepix DrawTextSetText DrawScale LifeSpan RemoteRole(StrangeShellVXUWindowDialogClientWindow BeginStateTexture PlayerPawnAmmoBegin hasViewPort InternalTimeFire DestroyedSLHUDVXMesh ammoLeftUtilVXAltFireEjectColorgetAmmoUpdateReplace TakeDamagesetDebugLevel ContrailVX getPilot UnrealShare SetRange GetValueStyle drawFrame SkyNetVXEjectedBrassVX DrawTypeIdle LightRadiusBotTimerSetDefaultDisplayPropertiesFindInventoryType SkyNodeVX HitSounds ClientFireAllplayAsserrInitPutDown clearRiderSetDisplayPropertiesbNetTemporaryExplode LightTypePhysics SLBotBrainVXReloadLightSaturation AmbientGlow LightHueXSFBluealarmOnchopfXSFRed getMaxAmmoHitWallPaletteUSize FuelcoreVXVSizeStrangeMutatorVXMipZeroClientAltFireUseAmmoVClampLightBrightnessUClampbUnlitUBitsVBitskeys BeginPlayRenderCollisionRadius PositionCreateControlhand DownWeaponsetDamageStringPawngetFont MoveRocketcenterRotCompsprites MFVariationsStrangeWaveVXfnamesFinishAnimEndCollisionHeightdistto detonate SoundRadiusbounces hitSLDamStrSetFontround getRoundsBringUpArmedgetNext getClips SLWallhitVXemptyClose SLAmmoVX EndStateLandedVectorPickup Viewport Inventory needReloadshotposs updateSoundKonglauncherVXClientSetRotationfstyles closestNode updateReal teamSLClassspawnMuzzleFlash slaveFirebCollideActorssetRemoteRole TweenToStill hullHits LogPickupEndSetHand GiveAmmo Register NormalFire ScaleGlow SSprites LightEffect Reloading PlayFiring ClientActiveVisLODSet setOffsetsSwitchToBestWeapon NetPriorityPlayAltFiring stopHovermarksautoSkyNodeVX adjustGlow PostRenderfade clearWarning PreBeginPlayFAFireRam gameOverHandlePickupQueryaddClipguided waitover spawnGlowmateisGoalNavPointadjustGuideRot expiredBetareflectSinkout LaunchPuffVX fromFrontAddAmmo sameTeam pickedUp resetPhysics setTimesnoMoreroofinrangeProjectileFireOpen SoundVolumeviewFXHitSL startHover burnFuel getNextFont drawTarget TraceFire MaxSpeedStrangeExplVX SetRespawn adjustRot handleEjects HUDLevelVX setCanvas FontlibVXgetGoal setPilotstartContrailVXbFixedRotationDir AlwaysKeep findTrailersalarmparseKillString setupRidergunnerBehaviorcticksetEndTexture goShootMode playHitSoundgunnerMountStr2 setPlayer updateRidergunnerMountStr GunnerEjectsfsturn getFuncNamemaxOut alarmColor addNewClips handleInv getMaxRoundsPockTexRotator bOwnerNoSeespeed MyDamageType PlaySelectUWindowActive AltFiringLODBiasIn ItemName RisingRatespinFadeOutNewClipbBounce AmbientSound SetRadiusbOnlyOwnerSee WeaponSet SoundPitchbCollideWorld ShakeView bProjTarget BecomeItemGiveTo ServerMove RotationRate OwnerJumpedMaxDesireabilityReceiveLocalizedMessage ProcessTouchClientAdjustPositionClientUpdatePositionSelectPickupMessageRise StopFiringChangedWeaponIdle2 DropFrom sinkfudge showBeams smoketickbOwnsCrosshair assAltFireMaxAmmoMomentumTransfer ClientSleepExplosionDecal AmmoName spinRate DamageFXSetHelpDownSpecialDamage hideBeamsFlying spawnRandSLsetSkewrotate insertLinkspawnSkyNetVXsetBot drawTargetshoverBlowUpriseSkyNodeVXdrawIndicators validActorClientAdjustGlow toHeading WreckageVX GetFreeMovefindLaunchNodeStrangeAmmoVX touchCheck getViewPort autoMove properGamespawnFuelNearKongboomslife NoUpdateclearJDgiveJDjumpedupdateTrailers updateRiders NewOwner SetReset adjustThrotNum accelerate getTrailers updateMarchshakeaddHUDcreateNullWeaponVX setGunnerspawnWreckageVX brassClassreplicateSound goodNodeshort drawHRotupdateSimProxynoFuel AfterburnDamageisRelicarccosviewAlignChain rotateChain storeEjectfindEnemyFlagGoal roottick setMapType spawnPuffs drawLabels vaporizeSlideFXrefuellinkUp launchWeight addLaunchclientSendThrot setWeldLocweld getWeightgetVersionStringnoMapsvtheTimesetOutputLevelblendc useRoundfulldeathBy assSelectassDownCreatedSparksspecialHurtRadius SpawnEffects PickupSoundweaponSpawned setLaunchVelFire2 ClientFiringArmor wasEjected drawReticule drawKeysbTrailerSameRotation drawLogo fullspeedbrassv spawnBlast NullWeaponVXJumpDetectorVXrecoil playFAFiringIntro SLSmokeVXbCorona playReload remoteReloadSlaveFireWait setRetMsgsupdateMaxAmmopaSlide idleRandom idleLapseassIdle assReloadgetGuidedRotationassFirebBotsObeyOrders bCanOverridepickupMessages insertClip minspeed defaultClip RecoilInfoexrateGunnerBoardingautoArm SLClipVXdisarmProjectileSNVXfindSLswitchWarheadWarning AirBrakesfuel spawnBrassspawnDamPuffsgetFlag linkNodesbLevelPickupViewMeshNormClientAltFiring bParticlesDirectionalAttachCarcassSkinmyFlag WarnCannons TrackWarhead HUDMutator SetUpSlave FlagBase WeaponName NameColor RotationPlayerViewMeshClientInstantFlashThirdPersonMesh StatusIcon AdjustTossDrop ActorClass ReplaceWith bWarnTargetInventoryGroup bCanThrowAltRefireRate shakevert shakemag shaketimePlayerViewScaleAutoSwitchPriorityPlayerViewOffset BobDampingPickupAmmoCountThirdPersonScaleM_DeactivatedIconbAltWarnTarget AIRatingautotagbSplashDamage autoSkyNode PlayRecoil sndTotalCommFeigningDeath spawnPuff bSpecialIconversion FireOffset PlayIdleAnimAltProjectileClass ActivatedRocketMaxSpeed SelectSound weldRadius touchLapsearm baseFuelRateramSelfDamStr AmmoAmount RateSelf XSFRedClass SpawnSound getGunner recoilData assEmpty"StrangeShellVXUWindowFramedWindow EffectSound1 DL_VerboseSetWeaponStayvstr SLHitPuffVXbRandomPlacementSkillREngineFlare2contrailVXClass warnSound crashSoundAttachToSurface normDamStr bNeverStay WH_ArmedrandSpawnFuelWarheadLauncher weightNodes wallhitClassNotifyRocketFuelRateBuild MaxColor DeathMessage sparkClassWeaponRocketBurnerRate StrangewarSetNumericOnly AdjustAim chipClass puffClass deathSelfStr smokeClassnoBounceChancemeshrlucentbRandHitSoundJetCannonFirebForceLaunchPuff limitMult maxBounceshitWall2DamStrhitWallDamStrsndDropshotSelfDamStr shotDamStr hitSLDamStr2 ramDamStrlvlimitramSelf2DamStr abLoopSound refuelSound abKickSound crushAngle puffOffset gunnerSoundafterburnRate slaveWait bNoContrails outputDLAirBrakes_Info SlideFX_Info defaultDL slaveAltWaitconsoleOutputDL DL_Error DL_DefaultLength DL_NormalSwitchPriorityexpmwhenlinehsetTargetNodestrw avoidNodeclosingopeningEndZoomsetGoal targetLoctargetNodeExpired shotDeter targetActor burstRoundssuggestedSpeedlosejectDistFlag FM_Single wallDeter FM_BurstWAVSpawnNotification WhatToDoNextFM_AutoBuildSkyNetV3 goodAngleFollow Sleeping bNoSmoothSetSwitchPriority flagAtBase linkRadius ProjectileNumSetslvlRatetechno8 bubbleRatetitle9leg16 hoverTimerleg8title18 techno16 hoverRaterandFuelNearKong hoverRadius bMaxAmmobDDEndrandSpawnDistRocketAccelMaxrotRate UT_AntiSLV bDDStartNeutral landSoundwarnLvlu2m ThermoWaveVXcol3 warnBlinkcol4setDefaultWarheadcol2 SLVCannons SLSparkerVXSidearm fuelcore SLPockmarkVX sndWahooSLMuzzleFlashVX sndMarchLoop sndGunnerEj RocketCrashnormSelfDamStr sndPilotEj SLMutatorVX abFadeSoundWH_Auto HUDClassVX bCanTeleportthrate drawRetMsgsUMenuTournamentPlayerExecute drawXhair FuelglowVXsetConsoleOutputLevelassMode bNoCentersrlegacy ejectDistbRotate expiredMsg burstWaittargetExpireTime FortStandard TeamGamePlus TeamCannon FireEffectWeaponDescriptionMaxExhaustPuffBlueVXInstFog randomGoalfitFont WeaponString InstFlash AmmoString FS_Normal FS_TitleDscarVXgunnerDisplayCTFGame MaxSparks ClientDownAssault SpawnCopyRedeemerDeath ChipOdds AddInventoryGetStaticBigFontGetStaticHugeFont drawVRotdetonateSound SLInfoVXcol1 StylusVX ControllerVXUpdateRealWeapon SendAltFire SendFireStrangeShellVXUMenuModMenuItem KonglauncherStrangeArenaVXGetStaticMediumFontGetStaticSmallFontGetStaticSmallestFontGetStaticAReallySmallFont#GetStaticACompletelyUnreadableFont AccelMax Strangerace MaxChips randomLink BlastmarkVX pilotOffset RiderInfo BlackCloudVXrandomLinkAdjust WarHeadAmmobStaticREngineFlare1 hoverDistbRandomFuelNearKongBEngineFlare1BEngineFlare2SkyNodeBeamVX pawnHealth detClass2 shakeRate pockClassExhaustPuffVX XSFBlueClassexpdlinedup FS_SlickdamagePuffVXClass shockMult sinktime slaveAcc glowClass EnemyFlag bShowKeysdtype WH_DisarmedPlayerWalkingBroadcastMessagebHidden deathStr RefireRate ZoneChange fireLoopconfigMaxAmmo RocketVX_RedbRotVClientPlaySound RespawnTimeBotDesireabilityProcessTraceHitTeamPlayPostSelectClientMessageMessageDeleteInventoryTransientSoundVolume AddVelocity AttachDecal exploded TweenDownbMaskedAdjustDesireFor DamagePuffVX riseSound CloudBlackbTravel FuelpodVXStatLogPlayerReplicationInfo SavedMoveNavigationPointInfoMoScaleGlow PrePivot MiniTraceActor DecorationGameReplicationInfo ShockSizeOldShockDistance FireTexture bDestroyed SpawnNotifyMaster LastFiredFontCanvasOldRoll ServerUpdateClassPackage SmoothRoll CannonTimerLevelMoverLodMesh bBringingUpEnum Function SkeletalMeshMoveStructPlayerCount StrProperty RealVelocityClassProperty Affector bForceAltFloatProperty BoolProperty RealLocationSoundErrorYItemConsoleMsgTypeN ReturnValueRole ByteProperty ClientBuffer VisibilityEventTag bGuidingkZ AnimSequence DrawColorDelayResetWarFly HomeBaseROut PainTimerOrdersiReadoutVUseWarHBase Redeemer bPendingLock FiringSpeed bBringUpE_Shot NextMoveObject TextBufferStatetH PathNodedesire CloseButtonExploPickupMessageClassCNameGuidedRotation MenuItem TeleporterChargeUnrealIInventorySpot ChallengeHUDStructPropertyHUD MoveTargetCurrentNetSpeedbCanClientFireCTFFlag UT_WallHit numFortsFlagbAlt NamePropertyObjectProperty IntPropertytRollLabelPitchWDesiredRotationEWidthtemp myMarker markedItemDnextNavigationPoint bHuntingoStrv2v1ClipY bCanWalkYPosXPosVictim aClassNameXLYLUTexText bWarping Palette1Value NextMutator WorldLog LocalLog ESoundSlot bBehindView Palette3 bLighting bEnviroMapSpecialDamageString ScriptTextposDefaultWeapondist PawnListNavigationPointListNetMode bDropDetail MillisecondSecondMinuteHourDayMonthYear TimeSeconds EPhysicsOwnerLocStart nextPawn NewTargetBZonemyHUDTarget InstigatorRegionGameNextPRI bWasForward bWasBackWaitClear bIsSpectatorHasFlag PlayerName bInvertMouseMbUpdatePosition Velocity Acceleration ERenderStylebRisingbMeshEnviroMap bIsFemale PickupTime bJumpStatusWeaponPrioritybDamageTriggeredbSlavebCanFlyRatePrevSoundDampeningbNeverSwitchOnPickupEventInstigator HitNormalNewZone FreeMoves HitLocationLastUpdateTimeRollMagIndex Momentum damageScaleKillerPX bNetOwnerSlotVolumeaClassHitLocDelta TimeStamp ClientLocIP bForceFire SavedMovesOther DeltaTimeCurrentTimeStamp clientErrAccelbFiredbForceAltFireDirCalcDrawOffset RandSpinbHighDetailModeKickAltProjectileSpeedProjectileSpeed HandednessBob aimerror bCountJumpsSbig BestFortFort rocketblast FlagListbAdvancedTacticsPickupMessagePlus UT_ShellCaseDirectionalBlastbHomeCTFReplicationInfo FontInfoRedeemertrailGuidedWarshell NuclearMarkUT_LightWallHitEffect ShockWaveScorch BlastMark UT_SparkUT_ShieldBeltEffectCrosshairColorRange bAttachedTournamentPickupATournamentAmmoGAlpha WarShellPockWarnStaticSaveConfig bTossedOutArena bHeldItemUT_SpriteSmokePuffPlayOwnedSoundDynamicLoadObjectF UT_JumpbootsUT_ShieldBeltbIsPawn DamageTypeTournamentWeapon bIsAnArmorExpbChangeWeapon bWeaponUpSoundsSN StatusBar ControlRight ControlLeft ControlWidthUMenuModMenuItemUMenuStatusBarUMenuLabelControlUMenuRootWindowLeftRand ChunkHitbeam HurtRadiusBounceExpl04bInAir numBounces bHasBounced bWaterStartbRing bHitWater MyEffectInvisBelt_fx StartLoc LockedTargetdaflakSmokeVapourbSetUpGeneral Palette4GRImom Palette21Weightelapsed oldTargetdesired OrderObjectSizeGameEndedComments WaterRingClipChip WeaponLight FlashCountPuffOldFlashCountASMD bIsPlayerLtrail ZoneInfoAnimSpriteEffectEffects RespawnSoundSlideHit EditWidthTurnTime CenterWidth CenterPos bSuccess LocationbClosedSkinsRocket Palette5fcorefpodWallScalebClearthermo SLV2Models bByParent bCheckedSparkFCTSLastHeadIcons CancelButtonbForceOffsetRoot WinHeightWinTop WinWidth NotifyWindow EditBoxWidthWinLeft HelpText ParentWindowAlignSetSize WindowTitle CreateWindowUWindowDialogControlUWindowPulldownMenuUWindowWindowUWindowClientWindowUWindowCheckboxUWindowRootWindowUWindowSmallButtonUWindowFramedWindowUWindowDialogClientWindowUWindowHSliderControlUWindowSmallCloseButtonUWindowPulldownMenuItem PointRegionUWindowEditControl GameInfo ClientClass bSizableRadius LevelInfoResizedMutatorNewRotCopy DrawRectTop enforcerNextHUDMutator bWaterZone Palette9CurYCurXClipXHYawbFirebDuck bAltFireDamPendingWeapon AmmoType ExploWallOut ProjClass bPointing bInstantHitOldAmmo bMuzzleFlashbDrawMuzzleFlash AdjustedAimProjectileClass ViewRotationHealth bHideWeapon bRapidFire bMeleeWeapon bWeaponStay storeAmmowhereccpodbmhlhnslhitdam lastProjspawnProjOffset EFireMode returnRate pvoScale accScale smoothrvbAkimboslavetween bSkipOwnerxhair paFlashY paFlashOmimicPriorityOfretbarretmsgretmsg2retmsg3yybUpdatehaspickdroundsbUseAltbWaitacclaunchvbAmmohittexho SLV2Texturesexhaust redex_a00 explo1_a00 explo2_a00muzfmf0mf1mf2mf3mf4mf5bigscar bigscar2blackcloud_a00 bsmoke_a00dscardscar2 launchpuffpock1pock2pock3whitecloud_a00kllgFont debugFontbInit screenFadeshakexshakeyskewxskewybWarnedbAlarm keysSlideclipsthroLvlretwclipnum maxClipsbStoredpodsfillseprstrsret storeMaxfreshdpp edgeFadewhsonoffdyawdpitchmaxdmaxskewsevnofbpn spawnindexnumkFStyle currindex currstyle hoverLoc casingSoundrealLvldispLvl qualifierlFontsFontbubxbubybHoverinstlabely labelFontroyroFontqxqy qualFontbBorder bNoFitLabelsnextlvllvlmxpartial origColorc1newcdt buildStampbCTFbAssautonpfirstsnautosngoalnumgoals goalNodes maxGoalDistnodeSum bFirearmjb bFakeReloadbBuilt bShowNodes bShowLinksbDebugbNoAutoWeightNodesbSetProjOwnerlapsnpbExexgoalpnumlngoalcwtonclosest fireModelastsnbAltSwitchModeuprpm bIsPilotbEject targetNode lastNode launchNode bNoExpire bReachEject targetAcq burstCount nukeTargetnetbInitFAoldglimit smoothRateavoidrecoilvnewroldrxoffyofftruexyre slaveNamec2akimboSwitchPriority leftMeshexpy bExpires EDebugLevelanamefstampfnameppcomparatedlostrmsmssfuncbSizeretFontnochopbNamesbOffensiveNode bGateNode bFinalNodelinksldistsbeams bWeighed weighDepth launches launchSxspasses teamPasses wallDeaths shotDeathsnextSkyNodeVXprevSkyNodeVX navPointweldLocweldSumbNonehilo JNeutralSFRedJSFRed SLV2Soundskonglwahooafterburner_fadeafterburner_kickafterburner_loopbounce2bounce3bounce4bounce5crash dropalarmengines gunnermounthullhit hullhit2 hullhit3 hullhit4march piloteject totalcomm brasshit1 brasshit2 brasshit3redeemerrocketfly bReplicatevolslcdumb teamDamage bSkipNext bAfterburnbNoFuelexhaustPuffVXClassrootct puffRand dropSound throtSoundfo realAccel EWarStatwarstat bDetonate errorSumbClientNoFuel bBlastedejected ejectTimetstamp smokeTimer closeTimerpoejectvwhohitn bSputter sputtime launchedshootCR launchsnrammedlastTP lastTPRotpilotgunner bShootMode addedHUD throttlethrprevthlvl bThrotSent throtDirbOldJumpStatusbDelayedEjectbrain trailerslastLocpInfogInfo fogResetbFognw lastWeapon teleportDist marchWait bMarchUnderbMarchPlaying bExpired savedBob bTakeovertoTime bWahooPlayedbRevYbFlipYBEFB2EFJetRedJetBlue blueex_a00nowdamf fuelglowstatlv startSpeedzerolrraddscalesdsisparksdbsoftenthetanvrelvfrdffx mindeltanmnlxnlynlznvxnvynvzcurmdlocgrrrcvdeltavmaxrolloldvhavevhitlIG keysFadeIPSMslhshieldsamaxdfxthrmyphysbForcedjdp2SFBlueJSFBluekeysUpkeymaxhullLvlrealhnvishchunkssmokinveloLvl MaxTrailslagBycntrcoreLvl TrailOffsetfuelLvlfadet bShorted bNoBlack bSlaveDownindwreth retScaleindhfx JSBflarebRootlg bDDRestartsm bDDShort bViewAlign bDDShorted bDDEndedbEndbDeadendTexvpslownernewlocuuprreversebOpenSlider SpreadBox NoContrails CanOverrideBotsObeyOrderscxcyiTop HeadLineSvalcolretcolclearanceStamp bClipped clipClassslhud levelpixellogovisorK s#Z::$::$-::$ -::$::$-#6@5SZuÌttt{#Ut{#UtttttttttttttГГГtxwnKwnKt> Yt1tt> Yx> Y> YtxtxF xF ʉtttԝXԝXԝXԝXtԝXtԝXttttt> Y> Y> Ytttttttt> Y> Y> Y- tԝXtГГГtttxx> Y> Yxt> Y> Y> Y> YH}jttX'ttttxtH}jttttttɕɕMttt> Y> Y5SZ5SZ5SZ5SZ5SZ5SZt> YtxF ʉtttɕɕMttt> Y> YttttɕɕMttttx|@cZ 9H}jhi |_Y~\yjʉtxtttxxR~R~R~R~R~R~R~t> YR@GR~R~R~R~R~R~R~R~R~R~'n 6txxF xF ʉt^^x'n 6hi |_hi |_ԝXԝXtyrүԝXo}o}+9ϳ5SZԝXttttttttԝX5SZ5SZxԝXԝXԝXԝXԝXԝXԝXԝXԝXԝXtԝXԝXԝXԝX5SZԝXxxԝXԝXtttX'ttttxt{#Ut{#UԝXx5SZ5SZ5SZ5SZhof1tx H ]! 0=None 50=SLV2(Default) 255=MaxI ]650=SLV2 Default 1=Max --->Less ---> 255=No Sliding FXvPP$CY$D` $BqA$?D $@@S$C@$Be :I@As$CY$Dc $?a +z hr xF S B $BA $33>C UT_ ~@ \\\\zzzzzp$@W]87%os got more holes in %oop than a horse trader's mule.\ ]54%k shouldn'ta bought %kpa rocket from the Rooskies.{]10%o lost the nuclear combat, toe to toe with %k.B]! %k should have bought American!}]87That's what %k gets for horsing around on %kpa rocket!y]0/%k takes out the Strangelove under %os crotch.x]65%k learns that good aim is pretty doggone important.v]CA%k was just named Royal High Dumbass of the Strangelove Fightersu]kiToday's weather forecast is for high temperatures of radiation with heavy showers of %k 's meaty chunks.{]%$%k smacked into an unmanned rocket.{-,%k needs to watch out for unmanned rockets.{43%k knocked %kpa fool self into an unmanned rocket.{! %k smacked into a rogue rocket.{"!%k collided with a rogue rocket.z]43In the game of chicken, %k and %o are BOTH losers.|$D] Z woY sW r]&%%k rides shotgun on %os Strangelove!r! %k hops aboard %os Strangelove!r.-%k gets taken for a ride on %os Strangelove!o]$#%k leaps onto a rogue Strangelove!o%$%k commandeers a rogue Strangelove.o"!%k tames a maverick Strangelove.@tnc~$E$`@M!A$ff?y Qf$ Bv$ALd0wyS Xt=0 &xxxxxxxxxxxxx0qY#&x0 &ԝXtԝXtԝXt{#UxԝX> YR@GI&/> YԝX> Y> Yw]500N= Release 10S ]Now!`"4R "w "q ]ljThis Strangelove BETA version has expired. Visit http://www.planetunreal.com/0fus/ for a release version.G L J 50H!R^EU(0 &U(7"xxxxxxxxxxxxxx7"x7"7"xx7"7"x7"7"+9@JU(U(xx+9@J7"x7"7"7"7"7"7"x7"7"xx7"7"x7"xxU(U(U(U(U(U(U(U(U(U(7"xxxxxxxxxxxxxx7"x7"7"xx7"7"x7"7"+9ϳU(U(xx+9ϳ7"x7"7"7"7"7"7"x7"7"xx7"7"x7"xxU(U(U(U(U(U(U(U(U(U(Xt=xxxxxxxxxxxxxxXt=xXt=Xt=xxXt=Xt=xXt=Xt=+9ϳU(U(xx+9ϳXt=xXt=Xt=Xt=Xt=Xt=Xt=xXt=Xt=xxXt=Xt=xXt=xxU(U(U(U(U(U(U(U(U(w $HBu $@@q Q<I3w4I3i@HI3I3i@Hi@HI3i@Hi@Hi@Hi@HI3I3a $j SY 9 VT!p ,X 9GɌ 9 9 9s;c 9> YR@G> YR@G 9> Y 9 9 9 9 9 9 9s;cs;cs;c 9s;c 9 9 9s;c 9 9 9 9 9s;cs;c 9 9 9 9s;cԝX 9 9 95SZ 9> YR@G> YR@G 9> Y 9 9 9 9 9 9 95SZ5SZ5SZ 95SZ 9 9 95SZ 9 9 9 9 95SZ5SZ 9 9 9 95SZԝX`$@O $BO$AG B p E $@E~51c$`^7S tB::$--k ::$-::$3o 3&̻ԝX> Y 3xԝXttԝXԝXtx 3> YR@G> Y> YXu6xxI 3tttttԝXԝX@a>ԝXԝXԝXs \sԝXxxԝXԝX 3xxttxttxԝX> Y> YR@Gtxxtxxxxxtxxtxx 3xxtx 3 3 3 3IIxMI 3IxIxxԝX> Y 3 3x 3x 3 3 3 3 3 3 3xГ 3tX'X'X'I 3I 3ѸBX'tX'Гtt 3ГГ& & ГГ 3 3> Y> YԝXtxxxx!> Yxxx> Yxxxxxxxx!xIIMMMIXt=)5SxxxxxxxXt=xxXt=xxxxxxxxtt 3 3 3 3 3 3 3ѸB 3 3ttX'IMIIɲѸBѸBIɐIɐIɉttѸBѸBIIIɲѸBIMI 3xxX' b@]s r $L=` "HZuHCzD@zDC=o:E $L>K $L>} $@nJ??jJ$??HZ_??IZs?L=?lZK?kJ6??IZD?k ZD?j$Ai$=l qqqqqqh$@i"iIo Sj !K!CW6^Icװ15`Vts;cs;ccװ15`V15`V15`Vcװ15`V15`Vcװxcװ15`Vt5SZ5SZcװ15`V15`V15`Vcװ15`V15`Vcװx l $pB@ $HD~ $4Cz $?~ c^ k"`]You picked up a fuel core.G] FuelcoreFZ$ ף>Nk] deactivatedI!y@f$Av$@T^7X:}o nF(- ::$7IL#!& & ГtГtГГMMMMMMϘГГГIIɘГx C"IT  d _!Q(::$-6d 3ԝXԝX> Ys;cttɕɕMtts;cs;cttɕɕMtts;cs;cԝXԝXԝXԝXt^^_Q92_Q92I3ԝXI3ԝXI3ԝXt{#UԝXԝX> Y5SZttɕɕMtt5SZ5SZttɕɕMtt5SZ5SZԝXԝXԝXԝXt^^_Q92_Q92I3ԝXI3ԝXI3ԝXt{#U XV]RocketX3.StrangeShellVXVRocketX3.RocketVX_RedVRocketX3.StrangeShellVXVRocketX3.RocketVX_RedrbnZL>=@@jZ$@HZ_>?IZs>L=?lZK??kJ6fff??j$?i$ ףb$An$?G $>a$>}b]%o was nuked by %k's %w.T*&f _ `]You picked up a Rocket-X.G] Rocket-XN $pBg:I=LVAe$ ףh $L=Z0h By ::$M0 &Iy "MdGD!@h  ^UK &L~L!w`)5SflUxx sy s{ s} sv s| sx SSSSB{d} g +9ϳ{&=> Y> Y5I=$:e> Y5I=$:e=$:e=$:e=$:e=$:e=$:e=$:es;cs;c7"s;cU(U(s;cs;cU(s;cs;cs;cU(s;cs;cs;cU(s;cs;cs;cs;cU(s;c^s;c^s;c^U(U(s;cs;c7"7"7"7"s;cs;cs;c7"s;cs;cs;cs;cxxxxxx7"7"L]L]L]L]L]ԝXs;cԝX7"7"x7"7"7"> Yxs;cs;cxxxx7"xx7"s;c7"7"7"7"s;cxx7"7"s;cxx7"x7"xxs;cx7"7"x7"x7"7"x7"x7"x7"x7"7"7"7"7"xs;c7"x7"7"xxxxx7"xx7"xxxx7"x7"x7"x7"xx7"+9ϳ> Y7"s;cxs;cs;c7"x7"7"7"xx7"xxxxxxxx7"7"7"7"7"7"7"7"xU(U(U(U(s;cs;c^xU(7"7"7"7"=$:es;cs;cU(U(U(U(> Ys;cxxxxU(U(U(U(U(xs;cs;c)5S)5S)5S)5SU(U(U(U(U(U(> Y> Y5I=$:e> Y5I=$:e=$:e=$:e=$:e=$:e=$:e=$:es;cs;cXt=s;cU(U(s;cs;cU(s;cs;cs;cU(s;cs;cs;cU(s;cs;cs;cs;cU(s;c^s;c^s;c^U(U(s;cs;cXt=Xt=Xt=Xt=s;cs;cs;cXt=s;cs;cs;cs;cxxxxxxXt=Xt=L]L]L]L]L]ԝXs;cԝXXt=Xt=xXt=Xt=Xt=> Yxs;cs;cxxxxXt=xxXt=s;cXt=Xt=Xt=Xt=s;cxxXt=Xt=s;cxxXt=xXt=xxs;cxXt=Xt=xXt=xXt=Xt=xXt=xXt=xXt=xXt=Xt=Xt=Xt=Xt=xs;cXt=xXt=Xt=xxxxxXt=xxXt=xxxxXt=xXt=xXt=xXt=xxXt=+9ϳ> YXt=s;cxs;cs;cXt=xXt=Xt=Xt=xxXt=xxxxxxxxXt=Xt=Xt=Xt=Xt=Xt=Xt=Xt=xU(U(U(U(s;cs;c^xU(Xt=Xt=Xt=Xt==$:es;cs;cU(U(U(U(> Ys;cxxxxU(U(U(U(U(xs;cs;c)5S)5S)5S)5SU(U(U(U(U(U(> Y> Y5I=$:e> Y5I=$:e=$:e=$:e=$:e=$:e=$:e=$:e5SZ5SZXt=5SZU(U(5SZ5SZU(5SZ5SZ5SZU(5SZ5SZ5SZU(5SZ5SZ5SZ5SZU(5SZ^5SZ^5SZ^U(U(5SZ5SZXt=Xt=Xt=Xt=5SZ5SZ5SZXt=5SZ5SZ5SZ5SZxxxxxxXt=Xt=L]L]L]L]L]ԝX5SZԝXXt=Xt=xXt=Xt=Xt=> Yx5SZ5SZxxxxXt=xxXt=5SZXt=Xt=Xt=Xt=5SZxxXt=Xt=5SZxxXt=xXt=xx5SZxXt=Xt=xXt=xXt=Xt=xXt=xXt=xXt=xXt=Xt=Xt=Xt=Xt=x5SZXt=xXt=Xt=xxxxxXt=xxXt=xxxxXt=xXt=xXt=xXt=xxXt=+9ϳ> YXt=5SZx5SZ5SZXt=xXt=Xt=Xt=xxXt=xxxxxxxxXt=Xt=Xt=Xt=Xt=Xt=Xt=Xt=xU(U(U(U(5SZ5SZ^xU(Xt=Xt=Xt=Xt==$:e5SZ5SZU(U(U(U(> Y5SZxxxxU(U(U(U(U(x5SZ5SZ)5S)5S)5S)5SU(U(U(U(U(U(R *&JdQ *&2M *&O *&o$L>t$?N $?J $>K $9}M11 EI | $@f$@t"m$?p== = Y"$@!Hi^GK@ILh` I\22H}j&̻s;cts;cԝXttԝXt44s;cts;cԝXttԝXtVu֐Vus;cts;cԝXttԝXt5SZt5SZԝXttԝXt `SG]'E YSltdI^-lt9+t#?t\, oUXlJ_nWB fMq @nUI abV"X"_"]"Z*&"!@                                                      #    %'%    !*,'"    ')&!  &)$    (+&      !+-'"    "" !+.("    !$$!$-1)#    "$$$!  '/2+&"!   !$%&$"!  ")25.'$#!!   #&('&$$"!  !#+571)'&$!    #')++('%%$"!!!!#&.:;2+('%"      #&)-.-+)(&%$$$$&(1<<5-+)'$! !"     #&).11/-,+)('&&(+5AB80.,(%"!  $'$!   !$&).35531/-,+)+,/:HH<51/+'%$"!!!!!! "$''$    "%')-3:;;75310//03@OOB:61-+'&$$$#######$$$%'$!  !$&(+.3:ABB?;865358HWUI@:50,+((''''''''(('&$$$!  "%'+,/3:BILIEA>;;;AOa]OE@830-,+++++)+++++(&#"$!    !$(+.15:CMUURLIEBEIWqoWLE;630////////1/-+($"!!!     $',058;;<<<<<;751+(&" !"     "&+06GTjŸ~aRG<61.+'$!    !"$'+-16>GR_~ЬgTG@61.+'%"     !"%'+.16>GP]x޺tZLB;50,)&$!     !"%'+-1561-)&$!      !#$')-1660+'$!     !$'+.37HWtxZOGBAACECEIMRURD7.+('#!    !! !"$$%%')-3:BPaooqqaPE>;88:<<;;?BIMIB5-'$#"     !"$%(,06?LWZWZZTG>85333355357;?BD?5+$" "$"    "$&)/3?1+$! "&   $(0<=8314KL:0*&%%%%%%%"   &,2>NME?B^\E70---,-+&"!  %.7BUriZZ~TA988872+$   #,8I^uWNLLD9/)$"!#  ")3Fh嶗uVE92-)%!"  "(0@^Œ]L@6-%    %+4@[є_F6-&!   $*1>Q{oJ9.(#  !$)0:Jj_C4,%   "&-6F\pJ7,%   ""'.7AMXeẘUA3*"  '(.25894%!#   %.=BAA4+'&')'*.30(  #+6555,&"!!""!$&-."   ).,--&!!%#!  &(%(("  """$$                               @@%@          #  !"&  $&" *."  %34-:=*#"!$  ):XR_]822-#  &>}ɰqY>-%!  &9wB-!  $1QW1$  ".Bif5$  $*-17FщysC+    $/Uf@69A4"  (:;,$$%*,  #)*!   "           &@     !% ">F?*% !]T( 1I "&4^L(   2#$      5'@ p_  %v "  T'-*90g' w' P@,g@I^dq@tN M P LbI ^!n hI ˥HNL7K D!o i |_K +c!J HNL7wMyCH_Y| Jh T y@L@b,sO@M yZ}hWhof.NN K$L?51$@Me 7 bS@@Xm@C@DR @@@uchJHox M@|@M~@aO ~M Vcf_Kz vYc R   I c iZA~ [Z@ypnA@Ww A y B k@SX rM aRwh@s DOm lS]@QO6C G mxF ~ gP `y HAi IUr g^  B dZ3_n yLyWQYEm\{G!h]2wnKXu6ttts;cГtxttt5SZГtx xzr6xylTԝXԝXԝXԝXtxxԝXԝXԝXԝXԝXԝX}ČF@F@F@F@F@xF@ P { $An$HBF ]*)%o went out in %ks big nuclear fireball.k] %k blew %kopself to high hell.A t$?!MyNL7ca P^  {&==$:e=$:e=$:e=$:e=$:e> Y5I> Y5I> Y5I@sPE;|@cZ@a>GɌo}o} lhESf$ B======Y"$Af$@v$@v NfdLOONV c@DZ L qXQ aH ]LWrr{ PdDQJTo GVnhQGEl U_k cKpDK\f\_g x@smc@CCB?8AA7C$Dr'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6r'ImuOGr9w?m:uyrFsNxE Fx&G rԮzsvxz yxy Pr:rՖ96.ÎOO?Y O R?9Y:Y94H|e)eHzbG74H|_94pDeepFb 4pD_]~vF]GNO(@P@?YYR_?FY ЀϨ@@P@_ _ׅ Y9_׹ _ Y9:+;+69E >;z |@w6paW@|xOA6HAaYxx6Æ:>m9x:Y:mx>xvzvEvֺv?:@Y Р&G ??|@9A|xW@W@V@V@7æy O ?|@?|xRFgFԮz_ ~F_ׅ ƅ Y @PAF_X???@@P RgFvƹvO?X??*vNֆрٿP O 0  YP@ yF_׹  _  Y Wr?OP @9 r96?9>*9X Y X svsNr'*'?:r:*:xрκ?x P@@O @ ( Ѐ@X@ (A㈀W P|T |T ЀШ?9?P@ @и 0PpYP a|ȿO x (nGT nTDž H?pOP@ O@ P@@JЀؿРY ȿX@ H?pa|JY  @ P :?P@?пA@ne@nGe<vN` O O@ r؀ O?пr@@O@ H?pP eHzepF؀?|@?|x@JJ?W@V@>?WBVBo~n~|bG79|b 7w_GI_ee<=G=]/]oՖ96.b ]_bG7]/_Gaa]]/_AOA؀?P/::9>;vNٿрvvֺ/YY9YY:r:rvWB]No~]GP ee<WYY:P@P@P W@9؀P|P>XϨ@:/aPaPO O YP O PPO @999_AW@:G:vN7vƹvƹvvֆ6OP :GbG7:b P_o/w::_GX?:6$?6A)$@CCB?8AA7CW$h6@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB6?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7CF6==L>??F   #%())-//33379>>>BCCB!;I;JJNPOOUU++11 bbcefggN  _a ?TV;  $TtR5777E~G!# j HIe!HMH!!LLA>?LMZXA@@ "?;J^`'&R57(:; w5478\]3n <r<"W'-hcIJKbg8f0*G6\\]]qx%ss5SS f2KFie1 =! L  *0h#" !6;;3Q$14b (y.#'&-LylH;/4A3Ennbrq/r?.+y}*--Z,/b3 g&Z (s{Y)D:;\k@:jab<;=! 3 8]'&& {sYX =1~=B.  UUCYv~#)?-i[ZiE) 6_II `RB*`[8uW>ef]  78vXvXeM(CQV+d}}TS2,,w+]*r,$)%+KzmJ<0796Fmm` poAp01z~033\2@cPhi%\C.w|[/6887Wh:6g_`"J2HOPH^FEHGF|wX 55q nn>o #>I" qt0AM$uu>DN4p>?B{z{FN#$f_G@aa1?:SQjk^"!"9:TTRlRljKN'DxJAeL|| t<=s5 x^b #e'x-""&%,&xx`KxKx\\\mk%:G:G .32@32121D2mkmmaaaxxaqqp-.aq>m@-.,*||x||x*a(,,()+,)Y,+,Y*,m\|.:a2z' [fcfcfY%X+%YX%'z'  rz zrYX'(Cjij999[:9[7:[j8i\?:7887iq`xqp`:;:;:< \?Gi 222GGG 2112ee7i#~$\%&#&$#&#$~~%%rzr rXWXWWWW }  0"<0"" } "<<""HuA->-@>>@     STT TH}BBBXXu"}H}Y^>,,hZYhZYhY D(D   555>^^(_QHH!!H !!_Q_QA)AZ_ZZ__hZh(00-A.|7uuW;<=cddcdedeb+\'76776767 tTttVuVWVUuVWUTWUd bBLL'LBPU*+UUc c c|)|)|*bdSTSRSRPTPTRP1++*v*v**\\**)q#+#($*(qqJ^y Jy]]l]l$;I;I/!6568545E45ll l l_  _ y_o_y n o/.o _ l/@.02} }y }} y0b2./.2/2112[[220l].{b;O-{VffhhfZ$[[$1B$Z{--{vv{Z[-.gfg333V36V65V4gf]956454fy^o^no!]9IfO OOIIEGINO ONjj7fGEBGF]DCEEDDBGBFGCFECv{vv XmX4mm4  4p p   mm = 3np= <00=  <<43ppo /?s@/s@s #eK#KMs<tt<=t==CICCIIJX34X3pno==y^>AAz`y`zyyzJE#~("#EL"#"#MJLLe^>(^FHH HH~FF??~`~``z`z0(~0~/?{.9SQkQhihiijgji]&!98!!  !9899!!98ROSOPOSSQPNPkkPQRNNkigwCMM&MCw;w;;@wddMdMJMMKK{?{?{gisstrsr@t@rt@4ww]] F   ! #$%%()*+)./01/34533899;<=?@>BCDCFB!IJKLJNOPPOOTUVUX+Z1^ `bcdbfghigN  _a ?tV;  $TtR77E~G!# j HIe!MH!!LLA >? LMZXA@@1 68"?;J^`'&NRS5Y7(:; w5478\]no rs<"W'-hcIJKbgG2e1 =!  L *0 !"#&'()*+,-./1234568:;<=>@ABCDEF .xSnp p ۾ˬܭվԭt ½̺? T!M"M#Z$^%R&^'E( )>*z+F,C-;.v/D01<2>3Ls4KU5Ds6Js7{s8uU9st:us;8<?=?>ӈ?փ@҆A։BqCdDqEi FdGmHFI;J8K6L?M7NMOXPVQTRKSTTIUHV>WFXaYJZ![7\¶]^_`aܺb~cPdlewf=g~hPiljwkOlm̮nopqrssӄt=uAv w6xyzl{|ܫ}~RF@O Ƈ30%* `<`I_`utԺF ec]{m V ڗ/iTYW^]\VYVZ ԫո[\SU?=3# 3.  *(+![JڝB? ; !9ts%  F]QMY[";- :;؉    ц \ _! #C؄Ul է!ܝ"<#9$%j&'2()ڊ*(+&,-ӈ.ކ/Ӆ01f2e345[678׍9ܗ:_;y<J=C>?ڂ@:ABZC:D\E9FGeHQIrJKL3MNrOsPYQ!RXSQTTUcVC~WXY$Z"[|~\)] ^_!`a[b}cdd1e8fESgOTh!i{TjqTkŲlmnopqr;sBt?u%v'wxyz{ބ|މ}P~0@Ѓ@__V>2:[1b:pp^:%>v!W!>_u^ob6b"9"ڠϢڣϥŧŨ}47ЉϱCδɵ )~?}'O?W'F';=lɋɈÎhgpqh7 8 A_6UG5$9.=8>kDD0@4[;Y<TNRdCO[8ll1l}Oe8w l P C J ~~~~FV?M"ǫǧeC@ !"#$<"%"&'()*+,-./0J123456789:O;V<F=:>?@A%BC|DEF`6?? >p `Dnj B[ ] Q ^ @#f^8 !U@cB f@FsEUL{eB Qt{ a e ,Xo@yjh\ ACY L D{ [@Rx@HWKb _  ewJ R Gb w~ifqR UFuGSmr*`._"6MK\-u 'Q-@q!w\QGfire(): no ammo::$.::$ @s w*X-A-u  S[x JX@PrXzw]\ Y i PA}p ,@NWc @~wN\p4 W4.a r J iQ |KRk@NdG }M V z_ 0S!WT H q0 &s;cs;cx5SZ5SZxFD@K wA T A uOL fuDS` vt+@S@#fGTpYfr L[n E ~ l h JP V SCs \s/ԝXԝXԝX t y jRicB b "F "K $?5Huf GA tAWN Dt}bYWj`!R_dB}W ppY @ab X F!Ox [ @\ @c @g ITO @[i _~J!@ j xf}Cp_ M!u q $ChW.$L>51 $?HbSEt X s k @k CCFFPRO dLZh L C!U{H n^mԝXs;cs;cԝXԝXs;cԝXԝXs;cԝXԝXԝXxԝX5SZ5SZԝXԝX5SZԝXԝX5SZԝXԝXԝXxs$?\B!k I ˥GFSWI 51]L]!F $>`IHe ^NL`7 m$@@kmHP&- ,aR6- wH *no$-vY6Y%6Y%a+YA aA (q!D A!RK +cGFSWI 51]L]!H $>`IHe ^NL`7 m$@@Rf./f K ] Ur*-O rK* -OB?K~?K{fprnds SK~-LKpclips SBB?'?Sfprnds S'e-@ -Lu 9$]semie N$]burste b$]autoe a!ffreloading]  2XhEM  /2ɸ| .`$>O$@$5 c$]AT3-aH-B {-(n6-nF AAA>AF ?%A??,AAp-' Ge l Z  @ Y r ~V!vWbringUp()$Pa/!_i.Z jw*-K'-(Aq!C pXw O[W! -k(-A'>O ^ Ymf } N  h@ D\| Q^n~~dKH>/-""@s .Mv-@%clientFire(): going to FAFire_'q!w-Anq!Hgq!R-M'w*X-A-M-M T ] ~V y 7w< | | | OWQ G U z f A4Es @Q!`C E ko} p p I @ {zROF xTS|y S Z iTi q @,Y gR " a 4_1QԝXԝX1!t"!t"$zEY$zEj$Bl"PF@q$@@M!$?M`` y`QQf$@v$@He ^NUL7LN7z@,NiG g b mof DPrhLOl@OZt L@3^z pp2I!qg @ O82ɸ| .v$?dd$@1$A[ S B 'x @foCA 4`aEqS@V G|XR`s}a_d @ n_ sVAJ HE%R#Ppb]h{M@,P Op` kS!yx`j8B -'-(-(^r5-* a!sq!s5(b$5 #?h$/gunnerBehavior(): over 360 off ground$Z@-w*NC?q$3gunnerBehavior(): eject! close to flag base%w* w5-N?N5-u <!m  r5-a/!da/!w*A-$%$\pgunnerBehavior(): eject! within range of movetarget: $% | } ups~ U P Q@J 9g q!D g]bINu |Gb d@#@#fifTXYZ[VVb#m"CK e<vhHW@`^@lWF}@m@oxuNrKqX^rr-OLpppreload(): rounds: SK~ clips: SrB$w*a!frB& reload(): mate reloadingrB%cq!f d o \ $[ma m+$\ai g #?,}(~w\*a i a+a>'>>=;$&&;=>>'>>=IXH%%='')?))'X<$!Ls7\geckZecch#gcaruo&!Z#tqtnhbbdc0Poh]t"mu&Pqm\r ݙfg\nCZ##:=')?)?)>=)??)'XW:#!Msl\gfbk rabtoach&"j#ȣl\hfeq*gh &Mr]ebbc #tihoPhs$ukhlK !feg\lCZ#!;I>)??'XH#HX))?)>I;%!Mrk\gcj #hbcmcKou{:j"ntȹZr\aMnhkv*& toihfminsZ#Pqmir hcff\nCM"$;=')?)>IH"&!HI>)))>=;$&"Ls7hfAtbdiaktopsrP&&&&&#!$*Plb{׼ q\ms Psn]\kp;Ji\mlqK!vkhlK&kceg\lsM#$<=>?)))>I; ;I>)?'=<!LslmgK#hcalsbfms&vm(ppP&PPMvuusqqppoonkjjjjjijiimgggghjlnxoopstu$$b*Djhotm\lq;ȩmZtnmjmmq &pbfg\lCM";=>)?)>IH!&";I>)?)>=D&!Lr7h]Z&sadag#*vMMKpl\h&&&"! ZMtkppnkkkk]]iiiiiiiiiiiii]]]]jjj]iiiiiiiiiijjjkkloopldIMjg,vomvkZnkCcfg\7sM" D>))?'X:#9X')??)>;"&!Lsl\gfhkq#!fev&Mrjhi-&#!PPMMKvvuuttuDtuuuuuuuuuuuuuuuuuuvuvuuuuuvuuuuuvuuvuuuuuuuuuuuuuuuuuttsdItnHuMnrotohu쨎rPusxMefg\nCM"#=>)?)?'>I<&)???)>=WV!Ms7\gebbhoLLMKp\m&&&&##&#&&&&&&&&&&&&&&&&&&&&#&&&&&&####&#tݤouostohtPrpunusn#gfh]oCM"!HX>')))'>=:!":=X')))'[=;&"MCn]gfebait#&pgkW-,--,,,YYYV /sowuostohtPrpuonrso]eh]oCM#D=>>>>X=L&!H=^X>>X=<& Msn\hfeecbbhvot&&"# +--,,Y,YY 0JVJesnswtqswtogtPrpuootsnlh]oCM"& <II;:& :;IIWH#& Lsn]gfeccn(Ls*&! & +-- ,YY *,-e2ݛorIpto*ftProuxto*mfhBnsL & L ;;:Z &":H;HH&# Kr7\hfeamZ!o&PMP&& /-,,YY0 11...../YɠnǙvso*et p}on&fg\lrKZ# ! " !#&"ZD6k\gfeahZo ™ss"+/--,,,Y,Y Y0000 0000+mȿsj#ۄrx0eCPo.ǠnJgeg\k6CL "&&&#&###&&&&&&&&"PKsn]hffeam"rvvljrJ______++/+fM*#MqhmmoM٫s|YtݰZ(igrP*Dfgh\lqCLP!#&&&#"! ZZZZZZZPPPPPPP "#&&&!ZKC6k\hfeapvsZjfisP ________+ cgZ&ZrlmmntVLoh]s۴0dq躰迨h]ukhkt"Mffghj7rCKMP !"" PZMLLLKKKKLMKDLLDDKKLMZP!""###"!PMKs6k\hffeceM&&" ZKphkfdhp&  ________/bm! tn\mlsZ#&ujhlLJbp(wihksP!s]mnLZgbeffhhjlorCDKLLLLDLCD.*&&Ku&#""! ! LP!ZZZMLKCrok\hffedgm\m\hffedccbcgkv., _________3+a%%uo]hkqM" qmhpdhlhjpvZpmiqPPhbeffgh\Bno6rrr6quq!tڿZD!Dssr6n7]\ggfeedcbcccdddehpZ#0Y_____________________+bhmjpK"tjimebgrL%* &Klhkt#&]affghh\]jj7BnH^Drs #o:!s7jj]hhgffeeemsY _&&bjP&ssroopq&!s]mnhbeefffggghhgJҦostlt\gggfffcddeit!/ȹaxu"YZpmmfeffffgބA՝]kjjjipr쬗prrssst]KǞ]efeefefeecbac\s,_________anȵ(&*&u*(&vhcQ/iےkMM^oosȢroooogti gcbx,+Ilggegp& +ȿbnʣm$Kn°mZwabfsh#̀qysty&m&mDLeccg%nWiku%    aoknڶPMn&pi&oadb*%g.1hVȹprxs٢;h.tmscdcqWsM#  -   &aoȿs(Dh".Y<|mm(MjVgiov(]pݥbbelmosnstnm\t]bdbst/Y&    +b"Lld(huJxmhi}M,!Mk&Hmuoihsȯgvocckvɣ*ososЙnvm&vh&Dcccp:      -Ybhv"t]dafJxkڣf&i k&Pȹrkgvg ˰H"db]&&(hǹmposntl]s]smbcf&%o  + bprhcbaqȃgP&kW&i!ǞjPi1moj˞jfhebsomnsosMjLh"Kh#tbbvp --/ ȿ&*bbccgՕs&iտ&] MjP]& ڨfP&\qsgbcgɞV*osntkjrjr#hccbe &fpZ+ &쿿+brǦith&] Zj&Pi&nkZgLPfcaompntntMkh!Lh"tbccbh}+(Ptkhiq &&&&& +/chgM"hK#] Z]ˮ]# #hsth!naݿ㛕ʿntntZkpkq&mbcgm}ϽgoMtlhmls%Խ&&          ( ( (  bkonl&] Zj&DZ]"MgPlkMb]Vgʽ?U>34 ntntZ~`'3```מh Mh!&sbcgsMYϽebbeZDrhhnZ ***#####*******&#*(((##bhvh"ʹLg&]PZj&#]!qm&#hs&jbbsɎ}kgq34`ntuZjB_`lnkp!gcuacg" ghltVtgス%Z*(00VVVLMLLLLLLJJJ.## chu1s&] Zj&#] ipZgMDccgɢr]_U5CU_~`nDǔtZj356{E4AZZh qbcfP.$cbosabag"#1&Msu ܭ00VVVVV:H:VVJJJ111cnk3&] P]&&]gLsh#&hban⬐WhZ`_U>AUovДvZj)^O6`47_3wllo!fdbi#waMmbaun1ttP(&&&nDsqĶMqmdcZhPY?[>`4`ʇ]PP]&B`'3``3th"klsbdݔ۹ߚ__Gz7U7ɒMZj)X'E4_/hMZhPobak&eajL<ou#iffefn&2ohht&Mr]eccbirj3^B__0mPP]&&j)h`_`ll"ht"gcbi݀-ަm_E)T'6MP7'=y'_rjnnPfcbl#bclbbmſ%k++. 0#sj& uomebbddds\Ch7r474&iPP]&&jP_5U_X3.hsLgZ obbhg4_4b^U7jMZ7X[gQ4%hL hZnaaivdbcajZedbt*o#&#PuoifcabcblhM!g)UTp37_iPP]&&jP[U__ugPqm&Peݝ`_B4{')27ʎZP\'X_UUOT_`riolZedbgvȿJfMkadbhnHͼ#n#&&&!ZtoigededccbaadeZlnll'X'y4_.]PP]&l4>>[7'}mjokc/˨gަh_]4?E_[3~Z]ZP~4'=B3?T_&hv!gZkbcdn ,1eLl*Pn&&"PZPPPPPPZMKDDtsqnaoh"KgJ=4Nk'~_ݎPP]&n^)5>^ip guKiګg_`_3~PiZPm`)4_?`߿Dmqkəbgs#*2n&ur&dfhu#ht'X[O>Q4jZ i&oI_U_R^UPgLKg ⩠ݠܖ.`_43`/jZiZPi0`__3`.mt"hMcbhs!Ȟl˿nM$b||kpj'=_>[T_`1]PȮ]&n+`^_^TOU1th"oi(q&,gަhùص]PPP]Kh#ȿrjIccbgpvZ #&lLKl*ȹ*"cgWhPMgP4)X\3T_P \#nsU_7`)[`kl\qol{g&&1\ i# ]s"hLbdbfegm]knoqsuDvZP !#&sl&&&"!#&&&M&.#crir44__`&iPi&o`)`_'_)3"htPgLbjiܖ* ̥,Pm*Lh#s]oadddccbbbabccdeeeefhcfhhmikllnnnlllllllllnnnpsq\lstJ*˿ʺ. #( PZZvutttststtttuHemirm`_33&]P!k#o3_`3`LgPthibڦm1ik߃uڞrjqʩhL%hcdcaabcefh\knnoossssssrononllllqrtZ!mV&1nkimhhfggghmhmmmhmhhhhgfggde:gM]PDzj"op]ǗphcdnVhM,gZsscq1&&hǗghcdcbacefmlosDM #&od.‡YmgghmjlostuMPP "#&&&&&&#Pjbcgkniڲ\osmqЀgcbjhgonnooooooow&,gZslDcpɀgh\\]iknonwgreccdbachkptM#&Ȟd謨hghjnrtM #cceqh.(jP1mqxȿVgfcbcbbaaaaaan݅h%slDdpDebbbbaabadbbcbacf\otP#jm;ghkq(jbcbuhpPPPPPPPP Z.%r#Lt1P&&&&&&&&&&ڛ\lcccЅi(tlDdoZgbdbbhot&Ճe**:gwJ bcddfeeeeeeefjuvgghhhmhmh\m\m\mmmibbf<݅ei(slKdoPmabbeiqȿ 2wm%yg(ݒaccag *Lhacbccccbbbbbbcbbge*slKlղkacdmH hr**.hnJ |bcco0%cbamT>RS>li&PgtnmJn–V{nsJiPibceD**&kaccr& fPǠЦbs.#\gPuebax _>45S__sZi&*PgY}/tΖ/{i-oYiZɅcev&kace&f쿿Ȣhbae%jfMak*#ifPgbbj4BW5S4˞xZ]&Pfw~~+~-kWP|bcD#kbbeڭgк&vicacgsfhkekaelM*.#fZZhbcm`_=^>1D66@SX+3xZi&fmiiiiiiiigPmcdcs&˿#hcchv-g&daahpph*Lif>UaelM#jfZ !am&4_5S B@@@N>B5'"x"ZiPilllllkllllkllllkllllkfP/M5@7R'[U^^U?#n#Z& &"qonoooooooooooooooooooonop"wacq&.*!gcceY&իv"Poeabgqu]e}-uhX^cajLڠLjeLڟn43K@5^>R4_!nZi&&vttu#jban¹oadfP٫fu%qfaagqDle{thzX^dacjvilvǔaW*3&r@5^4' ՙoZ]&ʹPehimmmmmmmmmmmmmmfP#gccg&&MdePȄ*hegagqKnfɿ#sgzX^cadhctnvke*`B@^>+++41rrZi&PfwsssrssshP!ebtjbeLfk&*maagqLpfW^cabȗfrgx&37@B^>5e\30kZiPfhilgnihnglhoglihohilgngP.kbalZxlnnnnnnlnv ubcf#1iwMrfhW&*e~I+gȿ5'TTTU^^^^U)ȠxPi& Pgxt]tni%tntont!j&jPvcch&ZlhotuutuuuqhiK #hbfuggk:.ggɿ& ne ulhgkhµU5X34__`Jki& Pfx]snisxitnntiiZ&mbdvZlhx&rhjK qafȱvnmfhxu$hgZkejZZ]ghlt&rtI3@'3_xu w]ŶPgyisoVomJosVPKcnZngвhjL& edskhef|0&fmqM#ƿk&. xI/1'4___`ǛueuPgsomn–}otVJiZla&ZnhDZjL lǿ#irڀg2u'`r- İY&Dce &mܪsssssssssssssssss:npZp&$˨ȭLuV؆IfpeP݆Kfvfvg&vr*ʺݧt&&&&&&&&&&&&&&&&&&&Xt-:MMZMZMHHDPVMMMMMMMMZ.*vcg"&\2 ql k**u܈Ǣ:؆"٦eq!gKMkMjyt㧢U, ˩kkkjkj}loxnݥgnlnkjkkkjLcm"hZsnJ &*׈uuТV؆PЅqLgMuqڦu&&!&{o-nro={oó&..ZfvPh&slȿ*mv쿹&,uW.:f%00*1;.L&, spwDnsqtpy*Pemhgu$ȣh(skJveouምrI~gvvuXXXXX==<:$("($V;<==XXXX>XX>XXX==>'''''''''>>X==W;HV:;WIXX>>'''''''''>>XXIW;%&!L*ꪐo&qIikn2bcguμݿ"tngdacM.HsWwmsPŽ:&$H<==>''))))))))))'''>X=W''))))))))))'''>X=W;&PZ,~]P~͡rr|txachthr#Kohbbdbh& /I}}ijjklnlllllkgfhgdgg{h2&#$:<=X>')))????????))''>=IW<<>'))?????????))''>=>=WI=>>))?????)'>X=;V%& !ڪoj!^qqwt"#""!&waaqɩiiJٹPs]q-WortM!#sukovtp!P #!:<=>')??___?)'>X=II=X>))??___?)''=IWH$&!Z&,~]Pj!2^qqot#hnmli!vwacngɲY|svP"1-/////2,ușokrt&$HWIU'))?_____?)'>X==X>')?______?)'>=;#P Łgv&j"^qpot(fkgkmPqǿ˺was(Ws!oxxxyyyyxxmvunkHrK;=>')?___??)>U===>>')?__?))>=;:""M"էo!~qqw%lh\Zqbf&vg.*&M!&oP####"######&rutn:sK";=>))_))'>XX=>')?_?'>^<:%&PL&,~]Pj!^qqo1egh˨ibh*Vmk&o#ttnHrK:<=>'??_?)'>X=U>')?_??)'XI<:%"LLgv0j!^pqpt1oɫj. mcjjmV* &o"suk&jHsv"V;X>))?)'>XXX>'))_?)>UW: &&ZC ̧pk!~qpouYk#fco&wgH%0&wstnHrKV<=>')?_))>>=X>>)???''=I<:!& CD҄jk!^qqokutttDttrhuP"ʞecdssg.&PLY &lW++V|utn:qv#H>')?__?)'>>X==U'')?___?)'>=< Kr"~Dk /^qqompop^|plgkkkrZ"ѪdeLļޙgw!Lsswowwonwowxnwoivunjțt# =I==>')???________??)'>;""LqvkP^pqot+ƨj*PZ/vY*Jm1 Lro|W-tǙwlq%<=U'))?___??)''XI==>')?____??)'>= H&#Mrspl^pqwtݿ~,&ܺkh&Pvros٣nٛ')???????)''U==>>))????????)'[X=<!&#Zrq#wlP^pq|tk&.2qg*"Zurpl}II+-/2222222*|Y'')???????????))'>X= C =U>'))???????????))'>X=<:$&MCn#ok/^qqxt.˳V*ʹ(.0ug* # MtspwniimgggmenqgK!&&H<==>['''))))))))''>>XW L ; W=X>['''))))))))''[>X=[>['['[>>>U=I< LP:;<=X>>['['['>[>>UX=I< Z &#ZC7"wkP^pqos&&.(PPLtspqsP*.JiiVt!hY& L 9===XXXXXX=^==W< M""  C==X=XXXXXX==IW;K &#Msn"&ٟ^pqogkkjjkmikortMV*nh&& 2Ifllg|eW&&Z ;XmjnrL"ݎscgo#&pq"W=gPslmkrP"]]!Wbcms!ZiysprMgLMpiku#Ztpl]kpkh!1cahioȻ&iZshnkmlt Zhn.gcccht&#j.#P pl#udrttttiehptDttttttttttttttttttttttttttttttDtDDKKKDttussnihcrchtp\iqM]. ]xݔ]Kgskbbgs&jirqk&Lecdjowopngbg{qpooopopopopopopopopopopopoppp6pqoXwpon\qaǵvnmjs pqs{nݢmh!sgDrabhP #mw!jWi"!haasȇulZ,WnjeDcr#Dlhkt%]ZM̂voo1&nhZLdfZ. Zf pohZkabk(Zqm]s!ڇVurlmlqtj*1ceZ"skhnvMqܡr:h "]]"#gccmphtqubfmnu"ڬukhlK ݰ|milpu &ԈgM Ļbm# rimoqpLx%hvoo*Zhn.kaeq, 2elwkj!#hcbrPrimnv#VrmmqP(|mmlpDP&}n 1ap.Zom]r !!!##;q;MnhP*Kgsrachk{I+ܭWkgpttuMsacƒihnK&޻hjkkkkkls̝hilpD&&ve dLvljkkkkolkkklkklklllklmgLvgvooûsgD*LdeoZPuro}{}I+}xsvsl#hccg|imnL&۩PPV+\ivomgo bm"յ*( $--Y,Ym1^u< lh ..nhZ#gcdn&!PMuttqooppppposstZ #qDDcapݺmmoLшkPhmP ýdljikosZ"YvhJhvon*ɱ]j!&]cdhȿ&l!kbbg"Hwmmq"ĀsL0k&P"thku*ςv cnmkotM&J!Dtqpkkklw"jhZhnȿjbbbiuZoĮfddev.&;l&Ơh+k*P&Հnhisѫgtalܴljmkpkikkxqqtu$ .ـh&҄lnlun.&vgs&jbbcis1vrLcs$xh& ,gwZ&s&ڔp+sdMCDv .&ksyhhP*sgDnabbg}W-λtt&pbcq*ׇ $jp+kvopowMkPǠlǩsqk&ڄh!ͪgqdW&Mh&ڃmIo.*nhZpacb{tt*gdcs Mtuuuk tp{xpk&ږqĽqb{&&krۥ,Z!]j".߁bdbbII//-wlbcq&jP Ũqqk tpxrtHh։Zdg& how&Zhnxacaeee}Vodegۨkcbl!j ή;uWPkPt|kqL iq+lddWnpoc( Kgs»cdcbco#tfbac{gcahtj P|k Cn&Ңh Mb},rfkouukhosgK cc ZgccabcbcjLjPŨstPtw"sφtc YW|{gmlP.̞wmt#&nhZjbbeqcbdju# 㰎׎nޟj vc ڇ<|{deglsZ&ufimoZ !j]"qadbxLjqcbcho#,(swgopoppwgnpqtv"+gLWfHԈ ap1wgdbglsZ&.PhMomjt# Zhn&Dcccqm:ݽ&io{WqhurgtnbchL\ZmkPj~sobcaoupXqlȠoxt cf6sZ7"Mhc*.*Тh"V]#**#kac&t>lvgwMmztgqkDtebaot|qXplȠwxsȎaDDuuDuuq7C7DDKtIvsj\fbemwH&*PgLȼܔt»&!]abgIκp'kPimVZX&ngLkP Mhbaoˬ.|sXltpЀP"&#!!&("*.cwuuO:AXuuvsichw]ǣ%]ޯiac\&oֿj;~/pguudbZm"o{"~,!lcbrЦwqXpltittttshopolpuxgfhmbi*ûEW݅lڻ#naach.rmshrjK&&Ygbbi"j~Kgpnbcmsgqpm/pbd&ۥ|tXqluhoww^flsv &^bdccekpqqw]QDsⅠ8Bqqpqqqqqqq|rqiccabf:MgYk ߠl&Ʉ}hcccg3#!l jddMqaeh:^vXplsp!ds&#&&##&ZB Aq,5YBH11100tacfmpH#hhsλmZ.hohcc ~ϺLlXhctpXoqh*ބhj!=DXltpstur έZZZZZZZZ7rbb^tqXp]ajMvKohۅhjJouXqkthgf&έϓrrrA#pPsqM&jZ}nksnբ1I9rqqqq9q69;0999999999-9s¬Ldcltm&va!eaagha\f+ѭCpbc~DX#p#&#&tuahnsKP"&&&# LuuDvMP (.Zwxltn ɛa(Aopqpwpgcah%hK*&rab"jiimmmwDnacڻtXpw|qpqLdcabegm\m\mgeeccceeegmflskux***np666666666666666666r6r6r6666666n8Medbftpl&ȿkbIt]beJtw#1011Peddcbcbcbcddcabeljl&mbPZP P P P PPPPPZZZPPPPPPPPZPZM*bcdeLLM#$gcd&##&&&&&&&&&&###s{&#####&fddd<&#&#&&s{#&&&&&&&##&#.&&&Pfbbhou """"#&&&&&""""""%e@fV#&&"tmjv((%$heg]osttsqoorsttuKLZPZMKsnigeceggh{nwIIIIIIIIgmheccMnfcchrvcegjsM!##"PZP "##&&!Mr]ge<-˩sVL+IIgcJshcekL&&ȢcfmrZ#H:!&H:%&MohfZtLu t/WgceorPh|!&uonfBu#";=XX#;=XXV!C]ffοrmptbh&#t &t*mfcf!soK*ls&ZrqLfkK&;X)??>W(H=)??'%#DjffscePgcus*trslLphvos"PukuP#uot!.ffjK&#')=#<')X:#u]fhpqiLM&ttP&##*&ȿZlΣrqtqsHtqqsqpM&hfjK&')XV#W'?X:#u]qucfPlsvr&# sstsrpnllk]]]iimmikklloprsuql;sqsZuPvlfjK&&<>??'I$;X)?)I#Djfgjt"nrrw-&#! ZZZZZZZZZZZZZZZZZZZZMqǝrqrrrqrsvsglK&$>''=H& X''=;##Kkgecfo%v&,+,,YY ,p읤qrqZrqrpMvˢglD";W4Cs C4>)Xp"Zs*gl#pcf gc4s(stU>3rLqPrȬ},)''r!q>'?$ro#rm,d"su#Mspoolkjmjo*vuGU_%svG>4o"nJʝ}0__3r!r3__r PsJnP&%ts&|(oX'`s*v>[$oPq.qHʧWr%s%qq"cjortvLZP"&Pt#&ZM&&&hqq__s"s*vH_4vttufmY|& pPrrtccccbefh]kopqonllnqtrlM%1Hsqponnnnnnwxests(v:qPwenuvvvv{upjPsttvlvhecehlrvZ!&"i(.xxnpsuLZ!"&&fgvl%""""% 00VH..nocccbg:HpjZmbccccceirL#˝v"uwwH.ftgfffgffgfm1:pjV1le kʮsxwJfcpm{:pjpci".......(*&#*VovtrwpM:uvvvvvvvvvv*hpsfWݰiVqkseJʅ>>>>XI<:$;=X>>>>>XI=W;=WP&ͫx!rvcm.wHqhvYWtLM #&s rnspL"$W='?)>=IX)?)>I;"#"/}MtIqvMtsM vckܛ&; WqvrZ&:I>)4_)XIX')4_)X<$PrsIqvmisuucq#"u&&&&&&tvP&HI'?)'XX')>W"Mx!.tIqvHtcux1&1usuP&HI'?)>=>'?)XL /}tIqvu:ZwPoV̴l. <- v&>)4_'X=')__'=W%ZutIqvsvWxttL"Il^wZuWJuWV#$<='))>IIX'?)>IH rsIqvΛ&ۛPLusI|mh]v#:X>))))))'>IW:<X'))))))'>=<$ q&sIqvZts;w%!%%w%pr :WIXXX>XX=I<%P;WIXX>>XX=I;& q&ڝsIqvqtsskrrt1x*̭-si;H"I)WZ\WokhvMWs#&&"uj0tsvvtmZH)>%=)Zjs !]r<&"Pvvussrrrqrsstvv<rurrLH\Z&=;V=I$M\l"v# +,Yu!tWsPhC"#P !&"sgm&tu___4fvoruLfehns&&ZMnheeeh+4_($&"|svu:e||J,rvouVuvusfH(uHMvvieW/ ,-/-,, ȇYvL*Lil-/ZLveXnvvZ ,mv0+ΞLMPVI'X3v&i:uhksvvv%YVJ%tq*W'vv.<<>''ZLtfrfM"LqmghY[Z'ZuH;HvvJkuM%.Ml(vϪvlZP(Hs(ZvvkfmlqtvLvvvs&uvvvvvneppu0prrmʙrfirZ.up.;h|h:V:v"pZeoie((Πmu$Z(vLrtsrtLqie;&orxkX`:L|Le<:uj~wZJwy>?ZMnwnwnwMiLL"lwkvnvX''':LrprqqrLtV#vHv";*r&H.WWLh&JuwLkrH:oopppoPg&H:stHphHtZZh#tLLvvssustvrx<t*$vvvvvvus#LLHvfgsjgmry*YH.**.**#.ML{H s/J,,tY$<0MMMM.LL#MMMh.tttuv,,,WuYV1(&&vvv(&*YuvHvvH,,,n&%$I'?)=$#&2M!,&PH:vtZW)?X>'; isV0.(us<)?X>?'; PtuM!WI'??)=$#›<:HrnJ&:==I;!$":H.JJ:pP%P:™:rw1HfH$!(y:q:Hf:VV*efp*r>>;==Q/L;Ԑ:0KKKKKKKKNKKNKKKKKKKKKKKKKFKGF;RC0ˮ%$YLEė:$BYeV7Ľ^#^#^'ijA@3DD0IL,&:':$U3KKKKKKKKKNKKKKKKKKKKKN:E3KKKKKFKFF0˯<:_a&*LBX&&)aX6e^X``X_#нDKK00H'WW::g!agKKKKKKKKKKNN0?:NKNNNNNNNKNKKFFFD3ֿ'::%_I::)YY):8ώ:ajg$W'`񃄁ja`_гDNJJ00:^'WKKKKKKKKK+#':$LKNNNKNNKNKKKKKK0D@@IͦWELKE:"a)W盏#ezzzzxj`_#W_ejxzzzxxĭ@NJJJ3:)e罉^#:Vm0000B#_XB6EmLLLLmmmmI333333333C>A¦:%aY$eKK367P:_&%^:ޔ#_ex|ptttp|x#jx|ptttp|xge_гFNJJJNmeB:':_%#$77W'#^#^__H*A=PȨ:窐a)&%_:K6ϐ'Y::(`XX%B?^W盐:xptrrsrrp|x`:`x|tkrsrrtpxܽFKNNJKL$W'_<:ĭw^$W'7W#^''#^#W?(<66B(&X:T#_%$__:W?8_a|trssqssrtze_#^eztrssossrt|xa_ܽ0KKKK0&7Џ$:7#B$?W'::ܰZ'И:?$?:(׌_W$?:盐:(*)Ċ'jzprsohhiostpxa_axptsshchosrpxjX#ܽm3IIЋTW:|%'ۓ#T?'T?(?:DW%mB:W#:'W?:%aLV^`gztrshbbbrsrpx?_jxprohbbbisrtz:罪PEW#:#_7#0KFFKFNL#WY:Ľ-T77R76<<<<677::ϑ@0:'77糗֑𪐌$X$_ztsrhbbbisrtxjXT`jztrscbbbi stz`^ܽ(`(#W܋:':窌5WKK03L$:7:w׳ԫ@X#KT1?7:^#&E':`gznrskbbcqsrpx_lxprsobbcksrtz\%ܽ::WXB#lҰ5ĽC)a3KKI:%=AœT퐆6$W_e)Z:^_jxprsskkyrsk|xa_apyssoiyrsrpx!X#ܽ#%XĊ0X#ijϰ>Ye%0KHW77::ԏӼ:868(:L6'_exzt sssssrpz`#`zprsssssrtze$Wܳ``%zDDDI#wlwllwwwĈA'$&:<9͓?7::W#`aY`x|ntrrrtza`W:azptrrrttzx\`ܽ7(%_KKFIBzzxxx큇φ准|,&'7<ͩ:7:#$e)`jx|pptpzxa`^`jxz|pppzxн6S:OKJKC$w 億億5:X#7::'WB^_`agxxxxe`_`xxx_'ܽW#8AA'#X?:܇ !"""&&&e&&%`%`B`XB`X_B#9W:ѕ#(?j#l`e상je``l^X`a\ja`^WЭ#^'&X'ē)=װwlvL !j"&e&e&&eT&(_#(<œ77Ҫز`:”6::WW^^X`_w_lW^____l^н#e:(=z )+:'::7'6AԹߨ 7ѓ6:#(5슊ww^#ĭ#8W?ґ)(?#_?+а(O=Բ8塆:6<ҢXĽĽ:'77:| ^^T$?:策簓2> 7%7:͸$X:Ľ^Ľ+77::7(V5И$6戕:w6:%:_(#н۪ӽ&z)?޼77BLKK7::3H:7B'7Q:?:S⛖ K%$:7BBK0E:305:7՛6?T&T#W#?l:"$& %$:?(XaK3R'җTW37Ė>֯E#:7?7:7?:B̌ (?8??W$Be%X*3mL767ρ('W$HIP;P:'”78(!.%-$:`5^&X^:B?:'?e:I(lz=*76>԰ǩ7R̋š66z||++#+"(_X$?ϟT$%S'W$::5埭W##ZPI/6,Aɠ<87š8867矼7猛NKKKKKGK9䡏%-! NKK/#<::?5?B5==Pg::7:W'8W_Ez;?<R%&::9O5BHE&573LKKK'6@Ű000K !-+&::#:ϖ7?B:eʸ'567:'#$T$5I/#76(_6j#:62H茵:6KNKN?6=03N !"/"//--$+))+w7':'苛:E짍Ѱ77ԍŽ7W?BW;+#6<^86?66#?:3=?03)+_:0a0 %/-/&, 3333 *!!,////&/----$+! W:И65V(P9767B7_6?BԽ(5:56(?7B$66:_U*((CV)`)ޔ?I0DL-$$$$--///222212211**!!! !!!* *!1*111/"///////-----%%$$$(-e?77?'9?!V܍7WBEZ:1'6:7N$\]fffff]p]zfffffff]\B+ċ%7҉:7#:_TB7W7?B#::#?'^^W##W#W#$?_':ʐBX:('\ioichkioh]:('hoiccyioof'a6Q;֞Ba''/;+-''+,W#:W;ҭ:':W:::$$W'))YY&Ya?_$$_T$a_ڋ7?7:[hiiciciqh]'?{hiiciciio]?獕: :A'5zP##W$K'B#&"l:#%#)B܋;痑#_e)Y($Z*V5<::7<:¢:#BWLL[hiiiihiih]:č?'{ciiiihiihf%X'ċ:9<+I>:^#X%X?:Bx7%LY:W_V'?::7E7X$_*Z*,,EQ5986%$_޽#BW_7(WKffffffff]厳:ďBWffffffff]\(X#׍:=֌7WW'_5mU'=:B7(7?'XE:&a)YEEEQ1EŬ8:<:X&K''1)-玳7Џ<2(+'')%:7奭'W5=AL#X:877:::6BaB&*Z%(<89Eͻ_г'B::(#Wm##1č?'3)%++T9ً:'=<8<ً'::%BaW::7<W'7̋7:7W?$Y*CA<::XH5'::<'Š'9Q6'0K?B#P&?LX'7´B77'#:5׳?65,5:8휍Q7KE=#$%B`WA'Xe`#e)´a59QE5X:WW#W$:_#^'WeEe$W$0:0?:6=X6띏5:X%KHAύ66P5']h~qkqqqqoo~}~~odR*7O$gLE5ѓ5ѻ8堃#5B#?W57'Be&YK5#_Z!B:X=6$ϲ7''X%e_35ԏ6:#B$0KB_''_z 6'W[dddddddddddddddddd]766PP6'?&a)`"mEPYѓYѻ8桳:zQ#::;P#W%%B6‹WT$YmIA(3Q67Ў75'_&&(?g077:7?I=:W_0$#˿԰φه̒686(?7_(&%WICx߻UO:^^:':7(e&X(HlO:)*:5#3:5&ee`BX_?$3:7Q%mV'?67н66?BB&`|000|@B7=퓦`$S$8‹:_P:a)L'&BX%X_$_$?T#^(5?)977Xe*Y$?:җ5:?*:Ɵ#:<679"˖7'_XB˗::O:'#AX()aeWXXX$#::W^^BЍY,/6BLL)_$_#ĉ'WЭW#V5XWAɧ=_R7TE#67?W,ЊE))H##?獰$aPx̄985&IIW#::Ӗ76:BEܐQ8'̐7575˕:997X#P?e'W$$܍)%7ځ58BW?_X?_?܌`*LLLLmILLLLHY&W%__캩|KD@UAHE)T:'^&ܑ_5юޣ9>8ǡĽⓍ:72ѱ ?I?$?'_?%X%`_#?܍Y̓?#^'e$:^+#:X66£0@CCILmIm&B`L*#EZQŲ676:َ<:5,:R_<8O7##71^%#T쌭)_?$X#_?^3L'%B<66<漬$:'77??)^:?_$W'_(:HKK#^#WW$EB0Ie$W#BB?777(YVZa&`$?_#W'W'W#W#::#X5:$W`)$L7B$:X+^:7W:(HKNXEǓ>3:$_a)BB??:#$X%BV)&`a*Y)'W:%N7::X3<7$W):T?Ћ<%79?:'5KN^_76RKwO߰l@7PB(S(mT$?:W:#`:::':?-XENK57YE7U6:FB7630^0L#%A˹7$CDz7V$eY)Xe**)&Y3P_?7Җ:Ŗ?_:W#30#_HֽLK67U7ɇ:F(_%W7^4KX%Y:P7>7P?$_##W_ZY'#W#W#W^=#W:7(Eǒ7P咑BW::W:ZJ+KKB7L7Ɇ:F9?7:'m"?'#_?^%>R?$C6:W&&W$::<YW?猭:UD586:7'_HIA:65`#7:##T:NB:U7̇'1㭺::B^_&WW#?^$$_$_$_$?__$?#?A6%?C 6VYB?6Vԉ?#猭:#$^'ww^)8:L:NW_$<73%7U7Ɇ7Dን:'7:<(:&W:$$W> 6> 6%?E_'BԐ)'W?(67ϖU:'?܌:T7?5卌?:A_$LN#657U6ɇ:FC<⾨_?)'B?#::^:#W#W#W#W#W#W#W'W'WWW#??F RDRXYĽĽĽĽĽĽĽİ'W6a7:ޛĽĽĽĖO#W獰:IT?g8@(`:?BN:I7:F>W?F霪50j^)l^$557::7::7:7:7:7:7:::::::::::::::6D7$D 6$E8??5Q<ҩҢ&")Ww'6/':??A76:܌7eQ:':7:::'&,A7W:7X'>&WK#W?:K(57I7ɇ:@ߊ'mK5N?::E6$W:$?5Ǔ˥:F 8?$W#W#$X(BLIA8X溔V)Z6::??$^X%&,:::$:<W?집?%'INW'&Tኬ9霛ۊ5#W8Қ$V5%#e8?l$K 6V#?Xԭٛ:ȼ:(_:W܌:J>76*:6778-'$:_X0a'BN$?7I6:F=߉:ף7X#R7&X%`:%6Ѷ7E?B???(XX(X(X?X???????:WK 8IxW$Bސ69ы&:$B&X:'TЋ:Y(_??#'W:?^(?ޯ<)_?^%D738ه:F9‹?W':B&XB5(^X=6N#:^#WW'`X)NHE'#w'6 E`%^``7:':?&_6?:$_MT@7KI3͊_섁愁#aWj?`X'AذPM&e&%ZK,x:BBVH'𵩘ڧ5??(W%%$7'7:&X(_?:::(7'ۛT%?ͺWҫ'F鹪қ̪eKN*$?WW3ˆ5Y$::::^W@ L_,:X%:7e͓:6:%X:^%YXW:ό:_#<ҍ:7𳘔'('D:7KD ::7BB5B&<:JN?'B_$'?T#$F :'V::#TX8'5?W&E)'6P5ЪW'::::?'W#W'W#W'e𪋹T%_W^BTɳ7K8|:I+^#::^N:^#:W^@7(B?::'W'W'W'W'W'W'W'W:CK:??::?_B^&W6"BVa$:LNND=::::W'W:W'W罆785:ۉ'T&#B|:0PL^W#:j#^#BKΑ7:QD؛:^l^#^#^#^_jю^^^:569:8ŒY8O2R5WX$::BKKK6Զ6:7BB::e#W#ⶵ:A)Y&:::=Fް:B?ȫ<œ'Y'%*'^7:3Q§1>扌:68:ދ<::TOʼnĽİ#$T#ܳ窕׽ȊЎ簐гИ#?X$^Ѝ'ЌW|Ê76'=0F0DL%_(I3L:7ތ'Ľ>A5<::TBA@=9AK:^)L3;B<7::|5||3:?$ĽИ7BX#?:'_$-۰'CNFK:?_)aK67ܳ=PVE:#?BВL7'WӍ7:Л6??+?v:'kc{7Qɨ' P;HHZ)&%*Ie::.7:׎:8'W##W'^#Wě|7?kn#kdc{:Hxihn+:A678=6;8=5>FI>AퟖY)Pexz|ptktrrrrsrrrrkttppzxxzpptkrrrrrrrrrrrttppzxe:ϭ?TJA7+#X00LL=LKǚO5'W#?(1(K%Y?( 3=8誩:BYLU@3zm'agxzpttrrsssssssssssrrktp|xgz|ptkrrrssssssssssrrktpzx`WNJ3A:T`LK&ƽ0Օ2:36Yzܭ_ejz|pkrssssuuuuuuuusssrktp|xxxxzpprrssusuuuuuuuusssrktpzx糽#MP㝔7_'LHՕ77<8K$?&%:#3C=<eY,;xT?(BB55555('ij`"\x|ptrssuuuuuuuuuuuuussrkppzzxxzptkrssuuuuuuuuuuuussrtt|x`T#İMNAxÎ7^,Օ7Ћ:IAAV9aa`0=5$#?5P–"m7ԓ:'_zptrssuuuuuuuusuussrtppzzzpptrssuuusuusuuussrtpzxje:ܭNJ@ˋ7?$PՕ7?)Q$18LL)&:%0Xŗ66'^W_ejxzptrssuskiiiuusihhsuussrpp|f|ptkrsuusiiiichchsuusskp|x\İ#^M;㝔77(Օ7:ϬYHE$3KP5EB?&E##秳Ж677#ejx|pkssuukcbbchuhbbchsusrrtpp||ptrssusicbbicchbbbhsusrrt|x `ЭmMN>Î7^TՕ75:$a&V(^WK>匤"Q)$%`e:W67:#ejx|prrsusibbbciicbbbhsuusrtp||pptrsuushbbbcrscbbbcsussrt|zaJ@:? 3Օ7Bz%W#5_^aQ)T'#X))(#)a)a)a)a)a)a)a)%6.:Wexztkssusibbbbiuicbbbhsussrtnp|pptrssuscbbbcsicbbbhsuusrn|fgаKM;㝕Օ::8=Q7:W#X?Њ6E$35QEZa^₄ALI33333330穃0F00000C?67'W^ejxzptssuurhcchsukccckuussrtp|f|ptrrsusicbciuuicbchsusskt|xaܳMN>뮏ސΕ7::?9`=Q,$_X&H##ϪIC00000Kz|||||||66W:`\|ptrsuuurhisusokisuusrkpp||zptkssuusioissioisuusrtpzxeܽ6Θ3Օ7)F㜈E$X)a))WV0;ҋEV&Y)WW330KK7ɓ66$#_az|trrssuuuuuuuussrtp|zzz|ptrssuuuuuuuuuuussrtpzje:Ī5OՕ76::>0/ijϰYKԼH?`&$X>匏=_$%``&Z#zD0FFKK0#''6ԓ8C=W`xzptrssuuuuuuuuuuuuussrk|zfxxz|ptrssuuuuuuuuuuuuussqtt|xa`$İP(0ё3Օ75:0x7BH577:KJFECKNL%':`C񦋇1)XWW'::':lϛ0FFFFF3CP5EEEE)EEEEEBO7Oѣ䰭_e\z|ntrosssuuuuuuuussortt|fxm\xzptkrsssuuuuuuuuusssrrppzxje_İXѐՕ7W3Ӈ)$mLNKHYL35Q)^#^W'WW:ĭ||z00000mŌ`xz|ttrrrsshscshsisrrtppzzgxxz|trrrosshshssrsrktppzxga`$аTYёՕ7:l :'(L#Z3==V#W#`*_WW'WWWwl`ajz|pptrkrrrrrrrrtttppzxje\xz|pttrrrrrrrrrrkttp|zxaeWĭ$ѐՕ7:5Ľ^#?`B?;ԋEE:#Y%X%X%X$_#^#'W:'#$ӆĎ6`\xz|ppptttttttptp|zzjee`eexfz|ppppttttttppp||zx\ae_'İQё3Օ7:Ӫ_LV`3U썡1e#`*LZY*LLLLLLLLLAAAP==998986677776R76856ğ5Y>@_exxz||||||p|||zzzxae`__`xz||p|p|p||||zx\`_#WİW;Ք7':%'I3)=)$W#?%#_?##L)a*IC@3D0||ڤ^'_ea\\xxxzxxxxxx\jee__^^__`e\\xxxxxxxxxxxeX'Ī5ȥՕ7ӳӳ:7T&L$X($H3=QE__?:#WLV,PH>AzȘWl`ej\\\\\``__#W##^__`jj\\U\\\\aeX^#W罪W#^NՕ7:557>KT_XV;EE#W%&B_:)&e55=Ax'6:'7^__`eeaaeaaaee_^^^^_`eeaeaaaYae``__^WгP::ē5KՕ7RW)a)e*%$>PWBe3X5j:ďE7W:7'^___X`___##W:___X`_`_?$_^#İx,##WBƽΕ6ܐ#?)aEZXXl3I=$^)#303DY%?͸7:6:6:'ӎe67^'W'^#:##'WW#^#^:#^W'罪LWT#珽Օ7⊐W$Y%%%Wm3E=Y?$`)a)e?LmDL%W`&ӽ'67::ۍ7&нЭP^W$LLՕ7'ϚXEYX0=Q,Xa)Y&`##HIDُ9&0KK)30003XW7:Ӎ&6Eij)#:ܚ$WLՕ7읐?#)Y&_(a)0Aҋ1EY&X?#XLD0㡌7(LK0LaLm::B:ܽаQ$::$WLՕ7)^'$YB0C匣1e)#XBD0㡌:%W&300eL3L$$'68AP7۽н筛;%:'WYemՕ:T_W#V)`^X'3QN0Z&X(X_*D0ߠ`:9:#a*)_ZI3YЍ5ČOűA>옘Ľ#糪B^Ĕ5*&777BTa&%I019:EK*@0ߡ`7B:_)_#?_%:#XZm0DDD3;:>OȥxmߐijW#ĭ':0ό׍ޑEY;&8;ᥗ6BB$'X?尘䇃̋B333D3333CI3330ĒYKD:3ƞQ:CDƏW*m7: :%,!VXW3C䥧1_W%8PI>98<686:%e懇ӽA'7;82;OC):+||7:0I(_?$^0ӏL;׳冐B:^9W'CY'­:3L:%$)VX%3A=5^B$$X'W:&:':B_:::WBڹгm00F0$?_$P:N='_L7'LDǓ*B'?TBY&?$L0>!Q$:YXV#_`&^^:WӼʸ::ܽE__WP'쭳峏:'0l'@|Ye$9WXT`aVY_C9LB&&WXY%:W'''質0zد⪌W'Wĭ:5:W$?#Pӏ:^P:0Ⱥ,F˓#W7쎳#)'?e)Va)%^DH8?7:?7:67Xҹe898ڿ7,1W:#W)I!:?W>X^0,:$:7l6:W0ڶ6W:WY0%:ZEP=; 777:00::<$:^#WmKFʋ5?8?=,W%$_#5Ϗ5픒|:#KQ߃˔0Cˑ#03$)$:@掌EI33mEPA>>Um'S66谚_#T^?< AH*V!&?_W#KKK㊰5Dґč877B?_WWWAEVރN?:^KF͋D:0:'T0$&a)aY)(77?mYB768, ''B586ޛW:$'&Ń9YH0Km0NMMJN8(037??#?7'ג8I#;?'>| :#˥W'F Wa:X&)aa)&<ɣ?'6BūIA;PEX:Y58X7(`B'W&VBȄAU30KLL0JMNJMMMKߋ:T_3K'6'?#W??:ė?I3չߔ:^NIW&3NKCﺴw:W$Y*H:X&)YBWB6DD3LB<6$'?B_$:63D&eNMNJ󿏭_NDޒ7W?'Ę':DNFߕ#0)3JN3=7ͱ6::#*'_)WXB`&%X$獭BC@CIL:#?B?77Ъ:B_X^#|FFFX3JJKߎ#W?HDD7APT:6Ȓ#??:ЛT67:7^?B“'VK>HWZ$#_$$%W^(:&I0&:#?::Ę:0|͢χz|zɍz퇆::Л^7?7'W1W3KL0KFD՝$)ZKI%W#?_?$'#X:W<8:?$T:W$^'XB6B#'ɼܼW:??:ЛҳĽB#mKL˱'FNGaK5NKL'W#WW:?獭7$?ВxÒ_::ܰX$W(<?Ę7'萪'''7B7W'7??:6::^'KJ0CA; xƞ7CFKK:WIKN*#_:Ô'B'Л&#)7:A(W:Ė6#W'ԤRW:?WИ:W(X(_#gLI3D0FKK ƌ_KKw:7aKK)#:7ĥ7T':_$?_Y:ĎX#9ύY':W?&BR:7̋:'7W#W':W''7769>@D@Pܭ^!!NN&6X!3KI%'_?獭?(댓7?$B:#?:$&$5E::ɲ:'NKB600^%`?9W7B(?:E#Be$^珡^X$9='ʕ¬6:NK6$DFKFD;2Eͧ:NKT76ܛ<6$W#T$7>˚6$'e:B^::$aLI00000IL:Z:w:AB:7:'^?$?%X%&LU==Ej弚N͎_NK:3P:ė6633333ImImL:%3Ɩ'):'$&6ĎW$7)0000033333335>D5:#BHA=񼐌:W:XYZHB&Q59E:6FNNNH31&6::::TBBB5??W苼T`^`)`#eR$WxFFKF00033333L9:܋:)HAP嚍:&T:5HP87:NKBH6eЏB(%)#!(7#T`0FD0D0D33333IICICImx¦^6W)7PL>Ҧ^*HŒ(7ܛNN6:0K0*7窑H۪?%YE&5:??W(||||||'۳||^:#m&67VEX:W&gNNȰ`LLCPl۽xx?՛䤳'_`#Y:#5瓋X77:lϰ''W60KKL=5':W73F0;/F::IP:*$z:*!NN7EHPEHHUI@I=8CD9O;E*Lŋ8͋X%%)e8Ď#'aEW6:)|W'6*x:L=OꝖ:#NN30KFD@L氘Ͻ8'977B57$B%E'7@ɰϋ:$%%E:#X^:&L53DD03ImI3U:Lm09W^K3ƽ8ע36ő6۲18K|!N8&#`!0KDP865BB5(X?'#WW)A=˓BB#?X&Y%5^#';|0FFFF0IH:am3?3DBא0'츿'PDzNA%`X$X&':A륳?$Y`$W:_6ĎB?W)C|00m69LICPW$$UN5*ɚ:W:ԋKNDN(`&%_5ԋ5678%Y?#W#6:$W$$aV&#570D>7X:L$%mNL຺ڳ::H<:#0NFN8LW$T?E567杖77am3&_:$'^57?^E˴73L_^3Bʇ0:>ًW?!KFǰ_N=Y3#_$_()PA>AmxҖ<:?g_$#_W)W?$$XY*0=XL^* W'7)KJ7#(#?X&BYEPA;Aʸų59CA:Em_?_?#'%5'_#?X)a%:LVAa'?WE&?8:6'7O@@'Wŧ:>ʎB:0M5WmEEPP=P ʣ:655)3C6(WeRĎ:?$#_%`&aX:=KW$Hx:ڵ«>ꋪ96:<#*N:5BL5589W.B^^<9:&&XW##E6:BXY)aY%:`'$5!̊6'1֩8Dz͚mF'8^&LJ:7?:':Rũ7B5&'W(B$TF5И?&$W:'A(YY`#%:NDw'e70=987'76<51Q8666::(3C៛6$*ZNTZNW5ŧW7B5?X%_^:0A?:B:'И'BW&a)`X67K0F7BNI8:'W::::'W':LMY:655($%^#XT335И7:7>BH7'5ܞD9T8Eڌ:#%弲#XK365EE(WY(_:#:')aLA?:Va)a79Y^N`W#W@8KKAjWژ龑㾎W$$LmmgN$81P5X?#X?ЌYa)00Ae:?aaEa&79%N0$#WBZN0;7V:=;ؘD9ߕ9PAZ%)X^'W79:?#YV$I:ٟ6&Y%(`a&W_78獪8L__$#W܌::N3Pٮ:#E*0K1˛> 5ߔ'н'^L9=L3$?BB?:7':':$ĽŬ5)a:<:?%e&_B&Y)B'8K#N%`(_#a6&JN>*͋7:^Z0; 7WܪLN1PHZEU=U=6AY%T`))aE$`?璌:_W#%X(`aa(#U:N0X:+*NJA:L; :7Л:)L6AUAAA==A>mmֵz3@16>-==L)ZHY?D` :1":LN777<785?&?X'$#'+mD7`%#BWB?YaX#`':ZT%::$%B%LNMK>^5; :9:&N558777:7733LWW?$$W_&F7((BW&``W( M?ٍP:̖6AWX&JM;븋:=; ::J_L:77?(B`Y?KB7X<:B#X&)))(?;79NA3>⍠?D7W%&eMJDA䞎7; :WWPAE5C*N•'T)&$?$L0<6<ď7BaB)Y'1'PNmО<NA$B?%ee)NM3Lɕ; :#^lw'WX!NWW:667$a凛:'T:__?$Y:LPמ7`B&))&TPP7' @m3UOK=5XMU6֫; 7'WL5PID0CC>޽:::<B$#:&YY$e)_X+>KQČO97FčDċI7X%Y)K=ʬ> :ӽz럖˴LNӽ`??< :Ȕ;˗<KK0`Iث87:_W_%aEB?777:ćڶ9?'E?^<JN0& J㚋86C78=K)Tʬ; 7ŔW)<:Z&`&K:WBE'=Pו:,K0EŇE66??)(BX5?39ɋ6IW%Y&$:%?АMMK3X G88 KA9A#%B)ʬ; :7?$<:'WX(#:*̛ܒ>0X`aa!P; :W:9:WĽ_?`ɼÇQ"BȺȲك1QEE%W#_&?6Y3WW_'W?_#W:A׍JFI0MB7ȸUЮ0Lđ#?%)Y'2; 7ȶe'$5555559TH5xE5EeLHHP3NHܒQ=EB&YY)6LH##$&Y)!a&X#'::/J3#CďKMBIDz6Xe)#V>; 7?KJ=Һ7)>֐E98BH:BC'W'W#_YaE&_::643YܮPĐJLK D15#%aX?PF; :78O86W@J:7?L0N'l &=P 0&񃃃 :86?X&*?Ћ׋ ×I_$_)a,_$_:'4VJ9 M#0KLF#mXWX%)$A럏8D; :LBImImm3KN=ʑ:ޣA|ԆɃB6:X$:`Y>:%(X&Ya!::'؁NWĽN8 4K*W_:N:ĽĽWA$$X&Ye:EAK׽K8 4KZ*0G6A=#W?X%%$P6#K'O :6:`LmImLL0J:H'":::::777776>@;φOKE>W&a(X::▍QPKIĉx6 4#:J K6DW'_$B;럏6:; :6ImLLL£=Ǹ»:Hģ´>¹ᩉ73'>ҍ))(`'7۬::'KLm 4W K95W@8W^#E>ы5<^_; 7ũ1K)ImImLLmNM O:HD||5<PALLm+:7ϩ:?`:KIĭP 4F GGګW5 GHД3##?P1?'O<є:mILLLLK4 P둰:HE猕ġN՗:@ڏ67 :1C檤:%`BKU滛 404KmC'ZE>ыP5'$0;5ߕ:03LL3mmmLL0J7O;OOOO'ZOOOODOOO2OOOOOO;@OY6ߋ1?ثTEEE=Q<Lĉ:MF 4F` ;8ĐAK##PL=(&'> EImmILLLL0M=¹:PĤ¹š¹š¹Eܑة8=B::767:77676=Ha67+675ūLĊKUJ0ZĊ4 @J!ܚٛ͟3:'^'?AퟎQW%B``0@ 5ߓ'&ImLImmmILLLL3J*:*@||z?6:Ǜ8##:5lLĊܪұF#J0Ċ J GLPLW:?RPE#:(B@ <͓^)mLLLmmImILLLGĚ=沛:HFχ5:ɑ::,ϪL81CL窊3G0G JKK5<3'谧;BWX@ (œ#aILmmILmmLLLLL3N;䣕:HģHج'57ЋV00I03ACA89Q载3>CI)E=AFG0G0 JKZI8#W#$?@ ?ŒWmLLLLmLLLLL ZK*g.666689:H29O=O=Oڛ@O;=;=;=@>667:?:5HIIIH=66ĒKȞ:m67#YX(_#$)W#X&H`FĉFK0,G0 4KЫK::T?^'#W###^:#BDՓBœWmLLLLLLLLZ0C@ߐ90퐕F̺̺ɗ6>3WW$`Y)W:YH׊FKK 4KܬK:>>@O662%7苪:IILImLH*B`__1Dď0VD3mZEFʫKE7_$$$$$$%(X,WŹт K67<':^'?@??`VC::lK<W$7??Ҫ(5llH?#$糊8@wwԍ¹Җ؀Ǟ)LLL޳нԕLHP58KKKKKKKKKKKKKE0|L))6ww&"`ԓzNK0ma&eKKKKK)NNNNKKF0zʸYmLԍʽ`zp|x&zp|xKJJKm—6HHHAٕ6|rort`|rsrtxzKKNKI&Ī¡Lҫ׺&wtscir|&tschr|Hš|H3I•xkibhr|etsbhrpa66I«P%²Ѻnsrrr`pssrrz&ĺ`۳Ԁ)6¹`xpttz`ptt|ĺLxx66͚š°ȥ`☏E8x !!"&&&&"%ҰІŶ%ҹཇԪ԰԰wוԲE¹E喫ӰςI3Lšжx6&`䓹ԹǞނ68Y)&ه6KKNH֪ށԫГw(¼Ҽ0V3  !&-6)"¹6¼)E3(-/8825)))))))5/---(!366¼tNL%3NNNN%%LҶ(ffff›xfffN44JN%VNNK03wwwwwww"wĹ%66iioiiisoiiԗLNNN%6%KNNNKKު!m僃%vffffĹxffffה6Eihrciiirci6%KKKKm3ILHH))%dhoohnkhoohvҶ56khyorkhskކ׋wKLVe׺pcqhc{dcqhc\­)Ykihirrihikך%a0LwҘnhyqonޖkhyqo\w6E˄pdtddȽddtdpEϹ%wpihis{ricio\ϕ&8L)זԆחw6YLfddddtddddj5)Ya6ӳ`E&VVVҶ*6)6"P)̑Ҟ6)ԥj̄&6σͼȇ`􁐇"6)LmImLP%)E66%"쐇􁐰)Y%L56"""e&&Ҷ°ټ&%ı&Z6)􄐰V&̛ɺٺɹɬ8a6)􄐰ҥҺ]kkkkkkkkd)Yś(`60Zw&khccho~hkɹ66&%)6660*thhbcciiikޗ%ѹ`6&)&thhqyhck6ˣ))6&՞&6khqqkhrhkVH6%О6)חLՋ6)3mkhqokbckE%a&̿!&6I&L0KKKrh}icbciik6)8š6ֶ6w`E!LEthbbcooock%҇ۗ300%̪—66LH!׺IxdkkkktkkkdEѪٹҪދ"6&̔6LԞH)6&6PͶȗ㩢%`֚wګY66!%)ѹҪ6ٰL)ځҕEԿ–͚"`)))&UH)EҩEҼHͽ)w)6ʖw3ҩ׶I3ҩ&)%£)6ު͢׶ҩ5ڡ6ѡ%KLK҇%wޭҰטPKژ`6%w)%׶666%` K%)w׶66V*Kφזἆ%߳6)e&׶%ԆE!KHϪU҇KטٛLILۛ%|׶ŎjŲ%5L6ϪL|w|›Ҽ«www&6Yx۽ ۽P%I0ϪLÓ&6 ̼p65a͇%Yͪ%&(&3VϪL35`䔹&Ś&(U663%LŇ%%wٛI԰V ԗš̺E`Қ6%Nw)w3mYL0롫޽5K6p뿶a%aV5 ˌ%5%6쪹ҹ6¹`ʭ6&߱э쏚֡6&%wj¡www&&&&!ҰҚwޚޗ•ϑԛ||")•КE650٩VVY%⽹йưtiIF6횎30Lۖw¹&ee`eeeޚH6kptivv%&6İٓ퓓zRxxxx&`xxxx&װ̛j"iҘ6%A x|pppnpp|za`&x|pppnpp|zewۼ63ֹLٗImૌUIz•xptrrrsrrkt|ptrrrrrrktz&LK뿽m3ٰL&UL횢EHȺ6666|tsuuuuuusrt|xxpksuuuuuusrtz!NVILmٛ̚ϼԆxnrushushusrpz|trussuuhusr|ֹ6ԟ)̕E)aztsuhbhucbhurn|pksucbhcbhurp&K俽&ԯ`&Ia!HLIIԭatsuhbhucbsurt|pksucbhucbhurp&NҺ3000Țxpruuhussuskpz|tsussususk|`HҖ俘%w|0FDH8ȃ|tsuuuuuusrtzxx|ksuuuuuusrnzj6ꕼ3K)Ѣ|trrsisrkpz!x|trrssrrkpzҰ)`%EE)866޽6Paz|ppppp|xe``xz|ppppp|xgeV¶풃6HZAmvȡȢŐeja`&gmg`Ҫ&LYŶ6we`wЪ53&)Y")L5)3̪җ¹%ԟYI53䐗)L33I3š)Eު8²wYaI"3ILIHPϚEڕҰ&jxE3LH6|ڢwφӆ)Y )!ҼEY)LV(66L|!g&!)L3YœҪwUI3336*LږŶ!ذaV!%6ɖ)H6Eہ|ԆLLLxz3)LmEV6ԛ|)m3Ҽ|%VL뿃ɲٟ߬)Җđ6іҶIL)6HEEVg¹LV)3ە55|z)揖%E&66–)KKJM3׭ʆv%I0H60R&LH)¶FIKJNЗwIjIw%ҹ¼%xહԚ0I0p&0)–%6זԪԶ旼LIxK3ṗ—並wԫ)Խx&NŭL6ɓ)ӺwҼҪKEVHH†a%L0003ILLVVšNNL3햕6%ټ!`|0033ȗԛʚV횬)ѫNLɗ߸!͚š)6ϪԼ٫IN–E gѐ&)&L3ŪªNH3㹹ɪ&œ6a6%)тH%EL6HzNELL66%6)%)H|00m6mIH"3N%)LL6Y)H3"֖ڹ섫N5E֫6LA)ŰzPNY)EEʸ66E•)6並)g̹«%K|ʣ66)mm“ҭL6686)3666%wLҕ0냐63䓆֑L3a56I)Y&&)K3>w"P)V)ۆ)`L`KxʶҢ­ªEL͹ŶVA6Y%&)6,KK|١š̪&H)6L%&`޳۩ѼLN0ѫ8ꓰ)ŗɪ`&I)3߶%0Nʶ|6ENªx63퓓)))w)ĎH؂LVޏ)jKL͖꓆ָ콆&ILA*ԼҪ(⒎0|VFL `Ҫȇ&&E&t擞z %%¶)Y%I,ګE%%jY)NjE¹ꓰқԽŌс!ч8E؛H&ڮIAϥ6YV|3Խ‡z冥a)ޖʎN0J)LI&6C|ғmImN"Ԫ|g)%Ӛ0wIK3ȋ%8L|ҡZImLK ؂" E*ץ0E06&6E6˜mIL0tֆ"|ߴ쪚x⪫غN3ڹҰ66ImmL3٭5ҪҪ̛Ew)NL@L%IImmLL"z͖җw0K&L5ԼLLmmLLINȪ̭"6HAPHxAV13KLKEEzȖԛLLLLLLѹ‡|ʺԶaaEԼLLLLEz뇂ҎUw0LK6Ҫ|aҪҪ"E`V`&!wwwwH@@嚞!ɰҶ׽ӺٹƋ)&ԣxx`NEҪ`33͇ҪҪkip`zir&g̗٘ҶEȌrht`|hixۣ޳Ҙ͚ɚx||z`māx"̺̋wij׳w޹Ъ|"ٔҪwԑ6aȪҺŪҼҪ쪪g!m "( ﰪ҄v\٪\vҥ0҆wwv\몰\iittihI3ɍNKLmiiiiodiiyniiť¢kikiinffvffwffv|fxѭﰰҼwٛҼ›LLŇԪŰԪmŇfiikkf̚)6wLŇ%zihoh|֪ɐكm|oqkh|⪪)Ǫphchi|3¹ٹvn{{{v&Сw̳!))w尔Ϟwڃ"ύ붭̪ח)L%ҼɺZw&6%)x϶فm ԰"6ٶ3xx!"ҼҪ%훼༪xx6䶶!wԶѶԳxg6Ȫ)ښ¼Қ6%԰wҹ&ʹŐХԺԘശҶӶw͆ªԳ&ʍgԚ```wx|p|6Eѣ||z`&|||xL{&)ڿ)gԪa|rssstxzksssrz&0֪xEҗrhcuhspnshucut֪&3ruuuhsppshuhutzֺӇ|ђ|rsssnxtsssrz֪HmEԪńaxz|z`&z|zeުֺԭ6mԆ԰Ԛ````⼇֪6Lªĺͪ &ڿwϚ̃Һ)j๮zżaV&Ԫ¥۪j)!ԭԪ)!LmKEwсm&쪪ҥmڇ䪇Ԃ &ڂ׭ԪԗҘڶ!))ѹ)L҃Ūϭ凇gۥvzzҘ)Ҫٹ))뇗0)6jw҄|0"&Л׃چ0ªg䪆6L̄ٺLm0ل)Ԫ))g&ߪ)԰)׼暃&ߪ&0԰뼪)Һ߁ڗ3zߛڪ0,ɍٖߪH)ڇ6ًLꆶɱɪѪ&ڥp|v̶ߪI0ٖҪwp&ߪL ҹ̶IٛwmmLLڗ٢ټ&V)||0 ֪LLԇª"6E&&&@@L@僟ׁӏxԺ|riفԪwڶٰ԰Ԫ԰ٞ "& vnpvnkiԺԐ3"!"ŸzntxԹ›&凭&ٸҪԋު࿪wtitªmkid*`Ԫ曪ϽϪԃ"ӛ%샳ϳ&w&Ӫ"ט島ԍѸڃ嶰ТvڃҪفttxztt%Ёpuutruu|%فttxztt&")歇ʞهઍතԄӳۚʄҰxԚԇIȃ퍆)ઇmԇ׆&Ň҇Хwԑ3̾䬞L҆ˇс̄ڂ٪&假! M@ȹ|zԇvm!&Ԑvѿ૩ԆwŪ|k›⪇̃Ԗުׇ҆켼Ԇ̂xxttkpڇԚσaʄԆ틇뇚ȇѪLن&ٺ尥3N@vɇ||ʹ‡RN䆪eNuNQtDCCB?0AAPC_tE q'ltO7{7qltw9rNFqwE Fw&G ?PrnӦzqwz ywy qqԎ..Ž4@QFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IG??F   "!%(',+0133779;<<?AA@FFEEKKLL))## \\[^_``M  ZX//mnmoo;G,-wxyzx0m//  IO7555^xx11zv.0BD ln0clw0rlqq;<z>qr0SQx=={2;>zwxo{'&75.WY|]m78x54ilzzFy|UV%W[a$nop`\~"(8*:_UUVVby+7^^ pLvzmgc/m+a("xq0/1 ^b $c)%&[}+ggYlk>l36#"%%U$0=U  C`+U hT!67Ri6hXYFF D CECWEDCBE h4Y&&Xg%B@63@S?6*``I.Y3g5/B3fHfL/8*8ZzS)@GwEGvv|<JH^_W"!";<?KKIuIu^>O'IQ?1{ss=_^ 22q1W"z( #'!\|* ff[ ji5j 14)(++S*/5T>ab.,S&~R'99:;Pe :dZ[  =>wV//wv.~20X--lrrAjA92mlt4>r$ooJskA}BFutuKys7#$b{Z}MCy]]z7<:PNcdV  9 :<QQOeOec;pN~(JoDaqxx~:,-nnm pVb #a#b(($%$bbWZZVVVf|%*f|ffXXXXkkj54Xk 2f=54$""T $$ !#$!T$#/$T"$/fVr4T  QB_[_[_T*S#*TS*  g gTS/ hgh333Q63Q56Qh4gV65445gkWkjW*VgC   E EDB  C    B^BD^ gBD?BAV@CDDCACABB??@D@gg g32XWXWW%%WWAf$%A12?522Af5A2??22R%%>5<5=<<= ))^__11_RfHHH-XX$%2fRfxG4YA22xexF~GeFGeGx)K.wK)77))777AYY.uvR((R00R(?00wyuyvuvD>wFwuFFu~u~eFe.6w6yw5>4r;HJHt[]][]^]^\1V&!;:!! ! ;;:;!!:;>=EIEJEFJHJFtFGHFtGItG]=\H~NN&~~NHP>01>>zzz rDrDr0~< \]^_^]^]P_P_]P  110p0p00VV00~!y''"& "yy[Y [UUeU{&) e{ e eZ  Z ZiZ h i34i Z 0e3=4(*  (S*&'&*'*))*RR*..*(eU4wS=%OB__a-a_Q+RR+)+Q%%}}.QR%&dcd999O9:O:7O8dcU 7:878cYiYhi)U c=C==E Ev  <=C=<BcDBc cv.-vuU+,.++.-v-.uv,u,}}}10/XqX,qq,,kk/qq@@ik/@?8@@@8??,kkj3;s=3s=s #ap#prmnn/n/@InIInnoX-,Xkij@@sz|YAEEztz\s\tsstzoJ#x.|"#Jq66"#"#roqqaYA.Y|Lll?ll{xL{LB;x|\x\\|t\|t6.x{6x3;w49PNdNababbc`cbU'989899 98;:OLPLKLPPNKMKddKNOMMdb:`mIM}M'}}MImmCm``r`rorrppwBwBw}9`b+m,+mnlmlCnClnCooUU})F   !"#!&'()'+,-+/01134537879<=<?@AAC@EFGFEEKLMKLLQ)S#WY [\]\_`ab`M  ZX/mnopqo;Gu-wxyxyzxm/  IO55^x1zv.0BD ln0cw0rlqq; <z> qr0SQx=={8:<2;>zwxo{'&75.WY|]^m78x54ijlmzzFy|UV%W[a$nop`\~     / !#+,-("01234q9:;<=>0/1 ^F .nSxp p ˬ۾ܭվԭ t½̺E !>"z#F$C%;&v'D()<*>+q,d-q.m /?0M1T2M3st4uU5{s6us7Ds8KU9Ls:Js;փ<ӈ=҆>։?R@RA^BZ C^DVE=F>GHHAIIJ@KVLXMMNTOKPTQ!R7SaTJUV¶WXܺYZ[P\~]l^w_=`~aPblcwdOef̮gshijklFm6n;o8p6q?r7sӄtFudvmwx yz{|} ~%^Y\]]V8??]ce{lӏ䭐ܫՒFO`<`I_`uƙ %03*tԺF [\SUڗ/ii TWV Zսԫ?= *(+  !J[tsڝB? Y  !M9;"3# -F[ 3; .:;؄  f e l цy_erC؉UY#էܝ !"<#9$!% &2'(Q)\*j+,-./0(1&23Ӆ4ކ5ӈ67[8׍9ܗ:;<r=s>c?J@CABڂC:DڊEF"G$HZI:J9K\LMN3OC~PYQ|~RQS}T[U V)WXYZ[\]X^Q_T`1a8bcESdOTe!fPg{ThqTijkl;mBn?op'qrމstu!v!wބxyzd{|Ų}~0@Ѐ@__%V>_2:[1b:pp^:%^!!W>_u>v""9bb6oϠڢϣڥ~Ϧ7}4Љhζɷ'O?W'F';) ?}=ɋɈCpqhg 8 7|A$9.=8_6UG5@4D0;<YTNRÎll1%l>}Oe8OVF:CO [8    dkJ !"#$%"&<"'()*+D,@-C./e0ǫ1ǧ234"5M6?7V8F9:~;~<=~>~?J@CAPB[ClDwElF6?? >[B :KBl?l?lBl?,Iv!  Jql[@ktRYM@3d3WDCCB?0AAPCtE q'ltO7{7qltw9rNFqwE Fw&G ?PrnӦzqwz ywy qqԎ..Ž4@QFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IGQFOY O?O \?>F~\v@(P@>X>EzXQ_z:^ ^Ϲ X:9^ׅ ^ X+:+;.6z E o|86haW|xOA6HAaXww.l†6Y ЀϨ@@P@xX9>EF Y РY @l?@@PO|8?y?|xuu:ww6uκuW@W@VV@&G A9|xy??|8/yžy O GPO?^ׅ F~ƅ ^ Ӧz> AE_FQ_FX??E_zQzuuֆNnX>>6{)ѿ?р0 O W  YP@ Fy9^  ^Ϲ  Y W q@?X @rNrnq'G>E)'X O x ƺƺ.yq)>q)xр㈀( ?a|PP@p@?@Ѐ@X@ (AW {S {S ЀШO @ y?9Y 7{Ex OP P@  а pP0YP (mSDž m?S a|@OP@ O@ P@@J@ЀпРY p@?JX ??@ P Pؿ A@qmd@O m?d<O O@ ؀ ȿ` @@@Y  qȿNnp@?e@:epP ؿ؀O??@|x|8?@JJ?7{VWE6{Ef~g~VBWBa {9a?7{\'u\K<9IG??F   "!%(',+0133779;<<?AA@FFEEKKLL))## \\[^_``M  ZX//mnmoo;G,-wxyzx0m//  IO7555^xx11zv.0BD ln0clw0rlqq;<z>qr0SQx=={2;>zwxo{'&75.WY|]m78x54ilzzFy|UV%W[a$nop`\~"(8*:_UUVVby+7^^ pLvzmgc/m+a("xq0/1 ^b $c)%&[}+ggYlk>l36#"%%U$0=U  C`+U hT!67Ri6hXYFF D CECWEDCBE h4Y&&Xg%B@63@S?6*``I.Y3g5/B3fHfL/8*8ZzS)@GwEGvv|<JH^_W"!";<?KKIuIu^>O'IQ?1{ss=_^ 22q1W"z( #'!\|* ff[ ji5j 14)(++S*/5T>ab.,S&~R'99:;Pe :dZ[  =>wV//wv.~20X--lrrAjA92mlt4>r$ooJskA}BFutuKys7#$b{Z}MCy]]z7<:PNcdV  9 :<QQOeOec;pN~(JoDaqxx~:,-nnm pVb #a#b(($%$bbWZZVVVf|%*f|ffXXXXkkj54Xk 2f=54$""T $$ !#$!T$#/$T"$/fVr4T  QB_[_[_T*S#*TS*  g gTS/ hgh333Q63Q56Qh4gV65445gkWkjW*VgC   E EDB  C    B^BD^ gBD?BAV@CDDCACABB??@D@gg g32XWXWW%%WWAf$%A12?522Af5A2??22R%%>5<5=<<= ))^__11_RfHHH-XX$%2fRfxG4YA22xexF~GeFGeGx)K.wK)77))777AYY.uvR((R00R(?00wyuyvuvD>wFwuFFu~u~eFe.6w6yw5>4r;HJHt[]][]^]^\1V&!;:!! ! ;;:;!!:;>=EIEJEFJHJFtFGHFtGItG]=\H~NN&~~NHP>01>>zzz rDrDr0~< \]^_^]^]P_P_]P  110p0p00VV00~!y''"& "yy[Y [UUeU{&) e{ e eZ  Z ZiZ h i34i Z 0e3=4(*  (S*&'&*'*))*RR*..*(eU4wS=%OB__a-a_Q+RR+)+Q%%}}.QR%&dcd999O9:O:7O8dcU 7:878cYiYhi)U c=C==E Ev  <=C=<BcDBc cv.-vuU+,.++.-v-.uv,u,}}}10/XqX,qq,,kk/qq@@ik/@?8@@@8??,kkj3;s=3s=s #ap#prmnn/n/@InIInnoX-,Xkij@@sz|YAEEztz\s\tsstzoJ#x.|"#Jq66"#"#roqqaYA.Y|Lll?ll{xL{LB;x|\x\\|t\|t6.x{6x3;w49PNdNababbc`cbU'989899 98;:OLPLKLPPNKMKddKNOMMdb:`mIM}M'}}MImmCm``r`rorrppwBwBw}9`b+m,+mnlmlCnClnCooUU})F   !"#!&'()'+,-+/01134537879<=<?@AAC@EFGFEEKLMKLLQ)S#WY [\]\_`ab`M  ZX/mnopqo;Gu-wxyxyzxm/  IO55^x1zv.0BD ln0cw0rlqq; <z> qr0SQx=={8:<2;>zwxo{'&75.WY|]^m78x54ijlmzzFy|UV%W[a$nop`\~     / !#+,-("01234q9:;<=>0/1 ^F .nSxp p ˬ۾ܭվԭ t½̺E !>"z#F$C%;&v'D()<*>+q,d-q.m /?0M1T2M3st4uU5{s6us7Ds8KU9Ls:Js;փ<ӈ=҆>։?R@RA^BZ C^DVE=F>GHHAIIJ@KVLXMMNTOKPTQ!R7SaTJUV¶WXܺYZ[P\~]l^w_=`~aPblcwdOef̮gshijklFm6n;o8p6q?r7sӄtFudvmwx yz{|} ~%^Y\]]V8??]ce{lӏ䭐ܫՒFO`<`I_`uƙ %03*tԺF [\SUڗ/ii TWV Zսԫ?= *(+  !J[tsڝB? Y  !M9;"3# -F[ 3; .:;؄  f e l цy_erC؉UY#էܝ !"<#9$!% &2'(Q)\*j+,-./0(1&23Ӆ4ކ5ӈ67[8׍9ܗ:;<r=s>c?J@CABڂC:DڊEF"G$HZI:J9K\LMN3OC~PYQ|~RQS}T[U V)WXYZ[\]X^Q_T`1a8bcESdOTe!fPg{ThqTijkl;mBn?op'qrމstu!v!wބxyzd{|Ų}~0@Ѐ@__%V>_2:[1b:pp^:%^!!W>_u>v""9bb6oϠڢϣڥ~Ϧ7}4Љhζɷ'O?W'F';) ?}=ɋɈCpqhg 8 7|A$9.=8_6UG5@4D0;<YTNRÎll1%l>}Oe8OVF:CO [8    dkJ !"#$%"&<"'()*+D,@-C./e0ǫ1ǧ234"5M6?7V8F9:~;~<=~>~?J@CAPB[ClDwElF6?? >PZ \zJr@Rj<o \@YC@TZq` YB Sj wJ6jw@-('".lv!u 0 wO@2_ gX jX@2ɸ| .pppppp~$L=$>c$C^VIuaA~\sQg Dwj@@R H6@ռI J "k"Ium@L,FD~seu AyMnsV~q b@w_]@#^@#]#|j{h #^ o@#tqQF~aH@n mogfup V% ::$NC<wQ*QQC<QQ-k Q@? r~AQMD \ xZ+DzA+fb@Ru W fQsR@,T@d @,2e cORO2ɸ| .L H$A$L? $ff>c$>\K@O^@q[]ӯ+[_|qmrn B^QzV-Q`i F RB98|s RoPsM[N{wg ?C&L?;F K tIj }N ^ I OTEdJ) b -T z[_}D-G -G (1+:u:$g1nB-[-G ' j-s: L  -/4- ^ _- -Z B-~ -D!N !!-$ -Rw -4?IQ --b(N 333?V DV?G@?d?,(Dc?@@-$-6 `!Q-?@--$-$ -R-b(N v pNOT FOR PUBLIC RELEASE. AUTHORIZED USE ONLY.  -x -av k DA DQ?,k Dc?,?, v -i VADV?G,?dDc?@?`fDV?G,?dDc?@-!E eI eH e_ e^w _* _'%-h C eUDV?G@Dc?@}XDV?G,?dDc?,w* s- b, 42...a @*"(&-o-Caq!G f]O K@d b(b(!{2]t, %' b(! ]oxd-w 'Gou IiOp##zi&s''s ] yX>Zw-A-y -mq!euS::$E-A[P>uj-A$u _|T $.aTESTYt t  sgrbH/a0 g},0 10/a0 q!<>},0 10}& tAf1 u%u6YP *wA*/A a1 V q:V :$ u6YP V uu,10 br |K- -q s@Y@W@-q 'YsWsYWYsW??C<YrY?%a ]uwPFAFire.begin:.%:.% :u:$:u:$ Mv M%ypppppFAFire:fireLoop: fire loop: burstCount: SM bFire/Alt: R./R.,M "-:u:$::$i::$W::$X=6uj\&^AdapB?YMaw(FAFire:fireLoop: burst wait over-Q'a-::$t4q!6 I 8txfe`a-t @DaG::$KKtNq!6 Pzz>@d!w* >z H~>#-Qq!8>~!( Jk-*B?kb? mVA^?%^?::$ AR e i aV  ?%A?e wi *i "%ZAR e ^ PT R Ir*aH % xTGx_x( 2U!s_ p]n2ɸ| .v$?dd$@1$AUJ !JO ZD+s SD JE !EV `H}`W]D?H WQclaQZ cwk4CQwb Q NxQ(p+)ppfire2( Qx))"N-Aq!DUq!b-'-'- ?%. r-X\&-AO-O-#- wD*-Ang\&)t Szz]L-R-zw*a/!\* U mM cM *FAhandleInv(): Switching weapon back, but current is not a null.JM rm*m_m Vmc R~^ ,-#w~*@aC-Z' Q_~A::_p \c{ tc? DBUN #J5f AwUf@iHwUf t]j]w4*w4*]4w]*]a/! r]4]w]*r]]]]] v V/v X B#?-wv * AUq 9:U.- AF p !'<kiw.F *z%^z,2Tz.F L =z zF  XiQ 9-L 1a/!DeO"Lw*<Twqr.w< FJ Q Ir*aW % S JGS mS ( qH_[KmH?,-' "-(666666?,d \G R ;G a/!G::$.::$ G L a wL VG L E  BQ g"5w*Q Q  7zC (-OdMeg-LUC gL?;L?g ?C&yJOJOJOJo C JOJo C  aD eL -w (>-\D a/!. D wD  _H }G4 @ O A  v/ a8 H ;E 'nWH @ O A 10/ a8 I ;E 'WI @ O A 10 [o m Bpppppp(p=S6o  y=S6o  r=S6o ) ] wU 9>\Tw.*U .:U s ]  pI ^II 6I 6yj=I 6xj6=6=6jj6jj6=6=6jj6jj6=6=6jj6jj&precoil:  A= g@ ;B@w5*a+a<uD@\?6 }W eaWAr*,-O*%T *W U eW  Mk<Za/!P Ea Z+EE::$::$ -a wa *a a/!80::$ a  -i$$ NS AA7&S a/!PS 5S  Gv|SG Hv5i~T aT \v@@L>L?-crv5--c-K '@r{q!wa??\ #<'$pppppsetBot(): brain set for: $  skill: $ Q\ launch node: $ T  Why*=;Z Q sL{KhZ  eymg::$ -R-RMa/!r Rf-RaNsaw*z(:y ; wy*w.y*.y-'E$ ''$  DN qD T%PN D f-::$Sa E wS*S>>SJD  K} ct.::$::W\ .w\ *=?===6Gj} }[AW'|a/!8[] ?6 ?6Y g ?6[ o]  og ~[6~6Y D] @6~Dg @~ DKs`8sP6--i:-[vKM-['vX-[(Qx f '-[--[ v??vr Q`{r x {@{r f {@{'-[q  333?BQ?,x f ?   K^ P|7Q-ppweaponSet( ^ )D-L(O^  ftT-%@T t KeT#=f/a6 {fe]\rN*({ N qN{10N ieA'-GC p vsize=Qeppppppp(x=Q6e y=Q6e z=Q6eC ) ^jo]? j?j?==j?j? \lgn \wl*la/!w.l*w..l* cdpOu2/a0 Q -,Q oQ 0'10( EC -`m6E 6hm@#o$a{$Y?-`(mT?#?{ mT?::$-v! Iq!m-`v!  tW[$-G::$ F-Wq [P \::$::$V RWT aq P V ?,(rT * a q PP -G' J`J 9vC${-| ".:t. ; wt*w.t*.t-'.E$ ''.$ -| E C-E'D*Cy-| 5wD*.Db.qWOu~-m wD*E#-E( Ug Xuj/"w*-Lg lg  DuGX)6wR*wRwazaAzR_ !N:_z_  !TzG   G|P,*r $@=,$@ :\| C<$?,(n-i}|?%aV$@*-,|?%aI$@T$=,|?%aV$@$ =,D?,?,7n gDBV@4%?GC kg\ 7&$\Pg  ~j CTHj . ; @rj *.-( cB@.}@BDp MBDJMBDCBa p Jp ? Evl@-v 'C-vX Sua X bo6oD?6??a+o CFBJ4J,d] p0SJ@] SJppppppS:S:S.]  u^@0|Gw ~V^.*w V^EV^}V^w & ~|Km|^^|B^|zDN z|-R-R b_x )$C?5 _  S vY9n  ::$N--Y%?YP?]6]L>B a } ]UB a } ]UB $YOu i[ W3w*o@ [ S l a j  6o[ 6oS i6ol w*W y `BZjj`-.`-.`% .`- E@ I S"fR@ /@ a3 J]\rJ-@ J_.R10R Y]H8 Aw]* wP*a/!u ]-P-3:]:P `]p?3::$-a}::$m::$DX`Dewr*r^wm*mawG*Gawc*cawc *c a"wp*pa]l Me!OWNwe*?ea/!l.eK@eUnone N@| {-e ".:f. ; wf*w.f*.f-'.E$ ''.$ -e E C-E'D*|y-e 5wD*.Db.qWOu~-m wD*E#-E( P}9UH1x}kW?%e}WW}`rQ* -akeheW} kX[d!w* [X fUD L~?~?Ob'b(U?~b(V~O j~ FKd.5rd*d-aId k~ acU K y ::$ D_-[ 'I  v-[ 'I?I  ^ XI-,^ bDD^ c Dw ::$-i'I-iI-PPZo$hI-P' jUUc!w* U qgWNag /?% gg6l6i{ ?%n >p@F)\=N jpN N Zp_p?,]g666666 Big JjxprL*La/!KL*/a0 @on@a/!KL@o10L ynU'6@x nG,k L,\-j b(b(!L>oj b(! b(b(!?d j  x k , &, x k , &,2nLG,   -D n,L, vTOTAL COMMITMENT z G,2n&}?d?z ?L}?d??}?z d}?d& [luW-w' lY r a M  l?,P--::$ lY r a M  l?,P C~p3:u%8u:J.u:~=uu FPw/"#P   S a7v S e-QwS *xv bxpv 33-ku.wu*w.:xsux%x:Jrxsux=xx3^*AsetGoal(): No best fort. Ejecting.(' Cyq0 '"::$a$*a$6P M y ya qy TyM yoa nD 0-y -R-eF-e qD  BD fBa B^z^BzB^zC< FM !wMM \{uKB{%@{,6w{Y*{Ya{ VXc h@|,2r|T* |%| |T x|KyIG::$D ,|,GD %a B D * |@u ". l ?@?H KIKz QM-OGs%bs&p bCbC*sp * ^e XZ* b(!e  f , }   W!BB b(b(!L>, G ,e 2f ,} ,, G  XU QRU fUU qUU k~q.qqk,q cB)|#\r~BhZrBppBrWB}Br}h y}kuWw*WrQ*::$ Qa H 2w* -w -G.-.--G'-p I?, a{$@@-p '2-Z ^.`::$]X]e::$ w*a/!:.:~ .$~ $mw*X}P}I-, w*w.*.S}C@b::$Z}U}U o~T0@['~::$w.a*.a-a**D?![ b?x~~o$.a C~a.::$sa E .ws*sa <sJ~ N RZ Q ԱԝX MԝXԝX=$:exԝX 3ԝXԝX=$:ex SY oU ~ ]Rocket-X.KonglauncherVX@ ]Rocket-X.FuelcoreVX}Je<R5-V3Ja/!. Jw'KJa/!H'aJa/'w* eJ( s t F(a@<wV*/a6 M VL;:BM 0'10( @m E2>iK-Y-Y'Cw*Em | -Q -F -Y(m | -Q -F  @d D ,Md !d X d Ac?,(pppppppppbot gunner: health: S[ orders: W[ order object: V[ state: W[a move target: V[ X xqj $w*-ka @-@-d ^ g--z-' -` mJ-q nx-k r*-r* wN*] N--P -d -^ -(1w*fa ] PN N i\ Z (a N bil(Kwf*f  N  b?,f i\ Z y  biGPN y -q  -` 6G6N -(a  y GfK urrO\ms,Bmd m&CmCmd Crs {X ` r* Y U-` r* Y %.X ;r*aX L Uq!dO-OKt G-` gY  |hB%-Rhh dhh h]0h]hbd'(  u{ MC(9{ APPao ${ ao ${  Hs| r l%il:J_wls*-sl:tML lMlM%=ML ^(ArandomGoal(): no possible goals!$ |l S -;Gwl *l a/!".l --6ox Du n';-zu FE*u H au $? DkQ =qo::$mkowm*Xma/!]ma mm+ aSAWA1DWARHEAD:  v ahHB apDDISARMEDHBdDH?,-@b(!Rb(b(!{ R2S]d`,'!@b(!Rb(b(!?]D?`B?,?, apDDISARMEDHB @ S,]& 8 $pDAUTO $pDARMED $pDDISARMED  S,D?]Bpr * R @GUNNER ONBOARD& S,D?]B?,?& -, @ RAFTERBURNERS ON R`K_ta`tSt{t~tMt W V((1Wwt*t( W %r?6 "Fr6E?,I@r?,I@r?,I@| 6Erz 6Er6V| 6Vz 6V6Ea  Va  a+ UW Ftau  m} G 73} %'-Oy{ } 3} ( d] D0-3/a0 d 0d G] ] d 10 VAnumukwu*hu 6hDMAua+huu  DHTL H)iw%gw,ww6Yn*]ww6Yn*w6Ynow nvZ[կ>>vծL>?siծ>>\?,x uYvJw wn>!r#w n IH P!I--[  -[ '::$b a  "@b L>b $? eK\Xi r*(| %FqwF*ZF-| FFF(J, | ,   ws*nDrs*nDG-n -D')ll@as$?l)lKL=,$@'e-n 'l-D(( H w() dwq*q( H %K?6 "FK6t?,I@K?,I@K?,I@x 6tKt 6tK6wx 6wt 6w6ta  wa  a+ bH ` rq*qaK  sn |?{/a0 jvuwj*rjn ,wj*rjn 0j10* Kh\; -Oh( `NqHw*]NMw*]NMrN*MS N!JM%[N%**N Ic*T}(w\ *\ ]D?c>6 ?% KcQ::$ wQHQc^ ?cy ?%%@ FQ >wQ* wQQ@xO #?vOi!T i!S i!x`!NaA$AGO #?a,J$@ a _ Ogv$ppprojectileFire(V_ )D*T.bTT j b ^ E#F EF 6j 6b 6^ T hXFD'-RE-ET*Da_ T FtrD*D FZQJUT Z-L'6-@uZuEZZZ-Z-`.-zq!d `XaQQ ,, X%XQ wa | Pwa | Pw&%??X WC B=${]{@/]@C b]@]C S]@]o a h C o \@@ HTxy> -A 'd?%Td/a6 ZTwZb$Z R Z -A (`%`,R `^`^?%z`ZR `10-A  QU{b^sLUDEUFjsLj%rUj'( zvwAd/a0 {aJ%/a6 s?v{ CJ10}JJ%/a6 s?v{ }Ja  s J10/a0 {_J%/a6 s?v{ J10}JJ%/a6 s?v{ ]U}Ja  s ]J101010 Sy } z iV} wi*y iy axU b U {  b | { U | b i@iiV} @ P` CDPnn?<_ a/!`!SG`!Tj ` ^ _  @ @j j^ zD@@BnE a,` ?>j n??nE n"E ::$*D@ ?, ,?`w* RPP-iIa,v $@@  Vp h%-33?a$??,V-A-p a hp @@ \{J6C]Z /~C>l?lZ?l?Aa aI J 9F+6I  -`$3`$I o` fFt>-L--Y--(-(-A(D-q!j F.arF* /r.*"Fbq!6Fl-q!j,:F% 8,:F% 8$,Fbq!6<[q!6 J T[H4 -|(a(J [ [vG An=YavnY:nN v i@*/va6 Ni('Ny?'dNv:nlN('yN ~nrl*lNKy''yKlNKy10=wl*l?* HN WISN    s SSSu SRu ףp?N a/!LB h B Wt D?Q?&33?SnX D?I?&33?SI b(b(b(B u ףp?u=;Es zD?2t ,X ,,,& t ,X , pSDs T m r U c $Va V+$ . \ 4. -aIU ) m$'V ) m$(vVX  )m$x  )m$Ea EBTHRO%UVIa I%BVELOm/sUVEHa H#BL>HULL%UVI_a _"BL>FUELUVHCa C#BCORESUV_C-Z 'a  qmmCm :$(-J Ztechno167Ztechno8 k$Z-J Ztitle18hZtitle9 -J Zleg16Zleg8.pSLV2Fonts.Z   EVA&V$ERROR! wFhl3^=-R #<:-R=HR>~ Fr~ R~ Rt -a w* ya/!8 ::$@`!PG#? R:?N?[\::$sR [}` 7:x:$xSW\ :L:$}v}\ 5:x:LqzeeDEBUG::$eeBeeUDein :wq*DpppppDq(q).}ZDppDunknown().}D5:x:^ ::$5wo*ro*p\:L:$ :^ :$}v}\ oT oD! gxZU -S'U  5-S'U?Uff&?[-,gn-,gcw*aUff&?-,gnY?-,gcL?w*g?,dw*g?,dhht?IgbO Uchhb<^. U-,b@U?,hh?#9hhHB?b Oc]vwc*7c%Dcd!NS-6Fd%c::$Scd%ccl NwTM'pFAFire:fire(): clear: T-QK-Qq!8T UyxOuCFdDQ?,\?6P  ?6  y?6  y y?6P  V o\V oy V oy\\?yC?V D\C?d?dd@ Dy C?d?dd iz \&KIwz z a/!s GA A z   ydBwy*U y a %,wyT*/b$yT y >U y yT Z'8( m G5B~ a   p?,~ $ a rnan4*rn wn*wAn*]kAnprAn nAn544 G_zq,,jq_`wqT*q&TqTq&^q^q _T}_^E OMiѷ=w*a/!Z.HZj-n Z?%Z-L Z?%ZZZ C~P 9=-|b-P ad ?,P ??%afff?D #<(C |[z?-Or[sLq[.[a[y.[{ .[[['r*([ xh_S't a Ht kt  |kMAF- :-ka|M ,,C %C M ka}wk*k$k@?M C ]?-9#??%kan .kan P#?k$ rN`/NN:kN ; ywk*w.k*.k-'NE$ ''N$ NaJ$@NiNew*y,Ny,TD hyN' oIh #FeI>we*/a0 g=<we*1rg-ergeB I o}I g 9}?%I I g }9I B I I B =10I ^kq)9T@k/ka6 @WS@}k 0p10@a  !qk r@*^@ApautoSkyNodeVX(): spawn failed for ^ kp-^@-(@Dk@Gp1wp*pW @@ ^VN! >V wV*}Va/!v Va!OVbVVq!OVV  Iot4^UUo6zU&0UU}U& VzU&.UpU0U LA AaA 9A A ?,2_6--[ '? SJ8k m D @f D?,?m ,iD?,?f } D?,,pD?} ,x&x&y, y, L%L%A%A%C%C%M%M% ||$OO6~&~&H@&@&Zm&m&tw--R 'v--Y 'p--[ '|--\ 'r--c 'S%S, h S&,S.h A?h 4C?S . kC?h BAS $S g(S  BS%Fuel Loadout:%$ Amount of fuel (in seconds).%/?C,Hx,% C_% ?x% A% $ Amount of fuel (in seconds).% Sx&Rocket Armor:& Rocket Armor / Hull.&/ AC,Gy,& C^& ?y& A&  Rocket Armor / Hull.& Sy,TeamDamage:, Rocket friendly-fire.,/B,>L,d, BV, ?L, A,  Rocket friendly-fire., SL,Sliding FX:,S Turns sliding effect. 0=SLV2 Default 1=Max --->Less ---> 255=No Sliding FX.,/C,pA,, C, ?A, A, S Turns sliding effect. 0=SLV2 Default 1=Max --->Less ---> 255=No Sliding FX., SA,AirBrakes:,< Rocket deceleration. 0=None 50=SLV2(Default) 255=Max,/C,C,, C, ?C, A, < Rocket deceleration. 0=None 50=SLV2(Default) 255=Max, SC,Min Speed:,$ Minimum speed for the rocket,/HD,2M , HD, ?M, A, $ Minimum speed for the rocket, SM,Max Speed:,< Max speed at 100% throttle, or without afterburners.,/CD,2 |L, D , ?|, A, < Max speed at 100% throttle, or without afterburners., S|,Max Burner Speed:,$ Max speed with afterburners.,/"DD,23 O, DK , ?O, A, $ Max speed with afterburners., SO,Acceleration:,$ Rocket maximum acceleration.,/?C,? ~,, CW , ?~, A, $ Rocket maximum acceleration., S~, Fuel Rate:,   Basic burning fuel rate., /?A&C @,,  A[ ,  ?@,  A,   Basic burning fuel rate.,  S@, Burner Fuel Rate:, R Afterburner burning fuel rate. multiply the basic fuel rate by this value., /?A&|m,,  A,  ?m,  A,  R Afterburner burning fuel rate. multiply the basic fuel rate by this value.,  SmA. HCC@BAA SaveA1 Save these settings and close this windowAj. CC@BAjCancelj5 Close this window without saving any changes.jw.h ApCC?wDamageFXw2 Damage Effects on(checked)/off(unchecked).w|%w$wB?v.h ACC?vbNoContrailsv( Smoke Fx (checked = no smoke fx)v|%v$vB?p.h ACC?pbAfterburnp) Lauch rocket with afterburner on.p|%p$pB?|.h ACC?|bCanOverride|2 Pilot can adjust warhead status in-flight.||%|$|B?r.h ACC?rbBotsObeyOrdersr? If unchecked, bots may jump off depend on their orders.r|%r$rB?W E_ ; n a n +$a+"r*l 6l T_ ai n l (-Cr_ *-CE i #?TEa 1 i n aksW `HD?, W X ]H%6kqH6kqH 6kpp&&ppV ?@]6kD?6kV ?p?&V a+k::$0::$ a/!8 w*o]::$O otD 3 rt* rtz'a/!.r  -G.-.--G(-R R-SrV*$*Crt*C1AclearRider(): Tried to clear a non-rider! ta/!8w6Ou*J !6Ou GJ 6Ouat-(t-'t-(JtQtot |S b !$T$)pplos($ S )$b$S    LZx{ZF-Y6{=,6{=,6{=,6{=,6{=,:6{6{=,6{=,{ [qoptKr&b*K&UF &bqq-(qqq:&UK%bqq-(qqq:%UK jBPQ;::$-w*m n+/a6 zC@*)wz*za/!Q$.z rEmEm.z rnz mE.z rE10~mWk 6mmmW6mk W?n"9n?Bm sa U p+Ra$1ppsetTargetNode($ a )aa wa*U Ra Y@-y wR*Ri(a i':Pam:a~ of:7X? v\D6P  n\?d?X- b(b(!{'2ocd`&,'yDn?,,?y\n\?yn~\?yXZ~?,~?~?, Ae~?+ D?o?ynXc&`?y?,-?% b(b(b(!>~ &, aSygl : D?o?ynXg?c, Sy b(b(b(!{~ &,y, aSD\gl 3 D?o?d@g?c, b(! SD\ NLu >nx6L6u z6L6u O %y?x?O x%?z?O z%xxxxzzzz:` %xD?x?` zD?z?` 6ix6iz6i%i YY mX rY * O G@H@|w|*I| G?6IO lY  | 6l6lG6lG6l6lG6lG6ID6l6lG@H@?@pppsetting roll: S6I rotv: Xl|a+I||1 kZ Uo1Z #Z au nn_ 0r%-\Pn   AwB/IIDwWG,Dw #>D?G>d,F`, HD?Dw?G?JD?Dw???,o\,EgHJo\I'gHo&&Jo\H(gHo&,Jo\_(gHo&,Jo\C,gHo&,Jo,\-Z ' c}P t2r}aB } E YPYw} w} w}*}+*c.E ;EU}-}a/!KaB n } E YPY}a  @ B x\ ly ?D?\ ,\  e[%_ ,nlw[*EB%5r[-6FX'B-6Fe'l::$J.[[ [ EK a[ K ?,d$r[-L  [$at$@.[xDXl\-L [$af$@.[De iEM;/vIE #?HE!aR GIE (nwH*R tI X\^ݰ-(\w\*\\\\\n\\ \\ ZhgGDMCB;Hh hG Q T^b5S^^:A^ ; ywA*w.A*.A-'^E$ ''^$ i^Xjy^a/!r .^.^$$^a/!8t=_.^ ; -R'm rgCx Lg lm:{q!b-'-'. j_G` a  !`j?,"``6j6_6G. Z`D'-``ծ6?,<jկ6?,#_կ6?,Ga a ```6jծ6?,F_ծ6?,Ga a ` ~D /a +$postBeginPlay()L !D pBotpack.WL  wD *D -k :TT::$  xXO EE%e. X ;DX\ iwe*n---iwe*?, B-re*!e'eSre*>Die'%>De?>?eS?e'rX*X>@DD }e FyxZVwe *d e  PJ {Md J 333?X( LHV,h?% WHWm D?D ?@?r  X  a%gWff%f,DW% -?H,?m ,f?&?fP~fg( b(W?hGPfgA b( ?fgP b(W?hC fg}fgP aրfgPWf %?H,W  C  afgWfWddWfQ?G@?d?,dr D?Df?&,,?@r %W%-~ -D-~  b(W?h@52Hm Dd?,Df?&,,&-~ 'WDd?H?,h@ |`$c!w* $` UN\U>-OwK*KES \N vM2E_&g,+g& M&X-w_,&& M&X-w&& M&XX&-w&& M&XX&-w&&T_,gg&_,g M&XX&-wH_,gg& MX&-w_&gg&-ggX,&X,_, Mg&X&-w&X, df Tws9r%bf %UF 'oor&bf &UF '( bi G f::$ D-w aO i P?,"-::$a } a @ LC`?i a sWi0=|6paW/a6 jzCwjjrjWjDWj,XrjWjDWj,e10Wa/!-6oa.W--6Fa(:Wa/!86Oaa x6Oa|.WI}F6Oa*6P a#W-'RW kk} qS%zS,pzSJ knqSc Sq'p(SS%S,zSJ SJ kSq(SAppppwait(k, tc ): no tags slots( I? R L a-Z  Q -,E(??100E.(? HSD H?,dID(?   cSDT   H9(?    SD  _9(? D DSD Dw _*CX(?? _'? _SS _'_PHPq!~ -Rw -4?IQIDQ?IQ@@? I%ID?IQ@?"-i W%W%D?W?C""h?%hh??^I% ????d?_   n I@d?dk? Xzw MzU2z%zK {TU =T RBLw*a/!.a!t.q!C .mBT6CB 6CBR6CBR?, n7a/!8 -R ::$ RqXBw*Dw*B o ?,h ?,[?6"Fo [h ^o [#^h [^?&BT^BBT6CB 6CBR6CqeB gx[ C}'m P@aP:P:m $FpsetGoal(): new goal is: $:P@@s'-z'( gl P !jD7l &8$5-l ,8$58$  i3zPAhandlePickupQuery()r3_.-k  r*a_Q>Qr..3-0.3-.3-'U-Ow. 3K*{. 3Kw*c 'G.3 c %(w_3_-P__[ %**3a3sw*]3.w*]3.3['r*( z3 hl %Ԡ~ -i !-aUl ]wo*{oo$# ::$-a/!8 g ::$ ::$ -^K|7w6OX*6OX-K 6OX mK g::$Kl|nl jOKy2?%OnO jOB?.r*F66w6*666F6666O6 6a+nOW66 66  Pa} :: : :a/!Lw.:*.:.>kw.>*.>.:>@a > կ>:#?.:*>a/!L.>-'.>*w>*>:>:> : '( L c h 3u rq * 47?e?_e??D=7 Dac a>aL>e?&?,ae?,?,ae?=zDABee.?7>?7A%?7A.?&7>v>7A>7A7>?7A?7A7$7b&?,c 7&aq AABB r9e[qu9.rJv.+bh `G ;&euFuPFxF.+-_r?F9#DFxF'r?r?rb;Dr?;ub(Fvb&9 b&`9 C&b;9 b&`;&9 C&1b&9$ b`;&b&9C;&b&-ar?;?aub(b(Fav` bb%b;&` 9 ` `b9 C&-L?bQL?bub(b(Favmub(Fv9" Dg ?bD?`L9 &,*-V-ub(b(b(F>?rv9'2b`;&C&;ub(Fvt9b`ue NJi!-Jugl Lr \}<+a=r uP5 r %@ Z!N^X5/N^^ $N %D%0% Sx b  &D&0& Sy b  L,D,0, SL b  ,D,0, SA b  ,D,0, SC b  {,D,0, SM b  ,D,0, S| b  E,D,0, SO b  ,D,0, S~ b  , D, 0,  S@ b  t, D, 0,  Sm b  ww--R '-R ( b  vv--Y '-Y ( b  Up/p--[ '7-[ ( b  |z|--\ '-\ ( b  rr--c '-c ( b  )$N &A bE) $w.*w.*.rN $ w.*w.*.r  lrk<yppppppsetDamageString(r, m, l)hrml o/u/a8 /U:/:$K/ u?KKKu#>uK/ ?%pĎ?um::$/-./W Kp?,Lr/mk~/jmk// / Kp?,/_*Dp/ ի?//K?K@10U w*d f),zf  )rc*ca c _*Z,0V-LZ,8xrz*z )m$rz* *z*B*afg[Lgs[*aKg[LLgLLHBQi?%GD*@?Z|GD*@?ZLhD*@?,<Bc(2GhDL?,D[?,&(*?G&?h&*b(BL?cDLBD[*B*?G,?h,*af*"?G,?h[?,*aK*{] *a]g[*(?GLg?&?h,*a] Bs Va.-O:s :Q P%Q s P,|:w ^:Q .pSLV2Fonts.Ww S P.P%* u}C  JIu 8I cTt.#T.{o {MQ{o#[#aoUBU?C#{#aoUBU?C -Z ooD?CU?,Q QD?EB?&n#{MiC,  -Z #{}#[#aMUBWD?QB?&YD?f&UX#{s#[#aMUB]U?Y?C#{#aMUBZD?QB[#T f,Q#nT o{MT f&W#X#aMUBT M{sT D?f&UZ#[T s y(@XiNpppplayAss(): aname: W6b( arate: t6I (w6J(* w*V6D(.-Lc6J(6F(V-y -6i(6J(6F(Va6J(6F(V6b(!6I (?%xa6b(a6b(6I (6D(')pplayAss(): no anim: W6b(( UF$z 8$F dCl1!?CCC zG}FsgDG yHL/Dk/a8 %W g w%%a/!lZ@rT!P r%ZvT!x r%ZmT!T r%?ZEZb{T!S:rz*rz*7r%Z,cx`r%zZGxxr%Z T!Nr%Zor% r%ZKkZ%d% g K ?dddK K ?K %W %l*DK H% ի?%%dիK xd10 tag "%",r"Y*Pa"T@ph"%_PtPPttPP__P"Ya i P"T "Y"^B""%",w"Y*"YC?,a"T@pt_t"Y<"Y"Y"Y" e\P[?::$a/!W r ra/!K'a/!lT..r@@ Da/!l.-r|.*D-aH. r*`. @ FxZZ =\a/!rrL.@@@@ z. dj pCj =rkHkBC*D >Z?a,v $@*DL=Z?!x {L JY7^w{&=ԝXԝXԝXԝXԝXԝXГГҗOГГԝXԝXԝXԝXГԝXГГԝXԝXԝXԝXԝXԝXԝX 32222223e 3e к23e 3e к2ѐxPm A C "Z" ",O~v^igh]X\/- -RM?DM?h,Z vPMl+ (/a0 '%/a6 &?P' C10E%/a6 &?P' Ea  & 1010/a0 'a%/a6 &?P' 10E%/a6 &?P' _WEa  & _1010/a0 '%/a6 &?P' 10E%/a6 &?P' Ea  & 1010/a0 '%/a6 &?P' V10E%/a6 &?P' Ea  & 1010/a0 't%/a6 &?P' 10E%/a6 &?P' rjEa  & r1010/a0 '%%/a6 &?P' 10E%/a6 &?P' #Ea  & #1010 JK |4 R'-|.?K?NP. ?KQ?Nb  .P_(l.PV.?,c.?,-FQ.Q.I.-F VE@,@-kEa/!t -Ea/!R `yV’ ay eKV n #.aKfhf A}kAZ/MMM}T[ -, M?,M@@M?%p D?DMM@_ D?DMM@p %_ %x%kp IV _ @  a hl[\?;a l~r '=( @pvFq~p(pq HSMN #&.SLV2Fonts.title18   U@{@vT_ CA C @q@l@-Q(M% r[ O@VP&vOs  FNX %*pppp\.S^ built on ]  q@@ESG`E1]+'S%SM')( mDCx;wk*k}-(.*' oJ@qh{,,x  scJ6LC} 8C @x MDc S% O`av aS' Pw @FIg"wF *F a bSYzWK$destroyed()Ww@*T@-y Twa*ai($%destroyed(): skynetVX == none YWya?`&?i& |\%sJ/5 %i !! ][n nG >a/!fa/!a  t]skjJ4a?"w5*% $z ji`J Piham0B f F::$p Q CZ  _VC9J:. jU^abV"X"_"]"Z*&D"! ǻ @Hu:\PHIJHShWHJNNPRSWYZdddd\ZYXWWWWYZZ\\dddddhl?ldZXTRQONMJIIHIIINNONPiQeieeeeeeeeeieiiiv[NNNNUMIHHHJJHY!TJHJHIOZ !hOJMNOPRVY\h?dhlnn\WSRPNNMJINOQRSg|pufhD򞞟BBpRd\sxicNNJV.!nZOHIJHLT ')ZMNNPRVZnnnndXTQPNNJNW~F'#%V,Z*&򞞚{xeOMJI?5'hSJHJJIP\nsINNOQVZndXSQONMJO\; && %0, \h ) XByeOIJ 0'!YOHIIHNV?! sINOPSYdn;7 \WRPNNHN\6383V 44$ )Z.!  D|gPNIJ?4RHQd 3VMNORV\hn 45-YTQONIX; )()&\WQR\  'ˏukSOJIPV?%0XIJJz44 3?jQPNORWd5 n\RONMO@ ((())4"nhWWHHdW& d 11'' ̉ukQNIHJJPRRd OHILh\RS9\HNNPSY dXRPNNIS)))()uHHHhdJOY \333-64#$<;sRNHIRWQX4-WN ....?VQX~NPSY )(('50(()XSPNW))()NJQ-:OJ3Z n9l\3333!.lpRHIi#!\QSl 0R@ ! dRS NPSZn(( XSPNWdIhZHIQV XSQNLdkPR ,,3dSNHIIw&0&lSQ\ R QX NNPSYhn(('((WSPJj' 0QIIfY?!V9Yh  ndS'!XPWZfRNxSSYhn dRR 5RJNOSYh} (}YRNQA#"lHJSLGWZ&'"\dAA  p%dRShZSRVdSkSRWdWQW WNPSYnГ( Г)3dRO3QHY~HNSR&5 \\8n??hd\\\ZZYVVTTTTTTTTTSPPPOeTgjpppsZuu~@AAu"VQ\lkSSWd;/S"E hZTRVSed 0\NPSY}}((}ГYVn86!HHO8n\WSRw!nnhX\\ZWWWVTTTSSTSTTTTTTTTTTTTTTTTVVVVVTTTTTTTTSTTTVTTVWkYss\pJ'VO~ %̉~YRV:YW 1NOSY5(۩(ѓ(XSPOQWd!NWdVQSpD&9???lll?ll@@??@?????????@?????????????????????????????????????lllh.4!0lYXhZlZQVdZ? hp!nMNQSZh(((YSPNIHJQZ\SRk&989888383333-3333-33-------7---------777777777777777777777779J lkYYh\lZQlj\lX@hZ,3"PNQTZn!)(((((()YTPOMJSl!\OW:Ֆ՛՛՛՗՗՗ΐήΆAAAAAANB#YZlZslZQlg~\?ZZhYSNQZ0YTQNNMRZh(98֒ί;;;;UB hYhs?\lslZPlz~Z?ZshhYXNQTZ ' YSQONIJpוԖ̯ھڿmY~\ZNlj\@|s~hY-fNQTZ45dYSQNNHR/Z" 8̯ͼ;;ھھiE -.~Z?h\y~Zk\~YvNQSYdn鿿3 n\WSPNNHPZ!:̯̯S TsNyY~ Y AONPS\3883nZQONNIRdXVվNn dgRSRZh;gn:TOdLNOQTX\nnnnnnnnn\SPONM\ nVNSh3Α֛ԯIP nWRSYlZRShFEJEzQSuXQVl.NLNOPRVYdnnn\WSQONNJdQWNJRu HRlYRRXhn !$"VQXJ\ZSRW*hTQZ!PNOPRVXZ?l@3nndZSROONOSSSRRONJIJOX: T::?ZTRVd !/ dRRd@KQYRT\: n\RSd PNNOPRSXZ\ddd\\ l? d\ZWVSQOONIQd-ԿIQRT\! 4hjSSUHOn: XQVTHLNNOOQRSTWY? dh33 .ZhWTRQPONNNSԽ- IV . hVhd\ZZuTRYRLLNOOOPQQPP|y" \ lX@RPPPONNNNJJUTl: p %l{ 3'"n\ReONLLNNNNLP PuSVTVTgf\uZhhl STNNLNNNNNIJMShA Ip3 3?X! . 8QJNLLz $g\jknZZhP~d\\YZckhS!PLNsBXOPMP\ Z eA -Y"e#ZNhQ$f~d{hl|e@R?cF):YgV?:֑ Z3 VY XA4\S \HJB-![ Q\|h@k Q!RhIK')) d~ HZ7?Q !ˏjfrf:V ;PSZ7 S\ HU'kX+~eZYh@X17ShS0T hl$&A8ίٽ88IV3XpP?"pRRg|x V R\SQkO !\IJV [:[-Zh YhYQ Q?# 43Z /Aݮݧ ----ռ QSJHNZW#O:#TVg dVP@O!;9lJS 33 c!fu !Zh Z W'SShRIU"4!Z 0'չ-- 8AAAAAA8 - ԿI\QIILHdO .T T TnS!$R~ ZT nVORJh Zgdi7!!YhYhVQQ0HL&\.&ׯ - -- 8 -3  - HIP:v g# TnVT"&#O 0Rd OHJO: 3m;3 mZhYlV VdTRIJNy) 'Oun!- -  R!.Q9! TVT73YVOF)NJHZ eu!fs-!YhYTPPlJLQ|C)()hVQSd!(())CE IQ![n P SnTT Qh"PYH.dv# dR-,, YlXl V-/. W\ VdRIIOf)(kP\nAlXRRX~))) 9ٻ7::A WZ6YX!TnTV4O"XWIS!3 [ [,YXlnT, PPHOh&((())UIHMn?dVRQgY)))'7:777:7:77:::IQ?PO 2TnTTdR QVhj!T\XlXnT3,XYW\PK?&)((((((0sIJO9PPY?;@O") AnAͪE;;;IQ!Q~ 33 TnTS.,.!S\nNnIJOA!c!RXk?nTAPnPdO"'&[JZhGJHN9T4-h?'EEE;E̯;;;;E<550! -If ZV!!dTTTT/2OQRIZ3 [ ";PXknT|WXZOSunS|Y!f"-r?:dOHGPdW4 &i}GVfdXJpG0&3$ZnS'iffeeefefeReefefeefefeeeN8PJIO nLO>w"3QNPGGOdYNy$3/< 0P}GRIlZVU2 16dnT4 3.Ouh@h~h~~QOI4VUOW 3 RGOdn\Ne$  dNtCH \UhO| &FE- W;$nSOkcSWNYSPYOWSPZOWSQZPTXOXPVIHX!/ 3npWXXXXXXXX32IJNQJ8"TqudNi$!!\NCgLOG[A-E' 4,YnTOAs?:TlpTA?sTAZYlVVn--IIR"nXP\@??dQT QHOjPOV~ OP!'!ZLwXcOWR~ 3< V; "S P|T*hYfXSlY YlS7TnRIXPsQT3'dHN;seUip?QO~.'!nWVndTOPYl:3d"!0 l# "p?\S, O|~;fhZf~Z f|ZhggnY ! XP|32&~PV <NJ.hkPNNsE TNed;W3 E ڤYB*~## @J?4'P|w"lYfYf{Zh;g4Tn3XH 3YP|#3! ucVXG 1"3S~ " .Td O: 0.hpyΐBCX~  [|xhwDfDZff PI,3YPZA .$3JIUM"&Os 3huF&Z\\\ssssssss\S@YT\? (())(\ ~W d\Z@%*W nn!ST< 3dss&&5hZWd ')(( )( d#!\X d\sl'V.!$"("&.3kQ; -5?dZp$ """"""""!h;js~{ 5 ((()(4n\!'ZX d\ pl3y;V 5 3 dO n?d\X|zBBDF~PRRy[OQWn!E)(((()&1&)(()& nZ\W \\ sl gj33@O~ ".3뺸lh\YpVTgzwxwxxxxxxwfOMOcPRUY\O7)(((((((()&)(((((((()Y Z~X d\sl \V!Pp"3!. ,7:nQThf*Tn-)))&1154'))))'14nY sX d\Zh Tl\d-- TS< .0%%$$   ;eklf"e $31F &F14.1'&'150 nY |W d\\PVVWVVVyfUSVZl3 38' YP; 4 3055%򟟚~~~kN~[XXc~MA2051' 'F5445' 154d\3 tW d\ZdS9 41-dO " 4##DB{kkZ\Z\h\dullll@?WVllS\ZS@Q3/225510!.5154/\d nTR \\sl j-0&Ou 3% ${kZdhnV\S[l*h\Zhnj,Vn./24424/2444442-Z@#ZOd d\|l s446!RX3 {X\hRY\RlVdsslZ\nT!k?.3. nY#PWd\slWdX\Yu 4 TS4 &͇{XSYdRlu,k;lZhYnT*Y?3333duSSV d\Z@MXPVRu4ZP4 'RZ\Q@?sAVhZhZgsZ#XP-1jd\s:OXPkRd4-hN 43TS 4 Qk\c\XV?hdhZnf/ k?ddOY-gd\sUYQVS ?34 .4Os46  &TeN~'5&35 h?n\\h,\dV!Tn#8nhn\;"?QTn j d\s@E>OjR C04"RV445 fShO? XW?usAR#dZZ\h\@nVQV'd\Zln7/30WR; &.  fR!N' 4S QSf?nnZVRRTX\Z3ZP\ $W d\Z@.!3 1& \O&fR!?O 4- .-3& {hkPDekVdn?nnnYWhPW򳫫RgkXXd< 4Ou!0&eRhOn- '- 3.DSzQcONRcMOSYnn!ZTSSR pVVVVVWVVVVTVVSTSVftT? <30Xffsef!/ !hO%' 43hYRNJHGIJJNOQTY,nhdYTQVYP 388778 &)QW0<54 EyRWlTS P; !!!!4ZTPIINOTX\n ?dZWSQNOPYCh  0WXS!9'< 0&@Gu 3LWX\\\\\\\hlllll?&NJhF?llQXhSc)"Pu# |dX\ ''($ǣsIIR \XTQ.T\suZ\ss\Z\\Z\\YWWSd4 hJw'NOVdf(OL!YOl?W-#pP3|dY \"''F'F'(Ldշ~~$~~ŲCd~uu~uud~u~udS#8WXhsZAAA**4"- sVSNfOHdhN/z%(&N (dOWQeT3.&pd YF'''F'%(>nnęCCC$CCCCC֌CCCCCCCuJN PYgekWjVWVX\\d?dWTgX;PJwNJQy3)OL(5s%dZ\l$Ou$ .X\W Y4''F''F' )`LAAʵçAţA;dIHX YZs@WR0/l\\YVWVVWVX\sVfjsIf\h[ )&NJLL)( ? d\kP!.pd~Y''''F' >udu\du\d$ddu\ddð\ddududddS"UWnP# & $%""7%4#IgOldQCJ) ()l4'|gVTS\3k\~ZF'F'FF`5  ɱ\IIRU\ZX -//' ' 1$1#+1 !-ZHPnh\dRU5) 5("'? & $33k\W Y'%&&oä??????????hll?SJhdnP -0SII\huHNIL4s3 3!k\W~YId\\\\\\\d̶d\\\\\Ű@@@@@hUQ Td00435$ONJVdO&\d\n Vn|Z Y%0$@I'ׇD" JX5R!00 !#5HHPQGS:OC\x&#Zp;hz?GQYh??nTnssWlXdH* :Z\\ss\PQ :P' dIVSSRRepEz YHJr$\ss\\uIIIJNORSRSRPNINNPSNXhj{W?Y pIǢǢǢʢʢʢʢLJ%'"nNIN?\X  WH %#%SIN;\ \PP3DslZnTjdn)Mu ̨Ϗd~l;u\40OMu 5hYNJpdZngTu1)R\ddh@"!--Z hh0JJjsskhJOZZnh4NZ~~ddl?n 3'Z\ ZKKNu\?lX~PKJ.&)lZn 0KKOdA/E˗dhl sZn 4048OKiDdjCs$T%#TJp 40uZnYz\dh)JTn?A4 ''E;ldhk\JKxhw&\WRdWhΉXJT-0dZ%E1)uhȐdXp / W4d4ZJJ)?BYZONBYnddJR 4dZdl: Kk@uɕ\WXk" Z50WJN18\@KJZ:d<OS 0"Znhn;d?dhQ̎<ljωhMLf~; 4h?$\-4~cJLh)?VJKShd$U{ 4-ǚZnd:JJu>>000''' m@Mgm0playFiring()R@j \@#zaS[} QfXW  Y{G  amm@w*4 rBq Oh>@rn 3playAltFiring()R@F QGM UQ@-:.* L\b .,b@@@ ERXw.*9::$ .a/!Kz.W.Sw*w - M~dg]K 7@Fq@xTYfG TWh@CZh TVHXUa!ClientActive:beginState()_i-K(_w*q!h cMu -M-( FZk 1MHpT}& },awa*-aa/!R:.asa}&$},!<qaSaaaAKKTw*|@Ga-k%:Js.@dK)w*  xirKKGaGa-M%:Jws*NTs i;Kww*%X:JNwN*@pN  N@pOO@paGKw*%:JwN*@p?@pOaG-{ ' \)D(pZRb$n q@ Y<k @$ $    _T:=?=5-Y-Y'-w*:-Y( k<o<fns2 -' `T<Cr~'S iiNubJ D#w.q!+aL>t 4~yM;G$2-OKD" e{C4zHa-q!j-'-'/-L::$ w*a/!f w.*".a/!K:.%.W /:.%.V //-.U t 8F|Cy  _A"4# '% w T BS-/#S LEF"Sx  vGGny-K( x -( fILt ^%a/!E -'Ja/!H -k'--k NGev+Idle.endState()a( !y\(v IcF/IG::$- -BraQ d <Wa  Sp[\ q!( oDV (kiq! [V(r*`.. XYuE'r.* "q!C<-q!Cq! viw*a L \Z|L+)g%a D?g? Z]jl}@EC-d8 $8$C 0$8$C @$8$C  E!@B-d8$ df@(C:8:$ ehxC:8:$8$'( ZkDJH;w*::$.::$ Qa H :.&Ga hca ic a Y 8:.%Ga hca ipa \ ::$-a'8$իO L>9I9Z PDeZ lq mno|v_ ;1#.SLV2Fonts.leg8   pz uw`I$a@@q! z j^I ra3_BH_zxi {F@^ 7#.SLV2Fonts.leg8   S~x}s ~uE'r.* "q!C<-q!Cq! xA?C-(-(-(Aa6bD@D VMI] 3#.SLV2Fonts.leg8   d GKCqm 8C TR\ /#.SLV2Fonts.leg8   if@ML!wW *W GG NAd][ +$.SLV2Fonts.leg16   j uX[\^ U@& "*$&    2,1 ;.9YKW(&3"1C3AEc>-,'gtt?GL?cL?P eby,"wo*{o P klM '$.SLV2Fonts.leg16   {h<%%'%%' fI?'' giwjfw*fw_*_%J::$_\&ak$?DD'( kp$P GgT3UAa #rUa+P#UOOO# ej@o "z a z +$ Hr|.w* -R% dt] k$+U X Kvhl' k$  j#!w*q!j m jcf$-t @w"@r e] @ <.-' AY-< wE *E %&:w*Y  B{"(.-' E (V a V +$ rd$6wR*Ra.wE*Ea RVFG6 X-'a } %CzC!Y HaL=[ HT*4 G &},a +$@/a0 oHH10ca_p0'gDW-R(Ht-F(-Z(-S(6s6sB6sO% IVd"CI?,66aA?( ]P>d q!b( ljpb-LT  LjSv fWn )4aaa>q!J $X$I ^*] YZb[]eW ,W b-o adGx  crw*a/![-S-S(.CL>s?-S'.CLs io& k ,k t HlT tK'c J~ImVwR*RaTwE*a E TE-vEE n! a=( 9f -q!Ja=(  | oi//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Bits 'o rocket. */ class WreckageVX extends EjectedBrassVX; var Mesh chunks[8]; var bool smokin; var() Class smokeClass; simulated function postBeginPlay() { // No detail drop. //super.postBeginPlay(); mesh = chunks[rand(8)]; drawScale = 1.0 + (frand() * 2.0); smokin = true; setTimer(0.01, false); } simulated function hitWall(vector hn, Actor wall) { local DirectionalBlast db; super.hitWall(hn, wall); // Spawn some marks of our passage. if (!level.bDropDetail && level.netmode != NM_DedicatedServer) { db = spawn(Class'RocketX3.DscarVX', self); if (db != none) { db.drawScale = drawScale * 0.25 + 0.25 * frand(); db.directionalAttach(velocity, hn); } } } simulated function landed(vector hn) { // Clear smoke timer. smokin = false; setTimer(0.0, false); super.landed(hn); } simulated function timer() { local Effects puff; if (smokin) { if (!level.bDropDetail) { puff = spawn(smokeClass,,, location + vrand() * 15); puff.drawScale += (lifespan / default.lifespan) - 1.2 * frand(); } if (vsize(velocity) != 0) // The faster we're going, the faster we emit smoke. setTimer(fmax(0.9 - vsize(velocity) / 600.0, 0.01), false); } else { super.timer(); } } // end j[! ; IG::$::$fXfe ZNMEP @vgyzlNGVv-V  Bd-V![!i BotPack.WarHeadLauncher Xa a H  deY\D-AaF$afX-A( 4aAod[-o(#v! a![-'o$$YwR*Rt BTch-o'a!aaD$?#?{ o$-`'u! $~? _u!aa!~ mIFH0o:a E  K{H 0/a0 @10.r@*@a  nd aYr*%-Ca!~~Y7-ooJH#?EI [~[ (wR*RaRa| 5 >k$a P= Zp-_(-f ( LJR|g~U Rz+ wWq . @l.%.-(...: teJ_6` RR bd  ga~ ( 9Fwq*q-{ WqG.wW* b$W  Wz"a+PW  $ @!*&(   :6: " 4  %3L  QKpg`xpZV86ODBc/.F" f XXoo ;;Z!!1''7 --; 55;pwn ,>J02FH  LD   3'+s ;4+ '!1"-(4 #U8@)$5D$4""""!|tlg`V L D <t| -! t ,#z @*!26>57@wHK]68E&&&&*#'&#m 4 #b* k , | U( K $i^(s'd+ $,V$)B %&+   ! h 6::]^^ĺ       NNL&&%nnmCB7)'64!a`V<;354-IH@#",+%# )'jh_20)   SRQzyx :64 BAAcccXXXHHH<<<444,,,""" ^9Eg L \fe_ L G-m ~?fno clearance!vrw*w.. ; ww*w%Kpcores Sw n3HY!GWw*q! ag~_PHP-_-_-_-f HPCO?%4a \$?-f 'a~ (q!G `F RoL?;r *r -* -a'( N lpI? Y^3bDC v9,C?@-|'a #<( jp Ib^a ^+$:-L^C$L^CApostBeginPlay(): Only usable in CTF or Assault. Destroying.a-kJ=. J$r D[ bu:8a/!.M  \(' @{93*-]w[(-]MC r~ &$-w a H a=(r @}t K{  ]v",#-w   B {bO % U aC@YaI wt*ta u2SClientActive:animEnd()-K(-Lw* a!ha! a!T q!qa bMLBp s RN'k  [kJ wq*qa u^SSel  IOd$CI?,66aA?( v Z//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== class LaunchPuffVX expands SLSmokeVX; var() float Intro; var() float life; var float elapsed; var bool bShorted; simulated function BeginPlay () { Velocity=vector(Rotation) * 15.00; elapsed=life; } simulated function Tick (float D) { if ( Level.bDropDetail && !bShorted ) { life /= 4.00; elapsed /= 4.00; Intro /= 2.00; bShorted=True; } if ( elapsed > life - Intro ) { ScaleGlow=(life - elapsed) / Intro; DrawScale=Default.DrawScale * ScaleGlow; } else { ScaleGlow=elapsed / (life - Intro); DrawScale=Default.DrawScale + 1.00 * (1.00 - ScaleGlow); } LightBrightness=ScaleGlow * Default.LightBrightness; elapsed -= D; if ( elapsed < 0 ) { Destroy(); } }  ? l  Ct#a!Jq!J *I l Ov2>[ a [ +$<U%U [ _G IWd 9pAYs IdL>I *W//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** HUD overlay when piloting. Inserted as a HUD mutator at launch. To anyone reading this: This is sludge layered upon sludge. No attempt has been made to make it readable or configurable. For the next version... */ class SLHUDVX extends SLMutatorVX config (RocketX3); // IMPORTS // #exec OBJ LOAD FILE=..\Textures\SLV2Textures.utx PACKAGE=SLV2Textures // DATA // var StrangeShellVX sl; // The controller. var() color col1; // Main HUD color. var() color col2; // Bluish color for the gauges. var() color col3; // White color for debugging, etc. var() color col4; // Reddish color to draw the keys in. var() float lucent; // Factor to lighten some parts of the HUD. var() float fade; // Fade time in seconds for the reticule. var() float warnBlink; // Timer rate for warning blink. var() float warnLvl; // Warnings go off at this level. /* Various fonts. */ var Font font, lgFont; var Font debugFont; var() float u2m; var bool bInit; var float screenFade; // Screen (green) fades in. //var bool in; // Fading in or out? //var float reticuleFade; //var float hudFadeIn; var float shakemag; // Magnitude of shaking, in pixels. var int shakex; // For afterburner shakes. var int shakey; // For afterburner shakes. var() float shakeRate; // Rate at which shaking subsides. var int skewx, skewy; var bool bWarned; // Single alarm bell for fuel low with cores. var bool bAlarm; // Flips the color in timer(). var() config bool bShowKeys; // Show the keys initially? var float keysFade; // Fading out. var int keysSlide; // Slide in. var() string keys[6]; // Key texts. var float keymax; // Max key string length. var int keysUp; // If they don't fit on the right, knock them up a bit. /** Level gauges. */ var HUDLevelVX throLvl, veloLvl, hullLvl, fuelLvl, coreLvl; var int retw, reth; var float retScale; var int indw, indh; var int slide; // Used for sliding in and out of shoot mode. //var bool bNoShoot; //var() color noShootColor; //var float nsFade; var Canvas c; var StylusVX yy; var UtilVX u; // METHODS // function postBeginPlay() { local Font lg, sm; u = spawn(Class'UtilVX', self); u.setDebugLevel(DL_Verbose); sl = StrangeShellVX (owner); sl.HUD = self; ho = PlayerPawn(sl.getPilot()); register(); // Gunner may get a (takeover) HUD if the rider ejects. /* Takeovers off for now. if (ho == none && sl.gunner != none) { ho = PlayerPawn(sl.gunner); } */ //reticuleFade = 0.0; //in = true; screenFade = 0.0; slide = -1; lg = class'FontlibVX'.static.getFont(FS_Slick, true); sm = class'FontlibVX'.static.getFont(FS_Slick, false); font = sm; lgFont = class'FontlibVX'.static.getFont(FS_Title); debugFont = class'FontlibVX'.static.getFont(FS_Normal); throLvl = spawn(class'HUDLevelVX', self); throLvl.init(0, "THRO", "%", lg, sm); veloLvl = spawn(class'HUDLevelVX', self); veloLvl.init(0, "VELO", "m/s", lg, sm, throLvl); hullLvl = spawn(class'HUDLevelVX', self); hullLvl.init(0.20, "HULL", "%", lg, sm, veloLvl); fuelLvl = spawn(class'HUDLevelVX', self); fuelLvl.init(0.20, "FUEL", "", lg, sm, hullLvl); //fuelLvl.label2 = "CORES"; coreLvl = spawn(class'HUDLevelVX', self); coreLvl.init(0, "CORES", "", lg, sm, fuelLvl); coreLvl.bNoFitLabels = true; yy = spawn(Class'StylusVX', self); } function init(Canvas c) { local int x, y; local int w, h; // Only slide in from first init() call. if (slide == -1) { slide = c.clipx; keysSlide = -1; } /* if (clipx < 640) { retw = 64; reth = 24; } else if (clipx <= 800) { retw = 128; reth = 32; } else { retw = 256; reth = 48; } */ retw = max(128, c.clipx * 0.16); reth = retw * 0.25; indw = 70; // Reset in drawIndicators(). indh = reth - 13; x = (c.clipx + retw) * 0.5; y = (c.clipy - reth) * 0.5 + 2; w = reth; //32; h = reth - 4; //28; throLvl.position(x, y, w, h); veloLvl.position(x + (w + 1) * 1, y, w, h); hullLvl.position(x + (w + 1) * 2, y, w, h); fuelLvl.position(x + (w + 1) * 3, y, w, h); coreLvl.position(x + (w + 1) * 4, y, w / 4, h); bInit = true; } auto state Norm { function beginState() { bAlarm = false; bWarned = false; } } state Warning { function beginState() { alarm(); setTimer(warnBlink, false); } function timer() { alarm(); } function alarm() { if (fuelLvl.alarmOn() || hullLvl.alarmOn()) { bAlarm = !bAlarm; if (bAlarm) { // If we're low on fuel and we have cores, only play the alarm once. if (!bWarned || hullLvl.alarmOn() || coreLvl.realLvl == 0) { ho.playSound(sl.warnSound, SLOT_None, 1.0); bWarned = true; } } setTimer(warnBlink, false); } else { gotoState('Norm'); } } } /** Destroys us. */ function bool noMore() { if (sl == none || sl.getPilot() == none || sl.bDestroyed) { destroy(); return true; } return false; } function postRender(Canvas c) { local int i; local vector x, y, z; // Screen center point. local int pods; local string vstr; local float xl, yl; if (noMore()) return; // Store the canvas! We use it throughout, without passing it // between functions. self.c = c; // Behind view? No HUD. if (ho.bBehindView) return; // Takeover HUD? Don't need to be init'ed. /* Off for now. if (ho == sl.gunner) { yy.setCanvas(c); c.font = lgFont; // Fade the last second. c.drawColor = col4 * fmin(1.0, sl.toTime); vstr = "EMERGENCY TAKEOVER IN " $ left(sl.toTime, 3); c.textSize(vstr, xl, yl); yy.drawFrame(yy.cx - 2, yy.cy - 82, xl + 4, yl + 2, 1, true, true); c.setPos(yy.cx, yy.cy - 80); yy.drawText(vstr); // Kind of a hack, but not bad. //reinit(); return; } */ // setCanvas returns true on a resize. if (yy.setCanvas(c) || !bInit) init(c); // Total commitment! if (sl.bMarchPlaying) { col1 = col3; } else { col1 = default.col1; } // TAKE THIS OUT LATER. FIX. /* c.setPos(100, 200); c.font = debugFont; c.drawText("dot dot: " $ normal(vector(sl.getPilot().viewRotation)) dot normal(sl.velocity)); c.drawText("dyaw: " $ (sl.getPilot().viewRotation.yaw & 65535) - (rotator(sl.velocity).yaw & 65535)); */ c.style = ERenderStyle.STY_Translucent; // No need to draw the HUD if it's off screen. if ((sl.bShootMode || sl.getPilot() != ho) && slide == yy.clipx) { /* if (nsFade > 0.0) { c.drawColor = (15 * ChallengeHUD(ho.myHUD).crosshairColor) * nsFade; c.setPos(yy.cx - 32, yy.cy - (32 + 64)); c.drawIcon(Texture'SLV2Textures.slhud.noshoot', 1.0); } */ return; } // Visor is high detail only. if (level.bHighDetailMode) { c.drawColor = col3 * 0.7; yy.setPos(yy.cx - retw / 2.0 - indw - 40, yy.cy - (reth * 2.0) / 2.0); c.style = ERenderStyle.STY_Modulated; //c.drawRect(Texture'SLV2Textures.slhud.visor', yy.clipx - c.curx, reth * 2.0); // } c.drawRect(Texture'RocketX3.slhud.visor', yy.clipx - c.curx, reth * 2.0); } if (level.bHighDetailMode) { c.style = ERenderStyle.STY_Translucent; } else { c.style = ERenderStyle.STY_Normal; } if (Class'UtilVX'.default.bExpires) { c.drawColor = col3 * screenFade; vstr = "NOT FOR PUBLIC RELEASE. AUTHORIZED USE ONLY. " $ Class'UtilVX'.static.getVersionString(); c.font = debugFont; c.textSize(vstr, xl, yl); yy.setPos(yy.clipx - (6 + xl), yy.cy + reth / 2 + 4); yy.drawText(vstr); } // Draw the hijacked keys. if (bShowKeys) drawKeys(); // Indicator lights! drawIndicators(yy.cx - retw / 2 - indw, yy.cy + reth / 2.0 - indh); drawHRot(yy.cx - retw / 2 - indw, yy.cy - reth / 2.0); //drawVRot(yy.cx - retw / 2 - indw - 32, yy.cy - reth / 2.0); // The levels get their first color choice from the existing // canvas color. Need to set it here. c.drawColor = col1; // Throttle level. throLvl.render(yy); veloLvl.render(yy); hullLvl.render(yy); fuelLvl.render(yy); if (sl.fc != none && sl.fc.getAmmo() > 0) { // Normally this would fuck things up, but we're the last gauge. c.drawColor = col2; coreLvl.render(yy); } drawReticule(yy.cx - retw / 2.0, yy.cy - reth / 2.0); /* if (sl.gunner != none && sl.gunner.isA('Bot')) { gunnerDisplay(c, Bot(sl.gunner), yy.cx, yy.cy); } */ // Targets! drawTargets(); drawLogo(yy, yy.cx - retw / 2 - indw, yy.cy - reth / 2); // Keep going down the chain. if (nextHUDMutator != none) nextHUDMutator.postRender(c); } function drawLogo(StylusVX s, int x, int y) { local int style; c.drawColor = col1 * screenFade; s.setPos(x - 32, y); c.drawRect(Texture'RocketX3.slhud.logo', 32, 32); c.drawColor = col1 * screenFade * 0.20; if (reth > 32) // Missing lower right. style = 3; s.drawFrame(x - 21, y, 21, 32, style); } /** Let the player know what the hijacked key settings are. The box initially slides in from the left and then fades out. This has been hacked around so much. It needs to be cleaned out. */ function drawKeys() { local int x, y, i; local float xl, yl; local bool fill; local int sep; local String rstr; if (keysFade > 0 || keysSlide == -1) { x = -1 - keysSlide; y = (c.clipy - reth) / 2.0 - keysUp; c.font = lgFont; // get the yl c.textSize(keys[0], xl, yl); for (i = 0; i < arrayCount(keys); i++) { // If we haven't set the max yet, don't draw anything. if (keysSlide >= 0) { c.setPos(x + 6, y + 2 + (yl - 1) * i); sep = instr(keys[i], "("); c.drawColor = col4 * fmin(1.0, keysFade); if (sep == -1) { // Title. yy.drawText(keys[i]); } else { // Key name. c.drawColor = c.drawColor * 0.6; yy.drawText(left(keys[i], sep)); // Function. c.drawColor = col4 * fmin(1.0, keysFade); rstr = right(keys[i], len(keys[i]) - sep); c.textSize(left(keys[i], sep), xl, yl); c.setPos(x + 6 + xl, c.cury); yy.drawText(rstr); } } else { c.textSize(keys[i], xl, yl); if (xl > keymax) keymax = xl; } } // We'll miss the first pass, but that's alright, as we'll be // offscreen. FIX? Doesn't take into account max skew. if (((yy.clipx - retw) / 2.0) - indw - 30 < keymax) { keysUp = (yl - 1) * arrayCount(keys) + 4 + reth / 2.0; } else { keysUp = 0; } if (keysSlide >= 0) { fill = level.bHighDetailMode; if (fill) c.drawColor = col4 * (fmin(1.0, keysFade) / 4.0); yy.drawFrame(x, y, keymax + 8, (yl - 1) * arrayCount(keys) + 2, 1, fill, true); } else { keysSlide = keymax + x + 6; // This makes is so it sticks longer. keysFade = 7.0; } } } function drawReticule(int x, int y) { local int sret; local int cx, cy; local color col, retcol; local int w; cx = x + retw / 2; cy = y + reth / 2; if (level.bHighDetailMode) { col = col1 * 0.2 * screenFade; } else { col = col1 * screenFade; } retcol = col1 * (1.0 - retScale) * screenFade; c.drawColor = col; yy.setPos(cx, cy - 8); yy.pix(1, 6); yy.setPos(cx, cy + 2); yy.pix(1, 6); yy.drawFrame(x, y, retw, reth, 4); c.drawColor = retcol; if (sl.bMarchPlaying) { yy.setPos(x + 4, y + 4); c.font = font; yy.drawText("TOTAL COMMITMENT"); return; } // The rounding makes it looks nicer - more centered. We take the // sides in by one pixel so it doesn't overlap the frame in low detail mode. w = retw - 2; yy.drawFrame(x + 1 + round(((1.0 - retScale) * w) * 0.5), y + round(((1.0 - retScale) * reth) * 0.5), round(w * retScale), round(reth * retScale), 1); } function drawHRot(int x, int y) { local float dpp; local float xl, yl; local float head, left; local int i; local float edgeFade; dpp = 1.0; c.font = font; head = toHeading(rotator(sl.velocity).yaw); left = head - indw * 0.5 * dpp; if (level.bHighDetailMode) { c.drawColor = col1 * lucent * screenFade; yy.drawFrame(x, y, indw, reth - indh - 1, 3, true); } for (i = (left / 15) * 15; i < ((head - left) + head); i += 15) { if (i >= left) { //edgeFade = 1.0 - (abs(head - i) / (indw * 0.5)); edgeFade = (abs(head - i) / dpp); // Ugh. This part is hardcoded for indw. if (edgeFade > 20) { edgeFade = fmax(0.0, 1.0 - ((edgeFade - 20) / 10.0)); } else { edgeFade = 1.0; } yy.setPos(x + (i - left) * dpp, y + 1); if (i % 45 == 0) { c.drawColor = col1 * 0.4 * screenFade * edgeFade; yy.pix(1, 3); c.textSize(i, xl, yl); yy.setPos(x + (i - left) * dpp - (xl * 0.5), y + 6); yy.drawText(i); } else { c.drawColor = col1 * lucent * screenFade * edgeFade; yy.pix(1, 2); } } } c.textSize(int(head), xl, yl); yy.setPos(x + indw / 2.0 - xl * 0.5, y + 6); c.drawColor = col1 * screenFade; yy.drawText(int(head)); } function float toHeading(int yaw) { if (yaw < 0) { yaw = 65535 + yaw; } return (yaw / 65535.0) * 360.0; } function drawVRot(int x, int y) { c.drawColor = col1 * lucent * screenFade; yy.drawFrame(x, y, 32, reth, 0, true); c.drawColor = col1 * screenFade; } function drawIndicators(int x, int y) { local float xl, yl; local string whs; local color on, off; whs = "WARHEAD: "; c.font = font; c.textSize("h", xl, yl); /* FIX? if (indh < yl * 3) { c.font = font; c.textSize("h", xl, yl); } */ c.textSize(whs $ "DISARMED", xl, yl); indw = xl + 20; if (level.bHighDetailMode) { on = col1 * screenFade; off = col1 * lucent * screenFade; c.drawColor = off; yy.drawFrame(x, y, indw, indh, 2, true); } else { on = col1 * screenFade; off = col1 * 0.5 * screenFade; } // Vertically center them. y += (indh - yl * 3) / 2; c.textSize(whs $ "DISARMED", xl, yl); c.drawColor = on; yy.setPos(x + 4, y + 1); switch (sl.warstat) { case WH_Auto: yy.drawText(whs $ "AUTO"); break; case WH_Armed: yy.drawText(whs $ "ARMED"); break; case WH_Disarmed: yy.drawText(whs $ "DISARMED"); break; } yy.setPos(x + 4, y + yl); if (sl.gunner == none) { c.drawColor = off; } else { c.drawColor = on; } yy.drawText("GUNNER ONBOARD"); yy.setPos(x + 4, y + yl * 2 - 1); if (sl.bAfterburn) { c.drawColor = on; } else { c.drawColor = off; } yy.drawText("AFTERBURNERS ON"); } function drawTargets() { local Pawn p; local Inventory i; local vector x, y, z; getaxes(ho.viewRotation, x, y, z); c.font = font; foreach sl.visibleCollidingActors(class'Pawn', p, 3000,, true) { drawTarget(p, x, y, z); } foreach sl.visibleCollidingActors(class'Inventory', i, 3000,, true) { drawTarget(i, x, y, z); } } /** Inspired by Botpack.GuidedWarshell. */ function drawTarget(Actor a, vector x, vector y, vector z) { local float da, dist; local int xpos, ypos; local vector dir; local Color color; dir = a.location - sl.location; dist = vsize(dir); dir = normal(dir); // 1.0 is the middle, 0.7 is edge of screen. da = dir dot x; if (da > 0.94) { if (a.isA('Inventory')) { color = col2; } else { color = col4; } xpos = 0.5 * yy.clipx * (1 + 1.4 * (dir dot y)); ypos = 0.5 * yy.clipy * (1 - 1.4 * (dir dot z)); // Closer is brighter. c.drawColor = color * screenFade * ((da - 0.94) / 0.06) * fclamp((3000.0 - dist) / 1000.0, 0.0, 1.0); yy.drawFrame(xpos - 8, ypos - 8, 16, 16, 1); yy.setPos(xpos - 8, ypos + 9); yy.drawText(int((dist * u2m)) $ "m"); //drawText("x:" $ (dir dot y) $ " y:" $ (dir dot z)); } } function gunnerDisplay(Canvas c, Bot b) { c.drawColor = col1; c.font = lgFont; c.setPos(20, yy.cy + 40); yy.drawText("bot gunner: health: " $ b.health $ " orders: " $ b.orders $ " order object: " $ b.orderObject $ " state: " $ b.getStateName() $ " move target: " $ b.moveTarget); } /** This takes the difference between the direction of the rocket and the rotation, and skews the HUD. We scale the yaw delta based on the pitch. The pitch is locked in StrangeShell.adjustGuideRotation() to 16384. That 18000 jive messes with this. */ function setSkew() { local float pitch; local float dyaw, dpitch; local float maxd; local int maxskew; maxd = 16384.0; maxskew = yy.clipx / 8; dyaw = (rotator(sl.velocity).yaw & 65535) - (sl.rotation.yaw & 65535); pitch = sl.rotation.pitch & 65535; dpitch = pitch - (rotator(sl.velocity).pitch & 65535); u.centerRotComp(dyaw); u.centerRotComp(dpitch); u.centerRotComp(pitch); // This is unecessary since we're clamping the guide rotation to // below 16384, but it looks nicer anyway. dyaw = dyaw * (1.0 - fmin(abs(pitch) / maxd, 1.0)); skewx = clamp(int(((dyaw / maxd) * maxskew) + 0.5), -maxskew, maxskew); skewy = clamp(int(((dpitch / maxd) * maxskew) + 0.5), -maxskew, maxskew); } /** Tick. Updates timers and stuff. */ function tick(float delta) { if (noMore()) return; register(); // Don't go any further. if (!bInit) return; // Update gauges. if (sl.bAfterburn) throLvl.update(delta, 1.5, "100"); else throLvl.update(delta, sl.thlvl, string(int(sl.thlvl * 100))); veloLvl.update(delta, vsize(sl.velocity) / sl.fullspeed, int(u2m * vsize(sl.velocity))); hullLvl.update(delta, sl.armor / sl.default.armor, int(sl.armor)); fuelLvl.update(delta, sl.fuel / sl.default.fuel, int(sl.fuel)); if (sl.fc != none) coreLvl.update(delta, float(sl.fc.getAmmo()) / sl.fc.getMaxAmmo(), sl.fc.getAmmo()); // Alarm check. if (fuelLvl.alarmOn() || hullLvl.alarmOn()) gotoState('Warning'); if (sl.bShootMode || sl.getPilot() != ho) { if (slide < yy.clipx) { slide = fmin(yy.clipx, slide + yy.clipx * 3.0 * delta); } else { // This was a hack and a crutch anyway. //updateNoShoot(delta); // No need to update anything else - the HUD is off screen. return; } } else { // Reset this. //nsFade = 0.0; if (slide > 0) { slide = fmax(0, slide - yy.clipx * 2.0 * delta); } } // Keys. if (bShowKeys) { if (keysSlide > 0) { keysSlide = max(0, keysSlide - delta * 300.0); // keys slide rate } else if (keysFade > 0) { keysFade = fmax(0.0, keysFade - delta * 0.5); // keys fade rate } } if (slide == 0 && screenFade < 1.0) { screenFade = fmin(1.0, (screenFade + delta * 0.5)); // + frand() * 0.01); } retScale += delta * fade * (vsize(sl.velocity) / ((sl.maxSpeed + sl.minSpeed) / 2.0)); if (retScale > 1.0) retScale = 0.0; setOffsets(delta); } function setOffsets(float delta) { // Handle HUD shaking. if (shakemag > 0.0) { shakemag = fmax(0.0, shakemag - delta * shakeRate); } if (sl.bAfterburn && shakemag < 3) { shakemag = 3.0; } if (shakemag > 0) { shakex = (rand(shakemag) - shakemag / 2.0); shakey = (rand(shakemag) - shakemag / 2.0); } else { shakex = 0; shakey = 0; } setSkew(); yy.setOffsets(shakex + slide + skewx, shakey + skewy); } function shake(int sev) { if (!sl.bShootMode) { // Sometimes the shaking gets out of control... shakemag = min(shakemag + sev, 90); } } function int round(float f) { return int(0.5 + f); } /** Destroy us. But first take us out of the HUD mutator list. */ function destroyed() { local Mutator m; if (ho != none && ho.myHUD != none) { m = ho.myHUD.HUDMutator; if (m != none) { if (m.isA('SLHUDVX')) { if (m == self) { ho.myHUD.HUDMutator = m.nextHUDMutator; } } else { while (m.nextHUDMutator != none) { if (m.nextHUDMutator == self) { m.nextHUDMutator = m.nextHUDMutator.nextHUDMutator; } m = m.nextHUDMutator; } } } } super.destroyed(); } // end `hH Bgĸ|G5!AJ//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== class Neutral expands Decoration; #exec MESH IMPORT MESH=Neutral ANIVFILE=MODELS\Neutral_a.3d DATAFILE=MODELS\Neutral_d.3d X=0 Y=0 Z=0 #exec MESH ORIGIN MESH=Neutral X=0 Y=0 Z=0 #exec MESH SEQUENCE MESH=Neutral SEQ=All STARTFRAME=0 NUMFRAMES=54 //#exec MESH SEQUENCE MESH=Neutral SEQ=??? STARTFRAME=0 NUMFRAMES=54 #exec MESHMAP NEW MESHMAP=Neutral MESH=Neutral #exec MESHMAP SCALE MESHMAP=Neutral X=0.1 Y=0.1 Z=0.2 #exec TEXTURE IMPORT NAME=JNeutral FILE=Neutral.pcx GROUP=Skins FLAGS=2 #exec TEXTURE IMPORT NAME=JNeutral FILE=Neutral.pcx GROUP=Skins PALETTE=JNeutral #exec MESHMAP SETTEXTURE MESHMAP=Neutral NUM=1 TEXTURE=JNeutral eR "R a R +$  *a3//===================================================================== // RocketV1. 555 ---===CrAzYBoNeS===--- 555 // // ""()Frgd()"" // **Monarch** Mr. S-D // Thank you Al McElrath for SLV2 & Chimeric for this trailer code! //===================================================================== class XSFRed expands Projectile; #exec MESH IMPORT MESH=XSFRed ANIVFILE=MODELS\XSFRed_a.3d DATAFILE=MODELS\XSFRed_d.3d X=0 Y=0 Z=0 #exec MESH ORIGIN MESH=XSFRed X=0 Y=0 Z=0 #exec MESH SEQUENCE MESH=XSFRed SEQ=All STARTFRAME=0 NUMFRAMES=30 #exec MESHMAP NEW MESHMAP=XSFRed MESH=XSFRed #exec MESHMAP SCALE MESHMAP=XSFRed X=0.1 Y=0.1 Z=0.2 #exec TEXTURE IMPORT NAME=JSFRed FILE=JSFRed.pcx GROUP=Skins FLAGS=2 #exec TEXTURE IMPORT NAME=JSFRed FILE=JSFRed.pcx GROUP=Skins PALETTE=JSFRed #exec MESHMAP SETTEXTURE MESHMAP=XSFRed NUM=1 TEXTURE=JSFRed var() int Pos, MaxTrails; // Position in trail & maximum number of trails var XSFRed Next; // Next part of the trail, Owner is used to keep track of previous part of trail var() float lagBy; // Time delay to lag the trail updating by var() float cntr; var() classXSFRedClass; // What to spawn as trails var() vector TrailOffset; // Location on a cylinder around the object being trailed that trail should appear from // X = radius, Y = elevation, Z = angle, e.g. 10UUs directly behind at same level would be vector(10,0,180) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// replication { unreliable if (role == ROLE_Authority && bNetOwner) Pos; } simulated function Update() // Update the trailer { local vector Offset; local float Alpha, X, Y; if (Next != None) // Call Update() on next trail Next.Update(); if (Pos == 0) // Move to where the previous part of the trail was (or player location for that matter) { Alpha = Owner.Rotation.Yaw / 10430.2192; // Convert Owner horizontal rotation into radians Alpha += (TrailOffset.Z / 180 * Pi); // Rotate it through TrailOffset.Z if (Alpha > 2 * Pi) Alpha -= 2 * Pi; X = TrailOffset.X * Cos(Alpha); // Calculate cylinder co'ordinates Y = TrailOffset.X * Sin(Alpha); Offset.X = X; Offset.Y = Y; Offset.Z = TrailOffset.Y; SetLocation(Owner.Location + Offset); } else { SetLocation(Owner.Location); } SetRotation(Owner.Rotation); if (Pos < MaxTrails && Next == None) // Spawn additional trails as necessary { Next = Spawn(XSFRedClass, self,, Location, Rotation); //Next.Pos = Pos + 1; } } simulated function Destroyed() // Make sure the whole trail gets destroyed at once { Super.Destroyed(); if (Next != None) Next.Destroy(); } simulated function tick(float DeltaTime) // Handle updating of trail location { // Destroy if there's no owner if (Owner == None) Destroy(); if (Pos > 0) // First trail should tell next trail to update & so on return; cntr += DeltaTime; if (cntr >= lagBy) // Lag location update by lagBy ticks { cntr = 0.0; Update(); } } // The End  <q3//===================================================================== // RocketV1. 555 ---===CrAzYBoNeS===--- 555 // // ""()Frgd()"" // **Monarch** Mr. S-D // Thank you Al McElrath for SLV2 & Chimeric for this trailer code! //===================================================================== class XSFBlue expands Projectile; #exec MESH IMPORT MESH=XSFBlue ANIVFILE=MODELS\XSFBlue_a.3d DATAFILE=MODELS\XSFBlue_d.3d X=0 Y=0 Z=0 #exec MESH ORIGIN MESH=XSFBlue X=0 Y=0 Z=0 #exec MESH SEQUENCE MESH=XSFBlue SEQ=All STARTFRAME=0 NUMFRAMES=30 #exec MESHMAP NEW MESHMAP=XSFBlue MESH=XSFBlue #exec MESHMAP SCALE MESHMAP=XSFBlue X=0.1 Y=0.1 Z=0.2 #exec TEXTURE IMPORT NAME=JSFBlue FILE=JSFBlue.pcx GROUP=Skins FLAGS=2 #exec TEXTURE IMPORT NAME=JSFBlue FILE=JSFBlue.pcx GROUP=Skins PALETTE=JSFBlue #exec MESHMAP SETTEXTURE MESHMAP=XSFBlue NUM=1 TEXTURE=JSFBlue var() int Pos, MaxTrails; // Position in trail & maximum number of trails var XSFBlue Next; // Next part of the trail, Owner is used to keep track of previous part of trail var() float lagBy; // Time delay to lag the trail updating by var() float cntr; var() classXSFBlueClass; // What to spawn as trails var() vector TrailOffset; // Location on a cylinder around the object being trailed that trail should appear from // X = radius, Y = elevation, Z = angle, e.g. 10UUs directly behind at same level would be vector(10,0,180) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// replication { unreliable if (role == ROLE_Authority && bNetOwner) Pos; } simulated function Update() // Update the trailer { local vector Offset; local float Alpha, X, Y; if (Next != None) // Call Update() on next trail Next.Update(); if (Pos == 0) // Move to where the previous part of the trail was (or player location for that matter) { Alpha = Owner.Rotation.Yaw / 10430.2192; // Convert Owner horizontal rotation into radians Alpha += (TrailOffset.Z / 180 * Pi); // Rotate it through TrailOffset.Z if (Alpha > 2 * Pi) Alpha -= 2 * Pi; X = TrailOffset.X * Cos(Alpha); // Calculate cylinder co'ordinates Y = TrailOffset.X * Sin(Alpha); Offset.X = X; Offset.Y = Y; Offset.Z = TrailOffset.Y; SetLocation(Owner.Location + Offset); } else { SetLocation(Owner.Location); } SetRotation(Owner.Rotation); if (Pos < MaxTrails)// && Next == None) // Spawn additional trails as necessary { Next = Spawn(XSFBlueClass, self,, Location, Rotation); //Next.Pos = Pos + 1; } } simulated function Destroyed() // Make sure the whole trail gets destroyed at once { Super.Destroyed(); if (Next != None) Next.Destroy(); } simulated function tick(float DeltaTime) // Handle updating of trail location { // Destroy if there's no owner if (Owner == None) Destroy(); if (Pos > 0) // First trail should tell next trail to update & so on return; cntr += DeltaTime; if (cntr >= lagBy) // Lag location update by lagBy ticks { cntr = 0.0; Update(); } } // The End mej.^@B@z@-R' wC $QD ,*a/!8 wk*q!D t//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Utility object. Handles debugging, release info, and beta expiration functions. */ class UtilVX extends SLInfoVX config (RocketX3); // DATA // var() string version; var() string vstr; var() string when; var() int build; // Expiration date. var() int expm; var() int expd; var() int expy; var() config bool bExpires; var() string expiredMsg; // The player who's the viewport. var PlayerPawn player; /** This is how the debugging system works. Each object spawns its own util. The default debugging level is default.defaultDL. Each util can have its own defaultDL as well (set via setDebugLevel()). The outputDL is the level of verbosity at which we actually output. Again, there is a default and each util can a separate output level. Console logging has a separate outputDL that works similarly, consoleOutputDL. */ enum EDebugLevel { DL_Default, DL_Error, DL_Normal, DL_Verbose }; var() config EDebugLevel outputDL; var() config EDebugLevel consoleOutputDL; var() config EDebugLevel defaultDL; /** Keeps track of when the last debug was called for each function. */ var float fstamp[4]; var string fname[4]; //var() bool bLeftMeshesLoaded; //var() string leftWeapons[2]; // METHODS // function postBeginPlay() { if (level.netmode != NM_DedicatedServer) setPlayer(); } function bool setPlayer() { local PlayerPawn pp; // Get the viewport for console logging. foreach allActors(class'PlayerPawn', pp) { if (hasViewport(pp)) { player = pp; return true; } } return false; } /** Instead of 0 to 65536, it makes it -16384 to 16384. */ function centerRotComp(out float comp) { if (comp < -32768) comp += 65536; else if (comp > 32768) comp -= 65536; } /** Useful function to keep those if statements short. */ function bool hasViewPort(Actor a) { return (a != none && a.isA('PlayerPawn') && PlayerPawn(a).player != none && ViewPort(PlayerPawn(a).player) != none); } /** Are we playing a legacy (non-Strangelove) gametype? */ function bool legacy() { return (!(level.game.isA('Strangewar') || level.game.isA('Strangerace'))); } function setDebugLevel(EDebugLevel l) { defaultDL = l; } function setOutputLevel(EDebugLevel l) { outputDL = l; } function setConsoleOutputLevel(EDebugLevel l) { consoleOutputDL = l; } /** Pass an actor reference and debug string (usually function name). */ function debug(string s, optional EDebugLevel dl, optional float wait, optional string tag) { local Actor a; local string msg; local string ostr; if (dl == DL_Default) dl = defaultDL; // No waiting if verbose. if (wait > 0.0 && outputDL != DL_Verbose && !waitover(getFuncName(s), wait)) return; if (dl <= outputDL) { a = self.owner; if (tag == "") tag = "DEBUG"; if (level.netmode != NM_Standalone) tag = tag @ theTime(); else tag = tag @ level.timeseconds; msg = tag @ "in "; if (a != none) msg = msg $ sname(a) $ "(" $ sname(a.owner) $ ")." $ s; else msg = msg $ "unknown()." $ s; log(msg); if (dl <= consoleOutputDL && level.netmode != NM_DedicatedServer) { if (player != none || (player == none && setPlayer())) { // This could be done better. FIX. if (wait > 0.0 && (outputDL == DL_Verbose && consoleOutputDL != DL_Verbose) && !waitover(getFuncName(s), wait)) return; player.player.console.message(player.playerReplicationInfo, msg, 'debug'); } } } } function err(string s) { debug(s, DL_Error, 0.0, "ERROR!"); } function string theTime() { local int ms; local string mss; ms = level.millisecond; if (ms < 100) mss = "0" $ ms; else mss = string(ms); return (level.hour $ ":" $ level.minute $ ":" $ level.second $ "." $ mss); } /** Only print debugs for this func every w seconds. */ function bool waitover(string func, float w) { local int i; local float t; t = level.timeseconds; for (i = 0; i < arrayCount(fstamp); i++) { if (fname[i] == func) { if (t - fstamp[i] > w) { fstamp[i] = t; return true; } else { return false; } } } // Didn't find the func name, insert it. for (i = 0; i < arrayCount(fstamp); i++) { if (fname[i] == "") { fname[i] = func; fstamp[i] = t; // Don't debug initially. return false; } } // Need to increase the fstamp and fname arrays... err("wait(" $ func $ ", " $ sf(w) $ "): no tags slots"); return false; } function string getFuncName(string s) { local int i; i = instr(s, "("); return left(s, i); } function string sv(vector v, optional bool bSize) { local string size; if (bSize) size = " vsize=" $ chopf(vsize(v)); return "(x=" $ chopf(v.x) $ " y=" $ chopf(v.y) $ " z=" $ chopf(v.z) $ size $ ")"; } function string sr(rotator r) { return "(p=" $ r.pitch $ " y=" $ r.yaw $ " r=" $ r.roll $ ")"; } /** Cuts off trailing 0's. */ function string sf(float f) { local string s; s = string(f); while (right(s, 1) == "0") { s = left(s, len(s) - 1); } if (right(s, 1) == ".") { s = s $ "0"; } return s; } /** Chops off anything after the tenths place. */ function string chopf(float f, optional float nochop) { local string s; local int i; if (abs(f) < nochop) return string(f); s = string(f); i = instr(s, "."); s = left(s, i + 2); return s; } function string sname(Actor a) { if (a != none) { if (a.isA('Pawn')) { return Pawn(a).playerReplicationInfo.playername; } else { return noMap(a); } } else { return "none"; } } function string noMap(Actor a) { local int index; index = instr(a, "."); if (index == -1) { return string(a); } else { return right(a, len(a) - index - 1); } } /** Parses the damage string and sets it in the GameInfo. */ function setDamageString(string s, Actor k, Actor o) { debug("setDamageString(" $ s $ ", " $ sname(k) $ ", " $ sname(o) $ ")"); level.game.specialDamageString = parseKillString(s, k, o); } /** Handles pronouns and such that parseKillMessage() doesn't. pkm() still handles %k, %o, and %w, though. This has to be called first. If we are passing this to pkm(), bNames should be false. Note pkm() silently fails if you don't use %k. */ function string parseKillString(string s, Actor killer, Actor other, optional bool bNames) { if (killer != none && killer.isA('Pawn') && Pawn(killer).bIsFemale) { replace(s, "%kpa", "her"); replace(s, "%kop", "her"); } else { replace(s, "%kpa", "his"); replace(s, "%kop", "him"); } if (other != none && other.isA('Pawn') && Pawn(other).bIsFemale) { replace(s, "%opa", "her"); replace(s, "%oop", "her"); } else { replace(s, "%opa", "his"); replace(s, "%oop", "him"); } if (bNames) { replace(s, "%k", sname(killer)); replace(s, "%ks", sname(killer) $ poss(sname(killer))); } else { // Leave the %k in for pkw()! replace(s, "%ks", "%k" $ poss(sname(killer))); } // We can always do %o. replace(s, "%os", sname(other) $ poss(sname(other))); debug("u.parseKillString(): returning: " $ s, DL_Verbose); return s; } /** Takes a proper name and makes it possessive. E.g. Drewbacca becomes Drewbacca's and yrns becomes yrns'. Update: Only returns what we'd tack on the end. */ function string poss(string name) { if (right(name, 1) == "s") return "'"; else return "'s"; } /** Replace in with out in str. */ function replace(out string str, string in, string out) { local int i; i = instr(str, in); if (i != -1) { str = left(str, i) $ out $ right(str, len(str) - (i + len(in))); } } static function string getVersionString() { //return default.vstr $ " build: " $ default.build $ " compiled: " $ default.when; return default.vstr $ "." $ default.build $ " built on " $ default.when; } // Beta expiration check. static function bool expiredBeta(LevelInfo level) { if (default.bExpires && !(level.year < default.expy || (level.year == default.expy && level.month < default.expm || (level.month == default.expm && level.day < default.expd)))) { log(default.expiredMsg); return true; } return false; } /** Preloads the left meshes for the necessary weapons. Called from SLWeapon.postBeginPlay(). function loadLeftMeshes() { local int i; local Class c; local SkeletalMesh m; if (!bLeftMeshesLoaded) { for (i = 0; i < arrayCount(leftWeapons); i++) { if (leftWeapons[i] != "") { c = Class(dynamicLoadObject(leftWeapons[i], Class'Class')); if (c != none) { debug("loadLeftMeshes(): loading: " $ c.default.leftMesh); m = SkeletalMesh(dynamicLoadObject(c.default.leftMesh, Class'SkeletalMesh')); } } } default.bLeftMeshesLoaded = true; } } */ // end sF "r;BA_$@DY$;Ej$zDl"@J nb FS$M$̬?MN`yQQhV $@f$pAv$AT^NUL 7L`X//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== class UT_AntiSLV expands Projectile config (RocketX3); /* // ANTISLV Skin Designed by Gene Sprague #exec MESH IMPORT MESH=AntiSlv ANIVFILE=MODELS\AntiSlv_a.3d DATAFILE=MODELS\AntiSlv_d.3d LODSTYLE=2 #exec MESH ORIGIN MESH=AntiSlv X=0 Y=0 Z=100 PITCH=192 #exec MESH SEQUENCE MESH=AntiSlv SEQ=All STARTFRAME=0 NUMFRAMES=100 #exec MESH SEQUENCE MESH=AntiSlv SEQ=AntiSlv STARTFRAME=0 NUMFRAMES=100 #exec MESHMAP NEW MESHMAP=AntiSlv MESH=AntiSlv #exec MESHMAP SCALE MESHMAP=AntiSlv X=0.1 Y=0.1 Z=0.2 #exec TEXTURE IMPORT NAME=JAntiSlv FILE=Models\AntiSlv.PCX GROUP=Skins #exec MESHMAP SETTEXTURE MESHMAP=AntiSlv NUM=1 TEXTURE=JAntiSlv TLOD=30 //////////////////////////////// var Actor Seeking; var vector InitialDir; var float CannonTimer, SmokeRate; var redeemertrail trail; var class DamagePuffVXClass; var() config float AntiMaxSpeed; replication { // Relationships. reliable if( Role==ROLE_Authority ) Seeking, InitialDir; } ///////////////////////////////// simulated function PostBeginPlay() { speed = AntiMaxSpeed; SmokeRate = 0.3; SetTimer(0.3,false); Super.PostBeginPlay(); Seeking = None; Velocity = Speed * vector(Rotation); SetTimer(0.15,true); } simulated function timer() { local vector x,y,z; local float bestDist, bestAim; local vector SeekingDir; local float MagnitudeVel; local DamagePuffVX b; //ut_SpriteSmokePuff local Pawn pilot; // pawn(owner) Pilot; local actor other; local Pawn p; If (Seeking==None) { bestAim = 0.85;//0.93 seeking = instigator.PickTarget(bestAim, bestDist, Normal(Velocity), Location); } If (Seeking != None && Seeking != Instigator) { SeekingDir = Normal(Seeking.Location - Location); MagnitudeVel = VSize(Velocity); Velocity = MagnitudeVel * Normal(SeekingDir * 2.0 * MagnitudeVel + Velocity); SetRotation(rotator(Velocity)); } Velocity = Speed * vector(Rotation); if ( Trail == None ) Trail = Spawn(class'RedeemerTrail',self); // CannonTimer += SmokeRate; if ( CannonTimer > 0.6 ) { WarnCannons(); CannonTimer -= 0.6; } if ( Region.Zone.bWaterZone || (Level.NetMode == NM_DedicatedServer) ) { SetTimer(SmokeRate, false); Return; } if ( Level.bHighDetailMode ) { if ( Level.bDropDetail ) Spawn(Class'RocketX3.DamagePuffVX'); else Spawn(Class'RocketX3.DamagePuffVX'); SmokeRate = 152/Speed; } else { SmokeRate = 0.15; b = Spawn(Class'RocketX3.DamagePuffVX'); b.RemoteRole = ROLE_None; } SetTimer(SmokeRate, false); } simulated function Destroyed() { if ( Trail != None ) Trail.Destroy(); Super.Destroyed(); } function WarnCannons() { local Pawn P; for ( P=Level.Pawnlist; P!=None; P=P.NextPawn ) if ( P.IsA('TeamCannon') && !P.IsInState('TrackWarhead') && P.LineOfSightTo(self) ) { P.target = self; P.GotoState('TrackWarhead'); } } singular function TakeDamage( int NDamage, Pawn instigatedBy, Vector hitlocation, vector momentum, name damageType ) { if ( NDamage > 5 ) { PlaySound(Sound'Expl03',,6.0); spawn(class'WarExplosion',,,Location); HurtRadius(Damage,350.0, MyDamageType, MomentumTransfer, HitLocation ); RemoteRole = ROLE_SimulatedProxy; Destroy(); } } auto state Flying { simulated function ZoneChange( Zoneinfo NewZone ) { local waterring w; if ( NewZone.bWaterZone != Region.Zone.bWaterZone ) { w = Spawn(class'WaterRing',,,,rot(16384,0,0)); w.DrawScale = 0.2; w.RemoteRole = ROLE_None; } } function ProcessTouch (Actor Other, Vector HitLocation) { if ( Other != instigator ) Explode(HitLocation,Normal(HitLocation-Other.Location)); } function Explode(vector HitLocation, vector HitNormal) { if ( Role < ROLE_Authority ) return; HurtRadius(Damage,300.0, MyDamageType, MomentumTransfer, HitLocation ); spawn(class'ShockWave',,,HitLocation+ HitNormal*16); spawn(class'RocketX3.StrangeWaveVX',,, location); spawn(class'RocketX3.BlackCloudVX',,, location); RemoteRole = ROLE_SimulatedProxy; Destroy(); } function BeginState() { local vector InitialDir; initialDir = vector(Rotation); if ( Role == ROLE_Authority ) Velocity = speed*initialDir; Acceleration = initialDir*50; } } // END */ hZ //===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** This is an f/x cl_ass used with the StrangeWave. It does not do any damage. */ class ThermoWaveVX extends StrangeWaveVX; function postBeginPlay() { disable('tick'); disable('timer'); loopAnim('rotate', 0.5); } function tick(float delta) { // Nothing. } u }V5//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** This is a wrapper over canvas that adds our own drawing functions. */ class StylusVX extends SLInfoVX; // DATA // /** Our canvas. */ var Canvas c; /** setPos() offsets. */ var int xoff, yoff; /** Center x and y coords. */ var float cx, cy; var float clipx, clipy; /** Resets the canvas. Stores center coords. Checks for a resize. */ function bool setCanvas(Canvas newc) { local bool resized; c = newc; cx = c.clipx / 2; cy = c.clipy / 2; resized = !(clipx == c.clipx); clipx = c.clipx; clipy = c.clipy; return resized; } function setOffsets(int x, int y) { xoff = x; yoff = y; } /** Styles: 0: normal. 1: rounded. 2: missing upper right wing. 3: missing lower right wing. 4: No top or bot lines. 5: No right side. */ function drawFrame(int x, int y, int w, int h, optional int style, optional bool fill, optional bool truexy) { local int re; if (style == 1) re = w - 2; else re = w - 1; setPos(x + 1, y, truexy); if (style == 4) { pix(1, 1); setPos(x + w - 1, y, truexy); pix(1, 1); setPos(x + 1, y + h - 1, truexy); pix(1, 1); setPos(x + w - 1, y + h - 1, truexy); pix(1, 1); } else { if (style == 2) re--; pix(re, 1); if (style == 2) re++; setPos(x + 1, y + h - 1, truexy); if (style == 3) re--; pix(re, 1); } setPos(x, y + 1, truexy); if (style == 1) re = w; else re = w - 1; if (fill) { pix(re, h - 2); } else { pix(1, h - 2); if (style != 5) { setPos(x + re - 1, y + 1, truexy); pix(1, h - 2); } } } /** Fill wrapper. */ function pix(int w, int h) { c.drawRect(Texture'RocketX3.slhud.levelpixel', w, h); } /** Set position with offsets. */ function setPos(int x, int y, optional bool truexy) { if (truexy) { c.setPos(x, y); } else { c.setPos(x + xoff, y + yoff); } } /** We don't normally want text to wrap, so we make a wrapper for drawText(). */ function drawText(coerce string text) { if (c.curx < c.clipx ) { c.drawTextClipped(text); } } /** Return the line height. */ function float lineh() { local float xl, yl; c.textSize("TEST", xl, yl); return yl; } /** Return the string width. */ function float strw(String s) { local float xl, yl; c.textSize(s, xl, yl); return xl; } function Color blendc(Color c1, Color c2, float x) { local Color newc; if (x > 1.0) x = 1.0; newc = c1 * (1.0 - x) + c2 * x; return newc; } @W//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Shockwave that eminates from a Strangelove detonation. */ class StrangeWaveVX extends ShockWave config (RocketX3); var() Sound detonateSound; var config float shockMult; // Mesh radius. var() float meshr; var() localized string deathStr, deathSelfStr; var() name dtype; var ThermoWaveVX slave; // Slave is upside down? var bool bSlaveDown; var UtilVX u; simulated function postBeginPlay() { local Actor a; local vector hl, hn; u = spawn(Class'UtilVX', self); u.setDebugLevel(DL_Verbose); a = trace(hl, hn, (location + vect(0, 0, -1) * 125), location, false); if (a != none) { // Set it on the ground. Looks stupid hovering! setLocation(hl); setRotation(rotator(hn) + rot(-16384, 0, 0)); } if (!level.bDropDetail && level.netmode != NM_DedicatedServer) { slave = spawn(Class'ThermoWaveVX'); slave = spawn(Class'ThermoWaveVX'); // If we're above flat ground, generate another hemisphere. if (a == none) { // Turn it upside down. slave.setRotation(rot(0, 0, -32768)); //slave.setLocation(location + vect(0, 0, 1) * 20); bSlaveDown = true; } } loopAnim('rotate', 0.7); super.postBeginPlay(); } /** Called from postBeginPlay(). */ simulated function spawnEffects() { local float v; v = 9.0 * (shockMult / default.shockMult); playSound(detonateSound, SLOT_None, v); //playSound(detonateSound, SLOT_Interface, v); playSound(detonateSound, SLOT_Misc, v); //playSound(detonateSound, SLOT_Talk, v); } simulated function setRadius() { shockSize = cos(lifespan) * shockMult; } /** This is really for looks. The dedicated server calculates the radius in timer (that's when the real work is done). */ simulated function tick(float delta) { if (level.netmode != NM_DedicatedServer) { setRadius(); scaleGlow = lifespan; ambientGlow = default.ambientGlow * (lifespan / default.lifespan); drawScale = shockSize; if (slave != none) { slave.scaleGlow = scaleGlow; slave.ambientGlow = slave.default.ambientGlow * (lifespan / default.lifespan); slave.drawScale = drawScale; if (!bSlaveDown) slave.drawScale *= 0.75; } } } simulated function timer() { local int i; local vector dir; local StrangeExplVX exp; local DamagePuffVX puff; if (level.netmode == NM_DedicatedServer) { setRadius(); } else { // Effects. if (level.bHighDetailMode && !level.bDropDetail) { for (i = 0; i < (shockMult * 0.5); i++) { dir = vrand(); dir.z *= 0.2; exp = spawn(class'StrangeExplVX',,, location + (dir * meshr * shocksize)); exp = spawn(class'StrangeExplVX',,, location + (dir * meshr * shocksize)); exp.remoteRole = ROLE_None; } } } //if (role == ROLE_Authority) vaporize(); } /** Carcass chunks are the authority on the client. */ simulated function vaporize() { local Actor victim; local float damageScale, dist, moscale; local vector dir; foreach visibleCollidingActors(class 'Actor', victim, shockSize * meshr, location) { if (victim.role == ROLE_Authority) { // Maybe someday I'll figure this out. //if (level.netmode == NM_Client) // u.debug("vaporize(): victim has authority: " $ u.sname(victim)); dir = victim.location - location; dist = fmax(1, vsize(dir)); dir = dir/dist + vect(0, 0, 0.3); if ((dist > oldShockDistance) || (dir dot victim.velocity <= 0)) { moscale = fmax(0, 1100 - 1.1 * dist); // Non-pawns don't need death messages. if (role == ROLE_Authority && victim.bIsPawn) { Pawn(victim).addVelocity(dir * (moscale + 20)); if (victim == instigator) u.setDamageString(deathSelfStr, instigator, victim); else u.setDamageString(deathStr, instigator, victim); } else { victim.velocity = victim.velocity + dir * (moscale + 20); } victim.takedamage(moscale, instigator, victim.location - 0.5 * (victim.collisionHeight + victim.collisionRadius) * dir, (1000 * dir), dtype); } } } oldShockDistance = shockSize * meshr; } simulated function destroyed() { local vector loc; if (level.netmode != NM_DedicatedServer) { if (!level.bDropDetail) spawn(Class'BlackCloudVX'); } super.destroyed(); } // end C//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== class StrangeShellVXUWindowFramedWindow expands UWindowFramedWindow; function BeginPlay() { Super.BeginPlay(); // Set the title of the Framed Window WindowTitle = "SLV6 for ---===MorTaLiTy===--- by (555)T-Bone & FrAgEd"; // The class of the Windows content ClientClass = class'StrangeShellVXUWindowDialogClientWindow'; bSizable = true; } function Created() { Super.Created(); SetSize(350, 400); WinLeft = (Root.WinWidth - WinWidth) / 2; WinTop = (Root.WinHeight - WinHeight) / 2; } Q{;3::$3-a @  u  v! v!9a!y? v|~  eCh//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== class StrangeShellVXUWindowDialogClientWindow expands UWindowDialogClientWindow; //extends var UWindowHSliderControl Slider[11]; var UWindowEditControl SpreadBox[11]; var UWindowSmallCloseButton CancelButton; var UWindowSmallButton CloseButton; var UWindowCheckBox Damage; var UWindowCheckBox NoContrails; var UWindowCheckBox Afterburn; var UWindowCheckBox CanOverride; var UWindowCheckBox BotsObeyOrders; //var UWindowCheckBox Checkbox; var() config int Fuel; // Amount of fuel (in seconds). var() config int Armor; // Rocket Hull (Armor). var() config int teamDamage; // Rocket friendly-fire. var() config int minspeed; // Minimum speed for the rocket. var() config int fullspeed; // Max speed without burners. var() config int RocketMaxSpeed; // Full afterburner max speed / Projectile max speed var() config int RocketAccelMax; // Rocket Acceleration Ratio. var() config int RocketFuelRate; // Fuel consumption without afterburner var() config int RocketBurnerRate; // Extra fuel ratio you burn. var() config int SlideFX; // Setting sliding effect on the rocket var() config int AirBrakes; // did i need to explain? var() config bool DamageFX; // Enable / Disable damages fx. var() config bool bNoContrails; var() config bool bAfterburn; var() config bool bCanOverride; var() config bool bBotsObeyOrders; //////////////////////////////////////////////////////////////////////////////////////////// //var config float thrate; // Fastest you can move the throttle. //var config float lvlimit; // Limit on velocity we can maintain at launch. See setLaunchVel(). function Created() { local int i; local int iTop; local string s; local int ControlWidth, ControlLeft, ControlRight; local int CenterWidth, CenterPos; local UMenuLabelControl HeadLine; local float EditWidth; Super.Created(); ControlWidth = WinWidth/2.5; ControlLeft = (WinWidth/2 - ControlWidth)/2; ControlRight = WinWidth/2 + ControlLeft; CenterWidth = (WinWidth/4)*3; CenterPos = (WinWidth - CenterWidth)/2; Super.Created(); if (Fuel < 1) Fuel = 1; if (Armor < 10) Armor = 10; if (teamDamage < 0) teamDamage = 0; if (SlideFX < 0) SlideFX = 0; if (AirBrakes < 0) AirBrakes = 0; if (minspeed < 0) minspeed = 0; if (fullspeed < 500) fullspeed = 500; if (RocketMaxSpeed < 650) RocketMaxSpeed = 650; if (RocketAccelMax < 1) RocketAccelMax = 1; if (RocketFuelRate < 1) RocketFuelRate = 1; if (RocketBurnerRate < 1) RocketBurnerRate = 1; if (Damage.bChecked) DamageFX = True; if (NoContrails.bChecked) bNoContrails = True; if (Afterburn.bChecked) bAfterburn = True; if (CanOverride.bChecked) bCanOverride = True; if (BotsObeyOrders.bChecked) bBotsObeyOrders = True; // Slider for gaps for ( i=0 ;i<11; i++ ) { iTop = (i+1)*20; Slider[i] = UWindowHSliderControl(CreateControl(class'UWindowHSliderControl', 20, iTop, 180, 1)); SpreadBox[i] = UWindowEditControl(CreateWindow(class'UWindowEditControl', 235, iTop, 70, 16)); SpreadBox[i].Align = TA_Center; SpreadBox[i].SetNumericOnly(false); SpreadBox[i].EditBoxWidth = 35; //60 } //RocketFuel Slider[0].SetText("Fuel Loadout:"); Slider[0].SetHelpText("Amount of fuel (in seconds)."); Slider[0].SetRange(1,300,20); if (Fuel > 300) Slider[0].SetValue(300); else Slider[0].SetValue(Fuel); SpreadBox[0].EditBoxWidth = 30; SpreadBox[0].SetHelpText("Amount of fuel (in seconds)."); SpreadBox[0].SetValue(string(Fuel)); //Armor Slider[1].SetText("Rocket Armor:"); Slider[1].SetHelpText("Rocket Armor / Hull."); Slider[1].SetRange(10,300,25); if (Armor > 300) Slider[1].SetValue(300); else Slider[1].SetValue(Armor); SpreadBox[1].EditBoxWidth = 30; SpreadBox[1].SetHelpText("Rocket Armor / Hull."); SpreadBox[1].SetValue(string(Armor)); //teamDamage Slider[2].SetText("TeamDamage:"); Slider[2].SetHelpText("Rocket friendly-fire."); Slider[2].SetRange(0,100,5); if (teamDamage > 100) Slider[2].SetValue(100); else Slider[2].SetValue(teamDamage); SpreadBox[2].EditBoxWidth = 30; SpreadBox[2].SetHelpText("Rocket friendly-fire."); SpreadBox[2].SetValue(string(teamDamage)); //SlideFX Slider[3].SetText("Sliding FX:"); Slider[3].SetHelpText("Turns sliding effect. 0=SLV2 Default 1=Max --->Less ---> 255=No Sliding FX."); Slider[3].SetRange(0,255,5); if (SlideFX > 255) Slider[3].SetValue(255); else Slider[3].SetValue(SlideFX); SpreadBox[3].EditBoxWidth = 30; SpreadBox[3].SetHelpText("Turns sliding effect. 0=SLV2 Default 1=Max --->Less ---> 255=No Sliding FX."); SpreadBox[3].SetValue(string(SlideFX)); //AirBrakes Slider[4].SetText("AirBrakes:"); Slider[4].SetHelpText("Rocket deceleration. 0=None 50=SLV2(Default) 255=Max"); Slider[4].SetRange(0,255,5); if (AirBrakes > 255) Slider[4].SetValue(255); else Slider[4].SetValue(AirBrakes); SpreadBox[4].EditBoxWidth = 30; SpreadBox[4].SetHelpText("Rocket deceleration. 0=None 50=SLV2(Default) 255=Max"); SpreadBox[4].SetValue(string(AirBrakes)); //minspeed Slider[5].SetText("Min Speed:"); Slider[5].SetHelpText("Minimum speed for the rocket"); Slider[5].SetRange(0,800,50); if (minspeed > 800) Slider[5].SetValue(800); else Slider[5].SetValue(minspeed); SpreadBox[5].EditBoxWidth = 30; SpreadBox[5].SetHelpText("Minimum speed for the rocket"); SpreadBox[5].SetValue(string(minspeed)); //fullspeed Slider[6].SetText("Max Speed:"); Slider[6].SetHelpText("Max speed at 100% throttle, or without afterburners."); Slider[6].SetRange(500,1100,50); if (fullspeed > 1100) Slider[6].SetValue(1100); else Slider[6].SetValue(fullspeed); SpreadBox[6].EditBoxWidth = 30; SpreadBox[6].SetHelpText("Max speed at 100% throttle, or without afterburners."); SpreadBox[6].SetValue(string(fullspeed)); //RocketMaxSpeed Slider[7].SetText("Max Burner Speed:"); Slider[7].SetHelpText("Max speed with afterburners."); Slider[7].SetRange(650,2000,50); if (RocketMaxSpeed > 2000) Slider[7].SetValue(2000); else Slider[7].SetValue(RocketMaxSpeed); SpreadBox[7].EditBoxWidth = 30; SpreadBox[7].SetHelpText("Max speed with afterburners."); SpreadBox[7].SetValue(string(RocketMaxSpeed)); //RocketAccelMax Slider[8].SetText("Acceleration:"); Slider[8].SetHelpText("Rocket maximum acceleration."); Slider[8].SetRange(1,150,25); if (RocketAccelMax > 150) Slider[8].SetValue(150); else Slider[8].SetValue(RocketAccelMax); SpreadBox[8].EditBoxWidth = 30; SpreadBox[8].SetHelpText("Rocket maximum acceleration."); SpreadBox[8].SetValue(string(RocketAccelMax)); //RocketFuelRate Slider[9].SetText("Fuel Rate:"); Slider[9].SetHelpText("Basic burning fuel rate."); Slider[9].SetRange(1,8,1); if (RocketFuelRate > 8) Slider[9].SetValue(8); else Slider[9].SetValue(RocketFuelRate); SpreadBox[9].EditBoxWidth = 30; SpreadBox[9].SetHelpText("Basic burning fuel rate."); SpreadBox[9].SetValue(string(RocketFuelRate)); //RocketBurnerRate Slider[10].SetText("Burner Fuel Rate:"); Slider[10].SetHelpText("Afterburner burning fuel rate. multiply the basic fuel rate by this value."); Slider[10].SetRange(1,8,1); if (RocketBurnerRate > 8) Slider[10].SetValue(8); else Slider[10].SetValue(RocketBurnerRate); SpreadBox[10].EditBoxWidth = 30; SpreadBox[10].SetHelpText("Afterburner burning fuel rate. multiply the basic fuel rate by this value."); SpreadBox[10].SetValue(string(RocketBurnerRate)); // Update button CloseButton = UWindowSmallButton(CreateWindow(class'UWindowSmallButton', 200, 320, 48, 16)); CloseButton.SetText("Save"); CloseButton.SetHelpText("Save these settings and close this window"); CloseButton.NotifyWindow = Self; // Doesn't seem to work otherwise. // Cancel button CancelButton = UWindowSmallCloseButton(CreateWindow(class'UWindowSmallCloseButton', 260, 320, 48, 16)); CancelButton.SetText("Cancel"); CancelButton.SetHelpText("Close this window without saving any changes."); CancelButton.NotifyWindow = Self; // Doesn't seem to work otherwise. //DamageFX Damage = UWindowCheckBox(CreateControl(class'UWindowCheckBox', 18, 240, 150, 1)); Damage.SetText("DamageFX"); Damage.SetHelpText("Damage Effects on(checked)/off(unchecked)."); Damage.SetFont(F_Normal); Damage.Align = TA_Left; Damage.SetSize(125, 1); // 74 //bNoContrails NoContrails = UWindowCheckBox(CreateControl(class'UWindowCheckBox', 18, 260, 150, 1)); NoContrails.SetText("bNoContrails"); NoContrails.SetHelpText("Smoke Fx (checked = no smoke fx)"); NoContrails.SetFont(F_Normal); NoContrails.Align = TA_Left; NoContrails.SetSize(125, 1); //bAfterburn Afterburn = UWindowCheckBox(CreateControl(class'UWindowCheckBox', 18, 280, 150, 1)); Afterburn.SetText("bAfterburn"); Afterburn.SetHelpText("Lauch rocket with afterburner on."); Afterburn.SetFont(F_Normal); Afterburn.Align = TA_Left; Afterburn.SetSize(125, 1); //bCanOverride CanOverride = UWindowCheckBox(CreateControl(class'UWindowCheckBox', 18, 300, 150, 1)); CanOverride.SetText("bCanOverride"); CanOverride.SetHelpText("Pilot can adjust warhead status in-flight."); CanOverride.SetFont(F_Normal); CanOverride.Align = TA_Left; CanOverride.SetSize(125, 1); //bBotsObeyOrders BotsObeyOrders = UWindowCheckBox(CreateControl(class'UWindowCheckBox', 18, 320, 150, 1)); BotsObeyOrders.SetText("bBotsObeyOrders"); BotsObeyOrders.SetHelpText("If unchecked, bots may jump off depend on their orders."); BotsObeyOrders.SetFont(F_Normal); BotsObeyOrders.Align = TA_Left; BotsObeyOrders.SetSize(125, 1); // Setup SetReset(); } // Setup function SetReset() { Damage.bChecked = class'RocketX3.StrangeShellVX'.default.DamageFX; NoContrails.bChecked = class'RocketX3.StrangeShellVX'.default.bNoContrails; Afterburn.bChecked = class'RocketX3.StrangeShellVX'.default.bAfterburn; CanOverride.bChecked = class'RocketX3.StrangeShellVX'.default.bCanOverride; BotsObeyOrders.bChecked = class'RocketX3.StrangeShellVX'.default.bBotsObeyOrders; } function Notify(UWindowDialogControl C, byte E) { local int Sval; Super.Notify( C, E ); switch(E) { case DE_Change: // The message sent by sliders and checkboxes switch(C) { case slider[0]: Sval = Slider[0].GetValue(); SpreadBox[0].SetValue(string(Sval)); Fuel = Sval; class'RocketX3.StrangeShellVX'.SaveConfig(); class'RocketX3.StrangeShellVX'.static.StaticSaveConfig(); break; case slider[1]: Sval = Slider[1].GetValue(); SpreadBox[1].SetValue(string(Sval)); Armor = Sval; class'RocketX3.StrangeShellVX'.SaveConfig(); class'RocketX3.StrangeShellVX'.static.StaticSaveConfig(); break; case slider[2]: Sval = Slider[2].GetValue(); SpreadBox[2].SetValue(string(Sval)); teamDamage = Sval; class'RocketX3.StrangeShellVX'.SaveConfig(); class'RocketX3.StrangeShellVX'.static.StaticSaveConfig(); break; case slider[3]: Sval = Slider[3].GetValue(); SpreadBox[3].SetValue(string(Sval)); SlideFX = Sval; class'RocketX3.StrangeShellVX'.SaveConfig(); class'RocketX3.StrangeShellVX'.static.StaticSaveConfig(); break; case slider[4]: Sval = Slider[4].GetValue(); SpreadBox[4].SetValue(string(Sval)); AirBrakes = Sval; class'RocketX3.StrangeShellVX'.SaveConfig(); class'RocketX3.StrangeShellVX'.static.StaticSaveConfig(); break; case slider[5]: Sval = Slider[5].GetValue(); SpreadBox[5].SetValue(string(Sval)); minspeed = Sval; class'RocketX3.StrangeShellVX'.SaveConfig(); class'RocketX3.StrangeShellVX'.static.StaticSaveConfig(); break; case slider[6]: Sval = Slider[6].GetValue(); SpreadBox[6].SetValue(string(Sval)); fullspeed = Sval; class'RocketX3.StrangeShellVX'.SaveConfig(); class'RocketX3.StrangeShellVX'.static.StaticSaveConfig(); break; case slider[7]: Sval = Slider[7].GetValue(); SpreadBox[7].SetValue(string(Sval)); RocketMaxSpeed = Sval; class'RocketX3.StrangeShellVX'.SaveConfig(); class'RocketX3.StrangeShellVX'.static.StaticSaveConfig(); break; case slider[8]: Sval = Slider[8].GetValue(); SpreadBox[8].SetValue(string(Sval)); RocketAccelMax = Sval; class'RocketX3.StrangeShellVX'.SaveConfig(); class'RocketX3.StrangeShellVX'.static.StaticSaveConfig(); break; case slider[9]: Sval = Slider[9].GetValue(); SpreadBox[9].SetValue(string(Sval)); RocketFuelRate = Sval; class'RocketX3.StrangeShellVX'.SaveConfig(); class'RocketX3.StrangeShellVX'.static.StaticSaveConfig(); break; case slider[10]: Sval = Slider[10].GetValue(); SpreadBox[10].SetValue(string(Sval)); RocketBurnerRate = Sval; class'RocketX3.StrangeShellVX'.SaveConfig(); class'RocketX3.StrangeShellVX'.static.StaticSaveConfig(); break; case Damage: if (Damage.bChecked) DamageFX=True; else DamageFX=false; class'RocketX3.StrangeShellVX'.SaveConfig(); class'RocketX3.StrangeShellVX'.static.StaticSaveConfig(); break; case NoContrails: if (NoContrails.bChecked) bNoContrails=True; else bNoContrails=false; class'RocketX3.StrangeShellVX'.SaveConfig(); class'RocketX3.StrangeShellVX'.static.StaticSaveConfig(); break; case Afterburn: if (Afterburn.bChecked) bAfterburn=True; else bAfterburn=false; class'RocketX3.StrangeShellVX'.SaveConfig(); class'RocketX3.StrangeShellVX'.static.StaticSaveConfig(); break; case CanOverride: if (CanOverride.bChecked) bCanOverride=True; else bCanOverride=false; class'RocketX3.StrangeShellVX'.SaveConfig(); class'RocketX3.StrangeShellVX'.static.StaticSaveConfig(); break; case BotsObeyOrders: if (BotsObeyOrders.bChecked) bBotsObeyOrders=True; else bBotsObeyOrders=false; class'RocketX3.StrangeShellVX'.SaveConfig(); class'RocketX3.StrangeShellVX'.static.StaticSaveConfig(); break; } case DE_Click: // The message sent by buttons switch(C) { case CloseButton: class'RocketX3.StrangeShellVX'.static.StaticSaveConfig(); SaveConfig(); ParentWindow.Close(); break; } case DE_MouseMove: if(UMenuRootWindow(Root) != None) if(UMenuRootWindow(Root).StatusBar != None) UMenuRootWindow(Root).StatusBar.SetHelp(C.HelpText); break; case DE_MouseLeave: if(UMenuRootWindow(Root) != None) if(UMenuRootWindow(Root).StatusBar != None) UMenuRootWindow(Root).StatusBar.SetHelp(""); break; } } function Close(optional bool bByParent) { class'RocketX3.StrangeShellVX'.SaveConfig(); class'RocketX3.StrangeShellVX'.static.StaticSaveConfig(); Super.Close(bByParent); } /** function saveConfigs() { class'RocketX3'.static.staticSaveConfig(); super.saveConfigs(); } */ C E ]!X 2D є;aGնmo e B}//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== class StrangeShellVXUMenuModMenuItem expands UMenuModMenuItem; function Execute() { MenuItem.Owner.Root.CreateWindow(class'StrangeShellVXUWindowFramedWindow',10,10,150,100); } BC@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@P ?Ae BCO BC@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@k ?A BC@  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~BC@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@{ ?A BCԡH //===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== class StrangeShellVX extends GuidedWarShell config (RocketX3); //=========== // IMPORTS// //=======// //=================================================== // SFRed RedFighter Skin Designed by Gene Sprague //=================================================== #exec MESH IMPORT MESH=SFRed ANIVFILE=MODELS\SFRed_a.3d DATAFILE=MODELS\SFRed_d.3d X=0 Y=0 Z=0 #exec MESH ORIGIN MESH=SFRed X=0 Y=0 Z=0 #exec MESH SEQUENCE MESH=SFRed SEQ=All STARTFRAME=0 NUMFRAMES=30 #exec MESHMAP NEW MESHMAP=SFRed MESH=SFRed #exec MESHMAP SCALE MESHMAP=SFRed X=0.1 Y=0.1 Z=0.2 #exec TEXTURE IMPORT NAME=JSFRed FILE=SFRed.pcx GROUP=Skins FLAGS=2 #exec TEXTURE IMPORT NAME=JSFRed FILE=SFRed.pcx GROUP=Skins PALETTE=JSFRed #exec MESHMAP SETTEXTURE MESHMAP=SFRed NUM=1 TEXTURE=JSFRed // Sounds #exec OBJ LOAD FILE=..\Sounds\SLV2Sounds.uax PACKAGE=SLV2Sounds #exec AUDIO IMPORT FILE="Sounds\redeemerrocketfly.wav" NAME="redeemerrocketfly" GROUP="Sounds" // DATA //======================================================================================================= // Sliding FX set to 0 are the original Strangelove delta value for the sliding effect on the steering.// //====================================================================================================== var() string AirBrakes_Info; // 0=None 50=SLV2(Default) 255=Max var() string SlideFX_Info; // 0=SLV2 Default 1=Max --->Less ---> 255=No Sliding FX var() config byte SlideFX; // Setting sliding effect on the rocket var() config byte AirBrakes; // Do i need to explain? var float desired, speed; var() config float MaxSpeed; // Max speed with afterburner var() config float AccelMax; // Maximum Acceleration var() config bool DamageFX; // Damage FX on/off var() config float baseFuelRate; // Fuel consumption without afterburner var() config float afterburnRate; // Extra fuel ratio you burn. //======================================================================================================== var StrangeShellVX sl; var ControllerVX slc; // Our controller. var bool dumb; var() config float armor; // Damage the hull can withstand. var() config float fuel; // Amount of fuel (in seconds). var() config float teamDamage; // Rocket friendly-fire. var() vector pilotOffset; // Relative offset from the rocket location. var() config float minspeed; var() config float fullspeed; // Max speed without burners. var bool bAfterburn; // Is the afterburner on?cruising speed. var bool bNoFuel; // Flag for setting stuff when the fuel runs out. var float accel; // Current acceleration rate. var() float thrate; // Fastest you can move the throttle. var() class HUDClassVX; var() class exhaustPuffVXClass; var() class damagePuffVXClass; //var() class detClass; var() class detClass2; var config bool bNoContrails; var() class contrailVXClass; var ContrailVX rootct; var() float puffRand; // Random x/y offset. var() float puffOffset; // Distance the puffs start behind. /** The impact angle the hull can survive at max. velocity. This is a percentage of 90, so 45 degrees would be 0.5. See reflect(). */ var() float crushAngle; // Sounds. var() Sound dropSound; var() Sound gunnerSound; var() Sound crashSound; var() Sound throtSound; var() Sound warnSound; var() Sound abFadeSound; var() Sound abLoopSound; var() Sound abKickSound; var() Sound refuelSound; var() Sound hullHits[4]; var() Sound bounces[5]; var vector realAccel; // Just like GuidedWarshell's realLocation, etc. // Warhead status. Goddamn enums. var() config enum EWarStat { WH_Auto, WH_Armed, WH_Disarmed } warstat; var config bool bCanOverride; // The pilot can toggle the warhead status manually. var GameReplicationInfo GRI; // Used to detect the end of the game. var bool bDetonate; // Set just before calling explode(). var float errorSum; // Total client error on serverMove()'s. var int start; // Seconds since level began at begin play. var bool bClientNoFuel; // We use this to run initial no fuel code once. var bool bBlasted; // Placed blast decal? /** This keeps track of the last two pawns to eject and when, so that we don't pick them up again in touch(). */ var Pawn ejected[2]; var float ejectTime[2]; var() float touchLapse; var float tstamp; // When the last timer() Was called. var float smokeTimer; // Keep track of the old timer(). var float closeTimer; // Dumbfires' wings close before impact. var bool bClosed; // True if already closed. /** These are used to display our special death messages. Possible dtypes: NoUpdate, Ram, HitWall, HitSL, Shot. */ var name dtype; var() localized string normDamStr; var() localized string normSelfDamStr; var() localized string ramDamStr; var() localized string ramSelfDamStr; var() localized string ramSelf2DamStr; var() localized string shotDamStr; var() localized string shotSelfDamStr; var() localized string hitWallDamStr; var() localized string hitWall2DamStr; var() localized string hitSLDamStr[5]; var() localized string hitSLDamStr2; // See spawnPuffs(). These control sputtering when out of fuel, etc. var bool bSputter; var float sputtime; var float launched; // The time we were spawned. var() float shootCR; // Self damage diameter for the rocket around the player. var() float lvlimit; // Limit on velocity we can maintain at launch. See setLaunchVel(). var StrangeShellVX rammed; // The shell we just touched. /** Used when handling teleportation. See touch(). */ var Teleporter lastTP; var rotator lastTPRot; // CONTROLLER DATA // var Pawn pilot; var Pawn gunner; var bool bShootMode; var bool addedHUD; var SLHUDVX HUD; var float throttle; // Percent throttle value. var float thrprev; // Throttle level before afterburner was set off. var float thlvl; var bool bThrotSent; var int throtDir; // For the mutate throttle commands. struct RiderInfo { var Pawn pawn; var bool bOldJumpStatus; var bool bDelayedEject; var SLBotBrainVX brain; var Actor trailers[5]; var vector lastLoc; }; var RiderInfo pInfo, gInfo; var() Sound sndPilotEj; var() Sound sndGunnerEj; var() Sound sndDrop; var byte bDuck; var vector fogReset; // Reset info to get rid of the fog. var bool bFog; // Is the client fogged? var NullWeaponVX nw; // The glue gun. var Weapon lastWeapon; // Weapon to switch back to in shoot mode or eject. var float teleportDist; // Minimum distance to kick in teleport hack. var FuelcoreVX fc; // Our fuel core inventory object. var config bool bBotsObeyOrders; // Bots follow orders or stick as gunners? var float marchWait; // Time to wait before playing total comm. sound. var bool bMarchUnder; // Have we been under the march limit yet? var bool bMarchPlaying; var() Sound sndMarchLoop; var() Sound sndTotalComm; var float savedBob; // Preserve their bob and set it to zero. var bool bTakeover; // In a takeover sequence. var float toTime; // Time left until takeover by gunner. var bool bWahooPlayed; // Once we achieve min speed, Major Kong plays. var() Sound sndWahoo; var() config bool bRevY; // Reverse the mouse Y axis while flying? var bool bFlipY; // Have we already flipped it? var() localized string gunnerMountStr[3]; var() localized string gunnerMountStr2[3]; var float painTimer; var UtilVX u; //================================ //New Engines By Shawn Yarbrough //================================== //var REngineFlare1 REF; var BEngineFlare1 BEF; var BEngineFlare2 B2EF; var XSFRed JetRed; var XSFBlue JetBlue; var() byte Team; //================================ // Engine Flare Color By Shawn Yarbrough //================================== // REPLICATION replication { reliable if (role == ROLE_Authority) armor, dumb, bAfterburn, warstat, bNoFuel, Team; // The client gets it initially and goes with it. For takeovers? reliable if (role == ROLE_Authority && bNetOwner) // && bNetInitial) fuel; reliable if (role == ROLE_Authority && !bNetOwner) realAccel; // From the controller... reliable if (role == ROLE_Authority) pilot, gunner, bShootMode, throttle, fc; reliable if (role < ROLE_Authority && bNetOwner) clientSendThrot, goShootMode; } simulated function postBeginPlay() { // METHODS /** Called on auto proxy and clients. */ /** Fuel = class'SLV4.StrangeShellVXUWindowDialogClientWindow'.Default.Fuel; default.Fuel = Fuel; Armor = class'SLV4.StrangeShellVXUWindowDialogClientWindow'.Default.Armor; default.Armor = Armor; teamDamage = class'SLV4.StrangeShellVXUWindowDialogClientWindow'.Default.teamDamage; SlideFX = class'SLV4.StrangeShellVXUWindowDialogClientWindow'.Default.SlideFX; AirBrakes = class'SLV4.StrangeShellVXUWindowDialogClientWindow'.Default.AirBrakes; minspeed = class'SLV4.StrangeShellVXUWindowDialogClientWindow'.Default.minspeed; fullspeed = class'SLV4.StrangeShellVXUWindowDialogClientWindow'.Default.fullspeed; MaxSpeed = class'SLV4.StrangeShellVXUWindowDialogClientWindow'.Default.MaxSpeed; AccelMax = class'SLV4.StrangeShellVXUWindowDialogClientWindow'.Default.AccelMax; baseFuelRate = class'SLV4.StrangeShellVXUWindowDialogClientWindow'.Default.baseFuelRate; afterburnRate = class'SLV4.StrangeShellVXUWindowDialogClientWindow'.Default.afterburnRate; DamageFX = class'SLV4.StrangeShellVXUWindowDialogClientWindow'.Default.DamageFX; bNoContrails = class'SLV4.StrangeShellVXUWindowDialogClientWindow'.Default.bNoContrails; bAfterburn = class'SLV4.StrangeShellVXUWindowDialogClientWindow'.Default.bAfterburn; bCanOverride = class'SLV4.StrangeShellVXUWindowDialogClientWindow'.Default.bCanOverride; bBotsObeyOrders = class'SLV4.StrangeShellVXUWindowDialogClientWindow'.Default.bBotsObeyOrders; */ // default.fuel = fuel; // default.armor = armor; u = spawn(Class'UtilVX', self); u.setDebugLevel(DL_Normal); // u.debug("postBeginPlay(): owner: " $ u.sname(owner)); launched = level.timeseconds; // Find our GRI so we know when the match is over. foreach allActors(Class'GameReplicationInfo', GRI) break; startContrailVX(); setTimer(0.000000001, true); start = level.timeseconds; tstamp = level.timeseconds; // Old controller init. bShootMode = false; thlvl = 0.0; throttle = 0.0; bThrotSent = false; addedHUD = false; bFog = false; fogReset.x = 0; //greenie.r * 0.0; fogReset.y = 100; //greenie.g * 0.5; fogReset.z = 0; //greenie.b * 0.0; throtDir = 0; } simulated function startContrailVX() { // Set myself as the owner and it becomes the root segment. if (level.netmode != NM_DedicatedServer && level.bHighDetailMode && !bNoContrails) { //u.debug("postBeginPlay(): spawning rootct", DL_Verbose); rootct = spawn(contrailVXClass, self); } } /** This is our new tick! */ simulated function timer() { local float now; local float delta; now = level.timeseconds; if (tstamp != 0) { delta = now - tstamp; tstamp = now; if (slc == none && !dumb) ctick(delta); smoketick(delta); } tstamp = now; } /** Called on auto proxy clients. This is the old timer(). */ simulated function smoketick(float delta) { local float rate; local vector x, y, z; // Set the timer rate. if (level.bHighDetailMode) { rate = 0.01; if (level.bDropDetail) rate = 0.1; } else { rate = 0.15; } // This simulates the old timer code. smokeTimer += delta; if (smokeTimer > rate) smokeTimer -= rate; else return; // If we haven't received an update from the client in 4 seconds, explode. if (!dumb && pilot != none && !gameOver() && !instigator.isA('Bot') && role == ROLE_Authority && (level.timeseconds - serverUpdate > 4.0)) { dtype = 'NoUpdate'; explode(location, vect(0, 0, 1)); return; } // Warn cannons so they can shoot us down. cannonTimer += rate; if (cannonTimer > 0.6) { warnCannons(); cannonTimer -= 0.6; // Just stuck this in here so I don't have to create another timer. getTrailers(); } // This section just for f/x. if (level.netmode != NM_DedicatedServer) { spawnPuffs(rate); } //setTimer(rate, false); } /** Spawn exhaust puffs here. Rate is the timer rate. */ simulated function spawnPuffs(float rate) { //local ExhaustPuffVX puff; // local ExhaustPuffVX exhaustPuffVXClass; local vector x, y, z, loc; // Handle sputtering. if (region.zone.bWaterZone || bNoFuel) { if (bSputter) { sputtime += rate; } else { bSputter = true; sputtime = 0; } } else { bSputter = false; } // Do the puffs. getAxes(rotation, x, y, z); // If bSputter is on, sputter out slowly for 2 secs. if (!bSputter || (bSputter && sputtime < 1.0 && (frand() * 1.0) > sputtime)) { loc = location - (x * puffOffset); //collisionRadius); if (puffRand > 0.0) { loc += (y * ((frand() * puffRand * 2.0) - puffRand)); loc += (z * ((frand() * puffRand * 2.0) - puffRand)); } // exhaustPuffVXClass = spawn(Class'ExhaustPuffVX',,, loc); // puff = spawn(exhaustPuffVXClass,,, loc); if (!bSputter) // exhaustPuffVXClass.drawScale = exhaustPuffVXClass.default.drawScale + 0.5 * ((vsize(velocity) - //minspeed) / (maxspeed - minspeed)); } if ((armor / default.armor) < 0.70) spawnDamPuffs(location - (x * 20), y, z, 1.0 - armor / default.armor); } /** Spawn damage puffs here. */ simulated function spawnDamPuffs(vector loc, vector y, vector z, float damf) { local DamagePuffVX damagePuffVXClass; local float rand; // Hull puffs slightly more jumpy. if (puffRand > 0.0) { rand = puffRand * 2.0; } else { rand = 4.0; } loc += y * ((frand() * rand * 2.0) - rand); loc += z * ((frand() * rand * 2.0) - rand); // Size and scale rate depend on the damage factor. damagePuffVXClass = spawn(Class'DamagePuffVX',,, loc); damagePuffVXClass.drawScale = damf * 3.0; } function StrangeShellVX findSL(Pawn p) { local StrangeShellVX s; //u.debug("findSL()", DL_Verbose); foreach allActors(class'StrangeShellVX', s) { if ((s.pilot != none && s.pilot == p) || ((s.gunner != none) && s.gunner == p)) { return s; } } return none; } /** Cycles the warhead status. */ function switchWarhead() { if (bCanOverride) { switch (warstat) { case WH_Auto: warstat = WH_Armed; break; case WH_Armed: warstat = WH_Disarmed; break; case WH_Disarmed: warstat = WH_Auto; break; } } } /** Disarm the warhead. For bots, mainly. */ function disarm() { if (bCanOverride) warstat = WH_Disarmed; } /** Arm the warhead. For bots. */ function arm() { if (bCanOverride) warstat = WH_Armed; } /** Returns true if we're armed. */ simulated function bool armed() { return (warstat == WH_Armed); } /** If we are set to auto, arm us. */ function bool autoArm() { if (warstat == WH_Auto) { warstat = WH_Armed; return true; } return false; } /** Called from the options screen. */ static function setDefaultWarhead(int stat) { if (stat == 1) default.warstat = WH_Armed; else if (stat == 2) default.warstat = WH_Disarmed; else default.warstat = WH_Auto; } function setRemoteRole(Actor a) { if (level.netmode != NM_Standalone) { if (role == ROLE_Authority && !dumb && a != none && !a.isA('Bot') && (level.netmode != NM_ListenServer || !u.hasViewPort(a)) && !bNoFuel) { remoteRole = ROLE_AutonomousProxy; } else { remoteRole = ROLE_SimulatedProxy; } //u.debug("setRemoteRole(" $ u.sname(a) $ "): remoteRole set: " $ remoteRole); } } auto state Flying { simulated function beginState() { local Pawn p; local float lv; // u.debug("Flying.beginState(): owner: " $ u.sname(owner) $ " inst: " $ u.sname(instigator)); // playAnim('open', 0.5); // Only the server has the owner set. if (owner != none) { serverUpdate = level.timeSeconds; guidedRotation = rotation; if (level.netmode == NM_Standalone || (level.netmode == NM_ListenServer && u.hasViewPort(owner))) slc = spawn(Class'ControllerVX', self); //========================================================================== // Statments for Engine flares based on team for flare color // Added 2/18/02 // if ( (pawn(owner).PlayerReplicationInfo.Team != 1) ) { BEF = Spawn(class'BEngineFlare1', self); B2EF = Spawn(class'BEngineFlare2', self); JetRed = Spawn(class'XSFRed',Self,, Location, Rotation); } if ( (pawn(owner).PlayerReplicationInfo.Team != 0) ) { BEF = Spawn(class'BEngineFlare1', self); B2EF = Spawn(class'BEngineFlare2', self); JetBlue = Spawn(class'XSFBlue',Self,, Location, Rotation); } //=========================================================================== } else { // The owner is always none on the client in a network // game. (At least for another few ticks.) if (role == ROLE_Authority) { dumb = true; warstat = WH_Armed; // Set acceleration. Catch this on the client with net initial...? acceleration = (AccelMax * 0.20) * vector(rotation); // Don't do the launch v. velocity = minspeed * vector(rotation); setRemoteRole(owner); return; } } setLaunchVel(speed); setRemoteRole(owner); // u.debug("Flying:beginState(): set v: " $ u.sv(velocity), DL_Verbose); } /** We want to maintain the instigator's velocity when they launch. On the server, we know it already. On the client the vel. doesn't get updated for a few ticks (or more), so we guess it on our end. The launcher sets the lv and we look for it here. */ simulated function setLaunchVel(int startSpeed) { local Pawn p; local vector lv, zero; local rotator lr; local float z; if (role == ROLE_Authority) { if (instigator != none) lv = instigator.velocity; lr = rotation; } else { // This is on the client. dumb == unknown. // Major kludge. This is all to save us from two or // three ticks of the wrong velocity. Hopefully it will smooth launches // out with maintained velocity. If there are two launches in the radius, // set them all to 0. That's better than having the wrong velocity set. foreach radiusActors(Class'Pawn', p, vsize(pilotOffset) * 2.0) { if (p.weapon != none && p.weapon.isA('KonglauncherVX') && KonglauncherVX(p.weapon).launchv != zero) { // Not set yet. if (lv == zero) { lv = KonglauncherVX(p.weapon).launchv; lr = p.rotation; } else { lv = zero; } // u.debug("setLaunchVel(): found p: " $ u.sname(p) $ " lv: " $ u.sv(lv) $ " lr: " $ u.sr(lr) $ " delta loc: " $ u.sv(p.location - location), DL_Verbose); // Clear it. KonglauncherVX(p.weapon).launchv = zero; } } } // Now limit the velocity. Give a little on the z component, though. if (vsize(lv) > lvlimit) { z = lv.z; lv = normal(lv) * lvlimit; lv.z = fmin(z, lvlimit * 1.5); // u.debug("setLaunchVel(): lv scaled to: " $ u.sv(lv), DL_Verbose); } // Merge it with the shell v. Only if we have a launch rotation. if (lr != rot(0, 0, 0)) velocity = vector(lr) * startSpeed + lv; } /** Someone has run into us! For shame! This handles detonations as well as new gunners. */ function processTouch(actor a, vector hl) { local vector x, y, z; // 1. Ignore processTouch() on the auto proxy client. // 2. Ignore fuel cores. (We have to pick them up.) // 3. The touching actor is the pilot or gunner. // 4. Ignore carcasses. Is this right? // 5. Ignore those recently ejected. // 6. Ignore the instigator if recently fired. if (role < ROLE_Authority || a.isA('FuelcoreVX') || a == pilot || a == gunner || a.isA('Carcass') || (a.isA('Pawn') && wasEjected(Pawn(a))) || (a == instigator && ((level.timeseconds - launched) < 2.0))) return; // u.debug("processTouch(): actor: " $ u.sname(a)); // See if we're a rider on another rocket. if (a.isA('Pawn') && Pawn(a).bIsPlayer && findSL(Pawn(a)) == none) { if (!dumb && sameTeam(Pawn(a), instigator) && gunner == none) { // u.debug("processTouch(): sticking new gunner on: " $ u.sname(a)); setGunner(Pawn(a)); return; } // Nope? Run them over... } if (armed() && fromFront(a)) { // u.debug("processTouch(): detonating from front"); detonate(hl, normal(hl - a.location)); } else { if (a.isA('StrangeShellVX')) { // Don't detonate our own freshly-launched rockets. Or the gunner's. if ((a.instigator == instigator || a.instigator == gunner) && ((level.timeseconds - StrangeShellVX(a).launched) < 2.0 || (level.timeseconds - launched) < 2.0)) return; // Remember who we rammed. rammed = StrangeShellVX(a); // This will give us an inverse normal 50% of the time. getAxes(a.rotation, x, y, z); reflect(y, a); //, 0.75); } else { // Print the correct death message. if (a == instigator) u.setDamageString(ramSelf2DamStr, a, a); else u.setDamageString(ramDamStr, instigator, a); a.takeDamage(vsize(velocity - a.velocity) * 0.15, instigator, hl, normal(velocity) * momentumTransfer, myDamageType); playSound(bounces[rand(ArrayCount(bounces))], SLOT_None, 4.0); // We take a fraction of the damage. takeDamage(vsize(velocity) * 0.05, instigator, hl, normal(velocity) * momentumTransfer, 'Ram'); } } } /** Wrapper for detonation. */ function detonate(vector hl, vector n) { bDetonate = true; explode(hl, n); } /** Either detonate, spawning a shock wave, or blow up due to damage. */ function explode(vector hl, vector n) { // u.debug("explode(" $ u.sv(hl) $ ", " $ u.sv(n) $ "): detonate: " $ bDetonate $ " instigator: " $ u.sname(instigator)); if (role < ROLE_Authority) return; if (bDetonate) { // spawn(detClass,,, hl + n * 16, rot(0, 0, 0)); spawn(detClass2,,, hl + n * 16, rot(0, 0, 0)); } else { // This looks silly dropped, but oh well. if (!level.bDropDetail && level.netmode != NM_DedicatedServer) { spawn(class'RocketX3.StrangeExplVX',,, location); spawn(class'RocketX3.BlackCloudVX',,, location); } // Use our dtype, previously set in takeDamage(). specialHurtRadius(damage, 300.0, dtype, momentumTransfer, hl); } // Why do I need this? //remoteRole = ROLE_SimulatedProxy; destroy(); } } // End Flying. function detonate(vector hl, vector n) { // Nothing. } /** I had to redo this to get better control over the death messages. */ function specialHurtRadius(float dam, float rad, name dtype, float mom, vector hl) { local Actor v; local float dscale, dist; local vector dir; local string sds; //if (bHurtEntry) //return; //bHurtEntry = true; // u.debug("specialHurtRadius(): " $ dtype); foreach visibleCollidingActors(Class'Actor', v, rad, hl) { if (v != self) { if (v.isA('Pawn')) { // Set our "special" damage string. sds = normDamStr; if (dtype == 'NoUpdate' && v == instigator) { sds = normSelfDamStr; } else if (dtype == 'Ram' && v == instigator) { sds = ramSelfDamStr; } else if (dtype == 'HitWall' && v == instigator) { if (frand() < 0.5) sds = hitWallDamStr; else sds = hitWall2DamStr; } else if (dtype == 'HitSL') { // No rammed or ram pilot? if (rammed == none || rammed.pilot == none) { if (v == instigator) sds = hitSLDamStr[rand(arrayCount(hitSLDamStr))]; } else { if (v == rammed.pilot) { sds = hitSLDamStr2; } else if (v == instigator) { // This will print a blank line. Oh well. sds = " "; } } } else if (dtype == 'Shot') { if (v == instigator) { sds = shotSelfDamStr; } else if (v == pilot || v == gunner) { sds = shotDamStr; } } u.setDamageString(sds, instigator, v); } dir = v.location - hl; dist = fmax(1, vsize(dir)); dir = dir / dist; dscale = 1 - fmax(0, (dist - v.collisionRadius) / rad); v.takeDamage(dscale * dam, instigator, v.location - 0.5 * (v.collisionHeight + v.collisionRadius) * dir, dscale * mom * dir, myDamageType); } } //bHurtEntry = false; } /** Store this guy. He just ejected. If we have 3 ejects within the eject lapse, then we lose whoever was in the first slot. So be it. */ function storeEject(Pawn p) { local float time; time = level.timeseconds; if (ejected[1] == none || (time - ejectTime[1]) > touchLapse) { ejected[1] = p; p.bHidden=False; p.Visibility = p.Default.Visibility; P.SetDefaultDisplayProperties(); ejectTime[1] = time; } else { ejected[0] = p; p.bHidden=False; p.Visibility = p.Default.Visibility; P.SetDefaultDisplayProperties(); ejectTime[0] = time; } } /** Was this guy recently ejected? */ function bool wasEjected(Pawn p) { if (ejected[0] == p && (level.timeseconds - ejectTime[0]) <= touchLapse) return true; else if (ejected[1] == p && (level.timeseconds - ejectTime[1]) <= touchLapse) return true; return false; } /** Returns true if they are in front of us. Roughly. */ function bool fromFront(Actor a) { local vector dir, x, y, z; if (a != none) { dir = normal(a.location - location); getAxes(rotator(velocity), x, y, z); // Is this like 45 degrees? Not sure... return ((dir dot x) > 0.7); } else { return false; } } /** Spit out some sparks. */ simulated function sparks(int dam) { local int isparks; if (level.netmode != NM_DedicatedServer) { for (isparks = min(15, dam / 2); isparks > 0; isparks--) spawn(Class'SLSparkerVX'); } } /** If taking damage from the front, there should be a chance of detonation - if armed. Should this be singular? No. As an example, imagine our rocket bumps into another rocket. We take a slight bit of damage, but the other rocket explodes. Their explosion causes us massive damage. If this function were singular, we'd be left unscathed. What we do is, if our armor's already depleted, we return so we don't explode again. */ function takeDamage(int dam, Pawn i, vector hl, vector m, name dtype) { // u.debug("takeDamage(): dam: " $ dam $ " inst: " $ u.sname(i) $ " hl: " $ u.sv(hl) $ " armor: " $ armor $ " dtype: " $ dtype); if (HUD != none) { HUD.shake(dam * 0.25); } if (armor < 0) { // u.debug("takeDamage(): armor depleted already"); return; } sparks(dam); if (role < ROLE_Authority) return; // The instigator is what team we're on. if (i != instigator && sameTeam(i, instigator)) dam *= teamDamage; armor -= dam; // Explode, either by shot damage or accidental (heh) detonation. if (armor <= 0 || (armed() && fromFront(i) && frand() < 0.40)) { // Reset the instigator so that whoever shot us gets credit. if (i != none && i != pilot) instigator = i; if (armed()) { // u.debug("takeDamage(): detonating from front"); detonate(hl, vect(0, 0, 1)); } else { // If it's not one of these, we were shot down. if (dtype != 'HitWall' && dtype != 'HitSL' && dtype != 'Ram') self.dtype = 'Shot'; playSound(crashSound, SLOT_None, 8.0); explode(hl, vect(0, 0, 1)); } } else { // Just a scratch. Play the dent sound. //if (type != 'HitWall') playSound(hullHits[rand(arrayCount(hullHits))], SLOT_None, 6.0); } } /** This will get called on the client when we switch to sim proxy. */ simulated function hitWall(vector hn, Actor wall) { local float dam; local DirectionalBlast db; // u.debug("hitWall()"); if (armed()) { // Blast decal. spawnBlast(true, location, hn); if (role == ROLE_Authority) { if ((Mover(wall) != none) && Mover(wall).bDamageTriggered) // Bogus damage type. wall.takeDamage(damage, instigator, location, normal(velocity) * momentumTransfer, 'RocketCrash'); makeNoise(1.0); detonate(location + explowallout * hn, hn); } // Don't call hitwall again. setPhysics(PHYS_None); // warstat == 1 code adapted from Projectile.hitWall(). //super.hitWall(hn, wall); } else { dam = reflect(hn, wall); if (level.netmode != NM_DedicatedServer) { db = spawn(Class'RocketX3.DScarVX', self); if (db != none) { db.drawScale *= (dam * 0.03); db.directionalAttach(velocity, hn); } } } } /** We have hit something. hn is the hit normal. Returns the amount of damage inflicted. In SL-SL collisions, this resets the velocity, which affects the second rocket's reflect() call. FIX. */ simulated function float reflect(vector hn, Actor a, optional float soften) { local float theta; local vector nv, x, y, z; local float relv; local float dam; if (soften == 0.0) soften = 1.0; // Default is hit wall. if (a.isA('StrangeShellVX')) dtype = 'HitSL'; else dtype = 'HitWall'; // Angle of impact. 1 is head on. Near 0 is losing a coat of // paint. Sometimes we're passed an inverse normal for simplicity, so // take the abs(). theta = abs(normal(velocity) dot hn); relv = vsize(velocity - a.velocity); // Average the angle and speed components. 100.0 is usually the // default armor (max. damage). 1000.0 is usually maxspeed. The // angle counts twice as much. dam = ((2.0 * (theta / crushAngle) + (relv / 1000.0)) / 3.0) * 100.0 * soften; // u.debug("reflect(): actor: " $ u.sname(a) $ " theta: " $ theta $ " relv: " $ relv $ " soften: " $ soften $ " dam: " $ dam); // Theta causes up to a 40% reduction in speed. nv = mirrorVectorByNormal(velocity, hn) * (1.0 - 0.40 * theta); if (soften < 1.0) velocity = (velocity * (1.0 - soften) + nv * soften); else velocity = nv; // Use the new velocity. Could we find a better hit location to use? if (role == ROLE_Authority) { takeDamage(dam + (rand(10) - 5), instigator, location, normal(velocity) * momentumTransfer, dtype); // Don't piss off CSHP. Server only. if (pilot != none) { pilot.clientSetRotation(rotator(velocity)); } } guidedRotation = rotator(velocity); // This'll never happen. if (bNoFuel) spin(); playSound(bounces[rand(ArrayCount(bounces))], SLOT_None, 4.0); return dam; } simulated function float arccos(float x) { return atan((sqrt(1 - x ^ 2)) / x); } /** Toggles the afterburners. */ function Afterburn() { // Need fuel to burn. //BroadcastMessage("AfterBurn Fuction"); if (bNoFuel) return; if (bAfterburn) { bAfterburn = false; throttle = thrprev; BEF.drawscale=0.4; B2EF.drawscale=0.4; } else { bAfterburn = true; thrprev = throttle; throttle = 1.5; BEF.drawscale=0.8; B2EF.drawscale=0.8; } // Trigger kick and fade sounds. updateSound(0); } function newOwner(Actor o) { // u.debug("newOwner(" $ u.sname(o) $ ")"); setOwner(o); } /** Returns true if the game's over. */ simulated function bool gameOver() { return (GRI != none && GRI.gameEndedComments != ""); } /** Handles fuel usage. Called from the controller's tick() function. Midair (after no-fuel condition) refueling does not work yet. FIX. */ simulated function burnFuel(float delta) { local float fr; local float dffx; local bool DamageFX; //local float RocketArmor; // u.debug("burnFuel(): current fuel: " $ fuel, DL_Verbose); // Don't burn fuel after game's over. if (gameOver()) return; // Burn fuel. Only do this on the server and owner client. The // owner client only does this to render the fuel gauge. if (role == ROLE_Authority || u.hasViewport(pilot)) { if (fuel > 0.0) { if (DamageFX == true) dffx = (armor / default.armor); if (DamageFX != true) dffx = 1; dffx = (armor / default.armor); fr = (baseFuelRate / dffx); if (bAfterburn) fr *= afterburnRate; fuel = fmax(0.0, fuel - fr * delta); return; } // Try to refuel. The client refuels, but doesn't ditch a pod. if (fuel == 0.0) { if (!refuel() && role == ROLE_Authority) bNoFuel = true; else /* if (bNoFuel) // Somehow we found a core. bNoFuel = false; */ } } // We don't really know we're out of fuel until the server sets // bNoFuel to true. We only run this "out of fuel" code once. if (bNoFuel) { if (!bClientNoFuel) { // u.debug("burnFuel(): Uh oh, no fuel."); // Cut the engines yo. updateSound(0); // We should be falling down... setRemoteRole(pilot); setPhysics(PHYS_Falling); noFuel(); spin(); bClientNoFuel = true; } } } /** This gets called when the shell runs out of fuel. */ function noFuel() { eject(pilot, 0, true); eject(gunner, 0, true); } simulated function spin() { randspin(rand(10000) + 10000); } /** This handles refueling from carried fuel cores. It is called on both (owner) client and server, but the "no fuel" condition is passed to the client from bNoFuel on the rocket. */ simulated function bool refuel() { if (pilot != none) { if (fc != none && fc.ammoAmount > 0) { if (role == ROLE_Authority) fc.useAmmo(1); playSound(refuelSound, SLOT_None, 1.0); fuel = default.fuel; return true; } } return false; } /** Tick. Not called on server with an auto proxy! simulated function tick(float delta) { // u.debug("tick(): rotation: " $ u.sr(rotation), DL_Normal, 5.0); // Dropping like a rock. if (bNoFuel) return; if (dumb) { burnFuel(delta); return; */ // If the game's over... freeze. Damnit this only works for players and guided rockets (fine). simulated function tick(float delta) { if (bNoFuel) return; if (dumb) { burnFuel(delta); return; } if (GRI != none && GRI.gameEndedComments != "") { setPhysics(PHYS_None); velocity = vect(0, 0, 0); return; } // The role is still auto on non-viewport clients. Duh. Took me // this long to figure that out. Can't test for sim proxy on the client. if (level.netmode == NM_Client && (instigator.isA('Bot') || !u.hasViewPort(instigator))) { updateSimProxy(); return; // WTF is this? When does this happen? FIX. } else if ((level.netmode != NM_Standalone) && (remoteRole == ROLE_AutonomousProxy)) { return; } // if server updated client position, client needs to replay moves after the update if (bUpdatePosition) clientUpdatePosition(); // Keep goin straight if we're dead! if (guided()) if (pInfo.brain != none && pInfo.brain.bGuiding) guidedRotation = pInfo.brain.getGuidedRotation(); else guidedRotation = pilot.viewRotation; if (role == ROLE_AutonomousProxy) autoMove(delta); else moveRocket(delta, velocity, guidedRotation); } simulated function updateSimProxy() { if (updateReal(realLocation, location, 20.0)) { // u.debug("updateSimProxy: real loc: delta: " $ vsize(realLocation - location), DL_Verbose); setLocation(realLocation); realLocation = vect(0, 0, 0); } if (updateReal(realVelocity, velocity, 0.0)) { // u.debug("updateSimProxy: real vel: delta: " $ vsize(realVelocity - velocity), DL_Verbose); velocity = realVelocity; // Aproximate the rotation on sim proxies (no roll). setRotation(rotator(velocity)); realVelocity = vect(0, 0, 0); } if (updateReal(realAccel, acceleration, 0.0)) { // u.debug("updateSimProxy: real acc: delta: " $ vsize(realAccel - acceleration), DL_Verbose); acceleration = realAccel; realAccel = vect(0, 0, 0); } } simulated function bool updateReal(vector v1, vector v2, float mindelta) { return (v1 != vect(0, 0, 0) && vsize(v1 - v2) > mindelta); } /** Auto proxy movement. Called from tick(). Calls serverMove(). */ function autoMove(float delta) { local SavedMove nm; // Send the move to the server. Skip move if too soon. if (clientBuffer < 0) { clientBuffer += delta; moveRocket(delta, velocity, guidedRotation); return; } else { clientBuffer = clientBuffer + delta - 80.0 / PlayerPawn(instigator).player.currentNetSpeed; } // I'm a client, so I'll save my moves in case I need to replay // them. Get a SavedMove actor to store the movement in. if (savedMoves == none) { savedMoves = getFreeMove(); nm = savedMoves; } else { nm = savedMoves; while (nm.NextMove != none) nm = nm.nextMove; nm.nextMove = getFreeMove(); nm = nm.nextMove; } nm.timestamp = level.timeseconds; nm.delta = delta; nm.velocity = velocity; nm.setRotation(guidedRotation); moveRocket(delta, velocity, guidedRotation); serverMove(level.timeseconds, location, nm.rotation.pitch, nm.rotation.yaw); } /** Is there a pilot and is he conscious? */ simulated function bool guided() { return (pilot != none && !bShootMode && pilot.health > 0); } /** Server replicates this to the client. */ simulated function clientAdjustPosition(float ts, float nlx, float nly, float nlz, float nvx, float nvy, float nvz) { super.clientAdjustPosition(ts, nlx, nly, nlz, nvx, nvy, nvz); // u.debug("clientAdjustPosition(): new v: " $ vsize(velocity), DL_Verbose); } /** Had to modify this slightly. */ simulated function clientUpdatePosition() { local SavedMove curm; bUpdatePosition = false; curm = savedMoves; while (curm != none) { if (curm.timestamp <= currentTimeStamp) { savedMoves = curm.nextMove; curm.nextMove = freeMoves; freeMoves = curm; freeMoves.clear(); curm = savedMoves; } else { // Use the current velocity, not the stored one! moveRocket(curm.delta, velocity, curm.rotation); curm = curm.nextMove; } } //u.debug("clientUpdatePosition(): updated v: " $ vsize(velocity), DL_Verbose); //super.clientUpdatePosition(); } /** Client replicates this to the server. Called only from tick(). */ function serverMove(float ts, vector clientloc, int pitch, int yaw) { local float clientErr, delta; local vector dloc; if (currentTimeStamp >= ts) return; if (currentTimeStamp > 0) delta = ts - currentTimeStamp; currentTimeStamp = ts; guidedRotation.pitch = pitch; guidedRotation.yaw = yaw; if (delta > 0) moveRocket(delta, velocity, guidedRotation); if (level.timeseconds - lastUpdateTime > 0.4) { //0.3) { // u.debug("serverMove(): sec since last update: " $ (level.timeseconds - lastUpdateTime), DL_Verbose); clientErr = 10000; } else if (level.timeseconds - lastUpdateTime > 0.07) { dloc = location - clientloc; clientErr = dloc dot dloc; errorSum += clientErr; } // If client has accumulated a noticeable positional error, correct him. if (clientErr > 3) { lastUpdateTime = level.timeseconds; // u.debug("serverMove(): sending updated pos: clientErr: " $ clientErr, DL_Verbose); clientAdjustPosition(ts, location.x, location.y, location.z, velocity.x, velocity.y, velocity.z); } //super.serverMove(ts, clientloc, pitch, yaw); } /** This clamps the guide rotation to 90 degree turns. We don't want exact 180 turns else the rocket may shoot straight up or down. Also clamp pitch to below 16384. The yaw goes wild past that. */ simulated function rotator adjustGuideRot(rotator gr, rotator rr) { local float dyaw, pitch; local rotator newr; // This returns the last known guide rotation, i.e. straight. :) if (!guided() || pilot.isA('Bot')) return gr; dyaw = (pilot.viewRotation.yaw & 65535) - (rr.yaw & 65535); pitch = gr.pitch; u.centerRotComp(dyaw); u.centerRotComp(pitch); newr = gr; newr.yaw = rr.yaw + clamp(dyaw, -16384, 16384); newr.pitch = clamp(pitch, -16384, 16384); return newr; } /** Actually moves the rocket based on the passed criteria. Eventually calls autonomousPhysics(). */ simulated function moveRocket(float delta, vector cv, rotator gr) { local vector deltav; local int maxroll, oldroll, rollmag; local float smoothRoll; local vector oldv, x, y, z; // u.debug("moveRocket(): delta: " $ delta $ " cv: " $ vsize(cv) $ " gr: " $ u.sr(gr), DL_Verbose); if (lastTP != none) { if (lastTPRot != rotation) { // u.debug("moveRocket(): teleported! new rot: " $ u.sr(rotation), DL_Verbose); cv = vsize(velocity) * vector(rotation); velocity = cv; gr = rotation; } lastTP = none; startcontrailVX(); } serverUpdate = level.timeseconds; oldroll = (rotation.roll & 65535); oldv = cv; // This is our steering component. Its strength is based on the // current velocity. At higher speeds it's lower. // Sliding effects adjustable or if 0 use delta if (SlideFX !=0) deltav = vector(adjustGuideRot(gr, rotator(cv))) * ((maxspeed + 700) - vsize(cv)) * (((SlideFX * 0.001568) + 0.05) * (armor / default.armor)); else deltav = vector(adjustGuideRot(gr, rotator(cv))) * ((maxspeed + 700) - vsize(cv)) * delta; // Here, we blend the current velocity (momentum) and the steering // vector from above to get the sliding effect. velocity = normal(cv + deltav) * vsize(cv); // Handle the rolling. maxroll = 65536 * 0.25; getAxes(gr, x, y, z); rollmag = int(10 * (y dot (velocity - oldv)) / delta); if (rollmag > 0) gr.roll = min(maxroll, rollmag); else gr.roll = max(65536 - maxroll, 65536 + rollmag); // Smoothly change the rotation. if (gr.roll > 32768) { if (oldroll < 32768) oldroll += 65536; } else if (oldroll > 32768) oldroll -= 65536; smoothroll = fmin(1.0, 2.0 * delta); gr.roll = gr.roll * smoothroll + oldroll * (1 - smoothroll); setRotation(gr); /** Normally an auto proxy does not move based on its physical properties like acceleration and velocity unless you tell it to. We only want to call autoPhysics() if it's a network game (where the auto proxy role is used). And, on listen servers, only if it's not the local viewport. The auto proxy role shows up on all the clients, so we can't specifically test for it. So we test netmodes, viewport (if a listen server), and pilot (for dumb fires and ejected pilots). */ // Do autonomous physics if: // We're not playing standalone and... if ((level.netmode != NM_Standalone) && // If we're a listen server, there's no viewport (remote player) and... (level.netmode != NM_ListenServer || !u.hasViewPort(instigator)) && (!instigator.isA('Bot')) && // We have a pilot. (pilot != none)) { // u.debug("moveRocket(): auto physics", DL_Verbose); autonomousPhysics(delta); } if (role == ROLE_Authority) { realLocation = location; realVelocity = velocity; realAccel = acceleration; } } /** Called on auto proxy and other clients. */ simulated function destroyed() { local Pawn p; // u.debug("destroyed()"); if (level.netmode != NM_DedicatedServer && !level.bDropDetail) spawnWreckageVX(); if (role == ROLE_Authority) { if (level.netmode != NM_Standalone) // u.debug("destroyed(): client err/sec: " $ (errorSum / (level.timeseconds - start))); // Let the bot brain know how we died. clearRider(pilot, pInfo, dtype); clearRider(gunner, gInfo); } if (rootct != none) rootct.end(); //spawnBlast(); //======================================================================== // Destroys Engine Flares and Nullweapon in Local play //======================================================================== if (nw != none) nw.Destroy(); Super.Destroyed(); if (BEF != none) BEF.Destroy(); Super.Destroyed(); if (B2EF != none) B2EF.Destroy(); Super.Destroyed(); if (JetRed != none) JetRed.Destroy(); Super.Destroyed(); if (JetBlue != none) JetBlue.Destroy(); Super.Destroyed(); p.switchToBestWeapon(); //=========================================================================== super.destroyed(); } /** Two cases: 1. We're calling this from hitwall() - use the supplied hit location and normal. 2. On the client, destroyed() has been called before a hitwall. In the off chance (likely on a LAN) that the destroy notification arrives from the server before the hitwall is called on the client, we need to spawn our own decal. */ simulated function spawnBlast(optional bool havev, optional vector hitl, optional vector hitn) { local vector x, y, z, hl, hn; local Actor wall; // u.debug("spawnBlast()", DL_Verbose); if (bBlasted || level.netmode == NM_DedicatedServer) return; if (havev) { hl = hitl; hn = hitn; } else if (role < ROLE_Authority && level.netmode != NM_Standalone) { getAxes(rotation, x, y, z); wall = trace(hl, hn, location + x * 200, location, false); if (wall == none) return; } spawn(explosionDecal, self,, hl, rotator(hn)); bBlasted = true; } simulated function spawnWreckageVX() { local int i; local WreckageVX w; local int num; num = 5 + rand(10); for (i = 0; i < num; i++) { w = spawn(class'WreckageVX',,, location, rotator(vrand())); w = spawn(class'WreckageVX',,, location, rotator(vrand())); w.eject(velocity * 1.0 + (vrand() * vsize(velocity) * 1.0)); } } /** Set the gunner. */ function setGunner(Pawn g) { local string s; local Inventory IG; gunner = g; g.SetDefaultDisplayProperties(); IG = g.FindInventoryType(class'UT_ShieldBelt'); if ( (IG != None) && (UT_Shieldbelt(IG).MyEffect != None) ) UT_Shieldbelt(IG).MyEffect.bHidden = True; g.SetDisplayProperties(ERenderStyle.STY_Translucent, FireTexture'unrealshare.Belt_fx.Invis', true, true); g.Visibility = 10; // g.bHidden=True; //==================================================================== g.playSound(gunnerSound, SLOT_None, 4.0 * g.soundDampening); setupRider(g, gInfo); if (pilot != none) s = gunnerMountStr[rand(arrayCount(gunnerMountStr))]; else s = gunnerMountStr2[rand(arrayCount(gunnerMountStr2))];; broadcastMessage(u.parseKillString(s, g, pilot, true)); } /** Sets up the controller for a new pilot. Usually called just after the controller is spawned. */ function setPilot(Pawn p, optional SkyNetVX skynetVX, optional SkyNodeVX launchsn) { local Inventory IP; // u.debug("setPilot(" $ u.sname(p) $ ")"); pilot = p; //===================================================================== // Sets Pilots display to Invisable and if has shieldbelt it is also // Invisable. // p.SetDefaultDisplayProperties(); IP = p.FindInventoryType(class'UT_ShieldBelt'); if ( (IP != None) && (UT_Shieldbelt(IP).MyEffect != None) ) UT_Shieldbelt(IP).MyEffect.bHidden = True; p.SetDisplayProperties(ERenderStyle.STY_Translucent, FireTexture'unrealshare.Belt_fx.Invis', true, true); p.Visibility = 10; // p.bHidden=True; //==================================================================== setupRider(p, pInfo, skynetVX, launchsn); if (p.isA('PlayerPawn')) { savedBob = PlayerPawn(p).bob; PlayerPawn(p).bob = 0; // So we can fire while ducking and not go straight to shoot mode. // Uh, okay. It's a "feature" now. // bDuck = PlayerPawn(p).bDuck; } else if (p.isA('Bot')) { // Bot need to go slow. throttle = 0.1; } // Save fc for the HUD. fc = FuelcoreVX(p.findInventoryType(class'FuelcoreVX')); // We do this just to init the shoot mode stuff. bShootMode = true; goShootMode(); } function setupRider(Pawn p, out RiderInfo info, optional SkyNetVX skynetVX, optional SkyNodeVX launchsn) { local StrangeShellVX sl; // u.debug("setupRider(" $ u.sname(p) $ ")"); info.pawn = p; // Check if we were previously the pilot or gunner of another SL. foreach radiusActors(class'StrangeShellVX', sl, 250) { if (sl != self) { if (sl.pilot == p) sl.clearRider(p, sl.pInfo); if (sl.gunner == p) sl.clearRider(p, sl.gInfo); } } if (p.isA('PlayerPawn')) info.bOldJumpStatus = PlayerPawn(p).bJumpStatus; info.bDelayedEject = false; if (p.isA('Bot')) { info.brain = spawn(Class'SLBotBrainVX'); info.brain.setBot(Bot(p), self, skynetVX, launchsn); } else { info.brain = none; } info.lastLoc = vect(0, 0, 0); p.bWarping = true; //p.bCollideWorld = false; giveJD(p); } /* Not used. function SLBotBrainVX getBrain(Bot b) { if (b == pilot) return pInfo.brain; else if (b == gunner) return gInfo.brain; else return none; } */ /** Pilot accessor. */ simulated function Pawn getPilot() { return pilot; } /** Gunner accessor. */ simulated function Pawn getGunner() { return gunner; } // Holy crap. The client glow doesn't seem to work reliably unless all // the values are over 100. function adjustGlow() { if (pilot != none && pilot.isA('PlayerPawn')) { if (bFog) { bFog = false; PlayerPawn(pilot).clientAdjustGlow(0.2, fogReset * -1); } else { bFog = true; PlayerPawn(pilot).clientAdjustGlow(-0.2, fogReset); } } } /** This should probably be called toggleShootMode(). */ function goShootMode() { local Inventory IPSM; if (role < ROLE_Authority) return; // u.debug("goShootMode()"); bShootMode = !bShootMode; if (pilot.isA('PlayerPawn')) { adjustGlow(); pilot.clientSetRotation(rotation); } if (bShootMode) setCollisionSize(shootCR, default.collisionHeight); else setCollisionSize(default.collisionRadius, default.collisionHeight); if (pilot != none) handleInv(false); //===================================================================== // Sets Pilot display to Invisable and if has shieldbelt it is also // Invisable if Pilot goes to shoot mode. // Pilot.SetDefaultDisplayProperties(); IPSM = Pilot.FindInventoryType(class'UT_ShieldBelt'); if ( (IPSM != None) && (UT_Shieldbelt(IPSM).MyEffect != None) ) UT_Shieldbelt(IPSM).MyEffect.bHidden = True; Pilot.SetDisplayProperties(ERenderStyle.STY_Translucent, FireTexture'unrealshare.Belt_fx.Invis', true, true); Pilot.Visibility = 10; // Pilot.bHidden=True; //==================================================================== } /** While riding the rocket you can't shoot unless you're in shoot mode, so we give you a useless 'null weapon' that doesn't really do anything. **/ function handleInv(bool ejected) { // u.debug("handleInv(" $ ejected $ "): weapon:" $ u.sname(pilot.weapon) $ " last:" $ u.sname(lastWeapon)); if (bShootMode || ejected) { // I don't know in what case it's none. If they're dead? if (pilot.weapon != none) { // Hopefully this is always right. if (pilot.weapon.isA('NullWeaponVX')) { pilot.weapon = none; pilot.deleteInventory(nw); pilot.pendingWeapon = lastWeapon; pilot.changedWeapon(); lastWeapon = none; } else { u.err("handleInv(): Switching weapon back, but current is not a null."); } } } else { // Store the previous weapon. lastWeapon = pilot.weapon; if (nw == none) nw = createNullWeaponVX(); // Give it to them. nw.giveTo(pilot); pilot.pendingWeapon = nw; //pilot.weapon.gotoState('DownWeapon'); pilot.changedWeapon(); //pilot.weapon = nw; // u.debug("handleInv(): new weapon:" $ pilot.weapon $ " state:" $ pilot.weapon.getStateName() $ " pending:" $ pilot.pendingWeapon); // Fake the ammo display. // if (pilot.weapon.isA('NullWeaponVX')) // NullWeaponVX(pilot.weapon).fakeAmmo(); } } /** We don't need to check for arena mutators anymore. Mine takes care of it - screw everyone else's. :) */ function NullWeaponVX createNullWeaponVX() { local NullWeaponVX nw; nw = spawn(class'NullWeaponVX', self); nw.sl = self; return nw; } simulated function addHUD(PlayerPawn pp) { local SLHUDVX slh; // This is effectively Mutator.registerHUDMutator(). if (pp.myHUD != none) { // u.debug("addHUD(" $ u.sname(pp) $ "): hud:" $ pp.myHUD); slh = spawn(HUDClassVX, self); } addedHUD = true; } /** This is the old controller tick(). */ simulated function ctick(float delta) { // u.debug("ctick(): loc: " $ u.sv(location) $ " ticked: " $ (bTicked == level.bTicked) $ " pilot: " $ u.sname(pilot) $ " gunner: " $ u.sname(gunner), DL_Normal, 5.0); if (gunner != none) { if (slc == none && level.netmode == NM_Client && u.hasViewPort(gunner)) slc = spawn(Class'ControllerVX', self); } if (pilot != none) { if (u.hasViewPort(pilot) && bRevY && !bFlipY) { PlayerPawn(pilot).bInvertMouse = !(PlayerPawn(pilot).bInvertMouse); bFlipY = true; } // -10 is a fudge factor... if (!bWahooPlayed && vsize(velocity) >= (minspeed - 10)) { playSound(sndWahoo, SLOT_None, 3.0); bWahooPlayed = true; } // Here so client will get this call. if (!addedHUD && u.hasViewPort(pilot)) addHUD(PlayerPawn(pilot)); } if (role == ROLE_Authority) { handleEjects(pilot, pInfo); handleEjects(gunner, gInfo); } /* // Zone pain. We should add our own pain zone types. if (u.legacy() && region.zone.bPainZone) { painTimer += delta; if (painTimer > 1.0) { takeDamage(region.zone.damagePerSec, instigator, location, vect(0, 0, 0), 'ZonePain'); painTimer -= 1.0; } } */ // The dedicated server receives goShootMode() calls from the client. if (level.netmode != NM_DedicatedServer && pilot != none && pilot.isA('PlayerPawn')) { if (PlayerPawn(pilot).bDuck != bDuck) { PlayerPawn(pilot).bDuck = 0; bDuck = 0; // u.debug("tick(): calling goShootMode()"); goShootMode(); } } if (pilot != none) adjustThrot(delta); updateSound(delta); if (bAfterburn && gunner != none && PlayerPawn(gunner) != none) { PlayerPawn(gunner).shakeView(delta, 400, 7.5); } if (role >= ROLE_AutonomousProxy) accelerate(delta); // Limit this to being executed on pilot and gunner clients only? FIX. // This is broken. Can't switch owners and auto proxies on the fly. //takeover(delta); burnFuel(delta); // Last but not least, the heart and soul... updateRiders(); } function handleEjects(Pawn p, RiderInfo info) { if (p != none) { if (p.health <= 0) { clearRider(p, info, 'Shot'); // } else if (teleported(info)) { // clearRider(p, info); } else if (info.bDelayedEject) { eject(p); } else if (level.netmode != NM_Standalone && jumped(p, info)) { eject(p); p.switchToBestWeapon(); } } } /** A general hack to allow teleportation effects (e.g. translocator). To account for warp zones we must make sure they are far from their last location AND far from the rocket. On slow computers, or servers with slomo jacked up, this may cause problems. May need to raise teleportDist in those cases. FIX? function bool teleported(RiderInfo info) { if ((vsize(info.lastLoc) != 0) && (vsize(info.pawn.location - info.lastLoc) > teleportDist) && (vsize(info.pawn.location - location) > teleportDist)) { u.debug("teleported(): delta: " $ vsize(info.pawn.location - location)); return true; } return false; } */ /** d == 0 means this we're switching modes. */ simulated function updateSound(float d) { // The drop sound overrides all others. We set it manually in eject(). if (ambientSound == sndDrop) { soundRadius = 64.0; soundVolume = 255; soundPitch = 64.0; return; } if (updateMarch(d)) return; // Adjust ambient pitch and volume. soundPitch = 24 + 40 * (vsize(velocity) / maxspeed); if (bNoFuel) { if (d == 0) playSound(abFadeSound, SLOT_None, 6.0); ambientSound = none; } else if (bAfterburn) { if (d == 0) playSound(abKickSound, SLOT_None, 2.0); ambientSound = abLoopSound; soundRadius = 128; soundVolume = 255; } else { if (d == 0) playSound(abFadeSound, SLOT_None, 2.0); soundRadius = 32; soundVolume = Min(255, 150 + 55 * (vsize(velocity) / maxspeed)); ambientSound = default.ambientSound; } } simulated function bool updateMarch (float Delta) { local int shields; local Inventory i; if ( pilot == None ) { return False; } shields=0; i=pilot.Inventory; JL0028: if ( i != None ) { if ( i.bIsAnArmor ) { shields += i.Charge; } i=i.Inventory; goto JL0028; } if ( (pilot.Health >= 199) && (shields >= 150) && (Armor >= Default.Armor) ) { if (sndTotalComm != None) { MaxSpeed=2000; } if (sndTotalComm == None) { MaxSpeed=1350; } if ( bMarchUnder ) { bMarchPlaying=True; if ( marchWait != -1.00 ) { if ( marchWait > 4.50 ) { playSound(sndTotalComm, SLOT_None, 1.0); marchWait=-1.00; } else { marchWait += Delta; } } AmbientSound=sndMarchLoop; SoundVolume=255; SoundPitch=64; return True; } } else { bMarchUnder=True; marchWait=0.00; bMarchPlaying=False; } return False; } /** Loop for updating trailers. */ simulated function getTrailers() { if (role == ROLE_AutonomousProxy || level.netmode == NM_StandAlone) { findTrailers(pilot, pInfo); findTrailers(gunner, gInfo); } } simulated function findTrailers(Pawn p, out RiderInfo info) { local Actor t; local int i; // u.debug("findTrailers(" $ u.sname(p) $ ")", DL_Verbose); i = 0; info.trailers[i] = none; if (p != none) { foreach p.childActors(class'Actor', t) { if (t.physics == PHYS_Trailer) { info.trailers[i] = t; i++; } // We can only hold so many... if (i == arrayCount(info.trailers)) break; } } } /** Set the acceleration based on the throttle level. */ simulated function accelerate(float delta) { local float max, amax; local float desired, speed; local float dfx; if (DamageFX == true) dfx = (armor / default.armor); if (DamageFX != true) dfx = 1; if (dfx >= 0.65) { if (bAfterburn) { max = MaxSpeed; } else if (!bAfterburn) { max = fullspeed; if (Trail != None ) Trail.Destroy(); } } if (dfx < 0.65) { if (bAfterburn) { max = (MaxSpeed * 0.85); } else if (!bAfterburn) { max = (fullspeed * 0.80); } } // Both the pilot and gunner add drag and reduce the max speed. if (pilot != none) max -= 100; if (gunner != none) max -= 100; speed = vsize(velocity); desired = lerp(fmin(throttle, 1.0), minspeed, max); amax = (AccelMax * dfx); if (desired < speed) // No reverse jets! amax *= ((AirBrakes * -0.0098) * dfx); // Airbrakes ratio. (0 to -3) if (bAfterburn) amax *= (2.0 * (dfx * 2)); // If we're close, just zero it. if (abs(speed - desired) < 0.5) acceleration = vect(0, 0, 0); else // Within 50, slow down. acceleration = vector(rotation) * (fmin(abs(speed - desired) / 50.0, 1.0) * amax); // u.debug("accelerate(): new accel: " $ u.sv(acceleration) $ " des/curr: " $ u.chopf(desired) $ "/" $ u.chopf(speed), DL_Verbose); } /** Called on the client to determine what's up with the throttle. Adjustments are sent to the server with clientSendThrot() when let go. */ simulated function adjustThrot(float delta) { if (pilot.isA('PlayerPawn') && ViewPort(PlayerPawn(pilot).player) != none && !bAfterburn) { if ((PlayerPawn(pilot).bWasForward || throtDir == 1) && thlvl < 1.0) { thlvl = FMin(thlvl + delta * thrate, 1.0); bThrotSent = false; } else if ((PlayerPawn(pilot).bWasBack || throtDir == -1) && thlvl > 0.0) { thlvl = FMax(thlvl - delta * thrate, 0.0); bThrotSent = false; } else { // Did they let go? if (!bThrotSent) { //if (role < ROLE_Authority) { clientSendThrot(thlvl); //} else { //throttle = thlvl; //} bThrotSent = true; } } if (thlvl == 0.0 || thlvl == 1.0) throtDir = 0; } } /** Client sends the adjusted throttle result to the server. */ function clientSendThrot(float thr) { // u.debug("clientSendThrot(" $ thr $ ")"); // Make sure they're sending a valid throttle. throttle = FClamp(thr, 0.0, 1.0); } /** Client sends the adjusted throttle result to the server. */ simulated function updateRiders() { local vector x, y, z, loc; // Minimum safe distance. local float d, mx, my, th; local Pawn p; // This positions the rider slightly behind and above the // rocket's center, so it looks between their legs. getAxes(rotation, x, y, z); loc = location; if (pilot != none) { // Hmm, this sorta works. FIX. if (pilot.isA('PlayerPawn') && PlayerPawn(pilot).isInState('FeigningDeath')) { //PlayerPawn(pilot).rise(); PlayerPawn(pilot).gotoState('PlayerWalking'); PlayerPawn(pilot).weapon = nw; } loc += x * pilotOffset.x; // + 50); //(FireOffset.Y - 95) * Y loc += y * pilotOffset.y; loc += z * pilotOffset.z; // Adjust z for speed. Hug the rocket. loc -= z * (10 * vsize(velocity) / maxspeed); // Brain controls the rotation, not the bot. // CSHP - Only update rotation if the authority. if (pilot.isA('Bot') && !bShootMode && role == ROLE_Authority) { pilot.clientSetRotation(rotation); } updateRider(pilot, pInfo, loc); } // The closest way to pack two vertically oriented cylinders along // a line, depending on the the angle of the line: // // case 1: side by side (x is fixed - mx) // case 2: stacked (y is fixed - my). // // We have theta, solve for the hypotenuse. if (gunner != none) { if (pilot != none) { loc = pilot.location; // Min x and y distances. mx = (pilot.collisionRadius * 3 + gunner.collisionRadius); my = (pilot.collisionHeight * 3 + gunner.collisionHeight); // mx = (pilot.collisionRadius + gunner.collisionRadius); // my = (pilot.collisionHeight + gunner.collisionHeight); th = rotation.pitch / 10430.2192; if ((mx * tan(th)) < my) { // Side by side. d = mx / cos(th); } else { // Stacked. d = my / sin(th); } d += 1; // FUDGE FACTOR loc += x * -d; } else { // Just use the gunner's collision radius to guesstimate the pilot's. loc = location; loc += x * pilotOffset.x; // - gunner.collisionRadius); loc += y * pilotOffset.y; loc += z * pilotOffset.z; } updateRider(gunner, gInfo, loc); } } simulated function updateRider(Pawn p, RiderInfo info, vector loc) { local EPhysics phys; // In order to intercept jump commands (with JumpDetector), we // have to set this to walking. Only for standalone games. if (level.netmode == NM_Standalone) { phys = PHYS_Walking; } else { phys = PHYS_None; } info.lastLoc = p.location; p.setLocation(loc); //p.move(loc - p.location); p.velocity = velocity; updateTrailers(p, info); p.setPhysics(phys); } /** We need to update any trailers because we just moved their owner. We don't need to update the trailer if it hasn't been ticked yet, though. */ simulated function updateTrailers(Pawn p, RiderInfo info) { local int i; for (i = 0; i < arrayCount(info.trailers) && info.trailers[i] != none; i++) if (info.trailers[i] != none) //&& info.trailers[i].bTicked) info.trailers[i].autonomousPhysics(0); } /** Ejects somebody. In standalone games we have to suppress the jump velocity to keep the behavior consistent with net games. We can't do that here because it's set in PlayerPawn.doJump() *after* Inventory.ownerJumped() is called. So we wait one tick and do the eject which resets the velocity. */ function eject(Actor a, optional int delay, optional bool bForced) { local vector x, y, z, loc; // u.debug("eject(" $ u.sname(a) $ ")", DL_Normal); if (a != none) { if (delay > 0) { // u.debug("eject(): delaying one tick", DL_Normal); if (a == pilot) pInfo.bDelayedEject = true; else gInfo.bDelayedEject = true; } else { // We aren't setting the velocity on eject // anymore. Every tick. // In standalone games, the rider has PHYS_Walking // set, which limits their velocity. We need to reset // it here, and the velocity. if (level.netmode == NM_Standalone) { resetPhysics(Pawn(a)); a.velocity = velocity; } // Add a little sideways dismount motion. getAxes(a.rotation, x, y, z); a.velocity += y * 100; if (a == pilot) { if (!bForced) { ambientSound = sndDrop; a.playSound(sndPilotEj, SLOT_None, 4.0 * Pawn(a).soundDampening); // We're ejecting. Time to arm the donuts. autoArm(); } clearRider(pilot, pInfo); } else { // Gunner. if (!bForced) a.playSound(sndGunnerEj, SLOT_None, 4.0 * Pawn(a).soundDampening); clearRider(gunner, gInfo); } } } } /** Removes the pilot. Normally called from eject(). If called from StrangeShellVX.destroy(), we are passed the damage type when we were destroyed. */ function clearRider(Pawn p, RiderInfo info, optional name dtype) { if (p == none) return; // u.debug("clearRider(" $ u.sname(p) $ ")"); if (p == pilot) { handleInv(true); if (pilot.isA('PlayerPawn')) { PlayerPawn(pilot).bob = savedBob; if (!u.hasViewPort(pilot) && bFlipY) { PlayerPawn(pilot).bInvertMouse = !(PlayerPawn(pilot).bInvertMouse); bFlipY = false; } } // If they're in shoot mode, let them keep the same rotation. if (!bShootMode) pilot.clientSetRotation(rotation); // Reset the fog is it's on. Might not be if we're in shoot mode. if (bFog) adjustGlow(); // Hmm, iffy. Need to unset the owner so we can get the "real" data. newOwner(none); remoteRole = ROLE_SimulatedProxy; pilot = none; } else if (p == gunner) { gunner = none; } else { u.err("clearRider(): Tried to clear a non-rider!"); return; } if (p.isA('Bot')) { if (info.brain != none) { if (dtype != '') info.brain.deathBy(dtype); info.brain.destroy(); } p.bCanFly = false; p.bCanWalk = true; } p.bWarping = false; //p.bCollideWorld = true; resetPhysics(p); clearJD(p); storeEject(p); } /** Reset a pawn's physics based on what type of zone it's in. */ function resetPhysics(Pawn a) { local EPhysics phys; if (a.region.zone.bWaterZone) { phys = PHYS_Projectile; } else { phys = PHYS_Falling; } a.setPhysics(phys); } /** Only used for standalone games. Gives the pawn an inventory item which detects jumps and calls eject. Other netmodes use bJumpStatus. */ /** Returns true in network games if they've jumped. */ function bool jumped(Pawn p, RiderInfo info) { return (p != none && p.isA('PlayerPawn') && PlayerPawn(p).bJumpStatus != info.bOldJumpStatus); } function giveJD(Pawn p) { local JumpDetectorVX jd; if (p.isA('PlayerPawn') && (level.netmode == NM_Standalone || (level.netmode == NM_ListenServer && u.hasViewPort(p)))) { // u.debug("giveJD(" $ u.sname(p) $ ")"); jd = spawn(class'JumpDetectorVX', self); jd.giveTo(p); jd.sl = self; } } /** Clears the jump detector. */ function clearJD(Pawn p) { local Inventory i; // u.debug("clearJD(" $ u.sname(p) $ ")"); if (level.netmode == NM_Standalone) { i = p.inventory; while (i != none) { if (i.isA('JumpDetectorVX')) { i.destroy(); return; } i = i.inventory; } } } function WarnCannons() { local Pawn P; for ( P=Level.Pawnlist; P!=None; P=P.NextPawn ) if ( P.IsA('TeamCannon') && !P.IsInState('TrackWarhead') && P.LineOfSightTo(self) ) { P.target = self; P.GotoState('TrackWarhead'); } } //================================================================= // Addded in case player dies in flight and Player display dosent reset // function pawnHealth() { if ( Pawn(Owner).Health <= 0 ); Pawn(Owner).bHidden=False; Pawn(Owner).Visibility = Pawn(Owner).Default.Visibility; Pawn(Owner).SetDefaultDisplayProperties(); } //======================================================================= simulated function bool sameTeam(Pawn p, Pawn p2) { return (p != none && p2 != none && level.game.isA('TeamGamePlus') && p.bIsPlayer && p2.bIsPlayer && p.playerReplicationInfo.team == p2.playerReplicationInfo.team); } gc//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** "Strangelove" mutator. Replaces the Redeemer with Konglauncher. Optionally can replace medboxes and/or health vials with fuelpods. */ class StrangeMutatorVX extends SLMutatorVX config (RocketX3); // These are set in the client options window. var() config bool bRandomPlacement; // Enable random konglauncher around the flag. var() config bool bRandomFuelNearKong; // Enable random fuel around the konglauncher. /** Max ammo, like in the arena mutator? */ var() config bool bMaxAmmo; var UtilVX u; // This is the maximum distance from the flag we'll spawn. var() config int randSpawnDist; // Max distance for Konglauncher to spawn around the flag. var() config int randSpawnFuel; // Max distance for Fuelcore to spawn around healthvials. var() config int randFuelNearKong; // Max distance for Fuelcore(5) to spawn around each konglauncher. var bool bExpired; function preBeginPlay() { bExpired = Class'UtilVX'.static.expiredBeta(level); super.preBeginPlay(); } function postBeginPlay() { if (!bExpired) { // This maintains the velocity of projectiles launched from a Strangelove. spawn(Class'ProjectileSNVX'); // Wait ten seconds. Hrm, let's try this... setTimer(0.1, false); } super.postBeginPlay(); } function timer() { if (bRandomPlacement) spawnRandSL(randSpawnDist); if (bRandomFuelNearKong) spawnFuelNearKong(randFuelNearKong); } function spawnRandSL(int dist) { local FlagBase fb; local PathNode pn; local int num, spawnindex; foreach AllActors(Class'FlagBase', fb) { num = 0; foreach RadiusActors(Class'PathNode', pn, dist, fb.location) { num++; } // Pick a random node and spawn it at that point. spawnindex = rand(num); num = 0; foreach RadiusActors(Class'PathNode', pn, dist, fb.location) { if (spawnindex == num) { spawn(Class'KonglauncherVX',,, pn.location); break; } num++; } foreach AllActors(Class'FlagBase', fb) { num = 0; foreach RadiusActors(Class'PathNode', pn, dist, fb.location) { num++; } // Pick a random node and spawn it at that point. spawnindex = rand(num); num = 0; foreach RadiusActors(Class'PathNode', pn, dist, fb.location) { if (spawnindex == num) { spawn(Class'KonglauncherVX',,, pn.location); break; } num++; } } } } ///////////////////////////////////////////////////// function spawnFuelNearKong(int dist) { local KonglauncherVX kl; local PathNode pn; local int numk, spawnindex; foreach AllActors(Class'KonglauncherVX', kl) { numk = 0; foreach RadiusActors(Class'PathNode', pn, dist, kl.location) { numk++; } // Pick a random node and spawn it at that point. spawnindex = rand(numk); numk = 0; foreach RadiusActors(Class'PathNode', pn, dist, kl.location) { if (spawnindex == numk) { spawn(Class'FuelcoreVX',,, pn.location); break; } numk++; } } foreach AllActors(Class'KonglauncherVX', kl) { numk = 0; foreach RadiusActors(Class'PathNode', pn, dist, kl.location) { numk++; } // Pick a random node and spawn it at that point. spawnindex = rand(numk); numk = 0; foreach RadiusActors(Class'PathNode', pn, dist, kl.location) { if (spawnindex == numk) { spawn(Class'FuelcoreVX',,, pn.location); break; } numk++; } } foreach AllActors(Class'KonglauncherVX', kl) { numk = 0; foreach RadiusActors(Class'PathNode', pn, dist, kl.location) { numk++; } // Pick a random node and spawn it at that point. spawnindex = rand(numk); numk = 0; foreach RadiusActors(Class'PathNode', pn, dist, kl.location) { if (spawnindex == numk) { spawn(Class'FuelcoreVX',,, pn.location); break; } numk++; } } foreach AllActors(Class'KonglauncherVX', kl) { numk = 0; foreach RadiusActors(Class'PathNode', pn, dist, kl.location) { numk++; } // Pick a random node and spawn it at that point. spawnindex = rand(numk); numk = 0; foreach RadiusActors(Class'PathNode', pn, dist, kl.location) { if (spawnindex == numk) { spawn(Class'FuelcoreVX',,, pn.location); break; } numk++; } } foreach AllActors(Class'KonglauncherVX', kl) { numk = 0; foreach RadiusActors(Class'PathNode', pn, dist, kl.location) { numk++; } // Pick a random node and spawn it at that point. spawnindex = rand(numk); numk = 0; foreach RadiusActors(Class'PathNode', pn, dist, kl.location) { if (spawnindex == numk) { spawn(Class'FuelcoreVX',,, pn.location); break; } numk++; } } foreach AllActors(Class'KonglauncherVX', kl) { numk = 0; foreach RadiusActors(Class'PathNode', pn, dist, kl.location) { numk++; } // Pick a random node and spawn it at that point. spawnindex = rand(numk); numk = 0; foreach RadiusActors(Class'PathNode', pn, dist, kl.location) { if (spawnindex == numk) { spawn(Class'FuelcoreVX',,, pn.location); break; } numk++; } } } function bool alwaysKeep(Actor o) { if (bExpired) return false; if (bMaxAmmo && o.isA('SLWeaponVX')) SLWeaponVX(o).maxOut(); return super.alwaysKeep(o); } // Added rotation rate fix. Otherwise exactly the same as the super. function bool ReplaceWith(actor Other, string aClassName) { local Actor A; local class aClass; if ( Other.IsA('Inventory') && (Other.Location == vect(0,0,0)) ) return false; aClass = class(DynamicLoadObject(aClassName, class'Class')); if ( aClass != None ) A = Spawn(aClass,,Other.tag,Other.Location, Other.Rotation); if ( Other.IsA('Inventory') ) { if ( Inventory(Other).MyMarker != None ) { Inventory(Other).MyMarker.markedItem = Inventory(A); if ( Inventory(A) != None ) { Inventory(A).MyMarker = Inventory(Other).MyMarker; A.SetLocation(A.Location + (A.CollisionHeight - Other.CollisionHeight) * vect(0,0,1)); } Inventory(Other).MyMarker = None; } else if ( A.IsA('Inventory') ) { Inventory(A).bHeldItem = true; Inventory(A).Respawntime = 0.0; } } if ( A != None ) { A.event = Other.event; A.tag = Other.tag; // All that for this! A.rotationRate = Other.rotationRate; return true; } return false; } u//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Explosion object. */ class StrangeExplVX extends AnimSpriteEffect config (RocketX3); var() Texture booms[2]; var() config bool bNoBlack; simulated function postBeginPlay() { local DamagePuffVX puff; super.postBeginPlay(); if (!level.bHighDetailMode) drawscale = 1.9; //playSound(effectSound1,, 12.0,, 3000); playSound(effectSound1, SLOT_None, 1.0); drawScale = default.drawScale + (frand() * 1.0); texture = booms[rand(arrayCount(booms))]; if (!bNoBlack && !level.bDropDetail) { puff = spawn(Class'DamagePuffVX'); puff.drawScale = drawScale * 3.0; } } // end q5//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** "Strangelove V2 Arena" mutator object. Replaces all weapons with Konglaunchers and all ammo with fuelpods. Except the default weapon is a sidearm and mini ammo becomes sidearm clips. */ class StrangeArenaVX extends Arena; var bool bExpired; //var bool bNoHRA; var UtilVX u; function preBeginPlay() { bExpired = class'UtilVX'.static.expiredBeta(level); if (bExpired) { weaponName = 'WarHeadLauncher'; ammoName = 'WarHeadAmmo'; weaponString = "BotPack.WarHeadLauncher"; defaultWeapon = Class'BotPack.WarHeadLauncher'; // weaponName = 'enforcer'; // ammoName = 'EClip'; // weaponString = "BotPack.enforcer"; // defaultWeapon = Class'BotPack.enforcer'; } u = spawn(Class'UtilVX', self); // Get "no Yellow Jacket" from the StrangeMutator. // bNoHRA = class'StrangeMutatorV3'.default.bNoHRA; // if (!bNoGWE) // defaultWeapon = Class'HRA'; /* level.game.damageMutator = self; level.game.messageMutator = self; */ spawn(Class'ProjectileSNVX'); super.preBeginPlay(); } function bool alwaysKeep(Actor other) { if (!bExpired) { // if (other.isA(weaponName) || (!bNoHRA)) { if (other.isA('SLWeaponVX')) SLWeaponVX(other).maxOut(); return true; } // These are never spawned but for inventory. if (other.isA('StrangeAmmoVX')) { return true; } /* if (!bNoGWE && other.isA('HRAntiSLV')) { Ammo(other).ammoAmount = Ammo(other).maxAmmo; return true; */ // } // Fuel core. Keep these, but don't fill them up to max. if (other.isA(ammoName)) { return true; } if (nextMutator != none) return (nextMutator.alwaysKeep(other)); return false; } /* function bool checkReplacement(Actor other, out byte bSuperRelevant) { if (!bExpired) { if (other.isA('Weapon')) { if (other.isA('NullWeaponVX') || (!bNoGWE && other.isA('GWE'))) return true; } if (!bNoGWE && other.isA('Enforcer')) { replaceWith(other, "Rocket-X.GWE"); return false; } // Else, replace it with a Konglauncher. if ((weaponString != "") && !other.isA(weaponName)) { // From Botpack.Arena. ... ? level.game.bCoopWeaponMode = false; replaceWith(other, weaponString); return false; } if (!other.isA(ammoName)) { replaceWith(other, ammoString); return false; } } bSuperRelevant = 0; return true; } */ // end v Q p u//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== class StrangeAmmoVX extends SLAmmoVX; // end R//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Strangelove weapon superclass. */ class SLWeaponVX extends TournamentWeapon abstract config (RocketX3); // DATA // var bool bFirearm; // Uses firing modes, etc. var() int hitdam; // Hit damage for firearms. var SLClipVX clip; // Current clip, if ammo().bClipped. var() bool bFakeReload; // There's no reload anim. Use down/select. //var SLClipFix clipfix; // Our clip fix HUD mutator. var() Class brassClass; var() Class wallhitClass; var bool bSetProjOwner; // If true, the owner will be set on new projectiles. var Projectile lastProj; // Keep track of the last projectile fired. var vector spawnProjOffset; // Optional projectile offset, replaces fireOffset/calcDrawOffset(). enum EFireMode { FM_Single, FM_Burst, FM_Auto, }; var EFireMode fireMode; // 0=single, 1=burst, 2=auto var() bool bAltSwitchMode; // Alt-fire changes the fire mode. var() int rpm; // Rounds per minute. var() float burstWait; // How long we sleep after a burst. var() int burstRounds; // # of rounds in a burst. var() int burstCount; // Burst counter. var bool bClear; // Can refire while in a burst cycle? var bool bInitFA; // See clientFire(). // Recoil data. struct RecoilInfo { var float base; // The base recoil increase per shot. var float limit; // Max recoil in any direction. var float kick; // Additional pitch factor. See recoil(). var float returnRate; // Rate at which recoil is reduced per sec. var float smoothRate; // Rate at which recoil is smoothed out. var float pvoScale; // Produces PVO offset due to recoil. //var float pitchScale; // Produces pitch offset due to recoil. var float accScale; // Scales the recoil to produce an accuracy figure for traceFire(). }; var() RecoilInfo recoilData; var vector recoilv; // Current recoil. var vector smoothrv; // Current, smoothed recoil. var bool bAlt; // This affects reuse of functions for alt-fire. // Akimbo config. var() bool bAkimbo; // Can be used akimbo? var SLWeaponVX slave; // The slave weapon. var SLWeaponVX master; // The master weapon (only set on slave). var bool bSlave; // Is this weapon a slave? var bool bSetup; // Used for setting display props. var bool bBringingUp; // Brings up the slave on the client. var() localized string slaveName; // The name of the slave weapon. var() byte akimboSwitchPriority; // Switch priority of akimbo pair. var() string leftMesh; // The other mesh. var() float slaveWait; var() float slaveAltWait; var() float slaveAcc; // Accuracy drop for akimbo weapons. /** Animation and Sound Struct (tm). :) Useful for putting all anim and sound info in one place, and not having to override a bunch of functions. */ struct ASS { var() name aname; var() float arate; var() float tween; var() Sound sound; var() float volume; var() ESoundSlot slot; var() bool bSkipOwner; }; var() ASS assFire; var() ASS assAltFire; var() ASS assSelect; var() ASS assDown; var() ASS assReload; var() ASS assIdle; var() ASS assEmpty; var() ASS assMode; /** Idle properties. */ var() float idleLapse; var() float idleRandom; var bool bPendingLock; var Actor LockedTarget, NewTarget, OldTarget; var() Texture xhair; /** This weapon has no "center" handedness. Either because it has no center model (faces removed on left/right), or we specifically don't want it because this weapon can be used akimbo. Default is true. */ var() bool bNoCenter; var() Texture MFVariations[6]; /** The max amount the gun will slide depending on pitch. */ var() float paSlide; /** These are similar to flashY/O except these values are applied at a sliding amount, depending on the pitch adjustment. See pitchAdjust(). */ var() float paFlashY, paFlashO; /** Used to mimic another weapon's switch priority. See setSwitchPriority(). Also used to set autoSwitchPriority in postBeginPlay(). */ var() name mimicPriorityOf; // Info that appears next to the reticule. var float retbar; var string retmsg; var string retmsg2; var string retmsg3; var Font retFont; var StylusVX yy; var UtilVX u; // REPLICATION // replication { reliable if (role == ROLE_Authority && bNetOwner && bAkimbo) slave, master, bSlave, bBringingUp; reliable if (role == ROLE_Authority && bNetOwner) clip; reliable if (role == ROLE_Authority) remoteReload, updateMaxAmmo, fireMode; } // METHODS // /** Starts fully loaded. */ simulated function postBeginPlay() { local Class c; u = spawn(Class'UtilVX', self); u.setDebugLevel(DL_Verbose); u.debug("postBeginPlay()"); // Set switch priorities from mimic weapon. if (mimicPriorityOf != '') { c = Class(dynamicLoadObject("Botpack." $ mimicPriorityOf, Class'Class')); if (c != none) { autoSwitchPriority = c.default.autoSwitchPriority; // The default is -1, which means if we don't specify it // in the subclass, it gets assigned here to the auto value. if (bAkimbo && akimboSwitchPriority == -1) akimboSwitchPriority = autoSwitchPriority; } } // u.loadLeftMeshes(); if (role < ROLE_Authority) return; super.postBeginPlay(); } function destroyed() { if (slave != none) slave.destroy(); super.destroyed(); } /** Wrapper to get ammoType as a SLAmmo object. */ simulated function SLAmmoVX ammo() { if (ammoType == none) giveAmmo(Pawn(owner)); return SLAmmoVX(ammoType); } function bool useAmmo(int num) { local SLAmmoVX a; a = ammo(); if (a.bClipped) { return (clip != none && clip.useRound()); } else { return a.useAmmo(num); } } /** This is where the client actually gets the ammoType, so let's update the maxAmmo, if necessary. */ function giveAmmo(Pawn p) { local int max; local bool bUpdate; if (ammoName == none) return; max = Class(ammoName).default.configMaxAmmo; bUpdate = (ammoType == none && max > 0); //super.giveAmmo(p); ammoType = Ammo(p.findInventoryType(ammoName)); if (ammoType == none) { ammoType = spawn(ammoName); p.addInventory(ammoType); ammoType.becomeItem(); ammoType.gotoState('Idle2'); ammo().weaponSpawned(); } /* Normally the pickup count for a new, clipped weapon is 1. Nothing else really makes sense unless you're running an arena mutator which pumps up the count. The following code allows up to start the weapon loaded and max out the clips in that situation. */ if (ammo().bClipped) { clip = ammo().defaultClip(); pickupAmmoCount--; } ammoType.addAmmo(pickupAmmoCount); if (bUpdate) updateMaxAmmo(max); } /** This is called from StrangeArena to give us max ammo. This is the only place that maxAmmo is used as a class default var. We need to take into account configMaxAmmo. */ function maxOut() { local int max; max = Class(ammoName).default.configMaxAmmo; if (max > 0) { pickupAmmoCount = max; } else { pickupAmmoCount = Class(ammoName).default.maxAmmo; } } /** Server can update max ammo on the client. */ simulated function updateMaxAmmo(int max) { if (ammoType != none) ammoType.maxAmmo = max; ammoName.default.maxAmmo = max; } /** Returns the total ammo, including clip rounds. */ simulated function int getAmmo() { return ammo().getAmmo(); } simulated function int getMaxAmmo() { return ammo().getMaxAmmo(); } /** Do we have any ammo left, clipped or otherwise? */ simulated function bool ammoLeft() { return (getAmmo() > 0); } /** Returns true if the clip is empty, but we have ammo left. */ simulated function bool needReload() { return (ammo().bClipped && clip.empty() && ammoLeft()); } /** This is based on the enforcer botDesireability(). It supports akimbo weapons. */ event float botDesireability(Pawn bot) { local SLWeaponVX has; local float desire; has = SLWeaponVX(bot.findInventoryType(class)); desire = maxDesireability + bot.adjustDesireFor(self); if (has != none) { if ((!bHeldItem || bTossedOut) && bWeaponStay) return 0; if (has.slave != none) { if ((respawnTime < 10) && (bHidden || (has.ammoType == none) || (has.getAmmo() < has.getMaxAmmo()))) return 0; // WTF does this mean? We haven't equipped it yet? if (has.ammoType == none) return 0.25 * desire; if (has.getAmmo() > 0) return fmax( 0.25 * desire, has.ammoType.maxDesireability * fmin(1, 0.15 * has.getMaxAmmo() / has.getAmmo()) ); } } if ((bot.weapon == none) || (bot.weapon.AIRating <= 0.4)) return 2 * desire; return desire; } // Sometimes the owner isn't set (initial network transfers). This is // called before drawWeapons() in ChallengeHUD. simulated function drawRetMsgs(Canvas c, Color color) { local int x, y, dist; local float w, h, xl, yl; // Nothing to display. if (retmsg == " ") return; if (yy == none) yy = spawn(Class'StylusVX', self); yy.setCanvas(c); // Distance from ret. dist = 48; if (bSlave) dist = 56; if (retFont == none) retFont = class'FontlibVX'.static.getFont(FS_Slick); if (retFont == none) return; c.font = retFont; // c.style = ERenderStyle.STY_Translucent; c.drawColor = color; c.textSize(retmsg, xl, yl); w = xl; h = yl; c.textSize(retmsg2, xl, yl); w = fmax(w, xl); w = fmax(w, 50); if (hand() < 0) { x = c.clipx / 2.0 + dist; } else { x = c.clipx / 2.0 - (dist + w); } y = c.clipy / 2.0 - 20; if (retbar >= 0.0) { // c.drawColor = color * 0.7; yy.drawFrame(x, y, w + 2, yl + 2, 1, false); c.setPos(x + 1, y + 1); c.drawColor = color * 0.8; yy.pix(w * retbar, yl); } c.drawColor = color; c.setPos(x + 2, y + 2); c.drawText(retmsg); c.setPos(x + 2, y + yl + 3); c.drawText(retmsg2); if (retmsg3 != " ") { c.textSize(retmsg3, xl, yl); c.setPos(x + w - xl + 1, y + 2); c.drawText(retmsg3); } } simulated function setRetMsgs() { local SLAmmoVX a; retmsg = " "; retmsg2 = " "; retmsg3 = " "; a = ammo(); // Client doesn't have ammo yet. if (a == none || (a.bClipped && clip == none)) return; if (a.bClipped) { retbar = (float(clip.getRounds()) / clip.getMaxRounds()); retmsg = "rnds " $ clip.getRounds(); // If we're a a slave, only report the rounds. if (!bSlave) retmsg2 = "clips " $ a.getClips(); } else { retbar = (float(getAmmo()) / getMaxAmmo()); retmsg = "rnds " $ getAmmo(); } if (bFirearm && !bSlave) { switch (fireMode) { case FM_Single: retmsg3 = "semi"; break; case FM_Burst: retmsg3 = "burst"; break; case FM_Auto: retmsg3 = "auto"; break; } } if (isInState('Reloading')) { retmsg = "reloading"; // Otherwise, it'll overlap. retmsg3 = " "; } } simulated function drawXhair(ChallengeHUD hud, Canvas c) { local float scale, w, pickd; if (xhair == none) return; if (c.clipx < 512) scale = 0.5; else scale = fmax(1, int(0.1 + c.clipx / 640.0)); pickd = level.timeSeconds - hud.pickupTime; if (pickd < 0.4) { if (pickd < 0.2) scale *= (1 + 5 * pickd); else scale *= (3 - 5 * pickd); } scale += fmin(1.0, vsize(recoilv) / 1000.0); w = 64.0 * scale; if (PlayerPawn(owner).handedness == -1) c.setPos(0.503 * (c.clipx - w), 0.504 * (c.clipy - w)); else if (PlayerPawn(owner).handedness == 1) c.setPos(0.497 * (c.clipx - w), 0.496 * (c.clipy - w)); else c.setPos(0.5 * (c.clipx - w), 0.5 * (c.clipy - w)); c.style = ERenderStyle.STY_Normal; c.drawColor = 15 * hud.crosshairColor; c.drawTile(xhair, w, w, 0, 0, 64, 64); } function bool weaponSet(Pawn p) { u.debug("weaponSet(" $ u.sname(p) $ ")"); if (bSlave) return false; else super.weaponSet(p); } /** This is called when we want to know which weapon we prefer. Usually returns the autoSwitchPriority. Based on Weapon.uc and enforcer.uc. */ function float switchPriority() { local int temp; // Never switch to the slave. if (bSlave) return -10; // Bots have their own scheme. if (!owner.isA('PlayerPawn')) return rateSelf(temp); if (ammoLeft()) { if (slave != none) return akimboSwitchPriority; } else { // Keeps us from switching through weapons without ammo. if (Pawn(owner).weapon == self) return -0.5; else return -1; } return autoSwitchPriority; } /** This is called when a weapon is spawned (in spawnCopy()). Most weapons look for a priority and set it, and if there's none, they insert one. We just want to mimic a UT weapon priority and leave it at that, for now. */ function setSwitchPriority(Pawn p) { local int i; if (PlayerPawn(p) != none) { for (i = 0; i < ArrayCount(PlayerPawn(p).weaponPriority); i++) { // Normally this is class.name. if (PlayerPawn(p).weaponPriority[i] == mimicPriorityOf) { autoSwitchPriority = i; return; } } // If, for whatever reason, they don't have our mimicked // (Botpack) class, just stick us in there. super.setSwitchPriority(p); } } function setDisplayProperties(ERenderStyle style, texture tex, bool bLighting, bool bEnviroMap) { if (!bSetup) { bSetup = true; if (slave != none) slave.setDisplayProperties(style, tex, bLighting, bEnviromap); bSetup = false; } super.setDisplayProperties(style, tex, bLighting, bEnviromap); } function setDefaultDisplayProperties() { if (!bSetup) { bSetup = true; if (slave != none) slave.setDefaultDisplayProperties(); bSetup = false; } super.setDefaultDisplayProperties(); } /** Hmm, the "this will annoy people" part really messes up the bots. They try to pick up weapons they don't even need. Need to address that before messing with it here. */ function bool handlePickupQuery(Inventory i) { local Pawn p; local int oldAmmo; local int rounds; u.debug("handlePickupQuery()"); if (i.class == class) { // NEVER return false past this point. You'll end up with doubles. p = Pawn(owner); if (bAkimbo && slave == none) { // Spawn the slave weapon. slave = spawn(class, p); itemName = slaveName; // FIX. Generalize. AIRating = 0.4; slave.setupSlave(self, Pawn(owner).weapon == self); } else { // Can't cheat with weapon stay... if (Weapon(i).bWeaponStay && (!Weapon(i).bHeldItem || Weapon(i).bTossedOut)) return true; /** With clipped weapons that are dropped, you can take the clip out. */ if (ammo().bClipped && SLWeaponVX(i).clip != none) { ammo().addClip(SLWeaponVX(i).clip); } else { // WTF is all this????? if (ammoType != none) { oldAmmo = getAmmo(); if (ammoType.addAmmo(Weapon(i).pickupAmmoCount) && (oldAmmo == 0) && (p.weapon.class != i.class) && !p.bNeverSwitchOnPickup) { weaponSet(p); } } } } p.receiveLocalizedMessage(class'PickupMessagePlus', 0, none, none, self.class); i.playSound(i.pickupSound); if (level.game.LocalLog != none) level.game.LocalLog.logPickup(i, Pawn(owner)); if (level.game.WorldLog != none) level.game.WorldLog.logPickup(i, Pawn(owner)); i.setRespawn(); return true; } // Same class. // Continue down the chain. if (inventory == none) return false; return inventory.handlePickupQuery(i); } /** bBringUp is true if we picked up this slave with another one already equipped. */ function setupSlave(SLWeaponVX p, bool bBringup) { becomeItem(); master = p; bSlave = true; if (bFirearm) fireMode = p.fireMode; setDisplayProperties(p.style, p.texture, p.bUnlit, p.bMeshEnviromap); giveAmmo(Pawn(owner)); if (bBringUp) bringUp(); else gotoState('Idle2'); } function setHand(float Hand) { if ( Hand == 2 ) { bHideWeapon = true; return; } else bHideWeapon = false; PlayerViewOffset.Y = Default.PlayerViewOffset.Y; PlayerViewOffset.X = Default.PlayerViewOffset.X; PlayerViewOffset.Z = Default.PlayerViewOffset.Z; PlayerViewOffset *= 100; //scale since network passes vector components as ints } /* simulated function setHand(float hand) { u.debug("setHand(" $ int(hand) $ "): slave: " $ u.sname(slave)); // No center? Use right. if (bNoCenter && hand == 0) hand = -1; if (hand == 2) { // Hidden! bHideWeapon = true; playerViewOffset.y = 0; fireOffset.Y = 0; } else { // Not hidden! bHideWeapon = false; if (slave != none) slave.setHand(-hand); /* // Set the mesh. if (leftMesh != "" && hand == 1) setSkelMesh(SkeletalMesh(dynamicLoadObject(leftMesh, Class'SkeletalMesh'))); else setSkelMesh(SkeletalMesh(default.playerViewMesh)); */ // We don't care about the PVO if it's not being used. if (owner.isA('PlayerPawn') && Viewport(PlayerPawn(owner).player) != none) setPVO(hand, default.playerViewOffset); fireOffset.y = default.fireOffset.y * hand; } } /** Sets the playerViewOffset based on the hand. */ simulated function setPVO(float hand, vector def) { local vector pvo; if (hand == 0) { pvo.x = def.x * 0.88; pvo.y = -0.2 * def.y; pvo.z = def.z * 1.12; } else { pvo.x = def.x; pvo.y = def.y * hand; pvo.z = def.z; } pvo *= 100; // Set it. // u.debug("setPVO(" $ int(hand) $ "): new pvo: " $ u.sv(pvo)); playerViewOffset = pvo; } */ state ClientActive { simulated function animEnd() { u.debug("ClientActive:animEnd()"); bBringingUp = false; if (!bSlave) { super.animEnd(); if (slave != none && !isInState('ClientActive')) { // Heh. FIX this. if ((getStateName() == 'None') || (getStateName() == 'Sidearm')) slave.gotoState(''); else slave.gotoState(getStateName()); } } } simulated function beginState() { u.debug("ClientActive:beginState()"); //clipHUDFix(); setHand(hand()); super.beginState(); bBringingUp = false; if (slave != none) slave.gotoState('ClientActive'); } } state ClientDown { simulated function animEnd() { if (!bSlave) super.animEnd(); } simulated function EndState() { if (slave != none) slave.gotoState(''); } } function bringUp() { u.debug("bringUp()", DL_Normal); //clipHUDFix(); if (owner.isA('PlayerPawn')) { setHand(hand()); PlayerPawn(owner).endZoom(); } if (slave != none) slave.bringUp(); bBringingUp = true; bWeaponUp = false; playSelect(); gotoState('Active'); //super.bringUp(); } /** This is called after the master has fired. If bWait is true, there is a slight pause before it fires the slave. */ simulated function slaveFire(bool bUseAlt, bool bWait) { // u.debug("slaveFire(" $ bAlt $ ", " $ bWait $ ")"); // Yes, this gets run twice for bWait == true. Tough. bAlt = bUseAlt; if (bWait) { gotoState('SlaveFireWait'); } else { // Yes, this is silly. We want to pickup subclass behavior in the alt methods. if (role < ROLE_Authority) { if (bAlt) clientAltFire(0); else clientFire(0); } else { if (bAlt) altFire(0); else fire(0); } } } /** This state causes a slight random pause before the slave fires (after the master). See slaveFire(). */ simulated state SlaveFireWait { begin: if (bAlt) { sleep(slaveAltWait * frand()); } else { sleep(slaveWait * frand()); } slaveFire(bAlt, false); } /** Replicated reload function for remote clients. */ simulated function remoteReload() { reload(); } /** Tests for ammo, starts an animation, and switches to the reload state. */ simulated function reload() { local SLAmmoVX a; a = ammo(); if (a.bClipped) { u.debug("reload(): rounds: " $ clip.getRounds() $ " clips: " $ a.getClips(), DL_Normal); // If the other weapon is reloading and and we don't have more than one spare, return. if (mate() != none && mate().isInState('Reloading') && (a.getClips() == 1)) { u.debug("reload(): mate reloading"); } else if (a.getClips() > 0) { // This ejects a spent clip. // if (ammoType != none && SLAmmoVX(ammoType).spentClipV3 != none) // spawnBrass(SLAmmoVX(ammoType).spentClipV3, 0.5); // Again, must initiate animation before changing states. See // clientFire() comments. playReload(); gotoState('Reloading'); // Handle remotes. if (!u.hasViewPort(owner)) remoteReload(); } } } /** The animation has been initiated in reload(). This state waits for it to finish. the client/Alt/Fire() functions are for passing fire commands to the slave while the primary is reloading. */ simulated state Reloading { ignores reload; function fire(float v) { if (slave != none) slave.fire(v); } function altFire(float v) { if (slave != none) slave.altFire(v); } simulated function bool clientFire(float v) { if (slave != none) slave.clientFire(v); } simulated function bool clientAltFire(float v) { if (slave != none) slave.clientAltFire(v); } begin: // u.debug("Reloading:begin"); // Finish reload anim from reload(). finishAnim(); if (bFakeReload) { playAss(assSelect); finishAnim(); } if (role == ROLE_Authority) { clip = ammo().reload(); finish(); } else { gotoState('Idle'); } } /** This initiates the anim in reload(). Reloading:begin finishes it. */ simulated function playReload() { if (bFakeReload) { playAss(assDown); } else { playAss(assReload); } } /** Play ASS struct. bReplicate means playSound will be called from a non-simulated function, which means it will be replicated to the relevant clients. bSkipOwner means the sound is played in a simulated function on the client as well as the server, so when we're replicating it, don't send it to the originating client. Returns true if the animation played. */ simulated function bool playAss(ASS a, optional bool bReplicate, optional bool bSkipOwner) { local float v; u.debug("playAss(): aname: " $ a.aname $ " arate: " $ u.sf(a.arate)); if (a.sound != none && owner != none) { v = a.volume * Pawn(owner).soundDampening; if (bReplicate) replicateSound(a.sound, a.slot, v); else if (bSkipOwner || a.bSkipOwner) playOwnedSound(a.sound, a.slot, v); else playSound(a.sound, a.slot, v); } if (a.aname != '' && a.arate > 0) { if (hasAnim(a.aname)) { playAnim(a.aname, a.arate, a.tween); return true; } else { u.debug("playAss(): no anim: " $ a.aname); } } return false; } /** Not simulated, so it gets replicated. */ function replicateSound(Sound s, ESoundSlot slot, float vol) { playSound(s, slot, vol); } /** Primary fire. */ function fire(float v) { local bool bWait; // u.debug("fire(" $ u.chopf(v) $ "): bAlt: " $ bAlt, DL_Normal); if (ammoType == none) giveAmmo(Pawn(owner)); if (ammoLeft()) { if (needReload()) { // u.debug("fire(): needs reload"); // Reload may fail silently in the the master/slave is // reloading. No empty sound. FIX? reload(); } else { bWait = true; if (bFirearm) { gotoState('FAFire'); } else { fire2(v); } } } else { u.debug("fire(): no ammo"); // clientFire() isn't called, so... if (level.netmode == NM_Standalone || (level.netmode == NM_ListenServer && u.hasViewPort(owner))) playAss(assEmpty); } if (slave != none) slave.slaveFire(bAlt, bWait); } /** Primary fire for non-firearms. */ function fire2(float v) { u.debug("fire2(" $ u.chopf(v) $ ")"); if (ammoLeft()) { if (bAlt) gotoState('AltFiring'); else gotoState('NormalFire'); bCanClientFire = true; bPointing = true; if (bRapidFire || (firingSpeed > 0)) Pawn(owner).playRecoil(firingSpeed); if (bInstantHit) { traceFire(0.0); useAmmo(1); } else { if (bAlt) projectileFire(altProjectileClass, altProjectileSpeed, bWarnTarget); else projectileFire(projectileClass, projectileSpeed, bWarnTarget); } // Run this after projectileFire() in case of spawn problems. if (bInstantHit || lastProj != none) { if (bAlt) playAltFiring(); else playFiring(); // Don't use ammo if the spawn failed! useAmmo(1); } else { finish(); } } } state Idle { simulated function playIdleAnim() { //if (!isAnimating() && frand() < idleRandom) // playAss(assIdle); //function timer() // playIdleAnim(); } simulated function beginState() { setTimer(idleLapse, true); } simulated function endState() { u.debug("Idle.endState()"); setTimer(0.0, false); } begin: bPointing=false; // Switch to another weapon when empty. if (!ammoLeft()) Pawn(owner).switchToBestWeapon(); /* Don't refire. if (Pawn(owner).bFire != 0) fire(0.0); if (Pawn(owner).bAltFire != 0) altFire(0.0); */ disable('animEnd'); //playIdleAnim(); } /** FIX? */ state Active { function beginState() { // u.debug("Active:beginState()"); //super.beginState(); bChangeWeapon = false; } function endState() { // u.debug("Active:endState()"); super.endState(); bBringingUp = false; } function bool putDown() { // u.debug("Active:putDown()"); return super.putDown(); } begin: finishAnim(); if (bChangeWeapon) gotoState('DownWeapon'); bWeaponUp = true; bCanClientFire = true; if (!bSlave && (level.netmode != NM_Standalone) && (owner != none) && owner.isA('TournamentPlayer') && (PlayerPawn(owner).player != none) && !PlayerPawn(owner).player.isA('ViewPort')) { if (Pawn(owner).bFire != 0) TournamentPlayer(owner).sendFire(self); else if ( Pawn(owner).bAltFire != 0 ) TournamentPlayer(owner).sendAltFire(self); else if ( !bChangeWeapon ) TournamentPlayer(owner).updateRealWeapon(self); } finish(); } /* WTF was I doing with this? function timer() { u.debug("Global.timer()"); } */ /** This may not work for all subclasses, but it does for the sidearm. FIX? */ simulated function playFAFiring(optional bool bSkipNext) { if (bInitFA) { bInitFA = false; } else { if (fireMode == FM_Single) { playFiring(); } else { playAltFiring(); } } if (bSkipNext) bInitFA = true; } /** Firing mode for firearms. This is a dual client/server state. */ simulated state FAFire { // Can't switch modes mid-burst! ignores altFire, clientAltFire; //, animEnd; function fire(float v) { u.debug("FAFire:fire(): clear: " $ bClear); if (bClear) { // Must clear the state. Not sure why. gotoState(''); global.fire(v); } } simulated function bool clientFire(float v) { // u.debug("FAFire:clientFire(): clear: " $ bClear); if (bClear) { // Must clear the state. gotoState(''); return global.clientFire(v); } else { return false; } } simulated function beginState() { // u.debug("FAFire:beginState()"); bClear = false; burstCount = 0; } /* Debugging. simulated function endState() { u.debug("FAFire:endState()"); } */ begin: u.debug("FAFire.begin"); fireLoop: while (((Pawn(owner).bFire != 0 || Pawn(owner).bAltFire != 0) && fireMode == FM_Auto) || (fireMode == FM_Burst && burstCount < burstRounds) || burstCount == 0) { // Debugging. u.debug("FAFire:fireLoop: fire loop: burstCount: " $ burstCount $ " bFire/Alt: " $ Pawn(owner).bFire $ "/" $ Pawn(owner).bAltFire); if (needReload() || !ammoLeft()) break; /* Recoil animation. Note that the recoil animations keep going after the fire loop is done if we hold down the fire button. FIX, eventually. Also the recoil movement causes the recoil anim to temporarily stop. FIX, eventually. */ bRapidFire = (fireMode > FM_Single); // Pawn(owner).playRecoil(firingSpeed); // playFAFiring(); if (role == ROLE_Authority) { if (level.netmode != NM_DedicatedServer) spawnMuzzleFlash(); if (level.netmode != NM_Standalone) // For clients. flashCount++; traceFire(vsize(recoilv) * recoilData.accScale); // We already checked for ammo above. useAmmo(1); } // Recoil should be done *after* traceFire(), otherwise the // first shot will always be off. recoil(); spawnBrass(brassClass); sleep(60 / rpm); burstCount++; } // Fin. sleep(burstWait); u.debug("FAFire:fireLoop: burst wait over"); bClear = true; finishAnim(); if (role == ROLE_Authority) finish(); else gotoState('Idle'); } /** Rather than use the undocumented 3rd person flash from Inventory, we'll just use a simple sprite. I think it looks better, anyway. */ simulated function spawnMuzzleFlash() { local vector x, y, z, fo; if (owner != none) { // This seems to look adequate. fo = fireOffset * 2.0; getAxes(owner.rotation, x, y, z); spawn(Class'SLMuzzleFlashVX', owner,, owner.location + fo.x * x + fo.y * y * -hand() + fo.z * z); // Hmm, this might not be appropriate for reloading, etc. There is // no way to tell currently if the weapon is firing or not. if (slave != none) { slave.spawnMuzzleFlash(); } } } /** Recoil alters the view rotation of the player. The delta is kept track of in recoilv. */ simulated function recoil() { local vector v; v = (vrand() - vrand()); v.z += frand() * recoilData.kick; recoilv += v * recoilData.base; recoilv.x = fclamp(recoilv.x, -recoilData.limit, recoilData.limit); recoilv.y = fclamp(recoilv.y, -recoilData.limit, recoilData.limit); recoilv.z = fclamp(recoilv.z, -recoilData.limit, recoilData.limit); u.debug("recoil: " $ u.sv(recoilv)); } /** Recoil is slowly brought under control at recoilRate. */ simulated function tick(float delta) { local Pawn p; local float x, y, z; local int dir; /* if (PlayerPawn(owner) != none) && level.netmode == NM_Client) u.debug("tick(): state: " $ getStateName() $ " seq: " $ animSequence $ " weap: " $ u.sname(PlayerPawn(owner).weapon) $ " bBringingUp: " $ bBringingUp $ " slave: " $ u.sname(slave) $ " weapup: " $ TournamentPlayer(owner).weaponUpdate); */ // Normally these are used for the flash mesh, but we're using sprites. if (role < ROLE_Authority && flashCount > oldFlashCount) { spawnMuzzleFlash(); oldFlashCount++; } p = PlayerPawn(owner); if (p != none) { if (vsize(recoilv) > 1.0) { recoilv = normal(recoilv) * fmax(vsize(recoilv) - (recoilData.returnRate * delta), 0); } } } /** If you're wielding two weapons, your accuracy drops. Note the recoil is also doubled with slaves. */ function traceFire(float acc) { if (slave != none || bSlave) { acc *= slaveAcc; } super.traceFire(acc); } /** Find out where the bullet went and deal the damage. */ function processTraceHit(Actor who, vector hitloc, vector hitn, vector x, vector y, vector z) { if (who == level) { //if (bSlave || slave != none) Light wall hit? Nah. spawn(wallhitClass, who,, hitloc + hitn, rotator(hitn)); } else if ((who != self) && (who != owner) && (who != none)) { /* WTF is this? FIX. if (frand() < 0.2) x *= 5; */ who.takeDamage(hitdam, Pawn(owner), hitloc, 3000.0 * x, myDamageType); if (!who.bIsPawn && !who.IsA('Carcass')) spawn(wallhitClass.default.puffClass, who,, hitloc + hitn, rotator(hitn)); else who.playSound(Sound'ChunkHit',, 4.0,, 100); } } /** Server-spawned. */ function spawnBrass(Class c, optional float ejectv) { local vector x, y, z; local EjectedBrassVX s; // Default is 1.0. if (ejectv == 0) ejectv = 1.0; if (level.netmode != NM_DedicatedServer) { getAxes(owner.rotation, x, y, z); s = spawn(c,,, owner.location + calcDrawOffset() + (0 * x) + (-6 * z)); // + (fireOffset.y * y * -hand())); if (s != none) s.eject(brassv(x, y, z) * ejectv); } } /** Override this to set the brass eject velocity. */ simulated function vector brassv(vector x, vector y, vector z) { return ((frand() * 0.3 - 0.15) * x + (frand() * 0.2 + 1.0) * y * -hand() + (frand() * 0.3 + 0.3) * z) * 120; } /** Finish a firing sequence. */ function finish() { local Pawn po; local bool bForce, bForceAlt; // u.debug("finish()"); bForce = bForceFire; bForceAlt = bForceAltFire; bForceFire = false; bForceAltFire = false; // Reset this. bAlt = false; if (bChangeWeapon) { gotoState('DownWeapon'); return; } po = Pawn(owner); if (po == none) return; if (PlayerPawn(owner) == none) { // Pawns. if (!ammoLeft()) { po.stopFiring(); gotoState('Idle'); po.switchToBestWeapon(); if (bChangeWeapon) gotoState('DownWeapon'); } else if ((po.bFire != 0) && (frand() < refireRate)) { global.Fire(0); } else if ((po.bAltFire != 0) && (frand() < altrefireRate)) { global.AltFire(0); } else { po.stopFiring(); gotoState('Idle'); } } else { // Players. // Some of our animations don't zero. FIX. tweenToStill(); gotoState('Idle'); } } /** Throw the slave first, then us. */ function dropFrom(vector startLoc) { // u.debug("dropFrom()"); if (slave == none) { // We don't transfer clips with dropped weapons. if (ammo().bClipped) { // This keeps the super call from setting ammo. ammoType = none; // Keep the clip. Unset pickup ammo. pickupAmmoCount = 0; } // Unset the master. master = none; super.dropFrom(startLoc); } else { slave.dropFrom(startLoc); } } simulated function playFiring() { u.debug("playFiring()"); viewFX(); playAss(assFire); } simulated function playAltFiring() { u.debug("playAltFiring()"); viewFX(); playAss(assAltFire); } simulated function viewFX() { if ((PlayerPawn(owner) != none) && ((level.netmode == NM_Standalone) || PlayerPawn(owner).player.isA('ViewPort'))) { if (instFlash != 0.0) PlayerPawn(owner).clientInstantFlash(instflash, instfog); PlayerPawn(owner).shakeView(shaketime, shakemag, shakevert); } if (affector != none) affector.fireEffect(); if (bDrawMuzzleFlash) bMuzzleFlash++; } /** This handles fake firing on the client. OK, here's the deal. The player (TournamentPlayer), in replicateMove(), will call gotoState('') and then tweenToStill() on us if we're not currently animating, almost every tick. What that means is that you *must* start an animation here before going to another state. I used to just go to FAFire here, but due to this issue, I had to start playing the anim here. playFAFiring(true) skips the next anim so it doesn't play twice. */ simulated function bool clientFire(float v) { local bool bFired; // u.debug("clientFire(" $ u.chopf(v) $ "): alt: " $ bAlt, DL_Normal); if (bCanClientFire) { if (!ammoLeft()) { playAss(assEmpty); } else if (needReload()) { // Server will send reload. //reload(); } else { if (bFirearm) { u.debug("clientFire(): going to FAFire"); playFAFiring(true); gotoState('FAFire'); } else { // Do we need a role check here? FIX. if (bAlt) { playAltFiring(); gotoState('ClientAltFiring'); } else { playFiring(); gotoState('ClientFiring'); } } bFired = true; } if (slave != none) // Did we fire? Then pause before slave fire. slave.slaveFire(bAlt, bFired); } return bFired; } simulated function bool clientAltFire(float value) { // Server will send new mode. if (bAltSwitchMode) return false; bAlt = true; return clientFire(value); } /** This is just like projectileFire() from Engine.Weapon, except the owner is set in the call to spawn(). Used for the Konglauncher. */ function Projectile projectileFire(Class projClass, float speed, bool warn) { local vector start, x, y, z; local Pawn po; u.debug("projectileFire(" $ projClass $ ")"); // Clear it. lastProj = none; po = Pawn(owner); owner.makeNoise(po.soundDampening); getAxes(po.viewRotation, x, y, z); if (spawnProjOffset != vect(0, 0, 0)) { start = owner.location + spawnProjOffset; } else { start = owner.location + calcDrawOffset() + fireoffset.x * x + fireoffset.y * y + fireoffset.z * z; } adjustedAim = po.adjustAim(speed, start, aimError, true, warn); if (!bSetProjOwner) po = none; // Will setting the owner cause problems for other weapons? lastProj = spawn(projClass, po,, start, adjustedAim); if (lastProj == none) // u.err("projectileFire(): Spawn failed!"); return lastProj; } /** FIX. We can clean up these states if we decide to definitely not go with refiring. */ state ClientFiring { simulated function animEnd() { if (Pawn(owner) == none || !ammoLeft()) { // playIdleAnim(); gotoState(''); } else if (!bCanClientFire) { gotoState(''); } else { gotoState(''); } } } state ClientAltFiring { simulated function animEnd() { if (Pawn(owner) == none || !ammoLeft()) { // playIdleAnim(); gotoState(''); } else if (!bCanClientFire) { gotoState(''); } else { gotoState(''); } } } simulated function playSelect() { // u.debug("playSelect()"); bForceFire = false; bForceAltFire = false; bCanClientFire = false; if (!isAnimating() || (animSequence != assSelect.aname)) playAss(assSelect); } simulated function tweenDown() { } state DownWeapon { ignores fire, altFire, animEnd; function beginState() { super.beginState(); if (slave != none) slave.gotoState('DownWeapon'); } } /** Sometimes the slave needs to refer back to the master. */ simulated function SLWeaponVX mate() { if (bSlave) // Obey... your... return master; else return slave; } /** The handedness is Botpack.PlayerPawn is not always the value that we want to use for displaying and firing. Certain weapons may lack models for either left, right, or center; or may have a slave counterpart, which is used in the opposite hand. This function returns the correct value for this weapon instance. Sometimes during ClientActive the owner is not set. Default to right-handed. */ simulated function float hand() { local float h; if (owner != none && owner.isA('PlayerPawn')) h = PlayerPawn(owner).handedness; else // Default to right handed (bots). h = -1; // No center? Use right. if (bNoCenter && h == 0) h = -1; // Generally akimbo weapons are bNoCenter, but what the hay. if (bSlave && h != 0) h = -h; return h; } simulated function TweenToStill() { //do nothing } EU '("' T//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Bullet hits wall f/x. */ class SLWallhitVX extends UT_WallHit; var() Class pockClass; var() Class puffClass; var() Class chipClass; var() Class sparkClass; simulated function spawnEffects() { local Actor fx; local Texture tex; local int i; local int n; spawnSound(); if (level.bDropDetail) return; if (level.bHighDetailMode) { fx = spawn(pockClass); /* This does not work. tex = Pockmark(fx).hittex; log("!!! pock: " $ fx $ " tex: " $ tex); */ } n = rand(maxChips / 2) + maxChips / 2; for (i = 0; i < n; i++) { if (frand() < chipOdds) { fx = spawn(chipClass); if (fx != none) { /* This does not work. if (tex != none) { fx.texture = tex; } log("!!! chip tex: " $ fx.texture); */ fx.remoteRole = ROLE_None; fx.drawScale *= 0.75; n--; } } } if (level.bHighDetailMode) { // If it's anything whose normal points up, use up. Anything // down, use the hitnormal. if ((vector(rotation) dot vect(0, 0, 1)) < 0) fx = spawn(puffClass,,,, rotation); else fx = spawn(puffClass,,,, rotator(vect(0, 0, 1))); fx.remoteRole = ROLE_None; /* Sparks? Nah... if (!region.zone.bWaterZone && (n > 0)) { for (i = 0; i < n; i++) { spawn(sparkClass,,, location + 8 * vector(rotation)); } } */ } } // end z F}A?w*?a/!-e '-'N. W ^TV1w*-v l'LwN*Nr*-k' E//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== class SLVCannons expands Projectile; var bool bRing,bHitWater,bWaterStart; auto state Flying { simulated function ZoneChange( Zoneinfo NewZone ) { local waterring w; if (!NewZone.bWaterZone || bHitWater) Return; bHitWater = True; if ( Level.NetMode != NM_DedicatedServer ) { w = Spawn(class'WaterRing',,,,rot(16384,0,0)); w.DrawScale = 0.2; w.RemoteRole = ROLE_None; } Velocity=0.6*Velocity; } simulated function ProcessTouch (Actor Other, Vector HitLocation) { if ( (Other != instigator) && !Other.IsA('Projectile') ) Explode(HitLocation,Normal(HitLocation-Other.Location)); } function BlowUp(vector HitLocation) { HurtRadius(Damage,125.0, MyDamageType, MomentumTransfer, HitLocation ); MakeNoise(1.0); } simulated function Explode(vector HitLocation, vector HitNormal) { local UT_LightWallHitEffect s; s = spawn(class'UT_LightWallHitEffect',,,HitLocation + HitNormal*16); s.RemoteRole = ROLE_None; BlowUp(HitLocation); Destroy(); } function BeginState() { local vector Dir; Dir = vector(Rotation); Velocity = speed * Dir; Acceleration = Dir * 50; if (Region.Zone.bWaterZone) { bHitWater = True; Velocity=0.6*Velocity; } } } x e//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== class SLSparkerVX extends UT_Spark; G //===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** My smoke cl_ass. */ class SLSmokeVX extends UT_SpriteSmokePuff; /** Use the rotation as the rise direction? */ var() bool bRotV; simulated function beginPlay() { local vector dir; if (bRotV) dir = vector(rotation); else // Up. dir = vect(0, 0, 1); velocity = dir * risingRate; if (numsets > 2) texture=ssprites[rand(numsets)]; } // end t //===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** A pock mark. */ class SLPockmarkVX extends Pock; //var Texture hittex; simulated function attachToSurface() { local Texture hittex; hittex = attachDecal(100, vect(0,0,1)); bAttached = (hittex != none); } // end W //===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Muzzle flashes. (3rd person.) */ class SLMuzzleFlashVX extends SLSmokeVX; var Texture sprites[6]; simulated function postBeginPlay() { texture=sprites[rand(arrayCount(sprites))]; } // end eB//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Invisible weapon that makes is so the pilot can't shoot while steering, and intercepts fire/altfire commands. */ class NullWeaponVX extends TournamentWeapon; // DATA // var StrangeShellVX sl; simulated function postBeginPlay() { // Use the Konglauncher defaults to tidy up the HUD. Is there a // way to avoid this? FIX. autoSwitchPriority = 10; inventoryGroup = 10; statusIcon = Class'KongLauncherVX'.default.statusIcon; //projectileClass = Class'KongLauncherVX'.default.projectileClass; altProjectileClass = Class'KongLauncherVX'.default.altProjectileClass; super.postBeginPlay(); } /** This function fakes the ammo display to show SL ammo. What about takeover situations where the rider has no Konglauncher? No takeovers yet. FIX. function fakeAmmo() { local Weapon kong; kong = Weapon(Pawn(owner).findInventoryType(Class'RocketX3.KonglauncherVX')); if (kong != none) ammoType = kong.ammoType; } */ simulated function postRender(Canvas c) { bOwnsCrosshair = true; } ////////////////////////////////////////////////////////////////////// // Code by Shanw Yarbrough and Edward Hayes function Fire(float v) { local Vector Start, X,Y,Z; GotoState('NormalFire'); bPointing=true; bCanClientFire = true; GetAxes(Pawn(owner).ViewRotation,X,Y,Z); Start = Owner.Location + CalcDrawOffset(); Spawn(class'WeaponLight',,'',Start+X*20,rot(0,0,0)); Start = Start + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; AdjustedAim = pawn(owner).AdjustToss(ProjectileSpeed, Start, AimError, True, bWarnTarget); //LeftSide Start = Start + (FireOffset.X + 60) * X + (FireOffset.Y - 35) * Y + (FireOffset.Z - 30) * Z; Spawn(class'SLVCannons',,, Start,AdjustedAim); //RightSide Start = Start + FireOffset.X * X + (FireOffset.Y + 70) * Y + (FireOffset.Z + 5) * Z; Spawn(class'SLVCannons',,, Start,AdjustedAim); } state NormalFire { Begin: if (Pawn(Owner).Weapon != self) GotoState(''); Else sleep(0.2); Finish(); } /////////////////////////////////////////////////////////// function altFire(float v) { if (!owner.isA('Bot') && sl != none) GoToState('AltFiring'); } state AltFiring { Begin: sl.Afterburn(); GoToState(''); } simulated function bool ClientAltFire( float v ) { GotoState(''); return false; } simulated function PlayPostSelect() { //Do nothing } simulated function bool clientFire(float v) { GotoState('NormalFire'); return false; } state ClientActive { simulated function beginState() { // Nothing. } } auto state Active { function bool putDown() { return global.putDown(); } function fire(float v) { global.fire(v); } function altFire(float v) { global.altfire(v); } function beginState() { // Nothing. } function endState() { // Nothing. } begin: // Nothing. } state DownWeapon { function bool putDown() { return global.putDown(); } } /** Next/prev weapon toggles the warhead status. */ function bool putDown() { if (sl != none) sl.switchWarhead(); bChangeWeapon = false; Pawn(owner).pendingWeapon = none; return true; } // These keep those accessed none warnings at bay. simulated function playSelect() { // Nothing. No mesh. No ammo. } simulated function tweenToStill() { // No mesh. Nothing. } simulated function setHand(float hand) { // Nothing. } function bringUp() { // Nothing. } state Idle { function bool putDown() { return global.putDown(); } } E//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Right now all this does it make sure we're ahead of any Relic mutators, which screw up the HUD mutator chain. */ class SLMutatorVX extends Mutator; var PlayerPawn ho; function PostBeginPlay () { ho=PlayerPawn(Owner); Register(); } function Register () { local Mutator M; local bool Move; M=ho.myHUD.HUDMutator; if ( M == self ) { return; } if ( M != None ) { JL0035: if ( getNext(M) != None ) { if ( isRelic(getNext(M)) ) { goto JL0084; } if ( getNext(M) == self ) { return; } M=getNext(M); goto JL0035; } } JL0084: NextHUDMutator=ho.myHUD.HUDMutator; ho.myHUD.HUDMutator=self; } function bool isRelic (Mutator M) { return M.IsA('HUDMutator'); } function Mutator getNext (Mutator M) { if ( M.IsA('HUDMutator') ) { //return HUDMutator(M).NextRHUDMutator; return M.NextHUDMutator; } else { return M.NextHUDMutator; } } b//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Empty - used for grouping Strangelove Infos. */ class SLInfoVX extends Info; // end Of}//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Konglauncher. Launches ridable Stranglove rockets. Weapon class. */ class KonglauncherVX extends SLWeaponVX config (RocketX3); // Imports Sound // DATA // var FuelcoreVX fc; // Keeps track of fuel cores for the ret HUD. var vector launchv; // Owner velocity at launch. var float lastFired; // Bots should only fire every so often... var SkyNetVX skynetVX; var SkyNodeVX launchsn; // Our onramp onto the network. var() config bool bNeverStay; var bool bClear; var float clearanceStamp; var() config string teamSLClass[4]; var UT_ShieldBeltEffect MyEffect; var config bool bForceLaunchPuff; // This force the launchPuff to spawn same if drop detail is on. //////////////// // REPLICATION /////////////////// replication { reliable if (role == ROLE_Authority && bNetOwner) bClear; } //============= // METHODS //============== /** Set the projectile classes based on team. */ function bringUp() { local PlayerReplicationInfo pri; // Teams alternate rocket types. if (Pawn(owner) != none) { pri = Pawn(owner).playerReplicationInfo; // projectileClass = (Class'RocketX3.UT_AntiSLV'); altProjectileClass = Class(dynamicLoadObject(teamSLClass[pri.team], Class'Class')); } super.bringup(); } state Idle { /** Check for entrances onto the sky network. */ simulated function timer() { // Do the idle anim thing. super.timer(); // Only alt-fire if are aren't defending or following, // and we're not under attack. // if (owner.isA('Bot') && useAltFire(Bot(owner))) { // u.debug("Idle:timer(): skynetVX: " $ u.sname(skynetVX)); if (skynetVX != none) { if (skynetVX.bBuilt) { launchsn = skynetVX.findLaunchNode(Bot(owner)); // Do we have a clear path to it? if (launchsn != none && fastTrace(launchsn.location, owner.location)) { launchsn.addLaunch(); // There might be a smoother way to adjust the rotation. FIX? owner.setRotation(rotator(launchsn.location - owner.location)); altFire(0); } } } else { // SpawnSkyNetVX(); } } // } } /** Needed to add fuel core count to the HUD. */ simulated function setRetMsgs() { super.setRetMsgs(); if (!bClear && (level.timeseconds - clearanceStamp < 1.5)) { retmsg = "no clearance!"; } if (fc == none) fc = FuelcoreVX(Pawn(owner).findInventoryType(class'FuelcoreVX')); if (fc != none && fc.ammoAmount > 0) retmsg2 = "cores " $ fc.ammoAmount; } /** The Redeemer never stays. */ function setWeaponStay() { if (bNeverStay) bWeaponStay = false; else super.setWeaponStay(); } /** Launch puffs spawned on the server. */ function spawnPuff() { local vector x, y, z; if (bForceLaunchPuff == true){ getAxes(owner.rotation, x, y, z); spawn(class'LaunchPuffVX',,, owner.location + x * 80, rotation); } else if (level.bHighDetailMode && !level.bDropDetail && level.netmode != NM_DedicatedServer) { // Place it in view. getAxes(owner.rotation, x, y, z); spawn(class'LaunchPuffVX',,, owner.location + x * 80, rotation); } } /** If we had a successful launch, spawn the puff. */ function fire(float v) { local bool bAmmo; local Inventory IP; bAmmo = ammoLeft(); //===================================================================== // Sets Pilots display to Invisable and if has shieldbelt it is also // Invisable. // Pawn(Owner).SetDefaultDisplayProperties(); IP = Pawn(Owner).FindInventoryType(class'UT_ShieldBelt'); if ( (IP != None) && (UT_Shieldbelt(IP).MyEffect != None) ){ UT_Shieldbelt(IP).MyEffect.bHidden = true; Pawn(Owner).SetDisplayProperties(ERenderStyle.STY_Translucent,FireTexture'unrealshare.Belt_fx.Invis',true,true); } Pawn(Owner).Visibility = 10; // p.bHidden=True; //==================================================================== if (bAmmo) { spawnProjOffset = -(Class(altProjectileClass).default.pilotOffset); bSetProjOwner = true; lastProj = none; } // All just to get the click... super.altFire(v); if (bAmmo) { if (lastProj != none) { StrangeShellVX(lastProj).setPilot(Pawn(owner), skynetVX, launchsn); } else { clearWarning(); clearanceStamp = level.timeseconds; } bClear = (lastProj != none); // Unset these. Dumbs don't need them. spawnProjOffset = vect(0, 0, 0); bSetProjOwner = false; } } function altFire(float v) { local bool bAmmo; local Inventory IP; bAmmo = ammoLeft(); //===================================================================== // Sets Pilots display to Invisable and if has shieldbelt it is also // Invisable. // Pawn(Owner).SetDefaultDisplayProperties(); IP = Pawn(Owner).FindInventoryType(class'UT_ShieldBelt'); if ( (IP != None) && (UT_Shieldbelt(IP).MyEffect != None) ){ UT_Shieldbelt(IP).MyEffect.bHidden = true; Pawn(Owner).SetDisplayProperties(ERenderStyle.STY_Translucent,FireTexture'unrealshare.Belt_fx.Invis',true,true); } Pawn(Owner).Visibility = 10; // p.bHidden=True; //==================================================================== if (bAmmo) { spawnProjOffset = -(Class(altProjectileClass).default.pilotOffset); bSetProjOwner = true; lastProj = none; } // All just to get the click... super.altFire(v); if (bAmmo) { if (lastProj != none) { StrangeShellVX(lastProj).setPilot(Pawn(owner), skynetVX, launchsn); } else { clearWarning(); clearanceStamp = level.timeseconds; } bClear = (lastProj != none); // Unset these. Dumbs don't need them. spawnProjOffset = vect(0, 0, 0); bSetProjOwner = false; } } /** Plays the clearance warning on the client. Is there a way to quiet this? FIX. */ function clearWarning() { if (owner.isA('PlayerPawn')) PlayerPawn(owner).clientPlaySound(Class'StrangeShellVX'.default.warnSound, false, true); } simulated function bool clientFire(float v) { // Reset it. launchv = vect(0, 0, 0); return super.clientFire(v); } simulated function bool clientAltFire(float v) { if (super.clientAltFire(v)) { clearanceStamp = level.timeseconds; launchv = owner.velocity; return true; } else { return false; } } simulated function TweenToStill() { //do nothing } // The End D //===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** See Wallhit.uc. */ class SLHitPuffVX extends SLSmokeVX; simulated function beginPlay() { drawScale = default.drawScale + frand() * 0.2; super.beginPlay(); } // end l@I//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Clip object. */ class SLClipVX extends SLInfoVX; var() int max; var int rounds; var SLAmmoVX ammo; replication { reliable if (role == ROLE_Authority) rounds, max; } simulated function bool empty() { return (rounds == 0); } simulated function bool full() { return (rounds == max); } simulated function int getRounds() { return rounds; } simulated function int getMaxRounds() { return max; } function bool useRound() { if (rounds > 0) { rounds--; ammo.ammoAmount--; return true; } else { return false; } } X//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== class SLBotBrainVX extends SLInfoVX; var StrangeShellVX sl; var Bot bot; var bool bIsPilot; var bool bGuiding; // The bot is controlling the rocket thru gr. var bool bEject; // An eject is recommended. /** Current goal index. For CTF, this is the flag base index. For Assault, it's the fort standard index. Both in goals[] in SkyNet. */ var byte goal; var SkyNodeVX targetNode; // The node we're heading for. var SkyNodeVX lastNode; // The previous node. var SkyNodeVX launchNode; // Our first node. var bool bNoExpire; // Our target node doesn't expire. var bool bReachEject; // Eject when we reach our target node. var float targetAcq; // Time we acquired this node. var() float targetExpireTime; // Time to give up on this node and find a reachable one. var() int ejectDist; // If we get this close to our objective, eject. var() int ejectDistFlag; // Same, but just for flag carriers and flag bases. var() float randomLinkAdjust; // Random factor for nextNode(). var() float wallDeter; // The % of wall deaths which will deter us. var() float shotDeter; // The % of shot deaths which will deter us. var() float skill; // 0.0 to 1.0. Affects reflexes and turning speed. /** This only happens when there are no enemy flags at base. NOT IMPLEMENTED. FIX. */ var bool bHunting; /** E.g. somebody carrying our flag. :) */ var Actor nukeTarget; var SkyNetVX skynetVX; var float suggestedSpeed; var UtilVX u; function postBeginPlay() { u = spawn(Class'UtilVX', self); // Invalid goal. goal = -1; } /** The launcher usually handles this, but just in case. */ function spawnSkyNetVX() { foreach allActors(Class'SkyNetVX', skynetVX) break; if (skynetVX == none) skynetVX = spawn(Class'SkyNetVX'); } /** Called from the Strangelove, right after spawn. */ function setBot(Bot b, StrangeShellVX s, optional SkyNetVX net, optional SkyNodeVX ln) { bot = b; sl = s; launchNode = ln; targetNode = ln; // They need all the help they can get... //skill = b.skill / 3.0; skill = (b.skill / 3.0) * 0.2 + 0.8; bIsPilot = (b == sl.getPilot()); if (bIsPilot) { bGuiding = true; skynetVX = net; spawnSkyNetVX(); } else { gotoState('GunnerBoarding'); } // Skill == reaction time. Minimum timer is 0.01. setTimer(fmax(1.0 * (1.0 - skill), 0.01), true); u.debug("setBot(): brain set for: " $ u.sname(bot) $ " skill: " $ u.chopf(skill) $ " launch node: " $ u.sname(ln)); } /* function timer() { // Eject if fuel low! Max throttle first. if (sl.fuel < 3 && (sl.fc == none || !(sl.fc.getAmmo() > 0))) { u.debug("timer(): No fuel! Ejecting!"); if (bIsPilot) sl.throttle = 1.0; bEject = true; } else { if (bIsPilot) { pilotBehavior(); } else { gunnerBehavior(); } } if (bEject) eject(); } */ /** First, set the goal. If it's valid, decide where and what to do. function pilotBehavior() { local SkyNodeVX temp; if (setGoal()) { // First check for nuke targets. if (bot.moveTarget == myFlag()) { nukeTarget = bot.moveTarget; } else if (bot.enemy == myFlag().holder) { // Ramming speed!!! sl.arm(); sl.throttle = 0.1; nukeTarget = bot.enemy; } else { nukeTarget = none; } if (nukeTarget != none) { targetActor(nukeTarget); } else { if (targetNode == none) { // This might happen at a dead end node. u.debug("pilotBehavior(): no target node"); temp = closestNode(skynetVX.linkRadius); if (temp != lastNode) { setTargetNode(temp); } else { bEject = true; } } if (bReachEject && targetNode != none) { if (inrange(targetNode, 0.5)) { u.debug("pilotBehavior(): within range of eject node"); // So we don't kill outselves. FIX! sl.disarm(); bEject = true; } } else { /* if (inrange(skynetVX.goalNodes[goal], 1.5)) { u.debug("pilotBehavior(): within range of goal node"); bEject = true; } */ } // Throttle! Shoot mode! if (targetNode != none && !inrange(targetNode, 2.0) && linedup(targetNode, 0.01)) { if (suggestedSpeed == -1) sl.throttle = 0.5 + 0.5 * skill; if (bot.enemy != none) { // Switch to shoot mode! if (!sl.bShootMode) { u.debug("pilotBehavior(): going to shoot mode"); sl.goShootMode(); } } } else { if (suggestedSpeed == -1) sl.throttle = 0.1; // Man the wheel! if (sl.bShootMode) { u.debug("pilotBehavior(): returning from shoot mode"); sl.goShootMode(); } } // Handle speed. if (suggestedSpeed >= 0) { if (suggestedSpeed < 1.0) { sl.throttle = suggestedSpeed; } else { if (abs(vsize(sl.velocity) - suggestedSpeed) < 50.0) { // Hold. } else { if (vsize(sl.velocity) < suggestedSpeed) { sl.throttle += 0.1; } else { sl.throttle -= 0.1; } sl.throttle = fclamp(sl.throttle, 0.0, 1.0); } } } // Can we see the goal node? Go for it! Did we already // spot it earlier? Keep going. if (targetNode != none && !bReachEject) { temp = skynetVX.goalNodes[goal].randomLink(); if (temp != none && los(temp)) { u.debug("pilotBehavior(): new beeline: " $ u.sname(temp)); setTargetNode(temp); bReachEject = true; bNoExpire = true; } } // Expire the node if it's been too long. Usually means // we're doing loop de loops. if (!bNoExpire && targetNodeExpired()) { u.debug("timer(): target expired: " $ u.sname(targetNode)); setTargetNode(nextNode(targetNode, true)); } // Target it. if (targetNode != none) targetActor(targetNode); } } } */ /** My flag? */ function CTFFlag myFlag() { if (skynetVX.bCTF) { return CTFReplicationInfo(level.game.gameReplicationInfo).flagList[bot.playerReplicationInfo.team]; } return none; } /** Returns true if this flag is an enemy flag. */ function bool enemyFlag(CTFFlag flag) { return (flag != myFlag()); } /** Returns the distance to the specified actor. */ function float distto(Actor a) { return vsize(a.location - bot.location); } /** Returns true if the specified actor is within the specified range. If the range is < 10.0, it's a factor of the link radius. */ function bool inrange(Actor a, float range) { if (range < 10.0) { return (distTo(a) < range * skynetVX.linkRadius); } else { return (distTo(a) < range); } } /** Returns true if the bot has LOS. */ function bool los(Actor a) { u.debug("los(" $ u.sname(a) $ ")", DL_Verbose); return fastTrace(a.location, bot.location); } /** Lined up. */ function bool linedup(Actor a, optional float error) { return ((1.0 - (normal(sl.velocity) dot normal(a.location - bot.location))) <= error); } /** Turns us towards the specified actor. */ function targetActor(Actor a) { desiredRotation = adjustRot(rotator(a.location - bot.location)); } /** Same as above, but for a raw location vector. */ function targetLoc(vector l) { desiredRotation = adjustRot(rotator(l - bot.location)); } /** This sets the goal index. We may set bEject, so this needs to happen just before we test for that in pilotBehavior(). Returns true if we have a valid goal. */ function bool setGoal() { local byte oldg; // We need to compare with the new one for debugging. oldg = goal; if (skynetVX.getGoal(bot, goal)) { if (goal != oldg) u.debug("setGoal(): new goal is: " $ u.sname(skynetVX.goals[goal])); return true; } bEject = true; return false; } /** When the pilot is cleared (and a damage type is specified), it notifies us so we can update the node counts. */ function deathBy(name type) { local SkyNodeVX n; local byte team; // Find the closer node. We'll always have a targetNode. Right? if (lastNode != none && distto(lastNode) > distto(targetNode)) n = targetNode; else n = lastNode; team = bot.playerReplicationInfo.team; switch (name) { case 'Shot': n.shotDeaths[team]++; break; case 'HitWall': n.wallDeaths++; break; } } function bool targetNodeExpired() { return ((level.timeseconds - targetAcq) > targetExpireTime); } function setTargetNode(SkyNodeVX sn) { lastNode = targetNode; u.debug("setTargetNode(" $ u.sname(sn) $ ")"); targetNode = sn; if (targetNode != none) { targetAcq = level.timeseconds; suggestedSpeed = sn.suggestedSpeed; if (skynetVX.bShowLinks) { if (lastNode != none) lastNode.vis(false); targetNode.vis(true, goal); } targetNode.passes++; targetNode.teamPasses[bot.playerReplicationInfo.team]++; } } function SkyNodeVX closestNode(float r) { return skynetVX.closestNode(bot.location, r); } /** The Strangelove reports a touch on the sky node. function nodeReached(SkyNodeVX sn) { if (sn == targetNode) { u.debug("nodeReached(): " $ u.sname(sn)); if (sn != launchNode) // Success! Or so we think... launchNode.addLaunch(true); setTargetNode(nextNode(sn, true)); } } */ /** Decide which node to go to next from the current one. If random is true, we add a slight random factor in, which essentially makes close calls go either way, rather than always to the higher weight. function SkyNodeVX nextNode(SkyNodeVX cur, optional bool random, optional bool bNextNext) { local float RLA; local int i; local SkyNodeVX next, nn; local float w, curw; // Use ours if non-zero. if (randomLinkAdjust > 0) RLA = randomLinkAdjust; else RLA = skynetVX.randomLinkAdjust; for (i = 0; i < arrayCount(cur.links); i++) { if (bNextNext && !los(cur.links[i])) continue; // Skip it if we just came from there? if (cur.links[i] == lastNode) continue; curw = cur.links[i].weight[goal]; if (random) curw += frand() * RLA; if (curw > w || next == none) { next = cur.links[i]; w = curw; } } // If the next node is weighted lower than the current, eject. if (next == none || w < cur.weight[goal] || avoidNode(next, bot.playerReplicationInfo.team)) { u.debug("nextNode(" $ u.sname(cur) $ "): ejecting: next: " $ u.sname(next) $ " current/next weight: " $ cur.weight[goal] $ "/" $ curw); if (!bNextNext) bEject = true; } else { /** FIX. Infinite recursion. // Skip to the next next one if we can see it. if (next != none) { nn = nextNode(next, random, true); if (nn != none) { u.debug("nextNode(): skipping " $ u.sname(next) $ " to " $ u.sname(nn)); // This is so it doesn't expire too soon. targetAcq += targetExpireTime; next = nn; } } */ } return next; } */ /** Return true if we don't want to go to this node, because everytime someone's tried, they've hit a wall or gotten shot down. */ function bool avoidNode(SkyNodeVX n, byte team) { local bool avoid; avoid = ((n.wallDeaths / float(n.passes)) > wallDeter || (n.shotDeaths[team] / float(n.teamPasses[team])) > shotDeter); if (avoid) { u.debug("avoidNode(" $ u.sname(n) $ ") death ratios: wall: " $ (n.wallDeaths / float(n.passes)) $ " shot: " $ (n.shotDeaths[team] / float(n.teamPasses[team]))); // Turn off the warhead, if we can. sl.disarm(); } return avoid; } function FlagBase getFlag() { return CTFReplicationInfo(level.game.gameReplicationInfo).flagList[bot.playerReplicationInfo.team].homeBase; } /** This takes the desired rotation and slowly moves to meet it. Basically our own home brewed bRotateToDesired (which doesn't seem to work in this instance). Note we could use the full rotation rate, but this uses the yaw rate for both yaw and pitch. */ function tick(float delta) { if (sl != none) { setRotation(rotation + sturn(desiredRotation, rotation, int(delta * skill * rotationRate.yaw))); } } /** This compensates for the sliding of the rocket. */ function rotator adjustRot(rotator r) { return (r - sturn(rotator(sl.velocity), r, 0, 16384)); } /** Given a new and old rotation, it figures the smallest deltas to get to the new rotation. If max is given, it limits the turn by that much. The limit optional arg is used when trying to compensate for momentum. I can't explain it in less than 500 words, but if you don't drop the compensation when the delta is over 90 degrees, it goes in the direct opposite direction. */ function rotator sturn(rotator newr, rotator oldr, optional int max, optional int limit) { local int dyaw, dpitch; local rotator turn; dyaw = (newr.yaw & 65535) - (oldr.yaw & 65535); dpitch = (newr.pitch & 65535) - (oldr.pitch & 65535); // If it's more than the limit, zero that component. if (limit > 0) { if (abs(dyaw) > limit) dyaw = 0; if (abs(dpitch) > limit) dpitch = 0; } if (dyaw < -32768) dyaw += 65536; else if (dyaw > 32768) dyaw -= 65536; if (dpitch < -32768) dpitch += 65536; else if (dpitch > 32768) dpitch -= 65536; if (max > 0) { dyaw = fmin(dyaw, max); dpitch = fmin(dpitch, max); } turn.yaw = dyaw; turn.pitch = dpitch; turn.roll = 0; return turn; } function rotator getGuidedRotation() { return rotation; } /** Decide what the bot does, as far as ejecting, etc., as a gunner. */ function gunnerBehavior() { bot.bCanFly = true; bot.bCanWalk = false; bot.bAdvancedTactics = false; //bot.bCanDuck = true; //bot.moveTarget = -1; // If the rider ejects or gets killed, eject! if (sl.getPilot() == none && !isInState('GunnerEject')) gotoState('GunnerEject'); // Don't jump off unless we're less than 30' (360 uu) off the ground. if (sl.fastTrace(sl.location + vect(0, 0, -1) * 360)) { u.debug("gunnerBehavior(): over 360 off ground", DL_Verbose); } else { // We have the flag! Even if we're set not to obey orders, eject if we get within flag base dist. if (skynetVX.bCTF && bot.playerReplicationInfo.hasFlag != none && inrange(getFlag(), ejectDistFlag)) { u.debug("gunnerBehavior(): eject! close to flag base"); eject(); // We're in eject distance of something we want. } else if (bot.moveTarget != none && bot.moveTarget != sl.getPilot() && inrange(bot.moveTarget, ejectDist)) { // Eject if we're obeying orders (and they're not 'follow' // orders) or we're out of ammo and our movetarget is a weapon or ammo. if ((sl.bBotsObeyOrders && !(bot.orders == 'Follow' && bot.orderObject == sl.getPilot())) || ((bot.moveTarget.isA('Weapon') || bot.moveTarget.isA('Ammo')) && bot.weapon != none && (bot.weapon.bMeleeWeapon || bot.weapon.ammoType.ammoAmount == 0))) { u.debug("gunnerBehavior(): eject! within range of movetarget: " $ u.sname(bot.moveTarget)); eject(); } } } } /** This state makes it so they don't jump off immediately. */ state GunnerBoarding { ignores gunnerBehavior; begin: sleep(3.0); gotoState(''); } /** Give them some response time for ejecting. This only happens if the rider ejects or is killed. */ state GunnerEject { ignores gunnerBehavior; begin: sleep(1.5); if (sl.gunner != none) eject(); } function eject() { sl.eject(bot); //bot.gotoState('Roaming', 'PreBegin'); bot.whatToDoNext('', ''); } function destroyed() { u.debug("destroyed()"); if (skynetVX != none) { if (skynetVX.bShowLinks) { if (targetNode != none) { targetNode.vis(false); } } } else { u.debug("destroyed(): skynetVX == none"); } super.destroyed(); } I//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Makes the fuel cores glow. */ class FuelglowVX extends SLSmokeVX; var float fadet; function postBeginPlay() { //setTimer(0.5, false); } function tick(float delta) { if (fadet < 0.5) { fadet = fmin(0.5, fadet + delta); drawScale = default.drawScale * fadet * 2; } else { disable('tick'); } } function fade () { if (!isInState('Fadeout')) gotoState('Fadeout'); } state Fadeout { function beginState() { fadet = 0; } function tick(float delta) { if (fadet < 0.5) { fadet += delta; scaleGlow = default.scaleGlow * (1.0 - fadet / 0.5); } else { destroy(); } } } N//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Fuel core riser. Client-only in network games. */ class FuelpodVX extends Effects; var FuelcoreVX core; var bool bOpen; var UtilVX u; function postBeginPlay() { u = spawn(Class'UtilVX', self); u.setDebugLevel(DL_Verbose); core = FuelcoreVX(owner); if (core != none) setTimer(core.hoverTimer, true); super.postBeginPlay(); } /** Returns true if there is a valid pawn in the core's hover radius. */ function bool in() { local Pawn p; if (core != none) { foreach radiusActors(class'Pawn', p, core.hoverRadius) { if (validActor(p)) { return true; } } } return false; } /** Check to see if we should open or close. */ function timer() { if (in()) { if (core != none && !core.bHover && !core.bHidden && !bOpen) open(); } else { if (core.bHover && !core.bHidden && bOpen) close(); } } /** Core has just entered the pickup state. See if we should pop it up. */ function touchCheck() { local Pawn p; if (!bOpen && in()) open(); } function open() { bOpen = true; playAnim('opening'); core.startHover(); } function close() { bOpen = false; playAnim('closing'); core.stopHover(); } function bool validActor(Actor a) { return (a.bIsPawn && Pawn(a).bIsPlayer && (Pawn(a).health > 0) && !Pawn(a).playerReplicationInfo.bIsSpectator); } function destroyed() { } // end Um V"X"_"]"Z*&iiia*&iii"2@  !!!"""""""""###$$$%%%%%%&&&'''(((((()))***)))******++++++,,,---------......///000000000111222222333333444555666666666777888888888999:::;;;;;;;;;<<<===>>>>>>>>>???@@@AAAAAABBBBBBCCCCCCDDDEEEEEEFFFFFFGGGHHHIIIIIIJJJKKKLLLLLLMMMMMMNNNNNNNNNNNNNNNOOOPPPQQQQQQRRRSSSTTTTTTTTTUUUUUUUUUVVVWWWWWWWWWXXXYYYYYYYYYYYYZZZ[[[[[[[[[\\\\\\\\\\\\\\\\\\]]]]]]^^^_________```aaaiiibbbbbbcccddddddfffggggggjjjjjjlllmmmooooooppprrrsssuuuwwwxxxxxxzzz{{{}}}}}}`_Y//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** This ext_ends the UT ammo concept by using clips of ammo which are stored as separate objects in an array. This allows easier handling of different ammo types. */ class SLAmmoVX extends TournamentAmmo abstract config (RocketX3); // DATA // var() bool bClipped; var() Class clipClass; var SLClipVX clips[32]; var int clipnum; var() int maxClips; var() config int configMaxAmmo; var bool bStored; var int storeAmmo, storeMax; var UtilVX u; // REPLICATION // replication { reliable if (bNetOwner && role == ROLE_Authority) clipnum, clips; } // METHODS // function preBeginPlay() { super.preBeginPlay(); u = spawn(Class'UtilVX', self); u.setDebugLevel(DL_Verbose); if (configMaxAmmo > 0) maxAmmo = configMaxAmmo; } /** This shows, on a ChallengeHUD, the clip ammo. The master always calls this first. simulated function setRenderMax(SLClipVX c, bool slave) { if (bClipped && c != none) { if (bStored) { u.err("setRenderMax(): Already stored ammo counts!"); } else { if (!slave) { storeAmmo = ammoAmount; storeMax = maxAmmo; ammoAmount = c.getRounds(); maxAmmo = c.getMaxRounds(); bStored = true; } else { ammoAmount += c.getRounds(); maxAmmo += c.getMaxRounds(); } } } } */ /** Resets the true ammo counts. simulated function unsetRenderMax(SLClipVX c, bool slave) { if (bClipped && c != none && !slave) { if (bStored) { ammoAmount = storeAmmo; maxAmmo = storeMax; bStored = false; } else { u.err("unsetRenderMax(): No stored ammo counts!"); } } } */ simulated function int getMaxAmmo() { return maxAmmo; } simulated function int getAmmo() { return ammoAmount; } simulated function int getClips() { return clipnum; } /** Takes a clip off the back of the array and returns it to the weapon. */ function SLClipVX reload() { local int i; local SLClipVX fresh; if (bClipped) { if (clipnum > 0) { // The last clip is the best one. i = clipnum - 1; fresh = clips[i]; clips[i] = none; clipnum--; } return fresh; } return none; } /** Make sure we don't use this on a clipped weapon. */ function bool useAmmo(int num) { if (!bClipped) return super.useAmmo(num); return false; } function bool addAmmo(int count) { if (count > 0) { if (bClipped) { addNewClips(clipClass, count); } else { return super.addAmmo(count); } } return false; } function weaponSpawned() { ammoAmount = 0; } function SLClipVX defaultClip() { return newClip(clipClass); } function bool handlePickupQuery(Inventory i) { if (bClipped) { if (class == i.class) { if (clipnum < maxClips) { pickupMessages(i, Pawn(owner)); i.playSound(i.pickupSound); addNewClips(SLAmmoVX(i).clipClass, SLAmmoVX(i).ammoAmount); i.setRespawn(); } return true; } } if (inventory == none) return false; return super.handlePickupQuery(i); } /** This is used to add a clip. Non-full clips go to the beginning of the array and will be used last. */ function bool addClip(SLClipVX clip) { local int where; if (clipnum < maxClips && !clip.empty()) { if (clip.full()) // Last. where = clipnum; else where = 0; insertClip(clip, where); return true; } return false; } function insertClip(SLClipVX clip, int index) { local int i; for (i = (clipnum - 2); i >= index; i--) { clips[i + 1] = clips[i]; } clips[index] = clip; clipnum++; } function addNewClips(Class cc, int no) { local int i; while (i < no && clipnum < maxClips) { addClip(newClip(cc)); i++; } } function SLClipVX newClip(Class cc) { local SLClipVX clip; clip = spawn(cc, owner); clip.rounds = clip.getMaxRounds(); // Legacy. ammoAmount += clip.getRounds(); clip.ammo = self; return clip; } function pickupMessages(Inventory item, Pawn p) { if (level.game.localLog != none) level.game.localLog.logPickup(item, p); if (level.game.worldLog != none) level.game.worldLog.logPickup(item, p); if (item.pickupMessageClass == none) p.clientMessage(item.pickupMessage, 'Pickup'); else p.receiveLocalizedMessage(item.pickupMessageClass, 0, none, none, item.class); } // end jO3 -k' lF//===================================================================== // RocketV3. 555 ---===CrAzYBoNeS===--- 555 // // ""()Frgd()"" // **Monarch** // Thank you Al McElrath for SLV2. //===================================================================== /** Nav point in the sky. */ class SkyNodeVX extends NavigationPoint; // DATA // var() float linkRadius; var() float randomLinkAdjust; var() float suggestedSpeed; var() bool bOffensiveNode; // Used in racing. var() bool bGateNode; var() bool bFinalNode; var SkyNodeVX links[5]; var float ldists[5]; var SkyNodeBeamVX beams[5]; var float weight[16]; var bool bWeighed; var int weighDepth; /** Keep track of launches so we can decide whether or not to try on this one again. We keep the same launch data for both teams. It's an anti-stupidity thing. Same for wall deathes, but not shots. */ var int launches; var int launchSxs; var int passes; // No. of times somebody's passed us. var int teamPasses[4]; // Same as above, but for teams. var int wallDeaths; // Times we've ran into a wall on this node. var int shotDeaths[4]; // Times we've been shot down, per team. var SkyNodeVX nextSkyNodeVX; var SkyNodeVX prevSkyNodeVX; var NavigationPoint navPoint; // Track nodes we're welding to us, to avg. our position. var vector weldLoc; var int weldSum; var UtilVX u; // METHODS // function postBeginPlay() { u = spawn(Class'UtilVX', self); } function float getWeight(byte team) { return weight[team]; } function weld(vector l) { weldSum++; weldLoc += l; } function setWeldLoc() { if (weldSum > 0) { setLocation((location + weldLoc) / (weldSum + 1.0)); } } /** Gets called by the launcher at launch. If they reached their second node, they call us a success. */ function addLaunch(optional bool bSuccess) { if (bSuccess) launchSxs++; else launches++; } /** Returns the perc. of launch successes with this node. We give the node the benefit of the doubt if it hasn't been used yet. */ function float launchWeight() { return ((launchSxs + 1) / float(launches + 1)); } function SkyNodeVX randomLink() { local int i; i = rand(arrayCount(links)); // The links may be none, but they're sorted. while (links[i] == none && i > 0) i--; return links[i]; } /** Returns true on success. False if no links were created. */ function bool linkUp(float r) { local SkyNodeVX sn; local int i; local float dist; local bool bNone; bNone = true; // Use mine if it's set. if (linkRadius > 0) r = linkRadius; foreach radiusActors(Class'SkyNodeVX', sn, r) { if (sn != self && fastTrace(sn.location, location)) { dist = vsize(location - sn.location); bNone = false; for (i = 0; i < arrayCount(links); i++) { if (dist < ldists[i] || ldists[i] == 0) { insertLink(i, sn, dist); break; } } } } return !bNone; } /** Used for debugging. */ function showBeams(int goal) { local int i; local SkyNodeBeamVX beam; local float w, hi, lo; for (i = 0; i < arrayCount(links); i++) { if (beams[i] == none) { w = links[i].weight[goal]; if (i == 0) { hi = w; lo = w; } else if (w < lo) { lo = w; } else if (w > hi) { hi = w; } beams[i] = spawn(Class'SkyNodeBeamVX',,,location, rotator(links[i].location - location)); beams[i].drawScale = ldists[i] / 100.0; } } for (i = 0; i < arrayCount(links); i++) { if (beams[i] != none) { beams[i].ambientGlow = 255 * ((links[i].weight[goal] - lo) / (hi - lo)); beams[i].scaleGlow = beams[i].ambientGlow; beams[i].lightBrightness = beams[i].ambientGlow; } } } /** Used for debugging. */ function hideBeams() { local int i; for (i = 0; i < arrayCount(links); i++) { if (beams[i] != none) beams[i].destroy(); } } function insertLink(int index, SkyNodeVX n, float dist) { local int i; for (i = arrayCount(links) - 2; i >= index; i--) { if (links[i] != none) { links[i + 1] = links[i]; ldists[i + 1] = ldists[i]; } } links[index] = n; ldists[index] = dist; } function vis(bool on, optional int goal) { if (!on) hideBeams(); else showBeams(goal); } function destroyed() { if (prevSkyNodeVX != none) prevSkyNodeVX.nextSkyNodeVX = nextSkyNodeVX; } // end T//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Shows sky node links, for debugging. */ class SkyNodeBeamVX extends Effects; V 4UT a T +$V.MwV*aVO' M S97MVFSwV*V-oV- -vPV-oV--vE u w IFp-vFP v PL!-v'a!Y VT x ES!-v(a!X Vo o//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** SkyNet. Spawned on the server to build the sky node network. Built slowly over time in latent code so we don't choke. */ class SkyNetVX extends SLInfoVX config (RocketX3); // DATA // // When we started. var float buildStamp; // Set based on gametype in postBeginPlay(). var bool bCTF, bAss; // Tag given to auto-spawned nodes. var() name autotag; // Used during auto-spawning. var NavigationPoint autonp; var SkyNodeVX firstsn, autosn; var int i; /** Map type. 0 == no sky nodes. 1 == tagged path nodes. 2 == sky nodes. */ var int type; var byte goalnum; var Actor goals[16]; var SkyNodeVX goalNodes[16]; var float maxGoalDist[16]; var int nodeSum; var() float weldRadius; var() float linkRadius; // The angle between a launch node and the next one that is "launchable". See goodNode(). var() float goodAngle; // Set when we've finished building. var bool bBuilt; // For visual debugging. var() config bool bShowNodes; var() config bool bShowLinks; // So we can do debugging just for the sky net. var() config bool bDebug; var() bool bNoAutoWeightNodes; var() float randomLinkAdjust; var() int laps; var UtilVX u; // METHODS // function postBeginPlay() { u = spawn(Class'UtilVX', self); u.setDebugLevel(DL_Verbose); if (bDebug) u.setOutputLevel(DL_Verbose); if (!properGame()) { u.err("postBeginPlay(): Only usable in CTF or Assault. Destroying."); destroy(); } if (bAss) // 16 possible fort standards. goalnum = Assault(level.game).numForts; else // Only 4 flags. goalnum = 4; setMapType(); } function setMapType() { local SkyNodeVX sn; local NavigationPoint np; foreach allActors(Class'SkyNodeVX', sn) { type = 3; return; } foreach allActors(Class'NavigationPoint', np, 'SKYNODEVX') { type = 2; return; } // No SL support. type = 1; } /** Currently only works with CTF and Assault. */ function bool properGame() { if (level.game.isA('CTFGame')) bCTF = true; if (level.game.isA('Assault')) bAss = true; return (bCTF || bAss); } /** Pick a random goal. The Optional args are for excluding a specific goal. Not currently used. */ function byte randomGoal(optional bool bEx, optional byte exgoal) { local int i, pnum; local int poss[16]; for (i = 0; i < goalnum; i++) { if (goals[i] != none && !(bEx && i == exgoal)) { poss[pnum] = i; pnum++; } } if (pnum > 0) { return poss[rand(pnum)]; } else { u.err("randomGoal(): no possible goals!"); return 0; } } /** Returns the first node near us that has a positive launch record. */ function SkyNodeVX findLaunchNode(Bot b) { local int team; local SkyNodeVX sn, ln; local byte goal; local float cw, w; // Init. goal = -1; // If we are close to where we want to be, don't launch! if (getGoal(b, goal)) { if (vsize(goalNodes[goal].location - b.location) < linkRadius * 2.0) { return none; } } // Find the heaviest, good node. foreach b.radiusActors(Class'SkyNodeVX', sn, linkRadius) { if (sn.launchWeight() > 0.50) { // Don't use this one if we'll have to do a 180 once we reach it. if (goodNode(sn, b)) { if (goal == -1) { // No goal? Just use the first one. ln = sn; break; } else { cw = sn.getWeight(goal); if (ln == none) { ln = sn; w = cw; } else { if (cw > w) { ln = sn; w = cw; } } } } } } if (ln != none) { return ln; } else { return none; } } /** This sets the goal index. We may set bEject, so this needs to happen just before we test for that in pilotBehavior(). Returns true if we have a valid goal. */ function bool getGoal(Bot bot, out byte goal) { local byte team; local FortStandard fort; local int i; team = bot.playerReplicationInfo.team; // Set our goal! if (bCTF) { // Are we carrying a flag? if (bot.playerReplicationInfo.hasFlag != none) { goal = team; } else { // Go for an enemy flag! //goal = randomGoal(true, team); goal = findEnemyFlagGoal(team); } } else if (bAss) { fort = Assault(level.game).bestFort; if (fort != none) { if (FortStandard(goals[goal]) != fort) { // Find the new fort index. for (i = 0; i < goalnum; i++) { if (goals[i] == fort) { goal = i; break; } } } } else { u.err("setGoal(): No best fort. Ejecting."); return false; } } return true; } /** FIX this. */ function byte findEnemyFlagGoal(byte team) { local int i; for (i = 0; i < goalnum; i++) { if (i != team) { // && flagAtBase(i)) { return i; } } } /** Returns true if the flag is safe and sound. */ function bool flagAtBase(byte team) { return CTFReplicationInfo(level.game.gameReplicationInfo).flagList[team].bHome; } /** Return true if there is a node after n which is roughly in a continuous direction from the bot and not blocked. */ function bool goodNode(SkyNodeVX n, Bot b) { local vector ton; if (n != none) { ton = normal(n.location - b.location); for (i = 0; i < arrayCount(n.links); i++) { if (n.links[i] != none && fastTrace(n.links[i].location, n.location) && (ton dot normal(n.location - n.links[i].location)) > goodAngle) { return true; } } } return false; } function SkyNodeVX closestNode(vector loc, float radius) { local SkyNodeVX sn, closest; local float dist; foreach radiusActors(Class'SkyNodeVX', sn, radius, loc) { if (closest == none || vsize(sn.location - closest.location) < dist) closest = sn; } return closest; } /** Build our sky network. */ auto state BuildSkyNetV3 { begin: buildStamp = level.timeseconds; // Need to auto-spawn sky nodes? if (type == 1 || type == 2) { autonp = level.navigationPointList; while (autonp != none) { // Catch our CTF goals here. if (bCTF && autonp.isA('FlagBase')) goals[FlagBase(autonp).team] = autonp; // If type 2, only spawn nodes for tagged path nodes. if (type == 1 || (type == 2 && autosn.tag == 'SKYNODEVX')) { autosn = autoSkyNodeVX(autonp, autosn); nodeSum++; } autonp = autonp.nextNavigationPoint; sleep(0.0); } // Keep track of the last (which will be first). firstsn = autosn; autosn = firstsn; while (autosn != none) { autosn.setWeldLoc(); riseSkyNodeVX(autosn); autosn = autosn.nextSkyNodeVX; sleep(0.0); } } // Assault goals done separately here. Copy them over. if (bAss) { for (i = 0; i < goalnum; i++) { goals[i] = Assault(level.game).fort[i]; } } linkNodes: autosn = firstsn; while (autosn != none) { // Destroy it if it has no links. if (!autosn.linkUp(linkRadius)) { // Need to keep a first one. if (autosn == firstsn) firstsn = autosn.nextSkyNodeVX; autosn.destroy(); } autosn = autosn.nextSkyNodeVX; sleep(0.0); } weightNodes: // Weigh the links, depending on gametype. if (!bNoAutoWeightNodes) { // Assign goal nodes. for (i = 0; i < goalnum; i++) { if (goals[i] != none) goalNodes[i] = closestNode(goals[i].location, linkRadius); } // Set the weight to the distance first. autosn = firstsn; while (autosn != none) { for (i = 0; i < goalnum; i++) { if (goalNodes[i] != none) { autosn.weight[i] = vsize(goalNodes[i].location - autosn.location); if (autosn.weight[i] > maxGoalDist[i]) maxGoalDist[i] = autosn.weight[i]; } } sleep(0.0); autosn = autosn.nextSkyNodeVX; } // Now divide by the max and subtract from 1.0 to get the weight. autosn = firstsn; while (autosn != none) { for (i = 0; i < goalnum; i++) { if (goalNodes[i] != none) { autosn.weight[i] = 1.0 - (autosn.weight[i] / maxGoalDist[i]); } } sleep(0.0); autosn = autosn.nextSkyNodeVX; } } // End. bBuilt = true; } // End BuildSkyNetVX. function SkyNodeVX autoSkyNodeVX(NavigationPoint np, SkyNodeVX lastsn) { local SkyNodeVX n; // Don't weld goal nodes. if (!isGoalNavPoint(np)) { foreach np.radiusActors(Class'SkyNodeVX', n, weldRadius) { n.weld(np.location); // Return the last one, for setting firstsn. return lastsn; } } n = spawn(Class'SkyNodeVX',, 'AutoSkyNodeVX', np.location); if (n == none) { u.err("autoSkyNodeVX(): spawn failed for " $ u.sname(np)); return lastsn; } if (bShowNodes) n.bHidden = false; n.navPoint = np; n.nextSkyNodeVX = lastsn; if (lastsn != none) lastsn.prevSkyNodeVX = n; return n; } function bool isGoalNavPoint(NavigationPoint np) { return ((bASS && np.isA('FortStandard')) || (bCTF && np.isA('FlagBase'))); } function linkNodes() { local SkyNodeVX last, n; foreach allActors(Class'SkyNodeVX', n) { n.nextSkyNodeVX = last; last = n; } } function riseSkyNodeVX(SkyNodeVX n) { local vector down, up; // Don't rise goal nodes. if (!isGoalNavPoint(n.navPoint)) { down = roof(n.navPoint, -500); up = roof(n.navPoint, 500); n.setLocation(down + (up - down) * 0.5); } } function vector roof(Actor a, float dist) { local Actor hit; local vector end, hl, hn; end = a.location + vect(0, 0, 1) * dist; hit = a.trace(hl, hn, end, a.location, false); if (hit != none) return hl; else return end; } q_ dYSLV6 for ---===MorTaLiTy===--- by (555)T-Bone & FrAgEd J-' } JXCC?,?, @!K #6 a?t5SZ Q !Od//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== class RocketVX_Red expands StrangeShellVX config (RocketX3); // SFBLUE BlueFighter Skin Designed by Gene Sprague #exec MESH IMPORT MESH=SFBlue ANIVFILE=MODELS\SFBlue_a.3d DATAFILE=MODELS\SFBlue_d.3d X=0 Y=0 Z=0 #exec MESH ORIGIN MESH=SFBlue X=0 Y=0 Z=0 #exec MESH SEQUENCE MESH=SFBlue SEQ=All STARTFRAME=0 NUMFRAMES=30 #exec MESHMAP NEW MESHMAP=SFBlue MESH=SFBlue #exec MESHMAP SCALE MESHMAP=SFBlue X=0.1 Y=0.1 Z=0.2 #exec TEXTURE IMPORT NAME=JSFBlue FILE=SFBlue.pcx GROUP=Skins FLAGS=2 #exec TEXTURE IMPORT NAME=JSFBlue FILE=SFBlue.pcx GROUP=Skins PALETTE=JSFBlue #exec MESHMAP SETTEXTURE MESHMAP=SFBlue NUM=1 TEXTURE=JSFBlue #exec AUDIO IMPORT FILE="Sounds\redeemerrocketfly.wav" NAME="redeemerrocketfly" GROUP="Sounds" ]//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== class REngineFlare2 expands Effects; // Engine Flares #exec MESH IMPORT MESH=REngineFlare2 ANIVFILE=MODELS\REngineFlare2_a.3d DATAFILE=MODELS\REngineFlare2_d.3d X=0 Y=0 Z=0 #exec MESH ORIGIN MESH=REngineFlare2 X=1200.00 Y=-600 Z=0 #exec MESH SEQUENCE MESH=REngineFlare2 SEQ=All STARTFRAME=0 NUMFRAMES=30 #exec MESHMAP NEW MESHMAP=REngineFlare2 MESH=REngineFlare2 #exec MESHMAP SCALE MESHMAP=REngineFlare2 X=0.06 Y=0.06 Z=0.12 Yaw=128 #exec TEXTURE IMPORT NAME=JSBflare FILE=SBflare.pcx GROUP=Skins FLAGS=2 #exec TEXTURE IMPORT NAME=JSBflare FILE=SBflare.pcx GROUP=Skins PALETTE=JSBflare #exec MESHMAP SETTEXTURE MESHMAP=REngineFlare2 NUM=1 TEXTURE=JSBflare O//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== class REngineFlare1 expands Effects; //Engine Flares #exec MESH IMPORT MESH=REngineFlare1 ANIVFILE=MODELS\REngineFlare1_a.3d DATAFILE=MODELS\REngineFlare1_d.3d X=0 Y=0 Z=0 #exec MESH ORIGIN MESH=REngineFlare1 X=1200.00 Y=600 Z=0 #exec MESH SEQUENCE MESH=REngineFlare1 SEQ=All STARTFRAME=0 NUMFRAMES=30 #exec MESHMAP NEW MESHMAP=REngineFlare1 MESH=REngineFlare1 #exec MESHMAP SCALE MESHMAP=REngineFlare1 X=0.06 Y=0.06 Z=0.12 Yaw=128 #exec TEXTURE IMPORT NAME=JSBflare FILE=SBflare.pcx GROUP=Skins FLAGS=2 #exec TEXTURE IMPORT NAME=JSBflare FILE=SBflare.pcx GROUP=Skins PALETTE=JSBflare #exec MESHMAP SETTEXTURE MESHMAP=REngineFlare1 NUM=1 TEXTURE=JSBflare q//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Projectiles launched from the back of a Strangelove get their velocities modified to be relative to the speed of the rocket. This SpawnNotify catches Projectile spawns and does so. */ class ProjectileSNVX extends SpawnNotify; var() float limitMult; var UtilVX u; function postBeginPlay() { u = spawn(Class'UtilVX', self); u.setDebugLevel(DL_Verbose); } function Actor spawnNotification(Actor a) { local Pawn inst; local StrangeShellVX s; local float limit; local float da; inst = a.instigator; // No instigator? Don't bother. if (inst != none) { foreach allActors(Class'StrangeShellVX', s) { // From the rider or gunner? if (inst != none && (s.getPilot() == inst || s.gunner == inst)) { // We limit the final vel. with this. limit = vsize(a.velocity) * limitMult; // 1.0 is aligned. -1.0 is pointing directly away from each other. da = normal(a.velocity) dot normal(s.velocity); if (da > 0) { a.velocity += normal(a.velocity) * vsize(s.velocity) * da; if (vsize(a.velocity) > limit) a.velocity = normal(a.velocity) * limit; } break; } } } return a; } // end k//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // Flare Engines thanks to Shawn Yarbrough for the code and idea! // AkA **Monarch** // Thank you Al McElrath for SLV2. //===================================================================== class BEngineFlare2 expands REngineFlare2; // Engine Flares #exec MESH IMPORT MESH=BEngineFlare2 ANIVFILE=MODELS\BEngineFlare2_a.3d DATAFILE=MODELS\BEngineFlare2_d.3d X=0 Y=0 Z=0 #exec MESH ORIGIN MESH=BEngineFlare2 X=1200.00 Y=-600 Z=0 #exec MESH SEQUENCE MESH=BEngineFlare2 SEQ=All STARTFRAME=0 NUMFRAMES=30 #exec MESHMAP NEW MESHMAP=BEngineFlare2 MESH=BEngineFlare2 #exec MESHMAP SCALE MESHMAP=BEngineFlare2 X=0.06 Y=0.06 Z=0.12 Yaw=128 #exec TEXTURE IMPORT NAME=JSBflare FILE=SBflare.pcx GROUP=Skins FLAGS=2 #exec TEXTURE IMPORT NAME=JSBflare FILE=SBflare.pcx GROUP=Skins PALETTE=JSBflare #exec MESHMAP SETTEXTURE MESHMAP=BEngineFlare2 NUM=1 TEXTURE=JSBflare cz"B-d8$ V //===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** My own blast texture. */ class BlastmarkVX extends NuclearMark; // Two random ones. var Texture marks[2]; simulated function postBeginPlay() { texture = marks[rand(arrayCount(marks))]; drawScale = 5 + frand() * 3.0; super.postBeginPlay(); } // end o//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Used for jump detection, so we can eject riders and gunners. Checks for jump boots in the inventory and tries to manage the bCountJumps variable which we need to be set to true. After jump boots where off they set it to false. Only used in standalone games. */ class JumpDetectorVX extends TournamentPickup; var StrangeShellVX sl; var UtilVX u; function postBeginPlay() { u = spawn(Class'UtilVX', self); u.setDebugLevel(DL_Verbose); super.postBeginPlay(); } state Activated { begin: Pawn(owner).bCountJumps = true; } /** This is called from PlayerPawn.doJump(), normally used for jump boots. bCountJumps is set for the rider every tick so any jump boots don't get in the way. Once we've ejected, we look for jump boots. If none, set it to false. */ function ownerJumped() { if (sl != none) { sl.eject(owner, 1); } if (inventory != none) { inventory.ownerJumped(); } } /** We could make this a timer but it's for standalone games only, and even for just that one split second you wouldn't have been able to eject, it'll be worth it. */ function tick(float delta) { Pawn(owner).bCountJumps = true; } function destroyed() { local Inventory jb; jb = Pawn(owner).findInventoryType(class'UT_JumpBoots'); if (jb == none) { Pawn(owner).bCountJumps = false; } super.destroyed(); } // end i//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** A gauge on the SLHUD. */ class HUDLevelVX extends SLInfoVX; /** Linked list. */ var HUDLevelVX next; var int x, y; var int w, h; var float alarm; var float realLvl; var float dispLvl; var string label; var string readout; var string qualifier; var Font lFont, sFont; var float bubx, buby; var() float bubbleRate; var() float lvlRate; /** Label info. These are adjusted based on screen size and font choice. Store all this garbage so we don't have to init every time. */ var int labely; var Font labelFont; var int roy; var Font roFont; var int qx, qy; /** This is the "qualifier" font, used to write "m" for meters, "kg" for kilograms, etc. */ var Font qualFont; var bool bBorder; // Draw the border around the gauge? var bool bNoFitLabels; function init(float alarm, string label, string qualifier, Font lFont, Font sFont, optional HUDLevelVX nextlvl) { self.alarm = alarm; self.label = label; self.qualifier = qualifier; self.lFont = lFont; self.sFont = sFont; bubx = rand(w - 1); buby = rand(h); next = nextlvl; } function position(int x, int y, int w, int h) { self.w = w; self.h = h; self.x = x; self.y = y; // Reset label info. labely = -1; } function render(StylusVX s) { local Canvas c; local float lvl; local int x, y, mx; local int i, slide, top; local float partial; local float xl, yl; local Color color, origColor; local float fade; c = s.c; // This buffers the display level. lvl = dispLvl; fade = SLHUDVX(owner).screenFade; // I fucked this all up and for some reason reversed the y axis. x = self.x; y = self.y + h - 1; /* if (lvl > 1.0) { // Used to have a secondary level. drawLevel(c, pos, lvl - 1.0, 0, col, scale, alarm); lvl = 1.0; } */ // Grab the current color from the parent (HUD) and store it. origColor = c.drawColor; color = c.drawColor; // Flash the level from red to bright green. if (alarmOn()) { color = alarmColor(color, SLHUDVX(owner).bAlarm); } else if (lvl > 1.0) { color = s.blendc(color, alarmColor(color, true), lvl - 0.5); lvl = 1.0; } if (lvl > 0.0) { // This top function rounds down all the time, so if we take the modulo of it // we can draw the fraction that's lopped off as a partially faded extra line at // the top. It gives it a smooth look. top = Min(h, lvl * h); c.drawColor = color * fade; // The top and bottom lines are offset by one pixel, so we have to // handle them separatelsy. This is the bottom line. if (top >= 1) { s.setPos(x + 1, y); s.pix(w, 1); } // Top line. if (top == h) { s.setPos(x + 1, y - (h - 1)); s.pix(w, 1); } // The rest. if (top > 1) { // Line h is already done, if necessary, hence the min() func. s.setPos(x, y - (min(h - 1, top) - 1)); s.pix(w, (min(h - 1, top) - 1)); } if (level.bHighDetailMode) { // The "partial" line. partial = (lvl * h) % 1.0; if (partial > 0.0) { c.drawColor = color * partial * fade; mx = x; if (top == 0 || top == (h - 1)) { mx++; } s.setPos(mx, y - top); s.pix(w, 1); } } } // Draw bubbles. if (level.bHighDetailMode && buby < top) { //if (buby == top - 1) { if (buby == top) { // We're at the top - draw it faded to the partial line. c.drawColor = color * partial * fade; } else { c.drawColor = color * fade; } s.setPos(bubx + x, y - buby); s.pix(1, 2); } if (bBorder && level.bHighDetailMode) { // Draw a frame. Gets fainter as the level approaches 100%. c.drawColor = color * 0.25 * (1.0 - lvl) * fade; s.drawFrame(x, y - h + 1, w + 1, h); } c.drawColor = color * fade; drawLabels(s, x, y); // Restore the original color. The next gauge will pick the canvas // color up and use it, and if we've tainted it... c.drawColor = origColor; } /** Check the HUD and see if the alarm loop is "on". Alter the color if so. */ function Color alarmColor(Color c1, bool on) { local Color newc; newc = c1; if (!on) { newc.r /= 3; newc.g /= 3; newc.b /= 3; } else { newc.r *= 3; newc.r = min(255, newc.r); newc.g /= 3; newc.b /= 3; } return newc; } // Draw labels. function drawLabels(StylusVX s, int x, int y) { local Canvas c; local float xl, yl; c = s.c; if (label != "" && readout != "") { // Initialize for this canvas. if (labely == -1) { if (label != "") { c.font = lFont; c.textSize(label, xl, yl); if (xl >= w) { c.font = sFont; c.textSize(label, xl, yl); if (xl >= w && !bNoFitLabels) { // Chop it off and re-init. label = left(label, w / xl - 2); labely = -1; return; } } labely = y - yl + 1; labelFont = c.font; if (readout != "") { // Gah. Hardcoded. if (w < 32 && !bNoFitLabels) { c.font = sFont; } else { c.font = lFont; } c.textSize(readout, xl, yl); roy = labely - yl + 1; qx = x + 1 + xl; roFont = c.font; if (qualifier != "") { c.font = lFont; c.textSize(readout, xl, yl); if (xl + qx >= w) { c.font = sFont; c.textSize(readout, xl, yl); } qy = labely - yl; qualFont = c.font; } } } } s.setPos(x + 2, labely); c.font = labelFont; s.drawText(label); if (readout != "") { s.setPos(x + 1, roy); c.font = roFont; c.textSize(readout, xl, yl); s.drawText(readout); if (qualifier != "") { s.setPos(x + 1 + xl, qy); c.font = qualFont; s.drawText(qualifier); } } } } function bool alarmOn() { return (realLvl < alarm); } /** Called from the HUD in tick(). */ function update(float delta, float l, coerce string s) { realLvl = l; readout = s; if (level.bHighDetailMode) { // Bubbles! buby += bubbleRate * delta; if (buby >= h) { buby = 1; // 2 pixels tall. bubx = rand(w - 1); } } if (dispLvl == realLvl) { // Nothing. } else if (dispLvl < realLvl) { dispLvl = fmin(realLvl, dispLvl + lvlRate * delta); } else { dispLvl = fmax(realLvl, dispLvl - lvlRate * delta); } /* if (next != none) next.update(delta); */ } function destroyed() { if (next != none) next.destroy(); } // end Z//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Residual smoke from crashes, etc. */ class BlackCloudVX extends SLSmokeVX; /** Expansion rate. */ var float exrate; simulated function beginPlay() { super.beginPlay(); velocity = vrand() * 15; velocity.z = abs(velocity.z); // Half step off... setTimer((lifespan / 20.0) * 0.5, false); } simulated function tick(float delta) { drawScale += delta * exrate; } /* No double spawn. simulated function timer() { if (owner == none && level.netmode != NM_DedicatedServer) { spawn(Class'BlackCloudV3', self,, location + vrand() * 20); } } */ // end m @R//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Fuel core pickup. It floats in the air and provides extra fuel. Here's how it works. When spawned, it determines if it's in air or not. If it is, it will loop the hovering anim and sit there. If not, it will spawn a fuel pod on the client side. When a player approaches, it will pop up out of the pod and hover. When they walk away it falls down. The complication of network play is that when the core is picked up, the client doesn't know, except via bHidden. So all our behavior is client side. The client core monitors bHidden to find out when it's sleeping and when it's picked up, via tick() in the Pickup state and timer() in the ClientSleep state, respectively. This scheme may need to be reised, either by making pickedUp() or start/stopHover() replicated calls from the server, depending on how badly it's possible for this scheme to get desynced. */ class FuelcoreVX extends SLAmmoVX; var FuelpodVX pod; var() float hoverDist; // Distance off the ground we hover. var() float hoverRadius; // Range we inititate hovering. var() float hoverRate; // Speed we rise at. var() float hoverTimer; // Timer lapse in Fuelpod.uc. //var() Sound sndExplode; var vector hoverLoc; var bool bHover; var bool bInAir; var bool bRising; var BlastMark bm; var FuelglowVX glow; var() Class glowClass; var Sound casingSound, riseSound; var UtilVX u; /** Initialize. Set bInAir and hoverLoc. On client, too. */ simulated function postBeginPlay() { local Actor a; local vector hl, hn, end; u = spawn(Class'UtilVX', self); u.setDebugLevel(DL_Verbose); // Always level us out. We hover. setRotation(rot(0, 0, 0)); // If we have an owner, we are an inventory spawn copy. if (owner == none) { // Establish how high off the ground we are. end = location; end.z -= hoverDist; a = trace(hl, hn, end, location, false); bInAir = (a == none); // Only used if not hanging in the air all the time. if (!bInAir) { hoverLoc = hl + vect(0, 0, 1) * hoverDist; pod = spawn(class'FuelpodVX', self,, hl + hn, rotator(hn) + rot(-16384, 0, 0)); } } super.postBeginPlay(); } simulated function spawnGlow() { if (glow != none) glow.destroy(); glow = spawn(glowClass, self); } auto state Pickup { simulated function beginState() { // Inventory copy. if (owner == none) { if (bInAir) { loopAnim('hover'); spawnGlow(); } else { if (bHover) stopHover(); else // This starts the core hidden. landed(vect(0, 0, 1)); // Anyone in the pod radius? pod.touchCheck(); } } super.beginState(); } /** This is not inventory that can be tossed out and what not, so skip the super call. Once we've hit the ground (after stopHover()), hide us. We can't use bHidden because that will screw other stuff up. */ simulated function landed(vector hn) { // Hidden, sorta. drawScale = 0.001; // Not sure this is necessary. setLocation(pod.location); //super.landed(hn); } /** Enabled so we know when to stop the pod's rising. Also used to detect pickups on net clients. */ simulated function tick(float delta) { local float d; if (bRising) { d = hoverLoc.z - location.z; if (abs(d) < 5.0) { velocity = vect(0, 0, 0); // See destroyed(). setPhysics(PHYS_None); playSound(casingSound, SLOT_None, 0.85); bRising = false; } else if (abs(d) < (hoverDist * 0.5)) { velocity = vect(0, 0, 1) * hoverRate * (d / (hoverDist * 0.5)); } } // On the client, register pickups via bHidden. if (role < ROLE_Authority) { if (bHidden) { disable('tick'); pickedUp(); gotoState('ClientSleep'); } } else { // No need to keep tick running. if (!bRising) { disable('tick'); } } } /** Once we're done the rising animation, just hover. */ simulated function animEnd() { if (animSequence == 'rise') { loopAnim('hover'); } } simulated function startHover() { bHover = true; playAnim('rise'); playSound(riseSound, SLOT_Misc, 1.0); velocity = vect(0, 0, 1) * hoverRate; setPhysics(PHYS_Projectile); bRising = true; enable('tick'); lightEffect = LE_FastWave; // Damnit. un/touch() get called too fast. spawnGlow(); // Restore its scale from landed(). drawScale = 1.0; } simulated function stopHover() { bHover = false; // Keeps it from popping up in net games where stop and start // get called too closely. Need to figure out why and FIX that. velocity = vect(0, 0, 0); disable('tick'); playAnim('drop'); bCollideWorld = true; setPhysics(PHYS_Falling); lightEffect = LE_None; if (glow != none) glow.fade(); } /** The pod protects us when we're not hovering. You can't shoot the core while it's falling, but I can live with that. FIX? */ function takeDamage(int dam, Pawn inst, vector hl, vector mom, name dt) { if (bHover || bInAir) { instigator = inst; gotoState('Explode'); } } begin: // Nothing. Why does Inventory call becomePickup() twice? } // End pickup state. state ClientSleep { ignores touch, takeDamage; simulated function timer() { if (!bHidden) { gotoState('Pickup'); } else { setTimer(0.1, false); } } simulated function beginState() { setTimer(0.1, false); } } simulated function pickedUp() { if (glow != none) glow.destroy(); // This calls back stopHover(). if (pod != none) { setLocation(pod.location); if (pod.bOpen) pod.close(); } } /** So the fuel pod compiles. */ simulated function startHover() { // Not in pickup mode? Ignore. } /** So the fuel pod compiles. */ simulated function stopHover() { // Not in pickup mode? Ignore. } state Sleeping { ignores touch, takeDamage; function beginState() { // Stick it back in the pod. pickedUp(); super.beginState(); } begin: sleep(respawnTime); playSound(respawnSound); // Looks stupid coming from inside the pod. //spawn(class'RespawnEffect', self,, location); sleep(0.3); gotoState('Pickup'); } state Explode { ignores touch, takeDamage; begin: bHidden = true; spawn(class'StrangeExplVX',,, location); //playSound(effectSound1,, 12.0,, 3000); hurtRadius(165, 250, 'exploded', 140000, location); sleep(0.05); // If we're close to the ground, spawn a blast mark. GAH. FIX. /* if (level.netmode != NM_DedicatedServer && !bInAir) { bm = spawn(class'Botpack.BlastMark',,, location, rot(-16384, 0, 0)); if (bm == none) { } } */ setRespawn(); } /** Need to notify the controller that we've pickup up our first pod so the HUD will reflect it. */ function inventory spawnCopy(Pawn p) { local inventory copy; local StrangeShellVX sl; copy = super.spawnCopy(p); foreach p.TouchingActors(class'StrangeShellVX', sl) { if (sl.getPilot() == p) { sl.fc = FuelcoreVX(copy); } } return copy; } /** Note that if we're PHYS_Projectile, the StrangeWave destroys us somehow. It is a mystery to me. So it's possible we will be destroyed, which we shouldn't be unless there's no respawns (unlikely). Watch for it. May need to get bProjTarget to false while rising. FIX? */ simulated function destroyed() { if (glow != none) glow.destroy(); if (pod != none) pod.destroy(); super.destroyed(); } // end b///===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Provides dynamically loaded fonts for various HUDs. Not fully used yet. */ class FontlibVX extends FontInfo; enum FStyle { FS_Normal, FS_Slick, FS_Title }; var() name fnames[6]; var() FStyle fstyles[6]; var int currindex; var FStyle currstyle; // Overridden Botpack.FontInfo functions. We can get rid of these // eventually. static function Font getStaticHugeFont(float width) { return Font(dynamicLoadObject("SLV2Fonts.title18", class'Font')); } static function Font getStaticBigFont(float width) { return Font(dynamicLoadObject("SLV2Fonts.leg16", class'Font')); } static function Font getStaticMediumFont(float width) { return Font(dynamicLoadObject("SLV2Fonts.leg16", class'Font')); } static function Font getStaticSmallFont(float width) { return Font(dynamicLoadObject("SLV2Fonts.leg8", class'Font')); } static function Font getStaticSmallestFont(float width) { return Font(dynamicLoadObject("SLV2Fonts.leg8", class'Font')); } static function font GetStaticAReallySmallFont(float Width) { return Font(dynamicLoadObject("SLV2Fonts.leg8", class'Font')); } static function font GetStaticACompletelyUnreadableFont(float Width) { return Font(dynamicLoadObject("SLV2Fonts.leg8", class'Font')); } // Mine. static function Font getFont(optional FStyle style, optional bool big) { local String name; switch (style) { case FS_Slick: if (big) name = "techno16"; else name = "techno8"; break; case FS_Title: if (big) name = "title18"; else name = "title9"; break; // case FS_Normal: default: if (big) name = "leg16"; else name = "leg8"; } return Font(dynamicLoadObject("SLV2Fonts." $ name, class'Font')); } function Font getNextFont(FStyle style, optional bool reset) { local int i; if (reset || style != currstyle) { currindex = 0; currstyle = style; } while (currindex < arrayCount(fnames)) { if (fstyles[i] == currstyle) { return Font(dynamicLoadObject("SLV2Fonts." $ fnames[i], class'Font')); } currindex++; } // At the end. currindex = 0; return none; } /** Find a font with the specified style that will fit in the specified space. */ function Font fitFont(Canvas c, string s, out float w, out float h, FStyle style) { local Font font, last; local float xl, yl; font = getNextFont(style); while (font != none) { c.font = font; c.textSize(s, xl, yl); if (xl <= w && yl <= h) { w = xl; h = yl; return font; } last = font; font = getNextFont(style); } // No font fit. return last; } // end ]//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Rocket exhaust sprite. */ class ExhaustPuffVX extends AnimSpriteEffect; // end q O!z N!p0q $C. $?HP//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** It's blue. */ class ExhaustPuffBlueVX extends ExhaustPuffVX; // end j1//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Ejected brass from firearms. Also the super cl_ass for similar objects. */ class EjectedBrassVX extends UT_ShellCase; var() bool bLevel; // Zero the pitch and roll on landing? var() Sound landSound; // Sound played on landing. var() float sinktime; // Time it takes to sinkout. var() float sinkfudge; // Sink height fudge factor. var() int maxBounces; // Don't bounce past this. var() float noBounceChance; // Chance we'll stop bouncing on any given hitWall(). var() bool bRandHitSound; var() Sound hitSounds[10]; // Random hitsounds. var() int num; // # of hitsounds. simulated function postBeginPlay() { if (level.bDropDetail && (level.netmode != NM_DedicatedServer) && (level.netmode != NM_ListenServer)) lifeSpan = 1.5; } simulated function playHitSound() { local Sound s; if (bRandHitSound) s = hitSounds[rand(num)]; else s = landSound; playSound(s, SLOT_Misc, 1.0); } simulated function hitWall(vector hn, Actor wall) { local vector realhn; if (level.bDropDetail) { // || numBounces > 3) { destroy(); } else { if (bHasBounced && ((numBounces > maxBounces) || (frand() < noBounceChance))) // || (velocity.z > -50))) bBounce = false; numBounces++; if (!region.zone.bWaterZone) playHitSound(); realhn = hn; hn = normal(hn + 0.4 * vrand()); if ((hn dot realhn) < 0) hn *= -0.5; velocity = 0.5 * (velocity - 2 * hn * (velocity dot hn)); randspin(spinRate()); bHasBounced = true; } } simulated function float spinRate() { return (rand(100000) + 100000); } simulated function landed(vector hn) { local rotator r; if (level.bDropDetail || numBounces > 3) { destroy(); } else { if (!region.zone.bWaterZone && landSound != none) playHitSound(); setPhysics(PHYS_None); if (bLevel) { r = rotation; r.pitch = 0; r.roll = 0; setRotation(r); } if (lifespan > sinktime) setTimer(lifespan - sinktime, false); else gotoState('Sinkout'); } } simulated function timer() { gotoState('Sinkout'); } /** Rather than just disappearing or fading out, we sink into the ground. */ state Sinkout { simulated function beginState() { local float vish; local vector v; if (level.bDropDetail) { destroy(); return; } rotationRate = rot(0, 0, 0); // The constant is a fudge factor. Er, not. vish = (collisionHeight + sinkfudge) * drawScale; v = location; v.z += vish; setLocation(v); v = vect(0, 0, 0); v.z = -vish; prePivot = v; bCollideWorld = false; setPhysics(PHYS_Projectile); // Fast enough to disappear before we are destroy()'ed. v = vect(0, 0, 0); v.z -= vish / lifespan; velocity = v; } } // end ^ //===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** My own textures. */ class DscarVX extends DirectionalBlast; var Texture marks[2]; simulated function postBeginPlay() { texture = marks[rand(arrayCount(marks))]; super.postBeginPlay(); } // end Z //===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Puffs the rocket emits when damaged. */ class DamagePuffVX extends SLSmokeVX; simulated function postBeginPlay() { super.postBeginPlay(); drawScale = default.drawScale + frand() * 0.5; } // end q//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Used in standalone games (or listen servers where the rider has the viewport) to get a tick() *after* the rocket position has been updated. If we don't use this, the rider and rocket become desynced slightly and it looks bad. */ class ControllerVX extends SLInfoVX; var UtilVX u; function postBeginPlay() { u = spawn(Class'UtilVX', self); u.setDebugLevel(DL_Normal); } function tick(float d) { local StrangeShellVX sl; sl = StrangeShellVX(owner); if (sl == none || sl.bDestroyed) { destroy(); } else { sl.ctick(d); } } function destroyed() { super.destroyed(); } Hm//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Exhaust contrail from a Strangelove. View-aligned contrails don't work yet. FIX. */ class ContrailVX extends Effects config (RocketX3); // DATA // /** Intro time. */ var() float intro; var() float length; /** The root contrail is hidden and is the master for the chain. Don't need to worry about relevancy as it's client-only. */ var bool bRoot; var StrangeShellVX sl; var ContrailVX last; // We keep track of our own lifespan for flexibility. var float elapsed; var() config float life; /** Detail drop settings. */ var() config bool bDDStart; // If DD is on, do we... even start? var() config bool bDDRestart; // Restart when DD goes off? var() config bool bDDEnd; // End when DD goes on? var() config bool bDDShort; // Shorten life span when DD is on? var() config bool bViewAlign; var() config bool bRotate; var() config float rotRate; var bool bDDShorted; var bool bDDEnded; var bool bEnd; // Is this an end segment? var bool bDead; // Destroyed()? /** End texture which can be rotated to be a "start" texture. */ var() Texture endTex; // NOT USED YET. var PlayerPawn vp; // METHODS // /** Detect root segment. */ simulated function postBeginPlay() { // This is the root segment? if (owner != none) { if (owner.isA('StrangeShellVX')) { bRoot = true; bHidden = true; sl = StrangeShellVX(owner); } } } /** Only used for root segment. */ simulated function end() { // Reverse the last one. Unless it already was. if (last != none && !last.bEnd) last.setEndTexture(true); if (sl != none) sl.rootct = none; // Destroy when the chain is gone. //destroy(); bDead = true; } /** This is tick() for the root node. */ simulated function roottick(float d) { local Pawn slowner; local vector x, y, z, newloc; local rotator newrot; local ContrailVX prev; local PlayerPawn pp; if (last != none && last.bDead) { destroy(); return; } if (bDDEnded) { if (!bDDRestart) { end(); return; } } if (level.bDroPDetail && bDDEnd) { bDDEnded = true; //if (!bDDRestart) //end(); return; } if (bViewAlign) viewAlignChain(getViewPort()); else if (bRotate) rotateChain(d); // For the root node this means the chain is stopped. if (bDead) return; if (last == none || bDDEnded) { // We do this so the owner doesn't see the first segment. if (last == none && sl != none) slowner = sl.getPilot(); if (bDDStart && !bDDRestart && level.bDropDetail) { end(); return; } // Restart. bDDEnded = false; if (last != none) prev = last; last = spawn(Class'ContrailVX', slowner,,, rotator(sl.velocity)); getAxes(sl.rotation, x, y, z); last.setLocation(sl.location + last.length * x); // This is the beginning. last.setEndTexture(false); setTimes(last); if (prev != none) last.last = prev; } else { if (vsize(sl.location - last.location) > (last.length * 2)) { prev = last; getAxes(last.rotation, x, y, z); newloc = last.location + last.length * x; newrot = rotator(sl.location - newloc); if (!bRotate && !bViewAlign) newrot.roll = sl.rotation.roll; // They can see it now. last.bOwnerNoSee = false; last = spawn(Class'ContrailVX', self,, newloc, newrot); last.last = prev; setTimes(last); } } } /** Slowly rotate each segment in the chain. */ simulated function rotateChain(float d) { local ContrailVX next; local rotator r; next = last; while (next != none) { r = next.rotation; r.roll += rotRate * d; next.setRotation(r); next = next.last; } } simulated function float arccos(float a) { return atan(sqrt(1 - a * a) / a); } /** Align each segment in the chain so that the camera lies in a plane perpedicular to the segment plane. */ simulated function viewAlignChain(PlayerPawn vp) { local ContrailVX next; local rotator r; local vector v; local float uupr, a; if (vp == none) return; // Unreal units per radian. uupr = 65536.0 / (2.0 * 3.14); next = last; while (next != none) { r = next.rotation; a = r.yaw / uupr; // Make the ContrailVX the origin. v = vp.location - next.location; // Rotate around the z axis. v.x = v.x * cos(a) - v.y * sin(a); v.y = v.y * cos(a) + v.x * sin(a); // Calculate the angle that puts the camera in the plane, // and rotate 90'. r.roll = atan(v.z / v.y) * (65536.0 / (2.0 * 3.14)) + 16384; log("setting roll: " $ r.roll $ " rotv: " $ v); next.setRotation(r); next = next.last; } } /** Get, and store, the camera. */ simulated function PlayerPawn getViewPort() { local PlayerPawn pp; // If view port is not set, or has changed, reset it. if (vp == none || !(vp.player.isA('ViewPort'))) { vp = none; foreach allActors(Class'PlayerPawn', pp) { if (pp.player.isA('ViewPort')) { vp = pp; break; } } } return vp; } /** Init lifespan stuff. */ simulated function setTimes(ContrailVX c) { c.life = life; c.elapsed = life; //c.intro = intro; c.intro = (600 / vsize(sl.velocity)) * default.intro; c.bDDShorted = bDDShorted; } /** Shorten the life of this segment. */ simulated function short() { life /= 4.0; elapsed /= 4.0; intro /= 2.0; bDDShorted = true; } /** Segment fading is handled here. */ simulated function tick(float d) { if (bDDShort && !bDDShorted && level.bDropDetail) short(); if (bRoot) { roottick(d); return; } elapsed -= d; if (elapsed <= 0.0) { destroy(); return; } if (elapsed > (life - intro)) { // For the intro time we are expanding and solidifying. scaleGlow = (life - elapsed) / intro; } else { // The rest we are slowly expanding and fading out. scaleGlow = elapsed / (life - intro); // OK, we can clear this now. They won't see it. //bOwnerNoSee = false; } lightBrightness = scaleGlow * default.lightBrightness; } /** Swaps the texture with the "end" texture, possibily rotating it depending on which end is the end. */ simulated function setEndTexture(bool reverse) { local vector x, y, z; local rotator newrot; bEnd = true; skin = endTex; if (reverse) { // Rotate and move. getAxes(rotation, x, y, z); setLocation(location + x * length); newrot = rotation; newrot.pitch = rotation.pitch + (65535 * 0.5); setRotation(newrot); } } simulated function destroyed() { bDead = true; } V//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // // Thank you Al McElrath for SLV2. //===================================================================== /** Residual smoke from crashes, etc. */ class CloudBlack extends SLSmokeVX; /** Expansion rate. */ var float exrate; simulated function beginPlay() { super.beginPlay(); velocity = vrand() * 15; velocity.z = abs(velocity.z); // Half step off... setTimer((lifespan / 20.0) * 0.5, false); } simulated function tick(float delta) { drawScale += delta * exrate; } /* No double spawn. simulated function timer() { if (owner == none && level.netmode != NM_DedicatedServer) { spawn(Class'CloudBlack', self,, location + vrand() * 20); } } */ // end @  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~jUV!abV"@X"@_"@]"@Z*&BBB"2@@ffffffff ff ff ff ff ff ff ff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff@@@  !!!"""###$$$%%%&&&'''((()))***,+,,,,---.../..///00011122233344455566677788888:98899999::::;;;<<<====>>>>>?????@@@@AAAAABBBBCCCDDDDDEEEEFFFGGGHHHIIIJJJJJKKKKLLLMMLMMMNNNOOOPPPQQQRRQRRRSSSTTTUUUVVUVVVWWWXXXYYYZZZZZ[[[[\\\]]]^^^__^___```aaabbbcccdddeeefffggghhhiiijiijjjkkkkkllkjllklllmmmnnnooopppqqqrrrssssstttttuuuutuuuvvvvwwwwwxxxyyyzyyzzyzzz{{{|||||}}}|}}}}}~}~~~~}~~~~uV-L ZWKG-w- -Sv- -Bp- -,|- -dr- -u  \!g < { A ACB j//===================================================================== // RocketX3. // ""()Frgd()"" // Seven <==God w/ all Programing // // 555 ---===CrAzYBoNeS===--- 555 // **Monarch** // // Flare Engines thanks to Shawn Yarbrough for the code and idea! // AkA **Monarch** // Thank you Al McElrath for SLV2. //===================================================================== class BEngineFlare1 expands REngineFlare1; // Engine Flares #exec MESH IMPORT MESH=BEngineFlare1 ANIVFILE=MODELS\BEngineFlare1_a.3d DATAFILE=MODELS\BEngineFlare1_d.3d X=0 Y=0 Z=0 #exec MESH ORIGIN MESH=BEngineFlare1 X=1200.00 Y=600 Z=0 #exec MESH SEQUENCE MESH=BEngineFlare1 SEQ=All STARTFRAME=0 NUMFRAMES=30 #exec MESHMAP NEW MESHMAP=BEngineFlare1 MESH=BEngineFlare1 #exec MESHMAP SCALE MESHMAP=BEngineFlare1 X=0.06 Y=0.06 Z=0.12 Yaw=128 #exec TEXTURE IMPORT NAME=JSBflare FILE=SBflare.pcx GROUP=Skins FLAGS=2 #exec TEXTURE IMPORT NAME=JSBflare FILE=SBflare.pcx GROUP=Skins PALETTE=JSBflare #exec MESHMAP SETTEXTURE MESHMAP=BEngineFlare1 NUM=1 TEXTURE=JSBflare th[Q [ UX!abV"X"@_"]"@Z*&"2&@՝ޝ杝򝝝靝❝ܝ՝ϝ˝Ɲ@@CCB?8AA7C7tr'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:67?A7@CCB?8AA7C+8{@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7CF==L>??F  !$#())-//33779;<<?AA@FFEEKKLL11++! \\[^_``M  ZX mnmoo;G$%m  IO7555zv&BD cln^lrlqq;<>qrSQ>== z;xoWY'&R75(:; m7854UV3n yryW'-[anop`\6_*08GUUVVxq$ss5SS f2pFi a0*q1^Q%b "y'#$K}mH<)  FggY k!j>k 00+}*--U,-!=c3 `%U (lT)D67\k 6jXY@3ACWEDCBE l1YX?=3~=?0  UUCYv~2)?-i[ZiF)5 6_II=`RB*`[:JH^_^"!"9:<KKIuIu^;N'CQV+d}}:TS  ,,x+^ r&!%L|lJ;(Eff[" i#h/i..1|033S2,#/bPab+&SC.x~R/99:;Wh:gZ[J2HOPwV''wv&~x/X 55q nn>o>{6m qt.>r$uu{Ds4p>?B{z{Es4#$f_G@aa1<8PNcd]  789QQOeOec8pM(DyoAeq||7*tnzsw]b #e!x&&"#"xxWJ|J|VVVfl#;G;G(    E flffX XX||Xj  ji/.Xj  /f =/.,*||*b(,,()+,)T,+,,T*,, fV|.;b2~' [_[_[_T$S+$TS$'~'  k~ ~kTS,'(Cjij333[63[56[j4iV 65445ijW|jiW   (V Gi?222GGDBG?2112^@^iBD?BA V@CDDCACABB??@D@k~k k0/XWXWWWW>}><2>}2><<Hu>/</=<<=     STTTH}BBBXXu}H}Y1^>,,hZYhZYhY E(E 44  555>^^(_QHHH<_Q_QA)>Z_ZZ__hZh(00/>.|9HJHt[]][]^]^\+]&!98!! ! 9989!!89;:EIEJEFJHJFtFGHFtGItG]:\BMM&MBPU*+UUc c c|)|)|*9\]STSRSRPTPTRP++*w*w**]]**q%% $ qqKY{ K{UUeUk$:I:I'Dek e eZ " Z {ZhZ{!"" g h-.h Z-"e-=.02 { {0a2./.2/2112RR2++20e"U.{a:O-}V__a*a_Q%RR%1B%Q}--}ww}+QR-.gfg999V9:V:7V8gfU7:878f{YhYgh'U!IfO?OOIIvINO?ONc@cfv&%vu"!U#$&##&%v%&uv$u$w}ww.- XmX4mm4  4p p   mm =z=3npz=<5===5<<43ppo -;s=-s=s #ep#prsyttytz=CnCCnnoX34X3pno=z=y^>AAz`y`zyyzoD#~("#Dq33"#"#roqqe^>(^Fll<ll~FF?;~`~``z`z0(~0~-;{.7PNdNababbc`cb\'7676777687OLPLKLPPNKMKddKNOMMdb7`mCLL'LCmxmxx@mddrdrorrpp{?{?{6`bs)strsrz@tz@rt@vv\\ F  !#$%#()*+)./01/34537879<=<?@AAC@EFGFEEKLMKLLQ1S+!WY [\]\_`ab`M  ZX mnopqo;Gu%my  IO55zv&BD cln^rlqq; <> qrSQ>==1 68z;xoWY'&NRS7Y5(:; m7854UVno rsyW'-[anop`\G2    !)*0*-./01q6789:;1^ABCDEF .nxSp p ˬ۾ܭվԭM?TM t½ ̺!"#q$d%q&m 'E( )>*z+F,C-;.v/D01<2>3st4uU5{s6us7Ds8KU9Ls:Js;փ<ӈ=҆>։?R@RA^BZ C^DVE=F>GHHAIIJ@KVLXMMNTOKPTQ!R7SaTJUV¶WXܺYZ[P\~]l^w_=`~aPblcwdOef̮ghijkslFm6n;o8p6q?r7sӄtFudvmw x8y?z?{|}~lܫՁFO ƈ %03*`<`I_`utԺF ]ce{ڗ/ii TYW^]\VYV Zշԫ[\SU?= *(+  ![JڝB?  !9ts%;"3# -F]QMY[ 3; .:;؄   ц \ _! #C؉Ulէܝ !"<#9$j%&2'()ڊ*(+&,-Ӆ.ކ/ӈ01f2e345[6׍7ܗ89:y;_<J=C>?ڂ@:ABZC:D9E\FGeHQIrJKLM3NrOsPYQ!RXSQTTUcVC~WXY$Z"[|~\ ])^_!`a}b[cdd1e8fESgOTh!i{TjqTklŲmnopqr;sBt?u%vw'xyz{ބ|މ}P~0@Ѓ@__V>2:[1b:pp^:%>_!!W>v^u""9bb6oϠڢϣڥũŪ7}4ЉϱCζɷ) ~?}'O?W'F';=ɋɈlpqhgh 8 7A$9.=8_6UG5>kD@4D0[;<YTNRÎdCO[8ll1l}Oe8     OVF:J !"#"$<"%&'()@*C+,e-ǫ.ǧ/01"2M3?4V5F67~8~9:~;~<J=C>P?l@wA%BC|DEF`6?? >BC@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@ O[@ U>@~=> 8(@C 8(~>@u?AvBC@CCB?8AA7Ctr'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6r'ImuOG?r9wm:uysNFrxE Fx&G svԮzrxz yxy PO OO?Y rr:Ֆ96.ÎYY?R4H|e)eHzbG74H|_94pDeepFb 4pD_]GFN~]v@(P@?:Y:?9FY9Rg:_ _׹ Y:9_ׅ _ Y+:+;69>;z E w|@6paW@|xOA6HAaYxx6Æ:>m9Y ЀϨ@@P@xY9?FmOxx>vEvzvֺv@Y Р&G A9|x??|@W@W@V@V@7æy O |@??|x_ׅ F~ƅ _ ԮzF Y @PAF_R_X???@@P FgRvvƹO?X?:?9>*:ֆNvٿр0 O P  YP@ Fy_  _׹  Y Wr:?OP @9 r'?*'X Y X sNsv6r9*9?r*xр㈀κ?x P@@O @ ( Ѐ@X@ (AW P|T |T ЀШ??9P@ @и pP0YP a|ȿO x (nTDž nGT pH?OP@ O@ P@@JЀؿРY ȿX@ pH?a|JY  @ P :?P@?пA@ne@nGe<Nv` O O@ r؀ O?пr@@O@ pH?P eHzepF؀?|x|@?@JJ?V@W@?>n~o~VBWBb |9bG7|_I_Gw7e<e==G]/]o.Ֆ96_G]/bG7_]b aa]/]_AOA؀?/::9PN>;vрٿvֺv/Y:YY9Yrr:No~]GvWB]P e<eWY:YP@P@P W@9؀P|PXϨ@:>/:G_G::o/w:_Pb bG7OP 6ֆvvvƹvƹ7Nv::GW@_A999@O PPO YP O O aPaPX?:6?A)@CCB?8AA7CW}@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB@CCB?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7C?8AA7CF==L>??F  !$#())-//33779;<<?AA@FFEEKKLL11++! \\[^_``M  ZX mnmoo;G$%m  IO7555zv&BD cln^lrlqq;<>qrSQ>== z;xoWY'&R75(:; m7854UV3n yryW'-[anop`\6_*08GUUVVxq$ss5SS f2pFi a0*q1^Q%b "y'#$K}mH<)  FggY k!j>k 00+}*--U,-!=c3 `%U (lT)D67\k 6jXY@3ACWEDCBE l1YX?=3~=?0  UUCYv~2)?-i[ZiF)5 6_II=`RB*`[:JH^_^"!"9:<KKIuIu^;N'CQV+d}}:TS  ,,x+^ r&!%L|lJ;(Eff[" i#h/i..1|033S2,#/bPab+&SC.x~R/99:;Wh:gZ[J2HOPwV''wv&~x/X 55q nn>o>{6m qt.>r$uu{Ds4p>?B{z{Es4#$f_G@aa1<8PNcd]  789QQOeOec8pM(DyoAeq||7*tnzsw]b #e!x&&"#"xxWJ|J|VVVfl#;G;G(    E flffX XX||Xj  ji/.Xj  /f =/.,*||*b(,,()+,)T,+,,T*,, fV|.;b2~' [_[_[_T$S+$TS$'~'  k~ ~kTS,'(Cjij333[63[56[j4iV 65445ijW|jiW   (V Gi?222GGDBG?2112^@^iBD?BA V@CDDCACABB??@D@k~k k0/XWXWWWW>}><2>}2><<Hu>/</=<<=     STTTH}BBBXXu}H}Y1^>,,hZYhZYhY E(E 44  555>^^(_QHHH<_Q_QA)>Z_ZZ__hZh(00/>.|9HJHt[]][]^]^\+]&!98!! ! 9989!!89;:EIEJEFJHJFtFGHFtGItG]:\BMM&MBPU*+UUc c c|)|)|*9\]STSRSRPTPTRP++*w*w**]]**q%% $ qqKY{ K{UUeUk$:I:I'Dek e eZ " Z {ZhZ{!"" g h-.h Z-"e-=.02 { {0a2./.2/2112RR2++20e"U.{a:O-}V__a*a_Q%RR%1B%Q}--}ww}+QR-.gfg999V9:V:7V8gfU7:878f{YhYgh'U!IfO?OOIIvINO?ONc@cfv&%vu"!U#$&##&%v%&uv$u$w}ww.- XmX4mm4  4p p   mm =z=3npz=<5===5<<43ppo -;s=-s=s #ep#prsyttytz=CnCCnnoX34X3pno=z=y^>AAz`y`zyyzoD#~("#Dq33"#"#roqqe^>(^Fll<ll~FF?;~`~``z`z0(~0~-;{.7PNdNababbc`cb\'7676777687OLPLKLPPNKMKddKNOMMdb7`mCLL'LCmxmxx@mddrdrorrpp{?{?{6`bs)strsrz@tz@rt@vv\\ F  !#$%#()*+)./01/34537879<=<?@AAC@EFGFEEKLMKLLQ1S+!WY [\]\_`ab`M  ZX mnopqo;Gu%my  IO55zv&BD cln^rlqq; <> qrSQ>==1 68z;xoWY'&NRS7Y5(:; m7854UVno rsyW'-[anop`\G2    !)*0*-./01q6789:;1^ABCDEF .nxSp p ˬ۾ܭվԭM?TM t½ ̺!"#q$d%q&m 'E( )>*z+F,C-;.v/D01<2>3st4uU5{s6us7Ds8KU9Ls:Js;փ<ӈ=҆>։?R@RA^BZ C^DVE=F>GHHAIIJ@KVLXMMNTOKPTQ!R7SaTJUV¶WXܺYZ[P\~]l^w_=`~aPblcwdOef̮ghijkslFm6n;o8p6q?r7sӄtFudvmw x8y?z?{|}~lܫՁFO ƈ %03*`<`I_`utԺF ]ce{ڗ/ii TYW^]\VYV Zշԫ[\SU?= *(+  ![JڝB?  !9ts%;"3# -F]QMY[ 3; .:;؄   ц \ _! #C؉Ulէܝ !"<#9$j%&2'()ڊ*(+&,-Ӆ.ކ/ӈ01f2e345[6׍7ܗ89:y;_<J=C>?ڂ@:ABZC:D9E\FGeHQIrJKLM3NrOsPYQ!RXSQTTUcVC~WXY$Z"[|~\ ])^_!`a}b[cdd1e8fESgOTh!i{TjqTklŲmnopqr;sBt?u%vw'xyz{ބ|މ}P~0@Ѓ@__V>2:[1b:pp^:%>_!!W>v^u""9bb6oϠڢϣڥũŪ7}4ЉϱCζɷ) ~?}'O?W'F';=ɋɈlpqhgh 8 7A$9.=8_6UG5>kD@4D0[;<YTNRÎdCO[8ll1l}Oe8     OVF:J !"#"$<"%&'()@*C+,e-ǫ.ǧ/01"2M3?4V5F67~8~9:~;~<J=C>P?l@wA%BC|DEF`6?? >g jRIFFWAVEfmt "V"Vdata~}voi^WUPT[]ds|xojmqrqqmd]\gpvxzzwpmjdUG<8=FLQTOF7-+5@JIGEGHNV]dfhhjeb\\_^]WPLIHMU_lz}|yupljilrw}~|zvv||{phimw|rbUPPVVQK@624=K[gie\WWV[a_TC1)&&-0486/'%$! %2CNT[_chq{~sppuvtsrt~xvyȾ¿ƽÿre]^cn}wqpuyxvurnppx~||}}vpligdbcb`ZNGFD=8:@HMMMKGFKW_daYPNQ^jsne]URRV\`XNHCCLVbf\M@2,1@B@<:7437AIMOMKRZcnldVIA<8=IW_egheVD937AMZa[PGCGNTZada\YZdjrxvqfYQMPX[\[RKJP`t¾|y{~xx}|xvz||{qllnqtyywtrsy~zvsnjhhhlopsvx{yvsporsuvvod^]_iw~ż~ytmnsyyla]_dffghlonuveZXY\ZK9)#(0?Q\``bjyypprrppoph_\XTY]bd\UPNPV\]VJ=69?IV_]YXW]adglqnid_XSMMTVV[[\^^ft~vcUHCHQZcfhmu¼ǽʿxruwx{||}wgXOOZgt||tmhigkoqnfZOKIJKQZhqstw|ysmf`_XPNJE@A=:9BJS[akpojffggedd^TI<2*! !&-259@IPYcszvpuz|xpmlhbadiknvzx|vroqz}zyz{nggsxx~xqkiknorzxtsqnnquzxutvz|}tjegks|~wrru}|wtqljmoorz{nbZTNPZiv~xpjimtxuniklihjszzwutux}uaRLMPNKGDCGOY_`^YUSZgoqpgYI802HOTTPE6*$"   1=A<1%$28:9:>HWhw~woosoh`WJ:, !'1=GNRPLJO\hpspos{n_^entuvsnedltww{zxupica_]\YWY]bkt~~xusx}|þ|pgitxsw~p]RNU]cge_XY]bemxwhcehnu|~}vmfekpy}zurty{~~oihiqwx{sknv}|~|~}{ttw{|~}|slhda`]`egowwwskfaZXWTRKIMQUXWUPKFKQVZ\XXX`kv~xplljif^ZUOQUVais|znaVXfv´vqruztcYRRQLD:2/4CWky~zrkec\WYZ^bcfhge^YYWXZSNONR\`db_b`WSNKPPU_gptsstswzoiaY\`fnrrsx|}xuvx|~{rdWVX_lsuupmrw}}tnqv|tkdfksy{z}|vux}ledfjruuqc\[clusoh_XVYbpxvk`TOOQSTOFA=:9BKUWRPV[\__`^[WXWPPRYdqvwne]WZgysd^dq~ysmf^XV]husf[VY`jooicZVV^numieeggecdeis}ĺ}xx{rfYQS^gvvi_]cehnrz}yvqqsvvpknsx{urppw}}½Ź{uru}{qkhiowz~~~|rihinvxxse][_jtz|vpg`ULIIGFCBGNUYWVV[eqx{rjd]\dkuzvne\]foy}yqhhlxsdTGBDIPSTWYboy|iXQQU[`ilbWKJR[eopkf_Y[`dltuqlbZUYcp{}}|qnokjlou}ó|¶ý~rlioxzsgYNFHScntpdSHCAB>4) !*39?DD=5.))/59=:1*(+6ES^b^XRSW]]UG9,&-7AFC7*" $)1;EPW\]\YTPKIF@5',=LYckqx}yiVIFP`ornhglvyrx̿{ut{¶Ȼtc^alz{olt|}qd[XWXWVURMMWeu}{ztoke``bhjjfglmkefnzž{uv}{squxul[H:/,-//)! (9Pewzmc_bgmuyyurv{}wsrsv{~tmlmryzvpjjjkjkntyz|~vl`Y\dkqqoh_XY`kt}vgXLIKQY`ccb_^`hqy}|slkpzzqln}|hURZerwvsjcbgr|xxrd\Z_ipwxwvx~|uooqu{vt||ywppomcXNKOUVXZZXXZ^epysqtx}~zy}~pklszw_PMUi}zutsvz{vjcb_]]Z\_`egffd]XROPOOKFCFHLOQMF;89>IRTQB44BXo~{qigo|uwz~|zjUE;8;DHGE?>?@FMQVTRLDABBBAAA@<4.+.35/& 2FXdmtz|xi\RLLTY]XVWZ_djmh`WPIA>>AA<659@HS[b`XSQVar||}}}žοsg`dn|ym^OIEFISgv}}{|yyuhYTU[ejlrsrqg^XRT\ep{}rs{~viVJGGReq|||xttvutv{~|wwxvtx||wtni`UG5% "06.( ->JVWMC==FOVWUQLFHLR\ad_[WW\hlsrooruz}}uqpsuqia[VW^kw~|ù¶yh]\gs~wojd_][ais||uqw{~uruzxqq{qkprsx~~zzz~~}wu{|ux}}sklv~vdVRQVbo{}ytlc^_[RL=3213>HOQOPV\fmv{xfR>/1EHIA91.0110128DQ]^Q>-!"*+#(,-.0568;979=DGE@:9732+   (:Q`jke`ZTQOMB6/+3?JPPNNT`tþȻofcfhqy~|y{vvupf_YQOV_p{ytiZPP[qystuwwxrkZKCBGR[YTC,"'6Lcptm`OKSgz~zyvslhiklzxsuwy}ƿ³z}ynggnkg]TLD?=BEEBABCHQX_eiigeegkqwz~~xtsv~~x{|{tsssspvu|~ytv~ykcb]al{{sqjmt}wgTLIMYluvmYHCCKf|~hVKCGIHB8& )+%#%5?FD@>==?EDB8.''# (2=GKJGBBHPYdljaSGDKT[XQE<@K]o}unigq||iYOHJRer{xrieagt|vronqwørjlzgYPR^irri^W[k||trppoibXTV`lw|vrs{½}Ǿxk`[`hrwppoqtyxspkknlhhf^SMMNU_iqtke_VMGGLQSMJEBGS^luy~uicn|x|r_YYZ_eed]ROU\j~|{}gSDCQ`jpodWLDJYhoshWB( &*,*)&+?OX^VE7)*;OXRC1$!2Ml{yrmlp{{th[Z`hkihgfho{zvru}ujbaiz~xqotƺøĽƼöĬ~o^QIDABL[fiinyvq{{rnr~~vsrt|xqqw}tmha_clx}xpmqwvpnnmottlffhjgb_\WSSX]]]YWWVW[dsym`XXap~wkbbkw{oimvqjjp{Ǹra[_ehcXG<9=FR^aa[VSV_hptrmfaaeg`TH@<>@EMW`hox|yxtqmiio~n\S[jx|vomwqXJHQas}~xqkmryzw|thcgs}{~{iWNQ[k{q_SQZgqtkWB34AKNNJC8,-2;GSWWMA99BJSPI=0 !(:MW]]_[_kxm]SQS[_ZOG;7=EXcidb`bdggmst{~zskaUKJLU\dhklsv|zwytsnidgddgptw{vtomnsuz}~~zvofddo|{paXWWYZ\`hknjoqu}xyw|}{tlbSI:7:FKQPMKGGJT_r|zy~squ|tf`bpyxʽvnkp|}|xsi`[SPKNU\\WRLKJS`pzxlXJBDO[jortxpeht}tk^WMGBIWcqssnjgjvz|rgTIHKZae]OB:>Kc}oZV]pjTKS`sx{sh[NNViw~vi^V_mzk\VVZ^`\VQLO[gxzvux{Ǽȭyrxzn]TS[jzuryodbhpsnf[SRZixs`OFFQ`lnf\TSX^gow}~ztnjecdgjlhb_agom`OC?I`}zlo|wptygYOOTX[_b`\UQVbt}xvuupic^]enx}|tjgkptwy{|zj]Y`rydQA>G]lpiccgs{ykYOJIHJE=3'"'3@GJJD>9>HVZYQE90/6EOUSNH@<:99=@BFIOOQTXVSSV\blwz|neeoƿȪýwwyqsȻqe[QIFHGACKYdd``_bgku{ncZWXYY^epvtpsz|xwzsf\SKFCDCHP[k{}sry}vngelruqg\XZamxytjbhr{wuusph\J6%",9ES]cfkq~zou~jTC@L[hpmcTB87664/)$%0=IUclojbaefikpnbOADP[dmrm`M>648;AGF@9568:@FINQRRU^eidVKCBMZjtqj^PGFN`rueXUb}Ͼžؼ­xwȺ|hjs~wgabffjji^QDDPanqneWMN[oqdZX\doxvrplqy~|p_NEB@DIJ=$.?FG@2)*7M^eaZKA:>FS[_VF906CXpy{|kYSQZiy|pikwxssvvphbZTSXdourlbYPRYfu{{rdVLKPX][M=2.0>SgsqeWIADLU^]N;')@Zqz{uha]cmy}|tjd_cq{eK4'-Bav~}ytt||ƴκ{heuлyhpwilzxbH1$%09=5- )BV[UG91:Mg|wjcftzvgK,(.,& 0=EDE=3),8J]iok[C0(-;FII@3,2F_v}jR9*+AM[fh_L5 #7M]\UPLKVevnV>/08AKRQMHFDKV`e_PD933:DRTJ=57FU`hif]RKM^ywwx{ziTE@Jauypo{wVA;>GNOKIIPZdq|y}unow}vx~~rbUPV^hsy}~~xn_W\h|þíǿwrz|ul_SMMOSOF=9831;GU`gbSGAI]q{dJ827AFB;22:DLONNJDA?DKT\cgimqzvneeehp{}ut|~rknwwfSC?Kc{xt~æeTR[gnni_UT]nyroqrnkhcdjupP:0.2AQ^^Q;$#9KUWWUQOOPOMHDA??GSWS?*!'8RnycUQWdq|zsldahy|rijtijº~rhkxunhkr|m][dq~{sqonqpsy{}}xqpwwk`[Y\afhfaYRLLRX[TB88AUjyȸƿo][j{|{{ytqqw~tjdgnttnd\VPPQW`kv{~|unidWI=3258GYiqqqvn\OIOZfu|pd]\etwh__cq{lgjs~yols~z}vgdabhlmosyżs_RR_q}|ycMA?GYmy|vnijkr{ymfmwqc[[_iqy}{y~qjhjpxzsniipyvmidb^\`dfmv}{o`QDDIUjw~vmfdhosphcZSQNQWY]ckt||j\^jqrfRD86=M_jnpjedco{s{~ulhic\SKIKOV_jt~ʾwtxwr}wz{|m]G;33;APbxvhgp~|og`ZY]gr{|zxu}}r`N>@K^mtuqolpu{onmptz}xm]SHBFShv|nZF=CQejcM;3:FNTJ<#2OckcNBBOe}kWJIHMTZYQC<=CP^ozyy±ŹҾpU@89F^u}zztfbiotwwtj`Z\fr|{tkd_bkwyk\NC;8:?CA=7304Ig~qot|{jWQYkǽwoszɽ~j^ZZ]_]YSPU^kuzsleeoxvmd_[Y\aca\RIFEM\ioolifeiq{|tjb[VST_ff`\XUVVUSRRT[aeghkmhdb^\\_bfaVF;68@JW_^TE849DPYYSH7-.7>A>95:I^yjZQP^p{vnbZX]k|yutyzx|ymegq|xy|}wiZVW_ospfWONUalrqlkoyȷƶӼžukjxŴwdX[gw}tl_TNNQYeijcWIIP\fpn]M=:@P`puocWOQ]juztj]V^ozl]]gt~~oaSMTaz~rpx~uqnkcZRE@@EPWXZTROPSY`a\[]`ejicWD2-07BB;3  #.782("#")7JZaTD4%)287+ +>LTY`ekihg^VUQRPGDDDFJHGC@DKSZbgmomgjqz|~re]`k||xw}κü|~ysgZMFGOYafiknle^UNLOQMJIP]o|shZTZiv|xmd^_gpy|th\UQPSUYYVUUZ_hu|wqty~xsuzoZG:5;GU\YMB?CRdvwuw}uaSSazpc`gorumbXQOQ[ht{~{{vsttqlilswxvrmjikr|zttx|wqmkmrxyvuyvlltytstwxwsqnjkowwkgiox}wohehkq}ŽzĻxnsƼ~n_N?7:CVl|~ytv|~|zyx~tkhfgfd``]bgif`ZQMOV^da[VRSZhv}x{tia_cdb\QIEDDIPTTRQU[cnwzvhYLGITckjcSD==>@ADDFGGLQU\__\UNF?86;BJOTX[\WSNF>83.($$')&""*3:?<67>FOV[_]WVWYXTOLD<869:642.-,.5CIRYXSF>@HS`hmgVE<<@LZcdZI8-/:EJKF;1# +168966:?GORRKILS^bfdcbekw}~ytmikrwqfXPQQPOLMNRZfptx~yl]LA?JYiywptλŸwkls|yrrwtpqw~}{|~qf\WYblsv}~{ulfben}wxreYNC==AI\lswyz|zn^Y_nyzujcdkszptwsrnifdfotsolirxz}}}umffpwyqov~ztqfa`cdb__bedaZURPU^ekjbYPIGONF;/+**38;4$'8N\YPKT^fjmj^N=5:BIV[^R>-#!'4FLE915=L`r}}vhXTQYdkjXE6(&+B]nvwpgXQU`mqjX>& ):LZ]^^`iu}~ugZPQZkuuj[NCAL\gljhefkqx~Ǽ¹ʼü¹¿Ⱦ¾ſ±z~~xofhfimmpojfbjv|}xrmimz~}vpi`]Z^krpnjkrrcZQIHPTWUOPORUVWVM@55AJU_gf^US^n~saXX_gpk`RFEJS^ehc\Y[fmt~zwy}t_OLQc{uqt~|somkov~{vyvodYOLR_gf_RGFOXbkjd]ar~yz¿ú~qicm{z|tqw~~{z|vjihqu{yvtttzuu|{~{rdTNNQT[XSJHLWkvzvorpkd_bdmpj]L<67=>91$  .981,06=FS^_O;&*0/./4:ANW^\XVWXWWXWOLLYlzpcWX[ciok[E3-1@LZ__UIFMbyuoosxyyrcP@8;M`wǹ}pjnx|xuwqhluzz~~m]NKNUakok_ZX\hsyrr~xkgs¸yzżzurqt|wnkpyveQE33=FQPE:0-7DOROME=45:CKU`jje]X^hrurswronjf^ZXTPLGFHNUdtƳ~~ϻƾżvbNFCHU]^WQMLJEEEDJMJG?4-$$),,-08><98;JZflifdhozqlsk]\_^WUTSTU\jx|vmbULN^t}yuu{}uqprvyyuoghov{ldfs~n^WX[]__`bfmoh[QJJTamvvqko~iN>9>FIC8-!(9P]bfffdbguvnqzzlXE::I[gmnnsz~}vohir}~÷ymgimpqnc^\Zdp~ÿнľyqkd_^bjwvqx{tph]SNLNRNC3#-AVitxwtqqy~wi`]dr}wymZH@EQcx~yvpeR<* $4Nm}jbdloj`WNGIQXblpqqsuupjgcZK>:=EMOLB6/5EXhptstw|{tj_TQXajkhaYSPS[hvvtx|{wrpqojgfggeegknu{y}wmhgkpy|na[`dd^[^aen||wnjhlt}}z~vlefp~ynaZYbr{vtsrolg^WX`ktzznbWNLQ[guzqjkqy~xnf`YOEFMSZaff`[VTVSRW`qýsnopqu~reWIA<<:967?IRX\]]\\^cghjoqojdelqsrne\QOVbiiaSC1),6ENQRRW[^cgjlkkr}oaSF?><70.5APbv|nd`dkqv{|}}z{{{||{||y{~Ŀwmktzz}~ʵξ}kWKKR\glg_VQQV\cikgbaaa`_`_\XOF:339FMHC:2,,9Petzx}ymc_dknwyqk[Vdvpa[\dlnfdXSS[lwuvuxypmlklrx|lga[dis}{{~þ̿xvrbcoz{l`cvpb`gqxwqou}{rnwr^MP[lyroh_cn|nfabkv|m`VQV^eknk_Y_rǵwz{qbTRZl}}vfYMGGMT]acffeeo{tunhehllqxvg^]du}hVNLYlx}l_RVlqe`fku}~zqheltw»{fTPNZhprniks}vqng`_XSOC<<:99@KOSONY_ckotvqg_ZVTW]a][XTTQWagge^XQOTcuzlb_^agnv|{wnggg`_[TF1)56-+;GFF?=ACHMLKGDCKT[ZQVWUXPE@623/+.-+0IYjohWH<14?Q]`WK@<9=DP^db\WPIIR]e^RIEIP]n|pd_blr|}sg][[`cgmqy¹ytw}hUR]ll]NE@DJKD=9:::=>CFDEA<5/49AB=5029DQ[egd_[_hqy~}~}~{wqpunbcitwuod]arȺĹžĿxpnrx~zrhbbfmu||rfbdks|{naYUVVUTQKFFGFCDAA@BHKMKHJQ_lqttpg^^iw~sfacjt|zrkf]Z\ckrxyvoidgnsneYPLQ\m}}rqynisjO@=Mcutg][nvsqkilptsuusnf]^gu}}}wuurk]OHIWcutjhmzvsw}yz}zzyxtkb^]``cfe_UQVajlknhebfjjhc]^_^XNJB;6DWouaVUf|tmr|~vv|»|uroliffhilpv{}q`L@:>FKQWWX[clnjhhb]^^YRI@CP_luvuxyviVIB?FQW`gcXQMRaryqnrvojuwlmztqrph^^es|yod^XSVUQRROHINYbfdZI<2-6BOPF3%$6KRUPEAHUfy|m]JBB=?DHKC3"'/9?EFDCELWZ^`a^ZZ^dpwujUE;55>EQ[[STXcnz{|~Ǽ¼˼·|rfYRSYk~xcK3$"&0ALJGCIR\`b]VPMOY^YVQLC::BLVYTH?76;@NVTPKEDIV^ghaVIDQddOEMev_PJTcpxse^\Z`it|sy»½sc_fsyqdXNKMONJB7*#%,;FJHC>707FT``YTME>5-+)%%(-0..-,,0:KSSOI?<>L_lqpe__al}zqvzpnvƾǽ}{vyufYUTOPRNLMKHGB?EJQ\bhprrqolidZJ8*" (.10-)*16894-($)3=>3%*@Zih`PC@CKT[__][]^^ZTMOLKPXhywpsy{kddoyzngeflrutuyvppsuz~vorvvxzskaX\ir{zyvvwicciu~ka_ixr[A4.4I[jsj_ZW]k}ypnq}}~Ǽ}{qhdgoy}¸vrx}nd`ds}r_L?:DXmyxrfWOKTfv|vj\J<::CLMJF@?BKYfnttme_[\bddaZYUH9+&*2=GRZ[\bjrurrromjjli^SIBCGN]effeinvvgWKMUaovyxpib^[\bca`bhnrv{~~xsmfa_ds{re]TNOXapz}}xwy|umnr{zvtqqzĴ±ɺweY[j~zv|tc[^gnoeXJ<:DYqyytlkux}hP@:ALXbis~o`WU]dlomga_blv{|{ugZPR^hosqmkr{x~}|}|uryĿ¹wvvuuw{}|zwuvy{{vslbUPR]nz~wiQ7%#*5=CD?7.('(*/7@GIKS\dc`]\YRPPROF?8/$ $'+5@IMONJGISctxokinwznW;%!+>QZUD0'=Q^_YMA71,-29BLWdmnjaZ[dq~vld^]ahid[SSYetzyļxz{sxüur{ra]cpqYKKR^jtuod_eu¾}ncdlv~}rgbcoxsu}ørknwyroptspkc^cmy~}yvuztcY[cmxyseREFUl}zxpdVM@5+# *:GH<+ %4>A;3.2D`zyiZMGMX_]RH>665:DGJLOX`iquv{|o]K?79?HU\\UMQ^qtqu~žvpln|}sppu|y~vt~tbXY`lz{vw{sc\ZZZTNJEMYcnu|~xxzwurnnmklibchpr^MOZfmlgd\MB;=FLSXTK;01AJT^`_YSS]myiVLLPZfd`XLGDMZgliZLA;?GRZ\VMA639L_kmib\[fwtjkv{ypnw|~yqhc[Y]elnlknorrtx}~{eN;05CXlrl`X[iwzj_YY[_YI8' #2>GSdwlUHMTVUNB50158CRepph]TSW`kuwobSLPbwzeQFG[uzfULRdyxrlo{|iXJB2(! (25:;;=<B@7* "*.36400.06;?B>70%%)18>>=9705;AEC?AADFEA<=>HV`hnomhe^WNIHF>:79;;=>GOU\elpmou{wqe[\`ejghgdacffhio~}{wz{~z}wuyyyyz||utw|yk_ctzsv||zxvyxwtstwxyz|yqldca`ehg`SKMX`gjlkf\YXXZVNHFGIMQTUV[[\^`dhhknrvxyyy{z|{rnpv}}{vlb`bkpme]TMNQVajv}ztghu~trv{{ui]UWZ^_]]XNA31C[o|}tj`]]dmpdWQQV\dinusoponkehmkfdjkrtmmeWKC@ITZ_aRB73=KOQSQQQOOVVWbnyxuux~|{|skieiosrl`SOT\kxysm^U\fѿurźο|rr|~²}}xy}}||{tkfba`dge[NDDKWcjnoolpw{uj]UT]gihe`\W[dqz|~z{}vtxxnc]ags~yxz|}xof]Z]dqy}yxy}{qhdefijkmi]QFA?CIKMLFB@DFHIHE?6-#$'+*$"#(+,1:EMMKHDEFFFILMJHINNJB>?@CGLSVUSNQRT_oļwx{ogflv}~}tomms{|m_YX`gkngZJ::DVdmnjecfox~{rlhc\TQOQV]bgkpvn^TPYhx}vqnkhpŵ|~vst}~xtv~y|scY[^dlopokiox}teN>5/5=GOQPHBBFSalrj_VRRZjy~zjWC54=JXbihhffjsz{~vkcc`ZQNLKKEEIQWXWRJEBEP\k{ø~|ʽz{|trwxpnmrutph^[Z\_gr|vk]Yakx|vnlr~|k_Y[ab`\VPKOQX_dkpj`XT\kxxnaXVYZZTKC?=BLWbihg`YY\bgkkjhiihfigeeccaZRNQ\gry~~uqpnh_WTSTV[_b`bir{}{|z|~zuoh_TNTX^bdhpsw|{yupopnljusnuƽyeYRRYfnuy}rg^XTMF<0,6CR\\SLF?AHOU]`^VE2("(0/*+AXn~ufVOJHLQValmqsu|~tgTD==GNTPE9.+6DQVVXYcgmslc]XQJEA>;3+()+)'%&(%! !*+,/8IY]WRJ>5336@BFED@:4+$!"(5=IR`lqsnljoqjZJ8+)2EU```ZTPOV_mu|ti\\g}y{|yohjsƻǵ|vy|}vjVF9527;AIQSSOKLPVbrx{vlfbbdfd_WME<<@HPVZ[__`k}weSCQanniklowzyscUF924=HPUUX^es~zx~ubROYnzhbcktwun_RIKT^jookddmz~}ļɻzroqpmnlmnpqyyrkfdefhlosuvx}}tmg_WSOIEIMbovvpfeigpzxkeceilf_TLDJU[[QA769FP\]^TMRY]bddc^QB9208=>=6112-)*)/4320,+-4=EHB:303:AKOQH=1*$*4CRWUG8-.6Lduwtlbcdkuzyth`\_bcfZNB8;FWgqnj^YXZ`emklhecip}zupprv||wqppv~~ywxz{ytu|zqo}¾pfaeoz|ofcdfjgbXOLR[_YK<1.,28@GPW\bfeda]XVW]a]UJ@9:ER\c_TLE>?CM\fhd\UQRX`gllhb^cp~tqxvmddit}}{y~~skighlu{|z{ztuytnqrvqlaTLGGIKLPPPSW]hnuwvoe^Y]gzwvx}}z~xk`XY]bmrpkghoxzi\XX]ggd`[_jxypf^WV[bfiifaZUV]gv|rjc`hs{~xwz~zxrjhb_`][^_ixzvx}}qe_cmxwiZQMOX]becabfs}vpnquwtmhefinqqsx}}|yvpf\XQHC;677=CDJORY\`gmpoicbdisuwwokeZWTPW_bfcZVWTVWRNH>;77>?CMWfntpkedfimnmlmpsrmifddgnrvpfa[^djs}̿ü¹|twmb`elqrj^NCACDGHDB<;>EKK@5(  %-042/05HTbhif_TF=9;;=:5.$"",9IU[]][Y\[][YTMJEHRbov{{zwrooqrqrqjc]\_gp~vihpy~uppw}wstxxwtlfdcemvzrmoqqoj^SNOSY^^YRJEBGLV\YQF?=AJYgppfXJABIW_\RE>>>?BJPTROMMNKGDBBA?;5/16@EDB9203EVkzyu{|usu~¿tllorw}xlcY[drncaku}}xrnljjnt{}sdXRT`nvmikoty}~vpnu~xy|}wwxyxvyÿznjgklmmkjkkg]SMJIHIJIHC<51027:<;>FKKG8*$$,4:;6/(&/67BP\istlbYYap}us{½ʽžĻ~tllnqurqolnuwxvrsx|zncZV\dpz||}|vutpqrpg\QHLVbpul\H85;HW^\RH?=ADLPSWURXX[[XURHC?:?HR_fklkg_[YVWWTSPNU_`]UPU]gmnleYLB>77823/,09AHMSSNEELU]`^TE9:H[ilfTB77BVcnutj^VXcjosogVFFMW`_ZSF<EJJLJLSagjmd[VLKLQ\hsohaZ]elqoed^ams{|ukjlooopmje\]`hsn^RHHKV_kmjgXNHBK]kyǿº|w|}{|ywsmllia[^bdeb]YRHHPWbinxzsgb[WW]agga]\^]_`aaa\_belonprsz~}tlfaYTPOSTVWZ[`ht||wrqsstvsjb\ZWXX]dgeba`_^^cfgkprvyx|~}zvttstsqnhddflpkffdiov~z}|rpzvhbcgpw~|xwzrhcaadhs}}½yqfdjnrwtqmjkmnkmonjmryxm]RLDBIMUY\ajnsv|~zsnhegiheacjt~~|wuqkmow~~|q`YSQW^lppnjgb\afotqkb[TQU`fiovy|zwzxoe^XSPKKPNKHJQX[XM>.##*3::42*'059987:;;88:=93./8ER\[RH<88DZn{~yl[QQZcijf]ODAGQZ_fhiiks~~oecadediqz|zyuvric_bipsnjfa``bgkt|}}{zuy|plq{|{vuyǾ̾}yvpmuxvv|zsqu}ztv}|o_K8,%#)6HRVTONRYdmvzxtqojfhlosstmaYRMJHJKQUXZ_mztpt|zogbcjvzy{qkkpv}zpe_cktwunbVONVbqwqeWPKMRU[cfilvxgZTTWXY\ahjhinzumls}|mhirz|ļ}|~qXMUhµ|srsw~|p`PIHHKLMQ[elpsrkZMITgxxjdejsvvpjc\WUTUV[`ktutroj^PHJV`iprmdXT\ksvxslaSLO]lspe]WUX]^[SI?BLZhszzvtv}}zvw{znbZWTPLFFOXbhlryudYTTWXYWURQPU]fqxytifcdo}{rou{vrttog`\Y\gx|vrtz|~~|xsnknpole^YQPSX\bikmnlilu~|~{xuvtkaZZclxzvoeYQRZftxoebbbilkfa[Z]fqz}|vqmkknw|uohdb``dkrx~|zxx{|}}zzticiwq^ST]govurpnqw{zneYTQWckqqi^WYajoqsspia\dq{xj^XVWXX\agpw{zrkgilnljhnv}ylbacgopnhgl|ugdglpwz{zngbdjxqd[XZaebXRKLNPZfourpnfXMEBGQ^m{~naTQNLV^dmwvkglxzzyvy|}ƻ¸Ǿ|pkfeglr|rjfgnvwyyxz{wh]TG?;DMVcjt}~ywvwuwscYX^djmkg__hyykcbbgmqqrwwj^WRQOPGCEN^efbadkrxvmd[VSQIE9.%!,4@FNQW]flie[XYaimhc_ZUSVZ``\VMD5,&(08BOXap~}}paVMPV`eda^]bipswz{wqf_\]_]adhmnu{rdXQOR[ht|yz|}{pmkpsstspnotz{{|}{wtruxԾwlieehmu{|{~vqmkmmlr|rhaciw}qpx}~xh\Yeysic`befjqy}{ulc\Z`ktzyzrmd]ZXZ[\^\YVZensrpoqu{{tlf`YZ[_cdegpxtkghnpolilmpsuqgZQNGB9.'$+/8CKMKKNQWZ[Q@.'*3=CGJIDHOX\XSRVew|l^VRT\hrvtpha^]`[WNEACHTaqxwtkc\WY]beikloottrpmiic_\YVQQSX_isxzzvrjc\UTUYdr~pieeged_XTVap~yqsx}}vfZPIDA@?AA?BDIPXgr{yl]SOOUY\flt{}|öxrul]MDELU_ir}wi]UPS\emt}|xvsrnjigcWOLNUbpy}xniiggflv|zvzzsnvǻxqptsoiiq|wkjmqtsoiaZUW]_\VPKB8."#'&" $"  );FE<0)%'+49:==>?CGGCA8302;CKNR[gwymlp~wqkbajzytqjd^[^`l~{zz{~|vutsrsw~uoy|vsngbYQLIP\hh^RF>?Mdy~|}{uttwurpld]TOSUYcmtxxxy|~zonqu|{y{}z{zy~ƴ}voqy{m`VV^gnsw{yy{{{vlbVLEFJNMKNUaltwpaY[hxtin~xi^XTU\isy~wqk`SLMOPU`mx}}tqvuhchvwlcZZ_dffeirvria\VROPUY`iopnjhihaVMC<;ALSURORXalw~{wyuniggjkjifehmv|yqdWSSWUI=2,.4CS][SF=86:EQVWTROE>=?DDFNX`chjkmnu|ysnh_XUSWcrvla\cpy}}~}}~yfWPNPXaca[X]acca[RJDBA?<94* )+%!&(,1/,&(4>B@>ABGQYbkqqjdbgrxy|wtv}{utsrqruvx~{pmmjhgipw~ɽǿ|rljjignvz{wqjb\_ix~|ti]TQNKKGA812;HU^_^]^eilnnkeachlg^ZXVRLNV_b^YRG:.+.1238CO]n}{rpomha\]amĿ|xsqqmjea^^_bgmh`YQQRNRXXVPHEFFGQZcd\UQUalz{qeafozod__^\_badcgq||u|~wuz~~yquy{}|~}}yyxvvxz~|ux~xf\[cjleYNGFHMPQLKGKT[aehie_XRQTY_aaZQG@=:951/-)+0:CJNPOG<335?FJGB=;>GXm~uoorzxmc_[XTUX\][`hsz|uqpry|qghlnqmic]\^ejiaSD82278954/+.5@JQU]dlptvwsjc`bgmsz{ypghloqqonjd[TRQOKIIKRX`fjhecfknt{|slhffiouunaVMMQY^^_^^_hv~uj[SPRW\\YQGCDN]mwzzsfb``gklqronorspf]SOQ[baZQMOQQSUY`dhpssqjimt|{si^WX^^`b``_^aa[SMSf|~xx~paZ^hu}{wrrtv||uomorsqkaYWZbnrlaUNMT]hnl`P=3/3@KSVSOHB@BHOTPKDCL^otnqvzype^XWZajpme`\^ejpx|{|zvx{xx}{vqlipy~xqokc]VPPOKMQ`r|vrmhecktvrkflyy{}Źǿ|sooppnnljkoxzwttw{~wojkpy|xtruslaXXalrtsokkmsz~ujb_cjry~}uqqvzxsi]RLMS\dimi`VSYerxwoeYTU\eigghjlmnnqppqv}yogejt|}z}vosy}{rgeksyyslecgmtz{uhZQQY^^ZQB0  +9CEBA@DKQTOF8* $+0/*# %&'(.2469/$!!*6<@;1'#%,6;>>;4+%%'.325685,"!)7JUZYUNLJHKQYZ^]XZdktumf`aeo~ufZW[aksuuogcahu~{}~~~{pbSPVajmie_XSSYbgossj^SNNPUY\\XUZahhilnok^UPMQV\\VOKOUYZWROLJGFGGLS\cdbfjs{~zpe\YY_gnssu{zttz|{|y~vjcelt}{j`^[`hr|n\RQS\cipw~nebhq{yi\PSdr}~xpgZQNPRWXTNGFJPUVUSRV`m|ug[SOMNU`lx{xw}|vuy}xxvuqnjfdbelvxqonnpplgdgnw~{wuuwupmorwwrljhfjnqprsrndbacdgnwyulb[SNO\lw{obWYcoy}}xqkitymny|svyx|xsqrx{qdYWZ[^^_[VV[emrsrpmmqureYPMMKKOW]dksvspoomjhkmlf\PE<668898752/.04=IYeqsohdfoz}zqib\^dovwupldacijf`\YXUU[__dmw{zy{}|yqkgbYUUZ_chlmkhiov~wnmt|z{vrsz{rjfglpqj_VRNOPPSV\es|vuttx~z{~~xtokn}|~vofcjw|naVNS^hpsoh`Z[elnleXTW]kwtng_^clu{|zrszvomntzvlc\[drĽ|}ʿrkls~ztx}|xy~~unfc``_\XTUTUQLE@>3,-4@FJLJEB@EIMT]hmjd^YSQ[gsulYG:63.6COVXWSONPV[`a`\Y\dszyvqlhjosqic\W\fu|k_XVUSX`cehehlq|{me`fqwyypghm~}v{n]V[blqfSD;>JWhrof_]kx}xrkhnwŸvurnnh]WVW_b_[UOPW`gf^TOQU]bfkgcWJ=4../1.#")189751134:CMWZUSRVanqpg]TPRVYWOB4))0;L_hkbWNQ]mž|ĽvolqzreXYewxzztu|}{Ľ|~~ztuty~}yvwz~yokdelq{}{{{riglv|qieipy~}ukc_bhorpkb]_h{~vu||wqons~ybN?:<@B@<2&#&0>@FGEHMPTY_cfgltwywvx{}{unbUIFOW^fhge^Z^aht{pklotz|ypgdhmtvvqopz}}~ɽŶ{|~tgXRONTWWWXQMIECB?;5)" &+-*$!!(2?FJHD8.&"/ARclj`WLIOXcieUG;>JVdnuqg__cinsof[RPXft{}ȷ»ҿ}utx~nc^akuxsh^]fxwpf]ZX_my|vbOFFO^ipoe[UQYhwvdP<.+,..($6>9.  +0/,)'+6GSX]][USZgosstrngdb_[YY^ejqy{zus}}{tlihfinw}zl]NIP_o~|x}|rmorqlh\OEDJ]lzpXSVexzpjpw{qfcjt||tlc\\bjf]SK@2)*5@IMQOKGLT]fsqggnppqt}zyûzpjjltƽ}xqmgcflmh_XMKMUcmqng`[ZaistnaO@75762&"** 4LTRF7.0;LYfmnfXD3.:JX]\L5#*4:80++06AM_t}k^Zh{}ľȻĵʼwrsurjb\ZWUURLGJS\`]\XQOID>=?EPVUMA98;CJSSOG;.$!)5AKMKJLRYacceceb`]ZWXSMA83269?DDDBBFQds~tnu}{ri_ZUTVZ]`\TKJNSY^d`UG:7GKKNXbhmu}|s`H8,+3BJU[ZWX[co{}}vmgho|~|x{}{wvtooou~}tdPG?BLXfs{zobY[ev|uwŹ¶ŲwdY\mw}~x|{piipwyq^OCAL^sqgennlgd`ZY^enqk`TLGEFGFARce[OHKXh{rcQD?@JV\[VNE@AHVbhljd^`cc]P@538ENQW\akwǿɾǷ¶nhrƨ{w{~ti`ak{xootwzugZMDFPg|sdYU[ckpmdTB5137>@DMSX]`gnstvtpqssustvx{ydH0$")-2- ';ISZ^_efdgjmpifecghghbVG8'#)0;AEG@8/"!)4:?B@=;@MbyqdZTSSW\UE7/4G[ryeVOT_kvztj_]brvaSKLU]dkeWI>=F[rpmt|}znbacjy~wy|}zk]WVYXZ[]aeo}˵|tosz{rmnt}ý~~Ļ|rszµ~tnhjlsux|}ume\[]dinpqx~ziWNOV]cc\TG@:58DWhrrmf`SHCCEFHGEBAIT]cbXH6*+>]z}tpjb`^ckx|~xuusw{~{{tstz~wlb^]^^]]YX\`bejohZG<;;=:794/.2:??@CC?=8.'!'-011,% &*'$#053,  +7@A:1,-,-3>IS^dks}{~Ŀƻ{qq{vheimjd]UV]dtsbYXYZYWSV[dnqk`USU[`gos{xuxpdfp|}|rigjnv}xqoswx{{yuswyxy|{qiis{rooqxwjZJBCQeuxlZJCL^r|mbafoz}wutoiir~~vquxngdkv~ujcadioqsuvx~qikw}iZQQ[otkp}nhq|xvqmmr{jVKMYmzuvtrohjt~r]U[o|tsyvonpqty~xokq|ob\aefiqvsg\XWX_qwxxpkrwl_[WV[`c^M;25>GOZ_XLHO`lptvtnms|}pggiq~|}{~zka\\bo}xoilszg[agmrx|kYF>GXiv{xn`VYajrnibVSV\aaVLB64668625=CILPUUTTOH<.#!&),+$$-9GSZ^dry|{uqsu{nklr~ufca_cjlkfdeea_`fkqvywsry~zuvxodXSWZ^j{ɻý}xzǿuknxɿwnjmt}ʾyi^WQONOKF@@EGGJNVY]behkkqw}|rfWJ=0*/8JZ_\OA>EQWVOG?=FRcv~wrk^RIB@BJWab\TJ<9EWfie``fnyscSLJLRVUUUURV`lw}~uaWXbs|{pdakxȽ{y|~ztos~ym`SI@945>DGJIGE?;::@HNW`c`XJCBESjt_SMMPUZ`houywtqot~zyvv{{wv~sjfo}uqruy~vsuǻ|n`YWW]enuz~teZRIKUbts`PR^jw~}s`LB?=@BFJLHFE>81257620005CRanx}{sf^YUSMGD>88=Ld{s`Y\erwwwspldbglnonnniflx}o\H::Lauwmksq^NEL[jw{udWMO^qvdUPWbihaUJB=ANZa]TKDBEMXcijimuϿ{vxmggn{~ʫ{tqv|sf_bjv|nglzϽwpqrw{zusx|snpy~yrj_VORX]`\VOMQXbkqtx||si]Y\djlllhdcdhf`XQOLPZfsxvomlpy|uty{qifkwıó¸zzuqqt{|zqeXSXes|~wuxsldWH:/.8I`qz{xrlklptw{zww|~tj`[RLGEDDFGKR^kx|xmc\WYbpwui]WXdzo_VYfwxnlosy{xrlmry~{{}~ztnklppkc^ZYZ`iu}{ulaXRQRPOJA619H\hnnfXH=9@IQUTKA=@JUUMA-(2980#+=O_nw~|qjmvzrcPA4'%,A?7*   &(',6BIKJMPXhuyp_PFDKXj~tcYTT\nȿȾȾ¾xwvtz~~{}xy{ustsniebemnootvwzwsz}vqnnvg_blwul`PB;89@LRQSQHDEOd{yj`^]`efjljcXV`r|qmotvqbO@BGPY[[_fs}vtw{~|{}ymfkq}{sojgf^acdhnsw~|sj`Z[enttrnjg]RMOU`mlbT?67?ObouvrqqrndZTRPT[\cjourl`WX]dqzpejrykgpzq_QIO^qynlq{wi\ND>AIVcd[OFDJQXXQC2+(4FVbeYOB=DLVbjlfWKEFQ`ih]K:.+2CU_]URPVal{lk|Ŀ˽Ǻrms˶xa_m}mT=7CUdmqqrvyj`]]YRLNT_lwyvrwysj]QFAAHYgv}|yx~}{swĿ{rnmr|~xvvxywnf]YWWUNF8*!!'19@KY^ZTMIILPURI?977536=K^s{z|zpaM>7=L\fc]PHHRbv{sjgn|~l]UMFDDFNUZ`dilliloptxtmaTGACIQYZUQOXjyg_eu{ȿvmpzzdTQU[_[QE7,*1;FLRW\bo{yh[TSW]_[QB93335AVfnpi`_\]a^YWWZchkjbVKEJXeqvulfkļuq{}z{znjnxm][g}Ⱥ}pjtuigv²qjhoxvmjq~»}{vw~}y}xfTHHQ_kqtjWC58GYisoaPGN[gldT?'':HMLD=:=FMRPF;.(-6AGG@8228CPWahmommic_cjorlc\RKQQW\`hvӿxvpklnwueUHDK[kx}wuw}zsnkinonmd\VTSX]``^\Yaec[QMJEDHRTNGEFHEABHS]fopmb\]bilu~{uv}ssǷ~}ĺϷ{}zy}zxobZ[^bhqusmfda\VW\djifb[X\cilmpokozq]G836?GMIB<8;CTiw{sbN:09Pnshaep|r`UNOR[fnmkksolq}~|rg]VU]hyȿǻxeVJDFJOQTWYZ_flmeXMCBFO[d`M5 ,870$!'--* '0.&!(.0/121-% $&)1;?>73/08BP\^VJ=67AVqwknra`tļʸżο|wtle^ZWZbdc[TQVaurbYWY_egbZTU_l~rgehkoroh[OGB;9<>CFKRUVX_kr|l[QRWadc]VQR[jz~xqqvzxsnjhegn{xnim{vlggjonklosz{tsw}lWILZmxkktt^OPXellf`VNLPXmm[PUk~gRHLbzmkw|peakxzmebj}}}{pggijifaa_\bmz~vu{z|yrsxth[QLQX^bfnvz{~ynaY_kxzob]fvϲȽźµvf[UTPLKKIDBDIMKLNPWY^egkkb^XPLGEFGIGB@CJNUZVPC99?IVadZH707EQ[XL9('9Qhuurkgirwzxqkhghnsztnqwzwmiqzvkcmv_G:7=HJF<1/17HV_aZSLDFLQYWJ;205:>GLOPIIJNXexre`^cgjj\J=:ALUX\^]`^[\ZZcq|kWIGLXfmni\TMObuwon~|smv|Ͼƺ|k`[\cow{ztnnoqtzuhdcjrurfVLJMPPQJE@BLZgs~pd^dlryvqdVPHA6.3:=5# &HbkfTC3/09@CGGEDDIV`ink`RHEO\dd`TJKZu}}xry}{y|vx̾{h^]`nlc`def[F:6DZs|xbC1.>SiqiS45O_bZE5*,5DR]`^VUY]c^\Z\dmwzwleahoxƺ~tv{xtnp}~~~nfgirvwz{}xwqnd]UQPXdq}vqjeeekjg_Z_jqrpcXLOYhrpk]MCEIQTPE7+*5EV\[NB<@Qdutm]Zdvr`TOQT[`ceiqz}zfWLF@5''@\rxp_MACScoqkY@# 0PmytaNDIZmyzmXF;ENVZZ[`jtrbYVUQQSSOJJPV\eltuspnqt~qiluukghimqsricXY`lylmormg]SPQ_qyqq}±{uqxſurwtcRGBHXjzvkedis~q`TMOX`c]L7$"/9?A=747@Qailg^SJFGKMKHC>739J^nttqeP@APbnsrpicfr}zqf]PGHQ]fjkmov~xgbk~wpv}vmeckyyeWSSWVTQG;-*4AO_lwytmhfgdcccdaba]ZVWW\fszspyq_WY`jtzxwvsh`[am|yzgWIKTfsu[>17M^r{u`D22BR[TK7'1EX^bZOGFRkykcm|jSIKRU^bc_Z_i{yvwtqie]ULD@=7115=IZhrzzuv{|zvvz~vpntysstwz{rnty~{xqjb[[adcedcaabcbYSSY\][^dgdZVKIN`xydLM^u~eVXj|wsvwtveWW[m}~tqxzlehr}not~vps}Ƚxvlkt{~vjaaisy~{oc^abc^XTG831584/3412;JX[TOH=.#".8?AGKC>=EMSVQKEDCHFDB>;756>>=>CKRVY]^`bnx|wsstzyyvrfWNKT\eioic`bnztr~u\KK]xld_f{tt}|xulbUZ\begeb[NNT_nrnp{skjuzyjhv~aMLazjNBEO]gmbSJMTckr}|rjkxxmlpvw~ǽǼȽų׿ȶͳzl]WTTLA3(*4=GMSYUZ\ab[K<46DJRU`de`UQR^owi]`bd`_TC2$&0COZUK;6:H`lumh]^ckwq`URUbm|~~|{|zz~~{pmu{zf[\fuscYW\_`^[TLA<;;=AHWiquy{zsjeb`]XRKIFCBCIQ[dlttngiryrmkmqw{ytnmqzyhacjrvzyrg`afmnnhb_[adcUA018>@?>=::CMSQNSYcjyxokdeef`\THA=>ELP`grywvqpmmox|{|{||~siopvz}~y}{}rktyqf]h||ɿȸ|poqyt`QOXj~wnsy}ugTG>8ARgpqhfb]ZW[\_akptk_VPQPVTRLGGJS]fcaYY]hrtwvtppjbWQUbmtynaPGFO[abXMA?H[nubZV[eig`ZQLFHEDGHLLNQWXWRPNOUZilmcSA2("" !&,;@>56=PdvxsmspplbZRNQTKB23=M\ennohbejputkeXQKRbqoaagxzux~~wrkimw}|tsxwkbWMB?:7332598930/9DE@859BGTYYUI@;@CJQY^^UIE@IXopeaikme`WRZapz|ujhnxqeVW_nwtkgbaa_c\YPJHQ^gfWL?;58;?>4*!3GZ]ZTOTYgnnbVMMYiz~mYDAKYlvyslegkqx~p^QIIP[_b]XV]fpy~{zsqmmorw|ǿ̻ȽnXKLOYcq{wvmjgszlka\OG?5657;AIZeoqus`XZhptnlcbhq}ztd\VXX[WSUVefe[TPVbo}yl_\\[abdbnxykc_m{vnouyf[QSYfpwumc_rwuztfYUWXWNIELYnykcZVROOPV][XUV\bgijs|ywwy¾ytonr~zj_XWXXYVTTV`kqupmiYPA=522674+%$"/311./.126200/2.* #3ES^cgb`]emy{}|uw˸{|~vrt̽xrrruuqrlmkc\VX^fg`TNGLV`mok\TJINXgv}|tg_]cgli[O?207CNMHA513CXotfZWdu{ynd[WVZ_`__][]]bmw~pjjr{ɾǹλЬĻʹm^PT`uoieisw|wyrlefoxxm\D6,7JaeYNBAAGS\VE0&(,*)4>:536;;=JVbinrvz}yl[NF@FTajic_\ZZY[WWQONIHFLTY[aa^WUZblid[PIEFQ_fc^ad`WQRZbiwwtsvwxvl^VQOYftwtnox}ysrrr}˼}zzyz~pldfkvuqlklqzyumsv}ytnbYQ\ertsokb\bo}wrhc\[WRPRV[WPOE7$!*5=CFLMVU]\TLADLYYPC1!(:??:9AGS\kv{tk^OGGOV`dd]VQYgux|þñ̻ysolked_[[[do|zswyyxwzzxtpcVPWdknmrrqplqpqpxsk_XQUaoyvnhddilsqh_TNFGGHIOUSPD@:DNX^et|yn`RJEFIKB706?HT`jllfeYNEDJTep{z~yssstmg_\Y]dqz|{xyvti`UPLJF;51478;@@AEFOSZUQK@;7:9:4/*,,189922.,*(+18;AEIHD>1-2;KSK;* 2KbpiZPHDEN[b`UKLSZ^]^\VQOQTWY\ZX\^\\belooosqjegxwrsx|rhcdltyuuwtldjovtvwtrrridbns{~wkku~ôskdfgadi|xiehs|zsstwxuvttmfenvzyurje`adbZROLQZgt{th\W]l~|rgcdhosqpqunaUSR\grungdipx}}rnnz|qigjlle`RHA?FNY[]SG?CFLYfolkehnxtaJCER[be`W@0&/9ADGIFB8524.-,*)!&.-#$+>Obfhhejkw~|na]dhmhc\VOPWk}xqqu|~xyyqlloszzxz}{n`VOPZlq_SLQbv}~|wtzzuu}~xyŽ~yv{{}x~vqmomnfc]X\Zco~~}yy|||x{ursrutwx|zz{}ynhivȿxijmv~{y{sxzy}ylhow|{vna[`k|rbYX^bhheXL=;?M]ekd^Z[crqa\]iu~o]PGRas~ypbhp|{ne]XTZ\bjfdUKCDKYis~~{ttqxy{wlc[YZ_dkmnnklp{vvrtoqwxwqkghinsxwf^Y^hjd_UW\fqsv~|{ulaYY[YVSPKJHFHHOaoqWD>CSdosjaYYat|pjktpe]\bmvvvzqnqrda_aahe`[UWX_^][^`_WST[tsfcgosmfRD73;L^ouoe\X\^edbYRQR_ow_IEKU_hdYMEGQ[[WMIKS[c`WNDCHZkzvspz|wrmsxwqaWKLQbqxqfZH=4?Mdxwpimvʹ|wu·Ǵ{iXHCDTm~mcjypjpwzoe\WRND6*'*27?GLH>2($%)/33459?JS^cb[OHKYl}}rf__ejle\N;5;Lat~~{rg_]WYZclmg_Z[bgi^Q@9?Lbmrf[V]gvqgjpxtfSJCI]t~iVEBFR\^]YXPK<3-,--109@LWa]SD68D_voZMGJGHDB>;;;DITUYTJ@?Oh~nn|mfemrvvoi\WZhv{iek~|`K@L`w{wt}umq|z_MK]wxomq}r`UU_rzzq_NCEO]kqmeZWbwͽwv|~yĻ{x|sqr}xcP>9E`}{unipuyypg[XVYcli_MDEGSXdheZQMR]dq{urosttj^UOLO[fkgaVLFJZjvxnZJ??IXhg[F4#"0@HF8')AYkssngb_hsyui]VSSW_ike^XWX_kxyodbjxxljkuqg_`gmtqnghsysms~s_KFGVk}spq}cNBHVa]MACTimTBIOM=))Bf}mdjto]\h~pks~ĵuouįzy~|}|mfm~sfdkv{l^Z[aefbVF6.+9K_geT>6;Piu\K>=F[gibZWXcoqhgn{|zſȵ~z{ycROP\hx|kYKJKROQI?75@JURLA6'#$(1/+ %4ANUZTOIJOU\YP<."!%0M^igYK>7548841/6CQVUUQPV_jm`PBPXP:(IaidRA6;I[iqsk^X\^_[eluwtqkoty~oc__djhkg`]NB;8=LU]`c\W^f|tienz|spsuvqmkiirn\NQ[gnjaURYstupqtz~tmlu{oheit{gVNOXdmh\MQgÿzkkq}~urw}neiuufZSYdmsqiYH;30*/>PYQ<4DF;-!$2@GD4"&3893026Ql~r^J6,6JanmaP<-,2>MY[Q?57CYlwyqf^]fu~yvwz{zwvrlinw{sonkf^RG:24=JV`efedbckuyj`ZXXVUTTW]emstpopqsvy{~voiikkdZQLOWagf^US\gt~m_]agjkgdfkoqsokkrɷʺr\T`wracv|v~½zphjpz|{}m[OHHMTUL;0+/7>FLNPTUY]\VMHIGC7& )9EPPNNPUWO@3+),.-.-.058:84.-0258:>AA?<87@MY]WME?@J\ltoaRJLUh|}wxz{yw}xibcrywud]eu|kacmtyxoeYW_p|me``ba_bioojfgo|skgimlhd`^\`djpssuxzphjt{yqry}j[RR\n{ypljuʺ~x~{une[YWUXZ[XL9-0?P\dhgaZXXVSPLIA7+# +=Tky|rf`]\abhlh\PIN[mzuaPP]o{~}wrsv{xqpoqt}zldbj}kVMWozpmwwhfst[R\lvxudP>3:N`nuocYWaqq_Z`lywrs{ƽĸyuųŶ{hRFJXiy~rou}j]XYaluraK<=JZfoofWKJScvhPEIVhyzmcadgjkjaO<338;>9/ !2BNX[SG;6303;@?9/(%"!#%  ,8>BKUUI7,,05;546?Peu~{sjaYSPPSQI?4-.2@Zr|yuzŻŹüwk_\g|yy}kehlv~xkabq|qry~xsqru{Ƽźʱsmsxsry|hUH@>AGMRUW\bmx~yqh`\[VJ;.,6FLI?3)*9N\\RHCAHT[\SG=HNMOQT\cjnsmaUG>;5,  2BJMVdwslghc]TE;2/8J\ltwrmiqo_[\elpfUBFEED@FOWbidYF:;>@>71+" "+3:FOSUQH;,&,2:;:>;9>@IWcnx|{wsv}yhURV\be^XPFDN\m~zvxzywwpeYSV_lxv~}y{rstd[`iy|rmqtz}vh\VX^dd_VJC:77983+)1?HORMMOQOI?976:ACGE>6* !'+38?DJNRUYWUU[^aijjjjpux~~{pjknpkjlomkmxrovyrkkp{xkgir|ƽ{uu~~lbfuxmcejgfiijnt||ibgpv{{rdXT\gwſ­~zz~~oc^bmx|ʼ~{usru{|}n\NF@8.)%*7CSbimopsvxyuja^]_^cf^TF950))+08>>?80,&!%*/7>DLUTMC:-#$1>EJIJNWchki[MB>?@A;/-47642;Pgx|wsou{wwyvnmnsz|}yvqld^]\_cox|sog_^adb_[VVW]hnrolkmnuv{|~yqsxsYOTcn|~u]C+"/G`mrnnoxwnlp}{vw~öûvl`XQMNKF;2+(-4>KV\_afcZJ?>FT`jqlcTD:434:?A<5*"  "!#$,5>GLPNIHGKOU`iorqofZMCBKZed\L7.09;960+',:JX_]^aipqojgfdd`\[Y\dr~vnefipv{~~tjlvwx¾Ⱦļzwwwz~tmpv~tnnqvtngb``chr}~yvx}wbOB?HS^cc[L@@HWcpwuofbgnv{smjknu|}pbULHJRTK?54258<>@>==HS\]YUSTVZZWRK?<>DHHID4& &3@ILKC<?979;<@FMRRPLE>:;BGMRX\_emt}|zwvx~zwwy}~yvvusx|xz{}{phinqlaTE726CQYXTOJLOU^irrlaTHBBNX\YJ:, #.5568>GNQRPMKJEFJPTX\\XSSW\]]XRSSXclw{umheguwkeekry}xmeaeuľ˾ÿzpgbcjpw{}zssx|yxwwz|}{uldYPR_p}xkfbainrqlkgb^\]cirutnlsy}}qbN>;AJPTWX\ftqe\\enuskd[PLQYbiookaXTX]bgnv}~zunbYY\]UG=?@JU^fhggmnokaWTPMQRKHC@DGHHJKKHD>@A@DM\gf[RMKJOSLE8+,28CIMONMLIC?>CJS[bn|zqjga^_`a^WPQYdqxrfUGGP^nwvpicbk{saY]kzylgo~~z{ytqmpxwjhrµq`Zas~xpqzurt|xgXGFP`r|uoje_XSSQQV_fhaUOMMWfoqiXMKSbv{vw{xriXG@?FT`d\G-%9RailffgjhcVH>3*!!+5:BNW\eluxi`^`n|{cNFGLS_imjhdegpw~~{~}kRCFWlvkl{|x|~}|}{vpmrv{~}vnjfe^UQQS[bmzxw|sdYU_r~rhgnvĹ~|~Ļ~ytrqnmpruvuutttsrqnnmotzysrqqssrwvsvwvvtprqnolry{z z y k y B y w z Bz y v y ly Ty M y NE Iy Iy Uy y y N y dy IXT} y ETPy Ly @y IIhy 8y Oy H y pE }y Py x IUZ EZ Y y u z bIc y Ly Z y ~M TYz [y c M a y s y y d y Jy y z [M NE &z e y { y P M DM R y J Tu TcT[N FTdB Cy ]U]N Zy y NB y e z rN E z .B y sTc N ez `y JUWy SUYM [M cM Ixy LB B IB y |TVM tIBy jZ \ y my RZ Q y F Tky @J y TF M vy FTLToy  y ny H UCy BZ N EB y wy kM hIgJ oTMM rTWB y GN My ETv y hy CIiB $TKy Cy NZ My UTOM fz cTM n y m Z fz dUny OB 9y f N WUliN RZ xUiB yJ zZ ^T_Imp Uly HIZIkz Qly tUkM vz mM RTPy CZ 1E HTLVTVZ `z cS^ y ZN eZ Qy My [B *Z ^IXN IB [y ATxB >Twy A IO y DB {y ~ B II M [ y jB vZ h y JB T y r y b B B M _M N N fN FN ry E M ^Z yTm N ay z B XB SZ QI[N MTby n S@y G M jy -Jy AaP iy qN NM x B NGB yT{z \M }y ry AUfM | TgB JN VB tCy {B z ~ N ^y 6M ]B tN gM ZN SB B eM s Z GTYB XN pTNy }M `B EeM nB PfcB p J  B _N obP iDdfM  P kB P jP hA yB P iwB B I B GB \B zH k@^y vB YB MB GU}t B vB Ao S{oP n_Z ~TvTcB [M pN q z kZ Uy GB yuTK B ]N gZ ey Ry HULUMy Sk M Jy t T~M KB 6^y Ky f P cTsy GB bB Ey l B xJN sB dN iB 0M o y vC H]N gA ON DUgb B eN oZ _M Zy vS] TKN mSb B N RN sB :Z EB uN zTFCN wH xzH vB Fg M QP |`M G TPy \z {qz FB CN hy Dy CM qy }N bB uN ^C HbC H^N _J xKN xLSpM uJ nTbB OB \UEB H ~N LH GN lN `B ^B zZ _N qUKS@UJB sB NM bB aZ IT!y iB nM cIi B uTLTdN sly Dy bB uB R B {eB Ty KTXB P B gMB 9Tsg ULM dB Z I{ UIZ Q y uB N B M TT B tM YN ~Z iB WB 9H dy oB HB %CB H M gK N TzN PTey jTKTwM XnB ] H {~ B \ UHSATDUGT`M aH `B CB MB \B GN 4qM dz uB ^ B [ TOS{ST}dB GB sz UB TB _ B *M }HJ lIXxB + B +h B t$P u z Hz q P f B M \B B B 9 j fB }dB P sP dB Vy DA jN iP oP lP ~P eP gP fP wP pP qP rP sN jy JJ AB yM P uP sP mP tP vB HP ndP nB O B `y T B tB ]B Q B gZ 1B YB nP nP n$B HP nJz U P JP xy !jy [P ixP iyUPGmTSTC_]y -{klnopqghD$iG`0S MI0#S V0^Bi<hkaS b b+Oo,k}w(h c_+z m+@ zWPGF~W DU Q$Ee!Y jl  wk D~ P i]8k p ybF03h V|~0ypL+v |+L IpVSd+R sl  A@Np \n i!W w!r D|Q`d`@D{ _mRAq@@@Nl\Q Yja bCaqel V{Z dz qY ~ @KKY bj Px\ F b S l` |nJ |3H R VQcZ q |}!X K &W+@ eg q+P ~Y J BW rg+c v z CoP!B ^[ jcwl  FLSn a1nC|oJNYO h|t` B=f OC\gjRz^H T V2i sc+K VQcl  qr ~2] qJp k{ Hfbtn BIPY ^Z k ixCF fTAbCq @ dM j[P il  vQ Cw P e]Wk yf MW  b Z oo |e H@VvexL osWb+{p|~LW ZZ gm  t~AlOn  ^xDkh zl  IdVb dC p+} }W JR\X\ tl @OcN N qp ~+FK R  Y|f D uh B+M Op\ L k+c x+k EBRz aOncG |sHfWX ez rl   r K@Xef Wu t Fq R0Jk_W JCXE f\sV  AL Nz Z4pgyW { e+DrU  @+MU[D i\]v2dcS` v} Ce PD ]Uj_ xZ Eh Rt _Wlbzp HT T]aR  o{ |A Io Uj afPSn O A 1 N A  [ f h Bw CE S S ^  _ y l y  y I n iF K o mo b \ { i l  v l  C ^ P f ] w  j \w  F WS B a \n 1a | l  I @ U S b ` o V| Y K ZpX D  H Z U _ b v o o |  I M V }c l  q @~ D M +@Z R  h  u  B s O S \ | j Sw l E _S Sa U p R} g K n X \ e t r C Y M \ Z _ f M r C l  M ~Z ~z h Au WD ` R o _ n l R  y u F i T Na Rp e ~ R K wX )Z g b q | ~ qK ^ Y l  e +u q g l  M CY @l  g l  s l   J K yW | e Nr } @ e O ~\ |  l L x h E | R D ^ h k Py M G \ T d a An J | F H a U O b r o A  | Q I +p V R c K p m} UK U Y P f R  s P@ +| N +N [ R h Pt O B +z O g\ uj bx } F r  T Da z o v | l  I SU F c Xq 3 WM O[ \i 'l  x B D ]ZQ rok Sl Z Fg ^ vu @E`k X K Vm W X d [ q M ~ K K R X x e Er k @  M ~ Z s g ~P t T B R  N Q [ ZVh i v )[ C }P W _ D l l y xnG nU +O c } q h  ~ xK z  Y Qf J t a A R N k \ t i o v a C zz P [n ] D k n x  E S R \~ _ j k ]|x _a F LR D ` g  m V z l  F QR bM ` B m Uz nH @V Y e dW r c@ ea N b Z n g f] t D A H wN iW Ee SY`KoR}a  Kn X{W ekB r @ G NC ]@jIyx{  HQ Ua cTQqDJ Mn  [`g8uXCB Qb^` loWyl|G] Uq|b_p O  ~R  Kp Xu|evM s}h @} MDZ lh Z wDDxp RD _pH l}S y|FDTa bEoe}Z L@YSgT u^B+o Pm@ ]wE jyD w{ D~} Q.D^&l| z HG|V~FdQseA^Orz ]Z jBvU D QPB asvnWD|rRJq X ueBsy A| Nl  [ol  hd uVbB|PsC^.V l ysFsTl  bY of {wJ I<y U[ bh  oA  |t HD TJ aS mf zjQ ICVf e{ 'rsYW gf tQUCZQC`b ny  {ZUG| Up bT n| {a H\ Ti `l  m@zwzH@CVU d0T Vq~ G| TN `DumW  {}a GHR T`yb^} pB }CJ s XJ h'VuXCj Qy  ^p k!j wJDkC RL ^V m s zU GZTBbW  qvX ~Wa Kd Yr fxsS A C N^ Zagyvs DisQ`x_WQ mC~zsxb FQ Sl aWR m^{PIn  WbX cG  pS }}J JrCWW eoQrQAP OI[ i g v@CKn  Sc `B m J ztG+M Ui ck p)\| q KPfXQR fn s{  @@M+s] F  k+u x A D p QVP ^{V k+x xy  EO| Ro _ o k@w.a E+{ SVY `i m.bzlHh VCcR  qsj~Ih O+w ]u |j+y fB sk @p MN Zy gg sQ @Z MpYn i HvE DR QHD_Ha  m& zFJ GGdTTb\pDC~{PLk h\HgDRhk f[S2EInTUw_ LFYEy  g.R spR A+K  OJ] \+y iMn vCCR QRl  _p kUCx }FXCCeQP ` [5lR ah o |bID WcV d+Q p+@  ~hE Kn Xo e1rp Au NJ \ Gia  x IE F TU a>Ym >~{+tyV mGp t~ AqOR  ^+N  kmx+z F|  S ]`G pa |C gH} o1 {HCGHl UDc_  qO ~C J|Wxen s| @Hp M8Z1p hU uwp BM OjD\\ja xpDFR T]ba p|~ V LR `Y_y JH S V Q cX py }D JxWDexJ spa @Y Nw [xP hFwH Eh Qg _R  lo xzEL SD `I mR  zG FD SU `bm|{2g CI| LS _Y[ xTyD]R| `R  mI z|HA  VR bt pf }J L`  X'f eY tx@|N`_ \c i`DvR DgRVc`gn{q |D HiUU c|py~a Lp YZ fWs|ACOx ]w jxwR Ea  SH _h kCxz F} U p  bz o1|%o KnW Y el  ry ~@Njz \Z V\ c1p_wMi['CiF  w9"DZf$Nt#O CO OQ\h jiZ v"D CmP ^"R  kyw xN Eo Rx _J lh  {<|H_ Vj dkql m LnYTgR  u\ BdQ  OR \S ic  u\ Br  O u\&n jf wF DQ Qv^l  ld x` EiSj a)b n)l  {b G uT K~ix kg\  Rc_b m%d zt  G^S~ a'J rza ~R  KZ XUeZ s @o NR  Zn  fJ r\ n  K N W&b d@ qa bLe  ZX g6R  tg @)sM+s  [ m ho upBp PN ]vjC xA F!D T)Sa+t qn  ~a JpXd qfFJ WFb d E  pJ}D KW XA  er S @1L| [shy vc CQfQO _Plja zj` H~ Ua b U o B  |JpIst ysiJxk[xF ixA wI Ed  Rbn  _^ lDzAH V} czpfHy ee rX@o Nz \^ j s xa  EC Qn  ^w jb x~ Ds Q%n _l  ly ya FPTH bBoA}UKu Y{ f|lsZQCT_QR _Y lQby3GCU }  cBpn  ~x KyXZB fBrV@ [Nv lE }r Jf V$T e] rfxh vn  g'W t'`B'B P'W ]'f j't w'|~D' YS'=l'Y z'y F'\ S'3_'\m'J {'m H'QU'Y d'r q'|A'SO'`R ^'jR l'~z'|n  H'NT'`h d'xn  q'L  ~'M J'`iW'`Xe'tC s'@'n|N'a  \'fi'D  w' { D' bQ' a'ZM n'gJ {'&o H'}] T'}La' Y o'}Y |'] I'_ V' ~ b'V m'\ z'^ G'DT'Yh  b'X o' `  |' r  I'p  V'[ c'p p'm }'[ J'fah W'Q 2NfM2LJ [2`_ g2J F<c TR<~E f<B s< K  @<z M<Ci Z<@ f<BQ t<E@<J Q<K ^<\ k<w_ x<#wWFRU eFB rFnQ  F/Q LF?Q XF0v fFi  rF Fa  LFJ YF@ eFF qFm ~F LF:Q YFugFJ vFR AF;q OFD[F 6ViFZ FE MF T ZF#A fF2X ]sFpPF(n  ^F$U kFR wF"xEFa  SFQ`F lnFR }F!R  KF"W  WFDdF6D rFx FF LF8P YFW eF"q sF]F9}MFr [FHkgFa RF{ _F [lF~G {F3J HF jTF[E cF4J pFa }FC KFq YF{ fFa  sF` @Fu MFW  ZFW gFDsF j AFd NFyvZFythF`a vFA DF [ QF5| ^Fh jFN wFS  DF` QFZ ^FB  kF gxFw  FF{J SFq  `FA^ mFG yF&UFFRuTF~F cF noF-| ~F2L  KFB XF l  eFJ rFlF&NMF(a [F\ gF] tFA BFx pNF I~F7n  MF]YF+n  gFR tFa BFUJ OF,n  \F5FiF9m xF H EFJ RFa _F2JnFv |FJ IFn  VFa cFJpF1J ~FWt JFY WF E  eFr rF@v F G  KF5bXF2O}fFa cFo qFD~F.@LFp \F]:iFz2cFBwUFj %LG E:qG _RkG+sv}G@sGa*9sG+O YlGx.EGO8sG XykGT 7dGrR[GfmG TlG wx@G fpxG*>2hG)>5ZG7[IH RRI\tdI(SXI|xkI\2cIqSUI*QhI OeyI QM^IaHkIBbsIxGUI{f\IwXBI)} UZICcoI YRIcJ,kIC SWIJRjI tI|IJ |H5EIGLzI+WeFIr+ akI)mwLIA3CJhgvJM]JZPjJ]KzJN)WEJ+xn\J\TJJd^JGO]J{aglJzBSJ iMUJC|9XbJz^zJ_9XJsMVQJ`tgJh H[JqFcJNRiJtf{J_aJ JFA@J IFKX[OKzjKD,dKW JPKni ZKDHCKb WKKxJbKoHlKPUtKU XIK+fe aKuxFK m@~KUE~K_ :CK+Bx}K P `uKl8UK%^MKMtkK^i_KgVHKbH^KC%fKOKK xZK O vRKF]HK+VL eK*$2qK \\cK2HKTsGLGgzLikaL}hLL+ V tL wQJLUi[L[ LDLP FPL zsVL {ILKgDLhVkL]WAL h XLel WLi5CL\;xL ^hsLkw[LxuURL d g gL)VINMC:WM$QMtV uM @@KM$$KM l7oM}+fMLXQMgZiM\O CM{Y^ RMv-pM+]@]MM~ ]M U[M_{pM@PkMV${MV 4_M+kOSMa [HbMv3jMF|]M)N ;kM+X  fMX  sM n @MUW MMIX  YM_eMADM[X  bMX  oM)(|M[dMyX BM,X  PMuX  \MP'hM o OM@\M)X  \MUD iM:X  vMUR  BMX  OME?\MCH[MCX  cMUa  oMkX  |M{"IMO kM6,xMIC#dMA GMD%SMLX  xM$DMR hMa  vMlX  CM0PM P @M l  MMNZMy/hMVX  WMX cM%5qMn LfMZX  rMsP~Mz \jNMakM]X  zMm!FM`X  gMX  tM 2AM^X  sM Z @MX  ^MCRjMf_h |MX dX j-rXNj_Xkn  |Xj-HXmC#uXnX  XXf\CdXH  gX g@tXYX  tXw AXdV  NXxX  [X)[gXwX  FXzRX&X  `XmX%X  JXGWXm,uX~*aX|~XCLXz \X X  lX X  xX nCDXM[GXX bXn  pXG}X @KX RhKXX  sXX  @X d#LX#X  oX#X  {Xt  HXeUXwu cX1i pXa |X G -IXT vX<X  CX h-OXf|XM2bXX TX$X  bXk X nX R-FXBX  sX)$Xu \XhXX  FXh  RX G_XX  fXGX  sX :GXI FXJ SXs%`Xn  EY@ RYK _YXX  lY~"xYX  ZYP fYNX  sYX YQ  MYb\ZY MBvYX  xY C[DYC$_YX  CYu OY "$\YX  @YX LY S*ZYX  DYF'PYX wYX  EYG(QY"yYLd[YX  YGAKYj  LYJX  XYX  dYQ qYy@YcS]Y 'pY[%WYDF|Y:X  BY 4NYX  BYDOYR ]Ya  kYuLxY 2DY I vY H CY|=PYX MY h [YPX  hYX uY}RCY@)UY@'~YX  eYx2qYX  cYX  oYA|YC}YI KY |WY TeY osY r  AY)_ 8NYX  FY i SYwF`Yz jfY] CYo PY H-]YxJYxhYW  vY)^ 8CYX  {Y k HYX WY] eY krYuLAY AOMYX  \YX  iY)] 8uYX  mYX  zY] GYC#TY X  wYX  CY)\ 8PY X  HYfUY v cY4pY ] dY BqY)[ 9YX  xYgX EYX  SY@ `Yj mYDzYR HYa VY] dYftCqYX  tYiU@Yy8UY!X  MYX  YY)M 9fY$X  _Yh+lYI0WYwpGY(X  wYj$CYg]aY$] ~YI  KYX  XY 3dY*u WY|@cY1X  cY] 1oY3X  `Yh-lY5YYj4uYX  iY c5vYnX  kY} wYX  DYVX PYw ,^Y>J JYwYHVY w{E^Yw 7cYGZYrX aYGmoYE*\YFN yYF@EY DSYI0dLWY>%cYKX  HY+] TY<X  aY /mYKn  \Y+X  iYX  uYFxAYFj OY+J  \Yn TiYV%}YV*bYXN YX@KYX|YYT gYXxtYXj BYX OY -]Y- JYaX  jYG!wYcX  XYr{eYo`Y )}YX fYTuYt*KRYFoYI^}Y~&[Y~97AYN xYOX  DYX  QY@^Y|4tlY[M`ZxN+mZxXZj fZJ sZ x @Z xLZ xZZ+G,hZv|TZ e^PZ a nZaob{ZaTl]Zau/IZ_J xZC EZaH3RZy EZ{?RZCQZaf_Z~;EZ /@ZGX  oZX  {Z|(HZh pZQ ~Zc KZ+~,XZX  DZb PZX  ]ZwiZH!xZkYZq ^hZX FZsX  TZe6,`ZR LZ'jZ9_QZfXCpZ9!sZX  TZL fg`Zh  GZX TZG0bZggRZY yZ_FZ+LMTZp.aZX  OZy[ZM iZX  vZn  BZD| KOZX  ZZ GgZl  nZ!i {Z!h HZuBTZX  VZX bZ99pZr 9iZt&bZX  HZv3UZZX HZO"VZX  xZX  DZX  PZD]ZZkZ4yZX  mZuUyZX NZ?X  \ZB"hZX  JZ'!VZX  wZpCZ4QZX EZS"SZX  uZD  AZI@dLMZ(X  YZX  eZ4erZS WZh 0cZc SZct-pZ%]ZvHBZI JZs WZR dZId2rZId1dZ+4cUZ4X  x]C D]H aQ]4Ur]AX  G^H 3T^4l3G^4|3s^fX  o^ eA{^$>|^J z^4@F^F ZF`4kX``oFK`4e Y`A ~a4a5Kax4KWla4NwbxHEbQ Mbu /Zbv IbJ gbX  sbsc@b 4tPbqDdn  SdX |_d4H [dk MLcda peRML~efyCKeo MLNf4T [f4oop4@^q4|5^qD Zr{ gr| tr4@Ar 4^Ar '(_xX  Gxs4_Sx Grx ^\yx!4PUxH exB4prx24R bx4 tx} sx4b @x4pBbx{4PRyX  by04mny4q}[y4O LzX [z~X iz4Twz4dKzc4To}14YC}erP\}e\Cl} qo}4jY~} #h~4wFK~i4_B1 VaX  w19PD1I4T6C H1P4U1E4I4{}qX  xр1DҀdjaҀJ`KԀK $akՀ?4oL׀4h{4Zc4|}4vyz)o4a Xw4zy4us݁@4ehb M4^Z)4m/x4heq z iMƄN4[vDŽ4u1Qτ4i Fh4e oH4|T 4SmP04ace{CDesTAGevC[u*^ WJHjRR ag Mm4uzt[oetUMO_ bn MLAR_ NgztmqaצZbצTcצ