Showing preview only (1,258K chars total). Download the full file or copy to clipboard to get everything.
Repository: cashubtc/eNuts
Branch: master
Commit: c5fe87f1aa65
Files: 176
Total size: 1.1 MB
Directory structure:
gitextract_io1ldjbk/
├── .gitignore
├── .prettierignore
├── .prettierrc
├── AGENTS.md
├── TODO.md
├── app.json
├── assets/
│ ├── lottie/
│ │ ├── confetti.json
│ │ └── success.json
│ └── translations/
│ ├── de.json
│ ├── en.json
│ ├── es.json
│ ├── it.json
│ ├── ru.json
│ └── th.json
├── eas.json
├── expo-router-implementation-steps.md
├── expo-router-migration-issues.md
├── expo-router-migration-plan.md
├── index.ts
├── package.json
├── src/
│ ├── components/
│ │ ├── ActionButtons.tsx
│ │ ├── AmountInput.tsx
│ │ ├── AnimatedSpinner.tsx
│ │ ├── App.tsx
│ │ ├── Balance.tsx
│ │ ├── Blank.tsx
│ │ ├── Button.tsx
│ │ ├── Card.tsx
│ │ ├── Copy.tsx
│ │ ├── DashboardTopBar.tsx
│ │ ├── Empty.tsx
│ │ ├── Icons.tsx
│ │ ├── InputAndLabel.tsx
│ │ ├── Loading.tsx
│ │ ├── Logo.tsx
│ │ ├── MintBalance.tsx
│ │ ├── MintHeaderSelector.tsx
│ │ ├── MintSelectionSheet.tsx
│ │ ├── MintSelector.tsx
│ │ ├── Option.tsx
│ │ ├── OverviewRow.tsx
│ │ ├── Progress.tsx
│ │ ├── QR.tsx
│ │ ├── RadioBtn.tsx
│ │ ├── Screen.tsx
│ │ ├── Separator.tsx
│ │ ├── SwipeButton.tsx
│ │ ├── Toaster.tsx
│ │ ├── Toggle.tsx
│ │ ├── Txt.tsx
│ │ ├── TxtInput.tsx
│ │ ├── animation/
│ │ │ └── Shake.ts
│ │ ├── hooks/
│ │ │ ├── AnimatedQr.ts
│ │ │ ├── Copy.tsx
│ │ │ ├── Loading.tsx
│ │ │ ├── useCashuClaimFlow.ts
│ │ │ ├── useDiscoverMints.ts
│ │ │ ├── useNfcPayment.ts
│ │ │ └── useUrDecoder.ts
│ │ ├── modal/
│ │ │ ├── ConfirmBottomSheet.tsx
│ │ │ ├── ConfirmationModal.tsx
│ │ │ ├── MeltConfirmationModal.tsx
│ │ │ ├── NfcPaymentModal.tsx
│ │ │ ├── OperationMintPanel.tsx
│ │ │ ├── SendConfirmationModal.tsx
│ │ │ ├── TrustMintBottomSheet.tsx
│ │ │ ├── TrustMintProvider.tsx
│ │ │ └── index.tsx
│ │ └── nav/
│ │ ├── Navigator.tsx
│ │ ├── TopNav.tsx
│ │ └── utils.ts
│ ├── config/
│ │ ├── config.base.ts
│ │ ├── config.dev.ts
│ │ ├── config.prod.ts
│ │ └── index.ts
│ ├── consts/
│ │ ├── env.ts
│ │ ├── index.ts
│ │ ├── time.ts
│ │ └── urls.ts
│ ├── context/
│ │ ├── Balance.tsx
│ │ ├── Currency.tsx
│ │ ├── KnownMints.tsx
│ │ ├── Linking.tsx
│ │ ├── Manager.tsx
│ │ ├── NfcAmountLimits.tsx
│ │ ├── Npc.tsx
│ │ ├── Privacy.tsx
│ │ ├── Prompt.tsx
│ │ └── Theme.tsx
│ ├── i18n.ts
│ ├── i18next.d.ts
│ ├── logger/
│ │ ├── AppLogger.ts
│ │ └── index.ts
│ ├── model/
│ │ ├── env.ts
│ │ ├── i18n.ts
│ │ ├── index.ts
│ │ └── nav.ts
│ ├── nav/
│ │ ├── HistoryNavigator.tsx
│ │ ├── MintNavigator.tsx
│ │ ├── RestoreNavigator.tsx
│ │ ├── SettingsNavigator.tsx
│ │ └── navTypes.ts
│ ├── screens/
│ │ ├── Dashboard.tsx
│ │ ├── DashboardActionSheet.tsx
│ │ ├── ErrorScreen/
│ │ │ ├── ErrorBoundary.tsx
│ │ │ └── ErrorDetails.tsx
│ │ ├── History/
│ │ │ ├── Details.tsx
│ │ │ ├── components/
│ │ │ │ ├── DetailsSection.tsx
│ │ │ │ ├── HistoryDetailsScreen.tsx
│ │ │ │ ├── HistoryOverview.tsx
│ │ │ │ ├── LatestHistory.tsx
│ │ │ │ ├── LatestHistoryMeltEntry.tsx
│ │ │ │ ├── LatestHistoryMintEntry.tsx
│ │ │ │ ├── LatestHistoryReceiveEntry.tsx
│ │ │ │ ├── LatestHistorySendEntry.tsx
│ │ │ │ ├── LatestHistoryWrapper.tsx
│ │ │ │ ├── MeltHistoryDetails.tsx
│ │ │ │ ├── MintHistoryDetails.tsx
│ │ │ │ ├── ReceiveHistoryDetails.tsx
│ │ │ │ ├── SendHistoryDetails.tsx
│ │ │ │ └── TokenSection.tsx
│ │ │ ├── entryTime.tsx
│ │ │ └── index.tsx
│ │ ├── Mints/
│ │ │ ├── AddMintScreen.tsx
│ │ │ ├── MintHomeScreen.tsx
│ │ │ ├── MintSettingsScreen.tsx
│ │ │ ├── components/
│ │ │ │ ├── MetadataItem.tsx
│ │ │ │ └── MintItem.tsx
│ │ │ └── index.ts
│ │ ├── Onboarding.tsx
│ │ ├── Payment/
│ │ │ ├── MeltInput.tsx
│ │ │ ├── MintSelectAmount.tsx
│ │ │ ├── Processing.tsx
│ │ │ ├── ProcessingError.tsx
│ │ │ ├── Receive/
│ │ │ │ └── Invoice.tsx
│ │ │ ├── Send/
│ │ │ │ ├── CoinSelection.tsx
│ │ │ │ └── EncodedToken.tsx
│ │ │ ├── SendSelectAmount.tsx
│ │ │ ├── Success.tsx
│ │ │ └── SuccessScreen.tsx
│ │ ├── QRScan/
│ │ │ ├── QrScannerScreen.tsx
│ │ │ ├── components/
│ │ │ │ └── CameraPermission.tsx
│ │ │ └── hooks/
│ │ │ └── useScanResult.ts
│ │ ├── Restore/
│ │ │ ├── Recover.tsx
│ │ │ ├── Recovering.tsx
│ │ │ └── SelectRecoveryMint.tsx
│ │ └── Settings/
│ │ ├── Currency.tsx
│ │ ├── Display.tsx
│ │ ├── Language.tsx
│ │ ├── MenuItem.tsx
│ │ ├── NfcSettings.tsx
│ │ ├── NpcSettings.tsx
│ │ ├── ViewMnemonic.tsx
│ │ └── index.tsx
│ ├── services/
│ │ ├── ExchangeRateService.ts
│ │ ├── NFCService.ts
│ │ ├── NpcService.ts
│ │ └── SeedService.ts
│ ├── shim.ts
│ ├── storage/
│ │ ├── DbProvider.ts
│ │ ├── dev.ts
│ │ └── store/
│ │ ├── SecureStore.ts
│ │ ├── consts.ts
│ │ ├── index.ts
│ │ └── theme.ts
│ ├── styles/
│ │ ├── colors.ts
│ │ ├── globals.ts
│ │ └── index.ts
│ └── util/
│ ├── index.ts
│ ├── lnurl.ts
│ ├── localization.ts
│ ├── lud16.ts
│ ├── paymentStringParser.ts
│ └── typeguards.ts
├── tsconfig.json
└── zapstore.yaml
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files
# dependencies
node_modules/
# Expo
.expo/
dist/
web-build/
expo-env.d.ts
/android/
/ios/
# Native
.kotlin/
*.orig.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
# Metro
.metro-health-check*
# debug
npm-debug.*
yarn-debug.*
yarn-error.*
# macOS
.DS_Store
*.pem
# local env files
.env*.local
# typescript
*.tsbuildinfo
================================================
FILE: .prettierignore
================================================
# Dependencies
node_modules
# Build outputs
dist
build
.expo
# Native builds
android
ios
# Lock files
package-lock.json
yarn.lock
pnpm-lock.yaml
# Coverage
coverage
# Generated files
*.generated.*
.expo-shared
# Misc
.git
*.log
================================================
FILE: .prettierrc
================================================
{
"semi": true,
"singleQuote": false,
"tabWidth": 2,
"useTabs": false,
"trailingComma": "all",
"bracketSpacing": true,
"arrowParens": "always",
"printWidth": 100,
"jsxSingleQuote": false
}
================================================
FILE: AGENTS.md
================================================
# AGENTS.md — eNuts
## Overview
- Expo + React Native app written in TypeScript.
- `strict` TypeScript enabled in `tsconfig.json`.
- Entry is `index.ts`; app config in `app.json`.
- Source lives in `src/` with components, screens, services, context, storage, util.
- Styling uses `react-native-size-matters` and shared `@styles` theme helpers.
- i18n uses `react-i18next` with translations in `assets/translations`.
## Commands
### Install
- `npm install`
### Run (Expo)
- `npm run start` (Expo dev server)
- `npm run android` (run Android device/emulator)
- `npm run ios` (run iOS simulator)
### Formatting
- `npm run format` (Prettier, repo-wide)
### Build (EAS)
- `npx eas build --profile development`
- `npx eas build --profile preview`
- `npx eas build --profile production`
- Profiles are defined in `eas.json`; requires EAS auth.
### Linting
- No lint script configured in `package.json`.
- If adding lint, keep it opt-in and align with Prettier.
### Tests
- No test runner configured in `package.json`.
- No single-test command available yet.
- If you introduce Jest later, use `npx jest path/to/test -t "name"` (convention only).
## Project layout
- `src/components/` reusable UI components and hooks.
- `src/screens/` screen-level components and flows.
- `src/context/` React context providers and hooks.
- `src/services/` app services (seed, NFC, exchange rates).
- `src/storage/` persistence and database helpers.
- `src/styles/` theme colors and globals.
- `src/util/` shared utilities.
- `assets/` images, lottie, translations.
## Imports and modules
- Prefer path aliases from `tsconfig.json` (`@src`, `@comps`, `@styles`, `@model`, etc.).
- Keep alias imports grouped together at the top.
- Follow with external packages, then relative imports.
- Use `import type` for type-only imports.
- Avoid unused imports; rely on TypeScript to catch issues.
## Formatting and structure
- Prettier settings: semicolons, double quotes, `printWidth: 100`, trailing commas.
- Indentation is 2 spaces; no tabs.
- Keep JSX props each on new line when long.
- Keep objects and arrays trailing commas for easier diffs.
- Prefer `const` and `function` declarations over `let`.
- Avoid inline comments unless requested.
## Types and naming
- Use TypeScript everywhere; avoid `any` unless unavoidable.
- Prefer `interface` for props and object shapes; prefix with `I` (e.g., `IButtonProps`).
- Use `type` for unions/utility types; prefix with `T` for nav props (e.g., `TDisplaySettingsPageProps`).
- Component names are `PascalCase`; hooks are `useCamelCase`.
- Constants are `SCREAMING_SNAKE_CASE` in `consts/`.
- File names are `PascalCase` for components, `camelCase` for utilities.
## Components and styling
- Components generally use `export default function ComponentName(...)`.
- Use `useThemeContext` for theme colors and highlight selection.
- Prefer `globals(...)` and `@styles` helpers over hard-coded values.
- Size spacing with `s()` / `ScaledSheet` from `react-native-size-matters`.
- Use `TouchableOpacity` with `accessibilityRole="button"` where appropriate.
- Include `testID` attributes when there is an existing pattern.
## State and context
- Context providers live in `src/context/` and are exported as hooks.
- Keep derived values memoized (`useMemo`) when depending on theme or context.
- Persist preferences via `@src/storage` helpers.
- Avoid side effects in render; use `useEffect`.
## Error handling and logging
- Use `try/catch` for async boundaries; log errors via `l` from `@log`.
- Return `null`/fallback values when a feature can gracefully degrade.
- Throw errors in services only for unrecoverable state (e.g., missing mnemonic).
- Avoid swallowing errors without logging.
## i18n and strings
- Use `useTranslation` and `NS` namespaces for UI strings.
- Add translations to `assets/translations/*.json` when new keys are introduced.
- Keep user-visible strings out of services/utilities where possible.
## Data and storage
- Sensitive data uses `expo-secure-store` abstractions in `src/storage`.
- Keep data models in `src/model/` and re-export via `@model`.
- Prefer typed storage accessors over raw `SecureStore` calls.
## Networking
- Use `fetch` with typed responses where possible.
- Validate input strings before network calls (e.g., LNURL parsing).
- Handle `.onion` domains via `http` when required.
## Navigation
- Navigation types live in `src/model/nav.ts` and `src/nav/navTypes.ts`.
- Screen components should accept typed nav props.
## Testing notes
- There are currently no test files or test scripts.
- If you add tests, keep them colocated with features or in a `__tests__` folder.
- Prefer deterministic tests and avoid network calls; mock where needed.
## Formatting quick check
- Run `npm run format` before submitting changes.
- If format changes are large, scope to touched files when possible.
## Cursor/Copilot rules
- No `.cursor/rules/`, `.cursorrules`, or `.github/copilot-instructions.md` found.
- If added later, follow them as higher priority.
## PR hygiene (if contributing)
- Keep commits focused and small.
- Avoid unrelated refactors during feature work.
- Note any missing tests in PR description.
## Common pitfalls
- Don’t hard-code colors; use theme helpers.
- Don’t bypass `SecureStore` for secrets.
- Ensure `await` is used for async storage calls.
- Avoid using `any` to silence type errors.
## File references
- `package.json` for scripts.
- `.prettierrc` for formatting.
- `tsconfig.json` for path aliases and strict mode.
- `app.json` and `eas.json` for Expo/EAS config.
## Notes for agents
- Respect existing patterns and naming.
- Keep changes minimal and localized.
- Ask before adding new dependencies.
- Avoid writing new docs unless requested.
- Use `edit` tool for modifications.
- Re-run formatting after structural refactors.
- Update translation files for any new UI string.
- Ensure navigation types stay in sync.
- Keep sample data localized to dev builds.
================================================
FILE: TODO.md
================================================
# TODO
## Typecheck cleanup
These are the best next targets because they block `npx tsc --noEmit` from being useful as a regression check.
- [x] Remove stale `selectMintToSwapTo` route.
- Removed the unreachable route registration, route type, screen prop type, and screen file.
- [ ] Fix stale route types in `src/components/Empty.tsx`.
- Current type references old routes: `"nostrReceive"` and `"qr scan"`.
- Replace with a generic `NativeStackNavigationProp<RootStackParamList>` or a narrower current route type.
- [ ] Clean up payment overview residue in `src/screens/Payment/Send/CoinSelection.tsx`.
- Remove the missing `_testmintUrl` import from `@consts`.
- Check whether `url`, `scanned`, and `trustMintRef` are still needed.
- [ ] Fix utility module type errors in `src/util/index.ts`.
- Import or remove the `IContact` dependency used by `uniqByIContacts`.
- Fix `decodeLnInvoice`, which currently calls `decodeInvoice` without an import/provider.
- [ ] Fix environment typing in `src/consts/env.ts`.
- TypeScript cannot resolve the `expo-constants` import from the root dependency graph.
- Add declarations or remove direct global references for `__TEST__` and `jest`.
- [ ] Fix i18n key typing errors.
- `src/components/MintSelectionSheet.tsx` has a union key call for `"selectMint" | "selectMints"` that does not satisfy the typed `t` overload.
- `src/screens/Payment/Processing.tsx` has a similar dynamic key issue for processing status strings.
## Parser/payment follow-ups
- [ ] Add a QR chooser for unified requests with multiple supported candidates.
- Current QR policy chooses by priority.
- A chooser is better when a unified request contains both a Cashu payment request and a Lightning invoice.
- [ ] Implement Cashu payment request execution from QR.
- QR currently recognizes `cashuPaymentRequest` candidates but shows an unsupported prompt.
- NFC already extracts and executes Cashu payment requests through `manager.paymentRequests`.
- [ ] Add focused parser coverage once a test runner exists.
- Direct Cashu token.
- Direct Lightning invoice.
- Lightning address.
- LNURL.
- Direct `creq...`.
- `bitcoin:` with address plus `lightning=...`.
- `bitcoin:` with `creq=...`.
- `bitcoin:` with multiple supported fallbacks.
## Lower-priority cleanup
- [ ] Reduce noisy debug logging in `src/shim.ts`.
- It logs crypto polyfill setup details on startup.
- [ ] Review `src/screens/Payment/MeltInput.tsx` for extraction opportunities.
- The file is large and still owns request parsing, LNURL amount flow, mint selection, operation preparation, confirmation, cancellation, and success routing.
- Do this after typecheck is cleaner, so behavior changes are easier to validate.
- [ ] Review broad `any` and modal backdrop types.
- Several bottom-sheet components type backdrop props as `any`.
- This is lower priority than the current typecheck blockers.
================================================
FILE: app.json
================================================
{
"expo": {
"name": "eNuts",
"slug": "enuts",
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/app-icon-all.png",
"userInterfaceStyle": "automatic",
"newArchEnabled": true,
"splash": {
"image": "./assets/splash.png",
"resizeMode": "contain",
"backgroundColor": "#5DB075"
},
"ios": {
"supportsTablet": true,
"bundleIdentifier": "com.cypherbase.eNuts",
"entitlements": {
"com.apple.developer.nfc.readersession.formats": ["TAG"]
},
"infoPlist": {
"ITSAppUsesNonExemptEncryption": false
}
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/app-icon-android-adaptive-foreground.png",
"backgroundImage": "./assets/app-icon-android-adaptive-background.png",
"backgroundColor": "#ffffff"
},
"edgeToEdgeEnabled": true,
"permissions": ["android.permission.CAMERA", "android.permission.NFC"],
"package": "com.cypherbase.eNuts"
},
"plugins": [
"expo-sqlite",
"expo-secure-store",
"expo-localization",
[
"expo-camera",
{
"cameraPermission": "Allow $(PRODUCT_NAME) to access your camera to scan QR codes",
"microphonePermission": "Allow $(PRODUCT_NAME) to access your microphone for video recording",
"recordAudioAndroid": false
}
],
[
"react-native-nfc-manager",
{
"selectIdentifiers": ["D2760000850101", "D2760000850100"],
"includeNdefEntitlement": false
}
]
],
"extra": {
"eas": {
"projectId": "3cc1ef51-5bef-42a4-8b6b-a1bb802d46a4"
}
},
"owner": "egge"
}
}
================================================
FILE: assets/lottie/confetti.json
================================================
{
"v": "5.5.6",
"fr": 60,
"ip": 0,
"op": 300,
"w": 609,
"h": 812,
"nm": "lottie (mobile)",
"ddd": 0,
"assets": [
{
"id": "comp_0",
"layers": [
{
"ddd": 0,
"ind": 1,
"ty": 0,
"nm": "_small-side",
"refId": "comp_1",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 0,
"k": 0,
"ix": 10
},
"p": {
"a": 0,
"k": [218, 320, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [400, 400, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [-100, 100, 100],
"ix": 6
}
},
"ao": 0,
"w": 800,
"h": 800,
"ip": 15,
"op": 234,
"st": 15,
"bm": 0
}
]
},
{
"id": "comp_1",
"layers": [
{
"ddd": 0,
"ind": 1,
"ty": 4,
"nm": "streamer b",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 0,
"k": 166,
"ix": 10
},
"p": {
"a": 0,
"k": [554, 664, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [-157, -245, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100, 100],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ind": 0,
"ty": "sh",
"ix": 1,
"ks": {
"a": 0,
"k": {
"i": [
[0, 0],
[-1.685, -13.314],
[0, -14.907],
[0, -15.206],
[0, -14.907],
[0, -14.907],
[0, -15.206],
[1.754, -14.206],
[-3.934, -9.465]
],
"o": [
[-3.895, 8.562],
[1.872, 14.789],
[0, 15.206],
[0, 14.907],
[0, 14.907],
[0, 15.206],
[0, 14.314],
[-1.803, 14.605],
[0, 0]
],
"v": [
[-156.5, -406],
[-166.5, -367],
[-146.5, -327],
[-166.5, -286],
[-146.5, -246],
[-166.5, -206],
[-146.5, -165],
[-166.5, -127],
[-156.5, -84]
],
"c": false
},
"ix": 2
},
"nm": "Path 1",
"mn": "ADBE Vector Shape - Group",
"hd": false
},
{
"ty": "st",
"c": {
"a": 0,
"k": [1, 0.2627450980392157, 0.2, 1],
"ix": 3
},
"o": {
"a": 0,
"k": 100,
"ix": 4
},
"w": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 9,
"s": [4]
},
{
"t": 57,
"s": [0.5]
}
],
"ix": 5
},
"lc": 2,
"lj": 2,
"bm": 0,
"nm": "Stroke 1",
"mn": "ADBE Vector Graphic - Stroke",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Shape 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
},
{
"ty": "tm",
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 14,
"s": [0]
},
{
"t": 57,
"s": [100]
}
],
"ix": 1
},
"e": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 9,
"s": [0]
},
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 14,
"s": [35]
},
{
"t": 57,
"s": [100]
}
],
"ix": 2
},
"o": {
"a": 0,
"k": 0,
"ix": 3
},
"m": 1,
"ix": 2,
"nm": "Trim Paths 1",
"mn": "ADBE Vector Filter - Trim",
"hd": false
}
],
"ip": 9,
"op": 58,
"st": 9,
"bm": 0
},
{
"ddd": 0,
"ind": 2,
"ty": 4,
"nm": "streamer a",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 0,
"k": 167,
"ix": 10
},
"p": {
"a": 0,
"k": [532, 582, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [-157, -245, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [-100, 100, 100],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ind": 0,
"ty": "sh",
"ix": 1,
"ks": {
"a": 0,
"k": {
"i": [
[0, 0],
[-1.685, -13.314],
[0, -14.907],
[0, -15.206],
[0, -14.907],
[0, -14.907],
[0, -15.206],
[1.754, -14.206],
[-3.934, -9.465]
],
"o": [
[-3.895, 8.562],
[1.872, 14.789],
[0, 15.206],
[0, 14.907],
[0, 14.907],
[0, 15.206],
[0, 14.314],
[-1.803, 14.605],
[0, 0]
],
"v": [
[-156.5, -406],
[-166.5, -367],
[-146.5, -327],
[-166.5, -286],
[-146.5, -246],
[-166.5, -206],
[-146.5, -165],
[-166.5, -127],
[-156.5, -84]
],
"c": false
},
"ix": 2
},
"nm": "Path 1",
"mn": "ADBE Vector Shape - Group",
"hd": false
},
{
"ty": "st",
"c": {
"a": 0,
"k": [1, 0.12156862745098039, 0.5647058823529412, 1],
"ix": 3
},
"o": {
"a": 0,
"k": 100,
"ix": 4
},
"w": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 5,
"s": [4]
},
{
"t": 48,
"s": [0.5]
}
],
"ix": 5
},
"lc": 2,
"lj": 2,
"bm": 0,
"nm": "Stroke 1",
"mn": "ADBE Vector Graphic - Stroke",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Shape 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
},
{
"ty": "tm",
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 10,
"s": [0]
},
{
"t": 48,
"s": [100]
}
],
"ix": 1
},
"e": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 5,
"s": [0]
},
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 10,
"s": [35]
},
{
"t": 48,
"s": [100]
}
],
"ix": 2
},
"o": {
"a": 0,
"k": 0,
"ix": 3
},
"m": 1,
"ix": 2,
"nm": "Trim Paths 1",
"mn": "ADBE Vector Filter - Trim",
"hd": false
}
],
"ip": 5,
"op": 49,
"st": 5,
"bm": 0
},
{
"ddd": 0,
"ind": 3,
"ty": 4,
"nm": "circle a",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 1,
"s": [0]
},
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.333],
"y": [0]
},
"t": 29,
"s": [321.019]
},
{
"t": 158,
"s": [1800]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.667,
"y": 1
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 1,
"s": [599.5, 838, 0],
"to": [-30, -106.667, 0],
"ti": [46.667, 0, 0]
},
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.333,
"y": 0
},
"t": 29,
"s": [419.5, 198, 0],
"to": [-46.667, 0, 0],
"ti": [0, 0, 0]
},
{
"t": 158,
"s": [319.5, 838, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667, 0.667, 0.667],
"y": [1, 1, 1]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0.167, 0, 0]
},
"t": 1,
"s": [50, 100, 100]
},
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [1, 0.833, 1]
},
"o": {
"x": [0.333, 0.333, 0.333],
"y": [0, 0, 0]
},
"t": 29,
"s": [100, 100, 100]
},
{
"t": 128,
"s": [100, 50, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"d": 1,
"ty": "el",
"s": {
"a": 0,
"k": [16, 16],
"ix": 2
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 3
},
"nm": "Ellipse Path 1",
"mn": "ADBE Vector Shape - Ellipse",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [0.12156862745098039, 0.8431372549019608, 1, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Ellipse 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 1,
"op": 159,
"st": 1,
"bm": 0
},
{
"ddd": 0,
"ind": 4,
"ty": 4,
"nm": "circle b",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 50,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 3,
"s": [0]
},
{
"t": 128,
"s": [1440]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.667,
"y": 1
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 3,
"s": [599.5, 838, 0],
"to": [-26.667, -93.333, 0],
"ti": [66.667, 0, 0]
},
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.333,
"y": 0
},
"t": 21,
"s": [439.5, 278, 0],
"to": [-66.667, 0, 0],
"ti": [0, 0, 0]
},
{
"t": 128,
"s": [199.5, 838, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667, 0.667, 0.667],
"y": [1, 1, 1]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0.167, 0, 0]
},
"t": 3,
"s": [50, 100, 100]
},
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [1, 0.833, 1]
},
"o": {
"x": [0.333, 0.333, 0.333],
"y": [0, 0, 0]
},
"t": 21,
"s": [100, 100, 100]
},
{
"t": 98,
"s": [100, 50, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"d": 1,
"ty": "el",
"s": {
"a": 0,
"k": [16, 16],
"ix": 2
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 3
},
"nm": "Ellipse Path 1",
"mn": "ADBE Vector Shape - Ellipse",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [1, 0.12156862745098039, 0.5647058823529412, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Ellipse 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 3,
"op": 129,
"st": 3,
"bm": 0
},
{
"ddd": 0,
"ind": 5,
"ty": 4,
"nm": "star a",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 1,
"s": [0]
},
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.333],
"y": [0]
},
"t": 31,
"s": [343.949]
},
{
"t": 158,
"s": [1800]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.667,
"y": 1
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 1,
"s": [596.087, 836.292, 0],
"to": [-36.098, -100, 0],
"ti": [52.765, 0, 0]
},
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.333,
"y": 0
},
"t": 31,
"s": [379.5, 236.292, 0],
"to": [-52.765, 0, 0],
"ti": [0, 0, 0]
},
{
"t": 158,
"s": [279.5, 836.292, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667, 0.667, 0.667],
"y": [1, 1, 1]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0.167, 0, 0]
},
"t": 1,
"s": [50, 100, 100]
},
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [1, 0.833, 1]
},
"o": {
"x": [0.333, 0.333, 0.333],
"y": [0, 0, 0]
},
"t": 31,
"s": [100, 100, 100]
},
{
"t": 128,
"s": [100, 50, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ty": "sr",
"sy": 1,
"d": 1,
"pt": {
"a": 0,
"k": 5,
"ix": 3
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 4
},
"r": {
"a": 0,
"k": 0,
"ix": 5
},
"ir": {
"a": 0,
"k": 5,
"ix": 6
},
"is": {
"a": 0,
"k": 0,
"ix": 8
},
"or": {
"a": 0,
"k": 12,
"ix": 7
},
"os": {
"a": 0,
"k": 0,
"ix": 9
},
"ix": 1,
"nm": "Polystar Path 1",
"mn": "ADBE Vector Shape - Star",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [1, 0.2627450980392157, 0.2, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Polystar 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 1,
"op": 159,
"st": 1,
"bm": 0
},
{
"ddd": 0,
"ind": 6,
"ty": 4,
"nm": "star b",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 50,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 3,
"s": [0]
},
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.333],
"y": [0]
},
"t": 23,
"s": [288]
},
{
"t": 128,
"s": [1800]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.667,
"y": 1
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 3,
"s": [596.087, 836.292, 0],
"to": [-39.431, -113.333, 0],
"ti": [66.098, 1.667, 0]
},
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.333,
"y": 0
},
"t": 23,
"s": [359.5, 156.292, 0],
"to": [-66.098, -1.667, 0],
"ti": [0, 0, 0]
},
{
"t": 128,
"s": [199.5, 826.292, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667, 0.667, 0.667],
"y": [1, 1, 1]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0.167, 0, 0]
},
"t": 3,
"s": [50, 100, 100]
},
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [1, 0.833, 1]
},
"o": {
"x": [0.333, 0.333, 0.333],
"y": [0, 0, 0]
},
"t": 23,
"s": [100, 100, 100]
},
{
"t": 98,
"s": [100, 50, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ty": "sr",
"sy": 1,
"d": 1,
"pt": {
"a": 0,
"k": 5,
"ix": 3
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 4
},
"r": {
"a": 0,
"k": 0,
"ix": 5
},
"ir": {
"a": 0,
"k": 5,
"ix": 6
},
"is": {
"a": 0,
"k": 0,
"ix": 8
},
"or": {
"a": 0,
"k": 12,
"ix": 7
},
"os": {
"a": 0,
"k": 0,
"ix": 9
},
"ix": 1,
"nm": "Polystar Path 1",
"mn": "ADBE Vector Shape - Star",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [0, 0.5215686274509804, 0.27058823529411763, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Polystar 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 3,
"op": 129,
"st": 3,
"bm": 0
},
{
"ddd": 0,
"ind": 7,
"ty": 4,
"nm": "rec a",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 0,
"s": [0]
},
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.333],
"y": [0]
},
"t": 33,
"s": [381.468]
},
{
"t": 218,
"s": [2520]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.667,
"y": 1
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 0,
"s": [599.5, 842, 0],
"to": [-23.333, -100, 0],
"ti": [41.333, 1.333, 0]
},
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.333,
"y": 0
},
"t": 33,
"s": [459.5, 242, 0],
"to": [-41.333, -1.333, 0],
"ti": [0, 0, 0]
},
{
"t": 218,
"s": [351.5, 834, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667, 0.667, 0.667],
"y": [1, 1, 1]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0.167, 0, 0]
},
"t": 0,
"s": [50, 100, 100]
},
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [1, 0.833, 1]
},
"o": {
"x": [0.333, 0.333, 0.333],
"y": [0, 0, 0]
},
"t": 33,
"s": [100, 100, 100]
},
{
"t": 188,
"s": [100, 50, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ty": "rc",
"d": 1,
"s": {
"a": 0,
"k": [16, 8],
"ix": 2
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 4
},
"nm": "Rectangle Path 1",
"mn": "ADBE Vector Shape - Rect",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [0.12156862745098039, 0.8431372549019608, 1, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Rectangle 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 0,
"op": 219,
"st": 0,
"bm": 0
},
{
"ddd": 0,
"ind": 8,
"ty": 4,
"nm": "rec b",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 50,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 2,
"s": [0]
},
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.333],
"y": [0]
},
"t": 25,
"s": [262.857]
},
{
"t": 191,
"s": [2160]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.667,
"y": 1
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 2,
"s": [599.5, 842, 0],
"to": [-23.333, -113.333, 0],
"ti": [74, 5, 0]
},
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.333,
"y": 0
},
"t": 25,
"s": [459.5, 162, 0],
"to": [-74, -5, 0],
"ti": [0, 0, 0]
},
{
"t": 191,
"s": [155.5, 812, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667, 0.667, 0.667],
"y": [1, 1, 1]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0.167, 0, 0]
},
"t": 2,
"s": [50, 100, 100]
},
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [1, 0.833, 1]
},
"o": {
"x": [0.333, 0.333, 0.333],
"y": [0, 0, 0]
},
"t": 25,
"s": [100, 100, 100]
},
{
"t": 161,
"s": [100, 50, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ty": "rc",
"d": 1,
"s": {
"a": 0,
"k": [16, 8],
"ix": 2
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 4
},
"nm": "Rectangle Path 1",
"mn": "ADBE Vector Shape - Rect",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [1, 0.12156862745098039, 0.5647058823529412, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Rectangle 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 2,
"op": 192,
"st": 2,
"bm": 0
},
{
"ddd": 0,
"ind": 9,
"ty": 4,
"nm": "square a",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 0,
"s": [0]
},
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.333],
"y": [0]
},
"t": 35,
"s": [462.385]
},
{
"t": 218,
"s": [2880]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.667,
"y": 1
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 0,
"s": [599.5, 838, 0],
"to": [-43.333, -123.333, 0],
"ti": [60, 0, 0]
},
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.333,
"y": 0
},
"t": 35,
"s": [339.5, 98, 0],
"to": [-60, 0, 0],
"ti": [0, 0, 0]
},
{
"t": 218,
"s": [239.5, 838, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667, 0.667, 0.667],
"y": [1, 1, 1]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0.167, 0, 0]
},
"t": 0,
"s": [50, 100, 100]
},
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [1, 0.833, 1]
},
"o": {
"x": [0.333, 0.333, 0.333],
"y": [0, 0, 0]
},
"t": 35,
"s": [100, 100, 100]
},
{
"t": 188,
"s": [100, 50, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ty": "rc",
"d": 1,
"s": {
"a": 0,
"k": [16, 16],
"ix": 2
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 4
},
"nm": "Rectangle Path 1",
"mn": "ADBE Vector Shape - Rect",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [1, 0.2627450980392157, 0.2, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Rectangle 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 0,
"op": 219,
"st": 0,
"bm": 0
},
{
"ddd": 0,
"ind": 10,
"ty": 4,
"nm": "square b",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 50,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 2,
"s": [0]
},
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.333],
"y": [0]
},
"t": 27,
"s": [285.714]
},
{
"t": 191,
"s": [2160]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.667,
"y": 1
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 2,
"s": [599.5, 838, 0],
"to": [-30, -120, 0],
"ti": [75, 3.333, 0]
},
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.333,
"y": 0
},
"t": 27,
"s": [419.5, 118, 0],
"to": [-75, -3.333, 0],
"ti": [0, 0, 0]
},
{
"t": 191,
"s": [149.5, 818, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667, 0.667, 0.667],
"y": [1, 1, 1]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0.167, 0, 0]
},
"t": 2,
"s": [50, 100, 100]
},
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [1, 0.833, 1]
},
"o": {
"x": [0.333, 0.333, 0.333],
"y": [0, 0, 0]
},
"t": 27,
"s": [100, 100, 100]
},
{
"t": 161,
"s": [100, 50, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ty": "rc",
"d": 1,
"s": {
"a": 0,
"k": [16, 16],
"ix": 2
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 4
},
"nm": "Rectangle Path 1",
"mn": "ADBE Vector Shape - Rect",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [1, 0.12156862745098039, 0.5647058823529412, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Rectangle 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 2,
"op": 192,
"st": 2,
"bm": 0
},
{
"ddd": 0,
"ind": 11,
"ty": 4,
"nm": "streamer b 2",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 0,
"k": 171,
"ix": 10
},
"p": {
"a": 0,
"k": [543, 427, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [-157, -245, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100, 100],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ind": 0,
"ty": "sh",
"ix": 1,
"ks": {
"a": 0,
"k": {
"i": [
[0, 0],
[-1.685, -13.314],
[0, -14.907],
[0, -15.206],
[0, -14.907],
[0, -14.907],
[0, -15.206],
[1.754, -14.206],
[-3.934, -9.465]
],
"o": [
[-3.895, 8.562],
[1.872, 14.789],
[0, 15.206],
[0, 14.907],
[0, 14.907],
[0, 15.206],
[0, 14.314],
[-1.803, 14.605],
[0, 0]
],
"v": [
[-156.5, -406],
[-166.5, -367],
[-146.5, -327],
[-166.5, -286],
[-146.5, -246],
[-166.5, -206],
[-146.5, -165],
[-166.5, -127],
[-156.5, -84]
],
"c": false
},
"ix": 2
},
"nm": "Path 1",
"mn": "ADBE Vector Shape - Group",
"hd": false
},
{
"ty": "st",
"c": {
"a": 0,
"k": [0.12156862745098039, 0.8431372549019608, 1, 1],
"ix": 3
},
"o": {
"a": 0,
"k": 100,
"ix": 4
},
"w": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 13,
"s": [4]
},
{
"t": 61,
"s": [0.5]
}
],
"ix": 5
},
"lc": 2,
"lj": 2,
"bm": 0,
"nm": "Stroke 1",
"mn": "ADBE Vector Graphic - Stroke",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Shape 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
},
{
"ty": "tm",
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 18,
"s": [0]
},
{
"t": 61,
"s": [100]
}
],
"ix": 1
},
"e": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 13,
"s": [0]
},
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 18,
"s": [35]
},
{
"t": 61,
"s": [100]
}
],
"ix": 2
},
"o": {
"a": 0,
"k": 0,
"ix": 3
},
"m": 1,
"ix": 2,
"nm": "Trim Paths 1",
"mn": "ADBE Vector Filter - Trim",
"hd": false
}
],
"ip": 13,
"op": 62,
"st": 13,
"bm": 0
},
{
"ddd": 0,
"ind": 12,
"ty": 4,
"nm": "streamer a 2",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 0,
"k": 151,
"ix": 10
},
"p": {
"a": 0,
"k": [454, 444, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [-157, -245, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [-100, 100, 100],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ind": 0,
"ty": "sh",
"ix": 1,
"ks": {
"a": 0,
"k": {
"i": [
[0, 0],
[-1.685, -13.314],
[0, -14.907],
[0, -15.206],
[0, -14.907],
[0, -14.907],
[0, -15.206],
[1.754, -14.206],
[-3.934, -9.465]
],
"o": [
[-3.895, 8.562],
[1.872, 14.789],
[0, 15.206],
[0, 14.907],
[0, 14.907],
[0, 15.206],
[0, 14.314],
[-1.803, 14.605],
[0, 0]
],
"v": [
[-156.5, -406],
[-166.5, -367],
[-146.5, -327],
[-166.5, -286],
[-146.5, -246],
[-166.5, -206],
[-146.5, -165],
[-166.5, -127],
[-156.5, -84]
],
"c": false
},
"ix": 2
},
"nm": "Path 1",
"mn": "ADBE Vector Shape - Group",
"hd": false
},
{
"ty": "st",
"c": {
"a": 0,
"k": [1, 0.2627450980392157, 0.2, 1],
"ix": 3
},
"o": {
"a": 0,
"k": 100,
"ix": 4
},
"w": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 10,
"s": [4]
},
{
"t": 53,
"s": [0.5]
}
],
"ix": 5
},
"lc": 2,
"lj": 2,
"bm": 0,
"nm": "Stroke 1",
"mn": "ADBE Vector Graphic - Stroke",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Shape 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
},
{
"ty": "tm",
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 15,
"s": [0]
},
{
"t": 53,
"s": [100]
}
],
"ix": 1
},
"e": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 10,
"s": [0]
},
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 15,
"s": [35]
},
{
"t": 53,
"s": [100]
}
],
"ix": 2
},
"o": {
"a": 0,
"k": 0,
"ix": 3
},
"m": 1,
"ix": 2,
"nm": "Trim Paths 1",
"mn": "ADBE Vector Filter - Trim",
"hd": false
}
],
"ip": 10,
"op": 54,
"st": 10,
"bm": 0
},
{
"ddd": 0,
"ind": 13,
"ty": 4,
"nm": "circle a 2",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 1,
"s": [0]
},
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.333],
"y": [0]
},
"t": 29,
"s": [-371.368]
},
{
"t": 191,
"s": [-2520]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.667,
"y": 1
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 1,
"s": [599.5, 838, 0],
"to": [-53.333, -113.333, 0],
"ti": [56.667, -3.333, 0]
},
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.333,
"y": 0
},
"t": 29,
"s": [279.5, 158, 0],
"to": [-56.667, 3.333, 0],
"ti": [0, 0, 0]
},
{
"t": 191,
"s": [259.5, 858, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667, 0.667, 0.667],
"y": [1, 1, 1]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0, 0.167, 0]
},
"t": 1,
"s": [100, 50, 100]
},
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [0.833, 1, 1]
},
"o": {
"x": [0.333, 0.333, 0.333],
"y": [0, 0, 0]
},
"t": 29,
"s": [100, 100, 100]
},
{
"t": 161,
"s": [50, 100, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"d": 1,
"ty": "el",
"s": {
"a": 0,
"k": [16, 16],
"ix": 2
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 3
},
"nm": "Ellipse Path 1",
"mn": "ADBE Vector Shape - Ellipse",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [0.12156862745098039, 0.8431372549019608, 1, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Ellipse 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 1,
"op": 192,
"st": 1,
"bm": 0
},
{
"ddd": 0,
"ind": 14,
"ty": 4,
"nm": "circle b 2",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 50,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 3,
"s": [0]
},
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.333],
"y": [0]
},
"t": 21,
"s": [-250.839]
},
{
"t": 158,
"s": [-2160]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.667,
"y": 1
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 3,
"s": [599.5, 838, 0],
"to": [-53.333, -100, 0],
"ti": [63, -7, 0]
},
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.333,
"y": 0
},
"t": 21,
"s": [279.5, 238, 0],
"to": [-63, 7, 0],
"ti": [0, 0, 0]
},
{
"t": 158,
"s": [221.5, 880, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667, 0.667, 0.667],
"y": [1, 1, 1]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0, 0.167, 0]
},
"t": 3,
"s": [100, 50, 100]
},
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [0.833, 1, 1]
},
"o": {
"x": [0.333, 0.333, 0.333],
"y": [0, 0, 0]
},
"t": 21,
"s": [100, 100, 100]
},
{
"t": 128,
"s": [50, 100, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"d": 1,
"ty": "el",
"s": {
"a": 0,
"k": [16, 16],
"ix": 2
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 3
},
"nm": "Ellipse Path 1",
"mn": "ADBE Vector Shape - Ellipse",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [0, 0.5215686274509804, 0.27058823529411763, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Ellipse 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 3,
"op": 159,
"st": 3,
"bm": 0
},
{
"ddd": 0,
"ind": 15,
"ty": 4,
"nm": "star a 2",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 1,
"s": [0]
},
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.333],
"y": [0]
},
"t": 31,
"s": [-397.895]
},
{
"t": 191,
"s": [-2520]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.667,
"y": 1
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 1,
"s": [596.087, 836.292, 0],
"to": [-9.431, -113.333, 0],
"ti": [42.765, -3.333, 0]
},
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.333,
"y": 0
},
"t": 31,
"s": [539.5, 156.292, 0],
"to": [-42.765, 3.333, 0],
"ti": [0, 0, 0]
},
{
"t": 191,
"s": [339.5, 856.292, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667, 0.667, 0.667],
"y": [1, 1, 1]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0, 0.167, 0]
},
"t": 1,
"s": [100, 50, 100]
},
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [0.833, 1, 1]
},
"o": {
"x": [0.333, 0.333, 0.333],
"y": [0, 0, 0]
},
"t": 31,
"s": [100, 100, 100]
},
{
"t": 161,
"s": [50, 100, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ty": "sr",
"sy": 1,
"d": 1,
"pt": {
"a": 0,
"k": 5,
"ix": 3
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 4
},
"r": {
"a": 0,
"k": 0,
"ix": 5
},
"ir": {
"a": 0,
"k": 5,
"ix": 6
},
"is": {
"a": 0,
"k": 0,
"ix": 8
},
"or": {
"a": 0,
"k": 12,
"ix": 7
},
"os": {
"a": 0,
"k": 0,
"ix": 9
},
"ix": 1,
"nm": "Polystar Path 1",
"mn": "ADBE Vector Shape - Star",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [1, 0.2627450980392157, 0.2, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Polystar 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 1,
"op": 192,
"st": 1,
"bm": 0
},
{
"ddd": 0,
"ind": 16,
"ty": 4,
"nm": "star b 2",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 50,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 3,
"s": [0]
},
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.333],
"y": [0]
},
"t": 23,
"s": [-278.71]
},
{
"t": 158,
"s": [-2160]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.667,
"y": 1
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 3,
"s": [596.087, 836.292, 0],
"to": [-12.765, -96.667, 0],
"ti": [52.765, -3.333, 0]
},
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.333,
"y": 0
},
"t": 23,
"s": [519.5, 256.292, 0],
"to": [-52.765, 3.333, 0],
"ti": [0, 0, 0]
},
{
"t": 158,
"s": [279.5, 856.292, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667, 0.667, 0.667],
"y": [1, 1, 1]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0, 0.167, 0]
},
"t": 3,
"s": [100, 50, 100]
},
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [0.833, 1, 1]
},
"o": {
"x": [0.333, 0.333, 0.333],
"y": [0, 0, 0]
},
"t": 23,
"s": [100, 100, 100]
},
{
"t": 128,
"s": [50, 100, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ty": "sr",
"sy": 1,
"d": 1,
"pt": {
"a": 0,
"k": 5,
"ix": 3
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 4
},
"r": {
"a": 0,
"k": 0,
"ix": 5
},
"ir": {
"a": 0,
"k": 5,
"ix": 6
},
"is": {
"a": 0,
"k": 0,
"ix": 8
},
"or": {
"a": 0,
"k": 12,
"ix": 7
},
"os": {
"a": 0,
"k": 0,
"ix": 9
},
"ix": 1,
"nm": "Polystar Path 1",
"mn": "ADBE Vector Shape - Star",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [1, 0.12156862745098039, 0.5647058823529412, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Polystar 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 3,
"op": 159,
"st": 3,
"bm": 0
},
{
"ddd": 0,
"ind": 17,
"ty": 4,
"nm": "rec a 2",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 0,
"s": [0]
},
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.333],
"y": [0]
},
"t": 33,
"s": [-556.875]
},
{
"t": 128,
"s": [-2160]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.667,
"y": 1
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 0,
"s": [599.5, 842, 0],
"to": [-16.667, -120, 0],
"ti": [66.667, 0, 0]
},
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.333,
"y": 0
},
"t": 33,
"s": [499.5, 122, 0],
"to": [-66.667, 0, 0],
"ti": [0, 0, 0]
},
{
"t": 128,
"s": [199.5, 842, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667, 0.667, 0.667],
"y": [1, 1, 1]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0, 0.167, 0]
},
"t": 0,
"s": [100, 50, 100]
},
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [1, 0.833, 1]
},
"o": {
"x": [0.333, 0.333, 0.333],
"y": [0, 0, 0]
},
"t": 33,
"s": [100, 100, 100]
},
{
"t": 98,
"s": [100, 50, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ty": "rc",
"d": 1,
"s": {
"a": 0,
"k": [16, 8],
"ix": 2
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 4
},
"nm": "Rectangle Path 1",
"mn": "ADBE Vector Shape - Rect",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [1, 0.2627450980392157, 0.2, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Rectangle 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 0,
"op": 129,
"st": 0,
"bm": 0
},
{
"ddd": 0,
"ind": 18,
"ty": 4,
"nm": "rec b 2",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 50,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 2,
"s": [0]
},
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.333],
"y": [0]
},
"t": 25,
"s": [-306.667]
},
{
"t": 218,
"s": [-2880]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.667,
"y": 1
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 2,
"s": [599.5, 842, 0],
"to": [-22.62, -109.87, 0],
"ti": [2.877, -2.055, 0]
},
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.333,
"y": 0
},
"t": 25,
"s": [339.5, 262, 0],
"to": [-51.333, 36.667, 0],
"ti": [0, 0, 0]
},
{
"t": 218,
"s": [219.5, 862, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667, 0.667, 0.667],
"y": [1, 1, 1]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0, 0.167, 0]
},
"t": 2,
"s": [100, 50, 100]
},
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [0.833, 1, 1]
},
"o": {
"x": [0.333, 0.333, 0.333],
"y": [0, 0, 0]
},
"t": 25,
"s": [100, 100, 100]
},
{
"t": 188,
"s": [50, 100, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ty": "rc",
"d": 1,
"s": {
"a": 0,
"k": [16, 8],
"ix": 2
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 4
},
"nm": "Rectangle Path 1",
"mn": "ADBE Vector Shape - Rect",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [0.12156862745098039, 0.8431372549019608, 1, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Rectangle 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 2,
"op": 219,
"st": 2,
"bm": 0
},
{
"ddd": 0,
"ind": 19,
"ty": 4,
"nm": "square a 2",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 0,
"s": [0]
},
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.333],
"y": [0]
},
"t": 35,
"s": [-590.625]
},
{
"t": 128,
"s": [-2160]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.667,
"y": 1
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 0,
"s": [599.5, 838, 0],
"to": [-20, -90, 0],
"ti": [36.667, 0, 0]
},
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.333,
"y": 0
},
"t": 35,
"s": [479.5, 298, 0],
"to": [-36.667, 0, 0],
"ti": [0, 0, 0]
},
{
"t": 128,
"s": [379.5, 838, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667, 0.667, 0.667],
"y": [1, 1, 1]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0, 0.167, 0]
},
"t": 0,
"s": [100, 50, 100]
},
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [0.833, 1, 1]
},
"o": {
"x": [0.333, 0.333, 0.333],
"y": [0, 0, 0]
},
"t": 35,
"s": [100, 100, 100]
},
{
"t": 98,
"s": [50, 100, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ty": "rc",
"d": 1,
"s": {
"a": 0,
"k": [16, 16],
"ix": 2
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 4
},
"nm": "Rectangle Path 1",
"mn": "ADBE Vector Shape - Rect",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [0.12156862745098039, 0.8431372549019608, 1, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Rectangle 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 0,
"op": 129,
"st": 0,
"bm": 0
},
{
"ddd": 0,
"ind": 20,
"ty": 4,
"nm": "square b 2",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 50,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.667],
"y": [1]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 2,
"s": [0]
},
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.333],
"y": [0]
},
"t": 27,
"s": [-333.333]
},
{
"t": 218,
"s": [-2880]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.667,
"y": 1
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 2,
"s": [599.5, 838, 0],
"to": [-10, -103.333, 0],
"ti": [50, 0, 0]
},
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.333,
"y": 0
},
"t": 27,
"s": [539.5, 218, 0],
"to": [-50, 0, 0],
"ti": [0, 0, 0]
},
{
"t": 218,
"s": [299.5, 838, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.667, 0.667, 0.667],
"y": [1, 1, 1]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0, 0.167, 0]
},
"t": 2,
"s": [100, 50, 100]
},
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [0.833, 1, 1]
},
"o": {
"x": [0.333, 0.333, 0.333],
"y": [0, 0, 0]
},
"t": 27,
"s": [100, 100, 100]
},
{
"t": 188,
"s": [50, 100, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ty": "rc",
"d": 1,
"s": {
"a": 0,
"k": [16, 16],
"ix": 2
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 4
},
"nm": "Rectangle Path 1",
"mn": "ADBE Vector Shape - Rect",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [1, 0.12156862745098039, 0.5647058823529412, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Rectangle 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 2,
"op": 219,
"st": 2,
"bm": 0
}
]
},
{
"id": "comp_2",
"layers": [
{
"ddd": 0,
"ind": 1,
"ty": 0,
"nm": "_small-side",
"refId": "comp_1",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 0,
"k": 0,
"ix": 10
},
"p": {
"a": 0,
"k": [260, 320, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [400, 400, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100, 100],
"ix": 6
}
},
"ao": 0,
"w": 800,
"h": 800,
"ip": 0,
"op": 219,
"st": 0,
"bm": 0
}
]
},
{
"id": "comp_3",
"layers": [
{
"ddd": 0,
"ind": 1,
"ty": 0,
"nm": "left",
"refId": "comp_4",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 0,
"k": 0,
"ix": 10
},
"p": {
"a": 0,
"k": [400, 400, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [400, 400, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100, 100],
"ix": 6
}
},
"ao": 0,
"w": 800,
"h": 800,
"ip": 13,
"op": 313,
"st": 13,
"bm": 0
},
{
"ddd": 0,
"ind": 2,
"ty": 0,
"nm": "right",
"refId": "comp_4",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 0,
"k": 0,
"ix": 10
},
"p": {
"a": 0,
"k": [400, 400, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [400, 400, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [-100, 100, 100],
"ix": 6
}
},
"ao": 0,
"w": 800,
"h": 800,
"ip": 30,
"op": 330,
"st": 30,
"bm": 0
}
]
},
{
"id": "comp_4",
"layers": [
{
"ddd": 0,
"ind": 1,
"ty": 4,
"nm": "streamer a 4",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 0,
"k": 14,
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 13,
"s": [219.178, -190.096, 0],
"to": [-95.333, 426.667, 0],
"ti": [167.333, -560.667, 0]
},
{
"t": 173,
"s": [179.178, 989.904, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [-157, -245, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [-100, 100, 100],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ind": 0,
"ty": "sh",
"ix": 1,
"ks": {
"a": 0,
"k": {
"i": [
[0, 0],
[-1.685, -13.314],
[0, -14.907],
[0, -15.206],
[0, -14.907],
[0, -14.907],
[0, -15.206],
[1.754, -14.206],
[-3.934, -9.465]
],
"o": [
[-3.895, 8.562],
[1.872, 14.789],
[0, 15.206],
[0, 14.907],
[0, 14.907],
[0, 15.206],
[0, 14.314],
[-1.803, 14.605],
[0, 0]
],
"v": [
[-156.5, -406],
[-166.5, -367],
[-146.5, -327],
[-166.5, -286],
[-146.5, -246],
[-166.5, -206],
[-146.5, -165],
[-166.5, -127],
[-156.5, -84]
],
"c": false
},
"ix": 2
},
"nm": "Path 1",
"mn": "ADBE Vector Shape - Group",
"hd": false
},
{
"ty": "st",
"c": {
"a": 0,
"k": [1, 0.12156862745098039, 0.5647058823529412, 1],
"ix": 3
},
"o": {
"a": 0,
"k": 100,
"ix": 4
},
"w": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 13,
"s": [4]
},
{
"t": 176,
"s": [0.5]
}
],
"ix": 5
},
"lc": 1,
"lj": 1,
"ml": 4,
"bm": 0,
"nm": "Stroke 1",
"mn": "ADBE Vector Graphic - Stroke",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Shape 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
},
{
"ty": "tm",
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 18,
"s": [0]
},
{
"t": 176,
"s": [100]
}
],
"ix": 1
},
"e": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 13,
"s": [0]
},
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 18,
"s": [40]
},
{
"t": 176,
"s": [100]
}
],
"ix": 2
},
"o": {
"a": 0,
"k": 0,
"ix": 3
},
"m": 1,
"ix": 2,
"nm": "Trim Paths 1",
"mn": "ADBE Vector Filter - Trim",
"hd": false
}
],
"ip": 13,
"op": 174,
"st": 13,
"bm": 0
},
{
"ddd": 0,
"ind": 2,
"ty": 4,
"nm": "streamer b 4",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 0,
"k": -1.458,
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 5,
"s": [269.863, -175.455, 0],
"to": [-110, 415.333, 0],
"ti": [216, -599.333, 0]
},
{
"t": 173,
"s": [69.863, 984.545, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [-157, -245, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100, 100],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ind": 0,
"ty": "sh",
"ix": 1,
"ks": {
"a": 0,
"k": {
"i": [
[0, 0],
[-1.685, -13.314],
[0, -14.907],
[0, -15.206],
[0, -14.907],
[0, -14.907],
[0, -15.206],
[1.754, -14.206],
[-3.934, -9.465]
],
"o": [
[-3.895, 8.562],
[1.872, 14.789],
[0, 15.206],
[0, 14.907],
[0, 14.907],
[0, 15.206],
[0, 14.314],
[-1.803, 14.605],
[0, 0]
],
"v": [
[-156.5, -406],
[-166.5, -367],
[-146.5, -327],
[-166.5, -286],
[-146.5, -246],
[-166.5, -206],
[-146.5, -165],
[-166.5, -127],
[-156.5, -84]
],
"c": false
},
"ix": 2
},
"nm": "Path 1",
"mn": "ADBE Vector Shape - Group",
"hd": false
},
{
"ty": "st",
"c": {
"a": 0,
"k": [1, 0.2627450980392157, 0.2, 1],
"ix": 3
},
"o": {
"a": 0,
"k": 100,
"ix": 4
},
"w": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 5,
"s": [4]
},
{
"t": 173,
"s": [0.5]
}
],
"ix": 5
},
"lc": 1,
"lj": 1,
"ml": 4,
"bm": 0,
"nm": "Stroke 1",
"mn": "ADBE Vector Graphic - Stroke",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Shape 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
},
{
"ty": "tm",
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 10,
"s": [0]
},
{
"t": 173,
"s": [100]
}
],
"ix": 1
},
"e": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 5,
"s": [0]
},
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 10,
"s": [40]
},
{
"t": 173,
"s": [100]
}
],
"ix": 2
},
"o": {
"a": 0,
"k": 0,
"ix": 3
},
"m": 1,
"ix": 2,
"nm": "Trim Paths 1",
"mn": "ADBE Vector Filter - Trim",
"hd": false
}
],
"ip": 5,
"op": 174,
"st": 5,
"bm": 0
},
{
"ddd": 0,
"ind": 3,
"ty": 4,
"nm": "circle a 4",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 8,
"s": [0]
},
{
"t": 155,
"s": [1800]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 8,
"s": [325.643, -26.292, 0],
"to": [-101.333, 75.667, 0],
"ti": [15.333, -507.667, 0]
},
{
"t": 155,
"s": [125.643, 835.708, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [0.833, 0.833, 0.833]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0.167, 0.167, 0.167]
},
"t": 8,
"s": [50, 100, 100]
},
{
"t": 155,
"s": [100, 50, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"d": 1,
"ty": "el",
"s": {
"a": 0,
"k": [16, 16],
"ix": 2
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 3
},
"nm": "Ellipse Path 1",
"mn": "ADBE Vector Shape - Ellipse",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [0.12156862745098039, 0.8431372549019608, 1, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Ellipse 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 8,
"op": 156,
"st": -7,
"bm": 0
},
{
"ddd": 0,
"ind": 4,
"ty": 4,
"nm": "circle b 4",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 50,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 2,
"s": [0]
},
{
"t": 215,
"s": [2520]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 2,
"s": [619.5, -26.292, 0],
"to": [-138, 77.667, 0],
"ti": [-2, -497.667, 0]
},
{
"t": 215,
"s": [259.5, 835.708, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [0.833, 0.833, 0.833]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0.167, 0.167, 0.167]
},
"t": 2,
"s": [50, 100, 100]
},
{
"t": 215,
"s": [100, 50, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"d": 1,
"ty": "el",
"s": {
"a": 0,
"k": [16, 16],
"ix": 2
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 3
},
"nm": "Ellipse Path 1",
"mn": "ADBE Vector Shape - Ellipse",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [1, 0.12156862745098039, 0.5647058823529412, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Ellipse 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 2,
"op": 216,
"st": -13,
"bm": 0
},
{
"ddd": 0,
"ind": 5,
"ty": 4,
"nm": "star a 4",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 6,
"s": [0]
},
{
"t": 245,
"s": [2880]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 6,
"s": [376.929, -28, 0],
"to": [-213.333, 157.667, 0],
"ti": [173.333, -127.667, 0]
},
{
"t": 245,
"s": [116.929, 834, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [0.833, 0.833, 0.833]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0.167, 0.167, 0.167]
},
"t": 6,
"s": [50, 100, 100]
},
{
"t": 245,
"s": [100, 50, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ty": "sr",
"sy": 1,
"d": 1,
"pt": {
"a": 0,
"k": 5,
"ix": 3
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 4
},
"r": {
"a": 0,
"k": 0,
"ix": 5
},
"ir": {
"a": 0,
"k": 5,
"ix": 6
},
"is": {
"a": 0,
"k": 0,
"ix": 8
},
"or": {
"a": 0,
"k": 12,
"ix": 7
},
"os": {
"a": 0,
"k": 0,
"ix": 9
},
"ix": 1,
"nm": "Polystar Path 1",
"mn": "ADBE Vector Shape - Star",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [1, 0.2627450980392157, 0.2, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Polystar 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 6,
"op": 246,
"st": -9,
"bm": 0
},
{
"ddd": 0,
"ind": 6,
"ty": 4,
"nm": "star b 4",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 50,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 2,
"s": [0]
},
{
"t": 125,
"s": [1800]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 2,
"s": [171.786, -28, 0],
"to": [0, 0, 0],
"ti": [-161.333, -275.667, 0]
},
{
"t": 125,
"s": [251.786, 834, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [0.833, 0.833, 0.833]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0.167, 0.167, 0.167]
},
"t": 2,
"s": [50, 100, 100]
},
{
"t": 125,
"s": [100, 50, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ty": "sr",
"sy": 1,
"d": 1,
"pt": {
"a": 0,
"k": 5,
"ix": 3
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 4
},
"r": {
"a": 0,
"k": 0,
"ix": 5
},
"ir": {
"a": 0,
"k": 5,
"ix": 6
},
"is": {
"a": 0,
"k": 0,
"ix": 8
},
"or": {
"a": 0,
"k": 12,
"ix": 7
},
"os": {
"a": 0,
"k": 0,
"ix": 9
},
"ix": 1,
"nm": "Polystar Path 1",
"mn": "ADBE Vector Shape - Star",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [0, 0.5215686274509804, 0.27058823529411763, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Polystar 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 2,
"op": 126,
"st": -13,
"bm": 0
},
{
"ddd": 0,
"ind": 7,
"ty": 4,
"nm": "rec a 4",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 4,
"s": [0]
},
{
"t": 185,
"s": [2520]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 4,
"s": [428.214, -22.292, 0],
"to": [-167.333, 119.667, 0],
"ti": [-130.667, -315.667, 0]
},
{
"t": 185,
"s": [228.214, 839.708, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [0.833, 0.833, 0.833]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0.167, 0.167, 0.167]
},
"t": 4,
"s": [50, 100, 100]
},
{
"t": 185,
"s": [100, 50, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ty": "rc",
"d": 1,
"s": {
"a": 0,
"k": [16, 8],
"ix": 2
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 4
},
"nm": "Rectangle Path 1",
"mn": "ADBE Vector Shape - Rect",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [0.12156862745098039, 0.8431372549019608, 1, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Rectangle 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 4,
"op": 186,
"st": -11,
"bm": 0
},
{
"ddd": 0,
"ind": 8,
"ty": 4,
"nm": "rec b 4",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 50,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 6,
"s": [0]
},
{
"t": 245,
"s": [2880]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 6,
"s": [223.071, -22.292, 0],
"to": [0, 0, 0],
"ti": [-92.571, -383.708, 0]
},
{
"t": 245,
"s": [223.071, 839.708, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [0.833, 0.833, 0.833]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0.167, 0.167, 0.167]
},
"t": 6,
"s": [50, 100, 100]
},
{
"t": 245,
"s": [100, 50, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ty": "rc",
"d": 1,
"s": {
"a": 0,
"k": [16, 8],
"ix": 2
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 4
},
"nm": "Rectangle Path 1",
"mn": "ADBE Vector Shape - Rect",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [1, 0.12156862745098039, 0.5647058823529412, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Rectangle 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 6,
"op": 246,
"st": -9,
"bm": 0
},
{
"ddd": 0,
"ind": 9,
"ty": 4,
"nm": "square a 4",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 4,
"s": [0]
},
{
"t": 217,
"s": [2520]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 4,
"s": [120.5, -26.292, 0],
"to": [13, 430.305, 0],
"ti": [52.221, -418.892, 0]
},
{
"t": 217,
"s": [198.5, 833.708, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [0.833, 0.833, 0.833]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0.167, 0.167, 0.167]
},
"t": 4,
"s": [50, 100, 100]
},
{
"t": 217,
"s": [100, 50, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ty": "rc",
"d": 1,
"s": {
"a": 0,
"k": [16, 16],
"ix": 2
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 4
},
"nm": "Rectangle Path 1",
"mn": "ADBE Vector Shape - Rect",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [1, 0.2627450980392157, 0.2, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Rectangle 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 4,
"op": 218,
"st": -11,
"bm": 0
},
{
"ddd": 0,
"ind": 10,
"ty": 4,
"nm": "square b 4",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 50,
"ix": 11
},
"r": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 8,
"s": [0]
},
{
"t": 215,
"s": [2520]
}
],
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 8,
"s": [274.357, -26.292, 0],
"to": [157.333, 415.667, 0],
"ti": [22.667, -253.667, 0]
},
{
"t": 215,
"s": [114.357, 835.708, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0, 0],
"ix": 1
},
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.833, 0.833, 0.833],
"y": [0.833, 0.833, 0.833]
},
"o": {
"x": [0.167, 0.167, 0.167],
"y": [0.167, 0.167, 0.167]
},
"t": 8,
"s": [50, 100, 100]
},
{
"t": 215,
"s": [100, 50, 100]
}
],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ty": "rc",
"d": 1,
"s": {
"a": 0,
"k": [16, 16],
"ix": 2
},
"p": {
"a": 0,
"k": [0, 0],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 4
},
"nm": "Rectangle Path 1",
"mn": "ADBE Vector Shape - Rect",
"hd": false
},
{
"ty": "fl",
"c": {
"a": 0,
"k": [1, 0.2627450980392157, 0.2, 1],
"ix": 4
},
"o": {
"a": 0,
"k": 100,
"ix": 5
},
"r": 1,
"bm": 0,
"nm": "Fill 1",
"mn": "ADBE Vector Graphic - Fill",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Rectangle 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
}
],
"ip": 8,
"op": 216,
"st": -7,
"bm": 0
},
{
"ddd": 0,
"ind": 11,
"ty": 4,
"nm": "streamer a 3",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 0,
"k": 3,
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 0,
"s": [275.178, -173.096, 0],
"to": [-87.333, 413.333, 0],
"ti": [177.333, -643.333, 0]
},
{
"t": 185,
"s": [219.178, 974.904, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [-157, -245, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [-100, 100, 100],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ind": 0,
"ty": "sh",
"ix": 1,
"ks": {
"a": 0,
"k": {
"i": [
[0, 0],
[-1.685, -13.314],
[0, -14.907],
[0, -15.206],
[0, -14.907],
[0, -14.907],
[0, -15.206],
[1.754, -14.206],
[-3.934, -9.465]
],
"o": [
[-3.895, 8.562],
[1.872, 14.789],
[0, 15.206],
[0, 14.907],
[0, 14.907],
[0, 15.206],
[0, 14.314],
[-1.803, 14.605],
[0, 0]
],
"v": [
[-156.5, -406],
[-166.5, -367],
[-146.5, -327],
[-166.5, -286],
[-146.5, -246],
[-166.5, -206],
[-146.5, -165],
[-166.5, -127],
[-156.5, -84]
],
"c": false
},
"ix": 2
},
"nm": "Path 1",
"mn": "ADBE Vector Shape - Group",
"hd": false
},
{
"ty": "st",
"c": {
"a": 0,
"k": [1, 0.2627450980392157, 0.2, 1],
"ix": 3
},
"o": {
"a": 0,
"k": 100,
"ix": 4
},
"w": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 0,
"s": [4]
},
{
"t": 177,
"s": [0.5]
}
],
"ix": 5
},
"lc": 2,
"lj": 2,
"bm": 0,
"nm": "Stroke 1",
"mn": "ADBE Vector Graphic - Stroke",
"hd": false
},
{
"ty": "tr",
"p": {
"a": 0,
"k": [0, 0],
"ix": 2
},
"a": {
"a": 0,
"k": [0, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100],
"ix": 3
},
"r": {
"a": 0,
"k": 0,
"ix": 6
},
"o": {
"a": 0,
"k": 100,
"ix": 7
},
"sk": {
"a": 0,
"k": 0,
"ix": 4
},
"sa": {
"a": 0,
"k": 0,
"ix": 5
},
"nm": "Transform"
}
],
"nm": "Shape 1",
"np": 2,
"cix": 2,
"bm": 0,
"ix": 1,
"mn": "ADBE Vector Group",
"hd": false
},
{
"ty": "tm",
"s": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 5,
"s": [0]
},
{
"t": 177,
"s": [100]
}
],
"ix": 1
},
"e": {
"a": 1,
"k": [
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 0,
"s": [0]
},
{
"i": {
"x": [0.833],
"y": [0.833]
},
"o": {
"x": [0.167],
"y": [0.167]
},
"t": 5,
"s": [40]
},
{
"t": 177,
"s": [100]
}
],
"ix": 2
},
"o": {
"a": 0,
"k": 0,
"ix": 3
},
"m": 1,
"ix": 2,
"nm": "Trim Paths 1",
"mn": "ADBE Vector Filter - Trim",
"hd": false
}
],
"ip": 0,
"op": 186,
"st": 0,
"bm": 0
},
{
"ddd": 0,
"ind": 12,
"ty": 4,
"nm": "streamer b 3",
"sr": 1,
"ks": {
"o": {
"a": 0,
"k": 100,
"ix": 11
},
"r": {
"a": 0,
"k": 9,
"ix": 10
},
"p": {
"a": 1,
"k": [
{
"i": {
"x": 0.833,
"y": 0.833
},
"o": {
"x": 0.167,
"y": 0.167
},
"t": 11,
"s": [199.863, 74.545, 0],
"to": [-13.363, 405.455, 0],
"ti": [179.333, -430.667, 0]
},
{
"t": 217,
"s": [139.863, 834.545, 0]
}
],
"ix": 2
},
"a": {
"a": 0,
"k": [-157, -245, 0],
"ix": 1
},
"s": {
"a": 0,
"k": [100, 100, 100],
"ix": 6
}
},
"ao": 0,
"shapes": [
{
"ty": "gr",
"it": [
{
"ind": 0,
"ty": "sh",
gitextract_io1ldjbk/ ├── .gitignore ├── .prettierignore ├── .prettierrc ├── AGENTS.md ├── TODO.md ├── app.json ├── assets/ │ ├── lottie/ │ │ ├── confetti.json │ │ └── success.json │ └── translations/ │ ├── de.json │ ├── en.json │ ├── es.json │ ├── it.json │ ├── ru.json │ └── th.json ├── eas.json ├── expo-router-implementation-steps.md ├── expo-router-migration-issues.md ├── expo-router-migration-plan.md ├── index.ts ├── package.json ├── src/ │ ├── components/ │ │ ├── ActionButtons.tsx │ │ ├── AmountInput.tsx │ │ ├── AnimatedSpinner.tsx │ │ ├── App.tsx │ │ ├── Balance.tsx │ │ ├── Blank.tsx │ │ ├── Button.tsx │ │ ├── Card.tsx │ │ ├── Copy.tsx │ │ ├── DashboardTopBar.tsx │ │ ├── Empty.tsx │ │ ├── Icons.tsx │ │ ├── InputAndLabel.tsx │ │ ├── Loading.tsx │ │ ├── Logo.tsx │ │ ├── MintBalance.tsx │ │ ├── MintHeaderSelector.tsx │ │ ├── MintSelectionSheet.tsx │ │ ├── MintSelector.tsx │ │ ├── Option.tsx │ │ ├── OverviewRow.tsx │ │ ├── Progress.tsx │ │ ├── QR.tsx │ │ ├── RadioBtn.tsx │ │ ├── Screen.tsx │ │ ├── Separator.tsx │ │ ├── SwipeButton.tsx │ │ ├── Toaster.tsx │ │ ├── Toggle.tsx │ │ ├── Txt.tsx │ │ ├── TxtInput.tsx │ │ ├── animation/ │ │ │ └── Shake.ts │ │ ├── hooks/ │ │ │ ├── AnimatedQr.ts │ │ │ ├── Copy.tsx │ │ │ ├── Loading.tsx │ │ │ ├── useCashuClaimFlow.ts │ │ │ ├── useDiscoverMints.ts │ │ │ ├── useNfcPayment.ts │ │ │ └── useUrDecoder.ts │ │ ├── modal/ │ │ │ ├── ConfirmBottomSheet.tsx │ │ │ ├── ConfirmationModal.tsx │ │ │ ├── MeltConfirmationModal.tsx │ │ │ ├── NfcPaymentModal.tsx │ │ │ ├── OperationMintPanel.tsx │ │ │ ├── SendConfirmationModal.tsx │ │ │ ├── TrustMintBottomSheet.tsx │ │ │ ├── TrustMintProvider.tsx │ │ │ └── index.tsx │ │ └── nav/ │ │ ├── Navigator.tsx │ │ ├── TopNav.tsx │ │ └── utils.ts │ ├── config/ │ │ ├── config.base.ts │ │ ├── config.dev.ts │ │ ├── config.prod.ts │ │ └── index.ts │ ├── consts/ │ │ ├── env.ts │ │ ├── index.ts │ │ ├── time.ts │ │ └── urls.ts │ ├── context/ │ │ ├── Balance.tsx │ │ ├── Currency.tsx │ │ ├── KnownMints.tsx │ │ ├── Linking.tsx │ │ ├── Manager.tsx │ │ ├── NfcAmountLimits.tsx │ │ ├── Npc.tsx │ │ ├── Privacy.tsx │ │ ├── Prompt.tsx │ │ └── Theme.tsx │ ├── i18n.ts │ ├── i18next.d.ts │ ├── logger/ │ │ ├── AppLogger.ts │ │ └── index.ts │ ├── model/ │ │ ├── env.ts │ │ ├── i18n.ts │ │ ├── index.ts │ │ └── nav.ts │ ├── nav/ │ │ ├── HistoryNavigator.tsx │ │ ├── MintNavigator.tsx │ │ ├── RestoreNavigator.tsx │ │ ├── SettingsNavigator.tsx │ │ └── navTypes.ts │ ├── screens/ │ │ ├── Dashboard.tsx │ │ ├── DashboardActionSheet.tsx │ │ ├── ErrorScreen/ │ │ │ ├── ErrorBoundary.tsx │ │ │ └── ErrorDetails.tsx │ │ ├── History/ │ │ │ ├── Details.tsx │ │ │ ├── components/ │ │ │ │ ├── DetailsSection.tsx │ │ │ │ ├── HistoryDetailsScreen.tsx │ │ │ │ ├── HistoryOverview.tsx │ │ │ │ ├── LatestHistory.tsx │ │ │ │ ├── LatestHistoryMeltEntry.tsx │ │ │ │ ├── LatestHistoryMintEntry.tsx │ │ │ │ ├── LatestHistoryReceiveEntry.tsx │ │ │ │ ├── LatestHistorySendEntry.tsx │ │ │ │ ├── LatestHistoryWrapper.tsx │ │ │ │ ├── MeltHistoryDetails.tsx │ │ │ │ ├── MintHistoryDetails.tsx │ │ │ │ ├── ReceiveHistoryDetails.tsx │ │ │ │ ├── SendHistoryDetails.tsx │ │ │ │ └── TokenSection.tsx │ │ │ ├── entryTime.tsx │ │ │ └── index.tsx │ │ ├── Mints/ │ │ │ ├── AddMintScreen.tsx │ │ │ ├── MintHomeScreen.tsx │ │ │ ├── MintSettingsScreen.tsx │ │ │ ├── components/ │ │ │ │ ├── MetadataItem.tsx │ │ │ │ └── MintItem.tsx │ │ │ └── index.ts │ │ ├── Onboarding.tsx │ │ ├── Payment/ │ │ │ ├── MeltInput.tsx │ │ │ ├── MintSelectAmount.tsx │ │ │ ├── Processing.tsx │ │ │ ├── ProcessingError.tsx │ │ │ ├── Receive/ │ │ │ │ └── Invoice.tsx │ │ │ ├── Send/ │ │ │ │ ├── CoinSelection.tsx │ │ │ │ └── EncodedToken.tsx │ │ │ ├── SendSelectAmount.tsx │ │ │ ├── Success.tsx │ │ │ └── SuccessScreen.tsx │ │ ├── QRScan/ │ │ │ ├── QrScannerScreen.tsx │ │ │ ├── components/ │ │ │ │ └── CameraPermission.tsx │ │ │ └── hooks/ │ │ │ └── useScanResult.ts │ │ ├── Restore/ │ │ │ ├── Recover.tsx │ │ │ ├── Recovering.tsx │ │ │ └── SelectRecoveryMint.tsx │ │ └── Settings/ │ │ ├── Currency.tsx │ │ ├── Display.tsx │ │ ├── Language.tsx │ │ ├── MenuItem.tsx │ │ ├── NfcSettings.tsx │ │ ├── NpcSettings.tsx │ │ ├── ViewMnemonic.tsx │ │ └── index.tsx │ ├── services/ │ │ ├── ExchangeRateService.ts │ │ ├── NFCService.ts │ │ ├── NpcService.ts │ │ └── SeedService.ts │ ├── shim.ts │ ├── storage/ │ │ ├── DbProvider.ts │ │ ├── dev.ts │ │ └── store/ │ │ ├── SecureStore.ts │ │ ├── consts.ts │ │ ├── index.ts │ │ └── theme.ts │ ├── styles/ │ │ ├── colors.ts │ │ ├── globals.ts │ │ └── index.ts │ └── util/ │ ├── index.ts │ ├── lnurl.ts │ ├── localization.ts │ ├── lud16.ts │ ├── paymentStringParser.ts │ └── typeguards.ts ├── tsconfig.json └── zapstore.yaml
SYMBOL INDEX (693 symbols across 141 files)
FILE: src/components/ActionButtons.tsx
type IActionBtnsProps (line 7) | interface IActionBtnsProps {
function ActionButtons (line 19) | function ActionButtons({
FILE: src/components/AmountInput.tsx
type AmountInputProps (line 13) | interface AmountInputProps {
function getLocalDecimalSeparator (line 28) | function getLocalDecimalSeparator(): string {
function normalizeDecimalInput (line 39) | function normalizeDecimalInput(input: string): string {
function formatFiatDisplay (line 84) | function formatFiatDisplay(value: number, decimals: number = 2): string {
FILE: src/components/AnimatedSpinner.tsx
type IAnimatedSpinnerProps (line 12) | interface IAnimatedSpinnerProps {
function AnimatedSpinner (line 17) | function AnimatedSpinner({ color, size = 24 }: IAnimatedSpinnerProps) {
FILE: src/components/App.tsx
function App (line 46) | function App(_: { exp: Record<string, unknown> }) {
function useAppInitialization (line 59) | function useAppInitialization() {
function AppProviders (line 149) | function AppProviders({ children }: { children: React.ReactNode }) {
function RootApp (line 173) | function RootApp() {
function ThemedNavigationContainer (line 196) | function ThemedNavigationContainer({ children }: { children: React.React...
function ThemedStatusBar (line 205) | function ThemedStatusBar() {
FILE: src/components/Balance.tsx
type IBalanceProps (line 20) | interface IBalanceProps {
function Balance (line 24) | function Balance({ nav }: IBalanceProps) {
FILE: src/components/Blank.tsx
function Blank (line 4) | function Blank() {
FILE: src/components/Button.tsx
type IButtonProps (line 10) | interface IButtonProps {
function Button (line 24) | function Button({
type IIconBtnProps (line 147) | interface IIconBtnProps {
function IconBtn (line 156) | function IconBtn({ icon, size, outlined, disabled, onPress, testId }: II...
type ITxtBtnProps (line 184) | interface ITxtBtnProps {
function TxtButton (line 193) | function TxtButton({ txt, onPress, icon, disabled, style, txtColor }: IT...
FILE: src/components/Card.tsx
type ICardProps (line 7) | interface ICardProps {
function Card (line 13) | function Card({ children, variant = "base", style }: ICardProps) {
FILE: src/components/Copy.tsx
function Copy (line 9) | function Copy({ txt }: { txt: string }) {
FILE: src/components/DashboardTopBar.tsx
type IDashboardTopBarProps (line 9) | interface IDashboardTopBarProps {
function DashboardTopBar (line 13) | function DashboardTopBar({ onSettingsPress }: IDashboardTopBarProps) {
FILE: src/components/Empty.tsx
type IEmptyProps (line 12) | interface IEmptyProps {
function Empty (line 24) | function Empty({
FILE: src/components/Icons.tsx
type TIconProps (line 8) | interface TIconProps {
type IExtendedIconProps (line 14) | interface IExtendedIconProps extends TIconProps {
function NfcIcon (line 18) | function NfcIcon({ width, height, color }: TIconProps) {
function HamburgerIcon (line 23) | function HamburgerIcon({ width, height, color }: TIconProps) {
function QRIcon (line 33) | function QRIcon({ width, height, color }: TIconProps) {
function ZapIcon (line 43) | function ZapIcon({ width, height, color }: TIconProps) {
function MintBoardIcon (line 53) | function MintBoardIcon({ width, height, color }: TIconProps) {
function BitcoinIcon (line 69) | function BitcoinIcon({ width, height, color }: TIconProps) {
function PlusIcon (line 79) | function PlusIcon({ width, height, color }: TIconProps) {
function ChevronRightIcon (line 89) | function ChevronRightIcon({ width, height, color }: TIconProps) {
function CopyIcon (line 99) | function CopyIcon({ width, height, color }: TIconProps) {
function RefreshIcon (line 154) | function RefreshIcon({ width, height, color }: TIconProps) {
function SwapIcon (line 164) | function SwapIcon({ width, height, color }: TIconProps) {
function TrashbinIcon (line 174) | function TrashbinIcon({ width, height, color }: TIconProps) {
function PenIcon (line 184) | function PenIcon({ width, height, color }: TIconProps) {
function ExclamationIcon (line 194) | function ExclamationIcon({ width, height, color }: TIconProps) {
function CheckCircleIcon (line 215) | function CheckCircleIcon({ width, height, color }: TIconProps) {
function UserIcon (line 236) | function UserIcon({ width, height, color }: TIconProps) {
function PaletteIcon (line 256) | function PaletteIcon({ width, height, color }: TIconProps) {
function SwapCurrencyIcon (line 266) | function SwapCurrencyIcon({ width, height, color }: TIconProps) {
function ArrowDownIcon (line 288) | function ArrowDownIcon({ width, height, color }: TIconProps) {
function InfoIcon (line 300) | function InfoIcon({ width, height, color }: TIconProps) {
function ValidateIcon (line 310) | function ValidateIcon({ width, height, color }: TIconProps) {
function LockIcon (line 320) | function LockIcon({ width, height, color }: TIconProps) {
function UnlockIcon (line 347) | function UnlockIcon({ width, height, color }: TIconProps) {
function BackupIcon (line 374) | function BackupIcon({ width, height, color }: TIconProps) {
function FlashlightOffIcon (line 391) | function FlashlightOffIcon({ width, height, color }: TIconProps) {
function FlashlightOnIcon (line 401) | function FlashlightOnIcon({ width, height, color }: TIconProps) {
function CloseIcon (line 418) | function CloseIcon({ width, height, color }: TIconProps) {
function HistoryIcon (line 435) | function HistoryIcon({ width, height, color }: TIconProps) {
function IncomingArrowIcon (line 445) | function IncomingArrowIcon({ width, height, color }: TIconProps) {
function OutgoingArrowIcon (line 455) | function OutgoingArrowIcon({ width, height, color }: TIconProps) {
function CheckmarkIcon (line 465) | function CheckmarkIcon({ width, height, color }: TIconProps) {
function EyeIcon (line 477) | function EyeIcon({ width, height, color }: TIconProps) {
function LanguageIcon (line 487) | function LanguageIcon({ width, height, color }: TIconProps) {
function AboutIcon (line 499) | function AboutIcon({ width, height, color }: TIconProps) {
function BackspaceIcon (line 509) | function BackspaceIcon({ width, height, color }: TIconProps) {
function SandClockIcon (line 525) | function SandClockIcon({ width, height, color }: TIconProps) {
function SearchIcon (line 537) | function SearchIcon({ width, height, color }: TIconProps) {
function ReceiveIcon (line 549) | function ReceiveIcon({ width, height, color }: TIconProps) {
function SendIcon (line 559) | function SendIcon({ width, height, color, disabled }: IExtendedIconProps) {
function ShareIcon (line 575) | function ShareIcon({ width, height, color }: TIconProps) {
function CoinIcon (line 592) | function CoinIcon({ width, height, color }: TIconProps) {
function ScanQRIcon (line 602) | function ScanQRIcon({ width, height, color }: TIconProps) {
function BookIcon (line 612) | function BookIcon({ width, height, color }: TIconProps) {
function FlagIcon (line 622) | function FlagIcon({ width, height, color }: TIconProps) {
function VerifiedIcon (line 632) | function VerifiedIcon({ width, height, color }: TIconProps) {
function LinkIcon (line 642) | function LinkIcon({ width, height, color }: TIconProps) {
function EyeClosedIcon (line 652) | function EyeClosedIcon({ width, height, color }: TIconProps) {
function LeftArrow (line 673) | function LeftArrow({ width, height, color }: TIconProps) {
function EcashIcon (line 683) | function EcashIcon({ width, height, color }: TIconProps) {
function MenuDotsIcon (line 709) | function MenuDotsIcon({ width, height, color }: TIconProps) {
function ListVerifiedIcon (line 719) | function ListVerifiedIcon({ width, height }: { width?: number; height?: ...
function ListFavIcon (line 732) | function ListFavIcon({ width, height, color }: TIconProps) {
function OutlinedFavIcon (line 752) | function OutlinedFavIcon({ width, height, color }: TIconProps) {
function HeartIcon (line 770) | function HeartIcon({ width, height, color }: TIconProps) {
function GithubIcon (line 780) | function GithubIcon({ width, height, color }: TIconProps) {
function TelegramIcon (line 792) | function TelegramIcon({ width, height, color }: TIconProps) {
function ReadmeIcon (line 802) | function ReadmeIcon({ width, height, color }: TIconProps) {
function OptionsIcon (line 812) | function OptionsIcon({ width, height, color }: TIconProps) {
function KeyIcon (line 822) | function KeyIcon({ width, height, color }: TIconProps) {
function SendMsgIcon (line 840) | function SendMsgIcon({ width, height, color }: TIconProps) {
function DatabaseIcon (line 857) | function DatabaseIcon({ width, height, color }: TIconProps) {
function ImageIcon (line 867) | function ImageIcon({ width, height, color }: TIconProps) {
function DownloadIcon (line 877) | function DownloadIcon({ width, height, color }: TIconProps) {
function AppleIcon (line 891) | function AppleIcon({ width, height, color }: TIconProps) {
function VerifiedFilledIcon (line 901) | function VerifiedFilledIcon({ width, height, color }: TIconProps) {
function ReleaseTagIcon (line 911) | function ReleaseTagIcon({ width, height, color }: TIconProps) {
function LeafIcon (line 921) | function LeafIcon({ width, height, color }: TIconProps) {
function BoltIcon (line 931) | function BoltIcon({ width, height, color }: TIconProps) {
function ExitIcon (line 943) | function ExitIcon({ width, height, color }: TIconProps) {
function HomeWifiIcon (line 960) | function HomeWifiIcon({ width, height, color }: TIconProps) {
function BatteryChargingIcon (line 982) | function BatteryChargingIcon({ width, height, color }: TIconProps) {
function ConnectionErrorIcon (line 1005) | function ConnectionErrorIcon({ width, height, color }: TIconProps) {
function ClockIcon (line 1015) | function ClockIcon({ width, height, color }: TIconProps) {
function CloseCircleIcon (line 1028) | function CloseCircleIcon({ width, height, color }: TIconProps) {
function WalletIcon (line 1038) | function WalletIcon({ width, height, color, active }: TIconProps) {
function BookIconNav (line 1076) | function BookIconNav({ width, height, color, active }: TIconProps) {
function SettingsIcon (line 1129) | function SettingsIcon({ width, height, color, active }: TIconProps) {
FILE: src/components/InputAndLabel.tsx
type IInputAndLabelProps (line 9) | interface IInputAndLabelProps {
function InputAndLabel (line 19) | function InputAndLabel({
FILE: src/components/Loading.tsx
type ILoadingProps (line 6) | interface ILoadingProps {
function Loading (line 11) | function Loading({ color, size }: ILoadingProps) {
FILE: src/components/Logo.tsx
type ILogoProps (line 4) | interface ILogoProps {
function Logo (line 10) | function Logo({ size, success, style }: ILogoProps) {
FILE: src/components/MintBalance.tsx
type IMintBalanceProps (line 11) | interface IMintBalanceProps {
function MintBalance (line 17) | function MintBalance({ balance, txtColor, disabled }: IMintBalanceProps) {
FILE: src/components/MintHeaderSelector.tsx
type IMintHeaderSelectorProps (line 15) | interface IMintHeaderSelectorProps {
function MintHeaderSelector (line 23) | function MintHeaderSelector({
FILE: src/components/MintSelectionSheet.tsx
type MintSelectionSheetProps (line 24) | interface MintSelectionSheetProps {
FILE: src/components/MintSelector.tsx
type IMintSelectorProps (line 12) | interface IMintSelectorProps {
function MintSelector (line 20) | function MintSelector({
FILE: src/components/Option.tsx
type IOptionProps (line 11) | interface IOptionProps {
function Option (line 21) | function Option({
FILE: src/components/OverviewRow.tsx
function OverviewRow (line 6) | function OverviewRow({ txt1, txt2 }: { txt1: string; txt2: string }) {
FILE: src/components/Progress.tsx
type IProgressProps (line 7) | interface IProgressProps {
function Progress (line 14) | function Progress({
FILE: src/components/QR.tsx
function truncateStr (line 14) | function truncateStr(str: string, len: number): string {
type QRProps (line 20) | interface QRProps {
function QR (line 29) | function QR({ size, value, animate, truncateNum, onError }: QRProps) {
FILE: src/components/RadioBtn.tsx
function RadioBtn (line 5) | function RadioBtn({ selected }: { selected?: boolean }) {
FILE: src/components/Screen.tsx
type IContainerProps (line 10) | interface IContainerProps {
function Screen (line 23) | function Screen({
function ScreenWithKeyboard (line 78) | function ScreenWithKeyboard(props: IContainerProps) {
FILE: src/components/Separator.tsx
type ISeparatorProps (line 5) | interface ISeparatorProps {
function Separator (line 10) | function Separator({ style, noMargin }: ISeparatorProps) {
FILE: src/components/SwipeButton.tsx
constant BUTTON_PADDING (line 19) | const BUTTON_PADDING = 10;
constant BUTTON_HEIGHT (line 20) | const BUTTON_HEIGHT = 72;
constant HORIZONTAL_MARGIN (line 21) | const HORIZONTAL_MARGIN = 20;
constant SWIPEABLE_DIMENSIONS (line 22) | const SWIPEABLE_DIMENSIONS = BUTTON_HEIGHT - 2 * BUTTON_PADDING;
constant SPRING_CONFIG (line 24) | const SPRING_CONFIG = {
type ISwipeButtonProps (line 34) | interface ISwipeButtonProps {
type SwipeButtonHandle (line 39) | interface SwipeButtonHandle {
function SwipeButton (line 43) | function SwipeButton({ txt, onToggle }: ISwipeButtonProps, ref: React.Re...
FILE: src/components/Toaster.tsx
function Toaster (line 10) | function Toaster() {
FILE: src/components/Toggle.tsx
type IToggleProps (line 7) | interface IToggleProps {
function Toggle (line 13) | function Toggle({ value, onChange, disabled }: IToggleProps) {
FILE: src/components/Txt.tsx
type ITxtProps (line 5) | interface ITxtProps {
function Txt (line 14) | function Txt({ txt, bold, center, error, success, styles }: ITxtProps) {
FILE: src/components/TxtInput.tsx
type ITxtInputProps (line 14) | interface ITxtInputProps {
function TxtInput (line 31) | function TxtInput({
FILE: src/components/hooks/AnimatedQr.ts
type AnimatedQrOptions (line 5) | type AnimatedQrOptions = {
FILE: src/components/hooks/Copy.tsx
function useCopy (line 4) | function useCopy() {
FILE: src/components/hooks/Loading.tsx
function useLoading (line 3) | function useLoading() {
FILE: src/components/hooks/useCashuClaimFlow.ts
type ClaimResult (line 10) | type ClaimResult = SuccessClaimResult | CancelledClaimResult | ErrorClai...
type SuccessClaimResult (line 11) | type SuccessClaimResult = {
type CancelledClaimResult (line 16) | type CancelledClaimResult = {
type ErrorClaimResult (line 19) | type ErrorClaimResult = {
function useCashuClaimFlow (line 24) | function useCashuClaimFlow() {
FILE: src/components/hooks/useDiscoverMints.ts
type MintRecommendation (line 6) | type MintRecommendation = {
type UseDiscoverMintsResult (line 21) | interface UseDiscoverMintsResult {
function useDiscoverMints (line 27) | function useDiscoverMints(): UseDiscoverMintsResult {
FILE: src/components/hooks/useNfcPayment.ts
type TNfcPaymentHandoffKind (line 10) | type TNfcPaymentHandoffKind = Extract<
constant NFC_CANDIDATE_PRIORITY (line 15) | const NFC_CANDIDATE_PRIORITY: PaymentCandidateKind[] = [
function selectNfcCandidate (line 22) | function selectNfcCandidate(request: string) {
function isNfcPaymentHandoffKind (line 29) | function isNfcPaymentHandoffKind(kind: PaymentCandidateKind): kind is TN...
type NfcPaymentHandoff (line 33) | interface NfcPaymentHandoff {
type NfcPaymentResult (line 38) | interface NfcPaymentResult {
type StartPaymentOptions (line 48) | interface StartPaymentOptions {
class LimitExceededError (line 57) | class LimitExceededError extends Error {
method constructor (line 64) | constructor(paymentRequest: string, amount: number, mint: string, maxA...
type UseNfcPaymentOptions (line 74) | interface UseNfcPaymentOptions {
type UseNfcPaymentReturn (line 89) | interface UseNfcPaymentReturn {
function useNfcPayment (line 127) | function useNfcPayment(options: UseNfcPaymentOptions = {}): UseNfcPaymen...
FILE: src/components/hooks/useUrDecoder.ts
type UseUrDecoderOptions (line 4) | type UseUrDecoderOptions = {
type AddPartResult (line 8) | type AddPartResult = {
function useUrDecoder (line 15) | function useUrDecoder(options: UseUrDecoderOptions = {}) {
FILE: src/components/modal/ConfirmBottomSheet.tsx
type ConfirmBottomSheetRef (line 10) | type ConfirmBottomSheetRef = {
type SheetOptions (line 23) | interface SheetOptions {
FILE: src/components/modal/ConfirmationModal.tsx
type ConfirmationModalRef (line 11) | type ConfirmationModalRef = {
type IConfirmationModalProps (line 16) | interface IConfirmationModalProps {
FILE: src/components/modal/MeltConfirmationModal.tsx
type MeltConfirmationModalRef (line 19) | type MeltConfirmationModalRef = ConfirmationModalRef;
type IMeltConfirmationModalProps (line 21) | interface IMeltConfirmationModalProps {
type TRowTone (line 30) | type TRowTone = "default" | "success" | "danger";
type IDetailRow (line 32) | interface IDetailRow {
function DetailRow (line 229) | function DetailRow({ row }: { row: IDetailRow }) {
function truncateMiddle (line 266) | function truncateMiddle(value: string, start = 14, end = 10) {
FILE: src/components/modal/NfcPaymentModal.tsx
type NfcPaymentModalRef (line 22) | interface NfcPaymentModalRef {
type INfcPaymentModalProps (line 29) | interface INfcPaymentModalProps {
type PendingConfirmation (line 41) | interface PendingConfirmation {
FILE: src/components/modal/OperationMintPanel.tsx
type TOperationMintPanelRowTone (line 12) | type TOperationMintPanelRowTone = "default" | "success" | "danger";
type IOperationMintPanelRow (line 14) | interface IOperationMintPanelRow {
type IOperationMintPanelProps (line 20) | interface IOperationMintPanelProps {
function OperationMintPanel (line 25) | function OperationMintPanel({ mint, rows }: IOperationMintPanelProps) {
function MetaRow (line 99) | function MetaRow({ row }: { row: IOperationMintPanelRow }) {
FILE: src/components/modal/SendConfirmationModal.tsx
type SendConfirmationModalRef (line 18) | type SendConfirmationModalRef = ConfirmationModalRef;
type TPreparedOrLaterSendOperation (line 19) | type TPreparedOrLaterSendOperation = Exclude<SendOperation, { state: "in...
type ISendConfirmationModalProps (line 21) | interface ISendConfirmationModalProps {
type TRowTone (line 29) | type TRowTone = "default" | "success" | "danger";
type IDetailRow (line 31) | interface IDetailRow {
function DetailRow (line 163) | function DetailRow({ row }: { row: IDetailRow }) {
FILE: src/components/modal/TrustMintBottomSheet.tsx
type TrustMintAction (line 19) | type TrustMintAction = "trust" | "cancel" | "swap";
type TrustMintBottomSheetRef (line 21) | type TrustMintBottomSheetRef = {
FILE: src/components/modal/TrustMintProvider.tsx
type TrustMintContextValue (line 5) | type TrustMintContextValue = {
function TrustMintModalProvider (line 11) | function TrustMintModalProvider({ children }: { children: React.ReactNod...
function useTrustMint (line 28) | function useTrustMint() {
FILE: src/components/modal/index.tsx
type IMyModalProps (line 14) | interface IMyModalProps {
function MyModal (line 25) | function MyModal({
FILE: src/components/nav/Navigator.tsx
function Navigator (line 27) | function Navigator({ shouldOnboard }: INavigatorProps) {
FILE: src/components/nav/TopNav.tsx
type ITopNavProps (line 10) | interface ITopNavProps {
function TopNav (line 19) | function TopNav({
FILE: src/components/nav/utils.ts
function preventBack (line 6) | function preventBack(e: TBeforeRemoveEvent, dispatch: (action: any) => v...
FILE: src/config/config.base.ts
function getDebugHost (line 4) | function getDebugHost() {
type ConfigBaseProps (line 17) | interface ConfigBaseProps {
type PersistNavigationConfig (line 26) | type PersistNavigationConfig = ConfigBaseProps["persistNavigation"];
FILE: src/consts/env.ts
type AppVariant (line 21) | type AppVariant = "preview" | "beta" | "prod" | "dev" | undefined;
function nodeEnvShort (line 25) | function nodeEnvShort(): "test" | AppVariant {
function appVariant (line 47) | function appVariant(): AppVariant {
FILE: src/context/Currency.tsx
constant REFRESH_INTERVAL_MS (line 10) | const REFRESH_INTERVAL_MS = 5 * 60 * 1000;
constant DEFAULT_CURRENCY (line 11) | const DEFAULT_CURRENCY = "USD";
type ICurrencyContext (line 13) | interface ICurrencyContext {
function initialize (line 128) | async function initialize() {
type UseCurrencyType (line 325) | type UseCurrencyType = ReturnType<typeof useCurrency>;
FILE: src/context/KnownMints.tsx
type KnownMintWithBalance (line 5) | type KnownMintWithBalance = Mint & { balance: number };
FILE: src/context/Linking.tsx
type EventType (line 6) | interface EventType {
function addEventListener (line 20) | function addEventListener(
constant LINK_CANDIDATE_PRIORITY (line 30) | const LINK_CANDIDATE_PRIORITY: PaymentStringCandidate["kind"][] = [
function normalizePaymentLink (line 37) | function normalizePaymentLink(url: string) {
function onChange (line 50) | function onChange(event: { url: string }) {
FILE: src/context/NfcAmountLimits.tsx
constant NO_LIMIT (line 6) | const NO_LIMIT = -1;
constant DEFAULT_LIMIT (line 9) | const DEFAULT_LIMIT = 50_000;
type INfcAmountLimitsContext (line 11) | interface INfcAmountLimitsContext {
function loadSettings (line 26) | async function loadSettings() {
FILE: src/context/Npc.tsx
type INpcAccount (line 25) | type INpcAccount = IStoredNpcAccount & {
type TNpcUsernameAccountRequest (line 33) | type TNpcUsernameAccountRequest = TNpcUsernameRequest & {
type INpcContext (line 37) | interface INpcContext {
function sortAccounts (line 52) | function sortAccounts(accounts: IStoredNpcAccount[]) {
function parseAccounts (line 65) | function parseAccounts(raw: string | null): IStoredNpcAccount[] {
function loadStoredAccounts (line 119) | async function loadStoredAccounts() {
function saveStoredAccounts (line 125) | async function saveStoredAccounts(accounts: IStoredNpcAccount[]) {
function hydrateAccount (line 129) | async function hydrateAccount(manager: Manager, account: IStoredNpcAccou...
function NpcProvider (line 153) | function NpcProvider({ children }: { children: React.ReactNode }) {
function useNpcContext (line 381) | function useNpcContext() {
FILE: src/context/Privacy.tsx
type usePrivacyType (line 67) | type usePrivacyType = ReturnType<typeof usePrivacy>;
FILE: src/context/Prompt.tsx
type usePromptType (line 45) | type usePromptType = ReturnType<typeof usePrompt>;
FILE: src/context/Theme.tsx
type ThemeMode (line 8) | type ThemeMode = "dark" | "light" | "auto";
type useThemeType (line 79) | type useThemeType = ReturnType<typeof useTheme>;
FILE: src/i18n.ts
type NS (line 16) | enum NS {
FILE: src/i18next.d.ts
type CustomTypeOptions (line 4) | interface CustomTypeOptions {
FILE: src/logger/AppLogger.ts
type LogLevel (line 1) | type LogLevel = "error" | "warn" | "info" | "debug";
type LogBindings (line 3) | type LogBindings = Record<string, unknown>;
type LogTransport (line 5) | interface LogTransport {
function isPlainObject (line 16) | function isPlainObject(value: unknown): value is Record<string, unknown> {
class ConsoleTransport (line 22) | class ConsoleTransport implements LogTransport {
method write (line 23) | write(level: LogLevel, message: string, meta: unknown[], bindings?: Lo...
type AppLoggerOptions (line 54) | type AppLoggerOptions = {
class AppLogger (line 67) | class AppLogger {
method constructor (line 72) | constructor(options?: AppLoggerOptions) {
method shouldLog (line 84) | private shouldLog(level: LogLevel): boolean {
method write (line 88) | private write(level: LogLevel, message: string, meta: unknown[]) {
method error (line 96) | error(message: string, ...metaOrContext: unknown[]): void {
method warn (line 106) | warn(message: string, ...metaOrContext: unknown[]): void {
method info (line 116) | info(message: string, ...metaOrContext: unknown[]): void {
method debug (line 126) | debug(message: string, ...metaOrContext: unknown[]): void {
method log (line 134) | log(level: LogLevel, message: string, ...meta: unknown[]): void {
method child (line 138) | child(bindings: LogBindings): AppLogger {
FILE: src/logger/index.ts
function l (line 18) | function l(msg?: unknown, ...optionalParams: unknown[]) {
function debug (line 43) | function debug(msg?: unknown, ...optionalParams: unknown[]) {
function warn (line 51) | function warn(msg: unknown, ...args: unknown[]) {
function err (line 54) | function err(msg: unknown, ...args: unknown[]) {
function callerInfo (line 57) | function callerInfo(skipOf = 3) {
FILE: src/model/env.ts
type IEnv (line 1) | interface IEnv {
FILE: src/model/i18n.ts
type TTlLangNames (line 14) | type TTlLangNames = (typeof _tlLangNames)[number];
type TranslationLangCodes (line 29) | type TranslationLangCodes = (typeof _translationLangCodes)[number];
type ILangsOpt (line 32) | interface ILangsOpt {
FILE: src/model/index.ts
type IExpoConfig (line 5) | interface IExpoConfig extends ExpoConfig {
type IInitialProps (line 14) | interface IInitialProps {
type ILnUrl (line 25) | interface ILnUrl {
type ILnUrlPayRequest (line 34) | interface ILnUrlPayRequest {
type IMint (line 41) | interface IMint {
type IMintUrl (line 48) | interface IMintUrl {
type IMintWithBalance (line 53) | interface IMintWithBalance {
type IMintBalWithName (line 58) | interface IMintBalWithName extends IMintWithBalance {
type ITokenInfo (line 62) | interface ITokenInfo {
type IPreferencesResp (line 68) | interface IPreferencesResp {
type IPreferences (line 76) | interface IPreferences {
type IContactResp (line 84) | interface IContactResp {
type IProofSelection (line 91) | interface IProofSelection extends Proof {
type txType (line 95) | enum txType {
type TTXType (line 102) | type TTXType = txType.SEND_RECEIVE | txType.LIGHTNING | txType.SWAP | tx...
type IHistoryEntry (line 111) | interface IHistoryEntry {
type IInvoice (line 126) | interface IInvoice {
type QueryArgs (line 149) | type QueryArgs = (number | string | null)[];
type IKeyValuePair (line 156) | interface IKeyValuePair<T> {
type IContact (line 161) | interface IContact {
type IPromptState (line 167) | interface IPromptState {
type IOpenPromptAutoCloseProps (line 173) | interface IOpenPromptAutoCloseProps {
type TPayLnInvoiceReturnType (line 179) | type TPayLnInvoiceReturnType = Promise<{
type TRequestTokenReturnType (line 186) | type TRequestTokenReturnType = Promise<{
type ISecret (line 191) | interface ISecret {
type Query (line 195) | interface Query {
type IExchangeRate (line 201) | interface IExchangeRate {
type IExchangeRates (line 209) | type IExchangeRates = Record<string, IExchangeRate>;
type TCurrencyCode (line 211) | type TCurrencyCode = string;
type IFormattedAmount (line 213) | interface IFormattedAmount {
FILE: src/model/nav.ts
type ILnurlNavData (line 19) | interface ILnurlNavData {
type TMintInvoiceOperation (line 25) | type TMintInvoiceOperation = Awaited<ReturnType<Manager["ops"]["mint"]["...
type BaseSuccessConfig (line 31) | interface BaseSuccessConfig {
type MeltSuccessConfig (line 37) | interface MeltSuccessConfig extends BaseSuccessConfig {
type AutoSwapSuccessConfig (line 45) | interface AutoSwapSuccessConfig extends BaseSuccessConfig {
type ClaimSuccessConfig (line 53) | interface ClaimSuccessConfig extends BaseSuccessConfig {
type ReceiveSuccessConfig (line 59) | interface ReceiveSuccessConfig extends BaseSuccessConfig {
type ZapSuccessConfig (line 65) | interface ZapSuccessConfig extends BaseSuccessConfig {
type RestoreSuccessConfig (line 72) | interface RestoreSuccessConfig extends BaseSuccessConfig {
type SendSuccessConfig (line 78) | interface SendSuccessConfig extends BaseSuccessConfig {
type SuccessConfig (line 83) | type SuccessConfig =
type RootStackParamList (line 95) | type RootStackParamList = {
type TRouteString (line 215) | type TRouteString = "dashboard" | "Settings";
type TOnboardingPageProps (line 216) | type TOnboardingPageProps = NativeStackScreenProps<
type TSelectMintPageProps (line 221) | type TSelectMintPageProps = NativeStackScreenProps<
type TSelectTargetPageProps (line 226) | type TSelectTargetPageProps = NativeStackScreenProps<
type SendSelectAmountProps (line 231) | type SendSelectAmountProps = NativeStackScreenProps<
type TSelectAmountPageProps (line 236) | type TSelectAmountPageProps = NativeStackScreenProps<
type TCoinSelectionPageProps (line 241) | type TCoinSelectionPageProps = NativeStackScreenProps<
type TProcessingPageProps (line 246) | type TProcessingPageProps = NativeStackScreenProps<
type TMintConfirmPageProps (line 251) | type TMintConfirmPageProps = NativeStackScreenProps<
type TScanSuccessPageProps (line 256) | type TScanSuccessPageProps = NativeStackScreenProps<
type TProcessingErrorPageProps (line 261) | type TProcessingErrorPageProps = NativeStackScreenProps<
type TMintInvoicePageProps (line 266) | type TMintInvoicePageProps = NativeStackScreenProps<
type TDashboardPageProps (line 271) | type TDashboardPageProps = NativeStackScreenProps<
type TDisclaimerPageProps (line 276) | type TDisclaimerPageProps = NativeStackScreenProps<
type TEncodedTokenPageProps (line 281) | type TEncodedTokenPageProps = NativeStackScreenProps<
type TSuccessPageProps (line 286) | type TSuccessPageProps = NativeStackScreenProps<RootStackParamList, "suc...
type TSuccessScreenProps (line 287) | type TSuccessScreenProps = NativeStackScreenProps<
type TMintManagementPageProps (line 292) | type TMintManagementPageProps = NativeStackScreenProps<
type TMintInfoPageProps (line 297) | type TMintInfoPageProps = NativeStackScreenProps<RootStackParamList, "mi...
type TMintProofsPageProps (line 298) | type TMintProofsPageProps = NativeStackScreenProps<
type TSettingsPageProps (line 303) | type TSettingsPageProps = CompositeScreenProps<
type TDisplaySettingsPageProps (line 307) | type TDisplaySettingsPageProps = CompositeScreenProps<
type TLanguageSettingsPageProps (line 311) | type TLanguageSettingsPageProps = CompositeScreenProps<
type TAdvancedSettingsPageProps (line 315) | type TAdvancedSettingsPageProps = CompositeScreenProps<
type TCurrencySettingsPageProps (line 319) | type TCurrencySettingsPageProps = CompositeScreenProps<
type TViewMnemonicPageProps (line 323) | type TViewMnemonicPageProps = CompositeScreenProps<
type THistoryPageProps (line 327) | type THistoryPageProps = CompositeScreenProps<
type THistoryEntryPageProps (line 331) | type THistoryEntryPageProps = CompositeScreenProps<
type RestoreStackScreenProps (line 335) | type RestoreStackScreenProps<T extends keyof RestoreStackParamList> = Na...
type ISeedPageProps (line 340) | type ISeedPageProps = CompositeScreenProps<
type IRecoverPageProps (line 344) | type IRecoverPageProps = CompositeScreenProps<
type IMnemonicPageProps (line 348) | type IMnemonicPageProps = CompositeScreenProps<
type IRecoveringPageProps (line 352) | type IRecoveringPageProps = CompositeScreenProps<
type TProofsDebugPageProps (line 356) | type TProofsDebugPageProps = THistoryPageProps;
type INavigatorProps (line 357) | interface INavigatorProps {
type TBeforeRemoveEvent (line 361) | type TBeforeRemoveEvent = EventArg<
FILE: src/nav/HistoryNavigator.tsx
function HistoryNavigator (line 11) | function HistoryNavigator() {
FILE: src/nav/MintNavigator.tsx
function MintNavigator (line 7) | function MintNavigator() {
FILE: src/nav/RestoreNavigator.tsx
function RestoreNavigator (line 9) | function RestoreNavigator() {
FILE: src/nav/SettingsNavigator.tsx
function SettingsNavigator (line 16) | function SettingsNavigator() {
FILE: src/nav/navTypes.ts
type SettingsStackParamList (line 8) | type SettingsStackParamList = {
type TNfcSettingsPageProps (line 19) | type TNfcSettingsPageProps = NativeStackScreenProps<SettingsStackParamLi...
type TNpcSettingsPageProps (line 20) | type TNpcSettingsPageProps = NativeStackScreenProps<SettingsStackParamLi...
type SettingsStackScreenProps (line 22) | type SettingsStackScreenProps<T extends keyof SettingsStackParamList> = ...
type MintStackParamList (line 29) | type MintStackParamList = {
type MintStackScreenProps (line 35) | type MintStackScreenProps<T extends keyof MintStackParamList> = NativeSt...
type HistoryStackParamList (line 40) | type HistoryStackParamList = {
type RestoreStackParamList (line 49) | type RestoreStackParamList = {
type RestoreStackScreenProps (line 63) | type RestoreStackScreenProps<T extends keyof RestoreStackParamList> = Na...
type RecoverScreenProps (line 68) | type RecoverScreenProps = CompositeScreenProps<
type RecoverMintsScreenProps (line 73) | type RecoverMintsScreenProps = CompositeScreenProps<
type SendSelectAmountProps (line 78) | type SendSelectAmountProps = NativeStackScreenProps<RootStackParamList, ...
type MintSelectAmountProps (line 80) | type MintSelectAmountProps = NativeStackScreenProps<RootStackParamList, ...
type MeltInputProps (line 82) | type MeltInputProps = NativeStackScreenProps<RootStackParamList, "MeltIn...
type RestoreScreenProps (line 84) | type RestoreScreenProps = NativeStackScreenProps<RootStackParamList, "Re...
type QRScannerScreenProps (line 86) | type QRScannerScreenProps = NativeStackScreenProps<RootStackParamList, "...
FILE: src/screens/Dashboard.tsx
function Dashboard (line 45) | function Dashboard({ navigation }: TDashboardPageProps) {
type IActionBtnsProps (line 372) | interface IActionBtnsProps {
function ActionBtn (line 382) | function ActionBtn({
function renderHistoryEntry (line 413) | function renderHistoryEntry(entry: HistoryEntry) {
function withAlpha (line 428) | function withAlpha(hex: string, alpha: number) {
FILE: src/screens/DashboardActionSheet.tsx
type IDashboardActionSheetProps (line 8) | interface IDashboardActionSheetProps {
function DashboardActionSheet (line 17) | function DashboardActionSheet({
type IDashboardActionSheetOptionProps (line 55) | interface IDashboardActionSheetOptionProps {
function DashboardActionSheetOption (line 65) | function DashboardActionSheetOption({
FILE: src/screens/ErrorScreen/ErrorBoundary.tsx
type IProps (line 8) | interface IProps {
type IState (line 14) | interface IState {
class CustomErrorBoundary (line 28) | class CustomErrorBoundary extends Component<IProps, IState> {
method componentDidCatch (line 32) | componentDidCatch(error: Error, errorInfo: ErrorInfo) {
method shouldComponentUpdate (line 44) | shouldComponentUpdate(_nextProps: Readonly<IProps>, nextState: Readonl...
method isEnabled (line 49) | isEnabled(): boolean {
method render (line 58) | render() {
FILE: src/screens/ErrorScreen/ErrorDetails.tsx
type ErrorDetailsProps (line 11) | interface ErrorDetailsProps {
function ErrorDetails (line 18) | function ErrorDetails(props: ErrorDetailsProps) {
FILE: src/screens/History/Details.tsx
function HistoryEntryDetails (line 7) | function HistoryEntryDetails({ navigation, route }: THistoryEntryPagePro...
FILE: src/screens/History/components/DetailsSection.tsx
type DetailsSectionProps (line 7) | type DetailsSectionProps = {
function DetailsSection (line 11) | function DetailsSection({ children }: DetailsSectionProps) {
type DetailRowProps (line 15) | type DetailRowProps = {
function DetailRow (line 20) | function DetailRow({ label, value }: DetailRowProps) {
FILE: src/screens/History/components/HistoryDetailsScreen.tsx
type HistoryDetailsScreenProps (line 8) | type HistoryDetailsScreenProps = {
function HistoryDetailsScreen (line 13) | function HistoryDetailsScreen({ onGoBack, children }: HistoryDetailsScre...
FILE: src/screens/History/components/HistoryOverview.tsx
type HistoryOverviewProps (line 7) | type HistoryOverviewProps = {
function HistoryOverview (line 15) | function HistoryOverview({
FILE: src/screens/History/components/LatestHistory.tsx
type LatestHistoryProps (line 9) | type LatestHistoryProps = {
function renderHistoryEntry (line 17) | function renderHistoryEntry(history: HistoryEntry) {
FILE: src/screens/History/components/LatestHistoryMeltEntry.tsx
type LatestHistoryMeltEntryProps (line 8) | type LatestHistoryMeltEntryProps = {
FILE: src/screens/History/components/LatestHistoryMintEntry.tsx
type LatestHistoryMintEntryProps (line 8) | type LatestHistoryMintEntryProps = {
FILE: src/screens/History/components/LatestHistoryReceiveEntry.tsx
type LatestHistoryReceiveEntryProps (line 8) | type LatestHistoryReceiveEntryProps = {
FILE: src/screens/History/components/LatestHistorySendEntry.tsx
type LatestHistorySendEntryProps (line 8) | type LatestHistorySendEntryProps = {
FILE: src/screens/History/components/LatestHistoryWrapper.tsx
type LatestHistoryWrapperProps (line 16) | type LatestHistoryWrapperProps = {
function LatestHistoryWrapper (line 25) | function LatestHistoryWrapper({
FILE: src/screens/History/components/MeltHistoryDetails.tsx
type MeltHistoryDetailsProps (line 16) | type MeltHistoryDetailsProps = {
function MeltHistoryDetails (line 21) | function MeltHistoryDetails({ entry, onGoBack }: MeltHistoryDetailsProps) {
FILE: src/screens/History/components/MintHistoryDetails.tsx
type MintHistoryDetailsProps (line 17) | type MintHistoryDetailsProps = {
function MintHistoryDetails (line 22) | function MintHistoryDetails({ entry, onGoBack }: MintHistoryDetailsProps) {
FILE: src/screens/History/components/ReceiveHistoryDetails.tsx
type ReceiveHistoryDetailsProps (line 11) | type ReceiveHistoryDetailsProps = {
function ReceiveHistoryDetails (line 16) | function ReceiveHistoryDetails({ entry, onGoBack }: ReceiveHistoryDetail...
FILE: src/screens/History/components/SendHistoryDetails.tsx
type SendHistoryDetailsProps (line 16) | type SendHistoryDetailsProps = {
function SendHistoryDetails (line 21) | function SendHistoryDetails({ entry, onGoBack }: SendHistoryDetailsProps) {
FILE: src/screens/History/components/TokenSection.tsx
type TokenSectionProps (line 13) | type TokenSectionProps = {
function TokenSection (line 18) | function TokenSection({ label, value }: TokenSectionProps) {
FILE: src/screens/History/entryTime.tsx
type IEntryTimeProps (line 7) | interface IEntryTimeProps {
function EntryTime (line 12) | function EntryTime({ from, fallback }: IEntryTimeProps) {
FILE: src/screens/History/index.tsx
function HistoryPage (line 21) | function HistoryPage({ navigation }: THistoryPageProps) {
FILE: src/screens/Mints/AddMintScreen.tsx
type RecommendedMintItemProps (line 20) | interface RecommendedMintItemProps {
type MintRecommendation (line 27) | type MintRecommendation = {
function RecommendedMintItem (line 42) | function RecommendedMintItem({ mint, color, highlight, onPress }: Recomm...
type MintAddScreenProps (line 103) | type MintAddScreenProps = NativeStackScreenProps<MintStackParamList, "Mi...
function AddMintScreen (line 105) | function AddMintScreen({ navigation, route }: MintAddScreenProps) {
FILE: src/screens/Mints/MintHomeScreen.tsx
function MintHomeScreen (line 21) | function MintHomeScreen({ navigation }: any) {
FILE: src/screens/Mints/MintSettingsScreen.tsx
function MintSettingsScreen (line 21) | function MintSettingsScreen({ navigation, route }: any) {
type IInfoRow (line 169) | interface IInfoRow {
function InfoRow (line 175) | function InfoRow({ label, value, hasSeparator }: IInfoRow) {
FILE: src/screens/Mints/components/MetadataItem.tsx
type MetadataItemProps (line 8) | interface MetadataItemProps {
function MetadataItem (line 13) | function MetadataItem({ text, hasSeparator }: MetadataItemProps) {
FILE: src/screens/Mints/components/MintItem.tsx
type MintItemProps (line 12) | interface MintItemProps {
function MintItem (line 39) | function MintItem({
FILE: src/screens/Onboarding.tsx
function OnboardingScreen (line 15) | function OnboardingScreen({ navigation }: TOnboardingPageProps) {
FILE: src/screens/Payment/MeltInput.tsx
type TFinalizedMeltOperation (line 41) | type TFinalizedMeltOperation = Extract<MeltOperation, { state: "finalize...
type TMeltInputStep (line 42) | type TMeltInputStep = "request" | "amount";
function MeltInputScreen (line 44) | function MeltInputScreen({ navigation, route }: MeltInputProps) {
FILE: src/screens/Payment/MintSelectAmount.tsx
function MintSelectAmountScreen (line 22) | function MintSelectAmountScreen({ navigation }: MintSelectAmountProps) {
type IMeltOverviewProps (line 182) | interface IMeltOverviewProps {
function MeltOverview (line 190) | function MeltOverview({
FILE: src/screens/Payment/Processing.tsx
type IErrorProps (line 16) | interface IErrorProps {
function ProcessingScreen (line 21) | function ProcessingScreen({ navigation, route }: TProcessingPageProps) {
FILE: src/screens/Payment/ProcessingError.tsx
function ProcessingErrorScreen (line 18) | function ProcessingErrorScreen({ navigation, route }: TProcessingErrorPa...
FILE: src/screens/Payment/Receive/Invoice.tsx
function InvoiceScreen (line 22) | function InvoiceScreen({ navigation, route }: TMintInvoicePageProps) {
FILE: src/screens/Payment/Send/CoinSelection.tsx
function truncateStr (line 9) | function truncateStr(str: string, len: number): string {
function CoinSelectionScreen (line 28) | function CoinSelectionScreen({ navigation, route }: TCoinSelectionPagePr...
FILE: src/screens/Payment/Send/EncodedToken.tsx
function EncodedTokenPage (line 25) | function EncodedTokenPage({ navigation, route }: TEncodedTokenPageProps) {
FILE: src/screens/Payment/SendSelectAmount.tsx
type TPreparedOrLaterSendOperation (line 24) | type TPreparedOrLaterSendOperation = Exclude<SendOperation, { state: "in...
function isPreparedOrLaterSendOperation (line 26) | function isPreparedOrLaterSendOperation(
function SendSelectAmountScreen (line 32) | function SendSelectAmountScreen({ navigation }: SendSelectAmountProps) {
type IMeltOverviewProps (line 311) | interface IMeltOverviewProps {
function MeltOverview (line 319) | function MeltOverview({
FILE: src/screens/Payment/Success.tsx
function SuccessPage (line 19) | function SuccessPage({ navigation, route }: TSuccessPageProps) {
function Details (line 113) | function Details({ txt, value }: { txt: string; value: string }) {
FILE: src/screens/Payment/SuccessScreen.tsx
function hasPaymentDetails (line 29) | function hasPaymentDetails(
function hasSimpleAmount (line 35) | function hasSimpleAmount(config: SuccessConfig): boolean {
function DetailsRow (line 49) | function DetailsRow({ label, value }: { label: string; value: string }) {
type PaymentDetailsProps (line 58) | interface PaymentDetailsProps {
function PaymentDetails (line 63) | function PaymentDetails({ config, formatAmount }: PaymentDetailsProps) {
function SuccessScreen (line 96) | function SuccessScreen({ navigation, route }: TSuccessScreenProps) {
FILE: src/screens/QRScan/QrScannerScreen.tsx
constant QR_CANDIDATE_PRIORITY (line 25) | const QR_CANDIDATE_PRIORITY: PaymentCandidateKind[] = [
function selectQrCandidate (line 34) | function selectQrCandidate(candidates: PaymentStringCandidate[]) {
function QrScannerScreen (line 40) | function QrScannerScreen({ navigation }: QRScannerScreenProps) {
type IStatusPillProps (line 320) | interface IStatusPillProps {
function StatusPill (line 326) | function StatusPill({ label, color, iconName }: IStatusPillProps) {
type TFrameCornerPosition (line 335) | type TFrameCornerPosition = "topLeft" | "topRight" | "bottomLeft" | "bot...
type IFrameCornerProps (line 337) | interface IFrameCornerProps {
function FrameCorner (line 342) | function FrameCorner({ position, color }: IFrameCornerProps) {
FILE: src/screens/QRScan/components/CameraPermission.tsx
type ICameraPermissionProps (line 11) | interface ICameraPermissionProps {
function CameraPermission (line 17) | function CameraPermission({
FILE: src/screens/Restore/Recover.tsx
function RecoverScreen (line 17) | function RecoverScreen({ navigation }: RecoverScreenProps) {
FILE: src/screens/Restore/Recovering.tsx
function RecoveringScreen (line 25) | function RecoveringScreen({ navigation, route }: IRecoveringPageProps) {
FILE: src/screens/Restore/SelectRecoveryMint.tsx
function SelectRecoveryMintScreen (line 18) | function SelectRecoveryMintScreen({ navigation }: RecoverMintsScreenProp...
FILE: src/screens/Settings/Currency.tsx
constant COMMON_CURRENCIES (line 18) | const COMMON_CURRENCIES: TCurrencyCode[] = ["USD", "EUR", "GBP", "JPY", ...
function CurrencySettings (line 20) | function CurrencySettings({ navigation }: TCurrencySettingsPageProps) {
type ICurrencySelectionProps (line 172) | interface ICurrencySelectionProps {
function CurrencySelection (line 181) | function CurrencySelection({
FILE: src/screens/Settings/Display.tsx
function DisplaySettings (line 14) | function DisplaySettings({ navigation }: TDisplaySettingsPageProps) {
type IThemeSelectionProps (line 56) | interface IThemeSelectionProps {
function ThemeSelection (line 62) | function ThemeSelection({ name, selected, hasSeparator }: IThemeSelectio...
FILE: src/screens/Settings/Language.tsx
function LanguageSettings (line 26) | function LanguageSettings({ navigation }: TLanguageSettingsPageProps) {
type ILangSelectionProps (line 53) | interface ILangSelectionProps {
function LangSelection (line 61) | function LangSelection({ code, name, flag, selected, hasSeparator }: ILa...
FILE: src/screens/Settings/MenuItem.tsx
type IMenuItemProps (line 8) | interface IMenuItemProps {
function SettingsMenuItem (line 17) | function SettingsMenuItem({
FILE: src/screens/Settings/NfcSettings.tsx
function NfcSettings (line 16) | function NfcSettings({ navigation }: TNfcSettingsPageProps) {
FILE: src/screens/Settings/NpcSettings.tsx
type INpcAccountCardProps (line 24) | interface INpcAccountCardProps {
function NpcAccountCard (line 33) | function NpcAccountCard({
function NpcSettings (line 160) | function NpcSettings({ navigation }: TNpcSettingsPageProps) {
FILE: src/screens/Settings/ViewMnemonic.tsx
function ViewMnemonic (line 18) | function ViewMnemonic({ navigation }: TViewMnemonicPageProps) {
FILE: src/screens/Settings/index.tsx
function Settings (line 37) | function Settings({ navigation }: TSettingsPageProps) {
FILE: src/services/ExchangeRateService.ts
constant BLOCKCHAIN_INFO_API (line 4) | const BLOCKCHAIN_INFO_API = "https://blockchain.info/ticker";
class ExchangeRateService (line 6) | class ExchangeRateService {
method fetchRates (line 12) | async fetchRates(): Promise<IExchangeRates> {
method validateRates (line 45) | validateRates(rates: IExchangeRates): boolean {
FILE: src/services/NFCService.ts
constant SELECT_AID (line 9) | const SELECT_AID = [0x00, 0xa4, 0x04, 0x00, 0x07, 0xd2, 0x76, 0x00, 0x00...
constant SELECT_NDEF (line 11) | const SELECT_NDEF = [0x00, 0xa4, 0x00, 0x0c, 0x02, 0xe1, 0x04];
constant STATUS_OK (line 30) | const STATUS_OK = "9000";
constant STATUS_CODES (line 33) | const STATUS_CODES: Record<string, string> = {
function hex (line 47) | function hex(bytes: number[]): string {
function toBytes (line 51) | function toBytes(str: string): number[] {
function getStatusMessage (line 55) | function getStatusMessage(sw: string): string {
function buildTextNdef (line 61) | function buildTextNdef(text: string): number[] {
type ApduResponse (line 105) | interface ApduResponse {
function sendApdu (line 112) | async function sendApdu(command: number[], label?: string): Promise<Apdu...
class NfcError (line 140) | class NfcError extends Error {
method constructor (line 144) | constructor(message: string, code: string, sw?: string) {
type PaymentRequestResult (line 157) | interface PaymentRequestResult {
type NfcTextExchangeAction (line 168) | type NfcTextExchangeAction =
type NfcTextHandler (line 177) | type NfcTextHandler = (request: string) => Promise<NfcTextExchangeAction>;
class NfcCashuPayment (line 179) | class NfcCashuPayment {
method isSupported (line 183) | static async isSupported(): Promise<boolean> {
method isEnabled (line 197) | static async isEnabled(): Promise<boolean> {
method performPayment (line 231) | static async performPayment(handleRequest: NfcTextHandler): Promise<Pa...
method writeCashuToken (line 441) | static async writeCashuToken(token: string): Promise<void> {
constant SHORT_RECORD_FLAG (line 557) | const SHORT_RECORD_FLAG = 0x10;
function decodeTextRecord (line 559) | function decodeTextRecord(ndef: number[]): string {
FILE: src/services/NpcService.ts
constant NPC_BASE_URL (line 19) | const NPC_BASE_URL = "https://npubx.cash";
constant NPC_DOMAIN (line 20) | const NPC_DOMAIN = new URL(NPC_BASE_URL).host;
constant NPC_SYNC_INTERVAL_MS (line 21) | const NPC_SYNC_INTERVAL_MS = 25_000;
constant NPC_DEFAULT_ACCOUNT_ID (line 22) | const NPC_DEFAULT_ACCOUNT_ID = "npc-seed-0";
type TNpcAccountSource (line 24) | type TNpcAccountSource = "seed" | "privateKey";
type IBaseStoredNpcAccount (line 26) | interface IBaseStoredNpcAccount {
type ISeedNpcAccount (line 32) | interface ISeedNpcAccount extends IBaseStoredNpcAccount {
type IPrivateKeyNpcAccount (line 37) | interface IPrivateKeyNpcAccount extends IBaseStoredNpcAccount {
type IStoredNpcAccount (line 42) | type IStoredNpcAccount = ISeedNpcAccount | IPrivateKeyNpcAccount;
type INpcIdentity (line 44) | interface INpcIdentity {
type TNpcUsernameRequest (line 50) | type TNpcUsernameRequest =
type INpcManager (line 63) | interface INpcManager extends Manager {
class StoreSinceStore (line 69) | class StoreSinceStore implements SinceStore {
method constructor (line 70) | constructor(private readonly key: string) {}
method get (line 72) | async get() {
method set (line 78) | async set(since: number) {
method clear (line 82) | async clear() {
function createNpcPlugin (line 87) | function createNpcPlugin(): Plugin {
function createDefaultNpcAccount (line 96) | function createDefaultNpcAccount(): IStoredNpcAccount {
function isValidNpcUsername (line 105) | function isValidNpcUsername(username: string) {
function getNpcAddress (line 110) | function getNpcAddress(username: string | undefined, npub: string) {
function getNpcSinceStore (line 115) | function getNpcSinceStore(accountId: string) {
function getNpcPrivateKeyStorageKey (line 119) | function getNpcPrivateKeyStorageKey(accountId: string) {
function bytesToHex (line 123) | function bytesToHex(bytes: Uint8Array) {
function normalizeHexPrivateKey (line 129) | function normalizeHexPrivateKey(hex: string) {
function hexToBytes (line 137) | function hexToBytes(hex: string) {
function normalizeNpcPrivateKey (line 146) | function normalizeNpcPrivateKey(input: string) {
function getSeedNpcIdentity (line 159) | async function getSeedNpcIdentity(accountIndex: number): Promise<INpcIde...
function getPrivateKeyNpcIdentity (line 174) | async function getPrivateKeyNpcIdentity(privateKeyStorageKey: string): P...
function getNpcIdentity (line 191) | async function getNpcIdentity(account: IStoredNpcAccount): Promise<INpcI...
function getNpcExtension (line 198) | function getNpcExtension(manager: Manager) {
function registerNpcAccount (line 206) | async function registerNpcAccount(manager: Manager, account: IStoredNpcA...
function removeNpcAccount (line 234) | async function removeNpcAccount(manager: Manager, accountId: string) {
function syncNpcAccount (line 240) | async function syncNpcAccount(manager: Manager, accountId: string) {
function getNpcAccountInfo (line 249) | async function getNpcAccountInfo(api: NPCAccountApi) {
function createNpcClient (line 253) | function createNpcClient(identity: INpcIdentity) {
function requestNpcUsername (line 257) | async function requestNpcUsername(
function payNpcUsernameRequest (line 307) | async function payNpcUsernameRequest(
FILE: src/services/SeedService.ts
class SeedService (line 7) | class SeedService {
method createNewMnemonic (line 9) | async createNewMnemonic(): Promise<{
method deleteMnemonic (line 21) | async deleteMnemonic() {
method setMnemonic (line 25) | setMnemonic(mnemonic: string) {
method getMnemonic (line 29) | getMnemonic() {
method isMnemonicSet (line 33) | isMnemonicSet() {
method getFingerprint (line 37) | async getFingerprint() {
method ensureMnemonicSet (line 45) | async ensureMnemonicSet() {
method getSeed (line 52) | getSeed() {
method getNostrSk (line 65) | async getNostrSk() {
method convertMnemonicToSeed (line 73) | convertMnemonicToSeed(mnemonic: string) {
FILE: src/shim.ts
function setupCryptoPolyfill (line 6) | function setupCryptoPolyfill() {
FILE: src/storage/DbProvider.ts
class DbProvider (line 9) | class DbProvider {
method constructor (line 13) | constructor(dbName: string) {
method getDatabase (line 20) | public getDatabase(): SQLite.SQLiteDatabase {
method getFingerprint (line 27) | public getFingerprint(): string | null {
method setFingerprint (line 32) | public setFingerprint(fingerprint: string): void {
method isOpen (line 39) | public isOpen(): boolean {
method close (line 46) | public async close(): Promise<void> {
method delete (line 66) | public async delete(): Promise<void> {
FILE: src/storage/dev.ts
function dropAllData (line 9) | async function dropAllData() {
FILE: src/storage/store/SecureStore.ts
class SecureStore (line 16) | class SecureStore {
method constructor (line 18) | constructor(options?: SecureStoreOptions) {
method set (line 21) | public static set(key: string, value: string, options?: SecureStoreOpt...
method set (line 24) | public set(key: string, value: string, options?: SecureStoreOptions): ...
method get (line 27) | public static get(key: string, options?: SecureStoreOptions): Promise<...
method get (line 30) | public get(key: string, options?: SecureStoreOptions): Promise<string ...
method delete (line 33) | public static delete(key: string, options?: SecureStoreOptions): Promi...
method delete (line 36) | public delete(key: string, options?: SecureStoreOptions): Promise<void> {
method isAvailable (line 39) | public static isAvailable(): Promise<boolean> {
method isAvailable (line 42) | public isAvailable(): Promise<boolean> {
FILE: src/storage/store/consts.ts
constant STORE_KEYS (line 1) | const STORE_KEYS = {
constant SECURESTORE_KEY (line 32) | const SECURESTORE_KEY = "auth_pin";
constant SECRET (line 33) | const SECRET = "secret";
FILE: src/storage/store/index.ts
class Store (line 4) | class Store {
method set (line 5) | async set(key: string, value: string) {
method get (line 8) | async get(key: string) {
method delete (line 11) | async delete(key: string) {
method clear (line 14) | async clear() {
FILE: src/storage/store/theme.ts
function getPreferences (line 6) | function getPreferences(): IPreferences {
function setPreferences (line 20) | function setPreferences(p: IPreferences) {
FILE: src/styles/colors.ts
type ExtendedTheme (line 4) | type ExtendedTheme = typeof DefaultTheme & {
type Colors (line 15) | enum Colors {
type Theme (line 32) | type Theme = typeof lightTheme | typeof darkTheme;
type H_Colors (line 83) | enum H_Colors {
type HighlightKey (line 94) | type HighlightKey = keyof typeof H_Colors;
function getPinpadBg (line 121) | function getPinpadBg(highlight: keyof typeof pinpadBg) {
type mainColors (line 125) | enum mainColors {
FILE: src/util/index.ts
function unixTimestamp (line 29) | function unixTimestamp() {
function uniq (line 36) | function uniq<T extends string | number | bigint | boolean | symbol>(ite...
function uniqByIContacts (line 40) | function uniqByIContacts(iter: Iterable<IContact>, key: keyof IContact) {
function clearArr (line 57) | function clearArr<T extends U[], U>(array: T) {
function sleep (line 61) | function sleep(ms: number) {
function formatBalance (line 65) | function formatBalance(bal: number) {
function formatInt (line 80) | function formatInt(
function getShortDateStr (line 102) | function getShortDateStr(date: Date) {
function isToday (line 111) | function isToday(someDate: Date) {
function getHistoryGroupDate (line 120) | function getHistoryGroupDate(date: Date) {
function formatMintUrl (line 124) | function formatMintUrl(url: string) {
function formatSeconds (line 137) | function formatSeconds(time: number) {
function getSelectedAmount (line 143) | function getSelectedAmount(proofs: IProofSelection[]) {
function vib (line 147) | function vib(pattern?: number | number[]) {
function hasTrustedMint (line 155) | function hasTrustedMint(uMints: ({ mintUrl: string } | string)[], tMints...
function extractStrFromURL (line 162) | function extractStrFromURL(url?: string) {
function getLnInvoiceInfo (line 181) | function getLnInvoiceInfo(invoice: string) {
function decodeLnInvoice (line 189) | function decodeLnInvoice(invoice: string) {
function cleanUpNumericStr (line 209) | function cleanUpNumericStr(str: string) {
function openUrl (line 216) | function openUrl(url: string) {
function copyStrToClipboard (line 223) | async function copyStrToClipboard(str: string) {
function getStrFromClipboard (line 227) | async function getStrFromClipboard() {
function share (line 240) | async function share(message: string, url?: string) {
function normalizeMintUrl (line 260) | function normalizeMintUrl(url: string) {
function sortMintsByDefault (line 268) | function sortMintsByDefault(mints: IMintBalWithName[], defaultMint: stri...
function debounce (line 281) | function debounce<T extends (...args: any[]) => void>(
function formatSatStr (line 295) | function formatSatStr(
function getUnixTimestampFromDaysAgo (line 305) | function getUnixTimestampFromDaysAgo(days: number) {
function getUnixTimestamp (line 310) | function getUnixTimestamp() {
function withTimeout (line 314) | function withTimeout<T>(promis: Promise<T>, ms: number) {
function timeout (line 318) | async function timeout<T>(ms = 1000) {
function getFlagEmoji (line 326) | function getFlagEmoji(code: string) {
FILE: src/util/lnurl.ts
constant LNURL_REGEX (line 5) | const LNURL_REGEX = /^(?:http.*[&?]lightning=|lightning:)?(lnurl[0-9]{1,...
constant LN_ADDRESS_REGEX (line 7) | const LN_ADDRESS_REGEX =
constant LNURLP_REGEX (line 10) | const LNURLP_REGEX = /^lnurlp:\/\/([\w-]+\.)+[\w-]+(:\d{1,5})?(\/[\w-./?...
type LightningAddress (line 12) | interface LightningAddress {
function isUrl (line 17) | function isUrl(url: string) {
function isLnurl (line 26) | function isLnurl(str: string) {
function getLnurlData (line 125) | function getLnurlData(url?: string): Promise<ILnUrlPayRequest> | null {
function getLnurlIdentifierFromMetadata (line 132) | function getLnurlIdentifierFromMetadata(metadata: string) {
FILE: src/util/localization.ts
function getLanguageCode (line 7) | function getLanguageCode() {
function getTranslationLangCode (line 16) | function getTranslationLangCode() {
FILE: src/util/lud16.ts
type LnAddressMetadata (line 3) | type LnAddressMetadata = {
function isLnurlPayMetadata (line 11) | function isLnurlPayMetadata(data: unknown): data is LnAddressMetadata {
function requestLnurlPayMetadata (line 27) | async function requestLnurlPayMetadata(lnUrlOrAddress: string): Promise<...
function getInvoiceFromLnAddress (line 40) | async function getInvoiceFromLnAddress(
FILE: src/util/paymentStringParser.ts
type PaymentCandidateKind (line 5) | type PaymentCandidateKind =
type PaymentCandidateSource (line 13) | type PaymentCandidateSource = "direct" | "uri" | "bitcoin-uri-body" | "b...
type IPaymentCandidateBase (line 15) | interface IPaymentCandidateBase {
type ICashuTokenCandidate (line 25) | interface ICashuTokenCandidate extends IPaymentCandidateBase {
type ILightningInvoiceCandidate (line 30) | interface ILightningInvoiceCandidate extends IPaymentCandidateBase {
type ILightningAddressCandidate (line 35) | interface ILightningAddressCandidate extends IPaymentCandidateBase {
type ILnurlCandidate (line 40) | interface ILnurlCandidate extends IPaymentCandidateBase {
type ICashuPaymentRequestCandidate (line 45) | interface ICashuPaymentRequestCandidate extends IPaymentCandidateBase {
type IBitcoinAddressCandidate (line 50) | interface IBitcoinAddressCandidate extends IPaymentCandidateBase {
type PaymentStringCandidate (line 55) | type PaymentStringCandidate =
constant CASHU_TOKEN_URI_PREFIXES (line 63) | const CASHU_TOKEN_URI_PREFIXES = [
constant LIGHTNING_PREFIXES (line 71) | const LIGHTNING_PREFIXES = ["lightning://", "lightning:", "lightning="];
constant LNURL_WRAPPER_PREFIXES (line 73) | const LNURL_WRAPPER_PREFIXES = ["lnurl://", "lnurl=", "lnurl:"];
constant CASHU_REQUEST_PARAM_KEYS (line 75) | const CASHU_REQUEST_PARAM_KEYS = new Set([
constant CASHU_TOKEN_PARAM_KEYS (line 86) | const CASHU_TOKEN_PARAM_KEYS = new Set(["cashu_token", "cashutoken", "to...
constant BITCOIN_ADDRESS_PARAM_KEYS (line 88) | const BITCOIN_ADDRESS_PARAM_KEYS = new Set(["bc", "tb", "bcrt"]);
function stripPrefix (line 90) | function stripPrefix(value: string, prefixes: string[]) {
function stripCashuTokenUri (line 96) | function stripCashuTokenUri(value: string) {
function stripLightningUri (line 105) | function stripLightningUri(value: string) {
function isCashuTokenValue (line 109) | function isCashuTokenValue(value: string) {
function isCashuPaymentRequestValue (line 118) | function isCashuPaymentRequestValue(value: string) {
function isLightningInvoiceValue (line 127) | function isLightningInvoiceValue(value: string) {
function isBitcoinAddressValue (line 138) | function isBitcoinAddressValue(value: string) {
function decodeUriComponent (line 146) | function decodeUriComponent(value: string) {
function addCandidate (line 154) | function addCandidate(candidates: PaymentStringCandidate[], candidate: P...
function parseStandalonePaymentString (line 168) | function parseStandalonePaymentString(
function parseBitcoinUri (line 266) | function parseBitcoinUri(input: string) {
function parsePaymentString (line 327) | function parsePaymentString(input: string): PaymentStringCandidate[] {
FILE: src/util/typeguards.ts
function isStr (line 3) | function isStr(v: unknown): v is string {
function isNum (line 6) | function isNum(v: unknown): v is number {
function isObj (line 9) | function isObj(v: unknown): v is object {
function isBool (line 12) | function isBool(v: unknown): v is boolean {
function isUndef (line 15) | function isUndef(v: unknown): v is undefined {
function isNull (line 18) | function isNull(v: unknown): v is null {
function isArr (line 21) | function isArr(v: unknown): v is unknown[] {
function isErr (line 24) | function isErr(v: unknown): v is Error {
function isBuf (line 27) | function isBuf(v: unknown): v is Buffer {
function isNonNullable (line 30) | function isNonNullable<T>(v: T): v is NonNullable<T> {
function isArrOf (line 33) | function isArrOf<T>(elemGuard: (x: unknown) => x is T) {
function isArrOfStr (line 36) | function isArrOfStr(arr: unknown): arr is string[] {
function isArrOfNum (line 39) | function isArrOfNum(arr: unknown[]): arr is number[] {
function isArrOfObj (line 42) | function isArrOfObj(arr: unknown[]): arr is object[] {
function isArrOfNonNullable (line 45) | function isArrOfNonNullable<T>(arr: unknown[]): arr is NonNullable<T>[] {
Condensed preview — 176 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,313K chars).
[
{
"path": ".gitignore",
"chars": 414,
"preview": "# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files\n\n# dependencies\nnode_modules"
},
{
"path": ".prettierignore",
"chars": 234,
"preview": "# Dependencies\nnode_modules\n\n# Build outputs\ndist\nbuild\n.expo\n\n# Native builds\nandroid\nios\n\n# Lock files\npackage-lock.js"
},
{
"path": ".prettierrc",
"chars": 207,
"preview": "{\n \"semi\": true,\n \"singleQuote\": false,\n \"tabWidth\": 2,\n \"useTabs\": false,\n \"trailingComma\": \"all\",\n \"bracketSpaci"
},
{
"path": "AGENTS.md",
"chars": 5992,
"preview": "# AGENTS.md — eNuts\n\n## Overview\n\n- Expo + React Native app written in TypeScript.\n- `strict` TypeScript enabled in `tsc"
},
{
"path": "TODO.md",
"chars": 2948,
"preview": "# TODO\n\n## Typecheck cleanup\n\nThese are the best next targets because they block `npx tsc --noEmit` from being useful as"
},
{
"path": "app.json",
"chars": 1735,
"preview": "{\n \"expo\": {\n \"name\": \"eNuts\",\n \"slug\": \"enuts\",\n \"version\": \"1.0.0\",\n \"orientation\": \"portrait\",\n \"icon"
},
{
"path": "assets/lottie/confetti.json",
"chars": 234715,
"preview": "{\n \"v\": \"5.5.6\",\n \"fr\": 60,\n \"ip\": 0,\n \"op\": 300,\n \"w\": 609,\n \"h\": 812,\n \"nm\": \"lottie (mobile)\",\n \"ddd\": 0,\n \""
},
{
"path": "assets/lottie/success.json",
"chars": 48020,
"preview": "{\n \"v\": \"5.7.1\",\n \"fr\": 30,\n \"ip\": 0,\n \"op\": 60,\n \"w\": 300,\n \"h\": 300,\n \"nm\": \"Comp 1\",\n \"ddd\": 0,\n \"assets\": ["
},
{
"path": "assets/translations/de.json",
"chars": 30771,
"preview": "{\n \"addrBook\": {\n \"addOwnNpub\": \"Füge dein NPUB hinzu\",\n \"favorite\": \"Favorisieren\",\n \"removeFav\": \"Favorit en"
},
{
"path": "assets/translations/en.json",
"chars": 27252,
"preview": "{\n \"addrBook\": {\n \"addOwnNpub\": \"Add your NPUB\",\n \"favorite\": \"Favorite\",\n \"removeFav\": \"Remove favorite\",\n "
},
{
"path": "assets/translations/es.json",
"chars": 29757,
"preview": "{\n \"addrBook\": {\n \"addOwnNpub\": \"Añadir tu NPUB\",\n \"favorite\": \"Favoritos\",\n \"removeFav\": \"Quitar de favoritos"
},
{
"path": "assets/translations/it.json",
"chars": 29926,
"preview": "{\n \"addrBook\": {\n \"addOwnNpub\": \"Aggiungi la tua NPUB\",\n \"favorite\": \"Preferito\",\n \"removeFav\": \"Rimuovi prefe"
},
{
"path": "assets/translations/ru.json",
"chars": 30349,
"preview": "{\n \"addrBook\": {\n \"addOwnNpub\": \"Добавьте свой NPUB\",\n \"favorite\": \"Добавить в избранное\",\n \"removeFav\": \"Убра"
},
{
"path": "assets/translations/th.json",
"chars": 26544,
"preview": "{\n \"addrBook\": {\n \"addOwnNpub\": \"เพิ่ม NPUB ของท่าน\",\n \"favorite\": \"รายการโปรด\",\n \"removeFav\": \"ลบ รายการโปรด\""
},
{
"path": "eas.json",
"chars": 507,
"preview": "{\n \"cli\": {\n \"version\": \">= 5.6.0\",\n \"appVersionSource\": \"remote\"\n },\n \"build\": {\n \"development\": {\n \"d"
},
{
"path": "expo-router-implementation-steps.md",
"chars": 14557,
"preview": "# Expo Router Implementation Steps\n\nThis document is the working execution plan for the Expo Router refactor.\n\nUse it as"
},
{
"path": "expo-router-migration-issues.md",
"chars": 17374,
"preview": "# Expo Router Migration Issues\n\nThis checklist breaks the migration into discrete issues that can be handled one by one."
},
{
"path": "expo-router-migration-plan.md",
"chars": 7462,
"preview": "# Expo Router Migration Plan\n\n## Goal\n\nMigrate the app from manual React Navigation stacks to Expo Router with the small"
},
{
"path": "index.ts",
"chars": 320,
"preview": "// Import shim first to set up crypto polyfill before any other modules\nimport \"./src/shim\";\n//TODO: Find a workaround f"
},
{
"path": "package.json",
"chars": 2280,
"preview": "{\n \"name\": \"enuts\",\n \"version\": \"1.0.0\",\n \"main\": \"index.ts\",\n \"scripts\": {\n \"start\": \"expo start\",\n \"android\""
},
{
"path": "src/components/ActionButtons.tsx",
"chars": 1400,
"preview": "import { View } from \"react-native\";\nimport { useSafeAreaInsets } from \"react-native-safe-area-context\";\nimport { s, Sca"
},
{
"path": "src/components/AmountInput.tsx",
"chars": 15202,
"preview": "import { useShakeAnimation } from \"@comps/animation/Shake\";\nimport Txt from \"@comps/Txt\";\nimport { useThemeContext } fro"
},
{
"path": "src/components/AnimatedSpinner.tsx",
"chars": 1998,
"preview": "import { useEffect } from \"react\";\nimport { View } from \"react-native\";\nimport Animated, {\n useAnimatedStyle,\n useShar"
},
{
"path": "src/components/App.tsx",
"chars": 7356,
"preview": "// Import shim first to set up crypto polyfill before any other modules\nimport \"../shim\";\n\nimport { l } from \"@log\";\nimp"
},
{
"path": "src/components/Balance.tsx",
"chars": 4024,
"preview": "import { SwapCurrencyIcon } from \"@comps/Icons\";\nimport type { RootStackParamList } from \"@model/nav\";\nimport type { Nat"
},
{
"path": "src/components/Blank.tsx",
"chars": 189,
"preview": "import { highlight } from \"@styles\";\nimport { View } from \"react-native\";\n\nexport default function Blank() {\n return <V"
},
{
"path": "src/components/Button.tsx",
"chars": 6363,
"preview": "import { useThemeContext } from \"@src/context/Theme\";\nimport { globals, highlight as hi, mainColors } from \"@styles\";\nim"
},
{
"path": "src/components/Card.tsx",
"chars": 896,
"preview": "import { useThemeContext } from \"@src/context/Theme\";\nimport { highlight as hi } from \"@styles\";\nimport type { ReactNode"
},
{
"path": "src/components/Copy.tsx",
"chars": 889,
"preview": "import { useThemeContext } from \"@src/context/Theme\";\nimport { mainColors } from \"@styles\";\nimport { TouchableOpacity } "
},
{
"path": "src/components/DashboardTopBar.tsx",
"chars": 2258,
"preview": "import { SettingsIcon } from \"@comps/Icons\";\nimport { usePrivacyContext } from \"@src/context/Privacy\";\nimport { useTheme"
},
{
"path": "src/components/Empty.tsx",
"chars": 1984,
"preview": "import type { RootStackParamList } from \"@model/nav\";\nimport type { NativeStackNavigationProp } from \"@react-navigation/"
},
{
"path": "src/components/Icons.tsx",
"chars": 108134,
"preview": "import { Image, StyleSheet } from \"react-native\";\nimport Svg, { ClipPath, Defs, G, Path, Rect } from \"react-native-svg\";"
},
{
"path": "src/components/InputAndLabel.tsx",
"chars": 1476,
"preview": "import { useThemeContext } from \"@src/context/Theme\";\nimport { useTranslation } from \"react-i18next\";\nimport { type Keyb"
},
{
"path": "src/components/Loading.tsx",
"chars": 562,
"preview": "import { useThemeContext } from \"@src/context/Theme\";\nimport { highlight as hi } from \"@styles\";\n\nimport AnimatedSpinner"
},
{
"path": "src/components/Logo.tsx",
"chars": 919,
"preview": "import { useThemeContext } from \"@src/context/Theme\";\nimport { Image, type ImageStyle, type StyleProp, StyleSheet, View "
},
{
"path": "src/components/MintBalance.tsx",
"chars": 1403,
"preview": "import { usePrivacyContext } from \"@src/context/Privacy\";\nimport { useThemeContext } from \"@src/context/Theme\";\nimport {"
},
{
"path": "src/components/MintHeaderSelector.tsx",
"chars": 3526,
"preview": "import { MintBoardIcon } from \"@comps/Icons\";\nimport MintSelectionSheet from \"@comps/MintSelectionSheet\";\nimport Txt fro"
},
{
"path": "src/components/MintSelectionSheet.tsx",
"chars": 10183,
"preview": "import Txt from \"@comps/Txt\";\nimport Button from \"@comps/Button\";\nimport { CheckmarkIcon } from \"@comps/Icons\";\nimport {"
},
{
"path": "src/components/MintSelector.tsx",
"chars": 2627,
"preview": "import { useThemeContext } from \"@src/context/Theme\";\nimport { usePrivacyContext } from \"@src/context/Privacy\";\nimport {"
},
{
"path": "src/components/Option.tsx",
"chars": 1610,
"preview": "import { useThemeContext } from \"@src/context/Theme\";\nimport { globals } from \"@styles\";\nimport { TouchableOpacity, View"
},
{
"path": "src/components/OverviewRow.tsx",
"chars": 416,
"preview": "import Separator from \"@comps/Separator\";\nimport Txt from \"@comps/Txt\";\nimport { globalStyles as globals } from \"@src/st"
},
{
"path": "src/components/Progress.tsx",
"chars": 1084,
"preview": "import { useThemeContext } from \"@src/context/Theme\";\nimport { highlight as hi } from \"@styles\";\nimport { StyleSheet, Vi"
},
{
"path": "src/components/QR.tsx",
"chars": 2403,
"preview": "import { useThemeContext } from \"@src/context/Theme\";\nimport { NS } from \"@src/i18n\";\nimport { mainColors } from \"@src/s"
},
{
"path": "src/components/RadioBtn.tsx",
"chars": 441,
"preview": "import { useThemeContext } from \"@src/context/Theme\";\nimport { globals, highlight as hi } from \"@styles\";\nimport { View "
},
{
"path": "src/components/Screen.tsx",
"chars": 1959,
"preview": "import TopNav from \"@nav/TopNav\";\nimport { isIOS } from \"@consts\";\nimport { useThemeContext } from \"@src/context/Theme\";"
},
{
"path": "src/components/Separator.tsx",
"chars": 680,
"preview": "import { useThemeContext } from \"@src/context/Theme\";\nimport { type StyleProp, View, type ViewStyle } from \"react-native"
},
{
"path": "src/components/SwipeButton.tsx",
"chars": 5769,
"preview": "import { useThemeContext } from \"@src/context/Theme\";\nimport { highlight as hi, mainColors } from \"@styles\";\nimport { us"
},
{
"path": "src/components/Toaster.tsx",
"chars": 1607,
"preview": "import { usePromptContext } from \"@src/context/Prompt\";\nimport { mainColors } from \"@src/styles\";\nimport { TouchableOpac"
},
{
"path": "src/components/Toggle.tsx",
"chars": 914,
"preview": "import { isIOS } from \"@consts\";\nimport { useThemeContext } from \"@src/context/Theme\";\nimport { highlight as hi } from \""
},
{
"path": "src/components/Txt.tsx",
"chars": 803,
"preview": "import { useThemeContext } from \"@src/context/Theme\";\nimport { globals, mainColors } from \"@styles\";\nimport { type Style"
},
{
"path": "src/components/TxtInput.tsx",
"chars": 2100,
"preview": "import { useThemeContext } from \"@src/context/Theme\";\nimport { globals, highlight as hi } from \"@styles\";\nimport { creat"
},
{
"path": "src/components/animation/Shake.ts",
"chars": 1021,
"preview": "import { useCallback, useRef } from \"react\";\nimport { Animated } from \"react-native\";\n\nexport const useShakeAnimation = "
},
{
"path": "src/components/hooks/AnimatedQr.ts",
"chars": 2159,
"preview": "import { useCallback, useState } from \"react\";\nimport { useFocusEffect } from \"@react-navigation/native\";\nimport { UR, U"
},
{
"path": "src/components/hooks/Copy.tsx",
"chars": 743,
"preview": "import { copyStrToClipboard } from \"@src/util\";\nimport { useCallback, useRef, useState } from \"react\";\n\nexport default f"
},
{
"path": "src/components/hooks/Loading.tsx",
"chars": 284,
"preview": "import { useState } from \"react\";\n\nexport default function useLoading() {\n const [loading, setLoading] = useState(false"
},
{
"path": "src/components/hooks/useCashuClaimFlow.ts",
"chars": 2264,
"preview": "import { getDecodedToken, Token } from \"@cashu/cashu-ts\";\nimport { useReceiveOperation } from \"@cashu/coco-react\";\nimpor"
},
{
"path": "src/components/hooks/useDiscoverMints.ts",
"chars": 1981,
"preview": "import { useState, useEffect, useMemo } from \"react\";\nimport { useMints } from \"@cashu/coco-react\";\nimport { appLogger }"
},
{
"path": "src/components/hooks/useNfcPayment.ts",
"chars": 12607,
"preview": "import { useState, useCallback } from \"react\";\nimport { useManager } from \"@cashu/coco-react\";\nimport { getEncodedToken "
},
{
"path": "src/components/hooks/useUrDecoder.ts",
"chars": 4789,
"preview": "import { useCallback, useMemo, useRef, useState } from \"react\";\nimport { UR, URDecoder } from \"@gandlaf21/bc-ur\";\n\ntype "
},
{
"path": "src/components/modal/ConfirmBottomSheet.tsx",
"chars": 3898,
"preview": "import React, { forwardRef, useCallback, useImperativeHandle, useRef, useState } from \"react\";\nimport { TrueSheet } from"
},
{
"path": "src/components/modal/ConfirmationModal.tsx",
"chars": 4196,
"preview": "import Button from \"@comps/Button\";\nimport Txt from \"@comps/Txt\";\nimport { TrueSheet } from \"@lodev09/react-native-true-"
},
{
"path": "src/components/modal/MeltConfirmationModal.tsx",
"chars": 9761,
"preview": "import Card from \"@comps/Card\";\nimport Copy from \"@comps/Copy\";\nimport ConfirmationModal, { type ConfirmationModalRef } "
},
{
"path": "src/components/modal/NfcPaymentModal.tsx",
"chars": 12398,
"preview": "import React, { forwardRef, useCallback, useImperativeHandle, useRef, useState } from \"react\";\nimport { TrueSheet } from"
},
{
"path": "src/components/modal/OperationMintPanel.tsx",
"chars": 4332,
"preview": "import { MintBoardIcon } from \"@comps/Icons\";\nimport Txt from \"@comps/Txt\";\nimport { Image } from \"expo-image\";\nimport t"
},
{
"path": "src/components/modal/SendConfirmationModal.tsx",
"chars": 6679,
"preview": "import Card from \"@comps/Card\";\nimport ConfirmationModal, { type ConfirmationModalRef } from \"@modal/ConfirmationModal\";"
},
{
"path": "src/components/modal/TrustMintBottomSheet.tsx",
"chars": 5815,
"preview": "import React, { forwardRef, useCallback, useImperativeHandle, useRef, useState } from \"react\";\nimport { TrueSheet } from"
},
{
"path": "src/components/modal/TrustMintProvider.tsx",
"chars": 1082,
"preview": "import React, { createContext, useCallback, useContext, useMemo, useRef } from \"react\";\nimport TrustMintBottomSheet, { t"
},
{
"path": "src/components/modal/index.tsx",
"chars": 4584,
"preview": "import { isIOS } from \"@consts\";\nimport { useThemeContext } from \"@src/context/Theme\";\nimport { highlight as hi, Highlig"
},
{
"path": "src/components/nav/Navigator.tsx",
"chars": 3820,
"preview": "import type { INavigatorProps, RootStackParamList } from \"@model/nav\";\nimport { createNativeStackNavigator } from \"@reac"
},
{
"path": "src/components/nav/TopNav.tsx",
"chars": 2688,
"preview": "import { LeftArrow } from \"@comps/Icons\";\nimport { useThemeContext } from \"@src/context/Theme\";\nimport { NS } from \"@src"
},
{
"path": "src/components/nav/utils.ts",
"chars": 669,
"preview": "import type { TBeforeRemoveEvent } from \"@model/nav\";\nimport { l } from \"@src/logger\";\n\nconst screens = [\"dashboard\", \"a"
},
{
"path": "src/config/config.base.ts",
"chars": 1318,
"preview": "import { env } from \"@src/consts\";\nimport { NativeModules } from \"react-native\";\n\nfunction getDebugHost() {\n try {\n "
},
{
"path": "src/config/config.dev.ts",
"chars": 295,
"preview": "/**\n * These are configuration settings for the dev environment.\n *\n * Do not include API secrets in this file or anywhe"
},
{
"path": "src/config/config.prod.ts",
"chars": 283,
"preview": "/**\n * These are configuration settings for the production environment.\n *\n * Do not include API secrets in this file or"
},
{
"path": "src/config/index.ts",
"chars": 992,
"preview": "/**\n * This file imports configuration objects from either the config.dev.js file\n * or the config.prod.js file dependin"
},
{
"path": "src/consts/env.ts",
"chars": 3224,
"preview": "import type { IExpoConfig } from \"@model\";\nimport { IEnv } from \"@model/env\";\nimport { default as Consts, ExecutionEnvir"
},
{
"path": "src/consts/index.ts",
"chars": 200,
"preview": "export { env, isExpo, isExpoDev, isExpoProd, isIOS, isReactNativeDevMode, isTestMode } from \"./env\";\nexport { DayInMs, H"
},
{
"path": "src/consts/time.ts",
"chars": 499,
"preview": "export const Ten_seconds = 10_000; /* */\nexport const MinuteInS = 60; /* */\nexport const FiveMins = 5 * MinuteInS;\nexp"
},
{
"path": "src/consts/urls.ts",
"chars": 141,
"preview": "export const repoIssueUrl = \"https://github.com/cashubtc/eNuts/issues/new\";\nexport const reportIssueUrl = \"https://enuts"
},
{
"path": "src/context/Balance.tsx",
"chars": 146,
"preview": "export { BalanceCtx, BalanceProvider, useBalanceContext } from \"@cashu/coco-react\";\nexport type { BalanceContextValue } "
},
{
"path": "src/context/Currency.tsx",
"chars": 11027,
"preview": "import { appLogger } from \"@src/logger\";\nimport type { IExchangeRates, IFormattedAmount, TCurrencyCode } from \"@model\";\n"
},
{
"path": "src/context/KnownMints.tsx",
"chars": 593,
"preview": "import { useMemo } from \"react\";\nimport { Mint } from \"@cashu/coco-core\";\nimport { useMints, useBalanceContext } from \"@"
},
{
"path": "src/context/Linking.tsx",
"chars": 2419,
"preview": "import { parsePaymentString, type PaymentStringCandidate } from \"@util\";\nimport { useCallback, useEffect, useState } fro"
},
{
"path": "src/context/Manager.tsx",
"chars": 200,
"preview": "import \"../shim\";\nexport {\n ManagerCtx,\n ManagerProvider,\n ManagerGate,\n useManager,\n useManagerContext,\n} from \"@c"
},
{
"path": "src/context/NfcAmountLimits.tsx",
"chars": 2050,
"preview": "import { store } from \"@store\";\nimport { STORE_KEYS } from \"@store/consts\";\nimport { createContext, useCallback, useCont"
},
{
"path": "src/context/Npc.tsx",
"chars": 11580,
"preview": "import type { Manager } from \"@cashu/coco-core\";\nimport { useManager } from \"@src/context/Manager\";\nimport {\n createDef"
},
{
"path": "src/context/Privacy.tsx",
"chars": 2352,
"preview": "/* eslint-disable no-return-await */\n\nimport { l } from \"@log\";\nimport { store } from \"@store\";\nimport { STORE_KEYS } fr"
},
{
"path": "src/context/Prompt.tsx",
"chars": 1793,
"preview": "import { l } from \"@log\";\nimport type { IOpenPromptAutoCloseProps, IPromptState } from \"@model\";\nimport { createContext,"
},
{
"path": "src/context/Theme.tsx",
"chars": 2707,
"preview": "import { getPreferences, setPreferences } from \"@src/storage/store/theme\";\nimport { l } from \"@log\";\nimport type { IPref"
},
{
"path": "src/i18n.ts",
"chars": 1649,
"preview": "import de from \"@assets/translations/de.json\";\nimport en from \"@assets/translations/en.json\";\nimport es from \"@assets/tr"
},
{
"path": "src/i18next.d.ts",
"chars": 187,
"preview": "import { resources, defaultNS } from \"./i18n\";\n\ndeclare module \"i18next\" {\n interface CustomTypeOptions {\n defaultNS"
},
{
"path": "src/logger/AppLogger.ts",
"chars": 4577,
"preview": "export type LogLevel = \"error\" | \"warn\" | \"info\" | \"debug\";\n\ntype LogBindings = Record<string, unknown>;\n\nexport interfa"
},
{
"path": "src/logger/index.ts",
"chars": 3139,
"preview": "import { env, isTestMode } from \"@consts\";\nimport { AppLogger } from \"./AppLogger\";\n\n/* function _log(\n\twithTime: boolea"
},
{
"path": "src/model/env.ts",
"chars": 134,
"preview": "export interface IEnv {\n NODE_ENV: string;\n APP_VARIANT: string;\n DEBUG: string;\n NODE_ENV_SHORT: string;\n SENTRY_D"
},
{
"path": "src/model/i18n.ts",
"chars": 663,
"preview": "const _tlLangNames = [\n \"english\",\n \"german\",\n \"french\",\n \"swahili\",\n \"spanish\",\n \"hungarian\",\n \"italian\",\n \"rus"
},
{
"path": "src/model/index.ts",
"chars": 4432,
"preview": "import type { Proof, Token } from \"@cashu/cashu-ts\";\nimport type { HighlightKey } from \"@styles\";\nimport type { ExpoConf"
},
{
"path": "src/model/nav.ts",
"chars": 9785,
"preview": "import type { Manager } from \"@cashu/coco-core\";\nimport { Token } from \"@cashu/cashu-ts\";\nimport type { EventArg, Naviga"
},
{
"path": "src/nav/HistoryNavigator.tsx",
"chars": 896,
"preview": "import { createNativeStackNavigator } from \"@react-navigation/native-stack\";\nimport HistoryPage from \"@screens/History\";"
},
{
"path": "src/nav/MintNavigator.tsx",
"chars": 690,
"preview": "import { createNativeStackNavigator } from \"@react-navigation/native-stack\";\nimport { MintHomeScreen, AddMintScreen, Min"
},
{
"path": "src/nav/RestoreNavigator.tsx",
"chars": 836,
"preview": "import { createNativeStackNavigator } from \"@react-navigation/native-stack\";\nimport SelectRecoveryMintScreen from \"@scre"
},
{
"path": "src/nav/SettingsNavigator.tsx",
"chars": 1566,
"preview": "import { createNativeStackNavigator } from \"@react-navigation/native-stack\";\nimport Settings from \"@screens/Settings\";\ni"
},
{
"path": "src/nav/navTypes.ts",
"chars": 2575,
"preview": "import { HistoryEntry } from \"@cashu/coco-core\";\nimport { CompositeScreenProps, NavigatorScreenParams } from \"@react-nav"
},
{
"path": "src/screens/Dashboard.tsx",
"chars": 18794,
"preview": "import DashboardTopBar from \"@comps/DashboardTopBar\";\nimport useLoading from \"@comps/hooks/Loading\";\nimport { useCashuCl"
},
{
"path": "src/screens/DashboardActionSheet.tsx",
"chars": 3211,
"preview": "import { CloseIcon } from \"@comps/Icons\";\nimport Txt from \"@comps/Txt\";\nimport { TrueSheet } from \"@lodev09/react-native"
},
{
"path": "src/screens/ErrorScreen/ErrorBoundary.tsx",
"chars": 2214,
"preview": "import { isReactNativeDevMode } from \"@consts\";\nimport { err } from \"@log\";\nimport type { ErrorInfo, ReactNode } from \"r"
},
{
"path": "src/screens/ErrorScreen/ErrorDetails.tsx",
"chars": 1868,
"preview": "import Txt from \"@comps/Txt\";\nimport { repoIssueUrl } from \"@consts/urls\";\nimport { usePromptContext } from \"@src/contex"
},
{
"path": "src/screens/History/Details.tsx",
"chars": 897,
"preview": "import type { THistoryEntryPageProps } from \"@model/nav\";\nimport { SendHistoryDetails } from \"./components/SendHistoryDe"
},
{
"path": "src/screens/History/components/DetailsSection.tsx",
"chars": 1117,
"preview": "import Txt from \"@comps/Txt\";\nimport { useThemeContext } from \"@src/context/Theme\";\nimport { View } from \"react-native\";"
},
{
"path": "src/screens/History/components/HistoryDetailsScreen.tsx",
"chars": 734,
"preview": "import Screen from \"@comps/Screen\";\nimport { NS } from \"@src/i18n\";\nimport { useTranslation } from \"react-i18next\";\nimpo"
},
{
"path": "src/screens/History/components/HistoryOverview.tsx",
"chars": 1417,
"preview": "import Txt from \"@comps/Txt\";\nimport { useThemeContext } from \"@src/context/Theme\";\nimport { useCurrencyContext } from \""
},
{
"path": "src/screens/History/components/LatestHistory.tsx",
"chars": 1134,
"preview": "import { HistoryEntry } from \"@cashu/coco-core\";\nimport { View } from \"react-native\";\nimport { memo } from \"react\";\nimpo"
},
{
"path": "src/screens/History/components/LatestHistoryMeltEntry.tsx",
"chars": 1508,
"preview": "import { ZapIcon, CheckmarkIcon } from \"@comps/Icons\";\nimport { LatestHistoryWrapper } from \"./LatestHistoryWrapper\";\nim"
},
{
"path": "src/screens/History/components/LatestHistoryMintEntry.tsx",
"chars": 1442,
"preview": "import { CheckmarkIcon, ClockIcon, EcashIcon } from \"@comps/Icons\";\nimport { LatestHistoryWrapper } from \"./LatestHistor"
},
{
"path": "src/screens/History/components/LatestHistoryReceiveEntry.tsx",
"chars": 1145,
"preview": "import { ReceiveIcon } from \"@comps/Icons\";\nimport { LatestHistoryWrapper } from \"./LatestHistoryWrapper\";\nimport { useT"
},
{
"path": "src/screens/History/components/LatestHistorySendEntry.tsx",
"chars": 1495,
"preview": "import { SendIcon, ClockIcon, CheckmarkIcon } from \"@comps/Icons\";\nimport { LatestHistoryWrapper } from \"./LatestHistory"
},
{
"path": "src/screens/History/components/LatestHistoryWrapper.tsx",
"chars": 3650,
"preview": "import Txt from \"@comps/Txt\";\nimport { HistoryEntry } from \"@cashu/coco-core\";\nimport { usePrivacyContext } from \"@src/c"
},
{
"path": "src/screens/History/components/MeltHistoryDetails.tsx",
"chars": 1953,
"preview": "import Separator from \"@comps/Separator\";\nimport { MeltHistoryEntry } from \"@cashu/coco-core\";\nimport { NS } from \"@src/"
},
{
"path": "src/screens/History/components/MintHistoryDetails.tsx",
"chars": 2020,
"preview": "import Separator from \"@comps/Separator\";\nimport { MintHistoryEntry } from \"@cashu/coco-core\";\nimport { NS } from \"@src/"
},
{
"path": "src/screens/History/components/ReceiveHistoryDetails.tsx",
"chars": 1316,
"preview": "import Separator from \"@comps/Separator\";\nimport { ReceiveHistoryEntry } from \"@cashu/coco-core\";\nimport { NS } from \"@s"
},
{
"path": "src/screens/History/components/SendHistoryDetails.tsx",
"chars": 3297,
"preview": "import Separator from \"@comps/Separator\";\nimport { SendHistoryEntry } from \"@cashu/coco-core\";\nimport { NS } from \"@src/"
},
{
"path": "src/screens/History/components/TokenSection.tsx",
"chars": 1621,
"preview": "import Copy from \"@comps/Copy\";\nimport Txt from \"@comps/Txt\";\nimport Separator from \"@comps/Separator\";\nimport { useThem"
},
{
"path": "src/screens/History/entryTime.tsx",
"chars": 1470,
"preview": "import { DayInMs, HourInMs, MinuteInMs } from \"@consts\";\nimport { NS } from \"@src/i18n\";\nimport { getShortDateStr } from"
},
{
"path": "src/screens/History/index.tsx",
"chars": 3384,
"preview": "import Empty from \"@comps/Empty\";\nimport { isIOS } from \"@consts\";\nimport type { THistoryPageProps } from \"@model/nav\";\n"
},
{
"path": "src/screens/Mints/AddMintScreen.tsx",
"chars": 7213,
"preview": "import Txt from \"@comps/Txt\";\nimport TxtInput from \"@comps/TxtInput\";\nimport { ChevronRightIcon, ZapIcon, PlusIcon } fro"
},
{
"path": "src/screens/Mints/MintHomeScreen.tsx",
"chars": 5394,
"preview": "import Button, { IconBtn, TxtButton } from \"@comps/Button\";\nimport Card from \"@comps/Card\";\nimport Empty from \"@comps/Em"
},
{
"path": "src/screens/Mints/MintSettingsScreen.tsx",
"chars": 8599,
"preview": "import Txt from \"@comps/Txt\";\nimport Screen from \"@comps/Screen\";\nimport { useTrustedMints } from \"@cashu/coco-react\";\n\n"
},
{
"path": "src/screens/Mints/components/MetadataItem.tsx",
"chars": 1009,
"preview": "import React from \"react\";\nimport { View } from \"react-native\";\nimport { vs, ScaledSheet } from \"react-native-size-matte"
},
{
"path": "src/screens/Mints/components/MintItem.tsx",
"chars": 2708,
"preview": "import { ChevronRightIcon, ZapIcon } from \"@comps/Icons\";\nimport Separator from \"@comps/Separator\";\nimport Txt from \"@co"
},
{
"path": "src/screens/Mints/index.ts",
"chars": 210,
"preview": "import AddMintScreen from \"./AddMintScreen\";\nimport MintHomeScreen from \"./MintHomeScreen\";\nimport MintSettingsScreen fr"
},
{
"path": "src/screens/Onboarding.tsx",
"chars": 3920,
"preview": "import Logo from \"@comps/Logo\";\nimport RadioBtn from \"@comps/RadioBtn\";\nimport Txt from \"@comps/Txt\";\nimport type { TOnb"
},
{
"path": "src/screens/Payment/MeltInput.tsx",
"chars": 21696,
"preview": "import Button from \"@comps/Button\";\nimport AmountInput, { useShakeAnimation } from \"@comps/AmountInput\";\nimport useLoadi"
},
{
"path": "src/screens/Payment/MintSelectAmount.tsx",
"chars": 6309,
"preview": "import AmountInput, { useShakeAnimation } from \"@comps/AmountInput\";\nimport Button from \"@comps/Button\";\nimport { Chevro"
},
{
"path": "src/screens/Payment/Processing.tsx",
"chars": 2736,
"preview": "import { getDecodedToken } from \"@cashu/cashu-ts\";\nimport Loading from \"@comps/Loading\";\nimport Txt from \"@comps/Txt\";\ni"
},
{
"path": "src/screens/Payment/ProcessingError.tsx",
"chars": 2973,
"preview": "import Button from \"@comps/Button\";\nimport { ExclamationIcon } from \"@comps/Icons\";\nimport Txt from \"@comps/Txt\";\nimport"
},
{
"path": "src/screens/Payment/Receive/Invoice.tsx",
"chars": 3275,
"preview": "import Button from \"@comps/Button\";\nimport { ShareIcon } from \"@comps/Icons\";\nimport Loading from \"@comps/Loading\";\nimpo"
},
{
"path": "src/screens/Payment/Send/CoinSelection.tsx",
"chars": 5864,
"preview": "import Separator from \"@comps/Separator\";\nimport SwipeButton from \"@comps/SwipeButton\";\nimport Txt from \"@comps/Txt\";\nim"
},
{
"path": "src/screens/Payment/Send/EncodedToken.tsx",
"chars": 6264,
"preview": "import { getEncodedToken } from \"@cashu/cashu-ts\";\nimport Button from \"@comps/Button\";\nimport useCopy from \"@comps/hooks"
},
{
"path": "src/screens/Payment/SendSelectAmount.tsx",
"chars": 10313,
"preview": "import AmountInput, { useShakeAnimation } from \"@comps/AmountInput\";\nimport Button from \"@comps/Button\";\nimport { Chevro"
},
{
"path": "src/screens/Payment/Success.tsx",
"chars": 5435,
"preview": "import Button from \"@comps/Button\";\nimport Logo from \"@comps/Logo\";\nimport Txt from \"@comps/Txt\";\nimport { isIOS } from "
},
{
"path": "src/screens/Payment/SuccessScreen.tsx",
"chars": 7536,
"preview": "import Button from \"@comps/Button\";\nimport Logo from \"@comps/Logo\";\nimport Txt from \"@comps/Txt\";\nimport Screen from \"@c"
},
{
"path": "src/screens/QRScan/QrScannerScreen.tsx",
"chars": 15266,
"preview": "import Screen from \"@comps/Screen\";\nimport { NfcIcon } from \"@comps/Icons\";\nimport Loading from \"@comps/Loading\";\nimport"
},
{
"path": "src/screens/QRScan/components/CameraPermission.tsx",
"chars": 4184,
"preview": "import Button from \"@comps/Button\";\nimport Txt from \"@comps/Txt\";\nimport { useThemeContext } from \"@src/context/Theme\";\n"
},
{
"path": "src/screens/QRScan/hooks/useScanResult.ts",
"chars": 1862,
"preview": "import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useUrDecoder } from \"@comps/hooks/us"
},
{
"path": "src/screens/Restore/Recover.tsx",
"chars": 3560,
"preview": "import Button, { TxtButton } from \"@comps/Button\";\nimport useLoading from \"@comps/hooks/Loading\";\nimport Loading from \"@"
},
{
"path": "src/screens/Restore/Recovering.tsx",
"chars": 5219,
"preview": "import Button from \"@comps/Button\";\nimport Loading from \"@comps/Loading\";\nimport Logo from \"@comps/Logo\";\nimport Progres"
},
{
"path": "src/screens/Restore/SelectRecoveryMint.tsx",
"chars": 3707,
"preview": "import Button from \"@comps/Button\";\nimport { highlight as hi } from \"@styles\";\nimport { CheckmarkIcon } from \"@comps/Ico"
},
{
"path": "src/screens/Settings/Currency.tsx",
"chars": 8501,
"preview": "import Button from \"@comps/Button\";\nimport RadioBtn from \"@comps/RadioBtn\";\nimport Screen from \"@comps/Screen\";\nimport S"
},
{
"path": "src/screens/Settings/Display.tsx",
"chars": 2951,
"preview": "import RadioBtn from \"@comps/RadioBtn\";\nimport Screen from \"@comps/Screen\";\nimport Separator from \"@comps/Separator\";\nim"
},
{
"path": "src/screens/Settings/Language.tsx",
"chars": 2784,
"preview": "import RadioBtn from \"@comps/RadioBtn\";\nimport Screen from \"@comps/Screen\";\nimport Separator from \"@comps/Separator\";\nim"
},
{
"path": "src/screens/Settings/MenuItem.tsx",
"chars": 1614,
"preview": "import Separator from \"@comps/Separator\";\nimport Txt from \"@comps/Txt\";\nimport { useThemeContext } from \"@src/context/Th"
},
{
"path": "src/screens/Settings/NfcSettings.tsx",
"chars": 6250,
"preview": "import RadioBtn from \"@comps/RadioBtn\";\nimport Screen from \"@comps/Screen\";\nimport Separator from \"@comps/Separator\";\nim"
},
{
"path": "src/screens/Settings/NpcSettings.tsx",
"chars": 25573,
"preview": "import Button from \"@comps/Button\";\nimport Loading from \"@comps/Loading\";\nimport Screen from \"@comps/Screen\";\nimport Txt"
},
{
"path": "src/screens/Settings/ViewMnemonic.tsx",
"chars": 3576,
"preview": "import Screen from \"@comps/Screen\";\nimport Txt from \"@comps/Txt\";\nimport Loading from \"@comps/Loading\";\nimport Button fr"
},
{
"path": "src/screens/Settings/index.tsx",
"chars": 5709,
"preview": "import {\n GithubIcon,\n HistoryIcon,\n LanguageIcon,\n KeyIcon,\n LinkIcon,\n LockIcon,\n MintBoardIcon,\n NfcIcon,\n P"
},
{
"path": "src/services/ExchangeRateService.ts",
"chars": 2123,
"preview": "import { appLogger } from \"@src/logger\";\nimport type { IExchangeRates } from \"@model\";\n\nconst BLOCKCHAIN_INFO_API = \"htt"
},
{
"path": "src/services/NFCService.ts",
"chars": 19801,
"preview": "// NfcCashuPayment.ts\nimport NfcManager, { NfcTech } from \"react-native-nfc-manager\";\nimport { Buffer } from \"buffer/\";\n"
},
{
"path": "src/services/NpcService.ts",
"chars": 9076,
"preview": "import type { Manager, Plugin, ResolvedPaymentRequest } from \"@cashu/coco-core\";\nimport { getEncodedToken } from \"@cashu"
},
{
"path": "src/services/SeedService.ts",
"chars": 2084,
"preview": "import * as bip39 from \"@scure/bip39\";\nimport * as Crypto from \"expo-crypto\";\nimport { wordlist } from \"@scure/bip39/wor"
},
{
"path": "src/shim.ts",
"chars": 4330,
"preview": "import * as c from \"expo-crypto\";\n\nconsole.log(\"shim.ts - starting crypto polyfill\");\n\n// Create a comprehensive crypto "
},
{
"path": "src/storage/DbProvider.ts",
"chars": 1853,
"preview": "import * as SQLite from \"expo-sqlite\";\nimport Storage from \"expo-sqlite/kv-store\";\n\n/**\n * Provider for an Expo SQLite d"
},
{
"path": "src/storage/dev.ts",
"chars": 770,
"preview": "import * as FileSystem from \"expo-file-system\";\nimport Storage from \"expo-sqlite/kv-store\";\n\nimport { secureStore, store"
},
{
"path": "src/storage/store/SecureStore.ts",
"chars": 1817,
"preview": "import type { SecureStoreOptions } from \"expo-secure-store\";\nimport * as _SecureStore from \"expo-secure-store\";\n\n/**\n * "
},
{
"path": "src/storage/store/consts.ts",
"chars": 915,
"preview": "export const STORE_KEYS = {\n explainer: \"init_skipped\",\n theme: \"theme\",\n // auth\n pinSkipped: \"auth_skipped\",\n loc"
},
{
"path": "src/storage/store/index.ts",
"chars": 499,
"preview": "import { SecureStore } from \"./SecureStore\";\nimport Storage from \"expo-sqlite/kv-store\";\n\nclass Store {\n async set(key:"
},
{
"path": "src/storage/store/theme.ts",
"chars": 588,
"preview": "import type { IPreferences, IPreferencesResp } from \"@model\";\nimport Storage from \"expo-sqlite/kv-store\";\n\nimport { STOR"
},
{
"path": "src/styles/colors.ts",
"chars": 3590,
"preview": "import { DefaultTheme } from \"@react-navigation/native\";\n\n// Define ExtendedTheme type\ntype ExtendedTheme = typeof Defau"
},
{
"path": "src/styles/globals.ts",
"chars": 2436,
"preview": "import { ScaledSheet } from \"react-native-size-matters\";\n\nimport { highlight, type HighlightKey, mainColors, type Theme "
},
{
"path": "src/styles/index.ts",
"chars": 207,
"preview": "export type { HighlightKey, Theme } from \"./colors\";\nexport { dark, getPinpadBg, highlight, light, lightTheme, mainColor"
},
{
"path": "src/util/index.ts",
"chars": 8723,
"preview": "import { l } from \"@log\";\nimport type { IMintBalWithName, IProofSelection } from \"@model\";\nimport * as Clipboard from \"e"
},
{
"path": "src/util/lnurl.ts",
"chars": 3847,
"preview": "import type { ILnUrlPayRequest } from \"@model\";\nimport { bech32 } from \"bech32\";\nimport { Buffer } from \"buffer/\";\n\ncons"
},
{
"path": "src/util/localization.ts",
"chars": 673,
"preview": "import { type TranslationLangCodes, translationLangCodes } from \"@model/i18n\";\nimport { getLocales } from \"expo-localiza"
},
{
"path": "src/util/lud16.ts",
"chars": 1482,
"preview": "import { decodeUrlOrAddress } from \"@util/lnurl\";\n\nexport type LnAddressMetadata = {\n tag: \"payRequest\";\n callback: st"
},
{
"path": "src/util/paymentStringParser.ts",
"chars": 8295,
"preview": "import { decodePaymentRequest, getDecodedToken } from \"@cashu/cashu-ts\";\n\nimport { isLightningAddress, isLnurl } from \"."
},
{
"path": "src/util/typeguards.ts",
"chars": 1404,
"preview": "import { Buffer } from \"buffer/\";\n\nexport function isStr(v: unknown): v is string {\n return typeof v === \"string\";\n}\nex"
},
{
"path": "tsconfig.json",
"chars": 1081,
"preview": "{\n \"extends\": \"expo/tsconfig.base\",\n \"compilerOptions\": {\n \"strict\": true,\n \"baseUrl\": \".\",\n \"paths\": {\n "
},
{
"path": "zapstore.yaml",
"chars": 650,
"preview": "repository: https://github.com/cashubtc/eNuts\nrelease_source: https://github.com/cashubtc/eNuts\ndescription: >-\n Warnin"
}
]
About this extraction
This page contains the full source code of the cashubtc/eNuts GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 176 files (1.1 MB), approximately 335.2k tokens, and a symbol index with 693 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.