/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 7 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . javac . wrappers . trees Ċ Ċ import Ġcom . sun . source . tree . Compilation Unit Tree Ċ import Ġcom . sun . tools . javac . code . Bound Kind Ċ import Ġcom . sun . tools . javac . tree . J CT ree Ċ import Ġorg . jetbrains . kotlin . builtins . Primitive Type Ċ import Ġorg . jetbrains . kotlin . javac . J av ac Wrapper Ċ import Ġorg . jetbrains . kotlin . javac . resolve . Mock Kotlin Classifier Ċ import Ġorg . jetbrains . kotlin . load . java . structure .* Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . resolve . jvm . Jvm Primitive Type Ċ import Ġjavax . lang . model . type . Type Kind Ċ Ċ abstract Ġclass ĠTree Based Type < out ĠT Ġ: ĠJ CT ree >( ĊĠĠĠĠĠĠĠ Ġval Ġtree : ĠT , ĊĠĠĠĠĠĠĠ Ġval Ġcompilation Unit : ĠCompilation Unit Tree , ĊĠĠĠĠĠĠĠ Ġval Ġjav ac : ĠJ av ac Wrapper , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġall Annotations : ĠCollection < Java Annotation >, ĊĠĠĠĠĠĠĠ Ġprotected Ġval Ġcontaining Element : ĠJava Element Ċ ) Ġ: ĠJava Type , ĠJava Annotation Owner Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġannotations : ĠCollection < Java Annotation > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġall Annotations . filter Type Annotations () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( tree : ĠJ CT ree , Ġcompilation Unit : ĠCompilation Unit Tree , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjav ac : ĠJ av ac Wrapper , Ġannotations : ĠCollection < Java Annotation >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontaining Element : ĠJava Element ): ĠJava Type Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( tree ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJ CT ree . J CP ri mitive Type Tree Ġ-> ĠTree Based Primitive Type ( tree , Ġcompilation Unit , Ġjav ac , Ġannotations , Ġcontaining Element ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJ CT ree . JC ArrayType Tree Ġ-> ĠTree Based ArrayType ( tree , Ġcompilation Unit , Ġjav ac , Ġannotations , Ġcontaining Element ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJ CT ree . JC Wildcard Ġ-> ĠTree Based Wildcard Type ( tree , Ġcompilation Unit , Ġjav ac , Ġannotations , Ġcontaining Element ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJ CT ree . JC Type Apply Ġ-> ĠTree Based Generic Classifier Type ( tree , Ġcompilation Unit , Ġjav ac , Ġannotations , Ġcontaining Element ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJ CT ree . JC Annotated Type Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunderlying Type Ġ= Ġtree . underlying Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Annotations Ġ= Ġtree . annotations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠTree Based Annotation ( it , Ġcompilation Unit , Ġjav ac , Ġcontaining Element ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate ( underlying Type , Ġcompilation Unit , Ġjav ac , Ġnew Annotations , Ġcontaining Element ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJ CT ree . JC Expression Ġ-> ĠTree Based Non Generic Classifier Type ( tree , Ġcompilation Unit , Ġjav ac , Ġannotations , Ġcontaining Element ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException (" Unsupported Ġtype : Ġ$ tree ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġis Deprecated In Java Doc : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġfind Annotation ( fq Name : ĠF q Name ) Ġ= Ġannotations . find Ġ{ Ġit . class Id ?. as Single Fq Name () Ġ== Ġfq Name Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= Ġ( other Ġas ? ĠTree Based Type <* >) ?. tree Ġ== Ġtree ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode () Ġ= Ġtree . hashCode () ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġtree . toString () Ċ Ċ } Ċ Ċ class ĠTree Based Primitive Type ( ĊĠĠĠĠĠĠĠ Ġtree : ĠJ CT ree . J CP ri mitive Type Tree , ĊĠĠĠĠĠĠĠ Ġcompilation Unit : ĠCompilation Unit Tree , ĊĠĠĠĠĠĠĠ Ġjav ac : ĠJ av ac Wrapper , ĊĠĠĠĠĠĠĠ Ġall Annotations : ĠCollection < Java Annotation >, ĊĠĠĠĠĠĠĠ Ġcontaining Element : ĠJava Element Ċ ) Ġ: ĠTree Based Type < J CT ree . J CP ri mitive Type Tree >( tree , Ġcompilation Unit , Ġjav ac , Ġall Annotations , Ġcontaining Element ), ĠJava Primitive Type Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġtype : ĠPrimitive Type ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( tree . primitive Type Kind Ġ== ĠType Kind . VOID ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJ vm Primitive Type . get ( tree . toString ()). primitive Type ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠTree Based ArrayType ( ĊĠĠĠĠĠĠĠ Ġtree : ĠJ CT ree . JC ArrayType Tree , ĊĠĠĠĠĠĠĠ Ġcompilation Unit : ĠCompilation Unit Tree , ĊĠĠĠĠĠĠĠ Ġjav ac : ĠJ av ac Wrapper , ĊĠĠĠĠĠĠĠ Ġall Annotations : ĠCollection < Java Annotation >, ĊĠĠĠĠĠĠĠ Ġcontaining Element : ĠJava Element Ċ ) Ġ: ĠTree Based Type < J CT ree . JC ArrayType Tree >( tree , Ġcompilation Unit , Ġjav ac , Ġall Annotations , Ġcontaining Element ), ĠJava ArrayType Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcomponent Type : ĠJava Type ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcreate ( tree . elem type , Ġcompilation Unit , Ġjav ac , Ġannotations , Ġcontaining Element ) Ċ Ċ } Ċ Ċ class ĠTree Based Wildcard Type ( ĊĠĠĠĠĠĠĠ Ġtree : ĠJ CT ree . JC Wildcard , ĊĠĠĠĠĠĠĠ Ġcompilation Unit : ĠCompilation Unit Tree , ĊĠĠĠĠĠĠĠ Ġjav ac : ĠJ av ac Wrapper , ĊĠĠĠĠĠĠĠ Ġall Annotations : ĠCollection < Java Annotation >, ĊĠĠĠĠĠĠĠ Ġcontaining Element : ĠJava Element Ċ ) Ġ: ĠTree Based Type < J CT ree . JC Wildcard >( tree , Ġcompilation Unit , Ġjav ac , Ġall Annotations , Ġcontaining Element ), ĠJava Wildcard Type Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġbound : ĠJava Type ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtree . bound ?. let Ġ{ Ġcreate ( it , Ġcompilation Unit , Ġjav ac , Ġannotations , Ġcontaining Element ) Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġis Ext ends : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtree . kind . kind Ġ== ĠBound Kind . EXT END S Ċ Ċ } Ċ Ċ sealed Ġclass ĠTree Based Classifier Type < out ĠT Ġ: ĠJ CT ree >( ĊĠĠĠĠĠĠĠ Ġtree : ĠT , ĊĠĠĠĠĠĠĠ Ġcompilation Unit : ĠCompilation Unit Tree , ĊĠĠĠĠĠĠĠ Ġjav ac : ĠJ av ac Wrapper , ĊĠĠĠĠĠĠĠ Ġall Annotations : ĠCollection < Java Annotation >, ĊĠĠĠĠĠĠĠ Ġcontaining Element : ĠJava Element Ċ ) Ġ: ĠTree Based Type < T >( tree , Ġcompilation Unit , Ġjav ac , Ġall Annotations , Ġcontaining Element ), ĠJava Classifier Type Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġclassifier : ĠJava Classifier ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġby Ġlazy Ġ{ Ġjav ac . resolve ( tree , Ġcompilation Unit , Ġcontaining Element ) Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġclassifier QualifiedName : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( classifier Ġas ? ĠJava Class )?. fq Name ?. asString () Ġ?: Ġtree . toString (). substring Before ("< ") ĊĊĠĠĠ Ġoverride Ġval Ġpresent able Text : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġclassifier QualifiedName ĊĊĠĠĠ Ġoverride Ġval Ġtype Arguments : ĠList < Java Type > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtree : ĠJ CT ree Ġ= Ġtree ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tree Ġis ĠJ CT ree . JC Type Apply ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtree Ġ= Ġtree . clazz ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tree Ġis ĠJ CT ree . JC Field Access ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen closing Type Ġ= ĠTree Based Type . create ( tree . selected , Ġcompilation Unit , Ġjav ac , Ġannotations , Ġcontaining Element ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( enc lo sing Type Ġas ? ĠJava Classifier Type )?. type Arguments Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclassifier Ġ= Ġclassifier Ġas ? ĠJava Class Ġ?: Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( classifier Ġis ĠMock Kotlin Classifier Ġ|| Ġclassifier . is Static ) Ġreturn Ġempty List () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġarray ListOf < Java Class >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġouter Ġ= Ġclassifier . outer Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstatic Type Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( outer Ġ!= Ġnull Ġ&& Ġ! static Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( outer . is Static ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatic Type Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( outer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġouter Ġ= Ġouter . outer Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. flatMap Ġ{ Ġit . type Parameters . map (:: Tree Based Type ParameterType ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠTree Based Type ParameterType ( override Ġval Ġclassifier : ĠJava Type Parameter ) Ġ: ĠJava Classifier Type Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġtype Arguments : ĠList < Java Type > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġempty List () ĊĊĠĠĠ Ġoverride Ġval Ġis Raw : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġval Ġannotations : ĠCollection < Java Annotation > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġclassifier . annotations . filter Type Annotations () ĊĊĠĠĠ Ġoverride Ġval Ġclassifier QualifiedName : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġclassifier . name . asString () ĊĊĠĠĠ Ġoverride Ġval Ġpresent able Text : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġclassifier QualifiedName ĊĊĠĠĠ Ġoverride Ġfun Ġfind Annotation ( fq Name : ĠF q Name ) Ġ= Ġannotations . find Ġ{ Ġit . class Id ?. as Single Fq Name () Ġ== Ġfq Name Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġis Deprecated In Java Doc : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġfalse Ċ } Ċ Ċ class ĠTree Based Non Generic Classifier Type ( ĊĠĠĠĠĠĠĠ Ġtree : ĠJ CT ree . JC Expression , ĊĠĠĠĠĠĠĠ Ġcompilation Unit : ĠCompilation Unit Tree , ĊĠĠĠĠĠĠĠ Ġjav ac : ĠJ av ac Wrapper , ĊĠĠĠĠĠĠĠ Ġannotations : ĠCollection < Java Annotation >, ĊĠĠĠĠĠĠĠ Ġcontaining Element : ĠJava Element Ċ ) Ġ: ĠTree Based Classifier Type < J CT ree . JC Expression >( tree , Ġcompilation Unit , Ġjav ac , Ġannotations , Ġcontaining Element ) Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġis Raw : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( classifier Ġas ? ĠMock Kotlin Classifier )?. has Type Parameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ( classifier Ġas ? ĠJava Class )?. type Parameters ?. isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġfalse Ċ Ċ } Ċ Ċ class ĠTree Based Generic Classifier Type ( ĊĠĠĠĠĠĠĠ Ġtree : ĠJ CT ree . JC Type Apply , ĊĠĠĠĠĠĠĠ Ġcompilation Unit : ĠCompilation Unit Tree , ĊĠĠĠĠĠĠĠ Ġjav ac : ĠJ av ac Wrapper , ĊĠĠĠĠĠĠĠ Ġannotations : ĠCollection < Java Annotation >, ĊĠĠĠĠĠĠĠ Ġcontaining Element : ĠJava Element Ċ ) Ġ: ĠTree Based Classifier Type < J CT ree . JC Type Apply >( tree , Ġcompilation Unit , Ġjav ac , Ġannotations , Ġcontaining Element ) Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġclassifier : ĠJava Classifier ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Tree Ġ= Ġtree . clazz ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Tree Ġis ĠJ CT ree . JC Annotated Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjav ac . resolve ( new Tree . underlying Type , Ġcompilation Unit , Ġcontaining Element ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġsuper . classifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġannotations : ĠCollection < Java Annotation > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Tree Ġ= Ġtree . clazz ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( new Tree Ġas ? ĠJ CT ree . JC Annotated Type )?. annotations ?. map Ġ{ ĠTree Based Annotation ( it , Ġcompilation Unit , Ġjav ac , Ġcontaining Element ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . to Mutable List < Java Annotation >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . apply Ġ{ Ġadd All ( super . annotations ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġsuper . annotations ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġtype Arguments : ĠList < Java Type > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtree . arguments . map Ġ{ Ġcreate ( it , Ġcompilation Unit , Ġjav ac , Ġempty List (), Ġcontaining Element ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġadd All ( super . type Arguments ) Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġis Raw : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġclassifier . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMock Kotlin Classifier Ġ-> Ġtree . arguments . size Ġ!= Ġit . type Parameters Number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtree . arguments . size Ġ!= Ġ( classifier Ġas ? ĠJava Class )?. type Parameters ?. size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ }