agentlili 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,946 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/lib/wallet-manager.ts
4
+ import { Keypair, Connection, LAMPORTS_PER_SOL, PublicKey as PublicKey2 } from "@solana/web3.js";
5
+ import { TOKEN_PROGRAM_ID } from "@solana/spl-token";
6
+ import { KeypairWallet } from "solana-agent-kit";
7
+ import bs582 from "bs58";
8
+ import crypto3 from "crypto";
9
+
10
+ // src/lib/wallet-store.ts
11
+ import crypto from "crypto";
12
+
13
+ // src/generated/prisma/client.ts
14
+ import * as path from "path";
15
+ import { fileURLToPath } from "url";
16
+
17
+ // src/generated/prisma/internal/class.ts
18
+ import * as runtime from "@prisma/client/runtime/client";
19
+ var config = {
20
+ "previewFeatures": [],
21
+ "clientVersion": "7.4.2",
22
+ "engineVersion": "94a226be1cf2967af2541cca5529f0f7ba866919",
23
+ "activeProvider": "postgresql",
24
+ "inlineSchema": 'generator client {\n provider = "prisma-client"\n output = "../src/generated/prisma"\n}\n\ndatasource db {\n provider = "postgresql"\n}\n\n// \u2500\u2500\u2500 User-Wallet Mapping (replaces .wallets/users.json) \u2500\u2500\u2500\n\nmodel UserWallet {\n googleSub String @id\n walletId String @unique\n frostPublicKey String\n createdAt DateTime @default(now())\n\n wallet Wallet? @relation(fields: [walletId], references: [id], onDelete: Cascade)\n\n @@index([walletId])\n}\n\n// \u2500\u2500\u2500 Wallet (replaces .wallets/{id}.json) \u2500\u2500\u2500\n\nmodel Wallet {\n id String @id @db.VarChar(8)\n publicKey String\n label String?\n isAgent Boolean @default(false)\n createdAt DateTime @default(now())\n rekeyedAt DateTime?\n\n // Encrypted secret key payload (AES-256-GCM)\n encIv String // hex\n encSalt String // hex\n encTag String // hex\n encData String // hex\n\n // Relations\n userWallet UserWallet?\n frostMeta FrostMeta?\n lifecycle AgentLifecycle?\n strategyConfig AgentStrategyConfig?\n spendingLimits SpendingLimits?\n persona WalletPersona?\n\n frostShares FrostShare[]\n txLogs TxLog[]\n spendingRecords SpendingRecord[]\n fraudAlerts FraudAlert[]\n scheduledPmts ScheduledPayment[]\n subscriptions Subscription[]\n notifications Notification[]\n strategies Strategy[]\n auditLogs AuditLog[] @relation("WalletAudits")\n\n @@index([publicKey])\n}\n\n// \u2500\u2500\u2500 FROST Metadata (replaces .wallets/frost/{id}.meta.json) \u2500\u2500\u2500\n\nmodel FrostMeta {\n walletId String @id @db.VarChar(8)\n groupPublicKey String\n threshold Int\n totalShares Int\n shareLabels String[] // e.g. ["user","agent","policy"]\n label String?\n createdAt DateTime @default(now())\n lastRefreshAt DateTime?\n\n wallet Wallet @relation(fields: [walletId], references: [id], onDelete: Cascade)\n}\n\n// \u2500\u2500\u2500 FROST Shares (replaces .wallets/frost/{id}.share.N.json) \u2500\u2500\u2500\n\nmodel FrostShare {\n id String @id @default(cuid())\n walletId String @db.VarChar(8)\n participantId Int\n label String\n\n // Encrypted key package (AES-256-GCM)\n encIv String\n encSalt String\n encTag String\n encData String\n\n wallet Wallet @relation(fields: [walletId], references: [id], onDelete: Cascade)\n\n @@unique([walletId, participantId])\n @@index([walletId])\n}\n\n// \u2500\u2500\u2500 Audit Log (replaces .wallets/audit.jsonl) \u2500\u2500\u2500\n\nmodel AuditLog {\n id String @id @default(cuid())\n seq Int @unique @default(autoincrement())\n timestamp DateTime @default(now())\n action String\n walletId String? @db.VarChar(8)\n agentId String?\n ip String?\n outcome String // "success" | "failure" | "error"\n details Json?\n integrity String // HMAC-SHA256 chain\n\n wallet Wallet? @relation("WalletAudits", fields: [walletId], references: [id], onDelete: SetNull)\n\n @@index([walletId])\n @@index([action])\n @@index([timestamp])\n}\n\n// \u2500\u2500\u2500 Transaction Log (replaces .wallets/logs/{id}.jsonl) \u2500\u2500\u2500\n\nmodel TxLog {\n id String @id @default(cuid())\n walletId String @db.VarChar(8)\n timestamp DateTime @default(now())\n toolName String\n args Json\n result String\n success Boolean\n\n wallet Wallet @relation(fields: [walletId], references: [id], onDelete: Cascade)\n\n @@index([walletId, timestamp])\n}\n\n// \u2500\u2500\u2500 Spending Limits (replaces .wallets/limits/{id}.json) \u2500\u2500\u2500\n\nmodel SpendingLimits {\n walletId String @id @db.VarChar(8)\n maxPerTx Float\n maxPerDay Float\n enabled Boolean @default(true)\n\n wallet Wallet @relation(fields: [walletId], references: [id], onDelete: Cascade)\n}\n\n// \u2500\u2500\u2500 Spending Records (replaces .wallets/spending/{id}.jsonl) \u2500\u2500\u2500\n\nmodel SpendingRecord {\n id String @id @default(cuid())\n walletId String @db.VarChar(8)\n timestamp DateTime @default(now())\n amount Float // SOL\n toolName String\n\n wallet Wallet @relation(fields: [walletId], references: [id], onDelete: Cascade)\n\n @@index([walletId, timestamp])\n}\n\n// \u2500\u2500\u2500 Agent Lifecycle (replaces .wallets/lifecycle/{id}.json) \u2500\u2500\u2500\n\nmodel AgentLifecycle {\n walletId String @id @db.VarChar(8)\n state String @default("active") // "active" | "paused" | "terminated"\n updatedAt DateTime @updatedAt\n reason String?\n transitions Json @default("[]") // LifecycleTransition[]\n\n wallet Wallet @relation(fields: [walletId], references: [id], onDelete: Cascade)\n}\n\n// \u2500\u2500\u2500 Agent Strategy Config (replaces .wallets/strategy/{id}.json) \u2500\u2500\u2500\n\nmodel AgentStrategyConfig {\n walletId String @id @db.VarChar(8)\n strategyId String @default("balanced") // "conservative" | "balanced" | "aggressive"\n updatedAt DateTime @updatedAt\n\n wallet Wallet @relation(fields: [walletId], references: [id], onDelete: Cascade)\n}\n\n// \u2500\u2500\u2500 Fraud Alerts (replaces .wallets/fraud/{id}.jsonl) \u2500\u2500\u2500\n\nmodel FraudAlert {\n id String @id @db.VarChar(8)\n walletId String @db.VarChar(8)\n rule String // "rapid_drain" | "velocity_spike" | etc.\n severity String // "low" | "medium" | "high" | "critical"\n timestamp DateTime @default(now())\n details Json\n acknowledged Boolean @default(false)\n\n wallet Wallet @relation(fields: [walletId], references: [id], onDelete: Cascade)\n\n @@index([walletId, timestamp])\n}\n\n// \u2500\u2500\u2500 Scheduled Payments (replaces .wallets/scheduled/{id}.jsonl) \u2500\u2500\u2500\n\nmodel ScheduledPayment {\n id String @id\n walletId String @db.VarChar(8)\n recipient String\n amount Float // SOL\n executeAfter DateTime\n status String @default("pending") // "pending" | "executed" | "failed" | "cancelled"\n createdAt DateTime @default(now())\n executedAt DateTime?\n txSignature String?\n failureReason String?\n\n wallet Wallet @relation(fields: [walletId], references: [id], onDelete: Cascade)\n\n @@index([walletId, status])\n @@index([executeAfter])\n}\n\n// \u2500\u2500\u2500 Subscriptions (replaces .wallets/subscriptions/{id}.jsonl) \u2500\u2500\u2500\n\nmodel Subscription {\n id String @id\n walletId String @db.VarChar(8)\n recipient String\n amount Float // SOL\n interval String // "daily" | "weekly" | "monthly"\n startDate DateTime\n nextDue DateTime\n status String @default("active") // "active" | "paused" | "cancelled"\n maxPayments Int?\n paymentsMade Int @default(0)\n createdAt DateTime @default(now())\n lastPaymentId String?\n\n wallet Wallet @relation(fields: [walletId], references: [id], onDelete: Cascade)\n\n @@index([walletId, status])\n @@index([nextDue])\n}\n\n// \u2500\u2500\u2500 Notifications (replaces .wallets/notifications/{id}.jsonl) \u2500\u2500\u2500\n\nmodel Notification {\n id String @id @db.VarChar(8)\n walletId String @db.VarChar(8)\n type String\n priority String // "low" | "medium" | "high" | "critical"\n title String\n message String\n timestamp DateTime @default(now())\n read Boolean @default(false)\n metadata Json?\n\n wallet Wallet @relation(fields: [walletId], references: [id], onDelete: Cascade)\n\n @@index([walletId, read])\n @@index([walletId, timestamp])\n}\n\n// \u2500\u2500\u2500 Chat Bindings (replaces .wallets/messaging/bindings.jsonl) \u2500\u2500\u2500\n\nmodel ChatBinding {\n platform String\n chatId String\n walletId String\n muted Boolean @default(false)\n createdAt DateTime @default(now())\n\n @@id([platform, chatId])\n @@index([walletId])\n}\n\n// \u2500\u2500\u2500 Wallet Persona (replaces .wallets/personas/{id}.json) \u2500\u2500\u2500\n\nmodel WalletPersona {\n walletId String @id @db.VarChar(8)\n personaId String @default("aria") // "aria" | "bolt" | "sage" | "blaze" | "hex" | "nova"\n updatedAt DateTime @updatedAt\n\n wallet Wallet @relation(fields: [walletId], references: [id], onDelete: Cascade)\n}\n\n// \u2500\u2500\u2500 Battle Arena (replaces .wallets/battles/{id}.json) \u2500\u2500\u2500\n\nmodel Battle {\n id String @id\n agents Json // BattleAgent[]\n roundDuration Int\n totalRounds Int\n currentRound Int @default(0)\n status String @default("running") // "running" | "completed" | "cancelled"\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n completedAt DateTime?\n winnerId String?\n}\n\n// \u2500\u2500\u2500 Trading Strategies (replaces .wallets/strategies/{id}.jsonl) \u2500\u2500\u2500\n\nmodel Strategy {\n id String @id\n walletId String @db.VarChar(8)\n type String // "dca" | "limit_sweep" | "rebalance" | "lp_provision" | "custom_prompt"\n status String @default("active")\n name String\n interval String // "hourly" | "every4h" | etc.\n nextRun DateTime\n params Json\n maxExecutions Int?\n executionCount Int @default(0)\n consecutiveFailures Int @default(0)\n maxConsecutiveFailures Int @default(3)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n wallet Wallet @relation(fields: [walletId], references: [id], onDelete: Cascade)\n\n @@index([walletId, status])\n @@index([nextRun])\n}\n',
25
+ "runtimeDataModel": {
26
+ "models": {},
27
+ "enums": {},
28
+ "types": {}
29
+ },
30
+ "parameterizationSchema": {
31
+ "strings": [],
32
+ "graph": ""
33
+ }
34
+ };
35
+ config.runtimeDataModel = JSON.parse('{"models":{"UserWallet":{"fields":[{"name":"googleSub","kind":"scalar","type":"String"},{"name":"walletId","kind":"scalar","type":"String"},{"name":"frostPublicKey","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"wallet","kind":"object","type":"Wallet","relationName":"UserWalletToWallet"}],"dbName":null},"Wallet":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"publicKey","kind":"scalar","type":"String"},{"name":"label","kind":"scalar","type":"String"},{"name":"isAgent","kind":"scalar","type":"Boolean"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"rekeyedAt","kind":"scalar","type":"DateTime"},{"name":"encIv","kind":"scalar","type":"String"},{"name":"encSalt","kind":"scalar","type":"String"},{"name":"encTag","kind":"scalar","type":"String"},{"name":"encData","kind":"scalar","type":"String"},{"name":"userWallet","kind":"object","type":"UserWallet","relationName":"UserWalletToWallet"},{"name":"frostMeta","kind":"object","type":"FrostMeta","relationName":"FrostMetaToWallet"},{"name":"lifecycle","kind":"object","type":"AgentLifecycle","relationName":"AgentLifecycleToWallet"},{"name":"strategyConfig","kind":"object","type":"AgentStrategyConfig","relationName":"AgentStrategyConfigToWallet"},{"name":"spendingLimits","kind":"object","type":"SpendingLimits","relationName":"SpendingLimitsToWallet"},{"name":"persona","kind":"object","type":"WalletPersona","relationName":"WalletToWalletPersona"},{"name":"frostShares","kind":"object","type":"FrostShare","relationName":"FrostShareToWallet"},{"name":"txLogs","kind":"object","type":"TxLog","relationName":"TxLogToWallet"},{"name":"spendingRecords","kind":"object","type":"SpendingRecord","relationName":"SpendingRecordToWallet"},{"name":"fraudAlerts","kind":"object","type":"FraudAlert","relationName":"FraudAlertToWallet"},{"name":"scheduledPmts","kind":"object","type":"ScheduledPayment","relationName":"ScheduledPaymentToWallet"},{"name":"subscriptions","kind":"object","type":"Subscription","relationName":"SubscriptionToWallet"},{"name":"notifications","kind":"object","type":"Notification","relationName":"NotificationToWallet"},{"name":"strategies","kind":"object","type":"Strategy","relationName":"StrategyToWallet"},{"name":"auditLogs","kind":"object","type":"AuditLog","relationName":"WalletAudits"}],"dbName":null},"FrostMeta":{"fields":[{"name":"walletId","kind":"scalar","type":"String"},{"name":"groupPublicKey","kind":"scalar","type":"String"},{"name":"threshold","kind":"scalar","type":"Int"},{"name":"totalShares","kind":"scalar","type":"Int"},{"name":"shareLabels","kind":"scalar","type":"String"},{"name":"label","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"lastRefreshAt","kind":"scalar","type":"DateTime"},{"name":"wallet","kind":"object","type":"Wallet","relationName":"FrostMetaToWallet"}],"dbName":null},"FrostShare":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"walletId","kind":"scalar","type":"String"},{"name":"participantId","kind":"scalar","type":"Int"},{"name":"label","kind":"scalar","type":"String"},{"name":"encIv","kind":"scalar","type":"String"},{"name":"encSalt","kind":"scalar","type":"String"},{"name":"encTag","kind":"scalar","type":"String"},{"name":"encData","kind":"scalar","type":"String"},{"name":"wallet","kind":"object","type":"Wallet","relationName":"FrostShareToWallet"}],"dbName":null},"AuditLog":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"seq","kind":"scalar","type":"Int"},{"name":"timestamp","kind":"scalar","type":"DateTime"},{"name":"action","kind":"scalar","type":"String"},{"name":"walletId","kind":"scalar","type":"String"},{"name":"agentId","kind":"scalar","type":"String"},{"name":"ip","kind":"scalar","type":"String"},{"name":"outcome","kind":"scalar","type":"String"},{"name":"details","kind":"scalar","type":"Json"},{"name":"integrity","kind":"scalar","type":"String"},{"name":"wallet","kind":"object","type":"Wallet","relationName":"WalletAudits"}],"dbName":null},"TxLog":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"walletId","kind":"scalar","type":"String"},{"name":"timestamp","kind":"scalar","type":"DateTime"},{"name":"toolName","kind":"scalar","type":"String"},{"name":"args","kind":"scalar","type":"Json"},{"name":"result","kind":"scalar","type":"String"},{"name":"success","kind":"scalar","type":"Boolean"},{"name":"wallet","kind":"object","type":"Wallet","relationName":"TxLogToWallet"}],"dbName":null},"SpendingLimits":{"fields":[{"name":"walletId","kind":"scalar","type":"String"},{"name":"maxPerTx","kind":"scalar","type":"Float"},{"name":"maxPerDay","kind":"scalar","type":"Float"},{"name":"enabled","kind":"scalar","type":"Boolean"},{"name":"wallet","kind":"object","type":"Wallet","relationName":"SpendingLimitsToWallet"}],"dbName":null},"SpendingRecord":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"walletId","kind":"scalar","type":"String"},{"name":"timestamp","kind":"scalar","type":"DateTime"},{"name":"amount","kind":"scalar","type":"Float"},{"name":"toolName","kind":"scalar","type":"String"},{"name":"wallet","kind":"object","type":"Wallet","relationName":"SpendingRecordToWallet"}],"dbName":null},"AgentLifecycle":{"fields":[{"name":"walletId","kind":"scalar","type":"String"},{"name":"state","kind":"scalar","type":"String"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"reason","kind":"scalar","type":"String"},{"name":"transitions","kind":"scalar","type":"Json"},{"name":"wallet","kind":"object","type":"Wallet","relationName":"AgentLifecycleToWallet"}],"dbName":null},"AgentStrategyConfig":{"fields":[{"name":"walletId","kind":"scalar","type":"String"},{"name":"strategyId","kind":"scalar","type":"String"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"wallet","kind":"object","type":"Wallet","relationName":"AgentStrategyConfigToWallet"}],"dbName":null},"FraudAlert":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"walletId","kind":"scalar","type":"String"},{"name":"rule","kind":"scalar","type":"String"},{"name":"severity","kind":"scalar","type":"String"},{"name":"timestamp","kind":"scalar","type":"DateTime"},{"name":"details","kind":"scalar","type":"Json"},{"name":"acknowledged","kind":"scalar","type":"Boolean"},{"name":"wallet","kind":"object","type":"Wallet","relationName":"FraudAlertToWallet"}],"dbName":null},"ScheduledPayment":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"walletId","kind":"scalar","type":"String"},{"name":"recipient","kind":"scalar","type":"String"},{"name":"amount","kind":"scalar","type":"Float"},{"name":"executeAfter","kind":"scalar","type":"DateTime"},{"name":"status","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"executedAt","kind":"scalar","type":"DateTime"},{"name":"txSignature","kind":"scalar","type":"String"},{"name":"failureReason","kind":"scalar","type":"String"},{"name":"wallet","kind":"object","type":"Wallet","relationName":"ScheduledPaymentToWallet"}],"dbName":null},"Subscription":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"walletId","kind":"scalar","type":"String"},{"name":"recipient","kind":"scalar","type":"String"},{"name":"amount","kind":"scalar","type":"Float"},{"name":"interval","kind":"scalar","type":"String"},{"name":"startDate","kind":"scalar","type":"DateTime"},{"name":"nextDue","kind":"scalar","type":"DateTime"},{"name":"status","kind":"scalar","type":"String"},{"name":"maxPayments","kind":"scalar","type":"Int"},{"name":"paymentsMade","kind":"scalar","type":"Int"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"lastPaymentId","kind":"scalar","type":"String"},{"name":"wallet","kind":"object","type":"Wallet","relationName":"SubscriptionToWallet"}],"dbName":null},"Notification":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"walletId","kind":"scalar","type":"String"},{"name":"type","kind":"scalar","type":"String"},{"name":"priority","kind":"scalar","type":"String"},{"name":"title","kind":"scalar","type":"String"},{"name":"message","kind":"scalar","type":"String"},{"name":"timestamp","kind":"scalar","type":"DateTime"},{"name":"read","kind":"scalar","type":"Boolean"},{"name":"metadata","kind":"scalar","type":"Json"},{"name":"wallet","kind":"object","type":"Wallet","relationName":"NotificationToWallet"}],"dbName":null},"ChatBinding":{"fields":[{"name":"platform","kind":"scalar","type":"String"},{"name":"chatId","kind":"scalar","type":"String"},{"name":"walletId","kind":"scalar","type":"String"},{"name":"muted","kind":"scalar","type":"Boolean"},{"name":"createdAt","kind":"scalar","type":"DateTime"}],"dbName":null},"WalletPersona":{"fields":[{"name":"walletId","kind":"scalar","type":"String"},{"name":"personaId","kind":"scalar","type":"String"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"wallet","kind":"object","type":"Wallet","relationName":"WalletToWalletPersona"}],"dbName":null},"Battle":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"agents","kind":"scalar","type":"Json"},{"name":"roundDuration","kind":"scalar","type":"Int"},{"name":"totalRounds","kind":"scalar","type":"Int"},{"name":"currentRound","kind":"scalar","type":"Int"},{"name":"status","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"completedAt","kind":"scalar","type":"DateTime"},{"name":"winnerId","kind":"scalar","type":"String"}],"dbName":null},"Strategy":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"walletId","kind":"scalar","type":"String"},{"name":"type","kind":"scalar","type":"String"},{"name":"status","kind":"scalar","type":"String"},{"name":"name","kind":"scalar","type":"String"},{"name":"interval","kind":"scalar","type":"String"},{"name":"nextRun","kind":"scalar","type":"DateTime"},{"name":"params","kind":"scalar","type":"Json"},{"name":"maxExecutions","kind":"scalar","type":"Int"},{"name":"executionCount","kind":"scalar","type":"Int"},{"name":"consecutiveFailures","kind":"scalar","type":"Int"},{"name":"maxConsecutiveFailures","kind":"scalar","type":"Int"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"wallet","kind":"object","type":"Wallet","relationName":"StrategyToWallet"}],"dbName":null}},"enums":{},"types":{}}');
36
+ config.parameterizationSchema = {
37
+ strings: JSON.parse('["where","userWallet","wallet","frostMeta","lifecycle","strategyConfig","spendingLimits","persona","orderBy","cursor","frostShares","txLogs","spendingRecords","fraudAlerts","scheduledPmts","subscriptions","notifications","strategies","auditLogs","_count","UserWallet.findUnique","UserWallet.findUniqueOrThrow","UserWallet.findFirst","UserWallet.findFirstOrThrow","UserWallet.findMany","data","UserWallet.createOne","UserWallet.createMany","UserWallet.createManyAndReturn","UserWallet.updateOne","UserWallet.updateMany","UserWallet.updateManyAndReturn","create","update","UserWallet.upsertOne","UserWallet.deleteOne","UserWallet.deleteMany","having","_min","_max","UserWallet.groupBy","UserWallet.aggregate","Wallet.findUnique","Wallet.findUniqueOrThrow","Wallet.findFirst","Wallet.findFirstOrThrow","Wallet.findMany","Wallet.createOne","Wallet.createMany","Wallet.createManyAndReturn","Wallet.updateOne","Wallet.updateMany","Wallet.updateManyAndReturn","Wallet.upsertOne","Wallet.deleteOne","Wallet.deleteMany","Wallet.groupBy","Wallet.aggregate","FrostMeta.findUnique","FrostMeta.findUniqueOrThrow","FrostMeta.findFirst","FrostMeta.findFirstOrThrow","FrostMeta.findMany","FrostMeta.createOne","FrostMeta.createMany","FrostMeta.createManyAndReturn","FrostMeta.updateOne","FrostMeta.updateMany","FrostMeta.updateManyAndReturn","FrostMeta.upsertOne","FrostMeta.deleteOne","FrostMeta.deleteMany","_avg","_sum","FrostMeta.groupBy","FrostMeta.aggregate","FrostShare.findUnique","FrostShare.findUniqueOrThrow","FrostShare.findFirst","FrostShare.findFirstOrThrow","FrostShare.findMany","FrostShare.createOne","FrostShare.createMany","FrostShare.createManyAndReturn","FrostShare.updateOne","FrostShare.updateMany","FrostShare.updateManyAndReturn","FrostShare.upsertOne","FrostShare.deleteOne","FrostShare.deleteMany","FrostShare.groupBy","FrostShare.aggregate","AuditLog.findUnique","AuditLog.findUniqueOrThrow","AuditLog.findFirst","AuditLog.findFirstOrThrow","AuditLog.findMany","AuditLog.createOne","AuditLog.createMany","AuditLog.createManyAndReturn","AuditLog.updateOne","AuditLog.updateMany","AuditLog.updateManyAndReturn","AuditLog.upsertOne","AuditLog.deleteOne","AuditLog.deleteMany","AuditLog.groupBy","AuditLog.aggregate","TxLog.findUnique","TxLog.findUniqueOrThrow","TxLog.findFirst","TxLog.findFirstOrThrow","TxLog.findMany","TxLog.createOne","TxLog.createMany","TxLog.createManyAndReturn","TxLog.updateOne","TxLog.updateMany","TxLog.updateManyAndReturn","TxLog.upsertOne","TxLog.deleteOne","TxLog.deleteMany","TxLog.groupBy","TxLog.aggregate","SpendingLimits.findUnique","SpendingLimits.findUniqueOrThrow","SpendingLimits.findFirst","SpendingLimits.findFirstOrThrow","SpendingLimits.findMany","SpendingLimits.createOne","SpendingLimits.createMany","SpendingLimits.createManyAndReturn","SpendingLimits.updateOne","SpendingLimits.updateMany","SpendingLimits.updateManyAndReturn","SpendingLimits.upsertOne","SpendingLimits.deleteOne","SpendingLimits.deleteMany","SpendingLimits.groupBy","SpendingLimits.aggregate","SpendingRecord.findUnique","SpendingRecord.findUniqueOrThrow","SpendingRecord.findFirst","SpendingRecord.findFirstOrThrow","SpendingRecord.findMany","SpendingRecord.createOne","SpendingRecord.createMany","SpendingRecord.createManyAndReturn","SpendingRecord.updateOne","SpendingRecord.updateMany","SpendingRecord.updateManyAndReturn","SpendingRecord.upsertOne","SpendingRecord.deleteOne","SpendingRecord.deleteMany","SpendingRecord.groupBy","SpendingRecord.aggregate","AgentLifecycle.findUnique","AgentLifecycle.findUniqueOrThrow","AgentLifecycle.findFirst","AgentLifecycle.findFirstOrThrow","AgentLifecycle.findMany","AgentLifecycle.createOne","AgentLifecycle.createMany","AgentLifecycle.createManyAndReturn","AgentLifecycle.updateOne","AgentLifecycle.updateMany","AgentLifecycle.updateManyAndReturn","AgentLifecycle.upsertOne","AgentLifecycle.deleteOne","AgentLifecycle.deleteMany","AgentLifecycle.groupBy","AgentLifecycle.aggregate","AgentStrategyConfig.findUnique","AgentStrategyConfig.findUniqueOrThrow","AgentStrategyConfig.findFirst","AgentStrategyConfig.findFirstOrThrow","AgentStrategyConfig.findMany","AgentStrategyConfig.createOne","AgentStrategyConfig.createMany","AgentStrategyConfig.createManyAndReturn","AgentStrategyConfig.updateOne","AgentStrategyConfig.updateMany","AgentStrategyConfig.updateManyAndReturn","AgentStrategyConfig.upsertOne","AgentStrategyConfig.deleteOne","AgentStrategyConfig.deleteMany","AgentStrategyConfig.groupBy","AgentStrategyConfig.aggregate","FraudAlert.findUnique","FraudAlert.findUniqueOrThrow","FraudAlert.findFirst","FraudAlert.findFirstOrThrow","FraudAlert.findMany","FraudAlert.createOne","FraudAlert.createMany","FraudAlert.createManyAndReturn","FraudAlert.updateOne","FraudAlert.updateMany","FraudAlert.updateManyAndReturn","FraudAlert.upsertOne","FraudAlert.deleteOne","FraudAlert.deleteMany","FraudAlert.groupBy","FraudAlert.aggregate","ScheduledPayment.findUnique","ScheduledPayment.findUniqueOrThrow","ScheduledPayment.findFirst","ScheduledPayment.findFirstOrThrow","ScheduledPayment.findMany","ScheduledPayment.createOne","ScheduledPayment.createMany","ScheduledPayment.createManyAndReturn","ScheduledPayment.updateOne","ScheduledPayment.updateMany","ScheduledPayment.updateManyAndReturn","ScheduledPayment.upsertOne","ScheduledPayment.deleteOne","ScheduledPayment.deleteMany","ScheduledPayment.groupBy","ScheduledPayment.aggregate","Subscription.findUnique","Subscription.findUniqueOrThrow","Subscription.findFirst","Subscription.findFirstOrThrow","Subscription.findMany","Subscription.createOne","Subscription.createMany","Subscription.createManyAndReturn","Subscription.updateOne","Subscription.updateMany","Subscription.updateManyAndReturn","Subscription.upsertOne","Subscription.deleteOne","Subscription.deleteMany","Subscription.groupBy","Subscription.aggregate","Notification.findUnique","Notification.findUniqueOrThrow","Notification.findFirst","Notification.findFirstOrThrow","Notification.findMany","Notification.createOne","Notification.createMany","Notification.createManyAndReturn","Notification.updateOne","Notification.updateMany","Notification.updateManyAndReturn","Notification.upsertOne","Notification.deleteOne","Notification.deleteMany","Notification.groupBy","Notification.aggregate","ChatBinding.findUnique","ChatBinding.findUniqueOrThrow","ChatBinding.findFirst","ChatBinding.findFirstOrThrow","ChatBinding.findMany","ChatBinding.createOne","ChatBinding.createMany","ChatBinding.createManyAndReturn","ChatBinding.updateOne","ChatBinding.updateMany","ChatBinding.updateManyAndReturn","ChatBinding.upsertOne","ChatBinding.deleteOne","ChatBinding.deleteMany","ChatBinding.groupBy","ChatBinding.aggregate","WalletPersona.findUnique","WalletPersona.findUniqueOrThrow","WalletPersona.findFirst","WalletPersona.findFirstOrThrow","WalletPersona.findMany","WalletPersona.createOne","WalletPersona.createMany","WalletPersona.createManyAndReturn","WalletPersona.updateOne","WalletPersona.updateMany","WalletPersona.updateManyAndReturn","WalletPersona.upsertOne","WalletPersona.deleteOne","WalletPersona.deleteMany","WalletPersona.groupBy","WalletPersona.aggregate","Battle.findUnique","Battle.findUniqueOrThrow","Battle.findFirst","Battle.findFirstOrThrow","Battle.findMany","Battle.createOne","Battle.createMany","Battle.createManyAndReturn","Battle.updateOne","Battle.updateMany","Battle.updateManyAndReturn","Battle.upsertOne","Battle.deleteOne","Battle.deleteMany","Battle.groupBy","Battle.aggregate","Strategy.findUnique","Strategy.findUniqueOrThrow","Strategy.findFirst","Strategy.findFirstOrThrow","Strategy.findMany","Strategy.createOne","Strategy.createMany","Strategy.createManyAndReturn","Strategy.updateOne","Strategy.updateMany","Strategy.updateManyAndReturn","Strategy.upsertOne","Strategy.deleteOne","Strategy.deleteMany","Strategy.groupBy","Strategy.aggregate","AND","OR","NOT","id","walletId","type","status","name","interval","nextRun","params","maxExecutions","executionCount","consecutiveFailures","maxConsecutiveFailures","createdAt","updatedAt","equals","in","notIn","lt","lte","gt","gte","not","string_contains","string_starts_with","string_ends_with","array_starts_with","array_ends_with","array_contains","contains","startsWith","endsWith","agents","roundDuration","totalRounds","currentRound","completedAt","winnerId","personaId","platform","chatId","muted","platform_chatId","priority","title","message","timestamp","read","metadata","recipient","amount","startDate","nextDue","maxPayments","paymentsMade","lastPaymentId","executeAfter","executedAt","txSignature","failureReason","rule","severity","details","acknowledged","strategyId","state","reason","transitions","toolName","maxPerTx","maxPerDay","enabled","args","result","success","seq","action","agentId","ip","outcome","integrity","participantId","label","encIv","encSalt","encTag","encData","groupPublicKey","threshold","totalShares","shareLabels","lastRefreshAt","has","hasEvery","hasSome","publicKey","isAgent","rekeyedAt","every","some","none","googleSub","frostPublicKey","walletId_participantId","is","isNot","connectOrCreate","upsert","createMany","set","disconnect","delete","connect","updateMany","deleteMany","push","increment","decrement","multiply","divide"]'),
38
+ graph: "vAekAaACCAIAALQEACC8AgAAvwQAML0CAAAFABC-AgAAvwQAMMACAQAAAAHLAkAA_QMAIaMDAQAAAAGkAwEA-gMAIQEAAAABACAcAQAAogQAIAMAAKMEACAEAACkBAAgBQAApQQAIAYAAKYEACAHAACnBAAgCgAAqAQAIAsAAKkEACAMAACqBAAgDQAAqwQAIA4AAKwEACAPAACtBAAgEAAArgQAIBEAAK8EACASAACwBAAgvAIAAKEEADC9AgAAAwAQvgIAAKEEADC_AgEA-gMAIcsCQAD9AwAhkAMBAP8DACGRAwEA-gMAIZIDAQD6AwAhkwMBAPoDACGUAwEA-gMAIZ0DAQD6AwAhngMgAIgEACGfA0AA_gMAIQEAAAADACAIAgAAtAQAILwCAAC_BAAwvQIAAAUAEL4CAAC_BAAwwAIBAPoDACHLAkAA_QMAIaMDAQD6AwAhpAMBAPoDACEBAAAABQAgDAIAAIIEACC8AgAAnwQAML0CAAAHABC-AgAAnwQAMMACAQD6AwAhywJAAP0DACGQAwEA_wMAIZUDAQD6AwAhlgMCAPwDACGXAwIA_AMAIZgDAACeBAAgmQNAAP4DACEBAAAABwAgCQIAAIIEACC8AgAAlQQAML0CAAAJABC-AgAAlQQAMMACAQD6AwAhzAJAAP0DACH_AgEA-gMAIYADAQD_AwAhgQMAAPsDACABAAAACQAgBwIAAIIEACC8AgAAkwQAML0CAAALABC-AgAAkwQAMMACAQD6AwAhzAJAAP0DACH-AgEA-gMAIQEAAAALACAIAgAAggQAILwCAACYBAAwvQIAAA0AEL4CAACYBAAwwAIBAPoDACGDAwgAmQQAIYQDCACZBAAhhQMgAIgEACEBAAAADQAgBwIAAIIEACC8AgAAgQQAML0CAAAPABC-AgAAgQQAMMACAQD6AwAhzAJAAP0DACHkAgEA-gMAIQEAAAAPACAMAgAAggQAILwCAAC-BAAwvQIAABEAEL4CAAC-BAAwvwIBAPoDACHAAgEA-gMAIY8DAgD8AwAhkAMBAPoDACGRAwEA-gMAIZIDAQD6AwAhkwMBAPoDACGUAwEA-gMAIQECAADYBAAgDQIAAIIEACC8AgAAvgQAML0CAAARABC-AgAAvgQAML8CAQAAAAHAAgEA-gMAIY8DAgD8AwAhkAMBAPoDACGRAwEA-gMAIZIDAQD6AwAhkwMBAPoDACGUAwEA-gMAIaUDAAC9BAAgAwAAABEAIAgAABIAMAkAABMAIAsCAACCBAAgvAIAALwEADC9AgAAFQAQvgIAALwEADC_AgEA-gMAIcACAQD6AwAh7AJAAP0DACGCAwEA-gMAIYYDAAD7AwAghwMBAPoDACGIAyAAiAQAIQECAADYBAAgCwIAAIIEACC8AgAAvAQAML0CAAAVABC-AgAAvAQAML8CAQAAAAHAAgEA-gMAIewCQAD9AwAhggMBAPoDACGGAwAA-wMAIIcDAQD6AwAhiAMgAIgEACEDAAAAFQAgCAAAFgAwCQAAFwAgCQIAAIIEACC8AgAAuwQAML0CAAAZABC-AgAAuwQAML8CAQD6AwAhwAIBAPoDACHsAkAA_QMAIfACCACZBAAhggMBAPoDACEBAgAA2AQAIAkCAACCBAAgvAIAALsEADC9AgAAGQAQvgIAALsEADC_AgEAAAABwAIBAPoDACHsAkAA_QMAIfACCACZBAAhggMBAPoDACEDAAAAGQAgCAAAGgAwCQAAGwAgCwIAAIIEACC8AgAAugQAML0CAAAdABC-AgAAugQAML8CAQD6AwAhwAIBAPoDACHsAkAA_QMAIfoCAQD6AwAh-wIBAPoDACH8AgAA-wMAIP0CIACIBAAhAQIAANgEACALAgAAggQAILwCAAC6BAAwvQIAAB0AEL4CAAC6BAAwvwIBAAAAAcACAQD6AwAh7AJAAP0DACH6AgEA-gMAIfsCAQD6AwAh_AIAAPsDACD9AiAAiAQAIQMAAAAdACAIAAAeADAJAAAfACAOAgAAggQAILwCAAC5BAAwvQIAACEAEL4CAAC5BAAwvwIBAPoDACHAAgEA-gMAIcICAQD6AwAhywJAAP0DACHvAgEA-gMAIfACCACZBAAh9gJAAP0DACH3AkAA_gMAIfgCAQD_AwAh-QIBAP8DACEEAgAA2AQAIPcCAADABAAg-AIAAMAEACD5AgAAwAQAIA4CAACCBAAgvAIAALkEADC9AgAAIQAQvgIAALkEADC_AgEAAAABwAIBAPoDACHCAgEA-gMAIcsCQAD9AwAh7wIBAPoDACHwAggAmQQAIfYCQAD9AwAh9wJAAP4DACH4AgEA_wMAIfkCAQD_AwAhAwAAACEAIAgAACIAMAkAACMAIBACAACCBAAgvAIAALgEADC9AgAAJQAQvgIAALgEADC_AgEA-gMAIcACAQD6AwAhwgIBAPoDACHEAgEA-gMAIcsCQAD9AwAh7wIBAPoDACHwAggAmQQAIfECQAD9AwAh8gJAAP0DACHzAgIAtgQAIfQCAgD8AwAh9QIBAP8DACEDAgAA2AQAIPMCAADABAAg9QIAAMAEACAQAgAAggQAILwCAAC4BAAwvQIAACUAEL4CAAC4BAAwvwIBAAAAAcACAQD6AwAhwgIBAPoDACHEAgEA-gMAIcsCQAD9AwAh7wIBAPoDACHwAggAmQQAIfECQAD9AwAh8gJAAP0DACHzAgIAtgQAIfQCAgD8AwAh9QIBAP8DACEDAAAAJQAgCAAAJgAwCQAAJwAgDQIAAIIEACC8AgAAtwQAML0CAAApABC-AgAAtwQAML8CAQD6AwAhwAIBAPoDACHBAgEA-gMAIekCAQD6AwAh6gIBAPoDACHrAgEA-gMAIewCQAD9AwAh7QIgAIgEACHuAgAAswQAIAICAADYBAAg7gIAAMAEACANAgAAggQAILwCAAC3BAAwvQIAACkAEL4CAAC3BAAwvwIBAAAAAcACAQD6AwAhwQIBAPoDACHpAgEA-gMAIeoCAQD6AwAh6wIBAPoDACHsAkAA_QMAIe0CIACIBAAh7gIAALMEACADAAAAKQAgCAAAKgAwCQAAKwAgEgIAAIIEACC8AgAAtQQAML0CAAAtABC-AgAAtQQAML8CAQD6AwAhwAIBAPoDACHBAgEA-gMAIcICAQD6AwAhwwIBAPoDACHEAgEA-gMAIcUCQAD9AwAhxgIAAPsDACDHAgIAtgQAIcgCAgD8AwAhyQICAPwDACHKAgIA_AMAIcsCQAD9AwAhzAJAAP0DACECAgAA2AQAIMcCAADABAAgEgIAAIIEACC8AgAAtQQAML0CAAAtABC-AgAAtQQAML8CAQAAAAHAAgEA-gMAIcECAQD6AwAhwgIBAPoDACHDAgEA-gMAIcQCAQD6AwAhxQJAAP0DACHGAgAA-wMAIMcCAgC2BAAhyAICAPwDACHJAgIA_AMAIcoCAgD8AwAhywJAAP0DACHMAkAA_QMAIQMAAAAtACAIAAAuADAJAAAvACAOAgAAtAQAILwCAACyBAAwvQIAADEAEL4CAACyBAAwvwIBAPoDACHAAgEA_wMAIewCQAD9AwAh_AIAALMEACCJAwIA_AMAIYoDAQD6AwAhiwMBAP8DACGMAwEA_wMAIY0DAQD6AwAhjgMBAPoDACEFAgAA2AQAIMACAADABAAg_AIAAMAEACCLAwAAwAQAIIwDAADABAAgDgIAALQEACC8AgAAsgQAML0CAAAxABC-AgAAsgQAML8CAQAAAAHAAgEA_wMAIewCQAD9AwAh_AIAALMEACCJAwIAAAABigMBAPoDACGLAwEA_wMAIYwDAQD_AwAhjQMBAPoDACGOAwEA-gMAIQMAAAAxACAIAAAyADAJAAAzACABAAAAAwAgAQAAABEAIAEAAAAVACABAAAAGQAgAQAAAB0AIAEAAAAhACABAAAAJQAgAQAAACkAIAEAAAAtACABAAAAMQAgAQAAAAEAIAECAADYBAAgAwAAAAUAIAgAAEAAMAkAAAEAIAMAAAAFACAIAABAADAJAAABACADAAAABQAgCAAAQAAwCQAAAQAgBQIAAOgGACDAAgEAAAABywJAAAAAAaMDAQAAAAGkAwEAAAABARkAAEQAIATAAgEAAAABywJAAAAAAaMDAQAAAAGkAwEAAAABARkAAEYAMAEZAABGADABAAAAAwAgBQIAAOcGACDAAgEAxgQAIcsCQADHBAAhowMBAMYEACGkAwEAxgQAIQIAAAABACAZAABKACAEwAIBAMYEACHLAkAAxwQAIaMDAQDGBAAhpAMBAMYEACECAAAABQAgGQAATAAgAgAAAAUAIBkAAEwAIAEAAAADACADAAAAAQAgIAAARAAgIQAASgAgAQAAAAEAIAEAAAAFACADEwAA5AYAICYAAOYGACAnAADlBgAgB7wCAACxBAAwvQIAAFQAEL4CAACxBAAwwAIBAOIDACHLAkAA4wMAIaMDAQDiAwAhpAMBAOIDACEDAAAABQAgCAAAUwAwJQAAVAAgAwAAAAUAIAgAAEAAMAkAAAEAIBwBAACiBAAgAwAAowQAIAQAAKQEACAFAAClBAAgBgAApgQAIAcAAKcEACAKAACoBAAgCwAAqQQAIAwAAKoEACANAACrBAAgDgAArAQAIA8AAK0EACAQAACuBAAgEQAArwQAIBIAALAEACC8AgAAoQQAML0CAAADABC-AgAAoQQAML8CAQAAAAHLAkAA_QMAIZADAQD_AwAhkQMBAPoDACGSAwEA-gMAIZMDAQD6AwAhlAMBAPoDACGdAwEA-gMAIZ4DIACIBAAhnwNAAP4DACEBAAAAVwAgAQAAAFcAIBEBAADVBgAgAwAA1gYAIAQAANcGACAFAADYBgAgBgAA2QYAIAcAANoGACAKAADbBgAgCwAA3AYAIAwAAN0GACANAADeBgAgDgAA3wYAIA8AAOAGACAQAADhBgAgEQAA4gYAIBIAAOMGACCQAwAAwAQAIJ8DAADABAAgAwAAAAMAIAgAAFoAMAkAAFcAIAMAAAADACAIAABaADAJAABXACADAAAAAwAgCAAAWgAwCQAAVwAgGQEAAMYGACADAADHBgAgBAAAyAYAIAUAAMkGACAGAADKBgAgBwAAywYAIAoAAMwGACALAADNBgAgDAAAzgYAIA0AAM8GACAOAADQBgAgDwAA0QYAIBAAANIGACARAADTBgAgEgAA1AYAIL8CAQAAAAHLAkAAAAABkAMBAAAAAZEDAQAAAAGSAwEAAAABkwMBAAAAAZQDAQAAAAGdAwEAAAABngMgAAAAAZ8DQAAAAAEBGQAAXgAgCr8CAQAAAAHLAkAAAAABkAMBAAAAAZEDAQAAAAGSAwEAAAABkwMBAAAAAZQDAQAAAAGdAwEAAAABngMgAAAAAZ8DQAAAAAEBGQAAYAAwARkAAGAAMBkBAACtBQAgAwAArgUAIAQAAK8FACAFAACwBQAgBgAAsQUAIAcAALIFACAKAACzBQAgCwAAtAUAIAwAALUFACANAAC2BQAgDgAAtwUAIA8AALgFACAQAAC5BQAgEQAAugUAIBIAALsFACC_AgEAxgQAIcsCQADHBAAhkAMBANIEACGRAwEAxgQAIZIDAQDGBAAhkwMBAMYEACGUAwEAxgQAIZ0DAQDGBAAhngMgANwEACGfA0AA0QQAIQIAAABXACAZAABjACAKvwIBAMYEACHLAkAAxwQAIZADAQDSBAAhkQMBAMYEACGSAwEAxgQAIZMDAQDGBAAhlAMBAMYEACGdAwEAxgQAIZ4DIADcBAAhnwNAANEEACECAAAAAwAgGQAAZQAgAgAAAAMAIBkAAGUAIAMAAABXACAgAABeACAhAABjACABAAAAVwAgAQAAAAMAIAUTAACqBQAgJgAArAUAICcAAKsFACCQAwAAwAQAIJ8DAADABAAgDbwCAACgBAAwvQIAAGwAEL4CAACgBAAwvwIBAOIDACHLAkAA4wMAIZADAQD0AwAhkQMBAOIDACGSAwEA4gMAIZMDAQDiAwAhlAMBAOIDACGdAwEA4gMAIZ4DIACEBAAhnwNAAPMDACEDAAAAAwAgCAAAawAwJQAAbAAgAwAAAAMAIAgAAFoAMAkAAFcAIAwCAACCBAAgvAIAAJ8EADC9AgAABwAQvgIAAJ8EADDAAgEAAAABywJAAP0DACGQAwEA_wMAIZUDAQD6AwAhlgMCAPwDACGXAwIA_AMAIZgDAACeBAAgmQNAAP4DACEBAAAAbwAgAQAAAG8AIAMCAADYBAAgkAMAAMAEACCZAwAAwAQAIAMAAAAHACAIAAByADAJAABvACADAAAABwAgCAAAcgAwCQAAbwAgAwAAAAcAIAgAAHIAMAkAAG8AIAkCAACpBQAgwAIBAAAAAcsCQAAAAAGQAwEAAAABlQMBAAAAAZYDAgAAAAGXAwIAAAABmAMAAKgFACCZA0AAAAABARkAAHYAIAjAAgEAAAABywJAAAAAAZADAQAAAAGVAwEAAAABlgMCAAAAAZcDAgAAAAGYAwAAqAUAIJkDQAAAAAEBGQAAeAAwARkAAHgAMAkCAACnBQAgwAIBAMYEACHLAkAAxwQAIZADAQDSBAAhlQMBAMYEACGWAwIAyQQAIZcDAgDJBAAhmAMAAKYFACCZA0AA0QQAIQIAAABvACAZAAB7ACAIwAIBAMYEACHLAkAAxwQAIZADAQDSBAAhlQMBAMYEACGWAwIAyQQAIZcDAgDJBAAhmAMAAKYFACCZA0AA0QQAIQIAAAAHACAZAAB9ACACAAAABwAgGQAAfQAgAwAAAG8AICAAAHYAICEAAHsAIAEAAABvACABAAAABwAgBxMAAKEFACAmAACkBQAgJwAAowUAIEgAAKIFACBJAAClBQAgkAMAAMAEACCZAwAAwAQAIAu8AgAAnQQAML0CAACEAQAQvgIAAJ0EADDAAgEA4gMAIcsCQADjAwAhkAMBAPQDACGVAwEA4gMAIZYDAgDmAwAhlwMCAOYDACGYAwAAngQAIJkDQADzAwAhAwAAAAcAIAgAAIMBADAlAACEAQAgAwAAAAcAIAgAAHIAMAkAAG8AIAEAAAATACABAAAAEwAgAwAAABEAIAgAABIAMAkAABMAIAMAAAARACAIAAASADAJAAATACADAAAAEQAgCAAAEgAwCQAAEwAgCQIAAKAFACC_AgEAAAABwAIBAAAAAY8DAgAAAAGQAwEAAAABkQMBAAAAAZIDAQAAAAGTAwEAAAABlAMBAAAAAQEZAACMAQAgCL8CAQAAAAHAAgEAAAABjwMCAAAAAZADAQAAAAGRAwEAAAABkgMBAAAAAZMDAQAAAAGUAwEAAAABARkAAI4BADABGQAAjgEAMAkCAACfBQAgvwIBAMYEACHAAgEAxgQAIY8DAgDJBAAhkAMBAMYEACGRAwEAxgQAIZIDAQDGBAAhkwMBAMYEACGUAwEAxgQAIQIAAAATACAZAACRAQAgCL8CAQDGBAAhwAIBAMYEACGPAwIAyQQAIZADAQDGBAAhkQMBAMYEACGSAwEAxgQAIZMDAQDGBAAhlAMBAMYEACECAAAAEQAgGQAAkwEAIAIAAAARACAZAACTAQAgAwAAABMAICAAAIwBACAhAACRAQAgAQAAABMAIAEAAAARACAFEwAAmgUAICYAAJ0FACAnAACcBQAgSAAAmwUAIEkAAJ4FACALvAIAAJwEADC9AgAAmgEAEL4CAACcBAAwvwIBAOIDACHAAgEA4gMAIY8DAgDmAwAhkAMBAOIDACGRAwEA4gMAIZIDAQDiAwAhkwMBAOIDACGUAwEA4gMAIQMAAAARACAIAACZAQAwJQAAmgEAIAMAAAARACAIAAASADAJAAATACABAAAAMwAgAQAAADMAIAMAAAAxACAIAAAyADAJAAAzACADAAAAMQAgCAAAMgAwCQAAMwAgAwAAADEAIAgAADIAMAkAADMAIAsCAACZBQAgvwIBAAAAAcACAQAAAAHsAkAAAAAB_AKAAAAAAYkDAgAAAAGKAwEAAAABiwMBAAAAAYwDAQAAAAGNAwEAAAABjgMBAAAAAQEZAACiAQAgCr8CAQAAAAHAAgEAAAAB7AJAAAAAAfwCgAAAAAGJAwIAAAABigMBAAAAAYsDAQAAAAGMAwEAAAABjQMBAAAAAY4DAQAAAAEBGQAApAEAMAEZAACkAQAwAQAAAAMAIAsCAACYBQAgvwIBAMYEACHAAgEA0gQAIewCQADHBAAh_AKAAAAAAYkDAgDJBAAhigMBAMYEACGLAwEA0gQAIYwDAQDSBAAhjQMBAMYEACGOAwEAxgQAIQIAAAAzACAZAACoAQAgCr8CAQDGBAAhwAIBANIEACHsAkAAxwQAIfwCgAAAAAGJAwIAyQQAIYoDAQDGBAAhiwMBANIEACGMAwEA0gQAIY0DAQDGBAAhjgMBAMYEACECAAAAMQAgGQAAqgEAIAIAAAAxACAZAACqAQAgAQAAAAMAIAMAAAAzACAgAACiAQAgIQAAqAEAIAEAAAAzACABAAAAMQAgCRMAAJMFACAmAACWBQAgJwAAlQUAIEgAAJQFACBJAACXBQAgwAIAAMAEACD8AgAAwAQAIIsDAADABAAgjAMAAMAEACANvAIAAJsEADC9AgAAsgEAEL4CAACbBAAwvwIBAOIDACHAAgEA9AMAIewCQADjAwAh_AIAAIsEACCJAwIA5gMAIYoDAQDiAwAhiwMBAPQDACGMAwEA9AMAIY0DAQDiAwAhjgMBAOIDACEDAAAAMQAgCAAAsQEAMCUAALIBACADAAAAMQAgCAAAMgAwCQAAMwAgAQAAABcAIAEAAAAXACADAAAAFQAgCAAAFgAwCQAAFwAgAwAAABUAIAgAABYAMAkAABcAIAMAAAAVACAIAAAWADAJAAAXACAIAgAAkgUAIL8CAQAAAAHAAgEAAAAB7AJAAAAAAYIDAQAAAAGGA4AAAAABhwMBAAAAAYgDIAAAAAEBGQAAugEAIAe_AgEAAAABwAIBAAAAAewCQAAAAAGCAwEAAAABhgOAAAAAAYcDAQAAAAGIAyAAAAABARkAALwBADABGQAAvAEAMAgCAACRBQAgvwIBAMYEACHAAgEAxgQAIewCQADHBAAhggMBAMYEACGGA4AAAAABhwMBAMYEACGIAyAA3AQAIQIAAAAXACAZAAC_AQAgB78CAQDGBAAhwAIBAMYEACHsAkAAxwQAIYIDAQDGBAAhhgOAAAAAAYcDAQDGBAAhiAMgANwEACECAAAAFQAgGQAAwQEAIAIAAAAVACAZAADBAQAgAwAAABcAICAAALoBACAhAAC_AQAgAQAAABcAIAEAAAAVACADEwAAjgUAICYAAJAFACAnAACPBQAgCrwCAACaBAAwvQIAAMgBABC-AgAAmgQAML8CAQDiAwAhwAIBAOIDACHsAkAA4wMAIYIDAQDiAwAhhgMAAOQDACCHAwEA4gMAIYgDIACEBAAhAwAAABUAIAgAAMcBADAlAADIAQAgAwAAABUAIAgAABYAMAkAABcAIAgCAACCBAAgvAIAAJgEADC9AgAADQAQvgIAAJgEADDAAgEAAAABgwMIAJkEACGEAwgAmQQAIYUDIACIBAAhAQAAAMsBACABAAAAywEAIAECAADYBAAgAwAAAA0AIAgAAM4BADAJAADLAQAgAwAAAA0AIAgAAM4BADAJAADLAQAgAwAAAA0AIAgAAM4BADAJAADLAQAgBQIAAI0FACDAAgEAAAABgwMIAAAAAYQDCAAAAAGFAyAAAAABARkAANIBACAEwAIBAAAAAYMDCAAAAAGEAwgAAAABhQMgAAAAAQEZAADUAQAwARkAANQBADAFAgAAjAUAIMACAQDGBAAhgwMIAOcEACGEAwgA5wQAIYUDIADcBAAhAgAAAMsBACAZAADXAQAgBMACAQDGBAAhgwMIAOcEACGEAwgA5wQAIYUDIADcBAAhAgAAAA0AIBkAANkBACACAAAADQAgGQAA2QEAIAMAAADLAQAgIAAA0gEAICEAANcBACABAAAAywEAIAEAAAANACAFEwAAhwUAICYAAIoFACAnAACJBQAgSAAAiAUAIEkAAIsFACAHvAIAAJcEADC9AgAA4AEAEL4CAACXBAAwwAIBAOIDACGDAwgAjgQAIYQDCACOBAAhhQMgAIQEACEDAAAADQAgCAAA3wEAMCUAAOABACADAAAADQAgCAAAzgEAMAkAAMsBACABAAAAGwAgAQAAABsAIAMAAAAZACAIAAAaADAJAAAbACADAAAAGQAgCAAAGgAwCQAAGwAgAwAAABkAIAgAABoAMAkAABsAIAYCAACGBQAgvwIBAAAAAcACAQAAAAHsAkAAAAAB8AIIAAAAAYIDAQAAAAEBGQAA6AEAIAW_AgEAAAABwAIBAAAAAewCQAAAAAHwAggAAAABggMBAAAAAQEZAADqAQAwARkAAOoBADAGAgAAhQUAIL8CAQDGBAAhwAIBAMYEACHsAkAAxwQAIfACCADnBAAhggMBAMYEACECAAAAGwAgGQAA7QEAIAW_AgEAxgQAIcACAQDGBAAh7AJAAMcEACHwAggA5wQAIYIDAQDGBAAhAgAAABkAIBkAAO8BACACAAAAGQAgGQAA7wEAIAMAAAAbACAgAADoAQAgIQAA7QEAIAEAAAAbACABAAAAGQAgBRMAAIAFACAmAACDBQAgJwAAggUAIEgAAIEFACBJAACEBQAgCLwCAACWBAAwvQIAAPYBABC-AgAAlgQAML8CAQDiAwAhwAIBAOIDACHsAkAA4wMAIfACCACOBAAhggMBAOIDACEDAAAAGQAgCAAA9QEAMCUAAPYBACADAAAAGQAgCAAAGgAwCQAAGwAgCQIAAIIEACC8AgAAlQQAML0CAAAJABC-AgAAlQQAMMACAQAAAAHMAkAA_QMAIf8CAQD6AwAhgAMBAP8DACGBAwAA-wMAIAEAAAD5AQAgAQAAAPkBACACAgAA2AQAIIADAADABAAgAwAAAAkAIAgAAPwBADAJAAD5AQAgAwAAAAkAIAgAAPwBADAJAAD5AQAgAwAAAAkAIAgAAPwBADAJAAD5AQAgBgIAAP8EACDAAgEAAAABzAJAAAAAAf8CAQAAAAGAAwEAAAABgQOAAAAAAQEZAACAAgAgBcACAQAAAAHMAkAAAAAB_wIBAAAAAYADAQAAAAGBA4AAAAABARkAAIICADABGQAAggIAMAYCAAD-BAAgwAIBAMYEACHMAkAAxwQAIf8CAQDGBAAhgAMBANIEACGBA4AAAAABAgAAAPkBACAZAACFAgAgBcACAQDGBAAhzAJAAMcEACH_AgEAxgQAIYADAQDSBAAhgQOAAAAAAQIAAAAJACAZAACHAgAgAgAAAAkAIBkAAIcCACADAAAA-QEAICAAAIACACAhAACFAgAgAQAAAPkBACABAAAACQAgBBMAAPsEACAmAAD9BAAgJwAA_AQAIIADAADABAAgCLwCAACUBAAwvQIAAI4CABC-AgAAlAQAMMACAQDiAwAhzAJAAOMDACH_AgEA4gMAIYADAQD0AwAhgQMAAOQDACADAAAACQAgCAAAjQIAMCUAAI4CACADAAAACQAgCAAA_AEAMAkAAPkBACAHAgAAggQAILwCAACTBAAwvQIAAAsAEL4CAACTBAAwwAIBAAAAAcwCQAD9AwAh_gIBAPoDACEBAAAAkQIAIAEAAACRAgAgAQIAANgEACADAAAACwAgCAAAlAIAMAkAAJECACADAAAACwAgCAAAlAIAMAkAAJECACADAAAACwAgCAAAlAIAMAkAAJECACAEAgAA-gQAIMACAQAAAAHMAkAAAAAB_gIBAAAAAQEZAACYAgAgA8ACAQAAAAHMAkAAAAAB_gIBAAAAAQEZAACaAgAwARkAAJoCADAEAgAA-QQAIMACAQDGBAAhzAJAAMcEACH-AgEAxgQAIQIAAACRAgAgGQAAnQIAIAPAAgEAxgQAIcwCQADHBAAh_gIBAMYEACECAAAACwAgGQAAnwIAIAIAAAALACAZAACfAgAgAwAAAJECACAgAACYAgAgIQAAnQIAIAEAAACRAgAgAQAAAAsAIAMTAAD2BAAgJgAA-AQAICcAAPcEACAGvAIAAJIEADC9AgAApgIAEL4CAACSBAAwwAIBAOIDACHMAkAA4wMAIf4CAQDiAwAhAwAAAAsAIAgAAKUCADAlAACmAgAgAwAAAAsAIAgAAJQCADAJAACRAgAgAQAAAB8AIAEAAAAfACADAAAAHQAgCAAAHgAwCQAAHwAgAwAAAB0AIAgAAB4AMAkAAB8AIAMAAAAdACAIAAAeADAJAAAfACAIAgAA9QQAIL8CAQAAAAHAAgEAAAAB7AJAAAAAAfoCAQAAAAH7AgEAAAAB_AKAAAAAAf0CIAAAAAEBGQAArgIAIAe_AgEAAAABwAIBAAAAAewCQAAAAAH6AgEAAAAB-wIBAAAAAfwCgAAAAAH9AiAAAAABARkAALACADABGQAAsAIAMAgCAAD0BAAgvwIBAMYEACHAAgEAxgQAIewCQADHBAAh-gIBAMYEACH7AgEAxgQAIfwCgAAAAAH9AiAA3AQAIQIAAAAfACAZAACzAgAgB78CAQDGBAAhwAIBAMYEACHsAkAAxwQAIfoCAQDGBAAh-wIBAMYEACH8AoAAAAAB_QIgANwEACECAAAAHQAgGQAAtQIAIAIAAAAdACAZAAC1AgAgAwAAAB8AICAAAK4CACAhAACzAgAgAQAAAB8AIAEAAAAdACADEwAA8QQAICYAAPMEACAnAADyBAAgCrwCAACRBAAwvQIAALwCABC-AgAAkQQAML8CAQDiAwAhwAIBAOIDACHsAkAA4wMAIfoCAQDiAwAh-wIBAOIDACH8AgAA5AMAIP0CIACEBAAhAwAAAB0AIAgAALsCADAlAAC8AgAgAwAAAB0AIAgAAB4AMAkAAB8AIAEAAAAjACABAAAAIwAgAwAAACEAIAgAACIAMAkAACMAIAMAAAAhACAIAAAiADAJAAAjACADAAAAIQAgCAAAIgAwCQAAIwAgCwIAAPAEACC_AgEAAAABwAIBAAAAAcICAQAAAAHLAkAAAAAB7wIBAAAAAfACCAAAAAH2AkAAAAAB9wJAAAAAAfgCAQAAAAH5AgEAAAABARkAAMQCACAKvwIBAAAAAcACAQAAAAHCAgEAAAABywJAAAAAAe8CAQAAAAHwAggAAAAB9gJAAAAAAfcCQAAAAAH4AgEAAAAB-QIBAAAAAQEZAADGAgAwARkAAMYCADALAgAA7wQAIL8CAQDGBAAhwAIBAMYEACHCAgEAxgQAIcsCQADHBAAh7wIBAMYEACHwAggA5wQAIfYCQADHBAAh9wJAANEEACH4AgEA0gQAIfkCAQDSBAAhAgAAACMAIBkAAMkCACAKvwIBAMYEACHAAgEAxgQAIcICAQDGBAAhywJAAMcEACHvAgEAxgQAIfACCADnBAAh9gJAAMcEACH3AkAA0QQAIfgCAQDSBAAh-QIBANIEACECAAAAIQAgGQAAywIAIAIAAAAhACAZAADLAgAgAwAAACMAICAAAMQCACAhAADJAgAgAQAAACMAIAEAAAAhACAIEwAA6gQAICYAAO0EACAnAADsBAAgSAAA6wQAIEkAAO4EACD3AgAAwAQAIPgCAADABAAg-QIAAMAEACANvAIAAJAEADC9AgAA0gIAEL4CAACQBAAwvwIBAOIDACHAAgEA4gMAIcICAQDiAwAhywJAAOMDACHvAgEA4gMAIfACCACOBAAh9gJAAOMDACH3AkAA8wMAIfgCAQD0AwAh-QIBAPQDACEDAAAAIQAgCAAA0QIAMCUAANICACADAAAAIQAgCAAAIgAwCQAAIwAgAQAAACcAIAEAAAAnACADAAAAJQAgCAAAJgAwCQAAJwAgAwAAACUAIAgAACYAMAkAACcAIAMAAAAlACAIAAAmADAJAAAnACANAgAA6QQAIL8CAQAAAAHAAgEAAAABwgIBAAAAAcQCAQAAAAHLAkAAAAAB7wIBAAAAAfACCAAAAAHxAkAAAAAB8gJAAAAAAfMCAgAAAAH0AgIAAAAB9QIBAAAAAQEZAADaAgAgDL8CAQAAAAHAAgEAAAABwgIBAAAAAcQCAQAAAAHLAkAAAAAB7wIBAAAAAfACCAAAAAHxAkAAAAAB8gJAAAAAAfMCAgAAAAH0AgIAAAAB9QIBAAAAAQEZAADcAgAwARkAANwCADANAgAA6AQAIL8CAQDGBAAhwAIBAMYEACHCAgEAxgQAIcQCAQDGBAAhywJAAMcEACHvAgEAxgQAIfACCADnBAAh8QJAAMcEACHyAkAAxwQAIfMCAgDIBAAh9AICAMkEACH1AgEA0gQAIQIAAAAnACAZAADfAgAgDL8CAQDGBAAhwAIBAMYEACHCAgEAxgQAIcQCAQDGBAAhywJAAMcEACHvAgEAxgQAIfACCADnBAAh8QJAAMcEACHyAkAAxwQAIfMCAgDIBAAh9AICAMkEACH1AgEA0gQAIQIAAAAlACAZAADhAgAgAgAAACUAIBkAAOECACADAAAAJwAgIAAA2gIAICEAAN8CACABAAAAJwAgAQAAACUAIAcTAADiBAAgJgAA5QQAICcAAOQEACBIAADjBAAgSQAA5gQAIPMCAADABAAg9QIAAMAEACAPvAIAAI0EADC9AgAA6AIAEL4CAACNBAAwvwIBAOIDACHAAgEA4gMAIcICAQDiAwAhxAIBAOIDACHLAkAA4wMAIe8CAQDiAwAh8AIIAI4EACHxAkAA4wMAIfICQADjAwAh8wICAOUDACH0AgIA5gMAIfUCAQD0AwAhAwAAACUAIAgAAOcCADAlAADoAgAgAwAAACUAIAgAACYAMAkAACcAIAEAAAArACABAAAAKwAgAwAAACkAIAgAACoAMAkAACsAIAMAAAApACAIAAAqADAJAAArACADAAAAKQAgCAAAKgAwCQAAKwAgCgIAAOEEACC_AgEAAAABwAIBAAAAAcECAQAAAAHpAgEAAAAB6gIBAAAAAesCAQAAAAHsAkAAAAAB7QIgAAAAAe4CgAAAAAEBGQAA8AIAIAm_AgEAAAABwAIBAAAAAcECAQAAAAHpAgEAAAAB6gIBAAAAAesCAQAAAAHsAkAAAAAB7QIgAAAAAe4CgAAAAAEBGQAA8gIAMAEZAADyAgAwCgIAAOAEACC_AgEAxgQAIcACAQDGBAAhwQIBAMYEACHpAgEAxgQAIeoCAQDGBAAh6wIBAMYEACHsAkAAxwQAIe0CIADcBAAh7gKAAAAAAQIAAAArACAZAAD1AgAgCb8CAQDGBAAhwAIBAMYEACHBAgEAxgQAIekCAQDGBAAh6gIBAMYEACHrAgEAxgQAIewCQADHBAAh7QIgANwEACHuAoAAAAABAgAAACkAIBkAAPcCACACAAAAKQAgGQAA9wIAIAMAAAArACAgAADwAgAgIQAA9QIAIAEAAAArACABAAAAKQAgBBMAAN0EACAmAADfBAAgJwAA3gQAIO4CAADABAAgDLwCAACKBAAwvQIAAP4CABC-AgAAigQAML8CAQDiAwAhwAIBAOIDACHBAgEA4gMAIekCAQDiAwAh6gIBAOIDACHrAgEA4gMAIewCQADjAwAh7QIgAIQEACHuAgAAiwQAIAMAAAApACAIAAD9AgAwJQAA_gIAIAMAAAApACAIAAAqADAJAAArACAJvAIAAIcEADC9AgAAhAMAEL4CAACHBAAwwAIBAPoDACHLAkAA_QMAIeUCAQD6AwAh5gIBAPoDACHnAiAAiAQAIegCAACJBAAgAQAAAIEDACABAAAAgQMAIAi8AgAAhwQAML0CAACEAwAQvgIAAIcEADDAAgEA-gMAIcsCQAD9AwAh5QIBAPoDACHmAgEA-gMAIecCIACIBAAhAAMAAACEAwAgCAAAhQMAMAkAAIEDACADAAAAhAMAIAgAAIUDADAJAACBAwAgAwAAAIQDACAIAACFAwAwCQAAgQMAIAXAAgEAAAABywJAAAAAAeUCAQAAAAHmAgEAAAAB5wIgAAAAAQEZAACJAwAgBcACAQAAAAHLAkAAAAAB5QIBAAAAAeYCAQAAAAHnAiAAAAABARkAAIsDADABGQAAiwMAMAXAAgEAxgQAIcsCQADHBAAh5QIBAMYEACHmAgEAxgQAIecCIADcBAAhAgAAAIEDACAZAACOAwAgBcACAQDGBAAhywJAAMcEACHlAgEAxgQAIeYCAQDGBAAh5wIgANwEACECAAAAhAMAIBkAAJADACACAAAAhAMAIBkAAJADACADAAAAgQMAICAAAIkDACAhAACOAwAgAQAAAIEDACABAAAAhAMAIAMTAADZBAAgJgAA2wQAICcAANoEACAIvAIAAIMEADC9AgAAlwMAEL4CAACDBAAwwAIBAOIDACHLAkAA4wMAIeUCAQDiAwAh5gIBAOIDACHnAiAAhAQAIQMAAACEAwAgCAAAlgMAMCUAAJcDACADAAAAhAMAIAgAAIUDADAJAACBAwAgBwIAAIIEACC8AgAAgQQAML0CAAAPABC-AgAAgQQAMMACAQAAAAHMAkAA_QMAIeQCAQD6AwAhAQAAAJoDACABAAAAmgMAIAECAADYBAAgAwAAAA8AIAgAAJ0DADAJAACaAwAgAwAAAA8AIAgAAJ0DADAJAACaAwAgAwAAAA8AIAgAAJ0DADAJAACaAwAgBAIAANcEACDAAgEAAAABzAJAAAAAAeQCAQAAAAEBGQAAoQMAIAPAAgEAAAABzAJAAAAAAeQCAQAAAAEBGQAAowMAMAEZAACjAwAwBAIAANYEACDAAgEAxgQAIcwCQADHBAAh5AIBAMYEACECAAAAmgMAIBkAAKYDACADwAIBAMYEACHMAkAAxwQAIeQCAQDGBAAhAgAAAA8AIBkAAKgDACACAAAADwAgGQAAqAMAIAMAAACaAwAgIAAAoQMAICEAAKYDACABAAAAmgMAIAEAAAAPACADEwAA0wQAICYAANUEACAnAADUBAAgBrwCAACABAAwvQIAAK8DABC-AgAAgAQAMMACAQDiAwAhzAJAAOMDACHkAgEA4gMAIQMAAAAPACAIAACuAwAwJQAArwMAIAMAAAAPACAIAACdAwAwCQAAmgMAIA28AgAA-QMAML0CAAC1AwAQvgIAAPkDADC_AgEAAAABwgIBAPoDACHLAkAA_QMAIcwCQAD9AwAh3gIAAPsDACDfAgIA_AMAIeACAgD8AwAh4QICAPwDACHiAkAA_gMAIeMCAQD_AwAhAQAAALIDACABAAAAsgMAIA28AgAA-QMAML0CAAC1AwAQvgIAAPkDADC_AgEA-gMAIcICAQD6AwAhywJAAP0DACHMAkAA_QMAId4CAAD7AwAg3wICAPwDACHgAgIA_AMAIeECAgD8AwAh4gJAAP4DACHjAgEA_wMAIQLiAgAAwAQAIOMCAADABAAgAwAAALUDACAIAAC2AwAwCQAAsgMAIAMAAAC1AwAgCAAAtgMAMAkAALIDACADAAAAtQMAIAgAALYDADAJAACyAwAgCr8CAQAAAAHCAgEAAAABywJAAAAAAcwCQAAAAAHeAoAAAAAB3wICAAAAAeACAgAAAAHhAgIAAAAB4gJAAAAAAeMCAQAAAAEBGQAAugMAIAq_AgEAAAABwgIBAAAAAcsCQAAAAAHMAkAAAAAB3gKAAAAAAd8CAgAAAAHgAgIAAAAB4QICAAAAAeICQAAAAAHjAgEAAAABARkAALwDADABGQAAvAMAMAq_AgEAxgQAIcICAQDGBAAhywJAAMcEACHMAkAAxwQAId4CgAAAAAHfAgIAyQQAIeACAgDJBAAh4QICAMkEACHiAkAA0QQAIeMCAQDSBAAhAgAAALIDACAZAAC_AwAgCr8CAQDGBAAhwgIBAMYEACHLAkAAxwQAIcwCQADHBAAh3gKAAAAAAd8CAgDJBAAh4AICAMkEACHhAgIAyQQAIeICQADRBAAh4wIBANIEACECAAAAtQMAIBkAAMEDACACAAAAtQMAIBkAAMEDACADAAAAsgMAICAAALoDACAhAAC_AwAgAQAAALIDACABAAAAtQMAIAcTAADMBAAgJgAAzwQAICcAAM4EACBIAADNBAAgSQAA0AQAIOICAADABAAg4wIAAMAEACANvAIAAPIDADC9AgAAyAMAEL4CAADyAwAwvwIBAOIDACHCAgEA4gMAIcsCQADjAwAhzAJAAOMDACHeAgAA5AMAIN8CAgDmAwAh4AICAOYDACHhAgIA5gMAIeICQADzAwAh4wIBAPQDACEDAAAAtQMAIAgAAMcDADAlAADIAwAgAwAAALUDACAIAAC2AwAwCQAAsgMAIAEAAAAvACABAAAALwAgAwAAAC0AIAgAAC4AMAkAAC8AIAMAAAAtACAIAAAuADAJAAAvACADAAAALQAgCAAALgAwCQAALwAgDwIAAMsEACC_AgEAAAABwAIBAAAAAcECAQAAAAHCAgEAAAABwwIBAAAAAcQCAQAAAAHFAkAAAAABxgKAAAAAAccCAgAAAAHIAgIAAAAByQICAAAAAcoCAgAAAAHLAkAAAAABzAJAAAAAAQEZAADQAwAgDr8CAQAAAAHAAgEAAAABwQIBAAAAAcICAQAAAAHDAgEAAAABxAIBAAAAAcUCQAAAAAHGAoAAAAABxwICAAAAAcgCAgAAAAHJAgIAAAABygICAAAAAcsCQAAAAAHMAkAAAAABARkAANIDADABGQAA0gMAMA8CAADKBAAgvwIBAMYEACHAAgEAxgQAIcECAQDGBAAhwgIBAMYEACHDAgEAxgQAIcQCAQDGBAAhxQJAAMcEACHGAoAAAAABxwICAMgEACHIAgIAyQQAIckCAgDJBAAhygICAMkEACHLAkAAxwQAIcwCQADHBAAhAgAAAC8AIBkAANUDACAOvwIBAMYEACHAAgEAxgQAIcECAQDGBAAhwgIBAMYEACHDAgEAxgQAIcQCAQDGBAAhxQJAAMcEACHGAoAAAAABxwICAMgEACHIAgIAyQQAIckCAgDJBAAhygICAMkEACHLAkAAxwQAIcwCQADHBAAhAgAAAC0AIBkAANcDACACAAAALQAgGQAA1wMAIAMAAAAvACAgAADQAwAgIQAA1QMAIAEAAAAvACABAAAALQAgBhMAAMEEACAmAADEBAAgJwAAwwQAIEgAAMIEACBJAADFBAAgxwIAAMAEACARvAIAAOEDADC9AgAA3gMAEL4CAADhAwAwvwIBAOIDACHAAgEA4gMAIcECAQDiAwAhwgIBAOIDACHDAgEA4gMAIcQCAQDiAwAhxQJAAOMDACHGAgAA5AMAIMcCAgDlAwAhyAICAOYDACHJAgIA5gMAIcoCAgDmAwAhywJAAOMDACHMAkAA4wMAIQMAAAAtACAIAADdAwAwJQAA3gMAIAMAAAAtACAIAAAuADAJAAAvACARvAIAAOEDADC9AgAA3gMAEL4CAADhAwAwvwIBAOIDACHAAgEA4gMAIcECAQDiAwAhwgIBAOIDACHDAgEA4gMAIcQCAQDiAwAhxQJAAOMDACHGAgAA5AMAIMcCAgDlAwAhyAICAOYDACHJAgIA5gMAIcoCAgDmAwAhywJAAOMDACHMAkAA4wMAIQ4TAADoAwAgJgAA8QMAICcAAPEDACDNAgEAAAABzgIBAAAABM8CAQAAAATQAgEAAAAB0QIBAAAAAdICAQAAAAHTAgEAAAAB1AIBAPADACHbAgEAAAAB3AIBAAAAAd0CAQAAAAELEwAA6AMAICYAAO8DACAnAADvAwAgzQJAAAAAAc4CQAAAAATPAkAAAAAE0AJAAAAAAdECQAAAAAHSAkAAAAAB0wJAAAAAAdQCQADuAwAhDxMAAOgDACAmAADtAwAgJwAA7QMAIM0CgAAAAAHQAoAAAAAB0QKAAAAAAdICgAAAAAHTAoAAAAAB1AKAAAAAAdUCAQAAAAHWAgEAAAAB1wIBAAAAAdgCgAAAAAHZAoAAAAAB2gKAAAAAAQ0TAADrAwAgJgAA6wMAICcAAOsDACBIAADsAwAgSQAA6wMAIM0CAgAAAAHOAgIAAAAFzwICAAAABdACAgAAAAHRAgIAAAAB0gICAAAAAdMCAgAAAAHUAgIA6gMAIQ0TAADoAwAgJgAA6AMAICcAAOgDACBIAADpAwAgSQAA6AMAIM0CAgAAAAHOAgIAAAAEzwICAAAABNACAgAAAAHRAgIAAAAB0gICAAAAAdMCAgAAAAHUAgIA5wMAIQ0TAADoAwAgJgAA6AMAICcAAOgDACBIAADpAwAgSQAA6AMAIM0CAgAAAAHOAgIAAAAEzwICAAAABNACAgAAAAHRAgIAAAAB0gICAAAAAdMCAgAAAAHUAgIA5wMAIQjNAgIAAAABzgICAAAABM8CAgAAAATQAgIAAAAB0QICAAAAAdICAgAAAAHTAgIAAAAB1AICAOgDACEIzQIIAAAAAc4CCAAAAATPAggAAAAE0AIIAAAAAdECCAAAAAHSAggAAAAB0wIIAAAAAdQCCADpAwAhDRMAAOsDACAmAADrAwAgJwAA6wMAIEgAAOwDACBJAADrAwAgzQICAAAAAc4CAgAAAAXPAgIAAAAF0AICAAAAAdECAgAAAAHSAgIAAAAB0wICAAAAAdQCAgDqAwAhCM0CAgAAAAHOAgIAAAAFzwICAAAABdACAgAAAAHRAgIAAAAB0gICAAAAAdMCAgAAAAHUAgIA6wMAIQjNAggAAAABzgIIAAAABc8CCAAAAAXQAggAAAAB0QIIAAAAAdICCAAAAAHTAggAAAAB1AIIAOwDACEMzQKAAAAAAdACgAAAAAHRAoAAAAAB0gKAAAAAAdMCgAAAAAHUAoAAAAAB1QIBAAAAAdYCAQAAAAHXAgEAAAAB2AKAAAAAAdkCgAAAAAHaAoAAAAABCxMAAOgDACAmAADvAwAgJwAA7wMAIM0CQAAAAAHOAkAAAAAEzwJAAAAABNACQAAAAAHRAkAAAAAB0gJAAAAAAdMCQAAAAAHUAkAA7gMAIQjNAkAAAAABzgJAAAAABM8CQAAAAATQAkAAAAAB0QJAAAAAAdICQAAAAAHTAkAAAAAB1AJAAO8DACEOEwAA6AMAICYAAPEDACAnAADxAwAgzQIBAAAAAc4CAQAAAATPAgEAAAAE0AIBAAAAAdECAQAAAAHSAgEAAAAB0wIBAAAAAdQCAQDwAwAh2wIBAAAAAdwCAQAAAAHdAgEAAAABC80CAQAAAAHOAgEAAAAEzwIBAAAABNACAQAAAAHRAgEAAAAB0gIBAAAAAdMCAQAAAAHUAgEA8QMAIdsCAQAAAAHcAgEAAAAB3QIBAAAAAQ28AgAA8gMAML0CAADIAwAQvgIAAPIDADC_AgEA4gMAIcICAQDiAwAhywJAAOMDACHMAkAA4wMAId4CAADkAwAg3wICAOYDACHgAgIA5gMAIeECAgDmAwAh4gJAAPMDACHjAgEA9AMAIQsTAADrAwAgJgAA-AMAICcAAPgDACDNAkAAAAABzgJAAAAABc8CQAAAAAXQAkAAAAAB0QJAAAAAAdICQAAAAAHTAkAAAAAB1AJAAPcDACEOEwAA6wMAICYAAPYDACAnAAD2AwAgzQIBAAAAAc4CAQAAAAXPAgEAAAAF0AIBAAAAAdECAQAAAAHSAgEAAAAB0wIBAAAAAdQCAQD1AwAh2wIBAAAAAdwCAQAAAAHdAgEAAAABDhMAAOsDACAmAAD2AwAgJwAA9gMAIM0CAQAAAAHOAgEAAAAFzwIBAAAABdACAQAAAAHRAgEAAAAB0gIBAAAAAdMCAQAAAAHUAgEA9QMAIdsCAQAAAAHcAgEAAAAB3QIBAAAAAQvNAgEAAAABzgIBAAAABc8CAQAAAAXQAgEAAAAB0QIBAAAAAdICAQAAAAHTAgEAAAAB1AIBAPYDACHbAgEAAAAB3AIBAAAAAd0CAQAAAAELEwAA6wMAICYAAPgDACAnAAD4AwAgzQJAAAAAAc4CQAAAAAXPAkAAAAAF0AJAAAAAAdECQAAAAAHSAkAAAAAB0wJAAAAAAdQCQAD3AwAhCM0CQAAAAAHOAkAAAAAFzwJAAAAABdACQAAAAAHRAkAAAAAB0gJAAAAAAdMCQAAAAAHUAkAA-AMAIQ28AgAA-QMAML0CAAC1AwAQvgIAAPkDADC_AgEA-gMAIcICAQD6AwAhywJAAP0DACHMAkAA_QMAId4CAAD7AwAg3wICAPwDACHgAgIA_AMAIeECAgD8AwAh4gJAAP4DACHjAgEA_wMAIQvNAgEAAAABzgIBAAAABM8CAQAAAATQAgEAAAAB0QIBAAAAAdICAQAAAAHTAgEAAAAB1AIBAPEDACHbAgEAAAAB3AIBAAAAAd0CAQAAAAEMzQKAAAAAAdACgAAAAAHRAoAAAAAB0gKAAAAAAdMCgAAAAAHUAoAAAAAB1QIBAAAAAdYCAQAAAAHXAgEAAAAB2AKAAAAAAdkCgAAAAAHaAoAAAAABCM0CAgAAAAHOAgIAAAAEzwICAAAABNACAgAAAAHRAgIAAAAB0gICAAAAAdMCAgAAAAHUAgIA6AMAIQjNAkAAAAABzgJAAAAABM8CQAAAAATQAkAAAAAB0QJAAAAAAdICQAAAAAHTAkAAAAAB1AJAAO8DACEIzQJAAAAAAc4CQAAAAAXPAkAAAAAF0AJAAAAAAdECQAAAAAHSAkAAAAAB0wJAAAAAAdQCQAD4AwAhC80CAQAAAAHOAgEAAAAFzwIBAAAABdACAQAAAAHRAgEAAAAB0gIBAAAAAdMCAQAAAAHUAgEA9gMAIdsCAQAAAAHcAgEAAAAB3QIBAAAAAQa8AgAAgAQAML0CAACvAwAQvgIAAIAEADDAAgEA4gMAIcwCQADjAwAh5AIBAOIDACEHAgAAggQAILwCAACBBAAwvQIAAA8AEL4CAACBBAAwwAIBAPoDACHMAkAA_QMAIeQCAQD6AwAhHgEAAKIEACADAACjBAAgBAAApAQAIAUAAKUEACAGAACmBAAgBwAApwQAIAoAAKgEACALAACpBAAgDAAAqgQAIA0AAKsEACAOAACsBAAgDwAArQQAIBAAAK4EACARAACvBAAgEgAAsAQAILwCAAChBAAwvQIAAAMAEL4CAAChBAAwvwIBAPoDACHLAkAA_QMAIZADAQD_AwAhkQMBAPoDACGSAwEA-gMAIZMDAQD6AwAhlAMBAPoDACGdAwEA-gMAIZ4DIACIBAAhnwNAAP4DACGmAwAAAwAgpwMAAAMAIAi8AgAAgwQAML0CAACXAwAQvgIAAIMEADDAAgEA4gMAIcsCQADjAwAh5QIBAOIDACHmAgEA4gMAIecCIACEBAAhBRMAAOgDACAmAACGBAAgJwAAhgQAIM0CIAAAAAHUAiAAhQQAIQUTAADoAwAgJgAAhgQAICcAAIYEACDNAiAAAAAB1AIgAIUEACECzQIgAAAAAdQCIACGBAAhCLwCAACHBAAwvQIAAIQDABC-AgAAhwQAMMACAQD6AwAhywJAAP0DACHlAgEA-gMAIeYCAQD6AwAh5wIgAIgEACECzQIgAAAAAdQCIACGBAAhAuUCAQAAAAHmAgEAAAABDLwCAACKBAAwvQIAAP4CABC-AgAAigQAML8CAQDiAwAhwAIBAOIDACHBAgEA4gMAIekCAQDiAwAh6gIBAOIDACHrAgEA4gMAIewCQADjAwAh7QIgAIQEACHuAgAAiwQAIA8TAADrAwAgJgAAjAQAICcAAIwEACDNAoAAAAAB0AKAAAAAAdECgAAAAAHSAoAAAAAB0wKAAAAAAdQCgAAAAAHVAgEAAAAB1gIBAAAAAdcCAQAAAAHYAoAAAAAB2QKAAAAAAdoCgAAAAAEMzQKAAAAAAdACgAAAAAHRAoAAAAAB0gKAAAAAAdMCgAAAAAHUAoAAAAAB1QIBAAAAAdYCAQAAAAHXAgEAAAAB2AKAAAAAAdkCgAAAAAHaAoAAAAABD7wCAACNBAAwvQIAAOgCABC-AgAAjQQAML8CAQDiAwAhwAIBAOIDACHCAgEA4gMAIcQCAQDiAwAhywJAAOMDACHvAgEA4gMAIfACCACOBAAh8QJAAOMDACHyAkAA4wMAIfMCAgDlAwAh9AICAOYDACH1AgEA9AMAIQ0TAADoAwAgJgAA6QMAICcAAOkDACBIAADpAwAgSQAA6QMAIM0CCAAAAAHOAggAAAAEzwIIAAAABNACCAAAAAHRAggAAAAB0gIIAAAAAdMCCAAAAAHUAggAjwQAIQ0TAADoAwAgJgAA6QMAICcAAOkDACBIAADpAwAgSQAA6QMAIM0CCAAAAAHOAggAAAAEzwIIAAAABNACCAAAAAHRAggAAAAB0gIIAAAAAdMCCAAAAAHUAggAjwQAIQ28AgAAkAQAML0CAADSAgAQvgIAAJAEADC_AgEA4gMAIcACAQDiAwAhwgIBAOIDACHLAkAA4wMAIe8CAQDiAwAh8AIIAI4EACH2AkAA4wMAIfcCQADzAwAh-AIBAPQDACH5AgEA9AMAIQq8AgAAkQQAML0CAAC8AgAQvgIAAJEEADC_AgEA4gMAIcACAQDiAwAh7AJAAOMDACH6AgEA4gMAIfsCAQDiAwAh_AIAAOQDACD9AiAAhAQAIQa8AgAAkgQAML0CAACmAgAQvgIAAJIEADDAAgEA4gMAIcwCQADjAwAh_gIBAOIDACEHAgAAggQAILwCAACTBAAwvQIAAAsAEL4CAACTBAAwwAIBAPoDACHMAkAA_QMAIf4CAQD6AwAhCLwCAACUBAAwvQIAAI4CABC-AgAAlAQAMMACAQDiAwAhzAJAAOMDACH_AgEA4gMAIYADAQD0AwAhgQMAAOQDACAJAgAAggQAILwCAACVBAAwvQIAAAkAEL4CAACVBAAwwAIBAPoDACHMAkAA_QMAIf8CAQD6AwAhgAMBAP8DACGBAwAA-wMAIAi8AgAAlgQAML0CAAD2AQAQvgIAAJYEADC_AgEA4gMAIcACAQDiAwAh7AJAAOMDACHwAggAjgQAIYIDAQDiAwAhB7wCAACXBAAwvQIAAOABABC-AgAAlwQAMMACAQDiAwAhgwMIAI4EACGEAwgAjgQAIYUDIACEBAAhCAIAAIIEACC8AgAAmAQAML0CAAANABC-AgAAmAQAMMACAQD6AwAhgwMIAJkEACGEAwgAmQQAIYUDIACIBAAhCM0CCAAAAAHOAggAAAAEzwIIAAAABNACCAAAAAHRAggAAAAB0gIIAAAAAdMCCAAAAAHUAggA6QMAIQq8AgAAmgQAML0CAADIAQAQvgIAAJoEADC_AgEA4gMAIcACAQDiAwAh7AJAAOMDACGCAwEA4gMAIYYDAADkAwAghwMBAOIDACGIAyAAhAQAIQ28AgAAmwQAML0CAACyAQAQvgIAAJsEADC_AgEA4gMAIcACAQD0AwAh7AJAAOMDACH8AgAAiwQAIIkDAgDmAwAhigMBAOIDACGLAwEA9AMAIYwDAQD0AwAhjQMBAOIDACGOAwEA4gMAIQu8AgAAnAQAML0CAACaAQAQvgIAAJwEADC_AgEA4gMAIcACAQDiAwAhjwMCAOYDACGQAwEA4gMAIZEDAQDiAwAhkgMBAOIDACGTAwEA4gMAIZQDAQDiAwAhC7wCAACdBAAwvQIAAIQBABC-AgAAnQQAMMACAQDiAwAhywJAAOMDACGQAwEA9AMAIZUDAQDiAwAhlgMCAOYDACGXAwIA5gMAIZgDAACeBAAgmQNAAPMDACEEzQIBAAAABZoDAQAAAAGbAwEAAAAEnAMBAAAABAwCAACCBAAgvAIAAJ8EADC9AgAABwAQvgIAAJ8EADDAAgEA-gMAIcsCQAD9AwAhkAMBAP8DACGVAwEA-gMAIZYDAgD8AwAhlwMCAPwDACGYAwAAngQAIJkDQAD-AwAhDbwCAACgBAAwvQIAAGwAEL4CAACgBAAwvwIBAOIDACHLAkAA4wMAIZADAQD0AwAhkQMBAOIDACGSAwEA4gMAIZMDAQDiAwAhlAMBAOIDACGdAwEA4gMAIZ4DIACEBAAhnwNAAPMDACEcAQAAogQAIAMAAKMEACAEAACkBAAgBQAApQQAIAYAAKYEACAHAACnBAAgCgAAqAQAIAsAAKkEACAMAACqBAAgDQAAqwQAIA4AAKwEACAPAACtBAAgEAAArgQAIBEAAK8EACASAACwBAAgvAIAAKEEADC9AgAAAwAQvgIAAKEEADC_AgEA-gMAIcsCQAD9AwAhkAMBAP8DACGRAwEA-gMAIZIDAQD6AwAhkwMBAPoDACGUAwEA-gMAIZ0DAQD6AwAhngMgAIgEACGfA0AA_gMAIQoCAAC0BAAgvAIAAL8EADC9AgAABQAQvgIAAL8EADDAAgEA-gMAIcsCQAD9AwAhowMBAPoDACGkAwEA-gMAIaYDAAAFACCnAwAABQAgDgIAAIIEACC8AgAAnwQAML0CAAAHABC-AgAAnwQAMMACAQD6AwAhywJAAP0DACGQAwEA_wMAIZUDAQD6AwAhlgMCAPwDACGXAwIA_AMAIZgDAACeBAAgmQNAAP4DACGmAwAABwAgpwMAAAcAIAsCAACCBAAgvAIAAJUEADC9AgAACQAQvgIAAJUEADDAAgEA-gMAIcwCQAD9AwAh_wIBAPoDACGAAwEA_wMAIYEDAAD7AwAgpgMAAAkAIKcDAAAJACAJAgAAggQAILwCAACTBAAwvQIAAAsAEL4CAACTBAAwwAIBAPoDACHMAkAA_QMAIf4CAQD6AwAhpgMAAAsAIKcDAAALACAKAgAAggQAILwCAACYBAAwvQIAAA0AEL4CAACYBAAwwAIBAPoDACGDAwgAmQQAIYQDCACZBAAhhQMgAIgEACGmAwAADQAgpwMAAA0AIAkCAACCBAAgvAIAAIEEADC9AgAADwAQvgIAAIEEADDAAgEA-gMAIcwCQAD9AwAh5AIBAPoDACGmAwAADwAgpwMAAA8AIAOgAwAAEQAgoQMAABEAIKIDAAARACADoAMAABUAIKEDAAAVACCiAwAAFQAgA6ADAAAZACChAwAAGQAgogMAABkAIAOgAwAAHQAgoQMAAB0AIKIDAAAdACADoAMAACEAIKEDAAAhACCiAwAAIQAgA6ADAAAlACChAwAAJQAgogMAACUAIAOgAwAAKQAgoQMAACkAIKIDAAApACADoAMAAC0AIKEDAAAtACCiAwAALQAgA6ADAAAxACChAwAAMQAgogMAADEAIAe8AgAAsQQAML0CAABUABC-AgAAsQQAMMACAQDiAwAhywJAAOMDACGjAwEA4gMAIaQDAQDiAwAhDgIAALQEACC8AgAAsgQAML0CAAAxABC-AgAAsgQAML8CAQD6AwAhwAIBAP8DACHsAkAA_QMAIfwCAACzBAAgiQMCAPwDACGKAwEA-gMAIYsDAQD_AwAhjAMBAP8DACGNAwEA-gMAIY4DAQD6AwAhDM0CgAAAAAHQAoAAAAAB0QKAAAAAAdICgAAAAAHTAoAAAAAB1AKAAAAAAdUCAQAAAAHWAgEAAAAB1wIBAAAAAdgCgAAAAAHZAoAAAAAB2gKAAAAAAR4BAACiBAAgAwAAowQAIAQAAKQEACAFAAClBAAgBgAApgQAIAcAAKcEACAKAACoBAAgCwAAqQQAIAwAAKoEACANAACrBAAgDgAArAQAIA8AAK0EACAQAACuBAAgEQAArwQAIBIAALAEACC8AgAAoQQAML0CAAADABC-AgAAoQQAML8CAQD6AwAhywJAAP0DACGQAwEA_wMAIZEDAQD6AwAhkgMBAPoDACGTAwEA-gMAIZQDAQD6AwAhnQMBAPoDACGeAyAAiAQAIZ8DQAD-AwAhpgMAAAMAIKcDAAADACASAgAAggQAILwCAAC1BAAwvQIAAC0AEL4CAAC1BAAwvwIBAPoDACHAAgEA-gMAIcECAQD6AwAhwgIBAPoDACHDAgEA-gMAIcQCAQD6AwAhxQJAAP0DACHGAgAA-wMAIMcCAgC2BAAhyAICAPwDACHJAgIA_AMAIcoCAgD8AwAhywJAAP0DACHMAkAA_QMAIQjNAgIAAAABzgICAAAABc8CAgAAAAXQAgIAAAAB0QICAAAAAdICAgAAAAHTAgIAAAAB1AICAOsDACENAgAAggQAILwCAAC3BAAwvQIAACkAEL4CAAC3BAAwvwIBAPoDACHAAgEA-gMAIcECAQD6AwAh6QIBAPoDACHqAgEA-gMAIesCAQD6AwAh7AJAAP0DACHtAiAAiAQAIe4CAACzBAAgEAIAAIIEACC8AgAAuAQAML0CAAAlABC-AgAAuAQAML8CAQD6AwAhwAIBAPoDACHCAgEA-gMAIcQCAQD6AwAhywJAAP0DACHvAgEA-gMAIfACCACZBAAh8QJAAP0DACHyAkAA_QMAIfMCAgC2BAAh9AICAPwDACH1AgEA_wMAIQ4CAACCBAAgvAIAALkEADC9AgAAIQAQvgIAALkEADC_AgEA-gMAIcACAQD6AwAhwgIBAPoDACHLAkAA_QMAIe8CAQD6AwAh8AIIAJkEACH2AkAA_QMAIfcCQAD-AwAh-AIBAP8DACH5AgEA_wMAIQsCAACCBAAgvAIAALoEADC9AgAAHQAQvgIAALoEADC_AgEA-gMAIcACAQD6AwAh7AJAAP0DACH6AgEA-gMAIfsCAQD6AwAh_AIAAPsDACD9AiAAiAQAIQkCAACCBAAgvAIAALsEADC9AgAAGQAQvgIAALsEADC_AgEA-gMAIcACAQD6AwAh7AJAAP0DACHwAggAmQQAIYIDAQD6AwAhCwIAAIIEACC8AgAAvAQAML0CAAAVABC-AgAAvAQAML8CAQD6AwAhwAIBAPoDACHsAkAA_QMAIYIDAQD6AwAhhgMAAPsDACCHAwEA-gMAIYgDIACIBAAhAsACAQAAAAGPAwIAAAABDAIAAIIEACC8AgAAvgQAML0CAAARABC-AgAAvgQAML8CAQD6AwAhwAIBAPoDACGPAwIA_AMAIZADAQD6AwAhkQMBAPoDACGSAwEA-gMAIZMDAQD6AwAhlAMBAPoDACEIAgAAtAQAILwCAAC_BAAwvQIAAAUAEL4CAAC_BAAwwAIBAPoDACHLAkAA_QMAIaMDAQD6AwAhpAMBAPoDACEAAAAAAAABqwMBAAAAAQGrA0AAAAABBasDAgAAAAGyAwIAAAABswMCAAAAAbQDAgAAAAG1AwIAAAABBasDAgAAAAGyAwIAAAABswMCAAAAAbQDAgAAAAG1AwIAAAABBSAAALgHACAhAAC7BwAgqAMAALkHACCpAwAAugcAIK4DAABXACADIAAAuAcAIKgDAAC5BwAgrgMAAFcAIAAAAAAAAasDQAAAAAEBqwMBAAAAAQAAAAUgAACzBwAgIQAAtgcAIKgDAAC0BwAgqQMAALUHACCuAwAAVwAgAyAAALMHACCoAwAAtAcAIK4DAABXACARAQAA1QYAIAMAANYGACAEAADXBgAgBQAA2AYAIAYAANkGACAHAADaBgAgCgAA2wYAIAsAANwGACAMAADdBgAgDQAA3gYAIA4AAN8GACAPAADgBgAgEAAA4QYAIBEAAOIGACASAADjBgAgkAMAAMAEACCfAwAAwAQAIAAAAAGrAyAAAAABAAAABSAAAK4HACAhAACxBwAgqAMAAK8HACCpAwAAsAcAIK4DAABXACADIAAArgcAIKgDAACvBwAgrgMAAFcAIAAAAAAABasDCAAAAAGyAwgAAAABswMIAAAAAbQDCAAAAAG1AwgAAAABBSAAAKkHACAhAACsBwAgqAMAAKoHACCpAwAAqwcAIK4DAABXACADIAAAqQcAIKgDAACqBwAgrgMAAFcAIAAAAAAABSAAAKQHACAhAACnBwAgqAMAAKUHACCpAwAApgcAIK4DAABXACADIAAApAcAIKgDAAClBwAgrgMAAFcAIAAAAAUgAACfBwAgIQAAogcAIKgDAACgBwAgqQMAAKEHACCuAwAAVwAgAyAAAJ8HACCoAwAAoAcAIK4DAABXACAAAAAFIAAAmgcAICEAAJ0HACCoAwAAmwcAIKkDAACcBwAgrgMAAFcAIAMgAACaBwAgqAMAAJsHACCuAwAAVwAgAAAABSAAAJUHACAhAACYBwAgqAMAAJYHACCpAwAAlwcAIK4DAABXACADIAAAlQcAIKgDAACWBwAgrgMAAFcAIAAAAAAABSAAAJAHACAhAACTBwAgqAMAAJEHACCpAwAAkgcAIK4DAABXACADIAAAkAcAIKgDAACRBwAgrgMAAFcAIAAAAAAABSAAAIsHACAhAACOBwAgqAMAAIwHACCpAwAAjQcAIK4DAABXACADIAAAiwcAIKgDAACMBwAgrgMAAFcAIAAAAAUgAACGBwAgIQAAiQcAIKgDAACHBwAgqQMAAIgHACCuAwAAVwAgAyAAAIYHACCoAwAAhwcAIK4DAABXACAAAAAAAAcgAACBBwAgIQAAhAcAIKgDAACCBwAgqQMAAIMHACCsAwAAAwAgrQMAAAMAIK4DAABXACADIAAAgQcAIKgDAACCBwAgrgMAAFcAIAAAAAAABSAAAPwGACAhAAD_BgAgqAMAAP0GACCpAwAA_gYAIK4DAABXACADIAAA_AYAIKgDAAD9BgAgrgMAAFcAIAAAAAAAAqsDAQAAAASxAwEAAAAFBSAAAPcGACAhAAD6BgAgqAMAAPgGACCpAwAA-QYAIK4DAABXACABqwMBAAAABAMgAAD3BgAgqAMAAPgGACCuAwAAVwAgAAAAByAAAMEGACAhAADEBgAgqAMAAMIGACCpAwAAwwYAIKwDAAAFACCtAwAABQAgrgMAAAEAIAcgAAC8BgAgIQAAvwYAIKgDAAC9BgAgqQMAAL4GACCsAwAABwAgrQMAAAcAIK4DAABvACAHIAAAtwYAICEAALoGACCoAwAAuAYAIKkDAAC5BgAgrAMAAAkAIK0DAAAJACCuAwAA-QEAIAcgAACyBgAgIQAAtQYAIKgDAACzBgAgqQMAALQGACCsAwAACwAgrQMAAAsAIK4DAACRAgAgByAAAK0GACAhAACwBgAgqAMAAK4GACCpAwAArwYAIKwDAAANACCtAwAADQAgrgMAAMsBACAHIAAAqAYAICEAAKsGACCoAwAAqQYAIKkDAACqBgAgrAMAAA8AIK0DAAAPACCuAwAAmgMAIAsgAACcBgAwIQAAoQYAMKgDAACdBgAwqQMAAJ4GADCqAwAAnwYAIKsDAACgBgAwrAMAAKAGADCtAwAAoAYAMK4DAACgBgAwrwMAAKIGADCwAwAAowYAMAsgAACQBgAwIQAAlQYAMKgDAACRBgAwqQMAAJIGADCqAwAAkwYAIKsDAACUBgAwrAMAAJQGADCtAwAAlAYAMK4DAACUBgAwrwMAAJYGADCwAwAAlwYAMAsgAACEBgAwIQAAiQYAMKgDAACFBgAwqQMAAIYGADCqAwAAhwYAIKsDAACIBgAwrAMAAIgGADCtAwAAiAYAMK4DAACIBgAwrwMAAIoGADCwAwAAiwYAMAsgAAD4BQAwIQAA_QUAMKgDAAD5BQAwqQMAAPoFADCqAwAA-wUAIKsDAAD8BQAwrAMAAPwFADCtAwAA_AUAMK4DAAD8BQAwrwMAAP4FADCwAwAA_wUAMAsgAADsBQAwIQAA8QUAMKgDAADtBQAwqQMAAO4FADCqAwAA7wUAIKsDAADwBQAwrAMAAPAFADCtAwAA8AUAMK4DAADwBQAwrwMAAPIFADCwAwAA8wUAMAsgAADgBQAwIQAA5QUAMKgDAADhBQAwqQMAAOIFADCqAwAA4wUAIKsDAADkBQAwrAMAAOQFADCtAwAA5AUAMK4DAADkBQAwrwMAAOYFADCwAwAA5wUAMAsgAADUBQAwIQAA2QUAMKgDAADVBQAwqQMAANYFADCqAwAA1wUAIKsDAADYBQAwrAMAANgFADCtAwAA2AUAMK4DAADYBQAwrwMAANoFADCwAwAA2wUAMAsgAADIBQAwIQAAzQUAMKgDAADJBQAwqQMAAMoFADCqAwAAywUAIKsDAADMBQAwrAMAAMwFADCtAwAAzAUAMK4DAADMBQAwrwMAAM4FADCwAwAAzwUAMAsgAAC8BQAwIQAAwQUAMKgDAAC9BQAwqQMAAL4FADCqAwAAvwUAIKsDAADABQAwrAMAAMAFADCtAwAAwAUAMK4DAADABQAwrwMAAMIFADCwAwAAwwUAMAm_AgEAAAAB7AJAAAAAAfwCgAAAAAGJAwIAAAABigMBAAAAAYsDAQAAAAGMAwEAAAABjQMBAAAAAY4DAQAAAAECAAAAMwAgIAAAxwUAIAMAAAAzACAgAADHBQAgIQAAxgUAIAEZAAD2BgAwDgIAALQEACC8AgAAsgQAML0CAAAxABC-AgAAsgQAML8CAQAAAAHAAgEA_wMAIewCQAD9AwAh_AIAALMEACCJAwIAAAABigMBAPoDACGLAwEA_wMAIYwDAQD_AwAhjQMBAPoDACGOAwEA-gMAIQIAAAAzACAZAADGBQAgAgAAAMQFACAZAADFBQAgDbwCAADDBQAwvQIAAMQFABC-AgAAwwUAML8CAQD6AwAhwAIBAP8DACHsAkAA_QMAIfwCAACzBAAgiQMCAPwDACGKAwEA-gMAIYsDAQD_AwAhjAMBAP8DACGNAwEA-gMAIY4DAQD6AwAhDbwCAADDBQAwvQIAAMQFABC-AgAAwwUAML8CAQD6AwAhwAIBAP8DACHsAkAA_QMAIfwCAACzBAAgiQMCAPwDACGKAwEA-gMAIYsDAQD_AwAhjAMBAP8DACGNAwEA-gMAIY4DAQD6AwAhCb8CAQDGBAAh7AJAAMcEACH8AoAAAAABiQMCAMkEACGKAwEAxgQAIYsDAQDSBAAhjAMBANIEACGNAwEAxgQAIY4DAQDGBAAhCb8CAQDGBAAh7AJAAMcEACH8AoAAAAABiQMCAMkEACGKAwEAxgQAIYsDAQDSBAAhjAMBANIEACGNAwEAxgQAIY4DAQDGBAAhCb8CAQAAAAHsAkAAAAAB_AKAAAAAAYkDAgAAAAGKAwEAAAABiwMBAAAAAYwDAQAAAAGNAwEAAAABjgMBAAAAAQ2_AgEAAAABwQIBAAAAAcICAQAAAAHDAgEAAAABxAIBAAAAAcUCQAAAAAHGAoAAAAABxwICAAAAAcgCAgAAAAHJAgIAAAABygICAAAAAcsCQAAAAAHMAkAAAAABAgAAAC8AICAAANMFACADAAAALwAgIAAA0wUAICEAANIFACABGQAA9QYAMBICAACCBAAgvAIAALUEADC9AgAALQAQvgIAALUEADC_AgEAAAABwAIBAPoDACHBAgEA-gMAIcICAQD6AwAhwwIBAPoDACHEAgEA-gMAIcUCQAD9AwAhxgIAAPsDACDHAgIAtgQAIcgCAgD8AwAhyQICAPwDACHKAgIA_AMAIcsCQAD9AwAhzAJAAP0DACECAAAALwAgGQAA0gUAIAIAAADQBQAgGQAA0QUAIBG8AgAAzwUAML0CAADQBQAQvgIAAM8FADC_AgEA-gMAIcACAQD6AwAhwQIBAPoDACHCAgEA-gMAIcMCAQD6AwAhxAIBAPoDACHFAkAA_QMAIcYCAAD7AwAgxwICALYEACHIAgIA_AMAIckCAgD8AwAhygICAPwDACHLAkAA_QMAIcwCQAD9AwAhEbwCAADPBQAwvQIAANAFABC-AgAAzwUAML8CAQD6AwAhwAIBAPoDACHBAgEA-gMAIcICAQD6AwAhwwIBAPoDACHEAgEA-gMAIcUCQAD9AwAhxgIAAPsDACDHAgIAtgQAIcgCAgD8AwAhyQICAPwDACHKAgIA_AMAIcsCQAD9AwAhzAJAAP0DACENvwIBAMYEACHBAgEAxgQAIcICAQDGBAAhwwIBAMYEACHEAgEAxgQAIcUCQADHBAAhxgKAAAAAAccCAgDIBAAhyAICAMkEACHJAgIAyQQAIcoCAgDJBAAhywJAAMcEACHMAkAAxwQAIQ2_AgEAxgQAIcECAQDGBAAhwgIBAMYEACHDAgEAxgQAIcQCAQDGBAAhxQJAAMcEACHGAoAAAAABxwICAMgEACHIAgIAyQQAIckCAgDJBAAhygICAMkEACHLAkAAxwQAIcwCQADHBAAhDb8CAQAAAAHBAgEAAAABwgIBAAAAAcMCAQAAAAHEAgEAAAABxQJAAAAAAcYCgAAAAAHHAgIAAAAByAICAAAAAckCAgAAAAHKAgIAAAABywJAAAAAAcwCQAAAAAEIvwIBAAAAAcECAQAAAAHpAgEAAAAB6gIBAAAAAesCAQAAAAHsAkAAAAAB7QIgAAAAAe4CgAAAAAECAAAAKwAgIAAA3wUAIAMAAAArACAgAADfBQAgIQAA3gUAIAEZAAD0BgAwDQIAAIIEACC8AgAAtwQAML0CAAApABC-AgAAtwQAML8CAQAAAAHAAgEA-gMAIcECAQD6AwAh6QIBAPoDACHqAgEA-gMAIesCAQD6AwAh7AJAAP0DACHtAiAAiAQAIe4CAACzBAAgAgAAACsAIBkAAN4FACACAAAA3AUAIBkAAN0FACAMvAIAANsFADC9AgAA3AUAEL4CAADbBQAwvwIBAPoDACHAAgEA-gMAIcECAQD6AwAh6QIBAPoDACHqAgEA-gMAIesCAQD6AwAh7AJAAP0DACHtAiAAiAQAIe4CAACzBAAgDLwCAADbBQAwvQIAANwFABC-AgAA2wUAML8CAQD6AwAhwAIBAPoDACHBAgEA-gMAIekCAQD6AwAh6gIBAPoDACHrAgEA-gMAIewCQAD9AwAh7QIgAIgEACHuAgAAswQAIAi_AgEAxgQAIcECAQDGBAAh6QIBAMYEACHqAgEAxgQAIesCAQDGBAAh7AJAAMcEACHtAiAA3AQAIe4CgAAAAAEIvwIBAMYEACHBAgEAxgQAIekCAQDGBAAh6gIBAMYEACHrAgEAxgQAIewCQADHBAAh7QIgANwEACHuAoAAAAABCL8CAQAAAAHBAgEAAAAB6QIBAAAAAeoCAQAAAAHrAgEAAAAB7AJAAAAAAe0CIAAAAAHuAoAAAAABC78CAQAAAAHCAgEAAAABxAIBAAAAAcsCQAAAAAHvAgEAAAAB8AIIAAAAAfECQAAAAAHyAkAAAAAB8wICAAAAAfQCAgAAAAH1AgEAAAABAgAAACcAICAAAOsFACADAAAAJwAgIAAA6wUAICEAAOoFACABGQAA8wYAMBACAACCBAAgvAIAALgEADC9AgAAJQAQvgIAALgEADC_AgEAAAABwAIBAPoDACHCAgEA-gMAIcQCAQD6AwAhywJAAP0DACHvAgEA-gMAIfACCACZBAAh8QJAAP0DACHyAkAA_QMAIfMCAgC2BAAh9AICAPwDACH1AgEA_wMAIQIAAAAnACAZAADqBQAgAgAAAOgFACAZAADpBQAgD7wCAADnBQAwvQIAAOgFABC-AgAA5wUAML8CAQD6AwAhwAIBAPoDACHCAgEA-gMAIcQCAQD6AwAhywJAAP0DACHvAgEA-gMAIfACCACZBAAh8QJAAP0DACHyAkAA_QMAIfMCAgC2BAAh9AICAPwDACH1AgEA_wMAIQ-8AgAA5wUAML0CAADoBQAQvgIAAOcFADC_AgEA-gMAIcACAQD6AwAhwgIBAPoDACHEAgEA-gMAIcsCQAD9AwAh7wIBAPoDACHwAggAmQQAIfECQAD9AwAh8gJAAP0DACHzAgIAtgQAIfQCAgD8AwAh9QIBAP8DACELvwIBAMYEACHCAgEAxgQAIcQCAQDGBAAhywJAAMcEACHvAgEAxgQAIfACCADnBAAh8QJAAMcEACHyAkAAxwQAIfMCAgDIBAAh9AICAMkEACH1AgEA0gQAIQu_AgEAxgQAIcICAQDGBAAhxAIBAMYEACHLAkAAxwQAIe8CAQDGBAAh8AIIAOcEACHxAkAAxwQAIfICQADHBAAh8wICAMgEACH0AgIAyQQAIfUCAQDSBAAhC78CAQAAAAHCAgEAAAABxAIBAAAAAcsCQAAAAAHvAgEAAAAB8AIIAAAAAfECQAAAAAHyAkAAAAAB8wICAAAAAfQCAgAAAAH1AgEAAAABCb8CAQAAAAHCAgEAAAABywJAAAAAAe8CAQAAAAHwAggAAAAB9gJAAAAAAfcCQAAAAAH4AgEAAAAB-QIBAAAAAQIAAAAjACAgAAD3BQAgAwAAACMAICAAAPcFACAhAAD2BQAgARkAAPIGADAOAgAAggQAILwCAAC5BAAwvQIAACEAEL4CAAC5BAAwvwIBAAAAAcACAQD6AwAhwgIBAPoDACHLAkAA_QMAIe8CAQD6AwAh8AIIAJkEACH2AkAA_QMAIfcCQAD-AwAh-AIBAP8DACH5AgEA_wMAIQIAAAAjACAZAAD2BQAgAgAAAPQFACAZAAD1BQAgDbwCAADzBQAwvQIAAPQFABC-AgAA8wUAML8CAQD6AwAhwAIBAPoDACHCAgEA-gMAIcsCQAD9AwAh7wIBAPoDACHwAggAmQQAIfYCQAD9AwAh9wJAAP4DACH4AgEA_wMAIfkCAQD_AwAhDbwCAADzBQAwvQIAAPQFABC-AgAA8wUAML8CAQD6AwAhwAIBAPoDACHCAgEA-gMAIcsCQAD9AwAh7wIBAPoDACHwAggAmQQAIfYCQAD9AwAh9wJAAP4DACH4AgEA_wMAIfkCAQD_AwAhCb8CAQDGBAAhwgIBAMYEACHLAkAAxwQAIe8CAQDGBAAh8AIIAOcEACH2AkAAxwQAIfcCQADRBAAh-AIBANIEACH5AgEA0gQAIQm_AgEAxgQAIcICAQDGBAAhywJAAMcEACHvAgEAxgQAIfACCADnBAAh9gJAAMcEACH3AkAA0QQAIfgCAQDSBAAh-QIBANIEACEJvwIBAAAAAcICAQAAAAHLAkAAAAAB7wIBAAAAAfACCAAAAAH2AkAAAAAB9wJAAAAAAfgCAQAAAAH5AgEAAAABBr8CAQAAAAHsAkAAAAAB-gIBAAAAAfsCAQAAAAH8AoAAAAAB_QIgAAAAAQIAAAAfACAgAACDBgAgAwAAAB8AICAAAIMGACAhAACCBgAgARkAAPEGADALAgAAggQAILwCAAC6BAAwvQIAAB0AEL4CAAC6BAAwvwIBAAAAAcACAQD6AwAh7AJAAP0DACH6AgEA-gMAIfsCAQD6AwAh_AIAAPsDACD9AiAAiAQAIQIAAAAfACAZAACCBgAgAgAAAIAGACAZAACBBgAgCrwCAAD_BQAwvQIAAIAGABC-AgAA_wUAML8CAQD6AwAhwAIBAPoDACHsAkAA_QMAIfoCAQD6AwAh-wIBAPoDACH8AgAA-wMAIP0CIACIBAAhCrwCAAD_BQAwvQIAAIAGABC-AgAA_wUAML8CAQD6AwAhwAIBAPoDACHsAkAA_QMAIfoCAQD6AwAh-wIBAPoDACH8AgAA-wMAIP0CIACIBAAhBr8CAQDGBAAh7AJAAMcEACH6AgEAxgQAIfsCAQDGBAAh_AKAAAAAAf0CIADcBAAhBr8CAQDGBAAh7AJAAMcEACH6AgEAxgQAIfsCAQDGBAAh_AKAAAAAAf0CIADcBAAhBr8CAQAAAAHsAkAAAAAB-gIBAAAAAfsCAQAAAAH8AoAAAAAB_QIgAAAAAQS_AgEAAAAB7AJAAAAAAfACCAAAAAGCAwEAAAABAgAAABsAICAAAI8GACADAAAAGwAgIAAAjwYAICEAAI4GACABGQAA8AYAMAkCAACCBAAgvAIAALsEADC9AgAAGQAQvgIAALsEADC_AgEAAAABwAIBAPoDACHsAkAA_QMAIfACCACZBAAhggMBAPoDACECAAAAGwAgGQAAjgYAIAIAAACMBgAgGQAAjQYAIAi8AgAAiwYAML0CAACMBgAQvgIAAIsGADC_AgEA-gMAIcACAQD6AwAh7AJAAP0DACHwAggAmQQAIYIDAQD6AwAhCLwCAACLBgAwvQIAAIwGABC-AgAAiwYAML8CAQD6AwAhwAIBAPoDACHsAkAA_QMAIfACCACZBAAhggMBAPoDACEEvwIBAMYEACHsAkAAxwQAIfACCADnBAAhggMBAMYEACEEvwIBAMYEACHsAkAAxwQAIfACCADnBAAhggMBAMYEACEEvwIBAAAAAewCQAAAAAHwAggAAAABggMBAAAAAQa_AgEAAAAB7AJAAAAAAYIDAQAAAAGGA4AAAAABhwMBAAAAAYgDIAAAAAECAAAAFwAgIAAAmwYAIAMAAAAXACAgAACbBgAgIQAAmgYAIAEZAADvBgAwCwIAAIIEACC8AgAAvAQAML0CAAAVABC-AgAAvAQAML8CAQAAAAHAAgEA-gMAIewCQAD9AwAhggMBAPoDACGGAwAA-wMAIIcDAQD6AwAhiAMgAIgEACECAAAAFwAgGQAAmgYAIAIAAACYBgAgGQAAmQYAIAq8AgAAlwYAML0CAACYBgAQvgIAAJcGADC_AgEA-gMAIcACAQD6AwAh7AJAAP0DACGCAwEA-gMAIYYDAAD7AwAghwMBAPoDACGIAyAAiAQAIQq8AgAAlwYAML0CAACYBgAQvgIAAJcGADC_AgEA-gMAIcACAQD6AwAh7AJAAP0DACGCAwEA-gMAIYYDAAD7AwAghwMBAPoDACGIAyAAiAQAIQa_AgEAxgQAIewCQADHBAAhggMBAMYEACGGA4AAAAABhwMBAMYEACGIAyAA3AQAIQa_AgEAxgQAIewCQADHBAAhggMBAMYEACGGA4AAAAABhwMBAMYEACGIAyAA3AQAIQa_AgEAAAAB7AJAAAAAAYIDAQAAAAGGA4AAAAABhwMBAAAAAYgDIAAAAAEHvwIBAAAAAY8DAgAAAAGQAwEAAAABkQMBAAAAAZIDAQAAAAGTAwEAAAABlAMBAAAAAQIAAAATACAgAACnBgAgAwAAABMAICAAAKcGACAhAACmBgAgARkAAO4GADANAgAAggQAILwCAAC-BAAwvQIAABEAEL4CAAC-BAAwvwIBAAAAAcACAQD6AwAhjwMCAPwDACGQAwEA-gMAIZEDAQD6AwAhkgMBAPoDACGTAwEA-gMAIZQDAQD6AwAhpQMAAL0EACACAAAAEwAgGQAApgYAIAIAAACkBgAgGQAApQYAIAu8AgAAowYAML0CAACkBgAQvgIAAKMGADC_AgEA-gMAIcACAQD6AwAhjwMCAPwDACGQAwEA-gMAIZEDAQD6AwAhkgMBAPoDACGTAwEA-gMAIZQDAQD6AwAhC7wCAACjBgAwvQIAAKQGABC-AgAAowYAML8CAQD6AwAhwAIBAPoDACGPAwIA_AMAIZADAQD6AwAhkQMBAPoDACGSAwEA-gMAIZMDAQD6AwAhlAMBAPoDACEHvwIBAMYEACGPAwIAyQQAIZADAQDGBAAhkQMBAMYEACGSAwEAxgQAIZMDAQDGBAAhlAMBAMYEACEHvwIBAMYEACGPAwIAyQQAIZADAQDGBAAhkQMBAMYEACGSAwEAxgQAIZMDAQDGBAAhlAMBAMYEACEHvwIBAAAAAY8DAgAAAAGQAwEAAAABkQMBAAAAAZIDAQAAAAGTAwEAAAABlAMBAAAAAQLMAkAAAAAB5AIBAAAAAQIAAACaAwAgIAAAqAYAIAMAAAAPACAgAACoBgAgIQAArAYAIAQAAAAPACAZAACsBgAgzAJAAMcEACHkAgEAxgQAIQLMAkAAxwQAIeQCAQDGBAAhA4MDCAAAAAGEAwgAAAABhQMgAAAAAQIAAADLAQAgIAAArQYAIAMAAAANACAgAACtBgAgIQAAsQYAIAUAAAANACAZAACxBgAggwMIAOcEACGEAwgA5wQAIYUDIADcBAAhA4MDCADnBAAhhAMIAOcEACGFAyAA3AQAIQLMAkAAAAAB_gIBAAAAAQIAAACRAgAgIAAAsgYAIAMAAAALACAgAACyBgAgIQAAtgYAIAQAAAALACAZAAC2BgAgzAJAAMcEACH-AgEAxgQAIQLMAkAAxwQAIf4CAQDGBAAhBMwCQAAAAAH_AgEAAAABgAMBAAAAAYEDgAAAAAECAAAA-QEAICAAALcGACADAAAACQAgIAAAtwYAICEAALsGACAGAAAACQAgGQAAuwYAIMwCQADHBAAh_wIBAMYEACGAAwEA0gQAIYEDgAAAAAEEzAJAAMcEACH_AgEAxgQAIYADAQDSBAAhgQOAAAAAAQfLAkAAAAABkAMBAAAAAZUDAQAAAAGWAwIAAAABlwMCAAAAAZgDAACoBQAgmQNAAAAAAQIAAABvACAgAAC8BgAgAwAAAAcAICAAALwGACAhAADABgAgCQAAAAcAIBkAAMAGACDLAkAAxwQAIZADAQDSBAAhlQMBAMYEACGWAwIAyQQAIZcDAgDJBAAhmAMAAKYFACCZA0AA0QQAIQfLAkAAxwQAIZADAQDSBAAhlQMBAMYEACGWAwIAyQQAIZcDAgDJBAAhmAMAAKYFACCZA0AA0QQAIQPLAkAAAAABowMBAAAAAaQDAQAAAAECAAAAAQAgIAAAwQYAIAMAAAAFACAgAADBBgAgIQAAxQYAIAUAAAAFACAZAADFBgAgywJAAMcEACGjAwEAxgQAIaQDAQDGBAAhA8sCQADHBAAhowMBAMYEACGkAwEAxgQAIQMgAADBBgAgqAMAAMIGACCuAwAAAQAgAyAAALwGACCoAwAAvQYAIK4DAABvACADIAAAtwYAIKgDAAC4BgAgrgMAAPkBACADIAAAsgYAIKgDAACzBgAgrgMAAJECACADIAAArQYAIKgDAACuBgAgrgMAAMsBACADIAAAqAYAIKgDAACpBgAgrgMAAJoDACAEIAAAnAYAMKgDAACdBgAwqgMAAJ8GACCuAwAAoAYAMAQgAACQBgAwqAMAAJEGADCqAwAAkwYAIK4DAACUBgAwBCAAAIQGADCoAwAAhQYAMKoDAACHBgAgrgMAAIgGADAEIAAA-AUAMKgDAAD5BQAwqgMAAPsFACCuAwAA_AUAMAQgAADsBQAwqAMAAO0FADCqAwAA7wUAIK4DAADwBQAwBCAAAOAFADCoAwAA4QUAMKoDAADjBQAgrgMAAOQFADAEIAAA1AUAMKgDAADVBQAwqgMAANcFACCuAwAA2AUAMAQgAADIBQAwqAMAAMkFADCqAwAAywUAIK4DAADMBQAwBCAAALwFADCoAwAAvQUAMKoDAAC_BQAgrgMAAMAFADABAgAA2AQAIAMCAADYBAAgkAMAAMAEACCZAwAAwAQAIAICAADYBAAggAMAAMAEACABAgAA2AQAIAECAADYBAAgAQIAANgEACAAAAAAAAAAAAAAAAAHIAAA6QYAICEAAOwGACCoAwAA6gYAIKkDAADrBgAgrAMAAAMAIK0DAAADACCuAwAAVwAgAyAAAOkGACCoAwAA6gYAIK4DAABXACAYAwAAxwYAIAQAAMgGACAFAADJBgAgBgAAygYAIAcAAMsGACAKAADMBgAgCwAAzQYAIAwAAM4GACANAADPBgAgDgAA0AYAIA8AANEGACAQAADSBgAgEQAA0wYAIBIAANQGACC_AgEAAAABywJAAAAAAZADAQAAAAGRAwEAAAABkgMBAAAAAZMDAQAAAAGUAwEAAAABnQMBAAAAAZ4DIAAAAAGfA0AAAAABAgAAAFcAICAAAOkGACADAAAAAwAgIAAA6QYAICEAAO0GACAaAAAAAwAgAwAArgUAIAQAAK8FACAFAACwBQAgBgAAsQUAIAcAALIFACAKAACzBQAgCwAAtAUAIAwAALUFACANAAC2BQAgDgAAtwUAIA8AALgFACAQAAC5BQAgEQAAugUAIBIAALsFACAZAADtBgAgvwIBAMYEACHLAkAAxwQAIZADAQDSBAAhkQMBAMYEACGSAwEAxgQAIZMDAQDGBAAhlAMBAMYEACGdAwEAxgQAIZ4DIADcBAAhnwNAANEEACEYAwAArgUAIAQAAK8FACAFAACwBQAgBgAAsQUAIAcAALIFACAKAACzBQAgCwAAtAUAIAwAALUFACANAAC2BQAgDgAAtwUAIA8AALgFACAQAAC5BQAgEQAAugUAIBIAALsFACC_AgEAxgQAIcsCQADHBAAhkAMBANIEACGRAwEAxgQAIZIDAQDGBAAhkwMBAMYEACGUAwEAxgQAIZ0DAQDGBAAhngMgANwEACGfA0AA0QQAIQe_AgEAAAABjwMCAAAAAZADAQAAAAGRAwEAAAABkgMBAAAAAZMDAQAAAAGUAwEAAAABBr8CAQAAAAHsAkAAAAABggMBAAAAAYYDgAAAAAGHAwEAAAABiAMgAAAAAQS_AgEAAAAB7AJAAAAAAfACCAAAAAGCAwEAAAABBr8CAQAAAAHsAkAAAAAB-gIBAAAAAfsCAQAAAAH8AoAAAAAB_QIgAAAAAQm_AgEAAAABwgIBAAAAAcsCQAAAAAHvAgEAAAAB8AIIAAAAAfYCQAAAAAH3AkAAAAAB-AIBAAAAAfkCAQAAAAELvwIBAAAAAcICAQAAAAHEAgEAAAABywJAAAAAAe8CAQAAAAHwAggAAAAB8QJAAAAAAfICQAAAAAHzAgIAAAAB9AICAAAAAfUCAQAAAAEIvwIBAAAAAcECAQAAAAHpAgEAAAAB6gIBAAAAAesCAQAAAAHsAkAAAAAB7QIgAAAAAe4CgAAAAAENvwIBAAAAAcECAQAAAAHCAgEAAAABwwIBAAAAAcQCAQAAAAHFAkAAAAABxgKAAAAAAccCAgAAAAHIAgIAAAAByQICAAAAAcoCAgAAAAHLAkAAAAABzAJAAAAAAQm_AgEAAAAB7AJAAAAAAfwCgAAAAAGJAwIAAAABigMBAAAAAYsDAQAAAAGMAwEAAAABjQMBAAAAAY4DAQAAAAEYAQAAxgYAIAQAAMgGACAFAADJBgAgBgAAygYAIAcAAMsGACAKAADMBgAgCwAAzQYAIAwAAM4GACANAADPBgAgDgAA0AYAIA8AANEGACAQAADSBgAgEQAA0wYAIBIAANQGACC_AgEAAAABywJAAAAAAZADAQAAAAGRAwEAAAABkgMBAAAAAZMDAQAAAAGUAwEAAAABnQMBAAAAAZ4DIAAAAAGfA0AAAAABAgAAAFcAICAAAPcGACADAAAAAwAgIAAA9wYAICEAAPsGACAaAAAAAwAgAQAArQUAIAQAAK8FACAFAACwBQAgBgAAsQUAIAcAALIFACAKAACzBQAgCwAAtAUAIAwAALUFACANAAC2BQAgDgAAtwUAIA8AALgFACAQAAC5BQAgEQAAugUAIBIAALsFACAZAAD7BgAgvwIBAMYEACHLAkAAxwQAIZADAQDSBAAhkQMBAMYEACGSAwEAxgQAIZMDAQDGBAAhlAMBAMYEACGdAwEAxgQAIZ4DIADcBAAhnwNAANEEACEYAQAArQUAIAQAAK8FACAFAACwBQAgBgAAsQUAIAcAALIFACAKAACzBQAgCwAAtAUAIAwAALUFACANAAC2BQAgDgAAtwUAIA8AALgFACAQAAC5BQAgEQAAugUAIBIAALsFACC_AgEAxgQAIcsCQADHBAAhkAMBANIEACGRAwEAxgQAIZIDAQDGBAAhkwMBAMYEACGUAwEAxgQAIZ0DAQDGBAAhngMgANwEACGfA0AA0QQAIRgBAADGBgAgAwAAxwYAIAQAAMgGACAFAADJBgAgBgAAygYAIAcAAMsGACALAADNBgAgDAAAzgYAIA0AAM8GACAOAADQBgAgDwAA0QYAIBAAANIGACARAADTBgAgEgAA1AYAIL8CAQAAAAHLAkAAAAABkAMBAAAAAZEDAQAAAAGSAwEAAAABkwMBAAAAAZQDAQAAAAGdAwEAAAABngMgAAAAAZ8DQAAAAAECAAAAVwAgIAAA_AYAIAMAAAADACAgAAD8BgAgIQAAgAcAIBoAAAADACABAACtBQAgAwAArgUAIAQAAK8FACAFAACwBQAgBgAAsQUAIAcAALIFACALAAC0BQAgDAAAtQUAIA0AALYFACAOAAC3BQAgDwAAuAUAIBAAALkFACARAAC6BQAgEgAAuwUAIBkAAIAHACC_AgEAxgQAIcsCQADHBAAhkAMBANIEACGRAwEAxgQAIZIDAQDGBAAhkwMBAMYEACGUAwEAxgQAIZ0DAQDGBAAhngMgANwEACGfA0AA0QQAIRgBAACtBQAgAwAArgUAIAQAAK8FACAFAACwBQAgBgAAsQUAIAcAALIFACALAAC0BQAgDAAAtQUAIA0AALYFACAOAAC3BQAgDwAAuAUAIBAAALkFACARAAC6BQAgEgAAuwUAIL8CAQDGBAAhywJAAMcEACGQAwEA0gQAIZEDAQDGBAAhkgMBAMYEACGTAwEAxgQAIZQDAQDGBAAhnQMBAMYEACGeAyAA3AQAIZ8DQADRBAAhGAEAAMYGACADAADHBgAgBAAAyAYAIAUAAMkGACAGAADKBgAgBwAAywYAIAoAAMwGACALAADNBgAgDAAAzgYAIA0AAM8GACAOAADQBgAgDwAA0QYAIBAAANIGACARAADTBgAgvwIBAAAAAcsCQAAAAAGQAwEAAAABkQMBAAAAAZIDAQAAAAGTAwEAAAABlAMBAAAAAZ0DAQAAAAGeAyAAAAABnwNAAAAAAQIAAABXACAgAACBBwAgAwAAAAMAICAAAIEHACAhAACFBwAgGgAAAAMAIAEAAK0FACADAACuBQAgBAAArwUAIAUAALAFACAGAACxBQAgBwAAsgUAIAoAALMFACALAAC0BQAgDAAAtQUAIA0AALYFACAOAAC3BQAgDwAAuAUAIBAAALkFACARAAC6BQAgGQAAhQcAIL8CAQDGBAAhywJAAMcEACGQAwEA0gQAIZEDAQDGBAAhkgMBAMYEACGTAwEAxgQAIZQDAQDGBAAhnQMBAMYEACGeAyAA3AQAIZ8DQADRBAAhGAEAAK0FACADAACuBQAgBAAArwUAIAUAALAFACAGAACxBQAgBwAAsgUAIAoAALMFACALAAC0BQAgDAAAtQUAIA0AALYFACAOAAC3BQAgDwAAuAUAIBAAALkFACARAAC6BQAgvwIBAMYEACHLAkAAxwQAIZADAQDSBAAhkQMBAMYEACGSAwEAxgQAIZMDAQDGBAAhlAMBAMYEACGdAwEAxgQAIZ4DIADcBAAhnwNAANEEACEYAQAAxgYAIAMAAMcGACAEAADIBgAgBQAAyQYAIAYAAMoGACAHAADLBgAgCgAAzAYAIAwAAM4GACANAADPBgAgDgAA0AYAIA8AANEGACAQAADSBgAgEQAA0wYAIBIAANQGACC_AgEAAAABywJAAAAAAZADAQAAAAGRAwEAAAABkgMBAAAAAZMDAQAAAAGUAwEAAAABnQMBAAAAAZ4DIAAAAAGfA0AAAAABAgAAAFcAICAAAIYHACADAAAAAwAgIAAAhgcAICEAAIoHACAaAAAAAwAgAQAArQUAIAMAAK4FACAEAACvBQAgBQAAsAUAIAYAALEFACAHAACyBQAgCgAAswUAIAwAALUFACANAAC2BQAgDgAAtwUAIA8AALgFACAQAAC5BQAgEQAAugUAIBIAALsFACAZAACKBwAgvwIBAMYEACHLAkAAxwQAIZADAQDSBAAhkQMBAMYEACGSAwEAxgQAIZMDAQDGBAAhlAMBAMYEACGdAwEAxgQAIZ4DIADcBAAhnwNAANEEACEYAQAArQUAIAMAAK4FACAEAACvBQAgBQAAsAUAIAYAALEFACAHAACyBQAgCgAAswUAIAwAALUFACANAAC2BQAgDgAAtwUAIA8AALgFACAQAAC5BQAgEQAAugUAIBIAALsFACC_AgEAxgQAIcsCQADHBAAhkAMBANIEACGRAwEAxgQAIZIDAQDGBAAhkwMBAMYEACGUAwEAxgQAIZ0DAQDGBAAhngMgANwEACGfA0AA0QQAIRgBAADGBgAgAwAAxwYAIAQAAMgGACAFAADJBgAgBwAAywYAIAoAAMwGACALAADNBgAgDAAAzgYAIA0AAM8GACAOAADQBgAgDwAA0QYAIBAAANIGACARAADTBgAgEgAA1AYAIL8CAQAAAAHLAkAAAAABkAMBAAAAAZEDAQAAAAGSAwEAAAABkwMBAAAAAZQDAQAAAAGdAwEAAAABngMgAAAAAZ8DQAAAAAECAAAAVwAgIAAAiwcAIAMAAAADACAgAACLBwAgIQAAjwcAIBoAAAADACABAACtBQAgAwAArgUAIAQAAK8FACAFAACwBQAgBwAAsgUAIAoAALMFACALAAC0BQAgDAAAtQUAIA0AALYFACAOAAC3BQAgDwAAuAUAIBAAALkFACARAAC6BQAgEgAAuwUAIBkAAI8HACC_AgEAxgQAIcsCQADHBAAhkAMBANIEACGRAwEAxgQAIZIDAQDGBAAhkwMBAMYEACGUAwEAxgQAIZ0DAQDGBAAhngMgANwEACGfA0AA0QQAIRgBAACtBQAgAwAArgUAIAQAAK8FACAFAACwBQAgBwAAsgUAIAoAALMFACALAAC0BQAgDAAAtQUAIA0AALYFACAOAAC3BQAgDwAAuAUAIBAAALkFACARAAC6BQAgEgAAuwUAIL8CAQDGBAAhywJAAMcEACGQAwEA0gQAIZEDAQDGBAAhkgMBAMYEACGTAwEAxgQAIZQDAQDGBAAhnQMBAMYEACGeAyAA3AQAIZ8DQADRBAAhGAEAAMYGACADAADHBgAgBAAAyAYAIAUAAMkGACAGAADKBgAgBwAAywYAIAoAAMwGACALAADNBgAgDQAAzwYAIA4AANAGACAPAADRBgAgEAAA0gYAIBEAANMGACASAADUBgAgvwIBAAAAAcsCQAAAAAGQAwEAAAABkQMBAAAAAZIDAQAAAAGTAwEAAAABlAMBAAAAAZ0DAQAAAAGeAyAAAAABnwNAAAAAAQIAAABXACAgAACQBwAgAwAAAAMAICAAAJAHACAhAACUBwAgGgAAAAMAIAEAAK0FACADAACuBQAgBAAArwUAIAUAALAFACAGAACxBQAgBwAAsgUAIAoAALMFACALAAC0BQAgDQAAtgUAIA4AALcFACAPAAC4BQAgEAAAuQUAIBEAALoFACASAAC7BQAgGQAAlAcAIL8CAQDGBAAhywJAAMcEACGQAwEA0gQAIZEDAQDGBAAhkgMBAMYEACGTAwEAxgQAIZQDAQDGBAAhnQMBAMYEACGeAyAA3AQAIZ8DQADRBAAhGAEAAK0FACADAACuBQAgBAAArwUAIAUAALAFACAGAACxBQAgBwAAsgUAIAoAALMFACALAAC0BQAgDQAAtgUAIA4AALcFACAPAAC4BQAgEAAAuQUAIBEAALoFACASAAC7BQAgvwIBAMYEACHLAkAAxwQAIZADAQDSBAAhkQMBAMYEACGSAwEAxgQAIZMDAQDGBAAhlAMBAMYEACGdAwEAxgQAIZ4DIADcBAAhnwNAANEEACEYAQAAxgYAIAMAAMcGACAFAADJBgAgBgAAygYAIAcAAMsGACAKAADMBgAgCwAAzQYAIAwAAM4GACANAADPBgAgDgAA0AYAIA8AANEGACAQAADSBgAgEQAA0wYAIBIAANQGACC_AgEAAAABywJAAAAAAZADAQAAAAGRAwEAAAABkgMBAAAAAZMDAQAAAAGUAwEAAAABnQMBAAAAAZ4DIAAAAAGfA0AAAAABAgAAAFcAICAAAJUHACADAAAAAwAgIAAAlQcAICEAAJkHACAaAAAAAwAgAQAArQUAIAMAAK4FACAFAACwBQAgBgAAsQUAIAcAALIFACAKAACzBQAgCwAAtAUAIAwAALUFACANAAC2BQAgDgAAtwUAIA8AALgFACAQAAC5BQAgEQAAugUAIBIAALsFACAZAACZBwAgvwIBAMYEACHLAkAAxwQAIZADAQDSBAAhkQMBAMYEACGSAwEAxgQAIZMDAQDGBAAhlAMBAMYEACGdAwEAxgQAIZ4DIADcBAAhnwNAANEEACEYAQAArQUAIAMAAK4FACAFAACwBQAgBgAAsQUAIAcAALIFACAKAACzBQAgCwAAtAUAIAwAALUFACANAAC2BQAgDgAAtwUAIA8AALgFACAQAAC5BQAgEQAAugUAIBIAALsFACC_AgEAxgQAIcsCQADHBAAhkAMBANIEACGRAwEAxgQAIZIDAQDGBAAhkwMBAMYEACGUAwEAxgQAIZ0DAQDGBAAhngMgANwEACGfA0AA0QQAIRgBAADGBgAgAwAAxwYAIAQAAMgGACAGAADKBgAgBwAAywYAIAoAAMwGACALAADNBgAgDAAAzgYAIA0AAM8GACAOAADQBgAgDwAA0QYAIBAAANIGACARAADTBgAgEgAA1AYAIL8CAQAAAAHLAkAAAAABkAMBAAAAAZEDAQAAAAGSAwEAAAABkwMBAAAAAZQDAQAAAAGdAwEAAAABngMgAAAAAZ8DQAAAAAECAAAAVwAgIAAAmgcAIAMAAAADACAgAACaBwAgIQAAngcAIBoAAAADACABAACtBQAgAwAArgUAIAQAAK8FACAGAACxBQAgBwAAsgUAIAoAALMFACALAAC0BQAgDAAAtQUAIA0AALYFACAOAAC3BQAgDwAAuAUAIBAAALkFACARAAC6BQAgEgAAuwUAIBkAAJ4HACC_AgEAxgQAIcsCQADHBAAhkAMBANIEACGRAwEAxgQAIZIDAQDGBAAhkwMBAMYEACGUAwEAxgQAIZ0DAQDGBAAhngMgANwEACGfA0AA0QQAIRgBAACtBQAgAwAArgUAIAQAAK8FACAGAACxBQAgBwAAsgUAIAoAALMFACALAAC0BQAgDAAAtQUAIA0AALYFACAOAAC3BQAgDwAAuAUAIBAAALkFACARAAC6BQAgEgAAuwUAIL8CAQDGBAAhywJAAMcEACGQAwEA0gQAIZEDAQDGBAAhkgMBAMYEACGTAwEAxgQAIZQDAQDGBAAhnQMBAMYEACGeAyAA3AQAIZ8DQADRBAAhGAEAAMYGACADAADHBgAgBAAAyAYAIAUAAMkGACAGAADKBgAgBwAAywYAIAoAAMwGACALAADNBgAgDAAAzgYAIA4AANAGACAPAADRBgAgEAAA0gYAIBEAANMGACASAADUBgAgvwIBAAAAAcsCQAAAAAGQAwEAAAABkQMBAAAAAZIDAQAAAAGTAwEAAAABlAMBAAAAAZ0DAQAAAAGeAyAAAAABnwNAAAAAAQIAAABXACAgAACfBwAgAwAAAAMAICAAAJ8HACAhAACjBwAgGgAAAAMAIAEAAK0FACADAACuBQAgBAAArwUAIAUAALAFACAGAACxBQAgBwAAsgUAIAoAALMFACALAAC0BQAgDAAAtQUAIA4AALcFACAPAAC4BQAgEAAAuQUAIBEAALoFACASAAC7BQAgGQAAowcAIL8CAQDGBAAhywJAAMcEACGQAwEA0gQAIZEDAQDGBAAhkgMBAMYEACGTAwEAxgQAIZQDAQDGBAAhnQMBAMYEACGeAyAA3AQAIZ8DQADRBAAhGAEAAK0FACADAACuBQAgBAAArwUAIAUAALAFACAGAACxBQAgBwAAsgUAIAoAALMFACALAAC0BQAgDAAAtQUAIA4AALcFACAPAAC4BQAgEAAAuQUAIBEAALoFACASAAC7BQAgvwIBAMYEACHLAkAAxwQAIZADAQDSBAAhkQMBAMYEACGSAwEAxgQAIZMDAQDGBAAhlAMBAMYEACGdAwEAxgQAIZ4DIADcBAAhnwNAANEEACEYAQAAxgYAIAMAAMcGACAEAADIBgAgBQAAyQYAIAYAAMoGACAHAADLBgAgCgAAzAYAIAsAAM0GACAMAADOBgAgDQAAzwYAIA8AANEGACAQAADSBgAgEQAA0wYAIBIAANQGACC_AgEAAAABywJAAAAAAZADAQAAAAGRAwEAAAABkgMBAAAAAZMDAQAAAAGUAwEAAAABnQMBAAAAAZ4DIAAAAAGfA0AAAAABAgAAAFcAICAAAKQHACADAAAAAwAgIAAApAcAICEAAKgHACAaAAAAAwAgAQAArQUAIAMAAK4FACAEAACvBQAgBQAAsAUAIAYAALEFACAHAACyBQAgCgAAswUAIAsAALQFACAMAAC1BQAgDQAAtgUAIA8AALgFACAQAAC5BQAgEQAAugUAIBIAALsFACAZAACoBwAgvwIBAMYEACHLAkAAxwQAIZADAQDSBAAhkQMBAMYEACGSAwEAxgQAIZMDAQDGBAAhlAMBAMYEACGdAwEAxgQAIZ4DIADcBAAhnwNAANEEACEYAQAArQUAIAMAAK4FACAEAACvBQAgBQAAsAUAIAYAALEFACAHAACyBQAgCgAAswUAIAsAALQFACAMAAC1BQAgDQAAtgUAIA8AALgFACAQAAC5BQAgEQAAugUAIBIAALsFACC_AgEAxgQAIcsCQADHBAAhkAMBANIEACGRAwEAxgQAIZIDAQDGBAAhkwMBAMYEACGUAwEAxgQAIZ0DAQDGBAAhngMgANwEACGfA0AA0QQAIRgBAADGBgAgAwAAxwYAIAQAAMgGACAFAADJBgAgBgAAygYAIAcAAMsGACAKAADMBgAgCwAAzQYAIAwAAM4GACANAADPBgAgDgAA0AYAIBAAANIGACARAADTBgAgEgAA1AYAIL8CAQAAAAHLAkAAAAABkAMBAAAAAZEDAQAAAAGSAwEAAAABkwMBAAAAAZQDAQAAAAGdAwEAAAABngMgAAAAAZ8DQAAAAAECAAAAVwAgIAAAqQcAIAMAAAADACAgAACpBwAgIQAArQcAIBoAAAADACABAACtBQAgAwAArgUAIAQAAK8FACAFAACwBQAgBgAAsQUAIAcAALIFACAKAACzBQAgCwAAtAUAIAwAALUFACANAAC2BQAgDgAAtwUAIBAAALkFACARAAC6BQAgEgAAuwUAIBkAAK0HACC_AgEAxgQAIcsCQADHBAAhkAMBANIEACGRAwEAxgQAIZIDAQDGBAAhkwMBAMYEACGUAwEAxgQAIZ0DAQDGBAAhngMgANwEACGfA0AA0QQAIRgBAACtBQAgAwAArgUAIAQAAK8FACAFAACwBQAgBgAAsQUAIAcAALIFACAKAACzBQAgCwAAtAUAIAwAALUFACANAAC2BQAgDgAAtwUAIBAAALkFACARAAC6BQAgEgAAuwUAIL8CAQDGBAAhywJAAMcEACGQAwEA0gQAIZEDAQDGBAAhkgMBAMYEACGTAwEAxgQAIZQDAQDGBAAhnQMBAMYEACGeAyAA3AQAIZ8DQADRBAAhGAEAAMYGACADAADHBgAgBAAAyAYAIAUAAMkGACAGAADKBgAgBwAAywYAIAoAAMwGACALAADNBgAgDAAAzgYAIA0AAM8GACAOAADQBgAgDwAA0QYAIBEAANMGACASAADUBgAgvwIBAAAAAcsCQAAAAAGQAwEAAAABkQMBAAAAAZIDAQAAAAGTAwEAAAABlAMBAAAAAZ0DAQAAAAGeAyAAAAABnwNAAAAAAQIAAABXACAgAACuBwAgAwAAAAMAICAAAK4HACAhAACyBwAgGgAAAAMAIAEAAK0FACADAACuBQAgBAAArwUAIAUAALAFACAGAACxBQAgBwAAsgUAIAoAALMFACALAAC0BQAgDAAAtQUAIA0AALYFACAOAAC3BQAgDwAAuAUAIBEAALoFACASAAC7BQAgGQAAsgcAIL8CAQDGBAAhywJAAMcEACGQAwEA0gQAIZEDAQDGBAAhkgMBAMYEACGTAwEAxgQAIZQDAQDGBAAhnQMBAMYEACGeAyAA3AQAIZ8DQADRBAAhGAEAAK0FACADAACuBQAgBAAArwUAIAUAALAFACAGAACxBQAgBwAAsgUAIAoAALMFACALAAC0BQAgDAAAtQUAIA0AALYFACAOAAC3BQAgDwAAuAUAIBEAALoFACASAAC7BQAgvwIBAMYEACHLAkAAxwQAIZADAQDSBAAhkQMBAMYEACGSAwEAxgQAIZMDAQDGBAAhlAMBAMYEACGdAwEAxgQAIZ4DIADcBAAhnwNAANEEACEYAQAAxgYAIAMAAMcGACAEAADIBgAgBQAAyQYAIAYAAMoGACAKAADMBgAgCwAAzQYAIAwAAM4GACANAADPBgAgDgAA0AYAIA8AANEGACAQAADSBgAgEQAA0wYAIBIAANQGACC_AgEAAAABywJAAAAAAZADAQAAAAGRAwEAAAABkgMBAAAAAZMDAQAAAAGUAwEAAAABnQMBAAAAAZ4DIAAAAAGfA0AAAAABAgAAAFcAICAAALMHACADAAAAAwAgIAAAswcAICEAALcHACAaAAAAAwAgAQAArQUAIAMAAK4FACAEAACvBQAgBQAAsAUAIAYAALEFACAKAACzBQAgCwAAtAUAIAwAALUFACANAAC2BQAgDgAAtwUAIA8AALgFACAQAAC5BQAgEQAAugUAIBIAALsFACAZAAC3BwAgvwIBAMYEACHLAkAAxwQAIZADAQDSBAAhkQMBAMYEACGSAwEAxgQAIZMDAQDGBAAhlAMBAMYEACGdAwEAxgQAIZ4DIADcBAAhnwNAANEEACEYAQAArQUAIAMAAK4FACAEAACvBQAgBQAAsAUAIAYAALEFACAKAACzBQAgCwAAtAUAIAwAALUFACANAAC2BQAgDgAAtwUAIA8AALgFACAQAAC5BQAgEQAAugUAIBIAALsFACC_AgEAxgQAIcsCQADHBAAhkAMBANIEACGRAwEAxgQAIZIDAQDGBAAhkwMBAMYEACGUAwEAxgQAIZ0DAQDGBAAhngMgANwEACGfA0AA0QQAIRgBAADGBgAgAwAAxwYAIAQAAMgGACAFAADJBgAgBgAAygYAIAcAAMsGACAKAADMBgAgCwAAzQYAIAwAAM4GACANAADPBgAgDgAA0AYAIA8AANEGACAQAADSBgAgEgAA1AYAIL8CAQAAAAHLAkAAAAABkAMBAAAAAZEDAQAAAAGSAwEAAAABkwMBAAAAAZQDAQAAAAGdAwEAAAABngMgAAAAAZ8DQAAAAAECAAAAVwAgIAAAuAcAIAMAAAADACAgAAC4BwAgIQAAvAcAIBoAAAADACABAACtBQAgAwAArgUAIAQAAK8FACAFAACwBQAgBgAAsQUAIAcAALIFACAKAACzBQAgCwAAtAUAIAwAALUFACANAAC2BQAgDgAAtwUAIA8AALgFACAQAAC5BQAgEgAAuwUAIBkAALwHACC_AgEAxgQAIcsCQADHBAAhkAMBANIEACGRAwEAxgQAIZIDAQDGBAAhkwMBAMYEACGUAwEAxgQAIZ0DAQDGBAAhngMgANwEACGfA0AA0QQAIRgBAACtBQAgAwAArgUAIAQAAK8FACAFAACwBQAgBgAAsQUAIAcAALIFACAKAACzBQAgCwAAtAUAIAwAALUFACANAAC2BQAgDgAAtwUAIA8AALgFACAQAAC5BQAgEgAAuwUAIL8CAQDGBAAhywJAAMcEACGQAwEA0gQAIZEDAQDGBAAhkgMBAMYEACGTAwEAxgQAIZQDAQDGBAAhnQMBAMYEACGeAyAA3AQAIZ8DQADRBAAhAQIEAhABBgEDCAMECgQFDAUGDgYHEAcKFAgLGAkMHAoNIAsOJAwPKA0QLA4RMA8SNBATABEBAgACAQIAAgECAAIBAgACAQIAAgECAAIBAgACAQIAAgECAAIBAgACAQIAAgECAAIBAgACAQI1AgkKNgALNwAMOAANOQAOOgAPOwAQPAARPQASPgAAAQJJAgECTwIDEwAWJgAXJwAYAAAAAxMAFiYAFycAGAAAAxMAHSYAHicAHwAAAAMTAB0mAB4nAB8BAgACAQIAAgUTACQmACcnAChIACVJACYAAAAAAAUTACQmACcnAChIACVJACYBAgACAQIAAgUTAC0mADAnADFIAC5JAC8AAAAAAAUTAC0mADAnADFIAC5JAC8BAqcBAgECrQECBRMANiYAOScAOkgAN0kAOAAAAAAABRMANiYAOScAOkgAN0kAOAECAAIBAgACAxMAPyYAQCcAQQAAAAMTAD8mAEAnAEEBAgACAQIAAgUTAEYmAEknAEpIAEdJAEgAAAAAAAUTAEYmAEknAEpIAEdJAEgBAgACAQIAAgUTAE8mAFInAFNIAFBJAFEAAAAAAAUTAE8mAFInAFNIAFBJAFEBAgACAQIAAgMTAFgmAFknAFoAAAADEwBYJgBZJwBaAQIAAgECAAIDEwBfJgBgJwBhAAAAAxMAXyYAYCcAYQECAAIBAgACAxMAZiYAZycAaAAAAAMTAGYmAGcnAGgBAgACAQIAAgUTAG0mAHAnAHFIAG5JAG8AAAAAAAUTAG0mAHAnAHFIAG5JAG8BAgACAQIAAgUTAHYmAHknAHpIAHdJAHgAAAAAAAUTAHYmAHknAHpIAHdJAHgBAgACAQIAAgMTAH8mAIABJwCBAQAAAAMTAH8mAIABJwCBAQAAAAMTAIcBJgCIAScAiQEAAAADEwCHASYAiAEnAIkBAQIAAgECAAIDEwCOASYAjwEnAJABAAAAAxMAjgEmAI8BJwCQAQAAAAUTAJYBJgCZAScAmgFIAJcBSQCYAQAAAAAABRMAlgEmAJkBJwCaAUgAlwFJAJgBAQIAAgECAAIFEwCfASYAogEnAKMBSACgAUkAoQEAAAAAAAUTAJ8BJgCiAScAowFIAKABSQChARQCARU_ARZBARdCARhDARpFARtHEhxIEx1LAR5NEh9OFCJQASNRASRSEihVFSlWGSpYAitZAixbAi1cAi5dAi9fAjBhEjFiGjJkAjNmEjRnGzVoAjZpAjdqEjhtHDluIDpwAztxAzxzAz10Az51Az93A0B5EkF6IUJ8A0N-EkR_IkWAAQNGgQEDR4IBEkqFASNLhgEpTIcBCE2IAQhOiQEIT4oBCFCLAQhRjQEIUo8BElOQASpUkgEIVZQBElaVAStXlgEIWJcBCFmYARJamwEsW5wBMlydARBdngEQXp8BEF-gARBgoQEQYaMBEGKlARJjpgEzZKkBEGWrARJmrAE0Z64BEGivARBpsAESarMBNWu0ATtstQEJbbYBCW63AQlvuAEJcLkBCXG7AQlyvQESc74BPHTAAQl1wgESdsMBPXfEAQl4xQEJecYBEnrJAT57ygFCfMwBBn3NAQZ-zwEGf9ABBoAB0QEGgQHTAQaCAdUBEoMB1gFDhAHYAQaFAdoBEoYB2wFEhwHcAQaIAd0BBokB3gESigHhAUWLAeIBS4wB4wEKjQHkAQqOAeUBCo8B5gEKkAHnAQqRAekBCpIB6wESkwHsAUyUAe4BCpUB8AESlgHxAU2XAfIBCpgB8wEKmQH0ARKaAfcBTpsB-AFUnAH6AQSdAfsBBJ4B_QEEnwH-AQSgAf8BBKEBgQIEogGDAhKjAYQCVaQBhgIEpQGIAhKmAYkCVqcBigIEqAGLAgSpAYwCEqoBjwJXqwGQAlusAZICBa0BkwIFrgGVAgWvAZYCBbABlwIFsQGZAgWyAZsCErMBnAJctAGeAgW1AaACErYBoQJdtwGiAgW4AaMCBbkBpAISugGnAl67AagCYrwBqQILvQGqAgu-AasCC78BrAILwAGtAgvBAa8CC8IBsQISwwGyAmPEAbQCC8UBtgISxgG3AmTHAbgCC8gBuQILyQG6AhLKAb0CZcsBvgJpzAG_AgzNAcACDM4BwQIMzwHCAgzQAcMCDNEBxQIM0gHHAhLTAcgCatQBygIM1QHMAhLWAc0Ca9cBzgIM2AHPAgzZAdACEtoB0wJs2wHUAnLcAdUCDd0B1gIN3gHXAg3fAdgCDeAB2QIN4QHbAg3iAd0CEuMB3gJz5AHgAg3lAeICEuYB4wJ05wHkAg3oAeUCDekB5gIS6gHpAnXrAeoCe-wB6wIO7QHsAg7uAe0CDu8B7gIO8AHvAg7xAfECDvIB8wIS8wH0Anz0AfYCDvUB-AIS9gH5An33AfoCDvgB-wIO-QH8AhL6Af8CfvsBgAOCAfwBggODAf0BgwODAf4BhgODAf8BhwODAYACiAODAYECigODAYICjAMSgwKNA4QBhAKPA4MBhQKRAxKGApIDhQGHApMDgwGIApQDgwGJApUDEooCmAOGAYsCmQOKAYwCmwMHjQKcAweOAp4DB48CnwMHkAKgAweRAqIDB5ICpAMSkwKlA4sBlAKnAweVAqkDEpYCqgOMAZcCqwMHmAKsAweZAq0DEpoCsAONAZsCsQORAZwCswOSAZ0CtAOSAZ4CtwOSAZ8CuAOSAaACuQOSAaECuwOSAaICvQMSowK-A5MBpALAA5IBpQLCAxKmAsMDlAGnAsQDkgGoAsUDkgGpAsYDEqoCyQOVAasCygObAawCywMPrQLMAw-uAs0DD68CzgMPsALPAw-xAtEDD7IC0wMSswLUA5wBtALWAw-1AtgDErYC2QOdAbcC2gMPuALbAw-5AtwDEroC3wOeAbsC4AOkAQ"
39
+ };
40
+ async function decodeBase64AsWasm(wasmBase64) {
41
+ const { Buffer: Buffer2 } = await import("buffer");
42
+ const wasmArray = Buffer2.from(wasmBase64, "base64");
43
+ return new WebAssembly.Module(wasmArray);
44
+ }
45
+ config.compilerWasm = {
46
+ getRuntime: async () => await import("@prisma/client/runtime/query_compiler_fast_bg.postgresql.mjs"),
47
+ getQueryCompilerWasmModule: async () => {
48
+ const { wasm } = await import("@prisma/client/runtime/query_compiler_fast_bg.postgresql.wasm-base64.mjs");
49
+ return await decodeBase64AsWasm(wasm);
50
+ },
51
+ importName: "./query_compiler_fast_bg.js"
52
+ };
53
+ function getPrismaClientClass() {
54
+ return runtime.getPrismaClient(config);
55
+ }
56
+
57
+ // src/generated/prisma/internal/prismaNamespace.ts
58
+ import * as runtime2 from "@prisma/client/runtime/client";
59
+ var getExtensionContext = runtime2.Extensions.getExtensionContext;
60
+ var NullTypes2 = {
61
+ DbNull: runtime2.NullTypes.DbNull,
62
+ JsonNull: runtime2.NullTypes.JsonNull,
63
+ AnyNull: runtime2.NullTypes.AnyNull
64
+ };
65
+ var TransactionIsolationLevel = runtime2.makeStrictEnum({
66
+ ReadUncommitted: "ReadUncommitted",
67
+ ReadCommitted: "ReadCommitted",
68
+ RepeatableRead: "RepeatableRead",
69
+ Serializable: "Serializable"
70
+ });
71
+ var defineExtension = runtime2.Extensions.defineExtension;
72
+
73
+ // src/generated/prisma/client.ts
74
+ globalThis["__dirname"] = path.dirname(fileURLToPath(import.meta.url));
75
+ var PrismaClient = getPrismaClientClass();
76
+
77
+ // src/lib/db.ts
78
+ import { PrismaPg } from "@prisma/adapter-pg";
79
+ function createPrismaClient() {
80
+ const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL });
81
+ return new PrismaClient({ adapter });
82
+ }
83
+ var globalForPrisma = globalThis;
84
+ var prisma = globalForPrisma.prisma ?? createPrismaClient();
85
+ if (process.env.NODE_ENV !== "production") {
86
+ globalForPrisma.prisma = prisma;
87
+ }
88
+
89
+ // src/lib/wallet-store.ts
90
+ var ALGORITHM = "aes-256-gcm";
91
+ var IV_LENGTH = 12;
92
+ var SALT_LENGTH = 16;
93
+ function deriveKey(encryptionKey, salt) {
94
+ return crypto.scryptSync(encryptionKey, salt, 32);
95
+ }
96
+ function encrypt(plaintext, encryptionKey) {
97
+ const salt = crypto.randomBytes(SALT_LENGTH);
98
+ const key = deriveKey(encryptionKey, salt);
99
+ const iv = crypto.randomBytes(IV_LENGTH);
100
+ const cipher = crypto.createCipheriv(ALGORITHM, key, iv);
101
+ const encrypted = Buffer.concat([cipher.update(plaintext), cipher.final()]);
102
+ const tag = cipher.getAuthTag();
103
+ return {
104
+ iv: iv.toString("hex"),
105
+ salt: salt.toString("hex"),
106
+ tag: tag.toString("hex"),
107
+ data: encrypted.toString("hex")
108
+ };
109
+ }
110
+ function decrypt(payload, encryptionKey) {
111
+ if (!payload.salt) {
112
+ console.warn("[wallet-store] WARNING: Wallet record missing per-wallet salt \u2014 this should not happen with current code. Refusing to decrypt.");
113
+ throw new Error("Wallet record is missing required salt field");
114
+ }
115
+ const salt = Buffer.from(payload.salt, "hex");
116
+ const key = deriveKey(encryptionKey, salt);
117
+ const iv = Buffer.from(payload.iv, "hex");
118
+ const tag = Buffer.from(payload.tag, "hex");
119
+ const data = Buffer.from(payload.data, "hex");
120
+ const decipher = crypto.createDecipheriv(ALGORITHM, key, iv);
121
+ decipher.setAuthTag(tag);
122
+ return Buffer.concat([decipher.update(data), decipher.final()]);
123
+ }
124
+ function rowToMeta(row) {
125
+ return {
126
+ id: row.id,
127
+ publicKey: row.publicKey,
128
+ createdAt: row.createdAt.toISOString(),
129
+ ...row.label != null ? { label: row.label } : {},
130
+ ...row.rekeyedAt != null ? { rekeyedAt: row.rekeyedAt.toISOString() } : {},
131
+ ...row.isAgent ? { isAgent: true } : {}
132
+ };
133
+ }
134
+ var WalletStore = class {
135
+ constructor(encryptionKey) {
136
+ this.encryptionKey = encryptionKey;
137
+ }
138
+ async save(id, secretKey, publicKey, label, opts) {
139
+ const encrypted = encrypt(Buffer.from(secretKey), this.encryptionKey);
140
+ const row = await prisma.wallet.create({
141
+ data: {
142
+ id,
143
+ publicKey,
144
+ label: label ?? null,
145
+ isAgent: opts?.isAgent ?? false,
146
+ encIv: encrypted.iv,
147
+ encSalt: encrypted.salt,
148
+ encTag: encrypted.tag,
149
+ encData: encrypted.data
150
+ }
151
+ });
152
+ return rowToMeta(row);
153
+ }
154
+ async load(id) {
155
+ const row = await prisma.wallet.findUnique({ where: { id } });
156
+ if (!row) {
157
+ throw new Error(`Wallet not found: ${id}`);
158
+ }
159
+ const payload = {
160
+ iv: row.encIv,
161
+ salt: row.encSalt,
162
+ tag: row.encTag,
163
+ data: row.encData
164
+ };
165
+ const secretKey = decrypt(payload, this.encryptionKey);
166
+ return { meta: rowToMeta(row), secretKey: new Uint8Array(secretKey) };
167
+ }
168
+ async list() {
169
+ const rows = await prisma.wallet.findMany({
170
+ orderBy: { createdAt: "asc" }
171
+ });
172
+ return rows.map(rowToMeta);
173
+ }
174
+ async delete(id) {
175
+ try {
176
+ await prisma.wallet.delete({ where: { id } });
177
+ return true;
178
+ } catch {
179
+ return false;
180
+ }
181
+ }
182
+ /**
183
+ * Re-key a wallet: decrypt with the current encryption key and re-encrypt
184
+ * with fresh random salt + IV, producing a new ciphertext.
185
+ *
186
+ * Security rationale:
187
+ * - Forward secrecy: old captured ciphertext becomes stale after re-key
188
+ * - KDF refresh: allows scrypt iteration parameters to be applied to old wallets
189
+ * - Proactive security: periodic re-keying is a cryptographic best practice
190
+ *
191
+ * The underlying Solana keypair (and therefore public key) does NOT change —
192
+ * only the encryption envelope is replaced with fresh cryptographic material.
193
+ *
194
+ * Returns the rekeyedAt timestamp on success.
195
+ */
196
+ async rekey(id) {
197
+ const row = await prisma.wallet.findUnique({ where: { id } });
198
+ if (!row) {
199
+ throw new Error(`Wallet not found: ${id}`);
200
+ }
201
+ const payload = {
202
+ iv: row.encIv,
203
+ salt: row.encSalt,
204
+ tag: row.encTag,
205
+ data: row.encData
206
+ };
207
+ const secretKey = decrypt(payload, this.encryptionKey);
208
+ const newEncrypted = encrypt(secretKey, this.encryptionKey);
209
+ const rekeyedAt = /* @__PURE__ */ new Date();
210
+ await prisma.wallet.update({
211
+ where: { id },
212
+ data: {
213
+ encIv: newEncrypted.iv,
214
+ encSalt: newEncrypted.salt,
215
+ encTag: newEncrypted.tag,
216
+ encData: newEncrypted.data,
217
+ rekeyedAt
218
+ }
219
+ });
220
+ return { publicKey: row.publicKey, rekeyedAt: rekeyedAt.toISOString() };
221
+ }
222
+ };
223
+
224
+ // src/lib/frost/key-manager.ts
225
+ import crypto2 from "crypto";
226
+ import bs58 from "bs58";
227
+ import {
228
+ generateKeys,
229
+ createFrostConfig,
230
+ split,
231
+ recover,
232
+ verifyKeyPackage
233
+ } from "@substrate-system/frost";
234
+ var ALGORITHM2 = "aes-256-gcm";
235
+ var IV_LENGTH2 = 12;
236
+ var SALT_LENGTH2 = 16;
237
+ function deriveKey2(encryptionKey, salt) {
238
+ return crypto2.scryptSync(encryptionKey, salt, 32);
239
+ }
240
+ function encrypt2(plaintext, encryptionKey) {
241
+ const salt = crypto2.randomBytes(SALT_LENGTH2);
242
+ const key = deriveKey2(encryptionKey, salt);
243
+ const iv = crypto2.randomBytes(IV_LENGTH2);
244
+ const cipher = crypto2.createCipheriv(ALGORITHM2, key, iv);
245
+ const encrypted = Buffer.concat([cipher.update(plaintext), cipher.final()]);
246
+ const tag = cipher.getAuthTag();
247
+ return {
248
+ iv: iv.toString("hex"),
249
+ salt: salt.toString("hex"),
250
+ tag: tag.toString("hex"),
251
+ data: encrypted.toString("hex")
252
+ };
253
+ }
254
+ function decrypt2(payload, encryptionKey) {
255
+ const salt = Buffer.from(payload.salt, "hex");
256
+ const key = deriveKey2(encryptionKey, salt);
257
+ const iv = Buffer.from(payload.iv, "hex");
258
+ const tag = Buffer.from(payload.tag, "hex");
259
+ const data = Buffer.from(payload.data, "hex");
260
+ const decipher = crypto2.createDecipheriv(ALGORITHM2, key, iv);
261
+ decipher.setAuthTag(tag);
262
+ return Buffer.concat([decipher.update(data), decipher.final()]);
263
+ }
264
+ function serializeKeyPackage(kp) {
265
+ return {
266
+ participantId: kp.participantId.id,
267
+ keyShare: {
268
+ participantId: kp.keyShare.participantId.id,
269
+ privateShare: Buffer.from(kp.keyShare.privateShare.value).toString("hex"),
270
+ publicShare: Buffer.from(kp.keyShare.publicShare.point).toString("hex")
271
+ },
272
+ verificationKey: Buffer.from(kp.verificationKey.point).toString("hex")
273
+ };
274
+ }
275
+ function deserializeKeyPackage(s) {
276
+ return {
277
+ participantId: { id: s.participantId },
278
+ keyShare: {
279
+ participantId: { id: s.keyShare.participantId },
280
+ privateShare: {
281
+ value: new Uint8Array(Buffer.from(s.keyShare.privateShare, "hex"))
282
+ },
283
+ publicShare: {
284
+ point: new Uint8Array(Buffer.from(s.keyShare.publicShare, "hex"))
285
+ }
286
+ },
287
+ verificationKey: {
288
+ point: new Uint8Array(Buffer.from(s.verificationKey, "hex"))
289
+ },
290
+ // Signing commitments are generated fresh each ceremony, not stored
291
+ signingCommitments: []
292
+ };
293
+ }
294
+ var FrostKeyManager = class {
295
+ constructor(encryptionKey) {
296
+ this.encryptionKey = encryptionKey;
297
+ }
298
+ /**
299
+ * Generate a new FROST wallet with m-of-n threshold.
300
+ * Uses trusted dealer key generation (Shamir secret sharing).
301
+ */
302
+ async generateWallet(options = {}) {
303
+ const threshold = options.threshold ?? 2;
304
+ const totalShares = options.totalShares ?? 3;
305
+ const labels = options.labels ?? this.defaultLabels(totalShares);
306
+ if (threshold < 2) {
307
+ throw new Error("Threshold must be at least 2");
308
+ }
309
+ if (threshold > totalShares) {
310
+ throw new Error("Threshold cannot exceed total shares");
311
+ }
312
+ if (labels.length !== totalShares) {
313
+ throw new Error(
314
+ `Labels length (${labels.length}) must match totalShares (${totalShares})`
315
+ );
316
+ }
317
+ const config2 = createFrostConfig(threshold, totalShares);
318
+ const { groupPublicKey, keyPackages } = generateKeys(config2);
319
+ const walletId = crypto2.randomUUID().slice(0, 8);
320
+ const groupPKBytes = groupPublicKey.point;
321
+ const groupPKBase58 = bs58.encode(groupPKBytes);
322
+ const now = /* @__PURE__ */ new Date();
323
+ await prisma.frostMeta.create({
324
+ data: {
325
+ walletId,
326
+ groupPublicKey: groupPKBase58,
327
+ threshold,
328
+ totalShares,
329
+ shareLabels: labels,
330
+ label: options.label,
331
+ createdAt: now
332
+ }
333
+ });
334
+ for (let i = 0; i < keyPackages.length; i++) {
335
+ const serialized = serializeKeyPackage(keyPackages[i]);
336
+ const plaintext = Buffer.from(JSON.stringify(serialized));
337
+ const encrypted = encrypt2(plaintext, this.encryptionKey);
338
+ await prisma.frostShare.create({
339
+ data: {
340
+ walletId,
341
+ participantId: keyPackages[i].participantId.id,
342
+ label: labels[i],
343
+ encIv: encrypted.iv,
344
+ encSalt: encrypted.salt,
345
+ encTag: encrypted.tag,
346
+ encData: encrypted.data
347
+ }
348
+ });
349
+ }
350
+ const meta = {
351
+ id: walletId,
352
+ type: "frost",
353
+ groupPublicKey: groupPKBase58,
354
+ threshold,
355
+ totalShares,
356
+ shareLabels: labels,
357
+ createdAt: now.toISOString(),
358
+ label: options.label
359
+ };
360
+ return meta;
361
+ }
362
+ /**
363
+ * Split an existing Ed25519 secret key into FROST shares.
364
+ * The group public key will match the original key's public key.
365
+ */
366
+ async splitExistingKey(secretKey, options = {}) {
367
+ const threshold = options.threshold ?? 2;
368
+ const totalShares = options.totalShares ?? 3;
369
+ const labels = options.labels ?? this.defaultLabels(totalShares);
370
+ if (threshold < 2) {
371
+ throw new Error("Threshold must be at least 2");
372
+ }
373
+ if (threshold > totalShares) {
374
+ throw new Error("Threshold cannot exceed total shares");
375
+ }
376
+ if (labels.length !== totalShares) {
377
+ throw new Error(
378
+ `Labels length (${labels.length}) must match totalShares (${totalShares})`
379
+ );
380
+ }
381
+ const config2 = createFrostConfig(threshold, totalShares);
382
+ const seed = secretKey.length === 64 ? secretKey.slice(0, 32) : secretKey;
383
+ const { groupPublicKey, keyPackages } = await split(seed, config2);
384
+ const walletId = options.walletId ?? crypto2.randomUUID().slice(0, 8);
385
+ const groupPKBase58 = bs58.encode(groupPublicKey.point);
386
+ const now = /* @__PURE__ */ new Date();
387
+ await prisma.frostMeta.create({
388
+ data: {
389
+ walletId,
390
+ groupPublicKey: groupPKBase58,
391
+ threshold,
392
+ totalShares,
393
+ shareLabels: labels,
394
+ label: options.label,
395
+ createdAt: now
396
+ }
397
+ });
398
+ for (let i = 0; i < keyPackages.length; i++) {
399
+ const serialized = serializeKeyPackage(keyPackages[i]);
400
+ const plaintext = Buffer.from(JSON.stringify(serialized));
401
+ const encrypted = encrypt2(plaintext, this.encryptionKey);
402
+ await prisma.frostShare.create({
403
+ data: {
404
+ walletId,
405
+ participantId: keyPackages[i].participantId.id,
406
+ label: labels[i],
407
+ encIv: encrypted.iv,
408
+ encSalt: encrypted.salt,
409
+ encTag: encrypted.tag,
410
+ encData: encrypted.data
411
+ }
412
+ });
413
+ }
414
+ const meta = {
415
+ id: walletId,
416
+ type: "frost",
417
+ groupPublicKey: groupPKBase58,
418
+ threshold,
419
+ totalShares,
420
+ shareLabels: labels,
421
+ createdAt: now.toISOString(),
422
+ label: options.label
423
+ };
424
+ return meta;
425
+ }
426
+ /**
427
+ * Load a participant's KeyPackage (decrypted) for ceremony participation.
428
+ */
429
+ async loadShare(walletId, participantId) {
430
+ const record = await prisma.frostShare.findUnique({
431
+ where: { walletId_participantId: { walletId, participantId } }
432
+ });
433
+ if (!record) {
434
+ throw new Error(
435
+ `Share not found: wallet=${walletId}, participant=${participantId}`
436
+ );
437
+ }
438
+ const encrypted = {
439
+ iv: record.encIv,
440
+ salt: record.encSalt,
441
+ tag: record.encTag,
442
+ data: record.encData
443
+ };
444
+ const plaintext = decrypt2(encrypted, this.encryptionKey);
445
+ const serialized = JSON.parse(plaintext.toString());
446
+ return deserializeKeyPackage(serialized);
447
+ }
448
+ /**
449
+ * Load all shares for a wallet (for recovery or refresh).
450
+ */
451
+ async loadAllShares(walletId) {
452
+ const meta = await this.getWallet(walletId);
453
+ const packages = [];
454
+ for (let i = 1; i <= meta.totalShares; i++) {
455
+ packages.push(await this.loadShare(walletId, i));
456
+ }
457
+ return packages;
458
+ }
459
+ /**
460
+ * Load the FrostConfig for a wallet.
461
+ */
462
+ async loadConfig(walletId) {
463
+ const meta = await this.getWallet(walletId);
464
+ return createFrostConfig(meta.threshold, meta.totalShares);
465
+ }
466
+ /**
467
+ * Load the group public key as a GroupElement.
468
+ */
469
+ async loadGroupPublicKey(walletId) {
470
+ const meta = await this.getWallet(walletId);
471
+ const bytes = bs58.decode(meta.groupPublicKey);
472
+ return { point: new Uint8Array(bytes) };
473
+ }
474
+ /**
475
+ * Get wallet metadata (no secrets).
476
+ */
477
+ async getWallet(walletId) {
478
+ const record = await prisma.frostMeta.findUnique({
479
+ where: { walletId }
480
+ });
481
+ if (!record) {
482
+ throw new Error(`FROST wallet not found: ${walletId}`);
483
+ }
484
+ return {
485
+ id: record.walletId,
486
+ type: "frost",
487
+ groupPublicKey: record.groupPublicKey,
488
+ threshold: record.threshold,
489
+ totalShares: record.totalShares,
490
+ shareLabels: record.shareLabels,
491
+ createdAt: record.createdAt.toISOString(),
492
+ label: record.label ?? void 0,
493
+ lastRefreshAt: record.lastRefreshAt?.toISOString()
494
+ };
495
+ }
496
+ /**
497
+ * List all FROST wallets.
498
+ */
499
+ async listWallets() {
500
+ const records = await prisma.frostMeta.findMany();
501
+ return records.map((record) => ({
502
+ id: record.walletId,
503
+ type: "frost",
504
+ groupPublicKey: record.groupPublicKey,
505
+ threshold: record.threshold,
506
+ totalShares: record.totalShares,
507
+ shareLabels: record.shareLabels,
508
+ createdAt: record.createdAt.toISOString(),
509
+ label: record.label ?? void 0,
510
+ lastRefreshAt: record.lastRefreshAt?.toISOString()
511
+ }));
512
+ }
513
+ /**
514
+ * Delete a FROST wallet and all its shares.
515
+ */
516
+ async deleteWallet(walletId) {
517
+ const record = await prisma.frostMeta.findUnique({
518
+ where: { walletId }
519
+ });
520
+ if (!record) return false;
521
+ await prisma.frostShare.deleteMany({
522
+ where: { walletId }
523
+ });
524
+ await prisma.frostMeta.delete({
525
+ where: { walletId }
526
+ });
527
+ return true;
528
+ }
529
+ /**
530
+ * Verify all shares for a wallet are valid.
531
+ */
532
+ async verifyShares(walletId) {
533
+ const config2 = await this.loadConfig(walletId);
534
+ const shares = await this.loadAllShares(walletId);
535
+ return shares.every((kp) => verifyKeyPackage(kp, config2));
536
+ }
537
+ /**
538
+ * Recover the group secret from threshold shares and re-split
539
+ * with fresh randomness. The group public key does NOT change.
540
+ */
541
+ async refreshShares(walletId) {
542
+ const meta = await this.getWallet(walletId);
543
+ const config2 = await this.loadConfig(walletId);
544
+ const allShares = await this.loadAllShares(walletId);
545
+ const recoveredKey = recover(
546
+ allShares.slice(0, meta.threshold),
547
+ config2
548
+ );
549
+ const { groupPublicKey, keyPackages } = await split(recoveredKey, config2);
550
+ const newPKBase58 = bs58.encode(groupPublicKey.point);
551
+ if (newPKBase58 !== meta.groupPublicKey) {
552
+ throw new Error(
553
+ "Group public key changed during refresh \u2014 this should not happen"
554
+ );
555
+ }
556
+ for (let i = 0; i < keyPackages.length; i++) {
557
+ const serialized = serializeKeyPackage(keyPackages[i]);
558
+ const plaintext = Buffer.from(JSON.stringify(serialized));
559
+ const encrypted = encrypt2(plaintext, this.encryptionKey);
560
+ await prisma.frostShare.update({
561
+ where: {
562
+ walletId_participantId: {
563
+ walletId,
564
+ participantId: keyPackages[i].participantId.id
565
+ }
566
+ },
567
+ data: {
568
+ encIv: encrypted.iv,
569
+ encSalt: encrypted.salt,
570
+ encTag: encrypted.tag,
571
+ encData: encrypted.data
572
+ }
573
+ });
574
+ }
575
+ const now = /* @__PURE__ */ new Date();
576
+ await prisma.frostMeta.update({
577
+ where: { walletId },
578
+ data: { lastRefreshAt: now }
579
+ });
580
+ const updatedMeta = {
581
+ ...meta,
582
+ lastRefreshAt: now.toISOString()
583
+ };
584
+ return updatedMeta;
585
+ }
586
+ defaultLabels(count) {
587
+ if (count === 3) return ["agent", "policy", "backup"];
588
+ return Array.from({ length: count }, (_, i) => `participant-${i + 1}`);
589
+ }
590
+ };
591
+
592
+ // src/lib/frost/ceremony.ts
593
+ import {
594
+ FrostSigner,
595
+ FrostCoordinator
596
+ } from "@substrate-system/frost";
597
+ var CEREMONY_TIMEOUT_MS = 6e4;
598
+ var FrostCeremony = class {
599
+ constructor(keyManager, policyChecker, timeoutMs = CEREMONY_TIMEOUT_MS) {
600
+ this.keyManager = keyManager;
601
+ this.policyChecker = policyChecker;
602
+ this.timeoutMs = timeoutMs;
603
+ }
604
+ /**
605
+ * Execute a complete FROST signing ceremony.
606
+ *
607
+ * Returns a standard 64-byte Ed25519 signature that Solana validators
608
+ * verify identically to any single-signer signature.
609
+ */
610
+ async sign(request) {
611
+ const start = performance.now();
612
+ const { walletId, message, participantIds, intent } = request;
613
+ const config2 = await this.keyManager.loadConfig(walletId);
614
+ const groupPK = await this.keyManager.loadGroupPublicKey(walletId);
615
+ const meta = await this.keyManager.getWallet(walletId);
616
+ if (participantIds.length < meta.threshold) {
617
+ throw new Error(
618
+ `Insufficient participants: need ${meta.threshold}, got ${participantIds.length}`
619
+ );
620
+ }
621
+ for (const pid of participantIds) {
622
+ if (pid < 1 || pid > meta.totalShares) {
623
+ throw new Error(
624
+ `Invalid participant ID ${pid}: must be 1\u2013${meta.totalShares}`
625
+ );
626
+ }
627
+ }
628
+ let policyCheck;
629
+ if (this.policyChecker) {
630
+ policyCheck = this.policyChecker.check(message, intent, walletId);
631
+ if (!policyCheck.approved) {
632
+ throw new FrostCeremonyAbortedError(
633
+ `Policy check failed: ${policyCheck.reason ?? "unknown reason"}`,
634
+ policyCheck
635
+ );
636
+ }
637
+ }
638
+ const keyPackages = await Promise.all(
639
+ participantIds.map((pid) => this.keyManager.loadShare(walletId, pid))
640
+ );
641
+ const signers = keyPackages.map((kp) => new FrostSigner(kp, config2));
642
+ const coordinator = new FrostCoordinator(config2);
643
+ const round1Outputs = signers.map((s) => s.sign_round1());
644
+ const commitmentShares = round1Outputs.map((out, i) => ({
645
+ participantId: keyPackages[i].participantId,
646
+ commitment: out.commitment
647
+ }));
648
+ const signingPackage = await coordinator.createSigningPackage(
649
+ message,
650
+ commitmentShares,
651
+ keyPackages.map((kp) => kp.participantId),
652
+ groupPK
653
+ );
654
+ const round2Promise = Promise.all(
655
+ signers.map(
656
+ (signer, i) => signer.sign_round2(signingPackage, round1Outputs[i].nonces, groupPK)
657
+ )
658
+ );
659
+ const round2Outputs = await Promise.race([
660
+ round2Promise,
661
+ new Promise(
662
+ (_, reject) => setTimeout(
663
+ () => reject(new FrostCeremonyTimeoutError(this.timeoutMs)),
664
+ this.timeoutMs
665
+ )
666
+ )
667
+ ]);
668
+ const signatureShares = round2Outputs.map((out) => out.signatureShare);
669
+ const signature = coordinator.aggregateSignatures(
670
+ signingPackage,
671
+ signatureShares
672
+ );
673
+ const valid = await coordinator.verify(signature, message, groupPK);
674
+ if (!valid) {
675
+ throw new Error(
676
+ "FROST signature verification failed after aggregation"
677
+ );
678
+ }
679
+ const ceremonyDurationMs = Math.round(performance.now() - start);
680
+ return {
681
+ signature,
682
+ groupPublicKey: new Uint8Array(groupPK.point),
683
+ ceremonyDurationMs,
684
+ policyCheck
685
+ };
686
+ }
687
+ };
688
+ var FrostCeremonyAbortedError = class extends Error {
689
+ constructor(message, policyCheck) {
690
+ super(message);
691
+ this.name = "FrostCeremonyAbortedError";
692
+ this.policyCheck = policyCheck;
693
+ }
694
+ };
695
+ var FrostCeremonyTimeoutError = class extends Error {
696
+ constructor(timeoutMs) {
697
+ super(`FROST signing ceremony timed out after ${timeoutMs}ms`);
698
+ this.name = "FrostCeremonyTimeoutError";
699
+ this.timeoutMs = timeoutMs;
700
+ }
701
+ };
702
+
703
+ // src/lib/frost/solana-signer.ts
704
+ import { PublicKey } from "@solana/web3.js";
705
+ var FrostSolanaSigner = class {
706
+ constructor(ceremony, walletId, participantIds, groupPublicKeyBytes) {
707
+ this.ceremony = ceremony;
708
+ this.walletId = walletId;
709
+ this.participantIds = participantIds;
710
+ this.publicKey = new PublicKey(groupPublicKeyBytes);
711
+ }
712
+ /**
713
+ * Sign a Solana transaction using a FROST ceremony.
714
+ *
715
+ * 1. Serialize the transaction message
716
+ * 2. Run FROST ceremony on the message bytes
717
+ * 3. Inject the 64-byte signature into the transaction
718
+ */
719
+ async signTransaction(tx, intent) {
720
+ const message = tx.serializeMessage();
721
+ const { signature } = await this.ceremony.sign({
722
+ walletId: this.walletId,
723
+ message,
724
+ participantIds: this.participantIds,
725
+ intent
726
+ });
727
+ tx.addSignature(this.publicKey, Buffer.from(signature));
728
+ return tx;
729
+ }
730
+ /**
731
+ * Sign raw message bytes (for non-transaction use cases).
732
+ */
733
+ async sign(message) {
734
+ const { signature } = await this.ceremony.sign({
735
+ walletId: this.walletId,
736
+ message,
737
+ participantIds: this.participantIds
738
+ });
739
+ return signature;
740
+ }
741
+ };
742
+
743
+ // src/lib/wallet-manager.ts
744
+ var WALLET_ID_PATTERN = /^[a-f0-9-]{8}$/;
745
+ var WalletManager = class {
746
+ constructor(encryptionKey, rpcUrl) {
747
+ this.store = new WalletStore(encryptionKey);
748
+ this.encryptionKey = encryptionKey;
749
+ this.rpcUrl = rpcUrl;
750
+ this.connection = new Connection(rpcUrl, "confirmed");
751
+ }
752
+ validateId(id) {
753
+ if (!WALLET_ID_PATTERN.test(id)) {
754
+ throw new Error(`Invalid wallet ID format: ${id}`);
755
+ }
756
+ }
757
+ async createWallet(label, opts) {
758
+ const keypair = Keypair.generate();
759
+ const id = crypto3.randomUUID().slice(0, 8);
760
+ return await this.store.save(
761
+ id,
762
+ keypair.secretKey,
763
+ keypair.publicKey.toBase58(),
764
+ label,
765
+ opts
766
+ );
767
+ }
768
+ async importWallet(secretKeyBase58, label, opts) {
769
+ let secretKey;
770
+ try {
771
+ secretKey = bs582.decode(secretKeyBase58);
772
+ } catch {
773
+ throw new Error("Invalid secret key: not valid base58");
774
+ }
775
+ if (secretKey.length !== 64) {
776
+ throw new Error(
777
+ `Invalid secret key: expected 64 bytes, got ${secretKey.length}`
778
+ );
779
+ }
780
+ const keypair = Keypair.fromSecretKey(secretKey);
781
+ const id = crypto3.randomUUID().slice(0, 8);
782
+ return await this.store.save(
783
+ id,
784
+ keypair.secretKey,
785
+ keypair.publicKey.toBase58(),
786
+ label,
787
+ opts
788
+ );
789
+ }
790
+ async getKeypairWallet(id) {
791
+ this.validateId(id);
792
+ const { secretKey } = await this.store.load(id);
793
+ const keypair = Keypair.fromSecretKey(secretKey);
794
+ return new KeypairWallet(keypair, this.rpcUrl);
795
+ }
796
+ async getKeypair(id) {
797
+ this.validateId(id);
798
+ const { secretKey } = await this.store.load(id);
799
+ return Keypair.fromSecretKey(secretKey);
800
+ }
801
+ async listWallets() {
802
+ return await this.store.list();
803
+ }
804
+ async getWallet(id) {
805
+ this.validateId(id);
806
+ const { meta } = await this.store.load(id);
807
+ return meta;
808
+ }
809
+ async deleteWallet(id) {
810
+ this.validateId(id);
811
+ return await this.store.delete(id);
812
+ }
813
+ /** Check if the configured RPC URL points to devnet or a local validator. */
814
+ isDevnet() {
815
+ return /devnet|localhost|127\.0\.0\.1/.test(this.rpcUrl);
816
+ }
817
+ /**
818
+ * Best-effort airdrop on devnet/localhost.
819
+ * Skips tx confirmation for speed — balance updates within seconds.
820
+ * Returns airdrop info on success, undefined on failure or non-devnet.
821
+ */
822
+ async tryAutoAirdrop(publicKeyStr, solAmount = 1) {
823
+ if (!this.isDevnet()) return void 0;
824
+ let timer;
825
+ try {
826
+ const pubkey = new PublicKey2(publicKeyStr);
827
+ const clamped = Math.max(0.1, Math.min(solAmount, 2));
828
+ const lamports = Math.round(clamped * LAMPORTS_PER_SOL);
829
+ const signature = await Promise.race([
830
+ this.connection.requestAirdrop(pubkey, lamports),
831
+ new Promise((_, reject) => {
832
+ timer = setTimeout(() => reject(new Error("Airdrop timeout")), 1e4);
833
+ })
834
+ ]);
835
+ return { signature, amount: clamped };
836
+ } catch {
837
+ return void 0;
838
+ } finally {
839
+ if (timer) clearTimeout(timer);
840
+ }
841
+ }
842
+ /** Create a new wallet and auto-airdrop devnet SOL (best-effort). */
843
+ async createWalletWithAirdrop(label, airdropSol = 1, opts) {
844
+ const wallet = await this.createWallet(label, opts);
845
+ const airdrop = await this.tryAutoAirdrop(wallet.publicKey, airdropSol);
846
+ return { wallet, airdrop };
847
+ }
848
+ async getBalance(publicKeyStr) {
849
+ const pubkey = new PublicKey2(publicKeyStr);
850
+ const lamports = await this.connection.getBalance(pubkey);
851
+ return lamports / LAMPORTS_PER_SOL;
852
+ }
853
+ async getTokenBalances(publicKeyStr) {
854
+ const pubkey = new PublicKey2(publicKeyStr);
855
+ const tokenAccounts = await this.connection.getParsedTokenAccountsByOwner(
856
+ pubkey,
857
+ { programId: TOKEN_PROGRAM_ID }
858
+ );
859
+ return tokenAccounts.value.map((account) => {
860
+ const parsed = account.account.data.parsed.info;
861
+ const amount = parsed.tokenAmount;
862
+ return {
863
+ mint: parsed.mint,
864
+ balance: Number(amount.uiAmount),
865
+ decimals: amount.decimals
866
+ };
867
+ }).filter((t) => t.balance > 0);
868
+ }
869
+ async requestAirdrop(publicKeyStr, solAmount = 1) {
870
+ const pubkey = new PublicKey2(publicKeyStr);
871
+ const clamped = Math.max(0.1, Math.min(solAmount, 2));
872
+ const lamports = Math.round(clamped * LAMPORTS_PER_SOL);
873
+ const signature = await this.connection.requestAirdrop(pubkey, lamports);
874
+ await this.connection.confirmTransaction(signature, "confirmed");
875
+ return signature;
876
+ }
877
+ /**
878
+ * Re-key a wallet's encryption envelope.
879
+ * Decrypts the stored keypair and re-encrypts it with fresh cryptographic
880
+ * material (new scrypt salt + AES-GCM IV) under the same master key.
881
+ *
882
+ * The Solana public key is unchanged — only the ciphertext is rotated.
883
+ * This provides forward secrecy: old captured ciphertext cannot be replayed
884
+ * after re-keying.
885
+ */
886
+ async rekeyWallet(id) {
887
+ this.validateId(id);
888
+ const { publicKey, rekeyedAt } = await this.store.rekey(id);
889
+ return { walletId: id, publicKey, rekeyedAt };
890
+ }
891
+ // --- FROST Threshold Wallet Methods ---
892
+ /** Create a new FROST threshold wallet (m-of-n). */
893
+ async createFrostWallet(options) {
894
+ const fkm = new FrostKeyManager(this.encryptionKey);
895
+ return await fkm.generateWallet(options);
896
+ }
897
+ /** Create a FROST wallet from a deterministic seed (e.g. derived from Google sub). */
898
+ async createFrostWalletFromSeed(seed, options) {
899
+ const fkm = new FrostKeyManager(this.encryptionKey);
900
+ return fkm.splitExistingKey(seed, options);
901
+ }
902
+ /** Get a FrostSolanaSigner for signing Solana transactions via FROST ceremony. */
903
+ async getFrostSigner(walletId, participantIds, policyChecker) {
904
+ const fkm = new FrostKeyManager(this.encryptionKey);
905
+ const meta = await fkm.getWallet(walletId);
906
+ const groupPK = await fkm.loadGroupPublicKey(walletId);
907
+ const ceremony = new FrostCeremony(fkm, policyChecker);
908
+ return new FrostSolanaSigner(
909
+ ceremony,
910
+ walletId,
911
+ participantIds ?? Array.from({ length: meta.threshold }, (_, i) => i + 1),
912
+ groupPK.point
913
+ );
914
+ }
915
+ /** Get FROST wallet metadata (no secrets). */
916
+ async getFrostWallet(walletId) {
917
+ const fkm = new FrostKeyManager(this.encryptionKey);
918
+ return await fkm.getWallet(walletId);
919
+ }
920
+ /** List all FROST wallets. */
921
+ async listFrostWallets() {
922
+ const fkm = new FrostKeyManager(this.encryptionKey);
923
+ return await fkm.listWallets();
924
+ }
925
+ /** Delete a FROST wallet and all its shares. */
926
+ async deleteFrostWallet(walletId) {
927
+ const fkm = new FrostKeyManager(this.encryptionKey);
928
+ return await fkm.deleteWallet(walletId);
929
+ }
930
+ /** Refresh (re-split) FROST shares with fresh randomness. Group public key unchanged. */
931
+ async refreshFrostShares(walletId) {
932
+ const fkm = new FrostKeyManager(this.encryptionKey);
933
+ return fkm.refreshShares(walletId);
934
+ }
935
+ /** Verify all FROST shares for a wallet are valid. */
936
+ async verifyFrostShares(walletId) {
937
+ const fkm = new FrostKeyManager(this.encryptionKey);
938
+ return await fkm.verifyShares(walletId);
939
+ }
940
+ };
941
+
942
+ export {
943
+ prisma,
944
+ WalletManager
945
+ };
946
+ //# sourceMappingURL=chunk-AAYS2L5P.js.map