package Ġio . blo co . circ les . domain Ċ Ċ import Ġio . blo co . circ les . data . Identity Model Ċ import Ġio . blo co . circ les . data . Profile Model Ċ import Ġio . blo co . circ les . data . interfaces . Identity Repository Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġorg . block stack . android . sdk . extensions . to Btc Address Ċ import Ġorg . block stack . android . sdk . extensions . to St x Address Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠNew Identity Ċ @ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġidentity Keys : ĠIdentity Keys , ĊĠĠĠ Ġprivate Ġval Ġidentity Repository : ĠIdentity Repository , ĊĠĠĠ Ġprivate Ġval Ġgenerate Identity : ĠGenerate Identity , ĊĠĠĠ Ġprivate Ġval Ġregist rar Profile : ĠRegist rar Profile , ĊĠĠĠ Ġprivate Ġval Ġupload Profile : ĠUpload Profile , ĊĠĠĠ Ġprivate Ġval Ġupload Wallet : ĠUpload Wallet , Ċ ) Ġ{ ĊĠĠĠ Ġsuspend Ġfun Ġcreate ( username : ĠString ? Ġ= Ġnull ): ĠResult < Identity Model > Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġident ities Ġ= Ġidentity Repository . observe (). first () ĊĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= Ġidentity Keys . new () ĊĠĠĠĠĠĠĠ Ġval Ġbtc Keys Ġ= Ġkeys . to Btc Address () ĊĠĠĠĠĠĠĠ Ġval Ġst x Keys Ġ= Ġkeys . to St x Address ( true ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Identity Ġ= Ġgenerate Identity . generate ( st x Keys , Ġusername ) ĊĊĠĠĠĠĠĠĠ Ġident ities Ġ= Ġident ities Ġ+ Ġnew Identity ĊĊĠĠĠĠĠĠĠ Ġval Ġprofile Ġ= ĠProfile Model () ĊĠĠĠĠĠĠĠ Ġusername ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregist rar Profile . register ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtc Keys , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġst x Keys ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġupload Profile . upload ( profile , Ġkeys ) ĊĠĠĠĠĠĠĠ Ġupload Wallet . upload ( ident ities ) ĊĠĠĠĠĠĠĠ Ġidentity Repository . set ( ident ities ) ĊĊĠĠĠĠĠĠĠ ĠResult . success ( new Identity ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ ĠResult . failure ( e ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ