package Ġink . pt ms . ady esh ach . internal . trait . impl Ċ Ċ import Ġink . pt ms . ady esh ach . api . Ad y esh ach API Ċ import Ġink . pt ms . ady esh ach . api . event . Ad y esh ach Entity Remove Event Ċ import Ġink . pt ms . ady esh ach . common . entity . Entity Instance Ċ import Ġink . pt ms . ady esh ach . common . entity . path . Path Finder Handler Ċ import Ġink . pt ms . ady esh ach . common . entity . path . Result Navigation Ċ import Ġink . pt ms . ady esh ach . internal . trait . Trait Ċ import Ġorg . bukkit .* Ċ import Ġorg . bukkit . entity . Player Ċ import Ġorg . bukkit . event . block . Action Ċ import Ġorg . bukkit . event . player . Player Interact Event Ċ import Ġorg . bukkit . event . player . Player Quit Event Ċ import Ġorg . bukkit . event . player . Player Swap Hand Items Event Ċ import Ġorg . bukkit . inventory . Equipment Slot Ċ import Ġtab ool ib . common . platform . event . Subscribe Event Ċ import Ġtab ool ib . common . platform . function . adapt Player Ċ import Ġtab ool ib . common . platform . function . submit Ċ import Ġtab ool ib . library . x series . X Material Ċ import Ġtab ool ib . platform . util .* Ċ Ċ object ĠTrait Pat rol Ġ: ĠTrait () Ġ{ ĊĊĠĠĠ Ġval Ġedit Ġ= ĠHashMap < String , ĠEntity Instance >() ĊĠĠĠ Ġval Ġnodes Cache Map Ġ= ĠHashMap < String , ĠList < Location >>() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ å· ¡ éĢ» è§¦åıĳ åĳ¨æľŁ ĊĠĠĠĠĠĠĠ Ġsubmit ( period Ġ= Ġ 5 , Ġasync Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . get Keys ( false ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentity Ġ= ĠAd y esh ach API . getEntity From UniqueId ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è§¦åıĳ å· ¡ éĢ» çļĦ åīį æıĲ ï¼ļ ä¸į åľ¨ ç¼ĸè¾ĳ æ¨¡å¼ı ãĢģ ä¸į åľ¨ ç§»åĬ¨ ãĢģ ä¸į åľ¨ åĩĨå¤ĩ ç§»åĬ¨ ãĢģ åŃĺåľ¨ è§Ĥ å¯Ł èĢħ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entity Ġ!= Ġnull Ġ&& Ġ! entity . is Editing () Ġ&& Ġ! entity . is Controller Moving () Ġ&& Ġ! entity . has Tag (" try Moving ") Ġ&& Ġentity . has Viewer ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġentity . index () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnodes Ġ= Ġentity . nodes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġnodes . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity . controller Move ( nodes [ index ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity . index ( index Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("[ Ad y esh ach ] ĠPat rol ĠError : Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity . index ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ ç¼ĸè¾ĳ æ¨¡å¼ı å±ķç¤º ĊĠĠĠĠĠĠĠ Ġsubmit ( period Ġ= Ġ 4 0 , Ġasync Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBu kkit . get Online Players (). forEach Ġ{ Ġplayer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( player . name Ġin Ġedit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnodes Ġ= Ġedit [ player . name ] !!. nodes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( nodes . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġp Ġ= Ġnodes [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnodes . forEach Indexed Ġ{ Ġi , Ġnode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath Finder Handler . request ( p , Ġnode , Ġedit [ player . name ] !!. entity Type . getPath Type ()) Ġ{ Ġr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( r Ġas ĠResult Navigation ). point List . forEach Indexed Ġ{ Ġindex , Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubmit ( delay Ġ= Ġindex Ġ* Ġ 2 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ġ= ĠLocation ( player . world , Ġp . x Ġ+ Ġ 0 . 5 , Ġp . y Ġ+ Ġ 0 . 5 , Ġp . z Ġ+ Ġ 0 . 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . spawn Particle ( Particle . FL AME , Ġpos , Ġ 5 , Ġ 0 . 0 , Ġ 0 . 0 , Ġ 0 . 0 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp Ġ= Ġnode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ> Ġ 1 Ġ&& Ġi Ġ+ Ġ 1 Ġ== Ġnodes . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath Finder Handler . request ( node , Ġnodes [ 0 ], Ġedit [ player . name ] !!. entity Type . getPath Type ()) Ġ{ Ġr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( r Ġas ĠResult Navigation ). point List . forEach Indexed Ġ{ Ġindex , Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubmit ( delay Ġ= Ġindex Ġ* Ġ 2 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ġ= ĠLocation ( player . world , Ġp . x Ġ+ Ġ 0 . 5 , Ġp . y Ġ+ Ġ 0 . 5 , Ġp . z Ġ+ Ġ 0 . 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . spawn Particle ( Particle . FL AME , Ġpos , Ġ 5 , Ġ 0 . 0 , Ġ 0 . 0 , Ġ 0 . 0 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġho log ram Ġ= ĠAd y esh ach API . create Ho log ram ( player , ĠLocation ( player . world , Ġnode . x Ġ+ Ġ 0 . 5 , Ġnode . y Ġ+ Ġ 1 , Ġnode . z Ġ+ Ġ 0 . 5 ), ĠlistOf ("# ${ i Ġ+ Ġ 1 } ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubmit ( delay Ġ= Ġ 4 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġho log ram . delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ġ= ĠLocation ( player . world , Ġnode . x Ġ+ Ġ 0 . 5 , Ġnode . y Ġ+ Ġ 0 . 5 , Ġnode . z Ġ+ Ġ 0 . 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . spawn Particle ( Particle . V ILL AGER _ H AP PY , Ġpos , Ġ 2 0 , Ġ 0 . 0 , Ġ 1 . 0 , Ġ 0 . 0 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . send Lang (" trait - pat rol ", Ġnodes . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠEntity Instance . nodes ( nodes : ĠList < Location >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( nodes . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . set ("$ unique Id . nodes ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodes Cache Map . remove ( unique Id ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . set ("$ unique Id . nodes ", Ġnodes . map Ġ{ Ġit . serialize () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodes Cache Map [ unique Id ] Ġ= Ġnodes . toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun ĠEntity Instance . nodes (): ĠList < Location > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnodes Cache Map . compute If Absent ( unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . getList ("$ unique Id . nodes ") ?. map Ġ{ ĠLocation . deserialize ( it Ġas ĠMutable Map < String , ĠAny >) Ġ} Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠEntity Instance . edit ( value : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata . set ("$ unique Id . edit ", Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠEntity Instance . is Editing (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdata . getBoolean ("$ unique Id . edit ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠEntity Instance . index ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata . set ("$ unique Id . index ", Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠEntity Instance . index (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdata . getInt ("$ unique Id . index ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe Event ĊĠĠĠ Ġfun Ġe ( e : ĠAd y esh ach Entity Remove Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . entity . nodes ( emptyList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe Event ĊĠĠĠ Ġfun Ġe ( e : ĠPlayer Quit Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġedit . remove ( e . player . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe Event ĊĠĠĠ Ġfun Ġe ( e : ĠPlayer Swap Hand Items Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( e . player . name Ġin Ġedit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . is Cancelled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . player . play Sound ( e . player . location , ĠSound . ENTITY _ EX PER I ENCE _ OR B _ P ICK UP , Ġ 1 f , Ġ 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . player . is S ne aking ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit [ e . player . name ]?. nodes ( emptyList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . player . send Lang (" trait - pat rol ", Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit . remove ( e . player . name )?. edit ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapt Player ( e . player ). send Title ("", Ġ"", Ġ 0 , Ġ 4 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . player . inventory . take Item ( 9 9 9 ) Ġ{ Ġit . has Name ( e . player . as Lang Text (" trait - pat rol - tool - name ")) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe Event ĊĠĠĠ Ġfun Ġe ( e : ĠPlayer Interact Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( e . player . name Ġin Ġedit Ġ&& Ġe . hand Ġ== ĠE quipment Slot . HAND ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġedit [ e . player . name ] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . action Ġ== ĠAction . LEFT _ CLICK _ BLOCK Ġ&& Ġe . item ?. type Ġ== ĠMaterial . BL A ZE _ RO D ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . is Cancelled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity . nodes ( entity . nodes (). to Mutable Set (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add ( e . clicked Block !!. location . add ( 0 . 0 , Ġ 1 . 0 , Ġ 0 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . action Ġ== ĠAction . RIGHT _ CLICK _ BLOCK Ġ&& Ġe . item ?. type Ġ== ĠMaterial . BL A ZE _ RO D ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . is Cancelled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . player . play Sound ( e . player . location , ĠSound . ENTITY _ EX PER I ENCE _ OR B _ P ICK UP , Ġ 1 f , Ġ 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity . nodes ( entity . nodes (). to Mutable Set (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . remove ( e . clicked Block !!. location . add ( 0 . 0 , Ġ 1 . 0 , Ġ 0 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . player . send Lang (" trait - pat rol ", Ġentity . nodes (). size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" pat rol " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġedit ( player : ĠPlayer , Ġentity Instance : ĠEntity Instance ) Ġ{ ĊĠĠĠĠĠĠĠ Ġedit [ player . name ] Ġ= Ġentity Instance ĊĠĠĠĠĠĠĠ Ġentity Instance . edit ( true ) ĊĠĠĠĠĠĠĠ Ġplayer . give Item ( build Item ( X Material . BL A ZE _ RO D ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġplayer . as Lang Text (" trait - pat rol - tool - name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo re Ġ+= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo re Ġ+= Ġplayer . as Lang Text (" trait - pat rol - tool - lo re ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsh iny () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }