From 82963f13bf5e5d41d1055b2d11f5d77929a1dfda Mon Sep 17 00:00:00 2001
From: Zintarh <35270183+kateberryd@users.noreply.github.com>
Date: Mon, 2 Sep 2024 18:42:17 +0100
Subject: [PATCH] feat: account design conversion (#71)
* feat: account design conversion
* fix: minor fixes
---
wallet_app/android/.idea/other.xml | 66 ++++
wallet_app/android/app/.idea/.gitignore | 3 +
wallet_app/android/app/.idea/.name | 1 +
wallet_app/android/app/.idea/gradle.xml | 13 +
wallet_app/android/app/.idea/migrations.xml | 10 +
wallet_app/android/app/.idea/misc.xml | 10 +
wallet_app/android/app/.idea/other.xml | 318 ++++++++++++++++++
wallet_app/android/app/.idea/vcs.xml | 6 +
.../android/app/src/main/AndroidManifest.xml | 10 +
.../com/example/walletapp/AccountPassword.kt | 172 ++++++++++
.../com/example/walletapp/MainActivity.kt | 139 +++-----
.../walletapp/RecoveryPhraseActivity.kt | 304 +++++++++++++++++
.../com/example/walletapp/WalletActivity.kt | 210 ++++++++++++
.../src/main/res/drawable/arrow_back_ios.png | Bin 0 -> 197 bytes
.../src/main/res/drawable/check_circle.png | Bin 0 -> 711 bytes
.../src/main/res/drawable/check_symbol.png | Bin 0 -> 1269 bytes
.../app/src/main/res/drawable/copy.png | Bin 0 -> 218 bytes
.../app/src/main/res/drawable/progress_1.png | Bin 0 -> 159 bytes
.../app/src/main/res/drawable/progress_2.png | Bin 0 -> 162 bytes
.../src/main/res/drawable/starknet_icon.png | Bin 0 -> 8486 bytes
.../app/src/main/res/drawable/visibility.png | Bin 0 -> 340 bytes
.../src/main/res/drawable/visibility_off.png | Bin 0 -> 334 bytes
.../src/main/res/drawable/warning_sign.png | Bin 0 -> 1327 bytes
23 files changed, 1165 insertions(+), 97 deletions(-)
create mode 100644 wallet_app/android/app/.idea/.gitignore
create mode 100644 wallet_app/android/app/.idea/.name
create mode 100644 wallet_app/android/app/.idea/gradle.xml
create mode 100644 wallet_app/android/app/.idea/migrations.xml
create mode 100644 wallet_app/android/app/.idea/misc.xml
create mode 100644 wallet_app/android/app/.idea/other.xml
create mode 100644 wallet_app/android/app/.idea/vcs.xml
create mode 100644 wallet_app/android/app/src/main/java/com/example/walletapp/AccountPassword.kt
create mode 100644 wallet_app/android/app/src/main/java/com/example/walletapp/RecoveryPhraseActivity.kt
create mode 100644 wallet_app/android/app/src/main/java/com/example/walletapp/WalletActivity.kt
create mode 100644 wallet_app/android/app/src/main/res/drawable/arrow_back_ios.png
create mode 100644 wallet_app/android/app/src/main/res/drawable/check_circle.png
create mode 100644 wallet_app/android/app/src/main/res/drawable/check_symbol.png
create mode 100644 wallet_app/android/app/src/main/res/drawable/copy.png
create mode 100644 wallet_app/android/app/src/main/res/drawable/progress_1.png
create mode 100644 wallet_app/android/app/src/main/res/drawable/progress_2.png
create mode 100644 wallet_app/android/app/src/main/res/drawable/starknet_icon.png
create mode 100644 wallet_app/android/app/src/main/res/drawable/visibility.png
create mode 100644 wallet_app/android/app/src/main/res/drawable/visibility_off.png
create mode 100644 wallet_app/android/app/src/main/res/drawable/warning_sign.png
diff --git a/wallet_app/android/.idea/other.xml b/wallet_app/android/.idea/other.xml
index 4604c44..94c96f6 100644
--- a/wallet_app/android/.idea/other.xml
+++ b/wallet_app/android/.idea/other.xml
@@ -69,6 +69,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -91,6 +113,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -102,6 +135,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -146,6 +190,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -235,6 +290,17 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wallet_app/android/app/.idea/.gitignore b/wallet_app/android/app/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/wallet_app/android/app/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/wallet_app/android/app/.idea/.name b/wallet_app/android/app/.idea/.name
new file mode 100644
index 0000000..b2cf332
--- /dev/null
+++ b/wallet_app/android/app/.idea/.name
@@ -0,0 +1 @@
+ReceiverActivity.kt
\ No newline at end of file
diff --git a/wallet_app/android/app/.idea/gradle.xml b/wallet_app/android/app/.idea/gradle.xml
new file mode 100644
index 0000000..4019936
--- /dev/null
+++ b/wallet_app/android/app/.idea/gradle.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wallet_app/android/app/.idea/migrations.xml b/wallet_app/android/app/.idea/migrations.xml
new file mode 100644
index 0000000..f8051a6
--- /dev/null
+++ b/wallet_app/android/app/.idea/migrations.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wallet_app/android/app/.idea/misc.xml b/wallet_app/android/app/.idea/misc.xml
new file mode 100644
index 0000000..3040d03
--- /dev/null
+++ b/wallet_app/android/app/.idea/misc.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wallet_app/android/app/.idea/other.xml b/wallet_app/android/app/.idea/other.xml
new file mode 100644
index 0000000..94c96f6
--- /dev/null
+++ b/wallet_app/android/app/.idea/other.xml
@@ -0,0 +1,318 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wallet_app/android/app/.idea/vcs.xml b/wallet_app/android/app/.idea/vcs.xml
new file mode 100644
index 0000000..c2365ab
--- /dev/null
+++ b/wallet_app/android/app/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wallet_app/android/app/src/main/AndroidManifest.xml b/wallet_app/android/app/src/main/AndroidManifest.xml
index e6da76a..1ef4258 100644
--- a/wallet_app/android/app/src/main/AndroidManifest.xml
+++ b/wallet_app/android/app/src/main/AndroidManifest.xml
@@ -32,6 +32,16 @@
+
+
+
+
diff --git a/wallet_app/android/app/src/main/java/com/example/walletapp/AccountPassword.kt b/wallet_app/android/app/src/main/java/com/example/walletapp/AccountPassword.kt
new file mode 100644
index 0000000..7affb26
--- /dev/null
+++ b/wallet_app/android/app/src/main/java/com/example/walletapp/AccountPassword.kt
@@ -0,0 +1,172 @@
+package com.example.walletapp
+
+import android.app.Activity
+import android.content.Intent
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.activity.enableEdgeToEdge
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.material.IconButton
+import androidx.compose.material.Button
+import androidx.compose.material.ButtonDefaults
+import androidx.compose.material.TextField
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.ui.unit.dp
+import androidx.compose.material.Surface
+import androidx.compose.material.Text
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.sharp.ArrowBack
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.unit.sp
+import androidx.core.graphics.toColorInt
+import androidx.core.view.WindowCompat
+import com.example.walletapp.ui.theme.WalletappTheme
+
+class AccountPasswordActivity : ComponentActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ enableEdgeToEdge()
+ WindowCompat.setDecorFitsSystemWindows(window, true)
+ setContent {
+ WalletappTheme {
+ Surface(modifier = Modifier.fillMaxSize()) {
+ AccountPasswordScreenView(
+ modifier = Modifier.padding(10.dp)
+ )
+ }
+ }
+ }
+ }
+
+ @Composable
+ fun AccountPasswordScreenView(modifier: Modifier){
+ val (password, setPassword) = remember { mutableStateOf("") }
+ val (confirmPassword, setConfirmPassword) = remember { mutableStateOf("") }
+ val context = (LocalContext.current as Activity)
+
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .background(Color("#0C0C4F".toColorInt()))
+ .padding(16.dp),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.Center
+ ) {
+ Spacer(modifier = Modifier.height(20.dp))
+ Row(
+ modifier = Modifier
+ .fillMaxWidth(),
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ IconButton(onClick = { }) {
+ Image(
+ painter = painterResource(R.drawable.arrow_back_ios),
+ contentDescription = null,
+ modifier = Modifier.size(20.dp)
+ )
+ }
+ Text(
+ text = "Create Wallet Password",
+ color = Color.White,
+ fontSize = 18.sp,
+ fontFamily = FontFamily(Font(R.font.inter_regular)),
+ modifier = Modifier.weight(2f),
+ )
+ }
+ Spacer(modifier = Modifier.height(40.dp))
+ Text(
+ text = "Include letters, numbers & symbol for a strong password ",
+ fontFamily = FontFamily(Font(R.font.inter_regular)),
+ color = Color.White,
+ fontSize = 14.sp
+ )
+ Spacer(modifier = Modifier.height(20.dp))
+ TextField(
+ value = password,
+ onValueChange = { newValue -> setPassword(newValue) },
+ textStyle = TextStyle(
+ fontFamily = FontFamily(Font(R.font.inter_regular)),
+ color = Color.White,
+ fontSize = 15.sp
+ ),
+ placeholder = {
+ Text(
+ text = "Enter your password *",
+ fontFamily = FontFamily(Font(R.font.inter_regular)),
+ color = Color.White,
+ fontSize = 15.sp
+ )
+ },
+ keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, // Number-only keyboard
+ imeAction = ImeAction.Done),
+ modifier = Modifier.fillMaxWidth(),
+ )
+
+ Spacer(modifier = Modifier.height(20.dp))
+
+ TextField(
+ value = confirmPassword,
+ onValueChange = { newValue -> setConfirmPassword(newValue) },
+ textStyle = TextStyle(
+ fontFamily = FontFamily(Font(R.font.inter_regular)),
+ color = Color.White,
+ fontSize = 15.sp
+ ),
+ placeholder = {
+ Text(
+ text = "Confirm Password *",
+ fontFamily = FontFamily(Font(R.font.inter_regular)),
+ color = Color.White,
+ fontSize = 15.sp
+ )
+ },
+ keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, // Number-only keyboard
+ imeAction = ImeAction.Done),
+ modifier = Modifier.fillMaxWidth(),
+ )
+ Spacer(modifier = Modifier.weight(1f))
+ Image(
+ painterResource(id = R.drawable.progress_1),
+ contentDescription ="progress",
+ modifier = Modifier.fillMaxWidth().height(6.dp))
+
+ Spacer(modifier = Modifier.height(20.dp))
+ Button(
+ onClick = { val i = Intent(context, RecoveryPhraseActivity::class.java)
+ context.startActivity(i) },
+ colors = ButtonDefaults.buttonColors(backgroundColor = Color("#1B1B76".toColorInt())),
+ modifier = Modifier
+ .fillMaxWidth()
+ .height(49.dp)
+
+ ) {
+ Text(text = "Next", color = Color.White)
+ }
+ Spacer(modifier = Modifier.height(15.dp))
+ }
+
+ }
+}
diff --git a/wallet_app/android/app/src/main/java/com/example/walletapp/MainActivity.kt b/wallet_app/android/app/src/main/java/com/example/walletapp/MainActivity.kt
index 8513206..d71d006 100644
--- a/wallet_app/android/app/src/main/java/com/example/walletapp/MainActivity.kt
+++ b/wallet_app/android/app/src/main/java/com/example/walletapp/MainActivity.kt
@@ -7,6 +7,7 @@ import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.Image
+import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
@@ -18,26 +19,20 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Button
import androidx.compose.material.ButtonDefaults
import androidx.compose.material.Card
-import androidx.compose.material.Icon
import androidx.compose.material.Surface
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.font.Font
import androidx.compose.ui.text.font.FontFamily
-import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.core.graphics.toColorInt
@@ -52,7 +47,7 @@ class MainActivity : ComponentActivity() {
setContent {
WalletappTheme {
Surface(modifier = Modifier.fillMaxSize()) {
- Wallet(
+ CreateAccount(
modifier = Modifier.padding(10.dp)
)
}
@@ -61,10 +56,17 @@ class MainActivity : ComponentActivity() {
}
}
+
@Composable
-fun Wallet( modifier: Modifier) {
+fun StarknetLogo (modifier: Modifier = Modifier) {
+ Image(
+ painter = painterResource(id = R.drawable.starknet_icon ),
+ contentDescription = "Starknet Logo",
+ modifier = modifier.size(123.dp) )
+}
+@Composable
+fun CreateAccount( modifier: Modifier) {
val context = (LocalContext.current as Activity)
-
Column(
modifier = Modifier
.fillMaxSize()
@@ -72,7 +74,7 @@ fun Wallet( modifier: Modifier) {
.padding(20.dp)
) {
Text(
- text = "$11,625.48",
+ text = "Starknet Wallet",
fontFamily = FontFamily(Font(R.font.inter_regular)),
color = Color.White,
fontSize = 28.sp,
@@ -80,113 +82,56 @@ fun Wallet( modifier: Modifier) {
.align(Alignment.CenterHorizontally)
.padding(top = 70.dp)
)
- Text(
- text = "0xfoo...123",
- fontFamily = FontFamily(Font(R.font.inter_regular)),
- color = Color.White,
- fontSize = 16.sp,
+ Spacer(modifier = Modifier.height(50.dp))
+ StarknetLogo(
modifier = Modifier.align(Alignment.CenterHorizontally)
)
-
- Spacer(modifier = Modifier.height(32.dp))
-
- WalletCard(icon = painterResource(id = R.drawable.ic_ethereum), amount = "$11,625.7", exchange = 4.44 , type ="ETH" )
-
- WalletCard(icon = painterResource(id = R.drawable.token2), amount = "$1.78", exchange = 4.44 , type ="STRK" )
-
- Spacer(modifier = Modifier.height(32.dp))
-
- Text(
- text = "+ New Token",
- fontFamily = FontFamily(Font(R.font.publicsans_bold)),
- color = Color.White,
- fontSize = 14.sp,
- modifier = Modifier
- .clickable {
- val intent = Intent(context, AddTokenActivity::class.java)
- context.startActivity(intent)
- }
- .background(Color.Transparent)
- .padding(10.dp)
- .align(Alignment.CenterHorizontally)
- )
-
-
Spacer(modifier = Modifier.weight(1f))
- Row(
+ Column(
modifier = Modifier.fillMaxWidth(),
- horizontalArrangement = Arrangement.SpaceEvenly
+ verticalArrangement = Arrangement.spacedBy(8.dp) // Adjust space between buttons
) {
Button(
- onClick = { val i = Intent(context,ReceiverActivity::class.java)
+ onClick = { val i = Intent(context, AccountPasswordActivity::class.java)
context.startActivity(i) },
colors = ButtonDefaults.buttonColors(backgroundColor = Color("#1B1B76".toColorInt())),
- shape = RoundedCornerShape(15.dp),
+ shape = RoundedCornerShape(10.dp),
+ modifier = Modifier
+ .fillMaxWidth()
+ .height(48.dp)
) {
Text(
- text = "Receive", fontFamily = FontFamily(Font(R.font.publicsans_bold)),
+ text = "Create a New Wallet",
+ fontFamily = FontFamily(Font(R.font.inter_regular)),
color = Color.White,
- fontSize = 14.sp
+ fontSize = 17.sp
)
}
+
+ Spacer(modifier = Modifier.height(10.dp))
+
+
Button(
- onClick = {val i = Intent(context,SendActivity::class.java)
- context.startActivity(i)},
- colors = ButtonDefaults.buttonColors(backgroundColor = Color("#1B1B76".toColorInt())),
- shape = RoundedCornerShape(15.dp),
+ onClick = { val i = Intent(context, RecoveryPhraseActivity::class.java)
+ context.startActivity(i) },
+ colors = ButtonDefaults.buttonColors(backgroundColor = Color("#EC796B".toColorInt())),
+ shape = RoundedCornerShape(10.dp),
+ modifier = Modifier
+ .fillMaxWidth()
+ .height(49.dp)
) {
- Text(text = "Send", fontFamily = FontFamily(Font(R.font.publicsans_bold)),
- color = Color.White,
- fontSize = 14.sp)
- }
- }
- Spacer(modifier = Modifier.height(15.dp))
-}
-}
-
-@Composable
-fun WalletCard(icon: Painter,amount:String,exchange:Double,type:String){
- Card(
- backgroundColor = Color(0xFF1E1E96),
- modifier = Modifier
- .fillMaxWidth()
- .padding(vertical = 8.dp)
- ) {
- Row(
- verticalAlignment = Alignment.CenterVertically,
- modifier = Modifier
- .padding(16.dp)
- .fillMaxWidth()
- ) {
- Image(
- painter = icon, // replace with your Ethereum icon
- contentDescription = null,
- )
- Spacer(modifier = Modifier.weight(1f))
- Column(modifier = Modifier, horizontalAlignment = Alignment.End) {
Text(
- text = amount,
+ text = "Import Starknet Wallet",
fontFamily = FontFamily(Font(R.font.inter_regular)),
color = Color.White,
- fontSize = 18.sp
+ fontSize = 17.sp
)
- Row {
- Text(
- text = exchange.toString(),
- fontFamily = FontFamily(Font(R.font.inter_regular)),
- color = Color.White,
- fontSize = 10.sp
- )
- Text(
- text = type,
- fontFamily = FontFamily(Font(R.font.publicsans_bold)),
- color = Color.White,
- fontSize = 10.sp
- )
-
- }
-
}
}
+
+ Spacer(modifier = Modifier.height(15.dp))
}
}
+
+
+
diff --git a/wallet_app/android/app/src/main/java/com/example/walletapp/RecoveryPhraseActivity.kt b/wallet_app/android/app/src/main/java/com/example/walletapp/RecoveryPhraseActivity.kt
new file mode 100644
index 0000000..4ecef97
--- /dev/null
+++ b/wallet_app/android/app/src/main/java/com/example/walletapp/RecoveryPhraseActivity.kt
@@ -0,0 +1,304 @@
+package com.example.walletapp
+import android.app.Activity
+import android.content.Intent
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.compose.foundation.Image
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.lazy.grid.GridCells
+import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
+import androidx.compose.foundation.lazy.grid.items
+import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.*
+import androidx.compose.runtime.*
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import androidx.core.graphics.toColorInt
+import androidx.core.view.WindowCompat
+import androidx.navigation.NavController
+import androidx.navigation.compose.rememberNavController
+import androidx.compose.runtime.Composable
+import androidx.compose.material3.Text
+import androidx.compose.foundation.layout.fillMaxWidth
+import com.example.walletapp.ui.theme.WalletappTheme
+
+class RecoveryPhraseActivity : ComponentActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ WindowCompat.setDecorFitsSystemWindows(window, true)
+ setContent {
+ WalletappTheme {
+ val navController = rememberNavController()
+ Surface(modifier = Modifier.fillMaxSize()) {
+ RecoveryPhraseScreenView(
+ modifier = Modifier.padding(10.dp),
+ navController = navController
+ )
+ }
+ }
+ }
+ }
+
+ @Composable
+ fun RecoveryPhraseScreenView(modifier: Modifier, navController: NavController) {
+ var isVisible by remember { mutableStateOf(false) }
+ var showDialog by remember { mutableStateOf(false) }
+
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .background(Color("#0C0C4F".toColorInt()))
+ .padding(16.dp),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.Center
+ ) {
+ Spacer(modifier = Modifier.height(20.dp))
+ Row(
+ modifier = Modifier
+ .fillMaxWidth(),
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ IconButton(onClick = { navController.popBackStack() }) {
+ Image(
+ painter = painterResource(R.drawable.arrow_back_ios),
+ contentDescription = null,
+ modifier = Modifier.size(20.dp)
+ )
+ }
+ Text(
+ text = "Secret Recovery Seed Phrase",
+ color = Color.White,
+ fontSize = 18.sp,
+ fontFamily = FontFamily(Font(R.font.inter_regular)),
+ modifier = Modifier.weight(2f),
+ )
+ }
+ Spacer(modifier = Modifier.height(20.dp))
+ Text(
+ text = "Secure it now! This is your only way to recover your wallet if your Starknet wallet is deleted, or if your device is lost, stolen, or becomes unusable.",
+ fontFamily = FontFamily(Font(R.font.inter_regular)),
+ color = Color.White,
+ textAlign = TextAlign.Center,
+ fontSize = 14.sp
+ )
+ Spacer(modifier = Modifier.height(40.dp))
+
+ if (isVisible) SeedPhrases() else {
+ Column(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ ) {
+ Image(
+ painter = painterResource(id = R.drawable.warning_sign),
+ contentDescription = "warning",
+ modifier = Modifier.size(60.dp)
+ )
+ Spacer(modifier = Modifier.height(40.dp))
+ Text(
+ text = "Hope no one is looking at your screen",
+ fontFamily = FontFamily(Font(R.font.inter_regular)),
+ color = Color.White,
+ textAlign = TextAlign.Center,
+ fontSize = 15.sp
+ )
+ }
+ }
+
+ Spacer(modifier = Modifier.height(50.dp))
+
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.SpaceBetween
+ ) {
+ Button(
+ onClick = { isVisible = !isVisible },
+ colors = ButtonDefaults.buttonColors(backgroundColor = Color("#1B1B76".toColorInt())),
+ shape = RoundedCornerShape(8.dp),
+ modifier = Modifier
+ .width(150.dp)
+ .height(40.dp)
+ ) {
+ Image(
+ painter = painterResource(if (isVisible) R.drawable.visibility_off else R.drawable.visibility),
+ contentDescription = null,
+ modifier = Modifier.size(20.dp)
+ )
+ Spacer(modifier = Modifier.size(10.dp))
+ Text(
+ text = if (isVisible) "Hide" else "Show",
+ fontFamily = FontFamily(Font(R.font.inter_regular)),
+ color = Color.White,
+ fontSize = 14.sp
+ )
+ }
+
+ Button(
+ onClick = { /* Handle copy action */ },
+ colors = ButtonDefaults.buttonColors(backgroundColor = Color("#1B1B76".toColorInt())),
+ shape = RoundedCornerShape(8.dp),
+ modifier = Modifier
+ .width(150.dp)
+ .height(40.dp)
+ ) {
+ Image(
+ painter = painterResource(id = R.drawable.copy),
+ contentDescription = "copy",
+ modifier = Modifier.size(20.dp)
+ )
+ Spacer(modifier = Modifier.size(10.dp))
+ Text(
+ text = "Copy",
+ fontFamily = FontFamily(Font(R.font.publicsans_bold)),
+ color = Color.White,
+ fontSize = 14.sp
+ )
+ }
+ }
+
+ Spacer(modifier = Modifier.weight(1f))
+ Image(
+ painter = painterResource(id = R.drawable.progress_2),
+ contentDescription = "progress",
+ modifier = Modifier
+ .fillMaxWidth()
+ .height(6.dp)
+ )
+
+ Spacer(modifier = Modifier.height(20.dp))
+ Button(
+ onClick = { showDialog = !showDialog },
+ colors = ButtonDefaults.buttonColors(backgroundColor = Color("#1B1B76".toColorInt())),
+ modifier = Modifier
+ .fillMaxWidth()
+ .height(49.dp)
+ ) {
+ Text(text = "Next", color = Color.White, fontSize = 17.sp)
+ }
+
+ if (showDialog) {
+ CustomDialog(onDismiss = { showDialog = false })
+ }
+ Spacer(modifier = Modifier.height(15.dp))
+ }
+ }
+
+ @Composable
+ fun SeedPhrases() {
+ LazyVerticalGrid(
+ columns = GridCells.Fixed(2),
+ contentPadding = PaddingValues(8.dp),
+ modifier = Modifier.fillMaxWidth()
+ ) {
+ items(generateSeedWords()) { item ->
+ Row(
+ modifier = Modifier
+ .padding(8.dp)
+ .fillMaxWidth(),
+ horizontalArrangement = Arrangement.Start,
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ Box(
+ modifier = Modifier
+ .size(32.dp)
+ .background(Color("#1B1B76".toColorInt()), shape = CircleShape)
+ .wrapContentSize(Alignment.Center)
+ ) {
+ Text(
+ text = "${item.number}",
+ fontSize = 14.sp,
+ color = Color.White,
+ modifier = Modifier.align(Alignment.Center)
+ )
+ }
+ Spacer(modifier = Modifier.width(8.dp))
+ Text(text = item.text, fontSize = 16.sp, color = Color.White)
+ }
+ }
+ }
+ }
+}
+
+data class SeedWordItem(val number: Int, val text: String)
+
+fun generateSeedWords(): List {
+ val randomWords = listOf(
+ "apple", "banana", "cherry", "date", "elderberry", "fig", "grape", "honeydew",
+ "kiwi", "lemon", "mango", "nectarine", "orange", "papaya", "quince", "raspberry",
+ "strawberry", "tangerine", "ugli", "vanilla", "watermelon", "xigua", "yellow", "zucchini"
+ )
+ return List(12) { SeedWordItem(it + 1, randomWords.random()) }
+}
+
+@Composable
+fun CustomDialog(onDismiss: () -> Unit) {
+ val context = (LocalContext.current as Activity)
+ AlertDialog(
+ onDismissRequest = onDismiss,
+ title = {
+ Column(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(bottom = 16.dp),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.Center
+ ) {
+// Image(
+// painter = painterResource(id = R.drawable.check_symbol),
+// contentDescription = "success",
+// modifier = Modifier
+// .size(80.dp)
+// .background(Color.White, shape = CircleShape)
+// .padding(8.dp)
+// .align(Alignment.CenterHorizontally)
+// )
+ Spacer(modifier = Modifier.height(8.dp))
+ Text(
+ text = "Congratulations!",
+ fontSize = 20.sp,
+ color = Color.White,
+ textAlign = TextAlign.Center
+ )
+ }
+ },
+ text = {
+ Text(
+ text = "You’re done creating your wallet",
+ color = Color.White,
+ fontSize = 18.sp,
+ textAlign = TextAlign.Center
+ )
+ },
+ confirmButton = {
+ Button(
+ onClick = { val i = Intent(context, WalletActivity::class.java)
+ context.startActivity(i) },
+ modifier = Modifier
+ .fillMaxWidth()
+ .height(48.dp),
+ colors = ButtonDefaults.buttonColors(backgroundColor = Color("#2C74DD".toColorInt()))
+ ) {
+ Text(
+ text = "Let’s start!",
+ color = Color.White
+ )
+ }
+ },
+ shape = RoundedCornerShape(16.dp),
+ backgroundColor = Color("#0C0C4F".toColorInt()),
+ contentColor = Color.White,
+ modifier = Modifier
+ .width(500.dp)
+ .padding(8.dp)
+ )
+}
diff --git a/wallet_app/android/app/src/main/java/com/example/walletapp/WalletActivity.kt b/wallet_app/android/app/src/main/java/com/example/walletapp/WalletActivity.kt
new file mode 100644
index 0000000..2329842
--- /dev/null
+++ b/wallet_app/android/app/src/main/java/com/example/walletapp/WalletActivity.kt
@@ -0,0 +1,210 @@
+package com.example.walletapp
+
+import android.app.Activity
+import android.content.Intent
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.compose.foundation.Image
+import androidx.compose.ui.graphics.painter.Painter
+import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.Button
+import androidx.compose.material.ButtonDefaults
+import androidx.compose.material.Card
+import androidx.compose.material.Surface
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import androidx.core.graphics.toColorInt
+import androidx.core.view.WindowCompat
+import com.example.walletapp.ui.theme.WalletappTheme
+
+class WalletActivity : ComponentActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ WindowCompat.setDecorFitsSystemWindows(window, true)
+ setContent {
+ WalletappTheme {
+ Surface(modifier = Modifier.fillMaxSize()) {
+ Wallet(
+ modifier = Modifier.padding(10.dp),
+ )
+ }
+ }
+ }
+ }
+
+}
+
+
+ @Composable
+ fun Wallet(modifier: Modifier) {
+ val context = (LocalContext.current as Activity)
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .background(Color("#0C0C4F".toColorInt()))
+ .padding(20.dp)
+ ) {
+ Text(
+ text = "$11,625.48",
+ fontFamily = FontFamily(Font(R.font.inter_regular)),
+ color = Color.White,
+ fontSize = 28.sp,
+ modifier = Modifier
+ .align(Alignment.CenterHorizontally)
+ .padding(top = 70.dp)
+ )
+ Text(
+ text = "0xfoo...123",
+ fontFamily = FontFamily(Font(R.font.inter_regular)),
+ color = Color.White,
+ fontSize = 16.sp,
+ modifier = Modifier.align(Alignment.CenterHorizontally)
+ )
+
+ Spacer(modifier = Modifier.height(32.dp))
+
+ WalletCard(
+ icon = painterResource(id = R.drawable.ic_ethereum),
+ amount = "$11,625.7",
+ exchange = 4.44,
+ type = "ETH"
+ )
+
+ WalletCard(
+ icon = painterResource(id = R.drawable.token2),
+ amount = "$1.78",
+ exchange = 4.44,
+ type = "STRK"
+ )
+
+ Spacer(modifier = Modifier.height(32.dp))
+
+ Text(
+ text = "+ New Token",
+ fontFamily = FontFamily(Font(R.font.publicsans_bold)),
+ color = Color.White,
+ fontSize = 14.sp,
+ modifier = Modifier
+ .clickable {
+ val intent = Intent(context, AddTokenActivity::class.java)
+ context.startActivity(intent)
+ }
+ .background(Color.Transparent)
+ .padding(10.dp)
+ .align(Alignment.CenterHorizontally)
+ )
+
+
+ Spacer(modifier = Modifier.weight(1f))
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.SpaceEvenly
+ ) {
+ Button(
+ onClick = {
+ val i = Intent(context, ReceiverActivity::class.java)
+ context.startActivity(i)
+ },
+ colors = ButtonDefaults.buttonColors(backgroundColor = Color("#1B1B76".toColorInt())),
+ shape = RoundedCornerShape(15.dp),
+ ) {
+ Text(
+ text = "Receive", fontFamily = FontFamily(Font(R.font.publicsans_bold)),
+ color = Color.White,
+ fontSize = 14.sp
+ )
+ }
+ Button(
+ onClick = {
+ val i = Intent(context, SendActivity::class.java)
+ context.startActivity(i)
+ },
+
+ colors = ButtonDefaults.buttonColors(backgroundColor = Color("#1B1B76".toColorInt())),
+ shape = RoundedCornerShape(15.dp),
+ ) {
+ Text(
+ text = "Send", fontFamily = FontFamily(Font(R.font.publicsans_bold)),
+ color = Color.White,
+ fontSize = 14.sp
+ )
+ }
+ }
+ Spacer(modifier = Modifier.height(15.dp))
+ }
+ }
+
+ @Composable
+ fun WalletCard(icon: Painter, amount: String, exchange: Double, type: String) {
+ Card(
+ backgroundColor = Color(0xFF1E1E96),
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(vertical = 8.dp)
+ ) {
+ Row(
+ verticalAlignment = Alignment.CenterVertically,
+ modifier = Modifier
+ .padding(16.dp)
+ .fillMaxWidth()
+ ) {
+ Image(
+ painter = icon, // replace with your Ethereum icon
+ contentDescription = null,
+ )
+ Spacer(modifier = Modifier.weight(1f))
+ Column(modifier = Modifier, horizontalAlignment = Alignment.End) {
+ Text(
+ text = amount,
+ fontFamily = FontFamily(Font(R.font.inter_regular)),
+ color = Color.White,
+ fontSize = 18.sp
+ )
+ Row {
+ Text(
+ text = exchange.toString(),
+ fontFamily = FontFamily(Font(R.font.inter_regular)),
+ color = Color.White,
+ fontSize = 10.sp
+ )
+ Text(
+ text = type,
+ fontFamily = FontFamily(Font(R.font.publicsans_bold)),
+ color = Color.White,
+ fontSize = 10.sp
+ )
+
+ }
+
+ }
+ }
+ }
+ }
+
+
+
+
+
+
+
+
diff --git a/wallet_app/android/app/src/main/res/drawable/arrow_back_ios.png b/wallet_app/android/app/src/main/res/drawable/arrow_back_ios.png
new file mode 100644
index 0000000000000000000000000000000000000000..b55ddd764482d8b0516619cbfe452f97df39feaa
GIT binary patch
literal 197
zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-1!HlL
zyA#8@b22Z19F}xPUq=Rpjs4tz5?O)#C{Gv1kP61PQx9@7DDtqF9~VvPEL)&@W8u;x
z9KSv)Hwhl((fKjq<`dBeoHH!1I5exhuXvL(A-(gko=@H+Ssmw1vUb)z4*}Q$iB}J-R?Q
literal 0
HcmV?d00001
diff --git a/wallet_app/android/app/src/main/res/drawable/check_circle.png b/wallet_app/android/app/src/main/res/drawable/check_circle.png
new file mode 100644
index 0000000000000000000000000000000000000000..184ca50bb38da3f36c36e72c276ac889e3cf5684
GIT binary patch
literal 711
zcmV;&0yzDNP)aW#n}N}#MuOP5DB90LT-?r0OtgyH((d3aRkej
zls}#Mwi{z(8+DhAWO@9*=e_yw&z}$Q(hc(_=dM#$zn>Ze^brB;1Ym|iGaj3=^R0Su
zHU2LGzhgHTv`++O$Oo7a(s>q0PxuLU|O@2N{z&y(<3q
zL1H#1kOt=<2N4!4MW?l1z65^DZh(QD5R^G?u-hG-W)g@jl8t~HKzo&ot0`<@KRb5a
z0GtR3ARWc!T9XI~&*V*<`L^IG4Cyc8kF0T&|%zOA!#FmZoH^tY~bvH*_NsDdD2bSHX&T
zkLgF6faor8)SBjTl0sPsbu6oKn<9AgwlwCM1-n*qV}*pnKIMVyF2J!Ob^IKyw+iVi
zh}Y~cxS{RUwmi+Ez2a7(nDIKf&K=?TJ1cFP9gB+M$;{4dSJXK=hsc7cuef!{hF
z@UEVOpPrmh1u%_PbniN5X}PpQ%`N?x1|K>}tn3Si<>C{0MzKS)$)xj2bIj^rxmRXH
t1ZeCdP~ytODUaP5TpSg5uz*)km&UD_c*NvV1n6v`_qxHjdh}cEa
zK8`~RcqRH6d^-?@jy7vhi&E%^=ZhYKX~l#by)z>cLpM^glT#2f2f8CL-v4YxC=r!q
z@4va#9@C1&RCddAD;*z8P9
z%KfM=_%#TT@&0F^uXmqg-Su1dAbnv4);GE5cj!8cGlMqHA@bR=r(A^=|Iy*ZF<-Tvs$49&21DDA|Lem$DrW>drZ8a7_
z20hZYe1%fZ+0g7gefe*g{%zeghT06g-R)SnF8%eyE?29VW|H`3NlseRc?RZQOxjcIvSKCdgKf+;`>{#1ITA2bp{Oy3JSs*_G@
z>;y~(3BG!B(>Dj3C6o{#rs>rZi+n2R7kJI?v+{=oHhm8wnl?tSrr5dBLpiBG2LU19
zy!7kZjm~bYX`9!GY(1xiGt+nEessh1**|1&HnT?wx(Bo0SM9eFLkqvO
z;&`J9_3G@%!L8tU$MZA%bzs2(kG9;wXgBhm^&jU@X1q{45BH=%F;y6ODct8^PME^CjHEzJO5r_-B34#b5*+9W7A=>TW>jgt>IfAr0oTA@;N
zM&O^Lh2`&?Gf(q$S8Z4yF3{k7X#0g=j{nXUT%9*gXYO3KAll4x*0#L;d)sCLt!D6a
L^>bP0l+XkK56(>a
literal 0
HcmV?d00001
diff --git a/wallet_app/android/app/src/main/res/drawable/progress_1.png b/wallet_app/android/app/src/main/res/drawable/progress_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..4c84f61b4fc0300a744fefc043eda27279ad5e2a
GIT binary patch
literal 159
zcmeAS@N?(olHy`uVBq!ia0y~yV6+FanK{^iVM%xNb!1@J*w6hZkrl`{@pN$vsbGA2jZ=`pfa8dR#p9($l6x+=
zvquWftO#BEj*q!PQKdEgnIVIO+xuVJ7!N4yuNJ@NDL8fgg`LSj{S2P2elF{r5}E++
CZY!?<
literal 0
HcmV?d00001
diff --git a/wallet_app/android/app/src/main/res/drawable/progress_2.png b/wallet_app/android/app/src/main/res/drawable/progress_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..d4784b8dfe7ebf05047e330be9c5cec935f8d6a7
GIT binary patch
literal 162
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
URTcDg>;M1&07*qoM6N<$g6o03cK`qY
literal 0
HcmV?d00001
diff --git a/wallet_app/android/app/src/main/res/drawable/visibility.png b/wallet_app/android/app/src/main/res/drawable/visibility.png
new file mode 100644
index 0000000000000000000000000000000000000000..e09cc59c22e2611d011d9379559afefbad060107
GIT binary patch
literal 340
zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3HGrh2HJ~Qk(@Ik;M!Q+`=Ht$S`Y;1W=H%
zILO_JVcj{Imp~3nx}&cn1H;CC?mvmFK>kZl7srqa#@gUU!6pM99lr~_Z`iDulnt2j
z4zOL}Oklp@V19u20_O$Z8w=`8r<$?+f0y~**}q3y!W>yu;UIzNZ0a
zl)tUHLl71s7Za<4NXboXj_x$aNl#9!O9u3wbPc_uHWRj
zCG>HSZkwo&&Uzi0Id_WwwtYFZRN1gd*lvQVSp3w$`wMqB^K-pF*i`i-S)J#J@84$g
hlH2<|1n(CdkbV$9VNR`3YBv@>i
zn!fIL_?qP9ea>9J7b$Rdyt@>6-ifz(t-u!5iHymoESO_gsB_4Q2~IT071`D#T_+P4
zmlA6EhC5lPYGU~38Rxn8?Pt#Xq@ccSmDZ`<;ze1Ox139|6kD(Iu58p04HR18o
ci*tJU{hfX;U!-%u9q3&KPgg&ebxsLQ0C+@ung9R*
literal 0
HcmV?d00001
diff --git a/wallet_app/android/app/src/main/res/drawable/warning_sign.png b/wallet_app/android/app/src/main/res/drawable/warning_sign.png
new file mode 100644
index 0000000000000000000000000000000000000000..af764e8ad89107e9adcbcf5689357756e3f13df7
GIT binary patch
literal 1327
zcmV+~11K~#7F&6-VY
z8$}ey-zVcL{Qcg%nR&Aa
znt7PdWmB!zJQAh};Z?VgAbU_tH3F*wNPie)&Uz%;U$|;xtRAb9xO1WUZSc|x3Fq0<6W0_bAraBG~0{b7r)CbfkwFVhoRegO2j$e`9WmU
zJx7z(y+n0MaQo7VT9d(JK`7}QXeP=ERM+3X)cCW{)s6f8rVCa!y2DVvx@8L2z_4
zu_SP!T&||qMSb+;&CuU=g;5(>eLJb1P?*S1rQm@+%SW}vr(6W5t1ZHkOQn?T#y8~4~C$6
za6Tui23-zJTWCPzrNOXGfcFI_9l#LIVY?hrO$ovZ7-Epi8C@q4mW4$fV;17Z`(4b@
zyABFqPupcNQ~12XIb<+I{myOo$l~_zd;_N7uEV)H+kF_}jv8jQF7P}W-`|7gPd~cn
z6tRjO7p37_KDtp(&9=V=gRl^jVi+mpHXplrx!o%lt6*rq$IAd2S~j@bF0&h3FY&qU
z6{;A16@g-JTg0J1bL#x@0RFl8g_g{zA2q>V^Uk{it9`^SDycQl$TRQ0-xb4HCr-k#
zcg})N*gA8CCpzK^!62N}vgxJ_`1UU_y}va-A;x)?s?4KAH8+yvY#WZG@)5wck2S
zU@j*K&w~cI(XC&84wN^(8+#w13-7-M%K8g3h0T&uK6L9Z4*%ZzQjI}BxZ?Ozzk3_@
z@9G&`)ljoMXfru<2XFWC#cl9qBqs{Ot8<0T+@Pw^<%2bq$|0JYi6@5OMwl38_@;47
z?X%K^Y)!giwicre?#iX2skvTkBHYYRtQ9NYNKO9M;3=TozQzF{ju`iP7y(Wj
zt9_(He47MI7TM=Vc{L`{+gQ6R7Zwq5)s!&TDw3A_2hCW&g)z`C4AmG&J7Oxe9rd_4r8K4kRJ~9?k<2zoJ+*C`o~}N*So1E
lm7P&jtTN{Sl3F5+{{i>B002ovPDHLkV1j5WYOVkP
literal 0
HcmV?d00001