package Ġio . me how . labor atory . generator Ċ Ċ import Ġcom . squareup . kotlin po et . ClassName Ċ import Ġio . kot est . core . spec . style . Describe Spec Ċ import Ġio . me how . labor atory . generator . Visibility . Internal Ċ import Ġio . me how . labor atory . generator . Visibility . Public Ċ import Ġio . me how . labor atory . generator . test . should Specify Ċ import Ġjava . util . Locale Ċ Ċ internal Ġclass ĠS ourced Feature Storage Generator Spec Ġ: ĠDescribe Spec ({ ĊĠ Ġdescribe (" generated Ġfeature Ġstorage ") Ġ{ ĊĠĠĠ Ġit (" can Ġbe Ġinternal ") Ġ{ ĊĠĠĠĠĠ Ġval Ġmodel Ġ= ĠS ourced Feature Storage Model ( ĊĠĠĠĠĠĠĠĠĠ ĠClass Name (" io . me how ", Ġ" S ourced Generated Feature Storage "), ĊĠĠĠĠĠĠĠĠĠ Ġsource Names Ġ= ĠlistOf (" Firebase ", Ġ" S 3 "), ĊĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠInternal , ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġval Ġfile Spec Ġ= Ġmodel . prepare () ĊĊĠĠĠĠĠ Ġfile Spec Ġshould Specify Ġ""" ĊĠĠĠĠĠĠĠ Ġ| package Ġio . me how ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| import Ġio . me how . labor atory . Feature Storage ĊĠĠĠĠĠĠĠ Ġ| import Ġio . me how . labor atory . Feature Storage . Companion . s ourced ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . collections . Map ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . collections . empty Map ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . collections . plus ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . to ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| internal Ġfun ĠFeature Storage . Companion . s ourced Builder ( local Source : ĠFeature Storage ): ĠFirebase Step Ġ= ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ ĠBuilder ( local Source , Ġempty Map ()) ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| internal Ġinterface ĠFirebase Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġfirebase Source ( source : ĠFeature Storage ): ĠS 3 Step ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| internal Ġinterface ĠS 3 Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġs 3 Source ( source : ĠFeature Storage ): ĠBuilding Step ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| internal Ġinterface ĠBuilding Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġbuild (): ĠFeature Storage ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| private Ġdata Ġclass ĠBuilder ( ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġval Ġlocal Source : ĠFeature Storage , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġval Ġremote Sources : ĠMap < String , ĠFeature Storage > ĊĠĠĠĠĠĠĠ Ġ| ) Ġ: ĠFirebase Step , ĠS 3 Step , ĠBuilding Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun Ġfirebase Source ( source : ĠFeature Storage ): ĠS 3 Step Ġ= Ġcopy ( ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġremote Sources Ġ= Ġremote Sources Ġ+ Ġ(" Firebase " Ġto Ġsource ) ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ) ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun Ġs 3 Source ( source : ĠFeature Storage ): ĠBuilding Step Ġ= Ġcopy ( ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġremote Sources Ġ= Ġremote Sources Ġ+ Ġ(" S 3 " Ġto Ġsource ) ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ) ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun Ġbuild (): ĠFeature Storage Ġ= Ġs ourced ( local Source , Ġremote Sources ) ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġit (" can Ġbe Ġpublic ") Ġ{ ĊĠĠĠĠĠ Ġval Ġmodel Ġ= ĠS ourced Feature Storage Model ( ĊĠĠĠĠĠĠĠĠĠ ĠClass Name (" io . me how ", Ġ" S ourced Generated Feature Storage "), ĊĠĠĠĠĠĠĠĠĠ Ġsource Names Ġ= ĠlistOf (" Firebase ", Ġ" S 3 "), ĊĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠPublic , ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġval Ġfile Spec Ġ= Ġmodel . prepare () ĊĊĠĠĠĠĠ Ġfile Spec Ġshould Specify Ġ""" ĊĠĠĠĠĠĠĠ Ġ| package Ġio . me how ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| import Ġio . me how . labor atory . Feature Storage ĊĠĠĠĠĠĠĠ Ġ| import Ġio . me how . labor atory . Feature Storage . Companion . s ourced ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . collections . Map ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . collections . empty Map ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . collections . plus ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . to ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| public Ġfun ĠFeature Storage . Companion . s ourced Builder ( local Source : ĠFeature Storage ): ĠFirebase Step Ġ= ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ ĠBuilder ( local Source , Ġempty Map ()) ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| public Ġinterface ĠFirebase Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġfirebase Source ( source : ĠFeature Storage ): ĠS 3 Step ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| public Ġinterface ĠS 3 Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġs 3 Source ( source : ĠFeature Storage ): ĠBuilding Step ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| public Ġinterface ĠBuilding Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġbuild (): ĠFeature Storage ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| private Ġdata Ġclass ĠBuilder ( ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġval Ġlocal Source : ĠFeature Storage , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġval Ġremote Sources : ĠMap < String , ĠFeature Storage > ĊĠĠĠĠĠĠĠ Ġ| ) Ġ: ĠFirebase Step , ĠS 3 Step , ĠBuilding Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun Ġfirebase Source ( source : ĠFeature Storage ): ĠS 3 Step Ġ= Ġcopy ( ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġremote Sources Ġ= Ġremote Sources Ġ+ Ġ(" Firebase " Ġto Ġsource ) ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ) ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun Ġs 3 Source ( source : ĠFeature Storage ): ĠBuilding Step Ġ= Ġcopy ( ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġremote Sources Ġ= Ġremote Sources Ġ+ Ġ(" S 3 " Ġto Ġsource ) ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ) ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun Ġbuild (): ĠFeature Storage Ġ= Ġs ourced ( local Source , Ġremote Sources ) ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġit (" ign ores Ġduplicate Ġsource Ġnames ") Ġ{ ĊĠĠĠĠĠ Ġval Ġmodel Ġ= ĠS ourced Feature Storage Model ( ĊĠĠĠĠĠĠĠĠĠ ĠClass Name (" io . me how ", Ġ" S ourced Generated Feature Storage "), ĊĠĠĠĠĠĠĠĠĠ Ġsource Names Ġ= ĠlistOf (" Foo ", Ġ" Bar ", Ġ" B az ", Ġ" Foo ", Ġ" B az ", Ġ" Foo "), ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġval Ġfile Spec Ġ= Ġmodel . prepare () ĊĊĠĠĠĠĠ Ġfile Spec Ġshould Specify Ġ""" ĊĠĠĠĠĠĠĠ Ġ| package Ġio . me how ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| import Ġio . me how . labor atory . Feature Storage ĊĠĠĠĠĠĠĠ Ġ| import Ġio . me how . labor atory . Feature Storage . Companion . s ourced ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . collections . Map ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . collections . empty Map ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . collections . plus ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . to ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| internal Ġfun ĠFeature Storage . Companion . s ourced Builder ( local Source : ĠFeature Storage ): ĠBar Step Ġ= ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ ĠBuilder ( local Source , Ġempty Map ()) ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| internal Ġinterface ĠBar Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġbar Source ( source : ĠFeature Storage ): ĠB az Step ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| internal Ġinterface ĠB az Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġbaz Source ( source : ĠFeature Storage ): ĠFoo Step ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| internal Ġinterface ĠFoo Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġfoo Source ( source : ĠFeature Storage ): ĠBuilding Step ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| internal Ġinterface ĠBuilding Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġbuild (): ĠFeature Storage ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| private Ġdata Ġclass ĠBuilder ( ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġval Ġlocal Source : ĠFeature Storage , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġval Ġremote Sources : ĠMap < String , ĠFeature Storage > ĊĠĠĠĠĠĠĠ Ġ| ) Ġ: ĠBar Step , ĠB az Step , ĠFoo Step , ĠBuilding Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun Ġbar Source ( source : ĠFeature Storage ): ĠB az Step Ġ= Ġcopy ( ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġremote Sources Ġ= Ġremote Sources Ġ+ Ġ(" Bar " Ġto Ġsource ) ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ) ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun Ġbaz Source ( source : ĠFeature Storage ): ĠFoo Step Ġ= Ġcopy ( ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġremote Sources Ġ= Ġremote Sources Ġ+ Ġ(" B az " Ġto Ġsource ) ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ) ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun Ġfoo Source ( source : ĠFeature Storage ): ĠBuilding Step Ġ= Ġcopy ( ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġremote Sources Ġ= Ġremote Sources Ġ+ Ġ(" Foo " Ġto Ġsource ) ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ) ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun Ġbuild (): ĠFeature Storage Ġ= Ġs ourced ( local Source , Ġremote Sources ) ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġit (" ign ores Ġlocal Ġsource Ġname ") Ġ{ ĊĠĠĠĠĠ Ġval Ġlocal Per mutations Ġ= Ġ( 0 b 0 0 0 0 0 .. 0 b 1 1 1 1 1 ). map Ġ{ ĊĠĠĠĠĠĠĠ ĠlistOf ( it Ġand Ġ 0 b 0 0 0 0 1 , Ġit Ġand Ġ 0 b 0 0 0 1 0 , Ġit Ġand Ġ 0 b 0 0 1 0 0 , Ġit Ġand Ġ 0 b 0 1 0 0 0 , Ġit Ġand Ġ 0 b 1 0 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġmask Ġ-> Ġmask Ġ!= Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Indexed Ġ{ Ġindex , Ġmask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchars Ġ= Ġ" local "[ index ]. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mask ) Ġchars Ġelse Ġchars . replace First Char Ġ{ Ġchar Ġ-> Ġchar . title case ( Locale . ROOT ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. join ToString ( separator Ġ= Ġ"") ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġmodel Ġ= ĠS ourced Feature Storage Model ( ĊĠĠĠĠĠĠĠĠĠ ĠClass Name (" io . me how ", Ġ" S ourced Generated Feature Storage "), ĊĠĠĠĠĠĠĠĠĠ Ġsource Names Ġ= Ġlocal Per mutations Ġ+ Ġ" Foo ", ĊĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠPublic , ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġval Ġfile Spec Ġ= Ġmodel . prepare () ĊĊĠĠĠĠĠ Ġfile Spec Ġshould Specify Ġ""" ĊĠĠĠĠĠĠĠ Ġ| package Ġio . me how ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| import Ġio . me how . labor atory . Feature Storage ĊĠĠĠĠĠĠĠ Ġ| import Ġio . me how . labor atory . Feature Storage . Companion . s ourced ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . collections . Map ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . collections . empty Map ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . collections . plus ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . to ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| public Ġfun ĠFeature Storage . Companion . s ourced Builder ( local Source : ĠFeature Storage ): ĠFoo Step Ġ= ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ ĠBuilder ( local Source , Ġempty Map ()) ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| public Ġinterface ĠFoo Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġfoo Source ( source : ĠFeature Storage ): ĠBuilding Step ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| public Ġinterface ĠBuilding Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġbuild (): ĠFeature Storage ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| private Ġdata Ġclass ĠBuilder ( ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġval Ġlocal Source : ĠFeature Storage , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġval Ġremote Sources : ĠMap < String , ĠFeature Storage > ĊĠĠĠĠĠĠĠ Ġ| ) Ġ: ĠFoo Step , ĠBuilding Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun Ġfoo Source ( source : ĠFeature Storage ): ĠBuilding Step Ġ= Ġcopy ( ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġremote Sources Ġ= Ġremote Sources Ġ+ Ġ(" Foo " Ġto Ġsource ) ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ) ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun Ġbuild (): ĠFeature Storage Ġ= Ġs ourced ( local Source , Ġremote Sources ) ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġit (" can Ġhave Ġonly Ġlocal Ġsource ") Ġ{ ĊĠĠĠĠĠ Ġval Ġmodel Ġ= ĠS ourced Feature Storage Model ( ĊĠĠĠĠĠĠĠĠĠ ĠClass Name (" io . me how ", Ġ" S ourced Generated Feature Storage "), ĊĠĠĠĠĠĠĠĠĠ Ġsource Names Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠPublic , ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġval Ġfile Spec Ġ= Ġmodel . prepare () ĊĊĠĠĠĠĠ Ġfile Spec Ġshould Specify Ġ""" ĊĠĠĠĠĠĠĠ Ġ| package Ġio . me how ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| import Ġio . me how . labor atory . Feature Storage ĊĠĠĠĠĠĠĠ Ġ| import Ġio . me how . labor atory . Feature Storage . Companion . s ourced ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . collections . Map ĊĠĠĠĠĠĠĠ Ġ| import Ġkotlin . collections . empty Map ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| public Ġfun ĠFeature Storage . Companion . s ourced Builder ( local Source : ĠFeature Storage ): ĠBuilding Step Ġ= ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ ĠBuilder ( local Source , Ġempty Map ()) ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| public Ġinterface ĠBuilding Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġbuild (): ĠFeature Storage ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| private Ġdata Ġclass ĠBuilder ( ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġval Ġlocal Source : ĠFeature Storage , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġval Ġremote Sources : ĠMap < String , ĠFeature Storage > ĊĠĠĠĠĠĠĠ Ġ| ) Ġ: ĠBuilding Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun Ġbuild (): ĠFeature Storage Ġ= Ġs ourced ( local Source , Ġremote Sources ) ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }) Ċ