package Ġdev . blue f alcon Ċ Ċ import Ġplatform . Core Bluetooth . CB Central Manager Ċ import Ġplatform . Core Bluetooth . CB Central Manager Delegate Protocol Ċ import Ġplatform . Core Bluetooth . CB Central Manager Scan Option Allow Duplicates Key Ċ import Ġplatform . Core Bluetooth . CB Characteristic Ċ import Ġplatform . Core Bluetooth . CB Characteristic Write With Response Ċ import Ġplatform . Core Bluetooth . CB Manager State Power ed Off Ċ import Ġplatform . Core Bluetooth . CB Manager State Power ed On Ċ import Ġplatform . Core Bluetooth . CB Manager State Reset ting Ċ import Ġplatform . Core Bluetooth . CB Manager State Unauthorized Ċ import Ġplatform . Core Bluetooth . CB Manager State Unknown Ċ import Ġplatform . Core Bluetooth . CB Manager State Unsupported Ċ import Ġplatform . Core Bluetooth . CB Per ipheral Ċ import Ġplatform . Core Bluetooth . CB Per ipheral Delegate Protocol Ċ import Ġplatform . Core Bluetooth . CB Service Ċ import Ġplatform . Foundation . N SError Ċ import Ġplatform . Foundation . NS Number Ċ import Ġplatform . Foundation . NSString Ċ import Ġplatform . Foundation . NS UTF 8 String Encoding Ċ import Ġplatform . Foundation . create Ċ import Ġplatform . Foundation . data Using Encoding Ċ import Ġplatform . darwin . DISPATCH _ TIME _ NOW Ċ import Ġplatform . darwin . N SEC _ PER _ M SEC Ċ import Ġplatform . darwin . N SEC _ PER _ SEC Ċ import Ġplatform . darwin . NSObject Ċ import Ġplatform . darwin . dispatch _ after Ċ import Ġplatform . darwin . dispatch _ get _ main _ queue Ċ import Ġplatform . darwin . dispatch _ time Ċ Ċ actual Ġclass ĠBlue F alcon Ġactual Ġconstructor ( ĊĠĠĠ Ġcontext : ĠApplication Context , ĊĠĠĠ Ġprivate Ġval Ġservice UUID : ĠString ? Ċ ) Ġ{ ĊĠĠĠ Ġactual Ġval Ġdeleg ates : ĠMutable Set < Blue F alcon Delegate > Ġ= Ġmutable Set Of () ĊĊĠĠĠ Ġprivate Ġval Ġcentral Manager : ĠCBC ent ral Manager ĊĠĠĠ Ġprivate Ġval Ġbluetooth Per ipheral Manager Ġ= ĠBluetooth Per ipheral Manager () ĊĠĠĠ Ġprivate Ġval Ġperipheral Delegate Ġ= ĠPer ipheral Delegate () ĊĠĠĠ Ġactual Ġvar Ġis Sc anning : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcentral Manager Ġ= ĠCBC ent ral Manager ( bluetooth Per ipheral Manager , Ġdispatch _ get _ main _ queue ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġfun Ġconnect ( bluetooth Per ipheral : ĠBluetooth Per ipheral ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . v Ġ{ Ġ" connect Ġ$ bluetooth Per ipheral " Ġ} ĊĊĠĠĠĠĠĠĠ Ġcentral Manager . connect Per ipheral ( bluetooth Per ipheral . bluetooth Device , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġfun Ġdisconnect ( bluetooth Per ipheral : ĠBluetooth Per ipheral ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . v Ġ{ Ġ" disconnect Ġ$ bluetooth Per ipheral " Ġ} ĊĊĠĠĠĠĠĠĠ Ġcentral Manager . cancel Per ipheral Connection ( bluetooth Per ipheral . bluetooth Device ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ĊĠĠĠ Ġactual Ġfun Ġscan () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( central Manager . state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCB Manager State Unknown Ġ-> Ġthrow ĠBluetooth Unknown Exception () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCB Manager State Reset ting Ġ-> Ġthrow ĠBluetooth Reset ting Exception () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCB Manager State Unsupported Ġ-> Ġthrow ĠBluetooth Unsupported Exception () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCB Manager State Unauthorized Ġ-> Ġthrow ĠBluetooth Permission Exception () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCB Manager State Power ed Off Ġ-> Ġthrow ĠBluetooth Not Enabled Exception () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCB Manager State Power ed On Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v Ġ{ Ġ" BT ĠScan Ġstarted " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Sc anning Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcentral Manager . start Scan () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠCBC ent ral Manager . start Scan () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( central Manager . state Ġ== ĠCB Manager State Reset ting ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d Ġ{ Ġ" wait Ġuntil Ġreset ting Ġdone " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch _ after ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch _ time ( DISPATCH _ TIME _ NOW , Ġ 1 0 0 Ġ* ĠN SEC _ PER _ M SEC . to Long ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch _ get _ main _ queue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Scan () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġoptions : ĠMap < Any ?, ĠAny > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( CB Central Manager Scan Option Allow Duplicates Key Ġto ĠNS Number ( true )) ĊĠĠĠĠĠĠĠ Ġif Ġ( service UUID Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscan For Per ipher als With Services ( listOf ( service UUID ), Ġoptions ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscan For Per ipher als With Services ( null , Ġoptions ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġfun Ġstop Sc anning () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . v Ġ{ Ġ" stop Sc anning " Ġ} ĊĊĠĠĠĠĠĠĠ Ġis Sc anning Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġcentral Manager . stop Scan () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġfun Ġread Characteristic ( ĊĠĠĠĠĠĠĠ Ġbluetooth Per ipheral : ĠBluetooth Per ipheral , ĊĠĠĠĠĠĠĠ Ġbluetooth Characteristic : ĠBluetooth Characteristic ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbluetooth Per ipheral . bluetooth Device . readValue For Characteristic ( bluetooth Characteristic . character istic ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġfun Ġnotify Characteristic ( ĊĠĠĠĠĠĠĠ Ġbluetooth Per ipheral : ĠBluetooth Per ipheral , ĊĠĠĠĠĠĠĠ Ġbluetooth Characteristic : ĠBluetooth Characteristic , ĊĠĠĠĠĠĠĠ Ġnotify : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbluetooth Per ipheral . bluetooth Device . set Notify Value ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth Characteristic . character istic ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġfun Ġwrite Characteristic ( ĊĠĠĠĠĠĠĠ Ġbluetooth Per ipheral : ĠBluetooth Per ipheral , ĊĠĠĠĠĠĠĠ Ġbluetooth Characteristic : ĠBluetooth Characteristic , ĊĠĠĠĠĠĠĠ Ġvalue : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġformatted String Ġ= ĠNSString . create ( string Ġ= Ġvalue ) ĊĠĠĠĠĠĠĠ Ġformatted String . data Using Encoding ( NS UTF 8 String Encoding )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth Per ipheral . bluetooth Device . writeValue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth Characteristic . character istic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCB Characteristic Write With Response ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġfun Ġchange MT U ( bluetooth Per ipheral : ĠBluetooth Per ipheral , Ġmt u Size : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . v Ġ{ Ġ" Change ĠMT U Ġsize Ġcalled Ġbut Ġnot Ġneeded ." Ġ} ĊĊĠĠĠĠĠĠĠ Ġnotify Deleg ates Ġ{ Ġthis . did Update MT U ( bluetooth Per ipheral ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠBluetooth Per ipheral Manager Ġ: ĠNSObject (), ĠCBC ent ral Manager Delegate Protocol Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcentral Manager Did Update State ( central : ĠCBC ent ral Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( central . state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCB Manager State Unknown Ġ-> ĠLog . d Ġ{ Ġ" State Ġ 0 Ġis Ġ. unknown " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCB Manager State Reset ting Ġ-> ĠLog . d Ġ{ Ġ" State Ġ 1 Ġis Ġ. reset ting " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCB Manager State Unsupported Ġ-> ĠLog . d Ġ{ Ġ" State Ġ 2 Ġis Ġ. unsupported " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCB Manager State Unauthorized Ġ-> ĠLog . d Ġ{ Ġ" State Ġ 3 Ġis Ġ. un author ised " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCB Manager State Power ed Off Ġ-> ĠLog . d Ġ{ Ġ" State Ġ 4 Ġis Ġ. powered Off " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCB Manager State Power ed On Ġ-> ĠLog . d Ġ{ Ġ" State Ġ 5 Ġis Ġ. powered On " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠLog . d Ġ{ Ġ" State Ġunknown Ġ- Ġ${ central . state . toInt () }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( central . state Ġ!= ĠCB Manager State Power ed On ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Deleg ates Ġ{ Ġthis . scan Did Failed ( IllegalStateException (" state Ġis Ġ${ central . state } ")) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcentral Manager ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcentral : ĠCBC ent ral Manager , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdid Discover Per ipheral : ĠCB Per ipheral , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad vertisement Data : ĠMap < Any ?, Ġ* >, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRSS I : ĠNS Number ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Sc anning ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d Ġ{ Ġ" Dis covered Ġdevice Ġ$ did Discover Per ipheral " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= ĠBluetooth Per ipheral ( did Discover Per ipheral , Ġr ssi Value Ġ= ĠRSS I . float Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Deleg ates Ġ{ Ġthis . did Discover Device ( device ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġdiscover Ġsome Ġdevice , Ġnow Ġto Ġprevent ĠBT Ġsleep Ġ- Ġrestart Ġscanning ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhttps :// stackoverflow . com / questions / 1 6 5 7 7 5 4 6 / continuous - sc anning - for - ios - core bluetooth - central - manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhttps :// stackoverflow . com / questions / 2 9 7 1 5 6 6 7 / core - bluetooth - cb per ipheral - disconnect s - every - 1 0 - seconds ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( central Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Scan () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Scan () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcentral Manager ( central : ĠCBC ent ral Manager , Ġdid Connect Per ipheral : ĠCB Per ipheral ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d Ġ{ Ġ" Did Connect Per ipheral Ġ${ did Connect Per ipheral . name }" Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= ĠBluetooth Per ipheral ( did Connect Per ipheral ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Deleg ates Ġ{ Ġthis . did Connect ( device ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdid Connect Per ipheral . delegate Ġ= Ġperipheral Delegate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdid Connect Per ipheral . discover Services ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcentral Manager ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcentral : ĠCBC ent ral Manager , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdid Disconnect Per ipheral : ĠCB Per ipheral , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror : ĠN SError ? ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d Ġ{ Ġ" Did Disconnect Per ipheral Ġ${ did Disconnect Per ipheral . name }" Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= ĠBluetooth Per ipheral ( did Disconnect Per ipheral ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Deleg ates Ġ{ Ġthis . did Disconnect ( device ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠPer ipheral Delegate Ġ: ĠNSObject (), ĠCB Per ipheral Delegate Protocol Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġperipheral ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperipheral : ĠCB Per ipheral , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdid Discover Services : ĠN SError ? ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( did Discover Services Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e Ġ{ Ġ" Error Ġwith Ġservice Ġdiscovery Ġ$ did Discover Services " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= ĠBluetooth Per ipheral ( per ipheral ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Deleg ates Ġ{ Ġthis . did Discover Services ( device ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġperipheral . services ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map NotNull Ġ{ Ġit Ġas ? ĠCB Service Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperipheral . discover Character istics ( null , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġperipheral ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperipheral : ĠCB Per ipheral , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdid Discover Character istics For Service : ĠCB Service , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror : ĠN SError ? ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e Ġ{ Ġ" Error Ġwith Ġcharacteristic Ġdiscovery Ġ$ did Discover Character istics For Service " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= ĠBluetooth Per ipheral ( per ipheral ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Deleg ates Ġ{ Ġthis . did Discover Character istics ( device ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġperipheral ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperipheral : ĠCB Per ipheral , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdid Update Value For Characteristic : ĠCB Characteristic , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror : ĠN SError ? ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v Ġ{ Ġ" did Update Value For Characteristic " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e Ġ{ Ġ" Error Ġwith Ġcharacteristic Ġupdate Ġ$ error " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= ĠBluetooth Per ipheral ( per ipheral ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcharacteristic Ġ= ĠBluetooth Characteristic ( did Update Value For Characteristic ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Deleg ates Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . did Character ist c ValueChanged ( device , Ġcharacteristic ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ