Áƒ*žE¸@¸ŽŒ@VŠŠŇ§ŒŒCżŽX)…?ş¸¸NoneUTSAccuBeta4_2CoreSystemEnginezzReplicateShotCount zzBeamPlus zzProjPluszzUpdateHistorySpawnNotification zzBeamMin ActorClasszzReplicateGaveDamage zzInitWeaponzzReplicateHitCountzzServerReplicateShotCount zzGaveDamageTickMutatorTakeDamagezzReplicateWeapon zzClientTickzzResetAmmoCount zzGetIndexInitRIzzReceivedDamage zzInitPlayerIPOnly PlayerInfoGetAccu GetDamage GetHitCount GetShotCount WeaponInfoUTSSuperShockBeamSNUTSShockBeamSNPostBeginPlay GetAccuracyUTSReplicationInfoUTSProjectileSN UTSDamageMut UTSComboSN NetPriorityGetRIzzReplicateAllValuesMiniShellCaseMTracer AssaultRifleRegisterDamageMutatorPBoltGetWeaponNameTranslocatorTarget PlasmaSphere ShockRifle PulseGun SniperRifleUT_FlakCannon minigun2ripperSuperShockRifle enforcer ImpactHammer TranslocatorOwner PawnList CurrentIDNextDamageMutatorVictim instigatedBy PlayerID AmmoType bWeaponUpProjectileClassAltProjectileClass MyDamageTypeAltDamageType AmmoAmount DieCount KillCount nextPawn InstigatorGamePRIbFound bTeamGame HitLocation Momentum actualDamagePBotpack bNetOwner DeltaTime ItemName Locationsupershockbeam ShockBeam bIsPlayerTeam DamageTypeAi ScriptText ReturnValueMutatorWeaponUTSDM LevelInfo zzWeapon zzWeaponNamezzWeaponClass zzShotCountzzLastShotCount zzHitCountzzDamageGivenFirstDamageTypeFirstProjClass AltProjClassbAmmoCountingMethodbAllowDoubleHit zzAmmoCount bIgnoreAccubIsAShockRiflebIsASuperShockRiflezzWI LastWeaponzzPID bDeleteObjbUTStatsRunning bInstaGamezzIndexzzSelectedWeaponzzWeaponHistoryzzDamageReceived zzKillCount zzDeathCountbShowingScores GameInfo Projectile zzFiredShotsPlayerReplicationInfoReplicationInfo SpawnNotifyAmmoCurrentWeapon zzPosition Inventory DamageGivenLevelDamageReceivedActorPawnRoleClassPackageWeapDamageGiven TextBufferObject FunctionzzNewShotCountVectorStruct StrPropertyStructPropertyClassProperty NamePropertyObjectPropertyzzRIzzPI bNoTeamGamebInstaUTSPSNUTSSBSN UTSSSBSNUTSCSN VictimPIDInstigatorPID bVictimFoundbInstigatorFoundFloatPropertyzzPath BoolPropertyzzIP IntProperty ByteProperty UT_ComboRing @sd B u  €†^ ¤kA%5[Bš:›:$‚-ą š:›:$š:›:$–:›:$–:›:$˙˙˙˙˙˙˙˙˙˙. Ö"’{¤YQ˛Z…œÔX…œÔX†XŠ'†XŠ'†XŠ'†XŠ'†XŠ'†XŠ'†XŠ'†XŠ'†XŠ'†XŠ'†XŠ'†XŠ'†XŠ'†XŠ'†XŠ'†XŠ'†XŠ'†XŠ'†XŠ'†XŠ'ƒžtČƒžtȆXŠ'ƒžtȆXŠ'ƒžtȆXŠ'Ń¸™BƒžtȆXŠ'Ń¸™BƒžtČƒžtČƒžtČƒžtČƒžtȆXŠ'ƒžtČƒžtČƒžtČƒžtȉ{#Uż‹)$ A 1ƒU€…mSO”ou'˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙;8śLN”=$:e‰{#Uż‰{#Uż Ö"’{ Ö"’{ Ö"’{ƒžtȉ{#UżƒžtČ Ö"’{ Ö"’{ Ö"’{ Ö"’{ŒŽ”™ŠŮŤŒŽ”ƒžtČƒžtČƒžtȉ{#UżƒžtČ…œÔXƒžtȉ{#Uż Ö"’{…œÔXƒžtȉ{#Uż Ö"’{…œÔXƒžtȉ{#Uż Ö"’{ƒžtČƒžtȉ{#UżƒžtČƒžtȉ{#Uż Ö"’{ƒžtȉ{#Użƒžtȉ{#Uż Ö"’{”=$:eŒŽ”™ŠŮŤŒŽ”™ŠŮŤŒŽ”=>#/cŒŽ”;ćŃ ŒŽ”:U€<ŒŽ”4X–‹ƒR MA_€ƒ€ƒjM€…F€…\]€…†€†+p€@Is 7†>`Žt`(˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙4X–ŽŒ”mó…œÔX8śLN‹ Ŕ@€K'@C€€ŽfG!˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙:U€<ŽŒ”mó…œÔX8śLN‹ żŽiS"˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙;ćŃ ŽŒ”mó…œÔX8śLN‹ ž €ƒŽlY&˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ =>#/cŽŒ”mó…œÔX…œÔX…œÔX…œÔX…œÔX…œÔX8śLN‹ ˘0 €L!€…"€…e€#€…W=cX*N€€Z €…V€€Y;]˘[:43%˘a€Š2P€Š6 p f€†€@ui€€gl€€s€‰o€€r w€‰? w €B€7†@€|€}€zŃ4;6z €€{xŇ};D6x DyĐč:6y €~8ŐÎ;Mš68%KŤŹ?68?68ČB €@€Ev1Ďš:67v H+Ăŕ8t%r– D666Ł Â,€… C$ †C'„r$*r$“*$C $$  I5¸Î7JH-6%5Ą“@6565@ Â,JnŻŽ66no Â!KkŞ 66kl Â!Nh ĽŞ56h?i Â!ˇ/#&s /%3–/, 6/˙˙˙˙Ł/’Ł/-B’Ł-°I’a =IJW’a ;WZY’a :YC[’a 4[E €…OGŸű4.6'Ge67Gf Â!xT„F1ú%ř–, +š˙˙˙˙řî„r6XT˜'r6]T˜œ-6%řĽĽ6ë-06řŁ €…€…şL9Cq"A‚w*w*O‘I-*'Š‚w*w*N‘’-+'%č–,  ‚‚-*š6Ow6*6 9-*'Ç‚‚-+š6Nw6*ż‚w>„-B3›:­:­6P9-+'Ţ‚-*-+裙 wŤ*Ť$9_aP  Z C'„r *r “* Z     VQPŠ+żĽ%˝–, 2š˙˙˙˙˝ł„-6>-62Ľ6°-06˝Ł €…WtE*Ąpt XU7$—ĄdV%•–, 7š˙˙˙˙•‹„ţ6AUţ6LU¸6?V„-6\/—66^Ľ6ĽR6^6ˆ-0 D66•Ł [QÜ ‰%@–, S6šQ@ŁSz—%“&ŚK%Q  J ‚ľ'„r *r “* ™„„„„ a/!, a/!- a/!0 a/!3 a/!2 J     b\ Üh{67Ž6'˜6Aš6L¸6%6Xł6]˛-62a/!4-6>a/!:˝„„„„„„a/!8a/!9a/!5a/!;a/!7a/!6a/!.-6%'ú„a/!=a/!<-6`'7„-6%-6>-6\'6Ľ“&˜Ž _(¸źĚ'š% %% (´%ˆ–~r6'(˜ -M'Ł.´-M  (6w ( €…RHj"v#%t–#, jš6#H“‘6# HtŁ# b)Š34)%2–)63)%Ł) Â! E& }C'„r&*r&“*&E  &&  ^F | v"%t–", jš6"F“‘6"  FtŁ" r,‘~0r„„r.ƒ•* .ƒ•-Ź/w.ƒ•˜6'  ,“63 .ƒ•Ś¨ř—,%Ą6 ,Ą, 6 63 .ƒ•Ś¨ Â!aDŽüv!%t–!, jš6!D“‘6! DtŁ! c€tclass UTSSuperShockBeamSN extends SpawnNotify; var UTSDamageMut UTSDM; simulated event Actor SpawnNotification(Actor A) { if (A == None || A.Instigator == None) return A; UTSDM.zzBeamPlus(A); return A; } Żdh ÂŁĄ—’Łť’´šw*ƒ‚-źš‘šľ5Ľ €oclass UTSShockBeamSN extends SpawnNotify; var UTSDamageMut UTSDM; simulated event Actor SpawnNotification(Actor A) { if (A == None || A.Instigator == None) return A; UTSDM.zzBeamPlus(A); return A; } g<ˇ"–,  P %P– , Fr6 *PŁ !6 <‘6 a < < ˝6 -K-j6 -6(6 -c-g6  Yô// ============================================================================= // UTSReplicationInfo ~ This class holds all weapon information. The server // always has the most accuracy values for each weapon. These values only get // replicated to the client when the statsboard is up, thus saving a lot of bandwith // ============================================================================= class UTSReplicationInfo extends ReplicationInfo; // WI struct definition struct WeaponInfo { var weapon zzWeapon; var string zzWeaponName; var class zzWeaponClass; var int zzShotCount,zzLastShotCount,zzHitCount; var float zzDamageGiven; // Used by zzGaveDamage var name FirstDamageType,AltDamageType; // Used by zzProjPlus var class FirstProjClass,AltProjClass; // Ammocounting vars var bool bAmmoCountingMethod; // Determine no of fired shots by counting ammo? var bool bAllowDoubleHit; var int zzAmmoCount; var bool bIgnoreAccu; // Ignore shotcount for this weapon? var bool bIsAShockRifle,bIsASuperShockRifle; }; var WeaponInfo zzWI[32]; // Servervars! var Pawn P; // Pawn that owns this class var Weapon LastWeapon; // Weapon in the last tick var int zzShotCount,zzHitCount,zzLastShotCount,zzPID; var bool bDeleteObj,bUTStatsRunning; // UTStats support ~ DeleteObj gets set when UTStats finished logging all values in the class var bool bInstaGame; var int zzIndex; // Nr of weapons indexed var int zzSelectedWeapon; // Index of the current weapon var int zzWeaponHistory[32]; // Hold the list of weaponindexes (zzWeaponHistory[0] = Index of current Weapon, zzWeaponHistory[1] = Index of previous Weapon) var int zzDamageGiven, zzDamageReceived; var int zzKillCount, zzDeathCount; // Clientvars var bool bShowingScores; replication { // Variables: server -> all clients reliable if (ROLE == ROLE_AUTHORITY) zzKillCount,zzDeathCount,zzShotCount,zzHitCount,zzPID; // Variables: server -> client that owns the class reliable if (bNetOwner && ROLE == ROLE_AUTHORITY) zzIndex,zzSelectedWeapon,zzDamageGiven,zzDamageReceived; // Functioncalls: server -> client reliable if (ROLE == ROLE_AUTHORITY) zzClientTick,zzResetAmmoCount,zzReplicateWeapon,zzReplicateGaveDamage,zzReplicateShotCount,zzReplicateHitCount; // Functioncalls: client -> server reliable if (ROLE < ROLE_AUTHORITY) zzServerReplicateShotCount,zzReplicateAllValues; // Variables: client -> server reliable if (ROLE < ROLE_AUTHORITY) bShowingScores; } // ============================================================================= // Initialize the class // ============================================================================= function InitRI() { local int i; P = Pawn(Owner); zzPID = P.PlayerReplicationInfo.PlayerID; bDeleteObj = false; for (i=0;i<32;++i) { zzWeaponHistory[i] = -1; } } // ============================================================================= // Tick function, scan for weaponchanges here // ============================================================================= function Tick (float DeltaTime) { local int i; if (P == None) { // If UTStats is running we want to wait to destroy // the class until the variables have been logged if (!bUTStatsRunning || bDeleteObj) Destroy(); return; } else { zzKillCount = P.KillCount; if (P.DieCount > zzDeathCount) { // Reset ammo counts - clientside zzResetAmmoCount(); } zzDeathCount = P.DieCount; } if (((P.Weapon == None) || (!P.Weapon.bWeaponUp))) { LastWeapon = none; return; } // Weapon switch, process info if (LastWeapon != P.Weapon) { zzGetIndex(P.Weapon); LastWeapon = P.Weapon; } // Ammo Counting method is done clientside if (zzWI[zzSelectedWeapon].bAmmoCountingMethod) { zzClientTick(); } } // ============================================================================= // zzClientTick ~ Scan for fired shots using the ammo counting method // ============================================================================= simulated function zzClientTick () { local int zzFiredShots; if (Pawn(Owner).Weapon == None || !Pawn(Owner).Weapon.bWeaponUp || Pawn(Owner).Weapon.class != zzWI[zzSelectedWeapon].zzWeaponClass) return; zzFiredShots = zzWI[zzSelectedWeapon].zzAmmoCount - Pawn(Owner).Weapon.AmmoType.AmmoAmount; if (zzFiredShots > 0) { // Always replicate to server as server holds most accurate values! zzWI[zzSelectedWeapon].zzShotCount += zzFiredShots; zzShotCount += zzFiredShots; zzServerReplicateShotCount(zzSelectedWeapon,zzWI[zzSelectedWeapon].zzShotCount); } zzWI[zzSelectedWeapon].zzAmmoCount = Pawn(Owner).Weapon.AmmoType.AmmoAmount; } // ============================================================================= // zzResetAmmoCount ~ Reset the ammo count for all weapons to zero // ============================================================================= simulated function zzResetAmmoCount () { local int i; for (i=0;i zzPosition = position in list // if the weapon is not found -> zzPosition = zzIndex for (i=zzPosition;i>0;i--) { // Push all weapons before CurrentWeapon back one position zzWeaponHistory[i] = zzWeaponHistory[i-1]; } zzWeaponHistory[0] = CurrentWeapon; } // ============================================================================= // zzGaveDamage ~ Called by DamageMut whenever the pawn gives damage // ============================================================================= function zzGaveDamage(Name DamageType, int DamageGiven) { local int i; zzDamageGiven += DamageGiven; // Automatic replication // Look for the weapon that gives this damagetype in the history for (i=0;i<32;++i) { if (zzWeaponHistory[i] == -1) break; if (zzWI[zzWeaponHistory[i]].FirstDamageType == DamageType || zzWI[zzWeaponHistory[i]].AltDamageType == DamageType) { // found the weapon zzWI[zzWeaponHistory[i]].zzDamageGiven += DamageGiven; // Check if hitcount needs an update if (zzWI[zzWeaponHistory[i]].bAllowDoubleHit || (zzWI[zzWeaponHistory[i]].zzShotCount > zzWI[zzWeaponHistory[i]].zzLastShotCount)) { zzWI[zzWeaponHistory[i]].zzHitCount++; zzHitCount++; // Automatic replication } zzWI[zzWeaponHistory[i]].zzLastShotCount = zzWI[zzWeaponHistory[i]].zzShotCount; // Replicate if showing scores if (bShowingScores) { zzReplicateGaveDamage(zzWeaponHistory[i],zzWI[zzWeaponHistory[i]].zzDamageGiven); zzReplicateHitCount(zzWeaponHistory[i],zzWI[zzWeaponHistory[i]].zzHitCount); } break; } } } // ============================================================================= // zzReceiveDamage ~ Called by DamageMut whenever the pawn receives damage // ============================================================================= function zzReceivedDamage(int DamageReceived) { zzDamageReceived += DamageReceived; // Automatic replication } // ============================================================================= // zzBeamPlus ~ Called by DamageMut whenever the pawn fires a (super)shockbeam // ============================================================================= function zzBeamPlus (Actor A) { local int i; zzShotCount++; // Automatic replication for (i=0;i<32;++i) { if (zzWeaponHistory[i] == -1) break; if (zzWI[zzWeaponHistory[i]].bIsASuperShockRifle || zzWI[zzWeaponHistory[i]].bIsAShockRifle) { zzWI[zzWeaponHistory[i]].zzShotCount++; if (bShowingScores) zzReplicateShotCount(zzWeaponHistory[i],zzWI[zzWeaponHistory[i]].zzShotCount); break; } } } // ============================================================================= // zzBeamMin ~ Called by DamageMut whenever the pawn fires a shockcombo // ============================================================================= function zzBeamMin (Actor A) { local int i; zzShotCount--; // Automatic replication for (i=0;i<32;++i) { if (zzWeaponHistory[i] == -1) break; if (zzWI[zzWeaponHistory[i]].bIsAShockRifle) { zzWI[zzWeaponHistory[i]].zzShotCount--; if (bShowingScores) zzReplicateShotCount(zzWeaponHistory[i],zzWI[zzWeaponHistory[i]].zzShotCount); break; } } } // ============================================================================= // zzProjPlus ~ Called by DamageMut whenever the pawn fires a projectile // ============================================================================= function zzProjPlus (Actor A) { local int i; for (i=0;i<32;++i) { if (zzWeaponHistory[i] == -1) break; if (zzWI[zzWeaponHistory[i]].FirstProjClass == A.class || zzWI[zzWeaponHistory[i]].AltProjClass == A.class) { // Ignore weapons we track by using the ammocountingmethod if (zzWI[zzWeaponHistory[i]].bAmmoCountingMethod) break; zzShotCount++; // Automatic replication zzWI[zzWeaponHistory[i]].zzShotCount++; if (bShowingScores) zzReplicateShotCount(zzWeaponHistory[i],zzWI[zzWeaponHistory[i]].zzShotCount); break; } } } // ============================================================================= // Server -> Client Communication // ============================================================================= simulated function zzReplicateWeapon(int zzIndex,class zzWeaponClass,string zzWeaponName) { zzWI[zzIndex].zzWeaponClass = zzWeaponClass; zzWI[zzIndex].zzWeaponName = zzWeaponName; } simulated function zzReplicateGaveDamage(int i,int WeapDamageGiven) { zzWI[i].zzDamageGiven = WeapDamageGiven; } simulated function zzReplicateShotCount(int i,int zzShotCount) { zzWI[i].zzShotCount = zzShotCount; } simulated function zzReplicateHitCount(int i,int zzHitCount) { zzWI[i].zzHitCount = zzHitCount; } // ============================================================================= // Client -> Server Communication // ============================================================================= simulated function zzServerReplicateShotCount(int i,int zzNewShotCount) { if (zzWI[i].bAmmoCountingMethod) { zzShotCount += (zzNewShotCount-zzWI[i].zzShotCount); zzWI[i].zzShotCount = zzNewShotCount; } } simulated function zzReplicateAllValues() // Called when client toggles scoreboard? { local int i; for (i=0;i currentID) { for (P = Level.PawnList; P != None; P = P.NextPawn) { if (P.bIsPlayer && P.PlayerReplicationInfo.PlayerID == currentID) { zzInitPlayer(P); break; } } currentID++; } } // ============================================================================= // zzInitPlayer ~ Initialize a new pawn // ============================================================================= function zzInitPlayer (Pawn P) { local int i; local string zzPath; if (currentID < 32) i = currentID; else { for (i=0;i<32;++i) { if (zzPI[i].zzRI == None) break; } } zzPI[i].zzPID = P.PlayerReplicationInfo.PlayerID; zzPI[i].zzRI = Spawn(class'UTSReplicationInfo',P,,P.Location); zzPI[i].zzRI.bUTStatsRunning = bUTStatsRunning; zzPI[i].zzRI.bDeleteObj = false; zzPI[i].zzRI.bInstaGame = bInsta; zzPI[i].zzRI.InitRI(); } // ============================================================================= // IPOnly ~ return IP without the portnr // ============================================================================= function string IPOnly (string zzIP) { if (InStr(zzIP,":") != -1) return Left(zzIP,InStr(zzIP,":")); else return zzIP; } // ============================================================================= // Accu accessor // ============================================================================= function float GetAccuracy ( PlayerReplicationInfo PRI ) { local int i; for (i=0;i<32;++i) { if (zzPI[i].zzPID == PRI.PlayerID) { if (zzPI[i].zzRI.zzShotCount != 0) return float(zzPI[i].zzRI.zzHitCount)/float(zzPI[i].zzRI.zzShotCount)*100.0; else return 0.00; } } } // ============================================================================= // RI Accessor // ============================================================================= function UTSReplicationInfo GetRI ( PlayerReplicationInfo PRI ) { local int i; for (i=0;i<32;++i) { if (zzPI[i].zzPID == PRI.PlayerID) { return zzPI[i].zzRI; } } return none; } // ============================================================================= // Defaultproperties // ============================================================================= €@nm$Ţ`¨%Ś–, œš6m‘–›6%ŤŹ?6R?6ČBœŁ Żveađ )r *$„-K-6a or ś[— Ş?? ŞŤ„r * -Ź1* ëw1  1 -6%  €jclass UTSComboSN extends SpawnNotify; var UTSDamageMut UTSDM; simulated event Actor SpawnNotification(Actor A) { if (A == None || A.Instigator == None) return A; UTSDM.zzBeamMin(A); return A; } qq*ň™U%Q–, Gš6q‘6Ł* -O> e .ƒ•b ‘-6(-%c–-, -˙˙˙˙Ł-< € TP j.ŁŚ%Ą–, 2š˙˙˙˙Ą—-62Ś6”-06ĄŁ XXW˙˙˙˙UWţ˙˙˙uW˙˙˙˙TW˙˙˙˙gWţ˙˙˙\Wţ˙˙˙dW˙˙˙˙JWţ˙˙˙sWţ˙˙˙[W˙˙˙˙idý˙˙˙JW˙˙˙˙LWţ˙˙˙Wdý˙˙˙gu÷˙˙˙Ddű˙˙˙Rdű˙˙˙OW˙˙˙˙fdű˙˙˙>Wţ˙˙˙`Wţ˙˙˙Zbő˙˙˙WW˙˙˙˙GWţ˙˙˙qvű˙˙˙VWţ˙˙˙cW˙˙˙˙MWţ˙˙˙bWţ˙˙˙a\ň˙˙˙ XXW˙˙˙˙Hdô˙˙˙PW˙˙˙˙KWţ˙˙˙_dú˙˙˙EW˙˙˙˙Puă˙˙˙K_ő˙˙˙^uý˙˙˙Ldě˙˙˙Asú˙˙˙Fv÷˙˙˙``Ů˙˙˙[\ű˙˙˙sç˙˙˙Ssű˙˙˙Ybú˙˙˙Hbú˙˙˙Gdô˙˙˙?dý˙˙˙Nuý˙˙˙M\ű˙˙˙#cú˙˙˙Jcú˙˙˙I\ě˙˙˙uç˙˙˙@sý˙˙˙_aű˙˙˙\Wß˙˙˙^Wß˙˙˙]Wß˙˙˙wŸ zh0„ B v0ŸfC1„ @R1ˆ›j `1„sm m1ˆue z1„—c G2¤%YS2„ Al:ˆ W z:ˆ™bG;„Şc U;„c b;„˜c n;„”c {;„’c G<„u| T<„…c `<”'X l<„¸c DFˆ§W PF„ m]F„ąc lF„so xF„œc DGšsp QGˆ’C^Gˆ’B lG„@ yG„ľc FHˆ“bRH„¤c `H„Ąc lH„žc xHˆ‡bDIŠst RIˆ b_IžslmIˆœj {I„Ÿc HJŠ’o TJŠ’p `J„˘I lJ„śc xJ–Žt DK„Œc QKŠ F^Kˆ { mKŠsx zK„sv FLŽ(mSL„ˆc @NŠ } MN–sk ZN„c fN„’V sNŽ!lNŽ"lkPˆŞW WRŽ&YdRŠsy }T„ EIU„ˆ] WUœsq cUŠg pUˆ:h |Uˆ¤b IVˆ4h VVˆĄb cV„Ž@ pVˆžb }VˆŒiJWˆ=h XWŠ ~ eWœsJ rWŠœR W„’n KX„’m WXœ’a dX„˜N pX„ o|X„˜O KYˆb WYœ—a dY„—Q qYˆŒj}YžsrKZˆŒkZZˆ;h hZˆŒl uZŠsu B[žssN[„sn \[Ÿ’Th[Šsw v[Ÿ’UB\„ |P\Š  ^\„ pj\žŽly\–Žk H]Šh T]„‹c a]„‹Y n]Š~ z]„Šc G^„Šm T^ˆąQ`^„‰c n^„‰o {^„ CG_ˆľQV_„ Dd_Ľ r_„–S E`ĽQ`„„c c`ˆsj p`„~c }`„c Ja„{c Wa‡ &da„e Jb„{e Vb‡ 'bb‡ &Ic„~e oc‡ L{c–„e Geše Se‡ 1&_e‡ +WEfˆ‡e \g‡ : Fig‡ Doh‡ +si‡ +^j‡ ,Ik‡ˇ#Nukˆ“e Co‡ 7Po‡ sGpˆ¸b zrˆ”b Gs‡şyTs‡ ; FMy‡ LSzˆ™e _|‡ %l|‡ CQ}‡ rT‡ = WFƒ„ n ]…‡ \j…‡ OFŒˆ e UŽ‡fbŽ‡ ;H‡ 4 FC‘‡ fI’‡ Ko“„˛c z–‡fF—š˛Z l˜—:d4y˜‡ŻBxœš§Z zž—;d4zFŸ‡E@Ł— d4eôEŚ—=d4Vjš–Şr @˘‡?L˘—d4@xKŁ–Že K›‡$IW›‡Ż D`šąe d —4d4up ‡*Pe¤‡ XuĽˆľe M§‡ |Z§